Last van bufferbloat? Versnel je routerwachtrij
Ken je dat? Je hebt nog maar net een download gestart of je hoort al klachten dat online gamen niet meer soepel loopt. Of je videogesprekken haperen als andere gebruikers gaan downloaden. Tijd voor een nog snellere internetverbinding? Waarschijnlijk is de snelheid niet je echte probleem, maar is je router niet slim genoeg om al het verkeer tegelijkertijd in goede banen te leiden en heb je last van bufferbloat. Zo kun je je routerwachtrij versnellen.
Wellicht is er toen we massaal thuis bleven en werken een probleem met je internetverbinding aan het licht gekomen waar je eerder nog geen last van had. Er wordt een download gestart of groot bestand uitgewisseld met een clouddienst, en online spellen, videogesprekken of streams beginnen te haperen. Dergelijke problemen worden veroorzaakt door iets wat bufferbloat genoemd wordt, een verstopping van de buffer in de router. De meeste routers hebben één wachtrij voor pakketjes die verwerkt moeten worden, waardoor die wachtrij overbelast raakt als er bijvoorbeeld een grote download gestart wordt. Pakketjes voor kritieke applicaties als gamen of voip raken dan verstopt tussen de pakketjes voor het downloaden. Alle pakketjes worden simpelweg in de buffer gezet en verwerkt op basis van binnenkomt, een fifo-principe (first in first out).
01 Quality of Service?
Routers zijn al jaren voorzien van QoS (Quality of Service), een techniek die belooft dergelijke verstoppingsproblemen te voorkomen, maar in de praktijk blijkt dit vaak niet goed genoeg te werken. Dat begint al bij de configuratie, die meestal erg lastig is. Al snel ben je bezig een lijst te maken waarin je bepaald verkeer, bepaalde apparaten of applicaties prioriteit geeft ten opzichte van andere apparaten of applicaties. Maar wat als je toepassing niet in die lijst staat? Of als alles belangrijk is? En je kunt jouw apparaat wel voor alles voorrang geven, maar dan gaan de andere netwerkgebruikers gegarandeerd klagen. In de praktijk wordt het instellen van QoS hierdoor al snel een heel ingewikkelde klus waar nooit een einde aan komt.
Het echte probleem blijft ook bij het toepassen van QoS uiteindelijk dat de router nog steeds met één wachtrij voor pakketjes werkt. QoS zorgt er alleen voor dat bepaalde pakketjes direct vooraan in de rij worden geplaatst. Natuurlijk zijn de QoS-instellingen wel het eerste waar je mee kunt experimenteren als je dat nog niet gedaan hebt. En als je weinig gebruikers of apparaten in je thuisnetwerk hebt, zou QoS je probleem wellicht op kunnen lossen.
©PXimport
02 Is het bufferbloat?
Hoe kom je erachter of je echt bufferbloat gerelateerde problemen hebt? Mocht je jezelf herkennen in de eerder beschreven problemen, dan is de kans erg groot. Maar meten is natuurlijk weten en de DSLReports Speed Test die je vindt op www.dslreports.com/speedtest kan je daarbij helpen. Deze speedtest test niet alleen je maximaal haalbare snelheden, maar houdt ook de variatie in latency (de pingtijden) in de gaten. Een hoge variatie in of oplopende pingtijden vertaalt zich als bijvoorbeeld ‘lag’ (vertraging) in een online spel. Je kunt de test het beste uitvoeren op een pc die bedraad is verbonden met je router. Om de test uit te voeren, selecteer wat voor soort verbinding je hebt (glasvezel, kabel of dsl). Vervolgens wordt de test uitgevoerd en krijg je een score voor bufferbloat en de kwaliteit van je lijn variërend van A+ voor een optimale verbinding tot F voor een dramatische verbinding. Is de score voor bufferbloat slechter dan een B, dan heb je hoogstwaarschijnlijk last van bufferbloat. Het zou natuurlijk ook kunnen dat je last hebt van een misconfiguratie in het netwerk van je provider waar je geen invloed op hebt, maar die kans is veel kleiner. Onze eigen vdsl-internetverbinding (100/30 Mbit/s) scoort doorgaans een B of C.
©PXimport
03 Smart Queue Management
Er is gelukkig wel een oplossing voor bufferbloat bedacht in de vorm van Smart Queue Management (SQM), dat kun je beschouwen als een geavanceerde variant van QoS. Hierbij wordt de pakketjes niet in één wachtrij op een hoop gegooid, maar opgedeeld in meerdere wachtrijen. Iedere datastroom krijgt een eigen wachtrij. Vervolgens wordt aan iedere wachtrij om de beurt evenveel tijd toegekend voor de afwikkeling van de pakketjes. Zo krijgt iedere toepassing de kans om soepel door te lopen zonder dat één toepassing die veel pakketjes genereert de boel ophoudt. Er wordt ook bijgehouden hoelang een pakketje in een wachtrij zit. Op het moment dat blijkt dat pakketjes te lang in een wachtrij zitten, worden ze simpelweg verwijderd. Dat lijkt een slecht idee, maar er moet iets vertraagd worden om te voorkomen dat een datastroom de complete buffer van een router vol laat lopen. En een datastroom die zoveel pakketjes genereert dat alles vol loopt, is doorgaans iets als een download waarbij het niet uitmaakt als die iets vertraagd wordt. Bovenstaande beschrijving is grofweg hoe het eerste werkende SQM-algoritme FQ_CoDel (Fair Queuing with Controlled Delay) werkt. Dit wordt gecombineerd met HTB (Hierarchical Token Bucket) dat zorgt voor een snelheidsbegrenzing aangepast aan de internetsnelheid. Een snelheidsbegrenzer is nodig om te voorkomen dat de pakketjes vervolgens niet alsnog in de modem(router) in één wachtrij worden gebufferd en al het werk voor niks is. FQ_CoDel is niet de enige vorm van SQM, zo is er in de vorm van CAKE (Common Applications Kept Enhanced) een doorontwikkeld algoritme. CAKE kan ook netwerkapparaten onderscheiden, iets wat handig is als één netwerkapparaat veel meer datastomen genereert dan andere netwerkapparaten. Ook kan CAKE tot op een bepaalde hoogte net wat meer prioriteit geven aan bijvoorbeeld voip-verkeer. Uiteindelijk biedt iedere vorm van SQM een fikse verbetering ten opzichte een router zonder SQM. Wil je meer weten over bufferbloat en de werking van HTB/FQ_CoDel en CAKE? Kijk dan zeker eens op de website www.bufferbloat.net.
04 Router met SQM
Er is alleen één probleem: vrijwel geen enkele consumentenrouter is voorzien van SQM. We weten dat de Netgear X4S (een gamingrouter) is voorzien van SQM gebaseerd op FQ_CoDel en wellicht is er nog een handjevol andere modellen. Dat betekent gelukkig niet dat er geen betaalbare opties zijn. De eerste optie die we hebben gevonden is een Ubiquiti EdgeRouter die voorzien is van SQM gebaseerd op FQ_CoDel. De voor dit artikel gebruikte ER-X kost zo’n 50 euro en zou geschikt moeten zijn om SQM toe te passen op een internetsnelheid tot zo’n 125 Mbit/s. Is de ER-X niet krachtig genoeg, dan is er voor 180 euro de ER-4 die volgens gebruikers SQM zou moeten kunnen toepassen tot zo’n 350 Mbit/s.
Een andere optie is een router voorzien van OpenWRT versie 18.06 of nieuwer die is voorzien van een SQM gebaseerd op CAKE. Omdat er allerlei routers zijn met OpenWRT-ondersteuning is het lastig om iets te zeggen over de maximale snelheden waarop SQM kan worden toegepast. Dat hangt puur van de processorkracht van de router af. Wij gebruiken voor dit artikel de relatief krachtige Linksys WRT3200ACM die volgens gebruikers SQM tot zo’n 400 Mbit/s moet kunnen toepassen.
Ook andere alternatieve firmware zoals DD-WRT of Merlin hebben de mogelijkheid tot SQM en ook een pakket als pfSense is geschikt voor SQM.
Je sluit je eigen router met SQM aan op de (modem)router van je internetprovider door de (modem)router van je internetprovider in bridgemodus in te (laten) stellen of door je eigen router in de DMZ van de (modem)router te hangen.
©PXimport
Ubiquiti EdgeRouter
Een groot verschil met consumentenrouters is dat een Ubiquiti EdgeRouter puur een router is, er is dus geen wifi ingebouwd. Een ander verschil is dat de router net zoals de meeste zakelijke oplossingen ontworpen is om te configureren met commando’s via een commandline-interface. Gelukkig is er wel een overzichtelijke webinterface en zolang je de router gebruikt in de standaardconfiguratie die de installatiewizard voor je instelt, werkt een EdgeRouter eigenlijk niet anders als een doorsnee (consumenten)router. Zo vind je de instellingen voor de dhcp-server gewoon in de webinterface en ook SQM schakel je via de webinterface in. Een voordeel van de in dit artikel genoemde ER-X ten opzichte van de duurdere ER-4 is dat de ER-X voorzien is van een hardwareswitch. Hierdoor werkt de ER-X zoals je van een typische consumentenrouter gewend bent: één poort doet dienst als wan-aansluiting en de vier andere poorten zijn identieke lan-aansluitingen die fullspeed met elkaar communiceren. Op de krachtigere ER-4 configureer je één poort als lan-aansluiting en sluit je vervolgens altijd een losse switch aan. De naamgeving die Ubiquiti aan de EdgeRouters geeft is nogal onnavolgbaar en grotendeels gebaseerd op het aantal poorten. De ER-X, ER-X-SFP en ER-10X bevatten dezelfde cpu en zijn dus even krachtig. Vervolgens bevatten ook de ER-4, ER-6P en ER-12 dezelfde cpu. De ER-12 is een variant van de ER-4 met een ingebouwde hardwareswitch. De ERLite-3 is duurder dan de ER-X, maar voor SQM-toepassingen langzamer.
©PXimport
05 Beperkte snelheid
Het is je misschien al opgevallen dat we schreven dat je SQM afhankelijk van de gebruikte router kunt toepassen op internetsnelheden tot zo’n 400 Mbit/s. Wellicht vreemd, omdat er uiteraard veel snellere internetabonnementen bestaan en ook de goedkoopste routers voorzien zijn van gigabitpoorten die op zich prima werken in combinatie met de snelste internetabonnementen. Toch is dat maar het halve verhaal, want je router is vermoedelijk veel langzamer dan je denkt. Veel routers maken namelijk gebruik van hardwareversnelling, ook wel hardware accelation, nat acceleration, hardware offloading, CTF (cut-through-forwarding) of Flow Accelerator genoemd. De precieze werking kan verschillen, maar in de basis wordt bij een ingeschakelde hardwareversnelling niet ieder pakketje geïnspecteerd om te beslissen wat er moet gebeuren. Een groot gedeelte van de pakketjes wordt na de inspectie van de eerste paar pakketjes afgehandeld door een gespecialiseerd gedeelte van de soc/cpu. Voor het toepassen van QoS en SQM moeten de pakketjes echter allemaal (softwarematig) geïnspecteerd worden en dan gaat de normale processorsnelheid van de router tellen. Ook zonder SQM, maar met uitschakelde hardwarversnelling komen veel routers niet verder dan zo’n 400 Mbit/s. Wat je bij een snellere asynchrone verbinding zoals kabelinternet kunt proberen is SQM alleen toepassen op de upload. Wil je SQM toepassen op een heel snelle internetverbinding, dan zul je aan de slag moeten met een zelfgemaakte router op basis van een relatief krachtige x86-processor in combinatie met software als pfSense.
©PXimport
06 SQM inschakelen op een EdgeRouter
Het instellen van SQM op de EdgeRouter is erg eenvoudig. Meet voordat je naar de instellingen gaat wat je download- en uploadsnelheid is, bijvoorbeeld met de DSLReports Speed Test. Klik in het menu op QoS en zorgt dat het eerste tabblad Smart Queue open staat. Vul een zelfgekozen Policy name in, bijvoorbeeld Bufferbloat en selecteer bij WAN Interface de juiste netwerkpoort (waarschijnlijk eth0). Op het dashboard van de webinterface vind je eventueel welke poort er als wan-poort (internet) wordt gebruikt. Vink vervolgens de optie Apply to upload traffic aan en vul je uploadsnelheid in Mbit/s in. Doe vervolgens hetzelfde voor de optie Apply to download traffic en vul je downloadsnelheid in Mbit/s in. Klik vervolgens op Apply. Je kunt eventueel via Show advanced options nog extra instellingen tonen, maar die zijn niet noodzakelijk.
De EdgeRouter stelt zelf een gelimiteerde snelheid in op basis van de door jou ingevoerde echte snelheden. Optioneel kun je proberen de instellingen nog wat tunen door snelheidstesten uit te voeren, terwijl je de ingevoerde download- en uploadsnelheid een procentpunt of vijf verlaagd om te zien of de latency in de DSLReports Speed Test nog lager en stabieler wordt. Je zoekt naar het punt met de hoogte snelheid en de laagste latency.
©PXimport
07 SQM inschakelen op een OpenWRT-router
Op OpenWRT is het instellen van SQM net iets lastiger, omdat de benodigde software niet standaard op de router is geïnstalleerd. Ook moet je eerst controleren of de ‘normale’ QoS-software geïnstalleerd is. Klik in het menu op System / Software en controleer of de packages qos-scripts en luci-app-qos geïnstalleerd zijn. Indien dat het geval is, klik dan op Remove om deze packages te verwijderen.
Klik vervolgens op Update Lists en klik het venster weg. Zoek vervolgens naar het package luci-app-sqm en klik op Install / Install. Klik het venster weg met Dismiss.
Vervolgens moet je het SQM-script activeren door in het menu te klikken op System / Startup. Zoek naar Initscript SQM en klik op Start. Controleer of de eerste knop op Enabled staat.
Je schakelt SQM in door in het menu te klikken op Network / SQM QoS. Vink op het tabblad Basic Settings de optie Enable this SQM instance aan. Selecteer bij Interface name je wan-poort. Doorgaans is dit eth0, maar op onze router eth1.2. Je kunt dit controleren door in het menu op Network / interfaces te klikken. Vervolgens moet je je download- en uploadsnelheid in Kbit/s invullen. Neem hiervoor een snelheid van 80 tot 95 procent van de gemeten snelheid, 90 procent is een mooi startpunt. De speedtest op www.speedtest.net kun je instellen op Kbit/s. Open vervolgens het tabblad Queue Discipline en kies cake als Queueing Discipline. Kies vervolgens piece_of_cake.qos als Queue Setup Script. Open het tabblad Link Layer Adaptation en selecteer hier Ethernet als je een glasvezel- vdsl(2)- of kabelinternet-verbinding hebt. Heb je een dsl-verbinding die niet op basis van vdsl(2) is, kies dan ATM. Vervolgens verschijnt er een nieuw invulveld. Vul hier 34 in als je vdsl(2) gebruikt, 44 als je een oudere variant van dsl gebruikt, 22 als je kabelinternet gebruikt en 44 als je glasvezelinternet hebt. Klik vervolgens op Save & Apply waarna de router de instellingen toepast.
In tegenstelling tot bij de EdgeRouter geef je zelf al een lagere snelheid dan de daadwerkelijke snelheid op. Tunen is daarom interessanter dan bij een EdgeRouter. Je kunt snelheidstesten uitvoeren terwijl je de ingevoerde download- en uploadsnelheid steeds wat verhoogd tot dat de latency omhoog gaat. Verlaag de snelheid dan weer wat totdat je het punt met de hoogste snelheid en laagste latency bereikt hebt.
©PXimport
Nadelen van SQM?
Het toepassen van Smart Queue Management heeft eigenlijk maar een nadeel: je maximaal haalbare snelheden worden zo’n 5 tot 15 procent lager. Dus vooral bij het downloaden van grote bestanden of het werken met cloudopslag zul je verschil merken. Ter illustratie: zonder SQM heeft onze internetverbinding een maximale down- en uploadsnelheid van zo’n 103,3 en 31,8 Mbit/s. Met een ingeschakelde SQM wordt dat maximaal 90,1 en 27,2 Mbit/s. Uiteraard gaan we er voor die genoemde circa tien procent snelheidsverlaging er wel van uit dat de router de snelheid van je internetverbinding daadwerkelijk kan bijhouden, anders liggen de maximale snelheden met ingeschakelde SQM natuurlijk veel lager.
08 Resultaat
Waar we zonder het toepassen van een router met SQM in DSLReports Speed Test een bufferbloatscore van B of C haalden, is dat na het instellen van SQM een A+. Het toepassen van SQM zorgt dus ook meetbaar voor een soepeler werkende internetverbinding.
Heb je geen last van de in de inleiding omschreven problemen, dan hoef je niet meteen aan de slag met SQM. Maar heb je al een router met de mogelijkheid tot SQM, dan zouden we zeker aanraden hier mee te experimenteren. Zeker als je veelvuldig online games speelt, is SQM een waardevolle aanvulling. Heb je een relatief langzaam asynchroon internetabonnement (tot 100 Mbit/s) op basis van dsl of kabel, en last van de omschreven problemen, dan is het toepassen van SQM zonder al te hoge kosten mogelijk. Lagere internetsnelheden hebben hier bovendien het meeste profijt van omdat de buffer sneller vol loopt. Voor de snelste gigabit-abbonementen is SQM doorgaans (nog) ongeschikt omdat het inschakelen van SQM betekent dat de hardwareversnelling van de router wordt uitgeschakeld. Op een snelle synchrone glasverbinding zul je echter veel minder snel last van bufferbloat hebben.
©PXimport