【发布时间】:2019-02-10 15:06:17
【问题描述】:
我正在尝试比较不同的文件系统,大多数都具有缓存/分层存储功能,但到目前为止,它似乎并没有按应有的方式工作。 (顺便说一句,我知道这可能是错误的站点,但是当我搜索 zfs 时,大多数 SE 结果都在 stackoverflow 上,所以在这里问似乎很好)
在测试 zfs 时,我创建了一个池,其中一个主驱动器/分区和另一个驱动器 (ssd) 添加为缓存。主驱动器/分区约为 200 GB,ssd 为 120 GB。这在 zpool 中正确显示。
然后我使用 iozone 或 iozone 单独运行 phoronix 测试套件。经过一些最初的不熟悉后,我选择了phoronix-test-suite run-default pts/iozone,而不是只在一个硬盘、一个ssd和一个以ssd作为缓存的硬盘分区上运行。并在两台具有 ssd 的笔记本电脑上进行比较。在使用 zfs + cache 的测试中,与仅使用硬盘几乎没有区别。这真的很慢。我确保将工作目录设置为 zpool 并验证临时文件是在那里创建的,并且还检查了 zpool iostat 以确保池正在工作。
现在,虽然我可能怀疑结果较低,但我希望速度至少应该慢一些,尤其是像这样的“简单”测试,它只运行 3 次从 8 GB 文件中读取 1 MB 记录,然后从 8 GB 文件中写入 3 次 1 MB 记录。
现在,可能是因为 zfs 缓存和类似缓存的工作方式——它们无法通过这样一个简单的测试来捕获——但是,哪一个测试可以很好地捕获缓存的好处?但是,由于测试文件很容易放在缓存ssd上,为什么不先写在那里,然后在后台传回硬盘呢?
zpool 如下所示:
pool: ztest
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
ztest ONLINE 0 0 0
sdb7 ONLINE 0 0 0
cache
sdc ONLINE 0 0 0
errors: No known data errors
【问题讨论】:
-
您可以添加
zpool status的输出以便我们查看设置吗?听起来您要么没有正确配置池,要么测试没有测试您的预期,最好确保它不是前者。 -
我添加了池描述。这是根据我找到的文档使用
zpool create ztest /dev/sdb7 cache /dev/sdc创建的。在阅读了更多内容之后,似乎缓存可能只是读取缓存(尽管这仍然不能解释糟糕的读取性能),并且对于写入缓存,还需要一个 zil。但在一些相同的页面上,也有人说 ZIL 只对大存储量或巨大的服务器/特定工作负载有意义。这似乎很奇怪,因为在其他情况下,人们将 zfs 描述为几乎可以用于所有事情。