Warum ist swappiness standardmäßig auf 60 eingestellt?

109

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?

Hugo
quelle
2
@Mat Sehen Sie dies für wie swappiness Benchmarking zu tun.
Geremia

Antworten:

133

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.swappinessOption 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.swappinessModifikator 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.cim Kernel-Quelltextbaum definiert .

Bei einem vm.swappinessvon 100wä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.swappinessto 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.swappinesssollte die Anpassung auf Benchmark-Daten basieren, die mit der tatsächlichen Arbeitsbelastung vergleichbar sind, und nicht nur auf einem Bauchgefühl.

Thomas Nyman
quelle
4
Wie wirkt sich die Installation des Betriebssystems auf einem Solid-State-Gerät auf den Kompromiss aus?
Gerrit
3
@gerrit Der Typ des zugrunde liegenden Speichermediums spielt keine Rolle. Diese Art von Detail ist für das Speicherverwaltungssubsystem nicht sichtbar.
Thomas Nyman
Der Typ des zugrunde liegenden Speichermediums ist aus Sicht der Speichernutzung irrelevant. Sie können die Auslagerungszeit verringern, wenn das Medium nur eine begrenzte Anzahl von Lese- / Schreibvorgängen unterstützt (z. B. Flash-Speicher), um die Lebensdauer zu verlängern.
MatrixManAtYrService
2
@MatrixManAtYrService Dank interner Abnutzungskorrektur und integrierter Redundanz hat sich gezeigt, dass moderne SSDs (auf die sich die Frage im vorherigen Kommentar bezieht) eine Schreibdauer von bis zu 2 PB (!) Aufweisen, bevor sie Fehler aufweisen. Sogar die billigeren Laufwerke in diesen Experimenten haben 300 TB gedauert, bevor Fehler auftraten, die weit über der offiziellen Garantiebewertung von etwa 100 TB lagen. Zumindest ist es meiner Meinung nach nicht wirklich gerechtfertigt, die Austauschbarkeit für eine SSD auf Workstations oder Laptops anzupassen.
Thomas Nyman
2
@ThomasNyman Sie machen einen guten Punkt, für die meisten Benutzer ist es nicht wert, sich Sorgen zu machen. Der Fall, der mich zu diesem Post brachte, beinhaltete Swap Space auf einer SD-Karte, was ich als Randfall erkenne.
MatrixManAtYrService
9

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.

dsmsk80
quelle
Ich verstehe nicht, warum 60 besser für Server geeignet ist. Ich habe Server und einige Prozesse werden getauscht, auch wenn wir 40% des freien Arbeitsspeichers haben. macht für mich keinen Sinn.
Hugo
7
Es ist sinnvoll, Teile des Arbeitsspeichers in Swap zu verschieben, wenn es sehr unwahrscheinlich ist, dass auf sie zugegriffen wird. Auf diese Weise hält Linux so viel wie möglich des eigentlichen Arbeitsspeichers frei, um für Situationen bereit zu sein, in denen er tatsächlich benötigt wird.
Wiederholung
Der Link zum Artikel ist tot, aber Sie können ihn immer noch von der Wayback Machine aus sehen
drs
Der verlinkte Artikel ist informativ. Danke, dass du es geteilt hast.
Pistos
5

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

  • Beispiel 1
    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.
  • Beispiel 2
    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,
  • Beispiel 3 Ein moderner Laptop oder Desktop, wahrscheinlich mit einer SSD. Die Speicheranforderungen gelten als unbekannt. Welchen Browser der Benutzer verwenden wird, wie viele Registerkarten er geöffnet haben wird, wird er auch ein Dokument, ein RAW-Bild oder möglicherweise ein Video bearbeiten, werden sie alle RAM verbrauchen. Wenn Sie den Wert für swappiness auf einen niedrigen Wert setzen und andere Dateisystem-Optimierungen vornehmen, werden weniger Schreibvorgänge auf die SSD ausgeführt, sodass diese länger dauert.
Timothy c
quelle
3
Bedenken hinsichtlich der SSD-Schreibdauer für ein Endbenutzersystem werden überbewertet. Moderne SSDs überleben typischerweise Schreibvolumina von vielen hundert Terabyte. Es ist unwahrscheinlich, dass ein typisches Desktop-System selbst bei starker Auslagerung über viele Jahre hinweg so viel nutzt.
Jules