◆ キューイング & スケジューリング - 全体イメージ図
分類→ポリシング&マーキングの終了後、パケットはQoSラベルに基づいて各キューに格納されます。
◆ キューイング & スケジューリング - 輻輳回避メカニズム(WTD)
入力キューと出力キューでは「 WTD 」と呼ばれるテールドロップの輻輳回避メカニズムの拡張バージョン
を使用します。このメカニズムは、ルータの輻輳回避メカニズムで使用している「 WRED 」に似ています。
フレームが特定のキューにキューイングされると、WTDはフレームに割り当てられたQoSラベルを使用して
QoSラベル値に応じた異なるしきい値を適用します。なお、このしきい値を超えたフレームは廃棄されます。
下図は、例えばサイズが「1000フレーム」であるキューでのWTDの動作例です。CoS値が0〜3までの値は
40%のしきい値、CoS値が4と5の値は60%のしきい値、CoS値が6と7の値は100%のしきい値を割り当てる
とします。その場合、CoS値0〜3のフレームは400フレームまで、CoS値4と5のフレームは600フレームまで
CoS値6と7のフレームは1000フレームまでキューイングできることを意味します。
そして、キューに400個のフレームが格納されている時に新しいフレームが着信すると、フレームのCoS値が
0〜3である時は廃棄されます。それ以外のCoS値である時はそれぞれのしきい値まではキューイングされます。
100%を割り当てた廃棄しきい値のことを「キューフルステート」と言います。そもそも、WTDの輻輳回避の
実装方式より、パケットの優先度(QoSラベル)に応じて複数のキューに分散して格納させることが大切です。
各キューには3つの廃棄しきい値があります。そのうち2つは設定変更可能で、もう1つは変更不可能でありキューフルステート。
CCOでも紹介されている上図は前提がnot good。なぜなら1つのキューにCoS値0〜7までを格納させる実装は不適切だからです。
◆ キューイング & スケジューリング - スケジューリング(SRR)
入力と出力の両方のキューはSRR(Shape Round Robin)により送信レートが決定され処理してきます。
出力キューでは、SRRを共有モードまたはシェーピングモードに実装することができますが、入力キュー
では共有モードしか実装することは出来ません。以下は、共有モードとシェーピングモードの特徴です。
スケジューリングの実装 |
シェーピングモード |
出力キューの帯域幅が保障されて、この値にレートが制限される。シェーピングされた
トラフィックの場合はリンクがアイドルの場合も割り当てを超える帯域幅は使用されない。
シェーピングにより時間あたりのトラフィックフローが均一になり、バーストトラフィック
の最高時と最低時を削減する。各重みの絶対値を使用してキューの帯域幅が計算される。
|
共有モード |
各キューは設定された重みに従って帯域幅を共有する。帯域幅はこのレベルが保証
されるがこのレベルに限定されない。例えば、特定のキューが空でありリンクを共有
する必要がない場合、残りのキューは未使用の帯域幅を使用して共有できる。共有
モードの場合、キューからパケットを取り出す頻度は重みの比率に従い制御される。
|
入力キューでは、「 mls qos srr-queue input buffer 」コマンドにより、2つのキュー間の入力バッファを
分割する比率を定義することができます。また「 mls qos srr-queue input bandwidth 」コマンドにより
帯域幅割合を指定することが出来て、この重みの比率によりSRRスケジューラーが各インプットキューから
パケットを送信していきます。また、入力キューでは「 キュー2 」がプライオリティキューとなっており、
デフォルトで有効です。このプライオリティキューは「帯域幅10%」をデフォルトで割り当てられているが
mls qos srr-queue input priority-queue queue-id bandwidth weight によって変更することが可能です。
出力キューには4つのキューがあり、出力キューでは「 キュー1 」をプライオリティキューにできます。
デフォルトではプライオリティキューは発動していないので、発動させるには「prioirty-queue out」の
設定が必要です。これらの4つのキューは「キューセット」に割り当てられています。デフォルトで全ての
物理ポートはキューセット1にマッピングされています。
下図では出力キューのバッファを示していますが、出力キューの場合、バッファースペースは共通プール
と専用プールから構成されます。出力キュー毎に最小バッファスペースを確保している為、いずれかの
キューの使用率が異常に高まっても、他のキューのバッファが不足することはなくなります。
Catalysスイッチではバッファの空き状況を常に確認しておりキューが限度を越えてない場合、専用プール
または共通プールからバッファスペースを割り当てます。出力キューのバッファの割り当てについては、
mls qos queue-set output qset-id buffers コマンドにより変更することができます。
|