| Input: Cpu& Memory Usages Set (CpuUsage& MemoryUsage) //Actual And Predicted Datasets Cpu& Memory Provisioning Set (Cpuprovisioning& Memoryprovisioning) |
| Constant Input: Cpu& Memory Executioncost (Cpuexecutioncost&Memoryexecutioncost) |
| Fixed Penalty Cost |
| Principal // Principal is the Rework Cost of VM |
| Output: Actual Utility/Predicted Utility Of VM |
| Utility (CpuUsage, MemoryUsage, Cpuprovisioning, Memoryprovisioning) |
| 1. Initialize: Interest =0 |
| 2. Penalty =0 |
| 3. For (Each Time Stamp) |
| 4. Cpucost = Cpuusage * Cpuexecutioncost |
| 5. Memorycost = Memoryusage* Memoryexecutioncost |
| 6. Current Utility = Cpucost + Memorycost //Calculating VM Running Cost |
| 7. Debtmemory = (Current Memoryprovisioning - Memoryusage) * Memoryexecutioncost |
| 8. Debtcpu = (Current Cpuprovisioning - Cpuusage) * Cpuexecutioncost |
| 9. If ((Cpuprovisioning + Memoryprovisioning) > (CpuUsage+ MemoryUsage)) // Over-Provisioning |
| 10. Interest =Debtcpu + Debtmemory |
| 11. Else // Under-Provisioning |
| 12. % of Penalty =100 – ((CpuUsage / Cpuprovisioning) + (Memory Usage / Memory Provisioning))*50 |
| 13. Penalty = Fixed Penalty Cost * (% Of Penalty) |
| 14. End If |
| 15. Total Debt = Interest + Penalty + Principal // For Actual/Predicted Datasets |
| 16. Actual Utility = Current Utility - Penalty // Generates Actual Utility |
| 17. Predicted Utility = Current Utility - Technical Debt // Generates Predicted Utility |
| 18. End For |