簡介
本檔案將說明Catalyst 3650/3850平台上的佇列結構和緩衝區,並提供如何減少輸出捨棄的範例。
必要條件
需求
思科建議您瞭解Catalyst平台上的服務品質(QoS)的基本知識。
採用元件
本文中的資訊係根據以下軟體和硬體版本:
- Cisco Catalyst 3650/3850
- 03.07.04
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
輸出丟棄通常是由多對一或10gig到1gig傳輸引起的介面超訂用造成的。介面緩衝區是有限的資源,只能吸收最多到封包可以捨棄的點的突發量。如果調整緩衝區,可以獲得一些緩衝,但它不能保證輸出為零的降幅。
建議運行03.06或03.07的最新版本,因為舊代碼中存在一些已知錯誤,所以可以獲得適當的緩衝區分配。
緩衝區分配
傳統上,緩衝區會靜態分配給每個隊列,而隨著隊列數量的增加,保留的緩衝區數量也會減少。 這樣效率很低,而且會耗盡處理所有隊列幀所需的緩衝區數量。為了繞過這種限制,Catalyst 3650/3850平台使用硬緩衝區和軟緩衝區。
- 硬緩衝區:這些是保留給特定隊列的最小緩衝區。如果特定隊列不使用緩衝區,則這些緩衝區不適用於其他隊列。
- 軟緩衝區:這些緩衝區被分配給某個隊列,但是如果未使用,則可由其他隊列和介面共用。
未應用服務策略的預設緩衝區分配
1GB連線埠的預設緩衝區配置為300個緩衝區,而10GB連線埠的預設緩衝區配置為1800個緩衝區(1個緩衝區= 256位元組)。該埠最多可以使用預設設定公共池分配的400%的預設值,即為1 Gig介面和10 Gig介面分別配置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埠的2880,其中400是為任何隊列配置的預設最大閾值。
隊列1未分配任何硬緩衝區。queue-1的軟緩衝區值被計算為介面緩衝區的400%,該介面緩衝區在分配給queue-0後仍然存在。因此,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:
硬最大值= 0
qSoftMax = (Oper_Buffer*Max_Threshold)/100 = 300*20/100= 60。60的400% = 240
10Gig:
硬最大值= 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(預設值為100)修改Softmax的最大值。如果配置為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 Gb資料包的突發流量會傳送1秒。這可能導致輸出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
之後,配置此service-policy以調整緩衝區:
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之前,介面不會顯示「output drop」計數器。您必須執行 show platform qos queue stats 輸出以檢查丟棄。
5. 我們提交了一個增強請求(思科漏洞ID CSCuz86625),以便在不使用任何服務策略的情況下配置soft-max乘數。(已在3.6.6及更高版本中解決)
相關資訊