Skip to content

Commit 81c51b5

Browse files
Shrikanth Hegdetyreld
Shrikanth Hegde
authored andcommitted
lparstat: app: Use pic value at boot for accurate boot time reporting
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 <[email protected]> Signed-off-by: Tyrel Datwyler <[email protected]>
1 parent 2af8c0b commit 81c51b5

File tree

2 files changed

+4
-1
lines changed

2 files changed

+4
-1
lines changed

Diff for: src/lparstat.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,8 @@ void get_cpu_app(struct sysentry *unused_se, char *buf)
460460
se = get_sysentry("pool_idle_time");
461461
new_app = strtoll(se->value, NULL, 0);
462462
if (se->old_value[0] == '\0') {
463-
old_app = 0;
463+
se = get_sysentry("boot_pool_idle_time");
464+
old_app = strtoll(se->value, NULL, 0);
464465
} else {
465466
old_app = strtoll(se->old_value, NULL, 0);
466467
}

Diff for: src/lparstat.h

+2
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ struct sysentry system_data[] = {
124124
.get = &get_percent_entry},
125125
{.name = "pool_idle_time",
126126
.descr = "Shared Processor Pool Idle Time"},
127+
{.name = "boot_pool_idle_time",
128+
.descr = "Shared Processor Pool Idle Time"},
127129
{.name = "pool_num_procs",
128130
.descr = "Shared Processor Pool Processors"},
129131
{.name = "unallocated_capacity_weight",

0 commit comments

Comments
 (0)