Skip to content
  • Kan Liang's avatar
    6f91ea28
    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.com
    
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    6f91ea28
    perf header: Support CPU PMU capabilities
    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.com
    
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Loading