Como obter melhor desempenho do swap no seu sistema com o zswap. – Elias Praciano
Categories
Linux Tutoriais

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

Saiba como aplicar a compressão do swap na memória, em sistemas Linux, com o recurso zswap.
Como ele já está presente no kernel, você só precisa saber como ativá-lo.
É fácil.

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

arquivos de configuração do zswap.

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

Captura de tela da configuração do 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:

  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

  1. 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://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.

By 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!

2 replies on “Como obter melhor desempenho do swap no seu sistema com o zswap.”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.