J'ai examiné la iowait
propriété indiquée dans la sortie de l'utilitaire supérieur, comme indiqué ci-dessous.
top - 07:30:58 up 3:37, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 86 total, 1 running, 85 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
iowait
est généralement défini comme suit:
"C'est le temps pendant lequel le CPU est inactif et il y a des E / S en attente."
Je crois comprendre qu'un processus est exécuté sur un seul processeur. Une fois qu'il a été retiré de la planification, soit parce qu'il a épuisé son créneau horaire, soit après avoir été bloqué, il peut éventuellement être à nouveau planifié sur n'importe quel processeur.
En cas de demande d'E / S, un processeur qui met un processus en veille sans interruption est responsable du suivi de l' iowait
heure. Les autres processeurs signalent en même temps que le temps d'inactivité de leur côté car ils sont vraiment inactifs. Cette hypothèse est-elle correcte?
En outre, en supposant qu'il existe une longue demande d'E / S (ce qui signifie que le processus a eu plusieurs opportunités d'être planifié mais n'a pas été planifié parce que l'E / S n'était pas terminée), comment un processeur sait-il qu'il existe des "E / S en attente"? D'où vient ce genre d'information? Comment un processeur peut-il simplement découvrir qu'un processus a été mis en veille pendant un certain temps pour qu'une E / S se termine, car n'importe quel processeur aurait pu mettre ce processus en veille. Comment ce statut de "IO en attente" est-il confirmé?
la source
Réponses:
Le CPU ne sait rien de tout cela, le planificateur de tâches le sait.
La définition que vous citez est quelque peu trompeuse; la
procfs(5)
page de manuel actuelle a une définition plus précise, avec des mises en garde:iowait
tente de mesurer le temps passé à attendre les E / S, en général. Il n'est pas suivi par un processeur spécifique, ni ne peut l'être (point 2 ci-dessus - qui correspond également à ce que vous vous demandez). Il est cependant mesuré par CPU, dans la mesure du possible.Le planificateur de tâches «sait» qu'il y a des E / S en attente, car il sait qu'il a suspendu une tâche donnée car il attend des E / S. Ceci est suivi par tâche dans le
in_iowait
domaine dutask_struct
; vous pouvez rechercherin_iowait
dans le noyau du planificateur pour voir comment il est défini, suivi et effacé. Le récent article de Brendan Gregg sur les moyennes de charge Linux comprend des informations générales utiles. L'iowait
entrée dans/proc/stat
, qui est ce qui finit partop
, est incrémentée chaque fois qu'un tick de minuterie est pris en compte, et le processus en cours «sur» le CPU est inactif; vous pouvez le voir en recherchantaccount_idle_time
dans le code de suivi du temps CPU du planificateur .Une définition plus précise serait donc «le temps passé sur ce CPU à attendre les E / S, alors qu'il n'y avait rien de mieux à faire» ...
la source