一种使信元流量实现最小抖动的加权轮询方法 【技术领域】
本发明涉及一种使信元流量实现最小抖动的加权轮询方法,确切地说,涉及一种在使用传统加权轮询算法时,信元在短时间上的抖动过大,以及在使用专用集成电路ASIC或现场可编程门阵列FPGA器件实现时,逻辑规模太大的问题得到较好解决的加权轮询方法,属于异步转移模式和其他业务的恒定比特率CBR业务地信元流量调度控制技术领域。
背景技术
加权轮询(WRR)算法主要应用在ATM和其他业务的CBR业务的流量调度上。现在,对于控制信元流量的传统加权轮询算法一般采用下述实现方法:
为了计算和比较时标,每条队列分配一个16位的时标计数器,初始值为0x0000,这里确定时标为16位是为了减少寄存器的数量,加快比较速度;另一个关键参数-16位的发送时间间隔参数则存储在寄存器参数表中,该参数是根据队列的预约带宽和权值计算得到的,队列的权值和信元时间间隔参数需要CPU进行配置,在执行配置时写入寄存器。采用16位的时间间隔参数,分辨率为:622M/64K=9.8K;权值的计算公式为:WEIGHT=|R/9.8K|,式中R为每条队列的预约速率。
每次通过轮询选取队列,找到一个队列后,先检查该队列时标计数器的值是否符合发送条件:队列[n]Counter<队列[m]Counter?如果符合条件,就发送该队列的一个信元,并把该队列的计数器加上本队列的时间间隔值,再轮询进行下一次运算。否则,就发送另一个队列的信元,并使其队列的计数器加上本队列的时间间隔值。如果一条队列的计数值到达最大值0xFFFF,就等待另一队列的计算。如果所有计数器都到达或接近最大值0xFFFF时,同时把所有的计数器清零,重新进行计算。
参见图1,该图描述了两个队列CBR_A和CBR_B分别使用权值为7和4、信元间隔参数为4和7进行上述传统加权轮询算法的简化调度示意。在这种传统加权轮询算法中,对于两个队列需要比较该两个时标寄存器的大小,还需要判断这两个寄存器是否接近于0xFFFF,以便对它们重新进行清零处理。对于多个队列,就需要找出各个队列时标寄存器的最小值来判断哪个队列满足发送条件。
这种传统加权轮询算法能够保证在较长的周期中各个队列的带宽是均匀的。但是,在有多个队列、且各个队列的带宽相差较大时,传统加权轮询算法所得到的结果在短时上的抖动比较大。对于仅有两个队列的情况,各个队列短时流量的抖动看起来还不太明显。如果队列数量较多,短时抖动就非常明显了。
下面例举一个简化的有16个队列的情况:假设总带宽为48M,总共有16个队列业务(队列序号小的优先级高),各个队列中需要的最小带宽为1M。该简化的16个队列所需要的带宽分配如下表所示: 队列业务编号 配置的带宽 队列业务编号 配置的带宽 CBR_0 21M CBR_8 1M CBR_1 13M CBR_9 1M CBR_2 1M CBR_10 1M CBR_3 1M CBR_11 1M CBR_4 1M CBR_12 1M CBR_5 1M CBR_13 1M CBR_6 1M CBR_14 1M CBR_7 1M CBR_15 1M
如果采用传统加权算法进行队列调度,得到的48个调度的顺序如下表所示:序号队列编号序号队列编号序号队列编号序号队列编号 1 CBR_0 13 CBR_12 25 CBR_1 37 CBR_0 2 CBR_1 14 CBR_12 26 CBR_0 38 CBR_1 3 CBR_2 15 CBR_14 27 CBR_0 39 CBR_0 4 CBR_3 16 CBR_15 28 CBR_1 40 CBR_0 5 CBR_4 17 CBR_0 29 CBR_0 41 CBR_1 6 CBR_5 18 CBR_1 30 CBR_0 42 CBR_0 7 CBR_6 19 CBR_0 31 CBR_1 43 CBR_0 8 CBR_7 20 CBR_0 32 CBR_0 44 CBR_1 9 CBR_8 21 CBR_1 33 CBR_1 45 CBR_0序号队列编号序号队列编号序号队列编号序号队列编号 10 CBR_9 22 CBR_0 34 CBR_0 46 CBR_1 11 CBR_10 23 CBR_1 35 CBR_0 47 CBR_0 12 CBR_11 24 CBR_0 36 CBR_1 48 CBR_0
参见图2所示的其中编号为CBR_0和CBR_1的队列发送时隙在时间轴上的一段局部分布状况,从图2可以清楚地看出:编号为CBR_0和CBR_1的队列速率在短时上的抖动相当大。
因此,传统加权轮询算法的缺点主要是流量的短时抖动比较大,对于有一些对短时抖动要求较高的应用就不甚合适。同时使用这种传统技术实现时,需要通过多次比较才能得到一个最小值结果。在使用逻辑器件实现的时候,需要的资源很大;如果使用CPU进行计算,则速度很慢。
【发明内容】
本发明的目的是提供一种使信元流量实现最小抖动的加权轮询方法,以解决现有技术存在的短时抖动过大,以及在使用ASIC或FPGA器件实现时逻辑规模太大的问题。
本发明的目的是这样实现的:一种使信元流量实现最小抖动的加权轮询方法,其特征在于:该方法包括下列三个步骤:
A、对各个信元队列进行编号;
B、配置一个将各个队列的编号均匀分布的查找表;
C、按照查找表的顺序发送各个队列的信元,从而实现队列的流量调度。
所述的步骤A中,对各个信元队列进行编号之前,进一步包括下列步骤:
A1、确定需要实现的各个队列的最小流量或流量控制的最小步进;
A2、确定传输信道上可供使用的总带宽;
A3、根据上述最小流量和传输信道上可供使用的总带宽,得到所需要的查找表的长度L∶L=总带宽/最小流量。
所述的步骤A3中,所需要的查找表是存储该配置数据的RAM存储器。
所述的查找表的长度是RAM存储器的存储深度,即存储器的存储空间。
所述的步骤A3中,根据计算公式L=总带宽/最小流量得到的所需要的查找表的长度L可以只取整数部分,以使该查找表的长度最短;也可以对查找表的长度L的计算结果精确到小数点后的若干位,即加大查找表的长度,使各个队列的流量得到更精确的控制。
所述的步骤B中,配置一个将各个队列的编号均匀分布的查找表是采用伪随机交织的方法。
所述的步骤B中,在查找表中均匀分布配置各个队列的编号时,其配置结果应该满足下述三个条件:各个队列编号出现的次数与其配置的带宽成正比,表示各个队列的编号均匀分布在RAM存储器空间上,以及如果将生成的查找表展开,在整个查找表中的任何一个节距上,各个队列编号出现的次数与其在查找表内相应位置的个数的误差不超过1个。
所述的步骤C中,按照查找表的顺序发送各个队列的信元,进一步包括下列步骤:
C1、根据上述配置的查找表顺序,确定发送的队列编号,同时发送该队列的一个信元;
C2、在每次发送一个信元之后,将查找表的地址加1,再读出查找表内该新地址的数据,即确定下一个发送的队列编号,接着发送该队列的一个信元;
C3、循环进行上述步骤C2的操作,直至所有队列的信元全部发送完毕。
对于SDH/SONET承载包或POS/SPI系统包接口上的变长报文,先将其切割成定长的信元,再执行所述的各个步骤,可实现变长报文的流量调度。
本发明是一种使信元流量实现最小抖动的加权轮询方法,该方法的技术关键是采用一个将各个队列的编号均匀分布的查找表,来实现队列的流量调度。本发明的优点是实现简单,解决了传统加权轮询算法的缺陷,在实现时,无须比较各个队列的时标寄存器,可以大大减小实现加权轮询算法的难度和复杂度,在使用ASIC或FPGA实现本发明的时候,极大地减小了逻辑器件实现的规模和难度;同时极大地减小了传统加权轮询算法引起的短时流量的抖动,使短时抖动减小到最低程度。另外,由于本发明只进行查表,如果使用CPU进行计算,其速度很快,远远高于现有的加权轮询算法的速度。本发明还可以在SDH/SONET承载包或系统包(POS/SPI,Packet Over SDH/SONET/System PacketInterface)接口上实现变长报文的流量调度,即先将变长报文切割成定长的信元,然后应用本发明方法进行调度。
【附图说明】
图1是传统加权轮询算法的简化调度示意图。
图2是用图1所示的传统加权轮询算法的实施例中编号为CBR_0和CBR_1的队列速率在短时上抖动很大的情况示意图。
图3是本发明使信元流量实现最小抖动的加权轮询方法的流程图。
图4是采用本发明的实施例中编号为CBR_0和CBR_1的两个队列在短时上的速率抖动明显减少的情况示意图。
【具体实施方式】
本发明是一种使信元流量实现最小抖动的加权轮询方法,该方法是先对各个信元队列进行编号,再配置一个将各个队列的编号均匀分布的查找表,并按照查找表的顺序发送各个队列的信元,从而实现队列的流量调度。
参见图3,该方法包括下列具体步骤:
(1)确定需要实现的各个队列的最小流量或流量控制的最小步进(Bwsmin);例如64K。
(2)确定传输信道上可供使用的总带宽(Bwtmax);例如一条光纤的带宽,或者是系统分配的一条传输信道的带宽:622M。
(3)根据上述最小流量和传输信道上可供使用的总带宽,得到所需要的查找表的长度L∶L=总带宽(Bwtmax)/最小流量(Bwsmin),也就是RAM存储器的深度(即地址空间)为622M/64K=9800,为了减小RAM空间,可以对其结果L只取整数部分。
(4)将各个恒定比特率CBR业务逐一编号,假如有4096个队列,则可将队列编号为0~4095;再采用伪随机交织的方法在可供使用的总带宽空间里均匀分布配置编号的各个队列,即将各个队列编号0~4095在9800地址空间内均匀分布配置,并将这些配置数据存入查找表中;且配置结果应该符合下列条件:A、各个队列编号出现的次数与其配置的带宽成正比。如配置第0个CBR业务地带宽为128K,那么队列0在查找表(即RAM)中出现的次数应为2次。B、表示各个队列的编号应在RAM空间上均匀分配。C、在整个查找表9800地址中的任何一个节距上,各个队列编号出现的次数与其在查找表内相应位置的个数一致,其误差不超过1个。
(5)根据上述配置的查找表顺序,确定发送的队列编号,同时发送该队列的一个信元;
(6)在每次发送一个信元之后,将查找表的地址加1,再读出查找表内该新地址的数据,即确定下一个发送的队列编号,接着发送该队列的一个信元;
(7)循环进行上述步骤(6)的操作,直至所有队列的信元全部发送完毕。
下面采用背景技术中的同一个实施例进一步具体说明之。假设总带宽为48M,总共有16个队列业务(队列序号小的优先级高),各个队列中需要的最小带宽为1M。该简化的16个队列所需要的带宽分配如下表所示: 队列业务编号 配置的带宽 队列业务编号 配置的带宽 CBR_0 21M CBR_8 1M CBR_1 13M CBR_9 1M CBR_2 1M CBR_10 1M CBR_3 1M CBR_11 1M CBR_4 1M CBR_12 1M CBR_5 1M CBR_13 1M CBR_6 1M CBR_14 1M CBR_7 1M CBR_15 1M
采用本发明所述步骤中(1)~(5)的办法得到用于队列调度的查找表,它是一个4×48的RAM,RAM内的数据见下表:表地址 队列 编号表地址 队列 编号表地址 队列 编号表地址 队列 编号 0 CBR_15 12 CBR_11 24 CBR_1 36 CBR_0 1 CBR_14 13 CBR_0 25 CBR_0 37 CBR_4 2 CBR_0 14 CBR_1 26 CBR_7 38 CBR_0 3 CBR_1 15 CBR_0 27 CBR_0 39 CBR_1 4 CBR_0 16 CBR_10 28 CBR_1 40 CBR_3 5 CBR_13 17 CBR_1 29 CBR_0 41 CBR_0 6 CBR_0 18 CBR_0 30 CBR_6 42 CBR_1 7 CBR_1 19 CBR_9 31 CBR_0 43 CBR_0 8 CBR_12 20 CBR_0 32 CBR_1 44 CBR_2 9 CBR_0 21 CBR_1 33 CBR_5 45 CBR_0 10 CBR_1 22 CBR_0 34 CBR_0 46 CBR_1 11 CBR_0 23 CBR_8 35 CBR_1 47 CBR_0
这个查找表与队列调度的顺序是一致的,也就是说,应该按照该查找表的顺序发送队列。
根据上述查找表,对于编号为CBR_0和CBR_1的队列发送时隙在时间轴上的分布则如图4所示。从图4中可以明显看到,采用本发明后,CBR_0和CBRCBR_1队列在短时上的速率抖动显著减小,各个队列的信元均匀发送的好处是显而易见的。同时本发明是采用查表的办法省略了比较时标的程序,大大减少了用ASIC和FPGA器件实现的难度和规模。
本发明的方法已经在申请人研制的设备上进行试验实施,实施的结果是成功的,实现了发明目的。