L'impostazione di swappiness è una modifica del modo in cui Linux calcola i vantaggi / gli svantaggi dello swap in un particolare scenario. Un'elevata swappiness non causerà lo scambio del sistema quando non è necessario e una bassa swapiness, a condizione che non si disabiliti completamente lo swap, non impedirà al sistema di effettuare lo swap quando è assolutamente necessario.
La swapiness predefinita di circa 60 è un ottimo compromesso che garantisce buone prestazioni del sistema assicurando che non stia faticando troppo a allocare memoria cache mentre è presente memoria di programma allocata inutilizzata.
Ricorda che se hai molta RAM per tutti i tuoi processi più cache, cosa che di solito dovrebbe essere il caso se hai molta RAM fisica, lo scambio non dovrebbe comunque essere un problema per te. Il modo preferito per risolvere problemi di scambio eccessivo è ridurre l'utilizzo della RAM da parte dei processi e / o aumentare la RAM fisica. Ridurre lo swappiness avrà un effetto negativo se ciò di cui hai veramente bisogno è più RAM.
Perché la maggior parte delle persone raccomanda di ridurre lo swappiness a 10-20?
Perché la maggior parte crede che lo scambio = cattivo e che se non si riduce lo scambio, il sistema cambierà quando non è realmente 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. È vero che ci sono alcuni momenti in cui lo scambio può avere una notevole penalità delle prestazioni, ma il sistema lo avrà già preso in considerazione nella sua decisione di scambiare, e ha deciso che non farlo avrebbe una penalità complessiva maggiore nelle prestazioni del sistema o nella stabilità che potrebbe più tardi diventa evidente. Nel complesso, le impostazioni predefinite dovrebbero garantire le migliori prestazioni e affidabilità complessive. Consiglierei di lasciarlo al valore predefinito.
...
Dopo aver esaurito la memoria sufficiente per non disporre di memoria sufficiente per una cache senza intoppi, Linux può riassegnare parte della memoria dell'applicazione inutilizzata dalla RAM allo scambio.
Tuttavia, non lo fa secondo un limite definito. Non è come raggiungere una certa percentuale di allocazione, quindi Linux inizia a scambiare. Ha un algoritmo piuttosto "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". Normalmente non è consigliabile modificarlo affatto, e non consiglierei mai di modificarlo. Lo scambio è nel complesso una cosa molto positiva: eventuali penali di prestazione occasionali devono essere compensate da un aumento della reattività e della stabilità complessive del sistema per una vasta gamma di attività. Se riduci lo swappiness, lasci che la quantità di memoria cache si riduca un po 'più di quanto farebbe altrimenti, anche quando potrebbe essere davvero utile. Rischi quindi di rallentare il tuo computer in generale, perché c'è meno cache, mentre la memoria viene occupata da applicazioni che non la usano nemmeno. Se questo è un compromesso abbastanza buono per qualsiasi problema specifico che stai avendo con lo scambio dipende da te.
Cosa succede quando il sistema viene impantanato e scambiato pesantemente?
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 il tuo sistema ha una memoria estremamente bassa e lo scambio è l'unica cosa che gli impedisce di arrestare o uccidere i processi in modo casuale. Senza scambiare, in questa situazione, i processi andranno in crash e muoiono. Lo scambio è un sintomo di un problema più profondo. In un sistema con memoria sufficiente per tutte le sue attività, lo scambio assicura solo che la memoria sia utilizzata in modo efficiente, distribuendo la memoria alla cache su processi dormienti dove vede che ne varrà la pena. In un sistema in cui lo scambio sta schiacciando incessantemente il disco, non è colpa dello scambio.
Quando si sceglie ciò che deve essere scambiato su disco, il sistema tenta di selezionare la memoria che non viene effettivamente utilizzata, da leggere o da cui scrivere. Ha un algoritmo piuttosto semplice per calcolare questo che sceglie bene la maggior parte delle volte.
...
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 supererà questo. Ad esempio, se la memoria della tua applicazione è salita al punto da non avere quasi più cache e il tuo I / O è molto inefficiente per questo motivo, puoi effettivamente ottenere molta più velocità dal tuo sistema liberando un po 'di memoria, anche dopo la spesa iniziale di scambio di dati per liberarli.