From: Avishay Traeger <atraeger@cs.sunysb.edu>
To: "Keshavamurthy, Anil S" <anil.s.keshavamurthy@intel.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
prasanna@in.ibm.com, davem@davemloft.net,
linux-kernel@vger.kernel.org
Subject: Re: KPROBES: Instrumenting a function's call site
Date: Wed, 26 Sep 2007 13:37:08 -0400 [thread overview]
Message-ID: <1190828228.16768.5.camel@localhost> (raw)
In-Reply-To: <20070926172856.GA22038@askeshav-devel.jf.intel.com>
On Wed, 2007-09-26 at 10:28 -0700, Keshavamurthy, Anil S wrote:
> On Wed, Sep 26, 2007 at 10:09:33AM +0530, Ananth N Mavinakayanahalli wrote:
> > On Tue, Sep 25, 2007 at 06:12:38PM -0400, Avishay Traeger wrote:
> > > Hello,
> > > I am trying to use kprobes to measure the latency of a function by
> > > instrumenting its call site. Basically, I find the call instruction,
> > > and insert a kprobe with a pre-handler and post-handler at that point.
> > > The pre-handler measures the latency (reads the TSC counter). The
> > > post-handler measures the latency again, and subtracts the value that
> > > was read in the pre-handler to compute the total latency of the called
> > > function.
> >
> > This sounds ok...
>
> So what you are really measuring is the latency of just that single
> instruction where you have inserted the probe i.e. because your
> pre-handler is called just before the probed instruction is executed and
> your post-handler is called right after you probed instruction is single-stepped.
Exactly - I want to profile that single instance of the call.
> >
> > > So to measure the latency of foo(), I basically want kprobes to do this:
> > > pre_handler();
> > > foo();
> When you insert a probe, you are inserting probe on an instruction boundary
> and not at function level.
> > > post_handler();
>
> Hence the above looks like
>
> pre-handler()
> Probed-instruction; // most likely the first instruction in the foo();
> post-hanlder()
> rest-of-foo()
I see.
> > >
> > > The problem is that the latencies that I am getting are consistently low
> > > (~10,000 cycles). When I manually instrument the functions, the latency
> > > is about 20,000,000 cycles. Clearly something is not right here.
> As I mentioned above what you are seeing is the latency of just the
> probed instruction and hence it is very very low compared to
> the latency of the function foo().
>
> > You could try a a couple of approaches for starters.
> I agree with Ananth, you can try the below approaches
> for your measurements.
>
> >
> > a. As you mention above, a kprobe on the function invocation and the
> > other on the instruction following the call; both need just pre_handlers.
> >
> > b.
> > - Insert a kprobe and a kretprobe on foo()
> > - The kprobe needs to have only a pre_handler that'll measure the latency
> > - A similar handler for the kretprobe handler can measure the latency
> > again and their difference will give you foo()'s latency.
> >
> > <b> though will require you to do some housekeeping in case foo() is
> > reentrant to track which return instance corresponds to which call.
> >
> > Ananth
> >
> > PS: There was a thought of providing a facility to run a handler at
> > function entry even when just a kretprobe is used. Maybe we need to
> > relook at that; it'd have been useful in this case.
Thanks for the clarifications!
Avishay
next prev parent reply other threads:[~2007-09-26 17:37 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-25 22:12 KPROBES: Instrumenting a function's call site Avishay Traeger
2007-09-26 4:39 ` Ananth N Mavinakayanahalli
2007-09-26 9:03 ` Ananth N Mavinakayanahalli
2007-09-26 16:09 ` Avishay Traeger
2007-09-26 17:27 ` Ananth N Mavinakayanahalli
2007-09-26 17:35 ` Avishay Traeger
2007-09-26 16:52 ` Abhishek Sagar
2007-09-26 17:28 ` Keshavamurthy, Anil S
2007-09-26 17:37 ` Avishay Traeger [this message]
2007-11-08 19:42 ` Avishay Traeger
2007-11-12 10:27 ` Ananth N Mavinakayanahalli
2007-09-26 16:37 ` Abhishek Sagar
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=1190828228.16768.5.camel@localhost \
--to=atraeger@cs.sunysb.edu \
--cc=ananth@in.ibm.com \
--cc=anil.s.keshavamurthy@intel.com \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=prasanna@in.ibm.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.