はじめに
このドキュメントでは、Catalyst 9000シリーズプラットフォームでの出力ドロップをトラブルシューティングする方法について説明します。
前提条件
要件
Catalyst 9000シリーズプラットフォームでQuality of Service(QoS)のトラブルシューティングを行うには、次の点を理解している必要があります。
- 標準的なQoSの概念
- モジュラQoSコマンドラインインターフェイス(CLI)
使用するコンポーネント
このドキュメントの情報は、次のハードウェアとソフトウェアのバージョンに基づいていますが、方法論と大部分のコマンドは、他のコードで他のCatalyst 9000シリーズスイッチに適用できます。
- Cisco Catalyst 9300
- Cisco IOS® XE 16.12.3
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
注:シスコの他のプラットフォームでこれらの機能を有効にするために使用されるコマンドについては、該当するコンフィギュレーション ガイドを参照してください。
背景説明
デフォルトのQoS設定、キュー構造、バッファの説明など、Catalyst 9000シリーズプラットフォームのQoSに関する詳細な説明については、『Catalyst 9000 QoS and Queueing White Paper』を参照してください。プラットフォームに対して推奨される最新のソフトウェアを使用しているかどうかを確認するために、推奨されるリリースガイドを確認してください。これらの推奨事項により、ソフトウェアが確実にサポートされ、古いコードの既知のバグを回避できます。 Catalystの推奨リリース
出力廃棄とは
バッファの割り当てに関する知識は、バッファの輻輳によって出力ドロップが発生する仕組みを理解するのに役立ちます。輻輳は、宛先インターフェイスに出力レートを超えるパケットが多数ある場合に発生します。これらのパケットは、送信できるようになるまでバッファに保存する必要があります。これらのスイッチにはASICあたり最大36 MBのバッファがあり、これがASIC上のすべてのポートで共有されるとします。出力インターフェイスはラインレートでそのバッファを空にできますが、パケットをより速いレートでバッファするシナリオでは輻輳が発生する可能性があります。輻輳は、そのトラフィックバーストが1秒程度しか続かず、トラフィックの遅延を引き起こしたり、バッファが完全に満たされる場合は出力ドロップが発生したりする可能性があります。
注:show interfaceで表示される出力ドロップカウンタは、デフォルトではバイト単位で表示されます。リリース16.9.3以降では、これらのカウンタはデフォルトでパケットです。
輻輳のタイプ
図1に示すように、輻輳には2つのタイプがあります。
画像 1.輻輳のタイプ
図1に示す2種類の輻輳は次のとおりです。
- 多対1:複数の送信元ポートが単一の宛先に対して同時にトラフィックを送信する場合、宛先ポートは複数の送信元から受信したトラフィック量で輻輳する可能性があります。
- 速度の不一致:速度の高いポートから速度の低いポート(10 Gbpsから1 Gbpsなど)に送信する場合、パケットは出力ポートから排出されるまでに時間がかかるため、遅延やパケットのドロップが発生する可能性があります。
低スループットでの輻輳
トラフィック バーストにより、インターフェイスの出力率が最大インターフェイス容量よりもかなり低い場合でも、出力がドロップされることがあります。デフォルトでは、show interface コマンドの出力レートは 5 分間の平均です。これは、短期間のすべてのバーストをキャプチャするために十分ではありません。30秒の平均を取るのが最善ですが、このシナリオでも、ミリ秒のトラフィックのバーストによって出力廃棄が発生し、30秒の平均レートが増加することはありません。このドキュメントは、Catalyst 9000シリーズスイッチで発生するその他のタイプの輻輳のトラブルシューティングに使用できます。
バッファ輻輳の検証
バッファの輻輳を検証するには、2つのコマンドを使用します。最初のコマンドは、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とキューイング』ホワイトペーパーを参照してください。
2番目のコマンドは、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はどちらもバイトがキューイングされていますが、Drop-TH2列でドロップが発生するのはキュー1です。この情報は、キュー0のトラフィックがこの輻輳の影響を受けていないこと、および輻輳の原因が特にキュー1のトラフィックであることを示しています。
出力ドロップを解決するためのバッファの変更
SoftMax割増率
各キューが共有プールから要求できるバッファの数を増やすには、qos queue-softmax-multiplier <100 - 1200>設定を使用してSoftMaxしきい値を増やします。最大値は1200で、1つのポートキューがマイクロバーストを吸収できる機能は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に他のどのキューよりも多くのトラフィックがキューイングされており、また出力廃棄が発生したのはキュー3だけであることを示しています。キュー番号は0から始まるため、キュー3は4番目のクラスマップであるクラスデータにマッピングされます。
このキューでの廃棄を軽減するには、キュー3により多くのバッファを割り当てます。このバッファ割り当てを変更するには、ポリシーマップのqueue-buffers ratio <0 ~ 100>設定を使用します。ポリシーの各クラスに設定する場合、合計が100になる必要があります。このコマンドで1つのクラスだけを設定すると、システムは他のキューからバッファを均等に差し引こうとします。
図8では、Dataクラスはqueue-buffers ratio 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は主にトラフィックに優先順位を付ける方法であり、すべての出力廃棄シナリオに対するソリューションではありません。一部のシナリオでは、キューバッファの変更では、すべての出力廃棄を解決するには不十分です。このようなシナリオでは、輻輳を次のような方法で管理できます。
これには、ポートチャネルやEqual Cost Multipath(ECMP)などの出力帯域幅を増加させる方法が含まれますが、トラフィックエンジニアリングなどのより複雑な設定が必要になる場合もあります。
- キューイングスケジューラを使用して、トラフィックに優先順位を付けます。
キュースケジューラは輻輳を停止しませんが、重要なトラフィックを輻輳による影響から保護します
- Weighted Random Early Discard(WRED;重み付けランダム早期廃棄)やWeighted Tail Drop(WTD;重み付けテールドロップ)などの輻輳管理アルゴリズムを使用して、一部のトラフィックを早期にドロップします。
- 入力側のトラフィックをポリシングして、出力側のトラフィックを減らします。
Wiresharkによる出力ドロップの分析
Wiresharkは、バッファの輻輳とドロップを引き起こすトラフィックのバーストを特定するための便利なツールです。 ドロップが発生している間にインターフェイスを出力方向にSPANする場合、Wiresharkは出力レートをグラフ化して、いつ、どのトラフィックがドロップをトリガーしたかを確認できます。これは、スループットが低いシナリオで出力廃棄を特定する場合に特に役立ちます。
I/Oレートの表示
WiresharkでSPANキャプチャを開いたら、図10に示すように、統計情報、I/Oグラフの順に選択します。
図 10.I/Oグラフの選択
これが選択されると、Wiresharkはトラフィックのグラフをビット/秒で生成します。図11は、出力廃棄が発生したインターフェイスのグラフ例を示しています。
図 11.I/Oグラフビット/ミリ秒
図11のグラフは、インターフェイスの最大スループットが80 Mbpsをわずかに超えていたことを示しています。デフォルトのグラフビューでは、パケットドロップを引き起こすトラフィックの小さなバーストを識別できるほど詳細ではありません。これは、1秒あたりのトラフィックレートの平均です。このレートがバッファの輻輳をどのように引き起こすかを理解するには、ミリ秒単位のスループットを検討します。
ギガビットインターフェイスは1,000,000,000ビット/秒で転送できます。ミリ秒に変換されると、これは1,000,000(または10^6)ビット/ミリ秒に相当します。
インターフェイスレートがインターフェイスの転送速度を超えると、スイッチはこれらのパケットをバッファに入れる必要があり、その結果、輻輳と出力ドロップが発生します。
I/Oレートをミリ秒単位で表示
Wiresharkを使用すると、I/Oレートをビット/ミリ秒でグラフ化できます。そのためには、Intervalを1秒から1ミリ秒に減らし、Resetをクリックしてグラフを正しく表示します。この手順を図12に示します。
図 12.インターバルを1 msに減らしてグラフをリセットする
更新されたグラフには、インターフェイスの実際のI/Oレートがより正確に表示されます。レートが10^6 bpsを超えると、スイッチで輻輳または出力ドロップが発生します。 図13は、出力廃棄が発生したインターフェイスの更新されたI/Oグラフを示しています。
図 13.I/Oグラフビット/ミリ秒
図13は、10^6しきい値と一致するか、しきい値を超える複数のトラフィックピークがあることを示しています。トラフィックはバッファリングの対象となり、出力バッファサイズを超えるとドロップされます。
注:SPANの宛先が1 Gbpsインターフェイスで接続されている場合、WiresharkのI/Oレートは、発信元インターフェイスのレートに関係なく、10^6ビット/ミリ秒レートを超えることはできません。SPANの宛先インターフェイスは、代わりにこれらのパケットをバッファするか、廃棄します。I/Oグラフのプラトー値が最大スループットを示すか、平均トラフィックレートが高くなっていると思われるのが一般的です。