简介
本文档介绍Catalyst 3650/3850平台上的队列结构和缓冲区,并提供如何缓解输出丢包的示例。
先决条件
要求
Cisco建议您具备Catalyst平台上的服务质量(QoS)基础知识。
使用的组件
本文档中的信息基于以下软件和硬件版本:
- Cisco Catalyst 3650/3850
- 03.07.04
注意:16.x.x及更高版本的QoS CLI命令更改记录在本指南Catalyst 9000交换机上的输出丢弃故障排除中。本文档为Catalyst 9000系列,但与3850共享同一ASIC。本指南适用于16.x.x或更高版本的Cisco IOS® XE上的3850。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
输出丢弃通常是由多对一或10gig到1gig传输导致的接口超订用造成的。接口缓冲区是有限的资源,只能吸收数据包在某个时间点之前的突发。如果调整缓冲区,您可以获得一些缓冲,但它不能保证输出零丢弃。
由于旧代码中存在一些已知错误,建议运行03.06或03.07的最新版本以获得相应的缓冲区分配。
缓冲分配
传统上,会为每个队列静态分配缓冲区,并且随着队列数量的增加,保留的缓冲区数量会减少。 这样效率低下,并且会耗尽所有队列处理帧所需的缓冲区数量。为了规避这种限制,Catalyst 3650/3850平台使用硬缓冲区和软缓冲区。
- Hard Buffers:这是为特定队列保留的最小缓冲区。如果特定队列不使用缓冲区,则这些缓冲区不可用于其他队列。
- 软缓冲区:这些缓冲区被分配给某个队列,但如果未使用,则可由其他队列和接口共享。
未应用服务策略的默认缓冲区分配
1GB端口的默认缓冲区分配是300个缓冲区,而10GB端口的默认缓冲区分配是1800个缓冲区(1个缓冲区= 256字节)。端口可以使用从公共池中分配的默认端口的400%(使用默认设置),该默认池为1 Gig接口和10Gig接口分别配置1200和7200个缓冲区。
默认软缓冲区限制设置为400(即最大阈值)。该阈值确定可从公用池借用的软缓冲区的最大数量。
队列结构
当没有应用服务策略时,有2个默认队列(队列0和队列1)。queue-0用于控制流量(DSCP 32或48或56),queue-1用于数据流量。
默认情况下,队列0可分配接口可用缓冲区的40%作为其硬缓冲区。也就是说,在1G端口环境中为队列0分配了120个缓冲区;在10G端口环境中分配了720个缓冲区。1GB端口的Softmax(最大软缓冲区)设置为480(计算为120的400%),10GB端口的Softmax设置为2880,其中400是为任何队列配置的默认最大阈值。
队列1未分配任何硬缓冲区。queue-1的软缓冲区值被计算为分配给queue-0后剩余接口缓冲区的400%。因此,1Gig接口为180的400%,10Gig接口为1800的400%。
可用于查看此分配的show 命令为 show platform qos queue config <interface>.
对于1Gig接口:
3850#show platform qos queue config gigabitEthernet 1/0/1 DATA Port:20 GPN:66 AFD:Disabled QoSMap:0 HW Queues: 160 - 167 DrainFast:Disabled PortSoftStart:1 - 1080 ---------------------------------------------------------- DTS Hardmax Softmax PortSMin GlblSMin PortStEnd --- -------- -------- -------- --------- --------- 0 1 5 120 6 480 6 320 0 0 3 1440 1 1 4 0 7 720 3 480 2 180 3 1440 2 1 4 0 5 0 5 0 0 0 3 1440 3 1 4 0 5 0 5 0 0 0 3 1440 4 1 4 0 5 0 5 0 0 0 3 1440 5 1 4 0 5 0 5 0 0 0 3 1440 6 1 4 0 5 0 5 0 0 0 3 1440 7 1 4 0 5 0 5 0 0 0 3 1440 <<output omitted>>
对于10Gig接口:
3850#show platform qos queue config tenGigabitEthernet 1/0/37 DATA Port:1 GPN:37 AFD:Disabled QoSMap:0 HW Queues: 8 - 15 DrainFast:Disabled PortSoftStart:2 - 6480 ---------------------------------------------------------- DTS Hardmax Softmax PortSMin GlblSMin PortStEnd --- -------- -------- -------- --------- --------- 0 1 6 720 8 2880 7 1280 0 0 4 8640 1 1 4 0 9 4320 8 1920 3 1080 4 8640 2 1 4 0 5 0 5 0 0 0 4 8640 3 1 4 0 5 0 5 0 0 0 4 8640 4 1 4 0 5 0 5 0 0 0 4 8640
<<output omitted>>
Hardmax or Hard Buffers是始终为此队列保留和可用的缓冲区数量。
Softmax或Soft Buffers是可以从其他队列或全局池借用的缓冲区数量。每个1Gig接口的Softmax总数为1200(300的400%),如果是10Gig接口,则为7200个缓冲区。 应用服务策略时,如果没有显式创建,则可以为“默认类”额外创建1个队列。所有在先前定义的类下不匹配的流量都归入此队列。此队列下不能有任何match语句。
调整缓冲区分配
为了调整3650/3850平台中的缓冲区,请在各自的接口下附加服务策略。您可以使用service-policy调整Hardmax和Softmax缓冲区分配。
硬缓冲区和软缓冲区的计算
这是系统为每个队列分配Hardmax和Softmax的方式:
总端口缓冲区= 300 (1G)或1800 (10G)
如果总共有5个队列(5类),则默认情况下每个队列获得20%的缓冲区。
优先级队列
1Gig:
HardMax = Oper_Buff = 20% of 300 = 60。
qSoftMax = (Oper_Buff * Max_Threshold)/100=60*400/100=240
10Gig
HardMax = Oper_Buff = 1800的20% = 360
qsoftMax = (Oper_Buff * Max_Threshold)/100 = 360*400/100= 1440
非优先级队列
1Gig:
HardMax = 0
qSoftMax = (Oper_Buffer*Max_Threshold)/100 = 300*20/100= 60。60的400% = 240
10Gig:
HardMax = 0
qSoftMax = (Oper_Buffer*Max_Threshold)/100 = 1800*20/100= 360。360的400% = 1440
使用服务策略进行Hardmax或Softmax缓冲区分配
如果应用了服务策略,则只有“优先级为1/2的队列”才能获得Hardmax。下面的示例可以帮助说明1Gig接口和10Gig接口中特定服务策略的缓冲区分配。在没有任何应用服务策略的默认配置下,如果链路为1Gig链路,queue-0的默认硬件最大值为120,如果链路为10Gig链路,则获得720个缓冲区。
3850#show platform qos queue config gigabitEthernet 1/0/1 DATA Port:0 GPN:119 AFD:Disabled QoSMap:0 HW Queues: 0 - 7 DrainFast:Disabled PortSoftStart:1 - 1080 ---------------------------------------------------------- DTS Hardmax Softmax PortSMin GlblSMin PortStEnd --- -------- -------- -------- --------- --------- 0 1 5 120 6 480 6 320 0 0 3 1440 1 1 4 0 7 720 3 480 2 180 3 1440 2 1 4 0 5 0 5 0 0 0 3 1440
<<output omitted>>
3850#show platform qos queue config tenGigabitEthernet 1/0/37
DATA Port:1 GPN:37 AFD:Disabled QoSMap:0 HW Queues: 8 - 15
DrainFast:Disabled PortSoftStart:2 - 6480
----------------------------------------------------------
DTS Hardmax Softmax PortSMin GlblSMin PortStEnd
--- -------- -------- -------- --------- ---------
0 1 6 720 8 2880 7 1280 0 0 4 8640
1 1 4 0 9 4320 8 1920 3 1080 4 8640
2 1 4 0 5 0 5 0 0 0 4 8640
<<output omitted>>
示例 1
当您应用服务策略时,如果未配置优先级队列或未设置优先级队列级别,则不能为该队列分配硬最大值。
对于1Gig接口:
policy-map MYPOL
class ONE
priority percent 20
class TWO
bandwidth percent 40
class THREE
bandwidth percent 10
class FOUR
bandwidth percent 5
3850#show run interface gig1/0/1
Current configuration : 67 bytes
!
interface GigabitEthernet1/0/1
service-policy output MYPOL
end
3800#show platform qos queue config gigabitEthernet 1/0/1
DATA Port:21 GPN:65 AFD:Disabled QoSMap:1 HW Queues: 168 - 175
DrainFast:Disabled PortSoftStart:2 - 360
----------------------------------------------------------
DTS Hardmax Softmax PortSMin GlblSMin PortStEnd
--- -------- -------- -------- --------- ---------
0 1 4 0 8 240 7 160 3 60 4 480
1 1 4 0 8 240 7 160 3 60 4 480
2 1 4 0 8 240 7 160 3 60 4 480
3 1 4 0 8 240 7 160 3 60 4 480
4 1 4 0 8 240 7 160 3 60 4 480
<<output omitted>>
!--- There are 5 classes present though you only created 4 classes.
!--- The 5th class is the default class.
!--- Each class represent a queue and the order in which it is shown is the order in which
!--- it is present in the running configuration when checking "show run | sec policy-map".
对于10Gig接口:
policy-map MYPOL class ONE priority percent 20 class TWO bandwidth percent 40 class THREE bandwidth percent 10 class FOUR bandwidth percent 5 3850#show run interface TenGigabitEthernet1/0/37 Current configuration : 67 bytes ! interface TenGigabitEthernet1/0/37 service-policy output MYPOL end 3850#show platform qos queue config tenGigabitEthernet 1/0/40 DATA Port:2 GPN:40 AFD:Disabled QoSMap:1 HW Queues: 16 - 23 DrainFast:Disabled PortSoftStart:4 - 2160 ----------------------------------------------------------
DTS Hardmax Softmax PortSMin GlblSMin PortStEnd
--- -------- -------- -------- --------- ---------
0 1 4 0 10 1440 9 640 4 360 5 2880
1 1 4 0 10 1440 9 640 4 360 5 2880
2 1 4 0 10 1440 9 640 4 360 5 2880
3 1 4 0 10 1440 9 640 4 360 5 2880
4 1 4 0 10 1440 9 640 4 360 5 2880
5 1 4 0 5 0 5 0 0 0 5 2880 <<output omitted>>
示例 2
当您应用优先级1时,queue-0获得60个缓冲区作为Hardmax。
对于1Gig接口:
policy-map MYPOL
class ONE
priority level 1 percent 20
class TWO
bandwidth percent 40
class THREE
bandwidth percent 10
class FOUR
bandwidth percent 5
3850#show run interface gig1/0/1
Current configuration : 67 bytes
!
interface GigabitEthernet1/0/1
service-policy output MYPOL
end
BGL.L.13-3800-1#show platform qos queue config gigabitEthernet 1/0/1
DATA Port:21 GPN:65 AFD:Disabled QoSMap:1 HW Queues: 168 - 175
DrainFast:Disabled PortSoftStart:2 - 360
----------------------------------------------------------
DTS Hardmax Softmax PortSMin GlblSMin PortStEnd
--- -------- -------- -------- --------- ---------
0 1 6 60 8 240 7 160 0 0 4 480
1 1 4 0 8 240 7 160 3 60 4 480
2 1 4 0 8 240 7 160 3 60 4 480
3 1 4 0 8 240 7 160 3 60 4 480
4 1 4 0 8 240 7 160 3 60 4 480
<<output omitted>>
对于10Gig接口:
policy-map MYPOL class ONE priority level 1 percent 20 class TWO bandwidth percent 40 class THREE bandwidth percent 10 class FOUR bandwidth percent 5 3850#show run interface Te1/0/37 Current configuration : 67 bytes ! interface TenGigabitEthernet1/0/37 service-policy output MYPOL end 3850_1#show platform qos queue config tenGigabitEthernet 1/0/37 DATA Port:2 GPN:40 AFD:Disabled QoSMap:1 HW Queues: 16 - 23 DrainFast:Disabled PortSoftStart:3 - 2160 ---------------------------------------------------------- DTS Hardmax Softmax PortSMin GlblSMin PortStEnd --- -------- -------- -------- --------- --------- 0 1 7 360 10 1440 9 640 0 0 5 2880 1 1 4 0 10 1440 9 640 4 360 5 2880 2 1 4 0 10 1440 9 640 4 360 5 2880 3 1 4 0 10 1440 9 640 4 360 5 2880 4 1 4 0 10 1440 9 640 4 360 5 2880 5 1 4 0 5 0 5 0 0 0 5 2880 <<output omitted>>
示例 3
在本示例中,添加了一个额外的类。队列总数变为6。配置了2个优先级后,每个队列将获得51个缓冲区作为Hardmax。此数学运算与上一个示例相同。
对于1Gig接口:
policy-map MYPOL
class ONE
priority level 1 percent 20
class TWO
priority level 2 percent 10
class THREE
bandwidth percent 10
class FOUR
bandwidth percent 5
class FIVE
bandwidth percent 10
3850#show run interface gigabitEthernet1/0/1
Current configuration : 67 bytes
!
interface GigabitEthernet1/0/1
service-policy output MYPOL
end
3850#show platform qos queue config gigabitEthernet 1/0/1
DATA Port:16 GPN:10 AFD:Disabled QoSMap:1 HW Queues: 128 - 135
DrainFast:Disabled PortSoftStart:3 - 306
----------------------------------------------------------
DTS Hardmax Softmax PortSMin GlblSMin PortStEnd
--- -------- -------- -------- --------- ---------
0 1 7 51 10 204 9 136 0 0 5 408
1 1 7 51 10 204 9 136 0 0 5 408
2 1 4 0 10 204 9 136 4 51 5 408
3 1 4 0 10 204 9 136 4 51 5 408
4 1 4 0 11 192 10 128 5 48 5 408
5 1 4 0 11 192 10 128 5 48 5 408
6 1 4 0 5 0 5 0 0 0 5 408
<<output omitted>>
对于10Gig接口:
policy-map MYPOL class ONE priority level 1 percent 20 class TWO priority level 2 percent 10 class THREE bandwidth percent 10 class FOUR bandwidth percent 5 class FIVE bandwidth percent 10 3850#show run interface Te1/0/37 Current configuration : 67 bytes ! interface TenGigabitEthernet1/0/37 service-policy output MYPOL end 3850_2#show platform qos queue config tenGigabitEthernet 1/0/37 DATA Port:2 GPN:40 AFD:Disabled QoSMap:1 HW Queues: 16 - 23 DrainFast:Disabled PortSoftStart:4 - 1836 ---------------------------------------------------------- DTS Hardmax Softmax PortSMin GlblSMin PortStEnd --- -------- -------- -------- --------- --------- 0 1 8 306 12 1224 11 544 0 0 6 2448 1 1 8 306 12 1224 11 544 0 0 6 2448 2 1 4 0 12 1224 11 544 6 306 6 2448 3 1 4 0 12 1224 11 544 6 306 6 2448 4 1 4 0 13 1152 12 512 7 288 6 2448 5 1 4 0 13 1152 12 512 7 288 6 2448 6 1 4 0 5 0 5 0 0 0 6 2448 <<output omitted>>
注意:分配给少数队列的缓冲区可能会更少。这是预期值,当某些配置组合在一起时,该值无法适应优先级队列和非优先级队列的Softmax计算。
总之,您创建的队列越多,每个队列在Hardmax和Softmax方面获得的缓冲区就越少(因为Hardmax也取决于Softmax值)。
从3.6.3或3.7.2版本中,可以使用CLI命令qos queue-softmax-multiplier 1200修改Softmax的最大值,默认值为100。如果配置为1200,则非优先级队列和非主优先级队列(!=1级)的Softmax将从其默认值乘以12。此命令仅在连接了策略映射的端口上生效。它也不适用于优先级队列级别1。
使用服务策略手动更改Softmax缓冲区值
示例 1
这是服务策略配置和相应的缓冲区分配:
policy-map TEST_POLICY
class ONE
priority level 1 percent 40
class TWO
bandwidth percent 40
class THREE
bandwidth percent 10
3850#show run interface gigabitEthernet1/0/1
Current configuration : 67 bytes
!
interface GigabitEthernet1/0/1
service-policy output TEST_POLICY
end
3850#show platform qos queue config gigabitEthernet 1/0/1
DATA Port:21 GPN:65 AFD:Disabled QoSMap:1 HW Queues: 168 - 175
DrainFast:Disabled PortSoftStart:2 - 450
----------------------------------------------------------
DTS Hardmax Softmax PortSMin GlblSMin PortStEnd
--- -------- -------- -------- --------- ---------
0 1 6 75 8 300 7 200 0 0 4 600
1 1 4 0 8 300 7 200 3 75 4 600
2 1 4 0 8 300 7 200 3 75 4 600
3 1 4 0 8 300 7 200 3 75 4 600
<<output omitted>>
缓冲区在队列中平均分配。如果您使用bandwidth命令,则仅更改每个队列的权重以及调度程序对其执行的操作。
要调整Softmax值,必须在各自类下使用 queue-buffer ratio命令。
policy-map TEST_POLICY class ONE priority level 1 percent 40 class TWO bandwidth percent 40 queue-buffers ratio 50 <--------------- class THREE bandwidth percent 10 class FOUR bandwidth percent 5
这些是新的缓冲区分配。
对于1Gig接口:
3850#show platform qos queue config gigabitEthernet 1/0/1
DATA Port:21 GPN:65 AFD:Disabled QoSMap:1 HW Queues: 168 - 175
DrainFast:Disabled PortSoftStart:0 - 900
----------------------------------------------------------
DTS Hardmax Softmax PortSMin GlblSMin PortStEnd
--- -------- -------- -------- --------- ---------
0 1 6 39 8 156 7 104 0 0 0 1200
1 1 4 0 9 600 8 400 3 150 0 1200
2 1 4 0 8 156 7 104 4 39 0 1200
3 1 4 0 10 144 9 96 5 36 0 1200
4 1 4 0 10 144 9 96 5 36 0 1200
queue-1获得50%的软缓冲区,即600个缓冲区。根据算法,其余的缓冲区将分配给其他队列。
10Gig接口的类似输出为:
3850#show platform qos queue config tenGigabitEthernet 1/0/37 DATA Port:2 GPN:40 AFD:Disabled QoSMap:1 HW Queues: 16 - 23 DrainFast:Disabled PortSoftStart:4 - 1836 ---------------------------------------------------------- DTS Hardmax Softmax PortSMin GlblSMin PortStEnd --- -------- -------- -------- --------- --------- 0 1 7 234 10 936 9 416 0 0 5 7200 1 1 4 0 11 3600 10 1600 4 900 5 7200 2 1 4 0 10 936 9 416 5 234 5 7200 3 1 4 0 4 864 11 384 1 216 5 7200 4 1 4 0 4 864 11 384 1 216 5 7200 5 1 4 0 5 0 5 0 0 0 5 7200 <<output omitted>>
注意:分配给少数队列的缓冲区可以更少。这是预期值,因为在合并某些配置时,这些值无法适应优先级队列和非优先级队列的Softmax计算。有一个内部算法可以处理它。
示例 2
将所有Softmax缓冲区分配给单个默认队列。
您可以看到分配给少数队列的缓冲区更少。这是预期值,因为在配置某些组合时,这些值无法适应优先级队列和非优先级队列的Softmax计算。有一个内部算法可以处理它。分配给少数队列的缓冲区可以更少。这是预期值,因为在配置某些组合时,这些值无法适合优先级队列和非优先级队列的Softmax计算。有一个内部算法可以处理它。
policy-map NODROP class class-default bandwidth percent 100 queue-buffers ratio 100
QoS配置结果如下:
3850#show platform qos queue config GigabitEthernet 1/1/1 DATA Port:21 GPN:65 AFD:Disabled QoSMap:1 HW Queues: 168 - 175 DrainFast:Disabled PortSoftStart:0 - 900 ---------------------------------------------------------- DTS Hardmax Softmax PortSMin GlblSMin PortStEnd --- -------- -------- -------- --------- --------- 0 1 4 0 8 1200 7 800 3 300 2 2400 1 1 4 0 5 0 5 0 0 0 2 2400
没有Hardmax缓冲区,因为策略应用于接口,并且它没有任何设置了“level”的优先级队列。 应用策略映射后,第二个队列将被禁用,仅剩下一个队列留在系统中。
此处的注意事项是所有数据包都使用此单个队列(包括控制数据包,如OSPF/EIGRP/STP)。 出现拥塞(广播风暴)时,很容易造成网络中断。 如果用其他类定义了匹配的控制数据包,也会出现这种情况。
案例研究:输出丢弃
对于此测试,IXIA流量生成器连接到1Gig接口,而出口端口为100Mbps接口。这是一个1Gbps到100Mbps的连接,1秒内会发送1Gig的数据包突发。这会导致出口100mbps接口上的输出丢弃。使用默认配置(未应用服务策略)时,这是发送1之后的输出丢弃数:
3850#show interfaces gig1/0/1 | in output drop Input queue: 0/2000/0/0 (size/max/drops/flushes); Total output drops: 497000
Th2中显示了这些丢包数,这是默认阈值。默认情况下,系统可以使用最大阈值作为丢弃阈值,即Drop-Th2。
3800#show platform qos queue stats gigabitEthernet 1/0/1 <snip> DATA Port:21 Drop Counters ------------------------------- Queue Drop-TH0 Drop-TH1 Drop-TH2 SBufDrop QebDrop ----- ----------- ----------- ----------- ----------- ----------- 0 0 0 497000 0 0 1 0 0 0 0 0
之后,配置此服务策略以调整缓冲区:
policy-map TEST_POLICY
class class-default
bandwidth percent 100
queue-buffers ratio 100
3850#show run interface gigabitEthernet1/0/1
Current configuration : 67 bytes
!
interface GigabitEthernet1/0/1
service-policy output TEST_POLICY
end
3850#show platform qos queue config gigabitEthernet 2/0/1
DATA Port:21 GPN:65 AFD:Disabled QoSMap:1 HW Queues: 168 - 175
DrainFast:Disabled PortSoftStart:0 - 900
----------------------------------------------------------
DTS Hardmax Softmax PortSMin GlblSMin PortStEnd
--- -------- -------- -------- --------- ---------
0 1 4 0 8 1200 7 800 3 300 2 2400 <-- queue 0 gets all the buffer.
3850#show interfaces gigabitEthernet1/0/1 | include output drop
Input queue: 0/2000/0/0 (size/max/drops/flushes); Total output drops: 385064
对于同一流量突发,丢弃从497000减少到385064。然而,仍然有下降。之后,配置qos queue-softmax-multiplier 1200 global config命令。
3850#show platform qos queue config gigabitEthernet 1/0/1
DATA Port:21 GPN:65 AFD:Disabled QoSMap:1 HW Queues: 168 - 175
DrainFast:Disabled PortSoftStart:0 - 900
----------------------------------------------------------
DTS Hardmax Softmax PortSMin GlblSMin PortStEnd
--- -------- -------- -------- --------- ---------
0 1 4 0 8 10000 7 800 3 300 2 10000
3850#show interfaces gigabitEthernet1/0/1 | in output drop
Input queue: 0/2000/0/0 (size/max/drops/flushes); Total output drops: 0
queue-0的Softmax可以达到10,000个缓冲区,因此丢弃量为零。
注意:这种场景是不可能的,因为其他接口也可以使用缓冲区,但这肯定有助于将数据包丢弃减少到特定水平。
使用此命令可以增加接口可用的最大软缓冲区,但您还必须记住,只有其他接口没有使用这些缓冲区时,此缓冲区才可用。
摘要
1. 创建更多队列时,每个队列获得的缓冲区会更少。
2. 使用qos queue-softmax-multiplier <value>命令可以增加可用缓冲区的总数。
3. 如果仅定义1个class-default,为了调整缓冲区,所有流量都归入单个队列(包括控制数据包)。请注意,当所有流量都放在一个队列中时,控制和数据流量之间没有分类,在拥塞期间,控制流量可能会被丢弃。因此,建议至少创建1个其他类用于控制流量。CPU生成的控制数据包始终转到第一个优先级队列,即使类别映射中不匹配也是如此。如果没有配置优先级队列,它将转到接口的第一个队列,即queue-0。
4. 在思科漏洞ID CSCuu14019之前,接口不会显示“输出丢弃”计数器。您必须执行 show platform qos queue stats 输出以检查丢弃。
5. 我们提交了一个增强请求,即思科漏洞ID CSCuz86625,该请求允许我们配置软最大乘法器,而无需使用任何服务策略。(已在3.6.6及更高版本中解决)
相关信息