From 177469ce6d1532bf0186b7d8ec490ef1bc651be3 Mon Sep 17 00:00:00 2001 From: Gerry Kopec Date: Thu, 20 Jun 2019 00:48:50 -0400 Subject: [PATCH] Configure nova memory/hugepage reserves Add per host overrides to nova chart to account for platform memory reserve. This will set nova config options: reserved_huge_pages: this is a multiline option per node/pagesize, e.g. reserved_huge_pages = node:0,size:4,count:2816000 reserved_huge_pages = node:0,size:1048576,count:1 reserved_huge_pages = node:1,size:4,count:512000 reserved_huge_pages = node:1,size:1048576,count:1 - set 4K page reserve based on platform_reserved_mib - set 2M or 1G page reserve based on vswitch hugepages allocation reserved_host_memory: overall host memory reserved used by placement service. Includes both vswitch huge pages and platform reserved. Story: 2003909 Task: 34262 Change-Id: I70ea22cb05e8a9ac0ba9e9d149a78d58d40f8f77 Signed-off-by: Gerry Kopec --- sysinv/sysinv/sysinv/sysinv/helm/nova.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/sysinv/sysinv/sysinv/sysinv/helm/nova.py b/sysinv/sysinv/sysinv/sysinv/helm/nova.py index 143ea90a94..1aae257966 100644 --- a/sysinv/sysinv/sysinv/sysinv/helm/nova.py +++ b/sysinv/sysinv/sysinv/sysinv/helm/nova.py @@ -438,6 +438,29 @@ class NovaHelm(openstack.OpenstackBaseHelm): address_pool = self.dbapi.address_pool_get(cluster_host_network.pool_uuid) return '%s/%s' % (str(address_pool.network), str(address_pool.prefix)) + def _update_reserved_memory(self, host, default_config): + host_memory = self.dbapi.imemory_get_by_ihost(host.id) + reserved_pages = [] + reserved_host_memory = 0 + for cell in host_memory: + reserved_4K_pages = 'node:%d,size:4,count:%d' % ( + cell.numa_node, + cell.platform_reserved_mib*constants.NUM_4K_PER_MiB) + reserved_pages.append(reserved_4K_pages) + # vswitch pages will be either 2M or 1G + reserved_vswitch_pages = 'node:%d,size:%d,count:%d' % (cell.numa_node, + cell.vswitch_hugepages_size_mib*constants.Ki, + cell.vswitch_hugepages_nr) + reserved_pages.append(reserved_vswitch_pages) + reserved_host_memory += cell.platform_reserved_mib + reserved_host_memory += cell.vswitch_hugepages_size_mib * cell.vswitch_hugepages_nr + + multistring = self._oslo_multistring_override( + name='reserved_huge_pages', values=reserved_pages) + if multistring is not None: + default_config.update(multistring) + default_config.update({'reserved_host_memory_mb': reserved_host_memory}) + def _get_per_host_overrides(self): host_list = [] hosts = self.dbapi.ihost_get_list() @@ -457,6 +480,7 @@ class NovaHelm(openstack.OpenstackBaseHelm): self._update_host_addresses(host, default_config, vnc_config, libvirt_config) self._update_host_pci_whitelist(host, pci_config) + self._update_reserved_memory(host, default_config) host_nova = { 'name': hostname, 'conf': {