基于队列状态的累计补偿型循环轮询不定长包调度方法

文档序号:7724476阅读:206来源:国知局
专利名称:基于队列状态的累计补偿型循环轮询不定长包调度方法
技术领域
本发明涉及电信领域,特别涉及到在各种路由器、包交换系统和综合业务接入设备中不定长包的多输入、单输出排队系统。
随着通信技术的迅猛发展,各种包交换技术,特别是IP技术日趋成熟并实用化,良好的调度算法能够节约传输带宽,降低设备的复杂度,更重要的是能够保证网络的安全性,以防恶意破坏者的攻击。
现有的调度算法中,主要有1989年第12期数字通信特别组会议录第1到12页的题为“公平排队策略的分析与仿真”(A.Demers,S.Keshav,and S.Shenker.Analysis and simulation of a fairqueuing algorithm.In Proc.ACM SIGCOMM’89,September 1989,pp1-12)公开的先到先服务策略(FCFS,First-Come-First-Serve)、公平排队策略(FQ,Fair Queuing Algorithm)和IEEE通信汇刊1987年第4期第435到438页的题为“存储器有限的包交换技术研究”(JohnNagle.On packet switches with infinite storage.IEEE Trans.on Comm.,COM-35(4),April 1987,pp.435-438.)公开的逐包调度方法(Packet-by-Packet Round Robin),先到先服务策略完全不能保证各个输入流的公平性,造成网络易于受到攻击。而公平排队策略虽然能够保证各个输入流的公平性,但却非常复杂,需要0(log(n))次复杂运算才能调度一个包,其中n为经过调度系统的流数,特别不适于高速交换网络。逐包调度算法虽然运算不很复杂,也具有一定的抗恶意攻击能力,但对不定长包交换系统,对长包和短包不是同等对待,造成不公平,在极端情况下,两个同样服务等级的流,一个流所占的输出带宽可能是另一流的Max/Min倍,上述Max、Min分别为用字节表示的最大和最小包长。
针对上述现有调度方法不能兼顾公平性和复杂度的缺陷,本发明的目的是给出一种不定长包调度算法,该方法能在在低复杂度条件下,实现不定长包的公平调度。
为达到上述目的,本发明采用的技术方案是一种基于队列状态的累计补偿型循环轮询不定长包调度方法,该方法包括以下步骤(1)初始设置循环轮询的周期N和初始轮询的队列号i=0,将各个队列的轮询等待次数计数器置零,其中N为队列数;(2)轮询第i号队列;(3)判断第i号队列是否处于“忙”状态,若是,转步骤(4)继续操作,否则转步骤(8)继续操作;(4)对轮询等待次数C清零;(5)从第i号队列中读出T字节数据;(6)判断读出的T字节数据是否正好为整数个包,如是,转步骤(18)继续操作,否则转步骤(7)继续操作;(7)将当前包输出完毕,然后转步骤(18)继续操作;(8)判断轮询等待次数计数器Ci是否为0,如是,转步骤(9)继续操作,否则转步骤(13)继续操作;(9)从第i队列中取出最前面一个包的包头,从中读出包长L;(10)计算轮询等待次数Ci=[L/P]取整,P为包长分界长度,包长大于P的分组为“长包”,包长小于等于L的分组为“短包”;(11)判断Ci是否等于0,如等于0,转步骤(17)继续操作,若Ci不为0,转步骤(12)继续操作;(12)轮询等待一次,然后转步骤(18)继续操作;(13)判断轮询等待次数计数器Ci是否为1,如不为l,转步骤(14)继续操作,否则转步骤(16)继续操作;(14)计算Ci=Ci-1;(15)轮询等待一次,然后转步骤(18)继续操作;(16)对轮询等待次数计数器Ci清零;(17)输出第i号队列的队头的包;(18)计算i=[i+1]mod T,返回上述步骤(2),准备轮询下一队列。
上述T、P的值根据系统环境决定。
从上述本发明采用的方法可以看出,由于本发明采用了轮询等待次数计数器和设置了各个输入队列的“忙”“闲”状态,可保证各个输入队列的公平性,在非拥塞情况下,由于每一队列均不能长期占用输出链路,因而某些输入队列业务量大时,也不会过分影响小业务量队列的调度,因为每一队列每次轮询最多输出(T+Max-1)字节的数据;在拥塞状态,可能各个输入队列均处于“忙”状态,轮询到每个队列均调度输出T到(T+Max-1)字节的数据,若有恶意攻击者,只能大量丢弃自己的包;由于设置了各个输入队列的“忙”“闲”状态,对某些输入队列的短时间突发包,由于每轮询一次可输出(T+Max-1)字节的数据,因而可快速缓解缓冲队列的拥塞。
由于限制了一个队列每次调度输出的字节数,可有效控制合法用户的包丢失概率。
由上看出,本发明在队列调度中兼顾公平性和复杂度,取得了公平性和易实现性的良好折衷,其特点是在网络不拥塞时,保证低丢包率,保证业务量大的输入队列不会影响低业务量队列的丢包率和时延。在网络拥塞时,确保N个缓冲队列公平地分享输出链路的容量,抗恶意攻击,因此本发明完全能够在低复杂度条件下,实现不定长包的公平调度下面结合附图和实施例对本发明作进一步的说明。


图1是多输入单输出的排队模型图;图2是本发明采用方法的流程图;图3是本发明采用方法的原理框图;图4是本发明在路由器中的应用示意图。
目前,以IP(Internet Protocol)包为代表的不定长分组业务在所有数据业务中占据越来越重要的地位,在多路接入、路由器等系统中,经常遇到多个输入、单个输出的排队模型,参考图1,由于包长是变化的,许多成熟的公平排队策略在这种情况下不能保证公平性。为了保证各个输入端口在同一输出端口处获得公平分配带宽,同时考虑缓冲队列的情况,在各种参数的控制下,设计轮询调度控制器。
包调度算法首先提取算法必要的参数,在这些参数的控制下,对N个等待输出的缓冲队列中的不定长包循环输出,根据资源公平共享和尽力控制包丢失概率的宗旨,特将输出调度控制的原则确定为确保N个缓冲队列公平地分享输出链路的容量;尽力缓解各缓冲队列的充盈程度;保证实时业务的低时延特性。在此条件限制下,以包丢失率最小为目标函数求得最佳控制模型。
该方法的基本原理是首先,轮询调度控制器控制轮询机轮流访问各个输入队列,当访问到某一队列时,根据以下的调度原则从队列中调度包交给输出端。将缓冲队列的充盈程度分为“忙”和“闲”两种状态,例如,缓冲队列缓存器的剩余容量不够容纳两个长度为L长个字节的长包的状态定义为“忙”状态,否则为“闲”状态。将等待输出的不定长分组分为“长包”和“短包”两种,例如包长大于P的分组定义为“长包”,包长小于等于P的分组定义为“短包”,对以太网中的IP包,可定义L长=1500,P=64。所有队列的输出调度控制均基于循环轮询调度算法。当被轮询的缓冲队列处于“忙”状态时,无论其它条件如何均从该队列中至少读出T个字节,当读出T个字节时,若正好读出整数包,则轮询下一队列,否则将当前包输出完毕后再轮询下一队列。当被轮询的缓冲队列处于“闲”状态时,如果该队列最前面的分组为短包则输出该分组,否则计算出该长包的长度相对于P字节的倍数M,将M-1作为该长包最终输出的轮询等待次数C,每次该队列被轮询到时C值减1,直至轮询等待次数为零时才输出该长包。
上述T、P的值根据系统环境决定。
本发明的具体实现方法如下在步骤1,初始化设置设置循环轮询的周期N(队列数)和初始轮询的队列号i=0,将各个队列的轮询等待次数计数器置零;在步骤2开始轮询,设现在轮询到第i号队列;在步骤3,判断第i号队列是否处于“忙”状态,若是,表明该队列已经快溢出了,由步骤4对轮询等待次数C清零,在步骤5中从该队列中至少读出T个字节,当读出T个字节时,在步骤6判断是否正好读出整数包,如是,则转步骤18准备轮询下一队列,否则在步骤7将当前包输出完毕后再转步骤18准备轮询下一队列。
若步骤3判断得出第i号队列不处于“忙”状态,由步骤8判断轮询等待次数计数器Ci是否为“0”,若是,表明前一轮轮询时第i个队列没有被拖欠带宽,由步骤9从第i队列中取出最前面一个包的包头,读出包长L,由步骤10计算轮询等待次数Ci=[L/P]取整,在步骤11判断Ci是否为零,如为零,说明当前包为短包,在步骤17将它调度输出,然后执行步骤18准备轮询下一队列。若Ci不为0,说明当前包为长包,等待一轮,调度机拖欠第i路约64字节的带宽,接着执行步骤18准备轮询下一队列。
若由步骤8判断轮询等待次数计数器Ci不为零,表明前一轮轮询时调度机拖欠第个i队列的带宽。再由步骤13判断轮询等待次数计数器Ci是否为1,如为1,表明前一轮轮询时调度机拖欠第个i队列的带宽足以将当前队列中的长包调度出去,由步骤16对轮询等待次数计数器Ci清零,然后在步骤17输出该队列的对头长包,最后执行步骤18准备轮询下一队列。
若由步骤13判断轮询等待次数计数器Ci不为1,表明前一轮轮询时调度机拖欠第个i队列的带宽不足以将当前队列中的长包调度出去,在步骤14再拖欠一轮,在步骤16轮询等待一次,再执行步骤18准备轮询下一队列如此反复轮询下去,保证在无队列“忙”时,近似公平调度各个队列的包,若有恶意攻击者,则由于每次调度某一队列的字节数不超过(T+Max-1)字节,不会让其占据过多的带宽,不会影响其他队列的包传输。
上述T、P的值根据系统环境决定。
本发明具体实施的相应的电路实现原理框图如图3所示。
图中的N个缓存队列为输入队列,循环轮询控制电路控制轮询顺序和总线选择,确定调度输出哪一队列,是否输出该队列的包,输出一个包还是至少输出T个字节。包长锁存为轮询机提供各个队列处于对头等待输出包的包长。队列状态指示该队列是否处于“忙”状态,轮询等待次数锁存记录Ci的值。包读出控制电路与循环轮询控制电路、总线选择器共同决定当前输出哪个队列,输出多少包。图中的数据锁存为轮询机计算提供等待时间。
为了清楚地说明本发明的原理及应用,现通过在路由器中实现本发明对本发明作进一步叙述。参考图4。图中的轮询调度模块即由本发明的算法实现。图4显示了多个端口的路由器框图,用户接口模块是路由器的输入输出口;转发处理模块对IP包继续转发,由高速交换模块按需要输出的端口交换到相应输出口的轮询调度模块,将各个输入端口传递来的包统一调度,在本端口输出;主控/管理模块通过以太网HUB与交换机对所有模块进行配置、管理。
在图4轮询调度模块的实现中,假设包长分界长度P=64,队列数为100,T=1500。图中的100个缓存队列缓存100个输入端口送来的包,循环轮询控制电路轮询到某一队列时,首先判断第该队列是否处于“忙”状态,若是,表明该队列已经快溢出了,从该队列中至少读出1500个字节,即当读出1500个字节时,若正好读出整数包,则轮询下一队列,否则将当前包输出完毕后再轮询下一队列。若该队列状态为“闲”,由轮询等待次数锁存器判断轮询等待次数是否为零,若是,则表明前一轮轮询时该队列没有被拖欠带宽。从该包长锁存器中读出包长L,计算轮询等待次数Ci=[L/64]取整,若轮询等待次数锁存器为0,说明当前包为短包,将它调度输出,再轮询下一队列。若轮询等待次数锁存器为不为0,说明当前包为长包,需要等到第Ci轮才能输出该包。
权利要求
1.一种基于队列状态的累计补偿型循环轮询不定长包调度方法,其特征在于,该方法包括以下步骤(1)初始设置循环轮询的周期N和初始轮询的队列号i=0,将各个队列的轮询等待次数计数器置零,其中N为队列数;(2)轮询第i号队列;(3)判断第i号队列是否处于“忙”状态,若是,转步骤(4)继续操作,否则转步骤(8)继续操作;(4)对轮询等待次数C清零;(5)从第i号队列中读出T字节数据;(6)判断读出的T字节数据是否正好为整数个包,如是,转步骤(18)继续操作,否则转步骤(7)继续操作;(7)将当前包输出完毕,然后转步骤(18)继续操作;(8)判断轮询等待次数计数器Ci是否为0,如是,转步骤(9)继续操作,否则转步骤(13)继续操作;(9)从第i队列中取出最前面一个包的包头,从中读出包长L;(10)计算轮询等待次数Ci=[L/P]取整,其中,P为包长分界长度,包长大于P的分组为“长包”,包长小于等于L的分组为“短包”;(11)判断Ci是否等于0,如等于0,转步骤(17)继续操作,若Ci不为0,转步骤(12)继续操作;(12)轮询等待一次,然后转步骤(18)继续操作;(13)判断轮询等待次数计数器Ci是否为1,如不为1,转步骤(14)继续操作,否则转步骤(16)继续操作;(14)计算Ci=Ci-1;(15)轮询等待一次,然后转步骤(18)继续操作;(16)对轮询等待次数计数器Ci清零;(17)输出第i号队列队头的包;(18)计算i=[i+1]mod T,返回上述步骤(2),准备轮询下一队列。
2.根据权利要求1所述的基于队列状态的累计补偿型循环轮询不定长包调度方法,其特征在于,所述包长分界长度P根据系统环境决定。
3.根据权利要求1所述的基于队列状态的累计补偿型循环轮询不定长包调度方法,其特征在于,将各个队列的状态分为“忙”“闲”两种状态,在某一队列忙时,从该队列中至少读出T个字节,其T的值根据系统环境决定。
全文摘要
本发明公开了一种基于队列状态的累计补偿型循环轮询不定长包调度方法,该方法采用了轮询等待次数计数器和设置了各个输入队列的“忙”“闲”状态,在非拥塞情况下,每一队列均不能长期占用输出链路,因而某些输入队列业务量大时,也不会过分影响小业务量队列的调度,在拥塞状态,可能各个输入队列均处于“忙”状态,轮询到每个队列均调度输出有限个字节的数据,因而可快速缓解缓冲队列拥塞,可有效控制合法用户的包丢失概率。
文档编号H04L12/42GK1290092SQ0013341
公开日2001年4月4日 申请日期2000年11月3日 优先权日2000年11月3日
发明者兰巨龙, 李鸥, 汪斌强 申请人:国家数字交换系统工程技术研究中心
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1