Wie testest du die Netzwerkgeschwindigkeit zwischen zwei Boxen?

168

Ich habe ein Gigabit-Netzwerk in meinem Haus eingerichtet und ein paar Ubuntu-basierte Boxen. Aus reiner Neugier möchte ich die Geschwindigkeit zwischen den beiden Boxen überprüfen. Ich habe keine Probleme mit der Geschwindigkeit oder so, es ist wirklich nur der Geek in mir, der neugierig ist. Außerdem werden mir die Ergebnisse möglicherweise mitteilen, ob Verbesserungspotenzial besteht oder ob ich etwas falsch konfiguriert habe.

Wie kann man die Netzwerkgeschwindigkeit zwischen Ubuntu-Boxen richtig testen?

Jacob Schoen
quelle

Antworten:

272

Ich benutze iperf. Eine Client-Server-Anordnung besteht darin, dass Sie sie an einem Ende im Servermodus ausführen und von einem anderen Computer auf der anderen Seite des Netzwerks aus eine Verbindung zu ihr herstellen.

Eine der beiden Maschinen läuft:

sudo apt-get install iperf

Wir werden einen iperfServer auf einem der Rechner starten :

iperf -s

Und dann sagen Sie auf dem anderen Computer, dass Sie iperfsich als Client verbinden sollen:

iperf -c <address of other computer>

Auf dem Clientcomputer sehen Sie ungefähr Folgendes:

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

Wenn Sie auf dem Server eine Firewall ausführen, müssen Sie natürlich Verbindungen auf Port 5001 zulassen oder den Port mit dem -pFlag ändern .


Sie können so ziemlich dasselbe mit Plain Old nc(Netcat) machen, wenn Sie dazu neigen. Auf dem Server:

nc -vvlnp 12345 >/dev/null

Und der Client kann ein Gigabyte Nullen durch ddden ncTunnel leiten.

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

Als 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

Das Timing dort wird von vorgegeben dd, es sollte jedoch genau genug sein, da es nur so schnell ausgegeben werden kann, wie die Pipe es benötigt. Wenn Sie damit nicht zufrieden sind, können Sie das Ganze in einen timeAnruf einwickeln .

Denken Sie daran , dass das Ergebnis in mega Bytes es so multiplizieren um 8 eine mega zu bekommen Bits -pro-Sekunden - Geschwindigkeit. Die obige Demo läuft mit 944 MBit / s.

Oli
quelle
Mann du hast alle Antworten auf meine Fragen! Mein Netzwerk ist anscheinend nicht so gut eingerichtet wie Ihr, überträgt nur mit 714 MByte und einer Bandbreite von 598 MBit / s. Ich weiß nicht, ob ich das in Zukunft untersuchen werde. Vielen Dank.
Jacob Schoen
Fairerweise ist die andere Box nur einen Schalter (und 20 Meter von Cat5e) entfernt und es gibt keine Überlastung. 600mbps ist immer noch ziemlich schnell.
Oli
Das ist großartig, aber ich habe keinen Root-Zugriff auf den Server.
Geoff
Versuchen Sie -P 10. Mein Ergebnis mit Einzelverbindung ist ähnlich wie jschoens, aber mit mehr als 3 parallelen Verbindungen werden konstant 920 Mbit / s übertragen.
wujj123456
1
@CMCDragonkai Sie sollten wahrscheinlich keine Ressourcen testen, die nicht Ihre sind. Bandbreitenlastige Tests können sich auf die Kurzzeitstabilität auswirken.
Oli
22

Entspricht Olis Empfehlung für iperf. Ich möchte nur einige Punkte hinzufügen:

  1. Es gibt auch Windows-Clients, mit denen plattformübergreifende Tests durchgeführt werden können.
  2. -t <seconds>ändert die Testlänge. ändert die Anzahl der gleichzeitigen Verbindungen. Zum Beispiel werden 10 Verbindungen 30 Sekunden lang zusammen getestet und es werden aggregierte Ergebnisse zusammen mit 10 separaten Verbindungsgeschwindigkeiten ausgegeben.-P <n>iperf -c [target IP] -P 10 -t 30
  3. Du brauchst kein Sudo. Sie können die Binärdatei einfach unter http://iperf.fr/ herunterladen . Es sollte funktionieren. Laden Sie es mit herunter wget, machen Sie es ausführbar mit chmod, und Sie können die Binärdatei direkt ausführen. Es funktioniert perfekt

Ich habe festgestellt, dass die Geschwindigkeit einer einzelnen Verbindung mit den Standardeinstellungen ziemlich stark schwankt. Bei mehr als 3 parallelen Verbindungen sind die Ergebnisse auf meinem Gigabyte-Switch jedoch konsistenter. (konsistent bei 910-920 Mbit / s)

wujj123456
quelle
8

Mit diesem Skript können Sie auf einfache Weise die Verbindungsgeschwindigkeit zwischen Ihrem Computer und einem Remote-Host testen. Beispiel für die Verwendung von:

$ scp-speed-test.sh user@remote_host 80000
  • user@remote_host ist Ihr Zielhost (Sie müssen über SSH-Zugriff auf diesen Host verfügen)
  • 80000ist die ungefähre Größe der Testdatei (in KB), die an den Remote-Host gesendet wird. Es ist kein zwingendes Argument.
