In che modo il programma di installazione calcola quale dimensione della partizione di swap creare? Presumibilmente si basa sulla dimensione della RAM installata, ma dipende da quanta RAM?
In che modo il programma di installazione calcola quale dimensione della partizione di swap creare? Presumibilmente si basa sulla dimensione della RAM installata, ma dipende da quanta RAM?
Risposte:
In realtà non esiste alcun dphys-swapfile
programma su un CD di installazione di Ubuntu predefinito e non viene utilizzato per calcolare la dimensione di scambio .
Quello che succede è che il programma di ubiquity
installazione utilizza gli partman-auto
script e i file di configurazione (chiamati ricette ) per determinare le dimensioni di tutte le partizioni. Funziona così:
/proc/meminfo
).Dettagli:
Un file di ricetta può assomigliare a questo:
1 1 1 free
$iflabel{ gpt }
method{ biosgrub } .
500 10000 -1 $default_filesystem
$lvmok{ }
method{ format }
format{ }
mountpoint{ / } .
96 512 300% linux-swap
$lvmok{ }
method{ swap }
format{ } .
L'algoritmo per calcolare le dimensioni:
for(i=1;i<=N;i++) {
factor[i] = priority[i] - min[i];
}
ready = FALSE;
while (! ready) {
minsum = min[1] + min[2] + ... + min[N];
factsum = factor[1] + factor[2] + ... + factor[N];
ready = TRUE;
for(i=1;i<=N;i++) {
x = min[i] + (free_space - minsum) * factor[i] / factsum;
if (x > max[i])
x = max[i];
if (x != min[i]) {
ready = FALSE;
min[i] = x;
}
}
}
Per di più vedi:
Sarà piuttosto tecnico ma è stato divertente scoprirlo, quindi ecco qui ...
dphys-swapfile
ed ecco il codice sorgente . L'opzione setup
viene utilizzata per configurarlo:setup - dice a dphys-swapfile di calcolare la dimensione ottimale del file di scambio e (ri) generare un file di scambio adatto. Predefinito 2 volte la dimensione della RAM. Questo può essere chiamato all'avvio, quindi il file rimane sempre giusta dimensione per la RAM corrente, o eseguita a mano ogni volta che la dimensione della RAM ha cambiato.
dphys-swapfile
è presente un'impostazione conf_swapsize
per una dimensione predefinita (in Natty è vuota):dimensione che vogliamo forzare ad essere, default (vuoto) dà 2 * RAM CONF_SWAPSIZE =
e un'impostazione per un swapfactor
...
this is what we want, 2 times RAM size
SWAPFACTOR=2
La dimensione effettiva viene calcolata un po 'più avanti su:
if ["$ {CONF_SWAPSIZE}" = ""]; poi # calcola le dimensioni ottimali automatiche echo -n "dimensione di calcolo" # questo sembra essere il più vicino alla dimensione fisica della RAM, manca di circa 60k KCORESIZE = "` ls -l / proc / kcore | awk '{print $ 5}' `" # make MBytes che arrotondato per difetto sarà esattamente 1 in numero troppo basso, quindi aggiungi 1 MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1` " # default, senza sovrascrittura del file di configurazione, swap = 2 * RAM CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '*' "$ {SWAPFACTOR}" `" fi
Come puoi vedere, il modo in cui lo calcolano in questo pacchetto dipende dalla dimensione di /proc/kcore
, quindi viene diviso per 1048576, +1 per arrotondare per eccesso e quindi moltiplicato per swapfactor. Dalla mia macchina:
Quindi il valore predefinito per questo sistema sarebbe 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MByte.