分级式优先级循环HPRR规划.pdf

上传人:b*** 文档编号:1150363 上传时间:2018-04-02 格式:PDF 页数:36 大小:1.23MB
返回 下载 相关 举报
摘要
申请专利号:

CN00813310.7

申请日:

2000.09.25

公开号:

CN1376345A

公开日:

2002.10.23

当前法律状态:

撤回

有效性:

无权

法律详情:

发明专利申请公布后的视为撤回|||实质审查的生效|||公开|||实质审查的生效

IPC分类号:

H04J3/22; H04L12/56

主分类号:

H04J3/22; H04L12/56

申请人:

摩托罗拉公司;

发明人:

迈克尔·帕特里克

地址:

美国伊利诺斯州

优先权:

1999.09.25 US 60/156,123

专利代理机构:

中原信达知识产权代理有限责任公司

代理人:

昝美琪;顾红霞

PDF下载: PDF下载
内容摘要

HPRR使用令牌戽速率分类标记,从而把各数据包标记为“满足”或“不满足”该流的业务规范。各业务流皆被看成属于单一的服务类,其中一个这样的类是一种特殊的服务类,即缺省的“最高效”的服务类。HPRR方法允许按以下两种方式之一来运送业务流里的数据包:要么占用分配给该流所属类的带宽,要么占用最高效的带宽。由于为各流皆提供两条数据包传送路径,故各流总能平等地分享两种不同的类的份额:该流主要的即所属的类,和最高效的类。

权利要求书

1: 一种方法,用来在数据传输链路上对数据包的传输量进行规 划,包括以下步骤: a)接收数据流的一组数据包; b)把所述流设定至某一服务类里; c)给所述服务类的传输带宽设定一个选取的限制; d)运送满足所述选取的限制的所述流里的数据包; e)识别出占用缺省类带宽的缺省类; f)运送数据包时,既使用服务类分得的带宽,也使用缺省类分得 的带宽。
2: 一种方法,用来在一组优先级数据包队列里选取下一个要在 网络里传输的数据包,包括以下步骤: a)把共享的带宽按指配定额分配给一组优先级数据包队列里的 各队列; b)把代表所述队列允许运送的数据量的差额分配给一组优先级 数据包队列里的各队列; c)从队列里选取下一个待发数据包,该队列拥有较高优先级以 及超出所述下一个数据包大小的差额值; d)从步骤c)所选取的队列的差额里减去所述选取的下一个数据 包的大小; e)若所述一组优先级数据包队列里的全部积压队列皆无足够差 额以运送下一个数据包了,则把定额值加入所述积压队列里的差额里 去,于是开始了新一轮的在一组优先级数据包队列里的选取。
3: 如权利要求2的方法,进一步包括以下步骤: f)若全部队列皆被清空了,则把差额值加入所述各已被清空的队 列的定额值里去,于是开始了新一轮的在一组优先级数据包队列里的 选取。

说明书


