Skip to content

Commit c5e9dbb

Browse files
Jonas PfefferlePepperJo
authored andcommitted
README: remove NVMf sections
Update README for new version. Change-Id: I94e129215bf5cc5f5fd13926d7a9a22d7c3be21f Signed-off-by: Jonas Pfefferle <jpf@zurich.ibm.com> Reviewed-on: https://review.gerrithub.io/407138 Tested-by: <zrliobot@gmail.com> Reviewed-by: Animesh Trivedi <animesh.trivedi@gmail.com>
1 parent cd9395c commit c5e9dbb

File tree

3 files changed

+10
-39
lines changed

3 files changed

+10
-39
lines changed

README.md

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# DiSNI: Direct Storage and Networking Interface
22

3-
DiSNI is a Java library for direct storage and networking access from userpace. It currently provides an RDMA interface to access remote memory, and an NVMf interface to access remote NVMe storage. DiSNI enables the development of Java applications for high performance RDMA networks, such as InfiniBand, iWARP, or RoCE. The RDMA API is implemented based on the Open Fabrics Enterprise Distribution (OFED) RDMA user libraries. The NVMf APIs are implemented on top of the Storage Performance Development Kit ([SPDK](http://www.spdk.io)). Both APIs provide RDMA semantics including asynchronous operations, zero-copy transmission and direct data placement.
3+
DiSNI is a Java library for direct storage and networking access from userpace. It provides an RDMA interface to access remote memory. DiSNI enables the development of Java applications for high performance RDMA networks, such as InfiniBand, iWARP, or RoCE. The RDMA API is implemented based on the Open Fabrics Enterprise Distribution (OFED) RDMA user libraries. It provides RDMA semantics including asynchronous operations, zero-copy transmission and direct data placement.
4+
5+
## Changelog
6+
7+
* Version 1.5 removes NVMf/SPDK code. For user of the DiSNI NVMf API we provide a new NVMf library called [jNVMf](https://github.com/zrlio/jnvmf)
48

59
## Building DiSNI
610

@@ -10,16 +14,6 @@ To build DiSNI and its example programs, obtain a copy of DiSNI from [Github](ht
1014
1. Compile the Java sources using: mvn -DskipTests install
1115
2. Compile libdisni using: cd libdisni; ./autoprepare.sh; ./configure --with-jdk=\<path\>; make install
1216

13-
By default DiSNI will only build with RDMA support. To enable NVMf you will need to install DPDK and SPDK using following steps. Below, \<target\> refers to the DPDK 4-tuple for your platform, which would be `x86_64-native-linuxapp-gcc` for Intel/AMD processors and `ppc_64-power8-linuxapp-gcc` for Power (run `make help` in the DPDK top source directory for a list of 4-tuples supported by DPDK):
14-
15-
2. Obtain dpdk from [dpdk.org](http://dpdk.org/download) (version 17.11)\
16-
3. Build dpdk using: make install T=\<target\> DESTDIR=. EXTRA_CFLAGS="-fPIC"
17-
4. Obtain spdk from [Github](https://github.com/spdk/spdk) (version 17.10)
18-
5. Build spdk using: make DPDK_DIR=\<dpdk-path/x86_64-native-linuxapp-gcc\> CONFIG_RDMA=y
19-
6. Configure libdisni for NVMf: ./configure --with-jdk=\<path\> --with-spdk=\<path\> --with-dpdk=\<path\>/\<target\>
20-
7. Build libdisni: make install
21-
8. Make sure shared libraries of DPDK are in the LD_LIBRARY_PATH
22-
2317
## How to Run the Examples
2418

2519
Common steps:
@@ -32,11 +26,6 @@ Common steps:
3226
2. Run the server\: java com.ibm.disni.examples.ReadServer -a \<server IP\>
3327
3. Run the client\: java com.ibm.disni.examples.ReadClient -a \<server IP\>
3428

35-
### NVMf example
36-
1. Include DPDK library dependencies in LD_LIBRARY_PATH (\*.so files are required)
37-
2. Run the server\: java com.ibm.disni.benchmarks.NvmfEndpointServer \<local NVMe PCI address\> \<NVMe qualified name\> \<server ip\> \<port\>
38-
3. Run the client\: java.com.ibm.disni.benchmarks.NvmfEndpointClient \<server ip\> \<port\> \<NVMe qualified name\>
39-
4029
## Programming with DiSNI
4130

4231
DiSNI is part of maven central, therefore the simplest way to use DiSNI in your maven application is to add the following snippet to your application pom.xml file.
@@ -47,39 +36,23 @@ DiSNI is part of maven central, therefore the simplest way to use DiSNI in your
4736
<version>1.5</version>
4837
</dependency>
4938

50-
The RDMA and NVMf APIs in DiSNI are both following the Group/Endpoint model which is based on three key data types (interfaces):
39+
The DiSNI API follows a Group/Endpoint model which is based on three key data types (interfaces):
5140

5241
* DiSNIServerEndpoint:
5342
* represents a listerning server waiting for new connections
5443
* contains methods to bind() to a specific port and to accept() new connections
5544
* DiSNIEndpoint:
56-
* represents a connection to a remote (or local) resource (e.g., RDMA or NVMf)
45+
* represents a connection to a remote (or local) resource (e.g., RDMA)
5746
* offers non-blocking methods to read() or write() the resource
5847
* DiSNIGroup:
5948
* a container and a factory for both client and server endpoints
6049

61-
Specific implementations of these interface in DiSNI/RDMA and DiSNI/NVMf are offering extra functionality tailored to their purpose.
50+
Specific implementations of these interface like DiSNI/RDMA offers extra functionality tailored to their purpose.
6251

6352
### Stateful Operations
6453

6554
To avoid any performance impacts that are associated with passing complex parameters and arrays through the JNI interface, the DiSNI library implements stateful method calls (SMC). With this approach, the JNI serialization state for a particular call is cached in the context of an SMC object and can be reused many times. SMC objects can also be modified, for instance when transmitting data at different offsets. Modifications to SMC objects are efficient as they do not require serialization. It is key that SMC objecs are re-used whenever possible to avoid garbage collection overheads.
6655

67-
### Programming NVMf using DiSNI
68-
69-
Here is an example of a simple NVMf client. The client issues a 512 byte read operation against a remote NVMf server.
70-
```
71-
NvmeTransportType transports[] = new NvmeTransportType[]{NvmeTransportType.RDMA};
72-
long memoryMB = 256;
73-
NvmeEndpointGroup group = new NvmeEndpointGroup(transports, memoryMB);
74-
NvmeEndpoint endpoint = group.createEndpoint();
75-
76-
URI uri = new URI("nvmef://192.168.0.1:5050/0/1?subsystem=nqn.2016-06.io.spdk:cnode1");
77-
endpoint.connect(uri);
78-
ByteBuffer buffer = ByteBuffer.allocateDirect(512);
79-
NvmeCommand command = endpoint.read(buffer, 0);
80-
command.execute();
81-
```
82-
8356
### Programming RDMA using DiSNI
8457

8558
Here are the basic steps that are necessary to develop an RDMA client/server application using DiSNI. First, define your own custom endpoints by extending either extending RdmaClientEndpoint or RdmaActiveClientEndpoint

libdisni/debian/control

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ Architecture: any
1111
Depends: ${shlibs:Depends}, ${misc:Depends}, adduser
1212
Description: Direct Storage and Networking Interface Library
1313
libdisni provides a user-space API to direct storage and networking access from
14-
userpace. It provides an RDMA interface to access remote memory, and an NVMf
15-
interface to access remote NVMe storage.
14+
userpace. It provides an RDMA interface to access remote memory.
1615
.
1716
This package contains the shared library.

libdisni/libdisni.spec.in

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
1414

1515
%description
1616
libdisni provides a user-space API to direct storage and networking access from
17-
userpace. It provides an RDMA interface to access remote memory, and an NVMf
18-
interface to access remote NVMe storage.
17+
userpace. It provides an RDMA interface to access remote memory.
1918

2019
%package devel
2120
Summary: Development files for the libdisni library

0 commit comments

Comments
 (0)