Beschleunigen Sie SFTP-Uploads im Netzwerk mit hoher Latenz?

27

Ich versuche, eine Reihe großer Dateien mit SFTP international zu übertragen, aber ich stelle fest, dass mein internationaler Partner trotz sehr guter Verbindungen auf beiden Seiten keine Upload-Geschwindigkeiten über ~ 50k erreichen kann. Es können mehrere Verbindungen mit dieser Geschwindigkeit hochgeladen werden (also keine Bandbreite?), Aber kein einzelner Upload verbessert die Geschwindigkeit. Dies ist ein Problem, 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 Abhilfe schafft? Mir ist nicht klar, ob dies ein Konfigurationsproblem oder eine inhärente Einschränkung des Protokolls ist.

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

nick_eu
quelle
Wenn Sie das Budget haben, gibt es kommerzielle Lösungen, die eine viel bessere Leistung erbringen als TCP-basierte Dateiübertragungssysteme wie SFTP.
Kenster
4
Wenn es eine Zeit-Multi-gb Transfer Deshalb keine versuchen Alternative zum Internet .
Vasin1987
1
Ein einfaches Shell-Skript zum Starten von N- rsyncÜbertragungen erfüllt problemlos die Anforderungen von 1. Sichere Übertragung und 2. Maximierung der Bandbreite. Ein Beispiel zum Starten von N- rsyncÜbertragungen finden Sie hier: stackoverflow.com/a/38014502/52074
Trevor Boyd Smith,
2
Oder verwenden Sie einfach uftp-multicast.sourceforge.net. Dadurch wird Ihre Bandbreite verschlüsselt und Ihr Mac wird ausgelastet.
Trevor Boyd Smith
4
Im Gegensatz zu Ihrem letzten Satz sollte der Cloud-Service in Ordnung sein, wenn Sie die Datei lokal verschlüsseln, über die Cloud übertragen und dann lokal entschlüsseln (am anderen Ende), was immer noch eine Ende-zu-Ende-Verschlüsselung bedeuten würde. (Möglicherweise möchten Sie ein kurzes Feedback zum erfolgreichen Empfang hinzufügen.) Sie verwenden die SFTP-Verschlüsselung, um Angriffe von Personen zu verhindern, die in der Lage sind, Ihren gesamten Datenverkehr zu überwachen. Daher ist es nicht schlimmer, ihnen nur die verschlüsselten Daten zu geben, als anzunehmen, dass sie sie trotzdem erhalten könnten.
Hagen von Eitzen

Antworten:

29

Mit dem OpenSSH- sftpClient (den Sie anscheinend verwenden) können Sie Folgendes verwenden:

  • -RUmschalten , um die Länge der Anforderungswarteschlange zu erhöhen (Standard ist 64)
  • -BUmschalten , um die Größe der Lese- / Schreibanforderung zu erhöhen (Standard ist 32 KB)

Versuchen Sie zunächst, beide Werte zu verdoppeln:

sftp -R 128 -B 65536 user@host

Es spielt wahrscheinlich keine Rolle, welche davon Sie erhöhen.

Das Erhöhen von entweder sollte dazu beitragen, Ihre Verbindung mit hoher Latenz zu sättigen. Mit den oben genannten Einstellungen können zu jeder Zeit Daten im Wert von 8 MB in der Pipe übertragen werden (128 * 64K = 8M).

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


Hintergrundinformationen und Erläuterungen zu anderen (GUI-) SFTP-Clients finden Sie im Abschnitt "Netzwerkverzögerung / -latenz" in meiner Antwort auf " Warum ist die maximale FileZilla SFTP-Dateiübertragung auf 1,3 MB / s begrenzt, anstatt die verfügbare Bandbreite zu überlasten?" rsync und WinSCP sind noch langsamer .

Martin Prikryl
quelle
4

Sie können versuchen, die Komprimierung zu aktivieren und prüfen, ob dies hilfreich ist.

Von man sftp:

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

Und von man ssh:

