• Song Liu's avatar
    perf bpf: Save bpf_prog_info information as headers to perf.data · 606f972b
    Song Liu authored
    This patch enables perf-record to save bpf_prog_info information as
    headers to perf.data. A new header type HEADER_BPF_PROG_INFO is
    introduced for this data.
    
    Committer testing:
    
    As root, being on the kernel sources top level directory, run:
    
      # perf trace -e tools/perf/examples/bpf/augmented_raw_syscalls.c -e *msg
    
    Just to compile and load a BPF program that attaches to the
    raw_syscalls:sys_{enter,exit} tracepoints to trace the syscalls ending
    in "msg" (recvmsg, sendmsg, recvmmsg, sendmmsg, etc).
    
    Then do a systemwide perf record session for a few seconds:
    
      # perf record -a sleep 2s
    
    Then look at:
    
      # perf report --header-only | grep -i bpf
      # bpf_prog_info of id 13
      # bpf_prog_info of id 14
      # bpf_prog_info of id 15
      # bpf_prog_info of id 16
      # bpf_prog_info of id 17
      # bpf_prog_info of id 18
      # bpf_prog_info of id 21
      # bpf_prog_info of id 22
      # bpf_prog_info of id 208
      # bpf_prog_info of id 209
      #
    
    We need to show more info about these programs, like bpftool does for
    the ones running on the system, i.e. 'perf record/perf report' become a
    way of saving the BPF state in a machine to then analyse on another,
    together with all the other information that is already saved in the
    perf.data header:
    
      # perf report --header-only
      # ========
      # captured on    : Tue Mar 12 11:42:13 2019
      # header version : 1
      # data offset    : 296
      # data size      : 16294184
      # feat offset    : 16294480
      # hostname : quaco
      # os release : 5.0.0+
      # perf version : 5.0.gd783c8
      # arch : x86_64
      # nrcpus online : 8
      # nrcpus avail : 8
      # cpudesc : Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz
      # cpuid : GenuineIntel,6,142,10
      # total memory : 24555720 kB
      # cmdline : /home/acme/bin/perf (deleted) record -a
      # event : name = cycles:ppp, , id = { 3190123, 3190124, 3190125, 31901264, 3190127, 3190128, 3190129, 3190130 }, size = 112, { sample_period, sample_freq } = 4000, sample_type = IP|TID|TIME|CPU|PERIOD, read_format = ID, disabled = 1, inherit = 1, mmap = 1, comm = 1, freq = 1, task = 1, precise_ip = 3, sample_id_all = 1, exclude_guest = 1, mmap2 = 1, comm_exec = 1
      # CPU_TOPOLOGY info available, use -I to display
      # NUMA_TOPOLOGY info available, use -I to display
      # pmu mappings: intel_pt = 8, software = 1, power = 11, uprobe = 7, uncore_imc = 12, cpu = 4, cstate_core = 18, uncore_cbox_2 = 15, breakpoint = 5, uncore_cbox_0 = 13, tracepoint = 2, cstate_pkg = 19, uncore_arb = 17, kprobe = 6, i915 = 10, msr = 9, uncore_cbox_3 = 16, uncore_cbox_1 = 14
      # CACHE info available, use -I to display
      # time of first sample : 116392.441701
      # time of last sample : 116400.932584
      # sample duration :   8490.883 ms
      # MEM_TOPOLOGY info available, use -I to display
      # bpf_prog_info of id 13
      # bpf_prog_info of id 14
      # bpf_prog_info of id 15
      # bpf_prog_info of id 16
      # bpf_prog_info of id 17
      # bpf_prog_info of id 18
      # bpf_prog_info of id 21
      # bpf_prog_info of id 22
      # bpf_prog_info of id 208
      # bpf_prog_info of id 209
      # missing features: TRACING_DATA BRANCH_STACK GROUP_DESC AUXTRACE STAT CLOCKID DIR_FORMAT
      # ========
      #
    
    Committer notes:
    
    We can't use the libbpf unconditionally, as the build may have been with
    NO_LIBBPF, when we end up with linking errors, so provide dummy
    {process,write}_bpf_prog_info() wrapped by HAVE_LIBBPF_SUPPORT for that
    case.
    
    Printing are not affected by this, so can continue as is.
    Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
    Reviewed-by: default avatarJiri Olsa <jolsa@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stanislav Fomichev <sdf@google.com>
    Cc: kernel-team@fb.com
    Link: http://lkml.kernel.org/r/20190312053051.2690567-8-songliubraving@fb.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    606f972b
header.c 85.5 KB