135 lines
3.7 KiB
Diff
135 lines
3.7 KiB
Diff
From 6bc0d4f1e181c2254b7e35f9b3f77128f663a525 Mon Sep 17 00:00:00 2001
|
|
Message-Id: <6bc0d4f1e181c2254b7e35f9b3f77128f663a525.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:00:49 -0500
|
|
Subject: [PATCH V4 06/14] lparstat: Read SPURR, Idle_{PURR, SPURR} values
|
|
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>
|
|
|
|
Parse per-cpu
|
|
/sys/devices/system/cpu/cpu/{spurr, idle_purr, idle_spurr} files to
|
|
accumulate system wide SPURR, Idle PURR, Idle SPURR values like
|
|
PURR value captured in /proc/powerpc/lparcfg. Calculating scaled
|
|
utilization metrics, need them.
|
|
|
|
Signed-off-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
|
|
---
|
|
src/lparstat.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
src/lparstat.h | 11 +++++++++
|
|
2 files changed, 71 insertions(+)
|
|
|
|
diff --git a/src/lparstat.c b/src/lparstat.c
|
|
index f5c0ce5..7c55a8c 100644
|
|
--- a/src/lparstat.c
|
|
+++ b/src/lparstat.c
|
|
@@ -165,6 +165,61 @@ error:
|
|
return -1;
|
|
}
|
|
|
|
+int parse_sysfs_values(void)
|
|
+{
|
|
+ unsigned long long spurr, idle_spurr, idle_purr, value;
|
|
+ char line[SYSDATA_VALUE_SZ];
|
|
+ struct sysentry *se;
|
|
+ int i, rc;
|
|
+
|
|
+ spurr = idle_spurr = idle_purr = 0UL;
|
|
+
|
|
+ for (i = 0; cpu_sysfs_fds[i].spurr > 0; i++) {
|
|
+ rc = pread(cpu_sysfs_fds[i].spurr, (void *)line, sizeof(line), 0);
|
|
+ if (rc == -1) {
|
|
+ fprintf(stderr, "Failed to /sys/devices/system/cpu/cpu%d/spurr\n",
|
|
+ cpu_sysfs_fds[i].cpu);
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ value = strtoll(line, NULL, 16);
|
|
+ spurr += value;
|
|
+
|
|
+ rc = pread(cpu_sysfs_fds[i].idle_purr, (void *)line, sizeof(line), 0);
|
|
+ if (rc == -1) {
|
|
+ fprintf(stderr, "Failed to /sys/devices/system/cpu/cpu%d/idle_purr\n",
|
|
+ cpu_sysfs_fds[i].cpu);
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ value = strtoll(line, NULL, 16);
|
|
+ idle_purr += value;
|
|
+
|
|
+ rc = pread(cpu_sysfs_fds[i].idle_spurr, (void *)line, sizeof(line), 0);
|
|
+ if (rc == -1) {
|
|
+ fprintf(stderr, "Failed to /sys/devices/system/cpu/cpu%d/idle_spurr\n",
|
|
+ cpu_sysfs_fds[i].cpu);
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ value = strtoll(line, NULL, 16);
|
|
+ idle_spurr += value;
|
|
+ }
|
|
+
|
|
+ se = get_sysentry("spurr");
|
|
+ sprintf(se->value, "%llu", spurr);
|
|
+ se = get_sysentry("idle_purr");
|
|
+ sprintf(se->value, "%llu", idle_purr);
|
|
+ se = get_sysentry("idle_spurr");
|
|
+ sprintf(se->value, "%llu", idle_spurr);
|
|
+
|
|
+ return 0;
|
|
+
|
|
+error:
|
|
+ close_cpu_sysfs_fds(threads_in_system);
|
|
+ return -1;
|
|
+}
|
|
+
|
|
static void sig_int_handler(int signal)
|
|
{
|
|
close_cpu_sysfs_fds(threads_in_system);
|
|
@@ -750,11 +805,16 @@ void init_sysinfo(void)
|
|
|
|
void init_sysdata(void)
|
|
{
|
|
+ int rc = 0;
|
|
+
|
|
get_time();
|
|
parse_lparcfg();
|
|
parse_proc_stat();
|
|
parse_proc_ints();
|
|
get_time_base();
|
|
+ rc = parse_sysfs_values();
|
|
+ if (rc)
|
|
+ exit(rc);
|
|
}
|
|
|
|
void update_sysdata(void)
|
|
diff --git a/src/lparstat.h b/src/lparstat.h
|
|
index 617737b..eec59d6 100644
|
|
--- a/src/lparstat.h
|
|
+++ b/src/lparstat.h
|
|
@@ -266,6 +266,17 @@ struct sysentry system_data[] = {
|
|
.descr = "System Uptime",
|
|
.get = &get_sys_uptime},
|
|
|
|
+ /* /sys/devices/system/cpu/cpu<n>/ */
|
|
+ /* Sum of per CPU SPURR registers */
|
|
+ {.name = "spurr",
|
|
+ .descr = "Scaled Processor Utilization Resource Register"},
|
|
+ /* Sum of per CPU Idle PURR Values */
|
|
+ {.name = "idle_purr",
|
|
+ .descr = "Processor Utilization Resource Idle Values"},
|
|
+ /* Sum of per CPU Idle SPURR Values */
|
|
+ {.name = "idle_spurr",
|
|
+ .descr = "Scaled Processor Utilization Resource Idle Values"},
|
|
+
|
|
{.name[0] = '\0'},
|
|
};
|
|
|
|
--
|
|
2.25.3
|
|
|