本実施例におけるパケット到着間隔とテーブル更新処理に必要な時間(テーブル更新時間)との関係の具体例を以下に示す。
図1Aは、本実施例1のパケット到着間隔がテーブル更新時間以上である場合のテーブル更新処理を示す説明図である。
例えば、パケット到着間隔が10clk以上であり、かつ、テーブル更新時間が10clkである場合、本実施例のパケット通信装置は、パケット到着毎にテーブル更新処理を実施できる。これは、例えば、1Gbps回線におけるパケット到着間隔が40clkであり、また、10Gbps回線におけるパケット到着間隔が10clkであり、テーブル更新時間が10clkである場合に相当する。
図1Bは、本実施例1のパケット到着間隔がテーブル更新時間よりも短い場合のパケットの受信状況を示す説明図である。
例えば、100Gbps回線におけるパケット到着間隔が2clkであり、テーブル更新時間10clkである場合、パケット通信装置に一つ目のパケットが到着した後、テーブル更新処理が終了する前に、二つ目のパケットが到着する。この場合、パケットが廃棄されるため、二つ目のパケットに関するテーブル更新処理は実行されない。
以下、本実施例1について図2から図13を用いて説明する。なお、以下に述べる実施例1は本発明の実施例の一つであって、本発明を制限するものではない。
本実施例におけるパケット通信装置は、以下で説明する並列処理方法を実装し、各フローのパケットが到着した際に各フローの情報記憶媒体(テーブル)情報を更新する。
図2は、本実施例1のパケット通信装置2の物理的な構成及び論理回路210を示すブロック図である。
本実施例のパケット通信装置2は、パケットを他のパケット通信装置へ転送する装置である。パケット通信装置2は、複数のネットワークインタフェースボード(NIF)(200−1〜200−M)、及び、スイッチ部206を備える。
NIF200は、ネットワークからパケットを受信し、ネットワークへパケットを送信するためのインタフェースである。スイッチ部206は、各NIF200に接続される装置であり、NIF200から受信したパケットを、パケットを送信すべきNIF200に振り分ける装置である。
各NIF200は、入出力回線インタフェース201、SWインタフェース205、論理回路210、及びNIF管理部211を備える。
入出力回線インタフェース201は、通信ポートである。パケット通信装置2は、入出力回線インタフェース201及びネットワークを介して、他のパケット通信装置と接続する。実施例1における入出力回線インタフェース201は、イーサネット(登録商標、以下同じ)用の回線インタフェースである。
SWインタフェース205は、スイッチ部206に接続するための装置である。
NIF管理部211は、例えば、CPU等のプロセッサである。NIF管理部211は、論理回路210における処理を制御する。
論理回路210は、本実施例のパケットに対する処理を行う回路である。論理回路210は、少なくとも一つのメモリ及び少なくとも一つの演算装置(例えば、プロセッサ)を備える。
論理回路210は、入力ヘッダ処理部202、入力パケット制御部203、出力ヘッダ処理部207、出力パケット制御部208等の処理部を有し、設定レジスタ212を備える。また、論理回路210が備えるメモリは、設定用テーブル213、演算用テーブル214、入力パケットバッファ204、及び、出力パケットバッファ209を保持する。
パケット通信装置2が受信したパケットは、入出力回線インタフェース201、入力ヘッダ処理部202、SWインタフェース205、スイッチ部206、SWインタフェース205、入力パケット制御部203、出力ヘッダ処理部207、出力パケット制御部208、及び、入出力回線インタフェース201の順に送信される。
論理回路210が有する各処理部は、集積回路等の物理的な装置によって実装されてもよいし、少なくとも一つのプロセッサによって実行されるプログラムによって実装されてもよい。また、複数の処理部(例えば、入力パケット制御部203及び入力ヘッダ処理部202)が一つの装置又はプログラムによって実装されてもよいし、一つの処理部が複数の装置又は複数のプログラムによって実装されてもよい。
NIF管理部211は、設定レジスタ212を制御する。設定レジスタ212は、データを一時的に格納する記憶領域を有し、論理回路210に備わる各処理部のレジスタ値を保持する。
図2には、設定レジスタ212と入力パケット制御部203との接続のみが図示されるが、設定レジスタ212は論理回路210を介して論理回路210に備わる全ての処理部と接続する。なお、以下において、設定レジスタ212の処理内容についての説明を省略するが、論理回路210が有する全ての処理部は、設定レジスタ212を用いて処理を実行する。
入出力回線インタフェース201は、受信したパケット4に後述する装置内ヘッダ3を付加する。
図3は、本実施例1の通信において用いられるパケット4のフォーマットを示す説明図である。
図3に示すパケット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ヘッダ又は他のプロトコルのヘッダが設定され、VLAN IDには、MPLSラベル値などがフローの識別子として設定されてもよい。フレームチェックシーケンス(FCS)406には、フレームの誤りを検出するための値が設定される。
図4は、本実施例1のパケット4に付加される装置内ヘッダ3のフォーマットを示す説明図である。
入出力回線インタフェース201は、受信したパケット4をパケット通信装置2において処理するため、受信したパケット4に装置内ヘッダ3を付加する。装置内ヘッダ3が付加され、入出力回線インタフェース201からスイッチ部206に向けて送信されるパケット4を、以降において、入力パケットと記載する。
装置内ヘッダ3は、出力ネットワークインタフェースボード識別子(出力NIF ID)301、フローID302、及び、フレーム長303を含む。
出力NIF ID301は、内部ルーティング情報である。本実施例の内部ルーティング情報とは、パケット通信装置2が受信したパケット4を、パケット通信装置2のいずれのNIF200のポートから出力するかを示す情報である。スイッチ部206は、内部ルーティング情報に従い、スイッチ部206に送信された入力パケットを特定のNIF200の特定のSWインタフェース205に転送する。
入出力回線インタフェース201は、受信したパケット4に装置内ヘッダ3を付加する際、出力NIF ID301、及び、フローID302にnull値等の値を格納する。すなわち、入出力回線インタフェース201は、出力NIF ID301、及び、フローID302に格納される値を決定しない。出力NIF ID301、及び、フローID302には、入力ヘッダ処理部202によって値が格納される。
入出力回線インタフェース201は、受信したパケット4のフレーム長を取得し、装置内ヘッダ3のフレーム長303に、取得されたフレーム長を格納する。その後、入出力回線インタフェース201は、パケット4を入力ヘッダ処理部202に送信する。
入力ヘッダ処理部202は、入出力回線インタフェース201から受信した入力パケットの403に基づいて、パケット4のフローを識別する。そして、入力ヘッダ処理部202は、識別されたフローに従ってVLANタグの処理を実行し、これによって、入力パケットの出力NIF ID301、及び、フローID302に値を格納する。
VLANタグの処理とは、例えば、VLANタグの透過、変換、付与及び削除である。すなわち、VLANタグの処理とは、入力パケットのVLANヘッダを、パケット通信装置2から出力されるパケットのVLANヘッダに変換する処理である。
入力ヘッダ処理部202は、VLANタグの処理において、宛先MACアドレス401及び送信元MACアドレス402を、入出力回線インタフェース201に設定される値によって上書きしてもよいし、あらかじめ登録されていたフロー毎の値によって上書きしてもよい。
VLANタグを処理し、装置内ヘッダ3に出力NIF ID301及びフローID302を追加した後、入力ヘッダ処理部202は、入力パケットを入力パケット制御部203に送信する。
入力パケット制御部203は、入力ヘッダ処理部202から受信した入力パケットを、入力パケットバッファ204に格納する。この際、入力パケット制御部203は、設定用テーブル213、及び、演算用テーブル214を用いて受信した入力パケットに関して、後述するパケット処理を実行する。
パケット処理後、入力パケット制御部203は、入力パケットバッファ204に格納された入力パケットを読み出し、SWインタフェース205に送信する。SWインタフェース205は、受信した入力パケットをスイッチ部206に転送する。
スイッチ部206は、各NIF200のSWインタフェース205から入力パケットを受信した後、入力パケットの出力NIF ID301を参照することによって、受信した入力パケットの転送先であるNIF200を特定する。次に、スイッチ部206は、特定されたNIF200に対応するSWインタフェース205に、受信した入力パケットを、出力パケットとして転送する。
なお、本実施例において、スイッチ部206から入出力回線インタフェース201へ送信されるパケット4を出力パケットと記載する。
SWインタフェース205は、受信した出力パケットを出力ヘッダ処理部207に転送する。
前述の例では、入力ヘッダ処理部202が、入力パケットのヘッダ(フォーマット)を、パケット通信装置2から出力されるパケットのヘッダ(フォーマット)に変換した。しかし、本実施例の出力ヘッダ処理部207は、入力ヘッダ処理部202の代わりに、出力パケットのヘッダ変換を実行してもよい。
なお、入力ヘッダ処理部202においてヘッダ変換(フォーマット変換)が既になされている場合、出力ヘッダ処理部207は、SWインタフェース205から受信した出力パケットをそのまま出力パケット制御部208に転送する。
また、前述の例では、入力パケット制御部203がパケット処理を実行した。しかし、出力パケット制御部208が、入力パケット制御部203の代わりに、出力パケットバッファ209に出力パケットを格納し、さらに、パケット処理を実行してもよい。
出力パケット制御部208がパケット処理を実行する場合、パケット処理後、出力パケット制御部208は、出力パケットバッファ209に格納された出力パケットを読み出す。そして、読み出された出力パケットを入出力回線インタフェース201に送信する。
出力パケット制御部208がパケット処理を実施しない場合、出力パケット制御部208は、出力ヘッダ処理部207から受信した出力パケットを、そのまま入出力回線インタフェース201に転送する。
入出力回線インタフェース201は、受信した出力パケットから装置内ヘッダ3を除去する。その後、入出力回線インタフェース201は、図3に示すパケット4のフォーマットによって、出力パケットを他の装置へ転送する。
図5は、本実施例1の入力パケット制御部203の論理的な構成を示すブロック図である。
入力パケット制御部203は、並列処理振分部501、利用フロー管理リスト502、複数の並列処理部503(503−1〜503−N)、出力判定部504、及び、アクセス調停部505を備える。
並列処理振分部501は、入力パケット制御部203が入力ヘッダ処理部202から入力パケットを受信した場合、後述する振分け処理S950を実行する処理部である。並列処理振分部501は、振分け処理S950において、入力パケットの装置内ヘッダ3のフローID302に基づいてフローを識別し、さらに、利用フロー管理リスト502を参照する。そして、これによって、入力パケットに関するテーブル更新処理を実行する並列処理部503を、並列処理部503−1〜並列処理部503−Nから決定する。
また、並列処理振分部501は、利用フロー管理リスト502を、論理回路210に備わるメモリ等に保持する。そして、並列処理振分部501は、後述する振分け処理S950及び利用フロー管理処理S1050において、利用フロー管理リスト502を更新する。また、並列処理振分部501は、入力パケットを受信すると、受信した入力パケットを入力パケットバッファ204に格納する。
利用フロー管理リスト502は、並列処理部503が処理する入力パケットのフローIDと、並列処理部503の処理状況とを示す。
並列処理部503は、後述するテーブル更新処理S1150において、演算用テーブル214に含まれる各フローの情報を更新する。また、並列処理部503は、テーブル更新処理S1150の処理判定結果を、出力判定部504に送信する。並列処理部503は、入力パケット制御部203にN個(Nは任意の自然数)備わる。
本実施例において、並列処理部503がテーブル更新処理S1150に要するテーブル更新時間はあらかじめ定められる。また、本実施例の入力パケットバッファ204(又は出力パケットバッファ209)は、シフトレジスタとして、並列処理振分部501及び出力判定部504によって使用される。
さらに、本実施例において、並列処理部503の数Nは、テーブル更新時間と最短パケット到着間隔とに基づいて決定される。なお、最短パケット到着間隔は、パケット通信装置2が接続される回線に従って、あらかじめ定められる値である。
例えば、テーブル更新時間が10clkであり、最短パケット到着間隔が2clkである場合、テーブル更新時間から最短パケット到着間隔を除算(余りは繰上げ)した結果は“5”である。このため、並列処理部503の数Nは“5”にあらかじめ決定される。
出力判定部504は、後述する出力判定処理S1250を実行し、各並列処理部503(503−1〜503−N)から演算終了及び処理判定結果を受信する。出力判定部504は、入力パケットバッファ204から入力パケットを読み出し、読み出された入力パケットのヘッダ又はペイロードを、処理判定結果に基づいて変換する。その後、出力判定部504は、入力パケットをSWインタフェース205に送信する。
アクセス調停部505は、並列処理部503−1〜並列処理部503−Nによる設定用テーブル213及び演算用テーブル214へのアクセス(読み出し及び書き戻し)を調停する。アクセス調停部505の処理の詳細は、以降において省略するが、各並列処理部503が設定用テーブル213及び演算用テーブル214へアクセスする場合、アクセス調停部505がアクセスを調停する。
図6は、本実施例1の利用フロー管理リスト502を示す説明図である。
利用フロー管理リスト502は、並列処理部601、フローID602、及び、処理状況カウンタ603を含む。
並列処理部601は、並列処理部503−1〜503−Nを一意に示す識別子を含む。本実施例の並列処理部601は、並列処理部503を数値によって識別する値を含む。並列処理部601に格納される値は、管理者等によってあらかじめ設定される。
フローID602は、並列処理部503が処理する入力パケットに割り当てられたフローを一意に示すフローIDを含む。フローID602に格納される値は、並列処理振分部501によって更新される。また、フローID602に格納される値は、入力ヘッダ処理部202において装置内ヘッダ3のフローID302に格納された値に対応する。
処理状況カウンタ603は、並列処理部503におけるテーブル更新処理の状況を示す値を含む。本実施例の処理状況カウンタ603は、テーブル更新処理が開始されてから経過した実行時間に関する値を含む。
以下に示す処理状況カウンタ603は、減算カウンタによって、テーブル更新処理が終了するまでの残り時間を示す。具体的には、テーブル更新処理が開始された場合、処理状況カウンタ603にはテーブル更新時間が格納される。そして、並列処理振分部501が単位時間(本実施例において1clk)毎に処理状況カウンタ603の値を減算する。
処理状況カウンタ603に“0”が格納されるエントリは、並列処理部601が示す並列処理部503はテーブル更新処理を終了したことを示す。また、処理状況カウンタ603に“0”以外の正の数が格納されるエントリは、並列処理部601が示す並列処理部503はテーブル更新処理中であることを示す。
以下において、処理状況カウンタ603が減算カウンタである場合の処理を記載するが、処理状況カウンタ603は加算カウンタによって、テーブル更新処理が開始されてから経過した時間を示してもよい。この場合、並列処理振分部501は、所定のテーブル更新時間と処理状況カウンタ603とを比較することによって、テーブル更新処理の状況を取得してもよい。
図7は、本実施例1の設定用テーブル213を示す説明図である。
設定用テーブル213に格納される値は、並列処理部503がテーブル更新処理を実行するために用いる設定値であり、管理者等によってあらかじめ定められる設定値である。設定用テーブル213は、フローID701、及び、設定情報702を含む。
フローID701は、入力パケットに割り当てられたフローを一意に示すフローIDを含む。フローID701に格納される値は、入力ヘッダ処理部202において装置内ヘッダ3のフローID302に格納された値に対応する。
設定情報702は、テーブル更新処理において用いられる情報を示す。具体的には、設定情報702は、テーブル更新処理において、並列処理部503が演算結果を更新する際に使用する設定値を示す。
図8は、本実施例1の演算用テーブル214を示す説明図である。
演算用テーブル214は、フローID801、及び、演算結果802を含む。
フローID801は、入力パケットに割り当てられたフローを一意に示すフローIDを含む。フローID801に格納される値は、入力ヘッダ処理部202において装置内ヘッダ3のフローID302に格納された値に対応する。
演算結果802は、フロー毎のパケット処理の結果、すなわち、フロー毎のテーブル更新処理の結果を示す。演算結果802に格納される値は、並列処理部503によるテーブル更新処理によって更新される。
以下に、並列処理振分部501が実行する振分け処理S950について説明する。
図9は、本実施例1の並列処理振分部が実行する振分け処理S950を示すフローチャートである。
並列処理振分部501は、入力ヘッダ処理部202から入力パケットを受信した場合(S900)、受信した入力パケットに含まれる装置内ヘッダ3からフローID302、及び、フレーム長303の値を取得する(S901)。
S901の後、並列処理振分部501は、利用フロー管理リスト502の全てのエントリの処理状況カウンタ603の値が“0”と異なるか否かを判定する(S902)。
S902において、利用フロー管理リスト502の全てのエントリの処理状況カウンタが“0”と異なると判定された場合、全ての並列処理部503は、テーブル更新処理を実行中である。このため、並列処理振分部501は、入力パケットを廃棄し(S903)、図9に示す振分け処理S950を終了する(S909)。
また、S902において、利用フロー管理リスト502のエントリのうち、処理状況カウンタ603が“0”ではないエントリがある場合、全ての並列処理部503のうち少なくとも一つの並列処理部503は、テーブル更新処理を実行していない。このため、並列処理振分部501は、S901において取得されたフローID302の値が、処理状況カウンタ603が“0”と異なるエントリのフローID602の値と一致するか否かを判定する(S904)。
なお、S904において、並列処理振分部501は、S901において取得されたフローID302の値に対応する値が、処理状況カウンタ603が“0”と異なるエントリのフローID602の値と一致する場合、取得されたフローID302の値に対応する値と処理状況カウンタ603が“0”と異なるエントリのフローID602の値とが一致していると判定してもよい。
S901において取得されたフローID302の値が、処理状況カウンタ603が“0”と異なるエントリのフローID602の値と一致しないと、S904において判定された場合、並列処理振分部501は、テーブル更新処理を実行していない並列処理部に、入力パケットに関するテーブル更新処理を新規に実行させるため、ステップ907を実行する。
S901において取得されたフローID302の値が、処理状況カウンタ603が“0”と異なるエントリのフローID602の値と一致すると、S904において判定された場合、入力パケットのフローに対応する並列処理部503は、入力パケットに関するテーブル更新処理を継続して実行できる。このため、並列処理振分部501は、取得されたフローID302の値とフローID602とが一致したエントリの並列処理部601が示す並列処理部503を、入力パケットに関するテーブル更新処理を継続して実行する並列処理部503に決定する。
そして、並列処理振分部501は、取得されたフローID302の値とフローID602とが一致したエントリの処理状況カウンタ603を、テーブル更新時間を示す値に更新する(S905)。例えば、並列処理振分部501は、テーブル更新時間が10clkの場合、取得されたフローID302の値とフローID602とが一致したエントリの処理状況カウンタ603を、“10”に更新する。
S905において処理状況カウンタ603を更新することによって、並列処理振分部501は、各並列処理部503がテーブル更新処理を終了しているか否かを示す値を処理状況カウンタ603に格納できる。
ステップ905の後、並列処理振分部501は、取得されたフローID302の値とフローID602の値とが一致した利用フロー管理リスト502のエントリの並列処理部601が示す並列処理部503へ、処理開始トリガ、新規/継続パラメータ、取得フローID、及び、取得フレーム長を含む振分け通知を出力する(S906)。
S906において並列処理振分部501は、新規/継続パラメータを継続を示す値に決定し、継続を示す新規/継続パラメータ(本実施例において“1”)を、振分け通知に含める。本実施例における新規/継続パラメータとは、各並列処理部503にどのようなテーブル更新処理を実行するかを通知するための値である。
S906の後、図9に示す振分け処理S950を終了する(S909)。
S901において取得されたフローID302の値が、処理状況カウンタ603が0と異なるエントリのフローID602の値と一致しないと、S904において判定された場合、並列処理振分部501は、処理状況カウンタ603が“0”である利用フロー管理リスト502のエントリのうち、並列処理部601の値が最も若い番号のエントリを抽出する。並列処理振分部501は、抽出されたエントリの並列処理部601が示す並列処理部503を、入力パケットに関するテーブル更新処理を新規に実行する並列処理部503に決定する。
そして、並列処理振分部501は、抽出されたエントリのフローID602を、ステップ901において取得されたフローID302の値によって更新する。また、並列処理振分部501は、抽出されたエントリの処理状況カウンタ603を、テーブル更新時間によって更新する(S907)。
なお、前述のS907において、並列処理振分部501は、処理状況カウンタ603が“0”である利用フロー管理リスト502のエントリのうち、並列処理部601の値が最も若い番号(小さい番号)のエントリを抽出したが、並列処理振分部501は、処理状況カウンタ603が“0”である利用フロー管理リスト502のエントリのうちの一つであれば、いかなる規則に従ってエントリを抽出してもよい。例えば、並列処理振分部501は、最も値が大きい番号のエントリを抽出してもよいし、管理者によってあらかじめ抽出するエントリの順番を定められていてもよい。
S907の後、並列処理振分部501は、決定された並列処理部503へ、処理開始トリガ、新規/継続パラメータ、フローID、及び、フレーム長を含む振分け通知を出力する(S908)。S908において並列処理振分部501は、新規/継続パラメータを新規を示す値に決定し、新規を示す新規/継続パラメータ(本実施例において“0”)を、振分け通知に含める。
S906及びS908において出力される振分け通知に含まれる処理開始トリガは、テーブル更新処理を開始することを示す値である。また、振分け通知に含まれるフローIDは、S901において取得されたフローID、すなわち、入力パケットのフローIDである。また、振分け通知に含まれるフレーム長は、S901において取得されたフレーム長、すなわち、入力パケットのフレーム長である。
S908の後、並列処理振分部501は、図9に示す振分け処理S950を終了する(S909)。
以下に、並列処理振分部501が実行する利用フロー管理処理S1050について説明する。
図10は、本実施例1の並列処理振分部501が実行する利用フロー管理処理S1050を示すフローチャートである。
並列処理振分部501は、1クロック毎に(S1000)、利用フロー管理リスト502の全てのエントリの処理状況カウンタ603が“0”であるか否かを判定する(S1001)。
利用フロー管理リスト502の全てのエントリの処理状況カウンタ603が0であると、S1001において判定された場合、並列処理振分部501は、利用フロー管理処理S1050を終了する(S1003)。
また、利用フロー管理リスト502のエントリに処理状況カウンタ603が0でないエントリがあるとS1001において判定された場合、並列処理振分部501は、処理状況カウンタ603の列に含まれる0以外の値から1を減算する(S1002)。S1002の後、並列処理振分部501は、利用フロー管理処理S1050を終了する(S1003)。
以下に、並列処理部503−1〜503−Nが実行するテーブル更新処理S1150について説明する。
図11は、本実施例1の並列処理部503が実行するテーブル更新処理S1150を示すフローチャートである。
並列処理部503は、並列処理振分部501から処理開始トリガを含む振分け通知を受信した場合(S1100)、受信した振分け通知に含まれる新規/継続パラメータ、フローID、及び、フレーム長を取得する(S1101)。
S1101の後、並列処理部503は、新規/継続パラメータが“0”であるか否か、すなわち、新規/継続パラメータが新規を示すか否かを判定する(S1102)。
新規/継続パラメータが“0”である場合、すなわち、新規/継続パラメータが新規を示すとS1102において判定された場合、並列処理部503は、S1101において取得されたフローID、すなわち、入力パケットのフローIDを検索キーとして設定用テーブル213を検索する。そして、検索の結果、並列処理部503は、入力パケットのフローIDをフローID701に含む設定用テーブル213のエントリの設定情報702の値を取得する(S1103)。これによって、並列処理部503は、入力パケットに対応する設定情報702の値を取得する。
S1103の後、並列処理部503は、入力パケットのフローIDを検索キーとして、演算用テーブル214を検索する。そして、検索の結果、並列処理部503は、入力パケットのフローIDをフローID701に含む設定用テーブル213のエントリの演算結果802の値を取得する(S1104)。S1104の後、並列処理部503は、S1107の処理を実行する。
S1102において、新規/継続パラメータが“0”ではない場合、すなわち、新規/継続パラメータが継続を示すと判定された場合、並列処理部503は、S1103と同じく、入力パケットのフローIDを検索キーとして設定用テーブル213を検索することによって、入力パケットに対応する設定情報702の値を取得する(S1105)。
S1105の後、並列処理部503は、並列処理部503が継続処理用に内部保持する前回演算結果を取得する(S1106)。継続処理用に内部保持される前回演算結果とは、テーブル更新処理が全て終了する前に次のテーブル更新処理を継続して実行するために、並列処理部503が、設定レジスタ212等の論理回路210のメモリに保持する演算結果である。
S1106において、内部保持される前回演算結果を取得することによって、並列処理部503は、演算用テーブル214にアクセスする必要がなく、最新の演算結果に基づいてテーブル更新処理が可能である。そして、これによって、同じフローの入力パケットを連続して受信しても、正常にテーブル更新処理を実行可能である。
S1106の後、並列処理部503は、S1107の処理に進む。
S1102〜S1106の処理において、図11に示す並列処理部503は、テーブル更新処理におけるデータ演算のための情報の取得のみを行ったが、実施例1の並列処理部503は、新規/継続パラメータの値に従って、異なる処理を行ってもよい。例えば、新規/継続パラメータが新規を示す場合、並列処理部503は、S1104の後、設定用テーブル213から取得された設定情報702の値に、ユーザによってあらかじめ与えられた値を加算してもよい。
これによって、入力パケットが連続して受信する場合と、入力パケットが連続して受信されない場合とにおいて、更新される演算結果の値をユーザの要求に従って、変更することができる。
S1104又はS1106の後、並列処理部503は、受信した振分け通知に含まれるフレーム長、及び、設定用テーブル213から取得された設定情報702を用い、S1104又はS1106において取得された演算結果を更新する(S1107)。
S1107における演算結果の更新方法は、管理者等によってあらかじめ定められた方法を用いる。例えば、演算結果の更新方法には、受信した振分け通知に含まれるフレーム長を演算結果に加算することによって、演算結果を更新する方法がある。
また、並列処理部503は、S1107において、更新された演算結果と、設定情報702に格納される閾値とを比較し、比較結果に基づいて、入力パケットに対する処理(例えば、入力パケットのヘッダに含まれる値の変換等)を決定する。そして、決定された処理を、処理判定結果として取得する。
S1107の後、並列処理部503は、入力パケットのフローIDをフローID801に含む演算用テーブル214のエントリの演算結果802に、更新された演算結果を書き戻す。
また、S1107において、並列処理部503は、次に受信する振分け通知がパケットの継続処理を示す場合のため(次パケットの継続処理用に)、更新された演算結果を前回演算結果として内部保持する(S1108)。具体的には、並列処理部503が、更新された演算結果を、論理回路210が備える設定レジスタ212等のメモリに格納する。
S1108において前回演算結果を内部保持することによって、並列処理部503は、入力パケットを次に受信する際に行われるテーブル更新処理に、速やかに実行結果を引き継ぐことができる。
S1108の後、並列処理部503は、出力判定部504へ、演算終了を示す値、及び、S1107において取得された処理判定結果を示す値を含む演算終了通知を送信する(S1109)。S1109の後、並列処理部503は、テーブル更新処理S1150を終了する(S1110)。
以下に、出力判定部504が実行する出力判定処理S1250について説明する。
図12は、本実施例1の出力判定部504が実行する出力判定処理S1250を示すフローチャートである。
出力判定部504は、並列処理部503−1〜並列処理部503−Nのいずれかから演算終了通知を受信する(S1200)。
S1200の後、出力判定部504は、受信した演算終了通知から取得された処理判定結果に従って、入力パケットバッファ204から読み出された入力パケットのVLANヘッダ403の値又はペイロード405の値を変換する。その後、VLANヘッダ403の値又はペイロード405の値を変換された入力パケットを、SWインタフェース205に送信する(S1201)。
S1201の後、出力判定部504は、出力判定処理S1250を終了する(S1202)。
図12に示す処理によって、出力判定部504は、並列処理部503におけるテーブル更新処理の結果に従ったヘッダ変換等の処理を、入力パケットに行うことが可能である。
図13A及び図13Bは、図11に示すテーブル更新処理S1150によって変化する演算結果の二つの例を示す。
図13Aは、本実施例1の並列処理部503−1が連続してテーブル更新処理S1150を実行する際の演算結果を示す説明図である。
テーブル更新時間が10clkであり、かつ、最短パケット到着間隔が2clkである場合において、並列処理部503−1が、同一フローID“100”の入力パケットを2clk間隔で連続受信する例を、図13A及び図13Bに示す。
本実施例において、並列処理振分部501が最初に受信する入力パケットを第1のパケット、第1のパケットよりも2clk後に受信する入力パケットを第2のパケット、第2のパケットよりも2clk後に受信する入力パケットを第3のパケットと記載する。図13Aにおいて、第1のパケット、第2のパケット、及び第3のパケットのフローID302の値は、いずれも“100”である。
また、図13A及び図13Bにおいて、設定情報702−1は、フローID701に“100”を含む設定用テーブル213のエントリの設定情報702の値であり、演算結果802−1は、フローID701に“100”を含む演算用テーブル214のエントリの演算結果802の値である。また、前回演算結果1302−1は、並列処理部503−1が内部保持する前回演算結果である。
第1のパケットは、並列処理振分部501の処理(S904)によって、並列処理部503−1にテーブル更新処理を新規に実行させると決定された、入力パケットである。
実施例1の並列処理部503−1は、新規を示す新規/継続パラメータと、第1のパケットのフローIDと、第1のパケットのフレーム長と、処理開始トリガとを含む振分け通知を並列処理振分部501から受信したタイミング(T1311)から、第1のパケットのフローID“100”を検索キーとして、設定用テーブル213、及び、演算用テーブル214を検索する。そして、並列処理部503−1は、検索の結果、設定情報X1、及び、演算結果A1を取得する(テーブルRD)。
第1のパケットに関するテーブルRDは、図11に示すS1100〜S1104に相当する。
並列処理部503−1は、設定情報X1及び第1のパケットのフレーム長を用いて、演算結果A1を演算結果B1に更新する(データ演算)。第1のパケットに関するデータ演算は、図11のS1107に相当する。
そして、並列処理部503−1は、第1のパケットに関するデータ演算が終了したタイミング(T1314)から、演算結果B1による演算用テーブル214への書き戻しを開始する(テーブルWR)。第1のパケットに関するテーブルWRは、S1108に相当する。
一般的に、テーブルにアクセスするためには時間が必要であるため、演算結果B1による演算用テーブル214への書き戻しは、T1316に終了する。また、並列処理部503−1は、テーブルWRにおいて、演算結果B1を前回演算結果1302−1として、次に受信する入力パケットの継続処理用に内部保持する(図11に示すS1108に相当)。
第2のパケットは、第1のパケットに関するテーブル更新処理が終了する前に並列処理振分部501によって受信される。このため、第2のパケットは、並列処理振分部501の処理(S904)において並列処理部503−1にテーブル更新処理を継続して実行させると決定された、入力パケットである。
並列処理部503−1は、継続を示す新規/継続パラメータと、第2のパケットのフローIDと、第2のパケットのフロー長と、処理開始トリガと振分け通知を並列処理振分部501から受信したタイミング(T1312)から、第2のパケットのフローID“100”を検索キーとして、設定用テーブル213を検索する。並列処理部503−1は、検索の結果、設定情報X1を取得する(ダミーRD)。
第2のパケットに関するダミーRDは、S1100〜S1102、及び、S1105に相当する。
T1312において、第1のパケットに関するテーブル更新処理の演算結果の更新が終了していないため、演算結果802−1は、演算結果A1のままである。このため、並列処理部503−1は、第2のパケットに関するテーブル更新処理において、演算用テーブル214から演算結果を取得しない。
そして、並列処理部503−1は、新規/継続パラメータが継続を示す振分け通知を受信したタイミングから、ダミーRDを実行する。本実施例におけるテーブル処理において、演算用テーブル214を参照せず、設定用テーブル213から設定情報のみを取得する処理を、ダミーRDと記載する。
ダミーRDの後、並列処理部503−1は、第1のパケットのテーブル演算によって内部保持された前回演算結果1302−1を読み出すことによって、前に実行されたテーブル更新処理の演算結果B1を引き継ぐ(T1314)。第1のパケットのテーブル演算によって内部保持された演算結果B1を引き継ぐ処理は、図11のS1106に相当する。
そして、並列処理部503−1は、設定情報X1及び第2のパケットのフレーム長を用いて、引き継がれた演算結果B1を演算結果C1に更新する(データ演算)。第2のパケットに関するデータ演算は、図11に示すS1107に相当する。
第2のパケットに関するデータ演算の後、並列処理部503−1は、T1315から、演算結果C1による演算用テーブル214への書き戻しを開始する(テーブルWR)。第2のパケットに関するテーブルWRは、図11に示すS1108に相当に相当する。
テーブルにアクセスするためには時間が必要であるため、演算結果C1による演算用テーブル214への書き戻しは、T1318に終了する。また、テーブルWRにおいて、並列処理部503−1は、演算結果C1を前回演算結果1302−1として、次に受信する入力パケットの継続処理用に内部保持する。
第2のパケットが第1のパケットに関するテーブル更新処理の終了前に受信されたパケットであることと同じく、第3のパケットは、第2のパケットに関するテーブル更新処理が終了する前に、並列処理振分部501によって受信されるパケットである。このため、第2のパケットに関するテーブル更新処理と、第3のパケットに関するテーブル更新処理とは同様である。
ただし、図13Aにおける設定情報702−1は、T1312と、第3のパケットに関するテーブル更新処理が開始されるT1313との間で、管理者等によって更新されている。具体的には、設定情報702−1に格納された値は、設定情報X1から設定情報Y1に更新される。このため、並列処理部503−1がT1313からのダミーRDにおいて取得する設定情報702−1は、設定情報Y1である。
また、並列処理部503−1は、T1317からのテーブルWRにおいて、前回演算結果1302−1として演算結果D1を保持する。また、第3のパケットに関するテーブル更新処理が終了するT1319以後、演算結果802−1は、演算結果D1を格納する。
前述の処理によれば、T1314の後、演算結果B1が前回演算結果1302−1として保持されるため、並列処理部503−1は、第2のパケットに関するテーブル更新処理におけるデータ演算に、演算結果B1を引き継ぐことができる。また、T1315の後、演算結果C1が前回演算結果1302−1として保持されるため、並列処理部503−1は、第3のパケットに関するテーブル更新処理における演算処理に、演算結果C1を引き継ぐことができる。
図13Bは、本実施例1の二つの並列処理部503がテーブル更新処理S1150を実行する際の演算結果を示す説明図である。
図13Bは、並列処理部503−1と並列処理部503−2との二つがテーブル更新処理を実行する場合の演算結果の変化を示す図である。すなわち、並列処理振分部501が異なるフローの入力パケットを受信した場合、図13Bに示す演算結果が求められる。
図13Bにおいて、並列処理振分部501は、フローID“100”の第1のパケット及び第3のパケットを受信し、フローID“200”の第2のパケットを、連続して受信する。また、フローID701に“200”を含む設定用テーブル213のエントリの設定情報702の値を、設定情報702−2と記載する。また、フローID801に“200”を含む演算用テーブル214のエントリの演算結果802の値を、演算結果802−2と記載する。また、前回演算結果1302−2は、並列処理部503−2が保持する前回演算結果である。
並列処理部503−1は、図13Bにおける第1のパケットに関するテーブル更新処理を、図13Aにおける第1のパケットに関するテーブル更新処理と同じく実行する。
図13Bにおける第2のパケットは、第1のパケットと異なるフローIDである。このため、並列処理振分部501は、並列処理部503−2に、新規を示す新規/継続パラメータと、フローID“200”と、第2のパケットのフロー長と、処理開始トリガとを含む振分け通知を送信する。
そして、並列処理部503−2は、並列処理部503−1における第1のパケットのテーブル更新処理と同じく、第2のパケットのテーブル更新処理を実行する。並列処理部503−2は、T1312から第2のパケットに関するテーブル更新処理を開始し、T1318までに第2のパケットに関するテーブル更新処理を終了する。
並列処理部503−2は、T1312において設定用テーブル213から設定情報702−2(設定情報X2)を取得する。また、並列処理部503−2は、T1312において、演算用テーブル214から演算結果802−2(演算結果A2)を取得する。また、並列処理部503−2は、第2のパケットに関するテーブル更新処理において、演算結果A2を演算結果B2に更新する。
並列処理部503−1が演算用テーブル214に演算結果B1を書き戻す間に、並列処理部503−2は、演算結果B2を演算用テーブル214に書き戻す(T1315)。これは、第1のパケットと第2のパケットとのフローIDが異なり、設定用テーブル213、及び、演算用テーブル214の異なるエントリに第1のパケット及び第2のパケットに関する情報が格納されているためである。並列処理部503−1と並列処理部503−2との両方が同時に演算用テーブル214に書き戻すことができる。
また、第3のパケットは、第1のパケットと同じフローIDであり、第1のパケットに関するテーブル更新処理が終了する前に並列処理振分部501によって受信されるパケットである。並列処理振分部501は、第3のパケットに関するテーブル更新処理を、第1のパケットに関するテーブル更新処理を実行する並列処理部503−1に、継続して実行させる。
並列処理部503−1による第3のパケットに関するテーブル更新処理は、図13Aに示す第3のパケットに関するテーブル更新処理と同様である。ただし、並列処理部503−1は、前回演算結果1302−1から演算結果B1を取得し、演算結果B1を演算結果C1に更新する。
なお、本実施例において、最短パケット到着間隔は全て2clkであるため、並列処理部による継続パケット処理のデータ演算は2clk以内に実行される必要がある。本実施例における並列処理振分部501は、データ演算に必要な時刻を保持し、データ演算に必要な時間よりも短い時間間隔で入力パケットを受信した場合、連続して受信した入力パケットを廃棄してもよい。
前述のとおり、実施例1によれば、パケット通信装置2は、各並列処理部503において前回の演算結果が保持され、連続して受信する入力パケットに関するデータ演算を、保持される演算結果によって行う。このため、実施例1の並列処理部503は、演算用テーブル214をテーブル更新処理の都度アクセスする必要がなく、テーブル更新処理を連続して実行することが可能である。
また、演算用テーブル214へのアクセス頻度を下げ、パケット通信装置の消費電力を低減することができる。
さらに、実施例1によれば、設定用テーブル213を用いて入力パケットに関するテーブル更新処理を実行し、かつ、出力判定部504において入力パケットの変換等を実行するため、より複雑なテーブル更新処理を実行することが可能である。
以下、本実施例2について図14から図20を用いて説明する。
実施例1におけるパケット通信装置2は、各入力パケットに一般的なテーブル更新処理を実行したが、実施例2におけるパケット通信装置は、各入力パケットに基づいて帯域制御を行う。実施例2において、帯域制御機能を実現するため、パケット通信装置は、トークンバケツアルゴリズムを使用する。
トークンバケツアルゴリズムを使用する場合、パケット通信装置は、設定された帯域に対応する速度でトークンバケツ(メモリに保持された所定の領域)にトークンを加算する。そして、パケット通信装置が送信する予定のパケットのフレーム長分のトークンがトークンバケツに蓄積されている場合、保証帯域内と判定し、フレーム長のパケットを送信し、かつ、フレーム長分のトークンをトークンバケツから減算する。また、パケット通信装置が送信する予定のパケットのフレーム長分のトークンがトークンバケツに蓄積されていない場合、保証帯域外であると判定し、フレーム長のパケットを送信する。トークンは保持し、フレーム長分のトークンをトークンバケツから減算しない。
図14は、本実施例2のパケット通信装置2の物理的な構成及び論理回路2210を示すブロック図である。
実施例2のパケット通信装置22は、図2に示す実施例1のパケット通信装置2と同じ物理的な構成を備える。具体的には、パケット通信装置22は、図2に示すパケット通信装置2と同じく、複数のネットワークインタフェースボード(NIF)(200−1〜200−M)、及び、スイッチ部206を備える。また、実施例2におけるNIF200も、実施例1におけるNIF200と同じく、入出力回線インタフェース201、SWインタフェース205、及びNIF管理部211を備える。
しかし、実施例2におけるNIF200は、実施例1の論理回路210の代わりに、論理回路2210を備える。論理回路2210と論理回路210との相違点は、論理回路2210に備わるメモリが、帯域設定テーブル2213、及び、演算結果保持テーブル2214を保持する点である。
また、論理回路2210が有する入力パケット制御部2203は、実施例1の論理回路210が有する入力パケット制御部203と異なる処理を実行する。
論理回路2210に備わる設定レジスタ2212は、実施例1の設定レジスタ212と同様に、一時的にデータを格納する記憶領域を有し、論理回路2210が有する全ての処理部に接続される。しかし、設定レジスタ2212は、入力パケット制御部2203の処理に伴い、設定レジスタ212とは異なるデータを格納する。以下において、設定レジスタ2212の処理の説明は省略する。
実施例2における、入力ヘッダ処理部202、入力パケットバッファ204、出力ヘッダ処理部207、出力パケット制御部208、及び、出力パケットバッファ209は、実施例1における、入力ヘッダ処理部202、入力パケットバッファ204、出力ヘッダ処理部207、出力パケット制御部208、及び、出力パケットバッファ209と同じである。
帯域設定テーブル2213は、実施例1の設定用テーブル213に相当し、入力パケット制御部2203において実行されるテーブル更新処理に用いられる設定値を格納する。また、演算結果保持テーブル2214は、実施例1の演算用テーブル214に相当し、入力パケット制御部2203において実行されるテーブル更新処理の結果を格納する。実施例2は、設定用テーブル213及び演算用テーブル214に格納されるデータが実施例1とは異なる場合の実施例である。
入力パケット制御部2203は、入力ヘッダ処理部202から入力パケットを受信すると、入力パケットバッファ204に格納する。この際、入力パケット制御部2203は、帯域設定テーブル2213、及び、演算結果保持テーブル2214を用いてパケット処理、すなわち、帯域制御処理を実行する。帯域制御処理後、入力パケットバッファ204に格納されたパケットを読み出し、SWインタフェース205に送信する。
図15は、本実施例2の入力パケット制御部2203の論理的な構成を示すブロック図である。
入力パケット制御部2203は、図5に示す入力パケット制御部203と同様の構成を有する。しかし、入力パケット制御部2203と実施例1の入力パケット制御部203とが異なる点は、入力パケット制御部2203が、複数の並列処理部2503(並列処理部2503−1〜2503−N)、出力判定部2504、及び、アクセス調停部2505を有する点である。また、並列処理部2503、出力判定部2504、及び、アクセス調停部2505は、実施例1の並列処理部503、出力判定部504、及び、アクセス調停部505と異なる処理を行う。
また、実施例2の利用フロー管理リスト502の並列処理部601が、並列処理部2503−1〜2503−Nを示す点が、実施例2の利用フロー管理リスト502と実施例1の利用フロー管理リスト502との異なる点である。
実施例2における並列処理振分部501は、実施例1における並列処理振分部501と同じ振分け処理S950を実行する。
並列処理部2503は、後述するテーブル更新処理S1850を実行し、演算結果保持テーブル2214に含まれる各フローの情報を更新する。また、並列処理部2503は、処理判定結果(保証内、又は、保証外)を出力判定部2504に送信する。
実施例1と同じく実施例2においても、並列処理部2503がテーブル更新処理S1850に要する時間はあらかじめ定められる。また、入力パケットバッファ204は、並列処理振分部501及び出力判定部2504によってシフトレジスタとして使用される。また、並列処理部2503の数Nは、実施例1と同じく、テーブル更新時間と最短パケット到着間隔とに基づいてあらかじめ決定される。
出力判定部2504は、後述する出力判定処理S1950を実行し、各並列処理部2503から演算終了及び処理判定結果(保証内、又は、保証外)を受信する。出力判定部2504は、処理判定結果に基づき、入力パケットバッファ204から受信した入力パケットのヘッダを変換し、ヘッダを変換された入力パケットをSWインタフェース205に送信する。
アクセス調停部2505は、実施例1のアクセス調停部505と同様に、各並列処理部2503から帯域設定テーブル2213及び演算結果保持テーブル2214へのアクセス(読み出し及び書き戻し)を調停する。
図16は、本実施例2の帯域設定テーブル2213を示す説明図である。
帯域設定テーブル2213に格納される値は、並列処理部2503がトークンアルゴリズムを実行するために用いる設定値であり、管理者等によってあらかじめ定められる値である。帯域設定テーブル2213は、フローID2701、周期加算トークン値2702、及び、トークンバケツの深さ2703を含む。
フローID2701は、入力パケットに割り当てられたフローを一意に示す識別子を含む。フローID2701に格納される値は、入力ヘッダ処理部202において装置内ヘッダ3のフローID302に格納された値に対応する。
周期加算トークン値2702は、単位時間あたりにトークンバケツに追加されるトークン量(単位時間あたりに蓄積される保証帯域に相当)を示す。
トークンバケツの深さ2703は、トークンバケツが保持できる最大のトークン量を示す。
図17は、本実施例2の演算結果保持テーブル2214を示す説明図である。
演算結果保持テーブル2214は、パケットを保証帯域によって送信できるか否かを判定するためのテーブルである。演算結果保持テーブル2214は、フローID2801、前回パケット到着時刻2802、及び、保持トークン値2803を含む。
フローID2801は、入力パケットに割り当てられたフローを一意に示すフローIDを含む。フローID2801に格納される値は、入力ヘッダ処理部202において装置内ヘッダ3のフローID302に格納された値に対応する。
前回パケット到着時刻2802は、並列処理部2503において前回実行されたテーブル更新処理が実行された時刻を示す。保持トークン値2803は、前回実行されたテーブル更新処理によって算出された、トークンバケツに蓄積されるトークン量を示す。すなわち、前回パケット到着時刻2802は、保持トークン値2803に格納される値を算出した時刻を示す。
図18A及び図18Bによって、並列処理部2503が実行するテーブル更新処理S1850について説明する。
図18Aは、本実施例2の並列処理部2503が実行するテーブル更新処理S1850のうち、入力パケットを受信するまでに蓄積されたトークン量を算出する処理を示すフローチャートである。
並列処理部2503は、並列処理振分部501から処理開始トリガを含む振分け通知を受信した場合(S1800)、振分け通知に含まれる新規/継続パラメータ、フローID、及び、フレーム長を取得する(S1801)。
S1801の後、並列処理部2503は、新規/継続パラメータが“0”であるか否か、すなわち、新規/継続パラメータが新規を示すか否かを判定する(S1802)。
新規/継続パラメータが“0”である場合、すなわち、新規/継続パラメータが新規を示すとS1802において判定された場合、並列処理部2503は、S1801において取得されたフローID、すなわち、入力パケットのフローIDを検索キーとして帯域設定テーブル2213を検索する。そして、検索の結果、並列処理部2503は、入力パケットのフローIDをフローID2701に含む帯域設定テーブル2213のエントリの周期加算トークン値2702の値、及び、トークンバケツの深さ2703の値を取得する(S1803)。
なお、並列処理部2503は、S1803において帯域設定テーブル2213を検索した時刻を、論理回路2210のメモリに保持する。
S1803の後、並列処理部2503は、入力パケットのフローIDを検索キーとして演算結果保持テーブル2214を検索する。そして、検索の結果、並列処理部2503は、入力パケットのフローIDをフローID2801に含む演算結果保持テーブル2214のエントリの前回パケット到着時刻2802の値、及び、保持トークン値2803の値を取得する(S1804)。
S1804の後、並列処理部2503は、S1803において帯域設定テーブル2213を検索した時刻を、前回テーブル更新時刻として、次に受信する入力パケットの継続処理用に内部保持する(S1805)。
S1805の後、並列処理部2503は、S1804において内部保持された帯域設定テーブル2213を検索した時刻と、S1804において取得された前回パケット到着時刻2802との差を、パケット到着間隔として算出する。そして、並列処理部2503は、算出されたパケット到着間隔と、S1804において取得された周期加算トークン値2702とを乗算することによって、加算トークン量を算出する(S1806)。
S1806の後、並列処理部2503は、S1806において算出された加算トークン量を、S1804において取得された保持トークン値2803の値に加算する(S1807)。S1807の後、図18Bに示すS1813の処理に進む。
S1802において新規/継続パラメータが“0”ではないと判定された場合、すなわち、新規/継続パラメータが継続を示すと判定された場合、並列処理部2503は、S1803と同じ処理を行う(S1808)。並列処理部2503は、S1808によって、入力パケットに対応する周期加算トークン値2702の値、及び、トークンバケツの深さ2703の値を取得する。
また、並列処理部2503は、S1808において帯域設定テーブル2213を検索した時刻を、論理回路2210のメモリに保持する。
S1808の後、並列処理部2503は、継続処理用に内部保持する前回テーブル更新時刻を、前回パケット到着時刻として取得する(S1809)。
S1809の後、並列処理部2503は、S1805と同じ処理を行う(S1810)。具体的には、S1810において、並列処理部2503は、S1808において帯域設定テーブル2213を検索した時刻を前回テーブル更新時刻として、次に受信する入力パケットの継続処理用に内部保持する。
S1810の後、並列処理部2503は、S1809において取得された前回パケット到着時刻と、S1808において保持された帯域設定テーブル2213を検索した時刻との差を、パケット到着間隔として算出する。そして、並列処理部2503は、算出されたパケット到着間隔と、S1809において取得された周期加算トークン値2702とを乗算することによって、加算トークン量を算出する(S1811)。
S1811の後、並列処理部2503は、継続処理用に内部保持している前回保持トークン値を取得し、取得された前回保持トークン値に、S1811において算出された加算トークン量を加算し(S1812)、S1813の処理に進む。なお、S1811において取得される前回保持トークン値は、図18Bに示すS1822において保持される値である。
S1807又はS1812における加算結果は、入力パケットを受信するまでにトークンバケツに蓄積されていたトークン量である。
S1802〜S1812の処理に他に、実施例2の並列処理部2503は、新規/継続パラメータの値に従って、異なる処理を行ってもよい。例えば、新規/継続パラメータが新規を示す場合、並列処理部2503は、S1807の結果である加算結果に、ユーザによってあらかじめ与えられた値を加算してもよい。
これによって、入力パケットが連続して受信する場合と、入力パケットが連続して受信されない場合とにおいて、更新される演算結果の値をユーザの要求に従って、変更することができる。
図18Bは、本実施例2の並列処理部2503が実行するテーブル更新処理S1850のうち、入力パケットが帯域保証内であるか否かを判定する処理を示すフローチャートである。
S1807又はS1812の後、並列処理部2503は、S1807又はS1812における加算結果が、S1803又はS1808において取得されたトークンバケツの深さ2703の値を超過するか否かを判定する(1813)。
S1807又はS1812における加算結果がトークンバケツの深さ2703の値以下であるとS1813において判定された場合、並列処理部2503は、S1807又はS1812における加算結果を、現在トークン量として保持する(S1814)。S1814の後、並列処理部2503は、S1816の処理に進む。
また、S1807又はS1812における加算結果がトークンバケツの深さ2703の値を超過しているとS1813において判定された場合、並列処理部2503は、トークンバケツの深さ2703の値を、現在トークン量として保持する(S1815)。S1815の後、並列処理部2503は、S1816に進む。
S1814又はS1815の後、並列処理部2503は、S1801において取得された入力パケットのフレーム長が、S1814又はS1815において保持された現在トークン量以内であるか否かを判定する(S1816)。
入力パケットのフレーム長が現在トークン量以内であると、S1816において判定された場合、並列処理部2503は、現在トークン量から入力パケットのフレーム長分を減算した値を、更新保持トークン値として算出する(S1817)。更新保持トークン値は、入力パケットを送信した後のトークンバケツに残るトークン量を示す。
S1817の後、並列処理部2503は、帯域制御結果が保証内であることを示す処理判定結果を生成し、生成された処理判定結果を出力判定部2504へ送信する(S1818)。S1818の後、並列処理部2503は、S1821に進む。
入力パケットのフレーム長が現在トークン量を超過するとS1816において判定された場合、並列処理部2503は、現在トークン量と同じ値を、更新保持トークン値として保持する(S1819)。
S1819の後、並列処理部2503は、帯域制御結果が保証外であることを示す通知を生成し、生成された通知を出力判定部2504へ送信する(S1820)。S1820の後、並列処理部2503は、S1821に進む。
なお、並列処理部2503は、S1818又はS1820において、帯域制御結果が保証内又は保証外であることを示す処理判定結果を生成し、後述するS1823において、生成された処理判定結果と演算終了を示す通知とを、出力判定部2504へ送信してもよい。
S1818及びS1820において、帯域制御結果を送信又は生成することによって、並列処理部2503は、帯域制御結果に従った処理を入力パケットに行わせることが可能である。
S1818又はS1820の後、並列処理部2503は、S1803又はS1808において保持された帯域設定テーブル2213を検索した時刻によって、演算結果保持テーブル2214の前回パケット到着時刻2802を更新する。また、並列処理部2503は、演算結果保持テーブル2214の保持トークン値2803に、更新保持トークン値を書き戻す(S1821)。
S1821の後、並列処理部2503は、更新保持トークン値を前回保持トークン値として、次に受信する入力パケットの継続処理用に内部保持する(S1822)。
S1822の後、並列処理部2503は、入力パケットを示すフローID等を含み、かつ、演算終了を示す通知を生成し、生成された通知を出力判定部2504へ送信する(S1823)。S1823の後、図18A及び図18Bに示す処理を終了する(S1824)。
以下に、出力判定部2504が実行する出力判定処理S1950について説明する。
図19は、本実施例2の出力判定部2504が実行する出力判定処理S1950を示すフローチャートである。
出力判定部2504は、並列処理部2503から演算終了を示す通知を受信した場合(S1900)、入力パケットバッファ204から、受信した通知が示す入力パケットを読み出す。そして、出力判定部2504は、演算終了を示す通知を送信した並列処理部2503と同じ並列処理部2503から送信された処理判定結果(保証内、又は、保証外)を特定する。
そして、出力判定部2504は、読み出された入力パケットに含まれるCoS値等を、特定された処理結果を示す通知に従って更新する(S1901)。そして、出力判定部2504は、CoS値等を更新された入力パケットをSWインタフェース205に送信する。
そして、出力判定部2504は、S1901の後、図19に示す出力判定処理S1950を終了する(S1902)。
図20は、本実施例2のテーブル更新処理S1850による前回パケット到着時刻及び保持トークン値の変化を示す説明図である。
テーブル更新時間が10clkであり、最短パケット到着間隔が2clkである場合において、並列処理部2503−1が同一フローID“100”の入力パケットを連続受信する例を図20に示す。また、図20において、第1のパケット、第2のパケット、及び、第3のパケットのフレーム長は“80”である。
実施例2の第1のパケットは、実施例1の第1のパケットと同じく、並列処理振分部501の処理(S904)によって、並列処理部2503−1にテーブル更新処理を新規に実行させると決定された、入力パケットである。
実施例2の並列処理部2503−1は、新規を示す新規/継続パラメータと、第1のパケットのフローIDと、処理開始トリガとを含む並列処理振分部501から受信したタイミング(T2011)から、第1のパケットのフローID“100”を検索キーとして、帯域設定テーブル2213、及び、演算結果保持テーブル2214を検索する。そして、並列処理部2503−1は、検索の結果、周期加算トークン値、トークンバケツの深さ、前回パケット到着時刻、及び、保持トークン値を取得する(テーブルRD)。
第1のパケットに関するテーブルRDは、図18Aに示すS1800〜S1805に相当する。
また、並列処理部2503−1は、第1のパケットに関するテーブルRDにおいて、帯域設定テーブル2213を検索した時刻を前回テーブル更新時刻2002として、次に受信する入力パケットの継続処理用に内部保持する(S1805に相当)。なお、図20に示す第1のパケットに関するテーブルRDにおいて、帯域設定テーブル2213を検索した時刻は、“2020”である。
図20に示す第1のパケットに関するテーブルRDにおいて、帯域設定テーブル2213及び演算結果保持テーブル2214を検索した結果、並列処理部2503−1は、周期加算トークン値2702の値として“10”を取得し、トークンバケツの深さ2703の値として“1000”を取得し、前回パケット到着時刻2802の値として“2000”を取得し、保持トークン値2803の値として“100”を取得する。また、並列処理部2503−1が、第1のパケットに関するテーブルRDにおいて内部保持する前回テーブル更新時刻2002の値は、“2020”である。
第1のパケットに関するテーブルRDの後、並列処理部2503−1は、第1のパケットに関するテーブルRDにおいて取得された、帯域設定テーブル2213を検索した時刻“2020”、周期加算トークン値2702の値“10”、トークンバケツの深さ2703の値“1000”、前回パケット到着時刻2802の値“2000”、及び、保持トークン値2803の値“100”を用いて、保持トークン値2803の値“220”を算出する(データ演算)。ここで、算出される保持トークン値は、{(2020−2000)×10+100−80=220}によって算出される。
また、並列処理部2503−1は、第1のパケットに関するデータ演算において、帯域設定テーブル2213を検索した時刻を、前回パケット到着時刻として取得する。すなわち、データ演算において取得される前回パケット到着時刻と、テーブルRDにおいて前回テーブル更新時刻2002とは、同じ値である。
前述の第1のパケットに関するデータ演算は、図18AのS1806、S1807、S1813、S1814、S1816〜S1818に相当する。
第1のパケットに関するデータ演算が終了したタイミング(T2014)から、並列処理部2503−1は、取得された前回パケット到着時刻の値“2020”、及び、算出された保持トークン値の値“220”を演算結果保持テーブル2214の前回パケット到着時刻2802及び保持トークン値2803に書き戻し始める(テーブルWR)。第1のパケットに関するテーブルWRは、図18BのS1821に相当する。
演算結果保持テーブル2214を更新するために所定の時間が必要であるため、取得された前回パケット到着時刻2802の値“2020”、及び、算出された保持トークン値2803の値“220”は、演算結果保持テーブル2214にT2016のタイミングにおいて反映される。
また、第1のパケットに関するテーブルWRにおいて、並列処理部2503−1は、算出された保持トークン値の値“220”を前回保持トークン値2003として、次に受信する入力パケットの継続処理用に内部保持する。この処理は、図18のS1822に相当する。
第2のパケットは、第1のパケットのテーブル更新処理が終了する前に並列処理振分部501によって受信される。このため、第2のパケットは、並列処理振分部501の処理(S904)において並列処理部2503−1にテーブル更新処理を継続して実行させると決定された、入力パケットである。
並列処理部2503−1は、継続を示す新規/継続パラメータと、第2のパケットのフローIDと、処理開始トリガとを含む振分け通知を、並列処理振分部501から受信したタイミング(T2012)から、第2のパケットのフローIDを検索キーとして、帯域設定テーブル2213を検索する。
並列処理部2503−1は、検索の結果、帯域設定テーブル2213から、周期加算トークン値2702の値“10”、及び、トークンバケツの深さ2703の値“1000”を取得する(ダミーRD)。前述の第2のパケットに関するダミーRDは、S1800〜S1802、及び、S1808に相当する。
第2のパケットは、第1のパケットに関するテーブル更新処理が終了する前に受信されたパケットであるため、第2のパケットに関するダミーRDにおいて、並列処理部2503−1は、演算結果保持テーブル2214へアクセスしない。実施例2におけるダミーRDは、帯域設定テーブル2213のみを参照し、演算結果保持テーブル2214から値を取得しない処理を示す。
また、第2のパケットに関するダミーRDにおいて、並列処理部2503−1は、第1のパケットに関するテーブル更新処理において内部保持された前回テーブル更新時刻2002の値“2020”を、前回パケット到着時刻として取得する(S1809に相当)。
さらに、第2のパケットに関するダミーRDにおいて、並列処理部2503−1は、前述の帯域設定テーブル2213を検索した時刻“2022”を前回テーブル更新時刻2002として、次に受信する入力パケットの継続処理用に内部保持する(S1810に相当)。
ここで、並列処理部2503−1は、第2のパケットに関するダミーRDにおいて、後述する前回保持トークン値を引き継ぐ前に、帯域設定テーブル2213を検索した時刻“2022”、周期加算トークン値2702の値“10”、及び、前回パケット到着時刻2802の値“2020”を用いて、加算トークン量を算出する(データ演算)。第2のパケットのデータ演算は、図18AのS1811に相当する。ここで算出される加算トークン量は、(2022−2020)×10=20によって算出される。
並列処理部2503−1は、第2のパケットのデータ演算において、第1のパケットに関するテーブル更新処理時に内部保持した前回保持トークン値2003の値“220”を、第2のパケットに関するテーブル更新処理に引き継ぐ(図18AのS1812に相当)。
そして、第2のパケットに関するデータ演算において、並列処理部2503−1は、更新された前回テーブル更新時刻と更新された保持トークン値を算出する。図18AのS1812、図18BのS1813、S1814、S1816〜S1818に相当する。ここで算出される更新された保持トークン値は、20+220−80=160によって算出される。
並列処理部2503−1は、第2のパケットに関するデータ演算が終了したタイミングT2015から、取得された前回パケット到着時刻“2022”、及び、算出された保持トークン値“160”を演算結果保持テーブル2214に書き戻し始める(テーブルWR)。第2のパケットに関するデータ演算は、図18BのS1821に相当する。
演算結果保持テーブル2214を更新するために所定の時間が必要であるため、T2018のタイミングにおいて、取得された前回パケット到着時刻“2022”、及び、算出された保持トークン値“160”が演算結果保持テーブル2214に反映される。
また、並列処理部2503−1は、第2のパケットに関するデータ演算において、算出された保持トークン値“160”を前回保持トークン値2003として次に受信する入力パケットの継続処理用に内部保持する(S1822に相当)。
第3のパケットは、第2のパケットが第1のパケットに関するテーブル更新処理の終了前に受信された入力パケットであることと同じく、第2のパケットに関するテーブル更新処理が終了する前に、並列処理振分部501によって受信される入力パケットである。このため、第2のパケットに関するテーブル更新処理と、第3のパケットに関するテーブル更新処理とは同様である。
ただし、図20における周期加算トークン値2702の値は、T2012と、第3のパケットに関するテーブル更新処理が開始されるT2013との間で、管理者等によって更新される。具体的には、周期加算トークン値2702に格納された値は、“10”から“30”に更新される。このため、並列処理部2503−1がT2013からのダミーRDにおいて取得する周期加算トークン値2702の値は、“30”である。
また、並列処理部2503−1は、T2017からのテーブルWRにおいて、前回保持トークン値2003として“140”{=(2024−2022)×30+160−80}を保持する。また、第3のパケットに関するテーブル更新処理が終了するT2019以後の演算結果保持テーブル2214において、前回パケット到着時刻2802は、“2024”を格納し、保持トークン値2803は、“140”を格納する。
前述の処理によれば、T2014の後、並列処理部2503−1は、第1のパケットに関するテーブル更新処理による前回テーブル更新時刻2002及び前回保持トークン値2003を保持するため、第2のパケットに関するテーブル更新処理における演算処理において、前回テーブル更新時刻2002及び前回保持トークン値2003を引き継ぐことができる。また、T2015の後、並列処理部2503−1は、第2のパケットに関するテーブル更新処理による前回テーブル更新時刻2002及び前回保持トークン値2003を保持するため、第2のパケットに関するテーブル更新処理における演算処理において、前回テーブル更新時刻2002及び前回保持トークン値2003を引き継ぐことができる。
以上により、実施例2によれば、実施例1の効果と同様に、実施例2の並列処理部2503は、演算結果保持テーブル2214をテーブル更新処理の都度アクセスする必要がなく、帯域制御機能を実行するためのテーブル更新処理を連続して実行することが可能である。
また、演算結果保持テーブル2214へのアクセス頻度を下げ、パケット通信装置の消費電力を低減することができる。
さらに、実施例2によれば、トークンバケツのアルゴリズムを用いたテーブル更新処理を実行し、かつ、テーブル更新処理の実行結果に従って、出力判定部504において入力パケットの変換等を実行するため、より適切な帯域制御を行うことができる。
以下、本実施例3について図21から図25を用いて説明する。
実施例3では、統計カウント機能に本発明を適用する。実施例3では、パケット管理機能の統計情報として、受信パケット数、及び、受信バイト数をカウントする。
図21は、本実施例3のパケット通信装置32の物理的な構成及び論理回路3210を示すブロック図である。
実施例3のパケット通信装置32は、図2に示す実施例1のパケット通信装置2と同じ物理的な構成を備える。具体的には、パケット通信装置32は、図2に示すパケット通信装置2と同じく、複数のネットワークインタフェースボード(NIF)200(200−1〜200−M)、及び、スイッチ部206を備える。また、実施例3におけるNIF200も、実施例1におけるNIF200と同じく、入出力回線インタフェース201、SWインタフェース205、及びNIF管理部211を備える。
しかし、実施例3におけるNIF200は、実施例1の論理回路210の代わりに、論理回路3210を備える。論理回路3210と論理回路210との相違点は、論理回路3210に備わるメモリが、設定用テーブル213、入力パケットバッファ204、及び、出力パケットバッファ209を保持せず、統計情報テーブル3213を保持する点である。
また、論理回路3210が有する入力パケット制御部3203及び出力パケット制御部3208は、論理回路210が有する入力パケット制御部203及び出力パケット制御部208と異なる処理を実行する。
論理回路3210に備わる設定レジスタ3212は、実施例1の設定レジスタ212と同様に、一時的にデータを格納する記憶領域を有し、論理回路3210が有する全ての処理部に接続される。しかし、設定レジスタ3212は、入力パケット制御部3203の処理に伴い、設定レジスタ212とは異なるデータを格納する。以下において、設定レジスタ2212の処理の説明は省略する。
実施例3における、入力ヘッダ処理部202、及び、出力ヘッダ処理部207は、実施例1における、入力ヘッダ処理部202、及び、出力ヘッダ処理部207と同じである。
統計情報テーブル3213は、実施例1の演算用テーブル214に相当し、入力パケット制御部3203において実行されるテーブル更新処理の結果を格納する。実施例3は、本実施例の通信装置が、実施例1の設定用テーブル213を用いない場合の実施例である。
入力パケット制御部3203は、入力ヘッダ処理部202から入力パケットを受信した場合、統計情報テーブル3213を用いてパケット処理、すなわち、統計カウント処理を実行する。入力パケット制御部3203は、入力パケットバッファにパケットを格納せず、統計カウント処理を実行すると同時に、SWインタフェース205にパケットを送信する。
図22は、本実施例3の入力パケット制御部3203の物理的な構成を示すブロック図である。
入力パケット制御部3203は、図5に示す入力パケット制御部203と同様な構成を有する。しかし、入力パケット制御部3203と実施例1の入力パケット制御部203とが異なる点は、入力パケット制御部3203が、並列処理部3503(3503−1〜3503−N)、及び、アクセス調停部3505を有し、出力判定部及び入力パケットバッファを有さない点である。また、並列処理部3503、及び、アクセス調停部505の処理は、実施例1の並列処理部503、及び、アクセス調停部505の処理と異なる。
また、実施例3の利用フロー管理リスト502の並列処理部601が、並列処理部3503−1〜3503−Nを示す点が、実施例3の利用フロー管理リスト502と実施例1の利用フロー管理リスト502との異なる点である。
実施例3における並列処理振分部501は、実施例1における並列処理振分部501と同じ振分け処理S950を実行する。しかし、実施例3における並列処理振分部501は、入力パケットを受信した場合、振分け処理S950を開始し、かつ、受信した入力パケットをSWインタフェース205に送信する。
並列処理部3503は、後述するテーブル更新処理S2450を実行し、統計情報テーブル3213に含まれる各フローの情報を更新する。
実施例1と同じく実施例3においても、並列処理部3503がテーブル更新処理S2450に要する時間は、あらかじめ定められる。また、並列処理部3503の数Nは、実施例1と同じく、テーブル更新時間と最短パケット到着間隔とに基づいてあらかじめ決定される。
アクセス調停部3505は、実施例1のアクセス調停部505と同様に、各並列処理部3503の統計情報テーブル3213へのアクセス(読み出し及び書き戻し)を調停する。
図23は、本実施例3の統計情報テーブル3213を示す説明図である。
統計情報テーブル3213は、パケット通信装置32が受信したパケットについての情報を有するテーブルである。統計情報テーブル3213は、フローID3701、受信パケット数3702、及び、受信バイト数3703を含む。
フローID3701は、入力パケットのフローIDを含む。受信パケット数3702は、並列処理振分部501が受信した入力パケットの数を含む。受信バイト数3703は、並列処理振分部501が受信した入力パケットのバイト数の合計値を示す。
以下に、並列処理部3503−1〜3503−Nが実行するテーブル更新処理S2450について説明する。
図24は、本実施例3の並列処理部3503が実行するテーブル更新処理S2450を示すフローチャートである。
並列処理部3503は、並列処理振分部501から処理開始トリガを含む振分け通知を受信した場合(S2400)、振分け通知に含まれる新規/継続パラメータ、フローID、及び、フレーム長を取得する(S2401)。
S2401の後、並列処理部3503は、振分け通知に含まれる新規/継続パラメータが“0”であるか否か、すなわち、新規/継続パラメータが新規を示すか否かを判定する(S2402)。
新規/継続パラメータが“0”である場合、すなわち、新規/継続パラメータが新規を示すとS2402において判定された場合、並列処理部3503は、S2401において取得されたフローID、すなわち、入力パケットのフローIDを検索キーとして統計情報テーブル3213を検索する。そして、検索の結果、並列処理部3503は、受信パケット数3702、及び、受信バイト数3703を取得する(S2403)。S2403の後、S2405の処理へ進む。
新規/継続パラメータが“0”を示さない、すなわち、新規/継続パラメータが継続を示すとS2402において判定された場合、並列処理部3503は、並列処理部3503が継続処理用に内部保持する前回受信パケット数、及び、前回受信バイト数を取得する(S2404)。S2404の後、S2405の処理に進む。
S2403又はS2404の後、並列処理部3503は、受信パケット数(S2403において取得された受信パケット数3702、又は、S2404において取得された前回受信パケット数)に“1”を加算する。そして、並列処理部3503は、加算結果を、更新された受信パケット数として取得する。
また、並列処理部3503は、受信バイト数(S2403において取得された受信バイト数3703、又は、S2404において取得された前回受信バイト数)に、S2401において取得されたフレーム長分を加算する。そして、並列処理部3503は、加算結果を、更新された受信バイト数として取得する(S2405)。
S2405の後、並列処理部3503は、更新された受信パケット数を、統計情報テーブル3213の受信パケット数3702に書き戻し、更新された受信バイト数を、統計情報テーブル3213の受信バイト数3703に書き戻す。
そして、S2405において、並列処理部3503は、更新された受信パケット数及び更新された受信バイト数を、前回受信パケット数及び前回受信バイト数として次パケットの継続処理用に内部保持する(S2406)。S2406の後、並列処理部3503は、テーブル更新処理S2450を終了する(S2407)。
図25は、本実施例3の並列処理部3503が実行するテーブル更新処理による、受信パケット数、及び、受信バイト数の変化を示す説明図である。
テーブル更新時間が10clkであり、かつ、最短パケット到着間隔が2clkである場合において、並列処理部3503−1が、同一フローID“100”の入力パケットを2clk間隔で連続受信する例を、図25に示す。また、図25において、入力パケットのフレーム長は“80”である。
第1のパケットは、並列処理振分部501の処理(S904)によって、並列処理部3503−1にテーブル更新処理を新規に実行させると決定された、入力パケットである。
実施例3の並列処理部3503−1は、新規を示す新規/継続パラメータと、第1のパケットのフローIDと、第1のパケットのフレーム長と、処理開始トリガとを含む振分け通知を並列処理振分部501から受信したタイミング(T2511)から、第1のパケットのフローIDを検索キーとして、統計情報テーブル3213を検索する。そして、並列処理部3503−1は、検索の結果、第1のパケットのフローIDに対応する受信パケット数3702、及び、受信バイト数3703を取得する(テーブルRD)。
第1のパケットに関するテーブルRDは、図24に示すS2400〜S2403に相当する。図25に示す第1のパケットに関するテーブルRDにおいて取得される、受信パケット数3702の値は“10”であり、受信バイト数3703の値は“1000”である。
並列処理部3503−1は、取得された受信パケット数の値“10”に“1”を加算し、読み出された受信バイト数の値“1000”に第1のパケットのフレーム長“80”を加算する。そして、並列処理部3503−1は、加算結果を更新された受信パケット数“11”及び更新された受信バイト数“1080”として取得する(データ演算)。
データ演算が終了したタイミング(T2514)から、並列処理部3503−1は、更新された受信パケット数“11”及び更新された受信バイト数“1080”を統計情報テーブル3213に書き戻す(テーブルWR)。第1のパケットに関するテーブルWRはS2405に相当する。
テーブルにアクセスするためには時間が必要であるため、T2516のタイミングにおいて、更新された受信パケット数“11”及び更新された受信バイト数“1080”が統計情報テーブル3213に反映される。
また、並列処理部3503−1は、T2514からのテーブルWRにおいて、更新された受信パケット数“11”及び更新された受信バイト数“1080”を、前回受信パケット数3512及び前回受信バイト数3513として、次パケットの継続処理用に内部保持する。更新された受信パケット数“11”及び更新された受信バイト数“1080”を内部保持する処理は、S2406に相当する。
第2のパケットは、第1のパケットのテーブル更新処理が終了する前に並列処理振分部501によって受信される。並列処理振分部501は、第2のパケットを、並列処理部3503−1に継続して実行させると決定する。
並列処理部3503−1は、継続を示す新規/継続パラメータと、第2のパケットのフローIDと、第2のパケットのフロー長と、処理開始トリガとを含む振分け通知を並列処理振分部501から受信したタイミング(T2512)においても、第1のパケットに関するテーブル更新処理によるテーブルWRが終了していないため、統計情報テーブル3213へアクセスしない。
このため、実施例3の第2のパケットに関するテーブル更新処理において、テーブルRD又はダミーRDは実行されない。
並列処理部3503−1は、T2514の後、第1のパケットに関するテーブル更新処理時に内部保持された前回受信パケット数3512“11”及び前回受信バイト数3513“1080”を引き継ぎ、第2のパケットに関するデータ演算を開始する。T2514までの処理は、図24に示すS2400〜S2402、及び、S2404に相当する。
なお、パケット到着間隔は2clkであるため、並列処理部3503−1は、前回受信パケット数3512、及び、前回受信バイト数3513を引き継いだ後のデータ演算を、2clk以内に実施する。並列処理部3503−1が、データ演算を実行するために、パケット到着間隔以上の時間を必要とする場合、並列処理振分部501において入力パケットは廃棄されてもよい。
並列処理部3503−1は、第2のパケットに関するデータ演算において、引き継がれた前回受信パケット数3512“11”に“1”を加算し、前回受信バイト数3513“1080”にフレーム長分“80”を加算する。そして、並列処理部3503−1は、加算結果を、更新された受信パケット数“12”及び更新された受信バイト数“1160”として取得する。
データ演算が終了したタイミングT2515から、並列処理部3503−1は、更新された受信パケット数“12”及び更新された受信バイト数“1160”を統計情報テーブル3213に書き戻す(テーブルWR)。T2515からのテーブルWRは、図24のS2405に相当する。
テーブルにアクセスするためには時間が必要であるため、T2518のタイミングにおいて、更新された受信パケット数“12”及び更新された受信バイト数“1160”が統計情報テーブル3213に反映される。
また、並列処理部3503−1は、T2515からのテーブルWRにおいて、更新された受信パケット数“12”及び更新された受信バイト数“1160”を、前回受信パケット数3512及び前回受信バイト数3513として次パケットの継続処理用に内部保持する。更新された受信パケット数“12”及び更新された受信バイト数“1160”を内部保持する処理は、図11のS2406に相当する。
また、実施例3の第3のパケットは、実施例1又は実施例2の第2のパケットと同様、第2のパケットに関するテーブル更新処理が終了する前に並列処理振分部501に受信されるため、第2のパケットに関するテーブル更新処理と、第3のパケットに関するテーブル更新処理とは同様である。
並列処理部3503−1は、T2517からのテーブルWRにおいて、前回受信パケット数3512及び前回受信バイト数3513として“13”及び“1240”を保持する。また、第3のパケットに関するテーブル更新処理が終了するT2519以降、受信パケット数3702−1は、“13”を格納し、受信バイト数3703−1は、“1240”を格納する。
以上により、実施例3によれば、実施例1の効果と同様に、パケット通信装置2は、各並列処理部3503において前回の演算結果が保持され、連続して受信する入力パケットに関するデータ演算を、保持される演算結果によって行う。このため、実施例3の並列処理部3503は、統計情報テーブル3213をテーブル更新処理の都度アクセスする必要がなく、パケット管理機能を実行するためのテーブル更新処理を連続して実行することが可能である。
また、演算用テーブル214へのアクセス頻度を下げ、パケット通信装置の消費電力を低減することができる。
なお、本実施例における並列処理部は、新規/継続パラメータの値に従って、異なる処理を行ってもよい。具体的には、図11に示すS1102〜S1106において、図18Aに示すS1802〜S1812において、又は、図24に示すS2402〜S2402において、新規/継続パラメータが継続を示す場合と、新規/継続パラメータが新規を示す場合とに従って、並列処理部は、ユーザによってあらかじめ与えられた異なる処理を実行してもよい。
これによって、本実施例の並列処理部は、入力パケットが連続して受信する場合と、入力パケットが連続して受信されない場合とにおいて、更新される演算結果の値をユーザの要求に従って、変更することができる。