Martin Sivák has uploaded a new change for review.
Change subject: Add support for direct setting of cpu_shares when creating a VM
......................................................................
Add support for direct setting of cpu_shares when creating a VM
This adds new API field to the Vm structures. The new field
'cpuShares' will override the old 'nice' when used.
Change-Id: I7ef73cf0579a0efd5a31c32638efcc6cdf2447d7
Signed-off-by: Martin Sivak <msivak(a)redhat.com>
---
M vdsm/vm.py
M vdsm_api/vdsmapi-schema.json
2 files changed, 15 insertions(+), 4 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/03/17603/1
diff --git a/vdsm/vm.py b/vdsm/vm.py
index 4333170..2440557 100644
--- a/vdsm/vm.py
+++ b/vdsm/vm.py
@@ -2805,8 +2805,15 @@
nice = int(self.conf.get('nice', '0'))
nice = max(min(nice, 19), 0)
+
+ # if cpu_shares weren't configured we derive the value from the
+ # niceness, cpu_shares has not unit, it is only meaningful when
+ # compared to other VMs (and can't be negative)
+ cpu_shares = int(self.conf.get('cpuShares', str((20 - nice) * 51)))
+ cpu_shares = max(cpu_shares, 0)
+
try:
- self._dom.setSchedulerParameters({'cpu_shares': (20 - nice) * 51})
+ self._dom.setSchedulerParameters({'cpu_shares': cpu_shares})
except:
self.log.warning('failed to set Vm niceness', exc_info=True)
diff --git a/vdsm_api/vdsmapi-schema.json b/vdsm_api/vdsmapi-schema.json
index 73963cf..9430148 100644
--- a/vdsm_api/vdsmapi-schema.json
+++ b/vdsm_api/vdsmapi-schema.json
@@ -2629,6 +2629,8 @@
#
# @clientIp: The IP address of the client connected to the display
#
+# @cpuShares: The host scheduling priority (relative to other VMs)
+#
# @cpuType: #optional The type of CPU being emulated
# special values 'hostPassthrough' and
'hostModel'
# are reserved for host-passthrough and host-mode cpu
@@ -2691,8 +2693,8 @@
# Since: 4.10.0
##
{'type': 'VmDefinition',
- 'data': {'acpiEnable': 'bool', 'clientIp':
'str', '*cpuType': 'str',
- '*custom': 'StringMap', '*devices':
['VmDevice'],
+ 'data': {'acpiEnable': 'bool', 'clientIp':
'str', 'cpuShares': 'str',
+ '*cpuType': 'str', '*custom': 'StringMap',
'*devices': ['VmDevice'],
'display': 'VmDisplayType', 'displayIp':
'str',
'displayPort': 'int', 'displaySecurePort':
'int',
'*emulatedMachine': 'str', '*keyboardLayout':
'str',
@@ -2710,6 +2712,8 @@
# Parameters for creating a new virtual machine
#
# @acpiEnable: Indicates if ACPI is enabled inside the VM
+#
+# @cpuShares: The host scheduling priority (relative to other VMs)
#
# @custom: #optional A dictionary of custom, free-form properties
#
@@ -2744,7 +2748,7 @@
##
{'type': 'VmParameters',
'data': {'acpiEnable': 'bool',
- '*custom': 'StringMap', '*devices':
['VmDevice'],
+ 'cpuShares': 'str', '*custom': 'StringMap',
'*devices': ['VmDevice'],
'display': 'VmDisplayType', 'kvmEnable':
'bool', 'memSize': 'uint',
'nice': 'int', 'smp': 'uint',
'*smpCoresPerSocket': 'uint',
'*smpThreadsPerCore': 'uint', 'timeOffset':
'uint',
--
To view, visit
http://gerrit.ovirt.org/17603
To unsubscribe, visit
http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I7ef73cf0579a0efd5a31c32638efcc6cdf2447d7
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: ovirt-3.3
Gerrit-Owner: Martin Sivák <msivak(a)redhat.com>