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

运行方式

  1. 保存脚本为configure_rocev2.sh并添加执行权限:chmod +x configure_rocev2.sh
  2. 以root权限运行:sudo ./configure_rocev2.sh enp175s0f0 192.168.100.10/24
  3. 若网卡不支持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:检查物理连接和光模块/线缆是否正常