1841809

Swap-Speicher bei Linux optimieren

25.10.2013 | 11:33 Uhr |

Auslagerungsspeicher dient Linux nicht nur als Ersatzteillager, wenn der RAM knapp wird. Wir verraten, was der Swap-Speicher noch alles kann und wie Sie ihn optimal einrichten.

Eine der ersten Entscheidungen, die Linux-Anwender bei der Installation eines neuen Systems treffen, ist die Größe des Auslagerungsspeichers. Die grafischen Installer von Ubuntu, Mint, Open Suse und Fedora schlagen dazu eine Swap-Partition vom Umfang des installierten RAM vor. Da die meisten neuen PCs und Notebooks über ausreichend RAM für alltägliche Aufgaben bieten, stellen sich viele Anwender die Frage, ob Swappen notwendig ist und ob es bei der Einrichtung Optimierungsbedarf gibt. Denn die Auslagerung von Speicher auf Festplatte ist immer eine zähe Angelegenheit und erscheint als ineffiziente Notlösung.

Theorie: Speicherverwaltung und Auslagerung von Linux

Vorgeschlagene Partitionen des Ubuntu-Installers: Die Swap-Partition wird üblicherweise in der Größe des verfügbaren RAM angelegt, um den Ruhezustand zu ermöglichen.
Vergrößern Vorgeschlagene Partitionen des Ubuntu-Installers: Die Swap-Partition wird üblicherweise in der Größe des verfügbaren RAM angelegt, um den Ruhezustand zu ermöglichen.

Wer ein laufendes Linux-System länger beobachtet, wird feststellen, dass Swap auch dann genutzt wird, wenn noch genügend freies RAM zur Verfügung steht. Denn die Speicherverwaltung des Systems tut mehr, als Swap einfach als langsame Reserve für Engpässe zu nutzen. Der Arbeitsspeicher im RAM steht zunächst den unantastbaren Prozessdaten des Kernels, in zweiter Linie dann Programmen und deren Stacks zur Verfügung. Diese Speicherseiten müssen so lange verfügbar bleiben, bis das Programm beendet ist oder von sich aus Arbeitsspeicher freigibt. Einen weiteren Teil des RAM nutzt der Kernel automatisch als Cache, wo von Festplatte gelesene Daten liegen – etwa gemeinsam genutzte Bibliotheken. Der Cache beschleunigt den Programmablauf enorm, ist aber zum Ausführen eines Programms nicht essenziell, da diese Daten sowieso auch auf Festplatte vorliegen.

Auslagerungsdatei im Blick: Wie Linux Swap nutzt, zeigt jeder Systemmonitor an – hier der gnome-system-monitor, der auch bei Unity zur Grundausstattung gehört.
Vergrößern Auslagerungsdatei im Blick: Wie Linux Swap nutzt, zeigt jeder Systemmonitor an – hier der gnome-system-monitor, der auch bei Unity zur Grundausstattung gehört.

Kommt das System an die Grenzen des verfügbaren RAM, hat der Kernel zwei Möglichkeiten: Er kann zunächst den belegten Cache reduzieren, da die dort abgelegten Daten zwar nützlich, aber nicht unbedingt nötig sind. Oder der Kernel lagert die ungenutzten oder selten benötigten Speicherseiten laufender Programmen in den langsamen Swap-Bereich aus. Fast jede größere Anwendung erzeugt ungenutzte Speicherseiten, denn ein Programm lädt bei der Initialisierung erst mal alle Komponenten und erzeugt redundante Prozessdaten, die im weiteren Programmverlauf nicht mehr gebraucht werden. Die Auslagerung dieser Speicherseiten gelingt ohne spürbare Geschwindigkeitseinbußen, und die Speicherverwaltung kann das so freigegebene RAM wieder als Cache oder für neue Programme nutzen. Langsam wird ein System erst, wenn der Kernel den Cache bereits komplett reduziert hat und aktiv genutzte Speicherseiten in das langsame Swap umschichten muss.

Um die Speicherauslastung eines Linux- Systems anzuzeigen, dient der Befehl free -m. In der tabellarischen Ausgabe ist im oberen Teil hinter „Mem“ das physikalische RAM zu sehen, darunter folgt hinter „Swap“ die Gesamtgröße des Auslagerungbereichs (Total), dessen aktuelle Auslastung (Used) und der noch freien Swap-Speicher (Free).

Swap-Verhalten optimieren und Tempo steigern

Praxis: Die richtige Größe für den Swap-Speicher

Kein Swap: In Ausnahmefällen läuft ein Linux-System auch ohne Auslagerungsbereich. Hier verfügt ein PC über 8 GB physikalisches RAM, und Swap wurde komplett deaktiviert.
Vergrößern Kein Swap: In Ausnahmefällen läuft ein Linux-System auch ohne Auslagerungsbereich. Hier verfügt ein PC über 8 GB physikalisches RAM, und Swap wurde komplett deaktiviert.

Über Jahre hielt sich die Faustregel, dass der Auslagerungsspeicher die doppelte Größe des RAM erhalten muss. Diese Regel ist überholt, denn sie galt so nur für Kernel der 2.4er-Reihe. Allerdings sind Software-Entwickler auch weiterhin mit einem großzügigen Swap dieser Größenordnung gut beraten, da Speicherabbilder (Core Dumps) zum Debugging dort ebenfalls vorübergehend viel Platz benötigen. Für Anwender ist dagegen ist ein Swap- Bereich vom Umfang des vorhandenen RAM mehr als ausreichend, und dies ist auch in den meisten Distributionen die typische Voreinstellung des Installers. Diese Größe wird auch deshalb gewählt, da der Auslagerungsbereich auch dem Ruhezustand (Suspend-to- Disk) für Notebooks dient, der im Linux- Kernel zahlreicher Distributionen standardmäßig aktiviert ist.

Linux ohne Swap-Partition installieren

Es ist trotzdem möglich, ein Linux-System ganz ohne Swap zu betreiben – sofern es mit RAM in rauen Mengen ausgestattet ist und der Ruhezustand nicht gebraucht wird. Zwar beschwert sich der Installer vieler Linux-Distribution über eine fehlende Swap-Partition, die Installation wird trotzdem aber gelingen, und das System läuft ohne Probleme oder deutliche Leistungseinbußen – vorausgesetzt, es ist jederzeit ausreichend RAM für alle laufenden Programme verfügbar. Ansonsten reagiert der Linux-Kernel unbarmherzig: Wenn das RAM erschöpft sein sollte, bleibt das System ohne weitere Vorwarnung komplett stehen, so dass nur noch ein Kaltstart hilft.

In Frage kommt der Verzicht auf Swap also nur, wenn sowieso viel RAM vorhanden ist – je nach Nutzung mindestens zwischen 8 und 16 GB. Die Installation eines Linux-Systems ganz ohne Swap-Bereich ist aber auch dann vorteilhaft, wenn Sie später die manuelle Einrichtung einer Auslagerungsdatei anstatt einer Partition planen.

Swap-Datei statt eigene Partition

Auslagerungsdatei statt Partition: Die Datei hat den Vorteil, dass Sie die Swap-Größe später anpassen können, indem Sie eine zusätzliche Swap-Datei erstellen und einbinden.
Vergrößern Auslagerungsdatei statt Partition: Die Datei hat den Vorteil, dass Sie die Swap-Größe später anpassen können, indem Sie eine zusätzliche Swap-Datei erstellen und einbinden.

Dass Linux ganze Partitionen als Swap bevorzugt, hat historische Gründe, obwohl das System dafür auch eine Auslagerungsdatei nutzen kann: Bis Kernel 2.6 war die Auslagerungsaktivität bei der Verwendung einer Datei noch ein gutes Stück langsamer als bei einer eigenen Partition. Diesen Nachteil kennen aktuelle Kernel-Versionen nicht mehr, und Auslagerungsdateien sind jetzt genauso schnell. Andererseits vereinfacht eine separate Swap-Partition Komplett-Backups: Wer mit einer Imaging- Software wie Clonezilla, Acronis True Image oder Norton Ghost arbeitet, kann sich die Sicherung der Swap- Partition schenken, da diese Daten zur Wiederherstellung eines Systems überflüssig sind. Eine Swap-Datei wird dagegen im Komplett-Backup mitgesichert. Trotzdem hat die nachträgliche Einrichtung einer Swap-Datei Vorteile: Sie behalten die Kontrolle darüber, wie viel Platz Swap auf der Festplatte einnehmen darf. Denn die Größe einer Auslagerungsdatei können Sie nach der Installation im laufenden System anpassen oder die Datei einfach auf eine andere Festplatte verschieben, was bei einer Swap-Partition nicht ganz so einfach ist.

Um eine Swap-Datei anzulegen, brauchen Sie eine Reihe von Befehlen, die Sie als root oder mittels sudo in der Shell ausführen. Eine zunächst mit Nullen gefüllte Datei namens „swap“ mit 524 MB Größe erzeugen Sie beispielsweise mit diesem Kommando:

dd if=/dev/zero of=/[Pfad]/swap bs=1M count=500

Anschließend passen Sie deren Rechte an, damit nur root die Swap-Datei lesen und beschreiben darf:

chmod 600 /[Pfad]/swap

Nun formatieren Sie die Datei als Auslagerungsspeicher mittels

mkswap /[Pfad]/swap

und aktivieren die neu erstellte Swap- Datei:

swapon -v /[Pfad]/swap

Danach kann das System den Bereich sofort nutzen. Dies können Sie mit dem Befehl swapon -s kontrollieren, der alle verfügbaren Auslagerungsbereiche anzeigt. Ein weiterer Handgriff ist trotzdem noch nötig, denn bisher würde sich das System nach einem Neustart nicht an die neue Swap-Datei erinnern. Um diese permanent einzurichten, bearbeiten Sie die Datei „/etc/ fstab“ behutsam und mit root-Privilegien und fügen Sie dort als letzte Zeile

/[Pfad]/swap none swap sw 0 0

ein, gefolgt von einer abschließenden Leerzeile. Achtung: Ein ungültiger Eintrag in der Datei „fstab“ führt bei einem Neustart zu Problemen, testen Sie die Konfiguration deshalb zuvor mit diesem Befehl:

mount -a -f

Damit bleiben Ihnen Überraschungen beim Booten wegen kritischen Konfigurationsfehlern erspart. Sie können übrigens mehrere Auslagerungsbereiche einrichten, egal ob als Datei oder als Partition.

Zu beachten ist, dass der Ruhezustand des Linux-Kernels mit einer Swap-Datei standardmäßig nicht funktioniert. Auf einem Notebook ist die Verwendung einer Datei statt einer Partition also nicht empfehlenswert.

SSDs unter Linux verwenden

Auslagerungsaktivität mit „Swappiness“ anpassen

„Swapiness“: Auf schneller SSD ist es kein Nachteil, möglichst viel auszulagern. Der Wert von „Swappiness“ weist den Kernel an, ungenutzte Speicherseiten früher umzuschichten.
Vergrößern „Swapiness“: Auf schneller SSD ist es kein Nachteil, möglichst viel auszulagern. Der Wert von „Swappiness“ weist den Kernel an, ungenutzte Speicherseiten früher umzuschichten.

Linux-Systeme bieten seit dem Kernel 2.6 die Möglichkeit, das Swap-Verhalten über den Parameter „Swappiness“ zu beeinflussen. Dieser darf einen Wert zwischen 10 und 100 annehmen. Je höher der Wert, desto aggressiver wird der Kernel versuchen, wenig benutzte Speicherseiten aus dem RAM in die Swap-Partition zu schreiben. Der voreingestellte Standardwert liegt bei 60. Ein höherer Wert kann die Systemleistung verbessern, wenn die Swap- Partition oder Auslagerungsdatei auf einer schnellen SSD liegt. Denn dann bleibt einerseits den laufenden Programmen mehr RAM, andererseits bremst die Auslagerung von selten benötigten Speicherseiten das System noch kaum aus.

Um temporär den Wert der Swappiness zu erhöhen, öffnen Sie ein Terminal und geben dieses Kommando als root oder mit sudo ein:

sysctl vm.swappiness=90

Sie können natürlich auch einen niedrigeren Wert als 60 eintragen, um die Auslagerungsaktivität zu reduzieren. Um die Änderungen auch dauerhaft zu speichern, müssen diese in einer Konfigurationsdatei hinterlegt werden. Öffnen Sie dazu ein Terminal, und geben Sie dort

sudo -H gedit /etc/sysctl.conf

ein, um die Konfigurationsdatei „sysctl.conf“ mit dem Editor gedit zu öffnen. Suchen Sie in der Datei nun nach einem Eintrag „swappiness”. Bei den meisten Distributionen müssen Sie diese Zeile in der Datei erst noch selbst hinzufügen:

vm.swappiness=90

Sind Sie mit dem Verhalten nicht zufrieden, lässt sich die Änderung auf dem gleichen Wege wieder rückgängig machen.

0 Kommentare zu diesem Artikel
1841809