Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1215190

[PATCH 13/32] perf tools: Attach eBPF program to perf event

From Wang Nan <wangnan0@huawei.com>
Newsgroups linux.kernel
Subject [PATCH 13/32] perf tools: Attach eBPF program to perf event
Date 2015-08-28 09:20 +0200
Message-ID <q2m79-4Ey-55@gated-at.bofh.it> (permalink)
References <q2lXr-4sW-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


This is the final patch which makes basic BPF filter work. After
applying this patch, users are allowed to use BPF filter like:

 # perf record --event ./hello_world.c ls

In this patch PERF_EVENT_IOC_SET_BPF ioctl is used to attach eBPF
program to a newly created perf event. The file descriptor of the
eBPF program is passed to perf record using previous patches, and
stored into evsel->bpf_fd.

It is possible that different perf event are created for one kprobe
events for different CPUs. In this case, when trying to call the
ioctl, EEXIST will be return. This patch doesn't treat it as an error.

Signed-off-by: Wang Nan <wangnan0@huawei.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: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Link: http://lkml.kernel.org/n/1436445342-1402-26-git-send-email-wangnan0@huawei.com
---
 tools/perf/util/evsel.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 77a425f..51132d3 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -1363,6 +1363,22 @@ retry_open:
 					  err);
 				goto try_fallback;
 			}
+
+			if (evsel->bpf_fd >= 0) {
+				int evt_fd = FD(evsel, cpu, thread);
+				int bpf_fd = evsel->bpf_fd;
+
+				err = ioctl(evt_fd,
+					    PERF_EVENT_IOC_SET_BPF,
+					    bpf_fd);
+				if (err && errno != EEXIST) {
+					pr_err("failed to attach bpf fd %d: %s\n",
+					       bpf_fd, strerror(errno));
+					err = -EINVAL;
+					goto out_close;
+				}
+			}
+
 			set_rlimit = NO_CHANGE;
 
 			/*
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[GIT PULL 00/32] perf tools: filtering events using eBPF programs Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:10 +0200
  [PATCH 11/32] perf tools: Add bpf_fd field to evsel and config it Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 03/32] perf tools: Introduce dummy evsel Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 14/32] perf tools: Suppress probing messages when probing by BPF loading Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 07/32] perf probe: Attach trace_probe_event with perf_probe_event Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 08/32] perf record, bpf: Parse and probe eBPF programs probe points Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 02/32] perf tools: Don't set cmdline_group_boundary if no evsel is collected Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 28/32] perf record: Support custom vmlinux path Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 12/32] perf tools: Allow filter option to be applied to bof object Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 27/32] perf tools: Use same BPF program if arguments are identical Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 04/32] perf tools: Make perf depend on libbpf Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 09/32] perf bpf: Collect 'struct perf_probe_event' for bpf_program Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 21/32] perf probe: Reset args and nargs for probe_trace_event when failure Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 16/32] perf tools: Infrastructure for compiling scriptlets when passing '.c' to --event Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 24/32] perf tools: Introduce arch_get_reg_info() for x86 Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 15/32] perf record: Add clang options for compiling BPF scripts Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 18/32] perf test: Add 'perf test BPF' Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 19/32] bpf tools: Load a program with different instances using preprocessor Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 13/32] perf tools: Attach eBPF program to perf event Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  [PATCH 05/32] perf ebpf: Add the libbpf glue Wang Nan <wangnan0@huawei.com> - 2015-08-28 09:20 +0200
  Re: [GIT PULL 00/32] perf tools: filtering events using eBPF programs Alexei Starovoitov <ast@plumgrid.com> - 2015-08-29 02:30 +0200
    Re: [GIT PULL 00/32] perf tools: filtering events using eBPF programs Arnaldo Carvalho de Melo <acme@redhat.com> - 2015-08-31 16:00 +0200
      Re: [GIT PULL 00/32] perf tools: filtering events using eBPF programs "Wangnan (F)" <wangnan0@huawei.com> - 2015-08-31 16:20 +0200

csiph-web