[Bloat] On the road to 100Gbit... Fwd: [PATCH net-next 00/15] tcp: BIG TCP implementation
Dave Taht
dave.taht at gmail.com
Thu Feb 3 10:28:42 EST 2022
---------- Forwarded message ---------
From: Eric Dumazet <eric.dumazet at gmail.com>
Date: Thu, Feb 3, 2022 at 12:05 AM
Subject: [PATCH net-next 00/15] tcp: BIG TCP implementation
To: David S . Miller <davem at davemloft.net>, Jakub Kicinski <kuba at kernel.org>
Cc: netdev <netdev at vger.kernel.org>, Eric Dumazet
<edumazet at google.com>, Coco Li <lixiaoyan at google.com>, Eric Dumazet
<eric.dumazet at gmail.com>
From: Eric Dumazet <edumazet at google.com>
This series implements BIG TCP as presented in netdev 0x15:
https://netdevconf.info/0x15/session.html?BIG-TCP
Standard TSO/GRO packet limit is 64KB
With BIG TCP, we allow bigger TSO/GRO packet sizes for IPv6 traffic.
Note that this feature is by default not enabled, because it might
break some eBPF programs assuming TCP header immediately follows IPv6 header.
Reducing number of packets traversing networking stack usually improves
performance, as shown on this experiment using a 100Gbit NIC, and 4K MTU.
'Standard' performance with current (74KB) limits.
for i in {1..10}; do ./netperf -t TCP_RR -H iroa23 -- -r80000,80000
-O MIN_LATENCY,P90_LATENCY,P99_LATENCY,THROUGHPUT|tail -1; done
77 138 183 8542.19
79 143 178 8215.28
70 117 164 9543.39
80 144 176 8183.71
78 126 155 9108.47
80 146 184 8115.19
71 113 165 9510.96
74 113 164 9518.74
79 137 178 8575.04
73 111 171 9561.73
Now enable BIG TCP on both hosts.
ip link set dev eth0 gro_ipv6_max_size 185000 gso_ipv6_max_size 185000
for i in {1..10}; do ./netperf -t TCP_RR -H iroa23 -- -r80000,80000
-O MIN_LATENCY,P90_LATENCY,P99_LATENCY,THROUGHPUT|tail -1; done
57 83 117 13871.38
64 118 155 11432.94
65 116 148 11507.62
60 105 136 12645.15
60 103 135 12760.34
60 102 134 12832.64
62 109 132 10877.68
58 82 115 14052.93
57 83 124 14212.58
57 82 119 14196.01
We see an increase of transactions per second, and lower latencies as well.
Coco Li (3):
ipv6: Add hop-by-hop header to jumbograms in ip6_output
ipvlan: enable BIG TCP Packets
mlx5: support BIG TCP packets
Eric Dumazet (11):
net: add netdev->tso_ipv6_max_size attribute
ipv6: add dev->gso_ipv6_max_size
tcp_cubic: make hystart_ack_delay() aware of BIG TCP
ipv6: add struct hop_jumbo_hdr definition
ipv6/gso: remove temporary HBH/jumbo header
ipv6/gro: insert temporary HBH/jumbo header
net: increase MAX_SKB_FRAGS
net: loopback: enable BIG TCP packets
bonding: update dev->tso_ipv6_max_size
macvlan: enable BIG TCP Packets
mlx4: support BIG TCP packets
Signed-off-by: Coco Li (1):
ipv6: add GRO_IPV6_MAX_SIZE
drivers/net/bonding/bond_main.c | 3 +
.../net/ethernet/mellanox/mlx4/en_netdev.c | 3 +
drivers/net/ethernet/mellanox/mlx4/en_tx.c | 47 ++++++++---
.../net/ethernet/mellanox/mlx5/core/en_main.c | 1 +
.../net/ethernet/mellanox/mlx5/core/en_tx.c | 81 +++++++++++++++----
drivers/net/ipvlan/ipvlan_main.c | 1 +
drivers/net/loopback.c | 2 +
drivers/net/macvlan.c | 1 +
include/linux/ipv6.h | 1 +
include/linux/netdevice.h | 32 ++++++++
include/linux/skbuff.h | 14 +---
include/net/ipv6.h | 42 ++++++++++
include/uapi/linux/if_link.h | 3 +
net/core/dev.c | 4 +
net/core/gro.c | 20 ++++-
net/core/rtnetlink.c | 33 ++++++++
net/core/skbuff.c | 21 ++++-
net/core/sock.c | 6 ++
net/ipv4/tcp_cubic.c | 4 +-
net/ipv6/ip6_offload.c | 32 +++++++-
net/ipv6/ip6_output.c | 22 ++++-
tools/include/uapi/linux/if_link.h | 3 +
22 files changed, 329 insertions(+), 47 deletions(-)
--
2.35.0.rc2.247.g8bbb082509-goog
--
I tried to build a better future, a few times:
https://wayforward.archive.org/?site=https%3A%2F%2Fwww.icei.org
Dave Täht CEO, TekLibre, LLC
More information about the Bloat
mailing list