(57)【特許請求の範囲】
【請求項１】
ネットワークに接続される通信装置であって、
前記通信装置は、
前記ネットワークから送信されるパケットを受信する入力インタフェースと、
前記パケットに関する処理を実行する複数の並列処理部と、
前記パケットに関する処理を前記各並列処理部へ振り分ける並列処理振分部と、
前記パケットに関する処理の実行結果を示す値と、前記パケットに割り当てられるフローＩＤと含む演算用テーブルと、を有し、
前記各並列処理部は、当該並列処理部において実行された前記パケットに関する処理を実行した実行結果を保持し、
前記並列処理振分部は、
前記各並列処理部が処理を実行する前記パケットに割り当てられたフローＩＤと、前記各並列処理部における前記パケットに関する処理の状況を示す値と、を含む利用フロー管理リストを保持し、
第１のパケットを受信した場合、前記利用フロー管理リストと、前記第１のパケットに割り当てられたフローＩＤとに基づいて、前記第１のパケットに対応する前記フローＩＤが割り当てられた第２のパケットに関する処理が実行中であるか否かを判定し、
前記判定の結果に従って、前記第１のパケットに関する処理を実行する並列処理部と、当該並列処理部に送信する振分け通知に含まれるパラメータと、を決定し、
前記振分け通知に、前記第１のパケットに関する情報を含めて、前記決定された並列処理部に送信し、
前記決定された並列処理部は、
前記振分け通知を受信した場合、前記演算用テーブル、又は、当該並列処理部に保持された実行結果から、前記受信した振分け通知に従って前記第２のパケットに関する処理の実行結果を取得し、
前記取得された前記第２のパケットに関する実行結果と、前記振分け通知に含まれる情報とを用いて、前記第１のパケットに関する処理を実行し、
前記第１のパケットに関する処理が実行された実行結果によって、前記演算用テーブルを更新することを特徴とする通信装置。
【請求項２】
請求項１に記載の通信装置であって、
前記利用フロー管理リストに含まれる処理の状況を示す値は、前記各並列処理部が前記パケットに関する処理を開始してから経過した実行時間を示す値であり、
前記並列処理振分部は、
前記第１のパケットを受信した場合、前記第１のパケットに割り当てられたフローＩＤと、前記利用フロー管理リストとに基づいて、前記第２のパケットに関する処理を実行する並列処理部が前記第２のパケットに関する処理を開始してから経過した実行時間を示す値を取得し、
前記取得された実行時間を示す値に基づいて、前記第２のパケットに関する処理が実行中であるか否かを判定し、
前記判定の結果、前記第２のパケットに関する処理が実行中である場合、前記第２のパケットに関する処理を実行する前記並列処理部を、前記第１のパケットに関する処理を実行する並列処理部に決定し、かつ、前記パラメータを継続を示す値に決定し、
前記決定された並列処理部は、前記受信した振分け通知に継続を示す前記パラメータが含まれる場合、当該並列処理部に保持された実行結果から、前記第２のパケットに関する処理の実行結果を取得することを特徴とする通信装置。
【請求項３】
請求項１又は２に記載の通信装置であって、
前記通信装置は、前記パケットに関する処理に用いる所定の設定値と、前記パケットに割り当てられたフローＩＤとを含む設定用テーブルを有し、
前記振分け通知に含まれる前記第１のパケットに関する情報は、前記第１のパケットに割り当てられたフローＩＤを含み、
前記決定された並列処理部は、
前記振分け通知を受信した場合、前記受信した振分け通知に従って、前記設定用テーブルから前記第１のパケットに関する処理に用いる所定の設定値を読み出し、
前記取得された第２のパケットに関する処理の実行結果と、前記振分け通知に含まれる第１のパケットに関する情報と、前記読み出された所定の設定値と、を用いて、前記第１のパケットに関する処理を実行することを特徴とする通信装置。
【請求項４】
請求項３に記載の通信装置であって、
前記設定用テーブルに含まれる所定の設定値は、前記フローＩＤに対応するトークンバケツに追加される単位時間あたりのトークン量と、前記トークンバケツに蓄積されるトークンの最大量と、を含み、
前記パケットに関する処理の実行結果は、前記トークンバケツに蓄積されるトークン量と、前記トークンバケツに蓄積されるトークン量を算出した最新の時刻と、を含み、
前記振分け通知に含まれる前記第１のパケットに関する情報は、前記第１のパケットのフレーム長を含み、
前記決定された並列処理部が前記第１のパケットに関する処理を実行した結果、前記第１のパケットを受信するまでに前記トークンバケツに蓄積されたトークン量が、前記第１のパケットのフレーム長を下回ると判定された場合、前記決定された並列処理部は、前記第１のパケットの送信が保証外であることを示す情報を出力し、
前記決定された並列処理部が前記第１のパケットに関する処理を実行した結果、前記第１のパケットを受信するまでに前記トークンバケツに蓄積されたトークン量が、前記第１のパケットのフレーム長以上と判定された場合、前記決定された並列処理部は、前記第１のパケットの送信が保証内であることを示す情報を出力することを特徴とする通信装置。
【請求項５】
請求項３に記載の通信装置であって、
前記通信装置は、
前記入力インタフェースを介して受信した前記パケットを保持するパケットバッファと、
前記パケットのヘッダを書き換える出力判定部と、をさらに有し、
前記並列処理振分部は、前記第１のパケットを受信した場合、前記第１のパケットをパケットバッファに格納し、
前記決定された並列処理部は、前記第１のパケットに関する処理を実行した結果に従って、前記第１のパケットのヘッダを書き換える指示を、前記出力判定部に送信し、
前記出力判定部は、
前記第１のパケットのヘッダを書き換える指示に従って、前記パケットバッファから前記第１のパケットを取得し、
前記取得された第１のパケットのヘッダを書き換えることを特徴とする通信装置。
【請求項６】
請求項１又は２に記載の通信装置であって、
前記振分け通知に含まれる前記第１のパケットに関する情報は、前記第１のパケットのフレーム長を含み、
前記パケットに関する処理の実行結果は、前記通信装置が受信した前記パケットの数と、前記通信装置が受信した前記パケットのバイト数と、を含み、
前記決定された並列処理部は、
前記取得された前記第２のパケットに関する実行結果と、前記振分け通知に含まれる情報とを用いて、前記通信装置が受信した前記第２のパケットの数に１を加算し、前記通信装置が受信した前記第２のパケットのバイト数に、前記第１のパケットのフレーム長を加算することによって、前記第１のパケットに関する処理を実行することを特徴とする通信装置。
【請求項７】
請求項１又は２に記載の通信装置であって、
前記並列処理部は、前記パラメータが示す値に従った処理方法を保持し、
前記決定された並列処理部は、前記取得された前記第２のパケットに関する実行結果と、前記振分け通知に含まれる情報とを用いて、前記パラメータが示す値に従った処理方法によって、前記第１のパケットに関する処理を実行することを特徴とする通信装置。
【請求項８】
ネットワークに接続される通信装置による通信方法であって、
前記通信装置は、
前記ネットワークから送信されるパケットを受信する入力インタフェースと、
前記パケットに関する処理を実行する複数の並列処理部と、
前記パケットに関する処理を前記各並列処理部へ振り分ける並列処理振分部と、
前記パケットに関する処理の実行結果を示す値と、前記パケットに割り当てられるフローＩＤと含む演算用テーブルと、を有し、
前記各並列処理部は、当該並列処理部において実行された前記パケットに関する処理を実行した実行結果を保持し、
前記並列処理振分部は、前記各並列処理部が処理を実行する前記パケットに割り当てられたフローＩＤと、前記各並列処理部における前記パケットに関する処理の状況を示す値と、を含む利用フロー管理リストを保持し、
前記方法は、
前記並列処理振分部が、第１のパケットを受信した場合、前記利用フロー管理リストと、前記第１のパケットに割り当てられたフローＩＤとに基づいて、前記第１のパケットに対応する前記フローＩＤが割り当てられた第２のパケットに関する処理が実行中であるか否かを判定し、
前記並列処理振分部が、前記判定の結果に従って、前記第１のパケットに関する処理を実行する並列処理部と、当該並列処理部に送信する振分け通知に含まれるパラメータと、を決定し、
前記並列処理振分部が、前記振分け通知に、前記第１のパケットに関する情報を含めて、前記決定された並列処理部に送信し、
前記決定された並列処理部が、前記振分け通知を受信した場合、前記演算用テーブル、又は、当該並列処理部に保持された実行結果から、前記受信した振分け通知に従って前記第２のパケットに関する処理の実行結果を取得し、
前記決定された並列処理部が、前記取得された前記第２のパケットに関する実行結果と、前記振分け通知に含まれる情報とを用いて、前記第１のパケットに関する処理を実行し、
前記決定された並列処理部が、前記第１のパケットに関する処理が実行された実行結果によって、前記演算用テーブルを更新することを特徴とする通信方法。
【請求項９】
請求項８に記載の通信方法であって、
前記利用フロー管理リストに含まれる処理の状況を示す値は、前記各並列処理部が前記パケットに関する処理を開始してから経過した実行時間を示す値であり、
前記方法は、
前記並列処理振分部が、前記第１のパケットを受信した場合、前記第１のパケットに割り当てられたフローＩＤと、前記利用フロー管理リストとに基づいて、前記第２のパケットに関する処理を実行する並列処理部が前記第２のパケットに関する処理を開始してから経過した実行時間を示す値を取得し、
前記並列処理振分部が、前記取得された実行時間を示す値に基づいて、前記第２のパケットに関する処理が実行中であるか否かを判定し、
前記並列処理振分部が、前記判定の結果、前記第２のパケットに関する処理が実行中である場合、前記第２のパケットに関する処理を実行する前記並列処理部を、前記第１のパケットに関する処理を実行する並列処理部に決定し、かつ、前記パラメータを継続を示す値に決定し、
前記決定された並列処理部が、前記受信した振分け通知に継続を示す前記パラメータが含まれる場合、当該並列処理部に保持された実行結果から、前記第２のパケットに関する処理の実行結果を取得することを特徴とする通信方法。
【請求項１０】
請求項８又は９に記載の通信方法であって、
前記通信装置は、前記パケットに関する処理に用いる所定の設定値と、前記パケットに割り当てられたフローＩＤとを含む設定用テーブルを有し、
前記振分け通知に含まれる前記第１のパケットに関する情報は、前記第１のパケットに割り当てられたフローＩＤを含み、
前記方法は、
前記決定された並列処理部が、前記振分け通知を受信した場合、前記受信した振分け通知に従って、前記設定用テーブルから前記第１のパケットに関する処理に用いる所定の設定値を読み出し、
前記決定された並列処理部が、前記取得された第２のパケットに関する処理の実行結果と、前記振分け通知に含まれる第１のパケットに関する情報と、前記読み出された所定の設定値と、を用いて、前記第１のパケットに関する処理を実行することを特徴とする通信方法。
【請求項１１】
請求項１０に記載の通信方法であって、
前記設定用テーブルに含まれる所定の設定値は、前記フローＩＤに対応するトークンバケツに追加される単位時間あたりのトークン量と、前記トークンバケツに蓄積されるトークンの最大量と、を含み、
前記パケットに関する処理の実行結果は、前記トークンバケツに蓄積されるトークン量と、前記トークンバケツに蓄積されるトークン量を算出した最新の時刻と、を含み、
前記振分け通知に含まれる前記第１のパケットに関する情報は、前記第１のパケットのフレーム長を含み、
前記方法は、
前記決定された並列処理部が前記第１のパケットに関する処理を実行した結果、前記第１のパケットを受信するまでに前記トークンバケツに蓄積されたトークン量が、前記第１のパケットのフレーム長を下回ると判定された場合、前記決定された並列処理部が、前記第１のパケットの送信が保証外であることを示す情報を出力し、
前記決定された並列処理部が前記第１のパケットに関する処理を実行した結果、前記第１のパケットを受信するまでに前記トークンバケツに蓄積されたトークン量が、前記第１のパケットのフレーム長以上と判定された場合、前記決定された並列処理部が、前記第１のパケットの送信が保証内であることを示す情報を出力することを特徴とする通信方法。
【請求項１２】
請求項１０に記載の通信方法であって、
前記通信装置は、
前記入力インタフェースを介して受信した前記パケットを保持するパケットバッファと、
前記パケットのヘッダを書き換える出力判定部と、をさらに有し、
前記方法は、
前記並列処理振分部が、前記第１のパケットを受信した場合、前記第１のパケットをパケットバッファに格納し、
前記決定された並列処理部が、前記第１のパケットに関する処理を実行した結果に従って、前記第１のパケットのヘッダを書き換える指示を、前記出力判定部に送信し、
前記出力判定部が、前記第１のパケットのヘッダを書き換える指示に従って、前記パケットバッファから前記第１のパケットを取得し、
前記出力判定部が、前記取得された第１のパケットのヘッダを書き換えることを特徴とする通信方法。
【請求項１３】
請求項８又は９に記載の通信方法であって、
前記振分け通知に含まれる前記第１のパケットに関する情報は、前記第１のパケットのフレーム長を含み、
前記パケットに関する処理の実行結果は、前記通信装置が受信した前記パケットの数と、前記通信装置が受信した前記パケットのバイト数と、を含み、
前記方法は、
前記決定された並列処理部が、前記取得された前記第２のパケットに関する実行結果と、前記振分け通知に含まれる情報とを用いて、前記通信装置が受信した前記第２のパケットの数に１を加算し、前記通信装置が受信した前記第２のパケットのバイト数に、前記第１のパケットのフレーム長を加算することによって、前記第１のパケットに関する処理を実行することを特徴とする通信方法。
【請求項１４】
請求項８又は９に記載の通信方法であって、
前記並列処理部は、前記パラメータが示す値に従った処理方法を保持し、
前記方法は、
前記決定された並列処理部が、前記取得された前記第２のパケットに関する実行結果と、前記振分け通知に含まれる情報とを用いて、前記パラメータが示す値に従った処理方法によって、前記第１のパケットに関する処理を実行することを特徴とする通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置に関し、特に、パケットに対して処理を行う通信装置に関する。
【背景技術】
【０００２】
近年、テレビコンテンツのデジタル化又はＷｅｂによる動画配信サービスの普及等によりネットワークシステムにおけるトラヒックが大容量化している。そして、これにより、１００Ｇｂｐｓ超の回線の需要が高まっている。
【０００３】
トラヒックの大容量化に伴いパケット通信装置に備えられる論理デバイスにおける動作周波数は上昇しているが、一方で、例えば、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）などの論理デバイスの動作周波数は、最大でも３００ＭＨｚ程度の限界がある。このため、ＦＰＧＡを用いて１００Ｇｂｐｓ回線を収容する場合、ＦＰＧＡは１パケットあたり２ｃｌｋ程度でパケットを処理する必要がある。
【０００４】
帯域制御機能又は統計カウント機能などのパケット管理機能を、論理デバイスに実装する場合、論理デバイスは、フロー毎のパケットの情報を一つの情報記憶媒体（以後、テーブルと記載）に格納し、到着したパケットに対応するフロー毎のテーブルの値を、パケット到着毎に更新する。
【０００５】
例えば、帯域制御機能を実現する場合、論理デバイスは、各フローの消費帯域をテーブルによって管理する。具体的には、論理デバイスはパケット到着毎にテーブルから各フローに設定された帯域（設定帯域）、及び、各フローにおいて消費される帯域（消費帯域）を読み出し（ａ．テーブルＲＤ）、消費帯域の更新及び更新結果と設定帯域との比較（ｂ．データ演算）、及び、消費帯域の更新結果のテーブルへの書込み（ｃ．テーブルＷＲ）を実行する。
【０００６】
以後、前述のａ〜ｃのように、パケットに関する情報によってテーブルを更新する処理をテーブル更新処理と記載する。
【０００７】
テーブルを更新する方法として、一つの論理デバイスが、パケット到着毎に１パケット単位でテーブルを更新する一般的な方法（シーケンシャル処理方法）がある。一般的に、シーケンシャル処理方法において、論理デバイスは、一つのパケットに関するテーブル更新処理に所定の時間（例えば、１０ｃｌｋ程度）を要する。
【０００８】
また、本技術分野の背景技術として、特開２０００−３５８０６６号公報（特許文献１）がある。この公報には、「到着パケットごとに、同じソースからの前のパケットが処理エレメントに係属中であるかどうかをチェックし、チェックにより、そのようなパケットが係属中であることが明らかになった場合に、この到着パケットを前のパケットと同じ処理エレメントに転送する」ことが記載されている（要約参照）。すなわち、特許文献１には、複数の並列処理部によって、複数のフローのパケットを処理する並列処理技術が提案されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０００−３５８０６６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
シーケンシャル処理方法を用いる論理デバイスにおいて、パケット到着間隔が、１パケットあたりのテーブル更新処理に必要な時間以上である場合、論理デバイスは、パケット到着毎にテーブル更新処理を実行可能である。
【００１１】
しかし、回線の量が大容量化し、パケット到着間隔が１パケットあたりのテーブル更新処理に必要な時間よりも短い場合、前に到着したパケットのテーブル更新処理が終了しないうちに、次に処理すべきパケットが到着する。このため、論理デバイスは、連続で到着するパケットのテーブル更新処理を正常に実行できない。
【００１２】
また、特許文献１に記載された技術によれば、複数の並列処理部にフロー毎にパケットを振り分け、各並列処理部によってテーブル更新処理が実行されるため、連続でパケットが到着する頻度が少ない。しかし、テーブル更新処理に必要な時間よりも短い時間間隔において同じフローの二つのパケットが連続して到着した場合、同じ並列処理部に同じフローのパケットが転送される。
【００１３】
このため、前述のシーケンシャル処理方法と同じく、並列処理部を用いた場合の論理デバイスは、連続で到着した同じフローの複数のパケットに関するテーブル更新処理を正常に実行できない場合がある。そして、連続で到着した同じフローの複数のパケットに関するテーブル更新処理が終了するまで、他のフローのパケットに関するテーブル更新処理も実行されないため、パケット全体のテーブル更新処理が正常に実行されないという問題がある。
【００１４】
また、フロー毎に分割されたテーブルを各並列処理部に保持させることによって、各フローに対する各並列処理部のテーブル更新処理を独立させることができる。しかし、ネットワークシステムにおけるフローＩＤの数は固定値ではなく、論理デバイスにフロー毎のテーブル及び並列処理部をあらかじめ設置する場合、設備のための費用が増大し、さらに、論理デバイスの汎用性が失われるという問題がある。
【００１５】
本発明は、前述の問題を鑑みてなされたものであり、情報記憶媒体が保持する情報を更新する時間と比較してパケット到着間隔が短いパケット処理において、統計カウント機能などパケット到着毎に同じフローの情報を更新する必要がある場合でも、連続で到着するパケットを処理することができる方法の提供を目的とする。
【課題を解決するための手段】
【００１６】
本発明の代表的な一例を示せば以下のとおりである。すなわち、ネットワークに接続される通信装置であって、前記通信装置は、前記ネットワークから送信されるパケットを受信する入力インタフェースと、前記パケットに関する処理を実行する複数の並列処理部と、前記パケットに関する処理を前記各並列処理部へ振り分ける並列処理振分部と、前記パケットに関する処理の実行結果を示す値と、前記パケットに割り当てられるフローＩＤと含む演算用テーブルと、を有し、前記各並列処理部は、当該並列処理部において実行された前記パケットに関する処理を実行した実行結果を保持し、前記並列処理振分部は、前記各並列処理部が処理を実行する前記パケットに割り当てられたフローＩＤと、前記各並列処理部における前記パケットに関する処理の状況を示す値と、を含む利用フロー管理リストを保持し、第１のパケットを受信した場合、前記利用フロー管理リストと、前記第１のパケットに割り当てられたフローＩＤとに基づいて、前記第１のパケットに対応する前記フローＩＤが割り当てられた第２のパケットに関する処理が実行中であるか否かを判定し、前記判定の結果に従って、前記第１のパケットに関する処理を実行する並列処理部と、当該並列処理部に送信する振分け通知に含まれるパラメータと、を決定し、前記振分け通知に、前記第１のパケットに関する情報を含めて、前記決定された並列処理部に送信し、前記決定された並列処理部は、前記振分け通知を受信した場合、前記演算用テーブル、又は、当該並列処理部に保持された実行結果から、前記受信した振分け通知に従って前記第２のパケットに関する処理の実行結果を取得し、前記取得された前記第２のパケットに関する実行結果と、前記振分け通知に含まれる情報とを用いて、前記第１のパケットに関する処理を実行し、前記第１のパケットに関する処理が実行された実行結果によって、前記演算用テーブルを更新する。
【発明の効果】
【００１７】
本発明の一実施形態によれば、情報記憶媒体が保持する情報を更新する時間と比較してパケット到着間隔が短い場合にも、連続で到着するパケットを処理することができる。
【図面の簡単な説明】
【００１８】
【図１Ａ】本実施例１のパケット到着間隔がテーブル更新時間以上である場合のテーブル更新処理を示す説明図である。
【図１Ｂ】本実施例１のパケット到着間隔がテーブル更新時間よりも短い場合のパケットの受信状況を示す説明図である。
【図２】本実施例１のパケット通信装置の物理的な構成及び論理回路を示すブロック図である。
【図３】本実施例１の通信において用いられるパケットのフォーマットを示す説明図である。
【図４】本実施例１のパケットに付加される装置内ヘッダのフォーマットを示す説明図である。
【図５】本実施例１の入力パケット制御部の論理的な構成を示すブロック図である。
【図６】本実施例１の利用フロー管理リストを示す説明図である。
【図７】本実施例１の設定用テーブルを示す説明図である。
【図８】本実施例１の演算用テーブルを示す説明図である。
【図９】本実施例１の並列処理振分部が実行する振分け処理を示すフローチャートである。
【図１０】本実施例１の並列処理振分部が実行する利用フロー管理処理を示すフローチャートである。
【図１１】本実施例１の並列処理部が実行するテーブル更新処理を示すフローチャートである。
【図１２】本実施例１の出力判定部が実行する出力判定処理を示すフローチャートである。
【図１３Ａ】本実施例１の一つの並列処理部が連続してテーブル更新処理を実行する際の演算結果を示す説明図である。
【図１３Ｂ】本実施例１の二つの並列処理部がテーブル更新処理を実行する際の演算結果を示す説明図である。
【図１４】本実施例２のパケット通信装置の物理的な構成及び論理回路を示すブロック図である。
【図１５】本実施例２の入力パケット制御部の論理的な構成を示すブロック図である。
【図１６】本実施例２の帯域設定テーブル情報を示す説明図である。
【図１７】本実施例２の演算結果保持テーブル情報を示す説明図である。
【図１８Ａ】本実施例２の並列処理部が実行するテーブル更新処理のうち、入力パケットを受信するまでに蓄積されるべきトークン量を算出する処理を示すフローチャートである。
【図１８Ｂ】本実施例２の並列処理部が実行するテーブル更新処理のうち、入力パケットが保証内であるか否かを判定する処理を示すフローチャートである。
【図１９】本実施例２の出力判定部が実行する出力判定処理を示すフローチャートである。
【図２０】本実施例２のテーブル更新処理による前回パケット到着時刻及び保持トークン値の変化を示す説明図である。
【図２１】本実施例３のパケット通信装置の物理的な構成及び論理回路を示すブロック図である。
【図２２】本実施例３の入力パケット制御部の物理的な構成を示すブロック図である。
【図２３】本実施例３の統計情報テーブルを示す説明図である。
【図２４】本実施例３の並列処理部が実行するテーブル更新処理を示すフローチャートである。
【図２５】本実施例３の並列処理部が実行するテーブル更新処理による、受信パケット数、及び、受信バイト数の変化を示す説明図である。
【発明を実施するための形態】
【００１９】
以下、本発明の実施例について、図面を参照して説明する。
【実施例１】
【００２０】
本実施例におけるパケット到着間隔とテーブル更新処理に必要な時間（テーブル更新時間）との関係の具体例を以下に示す。
【００２１】
図１Ａは、本実施例１のパケット到着間隔がテーブル更新時間以上である場合のテーブル更新処理を示す説明図である。
【００２２】
例えば、パケット到着間隔が１０ｃｌｋ以上であり、かつ、テーブル更新時間が１０ｃｌｋである場合、本実施例のパケット通信装置は、パケット到着毎にテーブル更新処理を実施できる。これは、例えば、１Ｇｂｐｓ回線におけるパケット到着間隔が４０ｃｌｋであり、また、１０Ｇｂｐｓ回線におけるパケット到着間隔が１０ｃｌｋであり、テーブル更新時間が１０ｃｌｋである場合に相当する。
【００２３】
図１Ｂは、本実施例１のパケット到着間隔がテーブル更新時間よりも短い場合のパケットの受信状況を示す説明図である。
【００２４】
例えば、１００Ｇｂｐｓ回線におけるパケット到着間隔が２ｃｌｋであり、テーブル更新時間１０ｃｌｋである場合、パケット通信装置に一つ目のパケットが到着した後、テーブル更新処理が終了する前に、二つ目のパケットが到着する。この場合、パケットが廃棄されるため、二つ目のパケットに関するテーブル更新処理は実行されない。
【００２５】
以下、本実施例１について図２から図１３を用いて説明する。なお、以下に述べる実施例１は本発明の実施例の一つであって、本発明を制限するものではない。
【００２６】
本実施例におけるパケット通信装置は、以下で説明する並列処理方法を実装し、各フローのパケットが到着した際に各フローの情報記憶媒体（テーブル）情報を更新する。
【００２７】
図２は、本実施例１のパケット通信装置２の物理的な構成及び論理回路２１０を示すブロック図である。
【００２８】
本実施例のパケット通信装置２は、パケットを他のパケット通信装置へ転送する装置である。パケット通信装置２は、複数のネットワークインタフェースボード（ＮＩＦ）（２００−１〜２００−Ｍ）、及び、スイッチ部２０６を備える。
【００２９】
ＮＩＦ２００は、ネットワークからパケットを受信し、ネットワークへパケットを送信するためのインタフェースである。スイッチ部２０６は、各ＮＩＦ２００に接続される装置であり、ＮＩＦ２００から受信したパケットを、パケットを送信すべきＮＩＦ２００に振り分ける装置である。
【００３０】
各ＮＩＦ２００は、入出力回線インタフェース２０１、ＳＷインタフェース２０５、論理回路２１０、及びＮＩＦ管理部２１１を備える。
【００３１】
入出力回線インタフェース２０１は、通信ポートである。パケット通信装置２は、入出力回線インタフェース２０１及びネットワークを介して、他のパケット通信装置と接続する。実施例１における入出力回線インタフェース２０１は、イーサネット（登録商標、以下同じ）用の回線インタフェースである。
【００３２】
ＳＷインタフェース２０５は、スイッチ部２０６に接続するための装置である。
【００３３】
ＮＩＦ管理部２１１は、例えば、ＣＰＵ等のプロセッサである。ＮＩＦ管理部２１１は、論理回路２１０における処理を制御する。
【００３４】
論理回路２１０は、本実施例のパケットに対する処理を行う回路である。論理回路２１０は、少なくとも一つのメモリ及び少なくとも一つの演算装置（例えば、プロセッサ）を備える。
【００３５】
論理回路２１０は、入力ヘッダ処理部２０２、入力パケット制御部２０３、出力ヘッダ処理部２０７、出力パケット制御部２０８等の処理部を有し、設定レジスタ２１２を備える。また、論理回路２１０が備えるメモリは、設定用テーブル２１３、演算用テーブル２１４、入力パケットバッファ２０４、及び、出力パケットバッファ２０９を保持する。
【００３６】
パケット通信装置２が受信したパケットは、入出力回線インタフェース２０１、入力ヘッダ処理部２０２、ＳＷインタフェース２０５、スイッチ部２０６、ＳＷインタフェース２０５、入力パケット制御部２０３、出力ヘッダ処理部２０７、出力パケット制御部２０８、及び、入出力回線インタフェース２０１の順に送信される。
【００３７】
論理回路２１０が有する各処理部は、集積回路等の物理的な装置によって実装されてもよいし、少なくとも一つのプロセッサによって実行されるプログラムによって実装されてもよい。また、複数の処理部（例えば、入力パケット制御部２０３及び入力ヘッダ処理部２０２）が一つの装置又はプログラムによって実装されてもよいし、一つの処理部が複数の装置又は複数のプログラムによって実装されてもよい。
【００３８】
ＮＩＦ管理部２１１は、設定レジスタ２１２を制御する。設定レジスタ２１２は、データを一時的に格納する記憶領域を有し、論理回路２１０に備わる各処理部のレジスタ値を保持する。
【００３９】
図２には、設定レジスタ２１２と入力パケット制御部２０３との接続のみが図示されるが、設定レジスタ２１２は論理回路２１０を介して論理回路２１０に備わる全ての処理部と接続する。なお、以下において、設定レジスタ２１２の処理内容についての説明を省略するが、論理回路２１０が有する全ての処理部は、設定レジスタ２１２を用いて処理を実行する。
【００４０】
入出力回線インタフェース２０１は、受信したパケット４に後述する装置内ヘッダ３を付加する。
【００４１】
図３は、本実施例１の通信において用いられるパケット４のフォーマットを示す説明図である。
【００４２】
図３に示すパケット４のフォーマットは一例であり、本実施例において用いられるパケットは、いかなる情報を含んでもよい。例えば、ＭＡＣアドレスの代わりに、ＩＰアドレスを含んでもよい。
【００４３】
パケット４は、宛先ＭＡＣアドレス４０１、送信元ＭＡＣアドレス４０２、ＶＬＡＮヘッダ４０３、イーサタイプ値４０４、ペイロード４０５、及び、フレームチェックシーケンス（ＦＣＳ）４０６を含む。
【００４４】
宛先ＭＡＣアドレス４０１、又は、送信元ＭＡＣアドレス４０２には、パケット通信装置２のＭＡＣアドレスが設定される。ＶＬＡＮヘッダ４０３には、フローの識別子となるＶＬＡＮ  ＩＤが設定される。
【００４５】
なお、ペイロード４０５にＭＰＬＳヘッダ又は他のプロトコルのヘッダが設定され、ＶＬＡＮ  ＩＤには、ＭＰＬＳラベル値などがフローの識別子として設定されてもよい。フレームチェックシーケンス（ＦＣＳ）４０６には、フレームの誤りを検出するための値が設定される。
【００４６】
図４は、本実施例１のパケット４に付加される装置内ヘッダ３のフォーマットを示す説明図である。
【００４７】
入出力回線インタフェース２０１は、受信したパケット４をパケット通信装置２において処理するため、受信したパケット４に装置内ヘッダ３を付加する。装置内ヘッダ３が付加され、入出力回線インタフェース２０１からスイッチ部２０６に向けて送信されるパケット４を、以降において、入力パケットと記載する。
【００４８】
装置内ヘッダ３は、出力ネットワークインタフェースボード識別子（出力ＮＩＦ  ＩＤ）３０１、フローＩＤ３０２、及び、フレーム長３０３を含む。
【００４９】
出力ＮＩＦ  ＩＤ３０１は、内部ルーティング情報である。本実施例の内部ルーティング情報とは、パケット通信装置２が受信したパケット４を、パケット通信装置２のいずれのＮＩＦ２００のポートから出力するかを示す情報である。スイッチ部２０６は、内部ルーティング情報に従い、スイッチ部２０６に送信された入力パケットを特定のＮＩＦ２００の特定のＳＷインタフェース２０５に転送する。
【００５０】
入出力回線インタフェース２０１は、受信したパケット４に装置内ヘッダ３を付加する際、出力ＮＩＦ  ＩＤ３０１、及び、フローＩＤ３０２にｎｕｌｌ値等の値を格納する。すなわち、入出力回線インタフェース２０１は、出力ＮＩＦ  ＩＤ３０１、及び、フローＩＤ３０２に格納される値を決定しない。出力ＮＩＦ  ＩＤ３０１、及び、フローＩＤ３０２には、入力ヘッダ処理部２０２によって値が格納される。
【００５１】
入出力回線インタフェース２０１は、受信したパケット４のフレーム長を取得し、装置内ヘッダ３のフレーム長３０３に、取得されたフレーム長を格納する。その後、入出力回線インタフェース２０１は、パケット４を入力ヘッダ処理部２０２に送信する。
【００５２】
入力ヘッダ処理部２０２は、入出力回線インタフェース２０１から受信した入力パケットの４０３に基づいて、パケット４のフローを識別する。そして、入力ヘッダ処理部２０２は、識別されたフローに従ってＶＬＡＮタグの処理を実行し、これによって、入力パケットの出力ＮＩＦ  ＩＤ３０１、及び、フローＩＤ３０２に値を格納する。
【００５３】
ＶＬＡＮタグの処理とは、例えば、ＶＬＡＮタグの透過、変換、付与及び削除である。すなわち、ＶＬＡＮタグの処理とは、入力パケットのＶＬＡＮヘッダを、パケット通信装置２から出力されるパケットのＶＬＡＮヘッダに変換する処理である。
【００５４】
入力ヘッダ処理部２０２は、ＶＬＡＮタグの処理において、宛先ＭＡＣアドレス４０１及び送信元ＭＡＣアドレス４０２を、入出力回線インタフェース２０１に設定される値によって上書きしてもよいし、あらかじめ登録されていたフロー毎の値によって上書きしてもよい。
【００５５】
ＶＬＡＮタグを処理し、装置内ヘッダ３に出力ＮＩＦ  ＩＤ３０１及びフローＩＤ３０２を追加した後、入力ヘッダ処理部２０２は、入力パケットを入力パケット制御部２０３に送信する。
【００５６】
入力パケット制御部２０３は、入力ヘッダ処理部２０２から受信した入力パケットを、入力パケットバッファ２０４に格納する。この際、入力パケット制御部２０３は、設定用テーブル２１３、及び、演算用テーブル２１４を用いて受信した入力パケットに関して、後述するパケット処理を実行する。
【００５７】
パケット処理後、入力パケット制御部２０３は、入力パケットバッファ２０４に格納された入力パケットを読み出し、ＳＷインタフェース２０５に送信する。ＳＷインタフェース２０５は、受信した入力パケットをスイッチ部２０６に転送する。
【００５８】
スイッチ部２０６は、各ＮＩＦ２００のＳＷインタフェース２０５から入力パケットを受信した後、入力パケットの出力ＮＩＦ  ＩＤ３０１を参照することによって、受信した入力パケットの転送先であるＮＩＦ２００を特定する。次に、スイッチ部２０６は、特定されたＮＩＦ２００に対応するＳＷインタフェース２０５に、受信した入力パケットを、出力パケットとして転送する。
【００５９】
なお、本実施例において、スイッチ部２０６から入出力回線インタフェース２０１へ送信されるパケット４を出力パケットと記載する。
【００６０】
ＳＷインタフェース２０５は、受信した出力パケットを出力ヘッダ処理部２０７に転送する。
【００６１】
前述の例では、入力ヘッダ処理部２０２が、入力パケットのヘッダ（フォーマット）を、パケット通信装置２から出力されるパケットのヘッダ（フォーマット）に変換した。しかし、本実施例の出力ヘッダ処理部２０７は、入力ヘッダ処理部２０２の代わりに、出力パケットのヘッダ変換を実行してもよい。
【００６２】
なお、入力ヘッダ処理部２０２においてヘッダ変換（フォーマット変換）が既になされている場合、出力ヘッダ処理部２０７は、ＳＷインタフェース２０５から受信した出力パケットをそのまま出力パケット制御部２０８に転送する。
【００６３】
また、前述の例では、入力パケット制御部２０３がパケット処理を実行した。しかし、出力パケット制御部２０８が、入力パケット制御部２０３の代わりに、出力パケットバッファ２０９に出力パケットを格納し、さらに、パケット処理を実行してもよい。
【００６４】
出力パケット制御部２０８がパケット処理を実行する場合、パケット処理後、出力パケット制御部２０８は、出力パケットバッファ２０９に格納された出力パケットを読み出す。そして、読み出された出力パケットを入出力回線インタフェース２０１に送信する。
【００６５】
出力パケット制御部２０８がパケット処理を実施しない場合、出力パケット制御部２０８は、出力ヘッダ処理部２０７から受信した出力パケットを、そのまま入出力回線インタフェース２０１に転送する。
【００６６】
入出力回線インタフェース２０１は、受信した出力パケットから装置内ヘッダ３を除去する。その後、入出力回線インタフェース２０１は、図３に示すパケット４のフォーマットによって、出力パケットを他の装置へ転送する。
【００６７】
図５は、本実施例１の入力パケット制御部２０３の論理的な構成を示すブロック図である。
【００６８】
入力パケット制御部２０３は、並列処理振分部５０１、利用フロー管理リスト５０２、複数の並列処理部５０３（５０３−１〜５０３−Ｎ）、出力判定部５０４、及び、アクセス調停部５０５を備える。
【００６９】
並列処理振分部５０１は、入力パケット制御部２０３が入力ヘッダ処理部２０２から入力パケットを受信した場合、後述する振分け処理Ｓ９５０を実行する処理部である。並列処理振分部５０１は、振分け処理Ｓ９５０において、入力パケットの装置内ヘッダ３のフローＩＤ３０２に基づいてフローを識別し、さらに、利用フロー管理リスト５０２を参照する。そして、これによって、入力パケットに関するテーブル更新処理を実行する並列処理部５０３を、並列処理部５０３−１〜並列処理部５０３−Ｎから決定する。
【００７０】
また、並列処理振分部５０１は、利用フロー管理リスト５０２を、論理回路２１０に備わるメモリ等に保持する。そして、並列処理振分部５０１は、後述する振分け処理Ｓ９５０及び利用フロー管理処理Ｓ１０５０において、利用フロー管理リスト５０２を更新する。また、並列処理振分部５０１は、入力パケットを受信すると、受信した入力パケットを入力パケットバッファ２０４に格納する。
【００７１】
利用フロー管理リスト５０２は、並列処理部５０３が処理する入力パケットのフローＩＤと、並列処理部５０３の処理状況とを示す。
【００７２】
並列処理部５０３は、後述するテーブル更新処理Ｓ１１５０において、演算用テーブル２１４に含まれる各フローの情報を更新する。また、並列処理部５０３は、テーブル更新処理Ｓ１１５０の処理判定結果を、出力判定部５０４に送信する。並列処理部５０３は、入力パケット制御部２０３にＮ個（Ｎは任意の自然数）備わる。
【００７３】
本実施例において、並列処理部５０３がテーブル更新処理Ｓ１１５０に要するテーブル更新時間はあらかじめ定められる。また、本実施例の入力パケットバッファ２０４（又は出力パケットバッファ２０９）は、シフトレジスタとして、並列処理振分部５０１及び出力判定部５０４によって使用される。
【００７４】
さらに、本実施例において、並列処理部５０３の数Ｎは、テーブル更新時間と最短パケット到着間隔とに基づいて決定される。なお、最短パケット到着間隔は、パケット通信装置２が接続される回線に従って、あらかじめ定められる値である。
【００７５】
例えば、テーブル更新時間が１０ｃｌｋであり、最短パケット到着間隔が２ｃｌｋである場合、テーブル更新時間から最短パケット到着間隔を除算（余りは繰上げ）した結果は“５”である。このため、並列処理部５０３の数Ｎは“５”にあらかじめ決定される。
【００７６】
出力判定部５０４は、後述する出力判定処理Ｓ１２５０を実行し、各並列処理部５０３（５０３−１〜５０３−Ｎ）から演算終了及び処理判定結果を受信する。出力判定部５０４は、入力パケットバッファ２０４から入力パケットを読み出し、読み出された入力パケットのヘッダ又はペイロードを、処理判定結果に基づいて変換する。その後、出力判定部５０４は、入力パケットをＳＷインタフェース２０５に送信する。
【００７７】
アクセス調停部５０５は、並列処理部５０３−１〜並列処理部５０３−Ｎによる設定用テーブル２１３及び演算用テーブル２１４へのアクセス（読み出し及び書き戻し）を調停する。アクセス調停部５０５の処理の詳細は、以降において省略するが、各並列処理部５０３が設定用テーブル２１３及び演算用テーブル２１４へアクセスする場合、アクセス調停部５０５がアクセスを調停する。
【００７８】
図６は、本実施例１の利用フロー管理リスト５０２を示す説明図である。
【００７９】
利用フロー管理リスト５０２は、並列処理部６０１、フローＩＤ６０２、及び、処理状況カウンタ６０３を含む。
【００８０】
並列処理部６０１は、並列処理部５０３−１〜５０３−Ｎを一意に示す識別子を含む。本実施例の並列処理部６０１は、並列処理部５０３を数値によって識別する値を含む。並列処理部６０１に格納される値は、管理者等によってあらかじめ設定される。
【００８１】
フローＩＤ６０２は、並列処理部５０３が処理する入力パケットに割り当てられたフローを一意に示すフローＩＤを含む。フローＩＤ６０２に格納される値は、並列処理振分部５０１によって更新される。また、フローＩＤ６０２に格納される値は、入力ヘッダ処理部２０２において装置内ヘッダ３のフローＩＤ３０２に格納された値に対応する。
【００８２】
処理状況カウンタ６０３は、並列処理部５０３におけるテーブル更新処理の状況を示す値を含む。本実施例の処理状況カウンタ６０３は、テーブル更新処理が開始されてから経過した実行時間に関する値を含む。
【００８３】
以下に示す処理状況カウンタ６０３は、減算カウンタによって、テーブル更新処理が終了するまでの残り時間を示す。具体的には、テーブル更新処理が開始された場合、処理状況カウンタ６０３にはテーブル更新時間が格納される。そして、並列処理振分部５０１が単位時間（本実施例において１ｃｌｋ）毎に処理状況カウンタ６０３の値を減算する。
【００８４】
処理状況カウンタ６０３に“０”が格納されるエントリは、並列処理部６０１が示す並列処理部５０３はテーブル更新処理を終了したことを示す。また、処理状況カウンタ６０３に“０”以外の正の数が格納されるエントリは、並列処理部６０１が示す並列処理部５０３はテーブル更新処理中であることを示す。
【００８５】
以下において、処理状況カウンタ６０３が減算カウンタである場合の処理を記載するが、処理状況カウンタ６０３は加算カウンタによって、テーブル更新処理が開始されてから経過した時間を示してもよい。この場合、並列処理振分部５０１は、所定のテーブル更新時間と処理状況カウンタ６０３とを比較することによって、テーブル更新処理の状況を取得してもよい。
【００８６】
図７は、本実施例１の設定用テーブル２１３を示す説明図である。
【００８７】
設定用テーブル２１３に格納される値は、並列処理部５０３がテーブル更新処理を実行するために用いる設定値であり、管理者等によってあらかじめ定められる設定値である。設定用テーブル２１３は、フローＩＤ７０１、及び、設定情報７０２を含む。
【００８８】
フローＩＤ７０１は、入力パケットに割り当てられたフローを一意に示すフローＩＤを含む。フローＩＤ７０１に格納される値は、入力ヘッダ処理部２０２において装置内ヘッダ３のフローＩＤ３０２に格納された値に対応する。
【００８９】
設定情報７０２は、テーブル更新処理において用いられる情報を示す。具体的には、設定情報７０２は、テーブル更新処理において、並列処理部５０３が演算結果を更新する際に使用する設定値を示す。
【００９０】
図８は、本実施例１の演算用テーブル２１４を示す説明図である。
【００９１】
演算用テーブル２１４は、フローＩＤ８０１、及び、演算結果８０２を含む。
【００９２】
フローＩＤ８０１は、入力パケットに割り当てられたフローを一意に示すフローＩＤを含む。フローＩＤ８０１に格納される値は、入力ヘッダ処理部２０２において装置内ヘッダ３のフローＩＤ３０２に格納された値に対応する。
【００９３】
演算結果８０２は、フロー毎のパケット処理の結果、すなわち、フロー毎のテーブル更新処理の結果を示す。演算結果８０２に格納される値は、並列処理部５０３によるテーブル更新処理によって更新される。
【００９４】
以下に、並列処理振分部５０１が実行する振分け処理Ｓ９５０について説明する。
【００９５】
図９は、本実施例１の並列処理振分部が実行する振分け処理Ｓ９５０を示すフローチャートである。
【００９６】
並列処理振分部５０１は、入力ヘッダ処理部２０２から入力パケットを受信した場合（Ｓ９００）、受信した入力パケットに含まれる装置内ヘッダ３からフローＩＤ３０２、及び、フレーム長３０３の値を取得する（Ｓ９０１）。
【００９７】
Ｓ９０１の後、並列処理振分部５０１は、利用フロー管理リスト５０２の全てのエントリの処理状況カウンタ６０３の値が“０”と異なるか否かを判定する（Ｓ９０２）。
【００９８】
Ｓ９０２において、利用フロー管理リスト５０２の全てのエントリの処理状況カウンタが“０”と異なると判定された場合、全ての並列処理部５０３は、テーブル更新処理を実行中である。このため、並列処理振分部５０１は、入力パケットを廃棄し（Ｓ９０３）、図９に示す振分け処理Ｓ９５０を終了する（Ｓ９０９）。
【００９９】
また、Ｓ９０２において、利用フロー管理リスト５０２のエントリのうち、処理状況カウンタ６０３が“０”ではないエントリがある場合、全ての並列処理部５０３のうち少なくとも一つの並列処理部５０３は、テーブル更新処理を実行していない。このため、並列処理振分部５０１は、Ｓ９０１において取得されたフローＩＤ３０２の値が、処理状況カウンタ６０３が“０”と異なるエントリのフローＩＤ６０２の値と一致するか否かを判定する（Ｓ９０４）。
【０１００】
なお、Ｓ９０４において、並列処理振分部５０１は、Ｓ９０１において取得されたフローＩＤ３０２の値に対応する値が、処理状況カウンタ６０３が“０”と異なるエントリのフローＩＤ６０２の値と一致する場合、取得されたフローＩＤ３０２の値に対応する値と処理状況カウンタ６０３が“０”と異なるエントリのフローＩＤ６０２の値とが一致していると判定してもよい。
【０１０１】
Ｓ９０１において取得されたフローＩＤ３０２の値が、処理状況カウンタ６０３が“０”と異なるエントリのフローＩＤ６０２の値と一致しないと、Ｓ９０４において判定された場合、並列処理振分部５０１は、テーブル更新処理を実行していない並列処理部に、入力パケットに関するテーブル更新処理を新規に実行させるため、ステップ９０７を実行する。
【０１０２】
Ｓ９０１において取得されたフローＩＤ３０２の値が、処理状況カウンタ６０３が“０”と異なるエントリのフローＩＤ６０２の値と一致すると、Ｓ９０４において判定された場合、入力パケットのフローに対応する並列処理部５０３は、入力パケットに関するテーブル更新処理を継続して実行できる。このため、並列処理振分部５０１は、取得されたフローＩＤ３０２の値とフローＩＤ６０２とが一致したエントリの並列処理部６０１が示す並列処理部５０３を、入力パケットに関するテーブル更新処理を継続して実行する並列処理部５０３に決定する。
【０１０３】
そして、並列処理振分部５０１は、取得されたフローＩＤ３０２の値とフローＩＤ６０２とが一致したエントリの処理状況カウンタ６０３を、テーブル更新時間を示す値に更新する（Ｓ９０５）。例えば、並列処理振分部５０１は、テーブル更新時間が１０ｃｌｋの場合、取得されたフローＩＤ３０２の値とフローＩＤ６０２とが一致したエントリの処理状況カウンタ６０３を、“１０”に更新する。
【０１０４】
Ｓ９０５において処理状況カウンタ６０３を更新することによって、並列処理振分部５０１は、各並列処理部５０３がテーブル更新処理を終了しているか否かを示す値を処理状況カウンタ６０３に格納できる。
【０１０５】
ステップ９０５の後、並列処理振分部５０１は、取得されたフローＩＤ３０２の値とフローＩＤ６０２の値とが一致した利用フロー管理リスト５０２のエントリの並列処理部６０１が示す並列処理部５０３へ、処理開始トリガ、新規／継続パラメータ、取得フローＩＤ、及び、取得フレーム長を含む振分け通知を出力する（Ｓ９０６）。
【０１０６】
Ｓ９０６において並列処理振分部５０１は、新規／継続パラメータを継続を示す値に決定し、継続を示す新規／継続パラメータ（本実施例において“１”）を、振分け通知に含める。本実施例における新規／継続パラメータとは、各並列処理部５０３にどのようなテーブル更新処理を実行するかを通知するための値である。
【０１０７】
Ｓ９０６の後、図９に示す振分け処理Ｓ９５０を終了する（Ｓ９０９）。
【０１０８】
Ｓ９０１において取得されたフローＩＤ３０２の値が、処理状況カウンタ６０３が０と異なるエントリのフローＩＤ６０２の値と一致しないと、Ｓ９０４において判定された場合、並列処理振分部５０１は、処理状況カウンタ６０３が“０”である利用フロー管理リスト５０２のエントリのうち、並列処理部６０１の値が最も若い番号のエントリを抽出する。並列処理振分部５０１は、抽出されたエントリの並列処理部６０１が示す並列処理部５０３を、入力パケットに関するテーブル更新処理を新規に実行する並列処理部５０３に決定する。
【０１０９】
そして、並列処理振分部５０１は、抽出されたエントリのフローＩＤ６０２を、ステップ９０１において取得されたフローＩＤ３０２の値によって更新する。また、並列処理振分部５０１は、抽出されたエントリの処理状況カウンタ６０３を、テーブル更新時間によって更新する（Ｓ９０７）。
【０１１０】
なお、前述のＳ９０７において、並列処理振分部５０１は、処理状況カウンタ６０３が“０”である利用フロー管理リスト５０２のエントリのうち、並列処理部６０１の値が最も若い番号（小さい番号）のエントリを抽出したが、並列処理振分部５０１は、処理状況カウンタ６０３が“０”である利用フロー管理リスト５０２のエントリのうちの一つであれば、いかなる規則に従ってエントリを抽出してもよい。例えば、並列処理振分部５０１は、最も値が大きい番号のエントリを抽出してもよいし、管理者によってあらかじめ抽出するエントリの順番を定められていてもよい。
【０１１１】
Ｓ９０７の後、並列処理振分部５０１は、決定された並列処理部５０３へ、処理開始トリガ、新規／継続パラメータ、フローＩＤ、及び、フレーム長を含む振分け通知を出力する（Ｓ９０８）。Ｓ９０８において並列処理振分部５０１は、新規／継続パラメータを新規を示す値に決定し、新規を示す新規／継続パラメータ（本実施例において“０”）を、振分け通知に含める。
【０１１２】
Ｓ９０６及びＳ９０８において出力される振分け通知に含まれる処理開始トリガは、テーブル更新処理を開始することを示す値である。また、振分け通知に含まれるフローＩＤは、Ｓ９０１において取得されたフローＩＤ、すなわち、入力パケットのフローＩＤである。また、振分け通知に含まれるフレーム長は、Ｓ９０１において取得されたフレーム長、すなわち、入力パケットのフレーム長である。
【０１１３】
Ｓ９０８の後、並列処理振分部５０１は、図９に示す振分け処理Ｓ９５０を終了する（Ｓ９０９）。
【０１１４】
以下に、並列処理振分部５０１が実行する利用フロー管理処理Ｓ１０５０について説明する。
【０１１５】
図１０は、本実施例１の並列処理振分部５０１が実行する利用フロー管理処理Ｓ１０５０を示すフローチャートである。
【０１１６】
並列処理振分部５０１は、１クロック毎に（Ｓ１０００）、利用フロー管理リスト５０２の全てのエントリの処理状況カウンタ６０３が“０”であるか否かを判定する（Ｓ１００１）。
【０１１７】
利用フロー管理リスト５０２の全てのエントリの処理状況カウンタ６０３が０であると、Ｓ１００１において判定された場合、並列処理振分部５０１は、利用フロー管理処理Ｓ１０５０を終了する（Ｓ１００３）。
【０１１８】
また、利用フロー管理リスト５０２のエントリに処理状況カウンタ６０３が０でないエントリがあるとＳ１００１において判定された場合、並列処理振分部５０１は、処理状況カウンタ６０３の列に含まれる０以外の値から１を減算する（Ｓ１００２）。Ｓ１００２の後、並列処理振分部５０１は、利用フロー管理処理Ｓ１０５０を終了する（Ｓ１００３）。
【０１１９】
以下に、並列処理部５０３−１〜５０３−Ｎが実行するテーブル更新処理Ｓ１１５０について説明する。
【０１２０】
図１１は、本実施例１の並列処理部５０３が実行するテーブル更新処理Ｓ１１５０を示すフローチャートである。
【０１２１】
並列処理部５０３は、並列処理振分部５０１から処理開始トリガを含む振分け通知を受信した場合（Ｓ１１００）、受信した振分け通知に含まれる新規／継続パラメータ、フローＩＤ、及び、フレーム長を取得する（Ｓ１１０１）。
【０１２２】
Ｓ１１０１の後、並列処理部５０３は、新規／継続パラメータが“０”であるか否か、すなわち、新規／継続パラメータが新規を示すか否かを判定する（Ｓ１１０２）。
【０１２３】
新規／継続パラメータが“０”である場合、すなわち、新規／継続パラメータが新規を示すとＳ１１０２において判定された場合、並列処理部５０３は、Ｓ１１０１において取得されたフローＩＤ、すなわち、入力パケットのフローＩＤを検索キーとして設定用テーブル２１３を検索する。そして、検索の結果、並列処理部５０３は、入力パケットのフローＩＤをフローＩＤ７０１に含む設定用テーブル２１３のエントリの設定情報７０２の値を取得する（Ｓ１１０３）。これによって、並列処理部５０３は、入力パケットに対応する設定情報７０２の値を取得する。
【０１２４】
Ｓ１１０３の後、並列処理部５０３は、入力パケットのフローＩＤを検索キーとして、演算用テーブル２１４を検索する。そして、検索の結果、並列処理部５０３は、入力パケットのフローＩＤをフローＩＤ７０１に含む設定用テーブル２１３のエントリの演算結果８０２の値を取得する（Ｓ１１０４）。Ｓ１１０４の後、並列処理部５０３は、Ｓ１１０７の処理を実行する。
【０１２５】
Ｓ１１０２において、新規／継続パラメータが“０”ではない場合、すなわち、新規／継続パラメータが継続を示すと判定された場合、並列処理部５０３は、Ｓ１１０３と同じく、入力パケットのフローＩＤを検索キーとして設定用テーブル２１３を検索することによって、入力パケットに対応する設定情報７０２の値を取得する（Ｓ１１０５）。
【０１２６】
Ｓ１１０５の後、並列処理部５０３は、並列処理部５０３が継続処理用に内部保持する前回演算結果を取得する（Ｓ１１０６）。継続処理用に内部保持される前回演算結果とは、テーブル更新処理が全て終了する前に次のテーブル更新処理を継続して実行するために、並列処理部５０３が、設定レジスタ２１２等の論理回路２１０のメモリに保持する演算結果である。
【０１２７】
Ｓ１１０６において、内部保持される前回演算結果を取得することによって、並列処理部５０３は、演算用テーブル２１４にアクセスする必要がなく、最新の演算結果に基づいてテーブル更新処理が可能である。そして、これによって、同じフローの入力パケットを連続して受信しても、正常にテーブル更新処理を実行可能である。
【０１２８】
Ｓ１１０６の後、並列処理部５０３は、Ｓ１１０７の処理に進む。
【０１２９】
Ｓ１１０２〜Ｓ１１０６の処理において、図１１に示す並列処理部５０３は、テーブル更新処理におけるデータ演算のための情報の取得のみを行ったが、実施例１の並列処理部５０３は、新規／継続パラメータの値に従って、異なる処理を行ってもよい。例えば、新規／継続パラメータが新規を示す場合、並列処理部５０３は、Ｓ１１０４の後、設定用テーブル２１３から取得された設定情報７０２の値に、ユーザによってあらかじめ与えられた値を加算してもよい。
【０１３０】
これによって、入力パケットが連続して受信する場合と、入力パケットが連続して受信されない場合とにおいて、更新される演算結果の値をユーザの要求に従って、変更することができる。
【０１３１】
Ｓ１１０４又はＳ１１０６の後、並列処理部５０３は、受信した振分け通知に含まれるフレーム長、及び、設定用テーブル２１３から取得された設定情報７０２を用い、Ｓ１１０４又はＳ１１０６において取得された演算結果を更新する（Ｓ１１０７）。
【０１３２】
Ｓ１１０７における演算結果の更新方法は、管理者等によってあらかじめ定められた方法を用いる。例えば、演算結果の更新方法には、受信した振分け通知に含まれるフレーム長を演算結果に加算することによって、演算結果を更新する方法がある。
【０１３３】
また、並列処理部５０３は、Ｓ１１０７において、更新された演算結果と、設定情報７０２に格納される閾値とを比較し、比較結果に基づいて、入力パケットに対する処理（例えば、入力パケットのヘッダに含まれる値の変換等）を決定する。そして、決定された処理を、処理判定結果として取得する。
【０１３４】
Ｓ１１０７の後、並列処理部５０３は、入力パケットのフローＩＤをフローＩＤ８０１に含む演算用テーブル２１４のエントリの演算結果８０２に、更新された演算結果を書き戻す。
【０１３５】
また、Ｓ１１０７において、並列処理部５０３は、次に受信する振分け通知がパケットの継続処理を示す場合のため（次パケットの継続処理用に）、更新された演算結果を前回演算結果として内部保持する（Ｓ１１０８）。具体的には、並列処理部５０３が、更新された演算結果を、論理回路２１０が備える設定レジスタ２１２等のメモリに格納する。
【０１３６】
Ｓ１１０８において前回演算結果を内部保持することによって、並列処理部５０３は、入力パケットを次に受信する際に行われるテーブル更新処理に、速やかに実行結果を引き継ぐことができる。
【０１３７】
Ｓ１１０８の後、並列処理部５０３は、出力判定部５０４へ、演算終了を示す値、及び、Ｓ１１０７において取得された処理判定結果を示す値を含む演算終了通知を送信する（Ｓ１１０９）。Ｓ１１０９の後、並列処理部５０３は、テーブル更新処理Ｓ１１５０を終了する（Ｓ１１１０）。
【０１３８】
以下に、出力判定部５０４が実行する出力判定処理Ｓ１２５０について説明する。
【０１３９】
図１２は、本実施例１の出力判定部５０４が実行する出力判定処理Ｓ１２５０を示すフローチャートである。
【０１４０】
出力判定部５０４は、並列処理部５０３−１〜並列処理部５０３−Ｎのいずれかから演算終了通知を受信する（Ｓ１２００）。
【０１４１】
Ｓ１２００の後、出力判定部５０４は、受信した演算終了通知から取得された処理判定結果に従って、入力パケットバッファ２０４から読み出された入力パケットのＶＬＡＮヘッダ４０３の値又はペイロード４０５の値を変換する。その後、ＶＬＡＮヘッダ４０３の値又はペイロード４０５の値を変換された入力パケットを、ＳＷインタフェース２０５に送信する（Ｓ１２０１）。
【０１４２】
Ｓ１２０１の後、出力判定部５０４は、出力判定処理Ｓ１２５０を終了する（Ｓ１２０２）。
【０１４３】
図１２に示す処理によって、出力判定部５０４は、並列処理部５０３におけるテーブル更新処理の結果に従ったヘッダ変換等の処理を、入力パケットに行うことが可能である。
【０１４４】
図１３Ａ及び図１３Ｂは、図１１に示すテーブル更新処理Ｓ１１５０によって変化する演算結果の二つの例を示す。
【０１４５】
図１３Ａは、本実施例１の並列処理部５０３−１が連続してテーブル更新処理Ｓ１１５０を実行する際の演算結果を示す説明図である。
【０１４６】
テーブル更新時間が１０ｃｌｋであり、かつ、最短パケット到着間隔が２ｃｌｋである場合において、並列処理部５０３−１が、同一フローＩＤ“１００”の入力パケットを２ｃｌｋ間隔で連続受信する例を、図１３Ａ及び図１３Ｂに示す。
【０１４７】
本実施例において、並列処理振分部５０１が最初に受信する入力パケットを第１のパケット、第１のパケットよりも２ｃｌｋ後に受信する入力パケットを第２のパケット、第２のパケットよりも２ｃｌｋ後に受信する入力パケットを第３のパケットと記載する。図１３Ａにおいて、第１のパケット、第２のパケット、及び第３のパケットのフローＩＤ３０２の値は、いずれも“１００”である。
【０１４８】
また、図１３Ａ及び図１３Ｂにおいて、設定情報７０２−１は、フローＩＤ７０１に“１００”を含む設定用テーブル２１３のエントリの設定情報７０２の値であり、演算結果８０２−１は、フローＩＤ７０１に“１００”を含む演算用テーブル２１４のエントリの演算結果８０２の値である。また、前回演算結果１３０２−１は、並列処理部５０３−１が内部保持する前回演算結果である。
【０１４９】
第１のパケットは、並列処理振分部５０１の処理（Ｓ９０４）によって、並列処理部５０３−１にテーブル更新処理を新規に実行させると決定された、入力パケットである。
【０１５０】
実施例１の並列処理部５０３−１は、新規を示す新規／継続パラメータと、第１のパケットのフローＩＤと、第１のパケットのフレーム長と、処理開始トリガとを含む振分け通知を並列処理振分部５０１から受信したタイミング（Ｔ１３１１）から、第１のパケットのフローＩＤ“１００”を検索キーとして、設定用テーブル２１３、及び、演算用テーブル２１４を検索する。そして、並列処理部５０３−１は、検索の結果、設定情報Ｘ１、及び、演算結果Ａ１を取得する（テーブルＲＤ）。
【０１５１】
第１のパケットに関するテーブルＲＤは、図１１に示すＳ１１００〜Ｓ１１０４に相当する。
【０１５２】
並列処理部５０３−１は、設定情報Ｘ１及び第１のパケットのフレーム長を用いて、演算結果Ａ１を演算結果Ｂ１に更新する（データ演算）。第１のパケットに関するデータ演算は、図１１のＳ１１０７に相当する。
【０１５３】
そして、並列処理部５０３−１は、第１のパケットに関するデータ演算が終了したタイミング（Ｔ１３１４）から、演算結果Ｂ１による演算用テーブル２１４への書き戻しを開始する（テーブルＷＲ）。第１のパケットに関するテーブルＷＲは、Ｓ１１０８に相当する。
【０１５４】
一般的に、テーブルにアクセスするためには時間が必要であるため、演算結果Ｂ１による演算用テーブル２１４への書き戻しは、Ｔ１３１６に終了する。また、並列処理部５０３−１は、テーブルＷＲにおいて、演算結果Ｂ１を前回演算結果１３０２−１として、次に受信する入力パケットの継続処理用に内部保持する（図１１に示すＳ１１０８に相当）。
【０１５５】
第２のパケットは、第１のパケットに関するテーブル更新処理が終了する前に並列処理振分部５０１によって受信される。このため、第２のパケットは、並列処理振分部５０１の処理（Ｓ９０４）において並列処理部５０３−１にテーブル更新処理を継続して実行させると決定された、入力パケットである。
【０１５６】
並列処理部５０３−１は、継続を示す新規／継続パラメータと、第２のパケットのフローＩＤと、第２のパケットのフロー長と、処理開始トリガと振分け通知を並列処理振分部５０１から受信したタイミング（Ｔ１３１２）から、第２のパケットのフローＩＤ“１００”を検索キーとして、設定用テーブル２１３を検索する。並列処理部５０３−１は、検索の結果、設定情報Ｘ１を取得する（ダミーＲＤ）。
【０１５７】
第２のパケットに関するダミーＲＤは、Ｓ１１００〜Ｓ１１０２、及び、Ｓ１１０５に相当する。
【０１５８】
Ｔ１３１２において、第１のパケットに関するテーブル更新処理の演算結果の更新が終了していないため、演算結果８０２−１は、演算結果Ａ１のままである。このため、並列処理部５０３−１は、第２のパケットに関するテーブル更新処理において、演算用テーブル２１４から演算結果を取得しない。
【０１５９】
そして、並列処理部５０３−１は、新規／継続パラメータが継続を示す振分け通知を受信したタイミングから、ダミーＲＤを実行する。本実施例におけるテーブル処理において、演算用テーブル２１４を参照せず、設定用テーブル２１３から設定情報のみを取得する処理を、ダミーＲＤと記載する。
【０１６０】
ダミーＲＤの後、並列処理部５０３−１は、第１のパケットのテーブル演算によって内部保持された前回演算結果１３０２−１を読み出すことによって、前に実行されたテーブル更新処理の演算結果Ｂ１を引き継ぐ（Ｔ１３１４）。第１のパケットのテーブル演算によって内部保持された演算結果Ｂ１を引き継ぐ処理は、図１１のＳ１１０６に相当する。
【０１６１】
そして、並列処理部５０３−１は、設定情報Ｘ１及び第２のパケットのフレーム長を用いて、引き継がれた演算結果Ｂ１を演算結果Ｃ１に更新する（データ演算）。第２のパケットに関するデータ演算は、図１１に示すＳ１１０７に相当する。
【０１６２】
第２のパケットに関するデータ演算の後、並列処理部５０３−１は、Ｔ１３１５から、演算結果Ｃ１による演算用テーブル２１４への書き戻しを開始する（テーブルＷＲ）。第２のパケットに関するテーブルＷＲは、図１１に示すＳ１１０８に相当に相当する。
【０１６３】
テーブルにアクセスするためには時間が必要であるため、演算結果Ｃ１による演算用テーブル２１４への書き戻しは、Ｔ１３１８に終了する。また、テーブルＷＲにおいて、並列処理部５０３−１は、演算結果Ｃ１を前回演算結果１３０２−１として、次に受信する入力パケットの継続処理用に内部保持する。
【０１６４】
第２のパケットが第１のパケットに関するテーブル更新処理の終了前に受信されたパケットであることと同じく、第３のパケットは、第２のパケットに関するテーブル更新処理が終了する前に、並列処理振分部５０１によって受信されるパケットである。このため、第２のパケットに関するテーブル更新処理と、第３のパケットに関するテーブル更新処理とは同様である。
【０１６５】
ただし、図１３Ａにおける設定情報７０２−１は、Ｔ１３１２と、第３のパケットに関するテーブル更新処理が開始されるＴ１３１３との間で、管理者等によって更新されている。具体的には、設定情報７０２−１に格納された値は、設定情報Ｘ１から設定情報Ｙ１に更新される。このため、並列処理部５０３−１がＴ１３１３からのダミーＲＤにおいて取得する設定情報７０２−１は、設定情報Ｙ１である。
【０１６６】
また、並列処理部５０３−１は、Ｔ１３１７からのテーブルＷＲにおいて、前回演算結果１３０２−１として演算結果Ｄ１を保持する。また、第３のパケットに関するテーブル更新処理が終了するＴ１３１９以後、演算結果８０２−１は、演算結果Ｄ１を格納する。
【０１６７】
前述の処理によれば、Ｔ１３１４の後、演算結果Ｂ１が前回演算結果１３０２−１として保持されるため、並列処理部５０３−１は、第２のパケットに関するテーブル更新処理におけるデータ演算に、演算結果Ｂ１を引き継ぐことができる。また、Ｔ１３１５の後、演算結果Ｃ１が前回演算結果１３０２−１として保持されるため、並列処理部５０３−１は、第３のパケットに関するテーブル更新処理における演算処理に、演算結果Ｃ１を引き継ぐことができる。
【０１６８】
図１３Ｂは、本実施例１の二つの並列処理部５０３がテーブル更新処理Ｓ１１５０を実行する際の演算結果を示す説明図である。
【０１６９】
図１３Ｂは、並列処理部５０３−１と並列処理部５０３−２との二つがテーブル更新処理を実行する場合の演算結果の変化を示す図である。すなわち、並列処理振分部５０１が異なるフローの入力パケットを受信した場合、図１３Ｂに示す演算結果が求められる。
【０１７０】
図１３Ｂにおいて、並列処理振分部５０１は、フローＩＤ“１００”の第１のパケット及び第３のパケットを受信し、フローＩＤ“２００”の第２のパケットを、連続して受信する。また、フローＩＤ７０１に“２００”を含む設定用テーブル２１３のエントリの設定情報７０２の値を、設定情報７０２−２と記載する。また、フローＩＤ８０１に“２００”を含む演算用テーブル２１４のエントリの演算結果８０２の値を、演算結果８０２−２と記載する。また、前回演算結果１３０２−２は、並列処理部５０３−２が保持する前回演算結果である。
【０１７１】
並列処理部５０３−１は、図１３Ｂにおける第１のパケットに関するテーブル更新処理を、図１３Ａにおける第１のパケットに関するテーブル更新処理と同じく実行する。
【０１７２】
図１３Ｂにおける第２のパケットは、第１のパケットと異なるフローＩＤである。このため、並列処理振分部５０１は、並列処理部５０３−２に、新規を示す新規／継続パラメータと、フローＩＤ“２００”と、第２のパケットのフロー長と、処理開始トリガとを含む振分け通知を送信する。
【０１７３】
そして、並列処理部５０３−２は、並列処理部５０３−１における第１のパケットのテーブル更新処理と同じく、第２のパケットのテーブル更新処理を実行する。並列処理部５０３−２は、Ｔ１３１２から第２のパケットに関するテーブル更新処理を開始し、Ｔ１３１８までに第２のパケットに関するテーブル更新処理を終了する。
【０１７４】
並列処理部５０３−２は、Ｔ１３１２において設定用テーブル２１３から設定情報７０２−２（設定情報Ｘ２）を取得する。また、並列処理部５０３−２は、Ｔ１３１２において、演算用テーブル２１４から演算結果８０２−２（演算結果Ａ２）を取得する。また、並列処理部５０３−２は、第２のパケットに関するテーブル更新処理において、演算結果Ａ２を演算結果Ｂ２に更新する。
【０１７５】
並列処理部５０３−１が演算用テーブル２１４に演算結果Ｂ１を書き戻す間に、並列処理部５０３−２は、演算結果Ｂ２を演算用テーブル２１４に書き戻す（Ｔ１３１５）。これは、第１のパケットと第２のパケットとのフローＩＤが異なり、設定用テーブル２１３、及び、演算用テーブル２１４の異なるエントリに第１のパケット及び第２のパケットに関する情報が格納されているためである。並列処理部５０３−１と並列処理部５０３−２との両方が同時に演算用テーブル２１４に書き戻すことができる。
【０１７６】
また、第３のパケットは、第１のパケットと同じフローＩＤであり、第１のパケットに関するテーブル更新処理が終了する前に並列処理振分部５０１によって受信されるパケットである。並列処理振分部５０１は、第３のパケットに関するテーブル更新処理を、第１のパケットに関するテーブル更新処理を実行する並列処理部５０３−１に、継続して実行させる。
【０１７７】
並列処理部５０３−１による第３のパケットに関するテーブル更新処理は、図１３Ａに示す第３のパケットに関するテーブル更新処理と同様である。ただし、並列処理部５０３−１は、前回演算結果１３０２−１から演算結果Ｂ１を取得し、演算結果Ｂ１を演算結果Ｃ１に更新する。
【０１７８】
なお、本実施例において、最短パケット到着間隔は全て２ｃｌｋであるため、並列処理部による継続パケット処理のデータ演算は２ｃｌｋ以内に実行される必要がある。本実施例における並列処理振分部５０１は、データ演算に必要な時刻を保持し、データ演算に必要な時間よりも短い時間間隔で入力パケットを受信した場合、連続して受信した入力パケットを廃棄してもよい。
【０１７９】
前述のとおり、実施例１によれば、パケット通信装置２は、各並列処理部５０３において前回の演算結果が保持され、連続して受信する入力パケットに関するデータ演算を、保持される演算結果によって行う。このため、実施例１の並列処理部５０３は、演算用テーブル２１４をテーブル更新処理の都度アクセスする必要がなく、テーブル更新処理を連続して実行することが可能である。
【０１８０】
また、演算用テーブル２１４へのアクセス頻度を下げ、パケット通信装置の消費電力を低減することができる。
【０１８１】
さらに、実施例１によれば、設定用テーブル２１３を用いて入力パケットに関するテーブル更新処理を実行し、かつ、出力判定部５０４において入力パケットの変換等を実行するため、より複雑なテーブル更新処理を実行することが可能である。
【実施例２】
【０１８２】
以下、本実施例２について図１４から図２０を用いて説明する。
【０１８３】
実施例１におけるパケット通信装置２は、各入力パケットに一般的なテーブル更新処理を実行したが、実施例２におけるパケット通信装置は、各入力パケットに基づいて帯域制御を行う。実施例２において、帯域制御機能を実現するため、パケット通信装置は、トークンバケツアルゴリズムを使用する。
【０１８４】
トークンバケツアルゴリズムを使用する場合、パケット通信装置は、設定された帯域に対応する速度でトークンバケツ（メモリに保持された所定の領域）にトークンを加算する。そして、パケット通信装置が送信する予定のパケットのフレーム長分のトークンがトークンバケツに蓄積されている場合、保証帯域内と判定し、フレーム長のパケットを送信し、かつ、フレーム長分のトークンをトークンバケツから減算する。また、パケット通信装置が送信する予定のパケットのフレーム長分のトークンがトークンバケツに蓄積されていない場合、保証帯域外であると判定し、フレーム長のパケットを送信する。トークンは保持し、フレーム長分のトークンをトークンバケツから減算しない。
【０１８５】
図１４は、本実施例２のパケット通信装置２の物理的な構成及び論理回路２２１０を示すブロック図である。
【０１８６】
実施例２のパケット通信装置２２は、図２に示す実施例１のパケット通信装置２と同じ物理的な構成を備える。具体的には、パケット通信装置２２は、図２に示すパケット通信装置２と同じく、複数のネットワークインタフェースボード（ＮＩＦ）（２００−１〜２００−Ｍ）、及び、スイッチ部２０６を備える。また、実施例２におけるＮＩＦ２００も、実施例１におけるＮＩＦ２００と同じく、入出力回線インタフェース２０１、ＳＷインタフェース２０５、及びＮＩＦ管理部２１１を備える。
【０１８７】
しかし、実施例２におけるＮＩＦ２００は、実施例１の論理回路２１０の代わりに、論理回路２２１０を備える。論理回路２２１０と論理回路２１０との相違点は、論理回路２２１０に備わるメモリが、帯域設定テーブル２２１３、及び、演算結果保持テーブル２２１４を保持する点である。
【０１８８】
また、論理回路２２１０が有する入力パケット制御部２２０３は、実施例１の論理回路２１０が有する入力パケット制御部２０３と異なる処理を実行する。
【０１８９】
論理回路２２１０に備わる設定レジスタ２２１２は、実施例１の設定レジスタ２１２と同様に、一時的にデータを格納する記憶領域を有し、論理回路２２１０が有する全ての処理部に接続される。しかし、設定レジスタ２２１２は、入力パケット制御部２２０３の処理に伴い、設定レジスタ２１２とは異なるデータを格納する。以下において、設定レジスタ２２１２の処理の説明は省略する。
【０１９０】
実施例２における、入力ヘッダ処理部２０２、入力パケットバッファ２０４、出力ヘッダ処理部２０７、出力パケット制御部２０８、及び、出力パケットバッファ２０９は、実施例１における、入力ヘッダ処理部２０２、入力パケットバッファ２０４、出力ヘッダ処理部２０７、出力パケット制御部２０８、及び、出力パケットバッファ２０９と同じである。
【０１９１】
帯域設定テーブル２２１３は、実施例１の設定用テーブル２１３に相当し、入力パケット制御部２２０３において実行されるテーブル更新処理に用いられる設定値を格納する。また、演算結果保持テーブル２２１４は、実施例１の演算用テーブル２１４に相当し、入力パケット制御部２２０３において実行されるテーブル更新処理の結果を格納する。実施例２は、設定用テーブル２１３及び演算用テーブル２１４に格納されるデータが実施例１とは異なる場合の実施例である。
【０１９２】
入力パケット制御部２２０３は、入力ヘッダ処理部２０２から入力パケットを受信すると、入力パケットバッファ２０４に格納する。この際、入力パケット制御部２２０３は、帯域設定テーブル２２１３、及び、演算結果保持テーブル２２１４を用いてパケット処理、すなわち、帯域制御処理を実行する。帯域制御処理後、入力パケットバッファ２０４に格納されたパケットを読み出し、ＳＷインタフェース２０５に送信する。
【０１９３】
図１５は、本実施例２の入力パケット制御部２２０３の論理的な構成を示すブロック図である。
【０１９４】
入力パケット制御部２２０３は、図５に示す入力パケット制御部２０３と同様の構成を有する。しかし、入力パケット制御部２２０３と実施例１の入力パケット制御部２０３とが異なる点は、入力パケット制御部２２０３が、複数の並列処理部２５０３（並列処理部２５０３−１〜２５０３−Ｎ）、出力判定部２５０４、及び、アクセス調停部２５０５を有する点である。また、並列処理部２５０３、出力判定部２５０４、及び、アクセス調停部２５０５は、実施例１の並列処理部５０３、出力判定部５０４、及び、アクセス調停部５０５と異なる処理を行う。
【０１９５】
また、実施例２の利用フロー管理リスト５０２の並列処理部６０１が、並列処理部２５０３−１〜２５０３−Ｎを示す点が、実施例２の利用フロー管理リスト５０２と実施例１の利用フロー管理リスト５０２との異なる点である。
【０１９６】
実施例２における並列処理振分部５０１は、実施例１における並列処理振分部５０１と同じ振分け処理Ｓ９５０を実行する。
【０１９７】
並列処理部２５０３は、後述するテーブル更新処理Ｓ１８５０を実行し、演算結果保持テーブル２２１４に含まれる各フローの情報を更新する。また、並列処理部２５０３は、処理判定結果（保証内、又は、保証外）を出力判定部２５０４に送信する。
【０１９８】
実施例１と同じく実施例２においても、並列処理部２５０３がテーブル更新処理Ｓ１８５０に要する時間はあらかじめ定められる。また、入力パケットバッファ２０４は、並列処理振分部５０１及び出力判定部２５０４によってシフトレジスタとして使用される。また、並列処理部２５０３の数Ｎは、実施例１と同じく、テーブル更新時間と最短パケット到着間隔とに基づいてあらかじめ決定される。
【０１９９】
出力判定部２５０４は、後述する出力判定処理Ｓ１９５０を実行し、各並列処理部２５０３から演算終了及び処理判定結果（保証内、又は、保証外）を受信する。出力判定部２５０４は、処理判定結果に基づき、入力パケットバッファ２０４から受信した入力パケットのヘッダを変換し、ヘッダを変換された入力パケットをＳＷインタフェース２０５に送信する。
【０２００】
アクセス調停部２５０５は、実施例１のアクセス調停部５０５と同様に、各並列処理部２５０３から帯域設定テーブル２２１３及び演算結果保持テーブル２２１４へのアクセス（読み出し及び書き戻し）を調停する。
【０２０１】
図１６は、本実施例２の帯域設定テーブル２２１３を示す説明図である。
【０２０２】
帯域設定テーブル２２１３に格納される値は、並列処理部２５０３がトークンアルゴリズムを実行するために用いる設定値であり、管理者等によってあらかじめ定められる値である。帯域設定テーブル２２１３は、フローＩＤ２７０１、周期加算トークン値２７０２、及び、トークンバケツの深さ２７０３を含む。
【０２０３】
フローＩＤ２７０１は、入力パケットに割り当てられたフローを一意に示す識別子を含む。フローＩＤ２７０１に格納される値は、入力ヘッダ処理部２０２において装置内ヘッダ３のフローＩＤ３０２に格納された値に対応する。
【０２０４】
周期加算トークン値２７０２は、単位時間あたりにトークンバケツに追加されるトークン量（単位時間あたりに蓄積される保証帯域に相当）を示す。
【０２０５】
トークンバケツの深さ２７０３は、トークンバケツが保持できる最大のトークン量を示す。
【０２０６】
図１７は、本実施例２の演算結果保持テーブル２２１４を示す説明図である。
【０２０７】
演算結果保持テーブル２２１４は、パケットを保証帯域によって送信できるか否かを判定するためのテーブルである。演算結果保持テーブル２２１４は、フローＩＤ２８０１、前回パケット到着時刻２８０２、及び、保持トークン値２８０３を含む。
【０２０８】
フローＩＤ２８０１は、入力パケットに割り当てられたフローを一意に示すフローＩＤを含む。フローＩＤ２８０１に格納される値は、入力ヘッダ処理部２０２において装置内ヘッダ３のフローＩＤ３０２に格納された値に対応する。
【０２０９】
前回パケット到着時刻２８０２は、並列処理部２５０３において前回実行されたテーブル更新処理が実行された時刻を示す。保持トークン値２８０３は、前回実行されたテーブル更新処理によって算出された、トークンバケツに蓄積されるトークン量を示す。すなわち、前回パケット到着時刻２８０２は、保持トークン値２８０３に格納される値を算出した時刻を示す。
【０２１０】
図１８Ａ及び図１８Ｂによって、並列処理部２５０３が実行するテーブル更新処理Ｓ１８５０について説明する。
【０２１１】
図１８Ａは、本実施例２の並列処理部２５０３が実行するテーブル更新処理Ｓ１８５０のうち、入力パケットを受信するまでに蓄積されたトークン量を算出する処理を示すフローチャートである。
【０２１２】
並列処理部２５０３は、並列処理振分部５０１から処理開始トリガを含む振分け通知を受信した場合（Ｓ１８００）、振分け通知に含まれる新規／継続パラメータ、フローＩＤ、及び、フレーム長を取得する（Ｓ１８０１）。
【０２１３】
Ｓ１８０１の後、並列処理部２５０３は、新規／継続パラメータが“０”であるか否か、すなわち、新規／継続パラメータが新規を示すか否かを判定する（Ｓ１８０２）。
【０２１４】
新規／継続パラメータが“０”である場合、すなわち、新規／継続パラメータが新規を示すとＳ１８０２において判定された場合、並列処理部２５０３は、Ｓ１８０１において取得されたフローＩＤ、すなわち、入力パケットのフローＩＤを検索キーとして帯域設定テーブル２２１３を検索する。そして、検索の結果、並列処理部２５０３は、入力パケットのフローＩＤをフローＩＤ２７０１に含む帯域設定テーブル２２１３のエントリの周期加算トークン値２７０２の値、及び、トークンバケツの深さ２７０３の値を取得する（Ｓ１８０３）。
【０２１５】
なお、並列処理部２５０３は、Ｓ１８０３において帯域設定テーブル２２１３を検索した時刻を、論理回路２２１０のメモリに保持する。
【０２１６】
Ｓ１８０３の後、並列処理部２５０３は、入力パケットのフローＩＤを検索キーとして演算結果保持テーブル２２１４を検索する。そして、検索の結果、並列処理部２５０３は、入力パケットのフローＩＤをフローＩＤ２８０１に含む演算結果保持テーブル２２１４のエントリの前回パケット到着時刻２８０２の値、及び、保持トークン値２８０３の値を取得する（Ｓ１８０４）。
【０２１７】
Ｓ１８０４の後、並列処理部２５０３は、Ｓ１８０３において帯域設定テーブル２２１３を検索した時刻を、前回テーブル更新時刻として、次に受信する入力パケットの継続処理用に内部保持する（Ｓ１８０５）。
【０２１８】
Ｓ１８０５の後、並列処理部２５０３は、Ｓ１８０４において内部保持された帯域設定テーブル２２１３を検索した時刻と、Ｓ１８０４において取得された前回パケット到着時刻２８０２との差を、パケット到着間隔として算出する。そして、並列処理部２５０３は、算出されたパケット到着間隔と、Ｓ１８０４において取得された周期加算トークン値２７０２とを乗算することによって、加算トークン量を算出する（Ｓ１８０６）。
【０２１９】
Ｓ１８０６の後、並列処理部２５０３は、Ｓ１８０６において算出された加算トークン量を、Ｓ１８０４において取得された保持トークン値２８０３の値に加算する（Ｓ１８０７）。Ｓ１８０７の後、図１８Ｂに示すＳ１８１３の処理に進む。
【０２２０】
Ｓ１８０２において新規／継続パラメータが“０”ではないと判定された場合、すなわち、新規／継続パラメータが継続を示すと判定された場合、並列処理部２５０３は、Ｓ１８０３と同じ処理を行う（Ｓ１８０８）。並列処理部２５０３は、Ｓ１８０８によって、入力パケットに対応する周期加算トークン値２７０２の値、及び、トークンバケツの深さ２７０３の値を取得する。
【０２２１】
また、並列処理部２５０３は、Ｓ１８０８において帯域設定テーブル２２１３を検索した時刻を、論理回路２２１０のメモリに保持する。
【０２２２】
Ｓ１８０８の後、並列処理部２５０３は、継続処理用に内部保持する前回テーブル更新時刻を、前回パケット到着時刻として取得する（Ｓ１８０９）。
【０２２３】
Ｓ１８０９の後、並列処理部２５０３は、Ｓ１８０５と同じ処理を行う（Ｓ１８１０）。具体的には、Ｓ１８１０において、並列処理部２５０３は、Ｓ１８０８において帯域設定テーブル２２１３を検索した時刻を前回テーブル更新時刻として、次に受信する入力パケットの継続処理用に内部保持する。
【０２２４】
Ｓ１８１０の後、並列処理部２５０３は、Ｓ１８０９において取得された前回パケット到着時刻と、Ｓ１８０８において保持された帯域設定テーブル２２１３を検索した時刻との差を、パケット到着間隔として算出する。そして、並列処理部２５０３は、算出されたパケット到着間隔と、Ｓ１８０９において取得された周期加算トークン値２７０２とを乗算することによって、加算トークン量を算出する（Ｓ１８１１）。
【０２２５】
Ｓ１８１１の後、並列処理部２５０３は、継続処理用に内部保持している前回保持トークン値を取得し、取得された前回保持トークン値に、Ｓ１８１１において算出された加算トークン量を加算し（Ｓ１８１２）、Ｓ１８１３の処理に進む。なお、Ｓ１８１１において取得される前回保持トークン値は、図１８Ｂに示すＳ１８２２において保持される値である。
【０２２６】
Ｓ１８０７又はＳ１８１２における加算結果は、入力パケットを受信するまでにトークンバケツに蓄積されていたトークン量である。
【０２２７】
Ｓ１８０２〜Ｓ１８１２の処理に他に、実施例２の並列処理部２５０３は、新規／継続パラメータの値に従って、異なる処理を行ってもよい。例えば、新規／継続パラメータが新規を示す場合、並列処理部２５０３は、Ｓ１８０７の結果である加算結果に、ユーザによってあらかじめ与えられた値を加算してもよい。
【０２２８】
これによって、入力パケットが連続して受信する場合と、入力パケットが連続して受信されない場合とにおいて、更新される演算結果の値をユーザの要求に従って、変更することができる。
【０２２９】
図１８Ｂは、本実施例２の並列処理部２５０３が実行するテーブル更新処理Ｓ１８５０のうち、入力パケットが帯域保証内であるか否かを判定する処理を示すフローチャートである。
【０２３０】
Ｓ１８０７又はＳ１８１２の後、並列処理部２５０３は、Ｓ１８０７又はＳ１８１２における加算結果が、Ｓ１８０３又はＳ１８０８において取得されたトークンバケツの深さ２７０３の値を超過するか否かを判定する（１８１３）。
【０２３１】
Ｓ１８０７又はＳ１８１２における加算結果がトークンバケツの深さ２７０３の値以下であるとＳ１８１３において判定された場合、並列処理部２５０３は、Ｓ１８０７又はＳ１８１２における加算結果を、現在トークン量として保持する（Ｓ１８１４）。Ｓ１８１４の後、並列処理部２５０３は、Ｓ１８１６の処理に進む。
【０２３２】
また、Ｓ１８０７又はＳ１８１２における加算結果がトークンバケツの深さ２７０３の値を超過しているとＳ１８１３において判定された場合、並列処理部２５０３は、トークンバケツの深さ２７０３の値を、現在トークン量として保持する（Ｓ１８１５）。Ｓ１８１５の後、並列処理部２５０３は、Ｓ１８１６に進む。
【０２３３】
Ｓ１８１４又はＳ１８１５の後、並列処理部２５０３は、Ｓ１８０１において取得された入力パケットのフレーム長が、Ｓ１８１４又はＳ１８１５において保持された現在トークン量以内であるか否かを判定する（Ｓ１８１６）。
【０２３４】
入力パケットのフレーム長が現在トークン量以内であると、Ｓ１８１６において判定された場合、並列処理部２５０３は、現在トークン量から入力パケットのフレーム長分を減算した値を、更新保持トークン値として算出する（Ｓ１８１７）。更新保持トークン値は、入力パケットを送信した後のトークンバケツに残るトークン量を示す。
【０２３５】
Ｓ１８１７の後、並列処理部２５０３は、帯域制御結果が保証内であることを示す処理判定結果を生成し、生成された処理判定結果を出力判定部２５０４へ送信する（Ｓ１８１８）。Ｓ１８１８の後、並列処理部２５０３は、Ｓ１８２１に進む。
【０２３６】
入力パケットのフレーム長が現在トークン量を超過するとＳ１８１６において判定された場合、並列処理部２５０３は、現在トークン量と同じ値を、更新保持トークン値として保持する（Ｓ１８１９）。
【０２３７】
Ｓ１８１９の後、並列処理部２５０３は、帯域制御結果が保証外であることを示す通知を生成し、生成された通知を出力判定部２５０４へ送信する（Ｓ１８２０）。Ｓ１８２０の後、並列処理部２５０３は、Ｓ１８２１に進む。
【０２３８】
なお、並列処理部２５０３は、Ｓ１８１８又はＳ１８２０において、帯域制御結果が保証内又は保証外であることを示す処理判定結果を生成し、後述するＳ１８２３において、生成された処理判定結果と演算終了を示す通知とを、出力判定部２５０４へ送信してもよい。
【０２３９】
Ｓ１８１８及びＳ１８２０において、帯域制御結果を送信又は生成することによって、並列処理部２５０３は、帯域制御結果に従った処理を入力パケットに行わせることが可能である。
【０２４０】
Ｓ１８１８又はＳ１８２０の後、並列処理部２５０３は、Ｓ１８０３又はＳ１８０８において保持された帯域設定テーブル２２１３を検索した時刻によって、演算結果保持テーブル２２１４の前回パケット到着時刻２８０２を更新する。また、並列処理部２５０３は、演算結果保持テーブル２２１４の保持トークン値２８０３に、更新保持トークン値を書き戻す（Ｓ１８２１）。
【０２４１】
Ｓ１８２１の後、並列処理部２５０３は、更新保持トークン値を前回保持トークン値として、次に受信する入力パケットの継続処理用に内部保持する（Ｓ１８２２）。
【０２４２】
Ｓ１８２２の後、並列処理部２５０３は、入力パケットを示すフローＩＤ等を含み、かつ、演算終了を示す通知を生成し、生成された通知を出力判定部２５０４へ送信する（Ｓ１８２３）。Ｓ１８２３の後、図１８Ａ及び図１８Ｂに示す処理を終了する（Ｓ１８２４）。
【０２４３】
以下に、出力判定部２５０４が実行する出力判定処理Ｓ１９５０について説明する。
【０２４４】
図１９は、本実施例２の出力判定部２５０４が実行する出力判定処理Ｓ１９５０を示すフローチャートである。
【０２４５】
出力判定部２５０４は、並列処理部２５０３から演算終了を示す通知を受信した場合（Ｓ１９００）、入力パケットバッファ２０４から、受信した通知が示す入力パケットを読み出す。そして、出力判定部２５０４は、演算終了を示す通知を送信した並列処理部２５０３と同じ並列処理部２５０３から送信された処理判定結果（保証内、又は、保証外）を特定する。
【０２４６】
そして、出力判定部２５０４は、読み出された入力パケットに含まれるＣｏＳ値等を、特定された処理結果を示す通知に従って更新する（Ｓ１９０１）。そして、出力判定部２５０４は、ＣｏＳ値等を更新された入力パケットをＳＷインタフェース２０５に送信する。
【０２４７】
そして、出力判定部２５０４は、Ｓ１９０１の後、図１９に示す出力判定処理Ｓ１９５０を終了する（Ｓ１９０２）。
【０２４８】
図２０は、本実施例２のテーブル更新処理Ｓ１８５０による前回パケット到着時刻及び保持トークン値の変化を示す説明図である。
【０２４９】
テーブル更新時間が１０ｃｌｋであり、最短パケット到着間隔が２ｃｌｋである場合において、並列処理部２５０３−１が同一フローＩＤ“１００”の入力パケットを連続受信する例を図２０に示す。また、図２０において、第１のパケット、第２のパケット、及び、第３のパケットのフレーム長は“８０”である。
【０２５０】
実施例２の第１のパケットは、実施例１の第１のパケットと同じく、並列処理振分部５０１の処理（Ｓ９０４）によって、並列処理部２５０３−１にテーブル更新処理を新規に実行させると決定された、入力パケットである。
【０２５１】
実施例２の並列処理部２５０３−１は、新規を示す新規／継続パラメータと、第１のパケットのフローＩＤと、処理開始トリガとを含む並列処理振分部５０１から受信したタイミング（Ｔ２０１１）から、第１のパケットのフローＩＤ“１００”を検索キーとして、帯域設定テーブル２２１３、及び、演算結果保持テーブル２２１４を検索する。そして、並列処理部２５０３−１は、検索の結果、周期加算トークン値、トークンバケツの深さ、前回パケット到着時刻、及び、保持トークン値を取得する（テーブルＲＤ）。
【０２５２】
第１のパケットに関するテーブルＲＤは、図１８Ａに示すＳ１８００〜Ｓ１８０５に相当する。
【０２５３】
また、並列処理部２５０３−１は、第１のパケットに関するテーブルＲＤにおいて、帯域設定テーブル２２１３を検索した時刻を前回テーブル更新時刻２００２として、次に受信する入力パケットの継続処理用に内部保持する（Ｓ１８０５に相当）。なお、図２０に示す第１のパケットに関するテーブルＲＤにおいて、帯域設定テーブル２２１３を検索した時刻は、“２０２０”である。
【０２５４】
図２０に示す第１のパケットに関するテーブルＲＤにおいて、帯域設定テーブル２２１３及び演算結果保持テーブル２２１４を検索した結果、並列処理部２５０３−１は、周期加算トークン値２７０２の値として“１０”を取得し、トークンバケツの深さ２７０３の値として“１０００”を取得し、前回パケット到着時刻２８０２の値として“２０００”を取得し、保持トークン値２８０３の値として“１００”を取得する。また、並列処理部２５０３−１が、第１のパケットに関するテーブルＲＤにおいて内部保持する前回テーブル更新時刻２００２の値は、“２０２０”である。
【０２５５】
第１のパケットに関するテーブルＲＤの後、並列処理部２５０３−１は、第１のパケットに関するテーブルＲＤにおいて取得された、帯域設定テーブル２２１３を検索した時刻“２０２０”、周期加算トークン値２７０２の値“１０”、トークンバケツの深さ２７０３の値“１０００”、前回パケット到着時刻２８０２の値“２０００”、及び、保持トークン値２８０３の値“１００”を用いて、保持トークン値２８０３の値“２２０”を算出する（データ演算）。ここで、算出される保持トークン値は、｛（２０２０−２０００）×１０＋１００−８０＝２２０｝によって算出される。
【０２５６】
また、並列処理部２５０３−１は、第１のパケットに関するデータ演算において、帯域設定テーブル２２１３を検索した時刻を、前回パケット到着時刻として取得する。すなわち、データ演算において取得される前回パケット到着時刻と、テーブルＲＤにおいて前回テーブル更新時刻２００２とは、同じ値である。
【０２５７】
前述の第１のパケットに関するデータ演算は、図１８ＡのＳ１８０６、Ｓ１８０７、Ｓ１８１３、Ｓ１８１４、Ｓ１８１６〜Ｓ１８１８に相当する。
【０２５８】
第１のパケットに関するデータ演算が終了したタイミング（Ｔ２０１４）から、並列処理部２５０３−１は、取得された前回パケット到着時刻の値“２０２０”、及び、算出された保持トークン値の値“２２０”を演算結果保持テーブル２２１４の前回パケット到着時刻２８０２及び保持トークン値２８０３に書き戻し始める（テーブルＷＲ）。第１のパケットに関するテーブルＷＲは、図１８ＢのＳ１８２１に相当する。
【０２５９】
演算結果保持テーブル２２１４を更新するために所定の時間が必要であるため、取得された前回パケット到着時刻２８０２の値“２０２０”、及び、算出された保持トークン値２８０３の値“２２０”は、演算結果保持テーブル２２１４にＴ２０１６のタイミングにおいて反映される。
【０２６０】
また、第１のパケットに関するテーブルＷＲにおいて、並列処理部２５０３−１は、算出された保持トークン値の値“２２０”を前回保持トークン値２００３として、次に受信する入力パケットの継続処理用に内部保持する。この処理は、図１８のＳ１８２２に相当する。
【０２６１】
第２のパケットは、第１のパケットのテーブル更新処理が終了する前に並列処理振分部５０１によって受信される。このため、第２のパケットは、並列処理振分部５０１の処理（Ｓ９０４）において並列処理部２５０３−１にテーブル更新処理を継続して実行させると決定された、入力パケットである。
【０２６２】
並列処理部２５０３−１は、継続を示す新規／継続パラメータと、第２のパケットのフローＩＤと、処理開始トリガとを含む振分け通知を、並列処理振分部５０１から受信したタイミング（Ｔ２０１２）から、第２のパケットのフローＩＤを検索キーとして、帯域設定テーブル２２１３を検索する。
【０２６３】
並列処理部２５０３−１は、検索の結果、帯域設定テーブル２２１３から、周期加算トークン値２７０２の値“１０”、及び、トークンバケツの深さ２７０３の値“１０００”を取得する（ダミーＲＤ）。前述の第２のパケットに関するダミーＲＤは、Ｓ１８００〜Ｓ１８０２、及び、Ｓ１８０８に相当する。
【０２６４】
第２のパケットは、第１のパケットに関するテーブル更新処理が終了する前に受信されたパケットであるため、第２のパケットに関するダミーＲＤにおいて、並列処理部２５０３−１は、演算結果保持テーブル２２１４へアクセスしない。実施例２におけるダミーＲＤは、帯域設定テーブル２２１３のみを参照し、演算結果保持テーブル２２１４から値を取得しない処理を示す。
【０２６５】
また、第２のパケットに関するダミーＲＤにおいて、並列処理部２５０３−１は、第１のパケットに関するテーブル更新処理において内部保持された前回テーブル更新時刻２００２の値“２０２０”を、前回パケット到着時刻として取得する（Ｓ１８０９に相当）。
【０２６６】
さらに、第２のパケットに関するダミーＲＤにおいて、並列処理部２５０３−１は、前述の帯域設定テーブル２２１３を検索した時刻“２０２２”を前回テーブル更新時刻２００２として、次に受信する入力パケットの継続処理用に内部保持する（Ｓ１８１０に相当）。
【０２６７】
ここで、並列処理部２５０３−１は、第２のパケットに関するダミーＲＤにおいて、後述する前回保持トークン値を引き継ぐ前に、帯域設定テーブル２２１３を検索した時刻“２０２２”、周期加算トークン値２７０２の値“１０”、及び、前回パケット到着時刻２８０２の値“２０２０”を用いて、加算トークン量を算出する（データ演算）。第２のパケットのデータ演算は、図１８ＡのＳ１８１１に相当する。ここで算出される加算トークン量は、（２０２２−２０２０）×１０＝２０によって算出される。
【０２６８】
並列処理部２５０３−１は、第２のパケットのデータ演算において、第１のパケットに関するテーブル更新処理時に内部保持した前回保持トークン値２００３の値“２２０”を、第２のパケットに関するテーブル更新処理に引き継ぐ（図１８ＡのＳ１８１２に相当）。
【０２６９】
そして、第２のパケットに関するデータ演算において、並列処理部２５０３−１は、更新された前回テーブル更新時刻と更新された保持トークン値を算出する。図１８ＡのＳ１８１２、図１８ＢのＳ１８１３、Ｓ１８１４、Ｓ１８１６〜Ｓ１８１８に相当する。ここで算出される更新された保持トークン値は、２０＋２２０−８０＝１６０によって算出される。
【０２７０】
並列処理部２５０３−１は、第２のパケットに関するデータ演算が終了したタイミングＴ２０１５から、取得された前回パケット到着時刻“２０２２”、及び、算出された保持トークン値“１６０”を演算結果保持テーブル２２１４に書き戻し始める（テーブルＷＲ）。第２のパケットに関するデータ演算は、図１８ＢのＳ１８２１に相当する。
【０２７１】
演算結果保持テーブル２２１４を更新するために所定の時間が必要であるため、Ｔ２０１８のタイミングにおいて、取得された前回パケット到着時刻“２０２２”、及び、算出された保持トークン値“１６０”が演算結果保持テーブル２２１４に反映される。
【０２７２】
また、並列処理部２５０３−１は、第２のパケットに関するデータ演算において、算出された保持トークン値“１６０”を前回保持トークン値２００３として次に受信する入力パケットの継続処理用に内部保持する（Ｓ１８２２に相当）。
【０２７３】
第３のパケットは、第２のパケットが第１のパケットに関するテーブル更新処理の終了前に受信された入力パケットであることと同じく、第２のパケットに関するテーブル更新処理が終了する前に、並列処理振分部５０１によって受信される入力パケットである。このため、第２のパケットに関するテーブル更新処理と、第３のパケットに関するテーブル更新処理とは同様である。
【０２７４】
ただし、図２０における周期加算トークン値２７０２の値は、Ｔ２０１２と、第３のパケットに関するテーブル更新処理が開始されるＴ２０１３との間で、管理者等によって更新される。具体的には、周期加算トークン値２７０２に格納された値は、“１０”から“３０”に更新される。このため、並列処理部２５０３−１がＴ２０１３からのダミーＲＤにおいて取得する周期加算トークン値２７０２の値は、“３０”である。
【０２７５】
また、並列処理部２５０３−１は、Ｔ２０１７からのテーブルＷＲにおいて、前回保持トークン値２００３として“１４０”｛＝（２０２４−２０２２）×３０＋１６０−８０｝を保持する。また、第３のパケットに関するテーブル更新処理が終了するＴ２０１９以後の演算結果保持テーブル２２１４において、前回パケット到着時刻２８０２は、“２０２４”を格納し、保持トークン値２８０３は、“１４０”を格納する。
【０２７６】
前述の処理によれば、Ｔ２０１４の後、並列処理部２５０３−１は、第１のパケットに関するテーブル更新処理による前回テーブル更新時刻２００２及び前回保持トークン値２００３を保持するため、第２のパケットに関するテーブル更新処理における演算処理において、前回テーブル更新時刻２００２及び前回保持トークン値２００３を引き継ぐことができる。また、Ｔ２０１５の後、並列処理部２５０３−１は、第２のパケットに関するテーブル更新処理による前回テーブル更新時刻２００２及び前回保持トークン値２００３を保持するため、第２のパケットに関するテーブル更新処理における演算処理において、前回テーブル更新時刻２００２及び前回保持トークン値２００３を引き継ぐことができる。
【０２７７】
以上により、実施例２によれば、実施例１の効果と同様に、実施例２の並列処理部２５０３は、演算結果保持テーブル２２１４をテーブル更新処理の都度アクセスする必要がなく、帯域制御機能を実行するためのテーブル更新処理を連続して実行することが可能である。
【０２７８】
また、演算結果保持テーブル２２１４へのアクセス頻度を下げ、パケット通信装置の消費電力を低減することができる。
【０２７９】
さらに、実施例２によれば、トークンバケツのアルゴリズムを用いたテーブル更新処理を実行し、かつ、テーブル更新処理の実行結果に従って、出力判定部５０４において入力パケットの変換等を実行するため、より適切な帯域制御を行うことができる。
【実施例３】
【０２８０】
以下、本実施例３について図２１から図２５を用いて説明する。
【０２８１】
実施例３では、統計カウント機能に本発明を適用する。実施例３では、パケット管理機能の統計情報として、受信パケット数、及び、受信バイト数をカウントする。
【０２８２】
図２１は、本実施例３のパケット通信装置３２の物理的な構成及び論理回路３２１０を示すブロック図である。
【０２８３】
実施例３のパケット通信装置３２は、図２に示す実施例１のパケット通信装置２と同じ物理的な構成を備える。具体的には、パケット通信装置３２は、図２に示すパケット通信装置２と同じく、複数のネットワークインタフェースボード（ＮＩＦ）２００（２００−１〜２００−Ｍ）、及び、スイッチ部２０６を備える。また、実施例３におけるＮＩＦ２００も、実施例１におけるＮＩＦ２００と同じく、入出力回線インタフェース２０１、ＳＷインタフェース２０５、及びＮＩＦ管理部２１１を備える。
【０２８４】
しかし、実施例３におけるＮＩＦ２００は、実施例１の論理回路２１０の代わりに、論理回路３２１０を備える。論理回路３２１０と論理回路２１０との相違点は、論理回路３２１０に備わるメモリが、設定用テーブル２１３、入力パケットバッファ２０４、及び、出力パケットバッファ２０９を保持せず、統計情報テーブル３２１３を保持する点である。
【０２８５】
また、論理回路３２１０が有する入力パケット制御部３２０３及び出力パケット制御部３２０８は、論理回路２１０が有する入力パケット制御部２０３及び出力パケット制御部２０８と異なる処理を実行する。
【０２８６】
論理回路３２１０に備わる設定レジスタ３２１２は、実施例１の設定レジスタ２１２と同様に、一時的にデータを格納する記憶領域を有し、論理回路３２１０が有する全ての処理部に接続される。しかし、設定レジスタ３２１２は、入力パケット制御部３２０３の処理に伴い、設定レジスタ２１２とは異なるデータを格納する。以下において、設定レジスタ２２１２の処理の説明は省略する。
【０２８７】
実施例３における、入力ヘッダ処理部２０２、及び、出力ヘッダ処理部２０７は、実施例１における、入力ヘッダ処理部２０２、及び、出力ヘッダ処理部２０７と同じである。
【０２８８】
統計情報テーブル３２１３は、実施例１の演算用テーブル２１４に相当し、入力パケット制御部３２０３において実行されるテーブル更新処理の結果を格納する。実施例３は、本実施例の通信装置が、実施例１の設定用テーブル２１３を用いない場合の実施例である。
【０２８９】
入力パケット制御部３２０３は、入力ヘッダ処理部２０２から入力パケットを受信した場合、統計情報テーブル３２１３を用いてパケット処理、すなわち、統計カウント処理を実行する。入力パケット制御部３２０３は、入力パケットバッファにパケットを格納せず、統計カウント処理を実行すると同時に、ＳＷインタフェース２０５にパケットを送信する。
【０２９０】
図２２は、本実施例３の入力パケット制御部３２０３の物理的な構成を示すブロック図である。
【０２９１】
入力パケット制御部３２０３は、図５に示す入力パケット制御部２０３と同様な構成を有する。しかし、入力パケット制御部３２０３と実施例１の入力パケット制御部２０３とが異なる点は、入力パケット制御部３２０３が、並列処理部３５０３（３５０３−１〜３５０３−Ｎ）、及び、アクセス調停部３５０５を有し、出力判定部及び入力パケットバッファを有さない点である。また、並列処理部３５０３、及び、アクセス調停部５０５の処理は、実施例１の並列処理部５０３、及び、アクセス調停部５０５の処理と異なる。
【０２９２】
また、実施例３の利用フロー管理リスト５０２の並列処理部６０１が、並列処理部３５０３−１〜３５０３−Ｎを示す点が、実施例３の利用フロー管理リスト５０２と実施例１の利用フロー管理リスト５０２との異なる点である。
【０２９３】
実施例３における並列処理振分部５０１は、実施例１における並列処理振分部５０１と同じ振分け処理Ｓ９５０を実行する。しかし、実施例３における並列処理振分部５０１は、入力パケットを受信した場合、振分け処理Ｓ９５０を開始し、かつ、受信した入力パケットをＳＷインタフェース２０５に送信する。
【０２９４】
並列処理部３５０３は、後述するテーブル更新処理Ｓ２４５０を実行し、統計情報テーブル３２１３に含まれる各フローの情報を更新する。
【０２９５】
実施例１と同じく実施例３においても、並列処理部３５０３がテーブル更新処理Ｓ２４５０に要する時間は、あらかじめ定められる。また、並列処理部３５０３の数Ｎは、実施例１と同じく、テーブル更新時間と最短パケット到着間隔とに基づいてあらかじめ決定される。
【０２９６】
アクセス調停部３５０５は、実施例１のアクセス調停部５０５と同様に、各並列処理部３５０３の統計情報テーブル３２１３へのアクセス（読み出し及び書き戻し）を調停する。
【０２９７】
図２３は、本実施例３の統計情報テーブル３２１３を示す説明図である。
【０２９８】
統計情報テーブル３２１３は、パケット通信装置３２が受信したパケットについての情報を有するテーブルである。統計情報テーブル３２１３は、フローＩＤ３７０１、受信パケット数３７０２、及び、受信バイト数３７０３を含む。
【０２９９】
フローＩＤ３７０１は、入力パケットのフローＩＤを含む。受信パケット数３７０２は、並列処理振分部５０１が受信した入力パケットの数を含む。受信バイト数３７０３は、並列処理振分部５０１が受信した入力パケットのバイト数の合計値を示す。
【０３００】
以下に、並列処理部３５０３−１〜３５０３−Ｎが実行するテーブル更新処理Ｓ２４５０について説明する。
【０３０１】
図２４は、本実施例３の並列処理部３５０３が実行するテーブル更新処理Ｓ２４５０を示すフローチャートである。
【０３０２】
並列処理部３５０３は、並列処理振分部５０１から処理開始トリガを含む振分け通知を受信した場合（Ｓ２４００）、振分け通知に含まれる新規／継続パラメータ、フローＩＤ、及び、フレーム長を取得する（Ｓ２４０１）。
【０３０３】
Ｓ２４０１の後、並列処理部３５０３は、振分け通知に含まれる新規／継続パラメータが“０”であるか否か、すなわち、新規／継続パラメータが新規を示すか否かを判定する（Ｓ２４０２）。
【０３０４】
新規／継続パラメータが“０”である場合、すなわち、新規／継続パラメータが新規を示すとＳ２４０２において判定された場合、並列処理部３５０３は、Ｓ２４０１において取得されたフローＩＤ、すなわち、入力パケットのフローＩＤを検索キーとして統計情報テーブル３２１３を検索する。そして、検索の結果、並列処理部３５０３は、受信パケット数３７０２、及び、受信バイト数３７０３を取得する（Ｓ２４０３）。Ｓ２４０３の後、Ｓ２４０５の処理へ進む。
【０３０５】
新規／継続パラメータが“０”を示さない、すなわち、新規／継続パラメータが継続を示すとＳ２４０２において判定された場合、並列処理部３５０３は、並列処理部３５０３が継続処理用に内部保持する前回受信パケット数、及び、前回受信バイト数を取得する（Ｓ２４０４）。Ｓ２４０４の後、Ｓ２４０５の処理に進む。
【０３０６】
Ｓ２４０３又はＳ２４０４の後、並列処理部３５０３は、受信パケット数（Ｓ２４０３において取得された受信パケット数３７０２、又は、Ｓ２４０４において取得された前回受信パケット数）に“１”を加算する。そして、並列処理部３５０３は、加算結果を、更新された受信パケット数として取得する。
【０３０７】
また、並列処理部３５０３は、受信バイト数（Ｓ２４０３において取得された受信バイト数３７０３、又は、Ｓ２４０４において取得された前回受信バイト数）に、Ｓ２４０１において取得されたフレーム長分を加算する。そして、並列処理部３５０３は、加算結果を、更新された受信バイト数として取得する（Ｓ２４０５）。
【０３０８】
Ｓ２４０５の後、並列処理部３５０３は、更新された受信パケット数を、統計情報テーブル３２１３の受信パケット数３７０２に書き戻し、更新された受信バイト数を、統計情報テーブル３２１３の受信バイト数３７０３に書き戻す。
【０３０９】
そして、Ｓ２４０５において、並列処理部３５０３は、更新された受信パケット数及び更新された受信バイト数を、前回受信パケット数及び前回受信バイト数として次パケットの継続処理用に内部保持する（Ｓ２４０６）。Ｓ２４０６の後、並列処理部３５０３は、テーブル更新処理Ｓ２４５０を終了する（Ｓ２４０７）。
【０３１０】
図２５は、本実施例３の並列処理部３５０３が実行するテーブル更新処理による、受信パケット数、及び、受信バイト数の変化を示す説明図である。
【０３１１】
テーブル更新時間が１０ｃｌｋであり、かつ、最短パケット到着間隔が２ｃｌｋである場合において、並列処理部３５０３−１が、同一フローＩＤ“１００”の入力パケットを２ｃｌｋ間隔で連続受信する例を、図２５に示す。また、図２５において、入力パケットのフレーム長は“８０”である。
【０３１２】
第１のパケットは、並列処理振分部５０１の処理（Ｓ９０４）によって、並列処理部３５０３−１にテーブル更新処理を新規に実行させると決定された、入力パケットである。
【０３１３】
実施例３の並列処理部３５０３−１は、新規を示す新規／継続パラメータと、第１のパケットのフローＩＤと、第１のパケットのフレーム長と、処理開始トリガとを含む振分け通知を並列処理振分部５０１から受信したタイミング（Ｔ２５１１）から、第１のパケットのフローＩＤを検索キーとして、統計情報テーブル３２１３を検索する。そして、並列処理部３５０３−１は、検索の結果、第１のパケットのフローＩＤに対応する受信パケット数３７０２、及び、受信バイト数３７０３を取得する（テーブルＲＤ）。
【０３１４】
第１のパケットに関するテーブルＲＤは、図２４に示すＳ２４００〜Ｓ２４０３に相当する。図２５に示す第１のパケットに関するテーブルＲＤにおいて取得される、受信パケット数３７０２の値は“１０”であり、受信バイト数３７０３の値は“１０００”である。
【０３１５】
並列処理部３５０３−１は、取得された受信パケット数の値“１０”に“１”を加算し、読み出された受信バイト数の値“１０００”に第１のパケットのフレーム長“８０”を加算する。そして、並列処理部３５０３−１は、加算結果を更新された受信パケット数“１１”及び更新された受信バイト数“１０８０”として取得する（データ演算）。
【０３１６】
データ演算が終了したタイミング（Ｔ２５１４）から、並列処理部３５０３−１は、更新された受信パケット数“１１”及び更新された受信バイト数“１０８０”を統計情報テーブル３２１３に書き戻す（テーブルＷＲ）。第１のパケットに関するテーブルＷＲはＳ２４０５に相当する。
【０３１７】
テーブルにアクセスするためには時間が必要であるため、Ｔ２５１６のタイミングにおいて、更新された受信パケット数“１１”及び更新された受信バイト数“１０８０”が統計情報テーブル３２１３に反映される。
【０３１８】
また、並列処理部３５０３−１は、Ｔ２５１４からのテーブルＷＲにおいて、更新された受信パケット数“１１”及び更新された受信バイト数“１０８０”を、前回受信パケット数３５１２及び前回受信バイト数３５１３として、次パケットの継続処理用に内部保持する。更新された受信パケット数“１１”及び更新された受信バイト数“１０８０”を内部保持する処理は、Ｓ２４０６に相当する。
【０３１９】
第２のパケットは、第１のパケットのテーブル更新処理が終了する前に並列処理振分部５０１によって受信される。並列処理振分部５０１は、第２のパケットを、並列処理部３５０３−１に継続して実行させると決定する。
【０３２０】
並列処理部３５０３−１は、継続を示す新規／継続パラメータと、第２のパケットのフローＩＤと、第２のパケットのフロー長と、処理開始トリガとを含む振分け通知を並列処理振分部５０１から受信したタイミング（Ｔ２５１２）においても、第１のパケットに関するテーブル更新処理によるテーブルＷＲが終了していないため、統計情報テーブル３２１３へアクセスしない。
【０３２１】
このため、実施例３の第２のパケットに関するテーブル更新処理において、テーブルＲＤ又はダミーＲＤは実行されない。
【０３２２】
並列処理部３５０３−１は、Ｔ２５１４の後、第１のパケットに関するテーブル更新処理時に内部保持された前回受信パケット数３５１２“１１”及び前回受信バイト数３５１３“１０８０”を引き継ぎ、第２のパケットに関するデータ演算を開始する。Ｔ２５１４までの処理は、図２４に示すＳ２４００〜Ｓ２４０２、及び、Ｓ２４０４に相当する。
【０３２３】
なお、パケット到着間隔は２ｃｌｋであるため、並列処理部３５０３−１は、前回受信パケット数３５１２、及び、前回受信バイト数３５１３を引き継いだ後のデータ演算を、２ｃｌｋ以内に実施する。並列処理部３５０３−１が、データ演算を実行するために、パケット到着間隔以上の時間を必要とする場合、並列処理振分部５０１において入力パケットは廃棄されてもよい。
【０３２４】
並列処理部３５０３−１は、第２のパケットに関するデータ演算において、引き継がれた前回受信パケット数３５１２“１１”に“１”を加算し、前回受信バイト数３５１３“１０８０”にフレーム長分“８０”を加算する。そして、並列処理部３５０３−１は、加算結果を、更新された受信パケット数“１２”及び更新された受信バイト数“１１６０”として取得する。
【０３２５】
データ演算が終了したタイミングＴ２５１５から、並列処理部３５０３−１は、更新された受信パケット数“１２”及び更新された受信バイト数“１１６０”を統計情報テーブル３２１３に書き戻す（テーブルＷＲ）。Ｔ２５１５からのテーブルＷＲは、図２４のＳ２４０５に相当する。
【０３２６】
テーブルにアクセスするためには時間が必要であるため、Ｔ２５１８のタイミングにおいて、更新された受信パケット数“１２”及び更新された受信バイト数“１１６０”が統計情報テーブル３２１３に反映される。
【０３２７】
また、並列処理部３５０３−１は、Ｔ２５１５からのテーブルＷＲにおいて、更新された受信パケット数“１２”及び更新された受信バイト数“１１６０”を、前回受信パケット数３５１２及び前回受信バイト数３５１３として次パケットの継続処理用に内部保持する。更新された受信パケット数“１２”及び更新された受信バイト数“１１６０”を内部保持する処理は、図１１のＳ２４０６に相当する。
【０３２８】
また、実施例３の第３のパケットは、実施例１又は実施例２の第２のパケットと同様、第２のパケットに関するテーブル更新処理が終了する前に並列処理振分部５０１に受信されるため、第２のパケットに関するテーブル更新処理と、第３のパケットに関するテーブル更新処理とは同様である。
【０３２９】
並列処理部３５０３−１は、Ｔ２５１７からのテーブルＷＲにおいて、前回受信パケット数３５１２及び前回受信バイト数３５１３として“１３”及び“１２４０”を保持する。また、第３のパケットに関するテーブル更新処理が終了するＴ２５１９以降、受信パケット数３７０２−１は、“１３”を格納し、受信バイト数３７０３−１は、“１２４０”を格納する。
【０３３０】
以上により、実施例３によれば、実施例１の効果と同様に、パケット通信装置２は、各並列処理部３５０３において前回の演算結果が保持され、連続して受信する入力パケットに関するデータ演算を、保持される演算結果によって行う。このため、実施例３の並列処理部３５０３は、統計情報テーブル３２１３をテーブル更新処理の都度アクセスする必要がなく、パケット管理機能を実行するためのテーブル更新処理を連続して実行することが可能である。
【０３３１】
また、演算用テーブル２１４へのアクセス頻度を下げ、パケット通信装置の消費電力を低減することができる。
【０３３２】
なお、本実施例における並列処理部は、新規／継続パラメータの値に従って、異なる処理を行ってもよい。具体的には、図１１に示すＳ１１０２〜Ｓ１１０６において、図１８Ａに示すＳ１８０２〜Ｓ１８１２において、又は、図２４に示すＳ２４０２〜Ｓ２４０２において、新規／継続パラメータが継続を示す場合と、新規／継続パラメータが新規を示す場合とに従って、並列処理部は、ユーザによってあらかじめ与えられた異なる処理を実行してもよい。
【０３３３】
これによって、本実施例の並列処理部は、入力パケットが連続して受信する場合と、入力パケットが連続して受信されない場合とにおいて、更新される演算結果の値をユーザの要求に従って、変更することができる。
【符号の説明】
【０３３４】
２  パケット通信装置
２００  ネットワークインタフェースボード
２０１  入出力回線インタフェース
２０２  入力ヘッダ処理部
２０３  入力パケット制御部
２０４  入力パケットバッファ
２０５  ＳＷインタフェース
２０６  スイッチ部
２０７  出力ヘッダ処理部
２０８  出力パケット制御部
２０９  出力パケットバッファ
２１０  論理回路
２１１  ＮＩＦ管理部
２１２  設定レジスタ
２１３  設定用テーブル
２１４  演算用テーブル
５０１  並列処理振分部
５０２  利用フロー管理リスト
５０３  並列処理部
５０４  出力判定部
５０５  アクセス調停部
２２０３  入力パケット制御部
２２１０  論理回路
２２１２  設定レジスタ
２２１３  帯域設定テーブル
２２１４  演算結果保持テーブル
２５０３  並列処理部
２５０４  出力判定部
２５０５  アクセス調停部
３２０３  入力パケット制御部
３２０８  出力パケット制御部
３２１０  論理回路
３２１２  設定レジスタ
３２１３  統計情報テーブル
【図１Ａ】
0005812533.tif 000002
【図１Ｂ】
0005812533.tif 000003
【図２】
0005812533.tif 000004
【図３】
0005812533.tif 000005
【図４】
0005812533.tif 000006
【図５】
0005812533.tif 000007
【図６】
0005812533.tif 000008
【図７】
0005812533.tif 000009
【図８】
0005812533.tif 000010
【図９】
0005812533.tif 000011
【図１０】
0005812533.tif 000012
【図１１】
0005812533.tif 000013
【図１２】
0005812533.tif 000014
【図１３Ａ】
0005812533.tif 000015
【図１３Ｂ】
0005812533.tif 000016
【図１４】
0005812533.tif 000017
【図１５】
0005812533.tif 000018
【図１６】
0005812533.tif 000019
【図１７】
0005812533.tif 000020
【図１８Ａ】
0005812533.tif 000021
【図１８Ｂ】
0005812533.tif 000022
【図１９】
0005812533.tif 000023
【図２０】
0005812533.tif 000024
【図２１】
0005812533.tif 000025
【図２２】
0005812533.tif 000026
【図２３】
0005812533.tif 000027
【図２４】
0005812533.tif 000028
【図２５】
0005812533.tif 000029