• Async Runtimes slides by Sanchayan Maity git.sanchayanmaity.net
  • Asynchronous I/O programming with io_uring unixism.net
  • Async IO on Linux: select, poll, epoll jvns.ca
  • Notes on epoll and io_uring - OS readiness vs OS completion models iafisher.com
  • Notes on io_uring boats.gitlab.io
  • Asynchronous IO fundamentals www.ncameron.org
  • The Impact of Thread-Per-Core Architecture on Application Tail Latency penberg.org
  • Thread-per core without.boats
  • Io Uring nick-black.com
  • I/O access and interrupts linux-kernel-labs.github.io
  • Compio - a thread-per-core async runtime with io_uring github.com/compio-rs
  • Compio with executor and dispatcher decoupled that can be swapped compio.rs
  • Scheduling multithreaded computations by work stealing dl.acm.org
  • Completion model makes use of an ownership model. There can be an issue with respect to drop problem on how buffer should be handled when a future is dropped as results will be written back to this buffer. (I’ not sure about this, have to research). Complexities wrt in flight future operation cancellations. Dropping future does not stop kernels handling of the memory that it was given ownership to.
// compio (ownership mode)
// kernel must have ownership to the buffer that it is writing to
let buf = [0; 4096];
// buf is not borrowed
let (res, buf) = file.read_at(buf, 0).await;
//        ^^^ buffer returned with data
 
// tokio (borrowing) model
file.read(&mut buf).await?; // here buf is borrowed
  • Advantages wrt zero-copy optimisations, completion models support batched submission for I/O operations, etc (check slides),
  • Apache Iggy benchmarking benchmarks.iggy.apache.org
  • Apache Iggy: Hyper efficient Message Streaming github.com/apache