Optymalizacja wykorzystania procesora na routerze z OpenWrt

Moje przygody z OpenWrt rozpocząłem od routera ASUS RT-AC56U. Był to dość dobry, tani router z dwurdzeniowym procesorem Broadcom BCM4708A0 taktowanym 800MHz. Dodatkowo posiadał 128MB pamięci flash oraz 256MB RAM.

Wraz z jedzeniem wzrasta apetyt, jak to się mówi.

O ile nie skarżyłem się na procesor, to bardzo szybko zabrakło mi miejsca na kolejne to aplikacje. Postanowiłem więc wymienić go na Linksys WRT3200ACM, który później zmieniłem na Linksys WRT32x.

WRT3200ACM (WRT32x) to bardzo porządna maszyna, do tej pory używamy tego typu routery w pracy. O ile byłem zadowolony z jego wydajności, o tyle nie do końca spisywała się sieć WiFi.

Siła sygnału pozostawiała sporo do życzenia, a współpraca z innymi routerami lub punktami dostępu (access point) nie obyła się bez problemów. Wszystko przez zastosowany w nim chip sieci bezprzewodowej od Marvell.

Dodatkowo brak wsparcia dla kanałów DFS w WiFi w częstotliwości 5GHz dodatkowo ograniczało jego wykorzystanie. Zapomnij również o szyfrowaniu WPA3 wprowadzony domyślnie w serii OpenWrt 21.02 (WPA3 da się włączyć, ale WiFi i cały router szybko przestaje działać).

W poszukiwaniu lepszego routera natrafiłem na Linksys MR8300. Posiadał on 3 radia Qualcomm Atheros. Jedno służyło do częstotliwości 2.4GHz a dwa pozostałe do 5GHz, z czego pierwszy dla kanałów do 60 a drugi powyżej 100 (wraz z obsługą DFS).

O ile router sprawował się w porządku, wyraźnie można było odczuć, że jest on sporo wolniejszy, szczególnie przy instalacji oprogramowania.

WRT3200ACM (WRT32x) posiadał dwurdzeniowy procesor 1866MHz, podczas gdy MR8300 posiadał czterordzeniowy 717MHz.

Teoretycznie wydajność, w związku z większą liczbą rdzeni powinna być podobna, jednakże nie była.

Podczas gdy mój internet zwiększył się z 100/10Mbps do 200/20Mbps dodatkowo zauważyłem, że router zaczął się dławić, szczególnie gdy miał wprowadzoną optymalizacja łącza internetowego przy pomocy SQM QoS.

SQM QoS nie wyrabiał powyżej 100Mbps a po jego wyłączeniu można bez problemu było osiągnąć 200Mbps.

Nie pomogło niestety włączenie sterowania pakietami (Packet Steering) w Network > Interfaces > Global network options.

Packet Steering pozwala na zarządzanie pakietami z wykorzystaniem wszystkich dostępnych procesorów w systemie, w tym przypadku rdzeni (które MR8300 ma cztery).

Zmuszony zostałem do wyłączenia SQM QoS, do czasu aż znajdę rozwiązanie na tę bolączkę. Podejrzewam, że będę to sprawdzał, wraz z wydaniem stabilnej wersji OpenWrt 22.03, gdzie wprowadzony zostanie Firewall 4.

Postanowiłem jednak zagłębić się z aspekt wykorzystania mocy obliczeniowej tkwiącej w czterech rdzeniach Linksys MR8300.

W moich poszukiwaniach natrafiłem na komendę pokazującą, jak wykorzystywany jest nasz procesor i jego rdzenie.

tail /proc/interrupts -n 100

Dzięki temu zobaczyłem, że pierwszy rdzeń robi nadgodziny, podczas gdy trzy pozostałe się opierdzielają.

Linksys MR8300 z OpenWrt przed włączniem irqbalance

Postanowiłem coś z tym zrobić.

Przeglądając oficjalną stronę OpenWrt natrafiłem na pakiet Irqbalance.

Zadaniem tego pakietu jest, w dosłownym tłumaczeniu “dystrybucja przerwania na wiele logicznych procesorów (rdzeni)”. W skrócie rozdzielenie poleceń z głównego rdzenia na wszystkie dostępne.

Irqbalance is a Linux daemon that distributes interrupts over multiple logical CPUs. This may result in improved overall performance and even reduced power consumption.

Pakiet ten nie jest dostępny domyślnie w systemie oraz jego zainstalowanie nie włącza go automatycznie. Jest to podyktowane faktem, że w przypadku urządzeń do dwóch rdzeni, wzrost wydajności jest minimalny lub też powoduje jego pogorszenie.

W przypadku Linksys MR8300, który posiada cztery rdzenie, warto jednak spróbować.

Zaktualizowałem pakiety oraz zainstalowałem irqbalance

opkg update && opkg install irqbalance

Edytując plik konfiguracyjny, włączyłem jego automatyczny start

nano /etc/config/irqbalance

Po czym go uruchomiłem ręcznie

/etc/init.d/irqbalance start

Już po chwili widać było, że 3 leniwe rdzenie zaczęły pracować na chleb.

tail /proc/interrupts -n 100

Linksys MR8300 z OpenWrt po włączniu irqbalance

Wykonując kilka testów, w tym zarzucenie do ściągania plik z torrentów (zobacz jak dodać klienta torrent do routera z OpenWRT), który w początkowym stadium, zawsze powodował przymulenie routera pokazał, zobaczyłem lekką poprawę.

Load Average 1.44, 0.83, 0.50

Nie jest to rewelacyjne, ale zawsze lepsze to niż nic.

Nadal musiałem zapomnieć o SQM QoS, ale przynajmniej widzę, że procesor routera wykorzystany jest w większym stopniu, niż przez zmianą.

Idealne byłoby posiadanie procesora z Linksys WRT3200ACM (WRT32x) oraz kart sieci bezprzewodowej z MR8300.

Jeżeli interesujecie się zastosowaniem OpenWrt do bardziej zaawansowanych celów, wówczas warto pomyśleć o stworzeniu routera z wykorzystaniem Raspberry Pi 4 oraz osobnych punktów WiFi.

Gdyby tylko Askey RT4230W REV6 / RAC2V1K (nie SAC2V1K) można byłoby zdobyć, do pobawienia się, po tej stronie globu, to możliwe, że byśmy mieli niedrogą potężną alternatywę** do WRT3200ACM (WRT32x) czy MR8300, który ma być oficjalnie wspierany w wersji OpenWrt 22.03.

Pozdrawiam.

Komentarze