Economizando memória com o zRAM
- por Sergio Prado
O zRAM (antes conhecido como compcache) é um recurso do kernel Linux para transformar uma região de memória RAM em um dispositivo de bloco com suporte à compressão de dados. Com este recurso, é possível criar uma espécie de disco virtual, onde os dados são armazenados em RAM de forma comprimida.
Alguns casos de uso interessantes para esta funcionalidade:
- Ponto de montagem para o armazenamento de informações temporárias, em substituição ao tmpfs, porém economizando RAM, já que as informações são armazenadas de forma comprimida.
- Região de SWAP, economizando RAM devido à compressão e melhorando a performance, já que não serão necessários ciclos de I/O para fazer paginação de memória em disco.
Este recurso ficou bastante tempo na área de staging do kernel, e foi promovido para o diretório drivers/block/zram na versão 3.14. Sua documentação está disponível no código-fonte do kernel em Documentation/blockdev/zram.txt. Para utilizá-lo, basta compilar o kernel com a opção CONFIG_ZRAM habilitada.
O zRAM disponibiliza um ou mais arquivos de dispositivo de bloco em /dev/zramX (X = 0, 1, 2, …). A quantidade de dispositivos criada pode ser configurada através do parâmetro num_devices (por padrão, é criado apenas um dispositivo do tipo zRAM).
$ ls -l /dev/zram* brw-rw---- 1 root disk 251, 0 Mar 25 21:53 /dev/zram0 |
Cada dispositivo terá uma entrada no sysfs para possibilitar a configuração e exibição de estatísticas;
$ ls /sys/block/zram0 alignment_offset disksize mem_used_total queue slaves bdi ext_range notify_free range stat capability holders num_reads removable subsystem compr_data_size inflight num_writes reset trace dev initstate orig_data_size ro uevent discard_alignment invalid_io power size zero_pages |
O primeiro passo para utilizar esta funcionalidade é configurar o tamanho do disco. Por exemplo, para configurar um disco virtual de 512MB:
$ echo 512M > /sys/block/zram0/disksize |
Para utilizar o zRAM como ponto de montagem para dados temporários (com suporte à compressão), é só formatar a partição e criar o ponto de montagem. Após executar os comandos abaixo, tudo o que for escrito no diretório /tmp será escrito de forma comprimida em RAM.
$ mkfs.ext4 /dev/zram0 $ mount /dev/zram0 /tmp |
Uma outra funcionalidade interessante do zRAM é configurá-lo como um mecanismo de SWAP. Desta forma, é possível fazer paginação de memória em RAM, porém comprimida, economizando memória e evitando ciclos de I/O em disco.
$ mkswap /dev/zram0 $ swapon /dev/zram0 |
Na prática, o recurso de zRAM do kernel funciona como um mecanismo simples de compressão de dados em RAM para melhorar a eficiência e a responsividade de sistemas com recursos limitados de memória.
Atualmente, ele tem sido usado em netbooks como o Chromebook (Chrome OS) e smartphones Android, e pode ser uma boa solução para dispositivos embarcados com pouca memória RAM.
Um abraço,
Sergio Prado