Frage Kann jemand genau erklären, was IOWait ist?


So viel ich über Iowait gelesen habe, ist es immer noch ein Rätsel für mich.

Ich weiß, es ist die Zeit, die die CPU damit verbringt, auf IO-Operationen zu warten, aber welche IO-Operationen genau? Was ich mir auch nicht sicher bin, warum ist es so wichtig? Kann die CPU nicht einfach etwas anderes tun, während der IO-Vorgang abgeschlossen ist, und dann zur Datenverarbeitung zurückkehren?

Was sind die richtigen Werkzeuge, um zu diagnostizieren, welche Prozesse genau auf IO gewartet haben?

Und welche Möglichkeiten gibt es, um die IO-Wartezeit zu minimieren?


170
2018-05-27 09:52


Ursprung


Und was ist High Iowait? - Muhamed Huseinbašić


Antworten:


Ich weiß, es ist die Zeit, die die CPU verbraucht   Warten auf IO-Operationen   vollständig, aber welche Art von IO   Operationen genau? Was ich auch bin   nicht sicher, warum ist es so wichtig?   Kann die CPU nicht einfach etwas anderes machen?   während der IO-Vorgang abgeschlossen ist und   dann zurück zur Verarbeitung von Daten?

Ja, das Betriebssystem plant, dass andere Prozesse ausgeführt werden, während einer für IO blockiert wird. In diesem Prozess wird er jedoch nicht weiter ausgeführt, bis der E / A-Vorgang abgeschlossen ist.

Was sind die richtigen Werkzeuge?   zu diagnostizieren, was genau der Prozess getan hat   warte auf IO.

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 tatsächlichen Vorgänge eines Prozesses zu betrachten

Und wie kann ich IO minimieren?   Wartezeit?

  • Stellen Sie sicher, dass Sie über freien physischen Speicher verfügen, sodass das Betriebssystem Festplattenblöcke im Speicher zwischenspeichern kann
  • Halten Sie die Festplattennutzung Ihres Dateisystems unter 80%, um eine übermäßige Fragmentierung zu vermeiden
  • Tune dein Dateisystem
  • Verwenden Sie einen batteriegestützten Array-Controller
  • Wählen Sie bei der Ausführung von io-Vorgängen eine gute Puffergröße

90
2018-05-27 10:28



Vergessen Sie nicht "Stellen Sie sicher, dass Ihr Back-End-Speicher schnell genug ist, um mit Ihrer I / O-Last Schritt zu halten." - jgoldschrafe
@Dave Cheney, Und wenn mein Prozess im Leerlauf ist, ist das, weil es auf IO wartet. Was ist der Unterschied zwischen IOWait und Leerlauf? - ctrl-alt-delor
In IOwait befindet sich der Prozess im "unterbrechungsfreien Schlaf", was bedeutet, dass er nicht getötet werden kann, um das Risiko der Beschädigung von Daten auf Festplatten zu vermeiden. Ein normaler Leerlaufprozess macht wirklich nichts, es gibt also weniger Risiken, ihn zu töten. - mveroone
Obendrein bedeutet das, dass Ihr IO zu langsam ist. "Machen Sie den Server schneller" ist unterschiedlich, egal ob Sie CPU-eingeschränkt sind oder Ihre CPU hungert, weil jemand entschieden hat, dass die langsame Notebook-Disk ausreicht, um einen Datenbankserver zu betreiben und die IO-Last die CPU nur 2% dessen verbraucht, was sie erwarten kann verrückt nach dem IO zu beenden. - TomTom
OMG Ich kann nicht glauben, dass die Top 3 Antworten hier sind falsch. Die Antwort von Haridsv ist korrekt. Keine CPU wartet auf die Beendigung des io. Ja, einige können blockieren - oft gibt es einen guten Grund dafür, und unter bestimmten Umständen können alle blockieren. Sie können jedoch auch Iowait für vollständig asynchrone Vorgänge sehen. - symcbean


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

IOWait Definition und Eigenschaften

IOWait (normalerweise beschriftet) %wa oben) ist eine Unterkategorie von Leerlauf (%idle wird in der Regel als alle Leerlauf außer definierten Unterkategorien ausgedrückt), was bedeutet, dass die CPU nichts tut. Solange es einen anderen Prozess gibt, den die CPU verarbeiten könnte, wird es dies tun. Zusätzlich sind Leerlauf, Benutzer, System, Iowait usw. eine Messung in Bezug auf die CPU. Mit anderen Worten, man kann sich Iowait als den Leerlauf vorstellen, der dadurch entsteht, dass man auf io wartet.

Genauer gesagt ist Iowait die Zeit, die für das Empfangen und Behandeln von Hardware-Interrupts als Prozentsatz der Prozessor-Ticks aufgewendet wird. Software-Interrupts werden normalerweise getrennt als bezeichnet %si.

Bedeutung und potenzielles Missverständnis

IOWait ist wichtig, weil es oft eine Schlüsselmetrik ist, um zu wissen, ob Sie einen Engpass in IO haben. Aber die Abwesenheit von Iowait bedeutet nicht unbedingt Ihre Bewerbung nicht Engpass bei IO. Berücksichtigen Sie zwei Anwendungen, die auf einem System ausgeführt werden. Wenn Programm 1 stark komprimiert ist und Programm 2 ein starker CPU - Benutzer ist, wird der %user + %system von CPU kann immer noch etwas wie ~ 100% sein und dementsprechend würde Iowait 0 anzeigen. Aber das ist nur, weil Programm 2 intensiv ist und relativ nichts über Programm 1 zu sagen scheint, weil dies alles aus der Sicht der CPU ist.

Tools zum Erkennen von IOWait

Siehe Beiträge von Dave Cheney und Xerxes

Aber auch ein einfaches top wird angezeigt %wa.

Reduzierung von IOWait

Auch, da wir jetzt fast ins Jahr 2013 kommen, zusätzlich zu dem, was andere sagten, ist die Option von einfach großartigen IO-Speichergeräten erschwinglich, nämlich SSDs. SSDs sind großartig !!!


44
2017-12-25 12:45





iowait

iowait ist die Zeit, die der Prozessor / die Prozessoren warten (d. h. in einem Ruhezustand und tut nichts), während denen es tatsächlich war ausstehende Datenträger-E / A-Anforderungen.

Dies bedeutet üblicherweise, dass die Blockvorrichtungen (d. H. Physische Platten, kein Speicher) zu langsam oder einfach gesättigt sind.

Sie sollten daher beachten, dass wenn Sie einen hohen Lastdurchschnitt auf Ihrem System sehen und bei der Inspektion feststellen, dass der Großteil davon tatsächlich auf E / A-Wartezeiten zurückzuführen ist, bedeutet dies nicht unbedingt, dass Ihr System in Schwierigkeiten ist Die Maschine hat einfach nichts anderes zu tun als als E / A-gebundene Prozesse (dh Prozesse, die mehr E / A als alles andere tun (nicht-E / A-gebundene Systemaufrufe)). Das sollte auch daran liegen, dass alles, was Sie auf dem System tun, immer noch sehr reaktionsschnell ist.

Werkzeuge

  • sar (von dem sysstat Paket, verfügbar auf den meisten * nix Maschinen)
  • iostat
  • sarface (ein Front-End zu sar)

34
2018-05-27 10:32



Beachten Sie, dass diese Definition der E / A-Wartezeit streng genommen nur für Einzelprozessorsysteme gilt. Für Multi-Prozessor-Systeme muss es etwas verfeinert werden: veithen.blogspot.be/2013/11/iowait-linux.html - Andreas Veithen
Inwieweit iowait betrifft Load Average? Sagen wir, 100 Threads warten auf das Netzwerk, wird LA 100 sein? - Ivan Balashov


Ich fand die Erklärung und Beispiele aus diesem Link sehr nützlich: Was genau ist "Iowait"?. Übrigens bezieht sich hier die E / A hier auf Festplatten-E / A, könnte aber auch E / A auf einer im Netzwerk montierten Platte (wie beispielsweise nfs) umfassen, wie in erklärt dieser andere Beitrag.

Ich zitiere ein paar wichtige Abschnitte (für den Fall, dass die Verbindung tot wird), einige davon wären Wiederholungen dessen, was andere bereits gesagt haben, aber für mich waren diese zumindest klarer:

Um es in einem Satz zusammenzufassen, ist "Iowait" der Prozentsatz der Zeit   Die CPU befindet sich im Leerlauf und es ist mindestens ein E / A in Bearbeitung.

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

Ich habe mich gefragt, was passiert, wenn auf dem System andere Prozesse laufen, während ein Prozess auf E / A wartet. Das Folgende erklärt es:

Wenn sich die CPU im Leerlauf befindet, ermittelt der Kernel, ob mindestens eine CPU vorhanden ist   Eine E / A, die gerade ausgeführt wird, entweder auf eine lokale Festplatte oder auf eine entfernte Festplatte   Festplatte (NFS), die von dieser CPU initiiert wurde. Wenn da   ist, dann wird der Iowait-Zähler um eins erhöht. Wenn es keine gibt   E / A in Bearbeitung, die von dieser CPU ausgelöst wurde, der "Leerlauf" -Zähler   wird um eins erhöht.

Und hier ist ein Beispiel:

Nehmen wir an, dass zwei Programme auf einer CPU laufen. Einer ist ein 'dd'   Programm lesen von der Festplatte. Der andere ist ein Programm, das keine E / A durchführt   Aber es verbringt 100% seiner Zeit damit, Rechenarbeit zu leisten. Jetzt nehme an   dass ein Problem mit dem E / A-Subsystem und den physischen E / As besteht   übernehmen eine Sekunde, um abzuschließen. Immer wenn das Programm 'dd' ist   Während des Wartens auf die I / Os zu schlafen, ist das andere Programm   kann auf dieser CPU laufen. Wenn die Taktunterbrechung auftritt, wird dies geschehen   immer ein Programm, das entweder im Benutzermodus oder im Systemmodus ausgeführt wird.   Daher werden die% Leerlauf und% Iowait Werte 0. Obwohl Iowait   ist jetzt 0, das bedeutet nicht, dass es da kein I / O-Problem gibt   Offensichtlich ist es einer, wenn physische I / Os eine Sekunde dauern   Komplett.

Der vollständige Text ist lesenswert. Hier ist ein Spiegel dieser Seitefalls es runter geht.


27
2018-05-27 12:34





Für Solaris verwende ich DTrace, um zu sehen, was die Prozesse tun, wenn ich sehen muss, welche E / A-Operationen ausgeführt werden. Für Linux gibt es ein ähnliches Programm namens Systemtap Dies bietet ein ähnliches Maß an Exposition gegenüber dem Kernel und Prozessaufrufen.

Ein Beispiel, das ich beim Lernen von DTrace verwendet habe, war ein Vergleich von a cp Befehl an a dd Befehl. Sie können sehen, dass dd liest viel mehr für das Schreiben, während cp nicht, vor allem wegen der Puffergröße dd verwendet standardmäßig (wenn ich mich richtig erinnere).


1
2018-05-27 10:01





Welche Art von IO-Operationen hängen von Ihren Anwendungen und Ihrer Einrichtung ab.

Dies ist wichtig, da die CPU in einigen Fällen die Daten oder Anweisungen, die sie benötigt, nicht erhalten kann. In einigen Fällen kann es weitergehen, aber es hängt davon ab, welche Anwendungen ausgeführt werden, was es tun kann. Wenn Sie eine Single-Thread-Anwendung haben, die viel Festplattenzugriff bietet, müssen Sie warten.

Um die IO-Zeit zu minimieren, kaufen Sie mehr und schneller Speicher, erhalten Sie schnellere Festplatten, defragmentieren Sie die Festplatten, die Sie haben.

Wenn es sich um eine interne Anwendung handelt, die den Flaschenhals darstellt, sehen Sie, ob sie optimiert werden kann, um größere Blöcke einzulesen oder IO asynchron zu machen.


0
2018-01-01 15:50



Okay, also Iowait ist die Zeit in einem Blockierung IO-Betrieb? - Peter Krumins
Wenn ich zum Beispiel eine select () oder poll () mache und sie sperrt, dann wird die Zeit, die bis zum Verfügbarwerden eines Deskriptors wartet, für die Iowait-Zeit stehen? - Peter Krumins
Ich denke, das würde SO betreffen, da es sich um eine Programmierfrage handelt. - Jeremy French
Peteris - ja, das ist ein guter Weg, darüber nachzudenken. - user2278


mit ps aux kann Prozess STAT drucken
Wenn stat D oder Ds ist, befindet sich der Prozess im unterbrechungsfreien Schlaf (normalerweise IO)
Wenn ein Prozess in den unterbrechungsfreien Schlaf eintritt, wird nr_iowait of runqueue hinzugefügt, und wenn nr_iowait> 0, wird die Leerlaufzeit von cpu zu iowait gezählt

vmstat zeigt auch, 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/troubleshooting-high-io-wait-in-linux/


0