基于硬件实现的弹性的加权公平调度方法及调度系统与流程

文档序号:12477925阅读:345来源:国知局
基于硬件实现的弹性的加权公平调度方法及调度系统与流程

本发明涉及网络通信技术领域,尤其涉及一种基于硬件实现的弹性的加权公平调度方法及调度系统。



背景技术:

随着IP业务的发展,尤其是音频、视频等多媒体业务的迅速增长;传统的IP网络不仅要提供传统类型的数据业务,还要对带宽、延迟要求较高的新业务提供支持,即,要求传统的IP网络对不同的业务实现区分,同时还要提供一定的QoS保证。所述QoS的英文全拼为:Quality of Service,译为服务质量。

在IETF定义的QoS模型中的DiffServ模型一般通过边缘节点实现大部分复杂的 QoS功能,例如:分类、流量调节、标记等,中间节点则根据差分服务编码对流量进行不同的PHB。所述DiffServ的英文全拼为:Differentiated Services,译为差分服务;所述PHB的英文全拼为:Per Hop Behavior译为逐跳行为。

调度,其属于PHB的其中一种行为,目前在报文交换领域中,主要的调度算法有RR、DRR、MDRR等。所述RR的英文全拼为:Round Robin,译为逐跳行为;所述DRR的英文全拼为:Deficit Round Robin,译为补偿型循环轮询;所述MDRR的英文全拼为:Modified Deficit Round Robin,译为修改的补偿型循环轮询。

上述几种算法均已成为本领域中较为成熟的算法,其中DRR算法如图1所示,其为一种现有技术,目前已获得普遍的应用,在此不做详细赘述。

相应的,在DRR算法的基础上实现MDRR算法,是本领域目前最为成熟的轮询算法。

所述MDRR算法实现过程中,在 DRR 的基础上,对每一个调度对象进行轮询调度,每次调度一个数据报文后,判断亏欠计数器是否产生亏欠(为负数)。若不亏欠,将调度对象放到轮询尾部;若亏欠,则将调度对象放到备用列表中,表示当前轮次调度完毕;进过反复轮询调度后,所有调度对象全部进入备用列表,此时,相应的亏欠计数器也全部为负数,此时,确认当前调度轮次完成;同时,将活动调度列表和备用列表进行交换;并且按照预先配置的调度比例填充所有调度对象的亏欠计数器。

传统的MDRR算法中,在调度之前,需要指定一个固定的补充颗粒,所述固定的补充颗粒以granularity表示,且不可更改,每次调度过程中,在切换调度轮次的时候,若未能将亏欠计数器补正,切换后的亏欠计数器所对应的调度节点还是会被调度,并亏欠更多的值;考虑到数字逻辑实现的计数器有位宽限制,多次此事件发生后,亏欠计数器将会发生翻转,变成极大的正数,使最终调度比例不准确;如此,为了避免出现上述现象,通常将补充颗粒的数值设置为网络传输过程中报文的最大长度,称作MTU,即设置granularity = MTU;然而,很多情况下,数据报文并不大,若每次都按照 MTU的权重倍数去填充亏欠计数器,势必导致在通过流量是小报文的时候,轮次切换比较少;这样会导致调度出的流量不够平滑、有突发流量情况,最终精度同样达不到用户需求。



技术实现要素:

为解决上述技术问题,本发明的目的在于提供一种基于硬件实现的弹性的加权公平调度方法及调度系统。

为实现上述发明目的之一,本发明一实施方式提供的基于硬件实现的弹性的加权公平调度方法, 所述方法包括:每次轮询调度开始前,

根据各个通道对应的亏欠计数器的计数值,以及各个转发通道的数据待发送状态判断各个转发通道中调度对象是否需要从备用列表转换至活动列表;

所述转发通道的数据待发送状态包括:存在数据等待发送和无数据等待发送;

若是,根据各个转发通道对应的亏欠计数器的数值获得亏欠计数器的补充颗粒;

同时,根据各个转发通道对应的权重系数比,当前各个转发通道的数据待发送状态,以及当前亏欠计数器的补充颗粒修改各个转发通道对应的亏欠计数器的计数值;

