拥塞管理与拥塞避免

拥塞管理与拥塞避免概述

拥塞避免通过指定报文丢弃策略来解除网络过载,拥塞管理通过指定报文调度次序来确保高优先级业务优先被处理。

传统网络所面临的服务质量问题主要由拥塞引起,拥塞是指由于网络资源不足而造成速率下降、引入额外延时的一种现象。拥塞会造成报文的传输时延、吞吐率低及资源的大量耗费。而在IP分组交换及多业务并存的复杂环境下,拥塞又极为常见。

拥塞避免和拥塞管理就是解决网络拥塞的两种流控方式。

拥塞避免:

拥塞避免是指通过监视网络资源(如队列或内存缓冲区)的使用情况,在拥塞发生或有加剧趋势时主动丢弃报文,通过调整网络的流量来解除网络过载的一种流量控制机制。

设备支持以下拥塞避免功能:

  • 尾部丢弃

    传统的丢弃策略采用尾部丢弃的方法,同等对待所有报文,不对报文进行服务等级的区分。在拥塞发生时,队列尾部的数据报文将被丢弃,直到拥塞解除。

    这种丢弃策略会引起TCP全局同步现象。所谓TCP全局同步现象,是指当多个队列同时丢弃多个TCP连接报文时,将造成一些TCP连接同时进入拥塞避免和慢启动状态,降低流量以解除拥塞;而后这些TCP连接又会在某个时刻同时出现流量高峰。如此反复,使网络流量忽大忽小,影响链路利用率。

  • WRED

    加权随机先期检测WRED(Weighted Random Early Detection)基于丢弃参数随机丢弃报文。考虑到高优先级报文的利益并使其被丢弃的概率相对较小,WRED可以为不同业务的报文指定不同的丢弃策略。此外,通过随机丢弃报文,让多个TCP连接不同时降低发送速度,避免了TCP全局同步现象。

    WRED技术为每个队列的长度都设定了阈值上下限,并规定:

    • 当队列的长度小于阈值下限时,不丢弃报文。
    • 当队列的长度大于阈值上限时,丢弃所有新收到的报文。
    • 当队列的长度在阈值下限和阈值上限之间时,开始随机丢弃新收到的报文。方法是为每个新收到的报文赋予一个随机数,并用该随机数与当前队列的丢弃概率比较,如果大于丢弃概率则报文被丢弃。队列越长,报文被丢弃的概率越高。

拥塞管理:

拥塞管理是指在网络间歇性出现拥塞,时延敏感业务要求得到比其它业务更高质量的QoS服务时,通过调整报文的调度次序来满足时延敏感业务高QoS服务的一种流量控制机制。

  • PQ调度

    PQ(Priority Queuing)调度,就是严格按照队列优先级的高低顺序进行调度。只有高优先级队列中的报文全部调度完毕后,低优先级队列才有调度机会。

    采用PQ调度方式,将延迟敏感的关键业务放入高优先级队列,将非关键业务放入低优先级队列,从而确保关键业务被优先发送。

    PQ调度的缺点是:拥塞发生时,如果较高优先级队列中长时间有分组存在,那么低优先级队列中的报文就会得不到调度机会。

  • 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),这样可以保证最低优先级队列至少获得5Mbit/s带宽,避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点。

    WRR还有一个优点是,虽然多个队列的调度是轮询进行的,但对每个队列不是固定地分配服务时间片:如果某个队列为空,那么马上换到下一个队列调度,这样带宽资源可以得到充分的利用。

    • WRR调度按照报文个数进行调度,而用户一般关心的是带宽。当每个队列的平均报文长度相等或已知时,通过配置WRR权重,用户能够获得想要的带宽;但是,当队列的平均报文长度变化时,用户就不能通过配置WRR权重获取想要的带宽。
    • 低延时需求业务(如语音)得不到及时调度。
  • DRR调度

    DRR(Deficit Round Robin)调度实现原理与WRR调度基本相同。

    DRR与WRR的区别是:WRR调度是按照报文个数进行调度,而DRR是按照报文长度进行调度。如果报文长度超过了队列的调度能力,DRR调度允许出现负权重,以保证长报文也能够得到调度。但下次轮循调度时该队列将不会被调度,直到权重为正,该队列才会参与DRR调度。

    DRR调度避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点,也避免了各队列报文长度不等或变化较大时,WRR调度不能按配置比例分配带宽资源的缺点。

    但是,DRR调度也具有低延时需求业务(如语音)得不到及时调度的缺点。

  • WFQ调度

    公平队列FQ(Fair Queue)的目的是尽可能公平地分享网络资源,使所有流的延迟和抖动达到最优,让不同队列获得公平的调度机会。WFQ(Weighted Fair Queue)调度即加权公平队列调度,在FQ的基础上增加了优先权方面的考虑,使高优先权的报文获得优先调度的机会多于低优先权的报文。

    WFQ能够按流的“会话”信息(协议类型、源和目的TCP或UDP端口号、源和目的IP地址、ToS域中的优先级位等)自动进行流分类,并且尽可能多地提供队列,以将每个流均匀地放入不同队列中,从而在总体上均衡各个流的延迟。在出队的时候,WFQ按流的优先级(precedence)来分配每个流应占有出口的带宽。优先级的数值越小,所得的带宽越少。优先级的数值越大,所得的带宽越多。

  • PQ+WRR/PQ+DRR/PQ+WFQ调度

    PQ调度和WRR/DRR/WFQ调度各有优缺点。单纯采用PQ调度时,低优先级队列中的报文可能长期得不到调度,而单纯采用WRR/DRR/WFQ调度时低延时需求业务得不到优先调度,“PQ+WRR/PQ+DRR/PQ+WFQ”调度方式则将两种调度方式结合起来,不仅能发挥两种调度的优势,而且能克服两种调度各自的缺点。

    用户可以借助“PQ+WRR/PQ+DRR/PQ+WFQ调度”调度方式,将重要的协议报文和有低延时需求的业务报文放入PQ队列中进行调度,并为该队列分配指定带宽;而将其他报文按各自的优先级放入采用WRR/DRR/WFQ调度的各队列中,按照权值对各队列进行循环调度。

  • CBQ调度

    基于类的加权公平队列CBQ(Class-based Queueing)是对WFQ功能的扩展,为用户提供了定义类的支持。CBQ首先根据IP优先级或者DSCP优先级、输入接口、IP报文的五元组等规则来对报文进行分类,然后让不同类别的报文进入不同的队列。对于不匹配任何类别的报文,送入系统定义的缺省类。

    • EF队列:满足低时延业务

      EF队列是具有高优先级的队列,一个或多个类的报文可以被设定进入EF队列,不同类别的报文可设定占用不同的带宽。

      设备除了提供普通的EF队列,还支持一种特殊的EF队列—LLQ队列,时延更低。这为对时延敏感的应用(如VoIP业务)提供了良好的服务质量保证。

      由于EF队列中的报文一般是语音报文(VoIP),采用的是UDP报文,所以没有必要采用WRED的丢弃策略,采用尾丢弃策略即可。

    • AF队列:满足需要带宽保证的关键数据业务

      每个AF队列分别对应一类报文,用户可以设定每类报文占用的带宽。在系统调度报文出队的时候,按用户为各类报文设定的带宽将报文出队发送,可以实现各个类的队列的公平调度。当接口有剩余带宽时,AF队列按照权重分享剩余带宽。同时,在接口拥塞的时候,仍然能保证各类报文得到用户设定的最小带宽。

      对于AF队列,当队列的长度达到队列的最大长度时,缺省采用尾丢弃的策略,但用户还可以选择用WRED丢弃策略。

    • BE队列:满足不需要严格QoS保证的尽力发送业务

      当报文不匹配用户设定的所有类别时,报文被送入系统定义的缺省类。虽然允许为缺省类配置AF队列,并配置带宽,但是更多的情况是为缺省类配置BE队列。BE队列使用WFQ调度,使所有进入缺省类的报文进行基于流的队列调度。

      对于BE队列,当队列的长度达到队列的最大长度时,缺省采用尾丢弃的策略,但用户还可以选择用WRED丢弃策略。

