Wie berechnet das Installationsprogramm die Größe der zu erstellenden Swap-Partition? Vermutlich basiert es auf der installierten RAM-Größe. Aber hängt das davon ab, wie viel RAM vorhanden ist?
Wie berechnet das Installationsprogramm die Größe der zu erstellenden Swap-Partition? Vermutlich basiert es auf der installierten RAM-Größe. Aber hängt das davon ab, wie viel RAM vorhanden ist?
Antworten:
Tatsächlich befindet sich kein dphys-swapfile
Programm auf einer Ubuntu-Standardinstallations-CD, und es wird nicht zur Berechnung der Swap- Größe verwendet.
Das ubiquity
Installationsprogramm verwendet die partman-auto
Skripts und Konfigurationsdateien (so genannte Rezepte ), um die Größe aller Partitionen zu bestimmen. Das funktioniert so:
/proc/meminfo
).Einzelheiten:
Eine Rezeptdatei kann folgendermaßen aussehen:
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{ } .
Der Algorithmus zur Berechnung der Größen:
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;
}
}
}
Für mehr sehen Sie:
Dies wird eher technisch sein, aber es hat Spaß gemacht, es herauszufinden, und so geht es weiter ...
dphys-swapfile
und hier ist der Quellcode . Option setup
wird verwendet, um es einzurichten:setup - weist dphys-swapfile an, die optimale Größe der Auslagerungsdatei zu berechnen und Eine passende Auslagerungsdatei (neu) generieren. Standardmäßig 2-fache RAM-Größe. Dies kann beim Booten aufgerufen werden, so dass die Datei immer die Die richtige Größe für den aktuellen Arbeitsspeicher oder die Ausführung von Hand, wann immer dies der Fall ist geändert.
dphys-swapfile
befindet sich eine Einstellung conf_swapsize
für eine vordefinierte Größe (in Natty ist diese leer):Größe, die erzwungen werden soll, Standard (leer) ergibt 2 * RAM CONF_SWAPSIZE =
und eine Einstellung für eine swapfactor
...
this is what we want, 2 times RAM size
SWAPFACTOR=2
Die tatsächliche Größe wird etwas weiter unten berechnet:
if ["$ {CONF_SWAPSIZE}" = ""]; dann # Automatische optimale Größe berechnen echo -n "Rechengröße" # Dies scheint der physischen RAM-Größe am nächsten zu sein, es fehlen etwa 60 KB KCORESIZE = "` ls -l / proc / kcore | awk '{print $ 5}' `" # mache MByte, die abgerundet sind, genau 1 zu wenig, also addiere 1 MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1 " # Standard, ohne dass die Konfigurationsdatei überschrieben wird, swap = 2 * RAM CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '*' "$ {SWAPFACTOR}" `" fi
Wie Sie sehen können, hängt die Art und Weise, wie sie in diesem Paket berechnet wird, von der Größe von ab /proc/kcore
, wird dann durch 1048576, +1 geteilt, um es aufzurunden, und wird dann mit dem Swap-Faktor multipliziert. Von meiner Maschine:
Die Standardeinstellung für dieses System wäre 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MByte.