-C Fordert die Komprimierung aller Daten an (einschließlich stdin, stdout, stderr und Daten für weitergeleitete X11-, TCP- und UNIX-Domänenverbindungen). Der Komprimierungsalgorithmus ist derselbe, der von gzip (1) verwendet wird, und die „Stufe“ kann mit der Option CompressionLevel für Protokollversion 1 gesteuert werden. Die Komprimierung ist für Modemleitungen und andere langsame Verbindungen wünschenswert, verlangsamt jedoch nur die Leistung in schnellen Netzwerken . Der Standardwert kann Host für Host in den Konfigurationsdateien festgelegt werden. Siehe die Option Komprimierung.

Es hört sich eher so an, als ob die Verbindung an einem bestimmten Punkt auf ihrem Weg mit einer begrenzten Geschwindigkeit verbunden sein könnte (oder eher, das scheint mir die einfachste Erklärung für Ihre 50 kB / s pro Verbindung zu sein, aber mehrere solcher Verbindungen sind möglich), obwohl dies möglicherweise nicht der Fall ist schlechte Idee, um sicherzustellen, dass die Festplatten auf beiden Seiten kein Faktor sind.

Sie könnten auch eine kurze Überprüfung durchführen, um festzustellen, ob es „offensichtliche“ Probleme gibt (z. B. eine große Anzahl von erneuten Übertragungen). Wenn Sie jedoch nicht sicher sind, dass Sie dies in Angriff nehmen können, würde ich wahrscheinlich nur sehen, ob die Komprimierung aktiviert wird Hilfe.

Ich wurde von Agrue gegessen
quelle
Vielen Dank! Leider sind die Dateien vorkomprimiert, so dass ich bezweifle, dass dies irgendetwas
bewirken wird
Die Komprimierung beschleunigt hier die Dinge nicht, selbst wenn die Daten nicht komprimiert würden. Der Overhead der CPU-Zeit (und der Verzögerung) ist zu groß, sodass dies heutzutage keinen Sinn ergibt.
Jakuje
1
Wenn der Engpass im Netzwerk liegt, sollte ein wenig mehr CPU auf beiden Seiten @Jakuje nicht verlangsamen, es sei denn, die Box ist nicht in der Lage, mit 50 KB / s zu komprimieren, was kein Problem sein sollte.
Ben
@Ben Die Frage besagt eindeutig, dass das Netzwerk kein Engpass ist.
Jakuje
4

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

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

Übertragen Sie mehrere Dateien gleichzeitig.

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

Grundsätzlich kann das TCP-Protokoll Verbindungen mit einem Produkt mit großer Bandbreitenverzögerung nicht sehr gut verarbeiten - eine einzelne Verbindung kann nicht genug Daten gleichzeitig in Bewegung halten. Siehe https://en.wikipedia.org/wiki/TCP_tuning

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

Andrew Henle
quelle
1
So parallelisieren Sie SFTP-Übertragungen: serverfault.com/questions/248105/…
niutech
3

Beschleunigen Sie SFTP-Übertragungen

Angenommen, Ihre Probleme betreffen die Netzwerkoptimierung und / oder die Drosselung pro TCP-Verbindung, sehen Sie sich SFTP mit dem LFTP-Spiegel-Subsystem an

Die Netzwerkoptimierung an beiden Enden ist ein viel umfangreicheres Thema und würde viel Hin- und Herbewegung erfordern, wodurch das Thema aus dem Bereich von ServerFault herausgedrängt würde. Für einzelne Verbindungen kann die von iwaseatenbyagrue erwähnte Komprimierung in beiden Fällen hilfreich sein. Dies setzt voraus, dass das entfernte Ende die Komprimierung zulässt.

Aaron
quelle
3

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

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

SCP und die zugrunde liegende Implementierung des SSH2-Protokolls in OpenSSH sind durch statisch definierte interne Flusssteuerungspuffer auf die Netzwerkleistung beschränkt. Diese Puffer wirken häufig als Engpass für den Netzwerkdurchsatz von SCP, insbesondere bei langen und hochbandigen 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 die Engpässe in OpenSSH beseitigt und vollständig mit anderen Servern und Clients kompatibel ist. Außerdem können HPN-Clients schneller von Nicht-HPN-Servern herunterladen und HPN-Server können Uploads von Nicht-HPN-Clients schneller empfangen.

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

