Ich habe die in der iowait
oberen Ausgabe des Dienstprogramms gezeigte Eigenschaft untersucht, wie unten gezeigt.
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
ist allgemein wie folgt definiert:
"Es ist die Zeit, in der die CPU im Leerlauf ist und einige E / A-Vorgänge anstehen."
Nach meinem Verständnis wird ein Prozess auf einer einzelnen CPU ausgeführt. Nachdem die Planung aufgehoben wurde, entweder weil das Zeitfenster aufgebraucht ist oder nachdem es blockiert wurde, kann es eventuell erneut auf einer beliebigen CPU geplant werden.
Bei einer E / A-Anforderung ist eine CPU, die einen Prozess in den unterbrechungsfreien Ruhezustand versetzt, für die Verfolgung der iowait
Zeit verantwortlich. Die anderen CPUs melden an ihrem Ende die gleiche Zeit wie die Leerlaufzeit, da sie wirklich im Leerlauf sind. Ist diese Annahme richtig?
Angenommen, es liegt eine lange E / A-Anforderung vor (dh der Prozess hatte mehrere Möglichkeiten, geplant zu werden, wurde aber nicht geplant, weil die E / A nicht abgeschlossen war). Woher weiß eine CPU, dass es "anstehende E / A" gibt? Woher werden diese Informationen bezogen? Wie kann eine CPU einfach herausfinden, dass ein Prozess einige Zeit in den Ruhezustand versetzt wurde, damit ein E / A-Vorgang abgeschlossen werden kann, da jeder der CPUs diesen Prozess in den Ruhezustand versetzt haben könnte? Wie wird dieser Status von "Pending IO" bestätigt?