Linux: non creare una partizione di swap?


9

Mi chiedevo da quando ho sentito che lo swap viene utilizzato quando sei fuori o RAM e lo scambio è troppo male, dal momento che ho molta RAM (8 GB) ....

cosa succede se non creo una partizione di swap?

Inoltre, ne ho bisogno per l'ibernazione o non è un must?


devi creare lo swap, una volta ho provato a non creare lo swap, non ho potuto procedere con l'installazione
Lynob

cosa succede quando si installa all'interno di Windows? L'ho fatto e sembrava anche un po 'lento per il mio impianto rispetto a Windows, ma non ho creato la partizione
Mihai Bratulescu,

Non ho mai provato a installare un Linux all'interno di Windows, creo sempre una partizione separata
Lynob

Risposte:


13

I moderni sistemi operativi richiedono uno spazio di scambio per un uso efficiente della RAM. Anche se il tuo sistema ha molta RAM, sprecare la RAM si traduce in una cache buffer più piccola, il che significa un aumento dell'I / O del disco. Quindi, non importa quanta RAM hai, vuoi comunque che il sistema la usi in modo efficiente. Usarlo in modo efficiente significa estrarre dalla RAM oggetti che è estremamente improbabile che possano mai essere accessibili.

Quando si avvia un sistema tipico, viene avviato un numero elevato di servizi. I programmi eseguono il codice di inizializzazione e modificano i mapping di memoria privata nel processo. Alcuni di questi servizi non funzioneranno mai più. Molti di loro non dureranno per ore. Senza scambio, il sistema operativo non ha altra scelta che mantenere per sempre i mapping di memoria privata modificati associati a tali servizi nella RAM. Questa è RAM che non può mai essere utilizzata come cache del disco.

Quindi vuoi scambiare se ne hai bisogno o no.


8
"Quindi vuoi scambiare se ne hai bisogno o no." - Sembra che tu abbia fatto il caso che abbia bisogno di scambiarsi, che lo voglia o no.
segatura

2
Supponiamo che io abbia molta RAM e posso permettermi di sprecare 2 GB. Perché dovrei avere bisogno di un file di scambio?
Tarik,

1
In tal caso, non è necessario un file di scambio. Ma come ho sostenuto, ne vuoi uno. Perché se puoi permetterti di sprecare o meno la RAM, non dovresti voler usare la RAM in modo inefficiente quando non è necessario.
David Schwartz,

Sto eseguendo un server CLI senza swap e funziona perfettamente. Eseguendo un server teamspeak3, apache2, node.js non vedo mai più di 500M di ram utilizzati. Quindi non mi dà fastidio usare la RAM "in modo inefficiente" DISCLAIMER: la funzione webserver di questo server è esclusivamente per lo sviluppo, quindi il carico è sempre basso. E se avessi una perdita di memoria durante lo sviluppo, preferirei che il killer OOM lo uccidesse non appena avrò esaurito la RAM piuttosto che spingere tutte queste sciocchezze sul disco.
Native Coder,

12

Ho eseguito un sistema desktop senza scambio per un paio di anni, e sta andando alla grande! Ci sono alcuni comportamenti che sono diversi; alcuni di questi sono vantaggiosi e alcuni potrebbero farti del male. Tutto dipende da cosa stai facendo.

Una delle principali differenze è il comportamento del sistema quando la memoria si esaurisce:

Se non esiste alcuna partizione di swap, il killer OOM viene eseguito immediatamente. Se hai un programma che perde memoria, è probabile che sia quello che viene ucciso. Ciò accade e ripristini il sistema quasi all'istante.

Se c'è è una partizione di swap, il kernel spinge il contenuto della memoria in swap. Il processo errato può continuare ad allocare memoria. Ciò continua fino allo scadere dello swap, che potrebbe durare da dieci minuti a un'ora se si dispone di una grande partizione di swap. Mentre lo fa, il tuo sistema rallenta a gattonare. Diventa impossibile aprire un terminale e uccidere il processo. Di solito scollego il cavo di alimentazione quando ciò accade.

Quindi, poiché perderò comunque i miei dati quando le OOM di sistema, preferisco la prima opzione per avere almeno una (alta) possibilità di recupero.


Anche questa è stata la mia esperienza. Linux non gestisce lo swap-thrashing abbastanza bene da permetterti di uccidere tu stesso il programma offensivo. È più affidabile che solo il killer OOM lo faccia da solo. Naturalmente questo è un design orribile - uno migliore sarebbe congelare il processo offensivo piuttosto che ucciderlo e fornire una buona interfaccia grafica per permetterti di sbloccarlo o ucciderlo, ma ... Linux.
Timmmm,

3
Finalmente una risposta che ha senso e corrisponde alla mia esperienza. Non riesco a comprendere la logica alla base di "devi avere una partizione di swap". Tranne se vogliamo ibernare il sistema.
Tarik,

5

Lo scambio è necessario per l'ibernazione, altrimenti puoi cavartela senza di essa.


Pertanto, la dimensione dell'area di scambio dovrebbe essere leggermente superiore alla dimensione della memoria installata nel sistema.
mdpc,

@mdpc, non necessariamente; deve solo essere abbastanza grande da contenere il ram usato che non può essere scartato (cioè i dati supportati da un file sul disco).
psusi,

e come lo stimeresti sulla creazione? Non vorresti che la corretta pianificazione e prepararsi al caso peggiore, in quanto il partizionamento è generalmente un dolore da cambiare dopo che è stato impostato?
mdpc,

2

È un'idea sbagliata comune pensare che avere un'area di swap influisca negativamente sulle prestazioni. Ciò che influisce gravemente sulle prestazioni non è avere RAM sufficiente. L'area di scambio di per sé non ha alcun effetto negativo sulle prestazioni a meno che non ti interessi dell'affidabilità. Può avere un impatto positivo sulle prestazioni anche se pensi di avere abbastanza RAM (e non viene segnalata alcuna carenza di RAM).

Vi sono essenzialmente tre casi da considerare:

  • 1: c'è abbastanza RAM per le esigenze del kernel interno, affinché tutte le applicazioni abbiano il loro set di pagine di lavoro su RAM e abbiano ancora RAM "libera" per la cache del buffer per archiviare la maggior parte dei dati caldi del file system.

  • 2: uguale al precedente, tranne per il fatto che non si dispone di RAM libera sufficiente per la cache del buffer per essere completamente efficiente.

  • 3: non c'è abbastanza RAM per memorizzare anche le pagine utilizzate dalle applicazioni.

Nel caso 1, che dovrebbe essere la norma per una macchina di produzione, avere un'area di swap o meno non cambia nulla (almeno su sistemi operativi basati su Linux e altri sistemi operativi che sovraccaricano la memoria).

Nel caso 2, avere un'area di swap potrebbe migliorare le prestazioni complessive consentendo al sistema di eseguire il paging delle pagine utilizzate raramente e quindi consentire alla cache del buffer di svolgere meglio il proprio ruolo.

Nel caso 3, avere un'area di swap consente all'applicazione di continuare a funzionare a spese di un peggioramento delle prestazioni dovuto all'impaginazione. D'altra parte, la mancanza di un'area di swap (o di un'area abbastanza grande) causerà il crash casuale delle applicazioni. Inoltre, a seconda delle impostazioni del sistema operativo, il killer OOM potrebbe anche decidere di uccidere la maggior parte delle applicazioni affamate di memoria se c'è una forte richiesta di RAM senza nemmeno dare loro la possibilità di salvare i loro (tuoi) dati critici.

Quest'ultimo caso è quello con cui devi fare una scelta. Vi sono certamente alcuni casi d'uso in cui la soppressione dei processi è l'opzione preferita come i sistemi in cui i tempi di risposta sono cruciali e in cui la perdita di una transazione / processo non è un grosso problema.

Tuttavia, tendo a credere nella maggior parte delle situazioni, è meglio essere in grado di consentire all'utente / amministratore di notare la carenza di RAM e agire di conseguenza senza rischiare di perdere dati.


1

Se non si desidera utilizzare una partizione di swap, è possibile utilizzare un file di scambio: un'immagine del filesystem memorizzata in un file normale e utilizzata come spazio di scambio.

