bpftool icon indicating copy to clipboard operation
bpftool copied to clipboard

Support probing for kfuncs availability

Open qmonnet opened this issue 2 years ago • 7 comments

Similarly to what we do for program types, map types, helpers, and a few other components, we could look into dumping supported kfuncs with bpftool feature probe.

It is not clear yet what the probes would look like.

qmonnet avatar May 03 '23 13:05 qmonnet

Interesting, I thought kfuncs were encoded into BTF. I see a reference to that here: https://github.com/torvalds/linux/blob/0e389834672c723435a44818ed2cabc4dad24429/kernel/bpf/btf.c#L7669

Mind double checking me on that? If kfuncs availability can be pulled from BTF feel free to give this one to me -- it's been bugging me for a while

danobi avatar Dec 17 '23 17:12 danobi

Hey, thanks Daniel for looking into this!

As far as I'm aware, kfuncs and their prototypes are indeed available in the raw BTF, but I can't see them in the vmlinux.h generated by bpftool. In the raw BTF ouput, I don't know if there's a way to distinguish them from other non-kfuncs kernel functions.

What do you have in mind, exactly?

qmonnet avatar Dec 18 '23 12:12 qmonnet

Hey, thanks Daniel for looking into this!

As far as I'm aware, kfuncs and their prototypes are indeed available in the raw BTF, but I can't see them in the vmlinux.h generated by bpftool. In the raw BTF ouput, I don't know if there's a way to distinguish them from other non-kfuncs kernel functions.

Ah makes sense. In that case, I was thinking of adding a BTF tag to all kfunc via __bpf_kfunc macro. Then bpftool could just walk all the tags and find kfunc tagged functions.

What do you have in mind, exactly?

I'm interested in two things:

  1. Have bpftool support a "feature dump" of all supported kfuncs on running kernel
  2. Have bpftool generate vmlinux.h with kfunc prototypes

danobi avatar Dec 18 '23 17:12 danobi

Oh, BTF tags only work for clang built linux. Lemme think on it more

danobi avatar Dec 18 '23 17:12 danobi

Would be great to have these tags, indeed. Thanks!

qmonnet avatar Dec 18 '23 18:12 qmonnet

So I think this approach is probably still doable, except we cannot use BTF type tags from kernel side. Instead we'd probably want to teach pahole to parse the .BTF_ids section in vmlinux and generate type tags from that. But unfortunately not the quick win I was looking for :p w.r.t. how much time I can allocate to this.

danobi avatar Dec 18 '23 18:12 danobi

Could be worth opening a thread on bpf@, I wouldn't be surprised if other people are interested in listing the kfuncs, too. Some may even have more suggestions, or cycles to take a look?

qmonnet avatar Dec 19 '23 09:12 qmonnet