Swap

Diese Seite bietet eine Einführung in Swap Space und Paging unter GNU/Linux. Es umfasst die Erstellung und Aktivierung von Swap-Partitionen und Swap-Dateien.

Von All about Linux Swap Space:

Linux teilt seinen physischen RAM (Direktzugriffsspeicher) in Speicherblöcke auf, die als Seiten bezeichnet werden. Swapping ist der Prozess, bei dem eine Speicherseite in den vorkonfigurierten Speicherplatz auf der Festplatte kopiert wird, der als Swap-Speicherplatz bezeichnet wird, um diese Speicherseite freizugeben. Die kombinierte Größe des physischen Speichers und des Auslagerungsbereichs ist die Menge des verfügbaren virtuellen Speichers.

Unterstützung für Swap wird durch den Linux-Kernel und User-Space-Dienstprogramme aus dem util-Linux-Paket zur Verfügung gestellt.

Auslagerungsbereich

Der Auslagerungsbereich kann die Form einer Festplattenpartition oder einer Datei haben. Benutzer können während der Installation oder zu einem späteren Zeitpunkt nach Wunsch einen Swap-Bereich erstellen. Swap-Speicher kann für zwei Zwecke verwendet werden, um den virtuellen Speicher über den installierten physischen Speicher (RAM) hinaus zu erweitern, und auch für Suspend-to-Disk-Unterstützung.

Ob es sinnvoll ist, den virtuellen Speicher mit Swap zu erweitern, hängt von der Menge des installierten physischen Speichers ab. Wenn die Menge an physischem Speicher geringer ist als die Menge an Speicher, die zum Ausführen aller gewünschten Programme erforderlich ist, kann es vorteilhaft sein, Swap zu aktivieren. Dies vermeidet Speicherausfälle, bei denen der OOM-Killer-Mechanismus des Linux-Kernels automatisch versucht, Speicher freizugeben, indem Prozesse beendet werden. Um die Menge des virtuellen Speichers auf die erforderliche Menge zu erhöhen, fügen Sie die erforderliche Differenz (oder mehr) als Swap-Speicherplatz hinzu.

Der größte Nachteil der Aktivierung von Swap ist die geringere Leistung, siehe Abschnitt #Performance. Daher ist das Aktivieren von Swap eine Frage der persönlichen Präferenz: einige bevorzugen es, Programme zu töten, anstatt Swap zu aktivieren, und andere bevorzugen es, Swap und langsameres System zu aktivieren, wenn der physische Speicher erschöpft ist.

Hinweis: Es gibt keinen Leistungsunterschied zwischen der Verwendung einer Auslagerungspartition und einer zusammenhängenden Auslagerungsdatei.

Um den Swap-Status zu überprüfen, verwenden Sie:

$ swapon --show

Oder um den physischen Speicher sowie die Swap-Nutzung anzuzeigen:

$ free -h

Swap-Partition

Tango-1.pngDie sachliche Richtigkeit dieses Artikels oder Abschnitts ist umstritten.Tango-ungenau.png

Grund: 82 ist der Swap-Partitionstyp auf MBR, es gibt keine automatische Erkennung der Swap-Partition auf MBR. / TRIM-Befehle auf Swap-Partitionen scheinen automatisch vom Kernel ausgegeben zu werden, wenn sie unterstützt werden, siehe Fedora-Bereitstellungshandbücher. Eine Swap-Partition kann mit den meisten GNU/Linux-Partitionierungswerkzeugen erstellt werden. Swap-Partitionen werden typischerweise als Typ 82 bezeichnet. Obwohl es möglich ist, einen beliebigen Partitionstyp als Swap zu verwenden, wird in den meisten Fällen empfohlen, type 82 zu verwenden, da systemd ihn automatisch erkennt und einbindet (siehe unten).

Um eine Partition als Linux-Swap-Bereich einzurichten, wird der Befehl mkswap(8) verwendet. Beispiel:

# mkswap /dev/sdxy
Warnung: Alle Daten auf der angegebenen Partition gehen verloren.

Um das Gerät für Paging zu aktivieren:

# swapon /dev/sdxy

Um diese Swap-Partition beim Booten zu aktivieren, fügen Sie einen Eintrag zu /etc/fstab:

UUID=device_UUID none swap defaults 0 0

wobei device_UUID die UUID des Auslagerungsbereichs ist.

Siehe fstab für die Dateisyntax.

Hinweis:

  • Der fstab-Eintrag ist optional, wenn sich die Swap-Partition auf einem Gerät befindet, das GPT verwendet. Siehe den nächsten Unterabschnitt.
  • Wenn Sie eine SSD mit TRIM-Unterstützung verwenden, sollten Sie discard in der Swap-Zeile in fstab verwenden. Wenn Sie swap manuell mit swapon aktivieren, wird mit dem Parameter -d--discard dasselbe erreicht. Siehe swapon(8) für Details.
Warnung: Wenn Sie discard in RAID-Setups mit mdadm aktivieren, wird das System beim Booten und zur Laufzeit gesperrt, wenn Swapon verwendet wird.

Aktivierung durch systemd

systemd aktiviert Swap-Partitionen basierend auf zwei verschiedenen Mechanismen. Beide sind ausführbare Dateien in /usr/lib/systemd/system-generators . Die Generatoren werden beim Start ausgeführt und erstellen native Systemd-Einheiten für Mounts. Die erste, systemd-fstab-generator , liest die fstab, um Einheiten zu generieren, einschließlich einer Einheit für Swap. Die zweite, systemd-gpt-auto-generator prüft die Root-Festplatte, um Einheiten zu generieren. Es funktioniert nur auf GPT-Datenträgern und kann Swap-Partitionen anhand ihres Typs identifizieren GUID, siehe systemd #GPT partition automounting für weitere Informationen.

Swap deaktivieren

So deaktivieren Sie einen bestimmten Swap-Bereich:

# swapoff /dev/sdxy

Alternativ können Sie den Schalter -a verwenden, um den gesamten Swap-Bereich zu deaktivieren.

Da swap von systemd verwaltet wird, wird es beim nächsten Systemstart wieder aktiviert. Um die automatische Aktivierung des erkannten Auslagerungsbereichs dauerhaft zu deaktivieren, führen Sie systemctl --type swap aus, um den Verantwortlichen zu finden .einheit tauschen und maskieren.

Auslagerungsdatei

Als Alternative zum Erstellen einer gesamten Partition bietet eine Auslagerungsdatei die Möglichkeit, ihre Größe im laufenden Betrieb zu variieren, und lässt sich leichter ganz entfernen. Dies kann besonders wünschenswert sein, wenn der Speicherplatz knapp ist (z. B. eine SSD mit geringer Größe).

Warnung: Btrfs unterstützt Auslagerungsdateien mit Einschränkungen seit Linux Kernel Version 5.0. Weitere Informationen finden Sie unter Btrfs#Swap file.

Manuell

Erstellen von Auslagerungsdateien

Hinweis: Wenn Sie Btrfs verwenden, führen Sie zuerst die in Btrfs#Auslagerungsdatei beschriebene Prozedur aus, um die Auslagerungsdatei zu initialisieren.

Verwenden Sie dd, um eine Auslagerungsdatei in der Größe Ihrer Wahl zu erstellen. Beispiel: Erstellen einer 512-MiB-Auslagerungsdatei:

# dd if=/dev/zero of=/swapfile bs=1M count=512 status=progress
Hinweis: Die Verwendung von dd zum Zuweisen einer Auslagerungsdatei ist die portabelste Lösung, siehe swapon(8) § Dateien mit Löchern für Details.

Legen Sie die richtigen Berechtigungen fest (eine weltweit lesbare Auslagerungsdatei ist eine große lokale Sicherheitsanfälligkeit):

# chmod 600 /swapfile

Nachdem Sie die Datei mit der richtigen Größe erstellt haben, formatieren Sie sie zum Auslagern:

# mkswap /swapfile

Aktivieren:

# swapon /swapfile

Bearbeiten Sie abschließend die fstab-Konfiguration, um einen Eintrag für die Auslagerungsdatei hinzuzufügen:

/etc/fstab
/swapfile none swap defaults 0 0

Weitere Informationen finden Sie unter fstab# Verwendung.

Hinweis:

  • Die Auslagerungsdatei muss durch ihren Speicherort im Dateisystem angegeben werden, nicht durch ihre UUID oder BEZEICHNUNG.
  • Wenn Sie Btrfs verwenden, vergessen Sie nicht, das erstellte Subvolume ebenfalls zur Liste hinzuzufügen und die discard,autodefrag und Komprimierungsoptionen zu entfernen.

Auslagerungsdatei entfernen

Um eine Auslagerungsdatei zu entfernen, muss sie zuerst ausgeschaltet werden und kann dann entfernt werden:

# swapoff /swapfile# rm -f /swapfile

Entfernen Sie schließlich den entsprechenden Eintrag aus /etc/fstab.

Automatisiert

zram-Generator

Ziel dieses Tools ist die Erstellung von ZRAM-Geräten. Es ist in Rust geschrieben und befindet sich in systemds GitHub. Es kann mit dem Paket zram-generatorAUR installiert werden.Die Konfiguration ist einfach und in der README erklärt.

systemd-swap

Hinweis: Der Autor empfiehlt nun, stattdessen den zram-Generator zu verwenden, da die Commit-Frequenz niedrig ist und zram die Anforderungen der meisten Benutzer erfüllt.

systemd-swap ist ein Skript zum Erstellen von Hybrid-Swap-Space aus ZRAM-Swaps, Swap-Dateien und Swap-Partitionen. Es ist nicht mit dem systemd-Projekt verbunden.

Installieren Sie das Paket systemd-swap. Auskommentieren und setzen Sie swapfc_enabled=1 im Swap File Chunked Abschnitt von /etc/systemd/swap.conf. Starten/aktivieren Sie den Dienst systemd-swap.

Besuchen Sie die GitHub-Seite des Autors, um weitere Informationen zu erhalten und die empfohlene Konfiguration einzurichten.

Hinweis:

  • Wenn das Journal weiterhin die folgende Warnung anzeigt systemd-swap: WARN: swapFC: ENOSPC und keine Auslagerungsdatei erstellt wird, müssen Sie swapfc_force_preallocated=1 in /etc/systemd/swap.conf auskommentieren und setzen.
  • Die von systemd-swap erstellte Auslagerungsdatei kann nicht einfach für den Ruhezustand verwendet werden. Siehe systemd-swap Ausgabe 85.

Swap-Verschlüsselung

Siehe dm-crypt/Swap-Verschlüsselung.

Leistung

Swap-Vorgänge sind normalerweise erheblich langsamer als der direkte Zugriff auf Daten im RAM. Das vollständige Deaktivieren von Swap zur Verbesserung der Leistung kann manchmal zu einer Verschlechterung führen, da dadurch der für VFS-Caches verfügbare Speicher verringert wird, was zu häufigeren und kostspieligeren Festplatten-E/A führt.

Swap-Werte können angepasst werden, um die Leistung zu verbessern:

Swappiness

Der sysctl-Parameter swappiness stellt die Präferenz (oder Vermeidung) des Swap-Speicherplatzes durch den Kernel dar. Swappiness kann einen Wert zwischen 0 und 200 haben (maximal 100, wenn Linux < 5.8), der Standardwert ist 60. Ein niedriger Wert bewirkt, dass der Kernel das Auslagern vermeidet, ein hoher Wert bewirkt, dass der Kernel versucht, den Auslagerungsbereich zu verwenden, und ein Wert von 100 bedeutet, dass die E / A-Kosten als gleich angenommen werden. Es ist bekannt, dass die Verwendung eines niedrigen Werts für ausreichend Speicher die Reaktionsfähigkeit auf vielen Systemen verbessert.

Um den aktuellen Swappiness-Wert zu überprüfen:

$ sysctl vm.swappiness

Alternativ können die Dateien /sys/fs/cgroup/memory/memory.swappiness oder /proc/sys/vm/swappiness gelesen werden, um den rohen Integer-Wert zu erhalten.

Hinweis: Da /proc viel weniger organisiert ist und nur aus Kompatibilitätsgründen aufbewahrt wird, sollten Sie stattdessen /sys .

Um den Swappiness-Wert vorübergehend festzulegen:

# sysctl -w vm.swappiness=10

Um den Swappiness-Wert dauerhaft festzulegen, erstellen Sie eine sysctl.d(5) Konfigurationsdatei. Beispiel:

/etc/sysctl.d/99-swappiness.conf
vm.swappiness=10

Um zu testen und mehr darüber, warum dies funktionieren kann, werfen Sie einen Blick auf diesen Artikel.

VFS-Cache-Druck

Ein weiterer sysctl-Parameter, der die Swap-Leistung beeinflusst, ist vm.vfs_cache_pressure, der die Tendenz des Kernels steuert, den Speicher, der für das Caching von VFS-Caches verwendet wird, im Vergleich zu Pagecache und Swap zurückzufordern. Durch Erhöhen dieses Werts wird die Rate erhöht, mit der VFS-Caches zurückgewonnen werden. Weitere Informationen finden Sie in der Linux-Kernel-Dokumentation.

Priorität

Wenn Sie mehr als eine Auslagerungsdatei oder Auslagerungspartition haben, sollten Sie erwägen, jedem Auslagerungsbereich einen Prioritätswert (0 bis 32767) zuzuweisen. Das System verwendet Swap-Bereiche mit höherer Priorität, bevor Swap-Bereiche mit niedrigerer Priorität verwendet werden. Wenn Sie beispielsweise eine schnellere Festplatte (/dev/sda) und eine langsamere Festplatte (/dev/sdb) haben, weisen Sie dem Auslagerungsbereich auf dem schnellsten Gerät eine höhere Priorität zu. Prioritäten können in fstab über den pri Parameter vergeben werden:

/dev/sda1 none swap defaults,pri=100 0 0/dev/sdb2 none swap defaults,pri=10 0 0

Oder über den --priority Parameter von swapon:

# swapon --priority 100 /dev/sda1

Wenn zwei oder mehr Bereiche die gleiche Priorität haben und es die höchste verfügbare Priorität ist, werden Seiten auf einer Round-Robin-Basis zwischen ihnen zugewiesen.

Verwenden von zswap oder zram

Zswap ist eine Funktion des Linux-Kernels, die einen komprimierten Rückschreibcache für vertauschte Seiten bereitstellt. Dies erhöht die Leistung und verringert die IO-Operationen. ZRAM erstellt eine virtuelle komprimierte Auslagerungsdatei im Speicher als Alternative zu einer Auslagerungsdatei auf der Festplatte.

Striping

Aus Gründen der Swap-Leistung ist es nicht erforderlich, RAID zu verwenden. Der Kernel selbst kann auf mehreren Geräten tauschen, wenn Sie ihnen nur die gleiche Priorität in der /etc/fstab -Datei geben. Weitere Informationen finden Sie im Software-RAID-HOWTO.

Related Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.