Desde a versão 2.6.28 do kernel, o Linux usa uma estratégia de substituição de página LRU ( Split Menos Utilizadas 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.
A vm.swappiness
opção entra em jogo em get_scan_count()
definido em mm/vmscan.c
. get_scan_count()
determina com que agressividade as listas LRU anônima e de arquivo devem ser verificadas ao procurar páginas para despejo. O valor de cada caso é determinado pela média flutuante das taxas rotacionadas recentemente e varridas recentemente, nas quais referências mais recentes têm mais peso do que as mais antigas para levar em consideração a mudança na carga de trabalho do sistema.
O vm.swappiness
é um modificador que muda o equilíbrio entre a trocar páginas de cache de arquivos em favor de páginas anônimas. vm.swappiness
é o valor de prioridade dado às páginas anônimas, por padrão, definido como 60 . O cache do arquivo recebe um valor de prioridade 200 do qual o vm.swappiness
modificador é deduzido ( file_prio=200-anon_prio
). 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
). No entanto, quando o sistema está próximo de uma condição de falta de memória , as listas LRU anônima e de arquivo são varridas igualmente, a menos que vm.swappiness
seja definido como zero.
Quando vm.swappiness
definido como 100, as prioridades seriam iguais ( anon_prio=100
, file_prio=200-100=100
). Definir vm.swappiness
como zero impedirá o kernel de remover páginas anônimas em favor de páginas do cache de arquivos.