0

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

PS:我试图阅读https://kernel.dk/io_uring.pdfC但由于我与该语言脱节而无法完全理解。

4

1 回答 1

4

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

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

io_uring 如何克服它?

io_uring 内部如何工作?

有两个环形缓冲区,第一个环形缓冲区用于排队提交,当工作完成时,“结果”通过第二个环形缓冲区(包含完成)宣布。虽然如果您对 C 结构/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 吗?” 有关其他好处的列表...

于 2020-11-30T16:18:59.840 回答