Linux

zram 文件系統在設備級別報告的使用情況與文件系統報告的不同

  • March 5, 2018

我們在我們的主機上定義了一個 80GB 的 zram 設備,其中有一個 170GB 的 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

現在,文件系統報告使用了大約 110GB,但 zramfs 設備報告了 165GB。同時,zramfs 記憶體耗盡,文件系統變為只讀。

zram 數據證實我們在 orig_data_size 和 compr_data_size 之間獲得了 2.2:1 的壓縮比;但是,為什麼文件系統顯示的可用空間比 zram 設備多得多? 即使這是已經分配給文件系統重用的空間,難道不應該重用它而不是分配新空間嗎?

數據由大量不定期添加和刪除的小文件組成。

造成這種情況的原因是,當從 zram0 設備中的 ext4 文件系統中刪除文件時,記憶體沒有釋放回系統。這意味著,儘管空間可供文件系統使用(的輸出df),但仍然分配了記憶體(中的統計資訊/sys/block/zram0)。結果,記憶體使用率達到了分配的 100%,儘管文件系統仍然發現自己由於刪除而半滿。

這確實意味著您仍然可以填充文件系統,並且新文件不會使用太多的新記憶體空間;但是它確實會對壓縮比產生負面影響。

discard解決方案是使用和noatime選項掛載文件系統。這些discard版本將文件空間釋放回記憶體設備,因此兩者的使用再次匹配。

引用自:https://serverfault.com/questions/898135