Messages in this thread |  | | From | "Gautham R. Shenoy" <> | Subject | [PATCH v2 0/5] Track and expose idle PURR and SPURR ticks | Date | Fri, 21 Feb 2020 10:48:29 +0530 |
| |
From: "Gautham R. Shenoy" <ego@linux.vnet.ibm.com>
Hi,
This is the second version of the patches to track and expose idle PURR and SPURR ticks. These patches are required by tools such as lparstat to compute system utilization for capacity planning purposes.
v1 can be found here: https://lore.kernel.org/patchwork/cover/1159341/
The key changes from v1 are
- The sysfs reads of idle PURR and SPURR now send an smp_call_function to the target CPU in order to read the most recent value of idle PURR and SPURR. This is required if the target CPU was idle for a long duration, in which case the cycles corresponding to its latest idle duration would not be updated in the variable tracking idle PURR/SPURR. Thus merely reading the variable would not reflect the most accurate idle PURR/SPURR ticks.
- Ensured that even when idle PURR/SPURR values are read in an interrupt context in-between idle_loop_prolog() and idle_loop_epilog(), we return the value that includes the cycles spent in the most recent idle period.
- The sysfs files for idle_purr and idle_spurr are created only when the FW_FEATURE_LPAR is enabled (the earlier version was checking for FW_FEATURE_SPLPAR)
Motivation: =========== On PSeries LPARs, the data centers planners desire a more accurate view of system utilization per resource such as CPU to plan the system capacity requirements better. Such accuracy can be obtained by reading PURR/SPURR registers for CPU resource utilization.
Tools such as lparstat which are used to compute the utilization need to know [S]PURR ticks when the cpu was busy or idle. The [S]PURR counters are already exposed through sysfs. We already account for PURR ticks when we go to idle so that we can update the VPA area. This patchset extends support to account for SPURR ticks when idle, and expose both via per-cpu sysfs files.
These patches are required for enhancement to the lparstat utility that compute the CPU utilization based on PURR and SPURR which can be found here : https://groups.google.com/forum/#!topic/powerpc-utils-devel/fYRo69xO9r4
With the patches, when lparstat is run on a LPAR running CPU-Hogs, ========================================================================= $sudo ./src/lparstat -E 1 3 System Configuration type=Dedicated mode=Capped smt=8 lcpu=2 mem=4834176 kB cpus=0 ent=2.00 ---Actual--- -Normalized- %busy %idle Frequency %busy %idle ------ ------ ------------- ------ ------ 99.99 0.00 3.35GHz[111%] 110.99 0.00 100.00 0.00 3.35GHz[111%] 111.00 0.00 100.00 0.00 3.35GHz[111%] 111.00 0.00 =========================================================================
When lparstat is run on an LPAR that is idle, ========================================================================= $ sudo ./src/lparstat -E 1 3 System Configuration type=Dedicated mode=Capped smt=8 lcpu=2 mem=4834176 kB cpus=0 ent=2.00 ---Actual--- -Normalized- %busy %idle Frequency %busy %idle ------ ------ ------------- ------ ------ 0.09 99.91 2.11GHz[ 70%] 0.11 69.90 0.32 99.68 2.17GHz[ 72%] 0.25 71.75 0.56 99.44 2.18GHz[ 72%] 0.42 71.58 =========================================================================
Gautham R. Shenoy (5): powerpc: Move idle_loop_prolog()/epilog() functions to header file powerpc/idle: Add accessor function to always read latest idle PURR powerpc/pseries: Account for SPURR ticks on idle CPUs powerpc/sysfs: Show idle_purr and idle_spurr for every CPU Documentation: Document sysfs interfaces purr, spurr, idle_purr, idle_spurr
Documentation/ABI/testing/sysfs-devices-system-cpu | 39 ++++++++++ arch/powerpc/include/asm/idle.h | 88 ++++++++++++++++++++++ arch/powerpc/kernel/sysfs.c | 54 ++++++++++++- arch/powerpc/platforms/pseries/setup.c | 8 +- drivers/cpuidle/cpuidle-pseries.c | 39 ++-------- 5 files changed, 191 insertions(+), 37 deletions(-) create mode 100644 arch/powerpc/include/asm/idle.h
-- 1.9.4
|  |