From: "Gautham R. Shenoy" <e...@linux.vnet.ibm.com> Hi,
This is the fifth 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. The previous versions can be found here: v4: https://lkml.org/lkml/2020/3/27/323 v3: https://lkml.org/lkml/2020/3/11/331 v2: https://lkml.org/lkml/2020/2/21/21 v1: https://lore.kernel.org/patchwork/cover/1159341/ They changes from v4 are: - As suggested by Naveen, moved the functions read_this_idle_purr() and read_this_idle_spurr() from Patch 2 and Patch 3 respectively to Patch 4 where it is invoked. - Dropped Patch 6 which cached the values of purr, spurr, idle_purr, idle_spurr in order to minimize the number of IPIs sent. - Updated the dates for the idle_purr, idle_spurr in the Documentation Patch 5. 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=4834112 kB cpus=0 ent=2.00 ---Actual--- -Normalized- %busy %idle Frequency %busy %idle ------ ------ ------------- ------ ------ 1 99.99 0.00 3.35GHz[111%] 110.99 0.00 2 100.00 0.00 3.35GHz[111%] 111.01 0.00 3 100.00 0.00 3.35GHz[111%] 111.00 0.00 With patches, when lparstat is run on and idle LPAR ========================================================================= System Configuration type=Dedicated mode=Capped smt=8 lcpu=2 mem=4834112 kB cpus=0 ent=2.00 ---Actual--- -Normalized- %busy %idle Frequency %busy %idle ------ ------ ------------- ------ ------ 1 0.15 99.84 2.17GHz[ 72%] 0.11 71.89 2 0.24 99.76 2.11GHz[ 70%] 0.18 69.82 3 0.24 99.75 2.11GHz[ 70%] 0.18 69.81 Gautham R. Shenoy (5): powerpc: Move idle_loop_prolog()/epilog() functions to header file powerpc/idle: Store PURR snapshot in a per-cpu global variable 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 | 93 ++++++++++++++++++++++ arch/powerpc/kernel/sysfs.c | 82 ++++++++++++++++++- arch/powerpc/platforms/pseries/setup.c | 8 +- drivers/cpuidle/cpuidle-pseries.c | 39 ++------- 5 files changed, 224 insertions(+), 37 deletions(-) create mode 100644 arch/powerpc/include/asm/idle.h -- 1.9.4