Hlavní navigace

Iperf: měření rychlosti spojení

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.

Tweetni to Odměnte autora  Jak to funguje?

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í.

Adam Štrauch

Adam Štrauch

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.

Ohodnoťte jako ve škole:
Průměrná známka 1,14
Tweetni to Odměnte autora  Jak to funguje?

Školení: Obsahová strategie a content marketing

DW - Školeny webcopywritingu
  • Proč je obsahový marketing výrazným trendem
  • Jak navrhnout užitečnou obsahovou strategii
  • Jaký obsah využít a které nástroje vám pomohou
  • Jak zlepšit workflow a výsledky copywritingu

Detailní informace o školení content strategy »

       

Přehled názorů

Grafická nadstavba
hodza 27. 7. 2012 01:36
Nový
└ 
Re: Grafická nadstavba
aaa 30. 7. 2012 13:31
Nový
Jednotky
vandrovnik 27. 7. 2012 07:59
Nový
└ 
Re: Jednotky
Adam Štrauch 27. 7. 2012 19:15
Nový
nejen pro linux
Petr Macek 27. 7. 2012 08:27
Nový
SIMPLEX vs DUPLEX
Kuprezak 27. 7. 2012 10:20
Nový
├ 
Re: SIMPLEX vs DUPLEX
Jamie 27. 7. 2012 10:42
Nový
│
└ 
Re: SIMPLEX vs DUPLEX
Kuprezak 27. 7. 2012 11:07
Nový
│
 
└ 
Re: SIMPLEX vs DUPLEX
CCNA guru 27. 7. 2012 15:04
Nový
└ 
Re: SIMPLEX vs DUPLEX
Adam Štrauch 27. 7. 2012 19:13
Nový
DSCP
tenis 27. 7. 2012 11:09
Nový
└ 
Re: DSCP
Jiří J. 27. 7. 2012 14:43
Nový
iperf vs netperf
Martin Janiczek 27. 7. 2012 21:41
Nový
Cisco IOS ttcp
AlexW 29. 7. 2012 21:19
Nový
iperf je nepouzitelna hruza, nekdo by to mel prepsat...
Harvie.CZ 30. 7. 2012 17:42
Nový
├ 
Re: iperf je nepouzitelna hruza, nekdo by to mel prepsat...
chris 30. 7. 2012 18:04
Nový
└ 
Re: iperf je nepouzitelna hruza, nekdo by to mel prepsat...
Me 2. 8. 2012 22:41
Nový
použití?
cuki 13. 8. 2012 22:54
Nový
└ 
Re: použití?
Kaacz 15. 11. 2012 19:48
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem