Mellanox RoCE卡调试笔记
来源:互联网 发布:西班牙4g手机网络制式 编辑:程序博客网 时间:2024/06/03 19:28
拿到3块mellanox 的XC3卡,装到3个服务器上,开始RDMA调试。代码都是我自己的,使用rdma_cm库进行开发。
Mellanox的RDMA是基于ROCE协议的,因此需要物理层保证可靠传输,不能丢包。为此交换机需要支持DCB, PFC等流控技术。这样子系统一下子就复杂了,为了简化系统,决定不使用交换机,把服务器之间用光纤直连。好在我只有3台服务器,刚好可以连起来,1台对2台即可。
ubuntu14.04系统居然自带了mellanox XC3的驱动,这让我很惊奇,作为普通网卡用这已经可以工作了。但我要用的是RDMA,因此决定还是重新装一下驱动。
- 步骤1:去mellanox官网上找驱动
这个过程可以用两个词形容,大海捞针,中彩票。 网站上内容很多,各种文章也很多,但是没有哪个是教你step by step就能工作的,能下载的软件也很多,也不知道哪个驱动是给那种卡用的,关键是,下错了你也能装上,只是运行是不正常而已。比如,我就先下载到了mlnx-en-3.3-1.0.0.0.tgz, 装上后TCP正常工作没问题,RDMA不能用。然后从各种官网的网页里面的各种方法乱试,又找到一个MLNX_OFED_LINUX-3.3-1.0.4.0-ubuntu14.04-x86_64.tgz, 这个才对了。
大概mellanox的人都很清楚这些区别,但对我一个新手,这太不友好了。
步骤2: rping, ib_xxxx_lat/bw测试
这一步其实是和第1步合并执行的,装完了驱动总要试试能不能工作。能工作才说明装对了。步骤3:测试我自己的rdma程序
我的程序工作原理是这样的:- server启动,等待client连接
- client 用RDMA_SEND把本地的一个buffer的rkey, raddress发送给server
- server收到后,用RDMA_READ,读取client的数据
1和2都执行成功了,3遇到错误,检查completion 时wr里面的vendor error, 是138。开始求助mellanox的技术支持这个错误是什么,对方说是:indicates InvReq Nack. 又追问Nack是什么,说是not ACK。
我的代码之前是用softIWARP调试通过了的,所以认为没有太多低级错误,以为这样的vendor error能很快解决,但实际上厂家也给不出任何意见。还是得自己慢慢调试。又是从其网站上的各种文章里面的各种方法挨个试验,其中包括了把roce 模式改成v2,
# echo "options mlx4_core roce_mode=2" > /etc/modprobe.d/mlx4_core.conf
这个对·vendor error 138·没有帮助,但对后面的调试造成了困难
后来发现ib_read_lat
程序能正常工作,基于这个线索开始找我的代码和ib_read_lat
代码的区别。要不怎么说开源好呢,还有最后的绝招可以用,看代码啊!
其实也没那么容易,ib_read_lat
的代码很多,不是一下子能找出关键点,只能一点一点把ib_read_lat
的代码往下减,果然,减到一定程度,出现了和我同样的错误,再仔细看这减掉的部分,错误其实很简单,在调用rdma_connect
函数时,要设置connection param的responder_resources
等几个参数
struct rdma_conn_param cm_params;cm_params.responder_resources = priv_data.hsqsize;cm_params.initiator_depth = priv_data.hsqsize;cm_params.retry_count = 7;cm_params.rnr_retry_count = 7;rdma_connect(evt->id, &cm_params);
这里不得不第一次吐槽rdma_cm,或者ofed,或者mellanox的错误信息,太不清晰了,这么简单的错误,如果有明确的错误指示,何至于让我浪费几天的时间。
- 步骤4: 继续运行我的程序
这里先交代一下,前一步调试问题时,为缩小问题的来源范围,开始在单个节点上调试,即: server, client都运行在同一个机器上。
我的程序需要运行在不同的机器上,在节点间进行RDMA传输(这个想必是自然的,没人在同一个节点上吃饱了撑的用RDMA)。结果发现, 联不通啊!!
又换回ib_send_bw
这个工具开始测试,发现同样联不通,问题是:
ethernet_read_keys: Couldn't read remote addressUnable to read to socket/rdam_cmFailed to close connection between server and clientTrying to close this side resources
又找厂家的支持,结果, 没有结果
各种google,和官网的文章乱看,重装驱动,无果。 然后忽然想起了我自己的笔记,这里插播广告:居家旅行, 编程调试必备之良器, evernote, 你值得拥有, 发现了我在前面把一个机器改成了RoCE v2模式!
既然如此,那就都用v2模式,问题解决!
- 步骤5:重复步骤4, 运行我的程序
cao! 还是不行,换了个新说法:
# ib_send_bw -R 192.168.a.bReceived 10 times ADDR_ERROR Unable to perform rdma_client function Unable to init the socket connection
先说明一下不重要的,这里的测试使用了-R
参数,表示使用rdma_cm
进行连接管理,这也是我的程序需要用的,前面的步骤测试时没有使用这个参数。
可以想象我有多么崩溃,不过我觉得不用找厂家了,厂家也提供不了什么,其实有经验的还是一线的工作者,所以认识的很多人,都被上游厂家挖走做AE/FAE去了。这次我先看了我的evernote,所以浪费时间不多。在去年的笔记里找到了下面的这个配置:
# mount -t configfs none /sys/kernel/config# cd /sys/kernel/config/rdma_cm# mkdir mlx4_0# cd mlx4_0# echo RoCE V2 > default_roce_mode
至此,终于我的代码可以工作了!
- Mellanox RoCE卡调试笔记
- RDMA & RoCE
- roce初始化1
- RoCE与RDMA技术
- 在RHEL6上安装Mellanox Infiniband hardware (HCA卡)的驱动
- mellanox论坛网址
- [转帖]InfiniBand, RDMA, iWARP, RoCE
- openmpi 2.1.1 RoCE 支持
- mellanox官方驱动安装步骤
- roce和IB注册的flow
- 调试笔记
- 调试笔记
- 调试笔记
- Mellanox网卡,使用netperf进行性能测试
- 【高性能】Mellanox交换机基本设置
- Mellanox网卡不能分配VF解决方法
- 机房交换机基础配置 -- Mellanox SN2700
- 麦科捷联合 Mellanox 加速eXtremeDB 集群性能
- 处理硬盘物理坏道方法
- nmon工具的使用
- CentOS使用yum命令安装vsftpcentos
- HTML5_03
- jQuery中动画效果
- Mellanox RoCE卡调试笔记
- c:forEach中的 varStatus
- cnn_AVS_proj中的文件数据读写
- 今天学习c++时编译出现了error C4996这样的错误
- ACM——————母牛故事
- 电脑经验 sublime 编写HTML,运行时中文部分出现乱码
- unity-unet-设置player的开始位置
- 内存不足的解决方法
- DFS深度优先搜索(3)--hdu2181(哈密顿绕行世界问题)(基础题)