适于带宽变化的链路分层共享和管理域的带宽重分配方法

文档序号:7629011阅读:144来源:国知局
专利名称:适于带宽变化的链路分层共享和管理域的带宽重分配方法
技术领域
本发明涉及计算机网络通信技术领域,是对网络中带宽变化的链路进行分层管理的方法,为数据流提供服务质量保证。
背景技术
随着通信技术的不断发展,尤其是IP技术和因特网的迅速发展,使得原有的仅传输一种类型数据流的网络,如传统的电话网仅传语音,逐渐向可以承载各种流量类型数据流的包交换网络转移。为保证不同数据流地服务质量要求,需要对网络中各个链路带宽进行分配管理。对链路共享的不同需求导致需要对链路进行分层共享(hierarchical link-sharing),链路共享结构为一树状结构,根为链路总带宽,根的子节点为各个组织机构,各组织机构进一步将分配给它的带宽分配给不同的数据类,见附图1。
目前满足这种分层链路共享结构的算法有基于类的排队方法(CBQ,class-based queueing),CBQ由分类器,队列缓存,常规包调度器,估计器和链路共享调度器组成,见附图2。其工作原理为分层共享结构树中每个叶子节点为一个流量类别,分配有相应的缓存队列,输入的流量经过分类器根据过滤规则被放入相应类别的队列缓存中;常规调度器对各个类队列缓存中数据包进行调度;估计器测量每类包的离开时间间隔,检查其流速是否超过分配给它的比率。链路共享调度器根据估计器的结果,如果某类流速超出了其分配的带宽比率,则会将该类挂起,暂停其被常规调度器调度,暂停的时间是使该类发送速率符合其分配的带宽计算得来的。通过这种方式,可使当常规调度器采用基于优先级的调度方法时,低优先级的类仍可获得分配给的带宽,而不至于被饿死,从而为实时性任务提供了时延保证,同时又为其他任务提供了带宽保证。
CBQ是建立在链路带宽恒定的基础上,对于点到点的有线链路来说这种假设是合理的,但对于无线链路和共享信道的链路这种假设不成立。由于无线电波在传播过程中会受到各种干扰,为了抵抗这些干扰,一般采用自适应传送技术,即根据链路质量下降情况调整信号处理和传送方式,自适应传送技术又可进一步分为三类分级编码,分级调制和降低数据速率三类,而这些措施将导致带宽随着通信状况下降而下降。对于共享信道链路,如以太网,链路带宽随着链路负载变化而变化。由于CBQ采用的是基于优先级的包调度机制,当带宽下降时,估计器对超限的判定仍然按原来的带宽计算,这样高优先级的将挤占低优先级分配的带宽,原链路共享带宽比例结构被破坏。

发明内容
本发明的目的在于提供一种适于带宽变化的链路分层共享和管理域的带宽重分配方法。
由于带宽变化会造成CBQ带宽共享结构无法满足,因此需要采取措施消除这些影响,使链路有效带宽发生变化时,能够对包的调度进行调整,满足用户的服务质量要求。首先要使调度器能够获知下层链路的带宽变化,另外因为链路要为不同用户所共享,每个用户有不同类型的数据流类,因此在带宽下降时,要将带宽重新在各个类之间分配,满足用户的需求,带宽重分配需要满足以下目标
组织间的公平性这里公平性是指两个类别带宽比例保持原共享结构的带宽比例。即当每个组织有足够的流量时,带宽重分配应保持组织间的分配比例关系。
组织内可管理性和公平性组织内可以根据用户需求来进行带宽重分配,为用户提供通用分配策略来满足用户不同的重新分配政策,为用户提供绝对和相对保证,并且在满足用户对关键任务需求基础上,满足不同类间公平性要求。
数据流的优先级和重分配分离为满足实时业务需求,链路共享将基于优先级的调度算法纳入到其框架中,从而为实时业务提供时延保证,而用户的关键业务并不一定是实时业务,因此要将各类的优先级与重分配策略分离。
我们提出了一种适于带宽变化的分层链路共享方法和带宽重分配方法来满足这些目标。
技术方案
一种适于带宽变化的链路分层共享和基于管理域的带宽重分配方法,通过在输出缓存测量包的出队的速率和缓存队列的长度来计算当前实际的有效带宽,通知调度器根据此有效带宽调整其下传的速率,从而将输出缓存队列长度控制在一定范围内,同时使调度能够及时了解当前的有效输出带宽,进而可以根据此有效带宽,对分级共享树各类的带宽比例进行相应的调整,满足用户的服务质量要求。
所述的适于带宽变化的链路分层共享和基于管理域的带宽重分配方法,有效带宽估计和带宽调整方法,对有效的输出带宽进行估计,其方法是根据输出缓存的包的出队速率,输出缓存的队列长度及其变化对其进行估计;具体方法为在包离开缓存队列时,计算包的离开速率,并用EWMA计算包的出队速率估计,在包到达输出缓存的队列时,计算队列长度变化率,并以该变化率乘以设定系数加上当前的下行速率作为下行速率来通知调度器调整,并以队列的出口速率估计值作为约束条件,当输出缓存为空,而下行速率小于出队速率估计,说明链路带宽增加,下行速率设为出队速率估计;当队列长度小于设定队列长度控制下限时,并且队列长度变化率小于0,如计算下行速率小于出队速率估计,将其设为出队速率估计;当队列长度大于设定队列长度控制上限时,并且队列长度变化率大于0,如果计算下行速率大于出队速率估计,将其设为出队速率估计,将计算的下行速率通知给调度器,调度器根据此值计算包调度时机来调整下行速率,并对该下行速率进行EWMA估计,当估计值相对于上次用于带宽调整速率差值比例超过一定预定值,则对链路共享结构中各类带宽其进行重新分配,满足用户服务质量要求。
所述的适于带宽变化的链路分层共享和基于管理域的带宽重分配方法,基于管理域的带宽重分配方法,
将链路共享结构按组织关系和用户需求划分成不同管理域,管理域中各叶子类根据用户要求分为不同的保证级别,绝对保证类赋予最高保证级别,弹性保证类可进一步根据其重要程度分为不同级别,分级带宽重分配策略为,当链路带宽变化需要带宽调整时,将带宽按管理域分配的带宽比例分配给各个管理域,然后对管理域中各类带宽进行调整,调整的方法为保证最高级保证级带宽(即绝对保证类带宽),其所需的带宽先从最低保证级别中获取,如果不能满足再从高一级中获取,直至满足为止,如仍不满足,则按最高保证级各类比例关系分配带宽;对于弹性保证级别的服务类,如果在上述保证策略完成后还有可以得到一定带宽,则该级别的类按原有的比例分配剩余带宽,这样一方面可以为绝对保证类提供带宽保证,又可满足同级别保证类的公平性,另外使带宽保证和类的优先级分离。
本发明实现于路由器和操作系统内核中,运行于网络协议栈网络层和物理层之间,在网卡驱动的输出缓存增加了对链路有效带宽的估计,其基本思想是通过在输出缓存测量包的出队的速率和缓存队列的长度来计算当前实际的有效带宽,通知调度器根据此有效带宽调整其下传的速率,从而将输出缓存队列长度控制在一定范围内,同时使调度能够及时了解当前的有效输出带宽,进而可以根据此有效带宽,对分级共享树各类的带宽比例进行相应的调整,满足用户的服务质量要求。对有效的输出带宽进行估计,其方法是根据输出缓存的包的出队速率,输出缓存的队列长度及其变化对其进行估计,因此需要测量包的出队速率,输出缓存的队列长度及其变化,这样就涉及对输出缓存的入队函数和出队函数进行修改,以及接收到当前有效带宽时,修改包调度时机来调整下行速率以及对带宽重新分配满足用户服务质量要求,原理见附图3。具体实现如下
enqueue(p)/*入队函数*/sendbuffer.enqueue(p)/*将包加入缓存队列*/Q=(1-wq)*Q+wq*sendbuffer.length();/*公式(2)*/VQ=(Q-Qlast)/(now-last_time);/*公式(3)*/Qlast=Q;last_time=now<!-- SIPO <DP n="4"> --><dp n="d4"/>if(Q<QL &amp;&amp; VQ<0)thenVa=Va-Kp*VQ;/*公式(4)*/If(Va<Vd)thenVa=Vd;end ifnotify(Va);/*将Va反馈至调度器*/else if(Q>QU &amp;&amp; VQ>0)Va=Va-Kp*VQ;/*公式(4)*/If(Va>Vd)thenVa=Vd;end ifnotify(Va);/*将Va反馈至调度器*/end ifdeque()/*出队函数*/p=sendbuffer.dequeue()/*从缓存取一个包*/If(p!=NULL)then/*队列非空*/Vd(1-wv)*wd+wv*p.length()/(now-last_time);/*公式(1)*/last_time=now;send(p);/*发送*/elseIf(Va<Vd)thenVa=Vd;notify(Va);/*将Va反馈至调度器*/end ifend ifrecvnotify(Va)/*调度器收到输出缓存通知下传速率*/Vout=Va;V’=(1-w)V’+w*Va;/*公式(6)*/if(|V’-Vlast|/Vlast>Vth)then<!-- SIPO <DP n="5"> --><dp n="d5"/>reallocte(V’);Vlast=V’;end ifcbq_vb_dequeue()/*CBQ_VB_出队函数*/p=cbq_dequeue();/*CBQ算法取出应被调度的包*/if(sendbuffer.length()>qlimit)/*缓存满*/cbq_requeue(p);elseenqueue(p);txt_time=p.length/Va;/*计算下一次调度时机,公式(5)*/set_timer(now+txt_time);/*设置下一次该函数被调用的时间*/end if
注链路初始带宽为V,当前平均队列长度为Q,平均队列长度变化率为VQ,平均队列长度控制下界为QL,上界为QU,当前出队速率估计为Vd,当前下传速率Va,调整阈值为Vth,初始Va=V
实现说明
出队函数在出队函数中要对包的出队速度进行测量,为消除瞬间带宽变化的影响,对包出队速率采用指数权重滑动平均(EWMA)进行估计,设包的大小为L,t为测量得到的包离开的时间间隔,则第n个包离开时的估计速率
其中wv为权重值,V0是为初始速度设为链路带宽。包的出队速率可以看作是当前链路可以为上层提供的有效带宽的度量,在反馈给调度器下行速率时,它作为一个约束条件,使下行速率能快速跟上链路带宽变化,详见下面入队函数说明。
入队函数说明入队函数对输出缓存的队列长度和变化进行测量,并根据出队函数测量的有效带宽,计算调度器向输出缓存下行的速率,将此速率反馈给调度器,使其根据此速率对其包调度进行调整,一方面将输出缓存队列长度控制在一定范围内,另一方面,使调度器及时了解当前链路带宽,调整带宽分配,满足用户的服务质量要求。
由于到达缓存的数据是以包为单位,而包的大小不同,队列长度也采用EWMA估计来消除随机波动,则第n个包到达时的队列长度估计为
Qn=(1-wq)Qn-1+wqQc,n>1 (2)
其中Qc为第n个包到达时的实际队列长度,wq为权重值。因此平均队列长度变化率为
其中t为两次计算队列长度的时间间隔。
当前速率估计
Vcur=V-KpVQ (4)
其中Vcur为当前估计速率,V为上次估计速率,Kp为比例系数,VQ为队列变化率。
为平滑瞬时波动影响,设定队列上下限进行控制,当队列长度低于下限或高于上限,开始反馈速率通知对调度器下行速率进行调整,并以队列的出口速率作为约束条件,在出队函数中,当输出缓存为空,而下行速率小于出队速率,说明链路带宽增加,及时调节下行速率等于出队速率,基于同样原理对入队函数带宽反馈进行调整。
当调度器接受到反馈的速率Va,记录当前下行速率(此处假设为Vout),计算下次调度时机
T=Lcur/Vout (5)
其中T为当前时间到下次调度的时间间隔,Lcur为当前包的大小。根据此值设定定时器下次启动调度器的时间。
对下行速率进行EWMA估计
Vn’=(1-w)Vn-1’+w*Vout (6)
其中Vn’为本次估计值,Vn-1’为上次估计值,w为权重值(根据实际情况选取,一般在0.001~0.2间),当其相对于上次调整速率(Vlast)差值比例超过一定预定值Vth,则对其进行调整(见步骤S4)样可以滤掉小幅的波动,除掉不必要的调整,减少了调整频率,大幅减少算法运行时的复杂度。
由于输出缓存将下行速率反馈给调度器,一方面可以根据此速率设定定时器启动下一次调度时机,另一方面可以根据这一反馈的速率对各个类占用的带宽进行调整,来满足用户需求,我们称之为带宽重分配,由于重分配一般需要遍历共享结构树的每个节点,本方法对反馈的速率进行EWMA估计,当其相对于上次调整速率差值比例超过一定预定值Vth,则对其进行调整,这样可以滤掉小幅的波动,除掉不必要的调整,减少了调整频率,大幅减少算法运行时的复杂度。
为说明带宽重分配方法,我们首先引入下列定义(原理参见附图4)
管理域一个管理域是由以一个链路共享结构树的内部节点为根和其所有的子孙节点组成,每个管理域中采用统一的带宽重分配政策,管理域间满足公平性要求。
绝对保证类链路共享结构中,带宽重分配时需要保证原有带宽恒定的叶子类。如实时非弹性业务和需要一定带宽的数据业务。
弹性保证类链路共享结构中,带宽重分配时带宽可以随链路带宽变化的叶子类,例如具有自适应特性业务流。这两种保证类的定义是根据用户服务质量需求而来的。
分级带宽重分配策略管理域中需要为用户提供直观简洁的带宽重分配策略来满足用户需求,用户的业务流可以分为绝对保证类和弹性保证类,因此可以将各类分为不同保证级别,绝对保证类赋予最高保证级别,这部分任务应由接入控制保证在链路状况最坏的情况下能够保证其足够的带宽,弹性保证类可进一步根据其重要程度分为不同级别,分级带宽重分配策略为,当链路带宽下降时,保证最高级保证级带宽(绝对保证类),其所需的带宽先从最低保证级别中获取,如果不能满足再从高一级中获取,直至满足为止。对于弹性保证级别的服务类,如果在上述保证策略完成后还有可以得到一定带宽,则该级别的类按原有的比例分配剩余带宽,满足公平性要求。
带宽重分配方法描述首先依据机构的组织和带宽分配原则将链路共享结构树划分为不同的管理域,带宽先在每个管理域间按共享结构比例分配,每个管理域中,根据用户分配政策,将域内各叶子类分为不同的保证级,采用分级带宽重分配策略进行带宽重分配。
带宽重分配方法包含了管理域的生成和带宽重分配两部分,管理域的生成是在初始化构建带宽共享结构时完成,带宽重分配在调度其接到来自缓存队列反馈时,进行调整时被调用(见上面描述),管理域与其根节点关联并构成一个链表以便在重分配时进行遍历,每个管理域记录不同保证级别的带宽比例,并将同级保证类的叶子类链接起来,以便在重分配时进行遍历。具体实现如下
register_domain(c)/*c为链路共享结构的一个节点(类)*/if(c is domain root)thend=creat_new_domain(c);/*生成一个新管理域*/domainlist.add(d);/*将管理域加入链表*/end ifif(c is leaf)thenp=find_domain_root(c);/*找到所属管理域根节点*/d=p.domain();/*与根节点关联的管理域*//*将该类加入该管理域相应的保证级别链表中*/d.guarantee[c.gurantee_class].list.add(c);/*将分配带宽累计到该级别分配的带宽中*/d.guarantee[c.gurantee_class].bandwidth_sum+=c.allot;end ifreallocate(V)/*V为调整后速率*/d=domainlist.gethead();/*取第一个管理域*/while(d!=NULL)/*根据公式(8)计算绝对保证级别的需要的额外带宽*/f=d.guarantee
.bandwidth_sum(BW/V-1)/*BW为链路原始带宽*/fs=ffor(i=lowestclass;i>1;i--)/*从最低保证级别开始获取带宽给绝对保证级(保证级0)*/c=d.guarantee[i].list.gethead();while(c!=NULL)/*根据公式(9)调整该级别带宽比例*/<!-- SIPO <DP n="9"> --><dp n="d9"/>oldallot=c.allot;if(d.guarantee[i].bandwidth_sum>f)c.allot=c.allot_origin(1-f/d.guarantee[i].bandwidth_sum);elsec.allot=0;end ifdiff=oldallot-c.allot;p=c.parentwhile(p!=NULL &amp;&amp; p is not domain root)p.allot-=diff;end whilec=d.guarantee[i].list.getnext();end whileif(f>d.guarantee[i].bandwidtg_sum)thenf=f-d.guarantee[i].bandwidth_sumelsef=0;endend forif(f>0)thennotif_error();/*通知未能满足客户绝对保证*/end/*调整级别0(绝对保证级)的带宽比例*/f=fs-f;/*计算绝对保证级实得带宽比例(并不一定获得所需带宽)*/c=d.guarantee
.list.gethead();while(c!=NULL)oldallot=c.allot;c.allot=c.allot_origin(1-f/d.guarantee
.bandwidth_sum);diff=oldallot-c.allot;<!-- SIPO <DP n="10"> --><dp n="d10"/>p=c.parentwhile(p!=NULL &amp;&amp; p is not domain root)p.allot-=diff;end whilec=d.guarantee
.list.getnext();end whiled=domainlist.getnext();/*取下一管理域*/end while
实现说明
假设初始链路带宽为r0,某管理域的分配给最高保证级别的带宽为f0,假设链路带宽变为r1,则为保证原有最高保证级别速率,需要将其调整为f1
需要低保证级供给的带宽为
对于某一保证级别假设其初始分配带宽为f′,其包含n个类,初始分配带宽为f1′,f2′...fn′,其中f′=f1′+f2′+...+fn′,该保证级别需要供给最高级别Δf带宽,则该级别n个类的带宽分配比例应该变化为fi″(i=l,..n)满足
发明特点
适于带宽变化的链路分层共享和基于管理域的带宽重分配方法根据输出缓存测量反馈有效带宽来动态调整链路共享结构,可以屏蔽底层的特性,同时能够及时跟踪带宽变化,及时进行调整,能够满足用户提供绝对带宽保证以及域间和类间公平性。该方法中的参数选取范围宽广,在不同的参数下,都能取得良好稳定结果。
我们在仿真环境下对本文发明对原有的CBQ进行对比,仿真环境为空间站和地面用户进行通信,由于空间站和地面站之间通过无线链路进行通信,会受到各种因素干扰,如降水、大气吸收等,在链路层物理层需要采用各种措施来减轻这些干扰的影响,而这些抗干扰技术大都会造成链路带宽受到干扰时带宽下降。仿真环境如附图5所示,由空间站(国际空间站,圆形轨道,高度400公里,倾角51.6度),地面站(经度为116.46,纬度为39.92)和用户站点组成,其中站1,2属于单位A。站3,4属于单位B。分别用CBQ和本文的算法对地面站到空间站的上行链路带宽进行分配管理,链路共享结构和管理域的划分见附图6所示。各个类的流量由CBR产生,每个类的流量都超过其分配带宽以测试带宽管理效果,各类优先级设置如附图所示。仿真时间为40秒(在此期间里,空间站和地面站之间在可见范围内,即一直可以通信),对由调度器到队列缓存的所有包进行采样,计算各个类的流量,计算流量时间间隔采用1秒,实验结果见附图7。
原CBQ方法当链路带宽下降时,优先级高的流将挤占优先级低的流的带宽,无法为低优先级的类提供带宽保证,即优先级与它们获得的带宽是相关的,单位A将挤占单位B的带宽,无法保证它们之间的公平性。
本发明由于采用测量反馈机制,及时调整调度器出口速率,各个类流量在带宽变化时,满足保证级别设定,从而可以满足用户不同的带宽重分配政策,使带宽保证和队列调度的优先级分离。管理域A和B所占带宽保持原有比例,保证了管理域之间的公平性。


