[pve-devel] [PATCH pve-manager 2/4] pvestatd: qemu/lxc/node : add pressure stats

Alexandre Derumier aderumier at odiso.com
Wed Jun 1 10:12:49 CEST 2022


Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
 PVE/Service/pvestatd.pm | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/PVE/Service/pvestatd.pm b/PVE/Service/pvestatd.pm
index 984877c1..dd578d6b 100755
--- a/PVE/Service/pvestatd.pm
+++ b/PVE/Service/pvestatd.pm
@@ -134,6 +134,7 @@ sub update_node_status {
     my $stat = PVE::ProcFSTools::read_proc_stat();
     my $cpuinfo = PVE::ProcFSTools::read_cpuinfo();
     my $maxcpu = $cpuinfo->{cpus};
+    my $pressure = PVE::ProcFSTools::read_pressure();
 
     update_supported_cpuflags();
 
@@ -170,10 +171,13 @@ sub update_node_status {
 	memory => $meminfo,
 	blockstat => $dinfo,
 	nics => $netdev,
+	pressure => $pressure,
     };
     $node_metric->{cpustat}->@{qw(avg1 avg5 avg15)} = ($avg1, $avg5, $avg15);
     $node_metric->{cpustat}->{cpus} = $maxcpu;
 
+    compute_pressure($ctime, $node_metric, 'node', $nodename);
+
     my $transactions = PVE::ExtMetric::transactions_start($status_cfg);
     PVE::ExtMetric::update_all($transactions, 'node', $nodename, $node_metric, $ctime);
     PVE::ExtMetric::transactions_finish($transactions);
@@ -227,6 +231,8 @@ sub update_qemu_status {
 		[$d->{uptime}, $d->{name}, $status, $template, $ctime, $d->{cpus}, $d->{cpu},
 		 $d->{maxmem}, $d->{mem}, $d->{maxdisk}, $d->{disk},
 		 $d->{netin}, $d->{netout}, $d->{diskread}, $d->{diskwrite}]);
+
+	    compute_pressure($ctime, $d, 'qemu', $vmid);
 	} else {
 	    $data = $generate_rrd_string->(
 		[0, $d->{name}, $status, $template, $ctime, $d->{cpus}, undef,
@@ -436,6 +442,7 @@ sub update_lxc_status {
 		 $d->{maxdisk}, $d->{disk},
 		 $d->{netin}, $d->{netout},
 		 $d->{diskread}, $d->{diskwrite}]);
+	    compute_pressure($ctime, $d, 'lxc', $vmid);
 	} else {
 	    $data = $generate_rrd_string->(
 		[0, $d->{name}, $d->{status}, $template, $ctime, $d->{cpus}, undef,
@@ -507,6 +514,33 @@ sub broadcast_balancer_stats {
     }
 }
 
+sub compute_pressure {
+    my ($ctime, $d, $objecttype, $id) = @_;
+
+    return if !defined($d->{pressure});
+    my $pressure = $d->{pressure};
+
+    foreach my $type (keys %{$pressure}) {
+	my $pressuretype = $pressure->{$type};
+
+	foreach my $kind (keys %{$pressuretype}) {
+	    next if $kind ne 'some';
+	    my $pressurekind = $pressuretype->{$kind};
+
+	    foreach my $avg (keys %{$pressurekind}) {
+		next if $avg eq 'total';
+		my $value = $pressurekind->{$avg};
+		#for externel metric
+		my $metric = "pressure_".$type."_".$kind."_".$avg;
+		$d->{$metric} = $value;
+		next if $avg eq 'avg10';
+		$balancer_stats->{$objecttype}->{$id}->{pressure}->{$type}->{$kind}->{$avg} = $value;
+	    }
+	}
+    }
+    delete $d->{pressure};
+}
+
 my $broadcast_version_info_done = 0;
 my sub broadcast_version_info : prototype() {
     if (!$broadcast_version_info_done) {
-- 
2.30.2




More information about the pve-devel mailing list