Re: [PATCH 0/3] perf/bpftool: Allow to link libbpf dynamically
From: Daniel Borkmann <daniel@iogearbox.net>
Date: 2019-11-27 21:22:45
Also in:
bpf, lkml
On 11/27/19 9:24 PM, Andrii Nakryiko wrote:
On Wed, Nov 27, 2019 at 8:38 AM Alexei Starovoitov [off-list ref] wrote:quoted
On Wed, Nov 27, 2019 at 1:48 AM Jiri Olsa [off-list ref] wrote:quoted
hi, adding support to link bpftool with libbpf dynamically, and config change for perf. It's now possible to use: $ make -C tools/bpf/bpftool/ LIBBPF_DYNAMIC=1 which will detect libbpf devel package with needed version, and if found, link it with bpftool. It's possible to use arbitrary installed libbpf: $ make -C tools/bpf/bpftool/ LIBBPF_DYNAMIC=1 LIBBPF_DIR=/tmp/libbpf/ I based this change on top of Arnaldo's perf/core, because it contains libbpf feature detection code as dependency. It's now also synced with latest bpf-next, so Toke's change applies correctly.I don't like it. Especially Toke's patch to expose netlink as public and stable libbpf api. bpftools needs to stay tightly coupled with libbpf (and statically linked for that reason). Otherwise libbpf will grow a ton of public api that would have to be stable and will quickly become a burden.
+1, and would also be out of scope from a BPF library point of view.
I second that. I'm currently working on adding few more APIs that I'd like to keep unstable for a while, until we have enough real-world usage (and feedback) accumulated, before we stabilize them. With LIBBPF_API and a promise of stable API, we are going to over-stress and over-design APIs, potentially making them either too generic and bloated, or too limited (and thus become deprecated almost at inception time). I'd like to take that pressure off for a super-new and in flux APIs and not hamper the progress. I'm thinking of splitting off those non-stable, sort-of-internal APIs into separate libbpf-experimental.h (or whatever name makes sense), and let those be used only by tools like bpftool, which are only ever statically link against libbpf and are ok with occasional changes to those APIs (which we'll obviously fix in bpftool as well). Pahole seems like another candidate that fits this bill and we might expose some stuff early on to it, if it provides tangible benefits (e.g., BTF dedup speeds ups, etc). Then as APIs mature, we might decide to move them into libbpf.h with LIBBPF_API slapped onto them. Any objections?
I don't think adding yet another libbpf_experimental.h makes sense, it feels too much of an invitation to add all sort of random stuff in there. We already do have libbpf.h and libbpf_internal.h, so everything that does not relate to the /stable and public/ API should be moved from libbpf.h into libbpf_internal.h such as the netlink helpers, as one example, and bpftool can use these since in-tree changes also cover the latter just fine. So overall, same page, just reuse/improve libbpf_internal.h instead of a new libbpf_experimental.h. Thanks, Daniel