• Zhang Rui's avatar
    perf/x86/rapl: Fix psys-energy event on Intel SPR platform · 838342a6
    Zhang Rui authored
    There are several things special for the RAPL Psys energy counter, on
    Intel Sapphire Rapids platform.
    1. it contains one Psys master package, and only CPUs on the master
       package can read valid value of the Psys energy counter, reading the
       MSR on CPUs in the slave package returns 0.
    2. The master package does not have to be Physical package 0. And when
       all the CPUs on the Psys master package are offlined, we lose the Psys
       energy counter, at runtime.
    3. The Psys energy counter can be disabled by BIOS, while all the other
       energy counters are not affected.
    
    It is not easy to handle all of these in the current RAPL PMU design
    because
    a) perf_msr_probe() validates the MSR on some random CPU, which may either
       be in the Psys master package or in the Psys slave package.
    b) all the RAPL events share the same PMU, and there is not API to remove
       the psys-energy event cleanly, without affecting the other events in
       the same PMU.
    
    This patch addresses the problems in a simple way.
    
    First,  by setting .no_check bit for RAPL Psys MSR, the psys-energy event
    is always added, so we don't have to check the Psys ENERGY_STATUS MSR on
    master package.
    
    Then, by removing rapl_not_visible(), the psys-energy event is always
    available in sysfs. This does not affect the previous code because, for
    the RAPL MSRs with .no_check cleared, the .is_visible() callback is always
    overriden in the perf_msr_probe() function.
    
    Note, although RAPL PMU is die-based, and the Psys energy counter MSR on
    Intel SPR is package scope, this is not a problem because there is only
    one die in each package on SPR.
    Signed-off-by: default avatarZhang Rui <rui.zhang@intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: default avatarAndi Kleen <ak@linux.intel.com>
    Link: https://lkml.kernel.org/r/20210204161816.12649-3-rui.zhang@intel.com
    838342a6
rapl.c 23.1 KB