powerpc-utils/0003-lparstat-app-Use-pic-value-at-boot-for-accurate-boot.patch

88 lines
3.1 KiB
Diff
Raw Normal View History

From 81c51b59aacaa66d90d571ee19a2deeda1d45271 Mon Sep 17 00:00:00 2001
From: Shrikanth Hegde <sshegde@linux.ibm.com>
Date: Tue, 14 May 2024 20:46:43 +0530
Subject: [PATCH] lparstat: app: Use pic value at boot for accurate boot time
reporting
Upstream: merged, expected in v1.3.13
Git-commit: 81c51b59aacaa66d90d571ee19a2deeda1d45271
When there are no options specified for lparstat, it is expected to
give reports since LPAR(Logical Partition) boot. APP(Available Physical
Processors) is an indicator for available cores in an Shared Processor
LPAR(SPLPAR). APP is derived using pool_idle_time which is obtained
using H_PIC call.
The interval based reports show correct APP value while since boot
report shows very high APP values. This happens because in that case APP
is obtained by dividing pool idle time by LPAR uptime. Since pool idle
time is reported by the PowerVM hypervisor since its boot, it need not
align with LPAR boot.
To fix that use the boot pool idle time added newly in the lparcfg as
below.
APP = (pool idle time - boot pool idle time) / (uptime * timebase)
*This depends on "powerpc/pseries: Add pool idle time at LPAR boot" be
merged into kernel*
Results: (Observe APP values)
========================================================================
lparstat
System Configuration
type=Shared mode=Uncapped smt=8 lcpu=12 mem=15573440 kB cpus=37 ent=12.00
reboot
stress-ng --cpu=$(nproc) -t 600
sleep 600
So in this case app is expected to close to 37-6=31.
====== 6.9-rc1 and lparstat 1.3.10 =============
%user %sys %wait %idle physc %entc lbusy app vcsw phint
----- ----- ----- ----- ----- ----- ----- ----- ----- -----
47.48 0.01 0.00 52.51 0.00 0.00 47.49 69099.72 541547 21
=== With this patch and this patch to do the above equation ===
%user %sys %wait %idle physc %entc lbusy app vcsw phint
----- ----- ----- ----- ----- ----- ----- ----- ----- -----
47.48 0.01 0.00 52.51 5.73 47.75 47.49 31.21 541753 21
Signed-off-by: Shrikanth Hegde <sshegde@linux.ibm.com>
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
---
src/lparstat.c | 3 ++-
src/lparstat.h | 2 ++
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/lparstat.c b/src/lparstat.c
index 9d9ba1b..30889b2 100644
--- a/src/lparstat.c
+++ b/src/lparstat.c
@@ -460,7 +460,8 @@ void get_cpu_app(struct sysentry *unused_se, char *buf)
se = get_sysentry("pool_idle_time");
new_app = strtoll(se->value, NULL, 0);
if (se->old_value[0] == '\0') {
- old_app = 0;
+ se = get_sysentry("boot_pool_idle_time");
+ old_app = strtoll(se->value, NULL, 0);
} else {
old_app = strtoll(se->old_value, NULL, 0);
}
diff --git a/src/lparstat.h b/src/lparstat.h
index b7c88e9..77203e1 100644
--- a/src/lparstat.h
+++ b/src/lparstat.h
@@ -124,6 +124,8 @@ struct sysentry system_data[] = {
.get = &get_percent_entry},
{.name = "pool_idle_time",
.descr = "Shared Processor Pool Idle Time"},
+ {.name = "boot_pool_idle_time",
+ .descr = "Shared Processor Pool Idle Time"},
{.name = "pool_num_procs",
.descr = "Shared Processor Pool Processors"},
{.name = "unallocated_capacity_weight",
--
2.45.2