57 votes

Pourquoi mon rsync est-il si lent ?

Mon ordinateur portable et ma station de travail sont tous deux connectés à un commutateur Gigabit. Les deux fonctionnent sous Linux. Mais lorsque je copie des fichiers avec rsync il obtient de mauvais résultats.

J'obtiens environ 22 Mo/s. Ne devrais-je pas théoriquement obtenir environ 125 Mo/s ? Quel est le facteur limitant ?

EDITAR: J'ai mené quelques expériences.

Performances d'écriture sur l'ordinateur portable

L'ordinateur portable dispose d'un système de fichiers xfs avec un cryptage complet du disque. Il utilise aes-cbc-essiv:sha256 mode de chiffrement avec une longueur de clé de 256 bits. Les performances d'écriture sur disque sont 58,8 Mo/s .

iblue@nerdpol:~$ LANG=C dd if=/dev/zero of=test.img bs=1M count=1024
1073741824 Bytes (1.1 GB) copied, 18.2735 s, 58.8 MB/s

Performances de lecture sur le poste de travail

Les fichiers que j'ai copiés se trouvent sur un logiciel RAID-5 sur 5 disques durs. Au-dessus du RAID se trouve un LVM. Le volume lui-même est crypté avec le même code. La station de travail est équipée d'un processeur FX-8150 qui dispose d'un jeu d'instructions AES-NI natif, ce qui accélère le cryptage. Les performances de lecture du disque sont les suivantes 256 Mo/s (le cache était froid).

iblue@raven:/mnt/bytemachine/imgs$ dd if=backup-1333796266.tar.bz2 of=/dev/null bs=1M
10213172008 bytes (10 GB) copied, 39.8882 s, 256 MB/s

Performance du réseau

J'ai exécuté iperf entre les deux clients. La performance du réseau est 939 Mbit/s

iblue@raven $ iperf -c 94.135.XXX
------------------------------------------------------------
Client connecting to 94.135.XXX, TCP port 5001
TCP window size: 23.2 KByte (default)
------------------------------------------------------------
[  3] local 94.135.XXX port 59385 connected with 94.135.YYY port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.09 GBytes   939 Mbits/sec

31voto

ewwhite Points 193555

Les raisons peuvent être : la compression, le cryptage, le nombre et la taille des fichiers copiés, les capacités d'E/S du disque de votre système source et de votre système de destination, la surcharge TCP... Tous ces facteurs peuvent influencer le type de transfert que vous effectuez.

Veuillez indiquer la commande rsync que vous utilisez et fournir des détails sur les spécifications des deux ordinateurs.


Edit : Le cryptage est souvent un facteur limitant la vitesse de rsync. Vous pouvez utiliser ssh et un chiffrement plus léger comme arcfour

Quelque chose comme : rsync -e "ssh -c arcfour"

Vous pouvez également utiliser un rsync/ssh modifié qui peut désactiver le cryptage. Voir hpn-ssh : http://psc.edu/networking/projects/hpn-ssh

Mais là encore, votre ordinateur portable a un disque lent par rapport à votre station de travail. Les écritures peuvent être bloquées et en attente d'E/S vers votre ordinateur portable. Quelles sont vos véritables attentes en matière de performances ?

26voto

Dag Wieers Points 346

Une autre façon de réduire l'utilisation élevée du CPU tout en conservant les fonctionnalités de rsync, est de passer de rsync/SSH à rsync/NFS. Vous pouvez exporter les chemins à partir desquels vous voulez copier via NFS et ensuite utiliser rsync localement depuis le montage NFS jusqu'à votre emplacement de destination.

Lors d'un test à partir d'un disque réseau WD MyBook Live, un ou plusieurs rsyncs depuis le NAS sur un réseau Gigabit vers 2 disques USB locaux ne copiaient pas plus de 10MB/sec (CPU : 80% usr, 20% sys), après avoir exporté via NFS et rsync localement depuis le partage NFS vers les deux disques, j'ai obtenu un total de 45MB/sec (en utilisant au maximum les deux disques USB2) et une faible utilisation du CPU. L'utilisation du disque en utilisant rsync/SSH était d'environ 6% et en utilisant rsync/NFS était plus proche de 24%, alors que les deux disques USB2 étaient proches de 100%.

Nous avons donc déplacé le goulot d'étranglement du processeur du NAS vers les deux disques USB2.

13voto

JayCrossler Points 568

Après quelques essais supplémentaires, j'ai finalement trouvé la réponse moi-même. rsync utilise par défaut le tunneling sur ssh. La cryptographie le rend lent. J'avais donc besoin de contourner ce problème de cryptographie.

Solution 1 : Mise en place d'un serveur rsync

Pour l'utiliser via le rsync vous devez mettre en place un serveur rsyncd. Il existait un /etc/init.d/rsync script sur mon ordinateur portable, j'ai donc supposé que rsyncd était en cours d'exécution. Je me suis trompé. /etc/init.d/rsync start existe silencieusement, lorsque rsync n'est pas activé dans le fichier /etc/default/rsync . Ensuite, vous devez également le configurer dans /etc/rsyncd.conf ce qui est pénible.

Si vous parvenez à faire tout cela, vous devez utiliser rsync file.foo user@machine::directory . Veuillez noter qu'il y a deux deux-points .

Solution 2 : Serveur rsh à l'ancienne

Cependant, la configuration était beaucoup trop compliquée pour moi. J'ai donc simplement installé et rsh-server sur mon ordinateur portable. En invoquant rsync sur le poste de travail avec -e rexec utilise alors rsh au lieu de ssh. Ce qui a presque doublé les performances à 44,6 Mo/s ce qui est encore lent. La vitesse oscille entre 58 Mo/s et 33 MB/s ce qui indique qu'il peut y avoir des problèmes de mémoire tampon ou de contrôle de la congestion. Mais cela dépasse le cadre de cette question.

9voto

Law29 Points 3467

Ces questions et réponses sont très anciennes, mais une chose importante manque : si vous copiez des données déjà compressées ou cryptées, désactivez la compression.

Si vos données ne sont ni compressées ni cryptées, vous ne devez les compresser qu'une seule fois ! Rsync compresse avec -z, ssh compresse avec -C (peut-être par défaut). Je n'ai pas testé lequel est le meilleur puisque mes données sont compressées.

Pendant que j'y suis, vous pouvez désactiver le transfert de X et l'attribution de TTY, ce qui se traduit par :

rsync -avh -e "ssh -x -T -c arcfour -o Compression=no" $src $dst

Enfin, assurez-vous (par exemple en utilisant iptraf ) que vous utilisez bien l'interface réseau que vous pensez utiliser. À ma grande surprise, j'ai constaté que sur mon OSX, le ssh sortant se liait à l'IP de l'interface sortante par défaut au lieu de l'IP de l'interface sur laquelle les paquets étaient censés être acheminés. Ma connexion directe GB entre deux ordinateurs portables également connectés par WiFi n'était pas utilisée. Après enquête, cela était dû à l'utilisation de 169.254/16, que le Mac place sur toutes les interfaces, et à l'ordinateur de destination qui répondait aux requêtes ARP même si la requête provenait d'une interface différente.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X