当前位置: 首页 > news >正文

【RDMA】librdmacm库和连接建立过程

翻译:rdma_cm - RDMA通信管理器。

概述:rdma_cm是用于建立RDMA传输上的通信的管理器。

说明:RDMA CM是一个用于建立可靠连接和不可靠数据报数据传输的通信管理器。它为建立连接提供了一个RDMA传输中立的接口。该API基于套接字,但为队列对(QP)的语义进行了调整:通信必须通过特定的RDMA设备进行,并且数据传输是基于消息的。

RDMA CM仅提供RDMA API的通信管理(连接建立/拆除)部分。它与libibverbs库定义的verbs API配合使用。libibverbs库提供了发送和接收数据所需的接口。

客户端操作:此部分提供了通信的主动端(或客户端)的基本操作概述。一般的连接流程如下:

1. rdma_create_event_channel:创建接收事件的通道。
2. rdma_create_id:分配一个rdma_cm_id,类似于socket。
3. rdma_resolve_addr:获取本地RDMA设备以到达远程地址。
4. rdma_get_cm_event:等待RDMA_CM_EVENT_ADDR_RESOLVED事件。
5. rdma_ack_cm_event:确认事件。
6. rdma_create_qp:为通信分配一个QP。
7. rdma_resolve_route:确定到达远程地址的路由。
8. rdma_get_cm_event:等待RDMA_CM_EVENT_ROUTE_RESOLVED事件。
9. rdma_ack_cm_event:确认事件。
10. rdma_connect:连接到远程服务器。
11. rdma_get_cm_event:等待RDMA_CM_EVENT_ESTABLISHED事件。
12. rdma_ack_cm_event:确认事件。
13. 在连接上执行数据传输。
14. rdma_disconnect:撤销连接。
15. rdma_get_cm_event:等待RDMA_CM_EVENT_DISCONNECTED事件。
16. rdma_ack_cm_event:确认事件。
17. rdma_destroy_qp:销毁QP。
18. rdma_destroy_id:释放rdma_cm_id。
19. rdma_destroy_event_channel:释放事件通道。

用于在节点之间建立不可靠数据报(UD)通信的过程几乎相同。但是,QPs之间不会形成实际的连接,因此不需要断开连接。

虽然此示例显示客户端发起断开连接,但连接的任一方都可以发起断开连接。

服务器操作:此部分提供了通信的被动端(或服务器端)的基本操作概述。一般的连接流程如下:

1. rdma_create_event_channel:创建接收事件的通道。
2. rdma_create_id:分配一个rdma_cm_id,类似于socket。
3. rdma_bind_addr:将本地端口号设置为监听的端口号。
4. rdma_listen:开始监听连接请求。
5. rdma_get_cm_event:等待带有新的rdma_cm_id的RDMA_CM_EVENT_CONNECT_REQUEST事件。
6. rdma_create_qp:在新的rdma_cm_id上为通信分配一个QP。
7. rdma_accept:接受连接请求。
8. rdma_ack_cm_event:确认事件。
9. rdma_get_cm_event:等待RDMA_CM_EVENT_ESTABLISHED事件。
10. rdma_ack_cm_event:确认事件。
11. 在连接上执行数据传输。
12. rdma_get_cm_event:等待RDMA_CM_EVENT_DISCONNECTED事件。
13. rdma_ack_cm_event:确认事件。
14. rdma_disconnect:撤销连接。
15. rdma_destroy_qp:销毁QP。
16. rdma_destroy_id:释放已连接的rdma_cm_id。
17. rdma_destroy_id:释放监听的rdma_cm_id。
18. rdma_destroy_event_channel:释放事件通道。

返回值:成功返回0,错误返回-1。如果函数以异步方式运行,则返回值为0表示成功启动操作。操作仍然可能以错误完成;用户应该检查相关事件的状态。如果返回值为-1,则errno将包含有关失败原因的其他信息。

先前版本的库对于与ENOMEM、ENODEV、ENODATA、EINVAL和EADDRNOTAVAIL代码有关的某些情况会返回-errno并且不设置errno。希望检查这些代码并与先前版本的库兼容的应用程序必须在返回代码小于-1时手动将errno设置为返回代码的负值。

http://www.lryc.cn/news/197781.html

相关文章:

  • 如何使用Python抓取PDF文件并自动下载到本地
  • 人脸写真FaceChain的简单部署记录(一)
  • linux虚机新增加磁盘后在系统中查不到
  • js中隐式类型转换与toPrimitive
  • 家政系统预约小程序具备哪些功能?
  • 【LeetCode】46. 全排列
  • 宏电股份RedCap产品亮相迪拜华为MBBF,并参与RedCap全球商用阶段性成果发布
  • Harris图像角点检测
  • 互联网Java工程师面试题·Java 总结篇·第七弹
  • UVa658 It’s not a Bug, it’s a Feature!(Dijkstra)
  • Object 类常用方法
  • chromium 52 chrome 各个版本发布功能列表(58-84)
  • python web开发(四): Bootstrap
  • 【EI会议征稿】2024年遥感技术与测量测绘国际学术会议(RSTSM 2024)
  • 灵感:VUE2实现权限按钮控制
  • 【2023最新版】Python全栈知识点总结
  • 推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
  • day1:Node.js 简介
  • ESP RainMaker 客户案例 #1|Halonix
  • 【Linux】adduser命令使用
  • 中文连续视觉语音识别挑战赛
  • (ubuntu) 安装JDK
  • 工程管理系统源码之全面+高效的工程项目管理软件
  • 网络安全常见问题隐患及其应对措施
  • 《机器学习分类器 二》——朴素的贝叶斯算法,项目实践,算法实践。
  • 亚马逊英国站手机/笔记本电脑电池和充电器的合规标准是什么?
  • 亚马逊云科技顾凡解读云计算助力初创快速抢滩生成式AI新风口
  • Unity之ShaderGraph如何实现积雪效果
  • 实现mnist手写数字识别
  • Camera BSP之GPIO/I2C/PMIC简介