Yep, the newer version of iproute2 fixed that problem.
I'm not seeing any performance improvements, but I do see lower CPU usage on the receive core (75% vs 90%).
Test environment:
2 100G hosts connected to a 100G switch, Mellanox NICS, RTT: 0.1ms, CPU: AMD EPYC 73F3 16-Core, 3.5Ghz
Default settings:
numactl -N 0 netperf -t TCP_STREAM -H 10.0.0.8 -- -r80000,80000 -O MIN_LATENCY,P90_LATENCY,P99_LATENCY,THROUGHPUT
Minimum 90th 99th Throughput
Latency Percentile Percentile
Microseconds Latency Latency
Microseconds Microseconds
numactl -N 0 iperf3 -c 10.0.0.8
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 56.4 GBytes 48.4 Gbits/sec 0 sender
[ 5] 0.00-10.00 sec 56.4 GBytes 48.4 Gbits/sec receiver
netperf -t TCP_RR -H 10.0.0.8 -- -r80000,80000 -O MIN_LATENCY,P90_LATENCY,P99_LATENCY,THROUGHPUT
Minimum 90th 99th Throughput
Latency Percentile Percentile
Microseconds Latency Latency
Microseconds Microseconds
56 125 169 10628.35
BIG TCP
ip link set dev eth100 gso_ipv4_max_size 185000 gro_ipv4_max_size 185000 #(send and receive host)
numactl -N 0 netperf -t TCP_STREAM -H 10.0.0.8 -- -r80000,80000 -O MIN_LATENCY,P90_LATENCY,P99_LATENCY,THROUGHPUT
Minimum 90th 99th Throughput
Latency Percentile Percentile
Microseconds Latency Latency
Microseconds Microseconds
3 10 252 48242.71
numactl -N 0 iperf3 -c 10.0.0.8
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 57.1 GBytes 49.0 Gbits/sec 0 sender
[ 5] 0.00-10.00 sec 57.1 GBytes 49.0 Gbits/sec receiver
netperf -t TCP_RR -H 10.0.0.8 -- -r80000,80000 -O MIN_LATENCY,P90_LATENCY,P99_LATENCY,THROUGHPUT
Minimum 90th 99th Throughput
Latency Percentile Percentile
Microseconds Latency Latency
Microseconds Microseconds
58 129 167 10315.34