Warm tip: This article is reproduced from serverfault.com, please click

linux-io_uring内部如何工作?

(linux - How io_uring internally works?)

发布于 2020-11-30 14:22:23

显然,Linux已经有了一个Asyn-IO(AIO)API。我相信它不是完全异步的。那么,AIO到底出了什么问题?以及io_uring如何克服它?

PS:我尝试阅读https://kernel.dk/io_uring.pdf,但是由于我与该C语言脱节,所以无法完全理解

Questioner
Govinda Sakhare
Viewed
0
Anon 2020-12-04 04:33:03

显然,Linux已经有了一个Asyn [c] -IO(AIO)API。我相信它不是完全异步的。那么,AIO到底出了什么问题?

如果你格外小心并满足所有约束,那么“旧的” Linux AIO接口将异步运行。但是,如果你“打破”任何(隐藏的)规则,提交都可能突然(无声地)以同步方式运行(即,提交不确定地阻止了你,并且阻塞了很长时间)。在Ubuntu Linux中异步IO io_submit延迟的答案中给出了许多“规则”中的一些(总体问题也在链接io_uring文档的1.0节中列出)。

io_uring如何克服它?

io_uring内部如何工作?

有两个环形缓冲区,其中第一个环形缓冲区用于将提交排队,工作完成后,“结果”通过第二个环形缓冲区(包含补全)宣布。如果你不喜欢C structs / C函数接口之类的东西,那么很难给你提供除高水平的视图之外的其他内容,你仍然可以通过Jens演示io_uring来欣赏此视频,并在https://www.scylladb中找到说明。.com / 2020/05/05 / how-io_uring-and-ebpf-will-revolutionize-programming-in-linux /https://mattermost.com/blog/iouring-and-go/更易于访问。

io_uring但是,与Linux AIO相比,它的优势并不止于更好的异步性!请参阅前面提到的链接“ Linux上确实没有异步块I / O吗?” 以获得其他好处的清单...