Add bench testcase for fentry_multi, fexit_multi and fmodret_multi in bench_trigger.c.
Signed-off-by: Menglong Dong dongml2@chinatelecom.cn --- v2: - use the existing bpf bench framework instead of introducing new one --- tools/testing/selftests/bpf/bench.c | 8 +++ .../selftests/bpf/benchs/bench_trigger.c | 72 +++++++++++++++++++ .../selftests/bpf/benchs/run_bench_trigger.sh | 1 + .../selftests/bpf/progs/trigger_bench.c | 22 ++++++ 4 files changed, 103 insertions(+)
diff --git a/tools/testing/selftests/bpf/bench.c b/tools/testing/selftests/bpf/bench.c index ddd73d06a1eb..32f1e2e936c0 100644 --- a/tools/testing/selftests/bpf/bench.c +++ b/tools/testing/selftests/bpf/bench.c @@ -510,8 +510,12 @@ extern const struct bench bench_trig_kretprobe; extern const struct bench bench_trig_kprobe_multi; extern const struct bench bench_trig_kretprobe_multi; extern const struct bench bench_trig_fentry; +extern const struct bench bench_trig_fentry_multi; +extern const struct bench bench_trig_fentry_multi_all; extern const struct bench bench_trig_fexit; +extern const struct bench bench_trig_fexit_multi; extern const struct bench bench_trig_fmodret; +extern const struct bench bench_trig_fmodret_multi; extern const struct bench bench_trig_tp; extern const struct bench bench_trig_rawtp;
@@ -578,8 +582,12 @@ static const struct bench *benchs[] = { &bench_trig_kprobe_multi, &bench_trig_kretprobe_multi, &bench_trig_fentry, + &bench_trig_fentry_multi, + &bench_trig_fentry_multi_all, &bench_trig_fexit, + &bench_trig_fexit_multi, &bench_trig_fmodret, + &bench_trig_fmodret_multi, &bench_trig_tp, &bench_trig_rawtp, /* uprobes */ diff --git a/tools/testing/selftests/bpf/benchs/bench_trigger.c b/tools/testing/selftests/bpf/benchs/bench_trigger.c index 82327657846e..a1844ee358f1 100644 --- a/tools/testing/selftests/bpf/benchs/bench_trigger.c +++ b/tools/testing/selftests/bpf/benchs/bench_trigger.c @@ -226,6 +226,54 @@ static void trigger_fentry_setup(void) attach_bpf(ctx.skel->progs.bench_trigger_fentry); }
+static void trigger_fentry_multi_setup(void) +{ + setup_ctx(); + bpf_program__set_autoload(ctx.skel->progs.bench_trigger_fentry_multi, true); + load_ctx(); + attach_bpf(ctx.skel->progs.bench_trigger_fentry_multi); +} + +static void trigger_fentry_multi_all_setup(void) +{ + LIBBPF_OPTS(bpf_trace_multi_opts, opts); + struct bpf_program *prog; + struct bpf_link *link; + char **syms = NULL; + size_t cnt = 0; + int i; + + setup_ctx(); + prog = ctx.skel->progs.bench_trigger_fentry_multi; + bpf_program__set_autoload(prog, true); + load_ctx(); + + if (bpf_get_ksyms(&syms, &cnt, true)) { + printf("failed to get ksyms\n"); + exit(1); + } + + for (i = 0; i < cnt; i++) { + if (strcmp(syms[i], "bpf_get_numa_node_id") == 0) + break; + } + if (i == cnt) { + printf("bpf_get_numa_node_id not found in ksyms\n"); + exit(1); + } + + printf("found %zu ksyms\n", cnt); + opts.syms = (const char **) syms; + opts.cnt = cnt; + opts.skip_invalid = true; + link = bpf_program__attach_trace_multi_opts(prog, &opts); + if (!link) { + printf("failed to attach bench_trigger_fentry_multi to all\n"); + exit(1); + } + ctx.skel->links.bench_trigger_fentry_multi = link; +} + static void trigger_fexit_setup(void) { setup_ctx(); @@ -234,6 +282,14 @@ static void trigger_fexit_setup(void) attach_bpf(ctx.skel->progs.bench_trigger_fexit); }
+static void trigger_fexit_multi_setup(void) +{ + setup_ctx(); + bpf_program__set_autoload(ctx.skel->progs.bench_trigger_fexit_multi, true); + load_ctx(); + attach_bpf(ctx.skel->progs.bench_trigger_fexit_multi); +} + static void trigger_fmodret_setup(void) { setup_ctx(); @@ -246,6 +302,18 @@ static void trigger_fmodret_setup(void) attach_bpf(ctx.skel->progs.bench_trigger_fmodret); }
+static void trigger_fmodret_multi_setup(void) +{ + setup_ctx(); + bpf_program__set_autoload(ctx.skel->progs.trigger_driver, false); + bpf_program__set_autoload(ctx.skel->progs.trigger_driver_kfunc, true); + bpf_program__set_autoload(ctx.skel->progs.bench_trigger_fmodret_multi, true); + load_ctx(); + /* override driver program */ + ctx.driver_prog_fd = bpf_program__fd(ctx.skel->progs.trigger_driver_kfunc); + attach_bpf(ctx.skel->progs.bench_trigger_fmodret_multi); +} + static void trigger_tp_setup(void) { setup_ctx(); @@ -512,8 +580,12 @@ BENCH_TRIG_KERNEL(kretprobe, "kretprobe"); BENCH_TRIG_KERNEL(kprobe_multi, "kprobe-multi"); BENCH_TRIG_KERNEL(kretprobe_multi, "kretprobe-multi"); BENCH_TRIG_KERNEL(fentry, "fentry"); +BENCH_TRIG_KERNEL(fentry_multi, "fentry-multi"); +BENCH_TRIG_KERNEL(fentry_multi_all, "fentry-multi-all"); BENCH_TRIG_KERNEL(fexit, "fexit"); +BENCH_TRIG_KERNEL(fexit_multi, "fexit-multi"); BENCH_TRIG_KERNEL(fmodret, "fmodret"); +BENCH_TRIG_KERNEL(fmodret_multi, "fmodret-multi"); BENCH_TRIG_KERNEL(tp, "tp"); BENCH_TRIG_KERNEL(rawtp, "rawtp");
diff --git a/tools/testing/selftests/bpf/benchs/run_bench_trigger.sh b/tools/testing/selftests/bpf/benchs/run_bench_trigger.sh index a690f5a68b6b..48a7f809d053 100755 --- a/tools/testing/selftests/bpf/benchs/run_bench_trigger.sh +++ b/tools/testing/selftests/bpf/benchs/run_bench_trigger.sh @@ -5,6 +5,7 @@ set -eufo pipefail def_tests=( \ usermode-count kernel-count syscall-count \ fentry fexit fmodret \ + fentry-multi fentry-multi-all fexit-multi fmodret-multi \ rawtp tp \ kprobe kprobe-multi \ kretprobe kretprobe-multi \ diff --git a/tools/testing/selftests/bpf/progs/trigger_bench.c b/tools/testing/selftests/bpf/progs/trigger_bench.c index 044a6d78923e..2ff1a7568080 100644 --- a/tools/testing/selftests/bpf/progs/trigger_bench.c +++ b/tools/testing/selftests/bpf/progs/trigger_bench.c @@ -111,6 +111,13 @@ int bench_trigger_fentry(void *ctx) return 0; }
+SEC("?fentry.multi/bpf_get_numa_node_id") +int bench_trigger_fentry_multi(void *ctx) +{ + inc_counter(); + return 0; +} + SEC("?fexit/bpf_get_numa_node_id") int bench_trigger_fexit(void *ctx) { @@ -118,6 +125,14 @@ int bench_trigger_fexit(void *ctx) return 0; }
+SEC("?fexit.multi/bpf_get_numa_node_id") +int bench_trigger_fexit_multi(void *ctx) +{ + inc_counter(); + + return 0; +} + SEC("?fmod_ret/bpf_modify_return_test_tp") int bench_trigger_fmodret(void *ctx) { @@ -125,6 +140,13 @@ int bench_trigger_fmodret(void *ctx) return -22; }
+SEC("?fmod_ret.multi/bpf_modify_return_test_tp") +int bench_trigger_fmodret_multi(void *ctx) +{ + inc_counter(); + return -22; +} + SEC("?tp/bpf_test_run/bpf_trigger_tp") int bench_trigger_tp(void *ctx) {
linux-kselftest-mirror@lists.linaro.org