From: Ingo Molnar <mingo@elte.hu>
To: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>,
Peter Zijlstra <peterz@infradead.org>,
Jason Baron <jbaron@redhat.com>,
Steven Rostedt <srostedt@redhat.com>,
lkml <linux-kernel@vger.kernel.org>
Subject: Re: [rfd] function-graph augmentation
Date: Fri, 20 Feb 2009 15:17:07 +0100 [thread overview]
Message-ID: <20090220141707.GA15915@elte.hu> (raw)
In-Reply-To: <20090220140403.GC16897@ghostprotocols.net>
* Arnaldo Carvalho de Melo <acme@redhat.com> wrote:
> Em Fri, Feb 20, 2009 at 10:30:11AM -0300, Arnaldo Carvalho de Melo escreveu:
> > Em Fri, Feb 20, 2009 at 09:56:27AM +0100, Ingo Molnar escreveu:
> > > 2)
> > >
> > > Another, entirely different, and i think complementary approach,
> > > which exciting new possibilities would be to (also)
> > > automatically pick up arguments from the stack, on function
> > > entry.
> > >
> > > If there's a (read-mostly, lockless-to-read and scalable)
> > > function attributes hash, then we could encode the parameters
> > > signature of functions (or at least, of certain functions) in
> > > the attributes hash. Then the tracer will know how many
> > > arguments to pick up from the stack.
> > >
> > > This approach has the advantage that we could reconstruct the
> > > parameters of _arbitrary_ functions, without having to touch
> > > those functions. We already enumerate all functions during build
> > > time, it would take some more dwarf2 magic to recover the
> > > call/parameter signature. Oh, and at that time we could also
> > > record the _return type_ - easing the return value.
> > >
> > > Note that it does not take a full, bloated DEBUG_INFO build - we
> > > can build a -g object to get the dwarf2 data and then strip out
> > > the dwarf2 data.
> > >
> > > Arnaldo, what do you think about this, how feasible would it be
> > > to put dwarf2 magic into scripts/recordmcount.pl?
> >
> > /me reading scripts/recordmcount.pl...
>
> So you want to:
>
> 1. build object with -g
> 2. just after it is built, get what we want from the DWARF sections,
> then strip it, stash what we collected
> 3. what we want is:
> - parameter names
> - _where_ each parameter is (DWARF location expressions)
> - type signature (CTF like stuff)
> 4. allow users to ask for parameters (all? just some?) for certain functions
> to be collected at function entry
> 5. at function entry check if parameters should be collected, go over
> each parameter DWARF location expression and collect the values,
> encoding them into the ring buffer
> 6. at cat /d/tracing/trace time pretty print the parameters collected,
> i.e. name=value-formatting-according-to-its-type
yeah.
> Ok, base types are easy, enums are easy, what about structs? forget
> about them and just print the pointer? i.e.:
>
> _spin_lock(.lock=0xabcdef)
yeah.
> versus:
>
> _spin_lock(.lock={.raw_lock={.slock=0}})
>
> All members should be collected? Just some? User decides?
I think we should concentrate on the simplest, most obvious use,
and iterate from there, gradually.
There's a lot of unknowns here - how reliable is the dwarf2 data
in practice: we _really_ dont want to trust dwarf2 data by
default becaus it can crash the kernel - so it's best to put it
in some trusted format controlled by us - just like recordmcount
works as a post-processor.
So if we have something simple and obvious and robust to start
from we'll know a lot more once we started using it.
Ingo
next prev parent reply other threads:[~2009-02-20 14:17 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-19 21:01 Peter Zijlstra
2009-02-19 21:28 ` Frederic Weisbecker
2009-02-19 21:38 ` Frederic Weisbecker
2009-02-20 8:56 ` Ingo Molnar
2009-02-20 13:30 ` Arnaldo Carvalho de Melo
2009-02-20 14:04 ` Arnaldo Carvalho de Melo
2009-02-20 14:17 ` Ingo Molnar [this message]
2009-02-20 14:18 ` Peter Zijlstra
2009-02-20 14:32 ` Arnaldo Carvalho de Melo
2009-02-20 14:36 ` Frederic Weisbecker
2009-02-20 8:39 ` Ingo Molnar
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=20090220141707.GA15915@elte.hu \
--to=mingo@elte.hu \
--cc=acme@redhat.com \
--cc=fweisbec@gmail.com \
--cc=jbaron@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=srostedt@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome