DiSNI 项目使用教程
disni DiSNI: Direct Storage and Networking Interface 项目地址: https://gitcode.com/gh_mirrors/di/disni
1. 项目介绍
DiSNI(Direct Storage and Networking Interface)是一个用于用户空间直接访问存储和网络的 Java 库。它提供了一个 RDMA(Remote Direct Memory Access)接口,用于访问远程内存。DiSNI 使得开发高性能 RDMA 网络(如 InfiniBand、iWARP 或 RoCE)的 Java 应用程序成为可能。RDMA API 基于 Open Fabrics Enterprise Distribution (OFED) RDMA 用户库实现,支持异步操作、零拷贝传输和直接数据放置等 RDMA 语义。
2. 项目快速启动
2.1 环境准备
- 安装 Apache Maven
- 安装 GNU/autotools
- 安装 Java 8 或更高版本
2.2 下载项目
git clone https://github.com/zrlio/disni.git
cd disni
2.3 编译项目
2.3.1 编译 Java 源码
mvn -DskipTests install
2.3.2 编译 libdisni
cd libdisni
./autoprepare.sh
./configure --with-jdk=<path_to_jdk>
make install
2.4 运行示例
确保 DiSNI 及其依赖项在类路径中,并添加 DiSNI 测试 jar 包。确保 libdisni 在 LD_LIBRARY_PATH 中。
2.4.1 RDMA 示例
确保 RDMA 网络接口已配置并启动(运行 ibv_devices
查看 RDMA NIC 列表)。如果没有 RDMA 硬件,可以使用 SoftiWARP。
运行服务器:
java com.ibm.disni.examples.ReadServer -a <server_IP>
运行客户端:
java com.ibm.disni.examples.ReadClient -a <server_IP>
3. 应用案例和最佳实践
3.1 高性能数据传输
DiSNI 可以用于开发高性能数据传输应用程序,特别是在需要低延迟和高吞吐量的场景中。例如,在分布式存储系统中,DiSNI 可以用于实现节点间的高效数据传输。
3.2 异步操作
DiSNI 支持异步操作,这使得应用程序可以在数据传输的同时执行其他任务,从而提高整体性能。
3.3 零拷贝传输
通过 RDMA 的零拷贝传输特性,DiSNI 可以显著减少数据传输过程中的 CPU 开销,从而提高系统性能。
4. 典型生态项目
4.1 OpenFabrics Enterprise Distribution (OFED)
OFED 是一个开源项目,提供了 RDMA 和其他高性能网络技术的实现。DiSNI 基于 OFED 的 RDMA 用户库实现,因此与 OFED 生态系统紧密集成。
4.2 SoftiWARP
SoftiWARP 是一个软件实现的 RDMA 协议,适用于没有硬件 RDMA 支持的环境。DiSNI 可以与 SoftiWARP 结合使用,以在通用服务器上实现 RDMA 功能。
4.3 jNVMf
jNVMf 是一个基于 DiSNI 的 NVMf(Non-Volatile Memory Express)库,用于访问远程 NVMe 存储设备。DiSNI 1.5 版本移除了 NVMf/SPDK 代码,推荐使用 jNVMf 进行相关开发。
通过以上步骤,您可以快速上手 DiSNI 项目,并利用其强大的功能开发高性能的 Java 应用程序。
disni DiSNI: Direct Storage and Networking Interface 项目地址: https://gitcode.com/gh_mirrors/di/disni