Hlavní navigace

Iperf: měření rychlosti spojení

Adam Štrauch

Určitě jste si někdy vyzkoušeli nějaký webový tester rychlosti internetového připojení a třeba se divili, proč neukazuje stejnou rychlost, jakou máte ve smlouvě se svým providerem. Dneska se podíváme na to, jak podobné měření realizovat mezi linuxovými stroji a co všechno je možné proti webovým udělátkům provést.

Pokud chcete otestovat parametry svého připojení, nemůže být rychlost tím jediným, na co byste se měli zaměřit. Je jedno, jestli jste správcem sítě nebo si jen hrajete se svým připojením doma, pokud chcete vědět, co od svého přístupu do internetu nebo kamkoli jinam čekat, je nutné použít správné nástroje a proklepnout linku po více stránkách. K tomu v dnešním článku použijeme nástroj iperf.

Hlavní slabinou webových měřídel je hlavně to, že pracují na dost vysoké úrovni a výsledná hodnota může být ovlivněna mnoha faktory počínaje rychlostí Flashe, přes JavaScript až po parametry používaných paketů. V případě, že máte mezi měřeným spojem dva linuxové stroje, není potřeba se spoléhat na nepřesné nástroje a vystačíte si s Linuxem. Navíc takto dokážete zjistit nejen rychlost linky, ale taky jak se chová pod zátěží nebo jak dokáže přenášet data oběma směry, tedy full-duplexně.

Pokud máte připojení přes nějaký drát, není většinou full-duplexního přenosu problém dosáhnout a spojení pojede maximální rychlostí oběma směry najednou. U WiFi spojů je tohle problém, protože oba směry s výjimkami sdílí stejný přenosový kanál, a tak data letí pouze jedním nebo druhým směrem (half-duplexně). Existují technologie, které tuto slabinu potlačují nebo úplně vyruší, ale v takovém případě pak také stoupá cena zařízení a navíc je vyžadována složitější konfigurace. V reálném prostředí na problém half-duplexního přenosu vůbec nemusíte narazit, protože jeho kapacita často převyšuje kapacitu připojení do internetu a do sdíleného média se vejdou oba směry přenosu s rozumnou odezvou.

Po technologických překážkách už pak záleží jen na hardwaru, přes který jste připojeni. Nejslabším místem bývá router, který si uživatelé pořídili sami a těžko jim to dávat za zlé, protože za rozumné peníze se shání dobrý hardware s dobrým softwarem jen velmi špatně. Levné routery možná zvládnou rychlost vašeho připojení, ale mohou mít problémy s jeho náročnějším využitím. Některé síťové protokoly, mezi nimiž je v tomto králem BitTorrent, dokážou vytvořit stovky spojení a vygenerovat stovky až tisíce paketů za sekundu. V takové situaci levnému routeru nestíhá procesor a v lepším případě začne pakety ztrácet, v horším pak dochází k samovolným restartům. Na takové problémy nenarazíte pouhým otestováním rychlosti, ale až praktickým vyzkoušením nebo použitím testovacích nástrojů.

Jak na měření s iperf

Tento článek je zaměřen hlavně na měření rychlosti, ve kterém si ukážeme, jak se používá utilitka iperf. To je program, který může běžet buď v serverovém, nebo klientském režimu. Po navázání spojení začne maximální možnou nebo nastavenou rychlostí posílat data a na konci zobrazí informace o přenosu. Základem ke každému pokusu je spustit server, k čemuž je nejjednodušší možnost použít parametr -s:

# iperf -s 

V takovém případě iperf začne poslouchat na všech dostupných IP adresách, na TCP portu 5001.

root@OpenWrt:~# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------ 

Iperf bere v serverovém módu několik parametrů, které by vás mohly zajímat.

-u                      UDP mód
-p port                 změna portu
-B rozhraní|adresa      nastavení naslouchání na konkrétní adresu nebo rozhraní
-D                      spustí iperf jako daemona 

Když chceme spustit iperf v klientském režimu, použijeme parametr -c a k němu adresu serveru z předchozího kroku.

$ iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.105 port 50171 connected with 192.168.1.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.1 sec  34.9 MBytes  29.0 Mbits/sec 

Jde o nejjednodušší možnou variantu, a když si prohlédnete manuálovou stránku aplikace, zjistíte, že je možné volání rozšířit o zajímavé volby.

-b cílová rychlost              nastavit maximální rychlost
-d                              obousměrný test
-r                              obousměrný test zvlášť
-t doba testu                   jak dlouho test poběží
-n velikost                     kolik dat se má odeslat
-F soubor                       načíst data pro odeslání ze souboru
-I                              načíst data pro odeslání ze standardního vstupu
-P počet klientů                simulace více klientů
-M velikost                     velikost TCP segmentu 

Pokud vás třeba zajímá, zda dokáže vaše linka přenášet stabilně 20 Mbps jedním směrem po dobu jedné minuty, stačí na jedné straně spustit iperf jako UDP server:

$ iperf -s -u 

A na druhé následujícím způsobem klienta:

$ iperf -c 192.168.1.1 -u -i 2 -b 20M -t 60
------------------------------------------------------------
Client connecting to 192.168.1.1, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size:  224 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.105 port 42488 connected with 192.168.1.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 2.0 sec  4.77 MBytes  20.0 Mbits/sec
[  3]  2.0- 4.0 sec  4.77 MBytes  20.0 Mbits/sec
[..]
[  3] 58.0-60.0 sec  4.77 MBytes  20.0 Mbits/sec
[  3]  0.0-60.0 sec   143 MBytes  20.0 Mbits/sec
[  3] Sent 102042 datagrams
[  3] Server Report:
[  3]  0.0-60.0 sec   143 MBytes  20.0 Mbits/sec   0.531 ms    0/102041 (0%)
[  3]  0.0-60.0 sec  1 datagrams received out-of-order 

UDP nemá žádné regulační mechanismy a iperf posílá data nastavenou rychlostí bez ohledu na to, zda dorazí, či ne. V tomto kontextu je pak zajímavější, co vyleze na straně serveru, protože klientská strana nemusí ani vědět, že data dorazila.

[  3] local 192.168.1.1 port 5001 connected with 192.168.1.105 port 42488
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0-60.0 sec   143 MBytes  20.0 Mbits/sec   0.531 ms    0/102041 (0%)
[  3]  0.0-60.0 sec  1 datagrams received out-of-order 

Z výstupu poznáme, že vše proběhlo, jak mělo, bylo přijato 143 MB konstantní rychlostí 20 Mbps a rozdíl času cesty paketů kolísal v půl milisekundě. Toto měření proběhlo na lokálním WiFi spoji na vzdálenost pár metrů, ale mnohem zajímavější jsou výsledky z měření cesty dat po internetu. Netuším sice, jak rychlé si platím připojení, ale výsledek stejného testu mezi vzdáleným serverem a mým routerem mi to prozradí více než přesně:

[  3] local 87.236.194.121 port 5001 connected with 88.103.220.182 port 50408
[ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams
[  3]  0.0-60.1 sec    135 MBytes  18.9 Mbits/sec  0.776 ms 5554/102043 (5.4%)
[  3]  0.0-60.1 sec  548 datagrams received out-of-order 

Průměrná rychlost je 18,9 Mbps a pěti procentům ztracených paketů odpovídá rozdíl 1,1 Mbps proti odesílaným 20 Mbps. Půl procenta paketů nedorazilo v pořadí, v jakém byly odeslány, ale rozdíl mezi nejrychlejším a nejpomalejším paketem 0,7 milisekundy není vůbec špatný. Po pár pokusech jsem se bez ztráty jediného paketu dostal na 16 Mbps jedním směrem.

UDP možná ukáže maximální rychlost, ale pokud zrovna nekoukáte na nějaký video stream, bude většina přenosů realizována přes protokol TCP. Ten se dokáže postarat o ztracené pakety i o jejich pořadí, ale tato garance něco stojí. Pro test na TCP stačí server spuštěný s parametrem -s a u klienta vybrat buď testovací čas, nebo celkové množství dat.

$ iperf -c 192.168.1.1 -M 1500 -t 5
[...]
[  3] local 192.168.1.105 port 55214 connected with 192.168.1.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 5.1 sec  19.8 MBytes  32.8 Mbits/sec 

Pokud se vám chce, můžete si ještě pohrát s parametrem -M, který určuje velikost jednotlivých paketů.

Shrnutí

Iperf je utilitka, kterou by měl znát každý správce sítě při testování propustnosti spojů nebo nastavení shaperu. S přidanou hodnotou pak dokáže nahradit různá webová měřidla, kde často není k dispozici měřící metodika. Na druhou stranu není možné od iperf čekat zázraky, skutečný zátěžový test linky a hardwaru na ní položeného udělat neumí.

Našli jste v článku chybu?

27. 7. 2012 15:04

CCNA guru (neregistrovaný)

Je to celkom jednoduché

Duplex znamená, že komunikácia je obojsmerná, t.j. dáta môžu vychádzať z obidvoch koncov. Delí sa na half-duplex a full-duplex, podľa toho, či tieto dáta môžu ísť oboma smermi súčasne, alebo nie. Typickým príkladom je bežné používanie Internetu v obojsmernej komunikácii.

Simplex znamená, že komunikácia prebieha VŽDY len z jedného konca do toho druhého. Príkladom je napr. rôzne broadcast vysielanie (rádiá, televízie).

V článku je preto imho chyba. Mal byť použitý termín…

27. 7. 2012 21:41

Co jsme ve firmě pomocí iperfu zkoušeli propustnost sítě, tak test samotný žral hodně CPU a zkreslovalo to výsledky. Navíc to při pokusech o oboustranné měření program občas naprosto vzdával.

Zkusili jsme netperf a nemůžu si vynachválit. Ukázal nějakých 980 Mbps (oproti <800 Mbps u iperfu) - jen ty oboustranné testy nemá. To už by šlo nějak ale naskriptovat...

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: Poznáte poctivé suroviny na pečení cukroví?

Poznáte poctivé suroviny na pečení cukroví?

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

120na80.cz: Jmelí je více léčivé než jedovaté

Jmelí je více léčivé než jedovaté

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Vitalia.cz: I církev dnes vyrábí potraviny

I církev dnes vyrábí potraviny

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...