[Kimchi-devel] [PATCH][Kimchi 1/2] Modify max memory slots default numbers
Rodrigo Trujillo
rodrigo.trujillo at linux.vnet.ibm.com
Thu May 19 21:34:57 UTC 2016
On 05/19/2016 03:56 PM, Aline Manera wrote:
>
>
> On 05/19/2016 09:14 AM, Rodrigo Trujillo wrote:
>> This patch sets the number of available memory device slots to the
>> number supported by each architecture in qemu/libvirt. Without the
>> restriction of 1GB per device, now kimchi Will allow users to hotplug
>> more devices than previous implementarion.
>>
>> Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo at linux.vnet.ibm.com>
>> ---
>> model/vms.py | 23 ++---------------------
>> osinfo.py | 11 +++++++++++
>> vmtemplate.py | 20 +++++---------------
>> 3 files changed, 18 insertions(+), 36 deletions(-)
>>
>> diff --git a/model/vms.py b/model/vms.py
>> index 0108381..48196dd 100644
>> --- a/model/vms.py
>> +++ b/model/vms.py
>> @@ -58,6 +58,7 @@ from wok.plugins.kimchi.model.utils import
>> get_ascii_nonascii_name, get_vm_name
>> from wok.plugins.kimchi.model.utils import get_metadata_node
>> from wok.plugins.kimchi.model.utils import remove_metadata_node
>> from wok.plugins.kimchi.model.utils import set_metadata_node
>> +from wok.plugins.kimchi.osinfo import defaults
>> from wok.plugins.kimchi.screenshot import VMScreenshot
>> from wok.plugins.kimchi.utils import get_next_clone_name
>> from wok.plugins.kimchi.utils import template_name_from_uri
>> @@ -858,23 +859,6 @@ class VMModel(object):
>> elif newMem == (oldMem << 10):
>> newMem = newMem - memDevsAmount
>>
>> - def _get_slots(mem, maxMem):
>> - slots = (maxMem - mem) >> 10 >> 10
>> - # Libvirt does not accepts slots <= 1
>> - if slots < 0:
>> - raise InvalidParameter("KCHTMPL0031E",
>> - {'mem': str(mem >> 10),
>> - 'maxmem': str(maxMem >> 10)})
>> - elif slots == 0:
>> - slots = 1
>> -
>> - # max 32 slots on Power
>> - distro, _, _ = platform.linux_distribution()
>> - if distro == "IBM_PowerKVM" and slots > 32:
>> - slots = 32
>> - return slots
>> - # End of _get_slots
>> -
>> # There is an issue in Libvirt/Qemu, where Guest does not
>> start if
>> # memory and max memory are the same. So we decided to
>> remove max
>> # memory and only add it if user explicitly provides it,
>> willing to
>> @@ -886,7 +870,7 @@ class VMModel(object):
>> max_mem_xml = E.maxMemory(
>> str(newMaxMem),
>> unit='Kib',
>> - slots=str(_get_slots(newMem, newMaxMem)))
>> + slots=str(defaults['mem_dev_slots']))
>
> You don't need to pass that value as parameter to VMTemplate.
>
> VMTemplate already gets the osinfo.defaults values on initialization
> so the value is in self.info - you just need to use it when needed.
Aline, I am not passing this value (default) to VMTemplate.
I have to use the value in VM memory update to add maxMemory tag if the
XML does not have it.
In VMTemplate, I am using "self.info" directly like you said.
Rodrigo
>
>> root.insert(0, max_mem_xml)
>> elif (maxMemTag is None) and (newMem == newMaxMem):
>> # Nothing to do
>> @@ -894,7 +878,6 @@ class VMModel(object):
>> elif (maxMemTag is not None) and (newMem != newMaxMem):
>> # Just update value in max memory tag
>> maxMemTag.text = str(newMaxMem)
>> - maxMemTag.set('slots', str(_get_slots(newMem,
>> newMaxMem)))
>> elif (maxMemTag is not None) and (newMem == newMaxMem):
>> if self._get_mem_dev_total_size(ET.tostring(root))
>> == 0:
>> # Remove the tag
>> @@ -928,8 +911,6 @@ class VMModel(object):
>> if (newMem == newMaxMem and
>> (self._get_mem_dev_total_size(ET.tostring(root)) == 0)):
>> root.remove(maxMemTag)
>> - else:
>> - maxMemTag.set('slots', str(_get_slots(newMem,
>> newMaxMem)))
>>
>> # Setting memory hard limit to max_memory + 1GiB
>> memtune = root.find('memtune')
>> diff --git a/osinfo.py b/osinfo.py
>> index 7b80f29..d3909ad 100644
>> --- a/osinfo.py
>> +++ b/osinfo.py
>> @@ -34,6 +34,14 @@ SUPPORTED_ARCHS = {'x86': ('i386', 'i686', 'x86_64'),
>> 'ppc64le': ('ppc64le')}
>>
>>
>> +# Memory devices slot limits by architecture
>> +MEM_DEV_SLOTS = {'ppc64': 32,
>> + 'ppc64le': 32,
>> + 'x86_64': 256,
>> + 'i686': 256,
>> + 'i386': 256}
>> +
>> +
>> template_specs = {'x86': {'old': dict(disk_bus='ide',
>> nic_model='e1000',
>> sound_model='ich6'),
>> 'modern': dict(disk_bus='virtio',
>> @@ -175,6 +183,9 @@ def _get_tmpl_defaults():
>> # Update defaults values with graphics values
>> defaults['graphics'] = default_config.pop('graphics')
>>
>> + # Setting default memory device slots
>> + defaults['mem_dev_slots'] = MEM_DEV_SLOTS.get(os.uname()[4], 32)
>> +
>> return defaults
>>
>>
>> diff --git a/vmtemplate.py b/vmtemplate.py
>> index 5e38275..ef92914 100644
>> --- a/vmtemplate.py
>> +++ b/vmtemplate.py
>> @@ -18,7 +18,6 @@
>> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
>> 02110-1301 USA
>>
>> import os
>> -import platform
>> import stat
>> import time
>> import urlparse
>> @@ -369,25 +368,16 @@ class VMTemplate(object):
>> # TODO: need modify this when boot order edition feature
>> came upstream.
>> params['boot_order'] = get_bootorder_xml()
>>
>> - # Setting maximum number of slots to avoid errors when
>> hotplug memory
>> - # Number of slots are the numbers of chunks of 1GB that fit
>> inside
>> - # the max_memory of the host minus memory assigned to the
>> VM. It
>> - # cannot have more than 32 slots in Power.
>> + # Setting maximum number of memory slots
>> + slots = str(self.info['mem_dev_slots'])
>> +
>> + # Rearrange memory parameters
>> memory = self.info['memory'].get('current')
>> maxmemory = self.info['memory'].get('maxmemory')
>> -
>> - slots = (maxmemory - memory) >> 10
>> - if slots < 0:
>> + if maxmemory < memory:
>> raise OperationFailed("KCHVM0041E",
>> {'maxmem': str(maxmemory)})
>> - elif slots == 0:
>> - slots = 1
>> - elif slots > 32:
>> - distro, _, _ = platform.linux_distribution()
>> - if distro == "IBM_PowerKVM":
>> - slots = 32
>>
>> - # Rearrange memory parameters
>> params['memory'] = self.info['memory'].get('current')
>> params['max_memory'] = ""
>> # if there is not support to memory hotplug in Libvirt or
>> qemu, we
>
> _______________________________________________
> 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