GNU/Linux >> Linux Esercitazione >  >> Linux

Lo scambio è un anacronismo?

Uso unix da un po' e negli ultimi due anni ho pensato che lo scambio fosse un anacronismo, ma sarei curioso di sapere cosa ne pensano gli altri.

La mia argomentazione è più o meno questa (supponendo che non ci siano ulimit globali o manipolazioni 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 esecuzione e potrebbe sostituirlo per fare spazio ad altre cose, ma perderesti comunque i socket se lo facessi, quindi forzando un core-dump tramite gcc o copiare manualmente la memoria sarebbe funzionalmente equivalente.

Sicuramente non vorrei scambiare su un sistema incorporato (anche se potrebbe avere una RAM disponibile più piccola), se esaurisci la RAM preferirei che il mio processo muoia piuttosto che strappare una memoria flash da un milione di scritture per settore guida per un fine settimana livellando i settori fino al nocciolo.

Qualche barba unix là fuori ha dei motivi convincenti per continuare a scambiare?

AGGIORNA risposte e&analisi:

  • CONFERMATO? – fork() richiede la stessa quantità di memoria per il processo figlio del genitore

    Modern fork() è copy-on-write per i bambini su POSIX (in generale), ma in particolare Linux e FreeBSD, e presumo 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 utilizza Copy-on-Write con fork(), dovresti avere almeno 2x (!) la dimensione del processo padre nella memoria virtuale libera affinché fork() non cada nel mezzo. Mentre l'elemento Solaris un po' smentisce l'argomento secondo cui lo scambio è un anacronismo:penso che un numero sufficiente di sistemi operativi implementi correttamente CoW in modo tale che sia più importante sfatare il mito piuttosto che contrassegnarlo come un'ulteriore giustificazione per lo scambio. Da. Affrontiamolo. A questo punto le persone che effettivamente usano Solaris sono probabilmente solo ragazzi di Oracle. Senza offesa Solaris!

  • CONFERMATO – I file tmpfs/ramfs possono essere scambiati per comodità quando tmpfs/ramfs si riempie

    Non usare tmpfs/ramfs no-limit! Definisci sempre in modo esplicito la quantità di ram che vuoi che tmpfs/ramfs utilizzi.

  • PLUSABILE – Fai un piccolo scambio "per ogni evenienza"

    Uno dei miei vecchi capi aveva un grande detto:"non sai quello che non sai" - in sostanza, non puoi prendere una decisione sulla base di informazioni che non hai ancora. Questo è un argomento plausibile per lo scambio per me, tuttavia - sospetto che i tipi di cose che faresti per rilevare se la tua applicazione si sta sostituendo o meno sarebbero più pesanti del controllo per vedere se malloc() riesce o catturare l'eccezione da un new() fallito.

    Questo può essere utile nei casi in cui stai eseguendo un desktop e hai un sacco di cose casuali in corso, ma anche comunque - se qualcosa va fuori di testa, preferirei che fosse raccolto OOM piuttosto che tuffarmi nell'inferno degli scambi. Sono solo io.

  • BUSTO! – Su Solaris , scambia è importante per un paio di motivi

    tmpfs – afferma 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 cresce per ospitare i file scritti su di esso, ma ci sono alcuni compromessi intrinseci per gli utenti pesanti di tmpfs. Tmpfs condivide le risorse con i dati e i segmenti dello stack dei programmi in esecuzione. L'esecuzione di programmi molto grandi può essere compromessa se i file system tmpfs sono vicini alla dimensione massima consentita. Tmpfs è libero di allocare tutto tranne 4 MB dello spazio di swap del sistema.

    Fatti e miti di Solaris sullo scambio – afferma La memoria virtuale oggi è costituita dalla somma totale della RAM fisica e dello spazio di scambio su disco. Solaris NON richiede la configurazione di alcuno spazio di scambio. Se scegli questa opzione, una volta che la RAM è piena, non sarai in grado di avviare nuovi processi. .

    Non sono sicuro che questo significhi che la mappa virtuale massima che puoi creare è ram+swap , o se potresti ancora fare qualcosa come mmap() un file più grande della ram e fare affidamento sull'inizializzazione pigra di mmap(). Anche se in questi giorni probabilmente puoi eseguire Solaris bene senza swap, sembra che sia meno amichevole di altri sistemi operativi POSIXy.

  • BUSTO! Gli strumenti di ibernazione Linux più diffusi sembrano fare affidamento 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 ibernata, continuerei a sostenere l'affermazione che "lo scambio è anacronistico su Linux"

Correlati:il completamento della scheda si blocca?

Risposta accettata:

Non confondere (the) swap (come area del disco) e (to) swap (come metodo per spostare le pagine di memoria dalla RAM al disco e reciprocamente).

Uno scambio eccessivo è qualcosa da evitare per motivi di prestazioni, ma avere un'area di scambio non è necessariamente un problema.

Su sistemi, come Linux, che sovraccaricano la memoria, cioè che consentono ai processi di allocare più memoria di quella disponibile, l'esaurimento della RAM con uno scambio insufficiente per gestire la situazione attiverà il killer OOM. Devi fidarti dell'algoritmo utilizzato per selezionare il processo "giusto" da uccidere e accettare che uno o più dei tuoi processi vengano uccisi senza che ti venga data la possibilità di spegnersi correttamente. Ecco una famosa analogia che spiega perché il killer OOM potrebbe non essere affatto una buona idea.

Su sistemi come Solaris, che non sovraccaricano la memoria, cioè che assicurano che una riserva di memoria sia sempre supportata dalla memoria virtuale, sia in RAM che su disco, è assolutamente necessario disporre di un'area di scambio sufficiente altrimenti una parte potenzialmente significativa della RAM sarà sprecato.

Correlati:Linux:scambiare le dimensioni della partizione per 4 GB di RAM?
Linux
  1. Come creare uno scambio in Linux

  2. Come creare un file di scambio in Linux

  3. Come gestire una partizione di scambio in Linux

  4. Monitoraggio e gestione della memoria

  5. Come aggiungere spazio di scambio su Debian 11

Come cancellare la memoria di scambio in Linux

Come controllare lo spazio di scambio in Linux

Come disabilitare lo scambio in Linux

Come aggiungere un file di scambio su Ubuntu 20.04

La crittografia domestica è sufficiente?

Scambia alt e super