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.
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
Die sachliche Richtigkeit dieses Artikels oder Abschnitts ist umstritten.
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
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.
- 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.
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).
Manuell
Erstellen von Auslagerungsdateien
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
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.
- 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
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.
- Wenn das Journal weiterhin die folgende Warnung anzeigt
systemd-swap: WARN: swapFC: ENOSPC
und keine Auslagerungsdatei erstellt wird, müssen Sieswapfc_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.
/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.