Re: Help using libbpf with kernel 4.14

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



‫בתאריך יום ב׳, 28 בספט׳ 2020 ב-8:50 מאת ‪Andrii Nakryiko‬‏
<‪andrii.nakryiko@xxxxxxxxx‬‏>:‬
>
> On Fri, Sep 25, 2020 at 4:58 PM Yaniv Agman <yanivagman@xxxxxxxxx> wrote:
> >
> > Hello,
> >
> > I'm developing a tool which is now based on BCC, and would like to
> > make the move to libbpf.
> > I need the tool to support a minimal kernel version 4.14, which
> > doesn't have CO-RE.
>
> You don't need kernel itself to support CO-RE, you just need that
> kernel to have BTF in it. If the kernel is too old to have
> CONFIG_DEBUG_INFO_BTF config, you can still add BTF by running `pahole
> -J <path-to-vmlinux-image>`, if that's at all an option for your
> setup.
>

Thanks, I didn't know that

> >
> > I have read bcc-to-libbpf-howto-guide, and looked at the libbpf-tools of bcc,
> > but both only deal with newer kernels, and I failed to change them to
> > run with a 4.14 kernel.
> >
> > Although some of the bpf samples in the kernel source don't use CO-RE,
> > they all use bpf_load.h,
> > and have dependencies on the tools dir, which I would like to avoid.
>
> Depending on what exactly you are trying to achieve with your BPF
> application, you might not need BPF CO-RE, and using libbpf without
> CO-RE would be enough for your needs. This would be the case if you
> don't need to access any of the kernel data structures (e.g., all sort
> of networking BPF apps: TC programs, cgroup sock progs, XDP). But if
> you need to do anything tracing related (e.g., looking at kernel's
> task_struct or any other internal structure), then you have no choice
> and you either have to do on-the-target-host runtime compilation (BCC
> way) or relocations (libbpf + BPF CO-RE). This is because of changing
> memory layout of kernel structures.
>
> So, unless you can compile one specific version of your BPF code for a
> one specific version of the kernel, you need either BCC or BPF CO-RE.
>

I'm working on a tracing application
(https://github.com/aquasecurity/tracee) which now uses bcc. We now
require a minimal kernel version 4.14, and bcc, but eventually we
would like to support CO-RE. I thought that we could do the move in
two steps. First moving to libbpf and keeping the 4.14 minimal
requirement, then adding CO-RE support in the future.
In order to do that, I thought of changing bcc requirement to clang
requirement, and compile the program once during installation on the
target host. This way we get the added value of fast start time
without the need to compile every time the program starts (like bcc
does), plus having an easier move to CO-RE in the future.

A problem that I encountered with kernel 4.14 and libbpf was that when
using bpf_prog_load (If I remember correctly), it returned an error of
invalid argument (-22). Doing a small investigation I saw that it
happened when trying to create bpf maps with names. Indeed I saw that
libbpf API changed between kernel 4.14 and 4.15 and the function
bpf_create_map_node now takes map name as an argument. Is there a way
to workaround this with kernel 4.14 and still use map names in
userspace to refer to bpf maps with libbpf?

> >
> > I would appreciate it if someone can help with a simple working
> > example of using libbpf on 4.14 kernel, without having any
> > dependencies. Specifically, I'm looking for an example makefile, and
> > to know how to load my bpf code with libbpf.
>
> libbpf-tools's Makefile would still work. Just drop dependency on
> vmlinux.h and include system headers directly, if necessary (and if
> you considered implications of kernel memory layout changes).
>

Thanks, I'll try that

> >
> > Thanks,
> > Yaniv




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux