QOS的队列及拥塞管理.docx

上传人:b****9 文档编号:25504235 上传时间:2023-06-09 格式:DOCX 页数:16 大小:261.28KB
下载 相关 举报
QOS的队列及拥塞管理.docx_第1页
第1页 / 共16页
QOS的队列及拥塞管理.docx_第2页
第2页 / 共16页
QOS的队列及拥塞管理.docx_第3页
第3页 / 共16页
QOS的队列及拥塞管理.docx_第4页
第4页 / 共16页
QOS的队列及拥塞管理.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

QOS的队列及拥塞管理.docx

《QOS的队列及拥塞管理.docx》由会员分享,可在线阅读,更多相关《QOS的队列及拥塞管理.docx(16页珍藏版)》请在冰豆网上搜索。

QOS的队列及拥塞管理.docx

QOS的队列及拥塞管理

队列及拥塞管理

队列及拥塞管理

拥塞管理的中心内容是当拥塞发生时如何制定一个策略,用于决定报文转发的处理次序和丢弃原则,一般采用队列技术。

队列指的是在缓存中对报文进行排序的逻辑。

当流量的速率超过接口带宽或超过为该流量设置的带宽时,报文就以队列的形式暂存在缓存中。

报文离开队列的时间、顺序,以及各个队列之间报文离开的相互关系则由队列调度算法决定。

说明:

路由器转发平面的流量管理器TM(TrafficManager)上有一些高速缓存,用于报文的缓冲和转发,缓存由所有端口共享,各端口竞争使用。

为了避免有的端口长时间抢不到缓存而出现断流,路由器给每个端口分配了一块最小可用缓存,并且分配到端口的各个队列上,保证每个队列均有缓存可用。

当TM收到报文时,将报文放入缓存,网络不拥塞时,报文能被及时转发,不会在缓存中产生堆积。

这种情况下报文在缓存中的时间为μs级,延迟时间可以忽略不计。

当网络拥塞时,报文在缓存中产生堆积,被延迟处理,延迟时间会大幅增加。

延迟时间的大小主要取决于队列的缓存长度以及该队列获得的输出带宽,可以使用如下公式计算时延:

队列时延=队列缓存长度/队列输出带宽

华为路由器设备的每个端口上都有8个下行队列,称为CQ(ClassQueue)队列,也叫端口队列(Port-queue),分别为BE、AF1、AF2、AF3、AF4、EF、CS6和CS7。

单个队列的报文采用FIFO(FirstInFirstOut)原则入队和出队。

图1报文入队出队方式

队列调度算法

本文介绍几种常见队列调度算法:

先进先出FIFO(FirstInFirstOut)

严格优先级SP(StrictPriority)

轮询RR(RoundRobin)

加权轮询WRR(WeightedRoundRobin)

差分轮询DRR(DeficitRoundRobin)

差分加权轮询DWRR(DeficitWeightedRoundRobin)

加权公平队列WFQ(WeightedFairQueuing)

FIFO

FIFO不对报文进行分类。

FIFO按报文到达接口的先后顺序让报文进入队列,在队列的出口让报文按进队的顺序出队,先进的报文将先出队,后进的报文将后出队,如图1。

SP

SP(StrictPriority)调度就是严格按照队列优先级的高低顺序进行调度。

只有高优先级队列中的报文全部调度完毕后,低优先级队列才有调度机会。

假设端口有3个采用SP调度算法的队列,分别为高优先(High)队列、中优先(Medium)队列、和低优先(Low)队列,它们的优先级依次降低。

如图2,其中报文编号表示报文到达顺序。

图2SP调度

在报文出队的时候,首先让高优先队列中的报文出队并发送,直到高优先队列中的报文发送完,然后发送中优先队列中的报文,直到发送完,接着是低优先队列。

在调度低优先级队列时,如果高优先级队列又有报文到来,则会优先调度高优先级队列。

这样,较高优先级队列的报文将会得到优先发送,而较低优先级的报文后发送。

