Currently Proxmox VE always deallocates HugePagesTLB when starting a new machine and it makes it impossible to preconfigure kernel /proc/cmdline with persistent allocation.
This change makes deallocation to prefer defaults set by /proc/cmdline, by parsing the cmdline and respecting hugepages= and hugepagesz=. Signed-off-by: Kamil Trzciński <ayu...@ayufan.eu> --- PVE/QemuServer/Memory.pm | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/PVE/QemuServer/Memory.pm b/PVE/QemuServer/Memory.pm index 0e4c830..aac4cf4 100644 --- a/PVE/QemuServer/Memory.pm +++ b/PVE/QemuServer/Memory.pm @@ -538,6 +538,29 @@ sub hugepages_allocate { } +sub hugepages_default_nr_hugepages { + my ($size) = @_; + + my $cmdline = PVE::Tools::file_read_firstline("/proc/cmdline"); + my $args = PVE::Tools::split_args($cmdline); + + my $parsed_size = 2; # default is 2M + + foreach my $arg (@$args) { + if ($arg eq "hugepagesz=2M") { + $parsed_size = 2; + } elsif ($arg eq "hugepagesz=1G") { + $parsed_size = 1024; + } elsif ($arg =~ m/^hugepages=(\d+)?$/) { + if ($parsed_size == $size) { + return $1; + } + } + } + + return 0; +} + sub hugepages_pre_deallocate { my ($hugepages_topology) = @_; @@ -545,8 +568,8 @@ sub hugepages_pre_deallocate { my $hugepages_size = $size * 1024; my $path = "/sys/kernel/mm/hugepages/hugepages-${hugepages_size}kB/"; - my $hugepages_nr = PVE::Tools::file_read_firstline($path."nr_hugepages"); - PVE::ProcFSTools::write_proc_entry($path."nr_hugepages", 0); + my $hugepages_nr = hugepages_default_nr_hugepages($size); + PVE::ProcFSTools::write_proc_entry($path."nr_hugepages", $hugepages_nr); } } -- 2.17.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel