Warum verringert High Disk I / O die Systemreaktivität / -leistung?


19

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.


Hat Xeno nicht genau erklärt, wie dies im Linux-Kernel behoben wurde, als Sie das letzte Mal gefragt haben?
Michael Mrozek

2
Angesichts der Änderungen ist es meines Erachtens beabsichtigt, die vorherige Frage über die Fortschritte bei der Behebung des Problems zu stellen, während sich diese Frage mit der Frage befasst, warum das Problem besteht.
Steven D

@mic Steven ist richtig. Wir hatten eine lange Diskussion darüber, was ich mit der vorherigen Frage gemeint habe. xenos antwort war so gut, dass ich die frage bearbeitet und die ursprüngliche frage hier erneut gestellt habe.
Tshepang

Ich verstehe, aber Ihre Frage scheint der anderen zu widersprechen; Hier sagen Sie: "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?", aber Xenos Antwort beginnt mit "Ich denke größtenteils wurde gelöst."
Michael Mrozek

@mic Nicht wirklich. Der Kernel macht immer noch iowait , was bedeutet , dass er noch wartet. Ich betrachte die Antwort von Xeno als besseres Systemverhalten . Und dem stimme ich zu, wie ich auf der Frage bemerkt habe.
Tshepang

Antworten:


9

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.


Ich weiß, das ist so alt wie Dreck, aber abhängig davon, wie der Dreck hereinkommt, können große Mengen an E / A dazu führen, dass viele Interrupts generiert werden und die daraus resultierenden Kontextwechsel CPU-Zeit verschwenden.
Bratchley,

5

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.