从0开始的InfiniBand硬件踩坑过程
由于科学计算实验的需求,需要使用InfiniBand做一个持久性内存全互联的分布式存储系统。其中从网卡到交换机使用Mellanox全家桶,而在Mellanox网卡与交换机的使用过程中还是遇到了不少的问题。在此将博主从0到RDMA的实践过程做一个总结,以避免大家在做此类研究的时踩坑、浪费时间。
1.首先准备了Mellanox的网卡(博主使用的是ConnectX-3 354A)插到Pice*8的槽上,用InfiniBand连接线将网卡与交换机或者网卡与网卡之间来连接起来。不用奇怪,此时网卡上的灯不会亮
2.进入到节点上查看PCI设备可以看到网卡 lspci |grep Mellanox
查看主机是否安装HCA lspci -v |grep Mellanox
3.安装IB网卡驱动
上官网找到符合自己系统的驱动
https://cn.mellanox.com/page/products_dyn?product_family=26&mtag=linux_sw_drivers
红色框中连接不能直接wget,点进去之后会有让你Accept的东西,然后才给你下载连接。
在这有些小建议,最好用最新系统装,并且把内核更新到最新,网卡驱动版本一般都会比较超前,不用担心越界。老一些版本的系统可能会出稀奇古怪的内核不匹配问题,或者重启之后就出现mlx4_ib belong to kernel which is not a part of MLNX failed skipping 这样子的错误,博主在centos 7.4折腾了很久都是这个错误,更新版本与内核后就没这个问题了。至于这个问题的具体原因网上有其他博客说过这个的解决方案,但非常麻烦且各种缺失这了那了。
查看系统版本:uname -a lsb_release-a
更新系统版本:yum update;
更新内核:yum upgrade kernel
Wget到驱动安装包后解压
# tar -zxvf MLNX_OFED_LINUX-4.7-1.0.0.1-rhel7.7-x86_64.tgz
进入到MLNX_OFED_LINUX-4.7-1.0.0.1-rhel7.7-x86_64文件夹,执行驱动安装
# ./mlnxofedinstall
这时候有可能会提示缺少这了那了,根据提示缺啥按
yum install gtk2 atk tcl tcsh tk
然后重新执行 # ./mlnxofedinstall 继续根据提示缺少啥安装啥,如果不出问题,系统会自己查找到Mellanox设备,并且会提示update firmware之类的东西,不用担心,系统重启后会自动更新。这块忘了截图
小Tips :一般安装好了以后系统就直接自己启动了IB驱动,并且默认的是开机自启动,不用自己设置。
如果没有启动#systemctl start openibd 启动一下
设置开机自启动(一般不用):#chkconfig openibd on
启动好了可以看到
安装完驱动,插好线,这个时候就可以看到网卡上的端口灯亮了,通过ibstat可以看到具体的IB端口信息
如上图,显示的是端口1正在初始化,且状态是LinkUp,初始化状态表示还存在问题(暂时先不考虑)。
卸载驱动则可以通过/usr/sbin/ofed_uninstall.sh或者进入到安装驱动的文件夹下运行卸载驱动程序。
通过ibnodes可以查看互联的IB节点信息
4.设置infiniband网卡IP IPoIB
Ifconfig 可以看到网卡信息
但会出现Infiniband hardware address can be incorrect! Please read BUGS section in ifconfig(8)的提示,这块主要是由于IB网卡的MAC地址比较长,而ifconfig一般只认前八位。现在都推荐用 ip a命令查看网卡信息(我还是喜欢用ifconfig)。
InfiniBand网卡的IP设置办法与以太网查不到,但要注意是的一定要加上TYPE,要不然会当作普通以太网处理,去查找以太网设备,然后提示找不到设备,或者网卡不符合,如图
其中 HWADDR与UUID可以不写,写的话要自己给ifcfg-ib0生成一个UUID,#uuidgen eth1,最主要的就是一定要加TYPE=InfiniBand,博主在这块浪费了好久时间,做了很多无用功,不过也搞清楚了这中间的部分细节。设置好了通过ip a可以查看
5.IB网性能测试
还记得之前ibstat的initialzing吗,这个状态在IB网使用时会出现问题。
IB带宽测试在服务端执行:ib_send_bw -a -c UD -d mlx4_0 -i 1
在客户端执行ib_send_bw -a -c UD -d mlx4_0 -i 1 10.0.0.6
不行的原因initialzing,主要由于opensm没有开启。开启opensm可以整成运行服务端,客户端也一样
一切正常后测试过程可以看到
可以使用qperf测试其他内容,在服务端执行qperf
客户端执行qperf 10.0.0.5 ud_lat ud_bw rc_rdma_read_bw rc_rdma_write_bw uc_rdma_write_bw tcp_bw tcp_lat udp_bw udp_lat可以看到
至此InfiniBand硬件设置踩坑过程结束。