GNU/Linux >> Linux Esercitazione >  >> Linux

Ho bisogno di spazio di scambio se ho una quantità di RAM più che sufficiente?

Da quanto ho capito, lo scopo di uno scambio partizione in Linux è quello di liberare alcune informazioni "a cui si accede raramente" dalla RAM e spostarle in una partizione specifica sul disco rigido (al costo di renderlo più lento da leggere o scrivere), consentendo essenzialmente alle applicazioni attive più “memoria ad alta velocità”.

Questo è ottimo per quando sei su una macchina con una piccola quantità di RAM e non vuoi incorrere in problemi se esaurisci. Tuttavia, se il tuo sistema ha 16 GB o 32 GB di RAM e supponendo che tu non stia eseguendo un database MySQL per StackExchange o modificando un film completo a 1080p in Linux, dovrebbe essere utilizzata una partizione di swap?

Risposta accettata:

Sì.

Dovresti assolutamente sempre avere lo scambio abilitato, a meno che non vi sia un motivo molto convincente e proibitivo (come nessun disco o solo disco di rete presente). Dovresti fare uno scambio nell'ordine delle dimensioni ridicole spesso consigliate (come il doppio della quantità di RAM)? Bene, no .

Il motivo è che lo scambio non è utile solo quando le tue applicazioni consumano più memoria della RAM fisica (in realtà, in tal caso, lo scambio è non molto utile affatto perché ha un grave impatto sulle prestazioni). L'incentivo principale per lo scambio al giorno d'oggi è non per trasformare magicamente 16GiB di RAM in 32 GiB, ma per utilizzare in modo più efficiente la RAM installata disponibile.

Su un computer moderno, la RAM non rimane inutilizzata. La RAM inutilizzata è qualcosa che potresti anche non aver acquistato e risparmiato invece i soldi. Pertanto, qualsiasi cosa carichi o qualsiasi cosa che sia altrimenti mappata in memoria, qualsiasi cosa che potrebbe eventualmente essere riutilizzato da chiunque in qualsiasi momento successivo (limitato da vincoli di sicurezza) viene memorizzato nella cache. Subito dopo l'avvio della macchina, tutta la RAM fisica sarà stata utilizzata per qualcosa .

