Каков размер подкачки по умолчанию?

Как установщик вычисляет что размер раздела подкачки создать? По-видимому, это основано на установленном размере RAM, но это зависит от сколько RAM?

16
задан 24 June 2011 в 00:51

2 ответа

На самом деле существует нет dphys-swapfile программа на установочном CD Ubuntu по умолчанию и это не используется для вычисления размера подкачки.

То, что происходит, то, что ubiquity установщик использует partman-auto сценарии и конфигурационные файлы (названный рецептами) для определения размеров всех разделов. Это работает как это:

  • Partman находит правильный файл рецепта согласно типу компьютера и опции, которую выбрал пользователь.
  • Там это находит минимальный и максимальный размер раздела и его приоритета. Для подкачки это может быть 96 (минута - в МБ) 512 (приоритет) 300% (макс.).
  • Затем это получает размер RAM (через /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;
      }
   }
}

Поскольку больше видит:

5
ответ дан 23 November 2019 в 02:34

Это будет довольно техническим, но было забавой узнать, таким образом, здесь идет...

  • Я нашел пакет dphys-swapfile и вот Исходный код. Опция setup используется для установки его:
setup - tells dphys-swapfile  to compute the optimal swap file size and
(re-)generate an fitting swap file. Default it 2 times RAM size.
This  can  be called at boot time, so the file allways stays the
right size for current RAM, or run by hand whenever RAM size has
changed.
  • Внутри dphys-swapfile установка conf_swapsize для предопределенного размера (в Аккуратном это пусто):
size we want to force it to be, default (empty) gives 2*RAM
CONF_SWAPSIZE=

и установка для a swapfactor...

this is what we want, 2 times RAM size
SWAPFACTOR=2
  • Фактический размер вычисляется немного далее на:

    if [ "${CONF_SWAPSIZE}" = "" ] ; then
      # compute automatic optimal size
      echo -n "computing size, "
      # this seems to be the nearest to physical RAM size, lacks about 60k
      KCORESIZE="`ls -l /proc/kcore | awk '{ print $5 }'`"
      # make MBytes which rounded down will be exactly 1 too few, so add 1
      MEMSIZE="`expr "${KCORESIZE}" / 1048576 + 1`"
      # default, without config file overwriding, swap=2*RAM
      CONF_SWAPSIZE="`expr "${MEMSIZE}" '*' "${SWAPFACTOR}"`"
    fi

Поскольку Вы видите способ, которым они вычисляют, он в этом пакете зависит от размера /proc/kcore, затем разделен на 1048576, +1 для округления его и затем умножается на swapfactor. От моей машины:

enter image description here

Таким образом, значение по умолчанию для этой системы было бы 1065349120 / 1048576 = 1015+1 = 1016 * 2 = 2 032 мегабайта.

19
ответ дан 23 November 2019 в 02:34

Другие вопросы по тегам:

Похожие вопросы: