本檔案介紹如何疑難排解Cisco Catalyst交換器系列2960、3750、3750G、3750X、3560上因服務品質(QoS)而出現的輸出捨棄問題。
思科建議您瞭解QoS的基本知識。
本檔案中的資訊是根據以下平台:Cisco Catalyst交換器系列2960、3750、3750G、3750X、3560。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路正在作用,請確保您已瞭解任何指令可能造成的影響。
QoS用於在擁塞期間優先處理更重要的資料。因此,啟用QoS後,不太重要的批次資料可能會遇到丟棄。
思科接入層交換機在硬體中實施QoS功能。本文檔可幫助您確定丟棄是否由QoS引起,並介紹各種隊列和緩沖調整選項來緩解這些丟棄。
輸入預設佇列
輸出預設佇列
Switch#show int gi1/0/1
!-- Some output omitted.
GigabitEthernet0/1 is up, line protocol is up (connected)
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
Full-duplex, 1000Mb/s, media type is 10/100/1000BaseTX
input flow-control is off, output flow-control is unsupported
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 1089
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 4000 bits/sec, 6 packets/sec
5 minute output rate 3009880 bits/sec, 963 packets/sec
Switch#show mls qos
QoS is enabled
QoS ip packet dscp rewrite is enabled
Switch#show mls qos int gi1/0/1 statistics
GigabitEthernet1/0/1 (All statistics are in packets)
dscp: incoming
-------------------------------
0 - 4 : 0 0 0 0 0
5 - 9 : 0 0 0 0 0
10 - 14 : 0 0 0 0 0
15 - 19 : 0 0 0 0 0
20 - 24 : 0 0 0 0 0
25 - 29 : 0 0 0 0 0
30 - 34 : 0 0 0 0 0
35 - 39 : 0 0 0 0 0
40 - 44 : 0 0 0 0 0
45 - 49 : 0 198910 0 0 0
50 - 54 : 0 0 0 0 0
55 - 59 : 0 0 0 0 0
60 - 64 : 0 0 0 0
dscp: outgoing
-------------------------------
0 - 4 : 0 0 0 0 0
5 - 9 : 0 0 0 0 0
10 - 14 : 0 0 0 0 0
15 - 19 : 0 0 0 0 0
20 - 24 : 0 0 0 0 0
25 - 29 : 0 0 0 0 0
30 - 34 : 0 0 0 0 0
35 - 39 : 0 0 0 0 0
40 - 44 : 0 0 0 0 0
45 - 49 : 0 248484 0 0 0
50 - 54 : 0 0 0 0 0
55 - 59 : 0 0 0 0 0
60 - 64 : 0 0 0 0
cos: incoming
-------------------------------
0 - 4 : 2 0 0 0 0
5 - 7 : 0 0 0
cos: outgoing
-------------------------------
0 - 4 : 0 0 0 0 0
5 - 7 : 0 0 0
output queues enqueued:
queue: threshold1 threshold2 threshold3
-----------------------------------------------
queue 0: 248484 0 0
queue 1: 0 0 0
queue 2: 0 0 0
queue 3: 0 0 0
output queues dropped:
queue: threshold1 threshold2 threshold3
-----------------------------------------------
queue 0: 1089 0 0
queue 1: 0 0 0
queue 2: 0 0 0
queue 3: 0 0 0
Policer: Inprofile: 0 OutofProfile: 0附註:此示例顯示隊列0/threshold1上丟棄的包丟棄資料包。在文檔中的其他示例中,隊列編號為1 - 4;因此,此值將是隊列1。
Switch#show mls qos maps dscp-output-q
Dscp-outputq-threshold map:
d1 :d2 0 1 2 3 4 5 6 7 8 9
------------------------------------------------------------
0 : 02-01 02-01 02-01 02-01 02-01 02-01 02-01 02-01 02-01 02-01
1 : 02-01 02-01 02-01 02-01 02-01 02-01 03-01 03-01 03-01 03-01
2 : 03-01 03-01 03-01 03-01 03-01 03-01 03-01 03-01 03-01 03-01
3 : 03-01 03-01 04-01 04-01 04-01 04-01 04-01 04-01 04-01 04-01
4 : 01-01 01-01 01-01 01-01 01-01 01-01 01-01 01-01 04-01 04-01
5 : 04-01 04-01 04-01 04-01 04-01 04-01 04-01 04-01 04-01 04-01
6 : 04-01 04-01 04-01 04-01
附註:每個隊列集都可選擇為四個輸出隊列配置緩衝區大小和閾值。然後,您可以將任一隊列集應用於任何埠。預設情況下,除非明確配置為使用queue-set 2,否則所有介面都將queue-set 1用於輸出隊列。
在此案例中,queue-set 1中的隊列1擁有總緩衝區空間的25%,而閾值1設定為100%
Switch#show mls qos queue-set
Queueset: 1
Queue : 1 2 3 4
----------------------------------------------
buffers : 25 25 25 25
threshold1: 100 200 100 100
threshold2: 100 200 100 100
reserved : 50 50 50 50
maximum : 400 400 400 400
Queueset: 2
Queue : 1 2 3 4
----------------------------------------------
buffers : 25 25 25 25
threshold1: 100 200 100 100
threshold2: 100 200 100 100
reserved : 50 50 50 50
maximum : 400 400 400 400
附註:您還可以變更佇列集1;但是,由於所有介面在預設情況下都使用queue-set 1,因此更改會反映到所有介面。
在此示例中,更改了隊列集2,以便隊列1接收總緩衝區的70%。
Switch(config)#mls qos queue-set output 2 buffers 70 10 10 10在此示例中,隊列集2和隊列1閾值已更改。閾值1和閾值2都對映到3100,以便如果需要,它們可以從預留池提取緩衝區。
Switch(config)#mls qos queue-set output 2 threshold 1 3100 3100 100 3200
Switch#show mls qos queue-set
Queueset: 1
Queue : 1 2 3 4
----------------------------------------------
buffers : 25 25 25 25
threshold1: 100 200 100 100
threshold2: 100 200 100 100
reserved : 50 50 50 50
maximum : 400 400 400 400
Queueset: 2
Queue : 1 2 3 4
----------------------------------------------
buffers : 70 10 10 10
threshold1: 3100 100 100 100
threshold2: 3100 100 100 100
reserved : 100 50 50 50
maximum : 3200 400 400 400
Switch(config)#int gi1/0/1
Switch(config-if)#queue-set 2
Switch(config-if)#end驗證介面是否已對映到queue-set 2。
Switch#show run int gi1/0/1
interface GigabitEthernet1/0/1
switchport mode access
mls qos trust dscp
queue-set 2
end檢查介面是否繼續丟棄資料包。
Switch(config-if)#srr-queue bandwidth share 1 75 25 5
Switch(config-if)#srr-queue bandwidth shape 2 0 0 0檢查介面是否繼續丟棄資料包。
附註:優先順序隊列將一直服務到清空後再為其他隊列提供服務。預設情況下,2960/3560/3750交換器上的優先順序佇列為1。
Switch(config)#int gi1/0/1
Switch(config-if)#priority-queue out
Switch(config-if)#end可以對映在介面上丟棄的資料包的標籤,使其進入隊列1(優先順序隊列)。 此操作可確保始終先處理具有此標籤的流量,再處理任何其他流量。
Switch(config)#mls qos srr-queue output dscp-map queue 1 threshold 1
以下是一些常見問題:
Q:何時更改隊列集,何時使用共用/整形?
A:這個決定取決於投降的性質。如果丟棄間歇性增加,則此問題很可能是由突發流量引起的。相反,如果丟棄以恆定的速率不斷遞增,則丟棄資料包的隊列最有可能收到超出其傳送能力的資料量。
對於間歇性丟棄,隊列必須具有能夠容納偶爾突發的大緩衝區。為了實施此解決方案,必須更改隊列集並向受影響的隊列分配更多緩衝區,同時增加閾值。
對於連續丟棄,必須配置排程程式,以便更頻繁地為受影響的隊列提供服務,並且每CPU週期從隊列中取出更多資料包。 為了實施此解決方案,您必須在出口隊列上配置共用/整形。
Q:共用模式和整形模式之間的區別是什麼?
A:在整形模式下,出口隊列保證一定百分比的頻寬,並且速率限制在該數量。整形流量使用的頻寬不會超過分配的頻寬,即使鏈路處於空閒狀態。隨著時間的推移,整形模式可提供更均勻的流量流,並減少突發流量的峰值和谷值。對於整形,每個權重的絕對值用於計算隊列可用的頻寬。
srr隊列頻寬形狀 重量1重量2重量3重量4
反比(1/weight)控制此隊列的整形頻寬。換句話說,queue1被保留為總頻寬的1/weight1%等。如果將權重配置為0,則相應的隊列將以共用模式運行。使用srr-queue bandwidth shape命令指定的權重將被忽略,並且使用srr-queue bandwidth share interface配置命令為隊列指定的權重生效。
在共用模式下,隊列根據配置的權重共用頻寬。此級別的頻寬是保證的,但不僅限於此。例如,如果隊列是空的並且不再需要共用鏈路,則剩餘的隊列可以擴展到未使用的頻寬並在它們之間共用頻寬。
srr-queue bandwidth share 重量1重量2重量3重量4
queue1被保證最低為頻寬的weight1/(weight1 + weight2 + weight3 + weight4)%,但是如果需要,還可以佔用其他非形狀隊列的頻寬。
修訂 | 發佈日期 | 意見 |
---|---|---|
1.0 |
18-May-2013 |
初始版本 |