zram reporta uso diferente no nível do dispositivo para aquele relatado pelo sistema de arquivos

1

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.

    
por Steve Shipway 21.02.2018 / 04:07

1 resposta

0

A causa disso é que quando os arquivos são excluídos do sistema de arquivos ext4 que está no dispositivo zram0, a memória não é liberada de volta ao sistema. Isso significa que, embora o espaço esteja disponível para o sistema de arquivos usar (a saída de df ), ainda assim é alocada memória (as estatísticas em /sys/block/zram0 ). Como resultado, o uso de memória tem até 100% de alocação, embora o sistema de arquivos ainda se encontre 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, isso afeta negativamente a taxa de compressão.

A solução é montar o sistema de arquivos com as opções discard e noatime . O discard libera o espaço de arquivos liberado de volta para o dispositivo de memória e, como resultado, o uso nas duas correspondências novamente.

    
por 05.03.2018 / 02:26