iPerf3: Nástroj na meranie kvality siete
Krátke predstavenie skvelého nástroja na meranie kvality siete.
Pred nedávnom som potreboval otestovať kvalitu (odozvu, rýchlosť, straty) siete medzi dvoma datacentrami. Ako prvý nástroj, ktorý príde bežnému IŤákovi na um je ping. Pingáč, respektíve ICMP protokol, máva na sieťových zariadeniach nízku prioritu. Tým pádom s vysokou pravdepodobnosťou bude mať na výstupe vyššiu odozvu, než očakávame.
Aplikácie, ktoré prevádzkujem komunikujú TCP protokolom. Preto som sa v bezbrehých vodách internetu snažil nájsť nástroj, ktorý meria práve rýchlosť medzi dvoma TCP uzlami.
Moje požiadavky na nástroj sú minimálne: jednoduchá inštalácia, interface príkazovej riadky a štatistika merania na výstupe.
Google mi ako prvý takýto nástroj ponúkol netperf. Na tomto nástroji ma zaujalo niekoľko vecí:
- manuál sa zdá byť z roku 1995
- hláška "BE SURE TO READ THE MANUAL. EVEN THOUGH IT MAY BE OUTDATED"
- pred rokom nejaký dobrák z HPE odmazal medzery na konci riadkov
- na jednom z prepínačov sa najprv nastaví maximum a potom minimum, zvláštny mýšlienkový pochod autorov
Aj keď sa zdá byť nástroj použiteľný, odpor voči diletantizmu autora HPE mi bráni v otestovaní tohto nástroja.
Našťastie som následne narazil na iPerf3. Prakticky rovnaký nástroj, dostupný na všetkých platformách, aktívne vyvýjaný a s dobrou dokumentáciou. Rozhodol sa teda vyskúšať ho.
Prakticky
Inštalácia na strane servra a klienta je na debian systémoch rovnaká:
apt-get install iperf3
Spustenie servra, prepínačom -p nastavíme port, -s nastavíme server mód.
iperf3 -p 5000 -s
Spustenie klienta, prepínačom -c nastavíme adresu protistrany, -p port, -u UDP mód meria lag/jitter medzi uzlami.
iperf3 -c 10.20.20.20 -p 5000 -u
Na výstupe vidíme v pravidelných intervaloch pribúdať čiastkové štatistiky. V sumáre vidíme trvanie celého testu, množstvo prenesených dát, rýchlosť prenosu dát, jitter (lag) a stratené packety.
-----------------------------------------------------------
Server listening on 5000
-----------------------------------------------------------
Accepted connection from 10.10.10.10, port 37014
[ 5] local 10.20.20.20 port 5000 connected to 10.10.10.10 port 35243
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-1.00 sec 129 KBytes 1.05 Mbits/sec 0.041 ms 0/91 (0%)
[ 5] 1.00-2.00 sec 127 KBytes 1.04 Mbits/sec 0.051 ms 0/90 (0%)
[ 5] 2.00-3.00 sec 129 KBytes 1.05 Mbits/sec 0.064 ms 0/91 (0%)
[ 5] 3.00-4.00 sec 127 KBytes 1.04 Mbits/sec 0.043 ms 0/90 (0%)
[ 5] 4.00-5.00 sec 129 KBytes 1.05 Mbits/sec 0.038 ms 0/91 (0%)
[ 5] 5.00-6.00 sec 129 KBytes 1.05 Mbits/sec 0.038 ms 0/91 (0%)
[ 5] 6.00-7.00 sec 127 KBytes 1.04 Mbits/sec 0.048 ms 0/90 (0%)
[ 5] 7.00-8.00 sec 129 KBytes 1.05 Mbits/sec 0.061 ms 0/91 (0%)
[ 5] 8.00-9.00 sec 127 KBytes 1.04 Mbits/sec 0.033 ms 0/90 (0%)
[ 5] 9.00-10.00 sec 129 KBytes 1.05 Mbits/sec 0.045 ms 0/91 (0%)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 sec 1.25 MBytes 1.05 Mbits/sec 0.045 ms 0/906 (0%) receiver
Navýstupe klienta máme viacmenej rovnaké informácie ako na servri.
Connecting to host 10.20.20.20, port 5000
[ 5] local 10.10.10.10 port 35243 connected to 10.20.20.20 port 5000
[ ID] Interval Transfer Bitrate Total Datagrams
[ 5] 0.00-1.00 sec 129 KBytes 1.05 Mbits/sec 91
[ 5] 1.00-2.00 sec 127 KBytes 1.04 Mbits/sec 90
[ 5] 2.00-3.00 sec 129 KBytes 1.05 Mbits/sec 91
[ 5] 3.00-4.00 sec 127 KBytes 1.04 Mbits/sec 90
[ 5] 4.00-5.00 sec 129 KBytes 1.05 Mbits/sec 91
[ 5] 5.00-6.00 sec 129 KBytes 1.05 Mbits/sec 91
[ 5] 6.00-7.00 sec 127 KBytes 1.04 Mbits/sec 90
[ 5] 7.00-8.00 sec 129 KBytes 1.05 Mbits/sec 91
[ 5] 8.00-9.00 sec 127 KBytes 1.04 Mbits/sec 90
[ 5] 9.00-10.00 sec 129 KBytes 1.05 Mbits/sec 91
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 sec 1.25 MBytes 1.05 Mbits/sec 0.000 ms 0/906 (0%) sender
[ 5] 0.00-10.00 sec 1.25 MBytes 1.05 Mbits/sec 0.045 ms 0/906 (0%) receiver
Pre porovnanie výsledok ping príkazu vyzerá nejak takto. Keď sa pozrieme na priemerné namerané hodnoty lagu, tak ping je na tom horšie (342 vs 45 mikro sekúnd). V mojom prípade sa môže zdať, že až 7 krát. Nutné je však uvedomiť si, že sme kvôli tejto informácií boli nútení použiť UDP mód. TCP móde by som to odhadol na polovičnú hodnotu, teda TCP protokol je v tomto prípade 2 krát pomalší než UDP, respektíve 3 krát rýchlejší než ICMP.
ping 10.20.20.20
PING 10.20.20.20 (10.20.20.20) 56(84) bytes of data.
64 bytes from 10.20.20.20: icmp_seq=1 ttl=57 time=0.363 ms
64 bytes from 10.20.20.20: icmp_seq=2 ttl=57 time=0.444 ms
64 bytes from 10.20.20.20: icmp_seq=3 ttl=57 time=0.255 ms
64 bytes from 10.20.20.20: icmp_seq=4 ttl=57 time=0.365 ms
64 bytes from 10.20.20.20: icmp_seq=5 ttl=57 time=0.434 ms
64 bytes from 10.20.20.20: icmp_seq=6 ttl=57 time=0.322 ms
64 bytes from 10.20.20.20: icmp_seq=7 ttl=57 time=0.219 ms
64 bytes from 10.20.20.20: icmp_seq=8 ttl=57 time=0.249 ms
64 bytes from 10.20.20.20: icmp_seq=9 ttl=57 time=0.234 ms
64 bytes from 10.20.20.20: icmp_seq=10 ttl=57 time=0.538 ms
^C
--- 10.20.20.20 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 224ms
rtt min/avg/max/mdev = 0.219/0.342/0.538/0.101 ms
Záverom
iPerf3 sa zdá byť veľmi šikovným nástrojom. Má ďaleko viac možností, než som popísal v tomto jednoduchom prípade užitia. Napríklad umožňuje testovať reverzný tok smerom zo servra ku klientovi, obmedziť rýchlosť toku, nastaviť dĺžku testu atď...
Našiel som pár zaujímavých projektov, ktoré stavajú na tomto nástroji. Reprezentácia dát v grafoch. Prvý projekt je čerstvejší, no komplexnejší. Ten druhý vyzerá byť neudržovaný, na druhú stranu je to len jeden skript.
PingTools Network Utilities mi v telefóne nahradil SpeedTest od Ookly. iPerf3 je len jeden z mnohých mocných nástrojov, ktoré sú v tomto balíku obsiahnuté.