From nobody Mon Dec 1 23:59:46 2025 Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F6C0322A27 for ; Wed, 26 Nov 2025 08:50:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764147061; cv=none; b=kmUbJ6HfSp4StpZ0TStWJxBNNjM7txF19DKgcGj/eY3F5nU1viPtAXs5G4ko/r36CODffbLOBp5SQXSE6s9E4UVgPjnrzPAXCk4jW/khHi1ADkRIZd3iaJ+a9xvqExydYEk437MzyFXQFIhRj+M4eNvNfgHP3BL5lo54UvJULKo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764147061; c=relaxed/simple; bh=PzKDskgzZMerL2L2GaEKme4Emf7+T6L2i2C5wE8wtz4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=YjsHRjig2JhCQbMgSMpujalqapfTnSIfm1k9kq+4jCV2U9mPoiN5Tdq4FgiR3oAb1h8Xe7OE/p/bMkJZSMQawvrl6HbSf5Y9DzjxI62D+omh23muRPCGUISjOpXGWG5JyBE/mBzCk8KM/wyb462/k5NcBY9vn6IfAVACn+VWaQg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=IQzOZLhS; arc=none smtp.client-ip=209.85.210.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IQzOZLhS" Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-7a9cdf62d31so7755249b3a.3 for ; Wed, 26 Nov 2025 00:50:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764147059; x=1764751859; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=58hD1y77fUWt+lA48dDAWZ48XqtnjLY8s5Dj8Cad7ik=; b=IQzOZLhScUsnyC9jpg2HSJBkX6IsLKg5UT0cc1IlnC/JCJ1t9QOC0uFyvBjVx4GQjf B3p/8Wcy0ZZhzVRB9zJpvf45dUaYbRoVLO58cD26IA8MudTPAfRu9eb8QlyfRfCNnnM0 sNgmoBUF+6B8ihr4NPb2ajPmxgun+CvQnVY7u7LtdJ99iyTEFS8Z9XyEYEHX4SZUCgiO DcJm45Rgknq3IcxYbYcq4uqo6UeV90vgsTyFlRj2KPN4rxlshzuXO1/RyZ8tPar1a0b/ zmt9zWG8heDpTua/lMoGrtbH0QIHtsvopIiqIpIsOEK//TE8n8nvDrTGeGzzg8kionth Otgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764147059; x=1764751859; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=58hD1y77fUWt+lA48dDAWZ48XqtnjLY8s5Dj8Cad7ik=; b=RRmJ8pYa2fgli0Tjsz9q6Eo+htILVlC3fmQGObp7QC00guOYKqyhIC3c80BQoc8kNg GD3OZ3gCf3ZNKBYxlSGXU+lXD1LzNrDTfXQsFzdpnoaJVV9YsC6HhnhAQzjSREwkSL7Q sc0EC7YelMESYSej2hBSAhO9h7m5X/wEKtrvgt303mUEMAoURHwv/uCk7FvvTW1k5ZfE vJ3cmCsbsqHkksJGFBu6puWQOLzeZZeP/zSWQj1ERcXIQYeFAVUX/XicgZKaRe6z8pJI TJSlG8Jv27gyEWY6Xw3WVCbNN3grBpdOHH6GUerQ8YyfCV5f8qGdckCIlx+/1394SXWY jqDw== X-Forwarded-Encrypted: i=1; AJvYcCWmYpW68dFNgZSc6VBslQnbpBcuGdAQ5GHSWo78yrCNvyhrHvKYutDB2JVfjHTP8ViOLNflbThn0SiPaLo=@vger.kernel.org X-Gm-Message-State: AOJu0YxNHAuDtgyR2nDRoXaGipIH4yVL0vbOAFqd0aMSSHlNaqc/6wbl 55OEJL1U+SLoo92iV9R0smtu+vFZj6EYR4G929CwPQWtU2aiQx+WwEjy X-Gm-Gg: ASbGncsiwsk8HnKzSvrCxjn4xKa+ehxp0UqTPfYMr0tyeFemkKM7asvwZ2Vb++uIb4J uN8VDGjT+NVPt+G/wMwVP6Tmk4xbXk1ZTuQhP429IwmuIOt38GSk9N1U9RZrPDVsUkJxAmtqvls OzKmaReKB6RioQU+I6jO0gu/eUl4BF2lPrysQLZ985HYdTi+4JhLwrrxl+OaM6G4gilzX68QlQG nucwu7hf3TsfPjz+Dh9CzRhS2R2gbNu122XxKd9HIZ0oNBeBvKZdZ5JF4BYT1UefY8UJ9QxWZqV T1E1LIcCLzG7i5X+kbbIRw6Xj8ehWBheRppl8fJt0RsGP5FOzsh9pqBemJCj9Afs8dj41PqC3RN 96HACekW1hgkw0JKXshdx807cmR8WQ1PSur3ukpFiwyl6YWCClrrSJuqP2aHKGPvTkSEW5KZasn 3HnziEDNGygwcXB6es6ciYBjCJbN8= X-Google-Smtp-Source: AGHT+IGr8biMRq+KgsRojAjkXMzOBT3BE61S5XBhKzO5zm4iKipVa4IvOpq4czkvkA1GovFn4zZogg== X-Received: by 2002:a05:6a00:10c6:b0:7aa:d1d4:bb68 with SMTP id d2e1a72fcca58-7c58e112cb4mr17345530b3a.20.1764147058760; Wed, 26 Nov 2025 00:50:58 -0800 (PST) Received: from pengdl-pc.mioffice.cn ([43.224.245.249]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7c3f023fd82sm20885721b3a.42.2025.11.26.00.50.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Nov 2025 00:50:57 -0800 (PST) From: Donglin Peng 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 , Alan Maguire Subject: [RFC bpf-next v8 8/9] bpf: Optimize the performance of find_btf_percpu_datasec Date: Wed, 26 Nov 2025 16:50:24 +0800 Message-Id: <20251126085025.784288-9-dolinux.peng@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251126085025.784288-1-dolinux.peng@gmail.com> References: <20251126085025.784288-1-dolinux.peng@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: pengdonglin 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 Cc: Alexei Starovoitov Cc: Andrii Nakryiko Cc: Alan Maguire Cc: Ihor Solodrai Cc: Xiaoqin Zhang Signed-off-by: pengdonglin --- include/linux/btf.h | 1 + kernel/bpf/btf.c | 5 +++++ kernel/bpf/verifier.c | 7 +------ 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/include/linux/btf.h b/include/linux/btf.h index f06976ffb63f..2d28f2b22ae5 100644 --- a/include/linux/btf.h +++ b/include/linux/btf.h @@ -220,6 +220,7 @@ bool btf_is_module(const struct btf *btf); bool btf_is_vmlinux(const struct btf *btf); struct module *btf_try_get_module(const struct btf *btf); u32 btf_nr_types(const struct btf *btf); +u32 btf_sorted_start_id(const struct btf *btf); struct btf *btf_base_btf(const struct btf *btf); bool btf_type_is_i32(const struct btf_type *t); bool btf_type_is_i64(const struct btf_type *t); diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index 925cb524f3a8..205b9c3bf194 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -550,6 +550,11 @@ u32 btf_nr_types(const struct btf *btf) return total; } =20 +u32 btf_sorted_start_id(const struct btf *btf) +{ + return btf->sorted_start_id ?: (btf->start_id ?: 1); +} + /* * Assuming that types are sorted by name in ascending order. */ diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 10d24073c692..367699591fb0 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -20576,12 +20576,7 @@ static int find_btf_percpu_datasec(struct btf *btf) * types to look at only module's own BTF types. */ n =3D btf_nr_types(btf); - if (btf_is_module(btf)) - i =3D btf_nr_types(btf_vmlinux); - else - i =3D 1; - - for(; i < n; i++) { + for (i =3D btf_sorted_start_id(btf); i < n; i++) { t =3D btf_type_by_id(btf, i); if (BTF_INFO_KIND(t->info) !=3D BTF_KIND_DATASEC) continue; --=20 2.34.1