O ZSWAP é um sistema de cache leve e comprimido para páginas da memória swap.
Ele pega páginas que estão prestes a ser movidas para o swap e as comprime em um pool de memória dinamicamente alocado na RAM.
O zswap é um recurso que pode ser útil a alguns usuários e ainda não foi testado em um número consistente de configurações — e deve ser considerado como experimental, portanto.
Entre os potenciais benefícios obtidos com o seu uso, citam-se:
- Usuários de máquinas com capacidade de memória física (RAM) limitada, podem reduzir o impacto que o uso do swap causa na performance do sistema.
- Máquinas virtuais que compartilham os mesmos recursos de E/S podem reduzir drasticamente a pressão da concorrência pelo uso do swap.
- Usuários de drives ou partições SSD, dedicadas ao swap, podem estender a vida útil de seus dispositivos, uma vez que este recurso reduz a necessidade constante de escrita.
Em troca de um uso mais intenso de ciclos da CPU, o zswap reduz o fluxo de E/S no swap.
Esta relação pode trazer uma melhora significativa na performance do sistema — isto é, se a leitura do cache comprimido for mais rápida que a leitura de um dispositivo swap.
Como verificar se posso usar o zswap no meu sistema
Este recurso já está presente na maioria das distribuições GNU/Linux e, portanto, só precisa ser ativado.
Os arquivos de configuração podem ser encontrados em /sys/module/zswap
.
Se este diretório existe, então o recurso também estará presente e poderá ser ativado e usado.
Pode ser habilitado no runtime, com uma única linha de comando — como veremos, a seguir.
A partir daí, ele passa a armazenar as páginas swapeadas pelo sistema.
A qualquer momento você também pode desabilitá-lo. Quando isto acontece, ele simplesmente para de receber as páginas de swap e vai se esvaziando, à medida em que seu conteúdo perca sua validade ou seja transferido de volta à memória.
Se houver a necessidade de esvaziar imediatamente o conteúdo do swap, sempre é possível executar o comando swapoff — conforme ensinamos aqui.
Como verificar as suas configurações atuais de zswap
As configurações atuais (runtime) podem ser vistas no diretório /sys/module/zswap/parameters/
, dentro de seus respectivos arquivos.
Use os comandos abaixo para verificar de que forma o recurso está configurado no seu sistema:
ls -lah /sys/module/zswap/parameters/; cat /sys/module/zswap/parameters/*
total 0 drwxr-xr-x 2 root root 0 Mar 16 10:42 . drwxr-xr-x 3 root root 0 Mar 16 10:42 .. -rw-r--r-- 1 root root 4,0K Mar 16 10:42 compressor -rw-r--r-- 1 root root 4,0K Mar 16 10:42 enabled -rw-r--r-- 1 root root 4,0K Mar 16 10:42 max_pool_percent -rw-r--r-- 1 root root 4,0K Mar 16 10:42 zpool lzo N 20 zbud
A primeira parte da listagem exibe os arquivos contidos no diretório /sys/module/zswap/parameters/ e a segunda parte exibe o conteúdo de cada arquivo, respectivamente:
compressor
— abriga o método de compressão usado. Pode ser LZO ou LZ4.
O ajuste padrão é LZO, que usa uma taxa de compressão menor e, portanto, oferece mais velocidade ao processo.enabled
— indica quando o zswap esta habilitado (enabled) ou desabilitado (disabled).
Os valores podem ser:- 0 ou N: para desabilitado (padrão)
- 1 ou Y: para habilitado
max_pool_percent
— delimita a quantidade máxima de memória que pode ser utilizada pelo pool de compressão.zpool
— determina o tipo de zpool a ser usado. O padrão é zbud — que aloca exatamente 1 página para armazenar 2 páginas comprimidas, o que implica em uma taxa de compressão de 2:1 ou “pior” (uma vez que o zbud pode não preencher completamente cada página)1.
Como ativar o zswap
O zswap faz uso uso do zpool para gerenciar o pool de memória comprimida.
O pool se expande de acordo com a demanda do sistema. Ele também se contrai à medida em que páginas comprimidas são liberadas.
Se você alterar os parâmetros, no runtime, o zswap não apaga o que foi feito. Ele apenas passa a trabalhar de acordo com os novos parâmetros.
Para ativar o zswap, no kernel runtime, basta mudar o arquivo ‘enabled’:
echo '1' > /sys/module/zswap/parameters/enabled
Para desativar, edite o comando acima, mudando o valor 1 para 0:
echo '0' > /sys/module/zswap/parameters/enabled
Da mesma forma, é possível alterar os outros parâmetros, através dos arquivos correspondentes.
As alterações terão efeito apenas para a sessão atual. Ao desligar e ligar a máquina, seus valores voltam ao padrão.
Outras formas de habilitar o zswap no Linux
Para escrever este artigo, usei uma máquina Debian 8.3 “Jessie”. Não testei o recurso em outras distro — mas é razoável acreditar que irá funcionar do mesmo jeito no Ubuntu e em outras distribuições baseadas no Debian.
Você pode também ativar o zswap no menu do GRUB, na inicialização do sistema:
- Pressione a tecla Shift, durante o boot, para entrar no menu do GRUB.
- Edite a linha de comando, incluindo
zswap.enabled=1
ao final dela. - Pressione a tecla F10 para retomar a inicialização do Linux.
Se você tem intimidade com a configuração do GRUB, pode editá-lo e incluir o parâmetro zswap.enabled=1
ao final da entrada GRUB_CMDLINE_LINUX_DEFAULT
.
Referências
- O que é o zbud e o zpool?
O zbud é um dispositivo do sistema, com o propósito especial de armazenar páginas comprimidas (zpages) na memória.
Projetado para armazenar até 2 páginas comprimidas por página em memória física. Embora esta abordagem traga limitações à densidade de armazenamento, é mais eficiente no final das contas.
Já, o zpool é um alocador de memória especial para zpages. Os pools de memória permitem que softwares possam reservar, acessar e liberar blocos de memória representados por handles em runtime.
É um recurso usado por vários algoritmos de compressão.
https://www.kernel.org/doc/Documentation/vm/zswap.txt.
http://dcjtech.info/topic/the-linux-kernels-compressed-memory-pages/.
2 replies on “Como obter melhor desempenho do swap no seu sistema com o zswap.”
Como posso deixar ativo por padrão o zswap?
Na configuração do GRUB.