Conciliando o uso da ZRAM e SWAP em disco na sua máquina

Nesse artigo vou explicar o que é ZRAM e como habilitá-la no seu sistema e como conciliar o uso da ZRAM com a SWAP em disco.

[ Hits: 1.718 ]

Por: Sidnei Serra em 01/09/2025 | Blog: https://www.youtube.com/channel/UCRgokKtNlttdmg2RJEa2VYw


O quê é ZRAM SWAP e configurando-a mais adequadamente



ZRAM SWAP é um bloco de memória RAM comprimida usada como SWAP, muito mais rápida do que o disco já que esse bloco está na RAM da máquina. Várias distribuições implementam a ZRAM como SWAP em vez da convencional (em disco) justamente pela rapidez com que a manipulação dos dados é feita: a RAM é muito mais rápida e como é um bloco comprimido (o processador se encarrega de fazer o trabalho de compressão/descompressão em tempo real), um bloco de 512MB pode chegar a 2GB de tamanho "relativo" graças ao algoritmo de compressão que for escolhido, normalmente o ZSTD ou LZ4.

Mas nem tudo é como deveria ser, já que essa compressão/descompressão requer processamento e se a máquina tiver um processador mais "perereca" podem ocorrer falhas nesse processo de compressão/descompressão de dados, podendo fazer com que dados não sejam carregados de modo adequado.

Vamos ver como instalar a ZRAM no Debian, abra o Terminal e instale o recurso com o primeiro comando e habilite-o com os outros dois:

sudo apt install zram-tools
sudo systemctl enable zramswap
sudo systemctl start zramswap

O arquivo de configuração está em /etc/default/zramswap e vamos ver as linhas que interessam:
  • ALGO=zstd - refere-se a qual algoritmo está sendo usado, pode ser o zstd, lz4, lzo e outros desde que estejam presentes no sistema. O zstd comprime mais mas é mais lento; o lz4 comprime menos mas é mais rápido;
  • PERCENT=50 - refere-se à quantidade (%) de memória RAM total que vai ser usada como bloco dinâmico;
  • #SIZE=512 - refere-se à quantidade em MB de memória RAM que vai ser usada como bloco dinâmico. Se usar essa não é para usar a de cima e vice-versa);
  • PRIORITY=100 - a prioridade de uso da ZRAM em relação à outras swaps presentes no sistema.

Para configurá-la mais adequadamente, edite o arquivo de configuração e coloque em PERCENT o valor de 50 e naquele arquivo do sysctl que vemos na página anterior coloque o valor de vm.swappness como 60. Isso vai fazer com que a ZRAM pegue 50% da memória total da máquina e a use como SWAP e o valor de 60 faz com que o sistema comece a usar a ZRAM antes da RAM ficar muito cheia, mesmo porque a ZRAM concorre em uso com os demais dados da RAM. Essa configuração (swappness maior que a porcentagem da ZRAM) evita que os dados entre os dois blocos se "empurrem".

Podem ser usados outros valores para PERCENT/SWAPPNESS como 20/30, 40/50 (sempre com percent maior do que a swappness) para ver o comportamento da máquina de modo a evitar erros nos processos de compressão/descompressão, como esses mostrados abaixo:

#################################################################
-- Estatísticas do ZRAM (/sys/block/zram0/mm_stat) --
Bytes originais (descomprimidos): 282 MB
Bytes comprimidos (armazenados): 56 MB
Taxa de compressão: 5,02 x
Páginas usadas: 64704512
Operações de compressão: 65581056
Operações de descompressão: 941
Falhas de compressão: 0
Falhas de descompressão: 305

-- Verificação rápida de erros de memória (dmesg) --
dmesg: leitura de buffer de kernel falhou: Operação não permitida
Nenhum erro crítico de memória ou zram encontrado no dmesg.

-- Recomendações --
Há falhas de descompressão! Recomenda-se testar a RAM com memtest86+

Diagnóstico finalizado.
####################################################################

Esses erros normalmente ocorrem por uso de processadores mais "pererecas" que podem não dar conta de ambos os processos de compressão e descompressão, além de eventuais problemas na memória RAM.
Página anterior     Próxima página

Páginas do artigo
   1. O quê é SWAP em disco e configurando-a mais adequadamente
   2. O quê é ZRAM SWAP e configurando-a mais adequadamente
   3. Conciliando o uso da ZRAM e SWAP em disco na sua máquina
   4. Criando arquivo de SWAP e limpando RAM e SWAP depois de uso intenso
Outros artigos deste autor

O que é o THP na configuração de RAM do Linux e quando desabilitá-lo

Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian

Máquina perereca - até onde é possível o uso de Linux?

Mitigação - O que é e quando é "seguro" desabilitar

Leitura recomendada

Configurando placa de som CMI8738

Nagios - Configuração no Ubuntu

Criando uma Máquina de Torrent com o OrangePI [Open Hardware]

Servidor proxy autenticado (Squid + DansGuardian + OpenLDAP)

Ativando o Modo Noturno via Linha de Comando no GNOME/Wayland

  
Comentários
[1] Comentário enviado por morvan em 26/09/2025 - 23:39h

Muito bom artigo. No Fedora, não precisei manipular nenhum arquivo .conf, senão emitir o comando:

'dnf remove zram-generator zram-generator-defaults' e reiniciar.

Como meu Swap é totalmente sobre SSD, dupliquei o tamanho da partição a ele destinada, vez que o tempo de acesso, comparando com dispositivos de estado móvel, é bem mais vantajoso.
Ao desabilitar a ZRam, além do ganho geral, percebi uma melhora substancial no acesso ao cache (para terem uma ideia: tenho WhatsApp corporativo; centenas de hits diários; o WA conseguiu rever os caches visivelmente mais rápido).

Morvan, Usuário GNU-Linux #433640. Seja Legal; seja Livre. Use GNU-Linux.

[2] Comentário enviado por coelhoposa em 29/09/2025 - 17:07h


Essa configuração diz "mais ou menos" ao sistema que quando a memória RAM estiver 80% usada é para começar a usar a SWAP - no caso, em disco.


Isso está incorreto. O que o "vm.swappness" faz é definir o quão agressivo será o uso da Swap: Quanto mais baixo o valor, mais o sistema irá evitar de usar a Swap e quanto mais alto o valor, mais o sistema irá usar a Swap. É basicamente sobre isso, não tem nada a ver com o "uso de memória RAM". Tem mais sobre isso, aqui:
- https://www.techtarget.com/searchdatacenter/definition/Linux-swappiness
- https://www.howtogeek.com/449691/what-is-swapiness-on-linux-and-how-to-change-it/
- https://github.com/torvalds/linux/blob/v6.2/mm/vmscan.c#L3000-L3014

E além disso, esse parâmetro pode ser ajustado com valores que vão de 0 a 200, e isso é desde o Kernel 5.8, lançado em Agosto de 2020. Ou seja, não dá nem pra confundir que o parâmetro equivale a RAM usada, já faz cinco anos.

[3] Comentário enviado por Zoiudo em 29/09/2025 - 17:26h

Por isso que eu coloquei "diz mais ou menos ao sistema" como forma de explicar bem por alto como funciona o parâmetro, eu sei que o swappness controla a questão do sistema usar mais agressivamente a troca de páginas na swap e não tem nada a ver com uso de memória RAM. Já o lance de valores maiores que 100 obrigado pela informação, confundi com a a prioridade de uso da ZRAM e/ou da SWAP em disco e que também não é de 0 a 100 mas convencionou-se "mais ou menos" por esse valor nos scripts. Aliás os desenvolvedores deveriam parametrar as variáveis de certas configurações para algo mais "medível" como 0 a 100 pois já é costume da gente saber que 50 é a metade, por exemplo. Imagine o kernel aceitar valores entre –1 a 32767 para configurar uma coisa, é phodz, hehehe...

Em todo caso, a prioridade da ZRAM/swap, por exemplo, é mais para ordenar as prioridades de uso das mesmas.


[2] Comentário enviado por coelhoposa em 29/09/2025 - 17:07h


Essa configuração diz "mais ou menos" ao sistema que quando a memória RAM estiver 80% usada é para começar a usar a SWAP - no caso, em disco.


Isso está incorreto. O que o "vm.swappness" faz é definir o quão agressivo será o uso da Swap: Quanto mais baixo o valor, mais o sistema irá evitar de usar a Swap e quanto mais alto o valor, mais o sistema irá usar a Swap. É basicamente sobre isso, não tem nada a ver com o "uso de memória RAM". Tem mais sobre isso, aqui:
- https://www.techtarget.com/searchdatacenter/definition/Linux-swappiness
- https://www.howtogeek.com/449691/what-is-swapiness-on-linux-and-how-to-change-it/
- https://github.com/torvalds/linux/blob/v6.2/mm/vmscan.c#L3000-L3014

E além disso, esse parâmetro pode ser ajustado com valores que vão de 0 a 200, e isso é desde o Kernel 5.8, lançado em Agosto de 2020. Ou seja, não dá nem pra confundir que o parâmetro equivale a RAM usada, já faz cinco anos.



[4] Comentário enviado por coelhoposa em 29/09/2025 - 19:24h

O vm.swappness já foi de 0 a 100 e, em 2020, isso mudou. O Hardware que usamos mudou. Os computadores não vem mais com aqueles HDDs lentos, onde um "vm.swappness" de 60 seria o ideal, mais sim com SSDs muito mais rápidos, onde um "vm.swappness" mais alto pode ser mais benéfico.

E colocar isso como "mais ou menos ao sistema", com uma porcentagem de RAM que, desde 2020, não corresponde na realidade é tornar a explicação incorreta. Só quis apontar essa questão do "vm.swappness", pois eu vejo muita gente errando nisso e passando informação errada, colocando esse parâmetro como se fosse "Ah, o sistema só vai usar a Swap quando ele chegar em tal porcentagem da RAM usada", quando ele não é isso.

E os parâmetros devem ser usados como eles deveriam ser usados, e essas "convenções" que vem de anos e anos, podem estar incorretas, desatualizadas ou não usando aquele parâmetro da melhor forma.

