Nächste: Benutzerkonten, Vorige: Zugeordnete Geräte, Nach oben: Systemkonfiguration [Inhalt][Index]
Swap-Speicher, wie man ihn oft nennt, ist ein Bereich auf der Platte, wohin Speicherseiten verdrängt werden können. Als Seitenaustausch (englisch „Paging“) bezeichnet man das Verfahren, wie der für die Speicherverwaltung zuständige Prozess (d.h. der Linux-Kernel oder der „Default Pager“ in Hurd) entscheiden kann, manche Speicherseiten aus dem Arbeitsspeicher (RAM), die einem laufenden Prozess zugewiesen sind, ohne gerade benutzt zu werden, stattdessen auf der Platte zu speichern. Dadurch wird Arbeitsspeicher frei, wodurch mehr wertvoller schneller Speicher verfügbar wird; die Daten darin werden in den Swap-Speicher ausgelagert. Wenn das Programm auf eben diese Speicherseite zuzugreifen versucht, lädt der Speicherverwaltungsprozess die Daten zurück in den Speicher, damit das Programm sie benutzen kann.
Häufig begegnet man der falschen Vorstellung, Swap nütze nur dann etwas, wenn das System wenig Arbeitsspeicher zur Verfügung hat. Doch benutzen Kernels oft allen Arbeitsspeicher als Zwischenspeicher für Plattenzugriffe, um Ein- und Ausgaben zu beschleunigen. Deswegen steht durch den Austausch ungenutzter Teile des Arbeitsspeichers mehr RAM für diese Art von Caching zur Verfügung.
Wenn Sie genauer wissen wollen, wie Arbeitsspeicher aus Sicht eines monolithisch aufgebauten Kernels verwaltet wird, siehe Speicherkonzepte in Referenzhandbuch der GNU-C-Bibliothek.
Der Linux-Kernel unterstützt Swap-Partitionen und Swap-Dateien: Erstere reservieren eine ganze Plattenpartition für den Seitenaustausch, wohingegen Zweitere dafür eine Datei aus dem Dateisystem einsetzen (der Dateisystemtreiber muss sie unterstützen). Auf vergleichbaren Systemen haben beide die gleiche Leistung, also sollte man sich für das entscheiden, was es einem leichter macht. Partitionen sind „einfacher“ und brauchen keine Unterstützung durch das Dateisystem, aber man muss sie schon beim Formatieren der Platte zuweisen (außer man nutzt logische Datenträger). Dateien hingegen kann man jederzeit anlegen oder löschen.
Auch ist Swap-Speicher notwendig, damit das System in den Ruhezustand wechseln kann (man spricht auch von Suspend to Disk). Dabei wird der Systemzustand aus dem Arbeitsspeicher in den Swap-Speicher ausgelagert, bevor der Rechner herunterfährt, so dass er beim nächsten Start der Maschine wiederhergestellt werden kann. Der Ruhezustand benötigt höchstens so viel wie die halbe Größe des Arbeitsspeichers als konfigurierter Swap-Speicher. Es ist erforderlich, dass der Linux-Kernel die Information über zur Wiederherstellung zu nutzenden Swap-Speicher schon beim Booten mitgeteilt bekommt (über ein Kernel-Argument). Wenn eine Swap-Datei benutzt wird, muss deren Versatz gegenüber dem sie beinhaltenden Gerät ebenso von vornherein dem Kernel übergeben werden; dieser Wert muss erneuert werden, wenn die Datei als Swap-Speicher neu initialisiert wird, weil z.B. Sie ihre Größe geändert haben.
Vorsicht, Swap-Speicher wird beim Herunterfahren nicht genullt. Sensible Daten (wie Passwörter) können sich darin befinden, wenn deren Speicherseiten verdrängt wurden. Daher sollten Sie in Betracht ziehen, Ihren Swap-Speicher auf ein verschlüsseltes Gerät zu legen (siehe Zugeordnete Geräte).
Objekte dieses Typs repräsentieren Swap-Speicher. Sie weisen folgende Komponenten auf:
target
Welches Gerät oder welche Datei verwendet werden soll, angegeben entweder
über die UUID, über ein file-system-label
-Objekt mit der Bezeichnung
oder über eine Zeichenkette wie in der Definition eines
file-system
-Objekts für ein Dateisystem (siehe Dateisysteme).
dependencies
(Vorgabe: '()
)Eine Liste von file-system
-Objekten oder
mapped-device
-Objekten, die vorausgesetzt werden, damit der Speicher
verfügbar ist. Achtung: Genau wie bei file-system
-Objekten gilt auch
für die Abhängigkeiten im dependencies
-Feld, dass zum Hochfahren des
Systems notwendige Abhängigkeiten, die beim Start der Anwendungsebene („User
Space“) eingebunden werden, nicht durch Shepherd verwaltet werden, sondern
weggefiltert werden.
priority
(Vorgabe: #f
)Wird nur beim Linux-Kernel unterstützt. Entweder #f
, damit
keine Priorität festgelegt wird, oder eine ganze Zahl zwischen 0 und
32767. Der Kernel wird erst den Swap-Speicher mit der höheren Priorität für
den Seitenaustausch benutzen und bei gleicher Priorität im Rundlauf wechseln
(„Round-Robin-Verfahren“). Swap-Speicher ohne festgelegte Priorität wird
später als priorisierter verwendet, in der angegebenen Reihenfolge ohne
Round Robin.
discard?
(Vorgabe: #f
)Wird nur beim Linux-Kernel unterstützt. Wenn es wahr ist, benachrichtigt der Kernel die Steuereinheit (Controller) der Platte, welche Seiten verworfen wurden, zum Beispiel mit der TRIM-Operation auf SSD-Speicher.
Hier sind einige Beispiele:
(swap-space (target (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
Die Swap-Partition mit der angegebenen UUID verwenden. Sie können die UUID
einer Linux-Swap-Partition erfahren, indem Sie swaplabel
Gerät
ausführen, wobei Gerät der Dateiname unter /dev
für die Partition ist.
(swap-space
(target (file-system-label "swap"))
(dependencies mapped-devices))
Die Swap-Partition mit der Bezeichnung swap
verwenden. Die
Bezeichnung können Sie finden, nachdem all die zugeordneten Geräte aus
mapped-devices geöffnet wurden. Auch hier können Sie mittels
swaplabel
-Befehls die Bezeichnung einer Linux-Swap-Partition
einsehen und ändern.
Nun folgt ein anspruchsvolleres Beispiel. Sie sehen auch den entsprechenden
Teil zu file-systems
aus der Deklaration eines
operating-system
.
(file-systems (list (file-system (device (file-system-label "root")) (mount-point "/") (type "ext4")) (file-system (device (file-system-label "btrfs")) (mount-point "/btrfs") (type "btrfs")))) (swap-devices (list (swap-space (target "/btrfs/swapfile") (dependencies (filter (file-system-mount-point-predicate "/btrfs") file-systems)))))
Die Datei /btrfs/swapfile als Swap-Speicher benutzen, die abhängig
ist von dem als /btrfs eingebundenen Dateisystem. Sie sehen, wie wir
mit Guiles filter
-Prozedur das Dateisystem auf elegante Weise
auswählen!
(swap-devices (list (swap-space (target "/dev/mapper/my-swap") (dependencies mapped-devices)))) (kernel-arguments (cons* "resume=/dev/mapper/my-swap" %default-kernel-arguments))
Obiges Schnipsel im operating-system
einer Betriebssystemdeklaration
aktiviert das zugeordnete Gerät /dev/mapper/my-swap (was aus einem
verschlüsselten Gerät kommen kann) als Swap-Speicher und teilt dem Kernel
über das Kernel-Argument resume
mit, dass es für den Ruhezustand
benutzt werden soll (siehe operating-system
-Referenz,
kernel-arguments
).
(swap-devices (list (swap-space (target "/swapfile") (dependencies (filter (file-system-mount-point-predicate "/") file-systems))))) (kernel-arguments (cons* "resume=/dev/sda3" ;Gerät, das /swapfile enthält "resume_offset=92514304" ;Versatz, den /swapfile darauf hat %default-kernel-arguments))
Das zweite Schnipsel eines operating-system
zeigt, wie man die
Swap-Datei /swapfile für den Ruhezustand benutzen kann, indem dem
Kernel die Partition, auf der sie liegt, (im resume
-Argument) und ihr
Versatz auf dieser Partition (im resume_offset
-Argument) mitgeteilt
werden. Letzteren Wert können Sie der Ausgabe des Befehls filefrag
-e
entnehmen; er ist die erste Zahl, die gleich unter dem Spaltenkopf
physical_offset
steht (mit dem zweiten Befehl wird der Wert direkt
ausgelesen):
$ sudo filefrag -e /swapfile Filesystem type is: ef53 File size of /swapfile is 2463842304 (601524 blocks of 4096 bytes) ext: logical_offset: physical_offset: length: expected: flags: 0: 0.. 2047: 92514304.. 92516351: 2048: … $ sudo filefrag -e /swapfile | grep '^ *0:' | cut -d: -f3 | cut -d. -f1 92514304
Nächste: Benutzerkonten, Vorige: Zugeordnete Geräte, Nach oben: Systemkonfiguration [Inhalt][Index]