O ZRAM é simplesmente um driver compactado de ramdisk. Ao ativá-lo, você obtém dispositivos de bloco, /dev/zram[0-9]+
, e todos os dados armazenados nesses dispositivos de bloco serão compactados e armazenados na memória.
Como é apenas um dispositivo de bloco, você pode usá-lo para armazenar qualquer coisa, como um sistema de arquivos ou espaço de troca - não é particularmente útil armazenar partições, pois, quando particionado, ele não mostrará novos dispositivos para cada partição o seu /dev/hd[a-z]
ou /dev/sd[a-z]
etc será.
Portanto, para usá-lo para troca, você deve primeiro formatá-lo com mkswap
e, em seguida, fazer com que o Linux troque com swapon
. zram-config
é apenas o pacote oficial do Ubuntu que faz isso automaticamente para você na inicialização (já que é um ramdisk, todos os dados armazenados nele desaparecem quando você reinicia). Existem outros scripts que farão o mesmo. Eu particularmente gosto de systemd-swap
, ⁽¹⁾ que eu uso tanto na minha caixa ArchLinux quanto no meu Raspberry Pi (que roda uma distro Debian), e que lida com troca automática em swaps baseados em disco, ZRAM e Zswap. Tenho certeza de que também funciona com o Ubuntu.
Como curiosidade, é assim que o zram se comporta em relação ao uso da memória: enquanto a quantidade máxima de dados que você pode armazenar neste dispositivo é fixa, a quantidade de memória usada varia de acordo com a compactabilidade dos dados. Por exemplo:
% sudo swapoff /dev/zram0
% sudo dd if=/dev/zero of=/dev/zram0 bs=1M
dd: writing to '/dev/zram0': No space left on device
243+0 records in
242+0 records out
254492672 bytes (254 MB, 243 MiB) copied, 6.10473 s, 41.7 MB/s
% free -h
total used free shared buff/cache available
Mem: 970M 47M 793M 25M 128M 848M
Swap: 0B 0B 0B
% sudo dd if=/dev/urandom of=/dev/zram0 bs=1M
dd: error writing '/dev/zram0': No space left on device
243+0 records in
242+0 records out
254492672 bytes (254 MB, 243 MiB) copied, 13.2982 s, 19.1 MB/s
% free -h
total used free shared buff/cache available
Mem: 970M 292M 549M 25M 128M 603M
Swap: 0B 0B 0B
Assim, enquanto meu dispositivo zram tem 254 MB de espaço, quando preenchido com zeros, ele quase não usa memória, enquanto que, quando preenchido com dados aleatórios altamente incompressíveis, ele usa 254M de memória.
⁽¹⁾ link