Performance

So löschen Sie den Cache unter Linux

So löschen Sie den Cache unter Linux
Der Linux-Dateisystem-Cache (Page Cache) wird verwendet, um IO-Operationen zu beschleunigen.  Unter Umständen möchte ein Administrator oder Entwickler den Cache manuell löschen.  In diesem Artikel erklären wir, wie der Cache des Linux-Dateisystems funktioniert.  Dann zeigen wir, wie man die Cache-Nutzung überwacht und den Cache löscht.  Wir werden einige einfache Leistungsexperimente durchführen, um zu überprüfen, ob der Cache wie erwartet funktioniert und dass das Verfahren zum Leeren und Löschen des Caches auch wie erwartet funktioniert.

So funktioniert der Linux-Dateisystemcache

Der Kernel reserviert eine bestimmte Menge an Systemspeicher für das Caching der Dateisystem-Festplattenzugriffe, um die Gesamtleistung zu beschleunigen.  Der Cache unter Linux heißt der Seiten-Cache. Die Größe des Seitencaches ist konfigurierbar, wobei großzügige Standardeinstellungen aktiviert sind, um große Mengen von Festplattenblöcken zwischenzuspeichern.  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.  Das bedeutet, wenn Daten auf die Festplatte geschrieben werden, werden sie in den Speicher in den Cache geschrieben und im Cache als schmutzig markiert, bis sie mit der Festplatte synchronisiert werden.  Der Kernel verwaltet interne Datenstrukturen, um zu optimieren, welche Daten aus dem Cache entfernt werden sollen, wenn mehr Platz im Cache benötigt wird.

Während Linux-Lesesystemaufrufen überprüft der Kernel, ob die angeforderten Daten in Datenblöcken im Cache gespeichert sind, dies wäre ein erfolgreicher Cache-Treffer und die Daten werden aus dem Cache zurückgegeben, ohne dass eine E/A an das Plattensystem vorgenommen wird.  Bei einem Cache-Miss werden die Daten vom IO-System geholt und der Cache basierend auf den Caching-Richtlinien aktualisiert, da dieselben Daten wahrscheinlich erneut angefordert werden.

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

Verwenden des kostenlosen Befehls zum Anzeigen der Cache-Nutzung

Wir können den kostenlosen Befehl von der Befehlszeile aus verwenden, um den Systemspeicher und die dem Caching zugewiesene Speichermenge zu analysieren.  Siehe Befehl unten:

# frei -m

Was wir von der sehen kostenlos Der obige Befehl lautet, dass es 7 gibt.5 GB RAM auf diesem System.  Davon werden nur 209 MB genutzt und 6.5 MB sind kostenlos.  667 MB werden im Puffercache 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 zufälliger Daten und fügt dann 10 Kopien der Datei zu einer zusammen große_Datei.

# dd if=/dev/random of=/root/data_file count=1400000
# für i in 'Seq 1 10'; echo $i; cat data_file >> large_file; getan

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

# cat große_datei > /dev/null
# frei -m

Wir können sehen, dass die Puffer-Cache-Nutzung von 667 auf 1735 Megabyte gestiegen ist, was einem Anstieg der Nutzung des Puffer-Cache um etwa 1 Gigabyte entspricht.

Befehl Proc Sys VM Drop Caches

Der Linux-Kernel bietet eine Schnittstelle zum Löschen des Caches. Probieren wir diese Befehle aus und sehen Sie die Auswirkungen auf die kostenlose Einstellung.

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

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

Experimentelle Überprüfung, dass das Löschen von Caches funktioniert

Können wir eine Leistungsvalidierung durchführen, um den Cache zum Lesen der Datei zu verwenden?? Lassen Sie uns die Datei lesen und nach /dev/null zurückschreiben, um zu testen, wie lange es dauert, die Datei von der Festplatte zu lesen.  Wir werden es mit dem Zeit Befehl.  Wir führen diesen Befehl sofort aus, nachdem wir den Cache mit den obigen Befehlen geleert haben.

Es dauerte 8.4 Sekunden zum Lesen der Datei.  Lass es uns jetzt noch einmal lesen, dass die Datei im Dateisystem-Cache sein sollte und sehen, wie lange es jetzt dauert.

Boom!  Es dauerte nur .2 Sekunden im Vergleich zu 8.4 Sekunden zum Lesen, wenn die Datei nicht zwischengespeichert wurde.  Zur Überprüfung wiederholen wir dies noch einmal, indem wir zuerst den Cache leeren und dann die Datei 2 Mal lesen then.

Hat wie erwartet einwandfrei funktioniert.  8.5 Sekunden für den nicht zwischengespeicherten Lesevorgang und .2 Sekunden für den zwischengespeicherten Lesevorgang.

Fazit

Der Seiten-Cache wird auf Linux-Systemen automatisch aktiviert und macht IO transparent, indem er zuletzt verwendete Daten im Cache speichert.  Wenn Sie den Cache manuell löschen möchten, können Sie dies einfach tun, indem Sie einen echo-Befehl an das /proc-Dateisystem senden, der dem Kernel anzeigt, 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.

Nützliche Tools für Linux-Spieler
Wenn Sie gerne unter Linux spielen, haben Sie wahrscheinlich Apps und Dienstprogramme wie Wine, Lutris und OBS Studio verwendet, um das Spielerlebnis ...
HD-Remastered-Spiele für Linux, die noch nie zuvor eine Linux-Version hatten
Viele Spieleentwickler und -herausgeber entwickeln HD-Remaster alter Spiele, um die Lebensdauer des Franchise zu verlängern. Bitte Fans, die Kompatibi...
So verwenden Sie AutoKey zur Automatisierung von Linux-Spielen
AutoKey ist ein Desktop-Automatisierungsdienstprogramm für Linux und X11, programmiert in Python 3, GTK und Qt. Mithilfe der Skript- und MACRO-Funktio...