GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Swapiness unter Linux:Alles, was Sie wissen müssen

Wenn Sie schon seit geraumer Zeit ein Linux-Benutzer oder -Enthusiast sind, sollte Ihnen der Begriff Swap oder Swap-Speicher nicht neu sein. Aber leider neigen viele Linux-Benutzer dazu, das Konzept des Auslagerungsspeichers mit Auslagerung zu verwechseln. Das häufigste Missverständnis ist, dass ein Auslagerungswert den maximal nutzbaren Arbeitsspeicher angibt, bevor der eigentliche Auslagerungsprozess beginnt.

Um mit diesem weit verbreiteten Missverständnis aufzuräumen, müssen wir die Definition von Swapping und Swappiness aufschlüsseln.

Wechsel von verbreiteten Missverständnissen

Aus Swappiness leitet sich der Begriff Swapping ab. Damit das Austauschen stattfinden kann, muss RAM (Random Access Memory) einige Systemdaten haben. Wenn diese Daten an einen dedizierten Festplattenspeicherort wie eine Auslagerungsdatei oder eine Auslagerungspartition geschrieben werden, wird der System-RAM von benötigtem Speicherplatz befreit. Dieses Freigeben des System-RAM stellt die Definition von Swapping dar.

Ihr Linux-Betriebssystem enthält eine Konfigurationseinstellung für den Swappiness-Wert. Die Existenz dieses Werts führt weiterhin zu vielen Missverständnissen über die beabsichtigte Systemfunktionalität. Die häufigste ist die Assoziation mit dem Schwellenwert für die RAM-Nutzung. Aus der Definition von Swapping wird Swappiness als der maximale RAM-Speicherwert missverstanden, der den Beginn des Swappings auslöst.

RAM-Splitzonen

Um Klarheit über das zuvor besprochene Missverständnis von Swappiness zu finden, müssen wir dort beginnen, wo dieses Missverständnis begann. Zuerst müssen wir uns den Random Access Memory (RAM) ansehen. Unsere Interpretation des Arbeitsspeichers unterscheidet sich stark von der Wahrnehmung des Linux-Betriebssystems. Wir sehen den RAM als eine einzelne homogene Speichereinheit, während Linux ihn als geteilte Speicherzonen oder -regionen interpretiert.

Die Verfügbarkeit dieser Zonen auf Ihrem Computer hängt von der Architektur des verwendeten Computers ab. Beispielsweise könnte es sich um eine Maschine mit 32-Bit-Architektur oder um eine Maschine mit 64-Bit-Architektur handeln. Um dieses Konzept der geteilten Zonen besser zu verstehen, betrachten Sie die folgende Aufschlüsselung und Beschreibung der Computerzonen der x86-Architektur.

  • Direkter Speicherzugriff (DMA) :Hier beträgt die zuweisbare Speicherregion oder Zonenkapazität nur 16 MB. Sein Name bezieht sich auf seine Implementierung. Frühe Computer konnten nur über den Ansatz des direkten Speicherzugriffs mit dem physischen Speicher eines Computers kommunizieren.
  • Direkter Speicherzugriff 32 (DM A 32) :Unabhängig von dieser zugewiesenen Namenskonvention ist DMA32 eine Speicherzone, die nur auf eine 64-Bit-Linux-Architektur anwendbar ist. Dabei überschreitet die zuweisbare Speicherbereichs- oder Zonenkapazität 4 GB nicht. Daher kann ein 32-Bit-betriebener Linux-Computer nur 4 GB RAM DMA erreichen. Die einzige Ausnahme von diesem Fall ist, wenn sich der Linux-Benutzer für den PAE-Kernel (Physical Address Extension) entscheidet.
  • Normal :Der Maschinen-RAM-Anteil über 4 GB entspricht nach Schätzung auf einer 64-Bit-Computerarchitektur der metrischen Definition und den Anforderungen des normalen Arbeitsspeichers. Andererseits definiert eine 32-Bit-Computerarchitektur einen normalen Speicher zwischen 16 MB und 896 MB.
  • Hoch M sie :Diese Speicherzone ist nur auf einer 32-Bit-Linux-basierten Computerarchitektur erkennbar. Sie ist definiert als die RAM-Kapazität von mehr als 896 MB für kleine Computer und von mehr als 4 GB für große Computer oder solche mit leistungsstarken Hardwarefunktionen und -spezifikationen.

RAM- und PAGESIZE-Werte

Die RAM-Zuweisung des Computers wird in Seiten bestimmt. Diese Seitenzuweisungen sind auf feste Größen konfiguriert. Der Systemkern ist die Determinante dieser Zuordnungen fester Größe. Die Seitenzuweisung erfolgt beim Systemstart, wenn der Kernel Ihre Computerarchitektur erkennt. Auf einem solchen Linux-Computer beträgt die typische Seitengröße etwa 4 KB.

Um die Seitengröße Ihres Linux-Rechners zu bestimmen, können Sie den Befehl „getconf“ wie unten gezeigt verwenden:

$ getconf PAGESIZE

Wenn Sie den obigen Befehl auf Ihrem Terminal ausführen, sollten Sie eine Ausgabe wie folgt erhalten:

4096

Zonen- und Knotenanhänge

Die besprochenen Speicherzonen haben eine direkte Verbindung zu den Systemknoten. Die CPU oder Central Processing Unit ist direkt mit diesen Knoten verbunden. Diese Verbindung zwischen Knoten und CPU, auf die der Systemkern beim Zuweisen von Speicher verweist, wird von einem Prozess benötigt, der für die Ausführung durch dieselbe CPU geplant ist.

Diese Knoten-zu-CPU-Ebenen sind für die Installation gemischter Speichertypen unerlässlich. Spezialisierte Multi-CPU-Computer sind das primäre Ziel dieser Speicherinstallationen. Dieses Verfahren ist nur erfolgreich, wenn die Non-Uniform Memory Access-Architektur verwendet wird.

Bei solchen High-End-Anforderungen wird ein Linux-Computer im Durchschnitt einem bestimmten Knoten zugeordnet. Der OS-Begriff dafür ist Knoten Null. Dieser Knoten besitzt alle verfügbaren Speicherzonen. Auf diese Knoten und Zonen kann auch von Ihrem Linux-Betriebssystem aus zugegriffen werden. Zuerst müssen Sie auf die Datei „/proc/buddyinfo“ zugreifen. Sie können den folgenden Befehl verwenden, um dieses Ziel zu erreichen.

$ less /proc/buddyinfo

Ihre Terminalausgabe sollte dem folgenden Screenshot ähneln.

Wie Sie sehen können, habe ich es von meiner Seite aus mit drei Zonen zu tun:DMA, DMA32 und normale Zonen.

Die Interpretation der Daten dieser Zonen ist einfach. Wenn wir uns beispielsweise für die DMA32-Zone entscheiden, können wir einige wichtige Informationen aufdecken. Wenn wir uns von links nach rechts bewegen, können wir Folgendes enthüllen:

4846: Verfügbare Speicherblöcke können als 4846 von 2^(0*PAGESIZE)

interpretiert werden

3946: Verfügbare Speicherblöcke können als 3946 von 2^(1*PAGESIZE)

interpretiert werden

2490: Verfügbare Speicherblöcke können als 2490 von 2^(2*PAGESIZE)

interpretiert werden

0: Verfügbare Speicherblöcke können als 0 von 2^(512*PAGESIZE)

interpretiert werden

Die obigen Informationen verdeutlichen, wie Knoten und Zonen zueinander in Beziehung stehen.

Dateiseiten vs. anonyme Seiten

Seitentabelleneinträge stellen die Speicherabbildungsfunktionalität mit den erforderlichen Mitteln zum Aufzeichnen der Nutzung spezifischer Speicherseiten bereit. Aus diesem Grund existiert Memory Mapping in folgenden Funktionsphasen:

Datei gesichert: Bei dieser Art der Zuordnung stammen hier vorhandene Daten aus einer Datei. Das Mapping beschränkt seine Funktionalität nicht auf bestimmte Dateitypen. Jeder Dateityp ist verwendbar, solange die Zuordnungsfunktion Daten daraus lesen kann. Die Flexibilität dieser Systemfunktion besteht darin, dass ein vom System freigegebener Speicher problemlos wiedererlangt und seine Daten wiederverwendet werden können, solange die Datei mit den Daten lesbar bleibt.

Wenn zufällig Datenänderungen im Speicher auftreten, muss die Festplattendatei die Datenänderungen aufzeichnen. Sie sollte erfolgen, bevor der verwendete Speicher wieder frei ist. Wenn diese Vorsichtsmaßnahme nicht getroffen wird, wird die Festplattendatei die im Speicher aufgetretenen Datenänderungen nicht bemerken.

Anonym: Diese Art der Speicherzuordnungstechnik hat keine Geräte- oder Dateisicherungsfunktionalität. Die auf diesen Seiten verfügbaren Speicheranforderungen können als on-the-fly bezeichnet werden und werden von Programmen initiiert, die dringend Daten speichern müssen. Solche Speicheranforderungen sind auch effektiv, wenn es um Speicherstacks und -heaps geht.

Da diese Datentypen nicht mit Dateien verknüpft sind, benötigt ihre anonyme Natur etwas, um sofort als zuverlässiger Speicherort zu funktionieren. In diesem Fall wird eine Auslagerungspartition oder Auslagerungsdatei erstellt, um diese Programmdaten zu speichern. Die Daten werden zuerst zum Austausch verschoben, bevor die anonymen Seiten, die diese Daten enthielten, freigegeben werden.

Gerät unterstützt: Blockgerätedateien werden verwendet, um Systemgeräte anzusprechen. Das System betrachtet die Gerätedateien als normale Systemdateien. Hier ist sowohl das Lesen als auch das Schreiben von Daten möglich. Die Gerätespeicherdaten erleichtern und initiieren die gerätegestützte Speicherzuordnung.

Geteilt: Eine einzelne RAM-Seite kann mehrere Seitentabelleneinträge aufnehmen oder ihnen zugeordnet werden. Jede dieser Zuordnungen kann verwendet werden, um auf die verfügbaren Speicherorte zuzugreifen. Unabhängig von der Kartierungsroute ist die endgültige Datenanzeige immer gleich. Da hier die Speicherplätze gemeinsam überwacht werden, ist die Kommunikation zwischen Prozessen durch Datenaustausch effizienter. Die Kommunikation zwischen Prozessen ist aufgrund gemeinsam beschreibbarer Mappings ebenfalls hochleistungsfähig.

Kopieren beim Schreiben: Diese Zuordnungstechnik ist etwas faul orientiert. Wenn eine Ressourcenanforderung auftritt und die angeforderte Ressource bereits im Speicher vorhanden ist, wird die ursprüngliche Ressource abgebildet, um diese Anforderung zu erfüllen. Außerdem kann die Ressource von mehreren anderen Prozessen gemeinsam genutzt werden.

In solchen Fällen könnte ein Prozess versuchen, in diese Ressource zu schreiben. Wenn dieser Schreibvorgang erfolgreich sein soll, sollte eine Kopie dieser Ressource im Arbeitsspeicher vorhanden sein. Die Ressourcenkopie oder -replik wird nun die vorgenommenen Änderungen aufnehmen. Kurz gesagt, es ist dieser erste Schreibbefehl, der die Speicherzuweisung initiiert und ausführt.

Von diesen fünf diskutierten Ansätzen zur Speicherzuordnung befasst sich die Auslagerung mit dateigestützten Seiten und Speicherzuordnungsroutinen für anonyme Seiten. Daher sind sie die ersten beiden diskutierten Memory-Mapping-Techniken.

Swapiness verstehen

Basierend auf dem, was wir bisher behandelt und diskutiert haben, ist die Definition von Swappiness jetzt leicht verständlich.

Einfach ausgedrückt ist Swappiness ein Systemkontrollmechanismus, der die Intensität der Systemkern-Aggression beim Auslagern von Speicherseiten beschreibt. Ein Swappiness-Wert wird verwendet, um diese Systemkern-Aggressionsstufe zu identifizieren. Erhöhte Kernel-Aggressivität wird durch höhere Swapiness-Werte angezeigt, während der Swap-Betrag mit niedrigeren Werten abnimmt.

Wenn der Wert 0 ist, verfügt der Kernel nicht über die Authentifizierung, um das Austauschen zu initiieren. Stattdessen referenziert der Kernel die dateigestützten und freien Seiten, bevor er den Austausch initiiert. Beim Vergleich von Swappiness mit Swap ist Swappiness also dafür verantwortlich, Swaps intensiv nach oben und unten zu messen. Interessanterweise verhindert ein auf Null gesetzter Auslagerungswert nicht, dass Auslagerungen stattfinden. Stattdessen wird das Swappen nur angehalten, während der Systemkern darauf wartet, dass einige Swapping-Bedingungen erfüllt werden.

Github bietet eine überzeugendere Beschreibung des Quellcodes und Werte im Zusammenhang mit der Swapiness-Implementierung. Per Definition wird ihr Standardwert mit der folgenden Variablendeklaration und -initialisierung dargestellt.

Int vm_swappiness = 60;

Die Swappiness-Wertebereiche liegen zwischen 0 und 100. Der obige Github-Link verweist auf den Quellcode für seine Implementierung.

Der ideale Swappiness-Wert

Mehrere Faktoren bestimmen den idealen Swappiness-Wert für ein Linux-System. Dazu gehören der Festplattentyp, die Hardware und die Arbeitslast Ihres Computers und ob er als Server- oder Desktop-Computer konzipiert ist.

Sie müssen auch beachten, dass die Hauptaufgabe von Swap nicht darin besteht, einen Speicherfreigabemechanismus für den Arbeitsspeicher einer Maschine zu initiieren, wenn der verfügbare Speicherplatz zur Neige geht. Das Vorhandensein von Swap ist standardmäßig ein Indikator für ein gut funktionierendes System. Seine Abwesenheit würde bedeuten, dass Ihr Linux-System verrückte Speicherverwaltungsroutinen einhalten muss.

Die Implementierung eines neuen oder benutzerdefinierten Auslagerungswerts auf einem Linux-Betriebssystem wirkt sich sofort aus. Es macht die Notwendigkeit eines Systemneustarts überflüssig. Daher ist dieses Fenster eine Gelegenheit, die Auswirkungen des neuen Swapiness-Werts anzupassen und zu überwachen. Diese Wertanpassungen und Systemüberwachung sollten über einen Zeitraum von Tagen und Wochen erfolgen, bis Sie auf einer Zahl landen, die die Leistung und Gesundheit Ihres Linux-Betriebssystems nicht beeinträchtigt.

Berücksichtigen Sie beim Anpassen Ihres Swappiness-Werts die folgenden Hinweise:

  • Erstens deaktiviert die Implementierung von 0 als Set-swappiness-Wert die Swap-Funktionalität nicht. Stattdessen ändert sich die Aktivität der Systemfestplatte von „swap-associated“ zu „file-associated“.
  • Wenn Sie mit veralteten oder veralteten Computerfestplatten arbeiten, wird empfohlen, den zugehörigen Linux-Auslagerungswert zu reduzieren. Es minimiert die Auswirkungen der Änderung der Swap-Partition und verhindert auch die Rückforderung anonymer Seiten. Die Abwanderung des Dateisystems wird zunehmen, wenn die Swap-Abwanderung abnimmt. Da die Erhöhung einer Einstellung die Verringerung einer anderen bewirkt, wird Ihr Linux-System mit einer effektiven Speicherverwaltungsmethode gesünder und leistungsfähiger, anstatt mit zwei Methoden eine durchschnittliche Leistung zu erzielen.
  • Datenbankserver und andere Einzweckserver sollten Softwarerichtlinien von ihren Lieferanten haben. Sie verfügen über eine zuverlässige Speicherverwaltung und speziell entwickelte Datei-Cache-Mechanismen. Die Anbieter dieser Software sind verpflichtet, basierend auf der Arbeitslast und den Spezifikationen des Computers einen empfohlenen Linux-Auslagerungswert vorzuschlagen.
  • Wenn Sie ein durchschnittlicher Linux-Desktop-Benutzer sind, ist es ratsam, sich an den bereits eingestellten Swappiness-Wert zu halten, insbesondere wenn Sie einigermaßen aktuelle Hardware verwenden.

Arbeiten mit benutzerdefinierten Auslagerungswerten auf Ihrem Linux-Rechner

