QoS实现之队列调度与报文丢弃
前面的专题里面介绍了通过优先级映射或者MQC对报文进行分类和标记,那么分类之后要做什么呢?那就是根据分类结果对报文进行流量控制处理。拥塞管理和拥塞避免就是两种流量控制手段,比如下面的场景中,当LSW1上行流量大于接口带宽时,那么在出方向就可能会发生网络拥塞,此时就需要配置拥塞管理和拥塞避免。下面就来介绍一下拥塞管理和拥塞避免这两种技术。
图一 拥塞管理拥塞避免应用场景
1 拥塞管理
1.1拥塞管理可以做什么
前面我们介绍到当网络硬件设备能力无法承载各种应用对带宽的需求时,网络拥塞无法避免。拥塞管理就是在网络发生拥塞时,通过队列技术对流量进行管理和控制,优先保证某类报文的时延等QoS服务质量。
队列就好比我们平时去银行办理业务时候需要排队,假设银行只有一个窗口提供服务,当出现VIP用户的时候,他的业务会被优先处理,当VIP用户的业务办理完毕后,普通用户才能继续排队办理业务。
1.2拥塞管理技术及应用
拥塞管理技术的基础是队列技术,交换机上每个出接口都有8个队列,队列索引分别为0、1、2、3、4、5、6、7,每个队列可以缓存一定数量的报文。当网络发生拥塞时,报文会根据本地优先级与队列之间的映射关系,自动将报文流送入不同的队列。不同的拥塞管理技术就可以根据各自的调度算法,实现对队列流量按照优先级发送。
下面介绍一下比较常用的两种调度方式。
PQ调度
优先队列PQ(Priority Queuing)调度,就是严格按照队列优先级的高低顺序进行调度。只有高优先级队列中的报文全部调度完毕后,低优先级队列才有调度机会。交换机配置PQ调度后,按照7、6、5、4、3、2、1、0从高到低的优先级依次进行调度,发送报文。
以前面银行队列为例,假设银行只有一个窗口提供服务,用户根据自己银行卡的额度取号排队时,分为A、B、C三种号,按照级别规定服务优先级分别为A>B>C,即A号段的顾客优先获得服务,当没有A号段顾客时,B号段的顾客获得服务,当没有B号段顾客时,C号段的顾客才能获得服务。这种方式的缺点也显而易见,B号段和C号段的用户可能会因为长时间得不到服务而产生强烈不满。
如图所示,队列优先级为队列1>队列2>队列3。在报文出队的时候,首先让高优先队列中的报文出队并发送,直到高优先级队列中的报文发送完,然后发送中优先级队列中的报文,直到发送完,接着是低优先级队列。
如果在中优先级队列等待的过程中,高优先级队列还有报文不停地进入队列,则中优先级队列始终处于等待状态。
如果高优先级队列的报文已经发送完了,中优先级队列中报文4、5已经发送完,在报文6被发送之前,高优先级队列又有报文进入队列,则系统先处理高优先级报文。
WRR调度
加权轮询调度WRR(Weight Round Robin)在队列之间进行轮流调度,根据每个队列的权重来调度各队列中的报文流。
如果银行的有三个窗口工作且采用WRR调度方式,三个窗口的权重比例分别为50%,25%,25%,按照业务熟练程度,VIP窗口处理2位客户时,另外两个窗口可以分别处理一位客户。这样可以保证所有窗口的客户都可以得到服务,但是VIP窗口的客户排队时间更短。
假设三个银行窗口看作是三个队列,详细的调度过程如下:
交换机根据每个队列的权值进行轮循调度。调度一轮计数器减一,计数器减到零的队列不参加调度。当所有队列的计数器减到零时,开始新一轮的调度,详细调度过程如下:
首先计数器初始化: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。
从统计上看,各队列中的报文被调度的次数与该队列的权值成正比,权值越大被调度的次数相对越多。如果该端口带宽为100Mbit/s,则可以保证最低权重的队列至少获得25Mbit/s带宽,避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点,但是WRR调度无法保证对时延要求高的业务报文优先发送。
下面我们通过一个举例来介绍一下WRR调度的应用。如下所示场景,用户希望当网络发生拥塞时,部门1与部门2业务流量的调度比例为2:3。
我们通过测试仪来模拟部门1和部门2的用户流量。当通过测试仪对接口进行流量线速转发时,从GE0/0/1和GE0/0/2进入的流量全部从GE0/0/3转发出去,会产生流量拥塞。假设部门1的流量属于VLAN10,802.1p优先级为2,部门2的流量属于VLAN20,802.1p优先级为5。
部门1流量:
部门2流量:
在LSW1上配置WRR调度,分别配置权重为40和60。不同的交换机款型支持的配置方法不同,下面分别以S5700LI和S5720EI为例,其他款型的配置方法请参见产品手册。
S5700LI采用下面的配置步骤,802.1p优先级缺省与0~7号队列一一映射,因此配置队列2的权重为40,队列5的权重为60。
[LSW1] qos schedule-profile sp
[LSW1-qos-schedule-profile-sp] qos queue 2 wrr weight 40 [LSW1-qos-schedule-profile-sp] qos queue 5 wrr weight 60
[LSW1-qos-schedule-profile-sp] quit
[LSW1] interface GigabitEthernet 0/0/3
[LSW1-GigabitEthernet0/0/3] qos schedule-profile sp //接口出方向应用WRR调度配置
[LSW1-GigabitEthernet0/0/3] quit
[LSW1] interface GigabitEthernet 0/0/1
[LSW1-GigabitEthernet0/0/1] trust 802.1p //S5700LI缺省不信任任何优先级,需要配置
[LSW1-GigabitEthernet0/0/1] quit
[LSW1] interface GigabitEthernet 0/0/2
[LSW1-GigabitEthernet0/0/2] trust 802.1p
[LSW1-GigabitEthernet0/0/2] quit
S5720EI采用下面的配置步骤,802.1p优先级缺省与0~7号队列一一映射,因此配置队列2的权重为40,队列5的权重为60。接口缺省信任802.1p优先级,因此不需要配置信任模式。
[LSW1] interface GigabitEthernet 0/0/3
[LSW1-GigabitEthernet0/0/3] qos wrr
[LSW1-GigabitEthernet0/0/3] qos queue 2 wrr weight 40
[LSW1-GigabitEthernet0/0/3] qos queue 5 wrr weight 60
配置完毕后,我们通过查看GE0/0/3的流量统计信息可以发现,队列2和队列5的流量速率比例基本为2:3。
<LSW1> display qos queue statistics interface GigabitEthernet 0/0/3
————————————————————
Queue ID : 2
CIR(kbps) : 0
PIR(kbps) : 1,000,000
Passed Packets : 409,269,881
Passed Rate(pps) : 596,734
Passed Bytes : 26,193,272,384
Passed Rate(bps) : 305,527,808
Dropped Packets : 345,407,253
Dropped Rate(pps) : 895,096
Dropped Bytes : 22,106,064,192
Dropped Rate(bps) : 458,289,336
————————————————————
Queue ID : 5
CIR(kbps) : 0
PIR(kbps) : 1,000,000
Passed Packets : 345,465,822
Passed Rate(pps) : 895,133
Passed Bytes : 22,109,812,608
Passed Rate(bps) : 458,308,224
Dropped Packets : 409,211,630
Dropped Rate(pps) : 596,697
Dropped Bytes : 26,189,544,320
Dropped Rate(bps) : 305,508,952
————————————————————
注:举例中只给出交换机实际用到的队列2和队列5的显示信息,display回显中的其他5个队列在此文中省略。
PQ调度和WRR调度各有优缺点,WRR调度可以提供相对公平的调度机制,保证各业务都能得到一定的服务,但是对于低时延业务无法保证及时调度。PQ调度可以保证低时延业务及时调度,但是可能会存在低优先级业务一直无法被调度的情况。因此,实际网络中通常使用PQ WRR混合调度的方式来实现拥塞管理。通常将对时延要求较高的业务流量进入的队列配置为PQ调度,其他队列配置为WRR调度。当PQ队列有流量时,优先处理。当PQ队列中没有流量时再按照权重分别调度WRR队列中的流量。
对于盒式交换机,如果要配置PQ WRR的混合调度,只需要将配置PQ调度的队列权重配置为0即可。比如上面的举例中,假设需要配置队列1为PQ调度,队列2和队列5为WRR调度。以S5720EI为例。
[LSW1] interface GigabitEthernet 0/0/3
[LSW1-GigabitEthernet0/0/3] qos wrr
[LSW1-GigabitEthernet0/0/3] qos queue 1 wrr weight 0 //配置队列1为PQ调度
[LSW1-GigabitEthernet0/0/3] qos queue 2 wrr weight 40
[LSW1-GigabitEthernet0/0/3] qos queue 5 wrr weight 60
对于框式交换机,如果要配置PQ WRR的混合调度,只需要将对应的队列设置为PQ调度。
[LSW1] interface GigabitEthernet 1/0/3
[LSW1-GigabitEthernet1/0/3] qos pq 1 //配置队列1为PQ调度
[LSW1-GigabitEthernet1/0/3] qos queue 2 wrr weight 40
[LSW1-GigabitEthernet1/0/3] qos queue 5 wrr weight 60
除了上面介绍的调度方法,交换机还支持DRR、WFQ等多种拥塞管理方法。
DRR调度
DRR(Deficit Round Robin)调度也是循环调度,但是相对于WRR只考虑报文个数的问题,DRR同时考虑报文的大小,在调度过程中考虑包长的因素以达到调度速率公平性。DRR调度中,Deficit表示队列的带宽赤字,初始值为0。每次调度前,系统按权重为各队列分配带宽,计算Deficit值,如果队列的Deficit值大于0,则参与此轮调度,发送一个报文,并根据所发送报文的长度计算调度后Deficit值,作为下一轮调度的依据;如果队列的Deficit值小于等于0,则不参与此轮调度,当前Deficit值作为下一轮调度的依据。
举个例子,假设我们规定银行三个窗口根据现金额度来办理取钱业务,按照2:1:1的权重为VIP窗口和两个普通窗口分配现金,现在每轮为VIP窗口分配5000元现金,为普通窗口分配2500元现金。
l 第一轮业务办理时,VIP客户提取10000元,但是两个普通用户分别都提取2000元,则VIP窗口在办完第一轮业务后剩余额度为-5000元,普通窗口额度分别为500元。
l 第二轮业务办理时,VIP窗口分配5000元之后额度变为0,普通窗口分配2500元之后额度变为3000,因此在第二轮中VIP窗口不办理业务,普通窗口则可以办理业务。
WFQ调度
公平队列FQ(Fair Queuing)的目的是尽可能公平地分享网络资源,使所有流的延迟和抖动达到最优。
根据报文的协议类型、源和目的TCP或UDP端口号、源和目的IP地址、ToS域中的优先级位等自动进行流分类,并且尽可能多地提供队列,以将每个流均匀地放入不同队列中,从而在总体上均衡各个流的延迟。在出队的时候,WFQ按流的优先级(precedence)来分配每个流应占有带宽。优先级的数值越小,所得的带宽越少。优先级的数值越大,所得的带宽越多。
不同的调度方式及应用场景如下所示,具体原理请参见S系列交换机产品文档,本专题不再一一介绍。
调度方式 | 调度原理 | 优点 | 缺点 |
PQ | 按照队列优先级依次发送报文 | 可以完全保证高优先级队列的流量得到服务 | 如果高优先级队列一直有流量发送,则低优先级队列的流量得不到服务 |
WRR | 按照队列权重调度各队列中的报文 | 可以提供相对公平的服务 | 尺寸的大报文占用更多带宽 |
DRR | 按照队列权重调度各队列中的流量 | 考虑了报文尺寸问题,调度速率更加公平 | 低时延需求业务得不到及时调度 |
WFQ | 按流的优先级来分配每个流的带宽 | 按照流的优先级提供带宽可以保证相同优先级的业务之间的公平 | 低时延需求业务得不到及时调度 |
PQ WRR | 结合了PQ调度和WRR的调度的优点 | ||
PQ DRR | 结合了PQ调度和DRR的调度的优点 | ||
PQ WFQ | 结合了PQ调度和WFQ的调度的优点 |
2 拥塞避免
2.1什么是拥塞避免
从前面的介绍我们知道当交换机在出方向发生流量拥堵时,我们选择拥塞管理对不同的业务差别对待,保证高优先级流量优先通过该出口。同时当流量过载,产生大量丢包时,交换机还可以配置另一种流量控制方式——拥塞避免。拥塞避免主要是在发生拥塞的时候通过丢弃报文来解除流量过载。通过丢弃报文缓解下游设备的流量压力。华为S系列交换机支持两种丢弃策略:尾丢弃和WRED丢弃。
l 尾丢弃策略(Tail Drop)也就是我们所说的传统丢包策略,即网络发生拥塞时报文进入队列,当队列已满则后面的流量直接丢弃,无法进行缓存。尾丢弃策略无法提供差分服务。交换机缺省支持的丢弃策略即为尾丢弃。
丢弃策略会引发TCP全局同步现象。所谓TCP全局同步现象,是指当多个队列同时丢弃多个TCP连接报文时,将造成多个TCP连接同时进入拥塞避免和慢启动状态,以降低并调整流量;而后这几个TCP连接又会在某个时刻同时出现流量高峰。如此反复,使网络流量忽大忽小,影响链路利用率。
l 加权随机早期检测WRED(Weighted Random Early Detection)是在队列拥塞前进行报文丢弃的一种拥塞避免机制。WRED通过随机丢弃报文避免了尾丢弃存在的TCP全局同步现象。WRED为每个队列都设定一对低门限和高门限值,并规定:
Ø 当队列长度小于低限时,不丢弃报文,丢弃概率为0%。
Ø 当队列长度超过高限时,丢弃所有新到来的报文,即进行尾丢弃,丢弃概率为100%。
Ø 当队列长度在低限和高限之间时,开始随机丢弃新到来的报文,且设定了一个最大丢弃概率,队列越长,丢弃概率越大。
WRED配置在接口的出方向,首先定义一个丢弃模板,模板中可以区分颜色配置,最终模板在队列上应用。因此可以这样理解,WRED可以基于不同的队列,不同的颜色分配报文的丢弃参数。越重要的报文其最低门限和最高门限都较不重要的报文要高,而最高丢弃概率则较低。
推荐使用的各种颜色报文WRED参数设置如下表:
队列(PHB) |
阈值下限(%) |
阈值上限(%) |
丢弃概率 |
Green |
80 |
100 |
10 |
Yellow |
60 |
80 |
20 |
Red |
40 |
60 |
30 |
2.2拥塞避免如何配置
以前面的组网场景为例,使用上面的推荐值在GE0/0/3上配置了WRED丢弃。使用上面的推荐参数进行配置。其中部门2流量的802.1p优先级为5,部门1流量的802.1p优先级为2。
[LSW1] diffserv domain sp
[LSW1-dsdomain-sp] 802.1p-inbound 5 phb ef yellow //部门2流量标记为***
[LSW1-dsdomain-sp] 802.1p-inbound 2 phb af2 red //部门1流量标记为红色
[LSW1-dsdomain-sp] quit
[LSW1] interface GigabitEthernet 0/0/1
[LSW1-GigabitEthernet0/0/1] trust upstream sp
[LSW1-GigabitEthernet0/0/1] quit
[LSW1] interface GigabitEthernet 0/0/2
[LSW1-GigabitEthernet0/0/2] trust upstream sp
[LSW1-GigabitEthernet0/0/2] quit
[LSW1] drop-profile sp
[LSW1-drop-sp] color yellow low-limit 60 high-limit 80 discard-percentage 20
[LSW1-drop-sp] color red low-limit 40 high-limit 60 discard-percentage 30
[LSW1-drop-sp] quit
[LSW1] interface GigabitEthernet 0/0/3
[LSW1-GigabitEthernet0/0/3] qos queue 2 wred sp
[LSW1-GigabitEthernet0/0/3] qos queue 5 wred sp
根据上面的配置,当部门2的流量进入队列5的报文长度占整个队列长度的60%时,队列开始丢包,当部门2的流量进入队列5的报文长度占整个队列长度的80%时,队列会丢弃所有新收到的报文,相当于尾丢弃策略。
3 结束语
到此,交换机QoS的一些基本知识和常见应用已经介绍完毕,QoS的各个组成部分相互配合,以保证用户的服务质量。希望本专题可以在用户部署网络的QoS功能时提供一些指导。
原文地址:https://www.cnblogs.com/ricksteves/p/9684936.html