概述
1、 队列调度算法总述
WFQ,WF2Q,等均是基于时戳的持续调度算法。这类算法都使用了类似的“分组有序排队”机制(sorted priority queue mechanism)。这种机制根据系统状态为每个到达分组计算一个时戳(time stamp),并以这个时戳作为分组调度优先顺序的度量指标。这些算法的区别在于如何计算时戳。WFQ和WF2Q算法通过参考理想的流体调度模型GPS(Generalized Processor Sharing,也即Fluid Fair Queuing, FFQ)控制实际系统中分组的发送顺序。调度过程中系统维护一个“虚拟时间”,基于该虚拟时间为到达分组计算其虚拟开始时间(Visual Start Time, VST)和虚拟完成时间(Visual Finish Time, VFT),并以VST或VFT作为分组调度的优先顺序。其中WFQ算法以VFT为分组调度时戳。WF2Q则综合了VST和VFT两个时间值为分组确定调度顺序。在业务流满足令牌桶业务规范时,WFQ和WF2Q均可保证各业务流有确定的端到端时延、时延抖动和相应的缓冲空间大小上限,但是WF2Q下业务流公平性更好。WFQ和WF2Q下虚拟时间的维护需要跟踪理想模型中所有业务流的状态,因而时间复杂度较高。为了降低算法的时间复杂度,人们又先后提出了WF2Q+、SCFQ和SFQ等算法。WF2Q+只改变了WF2Q下虚拟时间的计算方式,计算虚拟时间时只需要WF2Q+系统队列状态,因而降低了时间复杂度,而且仍然具有与WF2Q算法相同的的QoS保证能力。SCFQ以VFT为分组时戳和以当时正在服务分组的VFT为系统虚拟时间;而SFQ则以VST为时戳和以当时正在服务分组的VFT为虚拟时间。尽管SCFQ和SFQ算法大大降低了算法运行的时间复杂度,但是算法性能下降明显。
2、WFQ算法的数学描述
GSP(通用处理器共享)算法最大的缺点是不能处理长度可变的数据包。假设Fp 是数据包P 在GPS 算法中的离开时间,那么WFQ 算法就是一个模拟GPS 算法并按升序调度数据包的工作保留算法,也就是说GSP类算法总是选择Fp 值最小的数据包进行调度。他的特征如下:
GPS是一种理想的流体服务模型;在GPS中,对共享同一链路的每个会话建立一个独立的FIFO队列;在任意时间段内当有N个非空队列时,服务器同时对N个队列头部的包服务;每个会话有不同的服务份额,对每个会话按它们的服务份额的比例提供服务;N个会话的服务份额分别φ1,φ2,…φN表示,我们也称φi为队列i的权值。
服务器以恒定速率 r 运行,且是工作连续的(Work-conserving);用Wi(t1,t2)表示在时间[t1,t2]内对会话i的业务数量,则一个GPS服务器在时间[t1,t2]内对活动会话i,j 的服务满足:
如果在时间[t1,t2]内有积压的会话的集合B(t1)保持不变,则在这个时间段内会话i被服务的速率为:
因为B(t1) 是服务器中所有会话的集合B的子集,很容易看出(ri为预订速率,为会话i的最小保证速度,也就是队列i的最小速度,r为输出链路的最大容量,也就是服务器的服务速度,一般是一个定值):
WFQ算法是GPS 算法的近似。假设Fp 是数据包P 在GPS 算法中的离开时间,那么WFQ算法就是一个模拟GPS 算法并按升序调度数据包的工作保留算法,也就是说WFQ 算法总是选择Fp 值最小的数据包进行调度。如下为WFQ 算法的虚拟时间实现。
将每一个数据包的到达或者离开定义为事件,设第j个事件发生的时间为tj,且调度器发送第一个数据包(例如在一段所有队列都为空闲的时间以后,有数据包到达) 的时间t1 = 0。,服务器的处理速率为r。可以看出在时间间隔(tj-1,tj)内处于激活状态的数据流是固定的,我们将它记为集合Bj。定义虚拟时间函数V(t) ,V( t) 在调度器空闲(所有队列为空)的时间为0,在任何调度器忙碌时段,有
从这个意义上来说,虚拟时间可以解释为以所有的积压的会话队列所接受的服务的速率为边缘速率而增长的一个函数。 假设在时刻aik第i个会话的第k个数据包到达队列,其长度为Lki 。那么,将这个数据包到达时刻的虚拟时间记为Ski , 将这个数据包离开时刻的虚拟时间记为Fki,对于所有的i,定义F0i = 0, 那么从算法实现的角度来讲,使用虚拟时间这一结构有3个非常有吸引力的优点:(1) 当一个数据包到达的时候,它的离开虚拟时间就能被确定下来;(2) 调度器可以根据数据包的离开虚拟时间来排序,对数据包提供服务;(3) 我们只需要在有事件发生的时刻更新虚拟时间函数。而使用虚拟时间结构所需要的代价就是,需要维护集合Bj,这实际上也是对时间函数的一种更新。定义Next ( t) 为在时刻t,假设t时刻以后没有数据包到达的情况下,下一个将离开调度器的数据包的实际时间。那么,如果在时间段[ t,Next ( t) ] 真的没有数据包到达的话,下一个更新虚拟时间函数的时刻将是Next ( t) 。现在,假设一个数据包在某一时刻t到达(设这个事件为第j个事件) ,这个事件的前一个事件发生的时刻为τ(如果那个数据包为第一个数据包则τ= 0) ,那么,由于在两个事件之间集合B j 不会变化, 可以根据式(1) 更新时间函数V ( t) ,根据式(2) 该数据包的离开虚拟时间可以被计算出来,同时被标记到该数据包上,这个标记被称为时标( time stamp) 。假设t时刻所有队列的数据包中离开虚拟时间最小的那个数据包的离开虚拟时间为Fmin ,Next ( t) 则应该是对应于Fmin 的实际时间。因为积压会话集Bj在时间段[ t, Next ( t) ] 保持不变,这个实际时间可以根据式(1)计算出来:根据这样一个虚拟时间的更新机制,WFQ可以这样定义:当一个数据包到达的时候,虚拟时间被更新的同时这个数据包被标记上它的离开虚拟时间,即时标;而调度器则以工作守恒方式工作,同时按时标的增加顺序来调度每个数据包。从上面的讨论可以看出,WFQ无论是在公平性还是延时性能方面都十分出色,但是它有一个缺点就是具有很高的复杂性。假设N 是输入数据流队列的个数,则WFQ的时间复杂度为O (N ) 。这在实际应用方面特别是在N 很大的场合对WFQ的使用会造成较大的影响。
最后
以上就是心灵美绿草为你收集整理的12、加权平均队列(WFQ-Weight Fair Queue)算法的全部内容,希望文章能够帮你解决12、加权平均队列(WFQ-Weight Fair Queue)算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复