SP调度的缺点是:

拥塞发生时,如果较高优先级队列中长时间有报文存在,那么低优先级队列中的报文就会由于得不到服务而“饿死”。

RR

RR调度采用轮询的方式,对多个队列进行调度。

RR以环形的方式轮询多个队列。

如果轮询的队列不为空,则从该队列取走一个报文;如果该队列为空,则直接跳过该队列,调度器不等待。

图3RR调度

WRR

加权轮询WRR(WeightedRoundRobin)调度主要解决RR不能设置权重的不足。

在轮询的时候,WRR每个队列享受的调度机会和该队列的权重成比例。

RR调度相当于权值为1的WRR调度。

WRR的实现方法是为每个队列设置一个计数器Count,根据权重进行初始化。

每次轮询到一个队列时,该队列输出一个报文且计数器减一。

当计数器为0时停止调度该队列,但继续调度其他计数器不为0的队列。

当所有队列的计数器都为0时,所有计数器重新根据权重初始化,开始新一轮调度。

在一个循环中,权重大的队列被多次调度。

图4WRR调度

假设某端口有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,则可以保证最低权重的队列至少获得25Mbps带宽,避免了采用SP调度时低优先级队列中的报文可能长时间得不到服务的缺点。

WRR对于空的队列直接跳过,循环调度的周期变短,因此当某个队列流量小的时候,剩余带宽能够被其他队列按照比例占用。

WRR调度有两个缺点:

WRR调度按照报文个数进行调度,因此每个队列没有固定的带宽,同等调度机会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽。

而用户一般关心的是带宽。

当每个队列的平均报文长度相等或已知时,通过配置WRR权重,用户能够获得想要的带宽;但是,当队列的平均报文长度变化时,用户就不能通过配置WRR权重获取想要的带宽。

低延时需求业务(如语音)得不到及时调度。

DRR

差分轮询DRR(DeficitRoundRobin)调度实现原理与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的端报文,则调度过程如图5。

图5DRR调度

由上图可以看出,经过第1~6轮DRR调度,Q1队列被调出了3个200Bytes的报文,Q2队列被调出了6个100Bytes的报文。

从长期的统计看,Q1和Q2的实际输出带宽比是1:

1,为公平的比例。

DRR调度避免了采用SP调度时低优先级队列中的报文可能长时间得不到服务的缺点。

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

DWRR

差分加权轮询DWRR(DeficitWeightedRoundRobin)调度主要解决DRR不能设置权重的不足。

DRR调度相当于权值为1的DWRR调度。

DWRR为每个队列设置一个计数器Deficit,Deficit初始化为Weight*MTU。

每次轮询到一个队列时,该队列输出一个报文且计数器Deficit减去报文长度。

当计数器为0时停止调度该队列,但继续调度其他计数器不为0的队列。

当所有队列的计数器都为0时,所有计数器的Deficit都加上Weight*MTU,开始新一轮调度。

假设某端口MTU=150Bytes,有2个队列Q1和Q2采用DRR调度,Q1队列中有多个200Bytes的长报文,Q2队列中有多个100Bytes的端报文,Q1和Q2配置权重比为weight1:

weight2=2:

1。

则DWRR调度过程如图6。

图6DWRR调度

第一次调度

Deficit[1]=weight1*MTU=300,Deficit[2]=weight2*MTU=150,从Q1队列取出200Bytes报文发送,从Q2队列取出100Bytes发送;发送后,Deficit[1]=100,Deficit[2]=50。

第二次调度

从Q1队列取出200Bytes报文发送,从Q2队列取出100Bytes发送;发送后,Deficit[1]=-100,Deficit[2]=-50。

第三次调度

此时两个队列都为负,因此,Deficit[1]=Deficit[1]+weight1*MTU=-100+2*150=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调度避免了采用SP调度时低优先级队列中的报文可能长时间得不到服务的缺点,也避免了各队列报文长度不等或变化较大时,WRR调度不能按配置比例分配带宽资源的缺点。

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

