Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754789AbZJBVrG (ORCPT ); Fri, 2 Oct 2009 17:47:06 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754692AbZJBVrF (ORCPT ); Fri, 2 Oct 2009 17:47:05 -0400 Received: from mx1.redhat.com ([209.132.183.28]:4732 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754618AbZJBVrD (ORCPT ); Fri, 2 Oct 2009 17:47:03 -0400 From: Masami Hiramatsu Subject: [PATCH tracing/kprobes v2 0/5] tracing/kprobes, perf: perf probe support take 2 To: Frederic Weisbecker , Steven Rostedt , Ingo Molnar , lkml Cc: Frederic Weisbecker , Ingo Molnar , Thomas Gleixner , Arnaldo Carvalho de Melo , Steven Rostedt , Mike Galbraith , Paul Mackerras , Peter Zijlstra , Christoph Hellwig , Ananth N Mavinakayanahalli , Jim Keniston , "Frank Ch. Eigler" , systemtap , DLE Date: Fri, 02 Oct 2009 17:48:34 -0400 Message-ID: <20091002214834.30906.86502.stgit@dhcp-100-2-132.bos.redhat.com> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4229 Lines: 123 Hi, These patches introduce 'perf probe' command and update kprobe-tracer. perf probe command allows you to add new probe points by C line number and local variable names. This version fixes some bugs, changes subcommand name from kprobe to probe and use spaces for separator instead of ',' for visibility (this also make it easy to support probe list from stdin). Usage ----- perf probe [] -P 'PROBEDEF' [-P 'PROBEDEF' ...] -k, --vmlinux vmlinux/module pathname -r, --release kernel release -P, --probe probe point definition, where p: kprobe probe r: kretprobe probe GRP: Group name (optional) NAME: Event name FUNC: Function name OFFS: Offset from function entry (in byte) SRC: Source code path LINE: Line number ARG: Probe argument (local variable name or kprobe-tracer argument format is supported.) Examples -------- 1) Add a new kprobe probe on a line of C source code. ./perf probe -P 'p:myprobe @fs/read_write.c:285 file buf count' Adding new event: p:myprobe vfs_read+57 file=%bx buf=%si count=%ax 2) Add a new kretprobe probe on a function return. ./perf probe -P 'r:myretprobe vfs_read $rv' Adding new event: r:myretprobe vfs_read+0 $rv 3) Check it in the perf list. ./perf list ... rNNN [raw hardware event descriptor] kprobes:myprobe [Tracepoint event] kprobes:myretprobe [Tracepoint event] skb:kfree_skb [Tracepoint event] ... 4) Record the event by perf ./perf record -f -e kprobes:myprobe:record -F 1 -a ls ... [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.081 MB perf.data (~3540 samples) ] 5) Trace the event ./perf trace perf-11445 [000] 95862.048894383: myprobe: (c04bbed5) file=dae15e80 buf=b78b2000 count=400 perf-11445 [000] 95862.049066533: myprobe: (c04bbed5) file=dae15d80 buf=b78b2000 count=400 perf-11445 [000] 95862.049134394: myprobe: (c04bbed5) file=dae15d80 buf=b78b2000 count=400 perf-11445 [000] 95862.049171495: myprobe: (c04bbed5) file=dae15a80 buf=b78b2000 count=400 NOTE ---- perf still fails to parse format if arguments have special charactors (e.g. $rv, +10($sp) etc.) So, tracing myretprobe will fail with this version. This will be solved by naming arguments automatically if it doesn't have C-language name. TODO ---- - Support sys_perf_counter_open (non-root) - Input from stdin/output to stdout - Non-auto static variable - Fields of data structures (var->field) - Type support - Bit fields - Array (var[N]) - Dynamic array indexing (var[var2]) - String/dynamic arrays (var:string, var[N..M]) - Force Type casting ((type)var) - Non-inline search - libdw, libdwfl - etc. Thank you, --- Masami Hiramatsu (5): perf: kprobe command supports without libdwarf perf: Add perf probe subcommand for kprobe-event setup helper tracing/kprobes: Rename fixed field name tracing/kprobes: Avoid field name confliction tracing/kprobes: Rename special variables syntax Documentation/trace/kprobetrace.txt | 10 - kernel/trace/trace_kprobe.c | 125 +++++- tools/perf/Makefile | 10 + tools/perf/builtin-probe.c | 384 +++++++++++++++++++ tools/perf/builtin.h | 1 tools/perf/perf.c | 1 tools/perf/util/probe-finder.c | 690 +++++++++++++++++++++++++++++++++++ tools/perf/util/probe-finder.h | 70 ++++ 8 files changed, 1251 insertions(+), 40 deletions(-) create mode 100644 tools/perf/builtin-probe.c create mode 100644 tools/perf/util/probe-finder.c create mode 100644 tools/perf/util/probe-finder.h -- Masami Hiramatsu Software Engineer Hitachi Computer Products (America), Inc. Software Solutions Division e-mail: mhiramat@redhat.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/