图l是链路带宽首先在不同的组织机构间共享图。
图2是CBQ的组成模块图。
图3是适于带宽变化的链路共享方法原理图。
图4是基于管理域的带宽重分配方法原理图。
图5是实验仿真环境图。
图6是实验链路共享结构和管理域的划分和各个类对应的流和优先级图。
图7是实验结果见附图。
图8为本发明的一个典型的应用环境图。
图9适于带宽变化的链路分层共享和基于管理域的带宽重分配方法实施步骤图。
具体实施例方式
图1是链路带宽首先在不同的组织机构间共享,各机构将其带宽进一步分在不同的流量类型数据流间共享。
图2是CBQ的组成模块原理图,它包含了分类器,缓存队列,常规调度器,流量估计器和链路共享调度器。
图3是适于带宽变化的链路共享方法原理图。其方法是根据输出缓存的包的出队速率,输出缓存的队列长度及其变化对其进行估计;具体方法为在包离开缓存队列时,计算包的离开速率,并用EWMA计算包的出队速率估计,在包到达输出缓存的队列时,计算队列长度变化率,并以该变化率乘以设定系数加上当前的下行速率作为下行速率来通知调度器调整,并以队列的出口速率估计值作为约束条件,当输出缓存为空,而下行速率小于出队速率估计,说明链路带宽增加,下行速率设为出队速率估计;当队列长度小于设定队列长度控制下限时,并且队列长度变化率小于0,如计算下行速率小于出队速率估计,将其设为出队速率估计;当队列长度大于设定队列长度控制上限时,并且队列长度变化率大于0,如果计算下行速率大于出队速率估计,将其设为出队速率估计,将计算的下行速率通知给调度器,调度器根据此值计算包调度时机来调整下行速率,并对该下行速率进行EWMA估计,当估计值相对于上次用于带宽调整速率差值比例超过一定预定值,则对链路共享结构中各类带宽其进行重新分配,满足用户服务质量要求。
图4是基于管理域的带宽重分配方法原理图,其方法是将链路共享结构按组织关系和用户需求划分成不同管理域,管理域中各叶子类根据用户要求分为不同的保证级别,绝对保证类赋予最高保证级别,弹性保证类可进一步根据其重要程度分为不同级别,分级带宽重分配策略为,当链路带宽变化需要带宽调整时,将带宽按管理域分配的带宽比例分配给各个管理域,然后对管理域中各类带宽进行调整,调整的方法为保证最高级保证级带宽(即绝对保证类带宽),其所需的带宽先从最低保证级别中获取,如果不能满足再从高一级中获取,直至满足为止,如仍不满足,则按最高保证级各类比例关系分配带宽;对于弹性保证级别的服务类,如果在上述保证策略完成后还有可以得到一定带宽,则该级别的类按原有的比例分配剩余带宽,这样一方面可以为绝对保证类提供带宽保证,又可满足同级别保证类的公平性,另外使带宽保证和类的优先级分离。图5是本发明典型应用环境,它适于对多个用户共享一条带宽变化的链路进行管理分配,保证用户服务质量要求,同时提高链路利用率。该图也是本发明进行实验的环境。
图6是链路共享结构和管理域的划分和各个类对应的流和优先级的一个实例,用来验证说明本发明。
图7是实验结果,各图中上部的虚线为链路带宽,实线为所有流的流量总合,(a)和(b)为原CBQ用于链路共享结果,(a)各个类流量与其综合流量(b)单位A和B之间占用带宽比例;(c)和(d)为本发明用于链路共享结果,其中流1,2,3,4,5,6的保证级别分别为0,1,2,0,1,2,(c)各个类流量与其综合流量(d)单位A和B之间占用带宽比例;(c)和(d)为本发明用于链路共享结果,其中流1,2,3,4,5,6的保证级别分别为0,1,0,0,1,1,(c)各个类流量与其综合流量(d)单位A和B之间占用带宽比例。
本发明适用于对带宽变化的链路进行管理,如无线链路和共享链路,该链路与路由器相连,并多个组织和用户所共享,不同组织和用户传输的数据类型多样,有实时的和非实时的数据流,有需要带宽绝对保证的数据流,又有可以自适应带宽变化的数据流,本发明实现于与该链路相连的路由器中,如附图8为本发明典型的应用环境,将本发明根据技术方案描述实现于路由器A和B中,对相连的带宽变化链路进行管理。链路共享结构和各个类的保证级别配置可以由管理员静态配置,也可以由接入控制动态配置。
各个权重值的选取可以使其值能跟上速率或队列变化,同时又能消除小幅扰动,因此wv(见公式1)和w(见技术方案recvnotify(Va)函数)取0.1~0.2,wq(见公式2)选0.01~0.1。队列上下控制限选取使队列尽量控制在一半的水平,因此队列上控制限可以选0.5~0.6,队列下控制限可以选0.4~0.5。Kp(见公式4)选取可根据链路带宽波动的实际情况设定,参考值0.000001~0.01。Vth(见技术方案recvnotify(Va)函数)可根据链路带宽波动的实际情况和服务质量要求设定,参考值为0.01。
图9是适于带宽变化的链路分层共享和基于管理域的带宽重分配方法实施步骤流程,其步骤如下
步骤S1更改网络适配器输出缓存的入队和出队函数,具体方法为出队函数修改在出队函数中要对包的出队速度进行测量,为消除瞬间带宽变化的影响,对包出队速率采用指数权重滑动平均(EWMA)进行估计,设包的大小为L,t为测量得到的包离开的时间间隔,则第n个包离开时的估计速率
其中wv为权重值,V0是为初始速度设为链路带宽,
入队函数修改入队函数对输出缓存的队列长度和变化进行测量,并根据出队函数测量的有效带宽(即出队速率),计算调度器向输出缓存下行的速率,将此速率反馈给调度器,使其根据此速率对其包调度进行调整,一方面将输出缓存队列长度控制在一定范围内,另一方面,使调度器及时了解当前链路带宽,调整带宽分配,满足用户的服务质量要求,
由于到达缓存的数据是以包为单位,而包的大小不同,队列长度也采用EWMA估计来消除随机波动,则第n个包到达时的队列长度估计为
Qn=(1-wq)Qn-1+wqQc,n>1
其中Qc为第n个包到达时的实际队列长度,wq为权重值。因此平均队列长度变化率为
其中t为两次计算队列长度的时间间隔,
当前下行速率估计为
Vcur=V-KpVQ
其中Vcur为当前下行估计速率,V为上次估计速率,Kp为比例系数,VQ为队列变化率,
为平滑瞬时波动影响,设定队列上下限进行控制,当队列长度低于下限或高于上限,开始反馈速率通知对调度器下行速率进行调整,并以队列的出口速率作为约束条件,在出队函数中,当输出缓存为空,而下行速率小于出队速率,说明链路带宽增加,及时调节下行速率等于出队速率,基于同样原理对入队函数带宽反馈进行调整。相应实现伪代码如下
enqueue(p)/*入队函数*/
sendbuffer.enqueue(p)/*将包加入缓存队列*/
Q=(1-wq)*Q+wq*sendbuffer.length();/*公式Qn=(1-wq)Qn-1+wqQc,n>1*/
VQ=(Q-Qlast)/(now-last_time);/*公式*/
Qlast=Q;
last_time=now;
if(Q<QL && VQ<0)then
Va=Va-Kp*VQ;/*公式Vcur=V-KpVQ*/
If(Va<Vd)then
Va=Vd;
end if
notify(Va);/*将Va反馈至调度器*/
else if(Q>QU && VQ>0)
Va=Va-Vp*VQ;/*公式Vcur=V-KpVQ*/
If(Va>Vd)then
Va=Vd;
end if
notify(Va);/*将Va反馈至调度器*/
end if
deque()/*出队函数*/
p=sendbuffer.dequeue()/*从缓存取一个包*/
If(P!=NULL)then/*队列非空*/
Vd=(1-wv)*Vd+wv*p.length()/(now-last_time);/*公式
*/
last_time=now;
send(p);/*发送*/
else
If(Va<Vd)then
Va=Vd;
notify(Va);/*将Va反馈至调度器*/
end if
end if
步骤S2更改调度器的出队调度函数,使其根据当前反馈的有效带宽调整包调度时机,具体方法为
当调度器接受到反馈的速率Va,记录当前下行速率此处假设为Vout,计算下次调度时机
T=Lcur/Vout
其中T为当前时间到下次调度的时间间隔,Lcur为当前包的大小,根据此值设定定时器下次启动调度器的时间,
对下行速率进行EWMA估计
Vn’=(1-w)Vn-1’+w*Vout
其中Vn’为本次估计值,Vn-1’为上次估计值,w为权重值(根据实际情况选取,一般在0.001~0.2间),当其相对于上次调整速率Vlast差值比例超过一定预定值Vth,则对其进行调整见步骤S4样可以滤掉小幅的波动,除掉不必要的调整,减少了调整频率,大幅减少算法运行时的复杂度。其实现伪代码如下
recvnotify(Va)/*调度器收到输出缓存通知下传速率*/Vout=Va;V’=(1-w)V’+w*Va;/*公式Vn’=(1-w)Vn-1’+w*Vout*/if(|V’-Vlast|/Vlast>Vth)thenreallocte(V’);Vlast=V’;end ifcbq_vb_dequeue()/*CBQ_VB_出队函数*/p=cbq_dequeue();/*CBQ算法取出应被调度的包*/if(sendbuffer.length()>qlimit)/*缓存满*/cbq_requeue(p);elseenqueue(p);txt_time=p.length/Vout;/*计算下一次调度时机,公式T=Lcur/Vout*/set_timer(now+txt_time);/*设置下一次该函数被调用的时间*/end if
步骤S3增加管理域注册模块,修改CBQ与用户的接口,增加节点的保证级别和管理域两个属性,当用户配置链路和初始化构建带宽共享结构时,构建管理域,管理域与其根节点关联并构成一个链表以便在重分配时进行遍历,每个管理域记录不同保证级别的带宽比例,并将管理域中同级保证类的叶子类链接起来,以便在重分配时进行遍历,在构建共享结构树时,各个叶子类加入其管理域相应的保证级别链表中(管理域结构见图6)。实现伪代码如下
register_domain(c)/*c为链路共享结构的一个节点(类)*/if(c is domain root)thend=creat_new_domain(c);/*生成一个新管理域*/domainlist.add(d);/*将管理域加入链表*/end ifif(c is leaf)thenp=find_domain_root(c);/*找到所属管理域根节点*/<!-- SIPO <DP n="18"> --><dp n="d18"/>d=p.domain();/*与根节点关联的管理域*//*将该类加入该管理域相应的保证级别链表中*/d.guarantee[c.gurantee_class].list.add(c);/*将分配带宽累计到该级别分配的带宽中*/d.guarantee[c.gurantee_class].bandwidth_sum+=c.allot;end if
步骤S4增加基于管理域的带宽重分配策略模块,当反馈的有效带宽超过设定阈值时见步骤S2,带宽先在每个管理域间按共享结构比例分配,每个管理域中,根据用户分配政策,将域内各叶子类分为不同的保证级,采用分级带宽重分配策略进行带宽重分配,分级带宽重分配策略为用户的业务流可以分为绝对保证类和弹性保证类,因此可以将各类分为不同保证级别,绝对保证类赋予最高保证级别,这部分任务应由接入控制保证在链路状况最坏的情况下能够保证其足够的带宽,弹性保证类可进一步根据其重要程度分为不同级别,分级带宽重分配策略为,当链路带宽下降时,保证最高级保证级带宽(绝对保证类),其所需的带宽先从最低保证级别中获取,如果不能满足再从高一级中获取,直至满足为止,对于弹性保证级别的服务类,如果在上述保证策略完成后还有可以得到一定带宽,则该级别的类按原有的比例分配剩余带宽,满足公平性要求,
假设初始链路带宽为r0,某管理域的分配给最高保证级别的带宽为f0,假设链路带宽变为r1,则为保证原有最高保证级别速率,需要将其调整为f1
需要低保证级供给的带宽为
对于某一保证级别假设其初始分配带宽为f′,其包含n个类,初始分配带宽为f1′,f2′,...fn′,其中f′=f1′+f2′+...+fn′,该保证级别需要供给最高级别Δf带宽,则该级别n个类的带宽分配比例应该变化为fi″(i=l..n)满足
实现伪代码如下
reallocate(V)/*V为调整后速率*/
d=domainlist.gethead();/*取第一个管理域*/
while(d!=NULL)
/*根据公式计算绝对保证级别的需要的额外带宽*/
f=d.guarantee
.bandwidth_sum(BW/V-1)/*BW为链路原始带宽*/
fs=f
for(i=lowestclass;i>1;i--)/*从最低保证级别开始获取带宽给绝对保证级
(保证级0)*/
c=d.guarantee[i].list.gethead();
while(c!=NULL)
/*根据式调整该级别带宽比例*/
oldallot=c.allot;
if(d.guarantee[i].bandwidth_sum>f)
c.allot=c.allot_origin(1-f/d.guarantee[i].bandwidth_sum);
else
c.allot=0;
end if
diff=oldallot-c.allot;
p=c.parent
while(p!=NULL && p is not domain root)
p.allot-=diff;
end while
c=d.guarantee[i].list.getnext();
end while
if(f>d.guarantee[i].bandwidth_sum)then
f=f-d.guarantee[i].bandwidth_sum
else
f=0;
end
end for
if(f>0)then
notif_error();/*通知未能满足客户绝对保证*/
end
/*调整级别0(绝对保证级)的带宽比例*/f=fs-f;/计算绝对保证级实得带宽比例(并不一定获得所需带宽)*/
c=d.guarantee
.list.gethead();
while(c!=NULL)
oldallot=c.allot;
c.allot=c.allot_origin(1-f.d.guarantee
.bandwidth_sum);
diff=oldallot-c.allot;
p=c.parent
while(p!=NULL && p is not domain root)
p.allot-=diff;
end while
c=d.guarantee
.list.getnext();
end while
d=domainlist.getnext();/*取下一管理域*/
end while。
权利要求
1.一种适于带宽变化的链路分层共享和基于管理域的带宽重分配方法,其特征在于,通过在输出缓存测量包的出队的速率和缓存队列的长度来计算当前实际的有效带宽,通知调度器根据此有效带宽调整其下传的速率,从而将输出缓存队列长度控制在一定范围内,同时使调度能够及时了解当前的有效输出带宽,进而可以根据此有效带宽,对分级共享树各类的带宽比例进行相应的调整,满足用户的服务质量要求。
2.根据权利要求1所述的适于带宽变化的链路分层共享和基于管理域的带宽重分配方法,其特征是有效带宽估计和带宽调整方法,对有效的输出带宽进行估计,其方法是根据输出缓存的包的出队速率,输出缓存的队列长度及其变化对其进行估计;具体方法为在包离开缓存队列时,计算包的离开速率,并用EWMA计算包的出队速率估计,在包到达输出缓存的队列时,计算队列长度变化率,并以该变化率乘以设定系数加上当前的下行速率作为下行速率来通知调度器调整,并以队列的出口速率估计值作为约束条件,当输出缓存为空,而下行速率小于出队速率估计,说明链路带宽增加,下行速率设为出队速率估计;当队列长度小于设定队列长度控制下限时,并且队列长度变化率小于0,如计算下行速率小于出队速率估计,将其设为出队速率估计;当队列长度大于设定队列长度控制上限时,并且队列长度变化率大于0,如果计算下行速率大于出队速率估计,将其设为出队速率估计,将计算的下行速率通知给调度器,调度器根据此值计算包调度时机来调整下行速率,并对该下行速率进行EWMA估计,当估计值相对于上次用于带宽调整速率差值比例超过一定预定值,则对链路共享结构中各类带宽其进行重新分配,满足用户服务质量要求。
3.根据权利要求2所述的适于带宽变化的链路分层共享和基于管理域的带宽重分配方法,其特征是基于管理域的带宽重分配方法,将链路共享结构按组织关系和用户需求划分成不同管理域,管理域中各叶子类根据用户要求分为不同的保证级别,绝对保证类赋予最高保证级别,弹性保证类可进一步根据其重要程度分为不同级别,分级带宽重分配策略为,当链路带宽变化需要带宽调整时,将带宽按管理域分配的带宽比例分配给各个管理域,然后对管理域中各类带宽进行调整,调整的方法为保证最高级保证级带宽(即绝对保证类带宽),其所需的带宽先从最低保证级别中获取,如果不能满足再从高一级中获取,直至满足为止,如仍不满足,则按最高保证级各类比例关系分配带宽;对于弹性保证级别的服务类,如果在上述保证策略完成后还有可以得到一定带宽,则该级别的类按原有的比例分配剩余带宽,这样一方面可以为绝对保证类提供带宽保证,又可满足同级别保证类的公平性,另外使带宽保证和类的优先级分离。
4.根据权利要求1或2或3所述的适于带宽变化的链路分层共享和基于管理域的带宽重分配方法,其具体步骤如下
步骤S1更改网络适配器输出缓存的入队和出队函数,具体方法为
出队函数修改在出队函数中要对包的出队速度进行测量,为消除瞬间带宽变化的影响,对包出队速率采用指数权重滑动平均进行估计,设包的大小为L,t为测量得到的包离开的时间间隔,则第n个包离开时的估计速率
其中wv为权重值,V0是为初始速度设为链路带宽,入队函数修改入队函数对输出缓存的队列长度和变化进行测量,并根据出队函数测量的有效带宽,计算调度器向输出缓存下行的速率,将此速率反馈给调度器,使其根据此速率对其包调度进行调整,一方面将输出缓存队列长度控制在一定范围内,另一方面,使调度器及时了解当前链路带宽,调整带宽分配,满足用户的服务质量要求,
由于到达缓存的数据是以包为单位,而包的大小不同,队列长度也采用EWMA估计来消除随机波动,则第n个包到达时的队列长度估计为
Qn=(1-wq)Qn-1+wqQc,n>1
其中Qc为第n个包到达时的实际队列长度,wq为权重值,因此平均队列长度变化率为
其中t为两次计算队列长度的时间间隔,
当前下行速率估计为
Vcur=V-KpVQ
其中Vcur为当前下行估计速率,V为上次估计速率,Kp为比例系数,VQ为队列变化率,
为平滑瞬时波动影响,设定队列上下限进行控制,当队列长度低于下限或高于上限,开始反馈速率通知对调度器下行速率进行调整,并以队列的出口速率作为约束条件,在出队函数中,当输出缓存为空,而下行速率小于出队速率,说明链路带宽增加,及时调节下行速率等于出队速率,基于同样原理对入队函数带宽反馈进行调整,相应实现伪代码如下
enqueue(p)/*入队函数*/
sendbuffer.enqueue(p)/*将包加入缓存队列*/
Q=(1-wq)*Q+wq*sendbuffer.length();/*公式Qn=(1-wq)Qn-1+wqQc,n>1*/
VQ=(Q-Qlast)/(now-last_time);/*公式n>1*/
Qlast=Q;
last_time=now;
if(Q<QL&&VQ<0)then
Va=Va-Kp*VQ;/*公式Vcur=V-KpVQ*/
If(Va<Vd)then
Va=Vd;
end if
notify(Va);/*将Va反馈至调度器*/
else if(Q>QU&&VQ>0)
Va=Va-Kp*VQ;/*公式Vcur=V-KpVQ*/
If(Va>Vd)then
Va=Vd;
end if
notify(Va);/*将Va反馈至调度器*/
end if
deque()/*出队函数*/
p=sendbuffer.dequeue()/*从缓存取一个包*/
If(p!=NULL)then/*队列非空*/
Vd=(1-wv)*Vd+wv*p.length()/(now-last_time);/*公式n>1*/
last_time=now;
send(p);/*发送*/
else
If(Va<Vd)then
Va=Vd;
notify(Va);/*将Va反馈至调度器*/
end if
end if
步骤S2更改调度器的出队调度函数,使其根据当前反馈的有效带宽调整包调度时机,具体方法为
当调度器接受到反馈的速率Va,记录当前下行速率,此处假设为Vout,计算下次调度时机
T=Lcur/Vout
其中T为当前时间到下次调度的时间间隔,Lcur为当前包的大小,根据此值设定定时器下次启动调度器的时间,
对下行速率进行EWMA估计
Vn’=(1-w)Vn-1’+w*Vout
其中Vn’为本次估计值,Vn-1’为上次估计值,w为权重值,当其相对于上次调整速率Vlast差值比例超过一定预定值Vth,则对其进行调整见步骤S4样可以滤掉小幅的波动,除掉不必要的调整,减少了调整频率,大幅减少算法运行时的复杂度,其实现伪代码如下
recvnotify(Va)/*调度器收到输出缓存通知下传速率*/Vout=Va;V’=(1-w)V’+w*Va;/*公式Vn’=(1-w)Vn-1’+w*Vout*/if(|V’-Vlast|/Vlast>Vth)then<dp n="c4"/>reallocte(V’);Vlast=V’;end ifcbq_vb_dequeue()/*CBQ_VB_出队函数*/p=cbq_dequeue();/*CBQ算法取出应被调度的包*/if(sendbuffer.length()>qlimit)/*缓存满*/cbq_requeue(p);elseenqueue(p);txt_time=p.length/Vort;/*计算下一次调度时机,公式T=Lcur/Vout*/set_timer(now+txt_time);/*设置下一次该函数被调用的时间*/end if
步骤S3增加管理域注册模块,修改CBQ与用户的接口,增加节点的保证级别和管理域两个属性,当用户配置链路和初始化构建带宽共享结构时,构建管理域,管理域与其根节点关联并构成一个链表以便在重分配时进行遍历,每个管理域记录不同保证级别的带宽比例,并将管理域中同级保证类的叶子类链接起来,以便在重分配时进行遍历,在构建共享结构树时,各个叶子类加入其管理域相应的保证级别链表中,实现伪代码如下
register_domain(c)/*c为链路共享结构的一个节点(类)*/if(c is domain root)thend=creat_new_domain(c);/*生成一个新管理域*/domainlist.add(d);/*将管理域加入链表*/end ifif(c is leaf)thenp=find_domain_root(c);/*找到所属管理域根节点*/d=p.domain();/*与根节点关联的管理域*//*将该类加入该管理域相应的保证级别链表中*/d.guarantee[c.gurantee_class].list.add(c);/*将分配带宽累计到该级别分配的带宽中*/<dp n="c5"/>d.guarantee[c.gurantee_class].bandwidth_sum+=c.allot;end if
步骤S4增加基于管理域的带宽重分配策略模块,当反馈的有效带宽超过设定阈值时,见步骤S2,带宽先在每个管理域间按共享结构比例分配,每个管理域中,根据用户分配政策,将域内各叶子类分为不同的保证级,采用分级带宽重分配策略进行带宽重分配,分级带宽重分配策略为用户的业务流可以分为绝对保证类和弹性保证类,因此可以将各类分为不同保证级别,绝对保证类赋予最高保证级别,这部分任务应由接入控制保证在链路状况最坏的情况下能够保证其足够的带宽,弹性保证类可进一步根据其重要程度分为不同级别,分级带宽重分配策略为,当链路带宽下降时,保证最高级保证级带宽,其所需的带宽先从最低保证级别中获取,如果不能满足再从高一级中获取,直至满足为止,对于弹性保证级别的服务类,如果在上述保证策略完成后还有可以得到一定带宽,则该级别的类按原有的比例分配剩余带宽,满足公平性要求,
假设初始链路带宽为r0,某管理域的分配给最高保证级别的带宽为f0,假设链路带宽变为r1,则为保证原有最高保证级别速率,需要将其调整为f1
需要低保证级供给的带宽为
对于某一保证级别假设其初始分配带宽为f′,其包含n个类,初始分配带宽为f1′,f2′,...fn′,其中f′=f1′+f2′+...+fn′,该保证级别需要供给最高级别Δf带宽,则该级别n个类的带宽分配比例应该变化为fi″(i=1,..n)满足
实现伪代码如下
reallocate(V)/*V为调整后速率*/
d=domainlist.gethead();/*取第一个管理域*/
while(d!=NULL)
/*根据公式计算绝对保证级别的需要的额外带宽*/
f=d.guarantee
.bandwidth_sum(BW/V-1)/*BW为链路原始带宽*/
fs=f
for(i=lowestclass;i>1;i--)/*从最低保证级别开始获取带宽给绝对保证级
(保证级0)*/
c=d.guarantee[i].list.gethead();
while(c!=NULL)
/*根据式调整该级别带宽比例*/
oldallot=c.allot;
if(d.guarantee[i].bandwidth_sum>f)
c.allot=c.allot_origin(1-f/d.guarantee[i].bandwidth_sum);
else
c.allot=0;
end if
diff=oldallot-c.allot;
p=c.parent
while(p!=NULL&&p is not domain root)
p.allot-=diff;
end while
c=d.guarantee[i].list.getnext();
end while
if(f>d.guarantee[i].bandwidth_sum)then
f=f-d.guarantee[i].bandwidth_sum
else
f=0;
end
end for
if(f>0)then
notif_error();/*通知未能满足客户绝对保证*/
end
/*调整级别0(绝对保证级)的带宽比例*/
f=fs-f;/计算绝对保证级实得带宽比例(并不一定获得所需带宽)*/
c=d.guarantee
.list.gethead();
while(c!=NULL)
oldallot=c.allot;
c.allot=c.allot_origin(1-f/d.guarantee
.bandwidth_sum);
diff=oldallot-c.allot;
p=c.parent
while(p!=NULL && p is not domain root)
p.allot-=diff;
end while
c=d.guarantee
.list.getnext();
end while
d=domainlist.getnext();/*取下一管理域*/
end while。
全文摘要
本发明涉及计算机网络通信技术领域,是对网络中带宽变化的链路进行分层管理的方法,为数据流提供服务质量保证。通过在输出缓存测量包的出队的速率和缓存队列的长度来计算当前实际的有效带宽,通知调度器根据此有效带宽调整其下传的速率,从而将输出缓存队列长度控制在一定范围内,同时使调度能够及时了解当前的有效输出带宽,进而可以根据此有效带宽,对分级共享树各类的带宽比例进行相应的调整,满足用户的服务质量要求。该方法中的参数选取范围宽广,在不同的参数下,都能取得良好稳定结果,并且可使带宽保证级和队列调度优先级分离。
文档编号H04L12/24GK1787424SQ200510130689
公开日2006年6月14日 申请日期2005年12月21日 优先权日2005年12月21日
发明者史立, 鲁士文 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1