Skip to main content

Linux - ZRAM Config

Ziel: ZRAM als schnellen Swap einrichten (komprimierter RAM statt SSD/HDD), passende Größe für 2 GB bis 128 GB RAM wählen, Prioritäten korrekt setzen, Latenz/CPU-Last sauber austarieren, Verifikation & Monitoring verstehen.

Voraussetzung: Die Installations-/Systemänderungsbefehle erfordern Root-Rechte (z. B. via Root-Shell). Reine Anzeige-/Monitoring-Befehle funktionieren auch als normaler Nutzer.


Inhalt

  1. Grundidee: Was ist ZRAM und wofür nutzt man es?
  2. Quick-Check: Ist ZRAM aktiv und sinnvoll priorisiert?
  3. Sizing: Empfehlungen von 2 GB bis 128 GB RAM
  4. Kompressions-Algorithmen: lz4 vs. zstd (und warum)
  5. Installation (Debian/Ubuntu)
  6. Konfiguration: systemd-zram-generator (empfohlen)
  7. Konfiguration: zram-tools (Alternative)
  8. VM-/Kernel-Tuning: warum diese sysctl-Werte?
  9. Disk-Swap: wann, warum, Priorität
  10. Verifizieren & Monitoring (inkl. PSI)
  11. Rollback: wie man es sauber rückgängig macht

Grundidee: Was ist ZRAM und wofür nutzt man es?

  • ZRAM erstellt ein Blockdevice im RAM (z. B. /dev/zram0), das komprimiert wird und als Swap dienen kann.
  • Warum? Wenn RAM knapp wird, landen selten genutzte Speicherseiten im Swap. Mit ZRAM passiert das im RAM (schnell), statt auf SSD/HDD (langsam, verschleißfördernd).
  • Trade-off: Kompression braucht CPU. Je nach Workload ist weniger CPU-Last wichtiger als maximale Kompression.

Merke: ZRAM ist ein Puffer gegen Speicherpeaks und OOM, kein Ersatz für realistischen RAM-Bedarf.


Quick-Check: Ist ZRAM aktiv und sinnvoll priorisiert?

Kommandos
swapon --show
free -h
zramctl
cat /sys/block/zram0/mm_stat
cat /proc/pressure/memory

Warum genau diese Befehle?

 

swapon --show
Zeigt aktive Swap-Geräte (ZRAM und ggf. Disk-Swap), inkl. Größe, Nutzung und Priorität. Wichtigster Punkt: ZRAM sollte eine höhere Priorität haben als Disk-Swap, damit zuerst der schnelle komprimierte RAM genutzt wird.
free -h
Gibt eine grobe Übersicht über RAM/Swap. Besonders relevant ist verfügbar: das ist die Menge RAM, die ohne massiven Stress freigemacht werden kann (Cache wird dabei mitgedacht). Unterschied zu swapon: free zeigt Gesamtbild, swapon zeigt Swap-Details.
zramctl
Zeigt ZRAM-spezifische Infos: Algorithmus, virtuelle Disksize, sowie wieviel unkomprimierte Daten im ZRAM liegen und wieviel realer RAM dafür belegt wird. Unterschied zu free: free sieht nur „Swap belegt“, zramctl zeigt die Kompressionswirkung.
cat /sys/block/zram0/mm_stat
Detail-Statistiken aus dem Kernel: u. a. wieviel Daten im ZRAM liegen und wie effektiv komprimiert wird. Gut, um einzuschätzen, ob z. B. zstd wirklich einen Vorteil bringt oder nur CPU verbrennt.
cat /proc/pressure/memory
PSI (Pressure Stall Information) zeigt, ob Prozesse messbar auf Speicher warten mussten. Warum das wichtig ist: Ruckler, Audio-Aussetzer und „alles zäh“ korrelieren oft eher mit PSI als mit „Swap ist voll“.

 


Sizing: Empfehlungen von 2 GB bis 128 GB RAM

