Ich weiß, wa
(in top
) misst die CPU-Zeit beim Warten auf I / O. Viele Artikel sagen das.
Aber ich bin verwirrt, basierend auf 2 Wissenspunkten:
- Wenn ein Prozess einen Systemaufruf zum Lesen des Datenträgers verwendet, wird der Prozess blockiert.
- Wenn ein Prozess blockiert ist, kann er nicht auf der CPU ausgeführt werden.
Recht?
Es scheint keine Zeit für CPU-Wartezeiten auf E / A zu geben ... Was passiert?
Wenn Sie mir Bücher oder Artikel zum Lesen empfehlen, umso besser.
Antworten:
Der CPU-Ruhezustand ist in zwei verschiedene "Unterzustände" unterteilt:
iowait
undidle
.Wenn sich die CPU im Leerlauf befindet, stellt der Kernel fest, ob mindestens eine E / A-Operation für eine lokale Festplatte oder eine remote bereitgestellte Festplatte (NFS) ausgeführt wird, die von dieser CPU initiiert wurde. Ist dies der Fall, befindet sich die CPU im Status
iowait
. Wenn keine laufende E / A von dieser CPU initiiert wurde, befindet sich die CPU imidle
Status.Ist
iowait
also der Prozentsatz der Zeit, in der sich die CPU im Leerlauf befindet UND mindestens ein E / A-Vorgang von dieser CPU initiiert wird?Der
iowait
Zähler gibt an, dass das System mehr Rechenarbeit verarbeiten kann. Nur weil eine CPU imiowait
Status ist, heißt das nicht, dass sie keine anderen Threads oder Prozesse auf dieser CPU ausführen kann.Ist
iowait
also einfach eine Form der Leerlaufzeit.quelle
dd if=/dev/sda of=/dev/null
einen Rausch machenwa
. Führen Sie dann einen wahrheitsgetreuen Code aus,wa
stattus
. Danke Chaos.Ich bin mir nicht 100% sicher, ob ich die Frage verstehe, aber es gibt einige Ideen.
Hier gibt es eine andere Frage, die dies stellt und einige gute Antworten hat: Kann jemand genau erklären, was IOWait ist?
Hier gibt es einen guten Beitrag: http://veithen.github.io/2013/11/18/iowait-linux.html
quelle