以下、実施の形態を図面を参照して説明する。図1はパケット処理装置の原理図である。パケット処理装置は、インターネット通信に用いられるコアルータやエッジルータ等に用いられ、可変長パケットの廃棄処理を行って、ネットワークトラフィックの輻輳回避の制御を行う装置である。
廃棄確率算定部11は、最大廃棄確率と平均キュー長より、廃棄確率を監視サイクルと廃棄サイクルで定義する近似廃棄確率テーブルを管理する。監視サイクル回数算出部12は、到着したパケットのパケットサイクルを検出し、パケットサイクルに監視サイクル保持値を加算した加算値を監視サイクルで除算して、累積パケットサイクルに含まれる監視サイクルの回数を算出する。
廃棄数乗算部13は、監視サイクルの回数と廃棄サイクルを乗算して廃棄数を算出する。廃棄判定比較部14は、廃棄数と、廃棄サイクル保持値算出部15から送信された廃棄サイクル保持値と、を比較して廃棄判定を行い、廃棄数が廃棄サイクル保持値と等しい、または廃棄数が廃棄サイクル保持値より大きい場合は、到着したパケットを廃棄実行と設定する。
廃棄サイクル保持値算出部15は、廃棄が発生してから次の廃棄が発生するまでの、廃棄確率を満たすサイクル区間を求めるために、廃棄判定結果にもとづいて、前回処理時の廃棄サイクル保持値から廃棄数を減算した値である廃棄サイクル保持値を繰り返し算出し、算出した廃棄サイクル保持値を廃棄判定比較部14へ送信する。パケット廃棄処理部16は、パケットを格納するキューを含み、パケットの廃棄実行が設定されたときには、キューに入力する前のパケットの廃棄を行う。
次に詳細を説明する前に、用語の定義も含めて、REDのキュー管理アルゴリズムについて説明する。REDは、パケットを滞留させるFIFO(first in first out)キューが一杯にならないように制御して、ネットワークの輻輳を回避するアルゴリズムのことである。
REDでは、キューの平均的な長さ(平均キュー長:パケットが格納されるキューの占有状態の平均値)を連続的に計算し、それを2つのしきい値(最小しきい値及び最大しきい値)と比較することで、キューに到着する到着パケットの廃棄を決定する。
平均キュー長Qavは、キューが空でないとき、現在のキュー長をQとすると以下の式(1)で定義される。ただし、wは重み係数である。
ここで、キューに格納されたパケットは、読み出し制御部によって順次読み出されていくので、一旦キューに書き込まれたパケットの廃棄は行わない
。パケット廃棄とは、キューに書き込まれる前の到着パケット(キューへの入力パケット)を廃棄することを意味する。
図2〜図4はREDのパケット廃棄の概念図である。キュー20にパケットが格納されている状態で、図2のように、平均キュー長Qavが、最小しきい値minTHを下回っている場合には、キュー20の格納領域には十分な余裕があるとみなして、到着順にパケットをキューに収容し、パケット廃棄は生じない。
また、図3のように、平均キュー長Qavが最大しきい値maxTHを上回る場合には、キュー20が溢れる可能性があるとして、キュー20に新しく到着するすべてのパケットを廃棄する。このとき、キュー20内の先頭パケットが、最大しきい値maxTH以内に収まるまで(読み出し制御部からキュー20内のパケットは順次読み出されているので、キュー20に入力するパケットがなければ、平均キュー長Qavが最大しきい値maxTHより下回るときがいずれくる)、全廃棄が実行され続けることになる(到着パケットの全廃棄はtail dropとも呼ばれている)。
さらに、図4のように、平均キュー長Qavが最小しきい値minTHと最大しきい値maxTHの間にある場合には、ユーザが設定可能な廃棄確率にもとづいて、到着パケットの内、ランダムにパケットを選択し、選択したパケットを廃棄する。
図5はREDの廃棄確率曲線を示す図である。縦軸は廃棄確率(%)、横軸は平均キュー長Qavである。廃棄確率曲線K0は、平均キュー長Qavの伸張度合いに応じた到着パケットの廃棄確率を表している。
平均キュー長Qavが最小しきい値minTH以下の場合は、パケット廃棄確率は0%であり(パケットは廃棄されない)、平均キュー長Qavが最大しきい値maxTH以上の場合は、到着パケットの廃棄確率は100%となる(すべての到着パケットが廃棄される)。
また、平均キュー長Qavが、最小しきい値minTHと最大しきい値maxTHの間にある場合には、図に示すようなユーザ設定可能な廃棄曲線の傾きにもとづき、廃棄確率が決定する(廃棄確率k1とする)。ここで、廃棄確率が10%の廃棄を行うとは、到着パケットの10%が廃棄されるということである(キューに対するパケット書き込み処理に対して、例えば、100個の到着パケットの内の10個のパケット書き込みを行わないということ(パケットを固定長とした場合))。
なお、図中の最大廃棄確率maxPは、最小しきい値minTHと最大しきい値maxTHとの間の廃棄確率k1の傾きを決める値であって、キューが最大しきい値maxTHまで伸張したときに、最大何%廃棄するかを示すものである(ここを超えると全廃棄となる)。
ハードウェアのみで処理可能となるように、図5で示した廃棄確率曲線K0からパケットの実質廃棄数を決める近似的な廃棄確率テーブルを生成し、この近似廃棄確率テーブルにもとづいて、ソフトウェア処理を介さずに、高速に効率よくパケット廃棄を実行して、ネットワークトラフィックの輻輳制御を行うものである。
次に廃棄確率曲線K0から近似廃棄確率テーブルを生成するまでの過程及び近似廃棄確率テーブルの具体例について説明する。図6、図7は定率によって廃棄を実現するための廃棄確率を示す図である。グラフG1、G2の縦軸は定率の廃棄確率(%)、横軸は平均キュー長Qavである。グラフG1、G2は、廃棄確率曲線K0の廃棄確率k1を近似したものであり、グラフG1が最大廃棄確率maxPを10%としたとき、グラフG2が最大廃棄確率maxPを5%としたときの波形の一例を示している。
横軸に対しては、最小しきい値minTHと最大しきい値maxTHの間の平均キュー長Qavを16等分して、これをステップ数s1〜s9の8区間に分割し、縦軸に対しては、最大廃棄確率maxPを8等分する。このような操作によって、8つの階段波形の定率の廃棄確率k2をつくって本来の廃棄確率k1を近似している。
なお、分割数は回路設計上、2進数にもとづいて決めることになる。この例の場合は8つの階段波形で廃棄確率k1を近似したが、例えば、横軸を32等分して16区間に分割し、縦軸を16等分することで、16個の階段波形でさらに細かく廃棄確率k1を近似してもよい。
図の見方について説明すると、あるステップ数sの区間内に平均キュー長Qavがある場合のパケット廃棄は、その区間に対応した、一定の割合(定率)でパケット廃棄が行われることになる。例えば、平均キュー長Qavがステップ数s4〜s5の区間にある場合は、最大廃棄確率maxPの4/8の割合(=maxP×(4/8))でパケットが廃棄されることとなる。
また、理想の廃棄確率k1と、近似した階段状の廃棄確率k2との誤差は、最大廃棄確率maxPの1/16となり、これは仕様上において誤差の許容範囲(最大廃棄確率maxPの±10%)内に収まるものである。
図8は近似廃棄確率テーブルを示す図である。近似廃棄確率テーブルT1は、図6、図7に示したグラフをテーブル化したもので、平均キュー長Qavと最大廃棄確率maxPによって定まる実質のパケット廃棄数(パケットの廃棄サイクル数)を表している。テーブル項目としては、最大廃棄確率maxP(この例では0〜10%までを1%単位で設定可能とする。図では1%〜10%の設定欄を設けている)、maxPに対する割合、ステップ数と平均キュー長Qavの関係から構成され、テーブルT1中の整数値は、廃棄サイクル数を示している(図8の例では1監視サイクル=800サイクルとした)。
ここで、パケットの廃棄を行う場合、可変長パケットを扱うので、可変長パケットのパケット長をサイクル(1サイクルは例えば16バイト)に換算し、廃棄確率(%)を(廃棄サイクル÷監視サイクル)×100と定義して、サイクル単位での廃棄を行うものとする。したがって、廃棄サイクルは、廃棄確率の分子であり、監視サイクル(監視周期と同じ意味を持つ)は、廃棄確率の分母と定義できる。例えば、監視サイクルが80サイクルのときの廃棄確率5%とは、(4サイクル/80サイクル)×100と計算できるので、このときの廃棄サイクルは4サイクルとなる。
テーブルT1の見方について説明する。最大廃棄確率maxPは、1%〜10%の欄があり、1%〜10%のすべての最大廃棄確率maxPに対して、平均キュー長Qavがステップ数s1より小さければ(Qav≦s1(=minTH))、パケット廃棄は生じず、全通過となる(到着パケットはすべてキューに書き込まれる)。
また、1%〜10%のすべての最大廃棄確率maxPに対して、平均キュー長Qavがステップ数s9より大きければ(s9(=maxTH)<Qav)、到着パケットは全廃棄となる。
ここで、最大廃棄確率maxPを10%とした場合を見ると、平均キュー長Qavがステップ数s8とステップ数s9の間にあったならば(s8<Qav≦s9)、廃棄確率10%の廃棄を行うので、廃棄サイクル数でこれを見ると、800サイクル中80サイクルの割合で廃棄が行われることになる((80/800)×100=10%)。
また、平均キュー長Qavは、ステップ数s1からステップ数s9まで8区分されるので、平均キュー長Qavがステップ数s1とステップ数s2の間にあったならば(s1<Qav≦s2)、廃棄サイクル数は10(=80×(1/8))となる。すなわち、s1<Qav≦s2のときはmaxPに対する割合が12.5%なので、80サイクルを100としたときの12.5%に該当する10サイクルの割合で廃棄が行われる。
同様に、s2<Qav≦s3の廃棄サイクル数は20(=80×(2/8))であり(80サイクルを100としたときの25.0%に該当する20サイクルの割合で廃棄が行われる)、…、s7<Qav≦s8の廃棄サイクル数は70(=80×(7/8))となる。
さらに、最大廃棄確率maxPを7%と設定した場合を見ると、平均キュー長Qavがステップ数s8とステップ数s9の間にあったならば(s8<Qav≦s9)、廃棄確率7%の廃棄を行うので、廃棄サイクル数でこれを見ると、800サイクル中56サイクルの割合で廃棄が行われることになる((56/800)×100=7%)。
また、平均キュー長Qavがステップ数s1とステップ数s2の間にあったならば(s1<Qav≦s2)、廃棄サイクル数は7(=56×(1/8))となる。すなわち、s1<Qav≦s2のときはmaxPに対する割合が12.5%なので、56サイクルを100としたときの12.5%に該当する7サイクルの割合で廃棄が行われる。
同様に、s2<Qav≦s3の廃棄サイクル数は14(=56×(2/8))であり(56サイクルを100としたときの25.0%に該当する14サイクルの割合で廃棄が行われる)、…、s7<Qav≦s8の廃棄サイクル数は49(=56×(7/8))となる。その他についても同じ考え方で廃棄サイクル数が求まる。
図9は近似廃棄確率テーブルを示す図である。図8で示した近似廃棄確率テーブルT1は、最大廃棄確率maxPの1%〜10%に対して、監視サイクルを800サイクルと固定して、最大廃棄確率maxP毎に廃棄サイクルを可変としたが、図9の近似廃棄確率テーブルT2では、最大廃棄確率maxPの1%〜10%に対して、廃棄サイクルの方を固定し、最大廃棄確率maxP毎に監視サイクルを可変とした場合のテーブルである。
テーブルT2の見方について説明する。1%〜10%のすべての最大廃棄確率maxPに対して、平均キュー長Qavがステップ数s1より小さければ(Qav≦s1(=minTH))、パケット廃棄は生じず、全通過となる。
また、1%〜10%のすべての最大廃棄確率maxPに対して、平均キュー長Qavがステップ数s9より大きければ(s9(=maxTH)<Qav)、到着パケットは全廃棄となる。
ここで、平均キュー長Qavがs8<Qav≦s9の範囲にある場合の各最大廃棄確率maxPの廃棄サイクルを最初に例えば、8サイクルと決めると、s1<Qav≦s2のときの廃棄サイクルは1サイクル(8×(1/8))、s2<Qav≦s3のときの廃棄サイクルは2サイクル(8×(2/8))、…となって、s1<Qav≦s2、s2<Qav≦s3、…、s8<Qav≦s9に対する各最大廃棄確率maxPの廃棄サイクルが1〜8サイクルと決まる。
そして、最大廃棄確率maxPを10%とした場合を見ると、平均キュー長Qavがステップ数s8とステップ数s9の間にあったならば(s8<Qav≦s9)、求める監視サイクルをXサイクルとすると、Xサイクル中、10%の廃棄確率で廃棄したときに廃棄サイクルが8サイクルとなるには、(8/X)×100=10%を計算して、X=80が求まる。
また、最大廃棄確率maxPを7%とした場合を見ると、平均キュー長Qavがステップ数s8とステップ数s9の間にあったならば(s8<Qav≦s9)、求める監視サイクルをYサイクルとすると、Yサイクル中、7%の廃棄確率で廃棄したときに廃棄サイクルが8サイクルとなるには、(8/Y)×100=7%を計算して、Y=114.28…≒115が求まる(計算結果に端数が出ても監視サイクルを求めているので、小数点以下切り上げにして1サイクル多めに監視すればよい)。その他についても同じ考え方で監視サイクル数が求まる。
上記では、2つの近似廃棄確率テーブルの例について示したが、平均キュー長Qavと最大廃棄確率maxPより、監視サイクル数と廃棄サイクル数を定義する、図9で示した近似廃棄確率テーブルT2を利用して、パケット廃棄処理を行うものとして以降説明する。
次にパケット処理装置10の構成及び動作について説明する。図10、図11はパケット処理装置10の構成を示す図である。パケット処理装置10は、図9で示した近似廃棄確率テーブルT2にしたがって、監視サイクル数と廃棄サイクル数を廃棄確率算定部11から導き出し、定率によるパケット廃棄を行う装置である。
監視サイクル回数算出部12は、パケット長検出部12a、加算部12b、監視サイクル除算部12c、監視サイクル保持値ラッチ部12dから構成される。廃棄サイクル保持値算出部15は、廃棄サイクル保持値減算部15a、廃棄サイクル保持値加減算部15b、セレクタ15c、廃棄サイクル保持値ラッチ部15dから構成される。パケット廃棄処理部16は、位相調整部16a、廃棄処理部16b、パケットバッファ(キューに該当)16c、キュー長監視部16d、読み出し制御部16eから構成される。
以下、各構成ブロックについて説明する。パケット長検出部12aは、到着したパケットに対して、パケット長のサイクル数(パケットサイクル)を検出する。加算部12bは、パケットサイクルの値と前回パケット到着時に演算された監視サイクル保持値とを加算し、加算結果を監視サイクル除算部12cへ送信する。加算部12bにおける演算式は、{パケットサイクル+監視サイクル保持値}である。
監視サイクル除算部12cは、廃棄確率算定部11で選択された監視サイクルを受信し、加算値を監視サイクルで除算して、除算結果の商(監視サイクルの回数に該当)を廃棄数乗算部13へ送信し、除算結果の余り(監視サイクル保持値に該当)を監視サイクル保持値ラッチ部12dへ送信する。監視サイクル除算部12cにおける除算式は、{(パケットサイクル+監視サイクル保持値)/監視サイクル}である。
監視サイクル除算部12cでは、到着パケットのパケットサイクルの内、監視サイクルが何個含まれるかを算出しているので、除算した余りである監視サイクル保持値は、前回の監視サイクルから引き継いだサイクル数を表すことになる。
図12、図13はパケット到着から監視サイクル保持値が求まるまでの動作を説明するための概念図である。なお、以降の説明では、廃棄確率算定部11から、監視サイクルとして80サイクルが設定されたとする。
〔S1〕監視サイクルCyc1に対して、パケットp1が装置に到着すると、パケット長検出部12aは、パケットp1のパケットサイクル=40を検出したとする。また、監視サイクル保持値を初期値の0とする。加算部12bは、パケットp1のパケットサイクル(40)と監視サイクル保持値(0)とを加算して、加算値40(=40+0)を出力する。監視サイクル除算部12cでは、(40+0)/80を計算して、商が0、余り40を算出する。
〔S2〕監視サイクルCyc1に対して、パケットp2が装置に到着し、パケット長検出部12aは、パケットp2のパケットサイクル=20を検出したとする。ステップS1から引き継いだ監視サイクル保持値は40であるので、加算部12bは、パケットp2のパケットサイクル(20)と監視サイクル保持値(40)とを加算して、加算値60(=40+20)を出力する(累積パケットサイクルを計算している)。監視サイクル除算部12cでは、(40+20)/80を計算して、商が0、余り60を算出する。
〔S3〕監視サイクルCyc1に対して、パケットp3が装置に到着し、パケット長検出部12aは、パケットp3のパケットサイクル=30を検出したとする。ステップS2から引き継いだ監視サイクル保持値は60であるので、加算部12bは、パケットp3のパケットサイクル(30)と監視サイクル保持値(60)とを加算して、加算値90(=30+60)を出力する。監視サイクル除算部12cでは、(30+60)/80を計算して、商が1、余り10を算出する。
ここの除算の計算が意味していることは、到着パケットのパケットサイクルの総和(=90)が監視サイクル(=80)を10サイクルだけ超えていることを示している。したがって、次のステップにおいては、監視サイクルは監視サイクルCyc1から、あらたな監視サイクルCyc2へ移り、余りの10サイクルを監視サイクルCyc2で引き継いで、次ステップで用いる監視サイクル保持値とする。
〔S4〕監視サイクルCyc2に対して、パケットp4が装置に到着し、パケット長検出部12aは、パケットp4のパケットサイクル=16を検出したとする。ステップS3から引き継いだ監視サイクル保持値は10であるので、加算部12bは、パケットp4のパケットサイクル(16)と、監視サイクル保持値(10)とを加算して、加算値26(=16+10)を出力する。監視サイクル除算部12cでは、(16+10)/80を計算して、商が0、余り26を算出する。以降、同様な処理が繰り返される。
以下、構成ブロックの説明に戻って、監視サイクル保持値ラッチ部12dは、監視サイクル除算部12cで算出した結果の余りの値を次のパケット到着時までラッチし、パケットが到着したら、保持している監視サイクル保持値を加算部12bへ送信する。ただし、廃棄確率算定部11へ入力する最大廃棄確率maxPを設定する外部信号が、最大廃棄確率maxP=0%と設定された場合、または廃棄確率算定部11から廃棄確率が0%を示す信号がイネーブルになった場合は、保持している値を“0”にセットする。
廃棄数乗算部13は、監視サイクル除算部12cにて算出した結果の商の値と、廃棄確率算定部11で選択された廃棄サイクルとを用いて乗算を行い、廃棄されるべきサイクル数(廃棄数)を算出する。廃棄数乗算部13における乗算式は、{廃棄数=監視サイクル除算部12cにて算出した商の値×廃棄サイクルの設定値}である。
例えば、商の値が1で、廃棄確率算定部11で設定された廃棄サイクルが8サイクルであれば、1つの監視サイクル(80サイクル×1)で廃棄される廃棄数は8サイクルとなる。また、商の値が2で、廃棄サイクルが8サイクルであったならば、2つの監視サイクル(80×2サイクル)で廃棄される廃棄数は16サイクルとなる。
廃棄判定比較部14は、廃棄数乗算部13で演算した結果と、前回パケット到着時に演算した廃棄サイクル保持値との比較を行い、廃棄数乗算部13で求めた結果が廃棄サイクル保持値と等しい(または大きい)場合には、廃棄実行と判断し、セレクト信号SLを例えば、“H”にする。条件判断式は、{廃棄数乗算部13で演算した結果(廃棄数)≧廃棄サイクル保持値→廃棄処理実行}である。
ここで、パケットサイクルの廃棄を行うか否かの廃棄判定条件式が意味することは、前回の処理でパケットサイクルを廃棄した際の廃棄数(この廃棄数が廃棄サイクル保持値に該当する)から、監視サイクル毎に廃棄サイクル数を減算していって、減算結果が“0”(または減算結果が正の値)になることを監視することで、廃棄判定を行っている。廃棄サイクル保持値は、廃棄確率の分子を表しており、この分子に見合う分母になるまで(減算結果が0になるまで)次の廃棄を発生させない。
ここで、廃棄確率10%(監視サイクルが80サイクルで、廃棄サイクルが8サイクル)の条件において、今、500サイクルのパケットが到着して、この500サイクルのパケットを廃棄したときの動作について説明する。
図14は500サイクルのパケットを廃棄したときの動作を説明するための図である。500サイクルのパケットが到着したとき、前回の廃棄サイクル保持値=0とすると、この時点での廃棄サイクル保持値=500となる。その後、500サイクル中に監視サイクルは6回存在するので、廃棄サイクル保持値は452(=500−6×8)となり、廃棄サイクル保持値は、以降80サイクルのパケットデータ毎に、繰り返し8減算される。減算を繰り返して0になるには、452/8=56…4であるので、56×80+60=4540サイクル相当のパケットがその後到着された時点で0となることがわかる。
ここで行っている処理は、500パケットサイクルを廃棄した場合、廃棄確率10%に見合うためには、監視サイクルがいくつ必要かということである。すなわち、廃棄確率の分子が500なので、分母の監視サイクルが何サイクルになれば、廃棄確率が10%になるかということである。
1つの廃棄区間で500パケットサイクルを廃棄した場合、その廃棄区間が廃棄確率10%になるには、その廃棄区間中に存在する監視サイクルは5040サイクルとなる(∵(500/5040)×100≒10%)。したがって、廃棄が発生してから、次の廃棄を行うまでの間隔は(廃棄確率10%で500パケットサイクルを廃棄する廃棄区間は)、廃棄サイクル保持値452から8を繰り返し減算して、500→0になるまでに要する到着パケットのパケットサイクル総数が廃棄区間ということになる。
以下、構成ブロックの説明に戻って、廃棄サイクル保持値ラッチ部15dは、廃棄サイクル保持値をラッチする。廃棄サイクル保持値は、到着したパケットが廃棄判定となる場合と廃棄判定とならない場合とで値が異なる。ただし、廃棄確率算定部11へ入力する最大廃棄確率maxPを設定する外部信号が、最大廃棄確率maxP=0%と設定された場合、または廃棄確率算定部11から廃棄確率が0%を示す信号がイネーブルになった場合は、保持している値を“0”にセットする。
廃棄サイクル保持値減算部15aは、到着したパケットが廃棄判定されなかった場合の次の廃棄サイクル保持値を算出する。演算式は{廃棄サイクル保持値=前回の廃棄サイクル保持値−廃棄数乗算部13で演算した結果(廃棄数)}である。
廃棄サイクル保持値加減算部15bは、到着したパケットが廃棄判定された場合の次の廃棄サイクル保持値を算出部する。演算式は{廃棄サイクル保持値=前回の廃棄サイクル保持値−廃棄数乗算部13で演算した結果(廃棄数)+パケットサイクル}である。
セレクタ15cは、廃棄判定比較部14にて判定した結果(廃棄実行か否か)を示すセレクト信号SLにもとづき、廃棄サイクル保持値ラッチ部15dで保持するデータの選択を行う。廃棄を行わない場合は(セレクト信号“L”)、廃棄サイクル保持値減算部15aからのデータを選択して出力し、廃棄を行う場合は(セレクト信号“H”)、廃棄サイクル保持値加減算部15bからのデータを選択して出力する。
ここで、廃棄サイクル保持値減算部15aと廃棄サイクル保持値加減算部15bとの違いについて説明する。廃棄判定比較部14で廃棄発生と判定されなかった場合は、次の廃棄サイクル保持値は、廃棄サイクル保持値減算部15aによる{廃棄サイクル保持値−廃棄数}の演算式で求められる。このことは、廃棄確率10%で500パケットサイクルの廃棄を行う上記の例で示せば、500→0になるまで8サイクルを繰り返し減算する処理を表している。
また、廃棄判定比較部14で廃棄発生と判定された場合は、次の廃棄サイクル保持値は、廃棄サイクル保持値加減算部15bによる{廃棄サイクル保持値−廃棄数+パケットサイクル}の演算式で求められる。このことは、廃棄確率10%で500パケットサイクルの廃棄を行う上記の例で示せば、5040パケットサイクルは、監視サイクルが63(=5040/80)個目に該当し、このときに廃棄実行と判定されるので、監視サイクル63個目の廃棄サイクル保持値を廃棄サイクル保持値加減算部15bで求めていることになり、そして、あらたな廃棄区間の最初の監視サイクル(64個目の監視サイクル)で、その廃棄サイクル保持値が使用されることになる。
例えば、最初に500パケットサイクルを廃棄したので、500という値から1つの監視サイクル(80サイクル)毎に繰り返し8サイクルを減算していくと、63個目の監視サイクルで、減算した総和が504(=63×8)サイクルとなる。廃棄サイクル保持値減算部15aだけで減算処理をしていくと、廃棄処理実行と判定された63個目の監視サイクルでは、廃棄サイクル保持値はマイナスの値となってしまう(8サイクルずつ減算していって0を通り越したということ)。
したがって、63個目の監視サイクルでは(すなわち、廃棄処理実行と判定された場合では)、このときに到着したパケットのパケットサイクルを(廃棄サイクル保持値−廃棄数)に加算することで、この値を、64個目の監視サイクルから始まる次の廃棄区間の最初の廃棄サイクル保持値とし、63個目の監視サイクル時に到着したパケットまでを、500パケットサイクル廃棄したときの廃棄確率10%の分母の値とするものである(なお、ここで説明した処理の内容については、図15以降でさらに詳しく説明する)。
以下、構成ブロックの説明に戻って、位相調整部16aは、到着したパケットの廃棄判定を監視サイクル回数算出部12〜廃棄サイクル保持値算出部15で行う間の処理遅延分の位相差の吸収を行う(時間調整を行う遅延素子である)。
廃棄処理部16bは、位相調整されたパケットにパケット有効フラグを付加し、パケットが有効であった場合は(廃棄処理未実施)、パケット有効フラグをON(Write要求有り)にし、廃棄処理を行う場合は、パケット有効フラグをOFF(Write要求無し)にして、後段へ出力することでパケットの廃棄処理を行う。
キュー長監視部16dは、パケットバッファ16c内に蓄積されているパケットのサイクル数をUp-Downカウンタを用いて管理し、蓄積量(平均キュー長Qav)を廃棄確率算定部11へ送信する。
Up-Downカウンタの制御としては、パケットに付加されているパケット有効フラグを監視し、フラグON(Write要求有り)の場合には、Up-Downカウンタのカウントアップを行い、フラグOFF(Write要求無し)の場合にはカウントアップを行わない。また、読み出し制御部16eでパケットバッファ16cからのパケットのRead要求があった場合には、そのRead要求のあったサイクル分をUp-Downカウンタからカウントダウンを行い、要求のない場合にはカウントダウンを行わない。カウントアップ/ダウンの条件が競合した場合には、Up-Downカウンタのカウンタ値は保持される。
読み出し制御部16eは、キュー長監視部16dで監視しているパケットバッファ16cの容量を監視し、容量が‘0’でない場合は、Que長≠0として、パケットバッファ16cに対してパケットのRead要求の指示を行う。パケットバッファ16cは、Read要求にもとづいて、パケットデータの読み出しを行い出力する。
廃棄確率算定部11は、近似廃棄確率テーブルT2を管理し、平均キュー長Qav、最大廃棄確率maxP、しきい値(minTH/maxTH)が与えられることで、監視サイクル、廃棄サイクル、廃棄確率0%または100%の設定信号を出力する。
廃棄確率算定部11は、外部より設定される最大廃棄確率maxPにもとづき、図6、図7で示したような定率による廃棄確率から生成される近似廃棄確率テーブルT2によって、ステップ数s1−s9の選択を行い、外部より設定されるminTH/maxTHを8分割した領域に対して、キュー長監視部16dでカウントしているUp-Downカウンタ値がどの領域にあるかの判定を行う。また、廃棄確率0%、100%の検出を行うと共に、監視サイクルと廃棄サイクルの選択を行っている。
ここで、Up-Downカウンタ値がステップ数s1よりも小さな値であった場合、輻輳制御を行うスレッショルドに達していないと判定し、廃棄率0%を設定する。また、Up-Downカウンタ値がステップ数s9(maxTH)よりも大きな値であった場合、到着するパケットの全廃棄(廃棄率100%)の判定を行い、廃棄率100%を設定する。さらに、Up-Downカウンタ値がステップ数s1〜s9間にある場合には、輻輳制御を行うスレッショルドを超えていると判定し、カウンタ値から監視サイクル及び廃棄サイクルの選択を行う。
次に具体的な数値を用いて動作について詳しく説明する。動作例としては、最大廃棄確率maxP=10%で、先頭のパケットが到着したときに、ステップ数s8を超えて(廃棄確率10%)、廃棄処理判定が有効になったものとする。また、到着した複数のパケットに対して、それぞれのパケットサイクルが、16、40、8、94、40、312、48、8、73の順に検出されるものとする。
図15、図16は装置動作を説明するためのテーブルである。動作がわかりやすいように、廃棄判定処理に関わる動作の流れをテーブルにして最初に示しておく。
〔S11〕パケットバッファ16cに蓄積されたパケットデータ量がキュー長監視部16dにて監視され、ステップ数s8〜s9の領域になったとして、パケット長検出部12aは、到着パケットのパケットサイクル=16を検出する。前回処理までの廃棄処理は未実施であるので、監視サイクル保持値ラッチ部12dは初期値の‘0’を保持している。したがって、加算部12bでは、16+0=16を算出する。
一方、廃棄確率算定部11では、キュー長監視部16dで選択された平均キュー長Qavの値(具体的にはUp-Downカウンタのカウント値)より、監視サイクル(=80)を選択する(以降、監視サイクル=80サイクル、廃棄サイクル=8とする)。したがって、監視サイクル除算部12cの演算にて、16/80=0…16(商=0、余り=16)となる。
監視サイクル保持値ラッチ部12dは余りを保持し、監視サイクル保持値=16となる。廃棄数乗算部13では、廃棄確率算定部11で選択された廃棄サイクル(=8)により、商×廃棄サイクル=0×8=0を演算し、廃棄数0を求める。
廃棄判定比較部14では、廃棄サイクル保持値ラッチ部15dの初期値0と廃棄数乗算部13で算出した廃棄数との比較を行う。ここでは廃棄数(0)=初期値(0)なので、廃棄数≧廃棄サイクル保持値を満たすので、到着した16パケットサイクルのパケットを廃棄すると判定する。
廃棄処理実行の判定となった場合は、廃棄サイクル保持値加減算部15bの出力がセレクタ15cで選択される。このとき、廃棄サイクル保持値加減算部15bでは、廃棄サイクル保持値−廃棄数+パケットサイクル=0−0+16=16を算出するので、廃棄サイクル保持値ラッチ部15dには16が保持される。
一方、廃棄判定比較部14で廃棄処理実行と判定されたので、廃棄処理部16bでは、その旨を認識し、位相調整部16aで位相調整されたパケットに付加するパケット有効フラグをOFFにする。そして、キュー長監視部16dは、Up-Downカウンタのカウントアップはせずに、パケットバッファ16cに対するWrite要求は行わず、16パケットサイクルのパケットの書き込みをマスクする。
〔S12〕次に到着したパケットは、パケット長検出部12aでパケットサイクル=40が検出される。加算部12bでの加算結果は、パケットサイクル=40と、監視サイクル保持値ラッチ部12dで保持されている監視サイクル保持値=16とを加算して56となる。
監視サイクル除算部12cは、加算値を監視サイクルで除算して、56/80=0…56(商=0、余り=56)となる。監視サイクル保持値ラッチ部12dは余りを保持し、監視サイクル保持値=56となる。廃棄数乗算部13では、商×廃棄サイクル=0×8=0を演算し、廃棄数0を求める。
廃棄判定比較部14においては、ここでは廃棄数(0)<廃棄サイクル保持値(16)なので、廃棄数≧廃棄サイクル保持値を満たさないので、到着した40パケットサイクルのパケットを廃棄しないと判定する。
廃棄処理しないので、廃棄サイクル保持値減算部15aの出力がセレクタ15cで選択される。このとき、廃棄サイクル保持値減算部15aでは、廃棄サイクル保持値−廃棄数=16−0=16を算出するので、廃棄サイクル保持値ラッチ部15dには16が保持される。
一方、廃棄判定比較部14で廃棄処理はしないと判定されたので、廃棄処理部16bでは、その旨を認識し、位相調整部16aで位相調整されたパケットに付加するパケット有効フラグをONにする。そして、キュー長監視部16dは、Up-Downカウンタのカウントアップを行い、パケットバッファ16cに対するWrite要求を行って、40パケットサイクルのパケットの書き込みを実行する。
〔S13〕次に到着したパケットは、パケット長検出部12aでパケットサイクル=8が検出される。加算部12bでの加算結果は、パケットサイクル=8と、監視サイクル保持値ラッチ部12dで保持されている監視サイクル保持値=56とを加算して64となる。
監視サイクル除算部12cは、加算値を監視サイクルで除算して、64/80=0…64(商=0、余り=64)となる。監視サイクル保持値ラッチ部12dは余りを保持し、監視サイクル保持値=64となる。廃棄数乗算部13では、商×廃棄サイクル=0×8=0を演算し、廃棄数0を求める。
廃棄判定比較部14においては、ここでは廃棄数(0)<廃棄サイクル保持値(16)なので、廃棄数≧廃棄サイクル保持値を満たさないので、到着した8パケットサイクルのパケットを廃棄しないと判定する。
廃棄処理しないので、廃棄サイクル保持値減算部15aの出力がセレクタ15cで選択される。このとき、廃棄サイクル保持値減算部15aでは、廃棄サイクル保持値−廃棄数=16−0=16を算出するので、廃棄サイクル保持値ラッチ部15dには16が保持される。
一方、廃棄判定比較部14で廃棄処理はしないと判定されたので、廃棄処理部16bでは、その旨を認識し、位相調整部16aで位相調整されたパケットに付加するパケット有効フラグをONにする。そして、キュー長監視部16dは、Up-Downカウンタのカウントアップを行い、パケットバッファ16cに対するWrite要求を行って、8パケットサイクルのパケットの書き込みを実行する。
〔S14〕次に到着したパケットは、パケット長検出部12aでパケットサイクル=94が検出される。加算部12bでの加算結果は、パケットサイクル=94と、監視サイクル保持値ラッチ部12dで保持されている監視サイクル保持値=64とを加算して158となる。
監視サイクル除算部12cは、加算値を監視サイクルで除算して、158/80=1…78(商=1、余り=78)となる。監視サイクル保持値ラッチ部12dは余りを保持し、監視サイクル保持値=78となる。廃棄数乗算部13では、商×廃棄サイクル=1×8=8を演算し、廃棄数8を求める。
廃棄判定比較部14においては、ここでは廃棄数(8)<廃棄サイクル保持値(16)なので、廃棄数≧廃棄サイクル保持値を満たさないので、到着した94パケットサイクルのパケットを廃棄しないと判定する。
廃棄処理しないので、廃棄サイクル保持値減算部15aの出力がセレクタ15cで選択される。このとき、廃棄サイクル保持値減算部15aでは、廃棄サイクル保持値−廃棄数=16−8=8を算出するので、廃棄サイクル保持値ラッチ部15dには8が保持される。
一方、廃棄判定比較部14で廃棄処理はしないと判定されたので、廃棄処理部16bでは、その旨を認識し、位相調整部16aで位相調整されたパケットに付加するパケット有効フラグをONにする。そして、キュー長監視部16dは、Up-Downカウンタのカウントアップを行い、パケットバッファ16cに対するWrite要求を行って、94パケットサイクルのパケットの書き込みを実行する。
〔S15〕次に到着したパケットは、パケット長検出部12aでパケットサイクル=40が検出される。加算部12bでの加算結果は、パケットサイクル=40と、監視サイクル保持値ラッチ部12dで保持されている監視サイクル保持値=78とを加算して118となる。
監視サイクル除算部12cは、加算値を監視サイクルで除算して、118/80=1…38(商=1、余り=38)となる。監視サイクル保持値ラッチ部12dは余りを保持し、監視サイクル保持値=38となる。廃棄数乗算部13では、商×廃棄サイクル=1×8=8を演算し、廃棄数8を求める。
廃棄判定比較部14においては、ここでは廃棄数(8)=廃棄サイクル保持値(8)なので、廃棄数≧廃棄サイクル保持値を満たすので、到着した40パケットサイクルのパケットを廃棄すると判定する。
廃棄処理を実行するので、廃棄サイクル保持値加減算部15bの出力がセレクタ15cで選択される。このとき、廃棄サイクル保持値加減算部15bでは、廃棄サイクル保持値−廃棄数+パケットサイクル=8−8+40=40を算出するので、廃棄サイクル保持値ラッチ部15dには40が保持される。
一方、廃棄判定比較部14で廃棄処理実行と判定されたので、廃棄処理部16bでは、その旨を認識し、位相調整部16aで位相調整されたパケットに付加するパケット有効フラグをOFFにする。そして、キュー長監視部16dは、Up-Downカウンタのカウントアップはせずに、パケットバッファ16cに対するWrite要求は行わず、40パケットサイクルのパケットの書き込みをマスクする。
ここで、ステップS11〜S15までの動作についてまとめて説明する。図17、図18はステップS11〜S15までの動作の概要を示す図である。最初のステップS11で16パケットサイクルのパケットが到着したときに、このパケットを廃棄して廃棄サイクル保持値=16とした。ここからパケット廃棄判定処理を開始して、廃棄確率10%の廃棄処理を行っていくことになる(廃棄確率10%の分子(=16)に対応する分母を見つけるということ)。
図17に対し、ステップS12では、40パケットサイクルが到着する。このとき、累積パケットサイクルが56で、監視サイクルCyc1の80サイクルを満たしていないので、8サイクルの減算は行えず、廃棄サイクル保持値は16のままである。ステップS13では、8パケットサイクルが到着する。このとき、累積パケットサイクルが64で、監視サイクルCyc1の80サイクルを満たしていないので、8サイクルの減算は行えず、廃棄サイクル保持値は16のままである。
図18に対し、ステップS14では、94パケットサイクルが到着する。このとき、累積パケットサイクルが158であり、監視サイクルCyc1を超えて、78サイクル分、監視サイクルCyc2をまたがることになる。したがって、80サイクルを満たしているので、監視サイクルCyc1に対して8サイクルの減算が行え、廃棄サイクル保持値は16−8=8となる。
ステップS15では、40パケットサイクルが到着する。このとき、監視サイクルCyc2からの累積パケットサイクルは118であり、監視サイクルCyc2を超えて、38サイクル分、監視サイクルCyc3をまたがることになる。したがって、監視サイクルCyc2に対して8サイクルの減算が行えるので、前回の廃棄サイクル保持値8から8を減算して0になるが(減算値0(=16−8−8)になったことにより、94パケットサイクルのパケットが到着したところまでが、最初に16パケットサイクル廃棄したときの廃棄確率10%に見合う分母のパケットサイクルの総量となる)、到着パケットの40パケットサイクルを加算(8−8+40=40)して、40という値を次の廃棄区間の廃棄サイクル保持値とする。
ここで、最初の廃棄サイクル保持値=16に対して、8が2回減算されれば、廃棄判定条件を満たす。ここではステップS15の40パケットサイクルが到着したときに、次の廃棄判定が行われるので、その手前の94パケットサイクルが到着したところまでが、最初に16パケットサイクル廃棄したときの廃棄確率10%となるための区間となり、それは(16+40+8+94)=158サイクルであるので、(16/158)×100≒10%であり、廃棄確率10%となっていることがわかる。
また、次の廃棄確率10%の区間としては、ステップS15で到着した40パケットサイクルを廃棄して、廃棄サイクル保持値を40(=8−8+40)として、開始することになる。したがって、今度は分子(=40)に見合う廃棄確率10%となる分母を見つけていくことになる。
次に図15、図16で示したテーブルに戻ってステップS16から説明を続ける。
〔S16〕次に到着したパケットは、パケット長検出部12aでパケットサイクル=312が検出される。加算部12bでの加算結果は、パケットサイクル=312と、監視サイクル保持値ラッチ部12dで保持されている監視サイクル保持値=38とを加算して350となる。
監視サイクル除算部12cは、加算値を監視サイクルで除算して、350/80=4…30(商=4、余り=30)となる。監視サイクル保持値ラッチ部12dは余りを保持し、監視サイクル保持値=30となる。廃棄数乗算部13では、商×廃棄サイクル=4×8=32を演算し、廃棄数32を求める。
廃棄判定比較部14においては、ここでは廃棄数(32)<廃棄サイクル保持値(40)なので、廃棄数≧廃棄サイクル保持値を満たさないので、到着した312パケットサイクルのパケットを廃棄しないと判定する。
廃棄処理しないので、廃棄サイクル保持値減算部15aの出力がセレクタ15cで選択される。このとき、廃棄サイクル保持値減算部15aでは、廃棄サイクル保持値−廃棄数=40−32=8を算出するので、廃棄サイクル保持値ラッチ部15dには8が保持される。
一方、廃棄判定比較部14で廃棄処理はしないと判定されたので、廃棄処理部16bでは、その旨を認識し、位相調整部16aで位相調整されたパケットに付加するパケット有効フラグをONにする。そして、キュー長監視部16dは、Up-Downカウンタのカウントアップを行い、パケットバッファ16cに対するWrite要求を行って、312パケットサイクルのパケットの書き込みを実行する。
〔S17〕次に到着したパケットは、パケット長検出部12aでパケットサイクル=48が検出される。加算部12bでの加算結果は、パケットサイクル=48と、監視サイクル保持値ラッチ部12dで保持されている監視サイクル保持値=30とを加算して78となる。
監視サイクル除算部12cは、加算値を監視サイクルで除算して、78/80=0…78(商=0、余り=78)となる。監視サイクル保持値ラッチ部12dは余りを保持し、監視サイクル保持値=78となる。廃棄数乗算部13では、商×廃棄サイクル=0×8=0を演算し、廃棄数0を求める。
廃棄判定比較部14においては、ここでは廃棄数(0)<廃棄サイクル保持値(8)なので、廃棄数≧廃棄サイクル保持値を満たさないので、到着した48パケットサイクルのパケットを廃棄しないと判定する。
廃棄処理しないので、廃棄サイクル保持値減算部15aの出力がセレクタ15cで選択される。このとき、廃棄サイクル保持値減算部15aでは、廃棄サイクル保持値−廃棄数=8−0=8を算出するので、廃棄サイクル保持値ラッチ部15dには8が保持される。
一方、廃棄判定比較部14で廃棄処理はしないと判定されたので、廃棄処理部16bでは、その旨を認識し、位相調整部16aで位相調整されたパケットに付加するパケット有効フラグをONにする。そして、キュー長監視部16dは、Up-Downカウンタのカウントアップを行い、パケットバッファ16cに対するWrite要求を行って、48パケットサイクルのパケットの書き込みを実行する。
〔S18〕次に到着したパケットは、パケット長検出部12aでパケットサイクル=8が検出される。加算部12bでの加算結果は、パケットサイクル=8と、監視サイクル保持値ラッチ部12dで保持されている監視サイクル保持値=78とを加算して86となる。
監視サイクル除算部12cは、加算値を監視サイクルで除算して、86/80=1…6(商=1、余り=6)となる。監視サイクル保持値ラッチ部12dは余りを保持し、監視サイクル保持値=6となる。廃棄数乗算部13では、商×廃棄サイクル=1×8=8を演算し、廃棄数8を求める。
廃棄判定比較部14においては、ここでは廃棄数(8)=廃棄サイクル保持値(8)なので、廃棄数≧廃棄サイクル保持値を満たすので、到着した8パケットサイクルのパケットを廃棄すると判定する。
廃棄処理を実行するので、廃棄サイクル保持値加減算部15bの出力がセレクタ15cで選択される。このとき、廃棄サイクル保持値加減算部15bでは、廃棄サイクル保持値−廃棄数+パケットサイクル=8−8+8=8を算出するので、廃棄サイクル保持値ラッチ部15dには8が保持される。
一方、廃棄判定比較部14で廃棄処理実行と判定されたので、廃棄処理部16bでは、その旨を認識し、位相調整部16aで位相調整されたパケットに付加するパケット有効フラグをOFFにする。そして、キュー長監視部16dは、Up-Downカウンタのカウントアップはせずに、パケットバッファ16cに対するWrite要求は行わず、8パケットサイクルのパケットの書き込みをマスクする。
ここで、ステップS16〜S18までの動作についてまとめて説明する。図19はステップS16〜S18までの動作の概要を示す図である。ステップS15で40パケットサイクルのパケットが到着したときに、このパケットを廃棄して廃棄サイクル保持値=40とした。ここからパケット廃棄判定を開始して、廃棄確率10%の廃棄処理を行っていくことになる(廃棄確率10%の分子(=40)に対応する分母を見つけるということ)。
ステップS16〜S18ではそれぞれ、パケットサイクル=312、48、8のパケットが到着するので、パケットサイクル=312が到着したときでは、監視サイクルCyc3〜Cyc6の80サイクルを4つ満たすので廃棄数は32(=8×4)となり、このとき廃棄サイクル保持値は8(=40−32)となる。
また、パケットサイクル=48が到着したときでは、監視サイクルCyc7の80サイクルを満たしてないので、廃棄数は0となり、廃棄サイクル保持値は8(=8−0)となる。そして、パケットサイクル=8が到着したときでは、監視サイクルCyc7の80サイクルを1つ満たすので、廃棄数は8(=8×1)となり、前回の廃棄サイクル保持値8から8を減算すると0になるが(減算値0(=40−8×4−8)になったことにより、48パケットサイクルのパケットが到着したところまでが、最初に40パケットサイクル廃棄したときの廃棄確率10%に見合う分母のパケットサイクルの総量となる)、到着パケットの8パケットサイクルを加算(8−8+8=8)して、8という値を次の廃棄区間の廃棄サイクル保持値とする。
最初の廃棄サイクル保持値=40に対して、8が5回減算されれば、廃棄判定条件を満たす。ここではステップS18の8パケットサイクルが到着したときに、次の廃棄判定が行われるので、その手前の48パケットサイクルが到着したところまでが、最初に40パケットサイクル廃棄したときの廃棄確率10%となるための区間となり、それは(40+312+48)=400サイクルであるので、(40/400)×100=10%であり、廃棄確率10%となっていることがわかる。
また、次の廃棄確率10%の区間としては、ステップS18で到着した8パケットサイクルを廃棄して、廃棄サイクル保持値を8(=8−8+8)として、開始することになる。したがって、今度は分子(=8)に見合う廃棄確率10%となる分母を見つけていくことになる。
次に図15、図16で示したテーブルに戻ってステップS19の説明を続ける。
〔S19〕次に到着したパケットは、パケット長検出部12aでパケットサイクル=73が検出される。加算部12bでの加算結果は、パケットサイクル=73と、監視サイクル保持値ラッチ部12dで保持されている監視サイクル保持値=6とを加算して79となる。
監視サイクル除算部12cは、加算値を監視サイクルで除算して、79/80=0…79(商=0、余り=79)となる。監視サイクル保持値ラッチ部12dは余りを保持し、監視サイクル保持値=79となる。廃棄数乗算部13では、商×廃棄サイクル=0×8=0を演算し、廃棄数0を求める。
廃棄判定比較部14においては、ここでは廃棄数(0)<廃棄サイクル保持値(8)なので、廃棄数≧廃棄サイクル保持値を満たさないので、到着した79パケットサイクルのパケットを廃棄しないと判定する。
廃棄処理しないので、廃棄サイクル保持値減算部15aの出力がセレクタ15cで選択される。このとき、廃棄サイクル保持値減算部15aでは、廃棄サイクル保持値−廃棄数=8−0=8を算出するので、廃棄サイクル保持値ラッチ部15dには8が保持される。
一方、廃棄判定比較部14で廃棄処理はしないと判定されたので、廃棄処理部16bでは、その旨を認識し、位相調整部16aで位相調整されたパケットに付加するパケット有効フラグをONにする。そして、キュー長監視部16dは、Up-Downカウンタのカウントアップを行い、パケットバッファ16cに対するWrite要求を行って、73パケットサイクルのパケットの書き込みを実行する。
なお、ステップS19では、73パケットサイクルのパケットが到着した時点で廃棄確率10%を満たす廃棄区間となることがわかる。図20はステップS19の動作の概要を示す図である。最初に8パケットサイクル廃棄して、廃棄サイクル保持値=8であり、監視サイクル保持値=6に対して、73パケットサイクルのパケットが到着している。
したがって、次ステップでパケットが到着すれば、監視サイクルCyc8から監視サイクルCyc9へまたぐことがわかるので、73パケットサイクルのパケットが到着した時点で、監視サイクルCyc8に対して、前回の廃棄サイクル保持値8から8を減算することができ、0となることがわかる。ここでの廃棄区間は81(=8+73)であり、(81/80)×100≒10%となる。
なお、ステップS11〜S19の全体でみると、到着したパケットサイクルの総和は639(=16+40+8+94+40+312+48+8+73)パケットサイクルであり、この区間に廃棄したパケットサイクルは64(=16+40+8)であるので、(64/639)×100≒10%となる。
次に動作フローチャートを示す。図21、図22はパケット廃棄アルゴリズムを示すフローチャートである。
〔S21〕パケットを格納するキューの平均キュー長Qavが最小しきい値minTHより小さいか否かを判断する。平均キュー長Qavが最小しきい値minTHより小さければ、ステップS22へいき、そうでなければステップS23へいく。
〔S22〕監視サイクル保持値を0とする(到着パケットをすべてキューに書き込んでパケット廃棄はしないので、廃棄確率に見合うパケット廃棄を行うときに必要な監視サイクル保持値といったパラメータは不要である)。ステップS26へいく。
〔S23〕パケットを格納するキューの平均キュー長Qavが最大しきい値maxTHより大きいか否かを判断する。平均キュー長Qavが最大しきい値maxTHより大きければ、ステップS24へいき、そうでなければステップS27へいく。
〔S24〕監視サイクル保持値を0とする(到着パケットをすべて廃棄するので、廃棄確率に見合うパケット廃棄を行うときに必要な監視サイクル保持値といったパラメータは不要である)。
〔S25〕到着パケットを全廃棄する。
〔S26〕廃棄サイクル保持値を0とする(廃棄確率に見合うパケット廃棄を行うときに必要な廃棄サイクル保持値といったパラメータは不要である)。
〔S27〕パケットサイクルを監視サイクル保持値で除算する。
〔S28〕除算した余りを次回処理における監視サイクル保持値とする。
〔S29〕除算した商と廃棄サイクルとを乗算した値(廃棄数)≧廃棄サイクル保持値を満たすか否かを判断する。満たす場合はステップS30へ、満たさない場合はステップS32へいく。
〔S30〕到着パケットを廃棄する。
〔S31〕次処理の廃棄サイクル保持値を、廃棄サイクル保持値←廃棄サイクル保持値−廃棄数+パケットサイクルにより求める。
〔S32〕次処理の廃棄サイクル保持値を、廃棄サイクル保持値←廃棄サイクル保持値−廃棄数により求める。
次にパケット廃棄の動作をタイムチャートで示す。図23、図24は定率によるパケット廃棄動作を示すタイムチャートである。図に示すタイムチャートは、パケットサイクルが16、40、8、94、40、312、48、8、73のパケットが順に到着したときの廃棄確率10%の廃棄処理を示しており(上述したステップS11〜S19の処理をタイムチャートで表現したものである)、廃棄イネーブル、パケットサイクル、廃棄カウンタといったパラメータを設けてこれらの関係を表している。廃棄イネーブルの周期は、1監視サイクルで80サイクルである。
図23に対し、最初に16パケットサイクルの廃棄が行われると、廃棄サイクル保持値16から監視サイクルCyc1で8サイクル減算し、さらに監視サイクルCyc2で8サイクル減算して0になる。ここまでのパケットサイクル総量は16+40+8+94=158である。したがって、(16/158)×100≒10%の廃棄確率を満たしている。
図24に対し、40パケットサイクルの廃棄が行われ、廃棄サイクル保持値40から監視サイクルCyc3〜Cyc7で8サイクルを繰り返し減算して0になる。ここまでのパケットサイクル総量は40+312+48=400である。したがって、(40/400)×100=10%の廃棄確率を満たしている。
次に8パケットサイクルの廃棄が行われ、廃棄サイクル保持値8から監視サイクルCyc8で8サイクル減算して0になる。ここまでのパケットサイクル総量は8+73=81である。したがって、(8/81)×100≒10%の廃棄確率を満たしている。
以上説明したように、ハードウェアのみで平均キュー長の伸長に瞬時に追随して輻輳制御を行うことができるので、従来のようにマイコンやDSP(Digital Signal Processor)などを用いて、ファームウェア処理によって行われていた乗算・除算を繰り返していた処理の負荷を軽減することができ、高速処理を可能にする。
また、従来では、パケット廃棄判定処理にかかる処理時間分にキューが伸長する値を考慮して、平均キュー長のしきい値を設定する必要があったが、パケット廃棄判定処理時間を短縮できるため、しきい値を大きな値に設定することが可能になり、その結果、システムが有する通信速度を向上させることが可能になる。
(付記1) パケットの廃棄を行って、ネットワークトラフィックの輻輳回避を行うパケット処理装置において、
最大廃棄確率と平均キュー長より、廃棄確率を監視サイクルと廃棄サイクルで定義する近似廃棄確率テーブルを管理する廃棄確率算定部と、
到着したパケットのパケットサイクルを検出し、パケットサイクルに監視サイクル保持値を加算した加算値を監視サイクルで除算して、累積パケットサイクルに含まれる監視サイクルの回数を算出する監視サイクル回数算出部と、
監視サイクルの回数と廃棄サイクルを乗算して廃棄数を算出する廃棄数乗算部と、
廃棄数と廃棄サイクル保持値とを比較して廃棄判定を行い、廃棄数が廃棄サイクル保持値と等しい、または廃棄数が廃棄サイクル保持値より大きい場合は、到着したパケットを廃棄実行と設定する廃棄判定比較部と、
廃棄が発生してから次の廃棄が発生するまでの、廃棄確率を満たすサイクル区間を求めるために、廃棄判定結果にもとづいて、前回処理時の廃棄サイクル保持値から廃棄数を減算した値である廃棄サイクル保持値を繰り返し算出し、算出値を前記廃棄判定比較部へ送信する廃棄サイクル保持値算出部と、
パケットを格納するキューを含み、パケットの廃棄実行が設定されたときには、キューに入力する前のパケットの廃棄を行うパケット廃棄処理部と、
を有することを特徴とするパケット処理装置。
(付記2) 前記廃棄確率算定部は、平均キュー長が最小しきい値と最大しきい値の間にあるときの廃棄確率曲線を、最大廃棄確率を複数の割合に分割して、平均キュー長の伸張度合いに応じて、定率で廃棄を行えるような階段状の波形に変換したグラフにもとづいて生成された前記近似廃棄確率テーブルを管理することを特徴とする付記1記載のパケット処理装置。
(付記3) 前記廃棄確率算定部、前記監視サイクル回数算出部、前記廃棄数乗算部、前記廃棄判定比較部、前記廃棄サイクル保持値算出部、前記パケット廃棄処理部は、ハードウェアのみで機能を構成することを特徴とする付記1記載のパケット処理装置。
(付記4) 前記監視サイクル回数算出部は、到着パケットのパケットサイクルを検出するパケット長検出部と、パケットサイクルと監視サイクル保持値とを加算する加算部と、加算値を監視サイクルで除算して、監視サイクルの回数を表す商と、監視サイクル保持値を表す余りとを算出する監視サイクル除算部と、次パケットが到着するまで監視サイクル保持値をラッチする監視サイクル保持値ラッチ部と、から構成されることを特徴とする付記3記載のパケット処理装置。
(付記5) 前記廃棄サイクル保持値算出部は、到着パケットが廃棄処理実行と判定されなかった場合に、前回処理時の廃棄サイクル保持値から廃棄数を減算して廃棄サイクル保持値を算出する廃棄サイクル保持値減算部と、到着パケットが廃棄処理実行と判定された場合に、前回処理時の廃棄サイクル保持値から廃棄数を減算し、かつ到着パケットのパケットサイクルを加算して、次の廃棄区間の廃棄サイクル保持値を算出する廃棄サイクル保持値加減算部と、前記廃棄判定比較部の廃棄判定結果にもとづいて、前記廃棄サイクル保持値減算部と前記廃棄サイクル保持値加減算部の出力を選択するセレクタと、前記セレクタから出力された廃棄サイクル保持値をラッチする廃棄サイクル保持値ラッチ部と、から構成されることを特徴とする付記3記載のパケット処理装置。
(付記6) 前記パケット廃棄処理部は、到着パケットの廃棄判定処理にかかる位相差の吸収を行う位相調整部と、パケットを格納するパケットバッファと、前記パケットバッファへの書き込みを行うか否かのフラグを到着パケットに付加し、到着パケットが廃棄処理実行と判定されなかった場合には、フラグをONにして書き込み要求を行い、到着パケットが廃棄処理実行と判定された場合には、フラグをOFFにして書き込みをマスクする廃棄処理部と、フラグのON/OFFの状態から、前記パケットバッファの格納状態を認識して平均キュー長を監視するキュー長監視部と、前記パケットバッファからパケットの読み出しを行う読み出し制御部と、から構成されることを特徴とする付記3記載のパケット処理装置。
(付記7) パケットの廃棄を行って、ネットワークトラフィックの輻輳回避を行うパケット廃棄方法において、
最大廃棄確率と平均キュー長より、廃棄確率を監視サイクルと廃棄サイクルで定義する近似廃棄確率テーブルを管理して、監視サイクル及び廃棄サイクルを設定し、
到着したパケットのパケットサイクルを検出し、
パケットサイクルに監視サイクル保持値を加算した加算値を監視サイクルで除算して、除算した商を累積パケットサイクルに含まれる監視サイクルの回数、除算した余りを監視サイクル保持値とし、
監視サイクルの回数と廃棄サイクルを乗算して廃棄数を算出し、
廃棄数と廃棄サイクル保持値とを比較して廃棄判定を行い、廃棄数が廃棄サイクル保持値と等しい、または廃棄数が廃棄サイクル保持値より大きい場合は、到着したパケットを廃棄実行と設定し、
廃棄が発生してから次の廃棄が発生するまでの、廃棄確率を満たすサイクル区間を求めるために、廃棄判定結果にもとづいて、前回処理時の廃棄サイクル保持値から廃棄数を減算した値である廃棄サイクル保持値を繰り返し算出して、算出値を廃棄判定に使用し、
パケットの廃棄実行が設定されたときには、キューに入力する前のパケットの廃棄を行うことを特徴とするパケット廃棄方法。
(付記8) 廃棄サイクル保持値を求める場合は、到着パケットが廃棄処理実行と判定されなかった場合には、前回処理時の廃棄サイクル保持値から廃棄数を減算して廃棄サイクル保持値を算出し、到着パケットが廃棄処理実行と判定された場合には、前回処理時の廃棄サイクル保持値から廃棄数を減算し、かつ到着パケットのパケットサイクルを加算して、次の廃棄区間の廃棄サイクル保持値を算出することを特徴とする付記7記載のパケット廃棄方法。