Come gestire l'utilizzo dello swap in Linux

Potresti aver sperimentato rallentamenti del sistema, un utilizzo elevato dello swap o problemi di memoria nel tuo sistema Linux. Un consiglio comune è “ridurre il valore di swappiness”, diminuire l’uso dello swap. Ma cos’è lo swappiness? E vale davvero la pena modificarlo?

Nota: non entreremo nei dettagli sulla partizione swap. Puoi leggere tutto al riguardo nel nostro articolo su ciò che devi sapere sulla partizione swap in Linux.

Swappiness

Esiste un valore chiamato swappiness nei sistemi simili a UNIX che determina come verranno gestite le pagine nella memoria. Il suo valore predefinito nella maggior parte dei sistemi è “60”, ma può essere impostato su qualsiasi valore tra 0 e 100. Se la memoria è bassa, il kernel evicterà alcuni file cache per avere più RAM libera per i processi, oppure scambierà alcune pagine di processo dalla RAM al disco.

Un valore predefinito di 60 significa che lo swapping verrà utilizzato di meno, e le cache I/O saranno più probabilmente liberate per riallocare RAM. Evitare le cache è considerato “meno costoso” (meno intensivo in risorse), mentre lo swapping include letture e scritture su disco, rendendolo più “costoso”. Con un valore di ‘60’, l’uso dello swap sarà leggermente inferiore rispetto al riutilizzo della cache. Se il valore di swappiness viene aumentato a 100, lo swapping e l’evizione della cache dei file verranno utilizzati con lo stesso peso. Questo significa più swapping e I/O più veloci rispetto al predefinito. Valori più bassi come “10” significano che lo swapping verrà utilizzato molto meno, e le cache I/O possono essere evitate molto prima a favore dei processi. Questo potrebbe aumentare l’interattività ma potrebbe anche danneggiare la velocità dell’I/O.

Ridurre lo swappiness

Vedrai spesso il consiglio su siti web e forum di ridurre lo swappiness a circa “10”. Questo dovrebbe accelerare le cose riducendo l’uso dello swap e mantenendo più processi nella RAM fisica. Questa logica potrebbe essere un po’ troppo semplicistica e potrebbe non essere una “soluzione adatta a tutti”.

Ridurre il valore di swappiness potrebbe essere utile nei seguenti scenari:

  • Per sistemi database, o se utilizzi molte applicazioni intensive di database: I database generalmente gestiscono la cache dei file molto meglio del sistema operativo. Se riduci lo swappiness, limiterai la cache dei file del sistema operativo, dando quindi la possibilità al database di gestire le proprie cache.
  • Per l’interattività: Se fai multitasking molto ma gestisci pochi file o non apri documenti di grandi dimensioni, questo potrebbe migliorare quanto fluido si sentirà il tuo sistema. Meno processi verranno scritti su disco e, poiché l’accesso alla RAM è molto più veloce, il tuo computer potrebbe sembrare più veloce. Devi anche tenere presente che ciò potrebbe ridurre le prestazioni dell’I/O. Se hai dischi lenti o esegui qualsiasi operazione intensiva di I/O, potrebbero persino danneggiare le prestazioni.
  • Per effetto placebo: Molti credono che un valore di swappiness più basso velocizzerà il sistema. Seriamente, se pensi che il tuo sistema sia più veloce, potrebbe avere l’effetto di percepirlo più veloce, anch’esso.

Tieni presente che ridurre lo swappiness potrebbe comportare crash e processi terminati in modo casuale dal sistema per liberare memoria. Ridurre lo swappiness sarà migliore se hai abbastanza RAM disponibile per eseguire il tuo sistema in modo fluido. Ma dovresti mantenere il valore sopra “10”, poiché un certo utilizzo dello swap è utile.

Aumentare lo swappiness

Aumentare lo swappiness può avere il vantaggio generale di accelerare l’I/O. Anche se non è spesso consigliato, aumentare lo swappiness potrebbe tornare utile se:

  • Esegui alcune operazioni intensive di I/O e hai HDD lenti e vecchi. Ad esempio: eseguire backup o modificare immagini in batch può essere intensivo per l’I/O (Un’eccezione notevole sono i database, che sono naturalmente intensivi di I/O ma potrebbero beneficiare di un valore di swappiness più basso come visto sopra.).
  • Hai poca memoria ma dischi relativamente veloci. In questo scenario improbabile, un valore maggiore di swappiness potrebbe aiutare a gestire la memoria in modo più efficiente (anche se impostarlo troppo alto potrebbe nuovamente danneggiare le prestazioni.).

Come gestire lo swappiness

Innanzitutto, dovresti considerare se hai bisogno di toccare questo valore. Stai riscontrando problemi di prestazioni? E, cosa più importante, hai già provato altri aggiustamenti di sistema? Se non l’hai fatto, è probabilmente meglio guardare altrove prima. Ma se hai uno scenario specifico in mente, potresti voler continuare.

Successivamente, quanto è pesante l’utilizzo dello swap? Puoi scoprirlo con qualsiasi strumento di monitoraggio delle prestazioni a tua scelta o con il comando free. free -m ti darà una panoramica dell’uso della memoria in megabyte. Per il monitoraggio continuo, potresti voler usare watch.

watch -n 1 free -m

Questo eseguirà il comando free -m ogni secondo e stamperà il suo output finché non premi “Ctrl + C”.

swappiness-free-m

Come puoi vedere sopra, pochissimo swap viene utilizzato dal sistema su cui è scritto questo articolo.

Ora, se stai sperimentando swap, potresti essere interessato a quanto di esso è attivo. Il comando vmstat ti dirà tutto ciò che devi sapere sull’uso della memoria virtuale del tuo sistema (swap e RAM fisica insieme).

vmstat 1

swappiness-vmstat

Devi controllare la colonna swap dove si significa “swap in”, e so significa “swap out”. Se i numeri sono elevati, significa molta attività di swapping, che è un indicatore di problemi di memoria bassa. Se vedi utilizzo dello swap da free ma poco swapping attivo, potrebbe essere il caso di modificare lo swappiness.

È anche una buona idea stabilire altri parametri di prestazione come l’I/O del disco, le medie di carico, ecc., così quando testi i tuoi nuovi valori di swappiness, hai qualcosa su cui confrontarti.

Per testare un valore di swappiness diverso, puoi impostarlo temporaneamente con il comando sysctl. Non è necessario riavviare e l’effetto è immediato. In effetti, il riavvio ripristinerà il valore predefinito, quindi sei piuttosto al sicuro per sperimentare:

sudo sysctl vm.swappiness=10

Certo, puoi inserire qualsiasi valore invece di “10” (tra “0” e “100”).

Una volta trovato il valore che preferisci, puoi modificare permanentemente la configurazione del sistema modificando “/etc/sysctl.conf”.

sudo nano /etc/sysctl.conf

e aggiungendo le righe

# Imposta il valore di swappiness  
vm.swappiness=10

alla fine di questo file, con il valore impostato di nuovo secondo le tue preferenze, ovviamente.

Conclusione

Ridurre lo swappiness a “10” è spesso consigliato come una soluzione universale, ma l’uso effettivo della tecnica potrebbe essere leggermente più complicato di così. Stabilendo parametri di riferimento, conoscendo il tuo sistema, come lo usi e cosa ti aspetti da esso, puoi ottimizzare il tuo utilizzo dello swap e ottenere un miglioramento delle prestazioni (sia in interattività che in I/O).