Perché dobbiamo impostare uno spazio di swap due volte più grande della nostra memoria fisica?


11

Quando vogliamo installare un sistema Linux, c'è un suggerimento comune per impostare lo spazio di swap due volte più grande della tua memoria fisica. Voglio sapere perché ne abbiamo bisogno e come nasce questo suggerimento?

Risposte:


8

La risposta breve è "Non è necessario ".

A seconda del tipo di kernel / sistema potrebbe avere senso ridimensionare lo spazio di swap in questo modo, ad esempio nella manpage tuning (7) di FreeBSD troviamo la seguente logica dietro una dimensione di swap almeno 2x della dimensione della memoria fisica:

In genere, è necessario ridimensionare lo spazio di swap su circa 2 volte la memoria principale per i sistemi con meno di 2 GB di RAM o circa 1 volta la memoria principale se ne si dispone di più. Se non si dispone di molta RAM, tuttavia, si desidera generalmente molto più scambio. Non è consigliabile configurare almeno 256 M di swap su un sistema e tenere presente l'espansione della memoria futura durante il dimensionamento della partizione di swap. Gli algoritmi di paging della VM del kernel sono ottimizzati per funzionare al meglio quando vi è almeno 2x scambio rispetto alla memoria principale. La configurazione di uno swap insufficiente può comportare inefficienze nel codice di scansione della pagina della VM e creare problemi in seguito se si aggiunge più memoria al computer. Infine, su sistemi più grandi con più dischi SCSI (o più dischi IDE che operano su controller diversi), si consiglia vivamente di configurare lo scambio su ogni unità. Le partizioni di swap sulle unità dovrebbero avere approssimativamente le stesse dimensioni. Il kernel è in grado di gestire dimensioni arbitrarie ma le strutture di dati interne scalano fino a 4 volte la partizione di swap più grande. Mantenere le partizioni di swap vicino alla stessa dimensione consentirà al kernel di eseguire lo striping dello spazio di swap in modo ottimale attraverso gli N dischi. Non preoccuparti di esagerare un po ', lo spazio di scambio è la grazia salvifica di UNIX e anche se normalmente non usi molto scambio, può darti più tempo per recuperare da un programma in fuga prima di essere costretto a riavviare. Mantenere le partizioni di swap vicino alla stessa dimensione consentirà al kernel di eseguire lo striping dello spazio di swap in modo ottimale attraverso gli N dischi. Non preoccuparti di esagerare un po ', lo spazio di scambio è la grazia salvifica di UNIX e anche se normalmente non usi molto scambio, può darti più tempo per recuperare da un programma in fuga prima di essere costretto a riavviare. Mantenere le partizioni di swap vicino alla stessa dimensione consentirà al kernel di eseguire lo striping dello spazio di swap in modo ottimale attraverso gli N dischi. Non preoccuparti di esagerare un po ', lo spazio di scambio è la grazia salvifica di UNIX e anche se normalmente non usi molto scambio, può darti più tempo per recuperare da un programma in fuga prima di essere costretto a riavviare.

Altri fattori possono essere importanti quando si decide la quantità di spazio di swap da allocare, dove allocarlo e così via. Ad esempio, se stai installando un server di grandi dimensioni con 128 GB di memoria fisica, è probabilmente una buona idea evitare di pre-allocare 256 GB di spazio su disco per lo scambio che non verrà mai utilizzato.

D'altra parte, avere un po 'di spazio di swap spesso rende possibile catturare i dump del kernel (ad esempio in Open-, Net- e FreeBSD). Quindi è una buona idea avere almeno abbastanza spazio di swap per prendere un dump del kernel completo in preda al panico.

Non esiste una regola assoluta adatta a tutti i casi. Devi leggere il comportamento del tuo sistema specifico, imparare come funziona, pensare all'uso previsto del sistema e decidere la dimensione dello spazio di swap più adatta alle tue esigenze.


5

