Як інсталятор обчислює, який розмір розділу swap створити? Імовірно, він заснований на встановленому розмірі оперативної пам’яті, але чи залежить це від кількості оперативної пам’яті?
Як інсталятор обчислює, який розмір розділу swap створити? Імовірно, він заснований на встановленому розмірі оперативної пам’яті, але чи залежить це від кількості оперативної пам’яті?
Відповіді:
Насправді dphys-swapfile
на установчому компакт-диску Ubuntu за замовчуванням не існує програми, і вона не використовується для обчислення розміру свопу .
Що відбувається, це те, що ubiquity
інсталятор використовує partman-auto
скрипти та файли конфігурації (так звані рецепти ) для визначення розмірів усіх розділів. Це працює так:
/proc/meminfo
).Деталі:
Рецепт файл може виглядати наступним чином :
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{ } .
Алгоритм обчислення розмірів:
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;
}
}
}
Докладніше див:
Це буде досить технічно, але це було цікаво дізнатися, так що тут іде ...
dphys-swapfile
і ось вихідний код . setup
Для його налаштування використовується опція :налаштування - повідомляє dphys-swapfile для обчислення оптимального розміру файлу підкачки та (повторно) створити придатний файл підкачки. За замовчуванням це в 2 рази більше оперативної пам'яті. Це може бути викликано під час завантаження, тому файл завжди залишається потрібний розмір для поточної оперативної пам’яті або запускатися вручну, коли є розмір оперативної пам’яті змінився.
dphys-swapfile
- це встановлення conf_swapsize
заздалегідь визначеного розміру (у Natty це порожнє):розмір ми хочемо змусити його бути, за замовчуванням (порожнім) дає 2 * ОЗУ CONF_SWAPSIZE =
і налаштування для swapfactor
...
this is what we want, 2 times RAM size
SWAPFACTOR=2
Фактичний розмір обчислюється трохи далі:
if ["$ {CONF_SWAPSIZE}" = ""]; потім # обчислити автоматичний оптимальний розмір echo -n "обчислювальний розмір" # це здається найближчим до фізичного розміру оперативної пам’яті, не вистачає приблизно 60 кб KCORESIZE = "` ls -l / proc / kcore | awk '{print $ 5}' `" # зробіть MBytes, які округлені вниз, будуть рівно 1 занадто мало, тому додайте 1 MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1` " # за замовчуванням, без перезапис конфігураційного файлу, swap = 2 * ОЗУ CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '*' "$ {SWAPFACTOR}" `" фі
Як ви бачите, як вони обчислюють його в цьому пакеті, залежить від розміру /proc/kcore
, потім ділиться на 1048576, +1, щоб округлити його, а потім помножиться на swapfactor. З моєї машини:
Тож за замовчуванням для цієї системи буде 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 Мбайт.