Linux-Cache-Räumungen

8

Wenn ich mir anschaue, wie sich der VFS-Cache auf meinem Linux-Computer verhält, kann ich feststellen, dass selbst im Leerlauf (crond und die meisten anderen Daemons gestoppt, Schnittstellen heruntergefahren) die Menge an freiem Speicher allmählich zunimmt, was bedeutet, dass Elemente aus dem Cache entfernt werden.

Ich habe viel gegoogelt, kann aber keinen Hinweis darauf finden, wie dies gesteuert wird (es sei denn, es ist ein Nebeneffekt von vm_swappiness). Kann mich jemand auf den richtigen Weg bringen, um zu verstehen, warum Elemente aus dem Cache entfernt werden, wenn keine neue Speicherzuweisung erforderlich ist?

symcbean
quelle
«Dies bedeutet, dass Elemente aus dem Cache entfernt werden» - nun, in diesem Fall vmstatwürde sich die Größe der Caches erhöhen, - sind sie wirklich?
Poige
sicher abnehmend. Ja, sie sind (abnehmend)
Symcbean
Sie sagen also, dass das freie Mem zunimmt und gleichzeitig die Cache- / Buf-Größe abnimmt, stimmt das?
Poige

Antworten:

1

Swappiness wirkt sich nur darauf aus, ob der zugewiesene Anwendungsspeicher ausgelagert wird, um Platz für den Cache zu schaffen. vfs_cache_pressure ist das System, das steuert, was Sie sehen.

Bratchley
quelle
1
Nein - vfs_cache_pressure steuert das Verhältnis von Metadaten zu Seitencache-Aufbewahrung (zumindest gemäß den von mir gelesenen Dokumenten und den von mir durchgeführten Experimenten)
symcbean
1
Meinetwegen. Ich habe ein bisschen mehr recherchiert und soweit ich sehen kann, wird alles in eine LRU-Bestellliste eingeordnet und nur dann betrachtet, wenn eine bestimmte Schwelle (künstlich oder physisch) erreicht oder überschritten wird. Angesichts dessen würde ich annehmen, dass noch etwas passiert (wie ein Kernel-Thread, der aufwacht oder so). Wenn es für Sie sehr wichtig ist, dies herauszufinden, scheint es ein vorab geschriebenes Systemtap-Skript namens "mmreclaim.stp" zu geben , das die Rückforderungen des Speichermanagers verfolgt. Ich würde auch sicherstellen, dass es nicht mit "sar-A" getauscht wird.
Bratchley
1

Linux löscht die Daten aus dem Seitencache mithilfe eines Prozesses namens pdflush

pdflush wird durch Parameter aus / proc / sys / vm gesteuert

#/proc/sys/vm/dirty_expire_centisecs
The hundredth of the second after which data will be considered to be expired from the page cache and will be written at the next opportunity.

#/proc/sys/vm/dirty_writeback_centisecs`    
The hundredth of a second after which the pdflush wakes up to write data to disk.

#/proc/sys/vm/vfs_cache_pressure`    
This will reclaim dentries and inodes which are also part of the cache.

Weitere Informationen finden Sie in den folgenden Threads:

Der pdflush-Daemon
Theorie des Betriebs und der Optimierung für schreibintensive Lasten des
Linux-Cache-Speichers

Joe
quelle
Vielen Dank, Joe. Die ersten beiden Optionen beziehen sich jedoch speziell auf Daten, die in das Dateisystem zurückgeschrieben werden müssen (dh auf den Schreibpuffer), nicht auf Daten, die gelesen und nicht geändert wurden (Lesepuffer). Vfs_cache_pressure steuert die Einstellung zum Entfernen von Dateimetadaten relativ zum Dateiinhalt.
Symcbean
@symcbean Du bist richtig. Die Antwort spricht mehr über Schreibcache. Der Lesecache wird basierend auf der LRU gelöscht. Linux verwendet jedoch eine Zwei-Listen-Strategie, auf deren Grundlage der Lesecache geleert wird. Weitere Informationen zu Two-List Stragety und zum Löschen des Lesecaches durch Linux finden Sie hier . Lassen Sie mich wissen, ob dies sinnvoll ist. In Ihrem Fall gehe ich davon aus, dass diese Lese-Caches nach dem Stoppen aller Prozesse in die inaktive Liste aufgenommen und gelöscht werden
Joe,
danke, schöner Artikel. Irgendeine Idee, aus welchem ​​Buch das Kapitel stammt? Obwohl erklärt wird, wie eine bestimmte Seite für die Räumung priorisiert wird, wird nicht wirklich erklärt, warum Seiten geräumt werden, wenn kein offensichtlicher Speicherbedarf besteht. Was steuert den Prozess, "den Cache zu verkleinern, um mehr RAM für andere Zwecke verfügbar zu machen"? Womit ersetzt es diese?
Symcbean
@symcbean Die Cache-Räumung funktioniert sofort, wenn Speicherbedarf besteht. Es ist jedoch nicht sinnvoll, es im Cache zu haben, wenn niemand es aktiv verwendet. Dort werden durch die aktiven Seiten inaktive Seiten und schließlich geräumt. Ich gehe davon aus, dass Ihre Frage von dem Punkt ausgeht, dass die Räumung nur dann erfolgen soll, wenn Bedarf an Gedächtnis besteht. Das Linux löscht jede inaktive Seite, sobald sie verfügbar ist. Wie [im Artikel erwähnt] [ jothirams.com/linux-cached-memory/], wenn alles aktiv ist, wird Ihnen der Speicher ausgehen und OOM wird aufgerufen.
Joe