Frage SFTP-Uploads in Netzwerken mit hoher Latenz beschleunigen?


Ich versuche, eine Reihe von großen Dateien international mit SFTP zu übertragen, aber ich finde, dass mein internationaler Partner keine Upload-Geschwindigkeiten über ~ 50k bekommen kann, trotz sehr guter Verbindungen auf beiden Seiten. Wir können mehrere Verbindungen mit dieser Geschwindigkeit hochladen (also keine Bandbreite?), Aber kein einzelner Upload verbessert seine Geschwindigkeit, was ein Problem ist, da viele Dateien mehrere GB groß sind.

Das SFTP wird mit dem Standard-SFTP-System "Remote Login" von Apple OSX gehostet.

Gibt es eine Möglichkeit, die Upload-Geschwindigkeit zu verbessern, oder gibt es einen anderen SFTP-Host, der helfen würde? Es ist mir nicht klar, ob dies ein Konfigurationsproblem oder eine inhärente Begrenzung des Protokolls ist.

(Aus Sicherheitsgründen muss ich eine Ende-zu-Ende-verschlüsselte Peer-to-Peer-Verbindung verwenden - keine Cloud-Dienste).


23
2018-04-10 15:28


Ursprung


Wenn Sie das Budget haben, gibt es kommerziell  Lösungen die viel besser funktionieren als TCP-basierte Dateiübertragungssysteme wie SFTP. - Kenster
Wenn es eine Zeit-Multi-GB-Übertragung ist, warum nicht versuchen, ein Alternative zum Internet. - vasin1987
Ein einfaches Shell-Skript, um N zu starten rsync Übertragungen werden leicht Ihre Anforderungen von 1 erreichen. Sichere Übertragung und 2. Maximieren Sie Ihre Bandbreite. Sehen Sie hier für ein Beispiel, wie man N startet rsync Übertragungen stackoverflow.com/a/38014502/52074 - Trevor Boyd Smith
Oder benutze es einfach uftp-multicast.sourceforge.net Wish wird Ihre Bandbreite verschlüsseln und ausmisten. - Trevor Boyd Smith
Im Gegensatz zu Ihrem letzten Satz sollte der Cloud-Dienst in Ordnung sein, wenn Sie die Datei lokal verschlüsseln, sie über die Cloud übertragen und dann am anderen Ende lokal entschlüsseln 8), was immer noch eine Ende-zu-Ende-Verschlüsselung bedeutet. (Vielleicht möchten Sie ein kurzes Feedback zum erfolgreichen Empfang hinzufügen). Sie verwenden SFTP-Verschlüsselung, um Angriffe von jemandem zu verhindern, der in der Lage ist, Ihren gesamten Datenverkehr zu erfassen. Daher ist es nicht schlimmer, ihnen die verschlüsselten Daten zu geben, als wenn sie annehmen, dass sie es trotzdem bekommen. - Hagen von Eitzen


Antworten:


Mit OpenSSH sftp Klient (die Sie zu verwenden scheinen), können Sie verwenden:

  • -R Schalter Erhöhen der Länge der Anforderungswarteschlange (Standardwert ist 64)
  • -B Schalter Erhöhen der Lese- / Schreibanforderungsgröße (der Standardwert ist 32 KB)

Versuchen Sie zunächst, beides zu verdoppeln:

sftp -R 128 -B 65536 user@host

Es spielt wahrscheinlich keine Rolle, welche von ihnen du erhöhst.

Wenn Sie beides erhöhen, sollten Sie Ihre Verbindung mit hoher Latenzzeit sättigen. Mit den obigen Einstellungen werden Daten im Wert von 8 MB jederzeit in der Pipe gespeichert (128 * 64K = 8M).

Beachten Sie, dass dies nur bei großen Dateiübertragungen hilft. Es hat keine Auswirkungen, wenn viele kleine Dateien übertragen werden.


Ein paar Hintergrundinformationen und eine Diskussion über andere (GUI) SFTP-Clients finden Sie im Abschnitt "Netzwerkverzögerung / Latenz" in meiner Antwort auf Warum ist FileZilla SFTP File Transfer maximal auf 1,3MiB / sec beschränkt, anstatt die verfügbare Bandbreite zu sättigen? rsync und WinSCP sind noch langsamer.


28
2018-04-10 18:10





Sie könnten versuchen, die Komprimierung zu aktivieren und sehen, ob das hilft.

Von man sftp:

-C      Aktiviert die Komprimierung (über das ssh-C-Flag).

Und von man ssh:

-C      Fordert die Komprimierung aller Daten (einschließlich stdin, stdout, stderr und Daten für weitergeleitete X11-, TCP- und UNIX-Domänenverbindungen) an. Der Komprimierungsalgorithmus wird von gzip (1) verwendet, und der "Level" kann durch die Option CompressionLevel für Protokollversion 1 gesteuert werden. Die Komprimierung ist auf Modemleitungen und anderen langsamen Verbindungen wünschenswert, verlangsamt jedoch nur die Geschwindigkeit in schnellen Netzwerken . Der Standardwert kann in den Konfigurationsdateien auf Host-für-Host-Basis festgelegt werden. Siehe die Option Komprimierung.

Es hört sich eher so an, als ob die Verbindung an irgendeinem Punkt entlang ihres Pfades rate limitiert wäre (oder eher, das scheint mir die einfachste Erklärung für Ihre 50kB / s pro Verbindung zu sein, aber mehrere solche Verbindungen sind möglich), obwohl es möglicherweise kein schlechte Idee, um sicherzustellen, dass die Festplatten auf beiden Seiten kein Faktor sind.

Sie könnten auch eine schnelle pcap ausführen, um zu sehen, ob es "offensichtliche" Probleme (wie eine große Anzahl von Übertragungen) gibt - aber wenn Sie nicht ein gewisses Vertrauen hatten, könnten Sie dies ansprechen, würde ich wahrscheinlich nur sehen, wenn Komprimierung aktivieren würde Hilfe.


3
2018-04-10 16:14



Vielen Dank! Leider sind die Dateien vorkomprimiert, also bezweifle ich, dass das irgendwas tun wird ...: / - nick_eu
Die Komprimierung beschleunigt hier die Dinge nicht, selbst wenn die Daten nicht komprimiert würden. Es ist zu viel Aufwand für CPU-Zeit (und Verzögerung), so dass es heutzutage keinen Sinn macht. - Jakuje
Wenn der Flaschenhals das Netzwerk ist, sollte etwas mehr CPU auf beiden Seiten @Jakuje nicht verlangsamen, außer die Box kann nicht mit 50kB / s komprimieren, was kein Problem sein sollte. - Ben
@Ben Die Frage besagt eindeutig, dass das Netzwerk kein Flaschenhals ist. - Jakuje


Beschleunigen Sie sftp-Übertragungen

Angenommen, Ihre Probleme sind Netzwerk-Tuning und / oder Drosselung pro TCP-Verbindung, werfen Sie einen Blick auf sftp mit dem Lftp-Spiegel-Subsystem

Das Netzwerk-Tuning an jedem Ende ist ein viel größeres Thema und erfordert viel Hin und Her, was das Thema außerhalb des Bereichs von ServerFault verschiebt. Für einzelne Verbindungen gilt die angegebene Komprimierung iwaseatenbyagrue kann in beiden Fällen helfen. Dies setzt voraus, dass das entfernte Ende eine Komprimierung erlaubt.


3
2018-04-10 17:48





(Sie erwähnen "hohe Latenz" im Fragetitel, aber nicht im Textkörper. Haben Sie die tatsächliche Latenz gemessen, und was sind die Ergebnisse?)

Es gibt einen Patch für OpenSSH, der den Durchsatz bei einer Netzwerkverbindung mit hoher Latenz explizit verbessert: HPN-SSH: (Betonung meiner)

SCP und die zugrundeliegende SSH2-Protokollimplementierung in OpenSSH ist die Netzwerkleistung, die durch statisch definierte interne Flusskontrollpuffer begrenzt ist. Diese Puffer wirken oft als Engpass für den Netzwerkdurchsatz von SCP, insbesondere bei langen und hohen Bandbreiten von Netzwerkverbindungen. Durch Ändern des ssh-Codes, damit die Puffer zur Laufzeit definiert werden können, wird dieser Engpass beseitigt. Wir haben einen Patch erstellt, der Engpässe in OpenSSH beseitigt und vollständig mit anderen Servern und Clients interoperabel ist. Darüber hinaus können HPN-Clients schneller von HPN-Servern heruntergeladen werden, und HPN-Server können schneller Uploads von HPN-Clients erhalten.

Versuchen Sie daher, HPN-SSH auf der Empfängerseite zu kompilieren und zu verwenden, und prüfen Sie, ob es Ihre Übertragungsgeschwindigkeit verbessert.


3
2018-04-11 06:45



Vielen Dank! Ich habe nicht wirklich gemessen, es ist mir jetzt peinlich zuzugeben, aber ich gehe um die halbe Welt in ein Land mit so einem Internet, also denke ich, dass ich recht habe. :) Patch klingt sehr nützlich! - nick_eu
@nick_eu Ich habe Anekdoten gesehen, dass Wissenschaftler HPN-SSH verwenden würden, um große Mengen wissenschaftlicher Daten über den Atlantik zu übertragen. Klingt wie es sollte perfekt für Ihren Anwendungsfall sein. - twisteroid ambassador


Ich versuche, eine Reihe von großen Dateien international mit SFTP zu übertragen