拥塞避免原理描述

拥塞避免(Congestion Avoidance)是指通过监视网络资源(如队列或内存缓冲区)的使用情况,在拥塞发生或有加剧的趋势时主动丢弃报文,通过调整网络的流量来解除网络过载的一种流控机制。

拥塞避免常用的两种丢弃报文方式为:尾部丢包策略和WRED。

  • 传统的尾部丢包策略

    传统的丢包策略采用尾部丢弃(Tail-Drop)的方法。当队列的长度达到最大值后,所有新入队列的报文(缓存在队列尾部)都将被丢弃。

    这种丢弃策略会引发TCP全局同步现象,导致TCP连接始终无法建立。所谓TCP全局同步现象如图,三种颜色表示三条TCP连接,当同时丢弃多个TCP连接的报文时,将造成多个TCP连接同时进入拥塞避免和慢启动状态而导致流量降低,之后又会在某个时间同时出现流量高峰,如此反复,使网络流量忽大忽小。

    尾丢弃

    图:尾部丢包示意图

  • WRED

    为避免TCP全局同步现象,出现了RED(Random Early Detection)技术。RED通过随机地丢弃数据报文,让多个TCP连接不同时降低发送速度,从而避免了TCP的全局同步现象。使TCP速率及网络流量都趋于稳定。

    RED

    图:WRED丢包示意图

拥塞管理原理描述

随着生活质量的提高,网络业务种类繁多,人们对网络质量的要求也越来越高,有限的带宽与超负荷的网络需求产生冲突,造成网络中时常会出现延迟、信号丢失等情况,这些都是由于拥塞产生的。当网络间歇性的出现拥塞,且时延敏感业务要求得到比非时延敏感业务更高质量的QoS服务时,需要进行拥塞管理;如果配置拥塞管理后仍然出现拥塞,则需要增加带宽。拥塞管理一般采用队列技术,使用不同的调度算法来发送队列中的报文流。

根据排队和调度策略的不同,WAN接口和二层VE接口上的拥塞管理技术分为PQ、WFQ和PQ+WFQ,设备其余LAN接口上的拥塞管理技术分为PQ、DRR、PQ+DRR、WRR、PQ+WRR。

设备上,每个接口出方向都拥有4个或8个队列,以队列索引号进行标识,队列索引号分别为0、1、2、3或0、1、2、3、4、5、6、7。设备根据本地优先级和队列之间的映射关系,自动将分类后的报文流送入各队列,然后按照各种队列调度机制进行调度。下面以每个接口8个队列对各种调度方式进行说明。

PQ调度:

PQ调度,针对于关键业务类型应用设计,PQ调度算法维护一个优先级递减的队列系列并且只有当更高优先级的所有队列为空时才服务低优先级的队列。这样,将关键业务的分组放入较高优先级的队列,将非关键业务(如E-Mail)的分组放入较低优先级的队列,可以保证关键业务的分组被优先传送,非关键业务的分组在处理关键业务数据的空闲间隙被传送。

PQ调度过程如下图:

PQ

图:PQ调度过程示意图

如上图Queue7比Queue6具有更高的优先权,Queue6比Queue5具有更高的优先权,依次类推。只要链路能够传输分组,Queue7尽可能快地被服务。只有当Queue7为空,调度器才考虑Queue6。当Queue6有分组等待传输且Queue7为空时,Queue6以链路速率接受类似地服务。当Queue7和Queue6为空时,Queue5以链路速率接收服务,以此类推。

PQ调度算法对低时延业务非常有用。假定数据流X在每一个节点都被映射到最高优先级队列,那么当数据流X的分组到达时,则分组将得到优先服务。