若否,保持各个转发通道对应的亏欠计数器的计数值。

作为本发明一实施方式的进一步改进,“根据各个通道对应的亏欠计数器的计数值,以及各个转发通道的数据待发送状态判断各个转发通道中调度对象是否需要从备用列表转换至活动列表”具体包括:

若各个通道对应的所述亏欠计数器的计数值均小于零,则同时将各个转发通道中调度对象从备用列表转换至活动列表;

若各个通道对应的所述亏欠计数器中至少一个所述亏欠计数器的计数值小于零,同时,至少一个所述亏欠计数器的计数值大于等于零;

则判断所述亏欠计数器的计数值大于等于零的所述转发通道的数据待发送状态是否为无数据等待发送,

若是,将所有亏欠计数器的计数值小于零的转发通道中的调度对象均从备用列表转换至活动列表;

若否,保持各个转发通道中调度对象的当前存储状态。

作为本发明一实施方式的进一步改进,当确认转发通道中的调度对象需要从备用列表转换至活动列表后,所述方法具体包括: 若当前通道对应的计数器的计数值小于零,

则将当前通道的亏欠计数器的计数值均修改为:

X. deficitnext= X. deficit+ X.weight* granularity;

若当前通道对应的计数器的计数值大于等于零,

则将当前通道的亏欠计数器的计数值清零后再进行修改,

修改后的亏欠计数器的计数值为:

X. deficitnext= X.weight* granularity;

其中,X表示转换通道的序号,X. deficitnext表示修改后的亏欠计数器的计数值;X. deficit表示转换前的亏欠计数器的计数值;X.weight表示当前转换通道的权重系数比;granularity表示本次转换过程中填充的补充颗粒大小。

作为本发明一实施方式的进一步改进,“根据各个转发通道对应的亏欠计数器的数值获得亏欠计数器的补充颗粒”具体包括:

依次比对各个转发通道对应的亏欠计数器的计数值;

获得亏欠计数器的计数值中绝对值最大的负数值;

将所述负数值最接近的2的幂作为本轮次亏欠计数器的补充颗粒。

作为本发明一实施方式的进一步改进,所述方法具体包括:

获得亏欠计数器的计数值中绝对值最大的负数值;

将所述负数值转化为二进制数据,并对其取反;

查找取反后的所述负数值中第一个二进制数字“1”所在比特位n;

将n+1作为本轮次亏欠计数器的补充颗粒偏移值lastshift;

将2 lastShift 作为本轮次亏欠计数器的补充颗粒。

为了实现上述发明目的之一,本发明一实施方式提供一种基于硬件实现的弹性的加权公平调度系统,所述系统包括:存储模块,判断模块,调度填充模块;

所述存储模块包括:亏欠计数器;

每次轮询调度开始前,

所述判断模块用于根据各个通道对应的亏欠计数器的计数值,以及各个转发通道的数据待发送状态判断各个转发通道中调度对象是否需要从备用列表转换至活动列表;

所述转发通道的数据待发送状态包括:存在数据等待发送和无数据等待发送;

若是,所述调度填充模块根据各个转发通道对应的亏欠计数器的数值获得亏欠计数器的补充颗粒;

同时,根据各个转发通道对应的权重系数比,当前各个转发通道的数据待发送状态,以及当前亏欠计数器的补充颗粒修改各个转发通道对应的亏欠计数器的计数值;

若否,所述调度填充模块用于保持各个转发通道对应的亏欠计数器的计数值。

作为本发明一实施方式的进一步改进,若所述判断模块确认各个通道对应的所述亏欠计数器的计数值均小于零,则通过所述调度填充模块同时将各个转发通道中调度对象从备用列表转换至活动列表;

若所述判断模块确认各个通道对应的计数器中至少一个所述亏欠计数器的计数值小于零,同时,至少一个所述亏欠计数器的计数值大于等于零;

则判断所述亏欠计数器的计数值大于等于零的所述转发通道的数据待发送状态是否为无数据等待发送,

若是,通过所述调度填充模块将所有亏欠计数器的计数值小于零的转发通道中的调度对象均从备用列表转换至活动列表;

若否,通过所述调度填充模块保持各个转发通道中调度对象的当前存储状态。

作为本发明一实施方式的进一步改进,当所述判断模块确认转发通道中的调度对象需要从备用列表转换至活动列表后,

若所述判断模块确认当前通道对应的计数器的计数值小于零,

则通过所述填充调度模块将当前通道的亏欠计数器的计数值均修改为:

X. deficitnext= X. deficit+ X.weight* granularity;

若所述判断模块确认当前通道对应的计数器的计数值大于等于零,

则通过所述填充调度模块将当前通道的亏欠计数器的计数值清零后再进行修改,

修改后的亏欠计数器的计数值为:

X. deficitnext= X.weight*granularity;

其中,X表示转换通道的序号,X. deficitnext表示修改后的亏欠计数器的计数值;X. deficit表示转换前的亏欠计数器的计数值;X.weight表示当前转换通道的权重系数比;granularity表示本次转换过程中填充的补充颗粒大小。

作为本发明一实施方式的进一步改进,所述判断模块还用于:依次比对各个转发通道对应的亏欠计数器的计数值;

获得亏欠计数器的计数值中绝对值最大的负数值;

所述调度填充模块还用于将所述负数值最接近的2的幂作为本轮次亏欠计数器的补充颗粒。

作为本发明一实施方式的进一步改进,所述判断模块具体用于:获得亏欠计数器的计数值中绝对值最大的负数值;

所述调度填充模块具体用于:将所述负数值转化为二进制数据,并对其取反;

查找取反后的所述负数值中第一个二进制数字“1”所在比特位n;

将n+1作为本轮次亏欠计数器的补充颗粒偏移值lastshift;

将2 lastShift 作为本轮次亏欠计数器的补充颗粒。

与现有技术相比,本发明的基于硬件实现的弹性的加权公平调度方法及调度系统,实时对所有调度对象的最大亏欠值进行估算,以获取最小的可以将所有亏欠计数器刷新成非负的“亏欠计数器的补充颗粒”,避免了预配置的所述补充颗粒无法兼顾大尺寸报文和小尺寸报文混合通过的情况,如此,减小亏欠计数器刷新的时候过度加入的值,从而减小了调度的抖动、提高了调度的精度。

附图说明

图1是传统的DRR算法的代码示意图;

图2是本发明一实施方式提供的基于硬件实现的弹性的加权公平调度方法的流程示意图;

图3是本发明一实施方式中提供的基于硬件实现的弹性的加权公平调度系统的模块示意图。

具体实施方式

以下将结合附图所示的各实施方式对本发明进行详细描述。但这些实施方式并不限制本发明,本领域的普通技术人员根据这些实施方式所做出的结构、方法、或功能上的变换均包含在本发明的保护范围内。

如图2所示,本发明一实施方式提供的基于硬件实现的弹性的加权公平调度方法,所述方法包括:

S1、每次轮询调度开始前,根据各个通道对应的亏欠计数器的计数值,以及各个转发通道的数据待发送状态判断各个转发通道中调度对象是否需要从备用列表转换至活动列表;

所述转发通道的数据待发送状态包括:存在数据等待发送和无数据等待发送;

若是,进入步骤S2,若否,进入步骤S3;

S2、根据各个转发通道对应的亏欠计数器的数值获得亏欠计数器的补充颗粒;

同时,根据各个转发通道对应的权重系数比,当前各个转发通道的数据待发送状态,以及当前亏欠计数器的补充颗粒修改各个转发通道对应的亏欠计数器的计数值;

S3、保持各个转发通道对应的亏欠计数器的计数值。

需要说明的,初始状态下,每个所述亏欠计数器的计数值均为零,随着报文在交换芯片内的转发,当出现突发状况时,例如:转发通道出现拥塞现象,则所述亏欠计数器的计数值也随之发生变化。

相应的,每次轮询调度结束后,所述亏欠计数器的计数值会随着转发报文的长度而更改,相应的,所述亏欠计数器的计数值会出现两种情况,一种为负值,另一种为非负值;

