it-swarm.com.de

Kann jemand genau erklären, was IOWait ist?

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

Ich weiß, es ist die Zeit, die die CPU damit verbringt, auf den Abschluss eines IO-Vorgangs zu warten, aber welche Art von IO -Operationen genau? Was ich auch nicht sicher bin, ist warum es so wichtig ist? Kann die CPU nicht einfach etwas anderes tun, während der Vorgang IO abgeschlossen ist, und dann wieder Daten verarbeiten?

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

Und wie kann die Wartezeit IO minimiert werden?

207
Peter Krumins

Ich weiß, es ist die Zeit, die die CPU damit verbringt, auf den Abschluss eines IO-Vorgangs zu warten, aber welche Art von IO -Operationen genau? Was ich auch nicht sicher bin, ist warum es so wichtig ist? Kann die CPU nicht einfach etwas anderes tun, während der Vorgang IO abgeschlossen ist, und dann wieder Daten verarbeiten?

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

Was sind auch die richtigen Tools, 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 von IO Anforderungen pro Prozess zu überwachen
  • strace, um die tatsächlichen Operationen zu betrachten, die von einem Prozess ausgegeben werden

Und wie kann die Wartezeit IO 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 Festplattennutzung 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-Operationen ausführen
103
Dave Cheney

Alte Frage, kürzlich gestoßen, aber die vorhandenen Antworten waren unzureichend.

IOWait Definition & Eigenschaften

IOWait (normalerweise mit %wa oben) ist eine Unterkategorie von Leerlauf (%idle wird normalerweise als alle Leerlaufzeiten (außer definierten Unterkategorien) ausgedrückt, was bedeutet, dass die CPU nichts tut. Daher gibt es dies, solange es einen anderen Prozess gibt, den die CPU verarbeiten könnte. Darüber hinaus 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.

Genau genommen ist iowait die Zeit, die für das Empfangen und Behandeln von Hardware-Interrupts als Prozentsatz der Prozessorticks aufgewendet wird. Software-Interrupts werden normalerweise separat als %si.

Bedeutung und mögliches Missverständnis

IOWait ist wichtig, da es häufig eine wichtige Messgröße ist, um festzustellen, ob bei IO ein Engpass vorliegt. Das Fehlen von iowait bedeutet jedoch nicht unbedingt, dass Ihre Anwendung nicht einen Engpass bei IO aufweist. Stellen Sie sich zwei Anwendungen vor, die auf einem System ausgeführt werden. Wenn Programm 1 einen starken Engpass aufweist und Programm 2 ein starker CPU-Benutzer ist, wird %user + %system der CPU kann immer noch so etwas wie ~ 100% sein und dementsprechend würde iowait 0 anzeigen. Aber das liegt nur daran, dass Programm 2 intensiv ist und relativ nichts über Programm 1 zu sagen scheint, da dies alles aus Sicht der CPU ist.

Tools zum Erkennen von IOWait

Siehe Beiträge von Dave Cheney und Xerxes

Aber auch ein einfaches top wird in %wa.

IOWait reduzieren

Da wir jetzt fast in das Jahr 2013 eintreten, ist zusätzlich zu den Aussagen anderer die Option einfach fantastisch IO Speichergeräte sind erschwinglich, nämlich SSDs. SSDs sind fantastisch !!!

48
Grumpy

iowait

iowait ist die Zeit, in der der Prozessor/die Prozessoren warten (dh sich in einem Leerlaufzustand befinden und dies tun ) nichts ), während dessen tatsächlich ausstehende Festplatten-E/A-Anforderungen vorhanden waren.

Dies bedeutet normalerweise, dass die Blockgeräte (d. H. Physische Festplatten, nicht 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 das meiste davon tatsächlich auf E/A-Wartezeiten zurückzuführen ist, dies nicht unbedingt bedeutet, dass Ihr System in Schwierigkeiten ist - und dies tritt auf, wenn Ihr System Die Maschine hat einfach 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 sich auch aus der Tatsache ergeben, dass alles, was Sie auf dem System tun, immer noch sehr reaktionsschnell ist.

werkzeuge

  • sar (aus dem sysstat -Paket, verfügbar auf den meisten * nix-Computern)
  • iostat
  • sarface (ein Frontend zu sar)
36
Xerxes

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

Ich werde einige 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 die CPU inaktiv ist UND mindestens eine E/A ausgeführt wird.

Jede CPU kann sich in einem von vier Zuständen befinden: Benutzer, System, Leerlauf, iowait.

Ich habe mich gefragt, was passiert, wenn das System andere Prozesse zur Ausführung bereit hält, während ein Prozess auf E/A wartet. Das Folgende erklärt es:

Wenn die CPU inaktiv ist, ermittelt der Kernel, ob derzeit mindestens eine E/A für eine lokale Festplatte oder eine remote gemountete 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 E/A ausgeführt wird, die von dieser CPU initiiert wurde, wird der Leerlaufzä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 ausführt, aber 100% seiner Zeit mit Computerarbeit verbringt. Nehmen Sie nun an, dass ein Problem mit dem E/A-Subsystem vorliegt und dass die Fertigstellung der physischen E/A eine Sekunde dauert. Immer wenn das Programm 'dd' schläft, während es auf den Abschluss seiner E/A wartet, kann das andere Programm auf dieser CPU ausgeführt werden. Wenn der Clock-Interrupt auftritt, wird immer ein Programm entweder im Benutzermodus oder im Systemmodus ausgeführt. Daher sind die Werte für% idle und% iowait 0. Auch wenn iowait jetzt 0 ist, bedeutet dies nicht, dass KEIN E/A-Problem vorliegt, da es offensichtlich eines gibt, wenn die Ausführung der physischen E/A eine Sekunde dauert.

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

34
haridsv

Für Solaris verwende ich DTrace, um zu überprüfen, 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 namens systemtap , das eine ähnliche Exposition gegenüber dem Kernel und Prozessaufrufen bietet.

Ein Beispiel, das ich beim Erlernen von DTrace verwendet habe, war der Vergleich eines cp - Befehls mit einem dd - Befehl. Sie können sehen, dass dd viel mehr Lesevorgänge für das Schreiben ausführt, während cp dies nicht tut, hauptsächlich aufgrund der Puffergröße, die dd standardmäßig verwendet (wenn ich mich erinnere korrekt).

1
Milner

Welche Art von IO-Vorgängen) von Ihren Anwendungen und Ihrem Setup abhängt.

Dies ist wichtig, da die CPU in einigen Fällen nicht die Daten oder Anweisungen abrufen kann, die zum Fortfahren erforderlich sind. In einigen Fällen kann es fortgesetzt werden, aber es hängt davon ab, welche Apps ausgeführt werden, was es kann. Wenn Sie eine Single-Threaded-Anwendung haben, die viel Festplattenzugriff bietet, müssen Sie warten.

Um die IO 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 optimiert werden kann, um größere Blöcke einzulesen oder IO asynchron) auszuführen.

0
Jeremy French

mit ps aux kann der Prozess STAT gedruckt werden
Wenn stat D oder Ds ist, befindet sich der Prozess im unterbrechungsfreien Schlaf (normalerweise IO).
Wenn ein Prozess in den unterbrechungsfreien Ruhezustand eintritt, wird nr_iowait der Runqueue hinzugefügt, und wenn nr_iowait> 0 ist, wird die Leerlaufzeit der CPU bis iowait gezählt

vmstat zeigt auch an, wie viele Prozessblöcke vorhanden sind
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/

0
Singo