讲师中心 微信公众号
AI工具推荐 视频效率加速

Linux rdma 的 RoCE v2 与 mlx5_core 驱动调优

雨芳同学_6315

雨芳同学_6315

发布时间:2026-02-24 18:15:20

|

1231人浏览过

|

来源于php中文网

原创

RoCE v2流量不通根本原因是无损网络配置缺失,需交换机开启PFC/ECN并与主机mlx5_core参数对齐;PORT_DOWN常因PFC配置失败;RDMA性能低源于队列深度、MTU或内核协议栈干扰;驱动加载失败多因BIOS PCIe设置不当;TCP延迟高则可能由PFC死锁导致。

linux rdma 的 roce v2 与 mlx5_core 驱动调优

RoCE v2 流量不通,ibstat 显示端口状态为 PORT_DOWN

根本原因往往不是网卡坏了,而是 RoCE v2 依赖的无损网络基础没配好。交换机必须开启 PFC(优先级流控)和 ECN(显式拥塞通知),且与主机侧的 mlx5_core 驱动参数对齐。

实操建议:

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • 先确认交换机端口已启用 PFC 对应 RoCE 的优先级(通常是 priority 3 或 priority 4),并配置了相同的 buffer 分配策略
  • 主机侧检查是否启用了对应优先级的 PFC:运行 cat /sys/class/infiniband/mlx5_0/ports/1/pkey_tbl/0 没用,要看 /sys/class/net/enp134s0f0np0/queues/tx-0/byte_queue_limits/hold_time?错——正确路径是 /sys/class/net/enp134s0f0np0/ecn 和 /sys/class/net/enp134s0f0np0/pfc(需内核 ≥ 5.10,且网卡名替换成你实际的 RoCE 接口名)
  • 若用 mlnx\_ofed 安装驱动,别跳过 mlnx_tune;它会自动设置 devlink dev param set pci/0000:86:00.0 name pfc_enable value true 这类关键参数
  • ibstat 显示 PORT_DOWN 时,dmesg | grep mlx5 常见报错是 Failed to configure PFC: Invalid argument——说明驱动尝试下发 PFC 配置失败,大概率是交换机未响应或优先级不匹配

RDMA Write 性能上不去,ib_write_bw 测出来只有 1–3 Gbps

这不是线缆或网卡瓶颈,而是默认队列深度太浅、MTU 太小、或者没绕过内核协议栈。RoCE v2 走的是以太网物理层,但 RDMA 操作必须由用户态库(如 libibverbs)直接调度硬件队列,中间任何内核转发都会拖垮性能。

实操建议:

  • 确保使用 ib_write_bw -d mlx5_0 -i 1 -s 1048576 -r 1000 这类大包(-s 1048576)、高重复次数(-r 1000)测试,避免小包噪声干扰
  • 检查 MTU:RoCE v2 要求端到端(包括交换机)MTU ≥ 4096;主机侧运行 ip link set dev enp134s0f0np0 mtu 4096,不能只设网卡,交换机 port channel 和 VLAN 接口也得同步改
  • 确认没有启用 iptables 或 nftables 规则——哪怕只是 LOG 目标,也会让部分 RoCE 数据包被拉入内核协议栈,导致超时重传
  • 用 perf record -e "mlx5:sw_irq" -a sleep 10 看是否频繁触发软件中断;如果出现,说明有大量 Completion Queue (CQ) 事件没被及时轮询,要调大 ibv_create_cq 的 cqe 参数或优化用户态轮询逻辑

mlx5_core 驱动加载失败,dmesg 报 Failed to load FW 或 PCIe link width reduced

这两个错误表面是固件或链路问题,实际多因 BIOS 设置或 PCIe 插槽供电/带宽限制引发。Mellanox ConnectX-5/6 卡对 PCIe Gen3 x16 有硬性要求,降速到 x8 或 Gen2 就会拒绝加载 RoCE 功能。

实操建议:

  • 进 BIOS 关闭所有 PCIe ASPM(Active State Power Management)、LTR(Latency Tolerance Reporting)和 SR-IOV(除非真要用),这些功能在某些服务器主板上会导致链路协商异常
  • 确认插槽物理支持 x16:有些双槽位主板,第二个 PCIe 插槽实际只连 x8 通道,即使卡插进去,lspci -vv -s 0000:86:00.0 | grep Width 会显示 LnkCap: Port #0, MaxSpeed 8.0GT/s, PhYComplnt 但 LnkSta: Speed 2.5GT/s, Width x8——这就必须换插槽
  • FW 加载失败时,别急着重刷固件;先运行 mlxfwmanager --query 看当前 FW 版本,再查 Mellanox FW 兼容矩阵,确认该 FW 是否支持你用的内核版本和 OFED 版本
  • 如果用的是 Ubuntu 22.04+ 自带的 linux-modules-extra 中的 mlx5_core,注意它可能绑定了旧版固件;建议统一用官方 mlnx-ofed 包,它自带匹配的 fw 和 ko

启用 RoCE v2 后,TCP 流量延迟飙升、丢包增多

这是典型的 PFC 死锁(PFC pause storm):当交换机某端口因拥塞发 pause 帧,而接收端 RoCE 流量又恰好压满缓冲区,就会把 pause 帧反射回上游,形成环路。TCP 流量虽不直接受 PFC 影响,但共享缓存被 RoCE 占满后,TCP 包就被丢弃。

实操建议:

  • 绝对不要给 RoCE 和 TCP 流量混用同一物理接口或同一交换机端口;要么划分独立 VLAN + 独立物理链路,要么用 DCBx 协商严格隔离优先级
  • 调小 PFC buffer:在交换机侧将 RoCE 优先级 buffer 从默认 50% 降到 10–20%,同时在主机侧通过 devlink dev param set 调整 buffer_size,避免单个流吃光全部共享缓存
  • 启用 ECN 替代纯 PFC:RoCE v2 推荐组合是 PFC + ECN,而非仅 PFC;ECN 能让拥塞信号提前反馈给发送端,减少 pause 帧广播范围
  • 监控命令别只看 ibstat:加一条 watch -n1 'cat /sys/class/infiniband/mlx5_0/ports/1/counters/port_xmit_data' | tail -n1,对比 xmit 和 rcv 差值,持续增大说明丢包正在发生
事情说清了就结束。RoCE v2 不是插上线就能跑的“即插即用”技术,它的每个环节——从 BIOS PCIe 设置、交换机 DCB 配置、内核驱动参数,到用户态应用的 CQ 轮询节奏——都存在隐性耦合。漏掉其中一环,表现出来的症状可能完全无关,比如 TCP 延迟高,根源却在 RoCE 的 PFC buffer 配置不当。

相关文章

驱动精灵
驱动精灵

驱动精灵基于驱动之家十余年的专业数据积累,驱动支持度高,已经为数亿用户解决了各种电脑驱动问题、系统故障,是目前有效的驱动软件,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3188

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

5069

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3829

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

466

2026.01.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6187

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2608

2023.08.10

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

4136

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

306

2025.12.06

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

120

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn