Jan 192011
 

bandwUn elemento che spesso non è certo, o che bisogna misurare in seguito a problemi dichiarati o modifiche infrastrutturali è la rete. Ma come fare a misurare esattamente la velocità tra due server ?

Qualcuno usa ftp, scp o altri protocolli di trasferimento file, questi strumenti possono dare qualche indicazione, ma probabilmente misurerete il limite della velocità dei dischi o della CPU.

In questo articolo vi mostrerò 3 metodi per misurare da linea di comando la vostra banda di rete senza utilizzare i dischi.


Iperf

Iperf è stato sviluppato da NLANR/DAST come alternativa moderna per la misura delle prestazioni di banda massima sia TCP che UDP. Iperf permette la messa a punto di diversi parametri e caratteristiche UDP. Iperf rapporti di larghezza di banda, jitter ritardo, perdita datagramma.

La qualità di un link può essere testata come segue:
– Latenza (tempo di risposta o RTT): può essere misurata con il comando Ping.
– Jitter (variazione di latenza): può essere misurato con un test iperf UDP.
– perdita Datagram: può essere misurato con un test iperf UDP.

La larghezza di banda viene misurata attraverso test TCP.
Per essere chiari, la differenza tra TCP (Transmission Control Protocol) e UDP (User Datagram Protocol) è che il protocollo TCP utilizza processi per verificare che i pacchetti siano correttamente inviati al ricevitore mentre con i pacchetti UDP vengono inviati senza alcun controllo, ma con il vantaggio di essere più veloci del TCP.
Iperf utilizza le diverse capacità di TCP e UDP per fornire statistiche sui collegamenti di rete.

Con iperf avete una macchina che sarà il server in cui iperf si porrà in ascolto e l’altra che sarà il client che invia le informazioni.

Esempio:

iperf

Uso Base

Sul Server:

#iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 54355
[ ID]   Interval          Transfer        Bandwidth
[852]   0.0-10.1 sec   1.15 MBytes   956 Kbits/sec
------------------------------------------------------------
Client connecting to 10.6.2.5, TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[824] local 10.1.1.1 port 1646 connected with 10.6.2.5 port 5001
[ ID]   Interval          Transfer        Bandwidth
[824]   0.0-10.0 sec   73.3 MBytes   61.4 Mbits/sec

Sul Client

#iperf -c 10.1.1.1 -d
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 5] local 10.6.2.5 port 60270 connected with 10.1.1.1 port 5001
[ 4] local 10.6.2.5 port 5001 connected with 10.1.1.1 port 2643
[ 4] 0.0-10.0 sec 76.3 MBytes 63.9 Mbits/sec
[ 5] 0.0-10.1 sec 1.55 MBytes 1.29 Mbits/sec

Ovvero lanciando iperf (con gli opportuni flag) sulle due nostre macchine possiamo semplicemente misurare la banda tra di loro.

Iperf è disponibile anche per Windows.

Guida completa: http://openmaniak.com/iperf.php

Netcat

Per eliminare i dischi dall’avere una parte nellla misurazione, useremo netcat per spostare l’output del comando yes. Netcat è descritto come un “uno strumento per il debug della rete ricco di funzionalità”. Può essere ottenuto da Source Forge, o può essere già disponibile nella vostra distribuzione.

Anche in questo caso useremo una delle due macchine come server che riceve i dati e l’altra come client che invia le informazioni.

Uso Base:

Sulla macchina server

nc -v -v -l -n  2222 >/dev/null
listening on [any] 2222 ...

Sulla macchina client

time yes|nc -v -v -n 10.1.1.1 2222 >/dev/null

Sulla macchina client dopo 10 secondi (più o meno) fermate il processo con ctrl-c, avrete un output del tipo:

sent 87478272, rcvd 0
 
real 0m9.993s
user 0m2.075s
sys 0m0.939s

Sulla macchina server, prendete nota dei dati ricevuti (in bytes)

 sent 0, rcvd 87478392

Ora si moltiplicano i byte rcvd per 8 per ottenere i bit totali, poi dividere per il tempo: Il risultato in questo esempio è 70 Mb/s

Riferimento: http://deice.daug.net/netcat_speed.html

Bandwidth Test Controller (BWCTL)

BWCTL è una applicazione client a linea di comando e un demone di scheduling e gestione delle policy. Questi test possono misurare la massima larghezza di banda TCP, con varie opzioni di ottimizzazione disponibili, o, facendo un test UDP, il ritardo, jitter e la perdita dei datagrammi di una rete.

L’applicazione client bwctl opera contattando un processo bwctld sul sistema di test formato da due endpoint. BWCTL funziona come applicazione a 3 parti. Il client può organizzare un test tra due server su due sistemi diversi. Se il sistema locale è destinato ad essere uno dei punti finali del test, bwctl in grado di rilevare se un bwctld locale è in esecuzione e consente di gestire le funzionalità richieste del server, se necessario.
Il client bwctl viene utilizzato per richiedere il tipo di test di throughput desiderato. Inoltre, si pianifica quando il test dovrebbe essere eseguito. bwctld risponde o con una prenotazione provvisoria o con un messaggio di prova negata. Una volta bwctl è in grado di ottenere una prenotazione di corrispondenza da entrambi i processi bwctld (uno per ogni host che partecipa al test), si conferma la prenotazione. Quindi, il processo bwctld eseguie il test e restituisce i risultati. I risultati vengono restituiti al client da entrambi i lati della prova. Inoltre, il processo bwctld permette di condividere i risultati dai loro rispettivi lati del test con l’altro processo.

bwctl_arch

per maggiori informazioni sull’utilizzo guardate le manpage del progetto: http://www.internet2.edu/performance/bwctl/manpages.html

Popular Posts:

Flattr this!

  10 Responses to “3 Tool a linea di comando per misurare la banda tra due server”

  1. c’è un problema con

    nc -v -v -l -n 2222 > /dev/null

    forse è più corretto

    nc -v -v -l -n -p 2222 > /dev/null

    ciao

    • Ciao ajkain

      Su Ubuntu 10.10 io ho:

      man nc

      ….
      -p source_port
      Specifies the source port nc should use, subject to privilege restrictions and
      availability. It is an error to use this option in conjunction with the -l option.
      ….

      Quindi il mio comando è volutamente senza -p, forse nella tua versione ci vuole.
      Tu che versione di nc e distribuzione usi ?

      Ciao

  2. Don’t forget ‘ntool’.

  3. To use ftp for network speed test but avoiding using disk :-
    ftp remotehost
    bin
    put “|dd if=/dev/zero bs=32k count=10000” /dev/null

    This will report the transfer time and avoids using disk at both ends

  4. A tiny tool that I’ve found very handy for diagnosing network problems is ttcp:

    http://en.wikipedia.org/wiki/Ttcp

    It’s trivial to build on just about any architecture with a C compiler,

  5. speed-testing with iperf is a nice method.. As you can modify and alter the default operating system window size to test the speed..
    http://www.slashroot.in/iperf-how-test-network-speedperformancebandwidth

  6. “Now multiply the bytes rcvd by 8 to get total bits, then divide by the time: Result in this example is 70Mb/s”

    According to http://myrepono.com/faq/4
    Bandwidth should be calculated from bytes instead of bits, correct?

  7. HI,

    How i can monitor 1000’s of interfaces using iperf, is there any specific way to do that other than running client & server 1000 times for each interface.

    Thanks,
    Anki

Leave a Reply to ajkain Cancel reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*