• Andi Kleen's avatar
    perf tools: Add support for exclusive groups/events · 0997a266
    Andi Kleen authored
    Peter suggested that using the exclusive mode in perf could avoid some
    problems with bad scheduling of groups. Exclusive is implemented in the
    kernel, but wasn't exposed by the perf tool, so hard to use without
    custom low level API users.
    
    Add support for marking groups or events with :e for exclusive in the
    perf tool.  The implementation is basically the same as the existing
    pinned attribute.
    
    Committer testing:
    
      # perf test "parse event"
       6: Parse event definition strings                                  : Ok
      # perf test -v "parse event" |& grep :u*e
      running test 56 'instructions:uep'
      running test 57 '{cycles,cache-misses,branch-misses}:e'
      #
      #
      # grep "model name" -m1 /proc/cpuinfo
      model name	: AMD Ryzen 9 3900X 12-Core Processor
      #
      # perf stat -a -e '{cycles,cache-misses,branch-misses}:e' sleep 1
    
       Performance counter stats for 'system wide':
    
           <not counted>      cycles                                                        (0.00%)
           <not counted>      cache-misses                                                  (0.00%)
           <not counted>      branch-misses                                                 (0.00%)
    
             1.001269893 seconds time elapsed
    
      Some events weren't counted. Try disabling the NMI watchdog:
      	echo 0 > /proc/sys/kernel/nmi_watchdog
      	perf stat ...
      	echo 1 > /proc/sys/kernel/nmi_watchdog
      # echo 0 > /proc/sys/kernel/nmi_watchdog
      # perf stat -a -e '{cycles,cache-misses,branch-misses}:e' sleep 1
    
       Performance counter stats for 'system wide':
    
           1,298,663,141      cycles
              30,962,215      cache-misses
               5,325,150      branch-misses
    
             1.001474934 seconds time elapsed
    
      #
      # The output for asking for precise events on AMD needs to improve, it
      # supposedly works only for system wide or per CPU
      #
      # perf stat -a -e '{cycles,cache-misses,branch-misses}:uep' sleep 1
      Error:
      The sys_perf_event_open() syscall returned with 22 (Invalid argument) for event (cycles).
      /bin/dmesg | grep -i perf may provide additional information.
    
      # perf stat -a -e '{cycles,cache-misses,branch-misses}:ue' sleep 1
    
       Performance counter stats for 'system wide':
    
             746,363,126      cycles
              16,881,611      cache-misses
               2,871,259      branch-misses
    
             1.001636066 seconds time elapsed
    
      #
    Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lore.kernel.org/lkml/20201014144255.22699-1-andi@firstfloor.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    0997a266
parse-events.l 11.8 KB