eRPC
eRPC | liburing | |
---|---|---|
2 | 28 | |
824 | 2,589 | |
1.0% | - | |
4.6 | 9.6 | |
22 days ago | 8 days ago | |
C++ | C | |
GNU General Public License v3.0 or later | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
eRPC
-
Are You Sure You Want to Use MMAP in Your Database Management System?
The most common example is DPDK [1]. It's a framework for building bespoke networking stacks that are usable from userspace, without involving the kernel.
You'll find DPDK mentioned a lot in the networking/HPC/data center literature. An example of a backend framework that uses DPDK is the seastar framework [2]. Also, I recently stumbled upon a paper for efficient RPC networks in data centers [3].
If you want to learn more, the p99 conference by ScyllaDB has tons of speakers talking about some interesting challenges.
[1] https://www.dpdk.org/.
[2] https://github.com/scylladb/seastar
[3] https://github.com/erpc-io/eRPC
-
Zero-copy network transmission with io_uring
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.
liburing
- Liburing 2.6 Released
-
Io Uring
I've tinkered around with io_uring on and off for the last couple years. But I think it's really becoming quite cool (not that it wasn't cool before... :)). This was a really interesting post on what's new https://github.com/axboe/liburing/wiki/io_uring-and-networki.... The combination of ring-mapped buffers and multi-shot operations has some really interesting applications for high-performance networking. Hoping over the next year or two we can start to see really bleeding edge networking perf without having to resort to using DPDK :)
-
Why you should use io_uring for network I/O
Thought I was doing something wrong at first, but after looking at examples and code, I just wasn't able to reach the epoll numbers. Looking on the Github page, there a few issues there with people who found the same thing, with their own examples. #1, #2
-
Use io_uring for network I/O
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...
-
The fastest rm command and one of the fastest cp commands
We're working on this! https://github.com/axboe/liburing/issues/830
- axboe / liburing
-
io_uring and networking in 2023
Link: https://github.com/axboe/liburing/wiki/io_uring-and-networking-in-2023
What are some alternatives?
protobuf - Protocol Buffers - Google's data interchange format [Moved to: https://github.com/protocolbuffers/protobuf]
tokio-uring - An io_uring backed runtime for Rust