In der folgenden Kolumne wird das relevante Wissen über den Linux-Festplatten-Cache aus der Kolumne „Linux-System-Tutorial“ vorgestellt und zusammengefasst. Ich hoffe, dass es für Freunde in Not hilfreich ist!
Ich bin kürzlich auf einen festplattenbezogenen Online-Fehler gestoßen, daher möchte ich das Wissen über den Linux-Festplatten-Cache zusammenfassen, über das ich vorher nicht viel wusste.
Im Allgemeinen gibt es wahrscheinlich zwei Gründe für die Entstehung des Festplatten-Cache: Der erste ist, dass die Zugriffsgeschwindigkeit auf die Festplatte viel langsamer ist als die Zugriffsgeschwindigkeit auf den Speicher. Die Zugriffsgeschwindigkeit kann durch Zwischenspeichern des Festplatteninhalts verbessert werden der Speicher; der zweite ist, dass die Zugriffsgeschwindigkeit auf dem lokalen Teil des Programms basiert. Sobald auf die Daten zugegriffen wurde, ist es wahrscheinlich, dass in kurzer Zeit erneut darauf zugegriffen wird, sodass der Festplatteninhalt zwischengespeichert wird im Speicher kann die Ausführungsgeschwindigkeit des Programms verbessern.
LokalitätsprinzipProgrammlokalitätsprinzip: Ein Programm weist bei der Ausführung eine Lokalität auf, dh innerhalb eines bestimmten Zeitraums ist die Ausführung des gesamten Programms auf einen bestimmten Teil des Programms beschränkt. Dementsprechend ist auch der Speicherplatz, auf den durch die Ausführung zugegriffen wird, auf einen bestimmten Speicherbereich beschränkt. Insbesondere hat die Lokalität normalerweise zwei Formen: zeitliche Lokalität und räumliche Lokalität.
Zeitliche Lokalität: Auf einen Speicherort, auf den einmal verwiesen wird, wird in Zukunft mehrmals verwiesen.
Räumliche Lokalität: Wenn auf einen Speicherort verwiesen wird, dann werden in Zukunft auch die Orte in seiner Nähe referenziert.
Seiten-CacheUm E/A-Vorgänge auf der Festplatte zu reduzieren, speichert das Linux-System den Inhalt der geöffneten Festplatte zwischen, und der Cache-Speicherort ist der physische Speicher, wodurch der Zugriff auf die Festplatte in einen Zugriff auf die Festplatte umgewandelt wird Verbessern Sie effektiv die Geschwindigkeit des Programms. Die Caching-Methode von Linux verwendet physischen Speicher, um den Inhalt auf der Festplatte zwischenzuspeichern, was als Seiten-Cache bezeichnet wird.
Der Seitencache besteht aus physischen Seiten im Speicher und sein Inhalt entspricht physischen Blöcken auf der Festplatte. Die Größe des Seitencaches wird dynamisch an die Größe des freien Speichers des Systems angepasst. Er kann die Größe durch die Belegung von Speicher erweitern und sich auch selbst verkleinern, um den Speichernutzungsdruck zu verringern.
Vor dem Aufkommen des virtuellen Speichermechanismus verwendete das Betriebssystem die Block-Cache-Reihe. Nach dem Aufkommen des virtuellen Speichers verwaltete das Betriebssystem jedoch die E/A mit größerer Granularität, sodass der Seiten-Cache-Mechanismus übernommen wurde ein seitenbasierter, dateiorientierter Cache-Mechanismus.
Seitencache lesenWenn das Linux-System eine Datei liest, liest es zuerst den Dateiinhalt aus dem Seitencache. Wenn der Seitencache nicht vorhanden ist, liest das System zuerst den Dateiinhalt von der Festplatte und Aktualisieren Sie es im Seitencache, lesen Sie dann den Dateiinhalt aus dem Seitencache und kehren Sie zurück.
Der allgemeine Prozess ist wie folgt:
Aufgrund der Existenz des Seitencaches wird beim Aufrufen des Prozesses „Schreiben“ die Aktualisierung der Datei nur in den Seitencache der Datei geschrieben, und dann wird die entsprechende Seite als markiert schmutzig. Der Prozess ist beendet. Der Linux-Kernel schreibt in regelmäßigen Abständen fehlerhafte Seiten zurück auf die Festplatte und löscht dann das Dirty-Flag.
Das Zurückschreiben des Seitencaches wird durch einen separaten Thread im Kernel abgeschlossen. Der Writeback-Thread schreibt in den folgenden drei Situationen zurück:
Wenn der freie Speicher unter dem Schwellenwert liegt. Wenn der freie Speicher nicht ausreicht, muss ein Teil des Caches freigegeben werden. Da nur nicht verschmutzte Seiten freigegeben werden können, müssen alle verschmutzten Seiten auf die Festplatte zurückgeschrieben werden, um sie in saubere Seiten umzuwandeln, die recycelt werden können.
Wenn die Verarbeitungszeit schmutziger Seiten im Speicher den Schwellenwert überschreitet. Dadurch soll sichergestellt werden, dass fehlerhafte Seiten nicht auf unbestimmte Zeit im Speicher verbleiben, wodurch das Risiko eines Datenverlusts verringert wird.
Name | Version | Beschreibung |
---|---|---|
bdflush | Vor Version 2.6 | bdflush-Kernel-Thread wird im Hintergrund ausgeführt, und es gibt nur einen bdflush-Thread im System einen bestimmten Schwellenwert, bdflush Der Thread wird aktiviert. kupdated wird regelmäßig ausgeführt und schreibt fehlerhafte Seiten zurück. Es gibt jedoch nur einen Bdflush-Thread im gesamten System. Wenn die Systemrückschreibaufgabe umfangreich ist, kann der Bdflush-Thread auf den E/A-Vorgängen einer bestimmten Festplatte blockiert sein, was dazu führt, dass die E/A-Rückschreibvorgänge anderer Festplatten nicht ausgeführt werden rechtzeitig ausgeführt. |
pdflush | Eingeführt in Version 2.6 | pdflush Die Anzahl der Threads ist dynamisch und hängt von der I/O-Last des Systems ab. Es handelt sich um eine globale Aufgabe für alle Festplatten im System. Da pdflush jedoch auf alle Festplatten ausgerichtet ist, ist es möglich, dass mehrere pdflush-Threads alle auf einer überlasteten Festplatte blockiert werden, was auch dazu führt, dass das I/O-Writeback anderer Festplatten nicht rechtzeitig ausgeführt wird. |
Flusher-Thread | Eingeführt nach Version 2.6.32 | Die Anzahl der Flusher-Threads ist nicht eindeutig und der Flusher-Thread gilt nicht für alle Festplatten, aber jeder Flusher-Thread entspricht einer Festplatte |
Seite Cache Das Recycling
Die Ersetzungslogik des Seitencaches in Linux ist eine modifizierte LRU-Implementierung, auch bekannt als Double-Chain-Strategie. Im Gegensatz zu früher verwaltet Linux nicht mehr eine verknüpfte LRU-Liste, sondern zwei verknüpfte Listen: eine aktive verknüpfte Liste und eine inaktive verknüpfte Liste. Seiten auf der aktiven Liste gelten als „heiß“ und werden nicht ausgetauscht, während Seiten auf der inaktiven Liste ausgetauscht werden können. Seiten in der aktiven Liste müssen sich beim Zugriff in der inaktiven Liste befinden. Beide verknüpften Listen werden durch Pseudo-LRU-Regeln verwaltet: Seiten werden vom Ende hinzugefügt und vom Kopf entfernt, genau wie bei einer Warteschlange. Die beiden verknüpften Listen müssen ausgeglichen werden. Wenn die aktive verknüpfte Liste zu groß wird und die inaktive verknüpfte Liste überschreitet, wird die Kopfseite der aktiven verknüpften Liste zurück in die inaktive verknüpfte Liste verschoben, wo sie erneut recycelt werden kann. Die Strategie der doppelt verknüpften Liste löst das Dilemma nur eines Zugriffs im herkömmlichen LRU-Algorithmus. Und es ist einfacher, Pseudo-LRU-Semantik zu implementieren. Diese doppelt verknüpfte Listenmethode wird auch LRU/2 genannt. Die gebräuchlichste Variante sind n-verknüpfte Listen, daher wird sie LRU/n genannt.
[Empfohlene Studie: „Linux-Video-Tutorial“]
Zusammenfassung
Bei dem diesmal aufgetretenen Online-Fehler liegt die Hauptursache darin, dass eine temporäre Datei zum Zwischenspeichern in der Geschäftslogik und eine temporäre Datei verwendet wird Wird erstellt Wenn es in kurzer Zeit gelöscht wird, werden die Vorgänge für diese Datei zu diesem Zeitpunkt im Seitencache ausgeführt und nicht tatsächlich auf die Festplatte zurückgeschrieben. Wenn ein Programm auf ein Problem stößt und seine Reaktion verlangsamt, verlängert sich die Überlebenszeit der temporären Datei, was dazu führen kann, dass sie auf die Festplatte zurückgeschrieben wird, was zu einer übermäßigen Belastung der Festplatte führt und Auswirkungen auf das gesamte System hat.
Das obige ist der detaillierte Inhalt vonFassen Sie das Wissen zum Linux-Festplatten-Cache zusammen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!