Perché la maggior parte crede che swapping = cattivo e che se non si riduce lo swappiness, il sistema cambierà quando davvero non è necessario. Nessuno di questi è veramente vero. Le persone associano lo scambio a momenti in cui il loro sistema viene impantanato, tuttavia, è principalmente scambiato perché il sistema viene impantanato, non viceversa. Quando il sistema si scambia, avrà già preso in considerazione il costo delle prestazioni nella sua decisione di scambiare, e deciso che non farlo avrebbe una penalità complessiva maggiore nelle prestazioni del sistema o nella stabilità.
Nel complesso, le impostazioni predefinite si traducono in buone prestazioni generali e stabilità. Consiglierei di lasciarlo al valore predefinito. Esistono ulteriori strade per Linux per migliorare la sua gestione della memoria per risolvere alcuni casi limite, ma in generale il controllo della swapiness non è una buona soluzione: regolalo in una direzione e potresti risolvere un problema e crearne altri. Se possibile, semplicemente installando più RAM fisica (e lasciando da sola la swappiness) si eclissano tutti gli altri rimedi.
Come Linux usa la RAM
Qualsiasi RAM che non viene utilizzata dalle applicazioni può essere utilizzata come "cache". La cache è importante per un sistema veloce e fluido, che accelera sia le letture che le scritture su disco.
Se le tue applicazioni aumentano il loro utilizzo della memoria fino al punto in cui utilizzano quasi tutta la RAM, la cache si ridurrà e, di conseguenza, le operazioni su disco rallenteranno di conseguenza. Oggigiorno non è sufficiente avere solo decine di megabyte o meno per la cache.
Se le applicazioni aumentano ulteriormente l'utilizzo della memoria, supponendo che non si disponga di spazio di scambio, non solo non si avrà spazio per la cache, ma si esaurirà la memoria e il sistema dovrà interrompere i processi in esecuzione. Uccidere i processi è peggio di un rallentamento in quanto ti dà un sistema instabile e imprevedibile.
Come Linux usa lo swap
Per combattere entrambi questi problemi, il sistema può riassegnare parte della memoria dell'applicazione utilizzata raramente allo spazio di scambio sul disco, liberando RAM. La RAM aggiuntiva può impedire la morte dei processi a causa dell'esaurimento della memoria e può recuperare un po 'di cache in modo che le operazioni del disco possano funzionare in modo più fluido.
Questa riassegnazione non viene eseguita secondo un limite definito. Non raggiungi una certa percentuale di allocazione dopo la quale Linux inizia a scambiare. Ha un algoritmo "fuzzy". Tiene conto di molte cose, che possono essere meglio descritte da "quanta pressione c'è per l'allocazione della memoria". Se c'è molta "pressione" per allocare nuova memoria, aumenterà le possibilità che alcuni vengano scambiati per fare più spazio. Se c'è meno "pressione", diminuirà queste possibilità.
Il tuo sistema ha un'impostazione di "swappiness" che ti aiuta a modificare il modo in cui viene calcolata questa "pressione". Spesso viene erroneamente rappresentato come una "percentuale di RAM" ma non lo è, è solo un valore utilizzato come parte della formula. I valori tra 40 e 60 sono i valori sani raccomandati, 60 al giorno d'oggi default.
Permettere al tuo sistema di cambiare quando è necessario è nel complesso una cosa molto buona, anche se hai molta RAM. Permettere al tuo sistema di cambiare se necessario ti dà la tranquillità che se ti imbatti in una situazione di memoria insufficiente anche temporaneamente (durante l'esecuzione di un breve processo che utilizza molta memoria), il tuo sistema ha una seconda possibilità di mantenere tutto in esecuzione. Se si arriva al punto di disabilitare completamente lo scambio, si rischia di interrompere i processi a causa della mancata allocazione della memoria.
Cosa succede quando il sistema viene impantanato e scambiato pesantemente?
Lo scambio è un'operazione lenta e costosa, quindi il sistema lo evita a meno che non calcoli che il compromesso delle prestazioni della cache lo compenserà nel complesso, o se è necessario per evitare i processi di uccisione.
Molte volte le persone guarderanno il loro sistema che sta schiacciando pesantemente il disco e usando molto spazio di swap e incolpando lo swap per esso. Questo è l'approccio sbagliato da adottare. Se lo scambio raggiunge mai questo estremo, significa che lo scambio è il tentativo del sistema di gestire i problemi di memoria insufficiente, non la causa del problema, e che senza lo scambio del processo in esecuzione morirà casualmente.
E i sistemi desktop? Non richiedono un approccio diverso?
Gli utenti di un sistema desktop si aspettano davvero che il sistema "si senta reattivo" in risposta ad azioni avviate dall'utente come l'apertura di un'applicazione, che è il tipo di azione che a volte può innescare uno scambio a causa dell'aumento della memoria richiesta.
Un modo in cui alcune persone cercano di modificarlo è quello di ridurre il parametro swappiness che può aumentare la tolleranza del sistema alle applicazioni che utilizzano memoria e che occupano poco spazio nella cache.
Tuttavia, questo sta spostando solo i pali della porta. La prima applicazione ora può essere caricata senza un'operazione di scambio, ma lascerà meno spazio per la successiva applicazione che si carica. Lo stesso scambio può avvenire in un secondo momento, alla successiva successiva apertura di un'applicazione. Nel frattempo, le prestazioni del sistema sono complessivamente inferiori a causa della ridotta dimensione della cache. Pertanto, qualsiasi beneficio derivante dall'impostazione di swapiness ridotta può essere difficile da misurare, riducendo il ritardo di swap in alcune occasioni ma causando altre prestazioni lente in altre occasioni. Ridurre un po 'lo swappiness può essere giustificato se si sa cosa si sta facendo, ma ridurlo a un minimo del 10% può lasciare il sistema tollerante a dimensioni di cache molto basse e lasciare il sistema più responsabile a dover scambiare a breve termine.
La disabilitazione totale dello swap dovrebbe essere evitata poiché si perde la protezione aggiuntiva contro condizioni di memoria insufficiente che possono causare l'arresto anomalo dei processi o la loro morte.
Il rimedio di gran lunga più efficace è installare più RAM se te lo puoi permettere.
Lo swap può essere disabilitato su un sistema che ha molta RAM comunque?
Se hai molta più RAM di quella che probabilmente ti servirà per le applicazioni, raramente avrai bisogno di scambiare. La disabilitazione dello swap probabilmente non farà la differenza la maggior parte delle volte. Ma se hai molta RAM, lasciare lo swap abilitato non avrà alcuna penalità perché il sistema non si scambia quando non è necessario.
Le uniche situazioni in cui farebbe la differenza sarebbero nell'improbabile situazione in cui il sistema si sta esaurendo la memoria e di conseguenza il sistema cache viene ostacolato, ed è in questo tipo di situazione che vorresti scambiare di più. Quindi puoi tranquillamente lasciare lo scambio sulle sue normali impostazioni per una maggiore tranquillità senza che abbia un effetto negativo quando hai molta memoria.
Ma come può lo swap accelerare il mio sistema? Lo scambio non rallenta le cose?
L'atto di trasferire i dati dalla RAM allo swap è un'operazione lenta, ma viene presa solo quando il kernel è abbastanza sicuro che il vantaggio complessivo derivante dal mantenere una dimensione della cache ragionevole supererà questo.
Una volta che i dati sono scambiati, quando vengono di nuovo pubblicati?
Ogni parte della memoria tornerà fuori dallo scambio non appena viene utilizzata - letta o scritta. Tuttavia, in genere la memoria che viene scambiata è memoria a cui non si accede da molto tempo e che non si prevede sarà presto necessario.
Il trasferimento dei dati dallo swap richiede tanto tempo quanto il loro inserimento. Il tuo kernel non rimuoverà i dati da esso se non è necessario. Mentre i dati sono in scambio e non vengono utilizzati, lascia più memoria per altre cose che vengono utilizzate e più cache di sistema.
Ci sono casi in cui la riduzione della swappiness è appropriata?
Sì. Se si esegue un server dedicato a una particolare applicazione server che non beneficia della cache di sistema. Alcuni server di database come Oracle Server, MySQL / MariaDB raccomandano in alcuni casi di ridurre la swapiness da 1 a 10 poiché questi motori di database utilizzano la propria cache.
Nota che questo è vero solo se il tuo sistema è dedicato a quell'attività, e nel caso di MySQL / MariaDB solo se stai usando InnoDB o XtraDB, e non MyISAM o Aria, ecc.