Linux内核在情人节得到了一枚新的戒指……io_uring。io_uring的目的是在Linux上提供更快、更高效的I/O操作,并且应该在下一个内核周期中提供。

io_uring的Linux块维护人员和开发人员,Facebook的Jens Axboe在Git上将新接口排队过夜进入linux-block/for-next。io_uring接口提供在应用程序和内核之间共享的提交和完成队列环,以避免多余的副本。新接口只有两个新的系统调用(io_uring_setup和io_uring_enter)来处理I/O, Axboe之前曾在“aioring”这个名称下使用此代码。

Io_uring比Linux的AIO异步I/O代码要高效得多,它支持高效的缓冲异步I/O,甚至可以在不执行轮询I/O系统调用的情况下执行I/O,以及其他效率增强。接口补丁继续解释:

  • 通过此设置,可以通过单个系统调用执行异步IO。未来的发展将使用这个界面启用轮询IO,并进行轮询提交。后者将使应用程序能够在不进行任何系统调用的情况下执行IO。
  • 对于IRQ驱动的IO,如果应用程序想要等待它们发生,则只需要进入内核以进行完成。
  • 每个io_uring都有一个工作队列支持,以支持缓冲的异步IO。如果命令需要在设备端等待IO,我们将只向异步上下文发送。可以在页面缓存中直接访问的任何数据都是内联完成的。这避免了常见线程池的缓慢问题,因为缓存数据的访问速度与同步接口一样快。
  • io_uring的设计理念似乎是为Linux提供快速高效的I/O。

围绕新接口构建的用户空间库存在liburing。Axboe的FIO基准也已经进行了调整,以支持io_uring。这应该是Linux 5.1中另一个值得兴奋的特性。

原文来自:https://www.linuxidc.com/Linux/2019-02/156912.htm

本文地址:https://www.linuxprobe.com/linux-kernel-fast.html编辑:roc_guo,审核员:逄增宝