From nobody Sun Sep 7 23:51:08 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=suse.de Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1756370196859696.4561281917984; Thu, 28 Aug 2025 01:36:36 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 41B5A440CF; Thu, 28 Aug 2025 04:36:35 -0400 (EDT) Received: from [172.19.199.3] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 2735544138; Thu, 28 Aug 2025 04:35:15 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 29FC24405F; Thu, 28 Aug 2025 04:35:02 -0400 (EDT) Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 7D72143FEE for ; Thu, 28 Aug 2025 04:34:58 -0400 (EDT) Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 847D922900; Thu, 28 Aug 2025 08:29:47 +0000 (UTC) Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 48EB613326; Thu, 28 Aug 2025 08:29:47 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id NxkQD3sTsGioKwAAD6G6ig (envelope-from ); Thu, 28 Aug 2025 08:29:47 +0000 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 X-Greylist: delayed 310 seconds by postgrey-1.37 at lists.libvirt.org; Thu, 28 Aug 2025 04:34:58 EDT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1756369787; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=Ldy93zzSD/QcWlNm14FFHw+fd9XGPVqbZX6n4smzMTU=; b=l0eG6BJycptxscpXO1Si/xeps6Rr04rKHcDXbtpSGwlyxpDAuux6200kBypSc5j+KomL3c 36xOtDKzS0+GcFqut3R9KLaDFycR6H4adURn4kiRVimgZ2Ufr5uf5DzkItiNpOq06mUuqD DcWjpeEz/WgcLQOA54z2TJEFs5hrxQI= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1756369787; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=Ldy93zzSD/QcWlNm14FFHw+fd9XGPVqbZX6n4smzMTU=; b=8leY1IjjUx9ynoGZL2m+Wn5qq6NJt9zucwxAMUaE8vaVAOlyZEXsDk8cws3VKHamQWc12M pczselSz6zCv7ZDQ== Authentication-Results: smtp-out1.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=l0eG6BJy; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=8leY1Ijj DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1756369787; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=Ldy93zzSD/QcWlNm14FFHw+fd9XGPVqbZX6n4smzMTU=; b=l0eG6BJycptxscpXO1Si/xeps6Rr04rKHcDXbtpSGwlyxpDAuux6200kBypSc5j+KomL3c 36xOtDKzS0+GcFqut3R9KLaDFycR6H4adURn4kiRVimgZ2Ufr5uf5DzkItiNpOq06mUuqD DcWjpeEz/WgcLQOA54z2TJEFs5hrxQI= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1756369787; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=Ldy93zzSD/QcWlNm14FFHw+fd9XGPVqbZX6n4smzMTU=; b=8leY1IjjUx9ynoGZL2m+Wn5qq6NJt9zucwxAMUaE8vaVAOlyZEXsDk8cws3VKHamQWc12M pczselSz6zCv7ZDQ== From: Claudio Fontana To: devel@lists.libvirt.org Subject: [PATCH] util: virHostCPUGetStatsLinux: support VIR_NODE_CPU_STATS_GUEST Date: Thu, 28 Aug 2025 10:29:41 +0200 Message-Id: <20250828082941.1977-1-cfontana@suse.de> X-Mailer: git-send-email 2.35.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 847D922900 X-Rspamd-Action: no action X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[99.99%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:dkim,suse.de:mid,suse.de:email]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; RCVD_TLS_ALL(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_THREE(0.00)[3]; DKIM_TRACE(0.00)[suse.de:+] Message-ID-Hash: CFDZKRBNS6XFENIYKRZSW44LXJDERQBO X-Message-ID-Hash: CFDZKRBNS6XFENIYKRZSW44LXJDERQBO X-MailFrom: cfontana@suse.de X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Claudio Fontana X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (found 2 invalid signatures) X-ZM-MESSAGEID: 1756370199594124100 Content-Type: text/plain; charset="utf-8" it is very useful for platforms to know how much time a node is spending running guests. Signed-off-by: Claudio Fontana Reviewed-by: Michal Privoznik --- include/libvirt/libvirt-host.h | 10 ++++++++ src/test/test_driver.c | 9 +++++-- src/util/virhostcpu.c | 5 +++- tests/virhostcpudata/linux-cpustat-24cpu.out | 25 ++++++++++++++++++++ tools/virsh-host.c | 3 +++ 5 files changed, 49 insertions(+), 3 deletions(-) diff --git a/include/libvirt/libvirt-host.h b/include/libvirt/libvirt-host.h index 8922d00e0c..2b899144d3 100644 --- a/include/libvirt/libvirt-host.h +++ b/include/libvirt/libvirt-host.h @@ -267,6 +267,16 @@ typedef enum { */ # define VIR_NODE_CPU_STATS_INTR "intr" =20 +/** + * VIR_NODE_CPU_STATS_GUEST: + * + * The cumulative CPU time spent running guests, + * since the node booting up (in nanoseconds). + * + * Since: 11.8.0 + */ +# define VIR_NODE_CPU_STATS_GUEST "guest" + /** * VIR_NODE_CPU_STATS_UTILIZATION: * diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 25335d9002..1165689de7 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -4435,7 +4435,7 @@ static int testNodeGetCellsFreeMemory(virConnectPtr c= onn, return ret; } =20 -#define TEST_NB_CPU_STATS 4 +#define TEST_NB_CPU_STATS 5 =20 static int testNodeGetCPUStats(virConnectPtr conn G_GNUC_UNUSED, @@ -4453,7 +4453,7 @@ testNodeGetCPUStats(virConnectPtr conn G_GNUC_UNUSED, return 0; } =20 - for (i =3D 0; i < *nparams && i < 4; i++) { + for (i =3D 0; i < *nparams && i < 5; i++) { switch (i) { case 0: if (virHostCPUStatsAssign(¶ms[i], @@ -4475,6 +4475,11 @@ testNodeGetCPUStats(virConnectPtr conn G_GNUC_UNUSED, VIR_NODE_CPU_STATS_IOWAIT, 763600000= ) < 0) return -1; break; + case 4: + if (virHostCPUStatsAssign(¶ms[i], + VIR_NODE_CPU_STATS_GUEST, 1797400000= ) < 0) + return -1; + break; } } =20 diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c index 5dbcc8987c..c3b4f87de1 100644 --- a/src/util/virhostcpu.c +++ b/src/util/virhostcpu.c @@ -182,7 +182,7 @@ virHostCPUGetStatsFreeBSD(int cpuNum, # define CPUINFO_PATH "/proc/cpuinfo" # define PROCSTAT_PATH "/proc/stat" =20 -# define LINUX_NB_CPU_STATS 4 +# define LINUX_NB_CPU_STATS 5 =20 int virHostCPUGetSocket(unsigned int cpu, unsigned int *socket) @@ -855,6 +855,9 @@ virHostCPUGetStatsLinux(FILE *procstat, iowait * TICK_TO_NSEC) < 0) return -1; =20 + if (virHostCPUStatsAssign(¶ms[4], VIR_NODE_CPU_STATS_GUEST, + guest * TICK_TO_NSEC) < 0) + return -1; return 0; } } diff --git a/tests/virhostcpudata/linux-cpustat-24cpu.out b/tests/virhostcp= udata/linux-cpustat-24cpu.out index 0a1a5bcd9a..f3183f5c41 100644 --- a/tests/virhostcpudata/linux-cpustat-24cpu.out +++ b/tests/virhostcpudata/linux-cpustat-24cpu.out @@ -3,148 +3,173 @@ kernel: 8751170 user: 14128079 idle: 1816344522 iowait: 81323 +guest: 5880634 =20 cpu0: kernel: 447603 user: 749021 idle: 75399242 iowait: 5295 +guest: 331814 =20 cpu1: kernel: 167215 user: 337326 idle: 76178612 iowait: 1121 +guest: 166726 =20 cpu2: kernel: 308930 user: 666889 idle: 75649696 iowait: 4298 +guest: 272094 =20 cpu3: kernel: 227674 user: 328464 idle: 76131634 iowait: 1219 +guest: 115551 =20 cpu4: kernel: 299514 user: 583915 idle: 75746383 iowait: 3997 +guest: 253387 =20 cpu5: kernel: 112287 user: 231867 idle: 76336319 iowait: 798 +guest: 118465 =20 cpu6: kernel: 546590 user: 896252 idle: 75132665 iowait: 7210 +guest: 410328 =20 cpu7: kernel: 177715 user: 342337 idle: 76154889 iowait: 1933 +guest: 204523 =20 cpu8: kernel: 452773 user: 772479 idle: 75359327 iowait: 5845 +guest: 347169 =20 cpu9: kernel: 1050230 user: 1079258 idle: 74532776 iowait: 3340 +guest: 150374 =20 cpu10: kernel: 535495 user: 847295 idle: 75202362 iowait: 4038 +guest: 370309 =20 cpu11: kernel: 171635 user: 323891 idle: 76181622 iowait: 993 +guest: 199566 =20 cpu12: kernel: 331031 user: 683257 idle: 75587176 iowait: 5174 +guest: 293663 =20 cpu13: kernel: 112686 user: 230633 idle: 76345295 iowait: 1367 +guest: 103907 =20 cpu14: kernel: 251393 user: 547599 idle: 75824554 iowait: 5195 +guest: 207464 =20 cpu15: kernel: 199044 user: 260673 idle: 76230586 iowait: 1379 +guest: 76655 =20 cpu16: kernel: 244158 user: 463357 idle: 75923993 iowait: 6211 +guest: 184943 =20 cpu17: kernel: 88571 user: 189253 idle: 76411610 iowait: 1388 +guest: 85456 =20 cpu18: kernel: 546539 user: 875655 idle: 75096896 iowait: 5756 +guest: 408446 =20 cpu19: kernel: 186366 user: 348768 idle: 76137323 iowait: 1299 +guest: 208604 =20 cpu20: kernel: 449460 user: 765202 idle: 75348938 iowait: 4389 +guest: 353323 =20 cpu21: kernel: 1045076 user: 1116075 idle: 74500557 iowait: 2411 +guest: 162678 =20 cpu22: kernel: 534125 user: 847779 idle: 75178185 iowait: 5632 +guest: 376150 =20 cpu23: kernel: 265029 user: 640815 idle: 75753872 iowait: 1026 +guest: 479032 =20 diff --git a/tools/virsh-host.c b/tools/virsh-host.c index 51b71b512c..e918cfa4ca 100644 --- a/tools/virsh-host.c +++ b/tools/virsh-host.c @@ -743,6 +743,7 @@ typedef enum { VIRSH_CPU_IDLE, VIRSH_CPU_IOWAIT, VIRSH_CPU_INTR, + VIRSH_CPU_GUEST, VIRSH_CPU_USAGE, VIRSH_CPU_LAST } virshCPUStats; @@ -755,6 +756,7 @@ VIR_ENUM_IMPL(virshCPUStats, VIR_NODE_CPU_STATS_IDLE, VIR_NODE_CPU_STATS_IOWAIT, VIR_NODE_CPU_STATS_INTR, + VIR_NODE_CPU_STATS_GUEST, VIR_NODE_CPU_STATS_UTILIZATION); =20 const char *virshCPUOutput[] =3D { @@ -763,6 +765,7 @@ const char *virshCPUOutput[] =3D { N_("idle:"), N_("iowait:"), N_("intr:"), + N_("guest:"), N_("usage:") }; =20 --=20 2.35.3