tools/cpupower: display residency value in idle-info
authorAboorva Devarajan <aboorvad@linux.ibm.com>
Fri, 9 Aug 2024 08:37:28 +0000 (14:07 +0530)
committerShuah Khan <skhan@linuxfoundation.org>
Fri, 9 Aug 2024 16:32:33 +0000 (10:32 -0600)
Update cpuidle tool to display the residency value of cpuidle
states. This addition provides a clearer and more detailed view
of idle state information when using cpuidle-info.

 --------------------------------
 Before Patch:
 --------------------------------
 $ cpupower idle-info
 CPUidle driver: intel_idle
 CPUidle governor: menu
 analyzing CPU 28:

 Number of idle states: 3
 Available idle states: POLL C1 C1E
 POLL:
 Flags/Description: CPUIDLE CORE POLL IDLE
 Latency: 0
 Usage: 7448
 Duration: 207170
 C1:
 Flags/Description: MWAIT 0x00
 Latency: 2
 Usage: 7023
 Duration: 3736853
 C1E:
 Flags/Description: MWAIT 0x01
 Latency: 10
 Usage: 18468
 Duration: 11396212

 --------------------------------
 After Patch:
 --------------------------------
 $ cpupower idle-info
 CPUidle driver: intel_idle
 CPUidle governor: menu
 analyzing CPU 12:

 Number of idle states: 3
 Available idle states: POLL C1 C1E
 POLL:
 Flags/Description: CPUIDLE CORE POLL IDLE
 Latency: 0
 Residency: 0
 Usage: 1950
 Duration: 38458
 C1:
 Flags/Description: MWAIT 0x00
 Latency: 2
 Residency: 2
 Usage: 10688
 Duration: 7133020
 C1E:
 Flags/Description: MWAIT 0x01
 Latency: 10
 Residency: 20
 Usage: 22356
 Duration: 15687259
 --------------------------------

Signed-off-by: Aboorva Devarajan <aboorvad@linux.ibm.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
tools/power/cpupower/lib/cpuidle.c
tools/power/cpupower/lib/cpuidle.h
tools/power/cpupower/utils/cpuidle-info.c

index 479c5971aa6da2599e661a10ed4207bc61baf17e..0ecac009273ce8dc0c7ad6c18d5c6dde893e00b7 100644 (file)
@@ -116,6 +116,7 @@ enum idlestate_value {
        IDLESTATE_USAGE,
        IDLESTATE_POWER,
        IDLESTATE_LATENCY,
+       IDLESTATE_RESIDENCY,
        IDLESTATE_TIME,
        IDLESTATE_DISABLE,
        MAX_IDLESTATE_VALUE_FILES
@@ -125,6 +126,7 @@ static const char *idlestate_value_files[MAX_IDLESTATE_VALUE_FILES] = {
        [IDLESTATE_USAGE] = "usage",
        [IDLESTATE_POWER] = "power",
        [IDLESTATE_LATENCY] = "latency",
+       [IDLESTATE_RESIDENCY] = "residency",
        [IDLESTATE_TIME]  = "time",
        [IDLESTATE_DISABLE]  = "disable",
 };
@@ -254,6 +256,12 @@ unsigned long cpuidle_state_latency(unsigned int cpu,
        return cpuidle_state_get_one_value(cpu, idlestate, IDLESTATE_LATENCY);
 }
 
+unsigned long cpuidle_state_residency(unsigned int cpu,
+                                         unsigned int idlestate)
+{
+       return cpuidle_state_get_one_value(cpu, idlestate, IDLESTATE_RESIDENCY);
+}
+
 unsigned long cpuidle_state_usage(unsigned int cpu,
                                        unsigned int idlestate)
 {
index 2e10fead2e1ec50c182e89f4c0e3563888698b5f..2ab404d4025976a39fbd6b3ff44a45017ff1eec4 100644 (file)
@@ -8,6 +8,8 @@ int cpuidle_state_disable(unsigned int cpu, unsigned int idlestate,
                                   unsigned int disable);
 unsigned long cpuidle_state_latency(unsigned int cpu,
                                                unsigned int idlestate);
+unsigned long cpuidle_state_residency(unsigned int cpu,
+                                               unsigned int idlestate);
 unsigned long cpuidle_state_usage(unsigned int cpu,
                                        unsigned int idlestate);
 unsigned long long cpuidle_state_time(unsigned int cpu,
index 44126a87fa7ae32d38cd8828be128195c204ba2b..e0d17f0de3fe377bbc26553d6c53e59ab3760039 100644 (file)
@@ -64,6 +64,8 @@ static void cpuidle_cpu_output(unsigned int cpu, int verbose)
 
                printf(_("Latency: %lu\n"),
                       cpuidle_state_latency(cpu, idlestate));
+               printf(_("Residency: %lu\n"),
+                      cpuidle_state_residency(cpu, idlestate));
                printf(_("Usage: %lu\n"),
                       cpuidle_state_usage(cpu, idlestate));
                printf(_("Duration: %llu\n"),
@@ -115,6 +117,8 @@ static void proc_cpuidle_cpu_output(unsigned int cpu)
                printf(_("promotion[--] demotion[--] "));
                printf(_("latency[%03lu] "),
                       cpuidle_state_latency(cpu, cstate));
+               printf(_("residency[%05lu] "),
+                      cpuidle_state_residency(cpu, cstate));
                printf(_("usage[%08lu] "),
                       cpuidle_state_usage(cpu, cstate));
                printf(_("duration[%020Lu] \n"),