14、QoS拥塞避免
拥塞避免通过指定报文丢弃策略来解除网络过载。拥塞避免是指通过监视网络资源(如队列或内存缓冲区)的使用情况,在拥塞发生或有加剧趋势时主动丢弃报文,通过调整网络的流量来解除网络过载的一种流量控制机制。
传统网络所面临的服务质量问题主要由拥塞引起,拥塞是指由于网络资源不足而造成速率下降、引入额外延时的一种现象。
拥塞会造成报文的传输时延、吞吐率低及资源的大量耗费。而在IP分组交换及多业务并存的复杂环境下,拥塞又极为常见。
拥塞避免和拥塞管理就是解决网络拥塞的两种流控方式。
华为设备支持以下拥塞避免功能:
1、尾部丢弃
传统的丢弃策略采用尾部丢弃的方法,同等对待所有报文,不对报文进行服务等级的区分。在拥塞发生时,队列尾部的数据报文将被丢弃,直到拥塞解除。
尾部丢弃策略会引起TCP全局同步现象。
所谓TCP全局同步现象(如下图1,三种颜色表示三条TCP连接),是指当多个队列同时丢弃多个TCP连接报文时,将造成一些TCP连接同时进入拥塞避免和慢启动状态,降低流量以解除拥塞;而后这些TCP连接又会在某个时刻同时出现流量高峰。如此反复,使网络流量忽大忽小,影响链路利用率。
图1 尾部丢包示意图
缺省情况下,接口采用尾部丢弃的丢弃策略。
2、WRED
加权随机先期检测WRED(Weighted Random Early Detection)基于丢弃参数随机丢弃报文。考虑到高优先级报文的利益并使其被丢弃的概率相对较小,WRED可以为不同业务的报文指定不同的丢弃策略。此外,通过随机丢弃报文,让多个TCP连接不同时降低发送速度,避免了TCP全局同步现象。
WRED技术为每个队列的长度都设定了阈值上下限,并规定:
当队列的长度小于阈值下限时,不丢弃报文。
当队列的长度大于阈值上限时,丢弃所有新收到的报文。
当队列的长度在阈值下限和阈值上限之间时,开始随机丢弃新收到的报文。方法是为每个新收到的报文赋予一个随机数,并用该随机数与当前队列的丢弃概率比较,如果大于丢弃概率则报文被丢弃。队列越长,报文被丢弃的概率越高。
RED通过随机地丢弃数据报文,让多个TCP连接不同时降低发送速度,从而避免了TCP的全局同步现象。使TCP速率及网络流量都趋于稳定。
图2 RED算法示意图
基于RED技术,设备实现了WRED(Weighted Random Early Detection)。
流队列支持基于DSCP或IP优先级进行WRED丢弃。
每一种优先级都可以独立设置报文丢包的上下门限及丢包率,报文到达下限时,开始丢包,随着门限的增高,丢包率不断增加,最高丢包率不超过设置的丢包率,直至到达高门限,报文全部丢弃,这样按照一定的丢弃概率主动丢弃队列中的报文,从而在一定程度上避免拥塞问题。
QoS拥塞避免应用场景举例
图2 拥塞避免应用组网图
如上图2所示,拥塞避免可以在网络产生拥塞、或者拥塞加剧时,主动丢弃优先级较低的报文,调整网络流量,缓解网络压力,以保证高优先级报文正常通过。
当两个局域网用户需要通过广域网进行通信时,由于广域网带宽小于局域网的带宽,位于广域网和局域网之间的边缘交换机将发生拥塞,此时可以通过配置拥塞避免,主动丢弃优先级较低的报文(比如数据报文等),减少网络的拥塞,保证高优先级业务正常运行,。
15、QoS拥塞管理
拥塞管理是指在网络间歇性出现拥塞,时延敏感业务要求得到比其它业务更高质量的QoS服务时,通过调整报文的调度次序来满足时延敏感业务高QoS服务的一种流量控制机制。
如果配置拥塞管理后仍然出现拥塞,则需要增加带宽。
拥塞管理一般采用队列技术,使用不同的调度算法来发送队列中的报文流。
根据排队和调度策略的不同,设备上的拥塞管理技术分为PQ、DRR、WRR、PQ+DRR和PQ+WRR。每种调度算法都是为了解决特定网络流量的问题,并对带宽资源的分配、延迟、抖动等有着十分重要的影响。
设备上,每个接口出方向都拥有8个队列,以队列索引号进行标识,队列索引号分别为0、1、2、3、4、5、6、7。设备根据本地优先级和队列之间的映射关系,自动将分类后的报文流送入各队列,然后按照各种队列调度机制进行调度。
华为设备支持以下拥塞管理功能:
1、QoS拥塞管理PQ调度
优先队列PQ(Priority Queuing)调度,就是严格按照队列优先级的高低顺序进行调度。
PQ调度,针对于关键业务类型应用设计,PQ调度算法维护一个优先级递减的队列系列并且只有当更高优先级的所有队列为空时才服务低优先级的队列。
这样,将关键业务的分组放入较高优先级的队列,将非关键业务(如E-Mail)的分组放入较低优先级的队列,可以保证关键业务的分组被优先传送,非关键业务的分组在处理关键业务数据的空闲间隙被传送。
图1 PQ调度示意图
如上图1所示,Queue7比Queue6具有更高的优先权,Queue6比Queue5具有更高的优先权,依次类推。
只要链路能够传输分组,Queue7尽可能快地被服务。只有当Queue7为空,调度器才考虑Queue6。当Queue6有分组等待传输且Queue7为空时,Queue6以链路速率接受类似地服务。
当Queue7和Queue6为空时,Queue5以链路速率接收服务,以此类推。
PQ调度算法对低时延业务非常有用。
假定数据流X在每一个节点都被映射到最高优先级队列,那么当数据流X的分组到达时,则分组将得到优先服务。
PQ调度机制会使低优先级队列中的报文得不到调度机会。
例如,如果映射到Queue7的数据流在一段时间内以100%的输出链路速率到达,调度器将从不为Queue6及以下的队列服务。
为了避免队列饥饿,上游设备需要精心规定数据流的业务特性,以确保映射到Queue7的业务流不超出输出链路容量的一定比例,这样Queue7会经常为空,低优先级队列才能得到调度机会。
PQ调度的缺点是:
拥塞发生时,如果高优先级队列中长时间有报文存在,那么低优先级队列中的报文就会得不到调度机会。
2、QoS拥塞管理WRR调度
WRR(Weighted Round Robin)调度即加权轮询调度。WRR在队列之间进行轮流调度,保证每个队列都得到一定的服务时间。
以接口有8个输出队列为例,WRR为每个队列配置一个加权值(依次为w7、w6、w5、w4、w3、w2、w1、w0),加权值表示获取资源的比重。
举个更具体的例子,一个100M的接口,配置它的WRR算法的加权值为50、50、30、30、10、10、10、10(依次对应w7、w6、w5、w4、w3、w2、w1、w0),这样可以保证最低优先级队列至少获得5M带宽,避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点。
加权循环调度WRR(Weight Round Robin)在循环调度RR(Round Robin)的基础上演变而来,在队列之间进行轮流调度,根据每个队列的权重来调度各队列中的报文流。
实际上,RR调度相当于权值为1的WRR调度。
图2 WRR调度示意图
WRR队列示意图如上图2所示。
在进行WRR调度时,设备根据每个队列的权值进行轮循调度。调度一轮权值减一,权值减到零的队列不参加调度,当所有队列的权限减到0时,开始下一轮的调度。
例如,用户根据需要为接口上8个队列指定的权值分别为4、2、5、3、6、4、2和1,按照WRR方式进行调度的结果请参见下表1所示。
从统计上看,各队列中的报文流被调度的次数与该队列的权值成正比,权值越大被调度的次数相对越多。
由于WRR调度的以报文为单位,因此每个队列没有固定的带宽,同等调度机会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽。
WRR调度避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点。
WRR队列还有一个优点是,虽然多个队列的调度是轮询进行的,但对每个队列不是固定地分配服务时间片,即如果某个队列为空,那么马上换到下一个队列调度,这样带宽资源可以得到充分的利用。
WRR调度有两个缺点:
WRR调度按照报文个数进行调度,而用户一般关心的是带宽。当每个队列的平均报文长度相等或已知时,通过配置WRR权重,用户能够获得想要的带宽;但是,当队列的平均报文长度变化时,用户就不能通过配置WRR权重获取想要的带宽。
时延敏感业务(如语音)得不到及时调度。
3、QoS拥塞管理DRR调度
DRR(Deficit Round Robin)调度同样也是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队列获取400byte/s的带宽,Q6队列获取300byte/s的带宽)。
第1轮调度
Deficit[7][1] = 0+400 = 400,Deficit[6][1] = 0+300 = 300,从Q7队列取出一个900byte的报文发送,从Q6队列取出一个400byte的报文发送;发送后,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队列取出一个300byte的报文发送;发送后,Deficit[6][2] = 200–300 =–100。
第3轮调度
Deficit[7][3] = -100+400 = 300,Deficit[6][3] = -100+300 = 200,从Q7队列取出一个600byte的报文发送,从Q6队列取出一个400byte的报文发送;发送后,Deficit[7][3] = 300–600 =–300,Deficit[6][3] = 200–500 =–300。
如此循环调度,最终Q7、Q6队列获取的带宽将分别占总带宽的20%、15%,因此,用户能够通过设置权重获取想要的带宽。
但DRR调度仍然没有解决WRR调度中低延时需求业务得不到及时调度的问题。
4、QoS拥塞管理PQ+WRR调度
PQ调度和WRR调度各有优缺点,为了克服单纯采用PQ调度或WRR调度时的缺点,PQ+WRR调度以发挥两种调度的各自优势,不仅可以通过WRR调度可以让低优先级队列中的报文也能及时获得带宽,而且可以通过PQ调度可以保证了低延时需求的业务能优先得到调度。
在设备上,用户可以配置队列的WRR参数,根据配置将接口上的8个队列分为两组,一组(例如Queue7、Queue6、Queue5)采用PQ调度,另一组(例如Queue4、Queue3、Queue2、Queue1和Queue0队列)采用WRR调度。
华为设备上只有LAN侧接口支持PQ+WRR调度。
图4 PQ+WRR混合调度示意图
PQ+WRR调度示意图如上图4所示。
在调度时,设备首先按照PQ方式调度Queue7、Queue6、Queue5队列中的报文流,只有这些队列中的报文流全部调度完毕后,才开始以WRR方式循环调度其他队列中的报文流。
Queue4、Queue3、Queue2、Queue1和Queue0队列包含自己的权值。重要的协议报文和有低延时需求的业务报文应放入采用PQ调度的队列中,得到优先调度的机会,其余报文放入以WRR方式调度的各队列中。
5、QoS拥塞管理PQ+DRR调度
与PQ+WRR相似,其集合了PQ调度和DRR调度各有优缺点。
单纯采用PQ调度时,低优先级队列中的报文流长期得不到带宽,而单纯采用DRR调度时低延时需求业务(如语音)得不到优先调度,如果将两种调度方式结合起来形成PQ+DRR调度,不仅能发挥两种调度的优势,而且能克服两种调度各自的缺点。
设备接口上的8个队列被分为两组,用户可以指定其中的某几组队列进行PQ调度,其他队列进行DRR调度。
图5 PQ+DRR调度示意图
如上图5所示,在调度时,设备首先按照PQ方式优先调度Queue7、Queue6和Queue5队列中的报文流,只有这些队列中的报文流全部调度完毕后,才开始以DRR方式调度Queue4、Queue3、Queue2、Queue1和Queue0队列中的报文流。
其中,Queue4、Queue3、Queue2、Queue1和Queue0队列包含自己的权值。
重要的协议报文以及有低延时需求的业务报文应放入需要进行PQ调度的队列中,得到优先调度的机会,其他报文放入以DRR方式调度的各队列中。
QoS拥塞管理应用场景举例
图1 拥塞管理应用组网图
如上图1所示,拥塞管理可以实现对不同的业务按照不同的优先级进行调度,在QoS方案部署中比较常用。
在企业网络中,当共享同一网络的多种业务竞争相同的资源(带宽,缓冲区等)时可能会产生拥塞,高优先级业务无法得到保证,此时客户可以为语音、视频和数据等多种不同业务标记不同的优先级,报文会根据不同优先级进入不同的队列,因此通过不同的队列调度算法可以实现对业务的差分服务。