From: Alexei Starovoitov <ast@kernel.org>
To: "David S . Miller" <davem@davemloft.net>
Cc: <daniel@iogearbox.net>, <peterz@infradead.org>, <acme@kernel.org>,
<netdev@vger.kernel.org>, <kernel-team@fb.com>
Subject: [PATCH bpf-next 0/3] perf, bpf: reveal invisible bpf programs
Date: Wed, 19 Sep 2018 15:39:32 -0700 [thread overview]
Message-ID: <20180919223935.999270-1-ast@kernel.org> (raw)
Hi All,
this patch set adds kernel and user space support to reveal
short lived bpf programs.
The kernel stores addr+bpf_prog_name information into perf ring buffer.
Later 'perf report' can properly attribute the cpu time to the program.
The following command was run before and after: 'perf record ./test_progs; perf report'
Before patch set:
# Overhead Command Shared Object Symbol
# ........ .......... ................. .......................................
#
10.73% test_progs [kernel.kallsyms] [k] __htab_map_lookup_elem
8.16% test_progs [kernel.kallsyms] [k] bpf_skb_set_tunnel_key
7.90% test_progs [kernel.kallsyms] [k] memcmp
3.10% test_progs [kernel.kallsyms] [k] lookup_nulls_elem_raw
2.57% test_progs [kernel.kallsyms] [k] dst_release
2.45% test_progs [kernel.kallsyms] [k] do_check
1.89% test_progs [kernel.kallsyms] [k] bpf_xdp_adjust_head
1.52% test_progs [kernel.kallsyms] [k] 0x00007fffa002cc5a
1.22% test_progs [kernel.kallsyms] [k] check_helper_mem_access
0.99% test_progs [kernel.kallsyms] [k] 0x00007fffa001a6a8
0.99% test_progs [kernel.kallsyms] [k] kmem_cache_alloc_trace
0.97% test_progs [kernel.kallsyms] [k] 0x00007fffa001a652
0.95% test_progs [kernel.kallsyms] [k] 0x00007fffa0042d52
0.95% test_progs [kernel.kallsyms] [k] read_tsc
0.81% test_progs [kernel.kallsyms] [k] 0x00007fffa001a660
0.77% test_progs [kernel.kallsyms] [k] 0x00007fffa0042d69
0.74% test_progs [kernel.kallsyms] [k] percpu_array_map_lookup_elem
0.69% test_progs [kernel.kallsyms] [k] 0x00007fffa001a64e
After:
# Overhead Command Shared Object Symbol
# ........ .......... ................. .............................................
#
18.13% test_progs [kernel.kallsyms] [k] bpf_prog_1accc788e7f04c38_balancer_ingres
10.73% test_progs [kernel.kallsyms] [k] __htab_map_lookup_elem
7.94% test_progs [kernel.kallsyms] [k] bpf_prog_20a05d8a586cf0e8_F
7.80% test_progs [kernel.kallsyms] [k] bpf_skb_set_tunnel_key
4.64% test_progs [kernel.kallsyms] [k] __sysfs_match_string
3.61% test_progs [kernel.kallsyms] [k] bpf_prog_9d89afa51f1dc0d7_F
3.51% test_progs [kernel.kallsyms] [k] bpf_prog_73b45270911a0294_F
3.41% test_progs [kernel.kallsyms] [k] bpf_prog_79be7b7bad8026bf_F
3.26% test_progs [kernel.kallsyms] [k] memcmp
3.10% test_progs [kernel.kallsyms] [k] lookup_nulls_elem_raw
2.89% test_progs [kernel.kallsyms] [k] bpf_prog_57bf3d413b9b7455_F
2.57% test_progs [kernel.kallsyms] [k] dst_discard
2.45% test_progs [kernel.kallsyms] [k] do_check
2.39% test_progs [kernel.kallsyms] [k] bpf_prog_576cbdaac1a4d2f6_F
1.82% test_progs [kernel.kallsyms] [k] bpf_prog_53ade2ecbddaa85b_F
1.70% test_progs [kernel.kallsyms] [k] bpf_xdp_adjust_head
1.32% test_progs [kernel.kallsyms] [k] bpf_prog_0edc54822404a598_F
Important considerations:
- Before and after the number of cpu samples are the same. No samples are lost.
But perf cannot find the symbol by IP, so a lot of small 0x00007fffa001a64e-like
symbols appear towards the end of 'perf report' and none of them look hot.
In reallity these IP addresses belong to few bpf programs that
were active at that time.
- newly loaded bpf program can be JITed into address space of unloaded prog.
7fffa001aXXX address at time X can belong to a program A, but similar
7fffa001aYYY address at time Y can belong to a different program B.
- event->mmap.pid == -1 is an existing indicator of kernel event.
event->mmap.tid == BPF_FS_MAGIC is an extension to indicate bpf related event.
Alternatively it's possible to introduce new 'enum perf_event_type' command
specificially for bpf prog load/unload, but existing RECORD_MMAP
is very close, so the choice made by this patchset is to extend it.
- steps to land the set:
Patches 1 and 2 need to go via bpf-next tree,
since we're adding support for better program names exactly in the same lines.
Patch 3 can go in parallel into perf tree. It has no effect without kernel
support and kernel support has not effect on old perf.
Peter, Arnaldo, Daniel, please review.
Alexei Starovoitov (3):
perf/core: introduce perf_event_mmap_bpf_prog
bpf: emit RECORD_MMAP events for bpf prog load/unload
tools/perf: recognize and process RECORD_MMAP events for bpf progs
include/linux/perf_event.h | 1 +
kernel/bpf/core.c | 22 +++++++++++++++++--
kernel/events/core.c | 44 +++++++++++++++++++++++++++++++++-----
tools/perf/util/machine.c | 27 +++++++++++++++++++++++
tools/perf/util/symbol.c | 13 +++++++++++
tools/perf/util/symbol.h | 1 +
6 files changed, 101 insertions(+), 7 deletions(-)
--
2.17.1
next reply other threads:[~2018-09-20 4:19 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-19 22:39 Alexei Starovoitov [this message]
2018-09-19 22:39 ` [PATCH bpf-next 1/3] perf/core: introduce perf_event_mmap_bpf_prog Alexei Starovoitov
2018-09-19 23:30 ` Song Liu
2018-09-20 0:53 ` Alexei Starovoitov
2018-09-19 22:39 ` [PATCH bpf-next 2/3] bpf: emit RECORD_MMAP events for bpf prog load/unload Alexei Starovoitov
2018-09-19 23:44 ` Song Liu
2018-09-20 0:59 ` Alexei Starovoitov
2018-09-20 5:48 ` Song Liu
2018-09-20 8:44 ` Peter Zijlstra
2018-09-20 13:25 ` Arnaldo Carvalho de Melo
2018-09-20 13:56 ` Peter Zijlstra
2018-09-21 3:14 ` Alexei Starovoitov
2018-09-21 12:25 ` Arnaldo Carvalho de Melo
2018-09-21 13:55 ` Peter Zijlstra
2018-09-21 13:59 ` Peter Zijlstra
2018-09-21 22:13 ` Alexei Starovoitov
2018-10-15 23:33 ` Song Liu
2018-10-16 23:43 ` David Ahern
2018-10-17 6:43 ` Song Liu
2018-10-17 12:11 ` Arnaldo Carvalho de Melo
2018-10-17 12:50 ` Arnaldo Carvalho de Melo
2018-10-17 16:06 ` Song Liu
2018-11-02 1:08 ` Song Liu
2018-10-17 15:09 ` David Ahern
2018-10-17 16:18 ` Song Liu
2018-10-17 16:36 ` Alexei Starovoitov
2018-10-17 18:53 ` Arnaldo Carvalho de Melo
2018-10-17 19:08 ` Alexei Starovoitov
2018-10-17 21:31 ` Arnaldo Carvalho de Melo
2018-10-17 22:01 ` Alexei Starovoitov
2018-09-20 13:36 ` Peter Zijlstra
2018-09-19 22:39 ` [PATCH perf 3/3] tools/perf: recognize and process RECORD_MMAP events for bpf progs Alexei Starovoitov
2018-09-20 13:36 ` Arnaldo Carvalho de Melo
2018-09-20 14:05 ` Arnaldo Carvalho de Melo
2018-09-21 22:57 ` Song Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180919223935.999270-1-ast@kernel.org \
--to=ast@kernel.org \
--cc=acme@kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=kernel-team@fb.com \
--cc=netdev@vger.kernel.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.