Как установщик вычисляет, какой размер раздела подкачки создать? Предположительно это основано на установленном объеме ОЗУ, но зависит ли это от того, сколько ОЗУ?
Как установщик вычисляет, какой размер раздела подкачки создать? Предположительно это основано на установленном объеме ОЗУ, но зависит ли это от того, сколько ОЗУ?
Ответы:
На самом деле 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
используется для настройки:setup - указывает dphys-swapfile рассчитать оптимальный размер файла подкачки и (повторно) создать подходящий файл подкачки. По умолчанию это в 2 раза больше оперативной памяти. Это может быть вызвано во время загрузки, поэтому файл всегда остается правильный размер для текущей оперативной памяти, или запускать вручную, когда объем оперативной памяти имеет изменилось.
dphys-swapfile
находится настройка conf_swapsize
для заранее определенного размера (в Natty это пусто):Размер, который мы хотим, чтобы он был, по умолчанию (пустой) дает 2 * RAM 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 * RAM CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '*' "$ {SWAPFACTOR}" `" фи
Как вы можете видеть, как они вычисляют его в этом пакете, зависит от размера /proc/kcore
, затем делится на 1048576, +1 для округления и затем умножается на коэффициент свопфинга. С моей машины:
Таким образом, по умолчанию для этой системы будет 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 МБ.