Perché abbiamo bisogno di impostare lo spazio di swap come due volte grande come la nostra memory fisica?

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

La risposta breve è "Non wherete ".

A seconda del tipo di kernel / sistema può avere un senso nello spazio di swap di size come quello, ad esempio nella man page di tuning di FreeBSD (7) troviamo la seguente logica dietro una dimensione di swap alless di 2x della dimensione della memory fisica:

Dovreste dimensione tipicamente il vostro spazio di swap a circa 2x memory principale per i sisthemes con less di 2GB di RAM, o circa 1x memory principale se avete più. Se non si dispone di molta RAM, tuttavia, in genere si desidera un sacco di scambio. Non è consigliabile configurare less di 256M di swap su un sistema e si dovrebbe tenere a mente l'espansione di memory futura durante la dimensione della partizione di swap. Gli algoritmi di pagine VM del kernel sono sintonizzati per eseguire il meglio quando ci sono alless 2x swap rispetto alla memory principale. La configuration troppo scarsa di swap può portre a inefficienze nel codice di scansione della pagina VM e creare ulteriori problemi se si aggiunge più memory alla macchina. Infine, nei sisthemes più grandi con dischi SCSI multipli (o più dischi IDE operanti su diversi controller), si consiglia vivamente di configurare lo swap su ciascuna unità. Le partizioni di swap sugli azionamenti dovrebbero essere di circa la stessa dimensione. Il kernel può gestire size arbitrarie, ma le strutture di dati interne scalano a 4 volte la più grande partizione di swap. Mantenendo le partizioni di swap in prossimità della stessa dimensione, il kernel consentirà lo spazio di swap ottimale tra i dischi N. Non preoccuparti di sovraccaricare un po ', lo spazio di swap è la grazia salvifica di UNIX e anche se normalmente non utilizzi molti scambi, può darti più tempo per recuperare da un programma fuggitivo prima di essere costretti a riavviare.

Altri fattori possono essere importnti quando si decide quanto spazio di scambio per allocare, where allocare e così via. Ad esempio, se si sta installando un server di grandi size con 128 GB di memory fisica, è probabilmente una buona idea evitare l'assegnazione anticipata di 256 GB di spazio su disco per il swap che non verrà mai utilizzato.

D'altra parte, avere uno spazio di swap spesso consente di afferrare le discariche del kernel (ad esempio in Open-, Net- e FreeBSD). Quindi è una buona idea avere alless spazio di scambio sufficiente per afferrare un dump completo del kernel per il panico.

Non esiste una regola assoluta che si adatta a tutti i casi. Devi leggere sul comportmento del tuo sistema specifico, imparare come funziona, riflettere sull'uso previsto del sistema e decidere la dimensione migliore dello spazio di swap che soddisfa le tue esigenze.

Non c'è bisogno di affatto. Le vecchie versioni di windows dovrebbero trattare each pagina della memory assegnata come essenzialmente un mmap sul file di swap, quindi hai bisogno di alless la dimensione totale RAM fisica in swap per essere utile – questo non è più il caso di oggi e non è mai stato caso in Linux, ma la voce continua.

Tuttavia, c'è un caso in cui avere alless il maggior numero di scambi di RAM che è desiderabile – ibernazione. Poiché Linux utilizza il file di scambio per ibernazione (aka, suspend-to-disk), è necessario abbastanza swap per tenere tutti i dati in RAM, oltre a tutti i dati già scambiati (less la RAM in cache). Questo è solo il caso per le macchine che necessitano di ibernazione, come i computer porttili, ovviamente.

Infine, avere troppo scambi può essere una cosa negativa , nonostante ciò che gli altri possono dire. Pensate – se avete 4G di RAM, e in cima a questa necessità di un ulteriore 8G di swap, pensi che il tuo sistema sarà ancora utile, cosa succede con tutto il swapping da / da disco che sta facendo? Spesso è meglio che il process di memory-hogging venga ucciso immediatamente quando si esaurisce la memory, piuttosto che l'integer sistema si rallenta ad un livello inutilizzabile quando inizia a spendere tutti i suoi dati di marcia in tempo e in scambio.

Un'antica raccomandazione basata su ipotesi sulla tipica capacità di memory del sistema, sulla velocità di memory del bus di memory e sulla velocità del disco e sulla percentuale dei processi di tempo in vari stati di attesa. Sono scettico che in questi giorni vorrai più di forse 1/2 memory fisica nello spazio di swap – sufficiente a impedire l'uccisione random di OOM quando si sta eseguendo vicino all'utilizzo della memory completa. Ma interamente dipende dal tuo carico di lavoro tipico, YMMV, ecc.

Molto tempo fa c'era una variante unix comune (penso che fosse un BSD, ma non riesco a trovare il riferimento in questo momento) che alloca each pagina di memory virtuale nello spazio di swap. Quindi, se hai avuto tanto lo scambio di RAM, la dimensione della tua memory virtuale sarebbe ancora la stessa della RAM. La consueta raccomandazione è stata quella di avere il doppio dello scambio di RAM, che ha reso la memory virtuale due volte più grande della RAM.

Le uniche moderne non si comportno in questo modo, quindi la ragione della regola è obsoleta (credo che era già obsoleta nel 1992, quindi non era mai pertinente per Linux). Ma, stranamente, la regola è sopravvissuta. Se lo segui ora, ottieni la memory virtuale che è tre volte la tua quantità di RAM, mentre l'intento originale era quello di get 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ù scambi. Quanto il swap dovresti avere dipende molto da quanto RAM hai e come lo si utilizza. È ansible eseguire un sistema senza swap, ma non si ha la possibilità di scegliere i programmi da uccidere se la RAM viene riempita e il sistema potrebbe essere più lento (a volte è meglio utilizzare la RAM per la cache e sostituire una memory di programma su). L'allocazione di troppi costi di swap comport una minima quantità di RAM (per le strutture dei dati del kernel) e, naturalmente, di spazio su disco (ma al giorno d'oggi è di solito sporco a basso costo se non su SSD). Avere abbastanza swap per adattarsi a tutta la memory virtuale è necessaria se si desidera sobbarcare.