WFQ and FQ
在介绍加权公平队列前,先要理解公平队列FQ(Fair Queuing)。FQ 是为了公平地分享网络资源,尽可能使所有流的迟延和延迟抖动达到最优而推出的。它照顾了各方面的利益,主要表现在:不同的队列获得公平的调度机会,从总体上均衡各个流的延迟。短报文和长报文获得公平的调度:如果不同队列间同时存在多个长报文和短报文等待发送,应当顾及短报文的利益,让短报文优先获得调度,从而在总体上减少各个流的报文间的延迟抖动。与FQ 相比,WFQ在计算报文调度次序时增加了优先权方面的考虑。从统计上,WFQ 使高优先权的报文获得优先调度的机会多于低优先权的报文。WFQ 能够按流的“会话”信息(包括协议类型、源和目的TCP 或UDP 端口号、源和目的IP 地址及ToS 域中的优先级位等)自动进行流分类,并且尽可能多地提供队列,以将每个流均匀地放入不同队列中,从而在总体上均衡各个流的延迟。在出队的时候,WFQ按流的优先级(precedence 或DSCP)来分配每个流应占有出口的带宽。优先级的数值越小,所得的带宽越少。优先级的数值越大,所得的带宽越多。最后,轮询各个队列,按照带宽比例从队列中取出相应数量的报文进行发送。
例如:接口中当前共有5 个流,它们的优先级分别为0、1、2、3、4,则带宽总配额为所有(流的优先级+1)的和。即
1 + 2 + 3 + 4 + 5 = 15
每个流所占带宽比例为:(自己的优先级数 + 1)/(所有 (流的优先级 + 1) 的和)。
即每个流可得的带宽分别为:1/15,2/15,3/15,4/15,5/15。
由于WFQ 在拥塞发生时能均衡各个流的延迟和延迟抖动,所以WFQ 在一些特殊场
合得到了有效的应用。比如在使用资源预留协议RSVP(Resource Reservation Protocol)的保证型业务中,通常就是采用WFQ 作为调度策略;在流量整形TS 中,也采用WFQ 调度缓存的报文。