Re: [PATCH v3 0/9] perf: Default use of build IDs and improvements

From: Ian Rogers
Date: Tue May 27 2025 - 16:49:08 EST


On Mon, Apr 28, 2025 at 2:34 PM Ian Rogers <irogers@xxxxxxxxxx> wrote:
>
> Build ID mmap2 events have been available since Linux v5.12 and avoid
> certain races. Enable these by default as discussed in:
> https://lore.kernel.org/linux-perf-users/CAP-5=fXP7jN_QrGUcd55_QH5J-Y-FCaJ6=NaHVtyx0oyNh8_-Q@xxxxxxxxxxxxxx/
>
> The dso_id is used to indentify a DSO that may change by being
> overwritten. The inode generation isn't present in /proc/pid/maps and
> so was already only optionally filled in. With build ID mmap events
> the other major, minor and inode varialbes aren't filled in. Change
> the dso_id implementation to make optional values explicit, rather
> than injecting a dso_id we want to improve it during find operations,
> add the buildid to the dso_id for sorting and so that matching fails
> when build IDs vary between DSOs.
>
> Mark the callchain for buildids and not just the sample IP, fixing
> missing DSOs.
>
> Fix sample__for_each_callchain_node to populate the map even when
> symbols aren't computed.
>
> Other minor bits of build_id clean up.
>
> v3: Ensure the struct build_id is initialized empty prior to use as
> read paths may fail (Namhyung).
>
> v2: Make marking DSOs still the default even with the defaulted build
> ID mmap. The command line option still disables this to avoid
> regressions. Add callchain patches and jitdump fix.

Ping. Thanks,
Ian

> Ian Rogers (9):
> perf callchain: Always populate the addr_location map when adding IP
> perf build-id: Reduce size of "size" variable
> perf build-id: Truncate to avoid overflowing the build_id data
> perf build-id: Change sprintf functions to snprintf
> perf build-id: Mark DSO in sample callchains
> perf build-id: Ensure struct build_id is empty before use
> perf dso: Move build_id to dso_id
> perf jitdump: Directly mark the jitdump DSO
> perf record: Make --buildid-mmap the default
>
> tools/perf/bench/inject-buildid.c | 2 +-
> tools/perf/builtin-buildid-cache.c | 20 ++--
> tools/perf/builtin-buildid-list.c | 6 +-
> tools/perf/builtin-inject.c | 36 +++---
> tools/perf/builtin-record.c | 33 ++++--
> tools/perf/builtin-report.c | 11 +-
> tools/perf/include/perf/perf_dlfilter.h | 2 +-
> tools/perf/tests/pe-file-parsing.c | 2 +-
> tools/perf/tests/sdt.c | 2 +-
> tools/perf/tests/symbols.c | 4 +-
> tools/perf/util/build-id.c | 63 ++++++----
> tools/perf/util/build-id.h | 8 +-
> tools/perf/util/debuginfo.c | 2 +-
> tools/perf/util/disasm.c | 2 +-
> tools/perf/util/dso.c | 111 ++++++++++--------
> tools/perf/util/dso.h | 75 ++++++------
> tools/perf/util/dsos.c | 20 ++--
> tools/perf/util/event.c | 2 +-
> tools/perf/util/header.c | 2 +-
> tools/perf/util/jitdump.c | 21 +++-
> tools/perf/util/machine.c | 34 +++---
> tools/perf/util/map.c | 15 ++-
> tools/perf/util/map.h | 5 +-
> tools/perf/util/probe-event.c | 3 +-
> tools/perf/util/probe-file.c | 4 +-
> tools/perf/util/probe-finder.c | 3 +-
> .../scripting-engines/trace-event-python.c | 7 +-
> tools/perf/util/sort.c | 27 +++--
> tools/perf/util/symbol-minimal.c | 2 +-
> tools/perf/util/symbol.c | 7 +-
> tools/perf/util/symbol_conf.h | 2 +-
> tools/perf/util/synthetic-events.c | 44 ++++---
> tools/perf/util/thread.c | 8 +-
> tools/perf/util/thread.h | 2 +-
> 34 files changed, 337 insertions(+), 250 deletions(-)
>
> --
> 2.49.0.901.g37484f566f-goog
>