Swap-ul clasic pe disc rezolvă problema lipsei de RAM, dar introduce o latență semnificativă - mai ales pe HDD-uri mecanice. Fiecare operație de swapping in înseamnă o citire de pe disc, care poate dura câteva milisecunde, suficient cât să facă un sistem cu puțin RAM să se simtă lent și neplăcut. zram și zswap sunt două soluții diferite la aceeași problemă: în loc să pagineze pe disc, comprimă paginile de memorie și le păstrează tot în RAM.
Deși par similare, zram și zswap funcționează diferit și se potrivesc unor scenarii diferite.
zram creează un dispozitiv de tip bloc în RAM care funcționează ca swap. Paginile de memorie sunt comprimate și stocate tot în RAM, fără niciun acces la disc. Dacă zram-ul se umple, kernelul nu mai are unde să pagineze (cu excepția cazului în care există și swap pe disc configurat ca fallback). Este soluția preferată pe desktop-uri, laptopuri și dispozitive cu stocare lentă sau limitată.
zswap funcționează ca un cache comprimat în RAM între procesele active și swap-ul pe disc. Când kernelul vrea să pagineze o pagină pe disc, zswap o interceptează, o comprimă și o păstrează în RAM. Numai când cache-ul zswap se umple, paginile sunt scrise efectiv pe disc. zswap necesită swap pe disc configurat și funcționează ca o optimizare a acestuia, nu ca înlocuitor.
| zram | zswap | |
|---|---|---|
| Necesită swap pe disc | Nu | Da |
| Stochează date | Doar în RAM | RAM (cache) + disc (overflow) |
| Potrivit pentru | Desktop, sisteme fără disc rapid | Servere, sisteme cu swap existent |
| Complexitate | Simplă | Moderată |
Pe un desktop sau laptop, zram este alegerea naturală - elimină aproape complet accesele la disc pentru swap și face sistemul mai responsiv chiar și cu puțin RAM. Pe un Raspberry Pi sau alt dispozitiv cu card microSD, zram face diferența dintre un sistem utilizabil și unul care scrie constant pe card, reducând și uzura acestuia.
Pe un server cu SSD rapid și swap existent, zswap poate reduce semnificativ numărul de accese la disc fără să necesite reconfigurarea completă a setup-ului de memorie.
Atât zram cât și zswap folosesc algoritmi de compresie pentru a reduce dimensiunea paginilor. Algoritmii disponibili depind de configurația kernel-ului, dar pe distribuțiile moderne sunt de obicei disponibili:
Verifici algoritmii disponibili pe sistemul tău:
cat /sys/block/zram0/comp_algorithm # sau pentru zswap: cat /sys/module/zswap/parameters/compressor
Algoritmul între paranteze drepte este cel activ în momentul respectiv.
Pe Ubuntu 22.04+, Fedora și multe alte distribuții moderne, zram este deja configurat și activ implicit printr-un serviciu numit zram-generator sau zramswap. Verifici dacă e activ:
swapon --show
Dacă există o linie cu /dev/zram0 de tip partition, zram e deja funcțional.
Pe distribuțiile unde zram nu e configurat implicit, poți folosi zram-generator (recomandat) sau să îl configurezi manual.
Instalezi pachetul:
# Ubuntu/Debian apt install systemd-zram-generator # Fedora dnf install zram-generator # Arch Linux pacman -S zram-generator
Creezi fișierul de configurare /etc/systemd/zram-generator.conf:
[zram0] zram-size = ram / 2 compression-algorithm = zstd
ram / 2 înseamnă că zram va folosi jumătate din RAM-ul fizic ca dimensiune maximă (după compresie, stochează efectiv mai mult). Poți specifica și o valoare fixă, de exemplu zram-size = 2048 pentru 2GB.
Activezi serviciul:
systemctl daemon-reload
systemctl start systemd-zram-setup@zram0.service
Verifici că e activ:
swapon --show
zramctl
Încarci modulul:
modprobe zram
Setezi algoritmul de compresie:
echo zstd > /sys/block/zram0/comp_algorithm
Setezi dimensiunea (exemplu 2GB):
echo 2G > /sys/block/zram0/disksize
Formatezi și activezi ca swap:
mkswap /dev/zram0 swapon --priority 100 /dev/zram0
Prioritatea 100 asigură că zram este folosit înaintea oricărui swap pe disc.
O regulă practică este să setezi zram la jumătate din RAM-ul fizic. Datorită compresiei (raport tipic de 2:1 până la 3:1 pentru paginile obișnuite), un zram de 2GB poate stoca efectiv 4-6GB de date comprimate. Pe sisteme cu foarte puțin RAM (512MB - 1GB), poți seta zram egal cu RAM-ul fizic, deși dincolo de acest punct randamentul scade.
| RAM fizic | zram recomandat |
|---|---|
| 512MB | 512MB |
| 1GB | 512MB - 1GB |
| 2GB | 1GB |
| 4GB | 2GB |
| 8GB+ | 2-4GB |
swapoff /dev/zram0 modprobe -r zram
zswap este un modul al kernel-ului și pe multe distribuții este deja compilat, dar dezactivat implicit. Verifici starea:
cat /sys/module/zswap/parameters/enabled
Dacă returnează N, zswap e dezactivat. Activezi temporar:
echo Y > /sys/module/zswap/parameters/enabled
Pentru activare permanentă, adaugi parametrul la linia de boot a kernel-ului. Pe sistemele cu GRUB, editezi /etc/default/grub și adaugi la GRUB_CMDLINE_LINUX_DEFAULT:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1 zswap.compressor=zstd zswap.max_pool_percent=20"
Actualizezi GRUB:
# Ubuntu/Debian update-grub # Fedora/RHEL grub2-mkconfig -o /boot/grub2/grub.cfg # Arch Linux grub-mkconfig -o /boot/grub/grub.cfg
max_pool_percent controlează ce procent maxim din RAM poate folosi zswap ca cache. Valoarea implicită este 20%, ceea ce pe un sistem cu 4GB RAM înseamnă 800MB pentru cache-ul zswap. Dacă sistemul tău are swap pe SSD rapid, o valoare mai mică (10%) poate fi suficientă. Pe sisteme cu HDD lent, o valoare mai mare (30-40%) reduce mai mult accesele la disc.
# Modifici temporar echo 20 > /sys/module/zswap/parameters/max_pool_percent
zpool controlează alocatorul de memorie folosit de zswap. Opțiunile sunt zbud (mai simplu, mai puțin eficient) și z3fold sau zsmalloc (mai eficiente, recomandate):
echo z3fold > /sys/module/zswap/parameters/zpool
grep -r . /sys/kernel/debug/zswap/ 2>/dev/null
Valorile relevante sunt:
Dacă written_back_pages crește rapid, cache-ul zswap e prea mic față de presiunea pe memorie și merită mărit max_pool_percent.
zram și zswap nu sunt proiectate să funcționeze împreună și combinația lor poate cauza comportament impredictibil. Dacă activezi zram, dezactivează zswap și invers. Alege una din soluții în funcție de scenariul tău:
Pe un sistem cu SSD NVMe, diferența dintre zram și swap pe disc poate fi mai mică decât pe HDD, dar zram rămâne mai rapid în aproape toate scenariile deoarece accesul la RAM este cu câteva ordine de mărime mai rapid decât orice dispozitiv de stocare.
Un test practic pe un sistem cu 4GB RAM și zram configurat cu zstd arată de obicei: