Nexus9000シリーズのQoSについて
同じCISCO製品とはいえ、従来のIOSシリーズと設計思想が異なります。
CiscoのQoSを勉強された方なら必ず目にしているであろう、以下のサイト
https://www.infraexpert.com/study/study65.html
に解説がある技術の中で、階層型シェーピングはできません。なぜなら、予めクラスがシステムにて定義されているからです。使用するNexusによってクラス(厳密にはタイプ:キューイングクラス)の数が4つの場合と8つの場合があります。前者を4qモード、後者を8qモードと呼んでいます。デフォルトでどちらが有効になっているかは機器によって異なりますので仕様を確認してください。このクラスにはclass defaultも含まれます。詳細についてはシェーピングの章で解説します。
その前に
NWの遅延と言っても様々な種類があるのをご存じでしょうか。次の記事で解説しております。
NW機器の設定変更で作業ミスなどが発生した場合には元の状態に戻す必要があります。戻し用のconfigを作成することなく、機器が自動的に設定投入したコマンドを、特定の状態のrunnning-configと比較して削除する機能であるrollback機能を、Nexusでは搭載しております。非常に便利なコマンドですので、是非一読をお勧めします。
QoSと関連するNWのトラブルとしてマイクロバーストによる輻輳があります。Nexus9000 Seriesでは筐体内に非常に高性能なマイクロバースト検知機能がありますので、必要に応じてこちらも確認していただけると良いです。
I/Fへの流量が送信I/Fの帯域幅を超過した状態が続くとバッファにトラフィックを貯めこむことができず、テールドロップが発生しパケットが破棄されます。そのような事象が発生した場合には特定のSYSLOGメッセージが出力されます。この場合に、どのように調査するのか丁寧に解説した記事を執筆しました。アーキテクチャの理解にも役に立つので併せて読んでいただけると幸いです。
前提となる知識
上記のサイトの内容をほぼ理解していることが大前提となります。
そのため、分類、マーキング、キューイング、スケジューリングといった土台となる処理フローやシェーピング、ポリシングについては理解していること前提で説明します。
Nexus9000シリーズにてQoSを設定する場合の流れは以下となります。
トラフィッククラスの作成
パケットの分類をするために作成する必要があります。
具体的にはIOSで作成していた以下のようなコマンドが該当します。
[コマンド]
access-list 101 permit ip host 192.168.1.100 any
class-map match-all sales
match access-group 101
このコマンドによって、salesという名前のクラスが作成されました。
このクラスを使うと、ACL101番に合致したパケットがこのクラスに分類されます。
ポリシーの作成
クラスを作成しただけでは意味がありません。分類したパケットに対して何かしらのアクションを実施する必要があります。例えば、マーキング、ポリシング、シェーピングなどを、合致したトラフィッククラスで定義します。
[コマンド]
policy-map A-sales
class sales
set dscp ef
上記コマンドでは、A-salesという名前のポリシーを作成しています。
対象とするトラフィッククラスはsalesだけとし、dscpの値をefとしています。
I/Fへの適用
ポリシーを作成しました。しかし、作成しただけでは意味がありません。最終的には特定のI/Fに対して適用する必要があります。
[コマンド]
interface FastEthernet 0/1
service-policy input A-sales
上記コマンドをI/Fに設定することで、A-salesというポリシーがGi0/1に、入力方向で定義されます。これ以降、ACL101に合致した通信についてはDSCPがefに書き換えられます。
3つのタイプ
Nexus9000シリーズのポリシーには以下の3種類があります。
IOSではこういった区別がありません。
①QoSポリシー
アクションとして、マーキング、ポリシング、シェーピング、WRED、ECN、qos-groupが可能なポリシーです。シェーピングは使用することを推奨されていません。qos-groupは後述します。
②キューイングポリシー
アクションとして、キューイング、スケジューリングなどが可能なポリシーです。このポリシーで使用するトラフィッククラスは一番初めに少しだけ説明させていただいた通り、予め定義(システム定義のタイプキューイングクラス)されています。では、そのトラフィッククラスでは、どのようにパケットが分類されるようにできるのか。そのために使用するのが、qos-groupというシステムのローカルのみで使用されるラベルです。4qモードならば0-3、8qモードならば0-7まであります。
具体的には、シェーピングの章で紹介します。
③network qosポリシー
ネットワーク全体のQoSプロパティの特定で使用されています。デフォルト設定ではMTU1500が設定されていますが、詳細な説明は省略します。以後、これについては解説しません。
分類について
分類については、従来のaccess-listとclass-mapを用いた方法で行います。
厳密には、access-list以外にも以下の6つの分類基準があります。そのため、必ずしもaccess-listを使用する必要はないです。
①CoS
②IP precedense
③DSCP
④ACL
⑤パケット長
⑥IP RTP
また、補足となりますが、ACLを使用した場合にdenyを使用した場合はpermitに変換されて認識されます。そのため、deny ip any anyと定義している場合はpermit ip any anyと同一となります。
https://www.cisco.com/c/ja_jp/td/docs/dcn/nx-os/nexus9000/102x/configuration/qos/cisco-nexus-9000-nx-os-quality-of-service-configuration-guide-102x/m-configuring-classification.html
マーキングについて
パケットの識別のためにVLANタグやIPヘッダの特定の領域の値を変更します。
以下の4つがあります。
①IP precedense
②DSCP
③QoS group
④CoS
この中でも、③については、システム内部用のローカルで有効なQoS値となります。前述したとおり、4qモードでは0~3、8qモードでは0~7まであります。
ポリシングについて
トラフィックの特定のクラスについて、データレートをモニタリングする機能です。
データレートがユーザの設定値を超過するとパケットの破棄またはマーキングを実施します。ポリサー(ポリシング用のポリシー)では、シングルレートもしくはデュアルレートのどちらかを定義することができます。シングルレートの場合は認定情報レート(CIR)のみを監視して、レートを超過した場合は違反(violate)で定義したアクションが適用されます。デュアルレートの場合は認定情報レート(CIR)と最大情報レート(PIR)の両方を監視して、CIRを超過した場合は超過(exceed)で定義したアクションが適用され、PIRを超過した場合は違反(violate)で定義したアクションが適用されます。
合致(succeed)の場合は以下のアクションが適用されます。
①パケットの送信
②マーキング(IP Precedence、DSCP、COS、QoS group)
また、超過(exceed)や違反(violate)の場合は以下のアクションが適用されます。
①破棄
②マーキング(IP Precedence、DSCP、COS、QoS group)
どの条件の時にどのアクションを適用するかは任意で設定できます。
シェーピングについて
一定のレートでパケットを送出する機能です。キューにため込むことで平滑化することが可能となります。これにより、バーストトラフィックを防ぎ通信が不安定になることを防ぎます。ただし、パケットをキューに貯めこんでしまうため遅延が発生します。そのため、音声パケットには向かない技術です。しかしながら、複数のキューの1つのみをpriorityキューとして定義し、音声トラフィックはそのキューに割り当てることで遅延を防止し、その他の通信はシェーピングの恩恵を受けることができるLLQ(Low Latency Que)を使えば音声パケットでもシェーピングを使うことができます。
Nexus9000シリーズでは前述の通り、システム定義されたキューイングクラスを使用します。
出典:https://www.cisco.com/c/ja_jp/td/docs/dcn/nx-os/nexus9000/102x/configuration/qos/cisco-nexus-9000-nx-os-quality-of-service-configuration-guide-102x/m-overview.html
前述した通り、そのままではclass-mapコマンドを用いて分類したトラフィッククラスの適用はできません。そのため、システム内でのみ使用するローカルなラベル値であるQoS-groupをこのトラフィッククラスに対してマーキングします。具体例を以下に示します。
[コマンド]
ip access-list SHAPING
10 permit ip 192.168.0.1/32 192.168.64.0/18
class-map type qos match-all C-SHAPING
match access-group name SHAPING
policy-map type qos P-SHAPING
class C-SHAPING
set qos-group 3
上記のコマンドを投入することで、トラフィッククラス”C-SHAPING”に合致した通信は、タイプQoSのポリシー”P-SHAPING “によって、qos-group 3が付与されます。qos-gorup 3という値は、事前定義されているタイプキューイングクラスの”c-out-q3″にも付与されています。この値を合致させることで、”c-out-q3″というキュー(クラス)に対しては、送信元:192.168.0.1/32、宛先:192.168.64.0/18のパケットが合致するようになります。あとは、この”c-out-q3″というクラスに対して、シェーピングレートの設定をします。
このように、qos-groupを使用することでシェーピング対象のトラフィックを絞ることが可能となっています。この点が、従来のIOSと異なるため気を付けましょう。
また、LLQのように一部の通信のみは最優先で処理されるようにし、その他は帯域幅を保証するタイプのシェーピング設定は以下の通りです。ただし、予め定義されているシェーピング用のクラスの数は4qモードで4つ、8qモードでは8つとなるため注意が必要です。
コマンド例では、8qモードの場合のタイプキューイングクラスを使用することとします。
[コマンド]
policy-map type queuing P-Shaping-LLQ
class type queuing c-out-8q-q-default
shape min 5900 mbps max 6900 mbps
bandwidth percent 69
class type queuing c-out-8q-q7
priority level 1
class type queuing c-out-8q-q6
bandwidth remaining percent 16
class type queuing c-out-8q-q5
bandwidth remaining percent 8
class type queuing c-out-8q-q4
bandwidth remaining percent 4
class type queuing c-out-8q-q3
bandwidth remaining percent 2
class type queuing c-out-8q-q2
bandwidth remaining percent 1
class type queuing c-out-8q-q1
bandwidth remaining percent 0
※トラフィッククラスの定義、qos-group用のタイプqosポリシーは省略しています。
このコマンドによって、以下のようなことが実現できます。
・qos-group 7のクラスは最優先で通信されます。
・qos-group 2-6のクラスは最低帯域幅が保証されます。ただし、priorityキューで割り当てられた帯域幅を引いたものが、残りのキューで共有されます。また、priorityコマンドを使用する場合は、bandwidth remainingコマンドしか使用できません。
・qos-group 1のクラスは輻輳時の帯域保障はされません。
・qos-group 0のクラスはデフォルトクラスです。残り帯域幅の69%が輻輳時の最低保証帯域幅となります。また、シェーピングが設定されており、最小レートとして5.9Gbps、最大レートとして6.9Gbpsとなります。
https://www.cisco.com/c/ja_jp/td/docs/dcn/nx-os/nexus9000/102x/configuration/qos/cisco-nexus-9000-nx-os-quality-of-service-configuration-guide-102x/m-configuring-queuing-and-scheduling.html
コメント