rsync est très lent (facteur 8 à 10) par rapport à cp lors de la copie de fichiers du partage nfs vers le répertoire local


17

J'ai un serveur Ubuntu fraîchement installé qui devrait être le nouveau serveur de sauvegarde pour notre stockage VM. Le serveur dispose de 4 cartes réseau, dont 10 Gbit (en fait un Intel x540-T2 avec le dernier pilote disponible) qui sont utilisées pour se connecter au SAN. J'ai le partage nfs monté localement et j'ai comparé les différences de vitesse tout en copiant un répertoire avec environ 30 fichiers, environ 15 images vm et les fichiers journaux correspondants. Les images mesurent entre 8 Go et 600 Go.

En utilisant:

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

bmon affiche par conséquent environ 600 Mio / s.

En utilisant

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

bmon affiche certains paquets dans les premières secondes, s'arrête pendant environ 30 secondes et augmente jusqu'à environ 60 à 75 Mio / s. Le processeur est d'environ 60%.

Que dois-je / pourrais-je changer pour utiliser rsyncavec les mêmes performances cp?

Réponses:


20

Je pense que ces différences sont assez bien établies entre cpet rsync. Consultez cet article comme référence, intitulé: Un aperçu des performances de rsync .

extrait:
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

J'utilise rsyncau quotidien. Il y a des choses que vous pouvez faire pour améliorer la situation.

Par exemple, vous pouvez essayer d'utiliser le -Wcommutateur:

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

Je suggère également de vous assurer que vous disposez des versions 3.x de rsync. Il y a eu des améliorations notables lorsque nous sommes passés aux versions plus récentes.


15

La façon de faire rsync a les mêmes performances que cp est de l'épeler "cp".

La différence entre les deux commandes est significative même si l'effet net peut être le même. En particulier, rsync fait un tas de lecture pour voir si oui ou non un fichier ou une partie d'un fichier doit être copié.

Y a-t-il une raison pour laquelle vous souhaitez utiliser rsync? Parce que cp copie "aveuglément", vous verrez des performances brutes plus élevées. Si, pour un ensemble de conditions de déclenchement, le mécanisme "delta-transfer" de rsync est utilisé, vous verrez les taux de transfert chuter et l'utilisation du CPU augmenter à peu près de la manière que vous signalez.


Je suis conscient du comportement, mais je ne m'attendais pas à un tel effet. Je pensais que, compte tenu de la puissance du processeur et de la synchronisation IOPS, la synchronisation devrait être effectuée au moins à 300 Mio / s, en particulier si le fichier à copier n'existe pas. Je n'ai pas encore fini de tester. La sauvegarde avec rsync serait plus pratique, mais je peux également écrire un script en utilisant cp, dd ou tout ce qui me vient à l'esprit. Maintenant, je veux tester différentes possibilités sur différents systèmes de fichiers pour évaluer ce qui convient le mieux.
soulpath

6
Vous pouvez me traiter d'empiriste, mais lorsque vos attentes et votre réalité ne concordent pas, ce n'est généralement pas la réalité qui se trompe. Il existe une douzaine de raisons pour lesquelles vous pourriez encourir cette pénalité; même l'entrelacement des lectures et des écritures sur un SAN peut avoir des résultats spectaculaires en fonction des détails du logiciel.
msw

3
Je ne doutais pas de la réalité, juste de rsync- mais en raison de ces différences, j'irai avec l'écriture d'un script en utilisant cp et quelques sommes de contrôle. Merci pour vos conseils!
soulpath

Non, n'utilisez pas rsync sur un système de fichiers en réseau. Votre ordinateur doit télécharger l'intégralité du fichier, vous perdez ainsi tous les avantages de rsync.
Giacomo Catenazzi

Malheureusement, cette réponse est erronée dans ses détails. Lors de la copie entre des systèmes de fichiers "locaux" (et oui, un montage NFS est un système de fichiers local dans ce contexte), rsync ne lit pas le fichier cible lors de la copie, sauf si vous activez explicitement cette opération contre-productive avec --whole-file. Dans cette situation, c'est comme un très lent cp.
roaima
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.