All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <mhiramat@redhat.com>
To: Frederic Weisbecker <fweisbec@gmail.com>
Cc: "Ingo Molnar" <mingo@elte.hu>,
	"Steven Rostedt" <rostedt@goodmis.org>,
	lkml <linux-kernel@vger.kernel.org>,
	"Ananth N Mavinakayanahalli" <ananth@in.ibm.com>,
	"Avi Kivity" <avi@redhat.com>, "Andi Kleen" <ak@linux.intel.com>,
	"Christoph Hellwig" <hch@infradead.org>,
	"Frank Ch. Eigler" <fche@redhat.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"Jason Baron" <jbaron@redhat.com>,
	"Jim Keniston" <jkenisto@us.ibm.com>,
	"K.Prasad" <prasad@linux.vnet.ibm.com>,
	"Lai Jiangshan" <laijs@cn.fujitsu.com>,
	"Li Zefan" <lizf@cn.fujitsu.com>,
	PrzemysławPawełczyk <przemyslaw@pawelczyk.it>,
	"Roland McGrath" <roland@redhat.com>,
	"Sam Ravnborg" <sam@ravnborg.org>,
	"Srikar Dronamraju" <srikar@linux.vnet.ibm.com>,
	"Tom Zanussi" <tzanussi@gmail.com>,
	"Vegard Nossum" <vegard.nossum@gmail.com>,
	systemtap <systemtap@sources.redhat.com>,
	kvm <kvm@vger.kernel.org>,
	DLE <dle-develop@lists.sourceforge.net>
Subject: Re: [TOOL] c2kpe: C expression to kprobe event format converter
Date: Mon, 31 Aug 2009 00:14:34 -0400	[thread overview]
Message-ID: <4A9B4E2A.1070201@redhat.com> (raw)
In-Reply-To: <20090830195041.GA6189@nowhere>

Frederic Weisbecker wrote:
> On Thu, Aug 13, 2009 at 04:59:19PM -0400, Masami Hiramatsu wrote:
>> This program converts probe point in C expression to kprobe event
>> format for kprobe-based event tracer. This helps to define kprobes
>> events by C source line number or function name, and local variable
>> name. Currently, this supports only x86(32/64) kernels.
>>
>>
>> Compile
>> --------
>> Before compilation, please install libelf and libdwarf development
>> packages.
>> (e.g. elfutils-libelf-devel and libdwarf-devel on Fedora)
> 
> 
> This may probably need a specific libdwarf version?
> 
> c2kpe.c: In function ‘die_get_entrypc’:
> c2kpe.c:422: erreur: ‘Dwarf_Ranges’ undeclared (first use in this function)
> c2kpe.c:422: erreur: (Each undeclared identifier is reported only once
> c2kpe.c:422: erreur: for each function it appears in.)
> c2kpe.c:422: erreur: ‘ranges’ undeclared (first use in this function)
> c2kpe.c:447: attention : implicit declaration of function ‘dwarf_get_ranges’
> c2kpe.c:451: attention : implicit declaration of function ‘dwarf_ranges_dealloc’

Aah, sure, it should be compiled with libdwarf newer than 20090324.
You can find it in http://reality.sgiweb.org/davea/dwarf.html

BTW, libdwarf and libdw (which is the yet another implementation of
dwarf library) are still under development, e.g. libdwarf doesn't
support gcc-4.4.1(very new) and only the latest libdw(0.142) can
support it. So, perhaps I might better port it on libdw, even that is
less documented...:(

>> TODO
>> ----
>>  - Fix bugs.
>>  - Support multiple probepoints from stdin.
>>  - Better kmodule support.
>>  - Use elfutils-libdw?
>>  - Merge into trace-cmd or perf-tools?
> 
> 
> Yeah definetly, that would be a veeery interesting thing to have.
> I've played with kprobe ftrace to debug something this evening.
> 
> It's very cool to be able to put dynamic tracepoints in desired places.
> 
> But...
> I firstly needed to put random trace_printk() in some places to
> observe some variables values. And then I thought about the kprobes
> tracer and realized I could do that without the need of rebuilding
> my kernel. Then I've played with it and indeed it works well and
> it's useful, but at the cost of reading objdump based assembly
> code to find the places where I could find my variables values.
> And after two or three probes in such conditions, I've become
> tired of that, then I wanted to try this tool.
> 
> 
> While I cannot yet because of this build error, I can imagine
> the power of such facility from perf.
> 
> We could have a perf probe that creates a kprobe event in debugfs
> (default enable = 0) and which then rely on perf record for the actual
> recording.
> 
> Then we could analyse it through perf trace.
> Let's imagine a simple example:
> 
> int foo(int arg1, int arg2)
> {
> 	int var1;
> 
> 	var1 = arg1;
> 	var1 *= arg2;
> 	var1 -= arg1;
> 
> ------> insert a probe here (file bar.c : line 60)
> 
> 	var1 ^= ...
> 
> 	return var1;
> }
> 
> ./perf kprobe --file bar.c:60 --action "arg1=%d","arg2=%d","var1=%d" -- ls -R /

I recommend it should be separated from record, like below:

# set new event
./perf kprobe --add kprobe:event1 --file bar.c:60 --action "arg1=%d","arg2=%d","var1=%d"
# record new event
./perf record -e kprobe:event1 -a -R -- ls -R /

This will allow us to focus on one thing -- convert C to kprobe-tracer.
And also, it can be listed as like as tracepoint events.

> ./perf trace
> 	arg1=1 arg2=1 var1=0
> 	arg1=2 arg2=2 var1=2
> 	etc..
> 
> You may want to sort by field:
> 
> ./perf trace -s arg1 --order desc
>         arg1=1
>           |
>           ------- arg2=1 var=1
>           |
>           ------- arg2=2 var=1
> 
>         arg1=2
>           |
>           ------- arg2=1 var=0
>           |
>           ------- [...]
> 
> ./perf trace -s arg1,arg2 --order asc
>         arg1=1
>           |
>           ------- arg2=1
>                     |
>                     --------- var1=0
>                     |
>                     --------- var1=....
>                   arg2=...
>                     |
> 
> Ok the latter is a bad example because var1 will always have only one
> value for a given arg1 and arg2. But I guess you see the point.
> 
> You won't have to care about the perf trace part, it's already
> implemented and I'll soon handle the sorting part.
> 
> All we need is the perf kprobes that translate a C level
> probing expression to a /debug/tracing/kprobe_events compliant
> thing. And then just call perf record with the new created
> event as an argument.

Indeed, that's what I imagine.

Thank you,

-- 
Masami Hiramatsu

Software Engineer
Hitachi Computer Products (America), Inc.
Software Solutions Division

e-mail: mhiramat@redhat.com


WARNING: multiple messages have this Message-ID (diff)
From: Masami Hiramatsu <mhiramat@redhat.com>
To: Frederic Weisbecker <fweisbec@gmail.com>
Cc: "Ingo Molnar" <mingo@elte.hu>,
	"Steven Rostedt" <rostedt@goodmis.org>,
	lkml <linux-kernel@vger.kernel.org>,
	"Ananth N Mavinakayanahalli" <ananth@in.ibm.com>,
	"Avi Kivity" <avi@redhat.com>, "Andi Kleen" <ak@linux.intel.com>,
	"Christoph Hellwig" <hch@infradead.org>,
	"Frank Ch. Eigler" <fche@redhat.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"Jason Baron" <jbaron@redhat.com>,
	"Jim Keniston" <jkenisto@us.ibm.com>,
	"K.Prasad" <prasad@linux.vnet.ibm.com>,
	"Lai Jiangshan" <laijs@cn.fujitsu.com>,
	"Li Zefan" <lizf@cn.fujitsu.com>,
	PrzemysławPawełczyk <przemyslaw@pawelczyk.it>,
	"Roland McGrath" <roland@redhat.com>,
	"Sam Ravnborg" <sam@ravnborg.org>,
	"Srikar Dronamraju" <srikar@linux.vnet.ibm.com>,
	"Tom Zanussi" <tzanussi@gmail.com>,
	"Vegard Nossum" <vegard.nossum@gmail.com>
Subject: Re: [TOOL] c2kpe: C expression to kprobe event format converter
Date: Mon, 31 Aug 2009 00:14:34 -0400	[thread overview]
Message-ID: <4A9B4E2A.1070201@redhat.com> (raw)
In-Reply-To: <20090830195041.GA6189@nowhere>

Frederic Weisbecker wrote:
> On Thu, Aug 13, 2009 at 04:59:19PM -0400, Masami Hiramatsu wrote:
>> This program converts probe point in C expression to kprobe event
>> format for kprobe-based event tracer. This helps to define kprobes
>> events by C source line number or function name, and local variable
>> name. Currently, this supports only x86(32/64) kernels.
>>
>>
>> Compile
>> --------
>> Before compilation, please install libelf and libdwarf development
>> packages.
>> (e.g. elfutils-libelf-devel and libdwarf-devel on Fedora)
> 
> 
> This may probably need a specific libdwarf version?
> 
> c2kpe.c: In function ‘die_get_entrypc’:
> c2kpe.c:422: erreur: ‘Dwarf_Ranges’ undeclared (first use in this function)
> c2kpe.c:422: erreur: (Each undeclared identifier is reported only once
> c2kpe.c:422: erreur: for each function it appears in.)
> c2kpe.c:422: erreur: ‘ranges’ undeclared (first use in this function)
> c2kpe.c:447: attention : implicit declaration of function ‘dwarf_get_ranges’
> c2kpe.c:451: attention : implicit declaration of function ‘dwarf_ranges_dealloc’

Aah, sure, it should be compiled with libdwarf newer than 20090324.
You can find it in http://reality.sgiweb.org/davea/dwarf.html

BTW, libdwarf and libdw (which is the yet another implementation of
dwarf library) are still under development, e.g. libdwarf doesn't
support gcc-4.4.1(very new) and only the latest libdw(0.142) can
support it. So, perhaps I might better port it on libdw, even that is
less documented...:(

>> TODO
>> ----
>>  - Fix bugs.
>>  - Support multiple probepoints from stdin.
>>  - Better kmodule support.
>>  - Use elfutils-libdw?
>>  - Merge into trace-cmd or perf-tools?
> 
> 
> Yeah definetly, that would be a veeery interesting thing to have.
> I've played with kprobe ftrace to debug something this evening.
> 
> It's very cool to be able to put dynamic tracepoints in desired places.
> 
> But...
> I firstly needed to put random trace_printk() in some places to
> observe some variables values. And then I thought about the kprobes
> tracer and realized I could do that without the need of rebuilding
> my kernel. Then I've played with it and indeed it works well and
> it's useful, but at the cost of reading objdump based assembly
> code to find the places where I could find my variables values.
> And after two or three probes in such conditions, I've become
> tired of that, then I wanted to try this tool.
> 
> 
> While I cannot yet because of this build error, I can imagine
> the power of such facility from perf.
> 
> We could have a perf probe that creates a kprobe event in debugfs
> (default enable = 0) and which then rely on perf record for the actual
> recording.
> 
> Then we could analyse it through perf trace.
> Let's imagine a simple example:
> 
> int foo(int arg1, int arg2)
> {
> 	int var1;
> 
> 	var1 = arg1;
> 	var1 *= arg2;
> 	var1 -= arg1;
> 
> ------> insert a probe here (file bar.c : line 60)
> 
> 	var1 ^= ...
> 
> 	return var1;
> }
> 
> ./perf kprobe --file bar.c:60 --action "arg1=%d","arg2=%d","var1=%d" -- ls -R /

I recommend it should be separated from record, like below:

# set new event
./perf kprobe --add kprobe:event1 --file bar.c:60 --action "arg1=%d","arg2=%d","var1=%d"
# record new event
./perf record -e kprobe:event1 -a -R -- ls -R /

This will allow us to focus on one thing -- convert C to kprobe-tracer.
And also, it can be listed as like as tracepoint events.

> ./perf trace
> 	arg1=1 arg2=1 var1=0
> 	arg1=2 arg2=2 var1=2
> 	etc..
> 
> You may want to sort by field:
> 
> ./perf trace -s arg1 --order desc
>         arg1=1
>           |
>           ------- arg2=1 var=1
>           |
>           ------- arg2=2 var=1
> 
>         arg1=2
>           |
>           ------- arg2=1 var=0
>           |
>           ------- [...]
> 
> ./perf trace -s arg1,arg2 --order asc
>         arg1=1
>           |
>           ------- arg2=1
>                     |
>                     --------- var1=0
>                     |
>                     --------- var1=....
>                   arg2=...
>                     |
> 
> Ok the latter is a bad example because var1 will always have only one
> value for a given arg1 and arg2. But I guess you see the point.
> 
> You won't have to care about the perf trace part, it's already
> implemented and I'll soon handle the sorting part.
> 
> All we need is the perf kprobes that translate a C level
> probing expression to a /debug/tracing/kprobe_events compliant
> thing. And then just call perf record with the new created
> event as an argument.

Indeed, that's what I imagine.

Thank you,

-- 
Masami Hiramatsu

Software Engineer
Hitachi Computer Products (America), Inc.
Software Solutions Division

e-mail: mhiramat@redhat.com

  reply	other threads:[~2009-08-31  4:13 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-13 20:34 [PATCH -tip v14 00/12] tracing: kprobe-based event tracer and x86 instruction decoder Masami Hiramatsu
2009-08-13 20:34 ` Masami Hiramatsu
2009-08-13 20:34 ` [PATCH -tip v14 01/12] x86: instruction decoder API Masami Hiramatsu
2009-08-13 20:34   ` Masami Hiramatsu
2009-08-19 23:42   ` Frederic Weisbecker
2009-08-20  0:21     ` Frederic Weisbecker
2009-08-20 15:03       ` Masami Hiramatsu
2009-08-20 15:03         ` Masami Hiramatsu
2009-08-20 15:25         ` Frederic Weisbecker
2009-08-20 16:16           ` Masami Hiramatsu
2009-08-20 16:16             ` Masami Hiramatsu
2009-08-20 18:07             ` Frederic Weisbecker
2009-08-20 19:01               ` Masami Hiramatsu
2009-08-20 19:01                 ` Masami Hiramatsu
2009-08-20 20:14                 ` Frederic Weisbecker
2009-08-20 14:42     ` Masami Hiramatsu
2009-08-20 14:42       ` Masami Hiramatsu
2009-08-20 14:46       ` Frederic Weisbecker
2009-08-13 20:34 ` [PATCH -tip v14 02/12] x86: x86 instruction decoder build-time selftest Masami Hiramatsu
2009-08-13 20:34   ` Masami Hiramatsu
2009-08-13 20:34 ` [PATCH -tip v14 03/12] kprobes: checks probe address is instruction boudary on x86 Masami Hiramatsu
2009-08-13 20:34   ` Masami Hiramatsu
2009-08-18 23:03   ` Frederic Weisbecker
2009-08-18 23:17     ` Masami Hiramatsu
2009-08-18 23:17       ` Masami Hiramatsu
2009-08-18 23:43       ` Frederic Weisbecker
2009-08-19  0:19         ` Masami Hiramatsu
2009-08-19  0:19           ` Masami Hiramatsu
2009-08-19  0:46           ` Frederic Weisbecker
2009-08-13 20:34 ` [PATCH -tip v14 04/12] kprobes: cleanup fix_riprel() using insn decoder " Masami Hiramatsu
2009-08-13 20:34   ` Masami Hiramatsu
2009-08-13 20:34 ` [PATCH -tip v14 05/12] x86: add pt_regs register and stack access APIs Masami Hiramatsu
2009-08-13 20:34   ` Masami Hiramatsu
2009-08-13 20:34   ` Masami Hiramatsu
2009-08-13 20:34   ` Masami Hiramatsu
2009-08-13 20:34 ` [PATCH -tip v14 06/12] tracing: ftrace dynamic ftrace_event_call support Masami Hiramatsu
2009-08-13 20:34   ` Masami Hiramatsu
2009-08-13 20:35 ` [PATCH -tip v14 07/12] tracing: Introduce TRACE_FIELD_ZERO() macro Masami Hiramatsu
2009-08-13 20:35   ` Masami Hiramatsu
2009-08-19  1:09   ` Frederic Weisbecker
2009-08-19  2:20     ` Masami Hiramatsu
2009-08-19  2:20       ` Masami Hiramatsu
2009-08-19 13:58       ` Frederic Weisbecker
2009-08-13 20:35 ` [PATCH -tip v14 08/12] tracing: add kprobe-based event tracer Masami Hiramatsu
2009-08-13 20:35   ` Masami Hiramatsu
2009-08-19  1:23   ` Frederic Weisbecker
2009-08-13 20:35 ` [PATCH -tip v14 09/12] tracing: Kprobe-tracer supports more than 6 arguments Masami Hiramatsu
2009-08-13 20:35   ` Masami Hiramatsu
2009-08-13 20:35 ` [PATCH -tip v14 10/12] tracing: Generate names for each kprobe event automatically Masami Hiramatsu
2009-08-13 20:35   ` Masami Hiramatsu
2009-08-13 20:35 ` [PATCH -tip v14 11/12] tracing: Kprobe tracer assigns new event ids for each event Masami Hiramatsu
2009-08-13 20:35   ` Masami Hiramatsu
2009-08-13 20:35 ` [PATCH -tip v14 12/12] tracing: Add kprobes event profiling interface Masami Hiramatsu
2009-08-13 20:35   ` Masami Hiramatsu
2009-08-13 20:57 ` [TOOL] kprobestest : Kprobe stress test tool Masami Hiramatsu
2009-08-13 20:57   ` Masami Hiramatsu
2009-08-20 18:43   ` Frederic Weisbecker
2009-08-20 19:45     ` Masami Hiramatsu
2009-08-20 19:45       ` Masami Hiramatsu
2009-08-21  0:01       ` Frederic Weisbecker
2009-08-21  1:00         ` Masami Hiramatsu
2009-08-21  1:00           ` Masami Hiramatsu
2009-08-21 19:43         ` [PATCH tracing/kprobes 1/4] x86: Fix x86 instruction decoder selftest to check only .text Masami Hiramatsu
2009-08-21 19:43           ` Masami Hiramatsu
2009-08-23 19:34           ` Frederic Weisbecker
2009-08-21 19:43         ` [PATCH tracing/kprobes 2/4] x86: Check awk features before generating inat-tables.c Masami Hiramatsu
2009-08-21 19:43           ` Masami Hiramatsu
2009-08-21 19:43         ` [PATCH tracing/kprobes 3/4] tracing/kprobes: Fix format typo in trace_kprobes Masami Hiramatsu
2009-08-21 19:43           ` Masami Hiramatsu
2009-08-21 19:43         ` [PATCH tracing/kprobes 4/4] tracing/kprobes: Change trace_arg to probe_arg Masami Hiramatsu
2009-08-21 19:43           ` Masami Hiramatsu
2009-08-13 20:59 ` [TOOL] c2kpe: C expression to kprobe event format converter Masami Hiramatsu
2009-08-13 20:59   ` Masami Hiramatsu
2009-08-13 21:05   ` Christoph Hellwig
2009-08-13 21:05     ` Christoph Hellwig
2009-08-30 19:50   ` Frederic Weisbecker
2009-08-31  4:14     ` Masami Hiramatsu [this message]
2009-08-31  4:14       ` Masami Hiramatsu
2009-08-31 22:14       ` Frederic Weisbecker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4A9B4E2A.1070201@redhat.com \
    --to=mhiramat@redhat.com \
    --cc=ak@linux.intel.com \
    --cc=ananth@in.ibm.com \
    --cc=avi@redhat.com \
    --cc=dle-develop@lists.sourceforge.net \
    --cc=fche@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=hch@infradead.org \
    --cc=hpa@zytor.com \
    --cc=jbaron@redhat.com \
    --cc=jkenisto@us.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizf@cn.fujitsu.com \
    --cc=mingo@elte.hu \
    --cc=prasad@linux.vnet.ibm.com \
    --cc=przemyslaw@pawelczyk.it \
    --cc=roland@redhat.com \
    --cc=rostedt@goodmis.org \
    --cc=sam@ravnborg.org \
    --cc=srikar@linux.vnet.ibm.com \
    --cc=systemtap@sources.redhat.com \
    --cc=tzanussi@gmail.com \
    --cc=vegard.nossum@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.