eRPC
bakelite
eRPC | bakelite | |
---|---|---|
2 | 3 | |
824 | 19 | |
1.0% | - | |
4.6 | 0.0 | |
22 days ago | over 1 year 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.
bakelite
-
Is there a way to have Arduino execute commands that it received serially?
If you want to explore the custom protocol approach, you might be interested in this library I wrote. It helps automate the tedious bits of building your own protocol: https://github.com/brendan0powers/bakelite
- Show HN: Bakelite – making it easier to communicate with your firmware
-
Does anyone have a protocol for the communication between microcontroller and PC?
Here's a link: https://github.com/brendan0powers/bakelite An Arduino/Python example: https://github.com/brendan0powers/bakelite/tree/master/examples/arduino
What are some alternatives?
protobuf - Protocol Buffers - Google's data interchange format [Moved to: https://github.com/protocolbuffers/protobuf]
erpc - Embedded RPC
liburing
bitproto - The bit level data interchange format for serializing data structures (long term maintenance).
ice - All-in-one solution for creating networked applications with RPC, pub/sub, server deployment, and more.
mscharconv - <charconv> from Microsoft STL, but multi-platform
netty-incubator-transport-io_uring
fprime - F´ - A flight software and embedded systems framework
FlatBuffers - FlatBuffers: Memory Efficient Serialization Library
cppbor - An implementation of cbor using C++ 17 variants
areg-sdk - AREG is an asynchronous Object RPC framework to simplify multitasking programming by blurring borders between processes and treating remote objects as if they coexist in the same thread.
indicators - Activity Indicators for Modern C++