From ddcdc5eed7c3b40fcb16e3069bf253f46438bf7b Mon Sep 17 00:00:00 2001 From: Mike Beattie Date: Fri, 29 May 2020 22:58:52 +1200 Subject: [PATCH] Add cpu core count to /nodes/{id}/status API result This is useful for when collecting data for Guest OS licensing (Microsoft) where physical core count matters, not socket or thread count. The "cpus" value counts threads when Hyperthreading is enabled. Signed-off-by: Mike Beattie --- src/PVE/ProcFSTools.pm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/PVE/ProcFSTools.pm b/src/PVE/ProcFSTools.pm index e413ccf..7cf1472 100644 --- a/src/PVE/ProcFSTools.pm +++ b/src/PVE/ProcFSTools.pm @@ -5,6 +5,7 @@ use warnings; use POSIX; use Time::HiRes qw (gettimeofday); use IO::File; +use List::Util qw(sum); use PVE::Tools; use Cwd qw(); @@ -35,6 +36,7 @@ sub read_cpuinfo { my $fh = IO::File->new ($fn, "r"); return $res if !$fh; + my $cpuid = 0; my $idhash = {}; my $count = 0; while (defined(my $line = <$fh>)) { @@ -47,7 +49,10 @@ sub read_cpuinfo { } elsif ($line =~ m/^flags\s*:\s*(.*)$/) { $res->{flags} = $1 if !length $res->{flags}; } elsif ($line =~ m/^physical id\s*:\s*(\d+)\s*$/i) { - $idhash->{$1} = 1; + $cpuid = $1; + $idhash->{$1} = 1 if not defined($idhash->{$1}); + } elsif ($line =~ m/^cpu cores\s*:\s*(\d+)\s*$/i) { + $idhash->{$cpuid} = $1 if defined($idhash->{$cpuid}); } } @@ -56,6 +61,8 @@ sub read_cpuinfo { $res->{sockets} = scalar(keys %$idhash) || 1; + $res->{cores} = sum(values %$idhash) || 1; + $res->{cpus} = $count; $fh->close;