Seit Kernel 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.
Es ist ein weit verbreitetes Missverständnis, dass eine Swap-Partition Ihr System irgendwie verlangsamen würde. Das Fehlen einer Swap-Partition bedeutet nicht, dass der Kernel keine Seiten aus dem Speicher entfernt. Es bedeutet lediglich, dass der Kernel weniger Auswahlmöglichkeiten hinsichtlich der zu entfernenden Seiten hat. Die Menge des verfügbaren Swaps hat keinen Einfluss darauf, wie viel davon verwendet wird.
Linux kann das Fehlen eines Auslagerungsspeichers bewältigen, da die Kernel-Speicherkontoführungsrichtlinie standardmäßig Speicher überlastet . Der Nachteil ist, dass, wenn der physische Speicher erschöpft ist und der Kernel anonyme Seiten nicht auf die Festplatte auslagern kann, der OOM-Killer-Mechanismus ( Out-of-Memory -Killer) "Rogue" -Prozesse abbricht, um Speicher freizugeben andere Prozesse.
Die vm.swappiness
Option ist ein Modifikator, der das Gleichgewicht zwischen dem Auslagern von Dateicacheseiten zu Gunsten anonymer Seiten ändert. Der Dateicache erhält einen beliebigen Prioritätswert von 200, von dem der vm.swappiness
Modifikator abgezogen wird ( file_prio=200-vm.swappiness
). Anonyme Seiten beginnen standardmäßig mit 60 ( anon_prio=vm.swappiness
). Dies bedeutet, dass die Prioritätsgewichte standardmäßig moderat zugunsten anonymer Seiten ( anon_prio=60
, file_prio=200-60=140
) stehen. Das Verhalten ist mm/vmscan.c
im Kernel-Quelltextbaum definiert .
Bei einem vm.swappiness
von 100
wären die Prioritäten gleich ( file_prio=200-100=100
, anon_prio=100
). Dies ist für ein E / A-schweres System sinnvoll, wenn nicht gewünscht wird, dass Seiten aus dem Dateicache zugunsten anonymer Seiten entfernt werden.
Umgekehrt verhindert das Setzen von vm.swappiness
to 0
, dass der Kernel anonyme Seiten zugunsten von Seiten aus dem Dateicache entfernt. Dies kann nützlich sein, wenn Programme den Großteil ihres Cachings selbst durchführen, was bei einigen Datenbanken der Fall sein kann. In Desktop-Systemen kann dies die Interaktivität verbessern, der Nachteil ist jedoch, dass die E / A-Leistung wahrscheinlich beeinträchtigt wird.
Der Standardwert wurde höchstwahrscheinlich als ungefährer Mittelweg zwischen diesen beiden Extremen gewählt. Wie bei allen Leistungsparametern vm.swappiness
sollte die Anpassung auf Benchmark-Daten basieren, die mit der tatsächlichen Arbeitsbelastung vergleichbar sind, und nicht nur auf einem Bauchgefühl.