O algoritmo de troca de linux funciona com o conceito de "últimas páginas usadas recentemente". Cada página na memória virtual tem uma idade associada a ela. Se a página estiver sendo acessada com frequência, essa página deverá ter uma idade relativamente pequena, enquanto se uma página não estiver sendo acessada, essa página ficará mais antiga. Quanto mais antigas as páginas ficarem, maior a probabilidade de serem trocadas.
Então, se o kernel troca coisas, é porque a idade dessas páginas é (em comparação com as outras) antigas. Se houver memória física suficiente para todas as páginas, independentemente da idade, nada será trocado.
O kernel está configurado para lidar com seus recursos, como memória e swap, da maneira mais eficiente possível.
Eu não acho que você deva mudar esse comportamento. Mas, se você quiser, você pode alterar o swap do sistema. Uma configuração de troca de 0 significa que o disco será evitado a menos que seja absolutamente necessário (você fica sem memória).
Na Documentação do Kernel sobre o valor de swappiness
:
This control is used to define how aggressive the kernel will swap memory pages. Higher values will increase agressiveness, lower values decrease the amount of swap. A value of 0 instructs the kernel not to initiate swap until the amount of free and file-backed pages is less than the high water mark in a zone.
No código-fonte do kernel do Linux, o arquivo vmscan.c
manipula o valor do swappiness . Aqui está a parte interessting:
2018 /*
2019 * With swappiness at 100, anonymous and file have the same priority.
2020 * This scanning priority is essentially the inverse of IO cost.
2021 */
2022 anon_prio = swappiness;
2023 file_prio = 200 - anon_prio;
- Páginas anônimas são mapeamentos de memória sem nenhum arquivo ou dispositivo. É assim que os programas alocam memória do sistema operacional para uso de coisas como pilha e heap.
- As páginas de arquivo espelham o conteúdo de um arquivo existente.
Como você vê no snippet do código fonte acima, a prioridade para trocar páginas de arquivos é (com um valor padrão de 60) maior do que trocar páginas anônimas. Mas, se definido como 100, os dois valores terão a mesma prioridade. Se definido como 0, a diferença de prioridade será a maior possível.
Você pode definir o swappiness da seguinte maneira:
echo n >/proc/sys/vm/swappiness
... onde n
é o valor de 0 a 100.