Martin Sivák has uploaded a new change for review. Change subject: Fix the CPU quota MOM policy computations ......................................................................
Fix the CPU quota MOM policy computations This changes the way we compute period and quota to what is described in the documentation: The maximum CPU load percentage is related to the total computing power the host has. Two issues are also fixed by this: - the period could get below 1000 with low enough percentage or high enough vCPU count and libvirt won't accept that - the quota number was higher than period when vCPU count was lower than the number of physical CPUs, effectively disabling the CPU limits Change-Id: Ia1f014d1b4058ef447a962cbda3336115e8610dc Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1207610 Signed-off-by: Martin Sivak <[email protected]> --- M vdsm/mom.d/04-cputune.policy 1 file changed, 26 insertions(+), 8 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/11/39411/1 diff --git a/vdsm/mom.d/04-cputune.policy b/vdsm/mom.d/04-cputune.policy index 75ae9c9..afdab23 100644 --- a/vdsm/mom.d/04-cputune.policy +++ b/vdsm/mom.d/04-cputune.policy @@ -1,23 +1,42 @@ ### Auto-CpuTune ############################################################### -(defvar anchor 100000) +# Default quota turns off the CPU limits (defvar defaultQuota -1) -(defvar defaultPeriod 1000) -(defvar calcPeriod (/ anchor Host.cpu_count)) +# The default measurement period in us -> 100ms +(defvar defaultPeriod 100000) + ### Helper functions (def check_and_set_quota (guest) { + # The maximum amount of CPU time the VM can use in total + # = Measuring interval * number of physical CPUs * Maximum load + # + # Maximum load is expressed as a percent of the total processing + # capability available to the host (RHEV Admin guide 10.5.7) + (defvar maxCpuTime (* (/ guest.vcpu_user_limit 100.0) (* defaultPeriod Host.cpu_count))) - (defvar calcQuota (/ (* anchor (/ guest.vcpu_user_limit 100.0)) guest.vcpu_count)) + # Distribute the allocated time between the configured vCPUs + (defvar calcQuota (/ maxCpuTime guest.vcpu_count) + + # Time amount multiplier, default is 1 = use the computed values + # Higher values are used when low percentages or high amount of vCPUs cause + # the calcQuota to get below the allowed limit of 1000. This slows down + # the reaction time, but allows enough time to measure such small load + # percentages (and makes libvirt happy) + (if (> calcQuota 1000) { + (defvar timeMultiplier 1) + } { + (defvar timeMultiplier 1 + (/ 1000 calcQuota)) + }) + + (set calcQuota (* timeMultiplier calcQuota)) + (set calcPeriod (* timeMultiplier calcPeriod)) (if (!= guest.vcpu_quota calcQuota) (guest.Control "vcpu_quota" calcQuota) 0) -}) -(def check_and_set_period (guest) -{ (if (!= guest.vcpu_period calcPeriod) (guest.Control "vcpu_period" calcPeriod) 0) }) @@ -41,7 +60,6 @@ (if (== True cpuTuneEnabled) { (with Guests guest (check_and_set_quota guest)) - (with Guests guest (check_and_set_period guest)) } { (with Guests guest (reset_quota_and_period guest)) }) -- To view, visit https://gerrit.ovirt.org/39411 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia1f014d1b4058ef447a962cbda3336115e8610dc Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Martin Sivák <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
