So finden Sie den Engpass beim Übertragen großer Dateien zwischen zwei Hosts


8

Wir müssen häufig große Dateien (über 50 GB) zwischen zwei Hosts übertragen, und die Übertragungsrate scheint nie den erwarteten Durchsatz für das Netzwerk zu erreichen. Es gibt mehrere Punkte, die den Engpass darstellen könnten, aber jede ihrer theoretischen Obergrenzen liegt weit über der tatsächlichen Übertragungsrate. Hier ist ein typisches Setup:

Laptop -> 802.11n -> AP -> CAT 6-Kabel -> 10/100 Mbit-Router -> Desktop

In diesem Zusammenhang ist der Engpass eindeutig der Router, der die Übertragungsrate auf 100 Mbit / s begrenzen würde. Selbst dann sehe ich selten eine Übertragungsrate (mit scp) von mehr als 9,5 MB / s, was 76 Mbit / s oder nur 76% der theoretischen Höchstgrenze entspricht.

Kann es am Access Point wirklich einen Overhead von 24% geben, oder gibt es noch etwas, das die Geschwindigkeit begrenzt? Es kann sich um Festplatten-E / A handeln (obwohl SATA mit 1,5 Gbit / s bewertet ist) oder um irgendetwas auf dem Motherboard zwischen Festplatte und Netzwerkkarte (wie kann ich das messen?).

Gibt es eine Möglichkeit, sicher zu wissen (*), wo der Engpass liegt? Wenn ich von einem 100-Mbit / s-Router nicht mehr als 76 Mbit / s erhalten kann, erhöht ein Upgrade des Netzwerks auf Gigabit den Durchsatz oder erhalte ich trotzdem 76 Mbit / s, weil der Engpass anderswo liegt?

(*) oder zumindest in einer Weise, die überzeugend genug ist, dass ein Chef bereit wäre, in die Aufrüstung dieses einen Teils des Netzwerks zu investieren


1
SSH (/ sftp) kann einen verrückten Overhead verursachen (ich glaube, das liegt an der Verschlüsselung). Ich kann konstante 900 kb / s über http sehen, aber das sinkt auf 250 kb / s, wenn ssh verwendet wird.
BuildTheRobots

3
Die schlechte Übertragungsleistung von sftp ist auf eine absurd kleine Standardfenstergröße zurückzuführen.
womble

Dies hilft Ihnen nicht dabei, den Engpass zu finden, aber für andere, die auf dieses Problem stoßen - es gibt ein 'HPN-SSH' (Hochleistungsnetzwerk), das die Puffergröße anpassen soll ... aber es aktiviert auch die 'keine'-Verschlüsselung (dh verschlüsselt die Daten nicht). Wenn das kein Problem für das ist, was Sie übertragen: psc.edu/index.php/hpn-ssh
Joe H.

Antworten:


12

Ihr Problem ist, dass Sie zu viele Dinge gleichzeitig testen:

  • Lesegeschwindigkeit der Festplatte
  • SSH-Verschlüsselung
  • kabellos
  • SSH-Entschlüsselung
  • Schreibgeschwindigkeit der Festplatte

Da Sie SSH erwähnt haben, gehe ich davon aus, dass dies ein Unix-System ist ...

Sie können Probleme mit der Lesegeschwindigkeit der Festplatte mit einem einfachen ausschließen

dd if=yourfile of=/dev/null #or
pv yourfile > /dev/null

Auf der Empfangsseite können Sie einen einfachen Disk-Write-Test durchführen

dd if=/dev/zero of=testfile bs=1M count=2000 # or
dd if=/dev/zero bs=1M count=2000 | pv > testfile

dd ist nicht wirklich ein "Benchmark", aber da scp sequentielle E / A verwendet, ist es nah genug

Sie können SSH auch testen, indem Sie so etwas tun

dd if=/dev/zero bs=1M count=100 | ssh server dd of=/dev/null # or
dd if=/dev/zero bs=1M count=100 | pv | ssh server dd of=/dev/null

Um auszuschließen, dass SSH der Engpass ist, können Sie nc verwenden, um die Netzwerkleistung zu testen

server$ nc -l 1234 > /dev/null
client$ dd if=/dev/zero bs=1M count=100 | pv | nc server 1234 # or
client$ dd if=/dev/zero bs=1M count=100 | nc server 1234

Wenn Sie das Netzwerk wirklich richtig testen möchten, installieren und verwenden Sie etwas wie iperf, aber nc ist ein guter Anfang.

