• Athira Rajeev's avatar
    powerpc/perf: Fix power9 event alternatives · 0dcad700
    Athira Rajeev authored
    When scheduling a group of events, there are constraint checks done to
    make sure all events can go in a group. Example, one of the criteria is
    that events in a group cannot use the same PMC. But platform specific
    PMU supports alternative event for some of the event codes. During
    perf_event_open(), if any event group doesn't match constraint check
    criteria, further lookup is done to find alternative event.
    
    By current design, the array of alternatives events in PMU code is
    expected to be sorted by column 0. This is because in
    find_alternative() the return criteria is based on event code
    comparison. ie. "event < ev_alt[i][0])". This optimisation is there
    since find_alternative() can be called multiple times. In power9 PMU
    code, the alternative event array is not sorted properly and hence there
    is breakage in finding alternative events.
    
    To work with existing logic, fix the alternative event array to be
    sorted by column 0 for power9-pmu.c
    
    Results:
    
    With alternative events, multiplexing can be avoided. That is, for
    example, in power9 PM_LD_MISS_L1 (0x3e054) has alternative event,
    PM_LD_MISS_L1_ALT (0x400f0). This is an identical event which can be
    programmed in a different PMC.
    
    Before:
    
     # perf stat -e r3e054,r300fc
    
     Performance counter stats for 'system wide':
    
               1057860      r3e054              (50.21%)
                   379      r300fc              (49.79%)
    
           0.944329741 seconds time elapsed
    
    Since both the events are using PMC3 in this case, they are
    multiplexed here.
    
    After:
    
     # perf stat -e r3e054,r300fc
    
     Performance counter stats for 'system wide':
    
               1006948      r3e054
                   182      r300fc
    
    Fixes: 91e0bd1e ("powerpc/perf: Add PM_LD_MISS_L1 and PM_BR_2PATH to power9 event list")
    Signed-off-by: default avatarAthira Rajeev <atrajeev@linux.vnet.ibm.com>
    Reviewed-by: default avatarMadhavan Srinivasan <maddy@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20220419114828.89843-1-atrajeev@linux.vnet.ibm.com
    0dcad700
power9-pmu.c 13.5 KB