配置NVMe-oF时nvme discover失败,RDMA连接建立失败(-104)
解决NVMe-oF RDMA连接失败(-104/Connection reset by peer)问题
环境信息
- 网卡:Mellanox CX-6
- CPU:FT-5000c(aarch64架构)
- 内核版本:5.10.0-60.18.0.50.oe2203.aarch64
- MLNX_OFED版本:24.07-0.6.1.0
问题现象
执行nvme discover时提示:
nvme discover Failed. Failed to write to /dev/nvme-fabrics: Connection reset by peer
客户端dmesg日志显示:
[ 5013.723032] nvme nvme2: rdma connection establishment failed (-104)
目标端无对应dmesg错误输出,已尝试设置nvme num_p2p_queues > 0但未解决问题。
排查与解决步骤
1. 验证RDMA基础链路连通性
先排除RDMA底层链路问题:
- 目标端启动
ibping服务端:ibping -s - 客户端执行连通测试:
ibping -c 4 <目标端RDMA网卡IP> - 如果测试失败,优先解决RDMA链路问题:检查子网配置、网卡状态、固件与OFED版本匹配度,确保RDMA服务正常运行。
2. 确认NVMe-oF目标端配置有效性
检查目标端nvmet服务核心配置:
- 查看已创建的命名空间:
nvmet list ns,确保命名空间已正确关联到控制器 - 检查控制器绑定状态:
nvmet list ctrl,确认控制器已绑定到指定RDMA端口,IP和默认端口4420配置无误 - 验证端口占用:
ss -tulpn | grep 4420,确保4420端口未被其他服务占用
3. 调整内核参数适配aarch64架构
针对FT-5000c的aarch64架构,尝试调整以下内核参数:
- 临时禁用RDMA端口状态检查:
echo 0 > /sys/module/rdma_cm/parameters/ignore_portstate_change - 延长NVMe IO超时时间:
echo 60000 > /sys/module/nvme_core/parameters/io_timeout - 确认关键模块加载:
lsmod | grep -E "mlx5_rdma|nvme_rdma",确保mlx5_rdma和nvme_rdma模块已正常加载
4. 排查防火墙与网络策略
临时关闭客户端和目标端防火墙测试:systemctl stop firewalld,重新执行nvme discover。如果测试正常,需添加NVMe-oF相关规则:
- 放行4420端口的TCP/UDP流量
- 允许RDMA相关服务的网络通行
5. 检查固件与驱动兼容性
- 确认Mellanox CX-6网卡固件版本与MLNX_OFED 24.07版本兼容
- 重新安装MLNX_OFED驱动,确保安装过程适配当前aarch64内核版本,无报错信息
进阶排查
若以上步骤无效,开启调试日志进一步定位:
- 客户端执行 verbose 模式的发现命令:
nvme discover -v,获取更详细的错误输出 - 目标端开启
nvmet调试日志:echo 1 > /sys/kernel/debug/tracing/events/nvmet/enable,执行客户端操作后查看/sys/kernel/debug/tracing/trace日志
内容的提问来源于stack exchange,提问作者yueryoufeng
相关产品推荐
相关产品推荐

