Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932436AbbFIFv7 (ORCPT ); Tue, 9 Jun 2015 01:51:59 -0400 Received: from szxga02-in.huawei.com ([119.145.14.65]:49183 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752713AbbFIFvL (ORCPT ); Tue, 9 Jun 2015 01:51:11 -0400 From: Wang Nan To: , , , , , , , , , , CC: , , , , Subject: [RFC PATCH v6 00/32] perf tools: filtering events using eBPF programs Date: Tue, 9 Jun 2015 05:50:04 +0000 Message-ID: <1433829036-23687-1-git-send-email-wangnan0@huawei.com> X-Mailer: git-send-email 1.8.3.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.107.197.200] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 6407 Lines: 163 This is the 6th version which tries to introduce eBPF programs to perf. It enables 'perf record' to filter events using eBPF programs like: # perf record --event bpf-file.c sleep 1 and # perf record --event bpf-file.o sleep 1 This patch series is based on tip/perf/core (a3d8654). Compared with v5 patch, this series allows user to pass BPF scriptlet source code file directly, instead of requiring user to pre-compile it into an ELF object. Which is done mainly by patch 24/32. In addition, to help users setup LLVM, [bpf] perf config section is appended. 4 command line options are also appended to 'perf record' for setting pathes and options of clang and llc. Which is done by patch 25/32 and 32/32. Other improvements: 1. Adjust context. 2. Get rid of 'trailing whitespace' and 'space before tab in indent' problems. 3. Error messages are improved when BPF API checking fail. In this series: Patch 1/32 adds a feature check to check version of eBPF API. Patch 2/32 - 21/32 introduce libbpf, which first parse eBPF object files then load maps and programs into kernel. These patches are already received 'Acked-by' from Alexei Starovoitov except patch 5/32, which enables opening a memory-based object file image using bpf_object__open_buffer(). Patch 22/32 - 32/32 are perf related. Patch 24, 25 and 32 are new to support dynamical compiling. Here is an example shows the using of dynamic compiling: # perf record --event lock_page.c ls / Added new event: perf_bpf_probe:lock_page (on __lock_page) You can now use it in all perf tools, such as: perf record -e perf_bpf_probe:lock_page -aR sleep 1 Added new event: perf_bpf_probe:lock_page_ret (on __lock_page%return) You can now use it in all perf tools, such as: perf record -e perf_bpf_probe:lock_page_ret -aR sleep 1 Added new event: perf_bpf_probe:unlock_page (on unlock_page) You can now use it in all perf tools, such as: perf record -e perf_bpf_probe:unlock_page -aR sleep 1 bin boot dev etc home init lib lib64 linuxrc media mnt proc root run sbin sys tmp usr var [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.002 MB perf.data ] Removed event: perf_bpf_probe:lock_page Removed event: perf_bpf_probe:lock_page_ret Removed event: perf_bpf_probe:unlock_page Where lock_page.c can be found from: http://lkml.kernel.org/r/557025A2.6090903@huawei.com Wang Nan (32): tools build: Add feature check for eBPF API bpf tools: Introduce 'bpf' library to tools bpf tools: Allow caller to set printing function bpf tools: Open eBPF object file and do basic validation bpf tools: Read eBPF object from buffer bpf tools: Check endianess and make libbpf fail early bpf tools: Iterate over ELF sections to collect information bpf tools: Collect version and license from ELF sections bpf tools: Collect map definitions from 'maps' section bpf tools: Collect symbol table from SHT_SYMTAB section bpf tools: Collect eBPF programs from their own sections bpf tools: Collect relocation sections from SHT_REL sections bpf tools: Record map accessing instructions for each program bpf tools: Add bpf.c/h for common bpf operations bpf tools: Create eBPF maps defined in an object file bpf tools: Relocate eBPF programs bpf tools: Introduce bpf_load_program() to bpf.c bpf tools: Load eBPF programs in object files into kernel bpf tools: Introduce accessors for struct bpf_program bpf tools: Introduce accessors for struct bpf_object bpf tools: Link all bpf objects onto a list perf tools: Make perf depend on libbpf perf record: Enable passing bpf object file to --event perf record: Compile scriptlets if pass '.c' to --event perf tools: Add 'bpf.' config section to perf default config perf tools: Parse probe points of eBPF programs during preparation perf probe: Attach trace_probe_event with perf_probe_event perf record: Probe at kprobe points perf record: Load all eBPF object into kernel perf tools: Add bpf_fd field to evsel and config it perf tools: Attach eBPF program to perf event perf record: Add LLVM options for compiling BPF scripts tools/build/Makefile.feature | 6 +- tools/build/feature/Makefile | 6 +- tools/build/feature/test-bpf.c | 18 + tools/lib/bpf/.gitignore | 2 + tools/lib/bpf/Build | 1 + tools/lib/bpf/Makefile | 195 ++++++++ tools/lib/bpf/bpf.c | 84 ++++ tools/lib/bpf/bpf.h | 23 + tools/lib/bpf/libbpf.c | 1037 ++++++++++++++++++++++++++++++++++++++++ tools/lib/bpf/libbpf.h | 85 ++++ tools/perf/MANIFEST | 3 + tools/perf/Makefile.perf | 17 +- tools/perf/builtin-probe.c | 2 +- tools/perf/builtin-record.c | 40 +- tools/perf/config/Makefile | 19 +- tools/perf/tests/make | 4 +- tools/perf/util/Build | 1 + tools/perf/util/bpf-loader.c | 477 ++++++++++++++++++ tools/perf/util/bpf-loader.h | 54 +++ tools/perf/util/config.c | 3 + tools/perf/util/debug.c | 5 + tools/perf/util/debug.h | 1 + tools/perf/util/evlist.c | 51 ++ tools/perf/util/evlist.h | 1 + tools/perf/util/evsel.c | 17 + tools/perf/util/evsel.h | 1 + tools/perf/util/parse-events.c | 16 + tools/perf/util/parse-events.h | 2 + tools/perf/util/parse-events.l | 6 + tools/perf/util/parse-events.y | 29 +- tools/perf/util/probe-event.c | 57 ++- tools/perf/util/probe-event.h | 5 +- 32 files changed, 2229 insertions(+), 39 deletions(-) create mode 100644 tools/build/feature/test-bpf.c create mode 100644 tools/lib/bpf/.gitignore create mode 100644 tools/lib/bpf/Build create mode 100644 tools/lib/bpf/Makefile create mode 100644 tools/lib/bpf/bpf.c create mode 100644 tools/lib/bpf/bpf.h create mode 100644 tools/lib/bpf/libbpf.c create mode 100644 tools/lib/bpf/libbpf.h create mode 100644 tools/perf/util/bpf-loader.c create mode 100644 tools/perf/util/bpf-loader.h -- 1.8.3.4 -- 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/