Was Ist Swappiness auf Linux? (und Wie Sie Es Ändern)

0
52
subin-ch/Shutterstock.com

Die Linux-swappiness Wert hat nichts damit zu tun, wie viel RAM verwendet wird, vor dem Wechsel beginnt. Das ist eine weit verbreitete und allgemein angenommen, dass die Fehler. Wir erklären, was es wirklich ist.

Busting Die Mythen Über Die Swapiness

Swapping ist eine Technik, bei der Daten im RAM (Random Access Memory) geschrieben, auf einen speziellen Speicherort auf Ihrer Festplatte, entweder eine swap-partition oder swap—Datei zu, um RAM freizugeben.

Linux hat eine Einstellung namens der swappiness Wert. Es gibt eine Menge Verwirrung darüber, was diese Einstellung steuert. Die häufigste falsche Beschreibung der swappiness ist, dass es legt einen Schwellenwert für die RAM-Auslastung, und wenn die Menge des verwendeten RAM trifft, dass die Schwelle, swapping startet.

Dies ist ein Irrglaube, dass wurde so oft wiederholt, dass es jetzt erhalten Weisheit. Wenn (fast) jeder andere sagt dir, dass genau wie swappiness funktioniert, warum sollten Sie uns glauben, wenn wir sagen es nicht?

Einfach. Wir gehen, um es zu beweisen.

Dein RAM ist In Zonen Aufgeteilt

Linux will nicht daran denken, Ihre RAM zu einem großen homogenen pool von Speicher. Er hält es aufgeteilt in verschiedene Regionen, Zonen genannt. Zonen, die auf Ihrem computer vorhanden sind, hängt davon ab, ob es 32-bit oder 64-bit. Hier ist eine vereinfachte Beschreibung der möglichen Zonen auf einem x86-computer-Architektur.

  • Direct Memory Access (DMA): Dies ist die Tiefe 16 MB Speicher. Die zone erhält seinen Namen, weil das eine lange Zeit her, da waren Computer, die nur tun konnte, direct-memory-access in diesem Bereich des physischen Speichers.
  • (Direct Memory Access) 32: Trotz seines namens, Direct Memory Access) 32 (DMA32) ist eine zone, die nur in 64-bit-Linux. Es ist die geringe 4 GB Speicher. Linux läuft auf 32-bit-Computer können nur tun, DMA, um diese Menge an RAM (es sei denn, Sie sind mit der physical address extension (PAE) kernel), das ist, wie die der zone Ihren Namen bekam. Obwohl, auf 32-bit-Computer haben, ist es als HighMem.
  • Normal: Auf 64-bit-Computer, der normale Speicher ist alle RAM über 4 GB (in etwa). Auf 32-bit-Maschinen, es ist RAM zwischen 16 MB und 896 MB.
  • HighMem: Diese existiert nur auf 32-bit-Linux-Computern. Es ist alles RAM über 896 MB, einschließlich RAM oberhalb von 4 GB über ausreichend große Maschinen.

Die PAGESIZE-Wert

RAM zugeteilt werden Seiten, die eine Feste Größe haben. Diese Größe wird ermittelt, indem der kernel beim Booten durch den Nachweis der Architektur des Computers. In der Regel die Größe der Seite auf einem Linux-computer ist 4 Kbytes.

Sie können Ihre Seite die Größe mithilfe der getconf Befehl:

getconf PAGESIZE

Zonen Befestigt Sind, Knoten

Die Zonen sind an den Knoten. Knoten sind verbunden mit einer Central Processing Unit (CPU). Der kernel wird versuchen, reservieren Sie Speicher für einen Prozess auf eine CPU aus dem Knoten zugeordnet ist, dass die CPU.

Das Konzept der Knoten gebunden wird, um CPUs ermöglicht die gemischte Arten von Speicher installiert werden, in der Fach-multi-CPU-Computern mit Non-Uniform Memory Access-Architektur.

Das ist alles sehr high-end. Der Durchschnittliche Linux-computer verfügen über einen einzelnen Knoten, genannt Knoten null. Alle Zonen werden, gehören zu diesem Knoten. Um zu sehen, die Knoten und Zonen in Ihrem computer, Blick in die /proc/buddyinfo-Datei. Wir verwenden weniger zu tun:

less /proc/buddyinfo

Dies ist der Ausgang aus der 64-bit-computer dieser Artikel wurde recherchiert:

