6119fdc606
- ofpathname: speed up l2of_scsi() - ofpathname: failed to boot - update lparstat man page with -E option - enable support for ibm,drc-info property
162 lines
4.9 KiB
Diff
162 lines
4.9 KiB
Diff
From 9ffdec9aca02761034cd5e87d8f6da0b54a4f770 Mon Sep 17 00:00:00 2001
|
|
Message-Id: <9ffdec9aca02761034cd5e87d8f6da0b54a4f770.1587532692.git.kamalesh@linux.vnet.ibm.com>
|
|
In-Reply-To: <cover.1587532692.git.kamalesh@linux.vnet.ibm.com>
|
|
References: <cover.1587532692.git.kamalesh@linux.vnet.ibm.com>
|
|
From: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
|
|
Date: Tue, 21 Apr 2020 08:15:25 -0500
|
|
Subject: [PATCH V4 12/14] lparstat: Add switch to print Scaled metrics
|
|
To: powerpc-utils-devel@googlegroups.com
|
|
Cc: Tyrel Datwyler <tyreld@linux.ibm.com>,
|
|
Nathan Lynch <nathanl@linux.ibm.com>,
|
|
Naveen N . Rao <naveen.n.rao@linux.vnet.ibm.com>,
|
|
Gautham R . Shenoy <ego@linux.vnet.ibm.com>,
|
|
Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
|
|
|
|
Add '-E' command line switch to print scaled version of meterics, this
|
|
switch prints CPU utilization/Idle based on Actual (PURR) and Scaled
|
|
(SPURR) values along with the current effective frequency of the system.
|
|
|
|
output:
|
|
|
|
~ # lparstat -E 1 3
|
|
|
|
System Configuration
|
|
type=Dedicated mode=Capped smt=8 lcpu=2 mem=4324928 kB cpus=0 ent=2.00
|
|
|
|
---Actual--- -Normalized-
|
|
%busy %idle Frequency %busy %idle
|
|
------ ------ ------------- ------ ------
|
|
0.10 99.90 2.13GHz[ 70%] 0.10 69.91
|
|
0.07 99.92 2.10GHz[ 69%] 0.05 68.95
|
|
0.08 99.92 2.10GHz[ 69%] 0.05 68.95
|
|
|
|
Signed-off-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
|
|
---
|
|
src/lparstat.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++----
|
|
1 file changed, 57 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/src/lparstat.c b/src/lparstat.c
|
|
index 3768b79..5390b9f 100644
|
|
--- a/src/lparstat.c
|
|
+++ b/src/lparstat.c
|
|
@@ -40,6 +40,7 @@
|
|
#define SE_NOT_VALID "-"
|
|
|
|
static bool o_legacy = false;
|
|
+static bool o_scaled = false;
|
|
|
|
static int threads_per_cpu;
|
|
static int cpus_in_system;
|
|
@@ -928,6 +929,10 @@ void init_sysinfo(void)
|
|
exit(rc);
|
|
}
|
|
|
|
+ /* refer to init_sysdata for explanation */
|
|
+ if (!o_scaled)
|
|
+ return;
|
|
+
|
|
get_online_cores();
|
|
|
|
rc = get_nominal_frequency();
|
|
@@ -953,6 +958,12 @@ void init_sysdata(void)
|
|
parse_proc_stat();
|
|
parse_proc_ints();
|
|
get_time_base();
|
|
+
|
|
+ /* Skip reading spurr, purr, idle_{purr,spurr} and calculating
|
|
+ * effective frequency for default option */
|
|
+ if (!o_scaled)
|
|
+ return;
|
|
+
|
|
rc = parse_sysfs_values();
|
|
if (rc)
|
|
exit(rc);
|
|
@@ -1067,6 +1078,42 @@ void print_default_output(int interval, int count)
|
|
} while (--count > 0);
|
|
}
|
|
|
|
+void print_scaled_output(int interval, int count)
|
|
+{
|
|
+ char purr[32], purr_idle[32], spurr[32], spurr_idle[32];
|
|
+ char nominal_f[32], effective_f[32];
|
|
+ double nominal_freq, effective_freq;
|
|
+ char *descr;
|
|
+
|
|
+ print_system_configuration();
|
|
+
|
|
+ fprintf(stdout, "---Actual--- -Normalized-\n");
|
|
+ fprintf(stdout, "%%busy %%idle Frequency %%busy %%idle\n");
|
|
+ fprintf(stdout, "------ ------ ------------- ------ ------\n");
|
|
+ do {
|
|
+ if (interval) {
|
|
+ sleep(interval);
|
|
+ update_sysdata();
|
|
+ }
|
|
+
|
|
+ get_sysdata("purr_cpu_util", &descr, purr);
|
|
+ get_sysdata("purr_cpu_idle", &descr, purr_idle);
|
|
+ get_sysdata("spurr_cpu_util", &descr, spurr);
|
|
+ get_sysdata("spurr_cpu_idle", &descr, spurr_idle);
|
|
+ get_sysdata("nominal_freq", &descr, nominal_f);
|
|
+ get_sysdata("effective_freq", &descr, effective_f);
|
|
+ nominal_freq = strtod(nominal_f, NULL);
|
|
+ effective_freq = strtod(effective_f, NULL);
|
|
+
|
|
+ fprintf(stdout, "%6s %6s %5.2fGHz[%3d%%] %6s %6s\n",
|
|
+ purr, purr_idle,
|
|
+ effective_freq/1000,
|
|
+ (int)((effective_freq/nominal_freq * 100)+ 0.44 ),
|
|
+ spurr, spurr_idle );
|
|
+ fflush(stdout);
|
|
+ } while (--count > 0);
|
|
+}
|
|
+
|
|
static void usage(void)
|
|
{
|
|
printf("Usage: lparstat [ options ]\n\tlparstat <interval> [ count ]\n\n"
|
|
@@ -1074,6 +1121,7 @@ static void usage(void)
|
|
"\t-h, --help Show this message and exit.\n"
|
|
"\t-V, --version \tDisplay lparstat version information.\n"
|
|
"\t-i Lists details on the LPAR configuration.\n"
|
|
+ "\t-E Print SPURR metrics.\n"
|
|
"\t-l, --legacy Print the report in legacy format.\n"
|
|
"interval The interval parameter specifies the amount of time between each report.\n"
|
|
"count The count parameter specifies how many reports will be displayed.\n");
|
|
@@ -1098,7 +1146,7 @@ int main(int argc, char *argv[])
|
|
exit(1);
|
|
}
|
|
|
|
- while ((c = getopt_long(argc, argv, "iVhl",
|
|
+ while ((c = getopt_long(argc, argv, "iEVhl",
|
|
long_opts, &opt_index)) != -1) {
|
|
switch(c) {
|
|
case 'i':
|
|
@@ -1107,6 +1155,9 @@ int main(int argc, char *argv[])
|
|
case 'l':
|
|
o_legacy = true;
|
|
break;
|
|
+ case 'E':
|
|
+ o_scaled = true;
|
|
+ break;
|
|
case 'V':
|
|
printf("lparstat - %s\n", VERSION);
|
|
return 0;
|
|
@@ -1134,9 +1185,11 @@ int main(int argc, char *argv[])
|
|
|
|
if (i_option)
|
|
print_iflag_data();
|
|
- else
|
|
+ else if (o_scaled) {
|
|
+ print_scaled_output(interval, count);
|
|
+ close_cpu_sysfs_fds(threads_in_system);
|
|
+ } else {
|
|
print_default_output(interval, count);
|
|
-
|
|
- close_cpu_sysfs_fds(threads_in_system);
|
|
+ }
|
|
return 0;
|
|
}
|
|
--
|
|
2.25.3
|
|
|