io_uring By Example: An Article Series
io_uring
是 Linux 系统中一种全新且巧妙的高性能异步 I/O 接口,它避免了 aio 系列 API 的诸多缺点。在这个由三篇文章组成的系列中,我们将探讨如何使用 io_uring
来完成 Linux 下最常见的编程任务。我们会编写一系列复杂度逐渐增加的程序,循序渐进地介绍 io_uring
的各项特性。虽然大部分情况下我们会使用 liburing 库,但在第一篇文章中,我们会探究原始的 io_uring
接口,以便从底层理解该接口。
本系列文章列表及内容概述
第一篇:简介:在本文中,我们将对 io_uring
及其编程接口进行介绍。我们会创建 3 个版本的类 Unixcat
工具。第一个版本regular_cat
是使用同步的readv()
系统调用构建的,它将作为我们比较同步编程和异步编程的参考。第二个版本cat_uring
在功能上与前一个示例相同,但使用的是io_uring
的原始接口构建。在这一部分的最后一个版本cat_liburing
则是使用 liburing 构建的,它为io_uring
提供了更高级的接口。第二篇:多操作排队:前一个示例仅作为介绍,我们有意将其设计得较为简单,每次只对一个请求进行排队处理。在这一部分,我们将开发一个文件复制程序 cp_liburing
,它能够对多个请求进行排队,这样 io_uring 就可以通过一次系统调用一次性处理所有请求。第三篇:在这一部分,我们将开发一个使用 io_uring
编写的简单 Web 服务器。这里要介绍的是 ZeroHTTPd,这是一个完全使用io_uring
进行所有 I/O 操作的简单 Web 服务器。我们将了解如何使用io_uring
对accept()
、readv()
和writev()
操作进行排队。
通过构建 ZeroHTTPd,我们将本系列内容推向高潮。
ZeroHTTPd 索引页面
源代码
所有示例的完整源代码可在 Github 上获取。
https://github.com/shuveb/io_uring-by-example
关于内核版本的说明
io_uring
是一个相当新且发展迅速的内核子系统。请注意,对于 Web 服务器示例,你至少需要运行 5.5 版本的内核。在撰写本文时,大多数发行版尚未运行该版本或更新的版本。至于其他示例,我已经在运行 5.3 版本内核的机器上进行了测试,它们运行正常。Web 服务器示例是在基于 5.5.15 版本内核的 Arch Linux 上进行测试的。
关于作者
我叫 Shuveb Hussain,是这个专注于 Linux 的博客的作者。你可以在 Twitter 上关注我,我主要会发布与 Linux、性能、可扩展性和云技术相关的技术内容。
Src
https://unixism.net/2020/04/io-uring-by-example-article-series/
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://www.hqyman.cn/post/11893.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~