mirror of
git://git.proxmox.com/git/qemu-server.git
synced 2025-08-03 04:21:54 +03:00
vmstatus: add memhost for host view of vm mem consumption
The mem field itself will switch from the outside view to the "inside" view if the VM is reporting detailed memory usage informatio via the ballooning device. Since sometimes other processes belong to a VM too, for example swtpm, we collect all PIDs belonging to the VM cgroup and fetch their PSS data to account for shared libraries used. Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com> Link: https://lore.proxmox.com/20250726010626.1496866-28-a.lauterer@proxmox.com Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
committed by
Thomas Lamprecht
parent
213200ef79
commit
d426de6c7d
@ -2434,6 +2434,12 @@ our $vmstatus_return_properties = {
|
||||
optional => 1,
|
||||
renderer => 'bytes',
|
||||
},
|
||||
memhost => {
|
||||
description => "Current memory usage on the host.",
|
||||
type => 'integer',
|
||||
optional => 1,
|
||||
renderer => 'bytes',
|
||||
},
|
||||
maxdisk => {
|
||||
description => "Root disk size in bytes.",
|
||||
type => 'integer',
|
||||
@ -2624,6 +2630,7 @@ sub vmstatus {
|
||||
$d->{uptime} = 0;
|
||||
$d->{cpu} = 0;
|
||||
$d->{mem} = 0;
|
||||
$d->{memhost} = 0;
|
||||
|
||||
$d->{netout} = 0;
|
||||
$d->{netin} = 0;
|
||||
@ -2676,6 +2683,24 @@ sub vmstatus {
|
||||
$d->{mem} = int(($pstat->{rss} / $pstat->{vsize}) * $d->{maxmem});
|
||||
}
|
||||
|
||||
my $fh = IO::File->new("/sys/fs/cgroup/qemu.slice/${vmid}.scope/cgroup.procs", "r");
|
||||
if ($fh) {
|
||||
while (my $childPid = <$fh>) {
|
||||
chomp($childPid);
|
||||
open(my $SMAPS_FH, '<', "/proc/$childPid/smaps_rollup")
|
||||
or die "failed to open PSS memory-stat from process - $!\n";
|
||||
|
||||
while (my $line = <$SMAPS_FH>) {
|
||||
if ($line =~ m/^Pss:\s+([0-9]+) kB$/) {
|
||||
$d->{memhost} = $d->{memhost} + int($1) * 1024;
|
||||
last;
|
||||
}
|
||||
}
|
||||
close $SMAPS_FH;
|
||||
}
|
||||
}
|
||||
close($fh);
|
||||
|
||||
my $pressures = PVE::ProcFSTools::read_cgroup_pressure("qemu.slice/${vmid}.scope");
|
||||
$d->{pressurecpusome} = $pressures->{cpu}->{some}->{avg10} * 1;
|
||||
$d->{pressurecpufull} = $pressures->{cpu}->{full}->{avg10} * 1;
|
||||
@ -2708,7 +2733,6 @@ sub vmstatus {
|
||||
} else {
|
||||
$d->{cpu} = $old->{cpu};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $res if !$full;
|
||||
|
Reference in New Issue
Block a user