Por que precisamos definir o espaço de troca duas vezes maior que a nossa memória física?

11

Quando queremos configurar um sistema linux, existe uma sugestão comum para definir o espaço de troca duas vezes maior que a sua memória física. Quero saber por que precisamos disso e como é que essa sugestão surgiu.

user49137
fonte

Respostas:

8

A resposta curta é "Você não precisa ".

Dependendo do tipo de kernel / sistema, pode fazer sentido dimensionar o espaço de troca assim, por exemplo, na página de manual do tuning (7) do FreeBSD , encontramos a seguinte lógica por trás de um tamanho de troca pelo menos 2x do tamanho da memória física:

Normalmente, você deve dimensionar seu espaço de troca para aproximadamente duas vezes a memória principal para sistemas com menos de 2 GB de RAM ou aproximadamente 1x a memória principal, se houver mais. Se você não tem muita RAM, no entanto, geralmente deseja muito mais troca. Não é recomendável que você configure menos de 256M de swap em um sistema e lembre-se de futura expansão de memória ao dimensionar a partição de swap. Os algoritmos de paginação de VM do kernel são ajustados para ter um melhor desempenho quando houver pelo menos 2x troca versus a memória principal. Configurar muito pouca troca pode levar a ineficiências no código de varredura da página da VM, além de criar problemas mais tarde, se você adicionar mais memória à sua máquina. Por fim, em sistemas maiores com vários discos SCSI (ou vários discos IDE operando em controladores diferentes), é altamente recomendável que você configure a troca em cada unidade. As partições de troca nas unidades devem ter aproximadamente o mesmo tamanho. O kernel pode lidar com tamanhos arbitrários, mas as estruturas de dados internas são dimensionadas para 4 vezes a maior partição de troca. Manter as partições de troca próximas ao mesmo tamanho permitirá que o kernel distribua o espaço de troca de maneira ideal entre os N discos. Não se preocupe em exagerar um pouco, o espaço de troca é a graça salvadora do UNIX e, mesmo que você normalmente não use muita troca, pode dar mais tempo para você se recuperar de um programa descontrolado antes de ser forçado a reiniciar. Manter as partições de troca próximas ao mesmo tamanho permitirá que o kernel distribua o espaço de troca de maneira ideal entre os N discos. Não se preocupe em exagerar um pouco, o espaço de troca é a graça salvadora do UNIX e, mesmo que você normalmente não use muita troca, pode dar mais tempo para você se recuperar de um programa descontrolado antes de ser forçado a reiniciar. Manter as partições de troca próximas ao mesmo tamanho permitirá que o kernel distribua o espaço de troca de maneira ideal entre os N discos. Não se preocupe em exagerar um pouco, o espaço de troca é a graça salvadora do UNIX e, mesmo que você normalmente não use muita troca, pode dar mais tempo para você se recuperar de um programa descontrolado antes de ser forçado a reiniciar.

Outros fatores podem ser importantes quando você decide quanto espaço de troca alocar, onde alocá-lo e assim por diante. Por exemplo, se você estiver instalando um servidor grande com 128 GB de memória física, provavelmente é uma boa idéia evitar pré-alocar 256 GB de espaço em disco para troca que nunca será usado.

Por outro lado, ter algum espaço de troca geralmente possibilita obter despejos do kernel (por exemplo, no Open-, Net- e FreeBSD). Portanto, é uma boa idéia ter pelo menos espaço de troca suficiente para obter um despejo completo do kernel em pânico.

Não existe uma regra absoluta que sirva para todos os casos. Você deve ler sobre o comportamento do seu sistema específico, aprender como ele funciona, pensar sobre o uso pretendido do sistema e decidir o melhor tamanho de espaço de troca que atenda às suas necessidades.

Giorgos Keramidas
fonte
5

Você não precisa de todo. As versões antigas do Windows tratavam cada página da memória alocada como essencialmente um mmap no arquivo de troca, então você precisava de pelo menos o tamanho total da RAM física em troca para que fosse útil - esse não é mais o caso hoje e nunca foi o caso. caso no Linux, mas o boato persiste.

No entanto, há um caso em que é desejável ter pelo menos tanta troca quanto a RAM - hibernação. Como o Linux usa o arquivo de troca para hibernação (também conhecido como suspensão em disco), você precisa de troca suficiente para armazenar todos os dados na RAM, além de todos os dados que já foram trocados (menos a RAM do cache). Esse é apenas o caso de máquinas que precisam hibernar, como laptops, é claro.

Finalmente, ter muita troca pode ser uma coisa ruim , apesar do que os outros possam dizer. Pense - se você tem 4G de RAM e, além disso, precisa de 8G adicionais de troca, você acha que seu sistema ainda será utilizável? O que acontece com toda a troca de / para o disco? Muitas vezes, é melhor que o processo de sobrecarga de memória seja interrompido imediatamente quando a memória ficar esgotada, em vez de deixar todo o sistema lento para um nível inutilizável quando começar a gastar todo o tempo organizando e entrando em troca de dados.

bdonlan
fonte
1

Há muito tempo, havia uma variante unix comum (acho que era um BSD, mas não consigo encontrar a referência no momento) que alocaria todas as páginas de memória virtual no espaço de troca. Portanto, se você tivesse tanto swap quanto RAM, o tamanho da sua memória virtual ainda seria o mesmo da sua RAM. A recomendação habitual era então trocar duas vezes mais que a RAM, o que tornava a memória virtual duas vezes maior que a RAM.

Os escritórios modernos não se comportam dessa maneira, então a razão para a regra é obsoleta (acho que já era obsoleta em 1992, portanto nunca foi relevante para o Linux). Mas, estranhamente, a regra sobreviveu. Se você segui-lo agora, obtém memória virtual que é três vezes a sua quantidade de RAM, enquanto a intenção original era obter o dobro.

Só porque a razão histórica por trás da regra está errada não significa que seja estúpida. O espaço em disco ficou mais barato, portanto, pode fazer sentido alocar mais trocas. A quantidade de trocas que você deve ter depende muito da quantidade de RAM que você possui e de como a utiliza. Você pode executar um sistema sem troca, mas não terá a chance de escolher quais programas serão eliminados se a memória RAM ficar cheia e o sistema poderá ficar mais lento (às vezes é melhor usar a RAM para cache e trocar alguma memória do programa Fora). Alocar muito swap custa uma quantidade pequena de RAM (para estruturas de dados do kernel) e, claro, espaço em disco (mas hoje em dia isso geralmente é muito barato, exceto no SSD). É necessário ter swap suficiente para caber em toda a memória virtual se você quiser hibernar.

Gilles 'SO- parar de ser mau'
fonte
O Windows também faz isso: se o gerenciador de memória tiver espaço de troca suficiente, ele mantém também uma cópia das páginas que estão na memória (a partir das que foram modificadas menos recentemente, acho); portanto, se precisar trocá-las, poderá fazer isso apenas jogando as páginas para longe da memória.
Pqnet
0

Uma recomendação antiga baseada em suposições sobre capacidade típica de memória do sistema, velocidade do barramento de memória x velocidade do disco e porcentagem de tempo que os processos passam em vários estados de espera. Estou cético de que hoje em dia você queira mais do que 1/2 memória física no espaço de troca - apenas o suficiente para impedir a matança aleatória de OOM quando você estiver executando perto da utilização da memória total. Mas depende inteiramente da sua carga de trabalho típica, YMMV, etc.

llasram
fonte