O sistema de arquivos zram relata uso diferente no nível do dispositivo daquele relatado pelo sistema de arquivos

O sistema de arquivos zram relata uso diferente no nível do dispositivo daquele relatado pelo sistema de arquivos

Temos um dispositivo zram de 80 GB definido em nosso host e dentro dele um sistema de arquivos ext4 de 170 GB:

  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 por nosso aplicativo para acessar rapidamente grandes quantidades de dados efêmeros.

O tamanho do sistema de arquivos exibido dfcorresponde ao tamanho do zram conforme relatado em/sys/block/zram0/disksize

Copiando os dados de teste para um sistema de arquivos vazio, verificamos que uma taxa de compactação de 2,2: 1 foi alcançada e, portanto, o sistema de arquivos é preenchido antes de atingirmos o limite de memória do zramfs. O /sys/block/zram0/orig_data_sizevalor 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 está sendo 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 relata um uso de aproximadamente 110 GB, mas o dispositivo zramfs relata 165 GB. Ao mesmo tempo, a memória do zramfs se esgota 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 que este seja um espaço já alocado para reutilização pelo sistema de arquivos, não deveria 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.

Responder1

A causa disso é que quando os arquivos são excluídos do sistema de arquivos ext4 que reside no dispositivo zram0, a memória não é liberada de volta para o sistema. Isso significa que, embora o espaço esteja disponível para uso do sistema de arquivos (a saída de df), ainda há memória alocada (as estatísticas em /sys/block/zram0). Como resultado, o uso de memória chega a 100% da alocação, embora o sistema de arquivos ainda esteja meio cheio devido a exclusões.

Isso significa que você ainda pode preencher o sistema de arquivos e novos arquivos não usarão tanto espaço de memória novo; no entanto, afeta negativamente a taxa de compressão.

A solução é montar o sistema de arquivos com as opções discarde noatime. As discardliberações liberaram espaço no arquivo de volta para o dispositivo de memória e, como resultado, o uso nos dois corresponde novamente.

informação relacionada