All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 00/10] udp: implement GRO support
@ 2018-11-07 11:38 Paolo Abeni
  2018-11-07 11:38 ` [PATCH net-next 01/10] udp: implement complete book-keeping for encap_needed Paolo Abeni
                   ` (11 more replies)
  0 siblings, 12 replies; 18+ messages in thread
From: Paolo Abeni @ 2018-11-07 11:38 UTC (permalink / raw)
  To: netdev
  Cc: David S. Miller, Willem de Bruijn, Steffen Klassert,
	Subash Abhinov Kasiviswanathan

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 and
Subash on previous iteration.

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: add dummy xdp test helper
  selftests: add some benchmark for UDP GRO
  selftests: add functionals test for UDP GRO

 include/linux/udp.h                           |  25 ++-
 include/net/ip.h                              |   1 +
 include/net/ipv6.h                            |   2 +
 include/net/udp.h                             |  45 ++++-
 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                                |  41 ++++-
 net/ipv6/udp_offload.c                        |   6 +-
 tools/testing/selftests/bpf/Makefile          |   3 +-
 tools/testing/selftests/bpf/xdp_dummy.c       |  13 ++
 tools/testing/selftests/net/Makefile          |   1 +
 tools/testing/selftests/net/udpgro.sh         | 148 +++++++++++++++++
 tools/testing/selftests/net/udpgro_bench.sh   |  95 +++++++++++
 tools/testing/selftests/net/udpgso_bench.sh   |   2 +-
 tools/testing/selftests/net/udpgso_bench_rx.c | 156 ++++++++++++++++--
 tools/testing/selftests/net/udpgso_bench_tx.c |  22 ++-
 20 files changed, 708 insertions(+), 123 deletions(-)
 create mode 100644 tools/testing/selftests/bpf/xdp_dummy.c
 create mode 100755 tools/testing/selftests/net/udpgro.sh
 create mode 100755 tools/testing/selftests/net/udpgro_bench.sh

-- 
2.17.2

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2018-11-14 17:10 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-07 11:38 [PATCH net-next 00/10] udp: implement GRO support Paolo Abeni
2018-11-07 11:38 ` [PATCH net-next 01/10] udp: implement complete book-keeping for encap_needed Paolo Abeni
2018-11-14  7:08   ` Eric Dumazet
2018-11-07 11:38 ` [PATCH net-next 02/10] udp: implement GRO for plain UDP sockets Paolo Abeni
2018-11-07 11:38 ` [PATCH net-next 03/10] udp: add support for UDP_GRO cmsg Paolo Abeni
2018-11-07 11:38 ` [PATCH net-next 04/10] ip: factor out protocol delivery helper Paolo Abeni
2018-11-07 11:38 ` [PATCH net-next 05/10] ipv6: " Paolo Abeni
2018-11-08  9:01   ` Sergei Shtylyov
2018-11-08 10:13     ` Paolo Abeni
2018-11-08 10:29       ` Sergei Shtylyov
2018-11-07 11:38 ` [PATCH net-next 06/10] udp: cope with UDP GRO packet misdirection Paolo Abeni
2018-11-07 11:38 ` [PATCH net-next 07/10] selftests: add GRO support to udp bench rx program Paolo Abeni
2018-11-07 11:38 ` [PATCH net-next 08/10] selftests: add dummy xdp test helper Paolo Abeni
2018-11-07 11:38 ` [PATCH net-next 09/10] selftests: add some benchmark for UDP GRO Paolo Abeni
2018-11-07 11:38 ` [PATCH net-next 10/10] selftests: add functionals test " Paolo Abeni
2018-11-07 19:56 ` [PATCH net-next 00/10] udp: implement GRO support Willem de Bruijn
2018-11-07 20:03   ` David Miller
2018-11-08  0:23 ` David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.