Ssd
fstrim 在 xfs 上非常慢,並且總是返回與 ext4 不同的相同值
我只是注意到如果我
time fstrim /<some ext4>; time fstrim /<some ext4>
打第二個電話通常會列印0 bytes trimmed
並立即完成。但是,如果我在 XFS 上做同樣的事情,其中 2 個呼叫將花費完全相同的時間並列印完全相同數量的修剪字節。這讓我想知道修剪真的有效嗎?如果是,是否可以打開任何標誌以使 XFS 不重新修剪已經修剪的塊?我使用所有預設設置來掛載 xfs。
Ext4 記憶體已在記憶體中修剪的範圍,並且在重新啟動之前不會重新修剪它們。
XFS 不會記憶體此資訊,並在每次 fstrim 啟動時重新調整所有內容。
資源:
Fstrim 在文件系統上呼叫 FITRIM IOCTL,最終呼叫 FS 特定的內部函式:https ://github.com/util-linux/util-linux/blob/master/sys-utils/fstrim.c#L120
我省略了幾個中間函式……
如果範圍已被丟棄,Ext4 驅動程序會檢查記憶體結構。如果沒有,它會嘗試丟棄它並將其設置為已丟棄,防止進一步丟棄,直到系統重新啟動: https ://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree /fs/ext4/mballoc.c?h=v6.0#n6442
XFS 內部函式沒有這樣的檢查,只是丟棄所有內容: https ://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/xfs/xfs_discard.c?h= v6.0#n151