目录

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 通信的高级设计

慢速控制路径用于 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
    • 含 IB 的 Linux 64 位 POWER8®(小尾数法)

    这些适配器必须通过适当的高性能交换机相互连接。

  • 您必须安装 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的性能收益。

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

  1. 基于Java的RDMA高性能通信库(六):SDP - Java Socket Direct Protocol

    目录 1.Java网络编程和套接字API的历史 2.InfiniBand 高速网络通信技术 3. Java 网络协议栈API 4.Java 7 SDP 远程直接内存存取(RDMA) 4.1 Java7 ...

  2. 基于Java的RDMA高性能通信库(五):JXIO

    JXIO 是 Mellanox 公司的RDMA中间件accelio在Java上的包装,JXIO使用类似于Java nio的ServerChannel方式,熟悉接口可以做好变换.AcceliO是针对硬件 ...

  3. 基于Java的RDMA高性能通信库(四):DaRPC

    DaRPC是一个用于Java的RPC框架和API,它使用RDMA在用户空间中实现RPC消息处理和网络处理之间的紧密集成. 自80年代初以来,远程过程调用(RPC)一直是分布式系统的基石. 最近,在数据 ...

  4. 基于Java的RDMA高性能通信库(二):Java Socket Over RDMA

    目录 1.Comparing JSOR with Java TCP communications 2.Comparing JSOR to Java Sockets Direct Protocol (S ...

  5. 基于Java的RDMA高性能通信库(三):Direct Storage and Networking Interface (DiSNI)

    The Direct Storage and Networking Interface (DiSNI) 是一个Java框架和API专门为了在用户空间进行存储和网络访问的(IBM的jVerbs的新开源代 ...

  6. 并发型服务器响应方式,基于Java NIO 开发高性能并发型服务器程序的研究

    基于Java NIO 开发高性能并发型服务器程序的研究 第8卷%第5期 软件导刊 2009年5月SoftwareGuide Vol.8No.5May.2009 基于JavaNIO开发高性能并发型服务器 ...

  7. 基于Java NIO的Socket通信

    基于Java NIO的Socket通信 Java NIO模式的Socket通信,是一种同步非阻塞IO设计模式,它为Reactor模式实现提供了基础. 下面看看,Java实现的一个服务端和客户端通信的例 ...

  8. 基于Java的TCP Socket通信详解(计算机端/Android手机端)

    TCP Socket通信是一种比较常用的基于连接的网络通信方式.本文通过Java实现TCP Socket通信,并将其用于计算机端.Android手机端,同时做到代码规范化,实现代码最大化复用. 本文代 ...

  9. 手机和电脑基于java的socket简单通信

    Java手机与电脑的Socket通信 了解手机与电脑的socket通信 下面给出代码 完整程序代码 效果 了解手机与电脑的socket通信 1.内网之间的通信: 内网就是两者处于同一个局域网之中,不用 ...

最新文章

  1. mingw msys 编译 libzip
  2. 微信公众号开发 回复事件(测试账号)
  3. 二进制图片在http怎么显示_HTTP/2内核剖析
  4. android访问服务器405,android – HTTP状态405 – 不允许的方法(jax-rs服务)
  5. rsyslog-mysql_04-Log rsyslog-mysql loganalyzer
  6. 454. 四数相加 ||
  7. Linux工作队列实现机制
  8. MySQL 简单语句(2)
  9. 脚本自动化互相阅读文章教程
  10. 破解zip,WinRaR等压缩包加密
  11. 签名格式 - 职场 Email 礼仪
  12. android记账系统预算功能,怎么挑选合适的 Android 记账应用?你可以从记账需求入手...
  13. 网页中使用阿里图标iconfont
  14. CRM高端制造业应用案例分析
  15. postman一直sending 常见问题
  16. Android 快应用
  17. 存在阿里云OSS的视频截取一张图片作为封面
  18. 第二证券|七位投资专家指点2023 战略性看好A股 市场将提供更多机会
  19. 烦人的警告 libpng warning: iCCP: known incorrect sRGB profile
  20. scala类的介绍与操作02

热门文章

  1. 设计模式之【抽象工厂模式】
  2. Maven简单的配置Junit测试及使用简单的mock
  3. Spring Mvc + Easyui中根据查询结果导出文件
  4. 利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖
  5. 将decimal类型的数据转成2.12这样价钱的显示方式
  6. jquery判断页面、图片是否加载完成
  7. Python 字符串笔记(转自木木)
  8. ST公司STM32F4与STM32F1的区别
  9. Fedora 31安装RPMFusion源的方法
  10. 报错笔记:cannot convert parameter 1 from 'char [1024]' to 'unsigned char *'