[PATCH v7 00/10] Add RAPL core energy counter support for AMD CPUs

Dhananjay Ugwekar posted 10 patches 1 week ago
Documentation/arch/x86/topology.rst   |   4 +
arch/x86/events/rapl.c                | 414 ++++++++++++++++----------
arch/x86/include/asm/processor.h      |   1 +
arch/x86/include/asm/topology.h       |   1 +
arch/x86/kernel/cpu/debugfs.c         |   1 +
arch/x86/kernel/cpu/topology_common.c |   1 +
6 files changed, 272 insertions(+), 150 deletions(-)
[PATCH v7 00/10] Add RAPL core energy counter support for AMD CPUs
Posted by Dhananjay Ugwekar 1 week ago
Currently the energy-cores event in the power PMU aggregates energy
consumption data at a package level. On the other hand the core energy
RAPL counter in AMD CPUs has a core scope (which means the energy 
consumption is recorded separately for each core). Earlier efforts to add
the core event in the power PMU had failed [1], due to the difference in 
the scope of these two events. Hence, there is a need for a new core scope
PMU.

This patchset adds a new "power_core" PMU alongside the existing
"power" PMU, which will be responsible for collecting the new
"energy-core" event.

Tested the package level and core level PMU counters with workloads
pinned to different CPUs.

Results with workload pinned to CPU 4 in core 4 on an AMD Zen4 Genoa 
machine:

$ sudo perf stat --per-core -e power_core/energy-core/ -- taskset -c 4 stress-ng --matrix 1 --timeout 5s
stress-ng: info:  [21250] setting to a 5 second run per stressor
stress-ng: info:  [21250] dispatching hogs: 1 matrix
stress-ng: info:  [21250] successful run completed in 5.00s

 Performance counter stats for 'system wide':

S0-D0-C0              1               0.00 Joules power_core/energy-core/
S0-D0-C1              1               0.00 Joules power_core/energy-core/
S0-D0-C2              1               0.00 Joules power_core/energy-core/
S0-D0-C3              1               0.00 Joules power_core/energy-core/
S0-D0-C4              1               8.43 Joules power_core/energy-core/
S0-D0-C5              1               0.00 Joules power_core/energy-core/
S0-D0-C6              1               0.00 Joules power_core/energy-core/
S0-D0-C7              1               0.00 Joules power_core/energy-core/
S0-D1-C8              1               0.00 Joules power_core/energy-core/
S0-D1-C9              1               0.00 Joules power_core/energy-core/
S0-D1-C10             1               0.00 Joules power_core/energy-core/

v6 Link: https://lore.kernel.org/linux-perf-users/20241025111348.3810-1-Dhananjay.Ugwekar@amd.com/

v6 Changes:
* Pickup rb, tb tags by Rui and Gautham
* Modify the rapl_pmu_idx variable to unsigned int, and modify 
  the comment in get_rapl_pmu_idx() in patch 3 (Gautham)
* Modified commit msg in patch 1 (Gautham)

Base: tip/perf/core
 
[1]: https://lore.kernel.org/lkml/3e766f0e-37d4-0f82-3868-31b14228868d@linux.intel.com/

Dhananjay Ugwekar (9):
  perf/x86/rapl: Remove the unused get_rapl_pmu_cpumask() function
  perf/x86/rapl: Remove the cpu_to_rapl_pmu() function
  perf/x86/rapl: Rename rapl_pmu variables
  perf/x86/rapl: Make rapl_model struct global
  perf/x86/rapl: Add arguments to the init and cleanup functions
  perf/x86/rapl: Modify the generic variable names to *_pkg*
  perf/x86/rapl: Remove the global variable rapl_msrs
  perf/x86/rapl: Move the cntr_mask to rapl_pmus struct
  perf/x86/rapl: Add core energy counter support for AMD CPUs

K Prateek Nayak (1):
  x86/topology: Introduce topology_logical_core_id()

 Documentation/arch/x86/topology.rst   |   4 +
 arch/x86/events/rapl.c                | 414 ++++++++++++++++----------
 arch/x86/include/asm/processor.h      |   1 +
 arch/x86/include/asm/topology.h       |   1 +
 arch/x86/kernel/cpu/debugfs.c         |   1 +
 arch/x86/kernel/cpu/topology_common.c |   1 +
 6 files changed, 272 insertions(+), 150 deletions(-)

