From: Samuel Wu <wusamuel@google.com>
To: Jonathan Corbet <corbet@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
Randy Dunlap <rdunlap@infradead.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
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>,
Ihor Solodrai <ihor.solodrai@linux.dev>,
Nathan Chancellor <nathan@kernel.org>,
Nick Desaulniers <ndesaulniers@google.com>,
Bill Wendling <morbo@google.com>,
Justin Stitt <justinstitt@google.com>
Cc: Samuel Wu <wusamuel@google.com>,
kernel-team@android.com, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org, linux-doc@vger.kernel.org,
bpf@vger.kernel.org, linux-kselftest@vger.kernel.org,
llvm@lists.linux.dev
Subject: [PATCH bpf-next v2 0/6] kallsyms: Add KALLSYMS_QUERY ioctl to /proc/kallsyms
Date: Thu, 22 Oct 2026 17:16:01 -0700 [thread overview]
Message-ID: <20261023001603.560210-8-wusamuel@google.com> (raw)
/proc/kallsyms is the primary interface for userspace to query the kernel
symbol table. However, resolving even a handful of symbols or addresses
requires reading and parsing the entire text file, which is often several
megabytes and takes thousands of read() syscalls.
This patchseries adds an extensible KALLSYMS_QUERY ioctl() to
/proc/kallsyms with two query modes:
1. KALLSYMS_QUERY_BY_SYMBOL: Resolves a NUL-terminated symbol name to its
address. Searches vmlinux first with binary search, then falls back to
loaded modules. Matches names exactly (without stripping .llvm.<hash>
suffixes) and rejects ambiguous symbols with different addresses.
2. KALLSYMS_QUERY_BY_ADDR: Resolves a kernel address to the symbol's
name, covering vmlinux, loaded modules, BPF JIT programs, and ftrace
trampolines.
Access control matches reading /proc/kallsyms directly: the ioctl checks
the kallsyms_show_value() result cached at open() time and returns -EPERM
whenever symbol addresses would be masked to zero.
There were significant performance improvements with this patchseries:
1. libbpf typeless ksym resolution (8-CPU x86-64 Cuttlefish VM, BPF
object with 11 typeless ksyms):
Metric Text parse KALLSYMS_QUERY Change
-------------------------- ---------- --------------- ------------
Resolve 11 typeless ksyms 157 ms 0.7 ms ~220x faster
2. Perfetto symbolization & callstack sampling (8-CPU x86-64 VM,
175k-line /proc/kallsyms):
Metric Text parse KALLSYMS_QUERY Change
-------------------------- ---------- --------------- ------------
Init 155.7 ms 0.44 ms 352x faster
50k lookups 25.2 ms 2.2 ms 11.7x faster
traced_probes VmRSS 15.1 MB 4.8 MB -68%
traced_probes VmHWM 23.9 MB 4.8 MB -80%
Changes in v2:
- Replaced the BPF syscall approach in libbpf with the more generalizable
KALLSYMS_QUERY ioctl() on /proc/kallsyms, per Andrii
- Added KALLSYMS_QUERY_BY_ADDR for address-to-symbol lookup
- Added proc and bpf selftests and procfs documentation
- v1 link: https://lore.kernel.org/all/20261009130708.1370675-1-wusamuel@google.com/
Samuel Wu (6):
kallsyms: Add KALLSYMS_QUERY ioctl to /proc/kallsyms
tools: Copy KALLSYMS_QUERY definitions to linux/fs.h
docs/procfs: Document KALLSYMS_QUERY ioctl on /proc/kallsyms
libbpf: Resolve typeless ksyms via KALLSYMS_QUERY ioctl
selftests/bpf: Test typeless module ksym resolution
selftests/proc: Add KALLSYMS_QUERY tests
Documentation/filesystems/proc.rst | 15 ++
include/uapi/linux/fs.h | 41 ++++
kernel/kallsyms.c | 132 +++++++++++
tools/include/uapi/linux/fs.h | 41 ++++
tools/lib/bpf/libbpf.c | 78 ++++++-
.../testing/selftests/bpf/prog_tests/ksyms.c | 7 +
.../testing/selftests/bpf/progs/test_ksyms.c | 3 +
tools/testing/selftests/proc/.gitignore | 1 +
tools/testing/selftests/proc/Makefile | 1 +
.../selftests/proc/proc-kallsyms-query.c | 213 ++++++++++++++++++
10 files changed, 530 insertions(+), 2 deletions(-)
create mode 100644 tools/testing/selftests/proc/proc-kallsyms-query.c
--
2.56.0.257.gf7497c7d27-goog
next reply other threads:[~2026-10-23 0:17 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-23 0:16 Samuel Wu [this message]
2026-10-23 0:16 ` [PATCH bpf-next v2 1/6] kallsyms: Add KALLSYMS_QUERY ioctl to /proc/kallsyms Samuel Wu
2026-10-23 0:51 ` bot+bpf-ci
2026-10-27 21:31 ` Samuel Wu
2026-10-25 23:29 ` Randy Dunlap
2026-10-27 21:33 ` Samuel Wu
2026-10-27 22:24 ` Andrii Nakryiko
2026-10-29 21:58 ` Samuel Wu
2026-10-29 22:09 ` Andrii Nakryiko
2026-10-29 22:35 ` Samuel Wu
2026-10-29 22:54 ` Andrii Nakryiko
2026-10-30 0:23 ` Samuel Wu
2026-10-28 13:40 ` David Laight
2026-10-29 22:05 ` Samuel Wu
2026-10-29 22:16 ` Andrii Nakryiko
2026-10-30 0:28 ` Samuel Wu
2026-10-23 0:16 ` [PATCH bpf-next v2 2/6] tools: Copy KALLSYMS_QUERY definitions to linux/fs.h Samuel Wu
2026-10-23 0:16 ` [PATCH bpf-next v2 3/6] docs/procfs: Document KALLSYMS_QUERY ioctl on /proc/kallsyms Samuel Wu
2026-10-23 0:16 ` [PATCH bpf-next v2 4/6] libbpf: Resolve typeless ksyms via KALLSYMS_QUERY ioctl Samuel Wu
2026-10-23 0:51 ` bot+bpf-ci
2026-10-27 21:45 ` Samuel Wu
2026-10-26 9:28 ` Jiri Olsa
2026-10-27 22:07 ` Samuel Wu
2026-10-28 14:01 ` David Laight
2026-10-29 21:35 ` Samuel Wu
2026-10-29 22:33 ` David Laight
2026-10-23 0:16 ` [PATCH bpf-next v2 5/6] selftests/bpf: Test typeless module ksym resolution Samuel Wu
2026-10-23 0:16 ` [PATCH bpf-next v2 6/6] selftests/proc: Add KALLSYMS_QUERY tests Samuel Wu
2026-10-23 0:25 ` sashiko-bot
2026-10-27 21:36 ` Samuel Wu
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=20261023001603.560210-8-wusamuel@google.com \
--to=wusamuel@google.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=brauner@kernel.org \
--cc=corbet@lwn.net \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=emil@etsalapatis.com \
--cc=ihor.solodrai@linux.dev \
--cc=jack@suse.cz \
--cc=jolsa@kernel.org \
--cc=justinstitt@google.com \
--cc=kernel-team@android.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=martin.lau@linux.dev \
--cc=memxor@gmail.com \
--cc=morbo@google.com \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=rdunlap@infradead.org \
--cc=skhan@linuxfoundation.org \
--cc=song@kernel.org \
--cc=viro@zeniv.linux.org.uk \
--cc=yonghong.song@linux.dev \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.