rsync ist sehr langsam (Faktor 8 bis 10) im Vergleich zu cp beim Kopieren von Dateien von nfs-share in das lokale Verzeichnis

17

Ich habe einen frisch installierten Ubuntu-Server, der der neue Backup-Server für unseren VM-Speicher sein soll. Der Server verfügt über 4 Netzwerkkarten, davon 2 mit 10 Gbit (tatsächlich eine Intel x540-T2 mit dem neuesten verfügbaren Treiber), die für die Verbindung zum SAN verwendet werden. Ich habe die NFS-Freigabe lokal gemountet und Geschwindigkeitsunterschiede beim Kopieren eines Verzeichnisses mit ~ 30 Dateien, ca. 15 VM-Images und entsprechenden Protokolldateien verglichen. Die Images sind zwischen 8 GB und 600 GB groß.

Verwenden von:

cp -rf /mnt/nfs-share /backup-storage/

bmon zeigt dementsprechend rund 600 MiB / s.

Verwenden

rsync -av /mnt/nfs-share /backup-storage/

bmon zeigt einige Pakete in den ersten Sekunden an, hält für ungefähr 30 Sekunden an und baut dann bis zu ungefähr 60-75 MiB / s auf. CPU ist um die 60%.

Was sollte / könnte ich ändern, um rsyncmit der gleichen Leistung wie zu verwenden cp?

Seelenweg
quelle

Antworten:

20

Ich denke, diese Unterschiede sind zwischen cpund ziemlich gut begründet rsync. Siehe diesen Artikel als Referenz mit dem Titel: Ein Blick auf die rsync-Leistung .

Auszug:
The four commands tested were:

    rsync $SRC $DEST
    echo $SRC | cpio -p $DEST
    cp  $SRC $DEST
    cat $SRC > $DEST/$SRC

The results for rsync, cpio, cp, and cat were:

user    sys     elapsed hog MiB/s   test
5.24    77.92   101.86  81% 100.53  cpio
0.85    53.77   101.12  54% 101.27  cp
1.73    59.47   100.84  60% 101.55  cat
139.69  93.50   280.40  83% 36.52   rsync

Ich benutze rsynctäglich. Es gibt Dinge, die Sie tun können, um die Situation zu verbessern.

Sie können beispielsweise versuchen, den -WSchalter zu verwenden:

-W, --whole-file            copy files whole (w/o delta-xfer algorithm)

Außerdem würde ich vorschlagen, dass Sie sicherstellen, dass Sie die 3.x-Versionen von haben rsync. Es gab bemerkenswerte Verbesserungen, als wir auf die neueren Versionen umgestiegen sind.

slm
quelle
15

Wenn Sie dafür sorgen möchten, dass rsync dieselbe Leistung wie cp erbringt, müssen Sie es "cp" buchstabieren.

Der Unterschied zwischen den beiden Befehlen ist signifikant, obwohl der Nettoeffekt der gleiche sein kann. Insbesondere führt rsync eine Reihe von Lesevorgängen durch, um festzustellen, ob eine Datei oder ein Teil einer Datei kopiert werden soll.

Gibt es einen Grund, warum Sie rsync verwenden möchten? Da cp "blind" kopiert, werden Sie eine höhere Rohleistung sehen. Wenn für eine Reihe von Auslösebedingungen der "Delta-Transfer" -Mechanismus von rsync verwendet wird, sinken die Übertragungsraten und die CPU-Auslastung steigt in der von Ihnen gemeldeten Weise ziemlich stark an.

msw
quelle
Ich bin mir des Verhaltens bewusst, habe aber keinen solchen Effekt erwartet. Ich dachte, dass bei CPU-Power und IOPS-Rsync mindestens 300 MiB / s ausgeführt werden sollten, besonders wenn die zu kopierende Datei nicht existiert. Ich bin noch nicht mit dem Testen fertig. Das Backup mit rsync wäre praktischer, aber ich kann auch ein Skript mit cp, dd oder was auch immer schreiben. Jetzt möchte ich verschiedene Möglichkeiten auf verschiedenen Dateisystemen testen, um festzustellen, was am besten passt.
Soulpath
6
Sie mögen mich als Empiriker bezeichnen, aber wenn Ihre Erwartungen und Ihre Realität nicht übereinstimmen, ist es normalerweise nicht die Realität, die sich irrt. Es gibt ein Dutzend Gründe, warum Sie diese Strafe verhängen könnten. Selbst das Verschachteln von Lese- und Schreibvorgängen in einem SAN kann je nach den feinen Details der Software dramatische Leistungseinbußen zur Folge haben.
msw
3
Ich hatte keine Zweifel an der Realität, nur an rsync - aber aufgrund dieser Unterschiede schreibe ich ein Skript mit cp und einigen Prüfsummen. Danke für deinen Rat!
Soulpath
Nein, verwenden Sie rsync nur nicht auf vernetzten Dateisystemen. Ihr Computer muss die gesamte Datei herunterladen, damit Sie alle Vorteile von rsync verlieren.
Giacomo Catenazzi
Leider ist diese Antwort im Detail falsch. Beim Kopieren zwischen "lokalen" Dateisystemen (und ja, ein NFS-Mount ist in diesem Kontext ein lokales Dateisystem) wird rsync die Zieldatei beim Kopieren nicht gelesen , es sei denn, Sie aktivieren diese kontraproduktive Operation ausdrücklich mit --whole-file. In dieser Situation ist es einfach sehr langsam cp.
Roaima