You wouldn't download more RAM

Nur mal angenommen, man könnte mehr RAM herunterladen. Was spricht dagegen? Mittels zram ist das mehr oder weniger möglich - und ich zeige hier, wie.

Arbeitsspeicher ist physisch meist ja nur begrenzt verfügbar. Deswegen gibt es unter so gut wie jedem Betriebssystem einen Auslagerungsspeicher, auf den im Notfall zurückgegriffen werden kann.

Problem dabei: Der Auslagerungsspeicher liegt für gewöhnlich auf der Festplatte, d.h. er hat lange Zugriffszeiten und ist auch was Schreib-/Leserate angeht entsprechend langsam.

Unter Linux-basierten Betriebssystemen gibt es aber seit Jahren die Möglichkeit, den sogenannten Swap in komprimierter Form in den RAM zu verlegen. Mag sich eigenartig anhören, funktioniert aber erstaunlich gut. Ich habe das mittlerweile auf vielen sehr unterschiedlichen Geräten getestet (Raspberry Pi 3 & 4, meine Laptops, die Workstation, mehrere Server), bei denen ich regelmäßig an die Grenzen des physisch vorhandenen RAMs stoße, und kann es wirklich nur empfehlen. Die Systeme laufen damit deutlich besser.

Damit nicht die CPU zum Flaschenhals wird, braucht man allerdings auch schnelle Kompressionsverfahren. Hier haben sich die letzten Jahre drei herauskristallisiert, welche gute Kompressionsraten bei hoher Kompressionsgeschwindigkeit liefern: lz4, zstd, sowie lzo.

Unter Fedora ist das ganze sogar seit Version 33 Standard, und mit Version 34 gab's nochmal ein paar Verbesserungen.

Für Debian-basierte Systeme, und damit auch Ubuntu und Raspbian, muss man allerdings noch das Paket zram-tools nachinstallieren. Anschließend sollte man auch noch einen Blick in die Konfigurationsdatei unter /etc/default/zramswap werfen, und ggf. Parameter anpassen:

# Compression algorithm selection
# speed: lz4 > zstd > lzo
# compression: zstd > lzo > lz4
# This is not inclusive of all that is available in latest kernels
# See /sys/block/zram0/comp_algorithm (when zram module is loaded) to see
# what is currently set and available for your kernel[1]
# [1]  https://github.com/torvalds/linux/blob/master/Documentation/blockdev/zram.txt#L86
#ALGO=lz4

# Specifies the amount of RAM that should be used for zram
# based on a percentage the total amount of available memory
# This takes precedence and overrides SIZE below
PERCENT=50

# Specifies a static amount of RAM that should be used for
# the ZRAM devices, this is in MiB
#SIZE=256

# Specifies the priority for the swap devices, see swapon(2)
# for more details. Higher number = higher priority
# This should probably be higher than hdd/ssd swaps.
#PRIORITY=100

Nachdem ich mich wirklich viel zu lange mit dem Thema befasst habe, bin ich zum Schluss gekommen, dass die einzige Option, die ich wirklich explizit festlegen möchte, die Größe des verwendeten RAMs ist. Und den setze ich immer auf die Hälfte des verfügbaren Arbeitsspeichers, d.h. ich entferne wie oben bereits geschehen die Raute vor PERCENT=50.

Wer mag, kann sich gerne noch weiter in die einzelnen Kompressionsalgorithmen einlesen, Benchmarks durchführen, und um ein paar Nanosekunden mehr oder wenig kämpfen, aber letztendlich sind die Standardeinstellungen schon sehr gut.

Anschließend muss dann noch der entsprechende Service neu gestartet werden (systemctl restart zramswap.service), oder man führt alternativ einen Neustart durch.

Danach gibt's drei Möglichkeiten, mit je etwas unterschiedlicher Ausgabe, um zu prüfen, ob alles wie gewünscht funktioniert:

# free -h
               total        used        free      shared  buff/cache   available
Mem:           7.5Gi       1.4Gi       3.1Gi        77Mi       3.0Gi       5.8Gi
Swap:          3.7Gi          0B       3.7Gi

# swapon --show
NAME       TYPE      SIZE USED PRIO
/dev/zram0 partition 3.7G   0B  100

# zramctl
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4           3.7G   4K   64B    4K       4 [SWAP]

Wie man sehen kann, beträgt der physisch verfügbare RAM bei mir 8 GB, und der Swap entsprechend 4GB.

Und damit wäre auch die Frage im Titel beantwortet: Doch, ich würde. Und irgendwie fühlt es sich schon so an, als hätte man hier mal eben etwas mehr RAM, mit einem kleinen, downloadbaren Paket, nachgerüstet.


Weiterführende Links: