• Song Liu's avatar
    perf tools: Save bpf_prog_info and BTF of new BPF programs · d56354dc
    Song Liu authored
    To fully annotate BPF programs with source code mapping, 4 different
    information are needed:
    
        1) PERF_RECORD_KSYMBOL
        2) PERF_RECORD_BPF_EVENT
        3) bpf_prog_info
        4) btf
    
    This patch handles 3) and 4) for BPF programs loaded after 'perf
    record|top'.
    
    For timely process of these information, a dedicated event is added to
    the side band evlist.
    
    When PERF_RECORD_BPF_EVENT is received via the side band event, the
    polling thread gathers 3) and 4) vis sys_bpf and store them in perf_env.
    
    This information is saved to perf.data at the end of 'perf record'.
    
    Committer testing:
    
    The 'wakeup_watermark' member in 'struct perf_event_attr' is inside a
    unnamed union, so can't be used in a struct designated initialization
    with older gccs, get it out of that, isolating as 'attr.wakeup_watermark
    = 1;' to work with all gcc versions.
    
    We also need to add '--no-bpf-event' to the 'perf record'
    perf_event_attr tests in 'perf test', as the way that that test goes is
    to intercept the events being setup and looking if they match the fields
    described in the control files, since now it finds first the side band
    event used to catch the PERF_RECORD_BPF_EVENT, they all fail.
    
    With these issues fixed:
    
    Same scenario as for testing BPF programs loaded before 'perf record' or
    'perf top' starts, only start the BPF programs after 'perf record|top',
    so that its information get collected by the sideband threads, the rest
    works as for the programs loaded before start monitoring.
    
    Add missing 'inline' to the bpf_event__add_sb_event() when
    HAVE_LIBBPF_SUPPORT is not defined, fixing the build in systems without
    binutils devel files installed.
    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: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stanislav Fomichev <sdf@google.com>
    Link: http://lkml.kernel.org/r/20190312053051.2690567-16-songliubraving@fb.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    d56354dc
test-record-period 140 Bytes