From: Steven Rostedt <rostedt@goodmis.org>
To: David Daney <ddaney@caviumnetworks.com>
Cc: Wu Zhangjin <wuzhangjin@gmail.com>,
linux-kernel@vger.kernel.org, linux-mips@linux-mips.org,
Thomas Gleixner <tglx@linutronix.de>,
Ralf Baechle <ralf@linux-mips.org>,
Nicholas Mc Guire <der.herr@hofr.at>
Subject: Re: [PATCH -v4 9/9] tracing: add function graph tracer support for MIPS
Date: Wed, 21 Oct 2009 14:09:22 -0400 [thread overview]
Message-ID: <1256148562.18347.3264.camel@gandalf.stny.rr.com> (raw)
In-Reply-To: <4ADF4982.9010306@caviumnetworks.com>
On Wed, 2009-10-21 at 10:48 -0700, David Daney wrote:
> Although I am quite interested in ftrace for MIPS, I a haven't spent the
> effort to try to figure out how many levels of backtrace we need to be
> generating here.
>
> If you only need the caller's address, that is passed in register 'at'.
> If you need more than that, then things get tricky. I would do one of
> two things:
Ftrace function tracer only needs the address passed in by AT. That
output looks like this (run on x86):
# tracer: function
#
# TASK-PID CPU# TIMESTAMP FUNCTION
# | | | | |
<idle>-0 [000] 140973.465592: mwait_idle <-cpu_idle
<idle>-0 [000] 140973.465592: need_resched <-mwait_idle
<idle>-0 [000] 140973.465593: test_ti_thread_flag <-need_resched
<idle>-0 [000] 140973.465593: T.389 <-mwait_idle
<idle>-0 [000] 140973.465594: need_resched <-mwait_idle
<idle>-0 [000] 140973.465594: test_ti_thread_flag <-need_resched
<idle>-0 [000] 140973.465594: trace_power_end <-mwait_idle
<idle>-0 [000] 140973.465595: test_ti_thread_flag <-cpu_idle
<idle>-0 [000] 140973.465595: enter_idle <-cpu_idle
<idle>-0 [000] 140973.465596: mwait_idle <-cpu_idle
<idle>-0 [000] 140973.465596: need_resched <-mwait_idle
<idle>-0 [000] 140973.465596: test_ti_thread_flag <-need_resched
<idle>-0 [000] 140973.465597: T.389 <-mwait_idle
Which is very useful to have. But what we are trying to get is the
function graph tracer working. This is based off of ftrace's function
tracer. But it does a trick with the return address. Instead of just
reading it, it modifies it to call a hook (note kprobes does the same
thing). We replace the return address with a function that will also
trace the exit of the function. With this, we get a much nicer looking
trace, and also can record the time it took to execute the function
(note, graph tracing has overhead that skews this time).
Here's an example (again on x86):
# tracer: function_graph
#
# CPU DURATION FUNCTION CALLS
# | | | | | | |
0) 0.535 us | find_vma();
0) | handle_mm_fault() {
0) | count_vm_event() {
0) 0.333 us | test_ti_thread_flag();
0) 1.029 us | }
0) 0.336 us | pud_alloc();
0) 0.333 us | pmd_alloc();
0) 0.389 us | _spin_lock();
0) | do_wp_page() {
0) 0.322 us | vm_normal_page();
0) 0.329 us | reuse_swap_page();
0) | unlock_page() {
0) | wake_up_page() {
0) 0.352 us | page_waitqueue();
0) 0.442 us | __wake_up_bit();
0) 1.790 us | }
0) 2.444 us | }
0) | _spin_unlock() {
0) 0.371 us | T.272();
0) 1.089 us | }
>
> 1) Use the mechanism used by the OOPS dump.
>
> 2) Implement back traces based on DWARF2 unwinding data that is
> generated by the compiler.
We're not doing back traces. We need to modify the return of the
function being called. Note, the above functions that end with ";" are
leaf functions. Non leaf functions show "{" and end with "}".
The trick here is to find a reliable way to modify the return address.
Thanks,
-- Steve
next prev parent reply other threads:[~2009-10-21 18:09 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cover.1256135456.git.wuzhangjin@gmail.com>
2009-10-21 14:34 ` [PATCH -v4 1/9] tracing: convert trace_clock_local() as weak function Wu Zhangjin
2009-10-21 14:34 ` [PATCH -v4 2/9] MIPS: add mips_timecounter_read() to get high precision timestamp Wu Zhangjin
2009-10-22 13:03 ` pajko
2009-10-21 14:34 ` [PATCH -v4 3/9] tracing: add MIPS specific trace_clock_local() Wu Zhangjin
2009-10-21 14:46 ` Steven Rostedt
2009-10-21 15:11 ` Wu Zhangjin
2009-10-21 14:34 ` [PATCH -v4 4/9] tracing: add static function tracer support for MIPS Wu Zhangjin
2009-10-21 15:24 ` Steven Rostedt
2009-10-22 17:47 ` Wu Zhangjin
2009-10-22 17:59 ` Steven Rostedt
2009-10-22 18:34 ` Wu Zhangjin
2009-10-22 18:34 ` David Daney
2009-10-22 19:13 ` Wu Zhangjin
2009-10-22 20:30 ` Adam Nemet
2009-10-22 20:52 ` Steven Rostedt
2009-10-22 21:09 ` Frederic Weisbecker
2009-10-22 21:29 ` Adam Nemet
2009-10-22 21:55 ` Steven Rostedt
2009-10-23 1:09 ` Wu Zhangjin
2009-10-22 22:17 ` Richard Sandiford
2009-10-23 9:32 ` Wu Zhangjin
2009-10-23 22:48 ` [PATCH] MIPS: Add option to pass return address location to _mcount. Was: " David Daney
2009-10-24 9:12 ` Richard Sandiford
2009-10-24 15:53 ` Wu Zhangjin
2009-10-23 7:21 ` Wu Zhangjin
2009-10-21 14:34 ` [PATCH -v4 5/9] tracing: enable HAVE_FUNCTION_TRACE_MCOUNT_TEST " Wu Zhangjin
2009-10-21 14:35 ` [PATCH -v4 6/9] tracing: add an endian argument to scripts/recordmcount.pl Wu Zhangjin
2009-10-21 15:26 ` Steven Rostedt
2009-10-21 14:35 ` [PATCH -v4 7/9] tracing: add dynamic function tracer support for MIPS Wu Zhangjin
2009-10-21 14:35 ` [PATCH -v4 8/9] tracing: not trace mips_timecounter_init() in MIPS Wu Zhangjin
2009-10-21 14:35 ` [PATCH -v4 9/9] tracing: add function graph tracer support for MIPS Wu Zhangjin
2009-10-21 15:21 ` Wu Zhangjin
2009-10-21 16:14 ` Steven Rostedt
2009-10-21 16:12 ` Steven Rostedt
2009-10-21 16:37 ` David Daney
2009-10-21 16:46 ` Steven Rostedt
2009-10-21 17:07 ` David Daney
2009-10-21 17:23 ` Steven Rostedt
2009-10-21 17:48 ` David Daney
2009-10-21 18:09 ` Steven Rostedt [this message]
2009-10-21 18:17 ` Nicholas Mc Guire
2009-10-21 18:34 ` Steven Rostedt
2009-10-21 18:25 ` David Daney
2009-10-22 11:38 ` Wu Zhangjin
2009-10-22 13:17 ` Steven Rostedt
2009-10-22 13:31 ` Wu Zhangjin
2009-10-22 15:20 ` Steven Rostedt
2009-10-22 15:59 ` David Daney
2009-10-22 16:11 ` Steven Rostedt
2009-10-22 16:16 ` David Daney
2009-10-22 18:00 ` Steven Rostedt
2009-10-22 17:39 ` Wu Zhangjin
2009-10-22 17:58 ` Steven Rostedt
2009-10-22 11:37 ` pajko
2009-10-25 10:48 ` Wu Zhangjin
2009-10-25 13:37 ` Patrik Kluba
2009-10-25 14:22 ` Wu Zhangjin
2009-10-25 15:55 ` Richard Sandiford
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=1256148562.18347.3264.camel@gandalf.stny.rr.com \
--to=rostedt@goodmis.org \
--cc=ddaney@caviumnetworks.com \
--cc=der.herr@hofr.at \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=ralf@linux-mips.org \
--cc=tglx@linutronix.de \
--cc=wuzhangjin@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®