为了进行测试,我需要zfs的缓存是冷的。
我可以通过删除缓存磁盘、导出和导入池来从池中清除缓存。这给了我想要的效果。但我真的不想出口这个池。
是否有不太激烈的方法来达到同样的效果?
我要找的是相当于:
echo 3 > /proc/sys/vm/drop_caches
这就是我对ext4想要的。
我可以用不同的方式运行我的算法。我不在乎最好的表现。我关心的是最坏的表现。最坏的情况是冷数据(数据很久以前就接触到了,已经不在ARC/L2ARC中了)。
要选择运行算法的最佳方式,我需要能够在相同的测试集上运行。这个测试装置肯定是冷的。这完全违背了ZFS的缓存策略:如果我一次又一次地在同一个测试集上运行,它会将数据放入ARC --这在正常情况下是非常有意义的,但这里没有。
我可以在我的开发人员机器上进行导出/导入,但是我不能在生产中这样做。然而,在生产中,刷新缓存是可以接受的。
我更喜欢ARC仍然工作,所以冷数据被读取后被缓存(同样类似于ext4),但是我可以在测试期间与ARC完全禁用。
发布于 2022-12-29 17:02:45
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。
https://serverfault.com/questions/1098594
复制相似问题