2016-06-24 23 views
4

Ich versuche, Dateien über eine Verbindung mit hoher Latenz und hoher Bandbreite zu übertragen. Leider, wenn ich rsync verwende, nutzt meine Übertragungsgeschwindigkeit nur einen Bruchteil meiner verfügbaren Bandbreite. Meine gesamte Übertragungszeit dauert viel länger als erwartet (d. H. Übertragungszeit = verfügbare Bandbreite in Bytes/Bytes pro Sekunde)!Was ist der schnellste Weg, um Dateien über eine Verbindung mit hoher Latenz und hoher Bandbreite zu übertragen?

Was ist der schnellste Weg [1], um Dateien über eine Verbindung mit hoher Latenz und hoher Bandbreite zu übertragen?

So zum Beispiel:

  • Latenz größer als 900 ms Latenz (Umlaufzeit)
  • Bandbreite 512 kbit/s

[1] dh die meisten der zur Verfügung stehenden nutzen Bandbreite

Antwort

2

Wenn Sie rsync in einer Situation mit hoher Latenz und hoher Bandbreite verwenden, ist die Übertragungsrate pro Verbindung langsamer [1] als y unsere verfügbare Bandbreite. Für das angegebene Beispiel beträgt Ihre erwartete Übertragungsgeschwindigkeit 56,25 KiB oder weniger als 10% der verfügbaren Bandbreite.

Eine Lösung ist N rsync Prozesse parallel auszuführen:

#!/bin/bash 

# tar up the files 
tar -cvzf x.tar ${list_of_files} 

# [optional] 
# compute the md5sum 
md5sum x.tar > x.tar.md5sum 

# break the large tar file into N files (i.e. x.tar would become x.tar.1 ... x.tar.N) 
# TODO 

# start N `rsync` processes in parallel 
for ((i=1;i<=N;i++)); do rsync -avzh x.tar.${i} ${destination} & done 

# wait for the transfers to finish 
wait && echo "success" || echo "fail" && exit 1 

# stitch the N files back together into x.tar 
TODO 

# [optional... but gives everyone a nice warm and fuzzy] 
# copy the md5sum and verify your files (even though `rsync` already did so) 
scp x.tar.md5sum ${destination} 
ssh ${destination_machine} "cd ${path} && md5sum -c x.tar.md5sum && echo 'PASS (files verified with md5sum)' || echo 'FAIL (file verification failed md5sum)' && exit 1" 
# done! 

[1] Warum ist Ihre Übertragungsgeschwindigkeit zu niedrig in diesem Beispiel?

Mit einem Wort: bandwidth-delay product (drei Worte tatsächlich)

Dies ist ein Beispiel für eine hohe Latenz und hoher Bandbreite Link. Einige könnten ein Tool wie rsync verwenden, um ihre Daten zu übertragen. Wenn Sie eine Instanz von rsync (oder etwas Ähnliches, das auch TCP oder TCP-ähnliches Protokoll verwendet) ausführen, werden Sie die verfügbare Bandbreite nicht verwenden.

Der Grund für die Verlangsamung hat mit der Umlaufart von TCP (oder TCP-ähnlichen Protokollen) zu tun, die ACKs erfordert, bevor mehr Daten gesendet werden. Das Problem wird formal als bandwidth-delay product bezeichnet. Jede Verbindungsgeschwindigkeit wird durch die Latenzzeit mehr als die Bandbreite begrenzt.

Speziell für das angegebene Beispiel beträgt die theoretische Geschwindigkeit 56,25 KiB oder weniger als 10% Ihrer verfügbaren Bandbreite. Die Begrenzung ist pro Verbindung. Mit nur einersync für Ihre Dateiübertragung wird nicht vollständig Ihre Bandbreite nutzen.

Lösung 1:

Verwenden Sie ein anderes Programm, das nicht ein TCP-Protokoll wie nicht verwendet, aber immer noch garantiert, dass Ihre Daten durch andere Mittel (eine schnelle Google-Suche ist so etwas wie uftp, die die Daten über die UDP-Protokoll übertragen stattdessen von TCP). Leider ist uftp immer noch nicht in vielen Distributionen, wie dies geschrieben wurde.

Lösung 2:

weiter ein rsync und ändern auf beiden Seiten der TCP-Netzwerkparameter verwenden, aber dies erfordert Expertenwissen, das ich im Moment nicht ohne weiteres verfügbar sind.

Lösung 3:

Run mehr rsync Prozesse parallel wie am Anfang dieser Frage beschrieben.

+0

* Ändern Sie Ihre TCP-Netzwerkparameter * [TCP-Skalierung] (https://en.wikipedia.org/wiki/TCP_window_scale_option) sollte theoretisch funktionieren, und es sollte im Betriebssystem des OPs aktiviert werden. Natürlich ist die Theorie keine Realität. –

+0

Autor von [UFTP] (http://uftp-multicast.sourceforge.net) hier. Auch wenn es nicht in Ihrer Distribution ist, sollte das Bauen aus der Quelle ziemlich einfach sein. Binärdateien für Windows sind ebenfalls verfügbar. – dbush