]> git.proxmox.com Git - qemu-server.git/commitdiff
fix #2570: add 'keephugepages' config
authorStefan Reiter <s.reiter@proxmox.com>
Wed, 2 Sep 2020 09:03:37 +0000 (11:03 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 2 Sep 2020 10:45:57 +0000 (12:45 +0200)
We already keep hugepages if they are created with the kernel
commandline (hugepagesz=x hugepages=y), but some setups (specifically
hugepages across multiple NUMA nodes) cannot be configured that way.
Since we always clear these hugepages at VM shutdown, rebooting a VM
that uses them might not work, since the requested count might not be
available anymore by the time we want to use them (also, we would then
no longer allocate them correctly on the NUMA nodes).

Add a 'keephugepages' parameter to skip cleanup and simply leave them
untouched.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
PVE/QemuServer.pm

index a5ee8e2a390e746e53edefb42965222ae1961b43..d2a20b6be4251400f3db50c739b3b09dc4801501 100644 (file)
@@ -441,6 +441,14 @@ EODESC
        description => "Enable/disable hugepages memory.",
        enum => [qw(any 2 1024)],
     },
+    keephugepages => {
+       optional => 1,
+       type => 'boolean',
+       default => 0,
+       description => "Use together with hugepages. If enabled, hugepages will"
+                    . " not be deleted after VM shutdown and can be used for"
+                    . " subsequent starts.",
+    },
     vcpus => {
        optional => 1,
        type => 'integer',
@@ -5034,11 +5042,13 @@ sub vm_start_nolock {
 
            eval { $run_qemu->() };
            if (my $err = $@) {
-               PVE::QemuServer::Memory::hugepages_reset($hugepages_host_topology);
+               PVE::QemuServer::Memory::hugepages_reset($hugepages_host_topology)
+                   if !$conf->{keephugepages};
                die $err;
            }
 
-           PVE::QemuServer::Memory::hugepages_pre_deallocate($hugepages_topology);
+           PVE::QemuServer::Memory::hugepages_pre_deallocate($hugepages_topology)
+               if !$conf->{keephugepages};
        };
        eval { PVE::QemuServer::Memory::hugepages_update_locked($code); };