Para poder entender o que é swappinesse e seu funcionamento, primeiro você deve saber o que é swap e qual a sua funcionalidade.
O que é swap?
Swap é uma área, espaço, de troca criada no disco(no Linux) para contribuir com a falta de memória.
Funciona da seguinte maneira:
Se você possui 256MB de memória e abre 3 aplicativos que somados ocupam mais de 300MB, isso normalmente iria travar o seu computador ou mesmo você não conseguiria trabalhar com os 3 aplicativos abertos. Tendo uma área de troca(swap) reservada no disco, a memória principal despeja parte do que não precisa ser executado para o disco, ou seja, para a swap, liberando memória e assim podendo processar mais aplicativos.
O que é swappiness?
Swappinnes é uma variável contida no código fonte do kernel(Linux), responsável por controlar a quantidade de memória principal(RAM) e swap que será utilizada.
Para essa variável é atribuído um valor fixo(60), que para máquinas com pouca memória, 256MB, 512MB, este valor pode ser confortável ou aceito. O problema está em máquinas mais novas que possuem 1GB de memória para cima, essas máquinas sofrerão uma perda de desempenho considerável.Para poder entender o que é swappinesse e seu funcionamento, primeiro você deve saber o que é swap e qual a sua funcionalidade.
O que é swap?
Swap é uma área, espaço, de troca criada no disco(no Linux) para contribuir com a falta de memória.
Funciona da seguinte maneira:
Se você possui 256MB de memória e abre 3 aplicativos que somados ocupam mais de 300MB, isso normalmente iria travar o seu computador ou mesmo você não conseguiria trabalhar com os 3 aplicativos abertos. Tendo uma área de troca(swap) reservada no disco, a memória principal despeja parte do que não precisa ser executado para o disco, ou seja, para a swap, liberando memória e assim podendo processar mais aplicativos.
O que é swappiness?
Swappinnes é uma variável contida no código fonte do kernel(Linux), responsável por controlar a quantidade de memória principal(RAM) e swap que será utilizada.
Para essa variável é atribuído um valor fixo(60), que para máquinas com pouca memória, 256MB, 512MB, este valor pode ser confortável ou aceito. O problema está em máquinas mais novas que possuem 1GB de memória para cima, essas máquinas sofrerão uma perda de desempenho considerável.
Segue um trecho do código fonte do kernel do Linux aonde encontra-se a swappiness:
Local: /usr/src/linux/mm/vmscan.c (Tendo em vista que “linux” é o link simbólico que aponta para a versão kernel).
/* * From 0 .. 100. Higher means more swappy. */ int vm_swappiness = 60;
Informações sobre a configuração da swappiness
O valor dessa variável varia de 0 a 100, sendo o 0 = sem utilização de swap, apenas em situações muito críticas; 100 = a prioridade continua sendo a de utilizar a memória RAM, mas irá fazer swap em disco com mais constância, ou seja, mesmo que haja muita memória principal sobrando, o sistema, ainda assim, irá fazer swap.
Você pode seguir esta tabela abaixo para configurar o valor da sua swappiness de acordo com a quantidade de memória que possui.
Quantidade de Memória | Valor da swappiness |
256MB | 60 (valor padrão) |
512MB | 40 |
1GB | 20 |
Acima de 1GB | 0 |
Descobrindo o valor da swappiness
Para descobrir qual o valor atual da sua swappiness, utilize o comando cat /proc/sys/vm/swappiness ou sysctl vm.swappiness, como nos exemplos abaixo:
Saída com o comando cat:
cat /proc/sys/vm/swappiness 40
Saída com o comando sysctl:
sysctl vm.swappiness vm.swappiness = 40
Alterando o valor da sua swappiness
Existem algumas formas para se altear o valor da swappines, umas definitivas – por exemplo alterar o valor direto no código fonte do kernel e recompilá-lo – e outras não – por exemplo utilizando o comando echo valor > /pro/sys/vm/swappiness –.
Como o nosso objetivo é fazer uma alteração definitiva, vamos percorrer o caminho mais simples, ou seja, sem que precise recompilar o kernel.
Primeiro, verifiquei se você já possui a seguinte linha (vm.swappiness = n), sendo “n” o valor da variável, no arquivo /etc/sysctl.conf.
cat /etc/sysctl.conf | grep swappiness vm.swappiness = 40
Caso exista, edite o arquivo e altere o valor(caso não seja satisfatório) para um valor adequado. Logo em seguida execute o comando echo ou sysclt, para atualizar o sistema com o novo valor :
sysctl -w vm.swappiness=n
ou
echo n > /proc/sys/vm/swappiness
Segue um trecho do código fonte do kernel do Linux aonde encontra-se a swappiness:
Local: /usr/src/linux/mm/vmscan.c (Tendo em vista que “linux” é o link simbólico que aponta para a versão kernel).
/* * From 0 .. 100. Higher means more swappy. */ int vm_swappiness = 60;
Informações sobre a configuração da swappiness
O valor dessa variável varia de 0 a 100, sendo o 0 = sem utilização de swap, apenas em situações muito críticas; 100 = a prioridade continua sendo a de utilizar a memória RAM, mas irá fazer swap em disco com mais constância, ou seja, mesmo que haja muita memória principal sobrando, o sistema, ainda assim, irá fazer swap.
Você pode seguir esta tabela abaixo para configurar o valor da sua swappiness de acordo com a quantidade de memória que possui.
Quantidade de Memória | Valor da swappiness |
256MB | 60 (valor padrão) |
512MB | 40 |
1GB | 20 |
Acima de 1GB | 0 |
Descobrindo o valor da swappiness
Para descobrir qual o valor atual da sua swappiness, utilize o comando cat /proc/sys/vm/swappiness ou sysctl vm.swappiness, como nos exemplos abaixo:
Saída com o comando cat:
cat /proc/sys/vm/swappiness 40
Saída com o comando sysctl:
sysctl vm.swappiness vm.swappiness = 40
Alterando o valor da sua swappiness
Existem algumas formas para se altear o valor da swappines, umas definitivas – por exemplo alterar o valor direto no código fonte do kernel e recompilá-lo – e outras não – por exemplo utilizando o comando echo valor > /pro/sys/vm/swappiness –.
Como o nosso objetivo é fazer uma alteração definitiva, vamos percorrer o caminho mais simples, ou seja, sem que precise recompilar o kernel.
Primeiro, verifiquei se você já possui a seguinte linha (vm.swappiness = n), sendo “n” o valor da variável, no arquivo /etc/sysctl.conf.
cat /etc/sysctl.conf | grep swappiness vm.swappiness = 40
Caso exista, edite o arquivo e altere o valor(caso não seja satisfatório) para um valor adequado. Logo em seguida execute o comando echo ou sysclt, para atualizar o sistema com o novo valor :
sysctl -w vm.swappiness=n
ou
echo n > /proc/sys/vm/swappiness