Sie können Ihren Linux-Auslagerungswert in einen benutzerdefinierten Wert Ihrer Wahl ändern. Zunächst müssen Sie den aktuell eingestellten Wert kennen. Es gibt Ihnen eine Vorstellung davon, um wie viel Sie Ihren vom System eingestellten Swapiness-Wert verringern oder erhöhen möchten. Sie können den aktuell eingestellten Wert auf Ihrem Linux-Rechner mit dem folgenden Befehl überprüfen.

$ cat /proc/sys/vm/swappiness

Sie sollten einen Wert wie 60 erhalten, da dies die Standardeinstellung des Systems ist.

Das „sysctl“ ist nützlich, wenn Sie diesen Swappiness-Wert auf eine neue Zahl ändern müssen. Zum Beispiel können wir es mit dem folgenden Befehl auf 50 ändern.

$ sudo sysctl vm.swappiness=50

Ihr Linux-System übernimmt diesen neu eingestellten Wert sofort, ohne dass ein Neustart erforderlich ist. Ein Neustart Ihres Computers setzt diesen Wert auf den Standardwert 60 zurück. Die Verwendung des obigen Befehls ist aus einem Hauptgrund vorübergehend. Es ermöglicht den Linux-Benutzern, mit den Auslagerungswerten zu experimentieren, die sie im Sinn haben, bevor sie sich für einen festen Wert entscheiden, den sie dauerhaft verwenden möchten.
Wenn Sie möchten, dass der Auslagerungswert auch nach einem erfolgreichen Systemneustart bestehen bleibt, müssen Sie dies tun seinen eingestellten Wert in die Systemkonfigurationsdatei „/etc/sysctl.conf“ aufzunehmen. Betrachten Sie zur Demonstration die folgende Implementierung dieses diskutierten Falls über den Nano-Editor. Natürlich können Sie jeden von Linux unterstützten Editor Ihrer Wahl verwenden.

$ sudo nano /etc/sysctl.conf

Wenn diese Konfigurationsdatei auf Ihrer Terminalschnittstelle geöffnet wird, scrollen Sie nach unten und fügen Sie eine Variablendeklarationszeile hinzu, die Ihren Auslagerungswert enthält. Betrachten Sie die folgende Implementierung.

 
vm.swappiness=50

Speichern Sie diese Datei und Sie können loslegen. Ihr nächster Systemneustart wird diesen neu eingestellten Auslagerungswert verwenden.

Schlussbemerkung

Die Komplexität der Speicherverwaltung macht sie zu einer idealen Rolle für den Systemkern, da dies dem durchschnittlichen Linux-Benutzer zu viele Kopfschmerzen bereiten würde. Da Swappiness mit der Speicherverwaltung verbunden ist, könnten Sie überschätzen oder denken, dass Sie zu viel RAM verwenden. Auf der anderen Seite findet Linux freien RAM ideal für Systemrollen wie das Disk-Caching. In diesem Fall wird der „freie“ Speicherwert künstlich niedriger und der „belegte“ Speicherwert künstlich höher.

Praktisch ist diese Proportionalität von freien und belegten Speicherwerten wegwerfbar. Grund? Freier RAM, der sich selbst als Disk-Cache zuweist, ist in jeder Systeminstanz abrufbar. Dies liegt daran, dass der Systemkern ihn sowohl als verfügbaren als auch als wiederverwendbaren Speicherplatz kennzeichnet.


Linux
  1. Podman vs. Docker:Alles, was Sie wissen müssen

  2. Alles, was Sie über Ubuntu 13.04 wissen müssen

  3. Linux-tmp-Verzeichnis:Alles, was Sie wissen müssen

  4. Linux-Dateikomprimierung:Alles, was Sie wissen müssen

  5. Linux-Dateiberechtigungen:Alles, was Sie wissen müssen

Alles, was Sie über Black Lab Linux wissen müssen

Alles, was Sie über die Linux Mint-Distribution wissen müssen

Alles, was Sie über Inodes in Linux wissen müssen

Alles Wichtige, was Sie über Hard Link in Linux wissen müssen

Alles Wichtige, was Sie über UID in Linux wissen müssen

Alles, was Sie über das Linux /tmp-Verzeichnis wissen müssen