Tester la vitesse de lecture et d'écriture d'un disque sous Linux
Voici plusieurs astuces qui permettent de connaître la vitesse de lecture et d'écriture d'un disque dur sous Linux. Les tests sont assez basiques, certes, mais ils donnent des résultats assez proches de la réalité.
Pré-requis
Pour réaliser l'ensemble de ces tests, nous allons avoir besoin des logiciels pv et hdparm. Lancez la commande suivante, en root, pour les installer sur une distribution à base de Debian :
sudo apt-get install pv hdparm
Ou celle-ci pour une distribution à base de RPM :
yum install pv hdparm
Test de lecture
Notre premier test de lecture consiste à lire l'ensemble des données contenues sur un disque dur (/dev/sda) et mesurer ensuite le débit grâce à l'utilitaire pv :
cat /dev/sda | pv -r > /dev/null
Sur la Dedibox de Tux-planet, j'obtiens un taux de transfert de 129 Mo/s. Mais le résultat n'est pas très stable et change régulièrement.
Une seconde méthode, un peu plus précise, consiste à se servir de la commande hdparm. Les options utilisées permettent de connaître la vitesse de lecture depuis le cache du disque (-t), ainsi que depuis un accès direct (-T).
Voici un exemple d'utilisation :
$ hdparm -t -T /dev/sda
Timing cached reads: 26196 MB in 2.00 seconds = 13120.00 MB/sec
Timing buffered disk reads: 330 MB in 3.00 seconds = 109.92 MB/sec
Test d'écriture
Pour tester la vitesse d'écriture, on peut tout simplement utiliser la commande dd. Celle-ci va créer un fichier de 1 Go (1024 block de 1 Mo = 1 Go) et nous indiquer le taux de transfert une fois terminé. A noter qu'ici, on utilise l'option "fdatasync" qui permet de forcer la synchronisation des données entre la mémoire et le disque.
dd if=/dev/zero of=/tmp/test.data bs=1M count=1024 conv=fdatasync
rm -f /tmp/test.data
Sur la Dedibox de Tux-planet, j'obtiens un débit de 86 Mo/s :
1073741824 bytes (1.1 GB) copied, 12.4675 seconds, 86.1 MB/s
16 Commentaires pour "Tester la vitesse de lecture et d'écriture d'un disque sous Linux"
Flux des commentaires de cet article Ajouter un commentaireSalut, cette méthode marche aussi pour les périphériques USB?
LOL l'image ^^
il y a aussi iozone (apt-get install iozone), a lancer avec le parametre -I (i maj) pour desactiver le cache. il vous donnera plus de détails.
@leloup146 : oui cela marche pour les disque USB aussi, il suffit de trouver le chemin du périphérique. Tu peux utiliser la commande mount pour t'aider. Chez moi c'est /dev/sdc1 et ça donne des taux de lecture ridicule :
@Muy_Bien : j'adore cette photo aussi !
@jpp : j'ai testé sous Ubuntu, le nom du paquet c'est iozone3 en faite :
Je le trouve un peu moins simple à utiliser que hdparm pour ma part (affichage des résultats difficile à lire, pas possible de spécifier un périphérique précis...).
@Droide : c'est bizarre effectivement, 0.8 seconde pour copier 1 Go. Ta partition /tmp est normal ? Tu n'aurais pas un montage directement sur la mémoire vive par exemple ?
Car j'obtiens des résultats similaires si j'écris en RAM justement (/dev/shm) :
Lance la commande mount pour en avoir le coeur net...
Le délire pour le test d'écriture :
# dd if=/dev/zero of=/tmp/test.data bs=8k count=128k
131072+0 records in
131072+0 records out
1073741824 bytes (1.1 GB) copied, 0.858667 s, 1.3 GB/s
je ne sais pas pourquoi ça va aussi vite !
@Droide, @pti-seb : la RAM est utilisée comme cache en écriture.
Sinon, dd peut aussi être utilisé pour faire le test en lecture :
dd -if=/dev/sda of=/dev/null
On peut également faire le test sur les différentes partitions du disque :
dd -if=/dev/sdaN of=/dev/null
où N est le n° de la partition.
On constatera alors que l'on obtient les débits les plus rapides pour les partitions situées en début de disque et que les débits chutent au fur et à mesure que les partitions en sont loin (s'il n'y a pas de LVM ou de RAID, évidemment).
@pti-seb : Effectivement c'est dans ma ram
(de même que pour /var/tmp/portage mais ça c'est volontaire)
sinon j'obtiens ça sur mon disque :
/dev/sda:
Timing cached reads: 12246 MB in 2.00 seconds = 6131.17 MB/sec
Timing buffered disk reads: 282 MB in 3.02 seconds = 93.49 MB/sec
Merci @pti-seb
J'essaye de comprendre pourquoi mon Iriver P7 est incroyablement lent en écriture face à une clef USB.
clef USB:
dd if=/dev/zero of=/media/ZMATE_01/test.data bs=8k count=4k
4096+0 enregistrements lus
4096+0 enregistrements écrits
33554432 octets (34 MB) copiés, 1,74616 s, 19,2 MB/s
Iriver P7:
dd if=/dev/zero of=/media/IRIVER\ P7/test.data bs=8k count=4k
4096+0 enregistrements lus
4096+0 enregistrements écrits
33554432 octets (34 MB) copiés, 229,768 s, 146 kB/s
disque dur:
dd if=/dev/zero of=/home/loup/Desktop/test.data bs=8k count=4k
4096+0 enregistrements lus
4096+0 enregistrements écrits
33554432 octets (34 MB) copiés, 0,158088 s, 212 MB/s
Il est visiblement aussi lent en lecture mais ça ne pose pas vraiment de problème.
Evitez d'utiliser dd pour faire des test de perfs, dd " n'attaque" pas directement le disque dur mais passe par le cache de linux.
Utilisez plutot iozone (avec l'option -I pour direct IO), par example : iozone -I -a pour un mode automatique.
@leloup146 : ton Iriver P7 a toujours eu des performances aussi ridicule où c'est depuis un certain temps seulement ?
@pti-seb : Il a toujours eu ce problème. Sous windows la vitesse est normale. Petit détail, le P7 a un slot Micro SD.
Edit : j'ai modifié la commande dd pour ajouter l'option "fdatasync" qui permet de forcer la synchronisation des données entre la mémoire et le disque.
J'ai trouvé une méthode pour mesurer la vitesse de copie d'un fichier avec cpipe :
Salut, tu parles de Mo/Go, ne serait-ce pas plutôt Mio/Gio ?
Edit : De même, les résultats sont-ils donnés respectent-ils les recommendations du SI, je veux dire par là, 1 MB = 1000 B ? Ou sont-ils, comme sous Windows, calculés en puissance de 2, mais affichés en puissance de 10 ? (ce qui reviendrait a 1 MB = 1024 B, soit 1 MiB)
/dev/md0:
Timing cached reads: 17698 MB in 1.99 seconds = 8882.85 MB/sec
Timing buffered disk reads: 1256 MB in 3.01 seconds = 417.51 MB/sec
dd if=/dev/zero of=/tmp/test.data bs=1M count=1024 conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.89925 s, 182 MB/s
Merci pas mal comme résultat