RDMA RoCev2 CM建链和Socket建链测试

news2024/11/28 0:50:49

前言

RDMA在高性能计算,AI大模型训练中发挥着重要的作用。

主流支持RDMA的协议有IB、RoCev1、RoCev2、iWARP。

其中RoCev2是应用最广泛的协议,因为其RDMA over UDP/IP,不依赖昂贵的IB网络设备,同时支持路由,性能上也接近原生IB水准。

环境准备

虚拟机

两台虚拟机,测试接口设置同一个二层网络(同一个Bridge)

node-1配置

ifconfig  ens192 10.0.0.1/24

node-2配置

ifconfig  ens192 10.0.0.2/24

node-1 ping node-2

root@u20-test:~# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.277 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.284 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.265 ms

安装RDMA软件

sudo apt install libibverbs1 ibverbs-utils librdmacm1 libibumad3 ibverbs-providers rdma-core rdmacm-utils perftest

配置RDMA网卡

node-1

root@u20-test:~# rdma link add 1 type rxe netdev ens192
root@u20-test:~# 
root@u20-test:~# rdma link
link rocep11s0/1 state ACTIVE physical_state LINK_UP netdev ens192 
root@u20-test:~# 
root@u20-test:~# ibv_devices
    device                 node GUID
    ------              ----------------
    rocep11s0           020c29fffe3ed0e9
root@u20-test:~# ibv_devinfo -d rocep11s0
hca_id: rocep11s0
        transport:                      InfiniBand (0)
        fw_ver:                         0.0.0
        node_guid:                      020c:29ff:fe3e:d0e9
        sys_image_guid:                 020c:29ff:fe3e:d0e9
        vendor_id:                      0x0000
        vendor_part_id:                 0
        hw_ver:                         0x0
        phys_port_cnt:                  1
                port:   1
                        state:                  PORT_ACTIVE (4)
                        max_mtu:                4096 (5)
                        active_mtu:             1024 (3)
                        sm_lid:                 0
                        port_lid:               0
                        port_lmc:               0x00
                        link_layer:             Ethernet

node-2

root@u20-test:~# rdma link add rxeee type rxe netdev ens192
root@u20-test:~# ibv_devices 
    device                 node GUID
    ------              ----------------
    rocep11s0           020c29fffe8ce06a
root@u20-test:~# ibv_devinfo 
hca_id: rocep11s0
        transport:                      InfiniBand (0)
        fw_ver:                         0.0.0
        node_guid:                      020c:29ff:fe8c:e06a
        sys_image_guid:                 020c:29ff:fe8c:e06a
        vendor_id:                      0x0000
        vendor_part_id:                 0
        hw_ver:                         0x0
        phys_port_cnt:                  1
                port:   1
                        state:                  PORT_ACTIVE (4)
                        max_mtu:                4096 (5)
                        active_mtu:             1024 (3)
                        sm_lid:                 0
                        port_lid:               0
                        port_lmc:               0x00
                        link_layer:             Ethernet

CM建链测试

测试命令

node-2建立服务端

其中参数 -R 代表通过cm建链

root@u20-test:~# ib_send_bw -d rocep11s0 -R

************************************
* Waiting for client to connect... *
************************************

node-1连接node-2

root@u20-test:~# ib_send_bw -d rocep11s0 10.0.0.2 -R
---------------------------------------------------------------------------------------
                    Send BW Test
 Dual-port       : OFF          Device         : rocep11s0
 Number of qps   : 1            Transport type : IB
 Connection type : RC           Using SRQ      : OFF
 TX depth        : 128
 CQ Moderation   : 100
 Mtu             : 1024[B]
 Link type       : Ethernet
 GID index       : 1
 Max inline data : 0[B]
 rdma_cm QPs     : ON
 Data ex. method : rdma_cm
---------------------------------------------------------------------------------------
 local address: LID 0000 QPN 0x0012 PSN 0x184d5e
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:01
 remote address: LID 0000 QPN 0x0012 PSN 0x9b467e
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:02
---------------------------------------------------------------------------------------
 #bytes     #iterations    BW peak[MB/sec]    BW average[MB/sec]   MsgRate[Mpps]
 65536      1000             30.08              28.94              0.000463
---------------------------------------------------------------------------------------

建立链接

CM REQ

其中关键信息:

Base Transport Header中目的QP 0x000001代表管理QP

DETH中 Queue Key 80010000,是特殊的专门为CM使用的。

IB Spec:

To prevent address spoofing attempts by user applications, the
source IP address and the port number shall be filled in by privileged
kernel mode. The passive side shall verify that the CM REQ Message
contains a privileged Q-key and its value is 0x80010000.

