DCQCN 拥塞控制算法原理和参数配置

发布时间:2026/7/27 5:54:40

DCQCN 拥塞控制算法原理和参数配置 1. DCQCN 拥塞控制算法概述在现代数据中心网络中RDMA over Converged Ethernet (RoCEv2)已成为高性能分布式存储和 AI 训练集群的主流通信协议。RDMA 要求网络提供无损传输能力这对拥塞控制提出了严苛挑战。DCQCNData Center Quantized Congestion Notification是目前 RoCEv2 网络中最广泛部署的端到端拥塞控制算法由微软、Mellanox 等厂商共同提出。它的核心思想是结合 ECN 显式拥塞通知和 PFC 优先级流控在保证网络无损的前提下动态调整发送速率以缓解拥塞。1.1 为什么需要 DCQCN在 RDMA 网络中拥塞会导致严重的性能灾难问题类型具体表现PFC 风暴过度依赖 PFC 会导致头部阻塞Head-of-Line Blocking和多跳间的不公平竞争拥塞扩散单点拥塞通过反向传播影响上游交换机形成“拥塞树”吞吐量下降频繁触发 PFC 暂停帧会导致链路利用率骤降吞吐量剧烈抖动不公平性不同流量之间缺乏协调某些流长期“饥饿”DCQCN 的设计目标就是在 PFC 被触发之前主动感知并缓解拥塞同时保证流之间的公平性。2. DCQCN 算法原理2.1 算法整体框架DCQCN 主要由三个组件构成形成闭环控制交换机拥塞检测(ECN 标记)接收端拥塞通知(CNP 报文)发送端速率调节(RP) 速降与恢复网络拥塞状态变化交换机端CPCongestion Point检测队列深度对到达阈值的数据包打上ECN 标记。接收端NPNotification Point收到带 ECN 标记的包后向发送端回传CNP 拥塞通知报文。发送端RPReaction Point收到 CNP 后执行速降之后根据定时器和字节计数器逐步恢复速率。2.2 CP ECN 协议2.3 NP CNP packets2.3 RP DCQCN2.3.1 DCQCN 速率递减方案更新速率DCQCN每隔RATE_REDUCE_MONITOR_PERIOD us 检查是否收到CNP如果收到CNP做如下处理记录当前CurrentRate用作恢复阶段的TargetRate。注如果CLAMP_TARGE_RATE1TargetRate 在每次降速阶段更新。降低速率 currentRate currentRate - (1 - α/(2^RPG_GD))降速之后所有的timer/bytes counter 重置为0。TargetRate CurrentRate CurrentRate CurrentRate * (1 - RateReduceFactor * Alpha)更新Alpha每隔 DcQcnDceAlphaUpdatePeriod【dce_tcp_rtt】 周期更新α。如果在此期间收到 CNPalpha 增加否则减少。增加公式αα * G (1-G)减少公式α α * GG控制α的变化幅度G越小α变化越快。参考CC参数实际使用时候的速率公式增加公式α (dce_tcp_g/2^10) * α (2^10-dce_tcp_g)减少公式α (dce_tcp_g/2^10) * α速率公式currentRate currentRate(1-α/2^rpg_gd)Example RPG_THRESHOLD 4如下图给出的是rpg_threshold4 时事件触发速率变化场景横轴时间纵轴是速率整个时间线包含了升速、降速和再升速的过程第一个时间点升速Time Reset事件 对Current Rate进行了升速当前速率接近Target Rate第二个时间点降速RP接收到CNP进行降速Current Rate导致CP拥塞NP发出CNP第三个时间点降速RP再次接收到CNP进行降速接下来五个时间点发生四次Time Reset事件T32次Byte Reset(BC2)位于Fast Recovery阶段下个时间点再次Time Reset事件T4达到rpg_threshold所以进入Additive Increase接下来经过了1个Time reset和两个Byte reset此时 T 5 B4进入Hyper Increase的触发条件Clamp Target Rate (Clamp 0/1): 在更新速率时Clamp 机制决定了是否要严格重置或继承历史上的 Target Rate。例如 Clamp target rate 1 时每次收到CNP降速之后都要更新target_rate current_rate可以防止速率在短暂拥塞后恢复得过于激进。Clamp target rate 0Clamp target rate 12.3.2 DCQCN 速率递增方案如果没有持续收到 CNP 报文发送端会尝试逐步恢复带宽。提速的触发器 (Triggers to rate increment) 由计时器 (Timer) 和字节计数器 (Byte Counter) 共同决定。提速过程分为三个阶段 (Increment stages)如果没有持续收到 CNP 报文发送端会尝试逐步恢复带宽。提速的触发器 (Triggers to rate increment) 由计时器 (Timer)和字节计数器 (Byte Counter)共同决定。提速过程分为三个阶段 (Increment stages)快速恢复阶段 (Fast Recovery):速率迅速上升至最近一次降速前的 Target Rate以最大化利用闲置带宽。积极增加阶段 (Additive Increase):速率超过 Target Rate 后以固定步长试探性地增加。超积极增加阶段 (Hyper Additive Increase):如果网络依然顺畅速率会以更大的步长加速提升快速抢占空闲带宽。RP 通过定时器【Timer】和字节计数器【ByteCounter】来调整发送速率其方式与 QCN[17]完全相同。每当发送了 B 个字节后字节计数器会促使发送速率上升而定时器则会在 T 个时间单位过后促使发送速率上升。定时器的存在确保了即使发送速率下降到较低水平流量也能迅速恢复。这两个参数可以通过调整来达到所需的发送速率。Rate translation in the HW硬件速率转换 (Rate translation in the HW): 逻辑上计算出的目标速率最终会被网卡底层的硬件 Pacer 模块转化为实际的发包延迟 (Inter-packet gap) 进行微秒级的流量整形。2.3.3 DCQCN 参数 (DCQCN Configuration Parameters)NVIDIA 提供了丰富的 DCQCN 参数 供高级用户针对不同业务场景进行微调。以下是影响 DCQCN 行为的关键配置项拥塞度控制 (α \alphaα相关参数):rp_initial_alpha_value: 新流建立时的初始α \alphaα值。rp_g:α \alphaα值的指数衰减因子。决定了拥塞消除后α \alphaα值下降的平滑度。rp_min_dec_fac: 接收到 CNP 时速率下降的最小百分比阈值。提速触发器 (Increment Triggers):rp_time_reset: 触发状态机进入下一个提速周期的时间间隔微秒。rp_byte_reset: 触发提速的发送字节数阈值。当发送足够多字节且未收到新 CNP 时执行提速逻辑。速率限制与阶段阈值 (Thresholds Limits):rp_rate_to_set_on_first_cnp: 在一个周期内第一次收到 CNP 时立即设定的强制速率。rp_thresholds(如RPG_THRESHOLD 4): 决定状态机在快速恢复和积极增加阶段之间切换所需完成的循环次数。rp_clamp_flags: 布尔开关用于启用或关闭 Target Rate Clamp 特性。3. DCQCN 配置参数详解DCQCN 在 RoCEv2 网卡上的行为由一组可调参数控制。以下是 Mellanox/NVIDIA ConnectX 系列网卡的关键配置参数。3.1 拥塞通知【CC Param】相关参数GeneralMLNX_OFEDDescriptionRangeDefaultEnable在特定优先级上启用 RoCE 拥塞控制 (DCQCN)Enable (1) / Disable (0)EnableAlpha UpdateMLNX_OFEDDescriptionUnitRangeDefaultdce_tcp_g每隔 DcQcnDceAlphaUpdatePeriod【dce_tcp_rtt】 周期更新α。如果在此期间收到 CNPalpha 增加否则减少。增加公式*α(dce_tcp_g/2^10)α 2^10-dce_tcp_g 减少公式*α(dce_tcp_g/2^10)α, 速率递减公式currentRatecurrentRate(1-α/2^rpg_gd)Fixed point with 10 bits in the fraction part0…10231019dce_tcp_rtt见上文。Microseconds1…1310711initial_alpha_value此参数设置在收到流的第一个 CNP 时应使用的 alpha 初始值。Fixed point with 10 bits in the fraction part1…10231023dce_tcp_g dce - decrease tcp - 沿用QCN算法术语g - gain增益参数Rate DecreaseMLNX_OFEDDescriptionUnitRangeDefaultrate_to_set_on_first_cnp第一个 CNP 时的速率当前、目标(0 – 线路速率的 85%)。Mbps0, 1…line rate [Mbit/S]0rpg_min_dec_fac此参数定义单次事件中速率降低的最大比率。%0…10050rpg_min_rate此参数定义 QP 的最小速率限制。Mbps1…line rate1rpg_gdalpha 与速率降低因子之间的系降速公式currentRatecurrentRate(1-α/2^rpg_gd)*Log2 of value in fixed point with 10 in the fraction part10…1111rate_reduce_monitor_period速率降低之间的时间周期。microseconds1…UINT324Rate IncreaseMLNX_OFEDDescriptionUnitRangeDefaultclamp_tgt_rate如果设置每次速率降低时目标速率更新为当前速率。否则仅在增量事件后的第一次减量时更新目标速率为当前速率。NoneEnable/DisableDisabledrpg_time_reset速率增加事件之间的时间周期。Microseconds1…131071300rpg_byte_reset速率增加事件之间的已发送字节计数器。64 Bytes1…3276732767rpg_threshold进入下一速率增加阶段所需的速率增加事件阈值。None1…311rpg_ai_rate加性增加阶段的速率增加值。Mbps1…line rate5rpg_hai_rate超加性增加阶段的速率增加值。Mbps1…line rate50Notification PointMLNX_OFEDDescriptionRangeDefaultcnp_dscp此参数设置 CNP 的 DSCP 值。0…6348cnp_802p_prio此参数设置 CNP 的 PCP 值。设置 DcQcnCnpPrioMode 为 ‘0’ 以使用此优先级值。0…76DcQcnCnpPrioMode不需要设置如果设置了cnp_dscp和cnp_802p_prio该参数被自动设置。如果此参数设置为 ‘0’则使用配置的 CNP 优先级否则CNP 的优先级值取自接收到的数据包。0/10min_time_between_cnps从端口同一条优先级队列发送两次 CNP 之间的最小时间间隔微秒。0…409543.2 ECN 标记阈值参数ECN 标记由交换机完成通常在交换机端口配置参数名说明默认值建议范围ecn_min_absolute/ecn_max_absolute绝对队列深度阈值字节低于 min 不标记高于 max 全部标记min: 150KB, max: 1500KB取决于 Buffer 大小wred_ecn_enable启用 WRED ECN 标记enable必须开启ecn_marking_enable启用 ECN 标记功能enable必须开启3.3 PFC 相关参数DCQCN 与 PFC 协同工作PFC 参数需要在交换机端和网卡端对齐参数名说明默认值建议pfc_priority启用 PFC 的优先级一般是 3 或 63与 RDMA 流量优先级一致pfc_pause_timePFC 暂停帧的暂停时间quantum 512 比特时间65535100–65535pfc_xon_threshold恢复发送的队列深度阈值略低于 XOFF比 XOFF 低 10%–20%pfc_xoff_threshold触发 PFC 暂停的队列深度阈值视 Buffer 而定略高于 ECN max4. DCQCN 配置命令实战4.1 场景说明本节以Mellanox ConnectX-5/6 网卡 NVIDIA Spectrum 交换机为例演示 DCQCN 的完整配置。网络拓扑两台服务器直连交换机运行 RoCEv2 流量RDMA 流量映射到 Priority 3使用 DSCP 26 作为 RDMA 流量的标识4.2 网卡端 DCQCN 配置在服务器侧通过mlxconfig或sysfs配置 DCQCN 参数# 查看当前 DCQCN 参数mlxconfig-d/dev/mst/mt4125_pciconf0 query# 设置 RP发送端参数mlxconfig-d/dev/mst/mt4125_pciconf0set\DCQCN_RP_AI_RATE10\DCQCN_RP_BC_STAGE_THRESHOLD2097152\DCQCN_RP_GD16\DCQCN_RP_RATE_REDUCE2\DCQCN_RP_TIMER55\DCQCN_RP_BYTE_RESET0\DCQCN_RP_DCP_TIMER_CYCLES16# 设置 NP接收端参数mlxconfig-d/dev/mst/mt4125_pciconf0set\DCQCN_NP_CNP_PRIO6\DCQCN_NP_MIN_TIME_BETWEEN_CNP4通过 sysfs 实时调整 DCQCN 反应端参数 (Reaction Point)在开启 RoCE ECN 功能后网卡的 DCQCN 参数通常挂载在系统内核目录中以 mlx5_0 为例# 查看所有 RoCE CC 配置参数ls/sys/kernel/debug/mlx5/mlx5_0/cc_params/# 修改降速阶段的计时器和字节触发阈值echo50/sys/kernel/debug/mlx5/mlx5_0/cc_params/rp_time_resetecho32768/sys/kernel/debug/mlx5/mlx5_0/cc_params/rp_byte_reset# 调整初始 Alpha 值echo1023/sys/kernel/debug/mlx5/mlx5_0/cc_params/rp_initial_alpha_value4.3 交换机端 ECN PFC 配置NVIDIA Spectrum / Cumulus Linux# 进入交换机配置模式switch# configure terminal# 设置 PFC 优先级假设 RDMA 流量在 Priority 3switch(config)# dcb priority-flow-control enable forceswitch(config)# interface swp1-32switch(config-if)# dcb pfc priority 3 enable# 配置 PFC 阈值switch(config-if)# pfc xoff threshold priority 3 1000switch(config-if)# pfc xon threshold priority 3 800# 配置 WRED ECN 标记switch(config-if)# qos wred enableswitch(config-if)# qos wred ecn enable# 设置 ECN 标记的队列深度阈值switch(config-if)# qos wred ecn queue 3 min-threshold 150000 max-threshold 1500000# 将 DSCP 26 映射到 Priority 3switch(config)# dcb ets priority-group 0 bandwidth 80switch(config)# dcb ets priority-group 1 bandwidth 20switch(config)# dcb ets priority 3 group 1switch(config)# qos dscp-map dscp 26 priority 3# 保存配置switch(config)# write memory4.4 验证与监控命令配置完成后通过以下命令验证 DCQCN 是否生效# 1. 检查网卡 ECN 统计发送端cat/sys/class/infiniband/mlx5_0/ports/1/counters/ecn_marked_roce_packets# 2. 检查 CNP 收发统计ethtool-Seth0|grep-icnp# 3. 通过 perfquery 查看 RDMA 拥塞计数器perfquery-x-dmlx5_01|grep-iecn# 4. 在交换机侧查看 PFC 触发次数switch# show interface swp1 counters | grep pfc# 5. 实时监控 DCQCN 速率变化部分驱动支持watch-n1cat /sys/kernel/debug/mlx5/0000:3b:00.0/cc_params/*/current_rate4.5 常见调优建议场景调优方向延迟敏感型业务如分布式存储降低ECN min阈值尽早触发拥塞通知减小AI_RATE避免速率过快增长高吞吐型业务如 AI 训练集合通信增大BC_STAGE_THRESHOLD减少恢复阶段的触发频率适当提高AI_RATE混合流量环境提高NP_MIN_TIME_BETWEEN_CNP避免 CNP 泛滥影响正常流量频繁 PFC 触发降低ECN max阈值让 ECN 在 PFC 之前介入增大RATE_REDUCE逆数以加快降速5. 总结DCQCN 是 RDMA over Converged Ethernet 网络中最核心的端到端拥塞控制机制。它通过ECN 标记 → CNP 通知 → 发送端速降与恢复的闭环在保证无损传输的同时显著提升网络利用率。配置 DCQCN 时需要关注三个层面的参数协同交换机端ECN 标记阈值与 PFC 阈值需要形成梯级保护ECN 先于 PFC 触发接收端NPCNP 生成频率不能过高避免拥塞信号放大的正反馈发送端RP速降因子和恢复参数需根据业务延迟/吞吐需求进行针对性调优在实际部署中建议先在测试环境通过perfquery和网卡计数器观察 DCQCN 行为再根据业务特征微调参数最后通过灰度发布推广到生产环境。参考链接DCQCN CC Algorithmhttps://enterprise-support.nvidia.com/s/article/DCQCN-CC-algorithmDCQCN Parameters: https://enterprise-support.nvidia.com/s/article/dcqcn-parametersDCQCN经典论文: https://conferences.sigcomm.org/sigcomm/2015/pdf/papers/p523.pdfhttps://zhuanlan.zhihu.com/p/1986442361417519293

相关新闻