• Namhyung Kim's avatar
    perf stat: Fix handling of --for-each-cgroup with --bpf-counters to match non BPF mode · 54b353a2
    Namhyung Kim authored
    The --for-each-cgroup can have the same cgroup multiple times, but this
    confuses BPF counters (since they have the same cgroup id), making only
    the last cgroup events to be counted.
    
    Let's check the cgroup name before adding a new entry to the cgroups
    list.
    
    Before:
    
      $ sudo ./perf stat -a --bpf-counters --for-each-cgroup /,/ sleep 1
    
       Performance counter stats for 'system wide':
    
           <not counted> msec cpu-clock                        /
           <not counted>      context-switches                 /
           <not counted>      cpu-migrations                   /
           <not counted>      page-faults                      /
           <not counted>      cycles                           /
           <not counted>      instructions                     /
           <not counted>      branches                         /
           <not counted>      branch-misses                    /
                8,016.04 msec cpu-clock                        /                #    7.998 CPUs utilized
                   6,152      context-switches                 /                #  767.461 /sec
                     250      cpu-migrations                   /                #   31.187 /sec
                     442      page-faults                      /                #   55.139 /sec
             613,111,487      cycles                           /                #    0.076 GHz
             280,599,604      instructions                     /                #    0.46  insn per cycle
              57,692,724      branches                         /                #    7.197 M/sec
               3,385,168      branch-misses                    /                #    5.87% of all branches
    
             1.002220125 seconds time elapsed
    
    After it becomes similar to the non-BPF mode:
    
      $ sudo ./perf stat -a --bpf-counters --for-each-cgroup /,/  sleep 1
    
       Performance counter stats for 'system wide':
    
                8,013.38 msec cpu-clock                        /                #    7.998 CPUs utilized
                   6,859      context-switches                 /                #  855.944 /sec
                     334      cpu-migrations                   /                #   41.680 /sec
                     345      page-faults                      /                #   43.053 /sec
             782,326,119      cycles                           /                #    0.098 GHz
             471,645,724      instructions                     /                #    0.60  insn per cycle
              94,963,430      branches                         /                #   11.851 M/sec
               3,685,511      branch-misses                    /                #    3.88% of all branches
    
             1.001864539 seconds time elapsed
    
    Committer notes:
    
    As a reminder, to test with BPF counters one has to use BUILD_BPF_SKEL=1
    in the make command line and have clang/llvm installed when building
    perf, otherwise the --bpf-counters option will not be available:
    
      # perf stat -a --bpf-counters --for-each-cgroup /,/ sleep 1
      Error: unknown option `bpf-counters'
    
       Usage: perf stat [<options>] [<command>]
    
          -a, --all-cpus        system-wide collection from all CPUs
      <SNIP>
      #
    
    Fixes: bb1c15b6 ("perf stat: Support regex pattern in --for-each-cgroup")
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: bpf@vger.kernel.org
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Song Liu <songliubraving@fb.com>
    Link: https://lore.kernel.org/r/20230104064402.1551516-5-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    54b353a2
cgroup.c 11.7 KB