Piero V.

Benchmark Fonera con OpenWRT

Qualche tempo fa ho scritto una guida su come installare OpenWRT sulla Fonera.

Bene, oggi ho fatto qualche Benchmark.

Visto che il segnale oscillava sempre tra il 54% e l’88%, ho flashato di nuovo la Fonera con OpenWRT 8.90.

Ho lasciato la configurazione di default tranne che ho cambiato nome della rete, ho forzato di metterla sul canale 1 e l’ho protetta con WPA2.

Come hardware ho usato una Fonera precisamente modello 2100 con la sua antenna originale, mentre sul computer ho usato una scheda Tp-link WN-651G con i driver ath5k (perciò senza le tecnologie proprietarie di Atheros).

La prova è stata effettuata tra due computer con sistema operativo Debian GNU Linux (Sid e Testing), Kernel 2.6.32-5, uno connesso alla wireless e uno connesso alla rete cablata.

Come condizioni ambientali con quello della rete cablata (computer #2) non c’è nessun problema. Al massimo c’è da dire che è una normale rete ethernet 100Mbps e che come cavi rientriamo perfettamente nello standard (un cat 5 da 2 metri per il computer e un cat 5 da 20 metri per la Fonera). La rete passa per uno switch D-Link.

Per il computer con il wireless (computer #1), invece ho voluto testare una situazione normale, cioè non ho spostato niente. Si trovava al piano superiore a circa 2-3 metri dalla Fonera che invece è al piano inferiore ma alzata da uno scaffale che sarà alto circa due metri. Tuttavia c’è da dire che visto che è nel sottoscala, il segnale viene subito stoppato da dei muri di cemento armato (quelli delle scale che sono portanti), che non sono proprio il massimo ma non ci sono altre situazioni praticabili per via dell’estetica.

Come benchmark non ne ho fatto uno completo cioè con sia da computer #1 a computer #2 e viceversa (per mancanza tempo) ma ho fatto solo da computer #1 a computer #2.

Per misurare le prestazioni bisogna fare ricorso a un grande spostamento di dati, così ho spostato un file di 4GB tramite FTP.

Il file trasferito è stata un’immagine raw di qemu creata con:

qemu-img create prova.img 4G

Che penso sia l’equivalente di (non l’ho testato):

dd if=/dev/zero of=prova.img bs=1M count=4096

Io l’ho creato in /tmp/ftp.

Come server FTP ho usato pyftpdlib così non ho dovuto fare niente come root.

Ecco come fare per avviare il server FTP:

wget http://pyftpdlib.googlecode.com/svn/trunk/pyftpdlib/ftpserver.py -O ftpserver.py
python

A questo punto vi ritroverete nella shell python, quindi digitate:

>>> import ftpserver
>>> authorizer = ftpserver.DummyAuthorizer()
>>> authorizer.add_anonymous("/home/nobody")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "ftpserver.py", line 425, in add_anonymous
    DummyAuthorizer.add_user(self, 'anonymous', '', homedir, **kwargs)
  File "ftpserver.py", line 397, in add_user
    raise AuthorizerError('no such directory: "%s"' % homedir)
ftpserver.AuthorizerError: no such directory: "/home/nobody"
>>> authorizer.add_anonymous("/tmp/ftp")
>>> handler = ftpserver.FTPHandler
>>> handler.authorizer = authorizer
>>> address = ("0.0.0.0", 30145)
>>> ftpd = ftpserver.FTPServer(address, handler)
>>> ftpd.serve_forever()
Serving FTP on 0.0.0.0:30145

A questo punto sarà iniziato il server.

Andate dall’altro computer, aprite un client FTP (io ho usato Mozilla Firefox, detto Iceweasel) e aprite ftp://indirizzo-ip:30145/.

Allora cominciate a scaricare il file prova.img.

Dovrebbe comparirvi (questo listato contiene anche la fine):

192.168.1.2:38293 ==> 220 pyftpdlib 0.6.0 ready.
192.168.1.2:38293 <== USER anonymous
192.168.1.2:38293 ==> 331 Username ok, send password.
192.168.1.2:38293 <== PASS ******
192.168.1.2:38293 ==> 230 Login successful.
[anonymous]@192.168.1.2:38293 User anonymous logged in.
192.168.1.2:38293 <== SYST
192.168.1.2:38293 ==> 215 UNIX Type: L8
192.168.1.2:38293 <== PWD
192.168.1.2:38293 ==> 257 "/" is the current directory.
192.168.1.2:38293 <== TYPE I
192.168.1.2:38293 ==> 200 Type set to: Binary.
192.168.1.2:38293 <== PASV
192.168.1.2:38293 ==> 227 Entering passive mode (192,168,1,6,184,68).
192.168.1.2:38293 <== SIZE /
[anonymous]@192.168.1.2:38293 FAIL SIZE "/". / is not retrievable.
192.168.1.2:38293 ==> 550 / is not retrievable.
192.168.1.2:38293 <== MDTM /
[anonymous]@192.168.1.2:38293 FAIL MDTM "/". / is not retrievable.
192.168.1.2:38293 ==> 550 / is not retrievable.
192.168.1.2:38293 <== RETR /
[anonymous]@192.168.1.2:38293 FAIL RETR "/". Is a directory.
192.168.1.2:38293 ==> 550 Is a directory.
192.168.1.2:38293 <== PASV
192.168.1.2:38293 ==> 227 Entering passive mode (192,168,1,6,177,150).
192.168.1.2:38293 <== CWD /
[anonymous]@192.168.1.2:38293 OK CWD "/".
192.168.1.2:38293 ==> 250 "/" is the current directory.
192.168.1.2:38293 <== LIST
[anonymous]@192.168.1.2:38293 OK LIST "/". Transfer starting.
192.168.1.2:38293 ==> 125 Data connection already open. Transfer starting.
192.168.1.2:38293 ==> 226 Transfer complete.
192.168.1.2:38293 <== PASV
192.168.1.2:38293 ==> 227 Entering passive mode (192,168,1,6,183,114).
192.168.1.2:38293 <== SIZE /prova.img
192.168.1.2:38293 ==> 213 4294967296
[anonymous]@192.168.1.2:38293 OK SIZE "/prova.img".
192.168.1.2:38293 <== MDTM /prova.img
192.168.1.2:38293 ==> 213 20100827115554
[anonymous]@192.168.1.2:38293 OK MDTM "/prova.img".
192.168.1.2:38293 <== RETR /prova.img
[anonymous]@192.168.1.2:38293 OK RETR "/prova.img". Download starting.
192.168.1.2:38293 ==> 125 Data connection already open. Transfer starting.
[anonymous]@192.168.1.2:38293 Disconnected.
[]192.168.1.2:54270 Connected.
192.168.1.2:54270 ==> 220 pyftpdlib 0.6.0 ready.
192.168.1.2:54270 <== USER anonymous
192.168.1.2:54270 ==> 331 Username ok, send password.
192.168.1.2:54270 <== PASS ******
192.168.1.2:54270 ==> 230 Login successful.
[anonymous]@192.168.1.2:54270 User anonymous logged in.
192.168.1.2:54270 <== SYST
192.168.1.2:54270 ==> 215 UNIX Type: L8
192.168.1.2:54270 <== PWD
192.168.1.2:54270 ==> 257 "/" is the current directory.
192.168.1.2:54270 <== TYPE I
192.168.1.2:54270 ==> 200 Type set to: Binary.
192.168.1.2:54270 <== PASV
192.168.1.2:54270 ==> 227 Entering passive mode (192,168,1,6,214,209).
192.168.1.2:54270 <== SIZE /prova.img
192.168.1.2:54270 ==> 213 4294967296
[anonymous]@192.168.1.2:54270 OK SIZE "/prova.img".
192.168.1.2:54270 <== MDTM /prova.img
192.168.1.2:54270 ==> 213 20100827115554
[anonymous]@192.168.1.2:54270 OK MDTM "/prova.img".
192.168.1.2:54270 <== REST 166680632
192.168.1.2:54270 ==> 350 Restarting at position 166680632.
192.168.1.2:54270 <== RETR /prova.img
[anonymous]@192.168.1.2:54270 OK RETR "/prova.img". Download starting.
192.168.1.2:54270 ==> 125 Data connection already open. Transfer starting.
192.168.1.2:54270 ==> 226 Transfer complete.
[anonymous]@192.168.1.2:54270 "/prova.img" sent.
^CShutting down FTP server.
[anonymous]@192.168.1.2:54270 Disconnected.

Durante il trasferimento la velocità media è stata di 2,5MiB (secondo Firefox). Purtroppo non ho guardato l’ora, ma sarà durato 20-30 minuti.

Inizialmente il trasferimento andava a una velocità di 2,9MiB, più o meno stabile (saliva anche a 3,2MiB come scendeva anche a 2,6MiB).

Allora nel Computer #1 ho avviato anche jDownloader per stressare di più la rete.

Come risultati ho ottenuto che l’upload è sceso a 2,6Mib abbastanza stabili (ogni tanto andava anche a 3) però certe volte ci sono stati picchi in cui scendeva per 1-2 secondi a 0. Invece il download era a 100KiB in meno allo standard della mia ADSL (~500KiB).

Ho anche provato a ottimizzare l’angolazione dell’antenna del client avendo anche perdite di segnale del 10%, fino a quando non ho trovato la migliore. Invece l’antenna della Fonera è sempre rimasta perpendicolare rispetto la Fonera stessa. Ho provato anche a inserirvi una parabolina che avevo fatto tempo fa, tuttavia il segnale era di poco peggiorato ma forse la velocità ara di poco cresciuta, comunque ho optato per rimuovere dopo circa 1-2 minuti la parabolina.

Come ulteriore test ho fatto un ping al router dal pc connesso alla wireless ed ecco la situazione:

--- 192.168.1.1 ping statistics ---
30 packets transmitted, 30 received, 0% packet loss, time 29029ms
rtt min/avg/max/mdev = 1.350/1.609/4.511/0.656 ms

Comunque dovrò ripetere ancora altri benchmark in modo diverso, per esempio la trasmissione tra due client della Wlan (per esempio con cIOS DVD Dumper sulla Wii) oppure la trasmissione in contemporanea sia di download sia di upload tra la rete locale oppure vedere con un client al piano interrato se succede qualcosa (penso di sì perché il muletto come rete è estremamente lento). Magari potrei anche fare scambi di antenne, tanto sono tutte con lo stesso attacco quelle che ho in casa o provare client senza antenna (che magari anche così si vede la differenza).

Invece il test a cui sono meno interessato è il test di distanza: se da una parte sono interessato per sapere fino a dove trovano la mia rete, dall’altra penso che non è che io ne senta l’utilità né per interesse di avere client parecchio distanti, né perché dovrei avere ottimizzazioni hardware, come l’antenna (direzionale) sul tetto e addirittura montata su un vero riflettore/parabola.