Get the Code
Published November 16, 2018
Remote Procedure Call (RPC) has been the cornerstone of distributed systems since the early 80s. Recently, new classes of large-scale distributed systems running in data centers are posing extra challenges for RPC systems in terms of scaling and latency.
DaRPC is an RPC framework and API for Java which uses RDMA to implement a tight integration between RPC message processing and network processing in a user space. DaRPC efficiently distributes computation, network resources, and RPC resources across CPU cores and DRAM to achieve a high aggregate throughput (2-3M ops/sec) at a very low per-request latency (less than 10 μs).
The DaRPC programming API gives full control over network and compute resources during a remote procedure call. As such, applications decide how many CPU cores they want to use for server-side RPC processing and whether the application should interact with the network interface via interrupts or polling. RPC calls in DaRPC as issued by applications are non-blocking. In contrast to other non-blocking RPC libraries, DaRPC does not engage any background threads and, thus, achieves lower latencies. DaRPC relies on jVerbs, a framework and API for RDMA communication in Java.
In its current form, DaRPC is tailored to low-latency RDMA networks. RDMA, however, is just one type of a low-latency network interface. Another similar network interface is the DPDK (Data Plane Development Kit). DaRPC decouples the API from the actual implementation. Therefore it would be feasible to implement different backends for DaRPC for different high-performance network interfaces.
We are also looking for new types of applications that take advantage of DaRPC. The low latency nature and the efficient asynchronous API allow for new types of interactions in networked applications.
Peek behind the curtain of any new innovation, and you’ll likely find a foundation built on open source contributions.
Before open source was cool, IBM was busy donating our code, establishing open licensing, pushing for open governance in the…
DiSNI is a Java framework and API for direct storage and network access from a user space.
Get the Code »
Back to top