zramファイルシステムは、ファイルシステムによって報告されるものとは異なるデバイスレベルの使用状況を報告します。

zramファイルシステムは、ファイルシステムによって報告されるものとは異なるデバイスレベルの使用状況を報告します。

ホストには 80 GB の zram デバイスが定義されており、その中に 170 GB の ext4 ファイルシステムがあります。

  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

このファイルシステムは、大量の一時データに迅速にアクセスするためにアプリケーションによって使用されます。

に表示されるファイルシステムのサイズは、df報告されたZRAMのサイズと一致します。/sys/block/zram0/disksize

テスト データを空のファイルシステムにコピーすると、2.2 : 1 の圧縮率が達成され、zramfs のメモリ制限に達する前にファイルシステムがいっぱいになることを確認しました。値/sys/block/zram0/orig_data_sizeは、ファイルシステムによって報告された使用量と一致します。

# 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

ただし、アプリケーションが長期間にわたってライブ データを使用して実行されると、一致しなくなることがわかります。

# 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

現在、ファイルシステムは約 110 GB の使用量を報告していますが、zramfs デバイスは 165 GB を報告しています。同時に、zramfs メモリが使い果たされ、ファイルシステムは読み取り専用になります。

zramの数値は、orig_data_sizeとcompr_data_sizeの圧縮率が2.2:1であることを示しています。しかし、ファイルシステムが ZRAM デバイスよりもはるかに多くの空き領域を表示するのはなぜですか? たとえこれがファイルシステムによって再利用のためにすでに割り当てられているスペースであったとしても、新しいスペースを割り当てるのではなく、再利用するべきではないでしょうか?

データは、不規則な間隔で追加および削除される多数の小さなファイルで構成されています。

答え1

この原因は、zram0 デバイスにある ext4 ファイルシステムからファイルが削除されたときに、メモリがシステムに解放されないことです。つまり、ファイルシステムが使用できるスペースがあるにもかかわらず ( の出力df)、メモリがまだ割り当てられていることになります ( の統計/sys/block/zram0)。その結果、メモリ使用量は割り当ての 100% に達しますが、ファイルシステムは削除によってまだ半分いっぱいになっています。

これは、ファイルシステムをまだ満たすことができ、新しいファイルはそれほど多くの新しいメモリ領域を使用しないことを意味します。ただし、圧縮率には悪影響を及ぼします。

解決策は、およびdiscardオプションを使用してファイルシステムをマウントすることですnoatimediscardリリースにより、ファイルスペースがメモリ デバイスに戻され、その結果、2 つの使用量が再び一致します。

関連情報