Quanto de troca devo fazer por 1 GB a 8 TB de RAM no 14.04 ou superior?

14

Vou instalar o 64.04 14.04 em uma nova máquina com algo como 1 a talvez 128 GB de RAM e ainda mais RAM depois. Quanto espaço devo alocar para a partição de troca?

E especialmente: POR QUE essas recomendações para esses números?

(Nenhuma das respostas existentes aqui e aqui explica qualquer um dos motivos e está um pouco desatualizada se considerarmos 1 GB ou RAM e mais)

Tim
fonte
6
Possível duplicado de Eu tenho 16GB de RAM. Preciso de uma troca de 32 GB? Há respostas a partir de 2017 (ou atualizadas em 2017), portanto, ele contém recomendações atualmente mais recentes do que esta.
Melebius
1
@ Melebius: Eu discordo: Embora essa pergunta seja mais recente, é mais genérica do que a que você está tentando duplicar. Esta sessão de perguntas e respostas abrange a mais antiga, mas o contrário não é verdade! ;-)
Fabby
1
@ Fabby Nesse caso, o outro não deve ser marcado como duplicado?
Melebius
1
@Melebius Se ambas as perguntas puderem ser usadas pelos revisores como perguntas duplicadas de outras em diferentes situações, as duas poderão ser mantidas em aberto para lidar com essas diferentes situações, uma vez que ambas as perguntas têm respostas altamente votadas.
5198 karel
2
@Melebius Já discutimos esse tópico na meta e a comunidade decidiu deixar cada um como está.
Fabby

Respostas:

30

A resposta curta:

Defina seu arquivo de troca para:

  • round(sqrt(RAM))se você não usar a hibernação
  • RAM+round(sqrt(RAM))se você usa a hibernação

Defina seu swappiness10 em um desktop, mas não em um servidor!

A resposta longa:

No passado:

A regra geral em uso nos últimos 25 anos tem sido um mínimo de 1xRAM e um máximo de 2xRAM, e é isso que você verá citado o tempo todo.

Esse mínimo foi atrasado na idade da pedra, quando eu era adolescente e os dinossauros ainda vagavam pela Terra e porque a RAM era muito cara e você absolutamente precisava desse espaço de troca para poder realizar qualquer coisa.

O máximo foi definido naquele momento por causa dos retornos decrescentes: é muito lento ter que trocar tanta memória, pois o acesso ao HDD é um fator 1000 mais lento que a RAM: bom em caso de emergência, mas não muito bom para o uso diário! Na época, quando você ficou sem espaço de troca, era hora de adicionar mais RAM! (o que ainda é verdade hoje).

No presente:

  1. Se você não usa a hibernação e sua memória excede 1 GByte, a nova regra geral é round(sqrt(RAM))onde RAMestá obviamente o tamanho da sua RAM em GB e sqrta raiz quadrada. :-)

  2. Se você usar a hibernação, precisará trocar toda a quantidade de RAM + RAM já trocada no disco, assim a fórmula se tornará: RAM+round(sqrt(RAM))

  3. A regra dos retornos decrescentes ainda é válida hoje, mas a menos que você teste seu uso real, usar 2xRAM é apenas um desperdício de espaço em disco , portanto, não use o máximo, a menos que você fique sem espaço de troca usando as outras metodologias .

Tudo isso junto fornece a seguinte tabela: (últimas 3 colunas indicando espaço de troca)

    RAM   No hibernation    With Hibernation    Maximum
    1GB              1GB                 2GB        2GB
    2GB              1GB                 3GB        4GB
    3GB              2GB                 5GB        6GB
    4GB              2GB                 6GB        8GB
    5GB              2GB                 7GB       10GB
    6GB              2GB                 8GB       12GB
    8GB              3GB                11GB       16GB
   12GB              3GB                15GB       24GB
   16GB              4GB                20GB       32GB
   24GB              5GB                29GB       48GB
   32GB              6GB                38GB       64GB
   64GB              8GB                72GB      128GB
  128GB             11GB               139GB      256GB
  256GB             16GB               272GB      512GB
  512GB             23GB               535GB        1TB
    1TB             32GB              1056GB        2TB
    2TB             46GB              2094GB        4TB
    4TB             64GB              4160GB        8TB
    8TB             91GB              8283GB       16TB

O acima é apenas uma regra de ouro; não é a lei da gravidade!
Você pode violar essa regra (diferente da lei da gravidade) se o seu caso de uso específico for diferente!

Dica profissional: sempre aloque SWAP no início de um disco rígido, pois os cabeçotes precisam se mover menos no interior do disco.
Sim: nos SSDs, não importa mais onde você localiza a área de troca, pois eles usam tunelamento quântico em vez de cabeças móveis e os SSDs modernos usam todas as suas células de memória (mesmo o espaço não alocado) para impedir a degradação quântica.

Como testar se seu uso de swap é diferente da regra "genérica":

Basta executar:

