public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH pve-common 0/1] Cgroups: add get_pressure_stat
@ 2020-11-04  1:41 Alexandre Derumier
  2020-11-04  1:41 ` [pve-devel] [PATCH pve-common 1/1] " Alexandre Derumier
  0 siblings, 1 reply; 3+ messages in thread
From: Alexandre Derumier @ 2020-11-04  1:41 UTC (permalink / raw)
  To: pve-devel

This following my cgroup patch series from last week.

This get pressure stat for CT or VM through cgroup.

(pressure stats are only available in cgroupv2, even in hybrid hierarchy)


Alexandre Derumier (1):
  add get_pressure_stat

 src/PVE/CGroup.pm | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

-- 
2.20.1




^ permalink raw reply	[flat|nested] 3+ messages in thread

* [pve-devel] [PATCH pve-common 1/1] add get_pressure_stat
  2020-11-04  1:41 [pve-devel] [PATCH pve-common 0/1] Cgroups: add get_pressure_stat Alexandre Derumier
@ 2020-11-04  1:41 ` Alexandre Derumier
  2021-02-06 14:13   ` Thomas Lamprecht
  0 siblings, 1 reply; 3+ messages in thread
From: Alexandre Derumier @ 2020-11-04  1:41 UTC (permalink / raw)
  To: pve-devel

---
 src/PVE/CGroup.pm | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/src/PVE/CGroup.pm b/src/PVE/CGroup.pm
index 4823be2..457502e 100644
--- a/src/PVE/CGroup.pm
+++ b/src/PVE/CGroup.pm
@@ -358,6 +358,49 @@ sub get_memory_stat {
     return $res;
 }
 
+# Parse some memory data from `memory.stat`
+sub get_pressure_stat {
+    my ($self) = @_;
+
+    my $res = {
+	cpu => {
+	    some => { avg10 => 10, avg60 => 0, avg300 => 0 }
+	},
+	memory => {
+	    some => { avg10 => 10, avg60 => 0, avg300 => 0 },
+	    full => { avg10 => 10, avg60 => 0, avg300 => 0 }
+	},
+	io => {
+	    some => { avg10 => 10, avg60 => 0, avg300 => 0 },
+	    full => { avg10 => 10, avg60 => 0, avg300 => 0 }
+	},
+    };
+
+    my ($path, $ver) = $self->get_path(undef, 1);
+    if (!defined($path)) {
+	# container or VM most likely isn't running
+	return undef;
+    } elsif ($ver == 2) {
+
+	foreach my $type (qw(cpu memory io)) {
+	    if (my $fh = IO::File->new ("$path/$type.pressure", "r")) {
+		while (defined (my $line = <$fh>)) {
+		    if ($line =~ /^(some|full)\s+avg10\=(\d+\.\d+)\s+avg60\=(\d+\.\d+)\s+avg300\=(\d+\.\d+)\s+total\=(\d+)/) {
+			$res->{$type}->{$1}->{avg10} = $2;
+			$res->{$type}->{$1}->{avg60} = $3;
+			$res->{$type}->{$1}->{avg300} = $4;
+		    }
+		}
+		$fh->close;
+	    }
+	}
+    } else {
+	die "bad cgroup version: $ver\n";
+    }
+
+    return $res;
+}
+
 # Change the memory limit for this container.
 #
 # Dies on error (including a not-running or currently-shutting-down guest).
-- 
2.20.1




^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [pve-devel] [PATCH pve-common 1/1] add get_pressure_stat
  2020-11-04  1:41 ` [pve-devel] [PATCH pve-common 1/1] " Alexandre Derumier
@ 2021-02-06 14:13   ` Thomas Lamprecht
  0 siblings, 0 replies; 3+ messages in thread
From: Thomas Lamprecht @ 2021-02-06 14:13 UTC (permalink / raw)
  To: Proxmox VE development discussion, Alexandre Derumier

On 04.11.20 02:41, Alexandre Derumier wrote:
> ---
>  src/PVE/CGroup.pm | 43 +++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 43 insertions(+)
> 
> diff --git a/src/PVE/CGroup.pm b/src/PVE/CGroup.pm
> index 4823be2..457502e 100644
> --- a/src/PVE/CGroup.pm
> +++ b/src/PVE/CGroup.pm
> @@ -358,6 +358,49 @@ sub get_memory_stat {
>      return $res;
>  }
>  
> +# Parse some memory data from `memory.stat`
> +sub get_pressure_stat {
> +    my ($self) = @_;
> +
> +    my $res = {
> +	cpu => {
> +	    some => { avg10 => 10, avg60 => 0, avg300 => 0 }

here too, why 10 as default for the avg over the last 10 seconds?

> +	},
> +	memory => {
> +	    some => { avg10 => 10, avg60 => 0, avg300 => 0 },
> +	    full => { avg10 => 10, avg60 => 0, avg300 => 0 }
> +	},
> +	io => {
> +	    some => { avg10 => 10, avg60 => 0, avg300 => 0 },
> +	    full => { avg10 => 10, avg60 => 0, avg300 => 0 }
> +	},
> +    };
> +
> +    my ($path, $ver) = $self->get_path(undef, 1);
> +    if (!defined($path)) {
> +	# container or VM most likely isn't running
> +	return undef;
> +    } elsif ($ver == 2) {
> +
> +	foreach my $type (qw(cpu memory io)) {
> +	    if (my $fh = IO::File->new ("$path/$type.pressure", "r")) {
> +		while (defined (my $line = <$fh>)) {
> +		    if ($line =~ /^(some|full)\s+avg10\=(\d+\.\d+)\s+avg60\=(\d+\.\d+)\s+avg300\=(\d+\.\d+)\s+total\=(\d+)/) {
> +			$res->{$type}->{$1}->{avg10} = $2;
> +			$res->{$type}->{$1}->{avg60} = $3;
> +			$res->{$type}->{$1}->{avg300} = $4;
> +		    }
> +		}
> +		$fh->close;
> +	    }
> +	}
> +    } else {
> +	die "bad cgroup version: $ver\n";
> +    }
> +
> +    return $res;
> +}
> +
>  # Change the memory limit for this container.
>  #
>  # Dies on error (including a not-running or currently-shutting-down guest).
> 





^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-02-06 14:14 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-04  1:41 [pve-devel] [PATCH pve-common 0/1] Cgroups: add get_pressure_stat Alexandre Derumier
2020-11-04  1:41 ` [pve-devel] [PATCH pve-common 1/1] " Alexandre Derumier
2021-02-06 14:13   ` Thomas Lamprecht

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal