Ich habe gerade ein paar Sachen über Swappiness unter Linux gelesen. Ich verstehe nicht, warum der Standard auf 60 eingestellt ist.
Meiner Meinung nach sollte dieser Parameter auf 10 gesetzt werden, um den Swap zu reduzieren. Swap befindet sich auf meiner Festplatte und ist daher viel langsamer als mein Gedächtnis.
Warum haben sie den Kernel so konfiguriert?
Antworten:
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 dervm.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 istmm/vmscan.c
im Kernel-Quelltextbaum definiert .Bei einem
vm.swappiness
von100
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
to0
, 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.quelle
Das Problem ist, dass es keinen Standardwert gibt, der allen Anforderungen gerecht wird. Das Festlegen der Austauschoption auf 10 ist möglicherweise eine geeignete Einstellung für Desktops, der Standardwert von 60 ist jedoch möglicherweise besser für Server geeignet. Mit anderen Worten, die Austauschbarkeit muss entsprechend dem Anwendungsfall angepasst werden - Desktop vs. Server, Anwendungstyp und so weiter.
Darüber hinaus verwendet der Linux-Kernel Speicher für den Festplatten-Cache, da sonst der RAM nicht verwendet würde und dies nicht effizient und beabsichtigt ist. Wenn sich Festplattendaten im Cache befinden, werden sie wahrscheinlich aus dem Speicher abgerufen, wenn wieder dieselben Daten benötigt werden. Das Abrufen der Daten von dort ist viel schneller als das erneute Abrufen von der Festplatte. Und die Option swappiness ist ein Mechanismus, mit dem der Linux-Kernel das Auslagern auf die Festplatte gegenüber dem Verkleinern des Festplatten-Cache bevorzugt. Sollte es eher ältere Daten aus dem Cache entfernen oder sollten einige Programmseiten ausgetauscht werden?
Dieser Artikel kann auch etwas Licht in das Thema bringen. Insbesondere, wie die Swap-Tendenz geschätzt wird.
quelle
Hinzufügen weiterer Details zu den Antworten oben.
Da wir immer mehr VMs verwenden, kann ein Linux-Host ein VM in einer dieser Cloud-Umgebungen sein. In beiden Beispielen 1 und 2 haben wir eine gute Vorstellung davon, welche Anwendungen ausgeführt werden und wie viel RAM sie verbrauchen. In 3 nicht so sehr
Eine Private Cloud mit hoher Leistung (für die die meisten Banken Millionen bezahlen würden), bei der die Festplatte von einem sehr teuren Speicherarray mit SEHR guter E / A-Leistung bereitgestellt wird. Ein Teil dieses Speichers befindet sich möglicherweise im RAM (im Festplattenarray), der von SSD-Festplatten und normalen Festplatten mit Spindeln gesichert wird. In dieser Situation ist der Datenträger, den die VM sieht, möglicherweise nur wenig langsamer als der Arbeitsspeicher, auf den sie zugreifen kann. Für einen einzelnen VM gibt es keinen großen Unterschied zwischen Swap und RAM.
Das gleiche wie Beispiel 1, aber anstelle eines einzelnen VMs haben Sie Hunderte, Tausende oder mehr. In dieser Situation stellen wir fest, dass Server-RAM (Hypervisor-RAM) billig und reichlich ist, während Speicher-RAM (relativ gesehen) teuer ist. Wenn wir die RAM-Anforderungen zwischen Hypervisor-RAM und SWAP aufteilen, die von unserem sehr teuren Speicherarray bereitgestellt werden, stellen wir fest, dass wir schnell den gesamten RAM im Speicherarray verwenden. Die Blöcke werden dann von den SSDs und schließlich von den Spindeln bedient. Plötzlich wird alles sehr langsam. In diesem Fall möchten wir der VM wahrscheinlich viel RAM (vom Hypervisor) zuweisen und swappiness auf 0 setzen (nur Swap, um Speicherprobleme zu vermeiden), da sich der kumulative Effekt all dieser VMs auf die Leistung von auswirkt der Speicher,
quelle