On Fri, Oct 23, 2020 at 1:45 PM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > On Fri, Oct 23, 2020 at 01:32:44PM -0700, Andrii Nakryiko wrote: > > SNIP > > > > right, we can generate them in bpftrace, but it's a shame > > > > > > > > > > > > > > But otherwise, I don't really have a good feeling what's the perfect > > > > solution here... > > > > > > I tried the check of dwarf record against function symbols > > > with adresses mentioned earlier (attached) > > > > > > getting more functions of course ;-) > > > > > > $ bpftool btf dump file ./vmlinux | grep 'FUNC ' | wc -l > > > 46606 > > > > > > compared to 22869 on the same .config with working gcc > > > and current pahole > > > > Just curious, what's the change in BTF size due to this? > > current: 3342279 > new: 4361045 > > so about 1MB ok, not too bad for almost 24k functions and bringing fentry/fexit on par with kprobe/kretprobe in terms of what to attach to > > > > > > > > > and resolve_btfids is happy, because there are no duplications > > > > > > jirka > > > > > > > > > --- > > > > [...] > > > > > static int btf_var_secinfo_cmp(const void *a, const void *b) > > > { > > > const struct btf_var_secinfo *av = a; > > > @@ -72,6 +157,7 @@ struct btf_elf *btf_elf__new(const char *filename, Elf *elf) > > > if (!btfe) > > > return NULL; > > > > > > + btfe->symbols = RB_ROOT; > > > > Can you please check what we do for per-cpu variables with ELF > > symbols? Perhaps we can unify approaches. I'd also favor using a sort > > + bsearch approach instead of rb_tree, given we don't really need to > > dynamically add/delete elements, it's a one-time operation to iterate > > and initialize everything. Also binary search of linear arrays would > > be more memory-efficient and cache-efficient, most probably. > > ok, will check > thanks! > jirka > > > > > > btfe->in_fd = -1; > > > btfe->filename = strdup(filename); > > > if (btfe->filename == NULL) > > > @@ -177,6 +263,7 @@ void btf_elf__delete(struct btf_elf *btfe) > > > elf_end(btfe->elf); > > > } > > > > > > + btfe__delete_symbols(btfe); > > > elf_symtab__delete(btfe->symtab); > > > __gobuffer__delete(&btfe->percpu_secinfo); > > > btf__free(btfe->btf); > > > > [...] > > >