Appearance
中兴定海网卡驱动与配置
中兴定海网卡驱动、容器用户态驱动、无损网络和 MRRS 配置。
返回网卡配置索引 | 上一篇:Broadcom 网卡驱动安装 | 下一篇:云脉网卡驱动与配置
获取驱动安装包
目前定海网卡正式发布的版本支持support提取和https://enterprise.zte.com.cn/ 网站提取两种方式。
具体项目使用安装包和对应安装指导 请根据项目实际需求联系定海技术支持人员获取。
通用安装方法可参考后续步骤:
主要安装如下5个包,每个包说明如下:
- 内核态安装包及工具包
zxdh-eth : eth网络内核态驱动
zxdh-rdma : rdma内核态驱动
zxdh-dhtool : DH网卡工具安装包,支持DH网卡信息采集,固件升级等
- 用户态安装包
zxdh-rdma-core-meta : RDMA用户态驱动
zxdh-script-tools : 用户态工具包,提供用户态rdma等查询,例如 zxdh_ibdev2netdev(对应MLX ibdev2netdev)
注意:安装驱动前需要在宿主机上安装OFED(参考章节4.2.1.1),OFED下载地址: https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed
安装驱动
根据现场操作系统版本及类型找到 zxdh-eth、zxdh-rdma、zxdh-dhtool、zxdh-rdma-core-meta、zxdh-script-tools 安装包,ubuntu 是 deb 类型. 其中: rpm 安装包命令:rpm -ivh xxx.rpm 。 deb 安装命令:dpkg -i xxx.deb
要先安装 OFED 版本包,OFED 需要选该系统下 DH 已经支持的版本。 目前已验证23.10/24.10, 其他版本需要根据项目联系中兴技术支持确认。
安装内核态驱动及工具包
安装zxdh-eth
- dpkg -i zxdh-eth_26.10.01.05-20260424154951.ubuntu22.04_amd64.deb
安装zxdh-rdma
- dpkg -i zxdh-rdma_26.10.01.05-20260423200318.ofed.5.8.ubuntu22.04_amd64.deb
安装zxdh-dhtool
- dpkg -i zxdh-dhtool_26.10.01.05-20260420200115_amd64.deb
安装用户态驱动及工具包
安装zxdh-rdma-core-meta
- dpkg -i zxdh-rdma-core-meta_26.10.01.05-20260423202230_amd64.deb
安装zxdh-script-tools
- dpkg -i zxdh-script-tools-26.10.01.05-20260423201852_amd64.deb
驱动生效
- 方式一: 重启生效(推荐)
sudo ipmitool power cycle
- 方式二: 重载驱动生效
modprobe dinghai10e
modprobe zrdma
检验安装结果
- ibstat 查看网卡状态正常

容器内安装定海网卡用户态驱动
容器内仅需要安装 用户态驱动及工具包, 具体步骤如下。
安装用户态驱动及工具包
安装zxdh-rdma-core-meta
- dpkg -i zxdh-rdma-core-meta_26.10.01.05-20260423202230_amd64.deb
安装zxdh-script-tools
- dpkg -i zxdh-script-tools-26.10.01.05-20260423201852_amd64.deb
设置定海网卡无损网络配置
以下脚本为定海E318单口400G网卡配置脚本。 其他型号请联系定海技术支持提供。
脚本使用前请将脚本内网卡的名字改成服务器实际对应的名字。
roce_dh_400G.sh 每次节点重启都需要执行。
init_dh_400G.sh 每次节点重启都需要执行,第一次执行后需要重启,之后执行不用再重启。
#!/bin/bash
set -euo pipefail
# ===================== 核心配置 =====================
DHTOOL_TIMEOUT=30
NICS_F0=(ens1f0 ens2f0 ens3f0 ens4f0)
#NICS_F1=(ens2f0 ens4f0 ens6f0 ens8f0)
#ALL_NICS=("${NICS_F0[@]}" "${NICS_F1[@]}")
ALL_NICS=("${NICS_F0[@]}")
DHTOOL_INDEXES=(00 01 02 03)
#PRE_SCRIPT="/home/vtu/roce_dh_400G.sh"
# ====================================================
log() {
echo -e "\033[1;32m[$(date '+%Y-%m-%d %H:%M:%S')] $1\033[0m"
}
log "================================================"
log "开始执行前置脚本:$PRE_SCRIPT"
log "================================================"
if [ -f "$PRE_SCRIPT" ]; then
chmod +x "$PRE_SCRIPT"
"$PRE_SCRIPT"
log "✅ 前置脚本执行完成"
else
log "❌ 错误:未找到前置脚本 $PRE_SCRIPT"
exit 1
fi
log "开始执行所有网卡的RDMA基础配置..."
for nic in "${ALL_NICS[@]}"; do
log "配置网卡:$nic"
dhtool --su rdmacfg "$nic" set stage_backpress=true
dhtool --su rdmacfg "$nic" set denormalize=true
dhtool --su regsmem "$nic" rdma addr 0x6206302200 0xff
dhtool --su pcie_fc_ost_ops "$nic" set -f
dhtool regsmem "$nic" rdma addr 0x62065e013c 0x13000000
dhtool regsmem "$nic" rdma addr 0x62065F0128 0x40
dhtool regsmem "$nic" rdma addr 0x62065F012c 0x40
done
log "开始生成交互式dhtool执行脚本..."
for idx in "${DHTOOL_INDEXES[@]}"; do
log "执行 dhtool 索引:$idx"
expect_script=$(mktemp)
cat > "$expect_script" << EOF
#!/usr/bin/expect -f
set timeout ${DHTOOL_TIMEOUT}
spawn dhtool
expect {
"Please enter index:" { send "${idx}\r" }
timeout { exit 1 }
}
expect ">"
send "su root\r"
# ===================== 关键修复 =====================
# 1. 等待完整root提示符
expect -re {\[root@dhtool.*\]#}
# 2. 【删除】多余的中文打印,不输出任何东西!
# 3. 执行命令(输出100%统一)
send "dhpcie devmem 0x8400000078 0x1937\r"
expect -re {\[root@dhtool.*\]#}
send "dhpcie devmem 0x8400001078 0x1937\r"
expect -re {\[root@dhtool.*\]#}
send "dhpcie devmem 0x8400000098 0x1000\r"
expect -re {\[root@dhtool.*\]#}
send "dhnp diag_dpp_pbu_port_th_set_1 0 16 8000 8000 8000 8000 8000 8000 8000 8000\r"
expect -re {\[root@dhtool.*\]#}
send "dhnp diag_dpp_pbu_port_th_set_1 0 20 8000 8000 8000 8000 8000 8000 8000 8000\r"
expect -re {\[root@dhtool.*\]#}
send "dhnp diag_dpp_pbu_port_th_set_2 0 16 11320 300 300\r"
expect -re {\[root@dhtool.*\]#}
send "dhnp diag_dpp_pbu_port_th_set_2 0 20 11320 300 300\r"
expect -re {\[root@dhtool.*\]#}
send "quit\r"
expect eof
exit 0
EOF
chmod +x "$expect_script"
"$expect_script"
rm -f "$expect_script"
done
log "==================== 所有配置执行完成 ===================="
exit 0dcb pfc set dev ens4f0 prio-pfc all:on
dcb pfc set dev ens3f0 prio-pfc all:on
dcb pfc set dev ens2f0 prio-pfc all:on
dcb pfc set dev ens1f0 prio-pfc all:on
dcb pfc set dev ens8f0 prio-pfc all:on
dcb pfc set dev ens7f0 prio-pfc all:on
dcb pfc set dev ens6f0 prio-pfc all:on
dcb pfc set dev ens5f0 prio-pfc all:on
zxdh_cma_roce_tos -d zrdma0 -t 106
zxdh_cma_roce_tos -d zrdma1 -t 106
zxdh_cma_roce_tos -d zrdma2 -t 106
zxdh_cma_roce_tos -d zrdma3 -t 106
zxdh_cma_roce_tos -d zrdma4 -t 106
zxdh_cma_roce_tos -d zrdma5 -t 106
zxdh_cma_roce_tos -d zrdma6 -t 106
zxdh_cma_roce_tos -d zrdma7 -t 106
dcb app add dev ens1f0 dscp-prio \
0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0 \
8:1 9:1 10:1 11:1 12:1 13:1 14:1 15:1 \
16:2 17:2 18:2 19:2 20:2 21:2 22:2 23:2 \
24:3 25:3 26:3 27:3 28:3 29:3 30:3 31:3 \
32:4 33:4 34:4 35:4 36:4 37:4 38:4 39:4 \
40:5 41:5 42:5 43:5 44:5 45:5 46:5 47:5 \
48:6 49:6 50:6 51:6 52:6 53:6 54:6 55:6 \
56:7 57:7 58:7 59:7 60:7 61:7 62:7 63:7
dcb app add dev ens3f0 dscp-prio \
0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0 \
8:1 9:1 10:1 11:1 12:1 13:1 14:1 15:1 \
16:2 17:2 18:2 19:2 20:2 21:2 22:2 23:2 \
24:3 25:3 26:3 27:3 28:3 29:3 30:3 31:3 \
32:4 33:4 34:4 35:4 36:4 37:4 38:4 39:4 \
40:5 41:5 42:5 43:5 44:5 45:5 46:5 47:5 \
48:6 49:6 50:6 51:6 52:6 53:6 54:6 55:6 \
56:7 57:7 58:7 59:7 60:7 61:7 62:7 63:7
dcb app add dev ens5f0 dscp-prio \
0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0 \
8:1 9:1 10:1 11:1 12:1 13:1 14:1 15:1 \
16:2 17:2 18:2 19:2 20:2 21:2 22:2 23:2 \
24:3 25:3 26:3 27:3 28:3 29:3 30:3 31:3 \
32:4 33:4 34:4 35:4 36:4 37:4 38:4 39:4 \
40:5 41:5 42:5 43:5 44:5 45:5 46:5 47:5 \
48:6 49:6 50:6 51:6 52:6 53:6 54:6 55:6 \
56:7 57:7 58:7 59:7 60:7 61:7 62:7 63:7
dcb app add dev ens7f0 dscp-prio \
0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0 \
8:1 9:1 10:1 11:1 12:1 13:1 14:1 15:1 \
16:2 17:2 18:2 19:2 20:2 21:2 22:2 23:2 \
24:3 25:3 26:3 27:3 28:3 29:3 30:3 31:3 \
32:4 33:4 34:4 35:4 36:4 37:4 38:4 39:4 \
40:5 41:5 42:5 43:5 44:5 45:5 46:5 47:5 \
48:6 49:6 50:6 51:6 52:6 53:6 54:6 55:6 \
56:7 57:7 58:7 59:7 60:7 61:7 62:7 63:7
dcb app add dev ens2f0 dscp-prio \
0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0 \
8:1 9:1 10:1 11:1 12:1 13:1 14:1 15:1 \
16:2 17:2 18:2 19:2 20:2 21:2 22:2 23:2 \
24:3 25:3 26:3 27:3 28:3 29:3 30:3 31:3 \
32:4 33:4 34:4 35:4 36:4 37:4 38:4 39:4 \
40:5 41:5 42:5 43:5 44:5 45:5 46:5 47:5 \
48:6 49:6 50:6 51:6 52:6 53:6 54:6 55:6 \
56:7 57:7 58:7 59:7 60:7 61:7 62:7 63:7
dcb app add dev ens4f0 dscp-prio \
0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0 \
8:1 9:1 10:1 11:1 12:1 13:1 14:1 15:1 \
16:2 17:2 18:2 19:2 20:2 21:2 22:2 23:2 \
24:3 25:3 26:3 27:3 28:3 29:3 30:3 31:3 \
32:4 33:4 34:4 35:4 36:4 37:4 38:4 39:4 \
40:5 41:5 42:5 43:5 44:5 45:5 46:5 47:5 \
48:6 49:6 50:6 51:6 52:6 53:6 54:6 55:6 \
56:7 57:7 58:7 59:7 60:7 61:7 62:7 63:7
dcb app add dev ens6f0 dscp-prio \
0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0 \
8:1 9:1 10:1 11:1 12:1 13:1 14:1 15:1 \
16:2 17:2 18:2 19:2 20:2 21:2 22:2 23:2 \
24:3 25:3 26:3 27:3 28:3 29:3 30:3 31:3 \
32:4 33:4 34:4 35:4 36:4 37:4 38:4 39:4 \
40:5 41:5 42:5 43:5 44:5 45:5 46:5 47:5 \
48:6 49:6 50:6 51:6 52:6 53:6 54:6 55:6 \
56:7 57:7 58:7 59:7 60:7 61:7 62:7 63:7
dcb app add dev ens8f0 dscp-prio \
0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0 \
8:1 9:1 10:1 11:1 12:1 13:1 14:1 15:1 \
16:2 17:2 18:2 19:2 20:2 21:2 22:2 23:2 \
24:3 25:3 26:3 27:3 28:3 29:3 30:3 31:3 \
32:4 33:4 34:4 35:4 36:4 37:4 38:4 39:4 \
40:5 41:5 42:5 43:5 44:5 45:5 46:5 47:5 \
48:6 49:6 50:6 51:6 52:6 53:6 54:6 55:6 \
56:7 57:7 58:7 59:7 60:7 61:7 62:7 63:7设置定海网卡MRRS
需要设置定海网卡mrrs为256
#!/bin/bash
set +x
target_mrrs="1"
main()
{
if [[ $1 == "" ]]; then
devlist=$(lspci -Dn | grep "1cf2:" | awk '{print $1}')
else
devlist=$1
fi
mrrs=${target_mrrs}
for pcidev in $devlist; do
word=$(setpci -s $pcidev CAP_EXP+8.w)
word=$(printf "%x" $((((0x${word} & 0x8fff) | ($mrrs << 12)))))
setpci -s $pcidev CAP_EXP+8.w=$word
echo "setpci -s $pcidev CAP_EXP+8.w=$word"
done
}
main "$@"