iostat¶
Présentation de l’outil¶
iostat
est un utilitaire de surveillance des performances d’E/S disque pour les systèmes Unix et Linux. Il fait partie
du paquet sysstat
et permet de collecter et de rapporter des statistiques sur les opérations d’entrée/sortie des
périphériques de stockage. Cet outil est particulièrement utile pour les administrateurs système pour diagnostiquer
les problèmes de performance liés au disque.
Installation¶
Sur Debian/Ubuntu¶
-
Mettez à jour la liste des paquets :
-
Installez le paquet
sysstat
qui inclutiostat
:
Sur CentOS¶
-
Mettez à jour la liste des paquets :
-
Installez le paquet
sysstat
qui inclutiostat
:
Exemples d’utilisation¶
Utilisation¶
Après l’installation, vous pouvez exécuter iostat
en utilisant diverses options pour surveiller les performances de
votre disque. Voici quelques exemples :
-
Pour afficher un rapport simple :
-
Pour afficher un rapport toutes les 2 secondes :
-
Pour afficher un rapport étendu sur le CPU et les dispositifs :
Dans ces exemples :
-c
permet de n’afficher que les informations CPU ;-d
permet de n’afficher que les informations disque ;-x
affiche des statistiques étendues. Ce mode est le plus intéressant ;2
est le nombre en fin de commande qui est l’intervalle de rafraichissement en secondes. Il est possible de spécifier un second nombre après ce premier, qui sera le nombre de mesures à effectuer.
Attention
La première mesure retournée est une moyenne depuis le démarrage du système. Il ne faut pas la prendre en compte.
Premier exemple d’interprétation¶
Exemple d’affichage de la commande en temps étendu :
> iostat -d -x 1
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0,00 2,67 1,33 4,67 5,33 29,33 11,56 0,02 4,00 4,00 2,40
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 1,33 5,00 1,33 5,33 16,00 41,33 17,20 0,04 5,20 2,40 1,60
Les colonnes ont les significations suivantes :
Device
: le périphérique ;rrqm/s/wrms
:read request merged per second
etwrite request merged per second
, c’est-à-dire fusions d’entrées/sorties en lecture et en écriture. Cela se produit dans la file d’attente des entrées/sorties, quand des opérations sur des blocs consécutifs sont demandées… par exemple un programme qui demande l’écriture de 1Mo de données, par bloc de 4k. Le système fusionnera ces demandes d’écritures en opérations plus grosses pour le disque, afin d’être plus efficace. Un chiffre faible dans ces colonnes (comparativement àr/s
etw/s
) indique que le système ne peut fusionner les IOs, ce qui est signe de beaucoup d’IO non contigües (aléatoires). La récupération de données depuis un scan d’index par exemple… ;r/s
etw/s
: nombre de lectures et d’écritures par seconde. Il ne s’agit pas d’une taille en blocs, mais bien d’un nombre d’IO par seconde. C’est ce qui est le plus proche d’une limite physique, sur un disque (plus que son débit en fait) : le nombre d’IO par seconde faisable est directement lié à la vitesse de rotation et la performance des actuateurs des bras. Il est plus facile d’effectuer des IOs sur des cylindres proches que sur des cylindres éloignés, donc même cette valeur n’est pas parfaitement fiable. La somme der/s
etw/s
devrait être assez proche des capacités du disque. De l’ordre de150
IO par seconde pour un disque 7200 RPMS (SATA),200
pour un 10000 RPMS,300
pour un 15000 RPMS ;rkB/s
etwkB/s
: les débits en lecture et écriture. Ils peuvent être faibles, avec un disque pourtant à 100% ;avgrq-sz
: taille moyenne d’une requête. Plus elle est proche de1
, plus les opérations sont aléatoires. Sur un SGBD c’est mauvais : dans l’idéal soit les opérations sont séquentielles, soit elles se font en cache.avgqu-sz
: taille moyenne de la file d’attente des IOs. Si ce chiffre est élevé, cela signifie que les IOs s’accumulent. Ce n’est pas forcément anormal, mais cela entrainera des latences, surtout avec des schedulers comme deadline. Si on est en train d’effectuer une grosse écriture, ce n’est pas choquant (cf second exemple).await
: temps moyen attendu par une IO avant d’être totalement traitée. C’est le temps moyen écoulé, vu d’un programme, entre la soumission d’une l’IO et la récupération des données. C’est un bon indicateur du ressenti des utilisateurs : c’est le temps moyen qu’ils ressentiront pour qu’une IO se fasse (donc vraisemblablement une lecture, vu que les écritures sont asynchrones, vues par un utilisateur de PostgreSQL).svctm
: temps moyen du traitement d’une IO par le disque. Contrairement àawait
, on ne prend pas en compte le temps passé en file d’attente. C’est donc un indicateur de l’efficacité de traitement des IOs par le disque (il sera d’autant plus efficace qu’elles seront proches sur le disque).%util
: le pourcentage d’utilisation. Il est calculé comme :(r/s + w/s) * (svctm / 1000) * 100
C’est-à-dire nombre d’IOs par seconde, multiplié par le temps de traitement d’une IO en seconde, et multiplié par 100.
Attention
À cause des erreurs d’arrondis, il est approximatif, et dépasse quelquefois 100.
Deuxième exemple d’interprétation¶
Exemple d’affichage de la commande lors d’une copie de 700 Mo :
> iostat -d -x 1
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 60,67 1341,33 156,67 24,00 17534,67 2100,00 217,36 34,43 124,52 5,53 99,87
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 20,67 3095,33 38,67 117,33 4357,33 12590,67 217,28 126,79 762,36 6,41 100,00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 30,67 803,33 63,33 73,33 8028,00 6082,67 206,50 104,94 624,05 7,32 100,00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 55,33 4203,00 106,00 29,67 12857,33 6477,33 285,03 59,08 503,95 7,37 100,00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 28,33 2692,33 56,00 32,67 7046,67 14286,67 481,20 54,58 761,74 11,28 100,00
L’attente est particulièrement longue par rapport au temps réel de lecture/écriture, preuve d’un travail très important sur les entrées/sorties.
rrqm
: grâce à la lecture anticipative sur le fichier source, le système arrive à regrouper des IOs.wrqm
: le programme de copie écrit tous les blocs au fur et à mesure dans le fichier destination. Le merge est donc assez facile, avec un chiffre très élevé ici.- Il y a beaucoup moins de lectures que d’écritures, mais de taille plus importante.
- Que la file d’attente est assez grosse, ce qui est logique aussi : il est très facile pour une recopie de fichiers de deviner les lectures à venir, et de bufferiser les écritures pour les effectuer en gros lots.
- Le
await
est de500ms
, ce qui commence à être très élevé (il s’agit d’un disque SATA de PC de bureau, il ne peut pas effectuer beaucoup d’IO par seconde). Il est possible de réduire cette latence avec du tuning sur l’ordonnanceur (dans/sys/block/
) ou radicalement changer d’algorithme d’ordonnancement. Il faut néanmoins toujours faire un compromis entre débit pur et latence.
Bibliographie¶
- Site web officiel de
sysstat
(qui inclutiostat
) : Lien vers le site
Pour une utilisation plus avancée et des options supplémentaires, consultez la documentation et les ressources en ligne.