[Kimchi-devel] [PATCH 2/6 - V2] [Memory HotPlug] Add maxMemory and numa configuration to guest xml
Aline Manera
alinefm at linux.vnet.ibm.com
Mon Jun 1 12:24:30 UTC 2015
On 28/05/2015 10:59, Rodrigo Trujillo wrote:
> In order to support memory hotplug, guest must have maxMemory and NUMA
> configured in the xml.
> For maxMemory, this patch changes xml generation at guest creation
> time, adding maxMemory equals to host total memory and memory slots as
> the integer number of GiB that fit inside maxMemory (by design users
> will be allowed to add only memory chunks of 1GB).
> For NUMA, this patch adds the simplest configuration possible, creating
> only one node with all vcpus and memory set in the template.
>
> Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo at linux.vnet.ibm.com>
> ---
> src/kimchi/model/vms.py | 8 ++++++++
> src/kimchi/vmtemplate.py | 29 +++++++++++++++++++----------
> 2 files changed, 27 insertions(+), 10 deletions(-)
>
> diff --git a/src/kimchi/model/vms.py b/src/kimchi/model/vms.py
> index f0182b9..dc7f91f 100644
> --- a/src/kimchi/model/vms.py
> +++ b/src/kimchi/model/vms.py
> @@ -94,6 +94,14 @@ class VMsModel(object):
> if pool_uri:
> vm_overrides['storagepool'] = pool_uri
> vm_overrides['fc_host_support'] = self.caps.fc_host_support
> +
> + # Setting maxMemory and slots parameter values
> + # getInfo memory value comes in MiB, so dividing by 1024 integer,
> + # gives the interger maximum number of slots to use in chunks of
> + # 1 GB
> + vm_overrides['max_memory'] = self.conn.get().getInfo()[1] * 1024
> + vm_overrides['slots'] = self.conn.get().getInfo()[1] / 1024
> +
As those values are the same to every guest and will never change (at
least by now) I suggest insert it to the 'defaults' in the osinfo.py
> t = TemplateModel.get_template(t_name, self.objstore, self.conn,
> vm_overrides)
>
> diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
> index e047228..a20098d 100644
> --- a/src/kimchi/vmtemplate.py
> +++ b/src/kimchi/vmtemplate.py
> @@ -270,17 +270,25 @@ class VMTemplate(object):
> return input_output
>
> def _get_cpu_xml(self):
> -
> + # NUMA configuration. Necessary for memory hotplug
> + cpus = self.info.get('cpus') - 1
Just curious about the count above. What is it for?
> + xml = E.cpu(E.numa(E.cell(
> + id='0',
> + cpus='0-' + str(cpus) if cpus > 0 else '0',
> + memory=str(self.info.get('memory') << 10),
> + unit='KiB')))
> +
> + # Include CPU topology, if provided
> cpu_info = self.info.get('cpu_info')
> - if cpu_info is None:
> - return ""
> - cpu_topo = cpu_info.get('topology')
> - if cpu_topo is None:
> - return ""
> - return etree.tostring(E.cpu(E.topology(
> - sockets=str(cpu_topo['sockets']),
> - cores=str(cpu_topo['cores']),
> - threads=str(cpu_topo['threads']))))
> + if cpu_info is not None:
> + cpu_topo = cpu_info.get('topology')
> + if cpu_topo is not None:
> + xml.insert(0, E.topology(
> + sockets=str(cpu_topo['sockets']),
> + cores=str(cpu_topo['cores']),
> + threads=str(cpu_topo['threads'])))
> +
> + return etree.tostring(xml)
>
> def to_vm_xml(self, vm_name, vm_uuid, **kwargs):
> params = dict(self.info)
> @@ -313,6 +321,7 @@ class VMTemplate(object):
> %(qemu-stream-cmdline)s
> <name>%(name)s</name>
> <uuid>%(uuid)s</uuid>
> + <maxMemory slots='%(slots)s' unit='KiB'>%(max_memory)s</maxMemory>
> <memory unit='MiB'>%(memory)s</memory>
> <vcpu>%(cpus)s</vcpu>
> %(cpu_info)s
More information about the Kimchi-devel
mailing list