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
- Grundidee: Was ist ZRAM und wofür nutzt man es?
- Quick-Check: Ist ZRAM aktiv und sinnvoll priorisiert?
- Sizing: Empfehlungen von 2 GB bis 128 GB RAM
- Kompressions-Algorithmen:
lz4vs.zstd(und warum) - Installation (Debian/Ubuntu)
- Konfiguration: systemd-zram-generator (empfohlen)
- Konfiguration: zram-tools (Alternative)
- VM-/Kernel-Tuning: warum diese sysctl-Werte?
- Disk-Swap: wann, warum, Priorität
- Verifizieren & Monitoring (inkl. PSI)
- 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:
freezeigt Gesamtbild,swaponzeigt 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:
freesieht nur „Swap belegt“,zramctlzeigt 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.
zstdwirklich 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
aptalte 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
-ybeantwortet 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
zram0neu. Warum: Wendet neue ZRAM-Größe/Algorithmus an, ohne Neustart. Wenn die Unit anders heißt:systemctl list-units --type=service --allnutzen 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.
lz4ist latenzfreundlicher,zstdkomprimiert 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/PRIORITYneu gesetzt werden. Unterschied zudaemon-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=5undvm.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) undpage-cluster=0oft 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--nowstoppt sofort,disableverhindert Autostart beim Boot. Unterschied zustop:stopist nur temporär,disableist dauerhaft.
No Comments