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-swapfileProgramm auf einer Ubuntu-Standardinstallations-CD, und es wird nicht zur Berechnung der Swap- Größe verwendet.
Das ubiquityInstallationsprogramm verwendet die partman-autoSkripts 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-swapfileund hier ist der Quellcode . Option setupwird 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-swapfilebefindet sich eine Einstellung conf_swapsizefü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}" `"
fiWie 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.