Regel: Wenig RAM → aggressiver (mehr ZRAM), viel RAM → moderater (ZRAM als Sicherheitsnetz). Ziel ist weniger OOM und weniger Disk-Swap, nicht „unendlich Tabs durch Kompression“.

RAM ZRAM-Größe (Richtwert) Warum gerade so? Typische Nutzung
2 GB 75–100% (1.5–2 GB) Ohne Puffer kommt es schnell zu OOM. ZRAM schafft Luft, ohne Disk-I/O. Minimal-Desktop, kleine Server, VMs
4 GB 75–100% (3–4 GB) Hier bringt ZRAM oft den größten „Feeling“-Gewinn: weniger harte Memory-Kanten. Browser/Office/kleine Tools
8 GB ~75% (6 GB) Genug, um Peaks abzufedern, ohne zu viel in Swap zu driften. Allround-Desktop
16 GB 60–75% (10–12 GB) Guter Sweet Spot: ZRAM ist Reserve, aber RAM bleibt Hauptarbeitsfläche. IDE/Browser/leichte VMs
32 GB 50–75% (16–24 GB) Bei Tab/IDE/Meetings hilft mehr ZRAM, Disk-Swap zu vermeiden. Heavy Desktop/Workstation
64 GB 40–50% (24–32 GB) Mehr RAM → ZRAM wird seltener gebraucht, sollte aber Peaks fangen. Builds, VMs, Containers
128 GB 25–40% (32–48 GB) ZRAM als Sicherheitsnetz. Zu groß kann „Swap-Gewohnheiten“ fördern. Große Workstations/Server

Merke: ZRAM „Disksize“ ist virtuell. Realer RAM wird erst belegt, wenn Seiten wirklich im ZRAM landen. Trotzdem beeinflusst großer ZRAM die Swap-Strategie des Systems, deshalb bei sehr viel RAM moderater bleiben.


Kompressions-Algorithmen: lz4 vs. zstd

Algorithmus Stärke Schwäche Wann nehmen?
lz4 Sehr niedrige CPU-Last, geringe Latenz Weniger Kompression (mehr RAM-Verbrauch pro Swap-Seite) Meetings/Audio/Low-Latency wichtig, schwächere CPU, Desktop „smooth“
zstd Sehr gute Kompression (mehr „virtueller RAM“) Höhere CPU-Last als lz4 Viele Daten/Tabs/IDE/VMs und CPU ist nicht der Engpass

Merke: Wenn PSI/Audio-Ruckler dein Problem sind, ist lz4 oft die bessere Wahl. Wenn OOM/disk-swap dein Problem sind, bringt zstd oft mehr Nutzwert.


Installation (Debian & Ubuntu)

Option A (empfohlen): systemd-zram-generator
apt update
apt install -y systemd-zram-generator

 

apt update
Aktualisiert Paketlisten. Unterschied zu install: ohne frische Listen kann apt alte Versionen/Abhängigkeiten sehen oder Pakete nicht finden.
apt install -y systemd-zram-generator
Installiert den Generator, der beim Booten ZRAM-Devices nach Konfig erzeugt. Warum das bevorzugt ist: saubere systemd-Integration, klare Konfigdatei, gut wartbar. Das -y beantwortet die Rückfrage automatisch (nützlich für Copy/Paste, weniger nützlich für Menschen, die gern überraschende Dinge abbrechen).

 

Option B (Alternative): zram-tools
apt update
apt install -y zram-tools

 

apt install -y zram-tools
Installiert ein klassisches Setup-Skript/Service für ZRAM-Swap. Unterschied zu Option A: funktioniert oft okay, aber weniger flexibel und weniger „systemd-nativ“.

 


Konfiguration: systemd-zram-generator (empfohlen)

Datei: /etc/systemd/zram-generator.conf

Konfig-Snippets nach RAM-Klasse

2–4 GB RAM (maximaler Puffer, geringe CPU-Last)

[zram0]
zram-size = ram * 1.0
compression-algorithm = lz4
swap-priority = 100

