Come testate la velocità della rete tra due box?


168

Ho una rete gigabit installata a casa mia e alcune scatole basate su Ubuntu. Per completa curiosità vorrei controllare la velocità tra le due scatole. Non sto avendo problemi con la velocità o altro, è davvero solo il geek in me ad essere curioso. Inoltre, forse i risultati mi faranno sapere se c'è spazio per miglioramenti o se ho qualcosa di configurato in modo errato.

Quindi, come testare correttamente la velocità di rete tra le caselle Ubuntu?

Risposte:


272

Io uso iperf. È una disposizione del server client in quanto la si esegue in modalità server a un'estremità e ci si collega da un altro computer sull'altro lato della rete.

Esistono entrambe le macchine:

sudo apt-get install iperf

Avvieremo un iperfserver su una delle macchine:

iperf -s

E poi sull'altro computer, dire iperfdi connettersi come client:

iperf -c <address of other computer>

Sul computer client vedrai qualcosa del genere:

oli@bert:~$ iperf -c tim
------------------------------------------------------------
Client connecting to tim, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.4 port 37248 connected with 192.168.0.5 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.04 GBytes    893 Mbits/sec

Naturalmente, se stai eseguendo un firewall sul computer server, dovrai consentire le connessioni sulla porta 5001 o cambiare la porta con il -pflag.


Puoi fare praticamente la stessa cosa con old old nc(netcat) se sei così incline. Sul computer server:

nc -vvlnp 12345 >/dev/null

E il client può convogliare un gigabyte di zeri attraverso ddil nctunnel.

dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345

Come Demod:

$ dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345
Connection to 10.10.0.2 12345 port [tcp/*] succeeded!
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 9.11995 s, 118 MB/s

Il tempismo è dato da ddma dovrebbe essere abbastanza preciso in quanto può emettere solo la velocità con cui il tubo lo prenderà. Se non sei soddisfatto, potresti concludere tutto in una timechiamata.

Ricorda che il risultato è in mega byte, quindi moltiplicalo per 8 per ottenere una velocità di mega bit al secondo. La demo sopra è in esecuzione a 944 Mbps.


Amico, hai tutte le risposte alle mie domande! Apparentemente la mia rete non è configurata così come il tuo trasferimento solo a 714 MByte e larghezza di banda di 598 Mbits / sec. Non lo vedo in futuro. Grazie.
Jacob Schoen,

In tutta onestà, l'altra scatola è a un solo interruttore (e 20 metri di cat5e) di distanza e non c'è congestione. 600mbps è ancora piuttosto veloce.
Oli

Questo è fantastico, ma non ho accesso root al server.
Geoff,

Prova -P 10. Il mio risultato con una connessione singola è simile a jschoens, ma con 3+ connessioni parallele, spinge costantemente 920 Mbps.
wujj123456,

1
@CMCDragonkai Probabilmente non dovresti testare risorse che non sono tue. I test pesanti sulla larghezza di banda possono avere un impatto sulla stabilità a breve termine.
Oli

22

Come la raccomandazione di Oli per iperf. Voglio solo aggiungere diversi punti:

  1. Esistono anche client Windows che consentono il test su più piattaforme.
  2. -t <seconds>cambia la lunghezza del test. cambia il numero di connessioni simultanee. Ad esempio, testa 10 connessioni insieme per 30 secondi e fornisce risultati aggregati insieme a 10 velocità di connessione separate.-P <n>iperf -c [target IP] -P 10 -t 30
  3. Non hai bisogno di sudo. Puoi semplicemente scaricare il file binario da http://iperf.fr/ . Dovrebbe funzionare. Scaricalo con wget, rendilo eseguibile con chmode puoi eseguire direttamente il binario. Funziona perfettamente.

Ho scoperto che, usando le impostazioni predefinite, la singola velocità di connessione varia un po '. Tuttavia, con 3+ connessioni parallele, i risultati sono più coerenti sul mio switch gigabyte. (costantemente a 910-920 Mbps)


8

Usando questo script puoi testare facilmente la velocità di connessione tra la tua macchina e qualche host remoto. Esempio di utilizzo:

$ scp-speed-test.sh user@remote_host 80000
  • user@remote_host è l'host di destinazione (è necessario disporre dell'accesso ssh a questo host)
  • 80000è la dimensione approssimativa del file di test (in kbs), che verrà ricevuto dall'host remoto. Non è un argomento obbligatorio.

4
Questo sembra testare la velocità dell'applicazione SCP, che sarà inferiore rispetto a un test a un livello inferiore. Ad esempio, nc utilizza L4. Naturalmente, questo è fantastico se ti interessa di più la velocità di SCP.
sudo,

1
Ha problemi: questo script scrive e legge un file su disco: è più lento di ram, quindi può essere un rallentamento artificiale. Invia anche solo zeri, nel caso in cui siano compressi è un grosso aumento di velocità artificiale. Se vuoi dati pseudocasuali, non usare /dev/random(può bloccare) ourandom (i commenti del link suggeriscono che) possono anche essere molto lenti, invece usa una dm-cripta (Vedi le FAQ di cryptsetup 2.19 Come posso cancellare un dispositivo con cripto- casualità di grado? ) magari con un file in ram.
Xen2050,

4

Se vuoi testare la tua LAN Ethernet a un livello inferiore puoi usare Etherate che è uno strumento di test Ethernet CLI Linux gratuito:

https://github.com/jwbensley/Etherate

Lanciandolo nel mix come strumenti come iPerf (che sono molto buoni!) Operano su IP e TCP o UDP. Test eterici direttamente su Ethernet / OSI layer 2.


2

Il comando seguente non richiede pacchetti aggiuntivi ma accesso SSH:

ssh username@myserver.example.com 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress

Esempio di output:

2992238080 bytes (3.0 GB) copied, 27.010250 s, 111 MB/s
5859375+0 records in
5859375+0 records out
3000000000 bytes (3.0 GB) copied, 27.1943 s, 110 MB/s

Il comando stampa un file fittizio da 3 GB (1000 ^ 3 byte) pieno di zeri su stdout sul server remoto, che viene stampato (trasferito) tramite SSH su stdout del server locale e quindi reindirizzato localmente /dev/null(ovvero ignorato). È anche possibile vedere l'avanzamento del test durante l'esecuzione.

Certamente non è preciso come altri strumenti, ma il mio caso d'uso è stato quello di eseguire il debug di un processo di backup in cui volevo verificare se la velocità della rete era il problema senza installare pacchetti aggiuntivi.


1

Esistono anche altri utili strumenti da riga di comando per il benchmarking della larghezza di banda tra due host:

nuttcp

server$ nuttcp -S
client$ nuttcp -v -v -i1 1.1.1.1 ;# 1.1.1.1 is server's address

nepim

 server$ nepim
 client$ nepim -d -c 1.1.1.1 ;# 1.1.1.1 is server's address

Goben

 server$ goben
 client$ goben -hosts 1.1.1.1 ;# 1.1.1.1 is server's address

2
In che modo differiscono l'uno dall'altro e dall'iperf? Funzionano allo stesso modo, cosa fanno? nuttcp è in Debian e apparentemente "nuttcp è basato su nttcp, che a sua volta è stato un miglioramento da parte di Silicon Graphics (SGI) sul ttcp originale, che è stato scritto da Mike Muuss presso BRL qualche tempo prima del dicembre 1984, per confrontare le prestazioni di TCP stack di UC Berkeley e BBN per aiutare DARPA a decidere quale versione posizionare nella prima versione di Unix BSD. "
Xen2050,

0

come ho sottolineato nel mio commento alla migliore risposta, quella soluzione non è abbastanza buona perché il client / server non è ottimizzato per ... spremere ogni bit di velocità

la mia soluzione:

crea un ramdisk su entrambi i lati (quindi, non sei limitato dalla velocità di archiviazione e ti suggerisco di crearli con ramfs non tmpfs, quindi non andranno in swap ... fai solo attenzione a non lasciare almeno 512M di memoria libera per il sistema, questo è NECESSARIO se si dispone di Ethernet giga, a quella velocità anche gli SSD possono rallentare le cose) installare apache sul server, quindi creare un collegamento a ramdisk, creare alcuni file di grandi dimensioni su ramdisk (100M-1G, è possibile crearli con dd da / dev / random o copia se ne hai un po 'a portata di mano) quindi vai sul lato client e scaricali (anche sul ramdisk di quel lato) con un programma di download avanzato, ho usato lftp

vabbè, la differenza era maggiore, da 75 Mbps segnalati da iperf e 9,5 M / s netcat

a 11.18 M / s con la mia soluzione:

1591129421 bytes transferred in 136 seconds (11.18M/s)

1
9,5 M * 8 = 76 mbps; è abbastanza vicino a 75 mbps
Fusca Software il

-4

È facile collegare il computer alla prima casella, collegare l'altra casella alla prima casella. Quindi dal tuo computer esegui il ping della prima casella salva il risultato, esegui il ping dell'altra casella ed esegui la sottostrazione.


10
Ciò mostra la latenza di rete che è solo una parte della velocità. Ad esempio, la connessione 3G del mio telefono ha un'enorme latenza (100-300 ms) ma può comunque gestire un throughput di 5 Mbps.
Oli

Non è colpa mia se ha chiesto la velocità ma voleva il rendimento.
Nyamiou The Galeanthrope,

2
La latenza è tempo di reazione, non velocità.
Wullxz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.