Skip to main content

Linux - ZRAM Config

Ziel: ZRAM als schnellen Swap einrichten (komprimierter RAM statt SSD/HDD), sinnvolle Größe je nach RAM wählen, Prioritäten korrekt setzen, Latenz/CPU-Last sauber austarieren. Für Desktop (viele Tabs) und Server/Workstations.


Inhalt

  1. Überblick: Was ist ZRAM und wann lohnt es sich?
  2. Quick-Check: Ist ZRAM schon aktiv?
  3. Sizing: Empfehlungen von 2 GB bis 128 GB RAM
  4. Installation (Debian/Ubuntu)
  5. Konfiguration mit systemd-zram-generator (empfohlen)
  6. Konfiguration mit zram-tools (Alternative)
  7. Kernel/VM-Tuning (swappiness, page-cluster, dirty ratios)
  8. Swap-Priorität: ZRAM zuerst, Disk-Swap optional
  9. Verifizieren & Monitoring
  10. Praxis-Profile: Desktop vs. Server
  11. FAQ & typische Stolperfallen

Überblick: Was ist ZRAM und wann lohnt es sich?

  • ZRAM erzeugt ein Blockdevice im RAM, das komprimiert wird und als Swap dient.
  • Vorteil: Swap-I/O ist extrem schnell (RAM), statt deine SSD/HDD zu stressen.
  • Nachteil: Kompression kostet CPU. (Bei Meetings/Audio kann das relevanter sein als die letzte Kompressionsrate.)

Merke: ZRAM ist ideal für Desktop/Notebook (Browser, Electron, Meetings) und auch für Server als Puffer gegen OOM-Spikes. Es ersetzt aber keine realistische RAM-Planung.


Quick-Check: Ist ZRAM schon aktiv?

Kommandos
swapon --show
free -h
zramctl
cat /sys/block/zram0/mm_stat
cat /proc/pressure/memory
  • Prio: ZRAM sollte eine höhere Swap-Priorität haben als Disk-Swap (z. B. 100 vs. -2).
  • PSI memory: Bei avg10/60/300 > 0.00 hast du messbare Memory-Stalls. Das ist oft der Grund für Ruckler.

Sizing: Empfehlungen von 2 GB bis 128 GB RAM

Grundidee: Je weniger RAM, desto aggressiver darf ZRAM sein. Je mehr RAM, desto mehr geht es um Latenz-Spitzen und seltene Peaks, nicht darum, 80 GB wegzukomprimieren.

RAM ZRAM-Größe (Desktop/Allround) Algorithmus Kommentar
2 GB 1.5–2 GB (75–100%) lz4 CPU schonen, trotzdem genug Puffer gegen OOM.
4 GB 3–4 GB (75–100%) lz4 Sehr typische Low-RAM-Optimierung, bringt spürbar Ruhe ins System.
8 GB 6 GB (~75%) zstd oder lz4 zstd spart mehr RAM, lz4 ist glatter bei Latenz.
16 GB 10–12 GB (~60–75%) zstd Guter Allround-Standard für Desktop/Workstation.
32 GB 16–24 GB (~50–75%) zstd Viele Tabs/VMs/IDE: 50–75% ist meist sinnvoll.
64 GB 24–32 GB (~40–50%) zstd oder lz4 Mehr RAM → weniger aggressiv. Fokus: Peak-Abfederung.
128 GB 32–48 GB (~25–40%) zstd oder lz4 Große Systeme: ZRAM als Sicherheitsnetz, nicht als Hauptspeicherersatz.

Merke: ZRAM-„DISKSIZE“ ist nicht 1:1 RAM-Verbrauch. RAM wird erst belegt, wenn Seiten im ZRAM landen. Trotzdem: riesige ZRAM-Größen können das System dazu verleiten, zu viel zu swappen. Daher bei viel RAM moderater dimensionieren.


Installation (Debian & Ubuntu)

Empfohlen: systemd-zram-generator
sudo apt update
sudo apt install -y systemd-zram-generator

Hinweis: Modern, sauber in systemd integriert, Konfig per /etc/systemd/zram-generator.conf.

Alternative: zram-tools
sudo apt update
sudo apt install -y zram-tools

Hinweis: Funktioniert, aber weniger flexibel. Konfig meist in /etc/default/zramswap.


Konfiguration mit systemd-zram-generator (empfohlen)

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

Template (Desktop/Allround)
[zram0]
# Richtwert je nach RAM (siehe Tabelle). Beispiel: 75% von RAM.
zram-size = ram * 0.75

# Kompromiss: gute Kompression, meist effizient
compression-algorithm = zstd

