Re: [PATCH v2 bpf-next 3/4] libbpf: deprecate legacy BPF map definitions

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

 



Toke Høiland-Jørgensen wrote:
> Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> writes:
> 
> > On Fri, Jan 21, 2022 at 12:43 PM Toke Høiland-Jørgensen <toke@xxxxxxxxxx> wrote:
> >>
> >> Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> writes:
> >>
> >> > On Thu, Jan 20, 2022 at 3:44 AM Toke Høiland-Jørgensen <toke@xxxxxxxxxx> wrote:
> >> >>
> >> >> Andrii Nakryiko <andrii@xxxxxxxxxx> writes:
> >> >>
> >> >> > Enact deprecation of legacy BPF map definition in SEC("maps") ([0]). For
> >> >> > the definitions themselves introduce LIBBPF_STRICT_MAP_DEFINITIONS flag
> >> >> > for libbpf strict mode. If it is set, error out on any struct
> >> >> > bpf_map_def-based map definition. If not set, libbpf will print out
> >> >> > a warning for each legacy BPF map to raise awareness that it goes
> >> >> > away.
> >> >>
> >> >> We've touched upon this subject before, but I (still) don't think it's a
> >> >> good idea to remove this support entirely: It makes it impossible to
> >> >> write a loader that can handle both new and old BPF objects.
> >> >>
> >> >> So discourage the use of the old map definitions, sure, but please don't
> >> >> make it completely impossible to load such objects.
> >> >
> >> > BTF-defined maps have been around for quite a long time now and only
> >> > have benefits on top of the bpf_map_def way. The source code
> >> > translation is also very straightforward. If someone didn't get around
> >> > to update their BPF program in 2 years, I don't think we can do much
> >> > about that.
> >> >
> >> > Maybe instead of trying to please everyone (especially those that
> >> > refuse to do anything to their BPF programs), let's work together to
> >> > nudge laggards to actually modernize their source code a little bit
> >> > and gain some benefits from that along the way?
> >>
> >> I'm completely fine with nudging people towards the newer features, and
> >> I think the compile-time deprecation warning when someone is using the
> >> old-style map definitions in their BPF programs is an excellent way to
> >> do that.
> >>
> >> I'm also fine with libbpf *by default* refusing to load programs that
> >> use the old-style map definitions, but if the code is removed completely
> >> it becomes impossible to write general-purpose loaders that can handle
> >> both old and new programs. The obvious example of such a loader is
> >> iproute2, the loader in xdp-tools is another.
> >
> > This is because you want to deviate from underlying BPF loader's
> > behavior and feature set and dictate your own extended feature set in
> > xdp-tools/iproute2/etc. You can technically do that, but with a lot of
> > added complexity and headaches. But demanding libbpf to maintain
> > deprecated and discouraged features/APIs/practices for 10+ years and
> > accumulate all the internal cruft and maintenance burden isn't a great
> > solution either.
> 
> Right, so work with me to find a solution? I already suggested several
> ideas, and you just keep repeating "just use the old library", which is
> tantamount to saying "take a hike".

I'll just throw my $.02 here as I'm reviewing. On major versions its
fairly common to not force API compat with the libs I'm used to working
with. Most recent example that comes to my mind (just did this yesterday
for example) was porting code into openssl3.x from older version. I
mumbled a bit, but still did it so that I could get my tools working on
latest and greatest.

Going from 0.x -> 1.0 seems reasonable to break compat, users don't
need to update immediately right? They can linger around on 0.x release
until they have some time or reason to jump onto 1.0? Distro's can
carry all versions for as long as necessary. Thats the value add of
distributions in my mind anyways. And a 0.x version somewhat implies
its not stable yet imo.

> 
> I'm perfectly fine with having to jump through some more hoops to load
> old programs, and moving the old maps section parsing out of libbpf and
> into the caller is fine as well; but then we'd need to add some hooks to
> libbpf to create the maps inside the bpf_object. I can submit patches to
> do this, but I'm not going to bother if you're just going to reject them
> because you don't want to accommodate anything other than your way of
> doing things :/

Can't xdp-tools run on 0.x for as long as wanted and flip over when
it is ready? Same for iproute2 'tc' loader? I'm not seeing what would
break except for random people trying to use tools in debug or experiments.
I would think most production use cases are not shelling out to tc
or xdp loaders and if so they must be managing the versioning
somehow for new/old features.

FWIW the dumb netlink based loader I wrote to attach create qdiscs
and attach filters is <100 lines of code so its not a huge lift if
you end up having to roll your own here.

The series is an ACK for me.

> 
> -Toke
> 



[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