Perché lo swappiness è impostato su 60 per impostazione predefinita?


109

Ho appena letto alcune cose sulla swappiness su Linux. Non capisco perché il valore predefinito sia impostato su 60.

Secondo me questo parametro dovrebbe essere impostato su 10 per ridurre lo scambio. Lo scambio è sui miei dischi rigidi, quindi è molto più lento della mia memoria.

Perché hanno configurato il kernel in questo modo?


2
@Mat Vedi questo per come fare il benchmarking della swapiness.
Geremia,

Risposte:


133

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.swappinessopzione è 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.swappinessviene 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.cnella struttura dei sorgenti del kernel.

Dato un vm.swappinessdi 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.swappinessto 0impedirà 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.swappinessdovrebbe essere basata su dati di riferimento comparabili ai carichi di lavoro reali, non solo su una sensazione viscerale.


4
In che modo l'installazione del sistema operativo su un dispositivo a stato solido influisce sul compromesso?
Gerrit,

3
@gerrit Il tipo di supporto di memorizzazione sottostante è irrilevante. Questo tipo di dettagli non è visibile al sottosistema di gestione della memoria.
Thomas Nyman,

Il tipo di supporto di memorizzazione sottostante è irrilevante dal punto di vista dell'utilizzo della memoria. Si potrebbe considerare di ridurre la swapiness che il supporto supporta una quantità limitata di letture / scritture (ad esempio memoria flash) al fine di aumentarne la longevità.
MatrixManAtYrService

2
@MatrixManAtYrService Grazie al livellamento interno dell'usura e alla ridondanza integrata, i moderni SSD (a cui fa riferimento la domanda nel commento precedente) hanno dimostrato di durare fino a 2 PB (!) Di scritture prima di presentare errori. Anche le unità più economiche in quegli esperimenti sono durate 300 TB prima che si verificassero errori, ben oltre il livello di garanzia ufficiale di circa 100 TB. Almeno a mio parere, non è davvero giustificato regolare lo swappiness per adattarsi a un SSD su workstation o laptop.
Thomas Nyman,

2
@ThomasNyman hai un buon punto, per la maggior parte degli utenti non vale la pena preoccuparsi. Il caso che mi ha portato a questo post riguardava lo spazio di scambio su una scheda SD, che riconosco un po 'un caso limite.
MatrixManAtYrService,

9

Il problema è che non esiste un valore predefinito adatto a tutte le esigenze. L'impostazione dell'opzione di swappiness su 10 potrebbe essere un'impostazione appropriata per i desktop, ma il valore predefinito di 60 potrebbe essere più adatto per i server. In altre parole, lo swapiness deve essere modificato in base al caso d'uso: desktop vs. server, tipo di applicazione e così via.

Inoltre, il kernel di Linux utilizza la memoria per la cache del disco, altrimenti la RAM non verrebbe utilizzata e questo non è efficiente e previsto. Avere i dati del disco nella cache significa che se qualcosa necessita nuovamente degli stessi dati, probabilmente li otterrà dalla memoria. Recuperare i dati da lì è molto più veloce che recuperarli di nuovo dal disco. E l'opzione di swappiness è un meccanismo di quanto il kernel Linux preferisce scambiare su disco per ridurre la cache del disco. Dovrebbe piuttosto rimuovere i dati più vecchi dalla cache o scambiare alcune pagine del programma?

Questo articolo potrebbe far luce anche sull'argomento. In particolare, come viene stimata la tendenza allo scambio.


Non capisco perché 60 sia più adatto ai server. Ho server e alcuni processi vanno in swap anche se abbiamo il 40% di RAM freem. non ha senso per me.
Hugo,

7
Ha senso spostare parti della memoria in swap se è molto improbabile che possano accedervi, in questo modo Linux mantiene la maggior quantità possibile di RAM libera per essere pronta per le situazioni in cui effettivamente ne ha bisogno.
replica il

2
drs

Il link all'articolo è morto ma puoi ancora visualizzarlo dalla Wayback Machine
drs

L'articolo collegato è informativo. Grazie per averlo condiviso.
Pistos,

5

Aggiunta di maggiori dettagli alle risposte sopra.
Dato che stiamo usando sempre più VM, un host linux potrebbe essere un vm in uno di questi ambienti cloud. In entrambi gli esempi 1 e 2 abbiamo una buona idea delle applicazioni in esecuzione e quindi di quanta RAM consumano. In 3, non così tanto

  • Esempio 1
    Un cloud privato ad alte prestazioni (si pensi al tipo per cui la maggior parte delle banche pagherebbe milioni) uno in cui il disco è fornito da un array di archiviazione molto costoso con un IO MOLTO buono. Parte di tale memoria può trovarsi nella RAM (nell'array di dischi) supportata da dischi SSD, supportata da dischi regolari con mandrini. In questa situazione il disco che vede la VM potrebbe essere solo un po 'più lento della RAM a cui può accedere. Per un singolo vm non c'è molta differenza tra swap e ram.
  • Esempio 2
    Come nell'esempio 1 ma al posto di una singola VM hai centinaia, migliaia o più. In questa situazione scopriamo che la RAM del server (hypervisor) è economica e abbondante dove la memoria RAM è costosa (relativamente parlando). Se dividiamo i requisiti di RAM tra Hypervisor RAM e SWAP forniti dal nostro costoso array di archiviazione, scopriamo che utilizziamo rapidamente tutta la RAM nell'array di archiviazione, i blocchi vengono quindi serviti dagli SSD e infine dai mandrini. All'improvviso ogni cosa inizia a diventare molto lenta. In questo caso probabilmente vorremmo assegnare molta RAM (dall'hypervisor) alla VM e impostare lo swappiness su 0 (solo swap per evitare condizioni di memoria insufficiente) poiché l'effetto cumulativo di tutte quelle VM avrà un effetto sulle prestazioni di lo stoccaggio,
  • Esempio 3 Un laptop o desktop moderno probabilmente con un SSD. I requisiti di memoria sono considerati sconosciuti. Quale browser utilizzerà l'utente, quante schede avranno aperte, modificheranno anche un documento, un'immagine RAW o eventualmente un video, consumeranno tutti RAM. Impostando lo swappiness su un valore basso ed eseguendo altre modifiche al file system, ci saranno meno scritture sull'SSD e quindi durerà più a lungo.

3
Le preoccupazioni relative alla resistenza di scrittura SSD per un sistema dell'utente finale sono sopravvalutate. Gli SSD moderni in genere sopravvivono a volumi di scrittura di molte centinaia di terabyte. È improbabile che un tipico sistema desktop anche con un intenso utilizzo di swap utilizzi così tanto per molti anni di funzionamento.
Jules il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.