Mbuffer schneller machen

1

Ich versuche, Dateien so schnell wie möglich über eine 10-Gig-Netzwerkverbindung zu übertragen. Bis jetzt habe ich rsync verwendet, um große Dateien über das Netzwerk zu verschieben, aber ich versuche es jetzt mit mbuffer, weil ich gehört habe, dass es schneller ist. Das Problem ist, dass ich nicht die erwartete Leistungssteigerung erhalte, zumal ich eine 10-Gig-Netzwerkverbindung zwischen den beiden Computern verwende.

Das sind meine aktuellen mbuffer Argumente:

mbuffer -m 1G -s 512M -P 10 -i "$currentFile" | ssh $outputTarget "cat - > $outputDir/$filename" > $debugOut

Hat jemand Tipps, wie ich die Geschwindigkeit über das Netzwerk verbessern kann? Ich bin neu bei mbuffer und weiß nicht genau, welche Argumente für meine Situation am besten geeignet sind. Momentan erhalte ich ungefähr 110 MiB / s für eine 1-GB-Datei, die ich aus Zufallszahlen erstellt habe.

Inglonien
quelle
1
Wovon liest du die Dateien aus? Wenn es sich nur um eine Festplatte handelt, ist es möglich, dass Sie die maximale sequentielle Lesegeschwindigkeit für die Festplatte erreicht haben.
Mikel Rychliski
Es ist nur eine Festplatte. Das ist durchaus möglich, ja. Auf der anderen Seite dachte ich mbuffer buffered to RAM, und der Puffer füllt sich sofort vor dem Schreiben.
Inglonias

Antworten:

1

Diese Antwort ist wahrscheinlich viel zu spät, um dem OP zu helfen, daher gilt Folgendes für die Nachwelt.

Der Engpass hat wahrscheinlich nichts mit dem Puffer zu tun, sondern damit, dass Daten über eine ssh-verschlüsselte Verbindung gesendet werden. Mit anderen Worten, der Engpass ist die Geschwindigkeit, mit der der Singlethread-SSH-Prozess den Datenverkehr auf dem sendenden Host verschlüsseln und auf dem empfangenden Host entschlüsseln kann.

Für Ihren Zweck ist es wahrscheinlich besser, die Option -O von mbuffer für den Absender und die Option -I für den Empfänger zu verwenden. Dadurch sendet mbuffer die Daten direkt über eine unverschlüsselte TCP-Pipe, wodurch Ihr Netzwerk so stark belastet wird, wie es das Betriebssystem, die Treiber und die Hardware zulassen.

Dies ist ein zweistufiger Prozess, da Sie mbuffer auf dem sendenden und dem empfangenden Host wie folgt ausführen müssen:

  1. Führen Sie zuerst mbufferden Empfänger aus. Es wartet auf eine Verbindung über den von der Option -I angegebenen Port (5567 ist nur ein Beispiel; wählen Sie Ihre eigene Portnummer):

    ssh $outputTarget mbuffer -I 5567 \>$outputDir/$filename
    
  2. Dann starte die Überweisung beim Absender:

    mbuffer -i "$currentFile" -O $outputTarget:5567
    

Wie oben beschrieben, überwacht und akzeptiert der empfangende mbuffer-Prozess, der auf $ outputTarget ausgeführt wird, eine TCP-Verbindung von jedem, der eine Verbindung zu diesem Socket herstellt, und nicht nur von dem sendenden mbuffer-Prozess, der in Schritt 2 gestartet wurde Tatsache ist, dass mbuffer bei dieser Verwendung nicht so sicher ist wie ssh, nicht nur, weil die Daten nicht verschlüsselt werden, sondern auch, weil nicht sichergestellt werden kann, dass der beabsichtigte Absender der einzige ist, der eine Verbindung zum Empfänger herstellt Port hören. Wenn Ihr Empfänger nicht von einem Port gescannt wird oder jemand anders weiß, was Sie tun, und versucht, Sie auszunutzen, ist die letztgenannte Einschränkung selten problematisch. Das Fehlen von Verschlüsselung hingegen könnte je nach Anwendungsfall durchaus als Show-Stopper wirken.

fd
quelle