瞻博网络 RDMA 感知负载平衡 (LB) 和 BGP-DPF – GPU 后端交换矩阵 IP 服务
在本节中,我们将介绍用于解决后端 GPU 交换矩阵内流量拥塞和优化负载分布的策略。
拥塞管理和拥塞控制配置
拥塞管理和拥塞控制使用 数据中心量化拥塞通知 (DCQCN) 方法实施,确保流量公平性并保持整个无损交换矩阵的稳定性。
AI 群集具有 高密度 和 低熵 流量模式,具有频繁的大象流和最小的流量可变性,因此对网络基础设施提出了独特的要求。此外,大多数 AI 训练工作负载需要不间断、无损的数据包传输才能成功完成。因此,在为 AI 流量设计网络基础架构时,关键目标包括 最大限度地提高吞吐量、 最小化延迟和 最小化网络干扰 ,同时确保 无损作。这些要求需要部署有效的拥塞控制机制。
数据中心量化拥塞通知 (DCQCN) 已成为 RoCEv2 环境下端到端拥塞控制的行业标准方法。DCQCN 提供根据拥塞事件调整流量速率的机制,无需依赖丢包,从而在降低流量速率和保持持续流量之间取得平衡。
值得注意的是,DCQCN 主要在 GPU 后端交换矩阵中所必需,因为 GPU 后端交换矩阵是大部分 AI 工作负载流量驻留的地方。在前端和存储后端交换矩阵中通常不需要。
DCQCN 结合了两种互补机制来实施流量和拥塞控制:
- 基于优先级的流控制 (PFC)
- 显式拥塞通知 (ECN)
基于优先级的流控制 (PFC) 根据 IEEE 802.1p 优先级或映射到队列的 DSCP 标记,暂停特定流量类别的流量传输,从而减少数据丢失。
检测到拥塞时,PFC 的工作原理是向上游发送 PAUSE 控制帧 ,请求发送方停止传输与特定优先级关联的流量。发送方将完全停止为该优先级发送流量,直到拥塞消退或暂停计时器到期。
虽然 PFC 可以防止丢包并允许接收方跟上,但它也会影响使用受影响队列的流量的应用性能。此外,暂停后恢复传输可能会导致流量突然激增,从而可能重新引发拥塞。因此,应仔细配置 PFC,以便将其用作最后的资源。
显式拥塞通知 (ECN) 提供主动拥塞信号机制,可降低传输速率,同时允许流量在拥塞期间继续流动。
发生拥塞时,IP 报头中的 ECN 位将被标记 (11),提示接收方生成 拥塞通知包 (CNP),通知源限制其传输速率。与 PFC 不同,ECN 旨在在不完全停止流量或触发丢包的情况下逐步减少拥塞。
最佳实践:结合 PFC 和 ECN 可在支持 RoCEv2 的无损 IP 交换矩阵中提供最有效的拥塞控制策略。必须仔细调整它们的参数,以便在 PFC 之前触发 ECN 机制。
有关更详细的指导,请参阅瞻博网络 AI 网络中的拥塞控制简介,其中概述了使用 DCQCN(ECN 和 PFC)拥塞控制方法以及动态负载平衡 (DLB) 为 AI 工作负载构建无损交换矩阵的最佳实践。本文基于针对 DLRM 训练模型的验证,演示了如何监控和调整 ECN 阈值、PFC 参数、输入丢弃和尾部丢弃,从而优化 RoCEv2 流量的交换矩阵性能。
虽然我们提供一般建议和实验室验证参数,但每个 AI 工作负载可能呈现出不同的流量模式。可能需要进一步调整服务等级 (CoS) 和负载平衡属性,以匹配特定模型和群集环境的特定特征。
JVD 中的此叶节点和主干节点配置了已确定可提供最佳性能的 CoS 参数。
以下配置将统一应用于交换矩阵中的所有设备。
流量分类
set class-of-service classifiers dscp fabric-dscp forwarding-class CNP loss-priority low code-points 110000 set class-of-service classifiers dscp fabric-dscp forwarding-class NO-LOSS loss-priority low code-points 011010 set class-of-service interfaces et-* unit * classifiers dscp fabric-dscp
流量分类基于 DSCP,并使用 fabric-dscp 分类器实施,该分类器定义了两个转发类: NO-LOSS 和 CNP。此分类器适用于所有 et-* unit * 逻辑接口。
所有带有 DSCP 011010 (26) 的传入流量都归类为无损,而标记为 DSCP 110000 (48) 的流量归类为 CNP。所有 GPU 服务器均配置为使用 DSCP 26 标记 RoCEv2 流量,使用 DSCP 48 标记拥塞通知包 (CNP)。
有关如何在 Nvidia 和 AMD GPU 服务器上配置 DCQCN 参数的详细信息,请参阅使用 Juniper Apstra、NVIDIA GPU 和 WEKA 存储 JVD 的 AI 数据中心网络配置 NVIDIA DCQCN – ECN 部分和配备 Juniper Apstra、AMD GPU 和 Vast Storage JVD 的 AI 数据中心网络。
set class-of-service forwarding-classes class CNP queue-num 3 set class-of-service forwarding-classes class NO-LOSS queue-num 4 set class-of-service forwarding-classes class NO-LOSS no-loss set class-of-service forwarding-classes class NO-LOSS pfc-priority
CNP 流量分配给输出队列 3,而 NO-LOSS 流量分配给输出队列 4。
队列 4 使用 no-loss 属性配置为无损队列,并映射到 PFC 优先级 3。将队列定义为 无损 可确保映射到此类的数据包不会因拥塞而丢弃,而是 RoCEv2 的基本要求。将转发类配置为无损也会影响交换机上的缓冲区分配,从而预留额外空间来支持流控制机制(如 PFC)。
缓冲 区有两种类型:
- 共享缓冲池:由所有端口动态共享的全局内存空间。它分为有损和无损流量类型。较大的共享缓冲区有助于缓解流量突发。
- 专用缓冲池:为每个端口分配的内存保留部分,然后在该端口上的队列之间划分。尽管可以调整,但系统始终保留最小数量。更大的专用缓冲池意味着一个端口上的拥塞不太可能影响另一个端口上的流量,因为流量不需要使用那么多共享缓冲区空间。专用缓冲池越大,交换机可以处理的突发流量就越少,因为动态共享缓冲区内存越少。
此 JVD 中共享缓冲区和专用缓冲区的建议值如下:
set class-of-service shared-buffer ingress buffer-partition lossless percent 66 set class-of-service shared-buffer ingress buffer-partition lossless dynamic-threshold 10 set class-of-service shared-buffer ingress buffer-partition lossless-headroom percent 24 set class-of-service shared-buffer ingress buffer-partition lossy percent 10 set class-of-service shared-buffer egress buffer-partition lossless percent 66 set class-of-service shared-buffer egress buffer-partition lossy percent 10
共享缓冲区:
- 入口无损百分比 66:为无损流量预留 66% 的入口共享缓冲区空间,例如 RoCEv2。
- 入口无损裕量百分比 24:额外腾出 24% 的入口缓冲区空间,专门作为突发吸收的裕量。这可以确保 RoCEv2 流在等待 PFC 暂停帧生效时有足够的空间来容纳微爆发。
- 入口有损百分比 10:为有损流量预留 10% 的入口共享缓冲区空间。
- 入口无损动态阈值 10:允许无损缓冲池动态扩展到未使用的有损缓冲区空间高达 10%,从而在重负载下提供灵活性。
- 出口无损百分比 66:为无损流量预留 66% 的出口共享缓冲区空间。
- 出口有损百分比 10:为有损流量分配 10%。
专用缓冲区(按端口或按队列):
- 入口百分比 15:将总入口缓冲区容量的 15% 分配为专用缓冲区。这些不会被共享,而是保留给特定的流量类别或端口。
- 出口百分比 30:预留 30% 的出口缓冲区空间专用。
当此缓冲区空间开始被填满时,PFC 机制会向流量源发送以太网暂停帧,指示其暂时停止传输并防止数据包丢失。
由于流量分类是基于 DSCP 的,并且 GPU 服务器和叶节点之间的接口未 标记,因此 PFC 实施是 基于 DSCP 的 PFC。拥塞通知配置文件 PFC 适用于所有 et-* 接口,用于定义 PFC 的作详细信息。
set class-of-service interfaces et-* congestion-notification-profile pfc set class-of-service congestion-notification-profile pfc pfc-watchdog set class-of-service congestion-notification-profile pfc input dscp code-point 011010 pfc set class-of-service congestion-notification-profile pfc output ieee-802.1 code-point 011 flow-control-queue 4
拥塞通知配置文件可能会被解释为与拥塞通知包 (ECN) 相关。在某些文档中也可以找到 Congestion-notification-profile 缩写为 CNP。但是,此配置文件定义 PFC 的行为,而非 ECN。
PFC 看门狗功能监控由持续 PFC 暂停条件引起的死锁或卡滞队列。如果队列暂停时间过长(表示可能出现队头阻塞),看门狗可以采取纠正措施来避免流量阻塞情况。
输入 dscp 代码点 011010 pfc 语句指定,当检测到拥塞时,标有 DSCP 值 011010(十进制 26)的传入流量应触发 PFC。从本质上讲,如果 DSCP 26 (RoCEv2) 流量遇到拥塞,将生成优先级 3 的 PFC 帧以暂停上游发送方(映射到代码点 26 的 PFC 优先级 3)。将根据前面描述的转发类 NO-LOSS 配置为优先级 3 生成暂停帧。
在下面的示例中:
将以下命令应用于接口 et-0/0/0:0 和 et-0/0/1:0 的组合会将设备配置为将所有具有 DSCP 26 的入站流量分类为转发类 NO-LOSS,该转发类分配给队列 4 并映射到 pfc 优先级 3,使队列 4 成为无损队列,并为具有 DSCP 26 的流量启用 PFC。
set class-of-service classifiers dscp fabric-dscp forwarding-class NO-LOSS loss-priority low code-points 011010 set class-of-service forwarding-classes class NO-LOSS queue-num 4 set class-of-service forwarding-classes class NO-LOSS no-loss set class-of-service forwarding-classes class NO-LOSS pfc-priority 3 set class-of-service congestion-notification-profile pfc input dscp code-point 011010 pfc
输出 ieee-802.1 代码点 011 flow-control-queue 4 语句指定,当收到优先级为 3 的暂停帧时,队列 4 的流量必须停止。
流量调度
set class-of-service interfaces et-* scheduler-map sm1 set class-of-service scheduler-maps sm1 forwarding-class CNP scheduler s2-cnp set class-of-service scheduler-maps sm1 forwarding-class NO-LOSS scheduler s1
调度器映射 sm1 适用于所有 et-* 接口,并定义每个转发类的流量调度方式。
包括两个 调度程序 :
- s1 用于 无损流量 (队列 4)
- 用于 CNP 流量 的 s2-CNP(队列 3)
无损流量调度(调度程序 s1)
set class-of-service schedulers s1 drop-profile-map loss-priority any protocol any drop-profile dp1 set class-of-service schedulers s1 explicit-congestion-notification set class-of-service drop-profiles dp1 interpolate fill-level 55 set class-of-service drop-profiles dp1 interpolate fill-level 90 set class-of-service drop-profiles dp1 interpolate drop-probability 0 set class-of-service drop-profiles dp1 interpolate drop-probability 100
调度程序 s1 控制如何服务 NO-LOSS 转发类(队列 4)中的流量。它应用丢弃配置文件 dp1,并使用 explicit-拥塞-notification 语句启用显式拥塞通知 (ECN) 标记。
Junos 中的丢弃配置文件通常用于控制队列缓冲区填满时丢弃数据包的积极程度。但是,启用 ECN 后,配置文件将用于标记数据包,而不是丢弃数据包。标记数据包意味着根据配置的阈值在 IP 报头中设置拥塞经历 (客户边缘) 位。
轮廓 dp1 定义了线性跌落曲线,其中:
- 缓冲 区填充率为 55% 时,数据包 不会被标记 (概率为 0%)。
- 缓冲 区填充率为 90% 时, 标记所有匹配的数据包 (概率为 100%)。
- 在 55% 到 90% 之间, 标记概率 从 0% 线性增加到 100%。
这种方法可确保尽早将拥塞反馈到 RoCEv2 端点,同时保持无损交付。
CNP 流量调度(调度器 s2-cnp)
调度程序 s2-cnp 指定如何处理队列 3 中的 CNP 流量。它为队列分配严格高优先级,并保留 5% 的接口带宽:
set class-of-service schedulers s2-cnp transmit-rate percent 5 set class-of-service schedulers s2-cnp priority strict-high
分配严格高优先级和最小带宽可确保在拥塞期间,能够通过交换矩阵传输在 DCQCN 中触发基于源的速率降幅所需的拥塞通知包 (CNP)。
严格高优先级队列始终先于任何其他队列提供服务(其他高优先级队列除外),这可能会使优先级较低的流量耗尽。但是,在这种情况下,饥饿的风险很小,因为 CNP 流量通常非常小。因此,无需对此队列 进行速率限制 。
拥塞管理和拥塞控制验证
该 show class-of-service interface <interface> 命令显示调度器映射、是否启用拥塞通知、配置文件名称以及应用于接口的分类器。
jnpr@stripe1-leaf2> show class-of-service interface et-0/0/0:0 Physical interface: et-0/0/0:0, Index: 1292 Maximum usable queues: 12, Queues in use: 5 Exclude aggregate overhead bytes: disabled Logical interface aggregate statistics: disabled Scheduler map: sm1 Congestion-notification: Enabled, Name: cnp, Index: 1 Logical interface: et-0/0/0:0.0, Index: 1256 Object Name Type Index Classifier fabric-dscp dscp 5
该 show class-of-service classifier <classifier-name> 命令显示 DSCP 值与转发类之间的映射,可用于确认正确的分配(CNP => 48,NO-LOSS => 26)
jnpr@stripe1-leaf2> show class-of-service classifier name fabric-dscp Classifier: fabric-dscp, Code point type: dscp, Index: 5 Code point Forwarding class Loss priority 011010 NO-LOSS low 110000 CNP low
命令输出显示 show class-of-service forwarding-class 了转发类到队列的映射。可用于确认正确的映射(CNP =>队列 3,NO-LOSS => 队列 4),以及 NO-LOSS 队列的 No-LOSS 状态和 PFC 优先级。
jnpr@stripe1-leaf2> show class-of-service forwarding-class Forwarding class ID Queue Policing priority No-Loss PFC priority CNP 1 3 normal disabled 0 NO-LOSS 2 4 normal enabled 3 best-effort 0 0 normal disabled 0 mcast 8 8 normal disabled 0 network-control 3 7 normal disabled 0
show class-of-service scheduler-map sm1命令输出显示调度器映射 sm1 以及调度器 s1 和 s2-cnp,包括它们的优先级、分配的速率以及是否启用了 ECN。
jnpr@spine1> show class-of-service scheduler-map sm1
Scheduler map: sm1, Index: 2
Scheduler: s2-cnp, Forwarding class: CNP, Index: 7
Transmit rate: 5 percent, Rate Limit: none, Buffer size: unspecified, Buffer Limit: none, Buffer dynamic threshold:
unspecified,
Priority: strict-high
Excess Priority: unspecified, Excess rate: unspecified, Explicit Congestion Notification: disable, ECN pfc no assist:
disable
Drop profiles:
Loss priority Protocol Index Name
Low any 0 default-drop-profile
Medium high any 0 default-drop-profile
High any 0 default-drop-profile
Scheduler: s1, Forwarding class: NO-LOSS, Index: 6
Transmit rate: unspecified, Rate Limit: none, Buffer size: unspecified, Buffer Limit: none, Buffer dynamic threshold:
unspecified,
Priority: low
Excess Priority: unspecified, Excess rate: unspecified, Explicit Congestion Notification: enable, ECN pfc no assist: mark
Drop profiles:
Loss priority Protocol Index Name
Low any 0 dp1
Medium high any 0 dp1
High any 0 dp1
该 show interfaces queue <interface> 命令与不同的选项和输出过滤器结合使用,可以帮助确定是否存在任何数据包丢弃、ECN 标记和 PFC 暂停帧。
jnpr@stripe1-leaf2> show interfaces queue et-0/0/0:0 forwarding-class CNP
Physical interface: et-0/0/0:0, up, Physical link is Up
Interface index: 1292, SNMP ifIndex: 703
Description: facing_spine1:et-0/0/1:0
Forwarding classes: 12 supported, 5 in use
Egress queues: 12 supported, 5 in use
Queue: 3, Forwarding classes: CNP
Queued:
Packets : 0 0 pps
Bytes : 0 0 bps
Transmitted:
Packets : 0 0 pps
Bytes : 0 0 bps
Tail-dropped packets : 0 0 pps
Tail-dropped bytes : 0 0 bps
RED-dropped packets : 0 0 pps
RED-dropped bytes : 0 0 bps
ECN-CE packets : 0 0 pps
ECN-CE bytes : 0 0 bps
输出显示已排队的 CNP 数据包 (DSCP 48) 数。此值的增量表示已沿路径检测到拥塞,并且接收方正在发送 CNP 数据包以响应客户边缘 = 1 的数据包。
jnpr@stripe1-leaf2> show interfaces queue et-0/0/0:0 forwarding-class NO-LOSS
Physical interface: et-0/0/0:0, up, Physical link is Up
Interface index: 1292, SNMP ifIndex: 703
Description: facing_spine1:et-0/0/1:0
Forwarding classes: 12 supported, 5 in use
Egress queues: 12 supported, 5 in use
Queue: 4, Forwarding classes: NO-LOSS
Queued:
Packets : 1375227202 0 pps
Bytes : 4236817861328 0 bps
Transmitted:
Packets : 1375227202 0 pps
Bytes : 4236817861328 0 bps
Tail-dropped packets : 0 0 pps
Tail-dropped bytes : 0 0 bps
RED-dropped packets : 0 0 pps
RED-dropped bytes : 0 0 bps
ECN-CE packets : 0 0 pps
ECN-CE bytes : 0 0 bps
输出显示标有客户边缘 = 1 的无损数据包 (DSCP = 26) 的数量。如果此数字在增加,则表明已检测到拥塞。
jnpr@stripe1-leaf2> show interfaces et-0/0/0:0 extensive | match ecn
Resource errors: 0, ECN Marked packets: 0
输出显示接口 et-0/0/0:0 上发现的标有客户边缘 = 1 的数据包数。
jnpr@stripe1-leaf2> show interfaces et-0/0/0:0 extensive | find "MAC Priority Flow Control Statistics"
MAC Priority Flow Control Statistics:
Priority : 0 0 0
Priority : 1 0 0
Priority : 2 0 0
Priority : 3 0 0
Priority : 4 0 0
Priority : 5 0 0
Priority : 6 0 0
Priority : 7 0 0
输出显示接口 et-0/0/0:0 上按优先级发送/接收的 PFC 暂停帧数。
jnpr@stripe1-leaf2> show interfaces et-0/0/0:0 extensive | find " CoS information:"
CoS information:
Direction : Output
CoS transmit queue
Bandwidth Buffer Priority Limit
% bps % usec
3 CNP 5 20000000000 r 0 strict-high none
4 NO-LOSS r r r 0 low none
输出显示接口 et-0/0/0:0 上转发类 CNP 和 NO-LOSS 的带宽分配、传输速率和队列优先级。
jnpr@stripe1-leaf2> show interfaces queue buffer-occupancy et-0/0/0:0
Physical interface: et-0/0/0:0, Enabled, Physical link is Up
Interface index: 1292, SNMP ifIndex: 703
Forwarding classes: 12 supported, 5 in use
Egress queues: 12 supported, 5 in use
Queue: 0, Forwarding classes: best-effort
Queue-depth bytes :
Peak : 0
Queue: 3, Forwarding classes: CNP
Queue-depth bytes :
Peak : 0
Queue: 4, Forwarding classes: NO-LOSS
Queue-depth bytes :
Peak : 0
Queue: 7, Forwarding classes: network-control
Queue-depth bytes :
Peak : 254
Queue: 8, Forwarding classes: mcast
Queue-depth bytes :
Peak : 0
输出显示接口 et-0/0/0:0 上每个队列的峰值队列占用情况。
jnpr@stripe1-leaf2> show class-of-service shared-buffer
Ingress:
Total Buffer : 169207 KB
Dedicated Buffer : 4627 KB
Shared Buffer : 143472 KB
Lossless : 94691 KB
Lossless Headroom : 34432 KB
Lossy : 14347 KB
Lossless dynamic threshold : 10
Lossy dynamic threshold : 10
Lossless Headroom Utilization:
Node Device Total Used Free
0 34432 KB 29235 KB 5197 KB
ITM0 Headroom Utilization:
Total Used Free
17216 KB 15260 KB 1956 KB
ITM1 Headroom Utilization:
Total Used Free
17216 KB 13975 KB 3241 KB
Egress:
Total Buffer : 169207 KB
Dedicated Buffer : 14162 KB
Shared Buffer : 143472 KB
Lossless : 94691 KB
Lossy : 14347 KB
Lossy dynamic threshold : 7
输出显示系统缓冲区分配。
瞻博网络 ITM(入口流量管理器)是一个管理数据包缓冲和队列的组件。
负载平衡故障场景 - 回退到 DLB
本文档中所述的 RDMA 感知负载平衡是主要的负载平衡解决方案,但当链路或交换机发生故障时,流量将回退到备用 ECMP 多路径,并利用 DLB 进行 ECMP 决策。例如,考虑存在 4 个主干且配置了 4 种颜色的场景:
set policy-options community blue members color:0:2 set policy-options community color-all members color:0:* set policy-options community green members color:0:1 set policy-options community orange members color:0:4 set policy-options community red members color:0:3 set protocols bgp fabric-advertise route fc00:1:1:1::/64 color green set protocols bgp fabric-advertise route fc00:1:1:1::/64 backup-color all-colors set protocols bgp fabric-advertise route fc00:1:1:2::/64 color blue set protocols bgp fabric-advertise route fc00:1:1:2::/64 backup-color all-colors set protocols bgp fabric-advertise route fc00:1:1:3::/64 color red set protocols bgp fabric-advertise route fc00:1:1:3::/64 backup-color all-colors set protocols bgp fabric-advertise route fc00:1:1:4::/64 color orange set protocols bgp fabric-advertise route fc00:1:1:4::/64 backup-color all-colors set protocols bgp group spine1 fabric-color green set protocols bgp group spine2 fabric-color blue set protocols bgp group spine3 fabric-color red set protocols bgp group spine4 fabric-color orange
因此,流量会通过它们的首选路径进行转发。
| 颜色首 | 选路径 | 备份路径 |
|---|---|---|
| 绿色 | 主干 1 | 主干 2、主干 3、主干 4 |
| 蓝色 | 主干 2 | 主干 1、主干 3、主干 4 |
| 红色 | 主干 3 | 主干 1、主干 2、主干 4 |
| 橙色 | 主干 4 | 主干 1、主干 2、主干 3 |
的流量转发
如果 Stripe 1 Leaf 1 和主干 4 之间的链路出现故障,则橙色流量将通过备用路径重新路由。负载根据 DLB 进行分配。
动态负载平衡 (DLB)
动态负载平衡 (DLB) 不仅查看数据包标头,而且在选择路径时,还会根据端口负载(链路利用率)和端口队列深度考虑实时链路质量,从而确保所有路径得到更公平的利用。当需要对移动大量数据的多个长期流进行负载平衡时,此方法可提供更好的结果。
DLB 可以配置为两种不同的模式:
- 按数据包模式:来自同一流的数据包将喷送到 IP ECMP 组的链路成员上,这可能导致数据包无序到达。
- 流模式:来自同一流的数据包通过 IP ECMP 组的链路成员发送。流被定义为同一流的突发,由不活动的时间段分隔。如果流暂停的时间超过配置的非活动计时器,则可以重新评估链路成员的质量,并将流重新分配给其他链路。
在此 JVD 中,叶节点和主干节点都配置为使用 动态负载均衡流模式(应用于 IPv4 和 IPv6 流量)来均衡流量。
有关更多信息,请参阅 数据中心的负载平衡 ,其中全面深入探讨了各种负载平衡机制及其演变,以满足数据中心的需求。
以下示例显示了应用于所有设备的配置:
jnpr@gpu-backend-rack1-001-leaf2> show configuration forwarding-options | display set set forwarding-options hash-key family inet layer-3 set forwarding-options hash-key family inet layer-4 set forwarding-options enhanced-hash-key ecmp-dlb flowlet inactivity-interval 128 set forwarding-options enhanced-hash-key ecmp-dlb flowlet flowset-table-size 2048 set forwarding-options enhanced-hash-key ecmp-dlb ether-type ipv4 set forwarding-options enhanced-hash-key ecmp-dlb ether-type ipv6 set forwarding-options enhanced-hash-key ecmp-dlb sampling-rate 1000000
此配置定义流量的识别方式,以及根据实时拥塞和流量特征将流量重新分配给备用 ECMP 路径的条件。
and hash-key family inet layer-4 语 hash-key family inet layer-3 句将 ECMP 散列函数配置为同时包括 IP 地址和 TCP/UDP 端口,确保 IPv4 流在 ECMP 路径上的精细分配。
enhanced-hash-key 下的参数修改 ECMP 流量转发的 DLB 散列算法,实现基于流的检测和智能重新分配。其中包括:
ecmp-dlb flowlet inactivity-interval
指定用于检测流之间边界的最小数据包间间隙(以微秒为单位)。当超过此阈值时,将识别新流。
推荐值为 128 微秒。
ecmp-dlb flowset-table-size
定义可存储在 DLB 散列表中的最大流集(宏流)条目数。这控制设备可以跟踪多少活动流量以进行动态重新分配。此值必须是 8 的倍数。
建议值为 2048。
sampling rate:
通过配置 QFX 转发 ASIC 对出口 ECMP 成员上的端口负载进行采样并更新质量分数,定义用于检测拥塞的采样率。
建议值为 1,000,000,这意味着每百万个数据包中就有 1 个被采样,平衡开销和响应能力。
ether-type ipv4和ether-type ipv6:
为 IPv4 和 IPv6 数据包启用增强型 ECMP DLB
负载平衡验证
要验证当前正在使用的 DLB 参数,可以使用作命令: show forwarding-options enhanced-hash-key 。输出显示系统应用于 ECMP 动态负载平衡 (DLB) 的值,包括 flowlet 行为。
jnpr@stripe1-leaf1> show forwarding-options enhanced-hash-key Current RTAG7 Settings ------------------------- Hash-Mode :layer2-payload Hash-Seed :112443776 inet RTAG7 settings: ---------------------- inet packet fields protocol :yes Destination IPv4 Addr :yes Source IPv4 Addr :yes destination L4 Port :yes Source L4 Port :yes Vlan id :no RDMA Queue Pair :yes inet non-packet fields incoming port :yes inet6 RTAG7 settings: ---------------------- inet6 packet fields next-header :yes Destination IPv6 Addr :yes Source IPv6 Addr :yes destination L4 Port :yes Source L4 Port :yes Vlan id :no RDMA Queue Pair :yes inet6 non-packet fields incoming port :yes Hash-Parameter Settings for ECMP: ------------------------------------ Hash Function = CRC16_BISYNC Hash offset base = 16 Hash offset = 5 Hash preprocess = 0 Hash-Parameter Settings for LAG: ------------------------------------ Hash Function = CRC16_CCITT Hash offset base = 0 Hash offset = 5 Hash preprocess = 0 Ecmp Resilient Hash = Disabled ECMP DLB Load Balancing Options: --------------------------------------------------- Load Balancing Method : Flowlet Inactivity Interval : 128 (us) Flowset Table size : 2048 (entries per ECMP) Reassignment Probability Threshold : 0 Reassignment Quality Delta : 0 Egress Port Load Weight : 50 EgressBytes Min Threshold : 10 EgressBytes Max Threshold : 50 Sampling Rate : 1000000 Ether Type : Ipv4 Ipv6
输出中显示的出口 端口负载权重 定义了在计算 端口质量 分数时分配给端口负载和端口队列长度的权重。 EgressBytes Min 和 EgressBytes Max 阈值 定义质量频段。DLB 会将端口负载低于此最小值的任何出口端口分配给最高质量频段 (7)。任何大于最大阈值的端口负载都属于最低质量频段 (0)。DLB 将剩余的端口负载量划分为质量波段 1 到 6。
建议维护默认值: 出口端口负载权重 (50)、 出口字节数、最小 阈值 (10) 和 出口字节数最大阈值 (50)。 使用这些值无需任何配置。