Qual é o tamanho padrão de troca?


16

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


Não há valor padrão, depende da quantidade de RAM que você possui.
— Uri Herrera

11
Bem, sim, mas eu estava procurando um pouco mais de detalhes do que "depende". É sempre um conjunto múltiplo de tamanho de RAM ou depende de quanta RAM existe? Por exemplo, tamanhos grandes de RAM nunca precisariam ser suficientes para permitir a hibernação, mas tamanhos muito pequenos de RAM poderiam se beneficiar de uma troca consideravelmente maior que 1: 1.
— Seret

Respostas:


5

Na verdade, não há dphys-swapfileprograma em um CD de instalação padrão do Ubuntu e não é usado para calcular o tamanho da troca .

O que acontece é que o ubiquityinstalador usa os partman-autoscripts e arquivos de configuração (chamados de receitas ) 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 que o usuário escolheu.
  • Lá encontra o tamanho mínimo e máximo da partição e sua prioridade. Para troca , pode ser 96 (min - em MB) 512 (prioridade) 300% (máx).
  • Em seguida, obtém o tamanho da RAM (via /proc/meminfo).
  • Ele usa seu próprio algoritmo para calcular os tamanhos.

Detalhes:

Um arquivo de receita pode ficar assim:

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:


Debate interessante: uma referência melhor do que um site debian estranho?
— enzotib

Bem, eu descobri isso também quando procurei, mas o pacote tem um "Aviso: Este pacote é destinado ao uso na construção de imagens do debian-installer. Não o instale em um sistema Ubuntu normal". Eu assumi que isso não foi usado, então procurei e achei o código dphys-swapfile>: - D Hmm realmente interessante.
— Rinzwind

@enzotib: por que estranho?
— organize

@arrange: estranho, porque não é um site oficial do ubuntu, e também como um site debian não parece oficial.
— enzotib

Encontrei mais 2 métodos para calcular o tamanho da troca D: Esse método usa grep ^ Mem: / proc / meminfo ou, se for 0 grep ^ MemTotal: / proc / meminfo e multiplica por 2 (padrão) ou 3 (a maioria está definida como 300%) com um mínimo por arquitetura. Um mipsel-sb1-bcm91250a usa um 512 fixo. I386-efi usa 200%.
— Rinzwind

19

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

  • Encontrei um pacote dphys-swapfilee aqui está o código fonte . A opção setupé usada para configurá-lo:
setup - informa ao dphys-swapfile para calcular o tamanho ideal do arquivo de troca e
(re) gere um arquivo de troca apropriado. O padrão é 2 vezes o tamanho da RAM.
Isso pode ser chamado no momento da inicialização, para que o arquivo permaneça sempre o
tamanho certo para a RAM atual ou execute manualmente sempre que o tamanho da RAM tiver
mudou.
  • Dentro dphys-swapfilehá uma configuração conf_swapsizepara um tamanho predefinido (em Natty, isso está vazio):
tamanho que queremos forçar, o padrão (vazio) fornece 2 * RAM
CONF_SWAPSIZE =

e um cenário para uma swapfactor...

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

    if ["$ {CONF_SWAPSIZE}" = ""]; então
      # calcular tamanho ideal automático
      eco -n "tamanho da computação"
      # este parece ser o mais próximo do tamanho físico da RAM, falta cerca de 60k
      KCORESIZE = "` ls -l / proc / kcore | awk '{print $ 5}' '"
      # make MBytes arredondados será exatamente 1 a menos, então adicione 1
      MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1` "
      # padrão, sem substituir o arquivo de configuração, swap = 2 * RAM
      CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '*' "$ {SWAPFACTOR}" `"
    fi

Como você pode ver, a maneira como eles o calculam neste pacote depende do tamanho de e /proc/kcore, em seguida, é dividido por 1048576, +1 para arredondá-lo e multiplicado pelo fator de troca. Da minha máquina:

insira a descrição da imagem aqui

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.