I am doing some testing with NAPI SKB receive lists, it does certainly improve RX performance decently, but GRO is still way, way more efficient.
netif_receive_skb_list
implemented:
-----------------------------------------------------------
Server listening on 5201 (test #9)
-----------------------------------------------------------
Accepted connection from 192.168.1.1, port 52960
[ 5] local 192.168.1.104 port 5201 connected to 192.168.1.1 port 52974
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 181 MBytes 1.52 Gbits/sec 0 807 KBytes
[ 5] 1.00-2.00 sec 176 MBytes 1.48 Gbits/sec 0 857 KBytes
[ 5] 2.00-3.00 sec 179 MBytes 1.50 Gbits/sec 0 857 KBytes
[ 5] 3.00-4.00 sec 178 MBytes 1.49 Gbits/sec 0 898 KBytes
[ 5] 4.00-5.00 sec 179 MBytes 1.50 Gbits/sec 0 898 KBytes
[ 5] 5.00-6.00 sec 179 MBytes 1.50 Gbits/sec 0 898 KBytes
[ 5] 6.00-7.00 sec 178 MBytes 1.49 Gbits/sec 0 898 KBytes
[ 5] 7.00-8.00 sec 179 MBytes 1.50 Gbits/sec 0 898 KBytes
[ 5] 8.00-9.00 sec 178 MBytes 1.49 Gbits/sec 0 898 KBytes
[ 5] 9.00-10.00 sec 179 MBytes 1.50 Gbits/sec 0 898 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.74 GBytes 1.50 Gbits/sec 0 sender
Plain old netif_receive_skb
:
-----------------------------------------------------------
Server listening on 5201 (test #10)
-----------------------------------------------------------
Accepted connection from 192.168.1.1, port 53040
[ 5] local 192.168.1.104 port 5201 connected to 192.168.1.1 port 53046
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 161 MBytes 1.35 Gbits/sec 0 814 KBytes
[ 5] 1.00-2.00 sec 156 MBytes 1.31 Gbits/sec 0 854 KBytes
[ 5] 2.00-3.00 sec 156 MBytes 1.31 Gbits/sec 0 895 KBytes
[ 5] 3.00-4.00 sec 154 MBytes 1.29 Gbits/sec 0 895 KBytes
[ 5] 4.00-5.00 sec 155 MBytes 1.30 Gbits/sec 0 895 KBytes
[ 5] 5.00-6.00 sec 159 MBytes 1.33 Gbits/sec 0 895 KBytes
[ 5] 6.00-7.00 sec 158 MBytes 1.32 Gbits/sec 0 895 KBytes
[ 5] 7.00-8.00 sec 158 MBytes 1.32 Gbits/sec 0 895 KBytes
[ 5] 8.00-9.00 sec 160 MBytes 1.34 Gbits/sec 0 895 KBytes
[ 5] 9.00-10.00 sec 158 MBytes 1.32 Gbits/sec 0 895 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.54 GBytes 1.32 Gbits/sec 0 sender
GRO implemented:
-----------------------------------------------------------
Server listening on 5201 (test #11)
-----------------------------------------------------------
Accepted connection from 192.168.1.1, port 39150
[ 5] local 192.168.1.104 port 5201 connected to 192.168.1.1 port 39162
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 315 MBytes 2.64 Gbits/sec 0 1.01 MBytes
[ 5] 1.00-2.00 sec 316 MBytes 2.65 Gbits/sec 0 1.01 MBytes
[ 5] 2.00-3.00 sec 318 MBytes 2.66 Gbits/sec 0 1.06 MBytes
[ 5] 3.00-4.00 sec 318 MBytes 2.66 Gbits/sec 0 1.11 MBytes
[ 5] 4.00-5.00 sec 318 MBytes 2.66 Gbits/sec 0 1.11 MBytes
[ 5] 5.00-6.00 sec 319 MBytes 2.67 Gbits/sec 0 1.17 MBytes
[ 5] 6.00-7.00 sec 316 MBytes 2.65 Gbits/sec 0 1.17 MBytes
[ 5] 7.00-8.00 sec 304 MBytes 2.55 Gbits/sec 0 1.17 MBytes
[ 5] 8.00-9.00 sec 310 MBytes 2.60 Gbits/sec 0 1.22 MBytes
[ 5] 9.00-10.00 sec 316 MBytes 2.65 Gbits/sec 0 1.22 MBytes
[ 5] 10.00-10.00 sec 1.25 MBytes 2.91 Gbits/sec 0 1.22 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 3.08 GBytes 2.64 Gbits/sec 0 sender
GRO implemented, but disabled via ethtool:
-----------------------------------------------------------
Server listening on 5201 (test #3)
-----------------------------------------------------------
Accepted connection from 192.168.1.1, port 53568
[ 5] local 192.168.1.104 port 5201 connected to 192.168.1.1 port 53574
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 138 MBytes 1.16 Gbits/sec 0 772 KBytes
[ 5] 1.00-2.00 sec 135 MBytes 1.13 Gbits/sec 0 772 KBytes
[ 5] 2.00-3.00 sec 136 MBytes 1.14 Gbits/sec 0 772 KBytes
[ 5] 3.00-4.00 sec 138 MBytes 1.15 Gbits/sec 0 772 KBytes
[ 5] 4.00-5.00 sec 138 MBytes 1.15 Gbits/sec 0 772 KBytes
[ 5] 5.00-6.00 sec 138 MBytes 1.15 Gbits/sec 0 772 KBytes
[ 5] 6.00-7.00 sec 136 MBytes 1.14 Gbits/sec 0 772 KBytes
[ 5] 7.00-8.00 sec 135 MBytes 1.13 Gbits/sec 0 772 KBytes
[ 5] 8.00-9.00 sec 135 MBytes 1.13 Gbits/sec 0 772 KBytes
[ 5] 9.00-10.00 sec 138 MBytes 1.15 Gbits/sec 0 772 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.01 sec 1.33 GBytes 1.15 Gbits/sec 0 sender
All tests were done on Qnap 301W on a 10G link to my PC using iperf3 in reverse mode as the 301W being the client (server sends, client receives)