[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <cover.1539957909.git.pabeni@redhat.com>
Date: Fri, 19 Oct 2018 16:25:10 +0200
From: Paolo Abeni <pabeni@...hat.com>
To: netdev@...r.kernel.org
Cc: Willem de Bruijn <willemb@...gle.com>,
Steffen Klassert <steffen.klassert@...unet.com>
Subject: [RFC PATCH v2 00/10] udp: implement GRO support
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.
The last 4 for patches implement some performance and functional self-tests,
re-using the existing udpgso infrastructure. The problematic scenario described
above is explicitly tested.
v1 - v2:
- use a new option to enable UDP GRO
- use static keys to protect the UDP GRO socket lookup
- cope with UDP GRO misdirection
- add self-tests
Paolo Abeni (10):
udp: implement complete book-keeping for encap_needed
udp: implement GRO for plain UDP sockets.
udp: add support for UDP_GRO cmsg
ip: factor out protocol delivery helper
ipv6: factor out protocol delivery helper
udp: cope with UDP GRO packet misdirection
selftests: add GRO support to udp bench rx program
selftests: conditionally enable XDP support in udpgso_bench_rx
selftests: add some benchmark for UDP GRO
selftests: add functionals test for UDP GRO
include/linux/udp.h | 42 +++-
include/net/udp_tunnel.h | 6 +
include/uapi/linux/udp.h | 1 +
net/ipv4/ip_input.c | 73 ++++---
net/ipv4/udp.c | 54 ++++-
net/ipv4/udp_offload.c | 109 ++++++++--
net/ipv6/ip6_input.c | 28 +--
net/ipv6/udp.c | 44 +++-
net/ipv6/udp_offload.c | 6 +-
tools/testing/selftests/net/Makefile | 70 +++++++
tools/testing/selftests/net/udpgro.sh | 144 +++++++++++++
tools/testing/selftests/net/udpgro_bench.sh | 94 +++++++++
tools/testing/selftests/net/udpgso_bench.sh | 2 +-
tools/testing/selftests/net/udpgso_bench_rx.c | 195 ++++++++++++++++--
tools/testing/selftests/net/udpgso_bench_tx.c | 22 +-
tools/testing/selftests/net/xdp_dummy.c | 13 ++
16 files changed, 790 insertions(+), 113 deletions(-)
create mode 100755 tools/testing/selftests/net/udpgro.sh
create mode 100755 tools/testing/selftests/net/udpgro_bench.sh
create mode 100644 tools/testing/selftests/net/xdp_dummy.c
--
2.17.2
Powered by blists - more mailing lists