一种快速加权轮询调度方法及快速加权轮询调度器和装置的制作方法

文档序号:7601009阅读:120来源:国知局
专利名称:一种快速加权轮询调度方法及快速加权轮询调度器和装置的制作方法
技术领域
本发明涉及通信领域中的队列调度的方法和装置,特别是一种利用WRR调度算法的队列调度的方法和装置。
背景技术
在通信系统中,加权轮询(Weighted round robin,WRR)调度器是一种非常重要的调度技术,它对各队列按照权值大小进行流量带宽分配。
以4个队列A、B、C、D为例,权值依次为Wa、Wb、Wc、Wd,4个权值相加W=Wa+Wb+Wc+Wd。传统WRR调度器工作流程如图1所示,有如下工作步骤步骤1队列A的初始调度值Va=W+Wa;队列B的初始调度值Vb=W+Wb;队列C的初始调度值Vc=W+Wc;队列D的初始调度值Vd=W+Wd。
步骤2比较Va、Vb、Vc、Vd,如队列A调度值Va最大,则队列A被调度。
步骤3队列A的调度值Va=Va+Wa;队列B的调度值Vb=Vb+Wb;队列C的调度值Vc=Vc+Wc;队列D的调度值Vd=Vd+Wd。
步骤4被调度到的队列,如队列A,其调度值Va=Va-W。
步骤5回到第2步,重新进行调度。
由以上步骤可以看出,传统WRR调度器关键在于步骤2中如何在所有队列中选取最大值;步骤3中需要对所有队列进行加法运算。
如果队列数目较多,步骤2和步骤3就成为WRR运算的瓶颈,因此如何降低最大值选取和数值运算就成为快速WRR调度器实现的关键。

发明内容
为了解决上述问题,本发明提供了一种快速加权轮询调度方法及快速加权轮询调度器和装置,对应于传统WRR调度器在每一次调度中都必须比较所有队列调度值,并更替每个队列调度值,快速WRR调度器只需比较某些队列的调度值,大大减少了运算量,提高了调度速度。
本发明提供了一种快速加权轮询调度方法,包括以下步骤a.将所有队列按初始调度值的大小顺序排列成一个队列集合;b.调度值比较模块比较所述队列集合中处于开始位置的队列的调度值,并选取调度值最大的队列为发送队列;c.调度值更新模块更新所述各队列集合中处于开始位置的队列、所述发送队列和所述发送队列前后两个队列的调度值;d.队列集合重组模块判断所述被调度到的发送队列、其前后两个队列的新调度值大小顺序以进行队列集合的重新划分,重新划分后的队列集合还是保持集合内部调度值从大到小的排列顺序;及e.重复步骤b、c和d,重新进行调度。
上述的快速加权轮询调度方法,其中,d步骤中所述队列集合中处于开始位置的队列的调度值大于前一队列的调度值。
上述的快速加权轮询调度方法,其中,所述的步骤c包括以下步骤c1.将所述队列集合中处于开始位置的队列的调度值加上权值,将结果设置成为该队列的调度值;c2.所述发送队列的前后两个队列各自的调度值加上相应权值,将结果设置成为该两个队列的调度值;及c3.将所述发送队列的调度值减去所有队列的权值之和,将结果设置成为所述发送队列的调度值。
上述的快速加权轮询调度方法,其中,所述步骤d包括以下步骤d1.判断所述发送队列与所述发送队列的前后两个队列的调度值的大小关系;d2.如果所述发送队列调度值大于其前后两个队列的调度值,则保持队列集合不变;d3.如果所述发送队列的调度值大于后一队列的调度值且小于前一队列的调度值,则将所述发送队列所在的队列集合与前一队列集合合并成为新的队列集合;
d4.如果所述发送队列的调度值大于前一队列的调度值且小于后一队列的调度值,则将所述发送队列独立成为新的队列集合;及d5.如果所述发送队列的调度值小于其前后两个队列的调度值,则将所述发送队列合并到前一队列集合中去,而所述发送队列原先所属的队列集合头部队列为所述发送队列的后一队列。
上述的快速加权轮询调度方法,其中,步骤a、b之间还包括步骤a1.设置并初始化用于存储队列调度值的第一寄存器、用于存储队列调度次数的第二寄存器、用于存储总调度次数的第三寄存器和用于设置队列位置的第四寄存器;a2.所述队列调度值、调度次数和队列集合改变后,设置所述队列集合中处于开始位置的队列对应的第四寄存器的值为1,其他队列对应值为0,所述第一寄存器中的数值改变为相应队列的调度值,所述第三寄存器数值加1后存储,发生运算的队列对应所述第二寄存器数的值改变为所述第三寄存器的数值;所述步骤e重复步骤a2到步骤d。
上述的快速加权轮询调度方法,其中,步骤c还包括步骤更新相应队列的调度值。
为了更好的实现发明目的,本发明还提供了一种快速加权轮询调度器,包括调度值比较模块,用于比较所述队列集合中处于开始位置的队列的调度值,选取调度值最大的队列通过输出端口进行发送所述队列中的数据;调度值更新模块,用于更新所述队列集合中处于开始位置的队列、所述发送队列和所述发送队列前后两个队列的调度值;队列集合重组模块,判断所述被调度到的队列、其前后两个队列的新调度值大小顺序以进行队列集合的重新划分,重新划分后的队列集合还是保持集合内部调度值从大到小的排列顺序;及控制模块,用于控制所述调度值比较模块、所述调度值更新模块和队列集合所述重组模块,以进行重新调度。
上述的快速加权轮询调度器,其中,所述队列集合中处于开始位置的队列的调度值总是大于前一队列的调度值。
上述的快速加权轮询调度器,其中,所述的调度值更新模块包括以下模块所述队列集合中处于开始位置的队列调度值更新模块,用于将所述队列集合中处于开始位置的队列的调度值加上权值,并将结果设置成为所述队列集合中处于开始位置的队列的调度值;所述发送队列的前后两个队列调度值更新模块,用于将所述发送队列的前后两个队列各自的调度值加上相应权值,并将结果设置成为所述发送队列的前后两个队列的调度值;及所述发送队列调度值更新模块,用于将所述发送队列的调度值减去所有队列的权值之和,将结果设置成为所述发送队列的调度值。
上述的快速加权轮询调度器,其中,所述队列集合重组模块包括以下模块判断模块,用于判断所述发送队列与所述发送队列的前后两个队列的调度值的大小关系;判断结果处理模块,用于根据所述判断模块判断结果重新划分队列集合,并执行以下操作如果所述发送队列调度值大于其前后两个队列的调度值,则保持队列集合不变;如果所述发送队列的调度值大于后一队列的调度值且小于前一队列的调度值,则将所述发送队列所在的队列集合与前一队列集合合并成为新的队列集合;如果所述发送队列的调度值大于前一队列的调度值且小于后一队列的调度值,则将所述发送队列独立成为新的队列集合;及如果所述发送队列的调度值小于其前后两个队列的调度值,则将所述发送队列合并到前一队列集合中去,而所述发送队列原先所属的队列集合头部队列为所述发送队列的后一队列。
上述的快速加权轮询调度器,其中,所述调度值更新模块还用于更新相应队列的调度值。
本发明还提供了一种快速加权轮询调度装置,其中,包括第一寄存器,用于存储队列调度值;第二寄存器,用于存储队列调度次数;第三寄存器,用于存储总调度次数;
第四寄存器,用于设置队列在集合中是否为头部队列;队列存储空间,用于存储队列数据;输出端口,用于发送队列;及快速加权轮询调度器,与所述第一寄存器、第二寄存器、第三寄存器和第四寄存器数据交互,所述队列存储空间通过所述快速加权轮询调度器发送队列数据到所述输出端口。
经仿真发现,在多数权值分布情况下,该快速WRR调度器比传统WRR调度器的加法运算与比较运算大大减少;而在某些权值分布下,运算量在大多数时间可得到明显的减少。
与传统WRR调度器相比,快速WRR调度器只对每队列集合处于头部开始位置和被调度到的队列前后两个队列进行运算,减少运算时间。
当N越大时,该快速WRR调度器就越有效。并且在某些应用场合,如某些网络处理器中,加法器资源不多情况下非常适用。


图1为传统WRR调度器工作流程示意图;图2为本发明快速WRR调度器工作流程示意图;图3为本发明快速WRR调度器工作示意图;图4为N条队列初始排队顺序图;图5为128条队列的初始排队顺序图;图6为128条队列经多次调度后的排队顺序和寄存器图;图7为图6中的128条队列再调度一次后的排队顺序和寄存器图。
具体实施例方式
下面结合附图和实施例对本发明进行详细说明。
如图2所示,快速WRR调度器有如下工作步骤步骤21队列A初始调度值Va=W+Wa;队列B初始调度值Vb=W+Wb;队列C初始调度值Vc=W+Wc;队列D的初始调度值Vd=W+Wd,......,依次类推,将队列A、B、C、D...以初始调度值大小顺序排列,假设此时Va≥Vb≥Vc≥Vd≥......,由于所有队列都按调度值大小顺序排列,因此只有1个队列集合;
步骤22比较各队列集合中处于开始位置的队列的调度值,选取调度值最大的队列为发送队列;步骤23更新每队列集合中处于开始位置的队列的调度值,其调度值加上各自权值成为新的调度值;步骤24更新发送队列前后2个队列的调度值,发送队列的前后两个队列各自的调度值加上相应权值设置成为发送队列的前后两个队列的调度值;步骤25更新发送队列的调度值,将发送队列的调度值减去所有队列的权值和成为新的调度值;步骤26根据队列调度值大小重新划分队列集合;步骤27回到第22步,重新进行调度。
对队列集合有如下的特点在队列集合内部,队列按各自调度值大小进行排序,即后一队列的调度值总是小于等于前面一队列的调度值;如果某一队列的调度值大于前面一队列的调度值,那么就以该队列为处于开始位置,重新划分为一个队列集合;按照以上的处理,在队列集合处于开始位置的队列的调度值在本队列集合内,总是最大的。
设该快速WRR调度器将N个调度值区分为M个队列集合,那么运算量可减少为M-1次比较(各队列集合处于开始位置的队列调度值的比较运算),M+1次加法(各队列集合处于开始位置的队列调度值计算),2次乘法和4次加法(发送队列前后两队列调度值的计算),2次比较运算(被调度的队列调度值、调度队列前后两队列调度值这3个值的比较)。
因此传统的WRR调度器的N-1次比较,N+1次加法运算量,通过本快速WRR调度器,可减少为M+5次加法,2次乘法,M+1次比较。
当调度到的队列前后两个队列本身也是队列集合处于开始位置时,乘法运算可不进行,运算量为M+1次加法,M-1次比较,运算量不会超过传统WRR调度器。
在实际运算中只需考虑各队列集合处于开始位置的队列,因此当某队列在处于开始位置时,则设置该队列使能位,该使能位使能意味着对应队列需进行下一次调度运算,而不使能意味着不需要参与下一次调度运算(发送队列的前后两个队列除外)。
本发明装置如图3所示。包括有4个寄存器用于存储队列调度值的第一寄存器31、用于存储队列调度次数的第二寄存器33、用于存储总调度次数的第三寄存器34、用于设置队列是否为集合开始位置的第四寄存器32、队列存储空间35、快速WRR调度器36和输出端口37。
所述队列集合中处于开始位置的队列对应的第四寄存器32中的值为1,其他队列对应的值为0。各寄存器初始值如图3所示。
第一寄存器31、第二寄存器33、第三寄存器34和第四寄存器32与快速WRR调度器36信息交互,所述队列存储空间通过所述快速加权轮询调度器发送队列到所述输出端口。
快速WRR调度器36通过以上这些寄存器,只分析队列集合中处于开始位置的队列并由队列存储空间35调度出信元,从而达到快速调度的效果,并通过输出端口37发送。
对N条队列按权值大小进行组合。如图4所示。
图4中每个方框内表示相应队列权值大小,其中W0最大,排在最前面,W(N-1)最小,排在最后。
两个队列如果初始调度值相同,权值大的队列如不被调度到的话,那么它将永远处在权值小的队列之前。那么只要调度图4中最前面的队列号作为发送队列即可,而不需看集合内部后续队列调度值,就大大减少了数值运算和比较运算。
现以128条队列为例,说明快速WRR调度器是如何工作的。
图5中每个方框内表示相应队列的权值大小,其中W0最大,排在最前面,W127最小,排在最后。此时,全部128条队列为1个队列集合,使能位除W0为‘1’外,其它均为‘0’,调度次数为0次。
如图3和图5所示,其调度过程如下1.总调度次数初始值为1;2.由于V0(对应W0队列,依此类推)最大,WRR调度器36首先选取队列0作为发送队列,V0进行2次加法运算,其后的V1进行1次乘法(此时为乘1)和2次加法运算。更新V0、V1队列的调度次数与总调度次数相同;3.比较刚被运算过的V0和其后的V1,如果V0大,则还是1个队列集合;
4.如果V0小于V1,那么调度器将128个队列划分为2队列集合,前者为V0,后者为V1~V127。假设是这种情况,V0、V1使能位为‘1’;5.总调度次数加1;6.下一次调度时,调度器比较两队列集合处于开始位置的队列调度值,假设此时V1大于V0,那么V1对应的队列被调度;7.V1进行2次加法运算,V0进行1次乘法(此时为乘1)和2次加法运算,V2进行1次乘法(此时为乘2)和2次加法运算。更新V0、V1、V2队列的调度次数与总调度次数相同;8.比较V0、V1、V2是否保持前大后小的态势。如果V2<V1<V0,那么将2队列集合并为1个队列集合V0~V127;如果V2>V1<V0,那么将V0、V1并为一个队列集合,V2~V127为另一队列集合;如果V2<V1>V0,那么V0为一个队列集合,V1~V127为另一队列集合;如果V2>V1>V0,那么划分为3队列集合,第1队列集合为V0,第2队列集合为V1,第3队列集合为V2~V127,假设是这种情况,V0、V1、V2使能位为‘1’;9.重复执行5~8步骤,假设经一段时间的运算后,得到图6;图6中的128条队列经多次调度后,分为4个队列集合V0~V2,V3~V6,V7~V124,V125~V127,每队列集合内部按调度值大小排列;在对应队列的第四寄存器32中,如值为‘1’,表示其为每队列集合的处于开始位置,需要参与下一次的比较运算和调度值数值运算;如为’0’,表示其不在每队列集合的处于开始位置,不需要参加运算(发送队列的前后两个队列除外,这里是V124和V126);在第二寄存器33中,由于不在队列集合处于开始位置的队列不参加运算,因此它们的调度次数不是总调度次数578;10.下一次调度,比较V0、V3、V7、V125大小(3次比较运算),假设V125最大。在调度出第125号队列的同时,计算V126的调度值(1次乘法,2次加法),V124的调度值(1次乘法,2次加法),V125的调度值(2次加法),V7的调度值(1次加法),V3的调度值(1次加法),V0的调度值(1次加法)。
11.对V124、V125、V126进行重新排序(2次比较运算)以重新划分队列集合,如果V126<V125>V124,则保持原状;如果V126<V125<V124,则将V7~V124和V125~V127两个队列集合合并为V7~V127一个队列集合;如果V126>V125>V124,那么就将V125独立出来单独成为一个队列集合;如果V126>V125<V124,那么将V125划归到V7~V124队列集合,假设是这种情况,有图7所示。
12.更新刚运算过的队列的调度次数与总调度次数相同。(在本次调度中,M=4,进行2次乘法,9次加法,5次比较运算,远远小于传统WRR调度器的129次加法,127次比较运算)。
上面步骤中,队列的调度次数存储在队列调度次数寄存器33中,总调度次数存储在第四寄存器34中,队列调度值存储在第一寄存器31中。
还需说明的是,如果系统中加法器资源比较多,那么可在每次调度都更新每个队列调度值。在这种情况时,加法运算量与传统WRR调度器相比不变,都是N-1次,但比较运算量可减少到M+1次,同样达到了快速运算的目的。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1.一种快速加权轮询调度方法,包括以下步骤a.先将所有队列按初始调度值的大小顺序排列成一个队列集合;b.调度值比较模块比较所述队列集合中处于开始位置的队列的调度值,并选取调度值最大的队列为发送队列;c.调度值更新模块更新所述队列集合中处于开始位置的队列、所述发送队列和所述发送队列的前后两个队列的调度值;d.队列集合重组模块判断所述被调度到的发送队列、其前后两个队列的新调度值大小顺序以进行队列集合的重新划分,重新划分后的队列集合还是保持集合内部调度值从大到小的排列顺序;及e.重复步骤b、c和d,重新进行调度。
2.根据权利要求1所述的快速加权轮询调度方法,其特征在于,d步骤中所述队列集合中处于开始位置的队列的调度值大于前一队列的调度值。
3.根据权利要求1或2所述的快速加权轮询调度方法,其特征在于,所述的步骤c包括以下步骤c1.将所述队列集合中处于开始位置的队列的调度值加上权值,将结果设置成为所述队列集合中处于开始位置的队列的调度值;c2.所述发送队列的前后两个队列各自的调度值加上相应权值,将结果设置成为所述发送队列的前后两个队列的调度值;及c3.将所述发送队列的调度值减去所有队列的权值之和,将结果设置成为所述发送队列的调度值。
4.根据权利要求1或2所述的快速加权轮询调度方法,其特征在于,所述步骤d包括以下步骤d1.判断所述发送队列与所述发送队列的前后两个队列的调度值的大小关系;d2.如果所述发送队列的调度值大于其前后两个队列的调度值,则保持队列集合不变;d3.如果所述发送队列的调度值大于后一队列的调度值且小于前一队列的调度值,则将所述发送队列所在的队列集合与前一队列集合合并成为新的队列集合;d4.如果所述发送队列的调度值大于前一队列的调度值且小于后一队列的调度值,则将所述发送队列独立成为新的队列集合;及d5.如果所述发送队列的调度值小于其前后两个队列的调度值,则将所述发送队列合并到前一队列集合中去,而所述发送队列原先所属的队列集合头部队列为所述发送队列的后一队列。
5.根据权利要求4所述的快速加权轮询调度方法,其特征在于,步骤a、b之间还包括步骤a1.设置并初始化用于存储队列调度值的第一寄存器、用于存储队列调度次数的第二寄存器、用于存储总调度次数的第三寄存器和用于设置队列位置的第四寄存器;a2.所述队列调度值、调度次数和队列集合改变后,设置所述队列集合中处于开始位置的队列对应的第四寄存器的值为1,其他队列对应值为0,所述第一寄存器数值改变为相应队列的调度值,所述第三寄存器数值加1后存储,发生运算的队列对应所述第二寄存器数的值改变为所述第三寄存器的数值;所述步骤e重复步骤a2到步骤d。
6.根据权利要求1所述的快速加权轮询调度方法,其特征在于,步骤c还包括步骤更新相应队列的调度值。
7.一种快速加权轮询调度器,包括调度值比较模块,用于比较所述队列集合中处于开始位置的队列的调度值,选取调度值最大的队列并利用输出端口进行发送;调度值更新模块,用于更新所述队列集合中处于开始位置的队列、所述发送队列和所述发送队列和前后两个队列的调度值;队列集合重组模块,判断所述被调度到的发送队列、其前后两个队列的新调度值大小顺序以进行队列集合的重新划分,重新划分后的队列集合还是保持集合内部调度值从大到小的排列顺序;及控制模块,用于控制所述调度值比较模块、所述调度值更新模块和队列集合所述重组模块,以进行重新调度。
8.根据权利要求7所述的快速加权轮询调度器,其特征在于,所述队列集合中处于开始位置的队列的调度值大于前一队列的调度值。
9.根据权利要求8所述的快速加权轮询调度器,其特征在于,所述的调度值更新模块包括以下模块所述队列集合中处于开始位置的队列调度值更新模块,用于将所述队列集合中处于开始位置的队列的调度值加上权值,并将结果设置成为所述队列集合中处于开始位置的队列的调度值;所述发送队列的前后两个队列调度值更新模块,用于将所述发送队列的前后两个队列各自的调度值加上相应权值,并将结果设置成为所述发送队列的前后两个队列的调度值;及所述发送队列调度值更新模块,用于将所述发送队列的调度值减去所有队列的权值之和,将结果设置成为所述发送队列的调度值。
10.根据权利要求7或9所述的快速加权轮询调度器,其特征在于,所述队列集合重组模块包括以下模块判断模块,用于判断所述发送队列与所述发送队列的前后两个队列的调度值的大小关系;判断结果处理模块,用于根据所述判断模块判断结果重新划分队列集合,并执行以下操作如果所述发送队列的调度值大于其前后两个队列的调度值,则保持队列集合不变;如果所述发送队列的调度值大于后一队列的调度值且小于前一队列的调度值,则将所述发送队列所在的队列集合与前一队列集合合并成为新的队列集合;如果所述发送队列的调度值大于前一队列的调度值且小于后一队列的调度值,则将所述发送队列独立成为新的队列集合;及如果所述发送队列的调度值小于其前后两个队列的调度值,则将所述发送队列合并到前一队列集合中去,而所述发送队列原先所属的队列集合头部队列为所述发送队列的后一队列。
11.根据权利要求7所述的快速加权轮询调度器,其特征在于,所述调度值更新模块还用于更新相应队列的调度值。
12.一种快速加权轮询调度装置,其特征在于,包括第一寄存器,用于存储队列调度值;第二寄存器,用于存储队列调度次数;第三寄存器,用于存储总调度次数;第四寄存器,用于设置队列在集合中是否为头部队列;队列存储空间,用于存储队列;输出端口,用于发送队列;及快速加权轮询调度器,与所述第一寄存器、第二寄存器、第三寄存器和第四寄存器数据交互,所述队列存储空间通过所述快速加权轮询调度器发送队列到所述输出端口。
全文摘要
本发明公开了一种快速加权轮询调度方法及装置,其方法包括以下步骤将所有队列按初始调度值的大小顺序排列成一个队列集合;比较所述队列集合中处于开始位置的队列的调度值,选取调度值最大的队列为发送队列;更新所述队列集合中处于开始位置的队列、所述发送队列和所述发送队列前后两个队列的调度值;判断所述被调度到的发送队列、其前后两个队列的新调度值大小顺序以进行队列集合的重新划分,重新划分后的队列集合还是保持集合内部调度值从大到小的排列顺序;重新进行调度。对应于传统WRR调度器在每一次调度中都必须比较所有队列调度值,并更替每个队列调度值,快速WRR调度器只需比较某些队列的调度值,大大减少了运算量,提高了调度速度。
文档编号H04L12/56GK1798092SQ20041010186
公开日2006年7月5日 申请日期2004年12月29日 优先权日2004年12月29日
发明者童进, 施卫丰, 李际涛, 吴玉文 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1