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

9

Quando queremos configurar um sistema Linux, há uma sugestão comum para configurar o espaço de troca duas vezes maior que a sua memória física. Eu quero saber por que precisamos disso, e como é que esta sugestão veio a ser?

    
por user49137 12.09.2010 / 14:09

4 respostas

8

A resposta curta é "Você não tem para".

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

You should typically size your swap space to approximately 2x main memory for systems with less than 2GB of RAM, or approximately 1x main memory if you have more. If you do not have a lot of RAM, though, you will generally want a lot more swap. It is not recommended that you configure any less than 256M of swap on a system and you should keep in mind future memory expansion when sizing the swap partition. The kernel's VM paging algorithms are tuned to perform best when there is at least 2x swap versus main memory. Configuring too little swap can lead to inefficiencies in the VM page scanning code as well as create issues later on if you add more memory to your machine. Finally, on larger systems with multiple SCSI disks (or multiple IDE disks operating on different controllers), we strongly recommend that you configure swap on each drive. The swap partitions on the drives should be approximately the same size. The kernel can handle arbitrary sizes but internal data structures scale to 4 times the largest swap partition. Keeping the swap partitions near the same size will allow the kernel to optimally stripe swap space across the N disks. Do not worry about overdoing it a little, swap space is the saving grace of UNIX and even if you do not normally use much swap, it can give you more time to recover from a runaway program before being forced to reboot.

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 grande servidor com 128 GB de memória física, é uma boa idéia evitar pré-alocar 256 GB de espaço em disco para troca que nunca será usada.

Por outro lado, ter algum espaço de troca, muitas vezes torna possível pegar os dumps do kernel (por exemplo, no Open-, Net- e FreeBSD). Portanto, é uma boa ideia 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 se encaixe em todos os casos. Você tem que ler sobre o comportamento do seu sistema específico, aprender como funciona, pensar sobre o uso pretendido do sistema e decidir o melhor tamanho do espaço de troca que atende às suas necessidades .

    
por 12.09.2010 / 14:21
4

Você não precisa de nada. Versões antigas do Windows tratariam 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 de sua RAM física em swap 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 ter pelo menos o máximo de swap que a RAM é desejável - a hibernação. Como o Linux usa o arquivo de troca para hibernação (também conhecido como suspend-to-disk), você precisa de swap suficiente para armazenar todos os dados na RAM, além de todos os dados que já foram trocados (menos cache de RAM). Este é 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 um 8G adicional de swap, você acha que seu sistema ainda será utilizável, com toda a troca de / para o disco que está fazendo? Muitas vezes é melhor ter o processo de monopolizar a memória ser morto imediatamente quando você fica sem memória, em vez de ter todo o sistema lento para um nível inutilizável quando ele passa todo o seu tempo organizando dados dentro e fora do swap.

    
por 12.09.2010 / 15:49
1

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 cada página de memória virtual no espaço de troca. Então, se você tivesse tanta troca quanto a RAM, o tamanho da sua memória virtual ainda seria o mesmo que a sua memória RAM. A recomendação usual, então, era ter o dobro de troca de RAM, o que tornava a memória virtual duas vezes maior que a memória RAM.

Unidades modernas não se comportam dessa maneira, então a razão para a regra é obsoleta (acho que já estava obsoleta em 1992, então nunca foi relevante para o Linux). Mas por incrível que pareça, a regra sobreviveu. Se você segui-lo agora, você obtém memória virtual que é três vezes 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 é errada, não significa que seja estúpida. O espaço em disco se tornou mais barato, por isso pode fazer sentido alocar mais troca. Quanta troca você deve ter depende muito de quanto você tem de RAM e como você a utiliza. Você pode rodar um sistema sem swap, mas então você não tem a chance de escolher quais programas matar se sua RAM encher, e o sistema pode estar mais lento (as vezes é melhor usar RAM para cache e trocar algumas memórias de programa Fora). A alocação de swap demais custa uma pequena quantidade de RAM (para estruturas de dados do kernel) e, é claro, de espaço em disco (mas hoje em dia é geralmente barato, exceto no SSD). Ter swap suficiente para caber em toda a sua memória virtual é necessário se você quiser hibernar.

    
por 12.09.2010 / 15:05
0

Uma antiga recomendação baseada em suposições sobre a capacidade típica de memória do sistema, a velocidade do barramento de memória versus a velocidade do disco e a porcentagem de tempo que os processos gastam em vários estados de espera. Eu sou cético que nos dias de hoje você quer mais do que talvez 1/2 de memória física no espaço de troca - apenas o suficiente para evitar o assassinato aleatório de OOM quando você está executando perto da utilização de memória completa. Mas depende inteiramente da sua carga de trabalho típica, YMMV, etc.

    
por 12.09.2010 / 14:20