From c140206bf8ef51dd7d07089e1b03bd98edeb8754 Mon Sep 17 00:00:00 2001 From: Alexandre Derumier Date: Mon, 10 Jan 2022 05:52:58 +0100 Subject: [PATCH] read_proc_stat: substract guest && guest_nice from user && nice time user && nice time already include guest value https://github.com/torvalds/linux/blob/4ec9f7a18/kernel/sched/cputime.c#L151-L158 Other monitoring tools are already substracting theses guest values https://github.com/htop-dev/htop/blob/main/linux/LinuxProcessList.c https://github.com/influxdata/telegraf/blob/c66ccee46f47717c399ccc0348d17c95d11f477d/plugins/inputs/cpu/cpu.go --- src/PVE/ProcFSTools.pm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/PVE/ProcFSTools.pm b/src/PVE/ProcFSTools.pm index c816131..79d4a4c 100644 --- a/src/PVE/ProcFSTools.pm +++ b/src/PVE/ProcFSTools.pm @@ -169,8 +169,8 @@ sub read_proc_stat { if (my $fh = IO::File->new ("/proc/stat", "r")) { while (defined (my $line = <$fh>)) { if ($line =~ m|^cpu\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)|) { - $res->{user} = $1; - $res->{nice} = $2; + $res->{user} = $1 - $9; + $res->{nice} = $2 - $10; $res->{system} = $3; $res->{idle} = $4; $res->{used} = $1+$2+$3; @@ -191,7 +191,7 @@ sub read_proc_stat { my $ctime = gettimeofday; # floating point time in seconds - # the sum of all (non-guest) fields + # the sum of all fields $res->{total} = $res->{user} + $res->{nice} + $res->{system} @@ -199,7 +199,9 @@ sub read_proc_stat { + $res->{irq} + $res->{softirq} + $res->{steal} - + $res->{idle}; + + $res->{idle} + + $res->{guest} + + $res->{guest_nice}; $res->{ctime} = $ctime; $res->{cpu} = 0; -- 2.39.2