Temat: Test wydajności routera Netgear R6220 z flow offloading
Kiedyś opisywałem już działanie łatki fastpath dla wydania LEDE, jednakże nigdy nie znalazła się ona w źródłach OpenWrt. Do projektu zostało zaś wprowadzone inne rozwiązanie, czysto programowe, nazwane flow offloading. Zasada działania jest w sumie dość podobna - łatka robi różne "czary mary" żeby pakiety mogły ominąć niektóre rzeczy w kernelu czy firewallu, dzięki czemu możliwe jest przyśpieszenie samego procesu natowania pakietów.
Ponieważ mam pod ręką bardzo popularny u nas Netgear R6220, postanowiłem pokazać co to rozwiązanie faktycznie potrafi.
Środowisko testowe
Podobnie jak poprzednio wykorzystałem dwa laptopy z procesorami Intel Core i3 które wysycają łącze gigabitowe. Zostały one połączone bezpośrednio kablem cat5 utp, na jednym z nim został ustawiony na stałe adres IP na 192.168.1.10/24, na drugim 192.168.1.20/24. Oba laptopy wyposażone były w system Windows 10 64bit, a do testów został użyty program iPerf3 w wersji 3.1.3. I tak samo jak poprzednio, chodziło o zaprezentowanie możliwości wspomnianego routera a nie śrubowanie wyników to program iperf3 został uruchomiony ot tak po prostu aby pracował na domyślnych parametrach - czyli na jednym z komputerów z opcją "-s" (praca jako serwer), na drugim z opcją "-c 192.168.1.10" - praca jako klient. Wyniki testu połączenia pomiędzy laptopami:
[ 4] local 192.168.1.20 port 53569 connected to 192.168.1.10 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 111 MBytes 929 Mbits/sec
[ 4] 1.00-2.00 sec 109 MBytes 916 Mbits/sec
[ 4] 2.00-3.00 sec 112 MBytes 938 Mbits/sec
[ 4] 3.00-4.00 sec 112 MBytes 944 Mbits/sec
[ 4] 4.00-5.00 sec 112 MBytes 940 Mbits/sec
[ 4] 5.00-6.00 sec 110 MBytes 927 Mbits/sec
[ 4] 6.00-7.00 sec 112 MBytes 943 Mbits/sec
[ 4] 7.00-8.00 sec 113 MBytes 946 Mbits/sec
[ 4] 8.00-9.00 sec 113 MBytes 945 Mbits/sec
[ 4] 9.00-10.00 sec 113 MBytes 945 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.00 sec 1.09 GBytes 937 Mbits/sec sender
[ 4] 0.00-10.00 sec 1.09 GBytes 937 Mbits/sec receiver
Wynik lekko się wacha, ale jest to właśnie pełny gigabit.
Do testów należy teraz wykonać małą zmianę - jeden laptop ma adres 192.168.1.10, został dołączony do portu LAN routera, od portu WAN routera identyczny kabel podłączyłem do drugiego laptopa, który ustawiłem na 192.168.2.10. Router miał na wanie ustawiony statyczny adres IP na 192.168.2.1, badamy więc wydajność natowania wan->lan.
W Netgearze R6220 zainstalowany był mój obraz OpenWrt:
root@OpenWrt:~# cat /etc/openwrt_release
DISTRIB_ID='OpenWrt'
DISTRIB_RELEASE='19.07-SNAPSHOT'
DISTRIB_REVISION='r10867-fd28ef59db'
DISTRIB_TARGET='ramips/mt7621'
DISTRIB_ARCH='mipsel_24kc'
DISTRIB_DESCRIPTION='OpenWrt 19.07-SNAPSHOT r10867-fd28ef59db'
DISTRIB_TAINTS=''
Dokładnie jest to kompilacja z 10 stycznia 2020r. Reszta ustawień domyślna, został zmieniony tylko WAN jak już wspomniałem.
Domyślny firewall OpenWrt
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 50.2 MBytes 422 Mbits/sec
[ 4] 1.00-2.00 sec 54.9 MBytes 461 Mbits/sec
[ 4] 2.00-3.00 sec 55.0 MBytes 461 Mbits/sec
[ 4] 3.00-4.00 sec 54.2 MBytes 455 Mbits/sec
[ 4] 4.00-5.00 sec 50.0 MBytes 419 Mbits/sec
[ 4] 5.00-6.00 sec 53.6 MBytes 450 Mbits/sec
[ 4] 6.00-7.00 sec 50.9 MBytes 427 Mbits/sec
[ 4] 7.00-8.00 sec 51.8 MBytes 435 Mbits/sec
[ 4] 8.00-9.00 sec 50.7 MBytes 425 Mbits/sec
[ 4] 9.00-10.00 sec 54.6 MBytes 458 Mbits/sec
[ 4] 10.00-10.05 sec 2.53 MBytes 436 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.05 sec 529 MBytes 441 Mbits/sec sender
[ 4] 0.00-10.05 sec 529 MBytes 441 Mbits/sec receiver
-----------------------------------------------------------
Na domyślnej konfiguracji OpenWrt idzie jakieś 440Mbitów na sekundę.
Włączony flow offloading
Zobaczy więc co będzie jak włączony flow offloading. Można to zrobić w LuCI, można to też ustawić z konsoli:
# uci set firewall.@defaults[0].flow_offloading=1
# uci commit firewall
# /etc/init.d/firewall restart
A wyniki?
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 98.5 MBytes 826 Mbits/sec
[ 4] 1.00-2.00 sec 101 MBytes 850 Mbits/sec
[ 4] 2.00-3.00 sec 100 MBytes 839 Mbits/sec
[ 4] 3.00-4.00 sec 98.2 MBytes 824 Mbits/sec
[ 4] 4.00-5.00 sec 98.6 MBytes 827 Mbits/sec
[ 4] 5.00-6.00 sec 98.2 MBytes 824 Mbits/sec
[ 4] 6.00-7.00 sec 98.2 MBytes 824 Mbits/sec
[ 4] 7.00-8.00 sec 98.7 MBytes 828 Mbits/sec
[ 4] 8.00-9.00 sec 98.1 MBytes 823 Mbits/sec
[ 4] 9.00-10.00 sec 98.8 MBytes 829 Mbits/sec
[ 4] 10.00-10.03 sec 3.38 MBytes 832 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.03 sec 992 MBytes 829 Mbits/sec sender
[ 4] 0.00-10.03 sec 992 MBytes 829 Mbits/sec receiver
Fajnie podskoczyło, prawda? Całe 830Mbitów na sekundę, nie jest to co prawda pełen gigabit, ale jak na router za stówkę to jest to bardzo ładny wynik.
Włączony flow offloading ze wspomaganiem sprzętowym
Jest jeszcze jedna opcją pozwalająca na włączenie sprzętowego wspomagania flow offloading, dostępna na razie tylko dla MT7621. Można ją włączyć następującą opcją:
# uci set firewall.@defaults[0].flow_offloading=1
# uci set firewall.@defaults[0].flow_offloading_hw=1
# uci commit firewall
# /etc/init.d/firewall restart
Ale niestety nie przynosi ona już dalszego wzrostu prędkości:
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 96.3 MBytes 808 Mbits/sec
[ 4] 1.00-2.00 sec 101 MBytes 844 Mbits/sec
[ 4] 2.00-3.00 sec 100 MBytes 841 Mbits/sec
[ 4] 3.00-4.00 sec 98.2 MBytes 824 Mbits/sec
[ 4] 4.00-5.00 sec 97.6 MBytes 819 Mbits/sec
[ 4] 5.00-6.00 sec 97.8 MBytes 820 Mbits/sec
[ 4] 6.00-7.00 sec 97.2 MBytes 815 Mbits/sec
[ 4] 7.00-8.00 sec 97.6 MBytes 818 Mbits/sec
[ 4] 8.00-9.00 sec 97.2 MBytes 815 Mbits/sec
[ 4] 9.00-10.00 sec 98.4 MBytes 825 Mbits/sec
[ 4] 10.00-10.05 sec 5.02 MBytes 826 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.05 sec 986 MBytes 823 Mbits/sec sender
[ 4] 0.00-10.05 sec 986 MBytes 823 Mbits/sec receiver
Należy tylko pamiętać, że flow offlading może sprawiać problem z rzeczami które zarządzają pakietami - np. qos i pośrednio np. mwan3. Gra warta świeczki? Sami odpowiedzcie na to pytanie.