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!