Use io_uring for network I/O

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
  • libuv

    Cross-platform asynchronous I/O

  • Hat's off for posting this 2 hours after it dropped!

    I've been tracking the nest of issues with anticipation! This wasn't linked to https://github.com/libuv/libuv/pull/1947 when it posted, so I didn't see it. Very glad you linked it, thanks!

  • - For network I/O, Netty as an incubating transport that is promising [1].

    - For disk I/O, JDK's Loom project [2] has mentioned its plan to rely on io_uring on Linux [3], but there's no ETA AFAIK.

    [1] https://github.com/netty/netty-incubator-transport-io_uring

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • hella-http

    Hella fast HTTP server library for Java

  • nio_uring

    High performance I/O library for Java using io_uring under the hood

  • - based on these bindings - https://github.com/bbeaupain/nio_uring

  • go

    The Go programming language

  • Still waiting on io_uring in the Go stdlib: https://github.com/golang/go/issues/31908

  • uring

    Discontinued Golang library for io_uring (without CGO)

  • We've been able to do a lot with this:

    https://github.com/dshulyak/uring

  • tokio-uring

    An io_uring backed runtime for Rust

  • While Mio will probably not implement uring in its current design, there's https://github.com/tokio-rs/tokio-uring if you want to use io_uring in Rust.

    It's still in development, but the Tokio team seems intent on getting good io_uring support at least!

    As the README states, the Rust implementation requires a kernel newer than the one that shipped with Ubuntu 20.04 so I think it'll be a while before we'll see significant development among major libraries.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • glommio

    Glommio is a thread-per-core crate that makes writing highly parallel asynchronous applications in a thread-per-core architecture easier for rustaceans.

  • > Few of us have really figured out io_uring. But that doesn't mean it is slower.

    seastar.io is a high level framework that I believe has "figured out" io_uring, with additional caveats the framework imposes (which is honestly freeing).

    Additionally the rust equivalent: https://github.com/DataDog/glommio

  • rr

    Record and Replay Framework

  • I hope there is (or will be) a way to use io_uring for the sorts of purposes that the syscall boundary is currently used for. The example I have in mind is https://rr-project.org/ which uses the syscall boundary to isolate nondeterminism in order to implement record/replay debugging. I'm not sure how it can accomplish the same thing with io_uring; it would need to be informed of all updates to the shared pages or something?

  • liburing

  • To address my own silly questions, yes, one should use the new fixed buffers described in this document: https://github.com/axboe/liburing/wiki/io_uring-and-networki...

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts