Qos拥塞管理原理

拥塞现象的产生:

在这里插入图片描述
拥塞发生的主要场景:

  1. 速率不匹配:报文从高速链路进入设备,再由低速链路转发出去。
  2. 汇聚问题:报文从多个接口同时进入设备,由一个没有足够带宽的接口转发出去。

拥塞可能会引发一系列的负面影响:

  1. 增加了报文传输的时延和抖动。
  2. 过高的延迟会引起报文重传。
  3. 使网络的有效吞吐率降低,造成网络资源的损害。
  4. 加剧耗费大量的网络资源(特别是存储资源),不合理的资源分配甚至可能导致系统陷入资源死锁而崩溃。

拥塞管控概述:

拥塞管理,是在流量发生拥塞时,保证重要的流量能够通过,普通流量不会饿死。

在这里插入图片描述

队列调度机制由两部分组成:硬件队列和软件队列。硬件队列也叫发送队列(Transmit Queue,TxQ),接口驱动在逐个传输数据包的时候需要使用这个队列,这个队列是FIFO队列。软件队列根据QoS的要求把数据包调度到硬件队列,软件队列可以使用多种调度方式。数据包在硬件队列已满的情况下才进入软件队列调度。

硬件队列的长度跟接口的带宽设置有关,接口带宽大,传输时延就小,因此队列长度可以设得长一些,反之,队列长度要设得小一些。合理设置硬件队列长度非常关键,硬件队列长度过长会影响软件队列执行策略的效果,因为硬件队列是使用FIFO机制进行调度的;硬件队列长度太短会影响调度的效率,导致链路利用率降低和CPU占用过高。我们现在学习的就是硬件队列满的情况,如何通过软件队列进行拥塞管理。

第一步:队列映射(针对的是软件队列)

在这里插入图片描述
LP(本地优先级,又称为内部优先级):优先级映射实现从数据原始携带的QoS优先级到内部优先级或从内部优先级到QoS优先级的映射。

对于进入设备的报文,设备将报文携带的优先级或者端口优先级映射为内部优先级,然后根据内部优先级与队列之间的映射关系确定报文进入的队列。

一般802.1p优先级和队列索引一样。DSCP则是每8个优先级对应一个索引,例如0-7对应队列索引0;8-15对应队列索引1。

第二步:软件队列调度

常见的队列调度算法:

一、Queue-profile队列

1. FIFO:(先进先出)
在这里插入图片描述
优点:简单。

缺点:

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

2.PQ(优先队列)
在这里插入图片描述
常规情况下PQ有四个级别的队列,分别为Top、Middle、Normal、Bottom,不过目前的设备大部分都实现了8个优先级队列,只要相对高的优先级队列有报文,就一直从高优先级队列取报文。PQ具有如下特征:

  1. 可以使用ACL对报文进行分类,根据需要将报文入队列。
  2. 报文丢弃策略采用Tail Drop机制,且只有这一种机制。
  3. 队列长度可以设置为0,表示该队列无穷大,即进入该队列的报文不会被Tail Drop机制丢弃,除非内存耗尽了。
  4. 队列内部使用FIFO逻辑。
  5. 当从队列调度报文时,先从高优先级的队列调度报文。

从PQ特点可以看出,PQ保证某类流量尽可能得到最好的服务,而不管其它流量的“死活”。

优点:

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

缺点:

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

3.RR(循环调度)
在这里插入图片描述
按照顺序,依次从每个队列按照每一个数据包为单位,取出发送。

优点:

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

缺点:

  1. 无法设置队列占用带宽的权重。
  2. 因为是按照数据包为单位进行调度的,当不同队列中的报文长度不一的时候,调度不准确。

4.WRR(加权轮询调度)
WRR(Weighted Round Robin)主要针对RR不能设置权重的不足,在轮询的时候,每个队列享受的机会和该队列的权重成比例(每个队列一个周期内调度报文的与权重成比例)。WRR对于空的队列直接跳过,调度一周结束的时间变短,因此当某个队列的流量小的时候,剩余带宽能够被其他队列按照比例占用。

举例:
在这里插入图片描述
在进行WRR调度时,设备根据每个队列的权值进行轮循调度。调度一轮 权值减一权值减到零的队列不参加调度,当所有队列的权限减到0时,开始下-轮的调度。例如,用户根据需要为接口上8个队列(q7、q6、q5、q4、q3、q2、ql)指定的权值分别为4、2、5、3、6、4、2和1,按照WRR方式进行调度的结果请参见下表。
在这里插入图片描述

优点:

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

缺点:

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

5.DRR(赤字轮询调度)
DRR (Deficit Round Robin)调度同样也是RR的扩展,相对于WRR而言,解决了WRR只关心报文并不关心报文大小的问题,所以同等调度机会下,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初始值: Deficit[7][1] = 0+400 = 400,Deficit[6][1]= 0+300= 300,都大于0,参与调度,如图所示。从Q7队列取出一个900Byte的报文发送,从Q6队列取出一个400Byte的报文发送;发送后,Deficit[7][1] = 400 - 900= -500,Deficit[6][1]= 300 - 400= -100。

