Articles

So löschen Sie den Cache unter Linux

Der Linux-Dateisystem-Cache (Seiten-Cache) wird verwendet, um E / A-Vorgänge zu beschleunigen. Unter bestimmten Umständen möchte ein Administrator oder Entwickler den Cache manuell löschen. In diesem Artikel erklären wir, wie der Linux-Dateisystemcache funktioniert. Anschließend zeigen wir Ihnen, wie Sie die Cache-Nutzung überwachen und den Cache leeren. Wir werden einige einfache Leistungsexperimente durchführen, um zu überprüfen, ob der Cache wie erwartet funktioniert und ob die Prozedur zum Leeren und Löschen des Caches auch wie erwartet funktioniert.

Funktionsweise des Linux-Dateisystemcaches

Der Kernel reserviert eine bestimmte Menge an Systemspeicher für das Zwischenspeichern der Dateisystemfestplattenzugriffe, um die Gesamtleistung zu beschleunigen. Der Cache in Linux wird als Seitencache bezeichnet. Die Größe des Seitencaches ist konfigurierbar, wobei großzügige Standardwerte für den Cache großer Mengen von Festplattenblöcken aktiviert sind. Die maximale Größe des Caches und die Richtlinien, wann Daten aus dem Cache entfernt werden sollen, sind mit Kernel-Parametern einstellbar. Der Linux-Cache-Ansatz wird als Write-Back-Cache bezeichnet. Dies bedeutet, dass Daten, die auf die Festplatte geschrieben werden, in den Cache geschrieben und im Cache als schmutzig markiert werden, bis sie auf die Festplatte synchronisiert werden. Der Kernel verwaltet interne Datenstrukturen, um zu optimieren, welche Daten aus dem Cache entfernt werden sollen, wenn mehr Speicherplatz im Cache benötigt wird.

Während Linux Read-Systemaufrufen prüft der Kernel, ob die angeforderten Daten in Datenblöcken im Cache gespeichert sind, was ein erfolgreicher Cache-Treffer wäre, und die Daten werden aus dem Cache zurückgegeben, ohne dass dies der Fall ist IO zum Festplattensystem. Bei einem Cache-Fehler werden die Daten vom IO-System abgerufen und der Cache basierend auf den Caching-Richtlinien aktualisiert, da dieselben Daten wahrscheinlich erneut angefordert werden.

Wenn bestimmte Schwellenwerte für die Speichernutzung erreicht sind, schreiben Hintergrundaufgaben schmutzige Daten auf die Festplatte, um sicherzustellen, dass der Speichercache geleert wird. Diese können sich auf die Leistung von speicher- und CPU-intensiven Anwendungen auswirken und erfordern eine Optimierung durch Administratoren und / oder Entwickler.

Verwenden des Befehls Free zum Anzeigen der Cache-Auslastung

Wir können den Befehl free von der Befehlszeile aus verwenden, um den Systemspeicher und die für das Caching zugewiesene Speichermenge zu analysieren. Siehe Befehl unten:

# free -m

Was wir aus dem obigen Befehl free sehen, ist, dass auf diesem System 7,5 GB RAM vorhanden sind. Davon werden nur 209 MB verwendet und 6,5 MB sind frei. Im Puffercache werden 667 MB verwendet. Versuchen wir nun, diese Zahl zu erhöhen, indem wir einen Befehl ausführen, um eine Datei von 1 Gigabyte zu generieren und die Datei zu lesen. Der folgende Befehl generiert ungefähr 100 MB Zufallsdaten und hängt dann 10 Kopien der Datei in einer large_file an.

# dd if=/dev/random of=/root/data_file count=1400000
# für i in `seq 1 10`; tun echo $i; cat data_file >> large_file; fertig

Jetzt werden wir sicherstellen, dass Sie diese 1-Gig-Datei lesen und dann den Befehl free erneut überprüfen:

# cat large_file > /dev/null
# free -m

Wir können sehen, dass die Nutzung des Puffercaches von 667 auf 1735 Megabyte pro Jahr gestiegen ist 1 Gigabyte Erhöhung der Auslastung des Puffercaches.

Befehl Proc Sys VM Drop Caches

Der Linux-Kernel bietet eine Schnittstelle zum Löschen des Caches Lassen Sie uns diese Befehle ausprobieren und die Auswirkungen auf die freie Einstellung sehen.

# echo 1 > /proc/sys/vm/drop_caches
# free -m

Wir können oben sehen, dass der Großteil der Puffercache-Zuweisung mit diesem Befehl freigegeben wurde.

Experimentelle Überprüfung, dass Drop-Caches funktionieren

Können wir eine Leistungsüberprüfung der Verwendung des Caches zum Lesen der Datei durchführen? Lesen wir die Datei und schreiben sie zurück nach / dev / null, um zu testen, wie lange es dauert, die Datei von der Festplatte zu lesen. Wir werden es mit dem Zeitbefehl zeitlich festlegen. Wir führen diesen Befehl sofort aus, nachdem wir den Cache mit den obigen Befehlen gelöscht haben.

Das Lesen der Datei dauerte 8,4 Sekunden. Lassen Sie es uns jetzt noch einmal lesen, dass sich die Datei im Dateisystemcache befinden sollte, und sehen, wie lange es jetzt dauert.

Boom! Es dauerte nur .2 Sekunden im Vergleich zu 8,4 Sekunden, um es zu lesen, wenn die Datei nicht zwischengespeichert wurde. Um dies zu überprüfen, wiederholen wir dies erneut, indem wir zuerst den Cache leeren und dann die Datei 2 Mal lesen.

Es hat wie erwartet einwandfrei funktioniert. 8.5 sekunden für das nicht zwischengespeicherte Lesen und .2 sekunden für den zwischengespeicherten Lesevorgang.

Fazit

Der Seitencache wird auf Linux-Systemen automatisch aktiviert und beschleunigt E / A transparent, indem kürzlich verwendete Daten im Cache gespeichert werden. Wenn Sie den Cache manuell löschen möchten, können Sie dies einfach tun, indem Sie einen Echo-Befehl an das Dateisystem / proc senden, der dem Kernel angibt, den Cache zu löschen und den für den Cache verwendeten Speicher freizugeben. Die Anweisungen zum Ausführen des Befehls wurden oben in diesem Artikel gezeigt, und die experimentelle Validierung des Cache-Verhaltens vor und nach dem Leeren wurde ebenfalls gezeigt.