分级式优先级循环(HPRR)规划

    【相关申请的交叉引用】

    本申请要求本申请人于1999年9月25日提交的美国临时申请的优先权,该临时申请的专利号为60/156,123,题为“分级式优先级循环(HPRR)规划”。发明领域

    本发明涉及电脑网络,特别涉及在数据传输链路上对数据业务量的规划。技术背景

    链路共享的目的之一是使多家组织能共享链路带宽,其中当网络拥挤时,各组织皆欲享有固定份额的链路带宽,而当某家组织不占用带宽时,该带宽又可腾出来供别的共享链路的组织使用。一个例子是:多家机构共享越大西洋FAT管道,并各按固定份额向共营一条ISDN线的私人缴费。另一个链路共享的例子是:不同的协议族(譬如网际协议(IP)和系统网络架构(SNA))在一条链路上共享带宽,由于不同的协议族对网络拥挤的反应不一,故而要用到受控地链路共享。还有一个链路共享例子是:不同的业务类型(譬如远程联机(Telnet)、文件传输(FTP)或实时的音频和视频)在一条链路上共享带宽。

    控制网络资源既涉及本地使用决策,又需考虑每条连接的端对端需求。链路共享机制的功能之一是启用网关来控制本地链路上的带宽分布,藉以响应纯本地的请求。

    由于需要在共享的链路上支持不同的业务类型(包括共享链路上的实时服务),故而需要一种含有各类业务的分级链路共享。链路共享服务和实时服务须同时满足网关上的各套约束条件;还要在满足链路共享需求的条件下,既保证了优先级较高的业务,又能兼顾优先级较低的业务。

    目前的规划方法使用优先级CBQ(基于类的队列)或WFQ(加权平等队列)等手段的变异,从而支持分级式QOS(服务质量)。现有技术的CBQ和WFQ方法忽视了两个重要因素:(一)超限的业务,即超出约定的业务速率以外的那部份业务流,和(二)对业务流有意的过度预定,藉以提供带宽和延迟的总体保证,而非绝对保证。过度预定是指:在全部业务流同时处于活动状态时,即使缺乏足够的容量来提供带宽,也要允许为业务流至少保留最小的带宽。

    CBQ算法假设业务流固定,并总处于活动状态,而未考虑到不断迅速变化的环境下的活动业务流。CBQ算法使用反应缓慢的各业务流的平均速率来区分超限的业务。CBQ算法之所以反应较慢,是因为它依计算出来的类平均速率来判断该类是否超出了业务上限。它计算出反应较慢的各业务流(或类)平均速率,依此来标记超限的类,再通过一种较复杂的算法来给超限的类平等地指配带宽。最终,它没有限定类内业务流的过度预定(即有意地允许了过多业务流的进入,并需确保这些业务流的服务速率的最小值),而是寄希望于所允许的业务流从总体上看不会被同时积压。CBQ算法未考虑到过度预定时的强制性类带宽分配。

    按照CBQ算法,各类皆被局限在分配给自己的平均带宽内,但对于未超限的类,则无法避免它们的瞬时带宽损失。这是因为上述的CBQ算法需仰仗变化较慢的平均速率来判断类是否超限。

    单级WFQ方法会受到过度预定问题的困扰,因为一组过度预定的业务流可随意获得大段带宽。即使业务流的数量过多,各业务流也要平等地享有带宽份额。分级式WFQ规划的引入可缓解过度预定的问题,不过,WFQ算法假设各业务流皆遵循自己的业务规范,而该算法未对超出业务规划限制的个别业务流加以限定。在分级式WFQ方法里,某一类里的业务流不可能与最高效的类共享带宽。若某较高级别业务流超限了,它也只能局限于指配给自己所属类的带宽,而不能与缺省类里的最高效的业务流争夺带宽。例如,假设在一种情形里,某确保类里有五个业务流,各分得10%的带宽份额,而缺省类里只有一个业务流,并也分得50%的带宽。由于缺省业务流经常积压,故分得50%的带宽。若某个确保业务流的需求骤增,需要尽可能多的带宽,它还是只能得到10%的链路带宽,即:分配给使用分级式WFQ的确保类的那50%带宽的1/5。

    在WFQ规划算法里,过度预定的流仍依各自的重要程度来使用带宽,且正是由于足够的过度预定而能够随意占用大段带宽。WFQ算法未对局限于一部份带宽里的业务流的所属类加以限定,甚至在过度预定时,也未对强制性带宽分配加以限定。对于带宽提供商来说,过度预定是出于重要的经济需要。固然,与DRR(差额循环)算法相比,WFQ算法在最差条件下可提供较好的延迟,但也带入了一些复杂运算。最突出的问题是要用除法运算来计算数据包的结束时刻,以及在结束时刻的基础上,维持队列次序所需的复杂运算。通常认为这些复杂运算出现在N个可能的业务流的次序O(log N)里。发明内容

    按照本发明的分级式优先级循环(HPRR)规划,可以解决数据传输链路上的数据包规划问题。

    欲在数据网络服务里提供分级式QOS(服务质量),需要一个重要组件,那就是为通往向外传输界面的数据包进行规划的方法。本发明是一种规划传输界面上的数据包的方法,该方法可向不同的业务流的所属类提供带宽分配,其中每一类里皆包含一定数量的业务流。该方法可有效而平等地处理过度预定的流,即:允许的流的业务速率之和超出了分配给这些流的所属类的容量。本发明改进了DRR(差额循环)算法,依各类的优先级而提供数据包的优先级运送,同时又沿用了DRR的机制,即:把各类的带宽限制在分配给他们的容量以内。本发明关键在于把某个类指定为缺省类,其中,那些超出所属类的业务速率的流仍可在缺省类分得的带宽里运送数据包。

    按照HPRR,在上例里,确保类里需求骤增的流可分得10%的确保带宽加上最高效的带宽的一半(即总带宽的25%),共占总带宽的35%。HPRR方法有效而轻易地把缺省带宽即最高效的带宽指配给了超出业务上限的、所属级别不同的类里的业务流。

    HPRR使用即时精确的令牌戽速率分类标记,从而把各数据包标记为“满足”或“不满足”该流的业务规范。本发明关键在于把各业务流看成属于两种不同的类之一:各流所属的类和缺省类、或最高效的类。HPRR方法允许按以下两种方式之一来运送业务流里的数据包:要么占用分配给该流所属类的带宽,要么占用最高效的带宽。与CBQ方法不同,HPRR方法既不想把类标记为超限与否,也不去判断超限的类是否被允许运送各自的数据包。完全毋需任何算法来检查各同级的类是否超限,而是向各流皆提供两条数据包传送路径,于是各流总能平等地分享两种不同的类的份额:该流主要的即所属的类,和最高效的类。

    HPRR方法是一种可处理过度预定的类的简单而有效的算法。一个过度预定的类里的各流皆需全力争夺分配给该类的带宽,但是,因为各流皆可使用最高效的带宽,所以它们也可平等地分享最高效的带宽,从而在别的类处于不活动状态时使得这些类的带宽得以确保。

    HPRR方法在逐个数据包的基础上判断数据包自身是否满足业务速率令牌戽。若某个数据包不满足该流的业务规范令牌戽,则它没有资格经该流所属类的带宽来运送,但仍有资格经缺省类的带宽来运送。HPRR方法使用了新颖的优先级DRR方法,从而以最差条件下的延迟变长为代价,省却了除法运算和维持有序队列的O(logN)运算。词汇定义

    普通规划系统:不依链路共享的规定来规划叶片类里的数据包。

    链路共享规划系统:规划某些类里的数据包,这些类在网络拥挤时超出了链路共享的份额。

    规则类:此类里的数据包在网关处,由链路共享规划系统来规划。

    不规则类:此类里的业务由普通规划系统来规划。

    超限、未超限、满限:若某类占用的带宽超出了指配给它的链路共享带宽(在规定的时间间隔内的平均值,以字节/秒来计算),则称该类“超限”;若它占用的带宽小于它分得的链路共享的带宽段,则称该类“未超限”;除此之外皆称为“满限”。

    通过以下的详细说明并结合附图,方可更为透彻地理解本发明及其上述乃至更多优点。在附图里,附图说明

    图1是根据本发明的原理而示出的分级式优先级循环(HPRR)规划的部份方案流程图;

    图2是图1所使用的HPRR方法和系统的数据结构框图;

    图3是图2里数据结构的实例的框图;

    图4和图5是根据图1所示的方法和系统来接收新数据包的操作流程图;

    图6,7,8,9和10皆是根据图1所示的方法和系统来规划待传输的数据包的流程图。具体实施方式

    图1是根据本发明的原理而示出的分级式优先级循环(HPRR)规划的部份方案流程图。本发明公开了一种方法和仪器,用来在数据传输链路上规划数据包的传输。在传输链路上待传输的数据包被交给规划系统,规划系统按需要把数据包列队并记录下来,以满足预先确定的标准。

    本文所述的规划方法和仪器(统称“规划系统”)综合了各流的队列与优先级服务,该优先级服务既限制了各优先级上的最大骤增量,也限制了各优先级基础上的带宽段。本发明综合了加权平等队列(WFQ)和基于类的队列(CBQ)的关键。此外,本规划方法和仪器还包括了改进后的差额循环服务方法,改进后的差额循环服务方法省却了优先级列队和WFQ结束时刻所需除法运算的麻烦。

    参考图1,根据本发明的规划系统经其内部的各级来处理数据包。

    1.先把数据包归类为流。对于网际协议(IP)来说,流的归类最好是自变量为数据包的源IP地址和目标IP地址、IP协议类型和数据包里的用户报文协议(UDP)或传输控制协议(TCP)端口数量的函数。在规划系统里,数据包首先被列队,每队即为一个流。各流最好具有尽可能多的缓冲区,在此进行列队。流的归类的一个例子是:IP电话的数据包(即打包的语音)被归入1号流,而别的数据包则被归入4号流(缺省类里的流)。

    各业务流皆被看成单一的服务类里的组成部份,该服务类描述了提供给流的数据运送服务。

    2.接着,数据包必须通过最高速率令牌戽的限制,这是在各流的基础上对运送速率的限制。若数据包能通过最高速率的限制,则有资格在以下两类的任意一类里运送:该流的所属类、或缺省类。

    3.接着,数据包还须通过业务速率令牌戽的限制,这样方可有资格运送至各自的逻辑类的队列。业务速率是业务流的源向网络里注入业务的最高速率。网络与业务源之间的服务合同使得数据包只有以低于业务速率来传输,方可享受网络上分级式服务。对于约定信息率(CIR)的服务,譬如在帧中继网络里提供的服务,业务速率对应于CIR速率。对于网络来说,接收数据包的速率最好能高于业务速率,但是运送数据包则要以最高效为基础。在根据本发明优选实施例的规划系统里,若数据包以高于业务速率而抵达,则运送数据包时禁止占用分配给其所属的服务类的带宽,而只能占用分配给缺省类的带宽。

    4.在某个时刻,可能有某个类被过度预定了,这表明:进场控制算法允许业务速率超出原定分配给该类的传输信道容量。在这种情形里,规划系统不仅允许数据包占用其所属类的带宽,还允许数据包占用缺省类的带宽。

    5.数据包在通过业务速率的限制后,在各类的队列上进行规划,该队列把全部流的数据包归入同一类里。

    数据包实际上只被列入各类的队列里。图1里的各类的队列皆为虚拟队列,用来说明本发明的操作方法。同样,任何数据包,只要是满足了业务流的最高速率令牌戽的限制,就既有资格占用所属类的带宽,也有资格占用缺省类的带宽。

    各流实际的队列填充了含有该流所属的服务类的队列。本发明不涵盖同一类里的流的数据包被运送至各类的队列的方式,该方式是平等队列算法(譬如差额循环规划)的一种优选类型。

    在规划系统里为各流皆设定了最高速率的限制,于是,若超出了该流的设定最高速率,则系统将无法运送数据包了。缓冲区的管理是以各流而不是以各类为基础的。

    各流还有业务流的限制,若该流超出了业务流的限制,则禁止把它运送至所属的服务类的队列。各流皆需设定业务速率的限制,只有满足该限制,才能占用分配给该流所属的类的带宽。虽然,业务流发出数据的速率允许高于业务速率,但是这样发出的数据要停留在各流的队列上,运送数据时只能占用缺省类分得的带宽。

    规划系统把数据包从流的队列运送到流所属的服务类的虚拟队列。之所以是虚拟队列,是因为毋需实现各类的队列的实际队列(譬如,链接的列表),而是只保留一个指针,指向各类的列表的顶层流的队列。当虚拟优先级队列解散时,其顶层的数据包就离开了(真实的)流的队列,再在该类里扫描处于活动状态的流的队列,以确定类的队列的下一个顶层。规划系统最好是不要运送任何不合次序的单独队列里的数据包。

    各类皆可分得一个优先级。队列里的类受到带宽的限制,依其优先级的高低而享受服务。用DRR(差额循环)算法来规划各类的数据包固然不错,但本发明为了实现优先级规划而改进了DRR算法。优先级最高的类最先享受服务,一直到它的定额用完了,才扫描优先级次高的类。当诸类的定额全用完了,再开始下一轮的DRR循环。

    规划系统以各类的最大分配带宽(MAB)设定值为基础,计算该类的优先级DRR算法的定额。MAB最方便的表示法是使用介于1到100之间的整数百分比,不过在本发明的范围内,还可使用别的测量方法。

    某类分得的MAB确定了该类的DRR定额,于是各类的定额与它们的MAB成正比。下面说明由MAB来计算定额的算法。MAB最高的类分得的定额最大,该定额是系统所允许的最大数据包的大小。对于IP路由协议来说,合理的最大数据包应为1600字节,大于以太局域网(LAN)的IP最大传输单元(MTU)。再以别的类的MAB与最高MAB的比值为基础,给别的类分配定额。例如,设最高MAB为50%,分配给它的定额是1600,则MAB为10%的类分得的定额就是10÷50×1600,即320字节。使用这种算法来分配定额时,动态范围的保留速率应限制在1500比1以内,最好是限制在100比1左右,这样方可限制1600字节差额所需的累加循环轮数。

    本发明的规划系统有一个重要理念,即:优先级不为零的流皆要被扫描两次:一次是被优先级队列规划系统所扫描,另一次是被最高效(BE)的零优先级DRR规划系统所扫描,目的是把最高效的带宽也分配给即各优先级不等的流。例如,设想有5个优先级的流,其业务速率为10kbps,以及1个最高效的流,它们共享500kbps的信道。优先级的流一共只保留了500kpbs里的50kbps,但他们需要一种机制来分享留给最高效的流的那450kbps。上述对流进行两次扫描方可达到此目的。

    在诸流被持续积压的期间,某个流分得的带宽是以下二速率之和:

    1.该流的标称业务速率,即该流在其所属类的优先级上的传输速率;和

    2.该流所分得的最高效带宽的剩余容量。

    在IP组网时,在任何时刻皆可识别出一些亟需带宽的流,同时另一些流则处于空闲状态。某给定流享受的服务份额并非其定额除以全部流的总定额,而是它的定额除以全部处于活动状态的流的总定额。“指配”一词指的是一个流,当频带管理给某个特定的射频信道分配调制解调器时,也给该流分配了信道。仅当该流的数据包被列队于各流的队列上(即该流被积压)时,或当该流的数据包正在被传输时,方认为该流处于活动状态。

    例如,设:在分配给信道的最高效即零优先级上有100个流,各流的定额是1500字节。在给定的网络拥挤时段(即至少有一个数据包被列队),只有10个调制解调器在传输数据。由于只有10个调制解调器在工作,故处于活动状态的定额之和就是15000字节,各调制解调器皆分得1500/15000的带宽传输份额,即零优先级(优先级最低)的业务所分得信道的10%。

    本发明的规划系统在过度预定时的操作至关重要。若进入传输链路的业务流的速率超出了该流所属类分得的链路容量,则会出现过度预定。各类皆被单独规划,且各类皆不得超出其平均速率(平均速率是在各类的规划级别上使用DRR时,由定额分配所确定的)。在本发明的另一种实施例里,各类的规划步骤还可使用WFQ,此时同样禁止任何类超份额地使用带宽。

    本发明改进了DRR方法,从而可提供优先级运送。优先级DRR方法最好是在本发明规划系统的各类规划的末级使用。现有技术的DRR仰仗分配给各规划类的定额的理念,以循环方式来访问各类。而根据本发明,各类皆可分得一个优先级。本发明的优先级DRR方法依优先级的高低来访问各类,若类的优先级相同,则访问时不分先后次序。优先级最高的类首先享受服务,一直到运完了该类的队列里的全部数据包、或是该类用尽了自己的差额值,才轮到优先级次高的类享受服务。当各类皆清空了各自的队列或用尽了自己的差额值后,就开始了新一轮DRR循环,即:给全部积压的类分配新的定额。按照DRR算法,定额的分配比率确定了该类所分得的传输链路带宽的长期比率。

    在本发明的优选实施例里,业务流以过度预定的设定级别为基础而进入传输信道。一种手段是:在服务类里人为设定处于活动状态的流的百分比。例如,若预计有10%的流同时处于活动状态,则在此情形里,活动百分比的设定值(CAP)即为10%。

    各流皆有其业务规范,该业务规范给出了业务速率和业务速率令牌戽的骤增参数。需要判断业务流里的数据包是否满足业务规范。各类皆有与之关联的最小保留带宽。这种情况类似于异步传输模式(ATM)网络里最小单元速率的帧中继网络CIR(约定信息速率)。以最小保留速率做为本发明的方法里业务速率令牌戽的业务规范。

    接着,过度预定的进场控制方法允许业务流进入,使得CAP百分比乘以入流的总保留速率小于分配给信道里该类的MAB百分比。例如,设CAP为10%,把该类的MAB设定为1Mbps信道的50%,而该类的保留业务速率是100kpbs,则入流的数量是就是:

    入流的数量=(MAB×信道容量)/(CAB×保留带宽)

    =0.50×1,000,000/(0.10×100,000)

    =50个入流

    若流在出现过度预定时进入,则实际处于活动状态的流要多于CAP所预计的数量。本发明的规划方法把设定的类的容量全部均分给过度预定的入流,于是各流皆分得了少于“约定”带宽的速率,而别的类则不受影响。各流皆可使用最高效的带宽,不过,若别的最高效的流处于不活动状态,则这些流仍有可能享受各自的约定带宽。还有,最好是能报告抵达系统的数据包数量,从而获悉所属类的过度预定的状况,即:比CAP所设定的活动百分比还多的流被同时积压。由此可以指导CAP参数的设定,并可做为服务级别协议的基础。

    由于改变了业务规范和入场策略,故可使用本发明来实现主要的QOS服务方案。

    依靠优先级最高的类,且该类又带有非零业务戽和零过度预定(即:CAP为100%同时活动),方可提供确保质量的服务。这种结合确保了最小延迟和最大带宽。

    利用非零业务速率、低于确保类的优先级、以及允许的过度预定,可实现约定信息速率(CIR)的服务类。由于允许了过度预定,典型数据通信里需求骤增的业务可享受总体确保的服务,同时也可保持链路的高利用率。

    利用无限业务速率戽和无限过度预定(CAP=0)、且该类的优先级低于CIR类但高于缺省服务类,可提供优先级的最高效服务类。

    缺省服务类应拥有无限业务速率戽、无限过度预定、以及低于上述优先级的最高效服务类的优先级。

    优先级高低不等的服务类应拥有无限业务速率和无限过度预定,并应拥有高于缺省类的优先级。

    图2示出了在本发明的上述实施例里使用的关键数据的结构。FLOW结构100含有与单个数据包流关联的全部信息。各流皆含有一个名为PacketQ的队列结构,其中含有指针,指向待传输的数据包队列的始末两端。

    QITEM结构110允许包含它的结构链接到一个双链接列表。QUEUE结构120含有指针,指向给定列的QITEM结构的首尾两端;并含有该列里项目的计数。

    SLICONF结构130含有参数,当它在特定界面INTF150运行时,可被设定为特定的服务类SCLASS140的操作。例如,SLICONF结构含有参数过度预定,把入流可能过度预定的实际带宽与超出容量的保留速率显示在界面上。

    DRRITEM结构160含有对流(或服务类)进行规划所需的参数,规范的算法使用差额循环(DRR)算法。通过分配给各项目一个起始定额来执行DRR算法,指配给流的带宽与分配给它们的定额成正比。各流的定额皆固定不变,而且是在创建流时就确定了的。

    流的定额存储在DRRITEM的“U32 quantum”域162里。允许流在任何给定的时间里输送一定量的字节,这些字节存储在流的DRRITEM的差额计数里。在DRR队列的各DRR循环起始处,队列里的各DRRITEM皆以自己定额的量来递增自己的差额计数。在处理各DRRITEM(使用后续骤增算法,后面将结合图6~10来说明)时,其差额要与即将被流的下一个数据包所运送的字节数进行比较。若差额计数里的字节数不足,则把该流移至其DRR队列末端,等待下一轮DRR循环,介时将递增其差额;反之,若差额里有足够的字节,则运送数据包,再用所运送的字节数去减差额计数值。长远地看,DRR算法在DRR队列里各流的定额分配的基础上,平等地向他们提供带宽。这比单独传输队列通常的“先为先来者服务”(FCFS)的服务原则要平等得多,因为毋需迫使含有较少和较小数据包的流一定要排在含有较大和较多数据包的流后面了。

    服务级别界面(SLI)结构170控制整个规划,并含有操作于单独界面(INTF)上的单独服务类(SCLASS)的操作统计。本发明的规划方法根据各SLI的设定加权,把界面提供的逻辑带宽段分配给各SLI。在分得的带宽内,本实施例把等权的带宽段提供给该服务类里的全部处于活动状态的流。

    SLI是根据服务类(SCLASS140)的优先级域来进行排列的。INTF结构150的p_classes域充当SLI结构170的链接列表的首部,并链接了SLI里名为“PRIORITY”的QITEM结构110。

    本发明使用了三个单独的DRR队列:

    优先级流的DRR队列:流结构100含有名为pq的DRRITEM160,其链接了一个服务类里的全部流(因而也是一个优先级上的全部流)。该队列的首尾即SLI结构170里的QUEUE结构120,名为flowList。

    最高效流的DRR队列:流结构100含有名为bq的DRRITEM160,其链接了一个界面上全部处于活动状态的流。界面结构INTF150里所含的QUEUE结构120提供了该流的链接列表的首尾。

    类DRR队列:在界面上处于活动状态的SLI结构170充当SLI自身DRR队列的一部份。规划该类级别的DRRITEM160存储在SLI170的cq对象里。

    TOKBKT结构180说明了业务速率令牌戽,该令牌戽确定了何时允许流使用各自的服务类带宽;还说明了最高速率令牌戽,该令牌戽在流数据包快于流的最大允许运送速率时,让这些数据包留在它们的流队列上等待运送。

    图3示出了图2里结构的实例,图里只示出了各结构的有关域。对于数据通信系统的特定传输界面,单独的INTF结构含有QUEUE结构,该结构充当了按优先级降序排列的SLI链接列表的首部。在该实例里有两个服务类:“gold”,即SCLASS=“gold”结构200;和“缺省”服务类结构260的“default”,即SCLASS=“default”结构210。缺省服务类总是有其SLI。

    1.在“gold”SCLASS里有两个处于活动状态的流,其中之一即1号流220。像所有处于活动状态的流一样,它也拥有名为PacketQ222的QUEUE结构,该结构充当了数据包224,226的链接列表,并在流上发出该链接列表。本发明的规划方法总是依次发出同一流里的各数据包。在图3里,虽然只示出了1号流,其中数据包就在该流的PacketQ上;但是,在本实例里,处于活动状态的数据包皆拥有这样的数据包。为了节省篇幅,未示出别的流里的PacketQ和数据包。

    1号流220可处于两个DRR队列上。一是优先级流的队列,其首部是名为flowList的QUEUE结构,处于界面上“gold”类的SLI230里。1号流里名为pq的DRRITEM结构含有链接,可链接到SLI的flowList上的别的流,即2号流235。1号流还可处于最高效流的DRR队列上,其首部是名为beq的QUEUE结构,处于INTF界面结构240里。最高效流的DRR队列上的全部流皆经流结构里名为“bq”的DRRITEM而链接。注意:图3里的各流(220,235,245,250)皆处于首部为INTF.beq(240)的链接列表里,并经各流的bqDRRITEM结构而链接。

    2.2号流235是“gold”服务类里的另一个流,和1号流一样也处于活动状态。当“活动”一词用来指流或SLI装置时,表示里面有需要传输的流。

    3.3号流245是最高效的流,它包括待发的数据包的PacketQ,不过图里未示出;以及向后指向SLI的sli指针,用来操作缺省服务类(未示出)。3号流未使用其pqDRRITEM;3号流是唯一使用了pqDRRITEM的最高效的流。

    4.4号流250类似于3号流245,也是最高效的流。它只在缺省服务类里规划带宽。

    各流皆有一个名为S的指针255,该指针指向服务类(SCLASS)结构,各流皆在此被归类。全部的流皆处于一个类里,缺省类里则含有未归入任何别的类里的流。

    缺省服务类210所属的流(3号流245和4号流250)并未经其pqDRRITEM链接,相反,当NextBurst子程序给缺省类SLI提供带宽时,其中的流是从INTF结构240的beq列表处获得的,而非缺省类SLI260的flowList QUEUE。

    各流还含有向后指向SLI结构的sli指针,该指针控制了界面上各流的运算。在图3里为了清楚起见,只示出了2号流的向后指针sli。

    图4和图5示出了根据本发明的方法来处理新抵达的数据包的运算流程。图4里的步骤是以C语言来表示的,并使用了图2里说明的数据域;不过,本发明并不局限于这种编程语言。

    参考图4,当数据通信系统根据界面的规划系统来处理抵达的数据包时,在步骤300处调用了PktArrival( )子程序。

    Pkt是待发的数据包,里面包括该数据包的指针及其长度。

    F是指向FLOW结构的指针,该结构里已归入了数据包。

    I是指向INTF结构的指针,数据包经过此处后被发出。

    在步骤305处,本方法检查在流F上列队的数据包是否多于流F的服务类所允许的最大缓冲区数量。若的确如此,则在步骤310处递增统计数值,并在步骤315处遗弃该数据包。

    反之,则在步骤320处,把新抵达的数据包列入流F的PacketQ队列上。在本方法里,用q_enq( )函数的第二个自变量做为QITEM的指针。在步骤320的情形里,Pkt用QITEM做为自己的第一个元素。

    在步骤325处检查流F的布尔值bActive。若已把该流标记为“活动”,则在数据包抵达时毋需进一步运算,于是流程跳至步骤380(在图5里)。反之,则需在步骤330处激活该流,并把该流插入类似于图3所示的数据结构里。

    下面参考图5,在步骤335处检查流是否属于缺省服务类。若不属于,则向前执行步骤340,把该流列入其(非缺省的、优先级的)SLI的flowList QUEUE。使用流的pq DRRITEM里的QITEM把同一SLI的流链接在一起。在步骤345处还把优先级的SLI标记为“活动”,并递增处于活动状态的流的计数(即SLI结构170里的“nflow”域)。

    在步骤345之后的步骤350,355和360处,检查新激活的流是否对服务类的过度预定条件进行了初始化。各流皆与一个正常保留速率(nrr)关联,该nrr的单位是比特/秒,它也就是各流的保留带宽。本方法可让操作者设定并允许过度预定的流(即:允许进入的流的总保留速率超出了分配给服务类的容量)进入。容量是以百分比分配给各服务类的。分配给各服务类的比特/秒存储在SLI的“正常最大分配速率”域、即“nmar”里。在任何给定的时间里,处于活动状态的流的保留速率总和存储在SLI的“sumresv”域里(步骤350)。当该速率总和超出该类的分配速率(nmar)时(步骤355),即在步骤360处把SLI标记为“过度预定”状态。在步骤365处继续运算。

    无论新激活的流是否被置于pq DRR队列,都需执行步骤365,各流在此步骤处被列入最高效的流的队列,该队列的首部是QUEUE结构的INTF I的beq。使用该流bq DRRITEM里的QITEM来把该流链接到最高效的流的列表。

    在步骤370处,各流在目前的DRR循环里确定了自己怕位置,并设定流的差额等于该流分得的定额。在本实施例里,认为pq(优先级的队列)和bq(最高效的队列)里的全部流皆拥有相同的定额。例如,合理的定额可以是512字节。该定额的选取必须小于以太网最大数据包的大小(1500字节),但又不要小得太多,这样,在按数据包的大小来递增差额时,不会占用DRR循环过多的轮次。注意:在优先级SLI里的流处于两个不同的DRR队列里,即他们各自所属类的优先级队列(经pq链接)和最高效的DRR队列(经bq链接)。对两个DR队列的差额皆进行初始化。

    在步骤375处,缺省SLI被标记为“活动”,因为在最高效的流的列表里加入了一个流;并递增缺省SLI里处于活动状态的流的计数。

    在步骤380处,检查该流是否处于过度预定的状态。若某个流已处于活动状态,同时服务类里还有别的流也处于活动状态,并且这些流的总保留速率超出了分配给该服务类的链路带宽,则称该流处于过度预定的状态。本发明保持了该流过度预定的状态,并在过度预定的状态下计算抵达的数据包,这一点是独一无二的。

    当某个数据包抵达时,若服务类正处于过度预定的状态,则在步骤390处,该抵达的数据包使“过度预定数据包的抵达”的计数递增。

    步骤395处中止了对抵达数据包的处理。

    于是,数据包所归入的流就被插入如图3所示的数据结构里了。

    图6,7,8,9和10皆示出了对接下来待发的需求骤增的数据包的规划方法。当数据通信的传输系统运送完了一个或多个数据包、并选取下一个或下一组数据包时,需调用NextBurst运算。该算法的表达方式使得NextBurst的调用者可指定要传输的字节数最大值(maxBurst)或要传输的数据包数量最大值(maxPkts)。这两个参数、以及指向下一个待发的数据所处的INTF界面结构的指针,一同构成了NextBurst运算400的参数。

    NextBurst运算有一些本地参数:

    active_classes是处于活动状态的SLI的数量。

    overlimit_classes是“过限”的SLI的数量。过限的SLI里的全部流皆“过限”;而过限的流则是超出其业务令牌戽的流。业务令牌戽测量某个流是否超出了其最小保留速率。

    nover是在特定服务类里超限的流的数量。

    bReturn是一个控制标志,当本方法确定NextBurst运算需返回时,其值为“真”(即设为1)。

    P是指针,指向目前分得了带宽的SLI结构。

    F是指针,指向目前分得了带宽的流(带有P)。

    Pkt是指针,指向目前正受到检查的数据包F。

    在步骤405处,本方法对本地变量进行初始化,并扫描各SLI(经INTF里的p_classes QUEUE),以及把类的bOverlimit位设为0(即“假”)。

    在步骤410处开始了“优先级DRR队列”的下一轮DRR循环。该步骤把本地SLI指针P设为INTF的p_classes队列的首部。注意:“q_head(QUEUE)”运算使指针返回队列首部,但并未使其离开队列。

    在步骤415处,检查在目前的优先级类DRR循环里,是否全部的类皆分得了带宽。若的确如此,则P指针为0,并在步骤420处开始下一轮类的DRR循环。在该步骤处,界面上的各类皆要执行步骤425(即:经INTF结构里p_classes QUEUE链接的全部SLI),并给变量bExhausted赋值1,表示各类用尽了其类的DRR差额。在步骤430处,依相应的定额来递增其差额,并清除bExhausted标志使SLI准备下一轮类的DRR循环。

    在方才完成的一轮循环里,“超限”的类累加在本地计数器“overlimit_classes”里。这些类需等待以后被NextBurst调用,方可使其中的流有资格运送数据包。在步骤435处,把该overlimit_classes计数与处于活动状态的类的数量进行比较,若全部类皆过限,则NextBurst将不再运送任何数据包,并在步骤445处返回sent=0。

    在步骤440处,若上一轮类的DRR循环清空了全部列队等候的数据包、从而不再有任何类处于活动状态了,则NextBurst也要在步骤445处返回。反之,若仍有类处于活动状态,则跳回步骤410处,开始新一轮类的DRR循环。

    回到步骤415处,若目前这轮类的DRR循环尚未完成,则在步骤450处继续处理。在步骤450处,目前的SLI未被标记为“活动”,则表示没有流处于活动状态,于是可跳过该步骤。在此情形里,本方法转到步骤455处,在界面上的p_classes队列上取得优先级更低的SLI,再跳回步骤415。

    若目前的SLI(以P来寻址)处于活动状态,则本方法跳回步骤450处,并在此把active_classes的值加1。

    在下面的步骤460处,检查SLI是否在目前的优先级DRR循环里用尽了其差额。使用p->bExhausted标记就是这个目的。若是用尽了,则在目前的优先级DRR循环里,该SLI不能再分得带宽了,并需在步骤455处检查下一个SLI。

    反之,则本方法继续执行步骤470,在此检查目前SLI的bOverlimit标记。当SLI的全部流也过限时,即设定该标记。在此情形里,不向优先级SLI提供带宽了,并经步骤455检查下一个SLI。

    反之,则本方法继续执行步骤475,480和485,在此依目前的类是否“缺省”的类而设定本地变量“FlowQP”。若目前CLI(P)是缺省类,则把带宽提供给流的相关队列,即流的I->beq“最高效”的队列。若目前的CLI(P)是优先级队列,则只有CLI的flowList队列所链接的流才是有资格的流。设定FlowQP指向相应的QUEUE结构。

    在以上任何一种情形里,本方法皆需继续执行步骤490,在此把目前的类(nover)里过限的流的数量初始化为零。

    步骤495标出了普通处理点,藉以向目前服务类的“Next Flow”提供带宽。标有“Next Flow”的无页连接器对象505做为图6里的参考。在步骤495处,本地指针F被设定在FlowQP队列的首部(但该流的队列并未解散)。

    接下来,本方法在步骤500处检查目前的SLI里全部流是否皆清空了各自的数据包,即F是否为空。若F不为空,则本方法继续执行图7里的步骤525。

    若在步骤500处,给定服务类里的全部流被确定皆已用尽(即F=0),则在步骤510处把该服务类标记为“不活动”,并递减处于活动状态的服务类的数量。在步骤515处,本方法检查bReturn标志是否为1,该标志是在步骤795处设定的,介时已调用目前的NextBurst方法来发出希望数量的数据包。若该标志为1,则NextBurst方法在步骤520处中止;反之,则继续执行步骤455,处理下一个服务类。

    在步骤525处,本方法检查目前服务类里的全部流是否皆过限。若的确如此,则本方法跳至步骤530,在此把该类自身标记为过限,并检测过限的类的数量,从而跳回步骤455调用NextBurst方法,以检查下一个服务类。

    若该类自身未超限,则本方法从步骤525转到步骤535。于是开始了目前流的下一个数据包的“Next Packet”处理过程。本地指针Pkt被设在目前流的数据包队列(PacketQ)的首部,但数据包自身尚未离开队列。

    在下一步545里将检查Pkt指针。若该指针为空,则表明目前流里的全部数据包皆已发出,于是本方法跳至步骤585。在此情形下,当流变为不活动时,步骤585更新图2里的统计数字数据结构;从优先级DRR队列(即SLI的flowList QUEUE)和最高效的DRR队列(来自INTF的“beq”QUEUE)里去掉该流。步骤585还要递减类里全部处于活动状态的流的总保留速率,即“p->sumresv”计数。在步骤590处,若p->sumresv值降至“正常最大分配速率”(p->nmar)以下,则不再认为该类处于过度预定状态了。若出现这种情形,则在步骤595处清除p->Overbooked标志。不管何种情形,在步骤590处检查之后,本方法在步骤495处继续对目前SLI里的下一个流进行处理。

    返回步骤545,目前的Pkt指针不为空,则本方法跳至步骤550。在这一步里,检查bReturn标志,若在步骤765处设定了该标志,则本方法返回步骤560。反之,若尚未设定bReturn标志,继续执行步骤555。

    步骤555检查数据包的发出是否会导致NextBurst子程序超出调用NextBurst子程序所允许的最大字节数。目前运行的总发出字节数保存在本地变量“sent”里。在此情形里,NextBurst在步骤560处返回,而不发出目前的数据包。

    若步骤555未检查到超出一次调用的最大需求,则本方法继续执行步骤565,在此检查优先级DRR队列的“差额”。若数据包长度大于优先级“类”的DRR项目的差额,则目前的类用尽了该优先级DRR循环里的允许传输。在此情形里,服务类的标志bExhausted被设为1(真),然后本方法在步骤455处继续处理下一个服务类。

    若在步骤565处,服务类的DRR差额未被用尽,则本方法继续执行步骤575,在此更新该流的最大令牌戽。更新令牌戽的子程序(tokbkt_update( ))以上次更新后中央处理器的时间为基础,向令牌戽里加入正确数量的令牌戽。令牌戽里的各“令牌”皆可传输一个字节。

    在步骤580处,本方法把数据包长度与方才更新的最高速率令牌戽里的令牌数进行比较(F->maxBkt)。若令牌数不足,则本方法跳至步骤600,在此递增“overMaximu”数据包规划数,并递增目前服务类(本地变量“nover”)里的“超限”的流的数量。在步骤605处,调用“MoveFLowToEnd( )”操作把超限的流移至目前流的队列的末尾,直到以后调用了NextBurst才允许该流发出数据包,此时,可能已经有足够的时间来向最高速率令牌戽里增加更多的令牌了。本方法从步骤605跳至步骤495以处理目前的类里的下一个流。

    若在步骤580处,本方法通过了最高速率令牌戽的限制,则继续执行步骤610,该步骤与图8和图9里NextBurst子程序的后续部份相连接。

    步骤620开始执行图7里NextBurst子程序的后续部份。

    步骤625检查目前分得带宽的类是否为缺省的类,若不是,则步骤630更新该流的保留速率“业务”速率令牌戽(F->trafBkt)并在步骤635处检查该流目前是否“低于”其保留速率。若不低于之,则本方法在步骤640处把数据包标记为超出其业务速率,并在步骤645处调用如步骤700~720处所述的MoveFlowToEnd( )子程序,从而把该流移至其优先级DRR列表的末端。不允许流超出其带宽的最大令牌戽以外而发出数据包,该带宽是分配给它所属的优先级服务类的;而是只在给缺省服务类分配了带宽之后,方可发出数据包。在把该流移至CLI的flowList末尾之后,从步骤650跳至步骤495以处理目前类里下一个流。

    步骤635判断流是否超出了其保留业务速率的限制,再跳至步骤655,在此检查该流的目前数据包是否超出了各流的DRR循环差额,即F->pq.deficit。若是超出,则程序跳至步骤660,因为该流需等待下一轮各流的DRR循环。在步骤660处,该流的“pq”DRR项目差额按其定额增加。在步骤665处调用MoveFlowToEnd子程序,从而把该流从目前类的flowList的前部移至后部,再在步骤495处继续处理下一个流。

    若在步骤625处,目前分得带宽的类确实是缺省的类,则本方法继续执行步骤675,步骤675~690类似于非缺省类所使用的方法。步骤675把流的长度与最高效的DRR列表上的流的差额(F->bq.deficit)进行比较。若流的长度小于流的差额,则本方法继续执行步骤725;反之,若流的长度超出了最高效的DRR差额,则本方法继续执行步骤680。在步骤680处,流的最高效的DRR差额按流的最高效的DRR定额(F->bq.quantum)来增加。在步骤685处调用如步骤700~720处所述的MoveFlowToEnd子程序,从而把该流移至类里流的列表的末端。完成步骤685后,本方法跳至步骤690,从而经“Next Flow”标签返回步骤495去处理下一个流。

    上述步骤605、645、665和685所调用的MoveFlowToEnd子程序始于步骤700。MoveFlowToEnd子程序是为特定的DRR队列FlowPQ和特定的流F而调用的。记住:一个流可能属于两种不同的DRR队列,因而拥有两种不同的DRRITEMS(160):F->pq和F->bq。MoveFlowToEnd子程序无非是适当选取将要修改的DRRITEM。在步骤705处,检查DRR队列的指针FlowPQ,看它是否为最高效的队列。若是,则本方法跳至步骤715,在此先从最高效的DRR队列的起始处取出该流(q-remove(FlowPQ,&P->bq)),再把它排在该DRR队列的末尾(q_enq(FlowPQ,&P->bq))。随后,MoveFlowToEnd中止于步骤720。若步骤705确定被修改的队列是优先级DRR队列,而非最高效的DRR队列,则本方法跳至步骤710,在此先从优先级DRR队列的起始处取出该流,再把它排在末尾。

    参考图10所示的NextBurst子程序,若在步骤655或675处确定流缺乏在目前流的DRR循环里发出数据包的足够差额,则跳至步骤725(在图9里),在步骤725处,数据包实际上是被从流的数据包队列里取出了。

    步骤730调用“send( )”操作以把实际数据包发至传输链路上。经“send( )”操作发出的字节数累加在本地变量“sent”里。

    步骤735、740、745和750从相应DRRITEM的“差额”计数里递减方才发出的数据包长度,从而更新相应的流的DRR队列。对于缺省的类来说,这一步是F->bq(步骤740);对于非缺省的类来说,则是F->pq。不管是哪一种情形,皆需继续执行步骤750,在此从类级别DRR队列的DRR差额(p->cq)里减去数据包长度。

    在步骤755处更新一些统计值。对于各传输字节,从流的业务速率和最高速率令牌戽里移去一个令牌。对于各流和各类的统计值,递增目前统计值采集间隔里的数据包和字节数。

    步骤760递增该NextBurst(sentPkts)调用所发出的数据包数。若该计数低于请求发出的数据包的最大数量(参数maxPackets),则继续处理目前流里的下一个数据包,并经“NextPacket”指示转至步骤535。若已达maxPackets计数,则在步骤765处把控制标志“bReturn”设为“真”,接着本方法返回步骤540,以处理下一个数据包。若方才发出的数据包是处于活动状态的服务类里的最后一个数据包,则本方法在正确更新了图2里的数据结构后,检查在步骤765处所设定的“bReturn”标志。

    应当明白,上述实施例无非是用来说明本发明的原理的。熟悉本领域的技术人员可进行各种别的修改和变化,这些修改和变化也体现了本发明的原理,并被涵盖在本发明的精神和范围内。

分级式优先级循环HPRR规划.pdf_第1页
第1页 / 共36页
分级式优先级循环HPRR规划.pdf_第2页
第2页 / 共36页
分级式优先级循环HPRR规划.pdf_第3页
第3页 / 共36页
点击查看更多>>
资源描述

《分级式优先级循环HPRR规划.pdf》由会员分享,可在线阅读,更多相关《分级式优先级循环HPRR规划.pdf(36页珍藏版)》请在专利查询网上搜索。

HPRR使用令牌戽速率分类标记,从而把各数据包标记为“满足”或“不满足”该流的业务规范。各业务流皆被看成属于单一的服务类,其中一个这样的类是一种特殊的服务类,即缺省的“最高效”的服务类。HPRR方法允许按以下两种方式之一来运送业务流里的数据包:要么占用分配给该流所属类的带宽,要么占用最高效的带宽。由于为各流皆提供两条数据包传送路径,故各流总能平等地分享两种不同的类的份额:该流主要的即所属的类,和最。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1