S5700系列交换机的QoS队列调度和报文丢弃
背景信息
队列调度和报文丢弃是为了应对网络拥塞。拥塞是指由于网络资源不足而造成速率下降、引入额外延时的一种现象。例如大量数据从高带宽链路涌入低带宽链路,低速率的输出接口无法承受超额数据流。在IP分组交换及多业务并存的复杂环境下,拥塞极为常见。
提高链路带宽是解决拥塞问题的最佳方案。但是,如果您不希望提高硬件设备能力,也有用于防止、减少或控制网络拥塞的方法。只有在需要保证突发流量中重要业务的质量时,推荐使用队列调度(也称为拥塞管理)和报文丢弃(也称为拥塞避免)。如果业务流量长时间超过带宽限制,就需要考虑网络扩容,或者使用专用设备基于上层应用控制业务。
队列调度技术和报文丢弃方式
优先级队列调度(PQ)
优先队列PQ(Priority Queuing)调度,就是严格按照队列优先级的高低顺序进行调度。只有高优先级队列中的报文全部调度完毕后,低优先级队列才有调度机会。交换机配置PQ调度后,按照7、6、5、4、3、2、1、0从高到低的优先级依次进行调度,发送报文。
如图1-1所示,Queue7比Queue6具有更高的优先权,Queue6比Queue5具有更高的优先权,依次类推。只要链路能够传输分组,Queue7尽可能快地被服务。只有当Queue7为空,调度器才考虑Queue6。当Queue6有分组等待传输且Queue7为空时,Queue6以链路速率接收类似的服务。当Queue7和Queue6为空时,Queue5以链路速率接收服务,以此类推。
PQ调度算法对低时延业务非常有用。假定数据流X在每一个节点都被映射到最高优先级队列,那么当数据流X的分组到达时,则分组将得到优先服务。
然而PQ调度机制会使低优先级队列中的报文得不到调度机会。例如,如果映射到Queue7的数据流在一段时间内以100%的输出链路速率到达,调度器将始终无法服务Queue6及以下的队列。
为了避免队列饥饿,上游设备需要精心规定数据流的业务特性,以确保映射到Queue7的业务流不超出输出链路容量的一定比例,这样Queue7会经常为空,低优先级队列中的报文才能得到调度机会。
加权循环调度(WRR)
加权循环调度WRR(Weight Round Robin)调度示意图如图1-2所示。
在进行WRR调度时,设备根据每个队列的权值进行轮循调度。调度一轮权值减一,权值减到零的队列不参加调度,当所有队列的权限减到0时,开始下一轮的调度。例如,用户根据需要为接口上8个队列指定的权值分别为4、2、5、3、6、4、2和1,按照WRR方式进行调度的结果请参见表1-1所示。
队列索引 |
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调度的以报文为单位,因此每个队列没有固定的带宽,同等调度机会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽。
缺省情况下,S5720I-SI、S5720-LI、S5720S-LI、S5720S-SI、S5720-SI、S5730S-EI、S5730-SI、S5735-L、S5735S-L、S5735S-L-M、S5735-S、S5735-S-I和S5735S-S接口队列的调度模式为WRR调度模式,且参与WRR调度的队列的WRR权值为1。也就是说,在缺省情况下,设备在队列0~7间依次、轮流地进行调度。
WRR调度避免了采用PQ调度时发生拥塞的情况下低优先级队列中的报文长时间得不到服务的缺点。WRR调度还有一个优点是,虽然多个队列的调度是轮询进行的,但对每个队列不是固定地分配服务时间片——如果某个队列为空,那么马上换到下一个队列调度,这样带宽资源可以得到充分的利用。但WRR调度无法使低延时需求业务得到及时调度。
加权赤字循环调度(WDRR)
WDRR(Weighted Deficit Round Robin)调度以报文长度为权重进行调度,如果报文长度超过了队列的调度能力,WDRR调度允许出现负权重,以保证长报文也能够得到调度。但下次轮循调度时该队列将不会被调度,直到权重为正,该队列才会参与WDRR调度。WDRR调度相对于WRR而言,解决了WRR只关心报文,同等调度机会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽的问题,在调度过程中考虑包长的因素以达到调度的速率公平性。
当调度模式配置为WDRR时,用户可为每个队列配置权重,设备根据权重轮询调度各队列。缺省情况下,S5720-HI、S5730-HI、S5731-H、S5731-S、S5731S-H、S5731S-S和S5732-H接口队列的调度模式为WDRR调度模式,且参与WDRR调度的队列的WDRR权值为1。
WDRR调度中,Deficit表示队列的带宽赤字,初始值为0。每次调度前,系统按权重为各队列分配带宽,计算Deficit值,如果队列的Deficit值大于0,则参与此轮调度,发送一个报文,并根据所发送报文的长度计算调度后Deficit值,作为下一轮调度的依据;如果队列的Deficit值小于0,则不参与此轮调度,当前Deficit值作为下一轮调度的依据。
如图1-3所示,假设用户配置各队列权重为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调度避免了采用PQ调度时发生拥塞的情况下低优先级队列中的报文长时间得不到服务的缺点,也避免了各队列报文长度不等或变化较大时,WRR调度不能按配置比例分配带宽资源的缺点。但WDRR调度仍然没有解决WRR调度中低延时需求业务得不到及时调度的问题。
尾部丢弃
尾部丢弃(Tail-Drop)是传统的报文丢弃方式,即网络发生拥塞时报文进入队列,当队列已满则后面的流量直接丢弃,无法进行缓存。尾丢弃策略不考虑任何QoS参数,无法提供差分服务。交换机缺省支持的丢弃策略即为尾丢弃。
这种丢弃策略会引发TCP全局同步现象,导致TCP连接始终无法建立。所谓TCP全局同步现象如图,三种颜色表示三条TCP连接,当同时丢弃多个TCP连接的报文时,将造成多个TCP连接同时进入拥塞避免和慢启动状态而导致流量降低,之后又会在某个时间同时出现流量高峰,如此反复,使网络流量忽大忽小。
S5720I-SI、S5720-LI、S5720S-LI、S5720S-SI、S5720-SI、S5730S-EI和S5730-SI支持通过尾丢弃模板配置队列的最大缓存的字节数和报文数。最大字节数和最大报文数只有要有一个被占满,则认为网络发生拥塞,后续报文开始丢弃。
若队列中的缓存始终不高于上限,设备不丢弃任何报文。
若占据缓冲区的报文逐渐增多,甚至高于缓存上限,那么设备将丢弃缓冲区的报文,直至队列中的缓存不高于下限。
加权随机先期检测(WRED)
基于RED技术,设备实现了加权随机先期检测WRED(Weighted Random Early Detection)。
相较于RED,WRED的优势在于流队列支持基于DSCP或IP优先级进行报文丢弃。每一种优先级都可以独立设置报文丢包的上下门限及丢包率,并规定:
当队列的长度小于阈值下限时,不丢弃报文,丢弃概率为0%。
当队列的长度大于阈值上限时,丢弃所有新收到的报文,即进行尾丢弃,丢弃概率为100%。
当队列的长度在阈值下限和阈值上限之间时,开始随机丢弃新收到的报文。方法是为每个新收到的报文赋予一个随机数,并用该随机数与当前队列的丢弃概率比较,如果小于丢弃概率则报文被丢弃。队列越长,报文被丢弃的概率越高。
仅S5720-EI、S5720-HI、S5730-HI、S5731-H、S5731-S、S5731S-H、S5731S-S和S5732-H支持通过WRED丢弃模板配置报文丢弃。
WRED配置在接口的出方向,首先定义一个丢弃模板,模板中可以区分颜色配置,最终模板在队列上应用。因此可以这样理解,WRED可以基于不同的队列,不同的颜色分配报文的丢弃参数。越重要的报文其最低门限和最高门限都较不重要的报文要高,而最高丢弃概率则较低。
因此,WRED按照一定的丢弃概率主动丢弃队列中的报文,从而在一定程度上避免拥塞问题。
由于WRED丢弃模板是根据报文的颜色采取不同的处理方式,所以在配置WRED前,需要为报文着色。
颜色是指报文在设备内部的丢弃优先级,用于决定当一个队列发生拥塞时报文的丢弃顺序,对内部优先级与队列的映射关系没有影响。颜色有3种取值,IEEE定义的优先级从低到高依次为Green、Yellow、Red。丢弃优先级的高低实际取决于对应参数的配置。例如,配置Green最大只能使用50%缓存,Red最大可以使用100%缓存,则Green的丢弃优先级比Red高。所以并不是标记为Red的报文一定比标记为Green的报文丢弃优先级就高。推荐使用的各种颜色报文WRED参数设置如表1-2所示:
将报文的优先级映射为内部优先级/颜色的配置方法,请参见对应版本的《S2720, S5700, S6700系列以太网交换机 产品文档》-配置指南(命令行)-QoS配置-优先级映射配置(DiffServ域模式)-配置优先级映射。
内部优先级与队列之间的对应关系
缺省情况下,内部优先级与端口队列的对应关系是一对一。在实际部署时,有时需要调整内部优先级与队列的映射关系或者将不同的内部优先级放入同一队列中进行调度,从而有效地节约设备缓存。设备按照内部优先级将报文送入不同的端口队列,从而针对队列进行队列调度、报文丢弃等处理。以盒式交换机为例,缺省情况下内部优先级(也称为服务等级或本地优先级)与各队列之间的对应关系如表1-3所示。更多信息,请查看实际设备对应版本的《配置指南-QoS》-优先级映射配置-优先级映射缺省配置。
有多种方式可以改变流量所在的队列,例如:
- 配置入方向的基于MQC的重标记优先级。若流策略下有remark 8021p、remark ip-precedence或remark dscp动作,则系统根据remark后的报文优先级进行报文优先级到内部优先级的映射,并根据映射后的内部优先级入队列。
- 执行命令qos local-precedence-queue-map local-precedence queue-index,配置内部优先级和队列之间的映射关系。内部优先级和队列之间的映射关系仅会在接口入方向上起作用,即映射关系影响报文流入队列操作。
配置示例
配置基于WRR的队列调度
S5700系列交换机中,仅S5720I-SI、S5720-LI、S5720S-LI、S5720S-SI、S5720-SI、S5730S-EI和S5730-SI支持配置基于WRR的队列调度。
假设交换机通过上行口GE0/0/1接收来自Internet的语音、视频和数据三类业务的报文,通过下行口GE0/0/2向用户转发这些报文。语音、视频和数据三类报文携带的802.1p优先级分别为7、5、2。为了减轻网络拥塞造成的影响,保证用户对于高优先级、低延迟业务的服务要求,配置需求如下表所述。
业务类型 |
802.1p优先级 |
WRR权重 |
---|---|---|
语音 |
7 |
0 |
视频 |
5 |
20 |
数据 |
2 |
10 |
在网络已经连通的前提下,需要进行以下配置:
- 配置接口信任报文的类型
# 配置接口信任报文的802.1p优先级。由于业务报文是根据802.1p优先级进行区分的,所以需要确保报文进入接口GE0/0/1后,交换机根据802.1p优先级对应的映射关系进行映射处理。
[Switch] interface gigabitethernet 0/0/1 [Switch-GigabitEthernet0/0/1] trust 8021p [Switch-GigabitEthernet0/0/1] quit
- 配置调度模板
# 创建调度模板p1,并配置队列调度参数。缺省情况下,802.1p优先级分别为7、5、2的报文,分别进入队列7、队列5、队列2。
[Switch] qos schedule-profile p1 [Switch-qos-schedule-profile-p1] qos wrr //配置接口队列的调度模式为WRR调度模式 [Switch-qos-schedule-profile-p1] qos queue 7 wrr weight 0 //配置语音流量的WRR权值为0 [Switch-qos-schedule-profile-p1] qos queue 5 wrr weight 20 //配置视频流量的WRR权值为20 [Switch-qos-schedule-profile-p1] qos queue 2 wrr weight 10 //配置数据流量的WRR权值为10 [Switch-qos-schedule-profile-p1] quit
- 应用调度模板
# 在交换机的下行口GE0/0/2上应用调度模板p1,使该接口应用模板p1进行队列调度。
[Switch] interface gigabitethernet 0/0/2 [Switch-GigabitEthernet0/0/2] qos schedule-profile p1 [Switch-GigabitEthernet0/0/2] quit
- (可选)检查配置结果
执行命令display qos queue statistics interface interface-type interface-number [ queue queue-index ],查看接口上基于队列的流量统计信息。本例中,应关注队列7、队列5和队列2通过的报文数量(即回显信息中Passed Packets的计数)。由于队列5的WRR权值为20,队列2的WRR权值为10,因此从统计上看,队列5中的报文流被调度的次数将是队列2的两倍。此外,本示例配置队列7的权值为0,该队列将以PQ方式调度,此时整体调度模式为PQ+WRR方式。在调度时,设备首先按照PQ方式调度队列7中的报文流,只有队列7的报文流全部调度完毕后,才开始以WRR方式循环调度队列2和队列5中的报文流。
[Switch] display qos queue statistics interface GigabitEthernet 0/0/2 …… ------------------------------------------------------------ Queue ID : 2 CIR(kbps) : 0 PIR(kbps) : 1,000,000 Passed Packets : 0 Passed Rate(pps) : 0 Passed Bytes : 0 Passed Rate(bps) : 0 Dropped Packets : 0 Dropped Rate(pps) : 0 Dropped Bytes : 0 Dropped Rate(bps) : 0 ------------------------------------------------------------ …… ------------------------------------------------------------ Queue ID : 5 CIR(kbps) : 0 PIR(kbps) : 1,000,000 Passed Packets : 0 Passed Rate(pps) : 0 Passed Bytes : 0 Passed Rate(bps) : 0 Dropped Packets : 0 Dropped Rate(pps) : 0 Dropped Bytes : 0 Dropped Rate(bps) : 0 ------------------------------------------------------------ …… ------------------------------------------------------------ Queue ID : 7 CIR(kbps) : 0 PIR(kbps) : 1,000,000 Passed Packets : 0 Passed Rate(pps) : 0 Passed Bytes : 0 Passed Rate(bps) : 0 Dropped Packets : 0 Dropped Rate(pps) : 0 Dropped Bytes : 0 Dropped Rate(bps) : 0 ------------------------------------------------------------
配置基于WRED丢弃模板的报文丢弃
S5700系列交换机中,仅S5720-EI、S5720-HI、S5730-HI、S5731-H、S5731-S、S5731S-H、S5731S-S和S5732-H支持配置基于WRED丢弃模板的报文丢弃。
使用前文中表1-2的推荐值在GE0/0/3上配置基于WRED丢弃模板的报文丢弃。其中企业部门1流量的802.1p优先级为2,企业部门2流量的802.1p优先级为5。
在网络已经连通的前提下,需要进行以下配置:
- 配置优先级映射
# 配置DiffServ域sp,为报文着色,并在报文的入接口(GE0/0/1和GE0/0/2)应用DiffServ域sp。由于WRED丢弃模板是根据报文的颜色采取不同的处理方式,所以在配置WRED前,需要为报文着色。
[Switch] diffserv domain sp //配置DiffServ域 [Switch-dsdomain-sp] 8021p-inbound 2 phb af2 red //将来自企业部门1的报文(即802.1p优先级为2的报文)标记为红色,802.1p值与PHB行为仍保持缺省对应关系 [Switch-dsdomain-sp] 8021p-inbound 5 phb ef yellow //将来自企业部门2的报文(即802.1p优先级为5的报文)标记为黄色,802.1p值与PHB行为仍保持缺省对应关系 [Switch-dsdomain-sp] quit [Switch] interface gigabitEthernet 0/0/1 [Switch-GigabitEthernet0/0/1] trust upstream sp [Switch-GigabitEthernet0/0/1] quit [Switch] interface gigabitEthernet 0/0/2 [Switch-GigabitEthernet0/0/2] trust upstream sp [Switch-GigabitEthernet0/0/2] quit
- 配置WRED丢弃模板
# 创建WRED丢弃模板sp,并根据推荐值配置红色报文和黄色报文的WRED参数。
[Switch] drop-profile sp [Switch-drop-sp] color yellow low-limit 60 high-limit 80 discard-percentage 20 [Switch-drop-sp] color red low-limit 40 high-limit 60 discard-percentage 30 [Switch-drop-sp] quit
- 应用WRED丢弃模板
# 在报文的出接口GE0/0/3的队列2和队列5上应用WRED丢弃模板sp。缺省情况下,802.1p优先级分别为2和5的报文,内部优先级分别为AF2和EF,分别进入队列2和队列5。
[Switch] interface gigabitEthernet 0/0/3 [Switch-GigabitEthernet0/0/3] qos queue 2 wred sp [Switch-GigabitEthernet0/0/3] qos queue 5 wred sp
- (可选)检查配置结果
# 查看DiffServ域sp的配置信息。
[Switch] display diffserv domain name sp diffserv domain name:sp 8021p-inbound 0 phb be green 8021p-inbound 1 phb af1 green 8021p-inbound 2 phb af2 red 8021p-inbound 3 phb af3 green 8021p-inbound 4 phb af4 green 8021p-inbound 5 phb ef yellow 8021p-inbound 6 phb cs6 green 8021p-inbound 7 phb cs7 green 8021p-outbound be green map 0 ……
# 查看WRED模板sp的配置信息。由于没有在WRED丢弃模板sp中配置绿色报文的WRED参数,所以绿色报文的丢弃上下门限百分比和最大丢弃概率值均为缺省值100。
[Switch] display drop-profile name sp Drop-profile[1]: sp Queue depth : default Color Low-limit High-limit Discard-percentage - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Green 100 100 100 Yellow 60 80 20 Red 40 60 30 -----------------------------------------------------------------
根据以上配置,以企业部门2的流量为例,当进入队列5的报文长度占整个队列长度的60%时,队列开始丢包;当进入队列5的报文长度占整个队列长度的80%时,队列会丢弃所有新收到的报文,相当于尾丢弃策略。