Mesurer les performances de lecture et d'écriture disque sous Linux

L'évaluation des performances d'entrée/sortie (E/S) d'un disque est une tâche courante pour les administrateurs système afin de diagnostiquer des goulots d'étranglement ou de valider le matériel. Sous Linux, deux outils simples et largement disponibles permettent d'obtenir des mesures rapides : hdparm et dd.

1. Utilisation de hdparm pour un diagnostic rapide

L'utilitaire hdparm est initialement conçu pour configurer les paramètres des disques SATA/IDE. Il propose également une fonctionnalité de test de débit simple. Bien que moins précis pour les systèmes de fichiers complexes, il permet de mesurer la vitesse de lecture brute et la vitesse du cache disque.

Exemple de commande pour tester un périphérique (remplacez /dev/sda par votre partitoin ou disque cible) :

# hdparm -Tt /dev/sda

/dev/sda:
 Timing cached reads:   18450 MB in  2.00 seconds = 9234.56 MB/sec
 Timing buffered disk reads: 420 MB in  3.01 seconds = 139.53 MB/sec

  • Timing cached reads : Mesure la vitesse à laquelle les données sont lues directement depuis le cache du processeur/mémoire sans accès disque physique.
  • Timing buffered disk reads : Mesure la vitesse de lecture séquentielle réelle du disque physique à travers le cache du système de fichiers.

2. Utilisation de la commande dd pour des tests flexibles

La commande dd est un outil universel de copie de données présent sur presque tous les systèmes de type Unix. Elle permet de simuler des charges d'écriture et de lecture simples.

Test de la vitesse d'écriture

Pour mesurer la vitesse d'écriture réelle, il est crucial de contourner le cache du système d'exploitation en utilisant le drapeau direct. Sans cela, vous mesurerez la vitesse de la RAM et non celle du disque.

# time dd if=/dev/zero of=test_perf.bin bs=1G count=1 oflag=direct

1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.42371 s, 127 MB/s

real    0m8.427s
user    0m0.001s
sys     0m0.542s

Dans cet exemple :

  • if=/dev/zero : Source de données (flux de zéros, ne génère pas d'E/S CPU).
  • of=test_perf.bin : Fichier de sortie créé sur le disque à tester.
  • bs=1G count=1 : Définit la taille du bloc à 1 Go pour une écriture unique.
  • oflag=direct : Force l'écriture directe sur le disque sans passer par le cache tampon de Linux.

Test de la vitesse de lecture

Une fois le fichier de test créé, vous pouvez mesurer la performance en lecture en le renvoyant vers /dev/null.

# dd if=test_perf.bin of=/dev/null bs=1M

1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.25431 s, 856 MB/s

Notez que si le fichier est encore en cache RAM, le résultat sera extrêmement élevé. Pour une mesure réelle, videz les caches système avant le test :

# echo 3 > /proc/sys/vm/drop_caches

Synthèse des paramètres dd

Voici les options clés à retenir pour affiner vos tests :

  • bs=BYTES : Définit la taille des blocs (ex: 4k, 1M, 1G). Un bloc plus petit simule des accès aléatoires, un bloc plus grand simule des transferts séquentiels.
  • count=N : Nombre de blocs à copier.
  • iflag=direct / oflag=direct : Utilise des E/S directes pour éviter les biais introduits par le cache système.
  • skip=N : Ignore les N premiers blocs en lecture.
  • seek=N : Ignore les N premiers blocs en écriture.

Bien que ces méthodes soient utiles pour une vérification rapide, pour une analyse professionnelle approfondie (IOPS, latence, accès aléatoires complexes), l'utilisation d'outils comme fio est recommandée.

Étiquettes: Linux Storage performance hdparm dd

Publié le 5 septembre à 20h54