Kann jemand genau erklären, was IOWait ist?

194

So viel ich über iowait gelesen habe, ist es mir immer noch ein Rätsel.

Ich weiß, dass die CPU auf den Abschluss eines E / A-Vorgangs wartet, aber was für E / A-Vorgänge sind das genau? Was ich mir auch nicht sicher bin, ist warum es so wichtig ist? Kann die CPU nicht einfach etwas anderes tun, während der E / A-Vorgang abgeschlossen ist, und dann wieder Daten verarbeiten?

Welche Tools sind die richtigen, um zu diagnostizieren, welche Prozesse genau auf E / A gewartet haben?

Und wie kann die Wartezeit auf E / A minimiert werden?

Peter Krumins
quelle
Und was ist High Iowait?
Muhamed Huseinbašić

Antworten:

99

Ich weiß, dass die CPU auf den Abschluss eines E / A-Vorgangs wartet, aber was für E / A-Vorgänge sind das genau? Was ich mir auch nicht sicher bin, ist warum es so wichtig ist? Kann die CPU nicht einfach etwas anderes tun, während der E / A-Vorgang abgeschlossen ist, und dann wieder Daten verarbeiten?

Ja, das Betriebssystem plant die Ausführung anderer Prozesse, während einer auf E / A blockiert ist. In diesem Prozess wird der Vorgang jedoch erst fortgesetzt, wenn die E / A-Operation abgeschlossen ist, sofern keine asynchrone E / A-Operation verwendet wird.

Welche Tools sind die richtigen, um zu diagnostizieren, welche Prozesse genau auf E / A gewartet haben?

Einige Tools, die Sie möglicherweise nützlich finden

  • iostat, um die Servicezeiten Ihrer Festplatten zu überwachen
  • iotop (Wenn Ihr Kernel dies unterstützt), um die Aufteilung der E / A-Anforderungen pro Prozess zu überwachen
  • strace, um die von einem Prozess ausgegebenen tatsächlichen Vorgänge anzuzeigen

Und wie kann die Wartezeit auf E / A minimiert werden?

  • Stellen Sie sicher, dass Sie über freien physischen Speicher verfügen, damit das Betriebssystem Festplattenblöcke im Speicher zwischenspeichern kann
  • Halten Sie die Festplattenauslastung Ihres Dateisystems unter 80%, um eine übermäßige Fragmentierung zu vermeiden
  • Optimieren Sie Ihr Dateisystem
  • Verwenden Sie einen batteriegepufferten Array-Controller
  • Wählen Sie gute Puffergrößen, wenn Sie io-Vorgänge ausführen
Dave Cheney
quelle
6
Vergessen Sie nicht "Stellen Sie sicher, dass Ihr Back-End-Speicher schnell genug ist, um mit Ihrer E / A-Last Schritt zu halten."
Jgoldschrafe
1
@ Dave Cheney, und wenn mein Prozess im Leerlauf ist, liegt das daran, dass er auf IO wartet. Was ist der Unterschied zwischen IOWait und Leerlauf?
Strg-Alt-Delor
4
In IOwait befindet sich der Prozess im "unterbrechungsfreien Ruhezustand", was bedeutet, dass er nicht beendet werden kann, um das Risiko der Beschädigung von Daten auf Datenträgern zu vermeiden. Ein normaler Leerlaufprozess tut eigentlich nichts, sodass weniger Risiken bestehen, ihn zu töten.
mveroone
1
Praktisch bedeutet dies, dass Ihre E / A zu langsam ist. "Den Server schneller machen" ist unterschiedlich, unabhängig davon, ob Sie über eine begrenzte CPU-Kapazität verfügen oder ob Ihre CPU am Verhungern ist, da jemand der Meinung ist, dass die langsame Notebook-Disk ausreicht, um einen Datenbankserver zu betreiben, und die E / A-Last die CPU nur zu 2% belastet, so dass sie warten muss verrückt nach dem IO zu beenden.
TomTom
OMG Ich kann nicht glauben, dass die Top 3 Antworten hier so falsch sind . Die Antwort von haridsv unten ist richtig. Keine CPU "wartet" auf den Abschluss des io. Ja, einige IOS können blockieren - oft gibt es einen guten Grund dafür, und unter bestimmten Umständen können alle IOS blockieren. Sie können jedoch auch sehen, dass iowait für vollständig asynchrone Vorgänge auftritt.
Symcbean
47

Alte Frage, vor kurzem gestoßen, aber die vorhandenen Antworten waren unzureichend.

IOWait Definition & Eigenschaften