然而PQ调度机制会使低优先级队列中的报文得不到调度机会。例如,如果映射到Queue7的数据流在一段时间内以100%的输出链路速率到达,调度器将从不为Queue6及以下的队列服务。

为了避免队列饥饿,上游设备需要精心规定数据流的业务特性,以确保映射到Queue7的业务流不超出输出链路容量的一定比例,这样Queue7会经常为空,低优先级队列中的报文才能得到调度机会。

WRR调度:

加权循环调度WRR(Weight Round Robin)在循环调度RR(Round Robin)的基础上演变而来,在队列之间进行轮流调度,根据每个队列的权重来调度各队列中的报文流。实际上,RR调度相当于权值为1的WRR调度。

WRR队列示意图如下图所示:

WRR

图:WRR调度示意图

在进行WRR调度时,设备根据每个队列的权值进行轮循调度。调度一轮权值减一,权值减到零的队列不参加调度,当所有队列的权限减到0时,开始下一轮的调度。例如,用户根据需要为接口上8个队列指定的权值分别为4、2、5、3、6、4、2和1。

各队列中的报文流被调度的次数与该队列的权值成正比,权值越大被调度的次数相对越多。由于WRR调度的以报文为单位,因此每个队列没有固定的带宽,同等调度机会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽。

WRR调度避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点。WRR队列还有一个优点是,虽然多个队列的调度是轮询进行的,但对每个队列不是固定地分配服务时间片——如果某个队列为空,那么马上换到下一个队列调度,这样带宽资源可以得到充分的利用。但WRR调度无法使低延时需求业务得到及时调度。

DRR调度:

DRR(Deficit Round Robin)调度同样也是RR的扩展,相对于WRR来言,解决了WRR只关心报文,同等调度机会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽的问题,在调度过程中考虑包长的因素以达到调度的速率公平性。

DRR调度中,Deficit表示队列的带宽赤字,初始值为0。每次调度前,系统按权重为各队列分配带宽,计算Deficit值,如果队列的Deficit值大于0,则参与此轮调度,发送一个报文,并根据所发送报文的长度计算调度后Deficit值,作为下一轮调度的依据;如果队列的Deficit值小于0,则不参与此轮调度,当前Deficit值作为下一轮调度的依据。

DRR

图:DRR调度示意图

假设用户配置各队列权重为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队列取出一个500byte的报文发送;发送后,Deficit[7][3] = 300–600 =–300,Deficit[6][3] = 200–500 =–300。

    如此循环调度,最终Q7、Q6队列获取的带宽将分别占总带宽的20%、15%,因此,用户能够通过设置权重获取想要的带宽。

但DRR调度仍然没有解决WRR调度中低延时需求业务得不到及时调度的问题。

WFQ调度:

公平队列FQ(Fair Queuing)的目的是尽可能公平地分享网络资源,使所有流的延迟和抖动达到最优:

  • 不同的队列获得公平的调度机会,从总体上均衡各个流的延迟。
  • 短报文和长报文获得公平的调度:如果不同队列间同时存在多个长报文和短报文等待发送,让短报文优先获得调度,从而在总体上减少各个流的报文间的抖动。

与FQ相比,WFQ(Weighted Fair Queue)在计算报文调度次序时增加了优先权方面的考虑。从统计上,WFQ使高优先权的报文获得优先调度的机会多于低优先权的报文。

WFQ调度在报文入队列之前,先对流量进行分类,有两种分类方式:

  • 按流的“会话”信息分类:

    根据报文的协议类型、源和目的TCP或UDP端口号、源和目的IP地址、ToS域中的优先级位等自动进行流分类,并且尽可能多地提供队列,以将每个流均匀地放入不同队列中,从而在总体上均衡各个流的延迟。在出队的时候,WFQ按流的优先级(precedence)来分配每个流应占有带宽。优先级的数值越小,所得的带宽越少。优先级的数值越大,所得的带宽越多。这种方式只有CBQ的default-class支持。

  • 按优先级分类:

    通过优先级映射把流量标记为本地优先级,每个本地优先级对应一个队列号。每个接口预分配8个队列,报文根据队列号进入队列。默认情况,队列的WFQ权重相同,流量平均分配接口带宽。用户可以通过配置修改权重,高优先权和低优先权按权重比例分配带宽。

