I've tested this, it negatively affects using the device as a switch. See the 2gb
branch in my repo.
Baseline, without the WE420223-99:
[ ID][Role] Interval Transfer Bitrate Retr
[ 5][TX-C] 0.00-20.00 sec 2.17 GBytes 931 Mbits/sec 0 sender
[ 5][TX-C] 0.00-20.00 sec 2.17 GBytes 930 Mbits/sec receiver
[ 7][RX-C] 0.00-20.00 sec 2.17 GBytes 931 Mbits/sec 0 sender
[ 7][RX-C] 0.00-20.00 sec 2.17 GBytes 930 Mbits/sec receiver
With the WE420223-99 as NAT, no hw offloading and both ports in the switch (in the dts):
[ ID][Role] Interval Transfer Bitrate Retr
[ 5][TX-C] 0.00-20.00 sec 411 MBytes 172 Mbits/sec 1965 sender
[ 5][TX-C] 0.00-20.00 sec 410 MBytes 172 Mbits/sec receiver
[ 7][RX-C] 0.00-20.00 sec 1.11 GBytes 478 Mbits/sec 1511 sender
[ 7][RX-C] 0.00-20.00 sec 1.11 GBytes 478 Mbits/sec receiver
Single direction:
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-20.00 sec 1.49 GBytes 639 Mbits/sec 166 sender
[ 5] 0.00-20.02 sec 1.49 GBytes 638 Mbits/sec receiver
With hw offloading we are indeed limited to 1Gb:
[ ID][Role] Interval Transfer Bitrate Retr
[ 5][TX-C] 0.00-20.00 sec 375 MBytes 157 Mbits/sec 5505 sender
[ 5][TX-C] 0.00-20.00 sec 374 MBytes 157 Mbits/sec receiver
[ 7][RX-C] 0.00-20.00 sec 1.75 GBytes 751 Mbits/sec 6735 sender
[ 7][RX-C] 0.00-20.00 sec 1.75 GBytes 750 Mbits/sec receiver
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-20.00 sec 2.15 GBytes 926 Mbits/sec 455 sender
[ 5] 0.00-20.00 sec 2.15 GBytes 925 Mbits/sec receiver
With the WE420223-99 used as a switch (both ports in the switch (in the dts) and lan0 and lan1 in br-lan):
[ ID][Role] Interval Transfer Bitrate Retr
[ 5][TX-C] 0.00-20.00 sec 2.17 GBytes 931 Mbits/sec 0 sender
[ 5][TX-C] 0.00-20.00 sec 2.16 GBytes 930 Mbits/sec receiver
[ 7][RX-C] 0.00-20.00 sec 2.17 GBytes 933 Mbits/sec 0 sender
[ 7][RX-C] 0.00-20.00 sec 2.17 GBytes 931 Mbits/sec receiver
So now with the 2Gb patches:
With NAT and no hw offloading:
[ ID][Role] Interval Transfer Bitrate Retr
[ 5][TX-C] 0.00-20.00 sec 888 MBytes 372 Mbits/sec 284 sender
[ 5][TX-C] 0.00-20.00 sec 885 MBytes 371 Mbits/sec receiver
[ 7][RX-C] 0.00-20.00 sec 1.26 GBytes 541 Mbits/sec 937 sender
[ 7][RX-C] 0.00-20.00 sec 1.26 GBytes 540 Mbits/sec receiver
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-20.00 sec 1.93 GBytes 830 Mbits/sec 216 sender
[ 5] 0.00-20.00 sec 1.93 GBytes 829 Mbits/sec receiver
Enabling HW offloading makes NAT very fast:
[ ID][Role] Interval Transfer Bitrate Retr
[ 5][TX-C] 0.00-20.00 sec 2.16 GBytes 927 Mbits/sec 263 sender
[ 5][TX-C] 0.00-20.00 sec 2.16 GBytes 927 Mbits/sec receiver
[ 7][RX-C] 0.00-20.00 sec 2.13 GBytes 916 Mbits/sec 2 sender
[ 7][RX-C] 0.00-20.00 sec 2.13 GBytes 914 Mbits/sec receiver
Unless you want to use it as a switch:
[ ID][Role] Interval Transfer Bitrate Retr
[ 5][TX-C] 0.00-20.00 sec 1.52 GBytes 651 Mbits/sec 92 sender
[ 5][TX-C] 0.00-20.00 sec 1.51 GBytes 650 Mbits/sec receiver
[ 7][RX-C] 0.00-20.00 sec 1.57 GBytes 676 Mbits/sec 21 sender
[ 7][RX-C] 0.00-20.00 sec 1.57 GBytes 675 Mbits/sec receiver
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-20.00 sec 2.13 GBytes 915 Mbits/sec 466 sender
[ 5] 0.00-20.00 sec 2.13 GBytes 914 Mbits/sec receiver
This is now slower because all the data goes through the CPU instead of being directly switched as before:
PID PPID USER STAT VSZ %VSZ %CPU COMMAND
26 2 root RW 0 0% 24% [ksoftirqd/3]
16 2 root RW 0 0% 23% [ksoftirqd/1]
398 2 root RW 0 0% 21% [napi/mtk_eth-6]
397 2 root RW 0 0% 18% [napi/mtk_eth-5]
4003 703 root R 1332 1% 0% top
5 2 root IW 0 0% 0% [kworker/0:0-eve]
243 2 root IW 0 0% 0% [kworker/2:1-eve]
423 2 root IW< 0 0% 0% [kworker/0:1H-ev]
So somehow we can properly offload the NAT use case but not the switch use case with the 2Gb patch