Warum hat die CPU Zeit für IO (wa) aufgewendet?


18

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:

  1. Wenn ein Prozess einen Systemaufruf zum Lesen des Datenträgers verwendet, wird der Prozess blockiert.
  2. 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.


Ich trat ein und schrieb eine richtige Antwort. Tut mir leid, dass ich nicht da war, als du mich gebraucht hast ;-)
Alec Teal

Antworten:


22

Der CPU-Ruhezustand ist in zwei verschiedene "Unterzustände" unterteilt: iowaitund idle.

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 im idleStatus.

Ist iowaitalso der Prozentsatz der Zeit, in der sich die CPU im Leerlauf befindet UND mindestens ein E / A-Vorgang von dieser CPU initiiert wird?

Der iowaitZähler gibt an, dass das System mehr Rechenarbeit verarbeiten kann. Nur weil eine CPU im iowaitStatus ist, heißt das nicht, dass sie keine anderen Threads oder Prozesse auf dieser CPU ausführen kann.

Ist iowaitalso einfach eine Form der Leerlaufzeit.


Das ist eigentlich falsch. Auch NFS - die CPU hat nicht einmal ein Konzept dafür. Es ist im Grunde genommen die Zeit, die die CPU damit verbracht hat, nichts anderes zu tun, weil sie sich mit einigem Low-Level-E / A-Material befasst - im Sinne des Zugriffs auf etwas, das damit verbunden ist, NICHT mit E / A, das normalerweise Dateien und so weiter liest. Zum Beispiel auf dem Raspberry Pi gibt es keinen DMA-Controller, so dass die CPU nicht gehen kann "Hey Motherboard, lies mir so viele Bytes von der Karte ab und stecke sie hier ab", muss es manuell tun
Alec Teal

So verbringt es eine Menge Zeit damit, ständig auf io zu warten, wie auf eine Karte, die gelesen werden muss, um fertig zu sein. Sie machen es so, als könnte ein Cache-Fehler durch dieses "io wait" (was natürlich nicht gezählt wird) gemessen werden. IO wait ist wie folgt definiert: Die Zeit, die der Kernel in einer I / O-Routine für Geräte auf niedriger Ebene verbracht hat - z Das RPi muss buchstäblich den Lesevorgang von der Karte ausführen, und die CPU (ein DMA-loser Trottel) muss auf Daten auf dem IO-Bus warten. Bei einem DMA-Controller spricht er mit dem Controller und sagt "Sag mir, wann du fertig bist" - und überlässt es anderen Aufgaben, während der DMA-Controller das Gerät IO
Alec Teal

Verwenden Sie dstat, um zu sehen, ob BTW wartet, und iowait und die für Kernel-Aufgaben aufgewendete Zeit können nicht wirklich pro Prozess gemessen werden. Angenommen, es gibt zwei Prozesse, die in "Dateien" "schreiben", der erste ist schnell abgeschlossen, der FS hat Schreibvorgänge aus irgendeinem Grund zwischengespeichert, der zweite bewirkt, dass der Cache geleert wird, und es ist nicht fair, die viel längere Zeit bis zur Rückkehr zu zählen vom Schreiben zum Prozess, der das Schreiben verursacht hat. Dasselbe gilt für E / A-Wartezeiten, weshalb sie nicht prozessbezogen gemessen werden.
Alec Teal

4
@ AlecTeal: Nein, es ist richtig und Ihre Kommentare sind falsch. iowait zählt Zeit blockiert auf I / O, nicht Wartung I / O. Wenn Sie dies nicht durch Lesen der Kernelquelle bestätigen möchten, versuchen Sie es mit einem Experiment: Hängen Sie ein Netzwerkdateisystem ein, beginnen Sie mit dem Lesen einer Datei und starten Sie dann die Firewall von der Remote-Maschine. iowait Zeit wird immer noch hoch sein, obwohl der Prozessor vollständig im Leerlauf ist.
David

1
Ich habe diese Antwort getestet. dd if=/dev/sda of=/dev/nulleinen Rausch machen wa. Führen Sie dann einen wahrheitsgetreuen Code aus, wastatt us. Danke Chaos.
HUA Di

-2

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


7
Mike, es wird bevorzugt, dass Antworten Inhalte enthalten, nicht nur Links zu Inhalten. Indem Sie hier Inhalte bereitstellen, stellen Sie sicher, dass Ihre Antwort auch dann noch einen Wert hat, wenn diese Links verschwinden.
EEAA

1
@EEAA muss dann die Antwort bearbeitet, nicht dreifach herabgestuft werden? Oder es kann in einen Kommentar verschoben werden. Es enthält immer noch nützliche Informationen. Downvotes bedeuten, dass die Informationen nutzlos sind, auch indem sie fast unsichtbar gemacht werden? Ich sage nicht, dass Sie eine Gegenstimme abgegeben haben, ich frage mich nur, wie die Leute hier vorgehen.
Roland Pihlakas

3
@ RolandPihlakas Es ist eine Frage der Motivation. Downvote + Kommentar in dieser Situation motivieren den Benutzer, seine Antwort zu korrigieren. Ich werde meinen dv gerne entfernen, nachdem die Antwort behoben ist. Das Bearbeiten ist kontraproduktiv, da es schlechtes Verhalten ermöglicht. Im Laufe der Jahre hatten wir mehrere Benutzer, die nur Links geantwortet haben, obwohl sie gebeten wurden, dies nicht zu tun. Wenn Benutzer sich nicht die Mühe machen können, ihre Antworten mit ein wenig Aufwand zu versehen, werde ich ihnen nicht helfen, indem ich ihre Arbeit repariere.
EEAA

@EEAA Danke für die durchdachte Antwort. Ihr Ansatz ist verständlich und durch Ihre Kommentare liefern Sie den Motivationsschub auch für den Autor der Antwort. Im Gegensatz dazu befürchte ich, dass stille Abstimmungen meist keine praktische Motivation liefern, da sie dunkel sind. Aber ich war ein bisschen ungenau - ich habe mich gefragt, warum die Antwort so herabgestimmt wurde, dass sie ausgegraut wurde. Dein Kommentar mit den ein oder zwei Downvotes hätte genügen sollen?
Roland Pihlakas

2
@ RolandPihlakas Die Leute dachten, die Antwort sei nicht nützlich, und stimmten ab. Sie haben abgestimmt, weil es Dienstag ist. Sie haben abgestimmt, weil es heute in Minneapolis schneit (wirklich, und es sollte nicht so spät im Frühling sein). Wer weiß.
EEAA
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.