是否可以暂时禁用 ZFS ARC 缓存?
我正在尝试使用 ZFS SSD 阵列进行基准测试fio
,并希望避免 ZFS 缓存(通过 ARC)扭曲结果。使用比系统内存大得多的文件大小进行基准测试的替代方案(即在具有 1x 32GB 系统 RAM 的系统上使用 64GB fio 文件)将大大增加基准测试持续时间。
在 Linux 0.8.1 上使用 Ubuntu 19.10、3.1.2fio
和 ZFS
答案1
在 ZFS 中,这不仅仅是文件系统,基准测试确实很难,并且应该始终模拟未来的工作负载。因此,请执行您期望的写入,否则您创建系统是为了其他目的,而不是为了使用。
由于 RAM 中的 ARC 和 ZIL 是 ZFS 高度依赖的东西,因此永远不应将它们从负载模拟中移除。打个比方,我们测试了一辆新的法拉利,但安装了割草机引擎以降低长时间测试的燃料成本。
如果您想测试是否使用 L2ARC,只需移除 L2ARC 磁盘进行测试即可。Intent Log 设备也一样。这样做只是为了看看您是否需要一个。
收集更多信息的文章;对 ZFS 进行基准测试
答案2
我知道这是一个很晚的答案,但由于这个问题从未得到完全回答,我只是想指出“消除” ARC 进行测试的最简单方法是执行以下操作:
zfs set primarycache=none pool/dataset
zfs set secondarycache=none pool/dataset
我的建议是针对为此目的创建的测试数据集执行此操作,例如 -pool/test
而不是禁用现有数据集(或根数据集),但取决于您打算进行测试的实际程度,这可能不是一个选择。
如果将这些设置为无,请务必检查现有值是什么,并查找可能具有本地覆盖的任何数据集。您可以使用 快速获取这些信息zfs get -rt filesystem primarycache,secondarycache pool
。默认值为all
(数据和元数据)。
正如 Pasi 所说,这种基准测试的结果可能有限,但如果你的目标只是测试一组驱动器上的 ZFS 读/写速度,那么这可能就足够了。