Round Robin WRR DRR MiDRR WFQ

来源:互联网 发布:免费oa软件 编辑:程序博客网 时间:2024/06/04 19:56

(1)Round-Robin

循环队列通过循环服务避免局部队列饥饿。调度器总是顺序地移到下一个有分组要发送的队列(空队列被跳过)。如果每个队列都有分组等待发送,调度顺序和队列顺序匹配;如果一些队列为空,则其它队列被频繁地服务。在极端情况下,如果其它队列都为空,单个队列就可以使用全部链路带宽。当分组进入一个空队列时,该队列在下一个循环中被服务,这样就可以避免队列“饥饿”。

 循环调度的缺点是分组时延难于改进,它不可能为低时延业务分配专用队列。每个队列的服务间隔完全依赖于那段时间内其他队列中有多少分组等待发送以及这些分组的长度,这些变量难以准确预测,所以RR调度容易产生时延抖动。调度器可以通过改变服务顺序(例如采用顺序12324212…)更频繁地调度某些队列以给这些队列更频繁的传送机会,然而分组大小的随机分布仍然会造成时延抖动问题。

(2)WeightedRound-Robin(WRR)

WRR算法非常类似于DRR算法。WRR算法采用类似的时间片和差额的概念,但是算法稍有不同。在WRR中,当队列发送(Bsent)的字节数超过队列允许的限制时(仍为QN+DN),才对下一个队列进行服务。因此,差额是一个负数值(超出QN+DN的数量)且被当作下一个循环该队列发送的字节数的减少量。

(3)DeficitRound-Robin(DRR)

差额循环队列(DRR)

DRR算法是RR算法的扩展。DRR算法为每个队列分配一个常量QN(以权重为比例的时间片)和一个变量DN(差额)QN反应了该队列可以发送的长期平均字节数。DN的初始值为零且当队列为空时复位为0。当DRR算法服务一个新队列时,调度器复位计数器Bsent(表示该循环已经从队列中发送的字节数)。当下面两个条件满足时,DRR算法从队列中发送分组:

l 队列中有分组等待发送;

l (QN+DN)大于等于(Bsent+队列中下一个分组的长度)

否则,该队列的差额DN+1被置为QN+DNBsent,调度器按顺序移到下一个队列。QN+DN表示在服务时间间隔内队列能够发送的最大字节数,在一定程度上DN可以平滑数据流的突发。队列通过QN可以获得长期的相对带宽分配。如果激活队列的数目小于N,则激活队列可以根据QN值共享未用的输出链路带宽。

(4)WeightedFair Queuing(WFQ)

WFQ是加权公平排队(WeightedFairQueuing)缩写,它是一种拥塞算法,该算法识别对话(以数据流的形式)、分开属于各个对话的分组,并确保传输传输被这些独立的对话公平地分享。

WFQ(weighted fair queuing加权公平排队目标: 

1为每个活动流提供公平的带宽分配机制 
2为少量交互流提供更快的调度机制 
3为高优先级流提供更多的带宽 

WFQ:是一种基于流的排队算法,到达的数据流被分成多个流,每个流都被分配给一个FIFO 队列

从最主动的流中丢弃数据包,可以为非主动流提供更快的服务

WFQ是一个基于Weight的公平队列,之所以说WFQ是公平的,是因为WFQ根据数据包的IP优先级来分配相应的带宽,优先级高的数据包,分到的带宽就多,优先级低的数据包,分到的带宽就少,并且所有的数据包在任何时刻都可以分到带宽,这就是它的公平之处。WFQ在根据IP优先级给数据包分配带宽时,是基于流(flow)来分配的。

WFQ算法与其他调度算法的比较

DRR算法中,每个队列都有一个权值。服务器按照预先规定的顺序以速率轮询每个队列。如果遇到一个空队列,服务器立即移到下一个队列。如果队列错过了它的传输时序就只能等到下一个属于它的时序才能传输。如果每个队列都在使用,那么该队列的数据包要等到所有的队列都处理完之后才能被处理。WFQ不受这种影响,而且比DRR更适合于处理变长数据包。


0 0