W jaki sposób instalator oblicza, jaki rozmiar partycji wymiany należy utworzyć? Prawdopodobnie opiera się na wielkości zainstalowanej pamięci RAM, ale czy zależy to od ilości pamięci RAM?
W jaki sposób instalator oblicza, jaki rozmiar partycji wymiany należy utworzyć? Prawdopodobnie opiera się na wielkości zainstalowanej pamięci RAM, ale czy zależy to od ilości pamięci RAM?
Odpowiedzi:
W rzeczywistości dphys-swapfile
na domyślnym instalacyjnym dysku CD z systemem Ubuntu nie ma programu i nie jest on używany do obliczania wielkości wymiany .
To, co się dzieje, polega na tym, że ubiquity
instalator używa partman-auto
skryptów i plików konfiguracyjnych (zwanych przepisami ) do określania rozmiarów wszystkich partycji. Działa to tak:
/proc/meminfo
).Detale:
Plik przepisu może wyglądać następująco:
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{ } .
Algorytm do obliczania rozmiarów:
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;
}
}
}
Więcej informacji:
To będzie raczej techniczne, ale fajnie było się tego dowiedzieć, więc proszę ...
dphys-swapfile
a tutaj jest kod źródłowy . Opcja setup
służy do konfiguracji:setup - informuje dphys-swapfile, aby obliczył optymalny rozmiar pliku wymiany i (ponownie) wygeneruj odpowiedni plik wymiany. Domyślnie jest to 2 razy rozmiar pamięci RAM. Można to wywołać podczas uruchamiania, więc plik zawsze pozostaje odpowiedni rozmiar dla bieżącej pamięci RAM lub uruchamiany ręcznie, gdy tylko rozmiar pamięci RAM ma zmienione.
dphys-swapfile
znajduje się ustawienie conf_swapsize
dla z góry określonego rozmiaru (w Natty jest to puste):rozmiar, który chcemy wymusić, to domyślny (pusty) daje 2 * RAM CONF_SWAPSIZE =
i ustawienie dla swapfactor
...
this is what we want, 2 times RAM size
SWAPFACTOR=2
Rzeczywisty rozmiar jest obliczany nieco dalej na:
if ["$ {CONF_SWAPSIZE}" = ""]; następnie # obliczyć automatyczny optymalny rozmiar echo -n „rozmiar komputera” # wydaje się, że jest to najbliższy rozmiar fizyczny RAM, brakuje około 60k KCORESIZE = "` ls -l / proc / kcore | awk '{print 5 $}' ' # make MBytes, który w zaokrągleniu w dół będzie dokładnie o 1 za mało, więc dodaj 1 MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1` " # default, bez zastępowania pliku konfiguracyjnego, zamiana = 2 * RAM CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '* * „$ {SWAPFACTOR}” „” fi
Jak widać sposób ich obliczania w tym pakiecie zależy od wielkości /proc/kcore
, a następnie jest dzielony przez 1048576, +1, aby zaokrąglić w górę, a następnie zostaje pomnożony przez współczynnik zamiany. Z mojej maszyny:
Domyślna wartość dla tego systemu to 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MB.