#io-uring #fs #async

kyarn-tokio-uring

临时的 Kvarn 分支:为 Tokio 异步运行时提供 io-uring 支持

1 个不稳定版本

0.4.0-alpha12024 年 2 月 4 日

1154异步

38 每月下载次数
用于 4 crate

MIT 许可协议

290KB
4.5K SLoC

tokio-uring

在合并此 PR后,将移除这个临时的 Kvarn 分支。

这个 crate 通过公开一个与 Tokio 兼容但也可以驱动基于 io-uring 的资源的新的运行时,为 Tokio 提供 io-uring。任何与 Tokio 工作的库也与 tokio-uring 工作相同。这个 crate 提供了新的与 io-uring 工作的资源类型。

API 文档 | 聊天

入门

使用 tokio-uring 需要 启动一个 tokio-uring 运行时。这个运行时内部管理主要的 Tokio 运行时和 io-uring 驱动程序。

在你的 Cargo.toml

[dependencies]
tokio-uring = { version = "0.4.0" }

在你的 main.rs

use tokio_uring::fs::File;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    tokio_uring::start(async {
        // Open a file
        let file = File::open("hello.txt").await?;

        let buf = vec![0; 4096];
        // Read some data, the buffer is passed by ownership and
        // submitted to the kernel. When the operation completes,
        // we get the buffer back.
        let (res, buf) = file.read_at(buf, 0).await;
        let n = res?;

        // Display the contents
        println!("{:?}", &buf[..n]);

        Ok(())
    })
}

要求

tokio-uring 需要 一个非常新的 Linux 内核。(并非所有支持 io_uring 的内核都能工作)特别是 5.4.0 不能工作(这是 Ubuntu 20.4 的标准)。但是 5.11.0 (Ubuntu hwe 映像) 可以工作。

项目状态

kyarn-tokio-uring 项目仍然非常年轻。目前,我们正在专注于支持文件系统和网络操作。最终,我们将添加所有 io-uring 兼容操作的安全 API。

许可协议

本项目采用 MIT 许可协议

贡献

除非您明确声明,否则您提交的任何有意包含在 kyarn-tokio-uring 中的贡献,都将按照 MIT 许可协议授权,不附加任何额外的条款或条件。

依赖

~3–15MB
~136K SLoC