本发明具体实施方式中,每次轮询调度结束后,需要分别获取各个转发通道对应的亏欠计数器的计数值,若当前转发通道中的亏欠计数器的计数值小于零,则将当前转发通道中的调度对象从活动列表转换至备用列表;若当前转发通道中的亏欠计数器的计数值大于等于零,则保持当前转发通道中的调度对象处于所述活动列表中;

本发明一优选实施方式中,所述步骤S1具体包括:

若各个通道对应的所述亏欠计数器的计数值均小于零,则同时将各个转发通道中调度对象从备用列表转换至活动列表;

若各个通道对应的所述亏欠计数器中至少一个所述亏欠计数器的计数值小于零,同时,至少一个所述亏欠计数器的计数值大于等于零;

则判断所述亏欠计数器的计数值大于等于零的所述转发通道的数据待发送状态是否为无数据等待发送,

若是,将所有亏欠计数器的计数值小于零的转发通道中的调度对象均从备用列表转换至活动列表;

若否,保持各个转发通道中调度对象的当前存储状态。

该示例中,当前调度节点上具有若干个队列,每个队列对应一条转发通道,当该调度节点下的亏欠计数器的计数值其中一部分为非负值,另一部分为负值时,根据各个转发通道的数据待发送状态判断各个转发通道中调度对象是否需要从备用列表转换至活动列表。

所述转发通道的数据待发送状态为本次调度结束后,所述转发通道的数据待发送状态,即当前转发通道的入端口是否有报文等待进入该通道,若存在转发报文,则其状态为存在数据等待发送,若未有报文等待传输,则其状态为无数据等待发送。

进一步的,当确认转发通道中的调度对象需要从备用列表转换至活动列表后,所述步骤S2具体包括:

若当前通道对应的计数器的计数值小于零,

则将当前通道的亏欠计数器的计数值均修改为:

X. deficitnext= X. deficit+ X.weight*granularity;

若当前通道对应的计数器的计数值大于等于零,

则将当前通道的亏欠计数器的计数值清零后再进行修改,

修改后的亏欠计数器的计数值为:

X. deficitnext= X.weight* granularity;

其中,X表示转换通道的序号,X. deficitnext表示修改后的亏欠计数器的计数值;X. deficit表示转换前的亏欠计数器的计数值;X.weight表示当前转换通道的权重系数比;granularity表示本次转换过程中填充的补充颗粒大小。

所述权重系数比为在同一调度节点下,每个转换通道对应的调度比例,该权重系数可根据需要具体调整,例如:可由用户指定,或者是按照各个传输通道的相对速率进行设定。例如:一个调度节点M,其下属4个队列A,B,C,D,每个队列对应一个传输通道,将其调度比例依次设定为:1:1:1:1或1:2:3:4,在此不做详细赘述。

上述步骤S2中,根据各个转发通道对应的亏欠计数器的数值获得亏欠计数器的补充颗粒具体包括:

依次比对各个转发通道对应的亏欠计数器的计数值;

获得亏欠计数器的计数值中绝对值最大的负数值;

将所述负数值最接近的2的幂作为本轮次亏欠计数器的补充颗粒。

如此,鉴于硬件数据逻辑实现更为方便。

本发明一优选实施方式中,根据各个转发通道对应的亏欠计数器的数值获得亏欠计数器的补充颗粒具体包括:

获得亏欠计数器的计数值中绝对值最大的负数值;

将所述负数值转化为二进制数据,并对其取反;

查找取反后的所述负数值中第一个二进制数字“1”所在比特位n;

将n+1作为本轮次亏欠计数器的补充颗粒偏移值lastshift;

将2 lastShift 作为本轮次亏欠计数器的补充颗粒。

本发明一具体示例中,获得亏欠计数器的计数值中绝对值最大的负数值为-3000为例做具体介绍;

首先,将-3000转化为二进制数据,则所述-300的DWORD值为11111111111111111111010001001000;对上述获得的DWORD 值取反为:0000000000000000000101110110111,

使用标准 SP得到n值,n=11,则本轮次亏欠计数器的补充颗粒偏移值lastshift= n+1=12,补充颗粒的大小2 lastShift=2n+1=212=4096。

