zfs:刷新快取而不匯出

zfs:刷新快取而不匯出

為了進行測試,我需要 zfs 的快取處於冷狀態。

我可以透過刪除快取磁碟、匯出和匯入池來刷新池中的快取。這給了我想要的效果。但真的不想導出池子。

有沒有更簡單的方法來達到相同的效果?

我正在尋找的是相當於:

echo 3 > /proc/sys/vm/drop_caches

這滿足了我對 ext4 的需求。

背景

我可以用不同的方式運行我的演算法。我不關心最好情況下的性能。我關心最壞情況下的性能。最糟的情況是冷數據(很久以前接觸過的數據,不再存在於 ARC/L2ARC 中)。

為了選擇運行演算法的最佳方式,我需要能夠在相同的測試集上運行。而且這個測試集必須是冷的。這完全違背了 ZFS 的快取策略:如果我一次又一次地在同一個測試集上運行,它會將資料放入 ARC 中 - 這在正常情況下是完全有意義的,但在這裡不是。

我可以在我的開發計算機上匯出/匯入,但無法在生產中執行此操作。但是,刷新快取將要生產中可以接受。

我更喜歡 ARC 仍然有效,因此冷資料在讀取後會被快取(再次類似於 ext4),但我可以在測試期間完全停用 ARC。

答案1

echo 3 > /proc/sys/vm/drop_caches 用過的清除 ZFS 緩存,但最近的一些提交將其更改為僅部分清除它。

若要恢復舊的行為,必須將zfs_arc_shrinker_limit模組參數設為0(請參閱這裡)。

因此,要刪除 ARC 而不匯出池:

echo 0 > /sys/module/zfs/parameters/zfs_arc_shrinker_limit
echo 3 > /proc/sys/vm/drop_caches

上面的會掉幾乎所有 ZFS ARC,只留下少量與基本池元資料相關的 MB。

相關內容