Android Embarcado e zRAM: uso e considerações

android embarcado 1

Introdução

O Android embarcado possui similaridades com o Linux, sobretudo na divisão entre bootloader, Kernel e filesystem e pelo fato do Kernel Android ser, basicamente, o Kernel Linux modificado. Por esta razão, boa parte do gerenciamento de memória foi herdado do Kernel Linux, incluindo o zRAM.

O Instituto de Pesquisas ELDORADO possui sólida experiência em Android embarcado, abrangendo toda a cadeia de camadas presentes no Android, desde desenvolvimento em camada nativa até desenvolvimentos em framework e aplicações alto nível. Sendo assim, como forma de contribuição de conhecimento para com a comunidade de desenvolvimento brasileira, nós disponibilizamos este artigo, onde será explicado o que é o zRAM, para que ele é comumente utilizado no Android embarcado, quando entra em ação e, ainda, quais são as boas práticas de uso desse recurso.

Caso se interesse em trabalhar na área no Eldorado, clique aqui e confira as vagas

O que é zRAM?

O zRAM é, na prática, um dispositivo em bloco (como um disco) compactado e montado/ criado em memória RAM. Ou seja, o zRAM é uma porção de memória RAM que se comporta como um disco, tendo como principal característica (e benefício) o fato de que os dados são armazenados de forma compactada, permitindo uma maior eficiência e economia no uso de memória RAM.

Para a compactação de dados no zRAM, diversos algoritmos de compressão sem perda de dados podem ser utilizados, incluindo (e não se limitando a) os seguintes:

  • lzo (Lempel–Ziv–Oberhumer)
  • lz4
  • lz1

Mais informações sobre isso e sobre todos os aspectos técnicos do zRAM podem ser consultados na documentação oficial do Kernel para zRAM, acessível neste endereço: link.

Usos do zRAM no Android embarcado

No Linux, o zRAM pode ser utilizado basicamente para duas finalidades:

  1. tmpfs: o zRAM é um dispositivo de bloco muito adequado para se montar o tmpfs. Isso é vantajoso, uma vez que, além de permitir o armazenamento temporário de arquivos (em memória volátil / RAM) e poupar I/O em disco, as informações são guardadas de forma compactada, fazendo-se atingir uma boa eficiência e economia de memória RAM no dispositivo em questão.
  2. Swap: o zRAM pode ser utilizado também como memória para swap, apresentando desempenho superior, se comparado ao método clássico (swap utilizando o disco/ memória não-volátil), devido à velocidade de escrita e leitura em memória RAM, mesmo com a compressão, além de ser significativamente superior à velocidade de escrita e leitura em disco/memória não volátil.

É possível dizer que os dispositivos com Android embarcado utilizam, na sua esmagadora maioria, memória Flash como memória de armazenamento não volátil. Neste caso, a memória não volátil se apresenta normalmente como um SD card ou um eMMC. Isso significa dizer que swap em disco (em memória não volátil) não é uma opção viável neste cenário, pois isso faria com que o número de ciclos de escrita máximo permitido de uma memória Flash fosse esgotado muito rapidamente, o que levaria à memória Flash do dispositivo a ter um fim de vida útil muito precoce.

Portanto, no Android embarcado, o zRAM é muito utilizado como memória de swap. Pelo fato da velocidade de escrita e leitura em memória RAM ser alta, a performance geral do dispositivo, quando o swap está em uso, tende a ser superior (se comparado ao swap utilizando memória não volátil), pois neste cenário o tempo de espera em I/O da memória de swap seria muito menor.

Como configurar o zRAM no Android embarcado?

Primeiramente, o suporte ao zRAM precisa ser habilitado no Kernel. Para isto, o Kernel Android deve ser compilado com a configuração CONFIG_ZRAM habilitada.

Uma vez habilitado o uso de zRAM no Kernel, um ou mais dispositivos de bloco referentes a ele irão aparecer em /dev/block/zramX (X= 0, 1, 2, 3…), como mostrado na figura 1, onde é utilizado um dispositivo real com Android embarcado.

zram
Figura 1- dispositivo de bloco zRAM presente em um dispositivo com Android embarcado

No caso, no dispositivo com Android embarcado previamente utilizado, uma vez disponível o dispositivo de bloco referente ao zRAM, esse pode ser configurado e ajustado a partir do sysfs, mais precisamente em /sys/block/zramX (X= 0, 1, 2, 3…). No caso do dispositivo com Android embarcado aqui abordado, o acesso seria conforme mostra a figura 2.

zram
Figura 2 – arquivos para configuração do zRAM (neste caso, zram0)

Uma vez disponível o dispositivo de bloco do zRAM e suas configurações no sysfs, duas coisas devem, obrigatoriamente, ser ajustadas e/ou escolhidas: algoritmo de compressão e tamanho do zRAM.

Primeiramente, vamos abordar o algoritmo de compressão. Para saber quais estão disponíveis, utilize o comando abaixo:

Esse comando, no dispositivo com Android embarcado abordado nesse artigo, gera a saída mostrada na figura 3.

Figura 3 – algoritmos de compressão disponíveis para zRAM

Nesse caso, somente um dos algoritmos estava disponível. Para habilitar mais opções, basta acrescentar os algoritmos de compressão desejados no seguinte arquivo do Kernel Android:

kernel/[VERSAO_KERNEL]/ arch/arm64/configs/vendor/ext_config/[NOME_DO_DISPOSITIVO].config

Onde:
VERSAO_KERNEL: versão do Kernel Android almejada.
NOME_DO_DISPOSITIVO: arquivo de configurações de Kernel específico do dispositivo Android-alvo

E, por exemplo, para adicionar suporte ao algoritmo de compressão LZ4, acrescente a seguinte configuração ao arquivo:

Após acrescentar os algoritmos de compressão desejados e se refazer a compilação do Kernel Android, esse contará com suporte aos novos algoritmos de compressão adicionados.

No caso do dispositivo utilizado nesse artigo, caso existissem mais opções de algoritmos de compressão, a escolha de um deles poderia ser feita com um echo da opção escolhida para o arquivo /sys/block/zram0/comp_algorithm. Exemplo:

Agora, abordaremos o tamanho do zRAM na memória RAM. Para configurar o tamanho, basta escrevê-lo (em MB) no arquivo /sys/block/zram0/disksize. Para, por exemplo, fazer com que o zRAM tenha 500MB, escreva o seguinte:

Como fazer com que o zRAM seja utilizado como swap?

Uma vez configurados o algoritmo de compressão e o tamanho do ZRAM, é preciso fazer com que o zRAM seja, de fato, utilizado como swap. Considerando somente o zram0 (como no dispositivo abordado nesse artigo), o zRAM pode ser utilizado como memória de swap por meio dos seguintes comandos:

Ainda é possível definir prioridades de memória de swap no comando swapon através do parâmetro -p. Para mais detalhes, consulte a documentação do comando neste link: https://linux.die.net/man/8/swapon

Quando o zRAM entra em ação no Android embarcado?

Uma vez que no Android embarcado o zRAM é utilizado, praticamente na totalidade das vezes, como memória de swap, quem rege quando o zRAM entra em ação é uma configuração chamada swapiness.

O swapiness estabelece a quantidade mínima (percentual, com valores indo de 0 a 100) de memória RAM livre do dispositivo, a partir da qual o swap começará a entrar em ação, cabendo ao Kernel decidir o que e quando enviar para a memória de swap. Para ficar mais claro, imagine a seguinte situação: swapiness configurado em 65. Isso significa que, enquanto o dispositivo estiver com mais de 65% da memória RAM livre, nada de swap é utilizado. A partir do momento em que o dispositivo estiver com 65% ou menos de memória RAM livre, a memória de swap começa a ser utilizada pelo Kernel.

Portanto, o zRAM no Android tem maior utilização quanto maior for o swapiness configurado e/ou quanto maior a ocupação da memória RAM no dispositivo.

No caso do dispositivo Android abordado nesse artigo, seu swapiness é configurado em 100 (100%), conforme mostra a figura 4. Isso significa que, desde o momento em que a memória swap está disponível para uso, o Kernel já começa a fazer swap (ou seja, utiliza o zRAM). Como o zRAM possui compressão para armazenamento de dados, a memória RAM do dispositivo terá uma boa eficiência e economia de uso. Essa é uma estratégia interessante, sobretudo para dispositivos Android com pouca memória RAM instalada.

Figura 4 – swapiness no dispositivo Android embarcado abordado no artigo

Boas práticas de uso do zRAM

A seguir estão algumas boas práticas para o uso do zRAM:

  • Se o dispositivo no qual o Android embarcado executa possui pouca quantidade de memória RAM instalada, é uma boa prática se utilizar algoritmos de compressão mais eficientes. Pode ser uma boa pedida se testar qual algoritmo de compressão apresenta melhor desempenho no uso típico/específico do dispositivo, uma vez que isso pode representar, durante o uso contínuo, uma boa eficiência no uso de memória RAM
  • Utilizar um swapiness alto (>= 80) pode ser uma ótima estratégia para maior eficiência de uso de memória RAM em se tratando de dispositivos de uso intenso, como smartphones e tablets, por exemplo.
  • Apesar de ser um recurso extremamente interessante e útil, é preciso ter cuidado ao definir o tamanho do zRAM. Se muito pequeno, pode trazer baixa eficiência de memória, já que pouca coisa seria comprimida. Se muito grande, pode ser pior para a performance geral do dispositivo, já que a maioria dos dados passaria obrigatoriamente pela etapa de compressão e descompressão, gerando um aumento (mesmo que leve) em iowait da CPU (tempo em que a CPU está parada esperando um dado de um I/O de uma unidade de armazenamento, neste caso, o zRAM). Em linhas gerais, é uma boa prática se colocar metade ou menos da memória RAM como tamanho do zRAM. Testes empíricos e baseados no uso real do dispositivo são recomendados para se fazer um ajuste fino do tamanho da zRAM.

Referências

Gostaria de trabalhar em um local que respira inovação e com tecnologias de ponta?

Venha trabalhar com a gente, como o Pedro Bertoleti, que é colaborador do Instituto ELDORADO há mais de 2 anos!

O ELDORADO é desde 2007 parte integrante do ranking das melhores empresas para se trabalhar da Você S/A, além de contar com uma infraestrutura muito boa e clima descontraído de trabalho. Há vagas abertas para todas suas quatro unidades: Brasília, Campinas, Porto Alegre e Manaus. São vagas em diversas áreas.

#VemserELDORADO! 

Vagas para trabalhar com Embarcados

Acesse todas as vagas: https://jobs.kenoby.com/eldorado

Sobre o Instituto ELDORADO

Em atuação desde 1999, o ELDORADO completa 21 anos como um centro único em Pesquisa, Desenvolvimento e Inovação do Brasil. O Instituto conta com uma carteira de clientes que concentra grandes empresas nacionais e internacionais, e atua em quatro unidades (Brasília, Campinas, Porto Alegre e Manaus). 

O ELDORADO atua nas áreas de software, hardware, educação, microeletrônica, ensaios e testes. Desenvolve projetos com as principais empresas de tecnologia da informação e comunicação, em um modelo de inovação aberta, promovendo ideias, pesquisas e soluções com o objetivo de aumentar a produtividade, eficiência, time-to-market e também reduzir os riscos e custos de operação.

Cria soluções disruptivas para mercados como TI/Telecom, Energia, Agronegócio, Óleo e Gás, Saúde, Automotivo, entre outros. Como resultado, apresenta cases de sucesso e grande know-how em tecnologias emergentes como Inteligência Artificial, Visão Computacional, Computação Gráfica, Realidade Virtual e Aumentada, Assistentes Virtuais e Interface por Voz, Big Data e Analytics, Sistemas Embarcados e IoT, Blockchain, entre outras.

Mais informações: eldorado.org.br

instituto eldorado android embarcado

(*) Este post foi patrocinado pelo Instituto Eldorado

Você usa Android Embarcado em seus projetos? Deixe seu comentário abaixo.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Linux Embarcado » Android Embarcado e zRAM: uso e considerações
Comentários:
Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Tiago Ramos de Sá Ramos de Sá
Tiago Sá
06/09/2020 23:07

Excelente! Obrigado pelo conteúdo. Desejo muito trabalhar com sistemas embarcados e esse conteúdo possibilitou ter uma visão geral dos desafios da área. Valeu!

Talvez você goste:

Nenhum resultado encontrado.

Séries

Menu