第2轮调度:
先判定Deficit初始值: 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。整个调度过程如此反复,每个队列都根据各自的Deficit 和权值决定服务的量,最终Q7、Q6队列获取的带宽将分别占总带宽的20%、15%,因此,用户能够通过设置权值。获取想要的带宽。但DRR调度仍然没有解决WRR调度中低延时需求业务得不到及时调度的问题。

6.WFQ队列(加权公平队列)
WFQ相较于其他队列技术能提供较好的公平性保证,它具备FQ的公平性。

FQ把进入一个队列的报文称为流,系统对待每个流是均等的,每个流都会平等地分享到当前可用的带宽。例如,接口带宽值为1M,系统当前有10个流,则每个流的带宽为100kbit/s。而下一时刻,若系统中有20个流,则每个流的带宽为50kbit/s。但这种过度公平并不能让某个流队列持续得到“静态分配”(固定)的带宽,流多了,分享到的带宽就少了,这是这种动态FQ (Fair Queue)的不足。

FQ还关心流队列中报文的长度,如果在不同队列间同时存在多个长报文和短报文等待发送,则短报文会优先获得调度,即先调度各队列队首的小报文,这使FQ可减缓各个流的报文间的抖动。

与FQ相比,WFQ (Weighted Fair Queue) 在上述小报文优先的基础上,在计算报文调度次序时增加了优先级方面的考虑。从统计上,WFQ使高优先级的报文获得优先调度的机会多于低优先级的报文。华为在报文入队列之前,先对流量进行分类,通过优先级映射,给流量-一个本地优先级,每个本地优先级对应一一个队列号。 每个接口有8个队列,报文根据队列号进入队列。默认情况下,每个队列的WFQ权值相同,队列间流量平均分配接口带宽。用户可以通过配置修改默认权值(值为10), 使高优先级和低优先级按权值比例分配带宽。

故相比其他队列调度技术,WFQ使高优先级的报文及短小报文更易于获得优先调度的机会。
在这里插入图片描述
举例:
接口中当前有8个流,它们的权重值分别为1、2、3、4、5、6、7、8。则带宽的总配额将是所有权重值之和,即:1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36。每个流所占带宽比例为:各自的权重/带宽的总配额。即,每个流可得的带宽比例分别为:1/36、2/36、3/36、4/36、5/36、6/36、7 /36、8/36。由此可见,WFQ在保证公平的基础上对不同优先级的业务体现权值,而权值依赖于IP报文头中所携带的IP优先级。

优点:

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

缺点:实现复杂。

7.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调度的各队列中,并按照相应权值对各队列进行循环调度。PQ队列的报文永远优于其他队列的报文先被调度。

报文按照优先级映射进入接口的各个队列后,在从接口发送出去时需要按照一定的规则进行调度。设备上不同接口支持不同的调度模式,队列调度时,先调度PQ队列,多个PQ队列按优先级高低顺序进行调度。PQ队列调度完成后,再对DRR、WFQ或WRR队列进行加权轮循调度。

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

  1. 设备接口上的8个队列被分为两组,用户可以指定其中的某几组队列进行PQ调度,其他队列进行WFQ调度。只有WAN侧接口支持PQ+WFQ调度。
  2. WRR、DRR及WFQ用户根据自己的需要定义权值,默认权值为10, PQ不需要权值,因为PQ总优先使用接口带宽。其他队列的权值决定彼此之间的带宽划分比例。
  3. 用户根据不同的业务需要,对各队列中的报文流调度并非是平均的。当调度方式为DRR、WRR、WFQ时,通过给各队列设置不同的权值,可以根据权值对队列进行调度,权值越大的队列被调度的次数相对越多。

二、华为Queue-profile队列实现
华为设备上可以使用Queue-profile来全局定义可应用到接口的软件队列,当硬件队列拥塞时,Queue-profile 队列系统开始起作用。

Queue-profile所定义的队列系统有以下特点。系统最多可定 义优先级为0~7的8个队列。 设备上,每个接口出方 向都拥有4个或8个队列(依设备平台而异),以队列索引号进行标识,队列索引号分别为0、1、2、3或0、…7。设备根据内部优先级选择队列,并按调度机制服务。

  1. 队列系统的调度机制可以是:仅WFQ、仅WRR、仅DRR、仅PQ或PQ+WFQ/DRR/WRR的混合调度方式。(注:依具体设备类型而有所不同)
  2. 如果Queue-profile中定义了多个PQ队列,则多个PQ间根据优先级高低顺序进行调度。
  3. 如果在Queue-profile中定义了多个WFQ/WRR/DRR的队列,PQ队列调度完成后,再对DRR、WFQ或WRR队列进行调度,共同分享剩余的带宽。因为PQ队列先调度,所以若PQ队列有持续的数据包,则其他队列会面临“饥饿”问题。设计建议是限制能进入PQ队列的报文数量,不要过多占用带宽。
  4. Queue-profile 可以应用到逻辑接口或物理接口,上,逻辑接口配置优于物理接口起作用。如果Queue-profile应用到逻辑接口所对应的物理接口上,则逻辑接口

