88 lines
3.1 KiB
Diff
88 lines
3.1 KiB
Diff
|
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
|
||
|
|