Vor ein paar Tagen ist mir etwas Merkwürdiges aufgefallen (zumindest für mich). Ich ließ rsync laufen, das die gleichen Daten kopiert und sie anschließend zum NFS-Einfassung löscht, genannt /nfs_mount/TEST
. Dies /nfs_mount/TEST
wird gehostet / exportiert von nfs_server-eth1
. Die MTU auf beiden Netzwerkschnittstellen beträgt 9000, der Switch dazwischen unterstützt auch Jumbo-Frames. In diesem rsync -av dir /nfs_mount/TEST/
Fall erhalte ich eine Netzwerkübertragungsgeschwindigkeit von X MBit / s. In diesem rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
Fall erhalte ich eine Netzwerkübertragungsgeschwindigkeit von mindestens 2x MBit / s. Meine NFS-Mount-Optionen sind nfs rw,nodev,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountvers=3,mountproto=tcp
.
Fazit: Beide Übertragungen laufen über dasselbe Netzwerksubnetz, dieselben Drähte, dieselben Schnittstellen, lesen dieselben Daten, schreiben in dasselbe Verzeichnis usw. Der einzige Unterschied besteht über NFSv3, der andere über rsync.
Der Client ist Ubuntu 10.04, der Server Ubuntu 9.10.
Wie kommt es, dass Rsync so viel schneller ist? Wie lässt sich NFS an diese Geschwindigkeit anpassen?
Vielen Dank
Bearbeiten: Bitte beachten Sie, dass ich mit rsync auf die NFS-Freigabe oder auf SSH auf den NFS-Server schreibe und dort lokal schreibe. Beide Male beginne ich rsync -av
mit einem klaren Zielverzeichnis. Morgen werde ich es mit normaler Kopie versuchen.
Edit2 (zusätzliche Informationen): Die Dateigröße liegt zwischen 1 KB und 15 MB. Die Dateien sind bereits komprimiert, ich habe versucht, sie ohne Erfolg weiter zu komprimieren. Ich habe eine tar.gz
Akte daraus gemacht dir
. Hier ist das Muster:
rsync -av dir /nfs_mount/TEST/
= langsamste Übertragung;rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
= schnellste rsync mit aktivierten Jumbo Frames; ohne Jumbo-Frames geht es etwas langsamer, aber immer noch deutlich schneller als direkt mit NFS;rsync -av dir.tar.gz nfs_server-eth1:/nfs_mount/TEST/
= ungefähr das Gleiche wie sein Nicht-Tar.gz-Äquivalent;
Tests mit cp
und scp
:
cp -r dir /nfs_mount/TEST/
= etwas schneller alsrsync -av dir /nfs_mount/TEST/
aber immer noch deutlich langsamer alsrsync -av dir nfs_server-eth1:/nfs_mount/TEST/
.scp -r dir /nfs_mount/TEST/
= am schnellsten insgesamt, leicht überwindetrsync -av dir nfs_server-eth1:/nfs_mount/TEST/
;scp -r dir.tar.gz /nfs_mount/TEST/
= ungefähr das Gleiche wie sein Nicht-Tar.gz-Äquivalent;
Schlussfolgerung, basierend auf diesen Ergebnissen: Für diesen Test gibt es keinen signifikanten Unterschied, wenn Sie eine große oder viele kleine tar.gz-Datei verwenden. Auch das Ein- und Ausschalten von Jumbo-Frames spielt kaum eine Rolle. cp
und scp
sind schneller als ihre jeweiligen rsync -av
Äquivalente. Das direkte Schreiben in eine exportierte NFS-Freigabe ist erheblich langsamer (mindestens zweimal) als das Schreiben in dasselbe Verzeichnis über SSH, unabhängig von der verwendeten Methode.
Unterschiede zwischen cp
und rsync
sind in diesem Fall nicht relevant. Ich beschloss zu versuchen cp
und scp
nur zu sehen, ob sie das gleiche Muster zeigen und sie machen - 2X Unterschied.
Da ich rsync
oder cp
in beiden Fällen verwende, kann ich nicht verstehen, was NFS daran hindert, die Übertragungsgeschwindigkeit der gleichen Befehle über SSH zu erreichen.
Wie kommt es, dass das Schreiben auf die NFS-Freigabe 2X langsamer ist als das Schreiben über SSH an dieselbe Stelle?
Edit3 (NFS - Server / etc / exports - Optionen): rw,no_root_squash,no_subtree_check,sync
. Die Kunden / proc / mounts zeigt: nfs rw,nodev,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountvers=3,mountproto=tcp
.
Danke euch allen!
Antworten:
Möglicherweise ist es nicht die langsamere Übertragungsgeschwindigkeit, sondern die erhöhte Schreiblatenz. Versuchen Sie, die NFS-Freigabe asynchron anstatt synchron zu schalten, und prüfen Sie, ob dadurch die Geschwindigkeitslücke geschlossen wird. Wenn Sie rsync über ssh ausführen, schreibt der Remote-rsync-Prozess asynchron (schnell). Beim Schreiben auf die synchron gemountete nfs-Freigabe werden die Schreibvorgänge jedoch nicht sofort bestätigt: Der NFS-Server wartet, bis er die Festplatte (oder mit größerer Wahrscheinlichkeit den Controller-Cache) erreicht hat, bevor er eine Bestätigung an den NFS-Client sendet, dass das Schreiben erfolgreich war.
Wenn 'async' Ihr Problem behebt, denken Sie daran, dass beim Ausführen eines Schreibvorgangs auf dem NFS-Server möglicherweise inkonsistente Daten auf der Festplatte gespeichert werden. Solange dieser NFS-Mount nicht der primäre Speicher für diese (oder andere) Daten ist, ist das wahrscheinlich in Ordnung. Natürlich wären Sie im selben Boot, wenn Sie während / nach dem Ausführen von rsync-over-ssh den Stecker auf den nfs-Server ziehen würden (z. B. wenn rsync fertig ist, der nfs-Server abstürzt, nicht festgeschriebene Daten im Schreibcache jetzt verloren gehen) inkonsistente Daten auf der Festplatte belassen).
Obwohl dies bei Ihrem Test kein Problem darstellt (rsync neuer Daten), sollten Sie beachten, dass rsync over ssh erhebliche CPU- und E / A-Anforderungen an den Remote-Server stellen kann, bevor ein einzelnes Byte übertragen wird, während Prüfsummen berechnet und die Liste der erforderlichen Dateien erstellt wird Aktualisiert.
quelle
rsync -av dir.tar.gz /nfs_mount/TEST/
ich habe in etwa die gleiche Übertragungsgeschwindigkeit wie mitrsync -av dir nfs_server-eth1:/nfs_mount/TEST/
. Ich werde diese Antwort als richtig markieren, bin aber gespannt, ob ich das Setup weiter verbessern kann. Danke! Gut gemacht, Peter!NFS ist ein Freigabeprotokoll, während Rsync für Dateiübertragungen optimiert ist. es gibt viele Optimierungen, die getan werden kann , wenn man weiß von vornherein , dass Ihr Ziel - Dateien zu kopieren , um so schnell wie möglich statt den gemeinsamen Zugang zu ihnen.
Dies sollte helfen: http://en.wikipedia.org/wiki/Rsync
quelle
-e "ssh Compression=no"
Fall ist ), können Sie die Komprimierung mit der Option , möglicherweise eine schnellere Übertragungsgeschwindigkeit zu erzielen, selektiv deaktivieren. Dies verhindert, dass Dateien komprimiert werden, die möglicherweise bereits komprimiert sind. Ich habe oft eine Beschleunigung bemerkt.-z
,--compress-level
und--skip-compress
wird eine bessere Leistung tha mit einem komprimierten Transport bekommen.Rsync ist ein Dateiprotokoll, das nur die geänderten Bits zwischen Dateien überträgt. NFS ist ein Protokoll für Remoteverzeichnisdateien, das jedes Mal alles verarbeitet ... in gewisser Weise wie ein SMB. Die beiden sind unterschiedlich und für unterschiedliche Zwecke. Sie können Rsync zum Übertragen zwischen zwei NFS-Freigaben verwenden.
quelle
Das ist interessant. Eine Möglichkeit, die Sie möglicherweise nicht berücksichtigt haben, ist der Inhalt / Typ der Datei, die Sie übertragen.
Wenn Sie viele kleine Dateien haben (z. B. E-Mails in einzelnen Dateien), kann die NFS-Effizienz beeinträchtigt werden, da nicht die gesamte MTU verwendet wird (möglicherweise ist dies bei TCP über UDP jedoch weniger wahrscheinlich).
Wenn Sie über stark komprimierbare Dateien / Daten, schnelle CPUs und ein Netzwerk verfügen, das nicht ganz so schnell wie die CPU ist (*), können Sie die Geschwindigkeit allein durch implizite Komprimierung über die SSH-Verbindung erhöhen.
Eine dritte Möglichkeit besteht darin, dass die Dateien (oder eine Version davon) bereits im Ziel vorhanden sind. In diesem Fall liegt die Beschleunigung darin, dass Sie durch das rsync-Protokoll die Dateien nicht übertragen müssen.
(*) In diesem Fall beziehe ich mich mit "Geschwindigkeit" auf die Rate, mit der die CPU Daten komprimieren kann, verglichen mit der Rate, mit der das Netzwerk Daten übertragen kann. Es dauert beispielsweise 5 Sekunden, um 5 MB über die Leitung, aber über die CPU zu senden kann diese 5 MB in 1 MB in 1 Sekunde komprimieren. In diesem Fall beträgt die Übertragungszeit komprimierter Daten etwas mehr als 1 Sekunde, während unkomprimierte Daten 5 Sekunden betragen.
quelle
cp -r
vs machenrsync
und dann die Dateien komprimieren, um größere Dateien zu haben, um von der MTU zu profitieren. Vielen Dank!Ich verwende auch -e "ssh Ciphers = arcfour", um den Durchsatz zu erhöhen.
quelle
Wenn Sie nur alle Dateien von einem Ort an einen anderen kopieren möchten, ist tar / netcat die schnellste Option. Wenn Sie wissen, dass Ihre Dateien viele Leerzeichen (Nullen) enthalten, verwenden Sie die Option -i.
QUELLE: tar cvif - / pfad / zu / quelle | nc ZIEL PORTNUM ZIEL: cd / path / to / source && nc -l PORTNUM | tar xvif -
Wenn Sie wissen, dass Ihre Daten komprimierbar sind, verwenden Sie die Komprimierung für Ihre tar-Befehle -z -j -Ipixz
Ich bin ein Fan von pixz .. parallel xz, es bietet eine großartige Komprimierung und ich kann die Anzahl der CPUs, die ich habe, auf die Netzwerkbandbreite abstimmen. Wenn ich eine langsamere Bandbreite habe, verwende ich eine höhere Komprimierung, also warte ich mehr auf die CPU als auf das Netzwerk. Wenn ich ein schnelles Netzwerk habe, verwende ich eine sehr niedrige Komprimierung:
QUELLE: tar cvif - / pfad / zu / quelle | pixz -2 -p12 | nc DESTINATION PORTNUM # tar, ignoriere Nullen, Level 2 Pixz-Komprimierung mit 12 CPU-Kernen DESTINATION: nc -l PORTNUM | teer -Ipixz -xvif
Wenn Sie die Komprimierungsstufe und die Kerne je nach Dataset richtig einstellen, sollten Sie in der Lage sein, das Netzwerk nahe an der Sättigung zu halten und genügend Komprimierung vorzunehmen, damit der Engpass zur Festplatte wird (normalerweise die Schreibseite, wenn Lese- und Schreibplattensysteme vorhanden sind) das Gleiche).
Ich glaube, dass rsync Nullen überspringt, ähnlich wie tar dies mit dieser Option tut, und daher weniger Daten überträgt als NFS. NFS kann keine Annahmen über die Daten treffen und muss daher jedes Byte zusammen mit dem NFS-Protokoll-Overhead übertragen. Rsync hat einige Overhead ..
Netcat hat im Grunde genommen keine. Es sendet vollständige TCP-Pakete, die nur Daten enthalten, die Sie interessieren.
mit netcat müssen Sie wie mit scp immer alle Quelldaten senden. Sie können nicht wie mit rsync selektiv vorgehen, daher ist es nicht für inkrementelle Sicherungen oder ähnliches geeignet, aber zum Kopieren von Daten oder zum Archivieren.
quelle
Haben Sie ein Dateisperr-Setup auf dem nfsshare? Sie könnten viel mehr Leistung erhalten, wenn dies deaktiviert wäre.
quelle
Ich gehe davon aus, dass die erhöhte Geschwindigkeit zumindest teilweise darauf zurückzuführen ist, dass "rsync src host: / path" einen lokalen Prozess auf dem Remote-Computer zum Senden / Empfangen gestartet hat, wodurch sich die E / A-Zahl halbiert.
quelle