对于到达的报文,用B表示报文的大小:
∙若Tp
∙若Tc
∙若B≤Tc,报文被标记为绿色,且Tp和Tc都减少B。
7.1.4流量监管
流量监管就是对流量进行控制,通过监督进入网络的流量速率,对超出部分的流量进行“惩罚”,使进入的流量被限制在一个合理的范围之内,从而保护网络资源和企业网用户的利益。
流量监管的原理
图1流量监管组件
如图1所示,流量监管由三部分组成:
∙Meter:
通过令牌桶机制对网络流量进行度量,向Marker输出度量结果。
∙Marker:
根据Meter的度量结果对报文进行染色,报文会被染成green、yellow、red三种颜色。
∙Action:
根据Marker对报文的染色结果,对报文进行一些动作,动作包括:
▪pass:
对测量结果为“符合”的报文继续转发。
▪remark+pass:
修改报文内部优先级后再转发。
▪discard:
对测量结果为“不符合”的报文进行丢弃。
默认情况下,green、yellow进行转发,red报文丢弃。
经过流量监管,如果某流量速率超过标准,设备可以选择降低报文优先级再进行转发或者直接丢弃。
默认情况下,此类报文被丢弃。
7.1.5流量整形
流量整形是一种主动调整流量输出速率的措施,其作用是限制流量与突发,使这类报文以比较均匀的速率向外发送。
流量整形通常使用缓冲区和令牌桶来完成,当报文的发送速度过快时,首先在缓冲区进行缓存,在令牌桶的控制下,再均匀地发送这些被缓冲的报文。
当下游设备的接口速率小于上游设备的接口速率或发生突发流量,在下游设备接口处可能出现流量拥塞的情况,此时用户可以通过在上游设备的接口出方向配置流量整形,将上游不规整的流量进行削峰填谷,输出一条比较平整的流量,从而解决下游设备的拥塞问题。
处理流程
流量整形是一种应用于接口、子接口或队列的流量控制技术,可以对从接口上经过的所有报文或某类报文进行速率限制。
下面以接口或子接口下采用单速单桶技术的基于流的队列整形为例介绍流量整形的处理流程,其处理流程如图1所示。
图1流量整形处理流程图
具体处理流程如下:
1.当报文到来的时候,首先对报文进行分类,使报文进入不同的队列。
2.若报文进入的队列没有配置队列整形功能,则直接发送该队列的报文;否则,进入下一步处理。
3.按用户设定的队列整形速率向令牌桶中放置令牌:
∙如果令牌桶中有足够的令牌可以用来发送报文,则报文直接被发送,在报文被发送的同时,令牌做相应的减少。
∙如果令牌桶中没有足够的令牌,则将报文放入缓存队列,如果报文放入缓存队列时,缓存队列已满,则丢弃报文。
4.缓存队列中有报文的时候,系统按一定的周期从缓存队列中取出报文进行发送,每次发送都会与令牌桶中的令牌数作比较,直到令牌桶中的令牌数减少到缓存队列中的报文不能再发送或缓存队列中的报文全部发送完毕为止。
队列整形后,如果该接口或子接口同时配置了端口整形,则系统还要逐级按照子接口整形速率、接口整形速率对报文流进行速率控制。
其处理流程与队列整形相似,但不需要步骤1和步骤2。
自适应流量整形
流量整形主要是为了解决下游设备的接口速率小于上游设备的接口速率,从而导致下游设备接口入方向丢包的问题。
但有些场景下,下游设备的接口速率是不确定的,上游设备无法确定应该把整形参数设置为多少。
此时可以配置自适应模板来实现自适应流量整形,通过在上游设备和下游设备间开启NQA检测,根据NQA检测到的下游设备丢包率动态调整整形参数。
自适应模板规定了:
∙NQA测试例:
通过此测试例检测下游设备接口入方向丢包率,根据检测结果调整整形参数。
∙整形速率范围:
上游设备接口出方向的整形速率上下限,整形速率在此范围内动态调整。
∙整形速率调整步长:
动态调整整形速率时,每次调整的速率大小。
∙丢包率范围:
下游设备接口入方向允许的丢包率范围。
当丢包率在此范围之内时,不调整整形速率;当丢包率过大,减小上游设备整形速率;当丢包率过小,且上游设备发生拥塞,增大上游设备整形速率。
∙整形速率增大的时间间隔:
当丢包率在阈值附近频繁变化时,就需要频繁调整整形速率,用户可以通过设置此参数,限制增大整形速率的时间间隔,避免频繁更新。
说明:
当NQA检测到丢包率过大,为避免业务数据进一步丢失,立即减小整形速率,不需要满足时间间隔的要求。
系统根据NQA检测结果中的丢包率等调整整形速率:
触发条件(必须同时满足所有条件)
动作
连续3次检测到丢包率大于自适应模板配置的丢包率上限
减小整形速率
∙连续3次检测到丢包率小于自适应模板配置的丢包率下限
∙上游发送端接口拥塞
∙距离上次增大整形速率的时间间隔超过自适应模板配置的速率增大时间间隔
增大整形速率
∙NQA连续3次检测到丢包率小于自适应模板配置的丢包率下限
∙上游发送端接口不拥塞
保持当前整形速率
丢包率在自适应模板配置的丢包率范围内
检测失败
说明:
若自适应模板未绑定NQA测试例,则整形速率取自适应模板配置的整形速率上限。
7.1.6拥塞管理
当网络间歇性的出现拥塞,且时延敏感业务要求得到比非时延敏感业务更高质量的QoS服务时,需要进行拥塞管理;如果配置拥塞管理后仍然出现拥塞,则需要增加带宽。
拥塞管理一般采用队列技术,使用不同的调度算法来发送队列中的报文流。
根据排队和调度策略的不同,设备LAN接口上的拥塞管理技术分为PQ、DRR、PQ+DRR、WRR、PQ+WRR,WAN接口上的拥塞管理技术分为PQ、WFQ和PQ+WFQ。
设备上,每个接口出方向都拥有4个或8个队列,以队列索引号进行标识,队列索引号分别为0、1、2、3或0、1、……、6、7。
设备根据本地优先级和队列之间的映射关系,自动将分类后的报文流送入各队列,然后按照各种队列调度机制进行调度。
∙PQ调度
PQ调度,针对于关键业务类型应用设计,PQ调度算法维护一个优先级递减的队列系列并且只有当更高优先级的所有队列为空时才服务低优先级的队列。
这样,将关键业务的分组放入较高优先级的队列,将非关键业务(如E-Mail)的分组放入较低优先级的队列,可以保证关键业务的分组被优先传送,非关键业务的分组在处理关键业务数据的空闲间隙被传送。
如图1所示,Queue7比Queue6具有更高的优先权,Queue6比Queue5具有更高的优先权,依次类推。
只要链路能够传输分组,Queue7尽可能快地被服务。
只有当Queue7为空,调度器才考虑Queue6。
当Queue6有分组等待传输且Queue7为空时,Queue6以链路速率接受类似地服务。
当Queue7和Queue6为空时,Queue5以链路速率接收服务,以此类推。
PQ调度算法对低时延业务非常有用。
假定数据流X在每一个节点都被映射到最高优先级队列,那么当数据流X的分组到达时,则分组将得到优先服务。
然而PQ调度机制会使低优先级队列中的报文由于得不到服务而“饿死”。
例如,如果映射到Queue7的数据流在一段时间内以100%的输出链路速率到达,调度器将从不为Queue6及以下的队列服务。
避免队列饥饿需要上游设备精心规定数据流的业务特性以确保映射到Queue7的业务流不超出输出链路容量的一定比例,这样可以使Queue7常常为空,允许调度器为低优先级队列服务。
图1PQ调度示意图
∙WRR调度
加权循环调度WRR(WeightRoundRobin)在循环调度RR(RoundRobin)的基础上演变而来,在队列之间进行轮流调度,根据每个队列的权重来调度各队列中的报文流。
实际上,RR调度相当于权值为1的WRR调度。
WRR队列示意图如图2所示。
图2WRR调度示意图
在进行WRR调度时,设备根据每个队列的权值进行轮循调度。
调度一轮权值减一,权值减到零的队列不参加调度,当所有队列的权限减到0时,开始下一轮的调度。
例如,用户根据需要为接口上8个队列指定的权值分别为4、2、5、3、6、4、2和1,按照WRR方式进行调度的结果请参见表1所示。
表1WRR调度的结果
队列索引
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
队列权值
4
2
5
3
6
4
2
1
参加第1轮调度的队列
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
参加第2轮调度的队列
Q7
Q6
Q5
Q4
Q3
Q2
Q1
-
参加第3轮调度的队列
Q7
-
Q5
Q4
Q3
Q2
-
-
参加第4轮调度的队列
Q7
-
Q5
-
Q3
Q2
-
-
参加第5轮调度的队列
-
-
Q5
-
Q3
-
-
-
参加第6轮调度的队列
-
-
-
-
Q3
-
-
-
参加第7轮调度的队列
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
参加第8轮调度的队列
Q7
Q6
Q5
Q4
Q3
Q2
Q1
-
参加第9轮调度的队列
Q7
-
Q5
Q4
Q3
Q2
-
-
参加第10轮调度的队列
Q7
-
-
Q4
Q3
Q2
-
-
参加第11轮调度的队列
-
-
Q5
-
Q3
-
-
-
参加第12轮调度的队列
-
-
-
-
Q3
-
-
-
从统计上看,各队列中的报文流被调度的次数与该队列的权值成正比,权值越大被调度的次数相对越多。
由于WRR调度的以报文为单位,因此每个队列没有固定的带宽,同等调度机会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽。
WRR调度避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点。
WRR队列还有一个优点是,虽然多个队列的调度是轮询进行的,但对每个队列不是固定地分配服务时间片——如果某个队列为空,那么马上换到下一个队列调度,这样带宽资源可以得到充分的利用。
但WRR调度无法使低延时需求业务得到及时调度。
∙DRR调度
DRR(DeficitRoundRobin)调度同样也是RR的扩展,相对于WRR来言,解决了WRR只关心报文,同等调度机会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽的问题,通过调度过程中考虑了包长的因素,从而达到调度的速率公平性。
DRR调度中,Deficit表示队列的带宽赤字,初始值为0。
每次调度前,系统按权重为各队列分配带宽,计算Deficit值,如果队列的Deficit值大于0,则参与此轮调度,发送一个报文,并根据所发送报文的长度计算调度后Deficit值,作为下一轮调度的依据;如果队列的Deficit值小于0,则不参与此轮调度,当前Deficit值作为下一轮调度的依据。
图3队列权重示意图
如图3所示,假设用户配置各队列权重为40、30、20、10、40、30、20、10(依次对应Q7、Q6、Q5、Q4、Q3、Q2、Q1、Q0),调度时,队列Q7、Q6、Q5、Q4、Q3、Q2、Q1、Q0依次能够获取20%、15%、10%、5%、20%、15%、10%、5%的带宽。
下面以Q7、Q6为例,简要描述DRR队列调度的实现过程(假设Q7队列获取400bytes/s的带宽,Q6队列获取300bytes/s的带宽)。
▪第1轮调度
Deficit[7][1]=0+400=400,Deficit[6][1]=0+300=300,从Q7队列取出一个900bytes的报文发送,从Q6队列取出一个400bytes的报文发送;发送后,Deficit[7][1]=400–900=–500,Deficit[6][1]=300–400=–100。
▪第2轮调度
Deficit[7][2]=-500+400=-100,Deficit[6][2]=-100+300=200,Q7队列Deficit值小于0,此轮不参与调度,从Q6队列取出一个300bytes的报文发送;发送后,Deficit[6][2]=200–300=–100。
▪第3轮调度
Deficit[7][3]=-100+400=300,Deficit[6][3]=-100+300=200,从Q7队列取出一个600bytes的报文发送,从Q6队列取出一个400bytes的报文发送;发送后,Deficit[7][3]=300–600=–300,Deficit[6][3]=200–500=–300。
如此循环调度,最终Q7、Q6队列获取的带宽将分别占总带宽的20%、15%,因此,用户能够通过设置权重获取想要的带宽。
但DRR调度仍然没有解决WRR调度中低延时需求业务得不到及时调度的问题。
∙WFQ调度
公平队列FQ(FairQueuing)的目的是尽可能公平地分享网络资源,使所有流的延迟和抖动达到最优:
▪不同的队列获得公平的调度机会,从总体上均衡各个流的延迟。
▪短报文和长报文获得公平的调度:
如果不同队列间同时存在多个长报文和短报文等待发送,让短报文优先获得调度,从而在总体上减少各个流的报文间的抖动。
与FQ相比,WFQ(WeightedFairQueue)在计算报文调度次序时增加了优先权方面的考虑。
从统计上,WFQ使高优先权的报文获得优先调度的机会多于低优先权的报文。
WFQ