• Kan Liang's avatar
    perf header: Support CPU PMU capabilities · 6f91ea28
    Kan Liang authored
    To stitch LBR call stack, the max LBR information is required. So the
    CPU PMU capabilities information has to be stored in perf header.
    
    Add a new feature HEADER_CPU_PMU_CAPS for CPU PMU capabilities.
    Retrieve all CPU PMU capabilities, not just max LBR information.
    
    Add variable max_branches to facilitate future usage.
    
    Committer testing:
    
      # ls -la /sys/devices/cpu/caps/
      total 0
      drwxr-xr-x. 2 root root    0 Apr 17 10:53 .
      drwxr-xr-x. 6 root root    0 Apr 17 07:02 ..
      -r--r--r--. 1 root root 4096 Apr 17 10:53 max_precise
      #
      # cat /sys/devices/cpu/caps/max_precise
      0
      # perf record sleep 1
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.033 MB perf.data (7 samples) ]
      #
      # perf report --header-only | egrep 'cpu(desc|.*capabilities)'
      # cpudesc : AMD Ryzen 5 3600X 6-Core Processor
      # cpu pmu capabilities: max_precise=0
      #
    
    And then on an Intel machine:
    
      $ ls -la /sys/devices/cpu/caps/
      total 0
      drwxr-xr-x. 2 root root    0 Apr 17 10:51 .
      drwxr-xr-x. 6 root root    0 Apr 17 10:04 ..
      -r--r--r--. 1 root root 4096 Apr 17 11:37 branches
      -r--r--r--. 1 root root 4096 Apr 17 10:51 max_precise
      -r--r--r--. 1 root root 4096 Apr 17 11:37 pmu_name
      $ cat /sys/devices/cpu/caps/max_precise
      3
      $ cat /sys/devices/cpu/caps/branches
      32
      $ cat /sys/devices/cpu/caps/pmu_name
      skylake
      $ perf record sleep 1
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.001 MB perf.data (8 samples) ]
      $ perf report --header-only | egrep 'cpu(desc|.*capabilities)'
      # cpudesc : Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz
      # cpu pmu capabilities: branches=32, max_precise=3, pmu_name=skylake
      $
    Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Reviewed-by: default avatarAndi Kleen <ak@linux.intel.com>
    Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
    Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Pavel Gerasimov <pavel.gerasimov@intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Vitaly Slobodskoy <vitaly.slobodskoy@intel.com>
    Link: http://lore.kernel.org/lkml/20200319202517.23423-3-kan.liang@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    6f91ea28
header.h 4.01 KB