皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

未缓存的缓冲 IO 性能良好,现在可以在 Btrfs / EXT4 / XFS 上运行

未缓存的缓冲 IO 性能良好,现在可以在 Btrfs / EXT4 / XFS 上运行

正如上周所介绍的,Linux I/O 专家 Jens Axboe 一直在为 Linux 重新追求未缓存的缓冲 I/O。这项“RWF_UNCACHED”工作最初始于 2019 年,而围绕它的新努力显示读/写性能提高了 ~65%,并且到目前为止已扩展到跨 EXT4、Btrfs 和 XFS 文件系统工作。

由于上周他的补丁进展良好,本周他已将该系列发送到邮件列表以供进一步审查和协作。在补丁系列中,Axboe 为那些没有关注最新进展或不熟悉之前使用 RWF_UNCACHED 标志的未缓存缓冲 IO 工作的人优雅地总结了事情:

“你可能会问,为什么要这样做?TLDR 是设备速度只会越来越快,而 reclaim 则没有。执行普通缓冲 IO 可能非常不可预测,并且在回收端会占用大量资源。这导致人们使用 O_DIRECT 作为一种解决方法,它在 IO 的大小、偏移量和长度方面有自己的一组限制。它本质上也是同步的,现在您还需要异步 IO。虽然后者不一定是一个大问题,因为我们在那里有很好的选择,但当您只想在不缓存的情况下读取或写入一些数据时,它也不应该是一个要求。

即使在桌面类型的系统上,普通的 NVMe 设备也可以在几秒钟内填满整个页面缓存。在我用于测试的大型系统上,RAM 要多得多,但设备也要多得多。从以下补丁中的一些结果中可以看出,即使有 1TB 的 RAM,您仍然可以在几秒钟内填满 RAM。因此,这个问题不仅仅是一个 “大型超大规模系统” 问题,而且是普遍的。

但真正的亮点是轻松获胜,读写性能提高 ~65%,同时 CPU 使用率更低。

“性能结果显示在补丁 8 的读取和补丁 10 的写入中,TLDR 是我看到两者的性能提高了大约 65%,并且 IO 时间完全可预测。CPU 减少也很大,在使用未缓存的 IO 时,根本没有 kswapd 活动用于回收。

在应用程序中使用它很简单 – 只需使用 pwritev2(2) 或 preadv2(2) 为读取或写入设置 RWF_UNCACHED 即可。对于io_uring,同样的事情,只需在 sqe->rw_flags 中设置 RWF_UNCACHED 即可进行缓冲读/写操作。就是这样。

希望这种未缓存的缓冲 I/O 支持能够尽快进入主线 Linux 内核。

转自 Uncached Buffered IO Is Performing Great, Working Now On Btrfs / EXT4 / XFS – Phoronix