以下、図面に基づいて、本発明の実施の形態を説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
<第1実施形態>
ポリサ及びシェーパのいずれも、トークンバケツという機能を用いてパケットの転送制御を行う。
図2は、トークンバケツの仕組みを説明するための図である。トークンバケツP60は、例えば、ポリサやシェーパに備えられている。トークンバケツP60には、パケットの送信権であるトークンが溜められている。ポリサ/シェーパでは、トークンバケツP60から出力パケットに相当する量のトークンを消費することによって、パケットを後段のブロックへ出力することができる。具体的には、後段のブロックへのパケットの出力処理を行うパケット処理部P50は、パケット出力の際に、トークンバケツP60に溜められるトークンの量から出力するパケット長を減算する。したがって、トークンバケツP60にパケット長以上のトークンが溜められている場合には、パケットは入力可能又は出力可能となる。以降、トークンバケツに溜められるトークンの量を、トークン量、と称する。
トークンバケツP60には、溜められる最大のトークン量が決められており、この最大トークン量の分だけパケット処理装置はバーストを許容することができる。バーストとは、例えば、端末からの大量のデータの送信等によりネットワーク内に流れる大量のデータの固まりである。また、トークンバケツP60には、所定の周期で所定量のトークンが追加される。トークンが追加される周期や量は、フローに割り当てられる帯域に対応している。例えば、各フローについて帯域が設定される場合には、トークンバケツは各フローに対応して備えられる。フローとは、送信元IPアドレス、宛先IPアドレス、送信元ポート番号、宛先ポート番号、プロトコル等が同一であるパケット群を指す。
ポリシングの一例として、パケットのカラーリングがある。カラーリングとは、例えば、キューイング等の後段のブロックにおけるパケットの廃棄優先度を決定することで、マーキングとも呼ばれる。カラーリングの標準化仕様には、例えば、MEF10(Metro Ether Forum 10)やRFC2698(Request For Comment 2698)等で規定されている2レート3カラー等がある。2レート3カラーは、1つのフローにつきCIRとEIR(Excess Information Rate)との2つのポリサ(トークンバケツ)を用いて、パケットをRe
d、Yellow、Greenの3つの色のいずれかに分けるカラーリングである。EIRは、通信に利用可能な最大の帯域を示し、CIR<EIRである。CIR,EIRに対
応するトークンバケツは、それぞれ、CBS(Committed Burst Size),EBS(Excess Burst Size)である。廃棄優先度は、廃棄されやすさを示し、廃棄優先度の高さは、Re
d>Yellow>Greenである。
CIR、EIR等のネットワーク帯域の設定値に対して、入力パケットの帯域が、CIR値未満の場合にはGreen、CIR値以上EIR値未満の場合にはYellow、EIR値以上の場合にはRedと判定される。
図3は、ポリサにおける処理の流れを説明するための図である。図3では、ポリサの処理を実行するパケット到着処理部P70における、パケットA1,パケットA2,パケットA3についての処理が示される。パケットA1,パケットA2,パケットA3は、同じフローAに属している。また、パケットA1,パケットA2,パケットA3のいずれもパケット長は100バイトとし、それぞれ2クロックの間隔でパケット処理装置に到着するものとする。
例えば、上述の2レート3カラーを実行するポリサでは、(1)パケット到着、(2)メモリからのトークン量読出し、(3)カラー判定及びトークン量減算の演算、(4)メモリへのトークン量の書き戻し、の順で処理が実行される。このような一連の処理にかかる演算時間は、ポリサへのパケット到着間隔に比べると長く、1パケットに対する一連の処理が終了する前に次々と新たにパケットが到着する。そのため、一つのパケットに対する一連の処理が終了してから、次のパケットの処理を行うのでは、演算による遅延が大きくなってしまう。そこで、ポリサでは、パイプラインと呼ばれる演算処理が行われる。パ
イプラインは、例えば、上記の(1)−(4)の一連の処理を行うように組み込まれた回路である。パイプラインは複数段備えられ、各パイプラインは、所定時間、例えば、パケットの到着間隔ずつずらしたタイミングで、処理を開始する。到着したパケットは、次に処理を開始するパイプラインに割り当てられる。また、ポリサでは、フローに関係なく、1つのパケットにつき1つのパイプラインが用いられる。
パイプラインの段数は、例えば、1つのパイプラインにかかる演算時間と、パケットの到着間隔に応じて決定される。例えば、1つのパイプラインにかかる演算時間が12クロックであり、パケットの到着間隔が2クロックである場合には、パイプラインの処理開始タイミングは2クロックずつずれるので、パイプラインの段数は6段になる。例えば、6段のパイプライン#1−#6とすると、#1→#2→#3→#4→#5→#6→#1...の順番で各パイプラインの処理が開始される。
図3では、パケット到着処理部P70に到着するパケットは、次に処理を開始するパイプラインに割り当てられている。図3では、パケットA1はパイプライン1,パケットA2はパイプライン2,パケットA3はパイプライン3に割り当てられる例が示される。
パイプライン1では、パケットA1が到着した後(処理(1))、メモリからフローAのトークン量が読み出される(処理(2))。このとき、パイプライン1において、メモリから読み出されたフローAのトークン量は1000バイトであったとする。次に、パイプライン1では、パケットA1のカラー判定とトークン減算が行われ(処理(3))、パケットA1がパケット到着処理部P70から出力される。このとき、処理(2)において読み出されたトークン量(1000バイト)からパケットA1のパケット長分(100バイト)が減算され、フローAのトークン量は900バイトになる。このフローAのトークン量900バイトがメモリに書き戻される(処理(4))。
パイプライン2では、パイプライン1より2クロック遅れで、処理が開始され、パケットA2が到着し(処理(1))、メモリからフローAのトークン量の読出し(処理(2))が行われる。ここで、パイプライン1で処理されるパケットA1とパイプライン2で処理されるパケットA2とは同じフローAに属するパケットであるので、同じトークンバケツが用いられる。また、パイプライン2は、パイプライン1から2クロック遅れ(ずれ)で並行して実行されており、1つのパイプラインの完了までにかかる時間はパイプライン1とパイプライン2とのずれ(2クロック)よりも大きい。そのため、パイプライン2のトークン量の読み出し(処理(2))は、パイプライン1によるトークン量の書き戻し(処理(4))の完了前に行われる。したがって、パイプライン2の処理(2)で読み出されるフローAのトークン量は、パイプライン1によるトークン量の書き戻し(処理(4))前の、1000バイトとなる。しかしながら、パイプライン2がフローAのトークン量を取得した時点では、パイプライン1によるトークン減算が行われており、実際のフローAのトークン量は900バイトになっている。すなわち、パイプライン2が処理(2)によって取得したフローAのトークン量(1000バイト)は、最新のものではなく、実際のフローAのトークン量(900バイト)とは異なり、陳腐化したものとなってしまう。
そのため、各パイプラインでは、トークン量を含む演算データをキャッシュに保持し、他のパイプラインへと受け渡す。演算データを受け取ったパイプラインでは、他のパイプラインから受け取った演算データの中から同じフローの最新のデータを判別し、該演算データを用いて演算する。例えば、各パイプラインによってキャッシュに保持される情報には、パイプラインが処理するパケットが属するフローの識別情報(フローID)、演算データとしての該当するフローのトークン量等が含まれている。キャッシュデータを受け渡されたパイプラインでは、例えば、自パイプラインとキャッシュデータの生成元となるパイプラインとの相対的な位置関係から、同じフローの最新のキャッシュデータが判別され
る。具体的には、自パイプラインの処理の開始前の最も近い時間に処理が開始される、同じフローのパケットを処理するパイプラインによって保持されたキャッシュデータが同じフローの最新のキャッシュデータとして判別される。
例えば、パイプラインが6段であり、パイプライン#1−#6がこの順番で処理を開始する場合について説明する。パイプライン#4がパイプライン#1−#3から受け取ったキャッシュデータが同じフローのものであれば、パイプライン#4の処理の開始より前において、最も近い時間に処理が開始されているパイプライン#3のキャッシュデータが最新と判別される。また、パイプライン#4がメモリから読み出したトークン量については、他のパイプラインから受け取ったキャッシュデータがある場合には、他のパイプラインから受け取ったキャッシュデータが優先される。
図3に示される例においては、情報の整合性のために、パイプライン1は、フローAのトークン量900バイトを含む演算データをキャッシュに保持することによって、他のパイプラインに渡す。パイプライン2では、メモリから読み出したフローAのトークン量(1000バイト)とパイプライン1によってキャッシュに保持されたフローAのトークン量(900バイト)とのいずれが最新であるかを判定し、演算データ(トークン量)の取捨選択を行う。この場合には、パイプライン1の演算データに含まれるフローAのトークン量(900バイト)が優先されるため、パイプライン2では、パイプライン1によってキャッシュに保持されたフローAのトークン量を用いてカラー判定とトークン減算とが行われる(処理(3))。パイプライン2では、パイプライン1によってキャッシュに保持されたフローAのトークン量(900バイト)からパケットA2のパケット長分(100バイト)が減算される。結果、フローAのトークン量は800バイトになる。パイプライン2では、フローAのトークン量は800バイトでメモリに書き戻される(処理(4))。
パイプライン3においても同様の処理が実行される。パイプライン3には、パイプライン1によってキャッシュに保持された演算データと、パイプライン2によってキャッシュに保持された演算データとが渡される。パイプライン3で取り扱われるパケットA3もパケットA1及びパケットA2と同じフローAのパケットである。そのため、パイプライン3では、キャッシュに保持されたパイプライン1の演算データとパイプライン2の演算データと、メモリから読み出したトークン量の中から、パイプライン2の演算データ(トークン量800バイト)が最新であると判別される。パイプライン2は、パイプライン3の処理の開始より前において、最も近い時間に処理を開始しているパイプラインだからである。パイプライン3では、パイプライン2の演算データ(トークン量800バイト)からパケットA3のパケット長分(100バイト)減算されたトークン量(700バイト)がメモリに書き戻される。
以上のように、ポリサでは、フローに関係なく、1つのパケットにつき1つのパイプラインを用いて演算が行われる。そのため、同じフローに属するパケットを処理するパイプラインが複数存在する場合には、該パイプライン間で、同じメモリの値(トークンバケツ)の読み出し、変更、書き戻しの一連の処理が競合する。これによって、各パイプラインがメモリから取得するトークン量と、その時点での実際のトークン量とに齟齬が生じる。この齟齬を解消するため、各パイプラインは演算データ(トークン量)をキャッシュに保持し、パイプライン間で演算データの受け渡しを行い、使用する演算データ(トークン量)の取捨選択が行われる。これにより、演算回路の規模の拡大や、パケット処理装置の動作速度が低下してしまうおそれがある。
第1実施形態のパケット処理装置では、1つのパケットにつき1パイプラインが割り当てられるのではなく、所定数の連続するパケットにおける1フローにつき1つのパイプラ
インが割り当てられる。以下、第1実施形態のパケット処理装置について詳しく説明する。
図4は、第1実施形態のパケット処理装置の処理の一例を示す図である。図4では、インタフェースカードのポリサに係る処理について示されている。パケット到着処理部106は、ポリシングを行う処理部である。第1実施形態では、まず、(1)パケット到着処理部106への入力前に、各パケットから情報が抽出される。抽出される情報は、例えば、該パケットが属するフローのID,パケット長等である。次に、(2)所定数の連続するパケットから抽出された情報が一つにまとめられ、例えば、一つにまとめられた情報は、該所定数の連続するパケットよりも前に位置するパケットの内部ヘッダに付与される。内部ヘッダは、パケット処理装置内でのみ有効なヘッダである。また、(3)パケットには所定の遅延が挿入される。これによって、該所定数の連続するパケットがパケット到着処理部106に入力される前に、該所定数の連続するパケットの情報が取得される。
該所定数のパケットの情報に基づき、同じメモリの値(トークンバケツ)に対する、読み出し、変更、書き戻しの一連の処理の競合を回避するための処理が実行される。同じメモリの値(トークンバケツ)に対する、読み出し、変更、書き戻しの一連の処理を、以降、“メモリに対する一連の処理”と称する。また、メモリに対する一連の処理の競合とは、第1実施形態では、同じフローのトークンバケツに対する上記一連の処理が並行して複数存在すること、である。例えば、図3に示される例において、複数のパイプラインが並行して同じフローのパケットを処理すること、である。メモリに対する一連の処理の競合を回避するための処理は、例えば、該所定数のパケットのパケット到着処理部106への入力よりも前に取得される該所定数のパケットの情報に基づいて、該所定数のパケットにおける同じフローに属するパケットの演算をまとめて実行することである。演算は、例えば、パケットのカラー判定や、トークン減算等である。
所定数の連続するパケットについて、パケット到着処理部106への入力前に、同じフローに属するパケットの演算をまとめて実行することによって、同じフローに属するパケット間でのメモリに対する一連の処理の競合を回避することができる。
<パケット処理装置の構成>
図5は、パケット処理装置100の構成の一例を示す図である。パケット処理装置100は、例えば、ルータ,スイッチ等の装置である。ただし、これに限られず、パケット処理装置100は、ルータ、スイッチ等に含まれるインタフェースカードであってもよい。第1実施形態では、パケット処理装置100は、ルータ、スイッチ等の装置であるとして説明する。パケット処理装置100は、複数のIFカード1と、各IFカード1間でパケットを中継するSWカード2と、パケット処理装置100の各カードの制御を行う制御カード3とを含む。ポリサ,シェーパ,スケジューラ等のQoSの機能は、IFカード1に備えられる。
図6は、IFカード1のハードウェア構成の一例を示す図である。IFカード1は、PHY/MAC(PHYsical layer/MAC layer)回路11,メモリ12,データ処理用プロセッサ13,制御用プロセッサ14,複数のポート15,QoS回路16を備える。複数のポート15は、PHY/MAC回路11に接続されている。PHY/MAC回路11と、メモリ12と、データ処理用プロセッサ13と、制御用プロセッサ14と、QoS回路16とは、データ用バス17と制御用バス18とにそれぞれ接続されている。図6中では、データ用バスは実線で、制御用バスは点線で示されている。なお、図6において、アドレス用バスは省略されている。
PHY/MAC回路11は、各ポート15から入力される受信フレームの物理レイヤの
終端処理とMACレイヤの終端処理とを行う。メモリ12は、例えば、SRAM(Static Random Access Memory)やDRAM(Dynamic Random Access Memory)等の揮発性のメモリ
と、PROM(Programmable Read Only Memory)等の不揮発性のメモリと、が含まれる。
メモリ12には、各種プログラムやデータが記憶されている。
データ処理用プロセッサ13は、例えば、NPU(Network Processing Unit)やデー
タ通信プロセッサ等の、通信にかかるデータの処理を行うプロセッサである。データ処理用プロセッサ13は、PHY/MAC回路11によって符号化されたフレーム,SWカード2から転送されてきたフレームを処理する。制御用プロセッサ14は、例えば、CPU(Central Processing Unit)である。制御用プロセッサ14は、PHY/MAC回路1
1,メモリ12,データ処理用プロセッサ13,QoS回路16の管理を行う。
QoS回路16は、例えば、入力側の機能としてポリサ回路,出力側の機能としてシェーパ回路,スケジューラ回路等を備える。ポリサ回路,シェーパ回路,スケジューラ回路は、例えば、FPGA(Field Programmable Gate Array)やASIC(Application Specific Integrated Circuit)である。
IFカード1に含まれる、PHY/MAC回路11,メモリ12,データ処理用プロセッサ13,制御用プロセッサ14,QoS回路16のそれぞれは、個別のデバイスまたはチップであってもよい。また、IFカード1は、これら回路及びデバイスを有する1つ又は複数のLSI(Large Scale Integration)であってもよい。
また、IFカード1のハードウェア構成は、図6に示されるものに限られず、適宜、追加,削除,置換が行われてもよい。制御用プロセッサ14とデータ処理用プロセッサ13とは、双方として機能する1つのプロセッサであってもよい。
図7は、QoS回路16の機能ブロック図の一例である。図7では、QoS回路16のうち、入力側のポリサの機能を果たすブロックについて示されている。QoS回路16は、パケット情報抽出部101,パケット情報付与部102,遅延挿入部103,トークン追加処理部104,競合調停部105,パケット到着処理部106を含む。これらは、それぞれ電気又は電子回路,FPGA,ASIC等によって実現される。これらの機能ブロックは一例であり、適宜、組み合わせて複数の機能ブロックを1つの機能ブロックとしてもよい。また、これらの機能ブロックは、全ての機能ブロックを含む1つの回路として構成されてもよい。また、2つ以上の機能ブロックを組み合わせて複数のブロックを作り、各ブロックを1つのFPGAやASICにより構成してもよい。例えば、パケット情報抽出部101,パケット情報付与部102,遅延挿入部103を1つのFPGAやASICにより構成し、トークン追加処理部104,競合調停部105,パケット到着処理部106を別の1つのFPGAやASICにより構成してもよい。
パケット情報抽出部101は、IFカード1に到着する各パケットから情報を抽出する。この抽出された情報を以降、“パケット情報”と称する。パケット情報は、例えば、フローID,パケット長を含む。フローIDは、フローの識別情報であって、例えば、パケットの内部ヘッダに格納されている。パケット長は、パケットのサイズであって、例えば、パケットヘッダのパケット長フィールド,内部ヘッダ等に格納されている。抽出されたパケット情報は、パケット情報付与部102に出力される。また、パケットは、遅延挿入部103に入力される。パケット情報抽出部101は、「抽出部」の一例である。
パケット情報付与部102は、パケット情報抽出部101から入力されるパケット情報を、連続する所定数のパケット分まとめ、該連続する所定数のパケットよりも所定数前のパケットの、例えば、内部ヘッダに付与する。連続する所定数のパケットを、以降“パケ
ットグループ”と称する。また、パケットグループに含まれる各パケットのパケット情報をまとめた情報を、以降、“パケットグループ情報”と称する。パケットの内部ヘッダは、入力側のIFカードでQoS回路の入力前に付与され、入力側のIFカード又は出力側のIFカードで取り除かれる、パケット処理装置内で有効なヘッダである。内部ヘッダには、例えば、パケット処理装置100内のパケットの転送先となるIFカード番号及びポート番号,パケット長,フローID,キューID等の情報が含まれている。
パケットグループ情報が内部ヘッダに付与されるパケットには、パケットグループ情報に加えて、パケットグループの先頭パケット位置も付与される。先頭パケット位置は、パケットグループ情報が付与されるパケットからのパケットグループの先頭パケットの位置を示す情報である。例えば、先頭パケット位置は、パケットグループ情報が付与されるパケットからパケットグループの先頭パケットまでに含まれるパケット数で示される。例えば、図7で示される例では、パケットグループ情報はパケットグループの先頭パケットよりも5つ前のパケットに付与されるので、先頭パケット位置は、5となる。
パケットグループに含まれるパケットの数は、例えば、パイプラインの段数に依存して決定される。また、パケットグループ情報は、例えば、パケットグループの先頭パケットからパケットグループに含まれるパケット数分前のパケットに付与される。
例えば、パイプラインが6段の場合には、最大6つのフローまで並行して処理できるので、パケットグループに含まれるパケットの数は6つになる。パケットグループに含まれるパケット数が6つの場合には、該パケットグループの情報は、例えば、該パケットグループの先頭パケットから6つ前のパケットに付与される。この場合には、パケットグループの先頭パケット位置は「6」となる。ただし、これに限られず、パケットグループ情報は、パケットグループの先頭パケットが到着するまでに少なくとも該先頭パケットのカラー判定等を完了できる時間が確保できるくらいに前のパケットに付与されればよい。
パケットグループ情報には、例えば、パケットグループに含まれる各パケットのパケット情報(フローID、パケット長)に加えて、オフセットが含まれる。オフセットは、パケットグループにおける先頭パケットからの位置を示し、先頭パケットを0とする。例えば、オフセットが3のパケットは、パケットグループの先頭から4個目のパケットであることが示される。
遅延挿入部103は、パケットグループに含まれるパケット数にパケットグループ情報が付与されるパケットとパケットグループの先頭パケットとの間に含まれるパケット数を加算した分の固定遅延を入力パケットに挿入する。遅延挿入部103は、例えば、FIFO(First In First Out)キューである。遅延挿入部103による固定遅延は、1つのパケットグループに含まれる全パケットのパケット情報の抽出と、該パケットグループのパケット到着処理部106への到着に先行するパケットグループ情報の通知のための遅延である。例えば、パケットグループに含まれるパケット数が5個で、パケットグループの先頭パケットから5つ前のパケットにパケットグループ情報が付与される場合には、遅延挿入部103は9個分の固定遅延を入力パケットに挿入する。遅延挿入部103から出力されたパケットはパケット到着処理部106に入力される。
トークン追加処理部104は、各フローに対して設けられるトークンバケツに所定周期で所定量のトークンを追加する。また、例えば、2レート3カラーのポリシングが実行される場合には、各フローに対して、CIR用とEIR用の2つのトークンバケツが設けられる。なお、トークンバケツは仮想的なものであって、実際には、後述のトークン格納部107に相当するメモリに各トークンバケツのトークン量が格納されている。トークン追加処理部104は、「追加処理部」の一例である。
トークン格納部107は、各トークンバケツのトークン量を格納する。トークン格納部107は、例えば、QoS回路16に備えられる揮発性のメモリであって、各トークンバ
ケツのトークン量は、それぞれに割り当てられたメモリの記憶領域に格納されている。第1実施形態では、トークン追加処理部104及びパケット到着処理部106は、トークン格納部107に格納されるトークン量を読出し、トークン量を加算又は減算し、トークン格納部107に書き戻す処理を行う。トークン格納部107は、「格納部」の一例である。
パケット到着処理部106は、フロー処理部106Aとパケット処理部106Bとを含む。フロー処理部106Aは、フロー毎にトークン減算処理とカラー判定処理とを行うパイプラインを複数含む。具体的には、フロー処理部106Aのパイプラインは、カラー判定処理として、例えば、2レート3カラーポリシングを実行することによってパケットのカラーを判定する。また、フロー処理部106Aのパイプラインは、トークン減算処理として、例えば、トークン格納部107から該当するフローのトークンバケツのトークン量を読み出し、読み出したトークン量からパケット長分のトークンを減算し、再びトークン格納部107に書き戻す。パケットグループに含まれる各パケットについてのカラー判定の実行結果は、例えば、実行結果テーブル(後述)に保持される。
パケット処理部106Bは、フロー処理部106Aの処理結果、すなわち、実行結果テーブルに基づいて、到着したパケットにカラー判定結果を付与し、後段のブロックに出力する。パケット到着処理部106は、「パケット処理部」の一例である。
競合調停部105は、パケット到着処理部106に入力する前のパケットグループ情報が付与されたパケットを検出し、該パケットからパケットグループ情報を取得する。例えば、競合調停部105は、パケット到着処理部106に接続するデータ信号線にバス接続しており、パケット到着処理部106に入力されるパケットのコピーを取得する。これによって、競合調停部105は、パケット到着処理部106に入力されるパケットの中から、パケットグループ情報が付加されたパケットを検出し、パケットグループ情報を取得する。
競合調停部105は、パケットグループ情報を取得すると、パケットグループ内の各フローを、フロー処理部106Aのパイプラインへ割り当て、割り当てたフローに含まれるパケットのパケット情報をフロー処理部106Aの各パイプラインに渡す。競合調停部105は、「競合処理部」の一例である。
図8は、フロー処理部106Aによるカラー判定の実行結果を保持する実行結果テーブルの一例である。実行結果テーブルは、例えば、パケット到着処理部106に対応するハードウェアに備えられるメモリに格納される。実行結果テーブルには、例えば、1つのパケットグループに含まれる各パケットの、オフセット,フローID,パケット長,演算実行済み,カラー判定結果のフィールドが含まれる。このうち、オフセット,フローID,パケット長は、パケットグループ情報により取得される情報である。演算実行済みは、カラー判定及びトークン減算が終了したか否かが示される。演算実行済みのフィールドが「済」である場合には、該パケットについてのカラー判定及びトークン減算の処理は実行済みであることが示される。カラー判定結果には、該パケットのカラー判定結果が格納される。図8では、2レート3カラーポリシングが実行される場合のテーブルの例が示されており、実行済みのフィールドが「済」である場合には、カラー判定結果には、「Green」、「Yellow」、「Red」のいずれかが格納されている。
実行結果テーブルは、例えば、競合調停部105が、新たにパケットグループ情報を取
得し、フロー処理部106Aが該パケットグループ情報に基づいてカラー判定及びトークン減算処理を実行すると、該当するオフセットのエントリが上書きされて更新される。
図9は、パケットグループ情報の入力により行われる競合調停部105とフロー処理部106Aの処理のフローチャートの一例である。図9に示されるフローチャートは、競合調停部105がパケットグループ情報を取得するたびに実行される。また、図9に示されるフローチャートは、2レート3カラーポリシングが実行される場合について示される。ただし、実行されるポリシングは、2レート3カラーポリシングに限られない。
OP1では、競合調停部105は、パケットグループ情報から、パケットグループに含まれるフローと、各フローに属するパケットとを、検出する。競合調停部105は、パケットグループに含まれるフローを、フロー処理部106Aの各パイプラインに割り当て、各パイプラインに、担当フローに属するパケットのパケット情報を渡す。なお、パケットグループに含まれるパケットが属するフローの数と、フロー処理部106Aのパイプラインの段数とは、同じとは限らず、フローの数の方が少ない場合がある。フローの数の方が少ない場合には、フローの数に相当するパイプラインが用いられ、用いられないパイプラインも存在する。
以降説明されるOP2−OP8の処理は、フローが割り当てられたフロー処理部106Aのパイプラインにおいて実行される処理を示し、パケットグループに含まれるフロー数Flwと同じ回数実行される。ただし、パイプライン処理のため、OP2−OP8の処理は、並行して実行される。図9中の変数Flwは、パケットグループに含まれるフローに対して、例えば、パケットグループにおいて出現した順番に、0から割り当てられた番号を示す変数であって、初期値は0である。また、変数Flwは、0≦Flw≦パイプラインの段数Sの整数である。
OP2では、フロー処理部106Aのパイプラインは、担当フローに属するパケットの数Nを取得する。Nは、0<N≦パケットグループに含まれるパケット数である。該当パイプラインの担当フローに属するパケットの数は、例えば、OP1において渡されるパケット情報の数により取得される。また、該当パイプラインの担当フローに属するパケットの数は、OP1において、パケット情報とともに渡されてもよい。
次に、OP3では、フロー処理部106Aのパイプラインは、担当フローのトークン量をトークン格納部107から読み出し、例えば、キャッシュに保持する。
以降、トークン減算,カラー判定の処理であるOP4−OP6の処理が、担当フローに属するパケットのパケット情報に基づいて、担当フローに属するパケットの数Nと同じ回数繰り返される。OP4−OP6において、処理の対象となるパケットを処理対象パケットiと称する。変数iは、該当パイプラインに割り当てられたフローに属するパケットのオフセットが小さいパケットから順番に割り当てられた番号を示し、0≦i<Nの変数である。
OP4では、フロー処理部106Aのパイプラインは、例えばキャッシュに保持される該当フローのトークン量と処理対象パケットiのパケット長とを比較する。次に、処理がOP5に進む。
OP5では、フロー処理部106Aのパイプラインは、OP4におけるトークン量と処理対象パケットiのパケット長との比較結果に基づき、カラー判定及びトークン減算を行う。カラー判定は、例えば、具体的には、以下の通りである。処理対象パケットiのパケット長<CBSのトークン量である場合には、フロー処理部106Aのパイプラインは、処理対象パケットiのカラーをGreenと判定する。CBSのトークン量<処理対象パケットiのパケット長<EBSのトークン量である場合には、フロー処理部106Aのパイプラインは、処理対象パケットiのカラーをYellowと判定する。EBSのトークン量<処理対象パケットiのパケット長である場合には、フロー処理部106Aは、処理対象パケットiのカラーをRedと判定する。トークン減算の処理では、フロー処理部106Aのパイプラインは、例えばキャッシュに保持されるトークン量から処理対象パケットiのパケット長を減算する。
OP6では、フロー処理部106Aのパイプラインは、処理対象パケットiのカラー判定結果を、例えば、実行結果テーブルの対応するオフセットのカラー判定結果フィールドに記録する。この後、該当パイプラインに割り当てられたフローに属するパケットで、カラー判定及びトークン減算の処理が未実行のパケットが残っている場合には、OP4からOP6の処理が繰り返し実行される。該当パイプラインに割り当てられたフローに属するパケット全てについて、カラー判定及びトークン減算の処理が実行された場合には、処理がOP7に進む。
OP7では、フロー処理部106Aのパイプラインは、例えば、キャッシュに保持されるトークン量をトークン格納部107に書き戻す。このとき書き戻されるトークン量は、OP3においてトークン格納部107から読み出されたトークン量から、該当パイプラインに割り当てられたフローに属するパケットのパケット長の合計を減算した値となる。次に処理がOP8に進む。
OP8では、フロー処理部106Aのパイプラインは解放される。具体的には、例えば、フロー処理部106Aのパイプラインは、OP2−OP7のパイプライン処理で用いられたキャッシュを解放する。その後、図9に示される処理が終了する。
図10は、パケット到着時のパケット処理部106Bの処理を示すフローチャートの一例である。図10に示されるフローチャートは、パケット到着処理部106にパケットが到着する度に実行される。
OP11では、パケット処理部106Bは、到着パケットに該当するオフセットのカラー判定結果を実行結果テーブルから読み出し、該カラー判定結果を到着パケットの内部ヘッダに付与する。その後、処理がOP12に進み、OP12では、パケット処理部106Bは、到着パケットを次のブロックに出力する。その後、図10に示される処理が終了する。
図11は、第1実施形態のパケット到着処理の動作例を示す図である。図11に示される例では、1つのパケットグループは5つのパケットを含む。また、図11では、パケットA1,パケットA2,パケットB1,パケットC1,パケットA3をこの順番で含むパケットグループが処理される例について示される。したがって、パケットA1をオフセット0として、パケットA2,パケットB1,パケットC1,パケットA3は、それぞれ、オフセット1−4である。
また、パケットA1,パケットA2,パケットA3は同じフローAに属する。パケットB1は、フローBに属する。パケットC1はフローCに属する。パケットA1は、100バイト、パケットA2は50バイト、パケットA3は50バイトであるとする。また、図11に示される例において、パケットグループ情報は、パケットグループの先頭パケットA1より5つ前のパケットに付与されるものとする。
競合調停部105は、パケットグループ情報を取得すると、パケットグループに含まれ
るフローをそれぞれフロー処理部106Aのパイプラインに割り当てる。例えば、競合調停部105は、パケットグループに含まれるフローAをパイプライン1に、フローBをパイプライン2に、フローCをパイプライン3に割り当てる(図9のOP1)。パイプライン1には、パケットA1、パケットA2、パケットA3のパケット情報が渡される。パイプライン2には、パケットB1のパケット情報が渡される。パイプライン3には、パケットC1のパケット情報が渡される。
パイプライン1では、担当フローであるフローAのトークン量がトークン格納部107から読み出される(処理(1)、処理(2)、図9のOP2、OP3)。このとき読み出されたトークン量は1000バイトであるとする。
パケットA1は、フローAに属する。このフローAには、パケットA2、パケットA3も属する。したがって、パイプライン1では、フローAのトークン量(1000バイト)から、パケットA1(100バイト),パケットA2(50バイト),パケットA3(50バイト)の合計パケット長(200バイト)が減算される(処理(3)、図9のOP4−OP6)。また、パイプライン1では、パケットA1、パケットA2、パケットA3のカラー判定が行われる。次に、パイプライン1では、トークン格納部107にトークン量(800バイト)が書き戻される(処理(4)、図9のOP7)。
その後、パケット到着処理部106にパケットA1が到着したときには、パケットA1についてのトークン減算及びカラー判定は、既に実行されているので、パケット到着処理部106は、カラー判定の結果をパケットA1の内部ヘッダに付与して出力する(図10のOP11−OP12)。パケットA2及びパケットA3が到着した時にも、同様に、パケット到着処理部106は、実行結果テーブルを参照し、カラー判定の結果をパケットA2及びパケットA3の内部ヘッダに付与して出力する。
上述のように、フローAに属するパケットA1,パケットA2,パケットA3のトークン減算及びカラー判定は、一つのパイプラインで処理される。同様に、パケットB1、パケットC1についても、それぞれ、一つのパイプラインで処理される。
<第1実施形態の作用効果>
図12は、第1実施形態の作用効果を説明するための図である。第1実施形態のパケット処理装置100では、入力パケットの情報が抽出され、パケット到着処理部106に入力される前に、所定数の入力パケットの情報(パケットグループ情報)が競合調停部105に通知される。競合調停部105は、該所定数のパケット(パケットグループ)に含まれるフローをフロー処理部106Aのパイプラインに割り当て、各フローに含まれるパケットのパケット情報を該当のパイプラインに渡す。フロー処理部106Aの各パイプラインは、パケット到着処理部106への到着前に、該所定数のパケットの情報(パケットグループ情報)を用いて、該所定数のパケットについてのトークン減算及びカラー判定を行う。これによって、トークン量の読出し、変更、書き戻しの一連の処理の競合を回避することができる。
また、フロー毎にトークン減算及びカラー判定が行われるため、使用されるパイプラインは、パケットグループに含まれるフローの数となる。図12に示される例では、オフセット0,1,3のパケットは同じフローAに属し、オフセット2のパケットはフローB,オフセット4のパケットはフローC,オフセット5のパケットはフローDに属する。したがって、図12に示される例では、フロー処理部106Aのパイプラインはパケットグループに含まれるフローの数と同じ4つが用いられる。
したがって、第1実施形態では、1フローに対して1つのパイプラインが用いられるの
で、1パケットに対して1パイプラインが用いられる場合のパイプライン間でのキャッシュデータの受け渡し及び各パイプラインにおけるキャッシュデータの保持がなくなる。また、1パケットに対して1パイプラインが用いられる場合のキャッシュデータを受け取る側のキャッシュデータの取捨選択も行われない。これらの、キャッシュデータの保持、受け渡し、取捨選択の処理に要する論理回路が使用されなくなるため、第1実施形態のパケット処理装置100では、回路規模を低減することができる。また、メモリ読出遅延によるパイプライン間のキャッシュデータの受け渡し及び取捨選択がないため、デバイスをより高クロックで、すなわち、高速に動作させることができる。
また、一つのパイプラインの演算処理(トークン読出しからトークン減算、カラー判定、トークンの書き戻しまでの処理)にかかる処理時間をXクロックとし、パケット到着間隔を2クロックとすると、パイプラインの数はX/2となる。したがって、パケットグループに含まれる最大のパケット数はX/2となる。第1実施形態において、遅延挿入部103として用いられるFIFOキューは、パケットグループに含まれるパケット数+先頭パケットからパケットグループ情報が付与されるパケットまでのパケット数分が溜められれば良い。そのため、遅延挿入部103として用いられるFIFOキューのメモリ規模は小さく、パケット処理装置100の回路規模は、低減される。なお、第1実施形態において説明された技術は、ポリサに限らず、例えば、スケジューラやシェーパなどのパイプライン処理を行うものに適用可能である。
<パケットグループ情報通知の変形例>
第1実施形態では、パケットグループ情報は、パケットグループの先頭パケットより前に存在するパケットの内部ヘッダに付与されて、競合調停部105に通知される。パケットグループ情報の通知方法は、これに限られず、例えば、以下に示される方法であってもよい。
図13は、パケットグループ情報通知の変形例の一つを示す図である。パケットグループ情報通知の変形例の一つは、制御パケットを用いる例である。この変形例では、パケット処理装置100は、パケット情報付与部102に代えて、制御パケット生成部108を備える。
制御パケット生成部108は、パケット情報抽出部101から入力される各パケットのパケット情報を、連続する所定数のパケット分まとめて、パケットグループ情報として、制御パケットに含める。制御パケット生成部108は、この制御パケットをパケットグループの先頭パケットからパケットグループに含まれるパケットの数と同じ数だけ前のパケットの前に挿入する。制御パケットには、パケットグループ情報に加えて、パケットグループの先頭パケットの位置情報が格納される。例えば、パケットグループの先頭パケットの位置情報は、制御パケットからパケットグループの先頭パケットまでに含まれるパケットの個数である。
制御パケットは、例えば、ヘッダに、パケットグループ情報を通知するためのパケットであることを示す識別情報が含まれており、この識別情報によって、競合調停部105は、制御パケットを識別することができる。
競合調停部105は、制御パケットを受信すると、パケットグループ情報を抽出し、第1実施形態で説明された処理を実行する。その後、制御パケットは、廃棄される。
図14は、パケットグループ情報通知の変形例の一つを示す図である。パケットグループ情報通知の変形例の一つは、信号線を用いて、パケットグループ情報を競合調停部105に通知する方法である。この変形例では、パケット処理装置100は、パケット情報付
与部102に代えて、パケット情報通知部109を備える。
パケット情報通知部109は、競合調停部105と複数の信号線で接続している。パケット情報通知部109は、パケット情報抽出部101から入力される各パケットのパケット情報を、連続する所定数のパケット分まとめてパケットグループ情報として、信号線に出力する。パケットグループ情報は、パケットグループの先頭パケットがパケット到着処理部106に到着するまでに該先頭パケットのカラー判定及びトークン減算が完了するために十分な時間をとって、該先頭パケットの出力よりも前に出力される。パケット情報通知部109と競合調停部105とを接続する信号線は、例えば、4本である。1本は、パケットを読み込むタイミングを制御するイネーブル信号(図中EnQ En)に用いられる。1本は、オフセットを通知するために用いられる。1本は、フローIDを通知するために用いられる。1本は、パケット長を通知するために用いられる。パケット情報通知部109は、この4つの信号が同期するように出力タイミングを制御する。
競合調停部105は、信号線からパケットグループ情報を受信すると、第1実施形態で説明された処理を実行する。
<第2実施形態>
第2実施形態では、パケット処理装置100は、パケットグループ情報を事前にトークン追加処理部104に通知することによって、トークン追加処理部104によるトークン追加処理と、パケット到着処理部106によるトークン減算処理との競合を回避する。第2実施形態では、第1実施形態と共通する説明は省略される。
図15は、トークン追加処理とパケット到着処理に伴うトークン減算処理との競合を説明するための図である。図15では、図中上側にトークン追加処理の流れが、図中下側にパケット到着処理の流れが示されている。
フロー毎のトークンバケツへのトークン追加処理は、所定の順番、所定の周期で行われる。例えば、トークン追加処理は、トークン追加対象のフローIDを1ずつインクリメントしながら行われる。トークン追加処理は、(1)該当トークン量の読出し、(2)トークン加算、(3)トークン量の書き戻しの流れで行われる。
一方、パケット到着処理は、これまでに説明されたように、(1)パケット到着、(2)該当トークン量の読出し、(3)トークン減算、(4)トークン量書き戻しの流れで行われる。
第2実施形態では、同じトークンバケツに対するトークン追加処理とトークン減算処理とが並行して発生することを、競合と称する。
図15では、フローAに対するトークン追加処理と、フローAに属するパケット到着処理に伴うトークン減算処理とが競合する場合が示される。図15に示される例では、フローAに対するトークン追加処理が先に開始されているので、トークン追加処理を実行するブロックの演算データ(キャッシュデータ)がパケット到着処理を実行するブロックに渡される。パケット到着処理を実行するブロックでは、使用するキャッシュデータの取捨選択が実行される。なお、パケット到着処理中に、同じフローのトークンバケツへのトークン追加処理が発生した場合には、パケット到着処理を実行するブロックの演算データ(キャッシュデータ)がトークン追加処理を実行するブロックに渡される。トークン追加処理を実行するブロックがキャッシュデータの取捨選択を行う。
このように、同じトークンバケツ(フロー)に対してトークン追加処理とパケット到着
処理とが競合すると、処理ブロック間でキャッシュデータの受け渡し、キャッシュデータの取捨選択が行われる。この処理ブロック間でのキャッシュデータの受け渡し、キャッシュデータの取捨選択により、演算時間が長くなったりして、デバイスの動作速度の向上を困難にさせる要因の一つとなっている。
第2実施形態のパケット処理装置のポリサでは、事前に入力されるパケットの情報を取得し、同じフローにおけるトークン追加処理とトークン減算処理との競合を予測し、この競合を回避する処理が実行される。以下、第2実施形態のパケット処理装置について詳しく説明する。
図16は、第2実施形態におけるパケット処理装置の処理の一例を示す図である。図16は、インタフェースカードのポリサにおけるトークン追加処理について示されている。競合調停部105b(図7)は、パケットグループ情報を取得すると、パケットグループに含まれる各パケットのフローIDと、トークン追加処理の周期とを比較し、競合しそうなフローを検出する。
図16に示される例では、トークン追加処理の周期が示されている。図16に示される例では、トークン追加処理がフローID#1→#2→#3→#4→#5の順番で実行される予定である。一方、入力されたパケットグループ情報から、到着予定のパケットのフローIDが、#100→#2→#100→#49→#100であることが検出される。この場合には、フロー#2のフローについて、トークン追加処理とパケット到着処理に伴うトークン減算処理とが競合することが予想される。そこで、第2実施形態では、競合調停部
105bは、フロー#2のフローのトークン追加処理の実行順を他のフローと入れ替えることによって、トークン追加処理とトークン減算処理との競合を回避する。図16に示される例では、フロー#2と、フロー#7と、のトークン追加処理の実行順が入れ替えられる。
第2実施形態において、パケット処理装置100は、ハードウェア構成は第1実施形態と同様である(図5、図6参照)。機能ブロックは、図7において、競合調停部105が競合調停部105bとなり、それ以外のブロックは第1実施形態と同様である。そのため、第1実施形態と異なる動作をする機能ブロックについて説明する。
第2実施形態では、競合調停部105bは、パケットグループ情報に基づいて、トークン追加処理部104によるトークン追加処理と、パケット到着処理部106によるトークン減算処理との競合の発生を予測する。トークン追加処理とトークン減算処理との競合の発生を予測した場合には、競合調停部105bは、競合の発生が予測されるフローと予測されないフローとのトークン追加処理の実行順を入れ替える。トークン追加処理の実行順は、後述のトークン追加テーブルに格納される。
トークン追加処理とトークン減算処理との競合の予測は、例えば、以下のように行われる。例として、図16に示される例の順番で、トークン追加処理、および、パケット到着が行われるとする。また、例として以下の条件を想定する。
・パケット間隔処理:2クロック
・パイプライン段数:6段(パケットグループに含まれるパケット数6個)
・1パイプライン当たりの演算時間:12クロック
・1フロー当たりのトークン追加処理の演算時間:4クロック
上記のような想定のもとでは、1つのパケットグループに含まれるパケットの最大演算時間は、12クロック+2クロック×(6−1)段=22クロックである。一方、1つのパケットグループの演算終了までにトークン追加処理が実行されるフローは、4クロック×6フロー=24クロックより、6フローである。すなわち、この6フローについて競合
の可能性がある。
例えば、図16に示される例のように、
・到着予定パケットのフローID:#100,#2,#100,#49,#100,#10
・到着予定のパケットグループの到着処理中にトークン追加処理が実行されるフローID:#1,#2,#3,#4,#5,#6
である場合には、双方に存在するフロー#2のフローが競合発生の可能性がある。この場合、フロー#7のフローは、競合の可能性がないので、フロー#2のフローとトークン追加処理の順番を入れ替えることができる。
図17は、トークン追加テーブルの例を示す図である。トークン追加テーブルは、トークン追加処理部104がトークン追加処理を実行するフローの順番を格納するテーブルである。トークン追加テーブルは、例えば、トークン追加処理部104に対応するハードウェアに備えられるメモリに格納される。トークン追加テーブルは、例えば、フローID,入替フラグ,入替フローIDのフィールドを備える。フローIDには、フローIDが小さい順で並べられている。入替フラグには、該当のフローに、トークン追加処理の順番の入れ替えが発生していることを示すフラグが格納される。入替フラグにフラグがセットされている場合には、トークン追加処理の順番の入れ替えが発生していることが示される。入替フローIDには、トークン追加処理の順番の入れ替え後のフローIDが格納される。
競合調停部105bは、パケットグループ情報に基づいて、トークン追加処理とトークン減算処理との競合の発生が予測される場合には、トークン追加処理の実行順を入れ替え、トークン追加テーブルに記録する。具体的には、競合調停部105bは、トークン追加処理の実行順を入れ替えるフローの入替フラグをセットし、入替フローIDを入れ替えるフローのIDにする。
トークン追加処理部104は、トークン追加テーブルを上から順番に参照し、参照下フローIDに入替フラグがセットされている場合には、入替フローIDが示すフローのトークン追加処理を実行する。
図18は、競合調停部105bの、トークン追加処理とトークン減算処理との競合の発生の予測処理のフローチャートの一例である。図18に示されるフローチャートは、競合調停部105bがパケットグループ情報を取得すると開始される。
OP11では、競合調停部105bは、パケットグループ情報からパケットグループに含まれる各パケットのフローIDを抽出する。次に処理がOP12に進む。
OP12では、競合調停部105bは、パケットグループに含まれるパケットの最大演算時間中に、パケットグループ情報から抽出されたフローIDと同じフローIDのトークン追加処理の実行の予定があるか否かを判定する。これは、トークン追加処理とトークン減算処理との競合の発生を予測するための処理である。パケットグループに含まれるパケットの最大演算時間中に、パケットグループ情報から抽出されたフローIDと同じフローIDのトークン追加処理の実行の予定がある場合には(OP12:Yes)、競合の発生が予測される。この場合には、処理がOP13に進む。競合の発生が予測されるのは、パケットグループに含まれるパケットの最大演算時間中にトークン追加処理の実行の予定がある、パケットグループ情報から抽出されたフローIDと同じフローIDのフローである。
パケットグループに含まれるパケットの最大演算時間中に、パケットグループ情報から
抽出されたフローIDと同じフローIDのトークン追加処理の実行の予定がない場合には(OP12:No)、トークン追加処理とトークン減算処理の競合の発生は予測されない。この場合には、トークン追加処理の実行順の入れ替えは行われず、図18に示される処理が終了する。
OP13では、競合調停部105bは、競合発生の可能性が検出されたフローIDと、競合発生の可能性が検出されないフローIDと、のトークン追加処理の実行順を入れ替える。具体的には、競合調停部105bは、トークン追加テーブルにおいて、競合発生の可能性が検出されたフローIDの入替フラグをセットし、入替フローIDを競合発生の可能性が検出されないフローIDに書き換える。また、競合調停部105bは、トークン追加テーブルにおいて、前述の競合発生の可能性が検出されないフローIDの入替フラグをセットし、入替フローIDを前述の競合発生の可能性が検出されたフローIDに書き換える。その後、図18に示される処理が終了する。
図19Aは、トークン追加処理部104が実行するトークン追加処理のフローチャートの一例である。図19Aに示されるフローチャートは、所定の周期で実行される。
OP21では、トークン追加処理部104は、参照フローIDをインクリメントする。参照フローIDは、トークン追加テーブルの参照するエントリを示すフローIDである。また、トークン追加処理部104は、トークン追加対象のフローID=参照フローIDに設定する。次に処理がOP22に進む。例えば、参照フローIDの初期値は0である。
OP22では、トークン追加処理部104は、トークン追加テーブルにおいて、参照フローIDのエントリに入替フラグがセットされているか否かを判定する。参照フローIDのエントリに入替フラグがセットされていない場合には(OP22:No)、処理がOP25に進む。OP25では、トークン追加処理部104は、トークン追加対象のフローIDである参照フローIDのトークンバケツにトークンを追加する。その後、図19Aに示される処理が終了する。
参照フローIDのエントリに入替フラグがセットされている場合には(OP22:Yes)、処理がOP23に進む。OP23では、トークン追加処理部104は、参照フローIDのエントリの入替フラグをリセットする。これによって、現参照フローIDのフローに、次回、トークン追加処理が実行されるときには、順番の入替なく、現参照フローIDのフローがそのままトークン追加対象のフローとなる。次に処理がOP24に進む。
OP24では、トークン追加処理部104は、トークン追加対象のフローIDを参照フローIDから入替フローIDに変更する。その後、OP25において、トークン追加処理部104は、トークン追加対象のフローIDである入替フローIDのトークンバケツにトークンを追加する。これによって、トークン追加処理の実行順が変更されることになる。その後、図19Aに示される処理が終了する。なお、参照フローIDは、フローIDの最大値になると、OP21におけるインクリメントで、0にリセットされる。
図19Bは、トークン追加処理実行中のトークン追加テーブルの例を示す図である。図19Bに示されるトークン追加テーブルでは、フロー#2とフロー#7との、トークン追加処理の実行順が入れ替えられている。すなわち、フロー#2のエントリの入替フラグがセットされており、該エントリの入替フローIDは#7である。また、フロー#7のエントリの入替フラグがセットされており、該エントリの入替フローIDは#2である。以下、図19Bに示されるトークン追加テーブルのフロー#2のエントリについて、トークン追加処理が実行される場合について説明する。
トークン追加処理部104は、トークン追加処理の周期になると、参照フローID=#1をインクリメントして、参照フローID=#2に変更する(OP21)。この時点では
、トークン追加対象のフローIDは、参照フローID=#2である。トークン追加テーブルのフローID=#2のエントリの入替フラグがセットされているので(OP22:Yes)、トークン追加処理部104は、トークン追加テーブルのフローID=#2のエントリの入替フラグをリセットする(OP23)。これによって、次回、フロー#2が参照フローとなったときには、フローID=#2のエントリにおいて、入替フローIDのフィールドが示すフローではなく、フローIDのフィールドが示すフロー#2がトークン追加対象となる。
トークン追加テーブルのフローID=#2のエントリの入替フローID=#7であるので、トークン追加処理部104は、トークン追加対象のフローIDを参照フローIDである#2から入替フローIDである#7に変更する(OP24)。続いて、トークン追加処理部104は、フロー#7のトークンバケツにトークンを追加する(OP25)。
以降、トークン追加処理の周期になると、参照フローIDがインクリメントされて#3となり(OP21)、OP21からOP25の処理が実行される。
<第2実施形態の作用効果>
第2実施形態では、パケットグループがパケット到着処理部106に入力される前に、該パケットグループのパケットグループ情報が競合調停部105bに通知される。競合調停部105bは、通知されたパケットグループ情報に基づいて、トークン追加処理部104によるトークン追加処理とパケット到着処理部106によるトークン減算処理との競合の発生を予測する。該競合の発生が予測される場合には、競合調停部105bは、該競合の発生が予測されるフローのトークン追加処理の実行順を、他の該競合の発生が予測されないフローと入れ替える。これによって、第2実施形態では、パケット処理装置100は、トークン追加処理部104によるトークン追加処理とパケット到着処理部106によるトークン減算処理との競合の発生を回避することができる。
該競合の発生を回避可能であることにより、トークン追加処理部104とパケット到着処理部106との間のキャッシュデータの受け渡し及び取捨選択がなくなる。これによって、回路規模を小さく抑えることができる。また、デバイスをより高クロックで動作させることができる。なお、第2実施形態で説明された技術は、ポリサだけでなく、例えば、スケジューラ、シェーパ等のトークンバケツを利用する技術に適用可能である。また、第2実施形態においても、第1実施形態のパケットグループ情報通知の変形例を適用可能である。
<第3実施形態>
第3実施形態では、第1実施形態及び第2実施形態と共通する説明は省略される。
図20は、スケジューラの動作の一例を示す図である。スケジューラでは、複数のキューが備えられており、各キューには優先度が割り当てられている。スケジューラに到着するパケットには、それぞれ、例えば、同パケット処理装置の入力側のIFカードや、他の装置によって、優先度のクラスが設定されおり、各パケットはクラスに応じたキューに格納される。スケジューラは、例えば、優先度の高いキューに格納されるパケットから出力を行う。例えば、優先度が高く設定されるパケットには、音声パケットがある。
例えば、(1)サイズが大きく、優先度が低いパケットの出力中に、(2)優先度の高いパケットがキューに到着した場合には、優先度に関わらず、優先度の低いパケットの出力が終了するまで、優先度の高いパケットは出力されない。これによって、優先度の高い
パケットの遅延が大きくなることがある。しかしながら、優先度の高いパケットは、音声パケット等の遅延に敏感なデータを運んでいる場合があり、優先度の低いラージパケットの出力待ちによる遅延は影響が大きい。
第3実施形態では、パケット処理装置のスケジューラ又はシェーパが、パケットグループ情報を事前に取得し、パケットグループ情報に基づいて、優先度の高いパケットの、優先度の低いパケットの出力待ちを回避するための処理を実行する。すなわち、第3実施形態では、パケット処理装置は、パケットグループ情報を事前に取得し、パケットグループ情報に基づいて、優先度の高いパケットの読出しと優先度の低いパケットの読出しとの競合を回避するための処理を実行する。
図21は、第3実施形態のパケット処理装置の動作の一例を説明するための図である。第3実施形態では、パケット処理装置は、パケットグループ情報に基づいて、優先度の高いパケットの前の優先度が低いラージパケットの存在を検出する。パケット処理装置は、パケット読出しのときに、(1)検出された該優先度の低いラージパケットの読出しを一時停止し、(2)後から優先度の高いキューに到着する優先度の高いパケットを先に読み出す。これによって、優先度の高いパケットの、優先度の低いパケットの出力待ちによる遅延を抑えることができる。
第3実施形態のパケット処理装置のハードウェア構成は、第1実施形態と同様であるため、説明を省略する。
図22は、QoS回路16の機能ブロック図の一例である。図22では、QoS回路16のうち、出力側のスケジューラの機能を果たすブロックについて示されている。QoS回路16は、パケット情報抽出部101,パケット情報付与部102,遅延挿入部103,トークン追加処理部104,競合調停部105c,パケットスケジューリング部110を含む。これらは、それぞれ電気又は電子回路,FPGA,ASIC等によって実現される。これらの機能ブロックは一例であり、適宜、組み合わせて複数の機能ブロックを1つの機能ブロックとしてもよい。また、これらの機能ブロックは、全てを含む1つの回路として構成されてもよい。また、2つ以上の機能ブロックを組み合わせて複数のブロックを作り、各ブロックを1つのFPGAやASICにより構成してもよい。例えば、パケット情報抽出部101,パケット情報付与部102,遅延挿入部103を1つのFPGAやASICにより構成し、トークン追加処理部104,競合調停部105c,パケットスケジューリング部110を1つのFPGAやASICにより構成してもよい。パケット情報付与部102,遅延挿入部103,トークン追加処理部104については、第1実施形態と同様であるため、説明を省略する。
パケット情報抽出部101は、入力される各パケットのパケット情報を抽出する。第3実施形態では、パケット情報抽出部101は、パケット情報として、例えば、キューID,パケット長,クラス情報を抽出する。キューIDは、パケットが格納されるキューの識別情報である。キューIDは、例えば、内部ヘッダに格納されている。クラス情報は、例えば、同パケット処理装置の入力側IFにおいて付与され、優先度のクラスを示す情報である。クラス情報は、例えば、パケットヘッダ内のType of Serviceフィールド,内部ヘッダ等に格納されている。
パケット情報抽出部101によって抽出された各パケットのパケット情報は、パケット情報付与部102に出力される。パケット情報付与部102では、所定数の連続するパケットのパケット情報をまとめてパケットグループ情報とし、該所定数の連続するパケットよりも前に位置する所定のパケットの内部ヘッダに付与して、競合調停部105cにパケットグループ情報を通知する。
パケットスケジューリング部110は、スケジューラとして機能する機能ブロックである。パケットスケジューリング部110は、複数のキューを有し、各キューにはそれぞれ優先度のクラスが割り当てられている。パケットスケジューリング部110は、到着パケットに付与されているクラス情報に基づいて、到着パケットを対応するキューに格納し、優先度の高いクラスのキューから優先してパケットを出力する。
競合調停部105cは、パケットグループ情報を取得すると、優先度の低いラージパケットの読み出し中における優先度の高いパケットの到着を検出する。すなわち、競合調停部105cは、優先度の高いパケットの読み出し処理と優先度の低いパケットの読出し処理との競合の発生を予測する。該競合の発生が予測された場合には、競合調停部105cは、優先度の低いパケットの読出しを一時停止し、優先度の高いパケットを優先して読み出すように、パケットスケジューリング部110に指示する。詳細には、以下の図23で
説明する。
図23は、競合調停部105cのスケジューリング処理のフローチャートの一例である。図23に示されるフローチャートは、例えば、繰り返し、又は、所定の周期で実行される。また、図23に示されるフローチャートは、パケットスケジューリング部110が、クラスA、クラスB、クラスCの3つのクラスのキューを備える場合のパケットスケジューリング処理を示す。優先度は、クラスA>クラスB>クラスCであるとする。
OP31では、競合調停部105cは、最も優先度の高いクラスAのキューに読出し可能なパケットが格納されているか否かを判定する。クラスAのキューに読出し可能なパケットが格納されている場合には(OP31:Yes)、処理がOP32に進む。OP32では、競合調停部105cは、クラスAのキューに格納されている先頭パケットの読出しを行うようにパケットスケジューリング部110に指示する。これにより、図23に示される処理が終了し、OP31から繰り返し実行される。
クラスAのキューに読出し可能なパケットが格納されていない場合には(OP31:No)、処理がOP33に進む。OP33では、競合調停部105cは、クラスAの次に優先度が高いクラスBに読出し可能なパケットが格納されているか否かを判定する。
クラスBのキューに読出し可能なパケットが格納されている場合には(OP33:Yes)、処理がOP34に進む。OP34では、競合調停部105cは、クラスBのキューに格納されている先頭パケットの読出しにかかる時間(以降、読出時間)を算出する。次に、処理がOP35に進む。
OP35では、競合調停部105cは、クラスBのキューの先頭パケットの読出時間中に、クラスAのパケットの到着予定があるか否かを判定する。クラスAのパケットの到着予定は、パケットグループ情報より取得される。クラスBのキューの先頭パケットの読出時間中にクラスAのパケットの到着予定がある場合には(OP35:Yes)、クラスBのキューの先頭パケットの読出しにより、到着予定のクラスAのパケットの読出しの遅延の増大が予想される。そのため、処理がOP40に進み、競合調停部105cは、クラスBのキューにパケットが格納されているものの、読出対象のパケット無しと判定し、クラスBのキューに格納されるパケットの読出しを一時中止するようパケットスケジューリング部110に指示する。この状態は、すなわち、クラスAのパケットの到着待ちの状態である。これにより、図23に示される処理が終了し、OP31から繰り返し実行される。このあと、クラスAのパケットが到着し、クラスAのキューに格納されると、該クラスAのパケットが読み出される(OP31、OP32)。これによって、クラスAのパケットは、優先度の低いパケットの読出しによる遅延の増大なく、読み出されることができる。
クラスBのキューの先頭パケットの読出時間中にクラスAのパケットの到着予定がない場合には(OP35:No)、処理がOP36に進む。OP36では、競合調停部105cは、クラスBのキューの先頭パケットを読み出すようにパケットスケジューリング部110に指示する。これにより、図23に示される処理が終了し、OP31から繰り返し実行される。
OP33において、クラスBのキューに読出し可能なパケットが格納されていない場合には(OP33:No)、クラスAのキューにもクラスBのキューにもパケットが格納されていないことが示される。次に、処理がOP37に進み、OP37では、競合調停部105cは、クラスBの次に優先度が高いクラスCに読出し可能パケットが格納されているか否かを判定する。
クラスCに読出し可能パケットが格納されている場合には(OP37:Yes)、処理がOP38に進む。OP38では、競合調停部105cは、クラスCのキューに格納されている先頭パケットの読出しにかかる時間(以降、読出時間)を算出する。次に、処理がOP39に進む。
OP39では、競合調停部105cは、クラスCのキューの先頭パケットの読出時間中に、クラスAのパケットの到着予定があるか否かを判定する。クラスCのキューの先頭パケットの読出時間中にクラスAのパケットの到着予定がある場合には(OP39:Yes)、クラスCのキューの先頭パケットの読出しにより、到着予定のクラスAのパケットの読出しの遅延の増大が予想される。そのため、処理がOP40に進み、競合調停部105cは、クラスCのキューにパケットが格納されているものの、読出対象のパケット無しと判定し、クラスCのキューに格納されるパケットの読出しを一時中止するようパケットスケジューリング部110に指示する。この状態は、クラスAのパケットの到着待ちの状態である。これにより、図23に示される処理が終了し、OP31から繰り返し実行される。
クラスCのキューの先頭パケットの読出時間中にクラスAのパケットの到着予定がない場合には(OP39:No)、処理がOP41に進む。OP41では、競合調停部105cは、クラスAのキューにも、クラスBのキューにもパケットがなく、さらに、クラスAのキューにパケット到着の予定もないので、クラスCのキューの先頭パケットを読み出すようパケットスケジューリング部110に指示する。これにより、図23に示される処理が終了し、OP31から繰り返し実行される。
OP37において、クラスCのキューに読出し可能なパケットが格納されていない場合には(OP37:No)、クラスA、クラスB、クラスCのいずれのキューにもパケットが格納されていないことが示される。次に、処理がOP42に進み、OP42では、競合調停部105cは、読出対象のパケットなしと判定する。これにより、図23に示される処理が終了し、OP31から繰り返し実行される。
なお、OP39において、クラスBのパケットの到着予定の有無を判定し、クラスBの到着予定がある場合には、処理がOP40に進むようにすることで、クラスCのパケットの読出しによる、クラスBのパケットの読出し遅延の増大を抑えることもできる。
<第3実施形態の作用効果>
第3実施形態では、パケット処理装置は、パケットスケジューリング部110に入力されるパケットの情報を、パケットスケジューリング部110に入力される前に、取得することによって、優先度の低いパケットによる優先度の高いパケットの遅延の増大を抑えることができる。また、第3実施形態においても、第1実施形態のパケットグループ情報通知の変形例を適用可能である。
<その他>
上述の第1実施形態、第2実施形態、及び第3実施形態は、適宜、全実施形態又は一部の実施形態を組み合わせて実施することも可能である。