[PATCH v2 0/8] perf: Default use of build IDs and improvements

From: Ian Rogers
Date: Thu Apr 24 2025 - 15:58:45 EST


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.

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.

Ian Rogers (8):
perf callchain: Always populate the addr_location map when adding IP
perf jitdump: Directly mark the jitdump DSO
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 dso: Move build_id to dso_id
perf record: Make --buildid-mmap the default

tools/perf/builtin-buildid-cache.c | 12 +-
tools/perf/builtin-buildid-list.c | 6 +-
tools/perf/builtin-inject.c | 32 ++---
tools/perf/builtin-record.c | 33 ++++--
tools/perf/builtin-report.c | 11 +-
tools/perf/include/perf/perf_dlfilter.h | 2 +-
tools/perf/tests/symbols.c | 4 +-
tools/perf/util/build-id.c | 57 +++++----
tools/perf/util/build-id.h | 8 +-
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-file.c | 4 +-
.../scripting-engines/trace-event-python.c | 7 +-
tools/perf/util/sort.c | 27 +++--
tools/perf/util/symbol.c | 2 +-
tools/perf/util/symbol_conf.h | 2 +-
tools/perf/util/synthetic-events.c | 42 ++++---
tools/perf/util/thread.c | 8 +-
tools/perf/util/thread.h | 2 +-
27 files changed, 314 insertions(+), 232 deletions(-)

--
2.49.0.850.g28803427d3-goog