Direct Storage and Networking Interface (DiSNI)

Get the Code

DiSNI is a Java framework and API for direct storage and network access from a user space.

DiSNI offers two APIs for RDMA programming, the low-level verbs API and the more high-level endpoint API. These APIs enable you to develop Java applications for high-performance networks such as InfiniBand, iWARP, or RoCE.

The following diagram shows how the framework works.

The verbs API resembles the native ibverbs interface of the Open Fabrics Enterprise Distribution (OFED) user libraries. Programming against the verbs API gives you the most control, but also requires an in-depth understanding of the RDMA programming model. Alternatively, the endpoint API exports higher-level abstractions. More precisely, programmers can create different types of endpoints and connect them like regular sockets using methods such as connect() or accept(). Once connected, endpoints behave just like RDMA queue pairs (QPs) and can be programmed as such.

Generally, DiSNI enables networking at ultra-low latencies and high throughput by allowing applications to bypass the kernel and access networking hardware directly from within the Java Virtual Machine (JVM). Furthermore, DiSNI makes the RDMA model available to Java applications. For instance, one-sided RDMA operations make it possible to read or write memory of a remote JVM directly, provided that the credentials are set up accordingly.

DiSNI employs a concept called a stateful verbs methods (SVM). These are pre-serialized RDMA operations that can be cached and reused by the application. SVMs avoid costly serialization of work requests and scatter/gather elements during the process of posting descriptors to RDMA queues.

The current version of DiSNI provides support for RDMA-based networking. Support for other user space storage and networking interfaces such as DPDK or SPDK is planned for the future.

How can I contribute to DiSNI?

In its current form, DiSNI provides access to high-performance RDMA network interfaces directly from within the JVM. RDMA, however, is just one kind of a user space I/O technology. In the future, we aim to integrate other user space interfaces. These interfaces might include DPDK for fast user-space packet processing or SPDK for efficient storage access from a user space.

We are also looking for new types of applications to take advantage of DiSNI. We believe that the ultra-low network latencies and the new semantics (e.g., one-sided operations) offered by DiSNI will enable new types of interactions in networked applications.