wiki:Measurements/Link
Last modified 17 months ago Last modified on 03/28/2016 02:55:06 PM

Merjenje kvalitete povezave

Ta navodila so napisana za tiste, ki se želijo bolje seznaniti z delom z opremo. Za sodelovanje v omrežju to znanje ni potrebno, ampak se je dovolj le javiti, recimo v okviru akcije odpri okno? in za tehnične podrobnosti poskrbimo skupaj.

V omrežju? je uporabno meriti tudi kvaliteto povezave med sosednjimi točkami, saj same vrednosti o kvaliteti, ki jih sporoča WiFi kartica?, ne odražajo nujno realne kvalitete povezave, še posebej ne v ad hoc načinu delovanja in to pri dostopu do različnih točk v okolici. Prav tako iz njih ni mogoče določiti hitrosti prenosa podatkov med točkami.

Meritev hitrosti je koristna za samo analizo delovanja omrežja in postavljenjih točk, kakor tudi pri postavljanju nove točke. V slednjem primeru lahko koristi pri usmerjanju usmerjene antene? oziroma pri iskanju najboljše postavitve sektor antene?, tako da je prenos podatkov do sosednjih točk čimboljši.

Merjenje

Na točkah z wlan slovenija firmwareom so potrebni osnovni programi za merjenje kvalitete povezave že nameščeni. Za merjenje se je tako potrebno prijaviti na točko? in sprožiti direkten prenos do oziroma iz želene sosednje točke. Sosednje točke je najlažje videti na pregledu točk, kjer je za vsako točko prikazan tudi aktualen seznam točk, ki jih dana točka vidi.

V naslednjih ukazih se uporablja enak način zapisa ukazov, kot je opisan v navodilih za SSH dostop?, predvsem da znak $ le označuje ukaz, ki ga je potrebno izvesti v konzoli? in ni del samega ukaza.

Tako je za merjenje hitrosti prenosa podatkov iz druge točke (v primerih z naslovom? omnipotent.nodes.lj.wlan) na točko, na katero si prijavljen, potrebno pognati:

$ wget -q -O - http://omnipotent.nodes.lj.wlan/cgi-bin/zero | pv --rate > /dev/null

wget je program, ki služi za prenašanje vsebin preko HTTP protokola? in ki ga v tem primeru uporabljamo za prenos podatkov iz druge točke. Parameter -q pove, naj wget ne izpisuje poteka prenosa podatkov (ki žal ne vsebuje podatka o hitrosti prenosa), parameter -O - pove, naj se prenešeni podatki izpisujejo na standardni izhod programa in zadnji parameter pove URL naslov programa na sosednji točki, ki vse kar dela je, da izpisuje neomejeno količino ničel. Prenešene podatke (standardni izhod programa wget) preusmerimo v program pv, kateremu s parametrom --rate povemo, da naj izpisuje hitrost prenosa podatkov. Program pv podatke, ki smo jih usmerili vanj, posreduje naprej, tako da jih na koncu moramo preusmeriti v datoteko /dev/null, kjer se izničijo.

Prenos samih ničel ni nujno najbolj realen, zato je možno prenašati tudi naključno generirane podatke:

$ wget -q -O - http://omnipotent.nodes.lj.wlan/cgi-bin/urandom | pv --rate > /dev/null

Torej različen je le program na sosednji točki, ki generira podatke za prenos. V tem primeru program tako generira naključne podatke. Problem te meritve je, da je generiranje naključnih podatkov procesorsko zahtevno opravilo in je možno, da sosednja točka ne zmore generirati toliko podatkov, kolikor bi se jih sicer lahko po sami povezavi med točkama prenašalo. Tako da je v primeru hitrih in kvalitetnih povezav možno, da bo takšna meritev kazala manjšo hitrost prenosa, kot jo sama povezava v resnici omogoča, ampak to bo kazala na račun prepočasnega generiranja testnih podatkov in ne zaradi omejitve povezave.

V kolikor nas zanima merjenje hitrosti prenosa podatkov na drugo točko z točke, na katero si prijavljen, je potrebno pognati:

