Ich habe nie richtig verstanden, warum High Disk I / O das System so stark verlangsamt hat. Es ist seltsam für mich, weil ich davon ausgehen würde, dass die Verlangsamung nur die Prozesse beeinflusst, die von den Daten des Festplattenlaufwerks / optischen Laufwerks abhängen, aber die Verlangsamung wirkt sich auch auf die im RAM geladenen Daten aus. Ich beziehe mich hier auf iowait .
Warum wartet der Prozessor, anstatt andere Arbeiten auszuführen? Kann jemand diese Einschränkung erklären und warum sie im Linux-Kernel nicht behoben wurde? Gibt es einen Kernel, der dieses Problem nicht hat?
[ note ] In diesem Leistungsbereich wurden einige Fortschritte erzielt. Zum einen sind die späteren Kernel (2.6.37 in meinem Fall) viel reaktionsschneller.
linux
kernel
performance
io
Tshepang
quelle
quelle
Antworten:
Betriebssysteme verwenden virtuellen Speicher, sodass mehr Speicher verwendet werden kann, als physischer RAM zur Verfügung steht. Wenn der Kernel feststellt, dass eine physische Speicherseite besser genutzt werden kann, wird der Inhalt möglicherweise für die Speicherung auf der Festplatte "ausgelagert". Wenn beim Auslagern auf eine solche virtuelle Speicherseite zugegriffen wird, wird ein Seitenfehler generiert und von der Festplatte zurück in den Arbeitsspeicher verschoben.
Seitenfehler wirken sich nachteilig auf die Leistung aus, da die Festplattenlatenz in Millisekunden und die RAM-Latenz in Nanosekunden gemessen wird. (1 Millisekunde = eine Million Nanosekunden!)
Speicher wird nicht nur von Benutzerprozessen, sondern auch vom Kernel für Dinge wie das Zwischenspeichern von Dateisystemen verwendet. Während der Dateisystemaktivität speichert der Kernel die zuletzt verwendeten Daten im Cache. Die Annahme ist, dass es eine gute Chance gibt, dass die gleichen Daten in Kürze wieder verwendet werden. Daher sollte das Caching die E / A-Leistung verbessern.
Der für den Dateisystem-Cache verwendete physische Speicher kann nicht für Prozesse verwendet werden. Während der Dateisystemaktivität wird daher mehr Prozessspeicher ausgelagert, und Seitenfehler nehmen zu. Außerdem steht weniger Festplatten-E / A-Bandbreite zum Verschieben von Speicherseiten von und auf die Festplatte zur Verfügung. Infolgedessen können Prozesse zum Stillstand kommen.
quelle
Nach meinem Verständnis bedeutet IOwait, dass ein Prozess und nicht der Prozessor darauf wartet, dass IO verfügbar wird. Prozessoren haben viel mehr Geschwindigkeit als Festplatten, was bedeutet, dass mehr Code schneller fertig wird und dann die Festplatte gelesen werden muss. Wenn mehr als das Laufwerk gelesen werden muss, muss der Prozessor warten. Die Art und Weise, wie entschieden wird, wer auf die Festplatte lesen / schreiben darf, wird vom Block-Scheduler bestimmt, in den meisten Fällen jetzt CFQ. Wenn Sie CFQ verwenden und einen Prozess benötigen, der weniger Zeit für die gesamte E / A-Verarbeitung benötigt, um die Systemreaktivität zu erhöhen, können Sie dies verwenden
ionice -c3 <processid>
. Dies weist das System an, diesem Prozess nur dann E / A zu geben, wenn nichts anderes dies benötigt.Dies ist immer noch interessant und erklärt das iowait-Problem besser.
quelle