WFQ

图:WFQ调度示意图

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调度。

PQ+WRR调度示意图如下:

PQ+WRR

图:PQ+WRR混合调度示意图

在调度时,设备首先按照PQ方式调度Queue7、Queue6、Queue5队列中的报文流,只有这些队列中的报文流全部调度完毕后,才开始以WRR方式循环调度其他队列中的报文流。Queue4、Queue3、Queue2、Queue1和Queue0队列包含自己的权值。重要的协议报文和有低延时需求的业务报文应放入采用PQ调度的队列中,得到优先调度的机会,其余报文放入以WRR方式调度的各队列中。

PQ+DRR调度:

与PQ+WRR相似,其集合了PQ调度和DRR调度各有优缺点。单纯采用PQ调度时,低优先级队列中的报文流长期得不到带宽,而单纯采用DRR调度时低延时需求业务(如语音)得不到优先调度,如果将两种调度方式结合起来形成PQ+DRR调度,不仅能发挥两种调度的优势,而且能克服两种调度各自的缺点。

设备接口上的8个队列被分为两组,用户可以指定其中的某几组队列进行PQ调度,其他队列进行DRR调度。

PQ

图:PQ+DRR调度示意图

如上图,在调度时,设备首先按照PQ方式优先调度Queue7、Queue6和Queue5队列中的报文流,只有这些队列中的报文流全部调度完毕后,才开始以DRR方式调度Queue4、Queue3、Queue2、Queue1和Queue0队列中的报文流。其中,Queue4、Queue3、Queue2、Queue1和Queue0队列包含自己的权值。

重要的协议报文以及有低延时需求的业务报文应放入需要进行PQ调度的队列中,得到优先调度的机会,其他报文放入以DRR方式调度的各队列中。

PQ+WFQ调度:

与PQ+WRR相似,其集合了PQ调度和WFQ调度各有优缺点。单纯采用PQ调度时,低优先级队列中的报文流长期得不到带宽,而单纯采用WFQ调度时低延时需求业务(如语音)得不到优先调度,如果将两种调度方式结合起来形成PQ+WFQ调度,不仅能发挥两种调度的优势,而且能克服两种调度各自的缺点。

设备接口上的8个队列被分为两组,用户可以指定其中的某几组队列进行PQ调度,其他队列进行WFQ调度。V200R008C30及以前版本,只有WAN侧接口支持PQ+WFQ调度。V200R008C50及以后版本,WAN侧接口和二层VE接口支持PQ+WFQ调度。

PQ+WFQ

图:PQ+WFQ调度示意图

如上图,在调度时,设备首先按照PQ方式优先调度Queue7、Queue6和Queue5队列中的报文流,只有这些队列中的报文流全部调度完毕后,才开始以WFQ方式调度Queue4、Queue3、Queue2、Queue1和Queue0队列中的报文流。其中,Queue4、Queue3、Queue2、Queue1和Queue0队列包含自己的权值。

重要的协议报文以及有低延时需求的业务报文应放入需要进行PQ调度的队列中,得到优先调度的机会,其他报文放入以WFQ方式调度的各队列中。

CBQ调度:

CBQ(Class-based Queueing)基于类的加权公平队列是对WFQ功能的扩展,为用户提供了定义类的支持。CBQ首先根据IP优先级或者DSCP优先级、输入接口、IP报文的五元组等规则来对报文进行分类,然后让不同类别的报文进入不同的队列。对于不匹配任何类别的报文,送入系统定义的缺省类。

CBQ

图:CBQ调度示意图

