ホストには 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
オプションを使用してファイルシステムをマウントすることですnoatime
。discard
リリースにより、ファイルスペースがメモリ デバイスに戻され、その結果、2 つの使用量が再び一致します。