A partire dal kernel 2.6.28, Linux utilizza una strategia di sostituzione della pagina LRU ( Split Least recentemente utilizzata ). Le pagine con un'origine file system, come il testo del programma o le librerie condivise appartengono alla cache dei file. Le pagine senza supporto del file system sono chiamate pagine anonime e sono costituite da dati di runtime come lo spazio dello stack riservato per le applicazioni ecc. In genere, le pagine appartenenti alla cache dei file sono più economiche da eliminare dalla memoria (poiché possono essere semplicemente lette dal disco quando necessario) . Dal momento che le pagine anonime non hanno il backup del filesystem, devono rimanere in memoria fintanto che sono necessarie per un programma a meno che non ci sia spazio di scambio in cui memorizzarle.
È un'idea sbagliata comune che una partizione di swap possa in qualche modo rallentare il sistema. Non avere una partizione di swap non significa che il kernel non sfratterà le pagine dalla memoria, significa solo che il kernel ha meno scelte riguardo alle pagine da sfrattare. La quantità di swap disponibile non influirà sulla quantità utilizzata.
Linux può far fronte all'assenza di uno spazio di scambio perché, per impostazione predefinita, il criterio di contabilità della memoria del kernel potrebbe sovraccaricare la memoria . Il rovescio della medaglia è che quando la memoria fisica è esaurita e il kernel non può scambiare pagine anonime su disco, il meccanismo del killer della memoria (OOM-killer) inizierà a uccidere i processi "canaglia" di memoria per liberare memoria per altri processi.
L' vm.swappiness
opzione è un modificatore che modifica l'equilibrio tra lo scambio di pagine di cache di file a favore di pagine anonime. Alla cache del file viene assegnato un valore di priorità arbitrario di 200 da cui vm.swappiness
viene dedotto il modificatore ( file_prio=200-vm.swappiness
). Le pagine anonime, per impostazione predefinita, iniziano con 60 ( anon_prio=vm.swappiness
). Ciò significa che, per impostazione predefinita, i pesi di priorità sono moderatamente a favore di pagine anonime ( anon_prio=60
, file_prio=200-60=140
). Il comportamento è definito mm/vmscan.c
nella struttura dei sorgenti del kernel.
Dato un vm.swappiness
di 100
, le priorità sarebbero uguali ( file_prio=200-100=100
, anon_prio=100
). Ciò avrebbe senso per un sistema I / O pesante se non si desidera che le pagine della cache dei file vengano eliminate a favore di pagine anonime.
Al contrario, l'impostazione del vm.swappiness
to 0
impedirà al kernel di eliminare le pagine anonime a favore delle pagine dalla cache dei file. Ciò potrebbe essere utile se i programmi eseguono la maggior parte della cache da soli, come nel caso di alcuni database. Nei sistemi desktop ciò potrebbe migliorare l'interattività, ma il rovescio della medaglia è che le prestazioni di I / O avranno probabilmente un colpo.
Molto probabilmente il valore predefinito è stato scelto come mezzo intermedio approssimativo tra questi due estremi. Come per qualsiasi parametro prestazionale, la regolazione vm.swappiness
dovrebbe essere basata su dati di riferimento comparabili ai carichi di lavoro reali, non solo su una sensazione viscerale.