CBQ提供三类队列:

  1. EF队列:满足低时延业务
  2. AF队列:满足需要带宽保证的关键数据业务BE队列:满足不需要
  3. 严格QoS保证的尽力发送业务
  • 确保转发队列(AF):可以保证在网络发送的业务流量没有超过最小可确保带宽的情况下,此队列中报文的丢失概率非常低。确保转发适用于流量较大,且需要被保证的业务。

  • 加速转发队列(EF):匹配规则的报文进入EF队列后,进行绝对优先级调度,仅当EF队列中的报文调度完毕后,才会调度其他队列中的报文。而且当AF或BE队列有空闲带宽时,EF队列可以对空闲带宽进行占用。加速转发适用于需要保证低延时、低丢弃概率、确保带宽、且占用带宽不是很大的业务,例如语音报文。

    设备除了提供普通的EF队列,还支持一种特殊的EF队列—LLQ队列。LLQ队列较EF队列而言,时延更低。

  • 尽力而为队列(BE):与系统定义的缺省类default-class关联使用,未进入AF队列和EF队列的剩余报文进入BE队列。BE队列使用WFQ算法调度,队列数越多,带宽被分享的越公平,但是占用的队列资源相对也多。WFQ调度的BE队列适用于那些对时延和丢包无特殊要求的业务,例如普通上网业务。

思科和华为WFQ的对比:

Cisco WFQ(4096子队列):

  1. 入队方式:基于流(通过6元组做Hash)。

  2. 调度方式:FT=finish time, FT=packert length/(IPP+1)

    cisco优化后的公式:weight=32284/(IP优先级+1)。

  3. 丢弃方式:CDT(8)和HQO(总队列长度)(10)。

HUAWEI WFQ:

  1. 入队方式:基于流,只用于CBQ中的default-class。

    ​ 基于类,用于接口下配置。

  2. 调度方式:基于类的调度,为每一个自队列都分配一个权重,从而计算子队列的带宽。

    ​ 基于流的调度机制见上面WFQ部分的介绍。

  3. 丢弃方式:Tail-drop。

    ​ WRED。

各种队列调度技术的优缺点:

队列技术 调度的时延/抖动(在速率低的时候明显,速度绝对高的时候可忽略) 公平性
FIFO
RR 依赖包长
WRR 依赖包长
PQ 高优先级队列的时延控制非常好
CQ 配置字节数小的时候,带宽分配不准确,当 配置字节数大的时候,时延抖动比较大差 一般
WFQ 时延控制较好,抖动小

(一)FIFO:

优点:

  1. 简单。

缺点:

  1. 没有公平性,不同的流之间不互相隔离,当某一个流的带宽太大的时候会占用其他流的带宽,并且造成其他流的时延增加。
  2. 当拥塞发生的时候,FIFO对一部分报文进行丢弃。TCP的连接发现有丢包后,会降低传输的速度,来主动的避免拥塞,但是UDP是非连接的,不降低发送速率。导致FIFO中TCP和UDP的报文不平衡,TCP的流量太低。
  3. 一条流的突发流量可能占用全部buffer,将其他的流量全都阻断。

(二)RR:

优点:

  1. 隔离了不同的流,实现了队列之间对带宽的平等利用。
  2. 剩余带宽能够被其他队列平均分配。

缺点:

  1. 无法设置队列占用带宽的权重;
  2. 当不同队列中的报文长度不一的时候,调度不准确;
  3. 当调度速率低的时候,时延和抖动的问题比较突出,比如一个包到达一个空队列,而这个队列刚刚被调度完毕,则这个包要等到其他全部的队列调度完才能取得出接口的机会,这样会导致抖动比较大,但是如果调度速度非常高,则这种时延可以忽略,RR在高速路由器内部有很多应用。

(三)WRR:

优点:

  1. 能够按照权重来分配带宽,某个队列的剩余带宽能够为其他队列公平占用,低优先级的队列同样能够得到调度,不存在饥饿的问题。
  2. 实现简单、复杂度低。
  3. 适合diffserv聚合后的端口。

