zoukankan      html  css  js  c++  java
  • QoS队列调度算法

    队列指的是在缓存中对报文进行排序的逻辑。当流量的速率超过接口带宽或超过为该流量设置的带宽时,报文就以队列的形式暂存在缓存中。报文离开队列的时间、顺序,以及各个队列之间报文离开的相互关系由队列调度算法决定。

    华为交换机设备的每个端口上都有 8 个下行队列,称为CQ(Class Queue)队列,也叫 端口队列(Port-queue),在交换机内部与前文提到的 8 个PHB一一对应,分别为BE、 AF1、AF2、AF3、AF4、EF、CS6 和CS7。单个队列的报文采用 FIFO(First In First Out)原则入队和出队。

    image-20200726165220818

    • PQ(Priority Queuing)调度

    PQ(Priority Queuing)调度,就是严格按照队列优先级的高低顺序进行调度。只有 高优先级队列中的报文全部调度完毕后,低优先级队列才有调度机会。 采用PQ 调度方式,将延迟敏感的关键业务放入高优先级队列,将非关键业务放入 低优先级队列,从而确保关键业务被优先发送。 PQ调度的缺点是:拥塞发生时,如果较高优先级队列中长时间有分组存在,那么 低优先级队列中的报文就会由于得不到服务而“饿死”。

    假设端口有 3 个采用PQ调度的队列,分别为高优先(High)队列、中优先(Medium) 队列、和低优先(Low)队列,它们的优先级依次降低。如图,其中报文编号表示报文到达顺序。

    图1 PQ调度

    image-20200726105358964

    • RR(Round Robin)调度

    RR调度采用轮询的方式,对多个队列进行调度。RR以环形的方式轮询多个队列。 如果轮询的队列不为空,则从该队列取走一个报文;如果该队列为空,则直接跳过该队列,调度器不等待。

    图2 RR调度

    image-20200726105700474

    RR调度各个队列之间没有优先级之分,都能够有相等的概率得到调度。RR调度的缺点是:所有队列无法体现优先级,对于延迟敏感的关键业务和非关键业务无法得到区别对待,使得关键业务无法及时得到处理

    • WRR(Weighted Round Robin)调度

    加权轮询WRR(Weighted Round Robin)调度主要解决RR不能设置权重的不足。 在轮询的时候,WRR每个队列享受的调度机会和该队列的权重成比例。RR调度相当于权值为 1 的WRR调度。 WRR的实现方法是为每个队列设置一个计数器 Count,根据权重进行初始化。每次 轮询到一个队列时,该队列输出一个报文且计数器减一。当计数器为 0 时停止调度该队列,但继续调度其他计数器不为 0 的队列。当所有队列的计数器都为 0 时,所有计数器重新根据权重初始化,开始新一轮调度。在一个循环中,权重大的队列被多次调度。

    图3 WRR调度

    image-20200726105856756

    假设某端口有3个队列采用WRR调度,为每个队列配置一个权值,依次为50%、 25%、25%,详细的调度过程如下: 首先计数器初始化:Count[1]=2,Count[2]=1,Count[3]= 1。

    − 第 1 个轮询: 从队列 1 取出报文 1 发送,Count[1]=1;从队列 2 取出报文 5 发送,Count[2]=0; 从队列 3 取出报文 8 发送,Count[3]=0。
    − 第 2 个轮询: 从队列 1 取出报文 2 发送,Count[1]=0;由于Count[2]=0,Count[3]=0,队列 2 和队列 3 不参与此轮调度。 此时,Count[1]=0,Count[2]=0,Count[3]=0,将计数器重新初始化:Count[1]=2, Count[2]=1,Count[3]= 1。
    − 第 3 个轮询:从队列 1 取出报文 3 发送,Count[1]=1;从队列 2 取出报文 6 发送,Count[2]=0; 从队列 3 取出报文 9 发送,Count[3]=0。
    − 第 4 个轮询: 从队列 1 取出报文 4 发送,Count[1]=0;由于Count[2]=0,Count[3]=0,队列 2 和队列 3 不参与此轮调度。 此时,Count[1]=0,Count[2]=0,Count[3]=0,将计数器重新初始化:Count[1]=2, Count[2]=1,Count[3]= 1。

    从统计上看,各队列中的报文流被调度的次数与该队列的权值成正比,权值越大被调度的次数相对越多。如果该端口为100Mbps,则可以保证最低权重的队列至少获得25Mbit/s带宽,避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点。WRR对于空的队列直接跳过,循环调度的周期变短,因此当某个队列流量小的时候,剩余带宽能够被其他队列按照比例占用。

    WRR调度有两个缺点:

    1. WRR调度按照报文个数进行调度,因此每个队列没有固定的带宽,同等调度机 会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽。而用户一般关 心的是带宽。当每个队列的平均报文长度相等或已知时,通过配置WRR权重, 用户能够获得想要的带宽;但是,当队列的平均报文长度变化时,用户就不能 通过配置WRR权重获取想要的带宽。
    2. 低延时需求业务(如语音)得不到及时调度。
    • DRR(Deficit Round Robin)调度

    差分轮询DRR(Deficit Round Robin)调度实现原理与RR调度基本相同。DRR与RR的区别是:RR调度是按照报文个数进行调度,而DRR是按照报文长度进行调度。

    DRR为每个队列设置一个计数器Deficit,Deficit 初始化为一次调度允许的最大字节数, 一般为接口MTU。每次轮询到一个队列时,该队列输出一个报文且计数器Deficit 减去报文长度。如果报文长度超过了队列的调度能力,DRR调度允许Deficit 出现负值,以保证长报文也能够得到调度。但下次轮循调度时该队列将不会被调度。当计数器为 0 或 负数时停止调度该队列,但继续调度其他计数器为正数的队列。当所有队列的Deficit 都为 0 或负数时,将所有队列的Deficit 计数器加上初始值,开始新一轮调度。

    假设某端口MTU=150Bytes,有 2 个队列Q1和Q2采用DRR调度,Q1 队列中有多个 200Bytes 的长报文,Q2队列中有多个100Bytes 的端报文,则调度过程如图 4 所示。

    图4 DRR调度

    image-20200726164055160

    由图4可以看出,经过第 1~6 轮DRR调度,Q1队列被调出了3个200Bytes 的报文, Q2队列被调出了6个100Bytes 的报文。从长期的统计看,Q1和 Q2 的实际输出带宽比 是 1:1,为公平的比例。DRR调度避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点。 但是,DRR调度不能设置权重,且也具有低延时需求业务(如语音)得不到及时调度的缺点。

    • DWRR(Deficit Weighted Round Robin)调度

    差分加权轮询DWRR(Deficit Weighted Round Robin)调度主要解决DRR不能设置权重的不足。DRR调度相当于权值为 1 的DWRR调度。 DWRR为每个队列设置一个计数器Deficit,Deficit 初始化为Weight * MTU。每次轮询到一个队列时,该队列输出一个报文且计数器Deficit 减去报文长度。当计数器为 0 时停止调度该队列,但继续调度其他计数器不为 0 的队列。当所有队列的计数器都为 0 时,所有计数器的Deficit 都加上Weight*MTU,开始新一轮调度。

    图5 DWRR调度

    image-20200726164321936

    假设某端口MTU=150Bytes,有 2 个队列Q1和Q2采用DRR调度,Q1 队列中有 多个 200Bytes 的长报文,Q2队列中有多个 100Bytes 的端报文,Q1和Q2配置权重 比为weight1:weight2=2:1。则DWRR调度过程如图 2-37。

    1. 第一轮调度 Deficit[1] =weight1* MTU=300,Deficit[2] = weight2* MTU=150Bytes,从 Q1 队 列取出 200Bytes 报文发送,从Q2队列取出 100Bytes 发送;发送后,Deficit[1] = 100,Deficit[2] =50。
    2. 第二轮调度
      从 Q1 队列取出 200Bytes 报文发送,从Q2队列取出 100Bytes 发送;发送后, Deficit[1] = -100,Deficit[2] =-50。
    3. 第三轮调度
      此时两个队列都为负,因此,Deficit[1] = Deficit[1]+weight1* MTU=-100+2150=200,Deficit[2] = Deficit[2]+weight2 MTU=-50+1*150=100。
      从 Q1 队列取出 200Bytes 报文发送,从Q2队列取出 100Bytes 发送;发送后, Deficit [1] = 0,Deficit[2] = 0。

    由上图可以看出,经过第 1~3 轮DWRR调度,Q1队列被调出了3个200Bytes 的 报文,Q2 队列被调出了3个100Bytes 的报文。从长期的统计看,Q1和Q2的实际 输出带宽比是 2:1,与权重比相符。

    DWRR调度避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点,也避免了各队列报文长度不等或变化较大时,WRR调度不能按配置比例分 配带宽资源的缺点。但是,DWRR调度也具有低延时需求业务(如语音)得不到及时调度的缺点。

    • WFQ(Weighted Fair Queuing)调度

    加权公平队列WFQ(Weighted Fair Queuing)调度是按队列权重来分配每个流应占有出口的带宽。同时,为了使得带宽分配更加“公平”,WFQ 以 bit 为单位进行调度,类似于图 6的 bit-by-bit 调度模型

    图6 WFQ调度

    image-20200726162602159

    Bit-by-bit 调度模型可以完全按照权重分配带宽,防止长报文比短报文获得更多带宽,从 而减少大小报文共存时的时延抖动。但Bit-by-bit 调度模型只是理想化的模型,实际上,华为交换机实现的WFQ是按照一定的粒度,例如 256B、1KB,或其他粒度,具体按何种粒度,与单板类型相关。
    WFQ的优点主要有以下几点:

    • 不同的队列获得公平的调度机会,从总体上均衡各个流的延迟。
    • 短报文和长报文获得公平的调度:如果不同队列间同时存在多个长报文和短报文等 待发送,让短报文优先获得调度,从而在总体上减少各个流的报文间的抖动。
    • 从统计上看,权重越小,所分得的带宽越少。权重越大,所分得的带宽越多。
  • 相关阅读:
    HDU 5486 Difference of Clustering 图论
    HDU 5481 Desiderium 动态规划
    hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值
    HDU 5478 Can you find it 随机化 数学
    HDU 5477 A Sweet Journey 水题
    HDU 5476 Explore Track of Point 数学平几
    HDU 5475 An easy problem 线段树
    ZOJ 3829 Known Notation 贪心
    ZOJ 3827 Information Entropy 水题
    zoj 3823 Excavator Contest 构造
  • 原文地址:https://www.cnblogs.com/jianhaoscnu/p/13380927.html
Copyright © 2011-2022 走看看