CM头中Local QPN 0x000011 ,此次通信本地的Queue Pair Number, 对方往本端发的消息要用该QPN作为目的QPN在BTH中。
cm req

CM REP

各字段与CM请求一致
请添加图片描述

CM RTU

Ready to Use

确认建链,Communication id为之前收发的ID
cm_rtu

数据传输

Send Only

往对端 QPN上发数据, 一个send only 一个ack
sendonly

Send middle

Send middle就不同了,发了60个,有一个ack
sendmiddle

断开链接

node-1 node-2各自发断链请求,再都回复。

四次挥手完成断链。
cm断链

Socket建链测试

测试命令

node-2 开启服务端,没有-r,默认socket建链

root@u20-test:~# ib_send_bw -d rocep11s0

************************************
* Waiting for client to connect... *
************************************

node-1连接node-2

root@u20-test:~# ib_send_bw -d rocep11s0 10.0.0.2
---------------------------------------------------------------------------------------
                    Send BW Test
 Dual-port       : OFF          Device         : rocep11s0
 Number of qps   : 1            Transport type : IB
 Connection type : RC           Using SRQ      : OFF
 TX depth        : 128
 CQ Moderation   : 100
 Mtu             : 1024[B]
 Link type       : Ethernet
 GID index       : 1
 Max inline data : 0[B]
 rdma_cm QPs     : OFF
 Data ex. method : Ethernet
---------------------------------------------------------------------------------------
 local address: LID 0000 QPN 0x0011 PSN 0xe5662a
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:01
 remote address: LID 0000 QPN 0x0011 PSN 0x4e7fad
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:02
---------------------------------------------------------------------------------------
 #bytes     #iterations    BW peak[MB/sec]    BW average[MB/sec]   MsgRate[Mpps]
 65536      1000             27.39              26.82              0.000429

建立链接

请求

三次握手以后,十几个包不知道干什么的,然后看到这个建链请求和响应

中间有个000011是local QPN, e5662是local PSN

其他字段暂时不知道什么意思
请添加图片描述

响应

请添加图片描述

数据传输

第一个数据包PSN,就是建链是指定的e5662a.QPN是0x00011.

Send First

请添加图片描述

Send Last

请添加图片描述

ACK

acknowledge 是对 send last的响应,表示前面几十个包已经收到。
请添加图片描述

断开链

与CM一样四次挥手。

node-1 断链请求

请添加图片描述

node-2 断链请求

请添加图片描述

node-2 done

请添加图片描述

node-1 done

请添加图片描述

参考资料

https://zhuanlan.zhihu.com/p/164908617

IB Specification Vol 1-Release-1.4-2020-04-07

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/742102.html

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

相关文章

Azure Kinect 之 Note(一)

