Warum ist scp mit Komprimierung langsamer als ohne?

10

Ich musste eine 20-GB- KVM- vdisk-Datei, in der das Root-Dateisystem einer CentOS 6.5-VM gespeichert war, von einem Laborserver auf einen anderen übertragen. Die große Dateigröße und die Tatsache, dass ich eine solche vdisk-Datei einmal auf einige hundert Megabyte komprimiert hatte, ließen mich instinktiv die Komprimierung aktivieren, scpaber ich war überrascht, eine ziemlich niedrige Übertragungsgeschwindigkeit zu sehen. Dann habe ich es bzip2in Kombination mit sshund versucht catund war erschrocken. Hier ist die Zusammenfassung der Methoden und des durchschnittlichen Durchsatzes.

  • scp -C vm1-root.img [email protected]:/mnt/vdisks/11 MB / s.
  • bzip2 -c vm1-root.img | ssh -l root 192.168.161.62 "bzip2 -d -c > /mnt/vdisks/vm1-root.img"5 MB / s. Dieses noch niedrigere Ergebnis führte zur Suche im Internet.
  • scp -c arcfour -C vm1-root.img [email protected]:/mnt/vdisks/13 MB / s. Diese Verwendung von -c arcfouras wurde in einer Antwort auf Serverfehler vorgeschlagen. Es hat kaum geholfen. Schließlich habe ich die Komprimierung deaktiviert.
  • scp vm1-root.img [email protected]:/mnt/vdisks/23 MB / s.

Sollte die Komprimierung nicht schneller gewesen sein?

EDIT: Ich weiß nicht, warum die Frage abgelehnt wurde. Ich dachte, hier gibt es etwas zu lernen.

Nachdem ssh(1)ich den Manpage-Tipp von @sven erhalten hatte, versuchte ich einige alternative Methoden der Dateiübertragung ohne Komprimierung, beide mit besseren Ergebnissen.

  • cat vm1-root.img | ssh -l root 192.168.161.62 "cat > /mnt/vdisks/vm1-root.img"26 MB / s.

  • nc -l 5678 > /mnt/vdisks/vm1-root.imgam Empfänger und nc 192.168.161.62 5678 < vm1-root.imgam Sender 40 MB / s. Der Port 5678ist ein beliebiger, der verfügbar war.

Die Verwendung ncerwies sich als die schnellste Kopiermethode!

In der Vergangenheit scp -Chat es sehr gut funktioniert, wann immer ich dachte. Zum Beispiel beim Übertragen von Syslogs ( /var/log/messages*) mit wenigen GB Größe. Eine unkomprimierte Übertragungsrate von einigen hundert KB / s würde sich auf 1-2 MB / s erhöhen. Dieses Beispiel fällt bei einer langsamen Verbindung, wie in der Manpage erwähnt.

Ich habe einen Fall, in dem ein neu erstelltes vdisk-Image für eine 20-GB-Partition eine komprimierte Größe von nur 200 MB hat. Mit einer Übertragungsrate von ca. 25 MB / s können wir das Kopieren in nur 8 Sekunden statt über 13 Minuten durchführen! scpOhne Komprimierung ist dies in diesem Fall eindeutig ineffizient und scp -Csogar noch schlimmer.

Ich denke, die wichtigste Lektion, scp -Cdie wir hier gelernt haben, ist, dass dies nur als Annehmlichkeit betrachtet werden sollte. Wenn eine Datei erheblich komprimiert werden kann, ist es besser, sie zuerst auf der Quelle zu komprimieren, das komprimierte Formular zu übertragen und schließlich auf dem Ziel zu komprimieren. Tools, die die Komprimierung und Dekomprimierung schnell durchführen (z. B. pbzip2 ), sind eine größere Hilfe.

pdp
quelle

Antworten:

9

Zitat man ssh(das ist die Basis, die von verwendet wird scp):

Komprimierung ist auf Modemleitungen und anderen langsamen Verbindungen wünschenswert, verlangsamt jedoch nur die Geschwindigkeit in schnellen Netzwerken.

Das Problem ist, dass das Komprimieren der Daten länger dauert als das Senden über das Netzwerk.

Sven
quelle
Er fragte speziell, warum die Übertragungsrate niedriger war, aber ich vermute, dass ssh dies tatsächlich berechnet, indem es die Datengröße durch die Gesamtzeit dividiert, die der gesamte Vorgang benötigt, und nicht den Teil trennt, in dem Daten komprimiert werden, und den Teil, in den die Daten kopiert werden Netzwerk.
Ernie
@Ernie: Wenn Sie Daten mit einer Geschwindigkeit von 20 MB / s übertragen können und das System sie nur mit 15 MB / s liefern kann, weil die Komprimierung so langsam ist, werden sie mit nur 15 MB / s übertragen. Das ist alles dazu.
Sven
@Ernie: Die von gedruckte Übertragungsrate scpenthält die Zeit, die für das Komprimieren / Dekomprimieren aufgewendet wurde. Gemeldete Werte erscheinen überraschend, wenn dies nicht der Fall wäre.
pdp
0

Zusätzlich zur Komprimierung erhält nc die beste Rate, da es auch nicht verschlüsselt. Die verlustfreie Komprimierung hängt davon ab, dass redundante Abschnitte der Daten gefunden werden. Wenn Sie dies auf Netzwerkebene tun, können Sie maximal [Puffergröße] Bytes anzeigen, während bei der ersten Datei zuerst [Dateigröße] Bytes angezeigt werden innerhalb dessen doppelte Bytesätze zu jagen und zu knacken sind.

Auch zum Verschieben von Disk-Images sollten Sie ein Dateisystem-fähiges Tool wie ntfsclone / partclone verwenden, da selbst die Komprimierung das einfache Überspringen der nicht zugewiesenen Blöcke nicht übertreffen kann - Ihre Übertragungsrate ist unendlich, wenn Sie keine Daten übertragen müssen. Vergessen Sie auch nicht, die Auslagerungs- und Ruhezustandsdateien auf einer Windows-Partition zu zerstören, oder Sie kopieren Junk, der einfach weggeworfen und trotzdem neu erstellt wird.

Tony Butler
quelle