以下、本発明の実施例について、図面を参照して説明する。
本実施例におけるパケット処理の概要を以下に示す。
図1Aは、従来のフローを識別してパケットを分散処理部に振り分ける場合のパケット処理の概要を示す説明図である。
例えば、同一フローのパケットが到着した場合、パケット通信装置の振分処理はパケットのフローを識別して、同一のフローは同じ分散処理をするようパケットを振分ける。この場合、同一フローのパケット処理の性能は分散処理(例えば#1)の性能に依存する。
図1Bは、本実施例1のパケット処理の概要を示す説明図である。
例えば、同一フローのパケットが到着した場合、本実施例のパケット通信装置は、振分処理がフローを識別せず到着順にラウンドロビンでパケットを分散処理(#1〜#K)に振分ける。本実施例のパケット通信装置は、各分散処理(#1〜#K)に振分けられたパケットの情報を集中処理部に集約し、同一フローのパケットを纏めて処理する。
本実施例におけるパケット到着間隔とパケット処理時間(タイミング)との関係の概要を、図33A及び図33Bを用いて以下に示す。
図33Aは、従来技術のフローを識別してパケットを分散処理部に振り分ける場合のパケット処理において、同一フローのパケットが複数同時に振分処理に到着する際のパケット処理のタイミングを示す説明図である。
簡単化のため、例として図33Aでは、振分処理は複数のパケットのヘッダを同時に解析してフローを特定し、1つの分散処理部は1パケット毎にパケットを1clkで処理(本実施例では統計処理)可能とした場合において、振分処理に同一フローのパケットが2つずつ同時に到着する例を示す。
また、図33A、及び、後述する図33Bと図33Cにおいて、振分処理部が最初に受信する入力パケットを第1のパケット(S1)、第1のパケットと同時に受信する入力パケットを第2のパケット(S2)、第2のパケットよりも1clk後に受信する入力パケットを第3のパケット(S3)、第3のパケットと同時に受信する入力パケットを第4のパケット(S4)と記載する。図33において、第1のパケット、第2のパケット、第3のパケット、及び第4のパケットのフローIDの値は、いずれも“10”である。
従来技術では、図33Aに示すように、振分処理は、第1のパケットと第2のパケットを同時に受信すると、ヘッダを解析してフローを識別する(T3301)。第1のパケットと第2のパケットは、いずれもフローIDの値が“10”であるため、同じ分散処理部(例えば#1)に振分けられる。従来技術の分散処理部は、1clkで1パケット毎にパケットを処理するため、振分処理は1パケット毎に第1のパケットと第2のパケットをT3302及びT3303のタイミングで分散処理部(#1)へ振分ける。分散処理部は、T3302において、第1パケットの統計処理を開始し、T3303において第2パケットの統計処理を開始する。また、振分処理は、第3のパケットと第4のパケットを受信すると、ヘッダを解析してフローを識別する(T3302)。第3のパケットと第4のパケットは、いずれもフローIDの値が“10”であるため、第1パケット及び第2パケットと同じ分散処理部(例えば#1)に振分けられるが、第1のパケット及び第2のパケットの処理の待ち合わせのため、振分処理は、第3のパケットと第4のパケットをT3304及びT3305のタイミングで分散処理部(#1)へ振分ける。(第3のパケットのヘッダ解析の処理タイミングT3302の1クロック後のT3303では、第2パケットの統計処理を実行中であるため、第3のパケットの統計処理は実行出来ない。)分散処理部は、T3304において、第3パケットの統計処理を開始し、T3305において第4パケットの統計処理を開始する。従って、従来では、同一フローのパケットが複数同時に到着すると、前に到着したパケット処理が終了しないうちに、次に処理すべきパケットが到着するため、パケット処理を正常に実行できずオーバーフローが発生する場合がある。
図33Bは、本実施例1のパケット処理において、複数の同一フローのパケットが同時に到着する際のパケット処理のタイミングを示す説明図である。
本実施例では、振分処理は、第1のパケットと第2のパケットを受信すると、第1のパケットと第2のパケットをそれぞれ別の分散処理部(例えば#1と#2)に振分ける(T3301)。フローを識別しないため、ここでは処理遅延なしとする。
T3301のタイミングにおいて、分散処理部(#1)は第1のパケットのヘッダを解析してフローを識別し、分散処理部(#2)は第2のパケットのヘッダを解析してフローを識別する。その後、各分散処理部は、識別したフローIDやパケット長などの情報を集中処理部に転送する。集中処理部は、各分散処理部(#1と#2)から取得した情報をもとに、第1のパケットと第2のパケットに関する統計処理を纏めて実行する(T3302)。例えば、第1のパケット長、第2のパケット長とも100バイトの場合、受信バイト数として200バイトをカウントする。図33Aの分散処理部は、1パケット毎にパケットを処理しているため、1パケット分を1クロックで統計処理していたが、図33Bの集中処理部は、第1のパケットと第2のパケットに関する統計処理を纏めて実行するため、第1のパケットと第2のパケットの統計処理を1クロックで実行できる。
また、振分処理は、第3のパケットと第4のパケットを受信すると、振分処理は同様に、第3のパケットと第4のパケットをそれぞれ別の分散処理部(例えば#3と#4)に振分ける(T3302)。
T3302のタイミングにおいて、分散処理部(#3)は第3のパケットのヘッダを解析してフローを識別し、分散処理部(#4)は第4のパケットのヘッダを解析してフローを識別する。その後、各分散処理部は、識別したフローIDやパケット長などの情報を集中処理部に転送する。集中処理部は、各分散処理部(#3と#4)から取得した情報をもとに、第3のパケットと第4のパケットに関する統計処理を纏めて実行する(T3303)。図33Aにおいては、T3303のタイミングは第2のパケットの統計処理に割り当てられていたため、第3のパケットの統計処理はT3304に割り当てられていたところ、図33Bにおいては、T3303のタイミングで第3のパケット及び第4のパケットの統計処理を実行できる。
従って、本実施例では、集中処理部にパケットの情報を集約し、振分処理に同時に到着した複数の同一フローのパケットを纏めて処理することで、同一フローの複数のパケットが同時に到着した場合でも、統計カウント機能のようにパケットが到着する毎に同じフローの情報を更新する必要がある機能をオーバーフローを発生させることなく実現することが出来る。
以下、本実施例1について図2から図18を用いて説明する。なお、以下に述べる実施例1は本発明の実施例の一つであって、本発明を制限するものではない。
実施例1では、統計カウント機能に本発明を適用する。実施例1では、統計カウント機能の統計情報として、受信パケット数、及び、受信バイト数をカウントする。
図2は、本実施例1のパケット通信装置2の物理的な構成及び論理回路202を示すブロック図である。
本実施例のパケット通信装置2は、パケットを他のパケット通信装置へ転送する装置である。パケット通信装置2は、複数のネットワークインタフェースボード(NIF)(200−1〜200−M)、及び、スイッチ部206を備える。
NIF200は、ネットワークからパケットを受信し、ネットワークへパケットを送信するためのインタフェースである。スイッチ部206は、各NIF200に接続される装置であり、NIF200から受信したパケットを、パケットを送信すべきNIF200に振り分ける装置である。
各NIF200は、入出力回線インタフェース201、論理回路202、SWインタフェース205、及びNIF管理部208を備える。
入出力回線インタフェース201は、通信ポートである。パケット通信装置2は、入出力回線インタフェース201及びネットワークを介して、他のパケット通信装置と接続する。実施例1における入出力回線インタフェース201は、イーサネット(登録商標)用の回線インタフェースである。
SWインタフェース205は、スイッチ部206に接続するための装置である。
NIF管理部208は、例えば、CPU等のプロセッサである。NIF管理部208は、論理回路202における処理を制御する。
論理回路202は、本実施例のパケットに対する処理を行う回路である。論理回路202は、少なくとも一つのメモリ及び少なくとも一つの演算装置(例えば、プロセッサ)を備える。
論理回路202は、入力パケット制御部203、出力パケット制御部204等のパケット処理部を有し、設定レジスタ207を備える。
パケット通信装置2が受信したパケットは、入出力回線インタフェース201、入力パケット制御部203、SWインタフェース205、スイッチ部206、SWインタフェース205、出力パケット制御部204、及び、入出力回線インタフェース201の順に送信される。
論理回路202が有する各処理部は、集積回路等の物理的な装置によって実装されてもよいし、少なくとも一つのプロセッサによって実行されるプログラムによって実装されてもよい。また、複数の処理部(例えば、入力パケット制御部203及び出力パケット制御部204)が一つの装置又はプログラムによって実装されてもよいし、一つの処理部が複数の装置又は複数のプログラムによって実装されてもよい。
NIF管理部208は、設定レジスタ207を制御する。設定レジスタ207は、データを一時的に格納する記憶領域を有し、論理回路202に備わる各処理部のレジスタ値を保持する。
設定レジスタ207は論理回路202を介して論理回路202に備わる全ての処理部と接続する。なお、以下において、設定レジスタ207の処理内容についての説明を省略するが、論理回路202が有する全ての処理部は、設定レジスタ207を用いて処理を実行する。
入出力回線インタフェース201は、受信したパケット4に後述する装置内ヘッダ3を付加する。
図4は、本実施例1の通信において用いられるパケット4のフォーマットを示す説明図である。図4に示すパケット4のフォーマットは一例であり、本実施例において用いられるパケットは、いかなる情報を含んでもよい。例えば、MACアドレスの代わりに、IPアドレスを含んでもよい。パケット4は、宛先MACアドレス401、送信元MACアドレス402、VLANヘッダ403、イーサタイプ値404、ペイロード405、及び、フレームチェックシーケンス(FCS)406を含む。宛先MACアドレス401、又は、送信元MACアドレス402には、パケット通信装置2のMACアドレスが設定される。VLANヘッダ403には、フローの識別子となるVLAN IDが設定される。
なお、ペイロード405にMPLSヘッダ又は他のプロトコルのヘッダが設定され、MPLSラベル値などをフローの識別子として設定されてもよい。フレームチェックシーケンス(FCS)406には、フレームの誤りを検出するための値が設定される。
図3は、本実施例1のパケット4に付加される装置内ヘッダ3のフォーマットを示す説明図である。装置内ヘッダ3は、出力ネットワークインタフェースボード識別子(出力NIF ID)301、フローID302、及び、パケット長303を含む。出力NIF ID301は、内部ルーティング情報である。本実施例の内部ルーティング情報とは、パケット通信装置2が受信したパケット4を、パケット通信装置2のいずれのNIF200のポートから出力するかを示す情報である。スイッチ部206は、内部ルーティング情報に従い、スイッチ部206に送信された入力パケットを特定のNIF200の特定のSWインタフェース205に転送する。
入出力回線インタフェース201は、受信したパケット4をパケット通信装置2において処理するため、受信したパケット4に装置内ヘッダ3を付加する。装置内ヘッダ3が付加され、入出力回線インタフェース201からスイッチ部206に向けて送信されるパケット4を、以降において、入力パケットと記載する。
入出力回線インタフェース201は、受信したパケット4に装置内ヘッダ3を付加する際、出力NIF ID301、及び、フローID302にnull値等の値を格納する。すなわち、入出力回線インタフェース201は、出力NIF ID301、及び、フローID302に格納される値を決定しない。出力NIF ID301、及び、フローID302には、入力パケット制御部203によって値が格納される。
入出力回線インタフェース201は、受信したパケット4のパケット長を取得し、装置内ヘッダ3のフレーム長303に、取得されたパケット長を格納する。その後、入出力回線インタフェース201は、パケット4を入力パケット制御部203に送信する。
入力パケット制御部203は、入出力回線インタフェース201から受信したパケット4に関して、後述するパケット処理を実行する。本パケット処理時に、装置内ヘッダ3の出力NIF ID301及びフローID302を追加する。
パケット処理後、入力パケット制御部203は、入力パケットをSWインタフェース205に送信する。SWインタフェース205は、受信した入力パケットをスイッチ部206に転送する。
スイッチ部206は、各NIF200のSWインタフェース205から入力パケットを受信した後、入力パケットの出力NIF ID301を参照することによって、受信した入力パケットの転送先であるNIF200を特定する。次に、スイッチ部206は、特定されたNIF200に対応するSWインタフェース205に、受信した入力パケットを、出力パケットとして転送する。
なお、本実施例において、スイッチ部206から入出力回線インタフェース201へ送信されるパケット4を出力パケットと記載する。
SWインタフェース205は、受信した出力パケットを出力パケット制御部204に転送する。
前述の例では、入力パケット制御部203がパケット処理を実行した。しかし、出力パケット制御部204が、入力パケット制御部203の代わりにパケット処理を実行してもよい。
出力パケット制御部204がパケット処理を実行する場合、パケット処理後、出力パケット制御部204は、出力パケットを入出力回線インタフェース201に送信する。
出力パケット制御部204がパケット処理を実施しない場合、出力パケット制御部208は、SWインタフェース205から受信した出力パケットを、そのまま入出力回線インタフェース201に転送する。
入出力回線インタフェース201は、受信した出力パケットから装置内ヘッダ3を除去する。その後、入出力回線インタフェース201は、図4に示すパケット4のフォーマットによって、出力パケットを他の装置へ転送する。
図5は、本実施例1の入力パケット制御部203の論理的な構成を示すブロック図である。
入力パケット制御部203は、振分部502、複数の分散処理部503(503−1〜503−N)(Nは任意の自然数)、多重部504、及び、集中処理部505を備える。
振分部502は、入力パケット制御部203が入出力回線インタフェース201から入力パケットを受信した場合、後述する振分け処理S950を実行する処理部である。振分部502は、振分け処理S950において、パケット処理を実行する分散処理部503を、分散処理部503−1〜分散処理部503−Nから決定する。
分散処理部503は、後述するパケット処理を実行する。分散処理部503は、本パケット処理時に、集中処理部505にフローIDやパケット長などのパケット情報を転送する。パケット処理後、分散処理部503は、入力パケットを多重部504に送信する。
集中処理部505は、後述するパケット処理を実行する。複数の分散処理部503(503−1〜503−N)から転送されるパケット情報を集約して処理し、後述する統計情報テーブル704を更新する。
多重部504は、各分散処理部503から受信したパケットを多重し、到着順にSWインタフェース205に送信する。
本実施例において、入力パケット制御部203がパケット処理に要する時間はあらかじめ定められる。
さらに、本実施例において、分散処理部503の数Nは、入力パケット制御部203において受信するパケット到着間隔(複数のパケットが1clk以内に同時到着する場合はそのパケット数)と分散処理部503のパケット処理時間とに基づいて決定される。なお、最短パケット到着間隔は、パケット通信装置2が接続される回線に従って、あらかじめ定められる値である。
例えば、入力パケット制御部203に1clk以内に2つのパケットが同時に到着し、分散処理部503のパケット処理時間が20clkである場合、同時到着パケット数に分散処理部503のパケット処理時間を乗算(余りは繰上げ)した結果は“40”である。このため、分散処理部503の数Nは“40”にあらかじめ決定される。
図6は、本実施例1の分散処理部503の論理的な構成を示すブロック図である。
分散処理部503は、入力ヘッダ解析部601、入力ヘッダ処理部602、及び、出力判定処理部603を備える。
入力ヘッダ解析部601は、振分部502から入力パケットを受信した場合、後述するヘッダ解析処理S1050を実行する処理部である。入力ヘッダ解析部601は、ヘッダ解析処理S1050において、パケット4のフローを識別し、集中処理部505が処理する時に必要となるパケット情報を転送し、ヘッダ処理部602へパケットを転送する。
入力ヘッダ処理部602は、入力ヘッダ解析部601から入力パケットを受信した場合、入力ヘッダ解析部601で識別されたフローに従ってVLANタグの処理を実行する。VLANタグの処理とは、例えば、VLANタグの透過、変換、付与及び削除である。すなわち、VLANタグの処理とは、入力パケットのVLANヘッダを、パケット通信装置2から出力されるパケットのVLANヘッダに変換する処理である。入力ヘッダ処理部602は、VLANタグの処理において、宛先MACアドレス401及び送信元MACアドレス402を、入出力回線インタフェース201に設定される値によって上書きしてもよいし、あらかじめ登録されていたフロー毎の値によって上書きしてもよい。VLANタグを処理した後、入力ヘッダ処理部602は、入力パケットを出力判定処理部603に送信する。この時、入力ヘッダ処理部602は、後述する集中処理部505の演算終了通知のタイミングと同じタイミングでパケットを出力判定処理部603に送信する。
出力判定処理部603は、入力ヘッダ処理部602から入力パケットを受信した場合、後述する出力判定処理S1150を実行する処理部である。出力判定処理部603は、出力判定処理S1150において、集中処理部505の演算終了と同時に、多重部504へパケットを転送する。
図7は、本実施例1の集中処理部505の論理的な構成を示すブロック図である。
集中処理部505は、調停部701、演算フロー管理リスト702、演算部703(703−1〜703−N)(Nは任意の自然数)、統計情報テーブル704を備える。
調停部701は、分散処理部503(503−1〜503−N)から処理要求を受信した場合、後述する演算部選定調停処理S1250を実行する処理部である。調停部701は、分散処理部503から受信するフローIDによりフローを識別し、さらに、演算フロー管理リスト702を参照する。そして、これによって、入力パケットに関する統計カウント処理を実行する演算部703を、演算部703−1〜演算部703−Nから決定する。
また、調停部701は、演算フロー管理リスト702を、論理回路210に備わるメモリ等に保持する。そして、調停部701は、演算部選定調停処理S1250及び演算フロー管理処理S1450において、演算フロー管理リスト702を更新する。
さらに、調停部701は、演算部703から演算終了通知を受信した場合、後述する更新調停処理S1650を実行する処理部である。調停部701は、演算部703が更新した統計情報を統計情報テーブル704に書き戻し、処理要求を送信してきた分散処理部503に演算終了通知を転送する。
演算フロー管理リスト702は、演算部703が処理する入力パケットのフローIDと、演算部703の処理状況とを示す。
演算部703は、後述する統計情報処理S1550において、統計情報テーブル7044に含まれる各フローの情報を更新する。また、演算部703は、統計情報処理S1550において更新した結果を、調停部701に送信する。演算部703は、集中処理部505にN個(Nは任意の自然数)備わる。
図8は、本実施例1の統計情報テーブル704を示す説明図である。
統計情報テーブル704は、パケット通信装置2が受信したパケットについての情報を有するテーブルである。統計情報テーブル704は、フローID801、受信パケット数802、及び、受信バイト数803を含む。
フローID801は、入力パケットのフローIDを含む。受信パケット数802は、振分部502が受信した入力パケットの数を含む。受信バイト数803は、振分部502が受信した入力パケットのバイト数の合計値を示す。
図13は、本実施例1の演算フロー管理リスト702を示す説明図である。
演算フロー管理リスト702は、演算部1301、フローID1302、及び、処理状況カウンタ1303を含む。
演算部1301は、演算部703−1〜703−Nを一意に示す識別子を含む。本実施例の演算部1301は、演算部703を数値によって識別する値を含む。演算部1301に格納される値は、管理者等によってあらかじめ設定される。フローID1302は、演算部703が処理する入力パケットに割り当てられたフローを一意に示すフローIDを含む。フローID1302に格納される値は、調停部701によって更新される。また、フローID1302に格納される値は、入力ヘッダ解析部601において識別したフローIDの値に対応する。
処理状況カウンタ1303は、演算部703における演算処理(統計情報処理)の状況を示す値を含む。本実施例の処理状況カウンタ1303は、演算処理が開始されてから経過した実行時間に関する値を含む。
以下に示す処理状況カウンタ1303は、減算カウンタによって、演算処理が終了するまでの残り時間を示す。具体的には、演算処理が開始された場合、処理状況カウンタ1303には演算時間が格納される。そして、調停部701が単位時間(本実施例において1clk)毎に処理状況カウンタ1303の値を減算する。処理状況カウンタ1303に“0”が格納されるエントリは、演算部1301が示す演算部703は演算処理を終了したことを示す。また、処理状況カウンタ1303に“0”以外の正の数が格納されるエントリは、演算部1301が示す演算部703は演算処理中であることを示す。
以下において、処理状況カウンタ1303が減算カウンタである場合の処理を記載するが、処理状況カウンタ1303は加算カウンタによって、演算処理が開始されてから経過した時間を示してもよい。この場合、調停部701は、所定の演算時間と処理状況カウンタ1303とを比較することによって、演算処理の状況を取得しても良い。
以下に、振分部502が実行する振分け処理S950について説明する。図9は、本実施例1の振分部502が実行する振分け処理S950を示すフローチャートである。
振分部502は、入出力回線インタフェース201から入力パケットを受信した場合(複数の入力パケットを同時に受信する場合もある)(S900)、内部カウンタの値(本カウンタは1〜Nの値を取り、Nの次は1に戻る)が示す番号から、パケットを受信した順番に分散処理部503(503−1〜503−N)にパケットを転送する(S901)。S901の後、振分部502は、内部カウンタの値を受信したパケット数分カウントアップし(S902)、図9に示す振分け処理S950を終了する(S903)。
以下に、入力ヘッダ解析部601が実行するヘッダ解析処理S1050について説明する。図10は、本実施例1の入力ヘッダ解析部601が実行するヘッダ解析処理S1050を示すフローチャートである。
入力ヘッダ解析部601は、振分部502から入力パケットを受信した場合(S1000)、入力パケットに含まれる装置内ヘッダ3からパケット長303の値を取得する(S1001)。S1001の後、受信した入力パケットの403に基づいて、パケット4のフローを識別し、これによって、出力NIF IDを決定する(S1002)。S1002の後、入力ヘッダ解析部601は、処理開始トリガ、フローID、及び、取得パケット長を集中処理部505へ出力する(S1003)。S1003の後、入力ヘッダ解析部601は、入力パケットの装置内ヘッダ3の出力NIF ID301、及び、フローID302に値を格納し、入力ヘッダ処理部602へパケットを転送し(S1004)、図10に示すヘッダ解析処理S1050を終了する(S1005)。
以下に、本実施例1の出力判定処理部603が実行する出力判定処理S1150について説明する。図11は、本実施例1の出力判定処理部603が実行する出力判定処理S1150を示すフローチャートである。
出力判定処理部603は、入力ヘッダ処理部602から入力パケットを受信した場合(S1100)、集中処理部505から演算終了通知があるか否かを判定する(S1101)。S1101において、演算終了通知があると判定された場合、多重部504へパケットを転送し(S1102)、図11に示す出力判定処理S1150を終了する(S1104)。また、S1101において、演算終了通知がないと判定された場合、入力パケットを廃棄し(S1103)、図11に示す出力判定処理S1150を終了する(S1104)。
以下に、本実施例1の調停部701が実行する演算部選定調停処理S1250について説明する。図12は、本実施例1の調停部701が実行する演算部選定調停処理S1250を示すフローチャートである。
調停部701は、分散処理部503(503−1〜503−N)から処理開始トリガを受信した場合(複数の処理開始トリガを同時に受信する場合もある)(S1200)、処理開始トリガと同時に受信するフローID、及び、パケット長を取得し、処理開始トリガの到着順を保持する(S1201)。S1201の後、調停部701は、演算フロー管理リスト702の全てのエントリの処理状況カウンタ1303の値が“0”と異なるか否かを判定する(S1202)。
S1202において、演算フロー管理リスト702の全てのエントリの処理状況カウンタが“0”と異なると判定された場合、全ての演算部703(703−1〜703−N)は、演算処理を実行中である。新規フローの場合の演算処理を受け付けることが出来ないため、調停部701は、入力パケットを廃棄判定し(S1203)、図12に示す演算部選定調停処理S1250を終了する(S1210)。
また、S1202において、演算フロー管理リスト702のエントリのうち、処理状況カウンタ1303が“0”であるエントリが少なくとも1以上ある場合、全ての演算部703(703−1〜703−N)のうち少なくとも一つの演算部703は、演算処理を実行していない。このため、調停部701は、S1201において取得したフローIDの値を検索キー(フローID801)として統計情報テーブル704を検索し、受信パケット数802、及び、受信バイト数803の情報を取得する(S1204)。
なお、S1202において、S1200で複数の処理開始トリガを同時に受信した場合は、調停部701は、演算部703において、処理開始トリガを受信したフロー分の数の演算部が処理可能かどうかを確認する。調停部701は、演算フロー管理リスト702のエントリのうち、処理状況カウンタ1303が“0”であるエントリがS1200で調停部701が同時に処理開始トリガを受信した複数フロー分ある場合、S1204の処理に進む。調停部701は、処理状況カウンタ1303が“0”であるエントリが、S1200で同時に処理開始トリガを受信した複数フロー分ない場合、S1203の処理に進む。また、処理状況カウンタ1303が“0”であるエントリがS1200で同時に処理開始トリガを受信した複数フロー分ない場合は、処理状況カウンタ1303が“0”であるエントリ分のフローについての処理はS1204の処理に進み、残りのフローの処理はS1203に進んでも良い。
S1204の後、S1201において取得したフローIDの値と処理状況カウンタ1303が“0”と異なるエントリのフローID1302の値と一致するか否かを判定する(S1205)。
なお、S1205において、調停部701は、S1201において取得したフローIDの値に対応する値が、処理状況カウンタ1303が“0”と異なるエントリのフローID1302の値と一致する場合、取得したフローIDの値に対応する値と処理状況カウンタ1303が“0”と異なるエントリのフローID1302の値とが一致していると判定してもよい。
S1205において、S1201で取得したフローIDの値が、処理状況カウンタ1303が“0”と異なるエントリのフローID1302の値と一致しないと判定された場合、調停部701は、演算処理を実行していない演算部に、入力パケットに関する演算処理を新規に実行させるため、S1208の処理を実行する。
また、S1205において、S1201で取得したフローIDの値が、処理状況カウンタ1303が“0”と異なるエントリのフローID1302の値と一致すると判定された場合、入力パケットのフローIDに対応する演算部703は、入力パケットに関する演算処理を継続して実行できる。このため、調停部701は、取得したフローIDの値とフローID1302とが一致したエントリの演算部1301が示す演算部703を、入力パケットに関する演算処理を継続して実行する演算部703に決定する。
そして、調停部701は、取得されたフローIDの値とフローID1302とが一致したエントリの処理状況カウンタ1303の値を、演算時間を示す値に更新する(S1206)。例えば、調停部701は、演算時間が10clkの場合、取得されたフローIDの値とフローID1302とが一致したエントリの処理状況カウンタ1303の値を“10”に更新する。
S1206において処理状況カウンタ1303を更新することによって、調停部701は、各演算部703が演算処理を終了するまで実行していることを示す。
S1206の後、調停部701は、S1201において処理開始トリガと同時に取得したフローのうち、フローIDが同じであった数、同じフローIDのパケット長の合算値を、それぞれ取得パケット数、取得パケット長としてフロー毎に保持する(S1211)。取得パケット数は、S1201において取得したフローIDが同じであった数、すなわち、同一フローIDの同時入力パケット数である。取得パケット長は、S1201において取得した同じフローIDのパケット長の合算値、すなわち、同一フローIDの同時入力パケットの合計パケット長である。
S1211の後、調停部701は、取得したフローIDの値とフローID1302の値とが一致した演算フロー管理リスト702のエントリの演算部1301が示す演算部703へ、処理開始トリガ、新規/継続パラメータ、取得パケット数、取得パケット長、受信パケット数、及び、受信バイト数を含む演算通知を出力する(S1207)。
S1207において、調停部701は、新規/継続パラメータを、継続を示す値に決定し、継続を示す新規/継続パラメータ(本実施例において“1”)を、演算通知に含める。本実施例における新規/継続パラメータとは、各演算部703にどのような演算処理を実行するかを通知するための値である。S1207の後、図12に示す演算部選定調停処理S1250を終了する(S1210)。
S1205において、S1201で取得したフローIDの値が、処理状況カウンタ1303が“0”と異なるエントリのフローID1302の値と一致しないと判定された場合、調停部701は、処理状況カウンタ1303が“0”である演算フロー管理リスト1302のエントリのうち、演算部1301の値が最も若い番号のエントリを抽出する。調停部701は、抽出されたエントリの演算部1301が示す演算部703を、入力パケットに関する演算処理を新規に実行する演算部703に決定する。
そして、調停部701は、抽出されたエントリのフローID1302を、S1201で取得したフローIDの値によって更新する。また、調停部701は、抽出されたエントリの処理状況カウンタ1303を、演算時間を示す値に更新する(S1208)。
なお、前述のS1208において、調停部701は、処理状況カウンタ1303が“0”である演算フロー管理リスト1302のエントリのうち、演算部1301の値が最も若い番号(小さい番号)のエントリを抽出したが、調停部701は、処理状況カウンタ1303が“0”である演算フロー管理リスト702のエントリのうちのいずれかであれば、いかなる規則に従ってエントリを抽出してもよい。例えば、調停部701は、最も値が大きい番号のエントリを抽出してもよいし、管理者によってあらかじめ抽出するエントリの順番を定められていてもよい。
S1208の後、調停部701は、S1201において取得したフローIDが同じであった数、S1201において取得した同じフローIDのパケット長の合算値を、それぞれ取得パケット数、取得パケット長として保持する(S1212)。
S1212の後、調停部701は、S1207及びS1209において決定された演算部703へ、処理開始トリガ、新規/継続パラメータ、取得パケット数、取得パケット長、受信パケット数、及び、受信バイト数を含む演算通知を出力する(S1209)。S1209において調停部701は、新規/継続パラメータを新規を示す値に決定し、新規を示す新規/継続パラメータ(本実施例において“0”)を、演算通知に含める。
S1207及びS1209において、出力される演算通知に含まれる処理開始トリガは、演算部703が後述する統計情報処理S1550を開始することを示す値である。また、演算通知に含まれる取得パケット数は、S1211あるいはS1212において保持した取得パケット数である。また、演算通知に含まれる取得パケット長は、S1211あるいはS1212において保持した取得パケット長である。また、受信パケット数、及び、受信バイト数は、S1204において取得した受信パケット数、及び、受信バイト数である。
また、S1207及びS1209において、同時に処理開始トリガを受信した同じフローIDのフローの入力パケット数、及び、その合計パケット長を、取得パケット数、及び、取得パケット長として一つの演算部703に出力する。よって、同じフローIDの入力パケットの処理開始トリガを集中処理部505で同時に受信しても、オーバーフローを発生することなく統計情報処理を実行可能である。
S1209の後、図12に示す演算部選定調停処理S1250を終了する(S1210)。
以下に、調停部701が実行する演算フロー管理処理S1450について説明する。
図14は、本実施例1の調停部701が実行する演算フロー管理処理S1450を示すフローチャートである。
調停部701は、1クロック毎に(S1400)、演算フロー管理リスト702の全てのエントリの処理状況カウンタ1303が0であるか否かを判定する(S1401)。
演算フロー管理リスト702の全てのエントリの処理状況カウンタ1303が0であると、S1401において判定された場合、調停部701は、演算フロー管理処理S1450を終了する(S1403)。
また、演算フロー管理リスト702のエントリに処理状況カウンタ1303が0でないエントリがあるとS1401において判定された場合、調停部701は、処理状況カウンタ1303の列に含まれる0以外の値から1を減算する(S1402)。S1402の後、調停部701は、演算フロー管理処理S1450を終了する(S1403)。
以下に、演算部703(703−1〜703−N)が実行する統計情報処理S1550について説明する。
図15は、本実施例1の演算部703が実行する統計情報処理S1550を示すフローチャートである。
演算部703は、調停部701から処理開始トリガを含む演算通知を受信した場合(S1500)、受信した演算通知に含まれる新規/継続パラメータ、取得パケット数、取得パケット長、受信パケット数、及び、受信バイト数を取得する(S1501)。
S1501の後、演算部703は、新規/継続パラメータが“0”であるか否か、すなわち、新規/継続パラメータが新規を示すか否かを判定する(S1502)。
新規/継続パラメータが“0”である場合、すなわち、新規/継続パラメータが新規を示すとS1502において判定された場合、演算部703は、S1504の処理へ進む。
新規/継続パラメータが“0”ではない場合、すなわち、新規/継続パラメータが継続を示すとS1502において判定された場合、演算部703は、演算部703が継続処理用に内部保持する前回演算結果(前回受信パケット数、及び、前回受信バイト数)を取得する(S1503)。継続処理用に内部保持される前回演算結果とは、統計情報処理が全て終了する前に次の統計情報処理を継続して実行するために、演算部703が、論理回路202に保持する演算結果である。S1503において、内部保持される前回演算結果を取得することによって、演算部703は、S1501において受信した演算通知に含まれる受信パケット数、及び、受信バイト数を更新し、S1504の処理へ進む。調停部が、同一フローを処理している演算部に処理を割り当て、演算部の内部に保持される前回演算結果を用いることによって、同じフローの入力パケットを連続して受信しても、オーバフローを発生することなく、正常に統計情報処理を実行可能である。
S1502(新規/継続パラメータが“0”である場合)又はS1503の後、演算部703は、受信パケット数(S1501において演算通知と同時に取得した受信パケット数、又は、S1503において取得した前回受信パケット数)に、S1501において演算通知と同時に取得した取得パケット数分を加算する。また、演算部703は、受信バイト数(S1501において取得した受信バイト数、又は、S1503において取得した前回受信バイト数)に、S1501において演算通知と同時に取得した取得パケット長分を加算する。
そして、演算部703は、加算結果を、更新された受信パケット数、及び、受信バイト数として取得し、取得した、更新された受信パケット数、及び、受信バイト数を含む演算終了通知を調停部701に転送する(S1504)。
S1504の後、演算部703は、更新した受信パケット数、及び、更新した受信バイト数を、前回受信パケット数及び前回受信バイト数として次パケットの継続処理用に内部保持する(S1505)。
S1505の後、演算部703は、統計情報処理S1550を終了する(S1506)。
以下に、調停部701が実行する更新調停処理S1650について説明する。
図16は、本実施例1の調停部701が実行する更新調停処理S1650を示すフローチャートである。
調停部701は、演算部703(703−1〜703−N)から演算終了通知を受信した場合(S1600)、受信した演算終了通知に含まれる受信パケット数、及び、受信バイト数を取得し、統計情報テーブル704に書き戻す(S1601)。ここで、従来技術では、受信したフロー数の回数分、統計情報テーブルへの書き戻しを行うが、本実施例では、同時に処理開始トリガを受信した同じフローIDのフローの取得パケット数、及び、取得パケット長の合計値を用いて一つの演算部703で統計情報処理を行う。従って、従来技術よりも書き戻しの回数を削減することが出来る。
S1601の後、調停部701は、演算部選定調停処理S1250において保持した処理開始トリガの到着順から、処理開始トリガの送信元の分散処理部503(503−1〜503−N)を特定し、特定した分散処理部503へ演算終了通知を転送する(S1602)。
S1602の後、調停部701は、更新調停処理S1650を終了する(S1603)。
前述のとおり、実施例1によれば、パケット通信装置2は、調停部701において、ラウンドロビンで各分散処理部503(503−1〜503−N)に振分けられたパケットの情報を集約し、演算部703(703−1〜703−N)へ通知する。これによって、実施例1の演算部703は、同一フローのパケットに関する統計カウント処理を同時に実行することが可能である。
従って、実施例1によれば、マルチコア化されたパケット処理エンジンにおいて、1つの分散処理部への負荷集中による性能劣化を抑えることができる。さらに、分散処理部を増設することでスケーラブルにパケット処理エンジンの高速化が可能となる。
なお、実施例1では、振分部502は、入力パケット単位で分散処理部503(503−1〜503−N)へ入力パケットを振分けたが、後述するフラグメントヘッダ5を付与し、入力パケットを断片化して分散処理部503へ入力パケットを振分けても良い。
図17は、本実施例1のパケットに付加されるフラグメントヘッダ5のフォーマットを示す説明図である。
図17に示すフラグメントヘッダ5のフォーマットは一例であり、本実施例において用いられるフラグメントヘッダは、いかなる情報を含んでもよい。
フラグメントヘッダ5は、総フラグメント数1701、シーケンス番号1702、及び、フラグメント長1703を含む。
総フラグメント数1701は、入力パケット(装置内ヘッダ3が付与されたパケット4)が断片化された総数が設定される。シーケンス番号1702は、断片化された入力パケットの順番が設定される。フラグメント長1703は、断片化された入力パケットの長さが設定される。
図18は、本実施例1のパケットのフラグメント処理の概要を示す説明図である。
振分部702は、受信した入力パケットを断片化し、フラグメントヘッダ5を付加して分散処理部503(503−1〜503−N)に転送する。
多重部504は、分散処理部503(503−1〜503−N)から断片化された入力パケットを受信した場合、装置内ヘッダ5の総フラグメント数1701、シーケンス番号1702、及び、フラグメント長1703を参照し、入力パケットを再構築しても良い。
また、振分部502は、入力パケットのヘッダ部分(例えば、宛先MACアドレス401からイーサタイプ値404まで)のみを分散処理部503へ振分け、残りのペイロード部分は多重部504へ転送し、分散処理部503の処理が終了するまで待合せておいても良い。
多重部504は、分散処理部503(503−1〜503−N)から入力パケットのヘッダ部分を受信した場合、待合せておいた残りのペイロード部分を受信し、入力パケットを再構築しても良い。
以下、本実施例2について図19から図24を用いて説明する。なお、以下に述べる実施例2は本発明の実施例の一つであって、本発明を制限するものではない。
実施例1におけるパケット通信装置2は、本発明の集中・分散処理方法を実装し、統計カウント処理を実行した。実施例2におけるパケット通信装置は、さらに、入力パケットの帯域に応じて利用する分散処理部の数を変更する。実施例2において、入力パケットの帯域を監視するため、パケット通信装置の入力パケット制御部は、帯域監視部を備える。
図19は、本実施例2の入力パケット制御部1900の論理的な構成を示すブロック図である。
実施例2の入力パケット制御部1900は、帯域監視バッファ19、帯域監視部1901、振分部1902、分散処理部管理リスト119、複数の分散処理部503(503−1〜503−N)(Nは任意の自然数)、多重部1904、及び、集中処理部505を備える。
実施例2における、分散処理部503、及び、集中処理部505は、実施例1における、分散処理部503、及び、集中処理部505と同じである。
帯域監視バッファ19は、入力パケットを格納するために使用される。
帯域監視部1901は、入力パケット制御部1900が入出力回線インタフェース201から入力パケットを受信した場合、後述する帯域監視バッファ書込み処理S2050を実行し、入力パケットを帯域監視バッファ19に格納する処理部である。
また、帯域監視部1901は、振分部1902からパケット読出し要求を受信した場合、後述する帯域監視バッファ読出し処理S2250を実行し、帯域監視バッファ19から入力パケットを読出し、入力パケットを振分部1902へ転送する処理部である。
さらに、帯域監視部1901は、帯域監視バッファ19に蓄積されたパケット量に応じて、利用する分散処理部の数(後述するX)(Xは1〜Nの任意の自然数)を決定する。
振分部1902は、帯域監視部1901からパケット送信要求を受信した場合、後述する振分け処理S2350を実行する処理部である。振分部1902は、振分け処理S2350において、パケット処理を実行する分散処理部503を、分散処理部503−1〜分散処理部503−Xから決定する。なお、Xは、帯域監視部1901により決定される。
分散処理部管理リスト119は、振分部1902が入力パケットを振分けた分散処理部503(503−1〜503−N)のIDと、分散処理部503の処理状況とを示す。
多重部1904は、各分散処理部503から受信したパケットを多重し、到着順にSWインタフェース205に送信する。また、多重部1904は、帯域監視部1901により決定される利用する分散処理部の数Xに応じて、多重するパケットが、利用している分散処理部から受信しているかどうか、到着順を管理する。
図24は、本実施例2の分散処理部管理リスト119を示す説明図である。
分散処理部管理リスト119は、分散処理部2401、及び、処理状況カウンタ2402を含む。
分散処理部2401は、分散処理部503−1〜503−Nを一意に示す識別子を含む。本実施例の分散処理部2401は、分散処理部503を数値によって識別する値を含む。分散処理部2401に格納される値は、管理者等によってあらかじめ設定される。
処理状況カウンタ2402は、分散処理部503におけるパケット処理の状況を示す値を含む。本実施例の処理状況カウンタ2402は、パケット処理が開始されてから経過した実行時間に関する値を含む。
以下に示す処理状況カウンタ2402は、実施例1の演算フロー管理処理S1450と同様に、減算カウンタによって、パケット処理が終了するまでの残り時間を示す。具体的には、パケット処理が開始された場合、処理状況カウンタ2402にはパケット処理時間が格納される。そして、振分部1902が単位時間(本実施例において1clk)毎に処理状況カウンタ2402の値を減算する。
処理状況カウンタ2402に“0”が格納されるエントリは、分散処理部2401が示す分散処理部503はパケット処理を終了したことを示す。また、処理状況カウンタ2402に“0”以外の正の数が格納されるエントリは、分散処理部2401が示す分散処理部503はパケット処理中であることを示す。
以下において、処理状況カウンタ2402が減算カウンタである場合の処理を記載するが、処理状況カウンタ2402は加算カウンタによって、パケット処理が開始されてから経過した時間を示してもよい。この場合、振分部1902は、所定のパケット処理時間と処理状況カウンタ2402とを比較することによって、パケット処理の状況を取得しても良い。
以下に、帯域監視部1901が実行する帯域監視バッファ書込み処理S2050について説明する。
図20は、本実施例2の帯域監視部1901が実行する帯域監視バッファ書込み処理S2050を示すフローチャートである。
帯域監視部1901は、入出力回線インタフェース201から入力パケットを受信した場合(複数の入力パケットを同時に受信する場合もある)(S2000)、装置内ヘッダ3からパケット長303を取得する(S2001)。
S2001の後、帯域監視部1901は、S2001で取得したパケット長と帯域監視バッファ19の蓄積量(後述するパケット蓄積量21)の合計が、帯域監視バッファ19のバッファサイズ以下であるか否かを判定する(S2002)。
S2002において、S2001で取得したパケット長と帯域監視バッファ19の蓄積量の合計が、帯域監視バッファ19のバッファサイズ以下である場合、帯域監視部1901は、蓄積パケット数に受信したパケット数分を加算し、パケット蓄積量21に取得したパケット長を加算して更新し、帯域監視バッファ19に受信したパケットを格納する(S2003)。
S2005の後、帯域監視部1901は、帯域監視バッファ書込み処理S2050を終了する(S2005)。
また、S2002において、S2001で取得したパケット長と帯域監視バッファ19の蓄積量の合計が、帯域監視バッファ19のバッファサイズ以下でない場合、帯域監視部1901は、パケットを廃棄し(S2004)、帯域監視バッファ書込み処理S2050を終了する(S2005)。
図21は、本実施例2の帯域監視バッファ19のパケット蓄積量21と利用分散処理部の数の関係を示す説明図である。
帯域監視部1901は、帯域監視バッファ19に蓄積されたパケット数が1以上の時、振分部1902にパケット送信要求を通知する。
また、帯域監視部1901は、帯域監視バッファ19のパケット蓄積量21に応じて、利用する分散処理部503の数を示すX(Xは1〜Nの任意の自然数)を決定し、振分部1902、及び、多重部1904に利用分散処理部の数Xを通知する。帯域監視部1901は、パケット蓄積量21が少ない時は、Xの値を小さく(例えばN/4)し、パケット蓄積量21が多く、バッファサイズに近づいてきた時は、Xの値を大きく(例えばN)とする。
以下に、帯域監視部1901が実行する帯域監視バッファ読出し処理S2250について説明する。
図22は、本実施例2の帯域監視部1901が実行する帯域監視バッファ読出し処理S2250を示すフローチャートである。
帯域監視部1901は、振分部1902からパケット読出し要求を受信した場合(S2200)、蓄積パケット数から読み出したパケット数分を減算し、パケット蓄積量21から読み出したパケットのパケット長を減算して更新し、帯域監視バッファ19からパケットを読み出して振分部1902に送出する(S2201)。
S2201の後、帯域監視部1901は、帯域監視バッファ読出し処理S2250を終了する(S2202)。
以下に、振分部1902が実行する振分け処理S2350について説明する。
図23は、本実施例2の振分部1902が実行する振分け処理S2350を示すフローチャートである。
振分部1902は、帯域監視部1901からパケット送信要求を受信した場合(S2300)、分散処理部管理リスト119の#1〜#Xの全てのエントリの処理状況カウンタ2402の値が“0”と異なるか否かを判定する(S2301)。
S2301において、分散処理部管理リスト119の#1〜#Xの全てのエントリの処理状況カウンタ2402が“0”と異なると判定された場合、#1〜#Xの全ての分散処理部503(503−1〜503−X)は、パケット処理を実行中である。新規パケット処理を受け付けることが出来ないため、振分部1902は、S2301の処理に戻り、#1〜#Xのいずれかの分散処理部503の処理が終了するのを待つ。
また、S2301において、分散処理部管理リスト119の#1〜#Xのエントリのうち、処理状況カウンタ2402が“0”であるエントリが少なくともひとつある場合、#1〜#Xの全ての分散処理部503(503−1〜503−X)のうち少なくとも一つの分散処理部503は、パケット処理を受け付けられる状態にある。このため、振分部1902は、帯域監視部1901にパケット読出し要求を通知し、帯域監視部1901からパケットを受信する(S2302)。
S2302の後、内部カウンタの値(本カウンタは1〜Xの値を取り、Xの次は1に戻る)が示す番号から、パケットを受信した順番に分散処理部503(503−1〜503−X)にパケットを転送する(S2303)。
S2303の後、振分部1902は、内部カウンタの値を受信したパケット数分カウントアップする(S2304)。
なお、Xは、帯域監視部1901から通知される利用分散処理部の数により決定される値であり、帯域監視バッファ19のパケット蓄積量21に応じて変動する。振分け処理S2350においては、Xの値の変更を反映するタイミングを、後述する内部カウンタの値がXから1にもどる(ラップアラウンドする)時としても良い。また、多重部1904も、振分部1902と同様に内部カウンタ(本カウンタは1〜Xの値を取り、Xの次は1に戻る)を具備し、内部カウンタの番号が示す分散処理部503(503−1〜503−X)から順番にパケットを多重し、Xの値の変更を反映するタイミングを、後述する内部カウンタの値がXから1にもどる(ラップアラウンドする)時としても良い。また、多重部1904は、内部カウンタの番号が示す分散処理部と異なる分散処理部からパケットを受信した場合、パケットを廃棄しても良い。
S2304の後、帯域監視部1901からのパケット送信要求が終了しているか否かを判定する(S2305)。
S2305において、帯域監視部1901からのパケット送信要求が終了していない場合、振分部1902は、S2301の処理に戻る。
また、S2305において、帯域監視部1901からのパケット送信要求が終了している場合、振分部1902は、図23に示す振分け処理S2350を終了する(S2306)。
前述のとおり、実施例2によれば、パケット通信装置2は、帯域監視部1901において、振分部1902がラウンドロビンでパケットを振分ける分散処理部503(503−1〜503−X)(Xは1〜Nの任意の自然数)の数を変更し、決定した分散処理部503の数を振分部1902、及び、多重部1904へ通知する。これによって、実施例2の入力パケット制御部1900は、入力パケットの帯域に応じて利用する分散処理部の数を変更しつつ、演算部703は、同一フローのパケットに関する統計カウント処理を同時に実行することが可能である。
従って、実施例2によれば、マルチコア化されたパケット処理エンジンにおいて、1つの分散処理部への負荷集中による性能劣化を抑えることができる。さらに、分散処理部を増設することでスケーラブルにパケット処理エンジンの高速化が可能となる。さらに、入力帯域が小さい時は、利用する分散処理部の数を減らすことで、消費電力を低減することが可能となる。
実施例1におけるパケット通信装置2は、本発明の集中・分散処理方法を実装し、統計カウント処理を実行した。実施例3におけるパケット通信装置は、各入力パケットに基づいて帯域制御を行う。実施例3において、帯域制御機能を実現するため、パケット通信装置は、トークンバケツアルゴリズムを使用する。
以下に、トークンバケツアルゴリズムの動作概要を説明する。
トークンバケツアルゴリズムを使用する場合、パケット通信装置は、設定された帯域に対応する速度でトークンバケツ(メモリに保持された所定の領域)にトークンを加算する。そして、パケット通信装置は、パケット通信装置が送信する予定のパケットのパケット長分のトークンがトークンバケツに蓄積されている場合、保証帯域内と判定し、パケット長分のトークンをトークンバケツから減算する。また、パケット通信装置は、パケット通信装置が送信する予定のパケットのパケット長分のトークンがトークンバケツに蓄積されていない場合、保証帯域外であると判定し、トークンは保持し、パケット長分のトークンをトークンバケツから減算しない。
本実施例におけるパケット到着間隔とパケット処理時間(タイミング)との関係の概要を以下に示す。
図33Cは、本実施例3のパケット処理において、同一フローのパケットが振分処理に複数同時に到着する際のパケット処理のタイミングを示す説明図である。
本実施例3では、本実施例1の図33Bと比較し、集中処理部の処理が異なる。
集中処理部は、各分散処理部(#1と#2)から取得した情報をもとに、第1のパケットに関する帯域演算と、第2のパケットに関する帯域演算とを同時に実行する(T3302)。ここで、本実施例では、1パケット毎にトークンバケツアルゴリズムを使用して帯域演算するため、第2のパケットに関する帯域演算は、第1のパケットのパケット長分のトークンを減算し、トークンを補正して計算する。この補正に関する詳細は後述する。
また、集中処理部は、各分散処理部(#3と#4)から取得した情報をもとに、第3のパケットに関する帯域演算と、第4のパケットに関する帯域演算とを同時に実行する(T3303)。
従って、本実施例では、集中処理部にパケットの情報を集約し、同一フローのパケットを纏めて処理することで、複数の同一フローのパケットが振分処理に同時に到着した場合でも、帯域制御機能のようにパケット到着毎に同じフローの情報を更新する必要がある機能を実現することが出来る。
以下、本実施例3について図25から図31を用いて説明する。なお、以下に述べる実施例3は本発明の実施例の一つであって、本発明を制限するものではない。
図25は、本実施例3の集中処理部2505の論理的な構成を示すブロック図である。
実施例3の集中処理部2505は、調停部2501、演算フロー管理リスト702、複数の演算部2503(2503−1〜2503−N)(Nは任意の自然数)、帯域設定テーブル2504、及び、演算結果保持テーブル2514を備える。
実施例3における、演算フロー管理リスト702は、処理状況カウンタ1303に保持する実行時間(実施例1における統計情報処理と、実施例3における帯域制御処理の実行時間の差)を除き、実施例1における演算フロー管理リスト702と同じである。
調停部2501は、分散処理部5503(5503−1〜5503−N)から処理要求を受信した場合、後述する演算部選定調停処理S2850を実行する処理部である。調停部2501は、分散処理部5503から受信するフローIDによりフローを識別し、さらに、演算フロー管理リスト702を参照する。そして、これによって、入力パケットに関する帯域制御処理を実行する演算部2503を、演算部2503−1〜演算部2503−Nから決定する。
また、調停部2501は、演算フロー管理リスト702を、論理回路210に備わるメモリ等に保持する。そして、調停部2501は、演算部選定調停処理S2850及び演算フロー管理処理S1450において、演算フロー管理リスト702を更新する。
さらに、調停部2501は、演算部2503から演算終了通知を受信した場合、後述する更新調停処理S3050を実行する処理部である。調停部2501は、演算部2503が更新した帯域制御情報から演算結果保持テーブル2514に書き戻す情報を選択し、処理要求を送信してきた分散処理部5503に演算終了通知を転送する。
演算部2503は、後述する帯域演算処理S2950において、演算結果保持テーブル2514に含まれる各フローの情報を更新する。また、演算部2503は、帯域演算処理S2950において更新した結果を、調停部2501に送信する。演算部2503は、集中処理部2505にN個(Nは任意の自然数)備わる。
図26は、本実施例3の帯域設定テーブル2504を示す説明図である。
帯域設定テーブル2504に格納される値は、演算部2503がトークンアルゴリズムを実行するために用いる設定値であり、管理者等によってあらかじめ定められる値である。帯域設定テーブル2504は、フローID2601、周期加算トークン値2602、及び、トークンバケツの深さ2603を含む。
フローID2601は、入力パケットに割り当てられたフローを一意に示す識別子を含む。周期加算トークン値2602は、単位時間あたりにトークンバケツに追加されるトークン量(単位時間あたりに蓄積される保証帯域に相当)を示す。トークンバケツの深さ2603は、トークンバケツが保持できる最大のトークン量を示す。
図27は、本実施例3の演算結果保持テーブル2514を示す説明図である。
演算結果保持テーブル2514は、パケットを保証帯域によって送信できるか否かを判定するための演算結果を保持するテーブルである。演算結果保持テーブル2514は、フローID2701、前回パケット到着時刻2702、及び、保持トークン値2703を含む。フローID2701は、入力パケットに割り当てられたフローを一意に示すフローIDを含む。前回パケット到着時刻2702は、演算部2503において前回実行された帯域演算処理が実行された時刻を示す。保持トークン値2703は、前回実行された帯域演算処理によって算出された、トークンバケツに蓄積されるトークン量を示す。すなわち、前回パケット到着時刻2702は、保持トークン値2703に格納される値を算出した時刻を示す。
以下に、調停部2501が実行する演算部選定調停処理S2850について説明する。
図28は、本実施例3の調停部2501が実行する演算部選定調停処理S2850を示すフローチャートである。
調停部2501は、分散処理部5503(5503−1〜5503−N)から処理開始トリガを受信した場合(複数の処理開始トリガを同時に受信する場合もある)(S2800)、処理開始トリガと同時に受信するフローID、及び、パケット長を取得し、処理開始トリガの到着順を保持する(S2801)。
S2801の後、調停部2501は、演算フロー管理リスト702の全てのエントリの処理状況カウンタ1303の値が“0”と異なるか否かを判定する(S2802)。
S2802において、演算フロー管理リスト702の全てのエントリの処理状況カウンタが“0”と異なると判定された場合、全ての演算部2503(2503−1〜2503−N)は、演算処理を実行中である。新規フローの場合の演算処理を受け付けることが出来ないため、調停部2501は、入力パケットを廃棄判定し(S2803)、図28に示す演算部選定調停処理S2850を終了する(S2811)。
また、S2802において、演算フロー管理リスト702のエントリのうち、処理状況カウンタ1303が“0”であるエントリが少なくとも一つある場合、全ての演算部2503(2503−1〜2503−N)のうち少なくとも一つの演算部2503は、演算処理を実行していない。このため、調停部2501は、S2801において取得したフローIDの値を検索キー(フローID2601)として帯域設定テーブル2504を検索し、周期加算トークン値2602、及び、トークンバケツの深さ2603の情報を取得する(S2804)。
S2804の後、調停部2501は、S2801において取得したフローIDの値を検索キー(フローID2701)として演算結果保持テーブル2514を検索し、前回パケット到着時刻2702、及び、保持トークン値2703の情報を取得する(S2805)。
なお、S2802において、調停部2501がS2800で複数の処理開始トリガを同時に受信した場合は、その複数フロー分の演算が可能かどうかを確認する。演算フロー管理リスト702のエントリのうち、処理状況カウンタ1303が“0”ではないエントリが、S2800で同時に処理開始トリガを受信した数分ある場合、S2804の処理に進む。処理状況カウンタ1303が“0”であるエントリがS2800で同時に処理開始トリガを受信した複数フロー分ない場合、S2803の処理に進む。また、処理状況カウンタ1303が“0”であるエントリがS2801で同時に受信した処理開始トリガの数分ない場合は、処理状況カウンタ1303が“0”であるエントリ分はS2804の処理に進み、残りのフローはS2803に進んでも良い。
S2805の後、S2801において取得したフローIDの値が処理状況カウンタ1303が“0”と異なるエントリのフローID1302の値と一致するか否かを判定する(S2806)。
なお、S2806において、調停部2501は、S2801において取得したフローIDの値に対応する値が、処理状況カウンタ1303が“0”と異なるエントリのフローID1302の値と一致する場合、取得したフローIDの値に対応する値と処理状況カウンタ1303が“0”と異なるエントリのフローID1302の値とが一致していると判定してもよい。
S2806において、S2801で取得したフローIDの値が、処理状況カウンタ1303が“0”と異なるエントリのフローID1302の値と一致しないと判定された場合、調停部2501は、演算処理を実行していない演算部に、入力パケットに関する演算処理を新規に実行させるため、S2809の処理を実行する。
S2806において、S2801で取得したフローIDの値が、処理状況カウンタ1303が“0”と異なるエントリのフローID1302の値と一致しないと判定された場合、調停部2501は、処理状況カウンタ1303が“0”である演算フロー管理リスト702のエントリのうち、演算部1301の値が若い番号から順番にエントリを抽出する。調停部2501は、抽出されたエントリの演算部1301が示す演算部2503を、入力パケットに関する演算処理を新規に実行する演算部2503に決定する。
本実施例においては、1パケット毎の帯域制御結果を取得するため、同じフローIDの複数のパケットを調停部2501が同時に取得した場合、それぞれのパケットを別々の演算部2503で処理する。このため、調停部2501は、同時に取得した同じフローIDのそれぞれのパケットを演算フロー管理リスト702の別々のエントリで管理する。
例えば、調停部2501は、同じフローIDの第1のパケット及び第2のパケットに関する処理トリガを同時に取得し、演算処理を新規に実行すると判定した場合、演算フロー管理リスト702から2つのエントリを抽出し、抽出されたエントリの演算部1301が示す演算部2503を、それぞれ第1のパケットあるいは第2のパケットに関する演算処理を新規に実行する演算部2503に決定する。そして、調停部2501は、抽出されたエントリのフローID1302を、S2801で取得したフローIDの値によって更新する。また、調停部2501は、抽出されたエントリの処理状況カウンタ1303を、演算時間を示す値に更新する(S2809)。例えば、調停部2501は、演算時間が10clkの場合、取得されたフローIDの値とフローID1302とが一致したエントリの処理状況カウンタ1303の値を“10”に更新する。
S2809において処理状況カウンタ1303を更新することによって、調停部2501は、各演算部2503が演算処理を終了するまで実行していることを示す。
なお、前述のS2809において、調停部2501は、処理状況カウンタ1303が“0”である演算フロー管理リスト1302のエントリのうち、演算部1301の値が若い番号(小さい番号)から順番にエントリを抽出したが、調停部2501は、処理状況カウンタ1303が“0”である演算フロー管理リスト702のエントリのうちのいずれかであれば、いかなる規則に従ってエントリを抽出してもよい。例えば、調停部2501は、値が大きい番号から順番にエントリを抽出してもよいし、管理者によってあらかじめ抽出するエントリの順番を定められていてもよい。
S2809の後、調停部2501は、同じフローIDの複数の処理開始トリガを同時に取得した場合に使用するトークン補正量を決定して保持する(S2813)。トークン補正量は、調停部2501で同じフローIDの複数のパケットを同時に取得した場合に使用され、後述する帯域演算処理S2950を用いて、入力パケットの到着毎にトークン演算を実施したように計算するために補正するための値である。
例えば、調停部2501は、同じフローIDの複数のパケットに関する処理開始トリガを同時に取得しない場合は、トークン補正量を0とする。同じフローIDの複数のパケット(第1のパケット及び第2のパケットとする。)に関する処理開始トリガを同時に取得した場合は、調停部2501は、第1のパケットに関する処理をすると決定された演算部2503向けのトークン補正量を0とし、第2のパケットに関する処理をすると決定された演算部2503向けのトークン補正量を第1のパケットのパケット長とする。さらに、同じフローIDの複数のパケット(第1のパケット、第2のパケット、及び第3のパケット、とする)に関する処理トリガを同時に取得した場合は、調停部2501は、第3のパケットに関する処理をすると決定された演算部2503向けのトークン補正量を第1のパケットのパケット長に第2のパケットのパケット長を加算した値とする。以下、同様に、同じフローIDの複数のパケット(第1のパケット、第2のパケット、第3のパケット、及び第4のパケット、とする)に関する処理トリガを同時に取得した場合は、調停部2501は、第4のパケットに関する処理をすると決定された演算部2503向けのトークン補正量を第1のパケットのパケット長に第2のパケットのパケット長と第3のパケットのパケット長を加算した値とする。
S2813の後、調停部2501は、決定された演算部2503へ、処理開始トリガ、新規/継続パラメータ、取得パケット長、テーブル取得結果、及び、トークン補正量を含む演算通知を出力する(S2810)。
S2810において、調停部2501は、新規/継続パラメータを新規を示す値に決定し、新規を示す新規/継続パラメータ(本実施例において“0”)を、演算通知に含める。本実施例における新規/継続パラメータとは、各演算部2503にどのような演算処理を実行するかを通知するための値である。
また、S2810において、出力される演算通知に含まれる処理開始トリガは、演算部2503が後述する帯域演算処理S2950を開始することを示す値である。また、演算通知に含まれる取得パケット長は、S2801において取得したパケット長である。なお、本実施例では、同じフローIDの複数のパケットを同時に取得した場合でも、別々の演算部で処理を実行させるため、実施例1のようにパケット長を合算しない。
また、S2810において、演算通知に含まれるテーブル取得結果は、S2804及びS2805において取得した周期加算トークン値、トークンバケツの深さ、前回パケット到着時刻、及び、保持トークン値である。また、S2810において、演算通知に含まれるトークン補正量は、S2813において保持したトークン補正量である。
調停部2501がトークン補正量を演算部2503に出力することによって、同じフローIDの入力パケットを同時に受信した場合でも、複数の各演算部2503が1パケット毎のトークン計算を実施することができ、正常に帯域演算処理を実行可能である。
S2810の後、図28に示す演算部選定調停処理S2850を終了する(S2811)。
また、S2806において、S2801で取得したフローIDの値が、処理状況カウンタ1303が“0”と異なるエントリのフローID1302の値と一致すると判定された場合、入力パケットのフローIDに対応する演算部2503は、入力パケットに関する演算処理を継続して実行できる。このため、調停部2501は、取得したフローIDの値とフローID1302とが一致したエントリの演算部1301が示す演算部2503を、入力パケットに関する演算処理を継続して実行する演算部2503に決定する。
そして、調停部2501は、取得されたフローIDの値とフローID1302とが一致したエントリの処理状況カウンタ1303の値を、演算時間を示す値に更新する(S2807)。
S2807の後、調停部2501は、S2813の処理と同様に、同じフローIDの処理開始トリガを複数同時に取得した場合に使用するトークン補正量を決定して保持する(S2812)。
S2812の後、調停部2501は、取得したフローIDの値とフローID1302の値とが一致した演算フロー管理リスト702のエントリの演算部1301が示す演算部2503へ、処理開始トリガ、新規/継続パラメータ、取得パケット長、テーブル取得結果、及び、トークン補正量を含む演算通知を出力する(S2808)。
S2808において、調停部2501は、同じフローIDのパケットに関する処理トリガが複数同時に到着した場合、S2812において保持したトークン補正量を出力することにより、複数の演算部2503が並行して1パケット毎のトークン計算を実施することができ、オーバーフローを発生することなく帯域演算処理を実行可能である。
S2808の後、図28に示す演算部選定調停処理S2850を終了する(S2811)。
以下、図29A及び図29Bによって、演算部2503(2503−1〜2503−N)が実行する帯域演算処理S2950について説明する。
図29Aは、本実施例3の演算部2503が実行する帯域演算処理S2950のうち、入力パケットを受信するまでに蓄積されるべきトークン量を算出する処理を示すフローチャートである。
演算部2503は、調停部2501から処理開始トリガを含む振分け通知を受信した場合(S2900)、演算通知に含まれる新規/継続パラメータ、取得パケット長、テーブル取得結果(周期加算トークン量、トークンバケツの深さ、前回パケット到着時刻、及び、保持トークン値を含む)、及び、トークン補正量を取得する(S2901)。
S2901の後、演算部2503は、新規/継続パラメータが“0”であるか否か、すなわち、新規/継続パラメータが新規を示すか否かを判定する(S2902)。
新規/継続パラメータが“0”である場合、すなわち、新規/継続パラメータが新規を示すとS2902において判定された場合、演算部2503は、S2905の処理に進む。
S2902において、新規/継続パラメータが“0”ではないと判定された場合、すなわち、新規/継続パラメータが継続を示すと判定された場合、演算部2503は、継続処理用に内部保持する前回テーブル更新時間を、前回パケット到着時刻として取得する(S2903)。
S2903の後、演算部2503は、調停部2501から受信する継続処理用の保持トークン値を、保持トークン値として取得し(S2904)、S2905の処理に進む。
S2905において、演算部2503は、調停部2501の演算部選定調停処理S2850において帯域設定テーブル2504を検索した時刻を、S2900において受信した処理開始トリガとの時間差より算出し、前回テーブル更新時間として次に受信する入力パケットの継続処理用に内部保持する(S2905)。
S2905の後、演算部2503は、S2905において算出した帯域設定テーブル2504を検索した時刻と、S2901において取得した前回パケット到着時刻との差を、パケット到着間隔として算出する。そして、演算部2503は、算出されたパケット到着間隔と、S2901において取得した周期加算トークン値とを乗算することによって、加算トークン量を算出する(S2906)。
S2906の後、演算部2503は、S2906において算出された加算トークン量を、S2901において取得した保持トークン値の値に加算し(S2907)、図29Bに示すS2908の処理に進む。
S2907における加算結果は、入力パケットを受信するまでにトークンバケツに蓄積されていたトークン量である。
S2902〜S2907の処理に他に、実施例3の演算部2503は、新規/継続パラメータの値に従って、異なる処理を行ってもよい。例えば、新規/継続パラメータが新規を示す場合、演算部2503は、S2907の結果である加算結果に、ユーザによってあらかじめ与えられた値を加算してもよい。
図29Bは、本実施例3の演算部2503が実行する帯域演算処理S2950のうち、入力パケットが保証内であるか否かを判定する処理を示すフローチャートである。
S2907の後、演算部2503は、S2907における加算結果が、S2901において取得したトークンバケツの深さの値を超過するか否かを判定する(S2908)。
S2908において、S2907における加算結果がトークンバケツの深さの値以下であると判定された場合、演算部2503は、S2907における加算結果からS2901において取得したトークン補正量を減算した値を、現在トークン量として保持する(S2909)。S2909の後、演算部2503は、S2911の処理に進む。
またS2908において、S2907における加算結果がトークンバケツの深さの値を超過していると判定された場合、演算部2503は、トークンバケツの深さからS2901において取得したトークン補正量を減算した値を、現在トークン量として保持する(S2910)。S2910の後、演算部2503は、S2911の処理に進む。
S2909及びS2910におけるトークン補正量によって、同一フローIDの入力パケットを同時に受信する場合において、更新するトークン量の値を入力パケットの到着順に従って計算することができる。
S2909又はS2910の後、演算部2503は、S2909又はS2910において保持された現在トークン量が、S2901において取得した取得パケット長の値以上であるか否かを判定する(S2911)。
S2911において、現在トークン量が取得パケット長の値以上であると判定された場合、演算部2503は、現在トークン量から取得パケット長分を減算した値を、更新保持トークン値として算出する(S2912)。更新保持トークン値は、入力パケットを送信した後のトークンバケツに残るトークン量を示す。
S2912の後、演算部2503は、帯域が保証内であることを示す帯域制御結果を生成し、生成された帯域制御結果を調停部2501へ送信する(S2913)。
S2913の後、演算部2503は、S2916の処理に進む。
S2911において、現在トークン量が取得パケット長の値未満であると判定された場合、演算部2503は、現在トークン量と同じ値を、更新保持トークン値として保持する(S2914)。
S2914の後、演算部2503は、帯域が保証外であることを示す帯域制御結果を生成し、生成された帯域制御結果を調停部2501へ送信する(S2915)。
S2915の後、演算部2503は、S2916の処理に進む。
なお、演算部2503は、S2913又はS2914において、帯域が保証内又は保証外であることを示す帯域制御結果を生成し、後述するS2916において、生成された帯域制御結果と演算終了を示す通知とを、調停部2501へ送信してもよい。
S2913及びS2914において、帯域制御結果を送信又は生成することによって、演算部2503は、後述する出力判定処理S3150において、帯域制御結果に従った処理を入力パケットに行わせることが可能となる。
S2913又はS2914の後、演算部2503は、演算終了を示す通知を生成し、帯域設定テーブル2504を検索した時刻を前回パケット到着時刻、及び、更新保持トークン値を保持トークン値として、生成された通知とともに調停部2501へ送信する(S2916)。
S2916の後、図29A及び図29Bに示す処理を終了する(S2917)。
以下に、調停部2501が実行する更新調停処理S3050について説明する。
図30は、本実施例3の調停部2501が実行する更新調停処理S3050を示すフローチャートである。
調停部2501は、演算部2503(2503−1〜2503−N)から演算終了通知を受信した場合(S3000)、受信した演算終了通知に含まれる帯域制御結果、前回パケット到着時刻、及び、保持トークン値を取得する(S3001)。
S3001の後、調停部2501は、同一フローを処理している複数の演算部2503から演算終了通知を受信しているか否かを判定する(S3002)。
S3002において、同一フローを処理している複数の演算部2503から演算終了通知を受信していないと判定した場合、調停部2501は、S3004の処理に進む。
また、S3002において、同一フローを処理している複数の演算部2503から演算終了通知を受信していると判定した場合、調停部2501は、演算結果保持テーブル2514に更新する結果を選択する(S3003)。S3003における演算結果保持テーブル2514に更新する結果の選択方法は、後述する図31Aから図31Cを用いて説明する。
S3003の後、調停部2501は、S3004の処理に進む。
S3004において、調停部2501は、演算結果保持テーブル2514に前回パケット到着時刻及び保持トークン値を書き戻す。
S3004の後、調停部2501は、次に受信する入力パケットの継続処理のために、演算結果保持テーブル2514に書き戻した保持トークン値を前回保持トークン値として、演算終了通知を受信した演算部2503へ通知する(S3005)。
S3005の後、調停部2501は、演算部選定調停処理S2850において保持した処理開始トリガの到着順から、処理開始トリガの送信元の分散処理部5503(5503−1〜5503−N)を特定し、特定した分散処理部5503へ演算終了通知、及び、帯域制御結果を転送する(S3006)。
S3006の後、調停部2501は、更新調停処理S3050を終了する(S3007)。
以下、図31Aから図31Cを用いて前回パケット到着時刻、及び、保持トークン値の選択例について説明する。
図31Aは、本実施例3の調停部2501が実行する更新調停処理S3050における演算結果保持テーブル2514に更新する結果の選択において、同一フローIDを処理する複数の演算部から同時に通知される帯域制御結果が全て保証内であった場合の例を示す説明図である。
図31Aでは、4つの入力パケットが同時に到着し、演算部(1)から演算部(4)は、4つの入力パケットの第一パケットから第四パケットを順番に処理し、その帯域制御結果が全て保証内であった例を示す。帯域制御結果が保証内であった場合、演算部((1)〜(4))は、帯域演算処理S2950において、更新保持トークン値は現在トークン量からパケット長分のトークンを減算した値とする。このため、調停部2501は、演算部((1)〜(4))から出力される保持トークン値の値が最も小さい、第四パケットを処理した演算部(4)の前回パケット到着時刻、及び、保持トークン値を選択する。なお、いづれの演算部((1)〜(4))でも前回パケット到着時刻は同じとなるため、調停部2501は、演算部(1)から演算部(3)が出力する前回パケット到着時刻を選択しても良い。
図31Bは、本実施例3の調停部2501が実行する更新調停処理S3050における演算結果保持テーブル2514に更新する結果の選択において、同一フローIDを処理する複数の演算部から同時に通知される帯域制御結果が全て保証外であった場合の例を示す説明図である。
図31Bでは、4つの入力パケットが同時に到着し、演算部(1)から演算部(4)は、4つの入力パケットの第一パケットから第四パケットを順番に処理し、その帯域制御結果が全て保証外であった例を示す。帯域制御結果が保証外であった場合、演算部((1)〜(4))は、帯域演算処理S2950において、更新保持トークン値は現在トークン量と同じ値とする。演算部((1)〜(4))から出力される保持トークン値の値が全て同じであるため、調停部2501は、第一パケットを処理した演算部(1)の前回パケット到着時刻、及び、保持トークン値を選択する。調停部2501は、演算部(2)から演算部(4)が出力する前回パケット到着時刻、及び、保持トークン値を選択しても良い。
図31Cは、本実施例3の調停部2501が実行する更新調停処理S3050における演算結果保持テーブル2514に更新する結果の選択において、同一フローIDを処理する複数の演算部から同時に通知される帯域制御結果が保証内と保証外を含んだ場合の例を示す説明図である。
図31Cでは、4つの入力パケットが同時に到着し、演算部(1)から演算部(4)は、4つの入力パケットの第一パケットから第四パケットを順番に処理し、演算部(1)及び演算部(2)の帯域制御結果が保証内、演算部(3)及び演算部(4)の帯域制御結果が保証外であった例を示す。この場合、演算部(1)及び演算部(2)は、パケット長分のトークンを減算する。演算部(3)及び演算部(4)はパケット長分のトークンは減算せず、演算部(3)及び演算部(4)の更新保持トークン値は演算(2)の更新保持トークン値と同じになる。このため、調停部2501は、第二パケットを処理した演算部(2)の前回パケット到着時刻、及び、保持トークン値を選択する。調停部2501は、演算部(3)から演算部(4)が出力する前回パケット到着時刻、及び、保持トークン値を選択しても良い。また、前回パケット到着時刻は同じとなるため、調停部2501は、演算部(1)が出力する前回パケット到着時刻を選択しても良い。
これによって、調停部2501は、同一フローIDの入力パケットの処理開始トリガを同時に受信する場合において、入力パケットの到着順に従って計算した各保持トークンの計算値の値から更新するべき値を選択することができ、その値を演算結果保持テーブル2514に更新する。よって、従来技術では、演算処理通知を受信した回数分、演算結果保持テーブル2514を更新する必要があったが、本願では、同一フローの演算処理通知を集約して演算結果保持テーブル2514を更新することが出来る。
以下に、分散処理部5503(5503−1〜5503−N)の出力判定処理部603が実行する出力判定処理S3250について説明する。
実施例3における出力判定処理部603は、集中処理部2505から受信する各入力パケットの帯域制御結果に基づいて、ペイロードを書き換える。
図32は、本実施例3の出力判定処理部603が実行する出力判定処理S3250を示すフローチャートである。
出力判定処理部603は、入力ヘッダ処理部602から入力パケットを受信した場合(S3200)、集中処理部2505から演算終了通知があるか否かを判定する(S3201)。
S3201において、演算終了通知があると判定された場合、演算終了通知と同時に受信した帯域制御結果(保証内、保証外)に応じて、パケットのペイロード(例えばVLANヘッダ403のCoS値)を上書きする(S3202)。
S3202の後、多重部504へパケットを転送し(S3203)、図32に示す出力判定処理S3250を終了する(S3205)。
また、S3201において、演算終了通知がないと判定された場合、入力パケットを廃棄し(S3204)、図32に示す出力判定処理S3250を終了する(S3205)。
前述のとおり、実施例3によれば、パケット通信装置2は、調停部2501において、ラウンドロビンで各分散処理部5503(5503−1〜5503−N)に振分けられたパケットの情報を集約し、演算部2503(2503−1〜2503−N)へ通知する。これによって、実施例3の演算部2503は、同一フローのパケットに関する帯域制御処理を同時に実行することが可能である。
従って、実施例3によれば、実施例1及び実施例2と同様に、マルチコア化されたパケット処理エンジンにおいて、1つの分散処理部への負荷集中による性能劣化を抑えることができる。さらに、分散処理部を増設することでスケーラブルにパケット処理エンジンの高速化が可能となる。