O Swappiness - A gestão do uso de swap no Ubuntu Linux e VmWare Server

De $1

Tabela de conteúdos
sem cabeçalhos

 

A estratégia do Swapping no Linux Ubuntu passa principalmente por uma variável de sistema denomina de Swapping.jpgswappiness. Se alterar o valor de swappiness fará com que seja alterado o comportamento do sistema em relação a utilização de memória, determinando se ele irá utilizar mais ou menos memória swap.

 

O valor poderá ser modificado entre 0 e 100.

Por defeito o Ubuntu vem com um valor 60 atribuído ao swappiness.

Para verificar isso, basta executar:
$ sudo cat /proc/sys/vm/swappiness
Que mostrará o valor directamente
Ou
$ sudo sysctl -a|grep swappiness
Que lhe dará a resposta do seguinte modo:
vm.swappiness = 60
Valor 0 fará com que o sistema aloque o máximo de memória ram.
Valor de 100 significa alocar o máximo possível do que não está sendo utilizado no momento na memória swap.
 
A partir disso podemos dizer que quanto mais próximo de 100 mais espaço irá sobrar na memória ram, fazendo com que as aplicações iniciem mais rapidamente, em caso de já haverem outras aplicações a correr, pois estas não precisarão de contender pelo espaço existente na Ram.
Com valores mais próximos de 0 por sua vez a vantagem seria o ganho na velocidade dos aplicações já abertas. Pois estas estariam alocadas o máximo possível na memória ram.
Por exemplo caso uma aplicação aberta tenha ficado sem uso por um longo período, esta voltará ao seu estado activo de forma mais rápida. Por ser a memória ram mais rápida que os dispositivos de swap, as aplicações nelas residentes responderão mais rapidamente aos comandos do utilizador.
 
Em suma
Valores próximos de 100 : maior performance na inicialização do aplicações;
Valores próximos de 0 : maior performance na execução das aplicações.
 
Qual o melhor valor?
A definição de qual seria o melhor valor depende de dois aspectos principalmente:
1) O workload dos softwares utilizados;
2) A memória Ram disponível.
 

Em geral para os que tem uma quantidade de memória ram razoável pode se colocar um valor mais baixo. mem_swapping.jpgVisto que se tem memória o suficiente, para não usar ou usar pouco o swap device, terá um "improvement" de performance na execução das aplicações. E caso contrário o valor deve ser mais alto, ganhando desta forma mais espaço em memória ram.

Para alterar os valores:
 
Primeiro verifique o valor que deseja usar, da seguinte forma:
$ sudo -s
# echo “seu_novo_valor” > /proc/sys/vm/swappiness

Dessa forma pode testar o valor que atribuiu, porém após um restart, o sistema volta ao valor 60, que originalmente está definido no sistema.

 

Num sistema Linux com Virtualização VMWARE o "loading" e activação de processos é bastante agressivo e como tal experimentei um pequeno shell script que em tempo-real analisa a memória usada em função da memória real disponível e calcula o valor optimal para cada momento e aplica-o no sistema.

 

Os resultados foram os esperados e o desempenho e a resposta do sistema servidor Linux de virtualização VmWare Server 2.x melhoraram significativamente e inclusive a consola de vmware passou a responder aceitavelmente, face à sua tendência em comportamentos mais "abortivos", antes desta implementação.

 

Como tal o script baseado numa ideia de Con Kolivas (http://kerneltrap.org/node/1044) é o seguinte:

 

# !adjust-swappiness.sh

# Written By F. Goncalves @ Softelabs.com on 06 May 2010
#
# will adjust the current swappiness of the kernel
# based on the idea by Con Kolivas (http://kerneltrap.org/node/1044)
#
result=0
resultant=0
echo " $(date) - Starting Adjusting Swappiness according memload"
#
total=$(grep MemTotal /proc/meminfo | awk '{ print $2 }')       # obtain tot memory
#
while [ true ]; do
#
  used=$(grep AnonPages /proc/meminfo | awk '{ print $2 }')     # get used memory
  result=$(echo $used \* 100 / $total | bc -q)                            # compute usage in %
  then
     echo $result > /proc/sys/vm/swappiness                             # adjust it please
     echo "$(date) - Now Adjusting Swappiness to " $result
     resultant=$result
  fi
#
sleep 2
#
done
#
# Will stay here forever ..... hi...hi...hi....
#


Como tal a invocação deste script foi colocado no directório /etc/rc para que este script seja lançado no sistema Vserver em tempo de boot.

O script, ele próprio, está localizado em /usr/bin/adjust-swappiness

Para consultar se este está activo no seu sistema ou qual o tipo de ajustamentos que ele está a efectuar em tempo-real usar o comando:
# tail -f /var/Swappiness.log

e terá como output algo como:

root@vserver:/var/log# tail -f /var/log/Swappiness.log
Thu May  6 14:50:01 WEST 2010 - Now Adjusting Swappiness to  3
Thu May  6 14:50:01 WEST 2010 - Now Adjusting Swappiness to  3
Thu May  6 14:50:15 WEST 2010 - Now Adjusting Swappiness to  2
Thu May  6 14:50:15 WEST 2010 - Now Adjusting Swappiness to  2
Thu May  6 15:00:03 WEST 2010 - Now Adjusting Swappiness to  3
Thu May  6 15:00:03 WEST 2010 - Now Adjusting Swappiness to  3
Thu May  6 15:00:07 WEST 2010 - Now Adjusting Swappiness to  2
Thu May  6 15:00:07 WEST 2010 - Now Adjusting Swappiness to  2
Thu May  6 15:09:39 WEST 2010 - Now Adjusting Swappiness to  1
Thu May  6 15:09:40 WEST 2010 - Now Adjusting Swappiness to  1

Também pode consultar na própria variável do kernel através do comando:

# sysctl -a |grep swappiness
ou

# sysctl -q vm.swappiness

Desde já agradeço os seus comentários ou sugestões sobre este "fix" para fgoncalves@softelabs.com

Francisco Gonçalves in May 06 2010 @ Softelabs.com

Chaves:
 
Comentários (0)
Deve autenticar-se para escrever um comentário.