Non è necessario affatto. Le vecchie versioni di Windows consideravano ogni pagina di memoria allocata come essenzialmente un mmap sul file di scambio, quindi era necessario almeno la dimensione totale della RAM fisica in scambio perché fosse utile - questo non è più il caso oggi, e non è mai stato il caso in Linux, ma la voce persiste.

Tuttavia, esiste un caso in cui è auspicabile avere almeno lo swap della RAM: l'ibernazione. Poiché Linux utilizza il file di scambio per l'ibernazione (aka, suspend-to-disk), è necessario uno scambio sufficiente per contenere tutti i dati nella RAM, oltre a tutti i dati che sono già stati scambiati (meno cache RAM). Questo vale solo per le macchine che necessitano di un letargo, come i laptop, ovviamente.

Infine, avere troppi swap può essere una cosa negativa , nonostante ciò che gli altri possono dire. Pensa: se hai 4G di RAM, e per di più hai bisogno di ulteriori 8G di scambio, pensi che il tuo sistema sarà ancora utilizzabile, che cosa sta facendo con tutto lo scambio da / a disco? Spesso è meglio che il processo di hogging della memoria venga interrotto immediatamente quando si esaurisce la memoria, piuttosto che avere l'intero sistema lento a un livello inutilizzabile quando inizia a passare tutto il suo tempo a eseguire il marshalling dei dati dentro e fuori dallo swap.


1

Molto tempo fa, esisteva una variante unix comune (penso che fosse un BSD, ma non riesco a trovare il riferimento in questo momento) che alloca ogni pagina di memoria virtuale nello spazio di scambio. Quindi se avessi lo stesso swap della RAM, la dimensione della tua memoria virtuale sarebbe sempre la stessa della RAM. La consueta raccomandazione quindi era quella di avere il doppio dello swap rispetto alla RAM, il che rendeva la memoria virtuale due volte più grande della RAM.

I moderni unice non si comportano in questo modo, quindi il motivo della regola è obsoleto (penso che fosse già obsoleto nel 1992, quindi non era mai rilevante per Linux). Ma stranamente la regola è sopravvissuta. Se lo segui ora, otterrai una memoria virtuale che è tre volte la tua quantità di RAM, mentre l'intento originale era di ottenere il doppio.

Solo perché la ragione storica dietro la regola è sbagliata non significa che sia stupida. Lo spazio su disco è diventato più economico, quindi può avere senso allocare più swap. Quanto swap dovresti avere dipende molto da quanta RAM hai e da come la usi. Puoi eseguire un sistema senza scambio, ma non hai la possibilità di scegliere quali programmi uccidere se la RAM si riempie e il sistema potrebbe essere più lento (a volte è meglio usare la RAM per la cache e scambiare un po 'di memoria del programma su). Allocare troppi swap costa una piccola quantità di RAM (per le strutture di dati del kernel) e, naturalmente, lo spazio su disco (ma al giorno d'oggi è di solito poco costoso tranne che su SSD). Avere abbastanza swap per adattarsi a tutta la memoria virtuale è necessario se si desidera andare in letargo.


Anche Windows lo fa: se il gestore della memoria ha abbastanza spazio di scambio, conserva anche una copia delle pagine che sono in memoria (a partire da quelle modificate meno di recente), quindi se ha bisogno di scambiarle può farlo solo gettando le pagine lontano dalla memoria.
pqnet,

0

Un'antica raccomandazione basata su ipotesi sulla capacità tipica della memoria di sistema, la velocità del bus di memoria rispetto alla velocità del disco e la percentuale di tempo impiegata dai processi in vari stati di attesa. Sono scettico che in questi giorni vorresti più di forse 1/2 memoria fisica nello spazio di scambio - quel tanto che basta per impedire l'uccisione casuale di OOM quando corri vicino all'utilizzo della memoria completa. Ma dipende interamente dal tipico carico di lavoro, YMMV, ecc.

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.