Je sais wa
(en top
) mesure le temps CPU en attente d'E / S. De nombreux articles le disent.
Mais je suis confus sur la base de 2 points de connaissance:
- si un processus utilise un appel système pour lire le disque, le processus est bloqué.
- Si un processus est bloqué, il ne peut pas être planifié en cours d'exécution sur le processeur.
Droite?
Il semble qu'il n'y ait pas de temps pour que le CPU attende les E / S ... Que se passe-t-il?
Si je recommande des livres ou des articles pour ma lecture, tant mieux.
Réponses:
L'état inactif du processeur est divisé en deux sous-états différents:
iowait
etidle
.Si le CPU est inactif, le noyau détermine alors s'il y a au moins une E / S en cours vers un disque local ou un disque monté à distance (NFS) qui a été lancé à partir de ce CPU. S'il y en a, alors le CPU est en état
iowait
. Si aucune E / S en cours n'a été lancée à partir de cette CPU, la CPU est enidle
état.Donc,
iowait
est le pourcentage de temps pendant lequel le CPU est inactif ET il y a au moins une E / S en cours initiée à partir de ce CPU.Le
iowait
compteur indique que le système peut gérer plus de travail de calcul. Ceiowait
n'est pas parce qu'un processeur est en état qu'il ne peut pas exécuter d'autres threads ou processus sur ce processeur.Donc,
iowait
c'est simplement une forme de temps mort.la source
dd if=/dev/sda of=/dev/null
faire un highwa
. Exécutez ensuite un code while-true,wa
is au lieu deus
. Merci le chaos.Je ne suis pas sûr à 100% de comprendre la question, mais il y a quelques idées.
Il y a une autre question ici qui a posé cette question et a de bonnes réponses: Quelqu'un peut-il expliquer précisément ce qu'est l'IOWait?
Il y a un bon article ici: http://veithen.github.io/2013/11/18/iowait-linux.html
la source