for szFile in /proc/*/status ; do 
  awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' $szFile 
done | sort --key 2 --numeric --reverse | more

que fornecerá uma lista de todos os programas em execução que foram trocados (com o que utiliza mais espaço de troca na parte superior)

Se você estiver usando mais de alguns KB: redimensione para mais do que o mínimo, caso contrário, não se preocupe ...

Se você estiver em um servidor, pare de ler agora: está tudo pronto!


Se você estiver em um cliente de desktop / laptop (não servidor), deseja que sua GUI seja a mais responsiva possível e só troque quando for realmente necessário . O Ubuntu foi otimizado para trocar cedo para uso do servidor, mas no seu cliente você deseja editar gimprapidamente essa enorme imagem bruta de 250 mega pixels , portanto, definir swappiness10 para impedir o kernel de trocar cedo demais, garantindo que isso não ocorra ' t trocar tarde demais:

Se você tem um sysctl.confarquivo,

sudo nano /etc/sysctl.conf

OU

Se você possui um sysctl.ddiretório, mas nenhum sysctl.confarquivo, crie um novo arquivo:

sudo nano /etc/sysctl.d/35_swap.conf 

e em ambos os casos, adicione:

# change "swappiness" from default 60 to 10 
# (theoretically only swap when RAM usage reaches around 80 or 90 percent)
vm.swappiness = 10

até o final do arquivo, salve o arquivo ( Ctrl+ XY+ Enterem nano) e execute:

sysctl --system

para recarregar o parâmetro ou adotar a abordagem Window $ e reiniciar ... :-)

Fabby
fonte
1
Obrigado. O que você quer dizer com "retorno decrescente"? Se a RAM e a troca forem totalmente usadas, é impossível hibernar, mesmo que a troca tenha tamanho 2 * RAM, não é? (? Porque hibernação terá o tamanho do swap a ser RAM + swap, o que é impossível)
Tim
Sim, mas eu nunca tive isso acontecer ainda ... (e eu sou velho! Portanto 2 * RAM: quando toda a RAM é trocada, você ainda pode hibernar ...
Fabby 9/15
2
"Retornos decrescentes" significa apenas que o acesso ao disco rígido é um fator 1000 mais lento que a RAM; portanto, se você precisar trocar duas vezes a sua RAM, terá morrido de velhice antes de concluir ... Está ali apenas para hibernar quando você ' re já trocando ...
Fabby
1
@Fabby É o tempo de revisão do CV na pergunta original novamente: askubuntu.com/review/close/889454 . Veja o comentário de Yufenyuy Veyeh Dider sob a pergunta.
karel
1
@mrkskwsnck: É pelo mesmo autor ... ;-)
Fabby
6

Necessidade de troca

A troca é útil por 3 razões:

  1. Removendo a desordem da RAM. Do artigo em kernel.org:

    "Um número significativo de páginas referenciadas por um processo no início de sua vida só pode ser usado para inicialização e nunca mais ser usado novamente. É melhor trocar essas páginas e criar mais buffers de disco do que deixá-las residentes e sem uso"

    Em outras palavras, os dados armazenados na RAM podem ser úteis apenas quando um processo foi iniciado (como o processo de inicialização) e, em seguida, simplesmente residir na RAM, criando um espaço desorganizado que pode ser usado para melhores propósitos.

  2. Expande a quantidade de memória que os processos podem usar. Isto é bem entendido. Você não quer que o sistema fique sem memória e trava devido à falta dela. Por esse motivo específico, a troca deve existir, servindo como um recurso de proteção.

  3. Hibernação: Quando um computador hiberna, o conteúdo da RAM entra no disco.

Valor do swap

Conhecendo a finalidade da troca e dependendo da quantidade de RAM da sua máquina, você pode escolher um tamanho de troca que se adapte à sua finalidade. Não há diretrizes específicas, apenas regras práticas que você pode usar para personalizar seu tamanho de troca para se adequar ao seu sistema .

Por exemplo, o linux.com recomenda:

Uma regra prática é a seguinte: 1) para um sistema de desktop, use um espaço de troca de memória dupla do sistema, pois permitirá executar um grande número de aplicativos (muitos dos quais podem ficar ociosos e facilmente trocados), tornando mais RAM disponível para os aplicativos ativos; 2) para um servidor, tenha uma quantidade menor de troca disponível (por exemplo, metade da memória física), para que você tenha flexibilidade para trocar quando necessário, mas monitore a quantidade de espaço de troca usado e atualize sua RAM, se necessário; 3) para computadores de mesa mais antigos (digamos apenas 128 MB), use o espaço de troca que você puder economizar, até 1 GB.

Por experiência pessoal, eis o que eu faria:

Considerando uma máquina com 1 - 2 GB que não precisa hibernar e para uso casual, você pode ter espaço de troca de 1 a 2 GB. Meu PC com o Ubuntu 14.04 possui 1 GB de RAM e 2 GB de swap. O valor da troca nunca ultrapassa a fronteira de 800 MB e eu uso o meu PC apenas para navegar na web e fazer scripts.

Com um PC com mais de 2 GB e você não precisa hibernar, você pode manter a troca de 512 MB para 1 GB. Eu tenho um laptop com 15.04 que eu nunca hibernei e que possui um arquivo de troca ( não uma partição ) de 512 MB. A RAM em si tem 6 GB, mas nunca ultrapassa 2-3 GB. Novamente: uso casual.

O Cosmoscalibur e o Fabby já abordaram a troca no caso de você precisar hibernar, então não vou entrar nisso muito extensivamente. Minha humilde opinião é esta:

Se você planeja hibernar, o conteúdo da RAM precisará ser trocado, portanto, é necessário pelo menos o mesmo tamanho da sua RAM.

Sergiy Kolodyazhnyy
fonte
:-) Só notei agora que você postou alguma coisa. Editado e votado! (Como ist agora é uma boa resposta após a minha edição: D: D: D)
Fabby