Skip to content

Commit

Permalink
selftests/bpf: Add 5-byte nop uprobe trigger bench
Browse files Browse the repository at this point in the history
Signed-off-by: Jiri Olsa <[email protected]>
  • Loading branch information
olsajiri committed Dec 3, 2024
1 parent 0cb5f6c commit 0ca1a25
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 1 deletion.
12 changes: 12 additions & 0 deletions tools/testing/selftests/bpf/bench.c
Original file line number Diff line number Diff line change
Expand Up @@ -526,6 +526,12 @@ 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;
#ifdef __x86_64__
extern const struct bench bench_trig_uprobe_nop5;
extern const struct bench bench_trig_uretprobe_nop5;
extern const struct bench bench_trig_uprobe_multi_nop5;
extern const struct bench bench_trig_uretprobe_multi_nop5;
#endif

extern const struct bench bench_rb_libbpf;
extern const struct bench bench_rb_custom;
Expand Down Expand Up @@ -586,6 +592,12 @@ static const struct bench *benchs[] = {
&bench_trig_uretprobe_multi_push,
&bench_trig_uprobe_multi_ret,
&bench_trig_uretprobe_multi_ret,
#ifdef __x86_64__
&bench_trig_uprobe_nop5,
&bench_trig_uretprobe_nop5,
&bench_trig_uprobe_multi_nop5,
&bench_trig_uretprobe_multi_nop5,
#endif
/* ringbuf/perfbuf benchmarks */
&bench_rb_libbpf,
&bench_rb_custom,
Expand Down
42 changes: 42 additions & 0 deletions tools/testing/selftests/bpf/benchs/bench_trigger.c
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,20 @@ static void *uprobe_producer_ret(void *input)
return NULL;
}

#ifdef __x86_64__
__nocf_check __weak void uprobe_target_nop5(void)
{
asm volatile (".byte 0x0f, 0x1f, 0x44, 0x00, 0x00");
}

static void *uprobe_producer_nop5(void *input)
{
while (true)
uprobe_target_nop5();
return NULL;
}
#endif

static void usetup(bool use_retprobe, bool use_multi, void *target_addr)
{
size_t uprobe_offset;
Expand Down Expand Up @@ -448,6 +462,28 @@ static void uretprobe_multi_ret_setup(void)
usetup(true, true /* use_multi */, &uprobe_target_ret);
}

#ifdef __x86_64__
static void uprobe_nop5_setup(void)
{
usetup(false, false /* !use_multi */, &uprobe_target_nop5);
}

static void uretprobe_nop5_setup(void)
{
usetup(false, false /* !use_multi */, &uprobe_target_nop5);
}

static void uprobe_multi_nop5_setup(void)
{
usetup(false, true /* use_multi */, &uprobe_target_nop5);
}

static void uretprobe_multi_nop5_setup(void)
{
usetup(false, true /* use_multi */, &uprobe_target_nop5);
}
#endif

const struct bench bench_trig_syscall_count = {
.name = "trig-syscall-count",
.validate = trigger_validate,
Expand Down Expand Up @@ -506,3 +542,9 @@ 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");
#ifdef __x86_64__
BENCH_TRIG_USERMODE(uprobe_nop5, nop5, "uprobe-nop5");
BENCH_TRIG_USERMODE(uretprobe_nop5, nop5, "uretprobe-nop5");
BENCH_TRIG_USERMODE(uprobe_multi_nop5, nop5, "uprobe-multi-nop5");
BENCH_TRIG_USERMODE(uretprobe_multi_nop5, nop5, "uretprobe-multi-nop5");
#endif
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/benchs/run_bench_uprobes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

set -eufo pipefail

for i in usermode-count syscall-count {uprobe,uretprobe}-{nop,push,ret}
for i in usermode-count syscall-count {uprobe,uretprobe}-{nop,push,ret,nop5}
do
summary=$(sudo ./bench -w2 -d5 -a trig-$i | tail -n1 | cut -d'(' -f1 | cut -d' ' -f3-)
printf "%-15s: %s\n" $i "$summary"
Expand Down

0 comments on commit 0ca1a25

Please sign in to comment.