一种结合整形的分级式队列调度方法
技术领域
本发明涉及数据通信技术领域,具体来讲是一种结合整形的分级式队列调度方法。
背景技术
随着网络应用的飞速发展,各种新型业务不断出现,各种网络数据量也越来越大,网络拥塞极为常见。对网络的Qos(Quality ofService,服务质量)性能提出了更高的、更差异化的要求。队列调度和整形正是Qos技术的关键。数据通信设备使用队列调度用于保证高优先级的业务流能够被优先调用,低优先级的业务流后被调用,或者使用队列调度使各种业务流按照各种配置的权重来被调度转发。使用队列整形则对某种业务的流量进行速率限制,使该业务的流量不至于占用过多的网络资源从而使其他业务的流量得不到保证。
所述队列调度的关键技术一般是采用SP(strict priority,严格优先级队列)或WRR(weighted round robin,加权公平队列),或者是两者的结合。其中,SP是将优先级高的队列优先调度发送,优先级低的队列只有在优先级高的队列空才会被发送;WRR为每个队列配置一个权值,各个队列按照权值发送数据包,要求高的队列分配较多的权值,要求低的队列分配较少的权值,这样能保证每个队列都能得到服务;SP与WRR结合则是将某些队列设置为SP模式,其余队列设置为WRR模式,在调度是首先发送SP队列,只有SP队列空时对其余队列按照WRR模式进行调度发送。
所述队列整形的关键技术一般是对每个队列采用单令牌桶算法整形或者双令牌桶算法整形。其中,单令牌桶算法通过配置令牌桶的填充速率和令牌桶的深度,将该队列的流量速率限制在填充速率下;双令牌桶算法则是采用均值令牌桶和峰值令牌桶,分别配置不同的填充速率和令牌桶深度,均值令牌桶的填充速率为该队列提供的最小保证带宽,峰值令牌桶的填充速率则对该队列进行最大带宽限制。
目前,现有的技术是将队列调度和整形独立使用,其步骤如下:
1、对各个队列的调度模式和权值,以及整形令牌桶的填充速率和最大深度进行配置;
2、队列模块根据队列调度模式和权值进行队列的调度选择,并从队列模块读取相应的数据包;
3、整形模块根据数据包的长度进行判断,若包长度小于令牌桶的令牌数则允许发送;否则退回到队列中。
这种技术独立使用的缺点在于:
1、队列调度选择进行调度的队列,并从队列中读取的数据包,如果在整形模块的长度判断时,判决为不允许通过,则会退回到该队列中,降低了调度效率,并增加了电路处理的复杂性。
2、在流量拥塞的情况下,若优先级高的队列在SP模式或WRR模式下配置的权值过大,就会长期占用调度机会,使优先级低的队列得不到调度机会,无法得到最小保证带宽。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种结合整形的分级式队列调度方法,可以提高数据包的调度效率,简化电路,并使每个队列的最小保证带宽得到保证。
为达到以上目的,本发明采取的技术方案是:一种结合整形的分级式队列调度方法,包括如下步骤:a.根据输入数据包的队列号,将数据包描述信息存放到相应的队列中,若数据包描述信息不为空,则存放该数据包描述信息的队列为激活状态,即为激活队列;b.为每个队列配置整形参数,包括双令牌桶中均值令牌桶的填充速率和最大深度、峰值桶的填充速率和最大深度、调度模式以及相应的权值;c.采用一个双令牌桶对每个队列的流量进行整形,令牌桶根据配置的填充速率定时注入令牌,并在调度一个包描述信息时将减去相应令牌桶的令牌数,确定该队列的流量整形状态;d.根据每个队列的整形状态、激活状态、配置的调度模式、配置权值,进行分级式的调度选择,选择进行调度的队列,并从选择的队列中读取一个数据包描述信息;e.根据所读取的数据包描述信息,将读取数据向下游发送。
在上述技术方案的基础上,若一个队列均值令牌桶的令牌数为正,则该队列的整形状态为状态1,表示该队列的流量没有达到最小保证带宽;若一个队列均值令牌桶的令牌数为负而峰值桶的令牌数为正,则该队列的整形状态为状态2,表示该队列的流量达到了最小保证带宽但没有超过最大限制带宽;若一个队列均值令牌桶的令牌数和峰值令牌桶的令牌数均为负,则该队列的整形状态为状态3,表示该队列的流量超过了最大限制带宽。
在上述技术方案的基础上,所述均值令牌桶的令牌注入数量由配置的均值令牌桶的填充速率决定,峰值令牌桶的令牌注入数量由配置的峰值令牌桶的填充速率决定。
在上述技术方案的基础上,所述分级式的调度依据为每个队列的整形状态及激活状态;其包含三个调度级别:状态1的激活队列调度优先级最高,首先对这个调度级别的激活队列进行调度;状态2的激活队列调度优先级其次,没有状态1的激活队列情况下,才对此级别的激活队列进行调度选择;状态3或没有激活的队列优先级最低,不会对此级别的激活队列进行调度选择。
在上述技术方案的基础上,若该队列的整形状态为状态1,则将均值令牌桶和峰值令牌桶的令牌数都减去数据包的长度;若该队列的整形状态为状态2,则只将峰值令牌桶的令牌数减去数据包的长度。
在上述技术方案的基础上,所述令牌桶中的令牌数允许为负,当峰值令牌桶的令牌数为负时,不会在对此队列进行包描述信息的调度操作。
在上述技术方案的基础上,所述队列中只有存在着数据包描述信息,才会进行调度选择,所述数据包描述信息至少包括该数据包的长度和在数据缓存中的地址。
在上述技术方案的基础上,所述队列均为一个先入先出队列结构,当一个队列进行调度时,从相应队列读取一个数据包描述信息。
在上述技术方案的基础上,所述均值令牌桶的填充速率决定其队列的最小保证带宽,峰值令牌桶的填充速率决定其队列的最大限制带宽。
本发明的有益效果在于:
第一、本发明采用与整形相结合的多级队列调度方式,对多个队列进行调度选择;队列整形采用双令牌桶算法,为每个队列给出整形的状态,再根据整形状态进行队列的调度选择,未达到最小保证带宽的队列优先获得调度机会,从而保证了每个队列的最小保证带宽,避免了优先级高的队列长期占用带宽的情况。
第二、将队列整形的状态反馈后,再进行调度选择,对于不符合最大限制带宽和非激活的队列,不会进行调度处理,从而避免一次调度的空操作,提高了调度效率,简化了电路。
附图说明
图1为本发明结合整形的分级式队列调度方法实施例的流程图;
图2为本发明中分级式的调度选择的流程图。
具体实施方式
以下对本发明作进一步详细说明。
本发明结合整形的分级式队列调度方法,包括如下步骤:
a.根据输入数据包的队列号,将数据包描述信息存放到相应的队列中,若数据包描述信息不为空,则存放该数据包描述信息的队列为激活状态,即为激活队列。
b.为每个队列配置整形参数,包括双令牌桶中均值令牌桶的填充速率和最大深度、峰值桶的填充速率和最大深度、调度模式以及相应的权值。
c.采用一个双令牌桶对每个队列的流量进行整形,令牌桶根据配置的填充速率定时注入令牌,并在调度一个包描述信息时将减去相应令牌桶的令牌数,确定该队列的流量整形状态。
d.根据每个队列的整形状态、激活状态、配置的调度模式、配置权值,进行分级式的调度选择,选择进行调度的队列,并从选择的队列中读取一个数据包描述信息。
e.根据所读取的数据包描述信息,将读取数据向下游发送。
下面结合具体实施例对本发明作进一步详细说明。
如图1所示,本实施例中的电路结构主要涉及四个模块,包括队列模块、队列整形模块、队列调度模块和发送模块。其方式流程如下所示:
101.队列模块根据输入数据包的队列号,将数据包描述信息存放到相应的队列中。所述每个队列都为一个FIFO(First Input FirstOutput,先入先出队列)结构,当选择一个队列进行调度时,队列模块从相应的队列读取一个数据包描述信息。若数据包描述信息不为空,则存放该数据包描述信息的队列为激活状态,即为激活队列。队列模块提供每个队列的激活状态,只有队列中存在着数据包描述信息,才会进行调度选择,所述数据包描述信息是从数据包中提取的特征字段以及相应描述组成,至少包括该数据包的长度和在数据缓存中的地址。
102.在队列整形模块中,为每个队列配置整形参数,双令牌包括均值令牌桶和峰值令牌桶,配置均值令牌桶的填充速率和最大深度,峰值令牌桶的填充速率和最大深度。
103.队列整形模块为采用一个双令牌桶每个队列的流量进行整形,令牌桶根据配置的填充速率定时注入令牌,并在调度一个包描述信息时将减去相应令牌桶的令牌数,确定该队列的流量整形状态。所述均值令牌桶的填充速率决定其队列的最小保证带宽,峰值令牌桶的填充速率决定其队列的最大限制带宽。
其中,若一个队列均值令牌桶的令牌数为正,则该队列的整形状态为状态1,即本实施例中为MinNotMet,表示该队列的流量没有达到最小保证带宽。若一个队列均值令牌桶的令牌数为负而峰值桶的令牌数为正,则该队列的整形状态为状态2,即本实施例中为MaxNotMet,表示该队列的流量达到了最小保证带宽但没有超过最大限制带宽。若一个队列均值令牌桶的令牌数和峰值令牌桶的令牌数均为负,则该队列的整形状态为状态3,即本实施例中为MaxExceed,表示该队列的流量超过了最大限制带宽,将不允许对该队列进行调度。
所述队列整形令牌桶的令牌数的更新,是根据令牌桶的填充速率定时向令牌桶中注入令牌数,其中均值令牌桶的令牌注入数量由配置的均值令牌桶的填充速率决定,峰值令牌桶的令牌注入数量由配置的峰值令牌桶的填充速率决定。当调度出一个队列的数据包描述时,根据该队列的整形状态队列令牌桶的整形状态对令牌桶的令牌数进行更新:若该队列的整形状态为MinNotMet,则将均值令牌桶和峰值令牌桶的令牌数都减去数据包的长度;若队列的整形状态为MaxNotMet,则只将峰值令牌桶的令牌数减去数据包的长度。所述令牌桶中的令牌数允许为负,当峰值令牌桶的令牌数为负时,不会在对此队列进行包描述信息的调度操作,这种方式避免了一次调度的空操作,从而提高了调度效率。
104.队列调度模块根据调度出的包描述信息,对该队列的其权值进行更新;根据每个队列的整形状态、激活状态、配置的调度模式、配置权值,进行分级式的调度选择,选择进行调度的队列,并从选择的队列中读取一个数据包描述信息。队列调度模块和队列模块之间进行读取请求信号、激活队列指示信号的交流。
所述队列调度模块采用分级式调度的依据为:每个队列的整形状态及激活状态。队列调度模块根据各个队列的整形状态和激活状态,将各个队列划分成三个调度级别:整形状态为MinNotMet的激活队列调度优先级最高,队列调度模块首先对这个调度级别的队列进行调度;整形状态为MaxNotMet的激活队列优先级其次,只有不存在整形状态为MinNotMet的激活队列情况下,才会对此级别的队列进行调度选择;整形状态为MaxExceed或没激活的队列的优先级最低,队列调度模块根本不会对这种队列进行调度选择。
如图2所示,分级式的调度选择为:首先判断是否存在队列整形状态为MinNotMet的激活队列,如果是,根据配置的调度算法从整形状态为MinNotMet的激活队列中选择一个队列进行调度,结束;如果否,再判断是否存在队列整形状态为MaxNotMet的激活队列,如果是,则根据配置的调度算法从整形状态为MaxNotMet的激活队列中选择一个队列进行调度,结束;如果再判断是否存在队列整形状态为MaxNotMet的激活队列的时候为否,直接结束。
105.根据所读取的数据包描述信息,将读取数据向下游发送。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。