配置举例:
为设备定义软件队列,要求有两个能为低延迟业务提供服务的优先级队列,同时,对优先级1~4的业务,使其在接口按1: 2: 3: 3比例分享带宽,并要保证每个队列能保存64个包,最大缓存不超过20000Byte数据量。
在这里插入图片描述
三、CBQ队列
华为的另外一种队列技术一CBQ 是目前在大部分平台上推荐使用的软件队列,区别于Queue-Profile的是,CBQ使用MQC来配置。

CBQ首先根据IP优先级或者DSCP优先级、入接口、IP报文的五元组等规则来对报文进行分类,然后让不同类别的报文进入不同的队列。对于不匹配任何类别的报文,会送入系统定义的缺省类。
在这里插入图片描述
CBQ提供四类队列:

  1. EF队列:EF队列是严格优先级的队列,适用于低延时、低丢弃概率、占用带宽不是很大的业务,例如重要业务报文或音频/视频业务。用户定义优先级类来存放延迟敏感的业务,每个类都有一个优先级队列,系统会快速转发该队列里面的数据,但由于严格优先级队列会“过多地优先使用(或用光)接口带宽”,所以CBQ下的EF队列通过“内置的限速器”来限制对带宽的使用。

  2. LLQ队列:低延时队列,它时延相比EF队列更低。对时延极敏感的应用(如VoIP业务)能提供更好的服务质量保证,它较EF队列有更好的优先级转发能力。

  3. AF队列:满足需要带宽保证的关键数据业务。每个AF队列分别对应一类用户报文,用户可以设定每类报文占用的带宽。在系统调度报文出队的时候,按用户为各类报文设定的带宽将报文出队发送,可以实现各个类的队列的公平调度。当接口有剩余带宽时,AF队列按照权值分享剩余带宽。同时,在接口拥塞的时候,仍然能保证各类报文得到用户设定的最小带宽。当其他队列带宽未使用时,接口带宽可以分配给当前队列使用。可以保证在网络发送的业务流量没有超过最小可确保带宽的情况下,此队列中报文的丢失概率非常低。确保转发适用于流量较大且需要被保证的业务。对于AF队列,当队列的长度达到队列的最大长度时,缺省采用尾丢弃的策略,但用户还可以选择用WRED丢弃策略。

  4. BE队列:满足不需要严格QoS保证的尽力发送业务。当报文不匹配用户设定的所有类别时,报文会被送入系统定义的缺省BE(Best Effort,尽力传送)类。BE队列使用接口剩余带宽和WFQ调度方式进行发送。

报文一旦进入EF (或LLQ)队列后,先优先调度,仅当EF和/或LLQ队列中的报文调度完毕后,才会调度其他队列中的报文。

CBQ队列中最多只允许为4个用户类定义EF或LLQ队列,即最多可以包含的LLQ队列和EF队列之和为4。每个EF和LLQ队列按照配置的顺序进行绝对优先级调度,先配置的队列优先被调度。

四、华为CBR队列实现
使用traffic-classifier来定义:

  1. 可以为用户定义的类定义相应的流行为,其内容可以是AF、EF、LLQ、BE (定义给default-class)。
  2. AF需要显示的定义带宽,这个带宽是最小保证带宽,也是当拥塞发生时最小的可用带宽。
  3. BE使用WFQ队列机制,不需要显示定义带宽,可使用BW=Minimum{10%,100-EF-LLQ-AF},BW取值至少为接口带宽的1%。

配置举例:

traffie classifier c1 operator or
if-match dscp ef
traffie classifier c2 operator or
if-match dscp cs4
traffic classifier c3 operator or
if-match dscp af21
traffie classifier c4 operator or
if-match dscp cs1
#
traffic behavior b1
queue af bandwidth pct 30

traffic behavior b2
queue af bandwidth pct 20
queue-length packets 100
#定义af队列及其最小保证带宽

traffic behavior b3
queue llq bandwidth pct 60
#定义llq队列及其最大带宽

traffic behavior b4
queue wfq number 64

traffic policy p1
classifier c1 behavior b1
classifier c2 behavior b2
classifier c3 behavior b3
classifier default-class behavior b4

interface Mp-group0/0/0
traffic-policy p1 outbound

五、队列对比
在这里插入图片描述
资料整理来源:《HCIE路由交换学习指南》、HCIE培训文档、华为hedex文档

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格洛米爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值