• Song Liu's avatar
    perf stat: Enable counting events for BPF programs · fa853c4b
    Song Liu authored
    Introduce 'perf stat -b' option, which counts events for BPF programs, like:
    
      [root@localhost ~]# ~/perf stat -e ref-cycles,cycles -b 254 -I 1000
         1.487903822            115,200      ref-cycles
         1.487903822             86,012      cycles
         2.489147029             80,560      ref-cycles
         2.489147029             73,784      cycles
         3.490341825             60,720      ref-cycles
         3.490341825             37,797      cycles
         4.491540887             37,120      ref-cycles
         4.491540887             31,963      cycles
    
    The example above counts 'cycles' and 'ref-cycles' of BPF program of id
    254.  This is similar to bpftool-prog-profile command, but more
    flexible.
    
    'perf stat -b' creates per-cpu perf_event and loads fentry/fexit BPF
    programs (monitor-progs) to the target BPF program (target-prog). The
    monitor-progs read perf_event before and after the target-prog, and
    aggregate the difference in a BPF map. Then the user space reads data
    from these maps.
    
    A new 'struct bpf_counter' is introduced to provide a common interface
    that uses BPF programs/maps to count perf events.
    
    Committer notes:
    
    Removed all but bpf_counter.h includes from evsel.h, not needed at all.
    
    Also BPF map lookups for PERCPU_ARRAYs need to have as its value receive
    buffer passed to the kernel libbpf_num_possible_cpus() entries, not
    evsel__nr_cpus(evsel), as the former uses
    /sys/devices/system/cpu/possible while the later uses
    /sys/devices/system/cpu/online, which may be less than the 'possible'
    number making the bpf map lookup overwrite memory and cause hard to
    debug memory corruption.
    
    We need to continue using evsel__nr_cpus(evsel) when accessing the
    perf_counts array tho, not to overwrite another are of memory :-)
    Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Link: https://lore.kernel.org/lkml/20210120163031.GU12699@kernel.org/Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: kernel-team@fb.com
    Link: http://lore.kernel.org/lkml/20201229214214.3413833-4-songliubraving@fb.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    fa853c4b
bpf_counter.h 1.62 KB