【问题标题】:How io_uring internally works?io_uring 内部如何工作?
【发布时间】:2020-11-30 14:22:23
【问题描述】:

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

PS:我尝试阅读 https://kernel.dk/io_uring.pdf 但无法完全理解,因为我与 C 语言脱节。

【问题讨论】:

标签: linux io io-uring


【解决方案1】:

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

如果您格外小心并匹配其所有约束,“旧”Linux AIO 接口将异步运行。但是,如果您“破坏”任何(隐藏的)规则 submission 可能会突然(并且默默地)以同步方式运行(即,提交阻止不确定性和不方便的长时间)。许多“规则”中的一些在asynchronous IO io_submit latency in Ubuntu Linux 的答案中给出(总体问题也列在您链接的io_uring document 的第 1.0 节中)。

io_uring 如何克服它?

io_uring 内部如何工作?

有两个环形缓冲区,其中第一个环形缓冲区用于排队提交,当工作完成时,“结果”通过第二个环形缓冲区(包含完成)宣布。如果您对 C 结构/C 函数接口之类的东西感到不舒服,很难给您提供比非常高级别的东西更多的东西,但您可能会喜欢这个video by Jens presenting 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 的优势并不仅限于更好的异步性!有关其他好处的列表,请参阅上述"Is there really no asynchronous block I/O on Linux?" 的链接...

【讨论】:

    猜你喜欢
    • 2021-01-13
    • 1970-01-01
    • 2019-01-13
    • 2010-10-14
    • 2013-09-28
    • 2012-08-01
    • 2011-12-10
    • 2018-02-10
    • 2014-09-29
    相关资源
    最近更新 更多