Temos um dispositivo zram de 80GB definido em nosso host e, dentro dele, um sistema de arquivos ext4 de 170GB:
echo 170G > /sys/block/zram0/disksize
echo 80G > /sys/block/zram0/mem_limit
/usr/sbin/mkfs.ext4 -q -m 0 /dev/zram0
/usr/bin/mount /dev/zram0 /var/zram
Este sistema de arquivos é usado pelo nosso aplicativo para acessar rapidamente grandes quantidades de dados efêmeros.
O tamanho do sistema de arquivos exibido em df
corresponde ao tamanho do zram, conforme relatado em /sys/block/zram0/disksize
Copiando dados de teste em um sistema de arquivos vazio, verificamos que uma taxa de compactação de 2,2: 1 é alcançada e, assim, o sistema de arquivos é preenchido antes de atingirmos o limite de memória do zramfs. O valor /sys/block/zram0/orig_data_size
corresponde ao uso relatado pelo sistema de arquivos:
# expr 'cat orig_data_size' / 1024 ; df -k /dev/zram0
112779188
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/zram0 175329308 112956600 62356324 65% /var/zram
No entanto, quando o aplicativo é executado com dados ativos por um período mais longo, descobrimos que isso não corresponde mais.
# expr 'cat orig_data_size' / 1024 ; df -k /dev/zram0
173130200
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/zram0 175329308 112999496 62313428 65% /var/zram
Agora, o sistema de arquivos informa um uso de aproximadamente 110 GB, mas o dispositivo zramfs informa 165 GB. Ao mesmo tempo, a memória do zramfs está esgotada e o sistema de arquivos torna-se somente leitura.
Os números do zram confirmam que estamos obtendo uma taxa de compactação de 2,2: 1 entre orig_data_size e compr_data_size; no entanto, por que o sistema de arquivos mostra muito mais espaço livre que o dispositivo zram? Mesmo se esse espaço já estiver alocado para reutilização pelo sistema de arquivos, ele não deve ser reutilizado em vez de alocar novo espaço?
Os dados consistem em um grande número de pequenos arquivos que são adicionados e removidos em intervalos irregulares.