]> git.proxmox.com Git - qemu-server.git/commitdiff
fix #2402: allow 1GB hugepages if 2MB is unavailable
authorStefan Reiter <s.reiter@proxmox.com>
Thu, 10 Oct 2019 10:18:41 +0000 (12:18 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 10 Oct 2019 13:32:46 +0000 (15:32 +0200)
As reported in bug #2402, a system started with "default_hugepagesz=1G
hugepagesz=1G" does not have a /sys/kernel/mm/hugepages/hugepages-2048kB
directory.

To fix, ignore the missing directory in hugepages_mount (since it might
not be needed anyway), and correctly check if the requested hugepage
size is available in hugepages_size instead.

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

index b579955037f198eb0163eae7a3d97e81a5cc4e52..5aceabf266df7daf8bb89dbe1c2ab306e1713fd0 100644 (file)
@@ -358,7 +358,7 @@ sub hugepages_mount {
    my $mountdata = PVE::ProcFSTools::parse_proc_mounts();
 
    foreach my $size (qw(2048 1048576)) {
-       return if (! -d "/sys/kernel/mm/hugepages/hugepages-${size}kB");
+       next if (! -d "/sys/kernel/mm/hugepages/hugepages-${size}kB");
 
        my $path = "/run/hugepages/kvm/${size}kB";
 
@@ -398,20 +398,26 @@ sub hugepages_size {
    if ($conf->{hugepages} eq 'any') {
 
        #try to use 1GB if available && memory size is matching
-       if (-d "/sys/kernel/mm/hugepages/hugepages-1048576kB" && ($size % 1024 == 0)) {
+       my $gb_exists = -d "/sys/kernel/mm/hugepages/hugepages-1048576kB";
+       if ($gb_exists && ($size % 1024 == 0)) {
            return 1024;
-       } else {
+       } elsif (-d "/sys/kernel/mm/hugepages/hugepages-2048kB") {
            return 2;
        }
 
+       die "your system doesn't support hugepages for memory size $size\n"
+           if $gb_exists;
+
+       die "your system doesn't support hugepages\n";
+
    } else {
 
        my $hugepagesize = $conf->{hugepages} * 1024 . "kB";
 
        if (! -d "/sys/kernel/mm/hugepages/hugepages-$hugepagesize") {
-               die "your system doesn't support hugepages of $hugepagesize";
+               die "your system doesn't support hugepages of $hugepagesize\n";
        }
-       die "Memory size $size is not a multiple of the requested hugepages size $hugepagesize" if ($size % $conf->{hugepages}) != 0;
+       die "Memory size $size is not a multiple of the requested hugepages size $hugepagesize\n" if ($size % $conf->{hugepages}) != 0;
        return $conf->{hugepages};
    }