Azure Kinect Azure Kinect DK 是一款开发人员工具包,配有先进的AI 传感器,提供复杂的计算机视觉和语音模型。 Kinect 将深度传感器、空间麦克风阵列与视频摄像头和方向传感器整合成一体式的小型设备,提供多种模式、选项和软件开发工具包(S…

Web开发模式

Web开发介绍 1 什么是web开发 Web:全球广域网,也称为万维网(www World Wide Web),能够通过浏览器访问的网站。 所以Web开发说白了,就是开发网站的,例如下图所示的网站:淘宝,京东等等 那么我们…

【*2400 线段树】CF444 C

Problem - C - Codeforces 题意: 思路: 首先询问的是权值和,那么维护一个区间和sum,因此pushup部分就好了 考虑修改,区间修改,因此要打标记 一次修改对区间和的贡献不能直接计算,因此我们考…

8-1、Deployment运行应用的机制

Kubernetes 通过各种 Controller 来管理 Pod 的生命周期。为了满足不同业务场景,Kubernetes 开发了 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 、 CronJob 等多种 Controller。 用户通过 kubectl 创建 Depl…

ENSP模拟器如何设置命令行和描述框的背景颜色及字体

ENSP模拟器如何设置命令行和描述框的背景颜色及字体 选择“菜单 > 工具 > 选项”, 在弹出界面中选择“字体设置”。 单击“字体”后的“选择”设置字体,单击“字体颜色”后的“选择”设置字颜色,单击“背景颜色”后的“选择”设置…

UnityVR--机械臂场景11-简单流水线应用3

目录 一. 前言 二. 设置一个定时器 三. 添加机械臂事件 四. 机械臂控制函数OnArmCtrl 五. 定义上面的3个机械臂移动方法 六. 机械臂各关节转动控制 七. 场景实现 八. 完整代码 一. 前言 上一篇使用了DoTween插件,并且改写了事件的相关参数,本篇…

jenkins 关闭关闭CSRF Protection(跨站请求伪造保护)

jenkins版本 我的jenkins版本是:2.332.4 背景 Jenkins版本自2.204.6以来的重大变更有:删除禁用 CSRF 保护的功能。 从较旧版本的 Jenkins 升级的实例将启用 CSRF 保护和设置默认的发行者,如果之前被禁用。 解决方法 老版本Jenkins的CSRF…

QT各种控件常用样式表qss示例

1、表格控件QTableWidget和QTableView 这个控件比较复杂,里面包含了滑动条、表头(又细分为内容区/空白区)、表格、整体、左上角按钮等多种不同的元素,他们之间有复杂的叠层关系。需要通过各种“选择器”来指定样式的作用范围。 …

解决openKylin显示不能自适应VMware窗口大小的教程

目录 前言解决步骤效果图 前言 相信很多朋友们使用VMware配置成功openKylin后对遇到不能全屏显示的问题很头痛,今天我用我自己的电脑为例,给大家示范一下。 网上对于虚拟机不能自适应VMware主要有两个方案 一个是编辑虚拟机设置----显示器----指定监…

如何用ChatGPT做咨询师,附Prompt

对基本问题研究得不深不透、得不到可靠的分析框架支持的情况下,仓促采取就事论事的应对措施 ,由于未能触及事情的根本,往往非但不能获得预期的效果,相反可能引发新的矛盾。 ——吴敬琏(著名经济学家,国务院…

【JavaEE初阶】JavaScript基础语法

摄影分享: 文章目录 1.初识JavaScript1.1JavaScript简介1.2JavaScript 和 HTML 和 CSS 之间的关系1.3JavaScript 运行过程1.4JavaScript 的组成 2.JS基础语法2.1在HTML中引入JS2.2第一个JS程序2.3变量2.4JS的内置类型2.4.1数字2.4.2字符串2.4.3布尔类型2.4.4undefined类型和nu…

821. 跳台阶

链接: 821. 跳台阶 - AcWing题库 题目: 一个楼梯共有 nn 级台阶,每次可以走一级或者两级,问从第 00 级台阶走到第 nn 级台阶一共有多少种方案。 输入格式 共一行,包含一个整数 nn。 输出格式 共一行,包含一…

性能测试:Jmeter压测过程中的短信验证码读取

目录 问题背景 解决思路 实现方法 1. 建立JDBC连接 2. 使用JDBC请求获取验证码 3. 使用正则将验证码提取并使用 问题背景 现如今国内的大部分软件或者网站应用,普遍流行使用短信业务,比如登录、注册以及特定的业务通知等。 对于这些业务&#xff…

1.Cesium介绍及环境配置

前言 鸽了半年,flag立的太多,稿子存了100多篇,都没有开始排版整理,这些天正好学习cesium,决定每天更新一篇,提提神!🤔😲😁 一、Cesium简介 Cesium是一个用于显…

服务器该怎么预防勒索病毒

场景描述 随着互联网飞速发展,各企业不论大小基本都搭建了属于自己公司的服务器。例如文件服务器、代码服务器、业务系统服务器、数据库服务器等。虽然服务器种类各有不同,但共同点都在于:是公司重要的数据中心。一旦被勒索病毒侵占&#xf…

【二分查找】69. x 的平方根

69. x 的平方根 解题思路 使用二分查找注意 这里当计算的Mid在x的平方根附近之后,直接返回mid即可 class Solution {public int mySqrt(int x) {// 二分查找 查找区间 mid * mid xint left 0;int right x/ 2 1;int mid 0;if(x 0){return 0;}if(x 1){retur…

字符函数和字符串函数的模拟实现

求字符串长度 strlen 长度不受限制的字符串函数 strcpystrcmpstrcat长度受限制的字符串函数 strnlenstrncmpstrncpystrncat字符串查找 strstrstrtok错误信息报告 strerror内存操作函数 memcpymemmovememsetmemcmp 首先我们来看strlen字符串是以‘\0’为结束标志,str…

基于vant封装的动态表单(VFrom使用教程)

vant-ui是属于vue开发移动端中用的比较多的一个组件库了,网上基于它的一些组件的二次封装也数不胜数,但是却都是零零散散,不成体系。总不能用一个就去找类似的封装吧,这样拼凑起来的也不是我们想要的。尤其,涉及众多表…

Python单元测试

单元测试 测试可以保证你的代码在一系列给定条件下正常工作测试允许人们确保对代码的改动不会破坏现有的功能测试迫使人们在不寻常条件的情况下思考代码,这可能会揭示出逻辑错误良好的测试要求模块化,解耦代码,这是一个良好的系统设计的标志…

Oracle select 和read的权限

只有select权限,也可以for update锁表。 我懵了一下,不确认啊,我先测试了下,如下所示: create user test11 identified by test11; create user test12 identified by test12; grant connect,resource to test11,tes…