Commit 988052f4 authored by Ian Rogers's avatar Ian Rogers Committed by Arnaldo Carvalho de Melo
Browse files

perf bench uprobe: Add uretprobe variant of uprobe benchmarks



Name benchmarks with _ret at the end to avoid creating a new set of
benchmarks.

Signed-off-by: default avatarIan Rogers <irogers@google.com>
Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andrei Vagin <avagin@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Kees Kook <keescook@chromium.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20240406040911.1603801-2-irogers@google.com


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 459fee7b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ int bench_breakpoint_enable(int argc, const char **argv);
int bench_uprobe_baseline(int argc, const char **argv);
int bench_uprobe_empty(int argc, const char **argv);
int bench_uprobe_trace_printk(int argc, const char **argv);
int bench_uprobe_empty_ret(int argc, const char **argv);
int bench_uprobe_trace_printk_ret(int argc, const char **argv);
int bench_pmu_scan(int argc, const char **argv);

#define BENCH_FORMAT_DEFAULT_STR	"default"
+17 −3
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ enum bench_uprobe {
	BENCH_UPROBE__BASELINE,
	BENCH_UPROBE__EMPTY,
	BENCH_UPROBE__TRACE_PRINTK,
	BENCH_UPROBE__EMPTY_RET,
	BENCH_UPROBE__TRACE_PRINTK_RET,
};

static const struct option options[] = {
@@ -81,6 +83,8 @@ static int bench_uprobe__setup_bpf_skel(enum bench_uprobe bench)
	case BENCH_UPROBE__BASELINE:							break;
	case BENCH_UPROBE__EMPTY:	 bench_uprobe__attach_uprobe(empty);		break;
	case BENCH_UPROBE__TRACE_PRINTK: bench_uprobe__attach_uprobe(trace_printk);	break;
	case BENCH_UPROBE__EMPTY_RET:	 bench_uprobe__attach_uprobe(empty_ret);	break;
	case BENCH_UPROBE__TRACE_PRINTK_RET: bench_uprobe__attach_uprobe(trace_printk_ret); break;
	default:
		fprintf(stderr, "Invalid bench: %d\n", bench);
		goto cleanup;
@@ -197,3 +201,13 @@ int bench_uprobe_trace_printk(int argc, const char **argv)
{
	return bench_uprobe(argc, argv, BENCH_UPROBE__TRACE_PRINTK);
}

int bench_uprobe_empty_ret(int argc, const char **argv)
{
	return bench_uprobe(argc, argv, BENCH_UPROBE__EMPTY_RET);
}

int bench_uprobe_trace_printk_ret(int argc, const char **argv)
{
	return bench_uprobe(argc, argv, BENCH_UPROBE__TRACE_PRINTK_RET);
}
+2 −0
Original line number Diff line number Diff line
@@ -109,6 +109,8 @@ static struct bench uprobe_benchmarks[] = {
	{ "baseline",	"Baseline libc usleep(1000) call",				bench_uprobe_baseline,	},
	{ "empty",	"Attach empty BPF prog to uprobe on usleep, system wide",	bench_uprobe_empty,	},
	{ "trace_printk", "Attach trace_printk BPF prog to uprobe on usleep syswide",	bench_uprobe_trace_printk,	},
	{ "empty_ret",	"Attach empty BPF prog to uretprobe on usleep, system wide",	bench_uprobe_empty_ret,	},
	{ "trace_printk_ret", "Attach trace_printk BPF prog to uretprobe on usleep syswide", bench_uprobe_trace_printk_ret,},
	{ NULL,	NULL, NULL },
};

+16 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@
#include <bpf/bpf_tracing.h>

unsigned int nr_uprobes;
unsigned int nr_uretprobes;

SEC("uprobe")
int BPF_UPROBE(empty)
@@ -20,4 +21,19 @@ int BPF_UPROBE(trace_printk)
	return 0;
}

SEC("uretprobe")
int BPF_URETPROBE(empty_ret)
{
	return 0;
}

SEC("uretprobe")
int BPF_URETPROBE(trace_printk_ret)
{
	char fmt[] = "perf bench uretprobe %u";

	bpf_trace_printk(fmt, sizeof(fmt), ++nr_uretprobes);
	return 0;
}

char LICENSE[] SEC("license") = "Dual BSD/GPL";