• James Clark's avatar
    arm64: perf: Add support for event counting threshold · 816c2675
    James Clark authored
    FEAT_PMUv3_TH (Armv8.8) permits a PMU counter to increment only on
    events whose count meets a specified threshold condition. For example if
    PMEVTYPERn.TC (Threshold Control) is set to 0b101 (Greater than or
    equal, count), and the threshold is set to 2, then the PMU counter will
    now only increment by 1 when an event would have previously incremented
    the PMU counter by 2 or more on a single processor cycle.
    
    Three new Perf event config fields, 'threshold', 'threshold_compare' and
    'threshold_count' have been added to control the feature.
    threshold_compare maps to the upper two bits of PMEVTYPERn.TC and
    threshold_count maps to the first bit of TC. These separate attributes
    have been picked rather than enumerating all the possible combinations
    of the TC field as in the Arm ARM. The attributes would be used on a
    Perf command line like this:
    
      $ perf stat -e stall_slot/threshold=2,threshold_compare=2/
    
    A new capability for reading out the maximum supported threshold value
    has also been added:
    
      $ cat /sys/bus/event_source/devices/armv8_pmuv3/caps/threshold_max
    
      0x000000ff
    
    If a threshold higher than threshold_max is provided, then an error is
    generated. If FEAT_PMUv3_TH isn't implemented or a 32 bit kernel is
    running, then threshold_max reads zero, and attempting to set a
    threshold value will also result in an error.
    
    The threshold is per PMU counter, and there are potentially different
    threshold_max values per PMU type on heterogeneous systems.
    
    Bits higher than 32 now need to be written into PMEVTYPER, so
    armv8pmu_write_evtype() has to be updated to take an unsigned long value
    rather than u32 which gives the correct behavior on both aarch32 and 64.
    Signed-off-by: default avatarJames Clark <james.clark@arm.com>
    Link: https://lore.kernel.org/r/20231211161331.1277825-11-james.clark@arm.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
    816c2675
arm_pmuv3.c 46 KB