为了便于理解,下述内容中,以应用本发明所示方法的具体示例进行详细说明。

该示例中,一个调度节点M,其下属4个队列A,B,C,D,每个队列对应一个传输通道,将其调度比例依次设定为1:2:3:4。

采用数字逻辑配置,可表达为如下形式:A.weight=1,B.weight=2,C.weight=3,D.weight=4;

初始状态下,对应每个传输通道的亏欠计数器,其数字逻辑配置,可表达为如下形式:A.deficit=0,B.deficit=0,C.deficit=0,D.deficit=0;

假设交换机芯片运行到一定时间后,上述队列A,B,C,D全部处于拥塞状态,此时,队列A,B,C,D对应的调度对象均处于活动列表中。

当前状态下,例如:队列A发送400B的报文,队列B发送3000B的报文,队列C发送64B的报文,队列D发送9600B的报文,发送完成后,每个队列对应的亏欠计数器的计数值以及对应的活动列表标志位均有可能发生变化;

本次轮询调度结束后,对于队列A,A.deficit=-400,A.inActive=FALSE,M.shift=9;对于队列B,B.deficit=-3000,B.inActive=FALSE,M.shift=12;对于队列C,C.deficit=-64,C.inActive=FALSE,M.shift=6;对于队列D,D.deficit=-9600,D.inActive=FALSE,M.shift=14;

其中,A.inActive、B.inActive、C.inActive、D.inActive分别表示各个队列中调度对象是否处于活动列表的代码标识,当其值为0或FALSE表示当前队列中的调度对象从活动列表转置于备份列表中,当其值为1或TURE时,表示处于活动列表中,所述活动列表的代码标识为Active,所述备份列表的代码标识为Backup,M.shift表示每个队列相对于所述亏欠计数器的计数值获得的补充颗粒对应的偏移值;当然,在本发明的其他实施方式中,也可以以二进制代码“1”表示FALSE,以“0”表示TURE,在此不做详细赘述。

进一步的,当前调度节点没有额外的对象调度,即,没有待发送数据,如此,当前节点的各个队列中的调度对象均从Active转换至Backup,则下一次轮询调度开始前,将Backup中的调度对象全部放回至Active中,同时,获得的M.lastShift = 14,M.shift=0,{A,B,C,D}.rstDeficit={A,B,C,D}.inActive=4'b0000;M.lastShift表示本次轮询调度过程中,补充颗粒的偏移值,此处的M.shift=0表示将各个队列对应的补充颗粒值恢复为原始状态,以再次调度报文时,重新计数,{A,B,C,D}.rstDeficit为各个队列对应的重置亏欠计数器的标识代码;当其值为0或 FALSE时,表示正常调度,当其值为TRUE或1时,表示需要对当前队列的亏欠计数器清零后再继续处理报文,以下将会详细描述其为1时的场景,在此不做详细赘述。

进一步的,队列A、B、C、D均继续发送报文,例如:队列A发送254B的报文,队列B发送64B的报文,队列C发送64B的报文,队列D发送64B的报文,则在本次轮询调度结束后,

对于队列A,对亏欠计数器填充的数值为:cridit=A.weight<<M.lastShift=1*16384=16384,A.deficit=-400+16384-254=15730,保持A处于Active,对应的A.shift=0;A.rstDeficit=FALSE;

对于队列B,对亏欠计数器填充的数值为:ridit=B.weight<<M.lastShift=2*16384=32768,B.deficit=-3000+32768-64=29704,保持B在 Active,对应的B.shift=0;B.rstDeficit=FALSE;

对于队列C,对亏欠计数器填充的数值为:cridit=C.weight<<M.lastShift=3*16384=49152,C.deficit =-64+49152-64=49152,保持C在Active,对应的C.shift=0;C.rstDeficit=FALSE;

对于队列D,对亏欠计数器填充的数值为:cridit=D.weight<<M.lastShift=4*16384=65536,D.deficit=-9600+65536-64=55872,保持 D 在Active,对应的D.shift=0;D.rstDeficit=FALSE。

若干轮后,可能出现的一种状态如下:每个队列对应的亏欠计数器的计数值有正有负,且报文的发送状态也在改变。

当前状态下:A.deficit->3428,A.inActive->TRUE,B.deficit->-300,B.inActive->FALSE,C.deficit->2232,C.inActive->TRUE,D.deficit->-63,D.inActive ->FALSE,同时,端口没有可用的对象调度,即当前轮次下,仍然留在活动列表中的A,C对应的数据待发送状态全部为没有待发送数据。

此时,获得M.lastShift=9,M.shift=0;{A,B,C,D}.rstDeficit={A,B,C,D}.inActive=4'b1010,须将*.rstDeficit的值为0所对应的队列中的调度对象全部从Backup放回至Active;

进一步的,当该节点下的各个队列再次开始接收报文时,例如:队列A发送320B的报文,队列B发送1518B的报文,队列C发送64B的报文,队列D发送800B的报文时;

首先,根据{A,B,C,D}.rstDeficit的值,将上一轮中其值为1的队列对应的计数值为正的亏欠计数器清零,保持数值为负的亏欠计数器的计数值后,再进行填充;

相应的,本轮调度开始后,对于队列A,对亏欠计数器填充的数值为:cridit=A.weight<<M.lastShift=1*512=512,A.deficit=0+512-320=192,保持A处于Active,对应的A.shift=0;A.rstDeficit=FALSE;

对于队列B,对亏欠计数器填充的数值为:cridit=B.weight<<M.lastShift=2*512=102,B.deficit=-300+1024-1518=-794,将队列B的调度对象从Active转至Backup,对应的 B.inActive=FALSE,B.shift=10;B.rstDeficit=FALSE;

对于队列C,对亏欠计数器填充的数值为:cridit=C.weight<<M.lastShift=3*512=1536,C.deficit =0+1536-64=1472,保持C在Active,对应的C.shift=0;C.rstDeficit=FALSE;

对于队列D,对亏欠计数器填充的数值为:cridit=D.weight<<M.lastShift=4*512=2048,D.deficit=-63+2048-800=1185,保持D在Active,对应的D.shift=0;D.rstDeficit=FALSE。

依次轮询,直至报文调度结束,在此不在继续赘述。

结合图3所示,本发明一实施方式提供的基于硬件实现的弹性的加权公平调度系统,所述系统包括:数据获取模块100、判断模块200、存储模块300、填充调度模块400;其中,所述存储模块300包括对应每个传输通道设置的亏欠计数器301。

每次轮询调度开始前,判断模块200用于根据各个通道对应的亏欠计数器301的计数值,以及各个转发通道的数据待发送状态判断各个转发通道中调度对象是否需要从备用列表转换至活动列表;

所述转发通道的数据待发送状态包括:存在数据等待发送和无数据等待发送;

若是,所述调度填充模块400用于根据各个转发通道对应的亏欠计数器301的数值获得亏欠计数器301的补充颗粒;

同时,所述调度填充模块400还用于根据各个转发通道对应的权重系数比,当前各个转发通道的数据待发送状态,以及当前亏欠计数器301的补充颗粒修改各个转发通道对应的亏欠计数器301的计数值;

若否,所述调度填充模块400用于保持各个转发通道对应的亏欠计数器301的计数值。

需要说明的,初始状态下,每个所述亏欠计数器301的计数值均为零,随着报文在交换芯片内的转发,当出现突发状况时,例如:转发通道出现拥塞现象,则所述亏欠计数器301的计数值也随之发生变化。

相应的,每次轮询调度结束后,所述亏欠计数器301的计数值会随着转发报文的长度而更改,相应的,所述亏欠计数器301的计数值会出现两种情况,一种为负值,另一种为非负值;

本发明具体实施方式中,每次轮询调度结束后,数据获取模块100需要分别获取各个转发通道对应的亏欠计数器301的计数值,若所述判断模块200确认当前转发通道中的亏欠计数器301的计数值小于零,则将当前转发通道中的调度对象从活动列表转换至备用列表;若所述判断模块200确认当前转发通道中的亏欠计数器301的计数值大于等于零,则保持当前转发通道中的调度对象处于所述活动列表中;

本发明一优选实施方式中,若所述判断模块200确认各个通道对应的所述亏欠计数器301的计数值均小于零,则同时将各个转发通道中调度对象从备用列表转换至活动列表;

若所述判断模块200确认各个通道对应的所述亏欠计数器301中至少一个所述亏欠计数器301的计数值小于零,同时,至少一个所述亏欠计数器301的计数值大于等于零;

则继续判断所述亏欠计数器301的计数值大于等于零的所述转发通道的数据待发送状态是否为无数据等待发送,

若是,所述判断模块200用于将所有亏欠计数器301的计数值小于零的转发通道中的调度对象均从备用列表转换至活动列表;

若否,所述判断模块200用于保持各个转发通道中调度对象的当前存储状态。

该示例中,当前调度节点上具有若干个队列,每个队列对应一条转发通道,当该调度节点下的亏欠计数器301的计数值其中一部分为非负值,另一部分为负值时,根据各个转发通道的数据待发送状态判断各个转发通道中调度对象是否需要从备用列表转换至活动列表。

所述转发通道的数据待发送状态为本次调度结束后,所述转发通道的数据待发送状态,即当前转发通道的入端口是否有报文等待进入该通道,若存在转发报文,则其状态为存在数据等待发送,若未有报文等待传输,则其状态为无数据等待发送。

进一步的,当所述判断模块200确认转发通道中的调度对象需要从备用列表转换至活动列表后,

若所述判断模块200确认当前通道对应的计数器的计数值小于零,

则通过所述调度填充模块400将当前通道的亏欠计数器301的计数值均修改为:

X. deficitnext= X. deficit+ X.weight* granularity;

若所述判断模块200当前通道对应的计数器的计数值大于等于零,

则通过所述调度填充模块400将当前通道的亏欠计数器301的计数值清零后再进行修改,

修改后的亏欠计数器301的计数值为:

X. deficitnext= X.weight* granularity;

其中,X表示转换通道的序号,X. deficitnext表示修改后的亏欠计数器301的计数值;X. deficit表示转换前的亏欠计数器301的计数值;X.weight表示当前转换通道的权重系数比;granularity表示本次转换过程中填充的补充颗粒大小。

所述权重系数比为在同一调度节点下,每个转换通道对应的调度比例,该权重系数可根据需要具体调整,例如:可由用户指定,或者是按照各个传输通道的相对速率进行设定。例如:一个调度节点M,其下属4个队列A,B,C,D,每个队列对应一个传输通道,将其调度比例依次设定为:1:1:1:1或1:2:3:4,在此不做详细赘述。

一实施方式中,所述判断模块200还用于:依次比对各个转发通道对应的亏欠计数器301的计数值;

获得亏欠计数器301的计数值中绝对值最大的负数值;

所述调度填充模块400将所述负数值最接近的2的幂作为本轮次亏欠计数器301的补充颗粒。

如此,鉴于硬件数据逻辑实现更为方便。

本发明一优选实施方式中,所述判断模块200还用于:

获得亏欠计数器301的计数值中绝对值最大的负数值;

所述调度填充模块400将所述负数值转化为二进制数据,并对其取反;

查找取反后的所述负数值中第一个二进制数字“1”所在比特位n;

将n+1作为本轮次亏欠计数器的补充颗粒偏移值lastshift;

将2 lastShift 作为本轮次亏欠计数器的补充颗粒。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和模块的具体工作过程,可参考前述方法实施方式中的对应过程,在此不再赘述。

综上所述,本发明的基于硬件实现的弹性的加权公平调度方法及调度系统,实时对所有调度对象的最大亏欠值进行估算,以获取最小的可以将所有亏欠计数器刷新成非负的“亏欠计数器的补充颗粒”,避免了预配置的所述补充颗粒无法兼顾大尺寸报文和小尺寸报文混合通过的情况,如此,减小亏欠计数器刷新的时候过度加入的值,从而减小了调度的抖动、提高了调度的精度。

为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本发明时可以把各模块的功能在同一个或多个软件和/或硬件中实现。

以上所描述的装置实施方式仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施方式方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施方式中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。

上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1