[pve-devel] [PATCH V2 pve-common] add get_pressure_stat

Thomas Lamprecht t.lamprecht at proxmox.com
Mon Feb 8 15:10:36 CET 2021


On 07.02.21 14:36, Alexandre Derumier wrote:
> Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
> ---
>  src/PVE/CGroup.pm | 42 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 42 insertions(+)
> 
> diff --git a/src/PVE/CGroup.pm b/src/PVE/CGroup.pm
> index 71d0846..cbd77cb 100644
> --- a/src/PVE/CGroup.pm
> +++ b/src/PVE/CGroup.pm
> @@ -365,6 +365,48 @@ sub get_memory_stat {
>      return $res;
>  }
>  
> +sub get_pressure_stat {
> +    my ($self) = @_;
> +
> +    my $res = {
> +	cpu => {
> +	    some => { avg10 => 0, avg60 => 0, avg300 => 0 }
> +	},
> +	memory => {
> +	    some => { avg10 => 0, avg60 => 0, avg300 => 0 },
> +	    full => { avg10 => 0, avg60 => 0, avg300 => 0 }
> +	},
> +	io => {
> +	    some => { avg10 => 0, avg60 => 0, avg300 => 0 },
> +	    full => { avg10 => 0, 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;

or return $res? it has already the zero defaults we'd set in pve-container
anyway?

> +    } 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";

So if the v1 controller does not support it this results in die's in
the vmstatus sub in pve-container where this is used without eval?

That would be not so ideal, as the v1 one is currently the default.

Maybe just return undef or the defaults instead?

(sorry, did not saw this when checking the v1)
> +    }
> +
> +    return $res;
> +}
> +
>  # Change the memory limit for this container.
>  #
>  # Dies on error (including a not-running or currently-shutting-down guest).
> 






More information about the pve-devel mailing list