Node 0, zone DMA 1 1 1 0 2 1 1 0 1 1 3
Node 0, zone DMA32 2 67 58 19 8 3 3 1 1 1 17

Es ist ein einzelner Knoten ist, Knoten null. Dieser Rechner hat nur 2 GB RAM, so dass es keine “Normale” zone. Es gibt nur zwei-Zonen -, DMA-und DMA32.

Jede Spalte repräsentiert die Anzahl der verfügbaren Seiten in einer bestimmten Größe. Zum Beispiel, für die DMA32 zone, zu Lesen von Links:

  • 2: Es sind 2 von 2^(0*PAGESIZE) chunks Speicher.
  • 67: gibt Es 67 2^(1*PAGE_SIZE) chunks Speicher.
  • 58: Es gibt 58 2^(2*PAGESIZE) chunks Speicher zur Verfügung.
  • Und so weiter, den ganzen Weg bis zu…
  • 17: 17 2^(512*PAGESIZE) chunks.

Aber wirklich, der einzige Grund schauen wir uns diese Informationen zu sehen, die Beziehung zwischen den Knoten und die Zonen.

Datei-Seiten und Anonyme Seiten

Memory-mapping-sets verwendet der page table Einträge aufnehmen, die Speicher-Seiten verwendet werden, und für was.

Speicher-mappings können Sie:

  • Datei gesichert: Datei gesichert Zuordnungen enthalten Daten, die aus einer Datei gelesen. Es kann jede Art von Datei. Die wichtige Sache zu beachten ist, dass, wenn das system befreit das Speicher und benötigt, um diese Daten wieder, es kann aus der Datei gelesen einmal mehr. Aber, wenn die Daten geändert wurden im Speicher, werden diese änderungen müssen in die Datei geschrieben werden auf der Festplatte, bevor der Speicher freigegeben werden kann. Wenn das nicht passiert, würden die änderungen verloren gehen.
  • Anonymous: Anonymous-Speicher ist ein Speicher-mapping mit keine Datei oder ein Gerät sichern. Diese Seiten enthalten möglicherweise Speicher angefordert on-the-fly von den Programmen zum speichern von Daten, oder für solche Dinge wie stack und heap. Weil es keine Datei, die hinter dieser Art von Daten, ist ein besonderer Ort sein müssen beiseite für die Speicherung von anonymen Daten. Dieser Ort ist die swap-partition oder swap-Datei. Anonyme Daten geschrieben zu tauschen, bevor anonyme Seiten sind freigegeben.
  • Gerät unterstützt: Geräte angesprochen werden, durch block-Gerät-Dateien, die behandelt werden können, als seien Sie Dateien. Daten können gelesen und geschrieben werden. Ein Gerät unterstützten Speicher-mapping-Daten von einem Gerät gespeichert.
  • Shared: Mehrere page table Einträge können anzeigen auf der gleichen Seite der RAM. Der Zugriff auf die memory locations, die durch jede der Zuordnungen zeigen die gleichen Daten. Verschiedene Prozesse können miteinander kommunizieren, in einer sehr effizienten Weise, indem Sie die Daten in diesen gemeinsam angeschaut Speicherplätze. Gemeinsame beschreibbar mappings sind ein häufiges Mittel zur Erreichung high-performance-inter-Prozess-Kommunikation.
  • Copy-on-write: Copy-on-write ist ein lazy allocation-Technik. Wenn Sie eine Kopie einer Ressource, die bereits im Speicher angefordert wird, die Anforderung wird erfüllt durch Rücksendung eine Zuordnung der ursprünglichen Ressource. Wenn einer der Prozesse “teilen” sich die Ressource versucht, zu schreiben, die Ressource muss wirklich repliziert im Speicher zu ermöglichen, die änderungen, die vorgenommen werden, um die neue Kopie. Also die Speicherzuweisung erfolgt nur auf der ersten write-Befehl.

Für swappiness, wir müssen Sie nur beschäftigen uns mit den ersten zwei in der Liste: Datei-Seiten und anonyme Seiten.

Swappiness

Hier ist die Beschreibung der swappiness von der Linux-Dokumentation auf GitHub:

“Dieses Steuerelement wird verwendet, um zu definieren, wie aggressiv (sic) wird der kernel swap-Speicher-Seiten. Höhere Werte erhöhen die Aggressivität, niedrigere Werte verringern die Menge des swap. Ein Wert von 0 weist den kernel nicht zu initiieren swap, bis die Menge des freien und Datei-backed-Seiten kleiner ist als die high water mark in einer zone.

Der Standardwert ist 60.”

Das klingt wie swappiness dreht swap nach oben oder unten in der Intensität. Interessanterweise heißt es, dass die Einstellung der swappiness auf null lässt sich nicht ausschalten, swap. Es weist den kernel nicht tauschen, bis bestimmte Bedingungen erfüllt sind. Aber tauschen die immer noch auftreten können.

Lassen Sie uns tiefer Graben. Hier ist die definition-und Standard-Wert von vm_swappiness in den kernel-Quellcode-Datei vmscan.c:

/*
* Von 0 .. 100. Höher bedeutet mehr swappy.
*/
int vm_swappiness = 60;

Der swappiness Wert kann im Bereich von 0 bis 100. Nochmal, der Kommentar klingt wie der swappiness-Wert hat einen Einfluss darauf, wie viel swapping stattfindet, mit einer höheren Zahl führt zu mehr tauschen.

Weiter im source-code-Datei können wir sehen, dass eine neue variable mit dem Namen ” swappiness ist ein Wert zugeordnet, der von der Funktion zurückgegeben wird mem_cgroup_swappiness(). Einige weitere Verfolgung durch die source-code wird zeigen, dass der Wert der von dieser Funktion zurückgegeben wird vm_swappiness. So kann nun die variable, die swappiness eingestellt ist, gleich was auch immer Wert vm_swappiness eingestellt war.

int swappiness = mem_cgroup_swappiness(memcg);

Und etwas weiter unten in dem gleichen Quellcode-Datei, sehen wir dies:

/*
* Mit swappiness auf 100, anonym und Datei haben die gleiche Priorität.
* Dieser scan-Priorität ist im wesentlichen die inverse der E / a-Kosten.
*/
anon_prio = swappiness;
file_prio = 200 – anon_prio;

Das ist interessant. Zwei unterschiedliche Werte sind abgeleitet aus swappiness. Die anon_prio und file_prio Variablen halten Sie diese Werte. Als die eine steigt, der andere sinkt und Umgekehrt.

Die Linux-swappiness Wert legt das Verhältnis zwischen zwei Werten.

Das Goldene Verhältnis

Datei Seiten Daten enthalten, können leicht abgerufen werden, wenn das Speicher freigegeben wird. Linux kann nur Lesen Sie die Datei erneut. Wie wir gesehen haben, wenn die Daten der Datei geändert wurde, im RAM, müssen diese änderungen in die Datei geschrieben werden, bevor der Datei-Seite freigegeben werden kann. Aber, so oder so, die Seite Datei im RAM-Speicher kann neu gefüllt werden, durch das Lesen der Daten aus der Datei. Warum also die Mühe, das hinzufügen dieser Seiten auf die swap-partition oder swap-Datei? Wenn Sie brauchen, dass die Daten wieder, Sie könnte genauso gut Lesen Sie Sie wieder aus der ursprünglichen Datei anstatt einer redundanten Kopie in den swap-space. Also Datei-Seiten werden nicht gespeichert im swap. Sie sind “gespeichert” zurück in die original Datei.

Mit anonymen Seiten, es gibt keine zugrunde liegende Datei mit der zugehörigen Werte im Speicher. Die Werte in diesen Webseiten wurden dynamisch angekommen. Sie können nicht einfach gelesen werden, Sie wieder in eine Datei. Der einzige Weg, anonym Seite Speicher Werte wiederhergestellt werden kann, ist zum speichern der Daten irgendwo vor der Speicherfreigabe. Und das ist, was swap-hält. Anonym-Seiten, die Sie gehen zu müssen, um die Referenz wieder.

Aber beachten Sie, dass für die beiden Dateien-Seiten und für anonyme Seiten, zu befreien, die Speicher benötigen eventuell eine Festplatte schreiben. Wenn die Seite Datei-Daten oder die anonyme Seite Daten hat sich verändert, seit Sie zuletzt geschrieben, um die Datei oder swap ein Dateisystem schreiben erforderlich ist. Zum abrufen der Daten benötigen Sie ein Dateisystem Lesen. Beide Arten von Seite zurückzufordern sind teuer. Versuchen, die Festplatte input und output durch die Minimierung der Tausch von anonymen Seiten nur erhöht die Menge der Festplatte, input-und output erforderlich ist, um befassen sich mit Datei Seiten geschrieben wird und Lesen von Dateien.

Wie Sie sehen können, von der letzten code-snippet, es sind zwei Variablen. Man nannte file_prio für “file priority”, und man nannte anon_prio für “anonyme Priorität”.

  • Die anon_prio variable den Linux-swappiness Wert.
  • Die file_prio Wert von 200 minus die anon_prio Wert.

Diese Variablen Werte enthalten, die im tandem arbeiten. Wenn Sie beide auf 100 gesetzt, sind Sie gleich. Für alle anderen Werte, anon_prio Rückgang aus 100 Richtung 0, und file_prio erhöhen sich von 100 in Richtung 200. Die beiden Werte fließen in einen komplizierten Algorithmus, der festlegt, ob der Linux-kernel läuft, mit einer Vorliebe für die Rückeroberung (Befreiung bis) Datei-Seiten oder anonyme Seiten.

Sie können denken, file_prio wie das system die Bereitschaft, kostenlos Dateien-Seiten und anon_prio wie das system die Bereitschaft zur kostenlosen anonymen Seiten. Was diese Werte nicht festgelegt ist, jede Art von trigger-oder Schwellenwert für den Zeitpunkt der swap verwendet wird. Das ist beschlossen anderswo.

Aber, wenn das Gedächtnis muss freigegeben werden, werden diese zwei Variablen, und das Verhältnis zwischen Ihnen—berücksichtigt, indem die Rückgewinnung und swap-algorithmen, um zu bestimmen, welche Seiten-Typen werden bevorzugt berücksichtigt zu befreien. Und dass wird bestimmt, ob der zugehörige Festplatte Aktivität der Verarbeitung von Dateien für die Datei pages-oder swap-space für anonyme Seiten.

Wann Wird Swap Eigentlich Im Schnitt?

Wir haben festgestellt, dass der Linux-swappiness Wert setzt eine Vorliebe für die Art von Speicher-Seiten, die gescannt werden für mögliche Rückgewinnung. Das ist in Ordnung, aber etwas muss entscheiden, Wann der swap wird geschnitten in.

Jedes memory zone ist eine high-water-mark-und eine low-water mark. Diese system sind abgeleitete Werte. Sie sind Prozentsätze der RAM, die in jeder zone. Es sind diese Werte, die verwendet werden, als die swap-trigger-schwellen.

Um zu überprüfen, was Ihre hoch-und Niedrigwasser-Marken sind, sehen Sie in der /proc/zoneinfo die Datei mit diesem Befehl:

less /proc/zoneinfo

Jede der Zonen wird eine Menge von Speicher-Werte, gemessen in Seiten. Hier sind die Werte für die DMA32 zone auf die test-Maschine. Die low-water mark ist 13966 Seiten, und die high water mark ist 16759 Seiten:

  • Im normalen Betriebs-Bedingungen, wenn der freie Speicher in einer zone unterhalb der zone niedrigen Wasser-Marke, die swap-Algorithmus beginnt mit dem Scannen, Speicher-Seiten auf der Suche nach Speicher, dass kann es zurückfordern, unter Berücksichtigung der relativen Werte von anon_prio und file_prio.
  • Wenn die Linux-swappiness Wert auf null eingestellt ist, die swap-tritt auf, wenn der kombinierte Wert der Datei-Seiten und die freien Seiten sind weniger als die high-water-mark.

So können Sie sehen, dass man nicht mit der Linux-swappiness-Wert zu beeinflussen swap-Verhalten mit Bezug auf RAM-Auslastung. Es funktioniert einfach nicht so.

Was Soll Swapiness Eingestellt Werden?

Dies hängt von hardware -, workload -, Festplatten-Typ, und, ob Ihr computer ist ein desktop oder ein server. Offensichtlich, dies ist nicht eine one-size-fits-all Art von Einstellung.

Und Sie haben zu Bedenken, daß swap ist nicht nur als ein Mechanismus, um freie RAM, wenn Sie ‘ re running out of Speicherplatz. Swap ist ein wichtiger Teil eines gut funktionierenden Systems, und ohne Sie, sane memory management wird sehr schwierig für Linux zu erreichen.

Ändern der Linux-swappiness-Wert hat eine sofortige Wirkung; Sie brauchen nicht neu zu starten. So können Sie kleine Anpassungen und die überwachung der Auswirkungen. Idealerweise würde dies über einen Zeitraum von Tagen, mit verschiedenen Arten von Aktivitäten auf Ihrem computer, um zu versuchen zu finden, die am nächsten an eine ideale Einstellung, die Sie können.

Dies sind einige Punkte zu beachten:

  • Versucht zu “deaktivieren swap”, indem Sie die Linux-swappiness Wert auf null verschiebt den swap-verbunden Festplatte-Aktivität auf Datei-verbunden Festplatte Aktivität.
  • Wenn Sie Altern, mechanischen Festplatten, Sie können versuchen, die Verringerung der Linux-swappiness Wert bias Weg von anonymer Seite Urbarmachung und reduzieren die swap-partition stößt. Natürlich, wie Sie sich eine Einstellung die andere Einstellung erhöht. Verringerung der churn-swap erhöht wahrscheinlich das Dateisystem Butterfass. Aber Ihr computer ist möglicherweise glücklicher Begünstigung einer Methode über die andere. Wirklich, der einzige Weg, um sicher wissen, ist, zu versuchen und zu sehen.
  • Für single-purpose-Server, Datenbank-Server, können Sie bekommen Anleitung vom Anbieter der Datenbank-software. Sehr oft sind diese Anwendungen haben Ihre eigenen Zweck entwickelt wurde, den Datei-cache und Speicher-management-Routinen, die Sie würde besser zu Vertrauen. Die software-Anbieter könnte darauf hindeuten, eine Linux-swappiness-Wert nach Maschine Spezifikation und Arbeitsbelastung.
  • Für den Durchschnitts-desktop-Nutzer mit halbwegs aktuellen hardware? Alles so lassen wie es ist.

Wie die Linux-Swappiness Wert

Bevor Sie ändern Ihre swappiness Wert, müssen Sie wissen, was der aktuelle Wert ist. Wenn Sie möchten, es zu reduzieren ein wenig, die Frage ist ein bisschen weniger als was? Finden Sie heraus, mit diesem Befehl:

cat /proc/sys/vm/swappiness

Konfigurieren Sie den swappiness-Wert, verwenden Sie die sysctl-Befehl:

sudo sysctl vm.swappiness=45

Der neue Wert wird sofort, ein Neustart ist nicht erforderlich.

In der Tat, wenn Sie neu starten, den swappiness Wert wird Sie wieder auf den default-Wert von 60. Wenn Sie abgeschlossen haben, zu Experimentieren und sich entschieden haben, auf den neuen Wert, den Sie verwenden möchten, können Sie es persistent Neustarts, indem es der /etc/sysctl.conf-Datei. Können Sie aus, welchen editor Sie bevorzugen. Verwenden Sie den folgenden Befehl zum Bearbeiten der Datei mit dem nano editor:

sudo nano /etc/sysctl.conf

Wenn nano öffnet, scrollen Sie zum Ende der Datei und fügen Sie diese Zeile. Wir sind mit 35, der als permanente swappiness Wert. Sollten Sie ersetzen den Wert, den Sie verwenden möchten.

vm.swappiness=35

Um Ihre änderungen zu speichern und beenden von nano, drücken Sie “Strg+O”, drücken Sie “Enter”, und drücken Sie “Strg+Z.”

Speicher-Management ist Komplex

Speicher-management ist kompliziert. Und das ist, warum, für den durchschnittlichen Benutzer, ist es meist besser, es zu verlassen bis zu den kernel.

Es ist einfach zu denken, Sie sind mit mehr RAM, als Sie sind. Dienstprogramme wie oben und frei geben kann, die einen falschen Eindruck. Linux wird die Verwendung freier Speicher für eine Vielzahl von Ihre eigenen Zwecke, wie disk-caching. Dieser künstlich erhöht, mit der “verwendeten” memory Figur und reduziert die “freie” Speicher Abbildung. In der Tat, die verwendeten RAM als disk-cache ist gekennzeichnet als beide “gebraucht” und “verfügbar” weil Sie es können zurückgefordert werden, jederzeit, sehr schnell.

Um die Uneingeweihten, die vielleicht so Aussehen wie die swap nicht funktioniert, oder dass die swappiness Wert ändern muss.

Wie immer, steckt der Teufel im detail. Oder, in diesem Fall der Dämon. Der kernel swap daemon.

LESEN SIE WEITER

  • › Die iPhones Haben den Portrait-Modus?
  • › Wird Windows 10 auf Meinem Computer?
  • › Wo Können Sie Streamen Ihre Lieblings-Weihnachts-Specials
  • › Wie Drucken von Fotos in Windows 10
  • › Wie zu Verfolgen Aktien mit Google Sheets