De acordo com a documentação do kernel:
This control is used to define how aggressive the kernel will swap
memory pages. Higher values will increase aggressiveness, lower values
decrease the amount of swap.
No entanto, isso é meio vago. Estou tentando descobrir exatamente o que o parâmetro controla. Eu sei que ajusta com que intensidade o kernel tenta trocar de página, mas que processo de tomada de decisão no código do kernel isso afeta?
Ele ajusta há quanto tempo uma página deve ter sido acessada antes que o kernel a troque? Em caso afirmativo, o que o valor padrão de 60 representa? E quanto é alterado por um incremento / decremento de 1 (uma fórmula seria legal)?
Ou ele troca páginas com base na frequência de acesso?
Ou alguma outra coisa?
Respostas:
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 emget_scan_count()
definido emmm/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 ovm.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 quevm.swappiness
seja definido como zero.Quando
vm.swappiness
definido como 100, as prioridades seriam iguais (anon_prio=100
,file_prio=200-100=100
). Definirvm.swappiness
como zero impedirá o kernel de remover páginas anônimas em favor de páginas do cache de arquivos.fonte
Existe uma fórmula que é usada para calcular qual página será trocada. Em
vmscan.c
você pode ver este algoritmo:Aqui você pode ver que a swappiness é uma escala, que é adicionada em algum algoritmo e você pode controlar por esse parâmetro como o kernel se comportará quando precisar trocar. Você pode imaginar como uma porcentagem de probabilidade que alguma página de memória inativa seja trocada. Se você definir o swappiness para 100, não há probabilidade, mas há uma garantia de que ele será trocado e se você o definir como 0, o kernel tentará não trocar, desde que tenha alguma memória vazia.
fonte
Foi dito (acho Norman 1986) que muitas vezes o botão "CLOSE DOOR" no elevador está quebrado ou nunca foi conectado a nada em primeiro lugar. Isso faz com que o controle ersatz não seja uma maneira de manipular o elevador, mas de pacificar o ciclista com pressa.
De maneira semelhante, a troca tem um efeito não relacionado ao seu controle determinístico bem definido de um predicado do kernel. Como foi observado por @neon_overlord em askubuntu.com
Então, o que isso realmente controla? Uma resposta válida - além das excelentes respostas já fornecidas - é que ela modifica sua expectativa de que você tem mais controle sobre o sistema e que girar um botão permitirá que você exerça esse controle de maneira significativa.
fonte