「QoS」- 拥塞管理(Congestion Management)

  CREATED BY JENKINSBOT

解决方案

拥塞管理是指网络在发生拥塞时,针对不同类型的业务流量,如何进行管理和控制;

原理简述

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

管理的内容包括:报文离开队列的时间、顺序,以及各个队列之间报文离开的相互关系则由队列调度算法决定;

队列技术

将从一个接口发出的所有报文放入多个队列,按照各个队列的优先级进行处理,对报文的转发进行不同的调度处理;

调度算法

不同的队列调度算法用来解决不同的问题,并产生不同的效果;

特性特征

WIP

应用场景

在网络中,当共享同一网络的多种业务竞争相同的资源(带宽,缓冲区等)时可能会产生拥塞,高优先级业务无法得到保证。此时可以通过优先级映射的结果将报文送入不同的队列,如图所示,在设备出方向为不同的队列配置不同的调度方式,可以达到对不同业务进行差分服务的目的;

队列技术(Queue)

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

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

下行队列

每个端口上都有 8 个下行队列,称为 CQ(Class Queue)队列,也叫端口队列(Port-queue);
分别为 BE、AF1、AF2、AF3、AF4、EF、CS6 和 CS7;

例如 NE20E 设备和 NE40E 设备,每个端口上都有 8 个下行队列;

注意事项、该队列技术是出现在接口(端口)上的。在 MQC 中,并没有这八个端口的概念。

调度算法

先进先出,FIFO(First In First Out)

单个队列的报文采用 FIFO 原则入队和出队;

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

优点:实现机制简单且处理速度快;
缺点:FIFO 不对报文进行分类,所以不能有差别地对待优先级不同的报文;

严格优先级,SP(Strict Priority)

SP(Strict Priority)调度就是严格按照队列优先级的高低顺序进行调度。只有高优先级队列中的报文全部调度完毕后,低优先级队列才有调度机会;

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

在报文出队的时候:
1)首先,让高优先队列中的报文出队并发送,直到高优先队列中的报文发送完,
2)然后,发送中优先队列中的报文,直到发送完,
3)接着,是低优先队列。在调度低优先级队列时,如果高优先级队列又有报文到来,则会优先调度高优先级队列;

优点:对高优先级的报文提供优先转发,较高优先级队列的报文将会得到优先发送,而较低优先级的报文后发送;
缺点:低优先级队列可能出现“饿死”现象。当拥塞时,如果较高优先级队列中长时间有报文存在,那么低优先级队列中的报文就会得不到调度机会;

加权公平队列,WFQ(Weighted Fair Queuing)

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

当然,Bit-by-bit 调度模型只是理想化的模型,实际上,Huawei NE40E 实现的 WFQ 是按照一定的粒度,例如 256B、1KB,或其他粒度,具体按何种粒度,与单板类型相关;

在报文出队的时候,首先让高优先队列中的报文出队并发送,直到高优先队列中的报文发送完,然后发送中优先队列中的报文,直到发送完,接着是低优先队列。在调度低优先级队列时,如果高优先级队列又有报文到来,则会优先调度高优先级队列。这样,较高优先级队列的报文将会得到优先发送,而较低优先级的报文后发送;

优点:
不同的队列获得公平的调度机会,从总体上均衡各个流的延迟;
短报文和长报文获得公平的调度:如果不同队列间同时存在多个长报文和短报文等待发送,让短报文优先获得调度,从而在总体上减少各个流的报文间的抖动;
从统计上看,权重越小,所分得的带宽越少。权重越大,所分得的带宽越多;

缺点:低时延业务仍得不到及时调度;无法实现用户自定义分类规则;

队列 and 调度

每个接口有 8 个端口队列,用户可以为其都配置成 SP 调度,或者是基于权重的调度。即所有的 8 个端口队列可以全部配置成 WFQ,也可以全部配置成 PQ,也可以全部配置成 LPQ,也可以组合;

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

PQ 队列

采用 SP 调度算法

PQ 队列之间采用 SP 调度算法,当从队列调度报文时,先从高优先级的队列调度报文。这样,可对不同业务数据提供绝对的优先,对时延敏感的实施应用如 VoIP 的延时可以得到保证,对优先业务的报文带宽占用可以绝对优先;

场景:通常情况下,只时延敏感的业务入 PQ 队列;

缺点:报文饿死现象,如果不对高优先级的报文带宽加限制,会造成低优先级报文得不到带宽,可能得不到调度机会;

WFQ 队列

采用 WFQ 调度算法

WFQ 队列是按权重进行调度的,调度算法可以是 WFQ 调度算法,按权重进行剩余带宽的分配;

LPQ 队列

采用 SP 调度算法

LPQ 队列是在高速链路(以太网)接口上实现的队列调度机制。低速链路(如 Serial、MP-Group)上不支持 LPQ 队列;

LPQ 队列之间的调度方式与 PQ 队列一样,也采用 SP 调度。不同在于拥塞时 PQ 可以抢占 WFQ 的带宽,而 LPQ 不可以抢占 WFQ 的带宽。在 PQ 和 WFQ 队列调度结束后,如果还有剩余带宽则分配给 LPQ;

实际应用中,可以将 BE 流用 LPQ 进行调度。这样,在网络负载较重时,BE 流可以完全被限制,优先满足其它业务;

三种队列的调度顺序

端口队列调度顺序:PQ、WFQ、LPQ 之间采用 SP 调度算法,优先调度 PQ 队列,再调度 WFQ 队列,最后调度 LPQ 队列;

队列间的调度流程:
1)在调度出队的时候,若 PQ 队列中有报文,则总是优先发送 PQ 队列中的报文,直到 PQ 队列中没有报文时才调度发送 WFQ 队列中的报文。只要 PQ 队列中有报文,系统就会优先发送 PQ 队列中的报文;
2)若 PQ 队列中没有报文时,则调度 WFQ 队列。如果在调度 WFQ 队列过程中,PQ 队列又有报文到来,则会优先调度 PQ 队列;
3)直到 WFQ 中的报文被发送完毕,才调度 LPQ 队列中的报文;

调度结果:
1)首先保证 PQ 队列的 PIR 带宽,剩余带宽在各 WFQ 队列间按权重分配;
2)当满足所有 WFQ 队列的 PIR 带宽后,如果此时还有剩余带宽,则分配给 LPQ;