On Mon, Jun 24, 2024 at 2:09 AM Antoine Tenart <atenart@xxxxxxxxxx> wrote: > > When upgrading to libbpf 1.3 we noticed a big performance hit while > loading programs using CORE on non base-BTF symbols. This was tracked > down to the new BTF sanity check logic. The issue is the base BTF > definitions are checked first for the base BTF and then again for every > module BTF. > > Loading 5 dummy programs (using libbpf-rs) that are using CORE on a > non-base BTF symbol on my system: > - Before this fix: 3s. > - With this fix: 0.1s. > > Fix this by only checking the types starting at the BTF start id. This > should ensure the base BTF is still checked as expected but only once > (btf->start_id == 1 when creating the base BTF), and then only > additional types are checked for each module BTF. > > Fixes: 3903802bb99a ("libbpf: Add basic BTF sanity validation") > Signed-off-by: Antoine Tenart <atenart@xxxxxxxxxx> > --- > tools/lib/bpf/btf.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > Makes total sense, thanks, applied! > diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c > index 2d0840ef599a..142060bbce0a 100644 > --- a/tools/lib/bpf/btf.c > +++ b/tools/lib/bpf/btf.c > @@ -598,7 +598,7 @@ static int btf_sanity_check(const struct btf *btf) > __u32 i, n = btf__type_cnt(btf); > int err; > > - for (i = 1; i < n; i++) { > + for (i = btf->start_id; i < n; i++) { > t = btf_type_by_id(btf, i); > err = btf_validate_type(btf, t, i); > if (err) > -- > 2.45.2 >