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?
Réponses:
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, à l'intérieur de ce processus, sauf si vous utilisez une E / S asynchrone, l'opération ne se poursuit qu'une fois l'opération IO terminée.
Quelques outils que vous pourriez trouver utiles
iostat
, pour surveiller les temps de service de vos disquesiotop
(si votre noyau le supporte), pour surveiller la répartition des demandes d'E / S par processusstrace
, examiner les opérations réelles générées par un processusla source
Ancienne question, récemment dépassée, mais estimant que les réponses existantes étaient insuffisantes.
IOWait définition et propriétés
IOWait (généralement indiqué
%wa
en haut) est une sous-catégorie d'inactivité (%idle
est généralement exprimée en tant que inactif sauf les 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 considérer iowait comme le temps mort dû à l’attente de io.Justement, iowait est le temps passé à recevoir et à gérer les interruptions matérielles en tant que pourcentage des tics du processeur. Les interruptions logicielles sont généralement étiquetées séparément comme
%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 application n'est pas goulot d'étranglement sur IO. Considérons deux applications s'exécutant sur un système. Si le programme 1 est fortement goulot d’étranglement et que le programme 2 est un utilisateur
%user + %system
intensif du processeur , le nombre de processeurs peut toujours être de l’ordre de ~ 100% et, par conséquent, iowait indiquerait 0. Mais c’est simplement parce que le programme 2 est intensif et ne semble apparemment pas ignorer programme 1 parce que tout cela est du point de vue de la CPU.Outils pour détecter IOWait
Voir les articles de Dave Cheney et Xerxes
Mais aussi simple
top
montrera dans%wa
.Réduire IOWait
De plus, comme nous sommes 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 disques SSD. Les SSD sont géniaux !!!
la source
iowait
iowait
est temps que le processeur / processeurs sont en attente (c. -à- est dans un état de repos et ne rien ), au cours de laquelle il en fait était de disque en attente des demandes d' E / S.Cela signifie généralement que les périphériques en mode bloc (disques physiques, pas 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 reste très réactif.
outils
sar
(à partir dusysstat
package, disponible sur la plupart des machines * nix)iostat
sarface
(un frontal àsar
)la source
iowait
affecteLoad Average
? Disons, 100 threads en attente de réseau, LA sera-t-il 100?J'ai trouvé l'explication et les exemples de ce lien très utiles: Qu'est-ce que "iowait"? . En passant, par souci d'exhaustivité, l'E / S fait ici référence aux E / S de disque, mais peut également inclure des E / S sur un disque monté en réseau (tel que nfs), comme expliqué dans cet autre article .
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:
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:
Et voici un exemple:
Le texte intégral mérite d'être lu. Voici un miroir de cette page , au cas où il tombe en panne.
la source
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 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 consistait à comparer une
cp
commande à unedd
commande. Vous pouvez voir que celadd
fait beaucoup plus de lectures pour l'écriture, ce quicp
n'est pas le cas, principalement à cause de la taille de la mémoire tampondd
utilisée par défaut (si je me souviens bien).la source
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épend des applications en cours d'exécution. Si vous avez une application à un seul thread offrant 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.
la source
utiliser ps aux peut imprimer le processus STAT
si stat est D ou Ds, le processus est en veille ininterrompue (généralement IO)
lorsqu'un processus entre en veille ininterruptible, nr_iowait of runqueue est ajouté et si nr_iowait> 0, le temps d'inactivité de cpu est compté à iowait
vmstat indique également le nombre de blocs de processus
r: 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/
la source