axboe/liburing

GitHub: axboe/liburing

Linux 内核 io_uring 异步 I/O 接口的官方用户态辅助库,简化高性能异步 I/O 应用开发。

Stars: 3572 | Forks: 501

## liburing 这是 io_uring 库,liburing。liburing 提供了用于设置和销毁 io_uring 实例的辅助函数,同时也为不需要(或不希望)处理完整内核端实现的应用程序提供了一个简化的接口。 有关 io_uring 的更多信息,请参阅: https://kernel.dk/io_uring.pdf 订阅 io-uring@vger.kernel.org 以参与内核和用户空间的 io_uring 相关讨论与开发。邮件列表存档于: https://lore.kernel.org/io-uring/ ## 内核版本依赖 liburing 本身不依赖于任何特定的内核版本,因此即使在较旧的内核上也可以使用最新的 liburing 版本(反之亦然)。显然,较新的功能可能仅在较新的内核上可用。 ## ulimit 设置 io_uring 将其所需的内存记在 rlimit memlocked 选项下,这在某些设置中可能非常低(64K)。默认值通常足以满足大多数用例,但更大的 ring 或注册缓冲区之类的东西会迅速耗尽它。root 不受此限制,但普通用户受限制。详细说明如何在各种系统上提高限制超出了这段简短说明的范围,但请检查 /etc/security/limits.conf 以获取用户特定设置,或检查 /etc/systemd/user.conf 和 /etc/systemd/system.conf 以获取 systemd 设置。这影响 5.11 及更早版本,新内核对 RLIMIT_MEMLOCK 的依赖较少,因为它仅用于注册缓冲区。 ## 回归测试 liburing 的大部分内容实际上是针对 liburing 和内核 io_uring 支持的回归/单元测试。请注意,此测试套件预计无法在较旧的内核上通过,甚至可能导致较旧的内核崩溃或挂起! ## 构建 liburing ``` # # 准备构建配置(可选)。 # # --cc 指定 C 编译器。 # --cxx 指定 C++ 编译器。 # ./configure --cc=gcc --cxx=g++; # # 构建 liburing。 # make -j$(nproc); # # 构建 liburing.pc # make liburing.pc # # 安装 liburing(头文件、共享/静态库和 manpage)。 # sudo make install; ``` 有关构建配置选项的更多信息,请参见 './configure --help'。 ## FFI 支持 默认情况下,构建结果包含 4 个库文件: ``` 2 shared libs: liburing.so liburing-ffi.so 2 static libs: liburing.a liburing-ffi.a ``` 无法使用 liburing.h 中 'static inline' 函数的语言和应用程序应使用 FFI 变体。 liburing 的主要公共接口位于 liburing.h 中,形式为 'static inline' 函数。希望纯粹将 liburing 作为二进制依赖项使用的用户应链接到 liburing-ffi。它包含每个 'static inline' 函数的定义。 ## 许可证 此 repo 中包含的所有软件均为 LGPL 和 MIT 双重许可,请参阅 COPYING 和 LICENSE,来自内核的 header 除外,该 header 为带有 Linux-syscall-note 例外的 GPL 和 MIT 双重许可,请参阅 COPYING.GPL 和 。 Jens Axboe 2022-05-19
标签:Hpfeeds, io_uring, Liburing, Linux内核, 内核子系统, 后端开发, 存储, 安全渗透, 客户端加密, 库, 应急响应, 底层开发, 开源库, 异步I/O, 搜索引擎爬虫, 文件系统, 系统编程, 系统调用, 网络I/O, 零拷贝, 高并发, 高性能IO