From: Naveen N Rao <naveen@kernel.org>
To: Vishal Chourasia <vishalc@linux.ibm.com>
Cc: Andrii Nakryiko <andrii@kernel.org>,
Alexei Starovoitov <ast@kernel.org>,
bpf@vger.kernel.org,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Daniel Borkmann <daniel@iogearbox.net>,
John Fastabend <john.fastabend@gmail.com>,
Jiri Olsa <jolsa@kernel.org>,
linuxppc-dev@lists.ozlabs.org,
linux-trace-kernel@vger.kernel.org,
Mark Rutland <mark.rutland@arm.com>,
Masahiro Yamada <masahiroy@kernel.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Nicholas Piggin <npiggin@gmail.com>,
Steven Rostedt <rostedt@goodmis.org>, Song Liu <song@kernel.org>
Subject: Re: [RFC PATCH v3 00/11] powerpc: Add support for ftrace direct and BPF trampolines
Date: Sun, 14 Jul 2024 13:22:49 +0530 [thread overview]
Message-ID: <1720942451.kwuygmxy1r.naveen@kernel.org> (raw)
In-Reply-To: <ZoUx37C0bXB66MNG@linux.ibm.com>
Hi Vishal,
Vishal Chourasia wrote:
> On Fri, Jun 21, 2024 at 12:24:03AM +0530, Naveen N Rao wrote:
>> This is v3 of the patches posted here:
>> http://lkml.kernel.org/r/cover.1718008093.git.naveen@kernel.org
>>
>> Since v2, I have addressed review comments from Steven and Masahiro
>> along with a few fixes. Patches 7-11 are new in this series and add
>> support for ftrace direct and bpf trampolines.
>>
>> This series depends on the patch series from Benjamin Gray adding
>> support for patch_ulong():
>> http://lkml.kernel.org/r/20240515024445.236364-1-bgray@linux.ibm.com
>>
>>
>> - Naveen
>
> Hello Naveen,
>
> I've noticed an issue with `kstack()` in bpftrace [1] when using `kfunc`
> compared to `kprobe`. Despite trying all three modes specified in the
> documentation (bpftrace, perf, or raw), the stack isn't unwinding
> properly with `kfunc`.
>
> [1] https://github.com/bpftrace/bpftrace/blob/master/man/adoc/bpftrace.adoc#kstack
>
>
> for mode in modes; do
> run bpftrace with kfunc
> disable cpu
> kill bpftrace
> run bpftrace with kprobe
> enable cpu
> kill bpftrace
>
> # ./kprobe_vs_kfunc.sh
> + bpftrace -e 'kfunc:vmlinux:build_sched_domains {@[kstack(bpftrace), comm, tid]=count();}'
> Attaching 1 probe...
> + chcpu -d 2-3
> CPU 2 disabled
> CPU 3 disabled
> + kill 35214
>
> @[
> bpf_prog_cfd8d6c8bb4898ce+972
> , cpuhp/2, 33]: 1
> @[
> bpf_prog_cfd8d6c8bb4898ce+972
> , cpuhp/3, 38]: 1
Yeah, this is because we don't capture the full register state with bpf
trampolines unlike with kprobes. BPF stackmap relies on
perf_arch_fetch_caller_regs() to create a dummy pt_regs for use by
get_perf_callchain(). We end up with a NULL LR, and bpftrace (and most
other userspace tools) stop showing the backtrace when they encounter a
NULL entry. I recall fixing some tools to continue to show backtrace
inspite of a NULL entry, but I may be mis-remembering.
Perhaps we should fix/change how the perf callchain is captured in the
kernel. We filter out invalid entries, and capture an additional entry
for perf since we can't be sure of our return address. We should revisit
this and see if we can align with the usual expectations of a callchain
not having a NULL entry. Something like this may help, but this needs
more testing especially on the perf side:
diff --git a/arch/powerpc/perf/callchain.c b/arch/powerpc/perf/callchain.c
index 6b4434dd0ff3..9f67b764da92 100644
--- a/arch/powerpc/perf/callchain.c
+++ b/arch/powerpc/perf/callchain.c
@@ -83,12 +83,12 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *re
* We can't tell which of the first two addresses
* we get are valid, but we can filter out the
* obviously bogus ones here. We replace them
- * with 0 rather than removing them entirely so
+ * with -1 rather than removing them entirely so
* that userspace can tell which is which.
*/
if ((level == 1 && next_ip == lr) ||
(level <= 1 && !kernel_text_address(next_ip)))
- next_ip = 0;
+ next_ip = -1;
++level;
}
- Naveen
prev parent reply other threads:[~2024-07-14 8:00 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-20 18:54 [RFC PATCH v3 00/11] powerpc: Add support for ftrace direct and BPF trampolines Naveen N Rao
2024-06-20 18:54 ` [RFC PATCH v3 01/11] powerpc/kprobes: Use ftrace to determine if a probe is at function entry Naveen N Rao
2024-07-01 8:40 ` Nicholas Piggin
2024-07-01 18:18 ` Naveen N Rao
2024-06-20 18:54 ` [RFC PATCH v3 02/11] powerpc/ftrace: Unify 32-bit and 64-bit ftrace entry code Naveen N Rao
2024-07-01 8:57 ` Nicholas Piggin
2024-07-01 18:34 ` Naveen N Rao
2024-06-20 18:54 ` [RFC PATCH v3 03/11] powerpc/module_64: Convert #ifdef to IS_ENABLED() Naveen N Rao
2024-07-01 9:01 ` Nicholas Piggin
2024-06-20 18:54 ` [RFC PATCH v3 04/11] powerpc/ftrace: Remove pointer to struct module from dyn_arch_ftrace Naveen N Rao
2024-07-01 9:27 ` Nicholas Piggin
2024-07-01 18:51 ` Naveen N Rao
2024-06-20 18:54 ` [RFC PATCH v3 05/11] kbuild: Add generic hook for architectures to use before the final vmlinux link Naveen N Rao
2024-07-01 9:30 ` Nicholas Piggin
2024-06-20 18:54 ` [RFC PATCH v3 06/11] powerpc64/ftrace: Move ftrace sequence out of line Naveen N Rao
2024-07-01 10:39 ` Nicholas Piggin
2024-07-01 19:44 ` Naveen N Rao
2024-06-20 18:54 ` [RFC PATCH v3 07/11] powerpc/ftrace: Add support for DYNAMIC_FTRACE_WITH_CALL_OPS Naveen N Rao
2024-06-20 18:54 ` [RFC PATCH v3 08/11] powerpc/ftrace: Add support for DYNAMIC_FTRACE_WITH_DIRECT_CALLS Naveen N Rao
2024-06-20 18:54 ` [RFC PATCH v3 09/11] samples/ftrace: Add support for ftrace direct samples on powerpc Naveen N Rao
2024-06-20 19:09 ` [RFC PATCH v3 10/11] powerpc64/bpf: Fold bpf_jit_emit_func_call_hlp() into bpf_jit_emit_func_call_rel() Naveen N Rao
2024-06-20 19:09 ` [RFC PATCH v3 11/11] powerpc64/bpf: Add support for bpf trampolines Naveen N Rao
2024-07-01 11:03 ` Nicholas Piggin
2024-07-01 19:58 ` Naveen N Rao
2024-06-24 11:59 ` [RFC PATCH v3 00/11] powerpc: Add support for ftrace direct and BPF trampolines Vishal Chourasia
2024-07-03 11:11 ` Vishal Chourasia
2024-07-14 7:52 ` Naveen N Rao [this message]
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=1720942451.kwuygmxy1r.naveen@kernel.org \
--to=naveen@kernel.org \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=christophe.leroy@csgroup.eu \
--cc=daniel@iogearbox.net \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mark.rutland@arm.com \
--cc=masahiroy@kernel.org \
--cc=mhiramat@kernel.org \
--cc=npiggin@gmail.com \
--cc=rostedt@goodmis.org \
--cc=song@kernel.org \
--cc=vishalc@linux.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 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).