This branch/fork is a mess, its history will be forced pushed/rebased/rewritten multiple times a day (or even hour). If you see anything cool in here, cherry pick the commits fast and don't expect the code to work or stay for long
This crate provides io-uring for Tokio by exposing a new Runtime that is
compatible with Tokio but also can drive io-uring-backed resources. Any
library that works with Tokio also works with tokio-uring. The crate
provides new resource types that work with io-uring.
Using tokio-uring requires starting a [tokio-uring] runtime. This
runtime internally manages the main Tokio runtime and a io-uring driver.
In your Cargo.toml:
[dependencies]
tokio-uring = { version = "0.5.0" }In your 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 requires a very recent linux kernel. (Not even all kernels with io_uring support will work)
In particular 5.4.0 does not work (This is standard on Ubuntu 20.4). However 5.11.0 (the ubuntu hwe image) does work.
The tokio-uring project is still very young. Currently, we are focusing on
supporting filesystem and network operations. Eventually, we will add safe APIs for all
io-uring compatible operations.
This project is licensed under the MIT license.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in tokio-uring by you, shall be licensed as MIT, without any additional terms or conditions.