$ cat /dev/zero | pv --rate | wput omnipotent.nodes.lj.wlan /cgi-bin/null

cat program usmeri neomejeno količino ničel v program pv, ki zaradi parametra --rate izpisuje hitrost prenosa podatkov, ki jih naprej usmeri v program wput, ki jih preko HTTP protokola? posreduje na sosednjo točko programu /cgi-bin/null, ki podatek izniči.

Tudi v tem primeru je možno pošiljati naključne podatke, ki bolje predstavljajo realno uporabo:

$ cat /dev/urandom | pv --rate | wput omnipotent.nodes.lj.wlan /cgi-bin/null

Tudi v tem primeru lahko pride do problema, če je generiranje naključnih podatkov počasnejše od hitrosti, s katero bi se lahko podatki pošiljali povezavi, saj v tem primeru meritev ni pravilna.

Pri vseh meritvah je koristen tudi parameter --interval X programu pv, ki pove, kako pogosto naj program izpisuje hitrost prenosa podatkov. X je število sekund. Z večjimi vrednostmi se tako nihanja v izmerjeni hitrosti zgladijo (povprečijo), z manjšimi pa je meritev bolj odzivna in aktualna. Primer za meritev vsakih 10 sekund:

$ wget -q -O - http://omnipotent.nodes.lj.wlan/cgi-bin/zero | pv --rate --interval 10 > /dev/null

Kakovost signala

Kakovosti signala nam lahko pomaga pri postavitvi anten na večjih razdaljah. To lahko spremljamo preko grafičnih vmesnikov, kot je Luci, lahko pa podatke odčitavamo kar iz konzole.

Primer uporabe v konzoli:

$ while true; do echo; iw ap0 station dump; grep -E "(station|signal)"; sleep 1; done

Analiza meritev

Pri analizi meritev se je potrebno zavedati, da gre za umetno ustvarjene podatke, tako da bo realna uporaba vseeno od teh meritev odstopala. Vseeno pa meritve omogočajo pridobiti občutek o tem, kako se povezava obnaša. Torej stvari, ki nas zanimajo, so kakšna je najhitrejši prenos podatkov, ki je po povezavi možen, okoli katere hitrosti prenosa se nekje v splošnem hitrosti prenosa gibljejo, predvsem pa koliko hitrost prenosa niha skozi čas. Stabilna a manjša hitrost je v praksi veliko uporabnejša, kot sunki hitrega prenosa podatkov, saj je odzivnost povezave v prvem primeru (recimo pri brskanju po spletnih straneh) boljša.

Prav tako je potrebno izmeriti hitrost in obnašanje hitrosti povezave v obe smeri, saj pri WiFi povezavah? ta ni nujno enaka.

Simulacija neugodnih omrežnih razmer

Včasih je za potrebe testiranja uporabno simulirati neugodne omrežne razmere kot so npr. visoke zakasnitve paketkov, izguba paketkov, kvarjenje paketkov, sprememba vrstnega reda ipd. Za to je na točkah na voljo jedrni modul sch_netem, ki implementira qdisc (queuing discipline). S pomočjo orodja tc je mogoče te parametre nastaviti za poljuben vmesnik.

Pred uporabo je treba modul naložiti z uporabo ukaza:

$ insmod sch_netem

Primeri uporabe:

  • Izguba paketkov
    tc qdisc add dev eth0 root netem loss 50%
    Nastavi verjetnost za izgubo poslanega paketka na 50%.
  • Zakasnitve paketkov
    tc qdisc add dev eth0 root netem delay 100ms
    Zakasni vse poslane paketke za dodatnih 100ms.
  • Kvarjenje paketkov
    tc qdisc add dev eth0 root netem corrupt 1%
    Pokvari en odstotek paketkov.

Možnosti je veliko, seznam je na voljo z uporabo tc qdisc add dev eth0 root netem help. Ukaze je mogoče tudi kombinirati npr. takole:

$ tc qdisc add dev eth0 root netem delay 100ms loss 50%

Ko je qdisc enkrat nastavljen, se lahko parametre spreminja takole:

$ tc qdisc change dev eth0 root netem delay 50ms

Uporabni programi