Sommaire
Comment pouvez-vous configurer Linux pour lire à la fois à partir d'un disque / système de fichiers local et écrire sur un partage réseau en même temps, au lieu de lire alors qu'aucune donnée ne passe sur le réseau, puis d'envoyer ces données sur le réseau pendant que le disque local est tourner au ralenti?
Il est beaucoup plus rapide de lire et d'écrire en même temps au lieu d'effectuer une seule opération, puis l'autre de manière alternée.
Détails
Je déplace une grande quantité de données des disques locaux d'une machine Linux vers un périphérique NAS.
J'utilise rsync
essentiellement pour copier /srv/data
dans /mnt/nas
, qui est une monture CIFS.
Tout a bien commencé, lisant à 100 Mo / s et écrivant sur le NAS à 100 Mo / s (limite du réseau gigabit), la lecture et l'écriture se faisant simultanément.
Cependant maintenant, quelques heures plus tard, je constate qu'il lit à partir du disque local, puis arrête la lecture pendant qu'il écrit sur le NAS, puis lorsqu'il n'y a plus de données à écrire sur le NAS, il reprend la lecture à partir du disque encore. Le réseau est inactif pendant la lecture du disque et le disque est inactif pendant que le réseau est en cours d'utilisation.
Inutile de dire que lire 200 Mo puis écrire 200 Mo prennent beaucoup plus de temps que lire et écrire ces 200 Mo en même temps.
Comment puis-je configurer le noyau de telle sorte qu'il s'en tient au comportement antérieur de lecture et d'écriture en même temps, plutôt que d'alterner entre lecture puis écriture, en n'effectuant qu'une seule opération à la fois?
Quelques observations: Lorsque le disque local lit à 100 + Mo / s, tout semble se passer en parallèle très bien, mais une fois que le disque ralentit (semble ne tourner qu'à 20 Mo / s pour une raison quelconque), c'est à ce moment que cette lecture / écriture le changement semble se produire.
Je peux également exécuter sync
manuellement toutes les quelques secondes pour obtenir les écritures en parallèle avec les lectures (bien que évidemment à des vitesses réduites), mais mettre sync
en while
boucle pour qu'il s'exécute toutes les cinq secondes ne semble pas être la bonne solution ...
Le noyau semble mettre en cache environ 1 Go de données, puis les écrire sur le réseau aussi rapidement que possible - ce qui est bien - je ne comprends tout simplement pas pourquoi le disque lent doit cesser d'être lu pendant que les données sont envoyées sur le réseau. réseau.