Add maxcpus property for Qemu VMs. Ref #1674

This commit is contained in:
grossmj 2020-07-24 15:15:41 +09:30
parent 47bb2edbfa
commit 01b2c72767
3 changed files with 53 additions and 1 deletions

View File

@ -111,6 +111,7 @@ class QemuVM(BaseNode):
self._options = "" self._options = ""
self._ram = 256 self._ram = 256
self._cpus = 1 self._cpus = 1
self._maxcpus = 1
self._ethernet_adapters = [] self._ethernet_adapters = []
self._adapter_type = "e1000" self._adapter_type = "e1000"
self._initrd = "" self._initrd = ""
@ -752,6 +753,27 @@ class QemuVM(BaseNode):
log.info('QEMU VM "{name}" [{id}] has set the number of vCPUs to {cpus}'.format(name=self._name, id=self._id, cpus=cpus)) log.info('QEMU VM "{name}" [{id}] has set the number of vCPUs to {cpus}'.format(name=self._name, id=self._id, cpus=cpus))
self._cpus = cpus self._cpus = cpus
@property
def maxcpus(self):
"""
Returns the maximum number of hotpluggable vCPUs for this QEMU VM.
:returns: maximum number of hotpluggable vCPUs.
"""
return self._maxcpus
@maxcpus.setter
def maxcpus(self, maxcpus):
"""
Sets the maximum number of hotpluggable vCPUs for this QEMU VM.
:param maxcpus: maximum number of hotpluggable vCPUs
"""
log.info('QEMU VM "{name}" [{id}] has set maximum number of hotpluggable vCPUs to {maxcpus}'.format(name=self._name, id=self._id, maxcpus=maxcpus))
self._maxcpus = maxcpus
@property @property
def options(self): def options(self):
""" """
@ -2013,7 +2035,11 @@ class QemuVM(BaseNode):
command = [self.qemu_path] command = [self.qemu_path]
command.extend(["-name", self._name]) command.extend(["-name", self._name])
command.extend(["-m", "{}M".format(self._ram)]) command.extend(["-m", "{}M".format(self._ram)])
command.extend(["-smp", "cpus={}".format(self._cpus)]) # set the maximum number of the hotpluggable CPUs to match the number of CPUs to avoid issues.
maxcpus = self._maxcpus
if self._cpus > maxcpus:
maxcpus = self._cpus
command.extend(["-smp", "cpus={},maxcpus={}".format(self._cpus, maxcpus)])
if (await self._run_with_hardware_acceleration(self.qemu_path, self._options)): if (await self._run_with_hardware_acceleration(self.qemu_path, self._options)):
if sys.platform.startswith("linux"): if sys.platform.startswith("linux"):
command.extend(["-enable-kvm"]) command.extend(["-enable-kvm"])

View File

@ -145,6 +145,12 @@ QEMU_CREATE_SCHEMA = {
"minimum": 1, "minimum": 1,
"maximum": 255, "maximum": 255,
}, },
"maxcpus": {
"description": "Maximum number of hotpluggable vCPUs",
"type": ["integer", "null"],
"minimum": 1,
"maximum": 255,
},
"adapters": { "adapters": {
"description": "Number of adapters", "description": "Number of adapters",
"type": ["integer", "null"], "type": ["integer", "null"],
@ -335,6 +341,12 @@ QEMU_UPDATE_SCHEMA = {
"minimum": 1, "minimum": 1,
"maximum": 255, "maximum": 255,
}, },
"maxcpus": {
"description": "Maximum number of hotpluggable vCPUs",
"type": ["integer", "null"],
"minimum": 1,
"maximum": 255,
},
"adapters": { "adapters": {
"description": "Number of adapters", "description": "Number of adapters",
"type": ["integer", "null"], "type": ["integer", "null"],
@ -528,6 +540,12 @@ QEMU_OBJECT_SCHEMA = {
"minimum": 1, "minimum": 1,
"maximum": 255, "maximum": 255,
}, },
"maxcpus": {
"description": "Maximum number of hotpluggable vCPUs",
"type": ["integer", "null"],
"minimum": 1,
"maximum": 255,
},
"adapters": { "adapters": {
"description": "Number of adapters", "description": "Number of adapters",
"type": "integer", "type": "integer",
@ -642,6 +660,7 @@ QEMU_OBJECT_SCHEMA = {
"boot_priority", "boot_priority",
"ram", "ram",
"cpus", "cpus",
"maxcpus",
"adapters", "adapters",
"adapter_type", "adapter_type",
"mac_address", "mac_address",

View File

@ -49,6 +49,13 @@ QEMU_TEMPLATE_PROPERTIES = {
"maximum": 255, "maximum": 255,
"default": 1 "default": 1
}, },
"maxcpus": {
"description": "Maximum number of hotpluggable vCPUs",
"type": "integer",
"minimum": 1,
"maximum": 255,
"default": 1
},
"adapters": { "adapters": {
"description": "Number of adapters", "description": "Number of adapters",
"type": "integer", "type": "integer",