Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Fassen Sie das Wissen zum Linux-Festplatten-Cache zusammen

Fassen Sie das Wissen zum Linux-Festplatten-Cache zusammen

藏色散人
藏色散人nach vorne
2021-10-29 16:16:431889Durchsuche

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!

Vorwort

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ätsprinzip

Programmlokalitä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-Cache

Um 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 lesen

Wenn 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:

    Der Prozess ruft die Bibliotheksfunktion read auf, um eine Leseanforderung für Dateien zu initiieren
  • Der Kernel überprüft die Liste der geöffneten Dateien und ruft die vom Dateisystem bereitgestellte Leseschnittstelle auf
  • um den der Datei entsprechenden Inode zu finden und dann die spezifische zu lesende Seite zu berechnen
  • Suchen Sie den entsprechenden Seiten-Cache über den Inode 1) Wenn der Seiten-Cache-Knoten erreicht wird, wird der Dateiinhalt direkt zurückgegeben. 2) Wenn kein entsprechender Seitencache vorhanden ist, wird eine Seitenfehlerausnahme (Seitenfehler) generiert. Zu diesem Zeitpunkt erstellt das System einen neuen leeren Seitencache, liest den Dateiinhalt von der Festplatte, aktualisiert den Seitencache und wiederholt Schritt 4 wird gelesen Unabhängig davon, ob der Seitencache zunächst getroffen wird oder nicht, kommt er letztendlich direkt aus dem Seitencache.
  • Schreiben in den Seitencache
  • 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.

  • Da der Schreibvorgang nur die Änderungen in den Seitencache schreibt, wird der Prozess nicht blockiert, bis Festplatten-E/A auftritt. Wenn der Computer zu diesem Zeitpunkt abstürzt, werden die Änderungen im Schreibvorgang möglicherweise nicht auf der Festplatte vorgenommen. Daher ist es für einige Schreibvorgänge mit strengen Anforderungen, wie z. B. Datensysteme, erforderlich, fsync und andere Vorgänge aktiv aufzurufen, um Änderungen rechtzeitig auf der Festplatte zu synchronisieren. Der Lesevorgang ist anders. Der Lesevorgang wird normalerweise blockiert, bis der Prozess die Daten liest. Um die Verzögerung des Lesevorgangs zu verringern, verwendet das Linux-System weiterhin die „Pre-Read“-Technologie, d. h. beim Lesen von Daten von der Festplatte Der Kernel liest weitere Seiten in den Seitencache.

Writeback-Thread

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.

    Wenn ein Benutzerprozess die Systemaufrufe sync und fsync aufruft. Dies dient dazu, Benutzerprozessen eine Methode zum erzwungenen Zurückschreiben bereitzustellen, um Nutzungsszenarien mit strengen Rückschreibanforderungen gerecht zu werden.
  • Implementierung des Rückschreibthreads
  • 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.im. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen