#rpc #engine #memory-safety #rdma #userspace #closures #data

rrppcc

A high-performance userspace RDMA RPC engine

5 unstable releases

0.4.0 Apr 15, 2024
0.3.3 Apr 1, 2024
0.3.2 Mar 12, 2024
0.2.4 Jan 23, 2024
0.1.1 Aug 14, 2023

#3 in #rdma

Download history 3/week @ 2024-01-01 16/week @ 2024-01-08 32/week @ 2024-01-22 5/week @ 2024-02-26 367/week @ 2024-03-04 175/week @ 2024-03-11 28/week @ 2024-03-18 164/week @ 2024-04-01 2/week @ 2024-04-08 154/week @ 2024-04-15

321 downloads per month

MIT license

160KB
3.5K SLoC

rrppcc is an RDMA RPC library that serves academic research purposes.

There are some performant and useful userspace RPC engines in C++ (e.g., eRPC) with appealing features like zero-copy. However, when some system researchers originally familiar with those RPC engines start to use Rust, they may find no comparable Rust alternatives. Rust has memory safety, pervasive closures, and async/await. C++ RPC engines does not have memory safety, often do not allow closures, and seldomly have support for C++20 coroutines.

This library offers native Rust userspace RPC that is partly inspired by eRPC. Major features include:

  • Fully userspace in the data plane
  • Zero-copy
  • Automatically use RDMA UD for small messages and RC for large messages

To use this library, you must have an available RDMA NIC installed on your computer. Mellanox's ConnectX adaptor series are the best; others should also work as long as you have libibverbs installed, but they are not tested.

Versioning

  • 0.2: Use this version if you want to bind RPC handlers to Nexus, and can tolerate some unsoundness and counter-intuitive semantics (the Send + Sync traits are implemented on the types, but they actually can only be used in one thread).
  • 0.3: Use this version if you want to bind RPC handlers to Rpc.

Dependencies

~13–28MB
~445K SLoC