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?
Antworten:
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.
Einige Tools, die Sie möglicherweise nützlich finden
iostat
, um die Servicezeiten Ihrer Festplatten zu überwacheniotop
(Wenn Ihr Kernel dies unterstützt), um die Aufteilung der E / A-Anforderungen pro Prozess zu überwachenstrace
, um die von einem Prozess ausgegebenen tatsächlichen Vorgänge anzuzeigenquelle
Alte Frage, vor kurzem gestoßen, aber die vorhandenen Antworten waren unzureichend.
IOWait Definition & Eigenschaften
IOWait (in der Regel
%wa
oben gekennzeichnet) ist eine Unterkategorie von Leerlauf (%idle
wird 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 + %system
Auslastung 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
top
Wille 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 !!!
quelle
iowait
iowait
Es 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 demsysstat
Paket, auf den meisten * nix-Rechnern verfügbar)iostat
sarface
(ein Frontend zusar
)quelle
iowait
wirkt sich das ausLoad Average
? Sagen wir, 100 Threads warten auf das Netzwerk, wird LA 100 sein?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:
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:
Und hier ist ein Beispiel:
Der vollständige Text ist lesenswert. Hier ist ein Spiegelbild dieser Seite , falls sie ausfällt.
quelle
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
cp
Befehls mit einemdd
Befehl. Sie können sehen, dassdd
dies viel mehr Lesevorgänge für das Schreibencp
bewirkt , während dies meistens aufgrund derdd
standardmäßig verwendeten Puffergröße nicht der Fall ist (wenn ich mich richtig erinnere).quelle
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.
quelle
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/
quelle