Ho usato unix per un bel po 'e negli ultimi due anni ho sentito che lo scambio è un anacronismo, ma sarei curioso di sapere cosa pensano gli altri.
Il mio argomento è grosso modo questo (supponendo che non vi siano ulimit globali o twiddling delle impostazioni OOM):
There is little value in swap because if you need to swap out to disk,
odds are it's going to be a vicious cycle where an app will continue
to eat not only real memory, but swap as well until it gets OOM
reaped (_if_ it gets OOM reaped).
If you have swap enabled, it will only prolong this death march to
the detriment of other processes - and in the worst case where the
process is not OOM reaped in a timely manner, grind the system to
a halt.
Without swap, it will probably get OOM reaped sooner (if at all)
Per qualsiasi servizio ottimizzato per le prestazioni, penso che comprendere i limiti superiori dell'utilizzo delle risorse sarebbe la chiave per ottimizzarlo in primo luogo, nel qual caso sai quanto ti serve.
Non riesco a immaginare molte situazioni (alcune, ma non molte) in cui sospenderesti un processo in corso e potrebbe scambiarsi per fare spazio ad altre cose, ma perderesti comunque le prese se lo facessi, quindi forzando un core-dump tramite gcc o copia manuale della memoria sarebbe funzionalmente equivalente.
Sicuramente non vorrei scambiare su un sistema incorporato (anche se potrebbe avere un ram disponibile più piccolo), se esaurisci il ram preferirei che il mio processo muoia piuttosto che strappare una memoria flash di milioni di scritture per settore guidare per un fine settimana livellando l'usura dei settori fino al nocciolo.
Qualche barba unix là fuori ha qualche motivo convincente per mantenere lo scambio?
AGGIORNAMENTO risposte & analisi:
CONFERMATO? - fork () richiede la stessa quantità di memoria per il processo figlio del genitore
Modern fork () è copy-on-write per bambini su POSIX (in generale), ma in particolare Linux e FreeBSD , e suppongo OSX per estrapolazione. Considero questa parte del bagaglio anacronistico che lo scambio porta con sé.
Curiosamente, questo articolo di Solaris afferma che anche se Solaris usa Copy-on-Write con fork (), si dovrebbe avere almeno 2x (!) La dimensione del processo genitore nella memoria virtuale libera per il fork () da non fare a pezzi nella Medio. Mentre l'elemento di Solaris un po ' sballa l'argomento che di swap è un anacronismo - Credo che i sistemi operativi sufficienti implementano correttamente mucca in un modo che è più importante per sfatare il mito che a segnare come ulteriore giustificazione per swap. Da. Affrontiamolo. A questo punto le persone che usano effettivamente Solaris sono probabilmente solo ragazzi Oracle. Senza offesa Solaris!
CONFERMATO - I file tmpfs / ramfs possono andare a scambiarsi come una comodità quando si riempie tmpfs / ramfs
Non usare tmpfs / ramfs senza limiti! Definisci sempre in modo esplicito la quantità di ram che vuoi usare da tmpfs / ramfs.
PIACEVOLE - Avere un piccolo scambio 'per ogni evenienza'
Uno dei miei vecchi capi era solito dire: "non sai cosa non sai" - in sostanza, non puoi prendere una decisione sulla base di informazioni che non hai ancora. Questo è un argomento plausibile per scambiarmi, tuttavia - sospetto che i tipi di cose che faresti per rilevare se la tua applicazione si sta scambiando o meno sarebbero più pesanti del verificare se malloc () ha successo o cogliere l'eccezione da un nuovo () non riuscito.
Questo può essere utile nei casi in cui stai eseguendo un desktop e hai un sacco di cose casuali in corso, ma anche ancora - se qualcosa va storto preferirei che OOM fosse raccolto piuttosto che tuffarsi nell'inferno di scambio. Sono solo io.
ARRESTATO! - Su Solaris , lo scambio è importante per un paio di motivi
tmpfs - stati La quantità di spazio libero disponibile per tmpfs dipende dalla quantità di spazio di swap non allocato nel sistema. La dimensione di un file system tmpfs aumenta per adattarsi ai file scritti su di esso, ma ci sono alcuni compromessi intrinseci per gli utenti pesanti di tmpfs. Tmpfs condivide le risorse con i segmenti di dati e stack dei programmi in esecuzione. L'esecuzione di programmi molto grandi può essere influenzata se i file system tmpfs sono vicini alla dimensione massima consentita. Tmpfs è libero di allocare tutto tranne 4 MB di spazio di swap del sistema.
Fatti e miti di Solaris sullo swap - stati La memoria virtuale oggi consiste nella somma totale della RAM fisica e dello spazio di swap su disco. Solaris NON richiede alcuna configurazione dello spazio di swap. Se si sceglie questa opzione, una volta che la RAM è piena, non sarà possibile avviare nuovi processi. .
Non sono sicuro che ciò significhi che la massima mappa virtuale che puoi creare è ram + swap , o se potresti ancora fare qualcosa come mmap () un file più grande di ram e fare affidamento sull'inizializzazione pigra di mmap (). in questi giorni probabilmente può funzionare bene Solaris senza swap, sembra che sia meno amichevole rispetto ad altri sistemi operativi POSIXy.
ARRESTATO! I più diffusi strumenti di ibernazione Linux sembrano basarsi sullo scambio
Per impostazione predefinita, TuxOnIce sembra fare affidamento sullo scambio per l'ibernazione, sebbene esistano altri backend. Tuttavia, se non stai eseguendo una scatola che deve essere in letargo, rimarrei comunque dietro l'affermazione che "lo scambio è anacronistico su Linux"