From 7788ad59d1d9617792037a83513be5b1dd14150f Mon Sep 17 00:00:00 2001 From: Namhyung Kim Date: Wed, 26 Feb 2025 12:30:39 -0800 Subject: [PATCH] perf tools: Skip BPF sideband event for userspace profiling The BPF sideband information is tracked using a separate thread and evlist. But it's only useful for profiling kernel and we can skip it when users profile their application only. It seems it already fails to open the sideband event in that case. Let's remove the noise in the verbose output anyway. Reviewed-by: Ian Rogers Acked-by: Song Liu Link: https://lore.kernel.org/r/20250226203039.1099131-1-namhyung@kernel.org Signed-off-by: Namhyung Kim --- tools/perf/builtin-record.c | 3 +++ tools/perf/builtin-top.c | 3 +++ tools/perf/util/evlist.c | 14 ++++++++++++++ tools/perf/util/evlist.h | 1 + 4 files changed, 21 insertions(+) diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 9af3f21fd015..ba20bf7c011d 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -2535,6 +2535,9 @@ static int __cmd_record(struct record *rec, int argc, const char **argv) goto out_free_threads; } + if (!evlist__needs_bpf_sb_event(rec->evlist)) + opts->no_bpf_event = true; + err = record__setup_sb_evlist(rec); if (err) goto out_free_threads; diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index e1115b8317a0..2c41d3aea46b 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -1822,6 +1822,9 @@ int cmd_top(int argc, const char **argv) goto out_delete_evlist; } + if (!evlist__needs_bpf_sb_event(top.evlist)) + top.record_opts.no_bpf_event = true; + #ifdef HAVE_LIBBPF_SUPPORT if (!top.record_opts.no_bpf_event) { top.sb_evlist = evlist__new(); diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index f0dd174e2deb..43adf6b3d855 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -2594,3 +2594,17 @@ bool evlist__has_bpf_output(struct evlist *evlist) return false; } + +bool evlist__needs_bpf_sb_event(struct evlist *evlist) +{ + struct evsel *evsel; + + evlist__for_each_entry(evlist, evsel) { + if (evsel__is_dummy_event(evsel)) + continue; + if (!evsel->core.attr.exclude_kernel) + return true; + } + + return false; +} diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index adddb1db1ad2..edcbf1c10e92 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h @@ -435,5 +435,6 @@ void evlist__check_mem_load_aux(struct evlist *evlist); void evlist__warn_user_requested_cpus(struct evlist *evlist, const char *cpu_list); void evlist__uniquify_name(struct evlist *evlist); bool evlist__has_bpf_output(struct evlist *evlist); +bool evlist__needs_bpf_sb_event(struct evlist *evlist); #endif /* __PERF_EVLIST_H */ -- 2.50.1