2. 配置RoCEv2网络接口
任务目标
为支持RoCE的网卡(如Mellanox ConnectX系列)分配IP地址,启用RoCEv2模式,并确认接口处于活动状态。本案例以Ubuntu 22.04 + Mellanox网卡为环境,使用rdma-core工具链完成配置。
环境依赖
- 支持RoCE的网卡(Mellanox ConnectX-4及以上推荐)
- 已安装驱动:
mlnx-ofed-kernel或系统自带mlx5_core模块 - 用户态工具:
rdma-core(提供rdma命令)、iproute2、ethtool
关键完整代码
以下脚本完成IP分配、RoCEv2模式启用与状态验证。请根据实际网卡名(如enp175s0f0)和子网修改变量。
#!/bin/bash
# 配置RoCEv2网络接口脚本
# 用法: sudo ./configure_rocev2.sh <接口名> <IP地址/前缀>
IFACE="${1:-enp175s0f0}"
IP_ADDR="${2:-192.168.100.10/24}"
# 1. 确认网卡存在且为RoCE设备
if ! ip link show "$IFACE" > /dev/null 2>&1; then
echo "错误: 接口 $IFACE 不存在"
exit 1
fi
# 2. 检查是否支持RoCE (mlx5_core驱动)
if ! ls /sys/class/net/"$IFACE"/device/driver | grep -q mlx5_core; then
echo "警告: $IFACE 可能不是Mellanox RoCE网卡"
fi
# 3. 分配IP地址(若已存在则先清除)
ip addr flush dev "$IFACE"
ip addr add "$IP_ADDR" dev "$IFACE"
# 4. 启用RoCEv2模式
# 设置devx和roce_mode为2 (RoCEv2)
rdma link set "$IFACE" roce_mode 2
# 5. 启用接口
ip link set "$IFACE" up
# 6. 验证配置
echo "=== 接口状态 ==="
ip addr show "$IFACE" | grep -E "state|inet "
echo "=== RoCE模式 ==="
rdma link show "$IFACE" | grep -E "roce_mode|state"
echo "=== 确认活动 ==="
if ip link show "$IFACE" | grep -q "state UP"; then
echo "✓ 接口 $IFACE 已激活"
else
echo "✗ 接口 $IFACE 未激活"
exit 1
fi
运行方式
- 保存脚本为
configure_rocev2.sh并添加执行权限:chmod +x configure_rocev2.sh - 以root权限运行:
sudo ./configure_rocev2.sh enp175s0f0 192.168.100.10/24 - 若网卡不支持
rdma link set命令,可改用echo 2 > /sys/class/net/$IFACE/device/roce_mode(部分驱动版本)
验证方法与判定标准
- 接口状态:
ip addr show输出中state UP且包含分配的IP地址 - RoCEv2模式:
rdma link show输出中roce_mode值为2(表示RoCEv2) - 连通性测试:在另一台配置相同子网的机器上执行
ping <本机IP>,能收到回复即表示L2/L3连通 - RDMA验证(可选):使用
rping -s(服务端)和rping -c -a <IP>(客户端)测试RDMA通信,若输出pinging和pong消息则RDMA数据路径正常
常见问题
- rdma命令不存在:安装
rdma-core包:apt install rdma-core - roce_mode设置失败:确认驱动版本支持,尝试
modprobe mlx5_ib加载IB模块 - 接口无法UP:检查物理连接和光模块/线缆是否正常