[Kimchi-devel] [PATCH 2/6 - V2] [Memory HotPlug] Add maxMemory and numa configuration to guest xml

Rodrigo Trujillo rodrigo.trujillo at linux.vnet.ibm.com
Mon Jun 1 19:33:03 UTC 2015



On 06/01/2015 09:24 AM, Aline Manera wrote:
>
>
> 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
Yes, I can move to there. Just a doubt, is osinfo instantiated once ? 
Because I coded in VM create function to catch the case where the host 
had its memory increased on-the-fly.


>
>>           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?

I am getting the total number of CPUS to set below in the NUMA node. We 
are going to have only one node, so, all cpus must be
set in that node, such as "cpus=0-3", if guest has 4 cpus ; or "cpus=0" 
if the guest has 1 cpu.  Actually I am setting the "cpu ID",
starting from zero to X-1.

>
>> +        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
>
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>




More information about the Kimchi-devel mailing list