|
WFQとは
このキューイングは、送信元から宛先までのアプリケーション間で発生するトラフィックフローを動的に
検出して、フローごとに個別のキュー(サブキュー)を自動管理するキューイング方式です。PQやCQでは
管理者が手動でリスト ( priority-list 1,
custom-queue-list 1 ) などを作成していましたが、WFQでは
自動でキューが作成されます。また、パケットの優先度は
Precedence 値により決めることができます。
ところで、「送信元から宛先までのアプリケーション間のトラフィックフロー」とは、何のことでしょうか?
例えば、「192.168.0.1/24 port : 2345」 から 「192.168.1.1/24
port:23」 のサーバにtelnetするとします。
そうすると、これで1つのトラフィックフローとして動的に検出して「輻輳時に」1つのキューを作成します。
つまり、「 192.168.0.2/24 port:3456 」
から 「 192.168.1.1/24 port:23 」 までtelnet接続するトラフィックを
ルータが検出すれば、これで別の1つのトラフィックフローとして「輻輳時に」1つのキューを作成します。
つまり、WFQは送信元から宛先へのIPアドレス、ポート番号をみてキューに振り分けています。また、
WFQではパケットの優先度としてIPパケットのToSフィールドにあるPrecedenceの値を採用しています。
WFQの種類
WFQ には、Flow-Based WFQ, Distributed WFQ,
Class-based WFQ, Distributed Class-Based
WFQ
の4種類があります。今回は WFQ の基本となる
Flow-Based WFQ について解説させて頂きます。
Flow-Based WFQ は自動でキューの管理、リスト作成してくれるのは管理が楽で良い所でありますが
裏を返せば、管理者が手動でキューを作成するなどカスタマイズができないので欠点でもあります。
この問題点を解消するためにClass-Based WFQが開発されて、今では主流のキューイング方式です。
WFQのコンフィグ
アプリケーション間で発生するトラフィックのフローを動的に検出して、フローごとに個別のキューを
自動管理してくれるので、設定としてはインターフェースに以下のコマンドを一行入力するだけです。
Cisco(config-if)# fair-queue [discard-threshold ] [dynamic-queues [reserval-queue ]
|
I/Fの速度が2048bps以下のI/Fでは、例えばSerial I/Fではデフォルトで有効なっていることから
コマンドの入力も不要です。設定が有効かどうかは
show interface にて確認することができます。
Queing Strategy : weighted fair
オプション設定の[ discard-threshold ]の値には1つのキューに保持できるパケット数を定義します。
この値のデフォルトを [ 64 ] です。つまり、輻輳時に1つのキューに64以上のパケットが格納された
場合、以降のパケットは廃棄されることになります。次の
[ dynamic-queues ] の値には、I/Fの持つ
ことができる動的キューの最大数です。デフォルトは256。つまり、256のトラフィックフローのための
キューを持てます。最後の [ reserval-queue
] は予約されたトラフィックフローのために使用される
キューです。デフォルトは0です。この予約キューは、例えばRSVP用に予約するトラフィックフローの
数を定義するために使用する設定です。実際には、これらのoption設定は特別な理由がない限り
変更する必要はなく [ fair-queue ] と入力するだけでOK。つまり [ fair-queue 64 256 0 ] と同じ結果。
| Queue or Threshold |
Default |
|
Congestive discard threshold
|
64 messages
|
|
Dynamic queues
|
256 queues ( 帯域幅が256K以上)
64 queues ( 帯域幅が64K以下)
|
|
Reservable queues
|
0 queues |
FQ ( Fair Queuing ) の動作
WFQは、重み付け ( Weighted = Precedence
) のあるFQということなので、Precendenceの理解と
FQの動作が分かればWFQ動作を理解できるので、FQ
( Fair Queing ) の動作について説明します。
FQ は、輻輳時にインターフェース上で全てのキューから等しいレート
( 同じ帯域幅 ) で排出します。
下図で4つのキューがありますが、これら4つのキューにバッファされているデータ量に関係なく均等に
帯域幅が割り振られることになるので、例えば、PC
AからBへ大量のFTPデータが伝送されたとしても
Serial 0/0 インターフェースの帯域幅を独占することはありません。PC
A からBへ1Gbyteのデータを
伝送する場合でも下図のキュー2だけにおいて64パケット以上のパケットが廃棄されていくだけです。
つまり、キュー1、3、4は独立しており、これらのキューはパケットの排出に苦しむことはありません。

ところで、キュー2のFTPパケット1と、キュー4の音声パケット1とでは当然パケットのサイズが異なります。
FQはI/Fで利用できる帯域幅を均等に各キューに割当てるので、キュー2の1つのFTPパケットが1000byte、
キュー4の1つの音声パケットが300byteの場合、キュー2のFTPパケット1つが排出される前に、キュー4の
音声パケット3つが排出されることになります。またキュー1〜4でどのキューのパケットから排出するかは
そのキューの中にバッファされているパケットのサイズで決まります。一番小さいサイズのパケットを持つ
キューから排出されることになるので、上図で言えば、キュー4からパケットが排出されることになります。
注意して頂きたいのは、絶対優先ではないので
キュー4のパケットを全て送出してから、キュー2やキュー3に
移行していくわけではないです。キュー4にパケットCまだ残っていますよね。PQ、LLQ、IP
RTP Priorityなど
の輻輳制御を実装している場合は、キュー4を空にしてから次のキューのパケットの転送ということになります。

※ WFQのステータスは、sh int, show queue
, show queue priority コマンドにより確認することができます。Weighted Fari Queueing
WFQ のキューのウェイト
WFQは着信するIPパケットのIP Precedenceの値に基づき、キューのウェイトを変更することができます。
WFQでのキューのウェイトの計算式は以下の通りですが、バージョンにより計算式の分子が異なります。
| WFQのWeight計算式 |
| IOSバージョン ( 12.0(4)T以下 ) |
キューのウェイト = 4096 ÷ ( Precedence値 + 1 ) |
| IOSバージョン ( 12.0(5)T以上 ) |
キューのウェイト = 32768 ÷ ( Precedence値
+ 1 ) |
例えば、IP Precedence=0のパケットが格納されるキューのウェイトは、IOS12.0(5)以上の場合 「32768」、
IP Precedence=1のパケットが格納されるキューのウェイトは「16384」となり、IP
Precedecen=1のパケット
が格納されるキューは、IP Precedence=-0に比べて、毎秒約2倍のバイトをI/Fから送出することなります。
Resource : QoS 書籍一覧 Cisco QoS書籍一覧 Cisco QoS Command Guide 12.4 Cisco QoS Configuration Guide 12.4
|