public inbox for bpf@vger.kernel.org
 help / color / mirror / Atom feed
From: Donglin Peng <dolinux.peng@gmail.com>
To: ast@kernel.org, andrii.nakryiko@gmail.com, eddyz87@gmail.com
Cc: zhangxiaoqin@xiaomi.com, ihor.solodrai@linux.dev,
	linux-kernel@vger.kernel.org, bpf@vger.kernel.org,
	Donglin Peng <pengdonglin@xiaomi.com>,
	Alan Maguire <alan.maguire@oracle.com>
Subject: [PATCH bpf-next v12 08/11] bpf: Skip anonymous types in type lookup for performance
Date: Fri,  9 Jan 2026 21:00:00 +0800	[thread overview]
Message-ID: <20260109130003.3313716-9-dolinux.peng@gmail.com> (raw)
In-Reply-To: <20260109130003.3313716-1-dolinux.peng@gmail.com>

From: Donglin Peng <pengdonglin@xiaomi.com>

Currently, vmlinux and kernel module BTFs are unconditionally
sorted during the build phase, with named types placed at the
end. Thus, anonymous types should be skipped when starting the
search. In my vmlinux BTF, the number of anonymous types is
61,747, which means the loop count can be reduced by 61,747.

Cc: Eduard Zingerman <eddyz87@gmail.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: Alan Maguire <alan.maguire@oracle.com>
Cc: Ihor Solodrai <ihor.solodrai@linux.dev>
Cc: Xiaoqin Zhang <zhangxiaoqin@xiaomi.com>
Signed-off-by: Donglin Peng <pengdonglin@xiaomi.com>
Acked-by: Eduard Zingerman <eddyz87@gmail.com>
---
 kernel/bpf/btf.c      | 10 ++++++----
 kernel/bpf/verifier.c |  7 +------
 2 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c
index 12eecf59d71f..686dbe18a97a 100644
--- a/kernel/bpf/btf.c
+++ b/kernel/bpf/btf.c
@@ -3534,7 +3534,8 @@ const char *btf_find_decl_tag_value(const struct btf *btf, const struct btf_type
 	const struct btf_type *t;
 	int len, id;
 
-	id = btf_find_next_decl_tag(btf, pt, comp_idx, tag_key, 0);
+	id = btf_find_next_decl_tag(btf, pt, comp_idx, tag_key,
+				    btf_named_start_id(btf, false) - 1);
 	if (id < 0)
 		return ERR_PTR(id);
 
@@ -7844,12 +7845,13 @@ int btf_prepare_func_args(struct bpf_verifier_env *env, int subprog)
 			tname);
 		return -EINVAL;
 	}
+
 	/* Convert BTF function arguments into verifier types.
 	 * Only PTR_TO_CTX and SCALAR are supported atm.
 	 */
 	for (i = 0; i < nargs; i++) {
 		u32 tags = 0;
-		int id = 0;
+		int id = btf_named_start_id(btf, false) - 1;
 
 		/* 'arg:<tag>' decl_tag takes precedence over derivation of
 		 * register type from BTF type itself
@@ -9331,7 +9333,7 @@ bpf_core_find_cands(struct bpf_core_ctx *ctx, u32 local_type_id)
 	}
 
 	/* Attempt to find target candidates in vmlinux BTF first */
-	cands = bpf_core_add_cands(cands, main_btf, 1);
+	cands = bpf_core_add_cands(cands, main_btf, btf_named_start_id(main_btf, true));
 	if (IS_ERR(cands))
 		return ERR_CAST(cands);
 
@@ -9363,7 +9365,7 @@ bpf_core_find_cands(struct bpf_core_ctx *ctx, u32 local_type_id)
 		 */
 		btf_get(mod_btf);
 		spin_unlock_bh(&btf_idr_lock);
-		cands = bpf_core_add_cands(cands, mod_btf, btf_nr_types(main_btf));
+		cands = bpf_core_add_cands(cands, mod_btf, btf_named_start_id(mod_btf, true));
 		btf_put(mod_btf);
 		if (IS_ERR(cands))
 			return ERR_CAST(cands);
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 53635ea2e41b..53aa8f503775 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -20652,12 +20652,7 @@ static int find_btf_percpu_datasec(struct btf *btf)
 	 * types to look at only module's own BTF types.
 	 */
 	n = btf_nr_types(btf);
-	if (btf_is_module(btf))
-		i = btf_nr_types(btf_vmlinux);
-	else
-		i = 1;
-
-	for(; i < n; i++) {
+	for (i = btf_named_start_id(btf, true); i < n; i++) {
 		t = btf_type_by_id(btf, i);
 		if (BTF_INFO_KIND(t->info) != BTF_KIND_DATASEC)
 			continue;
-- 
2.34.1


  parent reply	other threads:[~2026-01-09 13:00 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-09 12:59 [PATCH bpf-next v12 00/11] Improve the performance of BTF type lookups with binary search Donglin Peng
2026-01-09 12:59 ` [PATCH bpf-next v12 01/11] libbpf: Add BTF permutation support for type reordering Donglin Peng
2026-01-09 12:59 ` [PATCH bpf-next v12 02/11] selftests/bpf: Add test cases for btf__permute functionality Donglin Peng
2026-01-09 12:59 ` [PATCH bpf-next v12 03/11] tools/resolve_btfids: Support BTF sorting feature Donglin Peng
2026-01-14  0:29   ` Andrii Nakryiko
2026-01-14  1:44     ` Donglin Peng
2026-01-09 12:59 ` [PATCH bpf-next v12 04/11] libbpf: Optimize type lookup with binary search for sorted BTF Donglin Peng
2026-01-14  0:29   ` Andrii Nakryiko
2026-01-14  1:49     ` Donglin Peng
2026-01-14  2:21       ` Donglin Peng
2026-01-09 12:59 ` [PATCH bpf-next v12 05/11] libbpf: Verify BTF sorting Donglin Peng
2026-01-09 12:59 ` [PATCH bpf-next v12 06/11] btf: Optimize type lookup with binary search Donglin Peng
2026-01-14  0:29   ` Andrii Nakryiko
2026-01-14  1:49     ` Donglin Peng
2026-01-09 12:59 ` [PATCH bpf-next v12 07/11] btf: Verify BTF sorting Donglin Peng
2026-01-14  0:29   ` Andrii Nakryiko
2026-01-14  2:17     ` Donglin Peng
2026-01-09 13:00 ` Donglin Peng [this message]
2026-01-09 13:00 ` [PATCH bpf-next v12 09/11] bpf: Optimize the performance of find_bpffs_btf_enums Donglin Peng
2026-01-09 13:00 ` [PATCH bpf-next v12 10/11] libbpf: Optimize the performance of determine_ptr_size Donglin Peng
2026-01-14  0:29   ` Andrii Nakryiko
2026-01-14  2:00     ` Donglin Peng
2026-01-09 13:00 ` [PATCH bpf-next v12 11/11] btf: Refactor the code by calling str_is_empty Donglin Peng
2026-01-14  0:30 ` [PATCH bpf-next v12 00/11] Improve the performance of BTF type lookups with binary search patchwork-bot+netdevbpf

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=20260109130003.3313716-9-dolinux.peng@gmail.com \
    --to=dolinux.peng@gmail.com \
    --cc=alan.maguire@oracle.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox