Usando ZRAM com a Raspberry Pi

O uso das mais variadas versões da Raspberry Pi em prototipagem ou até mesmo em algumas soluções prontas é atualmente muito expressivo, sendo esta plataforma de desenvolvimento a que mais impulsiona o uso e adoção de Linux embarcado nos dias atuais. Isso se deve a alguns fatores, os quais dentre eles se destacam: facilidade em encontrar variadas versões das Raspberries Pi para comprar no mercado, facilidade em migrar um projeto de um modelo Pi para outro (em caso de obsolescência de uma versão de placa, por exemplo) e custo/benefício bem interessante para algumas soluções stand-alone.

Junto com o uso mais intenso da Raspberry Pi, inevitavelmente vem o uso mais severo de memória RAM da mesma, o que pode ter como consequência o uso relevante de swap. O swap, na sua forma mais clássica, utiliza a memória de massa para operar (no caso da Raspberry Pi, armazenamento no micro-SD card), o que leva a uma latência significativa no uso de aplicações mais pesadas em termos de consumo de RAM, uma vez que o tempo de acesso para escrita e leitura da memória de massa é muitas vezes superior se comparado ao de uma memória RAM.

Este artigo mostrará como fazer uso do ZRAM para o swap, de forma a criar um drive/disco dentro da própria memória RAM e com compactação e descompactação de dados on-the-fly, de forma a expandir a capacidade real de armazenamento em RAM e, ainda, melhorar muito o tempo de escrita e leitura no swap.

O que é a ZRAM?

ZRAM, em poucas palavras, é uma feature do Linux que permite a criação de um dispositivo de block (block device) em RAM, com compactação on-the-fly, ou seja, tudo que é gravado é automaticamente compactado e, ainda, tudo que é lido é automaticamente descompactado. Na prática, ZRAM se comporta como um disco montado em RAM, com compactação e descompactação de dados on-the-fly, permitindo, portanto maior velocidade de escrita e leitura (em relação a uma memória de massa, como micro-SD card, por exemplo) e também maior armazenamento de dados em RAM.

O uso da ZRAM é, por definição, de propósito geral, ou seja, pode ser usado como um disco montado em RAM. Porém, a esmagadora maioria dos sistemas Linux a utilizam como memória de swap. O uso de ZRAM como memória de swap, frente ao uso de memória de massa para esse fim, apresenta grandes vantagens, tais como:

  1. Menor tempo de escrita e leitura de dados: mesmo com a compactação e descompactação de dados on-the-fly agindo em toda escrita e leitura feita na ZRAM, o tempo de escrita e leitura na ZRAM é muitas vezes inferior se comparado ao swap convencional em memória de massa. Isso leva a diminuição significativa de latência geral do sistema Linux, uma vez que o iowait (tempo no qual a CPU fica ociosa esperando por um I/O) geral tende a diminuir muito. Como resultado perceptível ao usuário, a performance do sistema linux será mais fluida.
  2. Menor chance de wear-out da memória flash: na Raspberry Pi, o swap convencional utiliza a memória flash (micro-SD card) como memória de swap. Isso leva, com o uso contínuo de swap, a maiores chances de a memória flash sofrer wear-out e, portanto, ficar inutilizável.
  3. Flexibilidade de uso: a ZRAM permite alteração de seu algoritmo de compressão durante o uso, sem requerer uma reinicialização do sistema para isso. 
  4. Aumento da capacidade real de armazenamento de swap: alguns algoritmos de compactação podem oferecer taxas de compressão de 2 a 3 vezes, isso significa que uma ZRAM pode armazenar até 3 vezes mais dados efetivamente. Isso viabiliza o uso de aplicações onde o uso de memória RAM é bem severo.

Pré-requisitos ao uso de ZRAM no Linux

A ZRAM possui alguns pré-requisitos em termos de configurações de Kernel para poder ser utilizada:

  • É necessário que o Kernel utilizado pelo Linux em questão tenha sido compilado com suporte a ZRAM, algo garantido com a definição e habilitação da configuração de Kernel chamada CONFIG_ZRAM.
  • Para um algoritmo de compactação estar presente / ser possível ser escolhido no Linux, é preciso que o Kernel tenha sido compilado com a configuração deste habilitada. Por exemplo, para permitir o uso do algoritmo LZ4, a configuração de Kernel CONFIG_ZRAM_LZ4_COMPRESS precisa estar habilitada na compilação do Kernel utilizado.

Tudo tem um custo: o que se “paga” pelo uso da ZRAM?

Como tudo na tecnologia, não há milagres: sempre há um trade off na adoção de uma estratégia para resolver um problema. Embora extremamente vantajoso, o uso de ZRAM possui um custo que deve ser levado em consideração pelos desenvolvedores de projetos com Linux embarcado: uso de CPU. Como a ZRAM utiliza de compressão e descompressão de dados para tudo que é gravado e lido da mesma, este processo demanda um uso extra de CPU se comparado a memória swap convencional (em memória de massa).

Portanto, antes de adotar ZRAM como solução definitiva para o swap em um sistema Linux (como um sistema feito com a Raspberry pi, por exemplo), é altamente recomendado se atentar aos seguintes pontos:

  1. Verificar se o impacto no processamento do sistema como um todo não seria um gargalo para a solução.
  2. Verificação da elevação da temperatura da CPU quando utilizando ZRAM, a fim de se constatar se há a necessidade de uso de um sistema mais eficiente de dissipação de calor no projeto em questão.
  3. Verificação no desempenho da solução no que diz respeito a processamento, a fim de se verificar se o uso de ZRAM não o afetou de forma significativa.

Como utilizar a ZRAM em uma Raspberry Pi?

Agora que já foi definido o que é a ZRAM, seus requisitos e quais pontos de atenção do uso da mesma, é chegada a hora de mostrar como utilizar a ZRAM na Raspberry Pi. 

Para habilitar o uso de ZRAM na Raspberry Pi, além do Kernel utilizado precisar possuir as configurações necessárias (conforme dito no tópico “Pré-requisitos ao uso de ZRAM no Linux” deste artigo), é preciso definir o uso da ZRAM como swap. Para isso, há um projeto open-source muito interessante, disponível em: https://github.com/foundObjects/zram-swap . Este projeto consiste em alguns scripts que preparam todo o terreno para o uso da ZRAM como swap na Raspberry Pi, facilitando a adoção desta.

Para utilizar este projeto para habilitar a ZRAM como swap na Raspberry Pi, faça o seguinte procedimento na Raspberry Pi em questão:

  1. Primeiramente, certifique-se de utilizar a versão mais recente do sistema operacional instalado.
  2. Atualize todos os pacotes instalados, utilizando para isso os comandos abaixo:
  1. Assegure-se de que o pacote git esteja instalado:
  1. Reinicie a Raspberry Pi para garantir que todas as atualizações realizadas entraram em vigor:
  1. Em qualquer diretório, clone o repositório do projeto com o comando abaixo:
  1. Entre no diretório do projeto e execute como super-usuário o script de instalação do projeto. Para isso, utilize os comandos abaixo:
  1. Processo concluído. Agora sua Raspberry Pi possui como memória de swap a ZRAM.

Configurações de uso da ZRAM


Por padrão, o projeto configura a ZRAM para utilizar 50% da memória RAM da Raspberry Pi e, ainda, configura como algoritmo de compressão o LZ4 (algoritmo de compactação mais utilizado e recomendado para sistemas mais críticos em memória RAM).

Para mudar estas configurações conforme o desejado, utilize o arquivo de configuração do projeto localizado em /etc/default/zram-swap

Verificando / validando o funcionamento

Para verificar / validar que a ZRAM está sendo utilizada como memória de swap, execute o comando abaixo:

Este comando trará todas informações dos arquivos de swap utilizados (tipo, prioridade e tamanho).

Conclusão

Este artigo mostrou que a ZRAM é um dispositivo de bloco / disco montado em memória RAM, o qual conta com compactação e descompactação para todos dados lidos e escritos neste dispositivo de bloco. Dadas as vantagens de se ter algo do tipo em memória RAM, a ZRAM é muito utilizada em sistemas Linux (incluindo nas Raspberries Pi) como memória de swap, viabilizando aplicações onde o uso de memória RAM é severo sem causar quaisquer danos à memória flash (wear-out de flash).

Utilizando a ZRAM, desde que atenda às necessidades de sua solução com Linux embarcado, garante uma latência de uso significativamente menor em aplicações de uso severo de RAM, aumentando assim a aplicabilidade de uma Raspberry Pi em soluções mais pesadas.

Referências

Saiba mais

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Home » Software » Usando ZRAM com a Raspberry Pi
Comentários:
Notificações
Notificar
guest
5 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Thiago Chaves
Thiago Chaves
04/05/2022 18:52

Muito interessante. Sou novo na área sistemas embarcadas e o artigo me fez tomar nota de vários termos que eu não conhecia. Bom trabalho!

Geraldo Gitirana
Geraldo Cartolano
13/04/2022 12:26

Alguém já testou pra comprovar os ganhos em performance?

Talvez você goste:
Nenhum resultado encontrado.