lkml.org 
[lkml]   [2022]   [Feb]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.15 15/41] perf/x86/rapl: fix AMD event handling
    Date
    From: Stephane Eranian <eranian@google.com>

    [ Upstream commit 0036fb00a756a2f6e360d44e2e3d2200a8afbc9b ]

    The RAPL events exposed under /sys/devices/power/events should only reflect
    what the underlying hardware actually support. This is how it works on Intel
    RAPL and Intel core/uncore PMUs in general.
    But on AMD, this was not the case. All possible RAPL events were advertised.

    This is what it showed on an AMD Fam17h:
    $ ls /sys/devices/power/events/
    energy-cores energy-gpu energy-pkg energy-psys
    energy-ram energy-cores.scale energy-gpu.scale energy-pkg.scale
    energy-psys.scale energy-ram.scale energy-cores.unit energy-gpu.unit
    energy-pkg.unit energy-psys.unit energy-ram.unit

    Yet, on AMD Fam17h, only energy-pkg is supported.

    This patch fixes the problem. Given the way perf_msr_probe() works, the
    amd_rapl_msrs[] table has to have all entries filled out and in particular
    the group field, otherwise perf_msr_probe() defaults to making the event
    visible.

    With the patch applied, the kernel now only shows was is actually supported:

    $ ls /sys/devices/power/events/
    energy-pkg energy-pkg.scale energy-pkg.unit

    The patch also uses the RAPL_MSR_MASK because only the 32-bits LSB of the
    RAPL counters are relevant when reading power consumption.

    Signed-off-by: Stephane Eranian <eranian@google.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20220105185659.643355-1-eranian@google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/x86/events/rapl.c | 9 ++++++---
    1 file changed, 6 insertions(+), 3 deletions(-)

    diff --git a/arch/x86/events/rapl.c b/arch/x86/events/rapl.c
    index 85feafacc445d..77e3a47af5ad5 100644
    --- a/arch/x86/events/rapl.c
    +++ b/arch/x86/events/rapl.c
    @@ -536,11 +536,14 @@ static struct perf_msr intel_rapl_spr_msrs[] = {
    * - perf_msr_probe(PERF_RAPL_MAX)
    * - want to use same event codes across both architectures
    */
    -static struct perf_msr amd_rapl_msrs[PERF_RAPL_MAX] = {
    - [PERF_RAPL_PKG] = { MSR_AMD_PKG_ENERGY_STATUS, &rapl_events_pkg_group, test_msr },
    +static struct perf_msr amd_rapl_msrs[] = {
    + [PERF_RAPL_PP0] = { 0, &rapl_events_cores_group, 0, false, 0 },
    + [PERF_RAPL_PKG] = { MSR_AMD_PKG_ENERGY_STATUS, &rapl_events_pkg_group, test_msr, false, RAPL_MSR_MASK },
    + [PERF_RAPL_RAM] = { 0, &rapl_events_ram_group, 0, false, 0 },
    + [PERF_RAPL_PP1] = { 0, &rapl_events_gpu_group, 0, false, 0 },
    + [PERF_RAPL_PSYS] = { 0, &rapl_events_psys_group, 0, false, 0 },
    };

    -
    static int rapl_cpu_offline(unsigned int cpu)
    {
    struct rapl_pmu *pmu = cpu_to_rapl_pmu(cpu);
    --
    2.34.1
    \
     
     \ /
      Last update: 2022-02-03 21:35    [W:4.183 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site