Ich würde mit dem NC-Test beginnen, da dies die meisten Dinge ausschließt. Sie sollten die Tests auch unbedingt ausführen, wenn Sie kein WLAN verwenden. 802.11n kann einen 100-MBit-Port problemlos ausschöpfen, jedoch nur, wenn Sie ihn ordnungsgemäß eingerichtet haben.

(Ubuntu> = 12.04 ist standardmäßig netcat-openbsd. Dies ist nc -l -p 1234 > /dev/nullmöglicherweise das, was Sie möchten, wenn Sie netcat-traditional verwenden.)


OP: Sehen Sie nach, ob Sie einen 1000BT-Router erhalten. Ich habe gerade einen Test zwischen zwei Servern durchgeführt, beide mit Atom 330-CPUs (3k-Bogomips gemäß / proc / cpuinfo), die über Powerline AV und einen 1000BT-Router verbunden sind. dd | sshlief mit 6,5 MB / s bei 45% CPU-Auslastung über Powerline AV und 10,4 MB / s bei 75% CPU, als ich es auf den 1000BT-Switch umstellte. dd | nclief mit 10-15% CPU-Auslastung für beide Netzwerke, aber 6 MB / s (Powerline AV) und 40 MB / s auf dem 1000BT-Router (!).
Herr

2

Denk darüber so;

Sie haben eine langsame (Laptop-Festplatten sind langsam) SATA-Festplatte, auf der das eine oder andere Dateisystem ausgeführt wird, die sich dann in ein IP-basiertes Dateifreigabeprotokoll wie SMB verwandelt. Dies wird dann in ein WLAN-Format umgewandelt, das dann auf einen AP trifft, der dann über kabelgebundenes Ethernet (für das eine Neuformulierung erforderlich ist) zu einem ziemlich langsamen Switch übergeht. Wenn der Router dann auf einen wahrscheinlich recht langsamen Desktop wechselt, wird Ihre Datei wieder aufgebrochen Systemformat der Wahl und schließlich auf die Festplatte. All dies geschieht für jedes Paket, wobei die meisten, wenn nicht alle, ein Bestätigungspaket erfordern, das zurückgesendet wird, bevor es das nächste Paket sendet.

Ich bin überrascht, dass Sie so viel Geschwindigkeit sehen wie Sie!

Hier ist ein Hinweis: Verbinden Sie den Laptop mit dem 100-Mbit / s-Switch / Router, wenn Sie die Dateien übertragen müssen - im Ernst, es wird viel, viel schneller gehen. Berücksichtigen Sie auch schnellere Festplatten an jedem Ende und stellen Sie sicher, dass Sie auch einen effizienten Dateiübertragungsmechanismus verwenden.

Hoffe das hilft.


1

Versuchen Sie, wie Chopper3 anspielt, auch rsync-over-ssh für Dateien dieser Größe zu verwenden, da die Wahrscheinlichkeit groß ist, dass etwas schief geht. Nichts ist mehr als 45 GB durch eine 50 GB-Übertragung zu bekommen und sie fehlschlagen zu lassen. Es ist möglich, dass es auch Ihren Overhead verringert, aber ich habe es nicht persönlich mit so großen Dateigrößen getestet.

Beim Übertragen von Tausenden kleiner Dateien kann rsync auch den Overhead erheblich verringern - ein Test mit 75 KB Datei / 1500 Verzeichnis / 5,6 KB durchschnittlicher Dateigröße, den ich einmal ausgeführt habe, dauerte 12 Minuten mit FTP und SFTP, 10 Minuten mit SCP, aber nur 1 Minute 50 Sekunden mit rsync-over-ssh aufgrund des verringerten Auf- / Abbauaufwands. Rsync ohne SSH war bei 1 Minute und 33 Sekunden nur 20 Sekunden schneller.


1
Für viele kleine Dateien ist das 'tar cv dir / | schwer zu übertreffen ssh box tar x 'idiom. Multi-Core-freundlich und kein sftp / rsync-Protokoll-Overhead.
Justin

1

Mit diesem Befehl können Sie die Lesegeschwindigkeit Ihrer Festplatten messen:

hdparm -tT /dev/sdX

(Ersetzen Sie X durch Laufwerksbuchstaben)

1,5 / 3 / 6gbps ist technisch gesehen die Sata-Übertragungsgeschwindigkeit, aber die meisten Festplatten können nur kontinuierlich mit 50-60 MBit / s lesen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.