Zswap (Portuguê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.
/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:
- Adicione os módulos relacionados ao compressor escolhido ao array mkinitcpio (Português)#MODULES.
- Gere novamente os ambientes ramdisk após modificar a configuração do mkinitcpio: consulte mkinitcpio (Português)#Criação e ativação de imagem.
- 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.