From: "Toke Høiland-Jørgensen" <toke@redhat.com>
To: Nikolay Aleksandrov <nikolay@nvidia.com>,
Lorenzo Bianconi <lorenzo@kernel.org>
Cc: bpf@vger.kernel.org, netdev@vger.kernel.org,
lorenzo.bianconi@redhat.com, davem@davemloft.net,
kuba@kernel.org, ast@kernel.org, daniel@iogearbox.net,
dsahern@kernel.org, komachi.yoshiki@gmail.com, brouer@redhat.com,
memxor@gmail.com, andrii.nakryiko@gmail.com,
Roopa Prabhu <roopa@nvidia.com>,
"bridge@lists.linux-foundation.org"
<bridge@lists.linux-foundation.org>,
Ido Schimmel <idosch@idosch.org>
Subject: Re: [RFC bpf-next 1/2] net: bridge: add unstable br_fdb_find_port_from_ifindex helper
Date: Wed, 26 Jan 2022 13:50:51 +0100 [thread overview]
Message-ID: <878rv23bkk.fsf@toke.dk> (raw)
In-Reply-To: <113d070a-6df1-66c2-1586-94591bc5aada@nvidia.com>
Nikolay Aleksandrov <nikolay@nvidia.com> writes:
> On 26/01/2022 13:27, Lorenzo Bianconi wrote:
>>> On 24/01/2022 19:20, Lorenzo Bianconi wrote:
>>>> Similar to bpf_xdp_ct_lookup routine, introduce
>>>> br_fdb_find_port_from_ifindex unstable helper in order to accelerate
>>>> linux bridge with XDP. br_fdb_find_port_from_ifindex will perform a
>>>> lookup in the associated bridge fdb table and it will return the
>>>> output ifindex if the destination address is associated to a bridge
>>>> port or -ENODEV for BOM traffic or if lookup fails.
>>>>
>>>> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
>>>> ---
>>>> net/bridge/br.c | 21 +++++++++++++
>>>> net/bridge/br_fdb.c | 67 +++++++++++++++++++++++++++++++++++------
>>>> net/bridge/br_private.h | 12 ++++++++
>>>> 3 files changed, 91 insertions(+), 9 deletions(-)
>>>>
>>>
>>> Hi Lorenzo,
>>
>> Hi Nikolay,
>>
>> thx for the review.
>>
>>> Please CC bridge maintainers for bridge-related patches, I've added Roopa and the
>>> bridge mailing list as well. Aside from that, the change is certainly interesting, I've been
>>> thinking about a similar helper for some time now, few comments below.
>>
>> yes, sorry for that. I figured it out after sending the series out.
>>
>>>
>>> Have you thought about the egress path and if by the current bridge state the packet would
>>> be allowed to egress through the found port from the lookup? I'd guess you have to keep updating
>>> the active ports list based on netlink events, but there's a lot of egress bridge logic that
>>> either have to be duplicated or somehow synced. Check should_deliver() (br_forward.c) and later
>>> egress stages, but I see how this is a good first step and perhaps we can build upon it.
>>> There are a few possible solutions, but I haven't tried anything yet, most obvious being
>>> yet another helper. :)
>>
>> ack, right but I am bit worried about adding too much logic and slow down xdp
>> performances. I guess we can investigate first the approach proposed by Alexei
>> and then revaluate. Agree?
>>
>
> Sure, that approach sounds very interesting, but my point was that
> bypassing the ingress and egress logic defeats most of the bridge
> features. You just get an fdb hash table which you can build today
> with ebpf without any changes to the kernel. :) You have multiple
> states, flags and options for each port and each vlan which can change
> dynamically based on external events (e.g. STP, config changes etc)
> and they can affect forwarding even if the fdbs remain in the table.
To me, leveraging all this is precisely the reason to have BPF helpers
instead of just replicating state in BPF maps: it's very easy to do that
and show a nice speedup, and then once you get all the corner cases
covered that the in-kernel code already deals with, you've chipped away
at that speedup and spent a lot of time essentially re-writing the
battle-tested code already in the kernel.
So I think figuring out how to do the state sync is the right thing to
do; a second helper would be fine for this, IMO, but I'm not really
familiar enough with the bridge code to really have a qualified opinion.
-Toke
next prev parent reply other threads:[~2022-01-26 12:51 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-24 17:20 [RFC bpf-next 0/2] introduce bpf fdb lookup helper for xdp Lorenzo Bianconi
2022-01-24 17:20 ` [RFC bpf-next 1/2] net: bridge: add unstable br_fdb_find_port_from_ifindex helper Lorenzo Bianconi
2022-01-24 17:50 ` Toke Høiland-Jørgensen
2022-01-26 11:42 ` Lorenzo Bianconi
2022-01-26 12:03 ` Kumar Kartikeya Dwivedi
2022-01-26 20:11 ` Andrii Nakryiko
2022-01-26 12:03 ` Toke Høiland-Jørgensen
2022-01-26 14:04 ` Lorenzo Bianconi
2022-01-24 18:32 ` Nikolay Aleksandrov
2022-01-25 5:09 ` Alexei Starovoitov
2022-01-26 11:09 ` Lorenzo Bianconi
2022-01-26 12:02 ` Toke Høiland-Jørgensen
2022-01-26 11:27 ` Lorenzo Bianconi
2022-01-26 12:08 ` Kumar Kartikeya Dwivedi
2022-01-26 12:39 ` Nikolay Aleksandrov
2022-01-26 12:50 ` Toke Høiland-Jørgensen [this message]
2022-01-26 12:57 ` Nikolay Aleksandrov
2022-01-26 15:00 ` Lorenzo Bianconi
2022-01-24 17:20 ` [RFC bpf-next 2/2] samples: bpf: add xdp fdb lookup program Lorenzo Bianconi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=878rv23bkk.fsf@toke.dk \
--to=toke@redhat.com \
--cc=andrii.nakryiko@gmail.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=bridge@lists.linux-foundation.org \
--cc=brouer@redhat.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=idosch@idosch.org \
--cc=komachi.yoshiki@gmail.com \
--cc=kuba@kernel.org \
--cc=lorenzo.bianconi@redhat.com \
--cc=lorenzo@kernel.org \
--cc=memxor@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=nikolay@nvidia.com \
--cc=roopa@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).