From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 2/2] arm64: perf: Fix callchain parse error with kernel tracepoint events
Date: Fri, 8 May 2015 16:37:58 +0100 [thread overview]
Message-ID: <20150508153758.GG25587@arm.com> (raw)
In-Reply-To: <1431063784-137600-3-git-send-email-houpengyang@huawei.com>
On Fri, May 08, 2015 at 06:43:04AM +0100, Hou Pengyang wrote:
> For ARM64, when tracing with tracepoint events, the IP and pstate are set
> to 0, preventing the perf code parsing the callchain and resolving the
> symbols correctly.
>
> ./perf record -e sched:sched_switch -g --call-graph dwarf ls
> [ perf record: Captured and wrote 0.146 MB perf.data ]
> ./perf report -f
> Samples: 194 of event 'sched:sched_switch', Event count (approx.): 194
> Children Self Command Shared Object Symbol
> 100.00% 100.00% ls [unknown] [.] 0000000000000000
>
> The fix is to implement perf_arch_fetch_caller_regs for ARM64, which fills
> several necessary registers used for callchain unwinding, including pc,sp,
> fp and spsr .
>
> With this patch, callchain can be parsed correctly as follows:
>
> ......
> + 2.63% 0.00% ls [kernel.kallsyms] [k] vfs_symlink
> + 2.63% 0.00% ls [kernel.kallsyms] [k] follow_down
> + 2.63% 0.00% ls [kernel.kallsyms] [k] pfkey_get
> + 2.63% 0.00% ls [kernel.kallsyms] [k] do_execveat_common.isra.33
> - 2.63% 0.00% ls [kernel.kallsyms] [k] pfkey_send_policy_notify
> pfkey_send_policy_notify
> pfkey_get
> v9fs_vfs_rename
> page_follow_link_light
> link_path_walk
> el0_svc_naked
> .......
>
> Signed-off-by: Hou Pengyang <houpengyang@huawei.com>
> ---
> arch/arm64/include/asm/perf_event.h | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/arch/arm64/include/asm/perf_event.h b/arch/arm64/include/asm/perf_event.h
> index d26d1d5..6471773 100644
> --- a/arch/arm64/include/asm/perf_event.h
> +++ b/arch/arm64/include/asm/perf_event.h
> @@ -24,4 +24,11 @@ extern unsigned long perf_misc_flags(struct pt_regs *regs);
> #define perf_misc_flags(regs) perf_misc_flags(regs)
> #endif
>
> +#define perf_arch_fetch_caller_regs(regs, __ip) { \
> + (regs)->pc = (__ip); \
> + (regs)->regs[AARCH64_INSN_REG_FP] = (unsigned long) __builtin_frame_address(0); \
Just a minor thing, but I'd rather we explicitly used '29' as the index
here. The AARCH64_INSN_REG_FP is really for the instruction generation
code used by BPF and I think it's better to be explicit about the register
number here.
Anyway, I've queued your arch/arm/ patch and Catalin can take this one
for 4.2 once you've made the small change above and added my Ack.
Thanks,
Will
WARNING: multiple messages have this Message-ID (diff)
From: Will Deacon <will.deacon@arm.com>
To: Hou Pengyang <houpengyang@huawei.com>
Cc: "a.p.zijlstra@chello.nl" <a.p.zijlstra@chello.nl>,
"paulus@samba.org" <paulus@samba.org>,
"acme@kernel.org" <acme@kernel.org>,
"mingo@redhat.com" <mingo@redhat.com>,
Catalin Marinas <Catalin.Marinas@arm.com>,
"wannan0@huawei.com" <wannan0@huawei.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v4 2/2] arm64: perf: Fix callchain parse error with kernel tracepoint events
Date: Fri, 8 May 2015 16:37:58 +0100 [thread overview]
Message-ID: <20150508153758.GG25587@arm.com> (raw)
In-Reply-To: <1431063784-137600-3-git-send-email-houpengyang@huawei.com>
On Fri, May 08, 2015 at 06:43:04AM +0100, Hou Pengyang wrote:
> For ARM64, when tracing with tracepoint events, the IP and pstate are set
> to 0, preventing the perf code parsing the callchain and resolving the
> symbols correctly.
>
> ./perf record -e sched:sched_switch -g --call-graph dwarf ls
> [ perf record: Captured and wrote 0.146 MB perf.data ]
> ./perf report -f
> Samples: 194 of event 'sched:sched_switch', Event count (approx.): 194
> Children Self Command Shared Object Symbol
> 100.00% 100.00% ls [unknown] [.] 0000000000000000
>
> The fix is to implement perf_arch_fetch_caller_regs for ARM64, which fills
> several necessary registers used for callchain unwinding, including pc,sp,
> fp and spsr .
>
> With this patch, callchain can be parsed correctly as follows:
>
> ......
> + 2.63% 0.00% ls [kernel.kallsyms] [k] vfs_symlink
> + 2.63% 0.00% ls [kernel.kallsyms] [k] follow_down
> + 2.63% 0.00% ls [kernel.kallsyms] [k] pfkey_get
> + 2.63% 0.00% ls [kernel.kallsyms] [k] do_execveat_common.isra.33
> - 2.63% 0.00% ls [kernel.kallsyms] [k] pfkey_send_policy_notify
> pfkey_send_policy_notify
> pfkey_get
> v9fs_vfs_rename
> page_follow_link_light
> link_path_walk
> el0_svc_naked
> .......
>
> Signed-off-by: Hou Pengyang <houpengyang@huawei.com>
> ---
> arch/arm64/include/asm/perf_event.h | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/arch/arm64/include/asm/perf_event.h b/arch/arm64/include/asm/perf_event.h
> index d26d1d5..6471773 100644
> --- a/arch/arm64/include/asm/perf_event.h
> +++ b/arch/arm64/include/asm/perf_event.h
> @@ -24,4 +24,11 @@ extern unsigned long perf_misc_flags(struct pt_regs *regs);
> #define perf_misc_flags(regs) perf_misc_flags(regs)
> #endif
>
> +#define perf_arch_fetch_caller_regs(regs, __ip) { \
> + (regs)->pc = (__ip); \
> + (regs)->regs[AARCH64_INSN_REG_FP] = (unsigned long) __builtin_frame_address(0); \
Just a minor thing, but I'd rather we explicitly used '29' as the index
here. The AARCH64_INSN_REG_FP is really for the instruction generation
code used by BPF and I think it's better to be explicit about the register
number here.
Anyway, I've queued your arch/arm/ patch and Catalin can take this one
for 4.2 once you've made the small change above and added my Ack.
Thanks,
Will
next prev parent reply other threads:[~2015-05-08 15:37 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-08 5:43 [PATCH v4 0/2] arm & arm64: perf: Fix callchain parse error with kernel tracepoint events Hou Pengyang
2015-05-08 5:43 ` Hou Pengyang
2015-05-08 5:43 ` [PATCH v4 1/2] arm: " Hou Pengyang
2015-05-08 5:43 ` Hou Pengyang
2015-05-08 5:43 ` [PATCH v4 2/2] arm64: " Hou Pengyang
2015-05-08 5:43 ` Hou Pengyang
2015-05-08 15:37 ` Will Deacon [this message]
2015-05-08 15:37 ` Will Deacon
2015-05-10 11:07 ` [PATCH v5] " Hou Pengyang
2015-05-10 11:07 ` Hou Pengyang
2015-05-19 16:52 ` Catalin Marinas
2015-05-19 16:52 ` Catalin Marinas
2015-05-20 6:53 ` Jean Pihet
2015-05-20 6:53 ` Jean Pihet
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=20150508153758.GG25587@arm.com \
--to=will.deacon@arm.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.