目錄

簡介

必要條件

需求

採用元件

背景資訊

什麼是輸出丟棄

擁塞型別

吞吐量低的擁塞

驗證緩衝區擁塞

修改緩衝區以解決輸出丟棄

SoftMax倍增器

按隊列修改緩衝區

管理擁塞的備用方法

使用Wireshark分析輸出丟包

檢視I/O速率

檢視I/O速率（毫秒）

簡介

本檔案將說明如何對Catalyst 9000系列平台上的輸出捨棄進行疑難排解。

必要條件

需求

若要對Catalyst 9000系列平台上的服務品質(QoS)進行疑難排解，您必須瞭解：

- 標準QoS概念

- 模組化QoS指令行介面(CLI)

採用元件

本檔案中的資訊是根據此硬體和軟體版本，但方法學和大多數指令可以套用到其他程式碼上的其他Catalyst 9000系列交換器：

- Cisco Catalyst 9300

- Cisco IOS® XE 16.12.3

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您的網路運作中，請確保您瞭解任何指令可能造成的影響。

注意：有關用於在其他Cisco平台上啟用這些功能的命令，請參閱相應的配置指南。

背景資訊

有關Catalyst 9000系列平台上的QoS的詳細說明（包括預設QoS配置、隊列結構和緩衝區說明），請參閱Catalyst 9000 QoS和隊列白皮書檢視推薦的版本指南，以確保您使用的是針對您的平台的最新推薦軟體。這些建議可確保您的軟體受到支援，並幫助避免舊代碼中的已知錯誤。 Catalyst的推薦版本

什麼是輸出丟棄

緩衝區分配知識可以幫助您瞭解緩衝區擁塞如何導致輸出丟棄。當目的地介面上的封包數量超過其輸出速率時，就會發生擁塞。這些封包必須儲存在緩衝區中，直到可以傳輸。假設這些交換機每個ASIC最多有36 MB的緩衝區，然後在ASIC上的所有埠之間共用。雖然輸出介面可以線速清空該緩衝區，但任何導致資料包以較大速率緩衝的場景都可能導致擁塞。即使流量突發只持續幾分之一秒，也可能會發生擁塞，並且可能導致流量出現延遲；如果緩衝區被完全填滿，則可能會發生輸出丟棄。

註:show interface中顯示的輸出捨棄計數器預設以位元組顯示。在16.9.3版和更新版本中，這些計數器預設為封包。

擁塞型別

如圖1所示，存在兩種型別的擁塞。

圖1.擁塞型別

圖1中顯示的兩種擁塞型別是：

- 多對一：當多個源埠同時向單個目標傳送流量時，目標埠可能會因從多個源接收的流量量而擁塞。

- 速度不相符：當較高速度的連線埠傳輸到較低速度的連線埠時（例如10 Gbps到1 Gbps），封包必須花費時間才能從輸出連線埠中排出，這可能會造成延遲和/或封包捨棄。

吞吐量低的擁塞

即使介面輸出速率明顯低於最大介面容量，流量突發也會導致輸出丟棄。預設情況下，show interface命令的輸出速率在5分鐘內平均化，這不足以捕獲任何短暫的猝發。最好將其平均值設在30秒以上，即使在這種情況下，毫秒的突發流量也可能導致輸出丟棄，而不會導致30秒的平均速率增加。本檔案可用於疑難排解Catalyst 9000系列交換器上出現的任何其他型別擁塞。

驗證緩衝區擁塞

有兩個命令用於驗證緩衝區擁塞。第一個命令是show platform hardware fed switch active qos queue config interface <interface>。此命令可讓您看到連線埠上的目前緩衝區分配，如圖2所示。

9300#show platform hardware fed switch active qos queue config interface gigabitEthernet 1/0/48

Asic:0 Core:0 DATA Port:47 GPN:48 LinkSpeed:0x1

AFD:Disabled FlatAFD:Disabled QoSMap:0 HW Queues: 376 - 383

DrainFast:Disabled PortSoftStart:2 - 1800

DTS  Hardmax  Softmax   PortSMin  GlblSMin  PortStEnd

----- --------  --------  --------  --------  ---------

0   1  6   200   7   800  19   475   0     0   3  2400

1   1  5     0   8  1200  19   712   8   300   3  2400

2   1  5     0   6     0   0     0   0     0   3  2400

3   1  5     0   6     0   0     0   0     0   3  2400

4   1  5     0   6     0   0     0   0     0   3  2400

5   1  5     0   6     0   0     0   0     0   3  2400