WFQ

加权公平队列WFQ(WeightedFairQueuing)调度是按队列权重来分配每个流应占有出口的带宽。

同时,为了使得带宽分配更加“公平”,WFQ以bit为单位进行调度,类似于图7的bit-by-bit调度模型。

图7Bit-by-bit调度模型

Bit-by-bit调度模型可以完全按照权重分配带宽,防止长报文比短报文获得更多带宽,从而减少大小报文共存时的时延抖动。

但Bit-by-bit调度模型只是理想化的模型,实际上,华为路由器实现的WFQ是按照一定的粒度,例如256B、1KB,或其他粒度,具体按何种粒度,与单板类型相关。

WFQ的优点:

不同的队列获得公平的调度机会,从总体上均衡各个流的延迟。

短报文和长报文获得公平的调度:

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

从统计上看,权重越小,所分得的带宽越少。

权重越大,所分得的带宽越多。

端口队列调度方式

对于华为路由器设备每个接口上的8个端口队列,用户可以为其都配置成SP调度,或者是基于权重的调度。

根据队列调度算法,8个端口队列可以分为三组:

PQ队列

PQ队列之间采用SP调度算法,当从队列调度报文时,先从高优先级的队列调度报文。

这样,可对不同业务数据提供绝对的优先,对时间敏感的实施应用如VoIP的延时可以得到保证,对优先业务的报文带宽占用可以绝对优先。

PQ的缺点:

如果不对高优先级的报文带宽加限制,会造成低优先级报文得不到带宽,可能出现“饿死”现象。

华为路由器允许将8个端口队列都配置成PQ队列,但不建议这么配置。

通常情况下,只时延敏感的业务入PQ队列。

WFQ队列

WFQ队列是按权重进行调度的,调度算法可以是WRR、DWRR或WFQ调度算法中的其中一种,这些算法都是按权重进行剩余带宽的分配。

P40-E子卡使用的是DWRR;其他类型单板使用WFQ或WRR。

LPQ队列

LPQ队列是在高速链路(以太网)接口上实现的队列调度机制。

低速链路(如Serial、MP-Group)上不支持LPQ队列。

LPQ队列之间的调度方式与PQ队列一样,也采用SP调度。

不同在于拥塞时PQ可以抢占WFQ的带宽,而LPQ不可以抢占WFQ的带宽。

在PQ和WFQ队列调度结束后,如果还有剩余带宽则分配给LPQ。

实际应用中,可以将BE流用LPQ进行调度。

这样,在网络负载较重时,BE流可以完全被限制,优先满足其它业务。

所有的8个端口队列可以全部配置成WFQ,也可以全部配置成PQ,也可以全部配置成LPQ,也可以组合。

三种队列的调度顺序

PQ、WFQ、LPQ之间采用SP调度算法,优先调度PQ队列,再调度WFQ队列,最后调度LPQ队列,如图8。

详细流程如图9。

图8端口队列调度顺序

图9队列间的调度流程

在调度出队的时候,若PQ队列中有报文,则总是优先发送PQ队列中的报文,直到PQ队列中没有报文时才调度发送WFQ队列中的报文。

只要PQ队列中有报文,系统就会优先发送PQ队列中的报文。

若PQ队列中没有报文时,则调度WFQ队列。

如果在调度WFQ队列过程中,PQ队列又有报文到来,则会优先调度PQ队列。

直到WFQ中的报文被发送完毕,才调度LPQ队列中的报文。

上述调度的结果是:

首先保证PQ队列的PIR带宽,剩余带宽在各WFQ队列间按权重分配;如果某些队列没有用完带宽(即已满足PIR带宽且还有剩余),则剩余带宽在未满足PIR的队列之间按权重分配;如果还有剩余带宽再在未满足PIR的队列间分配……如此反复,直到满足所有WFQ队列的PIR带宽;如果此时还有剩余带宽,则分配给LPQ。

