Zero-copy network transmission with io_uring

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

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • Yes, I think io_uring is slowly making its way onto Java ecosystem. Example: https://github.com/netty/netty-incubator-transport-io_uring

    I guess it will go into the JVM too.

  • liburing

  • I wanted to see some benchmark numbers but the first hit on google returns a unresolved 150+ message github issue about how io_ring might not be better than epoll: https://github.com/axboe/liburing/issues/189

    I didn't read the entire thread, but are there still implementation kinks that are being worked out or is the api ready to use now?

  • 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
  • eRPC

    Efficient RPCs for datacenter networks

  • My side project has been to rewrite https://github.com/erpc-io/eRPC which does RPCs over UDP with some congestion control supposedly quite fast. Paper: https://www.usenix.org/system/files/nsdi19-kalia.pdf. I never got the code to work in AWS; I believe the author focused on Mellanox NICS but that's not really commodity H/W, which is where my interests lay.

    So I dug into it .. and well I'll have my own library soon. I should be able to send UDP w/o congestion control sometime this week.

    eRPC uses DPDK (100% user space NIC TX/RX control) plus the author's own other ideas to get performance. Since I'm getting into NICs + DPDK (in a serious way i.e this much more involved than vanilla sys/socket.h I/O) way, way late in the game, I hope and believe DPDK is, in the medium term, the better way to go than to turn to kernel improvements in for I/O.

    Like others, getting the kernel out of the way, with pinned threads seems cleaner if one can develop from scratch.

    This library will be a part of something bigger, however, a key architecture point for many people is: I got a RPC/packet/message. Now should I:

    * process it in-place e.g. on the thread that was doing RX?

    * delegate it to another core?

    * if I delegate .. to whom?

    * If I delegate how do I get a response back?

    In DPDK I believe these are easier to decide and well-manage in code.

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