From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 4AD6C1FF15F for ; Sat, 26 Jul 2025 03:06:43 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 3A3E131ABB; Sat, 26 Jul 2025 03:07:07 +0200 (CEST) From: Aaron Lauterer To: pve-devel@lists.proxmox.com Date: Sat, 26 Jul 2025 03:06:22 +0200 Message-Id: <20250726010626.1496866-28-a.lauterer@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250726010626.1496866-1-a.lauterer@proxmox.com> References: <20250726010626.1496866-1-a.lauterer@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1753491982397 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.015 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH qemu-server v4 2/4] vmstatus: add memhost for host view of vm mem consumption X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" 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 --- Notes: changes since: v2: * add memhost description to $vmstatus_return_properties * reorder to run earlier before the cpu collection. Otherwise it might be skipped on the first call or when using `pvesh` if the cpu collection triggers 'next'. RFC: * collect memory info for all processes in cgroup directly without too generic helper function src/PVE/QemuServer.pm | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm index 59b13709..66cb9fd4 100644 --- a/src/PVE/QemuServer.pm +++ b/src/PVE/QemuServer.pm @@ -2433,6 +2433,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', @@ -2623,6 +2629,7 @@ sub vmstatus { $d->{uptime} = 0; $d->{cpu} = 0; $d->{mem} = 0; + $d->{memhost} = 0; $d->{netout} = 0; $d->{netin} = 0; @@ -2675,6 +2682,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; @@ -2707,7 +2732,6 @@ sub vmstatus { } else { $d->{cpu} = $old->{cpu}; } - } return $res if !$full; -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel