Auf Linux-Systemen mit wenig Arbeitsspeicher kann durch Komprimierung zusätzlich Platz geschaffen werden.
Ist der Arbeitsspeicher bei Linux-Systemen aufgebraucht, wird versucht momentan nicht benötigte Daten auf die vergleichsweise langsame Festplatte oder Speicherkarte auszulagern. Die Auslagerung bremst das System aus und ist zum Beispiel bei Systemen mit Flash-Speicher unerwünscht, da dieser Speicher durch die häufigen Schreiboperationen schneller altert. Durch die Komprimierung des Arbeitsspeichers kann erreicht werden, dass die Auslagerung weiter hinausgezögert bzw. sogar komplett vermieden werden kann. Eine Möglichkeit für das Anlegen von komprimierten Block-Geräten im Arbeitsspeicher ist zRAM, welches im weiteren Verlauf des Artikels genauer beschrieben wird.
Das zRAM Modul befindet sich bereits seit geraumer Zeit im Linux Kernel, hat es jedoch erst mit Version 3.14 in den offiziellen Zweig geschafft. Zum Einsatz kommt diese Technik bereits bei Chrome OS und teilweise auch bei Android. Auch Linux Distributionen, die sich speziell an Systeme mit wenige Arbeitsspeicher richten, haben zRAM aktiviert. Ein Vertreter ist Lubuntu ab Version 13.10. Ein Nachteil dieser Technik ist jedoch, dass die Komprimierung zusätzliche Ressourcen des Prozessors beansprucht.
Im folgenden Beispiel ist die Auslastung des Arbeitsspeichers bei einem System mit ca. 1GB Arbeitsspeicher und ca. 2GB Swap Speicher vor dem Einsatz von zRAM zu sehen. Erkennbar ist, dass das System bereits begonnen hat erste Daten auf die Festplatte auszulagern.
$ free -m
total used free shared buffers cached
Mem: 1005 901 103 10 38 187
-/+ buffers/cache: 675 329
Swap: 2047 23 2024
$ cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-4 partition 2097148 24036 -1
Damit der Arbeitsspeicher komprimiert werden kann, müssen weitere Schritte durchgeführt werden. Das folgende Beispiel zeigt ein Bash-Skript, welches die minimalen Befehle enthält und als root-Nutzer ausgeführt werden muss.
#!/bin/bash
modprobe zram num_devices=2
echo $((512*1024*1024)) > /sys/block/zram0/disksize
echo $((512*1024*1024)) > /sys/block/zram1/disksize
mkswap /dev/zram0
mkswap /dev/zram1
swapon -p 10 /dev/zram0
swapon -p 10 /dev/zram1
In dem vorgestellten Bash-Skript wird zunächst das entsprechende Modul mit der Unterstützung von zwei komprimierten Block-Geräten geladen. Anschließend werden die Beiden neuen Block-Geräte mit einer Größe von je 512MByte angelegt. Danach werden zwei neue Swap Medien im komprimierten Arbeitsspeicher erzeugt. Zum Abschluss werden beide Swap-Bereiche mit einer Priorität von 10 aktiviert. Die Angabe der Priorität bewirkt, dass der komprimierte Arbeitsspeicher gegenüber der Festplatte bevorzugt wird.
Hinweis: Die Größe der komprimierten Block-Geräte orientiert sich am vorhanden Arbeitsspeicher und sollte diesen nicht übersteigen.
Nachdem das weiter oben vorgestellte Skript bzw. die darin enthaltenen Befehle als root-Benutzer ausgeführt wurden, sieht die Speicherauslastung wie folgt aus.
$ free -m
total used free shared buffers cached
Mem: 1005 896 108 10 42 177
-/+ buffers/cache: 677 327
Swap: 3071 46 3025
$ cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-4 partition 2097148 24092 -1
/dev/zram0 partition 524284 11952 10
/dev/zram1 partition 524284 11964 10
Zu sehen ist, dass zwei weitere Swap-Geräte vorhanden sind und der Swap-Speicher insgesamt um 1GB größer ist.