From: Sascha Westermann via pve-devel <pve-devel@lists.proxmox.com>
To: pve-devel@lists.proxmox.com
Cc: Sascha Westermann <sascha.westermann@hl-services.de>
Subject: [pve-devel] [PATCH pve-manager 2/3] Fix #5708: Add CPU raw counters
Date: Tue, 17 Sep 2024 07:50:19 +0200 [thread overview]
Message-ID: <mailman.7.1726728980.332.pve-devel@lists.proxmox.com> (raw)
In-Reply-To: <20240917055020.10507-1-sascha.westermann@hl-services.de>
[-- Attachment #1: Type: message/rfc822, Size: 13080 bytes --]
From: Sascha Westermann <sascha.westermann@hl-services.de>
To: pve-devel@lists.proxmox.com
Cc: Sascha Westermann <sascha.westermann@hl-services.de>
Subject: [PATCH pve-manager 2/3] Fix #5708: Add CPU raw counters
Date: Tue, 17 Sep 2024 07:50:19 +0200
Message-ID: <20240917055020.10507-3-sascha.westermann@hl-services.de>
Add a map containing raw values from /proc/stat and "uptime_ticks" which
can be used in combination with cpuinfo.user_hz to calculate CPU usage
from two samples. "uptime_ticks" is only defined at the top level, as
/proc/stat is read once, so that core-specific raw values match this
value.
Signed-off-by: Sascha Westermann <sascha.westermann@hl-services.de>
---
PVE/API2/Nodes.pm | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/PVE/API2/Nodes.pm b/PVE/API2/Nodes.pm
index 9920e977..1943ec56 100644
--- a/PVE/API2/Nodes.pm
+++ b/PVE/API2/Nodes.pm
@@ -5,6 +5,7 @@ use warnings;
use Digest::MD5;
use Digest::SHA;
+use IO::File;
use Filesys::Df;
use HTTP::Status qw(:constants);
use JSON;
@@ -466,6 +467,37 @@ __PACKAGE__->register_method({
$res->{cpu} = $stat->{cpu};
$res->{wait} = $stat->{wait};
+ if (my $fh = IO::File->new ("/proc/stat", "r")) {
+ my ($uptime_ticks) = PVE::ProcFSTools::read_proc_uptime(1);
+ 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->{cpustat}->{user} = int($1);
+ $res->{cpustat}->{nice} = int($2);
+ $res->{cpustat}->{system} = int($3);
+ $res->{cpustat}->{idle} = int($4);
+ $res->{cpustat}->{iowait} = int($5);
+ $res->{cpustat}->{irq} = int($6);
+ $res->{cpustat}->{softirq} = int($7);
+ $res->{cpustat}->{steal} = int($8);
+ $res->{cpustat}->{guest} = int($9);
+ $res->{cpustat}->{guest_nice} = int($10);
+ $res->{cpustat}->{uptime_ticks} = $uptime_ticks;
+ } elsif ($line =~ m|^cpu(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)(?:\s+(\d+)\s+(\d+))?|) {
+ $res->{cpustat}->{"cpu" . $1}->{user} = int($2);
+ $res->{cpustat}->{"cpu" . $1}->{nice} = int($3);
+ $res->{cpustat}->{"cpu" . $1}->{system} = int($4);
+ $res->{cpustat}->{"cpu" . $1}->{idle} = int($5);
+ $res->{cpustat}->{"cpu" . $1}->{iowait} = int($6);
+ $res->{cpustat}->{"cpu" . $1}->{irq} = int($7);
+ $res->{cpustat}->{"cpu" . $1}->{softirq} = int($8);
+ $res->{cpustat}->{"cpu" . $1}->{steal} = int($9);
+ $res->{cpustat}->{"cpu" . $1}->{guest} = int($10);
+ $res->{cpustat}->{"cpu" . $1}->{guest_nice} = int($11);
+ }
+ }
+ $fh->close;
+ }
+
my $meminfo = PVE::ProcFSTools::read_meminfo();
$res->{memory} = {
free => $meminfo->{memfree},
--
2.46.0
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2024-09-19 6:56 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20240917055020.10507-1-sascha.westermann@hl-services.de>
2024-09-17 5:50 ` [pve-devel] [PATCH pve-common 1/3] " Sascha Westermann via pve-devel
2024-09-17 5:50 ` Sascha Westermann via pve-devel [this message]
2024-09-17 5:50 ` [pve-devel] [PATCH qemu-server 3/3] " Sascha Westermann via pve-devel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=mailman.7.1726728980.332.pve-devel@lists.proxmox.com \
--to=pve-devel@lists.proxmox.com \
--cc=sascha.westermann@hl-services.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox