openGauss

开源数据库

openGauss社区官网

开源社区

RDMA网络指导

why涛2023-11-07openGauss

识别CX4/CX5网卡

执行以下命令。

lspci |grep Mellanox

回显如下:

81:00.0 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]
81:00.1 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]

安装MLNX驱动

  1. 选择下载与OS匹配的驱动包,地址:https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/

  2. 新建目录,将OS镜像文件挂载至新建目录。OS镜像名称请根据实际情况进行修改。

    mkdir -p /mnt/iso
    mount openEuler-22.03-LTS-x86_64-dvd.iso /mnt/iso
    
  3. 安装过程中需要部分依赖,请配置好OS镜像源,例如本地镜像。

    1. 打开镜像源文件。

      vim /etc/yum.repos.d/openEuler.repo
      
    2. 按“i”进入编辑模式,只保留以下内容。

      [OS]
      name=OS
      baseurl=file:///mnt/iso
      enabled=1
      gpgcheck=0
      
    3. 按“Esc”键,输入**:wq!**,按“Enter”保存并退出编辑。

    4. 缓存软件包。

      yum makecache
      
  4. 上传驱动包至服务器并解压。驱动包名称请根据实际情况进行修改。

    tar -zxvf MLNX_OFED_LINUX-5.4-3.7.5.0-openeuler22.03-x86_64.tgz
    
  5. 进入解压后的驱动包目录,执行以下命令安装驱动。

    ./mlnxofedinstall --without-depcheck --without-fw-update --force
    

    如果提示内核不匹配,则执行以下命令。

    ./mlnxofedinstall --add-kernel-support
    
  6. 设置重启后自动拉起驱动。

    chkconfig --add openibd
    /etc/init.d/openibd start
    chkconfig openibd on
    
  7. 安装完成后重启服务器。

安装检查

  1. 检查驱动RoCE LAG功能。

    1. 查看RoCE LAG功能是否启用。

      find /sys/ -name roce_lag_enable | xargs cat
      
      • 输出为1,则表示开启。
      • 输出为0或无输出,则表示关闭。
      • 预期要关闭才可以,如果没有关闭,请执行1.b
    2. 关闭RoCE LAG功能。

      sed '/load_module mlx5_core/a\ files=`find /sys -name roce_lag_enable`;for file in $files;do echo 0 > $file;done' -i /etc/init.d/openibd
      
    3. 执行后重启节点使其生效,重启后再执行1.a查看是否生效。

      reboot
      
  2. 检查驱动版本。

    ofed_info -s
    

    回显驱动版本与安装MLNX驱动版本一致则版本无误。

  3. 加载MST工具。

    mst start
    

    回显如下表示加载成功。

    Starting MST (Mellanox Software Tools) driver set
    Loading MST PCI module - Success
    Loading MST PCI configuration module - Success
    Create devices
    Unloading MST PCI module (unused) - Success
    
  4. 查询设备路径和网络端口。

    1. 查询设备上RoCE和IB卡的设备路径。

      mst status
      

      回显如下:

      MST modules:
      ------------
          MST PCI module is not loaded
          MST PCI configuration module loaded
      
      MST devices:
      ------------
      /dev/mst/mt4119_pciconf0         - PCI configuration cycles access.
                                         domain:bus:dev.fn=0000:81:00.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1
                                         Chip revision is: 00
      

      其中,MST devices字段枚举的设备路径/dev/mst/mst_typeN(N取值:0,1,2,……)代表一张CX卡,mst_type和CX网卡型号映射关系参考表1

      表 1 mst_type和CX网卡型号映射关系

      mst_type

      网卡型号

      mt4099_pci_cr

      CX3

      mt4117_pciconf

      CX4-Lx

      mt4119_pciconf

      CX5

      mt4123_pciconf

      CX6

    2. 查看需要检查的网络端口,后续步骤将对查询到的所有端口进行检查。

      ll /dev/mst
      

      当前节点需要对“mt4119_pciconf0”和“mt4119_pciconf0.1”这两个端口进行检查。

  5. 检查固件版本。

    1. 查询RoCE/IB卡的固件版本,其中“/dev/mst/mt4119_pciconf0“为上一步中查询到的设备路径,请根据实际情况进行替换。

      flint -d /dev/mst/mt4119_pciconf0 q
      

      查询结果如下。

      Image type:            FS4
      FW Version:            16.31.2006
      FW Release Date:       31.8.2021
      Product Version:       16.31.2006
      Rom Info:              type=UEFI version=14.24.15 cpu=AMD64
                             type=PXE version=3.6.404 cpu=AMD64
      Description:           UID                GuidsNumber
      Base GUID:             ec0d9a0300c152e4        8
      Base MAC:              ec0d9ac152e4            8
      Image VSD:             N/A
      Device VSD:            N/A
      PSID:                  MT_0000000012
      Security Attributes:   N/A
      
  6. 检查固件网络协议。

    1. 查看当前网络协议,此处以ETH协议为例。

      ibdev2netdev -v
      

      • 若网卡名前缀为ib,则表示当前网络协议为IB,执行6.b
      • 若网卡名前缀为en,则表示当前网络协议为ETH,跳至7
    2. 查看LINK_TYPE_P1、LINK_TYPE_P2的值,以/dev/mst/mt4123_pciconf0为例。

      mlxconfig -d /dev/mst/mt4123_pciconf0 q|grep LINK_TYPE_P1
      mlxconfig -d /dev/mst/mt4123_pciconf0 q|grep LINK_TYPE_P2
      
      • 若结果为空,表示此环境不支持更改网络协议,请更换环境。
      • 若查询有结果,表示网络协议可修改。
        • 查询值应为ETH(2),跳至7

        • 若查询值为IB(1),则执行6.c修改。

    3. 设置LINK_TYPE_P1和LINK_TYPE_P2的值,以/dev/mst/mt4123_pciconf0为例。

      mlxconfig -d /dev/mst/mt4123_pciconf0 s LINK_TYPE_P1=2
      mlxconfig -d /dev/mst/mt4123_pciconf0 s LINK_TYPE_P2=2
      

    4. 执行reboot命令重启,重复6.b确认已修改成功。

  7. 验证RDMA网络。

    Server节点执行:

    ib_send_bw -d mlx5_1
    

    Client节点执行(xx.xx.xx.xx为Server节点的IP地址):

    ib_send_bw -d mlx5_1 xx.xx.xx.xx
    
  8. (可选)设置固件选项。

    说明: 此步骤属于优化项,可以降低网络时延,建议用户进行操作。

    1. 查询CX卡固件选项PCI_WR_ORDERING的值。

      以“/dev/mst/mt4119_pciconf0“为例,查询该设备的两个端口固件设置,查询结果中per_mkey值应为1,若不为1则执行8.b修改。

      mlxconfig -d /dev/mst/mt4119_pciconf0 q | grep PCI_WR_ORDERING
      mlxconfig -d /dev/mst/mt4119_pciconf0.1 q | grep PCI_WR_ORDERING
      

    2. 对一张CX5卡两个端口的固件选项PCI_WR_ORDERING进行设置,然后执行reboot命令重启,环境恢复后,按照8再次检查一遍,检查是否修改成功。

      mlxconfig -y -d /dev/mst/mt4119_pciconf0 s PCI_WR_ORDERING=1
      

      mlxconfig -y -d /dev/mst/mt4119_pciconf0.1 s PCI_WR_ORDERING=1
      

配置网卡IP

  1. 查看以太网设备和IB设备/端口之间的关联。

    ibdev2netdev -v
    
    • 当前节点网卡驱动客户端mlx5_0关联网卡名称enp24s0f0
    • 当前节点网卡驱动客户端mlx5_1关联网卡名称enp24s0f1

  2. 查看网卡状态。

    ifconfig -a
    

    若四个状态均正常表示可正常使用。

    • UP:代表网卡开启状态。
    • RUNNING:代表网卡的网线被接上。
    • MULTICAST:支持组播。
    • MTU 1500:最大传输单元。
  3. 根据环境配置网卡IP地址。以下为添加“/etc/sysconfig/network-scripts/ifcfg-enp24s0f0“config文件方式。使用systemctl restart network.service重启应用。

    配置完成后,根据2查看网卡状态。

常用IB命令

表 1 常用IB命令

命令

含义

lspci |grep Mell

查看机器上是否存在IB卡(搜索厂商名字Mellanox)。

ibstatus

查看IB卡相关信息:链路状态,端口速率,端口GUID等信息。

ibstat

ibstat功能与ibstatus相似。

ofed_info -s

查询当前安装的驱动版本。

ibv_devinfo

查询当前节点系统中IB设备信息。

ibqueryerrors -C mlx4_0 -P 1

检查当前IB网络各端口的统计信息。

perfquery

查看IB卡端口丢包、端口符号错误。

ibv_devices

查询当前节点的IB卡 - ibv_devices。

ibdump

该工具可以抓取IB层报文,由Mellanox提供。

ethtool --set-priv-flags eth-s0 sniffer on

用ethtool命令使能Sniffer,可以使用TCPDUMP抓包。

ib_atomic_bw

计算一对机器之间RDMA原子事务的带宽,一个server端一个client端,通过CPU采样获取接受完整消息时间计算带宽。该测试支持双向测试,支持更换MTU大小,tx大小,迭代数,消息大小等,更多用法参见“-a”参数。

ib_atomic_lat

计算一对机器之间RDMA一定消息大小下原子事务的时延,client端发送RDMA atomic操作到服务器端,并对CPU时钟采样获取它接收消息完成情况,从而计算时延。

ib_read_bw

计算一对机器之间RDMA read操作带宽。

ib_read_lat

计算一对机器之间RDMA一定消息大小下read操作时延。

ib_send_bw -d mlx5_1

计算一对机器之间RDMA send操作带宽。

ib_send_lat

计算一对机器之间RDMA一定消息大小下send操作时延。

ib_write_bw

计算一对机器之间RDMA write操作带宽。

ib_write_lat

计算一对机器之间RDMA一定消息大小下write操作时延。

raw_ethernet_bw

计算一对机器之间send带宽。

raw_ethernet_lat

计算一对机器之间send一定大小消息的时延。

rping

检测RDMA CM连接是否OK。