Qual é o tamanho da troca padrão?

15

Como o instalador calcula o tamanho da partição swap a ser criada? Presumivelmente, ele é baseado no tamanho da RAM instalada, mas isso depende da quantidade de RAM?

    
por Seret 24.06.2011 / 09:51

2 respostas

5

Na verdade, não há programa dphys-swapfile em um CD de instalação padrão do Ubuntu e ele não é usado para calcular o tamanho swap .

O que acontece é que o instalador ubiquity usa os scripts partman-auto e os arquivos de configuração (chamados recipes ) para determinar os tamanhos de todas as partições. Funciona assim:

  • O Partman encontra o arquivo de receita correto de acordo com o tipo de computador e a opção escolhida pelo usuário.
  • Lá ele encontra o tamanho mínimo e máximo da partição e sua prioridade. Para swap pode ser 96 (min - em MB) 512 (prioridade) 300% (max).
  • Em seguida, obtém o tamanho da RAM (via /proc/meminfo ).
  • Ele usa seu próprio algoritmo para calcular os tamanhos.

Detalhes:

Um arquivo recipe pode ter esta aparência:

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{ } .

O algoritmo para calcular os tamanhos:

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;
      }
   }
}

Para mais informações, consulte:

por arrange 24.06.2011 / 20:26
19

Isso vai ser bastante técnico, mas foi divertido descobrir, então aqui vai ...

  • Encontrei um pacote dphys-swapfile e aqui está o código-fonte . A opção setup é usada para configurá-lo:
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.
  • Dentro de dphys-swapfile é uma configuração conf_swapsize para um tamanho predefinido (em Natty isso é vazio):
size we want to force it to be, default (empty) gives 2*RAM
CONF_SWAPSIZE=

e uma configuração para swapfactor ...

this is what we want, 2 times RAM size
SWAPFACTOR=2
  • O tamanho real é calculado um pouco mais adiante:

    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  }''"
      # 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

Como você pode ver, a forma como eles são calculados neste pacote depende do tamanho de /proc/kcore , depois é dividida por 1048576, +1 para arredondar para cima e depois multiplicada por swapfactor. Da minha máquina:

Portanto, o padrão para este sistema seria 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MBytes.

    
por Rinzwind 24.06.2011 / 12:37