Es wurde noch nicht als Antwort erwähnt, aber wenn mehrere Dateien über einen Link mit hoher Latenz übertragen werden, gibt es eine wirklich einfache Lösung, um eine bessere Leistung zu erzielen:

Übertragen Sie mehrere Dateien parallel.

Und es ist eine Lösung, die Sie sogar in Ihrer Frage erwähnt haben. Benutze es.

Grundsätzlich verarbeitet das TCP-Protokoll Verbindungen mit einem Produkt mit großer Bandbreite nicht sehr gut - eine einzelne Verbindung kann nicht genügend Daten gleichzeitig übertragen. Sehen https://en.wikipedia.org/wiki/TCP_tuning

Schon seit jede Verbindung ist durch das TCP-Protokoll begrenzt, verwenden Sie einfach mehr Verbindungen.


3
2018-04-11 10:54



So können Sie SFTP-Übertragungen parallelisieren: serverfault.com/questions/248105/ ... - niutech


Nicht sicher, ob dies eine Option für Sie ist, aber haben Sie versucht, gegen die Daten auf die internationale Website zu ziehen? Sowie zu verschiedenen Zeiten, um zu sehen, ob es ein Problem mit Konkurrenz für Netzwerkressourcen ist?


0
2018-04-10 19:39



gute Idee, werde es versuchen. - nick_eu


Wir können mehrere Verbindungen mit dieser Geschwindigkeit hochladen (also keine Bandbreite?)

Es klingt wie ein Konfigurationsproblem - entweder absichtlich (als eine Art Upselling von Diensten ohne zusätzliche Bereitstellung) oder durch Zufall (z. B. kaputt Fensterskalierung oder übereifrige Verkehrskontrolle). Während Sie die Übertragungen parallelisieren konnten, haben Sie uns nichts darüber gesagt, was am anderen Ende der Verbindung ist, oder ob es sich lohnt, einige einfache Skripte zu entwickeln, die das Sharding / Rekonstituieren von Dateien ermöglichen.

Es ist unwahrscheinlich, dass die Optimierung der Größe und Komprimierung der Warteschlange signifikante Auswirkungen hat, es sei denn, der Grund dafür ist sehr schlecht geschriebene Software (und openSSH gehört dieser Kategorie nicht an - es macht wenig Sinn, openssh mit einer längeren Anforderungswarteschlange / größeren Blockgröße zu verwenden, es sei denn, die Latenz beträgt mehr als 250 ms. Sie könnten versuchen, mit anderen Clients von verschiedenen Standorten aus ein Problem auszuschließen der Server.

Mein erster Anruf würde sein, zu identifizieren, welcher Anbieter für das Problem verantwortlich ist, sie bitten, das Problem zu beheben oder zu einem anderen Anbieter zu wechseln.


0
2018-04-10 20:17



Entschuldigung, hätte klarer sein müssen. Es gibt keinen "Provider" - ich hosste auf meinem eigenen Desktop, und ein Kollege versucht, sich von seinem Computer aus zu verbinden. Der Kollege öffnet gerade eine SSH-Sitzung (nicht sicher über das Protokoll, kann es aber überprüfen) und verwendet put - nick_eu
@nick_eu er spricht über die Internetanbieter. - Džuris
Es klingt wie ein Konfigurationsproblem  Nein. Es ist kein Konfigurationsproblem. Das TCP-Protokoll selbst funktioniert nicht gut bei Verbindungen mit einem Produkt mit großer Bandbreitenverzögerung. Grundsätzlich, wenn die Verbindung so ist, dass a Menge von Dateien können zu einer Zeit im Flug sein, kann das TCP-Protokoll selbst nicht so viele Daten zu irgendeinem Zeitpunkt in Bewegung halten. Aus diesem Grund arbeiten parallele TCP-Verbindungen zur Verbesserung der Datenübertragungsraten. - Andrew Henle
"funktioniert nicht gut bei Verbindungen mit einem Produkt mit großer Bandbreitenverzögerung" - lesen Sie RFC 1323 (von 1992) und 7323 (ersetzt 1323 im Jahr 2014) - symcbean
@symbean Dann erklären Sie die OP's Wir können mehrere Verbindungen mit dieser Geschwindigkeit hochladen (also keine Bandbreite?), Aber kein einzelner Upload verbessert seine Geschwindigkeit Das ist ein klassisches Symptom von TCP über eine Verbindung mit extremer Latenz - alle TCP-Erweiterungen können das Problem mindern etwas weil sie die grundlegenden Probleme mit dem Protokoll selbst nicht lösen können. Und viel Glück mit identifizieren Sie, welcher Anbieter für das Problem verantwortlich ist, bitten Sie sie, das Problem zu beheben beim Versuch, "eine Reihe von großen Dateien international zu übertragen". - Andrew Henle