twisteroid Botschafter
quelle
Vielen Dank! Ich habe nicht wirklich gemessen, das ist mir jetzt peinlich, aber ich reise um die halbe Welt in ein Land mit so lala Internet, also nehme ich an, 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 so, als ob es für Ihren Anwendungsfall perfekt sein sollte.
Twisteroid Botschafter
0

Sie sind sich nicht sicher, ob dies eine Option für Sie ist, aber haben Sie versucht, die Daten auf die internationale Site zu ziehen oder zu übertragen? Sowie entweder zu verschiedenen Zeiten, um zu sehen, ob es ein Problem mit dem Wettbewerb um Netzwerkressourcen gibt?

Schlafwiesel
quelle
tolle idee, werde es versuchen.
nick_eu
0

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

Es klingt nach einem Konfigurationsproblem - entweder absichtlich (als Mittel zum Upselling von Diensten, ohne dass zusätzliche Vorkehrungen getroffen werden müssen) oder versehentlich (z. B. zerbrochene Fensterskalierung oder übereifrige Verkehrskontrolle). Während Sie die Übertragungen parallelisieren konnten, haben Sie uns nichts darüber gesagt, was sich am anderen Ende der Verbindung befindet oder ob es sich lohnt, einige einfache Skripte für das Sharding / die Wiederherstellung von Dateien zu entwickeln.

Tuning der Warteschlangengröße und Komprimierung wahrscheinlich keine wesentlichen Auswirkungen haben, es sei denn , die Ursache ist sehr schlecht Software geschrieben (und openSSH nicht in diese Kategorie - nicht viel Sinn , mit OpenSSH mit einer längeren Anforderungswarteschlange / größere Blockgröße , wenn die Latenz über 250 ms. Möglicherweise möchten Sie versuchen, mit verschiedenen Clients an verschiedenen Standorten ein Problem mit dem Server auszuschließen.

Mein erster Anruf wäre, herauszufinden, welcher Anbieter für das Problem verantwortlich ist, ihn zu bitten, das Problem zu beheben oder zu einem anderen Anbieter zu wechseln.

symcbean
quelle
Entschuldigung, hätte klarer sein sollen. Es gibt keinen "Anbieter" - ich hoste auf meinem eigenen Desktop, und ein Kollege versucht, eine Verbindung von seinem Computer aus herzustellen. Der Kollege eröffnet gerade eine SSH-Sitzung (Protokoll nicht sicher, kann aber überprüfen) und verwendetput
nick_eu
@nick_eu er spricht von den Internetprovidern.
Džuris
Es klingt wie ein Konfigurationsproblem. Nein. Es ist kein Konfigurationsproblem. Das TCP-Protokoll selbst funktioniert bei Verbindungen mit einem Produkt mit großer Bandbreitenverzögerung nicht gut. Grundsätzlich, wenn die Verbindung so ist , dass eine Menge von Daten kann im Flug zu einer Zeit sein, das TCP - Protokoll selbst kann nicht so viele Daten behält jederzeit in der Zeit bewegt. Aus diesem Grund arbeiten parallele TCP-Verbindungen, um die Datenübertragungsraten zu verbessern.
Andrew Henle
"Keine gute Leistung bei Verbindungen mit einem Produkt mit großer Bandbreitenverzögerung" - Bitte lesen Sie RFC 1323 (von 1992) und 7323 (ersetzt 1323 in 2014)
symcbean
@symcbean Dann erkläre die OPs. Wir können mehrere Verbindungen mit dieser Geschwindigkeit hochladen (also keine Bandbreite?), aber kein einziger Upload verbessert die Geschwindigkeit. Dies ist ein klassisches Symptom von TCP gegenüber einer Verbindung mit extremer Latenz - alle TCP-Erweiterungen können dies nur mildern das Problem etwas, da sie die grundlegenden Probleme mit dem Protokoll selbst nicht ansprechen können. Und viel Glück beim Ermitteln, welcher Anbieter für das Problem verantwortlich ist. Bitten Sie ihn, das Problem zu beheben, während Sie versuchen, "eine Reihe großer Dateien international zu übertragen".
Andrew Henle