一、拥塞管理
硬件转发队列是长度有限的FIFO队列,任何报文离开必须经过出接口硬件队列,如果出接口的硬件转发队列存储空间满了,拥塞就产生了;
即使调整硬件转发队列长度,越长的硬件转发队列会使时延敏感的数据包在队列中等待更长时间,引入过多的等待延时;
通过配置软件队列,实现将不同敏感程度的报文放到不同的队列中,并使用不同的调度机制来保证敏感报文的网络质量,解决多种业务争用有限的硬件队列资源的情况;
两种队列机制:
(1)基于队列的拥塞管理机制queue-profile
华为设备可以使用Queue-profile来全局定义可应用到接口的软件队列,当硬件队列拥塞时,Queue-profile队列系统开始起作用;
系统最多可定义优先级为0-7的8个队列,每个接口出方向都拥有4个或8个队列,以队列索引号标识,分别为0、1、2、3或0、1、2...、7;
设备根据本地优先级和队列之间的映射关系,自动将报文送入各队列,然后按照各种队列调度机制进行调度。
LAN接口上可用的调度机制有PQ、DRR、PQ+DRR、WRR、PQ+WRR;WAN接口上可用的调度机制有PQ、WFQ和PQ+WFQ;
如果queue-profile中定义了多个PQ队列,则多个PQ间根据优先级顺序进行调度;
如果在queue-profile中定义了多个WFQ/WRR/DRR的队列,PQ队列调度完成后,再对DRR、WFQ或WRR队列进行调度,共同分享剩余带宽;
因为PQ队列优先调度,如果PQ队列持续有数据包,可能会出现队列饿死的问题,建议对进入PQ队列的报文进行限速,不要过多占用带宽;
(2)基于MQC的CBQ队列技术
可以定义BE、AF、EF和LLQ队列;
1、软件队列技术之qos queue-profile
queue profile最多可以定义8个队列,队列之间可以定义多种调度方式,以下是各种调度方式及其区别;
PQ调度
维护一个优先级递减的队列系列,只有当更高优先级的所有队列为空时才服务低优先级的队列;
优点是能保证时延敏感报文的服务质量;
缺点是如果拥塞时较高优先级队列长时间有分组存在,低优先级队列就会由于得不到服务饿死;
WRR调度
RR调度会依次在不同队列间提供等量服务,调度在队列间轮流可以保证每个队列都得到同等服务机会;
WRR根据每个队列的重要程度分配权值,在不同队列间按权值比例提供服务,调度一次权值减1,减为0不参与调度,所有队列权值都减为0后重新开始下一轮调度;
由于WRR调度是以报文为单位的,同等调度机会下大尺寸报文获得的带宽大于小尺寸报文获得的带宽,每个队列没有固定的带宽;
优点是队列不会因长时间得不到服务饿死;
缺点是无法保证延迟敏感报文的服务质量;
DRR调度
DRR解决了WRR每个队列没有固定带宽的问题;
DRR每次调度都会为每个队列分配一次按权值比例得到的Deficit,只有队列的Deficit大于0才可以发送报文,所以DRR的每个队列可以按照权值比例获得固定带宽;
优点是队列不会因长时间得不到服务饿死;
缺点是无法保证延迟敏感报文的服务质量;
WFQ调度
FQ把进入一个队列的报文称为流,系统对待每个流都是均等的,每个流都会平等地分享到当前可用的带宽,例如接口带宽1M,当前有n条流,每条流获得带宽是1/n M;
FQ还关心流队列中报文的长度,如果在不同队列间同时存在多个长报文和短报文等待发送,则短报文优先得到调度,这样可以减缓各个流报文间的抖动;
WFQ在FQ的基础上,增加权重使不同流权重值比例分配带宽;
优点是每个队列之间按权重值比例分配带宽更公平;
缺点是无法保证延迟敏感报文的服务质量;
PQ+WRR/PQ+DRR/PQ+WFQ调度
PQ调度和WRR/DRR/WFQ调度都有各自优缺点,单纯使用PQ调度,低优先级队列可能长时间得不到调度;而单纯采用WRR/DRR/WFQ调度,低延时需求业务得不到优先调度;
通过将两种调度方式结合起来,PQ+WRR、PQ+DRR、PQ+WFQ调度方式使低延时需求业务进入PQ队列进行调度;而其他报文进入WRR/DRR/WFQ的队列中进行调度;
队列调度时,先调度PQ队列,多个PQ队列按优先级顺序进行调度;
PQ队列调度完成后,再对WRR/DRR/WFQ队列进行加权轮询调度;
例如指定队列4和5进行PQ调度,其他队列0、1、2、3进行WRR调度;
根据不同业务需要给WRR各队列设置不同的权值(缺省权值为10),根据权值对各队列进行调度,DRR和WFQ可以按权值比例为队列分配固定带宽;
PQ不需要权值,PQ总优先使用接口带宽;
2、基于MQC的CBQ队列技术
基于类的加权公平队列CBQ,基于WFQ功能进行扩展,使用户可以自己定义用户类;
CBQ根据IP优先级或者DSCP优先级、IP报文的五元组、入接口规则来对进入系统的报文进行分类,每个分类可以使用EF、LLQ、AF和BE类型的队列,对于不匹配任何分类的报文,送入系统的默认BE类型的缺省类;
1、EF队列和LLQ队列 限制队列可使用的最大带宽
满足低时延业务;
华为提供的两种类型的低延迟队列EF和LLQ,LLQ队列比EF队列时延更低;
CBQ队列最多只允许为4个用户类定义EF或LLQ队列,最多可包含的LLQ和EF队列之和为4;
每个EF和LLQ队列按照配置顺序进行绝对优先级调度,先配置的队列先被调度;
2、AF队列 保证队列可使用的最小带宽
满足需要带宽保证的关键数据业务;
每个AF队列分别对应一类用户报文,用户可以设定每类报文占用的带宽,在系统调度报文出队的时候,按用户为 各类报文设定的带宽将报文出队发送,可以实现各个类的队列公平调度;
当接口有剩余带宽时,AF队列按照权值分享剩余带宽;
对于AF队列,当队列长度达到队列的最大长度时,缺省采用尾丢弃的策略,但用户还可以选择用WRED丢弃策略;
3、BE队列
满足不需要严格Qos保证的尽力发送业务;
如果进入系统的报文没有匹配用户定义的所有类别,报文被送入系统定义的缺省类;
允许为缺省类配置AF队列并配置带宽,但是更多的情况是为缺省类配置BE队列;
BE队列使用WFQ调度,进入BE队列的流越多,每个流分享的带宽越平均;
CBQ中,WFQ在调度报文入队列之前,根据IP报文五元组和ToS优先级自动进行流分类,并尽可能多的提供队列,将每个流均匀地放入不同队列中,从而在总体上均衡各个流的延迟;
在出队的时候,WFQ按流的优先级来分配流应占用的带宽,优先级数值越大所得的带宽就越多;
二、拥塞避免
拥塞避免是在队列尾部提供的一种基于权值的RED机制,默认是直接在队列尾部丢弃报文;
1、尾丢弃
当拥塞发生,队列长度达到最大值后,所有新入队列的报文都将因没有缓存空间而被丢弃;
缺点是不加区分地丢包和引发TCP全局同步现象;
TCP全局同步现象就是在队列中同时丢弃多个TCP连接的报文,造成多个TCP连接同时降低流量,之后又会在某个时间同时出现流量高峰,使网络流量起伏波动;
2、WRED
为解决TCP全局同步问题,RED提早随机丢弃一些低级别报文,不同时丢包行为可以避免多个TCP连接同时降低发送速度出现TCP全局同步现象,并使TCP流量趋于平缓稳定;
报文依次进入队列,当队列深度到达最小阀值时开始丢包;
随着队列深度增加丢包率按线性比例增加,最高丢包率不超过设置的丢包率;
直至到达最高阀值后报文全部丢弃;
基于RED,WRED队列支持基于DSCP或IP优先级进行RED丢弃;
WRED中权值是IPP或DSCP,每个队列可以针对每一种优先级独立设置丢弃报文的上下门限及丢包率,即每个权值都定义一个独立的丢弃曲线;
WRED有两种配置方式,一种是基于队列queue-profile的WRED,另一种是CBQ下的WRED;
定义每个权值的丢弃曲线是通过定义丢弃模版来实现的,丢弃模板是队列各优先级WRED参数的集合;
(1)配置基于队列queue-profile的WRED
将定义好的丢弃模版在队列模版中关联后应用到接口上,接口根据绑定的丢弃模版实现拥塞避免;
(2)配置CBQ下的WRED
丢弃模板在流行为中绑定后,在流策略下将流分类和对应的流行为关联,并将流策略应用到接口上,可以实现对匹配流分类规则流量的拥塞避免;