Skip to content

MXRDMA 网卡配置 ​

安装 MXRDMA OFED、内核与用户态驱动,并配置 IP 和无损网络。

返回网卡配置索引 | 上一篇:RoCE 无损网络参数配置 | 下一篇:Kylin V11 RDMA 网卡配置


对于C600/N300自带的MXRDMA网卡,单独在这一章节进行系统说明,包括驱动安装、网卡及交换机配置。

MXRDMA网卡兼容doca_ofed/mlnx_ofed驱动,需要提前安装ofed驱动。

MXRDMA网卡和C600/N300为同一个实体卡,和GPU使用同一套驱动。

OFED安装 ​

流程图

OFED安装

检测是否安装ofed ​

执行命令ofed_info 可看到有打印,即为已经安装,如下图。

检测是否安装ofed

没有安装的话,打印如图。

检测是否安装ofed

下载doca_ofed安装包 ​

DOCA-OFED 下载方式可参考 Mellanox 网卡驱动安装,安装流程请参考下述章节。

注意:最新的doca3.3.0和之后的版本还在适配中,请使用doca3.2.1和之前的版本

安装doca_ofed包 ​

注意:安装doca_ofed之前,如果安装了metax driver 需要先卸载(sudo rmmod metax_rdma metax)

sudo dpkg -i doca-host_***.deb
sudo apt update
sudo apt install doca-ofed -y
sudo rmmod metax_rdma metax
sudo /etc/init.d/openibd restart # 建议在BMC中执行此命令
sudo update-initramfs -u -k all # 重新生成initramfs

安装doca_ofed包

看到OK表示安装完成。

注意:如果安装完成发现机器连不上,可以等待5分钟,仍然连不上可以使用bmc进行强制重启,因为安装doca_ofed会重置某些机器的网卡

如需卸载可执行下面命令

sudo apt-get autoremove doca-ofed -y

MXRDMA驱动安装 ​

MXRDMA网卡配置 ​

添加udev规则

bash
sudo vim /etc/udev/rules.d/70-metax-eth.rules
#for metax eth
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="METAX", \
ATTRS{vendor}=="0x9999", \
PROGRAM+="/bin/bash -c 'mkdir -p /tmp/eth_$id'", \
PROGRAM+="/bin/bash -c 'lspci -Dd 9999: > /tmp/eth_$id/metax_eth0'", \
PROGRAM+="/bin/bash -c 'sort /tmp/eth_$id/metax_eth0 -k 1,1 > /tmp/eth_$id/metax_eth1'", \
PROGRAM+="/bin/bash -c 'nl -n rz -w1 -s: -v0 /tmp/eth_$id/metax_eth1 > /tmp/eth_$id/metax_eth2'", \
PROGRAM+="/bin/bash -c 'grep -n $id /tmp/eth_$id/metax_eth2 > /tmp/eth_$id/metax_eth3'", \
PROGRAM+="/bin/bash -c 'cut -d: -f2 /tmp/eth_$id/metax_eth3'", \
NAME="metax_eth_%c", \
RUN+="/usr/sbin/sysctl -w net.ipv4.conf.$name.accept_local=1", \
RUN+="/usr/sbin/sysctl -w net.ipv4.conf.$name.arp_ignore=1", \
RUN+="/usr/sbin/sysctl -w net.ipv4.conf.$name.arp_announce=2", \
RUN+="/usr/sbin/sysctl -w net.ipv6.conf.$name.disable_ipv6=1"

重载入udev规则

bash
sudo udevadm control --reload-rules

安装MXRDMA内核驱动 ​

注意:使能MXRDMA功能,需要满足版本限制: SDK release >= 3.4.0.9,vbios版本>=1.4.2.0。

在获取到metax-driver安装包后,以metax-driver-3.7.1.0-deb-x86_64.run 为例:

执行安装命令:

bash
sudo bash ./metax-driver-3.7.1.0-deb-x86_64.run -- -m rdma

即可安装RDMA的内核驱动模块。

安装MXRDMA内核驱动

若无其它限制,安装完毕后重启机器,即可正常加载相关内核模块。

若当前环境不能断电重启,则执行以下命令序列,实现手动加载内核模块。

sudo rmmod metax_rdma
sudo rmmod metax
sudo modprobe metax disable_eth=0
sudo modprobe metax_rdma
  • 研发使用时,如果是手动insmod 需要添加参数disable_eth=0 来开启eth功能

内核模块metax_rdma加载以后,需要检查dmesg内容,确定有无报错。

例如下图这种错误输出,则需要反馈给kmd同事

安装MXRDMA内核驱动

此外,在安装过程中如遇到如下报错

安装MXRDMA内核驱动

则可以通过执行sudo apt install autoconf automake -y 加以解决, 解决后 重新执行metax-driver 驱动安装。

安装MXRDMA用户驱动库 ​

首先执行 ls /usr/local/lib -l 查看下图中的文件是否存在。

安装MXRDMA用户驱动库

若文件已存在,则跳过后续操作;

若文件不存在,则表示还未安装,则依照下述说明进行处理。

操作步骤:

  • 获取软件压缩包

在内网浏览器中打开https://devopsportal.metax-internal.com/#/artifactory/maca3.0/maca-master-3.0

网页,下载所需版本的MXRDMA 安装包。

安装MXRDMA用户驱动库

  • 执行安装操作

解压上述压缩包得到安装文件后,进入所属目录,执行 sudo ./mxrdma-install.sh 即可。

安装MXRDMA用户驱动库

MXRDMA网卡IP配置 ​

总体思想,给每个网卡分配ip地址到不同的网段。并添加路由策略使其跨网段互通。

netplan方式配置ip地址 ​

针对Ubuntu/Debian Linux及其延伸版本系统。

ubuntu系统使用netplan配置,配置参考如下:

bash
sudo vim /etc/netplan/02-metax-eth-all.yaml
  • 实际配置时请替换下面脚本中的IP地址最后一段为对应机器的IP。

举例:下面的配置是给10.0.232.37机器的ETH配置文件,所有ETH网段的最后一段IP为37。

network:
  ethernets:
    ens43f0np0:
      addresses: [10.0.232.37/24]
      gateway4: 10.0.232.1
      nameservers:
        addresses: [10.2.129.6]
    ens123np0:
      dhcp4: false
      addresses: [192.168.10.37/24]
      mtu: 9000
      routes:
        - to: default
          via: 192.168.10.254
          table: 200
      routing-policy:
        - from: 192.168.10.37
          table: 200
          priority: 30000
    ens120np0:
      dhcp4: false
      addresses: [192.168.20.37/24]
      mtu: 9000
      routes:
        - to: default
          via: 192.168.20.254
          table: 201
      routing-policy:
        - from: 192.168.20.37
          table: 201
          priority: 30000
    ens118np0:
      dhcp4: false
      addresses: [192.168.30.37/24]
      mtu: 9000
      routes:
        - to: default
          via: 192.168.30.254
          table: 202
      routing-policy:
        - from: 192.168.30.37
          table: 202
          priority: 30000
    ens121np0:
      dhcp4: false
      addresses: [192.168.40.37/24]
      mtu: 9000
      routes:
        - to: default
          via: 192.168.40.254
          table: 203
      routing-policy:
        - from: 192.168.40.37
          table: 203
          priority: 30000
    ens122np0:
      dhcp4: false
      addresses: [192.168.50.37/24]
      mtu: 9000
      routes:
        - to: default
          via: 192.168.50.254
          table: 204
      routing-policy:
        - from: 192.168.50.37
          table: 204
          priority: 30000
    ens116np0:
      dhcp4: false
      addresses: [192.168.60.37/24]
      mtu: 9000
      routes:
        - to: default
          via: 192.168.60.254
          table: 205
      routing-policy:
        - from: 192.168.60.37
          table: 205
          priority: 30000
    ens117np0:
      dhcp4: false
      addresses: [192.168.70.37/24]
      mtu: 9000
      routes:
        - to: default
          via: 192.168.70.254
          table: 206
      routing-policy:
        - from: 192.168.70.37
          table: 206
          priority: 30000
    ens119np0:
      dhcp4: false
      addresses: [192.168.80.37/24]
      mtu: 9000
      routes:
        - to: default
          via: 192.168.80.254
          table: 207
      routing-policy:
        - from: 192.168.80.37
          table: 207
          priority: 30000
  version: 2

配置完毕执行sudo netplan apply, 网卡才能UP

如果执行过程断网,需要bmc重启机器

NetworkManager方式配置ip地址 ​

针对RHEL/CentOS/Rocky Linux及其延伸版本(KYLIN ALINUX3等)。

配置arp策略:

bash
sudo vim /etc/NetworkManager/dispatcher.d/pre-up.d/10-ifcfg-metax-eth-arp.sh
sudo chmod +x /etc/NetworkManager/dispatcher.d/pre-up.d/10-ifcfg-metax-eth-arp.sh

添加内容如下

#!/bin/bash

if [ "$2" != "pre-up" ]; then
exit 0
fi

file_regex='^/etc/sysconfig/network-scripts/ifcfg-([^/]+)$'

[[ "$CONNECTION_FILENAME" =~ $file_regex ]] || exit 0

device_name=$(grep DEVICE $CONNECTION_FILENAME | cut -d '=' -f2)
vendor_id=$(cat /sys/class/net/$device_name/device/vendor)

case "$vendor_id" in
0x9999)
{
echo "############metax eth pre-up ############"
echo "device_name $device_name vendor_id $vendor_id"
sysctl -w net.ipv4.conf.$device_name.accept_local=1
sysctl -w net.ipv4.conf.$device_name.rp_filter=2
sysctl -w net.ipv4.conf.$device_name.arp_ignore=1
sysctl -w net.ipv4.conf.$device_name.arp_announce=2
sysctl -w net.ipv6.conf.$device_name.disable_ipv6=1
} > /dev/kmsg
;;
esac

配置IP地址:

使用下面脚本配置:

脚本每次只能配置一张网卡

例如 10.0.232.37机器配置网卡metax_eth_0

bash
sudo ./set_network_manager.sh metax_eth_0 192.168.10.37/24 192.168.10.254  192.168.10.0/24 10

例如 10.0.232.37机器配置网卡metax_eth_1

bash
sudo ./set_network_manager.sh metax_eth_0 192.168.20.37/24 192.168.20.254  192.168.20.0/24 20

例如 10.0.232.37机器配置网卡metax_eth_2

bash
sudo ./set_network_manager.sh metax_eth_0 192.168.30.37/24 192.168.30.254  192.168.30.0/24 30
#!/bin/bash
#./set_network_manager.sh netdev roce_ip roce_gateway roce_subnet route_table
#./set_network_manager.sh metax_eth_0 192.168.10.37/24 192.168.10.1 192.168.10.0/24 10

netdev=$1
roce_ip=$2
roce_gateway=$3
roce_subnet=$4
route_table=$5
connection_name="computenic_${netdev}"
nmconnections=$(nmcli -g UUID c s)

for connection in ${nmconnections}
do
nmdevice=$(nmcli c s ${connection} | grep connection.interface-name | awk '{print$2}')
if [ "$netdev" == "$nmdevice" ]; then
sudo nmcli con del ${connection}
fi
done
nmcli con add type ethernet con-name ${connection_name} ifname ${netdev}
nmcli con modify ${connection_name} ipv4.method manual ipv4.addresses ${roce_ip} ipv6.method disable connection.autoconnect yes +ipv4.routes "${roce_subnet} ${roce_gateway} table=${route_table}" +ipv4.routing-rules "priority 30000 from ${roce_subnet} table ${route_table}"
nmcli con up ${connection_name}

无损参数配置 ​

MXRDMA支持PFC/ECN功能:不支持多个优先级队列,只支持一个优先级队列。默认使用队列5,不需要配置

RDMA/PFC/ECN 使用Queue5

Ethernet Socket 使用Queue0

如果需要修改RDMA/PFC/ECN 队列,参考如下命令:

# cat /sys/class/infiniband/metax_rdma_0/pfc_ecn
pfc_enable(0 or 1):1
pfc_priority([1~7]):5
ecn_enable(0 or 1):1
ecn_dscp_priority([0~63]):40
example: echo "pfc_enable=0" > pfc_ecn

# echo "pfc_priority=1" > /sys/class/infiniband/metax_rdma_0/pfc_ecn
# echo "ecn_dscp_priority=8" > /sys/class/infiniband/metax_rdma_0/pfc_ecn

注:如果配置,需要在所有的网卡metax_rdma_0-16全部配置。


返回网卡配置索引 | 上一篇:RoCE 无损网络参数配置 | 下一篇:Kylin V11 RDMA 网卡配置