OpenZFS 近日合并了一个名为"uncached prefetch"的 PR,据称显著优化了性能。
提交 PR 的开发者介绍道,这项变化为 ARC(自适应替换缓存)引入了"uncacheable buffer"——它被传递给 arc_read() 和 arc_write(),并存储在 ARC header 中。当 remove_reference() 删除 ARC header 上的最后一个引用时,它可以立即对其进行销毁,或者如果它被标记为预取,则将其置于新的 arc_uncached 状态。该状态每秒被扫描一次,寻找不需要读取的 stale buffer(在这种情况下,它们会立即被驱逐)。
通过启用预取 (prefetch) 和避免内存复制的组合,这项变化提升了从宽 NVMe 池中进行连续单线程读取的速度(从 2049 到 3932 MiB/s)。在写的过程中,分析工具显示在 3653 MiB/s 的相同吞吐量下,未暂停 (unhalted) 的 CPU 周期减少了 22%。
另一位开发者分享了他以该项变化为特征的基准测试结果,由此可见性能优化明显:
更多细节查看 PR 描述。