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 swappiness
10 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:
Se você não usa a hibernação e sua memória excede 1 GByte, a nova regra geral é round(sqrt(RAM))
onde RAM
está obviamente o tamanho da sua RAM em GB e sqrt
a raiz quadrada. :-)
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))
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 gimp
rapidamente essa enorme imagem bruta de 250 mega pixels , portanto, definir swappiness
10 para impedir o kernel de trocar cedo demais, garantindo que isso não ocorra ' t trocar tarde demais:
Se você tem um sysctl.conf
arquivo,
sudo nano /etc/sysctl.conf
OU
Se você possui um sysctl.d
diretório, mas nenhum sysctl.conf
arquivo, 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 ... :-)