【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.mzph.cn/news/110029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何处理前端路由懒加载?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

使用dd命令来构造测试文件

近期因工作需要,需要构造大小随机的一些文件,作为测试场景的输入。 在Linux平台下,使用dd命令,可以方便的构造出符合要求的文件。 比如生成4M的文件,同时使用随机数作为输入,命令样例如下: dd…

Pytorch,矩阵求和维度变化解析

二维可以想象成一张纸, 三维可以想象成多张纸叠在一块 四维可以想成多沓纸 求和时,如果没设定keepdimTrue,则会消去相加的那一维度,否则则将维度变为1 A torch.arange(20).reshape(5, 4) A,A.shape, A.sum()(tensor([[ 0, 1, 2, 3],[ 4,…

AWS SAP-C02教程5--基础中间件

在AWS中除了计算、存储、网络之外,还有一些组件非常重要,包括基础组件、消息队列组件、日志组件、编排组件等,接下来就通过分成几个不同类别(这个分类按照AWS的大概分类进行分类,并无统一标准,只是具备一定相同功能归类在一起方便记忆) 目录 1 消息中间件1.1 SQS1.1.1 …

XSS攻击(1), 测试XSS漏洞, 获取cookie

XSS漏洞, 测试XSS漏洞, 获取cookie 一, 概念: XSS(Cross-Site Scripting), 跨站攻击脚本, XSS漏洞发生在前端, 依赖于浏览器的解析引擎, 让前端执行攻击代码. XSS其实也算注入类的攻击, XSS代码注入需要有JavaScript编程基础. 二, 目的: XSS(跨站脚本&#xff0…

js实现红包雨功能(canvas,react,ts),包括图片不规则旋转、大小、转速、掉落速度控制、屏幕最大红包数量控制等功能

介绍 本文功能由canvas实现红包雨功能(index.tsx)本文为react的ts版。如有其他版本需求可评论区观赏地址,需过墙 import React, { Component } from react; // import ./index.css; import moneyx from /assets/images/RedEnvelopeRain/bal…

Ubuntu - 安装 MySQL 8

以下是在 Ubuntu 上安装 MySQL 8 的完整步骤: 步骤 1:更新包列表 首先,打开终端并执行以下命令来确保包列表是最新的: sudo apt update 步骤 2:安装 MySQL 8 服务器 接下来,使用以下命令安装 MySQL 8 …

算水质TDS加温度补偿

先上图,就图里这款水质检测,用树莓派3/4的话,要配个温度检测作为温度校正,以及一个adc 元器件。我选ds18b20和ads1115。 再把模拟数据计算过程放一下: 温度检测元器件在农历钟那里提过,就是同款。此处先测个…

Android11 移植memtester压测内存

需求如题,从网上下载了memtest源码压缩包,准备放到系统源码编译,然后push到板子上执行,结果,编译出来一堆问题,报build err。 做如下代码改动: external/memtester-4.5.1/Android.mk | 16 exte…

Android 10.0 展讯平台关于ota升级开机logo的相关功能实现

1.前言 在android10.0的展讯平台的系统定制开发中,关于ota升级功能的需求也好多,但是对于ota升级开机logo这样的bmp图片,就不能像 升级其他功能一样简单做ota差分包,然后ota升级就可以了,接下来就带大家来实现这个功能 2.展讯平台关于ota升级开机logo的相关功能实现的相…

Java 中的自动装箱和拆箱

Java 中的自动装箱(Autoboxing)和拆箱(Unboxing)是指在基本数据类型和对应的包装类型之间进行自动转换的特性。 自动装箱是指将基本数据类型转换为对应的包装类型。当使用包装类型作为参数传递给需要相应基本数据类型的方法&…

机器学习基础之《回归与聚类算法(4)—逻辑回归与二分类(分类算法)》

一、什么是逻辑回归 1、逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广…

tomcat---动静分离

访问静态和动态页面分开 实现动态的静态页面负载均衡 实验一 准备阶段:三台虚拟机 nginx代理服务器 :20.0.0.40 tomcat1 :20.0.0.50 tomcat2:20.0.0.51 配置关闭虚拟机防火墙和安全机制 systemctl stop firewalld setenf…

vue3学习(九)--- keep-alive缓存组件

有时候我们不希望组件被重新渲染影响使用体验;或者处于性能考虑,避免多次重复渲染降低性能。而是希望组件可以缓存下来,维持当前的状态。这时候就需要用到keep-alive组件。 keep-alive有两个独有的生命周期:activated、 deactivated 接下来看…

使用cpolar内网端口映射技术实现U8用友ERP本地部署的异地访问

文章目录 前言1. 服务器本机安装U8并调试设置2. 用友U8借助cpolar实现企业远程办公2.1 在被控端电脑上,点击开始菜单栏,打开设置——系统2.2 找到远程桌面2.3 启用远程桌面 3. 安装cpolar内网穿透3.1 注册cpolar账号3.2 下载cpolar客户端 4. 获取远程桌面…

Linux - 常用基础指令

目录 part 1 ls tree stat part 2 clear pwd echo cd cal date part 3 touch mkdir rmdir rm cp mv part 4 cat more less head tail part 5 find which locate grep part 6 chmod chown chgrp sudo su part 7 uname id man手册 --help…

NTFS磁盘格式读写工具Tuxera NTFS 2023 for Mac中文破解版v2023含最新激活序列号

Tuxera NTFS 2023 Mac 是一个NTFS文件系统驱动程序,为解决Mac上不能对NTFS格式硬盘进行访问和读写而生。实现苹果Mac OS X系统读写Microsoft Windows NTFS文件系统,在硬盘、U盘等外接设备中进行全面访问、删除、修改等相关操作。 tuxera ntfs 2023 破解…

Web架构安全分析/http/URL/Cookie攻击

Web 架构安全分析 Web 工作机制及基本概念 传统 Web 架构 LAMP 网页 概念 网页就是我们可以通过浏览器上网看到的精美页面,一般都是经过浏览器渲染过的 .html 页面,html 语言在浏览器中渲染。其中包含了CSS、JavaScript 等前端技术。通过浏览器访问…

C++-openssl-aes-cbc-pkcs5

PKCS#5填充是PKCS#7填充的一个子集,在PKCS#7填充时BlockSize为8的时候,PKCS#5与PKCS#7填充是一样的,在BlockSize不同时PKCS#5与PKCS#7填充是不同的。 PKCS#5填充是将数据填充到8的倍数, 填充后数据长度的计算公式: 定于…

rabbitmq简单用法

ConnectionFactory ConnectionFactory类是RabbitMQ Java客户端库中的一个类,用于创建RabbitMQ连接。常用属性和方法如下: 属性: - host:RabbitMQ服务器的主机名,默认为localhost。 - port:RabbitMQ服务器…