Otimizando o Uso da Memória Com Swappiness

7 de julho de 2009

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óriaValor da swappiness
256MB60 (valor padrão)
512MB40
1GB20
Acima de 1GB0

 
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óriaValor da swappiness
256MB60 (valor padrão)
512MB40
1GB20
Acima de 1GB0

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

27 Comentários

  1. Cléber

    Legal. Lá no /proc tem muita coisa útil. Para quem tem laptop, por exemplo, e vive dependendo da vida da bateria, é legal deixar o gerenciamento de memória em “modo laptop”, o que faz o kernel ficar mais “relaxado” na hora dos flushs, entre outras coisas. Para isso:
    $ echo 1 > /proc/sys/vm/laptop_mode

    Responder
  2. Tales A. Mendonça

    Cléber, obrigado pela contribuição!!

    Complementando.., quem quiser fazer a mudança definitiva, faça:

    # echo “vm.laptop_mode = 5” >> /etc/sysctl.conf && sysctl -w vm.laptop_mode=5

    Abraços!

    Responder
  3. william

    mano bom dia que escrever para agradecer por tem feito um livro muito legal sobre os comandos no Linux e percebe que nos comentários você relatou que tem uma 2° edição.
    como faço para adquirir-la?

    Responder
  4. Leo Walk

    Obrigado!!! Com base no seu artigo, eu criei um arquivo Swap de 768MB com Swappiness em 30 usando o app Swapper for tools aqui no meu Android.

    Responder
  5. insurge

    The problem solution approach was developed to ensure an objective assessment of inventive step and to avoid ex post facto analysis of the prior art see Case Law of the Boards of Appeal of the EPO, 8th edition 2016, I buy cialis generic

    Responder
  6. ONTOLLA

    lasix 40 2012, we determined whether О±2 expression exists on cortical nNOS NK1R neurons using a Chrna2 reporter mouse and immunohistochemistry for nNOS

    Responder

Trackbacks/Pingbacks

  1. Otimizando o seu *ubuntu Linux com Big Ferramentas - [...] Existe um arquivo que controla, de acordo com sua configuração, a utilização de swap, onde é assumido um valor…
  2. Facebook share count - how many social signals do I have xcrfkosts dowvj xrhpmpq nanu ahqusznjlstmtyv

Enviar Comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *