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 swappiness
su 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:
Se non si utilizza l'ibernazione e la memoria è superiore a 1 GByte, la nuova regola empirica è round(sqrt(RAM))
dove RAM
sono ovviamente le dimensioni della RAM in GB e sqrt
la radice quadrata. :-)
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))
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 gimp
che sia veloce , quindi l'impostazione swappiness
su 10 eviterà che il kernel si scambia troppo presto, garantendo allo stesso tempo che non lo faccia ' scambiare troppo tardi:
Se hai un sysctl.conf
file,
sudo nano /etc/sysctl.conf
O
Se hai una sysctl.d
directory ma nessun sysctl.conf
file, 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 ... :-)