Gov*_*are 1 linux aio io-uring
显然,Linux 已经有了 Asyn-IO (AIO) API。我相信它不是完全异步的。那么 AIO 出了什么问题呢?io_uring 如何克服它?
PS:我尝试阅读https://kernel.dk/io_uring.pdf但无法完全理解,因为我与该语言脱节C。
显然,Linux 已经有了 Asyn[c]-IO (AIO) API。我相信它不是完全异步的。那么 AIO 出了什么问题呢?
如果您格外小心并符合其所有约束,“旧”Linux AIO 接口将异步运行。但是,如果您“破坏”任何(隐藏)规则,提交可能会突然(并且默默地)以同步方式运行(即,提交会非确定性地阻塞并且持续不方便的长时间)。Ubuntu Linux 中异步 IO io_submit 延迟的答案中给出了许多“规则”中的一些(总体问题也在您链接的io_uring 文档的 1.0 节中列出)。
io_uring 如何克服它?
IORING_SETUP_SQPOLL),您甚至不必进行系统调用来提交/检索结果。如果您“只是”操纵内存内容,那么您从未拨打过的电话将很难被阻止!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 吗?” 了解其他好处列表...
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |