Linux tux ninja

Como obter melhor desempenho do swap no seu sistema com o zswap.

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:

  1. 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.
  2. Máquinas virtuais que compartilham os mesmos recursos de E/S podem reduzir drasticamente a pressão da concorrência pelo uso do swap.
  3. 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.
arquivos de configuração do 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.
Captura de tela da configuração do zswap
Use os comandos abaixo para verificar de que forma o zswap se encontra 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, respectivametne:

  • 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).

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.
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.
Este recurso é usado por vários algoritmos de compressão.

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 distribuições — mas é razoável acreditar que irá funcionar do mesmo jeito no Ubuntu e em outras distro baseadas no Debian.
Você pode também ativar o zswap no menu do GRUB, na inicialização do sistema:

  1. Pressione a tecla Shift, durante o boot, para entrar no menu do GRUB.
  2. Edite a linha de comando, incluindo zswap.enabled=1 ao final dela.
  3. 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

https://www.kernel.org/doc/Documentation/vm/zswap.txt.
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4e2e2770b1529edc5849c86b29a6febe27e2f083.
http://dcjtech.info/topic/the-linux-kernels-compressed-memory-pages/.
https://www.ibm.com/developerworks/community/blogs/fe313521-2e95-46f2-817d-44a4f27eba32/entry/new_linux_zswap_compression_functionality7?lang=en.
https://bbs.archlinux.org/viewtopic.php?id=169585.

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como “Rick and Morty” e “BoJack Horseman”.
Me siga no Twitter e vamos trocar ideias!

Deixe uma resposta

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