6   1  5     0   6     0   0     0   0     0   3  2400

7   1  5     0   6     0   0     0   0     0   3  2400

圖2.隊列緩衝區分配

您特別希望檢視Hardmax和Softmax列，該列顯示隊列可用的緩衝區數。有關這些緩衝區的內容和預設分配方式的資訊，請參閱Catalyst 9000 QoS和排隊白皮書。

第二個命令是show platform hardware fed switch active qos queue stats interface <interface>。此命令允許您檢視介面上每個隊列的統計資訊，包括排入緩衝區的位元組數，以及由於缺少可用緩衝區而丟棄的位元組數。

9300#show platform hardware fed switch active qos queue stats interface Gig 1/0/1

DATA Port:0 Enqueue Counters

---------------------------------------------------------------------------------------------

Q Buffers          Enqueue-TH0          Enqueue-TH1          Enqueue-TH2             Qpolicer

(Count)              (Bytes)              (Bytes)              (Bytes)              (Bytes)

- ------- -------------------- -------------------- -------------------- --------------------

0       0                    0                    0            384251797                    0

1       0                    0                    0         488393930284                    0

2       0                    0                    0                    0                    0

3       0                    0                    0                    0                    0

4       0                    0                    0                    0                    0

5       0                    0                    0                    0                    0

6       0                    0                    0                    0                    0

7       0                    0                    0                    0                    0

DATA Port:0 Drop Counters

-------------------------------------------------------------------------------------------------------------------------------

Q             Drop-TH0             Drop-TH1             Drop-TH2             SBufDrop              QebDrop         QpolicerDrop

(Bytes)              (Bytes)              (Bytes)              (Bytes)              (Bytes)              (Bytes)

- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------

0                    0                    0                    0                    0                    0                    0

1                    0                    0            192308101                    0                    0                    0

2                    0                    0                    0                    0                    0                    0

3                    0                    0                    0                    0                    0                    0

4                    0                    0                    0                    0                    0                    0

5                    0                    0                    0                    0                    0                    0

6                    0                    0                    0                    0                    0                    0

7                    0                    0                    0                    0                    0                    0

圖3.包含丟棄的隊列緩衝區統計資訊

如圖3所示，隊列0和隊列1都有位元組入隊，但隊列1在Drop-TH2列中遇到丟包。此資訊表示隊列0流量未受到此擁塞的影響，並且擁塞的原因特別是隊列1流量。

修改緩衝區以解決輸出丟棄

SoftMax倍增器

要增加每個隊列可以從共用池請求的緩衝區數，請使用配置qos queue-softmax-multiplier <100 - 1200>來增加SoftMax閾值。最大值為1200，並且以12的倍數增加單個埠隊列吸收微突發的能力。此命令會增加埠隊列閾值，以便埠隊列可以佔用共用池中的更多緩衝單元。如圖4所示，配置和增加的緩衝區分配。

9300(config)#qos queue-softmax-multiplier 1200

9300#show platform hardware fed switch active qos queue config interface gigabitEthernet 1/0/48

Asic:0 Core:0 DATA Port:47 GPN:48 LinkSpeed:0x1

AFD:Disabled FlatAFD:Disabled QoSMap:0 HW Queues: 376 - 383

DrainFast:Disabled PortSoftStart:3 - 14400

DTS  Hardmax  Softmax   PortSMin  GlblSMin  PortStEnd

----- --------  --------  --------  --------  ---------

0   1  6   200   9  9600   2   600   0     0   1 15000

1   1  5     0  10 14400   2   900   1   450   1 15000

2   1  5     0   6     0   0     0   0     0   1 15000

3   1  5     0   6     0   0     0   0     0   1 15000

4   1  5     0   6     0   0     0   0     0   1 15000

5   1  5     0   6     0   0     0   0     0   1 15000

6   1  5     0   6     0   0     0   0     0   1 15000

7   1  5     0   6     0   0     0   0     0   1 15000

圖4.使用SoftMax乘數1200的隊列配置

這是一種常用的配置，可快速解決輸出丟棄問題。在映像4中，此配置應用於所有介面上的所有非優先順序隊列。緩衝區分配本身會假設交換器上的所有連線埠上不會同時發生微突發。如果在隨機時刻發生微突發，則共用緩衝器可以專門提供額外的緩衝單元來吸收它們。

按隊列修改緩衝區

在無法使用SoftMax乘數的情況下，或者嘗試調整緩衝區以適應流量量變曲線的情況下，可以使用按隊列修改緩衝區。要修改隊列緩衝區分配（基於每個介面的交換機），必須使用策略對映。 在大多數情況下，可以修改介面的當前策略對映並根據類更改緩衝區。

在本例中，介面GigabitEthernet1/0/48遇到輸出丟棄。如圖5所示，應用於此介面的出口策略對映。

policy-map MYPOL

class Voice

priority level 1 percent 20

class Video

priority level 2 percent 10

class Control

bandwidth percent 10

class Data

bandwidth percent 5

class class-default

圖5.策略對映示例

此策略對映具有5個類對映，導致介面上共有5個出口隊列。每個類都有一個基於其優先順序級別分配給它的預設緩衝區數。

圖6顯示當前緩衝區分配。

9300#show platform hardware fed switch active qos queue config interface gigabitEthernet 1/0/48

Asic:0 Core:0 DATA Port:47 GPN:48 LinkSpeed:0x1

AFD:Disabled FlatAFD:Disabled QoSMap:0 HW Queues: 376 - 383

DrainFast:Disabled PortSoftStart:3 - 600

DTS  Hardmax  Softmax   PortSMin  GlblSMin  PortStEnd

----- --------  --------  --------  --------  ---------

0   1  7   100   9   100   0     0   0     0   3   800

1   1  7   100  10   400  19   237   0     0   3   800

2   1  5     0  10   400  19   237   8   100   3   800

3   1  5     0  10   400  19   237   8   100   3   800

4   1  5     0  10   400  19   237   8   100   3   800

5   1  5     0   6     0   0     0   0     0   3   800

6   1  5     0   6     0   0     0   0     0   3   800

7   1  5     0   6     0   0     0   0     0   3   800

圖6.使用示例策略的隊列緩衝區配置

由於此介面遇到輸出丟棄情況，請檢視介面的隊列統計資訊以檢視擁塞的位置。

9300#show platform hardware fed switch active qos queue stats interface gigabitEthernet 1/0/48

DATA Port:0 Enqueue Counters

---------------------------------------------------------------------------------------------

Q Buffers          Enqueue-TH0          Enqueue-TH1          Enqueue-TH2             Qpolicer

(Count)              (Bytes)              (Bytes)              (Bytes)              (Bytes)

- ------- -------------------- -------------------- -------------------- --------------------

0       0                    0                    0               489094                    0

1       0                    0                    0              4846845                    0

2       0                    0                    0             89498498                    0

3       0                    0                    0          21297827045                    0

4       0                    0                    0             74983184                    0

5       0                    0                    0                    0                    0

6       0                    0                    0                    0                    0

7       0                    0                    0                    0                    0

DATA Port:0 Drop Counters

-------------------------------------------------------------------------------------------------------------------------------

Q             Drop-TH0             Drop-TH1             Drop-TH2             SBufDrop              QebDrop         QpolicerDrop

(Bytes)              (Bytes)              (Bytes)              (Bytes)              (Bytes)              (Bytes)

- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------

0                    0                    0                    0                    0                    0                    0

1                    0                    0                    0                    0                    0                    0

2                    0                    0                    0                    0                    0                    0

3                    0                    0              3854484                    0                    0                    0

4                    0                    0                    0                    0                    0                    0

5                    0                    0                    0                    0                    0                    0

6                    0                    0                    0                    0                    0                    0

7                    0                    0                    0                    0                    0                    0

圖7. 使用示例策略使用丟棄的隊列緩衝區統計資訊

圖7顯示，隊列3加入隊列的流量比任何其他隊列都多，並且它也是唯一遇到輸出丟棄的隊列。由於隊列編號從0開始，隊列3對映到第四個類對映，類資料。

要緩解此隊列上的丟棄，請向隊列3分配更多緩衝區。要更改此緩衝區分配，請在策略對映中使用隊列緩衝區比率<0-100>配置。如果在策略中的每個類上配置，則最多必須為100。如果只使用此命令配置單個類，則系統將嘗試從其他隊列中均勻地減去緩衝區。

在映像8中，Data類已配置隊列緩衝區比率40。

policy-map MYPOL

class Voice

priority level 1 percent 20

class Video

priority level 2 percent 10

class Control

bandwidth percent 10

class Data

bandwidth percent 5

queue-buffers ratio 40

圖8. 帶有已修改的隊列緩衝區的策略對映示例

在圖9中，您可以看到Data類現在有40%的介面緩衝區，共800個緩衝區。

9300#show platform hardware fed switch active qos queue config interface gigabitEthernet 1/0/48

Asic:0 Core:0 DATA Port:47 GPN:48 LinkSpeed:0x1

AFD:Disabled FlatAFD:Disabled QoSMap:0 HW Queues: 376 - 383

DrainFast:Disabled PortSoftStart:3 - 1200

DTS  Hardmax  Softmax   PortSMin  GlblSMin  PortStEnd

----- --------  --------  --------  --------  ---------

0   1  7    75   9    75   0     0   0     0   3  1600

1   1  7    75  10   300  19   178   0     0   3  1600

2   1  5     0  10   300  19   178   8    75   3  1600

3   1  5     0   7   800  19   475   8   200   3  1600

4   1  5     0  10   300  19   178   8    75   3  1600

5   1  5     0   6     0   0     0   0     0   3  1600

6   1  5     0   6     0   0     0   0     0   3  1600

7   1  5     0   6     0   0     0   0     0   3  1600

圖9. 使用更新的示例策略進行隊列緩衝區配置

這也導致其他隊列的Softmax緩衝區較少。必須以小增量進行這些緩衝區更改，以確保這些更改不會導致其他隊列上的輸出丟棄。

進行此更改後，檢查隊列狀態，並檢視此隊列或任何其他隊列上的丟棄是否仍會增加。如果丟棄繼續，請進一步修改隊列緩衝區配置，直到解決輸出丟棄。

管理擁塞的備用方法

QoS主要是確定流量優先順序的方法，並非適用於每個輸出捨棄情況的解決方案。在某些情況下，對隊列緩衝區的修改不足以解決所有輸出丟棄。在這些情況下，您可以通過幾種其他方法管理擁塞：

- 降低超訂用率。

這包括增加輸出頻寬的方法，例如埠通道或等價多重路徑(ECMP)，但也可能需要更多涉及的配置，例如流量工程。

- 使用排隊排程程式來排定流量的優先順序。

雖然隊列排程程式不會停止擁塞，但它可以保護重要流量免受擁塞的影響

- 使用加權隨機早期丟棄(WRED)或加權尾部丟棄(WTD)等擁塞管理演算法來提前丟棄某些流量。

- 管制入口上的流量以減少出口上的流量。

使用Wireshark分析輸出丟包

Wireshark是識別導致緩衝區擁塞和丟棄的突發流量的有用工具。  如果在遇到捨棄時，您會在輸出方向對介面進行SPAN，Wireshark可以繪製輸出速率圖表，檢視流量觸發捨棄的時間和內容。這在識別低吞吐量方案中的輸出丟棄時尤其有用。

檢視I/O速率

使用Wireshark開啟SPAN捕獲後，請依次選擇Statistics和I/O Graph，如圖10所示。

圖10.選擇I/O圖形

選中後，Wireshark會生成流量圖形（以位/秒為單位）。圖11顯示介面遇到輸出丟棄時的示例圖形。

圖11.I/O圖形位/毫秒

圖11表示介面的最大吞吐量僅略超過80 Mbps。預設圖形檢視不夠精細，無法識別導致資料包丟棄的少量流量突發。它是每秒流量的平均值。要瞭解此速率如何導致緩衝區擁塞，請考慮以毫秒為單位的吞吐量。

千兆介面每秒可轉發1,000,000,000位。轉換到毫秒後，這等於每毫秒1,000,000（或10^6）位。

當介面速率超過介面的轉送速度時，交換器必須緩衝這些封包，這會導致擁塞和輸出捨棄。

檢視I/O速率（毫秒）

Wireshark允許使用者將I/O速率圖形化為每毫秒的位數。為此，請將Interval（時間間隔）從1秒縮短到1毫秒，然後按一下Reset以正確檢視圖形。此步驟如圖12所示。

圖12.將時間間隔縮短為1毫秒並重置圖形

更新的圖形更準確地顯示介面的真實I/O速率。當速率達到或超過每毫秒10^6位元時，交換器會遇到擁塞或輸出下降。 圖13顯示了遇到輸出丟棄的介面的更新I/O圖形。

圖13.I/O圖形位/毫秒

圖13顯示有多個流量峰值達到或超過10^6閾值。流量會受到緩衝，如果流量超過輸出緩衝區大小，則會將其捨棄。

註：如果SPAN目的地是通過1 Gbps介面連線的，則Wireshark中的I/O速率不能超過該10^6位/毫秒速率，無論源介面速率如何。SPAN目的地介面會緩衝或捨棄這些封包。經常會看到I/O圖形在最大吞吐量處停滯，或者呈現似乎變得更高平均業務速率。