CN102271093A - 一种公平性好效率高的动态轮询分组调度方法 - Google Patents
一种公平性好效率高的动态轮询分组调度方法 Download PDFInfo
- Publication number
- CN102271093A CN102271093A CN201110271188XA CN201110271188A CN102271093A CN 102271093 A CN102271093 A CN 102271093A CN 201110271188X A CN201110271188X A CN 201110271188XA CN 201110271188 A CN201110271188 A CN 201110271188A CN 102271093 A CN102271093 A CN 102271093A
- Authority
- CN
- China
- Prior art keywords
- data flow
- round
- grouping
- send
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种公平性好效率高的动态轮询分组调度方法。它包括以下步骤:初始化;入队列排队过程;出队列调度过程。出队列调度过程中按照轮询的方式根据数据流的P值进行发送。本发明中数据流的P值依赖于前一个轮次中各个数据流的发送情况进行计算,从而使在一个轮次中获得很少服务的数据流会在下一个轮次中给予更多的服务机会,这样就保证数据流之间比较好的公平性。本发明提高了分组调度的效率,公平地分配输出链路的带宽资源,减少拥塞和降低分组丢失率,并具有较低的复杂度,同时,硬件实现也很简单。
Description
技术领域
本发明属于网络通信技术领域,具体来说涉及一种公平性好、效率高的动态轮询分组调度方法。
背景技术
随着互联网的发展,网络上提供的服务越来越丰富,除了传统的尽力而为(Best-effort)服务,以视频会议、网络电话、远程医疗服务等为代表的许多业务都已在互联网上开展,可以预见,将来还会有更多的业务通过互联网实现。不同的业务具有不同的特征,也会有不同的质量要求,如视频会议对带宽和端到端时延有要求,而传统的数据业务却没有明显的QoS(Quality of Service)要求。因此,即使传输媒介的可靠性、传输速率都有了大幅度的提高,但仍然需要有相应的区分机制来保证不同业务流的QoS要求。
对于如何提供QoS支持,已经提出了许多相关的算法和方法,分组调度就是其中最重要的方法之一,也是通信网络QoS体系结构中一个很重要的组成部分。分组调度的任务是按怎样的顺序将到达网络节点的数据分组通过输出链路传送出去,网络的交换节点都要依赖分组调度方法来对到达该节点的所有分组进行缓存、调度和输出,实现对不同类型的业务流提供有区别的服务,进而提供相应的QoS保障。如果不进行分组调度,就是传统路由器所采用的先来先服务(First Come First Serve)机制,平等地对待所有的业务流。
分组调度方法主要分为两大类:基于时间戳(Time-stamp)的方法和基于轮询(Round-robin)的方法。时间戳调度方法的基本思想是为每个分组维持两个时间戳,标明其开始服务和结束服务的时间, 然后对时间排序,选择具有最小结束服务时间的分组发送。这类方法有WFQ(Weighted Fair Queuing)、WF2Q(Worst-case Fair Weighted Fair Queuing)、VC(Virtual Clock) 、SCFQ(Self-Clocked Fair Queuing)等,它们都具有良好的时延性能和公平性。但是,由于要涉及到对系统中每个分组时间的排序计算,这类方法的时间复杂度至少为O(logN)(N 为系统中活动业务流的数目),当业务流的数目较大时(成千上万),其时间复杂度也较高,不利于硬件实现,因此,这类方法在实际应用中受到了极大的限制,不适合应用在高速网络设备中。举个例子,10Gbps的链路传送一个长度为100字节的分组大概需要0.08微妙,这意味着复杂度为O(logN)的调度器需要在0.08微妙时间内完成分组的选择,不管业务流的数量有多少都要达到这个要求,否则就会影响数据的传输速度。如果输出链路的容量达到40Gbps或更高,情况会变得更糟,这样的调度方法会严重影响到高速网络设备的性能。
轮询类调度方法的基本思想是调度器循环地对每个业务流的队列进行轮流服务来发送队列中的分组,不需要对系统中的每个业务流维持一个时间戳,大多具有O(1)的时间复杂度,且实现简单,比较适合在高速网络中使用,如DRR (Deficit Round Robin)就是典型的轮询调度方法。但DRR有以下一些不足:(1)只能提供长时间尺度的公平性, 从短时间尺度来看, 它会导致数据流的输出有很大的突发性;(2)时延特性也不理想,有的队列可能长时间得不到服务;(3)DRR给每个队列分配一个定额值(Quantum),并通过DC(Deficit Counter)来衡量过去的不公平性,只有当一个队列首部的分组长度小于定额值与DC的和值时才会发送此分组,这就要求发送分组前必须知道分组的长度,增加了实现的开销。因此,减小数据流输出的突发性、改善时延特性、降低实现开销是现阶段轮询类分组调度方法中需要解决的问题。
发明内容
为了解决上述分组调度方法存在的技术问题,本发明提供一种公平性好、效率高的动态轮询分组调度方法。本发明不仅具有更好的公平性和时延特性,而且发送分组前不需要知道分组的长度。
本发明解决上述技术问题的技术方案包括以下步骤:
分组调度模块进行初始化,将活动数据流列表的初值赋值为空列表;访问数据流计数器的初值赋值为0;
入队列排队过程,当一个新的分组到达时,进入到与它所属数据流对应的队列中,等候发送;当所属的数据流加入到活动数据流列表时,给数据流的P值的初值置0,字节数计数器置0,所述数据流的P值为一个数据流在一个轮次中所允许发送的分组字节数,其计算为数据流下一轮次的P值=所述数据流本轮次P值+本轮次其他数据流平均发送的分组字节数-所述数据流本轮次发送的字节数;
出队列调度过程,出队列调度过程包括以下步骤:
(1)当活动数据流列表为空时,分组调度模块进入等待分组到达的状态;否则,访问数据流计数器的值等于活动数据流列表中数据流的个数;
(2)选择活动数据流列表中的第一个数据流,将这个数据流所对应的队列中的第一个分组从输出链路发送出去;将所发送出去分组的字节数累加到所述数据流的字节数计数器;
(3)判断所选数据流的队列是否为空,如果是,将该数据流从活动数据流列表中删除,执行步骤(7);否则,继续;
(4)判断所选数据流的P值减去本轮次中所发送出去的分组的长度和是否大于0,如果是,继续;否则,执行步骤(6);
(5)继续发送所选队列中的下一个分组;将所发送出去分组的字节数累加到所述数据流的字节数计数器;执行步骤(3);
(6)将所选择的数据流移到活动数据流列表的尾部;
(7)访问数据流计数器减1;
(8)判断访问数据流计数器是否为0,如果是,继续;否则,执行步骤(2);
(9)计算活动数据流列表中每个数据流的下一个轮次的P值;将活动数据流列表中每个数据流的字节数计数器置为0;
(10)执行步骤(1)。
本发明的技术效果在于:本发明中一个数据流在一个轮次中所允许发送的字节数,即一个数据流的P值,不是对所有的轮次都是固定不变的,而是依赖于前一个轮次中各个数据流的发送情况进行计算,从而使在一个轮次中获得很少服务(发送的字节数很少)的数据流会在下一个轮次中给予更多的服务机会,这样就保证数据流之间比较好的公平性。(2)本发明只要一个数据流的队列不为空,那么在每一个轮次中,这个数据流至少都有一个分组被发送到输出链路,这样就避免了数据流长时间得不到服务的情况。(3)在调度方法的入队列排队过程中,包括分组加入到队列、数据流添加到活动数据流列表中、给变量赋初值等操作,这些操作都可以在O(1)的时间复杂度中完成。在调度方法的出队列调度过程中,包括了发送分组、从活动数据流列表的首部移出一个数据流、在活动数据流列表的尾部添加一个数据流、更新变量的值等操作,这些操作都可以在常数时间内完成,这样降低了复杂度,并且容易实现。
综上所述,本发明提高了分组调度的效率,公平地分配输出链路的带宽资源,减少拥塞和降低分组丢失率,并具有较低的复杂度,同时,硬件实现也很简单。
附图说明
图1 本发明中数据流、队列、分组调度模块、输出链路之间的关系示意图。
图2 本发明实施例中,数据流及其队列的示意图。
图3 本发明实施例中,第1轮次的分组调度情形示意图,从左至右的内容是数据流标识、数据流本轮次的P值、发送的分组、数据流下一个轮次的P值计算(图4、图5、图6的内容与图3相同,除了图6中没有数据流下一个轮次的P值计算)。
图4 本发明实施例中,第2轮次的分组调度情形示意图。
图5 本发明实施例中,第3轮次的分组调度情形示意图。
图6 本发明实施例中,第4轮次的分组调度情形示意图。
图7 本发明中入队列排队过程流程图。
图8 本发明中出队列调度过程流程图。
具体实施方式
在结合实施例说明本发明所提供的动态轮询分组调度方法之前,首先对相关概念和参数进行说明。
本发明中,定义一个数据流是活动的(Active),当这个数据流的分组正在出队列调度过程中被访问,或者这个数据流对应的队列非空。为了描述本发明所述的分组调度方法,将所有活动的数据流放在一个列表中,这个列表称为活动数据流列表。定义一个轮次(Round)是某一时刻T1(T1>0),活动数据流列表中所包含的数据流被分组调度模块访问的过程。在本轮次执行过程中,新到达的或重新成为活动的数据流可以加入到活动数据流列表的尾部,但将从下一轮次开始被访问。
本发明中,为了表示一个轮次中所需要访问的数据流的数目,采用计数器记录数据流的数目,这个计数器称为访问数据流计数器,表示在一个轮次开始时活动数据流列表中数据流的数量。每当分组调度模块访问一个数据流,访问数据流计数器就减少1,当访问数据流计数器最终等于0时,就说明这个轮次结束。
本发明中,将一个数据流在一个轮次中所允许(Permission)发送的分组字节数称为这个数据流的P值。P值不是固定不变的,除了数据流的第1个轮次的P值为初值0外,其余轮次的P值都需要通过重新计算得到。计算方法是:所述数据流下一轮次的P值=所述数据流本轮次P值+本轮次其他数据流平均发送的分组字节数-所述数据流本轮次发送的字节数。
所述的动态轮询分组调度方法,用一个计数器记录一个数据流在一个轮次中总共发送出去的分组字节数,这个计数器称为字节数计数器,每个数据流都有一个字节数计数器。在一个轮次开始前,字节数计数器的初值为0,然后每发送一个分组,就将分组的字节数累加到对应数据流的字节数计数器。
所述的动态轮询分组调度方法,初始化过程中对分组调度模块进行初始化操作,包括初始化活动数据流列表和访问数据流计数器。
所述的动态轮询分组调度方法,入队列排队过程是指当一个新的分组到达时,进入到与它所属数据流对应的队列中,等候发送。如果该分组所属的数据流不在活动数据流列表中,则将该分组所属的数据流加入到活动数据流列表的尾部;设置该数据流的P值为初值0;设置该数据流的字节数计数器为初值0。本发明所提供的轮询分组调度方法中,数据流、队列、分组调度模块、输出链路之间的关系如图1所示。有n(n为大于0的自然数)个数据流1共享一条输出链路5,每一个数据流的分组在发送到输出链路5之前,进入到数据流所对应的队列2,等候发送。分组调度模块3使用本发明的分组调度方法4来调度分组的传送,使输出链路5的带宽资源得到公平分配,减少拥塞、降低分组丢失率。
如果数据流-1是“活动的”,那么数据流-1需要满足两个条件中的一个。第一条件是,数据流-1对应的队列-1非空;第二个条件是,数据流-1有分组正在被访问,并将发送到输出链路5。第二个条件的含义是,虽然数据流-1对应的队列-1中已经没有分组,但数据流-1有分组正在被访问,在该分组被发送到输出链路5之前,数据流-1仍然是活动的。只有当数据流-1的所有分组都已被经过输出链路5发送出去,并且没有新的分组到达时,数据流-1才成为“非活动的”。
为了表述更直观,用ActiveFlowList表示活动数据流列表,是所有活动的数据流的列表。当一个数据流由活动的变成非活动的时,该数据流将从ActiveFlowList中移走。当一个数据流由非活动的变成活动的时,该数据流将加入到ActiveFlowList的尾部。
一个轮次中数据流的确定:现考虑轮次1的开始时间是T1,结束时间是T2(T2>T1)。在T1时刻,ActiveFlowList中包含数据流-1、数据流-2、数据流-3等三个数据流,那么在轮次1,分组调度模块将访问上述的三个数据流。在T1、T2之间,数据流-4变成活动的并加入到了ActiveFlowList,但分组调度模块不会在轮次1访问数据流-4,因为数据流-4在轮次1开始时刻T1不在ActiveFlowList中。定义轮次2在T2时刻开始,在轮次2中,分组调度模块将访问T2时刻ActiveFlowList中的数据流,即访问数据流-1、数据流-2、数据流-3、数据流-4。另外,第几轮次是相对于某个数据流来讲的,如从T2开始的轮次,对于数据流-1、数据流-2、数据流-3来说,是第2轮次,但对于数据流-4来说,是第1轮次。
为了表述更直观,用VisitFlowCount表示访问数据流计数器,是在一个轮次开始时ActiveFlowList列表中数据流的数量。每当分组调度模块完成对一个数据流的访问,VisitFlowCount就减少1,当VisitFlowCount最终等于0时,就说明这个轮次结束。
一个数据流的P值:是一个数据流在一个轮次中所允许发送的分组的字节数量。在第r(r为大于0的自然数)个轮次中数据流-i(1≤i≤n,i为自然数)所允许发送的分组字节数,记为Pi(r)。
为了表述更直观,用Send表示字节数计数器,是一个数据流在一个轮次中所发送的字节数。用Send i表示数据流-i的字节数计数器;用Send i(r)表示在第r轮次中从数据流-i的队列中发送出去的分组字节数。
Average Count(AC):对数据流-i来说,AC表示从第r(r≥2)个轮次开始,除了数据流-i之外的其余数据流在前一个轮次r-1所发送的平均字节数,记为ACi(r-1)。如果第r-1轮次总共有n个流,则ACi(r-1)= [Send 1(r-1)+…+ Send i-1(r-1)+ Send i+1(r-1)+…+ Send n(r-1)]/(n-1),当不能整除时,取不小于商的整数,即商的整数部分+1。
一个数据流P值的计算:当r=1时,数据流-i的P值Pi(1)=0;当r>1时,Pi(r)= Pi(r-1)+ ACi(r-1)- Send i(r-1)。
下面结合实施例来说明本发明所提供的动态轮询分组调度方法,实施例中有三个数据流:数据流-1包含4个分组,数据流-2包含7分组,数据流-3包含6个分组,分组的排列及分组的长度(本实施例中以字节为单位,如果分组大小是以其他的单位来衡量,本发明同样适用,亦属于本发明所涵盖范围之内)如图2所示,左边的分组比右边的分组先期到达。
一、初始化过程
这是分组调度模块进行初始化的过程,包括以下一些操作:
ActiveFlowList的初值赋值为空列表;
VisitFlowCount的初值赋值为0。
二、入队列排队过程
当一个数据流的分组到达分组调度模块时,进入到所述数据流的队列中排队,等候发送。如图2所示,本实施例中,数据流-1的4个分组已经进入到数据流-1的队列中,数据流-2的7个分组已经进入到数据流-2的队列中,数据流-3的6个分组已经进入到数据流-3的队列中。
与此同时,由于数据流-1、数据流-2、数据流-3等三个数据流的队列都非空,所以,数据流-1、数据流-2、数据流-3都是“活动的”,三个数据流都加入到ActiveFlowList中,于是,ActiveFlowList={数据流-1,数据流-2,数据流-3}。
数据流-1、数据流-2、数据流-3三个数据流的P值赋初值为0,即当数据流-i加入到ActiveFlowList中时,Pi=0,1≤i≤n,本实施例中n=3;
ACi的初值赋值为0,1≤i≤n,本实施例中n=3;
Send i的初值赋值为0,1≤i≤n,本实施例中n=3。
入队列排队过程的流程如图7所示。
三、出队列调度过程
分组调度模块开始对ActiveFlowList中数据流进行访问,从队列中选取分组并将分组从输出链路发送出去。
开始时,首先判断ActiveFlowList是否为空集,本实施例中,ActiveFlowList={数据流-1,数据流-2,数据流-3},非空。这时,VisitFlowCount=ActiveFlowList中数据流的个数=3,进入三个数据流的第1轮次:
因为此时数据流-1是ActiveFlowList中的第一个数据流,所以对数据流-1的队列进行操作,选择数据流-1队列中的第一个分组从输出链路发送出去;分组的长度为20,所以Send1=0+20=20;判断P1-Send1是否大于0,P1-Send1=0-20=-20小于0,于是不再发送数据流-1队列中的下一个分组,并将数据流-1移到ActiveFlowList的尾部,这时,ActiveFlowList={数据流-2,数据流-3,数据流-1};VisitFlowCount=3-1=2。
继续对ActiveFlowList中的第一个数据流即数据流-2进行操作,选择数据流-2队列中的第一个分组从输出链路发送出去;分组的长度为10,所以Send2=0+10=10;判断P2-Send2是否大于0,P2-Send2=0-10=-10小于0,于是不再发送数据流-2队列中的下一个分组,并将数据流-2移到ActiveFlowList的尾部,这时,ActiveFlowList={数据流-3,数据流-1,数据流-2};VisitFlowCount=2-1=1。
继续对ActiveFlowList中的第一个数据流即数据流-3进行操作,选择数据流-3队列中的第一个分组从输出链路发送出去;分组的长度为15,所以Send3=0+15=15;判断P3-Send3是否大于0,P3-Send3=0-15=-15小于0,于是不再发送数据流-3队列中的下一个分组,并将数据流-3移到ActiveFlowList的尾部,这时,ActiveFlowList={数据流-1,数据流-2,数据流-3};VisitFlowCount=1-1=0。
VisitFlowCount=0说明轮次1已经结束,于是计算ActiveFlowList中每个数据流下一个轮次即轮次2的P值,数据流-1在轮次2的P值为P(2)=0+13-20=-7,数据流-2在轮次2的P值为P(2)=0+18-10=8,数据流3在轮次2的P值为P(2)=0+15-15=0;并将每个数据流-i的Send i置为0,1≤i≤n,本实施例中n=3;第1轮次的分组调度情形如图3所示,图的右边显示的是下一轮次P值的计算。
下面进入第2轮次:
ActiveFlowList={数据流-1,数据流-2,数据流-3},VisitFlowCount=ActiveFlowList中数据流的个数=3。
首先对数据流-1进行操作,选择数据流-1队列中的第一个分组从输出链路发送出去;分组的长度为15,所以Send1=0+15=15;判断P1-Send1是否大于0,P1-Send1=-7-15=-22小于0,于是不再发送数据流-1队列中的下一个分组,并将数据流-1移到ActiveFlowList的尾部,这时,ActiveFlowList={数据流-2,数据流-3,数据流-1};VisitFlowCount=3-1=2。
对数据流-2进行操作,选择数据流-2队列中的第一个分组从输出链路发送出去;分组的长度为5,所以Send2=0+5=5;判断P2-Send2是否大于0,P2-Send2=8-5=3大于0,于是继续发送数据流-2队列中的下一个分组,分组的长度为5,Send2=5+5=10;判断P2-Send2是否大于0,P2-Send2=8-10=-2小于0,于是不再发送数据流-2队列中的下一个分组,并将数据流-2移到ActiveFlowList的尾部,这时,ActiveFlowList={数据流-3,数据流-1,数据流-2};VisitFlowCount=2-1=1。
对数据流-3进行操作,选择数据流-3队列中的第一个分组从输出链路发送出去;分组的长度为3,所以Send3=0+3=3;判断P3-Send3是否大于0,P3-Send3=0-3=-3小于0,于是不再发送数据流-3队列中的下一个分组,并将数据流-3移到ActiveFlowList的尾部,这时,ActiveFlowList={数据流-1,数据流-2,数据流-3};VisitFlowCount=1-1=0。
VisitFlowCount=0说明轮次2已经结束,于是计算VisitFlowCount中每个数据流下一个轮次即轮次3的P值,数据流-1在轮次3的P值为P(3)=-7+7-15=-15,数据流-2在轮次3的P值为P(3)=8+9-10=7,数据流3在轮次3的P值为P(3)=0+13-3=10;并将每个数据流-i的Send i置为0,1≤i≤n,本实施例中n=3;第2轮次的分组调度情形如图4所示。
下面进入第3轮次:
ActiveFlowList={数据流-1,数据流-2,数据流-3},VisitFlowCount=ActiveFlowList中数据流的个数=3。
首先对数据流-1进行操作,选择数据流-1队列中的第一个分组从输出链路发送出去;分组的长度为8,所以Send1=0+8=8;判断P1-Send1是否大于0,P1-Send1=-15-8=-23小于0,于是不再发送数据流-1队列中的下一个分组,并将数据流-1移到ActiveFlowList的尾部,这时,ActiveFlowList={数据流-2,数据流-3,数据流-1};VisitFlowCount=3-1=2。
对数据流-2进行操作,选择数据流-2队列中的第一个分组从输出链路发送出去;分组的长度为6,所以Send2=0+6=6;判断P2-Send2是否大于0,P2-Send2=7-6=1大于0,于是继续发送数据流-2队列中的下一个分组,分组的长度为9,Send2=6+9=15;判断P2-Send2是否大于0,P2-Send2=7-15=-8小于0,于是不再发送数据流-2队列中的下一个分组,并将数据流-2移到ActiveFlowList的尾部,这时,ActiveFlowList={数据流-3,数据流-1,数据流-2};VisitFlowCount=2-1=1。
对数据流-3进行操作,选择数据流-3队列中的第一个分组从输出链路发送出去;分组的长度为7,所以Send3=0+7=7;判断P3-Send3是否大于0,P3-Send3=10-7=3大于0,于是继续发送数据流-3队列中的下一个分组,分组的长度为2,Send3=7+2=9;判断P3-Send3是否大于0,P3-Send3=10-9=1大于0,于是继续发送数据流-3队列中的下一个分组,分组的长度为11,Send3=9+11=20;判断P3-Send3是否大于0,P3-Send3=10-20=-10小于0,于是不再发送数据流-3队列中的下一个分组,并将数据流-3移到ActiveFlowList的尾部,这时,ActiveFlowList={数据流-1,数据流-2,数据流-3};VisitFlowCount=1-1=0。
VisitFlowCount=0说明轮次3已经结束,于是计算ActiveFlowList中每个数据流下一个轮次即轮次4的P值,数据流-1在轮次4的P值为P(4)=-15+18-8=-5,数据流-2在轮次4的P值为P(4)=7+14-15=6,数据流3在轮次4的P值为P(4)=10+12-20=2;并将每个数据流-i的Send i置为0,1≤i≤n,本实施例中n=3;第3轮次的分组调度情形如图5所示。
下面进入第4轮次:
ActiveFlowList={数据流-1,数据流-2,数据流-3},VisitFlowCount=ActiveFlowList中数据流的个数=3。
首先对数据流-1进行操作,选择数据流-1队列中的第一个分组从输出链路发送出去;分组的长度为5,所以Send1=0+5=5;由于这时数据流-1的队列中已经没有分组,数据流-1变成非活动的,所以将数据流-1从ActiveFlowList中删除,于是ActiveFlowList={数据流-2,数据流-3};VisitFlowCount=3-1=2。
对数据流-2进行操作,选择数据流-2队列中的第一个分组从输出链路发送出去;分组的长度为4,所以Send2=0+4=4;判断P2-Send2是否大于0,P2-Send2=6-4=2大于0,于是继续发送数据流-2队列中的下一个分组,分组的长度为6,Send2=4+6=10;由于这时数据流-2的队列中已经没有分组,数据流-2变成非活动的,所以将数据流-2从ActiveFlowList中删除,于是ActiveFlowList={数据流-3};VisitFlowCount=2-1=1。
对数据流-3进行操作,选择数据流-3队列中的第一个分组从输出链路发送出去;分组的长度为8,所以Send3=0+8=8;由于这时数据流-3的队列中已经没有分组,数据流-3变成非活动的,所以将数据流-3从ActiveFlowList中删除,于是ActiveFlowList={};VisitFlowCount=1-1=0。
VisitFlowCount=0说明轮次4已经结束,由于ActiveFlowList中已没有数据流,所以不需要进行计算数据流下一轮次的P值及将数据流的Send置0等操作。第4轮次的分组调度情形如图6所示。
继续执行,由于ActiveFlowList已为空集,即此时已没有数据流的队列需要调度,因此,分组调度模块进入等待分组到达的状态。
如上所述的实施例分组调度过程,只是描述了在给定实施例的情况下,执行本发明所述的动态轮询分组调度方法的开始的4个轮次。本发明所述的分组调度方法,对数据流数量、轮次的多少是没有限制的,一旦有数据流变成活动的,分组调度模块还将继续往下执行分组调度。出队列调度过程的流程如图8所示。
以上实施例说明的就是本发明所提供的一种动态轮询分组调度方法的具体实施方式。本发明所提供的分组调度技术具有以下优点:(1)一个数据流在一个轮次中所允许发送的字节数,即一个数据流的P值,不是对所有的轮次都是固定不变的,而是依赖于前一个轮次中各个数据流的发送情况进行计算。一般来讲,在一个轮次中获得很少服务(发送的字节数很少)的数据流会在下一个轮次中给予更多的服务机会。这样就保证数据流之间比较好的公平性。(2)只要一个数据流的队列不为空,那么在每一个轮次中,这个数据流至少都有一个分组被发送到输出链路。这样就避免了数据流长时间得不到服务的情况。(3)在调度方法的入队列排队过程中,包括分组加入到队列、数据流添加到ActiveFlowList中、给变量(Pi、ACi、Sendi)赋初值等操作,这些操作都可以在O(1)的时间复杂度中完成。在调度方法的出队列调度过程中,包括了发送分组、从ActiveFlowList的首部移出一个数据流、在ActiveFlowList的尾部添加一个数据流、更新变量(VisitFlowCount、Sendi、Pi)的值等操作,这些操作都可以在常数时间内完成。因此,本发明所提供的动态轮询分组调度方法复杂度低、效率高、容易实现。
Claims (1)
1.一种公平性好效率高的动态轮询分组调度方法,包括以下步骤:
分组调度模块进行初始化,将活动数据流列表的初值赋值为空列表;访问数据流计数器的初值赋值为0;
入队列排队过程,当一个新的分组到达时,进入到与它所属数据流对应的队列中,等候发送;当所属的数据流加入到活动数据流列表时,给数据流的P值的初值置0,字节数计数器置0,所述数据流的P值为一个数据流在一个轮次中所允许发送的分组字节数,其计算为数据流下一轮次的P值=所述数据流本轮次P值+本轮次其他数据流平均发送的分组字节数-所述数据流本轮次发送的字节数;
出队列调度过程,出队列调度过程包括以下步骤:
(1)当活动数据流列表为空时,分组调度模块进入等待分组到达的状态;否则,访问数据流计数器的值等于活动数据流列表中数据流的个数;
(2)选择活动数据流列表中的第一个数据流,将这个数据流所对应的队列中的第一个分组从输出链路发送出去;将所发送出去分组的字节数累加到所述数据流的字节数计数器;
(3)判断所选数据流的队列是否为空,如果是,将该数据流从活动数据流列表中删除,执行步骤(7);否则,继续;
(4)判断所选数据流的P值减去本轮次中所发送出去的分组的长度和是否大于0,如果是,继续;否则,执行步骤(6);
(5)继续发送所选队列中的下一个分组;将所发送出去分组的字节数累加到所述数据流的字节数计数器;执行步骤(3);
(6)将所选择的数据流移到活动数据流列表的尾部;
(7)访问数据流计数器减1;
(8)判断访问数据流计数器是否为0,如果是,继续;否则,执行步骤(2);
(9)计算活动数据流列表中每个数据流的下一个轮次的P值;将活动数据流列表中每个数据流的字节数计数器置为0;
(10)执行步骤(1)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110271188XA CN102271093A (zh) | 2011-09-14 | 2011-09-14 | 一种公平性好效率高的动态轮询分组调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110271188XA CN102271093A (zh) | 2011-09-14 | 2011-09-14 | 一种公平性好效率高的动态轮询分组调度方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102271093A true CN102271093A (zh) | 2011-12-07 |
Family
ID=45053260
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110271188XA Pending CN102271093A (zh) | 2011-09-14 | 2011-09-14 | 一种公平性好效率高的动态轮询分组调度方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102271093A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050243847A1 (en) * | 2004-05-03 | 2005-11-03 | Bitar Nabil N | Systems and methods for smooth and efficient round-robin scheduling |
CN1889521A (zh) * | 2006-07-13 | 2007-01-03 | 华为技术有限公司 | 一种数据调度方法及系统 |
CN102006670A (zh) * | 2010-11-16 | 2011-04-06 | 西安电子科技大学 | 支持应急响应的传感器网络动态轮询介质访问控制方法 |
-
2011
- 2011-09-14 CN CN201110271188XA patent/CN102271093A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050243847A1 (en) * | 2004-05-03 | 2005-11-03 | Bitar Nabil N | Systems and methods for smooth and efficient round-robin scheduling |
CN1889521A (zh) * | 2006-07-13 | 2007-01-03 | 华为技术有限公司 | 一种数据调度方法及系统 |
CN102006670A (zh) * | 2010-11-16 | 2011-04-06 | 西安电子科技大学 | 支持应急响应的传感器网络动态轮询介质访问控制方法 |
Non-Patent Citations (3)
Title |
---|
LUCIANO LENZINI.ETC: "Tradeoffs between low complexity,low latency,and fairness with deficit round-robin schedulers", 《IEEE/ACM TRANSACTIONS ON NETWORKING》, vol. 12, no. 4, 31 August 2004 (2004-08-31) * |
扈红超: "《基于CICQ排队机制与调度策略的研究》", 《中国优秀硕士学位论文全文数据库 信息科技辑》, 30 June 2008 (2008-06-30) * |
扈红超等: "一种公平服务的动态轮询调度算法", 《软件学报》, vol. 19, no. 7, 30 July 2009 (2009-07-30) * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3715098B2 (ja) | 通信ネットワークにおけるパケットの配送装置とその方法 | |
US8824287B2 (en) | Method and apparatus for managing traffic in a network | |
CN108282415A (zh) | 一种调度方法及设备 | |
CN100463451C (zh) | 一种网络数据流的多维队列调度与管理方法 | |
Chebrolu et al. | Communication using multiple wireless interfaces | |
JP2014187421A (ja) | 通信装置及びパケットスケジューリング方法 | |
US9608927B2 (en) | Packet exchanging device, transmission apparatus, and packet scheduling method | |
JP4163044B2 (ja) | 帯域制御方法およびその帯域制御装置 | |
CN101414958B (zh) | 一种业务调度方法及装置 | |
CN102014052A (zh) | 一种虚拟动态优先级分组调度方法 | |
CN100420241C (zh) | 实现信息交换的系统及方法和调度算法 | |
CN102387076B (zh) | 一种结合整形的分级式队列调度方法 | |
JP2002232469A (ja) | スケジューリング装置およびスケジューリング方法 | |
CN104348751B (zh) | 虚拟输出队列授权管理方法及装置 | |
CN102082765A (zh) | 一种Linux环境下基于用户和业务的QoS系统 | |
CN100466593C (zh) | 一种支持多业务的综合队列调度的实现方法 | |
CN100421420C (zh) | 一种调度纵横式交换矩阵中变长数据包队列的方法 | |
US11336582B1 (en) | Packet scheduling | |
CN102368742B (zh) | 一种公平性好效率高的多链路数据传输方法 | |
WO2016074621A1 (en) | Scheduler and method for layer-based scheduling queues of data packets | |
Wang et al. | A switch design for real-time industrial networks | |
CN102271093A (zh) | 一种公平性好效率高的动态轮询分组调度方法 | |
CN103326962B (zh) | 多样化服务交换方法 | |
Martinez et al. | Decoupling the bandwidth and latency bounding for table-based schedulers | |
Victoria et al. | Efficient bandwidth allocation for packet scheduling |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20111207 |