From: sukadev@linux.vnet.ibm.com (Sukadev Bhattiprolu)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] perf: ARM: Record the user-mode PC in the call chain.
Date: Fri, 28 Jun 2013 17:09:51 -0700 [thread overview]
Message-ID: <20130629000951.GA5117@us.ibm.com> (raw)
In-Reply-To: <20130620090728.GA2842@mudshark.cambridge.arm.com>
Will Deacon [will.deacon at arm.com] wrote:
| On Thu, Jun 20, 2013 at 04:17:06AM +0100, Jed Davis wrote:
| > On Tue, Jun 18, 2013 at 02:13:19PM +0100, Will Deacon wrote:
| > > On Fri, Jun 14, 2013 at 12:21:11AM +0100, Jed Davis wrote:
| > > > With this change, we no longer lose the innermost entry in the user-mode
| > > > part of the call chain. See also the x86 port, which includes the ip.
| > > >
| > > > It's possible to partially work around this problem by post-processing
| > > > the data to use the PERF_SAMPLE_IP value, but this works only if the CPU
| > > > wasn't in the kernel when the sample was taken.
| > >
| > > Thanks. I guess we need something similar for arm64 too. Could you cook a
| > > similar patch please?
| >
| > Done (and tested, on the ARM V8 Foundation Model).
|
| Wow, I didn't expect you to test it. Thanks!
|
| > It looked as if the powerpc and sparc ports might have similar issues,
| > but I haven't checked on them yet.
|
| I can extract some hardware from the pile in the corner of my flat if you
| want a hand with testing.
Interesting. Powerpc already saves the next_ip for the first entry:
arch/powerpc/perf/callchain.c:
perf_callchain_user_64():
...
next_ip = perf_instruction_pointer(regs);
lr = regs->link;
sp = regs->gpr[1];
perf_callchain_store(entry, next_ip);
for (;;) {
Do you have a test case/output that I can run on Power ?
We actually have the opposite problem where we see duplication in
callchains like this. We considered not saving the "link register"
but that seems to break for a "leaf-node" functions.
13.65% sprintft libc-2.12.so [.] __random
|
--- __random
|
|--62.82%-- __random
| |
| |--97.31%-- rand
| | do_my_sprintf
| | main
| | generic_start_main
| | __libc_start_main
| | 0x0
| |
| --2.69%-- do_my_sprintf
| main
| generic_start_main
| __libc_start_main
| 0x0
|
--37.18%-- rand
|
|--93.30%-- rand
| do_my_sprintf
| main
| generic_start_main
| __libc_start_main
| 0x0
|
--6.70%-- do_my_sprintf
main
generic_start_main
__libc_start_main
0x0
WARNING: multiple messages have this Message-ID (diff)
From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
To: Will Deacon <will.deacon@arm.com>
Cc: Jed Davis <jld@mozilla.com>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Paul Mackerras <paulus@samba.org>, Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
Russell King <linux@arm.linux.org.uk>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] perf: ARM: Record the user-mode PC in the call chain.
Date: Fri, 28 Jun 2013 17:09:51 -0700 [thread overview]
Message-ID: <20130629000951.GA5117@us.ibm.com> (raw)
In-Reply-To: <20130620090728.GA2842@mudshark.cambridge.arm.com>
Will Deacon [will.deacon@arm.com] wrote:
| On Thu, Jun 20, 2013 at 04:17:06AM +0100, Jed Davis wrote:
| > On Tue, Jun 18, 2013 at 02:13:19PM +0100, Will Deacon wrote:
| > > On Fri, Jun 14, 2013 at 12:21:11AM +0100, Jed Davis wrote:
| > > > With this change, we no longer lose the innermost entry in the user-mode
| > > > part of the call chain. See also the x86 port, which includes the ip.
| > > >
| > > > It's possible to partially work around this problem by post-processing
| > > > the data to use the PERF_SAMPLE_IP value, but this works only if the CPU
| > > > wasn't in the kernel when the sample was taken.
| > >
| > > Thanks. I guess we need something similar for arm64 too. Could you cook a
| > > similar patch please?
| >
| > Done (and tested, on the ARM V8 Foundation Model).
|
| Wow, I didn't expect you to test it. Thanks!
|
| > It looked as if the powerpc and sparc ports might have similar issues,
| > but I haven't checked on them yet.
|
| I can extract some hardware from the pile in the corner of my flat if you
| want a hand with testing.
Interesting. Powerpc already saves the next_ip for the first entry:
arch/powerpc/perf/callchain.c:
perf_callchain_user_64():
...
next_ip = perf_instruction_pointer(regs);
lr = regs->link;
sp = regs->gpr[1];
perf_callchain_store(entry, next_ip);
for (;;) {
Do you have a test case/output that I can run on Power ?
We actually have the opposite problem where we see duplication in
callchains like this. We considered not saving the "link register"
but that seems to break for a "leaf-node" functions.
13.65% sprintft libc-2.12.so [.] __random
|
--- __random
|
|--62.82%-- __random
| |
| |--97.31%-- rand
| | do_my_sprintf
| | main
| | generic_start_main
| | __libc_start_main
| | 0x0
| |
| --2.69%-- do_my_sprintf
| main
| generic_start_main
| __libc_start_main
| 0x0
|
--37.18%-- rand
|
|--93.30%-- rand
| do_my_sprintf
| main
| generic_start_main
| __libc_start_main
| 0x0
|
--6.70%-- do_my_sprintf
main
generic_start_main
__libc_start_main
0x0
next prev parent reply other threads:[~2013-06-29 0:09 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-13 23:21 [PATCH] perf: ARM: Record the user-mode PC in the call chain Jed Davis
2013-06-13 23:21 ` Jed Davis
2013-06-18 13:13 ` Will Deacon
2013-06-18 13:13 ` Will Deacon
2013-06-20 3:17 ` Jed Davis
2013-06-20 3:17 ` Jed Davis
2013-06-20 9:07 ` Will Deacon
2013-06-20 9:07 ` Will Deacon
2013-06-29 0:09 ` Sukadev Bhattiprolu [this message]
2013-06-29 0:09 ` Sukadev Bhattiprolu
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=20130629000951.GA5117@us.ibm.com \
--to=sukadev@linux.vnet.ibm.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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.