LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>, linux-kernel@vger.kernel.org
Subject: Re: [RFC][PATCH] Make ftrace able to trace function return
Date: Thu, 30 Oct 2008 19:20:56 +0100 [thread overview]
Message-ID: <20081030182056.GA14102@elte.hu> (raw)
In-Reply-To: <490A08E3.2040201@gmail.com>
* Frederic Weisbecker <fweisbec@gmail.com> wrote:
> Hi.
>
> First of all, I want to say this patch is absolutely not ready for
> inclusion. Some parts are really ugly and the thing is only
> partially functionning.
>
> It's just an idea or a kind of proof of concept. I just wanted to
> make ftrace able to measure the time of execution of a function. For
> that I had to hook both the function call and its return.
>
> By using mcount, we can hook the function on enter and we can
> override its return address. So we can catch the time at those two
> points. The problem comes when a function run concurrently through
> preemption or smp. We can measure the return time but how to be sure
> which time capture we had on call since this time could have been
> captured multiple times. And for the same reason, how to make sure
> of the return address.
>
> So the idea is to allocate a general set of slots on which we can
> save our original return address and the call time. After that we
> change the return address of the hooked function to jump on a
> trampoline which will push the offset for us to retrieve the slot on
> the set for this function call. Then the trampoline will call a
> return handler that will trace the return time and send all of these
> informations to a specific tracer. And then the return handler will
> return to the original return address.
>
> To determine quickly which slot is free, I use a bitmap of 32 bits.
> Perhaps it is a bad assumption but I could enlarge it and there is
> an overrun counter. This is the only point which needs to be
> protected against concurrent access.
>
> I made a tracer for this but the problem is that the capture by
> ftrace will hang the system if we can use several slots. When I
> dedicate only one free slot, wherever on the set, there is no
> problem but I miss a lot of calls. So by default on this patch,
> there is only one slot dedicated on the bitmap.
>
> Don't hesitate to comment this patch made of trashes...
hm, are you aware of the -finstrument-functions feature of GCC?
that feature generates such entry points at build time:
void __cyg_profile_func_enter (void *this_fn,
void *call_site);
void __cyg_profile_func_exit (void *this_fn,
void *call_site);
this might be faster/cleaner than using a trampoline approach IMO.
OTOH, entry+exit profiling has about double the cost of just entry
profiling - so maybe there should be some runtime flexibility there.
Plus the same recordmcount trick should be used to patch up these
entry points to NOP by default.
Ingo
next prev parent reply other threads:[~2008-10-30 18:21 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-30 19:20 Frederic Weisbecker
2008-10-30 18:20 ` Ingo Molnar [this message]
2008-10-30 18:30 ` Frédéric Weisbecker
2008-10-30 18:37 ` Ingo Molnar
2008-10-30 19:17 ` Steven Rostedt
2008-10-30 19:26 ` Ingo Molnar
2008-11-03 11:16 ` Ananth N Mavinakayanahalli
2008-11-03 13:32 ` Frédéric Weisbecker
2008-10-31 1:35 ` Frédéric Weisbecker
2008-10-30 20:30 ` Steven Rostedt
2008-10-31 0:05 ` Frédéric Weisbecker
2008-10-31 2:43 ` Steven Rostedt
2008-10-31 20:18 ` Frederic Weisbecker
2008-11-03 10:06 ` Ingo Molnar
2008-11-03 13:11 ` Frédéric 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=20081030182056.GA14102@elte.hu \
--to=mingo@elte.hu \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rostedt@goodmis.org \
--subject='Re: [RFC][PATCH] Make ftrace able to trace function return' \
/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
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).