加权公平排队和加权随机早期检测有何关系?


10

我试图了解QoS系统是如何工作的,我不确定WFQ和WRED如何相互作用。

起初,我认为WFQ是一种排队机制,而WRED是一种避免拥塞的机制。WFQ应该安排队列中的数据包,队列已满时WRED会将其丢弃。如果要在例如L3交换机上设置QoS,则需要设置排队机制和避免拥塞机制,因此从理论上讲,我可以让WFQ和WRD一起工作。例如,本文档似乎暗示我将以这种方式设置它们。思科的其他一些文档提到我可以独立使用它们。

然后,我想了解更多有关他们如何工作并开始搜索Internet的信息。结果,现在我不知道它们是什么以及它们如何工作。

一些站点(至少就我对内容的理解)声称,分组调度算法和拥塞避免算法基本相同。例如,在 Wikipedia文章中,它们都放在同一个组中。一些随机的文章提到我可以使用WFQ XOR WRED。

所以我想问的是WFQ和WRED有何关联?如果可能的话,我什么时候使用一个或另一个?


1
wfq和wred除了共享同一个英语单词的使用外,彼此之间没有任何关系
Mike Pennington 2013年

1
“然后,我想了解有关它们如何工作并开始搜索Internet的更多信息。结果,现在我不知道它们是什么以及它们如何工作。” 这描述了我尝试了解QoS的99.98%的经验。
南班吉姆

Answers:


10

加权公平排队(WFQ)顾名思义就是排队算法。当接口出现拥塞时使用排队。通常是通过发送环(TX-Ring)已满来检测到的。这意味着接口正忙于发送数据包。除非接口上出现拥塞,否则不会进行排队。在某些情况下,可以控制TX环的尺寸。一个小的TX环为软件队列提供了更多的功能,使其可以先发送哪些数据包,但这并不是很有效。太大的TX环将使软件队列几乎无用,并导致重要数据包的更高延迟和抖动。

默认的排队算法通常是先进先出(FIFO)。这意味着数据包将按照到达接口输入的确切顺序进行传递。这通常是不希望的,因为某些数据包应优先处理。

客户以低价从Internet服务提供商(ISP)购买服务是很常见的。也就是说,客户购买了50 Mbit / s的服务,但物理接口以100 Mbit / s的速度运行。在这种情况下,不会出现拥塞,但是ISP将限制来自客户的流量。为了在这些情况下引入人为拥堵,可以使用整形器。

因此,现在存在拥塞,可以应用排队算法。请注意,排队算法不提供任何额外的带宽,它们只是让我们确定哪些数据包对我们更重要。WFQ是一种采用多个参数并据此做出决策的算法。该算法非常复杂,并且使用权重(IP优先级),数据包大小和调度时间作为参数。INE 在这里有非常详细的解释如果不想在队列上摆弄太多,WFQ是一个不错的选择,因为它为SSH,Telnet,语音之类的小流量提供了足够的带宽,这意味着文件传输不会占用所有带宽。

加权随机早期检测(WRED)是一种避免拥塞的机制。WRED根据优先级值测量队列的大小,并在队列介于最小阈值和最大阈值之间时开始丢弃数据包。配置将决定丢弃每N个数据包中的1个。WRED有助于防止TCP同步和TCP饥饿。当TCP丢失数据包时,它将进入慢速启动状态;如果所有TCP会话同时丢失数据包,则它们可能会变得同步,从而提供了如下图所示:

TCP同步

可以看出,如果未配置WRED,则图形将变为完全爆炸,然后变为静音,然后变为完全爆炸,依此类推。WRED提供了更高的平均传输速率。重要的是要注意,UDP不会受到丢包的影响,因为它没有像TCP那样实现的确认机制和滑动窗口。因此,不应在基于UDP的类(如处理SNMP,DNS或其他基于UDP的协议的类)上实现WRED。

WFQ和WRED都可以并且应该一起部署。


2
嗨,丹尼尔,不错的答案。那不是WFQ(不是WQF)吗?另外,值得一提的是WRED对UDP无效,您应该避免在基于UDP的类(例如UDP语音)上使用它
Mike Pennington

谢谢迈克。不知道为什么我输错了WFQ,我已经编辑了它。还简要介绍了UDP。您总是提供出色的帖子。
Daniel Dib

8

首先,不要相信您在互联网上阅读的所有内容;-)

有时算法(或其物理实现方式)并不完全符合理论范畴。您所说的话并不比了解它的作用重要。

WFQ(或任何其他调度算法)的重点是在各种流之间共享有限的链路带宽。WFQ尝试按比例分配带宽给每个流。CBWFQ对每个“类”执行相同的操作。在拥有无限队列和无限内存的理想世界中,这就是您所需要的全部-您共享带宽,每个人都很高兴。

但是因为设备没有无限的队列和内存,所以必须做出一些“捷径”。因为队列的大小有限,所以存在队列将被填满,导致尾部丢弃和流量同步的危险。本质上,如果我的队列溢出,我将不再控制带宽。

为了避免队列溢出,我使用了随机早期检测。该算法根据队列的填充量(深度)从队列中随机丢弃数据包-队列越完整,丢弃的数据包越多。目的是防止队列溢出,以便调度算法可以正常工作。

然后,一些聪明的思科工程师注意到一个人可以使用更少的队列(较简单的硬件),并在不同的队列深度处随机丢弃不同种类的流量。WRED根据流量类型将流量从不同深度的队列中丢弃。尽管您可以将WRED称为拥塞避免机制,但是由于丢弃流量的深度随流量的类型而异,因此结果是不同类型的队列中的空间较少,因此带宽也较小。因此,它还充当调度算法。您说的是po-tay-to,我说的是po-tah-toe。

另一个区别是:FQ和WFQ可以处理所有类型的流量,因为它们实质上是对字节进行计数。RED和WRED仅与TCP一起使用,因为它们依赖TCP的流控制机制来减慢通信量并防止队列溢出。

(注意:为便于说明,我忽略了优先级队列和LLQ。这是另一个答案)。

我也同意Mike所说的一切。


1
出色的答案和评论。
generalnetworkerror 2013年

-1

这是CBWFQ和WRED的示例:

政策图OUT

语音
优先级百分比20

类视频
带宽百分比30

P1类
带宽百分比10
基于dscp的
随机检测dscp af31 26 40 10

P2类
带宽百分比15
基于dscp的
随机检测dscp af21 24 40 10

类 基于dscp的基于类的默认
公平队列
随机检测


可悲的是,这个例子没有回答他的问题。什么时候与方法不一样
Mike Pennington

从角度来看,这就像问赛车手涡轮增压器和传动比有何关系,让他一言不发地带您绕着赛道行驶。如果您已经了解了交互作用(和/或缺乏交互作用),那很好...但是您不会问这个问题。
Nanban Jim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.