IOWait (in der Regel %waoben gekennzeichnet) ist eine Unterkategorie von Leerlauf ( %idlewird in der Regel als Leerlauf (mit Ausnahme definierter Unterkategorien) ausgedrückt), was bedeutet, dass die CPU nichts unternimmt. Solange es einen anderen Prozess gibt, den die CPU verarbeiten könnte, wird dies daher durchgeführt. Außerdem sind Leerlauf, Benutzer, System, iowait usw. ein Maß für die CPU. Mit anderen Worten, Sie können sich iowait als den Leerlauf vorstellen, der durch das Warten auf io verursacht wird.

Iowait ist genau die Zeit, die für das Empfangen und Behandeln von Hardware-Interrupts als Prozentsatz der Prozessor-Ticks aufgewendet wird. Software-Interrupts werden in der Regel als getrennt gekennzeichnet %si.

Wichtigkeit und mögliches Missverständnis

IOWait ist wichtig, da es oft eine Schlüsselmetrik ist, um zu wissen, ob Sie einen Engpass bei IO haben. Das Fehlen von iowait bedeutet jedoch nicht zwangsläufig, dass Ihre Anwendung bei IO keinen Engpass aufweist. Stellen Sie sich zwei Anwendungen vor, die auf einem System ausgeführt werden. Wenn Programm 1 stark überlastet ist und Programm 2 eine hohe CPU- %user + %systemAuslastung aufweist , kann die CPU-Auslastung immer noch etwa ~ 100% betragen, und dementsprechend würde iowait 0 anzeigen Programm 1, weil dies alles aus Sicht der CPU ist.

Tools zum Erkennen von IOWait

Siehe Beiträge von Dave Cheney und Xerxes

Aber auch ein einfacher topWille wird sich zeigen %wa.

IOWait reduzieren

Da wir jetzt fast in das Jahr 2013 eintreten, ist zusätzlich zu den anderen die Option von einfach fantastischen IO-Speichergeräten erschwinglich, nämlich SSDs. SSDs sind super !!!

Mürrisch
quelle
35

iowait

iowaitEs ist , dass der Prozessor / Prozessoren warten (dh ist in einem Ruhezustand und tut nichts ), in der es in der Tat war hervorragend Disk - I / O - Anforderungen.

Dies bedeutet normalerweise, dass die Blockgeräte (dh die physischen Festplatten, nicht der Speicher) zu langsam oder einfach gesättigt sind.

Sie sollten daher beachten, dass, wenn auf Ihrem System ein Durchschnitt mit hoher Auslastung angezeigt wird und bei der Überprüfung festgestellt wird, dass das meiste tatsächlich auf E / A-Wartezeiten zurückzuführen ist, dies nicht unbedingt bedeutet, dass sich Ihr System in einem Problem befindet Die Maschine hat lediglich nichts anderes zu tun als E / A-gebundene Prozesse (dh Prozesse, die mehr E / A als alles andere ausführen (nicht E / A-gebundene Systemaufrufe)). Dies sollte auch daran zu erkennen sein, dass alles, was Sie auf dem System tun, immer noch sehr reaktionsschnell ist.

Werkzeuge

  • sar(aus dem sysstatPaket, auf den meisten * nix-Rechnern verfügbar)
  • iostat
  • sarface(ein Frontend zu sar)
Xerxes
quelle
7
Beachten Sie, dass genau genommen die Definition der E / A-Wartezeit nur für Einprozessorsysteme gültig ist. Für Multiprozessorsysteme
Andreas Veithen 18.11.13
Inwieweit iowaitwirkt sich das aus Load Average? Sagen wir, 100 Threads warten auf das Netzwerk, wird LA 100 sein?
Ivan Balashov
32

Ich fand die Erklärung und Beispiele von diesem Link sehr nützlich: Was genau ist "iowait"? . Übrigens bezieht sich die E / A hier der Vollständigkeit halber auf Festplatten-E / A, kann jedoch auch E / A auf einer im Netzwerk eingebundenen Festplatte (wie z. B. nfs) enthalten, wie in diesem anderen Beitrag erläutert .

Ich werde ein paar wichtige Abschnitte zitieren (falls der Link nicht mehr funktioniert), einige davon wären Wiederholungen dessen, was andere bereits gesagt haben, aber für mich waren zumindest diese klarer:

Um es in einem Satz zusammenzufassen: 'iowait' ist der Prozentsatz der Zeit, in der sich die CPU im Leerlauf befindet UND mindestens eine E / A in Bearbeitung ist.

Jede CPU kann sich in einem von vier Zuständen befinden: user, sys, idle, iowait.

Ich habe mich gefragt, was passiert, wenn auf dem System andere Prozesse ausgeführt werden können, während ein Prozess auf E / A wartet. Das Folgende erklärt es:

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. Wenn dies der Fall ist, wird der 'iowait'-Zähler um eins erhöht. Wenn keine laufende E / A von dieser CPU initiiert wurde, wird der "Leerlauf" -Zähler um eins erhöht.

Und hier ist ein Beispiel:

Angenommen, auf einer CPU laufen zwei Programme. Eines ist ein "dd" -Programm, das von der Festplatte liest. Das andere ist ein Programm, das keine E / A-Vorgänge ausführt, aber 100% seiner Zeit mit Computerarbeiten verbringt. Nehmen Sie nun an, dass ein Problem mit dem E / A-Subsystem vorliegt und dass die physischen E / A-Vorgänge mehr als eine Sekunde dauern. Immer wenn das 'dd'-Programm schläft, während es auf den Abschluss seiner E / A wartet, kann das andere Programm auf dieser CPU ausgeführt werden. Wenn der Zeitinterrupt auftritt, wird immer ein Programm entweder im Benutzermodus oder im Systemmodus ausgeführt. Daher sind die Werte% idle und% iowait 0. Auch wenn iowait jetzt 0 ist, bedeutet dies nicht, dass KEIN E / A-Problem vorliegt, da offensichtlich eines vorliegt, wenn physische E / A eine Sekunde in Anspruch nehmen.

Der vollständige Text ist lesenswert. Hier ist ein Spiegelbild dieser Seite , falls sie ausfällt.

haridsv
quelle
1

Unter Solaris verwende ich DTrace, um zu sehen, was die Prozesse tun, wenn ich sehen möchte, welche E / A-Vorgänge ausgeführt werden. Für Linux gibt es ein ähnliches Programm mit dem Namen systemtap , das eine ähnliche Gefährdung für den Kernel und die Prozessaufrufe bietet.

Ein Beispiel, das ich beim Erlernen von DTrace verwendet habe, war das Vergleichen eines cpBefehls mit einem ddBefehl. Sie können sehen, dass dddies viel mehr Lesevorgänge für das Schreiben cpbewirkt , während dies meistens aufgrund der ddstandardmäßig verwendeten Puffergröße nicht der Fall ist (wenn ich mich richtig erinnere).

Milner
quelle
0

Welche Art von E / A-Vorgängen von Ihren Anwendungen und Ihrem Setup abhängen.

Es ist wichtig, da die CPU in einigen Fällen nicht die Daten oder Anweisungen abrufen kann, die sie zum Fortfahren benötigt. In einigen Fällen kann dies fortgesetzt werden, es hängt jedoch davon ab, welche Apps ausgeführt werden, um welche Funktionen es sich handelt. Wenn Sie eine einzelne Thread-Anwendung haben, die viel Festplattenzugriff ausführt, müssen Sie warten.

Um die E / A-Zeit zu minimieren, kaufen Sie mehr und schnelleren Speicher, holen Sie sich schnellere Festplatten und defragmentieren Sie die vorhandenen Festplatten.

Wenn es sich um eine interne Anwendung handelt, die den Engpass darstellt, prüfen Sie, ob sie zum Einlesen größerer Blöcke oder zum asynchronen Ausführen von E / A optimiert werden kann.

Jeremy French
quelle
Okay, also ist iowait die Zeit, die in einer E / A- Blockierungsoperation verbracht wird ?
Peter Krumins
Wenn ich zum Beispiel ein select () oder poll () durchführe und es blockiert, wird die Zeit, die wartet, bis ein Deskriptor verfügbar wird, für die Iowait-Zeit ausmachen?
Peter Krumins
Ich denke, dass das auf SO gehört, da es wie eine Programmierfrage aussieht.
Jeremy French
Peteris - ja, das ist eine gute Art, darüber nachzudenken.
user2278
0

Mit ps aux kann Prozess-STAT gedruckt werden.
Wenn stat D oder Ds ist, befindet sich der Prozess im unterbrechungsfreien Ruhezustand (normalerweise E / A),
wenn ein Prozess in den unterbrechungsfreien Ruhezustand übergeht, wird nr_iowait von runqueue hinzugefügt und wenn nr_iowait> 0, wird die Leerlaufzeit von cpu gezählt zu iowait

vmstat zeigt auch an, wie viele Prozessblöcke
r: Die Anzahl der Prozesse, die auf die Laufzeit warten.
b: Die Anzahl der Prozesse im unterbrechungsfreien Schlaf.

http://bencane.com/2012/08/06/troubleshooter-high-io-wait-in-linux/

Singo
quelle