Seit der Kernel-Version 2.6.28 verwendet Linux eine LRU-Strategie ( Split Least Recent Used ) zum Ersetzen von Seiten. Seiten mit einer Dateisystemquelle, wie z. B. Programmtext oder gemeinsam genutzte Bibliotheken, gehören zum Dateicache. Seiten ohne Dateisystem-Backup werden als anonyme Seiten bezeichnet und bestehen aus Laufzeitdaten wie dem für Anwendungen usw. reservierten Stapelspeicher. In der Regel ist es billiger, Seiten, die zum Dateicache gehören, aus dem Speicher zu entfernen (da diese bei Bedarf einfach von der Festplatte zurückgelesen werden können). . Da anonyme Seiten keine Dateisystemunterstützung haben, müssen sie so lange im Speicher verbleiben, wie sie von einem Programm benötigt werden, es sei denn, es gibt Auslagerungsspeicher, in dem sie gespeichert werden können.
Die vm.swappiness
Option kommt in get_scan_count()
defined in ins Spiel mm/vmscan.c
. get_scan_count()
Legt fest, wie aggressiv die anonymen und Datei-LRU-Listen gescannt werden sollen, wenn nach Seiten gesucht wird, die entfernt werden sollen. Der Wert jedes Falls wird durch den gleitenden Durchschnitt der kürzlich gedrehten und kürzlich gescannten Verhältnisse bestimmt, wobei neuere Verweise mehr Gewicht als ältere haben, um der sich ändernden Arbeitslast des Systems Rechnung zu tragen.
Das vm.swappiness
ist ein Modifikator, der die Balance zwischen Auslagern Datei Cache - Seiten für anonyme Seiten ändert. vm.swappiness
ist der Prioritätswert für anonyme Seiten, der standardmäßig auf 60 festgelegt ist . Der Dateicache erhält den Prioritätswert 200, von dem der vm.swappiness
Modifikator abgezogen wird ( file_prio=200-anon_prio
). Dies bedeutet, dass die Prioritätsgewichte standardmäßig moderat zugunsten anonymer Seiten ( anon_prio=60
, file_prio=200-60=140
) stehen. Befindet sich das System jedoch in der Nähe eines Speichermangels , werden die anonymen und die Datei-LRU-Listen gleichermaßen gescannt, sofern sie nicht vm.swappiness
auf Null gesetzt sind.
Wenn vm.swappiness
auf 100 gesetzt ist, sind die Prioritäten gleich ( anon_prio=100
, file_prio=200-100=100
). Das Setzen vm.swappiness
auf Null verhindert, dass der Kernel anonyme Seiten zugunsten von Seiten aus dem Dateicache entfernt.