use unified parser for pressure stats

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Thomas Lamprecht 2021-02-08 16:03:35 +01:00
parent 0bc3dac963
commit eadfaabdae
2 changed files with 23 additions and 23 deletions

View File

@ -387,18 +387,9 @@ sub get_pressure_stat {
# 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;
}
for my $type (qw(cpu memory io)) {
my $stats = PVE::ProcFSTools::parse_pressure("$path/$type.pressure");
$res->{$type} = $stats if $stats;
}
} else {
die "bad cgroup version: $ver\n";

View File

@ -132,21 +132,30 @@ sub read_loadavg {
return wantarray ? (0, 0, 0) : 0;
}
sub read_pressure {
sub parse_pressure {
my ($path) = @_;
my $res = {};
foreach my $type (qw(cpu memory io)) {
if (my $fh = IO::File->new ("/proc/pressure/$type", "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;
my $v = qr/\d+\.\d+/;
my $fh = IO::File->new($path, "r") or return undef;
while (defined (my $line = <$fh>)) {
if ($line =~ /^(some|full)\s+avg10\=($v)\s+avg60\=($v)\s+avg300\=($v)\s+total\=(\d+)/) {
$res->{$1}->{avg10} = $2;
$res->{$1}->{avg60} = $3;
$res->{$1}->{avg300} = $4;
$res->{$1}->{total} = $4;
}
}
$fh->close;
return $res;
}
sub read_pressure {
my $res = {};
foreach my $type (qw(cpu memory io)) {
my $stats = parse_pressure("/proc/pressure/$type");
$res->{$type} = $stats if $stats;
}
return $res;
}