From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: kernel-ci@meta.com, bot+bpf-ci@kernel.org, andrii@kernel.org,
daniel@iogearbox.net, martin.lau@linux.dev,
bpf <bpf@vger.kernel.org>, Jiri Olsa <jolsa@kernel.org>
Subject: Re: [PATCH v14 00/19] tracing: fprobe: function_graph: Multi-function graph and fprobe on fgraph
Date: Fri, 13 Sep 2024 17:59:35 +0900 [thread overview]
Message-ID: <20240913175935.bb0892ab1e6052efc12c6423@kernel.org> (raw)
In-Reply-To: <CAEf4BzZEoNHgcLDPTPQ=yyQTZtEZoVrGbBbeTf3vqe_wcpS6EA@mail.gmail.com>
On Thu, 12 Sep 2024 18:55:40 -0700
Andrii Nakryiko <andrii.nakryiko@gmail.com> wrote:
> On Thu, Sep 12, 2024 at 4:54 PM Masami Hiramatsu <mhiramat@kernel.org> wrote:
> >
> > On Thu, 12 Sep 2024 11:41:17 -0700
> > Andrii Nakryiko <andrii.nakryiko@gmail.com> wrote:
> >
> > > + BPF ML
> > >
> > > On Thu, Sep 12, 2024 at 8:35 AM <bot+bpf-ci@kernel.org> wrote:
> > > >
> > > > Dear patch submitter,
> > > >
> > > > CI has tested the following submission:
> > > > Status: FAILURE
> > > > Name: [v14,00/19] tracing: fprobe: function_graph: Multi-function graph and fprobe on fgraph
> > > > Patchwork: https://patchwork.kernel.org/project/netdevbpf/list/?series=889822&state=*
> > > > Matrix: https://github.com/kernel-patches/bpf/actions/runs/10833792984
> > > >
> > > > Failed jobs:
> > > > test_progs-aarch64-gcc: https://github.com/kernel-patches/bpf/actions/runs/10833792984/job/30061791397
> > > > test_progs_no_alu32-aarch64-gcc: https://github.com/kernel-patches/bpf/actions/runs/10833792984/job/30061791836
> > > > test_progs-s390x-gcc: https://github.com/kernel-patches/bpf/actions/runs/10833792984/job/30061757062
> > > > test_progs_no_alu32-s390x-gcc: https://github.com/kernel-patches/bpf/actions/runs/10833792984/job/30061757809
> > > >
> > > > First test_progs failure (test_progs-aarch64-gcc):
> > > > #132 kprobe_multi_testmod_test
> > > > serial_test_kprobe_multi_testmod_test:PASS:load_kallsyms_local 0 nsec
> > > > #132/1 kprobe_multi_testmod_test/testmod_attach_api_syms
> > > > test_testmod_attach_api:PASS:fentry_raw_skel_load 0 nsec
> > > > trigger_module_test_read:PASS:testmod_file_open 0 nsec
> > > > test_testmod_attach_api:PASS:trigger_read 0 nsec
> > > > kprobe_multi_testmod_check:FAIL:kprobe_test1_result unexpected kprobe_test1_result: actual 0 != expected 1
> > > > kprobe_multi_testmod_check:FAIL:kprobe_test2_result unexpected kprobe_test2_result: actual 0 != expected 1
> > > > kprobe_multi_testmod_check:FAIL:kprobe_test3_result unexpected kprobe_test3_result: actual 0 != expected 1
> > > > kprobe_multi_testmod_check:FAIL:kretprobe_test1_result unexpected kretprobe_test1_result: actual 0 != expected 1
> > > > kprobe_multi_testmod_check:FAIL:kretprobe_test2_result unexpected kretprobe_test2_result: actual 0 != expected 1
> > > > kprobe_multi_testmod_check:FAIL:kretprobe_test3_result unexpected kretprobe_test3_result: actual 0 != expected 1
> > > > #132/2 kprobe_multi_testmod_test/testmod_attach_api_addrs
> > > > test_testmod_attach_api_addrs:PASS:ksym_get_addr_local 0 nsec
> > > > test_testmod_attach_api_addrs:PASS:ksym_get_addr_local 0 nsec
> > > > test_testmod_attach_api_addrs:PASS:ksym_get_addr_local 0 nsec
> > > > test_testmod_attach_api:PASS:fentry_raw_skel_load 0 nsec
> > > > trigger_module_test_read:PASS:testmod_file_open 0 nsec
> > > > test_testmod_attach_api:PASS:trigger_read 0 nsec
> > > > kprobe_multi_testmod_check:FAIL:kprobe_test1_result unexpected kprobe_test1_result: actual 0 != expected 1
> > > > kprobe_multi_testmod_check:FAIL:kprobe_test2_result unexpected kprobe_test2_result: actual 0 != expected 1
> > > > kprobe_multi_testmod_check:FAIL:kprobe_test3_result unexpected kprobe_test3_result: actual 0 != expected 1
> > > > kprobe_multi_testmod_check:FAIL:kretprobe_test1_result unexpected kretprobe_test1_result: actual 0 != expected 1
> > > > kprobe_multi_testmod_check:FAIL:kretprobe_test2_result unexpected kretprobe_test2_result: actual 0 != expected 1
> > > > kprobe_multi_testmod_check:FAIL:kretprobe_test3_result unexpected kretprobe_test3_result: actual 0 != expected 1
> > > >
> > >
> > > Seems like this selftest is still broken. Please let me know if you
> > > need help with building and running BPF selftests to reproduce this
> > > locally.
> >
> > Thanks, It will be helpful. Also I would like to know, is there any
> > debug mode (like print more debug logs)?
>
> So first of all, the assumption is that you will build a most recent
> kernel with Kconfig values set from
> tools/testing/selftests/bpf/config, so make sure you append that to
> your kernel config. Then build the kernel, BPF selftests' Makefile
> tries to find latest built kernel (according to KBUILD_OUTPUT/O/etc).
>
> Now to building BPF selftests:
>
> $ cd tools/testing/selftests/bpf
> $ make -j$(nproc)
>
> You'll need decently recent Clang and a few dependent packages. At
> least elfutils-devel, libzstd-devel, but there might be a few more
> which I never can remember.
>
> Once everything is built, you can run the failing test with
>
> $ sudo ./test_progs -t kprobe_multi_testmod_test -v
>
> The source code for user space part for that test is in
> prog_tests/kprobe_multi_testmod_test.c and BPF-side is in
> progs/kprobe_multi.c.
Thanks for the information!
>
> Taking failing output from the test:
>
> > > > kprobe_multi_testmod_check:FAIL:kretprobe_test3_result unexpected kretprobe_test3_result: actual 0 != expected 1
>
> kretprobe_test3_result is a sort of identifier for a test condition,
> you can find a corresponding line in user space .c file grepping for
> that:
>
> ASSERT_EQ(skel->bss->kretprobe_testmod_test3_result, 1,
> "kretprobe_test3_result");
>
> Most probably the problem is in:
>
> __u64 addr = bpf_get_func_ip(ctx);
Yeah, and as I replyed to another thread, the problem is
that the ftrace entry_ip is not symbol ip.
We have ftrace_call_adjust() arch function for reverse
direction (symbol ip to ftrace entry ip) but what we need
here is the reverse translate function (ftrace entry to symbol)
The easiest way is to use kallsyms to find it, but this is
a bit costful (but it just increase bsearch in several levels).
Other possible options are
- Change bpf_kprobe_multi_addrs_cmp() to accept a range
of address. [sym_addr, sym_addr + offset) returns true,
bpf_kprobe_multi_cookie() can find the entry address.
The offset depends on arch, but 16 is enough.
- Change bpf_kprobe_multi_addrs_cmp() to call
ftrace_call_adjust() before comparing. This may take a
cost but find actual entry address.
- (Cached method) when making link->addrs, make a link->adj_addrs
array too, where adj_addrs[i] == ftrace_call_adjust(addrs[i]).
Let me try the 3rd one. It may consume more memory but the
fastest solution.
Thank you,
>
> which is then checked as
>
> if ((const void *) addr == &bpf_testmod_fentry_test3)
>
>
> With your patches this doesn't match anymore.
It actually enables the fprobe on those architectures, so
without my series, those test should be skipped.
Thank you,
>
>
> Hopefully the above gives you some pointers, let me know if you run
> into any problems.
>
> >
> > Thank you,
> >
> > >
> > > >
> > > > Please note: this email is coming from an unmonitored mailbox. If you have
> > > > questions or feedback, please reach out to the Meta Kernel CI team at
> > > > kernel-ci@meta.com.
> >
> >
> > --
> > Masami Hiramatsu (Google) <mhiramat@kernel.org>
--
Masami Hiramatsu (Google) <mhiramat@kernel.org>
next prev parent reply other threads:[~2024-09-13 8:59 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-12 15:08 [PATCH v14 00/19] tracing: fprobe: function_graph: Multi-function graph and fprobe on fgraph Masami Hiramatsu (Google)
2024-09-12 15:08 ` [PATCH v14 01/19] tracing: Add a comment about ftrace_regs definition Masami Hiramatsu (Google)
2024-09-12 15:08 ` [PATCH v14 02/19] tracing: Rename ftrace_regs_return_value to ftrace_regs_get_return_value Masami Hiramatsu (Google)
2024-09-12 15:08 ` [PATCH v14 03/19] function_graph: Pass ftrace_regs to entryfunc Masami Hiramatsu (Google)
2024-09-12 15:08 ` [PATCH v14 04/19] function_graph: Replace fgraph_ret_regs with ftrace_regs Masami Hiramatsu (Google)
2024-09-12 15:09 ` [PATCH v14 05/19] function_graph: Pass ftrace_regs to retfunc Masami Hiramatsu (Google)
2024-09-12 15:09 ` [PATCH v14 06/19] fprobe: Use ftrace_regs in fprobe entry handler Masami Hiramatsu (Google)
2024-09-12 15:09 ` [PATCH v14 07/19] fprobe: Use ftrace_regs in fprobe exit handler Masami Hiramatsu (Google)
2024-09-12 15:09 ` [PATCH v14 08/19] tracing: Add ftrace_partial_regs() for converting ftrace_regs to pt_regs Masami Hiramatsu (Google)
2024-09-12 15:09 ` [PATCH v14 09/19] tracing: Add ftrace_fill_perf_regs() for perf event Masami Hiramatsu (Google)
2024-09-12 15:09 ` [PATCH v14 10/19] tracing/fprobe: Enable fprobe events with CONFIG_DYNAMIC_FTRACE_WITH_ARGS Masami Hiramatsu (Google)
2024-09-12 15:10 ` [PATCH v14 11/19] bpf: Enable kprobe_multi feature if CONFIG_FPROBE is enabled Masami Hiramatsu (Google)
2024-09-12 15:10 ` [PATCH v14 12/19] ftrace: Add CONFIG_HAVE_FTRACE_GRAPH_FUNC Masami Hiramatsu (Google)
2024-09-12 15:10 ` [PATCH v14 13/19] fprobe: Rewrite fprobe on function-graph tracer Masami Hiramatsu (Google)
2024-09-12 15:10 ` [PATCH v14 14/19] tracing: Fix function timing profiler to initialize hashtable Masami Hiramatsu (Google)
2024-09-12 15:10 ` [PATCH v14 15/19] tracing/fprobe: Remove nr_maxactive from fprobe Masami Hiramatsu (Google)
2024-09-12 15:11 ` [PATCH v14 16/19] selftests: ftrace: Remove obsolate maxactive syntax check Masami Hiramatsu (Google)
2024-09-12 15:11 ` [PATCH v14 17/19] selftests/ftrace: Add a test case for repeating register/unregister fprobe Masami Hiramatsu (Google)
2024-09-12 15:11 ` [PATCH v14 18/19] Documentation: probes: Update fprobe on function-graph tracer Masami Hiramatsu (Google)
2024-09-12 15:11 ` [PATCH v14 19/19] fgraph: Skip recording calltime/rettime if it is not nneeded Masami Hiramatsu (Google)
2024-09-14 21:53 ` Steven Rostedt
[not found] ` <0170cd7d95df0583770c385c1e11bd27dfacf618b71b6e723f0952efc0ce9040@mail.kernel.org>
2024-09-12 18:41 ` [PATCH v14 00/19] tracing: fprobe: function_graph: Multi-function graph and fprobe on fgraph Andrii Nakryiko
2024-09-12 23:54 ` Masami Hiramatsu
2024-09-13 1:55 ` Andrii Nakryiko
2024-09-13 8:59 ` Masami Hiramatsu [this message]
2024-09-13 12:45 ` Masami Hiramatsu
2024-09-13 13:49 ` Masami Hiramatsu
2024-09-13 21:23 ` Andrii Nakryiko
2024-09-14 2:10 ` Masami Hiramatsu
2024-09-13 21:16 ` Andrii Nakryiko
2024-09-14 1:58 ` Masami Hiramatsu
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=20240913175935.bb0892ab1e6052efc12c6423@kernel.org \
--to=mhiramat@kernel.org \
--cc=andrii.nakryiko@gmail.com \
--cc=andrii@kernel.org \
--cc=bot+bpf-ci@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=jolsa@kernel.org \
--cc=kernel-ci@meta.com \
--cc=martin.lau@linux.dev \
/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