Warum: Bei Low-RAM ist OOM die größte Gefahr. lz4 hält CPU-Latenz klein, während 100% ZRAM die Überlebenschancen erhöht.

8–16 GB RAM (Allround)

[zram0]
zram-size = ram * 0.75
compression-algorithm = zstd
swap-priority = 100

Warum: 75% ist ein guter Kompromiss. zstd holt mehr Effekt aus dem ZRAM heraus, weil hier oft viele ähnliche Seiten anfallen (Browser/IDE).

32 GB RAM (Heavy Desktop/Workstation)

[zram0]
zram-size = ram * 0.60
compression-algorithm = zstd
swap-priority = 100

Warum: Genug ZRAM als Reserve, aber nicht so viel, dass das System „Swap ist ja da“ als Einladung versteht.

64–128 GB RAM (Sicherheitsnetz, Latenz wichtiger)

[zram0]
zram-size = ram * 0.35
compression-algorithm = lz4
swap-priority = 100

Warum: Bei viel RAM sind harte Peaks seltener. Wenn doch, willst du glatte Latenz statt maximale Ratio. Daher moderater Size + lz4.

Konfig anwenden
systemctl daemon-reload
systemctl restart systemd-zram-setup@zram0.service

 

systemctl daemon-reload
Lädt systemd-Konfiguration neu ein. Warum: systemd merkt sich Units/Generator-Ergebnisse; ohne Reload kann eine Änderung wirkungslos bleiben. Unterschied zu restart: Reload aktualisiert systemd selbst, Restart startet nur den Dienst neu.
systemctl restart systemd-zram-setup@zram0.service
Initialisiert/konfiguriert zram0 neu. Warum: Wendet neue ZRAM-Größe/Algorithmus an, ohne Neustart. Wenn die Unit anders heißt: systemctl list-units --type=service --all nutzen und im Pager nach „zram“ suchen.

 


Konfiguration: zram-tools (Alternative)

Datei: /etc/default/zramswap

Beispiele (mit Begründung)
# 2 GB RAM
ALGO=lz4
PERCENT=100
PRIORITY=100

# 8 GB RAM
# ALGO=zstd
# PERCENT=75
# PRIORITY=100

# 32 GB RAM
# ALGO=zstd
# PERCENT=60
# PRIORITY=100

# 128 GB RAM
# ALGO=lz4
# PERCENT=35
# PRIORITY=100

 

ALGO
Legt den Kompressionsalgorithmus fest. lz4 ist latenzfreundlicher, zstd komprimiert besser. Unterschied: CPU vs. Kompressionsrate (siehe Tabelle oben).
PERCENT
Prozentualer Anteil des RAM, der als ZRAM-Disksize verwendet wird. Warum: Steuert, wie viel „Reserve“ du hast. Unterschied zu systemd-zram-generator: Dort nutzt man meist Formeln (ram * 0.75) statt Prozent-Integer.
PRIORITY
Swap-Priorität für ZRAM. Warum: ZRAM soll vor Disk-Swap drankommen. Priorität ist der zentrale Mechanismus, um die Reihenfolge zu erzwingen.

 

Konfig anwenden
systemctl restart zramswap.service

 

systemctl restart zramswap.service
Startet den ZRAM-Swap-Dienst neu, damit ALGO/PERCENT/PRIORITY neu gesetzt werden. Unterschied zu daemon-reload: hier wird nur der Service neu gestartet, nicht systemd selbst.

 


VM-/Kernel-Tuning: warum diese sysctl-Werte?

Datei: /etc/sysctl.d/99-zram-tuning.conf

Empfohlene Werte (Desktop/Allround)
vm.swappiness=100
vm.page-cluster=0
vm.vfs_cache_pressure=50
vm.dirty_background_ratio=5
vm.dirty_ratio=15

Warum genau diese Werte?

 

