Quanto swap dovrei richiedere da 1 GB a 8 TB di RAM su 14.04 o versioni successive?


14

Ho intenzione di installare 64 bit 14.04 su una nuova macchina con qualcosa come 1 a forse 128 GB di RAM e anche più RAM in seguito. Quanto spazio devo allocare alla partizione di swap?

E soprattutto: PERCHÉ quei consigli per questi numeri?

(Nessuna delle risposte esistenti qui e qui spiegano i motivi e sono un po 'datate se guardiamo a 1 GB o RAM e oltre)


6
Possibile duplicato di ho 16 GB di RAM. Ho bisogno di uno scambio da 32 GB? Ci sono risposte dal 2017 (o aggiornate nel 2017), quindi contiene attualmente raccomandazioni più recenti di questa.
Melebio

1
@Melebio: non sono d'accordo: sebbene questa domanda sia più recente, è più generica di quella a cui stai tentando di duplicare. Questo D&R comprende quello più vecchio, ma non è vero il contrario! ;-)
Fabby,

1
@Fabby In tal caso, l'altro non dovrebbe essere contrassegnato come duplicato di questo?
Melebio

1
@Melebius Se entrambe le domande potessero essere utilizzate dai revisori come domande duplicate di altre domande in situazioni diverse, entrambe le domande potrebbero essere mantenute aperte per gestire queste diverse situazioni poiché entrambe le domande hanno risposte altamente votate.
karel,

2
@Melebius Abbiamo già discusso di questo argomento in meta e la community ha deciso di lasciare in piedi ciascuno così com'è.
Fabby,

Risposte:


30

La breve risposta:

Imposta il tuo file di scambio su:

  • round(sqrt(RAM))se non si utilizza l' ibernazione
  • RAM+round(sqrt(RAM))se usi l' ibernazione

Impostalo swappinesssu 10 su un desktop, ma non su un server!

La lunga risposta:

Nel passato:

La regola empirica in uso negli ultimi 25 anni è stata un minimo di 1xRAM e massimo 2xRAM, quindi è quello che vedrai citato in ogni momento.

Quel minimo era arretrato nell'età della pietra quando ero un adolescente e i dinosauri vagavano ancora sulla Terra e perché la RAM era semplicemente troppo costosa e avevi assolutamente bisogno di quello spazio di scambio per poter realizzare qualsiasi cosa.

Il massimo è stato fissato in quel momento a causa dei rendimenti decrescenti: è troppo lento per scambiare tanta memoria poiché l'accesso all'HDD è un fattore 1000 più lento della RAM: buono in caso di emergenza, ma non molto buono per l'uso quotidiano! Al momento, quando hai esaurito lo spazio di swap, era tempo di aggiungere più RAM! (che è ancora vero oggi).

Ora:

  1. Se non si utilizza l'ibernazione e la memoria è superiore a 1 GByte, la nuova regola empirica è round(sqrt(RAM))dove RAMsono ovviamente le dimensioni della RAM in GB e sqrtla radice quadrata. :-)

  2. Se usi l'ibernazione, devi essere in grado di scambiare l'intera quantità di RAM + RAM già scambiata su disco, quindi la formula diventa: RAM+round(sqrt(RAM))

  3. La regola dei rendimenti decrescenti vale ancora oggi per il massimo, ma a meno che non si verifichi il tuo utilizzo effettivo, prendere 2xRAM è solo uno spreco di spazio su disco , quindi non utilizzare il massimo A meno che non si esaurisca lo spazio di swap utilizzando le altre metodologie .

Tutti insieme offrono la seguente tabella: (ultime 3 colonne che indicano lo spazio di swap)

    RAM   No hibernation    With Hibernation    Maximum
    1GB              1GB                 2GB        2GB
    2GB              1GB                 3GB        4GB
    3GB              2GB                 5GB        6GB
    4GB              2GB                 6GB        8GB
    5GB              2GB                 7GB       10GB
    6GB              2GB                 8GB       12GB
    8GB              3GB                11GB       16GB
   12GB              3GB                15GB       24GB
   16GB              4GB                20GB       32GB
   24GB              5GB                29GB       48GB
   32GB              6GB                38GB       64GB
   64GB              8GB                72GB      128GB
  128GB             11GB               139GB      256GB
  256GB             16GB               272GB      512GB
  512GB             23GB               535GB        1TB
    1TB             32GB              1056GB        2TB
    2TB             46GB              2094GB        4TB
    4TB             64GB              4160GB        8TB
    8TB             91GB              8283GB       16TB

Quanto sopra è solo una regola empirica; non è la legge di gravità!
È possibile rompere questa regola (a differenza della legge di gravità), se il vostro particolare caso d'uso è diverso!

Consiglio del professionista: allocare sempre SWAP all'inizio di un HDD poiché le testine devono spostarsi meno all'interno del disco.
Sì: sugli SSD, non importa più dove si trova l'area di scambio in quanto usano il tunneling quantistico invece delle teste mobili e i moderni SSD usano tutte le loro celle di memoria (anche lo spazio non allocato) per prevenire il degrado quantico.

Come verificare se l'utilizzo di swap è diverso dalla regola "generica":

Esegui solo:

for szFile in /proc/*/status ; do 
  awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' $szFile 
done | sort --key 2 --numeric --reverse | more

che ti darà un elenco di tutti i programmi in esecuzione che vengono scambiati (con quello che utilizza più spazio di swap in alto)

Se stai usando più di qualche KB: ridimensiona a più del minimo, altrimenti non preoccuparti ...

Se sei su un server, smetti di leggere ora: sei pronto!


Se utilizzi un client desktop / laptop (non un server), vuoi che la tua GUI sia il più reattiva possibile e scambia solo quando è realmente necessario . Ubuntu è stato ottimizzato per scambiare in anticipo per l'uso del server, ma sul tuo client vuoi modificare quell'enorme immagine raw da 250 Mega-pixel in modo gimpche sia veloce , quindi l'impostazione swappinesssu 10 eviterà che il kernel si scambia troppo presto, garantendo allo stesso tempo che non lo faccia ' scambiare troppo tardi:

Se hai un sysctl.conffile,

sudo nano /etc/sysctl.conf

O

Se hai una sysctl.ddirectory ma nessun sysctl.conffile, crea un nuovo file:

sudo nano /etc/sysctl.d/35_swap.conf 

e in entrambi i casi aggiungere:

# change "swappiness" from default 60 to 10 
# (theoretically only swap when RAM usage reaches around 80 or 90 percent)
vm.swappiness = 10

alla fine del file, salva il file ( Ctrl+ XY+ Enterin nano) ed esegui un:

sysctl --system

per ricaricare il parametro o adottare l'approccio Window $ e riavviare ... :-)


1
Grazie. Cosa intendi con "rendimento decrescente"? Se sia la RAM che lo swap sono completamente utilizzati, è impossibile ibernare anche se lo swap ha dimensioni della RAM 2 *, non è vero? (Perché l'ibernazione avrà bisogno che la dimensione dello swap sia RAM + swap, il che è impossibile?)
Tim

Sì, ma non ho mai avuto questo evento ... (e sono vecchio! Quindi 2 * RAM: quando tutta la RAM viene scambiata, puoi ancora
andare in

2
"Ritorni decrescenti" significa solo che l'accesso all'HDD è un fattore 1000 più lento della RAM, quindi se hai bisogno di scambiare due volte la tua RAM sarai morto di vecchiaia prima che si completi ... È lì solo per andare in letargo quando '
stai

1
@Fabby È di nuovo il momento di rivedere il CV sulla domanda originale: askubuntu.com/review/close/889454 . Vedi il commento di Yufenyuy Veyeh Dider sotto la domanda.
Karel,

1
@mrkskwsnck: è dello stesso autore ... ;-)
Fabby

6

Necessità per lo scambio

Lo scambio è utile per 3 motivi:

  1. Rimozione di disordine dalla RAM. Dalla articolo su kernel.org:

    "Un numero significativo delle pagine a cui fa riferimento un processo all'inizio della sua vita può essere utilizzato solo per l'inizializzazione e quindi non riutilizzato mai. È meglio scambiare quelle pagine e creare più buffer del disco che lasciarli residenti e inutilizzati"

    In altre parole, i dati memorizzati nella RAM possono essere utili solo quando è stato avviato un processo (come il processo di avvio), e quindi semplicemente risiedere lì nella RAM, ingombrando lo spazio che può essere utilizzato per scopi migliori.

  2. Espande la quantità di memoria che i processi possono utilizzare. Questo è ben compreso. Non si desidera che il sistema esaurisca la memoria e si blocchi in caso di mancanza. Per questo motivo specifico, deve esistere lo swap , che funge da funzione protettiva.

  3. Ibernazione: quando un computer va in letargo, il contenuto della RAM passa al disco.

Importo di swap

Conoscendo lo scopo dello scambio e in base alla quantità di RAM della macchina, è possibile scegliere una dimensione di scambio adatta al proprio scopo. Non esistono linee guida specifiche, solo regole empiriche che è possibile utilizzare per personalizzare le dimensioni dello swap in base al proprio sistema .

Ad esempio, linux.com consiglia:

Una regola empirica è la seguente: 1) per un sistema desktop, utilizzare uno spazio di scambio di doppia memoria di sistema, in quanto consente di eseguire un gran numero di applicazioni (molte delle quali potrebbero essere inattive e facilmente scambiate), rendendo più RAM disponibile per le applicazioni attive; 2) per un server, avere una quantità minore di swap disponibile (ad esempio metà della memoria fisica) in modo da avere una certa flessibilità per lo swap quando necessario, ma monitorare la quantità di spazio di swap utilizzata e aggiornare la RAM se necessario; 3) per macchine desktop meno recenti (ad esempio solo 128 MB), utilizza lo spazio di swap che puoi risparmiare, anche fino a 1 GB.

Per esperienza personale, ecco cosa farei:

Considerando una macchina con 1 - 2 GB che non necessita di ibernazione e per un utilizzo occasionale, è possibile avere uno spazio di scambio da 1 GB a 2 GB. Il mio PC con 14.04 Ubuntu ha 1 GB di RAM e 2 GB di scambio. L'importo di swap non attraversa mai il confine di 800 MB e utilizzo il mio PC solo per navigare in Internet e script.

Con un PC che ha oltre 2 GB e non è necessario andare in letargo, è possibile mantenere lo scambio da 512 MB a 1 GB. Ho un laptop con 15.04 di cui non sono mai in letargo e che ha un file di scambio ( non una partizione ) di 512 MB. La RAM stessa è di 6 GB, ma non attraversa mai 2-3 GB. Ancora una volta: uso occasionale.

Cosmoscalibur e Fabby hanno già affrontato lo scambio nel caso in cui tu abbia bisogno di andare in letargo, quindi non approfondirò troppo. La mia modesta opinione è questa:

Se si prevede di andare in letargo, è necessario sostituire i contenuti della RAM, quindi è necessario avere almeno le stesse dimensioni della RAM.


:-) Ho notato solo ora che hai pubblicato qualcosa. Modificato e votato! (Al momento è una buona risposta dopo la mia modifica!: D: D: D)
Fabby
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.