Desde o kernel 2.6.28, o Linux usa uma estratégia de substituição de página LRU ( divisão menos usada recentemente ). As páginas com uma fonte do sistema de arquivos, como texto do programa ou bibliotecas compartilhadas, pertencem ao cache do arquivo. As páginas sem o apoio do sistema 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. Normalmente, as páginas pertencentes ao cache de arquivos são mais baratas para serem expulsas da memória (pois elas podem ser lidas novamente a partir do disco, quando necessário) . Como as páginas anônimas não têm o apoio do sistema de arquivos, elas devem permanecer na memória enquanto forem 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 de alguma forma desacelere seu sistema. Não ter uma partição de swap não significa que o kernel não despeja páginas da memória, apenas significa que o kernel tem menos opções em relação a quais páginas despejar. A quantidade de swap disponível não afetará o quanto é usado.
O Linux pode lidar com a ausência de um espaço de troca porque, por padrão, a política de contabilidade da memória do kernel pode comprometer a memória . A desvantagem é que quando a memória física está esgotado, e o kernel não pode trocar páginas anônimas para disco, o out-of-memory-killer (OOM-killer) mecanismo de começará a matar memória hogging processos "párias" para liberar memória para outros processos.
A vm.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 do arquivo recebe um valor de prioridade arbitrário de 200, do qual o vm.swappiness
modificador é deduzido ( file_prio=200-vm.swappiness
). As 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 na mm/vmscan.c
á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 for desejado que as páginas do cache de arquivos sejam despejadas em favor de páginas anônimas.
Por outro lado, definir vm.swappiness
to 0
impedirá que o kernel despeje páginas anônimas em favor de páginas do cache de arquivos. Isso pode ser útil se os programas fizerem a maior parte do cache deles, o que pode ser o caso de 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 fundo intermediário aproximado entre esses dois extremos. Como em qualquer parâmetro de desempenho, o ajuste vm.swappiness
deve se basear em dados de benchmark comparáveis às cargas de trabalho reais, não apenas um pressentimento.