-- 
2.34.1
Re: [PATCH v7 00/10] Add RAPL core energy counter support for AMD CPUs
Posted by Peter Zijlstra 3 days, 4 hours ago
On Fri, Nov 15, 2024 at 06:07:56AM +0000, Dhananjay Ugwekar wrote:
> 
> Dhananjay Ugwekar (9):
>   perf/x86/rapl: Remove the unused get_rapl_pmu_cpumask() function
>   perf/x86/rapl: Remove the cpu_to_rapl_pmu() function
>   perf/x86/rapl: Rename rapl_pmu variables
>   perf/x86/rapl: Make rapl_model struct global
>   perf/x86/rapl: Add arguments to the init and cleanup functions
>   perf/x86/rapl: Modify the generic variable names to *_pkg*
>   perf/x86/rapl: Remove the global variable rapl_msrs
>   perf/x86/rapl: Move the cntr_mask to rapl_pmus struct
>   perf/x86/rapl: Add core energy counter support for AMD CPUs
> 
> K Prateek Nayak (1):
>   x86/topology: Introduce topology_logical_core_id()
> 
>  Documentation/arch/x86/topology.rst   |   4 +
>  arch/x86/events/rapl.c                | 414 ++++++++++++++++----------
>  arch/x86/include/asm/processor.h      |   1 +
>  arch/x86/include/asm/topology.h       |   1 +
>  arch/x86/kernel/cpu/debugfs.c         |   1 +
>  arch/x86/kernel/cpu/topology_common.c |   1 +
>  6 files changed, 272 insertions(+), 150 deletions(-)

Thanks, I'll stick them in a tree post -rc1.
Re: [PATCH v7 00/10] Add RAPL core energy counter support for AMD CPUs
Posted by Dhananjay Ugwekar 10 hours ago
On 11/19/2024 5:50 PM, Peter Zijlstra wrote:
> On Fri, Nov 15, 2024 at 06:07:56AM +0000, Dhananjay Ugwekar wrote:
>>
>> Dhananjay Ugwekar (9):
>>   perf/x86/rapl: Remove the unused get_rapl_pmu_cpumask() function
>>   perf/x86/rapl: Remove the cpu_to_rapl_pmu() function
>>   perf/x86/rapl: Rename rapl_pmu variables
>>   perf/x86/rapl: Make rapl_model struct global
>>   perf/x86/rapl: Add arguments to the init and cleanup functions
>>   perf/x86/rapl: Modify the generic variable names to *_pkg*
>>   perf/x86/rapl: Remove the global variable rapl_msrs
>>   perf/x86/rapl: Move the cntr_mask to rapl_pmus struct
>>   perf/x86/rapl: Add core energy counter support for AMD CPUs
>>
>> K Prateek Nayak (1):
>>   x86/topology: Introduce topology_logical_core_id()
>>
>>  Documentation/arch/x86/topology.rst   |   4 +
>>  arch/x86/events/rapl.c                | 414 ++++++++++++++++----------
>>  arch/x86/include/asm/processor.h      |   1 +
>>  arch/x86/include/asm/topology.h       |   1 +
>>  arch/x86/kernel/cpu/debugfs.c         |   1 +
>>  arch/x86/kernel/cpu/topology_common.c |   1 +
>>  6 files changed, 272 insertions(+), 150 deletions(-)
> 
> Thanks, I'll stick them in a tree post -rc1.

Thanks Peter!, there was a bug reported by Peter Jung, it is fixed by a diff that 
I posted as a reply, could you please squash the diff into the last patch of the 
series before merging or let me know if you prefer me to post the squashed patch 
separately.

Regards,
Dhananjay
Re: [PATCH v7 00/10] Add RAPL core energy counter support for AMD CPUs
Posted by Peter Zijlstra 5 hours ago
On Fri, Nov 22, 2024 at 12:04:25PM +0530, Dhananjay Ugwekar wrote:
> On 11/19/2024 5:50 PM, Peter Zijlstra wrote:
> > On Fri, Nov 15, 2024 at 06:07:56AM +0000, Dhananjay Ugwekar wrote:
> >>
> >> Dhananjay Ugwekar (9):
> >>   perf/x86/rapl: Remove the unused get_rapl_pmu_cpumask() function
> >>   perf/x86/rapl: Remove the cpu_to_rapl_pmu() function
> >>   perf/x86/rapl: Rename rapl_pmu variables
> >>   perf/x86/rapl: Make rapl_model struct global
> >>   perf/x86/rapl: Add arguments to the init and cleanup functions
> >>   perf/x86/rapl: Modify the generic variable names to *_pkg*
> >>   perf/x86/rapl: Remove the global variable rapl_msrs
> >>   perf/x86/rapl: Move the cntr_mask to rapl_pmus struct
> >>   perf/x86/rapl: Add core energy counter support for AMD CPUs
> >>
> >> K Prateek Nayak (1):
> >>   x86/topology: Introduce topology_logical_core_id()
> >>
> >>  Documentation/arch/x86/topology.rst   |   4 +
> >>  arch/x86/events/rapl.c                | 414 ++++++++++++++++----------
> >>  arch/x86/include/asm/processor.h      |   1 +
> >>  arch/x86/include/asm/topology.h       |   1 +
> >>  arch/x86/kernel/cpu/debugfs.c         |   1 +
> >>  arch/x86/kernel/cpu/topology_common.c |   1 +
> >>  6 files changed, 272 insertions(+), 150 deletions(-)
> > 
> > Thanks, I'll stick them in a tree post -rc1.
> 
> Thanks Peter!, there was a bug reported by Peter Jung, it is fixed by a diff that 
> I posted as a reply, could you please squash the diff into the last patch of the 
> series before merging or let me know if you prefer me to post the squashed patch 
> separately.

Already squashed. Thanks!