On Thu, Nov 14, 2024 at 03:40:53PM -0800, Andrii Nakryiko wrote: > On Tue, Nov 5, 2024 at 5:35 AM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > > > Adding usdt trigger bench to meassure optimized usdt probes. > > > > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > > --- > > tools/testing/selftests/bpf/bench.c | 2 + > > .../selftests/bpf/benchs/bench_trigger.c | 45 +++++++++++++++++++ > > .../selftests/bpf/progs/trigger_bench.c | 10 ++++- > > 3 files changed, 56 insertions(+), 1 deletion(-) > > > > Why not just adding uprobe-nop5 benchmark instead of going all the way > into USDT? Seems simpler and will benchmark all the same stuff? ok, perhaps with your new usdt library and the possible nop/nop5 tricks we might want to have specific usdt benchmarks.. but that's for later anyway jirka > > > diff --git a/tools/testing/selftests/bpf/bench.c b/tools/testing/selftests/bpf/bench.c > > index 1bd403a5ef7b..dc5121e49623 100644 > > --- a/tools/testing/selftests/bpf/bench.c > > +++ b/tools/testing/selftests/bpf/bench.c > > @@ -526,6 +526,7 @@ extern const struct bench bench_trig_uprobe_multi_push; > > extern const struct bench bench_trig_uretprobe_multi_push; > > extern const struct bench bench_trig_uprobe_multi_ret; > > extern const struct bench bench_trig_uretprobe_multi_ret; > > +extern const struct bench bench_trig_usdt; > > > > extern const struct bench bench_rb_libbpf; > > extern const struct bench bench_rb_custom; > > @@ -586,6 +587,7 @@ static const struct bench *benchs[] = { > > &bench_trig_uretprobe_multi_push, > > &bench_trig_uprobe_multi_ret, > > &bench_trig_uretprobe_multi_ret, > > + &bench_trig_usdt, > > /* ringbuf/perfbuf benchmarks */ > > &bench_rb_libbpf, > > &bench_rb_custom, > > diff --git a/tools/testing/selftests/bpf/benchs/bench_trigger.c b/tools/testing/selftests/bpf/benchs/bench_trigger.c > > index 32e9f194d449..bdee8b8362d0 100644 > > --- a/tools/testing/selftests/bpf/benchs/bench_trigger.c > > +++ b/tools/testing/selftests/bpf/benchs/bench_trigger.c > > @@ -8,6 +8,7 @@ > > #include "bench.h" > > #include "trigger_bench.skel.h" > > #include "trace_helpers.h" > > +#include "../sdt.h" > > > > #define MAX_TRIG_BATCH_ITERS 1000 > > > > @@ -333,6 +334,13 @@ static void *uprobe_producer_ret(void *input) > > return NULL; > > } > > > > +static void *uprobe_producer_usdt(void *input) > > +{ > > + while (true) > > + STAP_PROBE(trigger, usdt); > > + return NULL; > > +} > > + > > static void usetup(bool use_retprobe, bool use_multi, void *target_addr) > > { > > size_t uprobe_offset; > > @@ -383,6 +391,37 @@ static void usetup(bool use_retprobe, bool use_multi, void *target_addr) > > } > > } > > > > +static void __usdt_setup(const char *provider, const char *name) > > +{ > > + struct bpf_link *link; > > + int err; > > + > > + setup_libbpf(); > > + > > + ctx.skel = trigger_bench__open(); > > + if (!ctx.skel) { > > + fprintf(stderr, "failed to open skeleton\n"); > > + exit(1); > > + } > > + > > + bpf_program__set_autoload(ctx.skel->progs.bench_trigger_usdt, true); > > + > > + err = trigger_bench__load(ctx.skel); > > + if (err) { > > + fprintf(stderr, "failed to load skeleton\n"); > > + exit(1); > > + } > > + > > + link = bpf_program__attach_usdt(ctx.skel->progs.bench_trigger_usdt, > > + -1 /* all PIDs */, "/proc/self/exe", > > + provider, name, NULL); > > + if (!link) { > > + fprintf(stderr, "failed to attach uprobe!\n"); > > + exit(1); > > + } > > + ctx.skel->links.bench_trigger_usdt = link; > > +} > > + > > static void usermode_count_setup(void) > > { > > ctx.usermode_counters = true; > > @@ -448,6 +487,11 @@ static void uretprobe_multi_ret_setup(void) > > usetup(true, true /* use_multi */, &uprobe_target_ret); > > } > > > > +static void usdt_setup(void) > > +{ > > + __usdt_setup("trigger", "usdt"); > > +} > > + > > const struct bench bench_trig_syscall_count = { > > .name = "trig-syscall-count", > > .validate = trigger_validate, > > @@ -506,3 +550,4 @@ BENCH_TRIG_USERMODE(uprobe_multi_ret, ret, "uprobe-multi-ret"); > > BENCH_TRIG_USERMODE(uretprobe_multi_nop, nop, "uretprobe-multi-nop"); > > BENCH_TRIG_USERMODE(uretprobe_multi_push, push, "uretprobe-multi-push"); > > BENCH_TRIG_USERMODE(uretprobe_multi_ret, ret, "uretprobe-multi-ret"); > > +BENCH_TRIG_USERMODE(usdt, usdt, "usdt"); > > diff --git a/tools/testing/selftests/bpf/progs/trigger_bench.c b/tools/testing/selftests/bpf/progs/trigger_bench.c > > index 044a6d78923e..7b7d4a71e7d4 100644 > > --- a/tools/testing/selftests/bpf/progs/trigger_bench.c > > +++ b/tools/testing/selftests/bpf/progs/trigger_bench.c > > @@ -1,8 +1,9 @@ > > // SPDX-License-Identifier: GPL-2.0 > > // Copyright (c) 2020 Facebook > > -#include <linux/bpf.h> > > +#include "vmlinux.h" > > #include <asm/unistd.h> > > #include <bpf/bpf_helpers.h> > > +#include <bpf/usdt.bpf.h> > > #include <bpf/bpf_tracing.h> > > #include "bpf_misc.h" > > > > @@ -138,3 +139,10 @@ int bench_trigger_rawtp(void *ctx) > > inc_counter(); > > return 0; > > } > > + > > +SEC("?usdt") > > +int bench_trigger_usdt(struct pt_regs *ctx) > > +{ > > + inc_counter(); > > + return 0; > > +} > > -- > > 2.47.0 > >