Por que precisamos definir o espaço de troca com o dobro do tamanho da nossa memória física?

Por que precisamos definir o espaço de troca com o dobro do tamanho da nossa memória física?

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

Responder1

A resposta curta é "Você nãoterpara".

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

Normalmente, você deve dimensionar seu espaço de troca para aproximadamente 2x a memória principal para sistemas com menos de 2 GB de RAM ou aproximadamente 1x a memória principal se tiver mais. Porém, se você não tiver muita RAM, geralmente desejará muito mais troca. Não é recomendado configurar menos de 256M de swap em um sistema e você deve ter em mente a futura expansão de memória ao dimensionar a partição swap. Os algoritmos de paginação VM do kernel são ajustados para funcionar melhor quando há pelo menos 2x swap em relação à memória principal. Configurar pouca troca pode levar a ineficiências no código de verificação da página VM, bem como criar problemas posteriormente se você adicionar mais memória à sua máquina. Finalmente, em sistemas maiores com vários discos SCSI (ou vários discos IDE operando em controladores diferentes), recomendamos fortemente que você configure o swap em cada unidade. As partições swap 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 swap. Manter as partições de troca próximas do mesmo tamanho permitirá que o kernel distribua de maneira ideal o espaço de troca nos 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 lhe dar mais tempo para se recuperar de um programa descontrolado antes de ser forçado a reinicializar.

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 será uma boa ideia evitar pré-alocar 256 GB de espaço em disco para swap que nunca será usado.

Por outro lado, tendoalgunsO espaço de troca geralmente torna possível obter dumps do kernel (por exemplo, no Open-, Net- e FreeBSD). Portanto, é uma boa ideia ter pelo menos espaço de swap suficiente para obter um dump completo do kernel em caso de pânico.

Não existe uma regra absoluta que se ajustetodoscasos. Você tem que ler sobre o comportamento específico do seu sistema, aprender como ele funciona, pensar sobre o uso pretendido do sistema e decidir o melhor tamanho de espaço de troca adequado.seuprecisa.

Responder2

Você não precisa de jeito nenhum. Versões antigas do Windows tratariam cada página de 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 na troca para que fosse útil - isso não é mais o caso hoje e nunca foi o caso no Linux, mas o boato persiste.

No entanto, há um caso em que é desejável ter pelo menos tanta troca quanto RAM - hibernação. Como o Linux usa o arquivo de troca para hibernação (também conhecido como suspensão para 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). Este é o caso apenas de máquinas que precisam hibernar, como laptops, é claro.

Finalmente, ter muita troca pode ser umruimcoisa, 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 poderá ser usado, com toda a troca de/para o disco que está fazendo? Muitas vezes é melhor que o processo de consumo de memória seja eliminado imediatamente quando você fica sem memória, em vez de deixar o sistema inteiro lento a um nível inutilizável quando ele começa a gastar todo o seu tempo organizando dados dentro e fora do swap.

Responder3

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

As unidades modernas não se comportam dessa maneira, então o motivo da regra é obsoleto (acho que já era obsoleto em 1992, então nunca foi relevante para Linux). Mas, curiosamente, a regra sobreviveu. Se você seguir agora, obterá memória virtual três vezes maior que a 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 ela seja estúpida. O espaço em disco ficou mais barato, então pode fazer sentido alocar mais swap. A quantidade de swap que você deve ter depende muito de quanta RAM você tem e como você a usa. Você pode executar um sistema sem troca, mas não terá a chance de escolher quais programas matar se sua RAM ficar cheia e o sistema pode ficar mais lento (às vezes é melhor usar RAM para cache e trocar alguma memória de programa fora). Alocar muito swap custa uma pequena quantidade de RAM (para estruturas de dados do kernel) e, claro, espaço em disco (mas hoje em dia isso geralmente é muito barato, exceto em SSD). Ter swap suficiente para acomodar toda a sua memória virtual é necessário se você quiser hibernar.

Responder4

Uma recomendação antiga baseada em suposições sobre a capacidade típica de memória do sistema, velocidade do barramento de memória versus velocidade do disco e porcentagem de tempo gasto pelos processos em vários estados de espera. Não acredito que hoje em dia você queira mais do que talvez 1/2 memória física no espaço de troca - apenas o suficiente para evitar a eliminação aleatória de OOM quando você estiver executando quase a utilização total da memória. Mas depende inteiramente da sua carga de trabalho típica, YMMV, etc.

informação relacionada