Io_uring创建者和Linux块子系统维护人员Jens Axboe花了大约5分钟开发两个补丁,以实现块层中问题端时间查询的缓存,I/O性能可以提高6%或更多。
Axboe共享 关于他最新有趣的Linux I/O性能优化,“一件我多年来一直在想的事情,终于在今天做到了。这有点令人难过,因为它实际上只需要5分钟的工作,产生了超过6%的改进。在一个完整的发行版风格的内核配置上可能会更大。“
Axboe解释说,由于默认情况下查询时间的性能开销,他通常在测试时禁用iostats。但是,当为问题端时间查询提供一些基本缓存时,他发现IOPS提高了大约6%,而对于更臃肿的Linux发行版供应商内核,收益可能更显著。
他详细介绍了 RFC补丁系列:
查询当前时间是我们针对每个IO在数据块层执行的最昂贵的操作,根据内核配置设置,我们可能会针对每个IO执行多次查询。
调用方实际上都不需要NSec粒度。通过在插件中缓存当前时间来利用这一点,这里的假设是,任何时间检查都将在时间上足够接近,因此精度的轻微损失并不重要。
如果块插头被刷新,例如在抢占或调度时,我们将使缓存的时钟无效。
..。
这在性能上提高了6%以上。看一看Perf diff,我们可以看到时间开销大大减少:10.55%-9.88%[kernel.vmlinux][k]Read_TSC
1.31% -1.22% [kernel.vmlinux] [k] ktime_get请注意,由于这依赖于blk_plug进行缓存,因此它仅适用于问题端。但这是大多数时候电话发生的地方。同样值得注意的是,上面的测试没有在块层侧启用任何成本较高的CPU项,如wbt,cgroups,iocost等,这些都将增加额外的查询时间。IOW,结果可能会看起来比那些启用更好,因为发行版会做。”
A nice win and hopefully this continues to pan out and prove useful for upstreaming with the Linux v6.9 cycle in a few months,