Hi, On Tue, 2018-10-23 at 14:10 +0200, Steffen Klassert wrote: > On Fri, Oct 19, 2018 at 04:25:10PM +0200, Paolo Abeni wrote: > > This series implements GRO support for UDP sockets, as the RX counterpart > > of commit bec1f6f69736 ("udp: generate gso with UDP_SEGMENT"). > > The core functionality is implemented by the second patch, introducing a new > > sockopt to enable UDP_GRO, while patch 3 implements support for passing the > > segment size to the user space via a new cmsg. > > UDP GRO performs a socket lookup for each ingress packets and aggregate > > datagram > > directed to UDP GRO enabled sockets with constant l4 tuple. > > > > UDP GRO packets can land on non GRO-enabled sockets, e.g. due to iptables > > NAT > > rules, and that could potentially confuse existing applications. > > > > The solution adopted here is to de-segment the GRO packet before enqueuing > > as needed. Since we must cope with packet reinsertion after de-segmentation, > > the relevant code is factored-out in ipv4 and ipv6 specific helpers and > > exposed > > to UDP usage. > > > > While the current code can probably be improved, this safeguard > > ,implemented in > > the patches 4-7, allows future enachements to enable UDP GSO offload on more > > virtual devices eventually even on forwarded packets. > > I was curious what I get with this when doing packet forwarding. > So I added forwarding support with the patch below (on top of > your patchset). While the packet processing could work the way > I do it in this patch, I'm not sure about the way I enable > UDP GRO on forwarding. Maybe there it a better way than just > do UDP GRO if forwarding is enabled on the receiving device.
My idea/hope is slightly different: ensure that UDP GRO + UDP input path + UDP desegmentation on socket enqueue is safe and as fast as plain UDP input path and then enable UDP GRO without socket lookup, for each incoming frame (!!!). If we land on the input path on a non UDP GRO enabled socket, the packet is de-segment before enqueuing. Socket lookup would be needed only if tunnels are enabled, to check if the ingress frame match a tunnel. We will use UDP tunnel GRO in that case. > Some quick benchmark numbers with UDP packet forwarding > (1460 byte packets) through two gateways: > > net-next: 16.4 Gbps > > net-next + UDP GRO: 20.3 Gbps uhmmm... what do you think about this speed-up ? I hoped that without the socket lookup we can get measurably better figures. Cheers, Paolo