我想检测块设备的静默损坏,类似于 BTRFS 对文件的检测方式。我什至想在 BTRFS 之下执行此操作(并禁用 BTRFS 的本机校验和),以便我可以调整比 BTRFS 允许的更多参数。 DM-Integrity 似乎是最好的选择,原则上它必须做与 BTRFS 相同的事情。
问题是它慢得令人难以置信、无法使用。 BTRFS 上的顺序写入速度为 170+ MiB/s(禁用压缩),而 DM-Integrity 上的顺序写入速度为 8-12 MiB/s。我尝试将 DM-Integrity 参数与 BTRFS(扇区大小、哈希算法等)进行匹配,并尝试了许多其他参数的组合(数据交错、位图、本机与通用哈希驱动程序等)。
写入是异步的,但速度是根据提交写入所需的时间计算的(所以我不认为差异是由于内存缓存造成的)。一切都在 writethrough Bcache 之上,它应该重新排序写入(所以我不认为它可能是 BTRFS 重新排序写入)。我想不出任何其他原因可以解释这种巨大的性能差异。
我使用 Debian 11 和自编译的 6.0.12 Linux 内核,并使用 sha256 作为我的哈希算法。我的块层是(dm-integrity 或 btrfs)/lvm/dm-crypt/bcache/dm-raid。
我的测试有缺陷吗?或者对这种巨大的性能差异有其他解释吗?我可以使用 DM-Integrity 更改一些参数来实现与 BTRFS 相当的性能吗?
答案1
我在之前的测试中发现了至少 2 个缺陷,但我还不知道它们是否能完全解释这种差异。日志/位图模式和完整性算法都不存储在 DM-Integrity 超级块中。虽然我在格式化时提供了这些选项,但在激活时没有提供这些选项,因此它们会恢复为默认值(日志模式和 sha256)。
日志模式对性能有很大影响,这可能解释了大部分差异。我仍然需要重新创建所有测试才能了解真正的影响。