Creare uno swap Zram
Definizione (presa da https://www.linux.com/news/all-about-linux-swap-space/):
“Linux divide la sua RAM fisica (memoria ad accesso casuale) in chunks di memoria chiamati pagine. Lo swap è il processo mediante il quale una pagina di memoria viene copiata nello spazio preconfigurato su disco, chiamato spazio di swap, per liberare quella pagina di memoria dalla RAM. Le dimensioni combinate della memoria fisica (RAM) e dello swap rappresentano la quantità di memoria virtuale disponibile.”
Lo swap è ancora necessario anche con grandi quantitativi di RAM perché linux di suo lo usa in alcuni casi; per esempio se si imposta l’ibernazione, ma anche può essere usato all’avvio delle applicazioni, e solo al loro avvio. Ci sono 4 modi per usare lo swap: una partizione di swap, un file di swap su disco (swapfile), un file di swap compresso in RAM che scambia dati con uno swap file su disco (zswap) e infine un file di swap compresso in RAM senza altri scambi (zram). Vedremo come impostare quest’ultimo caso.
Ci sono modi facili e automatici per creare uno zram ma noi vedremo come fare tutti i passaggi manualmente da linea di comando. Queste spiegazioni sono basate su Arch Linux e, per altre distro, possono aver bisogno di adeguare alcuni passaggi (probabilmente quelli riguardanti l’initramfs, ma non conosco bene le altre distro).
Impostare uno Zram fa guadagnare in velocità quando si deve ricorrere allo swap ed in più si diminuisce drasticamente la scrittura/lettura su disco, cosa importante quando abbiamo a che fare con SSD o Nvme.
Per prima cosa si carica il modulo zram (è già presente sul kernel ma non attivo di default).
# modprobe zram
Si imposta il nome del dispositivo zram, l’algoritmo di compressione e la sua dimensione:
# echo lz4 > /sys/block/zram0/comp_algorithm
# echo 4G > /sys/block/zram0/disksize
In questo esempio ho impostato un solo device chiamto zram0 di 4 GB e con compressione lz4. È pratica abituale anche impostare più di un device, ognuno di una certa grandezza, ma noi faremo con un solo dispositivo.
Si continua con la creazione vera e propria del device zram:
# mkswap --label zram0 /dev/zram0
# swapon --priority 100 /dev/zram0
[NOTA: per disabilitare lo zram fare:
# swapoff /dev/zram0
# rmmod zram
]
Adesso abbiamo creato il nostro device zram ed è perfettamente funzionante. Però al successivo riavvio dovremo rifare tutti i passi precedenti. Possiamo rendere automatica la creazione dello zram con una regola udev di systemd. Ma per prima cosa dobbiamo caricare il modulo zram nell’initramfs:
# nano /etc/mkinitcpio.conf
e scriverci dentro, nella sezione MODULES:
MODULES=(amdgpu amd_pstate zram ...)
dove amdgpu e amd_pstate riguardano altre configurazioni, a noi interssa solo zram. Infine aggiornare il mkinitcpio:
# mkinitcpio -P
Per caricare il modulo zram ad ogni boot:
# nano /etc/modules-load.d/zram.conf
e scriverci dentro:
zram
Adesso si imposta il numero di device zram che vogliamo creare. In genere ne basta uno.
# nano /etc/modprobe.d/zram.conf
con scritto dentro:
options zram num_devices=1
Infine si scrive la regola udev vera e propria:
# nano /etc/udev/rules.d/99-zram.rules
e ci si scrive dentro:
KERNEL=="zram0", ATTR{comp_algorithm}="lz4", ATTR{disksize}="4G" RUN="/usr/bin/mkswap /dev/zram0", TAG+="systemd"
Si usa ATTR{comp_algorithm}=”lz4″, se si vuole cambiare la compressione da zstd (default) a lz4. La prima è più lenta ma più solida e con maggiore compressione, la seconda è più veloce.
Infine si imposta l’fstab per tenerne conto:
# nano /etc/fstab
e ci si scrive dentro:
#zram
/dev/zram0 none swap defaults 0 0
Abbiamo finito; basta riavviare il sistema.