Question Quelqu'un peut-il expliquer précisément ce que IOWait est?


Même si j'ai lu sur Iowait, c'est toujours un mystère pour moi.

Je sais que c'est le temps passé par le processeur à attendre la fin d'une opération d'E / S, mais quel type d'opérations d'E / S précisément? Ce que je ne suis pas sûr non plus, c'est pourquoi c'est si important? La CPU ne peut-elle pas faire autre chose pendant la fin de l'opération d'E / S, puis revenir au traitement des données?

De plus, quels sont les bons outils pour diagnostiquer quels processus ont attendu exactement IO.

Et quels sont les moyens de minimiser le temps d'attente des entrées / sorties?


170
2018-05-27 09:52


origine


Et aussi, quelle est haute iowait? - Muhamed Huseinbašić


Réponses:


Je sais que c'est le temps passé par la CPU   en attente d'une opération IO   complet, mais quel genre de IO   opérations précisément? Ce que je suis aussi   pas sûr, pourquoi est-ce si important?   Le processeur ne peut-il pas faire autre chose?   pendant que l'opération d'E / S se termine, et   puis revenir au traitement des données?

Oui, le système d'exploitation planifie l'exécution d'autres processus alors que l'un d'entre eux est bloqué sur IO. Toutefois, dans le cadre de ce processus, sauf si vous utilisez des E / S asynchrones, la progression n’est pas terminée.

Aussi, quels sont les bons outils pour   diagnostiquer quels processus ont fait exactement   attendez IO.

Quelques outils que vous pourriez trouver 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, examiner les opérations réelles générées par un processus

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

  • Assurez-vous d'avoir de la mémoire physique libre pour que le système d'exploitation puisse mettre en mémoire cache les blocs de disque
  • conservez l'utilisation du disque de votre système de fichiers à moins de 80% pour éviter une fragmentation excessive
  • optimisez votre système de fichiers
  • utiliser un contrôleur RAID alimenté par batterie
  • choisissez de bonnes tailles de mémoire tampon lors de l'exécution d'opérations io

90
2018-05-27 10:28



N'oubliez pas "assurez-vous que votre stockage d'arrière-plan est suffisamment rapide pour suivre votre charge d'E / S". - jgoldschrafe
@ Dave Cheney, Et lorsque mon processus est inactif, c'est parce qu'il attend IO. Alors, quelle est la différence entre IOWait et inactif? - ctrl-alt-delor
Lorsque vous vous trouvez dans IOwait, le processus est en "sommeil ininterruptible", ce qui signifie qu'il ne peut pas être supprimé pour éviter les risques de corruption des données sur les disques. un processus normal d'inactivité ne fait en réalité rien; il y a donc moins de risques de le tuer. - mveroone
En plus, cela signifie que votre IO est trop lent. "Rendre le serveur plus rapide" est différent si vous avez un nombre limité de processeurs ou si votre processeur est affamé, car quelqu'un a décidé que le disque de l'ordinateur portable trop lent suffisait à faire fonctionner un serveur de base de données et que le chargement d'E / S faisait en sorte que le processeur n'utilise que 2% de ce qu'il peut. fou pour l'IO pour finir. - TomTom
OMG je ne peux pas croire que les 3 premières réponses ici sont si faux. La réponse ci-dessous par haridsv est correcte. Aucun processeur n'attend la fin de la io. Oui, certains io peuvent être bloquants - il y a souvent une bonne raison pour cela, et dans certaines circonstances, tous les io peuvent être bloquants. Mais vous pouvez également voir se produire des opérations complètement asynchrones. - symcbean


Ancienne question, récemment repoussée, mais estimant que les réponses existantes étaient insuffisantes.

IOWait définition & propriétés

IOWait (généralement étiqueté %wa en haut) est une sous-catégorie de veille (%idle s’exprime généralement comme tous les éléments inactifs, à l’exception des sous-catégories définies), ce qui signifie que la CPU ne fait rien. Par conséquent, tant que le processeur peut traiter un autre processus, il le fera. En outre, inactif, utilisateur, système, iowait, etc. constituent une mesure par rapport à la CPU. En d’autres termes, vous pouvez penser à iowait comme au ralenti causé par l’attente de io.

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

Importance et idée fausse potentielle

IOWait est important car c’est souvent un paramètre clé pour savoir si vous êtes goulot d’étranglement sur IO. Mais l’absence de iowait ne signifie pas nécessairement que votre demande est ne pas goulot d'étranglement sur IO. Considérons deux applications s'exécutant sur un système. Si le programme 1 est sérieusement goulot d’étranglement et que le programme 2 utilise beaucoup de la CPU, %user + %system de CPU peut encore être quelque chose comme ~ 100% et en conséquence, iowait montrerait 0. Mais c'est simplement parce que le programme 2 est intensif et semble relativement ne rien dire sur le programme 1 parce que tout cela est du point de vue du CPU.

Outils pour détecter IOWait

Voir les articles de Dave Cheney et Xerxes

Mais aussi un simple top montrera dans %wa.

Réduire IOWait

De plus, comme nous entrons presque en 2013, en plus de ce que d'autres ont dit, les périphériques de stockage IO tout simplement géniaux sont abordables, à savoir les SSD. Les SSD sont géniaux !!!


44
2017-12-25 12:45





iowait