缺点:

  1. 与RR调度算法一致,在报文长度不一致的时候,调度不准确。
  2. 在调度速率低的时候报文的时延控制的不好,时延抖动无法预期。

(四)PQ

优点:

  1. 高优先级队列的时延控制非常好。
  2. 实现简单,能够区分多种业务。

缺点:

  1. 无法做到带宽的合理分配,高优先级的流量比较大的时候,导致低优先级的“饿死(starvation)”。
  2. 高优先级的时延得到保证的代价是牺牲低优先级的时延。
  3. 如果高优先级传送TCP流量,低优先级传送UDP流量,则TCP增加传送速率,导致UDP流量无法得到足够的带宽。

(五)CQ

优点:

  1. 按照比例来分配带宽,当某个队列的流量小的时候,其他队列能等比的占用带宽。
  2. 实现简单。

缺点:

  1. 当配置字节数小的时候,带宽分配不准确,当配置字节数大的时候,时延抖动比较大。

(六)WFQ

优点:

  1. 按照字节粒度进行调度,调度公平。
  2. 能区分业务,分配权重。
  3. 时延控制的好,抖动小。

缺点:

  1. 实现复杂。

配置命令行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
display drop-profile
//查看WRED丢弃模板的配置信息。
display qos queue statistics
//查看接口上基于队列的流量统计信息。
display qos queue-profile
//查看已配置的队列模板信息。
dscp discard-percentage
//配置基于DSCP优先级的WRED模板参数,包括丢弃上下门限百分比和最大丢弃概率。
//缺省情况下,WRED模板的丢弃下限百分比为30
//丢弃上限百分比为100,最大丢弃概率值为10。
ip-precedence discard-percentage
//配置基于IP优先级的WRED模板参数,包括丢弃上下限百分比和最大丢弃概率。
drop-profile
//在系统视图下,创建丢弃模板并进入丢弃模板视图
//在流行为中为AF队列或使用WFQ方式调度的BE队列绑定丢弃模板。
qos queue-profile
//在接口下应用队列模板。
//创建队列模板并进入队列模板视图
queue af bandwidth
//配置对匹配一定规则的某一类报文进行确保转发
//(Assured-forwarding),并配置可确保的最小带宽。
queue drop-profile
//在队列模板中为指定队列绑定丢弃模板。
queue ef
//配置对匹配一定规则的某一类报文进行加速转发
//(Expedited-forwarding),并配置最大允许带宽。
//cbs:指定承诺突发尺寸,即瞬间能够通过的承诺突发流量。
//pct:指定可确保的最大带宽占接口可用带宽的百分比。
queue length
//在队列模板中配置各队列的长度。
queue-length
//在流行为中配置队列的最大长度。
queue llq
//配置对匹配一定规则的某一类报文进行低延时转发,并配置允许的最大带宽。
queue weight
//用来在队列模板中配置队列的权重。
queue wfq
//用来配置缺省类报文进入使用WFQ方式调度的BE队列,并配置队列的总数。
//缺省情况下,系统未配置缺省类报文进入使用WFQ方式调度的BE队列。
reset qos queue statistics
//清除接口上基于队列的流量统计信息。
schedule
//在队列模板中配置各队列之间的调度关系。
wred { dscp | ip-precedence }
//用来指定当前WRED丢弃模板基于DSCP优先级或IP优先级进行丢弃。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//配置拥塞管理和拥塞避免示例:
drop-profile data #
wred dscp
dscp af31 low-limit 40 high-limit 60 discard-percentage 40
dscp af32 low-limit 50 high-limit 70 discard-percentage 30
#
drop-profile video
wred dscp
dscp af43 low-limit 60 high-limit 80 discard-percentage 20
#
qos queue-profile queue-profile1
queue 3 drop-profile data
queue 4 drop-profile video
schedule wfq 3 to 4 pq 5
#

参考资料:华为HedEx文档


坚持原创技术分享,您的支持将鼓励我继续创作!