linux/tools/perf
Song Liu fa853c4b83 perf stat: Enable counting events for BPF programs
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: Song Liu <songliubraving@fb.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Link: https://lore.kernel.org/lkml/20210120163031.GU12699@kernel.org/
Acked-by: Namhyung 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.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-01-20 14:25:28 -03:00
..
arch perf arm64: Add argument support for SDT 2020-12-28 09:53:28 -03:00
bench tools arch: Update arch/x86/lib/mem{cpy,set}_64.S copies used in 'perf bench mem memcpy' 2020-11-12 17:55:41 -03:00
Documentation perf stat: Enable counting events for BPF programs 2021-01-20 14:25:28 -03:00
examples/bpf
include/bpf
jvmti perf jvmti: Remove redundant jitdump line table entries 2020-05-29 16:51:38 -03:00
pmu-events perf vendor events: Add JSON metrics for imx8mm DDR Perf 2020-12-17 14:36:17 -03:00
python tweewide: Fix most Shebang lines 2020-12-08 23:30:04 +09:00
scripts perf script: Add min, max to futex-contention output, in addition to avg 2020-09-23 12:58:53 -03:00
tests perf stat aggregation: Add separate thread member 2020-12-24 10:05:28 -03:00
trace tools arch x86: Sync the msr-index.h copy with the kernel sources 2020-12-24 09:24:19 -03:00
ui perf evlist: Use the right prefix for 'struct evlist' event selection methods 2020-11-30 15:01:08 -03:00
util perf stat: Enable counting events for BPF programs 2021-01-20 14:25:28 -03:00
.gitignore
Build
builtin-annotate.c perf evlist: Use the right prefix for 'struct evlist' event group methods 2020-11-30 15:00:12 -03:00
builtin-bench.c perf bench: Add build-id injection benchmark 2020-10-13 10:59:42 -03:00
builtin-buildid-cache.c perf buildid-cache: Add --debuginfod option to specify a server to fetch debug files 2020-12-28 12:20:39 -03:00
builtin-buildid-list.c perf buildid-list: Add support for mmap2's buildid events 2020-12-28 12:23:09 -03:00
builtin-c2c.c perf c2c: Support AUX trace 2020-11-11 12:27:06 -03:00
builtin-config.c
builtin-data.c perf data: Add support to store time of day in CTF data conversion 2020-08-06 09:43:37 -03:00
builtin-diff.c perf evlist: Use the right prefix for 'struct evlist' diff methods 2020-11-30 15:18:48 -03:00
builtin-evlist.c perf evlist: Support pipe mode display 2020-12-17 14:36:17 -03:00
builtin-ftrace.c perf evlist: Use the right prefix for 'struct evlist' create maps methods 2020-11-30 14:56:52 -03:00
builtin-help.c
builtin-inject.c Merge remote-tracking branch 'torvalds/master' into perf/core 2020-11-30 08:56:55 -03:00
builtin-kallsyms.c
builtin-kmem.c perf evlist: Use the right prefix for 'struct evlist' 'find' methods 2020-11-30 09:48:07 -03:00
builtin-kvm.c perf evlist: Use the right prefix for 'struct evlist' mmap pages parsing method 2020-11-30 15:15:30 -03:00
builtin-list.c perf list: Remove dead code in argument check 2020-09-09 11:12:10 -03:00
builtin-lock.c perf lock: Don't free "lock_seq_stat" if read_count isn't zero 2020-11-12 17:55:41 -03:00
builtin-mem.c perf mem: Factor out a function to generate sort order 2020-12-19 17:53:29 -03:00
builtin-probe.c
builtin-record.c perf record: Add --buildid-mmap option to enable PERF_RECORD_MMAP2's build id 2020-12-28 11:35:57 -03:00
builtin-report.c perf report: Support --header-only for pipe mode 2020-12-17 14:36:17 -03:00
builtin-sched.c perf evlist: Use the right prefix for 'struct evlist' 'find' methods 2020-11-30 09:48:07 -03:00
builtin-script.c perf script: Support data page size 2020-12-19 17:04:39 -03:00
builtin-stat.c perf stat: Enable counting events for BPF programs 2021-01-20 14:25:28 -03:00
builtin-timechart.c perf tools: Replace zero-length array with flexible-array 2020-05-28 10:03:27 -03:00
builtin-top.c perf evlist: Use the right prefix for 'struct evlist' mmap pages parsing method 2020-11-30 15:15:30 -03:00
builtin-trace.c perf evlist: Use the right prefix for 'struct evlist' mmap pages parsing method 2020-11-30 15:15:30 -03:00
builtin-version.c perf version: Add a feature for libpfm4 2020-11-04 09:42:40 -03:00
builtin.h
check-headers.sh perf s390: Move syscall.tbl check into check-headers.sh 2020-12-24 09:24:20 -03:00
command-list.txt
CREDITS
design.txt
Makefile
Makefile.config perf build: Support build BPF skeletons with perf 2021-01-15 15:49:07 -03:00
Makefile.perf perf stat: Enable counting events for BPF programs 2021-01-20 14:25:28 -03:00
MANIFEST
perf-archive.sh
perf-completion.sh
perf-read-vdso.c
perf-sys.h perf tests: Call test_attr__open() directly 2020-09-10 11:55:37 -03:00
perf-with-kcore.sh
perf.c
perf.h