]> git.proxmox.com Git - qemu-server.git/blobdiff - PVE/QemuServer/Memory.pm
memory: fix automatic num amapping
[qemu-server.git] / PVE / QemuServer / Memory.pm
index 087584b1960ebb0e49d1170433a3f541c29c0a34..f25135a0995b8b25f7cb0ce4868f2b1633b4039e 100644 (file)
@@ -34,7 +34,7 @@ sub get_numa_guest_to_host_map {
     }
     return $map if %$map;
     my $sockets = $conf->{sockets} || 1;
-    return map { $_ => $_ } (0..($sockets-1));
+    return {map { $_ => $_ } (0..($sockets-1))};
 }
 
 sub foreach_dimm{
@@ -256,7 +256,7 @@ sub config {
            # cpus
            my $cpulists = $numa->{cpus};
            die "missing NUMA node$i cpus\n" if !defined($cpulists);
-           my $cpus = join(',', map {
+           my $cpus = join(',cpus=', map {
                my ($start, $end) = @$_;
                defined($end) ? "$start-$end" : $start
            } @$cpulists);
@@ -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);
     }
 }