背景技术
在交换网络中对分组缓存后的数据流进行调度输出的调度方法包括SP(StrictPriority严格优先级)、RR(RoundRobin轮循)、WRR(WeightedRoundRobin加权轮循)、DRR(DeficitRoundRobin赤字轮循)、DWRR(DeficitWeightedRoundRobin赤字加权轮循)等等,不同的调度算法满足不同的应用需求,或者一个应用中同时使用多个调度算法,或者根据特殊的需求对现有调度算法做特定修改后完成特定功能。其中,图1是现有的DRR(赤字轮循)调度算法流程图,根据图1的流程,DRR(赤字轮循)调度算法实现步骤如下:
步骤一、首先为每个队列分配一个服务量子(Quantum),且每个队列有一个赤字计数器(Deficitcounter);
步骤二、所有队列的赤字计数器在调度开始时被初始化为0;
步骤三、当一个活动队列(即有数据包等待调度输出的队列)被选择服务时,该队列的服务量子与其当前赤字计数器相加,累加的结果存入赤字计数器;
步骤四、若队首包长小于赤字计数器的值,队首数据包获得发送,同时赤字计数器的值要减去发送包长;
步骤五、若队列所有等待发送的包被全部发送出去(即由活动队列变为非活动队列),则不管赤字计数器的值是否还有剩余,赤字计数器都被复位为0;
步骤六、若队列赤字计数器剩余的值不足以调度队首数据包时,将等到下一个调度轮次把赤字计数器剩余的值与该队列的服务量子累加后等待调度服务;
步骤七、调度器按轮循方式选择下一个活动队列进行调度输出,依次轮循直至本轮次所有活动队列得到服务,并从步骤三开始下一轮次调度。
DRR(赤字轮循)调度算法实现了在各队列内部的数据包长可变的情况下,满足队列预约带宽的公平调度。但是对于定长信元的队列,赤字计数器的每个单位值均能调度一个信元,若直接采用DRR(赤字轮循)调度算法,当被服务的队列因突发的信元输入而堆积时,调度器将一直调度该队列的信元直到其赤字计数器剩余值为0才选择服务下一个队列。若此时下一个队列的赤字计数器有剩余值,并且在等待前一个队列调度结束的过程中不断有信元继续入队,就会出现两个队列在赤字计数器均不为0的情况下,即两个队列均有信元等待调度输出且均未超出预约带宽时,前一个队列的信元连续得到输出,后一个队列的信元持续堆积,甚至因此引起数据链路流控。因此,对于定长信元的队列,直接采用DRR(赤字轮循)调度算法只满足了各队列的预约带宽,而没有满足队列间公平调度原则。
对于同等优先级的定长信元队列要求调度算法既要满足各队列的预约带宽又要满足各队列的信元得到公平调度,实现最大均衡输出,直接使用DRR(赤字轮循)调度算法不能达到要求。
发明内容
本发明要解决的技术问题在于提供一种信元调度输出方法和装置,实现定长信元的公平调度和均衡输出。
为实现本发明要解决的技术问题,本发明一种信元调度输出方法包括:根据各低优先级队列需要的预约带宽为各低优先级队列分配服务量子Qi,并初始化低优先级队列的赤字计数器值为Qi;输出调度模块轮循调度赤字计数器值不为0的低优先级队活动队列的队首信元。
上述方法中,当有高优先级队列有信元等待调度输出时,输出调度模块以最高调度优先权调度输出高优先级队列的信元,直至高优先级队列为空。
上述方法中,输出调度模块轮循调度赤字计数器值不为0的低优先级活动队列的队首信元,具体包括:
选中一个赤字计数器值不为0的低优先级队列,调度输出该低优先活动队列的队首信元,同时该低优先活动队列的赤字计数器值减1;
在本次该低优先级活动队列调度结束时,如果该低优先级活动队列的赤字计数器值减到0,或该低优先级活动队列信元都已调度输出且赤字计数器值不为0,则将该低优先级活动队列从低优先级队列间的轮循调度中删除;
当所有低优先级活动队列的赤字计数器值都为0时,则低优先级活动队列间的轮循调度结束。
上述方法中,当还有低优先级活动队列的赤字计数器值不为0时,每次调度输出赤字计数器值不为0的低优先级活动队列的队首信元之前,判断高优先级队列是否为空,如果不为空,以最高调度优先权调度输出高优先级队列的信元,直至高优先级队列为空,再调度输出赤字计数器值不为0的低优先级活动队列的队首信元,并将赤字计数器值减1。
上述方法中,本轮次低优先级活动队列间的轮循调度结束之后,还包括:根据预约带宽为各低优先级活动队列的赤字计数器重新赋值,开始下一轮次的轮循调度。
上述方法中,在信元调度输出之前,进一步包括,接收来自输入端口的信元,并根据信元类型和目的输出端口,将信元存储在高优先级队列或低优先级队列中。
上述方法中,根据信元类型和目的输出端口,将信元存储在高优先级队列或低优先级队列中,具体包括:根据信元类型及目的输出端口确定对应高优先级队列或低优先级队列,并将信元存储在由缓存管理模块分配给信元对应的高优先级队列或低优先级队列的共享缓存地址中。
上述方法中,高优先级队列为源路由信元队列,低优先级队列为单播信元队列和/或多播信元队列。
为实现本发明要解决的技术问题,本发明一种信元调度输出装置,包括:输出调度模块,所述输出调度模块包括与各输出端口对应的信元调度器,所述输出调度模块用于,根据各低优先级队列需要的预约带宽为各低优先级队列分配服务量子Qi,并初始化低优先级队列的赤字计数器值为Qi,所述信元调度器用于,轮循调度赤字计数器值不为0的低优先级活动队列的队首信元。
上述装置中,所述输出调度模块还用于,当有高优先级队列有信元等待调度输出时,输出调度模块以最高调度优先权调度输出高优先级队列的信元,直至高优先级队列为空。
上述装置中,进一步包括一缓存管理模块,所述缓存管理模块用于,为各输出端口维护高优先级队列和低优先级队列,根据信元入队和出队更新队列链表和空闲链表。
上述装置中,进一步包括一信元入队模块,所述信元入队模块,用于接收来自输入端口的信元,根据信元类型及目的输出端口确定对应高优先级队列或低优先级队列,并将信元存储在由所述缓存管理模块分配给对应的高优先级队列或低优先级队列的共享缓存地址中。
上述装置中,所述信元调度器具体用于,判断高优先级队列是否空,若不为空,以最高调度优先权调度输出高优先级队列的信元,直至为空;
并当高优先级队列为空时,轮循调度输出赤字计数器值不为0的低优先级队列的队首信元,同时轮循的低优先活动队列的赤字计数器值减1,直至轮循的低优先级活动队列的赤字计数器值减到0。
采用本发明所述的方法和装置,对低优先级的定长信元队列实施调度时既满足了各队列预约带宽,又满足了队列间的公平调度原则,达到了各队列信元最大均衡输出的效果。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
采用改进的DRR(赤字轮循)调度算法的信元调度方法的实施例。信元调度方法包括:根据各低优先级队列需要的预约带宽为各低优先级队列分配服务量子Qi,并初始化低优先级队列的赤字计数器值为Qi;输出调度模块轮循调度赤字计数器值不为0的低优先级活动队列的队首信元。本实施例中的改进的DRR(赤字轮循)调度算法支持在运行过程中改变各队列的预约带宽:在执行完当前轮次的调度之后和开始下一轮次的调度之前,根据各队列被改变的预约带宽重新为每个队列分配服务量子并按新的服务量子为各赤字计数器赋值,即可从下一轮次调度开始,在保证新的预约带宽的条件下实现各队列信元最大均衡输出。
采用SP(严格优先级)和改进的DRR(赤字轮循)调度算法的信元调度方法的实施例,能为具有高优先级的队列提供最高调度优先权,保证了高优先级队列的最小时延。信元调度方法包括:根据各低优先级队列需要的预约带宽为各低优先级队列分配服务量子Qi,并初始化低优先级队列的赤字计数器值为Qi;当高优先级队列有信元等待调度输出时,输出调度模块以最高调度优先权调度输出高优先级队列的信元,直至高优先级队列为空;当高优先级队列为空时,输出调度模块轮循调度赤字计数器值不为0的低优先级活动队列的队首信元。
其中,输出调度模块始终为具有高优先级的活动队列(即有信元等待调度输出的高优先级队列)按SP(严格优先级)的要求提供最高调度优先权;按设定的预约带宽为各低优先级队列的赤字计数器赋值,当高优先级的队列为空(即处于非活动状态)时,对具有同等低优先级的各队列进行每轮次调度,即在赤字计数器不为0的活动队列间做RR(轮循)调度,队列每调度输出一个信元其赤字计数器减1,赤字计数器的值减到0的队列退出本轮次调度,直至所有队列的赤字计数器的值都减到0,则重新按设定的预约带宽为各队列的赤字计数器赋值,开始下一轮调度。
在本实施例中,在信元调度之前还包括,信元入队:接收信元,并根据信元类型和目的输出端口,将信元存储在其目的输出端口的同类型低优先级队列或高优先级队列中;
缓存管理:根据信元入队和出队情况更新对应的队列链表和空闲链表;
其中,信元入队和输出调度是两个独立的过程,缓存管理根据信元入队和出队情况更新对应的队列链表和空闲链表完成共享缓存的分配和回收。
本实施例中改进的DRR(赤字轮循)调度算法如图2所示,实现步骤如下:
步骤201,首先按照各队列需要的预约带宽为每个队列分配一个独立的服务量子(Qi);
步骤202,然后初始化各队列的赤字计数器(Dc_i)为Qi,赤字计数器的每个单位值均能调度一个信元。
在赤字计数器不为0的活动队列(即有信元等待调度输出的队列)间做RR(轮循)调度:每个活动队列每次调度输出一个信元,同时其赤字计数器减1。在定长信元的队列间实现了各队列信元的最大均衡调度输出。
步骤203和204,选择赤字计数器不为0活动队列i;调度输出活动队列i的队首信元,同时其赤字计数器减1。
步骤205、206和207,每个活动队列在每次调度结束时,如果队列的赤字计数器减到0或者队列从活动队列变为非活动队列(即没有信元等待调度输出的队列),则将该队列从本轮次调度中剔除;否则,执行步骤208。
步骤208,判断所有队列赤字计数器是否都为0,如果是,则本轮次调度结束,重新按设定的预约带宽为各队列的赤字计数器赋值,开始下一轮调度。所有队列中的赤字计数器不都为0,执行步骤209。
步骤209,按顺序选择下一个活动队列确定为下一个调度服务的队列,选至尾部则循环从头开始。
在赤字计数器不为0的活动队列间做RR(轮循)调度直至所有队列的赤字计数器都为0。
本实施例中的改进的DRR(赤字轮循)调度算法支持在运行过程中改变各队列的预约带宽:在执行完当前轮次的调度之后和开始下一轮次的调度之前,根据各队列被改变的预约带宽重新为每个队列分配服务量子并按新的服务量子为各赤字计数器赋值,即可从下一轮次调度开始,在保证新的预约带宽的条件下实现各队列信元最大均衡输出。
信元调度输出的另一实施例,请参阅图3。本实施例中,始终为具有高优先级的活动队列(即有信元等待调度输出的高优先级队列)按SP(严格优先级)的要求提供最高调度优先权;当高优先级的队列为空(即处于非活动状态)时,为具有同等低优先级的队列提供保证各队列预约带宽条件下的最大均衡调度输出。具体步骤如下:
步骤301、302,按照各低优先级队列需要的预约带宽为每个低优先级队列分配一个独立的服务量子(Qi),并初始化各低优先级队列的赤字计数器(Dc_i)为Qi,赤字计数器的每个单位值均能调度一个信元。
步骤303,开始调度,如果高优先级的队列非空,则连续调度输出高优先级队列的队首信元(步骤312),直至高优先级队列为空,才会选择服务低优先级队列。
步骤304-305,选中一个赤字计数器不为0的低优先级活动队列(即有信元等待调度输出的低优先级队列),调度输出该队列的队首信元,同时其赤字计数器减1。
步骤306-308,在本次服务的低优先级队列调度结束时,如果其赤字计数器减到0或者从活动队列变为非活动队列(即没有信元等待调度输出的队列),则将该队列从本轮次低优先级队列间的轮循调度中剔除。
步骤309-311,接着,判断是否所有低优先级队列的赤字计数器都为0:如果所有赤字计数器都已为0,则本轮次调度结束,重新按设定的预约带宽为各低优先级队列的赤字计数器赋值,开始下一轮调度;如果还有赤字计数器不为0,则每调度输出一个低优先级队列的队首信元,均需要判断高优先级队列是否非空,当高优先级队列处于活动状态(即有信元等待调度输出)时,则立即调度输出高优先级队列的队首信元,直至高优先级队列为空,才会按顺序继续选择下一个低优先级的活动队列确定为下一个调度服务的队列,选至尾部则循环从头开始。此步骤在低优先级队列间实现了各队列信元的最大均衡调度输出,同时保证了高优先级队列的最高的调度优先权和最小的调度延时。
信元调度装置的实施例,在本实施例中,信元调度装置包括输出调度模块,根据各低优先级队列需要的预约带宽为各低优先级队列分配服务量子Qi,并初始化低优先级队列的赤字计数器值为Qi。输出调度模块包括有与各输出端口对应的信元调度器,信元调度器调度输出高优先级队列的信元,并在高优先级队列为空时,轮循调度赤字计数器值不为0的低优先级队的队首信元,至轮循的低优先队列的赤字计数器值减到0。
本实施例信元调度装置还包括缓存管理模块和信元入队模块。缓存管理模块为各输出端口维护高优先级队列和低优先级队列,根据信元入队和出队更新队列链表和空闲链表。信元入队模块接收来自输入端口的信元,根据信元类型及目的输出端口确定对应高优先级队列或低优先级队列,并将信元存储在由所述缓存管理模块分配给对应的高优先级队列或低优先级队列的共享缓存地址中。
其中,缓存管理模块,根据信元入队和出队情况更新对应的队列链表和空闲链表:(1)信元入队模块根据信元类型及其目的输出端口确定信元应入队的队列号,空闲链表提供共享缓存地址给信元入队模块存储信元,同时更新该队列的队列链表,完成信元入队;(2)某个队列的信元被调度输出后,空闲链表回收共享缓存地址,同时更新该队列的队列链表,完成信元出队;
与各输出端口有对应的信元调度器是独立的,信元调度器首先判断高优先级的源路由队列是否活动(即是否有源路由信元等待调度输出),若源路由队列处于活动状态,信元调度器以最高调度优先权调度输出源路由队列的信元直至源路由队列为空(即处于非活动状态);若源路由队列处于非活动状态,信元调度器判断同等低优先级的单播队列和多播队列的赤字计数器状态,若二者均不为0,信元调度器轮流调度单播队列和多播队列的队首信元;每调度一个单播信元,单播队列赤字计数器减1,每调度一个多播信元,多播队列赤字计数器减1;直至单播队列赤字计数器或多播队列赤字计数器减到0,调度器再调度另一个赤字计数器不为0的队列直至其赤字计数器减到0;调度器重新为单播队列赤字计数器和多播队列赤字计数器按设定的预约带宽赋值,开始下一轮调度。
信元调度装置的另一实施例,请参阅图4所示。信元调度装置包括信元入队模块41负责接收信元,根据信元类型及其目的输出端口确定应入队的队列号,并将信元存储在由缓存管理模块42分配给该信元应入队队列的共享缓存地址中;缓存管理模块42根据信元入队和出队情况更新对应的队列链表和空闲链表;输出调度模块43包括各输出端口独立的信元调度器44,每个调度器44根据其端口内各队列的状态确定当前应调度的队列,并调度输出该队列的队首信元。
缓存管理模块42为每个输出端口维护3个队列:一个源路由信元队列,一个单播信元队列和一个多播信元队列。其中源路由信元队列为高优先级队列,单播信元队列和多播信元队列为同等低优先级队列。
信元入队模块41管理各输入端口输入的信元,并根据信元类型及目的输出端口号,确定信元应入队的队列号,将队列号发送给缓存管理模块42,缓存管理模块42的空闲链表为接收到的队列号提供一个空闲地址反馈给信元入队模块41将信元存储到共享缓存中,同时更新对应的队列链表,完成信元入队。
缓存管理模块42为输出调度模块43提供各个端口的源路由队列状态、单播队列状态和多播队列状态信息;并根据信元调度器44反馈的调度结果,提供被调度信元在共享缓存中的地址给输出调度模块43完成调度输出;信元被调度输出后,空闲链表回收共享缓存地址,同时更新对应的队列链表,完成信元出队。
在输出调度模块43中,各输出端口均有相互独立且互不干扰的信元调度器44。各信元调度器44根据缓存管理模块42为该端口维护的各队列状态,确定对应的输出端口当前应调度的队列,将调度结果发送给缓存管理模块42,并0根据缓存管理模块42反馈的被调度信元地址将信元调度输出。
信元调度器44首先判断高优先级的源路由队列是否处于活动状态(即是否有源路由信元等待调度输出),若源路由队列处于活动状态,信元调度器44以最高调度优先权调度输出源路由队列的信元直至源路由队列为空(即处于非活动状态);在源路由队列处于非活动状态下,调度器判断同等低优先级的单播队列和多播队列的赤字计数器状态,若二者均不为0,调度器轮流调度单播队列和多播队列的队首信元;每调度输出一个单播信元或多播信元,均需要判断源路由队列是否非空,若源路由队列非空,则立即调度输出源路由队列的队首信元,直至源路由队列为空,才会按顺序继续选择下一个多播或单播的活动队列并确定为下一个调度服务的队列,如此循环。信元调度器每调度一个单播信元,单播队列赤字计数器减1,每调度一个多播信元,多播队列赤字计数器减1;直至单播队列赤字计数器或多播队列赤字计数器减到0,信元调度器再调度另一个赤字计数器不为0的队列直至其赤字计数器减到0,进而重新为单播队列赤字计数器和多播队列赤字计数器按设定的预约带宽赋值,开始下一轮调度。
本实施例在单播队列和多播队列间实现了满足预约带宽的条件下,各队列信元的最大均衡输出,同时保证了源路由队列的最高调度优先权和最小调度延时,提高了对不同分组数据区别处理的能力,从而提高整个交换网络的性能。
上述说明示出并描述了本发明的一个优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。