1. 搭建RDMA与NVMe-oF实验环境

任务目标

在两台服务器上完成RDMA与NVMe-oF实验环境搭建:安装并加载RDMA网卡驱动、部署NVMe-oF相关软件包,最终通过ibping或rping验证两台服务器间的RDMA链路连通性。本案例以Mellanox ConnectX-4/5网卡和Ubuntu 22.04 LTS为例,其他型号或发行版需对应调整驱动安装方式。

环境与依赖

  • 硬件:两台x86服务器,各配1块Mellanox ConnectX-4/5 RDMA网卡(推荐25GbE以上),使用直连或经交换机连接
  • 操作系统:Ubuntu 22.04 LTS(内核≥5.15,已内置mlx5_core驱动)
  • 软件包:rdma-core、infiniband-diags、libibverbs-dev、nvme-cli、nvmet(内核模块)

实现步骤与代码

1. 安装软件包(两台服务器均执行)

sudo apt update
sudo apt install -y rdma-core infiniband-diags libibverbs-dev nvme-cli
# 确认内核NVMe-oF target模块已加载
sudo modprobe nvmet
sudo modprobe nvmet-rdma
sudo modprobe nvme-rdma

2. 确认RDMA网卡状态

# 查看RDMA设备列表,应看到mlx5_0或类似设备
ibv_devinfo

# 查看网卡端口状态,确认Active
ibstat

3. 配置IP地址(示例:Server A为192.168.10.1/24,Server B为192.168.10.2/24)

# Server A
sudo ip addr add 192.168.10.1/24 dev ibp3s0f0  # 以实际接口名为准
sudo ip link set ibp3s0f0 up

# Server B
sudo ip addr add 192.168.10.2/24 dev ibp3s0f0
sudo ip link set ibp3s0f0 up

4. 验证RDMA链路连通性

# 在Server A上启动rping服务端(监听端口9400)
rping -s -a 192.168.10.1 -p 9400 -C 3 &

# 在Server B上执行rping客户端
rping -c -a 192.168.10.1 -p 9400 -C 3 -v

5. 验证NVMe-oF传输层(可选但推荐)

# 在Server A上创建NVMe-oF target子系统
sudo mkdir -p /sys/kernel/config/nvmet/subsystems/testnqn
cd /sys/kernel/config/nvmet/subsystems/testnqn
echo 1 | sudo tee attr_allow_any_host > /dev/null
sudo mkdir namespaces/1
echo -n "/dev/nullb0" | sudo tee namespaces/1/device_path > /dev/null  # 需先创建null_blk设备
echo 1 | sudo tee namespaces/1/enable > /dev/null

# 添加RDMA端口
sudo mkdir -p /sys/kernel/config/nvmet/ports/1
cd /sys/kernel/config/nvmet/ports/1
echo 1 | sudo tee addr_adrfam > /dev/null
echo 2 | sudo tee addr_trtype > /dev/null   # 2=RDMA
echo 192.168.10.1 | sudo tee addr_traddr > /dev/null
echo 4420 | sudo tee addr_trsvcid > /dev/null
sudo ln -s /sys/kernel/config/nvmet/subsystems/testnqn /sys/kernel/config/nvmet/ports/1/subsystems/testnqn

# 在Server B上发现并连接target
sudo nvme discover -t rdma -a 192.168.10.1 -s 4420
sudo nvme connect -t rdma -n testnqn -a 192.168.10.1 -s 4420
sudo nvme list

验证方法与判定标准

  • RDMA连通性:rping客户端输出显示PING/PONG往返成功且-C 3指定的3次传输全部完成,无超时或错误信息,即判定RDMA链路正常。
  • NVMe-oF连接:nvme discover能列出Server A上的testnqn子系统;nvme connect成功且nvme list能看到新增的NVMe设备(如/dev/nvme0),说明NVMe-oF over RDMA数据通路已建立。
  • 驱动状态:ibstat显示端口状态为Active,ibv_devinfo能识别到设备,说明RDMA驱动工作正常。

常见问题

  • ibstat看不到设备:确认网卡已正确安装且被系统识别(lspci | grep Mellanox),必要时重新加载驱动:sudo modprobe -r mlx5_core && sudo modprobe mlx5_core。
  • rping连接超时:检查IP是否配置正确、网卡是否up、防火墙是否放行UDP端口(rping使用RoCE v2时走UDP 4791端口)。
  • NVMe-oF target创建失败:确认已加载nvmet和nvmet-rdma模块,且configfs已挂载(sudo mount -t configfs none /sys/kernel/config)。