Zswap (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de Zswap. Data da última tradução: 2022-11-20. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Zswap É um recurso do kernel que fornece um cache de RAM compactado para páginas de troca. As páginas que, de outra forma, seriam trocadas para o disco são compactadas e armazenadas em um pool de memória na RAM. Quando o pool estiver cheio ou a RAM esgotada, o menos usado recentemente (LRU) a página é descompactada e gravada no disco, como se não tivesse sido interceptada. Após a página ser descompactada no cache de troca, a versão compactada no pool pode ser liberada.

A diferença em comparação com ZRAM é que o zswap funciona em conjunto com um swap dispositivo enquanto zram é um dispositivo de troca na RAM que não requer um dispositivo de troca de apoio.

Alternando zswap

No pacote de kernel estável oficial linux, zswap é habilitado por padrão. Isso pode ser verificado através do sinalizador CONFIG_ZSWAP_DEFAULT_ON na configuração do kernel estável.

Para desativar zswap em tempo de execução, execute o seguinte comando:

# echo 0 > /sys/module/zswap/parameters/enabled

Para desativar zswap permanentemente, adicione zswap.enabled=0 aos seus parâmetros do kernel.

Dica: como Alternativa, você pode usar systemd-swapAUR que é um script para gerenciar permuta espaços com um arquivo de configuração /etc/systemd/swap.conf. Neste caso, você deve iniciar/habilitar systemd-swap.service.

Personalizando zswap

Parâmetros atuais

Zswap tem vários parâmetros personalizáveis. As configurações podem ser exibidos usando:

$ grep -R . /sys/module/zswap/parameters
/sys/module/zswap/parameters/same_filled_pages_enabled:Y
/sys/module/zswap/parameters/enabled:Y
/sys/module/zswap/parameters/max_pool_percent:20
/sys/module/zswap/parameters/compressor:lz4
/sys/module/zswap/parameters/zpool:z3fold
/sys/module/zswap/parameters/accept_threshold_percent:90

Veja a documentação do zswap para a descrição dos diferentes parâmetros.

A mensagem de carregamento do tempo de inicialização mostrando a configuração inicial pode ser recuperada com:

# dmesg | grep zswap:
[    0.317569] zswap: loaded using pool lz4/z3fold

Definir parâmetros

Usando sysfs

Cada configuração pode ser alterada em tempo de execução através do sysfs interface. Por exemplo, para alterar o compressor use o parâmetro:

# echo lz4 > /sys/module/zswap/parameters/compressor

Usando parâmetros de inicialização do kernel

Para manter a alteração de parâmetro, a opção correspondente, por exemplo zswap.compressor=lz4, deve ser adicionado para a inicialização do kernel. Portanto, para definir permanentemente todas as definições acima, os seguintes parâmetros do kernel devem ser adicionados:

zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20 zswap.zpool=z3fold

Quando alterar o algoritmo de compressão através do parâmetro de arranque, o que precisa para garantir o correspondente compressão módulo é carregado no início durante a inicialização (confira o #Algoritmo de compressão).

Usando systemd-swap

Para aqueles que estão usando o script systemd-swap que modifica os parâmetros sysfs em uma fase posterior do processo de arranque com base na sua configuração armazenada em /etc/systemd/swap.conf.

Tamanho máximo do pool

O pool de memória não é pré-alocado, ele pode crescer até um certo limite, em porcentagem da memória total disponível, por padrão até 20% do total de RAM. Uma vez que este limite é atingido, as páginas são expulsas do pool no dispositivo swap. O máximo comprimidos de pool de tamanho é controlado com o parâmetro max_pool_percent.

Alocador de pull de memória comprimida

O parâmetro zpool controla a gestão do comprimido de memória de pool.

Com o alocador de dados zbud, 2 objetos comprimidos são armazenadas em 1 página, o que limita a taxa de compressão de 2 ou menos.

O alocador superior z3fold permite que até 3 comprimidos de objetos por página. A taxa de compressão com z3fold normalmente é em média 2,7 enquanto é de 1,7 para o zbud.

Um zpool do tipo z3fold é criado por padrão. Use o parâmetro do kernel zswap.zpool para selecionar outro método no momento da inicialização. O alocador de dados também pode ser alterado posteriormente por meio da interface sysfs.

Algoritmo de compressão

Para compressão de página, o zswap usa módulos compactadores fornecidos pela API criptográfica do kernel. Ele usa por padrão o algoritmo de compressão lz4, mas isso pode ser alterado com zswap.compressor no momento da inicialização. Outras opções incluem deflate, lz4hc, lzo, lzo-rle, 842 e zstd.

Não há problema em alterar a compressão em tempo de execução usando sysfs ou via systemd-swap, mas o zswap começa neste caso com lz4 e muda em um estágio posterior para o algoritmo definido. Para iniciar o zswap com outro algoritmo imediatamente, isso deve ser definido por meio dos parâmetros de inicialização do kernel e o módulo correspondente deve ser carregado antecipadamente pelo kernel. Isso pode ser alcançado seguindo estas etapas:

  1. Adicione os módulos relacionados ao compressor escolhido ao array mkinitcpio (Português)#MODULES.
  2. Gere novamente os ambientes ramdisk após modificar a configuração do mkinitcpio: consulte mkinitcpio (Português)#Criação e ativação de imagem.
  3. Defina zswap.compressor ao seu algoritmo escolhido nos parâmetros do kernel.

Na próxima inicialização, consulte #Parâmetros atuais para verificar se zswap agora usa o compressor solicitado.

Veja também