VeLKerr
quelle
4
Dies scheint die Geschwindigkeit der SCP-Anwendung zu testen, die niedriger ist als ein Test auf einer niedrigeren Ebene. Zum Beispiel verwendet nc L4. Das ist natürlich großartig, wenn Sie mehr Wert auf die Geschwindigkeit von SCP legen.
Sudo
1
Hat Probleme: Dieses Skript schreibt und liest eine Datei auf die Festplatte - das ist langsamer als RAM, kann also eine künstliche Verlangsamung sein. Sendet auch nur Nullen, falls sie komprimiert sind, ist dies eine große künstliche Beschleunigung. Wenn Sie pseudozufällige Daten möchten, verwenden Sie diese nicht /dev/random(sie können blockieren) oderurandom (Linkkommentare werden empfohlen), sondern verwenden Sie stattdessen eine dm-crypt (siehe FAQ von cryptsetup 2.19 Wie kann ich ein Gerät mit crypto- bereinigen?). grade zufälligkeit? ) vielleicht mit einer datei im ram.
Xen2050
4

Wenn Sie Ihr Ethernet-LAN ​​auf einer niedrigeren Ebene testen möchten, können Sie Etherate verwenden, ein kostenloses Linux CLI-Ethernet-Testtool:

https://github.com/jwbensley/Etherate

Werfen Sie es in den Mix, da Tools wie iPerf (die sehr gut sind!) Über IP und TCP oder UDP funktionieren. Etherate-Tests direkt über Ethernet / OSI Layer 2.

jwbensley
quelle
2

Der folgende Befehl erfordert keine zusätzlichen Pakete, aber SSH-Zugriff:

ssh [email protected] 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress

Beispielausgabe:

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

Der Befehl druckt eine 3 GB (1000 ^ 3 Byte) -Dummy-Datei mit Nullen an stdout auf dem Remote-Server, die über SSH an stdout des lokalen Servers gedruckt (übertragen) und dann lokal weitergeleitet /dev/null(dh ignoriert) wird. Sie können sogar den Fortschritt des Tests sehen, während Sie ihn ausführen.

Sicherlich nicht so genau wie andere Tools, aber mein Anwendungsfall war das Debuggen eines Sicherungsprozesses, bei dem ich testen wollte, ob die Netzwerkgeschwindigkeit das Problem ist, ohne zusätzliche Pakete zu installieren.

BM-Bergmotte
quelle
1

Es gibt auch einige andere nützliche Befehlszeilentools für das Bandbreiten-Benchmarking zwischen zwei Hosts:

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
Everton
quelle
2
Wie unterscheiden sich diese voneinander und von iperf? Arbeiten sie gleich, was machen sie? nuttcp ist in Debian & anscheinend "nuttcp basiert auf nttcp, was wiederum eine Verbesserung von jemandem bei Silicon Graphics (SGI) gegenüber dem ursprünglichen ttcp war, das kurz vor Dezember 1984 von Mike Muuss bei BRL geschrieben wurde, um die Leistung von zu vergleichen TCP-Stacks von UC Berkeley und BBN helfen DARPA bei der Entscheidung, welche Version in der ersten BSD-Unix-Version enthalten sein soll. "
Xen2050
0

wie ich beste Antwort in meinem Kommentar darauf hingewiesen, dass Lösung nicht gut genug sein Ursache Client / Server nicht optimiert zu ... quetschen jedes Bit der Geschwindigkeit

meine Lösung:

Erstellen Sie auf beiden Seiten eine Ramdisk (daher sind Sie nicht an die Speichergeschwindigkeit gebunden und ich schlage vor, Sie haben sie mit Ramfs und nicht mit tmpfs erstellt, damit sie nicht vertauscht werden ... Achten Sie nur darauf, nicht mindestens 512 MB freien Speicherplatz zu lassen Für das System ist dies ERFORDERLICH, wenn Sie mit Giga-Ethernet arbeiten. Bei dieser Geschwindigkeit können sogar SSDs die Installation von Apache auf dem Server verlangsamen. Erstellen Sie dann einen Link zur Ramdisk. Erstellen Sie einige große Dateien auf der Ramdisk dd aus / dev / random oder kopieren, wenn Sie welche zur Hand haben), dann gehen Sie auf die Client-Seite und laden Sie diese (auch auf der Ramdisk dieser Seite) mit einem erweiterten Download-Programm herunter, das ich verwendet habe lftp

Na ja, der Unterschied war groß, von 75 MBit / s, die von Iperf und 9,5 M / s Netcat gemeldet wurden

bis 11.18M / s mit meiner Lösung:

1591129421 bytes transferred in 136 seconds (11.18M/s)
Der Zauberer
quelle
9,5 M · 8 = 76 Mbit / s; es ist ganz in der Nähe von 75 Mbit
Fusca Software
-4

Es ist ganz einfach, den Computer an die erste Box anzuschließen und die andere an die erste Box anzuschließen. Pingen Sie dann von Ihrem Computer aus das erste Kästchen an, speichern Sie das Ergebnis, pingen Sie das andere Kästchen an und führen Sie die Subtraktion durch.

Nyamiou der Galeanthrope
quelle
10
Das zeigt die Netzwerklatenz, die nur ein Teil der Geschwindigkeit ist. Zum Beispiel hat die 3G-Verbindung meines Telefons eine enorme Latenz (100-300 ms), kann aber immer noch einen Durchsatz von 5 MBit / s bewältigen.
Oli
Nicht meine Schuld, wenn er nach der Geschwindigkeit fragte, aber den Durchsatz wollte.
Nyamiou The Galeanthrope
1
Die Latenz ist die Reaktionszeit, nicht die Geschwindigkeit.
Wullxz