From nobody Fri Oct 31 03:46:12 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=renesas.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1756895058579138.86878231935532; Wed, 3 Sep 2025 03:24:18 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1108066.1458227 (Exim 4.92) (envelope-from ) id 1utkes-0002Tf-3f; Wed, 03 Sep 2025 10:24:06 +0000 Received: by outflank-mailman (output) from mailman id 1108066.1458227; Wed, 03 Sep 2025 10:24:06 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1utker-0002TW-V1; Wed, 03 Sep 2025 10:24:05 +0000 Received: by outflank-mailman (input) for mailman id 1108066; Wed, 03 Sep 2025 10:24:05 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1utker-0001Ah-Jm for xen-devel@lists.xenproject.org; Wed, 03 Sep 2025 10:24:05 +0000 Received: from rein-hpcbdc09 (unknown [1.6.89.6]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 1ca9427b-88b0-11f0-9809-7dc792cee155; Wed, 03 Sep 2025 12:24:03 +0200 (CEST) Received: by rein-hpcbdc09 (Postfix, from userid 1000) id 3254980C094F; Wed, 3 Sep 2025 15:54:02 +0530 (IST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 1ca9427b-88b0-11f0-9809-7dc792cee155 From: Jahan Murudi To: xen-devel@lists.xenproject.org Cc: Jahan Murudi , Anthony PERARD Subject: [PATCH v4 4/4] xentop: integrate pcpu support into main program Date: Wed, 3 Sep 2025 15:53:23 +0530 Message-Id: <20250903102323.2553142-5-jahan.murudi.zg@renesas.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250903102323.2553142-1-jahan.murudi.zg@renesas.com> References: <20250903102323.2553142-1-jahan.murudi.zg@renesas.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1756895058920116600 Content-Type: text/plain; charset="utf-8" Integrate physical CPU usage statistics into xentop. This patch adds: - a new command-line option (-p, --pcpus) - display of per-CPU usage statistics - cleanup of pcpu resources on exit This allows users to monitor host physical CPU utilization alongside existing domain metrics. Signed-off-by: Jahan Murudi --- tools/xentop/xentop.c | 79 +++++++++++++++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 18 deletions(-) diff --git a/tools/xentop/xentop.c b/tools/xentop/xentop.c index f5d6c19cf9..addb1c70c9 100644 --- a/tools/xentop/xentop.c +++ b/tools/xentop/xentop.c @@ -37,6 +37,7 @@ #endif =20 #include +#include "pcpu.h" =20 #define XENTOP_VERSION "1.0" =20 @@ -205,6 +206,7 @@ field_id sort_field =3D FIELD_DOMID; unsigned int first_domain_index =3D 0; unsigned int delay =3D 3; unsigned int batch =3D 0; +static unsigned int show_pcpus =3D 0; unsigned int loop =3D 1; unsigned int iterations =3D 0; int show_vcpus =3D 0; @@ -230,22 +232,23 @@ static WINDOW *cwin; /* Print usage message, using given program name */ static void usage(const char *program) { - printf("Usage: %s [OPTION]\n" - "Displays ongoing information about xen vm resources \n\n" - "-h, --help display this help and exit\n" - "-V, --version output version information and exit\n" - "-d, --delay=3DSECONDS seconds between updates (default 3)\n" - "-n, --networks output vif network data\n" - "-x, --vbds output vbd block device data\n" - "-r, --repeat-header repeat table header before each domain\n" - "-v, --vcpus output vcpu data\n" - "-b, --batch output in batch mode, no user input accepted\n" - "-i, --iterations number of iterations before exiting\n" - "-f, --full-name output the full domain name (not truncated)\= n" - "-z, --dom0-first display dom0 first (ignore sorting)\n" - "\n" XENTOP_BUGSTO, - program); - return; + printf("Usage: %s [OPTION]\n" + "Displays ongoing information about xen vm resources \n\n" + "-h, --help display this help and exit\n" + "-V, --version output version information and exit\n" + "-d, --delay=3DSECONDS seconds between updates (default 3)\n" + "-n, --networks output vif network data\n" + "-x, --vbds output vbd block device data\n" + "-r, --repeat-header repeat table header before each domain\n" + "-v, --vcpus output vcpu data\n" + "-b, --batch output in batch mode, no user input accep= ted\n" + "-p, --pcpus show physical CPU stats\n" + "-i, --iterations number of iterations before exiting\n" + "-f, --full-name output the full domain name (not truncate= d)\n" + "-z, --dom0-first display dom0 first (ignore sorting)\n" + "\n" XENTOP_BUGSTO, + program); + return; } =20 /* Print program version information */ @@ -267,6 +270,8 @@ static void cleanup(void) xenstat_free_node(cur_node); if(xhandle !=3D NULL) xenstat_uninit(xhandle); + + free_pcpu_stats(); } =20 /* Display the given message and gracefully exit */ @@ -313,6 +318,32 @@ static void print(const char *fmt, ...) } } =20 +/* PCPU statistics display function */ +static void print_pcpu_stats_display(void) +{ + int i; + int num_cpus; + + if (!has_pcpu_data()) { + print("\nNo PCPU data available\n"); + return; + } + + num_cpus =3D get_pcpu_count(); + + /* Use the existing print() function which handles cursor bounds */ + print("\nPhysical CPU Usage:\n"); + print("+-------+--------+\n"); + print("| Core | Usage |\n"); + print("+-------+--------+\n"); + + for (i =3D 0; i < num_cpus; i++) { + print("| %-5d | %5.1f%% |\n", i, get_pcpu_usage(i)); + } + + print("+-------+--------+\n"); +} + static void xentop_attron(int attr) { if (!batch) @@ -1245,6 +1276,14 @@ static void top(void) do_vbd(domains[i]); } =20 + if (show_pcpus) { + if (update_pcpu_stats(&curtime, delay) =3D=3D 0) { + print_pcpu_stats_display(); + } else { + fail("Error getting PCPU stats\n"); + } + } + if (!batch) do_bottom_line(); =20 @@ -1271,13 +1310,14 @@ int main(int argc, char **argv) { "repeat-header", no_argument, NULL, 'r' }, { "vcpus", no_argument, NULL, 'v' }, { "delay", required_argument, NULL, 'd' }, - { "batch", no_argument, NULL, 'b' }, + { "batch", no_argument, NULL, 'b' }, + { "pcpus", no_argument, NULL, 'p' }, { "iterations", required_argument, NULL, 'i' }, { "full-name", no_argument, NULL, 'f' }, { "dom0-first", no_argument, NULL, 'z' }, { 0, 0, 0, 0 }, }; - const char *sopts =3D "hVnxrvd:bi:fz"; + const char *sopts =3D "hVnxrvd:bpi:fz"; =20 if (atexit(cleanup) !=3D 0) fail("Failed to install cleanup handler.\n"); @@ -1312,6 +1352,9 @@ int main(int argc, char **argv) case 'b': batch =3D 1; break; + case 'p': + show_pcpus =3D 1; + break; case 'i': iterations =3D atoi(optarg); loop =3D 0; --=20 2.34.1