0

0

Linux rdma 的 RoCE v2 与 mlx5_core 驱动调优

舞夢輝影

舞夢輝影

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

|

891人浏览过

|

来源于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 驱动参数对齐。

实操建议:

68爱写
68爱写

专业高质量AI4.0论文写作平台,免费生成大纲,支持无线改稿

下载
  • 先确认交换机端口已启用 PFC 对应 RoCE 的优先级(通常是 priority 3priority 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 接口也得同步改
  • 确认没有启用 iptablesnftables 规则——哪怕只是 LOG 目标,也会让部分 RoCE 数据包被拉入内核协议栈,导致超时重传
  • perf record -e "mlx5:sw_irq" -a sleep 10 看是否频繁触发软件中断;如果出现,说明有大量 Completion Queue (CQ) 事件没被及时轮询,要调大 ibv_create_cqcqe 参数或优化用户态轮询逻辑

mlx5_core 驱动加载失败,dmesgFailed to load FWPCIe 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, PhYComplntLnkSta: Speed 2.5GT/s, Width x8——这就必须换插槽
  • FW 加载失败时,别急着重刷固件;先运行 mlxfwmanager --query 看当前 FW 版本,再查 Mellanox FW 兼容矩阵,确认该 FW 是否支持你用的内核版本和 OFED 版本
  • 如果用的是 Ubuntu 22.04+ 自带的 linux-modules-extra 中的 mlx5_core,注意它可能绑定了旧版固件;建议统一用官方 mlnx-ofed 包,它自带匹配的 fwko

启用 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工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

1630

2023.10.19

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

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

485

2025.10.17

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

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

2304

2025.12.29

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

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

40

2026.01.19

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

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

422

2023.07.18

堆和栈区别
堆和栈区别

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

595

2023.08.10

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

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

687

2024.01.03

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

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

22

2025.12.06

Golang 生态工具与框架:扩展开发能力
Golang 生态工具与框架:扩展开发能力

《Golang 生态工具与框架》系统梳理 Go 语言在实际工程中的主流工具链与框架选型思路,涵盖 Web 框架、RPC 通信、依赖管理、测试工具、代码生成与项目结构设计等内容。通过真实项目场景解析不同工具的适用边界与组合方式,帮助开发者构建高效、可维护的 Go 工程体系,并提升团队协作与交付效率。

1

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.6万人学习

Git 教程
Git 教程

共21课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号