Ole*_*nge 5 zfs-l2arc zfsonlinux
为了进行测试,我需要 zfs 的缓存处于冷状态。
我可以通过删除缓存磁盘、导出和导入池来刷新池中的缓存。这给出了我想要的效果。但真的不想导出池。
有没有更简单的方法来达到同样的效果?
我正在寻找的是相当于:
echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
这满足了我对 ext4 的需求。
背景
我可以用不同的方式运行我的算法。我不关心最好情况下的性能。我确实关心最坏情况下的性能。最坏的情况是冷数据(很久以前接触过的数据,不再存在于 ARC/L2ARC 中)。
为了选择运行算法的最佳方式,我需要能够在相同的测试集上运行。而且这个测试集必须是冷的。这完全违背了 ZFS 的缓存策略:如果我一次又一次地在同一个测试集上运行,它会将数据放入 ARC 中 - 这在正常情况下是完全有意义的,但在这里不是。
我可以在我的开发计算机上导出/导入,但无法在生产中执行此操作。然而,刷新缓存在生产中是可以接受的。
我更喜欢 ARC 仍然有效,因此冷数据在读取后会被缓存(再次类似于 ext4),但我可以在测试期间完全禁用 ARC。
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
Run Code Online (Sandbox Code Playgroud)
上述操作将删除几乎所有 ZFS ARC,仅留下与基本池元数据相关的少量 MB。
归档时间: |
|
查看次数: |
3699 次 |
最近记录: |