From 8f1ee302b64d343d253e6c9e7ee80d0b1894dcee Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Thu, 4 Jul 2019 00:20:28 +0200 Subject: [PATCH] F #3256: Fix resize with HUGEPAGES --- src/cli/one_helper/onehost_helper.rb | 2 +- src/host/HostShare.cc | 2 ++ src/vm/VirtualMachineParser.cc | 11 ++--------- src/vmm/LibVirtDriverKVM.cc | 2 ++ 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/cli/one_helper/onehost_helper.rb b/src/cli/one_helper/onehost_helper.rb index 5902c77c54..e4ea2d041e 100644 --- a/src/cli/one_helper/onehost_helper.rb +++ b/src/cli/one_helper/onehost_helper.rb @@ -898,7 +898,7 @@ class OneHostHelper < OpenNebulaHelper::OneHelper hugepages = [] nodes.each do |node| - node['HUGEPAGE'].each do |hugepage| + [node['HUGEPAGE']].flatten.each do |hugepage| h = {} h['NODE_ID'] = node['NODE_ID'] h['HUGEPAGE'] = hugepage diff --git a/src/host/HostShare.cc b/src/host/HostShare.cc index f500bccf45..e07d269f77 100644 --- a/src/host/HostShare.cc +++ b/src/host/HostShare.cc @@ -1273,6 +1273,7 @@ int HostShareNUMA::make_topology(HostShareCapacity &sr, int vm_id, bool do_alloc sr.topology->vector_value("SOCKETS", s_t); sr.topology->vector_value("HUGEPAGE_SIZE", hpsz_kb); + hpsz_kb = hpsz_kb * 1024; std::string policy = sr.topology->vector_value("PIN_POLICY"); HostShare::PinPolicy pp = HostShare::str_to_pin_policy(policy); @@ -1520,6 +1521,7 @@ void HostShareNUMA::del(HostShareCapacity &sr) if ( sr.topology != 0 ) { sr.topology->vector_value("HUGEPAGE_SIZE", hpsz_kb); + hpsz_kb = hpsz_kb * 1024; } for (auto it = sr.nodes.begin() ; it != sr.nodes.end(); ++it) diff --git a/src/vm/VirtualMachineParser.cc b/src/vm/VirtualMachineParser.cc index 126a8d0557..563cea3c81 100644 --- a/src/vm/VirtualMachineParser.cc +++ b/src/vm/VirtualMachineParser.cc @@ -783,10 +783,8 @@ int VirtualMachine::parse_topology(Template * tmpl, std::string &error) /* ---------------------------------------------------------------------- */ /* Set MEMORY, HUGEPAGE_SIZE, vCPU & update CPU for pinned VMS */ /* ---------------------------------------------------------------------- */ - long long memory; - - unsigned int vcpu = 0; - unsigned long int hpsz_mb = 0; + long long memory; + unsigned int vcpu = 0; if (!tmpl->get("MEMORY", memory)) { @@ -805,11 +803,6 @@ int VirtualMachine::parse_topology(Template * tmpl, std::string &error) tmpl->replace("CPU", vcpu); } - if ( vtopol->vector_value("HUGEPAGE_SIZE", hpsz_mb) == 0 ) - { - vtopol->replace("HUGEPAGE_SIZE", hpsz_mb * 1024); - } - /* ---------------------------------------------------------------------- */ /* Check topology for non pinned & pinned VMs */ /* - non-pinned VM needs to set SOCKETS, CORES and THREADS */ diff --git a/src/vmm/LibVirtDriverKVM.cc b/src/vmm/LibVirtDriverKVM.cc index 133e87fe18..e9e35bc7a0 100644 --- a/src/vmm/LibVirtDriverKVM.cc +++ b/src/vmm/LibVirtDriverKVM.cc @@ -237,7 +237,9 @@ static void vtopol(ofstream& file, const VectorAttribute * topology, topology->vector_value("SOCKETS", s); topology->vector_value("CORES", c); topology->vector_value("THREADS", t); + topology->vector_value("HUGEPAGE_SIZE", hpsz_kb); + hpsz_kb = hpsz_kb * 1024; ma = topology->vector_value("MEMORY_ACCESS");