265 votes

Quelqu'un peut-il expliquer précisément ce qu'est l'IOWait ?

J'ai beau avoir lu beaucoup de choses sur l'Iowait, c'est toujours un mystère pour moi.

Je sais que c'est le temps passé par le CPU à attendre la fin d'une opération d'entrée/sortie, mais quel type d'opération d'entrée/sortie précisément ? Ce dont je ne suis pas sûr non plus, c'est pourquoi c'est si important ? L'unité centrale ne peut-elle pas faire autre chose pendant que l'opération d'E/S se termine, puis retourner au traitement des données ?

Quels sont également les bons outils pour diagnostiquer le(s) processus qui a(ont) exactement attendu l'IO.

Et quels sont les moyens de minimiser le temps d'attente des OI ?

1 votes

Et aussi, qu'est-ce que le high iowait ?

129voto

Dave Cheney Points 18132

Je sais que c'est le temps passé par le CPU en attendant qu'une opération d'entrée/sortie se terminent, mais quel type d'E/S précisément ? Ce que je ne sais pas non plus pas sûr, c'est pourquoi c'est si important ? Le CPU ne peut-il pas simplement faire autre chose pendant que l'opération IO se termine, et puis revenir au traitement des données ?

Oui, le système d'exploitation planifiera l'exécution d'autres processus pendant que l'un d'eux est bloqué sur IO. Cependant, à l'intérieur de ce processus, à moins qu'il n'utilise une E/S asynchrone, il ne progressera pas tant que l'opération d'E/S ne sera pas terminée.

Quels sont également les bons outils pour diagnostiquer quel(s) processus a(ont) exactement attendre IO.

Quelques outils qui pourraient vous être utiles

  • iostat pour surveiller les temps de service de vos disques.
  • iotop (si votre noyau le supporte), pour surveiller la répartition des demandes d'E/S par processus
  • strace pour examiner les opérations réelles émises par un processus.

Et quels sont les moyens de minimiser les IO le temps d'attente ?

  • assurez-vous que vous disposez d'une mémoire physique libre afin que le système d'exploitation puisse mettre en cache les blocs de disque en mémoire.
  • Maintenez l'utilisation du disque du système de fichiers en dessous de 80 % pour éviter une fragmentation excessive.
  • optimisez votre système de fichiers
  • utiliser un contrôleur de réseau soutenu par une batterie
  • choisir de bonnes tailles de tampon lors des opérations io

67voto

amos Points 191

Vieille question, récemment reposée, mais j'ai estimé que les réponses existantes étaient insuffisantes.

Définition et propriétés de l'IOWait

IOWait (généralement étiqueté %wa en haut) est une sous-catégorie de idle ( %idle est généralement exprimée par "all idle" (sauf sous-catégories définies), ce qui signifie que le CPU ne fait rien. Par conséquent, tant qu'il existe un autre processus que le CPU pourrait traiter, il le fera. De plus, idle, user, system, iowait, etc. sont une mesure par rapport au CPU. En d'autres termes, vous pouvez considérer iowait comme l'inactivité causée par l'attente de io.

Précisément, iowait est le temps passé à recevoir et à traiter les interruptions matérielles en pourcentage des ticks du processeur. Les interruptions logicielles sont généralement étiquetées séparément en tant que %si .

Importance et idées fausses potentielles

IOWait est important car il s'agit souvent d'une mesure clé pour savoir si vous êtes embouteillé sur IO. Mais l'absence d'iowait ne signifie pas forcément que votre application est no goulot d'étranglement sur les entrées-sorties. Considérons deux applications fonctionnant sur un système. Si le programme 1 présente un goulot d'étranglement important au niveau des E/S et que le programme 2 est un gros utilisateur de CPU, le %user + %system Mais c'est juste parce que le programme 2 est intensif et semble relativement ne rien dire du programme 1 parce que tout ceci est du point de vue du CPU.

Outils de détection de l'OIWait

Voir les messages de Dave Cheney et Xerxes

Mais aussi un simple top apparaîtra dans %wa .

Réduction de l'IOWait

De plus, comme nous entrons maintenant presque dans l'année 2013, en plus de ce que d'autres ont dit, l'option de dispositifs de stockage IO tout simplement géniaux sont abordables, à savoir les SSD. Les SSD sont géniaux ! !!

49voto

haridsv Points 131

J'ai trouvé l'explication et les exemples de ce lien très utiles : Qu'est-ce qu'un "iowait" exactement ? . Par ailleurs, par souci d'exhaustivité, les E/S font ici référence aux E/S sur disque, mais peuvent également inclure les E/S sur un disque monté en réseau (tel que nfs), comme expliqué dans la rubrique cet autre poste .

Je vais citer quelques sections importantes (au cas où le lien disparaîtrait), certaines d'entre elles seront des répétitions de ce que d'autres ont déjà dit, mais pour moi au moins, elles étaient plus claires :

Pour le résumer en une phrase, 'iowait' est le pourcentage de temps où le CPU est inactif ET il y a au moins une entrée/sortie en cours.

Chaque CPU peut se trouver dans l'un des quatre états suivants : user, sys, idle, iowait.

Je me demandais ce qui se passe lorsque le système a d'autres processus prêts à être exécutés alors qu'un processus attend des entrées/sorties. Le texte ci-dessous l'explique :

Si le CPU est inactif, le noyau détermine alors s'il y a au moins au moins une entrée/sortie en cours sur un disque local ou un disque monté à disque monté à distance (NFS) qui a été initiée à partir de cette unité centrale. Si c'est le cas Si c'est le cas, le compteur 'iowait' est incrémenté de un. S'il n'y a pas d'E/S en cours initiées par cette unité centrale, le compteur 'idle' est est incrémenté d'une unité.

Et voici un exemple :

Disons que deux programmes sont exécutés sur une unité centrale. L'un est un programme 'dd'. qui lit sur le disque. L'autre est un programme qui n'effectue aucune E/S mais qui passe 100% de son temps à faire des calculs. Supposons maintenant qu'il y ait un problème avec le sous-système d'E/S et que les E/S physiques physiques prennent plus d'une seconde pour se terminer. Chaque fois que le programme 'dd' est programme 'dd' est endormi en attendant que ses E/S se terminent, l'autre programme est programme peut s'exécuter sur cette unité centrale. Lorsque l'interruption de l'horloge se produit, il y aura toujours un programme en cours d'exécution, soit en mode utilisateur, soit en mode système. C'est pourquoi les valeurs de %idle et %iowait seront égales à 0. 0, cela ne signifie pas qu'il n'y a PAS de problème d'E/S car il y en a un si les E/S car il y en a un si les E/S physiques prennent plus d'une seconde pour se compléter.

Le texte intégral vaut la peine d'être lu. Voici un miroir de cette page au cas où il tomberait en panne.

39voto

Xerxes Points 4113

iowait

iowait est le temps pendant lequel le/les processeur(s) est/sont en attente (c'est-à-dire est/sont dans un état de repos et fait rien ), au cours de laquelle il y a en fait était les demandes d'E/S de disque en attente.

Cela signifie généralement que les périphériques de bloc (c'est-à-dire les disques physiques, pas la mémoire) sont trop lents, ou simplement saturés.

Vous devriez donc noter que si vous voyez une moyenne de charge élevée sur votre système, et qu'en inspectant, vous remarquez que la plupart de celle-ci est en fait due à l'attente d'E/S, cela ne signifie pas nécessairement que votre système est en difficulté - et cela se produit lorsque votre machine n'a tout simplement rien à faire, à part des processus liés aux E/S (c'est-à-dire des processus qui font plus d'E/S qu'autre chose (appels système non liés aux E/S)). Cela devrait également être évident du fait que tout ce que vous faites sur le système est encore très réactif.

outils

  • sar (de la sysstat disponible sur la plupart des machines *nix)
  • iostat
  • sarface (un frontal pour sar )

1voto

Milner Points 935

Pour Solaris, j'utilise DTrace pour voir ce que font les processus si j'ai besoin de voir quelles opérations d'E/S sont exécutées. Pour Linux, il existe un programme similaire appelé systemtap qui fournit un niveau similaire d'exposition au noyau et aux appels de processus.

Un exemple que j'ai utilisé lors de l'apprentissage de DTrace était de comparer une cp à un dd commande. Vous pouvez voir que dd fait beaucoup plus de lectures pour l'écriture, alors que cp ne le fait pas, principalement à cause de la taille de la mémoire tampon. dd utilise par défaut (si je me souviens bien).

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