Ogni volta che chiedi una nuova pagina di memoria dal sistema operativo, il gestore della memoria deve prendere una decisione ponderata:

  1. Elimina una pagina dalla cache del buffer
  2. Elimina una pagina da una mappatura (effettivamente uguale a #1, sulla maggior parte dei sistemi)
  3. Sposta una pagina a cui non si accede da molto tempo, preferibilmente mai, per scambiarla (questo potrebbe infatti avvenire anche in modo proattivo, non necessariamente all'ultimo momento)
  4. Uccidi il tuo processo o uccidi un processo casuale (OOM)
  5. Panico del kernel

Le opzioni n. 4 e n. 5 sono molto indesiderabili e accadrà solo se il sistema operativo non ha assolutamente altra scelta. Le opzioni #1 e #2 significano che butti via qualcosa di cui potresti aver bisogno presto di nuovo. Ciò ha un impatto negativo sulle prestazioni.

L'opzione n. 3 significa che sposti qualcosa di cui (probabilmente) non hai bisogno a breve su una memoria lenta. Va bene perché ora qualcosa di cui hai bisogno può usare la RAM veloce.

Rimuovendo l'opzione n. 3, hai effettivamente limitato il sistema operativo all'esecuzione n. 1 o n. 2. Ricaricare una pagina dal disco equivale a ricaricarla dallo swap, tranne per il fatto che dover ricaricare dallo swap è solitamente meno probabile (a causa delle decisioni di paging corrette).

In altre parole, disabilitando lo scambio non guadagni nulla, ma limiti il ​​numero di opzioni utili del sistema operativo per gestire una richiesta di memoria. Cosa che potrebbe non esserlo , ma molto probabilmente potrebbe esserlo uno svantaggio (e non sarà mai un vantaggio).

Relazionato:elettrico:ho collegato uno scaldabagno alla presa, ora la presa non funziona. Alimentazione ancora accesa?

[MODIFICA]

L'attento lettore di mmap manpage, in particolare la descrizione di MAP_NORESERVE , noterà un altro buon motivo per cui lo scambio è in qualche modo necessario anche su un sistema con memoria fisica "sufficiente":

"Quando lo spazio di swap non è riservato, si potrebbe ottenere SIGSEGV durante la scrittura se non è disponibile memoria fisica."

— Aspetta un momento, cosa significa?

Se mappi un file, puoi accedere direttamente al contenuto del file come se il file fosse in qualche modo, per magia, nello spazio degli indirizzi del tuo programma. Per l'accesso in sola lettura, il sistema operativo necessita in linea di principio non più di una singola pagina di memoria fisica che può ripopolare con dati diversi ogni volta che accedi a una pagina virtuale diversa (per ragioni di efficienza, ovviamente non è quello che si fa, ma in linea di principio potresti accedere a terabyte di dati con un solo pagina di memoria fisica). E se tu anche scrivere su un file di mappatura? In questo caso, il sistema operativo deve disporre di una pagina fisica, o spazio di scambio, pronta per ogni pagina in cui viene scritta. Non c'è altro modo per mantenere i dati in giro fino a quando il processo di writeback delle pagine sporche non ha fatto il suo lavoro (che può durare diversi secondi). Per questo motivo, il sistema operativo riserva (ma non si impegna necessariamente) lo spazio di scambio, quindi nel caso in cui tu stia scrivendo su una mappatura mentre non ci sono pagine fisiche inutilizzate (è una condizione del tutto possibile e normale), tu' ri garantito che funzionerà ancora.

E se non ci fosse scambio? Significa che nessuno scambio può essere prenotato (eh!), e questo significa che non appena non ci sono pagine fisiche libere rimaste e stai scrivendo a una pagina, riceverai una piacevole sorpresa nella forma del tuo processo di ricezione un errore di segmentazione e probabilmente essere stato ucciso.

[/EDIT]

Tuttavia, la tradizionale raccomandazione di fare lo swap due volte più grande della RAM non ha senso. Sebbene lo spazio su disco sia economico, non ha senso assegnare così tanto scambio. Sprecare qualcosa che costa poco è ancora uno spreco e tu assolutamente non vuoi scambiare continuamente set di lavoro con dimensioni di diverse centinaia di megabyte (o più grandi).

Non esiste un unico "corretto" cambia taglia (ci sono tante taglie “corrette” quanti sono gli utenti e le opinioni). Di solito assegno 512 MiB fissi, indipendentemente dalle dimensioni della RAM, il che funziona molto bene per me. Il ragionamento alla base è che 512 MiB è qualcosa che puoi sempre permettersi al giorno d'oggi, anche su un piccolo disco. D'altra parte, aggiungere diversi gigabyte di swap non è niente di meglio. Non li userai, a meno che qualcosa non vada seriamente storto.

Anche su un SSD, lo scambio è di ordini di grandezza più lento della RAM (a causa della larghezza di banda e della latenza del bus) e sebbene sia molto accettabile per spostare qualcosa da scambiare che probabilmente non sarà più necessario (ad esempio, molto probabilmente non lo cambierai di nuovo, quindi il tuo pool di pagine disponibili viene effettivamente ampliato gratuitamente), se davvero necessità> quantità considerevoli di swap (ovvero, hai un'applicazione che utilizza, ad esempio, un set di dati da 50 GiB), sei praticamente perso.

Correlati:il vespaio ha bisogno di sfiato?

Una volta che il tuo computer inizia a scambiare gigabyte di pagine in entrata e in uscita, tutto va a rotoli. Quindi, per la maggior parte delle persone (compreso me) questa non è un'opzione, e quindi avere così tanto scambio non ha senso.


Linux
  1. Df dice che ho 20 g di spazio su disco in più utilizzato rispetto a Du. Perché??

  2. Scambia spazio sui server cloud

  3. Come aggiungere spazio di scambio su Ubuntu 22.04

  4. Come aggiungere spazio di swap in Linux

  5. Come aumentare lo spazio di swap su Linux

Come cancellare la cache di memoria RAM e il buffer e lo spazio di scambio su Linux

Perché usare Swap quando c'è spazio libero più che sufficiente nella RAM?

Come controllare lo spazio di scambio in Linux

Zorin OS 15 più bello e utile che mai

Come rimuovere Swap Space da Centos 7.x?

Puoi avere più di un file ~/.ssh/config?