设为首页收藏本站language 语言切换
查看: 1065|回复: 5
收起左侧

[分享] 拥塞管理

[复制链接]
 成长值: 63355
发表于 2024-8-6 10:47:19 | 显示全部楼层 |阅读模式
随着生活质量的提高,网络业务种类繁多,人们对网络质量的要求也越来越高,有限的带宽与超负荷的网络需求产生冲突,造成网络中时常会出现延迟、信号丢失等情况,这些都是由于拥塞产生的。当网络间歇性的出现拥塞,且时延敏感业务要求得到比非时延敏感业务更高质量的QoS服务时,需要进行拥塞管理;如果配置拥塞管理后仍然出现拥塞,则需要增加带宽。拥塞管理一般采用队列技术,使用不同的调度算法来发送队列中的报文流。
根据排队和调度策略的不同,设备上的拥塞管理技术分为PQ、WDRR、WRR、WFQ、PQ+WDRR、PQ+WRR和PQ+WFQ。每种调度算法都是为了解决特定网络流量的问题,并对带宽资源的分配、延迟、抖动等有着十分重要的影响。
设备上,每个接口出方向都拥有8个队列,以队列索引号进行标识,队列索引号分别为0、1、2、3、4、5、6、7。设备根据本地优先级和队列之间的映射关系,自动将分类后的报文流送入各队列,然后按照各种队列调度机制进行调度。
  • PQ调度
    PQ调度,针对于关键业务类型应用设计,PQ调度算法维护一个优先级递减的队列系列并且只有当更高优先级的所有队列为空时才服务低优先级的队列。这样,将关键业务的分组放入较高优先级的队列,将非关键业务(如E-Mail)的分组放入较低优先级的队列,可以保证关键业务的分组被优先传送,非关键业务的分组在处理关键业务数据的空闲间隙被传送。
    图6-3所示,Queue7比Queue6具有更高的优先权,Queue6比Queue5具有更高的优先权,依次类推。只要链路能够传输分组,Queue7尽可能快地被服务。只有当Queue7为空,调度器才考虑Queue6。当Queue6有分组等待传输且Queue7为空时,Queue6以链路速率接受类似地服务。当Queue7和Queue6为空时,Queue5以链路速率接收服务,以此类推。
    PQ调度算法对低时延业务非常有用。假定数据流X在每一个节点都被映射到最高优先级队列,那么当数据流X的分组到达时,则分组将得到优先服务。
    然而PQ调度机制会使低优先级队列中的报文得不到调度机会。例如,如果映射到Queue7的数据流在一段时间内以100%的输出链路速率到达,调度器将从不为Queue6及以下的队列服务。
    为了避免队列饥饿,上游设备需要精心规定数据流的业务特性,以确保映射到Queue7的业务流不超出输出链路容量的一定比例,这样Queue7会经常为空,低优先级队列中的报文才能得到调度机会。
    图6-3 PQ调度示意图

                                   
    登录/注册后可看大图

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

                                   
    登录/注册后可看大图

    在进行WRR调度时,设备根据每个队列的权值进行轮循调度。调度一轮权值减一,权值减到零的队列不参加调度,当所有队列的权限减到0时,开始下一轮的调度。例如,用户根据需要为接口上8个队列指定的权值分别为4、2、5、3、6、4、2和1,按照WRR方式进行调度的结果请参见表6-1所示。
    表6-1 WRR调度的结果
    队列索引
    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
    -
    Q5
    -
    Q3
    Q2
    -
    -
    参加第11轮调度的队列
    -
    -
    Q5
    -
    Q3
    -
    -
    -
    参加第12轮调度的队列
    -
    -
    -
    -
    Q3
    -
    -
    -

    从统计上看,各队列中的报文流被调度的次数与该队列的权值成正比,权值越大被调度的次数相对越多。由于WRR调度的以报文为单位,因此每个队列没有固定的带宽,同等调度机会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽。
    WRR调度避免了采用PQ调度时发生拥塞的情况下低优先级队列中的报文长时间得不到服务的缺点。WRR调度还有一个优点是,虽然多个队列的调度是轮询进行的,但对每个队列不是固定地分配服务时间片——如果某个队列为空,那么马上换到下一个队列调度,这样带宽资源可以得到充分的利用。但WRR调度无法使低延时需求业务得到及时调度。
  • WDRR调度
    WDRR(Weighted Deficit Round Robin)调度同样也是RR的扩展,相对于WRR来言,解决了WRR只关心报文,同等调度机会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽的问题,在调度过程中考虑包长的因素以达到调度的速率公平性。
    WDRR调度中,Deficit表示队列的带宽赤字,初始值为0。每次调度前,系统按权重为各队列分配带宽,计算Deficit值,如果队列的Deficit值大于0,则参与此轮调度,发送一个报文,并根据所发送报文的长度计算调度后Deficit值,作为下一轮调度的依据;如果队列的Deficit值小于0,则不参与此轮调度,当前Deficit值作为下一轮调度的依据。
    图6-5 队列权重示意图

                                   
    登录/注册后可看大图


    图6-5所示,假设用户配置各队列权重为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为例,简要描述WDRR队列调度的实现过程(假设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%,因此,用户能够通过设置权重获取想要的带宽。

    但WDRR调度仍然没有解决WRR调度中低延时需求业务得不到及时调度的问题。
  • WFQ调度
    公平队列FQ(Fair Queuing)的目的是尽可能公平地分享网络资源,使所有流的延迟和抖动达到最优:
    • 不同的队列获得公平的调度机会,从总体上均衡各个流的延迟。
    • 短报文和长报文获得公平的调度:如果不同队列间同时存在多个长报文和短报文等待发送,让短报文优先获得调度,从而在总体上减少各个流的报文间的抖动。

    与FQ相比,WFQ(Weighted Fair Queue)在计算报文调度次序时增加了优先权方面的考虑。从统计上,WFQ使高优先权的报文获得优先调度的机会多于低优先权的报文。
    WFQ调度在报文入队列之前,先对流量进行分类,有两种分类方式:
    • 按流的“会话”信息分类:
      根据报文的协议类型、源和目的TCP或UDP端口号、源和目的IP地址、ToS域中的优先级位等自动进行流分类,并且尽可能多地提供队列,以将每个流均匀地放入不同队列中,从而在总体上均衡各个流的延迟。在出队的时候,WFQ按流的优先级(precedence)来分配每个流应占有带宽。优先级的数值越小,所得的带宽越少。优先级的数值越大,所得的带宽越多。这种方式只有CBQ的default-class支持。
    • 按优先级分类:
      通过优先级映射把流量标记为本地优先级,每个本地优先级对应一个队列号。每个接口预分配8个队列,报文根据队列号进入队列。默认情况,队列的WFQ权重相同,流量平均分配接口带宽。用户可以通过配置修改权重,高优先权和低优先权按权重比例分配带宽。


    图6-6 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调度示意图如图6-7所示。
    图6-7 PQ+WRR混合调度示意图

                                   
    登录/注册后可看大图


    在调度时,设备首先按照PQ方式调度Queue7、Queue6、Queue5队列中的报文流,只有这些队列中的报文流全部调度完毕后,才开始以WRR方式循环调度其他队列中的报文流。Queue4、Queue3、Queue2、Queue1和Queue0队列包含自己的权值。重要的协议报文和有低延时需求的业务报文应放入采用PQ调度的队列中,得到优先调度的机会,其余报文放入以WRR方式调度的各队列中。
  • PQ+WDRR调度
    与PQ+WRR相似,其集合了PQ调度和WDRR调度各有优缺点。单纯采用PQ调度时,低优先级队列中的报文流长期得不到带宽,而单纯采用WDRR调度时低延时需求业务(如语音)得不到优先调度,如果将两种调度方式结合起来形成PQ+WDRR调度,不仅能发挥两种调度的优势,而且能克服两种调度各自的缺点。
    设备接口上的8个队列被分为两组,用户可以指定其中的某几组队列进行PQ调度,其他队列进行WDRR调度。
    图6-8 PQ+WDRR调度示意图

                                   
    登录/注册后可看大图


    图6-8所示,在调度时,设备首先按照PQ方式优先调度Queue7、Queue6和Queue5队列中的报文流,只有这些队列中的报文流全部调度完毕后,才开始以WDRR方式调度Queue4、Queue3、Queue2、Queue1和Queue0队列中的报文流。其中,Queue4、Queue3、Queue2、Queue1和Queue0队列包含自己的权值。
    重要的协议报文以及有低延时需求的业务报文应放入需要进行PQ调度的队列中,得到优先调度的机会,其他报文放入以WDRR方式调度的各队列中。
  • PQ+WFQ调度
    与PQ+WRR相似,其集合了PQ调度和WFQ调度各有优缺点。单纯采用PQ调度时,低优先级队列中的报文流长期得不到带宽,而单纯采用WFQ调度时低延时需求业务(如语音)得不到优先调度,如果将两种调度方式结合起来形成PQ+WFQ调度,不仅能发挥两种调度的优势,而且能克服两种调度各自的缺点。
    设备接口上的8个队列被分为两组,用户可以指定其中的某几组队列进行PQ调度,其他队列进行WFQ调度。
    图6-9 PQ+WFQ调度示意图

                                   
    登录/注册后可看大图


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


发表于 2024-8-10 16:04:26 | 显示全部楼层
666666666666666
地板 2024-8-10 16:04:26 回复 收起回复
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-1-30 22:40 , Processed in 0.057985 second(s), 10 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表