From: Paolo Abeni <pabeni@redhat.com>
To: netdev@vger.kernel.org
Cc: "David S. Miller" <davem@davemloft.net>,
Willem de Bruijn <willemb@google.com>,
Steffen Klassert <steffen.klassert@secunet.com>,
Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Subject: [RFC PATCH v3 00/10] udp: implement GRO support
Date: Tue, 30 Oct 2018 18:24:33 +0100 [thread overview]
Message-ID: <cover.1540920083.git.pabeni@redhat.com> (raw)
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.
This revision of the series try to address the feedback provided by Willem,
Steffen and Subash fixing several bugs all along
rfc v2 - rfc v3:
- cope better with exceptional conditions
- test cases cleanup
rfc v1 - rfc 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 | 25 ++-
include/net/udp.h | 51 ++++-
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 | 147 +++++++++++++
tools/testing/selftests/net/udpgro_bench.sh | 94 +++++++++
tools/testing/selftests/net/udpgso_bench.sh | 2 +-
tools/testing/selftests/net/udpgso_bench_rx.c | 193 ++++++++++++++++--
tools/testing/selftests/net/udpgso_bench_tx.c | 22 +-
tools/testing/selftests/net/xdp_dummy.c | 13 ++
17 files changed, 816 insertions(+), 122 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
next reply other threads:[~2018-10-31 2:19 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-30 17:24 Paolo Abeni [this message]
2018-10-30 17:24 ` [RFC PATCH v3 01/10] udp: implement complete book-keeping for encap_needed Paolo Abeni
2018-11-01 20:59 ` Willem de Bruijn
2018-11-02 13:30 ` Paolo Abeni
2018-10-30 17:24 ` [RFC PATCH v3 02/10] udp: implement GRO for plain UDP sockets Paolo Abeni
2018-10-30 17:24 ` [RFC PATCH v3 03/10] udp: add support for UDP_GRO cmsg Paolo Abeni
2018-10-30 17:24 ` [RFC PATCH v3 04/10] ip: factor out protocol delivery helper Paolo Abeni
2018-11-01 6:35 ` Subash Abhinov Kasiviswanathan
2018-11-02 13:30 ` Paolo Abeni
2018-10-30 17:24 ` [RFC PATCH v3 05/10] ipv6: " Paolo Abeni
2018-10-30 17:24 ` [RFC PATCH v3 06/10] udp: cope with UDP GRO packet misdirection Paolo Abeni
2018-10-31 9:54 ` Paolo Abeni
2018-11-01 21:01 ` Willem de Bruijn
2018-11-02 13:44 ` Paolo Abeni
2018-10-30 17:24 ` [RFC PATCH v3 07/10] selftests: add GRO support to udp bench rx program Paolo Abeni
2018-10-30 17:24 ` [RFC PATCH v3 08/10] selftests: conditionally enable XDP support in udpgso_bench_rx Paolo Abeni
2018-11-01 21:00 ` Willem de Bruijn
2018-10-30 17:24 ` [RFC PATCH v3 09/10] selftests: add some benchmark for UDP GRO Paolo Abeni
2018-10-30 17:24 ` [RFC PATCH v3 10/10] selftests: add functionals test " Paolo Abeni
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=cover.1540920083.git.pabeni@redhat.com \
--to=pabeni@redhat.com \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=steffen.klassert@secunet.com \
--cc=subashab@codeaurora.org \
--cc=willemb@google.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).