]> git.proxmox.com Git - pve-common.git/blobdiff - data/PVE/ProcFSTools.pm
query KSM page sharing
[pve-common.git] / data / PVE / ProcFSTools.pm
index d501082f2efe07e0a5a325d01495ff17f6c8b53a..2c2b376f7ff8d51ea2b9ac4f274de14d5ae9a2c8 100644 (file)
@@ -26,6 +26,7 @@ sub read_cpuinfo {
     my $fh = IO::File->new ($fn, "r");
     return $res if !$fh;
 
+    my $idhash = {};
     my $count = 0;
     while (defined(my $line = <$fh>)) {
        if ($line =~ m/^processor\s*:\s*\d+\s*$/i) {
@@ -37,12 +38,12 @@ sub read_cpuinfo {
        } elsif ($line =~ m/^flags\s*:.*(vmx|svm)/) {
            $res->{hvm} = 1; # Hardware Virtual Machine (Intel VT / AMD-V)
        } elsif ($line =~ m/^physical id\s*:\s*(\d+)\s*$/i) {
-           my $sid = $1 + 1;
-           $res->{sockets} = $sid if $sid > $res->{sockets};
+           $idhash->{$1} = 1;
        }
-
     }
 
+    $res->{sockets} = scalar(keys %$idhash) || 1;
+
     $res->{cpus} = $count;
 
     $fh->close;
@@ -174,6 +175,7 @@ sub read_meminfo {
        memtotal => 0,
        memfree => 0,
        memused => 0,
+       memshared => 0,
        swaptotal => 0,
        swapfree => 0,
        swapused => 0,
@@ -198,6 +200,9 @@ sub read_meminfo {
     $res->{swapfree} = $d->{swapfree};
     $res->{swapused} = $res->{swaptotal} - $res->{swapfree};
 
+    my $spages = PVE::Tools::file_read_firstline("/sys/kernel/mm/ksm/pages_sharing");
+    $res->{memshared} = int($spages) * 4096;
+
     return $res;
 }