Warum werden Systeme langsam, wenn massive Schreibvorgänge auf die Festplatte ausgeführt werden?

8

Ich möchte wissen, warum Systeme beim Schreiben von Massendaten auf die Festplatte langsam werden.

Ich denke, damit das System langsam wird, sollte es ein Problem mit der CPU geben. Das Schreiben ist jedoch nur an die E / A gebunden.

Treten beim Schreiben von Daten Hardware-Interrupts auf? Wenn ja, kann es an den Interrupts liegen, dass die CPU immer den Kontext wechselt.

kuafu
quelle
1
Ich denke, fast alle Anwendungen werden Daten von der Festplatte lesen / schreiben, nicht wahr?
Jilen
1
Möglicherweise wird es in den Speicher verschoben und daher verlangsamt, wenn die Festplatte ansonsten stark beansprucht wird. Ein Systemload-Plugin kann Ihnen sagen, ob Sie Swap grafisch verwenden. Verwenden Sie für die Befehlszeile free.
Benutzer unbekannt
1
Wenn Sie sysstat konfiguriert haben / ausführen, können Sie in den SAR-Berichten nach den langsamen Zeiten suchen und sehen, was um diese Zeit geschieht (Kontextwechsel, Festplatten-E / A, CPU-Auslastung, Netzwerkverkehr usw.).
Bratchley
Sehen Sie sich auch Ihre $PATHEinstellungen an, wenn Sie die Befehlsvervollständigung verwenden oder viele Rechtschreibfehler machen. Das Durchsuchen vieler Verzeichnisse, insbesondere solcher mit vielen Verzeichniseinträgen, kann einige Zeit in Anspruch nehmen, was sich bei knappen Ressourcen bemerkbar macht.
MattBianco

Antworten:

3

Der Hauptgrund dafür ist das Übliche: E / A ist viel langsamer als CPU / RAM. Selbst wenn die Prozesse, die E / A-Vorgänge ausführen, DMA verwenden (wodurch die CPU entlastet wird), müssen sie wahrscheinlich irgendwann auf den Abschluss ihrer Anforderungen warten.

Im üblichsten Fall einer Festplatte fügen Sie einfach mehrere Anwendungen hinzu, die versuchen, auf Dateien zuzugreifen, die über das Laufwerk verteilt sind, und Sie können sich einen Kaffee (Tee, was auch immer) zubereiten. Mit SSDs wird die Situation besser, aber auch mit einer SSD, deren Durchsatz auf SATA in Hunderten von MB / s gemessen wird (im Vergleich zu zehn MB / s einer Spin-Plate-Festplatte) und deren Suchzeiten wirklich vernachlässigbar sind (im Vergleich zu Millisekunden für) eine Spin-Platte) - kann zu einem Engpass werden.

Das Problem, wie ich es verstehe, liegt nicht nur in den Datenübertragungen selbst, sondern auch im notwendigen Overhead - E / A wird vom Kernel gesteuert, aber nur selten ohne Benutzerbereich. Daher kann es viele Kontextwechsel geben, nur wenn die Anwendungen auf E / A warten und prüfen, ob etwas passiert (hängt natürlich von der Implementierung ab). Im Fall von Datenträgerübertragungen können durchaus mehrere Kernel-Threads um Ressourcen konkurrieren oder beschäftigt sein (was manchmal eine geeignete Strategie ist). Denken Sie daran, dass zum Kopieren von Daten von einer Partition auf eine andere ein modernes Dateisystem erforderlich ist, um: herauszufinden, wo sich die Quelldaten befinden, sie zu lesen, Speicherplatz im Zieldateisystem zuzuweisen, Metadaten zu schreiben, Daten zu schreiben und bis zum Ende zu wiederholen.

Und wenn Ihr System irgendwann mit dem Austausch beginnt (was normalerweise eine höhere Priorität als normale E / A hat), ist die Katastrophe abgeschlossen.

EDIT : Nach einem Gespräch mit einigen Linux-Kernel-Entwicklern wurde die Situation etwas klarer. Das Hauptproblem ist der E / A-Planer, der nicht genau weiß, welche E / A priorisiert werden sollen. Daher teilen alle Benutzereingaben und folgenden grafischen Ausgaben die Warteschlange mit der Festplatten- / Netzwerkaktivität. Infolgedessen kann es auch vorkommen, dass zwischengespeicherte Prozessdaten aus dem Seitencache (z. B. geladene Bibliotheken) weggeworfen werden, wenn festgestellt wird, dass der Seitencache auf anderen E / A effektiver verwendet werden kann. Das bedeutet natürlich, dass der Code, sobald er erneut ausgeführt werden muss, erneut abgerufen werden muss - von der Festplatte, die möglicherweise bereits stark ausgelastet ist.

Was den Linux-Kernel betrifft, wurden viele dieser Probleme kürzlich behoben (das Problem ist bekannt). Sagen wir also, 4.4.x oder 4.5.x sollten sich besser verhalten als früher, und Probleme sollten gemeldet werden (im Allgemeinen) Die Kernel-Leute sind glücklich, wenn jemand durch Fehlerberichterstattung und -tests helfen möchte.

Peterph
quelle
Könnten Sie etwas näher erläutern, warum das Gesamtsystem nachlässt, wenn E / A stark ausgelastet ist? Zum Beispiel sehe ich keine Verbindung zwischen Windows Manager und E / A - offensichtlich führt WM keine E / A aus. Warum sollte es also verzögern (zumindest, wenn es nicht ausgetauscht wird) ?
Hi-Angel
WM kann tatsächlich eine Menge E / A über X Server / Wayland Compositor ausführen (nicht so viel wie das Kopieren von vier Datenströmen zwischen zwei Festplatten, aber es muss nicht völlig vernachlässigbar sein - was wahrscheinlich einer der Gründe zu sein awesomescheint ein bisschen besser arbeiten als kwinin diesem Sinne).
Peterph
Aber welche Art von E / A macht es? Liegt es einfach daran, sich bei xsession-errors/ anzumelden Xorg.ₙ.log? Wird die Protokollierung nicht einfach gepuffert, ohne die WM-Arbeit zu unterbrechen? Noch etwas? UPD: Ich habe mir gerade die /proc/AwesomePID/fd- die einzige Datei angesehen, die meine WM geöffnet hat, ist xsession-errors. Alles andere ist nicht wirklich ein Datei - Steckdosen, /dev/null, /proc/stat...
Hallo-Angel
1
Aber Sie haben gesagt, dass WM tatsächlich eine Menge E / A über X Server / Wayland Compositor ausführen kann . Aber was auch immer, warum denkst du, dass es nicht genug CPU bekommt? Wenn es passiert, ist die CPU normalerweise ziemlich frei - ich kann die Last im CPU-Widget auf meinem Panel sehen, und das Entpacken eines Archivs nimmt nicht viel davon in Anspruch.
Hi-Angel
1
@ Hi-Angel Check Update Antwort, ob es die Dinge ein bisschen klärt.
Peterph
2

Ich habe die Erfahrung gemacht, dass E / A-Aktivitäten allein ein System nicht verlangsamen. Dieser Effekt tritt auf, wenn auch andere Aufgaben E / A benötigen. Die Situation wird wirklich schlimm, wenn das System ausgetauscht wird (und dazu gezwungen wird) und Sie dann eine hohe E / A-Last verursachen.

Sie können die Auswirkung schwerer E / A-Aufgaben durch beeinflussen ionice. Wenn Sie ihnen idlePriorität einräumen, kann sich die Latenz für andere Aufgaben zwar erhöhen, jedoch nicht über das Minimum hinaus. Die E / A-Aufgabe wird sofort unterbrochen, wenn eine andere (nicht inaktive) Aufgabe E / A ausführen muss. Wenn Sie einen Scheduler verwenden, der diese Einstellungen unterstützt.

Siehe Auswählen eines Linux-E / A-Schedulers

Hauke ​​Laging
quelle
1
Meine Erfahrung ist das Gegenteil: Das heißt, ich kann anfangen, ein großes Archiv zu entpacken - was zu einer E / A-Belastung führt - und in diesem Moment versuche, zu einem anderen «Desktop» zu wechseln. Ich spüre Verzögerungen beim Umschalten. Wie ist Window Manager überhaupt für IO relevant? Und ja, ich habe einen freien RAM, der also nicht ausgetauscht wird (und selbst wenn ich es nicht getan habe - würde WM in der letzten Runde nicht ausgetauscht werden?) . FWIW, ich benutze ein leichtes Awesome WM und früher mit kwin waren die Dinge noch schlimmer.
Hi-Angel