From: Yonghong Song <yonghong.song@linux.dev>
To: Jiri Olsa <olsajiri@gmail.com>
Cc: bpf@vger.kernel.org, Alexei Starovoitov <ast@kernel.org>,
Andrii Nakryiko <andrii@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
kernel-team@fb.com, Martin KaFai Lau <martin.lau@kernel.org>
Subject: Re: [PATCH bpf-next v2 5/5] selftests/bpf: Add a selftest with available_filter_functions_addrs
Date: Fri, 22 Mar 2024 09:07:06 -0700 [thread overview]
Message-ID: <0bb5c256-a564-417c-b252-166aec017870@linux.dev> (raw)
In-Reply-To: <Zf147sHXbgMs1yDZ@krava>
On 3/22/24 5:26 AM, Jiri Olsa wrote:
> On Thu, Mar 21, 2024 at 01:01:24PM -0700, Yonghong Song wrote:
>> The current kprobe_multi_bench_attach/kernel test
>> reads sym names from /sys/kernel/tracing/available_filter_functions.
>> Some names do not agree with the corresponding entries in /proc/kallsyms
>> since the corresponding /proc/kallsyms syms have suffix '.llvm.<hash>'.
>> Actually, if we pass symbol names in /proc/kallsyms,
>> kprobe_multi_attach will be okay.
>>
>> This patch added a new subtest where addresses are retrieved from
>> /sys/kernel/tracing/available_filter_functions_addrs, and use the
>> address to consule /proc/kallsyms to get the function name.
> hm, I don't understand the reason for this test.. AFAICS test_kprobe_multi_bench_attach
> is doing that already, just reading available_filter_functions file
>
> both available_filter_functions_addrs and available_filter_functions have the
> same functions, there's just extra addresses in available_filter_functions_addrs
The goal is to include those kernel functions filtered in patch 4.
But we cannot use the names from available_filter_functions[_addrs],
and we need to get names from /proc/kallsyms. Hence this patch.
This will test if we give names (<name>.llvm.<hash>) to kernel
for kprobe_multi_attach, things will be okay.
>
>> + *symsp = syms;
>> + *cntp = cnt;
>> +
>> +error:
>> + fclose(f);
>> + hashmap__free(map);
>> + if (err) {
>> + for (i = 0; i < cnt; i++)
>> + free(syms[i]);
>> + free(syms);
>> + }
>> + return err;
>> +}
>> +
>> static void test_kprobe_multi_bench_attach(bool kernel)
>> {
>> LIBBPF_OPTS(bpf_kprobe_multi_opts, opts);
>> @@ -521,6 +617,47 @@ static void test_attach_override(void)
>> kprobe_multi_override__destroy(skel);
>> }
> there's lot of duplicated code in both
> get_syms_from_addr/get_syms
> test_attach_kernel_addrs_to_sym/test_kprobe_multi_bench_attach
>
> would be great to put it together
I will give a try in the next revision.
>
>>
>> +static void test_attach_kernel_addrs_to_sym(void)
>> +{
>> + LIBBPF_OPTS(bpf_kprobe_multi_opts, opts);
>> + struct kprobe_multi_empty *skel;
>> + struct bpf_link *link;
>> + char **syms = NULL;
>> + size_t cnt = 0;
>> + int i, err;
>> +
>> + err = get_syms_from_addr(&syms, &cnt);
>> + if (err == -ENOENT) {
>> + test__skip();
>> + return;
>> + }
>> + if (!ASSERT_OK(err, "get_syms_from_addr"))
>> + return;
>> +
>> + skel = kprobe_multi_empty__open_and_load();
>> + if (!ASSERT_OK_PTR(skel, "kprobe_multi_empty__open_and_load"))
>> + goto cleanup;
>> +
>> + opts.syms = (const char **) syms;
>> + opts.cnt = cnt;
>> +
>> + link = bpf_program__attach_kprobe_multi_opts(skel->progs.test_kprobe_empty,
>> + NULL, &opts);
>> +
>> + if (!ASSERT_OK_PTR(link, "bpf_program__attach_kprobe_multi_opts"))
>> + goto cleanup;
>> +
>> + bpf_link__destroy(link);
>> +
>> +cleanup:
>> + kprobe_multi_empty__destroy(skel);
>> + if (syms) {
>> + for (i = 0; i < cnt; i++)
>> + free(syms[i]);
>> + free(syms);
>> + }
>> +}
>> +
>> void serial_test_kprobe_multi_bench_attach(void)
>> {
>> if (test__start_subtest("kernel"))
>> @@ -550,4 +687,6 @@ void test_kprobe_multi_test(void)
>> test_attach_api_fails();
>> if (test__start_subtest("attach_override"))
>> test_attach_override();
>> + if (test__start_subtest("kernel_addrs_to_sym"))
>> + test_attach_kernel_addrs_to_sym();
> we moved the bench subtests to serial_test_kprobe_multi_bench_attach,
> not to clash with others in parallel mode
Okay, I will put it in serial mode in next revision.
>
> jirka
next prev parent reply other threads:[~2024-03-22 16:07 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-21 20:00 [PATCH bpf-next v2 0/5] bpf: Fix a couple of test failures with LTO kernel Yonghong Song
2024-03-21 20:01 ` [PATCH bpf-next v2 1/5] selftests/bpf: Replace CHECK with ASSERT macros for ksyms test Yonghong Song
2024-03-22 12:38 ` Jiri Olsa
2024-03-22 16:13 ` Andrii Nakryiko
2024-03-22 16:41 ` Yonghong Song
2024-03-22 16:48 ` Andrii Nakryiko
2024-03-22 17:28 ` Yonghong Song
2024-03-21 20:01 ` [PATCH bpf-next v2 2/5] libbpf: Mark libbpf_kallsyms_parse static function Yonghong Song
2024-03-22 12:37 ` Jiri Olsa
2024-03-22 15:37 ` Yonghong Song
2024-03-21 20:01 ` [PATCH bpf-next v2 3/5] libbpf: Handle <orig_name>.llvm.<hash> symbol properly Yonghong Song
2024-03-21 21:54 ` Alexei Starovoitov
2024-03-21 23:55 ` Yonghong Song
2024-03-22 0:02 ` Alexei Starovoitov
2024-03-22 0:17 ` Andrii Nakryiko
2024-03-22 0:32 ` Yonghong Song
2024-03-22 0:18 ` Andrii Nakryiko
2024-03-22 0:34 ` Yonghong Song
2024-03-22 21:50 ` Andrii Nakryiko
2024-03-22 22:09 ` Yonghong Song
2024-03-21 20:01 ` [PATCH bpf-next v2 4/5] selftests/bpf: Fix kprobe_multi_bench_attach test failure with LTO kernel Yonghong Song
2024-03-22 12:37 ` Jiri Olsa
2024-03-22 16:01 ` Yonghong Song
2024-03-22 21:53 ` Andrii Nakryiko
2024-03-22 22:20 ` Yonghong Song
2024-03-21 20:01 ` [PATCH bpf-next v2 5/5] selftests/bpf: Add a selftest with available_filter_functions_addrs Yonghong Song
2024-03-22 12:26 ` Jiri Olsa
2024-03-22 16:07 ` Yonghong Song [this message]
2024-03-22 21:58 ` Andrii Nakryiko
2024-03-22 22:23 ` Yonghong Song
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=0bb5c256-a564-417c-b252-166aec017870@linux.dev \
--to=yonghong.song@linux.dev \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=kernel-team@fb.com \
--cc=martin.lau@kernel.org \
--cc=olsajiri@gmail.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 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.