2 votes

Le transfert entre disques internes ralentit pour les fichiers volumineux

J'exécute Ubuntu Server 11.04 (amd64) sur une machine équipée d'un processeur dual-core de 1,6 GHz, de 4 Go de RAM et de 2 disques SATA 7200 de 250 Go (tous deux de 3,0 Gb/s et récemment formatés à partir d'une nouvelle installation). Lorsque je transfère des fichiers relativement petits (~100MB) entre les deux disques, j'obtiens des taux de transfert qui sont (meilleurs) que prévus, dans la gamme 300-350MB/sec. Cependant, le transfert d'un fichier de 500 Mo atteint environ 50 Mo/sec, tandis qu'un fichier de 1 Go atteint environ 25 Mo/sec.

Voici quelques tests que j'ai effectués et qui montrent ce comportement :

/disk1 $ dd if=/dev/zero of=output-small.dat bs=1M count=128
 bytes (134 MB) copied, 0.388619 s, 345 MB/s
/disk1 $ dd if=/dev/zero of=output-med.dat bs=1M count=500
524288000 bytes (524 MB) copied, 20.0151 s, 26.2 MB/s
/disk1 $ dd if=/dev/zero of=output-large.dat bs=1M count=1000
1048576000 bytes (1.0 GB) copied, 45.7304 s, 22.9 MB/s

/disk2 $ dd if=/dev/zero of=output-small.dat bs=1M count=128
134217728 bytes (134 MB) copied, 0.372266 s, 361 MB/s
/disk2 $ dd if=/dev/zero of=output-med.dat bs=1M count=500
524288000 bytes (524 MB) copied, 10.0856 s, 52.0 MB/s
/disk2 $ dd if=/dev/zero of=output-large.dat bs=1M count=1000
1048576000 bytes (1.0 GB) copied, 37.1851 s, 28.2 MB/s

$ time cp /disk1/output-small.dat /disk2/test-small.dat
real    0m0.532s
user    0m0.000s
sys     0m0.410s

$ time cp output-med.dat /playpen/test-med.dat
real    0m30.879s
user    0m0.010s
sys     0m3.740s

$ time cp /disk1/output-large.dat /disk2/test-large.dat
real    0m26.643s
user    0m0.010s
sys     0m3.390s

Enfin, en exécutant la commande pv < /disk1/output-large.dat > /disk2/test.dat Je constate d'abord d'excellentes vitesses de transfert, puis le taux chute dans la fourchette de 1 à 10 Mo/sec, avec des sauts périodiques (beaucoup) plus élevés. Je sais que ce n'est pas une mesure particulièrement utile des performances du disque puisque je passe par le pv, mais c'est une performance cohérente avec mes autres tests.

J'ai quelques questions :

  • Pourquoi la vitesse de transfert diminue-t-elle avec les gros fichiers ? Ne devrait-elle pas augmenter ?
  • Quelles vitesses dois-je m'attendre à voir avec ce type de configuration ?
  • Le temps passé (vraisemblablement) à attendre des entrées/sorties (de time , real - sys ) me semble suspicieusement élevé. C'est le cas ?

1voto

KaoFloppy Points 66

Les petits fichiers tiennent dans le cache de la page, et le test se termine donc avant que le contenu ne soit sur le disque. Essayez d'ajouter l'option conv=fsync à dd.

Pour le fichier d'1 Go, vous rencontrez peut-être des effets secondaires de la réécriture qui entraînent un débit inférieur à celui que les disques devraient être en mesure de gérer. Vous pouvez essayer les options dd iflag=direct et oflag=direct pour contourner le cache de page et voir comment cela affecte le résultat.

0voto

Marcin Points 2241

Il s'agit peut-être d'un effet de la mise en cache des fichiers. Vous pouvez définir iflag ou oflag sur nocache, et refaire le test, de cette façon vous verrez une vitesse brute, basée sur le média, et non des vitesses de buffer-to-buffer.

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