I seguenti articoli spiegano come farlo in dettaglio:


qual è la differenza tra un file di scambio e una partizione di scambio? e cosa accadrebbe se non ne avessi nessuno?
Mihai Bratulescu,

velocità di accesso ....
mdpc,

2
Se usato SÌ è abbastanza significativo. Se usi una partizione, è un semplice indirizzamento, se usi un file, devi fare tutto il sovraccarico del filesystem per usare un file di scambio e NON PUOI garantire dove si trovano i segmenti sul disco.
mdpc,

2
@mdpc L'overhead del file system è trascurabile a partire dal kernel 2.6. I metadati, la cache e il codice del file system vengono ignorati. I blocchi di dischi grezzi sono semplicemente accessibili direttamente.
jlliagre,

1
@mdpc Un file di scambio non dovrebbe essere significativamente frammentato, a meno che non lo si crei di recente. Inoltre, l'accesso di swap è raramente sequenziale ma per lo più casuale a causa del funzionamento del paging della domanda, quindi la frammentazione non dovrebbe essere un problema.
jlliagre,

0

È un po 'pericoloso ma PUOI correre senza uno spazio di scambio. Ma se alla fine superi la quantità di memoria disponibile, il sistema si arresterà quasi immediatamente senza preavviso.

Ciò che ti dà lo scambio è fondamentalmente un allungato ma molto più lento per la tua memoria. Se superi, inizierai a scambiare, ti toglierà davvero la vita dal sistema .... TUTTAVIA, uccidendo i processi errati, puoi ancora salvare il tuo sistema.

Alcuni programmi insistono sull'allocazione (ma non sull'uso) dello spazio di scambio, alcuni di questi sono programmi di database, se ricordo. Ancora una volta, non avendo lo spazio di swap potresti limitare i programmi che possono essere eseguiti.

Infine, l'aspetto SWAP è ECONOMICO nel fatto che non è necessario eseguire il backup dell'area. (Spero che tu sia uno di questi bravissimi amministratori di sistema che eseguono il backup dei loro sistemi).

Quindi crealo.

La mia regola empirica era di 2 * dimensioni della memoria ..... ma ora mi sento bene in molti casi con 1 * dimensioni della memoria, ma generalmente uso 1,5 * (dimensioni della memoria). Non è necessario creare un importo così grande, ma lo farei ... soprattutto se c'è qualche tipo di produzione che stai facendo.

Oh sì, e per l'ibernazione, lo scambio è richiesto per contenere un'immagine totale della memoria. E quindi la dimensione se stai considerando l'ibernazione dovrebbe essere ALMENO (1 * dimensione della memoria) + 100 MB ... i 100 MB sono per eventuali spese generali necessarie nel processo.


quindi ... per alcuni programmi hai bisogno di un'area di scambio per farli funzionare? Non sono preoccupato di
rimanere

La regola della dimensione della memoria 2x è vecchia e obsoleta. Ma avere qualche scambio non è una cattiva idea. Non utilizza troppo spazio su disco, quindi non perderai lo spazio utilizzato; di solito non viene utilizzato se si dispone di RAM sufficiente e consente di scaricare core nel proprio swap.
Hennes,

@Hennes - leggi la mia nota ... "prima"
mdpc

0

Lo scambio di Linux sembra avere un requisito piuttosto difficile non appena c'è pressione sulla memoria. Il sintomo è che se quasi tutta la RAM viene utilizzata dai processi attivi, il sistema si blocca e il disco rigido funziona in modo anomalo.

Perché?

Le pagine senza un file di backup (in genere dall'allocazione dinamica della memoria) non possono essere eliminate dalla RAM in assenza di scambio. Il kernel ricorre a pagine con un file di backup anche se sono effettivamente necessarie di nuovo presto, i. e. cestinare anche senza scambiare!

Per maggiori dettagli su questo sottile problema, vedi questo post sul blog.

Conclusione : scambiare sempre.

E per le dimensioni come linea guida approssimativa usa qualcosa tra 4 e 8 GB, anche per sistemi con molta RAM, supponendo che tu non sia in letargo. Per maggiori dettagli consultare la documentazione di Red Hat sullo spazio di swap .

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.