[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aEnLBgCTuuZjeakP@google.com>
Date: Wed, 11 Jun 2025 11:29:26 -0700
From: Namhyung Kim <namhyung@...nel.org>
To: Blake Jones <blakejones@...gle.com>
Cc: Arnaldo Carvalho de Melo <acme@...nel.org>,
Ian Rogers <irogers@...gle.com>, Jiri Olsa <jolsa@...nel.org>,
Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...hat.com>, Mark Rutland <mark.rutland@....com>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
Adrian Hunter <adrian.hunter@...el.com>,
Kan Liang <kan.liang@...ux.intel.com>,
Steven Rostedt <rostedt@...dmis.org>,
Tomas Glozar <tglozar@...hat.com>,
James Clark <james.clark@...aro.org>, Leo Yan <leo.yan@....com>,
Guilherme Amadio <amadio@...too.org>,
Yang Jihong <yangjihong@...edance.com>,
Charlie Jenkins <charlie@...osinc.com>,
Chun-Tse Shao <ctshao@...gle.com>,
Aditya Gupta <adityag@...ux.ibm.com>,
Athira Rajeev <atrajeev@...ux.vnet.ibm.com>,
Zhongqiu Han <quic_zhonhan@...cinc.com>,
Andi Kleen <ak@...ux.intel.com>, Dmitry Vyukov <dvyukov@...gle.com>,
Yujie Liu <yujie.liu@...el.com>,
Graham Woodward <graham.woodward@....com>,
Yicong Yang <yangyicong@...ilicon.com>,
Ben Gainey <ben.gainey@....com>, linux-kernel@...r.kernel.org,
linux-perf-users@...r.kernel.org, bpf@...r.kernel.org
Subject: Re: [PATCH v3 0/5] perf: generate events for BPF metadata
Hi Blake,
On Fri, Jun 06, 2025 at 02:52:41PM -0700, Blake Jones wrote:
> Commit ffa915f46193 ("Merge branch 'bpf_metadata'"), from September 2020,
> added support to the kernel, libbpf, and bpftool to treat read-only BPF
> variables that have names starting with 'bpf_metadata_' specially. This
> patch series updates perf to handle these variables similarly, allowing a
> perf.data file to capture relevant information about BPF programs on the
> system being profiled.
>
> When it encounters a BPF program, it reads the program's maps to find an
> '.rodata' map with 'bpf_metadata_' variables. If it finds one, it extracts
> their values as strings, and creates a new PERF_RECORD_BPF_METADATA
> synthetic event using that data. It does this both for BPF programs that
> were loaded when a 'perf record' starts, as well as for programs that are
> loaded while the profile is running. For the latter case, it stores the
> metadata for the duration of the profile, and then dumps it at the end of
> the profile, where it's in a better context to do so.
>
> The PERF_RECORD_BPF_METADATA event holds an array of key-value pairs, where
> the key is the variable name (minus the "bpf_metadata_" prefix) and the
> value is the variable's value, formatted as a string. There is one such
> event generated for each BPF subprogram. Generating it per subprogram
> rather than per program allows it to be correlated with PERF_RECORD_KSYMBOL
> events; the metadata event's "prog_name" is designed to be identical to the
> "name" field of a perf_record_ksymbol. This allows specific BPF metadata to
> be associated with each BPF address range in the collection.
>
> Changes:
>
> * v2 -> v3:
> - Split out event collection from event display.
> - Resync with tmp.perf-tools-next.
> - Link to v2:
> https://lore.kernel.org/linux-perf-users/20250605233934.1881839-1-blakejones@google.com/T/#t
>
> * v1 -> v2:
> - Split out libbpf change and send it to the bpf tree.
> - Add feature detection to perf to detect the libbpf change.
> - Allow the feature to be skipped if the libbpf support is not found.
> - Add an example of a PERF_RECORD_BPF_METADATA record.
> - Change calloc() calls to zalloc().
> - Don't check for NULL before calling free().
> - Update the perf_event header when it is created, rather than
> storing the event size and updating it later.
> - Add a BPF metadata variable (with the perf version) to all
> perf BPF programs.
> - Update the selftest to look for the new perf_version variable.
> - Split out the selftest into its own patch.
> - Link to v1:
> https://lore.kernel.org/linux-perf-users/20250521222725.3895192-1-blakejones@google.com/T/#t
>
> Blake Jones (5):
> perf: detect support for libbpf's emit_strings option
> perf: collect BPF metadata from existing BPF programs
> perf: collect BPF metadata from new programs
> perf: display the new PERF_RECORD_BPF_METADATA event
> perf: add test for PERF_RECORD_BPF_METADATA collection
I tried to process your patches but it failed to build like below:
util/bpf-event.h: In function 'bpf_metadata_free':
util/bpf-event.h:68:59: error: unused parameter 'metadata' [-Werror=unused-parameter]
68 | static inline void bpf_metadata_free(struct bpf_metadata *metadata)
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
It was a simple to fix by adding __maybe_unused but after that I got
another build error so I stopped.
/usr/bin/ld: /tmp/tmp.N9VJQ2A3pl/perf-in.o: in function `cmd_record':
(.text+0x191ae): undefined reference to `perf_event__synthesize_final_bpf_metadata'
collect2: error: ld returned 1 exit status
make[4]: *** [Makefile.perf:804: /tmp/tmp.N9VJQ2A3pl/perf] Error 1
make[4]: *** Waiting for unfinished jobs....
make[3]: *** [Makefile.perf:290: sub-make] Error 2
make[2]: *** [Makefile:76: all] Error 2
make[1]: *** [tests/make:341: make_no_libbpf_O] Error 1
make: *** [Makefile:109: build-test] Error 2
Please run 'make build-test' and send v4.
Thanks,
Namhyung
>
> tools/build/Makefile.feature | 1 +
> tools/build/feature/Makefile | 4 +
> tools/build/feature/test-libbpf-strings.c | 10 +
> tools/lib/perf/include/perf/event.h | 18 +
> tools/perf/Documentation/perf-check.txt | 1 +
> tools/perf/Makefile.config | 12 +
> tools/perf/Makefile.perf | 3 +-
> tools/perf/builtin-check.c | 1 +
> tools/perf/builtin-inject.c | 1 +
> tools/perf/builtin-record.c | 8 +
> tools/perf/builtin-script.c | 15 +-
> tools/perf/tests/shell/test_bpf_metadata.sh | 76 ++++
> tools/perf/util/bpf-event.c | 378 ++++++++++++++++++++
> tools/perf/util/bpf-event.h | 13 +
> tools/perf/util/bpf_skel/perf_version.h | 17 +
> tools/perf/util/env.c | 19 +-
> tools/perf/util/env.h | 4 +
> tools/perf/util/event.c | 21 ++
> tools/perf/util/event.h | 1 +
> tools/perf/util/header.c | 1 +
> tools/perf/util/session.c | 4 +
> tools/perf/util/synthetic-events.h | 2 +
> tools/perf/util/tool.c | 14 +
> tools/perf/util/tool.h | 3 +-
> 24 files changed, 622 insertions(+), 5 deletions(-)
> create mode 100644 tools/build/feature/test-libbpf-strings.c
> create mode 100755 tools/perf/tests/shell/test_bpf_metadata.sh
> create mode 100644 tools/perf/util/bpf_skel/perf_version.h
>
> --
> 2.50.0.rc0.604.gd4ff7b7c86-goog
>
Powered by blists - more mailing lists