mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
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: Ian Rogers <irogers@google.com> Acked-by: Jiri 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: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
459fee7b50
commit
988052f4bf
@ -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"
|
||||
|
@ -26,9 +26,11 @@
|
||||
static int loops = LOOPS_DEFAULT;
|
||||
|
||||
enum bench_uprobe {
|
||||
BENCH_UPROBE__BASELINE,
|
||||
BENCH_UPROBE__EMPTY,
|
||||
BENCH_UPROBE__TRACE_PRINTK,
|
||||
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);
|
||||
}
|
||||
|
@ -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 },
|
||||
};
|
||||
|
||||
|
@ -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";
|
||||
|
Loading…
Reference in New Issue
Block a user