Desde o kernel 2.6.28, o Linux usa um substituto de página Split Least Recently Used (LRU) estratégia. Páginas com uma origem de sistema de arquivos, como texto de programa ou bibliotecas compartilhadas, pertencem ao cache de arquivos. Páginas sem suporte a sistemas de arquivos são chamadas de páginas anônimas e consistem em dados de tempo de execução como o espaço de pilha reservado para aplicativos etc. Geralmente, as páginas pertencentes ao cache de arquivos são mais baratas para serem removidas da memória (pois podem ser lidas do disco quando necessário) . Como as páginas anônimas não têm backup do sistema de arquivos, elas devem permanecer na memória, desde que sejam necessárias por um programa, a menos que haja espaço de troca para armazená-las.
É um equívoco comum que uma partição de swap swap de alguma forma atrapalha seu sistema. Não ter uma partição swap não significa que o kernel não irá remover páginas da memória, apenas significa que o kernel tem menos opções em relação a quais páginas remover. A quantidade de troca disponível não afetará o quanto ela é usada.
O Linux pode lidar com a ausência de um espaço de troca porque, por padrão, a política de contabilidade de memória do kernel pode supercomprometendo a memória . A desvantagem é que quando a memória física está esgotada e o kernel não pode trocar páginas anônimas em disco, o (OOM-killer) começará a matar processos" desonestos "que consomem memória liberar memória para outros processos.
Avm.swappiness
opção é um modificador que altera o equilíbrio entre trocar páginas de cache de arquivos em favor de páginas anônimas. O cache de arquivos recebe um valor de prioridade arbitrário de 200, do qual o modificador vm.swappiness
é deduzido ( file_prio=200-vm.swappiness
). Páginas anônimas, por padrão, começam com 60 ( anon_prio=vm.swappiness
). Isso significa que, por padrão, os pesos de prioridade são moderadamente a favor de páginas anônimas ( anon_prio=60
, file_prio=200-60=140
). O comportamento é definido em mm/vmscan.c
na árvore de origem do kernel.
Dado um vm.swappiness
de 100
, as prioridades seriam iguais ( file_prio=200-100=100
, anon_prio=100
). Isso faria sentido para um sistema pesado de E / S se não fosse desejado que as páginas do cache de arquivos fossem removidas em favor de páginas anônimas.
Ao contrário, definir o vm.swappiness
para 0
impedirá que o kernel libere páginas anônimas em favor de páginas do cache de arquivos. Isso pode ser útil se os programas realizarem a maior parte do armazenamento em cache, o que pode acontecer com alguns bancos de dados. Nos sistemas de desktop, isso pode melhorar a interatividade, mas a desvantagem é que o desempenho de E / S provavelmente será afetado.
O valor padrão provavelmente foi escolhido como um meio-termo aproximado entre esses dois extremos. Como em qualquer parâmetro de desempenho, o ajuste de vm.swappiness
deve ser baseado em dados comparativos comparados a cargas de trabalho reais, e não apenas a um pressentimento.