iowait est le temps que le processeur / les processeurs attendent (c’est-à-dire dans une état de repos et fait rien), au cours de laquelle il existe en fait était demandes d'entrées / sorties de disque en attente.

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

Vous devez donc noter que si vous constatez une charge moyenne élevée sur votre système et que, lors de l’inspection, c’est en grande partie à cause d’une attente E / S, cela ne signifie pas nécessairement que votre système est en panne - et cela se produit lorsque votre La machine n'a tout simplement rien à faire, à part les processus liés aux E / S (c'est-à-dire les 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 toujours très réactif.

outils

  • sar (du sysstat package, disponible sur la plupart des machines * nix)
  • iostat
  • sarface (une interface pour sar)

34
2018-05-27 10:32



Notez que, à proprement parler, cette définition du temps d'attente d'E / S n'est valable que sur des systèmes à processeur unique. Il doit être quelque peu affiné pour les systèmes multiprocesseurs: veithen.blogspot.be/2013/11/iowait-linux.html - Andreas Veithen
Dans quelle mesure iowait affecte Load Average? Disons, 100 threads en attente de réseau, LA sera-t-il 100? - Ivan Balashov


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

Je citerai quelques passages importants (au cas où le lien disparaîtrait), dont certains seraient des répétitions de ce que d’autres ont déjà dit, mais pour moi au moins, ils étaient plus clairs:

Pour résumer en une phrase, «iowait» est le pourcentage de temps   la CPU est inactive ET il y a au moins une E / S en cours.

Chaque CPU peut être dans l'un des quatre états suivants: utilisateur, système, inactif, iowait.

Je me demandais ce qui se passait lorsque le système disposait d'autres processus prêts à s'exécuter alors qu'un processus attendait des E / S. Le ci-dessous l'explique:

Si le processeur est inactif, le noyau détermine ensuite s’il existe au moins   une E / S en cours sur un disque local ou à distance   disque monté (NFS) qui a été lancé à partir de cette CPU. S'il y a   est, le compteur 'iowait' est incrémenté de un. Si il n'y a pas   I / O en cours qui a été initié à partir de cette CPU, le compteur 'inactif'   est incrémenté de un.

Et voici un exemple:

Disons qu'il y a deux programmes en cours d'exécution sur un processeur. L'un est un 'dd'   lecture du programme à partir du disque. L'autre est un programme qui ne fait pas d'E / S   mais passe 100% de son temps à faire du calcul. Maintenant assumer   qu'il y a un problème avec le sous-système d'E / S et que les E / S physiques   sont en train de prendre une seconde pour terminer. Chaque fois que le programme 'dd' est   endormi en attendant la fin de ses entrées / sorties, l’autre programme est   capable de fonctionner sur ce processeur. Lorsque l'interruption d'horloge se produit, il y aura   toujours être un programme fonctionnant en mode utilisateur ou en mode système.   Par conséquent, les valeurs% inactif et% iowait seront égales à 0. Même si iowait   est 0 maintenant, cela ne signifie pas qu'il n'y a PAS de problème d'E / S car il y a   est évidemment un si les E / S physiques prennent le relais d'une seconde à   Achevée.

Le texte intégral mérite d'être lu. Voici une miroir de cette page, au cas où il tombe en panne.


27
2018-05-27 12:34





Pour Solaris, j'utilise DTrace pour voir ce que font les processus si j'ai besoin de savoir quelles opérations d'E / S sont en cours d'exécution. Pour Linux, il existe un programme similaire appelé systemtap qui offre 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 un cp commande à un dd commander. Tu peux voir ça dd fait beaucoup plus de lectures pour l'écriture, tandis que cp ne le fait pas, principalement à cause de la taille du tampon dd utilise par défaut (si je me souviens bien).


1
2018-05-27 10:01





Quel type d'opérations IO dépendra de vos applications et de votre configuration.

C'est important car dans certains cas, le processeur ne peut pas obtenir les données ou les instructions dont il a besoin pour continuer. Dans certains cas, cela peut continuer, mais cela dépendra des applications en cours d'exécution et de ce qu'elles peuvent faire. Si vous avez une application à thread unique qui fait beaucoup d’accès au disque, vous devrez attendre.

Pour minimiser le temps d'E / S, achetez plus de mémoire et plus rapide, obtenez des disques plus rapides, défragmentez les disques que vous avez.

S'il s'agit d'une application interne qui constitue le goulot d'étranglement, voyez si elle peut être optimisée pour lire en blocs plus importants ou pour effectuer des opérations d'E / S de manière asynchrone.


0
2018-01-01 15:50



D'accord, alors c'est le temps passé dans un blocage Opération IO? - Peter Krumins
Ainsi, par exemple, si je fais un select () ou un poll () et qu'il se bloque, le temps d'attente avant qu'un descripteur soit disponible constituera un temps supplémentaire? - Peter Krumins
Je pense que cela devrait appartenir à SO car cela ressemble à une question de programmation. - Jeremy French
Peteris - oui, c'est une bonne façon de penser. - user2278


utiliser ps aux can print process STAT
si stat est D ou Ds, le processus est en sommeil ininterruptible (généralement IO)
quand un processus entre en veille ininterruptible, nr_iowait de runqueue est ajouté et si nr_iowait> 0, le temps d'inactivité de cpu est compté pour iowait

vmstat indique également le nombre de blocs de processus
r: le nombre de processus en attente d'exécution.
b: nombre de processus en sommeil ininterruptible.

http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/


0