Cisco ASR 9000 シリーズ ルータでのモジュラ QoS 輻輳回避の設定
輻輳回避技術では、トラフィック フローをモニタすることにより、共通ネットワークのボトルネックでの輻輳を予測し回避します。発生した後に輻輳を制御する輻輳管理技術に対し、回避技術は輻輳が発生する前に実行されます。
輻輳回避は、パケットのドロップにより行われます。Cisco IOS XR ソフトウェアでは、パケットをドロップする次の Quality of Service(QoS)輻輳回避技術がサポートされます。
• ランダム早期検出(RED)
• 重み付けランダム早期検出(WRED)
• テール ドロップ
このモジュールでは、次の輻輳回避技術に関連する概念および作業について説明します。
ラインカード、SIP および SPA のサポート
|
|
|
ランダム早期検出 |
あり |
あり |
重み付けランダム早期検出 |
あり |
あり |
テール ドロップ |
あり |
あり |
Cisco ASR 9000 シリーズ ルータでのモジュラ QoS 輻輳回避の設定の機能履歴
|
|
リリース 3.7.2 |
輻輳回避機能が ASR 9000 イーサネット ラインカードで導入されました。 ランダム早期検出、重み付けランダム早期検出、およびテール ドロップの各機能が ASR 9000 イーサネット ラインカードで導入されました。 |
リリース 3.9.0 |
ランダム早期検出、重み付けランダム早期検出、およびテール ドロップの各機能が ASR 9000 用 SIP 700 でサポートされました。 |
Cisco ASR 9000 シリーズ ルータでのモジュラ QoS 輻輳回避の設定に関する情報
このマニュアルの QoS 輻輳回避技術を設定するには、次の概念を理解している必要があります。
• 「ランダム早期検出と TCP」
• 「重み付けランダム早期検出による優先トラフィック処理」
• 「テール ドロップと FIFO キュー」
ランダム早期検出と TCP
RED 輻輳回避技術は、TCP の輻輳制御メカニズムを利用しています。高輻輳期間の前にランダムにパケットをドロップすることにより、RED はパケットの送信元に、その伝送レートを低下させるよう指示します。パケット送信元が TCP を使用している場合、送信元はすべてのパケットが宛先に届くようになるまで伝送レートを下げます。これは輻輳が解消されたことを示します。TCP にパケットの送信速度を下げさせる手段として RED を使用できます。TCP は停止するだけでなく、素早く再起動して、ネットワークがサポート可能なレートに伝送レートを対応させます。
RED は時間の損失を分散させて、トラフィックのバーストを吸収しながら通常の低いキューの深さを維持します。インターフェイスでイネーブルにすると、RED は、設定時に選択したレートで輻輳が発生した場合にパケットのドロップを開始します。
重み付けランダム早期検出による優先トラフィック処理
WRED は、特定の一致基準(DSCP、廃棄クラスなど)に基づいて単一のクラス内の複数の RED プロファイルを定義する機能を提供します。これにより、パケットの相対的な重要性に基づいて、異なるドロップ優先順位を設定できます。WRED では、インターフェイスで輻輳が発生し始めると、よりプライオリティが低いトラフィックを選択的に廃棄し、異なるサービス クラスに対して差別化したパフォーマンス特性を提供できます。重み付けされていない RED の動作が行われるように、ドロップの決定を行う際に IP precedence を無視するよう WRED を設定できます。
WRED は、輻輳の可能性を早期検出し、複数のトラフィック クラスを実現します。また、グローバル同期に対して保護されます。そのため、WRED は輻輳が発生すると予測される任意の出力インターフェイスに有効です。
ただし、WRED は通常は、ネットワークのエッジではなくネットワークのコア ルータで使用されます。エッジ ルータは、ネットワークに送信されるパケットに IP precedence を割り当てます。WRED は、これらの優先順位を使用して、異なるタイプのトラフィックの処理方法を定義します。
WRED では、異なる分類基準(IP precedence、MPLS EXP 値など)に対する個別のドロップしきい値(最小および最大)を設定でき、異なるトラフィック タイプでのパケットのドロップに対し、異なる Quality of Service を実現できます。標準的なトラフィックは、輻輳期間中には、優先度の高いトラフィックよりも頻繁にドロップされる可能性があります。
WRED は非 IP トラフィックを優先順位 0 の最低優先順位として扱います。したがって、非 IP トラフィックは通常、IP トラフィックよりもドロップされやすくなります。
WRED は、ほとんどのトラフィックが TCP/IP トラフィックである場合にだけ有用です。TCP では、破棄されたパケットは輻輳を示しているため、パケットの発信元は伝送レートを低下させます。他のプロトコルでは、パケットの発信元は応答しないか、または破棄されたパケットを同じレートで再送信します。このため、パケットを破棄しても輻輳は低減されません。
図 1 に、WRED の動作方法を示します。
図 1 重み付けランダム早期検出
WRED のキュー制限
キュー制限は、各キューに使用可能なバッファ数を微調整するために使用されます。これはキューイング クラスでのみ使用できます。デフォルトのキュー制限は、指定されたキューのサービス レートの 100 ms です。サービス レートは、最小保証帯域幅と特定のクラスに暗黙的または明示的に割り当てられた残存帯域幅の合計です。
キュー制限は、8 KB、16 KB、24 KB、32 KB、48 KB、64 KB、96 KB、128 KB、192 KB、256 KB、384 KB、512 KB、768 KB、1024 KB、1536 KB、2048 KB、3072 KB、4196 KB、8192 KB、16394 KB、32768 KB、65536 KB、131072 KB、262144 KB のいずれかの値に丸められます。
テール ドロップと FIFO キュー
テール ドロップは、出力キューが満杯のときに、輻輳が削除されるまでパケットをドロップする輻輳回避技術です。テール ドロップでは、すべてのトラフィック フローを平等に扱い、サービス クラス間で区別しません。テール ドロップは、ファーストイン ファーストアウト(FIFO)キューに入り、下位リンク帯域幅によって決定したレートで転送された未分類のパケットを管理します。
「Cisco ASR 9000 シリーズ ルータでのモジュラ QoS パケット分類とマーキングの設定」 モジュールの 「デフォルトのトラフィック クラス」 セクション を参照してください。
Cisco ASR 9000 シリーズ ルータでのモジュラ QoS 輻輳回避の設定方法
ここでは、次の作業の手順について説明します。
• 「ランダム早期検出の設定」(必須)
• 「重み付けランダム早期検出の設定」(必須)
• 「テール ドロップの設定」(必須)
ランダム早期検出の設定
任意のクラスで default キーワードを指定して random-detect コマンドを設定することにより、ランダム早期検出(RED)を設定できます。この方法で、単一の RED プロファイルがクラスに一致するすべてのパケットに適用されます。
この設定作業は WRED で行う場合と同様ですが、 random-detect precedence コマンドは設定せずに、RED をイネーブルにするために、 default キーワードを指定した random-detect コマンドを使用する必要があります。
制限事項
class-default を含む任意のクラスで random-detect default コマンドを設定する場合は、次のいずれかのコマンドを設定する必要があります。
• shape average
• bandwidth
• bandwidth remaining
手順の概要
1. configure
2. policy-map policy-name
3. class class-name
4. random-detect { cos value | default | discard-class value | dscp value | exp value | precedence value | min-threshold [ units ] max-threshold [ units ] }
5. bandwidth { bandwidth [ units ] | percent value }
または
bandwidth remaining [ percent value | ratio ratio-value ]
6. shape average { percent percentage | value [ units ]}
7. exit
8. exit
9. interface type interface-path-id
10. service-policy { input | output } policy-map
11. end
または
commit
手順の詳細
|
|
|
ステップ 1 |
configure
RP/0/RSP0/CPU0:router# configure |
グローバル コンフィギュレーション モードを開始します。 |
ステップ 2 |
policy-map policy-map-name
RP/0/RSP0/CPU0:router(config)# policy-map policy1 |
ポリシー マップ コンフィギュレーション モードを開始します。 • 1 つ以上のインターフェイスに付加できるポリシー マップを作成または変更し、サービス ポリシーを指定します。 |
ステップ 3 |
class class-name
RP/0/RSP0/CPU0:router(config-pmap)# class class1 |
ポリシー マップ クラス コンフィギュレーション モードを開始します。 • ポリシーを作成または変更するクラスの名前を指定します。 |
ステップ 4 |
random-detect { cos value | default | discard-class value | dscp value | exp value | precedence value | min-threshold [ units ] max-threshold [ units ] }
RP/0/RSP0/CPU0:router(config-pmap-c)# random-detect default |
デフォルトの最小しきい値および最大しきい値を使用した RED をイネーブルにします。 |
ステップ 5 |
bandwidth { bandwidth [ units ] | percent value } または bandwidth remaining [ percent value | ratio ratio-value
RP/0/RSP0/CPU0:router(config-pmap-c)# bandwidth percent 30 または RP/0/RSP0/CPU0:router(config-pmap-c)# bandwidth remaining percent 20 |
(任意)ポリシー マップに属しているクラスに割り当てる帯域幅を指定します。 または (任意)さまざまなクラスに残りの帯域幅を割り当てる方法を指定します。 (注) 非デフォルト クラスには、これらの設定のいずれかが必要です。 |
ステップ 6 |
shape average {
percent
percentage |
value [
units ]}
RP/0/RSP0/CPU0:router(config-pmap-c)# shape average percent 50 |
(任意)指定されたビット レートまたは使用可能な帯域幅のパーセンテージに従い、トラフィックをシェーピングします。 |
ステップ 7 |
exit
RP/0/RSP0/CPU0:router(config-pmap-c)# exit |
ルータをポリシー マップ コンフィギュレーション モードに戻します。 |
ステップ 8 |
exit
RP/0/RSP0/CPU0:router(config-pmap)# exit |
ルータをグローバル コンフィギュレーション モードに戻します。 |
ステップ 9 |
interface type interface-path-id
RP/0/RSP0/CPU0:router(config)# interface TenGigE 0/2/0/0 |
コンフィギュレーション モードを開始し、インターフェイスを設定します。 |
ステップ 10 |
service-policy { input | output } policy-map
RP/0/RSP0/CPU0:router(config-if)# service-policy output policy1 |
インターフェイスのサービス ポリシーとして使用する入力インターフェイスまたは出力インターフェイスにポリシー マップを付加します。 • この例では、トラフィック ポリシーでそのインターフェイスから送信されるすべてのトラフィックを評価します。 |
ステップ 11 |
end または commit
RP/0/RSP0/CPU0:router(config-cmap)# end または RP/0/RSP0/CPU0:router(config-cmap)# commit |
設定変更を保存します。 • end コマンドを実行すると、変更をコミットするように要求されます。
Uncommitted changes found, commit them before exiting(yes/no/cancel)?
[cancel]:
– yes と入力すると、実行コンフィギュレーション ファイルに変更が保存され、コンフィギュレーション セッションが終了して、ルータが EXEC モードに戻ります。 – no と入力すると、コンフィギュレーション セッションが終了して、ルータが EXEC モードに戻ります。変更はコミットされません。 – cancel と入力すると、現在のコンフィギュレーション セッションが継続します。コンフィギュレーション セッションは終了せず、設定変更もコミットされません。 • 実行コンフィギュレーション ファイルに変更を保存し、コンフィギュレーション セッションを継続するには、 commit コマンドを使用します。 |
重み付けランダム早期検出の設定
WRED は、指定した基準(CoS、DSCP、EXP、廃棄クラス、優先順位など)に基づいてパケットを選択的にドロップします。WRED は、これらの一致基準を使用して、異なるタイプのトラフィックの処理方法を決定します。
random-detect コマンドと異なる CoS、DSCP、EXP、および廃棄クラスの値を使用して、WRED を設定します。値には、そのフィールドにおいて有効な値の範囲またはリストを指定できます。また、最小キューしきい値および最大キューしきい値を使用して、ドロップするポイントを決定できます。
パケットが着信すると、次の処理が行われます。
• キュー サイズが最小キューしきい値よりも小さい場合、着信パケットはキューイングされます。
• キュー サイズがそのトラフィック タイプの最小キューしきい値と、インターフェイスの最大しきい値の間の場合、そのトラフィック タイプのパケット ドロップ確率に応じて、パケットはドロップされるか、キューイングされます。
• キュー サイズが最大しきい値を超える場合、パケットはドロップされます。
制限事項
random-detect dscp コマンドを設定する場合は、 shape average 、 bandwidth 、および bandwidth remaining のいずれかのコマンドを設定する必要があります。
クラスごとに 2 つの最小しきい値および最大しきい値(それぞれ異なる一致基準)のみを設定できます。
手順の概要
1. configure
2. policy-map policy-name
3. class class-name
4. random-detect dscp dscp-value min-threshold [ units ] max-threshold [ units ]
5. bandwidth { bandwidth [ units ] | percent value }
または
bandwidth remaining [ percent value | ratio ratio-value ]
6. shape average { percent | value [ units ]}
7. queue-limit value [ units ]
8. exit
9. interface type interface-path-id
10. service-policy { input | output } policy-map
11. end
または
commit
手順の詳細
|
|
|
ステップ 1 |
configure
RP/0/RSP0/CPU0:router# configure |
グローバル コンフィギュレーション モードを開始します。 |
ステップ 2 |
policy-map policy-name
RP/0/RSP0/CPU0:router(config)# policy-map policy1 |
ポリシー マップ コンフィギュレーション モードを開始します。 • 1 つ以上のインターフェイスに付加できるポリシー マップを作成または変更し、サービス ポリシーを指定します。 |
ステップ 3 |
class class-name
RP/0/RSP0/CPU0:router(config-pmap)# class class1 |
ポリシー マップ クラス コンフィギュレーション モードを開始します。 • ポリシーを作成または変更するクラスの名前を指定します。 |
ステップ 4 |
random-detect dscp dscp-value min-threshold [ units ] max-threshold [ units ]
RP/0/RSP0/CPU0:router(config-pmap-c)# random-detect dscp af11 1000000 bytes 2000000 bytes |
DSCP 値の最小および最大パケットしきい値を変更します。 • WRED をイネーブルにします。 • dscp-value :DSCP 値を設定する 0~63 の数。数値の代わりに、予約済みキーワードも指定できます。 • min-threshold :指定した単位の最小しきい値。平均キューの長さが最小しきい値に達すると、WRED では、指定された DSCP の値で一部のパケットがランダムにドロップされます。 • max-threshold :指定した単位の最大しきい値。キューの平均の長さが最大しきい値を超えると、WRED は指定した DSCP 値のすべてのパケットをドロップします。 • units :しきい値の単位。これには、 bytes 、 gbytes 、 kbytes 、 mbytes 、 ms (ミリ秒)、 packets 、または us (マイクロ秒)を指定できます。デフォルトは packets です。 • 次に、DSCP AF11 のパケットで、WRED の最小しきい値が 1,000,000 バイト、最大しきい値が 2,000,000 バイトの場合の例を示します。 |
ステップ 5 |
bandwidth { bandwidth [ units ] | percent value } または bandwidth remaining [ percent value | ratio ratio-value]
RP/0/RSP0/CPU0:router(config-pmap-c)# bandwidth percent 30 または RP/0/RSP0/CPU0:router(config-pmap-c)# bandwidth remaining percent 20 |
(任意)ポリシー マップに属しているクラスに割り当てる帯域幅を指定します。 または (任意)さまざまなクラスに残りの帯域幅を割り当てる方法を指定します。 (注) 非デフォルト クラスには、これらの設定のいずれかが必要です。 |
ステップ 6 |
shape average
{
percent
percentage |
value [
units ]}
RP/0/RSP0/CPU0:router(config-pmap-c)# shape average percent 50 |
(任意)指定されたビット レートまたは使用可能な帯域幅のパーセンテージに従い、トラフィックをシェーピングします。 |
ステップ 7 |
queue-limit value [ units ]
RP/0/RSP0/CPU0:router(config-pmap-c)# queue-limit 50 ms |
(任意)キュー制限を変更して、各キューで使用可能なバッファ量を微調整します。デフォルトのキュー制限は、指定されたキュー クラスのサービス レートの 100 ms です。 |
ステップ 8 |
exit
RP/0/RSP0/CPU0:router(config-pmap)# exit |
ルータをグローバル コンフィギュレーション モードに戻します。 |
ステップ 9 |
interface type inteface-path-id
RP/0/RSP0/CPU0:router(config)# interface gigabitethernet 0/2/0/0 |
コンフィギュレーション モードを開始し、インターフェイスを設定します。 |
ステップ 10 |
service-policy { input | output } policy-map
RP/0/RSP0/CPU0:router(config-if)# service-policy output policy1 |
インターフェイスのサービス ポリシーとして使用する入力インターフェイスまたは出力インターフェイスにポリシー マップを付加します。 • この例では、トラフィック ポリシーでそのインターフェイスから送信されるすべてのトラフィックを評価します。 • |
ステップ 11 |
end または commit
RP/0/RSP0/CPU0:router(config-cmap)# end または RP/0/RSP0/CPU0:router(config-cmap)# commit |
設定変更を保存します。 • end コマンドを実行すると、変更をコミットするように要求されます。
Uncommitted changes found, commit them before exiting(yes/no/cancel)?
[cancel]:
– yes と入力すると、実行コンフィギュレーション ファイルに変更が保存され、コンフィギュレーション セッションが終了して、ルータが EXEC モードに戻ります。 – no と入力すると、コンフィギュレーション セッションが終了して、ルータが EXEC モードに戻ります。変更はコミットされません。 – cancel と入力すると、現在のコンフィギュレーション セッションが継続します。コンフィギュレーション セッションは終了せず、設定変更もコミットされません。 • 実行コンフィギュレーション ファイルに変更を保存し、コンフィギュレーション セッションを継続するには、 commit コマンドを使用します。 |
テール ドロップの設定
クラスの一致基準を満たすパケットは、サービスを提供されるまで、クラス用に予約されたキューに蓄積されます。 queue-limit コマンドを使用して、クラスの最大しきい値を定義します。最大しきい値に達したとき、クラス キューへの待機パケットはテール ドロップ(パケット ドロップ)します。
queue-limit の値には、 queue_bandwidth の基準値として、キューの保証サービス レート(GSR)が使用されます。クラスに帯域幅の割合が関連付けられている場合、 queue-limit は、そのクラス用に予約された帯域幅の割合に設定されます。
キューの GSR がゼロの場合は、次を使用してデフォルトの queue-limit を計算します。
• 非階層型ポリシー内のキューのインターフェイス帯域幅の 1%。
• 階層型ポリシー内のキューの最小の親シェーピング レートおよびインターフェイス レートの 1%。
(注) デフォルトの queue-limit は、キューの帯域幅の 100 ms のバイトに設定されます。デフォルトのキュー制限(バイト単位)の計算には、次の式が使用されます。
bytes = (100 ms / 1000 ms) × queue_bandwidth kbps)) / 8
制限事項
• queue-limit コマンドを設定する場合は、 priority 、 shape average 、 bandwidth 、または bandwidth remaining のいずれかのコマンドを設定する必要があります。
手順の概要
1. configure
2. policy-map policy-name
3. class class-name
4. queue-limit value [ units ]
5. class class-name
6. bandwidth { bandwidth [ units ] | percent value }
または
bandwidth remaining [ percent value | ratio ratio-value ]
7. exit
8. exit
9. interface type interface-path-id
10. service-policy { input | output } policy-map
11. end
または
commit
手順の詳細
|
|
|
ステップ 1 |
configure
RP/0/RSP0/CPU0:router# configure |
グローバル コンフィギュレーション モードを開始します。 |
ステップ 2 |
policy-map policy-name
RP/0/RSP0/CPU0:router(config)# policy-map policy1 |
ポリシー マップ コンフィギュレーション モードを開始します。 • 1 つ以上のインターフェイスに付加できるポリシー マップを作成または変更し、サービス ポリシーを指定します。 |
ステップ 3 |
class class-name
RP/0/RSP0/CPU0:router(config-pmap)# class class1 |
ポリシー マップ クラス コンフィギュレーション モードを開始します。 • ポリシーを作成または変更するクラスの名前を指定します。 |
ステップ 4 |
queue-limit value [ units ]
RP/0/RSP0/CPU0:router(config-pmap-c)# queue-limit 1000000 bytes |
ポリシー マップに設定したクラス ポリシー用にキューが保持できる最大値を指定または変更します。 units 引数のデフォルト値は packets です。 • この例では、キュー制限が 1,000,000 バイトに到達すると、このクラス キューへの待機パケットはドロップされます。 |
ステップ 5 |
class class-name
RP/0/RSP0/CPU0:router(config-pmap)# class class2 |
ポリシーを作成または変更するクラスの名前を指定します。 • この例では、class2 が設定されます。 |
ステップ 6 |
bandwidth { bandwidth [ units ] | percent value }
RP/0/RSP0/CPU0:router(config-pmap-c)# bandwidth percent 30 |
(任意)ポリシー マップに属しているクラスに割り当てる帯域幅を指定します。 • この例では、クラス class2 へのインターフェイス帯域幅の 30% が保証されます。 |
ステップ 7 |
exit
RP/0/RSP0/CPU0:router(config-pmap-c)# exit |
ルータをポリシー マップ コンフィギュレーション モードに戻します。 |
ステップ 8 |
exit
RP/0/RSP0/CPU0:router(config-pmap)# exit |
ルータをグローバル コンフィギュレーション モードに戻します。 |
ステップ 9 |
interface type interface-path-id
RP/0/RSP0/CPU0:router(config)# interface pos 0/2/0/0 |
コンフィギュレーション モードを開始し、インターフェイスを設定します。 |
ステップ 10 |
service-policy { input | output } policy-map
RP/0/RSP0/CPU0:router(config-if)# service-policy output policy1 |
インターフェイスのサービス ポリシーとして使用する入力インターフェイスまたは出力インターフェイスにポリシー マップを付加します。 • この例では、トラフィック ポリシーでそのインターフェイスから送信されるすべてのトラフィックを評価します。 |
ステップ 11 |
end または commit
RP/0/RSP0/CPU0:router(config-cmap)# end または RP/0/RSP0/CPU0:router(config-cmap)# commit |
設定変更を保存します。 • end コマンドを実行すると、変更をコミットするように要求されます。
Uncommitted changes found, commit them before exiting(yes/no/cancel)?
[cancel]:
– yes と入力すると、実行コンフィギュレーション ファイルに変更が保存され、コンフィギュレーション セッションが終了して、ルータが EXEC モードに戻ります。 – no と入力すると、コンフィギュレーション セッションが終了して、ルータが EXEC モードに戻ります。変更はコミットされません。 – cancel と入力すると、現在のコンフィギュレーション セッションが継続します。コンフィギュレーション セッションは終了せず、設定変更もコミットされません。 • 実行コンフィギュレーション ファイルに変更を保存し、コンフィギュレーション セッションを継続するには、 commit コマンドを使用します。 |