On Fri, May 26, 2023 at 09:38:15AM +0800, Jackie Liu wrote: > Hi Andrii. > > 在 2023/5/26 04:43, Andrii Nakryiko 写道: > > On Thu, May 25, 2023 at 3:28 AM Jackie Liu <liu.yun@xxxxxxxxx> wrote: > > > > > > From: Jackie Liu <liuyun01@xxxxxxxxxx> > > > > > > When using regular expression matching with "kprobe multi", it scans all > > > the functions under "/proc/kallsyms" that can be matched. However, not all > > > of them can be traced by kprobe.multi. If any one of the functions fails > > > to be traced, it will result in the failure of all functions. The best > > > approach is to filter out the functions that cannot be traced to ensure > > > proper tracking of the functions. > > > > > > Use available_filter_functions check first, if failed, fallback to > > > kallsyms. > > > > > > Here is the test eBPF program [1]. > > > [1] https://github.com/JackieLiu1/ketones/commit/a9e76d1ba57390e533b8b3eadde97f7a4535e867 > > > > > > Suggested-by: Jiri Olsa <olsajiri@xxxxxxxxx> > > > Signed-off-by: Jackie Liu <liuyun01@xxxxxxxxxx> > > > --- > > > tools/lib/bpf/libbpf.c | 92 +++++++++++++++++++++++++++++++++++++----- > > > 1 file changed, 83 insertions(+), 9 deletions(-) > > > > > > > Question to you and Jiri: what happens when multi-kprobe's syms has > > duplicates? Will the program be attached multiple times? If yes, then > > it sounds like a problem? Both available_filters and kallsyms can have > > duplicate function names in them, right? > > If I understand correctly, there should be no problem with repeated > function registration, because the bottom layer is done through fprobe > registration addrs, kprobe.multi itself does not do this work, but > fprobe is based on ftrace, it will register addr by makes a hash, > that is, if it is the same address, it should be filtered out. it won't get through the kprobe_multi symbols resolve code, because we check that the number of resolved addresses matches the number of provided symbols also found test bug (hunk#2) when checking on that (hunk#1) ;-) jirka --- diff --git a/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c b/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c index 2173c4bb555e..e78362354bd3 100644 --- a/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c +++ b/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c @@ -124,7 +124,7 @@ static void test_link_api_syms(void) "bpf_fentry_test5", "bpf_fentry_test6", "bpf_fentry_test7", - "bpf_fentry_test8", + "bpf_fentry_test7", }; opts.kprobe_multi.syms = syms; @@ -477,9 +477,9 @@ void test_kprobe_multi_test(void) if (test__start_subtest("skel_api")) test_skel_api(); if (test__start_subtest("link_api_addrs")) - test_link_api_syms(); - if (test__start_subtest("link_api_syms")) test_link_api_addrs(); + if (test__start_subtest("link_api_syms")) + test_link_api_syms(); if (test__start_subtest("attach_api_pattern")) test_attach_api_pattern(); if (test__start_subtest("attach_api_addrs"))