Lo swap ha una reputazione ingiustamente negativa — "se il server usa lo swap è già nei guai" — che nasce da un'epoca in cui i dischi erano rotativi e lenti. Su hardware moderno, e soprattutto con le varianti compresse in RAM come zram, lo swap resta uno strumento utile per gestire picchi di memoria senza dover per forza dimensionare il server sul caso peggiore assoluto.
Swap tradizionale: un file (o partizione) su disco
Il meccanismo classico: quando la RAM fisica si esaurisce, il kernel sposta su disco le pagine di memoria usate meno di recente, liberando RAM per ciò che serve subito. Su un file invece che su una partizione dedicata:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Il limite di questo approccio su SSD/NVMe moderni non è tanto la lentezza (comunque più lenta della RAM, ma non drammaticamente come sui vecchi dischi meccanici), quanto l'usura: scritture frequenti su swap accorciano la vita utile di un SSD economico, un dettaglio da considerare su hardware di fascia bassa o VPS con storage limitato.
zram: swap compresso, dentro la RAM stessa
zram crea un dispositivo di swap virtuale che vive interamente in RAM, comprimendo i dati al volo. Il vantaggio: essendo comunque RAM (solo più lenta perché compressa/decompressa al volo), è ordini di grandezza più veloce di qualunque disco, e non consuma cicli di scrittura su SSD. Su Ubuntu 22.04+ è spesso già configurato di default; per attivarlo manualmente:
sudo apt install zram-tools
echo 'ALGO=zstd' | sudo tee -a /etc/default/zramswap
echo 'PERCENT=50' | sudo tee -a /etc/default/zramswap # % della RAM fisica da dedicare
sudo systemctl restart zramswap
Con compressione tipica 2:1 o 3:1 (dipende dai dati), un dispositivo zram da 2GB può effettivamente contenere 4-6GB di dati "virtuali" — un guadagno reale su VPS economiche con RAM limitata.
zswap: una via di mezzo, cache compressa davanti allo swap su disco
zswap non sostituisce lo swap su disco, ma si frappone come cache compressa: le pagine da spostare in swap vengono prima compresse in RAM; solo quando anche quella cache si riempie, i dati (ancora compressi o decompressi a seconda della configurazione) finiscono davvero sul disco di swap. È il compromesso giusto quando vuoi comunque avere swap su disco come rete di sicurezza per picchi importanti, ma minimizzare le scritture reali nella maggior parte dei casi quotidiani:
# verifica se è già attivo
cat /sys/module/zswap/parameters/enabled
# abilitalo al boot via parametro kernel (GRUB)
# aggiungi zswap.enabled=1 a GRUB_CMDLINE_LINUX in /etc/default/grub
sudo update-grub
Quale scegliere
| Scenario | Scelta consigliata |
|---|---|
| VPS/container con poca RAM, nessun disco persistente lento da preservare | zram da solo |
| Server con SSD, vuoi rete di sicurezza per picchi rari senza usurare il disco nell'uso normale | zswap + swap su disco |
| Desktop/laptop con RAM abbondante (16GB+) | swap minimo o assente, serve solo per ibernazione |
Un parametro spesso mal configurato: swappiness
Il valore vm.swappiness (0-100) determina quanto aggressivamente il kernel preferisce spostare pagine in swap rispetto a liberare cache. Il default (60) è pensato per desktop generici; su un server con carico di lavoro prevedibile spesso conviene abbassarlo:
sudo sysctl vm.swappiness=10 # temporaneo
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf # persistente
Un valore basso dice al kernel "usa lo swap solo quando è davvero necessario, preferisci tenere la RAM libera per la cache dei file" — generalmente il comportamento desiderato su un server applicativo.