基于Java的RDMA高性能通信库(一):IBM jVerbs库

 

目录

1. verbs API

2. endpoint API

3. jVerbs 应用程序系统和运行时需求(仅限 Linux)

4. Java Socket Over RDMA 与 jVerbs 比较


jVerbs 库包含支持开发使用高性能联网基础架构(如 InfiniBand、iWARP 或 RoCE)的 Java™ 应用程序的 verbs API 和 endpoint API。verbs 接口是 sockets 接口的替代联网 API。verbs 接口提供发送和接收通信,而 endpoint 接口是简化的 API,用于提供 jVerbs 端点的抽象。

jVerbs 作为基于 Open Fabrics Enterprise Distribution (OFED) RDMA 用户库的 Java 库进行实施。jVerbs 使用精简 JNI 层在 Java 代码和 OFED 用户库之间进行桥接。为避免与通过 JNI 接口传递复杂 RDMA 参数和数组关联的任何性能影响,jVerbs 库会实施一个名为有状态 verbs 方法 (SVM) 的概念。 通过此方法,verb 调用的每个 JNI 序列化状态都在 SVM 对象上下文中进行高速缓存,并可多次复用。jVerbs 是IBM公司开发的一种基于RDMA的高性能通信库,现在已经放入到IBM SDK, Java Technology Edition 8.0.0 作为IBM Java基础通信库。

下图说明使用 jVerbs 库实施 RDMA 通信的高级设计

The diagram illustrates a running Java application, which requires the JVM and either the jVerbs verbs interface or jVerbs endpoint interface to communicate with an RDMA adapter. Two different paths are used for communicating between these interfaces and the RDMA adapter: the fast data path and the slow control path.

慢速控制路径用于 RDMA 操作,如注册内存和为通信创建队列对。快速数据路径用于传输数据。

1. verbs API

verbs 接口的用途是分离数据和控制。通过预先分配通信资源(例如固定用于直接存储器存取 (DMA) 的内存),在传输数据时就不需要操作系统或 JVM 的干预。此原理可提高数据传输操作的性能,它是通过具有 RDMA 功能的网络基础结构实现低延迟和高带宽的一个关键因素。

verbs 接口为以下功能提供 API:

RDMA Send/Receive 通信类型

RDMA 发送和接收通信是双边操作。 发送方发送消息,而接收方创建应用程序缓冲区并指示接收数据的位置。此机制类似于传统的基于 TCP 套接字的通信。

RDMA 操作

RDMA 操作是单边操作,其中仅一个机器读取、写入或处理远程应用程序缓冲区。

对于所有功能,数据传输都非常高效,因为网络硬件使用 DMA 直接访问数据缓冲区。 应用程序数据缓冲区必须使用特定 verbs API 调用向 RDMA 系统进行缓冲区注册。因此,RDMA 子系统可确保固定内存且无法换出。

2. endpoint API

endpoint 接口比 verbs 接口更简单。 您可以使用绑定、连接和断开连接操作,通过与 TCP 套接字通信类似的方式创建端点和连接。 但是,当端点已连接时,它表示可用于发布单边或双边操作的简单 RDMA 队列对。

3. jVerbs 应用程序系统和运行时需求(仅限 Linux)

使用 jVerbs 库编写的 Java™ 应用程序依赖于特定的硬件和软件需求。但是,jVerbs 应用程序没有特定的运行时配置需求。

以下先决条件适用:

  • 此功能部件在以下平台和远程直接存储器存取 (RDMA) 适配器上可用:
    • 含 InfiniBand (IB) 或 RDMA over Converged Ethernet (RoCE) 的 Linux 32 位 x-86
    • 含 IB 或 RoCE 的 Linux AMD64/EM64T
    • 含 RoCE 的 Linux 32 位 POWER®
    • 含 RoCE 的 Linux 64 位 POWER
    • 服务更新 2 更改开始含 IB 的 Linux 64 位 POWER8®(小尾数法)服务更新 2 更改结束
    这些适配器必须通过适当的高性能交换机相互连接。
  • 您必须安装 OpenFabrics Enterprise Distribution (OFED) V1.5.3 或更高版本,可从 OpenFabrics Alliance Web 站点下载:https://www.openfabrics.org/index.php/resources/ofed-for-linux-ofed-for-windows/ofed-overview.html。 在运行时期间,将动态查找并装入来自以下库的符号:librdmacm.so 和 libibverbs.so。 这些库由 OFED 运行时提供。
  • 用户必须拥有足够许可权以锁定两个主机系统上的内存。RDMA 套接字缓冲区必须锁定或固定,以避免操作系统在数据传输期间换出内存页面。

运行 jVerbs 应用程序与运行任何其他 Java 应用程序一样;无需额外属性或环境变量。您无需设置类路径,因为 jverbs.jar 文件将由扩展类装入器自动装入。 例如:

JAVA_HOME/jre/bin/java MyClientApplication.java arguments

4. Java Socket Over RDMA 与 jVerbs 比较

两者都处理JNI的限制并使用快速路径来减少延迟。它们都使用User Verbs RDMA接口来避免上下文切换并提供快速路径访问。两者都可以选择零拷贝传输。

区别在于JSOR仍然使用Java Socket接口。 jVerbs提供了一个新的界面。 jVerbs还有一些称为有状态动词调用的内容,以避免重复序列化RDMA请求,这些请求会减少延迟。 jVerbs提供更原生的界面,应用程序可以直接使用这些界面。

两者的文档都表明它们比基于TCP/IP,SDP和IPoIB的常规Java套接字执行得更好。使用JSOR,不必更改现有的代码,因为它仍然使用相同的Java套接字接口。但是使用jVerbs更原生的RDMA原语相对于JSOR的性能收益。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值