* [GIT PULL 0/6] perf/core improvements and fixes @ 2017-03-16 16:09 Arnaldo Carvalho de Melo 2017-03-16 16:09 ` [PATCH 1/6] perf probe: Introduce util func is_sdt_event() Arnaldo Carvalho de Melo ` (6 more replies) 0 siblings, 7 replies; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2017-03-16 16:09 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter, Alexander Shishkin, Alexei Starovoitov, Ananth N Mavinakayanahalli, Andi Kleen, Andy Lutomirski, Anton Blanchard, Borislav Petkov, Brendan Gregg, David Ahern, David Miller, He Kuang, Hemant Kumar, Jiri Olsa, linuxppc-dev, Masami Hiramatsu, Mathieu Poirier, Michael Ellerman, Namhyung Kim, Naveen N . Rao, Peter Zijlstra, Ravi Bangoria, Srikar Dronamraju, Stephane Eranian, Steven Rostedt, Sukadev Bhattiprolu, Taeung Song, Thomas Gleixner, Wang Nan, Arnaldo Carvalho de Melo Hi Ingo, Please consider pulling, - Arnaldo Test results at the end of this message, as usual. The following changes since commit ffa86c2f1a8862cf58c873f6f14d4b2c3250fb48: Merge tag 'perf-core-for-mingo-4.12-20170314' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2017-03-15 19:27:27 +0100) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-4.12-20170316 for you to fetch changes up to 61f35d750683b21e9e3836e309195c79c1daed74: uprobes: Default UPROBES_EVENTS to Y (2017-03-16 12:42:02 -0300) ---------------------------------------------------------------- perf/core improvements and fixes: New features: - Add 'brstackinsn' field in 'perf script' to reuse the x86 instruction decoder used in the Intel PT code to study hot paths to samples (Andi Kleen) Kernel: - Default UPROBES_EVENTS to Y (Alexei Starovoitov) - Fix check for kretprobe offset within function entry (Naveen N. Rao) Infrastructure: - Introduce util func is_sdt_event() (Ravi Bangoria) - Make perf_event__synthesize_mmap_events() scale on older kernels where reading /proc/pid/maps is way slower than reading /proc/pid/task/pid/maps (Stephane Eranian) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> ---------------------------------------------------------------- Andi Kleen (1): perf script: Add 'brstackinsn' for branch stacks Arnaldo Carvalho de Melo (2): tools headers: Sync {tools/,}arch/x86/include/asm/cpufeatures.h uprobes: Default UPROBES_EVENTS to Y Naveen N. Rao (1): trace/kprobes: Fix check for kretprobe offset within function entry Ravi Bangoria (1): perf probe: Introduce util func is_sdt_event() Stephane Eranian (1): perf tools: Make perf_event__synthesize_mmap_events() scale include/linux/kprobes.h | 1 + kernel/kprobes.c | 40 ++-- kernel/trace/Kconfig | 2 +- kernel/trace/trace_kprobe.c | 2 +- tools/arch/x86/include/asm/cpufeatures.h | 5 +- tools/perf/Documentation/perf-script.txt | 13 +- tools/perf/builtin-script.c | 264 ++++++++++++++++++++- tools/perf/util/Build | 1 + tools/perf/util/dump-insn.c | 14 ++ tools/perf/util/dump-insn.h | 22 ++ tools/perf/util/event.c | 4 +- .../util/intel-pt-decoder/intel-pt-insn-decoder.c | 24 ++ tools/perf/util/parse-events.h | 20 ++ tools/perf/util/probe-event.c | 9 +- 14 files changed, 381 insertions(+), 40 deletions(-) create mode 100644 tools/perf/util/dump-insn.c create mode 100644 tools/perf/util/dump-insn.h Test results: The first ones are container (docker) based builds of tools/perf with and without libelf support, objtool where it is supported and samples/bpf/, ditto. Where clang is available, it is also used to build perf with/without libelf. Several are cross builds, the ones with -x-ARCH, and the android one, and those may not have all the features built, due to lack of multi-arch devel packages, available and being used so far on just a few, like debian:experimental-x-{arm64,mipsel}. The 'perf test' one will perform a variety of tests exercising tools/perf/util/, tools/lib/{bpf,traceevent,etc}, as well as run perf commands with a variety of command line event specifications to then intercept the sys_perf_event syscall to check that the perf_event_attr fields are set up as expected, among a variety of other unit tests. Then there is the 'make -C tools/perf build-test' ones, that build tools/perf/ with a variety of feature sets, exercising the build with an incomplete set of features as well as with a complete one. It is planned to have it run on each of the containers mentioned above, using some container orchestration infrastructure. Get in contact if interested in helping having this in place. # dm 1 alpine:3.4: Ok 2 alpine:3.5: Ok 3 alpine:edge: Ok 4 android-ndk:r12b-arm: Ok 5 archlinux:latest: Ok 6 centos:5: Ok 7 centos:6: Ok 8 centos:7: Ok 9 debian:7: Ok 10 debian:8: Ok 11 debian:experimental: Ok 12 debian:experimental-x-arm64: Ok 13 debian:experimental-x-mips: Ok 14 debian:experimental-x-mips64: Ok 15 debian:experimental-x-mipsel: Ok 16 fedora:20: Ok 17 fedora:21: Ok 18 fedora:22: Ok 19 fedora:23: Ok 20 fedora:24: Ok 21 fedora:24-x-ARC-uClibc: Ok 22 fedora:25: Ok 23 fedora:rawhide: Ok 24 mageia:5: Ok 25 opensuse:13.2: Ok 26 opensuse:42.1: Ok 27 opensuse:tumbleweed: Ok 28 ubuntu:12.04.5: Ok 29 ubuntu:14.04.4: Ok 30 ubuntu:14.04.4-x-linaro-arm64: Ok 31 ubuntu:15.10: Ok 32 ubuntu:16.04: Ok 33 ubuntu:16.04-x-arm: Ok 34 ubuntu:16.04-x-arm64: Ok 35 ubuntu:16.04-x-powerpc: Ok 36 ubuntu:16.04-x-powerpc64: Ok 37 ubuntu:16.04-x-s390: Ok 38 ubuntu:16.10: Ok 39 ubuntu:17.04: Ok # uname -a Linux zoo 4.9.13-100.fc24.x86_64 #1 SMP Mon Feb 27 16:57:22 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux # perf test 1: vmlinux symtab matches kallsyms : Ok 2: Detect openat syscall event : Ok 3: Detect openat syscall event on all cpus : Ok 4: Read samples using the mmap interface : Ok 5: Parse event definition strings : Ok 6: PERF_RECORD_* events & perf_sample fields : Ok 7: Parse perf pmu format : Ok 8: DSO data read : Ok 9: DSO data cache : Ok 10: DSO data reopen : Ok 11: Roundtrip evsel->name : Ok 12: Parse sched tracepoints fields : Ok 13: syscalls:sys_enter_openat event fields : Ok 14: Setup struct perf_event_attr : Ok 15: Match and link multiple hists : Ok 16: 'import perf' in python : Ok 17: Breakpoint overflow signal handler : Ok 18: Breakpoint overflow sampling : Ok 19: Number of exit events of a simple workload : Ok 20: Software clock events period values : Ok 21: Object code reading : Ok 22: Sample parsing : Ok 23: Use a dummy software event to keep tracking: Ok 24: Parse with no sample_id_all bit set : Ok 25: Filter hist entries : Ok 26: Lookup mmap thread : Ok 27: Share thread mg : Ok 28: Sort output of hist entries : Ok 29: Cumulate child hist entries : Ok 30: Track with sched_switch : Ok 31: Filter fds with revents mask in a fdarray : Ok 32: Add fd to a fdarray, making it autogrow : Ok 33: kmod_path__parse : Ok 34: Thread map : Ok 35: LLVM search and compile : 35.1: Basic BPF llvm compile : Ok 35.2: kbuild searching : Ok 35.3: Compile source for BPF prologue generation: Ok 35.4: Compile source for BPF relocation : Ok 36: Session topology : Ok 37: BPF filter : 37.1: Basic BPF filtering : Ok 37.2: BPF pinning : Ok 37.3: BPF prologue generation : Ok 37.4: BPF relocation checker : Ok 38: Synthesize thread map : Ok 39: Remove thread map : Ok 40: Synthesize cpu map : Ok 41: Synthesize stat config : Ok 42: Synthesize stat : Ok 43: Synthesize stat round : Ok 44: Synthesize attr update : Ok 45: Event times : Ok 46: Read backward ring buffer : Ok 47: Print cpu map : Ok 48: Probe SDT events : Ok 49: is_printable_array : Ok 50: Print bitmap : Ok 51: perf hooks : Ok 52: builtin clang support : Skip (not compiled in) 53: unit_number__scnprintf : Ok 54: x86 rdpmc : Ok 55: Convert perf time to TSC : Ok 56: DWARF unwind : Ok 57: x86 instruction decoder - new instructions : Ok 58: Intel cqm nmi context read : Skip # $ make -C tools/perf build-test make: Entering directory '/home/acme/git/linux/tools/perf' - tarpkg: ./tests/perf-targz-src-pkg . make_no_libelf_O: make NO_LIBELF=1 make_no_libperl_O: make NO_LIBPERL=1 make_no_scripts_O: make NO_LIBPYTHON=1 NO_LIBPERL=1 make_no_libnuma_O: make NO_LIBNUMA=1 make_pure_O: make make_perf_o_O: make perf.o make_no_newt_O: make NO_NEWT=1 make_help_O: make help make_no_libaudit_O: make NO_LIBAUDIT=1 make_static_O: make LDFLAGS=-static make_doc_O: make doc make_clean_all_O: make clean all make_debug_O: make DEBUG=1 make_minimal_O: make NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1 NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1 NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1 NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1 make_no_libunwind_O: make NO_LIBUNWIND=1 make_no_libbionic_O: make NO_LIBBIONIC=1 make_no_libpython_O: make NO_LIBPYTHON=1 make_no_slang_O: make NO_SLANG=1 make_with_babeltrace_O: make LIBBABELTRACE=1 make_install_prefix_O: make install prefix=/tmp/krava make_no_ui_O: make NO_NEWT=1 NO_SLANG=1 NO_GTK2=1 make_util_pmu_bison_o_O: make util/pmu-bison.o make_no_demangle_O: make NO_DEMANGLE=1 make_install_prefix_slash_O: make install prefix=/tmp/krava/ make_no_libdw_dwarf_unwind_O: make NO_LIBDW_DWARF_UNWIND=1 make_no_auxtrace_O: make NO_AUXTRACE=1 make_install_bin_O: make install-bin make_util_map_o_O: make util/map.o make_tags_O: make tags make_no_libbpf_O: make NO_LIBBPF=1 make_install_O: make install make_no_gtk2_O: make NO_GTK2=1 make_no_backtrace_O: make NO_BACKTRACE=1 make_with_clangllvm_O: make LIBCLANGLLVM=1 OK make: Leaving directory '/home/acme/git/linux/tools/perf' ^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH 1/6] perf probe: Introduce util func is_sdt_event() 2017-03-16 16:09 [GIT PULL 0/6] perf/core improvements and fixes Arnaldo Carvalho de Melo @ 2017-03-16 16:09 ` Arnaldo Carvalho de Melo 2017-03-16 16:09 ` [PATCH 2/6] trace/kprobes: Fix check for kretprobe offset within function entry Arnaldo Carvalho de Melo ` (5 subsequent siblings) 6 siblings, 0 replies; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2017-03-16 16:09 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Ravi Bangoria, Adrian Hunter, Alexander Shishkin, Ananth N Mavinakayanahalli, Andi Kleen, Brendan Gregg, He Kuang, Hemant Kumar, Jiri Olsa, Masami Hiramatsu, Mathieu Poirier, Naveen N . Rao, Peter Zijlstra, Sukadev Bhattiprolu, Taeung Song, Wang Nan, Arnaldo Carvalho de Melo From: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com> Factor out the SDT event name checking routine as is_sdt_event(). Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Brendan Gregg <brendan.d.gregg@gmail.com> Cc: He Kuang <hekuang@huawei.com> Cc: Hemant Kumar <hemant@linux.vnet.ibm.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> Cc: Taeung Song <treeze.taeung@gmail.com> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/r/20170314150658.7065-2-ravi.bangoria@linux.vnet.ibm.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/util/parse-events.h | 20 ++++++++++++++++++++ tools/perf/util/probe-event.c | 9 +-------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index 1af6a267c21b..8c72b0ff7fcb 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -8,6 +8,7 @@ #include <stdbool.h> #include <linux/types.h> #include <linux/perf_event.h> +#include <string.h> struct list_head; struct perf_evsel; @@ -196,4 +197,23 @@ int is_valid_tracepoint(const char *event_string); int valid_event_mount(const char *eventfs); char *parse_events_formats_error_string(char *additional_terms); +#ifdef HAVE_LIBELF_SUPPORT +/* + * If the probe point starts with '%', + * or starts with "sdt_" and has a ':' but no '=', + * then it should be a SDT/cached probe point. + */ +static inline bool is_sdt_event(char *str) +{ + return (str[0] == '%' || + (!strncmp(str, "sdt_", 4) && + !!strchr(str, ':') && !strchr(str, '='))); +} +#else +static inline bool is_sdt_event(char *str __maybe_unused) +{ + return false; +} +#endif /* HAVE_LIBELF_SUPPORT */ + #endif /* __PERF_PARSE_EVENTS_H */ diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index c9bdc9ded0c3..b19d17801beb 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c @@ -1341,14 +1341,7 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev) if (!arg) return -EINVAL; - /* - * If the probe point starts with '%', - * or starts with "sdt_" and has a ':' but no '=', - * then it should be a SDT/cached probe point. - */ - if (arg[0] == '%' || - (!strncmp(arg, "sdt_", 4) && - !!strchr(arg, ':') && !strchr(arg, '='))) { + if (is_sdt_event(arg)) { pev->sdt = true; if (arg[0] == '%') arg++; -- 2.9.3 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH 2/6] trace/kprobes: Fix check for kretprobe offset within function entry 2017-03-16 16:09 [GIT PULL 0/6] perf/core improvements and fixes Arnaldo Carvalho de Melo 2017-03-16 16:09 ` [PATCH 1/6] perf probe: Introduce util func is_sdt_event() Arnaldo Carvalho de Melo @ 2017-03-16 16:09 ` Arnaldo Carvalho de Melo 2017-03-16 16:09 ` [PATCH 3/6] perf tools: Make perf_event__synthesize_mmap_events() scale Arnaldo Carvalho de Melo ` (4 subsequent siblings) 6 siblings, 0 replies; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2017-03-16 16:09 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Naveen N. Rao, Ananth N Mavinakayanahalli, Michael Ellerman, Steven Rostedt, linuxppc-dev, Arnaldo Carvalho de Melo From: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> perf specifies an offset from _text and since this offset is fed directly into the arch-specific helper, kprobes tracer rejects installation of kretprobes through perf. Fix this by looking up the actual offset from a function for the specified sym+offset. Refactor and reuse existing routines to limit code duplication -- we repurpose kprobe_addr() for determining final kprobe address and we split out the function entry offset determination into a separate generic helper. Before patch: naveen@ubuntu:~/linux/tools/perf$ sudo ./perf probe -v do_open%return probe-definition(0): do_open%return symbol:do_open file:(null) line:0 offset:0 return:1 lazy:(null) 0 arguments Looking at the vmlinux_path (8 entries long) Using /boot/vmlinux for symbols Open Debuginfo file: /boot/vmlinux Try to find probe point from debuginfo. Matched function: do_open [2d0c7ff] Probe point found: do_open+0 Matched function: do_open [35d76dc] found inline addr: 0xc0000000004ba9c4 Failed to find "do_open%return", because do_open is an inlined function and has no return point. An error occurred in debuginfo analysis (-22). Trying to use symbols. Opening /sys/kernel/debug/tracing//README write=0 Opening /sys/kernel/debug/tracing//kprobe_events write=1 Writing event: r:probe/do_open _text+4469776 Failed to write event: Invalid argument Error: Failed to add events. Reason: Invalid argument (Code: -22) naveen@ubuntu:~/linux/tools/perf$ dmesg | tail <snip> [ 33.568656] Given offset is not valid for return probe. After patch: naveen@ubuntu:~/linux/tools/perf$ sudo ./perf probe -v do_open%return probe-definition(0): do_open%return symbol:do_open file:(null) line:0 offset:0 return:1 lazy:(null) 0 arguments Looking at the vmlinux_path (8 entries long) Using /boot/vmlinux for symbols Open Debuginfo file: /boot/vmlinux Try to find probe point from debuginfo. Matched function: do_open [2d0c7d6] Probe point found: do_open+0 Matched function: do_open [35d76b3] found inline addr: 0xc0000000004ba9e4 Failed to find "do_open%return", because do_open is an inlined function and has no return point. An error occurred in debuginfo analysis (-22). Trying to use symbols. Opening /sys/kernel/debug/tracing//README write=0 Opening /sys/kernel/debug/tracing//kprobe_events write=1 Writing event: r:probe/do_open _text+4469808 Writing event: r:probe/do_open_1 _text+4956344 Added new events: probe:do_open (on do_open%return) probe:do_open_1 (on do_open%return) You can now use it in all perf tools, such as: perf record -e probe:do_open_1 -aR sleep 1 naveen@ubuntu:~/linux/tools/perf$ sudo cat /sys/kernel/debug/kprobes/list c000000000041370 k kretprobe_trampoline+0x0 [OPTIMIZED] c0000000004ba0b8 r do_open+0x8 [DISABLED] c000000000443430 r do_open+0x0 [DISABLED] Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Acked-by: Masami Hiramatsu <mhiramat@kernel.org> Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: linuxppc-dev@lists.ozlabs.org Link: http://lkml.kernel.org/r/d8cd1ef420ec22e3643ac332fdabcffc77319a42.1488961018.git.naveen.n.rao@linux.vnet.ibm.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- include/linux/kprobes.h | 1 + kernel/kprobes.c | 40 ++++++++++++++++++++++++++-------------- kernel/trace/trace_kprobe.c | 2 +- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index 177bdf6c6aeb..47e4da5b4fa2 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h @@ -268,6 +268,7 @@ extern void show_registers(struct pt_regs *regs); extern void kprobes_inc_nmissed_count(struct kprobe *p); extern bool arch_within_kprobe_blacklist(unsigned long addr); extern bool arch_function_offset_within_entry(unsigned long offset); +extern bool function_offset_within_entry(kprobe_opcode_t *addr, const char *sym, unsigned long offset); extern bool within_kprobe_blacklist(unsigned long addr); diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 4780ec236035..d733479a10ee 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -1391,21 +1391,19 @@ bool within_kprobe_blacklist(unsigned long addr) * This returns encoded errors if it fails to look up symbol or invalid * combination of parameters. */ -static kprobe_opcode_t *kprobe_addr(struct kprobe *p) +static kprobe_opcode_t *_kprobe_addr(kprobe_opcode_t *addr, + const char *symbol_name, unsigned int offset) { - kprobe_opcode_t *addr = p->addr; - - if ((p->symbol_name && p->addr) || - (!p->symbol_name && !p->addr)) + if ((symbol_name && addr) || (!symbol_name && !addr)) goto invalid; - if (p->symbol_name) { - kprobe_lookup_name(p->symbol_name, addr); + if (symbol_name) { + kprobe_lookup_name(symbol_name, addr); if (!addr) return ERR_PTR(-ENOENT); } - addr = (kprobe_opcode_t *)(((char *)addr) + p->offset); + addr = (kprobe_opcode_t *)(((char *)addr) + offset); if (addr) return addr; @@ -1413,6 +1411,11 @@ static kprobe_opcode_t *kprobe_addr(struct kprobe *p) return ERR_PTR(-EINVAL); } +static kprobe_opcode_t *kprobe_addr(struct kprobe *p) +{ + return _kprobe_addr(p->addr, p->symbol_name, p->offset); +} + /* Check passed kprobe is valid and return kprobe in kprobe_table. */ static struct kprobe *__get_valid_kprobe(struct kprobe *p) { @@ -1881,19 +1884,28 @@ bool __weak arch_function_offset_within_entry(unsigned long offset) return !offset; } +bool function_offset_within_entry(kprobe_opcode_t *addr, const char *sym, unsigned long offset) +{ + kprobe_opcode_t *kp_addr = _kprobe_addr(addr, sym, offset); + + if (IS_ERR(kp_addr)) + return false; + + if (!kallsyms_lookup_size_offset((unsigned long)kp_addr, NULL, &offset) || + !arch_function_offset_within_entry(offset)) + return false; + + return true; +} + int register_kretprobe(struct kretprobe *rp) { int ret = 0; struct kretprobe_instance *inst; int i; void *addr; - unsigned long offset; - - addr = kprobe_addr(&rp->kp); - if (!kallsyms_lookup_size_offset((unsigned long)addr, NULL, &offset)) - return -EINVAL; - if (!arch_function_offset_within_entry(offset)) + if (!function_offset_within_entry(rp->kp.addr, rp->kp.symbol_name, rp->kp.offset)) return -EINVAL; if (kretprobe_blacklist_size) { diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index 12fb540da0e5..013f4e7146d4 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c @@ -697,7 +697,7 @@ static int create_trace_kprobe(int argc, char **argv) return ret; } if (offset && is_return && - !arch_function_offset_within_entry(offset)) { + !function_offset_within_entry(NULL, symbol, offset)) { pr_info("Given offset is not valid for return probe.\n"); return -EINVAL; } -- 2.9.3 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH 3/6] perf tools: Make perf_event__synthesize_mmap_events() scale 2017-03-16 16:09 [GIT PULL 0/6] perf/core improvements and fixes Arnaldo Carvalho de Melo 2017-03-16 16:09 ` [PATCH 1/6] perf probe: Introduce util func is_sdt_event() Arnaldo Carvalho de Melo 2017-03-16 16:09 ` [PATCH 2/6] trace/kprobes: Fix check for kretprobe offset within function entry Arnaldo Carvalho de Melo @ 2017-03-16 16:09 ` Arnaldo Carvalho de Melo 2017-03-16 16:10 ` [PATCH 4/6] tools headers: Sync {tools/,}arch/x86/include/asm/cpufeatures.h Arnaldo Carvalho de Melo ` (3 subsequent siblings) 6 siblings, 0 replies; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2017-03-16 16:09 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Stephane Eranian, Andy Lutomirski, Namhyung Kim, Peter Zijlstra, Arnaldo Carvalho de Melo From: Stephane Eranian <eranian@google.com> This patch significantly improves the execution time of perf_event__synthesize_mmap_events() when running perf record on systems where processes have lots of threads. It just happens that cat /proc/pid/maps support uses a O(N^2) algorithm to generate each map line in the maps file. If you have 1000 threads, then you have necessarily 1000 stacks. For each vma, you need to check if it corresponds to a thread's stack. With a large number of threads, this can take a very long time. I have seen latencies >> 10mn. As of today, perf does not use the fact that a mapping is a stack, therefore we can work around the issue by using /proc/pid/tasks/pid/maps. This entry does not try to map a vma to stack and is thus much faster with no loss of functonality. The proc-map-timeout logic is kept in case users still want some upper limit. In V2, we fix the file path from /proc/pid/tasks/pid/maps to actual /proc/pid/task/pid/maps, tasks -> task. Thanks Arnaldo for catching this. Committer note: This problem seems to have been elliminated in the kernel since commit : b18cb64ead40 ("fs/proc: Stop trying to report thread stacks"). Signed-off-by: Stephane Eranian <eranian@google.com> Acked-by: Jiri Olsa <jolsa@redhat.com> Cc: Andy Lutomirski <luto@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20170315135059.GC2177@redhat.com Link: http://lkml.kernel.org/r/1489598233-25586-1-git-send-email-eranian@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/util/event.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index d082cb70445d..33fc2e9c0b0c 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -325,8 +325,8 @@ int perf_event__synthesize_mmap_events(struct perf_tool *tool, if (machine__is_default_guest(machine)) return 0; - snprintf(filename, sizeof(filename), "%s/proc/%d/maps", - machine->root_dir, pid); + snprintf(filename, sizeof(filename), "%s/proc/%d/task/%d/maps", + machine->root_dir, pid, pid); fp = fopen(filename, "r"); if (fp == NULL) { -- 2.9.3 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH 4/6] tools headers: Sync {tools/,}arch/x86/include/asm/cpufeatures.h 2017-03-16 16:09 [GIT PULL 0/6] perf/core improvements and fixes Arnaldo Carvalho de Melo ` (2 preceding siblings ...) 2017-03-16 16:09 ` [PATCH 3/6] perf tools: Make perf_event__synthesize_mmap_events() scale Arnaldo Carvalho de Melo @ 2017-03-16 16:10 ` Arnaldo Carvalho de Melo 2017-03-16 16:10 ` [PATCH 5/6] perf script: Add 'brstackinsn' for branch stacks Arnaldo Carvalho de Melo ` (2 subsequent siblings) 6 siblings, 0 replies; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2017-03-16 16:10 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Arnaldo Carvalho de Melo, Borislav Petkov, Jiri Olsa, Namhyung Kim, Thomas Gleixner From: Arnaldo Carvalho de Melo <acme@redhat.com> We use those in tools/arch/x86/lib/mem{cpy,set}_64.S, in turn used in the 'perf bench mem' benchmarks. The changes in the following csets are not relevant for this usecase, but lets sync it to silence the diff detector in the tools build system: 78d1b296843a ("x86/cpu: Add X86_FEATURE_CPUID") 3bba73b1b7a8 ("x86/cpufeature: Move RING3MWAIT feature to avoid conflicts") Cc: Borislav Petkov <bp@suse.de> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/n/tip-nsqxpyzcv4ywesikhhhrgfgc@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/arch/x86/include/asm/cpufeatures.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tools/arch/x86/include/asm/cpufeatures.h b/tools/arch/x86/include/asm/cpufeatures.h index 293149a1c6a1..4e7772387c6e 100644 --- a/tools/arch/x86/include/asm/cpufeatures.h +++ b/tools/arch/x86/include/asm/cpufeatures.h @@ -100,7 +100,7 @@ #define X86_FEATURE_XTOPOLOGY ( 3*32+22) /* cpu topology enum extensions */ #define X86_FEATURE_TSC_RELIABLE ( 3*32+23) /* TSC is known to be reliable */ #define X86_FEATURE_NONSTOP_TSC ( 3*32+24) /* TSC does not stop in C states */ -/* free, was #define X86_FEATURE_CLFLUSH_MONITOR ( 3*32+25) * "" clflush reqd with monitor */ +#define X86_FEATURE_CPUID ( 3*32+25) /* CPU has CPUID instruction itself */ #define X86_FEATURE_EXTD_APICID ( 3*32+26) /* has extended APICID (8 bits) */ #define X86_FEATURE_AMD_DCM ( 3*32+27) /* multi-node processor */ #define X86_FEATURE_APERFMPERF ( 3*32+28) /* APERFMPERF */ @@ -186,7 +186,7 @@ * * Reuse free bits when adding new feature flags! */ - +#define X86_FEATURE_RING3MWAIT ( 7*32+ 0) /* Ring 3 MONITOR/MWAIT */ #define X86_FEATURE_CPB ( 7*32+ 2) /* AMD Core Performance Boost */ #define X86_FEATURE_EPB ( 7*32+ 3) /* IA32_ENERGY_PERF_BIAS support */ #define X86_FEATURE_CAT_L3 ( 7*32+ 4) /* Cache Allocation Technology L3 */ @@ -321,5 +321,4 @@ #define X86_BUG_SWAPGS_FENCE X86_BUG(11) /* SWAPGS without input dep on GS */ #define X86_BUG_MONITOR X86_BUG(12) /* IPI required to wake up remote CPU */ #define X86_BUG_AMD_E400 X86_BUG(13) /* CPU is among the affected by Erratum 400 */ - #endif /* _ASM_X86_CPUFEATURES_H */ -- 2.9.3 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH 5/6] perf script: Add 'brstackinsn' for branch stacks 2017-03-16 16:09 [GIT PULL 0/6] perf/core improvements and fixes Arnaldo Carvalho de Melo ` (3 preceding siblings ...) 2017-03-16 16:10 ` [PATCH 4/6] tools headers: Sync {tools/,}arch/x86/include/asm/cpufeatures.h Arnaldo Carvalho de Melo @ 2017-03-16 16:10 ` Arnaldo Carvalho de Melo 2017-03-16 16:10 ` [PATCH 6/6] uprobes: Default UPROBES_EVENTS to Y Arnaldo Carvalho de Melo 2017-03-16 16:30 ` [GIT PULL 0/6] perf/core improvements and fixes Ingo Molnar 6 siblings, 0 replies; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2017-03-16 16:10 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Andi Kleen, Jiri Olsa, Michael Ellerman, Arnaldo Carvalho de Melo From: Andi Kleen <ak@linux.intel.com> Implement printing instruction sequences as hex dump for branch stacks. This relies on the x86 instruction decoder used by the PT decoder to find the lengths of instructions to dump them individually. This is good enough for pattern matching. This allows to study hot paths for individual samples, together with branch misprediction and cycle count / IPC information if available (on Skylake systems). % perf record -b ... % perf script -F brstackinsn ... read_hpet+67: ffffffff9905b843 insn: 74 ea # PRED ffffffff9905b82f insn: 85 c9 ffffffff9905b831 insn: 74 12 ffffffff9905b833 insn: f3 90 ffffffff9905b835 insn: 48 8b 0f ffffffff9905b838 insn: 48 89 ca ffffffff9905b83b insn: 48 c1 ea 20 ffffffff9905b83f insn: 39 f2 ffffffff9905b841 insn: 89 d0 ffffffff9905b843 insn: 74 ea # PRED Only works when no special branch filters are specified. Occasionally the path does not reach up to the sample IP, as the LBRs may be frozen before executing a final jump. In this case we print a special message. The instruction dumper piggy backs on the existing infrastructure from the IP PT decoder. An earlier iteration of this patch relied on a disassembler, but this version only uses the existing instruction decoder. Committer note: Added hint about how to get suitable perf.data files for use with '-F brstackinsm': $ perf record usleep 1 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.018 MB perf.data (8 samples) ] $ $ perf script -F brstackinsn Display of branch stack assembler requested, but non all-branch filter set Hint: run 'perf record -b ...' $ Signed-off-by: Andi Kleen <ak@linux.intel.com> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Link: http://lkml.kernel.org/r/20170223234634.583-1-andi@firstfloor.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/Documentation/perf-script.txt | 13 +- tools/perf/builtin-script.c | 264 ++++++++++++++++++++- tools/perf/util/Build | 1 + tools/perf/util/dump-insn.c | 14 ++ tools/perf/util/dump-insn.h | 22 ++ .../util/intel-pt-decoder/intel-pt-insn-decoder.c | 24 ++ 6 files changed, 327 insertions(+), 11 deletions(-) create mode 100644 tools/perf/util/dump-insn.c create mode 100644 tools/perf/util/dump-insn.h diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt index 62c9b0c77a3a..cb0eda3925e6 100644 --- a/tools/perf/Documentation/perf-script.txt +++ b/tools/perf/Documentation/perf-script.txt @@ -116,7 +116,7 @@ OPTIONS --fields:: Comma separated list of fields to print. Options are: comm, tid, pid, time, cpu, event, trace, ip, sym, dso, addr, symoff, - srcline, period, iregs, brstack, brstacksym, flags, bpf-output, + srcline, period, iregs, brstack, brstacksym, flags, bpf-output, brstackinsn, callindent, insn, insnlen. Field list can be prepended with the type, trace, sw or hw, to indicate to which event type the field list applies. e.g., -F sw:comm,tid,time,ip,sym and -F trace:time,cpu,trace @@ -189,15 +189,20 @@ OPTIONS i.e., -F "" is not allowed. The brstack output includes branch related information with raw addresses using the - /v/v/v/v/ syntax in the following order: + /v/v/v/v/cycles syntax in the following order: FROM: branch source instruction TO : branch target instruction M/P/-: M=branch target mispredicted or branch direction was mispredicted, P=target predicted or direction predicted, -=not supported X/- : X=branch inside a transactional region, -=not in transaction region or not supported A/- : A=TSX abort entry, -=not aborted region or not supported + cycles The brstacksym is identical to brstack, except that the FROM and TO addresses are printed in a symbolic form if possible. + When brstackinsn is specified the full assembler sequences of branch sequences for each sample + is printed. This is the full execution path leading to the sample. This is only supported when the + sample was recorded with perf record -b or -j any. + -k:: --vmlinux=<file>:: vmlinux pathname @@ -302,6 +307,10 @@ include::itrace.txt[] stop time is not given (i.e, time string is 'x.y,') then analysis goes to end of file. +--max-blocks:: + Set the maximum number of program blocks to print with brstackasm for + each sample. + SEE ALSO -------- linkperf:perf-record[1], linkperf:perf-script-perl[1], diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 66d62c98dff9..c98e16689b57 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -28,6 +28,7 @@ #include <linux/time64.h> #include "asm/bug.h" #include "util/mem-events.h" +#include "util/dump-insn.h" static char const *script_name; static char const *generate_script_lang; @@ -42,6 +43,7 @@ static bool nanosecs; static const char *cpu_list; static DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS); static struct perf_stat_config stat_config; +static int max_blocks; unsigned int scripting_max_stack = PERF_MAX_STACK_DEPTH; @@ -69,6 +71,7 @@ enum perf_output_field { PERF_OUTPUT_CALLINDENT = 1U << 20, PERF_OUTPUT_INSN = 1U << 21, PERF_OUTPUT_INSNLEN = 1U << 22, + PERF_OUTPUT_BRSTACKINSN = 1U << 23, }; struct output_option { @@ -98,6 +101,7 @@ struct output_option { {.str = "callindent", .field = PERF_OUTPUT_CALLINDENT}, {.str = "insn", .field = PERF_OUTPUT_INSN}, {.str = "insnlen", .field = PERF_OUTPUT_INSNLEN}, + {.str = "brstackinsn", .field = PERF_OUTPUT_BRSTACKINSN}, }; /* default set to maintain compatibility with current format */ @@ -292,7 +296,13 @@ static int perf_evsel__check_attr(struct perf_evsel *evsel, "selected. Hence, no address to lookup the source line number.\n"); return -EINVAL; } - + if (PRINT_FIELD(BRSTACKINSN) && + !(perf_evlist__combined_branch_type(session->evlist) & + PERF_SAMPLE_BRANCH_ANY)) { + pr_err("Display of branch stack assembler requested, but non all-branch filter set\n" + "Hint: run 'perf record -b ...'\n"); + return -EINVAL; + } if ((PRINT_FIELD(PID) || PRINT_FIELD(TID)) && perf_evsel__check_stype(evsel, PERF_SAMPLE_TID, "TID", PERF_OUTPUT_TID|PERF_OUTPUT_PID)) @@ -546,6 +556,233 @@ static void print_sample_brstacksym(struct perf_sample *sample, } } +#define MAXBB 16384UL + +static int grab_bb(u8 *buffer, u64 start, u64 end, + struct machine *machine, struct thread *thread, + bool *is64bit, u8 *cpumode, bool last) +{ + long offset, len; + struct addr_location al; + bool kernel; + + if (!start || !end) + return 0; + + kernel = machine__kernel_ip(machine, start); + if (kernel) + *cpumode = PERF_RECORD_MISC_KERNEL; + else + *cpumode = PERF_RECORD_MISC_USER; + + /* + * Block overlaps between kernel and user. + * This can happen due to ring filtering + * On Intel CPUs the entry into the kernel is filtered, + * but the exit is not. Let the caller patch it up. + */ + if (kernel != machine__kernel_ip(machine, end)) { + printf("\tblock %" PRIx64 "-%" PRIx64 " transfers between kernel and user\n", + start, end); + return -ENXIO; + } + + memset(&al, 0, sizeof(al)); + if (end - start > MAXBB - MAXINSN) { + if (last) + printf("\tbrstack does not reach to final jump (%" PRIx64 "-%" PRIx64 ")\n", start, end); + else + printf("\tblock %" PRIx64 "-%" PRIx64 " (%" PRIu64 ") too long to dump\n", start, end, end - start); + return 0; + } + + thread__find_addr_map(thread, *cpumode, MAP__FUNCTION, start, &al); + if (!al.map || !al.map->dso) { + printf("\tcannot resolve %" PRIx64 "-%" PRIx64 "\n", start, end); + return 0; + } + if (al.map->dso->data.status == DSO_DATA_STATUS_ERROR) { + printf("\tcannot resolve %" PRIx64 "-%" PRIx64 "\n", start, end); + return 0; + } + + /* Load maps to ensure dso->is_64_bit has been updated */ + map__load(al.map); + + offset = al.map->map_ip(al.map, start); + len = dso__data_read_offset(al.map->dso, machine, offset, (u8 *)buffer, + end - start + MAXINSN); + + *is64bit = al.map->dso->is_64_bit; + if (len <= 0) + printf("\tcannot fetch code for block at %" PRIx64 "-%" PRIx64 "\n", + start, end); + return len; +} + +static void print_jump(uint64_t ip, struct branch_entry *en, + struct perf_insn *x, u8 *inbuf, int len, + int insn) +{ + printf("\t%016" PRIx64 "\t%-30s\t#%s%s%s%s", + ip, + dump_insn(x, ip, inbuf, len, NULL), + en->flags.predicted ? " PRED" : "", + en->flags.mispred ? " MISPRED" : "", + en->flags.in_tx ? " INTX" : "", + en->flags.abort ? " ABORT" : ""); + if (en->flags.cycles) { + printf(" %d cycles", en->flags.cycles); + if (insn) + printf(" %.2f IPC", (float)insn / en->flags.cycles); + } + putchar('\n'); +} + +static void print_ip_sym(struct thread *thread, u8 cpumode, int cpu, + uint64_t addr, struct symbol **lastsym, + struct perf_event_attr *attr) +{ + struct addr_location al; + int off; + + memset(&al, 0, sizeof(al)); + + thread__find_addr_map(thread, cpumode, MAP__FUNCTION, addr, &al); + if (!al.map) + thread__find_addr_map(thread, cpumode, MAP__VARIABLE, + addr, &al); + if ((*lastsym) && al.addr >= (*lastsym)->start && al.addr < (*lastsym)->end) + return; + + al.cpu = cpu; + al.sym = NULL; + if (al.map) + al.sym = map__find_symbol(al.map, al.addr); + + if (!al.sym) + return; + + if (al.addr < al.sym->end) + off = al.addr - al.sym->start; + else + off = al.addr - al.map->start - al.sym->start; + printf("\t%s", al.sym->name); + if (off) + printf("%+d", off); + putchar(':'); + if (PRINT_FIELD(SRCLINE)) + map__fprintf_srcline(al.map, al.addr, "\t", stdout); + putchar('\n'); + *lastsym = al.sym; +} + +static void print_sample_brstackinsn(struct perf_sample *sample, + struct thread *thread, + struct perf_event_attr *attr, + struct machine *machine) +{ + struct branch_stack *br = sample->branch_stack; + u64 start, end; + int i, insn, len, nr, ilen; + struct perf_insn x; + u8 buffer[MAXBB]; + unsigned off; + struct symbol *lastsym = NULL; + + if (!(br && br->nr)) + return; + nr = br->nr; + if (max_blocks && nr > max_blocks + 1) + nr = max_blocks + 1; + + x.thread = thread; + x.cpu = sample->cpu; + + putchar('\n'); + + /* Handle first from jump, of which we don't know the entry. */ + len = grab_bb(buffer, br->entries[nr-1].from, + br->entries[nr-1].from, + machine, thread, &x.is64bit, &x.cpumode, false); + if (len > 0) { + print_ip_sym(thread, x.cpumode, x.cpu, + br->entries[nr - 1].from, &lastsym, attr); + print_jump(br->entries[nr - 1].from, &br->entries[nr - 1], + &x, buffer, len, 0); + } + + /* Print all blocks */ + for (i = nr - 2; i >= 0; i--) { + if (br->entries[i].from || br->entries[i].to) + pr_debug("%d: %" PRIx64 "-%" PRIx64 "\n", i, + br->entries[i].from, + br->entries[i].to); + start = br->entries[i + 1].to; + end = br->entries[i].from; + + len = grab_bb(buffer, start, end, machine, thread, &x.is64bit, &x.cpumode, false); + /* Patch up missing kernel transfers due to ring filters */ + if (len == -ENXIO && i > 0) { + end = br->entries[--i].from; + pr_debug("\tpatching up to %" PRIx64 "-%" PRIx64 "\n", start, end); + len = grab_bb(buffer, start, end, machine, thread, &x.is64bit, &x.cpumode, false); + } + if (len <= 0) + continue; + + insn = 0; + for (off = 0;; off += ilen) { + uint64_t ip = start + off; + + print_ip_sym(thread, x.cpumode, x.cpu, ip, &lastsym, attr); + if (ip == end) { + print_jump(ip, &br->entries[i], &x, buffer + off, len - off, insn); + break; + } else { + printf("\t%016" PRIx64 "\t%s\n", ip, + dump_insn(&x, ip, buffer + off, len - off, &ilen)); + if (ilen == 0) + break; + insn++; + } + } + } + + /* + * Hit the branch? In this case we are already done, and the target + * has not been executed yet. + */ + if (br->entries[0].from == sample->ip) + return; + if (br->entries[0].flags.abort) + return; + + /* + * Print final block upto sample + */ + start = br->entries[0].to; + end = sample->ip; + len = grab_bb(buffer, start, end, machine, thread, &x.is64bit, &x.cpumode, true); + print_ip_sym(thread, x.cpumode, x.cpu, start, &lastsym, attr); + if (len <= 0) { + /* Print at least last IP if basic block did not work */ + len = grab_bb(buffer, sample->ip, sample->ip, + machine, thread, &x.is64bit, &x.cpumode, false); + if (len <= 0) + return; + + printf("\t%016" PRIx64 "\t%s\n", sample->ip, + dump_insn(&x, sample->ip, buffer, len, NULL)); + return; + } + for (off = 0; off <= end - start; off += ilen) { + printf("\t%016" PRIx64 "\t%s\n", start + off, + dump_insn(&x, start + off, buffer + off, len - off, &ilen)); + if (ilen == 0) + break; + } +} static void print_sample_addr(struct perf_sample *sample, struct thread *thread, @@ -632,7 +869,9 @@ static void print_sample_callindent(struct perf_sample *sample, } static void print_insn(struct perf_sample *sample, - struct perf_event_attr *attr) + struct perf_event_attr *attr, + struct thread *thread, + struct machine *machine) { if (PRINT_FIELD(INSNLEN)) printf(" ilen: %d", sample->insn_len); @@ -643,12 +882,15 @@ static void print_insn(struct perf_sample *sample, for (i = 0; i < sample->insn_len; i++) printf(" %02x", (unsigned char)sample->insn[i]); } + if (PRINT_FIELD(BRSTACKINSN)) + print_sample_brstackinsn(sample, thread, attr, machine); } static void print_sample_bts(struct perf_sample *sample, struct perf_evsel *evsel, struct thread *thread, - struct addr_location *al) + struct addr_location *al, + struct machine *machine) { struct perf_event_attr *attr = &evsel->attr; bool print_srcline_last = false; @@ -689,7 +931,7 @@ static void print_sample_bts(struct perf_sample *sample, if (print_srcline_last) map__fprintf_srcline(al->map, al->addr, "\n ", stdout); - print_insn(sample, attr); + print_insn(sample, attr, thread, machine); printf("\n"); } @@ -872,7 +1114,8 @@ static size_t data_src__printf(u64 data_src) static void process_event(struct perf_script *script, struct perf_sample *sample, struct perf_evsel *evsel, - struct addr_location *al) + struct addr_location *al, + struct machine *machine) { struct thread *thread = al->thread; struct perf_event_attr *attr = &evsel->attr; @@ -899,7 +1142,7 @@ static void process_event(struct perf_script *script, print_sample_flags(sample->flags); if (is_bts_event(attr)) { - print_sample_bts(sample, evsel, thread, al); + print_sample_bts(sample, evsel, thread, al, machine); return; } @@ -937,7 +1180,7 @@ static void process_event(struct perf_script *script, if (perf_evsel__is_bpf_output(evsel) && PRINT_FIELD(BPF_OUTPUT)) print_sample_bpf_output(sample); - print_insn(sample, attr); + print_insn(sample, attr, thread, machine); printf("\n"); } @@ -1047,7 +1290,7 @@ static int process_sample_event(struct perf_tool *tool, if (scripting_ops) scripting_ops->process_event(event, sample, evsel, &al); else - process_event(scr, sample, evsel, &al); + process_event(scr, sample, evsel, &al, machine); out_put: addr_location__put(&al); @@ -2191,7 +2434,8 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused) "Valid types: hw,sw,trace,raw. " "Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso," "addr,symoff,period,iregs,brstack,brstacksym,flags," - "bpf-output,callindent,insn,insnlen", parse_output_fields), + "bpf-output,callindent,insn,insnlen,brstackinsn", + parse_output_fields), OPT_BOOLEAN('a', "all-cpus", &system_wide, "system-wide collection from all CPUs"), OPT_STRING('S', "symbols", &symbol_conf.sym_list_str, "symbol[,symbol...]", @@ -2222,6 +2466,8 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused) OPT_BOOLEAN('\0', "show-namespace-events", &script.show_namespace_events, "Show namespace events (if recorded)"), OPT_BOOLEAN('f', "force", &symbol_conf.force, "don't complain, do it"), + OPT_INTEGER(0, "max-blocks", &max_blocks, + "Maximum number of code blocks to dump with brstackinsn"), OPT_BOOLEAN(0, "ns", &nanosecs, "Use 9 decimal places when displaying time"), OPT_CALLBACK_OPTARG(0, "itrace", &itrace_synth_opts, NULL, "opts", diff --git a/tools/perf/util/Build b/tools/perf/util/Build index 2ea5ee179a3b..fb4f42f1bb38 100644 --- a/tools/perf/util/Build +++ b/tools/perf/util/Build @@ -82,6 +82,7 @@ libperf-$(CONFIG_AUXTRACE) += intel-pt-decoder/ libperf-$(CONFIG_AUXTRACE) += intel-pt.o libperf-$(CONFIG_AUXTRACE) += intel-bts.o libperf-y += parse-branch-options.o +libperf-y += dump-insn.o libperf-y += parse-regs-options.o libperf-y += term.o libperf-y += help-unknown-cmd.o diff --git a/tools/perf/util/dump-insn.c b/tools/perf/util/dump-insn.c new file mode 100644 index 000000000000..ffbdb19f05d0 --- /dev/null +++ b/tools/perf/util/dump-insn.c @@ -0,0 +1,14 @@ +#include <linux/compiler.h> +#include "dump-insn.h" + +/* Fallback code */ + +__weak +const char *dump_insn(struct perf_insn *x __maybe_unused, + u64 ip __maybe_unused, u8 *inbuf __maybe_unused, + int inlen __maybe_unused, int *lenp) +{ + if (lenp) + *lenp = 0; + return "?"; +} diff --git a/tools/perf/util/dump-insn.h b/tools/perf/util/dump-insn.h new file mode 100644 index 000000000000..90fb115981cf --- /dev/null +++ b/tools/perf/util/dump-insn.h @@ -0,0 +1,22 @@ +#ifndef __PERF_DUMP_INSN_H +#define __PERF_DUMP_INSN_H 1 + +#define MAXINSN 15 + +#include <linux/types.h> + +struct thread; + +struct perf_insn { + /* Initialized by callers: */ + struct thread *thread; + u8 cpumode; + bool is64bit; + int cpu; + /* Temporary */ + char out[256]; +}; + +const char *dump_insn(struct perf_insn *x, u64 ip, + u8 *inbuf, int inlen, int *lenp); +#endif diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-insn-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-insn-decoder.c index 55b6250350d7..a5f35b21172f 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-insn-decoder.c +++ b/tools/perf/util/intel-pt-decoder/intel-pt-insn-decoder.c @@ -26,6 +26,7 @@ #include "insn.c" #include "intel-pt-insn-decoder.h" +#include "dump-insn.h" #if INTEL_PT_INSN_BUF_SZ < MAX_INSN_SIZE || INTEL_PT_INSN_BUF_SZ > MAX_INSN #error Instruction buffer size too small @@ -179,6 +180,29 @@ int intel_pt_get_insn(const unsigned char *buf, size_t len, int x86_64, return 0; } +const char *dump_insn(struct perf_insn *x, uint64_t ip __maybe_unused, + u8 *inbuf, int inlen, int *lenp) +{ + struct insn insn; + int n, i; + int left; + + insn_init(&insn, inbuf, inlen, x->is64bit); + insn_get_length(&insn); + if (!insn_complete(&insn) || insn.length > inlen) + return "<bad>"; + if (lenp) + *lenp = insn.length; + left = sizeof(x->out); + n = snprintf(x->out, left, "insn: "); + left -= n; + for (i = 0; i < insn.length; i++) { + n += snprintf(x->out + n, left, "%02x ", inbuf[i]); + left -= n; + } + return x->out; +} + const char *branch_name[] = { [INTEL_PT_OP_OTHER] = "Other", [INTEL_PT_OP_CALL] = "Call", -- 2.9.3 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH 6/6] uprobes: Default UPROBES_EVENTS to Y 2017-03-16 16:09 [GIT PULL 0/6] perf/core improvements and fixes Arnaldo Carvalho de Melo ` (4 preceding siblings ...) 2017-03-16 16:10 ` [PATCH 5/6] perf script: Add 'brstackinsn' for branch stacks Arnaldo Carvalho de Melo @ 2017-03-16 16:10 ` Arnaldo Carvalho de Melo 2017-03-16 16:30 ` [GIT PULL 0/6] perf/core improvements and fixes Ingo Molnar 6 siblings, 0 replies; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2017-03-16 16:10 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Arnaldo Carvalho de Melo, Alexander Shishkin, Anton Blanchard, David Miller, Hemant Kumar, Jiri Olsa, Peter Zijlstra, Steven Rostedt From: Arnaldo Carvalho de Melo <acme@redhat.com> As it is already turned on by most distros, so just flip the default to Y. Suggested-by: Alexei Starovoitov <alexei.starovoitov@gmail.com> Acked-by: David Ahern <dsahern@gmail.com> Acked-by: Ingo Molnar <mingo@kernel.org> Acked-by: Masami Hiramatsu <mhiramat@kernel.org> Acked-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com> Acked-by: Wang Nan <wangnan0@huawei.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Anton Blanchard <anton@ozlabs.org> Cc: David Miller <davem@davemloft.net> Cc: Hemant Kumar <hemant@linux.vnet.ibm.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Steven Rostedt <rostedt@goodmis.org> Link: http://lkml.kernel.org/r/20170316005817.GA6805@ast-mbp.thefacebook.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- kernel/trace/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig index d4a06e714645..9619b5768e4b 100644 --- a/kernel/trace/Kconfig +++ b/kernel/trace/Kconfig @@ -455,7 +455,7 @@ config UPROBE_EVENTS select UPROBES select PROBE_EVENTS select TRACING - default n + default y help This allows the user to add tracing events on top of userspace dynamic events (similar to tracepoints) on the fly via the trace -- 2.9.3 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2017-03-16 16:09 [GIT PULL 0/6] perf/core improvements and fixes Arnaldo Carvalho de Melo ` (5 preceding siblings ...) 2017-03-16 16:10 ` [PATCH 6/6] uprobes: Default UPROBES_EVENTS to Y Arnaldo Carvalho de Melo @ 2017-03-16 16:30 ` Ingo Molnar 6 siblings, 0 replies; 40+ messages in thread From: Ingo Molnar @ 2017-03-16 16:30 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: linux-kernel, Adrian Hunter, Alexander Shishkin, Alexei Starovoitov, Ananth N Mavinakayanahalli, Andi Kleen, Andy Lutomirski, Anton Blanchard, Borislav Petkov, Brendan Gregg, David Ahern, David Miller, He Kuang, Hemant Kumar, Jiri Olsa, linuxppc-dev, Masami Hiramatsu, Mathieu Poirier, Michael Ellerman, Namhyung Kim, Naveen N . Rao, Peter Zijlstra, Ravi Bangoria, Srikar Dronamraju, Stephane Eranian, Steven Rostedt, Sukadev Bhattiprolu, Taeung Song, Thomas Gleixner, Wang Nan, Arnaldo Carvalho de Melo * Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > Hi Ingo, > > Please consider pulling, > > - Arnaldo > > Test results at the end of this message, as usual. > > The following changes since commit ffa86c2f1a8862cf58c873f6f14d4b2c3250fb48: > > Merge tag 'perf-core-for-mingo-4.12-20170314' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2017-03-15 19:27:27 +0100) > > are available in the git repository at: > > git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-4.12-20170316 > > for you to fetch changes up to 61f35d750683b21e9e3836e309195c79c1daed74: > > uprobes: Default UPROBES_EVENTS to Y (2017-03-16 12:42:02 -0300) > > ---------------------------------------------------------------- > perf/core improvements and fixes: > > New features: > > - Add 'brstackinsn' field in 'perf script' to reuse the x86 instruction > decoder used in the Intel PT code to study hot paths to samples (Andi Kleen) > > Kernel: > > - Default UPROBES_EVENTS to Y (Alexei Starovoitov) > > - Fix check for kretprobe offset within function entry (Naveen N. Rao) > > Infrastructure: > > - Introduce util func is_sdt_event() (Ravi Bangoria) > > - Make perf_event__synthesize_mmap_events() scale on older kernels where > reading /proc/pid/maps is way slower than reading /proc/pid/task/pid/maps (Stephane Eranian) > > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> > > ---------------------------------------------------------------- > Andi Kleen (1): > perf script: Add 'brstackinsn' for branch stacks > > Arnaldo Carvalho de Melo (2): > tools headers: Sync {tools/,}arch/x86/include/asm/cpufeatures.h > uprobes: Default UPROBES_EVENTS to Y > > Naveen N. Rao (1): > trace/kprobes: Fix check for kretprobe offset within function entry > > Ravi Bangoria (1): > perf probe: Introduce util func is_sdt_event() > > Stephane Eranian (1): > perf tools: Make perf_event__synthesize_mmap_events() scale > > include/linux/kprobes.h | 1 + > kernel/kprobes.c | 40 ++-- > kernel/trace/Kconfig | 2 +- > kernel/trace/trace_kprobe.c | 2 +- > tools/arch/x86/include/asm/cpufeatures.h | 5 +- > tools/perf/Documentation/perf-script.txt | 13 +- > tools/perf/builtin-script.c | 264 ++++++++++++++++++++- > tools/perf/util/Build | 1 + > tools/perf/util/dump-insn.c | 14 ++ > tools/perf/util/dump-insn.h | 22 ++ > tools/perf/util/event.c | 4 +- > .../util/intel-pt-decoder/intel-pt-insn-decoder.c | 24 ++ > tools/perf/util/parse-events.h | 20 ++ > tools/perf/util/probe-event.c | 9 +- > 14 files changed, 381 insertions(+), 40 deletions(-) > create mode 100644 tools/perf/util/dump-insn.c > create mode 100644 tools/perf/util/dump-insn.h Pulled, thanks a lot Arnaldo! Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* [GIT PULL 0/6] perf/core improvements and fixes @ 2015-08-31 21:36 Arnaldo Carvalho de Melo 2015-09-01 8:26 ` Ingo Molnar 0 siblings, 1 reply; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2015-08-31 21:36 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter, Alexei Starovoitov, Andi Kleen, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Kan Liang, Masami Hiramatsu, Namhyung Kim, Peter Zijlstra, pi3orama, Stephane Eranian, Sukadev Bhattiprolu, Wang Nan, Zefan Li, Arnaldo Carvalho de Melo Hi Ingo, Please consider pulling, - Arnaldo The following changes since commit bac2e4a96d1c0bcce5e9654dcc902f75576b9b03: Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-08-31 10:25:46 +0200) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo for you to fetch changes up to bcc84ec65ad1bd9f777a1fade6f8e5e0c5808fa5: perf record: Add ability to name registers to record (2015-08-31 18:01:33 -0300) ---------------------------------------------------------------- perf/core improvements and fixes: User visible: - Add ability to specify to select which registers to record, to reduce the size of perf.data files, and also allow printing the registers in 'perf script': (Stephane Eranian) # perf record --intr-regs=AX,SP usleep 1 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.016 MB perf.data (8 samples) ] # perf script -F ip,sym,iregs | tail -5 ffffffff8105f42a native_write_msr_safe AX:0xf SP:0xffff8802629c3c00 ffffffff8105f42a native_write_msr_safe AX:0xf SP:0xffff8802629c3c00 ffffffff81761ac0 _raw_spin_lock AX:0xffff8801bfcf8020 SP:0xffff8802629c3ce8 ffffffff81202bf8 __vma_adjust_trans_huge AX:0x7ffc75200000 SP:0xffff8802629c3b30 ffffffff8122b089 dput AX:0x101 SP:0xffff8802629c3c78 # Infrastructure: - Open event on evsel cpus and threads (Kan Liang) - New bpf API to get name from a BPF object (Wang Nan) Build fixes: - Fix build on powerpc broken by pt/bts (Adrian Hunter) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> ---------------------------------------------------------------- Adrian Hunter (1): perf tools: Fix build on powerpc broken by pt/bts Kan Liang (1): perf evlist: Open event on evsel cpus and threads Stephane Eranian (3): perf script: Enable printing of interrupted machine state perf/x86: Add list of register names perf record: Add ability to name registers to record Wang Nan (1): bpf tools: New API to get name from a BPF object tools/lib/bpf/libbpf.c | 25 +++++++- tools/lib/bpf/libbpf.h | 4 +- tools/perf/Documentation/perf-record.txt | 6 +- tools/perf/Documentation/perf-script.txt | 2 +- tools/perf/arch/x86/util/Build | 1 + tools/perf/arch/x86/util/perf_regs.c | 30 +++++++++ tools/perf/builtin-record.c | 9 ++- tools/perf/builtin-script.c | 31 +++++++++- tools/perf/perf.h | 2 +- tools/perf/tests/llvm.c | 2 +- tools/perf/util/Build | 2 + tools/perf/util/evlist.c | 4 ++ tools/perf/util/evsel.c | 2 +- .../util/intel-pt-decoder/intel-pt-insn-decoder.c | 3 + tools/perf/util/parse-regs-options.c | 71 ++++++++++++++++++++++ tools/perf/util/parse-regs-options.h | 5 ++ tools/perf/util/perf_regs.h | 7 +++ 17 files changed, 193 insertions(+), 13 deletions(-) create mode 100644 tools/perf/arch/x86/util/perf_regs.c create mode 100644 tools/perf/util/parse-regs-options.c create mode 100644 tools/perf/util/parse-regs-options.h ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-08-31 21:36 Arnaldo Carvalho de Melo @ 2015-09-01 8:26 ` Ingo Molnar 0 siblings, 0 replies; 40+ messages in thread From: Ingo Molnar @ 2015-09-01 8:26 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: linux-kernel, Adrian Hunter, Alexei Starovoitov, Andi Kleen, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Kan Liang, Masami Hiramatsu, Namhyung Kim, Peter Zijlstra, pi3orama, Stephane Eranian, Sukadev Bhattiprolu, Wang Nan, Zefan Li, Arnaldo Carvalho de Melo * Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > Hi Ingo, > > Please consider pulling, > > - Arnaldo > > The following changes since commit bac2e4a96d1c0bcce5e9654dcc902f75576b9b03: > > Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-08-31 10:25:46 +0200) > > are available in the git repository at: > > git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo > > for you to fetch changes up to bcc84ec65ad1bd9f777a1fade6f8e5e0c5808fa5: > > perf record: Add ability to name registers to record (2015-08-31 18:01:33 -0300) > > ---------------------------------------------------------------- > perf/core improvements and fixes: > > User visible: > > - Add ability to specify to select which registers to record, > to reduce the size of perf.data files, and also allow printing > the registers in 'perf script': (Stephane Eranian) > > # perf record --intr-regs=AX,SP usleep 1 > [ perf record: Woken up 1 times to write data ] > [ perf record: Captured and wrote 0.016 MB perf.data (8 samples) ] > # perf script -F ip,sym,iregs | tail -5 > ffffffff8105f42a native_write_msr_safe AX:0xf SP:0xffff8802629c3c00 > ffffffff8105f42a native_write_msr_safe AX:0xf SP:0xffff8802629c3c00 > ffffffff81761ac0 _raw_spin_lock AX:0xffff8801bfcf8020 SP:0xffff8802629c3ce8 > ffffffff81202bf8 __vma_adjust_trans_huge AX:0x7ffc75200000 SP:0xffff8802629c3b30 > ffffffff8122b089 dput AX:0x101 SP:0xffff8802629c3c78 > # > > Infrastructure: > > - Open event on evsel cpus and threads (Kan Liang) > > - New bpf API to get name from a BPF object (Wang Nan) > > Build fixes: > > - Fix build on powerpc broken by pt/bts (Adrian Hunter) > > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> > > ---------------------------------------------------------------- > Adrian Hunter (1): > perf tools: Fix build on powerpc broken by pt/bts > > Kan Liang (1): > perf evlist: Open event on evsel cpus and threads > > Stephane Eranian (3): > perf script: Enable printing of interrupted machine state > perf/x86: Add list of register names > perf record: Add ability to name registers to record > > Wang Nan (1): > bpf tools: New API to get name from a BPF object > > tools/lib/bpf/libbpf.c | 25 +++++++- > tools/lib/bpf/libbpf.h | 4 +- > tools/perf/Documentation/perf-record.txt | 6 +- > tools/perf/Documentation/perf-script.txt | 2 +- > tools/perf/arch/x86/util/Build | 1 + > tools/perf/arch/x86/util/perf_regs.c | 30 +++++++++ > tools/perf/builtin-record.c | 9 ++- > tools/perf/builtin-script.c | 31 +++++++++- > tools/perf/perf.h | 2 +- > tools/perf/tests/llvm.c | 2 +- > tools/perf/util/Build | 2 + > tools/perf/util/evlist.c | 4 ++ > tools/perf/util/evsel.c | 2 +- > .../util/intel-pt-decoder/intel-pt-insn-decoder.c | 3 + > tools/perf/util/parse-regs-options.c | 71 ++++++++++++++++++++++ > tools/perf/util/parse-regs-options.h | 5 ++ > tools/perf/util/perf_regs.h | 7 +++ > 17 files changed, 193 insertions(+), 13 deletions(-) > create mode 100644 tools/perf/arch/x86/util/perf_regs.c > create mode 100644 tools/perf/util/parse-regs-options.c > create mode 100644 tools/perf/util/parse-regs-options.h Pulled into tip:perf/urgent, thanks a lot Arnaldo! Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* [GIT PULL 0/6] perf/core improvements and fixes @ 2015-06-03 22:40 Arnaldo Carvalho de Melo 2015-06-04 5:48 ` Ingo Molnar 0 siblings, 1 reply; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2015-06-03 22:40 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter, Alexei Starovoitov, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, pi3orama, Sukadev Bhattiprolu, Wang Nan, Zefan Li, Arnaldo Carvalho de Melo Hi Ingo, Please consider applying. One of the next requests probably will have the eBPF work by Wang Nan, but I am still going thru it and want to test it thoroughly. BTW: Have you looked at it lately? It is at: http://lkml.kernel.org/r/1433144296-74992-1-git-send-email-wangnan0@huawei.com Super summary from the above cover letter: --------------------- It enables 'perf record' to filter events using eBPF programs like: # perf record --event bpf-file.o sleep 1 Events are selected and filtered according to definitions in bpf-file.o. --------------------- The first two patches from that series are in this pull req, as they just move stuff into tools/include/linux/ from tools/perf/include. Regards, - Arnaldo The following changes since commit 5c9b9bc67c684e40b3a5e7e9facde0fb7200cd8c: Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-05-29 20:19:02 +0200) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo for you to fetch changes up to 1f121b03d058dd07199d8924373d3c52a207f63b: perf tools: Deal with kernel module names in '[]' correctly (2015-06-03 10:02:38 -0300) ---------------------------------------------------------------- perf/core improvements and fixes: User visible: - Fix 'perf probe' segfault when glob matching function without debuginfo (Wang Nan) - Remove newline char when reading event scale and unit (Madhavan Srinivasan) - Deal with kernel module names in '[]' correctly (Wang Nan) Infrastructure: - Fix the search for the kernel DSO on the unified list (Arnaldo Carvalho de Melo) - Move tools/perf/util/include/linux/{kernel.h,list.h,poison.h} to tools/include, to be used in tools/lib/bpf/ (Wang Nan) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> ---------------------------------------------------------------- Arnaldo Carvalho de Melo (1): perf machine: Fix the search for the kernel DSO on the unified list Madhavan Srinivasan (1): perf tools: Remove newline char when reading event scale and unit Wang Nan (4): perf probe: Fix segfault when glob matching function without debuginfo perf tools: Move linux/kernel.h to tools/include tools: Move tools/perf/util/include/linux/{list.h,poison.h} to tools/include perf tools: Deal with kernel module names in '[]' correctly tools/{perf/util => }/include/linux/kernel.h | 4 +- tools/{perf/util => }/include/linux/list.h | 6 +-- tools/include/linux/poison.h | 1 + tools/perf/MANIFEST | 3 ++ tools/perf/tests/kmod-path.c | 72 ++++++++++++++++++++++++++++ tools/perf/util/dso.c | 47 ++++++++++++++++-- tools/perf/util/dso.h | 2 +- tools/perf/util/header.c | 8 ++-- tools/perf/util/include/linux/poison.h | 1 - tools/perf/util/machine.c | 22 ++++++++- tools/perf/util/pmu.c | 11 ++++- tools/perf/util/probe-event.c | 26 ++++++++-- 12 files changed, 179 insertions(+), 24 deletions(-) rename tools/{perf/util => }/include/linux/kernel.h (97%) rename tools/{perf/util => }/include/linux/list.h (90%) create mode 100644 tools/include/linux/poison.h delete mode 100644 tools/perf/util/include/linux/poison.h ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-03 22:40 Arnaldo Carvalho de Melo @ 2015-06-04 5:48 ` Ingo Molnar 2015-06-04 6:07 ` Wangnan (F) 0 siblings, 1 reply; 40+ messages in thread From: Ingo Molnar @ 2015-06-04 5:48 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: linux-kernel, Adrian Hunter, Alexei Starovoitov, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, pi3orama, Sukadev Bhattiprolu, Wang Nan, Zefan Li, Arnaldo Carvalho de Melo * Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > Hi Ingo, > > Please consider applying. > > One of the next requests probably will have the eBPF work by Wang Nan, > but I am still going thru it and want to test it thoroughly. > > BTW: Have you looked at it lately? It is at: > > http://lkml.kernel.org/r/1433144296-74992-1-git-send-email-wangnan0@huawei.com > > Super summary from the above cover letter: > > --------------------- > It enables 'perf record' to filter events using eBPF programs like: > > # perf record --event bpf-file.o sleep 1 > > Events are selected and filtered according to definitions in bpf-file.o. Looks useful, but I think the UI needs one more tweak: could you fix it to be able to filter based on the eBPF _source_ file, not just the object file? People want to tweak such filters as they profile, so we should use the eBPF source code as the primary interface. We can compile it internally to the .o just fine. The .o file is a totally uninteresting intermediate product in itself. I.e. we need to first think through such profiling workflows from beginning to end before allowing them upstream. > --------------------- > > The first two patches from that series are in this pull req, as > they just move stuff into tools/include/linux/ from tools/perf/include. > > Regards, > > - Arnaldo > > The following changes since commit 5c9b9bc67c684e40b3a5e7e9facde0fb7200cd8c: > > Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-05-29 20:19:02 +0200) > > are available in the git repository at: > > git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo > > for you to fetch changes up to 1f121b03d058dd07199d8924373d3c52a207f63b: > > perf tools: Deal with kernel module names in '[]' correctly (2015-06-03 10:02:38 -0300) > > ---------------------------------------------------------------- > perf/core improvements and fixes: > > User visible: > > - Fix 'perf probe' segfault when glob matching function without debuginfo (Wang Nan) > > - Remove newline char when reading event scale and unit (Madhavan Srinivasan) > > - Deal with kernel module names in '[]' correctly (Wang Nan) > > Infrastructure: > > - Fix the search for the kernel DSO on the unified list (Arnaldo Carvalho de Melo) > > - Move tools/perf/util/include/linux/{kernel.h,list.h,poison.h} to tools/include, > to be used in tools/lib/bpf/ (Wang Nan) > > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> > > ---------------------------------------------------------------- > Arnaldo Carvalho de Melo (1): > perf machine: Fix the search for the kernel DSO on the unified list > > Madhavan Srinivasan (1): > perf tools: Remove newline char when reading event scale and unit > > Wang Nan (4): > perf probe: Fix segfault when glob matching function without debuginfo > perf tools: Move linux/kernel.h to tools/include > tools: Move tools/perf/util/include/linux/{list.h,poison.h} to tools/include > perf tools: Deal with kernel module names in '[]' correctly > > tools/{perf/util => }/include/linux/kernel.h | 4 +- > tools/{perf/util => }/include/linux/list.h | 6 +-- > tools/include/linux/poison.h | 1 + > tools/perf/MANIFEST | 3 ++ > tools/perf/tests/kmod-path.c | 72 ++++++++++++++++++++++++++++ > tools/perf/util/dso.c | 47 ++++++++++++++++-- > tools/perf/util/dso.h | 2 +- > tools/perf/util/header.c | 8 ++-- > tools/perf/util/include/linux/poison.h | 1 - > tools/perf/util/machine.c | 22 ++++++++- > tools/perf/util/pmu.c | 11 ++++- > tools/perf/util/probe-event.c | 26 ++++++++-- > 12 files changed, 179 insertions(+), 24 deletions(-) > rename tools/{perf/util => }/include/linux/kernel.h (97%) > rename tools/{perf/util => }/include/linux/list.h (90%) > create mode 100644 tools/include/linux/poison.h > delete mode 100644 tools/perf/util/include/linux/poison.h Pulled, thanks a lot Arnaldo! Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-04 5:48 ` Ingo Molnar @ 2015-06-04 6:07 ` Wangnan (F) 2015-06-04 7:21 ` Ingo Molnar 0 siblings, 1 reply; 40+ messages in thread From: Wangnan (F) @ 2015-06-04 6:07 UTC (permalink / raw) To: Ingo Molnar, Arnaldo Carvalho de Melo Cc: linux-kernel, Adrian Hunter, Alexei Starovoitov, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, pi3orama, Sukadev Bhattiprolu, Zefan Li, Arnaldo Carvalho de Melo, Alexei Starovoitov, Alexei Starovoitov On 2015/6/4 13:48, Ingo Molnar wrote: > * Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > >> Hi Ingo, >> >> Please consider applying. >> >> One of the next requests probably will have the eBPF work by Wang Nan, >> but I am still going thru it and want to test it thoroughly. >> >> BTW: Have you looked at it lately? It is at: >> >> http://lkml.kernel.org/r/1433144296-74992-1-git-send-email-wangnan0@huawei.com >> >> Super summary from the above cover letter: >> >> --------------------- >> It enables 'perf record' to filter events using eBPF programs like: >> >> # perf record --event bpf-file.o sleep 1 >> >> Events are selected and filtered according to definitions in bpf-file.o. > Looks useful, but I think the UI needs one more tweak: could you fix it to be able > to filter based on the eBPF _source_ file, not just the object file? > > People want to tweak such filters as they profile, so we should use the eBPF > source code as the primary interface. We can compile it internally to the .o just > fine. The .o file is a totally uninteresting intermediate product in itself. > > I.e. we need to first think through such profiling workflows from beginning to end > before allowing them upstream. In a private mail Alexei Starovoitov disscussed with me about this. He said that he is working on a shared object which can compile C program into BPF bytecode on the fly. After he done his work, I think perf can support dtrace-like profiling that, users will be able to feed source code to perf directly on cmdline. He said he can release it on June. I added him to the CC-list. However I think the '.o' intermediate is still needed. I'd like to share a real profiling experience using eBPF today, please keep an eye on it. In my experience, since we are using C instead of dtrace, the code piece could be relative complex. Therefore, even if perf is able to compile the C source on the fly, I think user still need to transfer the profiling scripts to the target machine. Therefor, for him, precompiling and do some debugging on a high-end server then transfer it into target machine (like a smartphone) is tolerable, and useful for me. Thank you. >> --------------------- >> >> The first two patches from that series are in this pull req, as >> they just move stuff into tools/include/linux/ from tools/perf/include. >> >> Regards, >> >> - Arnaldo >> >> The following changes since commit 5c9b9bc67c684e40b3a5e7e9facde0fb7200cd8c: >> >> Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-05-29 20:19:02 +0200) >> >> are available in the git repository at: >> >> git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo >> >> for you to fetch changes up to 1f121b03d058dd07199d8924373d3c52a207f63b: >> >> perf tools: Deal with kernel module names in '[]' correctly (2015-06-03 10:02:38 -0300) >> >> ---------------------------------------------------------------- >> perf/core improvements and fixes: >> >> User visible: >> >> - Fix 'perf probe' segfault when glob matching function without debuginfo (Wang Nan) >> >> - Remove newline char when reading event scale and unit (Madhavan Srinivasan) >> >> - Deal with kernel module names in '[]' correctly (Wang Nan) >> >> Infrastructure: >> >> - Fix the search for the kernel DSO on the unified list (Arnaldo Carvalho de Melo) >> >> - Move tools/perf/util/include/linux/{kernel.h,list.h,poison.h} to tools/include, >> to be used in tools/lib/bpf/ (Wang Nan) >> >> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> >> >> ---------------------------------------------------------------- >> Arnaldo Carvalho de Melo (1): >> perf machine: Fix the search for the kernel DSO on the unified list >> >> Madhavan Srinivasan (1): >> perf tools: Remove newline char when reading event scale and unit >> >> Wang Nan (4): >> perf probe: Fix segfault when glob matching function without debuginfo >> perf tools: Move linux/kernel.h to tools/include >> tools: Move tools/perf/util/include/linux/{list.h,poison.h} to tools/include >> perf tools: Deal with kernel module names in '[]' correctly >> >> tools/{perf/util => }/include/linux/kernel.h | 4 +- >> tools/{perf/util => }/include/linux/list.h | 6 +-- >> tools/include/linux/poison.h | 1 + >> tools/perf/MANIFEST | 3 ++ >> tools/perf/tests/kmod-path.c | 72 ++++++++++++++++++++++++++++ >> tools/perf/util/dso.c | 47 ++++++++++++++++-- >> tools/perf/util/dso.h | 2 +- >> tools/perf/util/header.c | 8 ++-- >> tools/perf/util/include/linux/poison.h | 1 - >> tools/perf/util/machine.c | 22 ++++++++- >> tools/perf/util/pmu.c | 11 ++++- >> tools/perf/util/probe-event.c | 26 ++++++++-- >> 12 files changed, 179 insertions(+), 24 deletions(-) >> rename tools/{perf/util => }/include/linux/kernel.h (97%) >> rename tools/{perf/util => }/include/linux/list.h (90%) >> create mode 100644 tools/include/linux/poison.h >> delete mode 100644 tools/perf/util/include/linux/poison.h > Pulled, thanks a lot Arnaldo! > > Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-04 6:07 ` Wangnan (F) @ 2015-06-04 7:21 ` Ingo Molnar 2015-06-04 10:00 ` Wangnan (F) 0 siblings, 1 reply; 40+ messages in thread From: Ingo Molnar @ 2015-06-04 7:21 UTC (permalink / raw) To: Wangnan (F) Cc: Arnaldo Carvalho de Melo, linux-kernel, Adrian Hunter, Alexei Starovoitov, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, pi3orama, Sukadev Bhattiprolu, Zefan Li, Arnaldo Carvalho de Melo, Alexei Starovoitov * Wangnan (F) <wangnan0@huawei.com> wrote: > On 2015/6/4 13:48, Ingo Molnar wrote: > >* Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > > > >>Hi Ingo, > >> > >> Please consider applying. > >> > >> One of the next requests probably will have the eBPF work by Wang Nan, > >>but I am still going thru it and want to test it thoroughly. > >> > >> BTW: Have you looked at it lately? It is at: > >> > >>http://lkml.kernel.org/r/1433144296-74992-1-git-send-email-wangnan0@huawei.com > >> > >>Super summary from the above cover letter: > >> > >>--------------------- > >>It enables 'perf record' to filter events using eBPF programs like: > >> > >> # perf record --event bpf-file.o sleep 1 > >> > >>Events are selected and filtered according to definitions in bpf-file.o. > >Looks useful, but I think the UI needs one more tweak: could you fix it to be able > >to filter based on the eBPF _source_ file, not just the object file? > > > >People want to tweak such filters as they profile, so we should use the eBPF > >source code as the primary interface. We can compile it internally to the .o just > >fine. The .o file is a totally uninteresting intermediate product in itself. > > > >I.e. we need to first think through such profiling workflows from beginning to end > >before allowing them upstream. > > In a private mail Alexei Starovoitov disscussed with me about this. He said that > he is working on a shared object which can compile C program into BPF bytecode > on the fly. After he done his work, I think perf can support dtrace-like > profiling that, users will be able to feed source code to perf directly on > cmdline. He said he can release it on June. I added him to the CC-list. > > However I think the '.o' intermediate is still needed. [...] So how do you generate the .o? Why cannot the tool, if it sees that the filter parameter is eBPF source code, do that automatically? I.e. you are making the user jump through hoops for no good reason - that's a bad UI and a bad workflow. Please don't do that! Thanks, Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-04 7:21 ` Ingo Molnar @ 2015-06-04 10:00 ` Wangnan (F) 2015-06-04 12:40 ` Ingo Molnar 0 siblings, 1 reply; 40+ messages in thread From: Wangnan (F) @ 2015-06-04 10:00 UTC (permalink / raw) To: Ingo Molnar Cc: Arnaldo Carvalho de Melo, linux-kernel, Adrian Hunter, Alexei Starovoitov, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, pi3orama, Sukadev Bhattiprolu, Zefan Li, Arnaldo Carvalho de Melo, Alexei Starovoitov On 2015/6/4 15:21, Ingo Molnar wrote: > * Wangnan (F) <wangnan0@huawei.com> wrote: > >> On 2015/6/4 13:48, Ingo Molnar wrote: >>> * Arnaldo Carvalho de Melo <acme@kernel.org> wrote: >>> >>>> Hi Ingo, >>>> >>>> Please consider applying. >>>> >>>> One of the next requests probably will have the eBPF work by Wang Nan, >>>> but I am still going thru it and want to test it thoroughly. >>>> >>>> BTW: Have you looked at it lately? It is at: >>>> >>>> http://lkml.kernel.org/r/1433144296-74992-1-git-send-email-wangnan0@huawei.com >>>> >>>> Super summary from the above cover letter: >>>> >>>> --------------------- >>>> It enables 'perf record' to filter events using eBPF programs like: >>>> >>>> # perf record --event bpf-file.o sleep 1 >>>> >>>> Events are selected and filtered according to definitions in bpf-file.o. >>> Looks useful, but I think the UI needs one more tweak: could you fix it to be able >>> to filter based on the eBPF _source_ file, not just the object file? >>> >>> People want to tweak such filters as they profile, so we should use the eBPF >>> source code as the primary interface. We can compile it internally to the .o just >>> fine. The .o file is a totally uninteresting intermediate product in itself. >>> >>> I.e. we need to first think through such profiling workflows from beginning to end >>> before allowing them upstream. >> In a private mail Alexei Starovoitov disscussed with me about this. He said that >> he is working on a shared object which can compile C program into BPF bytecode >> on the fly. After he done his work, I think perf can support dtrace-like >> profiling that, users will be able to feed source code to perf directly on >> cmdline. He said he can release it on June. I added him to the CC-list. >> >> However I think the '.o' intermediate is still needed. [...] > So how do you generate the .o? Why cannot the tool, if it sees that the filter > parameter is eBPF source code, do that automatically? I think compiling on the fly is our goal, and Alexei is working on it. However, it looks like some limitations are still exist. For example, the BPF program may require the definition of kernel structure for it to derefrernce struct pointers. Therefore, the machine on which compiling occures should have kernel header and configuration installed. However, most of production environment doesn't have them for security and reasons. I think BPF should be used to profile not only development environment but also production systems. If we only concern development systems, why not recompiling kernel with stub core or using kProbe modules? What about this: Give perf the ability to generate the '.o' file (to memory or dump to a real file) on development environment. If we are willing to profiling that system, we can make load the generated object into kernel and start trace by (perf record --event bpf_file.c ...). If we are willing to profile systems on which the compiling environment is missing, we can make perf to create a '.o' file (perf bpf compile bpf_file.c -o bpf_file.o) then copy it onto target environment, use perf record --event bpf_file.o ... to filter events. Thank you. > I.e. you are making the user jump through hoops for no good reason - that's a bad > UI and a bad workflow. Please don't do that! > > Thanks, > > Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-04 10:00 ` Wangnan (F) @ 2015-06-04 12:40 ` Ingo Molnar 2015-06-04 12:58 ` pi3orama 0 siblings, 1 reply; 40+ messages in thread From: Ingo Molnar @ 2015-06-04 12:40 UTC (permalink / raw) To: Wangnan (F) Cc: Arnaldo Carvalho de Melo, linux-kernel, Adrian Hunter, Alexei Starovoitov, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, pi3orama, Sukadev Bhattiprolu, Zefan Li, Arnaldo Carvalho de Melo, Alexei Starovoitov * Wangnan (F) <wangnan0@huawei.com> wrote: > > So how do you generate the .o? Why cannot the tool, if it sees that the filter > > parameter is eBPF source code, do that automatically? > > I think compiling on the fly is our goal, and Alexei is working on it. So what exact command line are you using to create the .o? What exactly should users type to create a simple eBPF filter profile? Thanks, Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-04 12:40 ` Ingo Molnar @ 2015-06-04 12:58 ` pi3orama 2015-06-04 14:04 ` Ingo Molnar 0 siblings, 1 reply; 40+ messages in thread From: pi3orama @ 2015-06-04 12:58 UTC (permalink / raw) To: Ingo Molnar Cc: Wangnan (F), Arnaldo Carvalho de Melo, linux-kernel, Adrian Hunter, Alexei Starovoitov, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, Sukadev Bhattiprolu, Zefan Li, Arnaldo Carvalho de Melo, Alexei Starovoitov 发自我的 iPhone > 在 2015年6月4日,下午8:40,Ingo Molnar <mingo@kernel.org> 写道: > > > * Wangnan (F) <wangnan0@huawei.com> wrote: > >>> So how do you generate the .o? Why cannot the tool, if it sees that the filter >>> parameter is eBPF source code, do that automatically? >> >> I think compiling on the fly is our goal, and Alexei is working on it. > > So what exact command line are you using to create the .o? > > What exactly should users type to create a simple eBPF filter profile? > I have mentioned in previous mail: Use # perf record -e bpf_source.c cmdline to create a eBPF filter from source, Use # perf record -e bpf_object.o cmdline to create a eBPF filter from object intermedia. Use # perf bpf compile bpf_source.c --kbuild=kernel-build-dir -o bpf_object.o to create the .o I think this should be enough. Currently only the second case has been implemented. Thanks. > Thanks, > > Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-04 12:58 ` pi3orama @ 2015-06-04 14:04 ` Ingo Molnar 2015-06-04 16:22 ` Alexei Starovoitov 0 siblings, 1 reply; 40+ messages in thread From: Ingo Molnar @ 2015-06-04 14:04 UTC (permalink / raw) To: pi3orama Cc: Wangnan (F), Arnaldo Carvalho de Melo, linux-kernel, Adrian Hunter, Alexei Starovoitov, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, Sukadev Bhattiprolu, Zefan Li, Arnaldo Carvalho de Melo, Alexei Starovoitov * pi3orama <pi3orama@163.com> wrote: > > > 发自我的 iPhone > > > 在 2015年6月4日,下午8:40,Ingo Molnar <mingo@kernel.org> 写道: > > > > > > * Wangnan (F) <wangnan0@huawei.com> wrote: > > > >>> So how do you generate the .o? Why cannot the tool, if it sees that the filter > >>> parameter is eBPF source code, do that automatically? > >> > >> I think compiling on the fly is our goal, and Alexei is working on it. > > > > So what exact command line are you using to create the .o? > > > > What exactly should users type to create a simple eBPF filter profile? > > I have mentioned in previous mail: > > Use > > # perf record -e bpf_source.c cmdline > > to create a eBPF filter from source, > > Use > > # perf record -e bpf_object.o cmdline > > to create a eBPF filter from object intermedia. > > Use > > # perf bpf compile bpf_source.c --kbuild=kernel-build-dir -o bpf_object.o > > to create the .o > > I think this should be enough. Currently only the second case has been implemented. So if users cannot actually generate .o files then it's premature to merge this in such an incomplete form! It should be possible to use a feature that we are merging. Thanks, Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-04 14:04 ` Ingo Molnar @ 2015-06-04 16:22 ` Alexei Starovoitov 2015-06-04 21:48 ` Masami Hiramatsu 2015-06-05 6:41 ` Ingo Molnar 0 siblings, 2 replies; 40+ messages in thread From: Alexei Starovoitov @ 2015-06-04 16:22 UTC (permalink / raw) To: Ingo Molnar, pi3orama Cc: Wangnan (F), Arnaldo Carvalho de Melo, linux-kernel, Adrian Hunter, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, Sukadev Bhattiprolu, Zefan Li, Arnaldo Carvalho de Melo, Alexei Starovoitov On 6/4/15 7:04 AM, Ingo Molnar wrote: >> > # perf record -e bpf_source.c cmdline >> > >> > to create a eBPF filter from source, >> > >> >Use >> > >> ># perf record -e bpf_object.o cmdline >> > >> >to create a eBPF filter from object intermedia. >> > >> >Use >> > >> ># perf bpf compile bpf_source.c --kbuild=kernel-build-dir -o bpf_object.o >> > >> >to create the .o >> > >> >I think this should be enough. Currently only the second case has been implemented. > So if users cannot actually generate .o files then it's premature to merge this in > such an incomplete form! > > It should be possible to use a feature that we are merging. of course it's usable :) There is some confusion here. To compile .c into .o one can easily use clang -O2 -emit-llvm -c file.c -o - | llc -march=bpf -o file.o any version of clang is ok, llc needs to be fresh with bpf backend. For a lot of cases kernel headers are not needed, so above will work fine. For our TC examples we recommend to use 'bcc' alias: bcc() { clang -O2 -emit-llvm -c $1 -o - | llc -march=bpf -filetype=obj -o "`basename $1 .c`.o" } then compiling as easy as 'bcc file.c' What Wang mentioned that we're working on is fully integrated 'bcc'. It will use clang/llvm as libraries, so no intermediate steps will be needed, but some folks will always have concerns about ultra-embedded environments where even 20Mb of libllvm.so is too much. So I think we need to support both 'perf record -e file.[co]' ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-04 16:22 ` Alexei Starovoitov @ 2015-06-04 21:48 ` Masami Hiramatsu 2015-06-04 22:07 ` Alexei Starovoitov 2015-06-05 6:41 ` Ingo Molnar 1 sibling, 1 reply; 40+ messages in thread From: Masami Hiramatsu @ 2015-06-04 21:48 UTC (permalink / raw) To: Alexei Starovoitov, Ingo Molnar, pi3orama Cc: Wangnan (F), Arnaldo Carvalho de Melo, linux-kernel, Adrian Hunter, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Michael Ellerman, Namhyung Kim, Peter Zijlstra, Sukadev Bhattiprolu, Zefan Li, Arnaldo Carvalho de Melo, Alexei Starovoitov, cti.systems-productivity-manager.ts On 2015/06/05 1:22, Alexei Starovoitov wrote: > On 6/4/15 7:04 AM, Ingo Molnar wrote: >>>> # perf record -e bpf_source.c cmdline >>>> >>>> to create a eBPF filter from source, >>>> >>>> Use >>>> >>>> # perf record -e bpf_object.o cmdline >>>> >>>> to create a eBPF filter from object intermedia. >>>> >>>> Use >>>> >>>> # perf bpf compile bpf_source.c --kbuild=kernel-build-dir -o bpf_object.o >>>> >>>> to create the .o >>>> >>>> I think this should be enough. Currently only the second case has been implemented. >> So if users cannot actually generate .o files then it's premature to merge this in >> such an incomplete form! >> >> It should be possible to use a feature that we are merging. > > of course it's usable :) There is some confusion here. > To compile .c into .o one can easily use > clang -O2 -emit-llvm -c file.c -o - | llc -march=bpf -o file.o > any version of clang is ok, > llc needs to be fresh with bpf backend. > > For a lot of cases kernel headers are not needed, so above > will work fine. > For our TC examples we recommend to use 'bcc' alias: > bcc() { > clang -O2 -emit-llvm -c $1 -o - | llc -march=bpf -filetype=obj -o > "`basename $1 .c`.o" > } > then compiling as easy as 'bcc file.c' > > What Wang mentioned that we're working on is fully integrated 'bcc'. > It will use clang/llvm as libraries, so no intermediate steps will > be needed, but some folks will always have concerns about > ultra-embedded environments where even 20Mb of libllvm.so is too much. > > So I think we need to support both 'perf record -e file.[co]' I think we'd better make 'perf record -e file.c' default and '-e file.o' should be an option. Thank you, > > -- Masami HIRAMATSU Linux Technology Research Center, System Productivity Research Dept. Center for Technology Innovation - Systems Engineering Hitachi, Ltd., Research & Development Group E-mail: masami.hiramatsu.pt@hitachi.com ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-04 21:48 ` Masami Hiramatsu @ 2015-06-04 22:07 ` Alexei Starovoitov 0 siblings, 0 replies; 40+ messages in thread From: Alexei Starovoitov @ 2015-06-04 22:07 UTC (permalink / raw) To: Masami Hiramatsu, Ingo Molnar, pi3orama Cc: Wangnan (F), Arnaldo Carvalho de Melo, linux-kernel, Adrian Hunter, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Michael Ellerman, Namhyung Kim, Peter Zijlstra, Sukadev Bhattiprolu, Zefan Li, Arnaldo Carvalho de Melo, Alexei Starovoitov, cti.systems-productivity-manager.ts On 6/4/15 2:48 PM, Masami Hiramatsu wrote: > On 2015/06/05 1:22, Alexei Starovoitov wrote: >> On 6/4/15 7:04 AM, Ingo Molnar wrote: >>>>> # perf record -e bpf_source.c cmdline >>>>> >>>>> to create a eBPF filter from source, >>>>> >>>>> Use >>>>> >>>>> # perf record -e bpf_object.o cmdline >>>>> >>>>> to create a eBPF filter from object intermedia. >>>>> >>>>> Use >>>>> >>>>> # perf bpf compile bpf_source.c --kbuild=kernel-build-dir -o bpf_object.o >>>>> >>>>> to create the .o >>>>> >>>>> I think this should be enough. Currently only the second case has been implemented. >>> So if users cannot actually generate .o files then it's premature to merge this in >>> such an incomplete form! >>> >>> It should be possible to use a feature that we are merging. >> >> of course it's usable :) There is some confusion here. >> To compile .c into .o one can easily use >> clang -O2 -emit-llvm -c file.c -o - | llc -march=bpf -o file.o >> any version of clang is ok, >> llc needs to be fresh with bpf backend. >> >> For a lot of cases kernel headers are not needed, so above >> will work fine. >> For our TC examples we recommend to use 'bcc' alias: >> bcc() { >> clang -O2 -emit-llvm -c $1 -o - | llc -march=bpf -filetype=obj -o >> "`basename $1 .c`.o" >> } >> then compiling as easy as 'bcc file.c' >> >> What Wang mentioned that we're working on is fully integrated 'bcc'. >> It will use clang/llvm as libraries, so no intermediate steps will >> be needed, but some folks will always have concerns about >> ultra-embedded environments where even 20Mb of libllvm.so is too much. >> >> So I think we need to support both 'perf record -e file.[co]' > > I think we'd better make 'perf record -e file.c' default and '-e file.o' > should be an option. what do you mean 'default' ? It's a command line :) .c is easier to use of course, no question. ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-04 16:22 ` Alexei Starovoitov 2015-06-04 21:48 ` Masami Hiramatsu @ 2015-06-05 6:41 ` Ingo Molnar 2015-06-05 8:53 ` Wangnan (F) 1 sibling, 1 reply; 40+ messages in thread From: Ingo Molnar @ 2015-06-05 6:41 UTC (permalink / raw) To: Alexei Starovoitov Cc: pi3orama, Wangnan (F), Arnaldo Carvalho de Melo, linux-kernel, Adrian Hunter, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, Sukadev Bhattiprolu, Zefan Li, Arnaldo Carvalho de Melo, Alexei Starovoitov * Alexei Starovoitov <ast@plumgrid.com> wrote: > On 6/4/15 7:04 AM, Ingo Molnar wrote: > >>> # perf record -e bpf_source.c cmdline > >>> > >>> to create a eBPF filter from source, > >>> > >>>Use > >>> > >>># perf record -e bpf_object.o cmdline > >>> > >>>to create a eBPF filter from object intermedia. > >>> > >>>Use > >>> > >>># perf bpf compile bpf_source.c --kbuild=kernel-build-dir -o bpf_object.o > >>> > >>>to create the .o > >>> > >>>I think this should be enough. Currently only the second case has been implemented. > > > > So if users cannot actually generate .o files then it's premature to merge > > this in such an incomplete form! > > > > It should be possible to use a feature that we are merging. > > of course it's usable :) There is some confusion here. > To compile .c into .o one can easily use > clang -O2 -emit-llvm -c file.c -o - | llc -march=bpf -o file.o There's no confusion here: you guys are trying to sell me what at this stage is incomplete and hard to use, and I'm resisting it as I should! :-) We also have different definitions of 'easily'. It might be 'easy' to type: clang -O2 -emit-llvm -c file.c -o - | llc -march=bpf -o file.o ... for some tooling developer intimate with eBPF, but to the first time user who found an interesting looking eBPF scriptlet on the net or in the documentation and wants to try his luck? It's absolutely non-obvious! The current usage to get a _minimal_ eBPF script running is non-obvious and obscure to the level of being a show stopper. I don't understand why you guys are even wasting time arguing about it: it's not that hard to auto-build from source code. It's one of the basic features of tooling. If you ever built perf you'll know that typing 'make install' will type in all those quirky build lines automatically for you, without requiring you to perform any other step, no matter how trivial. Doubly annoying, you seem to have the UI principles wrong, you seem to think that a .o is a proper user interface. It absolutely is _not_ okay. The Linux kernel project and as an extension the perf project deals with source code, and I'm 100% suspicious of approaches that somehow think that .o objects are the right UI for _anything_ except temporary files that sometimes show up in object directories... Fix the 'newbie user' UI flow as a _first_ priority, not as a second thought! Every single quirky line or nonsensical option you require a first time user to type halves the number of new users we'll get. You need to understand why dtrace is so popular: - it's bloody easy to use - it's a safe environment you can deploy in critical environments - it's flexible - instrumentation hacks are very easy to share eBPF based scripting got 3 out of those 4 right, but please don't forget item 1 either, because without that we have nothing but a bunch of unusable functionality in the kernel and in tooling that benefits only very few people. Okay? > So I think we need to support both 'perf record -e file.[co]' Why do you even need to ask? Of course! Think through how users will meet eBPF scripts and how they will interact with them: - they'll see or download an eBPF scriptlet somewhere and will have a .c file. - ideally there will be built-in eBPF scriptlets just like we have tracing plugins, and there's a good UI to query them and see their description and source code. - then they will want to use it all with the minimum amount of fuss - they don't care how the eBPF scriptlet gets to the kernel: whether the kernel can read and build the .c files, or whether there's some user tooling that turns it into bytecode. Most humans don't read bytecode! - they will absolutely not download random .o's and we should not encourage that in any case - these things should be source code based. These things compile in an eye blink, there's very little reason to ever deal with a .o, except some weird and rare usecases... In fact I'm NAK-ing the whole .o based interface until the .c interface is made the _primary_ one and works well and until I see that you have thought through basic usability questions... Thanks, Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-05 6:41 ` Ingo Molnar @ 2015-06-05 8:53 ` Wangnan (F) 2015-06-05 12:05 ` Ingo Molnar 2015-06-05 13:59 ` Arnaldo Carvalho de Melo 0 siblings, 2 replies; 40+ messages in thread From: Wangnan (F) @ 2015-06-05 8:53 UTC (permalink / raw) To: Ingo Molnar, Alexei Starovoitov Cc: pi3orama, Arnaldo Carvalho de Melo, linux-kernel, Adrian Hunter, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, Sukadev Bhattiprolu, Zefan Li, Arnaldo Carvalho de Melo, Alexei Starovoitov On 2015/6/5 14:41, Ingo Molnar wrote: > * Alexei Starovoitov <ast@plumgrid.com> wrote: > >> On 6/4/15 7:04 AM, Ingo Molnar wrote: >>>>> # perf record -e bpf_source.c cmdline >>>>> >>>>> to create a eBPF filter from source, >>>>> >>>>> Use >>>>> >>>>> # perf record -e bpf_object.o cmdline >>>>> >>>>> to create a eBPF filter from object intermedia. >>>>> >>>>> Use >>>>> >>>>> # perf bpf compile bpf_source.c --kbuild=kernel-build-dir -o bpf_object.o >>>>> >>>>> to create the .o >>>>> >>>>> I think this should be enough. Currently only the second case has been implemented. >>> So if users cannot actually generate .o files then it's premature to merge >>> this in such an incomplete form! >>> >>> It should be possible to use a feature that we are merging. >> of course it's usable :) There is some confusion here. >> To compile .c into .o one can easily use >> clang -O2 -emit-llvm -c file.c -o - | llc -march=bpf -o file.o > There's no confusion here: you guys are trying to sell me what at this stage is > incomplete and hard to use, and I'm resisting it as I should! :-) > > We also have different definitions of 'easily'. It might be 'easy' to type: > > clang -O2 -emit-llvm -c file.c -o - | llc -march=bpf -o file.o > > ... for some tooling developer intimate with eBPF, but to the first time user who > found an interesting looking eBPF scriptlet on the net or in the documentation and > wants to try his luck? It's absolutely non-obvious! > > The current usage to get a _minimal_ eBPF script running is non-obvious and > obscure to the level of being a show stopper. > > I don't understand why you guys are even wasting time arguing about it: it's not > that hard to auto-build from source code. It's one of the basic features of > tooling. If you ever built perf you'll know that typing 'make install' will type > in all those quirky build lines automatically for you, without requiring you to > perform any other step, no matter how trivial. > > Doubly annoying, you seem to have the UI principles wrong, you seem to think that > a .o is a proper user interface. It absolutely is _not_ okay. > > The Linux kernel project and as an extension the perf project deals with source > code, and I'm 100% suspicious of approaches that somehow think that .o objects are > the right UI for _anything_ except temporary files that sometimes show up in > object directories... > > Fix the 'newbie user' UI flow as a _first_ priority, not as a second thought! > > Every single quirky line or nonsensical option you require a first time user to > type halves the number of new users we'll get. You need to understand why dtrace > is so popular: > > - it's bloody easy to use > > - it's a safe environment you can deploy in critical environments > > - it's flexible > > - instrumentation hacks are very easy to share > > eBPF based scripting got 3 out of those 4 right, but please don't forget item 1 > either, because without that we have nothing but a bunch of unusable functionality > in the kernel and in tooling that benefits only very few people. Okay? > >> So I think we need to support both 'perf record -e file.[co]' > Why do you even need to ask? Of course! > > Think through how users will meet eBPF scripts and how they will interact with > them: > > - they'll see or download an eBPF scriptlet somewhere and will have a .c file. > > - ideally there will be built-in eBPF scriptlets just like we have tracing > plugins, and there's a good UI to query them and see their description and > source code. > > - then they will want to use it all with the minimum amount of fuss > > - they don't care how the eBPF scriptlet gets to the kernel: whether the kernel > can read and build the .c files, or whether there's some user tooling that > turns it into bytecode. Most humans don't read bytecode! > > - they will absolutely not download random .o's and we should not encourage that > in any case - these things should be source code based. > > These things compile in an eye blink, there's very little reason to ever deal with > a .o, except some weird and rare usecases... > > In fact I'm NAK-ing the whole .o based interface until the .c interface is made > the _primary_ one and works well and until I see that you have thought through > basic usability questions... OK. Let's start making a nice UI. At this stage, what about wrapping current clang and llc workflow into perf, let it call them to compile '.c' scripts? This is the way 'perf annotate' using objdump. I can do this job, but firstly I'd like to know people's opinion on it, and the value of the wrapper if Alexei Starovoitov's dynamic compiler shared object is coming. Following functions will be added: - perf searches clang and llc under current $PATH, - Users are allowed to pass the position of those programs, if perf failed to find the automatically, - Users are allowed to pass extra compiling options to clang and llc, like include directories, - 'perf record' automatically calls them if a '.c' is passed using '--event'. - 'perf bpf compile' command will be added to compile a '.c' find into '.o', Further, basic header files should be shipped with kernel headers. User interface update: - --llc, --clang, --llc-opt and --clang-opt option will be added to 'perf record' to indicate the position and extra options to them. Ideally they can be leave blank. - 'perf bpf compile' will be added. One problem I can find is that, the wrapper will make perf depend on llvm. I don't think the compiler will be deployed in production environments... And also, the embedded case... Any suggestion? Do you think the above idea is on the right way? Thanks. > Thanks, > > Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-05 8:53 ` Wangnan (F) @ 2015-06-05 12:05 ` Ingo Molnar 2015-06-05 14:06 ` Arnaldo Carvalho de Melo 2015-06-05 13:59 ` Arnaldo Carvalho de Melo 1 sibling, 1 reply; 40+ messages in thread From: Ingo Molnar @ 2015-06-05 12:05 UTC (permalink / raw) To: Wangnan (F) Cc: Alexei Starovoitov, pi3orama, Arnaldo Carvalho de Melo, linux-kernel, Adrian Hunter, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, Sukadev Bhattiprolu, Zefan Li, Arnaldo Carvalho de Melo, Alexei Starovoitov * Wangnan (F) <wangnan0@huawei.com> wrote: > OK. Let's start making a nice UI. Thanks! > [...] > > One problem I can find is that, the wrapper will make perf depend on llvm. I > don't think the compiler will be deployed in production environments... And > also, the embedded case... What dependencies are there? On the usage side there should be very few outright dependencies: if the llvm binary is not available, or doesn't support what you need, or there's no runtime environment you can use to build the bytecode, you should display an informative error message so that the user knows what is missing and how to install it. Thanks, Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-05 12:05 ` Ingo Molnar @ 2015-06-05 14:06 ` Arnaldo Carvalho de Melo 2015-06-07 13:11 ` Ingo Molnar 0 siblings, 1 reply; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2015-06-05 14:06 UTC (permalink / raw) To: Ingo Molnar Cc: Wangnan (F), Alexei Starovoitov, pi3orama, linux-kernel, Adrian Hunter, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, Sukadev Bhattiprolu, Zefan Li, Alexei Starovoitov Em Fri, Jun 05, 2015 at 02:05:50PM +0200, Ingo Molnar escreveu: > * Wangnan (F) <wangnan0@huawei.com> wrote: <SNIP> > > One problem I can find is that, the wrapper will make perf depend on llvm. I > > don't think the compiler will be deployed in production environments... And > > also, the embedded case... > What dependencies are there? > On the usage side there should be very few outright dependencies: if the llvm > binary is not available, or doesn't support what you need, or there's no runtime > environment you can use to build the bytecode, you should display an informative > error message so that the user knows what is missing and how to install it. Right, something like: [acme@zoo ~]$ perf trace -e nanosleep usleep 1 Error: No permissions to read /sys/kernel/debug/tracing/events/raw_syscalls/sys_(enter|exit) Hint: Try 'sudo mount -o remount,mode=755 /sys/kernel/debug' [acme@zoo ~]$ sudo mount -o remount,mode=755 /sys/kernel/debug [sudo] password for acme: [acme@zoo ~]$ perf trace -e nanosleep usleep 1 0.565 ( 0.060 ms): usleep/17648 nanosleep(rqtp: 0x7fff22baebf0) = 0 [acme@zoo ~]$ perf trace --all-cpus Error: Operation not permitted. Hint: Check /proc/sys/kernel/perf_event_paranoid setting. Hint: For system wide tracing it needs to be set to -1. Hint: Try: 'sudo sh -c "echo -1 > /proc/sys/kernel/perf_event_paranoid"' Hint: The current value is 1. [acme@zoo ~]$ [acme@zoo ~]$ trace -a -e poll usleep 1 [acme@zoo ~]$ trace -a -e poll usleep 1 0.041 ( 0.000 ms): firefox/1458 ... [continued]: poll()) = 1 0.267 ( 0.003 ms): firefox/1458 poll(ufds: 0x7f43d6ea1340, nfds: 5) = 0 Timeout 0.275 ( 0.001 ms): firefox/1458 poll(ufds: 0x7f43d6ea1340, nfds: 5) = 0 Timeout 0.283 ( 0.001 ms): firefox/1458 poll(ufds: 0x7f43d6ea1340, nfds: 5) = 0 Timeout 0.979 ( 0.000 ms): gnome-terminal/2572 ... [continued]: poll()) = 1 1.056 ( 0.768 ms): firefox/1458 poll(ufds: 0x7f43d6ea1340, nfds: 5, timeout_msecs: 4294967295) ... 1.065 ( 0.009 ms): gnome-terminal/2572 poll(ufds: 0x1934250, nfds: 23, timeout_msecs: 10) = 1 1.087 ( 0.007 ms): gnome-terminal/2572 poll(ufds: 0x1934250, nfds: 23, timeout_msecs: 10) = 2 1.132 ( 0.007 ms): gnome-terminal/2572 poll(ufds: 0x1934250, nfds: 23, timeout_msecs: 10) = 1 1.161 ( 0.013 ms): gnome-terminal/2572 poll(ufds: 0x1934250, nfds: 23, timeout_msecs: 10) = 1 [acme@zoo ~]$ I.e. Explain the mistake and provide a hint to solve it, as close to the actual commands needed to perform such corrective/enabling action as possible. - Arnaldo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-05 14:06 ` Arnaldo Carvalho de Melo @ 2015-06-07 13:11 ` Ingo Molnar 0 siblings, 0 replies; 40+ messages in thread From: Ingo Molnar @ 2015-06-07 13:11 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Wangnan (F), Alexei Starovoitov, pi3orama, linux-kernel, Adrian Hunter, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, Sukadev Bhattiprolu, Zefan Li, Alexei Starovoitov * Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > Em Fri, Jun 05, 2015 at 02:05:50PM +0200, Ingo Molnar escreveu: > > * Wangnan (F) <wangnan0@huawei.com> wrote: > <SNIP> > > > One problem I can find is that, the wrapper will make perf depend on llvm. I > > > don't think the compiler will be deployed in production environments... And > > > also, the embedded case... > > > What dependencies are there? > > > On the usage side there should be very few outright dependencies: if the llvm > > binary is not available, or doesn't support what you need, or there's no runtime > > environment you can use to build the bytecode, you should display an informative > > error message so that the user knows what is missing and how to install it. > > Right, something like: > > [acme@zoo ~]$ perf trace -e nanosleep usleep 1 > Error: No permissions to read /sys/kernel/debug/tracing/events/raw_syscalls/sys_(enter|exit) > Hint: Try 'sudo mount -o remount,mode=755 /sys/kernel/debug' > [acme@zoo ~]$ sudo mount -o remount,mode=755 /sys/kernel/debug > [sudo] password for acme: > [acme@zoo ~]$ perf trace -e nanosleep usleep 1 > 0.565 ( 0.060 ms): usleep/17648 nanosleep(rqtp: 0x7fff22baebf0) = 0 > [acme@zoo ~]$ perf trace --all-cpus > Error: Operation not permitted. > Hint: Check /proc/sys/kernel/perf_event_paranoid setting. > Hint: For system wide tracing it needs to be set to -1. > Hint: Try: 'sudo sh -c "echo -1 > /proc/sys/kernel/perf_event_paranoid"' > Hint: The current value is 1. > [acme@zoo ~]$ > [acme@zoo ~]$ trace -a -e poll usleep 1 > [acme@zoo ~]$ trace -a -e poll usleep 1 > 0.041 ( 0.000 ms): firefox/1458 ... [continued]: poll()) = 1 > 0.267 ( 0.003 ms): firefox/1458 poll(ufds: 0x7f43d6ea1340, nfds: 5) = 0 Timeout > 0.275 ( 0.001 ms): firefox/1458 poll(ufds: 0x7f43d6ea1340, nfds: 5) = 0 Timeout > 0.283 ( 0.001 ms): firefox/1458 poll(ufds: 0x7f43d6ea1340, nfds: 5) = 0 Timeout > 0.979 ( 0.000 ms): gnome-terminal/2572 ... [continued]: poll()) = 1 > 1.056 ( 0.768 ms): firefox/1458 poll(ufds: 0x7f43d6ea1340, nfds: 5, timeout_msecs: 4294967295) ... > 1.065 ( 0.009 ms): gnome-terminal/2572 poll(ufds: 0x1934250, nfds: 23, timeout_msecs: 10) = 1 > 1.087 ( 0.007 ms): gnome-terminal/2572 poll(ufds: 0x1934250, nfds: 23, timeout_msecs: 10) = 2 > 1.132 ( 0.007 ms): gnome-terminal/2572 poll(ufds: 0x1934250, nfds: 23, timeout_msecs: 10) = 1 > 1.161 ( 0.013 ms): gnome-terminal/2572 poll(ufds: 0x1934250, nfds: 23, timeout_msecs: 10) = 1 > [acme@zoo ~]$ > > I.e. Explain the mistake and provide a hint to solve it, as close to the actual > commands needed to perform such corrective/enabling action as possible. Yeah, I absolutely love such tooling hints. Thanks, Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-06-05 8:53 ` Wangnan (F) 2015-06-05 12:05 ` Ingo Molnar @ 2015-06-05 13:59 ` Arnaldo Carvalho de Melo 1 sibling, 0 replies; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2015-06-05 13:59 UTC (permalink / raw) To: Wangnan (F) Cc: Ingo Molnar, Alexei Starovoitov, pi3orama, linux-kernel, Adrian Hunter, Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Madhavan Srinivasan, Masami Hiramatsu, Michael Ellerman, Namhyung Kim, Peter Zijlstra, Sukadev Bhattiprolu, Zefan Li, Alexei Starovoitov Em Fri, Jun 05, 2015 at 04:53:03PM +0800, Wangnan (F) escreveu: > On 2015/6/5 14:41, Ingo Molnar wrote: > >* Alexei Starovoitov <ast@plumgrid.com> wrote: > >>On 6/4/15 7:04 AM, Ingo Molnar wrote: > >In fact I'm NAK-ing the whole .o based interface until the .c interface is made > >the _primary_ one and works well and until I see that you have thought through > >basic usability questions... > OK. Let's start making a nice UI. > At this stage, what about wrapping current clang and llc workflow into perf, > let it call them to compile '.c' scripts? This is the way 'perf annotate' > using > objdump. I can do this job, but firstly I'd like to know people's opinion on Right, no need for, at a first step, to save this into a cache, or use libraries, etc, just automate the bpf.c into bpf.o, load it and use it as an event. > it, and the value of the wrapper if Alexei Starovoitov's dynamic compiler > shared object is coming. No need to wait for that, when it comes we can use it, but Ingo established as the door for this to be accepted is that we could use: perf record -e foo.c usleep Right? > Following functions will be added: > > - perf searches clang and llc under current $PATH, Good for a first step > - Users are allowed to pass the position of those programs, > if perf failed to find the automatically, I would leave all this configurabilty for later, stating that it has to be in the PATH should be ok for a first step. > - Users are allowed to pass extra compiling options to clang and llc, like > include directories, For later too? > - 'perf record' automatically calls them if a '.c' is passed using > '--event'. Right. > - 'perf bpf compile' command will be added to compile a '.c' find into > '.o', for later? I.e. 'perf record -e foo.c usleep' could start by generating the foo.o and not deleting it, so: perf record -e foo.c usleep Followed by: perf record -e foo.o usleep Would work, the later would be like a quick hack so that we could have access to a pre-compiled foo.o quickly, at this introductory stage. > Further, basic header files should be shipped with kernel headers. > > User interface update: > > - --llc, --clang, --llc-opt and --clang-opt option will be added to 'perf > record' > to indicate the position and extra options to them. Ideally they can be > leave > blank. Couldn't this be left to a section in a .perfconfig file to avoid having so many command line options? We could have one of those files per "project", after we add a --config option to 'perf record', to override whatever it finds in the config file search it already does, i.e.: [clang] path = /a/b/clang opt = -a -b -c -d [llc] path = /d/e/llc opt = -r -t -y -u But even this can be left for a second step. > - 'perf bpf compile' will be added. > One problem I can find is that, the wrapper will make perf depend on > llvm. I don't think the compiler will be deployed in production > environments... And also, the embedded case... Well, we can always build a subset of perf, using the command line options to disable certain features. - Arnaldo ^ permalink raw reply [flat|nested] 40+ messages in thread
* [GIT PULL 0/6] perf/core improvements and fixes @ 2015-03-31 20:59 Arnaldo Carvalho de Melo 2015-04-01 7:56 ` Ingo Molnar 0 siblings, 1 reply; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2015-03-31 20:59 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter, Andi Kleen, Borislav Petkov, David Ahern, David Hildenbrand, Don Zickus, Frederic Weisbecker, Hendrik Brueckner, Jeremie Galarneau, Jiri Olsa, Joe Mario, Kan Liang, Martin Schwidefsky, Namhyung Kim, Paul Mackerras, Peter Zijlstra, Sebastian Andrzej Siewior, Stephane Eranian, Tom Zanussi, Wang Nan, Arnaldo Carvalho de Melo Hi Ingo, Please consider pulling, - Arnaldo The following changes since commit ccd41c86ad4d464d0ed4e48d80759ff85c2115b0: perf: Fix racy group access (2015-03-27 09:49:45 +0100) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo for you to fetch changes up to 9870d7809575515e26194f4b3df1750872a6ee60: perf ordered_samples: Remove references to perf_{evlist,tool} and machines (2015-03-31 17:52:32 -0300) ---------------------------------------------------------------- perf/core improvements and fixes: User visible: - Fix 'perf script' pipe mode segfault, by always initializing ordered_events in perf_session__new. (Arnaldo Carvalho de Melo) - Fix ppid for synthesized fork events (David Ahern) - Fix kernel symbol resolution of callchains in S/390 by remembering the cpumode. (David Hildenbrand) Infrastructure: - Disable libbabeltrace check by default in the build system (Jiri Olsa) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> ---------------------------------------------------------------- Arnaldo Carvalho de Melo (2): perf session: Always initialize ordered_events perf ordered_samples: Remove references to perf_{evlist,tool} and machines David Ahern (2): perf tools: Refactor comm/tgid lookup perf tools: Fix ppid for synthesized fork events David Hildenbrand (1): perf callchain: Fix kernel symbol resolution by remembering the cpumode Jiri Olsa (1): perf build: Disable libbabeltrace check by default tools/perf/Makefile.perf | 2 +- tools/perf/config/Makefile | 5 +- tools/perf/util/event.c | 147 ++++++++++++++++++++++++--------------- tools/perf/util/event.h | 1 - tools/perf/util/machine.c | 28 ++++---- tools/perf/util/ordered-events.c | 21 ++---- tools/perf/util/ordered-events.h | 14 +--- tools/perf/util/session.c | 48 ++++++++----- tools/perf/util/session.h | 1 + 9 files changed, 144 insertions(+), 123 deletions(-) ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-03-31 20:59 Arnaldo Carvalho de Melo @ 2015-04-01 7:56 ` Ingo Molnar 0 siblings, 0 replies; 40+ messages in thread From: Ingo Molnar @ 2015-04-01 7:56 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: linux-kernel, Adrian Hunter, Andi Kleen, Borislav Petkov, David Ahern, David Hildenbrand, Don Zickus, Frederic Weisbecker, Hendrik Brueckner, Jeremie Galarneau, Jiri Olsa, Joe Mario, Kan Liang, Martin Schwidefsky, Namhyung Kim, Paul Mackerras, Peter Zijlstra, Sebastian Andrzej Siewior, Stephane Eranian, Tom Zanussi, Wang Nan, Arnaldo Carvalho de Melo * Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > Hi Ingo, > > Please consider pulling, > > - Arnaldo > > The following changes since commit ccd41c86ad4d464d0ed4e48d80759ff85c2115b0: > > perf: Fix racy group access (2015-03-27 09:49:45 +0100) > > are available in the git repository at: > > git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo > > for you to fetch changes up to 9870d7809575515e26194f4b3df1750872a6ee60: > > perf ordered_samples: Remove references to perf_{evlist,tool} and machines (2015-03-31 17:52:32 -0300) > > ---------------------------------------------------------------- > perf/core improvements and fixes: > > User visible: > > - Fix 'perf script' pipe mode segfault, by always initializing ordered_events in > perf_session__new. (Arnaldo Carvalho de Melo) > > - Fix ppid for synthesized fork events (David Ahern) > > - Fix kernel symbol resolution of callchains in S/390 by remembering the > cpumode. (David Hildenbrand) > > Infrastructure: > > - Disable libbabeltrace check by default in the build system (Jiri Olsa) > > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> > > ---------------------------------------------------------------- > Arnaldo Carvalho de Melo (2): > perf session: Always initialize ordered_events > perf ordered_samples: Remove references to perf_{evlist,tool} and machines > > David Ahern (2): > perf tools: Refactor comm/tgid lookup > perf tools: Fix ppid for synthesized fork events > > David Hildenbrand (1): > perf callchain: Fix kernel symbol resolution by remembering the cpumode > > Jiri Olsa (1): > perf build: Disable libbabeltrace check by default > > tools/perf/Makefile.perf | 2 +- > tools/perf/config/Makefile | 5 +- > tools/perf/util/event.c | 147 ++++++++++++++++++++++++--------------- > tools/perf/util/event.h | 1 - > tools/perf/util/machine.c | 28 ++++---- > tools/perf/util/ordered-events.c | 21 ++---- > tools/perf/util/ordered-events.h | 14 +--- > tools/perf/util/session.c | 48 ++++++++----- > tools/perf/util/session.h | 1 + > 9 files changed, 144 insertions(+), 123 deletions(-) Pulled, thanks a lot Arnaldo! Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* [GIT PULL 0/6] perf/core improvements and fixes @ 2015-03-26 15:40 Arnaldo Carvalho de Melo 2015-03-27 7:37 ` Ingo Molnar 0 siblings, 1 reply; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2015-03-26 15:40 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter, Borislav Petkov, David Ahern, David Ahern, Don Zickus, Frederic Weisbecker, Guilherme Cox, Jiri Olsa, Jiri Olsa, Namhyung Kim, Stephane Eranian, Steven Rostedt, Arnaldo Carvalho de Melo Hi Ingo, Please consider pulling, - Arnaldo The following changes since commit baa5a7bc5dd069bb37de9c8bdb5ea7f4e2e939e9: Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-03-24 17:22:44 +0100) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo for you to fetch changes up to 7c27f78a297b54c3c2f5075cb15d33431b7f6333: tools lib traceevent: Zero should not be considered "not found" in eval_flag() (2015-03-26 10:52:29 -0300) ---------------------------------------------------------------- perf/core improvements and fixes: User visible: - Show the first event with an invalid filter (David Ahern, Arnaldo Carvalho de Melo) - Fix garbage output when intermixing syscalls from different threads in 'perf trace' (Arnaldo Carvalho de Melo) - Fix 'perf timechart' SIBGUS error on sparc64 (David Ahern) Infrastructure: - Set JOBS based on CPU or processor, making it work on SPARC, where /proc/cpuinfo has "CPU", not "processor" (David Ahern) - Zero should not be considered "not found" in libtraceevent's eval_flag() (Steven Rostedt) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> ---------------------------------------------------------------- Arnaldo Carvalho de Melo (2): perf evlist: Return the first evsel with an invalid filter in apply_filters() perf trace: Fix syscall enter formatting bug David Ahern (3): perf timechart: Fix SIBGUS error on sparc64 perf: Bump max number of cpus to 1024 perf tools: Set JOBS based on CPU or processor Steven Rostedt (1): tools lib traceevent: Zero should not be considered "not found" in eval_flag() tools/lib/traceevent/event-parse.c | 10 +++++----- tools/perf/Makefile | 2 +- tools/perf/builtin-record.c | 5 +++-- tools/perf/builtin-stat.c | 5 +++-- tools/perf/builtin-trace.c | 2 +- tools/perf/perf.h | 2 +- tools/perf/util/evlist.c | 6 ++++-- tools/perf/util/evlist.h | 2 +- tools/perf/util/evsel.c | 2 +- 9 files changed, 20 insertions(+), 16 deletions(-) ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2015-03-26 15:40 Arnaldo Carvalho de Melo @ 2015-03-27 7:37 ` Ingo Molnar 0 siblings, 0 replies; 40+ messages in thread From: Ingo Molnar @ 2015-03-27 7:37 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: linux-kernel, Adrian Hunter, Borislav Petkov, David Ahern, David Ahern, Don Zickus, Frederic Weisbecker, Guilherme Cox, Jiri Olsa, Jiri Olsa, Namhyung Kim, Stephane Eranian, Steven Rostedt, Arnaldo Carvalho de Melo * Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > Hi Ingo, > > Please consider pulling, > > - Arnaldo > > The following changes since commit baa5a7bc5dd069bb37de9c8bdb5ea7f4e2e939e9: > > Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-03-24 17:22:44 +0100) > > are available in the git repository at: > > > git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo > > for you to fetch changes up to 7c27f78a297b54c3c2f5075cb15d33431b7f6333: > > tools lib traceevent: Zero should not be considered "not found" in eval_flag() (2015-03-26 10:52:29 -0300) > > ---------------------------------------------------------------- > perf/core improvements and fixes: > > User visible: > > - Show the first event with an invalid filter (David Ahern, Arnaldo Carvalho de Melo) > > - Fix garbage output when intermixing syscalls from different threads in 'perf trace' (Arnaldo Carvalho de Melo) > > - Fix 'perf timechart' SIBGUS error on sparc64 (David Ahern) > > Infrastructure: > > - Set JOBS based on CPU or processor, making it work on SPARC, where > /proc/cpuinfo has "CPU", not "processor" (David Ahern) > > - Zero should not be considered "not found" in libtraceevent's eval_flag() (Steven Rostedt) > > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> > > ---------------------------------------------------------------- > Arnaldo Carvalho de Melo (2): > perf evlist: Return the first evsel with an invalid filter in apply_filters() > perf trace: Fix syscall enter formatting bug > > David Ahern (3): > perf timechart: Fix SIBGUS error on sparc64 > perf: Bump max number of cpus to 1024 > perf tools: Set JOBS based on CPU or processor > > Steven Rostedt (1): > tools lib traceevent: Zero should not be considered "not found" in eval_flag() > > tools/lib/traceevent/event-parse.c | 10 +++++----- > tools/perf/Makefile | 2 +- > tools/perf/builtin-record.c | 5 +++-- > tools/perf/builtin-stat.c | 5 +++-- > tools/perf/builtin-trace.c | 2 +- > tools/perf/perf.h | 2 +- > tools/perf/util/evlist.c | 6 ++++-- > tools/perf/util/evlist.h | 2 +- > tools/perf/util/evsel.c | 2 +- > 9 files changed, 20 insertions(+), 16 deletions(-) Pulled, thanks a lot Arnaldo! Btw., I still see: config/Makefile:609: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev this annoyance needs to be fixed ASAP, before I can send perf/core to Linus. Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* [GIT PULL 0/6] perf/core improvements and fixes @ 2014-05-12 9:27 Jiri Olsa 2014-05-12 15:59 ` Ingo Molnar 0 siblings, 1 reply; 40+ messages in thread From: Jiri Olsa @ 2014-05-12 9:27 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Adrian Hunter, Arnaldo Carvalho de Melo, Bernhard Rosenkraenzer, Corey Ashford, David Ahern, Dongsheng, Frederic Weisbecker, Irina Tirdea, Jiri Olsa, Namhyung Kim, Paul Mackerras, Peter Zijlstra, Stephane Eranian hi Ingo, please consider pulling thanks, jirka The following changes since commit 3e46d21285577a8c9e4c37f9b1002e567c440b28: Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf into perf/core (2014-05-05 19:37:51 +0200) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git tags/perf-core-for-mingo for you to fetch changes up to 13ce34df11833482cd698331fdbb3f8ced06340d: perf tools: Use tid for finding thread (2014-05-12 11:09:50 +0200) ---------------------------------------------------------------- perf/core improvements and fixes: . Propagate exit status of a command line workload for record command (Namhyung Kim) . Use tid for finding thread (Namhyung Kim) . Clarify the output of perf sched map plus small sched command fixies (Dongsheng Yang) Signed-off-by: Jiri Olsa <jolsa@kernel.org> ---------------------------------------------------------------- Dongsheng (3): perf tools: Add missing event for perf sched record. perf tools: Adapt the TASK_STATE_TO_CHAR_STR to new value in kernel space. perf tools: Clarify the output of perf sched map. Namhyung Kim (3): perf record: Propagate exit status of a command line workload perf tools: Get rid of on_exit() feature test perf tools: Use tid for finding thread tools/perf/builtin-inject.c | 2 +- tools/perf/builtin-kmem.c | 2 +- tools/perf/builtin-record.c | 158 +++++++++--------------- tools/perf/builtin-sched.c | 38 +++--- tools/perf/config/Makefile | 8 -- tools/perf/config/feature-checks/Makefile | 4 - tools/perf/config/feature-checks/test-all.c | 5 - tools/perf/config/feature-checks/test-on-exit.c | 16 --- tools/perf/tests/code-reading.c | 2 +- tools/perf/tests/hists_filter.c | 1 + tools/perf/tests/hists_link.c | 2 + tools/perf/util/build-id.c | 2 +- tools/perf/util/event.c | 2 +- 13 files changed, 90 insertions(+), 152 deletions(-) delete mode 100644 tools/perf/config/feature-checks/test-on-exit.c ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2014-05-12 9:27 Jiri Olsa @ 2014-05-12 15:59 ` Ingo Molnar 0 siblings, 0 replies; 40+ messages in thread From: Ingo Molnar @ 2014-05-12 15:59 UTC (permalink / raw) To: Jiri Olsa Cc: linux-kernel, Adrian Hunter, Arnaldo Carvalho de Melo, Bernhard Rosenkraenzer, Corey Ashford, David Ahern, Dongsheng, Frederic Weisbecker, Irina Tirdea, Namhyung Kim, Paul Mackerras, Peter Zijlstra, Stephane Eranian * Jiri Olsa <jolsa@kernel.org> wrote: > hi Ingo, > please consider pulling > > thanks, > jirka > > > The following changes since commit 3e46d21285577a8c9e4c37f9b1002e567c440b28: > > Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf into perf/core (2014-05-05 19:37:51 +0200) > > are available in the git repository at: > > > git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git tags/perf-core-for-mingo > > for you to fetch changes up to 13ce34df11833482cd698331fdbb3f8ced06340d: > > perf tools: Use tid for finding thread (2014-05-12 11:09:50 +0200) > > ---------------------------------------------------------------- > perf/core improvements and fixes: > > . Propagate exit status of a command line workload for > record command (Namhyung Kim) > > . Use tid for finding thread (Namhyung Kim) > > . Clarify the output of perf sched map plus small sched > command fixies (Dongsheng Yang) > > Signed-off-by: Jiri Olsa <jolsa@kernel.org> > > ---------------------------------------------------------------- > Dongsheng (3): > perf tools: Add missing event for perf sched record. > perf tools: Adapt the TASK_STATE_TO_CHAR_STR to new value in kernel space. > perf tools: Clarify the output of perf sched map. > > Namhyung Kim (3): > perf record: Propagate exit status of a command line workload > perf tools: Get rid of on_exit() feature test > perf tools: Use tid for finding thread > > tools/perf/builtin-inject.c | 2 +- > tools/perf/builtin-kmem.c | 2 +- > tools/perf/builtin-record.c | 158 +++++++++--------------- > tools/perf/builtin-sched.c | 38 +++--- > tools/perf/config/Makefile | 8 -- > tools/perf/config/feature-checks/Makefile | 4 - > tools/perf/config/feature-checks/test-all.c | 5 - > tools/perf/config/feature-checks/test-on-exit.c | 16 --- > tools/perf/tests/code-reading.c | 2 +- > tools/perf/tests/hists_filter.c | 1 + > tools/perf/tests/hists_link.c | 2 + > tools/perf/util/build-id.c | 2 +- > tools/perf/util/event.c | 2 +- > 13 files changed, 90 insertions(+), 152 deletions(-) > delete mode 100644 tools/perf/config/feature-checks/test-on-exit.c Pulled, thanks a lot Jiri! Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* [GIT PULL 0/6] perf/core improvements and fixes @ 2014-04-30 10:11 Jiri Olsa 2014-05-01 6:26 ` Ingo Molnar 0 siblings, 1 reply; 40+ messages in thread From: Jiri Olsa @ 2014-04-30 10:11 UTC (permalink / raw) To: Ingo Molnar Cc: Alexander Yarygin, Arnaldo Carvalho de Melo, Borislav Petkov, Christian Borntraeger, Corey Ashford, David Ahern, Frederic Weisbecker, Ingo Molnar, Jean Pihet, Namhyung Kim, Paul Mackerras, Peter Zijlstra, Stephane Eranian, Will Deacon, linux-kernel hi Ingo, please consider pulling resending 0/6.. it got lost somehow from previous post.. thanks, jirka The following changes since commit 201131998fbf074b03679afedcc29948e63331ef: Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf into perf/core (2014-04-29 08:41:21 +0200) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git tags/perf-core-for-mingo for you to fetch changes up to 8ab596afb97bc9e2f9140dc1d993e81749acff42: perf tools ARM64: Wire up perf_regs and unwind support (2014-04-29 15:31:19 +0200) ---------------------------------------------------------------- perf/core improvements and fixes: . Wire up perf_regs and unwind support for ARM64 (Jean Pihet) . Move u64_swap union to its single user's header, evsel.h (Borislav Petkov) . Fix for s390 to properly parse tracepoints plus test code (Alexander Yarygin) . Handle EINTR error for readn/writen (Namhyung Kim) Signed-off-by: Jiri Olsa <jolsa@kernel.org> ---------------------------------------------------------------- Alexander Yarygin (3): perf tools: Parse tracepoints with '-' in system name perf tests: Add numeric identifier to evlist_test perf tests: Add a test of kvm-390: trace event Borislav Petkov (1): perf tools: Move u64_swap union Jean Pihet (1): perf tools ARM64: Wire up perf_regs and unwind support Namhyung Kim (1): perf tools: Handle EINTR error for readn/writen tools/perf/arch/arm64/Makefile | 7 ++ tools/perf/arch/arm64/include/perf_regs.h | 88 ++++++++++++++++ tools/perf/arch/arm64/util/dwarf-regs.c | 80 +++++++++++++++ tools/perf/arch/arm64/util/unwind-libunwind.c | 82 +++++++++++++++ tools/perf/config/Makefile | 8 +- tools/perf/tests/parse-events.c | 142 ++++++++++++++++++-------- tools/perf/util/evsel.h | 5 + tools/perf/util/parse-events.y | 12 +++ tools/perf/util/types.h | 5 - tools/perf/util/util.c | 2 + 10 files changed, 380 insertions(+), 51 deletions(-) create mode 100644 tools/perf/arch/arm64/Makefile create mode 100644 tools/perf/arch/arm64/include/perf_regs.h create mode 100644 tools/perf/arch/arm64/util/dwarf-regs.c create mode 100644 tools/perf/arch/arm64/util/unwind-libunwind.c ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2014-04-30 10:11 Jiri Olsa @ 2014-05-01 6:26 ` Ingo Molnar 0 siblings, 0 replies; 40+ messages in thread From: Ingo Molnar @ 2014-05-01 6:26 UTC (permalink / raw) To: Jiri Olsa Cc: Alexander Yarygin, Arnaldo Carvalho de Melo, Borislav Petkov, Christian Borntraeger, Corey Ashford, David Ahern, Frederic Weisbecker, Jean Pihet, Namhyung Kim, Paul Mackerras, Peter Zijlstra, Stephane Eranian, Will Deacon, linux-kernel * Jiri Olsa <jolsa@kernel.org> wrote: > hi Ingo, > please consider pulling > > resending 0/6.. it got lost somehow from previous post.. > > thanks, > jirka > > > The following changes since commit 201131998fbf074b03679afedcc29948e63331ef: > > Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf into perf/core (2014-04-29 08:41:21 +0200) > > are available in the git repository at: > > > git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git tags/perf-core-for-mingo > > for you to fetch changes up to 8ab596afb97bc9e2f9140dc1d993e81749acff42: > > perf tools ARM64: Wire up perf_regs and unwind support (2014-04-29 15:31:19 +0200) > > ---------------------------------------------------------------- > perf/core improvements and fixes: > > . Wire up perf_regs and unwind support for ARM64 (Jean Pihet) > > . Move u64_swap union to its single user's header, evsel.h (Borislav Petkov) > > . Fix for s390 to properly parse tracepoints plus test code (Alexander Yarygin) > > . Handle EINTR error for readn/writen (Namhyung Kim) > > Signed-off-by: Jiri Olsa <jolsa@kernel.org> > > ---------------------------------------------------------------- > Alexander Yarygin (3): > perf tools: Parse tracepoints with '-' in system name > perf tests: Add numeric identifier to evlist_test > perf tests: Add a test of kvm-390: trace event > > Borislav Petkov (1): > perf tools: Move u64_swap union > > Jean Pihet (1): > perf tools ARM64: Wire up perf_regs and unwind support > > Namhyung Kim (1): > perf tools: Handle EINTR error for readn/writen > > tools/perf/arch/arm64/Makefile | 7 ++ > tools/perf/arch/arm64/include/perf_regs.h | 88 ++++++++++++++++ > tools/perf/arch/arm64/util/dwarf-regs.c | 80 +++++++++++++++ > tools/perf/arch/arm64/util/unwind-libunwind.c | 82 +++++++++++++++ > tools/perf/config/Makefile | 8 +- > tools/perf/tests/parse-events.c | 142 ++++++++++++++++++-------- > tools/perf/util/evsel.h | 5 + > tools/perf/util/parse-events.y | 12 +++ > tools/perf/util/types.h | 5 - > tools/perf/util/util.c | 2 + > 10 files changed, 380 insertions(+), 51 deletions(-) > create mode 100644 tools/perf/arch/arm64/Makefile > create mode 100644 tools/perf/arch/arm64/include/perf_regs.h > create mode 100644 tools/perf/arch/arm64/util/dwarf-regs.c > create mode 100644 tools/perf/arch/arm64/util/unwind-libunwind.c Pulled, thanks a lot Jiri! I also merged perf/urgent into perf/core, because a conflict developed between the two. Thanks, Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* [GIT PULL 0/6] perf/core improvements and fixes @ 2012-10-31 14:48 Arnaldo Carvalho de Melo 0 siblings, 0 replies; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2012-10-31 14:48 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Arnaldo Carvalho de Melo, Andi Kleen, Andrew Vagin, Borislav Petkov, David Ahern, David Howells, Frederic Weisbecker, Irina Tirdea, Jiri Olsa, Joonsoo Kim, Mike Galbraith, Namhyung Kim, Namhyung Kim, Paul Mackerras, Pekka Enberg, Peter Zijlstra, Peter Zijlstra, Stephane Eranian, Steven Rostedt, arnaldo.melo, Arnaldo Carvalho de Melo Hi Ingo, Please consider pulling, - Arnaldo The following changes since commit 95d18aa2b6c05351181934b3bc34ce038cc7b637: perf/x86: Fix sparse warnings (2012-10-30 10:10:52 +0100) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux tags/perf-core-for-mingo for you to fetch changes up to ffadcf090d468e9c4938b718649f38dd10cfdb02: perf annotate: Handle XBEGIN like a jump (2012-10-31 12:18:26 -0200) ---------------------------------------------------------------- perf/core improvements and fixes . Handle XBEGIN like a jump in the annotate browser, from Andi Kleen . Build speedups for --version, from Ingo Molnar. . Add info about cross compiling for Android ARM, from Joonsoo Kim. . Warn about missing libelf, from Namhyung Kim. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> ---------------------------------------------------------------- Andi Kleen (1): perf annotate: Handle XBEGIN like a jump Arnaldo Carvalho de Melo (1): perf tools: Handle --version string generation on machines without git Ingo Molnar (2): perf tools: Speed up the perf build time by simplifying the perf --version string generation perf tools: Further speed up the perf build Joonsoo Kim (1): perf tools: Add info about cross compiling for Android ARM Namhyung Kim (1): perf tools: Warn about missing libelf tools/perf/Documentation/android.txt | 5 ++++- tools/perf/Makefile | 2 ++ tools/perf/util/PERF-VERSION-GEN | 14 +++++--------- tools/perf/util/annotate.c | 2 ++ 4 files changed, 13 insertions(+), 10 deletions(-) ^ permalink raw reply [flat|nested] 40+ messages in thread
* [GIT PULL 0/6] perf/core improvements and fixes @ 2011-04-20 16:23 Arnaldo Carvalho de Melo 2011-04-21 8:58 ` Ingo Molnar 0 siblings, 1 reply; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2011-04-20 16:23 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Arnaldo Carvalho de Melo, Arun Sharma, Frederic Weisbecker, Michael Witten, Mike Galbraith, Paul Mackerras, Peter Zijlstra, Raghavendra D Prabhu, Stephane Eranian, Thomas Gleixner, Tom Zanussi, Arnaldo Carvalho de Melo Hi Ingo, Please consider pulling from: git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux-2.6 perf/core Regards, - Arnaldo Arnaldo Carvalho de Melo (1): perf symbols: Give more useful names to 'self' parameters Arun Sharma (1): perf script: Add support for PERF_TYPE_RAW Michael Witten (4): perf tools: Makefile: Clean up `python/perf.so' rule perf tools: Makefile: PYTHON{,_CONFIG} to bandage Python 3 incompatibility perf tools: Move `try-cc' perf tools: git mv tools/perf/{features-tests.mak,config/} tools/perf/Makefile | 107 +++++-- tools/perf/builtin-script.c | 14 +- tools/perf/config/feature-tests.mak | 128 +++++++ tools/perf/config/utilities.mak | 188 +++++++++++ tools/perf/feature-tests.mak | 130 ------- tools/perf/util/symbol.c | 629 ++++++++++++++++++----------------- tools/perf/util/symbol.h | 78 +++-- 7 files changed, 771 insertions(+), 503 deletions(-) create mode 100644 tools/perf/config/feature-tests.mak create mode 100644 tools/perf/config/utilities.mak delete mode 100644 tools/perf/feature-tests.mak ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2011-04-20 16:23 Arnaldo Carvalho de Melo @ 2011-04-21 8:58 ` Ingo Molnar 0 siblings, 0 replies; 40+ messages in thread From: Ingo Molnar @ 2011-04-21 8:58 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: linux-kernel, Arun Sharma, Frederic Weisbecker, Michael Witten, Mike Galbraith, Paul Mackerras, Peter Zijlstra, Raghavendra D Prabhu, Stephane Eranian, Thomas Gleixner, Tom Zanussi, Arnaldo Carvalho de Melo * Arnaldo Carvalho de Melo <acme@infradead.org> wrote: > Hi Ingo, > > Please consider pulling from: > > git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux-2.6 perf/core > > Regards, > > - Arnaldo > > Arnaldo Carvalho de Melo (1): > perf symbols: Give more useful names to 'self' parameters > > Arun Sharma (1): > perf script: Add support for PERF_TYPE_RAW > > Michael Witten (4): > perf tools: Makefile: Clean up `python/perf.so' rule > perf tools: Makefile: PYTHON{,_CONFIG} to bandage Python 3 incompatibility > perf tools: Move `try-cc' > perf tools: git mv tools/perf/{features-tests.mak,config/} > > tools/perf/Makefile | 107 +++++-- > tools/perf/builtin-script.c | 14 +- > tools/perf/config/feature-tests.mak | 128 +++++++ > tools/perf/config/utilities.mak | 188 +++++++++++ > tools/perf/feature-tests.mak | 130 ------- > tools/perf/util/symbol.c | 629 ++++++++++++++++++----------------- > tools/perf/util/symbol.h | 78 +++-- > 7 files changed, 771 insertions(+), 503 deletions(-) > create mode 100644 tools/perf/config/feature-tests.mak > create mode 100644 tools/perf/config/utilities.mak > delete mode 100644 tools/perf/feature-tests.mak Pulled, thanks a lot Arnaldo! Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
* [GIT PULL 0/6] perf/core improvements and fixes @ 2011-02-16 22:54 Arnaldo Carvalho de Melo 2011-02-17 13:50 ` Ingo Molnar 0 siblings, 1 reply; 40+ messages in thread From: Arnaldo Carvalho de Melo @ 2011-02-16 22:54 UTC (permalink / raw) To: Ingo Molnar Cc: linux-kernel, Arnaldo Carvalho de Melo, 2nddept-manager, Franck Bui-Huu, Frederic Weisbecker, Ingo Molnar, Jesse Brandeburg, Masami Hiramatsu, Mike Galbraith, Paul Mackerras, Peter Zijlstra, Stephane Eranian, Tom Zanussi, Arnaldo Carvalho de Melo Hi Ingo, Please consider pulling from: git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux-2.6 perf/core Regards, - Arnaldo Arnaldo Carvalho de Melo (3): perf ui: Serialize screen updates perf annotate: Check if offset is less than symbol size perf annotate browser: Use the percent color for the whole line Jesse Brandeburg (1): perf tools: Update Makefile with some help Masami Hiramatsu (2): perf probe: Support function@filename syntax for --line perf probe: Show filename which contains target function tools/perf/Documentation/Makefile | 19 ++++++++++--------- tools/perf/Documentation/perf-probe.txt | 7 ++++--- tools/perf/Makefile | 31 +++++++++++++++++++++++++++++++ tools/perf/util/annotate.c | 3 ++- tools/perf/util/probe-event.c | 17 +++++++++++++---- tools/perf/util/ui/browser.c | 7 +++++++ tools/perf/util/ui/browsers/annotate.c | 5 +++-- tools/perf/util/ui/helpline.c | 5 ++++- tools/perf/util/ui/setup.c | 3 +++ tools/perf/util/ui/ui.h | 8 ++++++++ 10 files changed, 85 insertions(+), 20 deletions(-) create mode 100644 tools/perf/util/ui/ui.h ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [GIT PULL 0/6] perf/core improvements and fixes 2011-02-16 22:54 Arnaldo Carvalho de Melo @ 2011-02-17 13:50 ` Ingo Molnar 0 siblings, 0 replies; 40+ messages in thread From: Ingo Molnar @ 2011-02-17 13:50 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: linux-kernel, 2nddept-manager, Franck Bui-Huu, Frederic Weisbecker, Jesse Brandeburg, Masami Hiramatsu, Mike Galbraith, Paul Mackerras, Peter Zijlstra, Stephane Eranian, Tom Zanussi, Arnaldo Carvalho de Melo * Arnaldo Carvalho de Melo <acme@infradead.org> wrote: > Hi Ingo, > > Please consider pulling from: > > git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux-2.6 perf/core > > Regards, > > - Arnaldo > > Arnaldo Carvalho de Melo (3): > perf ui: Serialize screen updates > perf annotate: Check if offset is less than symbol size > perf annotate browser: Use the percent color for the whole line > > Jesse Brandeburg (1): > perf tools: Update Makefile with some help > > Masami Hiramatsu (2): > perf probe: Support function@filename syntax for --line > perf probe: Show filename which contains target function > > tools/perf/Documentation/Makefile | 19 ++++++++++--------- > tools/perf/Documentation/perf-probe.txt | 7 ++++--- > tools/perf/Makefile | 31 +++++++++++++++++++++++++++++++ > tools/perf/util/annotate.c | 3 ++- > tools/perf/util/probe-event.c | 17 +++++++++++++---- > tools/perf/util/ui/browser.c | 7 +++++++ > tools/perf/util/ui/browsers/annotate.c | 5 +++-- > tools/perf/util/ui/helpline.c | 5 ++++- > tools/perf/util/ui/setup.c | 3 +++ > tools/perf/util/ui/ui.h | 8 ++++++++ > 10 files changed, 85 insertions(+), 20 deletions(-) > create mode 100644 tools/perf/util/ui/ui.h Pulled, thanks a lot Arnaldo! Ingo ^ permalink raw reply [flat|nested] 40+ messages in thread
end of thread, other threads:[~2017-03-16 16:30 UTC | newest] Thread overview: 40+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-03-16 16:09 [GIT PULL 0/6] perf/core improvements and fixes Arnaldo Carvalho de Melo 2017-03-16 16:09 ` [PATCH 1/6] perf probe: Introduce util func is_sdt_event() Arnaldo Carvalho de Melo 2017-03-16 16:09 ` [PATCH 2/6] trace/kprobes: Fix check for kretprobe offset within function entry Arnaldo Carvalho de Melo 2017-03-16 16:09 ` [PATCH 3/6] perf tools: Make perf_event__synthesize_mmap_events() scale Arnaldo Carvalho de Melo 2017-03-16 16:10 ` [PATCH 4/6] tools headers: Sync {tools/,}arch/x86/include/asm/cpufeatures.h Arnaldo Carvalho de Melo 2017-03-16 16:10 ` [PATCH 5/6] perf script: Add 'brstackinsn' for branch stacks Arnaldo Carvalho de Melo 2017-03-16 16:10 ` [PATCH 6/6] uprobes: Default UPROBES_EVENTS to Y Arnaldo Carvalho de Melo 2017-03-16 16:30 ` [GIT PULL 0/6] perf/core improvements and fixes Ingo Molnar -- strict thread matches above, loose matches on Subject: below -- 2015-08-31 21:36 Arnaldo Carvalho de Melo 2015-09-01 8:26 ` Ingo Molnar 2015-06-03 22:40 Arnaldo Carvalho de Melo 2015-06-04 5:48 ` Ingo Molnar 2015-06-04 6:07 ` Wangnan (F) 2015-06-04 7:21 ` Ingo Molnar 2015-06-04 10:00 ` Wangnan (F) 2015-06-04 12:40 ` Ingo Molnar 2015-06-04 12:58 ` pi3orama 2015-06-04 14:04 ` Ingo Molnar 2015-06-04 16:22 ` Alexei Starovoitov 2015-06-04 21:48 ` Masami Hiramatsu 2015-06-04 22:07 ` Alexei Starovoitov 2015-06-05 6:41 ` Ingo Molnar 2015-06-05 8:53 ` Wangnan (F) 2015-06-05 12:05 ` Ingo Molnar 2015-06-05 14:06 ` Arnaldo Carvalho de Melo 2015-06-07 13:11 ` Ingo Molnar 2015-06-05 13:59 ` Arnaldo Carvalho de Melo 2015-03-31 20:59 Arnaldo Carvalho de Melo 2015-04-01 7:56 ` Ingo Molnar 2015-03-26 15:40 Arnaldo Carvalho de Melo 2015-03-27 7:37 ` Ingo Molnar 2014-05-12 9:27 Jiri Olsa 2014-05-12 15:59 ` Ingo Molnar 2014-04-30 10:11 Jiri Olsa 2014-05-01 6:26 ` Ingo Molnar 2012-10-31 14:48 Arnaldo Carvalho de Melo 2011-04-20 16:23 Arnaldo Carvalho de Melo 2011-04-21 8:58 ` Ingo Molnar 2011-02-16 22:54 Arnaldo Carvalho de Melo 2011-02-17 13:50 ` Ingo Molnar
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.