了解 CoS WRED 丢弃配置文件
当排队的数据包数大于设备清空输出队列的能力时,队列需要一种方法来确定要丢弃哪些数据包以缓解拥塞。加权随机早期检测 (WRED) 丢弃配置文件定义了输出队列充满时不同丢包概率 (PLP) 的数据包的丢弃概率。在拥塞期间,当输出队列被填满时,设备会丢弃由丢弃配置文件确定的传入数据包,直到输出队列变得不那么拥塞。
根据丢弃概率,丢弃配置文件可能会在缓冲区已满之前很久就丢弃许多数据包,或者即使缓冲区几乎已满,也只能丢弃几个数据包。
您可以在服务等级 (CoS) 配置层次结构的丢弃配置文件部分配置丢弃配置文件。在队列调度程序配置中使用丢弃配置文件映射来应用丢弃配置文件。对于每个队列调度程序,您可以使用属性(低、中高和高)为每个 PLP loss-priority 配置单独的丢弃配置文件。这使您能够在拥塞期间以不同的方式处理不同 PLP 的流量。
不要将丢弃配置文件应用于无损流量(属于具有 no-loss 丢弃属性的转发类的流量)。无损流量使用基于优先级的流量控制 (PFC) 来控制拥塞。
您无法将丢弃配置文件应用于支持它们的设备上的多目的地队列。
丢弃配置文件参数
丢弃配置文件指定两个值,它们成对使用:
填充级别 — 队列充满度值,表示用于存储数据包的内存占分配给队列的内存总量的百分比。
丢弃概率 — 与单个数据包丢弃的可能性相对应的百分比值。
在除 QFX10000 之外的交换机上定义丢弃配置文件
在每个丢弃配置文件中设置两个队列填充级别和两个丢弃概率。第一个填充级别和第一个丢弃概率创建一个值对,第二个填充级别和第二个丢弃概率创建第二个值对。
第一个填充级别值指定数据包开始丢弃的队列充满度百分比,称为丢弃起点。在队列达到此充满级别之前,不会丢弃任何数据包。第二个填充级别值指定所有数据包被丢弃的队列充满度百分比,称为丢弃端点。
第一个丢弃概率值始终 0 为(零)。这与丢弃起点配对,并指定在队列充满级别达到第一个填充级别之前,不会丢弃任何数据包。当队列充满度超过丢弃起始点时,数据包开始丢弃,直到队列超过第二个填充级别,此时所有数据包都丢弃。第二个丢弃概率值称为最大丢弃率,用于指定队列充满度到达丢弃端点时丢弃数据包的可能性。当队列从丢弃起点到丢弃终点填满时,数据包会以平滑的线性模式(称为插值图)丢弃,如 图 1 所示。在丢弃端点之后,所有数据包都会被丢弃。
图 1 中的粗线显示了示例 WRED 配置文件的数据包丢弃特征。在丢弃起点,队列达到 30% 的填充级别。在丢弃端点,队列填充水平达到 50%,最大丢弃率为 80%。
在队列填充级别达到 30% 的丢弃起始点之前,不会丢弃任何数据包。当队列达到 30% 的填充级别时,数据包开始丢弃。随着队列逐渐填满,丢弃的数据包百分比呈线性增加。当队列填满 50% 的丢弃端点时,丢包率会增加到 80% 的最大丢弃率。当队列填充级别超过 50% 的丢弃端点时,所有数据包都会丢弃,直到队列填充级别降至 50% 以下。
在 QFX10000 交换机上定义丢弃配置文件
每个队列填充级别都与丢弃概率配对。当队列填充到不同的级别时,每次达到丢弃配置文件中配置的填充级别时,队列都会将与该填充级别配对的丢弃概率应用于队列中超过填充级别的流量。您最多可以配置 32 对填充级别和丢弃概率,以创建具有多达 32 个微分点的自定义丢包概率曲线。
在数据包达到第一个配置的队列填充级别之前,不会丢弃数据包。当队列达到第一个填充级别时,数据包开始以与第一个填充级别配对的配置丢弃概率速率丢弃。当队列达到第二个填充级别时,数据包开始以与第二个填充级别配对的配置丢弃概率丢弃。对于您在丢弃配置文件中配置的填充级别/丢弃概率对的数量,此过程将继续进行。
丢弃配置文件是插值的,而不是分段的。插值的跌落剖面沿着每个配置的填充水平之间的曲线逐渐增加跌落概率。当队列到达下一个填充级别时,丢弃概率达到与该填充级别配对的丢弃概率。分段液滴剖面以阶梯方式从一个填充液位和液滴概率设置“跳转”到另一个液位。流量丢弃概率不会随着队列填满而改变,直到达到下一个填充级别。
插值的一个示例是具有三个填充级别/丢弃概率对的丢弃配置文件:
25% 的队列填充级别与 30% 的丢弃概率配对
50% 的队列填充级别与 60% 的丢弃概率配对
75% 的队列填充级别与 100% 的丢弃概率配对(超过 75% 队列填充级别的所有数据包都将被丢弃)
队列在其填充级别达到 25% 之前不丢弃任何数据包。在拥塞期间,当队列填满超过 25% 时,队列开始以高于填充级别的数据包的 30% 的速度丢弃数据包。
但是,当队列继续填满时,它不会继续以 30% 的丢弃概率丢弃数据包。相反,随着队列填满 50% 的饱满度,掉落概率会逐渐增加。当队列达到 50% 的填充级别时,丢弃概率已增加到为填充级别配置的丢弃概率对,即 60%。
随着队列继续填满,丢弃概率不会保持在 60%,而是随着队列填满而继续上升。当队列达到 75% 已满的最终填充级别时,丢弃概率将上升到 100%,并且所有超过 75% 填充级别的数据包都将被丢弃。
默认丢弃配置文件
如果未配置丢弃配置文件并将其应用于队列调度程序,设备将对有损流量类使用默认丢弃配置文件。在默认丢弃配置文件中,当填充级别为 0% 时,丢弃概率为 0%。当填充水平为 100% 时,跌落概率为 100%。在拥塞期间,一旦数据包到达队列,默认配置文件可能会开始丢包。
数据包丢弃方法
当数据包到达队列头部时,设备会计算一个介于 0 和 100 之间的随机数。设备使用队列的当前填充级别根据丢弃配置文件绘制随机数。当随机数位于图形线之上时,队列会通过出口接口将数据包传输出。当数字低于线图时,设备将丢弃数据包。
除 QFX10000 以外的交换机的数据包丢弃示例
要创建从丢弃起点到丢弃终点的线性丢弃模式,丢弃概率是使用线性近似值推导的,该近似值有从最小队列填充级别到最大队列填充级别的八个部分或步长。填充水平平均分为八个部分,从最低填充水平开始,到最大填充水平结束。随着队列被填满,丢弃的数据包百分比也随之增加。丢弃的数据包百分比基于最大丢弃率。
例如,默认丢弃配置文件(指定 100% 的最大丢弃率)在八节线性丢弃模式中的每个部分或步骤处具有以下丢弃概率:
第一部分 - 最小丢弃概率为最大丢弃率的 6.25%。最大丢弃概率为最大丢弃率的 12.5%。
第二部分 - 最小丢弃概率为最大丢弃率的 18.75%。最大丢弃概率为最大丢弃率的 25%。
第三部分 - 最小丢弃概率为最大丢弃率的 30.25%。最大丢弃概率为最大丢弃率的 37.5%。
第四部分 - 最小丢弃概率为最大丢弃率的 43.75%。最大丢弃概率为最大丢弃率的 50%。
第五部分 - 最小丢弃概率为最大丢弃率的 56.25%。最大丢弃概率为最大丢弃率的 62%。
第六部分 - 最小丢弃概率为最大丢弃率的 68.75%。最大丢弃概率为最大丢弃率的 75.5%。
第七部分 - 最小丢弃概率为最大丢弃率的 81.25%。最大掉落概率为最大掉落率的 87.5%。
第 8 部分 - 最小丢弃概率为最大丢弃率的 92.75%。最大丢弃概率为最大丢弃率的 100%。
即使没有拥塞,数据包也会被丢弃,因为无论端口上是否存在拥塞,数据包丢弃都会从丢弃起点开始。默认丢弃配置文件示例表示最坏的情况,因为丢弃起点填充级别为 0%,因此当队列开始接收数据包时,数据包丢弃就会开始。
您可以通过将丢弃起始点配置为大于 0% 的填充级别来指定数据包何时开始丢弃。例如,如果配置的丢弃起始点为 30% 的丢弃配置文件,则在队列已满 30% 之前,数据包不会丢弃。建议配置适合网络流量状况的丢弃配置文件。
最小丢弃率(始终为 0)和最大丢弃率之间的差距越小,线性丢弃模式每个部分(步骤)的最小丢弃概率和最大丢弃概率之间的差距就越小。默认丢弃配置文件的最小丢弃率 (0%) 和最大丢弃率 (100%) 之间的最大差距,在每个步骤的最小丢弃概率和最大丢弃概率之间的差距最高。为丢弃配置文件配置较低的最大丢弃率可以缩小最小丢弃概率和最大丢弃概率之间的差距。
丢弃配置文件图
丢弃配置文件图是调度器配置的一部分。丢包配置文件图将丢包配置文件映射到数据包丢失优先级。在调度器中指定丢弃配置文件映射会将丢弃配置文件与您在调度器映射中映射到调度器的转发类(队列)相关联。
您可以在 CoS 配置层次结构的分类器部分中配置队列的丢失优先级,丢包优先级将应用于在入口接口分配给转发类的流量。
每个调度器可以有多个丢弃配置文件图。
拥塞防御
通过在输出队列上配置丢弃配置文件,您可以控制拥塞如何影响端口上的其他队列。如果未配置丢弃配置文件并将其映射到输出队列,设备将在转发有损流量的队列上使用默认丢弃配置文件。
例如,如果一个入口端口将流量转发到多个出口端口,并且至少有一个出口端口出现拥塞,这可能会导致入口端口拥塞。入口端口拥塞(入口缓冲区超过其资源分配)会导致帧在入口端口(而非出口端口)处丢帧。入口端口帧丢弃会影响拥塞入口端口转发流量的所有出口端口,而不只是拥塞的出口端口。
不要为 和fcoeno-loss 转发类配置丢弃配置文件。FCoE 和其他无损流量队列需要无损行为(使用数据包丢弃属性配置no-loss的流量队列)。使用基于优先级的流控制 (PFC) 来防止无损优先级上的帧丢弃。
配置 WRED 丢弃配置文件并将其应用于输出队列
要配置 WRED 数据包丢弃配置文件并将其应用于输出队列,请执行以下操作:
配置丢弃配置文件:
在除 QFX10000 之外的交换机上,请使用语句
set class-of-service drop-profiles profile-name interpolate fill-level drop-start-point fill-level drop-end-point drop-probability 0 drop-probability percentage。在 QFX10000 交换机上,使用语句
set class-of-service drop-profiles profile-name interpolate fill-level level1 level2 ... level32 drop-probability probability1 probability2 ... probability32。您可以指定少至两个填充液位/跌落概率对或多达 32 对。
使用语句
set class-of-service schedulers scheduler-name drop-profile-map loss-priority (low | medium-high | high) protocol any drop-profile profile-name将丢弃配置文件映射到队列调度器。丢弃配置文件的名称是在步骤 1 中配置的 WRED 配置文件的名称。使用语句
set class-of-service scheduler-maps map-name forwarding-class forwarding-class-name scheduler scheduler-name将步骤 2 与丢弃配置文件关联的调度器映射到输出队列。转发类标识输出队列。默认情况下,转发类映射到输出队列,也可以通过显式用户配置将其重新映射到不同的队列。调度器名称是在步骤 2 中配置的调度器。在除 QFX10000 之外的交换机上,使用语句
set class-of-service traffic-control-profiles tcp-name scheduler-map map-name将调度器图与流量控制配置文件相关联。调度器映射名称是在步骤 3 中配置的名称。在除 QFX10000 之外的交换机上,使用语句
set class-of-service interfaces interface-name forwarding-class-set forwarding-class-set-name output-traffic-control-profile tcp-name将流量控制配置文件与接口相关联。输出流量控制配置文件名称是在步骤 4 中配置的流量控制配置文件的名称。接口使用流量控制配置文件中的调度器图,将丢弃配置文件(和其他属性)应用于该接口上的输出队列(转发类)。由于您可以使用不同的流量控制配置文件将不同的调度器映射到不同的接口,因此不同接口上的相同队列号可能会以不同的方式处理流量。
在 QFX10000 交换机上,使用语句
set class-of-service interfaces interface-name scheduler-map scheduler-map-name将调度器图与接口相关联。接口使用调度器图将丢弃配置文件(和其他属性)应用于映射到该接口上转发类的输出队列。由于您可以在不同的接口上使用不同的调度器图,因此不同接口上的相同队列号可能会以不同的方式处理流量。
已启用显式拥塞通知的队列上的丢弃配置文件
您必须在为显式拥塞通知 (ECN) 启用的队列上配置 WRED 丢弃配置文件。在启用 ECN 的队列上,丢弃配置文件会设置队列应将数据包标记为经历拥塞的阈值(请参阅 CoS 显式拥塞通知 (ECN))。当队列填满到 WRED 丢弃配置文件的数据包丢弃概率大于零 (0) 的级别时,设备可能会将数据包标记为遇到拥塞。设备是否将数据包标记为遇到拥塞的概率与队列在该填充级别的丢弃概率相同。
在启用 ECN 的队列上,设备不会使用丢弃配置文件来控制在拥塞期间丢弃不支持 ECN 的数据包(标记为非 ECT 的数据包,ECN 代码位 00)。相反,设备使用尾部丢弃算法在拥塞期间丢弃不支持 ECN 的数据包。当队列填满其最大满度级别时,尾部丢弃只会丢弃所有后续到达的数据包,直到队列中有空间来缓冲更多数据包。所有不支持 ECN 的数据包都以相同的方式处理。
要将 WRED 丢弃配置文件应用于非 ECT 流量,请配置多域 (MF) 分类器以将非 ECT 流量分配给未启用 ECN 的不同输出队列,然后将 WRED 丢弃配置文件应用于该队列。