vm.swappiness=100
Erlaubt dem Kernel, eher zu swappen. Warum sinnvoll mit ZRAM: Swap ist hier schnell, weil er im RAM liegt. Unterschied zu klassischem Disk-Swap: Bei SSD/HDD wäre ein hoher Wert oft fühlbar langsamer.
vm.page-cluster=0
Beeinflusst, wie viele Swap-Seiten auf einmal read-ahead geladen werden. Warum 0: Bei ZRAM ist Read-ahead oft kein Gewinn und kann Latenzspitzen erzeugen, weil unnötig viel dekomprimiert wird.
vm.vfs_cache_pressure=50
Steuert, wie aggressiv der Kernel Dentry/Inode-Caches verwirft. Warum niedriger: Desktop-Workloads profitieren davon, wenn Metadaten-Caches länger bleiben (Dateibrowser, IDE, viele kleine Files).
vm.dirty_background_ratio=5 und vm.dirty_ratio=15
Steuert, wie viel „dirty“ (noch nicht auf Disk geschriebener) Cache erlaubt ist, bevor Writeback startet bzw. blockiert. Warum niedriger: verhindert große, plötzliche Schreib-Spikes, die Audio/Video und Interaktivität stören können. Unterschied: background startet früher sanften Writeback, dirty_ratio ist der harte Deckel.

 

Aktivieren
sysctl --system

 

sysctl --system
Lädt alle sysctl-Konfigurationen neu (u. a. aus /etc/sysctl.d/). Unterschied zu Neustart: wirkt sofort, ohne Boot.

 


Disk-Swap: wann, warum, Priorität

  • Warum Disk-Swap behalten? Als letzte Rettung bei extremen Peaks oder Memory-Leaks. ZRAM kann voll laufen.
  • Warum Disk-Swap niedrig priorisieren? Damit zuerst ZRAM genutzt wird (schneller, weniger I/O, weniger Verschleiß).
  • Hibernate: Wenn du Hibernate nutzen willst, brauchst du Swap auf Disk in passender Größe. ZRAM ist flüchtig.
Priorität für Disk-Swap via /etc/fstab (Beispiel)
# Beispiel-Zeile (Device/UUID an dein System anpassen):
/dev/dm-2 none swap sw,pri=-2 0 0

Warum: pri=-2 sorgt dafür, dass Disk-Swap erst genutzt wird, wenn ZRAM nicht reicht. Unterschied zu Default: ohne explizite Prio kann die Reihenfolge je nach Setup weniger klar sein.


Verifizieren & Monitoring (inkl. PSI)

Kommandos
swapon --show
zramctl
free -h
cat /proc/pressure/memory

Wie interpretiert man das?

  • ZRAM benutzt, Disk-Swap 0: Idealfall. Das bedeutet: schneller Swap-Puffer wird genutzt, Disk bleibt ruhig.
  • ZRAM voll + Disk-Swap steigt: ZRAM zu klein oder Workload zu speicherhungrig. Dann Disk-Swap als Notfall aktiv, aber das System kann zäher werden.
  • PSI memory steigt (avg10/60/300): Messbare Memory-Stalls. Das korreliert oft direkt mit „Ruckeln“. Dann sind Algorithmus (lz4) und page-cluster=0 oft wichtiger als noch mehr ZRAM-Größe.

Rollback: wie man es sauber rückgängig macht

systemd-zram-generator
# Konfig entfernen oder auskommentieren:
# /etc/systemd/zram-generator.conf

systemctl daemon-reload
# Danach Neustart oder erneutes Initialisieren, je nach Setup/Unit-Namen.

Warum: Entfernst du die Generator-Konfig, wird beim nächsten Setup kein ZRAM mehr erstellt. Unterschied zu „swapoff“: hier wird die Ursache (Auto-Setup) entfernt, nicht nur temporär deaktiviert.

zram-tools
systemctl disable --now zramswap.service

 

systemctl disable --now zramswap.service
--now stoppt sofort, disable verhindert Autostart beim Boot. Unterschied zu stop: stop ist nur temporär, disable ist dauerhaft.