基于带宽借用的动态队列调度装置及方法与流程

文档序号:12134399阅读:199来源:国知局
基于带宽借用的动态队列调度装置及方法与流程

本发明属于通信技术领域,更进一步涉及一种队列调度,可用于路由器以及交换机中。



背景技术:

队列调度技术广泛应用于路由器以及交换机中,它按照一定的服务规则对交换节点的不同输入业务流分别进行调度和服务,使所有的输入业务流能按预定的方式共享交换节点的输出链路带宽,是实现网络QoS保证和提高网络性能的一项关键技术。

目前现有的队列调度方法中,主要包括严格优先级调度SP,轮询调度RR,加权轮询调度WRR,加权公平调度WFQ等。其中:

SP调度方法,严格按照优先级的方式对队列进行调度,仅当高优先级没有分组时才会服务低优先级的队列,这会使得低优先级队列长时间得不到服务而饿死。RR方法以公平的方式轮询所有的队列,无法体现出不同优先级队列之间服务等级的不同。

WRR方法,根据每个队列的优先级,为每个队列分配不同的权值,使得高优先级的队列能够得到更好的服务,避免低优先级队列占用过多的网络带宽。但是由于WRR中每个队列的权重是固定分配的,无法随着业务到达情况动态调整,因此可能会导致链路利用率较低的情况,灵活性较差。

WFQ方法,按照每个队列的权重为每个队列分配带宽,并且按照虚拟完成时间递增的顺序为队列进行调度。该方法具有最好的公平性,但是需要计算每个分组的虚拟完成时间且进行排序,因此实现较为复杂,不适用于高速网络中。



技术实现要素:

本发明的目的在于克服上述现有队列调度技术的不足,提出一种基于带宽借用的动态队列调度装置及方法,以降低调度的复杂度和丢包率,提高链路带宽的利用率。

本发明的技术方案是这样实现的:

一.技术原理

本发明根据流分类模块的处理规则,将输入的各种业务流分类,并且将其分组进入不同的优先级队列中进行缓存。根据不同队列的优先级,为每个队列分配各自的带宽;按照优先级由高到低的顺序轮询不同优先级的队列,并且根据分配到的带宽值将队列中相应量的分组调度输出。

为避免轮询到某个队列时,该队列中的数据量小于为该队列分配的带宽而造成浪费带宽资源的现象,本发明实行带宽借用机制。在一个调度周期内,如果一个队列中的数据以及全部发送完毕,而为其分配的带宽资源尚未用尽,则将剩余的带宽累计至空闲带宽资源池中。当全部队列调度完毕后,空闲带宽资源池子中存储的空闲带宽配额能够用于调度本次调度周期内仍有数据包未输出的非空队列

二、技术方案

1.根据上述原理,本发明基于带宽借用的动态队列调度装置,包括:

CPU接口模块,用于在每一个调度周期开始时,通过读取CPU可配置的寄存器,得出为每个队列所分配的带宽配额;

带宽配额存储模块,用于存储为每个先入先出队列分配的带宽配额;

先入先出缓存队列模块,用于为每个业务流维护一个先入先出队列,缓存每条业务流到达的数据包;

调度器模块,用于根据带宽配额存储模块所存储的带宽配额,对每个队列按照优先级从高到低进行轮询调度,从轮询到的队列中取出相应带宽配额量的数据包输出。

带宽借用模块,用于存储每个调度周期内未用完的带宽配额,并且根据每个队列以往向其他队列借出带宽的情况,将空闲带宽资源池子模块中存储的空闲带宽配额分配给本次调度周期内仍有数据包未输出的非空队列。

2.根据上述原理,本发明基于带宽借用的动态队列调度方法,包括

1)为每个队列分配带宽配额:

1a)设系统提供的优先级有M种,每个优先级下有N个队列,共有M×N个队列;

1b)将优先级同为i的队列分为一组,令该队列组的编号为Qi,队列组Qi中第j个的队列的编号为Qi,j,设队列Qi,j的权重为wi,j,设当前时刻队列Qi,j的长度为Li,j,调度周期的时长为T,调度器总带宽为B;

1c)CPU根据队列的权重wi,j,为每个队列Qi,j分配带宽配额Bi,j,令将带宽配额Bi,j存储至CPU可配置的寄存器中;

1d)从CPU可配置的寄存器中读取每个队列所分配的带宽配额Bi,j,并将每个队列的带宽配额储至带宽配额存储模块中,带宽配额存储模块为每个队列Qi,j维护一个计数器DCi,j,初始化为DCi,j=Bi,jT;

2)按照优先级从高到低对各个队列进行轮询,将队列中的数据包调度输出;

2a)令i=1,j=1;

2b)轮询队列Qi,j,根据队列头部数据包的长度以及该队列剩余的带宽配额,判断是否能够将队列头部的数据包输出:

若队列Qi,j为空,则跳过该队列的轮询,并将该队列所剩余的带宽配额DCi,j累加到空闲带宽资源池模块中,令R表示空闲带宽资源池中的空闲带宽,得到更新后的空闲带宽为R+DCi,j,然后更新队列Qi,j的历史带宽借出数据,令Ci,j表示队列Qi,j在一个历史时间段内已借出的带宽,得到更新后的已借出带宽为Ci,j+DCi,j,执行步骤2c);

若队列Qi,j为非空,设队列Qi,j头部数据包的长度为Pi,j,如果DCi,j<Pi,j,则将该队列所剩余的带宽配额DCi,j累加到空闲带宽资源池中,并更新历史带宽借出数据,得到更新后的已借出带宽为Ci,j+DCi,j,执行步骤2c);如果DCi,j≥Pi,j,则令DCi,j-Pi,j,将队列头部数据包调度输出;继续轮询队列Qi,j,直到队列Qi,j为空,或者将带宽配额DCi,j用完,执行步骤2c);

2c)令当前的队列编号j加1,得到下一个队列的编号,判断下一个队列编号是否大于N,若大于N,则表明当前优先级队列组中的队列都轮询完毕,执行步骤2d),否则,返回步骤2b);

2d)令当前优先级的编号i加1,得到下一个优先级的编号,判断下一个优先级的编号是否大于M,若大于M,则表明所有队列都已经轮询完毕,执行步骤3),否则,返回步骤2b)。

3)空闲带宽借用:

3a)当所有队列都轮询完毕时,若空闲带宽资源池中有空闲带宽,则说明本次调度周期内,仍有带宽资源未被使用,则继续按照优先级从高到低继续对各个队列进行轮询,令i=1,j=1;

3b)对优先级为i的队列集合Qi进行轮询:

3b1)找出Qi中借出的带宽配额量Ci,j最大的队列Qi,j,判断该队列Qi,j是否为空:若为空,则将队列Qi,j移出集合Qi;若队列Qi,j为非空,则执行3b2);

3b2)判断队列头部数据包的长度Pi,j是否大于空闲带宽R:若是,则将队列Qi,j移出集合Qi,若不是,则令R-Pi,j,并将队列头部的数据包输出,更新队列Qi,j的历史带宽借出配额量Ci,j,得到更新后的历史带宽借出配额量为Ci,j-Pi,j

3b3)继续对队列集合Qi进行轮询,直到将空闲带宽R用完或者集合Qi为空,执行步骤3c);

3c)令i=i+1,若i>M,说明所有队列都已经轮询完毕,当前调周期结束,将空闲带宽资源池中的空闲带宽R置零,返回步骤1)开始新一轮调度,否则,返回步骤3b)。

本发明与现有技术相比具有如下优点:

第一,由于本发明装置的调度方法采用优先级由高到低轮询的方式对队列进行调度,在对某一队列进行轮询调度的时候,将该队列在本次轮询中尚未用完的带宽配额累加到空闲带宽资源池中,能够借用给调度本次调度周期内仍有数据包未输出的非空队列,使得输出端口总带宽能够得到充分的利用,减少了带宽资源浪费的情况,提高了带宽资源的利用率。

第二,由于本发明在带宽借用的时候,首先将空闲带宽借用给优先级较高的队列,在优先级相同的情况下,优先将带宽借用给一个历史时间段内,借出带宽较多的队列,使得本发明能够降低系统的总体丢包率,同时具备多队列间的公平性。

附图说明

图1为本发明装置的方框图;

图2为本发明基于带宽借用的动态队列调度方法的实现流程图;

图3为本发明方法中的队列调度示意图。

具体实施方式

下面结合附图以及具体的实例对本发明做进一步详细描述。

参照图1,本发明的装置包括:CPU接口模块1、带宽配额存储模块2、先入先出缓存队列模块3、调度器模块4和带宽借用模块5。其中:带宽借用模块5包括:空闲带宽资源池子模块51、历史数据统计子模块52和空闲带宽分配子模块53。

CPU接口模块1,在每一个调度周期开始时,通过读取CPU可配置的寄存器,得出为每个队列所分配的带宽配额;带宽配额存储模块2,将分配的带宽配额存储至RAM中;先入先出缓存队列模块3,为每个业务流维护一个先入先出队列,缓存每条业务流到达的数据包;调度器模块4,根据带宽配额存储模块所存储的带宽配额,对每个队列按照优先级从高到低进行轮询调度,从轮询到的队列中取出相应带宽配额量的数据包输出;空闲带宽资源池子模块51,将在一个调度周期内没有用完的带宽配额存储在资源池中,资源池中存储的带宽配额在每个调度周期开始时清空;历史数据统计子模块52,统计一个历史时间段内每个队列向其他队列借出的带宽配额量;空闲带宽分配子模块53,将空闲带宽资源池子模块中存储的空闲带宽配额分配给本次调度周期内仍有数据包未输出的非空队列。

参照图2,对本发明的队列调度方法,其实现步骤如下:

步骤1,为每个队列分配带宽配额。

1a)设系统提供的优先级有M种,每个优先级下有N个队列,共有M×N个队列;

1b)将M种优先级按照从高到低的顺序进行编号,编号为1,2,…,i,…,M,将编号为i的队列分为一组,i=1,2,…,M;令该队列组的编号为Qi,队列组Qi中第j个的队列的编号为Qi,j,j=1,2,…,N;设队列Qi,j的权重为wi,j,设当前时刻队列Qi,j的长度为Li,j,调度周期的时长为T,调度器总带宽为B;

1c)CPU根据队列的权重wi,j,为每个队列Qi,j分配带宽配额Bi,j为:将带宽配额Bi,j存储至CPU可配置的寄存器中;

1d)从CPU可配置的寄存器中读取每个队列所分配的带宽配额Bi,j,并将每个队列的带宽配额存储到RAM中;为每个队列Qi,j维护一个计数器DCi,j,初始化为DCi,j=Bi,jT;

步骤2,按照优先级从高到低对各个队列进行轮询,将队列中的数据包调度输出。

2a)令i=1,j=1;

2b)轮询队列Qi,j,根据队列头部数据包的长度以及该队列剩余的带宽配额,判断是否能够将队列头部的数据包输出:

若队列Qi,j为空,则跳过该队列的轮询,并将该队列所剩余的带宽配额DCi,j累加到空闲带宽资源池中,令R表示空闲带宽资源池中的空闲带宽,得到更新后的空闲带宽为R+DCi,j,然后更新队列Qi,j的历史带宽借出数据,令Ci,j表示队列Qi,j在一个历史时间段内已借出的带宽,得到更新后的已借出带宽为Ci,j+DCi,j,执行步骤2c);

若队列Qi,j为非空,设队列Qi,j头部数据包的长度为Pi,j,如果DCi,j<Pi,j,则将该队列所剩余的带宽配额DCi,j累加到空闲带宽资源池中,并更新历史带宽借出数据,得到更新后的已借出带宽为Ci,j+DCi,j,执行步骤2c);如果DCi,j≥Pi,j,则令DCi,j-Pi,j,将队列头部数据包调度输出;继续轮询队列Qi,j,直到队列Qi,j为空,或者将带宽配额DCi,j用完,执行步骤2c);

2c)令当前的队列编号j加1,得到下一个队列的编号,判断下一个队列编号是否大于N,若大于N,则表明当前优先级队列组中的队列都轮询完毕,执行步骤2d),否则,返回步骤2b);

2d)令当前优先级的编号i加1,得到下一个优先级的编号,判断下一个优先级的编号是否大于M,若大于M,则表明所有队列都已经轮询完毕,执行步骤3),否则,返回步骤2b)。

步骤3,空闲带宽借用。

当所有队列都轮询完毕时,若空闲带宽资源池中有空闲带宽,则说明本次调度周期内,仍有带宽资源未被使用,则继续按照优先级从高到低继续按如下步骤对各个队列进行轮询:

3a)令i=1,j=1;

3b)对优先级为i的队列集合Qi进行轮询:

3b1)找出Qi中借出的带宽配额量Ci,j最大的队列Qi,j,判断该队列Qi,j是否为空:若为空,则将队列Qi,j移出集合Qi;若队列Qi,j为非空,则执行3b2);

3b2)判断队列头部数据包的长度Pi,j是否大于空闲带宽R:若是,则将队列Qi,j移出集合Qi,若不是,则令R-Pi,j,并将队列头部的数据包输出,更新队列Qi,j的历史带宽借出配额量Ci,j,得到更新后的历史带宽借出配额量为Ci,j-Pi,j

3b3)继续对队列集合Qi进行轮询,直到将空闲带宽R用完或者集合Qi为空,执行步骤3c);

3c)令当前优先级的编号i加1,得到下一个优先级的编号,判断下一个优先级的编号是否大于M,若大于M,则表明所有队列都已经轮询完毕,当前调周期结束,将空闲带宽资源池中的空闲带宽R置零,返回步骤1)开始新一轮调度,否则,返回步骤3b)。

实施例:

参照图3,通过一个具体实例对本发明作进一步描述。在本实例中,系统提供的优先级共有3种,每个优先级下有一个队列,第1队列的权重为w1,1=4,第2队列的权重为w2,1=2,第3队列的权重为w3,1=1,系统的总带宽B=100Mbps,调度周期T=1ms。

步骤1,为每个队列分配带宽配额;

CPU根据队列的权重,按比例为队列分配的带宽配额,得到第1队列的带宽配额为B1,1=56Mbps,第2队列的带宽配额B2,1=30Mbps,第3队列的带宽配额B3,1=14Mbps。带宽配额存储模块为每个队列维护一个计数器并计算计数器的初始值,得到第1队列的计数器值为DC1,1=56kb,第2队列的计数器值为DC2,1=30kb,第3队列的计数器值为DC3,1=14kb。

步骤2,按照优先级从高到低对各个队列进行轮询,将队列中的数据包调度输出。

首先,轮询第1队列,第1队列的长度为30kb,分配的带宽配额为56kb,因此可以将第1队列中的数据全部输出,当第1队列中的数据包都输出后,还剩余的带宽配额为26kb,则将剩余的带宽配额存储至空闲带宽资源池中;

然后,轮询第2队列,第2队列的长度为20kb,分配的带宽配额为30kb,因此可以将第2队列中的数据全部输出,当第2队列中的数据包都输出后,还剩余的带宽配额为10kb,则将剩余的带宽配额存储至空闲带宽资源池中;

最后,轮询第3队列,第3队列的长度为40kb,分配的带宽配额为14kb,不足以将队列中的输出全部输出,当第3队列的带宽配额用尽后,第3队列仍然剩余26kb的数据未输出。

步骤3,空闲带宽借用。

当一次轮询结束后,空闲带宽资源池中共有36kb的剩余带宽,则说明本次调度周期内,仍有带宽资源未被使用,这些带宽能够借用给调度本次调度周期内仍有数据包未输出的非空队列,则继续按照优先级从高到低对各个队列进行轮询;

首先,轮询第1队列,此时第1队列为空,跳过该队列的轮询;

然后,轮询第2队列,此时第2队列为空,跳过该队列的轮询;

最后,轮询第3队列,第3队列剩余26kb的数据未输出,剩余带宽配额为36kb,因此可以将队列中的数据全部输出;

3个队列都已经轮询完毕后,则当前调周期结束,再将空闲带宽资源池中的空闲带宽R置零,返回步骤1开始新一轮调度周期。

以上描述仅是本发明的一个具体实例,不构成对本发明的任何限制,显然对于本领域的专业人员来说,在了解本发明内容和原理后,都可能在不背离本发明原理、结构的情况下,进行形式上的各种修正和改变,但是这些基于本发明思想的修正和改变仍在本发明的权利要求保护范围之内。

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