用户可借助此项目简化 io_uring 实例的创建与销毁,无需深入内核实现即可使用异步 I/O 功能。项目提供辅助工具、简化接口,支持不同内核版本,还包含回归测试确保功能稳定性。【此简介由AI生成】
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 3 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 |
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)。默认值通常足以满足大多数用例,但更大的环或诸如注册缓冲区之类的东西会迅速耗尽它。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(头文件、共享/静态库以及手册页面)。
#
sudo make install;
查看'./configure --help'以获取更多关于构建配置选项的信息。
FFI支持
默认情况下,构建会生成4个库文件:
2个共享库:
liburing.so
liburing-ffi.so
2个静态库:
liburing.a
liburing-ffi.a
无法在liburing.h中使用'static inline'函数的语言和应用程序应该使用FFI版本。
liburing的主要公共接口位于liburing.h中的'static inline'函数。希望将liburing纯粹作为二进制依赖项使用的用户应该链接到liburing-ffi。它包含了每个'static inline'函数的定义。
许可证
此代码库中包含的所有软件均采用双许可证LGPL和MIT,参见COPYING和LICENSE,除了一些来自内核的头文件,它们采用双许可证GPL带Linux系统调用笔记例外和MIT,参见COPYING.GPL和https://spdx.org/licenses/Linux-syscall-note.html。
Jens Axboe 2022-05-19