From da0c1cec2291c53cfdfed438e26e1e05446f8089 Mon Sep 17 00:00:00 2001 From: wescoeur Date: Thu, 17 Mar 2016 11:01:12 +0100 Subject: [PATCH] Fix cpu average. Use the cpu number of host and vm. --- packages/xo-server-load-balancer/src/index.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/xo-server-load-balancer/src/index.js b/packages/xo-server-load-balancer/src/index.js index 51dc4c077..36e75f218 100644 --- a/packages/xo-server-load-balancer/src/index.js +++ b/packages/xo-server-load-balancer/src/index.js @@ -208,6 +208,7 @@ function computeRessourcesAverage (objects, objectsStats, nPoints) { objectAverages.cpu = computeAverage( mapToArray(stats.cpus, cpu => computeAverage(cpu, nPoints)) ) + objectAverages.nCpus = stats.cpus.length objectAverages.memoryFree = computeAverage(stats.memoryFree, nPoints) objectAverages.memory = computeAverage(stats.memory, nPoints) @@ -230,9 +231,10 @@ function computeRessourcesAverageWithWeight (averages1, averages2, ratio) { return averages } -function setRealCpuAverageOfVms (vms, vmsAverages) { +function setRealCpuAverageOfVms (vms, vmsAverages, nCpus) { for (const vm of vms) { - vmsAverages[vm.id].cpu /= vm.CPUs.number + const averages = vmsAverages[vm.id] + averages.cpu *= averages.nCpus / nCpus } } @@ -390,7 +392,7 @@ class Plan { return vmsStats } - async _getVmsAverages (vms) { + async _getVmsAverages (vms, host) { const vmsStats = await this._getVmsStats(vms, 'minutes') const vmsAverages = computeRessourcesAverageWithWeight( computeRessourcesAverage(vms, vmsStats, EXECUTION_DELAY), @@ -399,7 +401,7 @@ class Plan { ) // Compute real CPU usage. Virtuals cpus to reals cpus. - setRealCpuAverageOfVms(vms, vmsAverages) + setRealCpuAverageOfVms(vms, vmsAverages, host.CPUs.cpu_count) return vmsAverages } @@ -453,7 +455,7 @@ class PerformancePlan extends Plan { async _optimize ({ exceededHost, hosts, hostsAverages }) { const vms = await this._getVms(exceededHost.id) - const vmsAverages = await this._getVmsAverages(vms) + const vmsAverages = await this._getVmsAverages(vms, exceededHost) // Sort vms by cpu usage. (higher to lower) vms.sort((a, b) =>