计算机网络 E06:RDMA、RoCE 与数据中心拥塞
RDMA 可以减少远端内存操作中的 CPU 参与和数据复制,但它没有让链路容量、交换机队列或突发流量消失。RoCE 把 RDMA 传输带到以太网;可靠传输语义、链路级暂停和端到端拥塞控制仍是不同层次的问题。
第 20 篇讨论队列与 ECN,第 35 篇讨论数据中心 incast。本篇依据 RoCE、PFC 和 DCQCN 资料分析一条固定优先级队列,不给没有硬件支撑的性能结果。
RDMA 约束数据搬运语义
RDMA(Remote Direct Memory Access)允许一端通过注册内存和队列对执行远端读写或消息操作。应用需要管理内存注册、访问密钥、队列对状态和完成事件。少一次内核数据路径复制不等于没有协议处理,也不等于业务事务已经提交。
RoCE 使用以太网承载 InfiniBand 传输。RoCE v2 可在 IP/UDP 网络上路由,但具体队列对类型、重传、排序和错误处理必须按设备与传输模式核查。“UDP 不可靠”不能直接推出所有 RoCE 操作没有恢复语义;“可靠连接”也不能推出网络可以无限丢包而无代价。
模式提炼:把可靠性与拥塞控制拆开
操作完成语义 ≠ 队列不溢出 ≠ 发送速率已公平收敛
可靠性回答丢失或乱序后怎样完成或失败;拥塞控制限制注入速率;流量控制则在局部链路上暂停发送。三个机制可能同时存在,但不能相互替代。
PFC 暂停一个优先级
IEEE 802.1Qbb 定义 Priority-based Flow Control(PFC),允许接收端对指定优先级发送暂停。它可在缓存压力上升时阻止上游继续发送,作用范围是相邻链路和优先级,不是端到端按流公平控制。
同一优先级里的无关流也可能一起暂停,形成队头阻塞。暂停还可能向上游传播;配置错误或依赖环路会扩大影响范围。PFC 因此不能单独替代拥塞控制和容量规划。
暂停生效存在传播与处理延迟。若阈值到缓冲上限之间没有足够余量,飞行中的报文仍可能使队列溢出。固定模型专门保留这一差额,而不是假设触发 PFC 后立即零丢包。
ECN 与 DCQCN 反馈端到端拥塞
ECN 允许拥塞节点标记报文,由端点通过反馈调整发送。RFC 3168 给出 IP 层 ECN 的基本语义;标记表达经历拥塞,不保证报文从此不会丢失。
DCQCN 论文把 ECN、接收端拥塞通知和发送端速率调整组合用于大规模 RoCE 部署。结论依赖交换机阈值、反馈、速率算法、工作负载和设备实现。论文环境的数据不能直接移植为另一套网卡和交换机的吞吐或时延承诺。
固定队列记录的静态分析
roce_queue_model.py 按四个时间片计算一个优先级队列。阈值为 60 个报文时标记 ECN,80 个报文时请求 PFC,容量为 100。脚本记录标记、暂停和因反馈延迟仍可能发生的溢出,并指出同优先级无关流也受暂停。
1 | |
素材包括队列输入、静态分析脚本、队列结果、资料与运行记录和审阅记录。
条件、限制和反例
PFC 开启不等于无损。阈值、线缆时延、端口速率、缓存共享、pause 帧丢失和对端行为都会影响结果。
ECN 标记不等于发送端已降速。反馈需要到达端点,算法还要执行更新;在这段时间内,飞行数据可能继续进入队列。
低 CPU 占用不等于整体更快。内存注册、PCIe、NUMA、网卡缓存、消息大小和应用同步都可能成为瓶颈。
练习
练习一:缓冲容量 100,PFC 阈值 80,暂停生效前最多还有 30 个报文在途。说明为什么仍可能丢包,并计算至少需要多少余量。
练习二:两个无关流共用同一 PFC 优先级,其中一个造成拥塞。画出暂停如何影响另一个流,并说明按流队列或优先级拆分能改变什么。
模式速查表
| 机制 | 反馈范围 | 主要目标 | 不能保证 |
|---|---|---|---|
| RDMA 可靠传输模式 | 端点传输 | 操作交付/错误语义 | 网络无拥塞 |
| PFC | 相邻链路、按优先级 | 暂停上游以保护缓冲 | 按流公平、绝对无丢包 |
| ECN | 路径节点到端点 | 显式拥塞信号 | 发送端立即降速 |
| DCQCN | RoCE 端点与 ECN 网络 | 调整发送速率 | 跨设备无条件性能 |
官方与一手参考资料
- RoCE and InfiniBand,InfiniBand Trade Association,访问于 2026-09-24。
- IEEE 802.1Qbb:Priority-based Flow Control,IEEE 802.1,访问于 2026-09-24。
- RFC 3168:The Addition of Explicit Congestion Notification to IP,IETF,2001-09,访问于 2026-09-24。
- Congestion Control for Large-Scale RDMA Deployments,Microsoft Research / SIGCOMM,2015,访问于 2026-09-24。
验证边界
已验证:Python 3 标准库按固定队列、阈值和到达量计算 ECN、PFC 与溢出状态,验证类型为 STATIC。
NOT_RUN:当前环境没有 RDMA/RoCE 网卡、交换机 PFC/ECN、DCQCN、无损队列遥测或专用测试床,未测 CPU、吞吐、时延、暂停传播和丢包。没有伪造或引用脱离条件的硬件性能结果。