说明:

这里的PIR是指使用port-queue命令配置的整形速率。

队列带宽分配示例1

假设某端口整形速率为100Mbps(缺省情况下,接口的整形速率是接口带宽),该接口各业务的输入带宽及配置的PIR如下。

队列类型

队列类型

输入带宽(bps)

PIR(bps)

CS7

PQ

65M

55M

CS6

PQ

30M

30M

EF

WFQ,权重5

10M

5M

AF4

WFQ,权重4

10M

10M

AF3

WFQ,权重3

10M

15M

AF2

WFQ,权重2

20M

25M

AF1

WFQ,权重1

20M

20M

BE

LPQ

100M

未配置

则带宽分配过程如下:

首先进行PQ调度。

100Mbps先供CS7使用,CS7输出带宽=Min(端口整形速率,CS7输入带宽,CS7的PIR带宽)=Min(100M,65M,55M)=55M,剩余45Mbps供CS6使用,CS6输出带宽=Min(剩余带宽,CS6输入带宽,CS6的PIR带宽)=Min(45Mbps,30Mbps,30Mbps)=30Mbps。

PQ调度后,剩余带宽=100Mbps-55Mbps-30Mbps=15Mbps。

接着进行第一轮WFQ调度,剩余带宽在各WFQ队列中按权重分配。

计算公式:

分给某WFQ队列的带宽=剩余带宽*本队列权重/所有WFQ队列权重之和=15Mbps*本队列权重/15,因此,

本轮分配给EF的带宽=15Mbps*5/15=5Mbps=PIR,分配给EF的带宽没有剩余

本轮分配给AF4的带宽=15Mbps*4/15=4Mbps

本轮分配给AF3的带宽=15Mbps*3/15=3Mbps

本轮分配给AF2的带宽=15Mbps*2/15=2Mbps

本轮分配给AF1的带宽=15Mbps*1/15=1Mbps

此时剩余带宽为0,BE流量没有获得调度,输出带宽为0。

各队列输出带宽如下:

队列类型

队列类型

输入带宽(bps)

PIR(bps)

输出带宽(bps)

CS7

PQ

65M

55M

55M

CS6

PQ

30M

30M

30M

EF

WFQ,权重5

10M

5M

5M

AF4

WFQ,权重4

10M

10M

4M

AF3

WFQ,权重3

10M

15M

3M

AF2

WFQ,权重2

20M

25M

2M

AF1

WFQ,权重1

20M

20M

1M

BE

LPQ

100M

未配置

0

队列带宽分配示例2

假设某端口整形速率为100Mbps,该接口各业务的输入带宽及配置的PIR如下。

队列类型

队列类型

输入带宽(bps)

PIR(bps)

CS7

PQ

15M

25M

CS6

PQ

30M

10M

EF

WFQ,权重5

90M

100M

AF4

WFQ,权重4

10M

10M

AF3

WFQ,权重3

10M

15M

AF2

WFQ,权重2

20M

25M

AF1

WFQ,权重1

20M

20M

BE

LPQ

100M

未配置

则带宽分配过程如下:

首先进行PQ调度,保证PQ流队列的PIR带宽。

PQ调度后,剩余带宽=100Mbps-15Mbps-10Mbps=75Mbps。

接着进行第一轮WFQ调度,剩余带宽在各WFQ队列中按权重进行分配。

计算公式:

分给某WFQ队列的带宽=剩余带宽*本队列权重/所有WFQ队列权重之和=75Mbps*本队列权重/15,因此,

本轮分配给EF带宽=75Mbps*5/15=25Mbps

本轮分配给AF4带宽=75Mbps*4/15=20Mbps>PIR,AF4实际获得带宽=PIR=10Mbps,分配给AF4的带宽剩余10Mbps

本轮分配给AF3带宽=75Mbps*3/15=15Mbps=PIR,AF3实际输入带宽只有10Mbps,因此分配给AF3的带宽剩余5Mbps

本轮分配给AF2带宽=75Mbps*2/15=10Mbps

本轮分配给AF1带宽=75Mbps*1/15=5Mbps

此时,端口剩余带宽15Mbps,因此在未满足PIR的队列(EF、AF2和AF1)之间按权重分配剩余带宽。

本轮分配给EF的带宽=15Mbps*5/8=,此时EF获得带宽共,依然小于PIR,因此分配给EF的带宽没有剩余

本轮分配给AF2保证带宽=15Mbps*2/8=,此时AF2获得带宽共,依然小于PIR,因此分配给AF2的带宽没有剩余

本轮分配给AF1保证带宽=15Mbps*1/8=,此时AF1获得带宽共,依然小于PIR,分配给AF1的带宽没有剩余

此时剩余带宽为0,BE流量没有获得调度,输出带宽为0。

各队列输出带宽如下:

队列类型

队列类型

输入带宽(bps)

PIR(bps)

调度输出带宽(bps)

CS7

PQ

15M

25M

15M

CS6

PQ

30M

10M

10M

EF

WFQ,权重5

90M

100M

AF4

WFQ,权重4

10M

10M

10M

AF3

WFQ,权重3

10M

15M

10M

AF2

WFQ,权重2

20M

25M

AF1

WFQ,权重1

20M

20M

BE

LPQ

100M

未配置

0

队列带宽分配示例3

假设某端口整形速率为100Mbps,该接口各业务的输入带宽及配置的PIR如下。

队列类型

队列类型

输入带宽(bps)

PIR(bps)

CS7

PQ

15M

25M

CS6

PQ

30M

10M

EF

WFQ,权重5

90M

10M

AF4

WFQ,权重4

10M

10M

AF3

WFQ,权重3

10M

15M

AF2

WFQ,权重2

20M

10M

AF1

WFQ,权重1

20M

10M

BE

LPQ

100M

未配置

则带宽分配过程如下:

首先进行PQ调度,保证PQ流队列的PIR带宽。

PQ调度后,剩余带宽=100Mbps-15Mbps-10Mbps=75Mbps。

接着进行第一轮WFQ调度,剩余带宽在各WFQ队列中按权重进行分配。

计算公式:

分给某WFQ队列的带宽=剩余带宽*本队列权重/所有WFQ队列权重之和=75Mbps*本队列权重/15,因此,

本轮分配给EF带宽=75Mbps*5/15=25Mbps>PIR,EF实际获得带宽=PIR=10Mbps,分配给AF4的带宽剩余15Mbps

本轮分配给AF4带宽=75Mbps*4/15=20Mbps>PIR,AF4实际获得带宽=PIR=10Mbps,分配给AF4的带宽剩余10Mbps

本轮分配给AF3带宽=75Mbps*3/15=15Mbps=PIR,AF3实际输入带宽只有10Mbps,因此分配给AF3的带宽剩余5Mbps

本轮分配给AF2带宽=75Mbps*2/15=10Mbps=PIR,分配给AF2的带宽没有剩余

本轮分配给AF1带宽=75Mbps*1/15=5Mbps

此时,端口剩余带宽30Mbps,因此在未满足PIR的队列(AF1)之间按权重分配剩余带宽。

因此本轮调度AF1可获得的带宽为5Mbps。

此时剩余带宽为25Mbps,全部分配给BE。

各队列输出带宽如下:

队列类型

队列类型

输入带宽(bps)

PIR(bps)

调度输出带宽(bps)

CS7

PQ

15M

25M

15M

CS6

PQ

30M

10M

10M

EF

WFQ,权重5

90M

10M

10M

AF4

WFQ,权重4

10M

10M

10M

AF3

WFQ,权重3

10M

15M

10M

AF2

WFQ,权重2

20M

10M

10M

AF1

WFQ,权重1

20M

10M

10M

BE

LPQ

100M

未配置

25M

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1