Como foi explicado, a ZRAM é um bloco comprimido na RAM do sistema onde os dados que circulam por ali são compactados e descompactados em tempo real, então o processador tem que ser bom o suficiente para lidar com essa carga de trabalho para que não haja erros no processo de compressão e descompressão. E mesmo que haja erros nos processos, ainda assim o sistema se comporta de modo adequado desde que eventuais dados não processados adequadamente não sejam críticos para evitar que a máquina trave com a entrada do "oomkiller" - que é um serviço que "mata" serviços de modo a liberar espaço na RAM para que o sistema se "recomponha". Esse bloco de memória não é fixo mas é delimitado um valor máximo pois ele concorre diretamente com os outros dados presentes na memória RAM; a compressão e descompressão é dada por algoritmos como lz4 ou zstd já presentes no sistema e, dependendo dos dados circulantes, um bloco de 512MB pode lidar facilmente com 2GB de dados.
Aqui vamos usar o pacote ZRAM-TOOLS e, no Debian de demais distribuições "xupadoras" os comandos para instalar, habilitar e iniciar são:
sudo apt install zram-tools
sudo systemctl enable zramswap.service
sudo systemctl start zramswap.service
Se você tiver algum monitor de recursos na máquina como o Conky, dependendo dos parâmetros nele já deverá aparecer o tamanho e uso da Swap, seja ela só em disco, em ZRAM ou ambas.
O arquivo de configuração fica em /etc/default/zramswap e o conteúdo é mais ou menos assim:
#Compression algorithm selection
#speed: lz4 > zstd > lzo
#compression: zstd > lzo > lz4
#This is not inclusive of all that is available in latest kernels
#See /sys/block/zram0/comp_algorithm (when zram module is loaded) to see
#what is currently set and available for your kernel[1]
#[1] https://github.com/torvalds/linux/blob/master/Documentation/blockdev/zram.txt#L86
ALGO=lz4
#Specifies the amount of RAM that should be used for zram
#based on a percentage the total amount of available memory
#This takes precedence and overrides SIZE below
#PERCENT=25
#Specifies a static amount of RAM that should be used for
#the ZRAM devices, this is in MiB
SIZE=512
#Specifies the priority for the swap devices, see swapon(2)
#for more details. Higher number = higher priority
#This should probably be higher than hdd/ssd swaps.
PRIORITY=100
As linhas que importam são:
- ALGO=lz4
- PERCENT=25
- SIZE=512
- PRIORITY=100
ALGO=lz4
Aqui é o algoritmo de compressão. Ele fornece menor compressão mas é mais rápido e usa menos processador que o zstd; já o zstd comprime mais mas é mais lento e usa mais processador. Para garantir que os algoritmos estejam disponíveis adequadamente, edite (crie) o arquivo /etc/modules-load.d/compressors.conf e coloque lá dentro:
lz4_compress
lz4
zstd
zstd_compress
PERCENT=25
SIZE=512
Você deve usar um ou outro. PERCENT faz com que o bloco de RAM tenha 25% da memória total; já SIZE especifica o tamanho do bloco de "modo fixo" também da memória total. Se usar o PERCENT coloque um # na linha do SIZE e vice-versa. Nesse ponto de configuração acredito que 25% ou 1/4 da RAM total seja suficiente. Como falado antes, o tamanho da ZRAM concorre diretamente com os outros dados circulantes no fluxo da RAM mas isso não significa que o bloco tem um tamanho fixo: ele não vai passar do tamanho especificado em PERCENT ou SIZE. Então, para ilustrar, um sistema com 2GB de RAM, para usar 1/4 da RAM, OU use PERCENT=25 OU use SIZE=512. Essa configuração então reserva 512MB de RAM para a ZRAM deixando 1,5GB para o resto do sistema.
PRIORITY=100
É a prioridade dada para o kernel usar a ZRAM na prioridade máxima. Quando a RAM estiver no limite estipulado no parâmetro swappness o kernel irá começar a usar a ZRAM até ela se completar para depois passar a usar outro dispositivo SWAP presente ma máquina, como SWAP em disco.