From: Donglin Peng <dolinux.peng@gmail.com>
To: ast@kernel.org, andrii.nakryiko@gmail.com
Cc: eddyz87@gmail.com, zhangxiaoqin@xiaomi.com,
ihor.solodrai@linux.dev, linux-kernel@vger.kernel.org,
bpf@vger.kernel.org, pengdonglin <pengdonglin@xiaomi.com>
Subject: [PATCH bpf-next v9 00/10] Improve the performance of BTF type lookups with binary search
Date: Mon, 8 Dec 2025 14:23:43 +0800 [thread overview]
Message-ID: <20251208062353.1702672-1-dolinux.peng@gmail.com> (raw)
From: pengdonglin <pengdonglin@xiaomi.com>
The series addresses the performance limitations of linear search in large
BTFs by:
1. Adding BTF permutation support
2. Using resolve_btfids to sort BTF during the build phase
3. Checking BTF sorting
4. Using binary search when looking up types
Patch #1 introduces an interface for btf__permute in libbpf to relay out BTF.
Patch #2 adds test cases to validate the functionality of btf__permute in base
and split BTF scenarios.
Patch #3 introduces a new phase in the resolve_btfids tool to sort BTF by name
in ascending order.
Patches #4-#7 implement the sorting check and binary search.
Patches #8-#10 optimize type lookup performance of some functions by skipping
anonymous types or invoking btf_find_by_name_kind.
Here is a simple performance result [1] to find 60,995 named types in vmlinux
BTF:
./vmtest.sh -- ./test_progs -t btf_permute/perf -v
Results:
| Condition | Lookup Time | Improvement |
|--------------------|-------------|--------------|
| Unsorted (Linear) | 27,697.4 ms | Baseline |
| Sorted (Binary) | 9.7 ms | 2855x faster |
The binary search implementation reduces lookup time from 27.7 seconds to 9.7
milliseconds, achieving a **2855x** speedup for large-scale type queries.
Changelog:
v9:
- Optimize the performance of the function determine_ptr_size by invoking
btf__find_by_name_kind
- Optimize the performance of btf_find_decl_tag_value/btf_prepare_func_args/
bpf_core_add_cands by skipping anonymous types
- Rebase the patch series onto Ihor's v3 patch series [3]
v8
- Link: https://lore.kernel.org/bpf/20251126085025.784288-1-dolinux.peng@gmail.com/
- Remove the type dropping feature of btf__permute (Andrii)
- Refactor the code of btf__permute (Andrii, Eduard)
- Make the self-test code cleaner (Eduard)
- Reconstruct the BTF sorting patch based on Ihor's patch series [2]
- Simplify the sorting logic and place anonymous types before named types
(Andrii, Eduard)
- Optimize type lookup performance of two kernel functions
- Refactoring the binary search and type lookup logic achieves a 4.2%
performance gain, reducing the average lookup time (via the perf test
code in [1] for 60,995 named types in vmlinux BTF) from 10,217 us (v7) to
9,783 us (v8).
v7:
- Link: https://lore.kernel.org/all/20251119031531.1817099-1-dolinux.peng@gmail.com/
- btf__permute API refinement: Adjusted id_map and id_map_cnt parameter
usage so that for base BTF, id_map[0] now contains the new id of original
type id 1 (instead of VOID type id 0), improving logical consistency
- Selftest updates: Modified test cases to align with the API usage changes
- Refactor the code of resolve_btfids
v6:
- Link: https://lore.kernel.org/all/20251117132623.3807094-1-dolinux.peng@gmail.com/
- ID Map-based reimplementation of btf__permute (Andrii)
- Build-time BTF sorting using resolve_btfids (Alexei, Eduard)
- Binary search method refactoring (Andrii)
- Enhanced selftest coverage
v5:
- Link: https://lore.kernel.org/all/20251106131956.1222864-1-dolinux.peng@gmail.com/
- Refactor binary search implementation for improved efficiency
(Thanks to Andrii and Eduard)
- Extend btf__permute interface with 'ids_sz' parameter to support
type dropping feature (suggested by Andrii). Plan subsequent reimplementation of
id_map version for comparative analysis with current sequence interface
- Add comprehensive test coverage for type dropping functionality
- Enhance function comment clarity and accuracy
v4:
- Link: https://lore.kernel.org/all/20251104134033.344807-1-dolinux.peng@gmail.com/
- Abstracted btf_dedup_remap_types logic into a helper function (suggested by Eduard).
- Removed btf_sort.c and implemented sorting separately for libbpf and kernel (suggested by Andrii).
- Added test cases for both base BTF and split BTF scenarios (suggested by Eduard).
- Added validation for name-only sorting of types (suggested by Andrii)
- Refactored btf__permute implementation to reduce complexity (suggested by Andrii)
- Add doc comments for btf__permute (suggested by Andrii)
v3:
- Link: https://lore.kernel.org/all/20251027135423.3098490-1-dolinux.peng@gmail.com/
- Remove sorting logic from libbpf and provide a generic btf__permute() interface (suggested
by Andrii)
- Omitted the search direction patch to avoid conflicts with base BTF (suggested by Eduard).
- Include btf_sort.c directly in btf.c to reduce function call overhead
v2:
- Link: https://lore.kernel.org/all/20251020093941.548058-1-dolinux.peng@gmail.com/
- Moved sorting to the build phase to reduce overhead (suggested by Alexei).
- Integrated sorting into btf_dedup_compact_and_sort_types (suggested by Eduard).
- Added sorting checks during BTF parsing.
- Consolidated common logic into btf_sort.c for sharing (suggested by Alan).
v1:
- Link: https://lore.kernel.org/all/20251013131537.1927035-1-dolinux.peng@gmail.com/
[1] https://github.com/pengdonglin137/btf_sort_test
[2] https://lore.kernel.org/bpf/20251126012656.3546071-1-ihor.solodrai@linux.dev/
[3] https://lore.kernel.org/bpf/20251205223046.4155870-1-ihor.solodrai@linux.dev/
pengdonglin (10):
libbpf: Add BTF permutation support for type reordering
selftests/bpf: Add test cases for btf__permute functionality
tools/resolve_btfids: Support BTF sorting feature
libbpf: Optimize type lookup with binary search for sorted BTF
libbpf: Verify BTF Sorting
btf: Optimize type lookup with binary search
btf: Verify BTF Sorting
bpf: Skip anonymous types in type lookup for performance
bpf: Optimize the performance of find_bpffs_btf_enums
libbpf: Optimize the performance of determine_ptr_size
include/linux/btf.h | 1 +
kernel/bpf/btf.c | 158 ++++++++-
kernel/bpf/inode.c | 42 ++-
kernel/bpf/verifier.c | 7 +-
tools/bpf/resolve_btfids/main.c | 68 ++++
tools/lib/bpf/btf.c | 302 ++++++++++++++++--
tools/lib/bpf/btf.h | 36 +++
tools/lib/bpf/libbpf.map | 1 +
.../selftests/bpf/prog_tests/btf_permute.c | 228 +++++++++++++
9 files changed, 766 insertions(+), 77 deletions(-)
create mode 100644 tools/testing/selftests/bpf/prog_tests/btf_permute.c
--
2.34.1
next reply other threads:[~2025-12-08 6:23 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-08 6:23 Donglin Peng [this message]
2025-12-08 6:23 ` [PATCH bpf-next v9 01/10] libbpf: Add BTF permutation support for type reordering Donglin Peng
2025-12-16 22:00 ` Eduard Zingerman
2025-12-16 22:47 ` Andrii Nakryiko
2025-12-17 3:30 ` Donglin Peng
2025-12-08 6:23 ` [PATCH bpf-next v9 02/10] selftests/bpf: Add test cases for btf__permute functionality Donglin Peng
2025-12-16 22:00 ` Eduard Zingerman
2025-12-08 6:23 ` [PATCH bpf-next v9 03/10] tools/resolve_btfids: Support BTF sorting feature Donglin Peng
2025-12-16 22:13 ` Eduard Zingerman
2025-12-08 6:23 ` [PATCH bpf-next v9 04/10] libbpf: Optimize type lookup with binary search for sorted BTF Donglin Peng
2025-12-16 23:38 ` Eduard Zingerman
2025-12-16 23:43 ` Eduard Zingerman
2025-12-17 2:46 ` Donglin Peng
2025-12-17 2:32 ` Donglin Peng
2025-12-17 2:34 ` Donglin Peng
2025-12-17 2:57 ` Eduard Zingerman
2025-12-08 6:23 ` [PATCH bpf-next v9 05/10] libbpf: Verify BTF Sorting Donglin Peng
2025-12-17 0:32 ` Eduard Zingerman
2025-12-17 3:19 ` Donglin Peng
2025-12-08 6:23 ` [PATCH bpf-next v9 06/10] btf: Optimize type lookup with binary search Donglin Peng
2025-12-08 6:23 ` [PATCH bpf-next v9 07/10] btf: Verify BTF Sorting Donglin Peng
2025-12-09 3:21 ` Donglin Peng
2025-12-17 0:41 ` Eduard Zingerman
2025-12-17 0:48 ` Eduard Zingerman
2025-12-17 3:26 ` Donglin Peng
2025-12-08 6:23 ` [PATCH bpf-next v9 08/10] bpf: Skip anonymous types in type lookup for performance Donglin Peng
2025-12-08 6:36 ` Donglin Peng
2025-12-17 6:55 ` Eduard Zingerman
2025-12-17 9:21 ` Donglin Peng
2025-12-17 17:29 ` Eduard Zingerman
2025-12-18 9:16 ` Donglin Peng
2025-12-08 6:23 ` [PATCH bpf-next v9 09/10] bpf: Optimize the performance of find_bpffs_btf_enums Donglin Peng
2025-12-17 6:58 ` Eduard Zingerman
2025-12-08 6:23 ` [PATCH bpf-next v9 10/10] libbpf: Optimize the performance of determine_ptr_size Donglin Peng
2025-12-17 7:06 ` Eduard Zingerman
2025-12-17 8:38 ` Donglin Peng
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=20251208062353.1702672-1-dolinux.peng@gmail.com \
--to=dolinux.peng@gmail.com \
--cc=andrii.nakryiko@gmail.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=eddyz87@gmail.com \
--cc=ihor.solodrai@linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=pengdonglin@xiaomi.com \
--cc=zhangxiaoqin@xiaomi.com \
/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.