• Wang Nan's avatar
    perf tools: Enable passing bpf object file to --event · 84c86ca1
    Wang Nan authored
    By introducing new rules in tools/perf/util/parse-events.[ly], this
    patch enables 'perf record --event bpf_file.o' to select events by an
    eBPF object file. It calls parse_events_load_bpf() to load that file,
    which uses bpf__prepare_load() and finally calls bpf_object__open() for
    the object files.
    
    After applying this patch, commands like:
    
     # perf record --event foo.o sleep
    
    become possible.
    
    However, at this point it is unable to link any useful things onto the
    evsel list because the creating of probe points and BPF program
    attaching have not been implemented.  Before real events are possible to
    be extracted, to avoid perf report error because of empty evsel list,
    this patch link a dummy evsel. The dummy event related code will be
    removed when probing and extracting code is ready.
    
    Commiter notes:
    
    Using it:
    
      $ ls -la foo.o
      ls: cannot access foo.o: No such file or directory
      $ perf record --event foo.o sleep
      libbpf: failed to open foo.o: No such file or directory
      event syntax error: 'foo.o'
                           \___ BPF object file 'foo.o' is invalid
    
      (add -v to see detail)
      Run 'perf list' for a list of valid events
    
       Usage: perf record [<options>] [<command>]
          or: perf record [<options>] -- <command> [<options>]
    
          -e, --event <event>   event selector. use 'perf list' to list available events
      $
    
      $ file /tmp/build/perf/perf.o
      /tmp/build/perf/perf.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
      $ perf record --event /tmp/build/perf/perf.o sleep
      libbpf: /tmp/build/perf/perf.o is not an eBPF object file
      event syntax error: '/tmp/build/perf/perf.o'
                           \___ BPF object file '/tmp/build/perf/perf.o' is invalid
    
      (add -v to see detail)
      Run 'perf list' for a list of valid events
    
       Usage: perf record [<options>] [<command>]
          or: perf record [<options>] -- <command> [<options>]
    
          -e, --event <event>   event selector. use 'perf list' to list available events
      $
    
      $ file /tmp/foo.o
      /tmp/foo.o: ELF 64-bit LSB relocatable, no machine, version 1 (SYSV), not stripped
      $ perf record --event /tmp/foo.o sleep 1
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.013 MB perf.data ]
      $ perf evlist
      /tmp/foo.o
      $ perf evlist  -v
      /tmp/foo.o: type: 1, size: 112, config: 0x9, { sample_period, sample_freq }: 4000, sample_type: IP|TID|TIME|PERIOD, disabled: 1, inherit: 1, mmap: 1, comm: 1, freq: 1, enable_on_exec: 1, task: 1, sample_id_all: 1, exclude_guest: 1, mmap2: 1, comm_exec: 1
      $
    
    So, type 1 is PERF_TYPE_SOFTWARE, config 0x9 is PERF_COUNT_SW_DUMMY, ok.
    
      $ perf report --stdio
      Error:
      The perf.data file has no samples!
      # To display the perf.data header info, please use --header/--header-only options.
      #
      $
    Signed-off-by: default avatarWang Nan <wangnan0@huawei.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Alexei Starovoitov <ast@plumgrid.com>
    Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: He Kuang <hekuang@huawei.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kaixu Xia <xiakaixu@huawei.com>
    Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Zefan Li <lizefan@huawei.com>
    Cc: pi3orama@163.com
    Link: http://lkml.kernel.org/r/1444826502-49291-4-git-send-email-wangnan0@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    84c86ca1
perf.c 14.8 KB