Por exemplo, a zRAM pode ser melhor aproveitada com um "vm.swappness" com valores acima de 100, pois a RAM é muito mais rápida, e isso é conforme a documentação do Kernel (https://docs.kernel.org/admin-guide/sysctl/vm.html); na documentação do Kernel, o "vm.swappness" é colocado como um "custo" de IO para se usar a Swap; com algumas pessoas usando em 180, para aproveitar que a RAM é ordens de magnitude mais rápida do que qualquer armazenamento.


[3] Comentário enviado por Zoiudo em 29/09/2025 - 17:26h

Por isso que eu coloquei "diz mais ou menos ao sistema" como forma de explicar bem por alto como funciona o parâmetro, eu sei que o swappness controla a questão do sistema usar mais agressivamente a troca de páginas na swap e não tem nada a ver com uso de memória RAM. Já o lance de valores maiores que 100 obrigado pela informação, confundi com a a prioridade de uso da ZRAM e/ou da SWAP em disco e que também não é de 0 a 100 mas convencionou-se "mais ou menos" por esse valor nos scripts. Aliás os desenvolvedores deveriam parametrar as variáveis de certas configurações para algo mais "medível" como 0 a 100 pois já é costume da gente saber que 50 é a metade, por exemplo. Imagine o kernel aceitar valores entre –1 a 32767 para configurar uma coisa, é phodz, hehehe...

Em todo caso, a prioridade da ZRAM/swap, por exemplo, é mais para ordenar as prioridades de uso das mesmas.



[5] Comentário enviado por Zoiudo em 30/09/2025 - 08:52h

Realmente admito que suas observações são bastante válidas e vou ver junto aos moderadores se consigo editar as partes "nebulosas" com informações mais adequadas para o perfeito entendimento do artigo; agora vamos às minhas ponderações:

1- O fato da tecnologia ter avançado para o que temos hoje não garante que o usuário vai ter acesso às últimas tecnologias e, na maioria das vezes, as máquinas que possuem Linux instalado são basicamente aquelas "que não rodam Windows direito". Nessa situação então temos configurações que ainda rodam em discos rígidos, pouca memória RAM, processadores antigos mono ou dual core sem HT, placas-mãe sem AHCI e outros detalhes técnicos relevantes. Falo isso pois estou nesse meio, minha máquina é um Core2Duo E7400 com 2GB de RAM DDR3 em uma placa-mãe Asrock G41-VS3 (sem AHCI) e disco de 500GB de 5400 rpm e 8MB de cache e as máquinas dos telecentros que administro estão nessa base também;

2- A ZRAM compete diretamente por espaço com a memória RAM e os valores de configuração devem evitar o "empurra-empurra" de dados que eventualmente pode acontecer entre os dois recursos (RAM e ZRAM) e em máquinas muito modestas pode ocorrer isso aqui:


-- Estatísticas do ZRAM (/sys/block/zram0/mm_stat) --
Bytes originais (descomprimidos): 288 MB
Bytes comprimidos (armazenados): 51 MB
Taxa de compressão: 5.62 x
Páginas usadas: 56598528
Operações de compressão: 124723200
Operações de descompressão: 1053
Falhas de compressão: 16137
Falhas de descompressão: 121


Essas falhas na compressão/descompressão podem ser erros por dados já estarem comprimidos, problemas de memória ou o processador não consegue dar conta do trabalho necessário. Nesses casos as "recomendações dos manuais" devem ser revistas e esse artigo foi feito em cima de telecentros comunitários com máquinas montadas com sucata e que se comportam de "modo diferente" em relação às máquinas mais novas. Tem máquinas que estão usando disco IDE em vez de Sata, processadores Celeron e DDR2; as "melhores" por conta do processador tem 2GB de RAM e as mais modestas tem 4GB e nas experiências de uso valores de swappness de 60/40 com 50% da memória RAM do sistema de ZRAM, LZ4 como algoritmo e até uma prioridade baixa (20) para um eventual swapfile no disco se mostraram a melhor combinação;

3- Máquinas mais potentes com SSD/NVMe e/ou +16GB de RAM não sentem tanto o uso da ZRAM e valores como os que você citou podem funcionar muito mais do que os que eu coloquei no artigo: SSD/NVMe possuem baixa latência - muito menor do que discos mecânicos - e a RAM menos ainda, daí concordo com você em deixar a RAM "folgada" para lidar com as requisições do sistema e jogar "o que não vai precisar no momento" para a swap - no caso a ZRAM ou mesmo SWAP em disco. O que eu postei é de experiência de uso, não é de "orelhada", fruto de muita literatura técnica como essas que você citou (e que vou ler também) mas a teoria é diferente da prática.

Veja que não estou contrariado com as suas observações, muito pelo contrário: o debate serve justamente para isso - principalmente corrigir eventuais erros ou "desacertos" - e é bom ver que ainda há pessoas com esse espírito de debate e que expõem suas ideias com argumentos sem serem má-educadas, coisa rara nesse nosso mundo de TI. Vou implementar suas observações no meu dia a dia e volto com os resultados.

Mais uma vez obrigado por ser didático sem ser desrespeitoso.


[4] Comentário enviado por coelhoposa em 29/09/2025 - 19:24h

O vm.swappness já foi de 0 a 100 e, em 2020, isso mudou. O Hardware que usamos mudou. Os computadores não vem mais com aqueles HDDs lentos, onde um "vm.swappness" de 60 seria o ideal, mais sim com SSDs muito mais rápidos, onde um "vm.swappness" mais alto pode ser mais benéfico.

E colocar isso como "mais ou menos ao sistema", com uma porcentagem de RAM que, desde 2020, não corresponde na realidade é tornar a explicação incorreta. Só quis apontar essa questão do "vm.swappness", pois eu vejo muita gente errando nisso e passando informação errada, colocando esse parâmetro como se fosse "Ah, o sistema só vai usar a Swap quando ele chegar em tal porcentagem da RAM usada", quando ele não é isso.

E os parâmetros devem ser usados como eles deveriam ser usados, e essas "convenções" que vem de anos e anos, podem estar incorretas, desatualizadas ou não usando aquele parâmetro da melhor forma.

Por exemplo, a zRAM pode ser melhor aproveitada com um "vm.swappness" com valores acima de 100, pois a RAM é muito mais rápida, e isso é conforme a documentação do Kernel (https://docs.kernel.org/admin-guide/sysctl/vm.html); na documentação do Kernel, o "vm.swappness" é colocado como um "custo" de IO para se usar a Swap; com algumas pessoas usando em 180, para aproveitar que a RAM é ordens de magnitude mais rápida do que qualquer armazenamento.

[6] Comentário enviado por coelhoposa em 30/09/2025 - 19:04h

Agradeço por esclarecer melhor, e fico feliz por ter te ajudado.

E realmente, tudo é questão de caso a caso mesmo. Tem casos em que a zRAM é uma excelente ideia e que pode ser usada a vontade, e outros em que ela vai atrapalhar mais do que realmente ajudar. E tem casos em que usar um vm.swappness mais alto pode ser benéfico e outros caso que não.

E concordo com as suas ponderações. Talvez, eu não tenha levado em conta os cenários com máquinas mais fracas nos meus comentários. Não é um cenário em que eu usaria algo como uma zRAM, mas se funcionou nos seus testes e trouxe um desempenho melhor para os computadores que você cuida, pode ser uma boa ideia.

E espero os seus testes e observações. E eu que agradeço pelo bom debate.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts