Thread (58 messages) 58 messages, 9 authors, 2019-11-25

Re: [RFC PATCH v2 bpf-next 00/15] xdp_flow: Flow offload to XDP

From: William Tu <hidden>
Date: 2019-11-12 17:39:33
Also in: bpf

On Sun, Oct 27, 2019 at 8:24 AM Toke Høiland-Jørgensen [off-list ref] wrote:
Toshiaki Makita [off-list ref] writes:
quoted
On 19/10/23 (水) 2:45:05, Toke Høiland-Jørgensen wrote:
quoted
John Fastabend [off-list ref] writes:
quoted
I think for sysadmins in general (not OVS) use case I would work
with Jesper and Toke. They seem to be working on this specific
problem.
We're definitely thinking about how we can make "XDP magically speeds up
my network stack" a reality, if that's what you mean. Not that we have
arrived at anything specific yet...

And yeah, I'd also be happy to discuss what it would take to make a
native XDP implementation of the OVS datapath; including what (if
anything) is missing from the current XDP feature set to make this
feasible. I must admit that I'm not quite clear on why that wasn't the
approach picked for the first attempt to speed up OVS using XDP...
Here's some history from William Tu et al.
https://linuxplumbersconf.org/event/2/contributions/107/

Although his aim was not to speed up OVS but to add kernel-independent
datapath, his experience shows full OVS support by eBPF is very
difficult.
Yeah, I remember seeing that presentation; it still isn't clear to me
what exactly the issue was with implementing the OVS datapath in eBPF.
As far as I can tell from glancing through the paper, only lists program
size and lack of loops as limitations; both of which have been lifted
now.
Sorry it's not very clear in the presentation and paper.
Some of the limitations are resolved today, let me list my experiences.

This is from OVS's feature requirements:
What's missing in eBPF
- limited stack size (resolved now)
- limited program size (resolved now)
- dynamic loop support for OVS actions applied to packet
  (now bounded loop is supported)
- no connection tracking/alg support (people suggest to look cilium)
- no packet fragment/defragment support
- no wildcard table/map type support
I think it would be good to restart the project again using
existing eBPF features.

What's missing in XDP
- clone a packet: this is very basic feature for a switch to
  broadcast/multicast. I understand it's hard to implement.
  A workaround is to XDP_PASS and let tc do the clone. But slow.

Because of no packet cloning support, I didn't try implementing
OVS datapath in XDP.
The results in the paper also shows somewhat disappointing performance
for the eBPF implementation, but that is not too surprising given that
it's implemented as a TC eBPF hook, not an XDP program. I seem to recall
that this was also one of the things puzzling to me back when this was
presented...
Right, the point of that project is not performance improvement.
But sort of to see how existing eBPF feature can be used to implement
all features needed by OVS datapath.

Regards,
William
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help