搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小舞很执着
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
ARP cache 更新的几种情况
2
蓝易云 - Kotlin语言特性 - Lambda表达式的定义及用法
3
大数据开发工程师岗位分析_每个人输出一份关于大数据工程师某个岗位的分析报告;要求企业数量至少15家,对
4
面向对象——继承(c++)_c++ 结构体继承
5
Three.js——基于原生WebGL封装运行的三维引擎_webgl 3d引擎
6
在python代码中导入自己写的.py文件_python导入自己写的py
7
initializing mysql database:_MySql installation database initialization error
8
apache项目概览_apache vcl
9
java-从本地上传到HDFS_怎么将window日志文件上传至hdfsjava代码实现
10
spring data neo4j 中节点实体之间的关系在代码中怎样维护
当前位置:
article
> 正文
RDMA建链的3次握手和断链的4次挥手流程?
作者:小舞很执着 | 2024-07-01 01:17:51
赞
踩
RDMA建链的3次握手和断链的4次挥手流程?
文章目录
基础信息
建链 3次握手
断链4次挥手
建联状态
active端
passive端
报文结构
函数关系
其他
后记
基础信息
CM: Communication Management 通信管理 连接管理
SIDR: Service ID Resolution Protocol. 作用: enables users of Unreliable Datagram service to locate Queue Pairs supporting their desired service.
MAD: Management Datagrams 管理报文
GSI:General Services Interface 通用服务接口
QP1:专用与rdma cm建链
分为server端和client端,在RDMA中server端叫passive端(被动)、client端叫active端(主动)
建链 3次握手
req包、rep包、RTU包,rdma中叫做msg
Request (REQ) message,
Response (REP) message,
RTU:Ready To Use。 在内核消息处理中收到该msg之后,会将qp attribute设置RTS和RTR。 read to send ;read to receive
Queue Pair Number (QPN): QP数字
EEC: End to End Context 端到端上下文
req中告诉对端cid、qkey、qpn、guid以及udp的sport
rep中同样告诉对端cid(communication id 通信id,相当于session回话的id,每次建联有一个id)、qkey、qpn。(相当于也是对req的一个ack,同时携带自己的信息)
rtu包含了lcid和rcid表示本地和远端的cid,算是以此确认。
同样的后面讲的dreq中也会携带lcid和rcid
断链4次挥手
双端都需要发送所以累计四次
建联状态
active端
passive端
报文结构
报文结构:BTH | DETH | MAD header| MAD payload | CRC
其中MAD payload,根据消息不同,是不同的消息内容:req、rep、mra、rtu等
BTH:Base Transport Header:基础传输头,主要是opcode(比如write 0x10、send 0x4、ack 0x17)、Partition key和目标QP(cm的目标QP都是1),以及报序号
DETH:Datagram Extended Transport Header:数据报文扩展传输头。主要是query key和source QP。(BTH中是dst qp,deth中是src qp,有点类似以太的smac和dmac。
MAD:Management Datagrams 管理报文。主要包含Method(是send recv等)、Attribute ID(属性ID,比如req 0x10、rep 0x13、mra 0x11、rtu 0x14、dreq 0x15、drep 0x16)
管理路线:BEM结构 E表示extend,E可以是DETH(数据)、AETH(ack)、RETH(rdma)
数据路线:BD结构:BTH头部和Data的数据比如rdma send数据
BTH找QP与optype、DETH找sq和key、MAD找attid(比如cm req)、MAD payload找具体的cm msg信息(比如cmd id 等)
函数关系
内核中处理msg的发包函数都是
ib_send_cm_xxx
开头,比如ib_send_cm_req、ib_send_cm_rep、ib_send_cm_mra、ib_send_cm_rtu…
收包函数都是
cm_xxx_handler
,比如cm_req_handler、cm_rep_handler、cm_rtu_handler、cm_mar_handler、cm_dreq_handler…
内核收包处理流程,是ib_cm.ko中调用ib_register_mad_agent注册cm_recv_handler到mad层进行收包,
cm_recv_handler
中收到后会启动一个work,然后通过work event发给内核work上下文进行处理,也就是cm_req_xxx这些函数会在work上下文处理,work的入口函数是cm_work_handler。然后
cm_work_handler
根据event是req、rep等调用到对应的cm_xxx_handler.
rdma对应的API调用底层关系是 rdma api -> rdma cm文件(infiniband/rdma_cm) -> 发送write dev函数 -> 内核态ucma处理 -> 内核态rdma接口处理 -> 内核态cma(代理)处理 -> 内核态cm处理 -> 内核态mlnx处理 -> 网卡硬件处理
比如rdma_acccpt接口实现就是 打开infiniband/rdma_cm文件,封装wirte数据命令 CM_CMD_ACCEPT,通过write发送给内核,内核根据cmd的值在ucma_cmd_table中进行match,匹配后调用对应函数ucma_accept函数,然后调用[k] rdma层的rdma_accept、然后调用cm代理cma层的cma_accept,然后继续往后调用
rdma_connect会发送req 报文
rdma_listen会监听,进入rdma_accept后会发送rep报文或者mra,其他报文类似
ib_send_cm_xxx最后都会调用ib_post_send_mad发送给mad层,然后mad层调用ib_send_mad调用ib_post_send,然后调用到mlx5_ib_post_send异步发送
其他
所有的RoCE v2的报文都会经过UDP,可以通过tcp抓包,但是tcp抓包需要指定端口是mlx5的端口,而不是eth口。
后记
更多细节以后逐渐补充。
本文内容由网友自发贡献,转载请注明出处:
【wpsshop博客】
推荐阅读
article
MySQL
-
数据库
设计与
实现
--头歌_第1关
:
从
概念模型
到
mysql
实现
...
用户分两类,普通用户可以订票,管理用户有权限维护和管理整个系统的运营。请根据上述信息和所给ER图,给出在
MySQL
实现
f...
赞
踩
article
简单又复杂
的
IPSec
vpn
配置
_
esp
encryption
-
algorithm
...
不理解
的
不要管,先原封不动
的
打出来,然后在理解就容易了_
esp
encryption
-
algorithm
esp
encr...
赞
踩
article
植物
大战
僵尸
「
杂交
版
」for
Mac
v2.1
中文移植
版
含存档...
植物
大战
僵尸
杂交
版
迎来了
v2.1
版
本更新,增加了更多有趣的
植物
与
僵尸
,同时还上线了游戏内商店功能,可以用来购买道具和
植物
...
赞
踩
article
为什么要做
Redis
分区
和
分片
...
Redis
分区
和
分片
需要仔细规划
和
实施,以确保数据一致性、高效的数据访问模式
和
良好的系统性能。-
分区
可以避免数据访问或...
赞
踩
article
通过
Cloudflare
Workers
自定义
代理
规则...
本文介绍了使用微软的 Copilot 时可能遇到的梯子设置问题,并提出了利用
Cloudflare
Workers
来修...
赞
踩
article
网络
基础200个重要
知识点
梳理——通信基础(1-20)_
报文
和
数据
载荷
的
区别...
网络
基础关键
知识点
总结_
报文
和
数据
载荷
的
区别
报文
和
数据
载荷
的
区别 参考书目:《HCNA网...
赞
踩
article
【
华为
OD机考 统一考试机试C卷】寻找
身高
相近
的
小朋友
(C
语言
)_
华为
od
机试
真题
-寻找
身高
相近
的
小...
小明今年升学到了小学1年级来到新班级后,发现其他
小朋友
身高
参差不齐,然后就想基于各
小朋友
和自己
的
身高
差,对他们进行排序,...
赞
踩
article
CuteHttpFileSever使用指南_
cute
file
...
CuteHttpFileSever使用指南_
cute
file
cute
file
...
赞
踩
article
探索
ChatUI
:构建
交互式
聊天
应用
的
高效框架...
探索
ChatUI
:构建
交互式
聊天
应用
的
高效框架项目地址:https://gitcode.com/stridercheng...
赞
踩
article
Visual
Studio
:下载并打开
GitHub
存储库中的代码_
github
下载项目在visua...
1、复制下载链接到剪贴板2、在
Visual
Studio
中,选择“团队资源管理器”选项卡,打开“团队资源管理器” 。...
赞
踩
article
数据库
概念
结构
设计
-
设计
步骤、
设计
方法、
集成
中去除冲突和冗余_
数据库
概要
模型
设计
描述
...
比如我们前面
设计
的学校信息管理系统,各局部E-R
模型
集成
后,可能还存在着教研室实体和课程实体的任课单位联系,而该联系可体...
赞
踩
article
两年
Android
开发
三面上岸腾讯
,
这些
核心
知识点
建议收藏(1)...
本文概述了一位
Android
开发
者面试经历
,
涉及技术点包括MVC/MVP/MVVM模式、组件化实践、内存管理工具、Jav...
赞
踩
article
【
GPT
-
5
一年半后发布?对此你有何期待?】
GPT
-
5
:
AI
技术
的
新纪元...
IT之家6月22日消息,在美国达特茅斯工程学院周四公布
的
采访中,Open
AI
首席
技术
官米拉·穆拉蒂被问及
GPT
-
5
是否会...
赞
踩
article
git
/
docker
提交
和上传等操作以及
常见问题
整理
_
docker
提交
修改
...
1. 上传本地文件1. Create a new repository on GitHub.com2.
git
init...
赞
踩
article
elasticsearch
设置
密码
_es服务
设置
密码
...
本文详细介绍了如何使用Docker安装并配置Elasticsearch7.10,包括创建挂载目录、
设置
http和tran...
赞
踩
article
Linux
运维
命令
大全_
linux
运维 远程执行
命令
...
【代码】
Linux
运维
命令
。_
linux
运维 远程执行
命令
linux
运维 远程执行
命令
...
赞
踩
article
SpringBoot
集成
RabbitMQ
_
activimq
指定一次
消费
数量...
项目中用到rabbitMQ来削流量峰值,简单记录一下springboot如何集成rabbitMQ的。
SpringBoot
...
赞
踩
article
windows
下安装
rabbitmq
_
windows
安装
rabbitmq
...
在Path变量中加入信息。_
windows
安装
rabbitmq
windows
安装
rabbitmq
...
赞
踩
article
Charles
抓包
工具_
charles
手机
抓包
...
Charles
是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接
Charles
的代理访问互联网时,C...
赞
踩
article
git
remote
add
origin
错误...
如果输入$Git
remote
add
origin
git@github.com:djqiang(github帐号名)/g...
赞
踩
相关标签
数据库
mysql
网络
macos
游戏
redis
缓存
工具
服务器
网络协议
华为od
c语言
开发语言
linux
android
人工智能
gpt
语言模型
自然语言处理
神经网络
GPT-5
git