# ZRAM vor Disk-Swap
swap-priority = 100
Low-RAM (2–4 GB): eher lz4 + 100%
[zram0]
zram-size = ram * 1.0
compression-algorithm = lz4
swap-priority = 100
High-RAM (64–128 GB): moderat + optional lz4 für Latenz
[zram0]
zram-size = ram * 0.35
compression-algorithm = lz4
swap-priority = 100
Anwenden
sudo systemctl daemon-reload

# Je nach System/Version existieren diese Targets/Units.
# Wenn die Unit bei dir anders heißt, ist das kein Weltuntergang:
# "systemctl list-units | grep -i zram" zeigt sie.
sudo systemctl restart systemd-zram-setup@zram0.service || true

# Fallback: reboot (wenn du eh gerade nichts Wichtiges offen hast ...)

Hinweis: Wenn der Restart nicht greift, ist ein Neustart der saubere Weg, damit ZRAM garantiert neu initialisiert wird.


Konfiguration mit zram-tools (Alternative)

Datei: /etc/default/zramswap

Beispiele nach RAM
# 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
Anwenden
sudo systemctl restart zramswap.service

Kernel/VM-Tuning (swappiness, page-cluster, dirty ratios)

Ziel: ZRAM sinnvoll nutzen (statt SSD), ohne dass das System bei Latenz-Workloads zäh wird.

Empfohlene sysctl-Datei

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

# ZRAM ist schnell genug, um früher genutzt zu werden (Desktop/Allround)
vm.swappiness=100

# Weniger Swap-Readahead (oft weniger Latenzspitzen mit ZRAM)
vm.page-cluster=0

# Cache nicht unnötig aggressiv verwerfen (Desktop-Feeling)
vm.vfs_cache_pressure=50

# Schreibspitzen dämpfen (hilft bei Audio/Video/Meetings)
vm.dirty_background_ratio=5
vm.dirty_ratio=15
Aktivieren
sudo sysctl --system

Hinweis: Wenn du nach dem Tuning das Gefühl hast, dass zu früh geswappt wird, ist vm.swappiness der erste Regler (z. B. 80 statt 100).


Swap-Priorität: ZRAM zuerst, Disk-Swap optional

  • Empfehlung: ZRAM prio 100, Disk-Swap prio -2 (oder niedriger).
  • Disk-Swap ist als „letzter Rettungsanker“ sinnvoll. Für Hibernate brauchst du allerdings Disk-Swap ≥ RAM (ZRAM taugt dafür nicht).
Disk-Swap-Priorität via /etc/fstab (optional)
# Beispiel: swap Partition/Device mit niedriger Priorität
# /dev/dm-2 none swap sw,pri=-2 0 0

Hinweis: Editiere /etc/fstab mit einem Editor (z. B. sudoedit /etc/fstab). Kein wildes Herum-Pattern-Matching nötig.


Verifizieren & Monitoring

Kommandos
swapon --show
free -h
zramctl
cat /sys/block/zram0/mm_stat
cat /proc/pressure/memory
  • zramctl: Algorithmus, Disksize, DATA (unkomprimiert), COMPR/TOTAL (tatsächlicher RAM-Verbrauch).
  • mm_stat: Enthält u. a. wie viel im ZRAM liegt und wie effektiv komprimiert wird.
  • PSI memory: Wenn avg-Werte steigen, hast du echte Stalls (und dann ruckelt Teams, Audio, alles).

Praxis-Profile: Desktop vs. Server

Profil Algorithmus ZRAM-Größe swappiness Warum
Desktop (Browser, Meetings, Audio) lz4 oder zstd 50–100% (je nach RAM) 80–120 Latenz wichtiger; ZRAM fängt Peaks ab, ohne SSD zu belasten.
Workstation (IDE, Builds, VMs) zstd 40–75% 60–100 Guter Kompromiss: weniger OOM, gute Kompressionsrate.
Server (DB/Low-Latency kritisch) lz4 25–50% 10–60 Swap möglichst vermeiden; ZRAM nur als Sicherheitsnetz.

FAQ & typische Stolperfallen

Warum ist mein Disk-Swap unbenutzt?

Weil es korrekt ist. ZRAM hat höhere Priorität und ist schneller. Disk-Swap bleibt als Notfall-Reserve.

Wann sollte ich von zstd auf lz4 wechseln?

Wenn du bei Last spürbare Latenzspitzen hast (Teams/Audio/Realtime-Kram) oder wenn die CPU bei Kompression sichtbar glüht. lz4 ist oft „smoother“, zstd spart mehr RAM.

Kann ZRAM Hibernate ersetzen?

Nein. Hibernate braucht typischerweise Swap auf Disk, groß genug für RAM-Inhalt. ZRAM ist flüchtig und nicht geeignet.

Wie mache ich ZRAM rückgängig?
  • systemd-zram-generator: Datei /etc/systemd/zram-generator.conf entfernen/auskommentieren, dann Neustart.
  • zram-tools: Dienst deaktivieren: sudo systemctl disable --now zramswap.service