Swapping beim Raspberry Pi einrichten und deaktivieren

Mit Raspbian Jessie geprüft.

Swapping ist das Auslagern nicht oder selten genutzter Bestandteile des Arbeitsspeichers auf einen gesonderten Speicherbereich auf einer Festplatte. Entweder in eine gesonderte Partition oder in eine Datei. Beides ist der Swap-Speicher. Unter Windows ist der Swap-Speicher auch unter dem Begriff Auslagerungsdatei bekannt. Der wesentliche Unterschied ist der, dass die Auslagerungsdatei unter Windows im Prinzip beliebig anwachsen kann, während der Swap-Speicher, egal ob als Partition oder Datei, eine statische Größe aufweist.

Swapping ist aus zwei Gründen sinnvoll:

  1. Linux kann mit einem Swap-Speicher selten bis gar nicht benutzte Speicherbereiche aus dem RAM auslagern. Das ist dann der Fall, wenn Programme geladen wurden, deren Code nur teilweise genutzt wird. Dann liegen Code-Teile im Arbeitsspeicher, die nur selten oder gar nicht aus dem Arbeitsspeicher abgerufen werden, aber trotzdem den Speicherplatz belegen. Durch Swapping kann Linux Teile des belegten Arbeitsspeichers in den Swap-Speicher auslagern.
  2. Geht Linux der Arbeitsspeicher aus, dann versucht es aktive Programme in den Swap-Speicher zu verschieben. Dadurch verzögert Linux den Zeitpunkt an dem es ein "out of memory" liefern muss. Das hilft aber nur kurz und führt nur dazu, dass der Computer spürbar langsamer wird.

Nur weil ein Swap-Speicher vorhanden ist, heißt das nicht, dass ständig darauf geschrieben wird. Wie stark ein Linux "swappt" hängt von der "Swappiness" ab. Das ist ein Wert, dessen Skala von von 0 "nur wenn es nicht anders geht" bis 100 "bei jeder sich bietenden Gelegenheit" reicht. Es gibt hier allerdings keinen optimalen Wert für alle Fälle, sondern man muss je nach Anwendung, Nutzung und Hardware anders entscheiden. Man muss also schon ein paar Faktoren beachten.

Ein typischer Desktop-Computer benötigt zwangsläufig mehr Arbeitsspeicher, weil hier je nach Nutzung mal mehr mal weniger Anwendungen parallel laufen. Es kann sinnvoll sein, bei einem Desktop-Computer mit hoher Swappiness zu arbeiten (60 oder 70). Im Normalbetrieb würden ungenutzte Teile großer Programme nicht den Arbeitsspeicher belegen, sondern im Swap-Speicher abgelegt. Dadurch würde im Normalbetrieb der physikalisch verfügbare Arbeitsspeicher möglichst groß sein. Das heißt, die Anzahl der Anwendungen, die parallel laufen können, bevor einem der Arbeitsspeicher ausgeht, kann man erhöhen.

Auf einem Server kann Swap-Speicher nützlich, aber auch unnütz sein. Auf einem Server empfiehlt es sich, immer alles abzuschalten. Das spart Arbeitsspeicher und Prozessorleistung. Hier könnte man sogar auf Swapping ganz verzichten. Anders sieht es aus, wenn viele ruhende Prozesse Platz im Arbeitsspeicher belegen, dann ist Swapping mit einer hohen Swappiness sogar zu empfehlen.
Ein weiterer Grund für einen eher niedrigen Swappiness-Wert, ist eine langsame Festplatte. Weil Swapping immer auch das Gesamtsystem verlangsamt, äußert sich Swapping auf eine langsame Festplatte als weitere Verschlechterung der Performance. Hier arbeitet man dann eher mit einer Swappiness zwischen 0 und 30.

Speziell beim Raspberry Pi ist Swapping eigentlich kontraproduktiv. Swapping erhöht die Anzahl der Schreibzugriffe auf ein Speichermedium, auf dem sich der Swap-Speicher befindet. Das Betriebssystem und der Swap-Speicher befindet sich beim Raspberry Pi auf einer SD-Card, die nur eine begrenzte Anzahl an Schreibzugriffen verträgt, bevor einzelne Speicherzellen kaputt gehen. SD-Cards eignen sich überhaupt nicht zum Swapping.
Ein weiterer Grund auf Swapping zu verzichten ist die begrenzte Geschwindigkeit der SD-Card. Das macht das Swapping auf dem Raspberry Pi auch noch langsam.
Auch SSDs verkraften nur eine begrenzte Anzahl von Schreibzyklen. Auf eine SSD oder SD-Card zu swappen reduziert deren Lebensdauer und kann zu vorzeitigem Datenverlust führen.

Das sollte zu der Entscheidung führen, für SD-Cards und SSDs eine möglichst niedrige Swappiness und einen kleinen Swap-Speicher zu wählen oder gleich ganz auf Swapping zu verzichten. Selbstverständlich kann man Swapping komplett abschalten.
Wenn man Swapping ganz abschaltet will, muss einem klar sein, dass ohne Swapping der Zustand "out of Memory" viel eher erreicht wird. Bevor man das tut, sollte man sicherstellen, dass für die vorgesehene Anwendung wirklich genug physikalischer Arbeitsspeicher zur Verfügung steht.

Hinweis: Der Swap-Speicher und die Auslagerungsdatei bezeichnet man gelegentlich auch als virtuellen Arbeitsspeicher. Allerdings sind beide Speicherformen kein Ersatz für den Arbeitsspeicher oder als Arbeitsspeichererweiterung zu verstehen. Swap-Speicher ist ein zusätzlicher Speicherbereich, der als Puffer dient, um möglichst viel physikalischen Arbeitsspeicher für wichtige Anwendungen und Daten frei zu halten und um den Zeitpunkt, an dem der Arbeitsspeicher ausgeht, hinauszuzögern.

Aufgabe

  1. Finden Sie heraus, wie stark das Swapping von Ihrem Raspberry Pi in Anspruch genommen wird.
  2. Stellen Sie den Wert für die Swappiness fest und stellen Sie ihn auf einen sinnvollen Wert ein.
  3. Schalten Sie das Swapping vollständig ab.
  4. Richten Sie das Swapping wieder ein.

Lösung: Informationen zum Swapping

Folgendes Kommando zeigt, ob der Dienst für das Swapping läuft und wie groß der Speicherbereich ist.

sudo service dphys-swapfile status

Lösung: Swap-Speicherbereich leeren

Um festzustellen, ob der Swap-Speicher überhaupt gebraucht wird, deaktiviert man den Swap-Speicher. Dadurch wird er geleert.

sudo swapoff -a

Mit "free" kann man feststellen, dass die Swap-Speichergröße auf 0 kByte steht. Wenn nicht muss man Geduld haben, weil bei einem größeren Swap-Speicher kann es mehrere Minuten dauern, bis er leer ist.
Anschließend schaltet man ihn wieder ein.

sudo swapon -a

Mit "free" kann man prüfen, ob der Swap-Speicher wieder gefüllt wird. Wenn es das Ziel ist, auf Swap-Speicher zu verzichten, dann man noch die Swappiness auf einen sehr niedrigen Wert zu stellen.

Lösung: Swap-Speichergröße einstellen

Der verfügbare Swap-Speicher ist bei einem frisch installierten Raspbian auf 100 MByte eingestellt. Ja nach Anwendung kann das viel oder auch wenig sein. Es gibt die Regel, dass der Swap-Speicher die Größe von zwei Mal der Größe des physikalischen Arbeitsspeichers haben sollte. Diese Regel ist Quatsch. Die sinnvolle Größe des Swap-Speichers hängt von der Anwendung ab.
Beim Raspberry Pi gibt es keinen Grund an dieser Einstellung herumzuspielen. Wenn der Arbeitsspeicher des Raspberry Pi nicht ausreicht, dann hilft auch der Swap-Speicher nicht weiter.

Wenn trotzdem der Bedarf nach mehr Puffer besteht, dann lässt sich die Swap-Speichergröße ganz einfach in der Datei "/etc/dphys-swapfile" ändern.

sudo nano /etc/dphys-swapfile

Einfach statt der "100" einen anderen Wert eintragen. Anschließen speichern, schließen und neu starten.

Lösung: Swapping vollständig deaktivieren

Swapping vollständig zu deaktivieren ist nur dann sinnvoll, wenn der Raspberry Pi so genutzt wird, dass der Arbeitsspeicher auch ohne Swapping in großen Teilen zur Verfügung steht.
Man stellt das dadurch sicher, dass der reservierte Swap-Speicherbereich in der normalen Nutzung ungenutzt bleibt. Das sollte man zuerst dadurch erreichen, dass man die Swappiness auf "1" oder sogar "0" stellt. Erst wenn der Swap-Bereich dauerhaft ungenutzt bleibt, kann das vollständige Deaktivieren sinnvoll sein.

Zuerst stoppen wir den Swapping-Dienst:

sudo service dphys-swapfile stop

Anschließend prüfen wir, ob das Swapping abgeschaltet ist:

free

Wenn die Zeile "Swap" nur noch "0"-Werte aufweist, können wir den Swap-Dienst deaktivieren.

sudo systemctl disable dphys-swapfile

Oder vollständig entfernen.

sudo apt-get purge dphys-swapfile

Ein Neustart ist nicht notwendig.

Lösung: Swapping einrichten

Wenn man festgestellt hat, dass das mit dem Swapping doch eine gute Idee und sinnvoll ist, kann man es auch wieder einrichten.

sudo apt-get install dphys-swapfile

Nach der Installation wird ein Standard-Wert für die Swap-Datei gesetzt, den man an die eigenen Bedürfnisse anpassen muss. Gegebenenfalls auch der Wert für die Swappiness.
Der Dienst wird automatisch aktiviert und wird auch beim nächsten Neustart automatisch gestartet.

Dienste für Swapping starten und stoppen (auch automatisch)

Swapping starten:

sudo systemctl start dphys-swapfile

Laufendes Swapping stoppen:

sudo systemctl stop dphys-swapfile

Swapping soll in Zukunft automatisch starten:

sudo systemctl enable dphys-swapfile

Swapping soll in Zukunft NICHT mehr automatisch starten:

sudo systemctl disable dphys-swapfile

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Elektronik-Set Raspberry Pi Edition
Elektronik-Set Raspberry Pi Edition

Elektronik erleben mit dem Raspberry Pi mit Python und GPIO Zero

  • Leichter Einstieg ins Hardware-nahe Programmieren mit Python und GPIO Zero
  • Experimentieren und Programmieren ohne Vorkenntnisse
  • Sofort Loslegen mit All-in-one-Set

Elektronik-Set jetzt bestellen

Elektronik-Fibel

Elektronik einfach und leicht verständlich

Die Elektronik-Fibel ist ein Buch über die Grundlagen der Elektronik, Bauelemente, Schaltungstechnik und Digitaltechnik.

Das will ich haben!