由于科学计算实验的需求,需要使用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硬件设置踩坑过程结束。

从0开始的InfiniBand硬件踩坑过程的更多相关文章

  1. linux上安装redis的踩坑过程

    redis用处很广泛,我不再啰嗦了,我按照网上教程想在linux上安装下,开始了踩坑过程,网上买了一个linux centos7.3,滴滴云的,巨坑无比啊,不建议大家用这家的! redis 为4.0, ...

  2. React-Native 踩坑过程

    踩坑过程: 解决方法就是去 SDK Manager 把 23.0.1 的版本下载了 而如果报错信息中含有bintray.com.gradle.org等网址,请***,反复重试,或者去react nat ...

  3. 使用impala连接hive踩坑过程

    一.打包镜像出错 docker build总是出错,如果你用的是python3.7,可以考虑使用python3.6版本 并且注意:选择thrift-sasl==0.2.1,否则会出现: Attribu ...

  4. .NET Core 从1.1升级到2.0记录(Cookie中间件踩坑)

    .NET Core 2.0 新时代 万众瞩目的.NET Core 2.0终于发布了,原定于9.19的dotnetconf大会的发布时间大大提前了1个月,.NET Core 2.0/.NET Stand ...

  5. 记一次Docker中部署Asp.Net Core 3.0的踩坑过程

    最近公司打算重构目前直销报单系统到微信小程序中,目前的系统只能在PC上面使用,这两年也搞过App端,但是由于人员流动和公司架构调整最后都不了了之,只留下一堆写了一半的接口.以前的接口依然是使用Asp. ...

  6. mini-ndn0.5.0 安装教程 (避免踩坑)

    写在前面 首先需要确定一些配置,因为在安装的过程中需要编译一些内容,所以需要提前准备好. 本人之前ubuntu系统可能比较乱,在尝试很多次安装后,仍然失败,所以就直接重装了一下.说一下我自己的一些配置 ...

  7. 安装GourdScanV2的踩坑过程

    环境:ubuntu 16.04.1 1.安装dcoker sudo apt-get install docker.io 坑:sudo apt-get install docker 2.下载关于dock ...

  8. ubuntu 16.04安装nVidia显卡驱动和cuda/cudnn踩坑过程

    安装深度学习框架需要使用cuda/cudnn(GPU)来加速计算,而安装cuda/cudnn,首先需要安装nvidia的显卡驱动. 我在安装的整个过程中碰到了驱动冲突,循环登录两个问题,以至于最后不得 ...

  9. web项目踩坑过程

    sql函数设计: 一开始本来是直接用Java的jdbc直接传输操作语句的.但后来学了存储过程发现存储过程可以提高不少的效率.就重构了自己对数据库的操作代码.包括:开启,查找,修改,关闭. 开启:直接使 ...

随机推荐

  1. Python入门习题6.猜数游戏和其异常处理

    例6:在程序中预设一个0~9之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示“遗憾,太大了”:小于预设的数,显示“遗憾,太小了”,如此循环,直至猜中数,显示”预测N次,猜中了”,其中N是 ...

  2. 《剑指offer》面试题4 替换空格 Java版

    (给一个足够长的字符数组,其中有一段字符,将' '(空格)替换成'%' '2' '0'三个字符,原字符段由'\0'结尾) 书中方法:这道题如果从头到尾扫描数组并替换,会涉及到数组的移动.如果不移动元素 ...

  3. 最小割树(Gomory-Hu Tree)求无向图最小割详解 附 BZOJ2229,BZOJ4519题解

    最小割树(Gomory-Hu Tree) 前置知识 Gomory-Hu Tree是用来解决无向图最小割的问题的,所以我们需要了解无向图最小割的定义 和有向图类似,无向图上两点(x,y)的割定义为一个边 ...

  4. 利用java反射动态调用方法,生成grid数据

    项目中需要java后台查询并组装前台grid的数据,数据行数不定,数据行定义不定,开始用了最原始的方法,写了几百行,就是前台需要什么字段后台拼接什么字段,java代码冗余量非常大,并且不够灵活,一旦前 ...

  5. python ORM的使用

    安装 >pip install sqlalchemy #coding=utf-8 ''' 原始的sql语句 CREATE TABLE user ( id INTEGER NOT NULL AUT ...

  6. 修改ps工具栏字体大小

     修改ps工具栏字体大小 先改电脑分辨率或者改首选项--界面---文字,退出后,重新打开,但你会发现问题还是没解决,我们接着往下  找到文件夹安装目录下的photoshops.exe启动文件(查找方法 ...

  7. python关键字global和nonlocal总结

    函数中使用全局变量 a = 100 b = 200 def func(): def sub(): return b return a + b + sub() 执行fun()后返回值为:500 a, b ...

  8. 抽象类(abstract)与接口(interface)的区别

    如果一个类中包含抽象方法,那么这个类就是抽象类.abstract只能用来修饰类或者方法,不能用来修饰属性. 接口是指一个方法的集合,接口中的所有方法都没有方法体.接口通过关键字interface实现. ...

  9. Android_Refrogit与RxJava结合使用(转)

    Refrogit与RxJava结合的使用    达到了非常简单就可以完成请求网络 一:1.0示例: 1.导入依赖 compile 'io.reactivex:rxjava:1.3.4'compile ...

  10. java 局部变量与成员成员变量的区别

    package java04; /* 局部变量和成员变量的不同: 1.定义的位置不一样 局部变量:定义在方法内部 成员变量:在方法外部,直接写在类中 2.作用范围不一样 局部变量:只有方法中能使用,除 ...