Quali sono le esatte condizioni in base alle quali Linux scambia processo (s) di memoria da RAM a un file di swap?

StackOverflow https://stackoverflow.com/questions/2029015

Domanda

Il mio assistente ha 8gigs di RAM e 8gigs configurati per file di swap. Ho memoria applicazioni ad alta intensità di esecuzione. Queste applicazioni sono carichi di picco durante i quali troviamo aumentare l'utilizzo di swap. Circa 1 Viene utilizzato giga di swap.

Ho un altro server con 4gigs di RAM e 8 concerti di swap e applicazioni intensive di memoria simili in esecuzione su di esso. Ma qui scambiare utilizzo è molto trascurabile. Circa 100 MB.

Mi chiedevo che cosa sono le esatte le condizioni o un formula di massima in base al quale Linux farà uno swapout di una memoria di processo nella RAM per il file di swap. So che la sua base di fattore swapiness. Che altro si è basata su? Swap dimensioni del file? Eventuali puntatori a codice documentazione del kernel / source Linux che spiegano questo sarà grande.

È stato utile?

Soluzione

Ho visto un sacco di persone che postano spiegazioni soggettive di ciò che fa. Ecco si spera una risposta più completa.

Nel LRU divisa su post 2.6.28 Linux swappiness è un moltiplicatore utilizzato per modificare arbitrariamente la frazione che viene calcolato determinando la pressione accumulata in entrambi LRU.

Quindi, per esempio su un sistema con memoria libera a sinistra - il valore della memoria esistente si dispone è misurato in base al largo del tasso di quanta memoria è elencato come 'attivo' e il tasso di quanto spesso vengono promossi pagine per attivo dopo cadere nella lista inattiva.

Un LRU con molte promozioni / retrocessioni di pagine tra attivi e inattivi è in un sacco di utilizzo.

stoccaggio Tipicamente file di backup è più economico e più sicuro di sfrattare quando il corto di memoria e automaticamente viene dato un modificatore di 200 (questo rende file di backup di memoria 200 volte più valore di scambio di memoria supportata (che ha un valore pari a 0) quando si moltiplica questa frazione.

Che swappiness fa è modificare questo valore sottraendo il numero swappiness hai dato (di default 60) in memoria file e aggiungendo il valore swappiness hai dato come un moltiplicatore per anon memoria. Così lo swappiness di default ti lascia con la memoria anonima di essere 80 volte più prezioso di memoria per i file (200-60 per il file, 0 + 60 per anon). Così, su un sistema Linux tipico che ha esaurito tutta la sua memoria, la cache di pagina dovrebbe essere 80 volte più attivo memoria anonima per la memoria anonima per essere scambiati a favore di cache di pagina.

Se si imposta swappiness a 100 questo dà anon un modificatore di memoria 100 e file di un modificatore di 100 (200-100) lasciando sia LRU altrettanto ponderato. Così su un sistema di file pesante che vuole page cache fornisce la memoria anon non è così attiva come cache della pagina, allora la memoria anon sarà scambiato a disco per liberare spazio per cache di pagina in più.

Altri suggerimenti

Linux (o qualsiasi altro sistema operativo) divide la memoria fino in pagine (tipicamente 4Kb). Ciascuna di queste pagine rappresentano un pezzo di memoria. Informazioni sull'utilizzo di queste pagine è mantenuta, che contiene sostanzialmente informazioni se la pagina è libera o è in uso (parte di un processo), se è stato letto di recente, quale tipo di dati in esso contenuti (dati di processo, codice eseguibile etc. ), titolare della pagina, ecc Queste pagine possono anche essere suddivisi in due categorie - pagine filesystem o la cache della pagina (in cui tutti i dati di lettura / scrittura per il filesystem risiede) e le pagine appartenenti ai processi.

Quando il sistema è in esecuzione basso sulla memoria, il kernel inizia sostituendo pagine in base al loro utilizzo. Utilizzando un elenco di pagine allineati w.r.t Recency di accesso è comune per determinare quali pagine possono essere scambiati fuori (kernel di Linux ha un tale elenco troppo).

Durante lo scambio, kernel di Linux ha la necessità di decidere cosa trade-off quando bombardare pagine in memoria e inviando loro di scambiare. Se si scambia le pagine del file system in modo troppo aggressivo, più letture sono obbligatori il filesystem di leggere quelle pagine indietro quando sono necessari. Tuttavia, se si scambia le pagine di processo in modo più aggressivo può danneggiare l'interattività, perché quando l'utente tenta di utilizzare i processi scambiato, dovranno essere riletti dal disco. Vedere una bella discussione qui su questo.

Impostando swappiness = 0, si indica il kernel Linux non scambiare le pagine appartenenti ai processi. Quando si imposta swappiness = 100, invece, si dice che il kernel di scambiare le pagine appartenenti a processi in modo più aggressivo. Per ottimizzare il sistema, provare a cambiare il parametro swappiness a passi di 10, il monitoraggio delle prestazioni e le pagine di essere scambiato in / out ad ogni impostazione utilizzando il comando "vmstat". Mantenere l'impostazione che dà i risultati migliori. Ricordatevi di fare questo test durante le ore di punta. :)

Per le applicazioni di database, swappiness = 0 è generalmente raccomandato. (Anche allora, provare diverse impostazioni sui sistemi per arrivare ad un buon valore).

Riferimenti:
http: //www.linuxvox. com / 2009/10 / cosa-è-il-linux-kernel-parametro-vm-swappiness /
http://www.pythian.com/news/1913/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top