目录

简介

先决条件

要求

使用的组件

背景信息

缓冲分配

队列结构

调整缓冲区分配

将服务策略用于Hardmax或Softmax缓冲区分配

示例 1

示例 2

示例 3

使用服务策略手动更改Softmax缓冲区值

示例 1

示例 2

案例研究：输出丢弃

摘要

相关信息

简介

本文档介绍Catalyst 3650/3850平台上的队列结构和缓冲区，并提供有关如何缓解输出丢弃的示例。

先决条件

要求

Cisco建议您具备Catalyst平台上的服务质量(QoS)基础知识。

使用的组件

本文档中的信息基于以下软件和硬件版本：

- Cisco Catalyst 3650/3850

- 03.07.04

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

背景信息

输出丢弃通常是由多对一或10G到1G传输引起的接口超订用造成的。接口缓冲区是有限的资源，只能吸收数据包在某个点之后丢弃的突发。如果调整缓冲区，您可以获得一些缓冲，但它无法保证输出丢弃情况为零。

建议运行03.06或03.07的最新版本，以便获得适当的缓冲区分配，因为旧代码中存在一些已知的漏洞。

缓冲分配

传统上，会为每个队列静态分配缓冲区，随着队列数量的增加，预留缓冲区的数量会减少。  这样效率低下，并且会耗尽所有队列处理帧所需的缓冲区数量。为了绕过此类限制，Catalyst 3650/3850平台使用硬缓冲区和软缓冲区。

- Hard Buffers(硬缓冲区)：这些是特定队列的最小保留缓冲区。如果特定队列不使用缓冲区，则这些缓冲区对其他队列不可用。

- 软缓冲区：这些缓冲区已分配给队列，但如果未使用，则可由其他队列和接口共享。

未应用服务策略的默认缓冲区分配

1GB端口的默认缓冲区分配是300个缓冲区，而10GB端口的默认缓冲区分配是1800个缓冲区（1个缓冲区= 256字节）。该端口最多可以使用从具有默认设置的公共池分配的400%的默认值，即分别为1千兆接口和10千兆接口分配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

.

对于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>>

对于10G接口，

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 = 300的20% = 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. 400% of 60 = 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将获得默认的Hardmax 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命令修改Softmax的最大值 qos queue-softmax-multiplier 1200 默认值为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”的优先级队列。 应用策略映射后，第二个队列即被禁用，只会在系统中保留1个队列。

这里需要注意的是，所有数据包都使用此单一队列（包括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

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

命令。

3.如果仅定义1类默认值，为了调整缓冲区，所有流量都归入单个队列（包括控制数据包）中。请注意，当所有流量都放在一个队列中时，控制流量和数据流量之间没有分类，在拥塞期间，控制流量可能会被丢弃。因此，建议至少为控制流量创建其他1类。CPU生成的控制数据包始终转至第一个优先级队列，即使不在类映射中匹配。如果没有配置优先级队列，它将转到接口的第一个队列，即queue-0。

4.在Cisco Bug ID CSCuu14019之前，接口不会显示“输出丢弃”计数器。您必须执行 show platform qos queue stats 输出以检查丢包。

5.我们提交了一个增强请求Cisco Bug ID CSCuz8625，以便在不使用任何服务策略的情况下配置soft-max乘数。（已在3.6.6及更高版本中解决）

相关信息

- 技术支持 - Cisco Systems