From: Ian Rogers <irogers@google.com>
To: Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
John Fastabend <john.fastabend@gmail.com>,
Andrii Nakryiko <andrii@kernel.org>,
Eduard Zingerman <eddyz87@gmail.com>,
Kumar Kartikeya Dwivedi <memxor@gmail.com>,
Martin KaFai Lau <martin.lau@linux.dev>,
Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
Jiri Olsa <jolsa@kernel.org>,
Emil Tsalapatis <emil@etsalapatis.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
James Clark <james.clark@linaro.org>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Mike Leach <mike.leach@arm.com>, Leo Yan <leo.yan@arm.com>,
John Garry <john.g.garry@oracle.com>,
Will Deacon <will@kernel.org>, Thomas Gleixner <tglx@kernel.org>,
Dapeng Mi <dapeng1.mi@linux.intel.com>,
Ravi Bangoria <ravi.bangoria@amd.com>,
Swapnil Sapkal <swapnil.sapkal@amd.com>,
Thomas Falcon <thomas.falcon@intel.com>,
Thomas Richter <tmricht@linux.ibm.com>,
Dmitrii Dolgov <9erthalion6@gmail.com>,
Eric Biggers <ebiggers@kernel.org>, Zecheng Li <zli94@ncsu.edu>,
Gabriel Marin <gmx@google.com>,
Tengda Wu <wutengda@huaweicloud.com>,
Derek Foreman <derek.foreman@collabora.com>,
Tanushree Shah <tshah@linux.ibm.com>,
Ankur Arora <ankur.a.arora@oracle.com>,
Aaron Tomlin <atomlin@atomlin.com>, tanze <tanze@kylinos.cn>,
Rui Qi <qirui.001@bytedance.com>,
Howard Chu <howardchu95@gmail.com>, Chuck Lever <cel@kernel.org>,
Shimin Guo <shimin.guo@skydio.com>,
Alessio Podda <aleph.pi.gh@gmail.com>,
linux-kernel@vger.kernel.org, bpf@vger.kernel.org,
linux-perf-users@vger.kernel.org, coresight@lists.linaro.org,
linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH v1 0/8] perf/core, perf/tools: Add PERF_SAMPLE_BUILD_ID_OFFSET support
Date: Fri, 7 Aug 2026 00:18:10 -0700 [thread overview]
Message-ID: <20260807071818.718751-1-irogers@google.com> (raw)
This patch series introduces PERF_SAMPLE_BUILD_ID_OFFSET to the
perf_event UAPI and implements full support across both the kernel
and perf tools.
Background & Motivation:
In order for perf to translate virtual addresses of samples into
symbols a file and offset within the file are needed. During event
synthesis perf will create mmap events to facilitate the translation
of a virtual address to a file and offset by modelling the address
space of a process. By directly recording in a sample the Build ID of
a file and the offset within it, no synthesis is necessary. The Build
ID and offset as a pair are much larger than a virtual address, so
there is a trade-off between synthesis cost and extra size for
samples. These changes just facilitate Build ID and offset as a choice
for perf samples and the user can have the choice to use it when they
believe it is advantageous.
In practice perf still needs to map a build ID to a file, so by
default this change keeps synthesis to allow this. It is expected a
user that knows their build IDs, say through debuginfod, will disable
this option with say --synth=no.
The kernel support uses the existing build ID and offset support used
by BPF stack traces.
The Build ID and offset samples inherently don't leak ASLR
information. As with the ASLR remapping work in perf inject, support
is added to migrate virtual addresses to Build ID and offset for the
purposes of testing without kernel support.
Series Overview:
- Patch 1: Factor struct perf_build_id into top-level header structure.
- Patch 2: Add PERF_SAMPLE_BUILD_ID_OFFSET to UAPI.
- Patch 3: Implement kernel-side sampling support in
perf_output_sample() using stack_map_get_build_id_offset().
- Patch 4: Refactor perf tools thread__find_map and symbol lookup APIs
to accept struct perf_sample.
- Patch 5: Add perf tools internal parsing and symbol resolution via
Build ID + offset.
- Patch 6: Extend perf inject with --buildid-offset to convert sample
files.
- Patch 7: Add --buildid-offset option to perf record.
- Patch 8: Add unit and shell test coverage (bid-offset test and
inject_bid_offset.sh).
Testing & Verification:
The series was verified using QEMU hypervisor testing with kernel
builds and perf test.
Linux Plumbers Tracing Miniconference:
I submitted a proposal/abstract to talk about these changes to the
Tracing Micro Conference at Linux Plumbers Conference 2026 in Prague.
Ian Rogers (8):
perf event: Factor build_id out into its own top-level struct
perf/core: Add BUILD_ID_OFFSET to UAPI
perf/core: Implement BUILD_ID_OFFSET sample type
perf: Refactor thread map and symbol APIs to take perf_sample
perf tools: Internal support for BUILD_ID_OFFSET
perf inject: Extend perf inject to support bid_offset conversion
perf record: Add --buildid-offset option
perf tests: Add build_id_offset test coverage
include/linux/bpf.h | 13 +
include/uapi/linux/perf_event.h | 4 +-
kernel/bpf/stackmap.c | 2 +-
kernel/events/core.c | 85 ++-
tools/include/uapi/linux/perf_event.h | 30 +-
tools/lib/perf/include/perf/event.h | 18 +-
.../arch/powerpc/util/skip-callchain-idx.c | 4 +-
tools/perf/builtin-inject.c | 23 +-
tools/perf/builtin-record.c | 7 +
tools/perf/builtin-script.c | 49 +-
tools/perf/builtin-timechart.c | 4 +-
tools/perf/builtin-trace.c | 12 +-
tools/perf/tests/Build | 1 +
tools/perf/tests/bid-offset.c | 60 +++
tools/perf/tests/builtin-test.c | 1 +
tools/perf/tests/code-reading.c | 4 +-
tools/perf/tests/mmap-thread-lookup.c | 45 +-
tools/perf/tests/sample-parsing.c | 37 +-
tools/perf/tests/shell/inject_bid_offset.sh | 170 ++++++
tools/perf/tests/shell/record.sh | 69 +++
tools/perf/tests/tests.h | 1 +
tools/perf/util/Build | 1 +
tools/perf/util/annotate-data.c | 5 +-
tools/perf/util/aslr.c | 16 +-
tools/perf/util/build-id.c | 5 +-
tools/perf/util/capstone.c | 4 +-
tools/perf/util/cs-etm.c | 4 +-
tools/perf/util/data-convert-json.c | 4 +-
tools/perf/util/debug.c | 4 +-
tools/perf/util/dlfilter.c | 8 +-
tools/perf/util/event.c | 93 ++--
tools/perf/util/evsel.c | 35 ++
tools/perf/util/evsel.h | 3 +-
tools/perf/util/evsel_fprintf.c | 2 +-
tools/perf/util/inject_bid_offset.c | 504 ++++++++++++++++++
tools/perf/util/inject_bid_offset.h | 21 +
tools/perf/util/intel-pt.c | 12 +-
tools/perf/util/machine.c | 106 ++--
tools/perf/util/maps.c | 29 +
tools/perf/util/maps.h | 2 +
tools/perf/util/perf_event_attr_fprintf.c | 3 +-
tools/perf/util/python.c | 13 +-
tools/perf/util/record.h | 1 +
tools/perf/util/sample.h | 13 +
.../scripting-engines/trace-event-python.c | 20 +-
tools/perf/util/synthetic-events.c | 60 ++-
tools/perf/util/thread.c | 11 +-
tools/perf/util/thread.h | 14 +-
tools/perf/util/unwind-libdw.c | 7 +-
tools/perf/util/unwind-libunwind.c | 8 +-
50 files changed, 1473 insertions(+), 174 deletions(-)
create mode 100644 tools/perf/tests/bid-offset.c
create mode 100755 tools/perf/tests/shell/inject_bid_offset.sh
create mode 100644 tools/perf/util/inject_bid_offset.c
create mode 100644 tools/perf/util/inject_bid_offset.h
--
2.55.0.679.g6767b8d81c-goog
next reply other threads:[~2026-08-07 7:18 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-07 7:18 Ian Rogers [this message]
2026-08-07 7:18 ` [RFC PATCH v1 1/8] perf event: Factor build_id out into its own top-level struct Ian Rogers
2026-08-07 7:33 ` sashiko-bot
2026-08-07 7:18 ` [RFC PATCH v1 2/8] perf/core: Add BUILD_ID_OFFSET to UAPI Ian Rogers
2026-08-07 7:42 ` sashiko-bot
2026-08-07 7:18 ` [RFC PATCH v1 3/8] perf/core: Implement BUILD_ID_OFFSET sample type Ian Rogers
2026-08-07 7:54 ` sashiko-bot
2026-08-07 7:18 ` [RFC PATCH v1 4/8] perf: Refactor thread map and symbol APIs to take perf_sample Ian Rogers
2026-08-07 8:20 ` sashiko-bot
2026-08-07 7:18 ` [RFC PATCH v1 5/8] perf tools: Internal support for BUILD_ID_OFFSET Ian Rogers
2026-08-07 8:41 ` sashiko-bot
2026-08-07 7:18 ` [RFC PATCH v1 6/8] perf inject: Extend perf inject to support bid_offset conversion Ian Rogers
2026-08-07 9:18 ` sashiko-bot
2026-08-07 7:18 ` [RFC PATCH v1 7/8] perf record: Add --buildid-offset option Ian Rogers
2026-08-07 9:47 ` sashiko-bot
2026-08-07 7:18 ` [RFC PATCH v1 8/8] perf tests: Add build_id_offset test coverage Ian Rogers
2026-08-07 9:58 ` sashiko-bot
2026-08-07 11:18 ` [RFC PATCH v1 0/8] perf/core, perf/tools: Add PERF_SAMPLE_BUILD_ID_OFFSET support Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260807071818.718751-1-irogers@google.com \
--to=irogers@google.com \
--cc=9erthalion6@gmail.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=aleph.pi.gh@gmail.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=andrii@kernel.org \
--cc=ankur.a.arora@oracle.com \
--cc=ast@kernel.org \
--cc=atomlin@atomlin.com \
--cc=bpf@vger.kernel.org \
--cc=cel@kernel.org \
--cc=coresight@lists.linaro.org \
--cc=daniel@iogearbox.net \
--cc=dapeng1.mi@linux.intel.com \
--cc=derek.foreman@collabora.com \
--cc=ebiggers@kernel.org \
--cc=eddyz87@gmail.com \
--cc=emil@etsalapatis.com \
--cc=gmx@google.com \
--cc=howardchu95@gmail.com \
--cc=james.clark@linaro.org \
--cc=john.fastabend@gmail.com \
--cc=john.g.garry@oracle.com \
--cc=jolsa@kernel.org \
--cc=leo.yan@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=martin.lau@linux.dev \
--cc=memxor@gmail.com \
--cc=mhiramat@kernel.org \
--cc=mike.leach@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=qirui.001@bytedance.com \
--cc=ravi.bangoria@amd.com \
--cc=rostedt@goodmis.org \
--cc=shimin.guo@skydio.com \
--cc=song@kernel.org \
--cc=suzuki.poulose@arm.com \
--cc=swapnil.sapkal@amd.com \
--cc=tanze@kylinos.cn \
--cc=tglx@kernel.org \
--cc=thomas.falcon@intel.com \
--cc=tmricht@linux.ibm.com \
--cc=tshah@linux.ibm.com \
--cc=will@kernel.org \
--cc=wutengda@huaweicloud.com \
--cc=yonghong.song@linux.dev \
--cc=zli94@ncsu.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox