(57)【要約】      （修正有）【課題】複数の処理部によりパケットの中継処理を分散して処理する場合に、各処理部の処理負荷を評価する技術を提供する。【解決手段】複数のパケットの各々に対して行われる処理の内容を特定する処理内容情報に基づいて複数のパケットの各々の処理コストの値を示す処理コスト情報を保持し、複数のパケットを複数の処理部に送信する度に、処理コストを順次加算し、複数のパケットを複数の処理部から受信する度に、各パケットの処理コストの値を順次減算することにより、複数の処理部の処理部毎のコスト合計値を算出する。【選択図】図１５
2017011423.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理単位と、
前記複数の処理単位に接続され、複数のパケットを前記複数の処理単位に送信し、前記処理単位が処理した前記複数のパケットを前記複数の処理単位から受信する負荷分散部と、
を有し、
前記複数の処理単位は、前記負荷分散部から送信された前記複数のパケットに対して、前記複数のパケットの各々に対して行われる処理の内容を特定する処理内容情報に基づいて処理を行い、
前記負荷分散部は、
前記処理内容情報で特定される前記処理の内容に応じて定められた、前記複数のパケットの各々の処理コストの値を示す処理コスト情報を保持する保持部を有し、
前記複数のパケットに含まれる各パケットを前記複数の処理単位の何れかの処理単位に送信する度に、前記保持部に保持された前記処理コスト情報に基づき、前記複数の処理単位の処理単位毎に、送信された各パケットの前記処理コストの値を加算し、前記複数のパケットに含まれる各パケットを前記複数の処理単位の何れかの処理単位から受信する度に、前記複数の処理単位の処理単位毎に、受信された各パケットの前記処理コストの値を減算することにより、前記複数の処理単位の処理単位毎に第１処理コスト合計値を算出し、
前記複数の処理単位の各々の前記第１処理コスト合計値を互いに比較することにより、第１パケットの送信先となる処理単位を、前記複数の処理単位から選択し、
選択された前記処理単位に前記第１パケットを送信する
ことを特徴とするデータ処理システム。
【請求項２】
前記負荷分散部は、
同一のフローに属する複数のパケットであって、前記第１パケットを含む第１パケット列をネットワークから受信し、
前記第１パケット列に含まれる複数のパケットのうち、前記第１パケットよりも先に前記複数の処理単位に含まれる第１処理単位へ送信された１又は複数の第２パケットの全てについて、前記第１処理単位での前記処理が終了したか否かを判定し、
前記１又は複数の第２パケットの全てについて前記第１処理単位での前記処理が終了していないと判定された場合は、前記第１処理単位を、前記第１パケットの送信先となる処理単位として選定し、
前記複数の処理単位での前記処理が終了した前記第１パケット列を前記ネットワークに送出する
ことを特徴とする請求項１に記載のデータ処理システム。
【請求項３】
前記負荷分散部は、
前記１又は複数の第２パケットの全てについて前記第１処理単位での前記処理が終了していると判定された場合は、前記複数の処理単位のうち、前記第１処理単位の前記第１処理コスト合計値よりも小さい前記第１処理コスト合計値を有する第２処理単位を、前記第１パケットの送信先となる処理単位として選定し、
前記複数の処理単位での前記処理が終了した前記第１パケット列を前記ネットワークに送出する
ことを特徴とする請求項２に記載のデータ処理システム。
【請求項４】
前記保持部は、前記処理コストの値を前記フロー毎に保持し、
前記同一のフローに属する複数のパケットは、互いに同一の前記処理コストの値を有し、
前記同一のフローに属する複数のパケットは、互いに同一の送信元ノードから同一の宛先ノードへ送信されるか、もしくは互いに同一のＶｉｒｔｕａｌ  Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ内で送信されることを特徴とする請求項２又は３に記載のデータ処理システム。
【請求項５】
前記負荷分散部は、
前記複数のパケットに含まれる各パケットを前記複数の処理単位の何れかの処理単位に送信する度に、前記保持部に保持された前記処理コスト情報に基づき、前記フロー毎に、送信された各パケットの前記処理コストの値を順次加算し、前記複数のパケットに含まれる各パケットを前記複数の処理単位の何れかの処理単位から受信する度に、前記フロー毎に、受信された各パケットの前記処理コストの値を順次減算することにより、前記フロー毎に第２処理コスト合計値を算出し、
前記第１パケットと同一のフローについての前記第２処理コスト合計値が０である場合に、前記第１パケット列に含まれる前記１又は複数の第２パケットの全てについて前記第１処理単位での前記処理が終了していると判定する
ことを特徴とする請求項２乃至４何れか一項に記載のデータ処理システム。
【請求項６】
前記負荷分散部は、
前記第１パケットの第１ヘッダに基づき、前記第１パケットの前記フローを特定し、
前記保持部にアクセスすることにより、前記第１パケットの前記処理コストの値を取得し、
前記第１ヘッダに前記処理コストの値を追加する
ことを特徴とする請求項２乃至５何れか一項に記載のデータ処理システム。
【請求項７】
前記複数の処理単位は、
前記第１パケットを終端させ又は廃棄した場合は、前記第１パケットの前記処理コストの値が設定された第２ヘッダを有する第２パケットを生成し、
前記第２パケットを前記負荷分散部へ送信し、
前記負荷分散部は、
前記第２パケットを受信し、
前記第２パケットの前記第２ヘッダに書き込まれた前記処理コストの値を、前記第１処理コスト合計値から減算する
ことを特徴とする請求項１乃至６何れか一項に記載のデータ処理システム。
【請求項８】
前記負荷分散部は、
前記第１パケットを前記第１処理単位へ送信した時刻を記録し、
前記時刻から所定期間以内に前記複数の処理単位から前記第１パケットを受信しない場合は、前記第１パケットの前記処理コストの値を前記第１処理コスト合計値から減算する
ことを特徴とする請求項１乃至７何れか一項に記載のデータ処理システム。
【請求項９】
前記処理コストは、前記複数のパケットの各々について、前記複数の処理単位が前記処理を行う際に要する前記処理単位の動作クロックのクロック数であることを特徴とする請求項１乃至８何れか一項に記載のデータ処理システム。
【請求項１０】
複数のパケットの各々に対して行われる処理の内容を特定する処理内容情報に基づいて、前記複数のパケットの処理を行う複数の処理単位と、前記複数の処理単位に接続され、前記処理内容情報で特定される前記処理の内容に応じて定められた、前記複数のパケットの各々の処理コストの値を示す処理コスト情報を保持する保持部を有し、前記複数のパケットを前記複数の処理単位に送信し、前記複数の処理単位が処理した前記複数のパケットを前記複数の処理単位から受信する負荷分散部と、を有するデータ処理システムを用いたデータ処理方法であって、
前記複数のパケットに含まれる各パケットを前記負荷分散部から前記複数の処理単位の何れかの処理単位に送信し、
前記複数のパケットに含まれる各パケットが前記負荷分散部から前記複数の処理単位の何れかの処理単位に送信される度に、前記保持部に保持された前記処理コスト情報に基づき、前記複数の処理単位の処理単位毎に、送信された各パケットの前記処理コストの値を加算することにより、前記複数の処理単位の処理単位毎に第１処理コスト合計値を算出し、
前記複数のパケットに含まれる各パケットを前記複数の処理単位の何れかの処理単位から前記負荷分散部に送信し、
前記複数のパケットに含まれる各パケットが前記複数の処理単位の何れかの処理単位から前記負荷分散部へ送信される度に、前記複数の処理単位の処理単位毎に、受信された各パケットの前記処理コストの値を減算することにより、前記複数の処理単位の処理単位毎に前記第１処理コスト合計値を更新し、
前記複数の処理単位の各々の前記第１処理コスト合計値を互いに比較することにより、第１パケットの送信先となる処理単位を、前記複数の処理単位から選択し、
前記負荷分散部から選択された前記処理単位に前記第１パケットを送信する
ことを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ処理システム及びデータ処理方法に関する。
【背景技術】
【０００２】
ネットワーク内を送信されるパケットは、レイヤー２スイッチ、レイヤー３スイッチ又はルータといったパケット中継装置を介して宛先のノードへ配信される。レイヤー２スイッチは、パケットのヘッダ情報に含まれるＭｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ（ＭＡＣ）アドレスを参照して、パケットを特定のポートに送出する。またレイヤー３スイッチやルータは、パケットのヘッダ情報に含まれるＩｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ（ＩＰ）アドレスに基づき、次の中継装置宛てにパケットを送信する。各中継装置は、受信したパケットのヘッダ情報から必要な情報を抽出し、出力ポートの選定やヘッダ情報の書き換え等の処理を実行する。例えばルータにおいては、パケットを適切にルーティングするために、例えばＭＡＣアドレスの削除、パケットのフィルタリング、ＩＰアドレスの抽出、Ｍｕｌｔｉ  Ｐｒｏｔｏｃｏｌ  Ｌａｂｅｌ  Ｓｗｉｔｃｈｉｎｇ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ（ＭＰＬＳＩＤ）の付加、ＭＡＣアドレスの付加等の処理が行われる。このような処理は、中継装置内のＣｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）がコンピュータプログラムを実行することにより行われる場合や、中継装置内に搭載されたＡｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ（ＡＳＩＣ）等の専用回路を用いて行われる場合、又はＦｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ（ＦＰＧＡ）等のプログラマブルデバイスによって行われる。
【０００３】
パケットの中継装置に関する先行技術として、中継装置が複数のプロセッサエレメントを有し、複数のソースから受信した複数のパケットを並列に処理する技術が知られている（例えば、参考文献１参照）。図１は、先行技術における、入力ユニット１とスイッチ機構２と出力ユニット３とを含む中継装置を示している。入力ユニット１は、複数の処理エレメント４を含むプロセッサアレイモジュール５を有する。先行技術は、複数の処理エレメント４を並列に動作させて中継処理を行う場合に、どのようなアルゴリズムを用いてパケットを複数の処理エレメント４に分散させるか、という点について、幾つかの手法を開示している。例えば、特定のソースから送信されたパケットの処理を、プロセッサアレイモジュール５に含まれる特定の処理エレメント４に専用に割り当てる手法が開示されている。この場合は、他の処理エレメント４の処理負荷が当該特定の処理エレメント４の処理負荷よりも低い場合であっても、当該特定のソースから送信されたパケットを当該他の処理エレメント４に割り当てることはできない。その結果、プロセッサアレイモジュール５全体としての処理能力を十分に活かすことができない場合が発生する。
【０００４】
また他の手法として、複数のソースから送信された複数のパケットに対して、プロセッサアレイモジュール５に含まれる各処理エレメント４が共用される手法が開示されている。この場合は、パケットをどの処理エレメント４に処理させるかを決定する際、各処理エレメント４の処理負荷の軽重を参照して、処理エレメント４が選択される。そのため、プロセッサアレイモジュール５全体の処理効率を向上させることができる。しかしこの手法においては、ある特定のソースから送信された複数のパケットの順序が中継装置内で入れ替わって転送される場合がある。例えば、中継装置が特定のソースから受信した第１パケットを第１の処理エレメント４へ割り当て、中継装置が当該特定のソースから第１パケットの後に受信した第２パケットを、その時点における第１の処理エレメント４の処理負荷よりも低い処理負荷を有する第２の処理エレメント４へ割り当てるとする。この場合、第２の処理エレメント４での第２パケットの処理が、第１の処理エレメント４での第１パケットの処理よりも先に終了する可能性がある。そうすると、当該特定のソースから送信されてきた複数のパケットについて、中継処理においてパケットの順序の入れ替わりが生じる。
【０００５】
このような、複数の処理エレメントを用いた並列処理におけるパケットの順序が入れ替わることを抑制するため、特許文献１は更に以下のような技術を開示している。
【０００６】
図２は、先行技術における、処理エレメント４と、パケットを受信して処理エレメント４へのパケットの割り当てを行う入力制御装置６との関係を示す図である。処理エレメント４はマスクリセットライン８を用いて、処理エレメント４が特定のソースからのパケットを処理している状態であるか否かを入力制御装置６に通知する。入力制御装置６は、特定のソースからの先行パケットがある処理エレメント４で処理されている最中である場合は、当該特定のソースから受信した他のパケットを、先行パケットを処理する処理エレメント４と同一の処理エレメント４に割り当てる。一方、入力制御装置６は、特定のソースからの先行パケットが現在その処理エレメント４で処理されていない状態であれば、当該特定ソースから受信した他のパケットを、他の処理エレメント４に割り当てることができる。これにより、同一のソースから中継装置に入力された複数のパケットの順序が入れ替わることを防止しながら、複数の処理エレメント４を効率的に用いたパケット中継処理を行うことができる。
【０００７】
また先行技術は、同一のソースから受信した複数のパケットの処理を担当する処理エレメント４を、ある処理エレメント４から別の処理エレメント４へ変更する際、当該別の処理エレメント４をどのような観点に基づいて複数の処理エレメント４から選択するかについて、以下のように開示している。各処理エレメント４は、図２に示されたバックログ更新ライン９を用い、自身に割り当てられているパケットについてのバックログ情報（積み残し処理量）を入力制御装置６に通知する。入力制御装置６は、全ての処理エレメント４から受信したバックログ情報を比較し、バックログの値が最小の処理エレメント４を選択する。そして入力制御装置６は、ある特定のソースからの受信パケットに関し、当該特定のソースからの先行パケットが何れの処理エレメント４においても処理されていない状態であれば、最もバックログが小さい処理エレメント４に受信パケットを割り当てる。これにより、特定のソースから受信した複数のパケットの順序を入れ替えることなく、複数の処理エレメント４のうち最小のバックログを有する処理エレメント４を用いてパケットの中継処理が行われる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０００−３５８０６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
先行技術においては、各処理エレメント４が、各処理エレメント４にて処理がなされている特定のソースから受信したパケット数を反映したバックログ数を保持する。具体的には、先行技術においては、処理エレメント４が特定のソースからパケットを受信すると、処理エレメント４内のバックログレジスタがバックログ数を増加させ、当該特定ソースから受信したパケットについての処理エレメント４での処理が終了すると、バックログレジスタのバックログ数を減少させる。
【００１０】
しかし先行技術には、各処理エレメント４がパケットを受信した際に増加させるバックログ数が具体的にどのような技術的手段により算出されるかについての開示がなされていない。また、先行技術には、各処理エレメント４がパケットの処理を終了させた際に減少させるバックログ数がどのような技術的手段により算出されるかについて、の開示がなされていない。パケットに対する処理内容は、パケットによって変動し得るものであるため、複数のパケットの処理を実行する際、単純にパケットの数のみに基づいて各処理エレメント４のバックログ数を見積もることはできない。
【課題を解決するための手段】
【００１１】
開示のデータ処理システムは、複数の処理単位と、複数の処理単位に接続され、複数のパケットを複数の処理単位に送信し、処理単位が処理した複数のパケットを複数の処理単位から受信する負荷分散部と、を有し、複数の処理単位は、負荷分散部から送信された複数のパケットに対して、複数のパケットの各々に対して行われる処理の内容を特定する処理内容情報に基づいて処理を行い、負荷分散部は、処理内容情報で特定される処理の内容に応じて定められた、複数のパケットの各々の処理コストの値を示す処理コスト情報を保持する保持部を有し、複数のパケットに含まれる各パケットを複数の処理単位の何れかの処理単位に送信する度に、保持部に保持された処理コスト情報に基づき、複数の処理単位の処理単位毎に、送信された各パケットの処理コストの値を加算し、複数のパケットに含まれる各パケットを複数の処理単位の何れかの処理単位から受信する度に、複数の処理単位の処理単位毎に、受信された各パケットの処理コストの値を減算することにより、複数の処理単位の処理単位毎に第１処理コスト合計値を算出し、複数の処理単位の各々の第１処理コスト合計値を互いに比較することにより、第１パケットの送信先となる処理単位を、複数の処理単位から選択し、選択された処理単位に前記第１パケットを送信することを特徴とする。
【発明の効果】
【００１２】
複数の処理単位の第１処理コスト合計値を相互に比較することにより、第１パケットの送信先となる処理単位を適切に選択することができる。
【図面の簡単な説明】
【００１３】
【図１】従来例における中継装置の例を示す図である。
【図２】従来例における中継装置における処理を説明する図である。
【図３】第１実施例におけるネットワークの構成例を示す図である。
【図４】第１実施例における中継装置のハードウェア構成例を示す図である。
【図５】第１実施例における中継装置の機能ブロックを示す図である。
【図６】第１実施例におけるパケットのデータ構成例を示す図である。
【図７】第１実施例における中継処理の処理内容の例を示す図である。
【図８】第１実施例における中継処理のフローチャートの例を示す図である。
【図９】第１実施例における中継処理のフローチャートの他の例を示す図である。
【図１０】第１実施例における処理コストテーブルの例を示す図である。
【図１１】第１実施例におけるフローＩＤテーブルの例を示す図である。
【図１２】第１実施例における処理中パケットの処理コストのカウント方法を示す図である。
【図１３】第１実施例におけるプロセッサの機能ブロックを示す図である。
【図１４】第１実施例における割り当て処理部テーブルの例を示す図である。
【図１５】第１実施例における中継処理のフローチャートを示す図である。
【図１６】第２実施例におけるプロセッサの機能ブロックを示す図である。
【図１７】第２実施例における中継処理のフローチャートを示す図である。
【図１８】第３実施例におけるプロセッサの機能ブロックを示す図である。
【図１９】第３実施例における中継処理のフローチャートを示す図である。
【図２０】第４実施例におけるプロセッサの機能ブロックを示す図である。
【図２１】第４実施例における中継処理のフローチャートを示す図である。
【図２２】第５実施例におけるプロセッサの機能ブロックを示す図である。
【図２３】第５実施例における中継処理のフローチャートを示す図である。
【図２４】第６実施例におけるプロセッサの機能ブロックを示す図である。
【図２５】第６実施例における中継処理のフローチャートを示す図である。
【図２６】第７実施例におけるプロセッサの機能ブロックを示す図である。
【発明を実施するための形態】
【００１４】
＜第１実施例＞
本実施例では、受信するパケットのフロー毎に、パケットの処理コストの値を予め求めておき、中継装置にて処理中のパケットの処理コストの値を合計して処理コスト合計値を算出し、処理コスト合計値に基づいて複数の処理部へのパケットの割り当てが行われる。
【００１５】
図３は、本実施例において開示される中継装置を含むネットワークの構成例を示す図である。ここでは複数の情報処理装置１０ａ、１０ｂ、１０ｃ、１０ｄが、中継装置１００ａ、１００ｂ、１００ｃ、１００ｄを含むネットワーク５００を介してパケットの送受信を行う例を示す。情報処理装置１０ａ、１０ｂ、１０ｃ、１０ｄの各々は、例えばＰｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ（ＰＣ）やサーバ等である。本明細書の以下の部分においては、中継装置１００ａの構成及び機能について説明するが、ここで説明される構成や機能は、他の中継装置１００ｂ、１００ｃ、１００ｄにも適用可能である。中継装置１００ａは例えば情報処理装置１０ａから受信したパケットに対してレイヤー２スイッチとして機能し、中継装置１００ａに接続される情報処理装置１０ｂへパケットを転送することができる。また中継装置１００ａは例えば情報処理装置１０ａから受信したパケットに対してレイヤー３スイッチ又はルータとして機能し、ネットワーク５００を介して情報処理装置１０ｃや情報処理装置１０ｄへパケットを転送することができる。また中継装置１００ａはネットワーク５００を介して例えば情報処理装置１０ｃから受信したパケットに対してレイヤー２スイッチとして機能し、情報処理装置１０ａや情報処理装置１０ｂへパケットを転送することができる。
【００１６】
図４は、中継装置１００ａのハードウェア構成の一例を示す図である。中継装置１００ａは、プロセッサ１１０、Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ（ＮＩＣ）１６０、揮発性メモリ１７０、不揮発性メモリ１８０、バス１９０を有する。ＮＩＣ１６０は、情報処理装置１０ａや情報処理装置１０ｂ又はネットワーク５００からパケットを受信する。またＮＩＣ１６０は、パケットを情報処理装置１０ａや情報処理装置１０ｂ又はネットワーク５００に含まれる他の中継装置１００ｂ等に転送する。プロセッサ１１０は、ＮＩＣ１６０にて受信されたパケットについて、ヘッダ情報の一部について削除、付加又は修正等の処理を行い、パケットの転送先の決定等を行う。また本実施例においては、プロセッサ１１０が後述する負荷分散部１２０として機能してもよい。プロセッサ１１０は、ＣＰＵ、Ｍｉｃｒｏ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ（ＭＣＵ）、Ｍｉｃｒｏ−Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＭＰＵ）、Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ（ＤＳＰ）、ＦＰＧＡ等の電子回路部品である。
【００１７】
揮発性メモリ１７０は、プロセッサ１１０が所定の処理を行う際に用いるデータや、処理を行った結果を格納する。また揮発性メモリ１７０には、プロセッサ１１０によって実行されるコンピュータプログラムが不揮発性メモリ１８０からロードされる。揮発性メモリ１７０は、Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＤＲＡＭ）、Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＳＲＡＭ）等の電子回路部品である。
【００１８】
不揮発性メモリ１８０は、プロセッサ１１０によって実行されるコンピュータプログラム等を格納する。不揮発性メモリ１８０は、Ｍａｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（マスクＲＯＭ）や、Ｐｒｏｇｒａｍａｂｌｅ  ＲＯＭ（ＰＲＯＭ）、又はフラッシュメモリ等の電子回路部品である。
【００１９】
バス１９０はプロセッサ１１０、ＮＩＣ１６０、揮発性メモリ１７０、不揮発性メモリ１８０等を接続し、互いのデータ送信の経路として機能する。
【００２０】
図５は、中継装置１００ａの機能ブロックを示す図である。中継装置１００ａは、パケット送受信部１５０、負荷分散部１２０、第１処理部１４０ａ、第２処理部１４０ｂ、第３処理部１４０ｃとして機能する。本実施例では、複数の処理部として３つの処理部１４０ａ、１４０ｂ、１４０ｃを図示したが、２つ以上であれば何個の処理部が用意されてもよい。本明細書の以降の部分において、第１処理部１４０ａ、第２処理部１４０ｂ、第３処理部１４０ｃの何れかを特定する意図が無い場合は、単に「処理部１４０」と記載するものとする。また中継装置１００ａは、各処理部１４０によって実行される処理の内容を規定する処理内容テーブル１４５を保持する。パケット送受信部１５０はパケットの受信又はパケットの送信を行う。負荷分散部１２０は、受信した複数のパケットを複数の処理部１４０の何れに処理させるかを判定する。また負荷分散部１２０は、同一の送信元から同一の宛先へ送信される複数のパケットや、同一のＶｉｒｔｕａｌ  Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ（ＶＬＡＮ  ＩＤ）を有する複数のパケット等の、同一のフローに属する複数のパケットについて、中継装置１００ａにおける中継処理においてパケットの順序が入れ替わらないよう、処理部１４０の選択を行う。また負荷分散部１２０は、複数の処理部１４０の処理負荷等に基づき、処理部１４０を選択してパケットの割り当てを行う。
【００２１】
複数の処理部１４０の各々は、負荷分散部１２０から割り当てられたパケットについて、当該パケットが所定の宛先へ送信されるよう、処理内容テーブル１４５の内容に従い、適宜ヘッダの書き換え等を行う処理を実行する。処理内容テーブル１４５の詳細については図７乃至９を用いて後述する。処理部１４０による処理が終了したパケットは、パケット送受信部１５０を介して送出される。
【００２２】
図５において、負荷分散部１２０は例えばプロセッサ１１０によって実現され、パケット送受信部１５０は例えばＮＩＣ１６０によって実現される。処理内容テーブル１４５は例えばプロセッサ１１０内に保持される。またプロセッサ１１０が複数のコアを有するＣＰＵである場合、複数の処理部１４０の各々が複数のコアの各々で実現されてもよく、またプロセッサ１１０が複数のＣＰＵチップを含む場合、複数の処理部１４０の各々が複数のＣＰＵチップの各々で実現されてもよい。複数の処理部１４０の各々は、複数のパケットを個々に処理することができる処理単位である。
【００２３】
図６は、中継装置１００ａが送受信するパケットのデータ構成の一例を示す図である。パケットは、データ本体部分であるペイロードに加え、例えばＵｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ（ＵＤＰ）ヘッダ、宛先ＩＰアドレス、送信元ＩＰアドレス、ＶＬＡＮ  ＩＤ、宛先ＭＡＣアドレス、送信元ＭＡＣアドレス等の情報を含むヘッダを有する。宛先ＩＰアドレス、送信元ＩＰアドレスはＩＰヘッダに含まれる情報である。また図には示されていないが、ＩＰヘッダには他の情報、例えばＴｙｐｅ  Ｏｆ  Ｓｅｒｖｉｃｅ（ＴＯＳ）等も含まれる。ここに示すヘッダ構成はあくまでも本実施例に適用可能なヘッダ構成の一例である。
【００２４】
図７は、図５にて図示した処理内容テーブル１４５の内容例を示す図である。処理内容テーブル１４５は、各処理部１４０がパケットを割り当てられた際に実行する処理の内容を規定するものである。ここでは、処理内容がパケットのヘッダに含まれるＶＬＡＮ  ＩＤに対応して定められる例について説明する。まず処理部１４０は、パケットを受信した後、パケットのヘッダからＶＬＡＮ  ＩＤを抽出し、抽出されたＶＬＡＮ  ＩＤに基づいて処理内容テーブル１４５を参照する。図７に示すように、例えばＶＬＡＮ  ＩＤが「１０」であるパケットであれば、処理部１４０にて実行される処理には、「宛先ＭＡＣアドレスの抽出」、「フォワーディングテーブルの参照」及び「出力ポートへのパケットの転送」が含まれることが規定されている。またＶＬＡＮ  ＩＤが「２０」であるパケットであれば、処理部１４０にて実行される処理には、「ユーザ／ドメインの検索」、「宛先ＭＡＣアドレス、送信元ＭＡＣアドレス及びＶＬＡＮ  ＩＤの削除」、「送信元ＩＰアドレス及びＵＤＰポート情報の抽出」、「アクセスリストに基づくフィルタリング」、「ＩＰプロトコルの抽出」、「コントロールフレームのフィルタリング」、「宛先ＩＰアドレスの抽出」、「フォワーディングテーブルの参照」、「ＭＰＬＳのトンネルラベル及びユーザラベルの付加、宛先ＭＡＣアドレス及び送信元ＭＡＣアドレスの付加」及び「出力ポートへのパケットの転送」が含まれることが規定されている。
【００２５】
図７に示された処理内容テーブル１４５の内容に基づいて、処理部１４０が実行する処理フローを説明する。図８は、処理部１４０に割り当てられたパケットのヘッダに含まれるＶＬＡＮ  ＩＤの値が「１０」であった場合の、処理部１４０の処理フローチャートである。処理部１４０による処理は処理１０００により開始され、処理１００１において処理部１４０は、パケットのヘッダからＶＬＡＮ  ＩＤを抽出する。次に処理１００２において処理部１４０は、抽出されたＶＬＡＮ  ＩＤに基づいて処理内容テーブル１４５を参照する。この処理１００２において処理部１４０は、自身が行うべき処理の内容を認識し、以下の処理を実行する。処理１００３において処理部１４０は、パケットのヘッダから宛先ＭＡＣアドレスを抽出する。次に処理１００４において処理部１４０は、宛先ＭＡＣアドレスと出力ポートとの対応関係を示したフォワーディングテーブルを参照する。そして処理１００５において処理部１４０は、フォワーディングテーブルにて宛先ＭＡＣアドレスに対応付けられた所定のポートにパケットを送信し、処理１００６において処理が終了する。
【００２６】
図８において、各処理に対して括弧書きにて示された数値は、各処理の負荷の重さを表す値、すなわち処理コストの値の一例として、処理部１４０が各処理を実行するのに要するクロック数を示したものである。図８に示される各数値は一例であって、処理内容を実行する方法が相違すれば、処理コストの値も異なる値となる場合もある。図８の例は、ＶＬＡＮ  ＩＤの抽出処理に１０クロック分の時間、処理内容テーブル１４５の参照処理に１０クロック分の時間、宛先ＭＡＣアドレスの抽出処理に１０クロック分の時間、フォワーディングテーブルの参照処理に１０クロック分の時間、出力ポートへのパケットの転送処理に５クロック分の時間を要することを意味する。よって、処理１００１から処理１００５までの全ての処理に要する時間の合計は、４５クロック分の時間となる。本実施例においては、処理コストの合計値、すなわち全ての処理に要する時間が、処理部１４０の処理負荷の評価に用いられる。
【００２７】
図９は、処理部１４０に割り当てられたパケットのヘッダ情報に含まれるＶＬＡＮ  ＩＤの値が「２０」であった場合の、処理部１４０の処理フローチャートである。処理部１４０による処理は処理１１００により開始され、処理１１０１において処理部１４０は、パケットのヘッダからＶＬＡＮ  ＩＤを抽出する。次に処理１１０２において処理部１４０は、抽出されたＶＬＡＮ  ＩＤに基づいて処理内容テーブル１４５を参照する。この処理１１０２において処理部１４０は、自身が行うべき処理内容を認識し、以下の処理を実行する。処理１１０３において処理部１４０は、抽出されたＶＬＡＮ  ＩＤに基づき、当該ＶＬＡＮ  ＩＤが割り当てられたユーザ又はドメインを特定する。次に処理１１０４において処理部１４０は、ヘッダから宛先ＭＡＣアドレス、送信元ＭＡＣアドレス及びＶＬＡＮ  ＩＤを削除する。次に処理１１０５において処理部１４０は、ヘッダから送信元ＩＰアドレス及びＵＤＰのポート情報を抽出する。次に処理１１０６において処理部１４０は、アクセスリストに基づくフィルタリング処理を行う。次に処理１１０７において処理部１４０は、ヘッダからＩＰプロトコルを抽出し、パケットがデータ系のパケットか制御系のパケットか等の判断を行う。次に処理１１０８において処理部１４０は、コントロールフレームのフィルタリング処理を実行する。ここでは、制御系のパケットであれば次のノードへの転送は行わず、パケットは終端される。次に処理１１０９において処理部１４０は、ヘッダから宛先ＩＰアドレスを抽出する。次に処理１１１０において処理部１４０は、宛先ＩＰアドレスとネクストホップのＭＡＣアドレスの対応関係を規定するフォワーディングテーブルを参照する。次に処理１１１１において処理部１４０は、ＭＰＬＳのトンネルラベル及びユーザラベルと、送信元ＭＡＣアドレス及び宛先ＭＡＣアドレスをパケットのヘッダに付加する。次に、処理１１１２において処理部１４０は、パケットを出力ポートへ転送し、処理１１１３において処理が終了する。
【００２８】
図９においても図８と同様に、各処理に対して括弧書きにて示された数値は、各処理の処理コストの値の一例として、処理部が各処理を実行するのに要するクロック数を示したものである。図９の例では、ＶＬＡＮ  ＩＤの抽出処理に１０クロック分の時間、処理内容テーブル１４５の参照処理に１０クロック分の時間、ユーザ又はドメインの特定処理に１０クロック分の時間、宛先ＭＡＣアドレス、送信元ＭＡＣアドレス及びＶＬＡＮ  ＩＤの削除処理に１５クロック分の時間、送信元ＩＰアドレス及びＵＤＰのポート情報の抽出処理に２５クロック分の時間、アクセスリストに基づくフィルタリング処理に２０クロック分の時間、ＩＰプロトコルの抽出処理に１０クロック分の時間、コントロールフレームのフィルタリング処理に１０クロック分の時間、宛先ＩＰアドレスの抽出処理に１０クロック分の時間、フォワーディングテーブルの参照処理に２０クロック分の時間、ＭＰＬＳのトンネルラベル及びユーザラベルと送信元ＭＡＣアドレス及び宛先ＭＡＣアドレスの付加処理に２０クロック分の時間、パケットの出力ポートへの転送処理に５クロック分の時間を要する。よって、処理１１０１から処理１１１２までの全ての処理に要する時間の合計は、１６５クロック分の時間となる。
【００２９】
このように、パケットのＶＬＡＮ  ＩＤによって異なる処理が実行されるため、ＶＬＡＮ  ＩＤによってパケットの処理コストが相違する。そこで、本実施例ではＶＬＡＮ  ＩＤ毎にパケットの処理コストを予め求めておき、パケットを受信した際にパケットのヘッダに書き込まれたＶＬＡＮ  ＩＤを参照することにより、そのパケットの処理コストを見積もることができる。例えばプロセッサ１１０がＣＰＵであって、コンピュータプログラムを実行することにより処理部１４０として機能する場合は、コンピュータプログラムのソースコードを解析することによりパケットの処理に必要な処理コストを見積もることができる。またプロセッサ１１０がＡＳＩＣ等の専用回路である場合は、各処理を行う回路を構成するＦｌｉｐ  Ｆｌｏｐ（ＦＦ）回路の段数等に基づいて、処理コストを見積もることができる。もしくはプロセッサ１１０が実際に処理に要する時間を実測することにより処理コストを取得することも可能である。
【００３０】
ここまで、受信したパケットの処理コストを取得する方法について説明した。次に、取得されたパケットの処理コストを用いて、複数のパケットの分散処理を中継装置１００ａが実行する方法について説明する。
【００３１】
図１０は、ＶＬＡＮ  ＩＤと処理コストの対応関係を規定するテーブルの一例である。図８及び図９で説明したようにパケットの処理コストが予め取得され、ＶＬＡＮ  ＩＤと処理コストの対応関係を示す処理コストテーブル１３０がプロセッサ１１０に保持される。図１０の例では、ＶＬＡＮ  ＩＤが「１０」であるパケットの処理コストは「４５」であること、ＶＬＡＮ  ＩＤが「２０」であるパケットの処理コストは「１６５」であること、ＶＬＡＮ  ＩＤが「３０」であるパケットの処理コストは「９０」であること、ＶＬＡＮ  ＩＤが「４０」であるパケットの処理コストは「１１５」であることが示されている。
【００３２】
図１１は、ＶＬＡＮ  ＩＤとフローＩＤの対応関係を規定するテーブルの一例である。ＶＬＡＮ  ＩＤの各々に対してフローＩＤが割り当てられ、ＶＬＡＮ  ＩＤとフローＩＤの対応関係を規定するフローＩＤテーブル１３１がプロセッサ１１０に保持される。図１１の例は、ＶＬＡＮ  ＩＤが「１０」であるパケットのフローＩＤが「１」と規定され、ＶＬＡＮ  ＩＤが「２０」であるパケットのフローＩＤが「２」と規定され、ＶＬＡＮ  ＩＤが「３０」であるパケットのフローＩＤが「３」と規定され、ＶＬＡＮ  ＩＤが「４０」であるパケットのフローＩＤが「４」と規定されることを示している。
【００３３】
図１２は、処理中パケットの処理コストのカウント方法を示す図である。ここでは、フローＩＤが「１」の複数のパケットとフローＩＤが「３」の複数のパケットが、第１処理部１４０ａに割り当てられる例について説明する。図中において、「＃ｘ−ｙ」と記載されるパケットは、フローＩＤが「ｘ」である複数のパケットのうち「ｙ」番目のパケットであることを意味する。また図中において「処理待ちパケット」とは、負荷分散部１２０から第１処理部１４０ａに割り当てられる前の状態のパケットを意味し、「処理中パケット」とは、第１処理部１４０ａでの処理がなされている状態のパケットを意味し、「処理済みパケット」とは、第１処理部１４０ａでの処理が終了した状態のパケットを意味する。また図中において、「フロー別処理コスト合計値」とは、第１処理部１４０ａにて処理中のパケットの処理コストの合計値を、フロー毎（ここではフローＩＤが「１」のフローと、フローＩＤが「３」のフロー別）に算出した値を意味し、「処理部別処理コスト合計値」とは、各処理部１４０（ここでは第１処理部１４０ａ）にて処理中の全てのパケットの処理コストの合計値を意味する。尚、図１０に示したように、フローＩＤが「１」のパケットの処理コストは「４５」であり、フローＩＤが「３」のパケットの処理コストは「９０」であるものとする。
【００３４】
まず時刻ｔ１においてパケット＃１−１、パケット＃３−１、パケット＃１−２が処理待ちパケットの状態にある。この時点では、第１処理部１４０ａは何れのパケットに対しても未だ処理を行っていない状態である。そのため、フローＩＤが「１」のフロー別処理コスト合計値は「０」であり、フローＩＤが「３」のフロー別処理コスト合計値も「０」であり、第１処理部１００ａの処理部別処理コスト合計値も「０」である。
【００３５】
次に、時刻ｔ２において、パケット＃１−１が第１処理部１４０ａに割り当てられる。そしてパケット＃１−１は、第１処理部１４０ａにて処理中の状態にあると判断され、パケット＃１−１の処理コスト「４５」が、フローＩＤが「１」のフロー別処理コスト合計値に加算される。この時点では、フローＩＤが「３」のフロー別処理コスト合計値は「０」であり、処理部別処理コスト合計値は「４５」となる。
【００３６】
次に時刻ｔ３において、パケット＃３−１が第１処理部１４０ａに割り当てられる。この時点でパケット＃３−１は、第１処理部１４０ａにて処理中の状態にあると判断され、パケット＃３−１の処理コスト「９０」が、フローＩＤが「３」のフロー別処理コスト合計値に加算される。この時点では、パケット＃１−１は未だ第１処理部１４０ａにおける処理が終了していないため、フローＩＤが「１」の処理別処理コスト合計値は「４５」のままであり、処理部別処理コスト合計値は「１３５」となる。
【００３７】
次に時刻ｔ４において、パケット＃１−２が第１処理部１４０ａに割り当てられる。そしてパケット＃１−２の処理コスト「４５」が、フローＩＤが「１」のフロー別処理コスト合計値に加算される。この時点では、パケット＃１−１は未だ第１処理部１４０ａにおける処理が終了していないため、フローＩＤが「１」のフロー別処理コスト合計値は「９０」となる。またこの時点ではパケット＃３−１も未だ第１処理部１４０ａにおける処理が終了していないため、フローＩＤが「３」のフロー別処理コスト合計値は「９０」のままであり、処理部別処理コスト合計値は「１８０」となる。
【００３８】
次に時刻ｔ５において、パケット＃１−３が第１処理部１４０ａに割り当てられる。そしてパケット＃１−３の処理コスト「４５」が、フローＩＤが「１」のフロー別処理コスト合計値に加算される。一方、パケット＃１−１については第１処理部１４０ａにおける処理が終了したため、パケット＃１−１の処理コスト「４５」が、フローＩＤが「１」のフロー別処理コスト合計値から減算され、結果として、フローＩＤが「１」のフロー別処理コスト合計値は「９０」となる。尚、この時点ではパケット＃３−１についての処理は終了していないため、フローＩＤが「３」のフロー別処理コスト合計値は「９０」のままであり、処理部別処理コスト合計値は「１８０」となる。
【００３９】
このように、パケットが第１処理部１４０ａへ割り当てられると、そのパケットの処理コストの値が加算され、第１処理部１４０ａがパケットの処理を終了すると、そのパケットの処理コストの値が減算される。この手法により、特定の処理部１４０において実際に処理がなされているパケットの処理コストの合計値を求めることができる。またフローＩＤ毎に当該特定の処理部１４０におけるパケットの処理コストの合計値を求めることができる。
【００４０】
そして時刻ｔ８において、フローＩＤが「１」のパケットであって第１処理部１４０ａで処理されているパケットが存在しない状態となり、フローＩＤが「１」のフロー別処理コスト合計値が「０」となる。よって、このタイミングでフローＩＤが「１」の後続パケットであるパケット＃１−４の割り当て先を、第１処理部１４０ａとは異なる他の処理部１４０へ変更すれば、パケットの処理順序が入れ替わることを防止することができる。ここで、パケットの割り当て先としての処理部１４０を選択する際に、処理部１４０毎に算出した処理部別処理コストの合計値が用いられる。図１２においては第１処理部１４０ａの処理部別処理コスト合計値のみを示したが、同様な手法により第２処理部１４０ｂや第３処理部１４０ｃについても、処理部別処理コスト合計値を求めることができる。そして時刻ｔ８の時点における各処理部１４０の処理部別処理コスト合計値を相互に比較し、処理部別処理コスト合計値が最も少ない処理部１４０がパケット＃１−４の割り当て先として選定される。
【００４１】
図１３は、プロセッサ１１０の機能ブロック図である。プロセッサ１１０がＣＰＵである場合は、プロセッサ１１０は揮発性メモリ１７０にロードされたコンピュータプログラムを実行することにより、入出力部１２１、負荷分散用ヘッダ付加部１２２、判定部１２３、処理コスト抽出部１２４、割り当て／回収部１２５、フロー別処理コストカウンタ１２６、処理部別処理コストカウンタ１２７、最小負荷処理部特定部１２８、負荷分散用ヘッダ除去部１２９として機能する。これらの機能ブロックは、図５にて示した負荷分散部１２０に含まれる。またプロセッサ１１０は図１０に示した処理コストテーブル１３０、図１１に示したフローＩＤテーブル１３１を保持する。またプロセッサ１１０は、図５にて示した第１処理部１４０ａ、第２処理部１４０ｂ、第３処理部１４０ｃとして機能し、処理内容テーブル１４５を保持する。またプロセッサ１１０は、後述の図１３に示された割り当て処理部テーブル１３２を保持する。
【００４２】
尚、本明細書の以降の部分において、説明の簡易化のため、適宜「受信パケット」及び「先行パケット」の文言を使用する。「受信パケット」とは、負荷分散部１２０及び処理部１４０による処理内容の説明の対象となるパケットを意味し、「先行パケット」とは、受信パケットよりも先に中継装置に入力され、既に処理部１４０による処理が終了したパケット又は処理部１４０による処理中のパケットを意味する。
【００４３】
入出力部１２１は、他のノードから入力されたパケットを受信する。また入出力部１２１は、処理部１４０での所定の処理が終了したパケットを、ＮＩＣ１６０を介して他のノードへ送信する。負荷分散用ヘッダ付加部１２２は、入出力部１２１から受け取った受信パケットのＶＬＡＮ  ＩＤを抽出し、処理コストテーブル１３０及びフローＩＤテーブル１３１を参照することにより、受信パケットのフローＩＤ及び処理コストを特定する。また負荷分散用ヘッダ付加部１２２は、受信パケットに負荷分散用ヘッダを付加し、負荷分散用ヘッダにフローＩＤと処理コストを書き込む。判定部１２３は、パケットの負荷分散用ヘッダに記載されたフローＩＤを抽出する。そして、フロー別処理コストカウンタ１２６のカウント値、処理部別処理コストカウンタ１２７のカウント値、及び割り当て処理部テーブル１３２の内容に基づき、受信パケットの割り当て先を判定する。フロー別処理コストカウンタ１２６は、フロー別処理コスト合計値をカウントするカウンタである。受信パケットのフローＩＤと同一のフローＩＤを有する先行パケットに関するフロー別処理コストカウンタ１２６の値が「０」以外の値であれば、判定部１２３は割り当て処理部テーブル１３２を参照する。割り当て処理部テーブル１３２は先行パケットのフローＩＤと、先行パケットが割り当てられた処理部１４０を特定する情報を格納するものである。図１４は、割り当て処理部テーブル１３２の内容例を示す図である。図１４では、フローＩＤが「１」の先行パケット及びフローＩＤが「３」の先行パケットは第１処理部１４０ａに割り当てられ、フローＩＤが「２」の先行パケットは第２処理部１４０ｂに割り当てられ、フローＩＤが「４」の先行パケットは第３処理部１４０ｃに割り当てられていることを示している。
【００４４】
図１３の説明に戻る。判定部１２３は、受信パケットのフローＩＤと同一のフローＩＤのフロー別処理コスト合計値が「０」以外の値であれば割り当て処理部テーブル１３２を参照し、先行パケットが割り当てられた処理部１４０と同じ処理部１４０に、受信パケットを割り当てる。一方、判定部１２３は、受信パケットのフローＩＤと同一のフローＩＤのフロー別処理コスト合計値が「０」であれば、最小負荷処理部特定部１２８によって特定される処理部１４０に、受信したパケットを割り当てる。最小負荷処理部特定部１２８は、処理部別処理コストカウンタ１２７のカウント値に基づき、最小の処理部別処理コスト合計値を有する処理部１４０を選択して判定部１２３へ通知する。処理部別処理コストカウンタ１２７は、フロー別処理コストカウンタ１２６のカウント値に基づき、処理部１４０毎の処理部別処理コスト合計値をカウントする。
【００４５】
判定部１２３は、上記の判断手法によって選定された処理部１４０を特定するための情報として、処理部ＩＤを受信パケットの負荷分散用ヘッダに書込む。処理コスト抽出部１２４は、判定部１２３から受信パケットを受け取り、負荷分散用ヘッダからフローＩＤと処理コストと処理部ＩＤを抽出してフロー別処理コストカウンタ１２６へ通知する。フロー別処理コストカウンタ１２６は、処理コスト抽出部１２４から通知を受けた処理コストをフローＩＤ毎に加算し、フロー別処理コスト合計値を算出する。また処理部別処理コストカウンタ１２７は、フロー別処理コストカウンタ１２６から処理コストの通知を受け、処理コストを処理部毎に加算し、処理部別処理コスト合計値を算出する。最小負荷処理部特定部１２８は処理部別処理コストカウンタ１２７のカウント結果に基づき、最小の処理コスト合計値を有する処理部１４０を特定する。尚、処理部別処理コストカウンタ１２７は、処理コスト抽出部１２４から直接処理コストの通知を受けてもよい。
【００４６】
処理コスト抽出部１２４は受信パケットを割り当て／回収部１２５へ引き渡す。割り当て／回収部１２５は、受信パケットを、負荷分散用ヘッダに書込まれた処理部ＩＤによって特定される処理部１４０へ割り当てる。また割り当て／回収部１２５は、各処理部１４０から処理済の受信パケットを受け取り、処理コスト抽出部１２４へ送信する。処理コスト抽出部１２４は、受信パケットの負荷分散用ヘッダからフローＩＤと処理コストと処理部ＩＤを抽出してフロー別処理コストカウンタ１２６へ通知する。フロー別処理コストカウンタ１２６は、処理コスト抽出部１２４から通知を受けた処理コストをフローＩＤ毎に減算する。また処理部別処理コストカウンタ１２７は、処理コストを処理部毎に減算し、処理部別処理コスト合計値を算出する。
【００４７】
また、処理コスト抽出部１２４は、割り当て／回収部１２５から受け取った受信パケットを負荷分散用ヘッダ除去部１２９へ送信する。負荷分散用ヘッダ除去部１２９は、受信パケットから負荷分散用ヘッダを削除し、入出力部１２１へ送信する。入出力部１２１は受信パケットをパケット送受信部１５０へ送信する。
【００４８】
図１５は、プロセッサ１１０によって実行される処理のフローチャートを示す図である。プロセッサ１１０による処理のフローは処理１２００により開始され、処理１２０３において入出力部１２１が、パケットを受信する。処理１２０６において負荷分散用ヘッダ付加部１２２が、処理コストテーブル１３０とフローＩＤテーブル１３１を参照し、受信パケットのヘッダに書き込まれたＶＬＡＮ  ＩＤに基づきフローＩＤ及び処理コストを取得する。処理１２０９において負荷分散用ヘッダ付加部１２２は、フローＩＤと処理コストを含む負荷分散用ヘッダを受信パケットに付加する。処理１２１２において判定部１２３は、フロー別処理コストカウンタ１２６のカウント値に基づき、受信パケットのフローＩＤと同一のフローＩＤを有する先行パケットについてのフロー別処理コスト合計値が「０」であるか否かを判定する。
【００４９】
処理１２１２においてフロー別処理コスト合計値が「０」でないと判定された場合は、処理１２１８へ進み、フロー別処理コスト合計値が「０」であると判定された場合は、処理１２２１へ進む。処理１２１８において判定部１２３は、割り当て処理部テーブル１３２を参照し、受信パケットと同一のフローＩＤを有する先行パケットが処理されている処理部１４０を、受信パケットの割り当て先として選択する。この際、判定部１２３は負荷分散用ヘッダに、選択された処理部１４０を特定する情報として処理部ＩＤを書き込む。処理１２２１において判定部１２３が、最小負荷処理部特定部１２８からの通知内容に基づき、最小の処理部別処理コスト合計値を有する処理部１４０を、受信パケットの割り当て先として選択し、選択された処理部１４０の処理部ＩＤを負荷分散用ヘッダに書込む。
【００５０】
処理１２２３において処理コスト抽出部１２４が、受信パケットの負荷分散用ヘッダから処理コストとフローＩＤと処理部ＩＤを抽出し、フロー別処理コストカウンタ１２６へ通知する。処理１２２４においてフロー別処理コストカウンタ１２６は、通知を受けた処理コストを加算することにより、フロー別処理コスト合計値を更新する。また処理１２２４において処理部別処理コストカウンタ１２７は、フロー別処理コストカウンタ１２６又は処理コスト抽出部１２４から通知された処理コストを加算することにより、処理部別処理コスト合計値を更新する。処理１２２７において割り当て／回収部１２５が、受信パケットを選択された処理部１４０へ送信する。処理１２３０において、受信パケットを割り当てられた処理部１４０が、処理内容テーブル１４５の内容に基づきパケットの処理を実行する。処理１２３２において処理コスト抽出部１２４が、処理が終了した受信パケットを処理部１４０から割り当て／回収部１２５を介して受け取る。また処理１２３２において処理コスト抽出部１２４は、受信パケットの負荷分散用ヘッダから処理コストとフローＩＤと処理部ＩＤを抽出し、フロー別処理コストカウンタ１２６へ通知する。処理１２３３においてフロー別処理コストカウンタ１２６は、通知を受けた処理コストを減算することにより、フロー別処理コスト合計値を更新する。また処理１２３３において処理部別処理コストカウンタ１２７は、フロー別処理コストカウンタ１２６又は処理コスト抽出部１２４から通知された処理コストを減算することにより、処理部別処理コスト合計値を更新する。
【００５１】
処理１２３６において負荷分散用ヘッダ除去部１２９が、フローＩＤと処理コストと処理部ＩＤを含む負荷分散用ヘッダをパケットから除去する。そして処理１２３９において入出力部１２１が、パケットを出力して処理１２４２にて処理が終了する。
【００５２】
このように第１実施例では、フロー毎に予めパケットの処理コストを求めておき、受信パッケージのフローＩＤを特定することにより、受信パッケージの処理コストを見積もることができる。そして処理部毎に、受信パッケージが割り当てられると処理コストを加算し、受信パッケージの処理が終了すると処理コストを減算することによって処理部別処理コスト合計値が算出される。処理部毎の処理部別処理コスト合計値を相互に比較することにより、最小の処理部別処理コスト合計値を有する処理部１４０に受信パッケージを割り当てることが可能となる。
【００５３】
第１実施例においては、同一のＶＬＡＮ  ＩＤを有する複数のパケットが同一のフローに属すると識別される方法について説明した。他にも、例えば宛先ノードと送信元ノードの組み合わせが同一である複数のパケットが同一のフローに属すると識別されてもよい。この場合は、例えば宛先ＩＰアドレスと送信元ＩＰアドレスの組み合わせによってフローが識別されてもよい。
【００５４】
また、第１実施例において、プロセッサ１１０が複数のＣＰＵコアを有するマルチコアＣＰＵチップである場合は、複数のＣＰＵコアの各々を複数の処理部１４０の各々として機能させてもよい。またプロセッサ１１０が個別に形成された複数のＣＰＵチップを含む場合は、複数のＣＰＵチップの各々を複数の処理部１４０の各々として機能させてもよい。
【００５５】
また、第１実施例においては、フロー別処理コスト合計値が「０」となった場合に、処理部別処理コスト合計値が最小の処理部１４０が選択される例について説明したが、必ずしも処理部別処理コスト合計値が最小の処理部１４０が選択されなくてもよい。例えば、現在割り当て先として指定されている処理部１４０の処理部別処理コスト合計値よりも小さい処理部別処理コスト合計値を有する処理部１４０の何れかが、新たな割り当て先として選択されてもよい。また現在割り当て先として指定されている処理部１４０の処理部別処理コスト合計値よりも所定量以上小さい処理部別処理コスト合計値を有する処理部１４０の何れかが、新たな割り当て先として選択されてもよい。
【００５６】
＜第２実施例＞
第１実施例では、負荷分散部１２０が、処理の終了したパケットを処理部１４０から受け取った際にフロー別処理コスト合計値及び処理部別処理コスト合計値を減算する方法について説明した。第２実施例では、負荷分散部１２０が処理部１４０から処理済みのパケットを受け取らない場合であっても、フロー別処理コストカウンタ１２６や処理部別処理コストカウンタ１２７が適切に合計値を更新する方法について開示する。
【００５７】
処理コスト抽出部１２４が処理部１４０からパケットを受け取らない場合とは、処理部１４０が当該パケットを終端させる、又は廃棄する場合である。例えば、中継装置１００ａが受信したパケットが制御系のパケットであって中継装置１００ａを宛先とする場合などである。このような場合、パケットは処理部１４０で終端又は廃棄され、負荷分散部１２０へ処理済みのパケットが返信されない。第２実施例では、パケットが処理部１４０で終端又は廃棄される場合でも、フロー別処理コスト合計値及び処理部別処理コスト合計値の値から処理コストを減算させる方法を説明する。
【００５８】
図１６は、第２実施例におけるプロセッサ１１０の機能ブロックを示す図である。第２実施例では、第１処理部１４０ａ、第２処理部１４０ｂ、第３処理部１４０ｃのそれぞれに第１ダミーパケット生成部１４１ａ、第２ダミーパケット生成部１４１ｂ、第３ダミーパケット生成部１４１ｃを設ける。本実施例において、第１ダミーパケット生成部１４１ａ、第２ダミーパケット生成部１４１ｂ、第３ダミーパケット生成部１４１ｃの何れかを特定する意図が無い場合は、単に「ダミーパケット生成部１４１」と記載するものとする。
【００５９】
ダミーパケット生成部１４１は、割り当てられたパケットが中継装置１００ａにて終端又は廃棄されるパケットである場合は、ダミーパケットを生成する。ダミーパケットのヘッダには、割り当てられたパケットのヘッダに含まれる、少なくとも処理コスト、フローＩＤ、処理部ＩＤをコピーした内容が書込まれる。またダミーパケットのヘッダには、そのパケットがダミーパケットである旨を示すフラグも書込まれる。そして処理部１４０はダミーパケットを、割り当て／回収部１２５を介して処理コスト抽出部１２４へ送信する。処理コスト抽出部１２４は、ダミーパケットを受け取ると、ダミーパケットのヘッダから処理コスト、フローＩＤ、処理部ＩＤを抽出し、フロー別処理コストカウンタ１２６や処理部別処理コストカウンタ１２７へ通知する。フロー別処理コストカウンタ１２６や処理部別処理コストカウンタ１２７は、通知された処理コストを減算することにより、フロー別処理コスト合計値及び処理部別処理コスト合計値を更新する。また処理コスト抽出部１２４は、受け取ったパケットがダミーパケットであることをパケットのヘッダのフラグにより認識し、ダミーパケットを廃棄し、負荷分散用ヘッダ除去部１２９へは送信しない。
【００６０】
これにより、パケットが中継装置１００で終端又は廃棄されるパケットであった場合も、適切にフロー別処理コスト合計値及び処理部別処理コスト合計値を更新することができる。
【００６１】
図１７は第２実施例におけるプロセッサ１１０による処理のフローチャートを示す図である。第２実施例におけるフローチャートは、第１実施例の図１５にて説明したフローチャートと、処理１２００から処理１２３０までは同一であるため、ここでは処理１２３０以降の処理について説明する。処理１２３０の後、処理１３０３において処理部１４０が、処理したパケットが終端又は廃棄されるパケットであるか否かを判定する。処理１３０３において、パケットが終端又は廃棄されるパケットでないと判定された場合は、処理１２３２へ移行する。一方、処理１３０３においてパケットが終端又は廃棄されるパケットであると判定された場合は処理１３０６へ移行する。処理１３０６においてダミーパケット生成部１４１が、ダミーパケットを生成する。処理１３０９において処理コスト抽出部１２４が、ダミーパケットのヘッダから処理コストＩＤ、フローＩＤ及び処理部ＩＤを抽出してフロー別処理コストカウンタ１２６や処理部別処理コストカウンタ１２７へ通知する。処理１３１２においてフロー別処理コストカウンタ１２６及び処理部別処理コストカウンタ１２７がそれぞれ、処理コストを減算することにより、フロー別処理コスト合計値と処理部別処理コスト合計値を更新する。処理１３１５において処理コスト抽出部１２４が、ダミーパケットを廃棄して、処理１３１８にて処理が終了する。
【００６２】
このように第２実施例では、受信したパケットが終端又は廃棄されるパケットである場合も、フロー別処理コスト合計値及び処理部別処理コスト合計値を更新することができる。
【００６３】
＜第３実施例＞
第２実施例では、処理部１４０がダミーパケットを生成することにより、パケットが終端又は廃棄されたことを、負荷分散部１２０が認識するものである。第３実施例では、負荷分散部１２０がパケットを処理部１４０に送信した後、一定期間が経過しても処理部１４０からパケットの返信が無い場合に、負荷分散部１２０は、パケットが終端又は廃棄されたと判断する。そして、フロー別処理コスト合計値及び処理部別処理コスト合計値が更新される。
【００６４】
図１８は、第３実施例におけるプロセッサ１１０の機能ブロックを示す図である。第１実施例の図１３にて説明した機能ブロックと同一の機能ブロックについては同一の参照符号を付し、説明を省略する。プロセッサ１１０がＣＰＵである場合は、プロセッサ１１０が揮発性メモリ１７０にロードされたコンピュータプログラムを実行することにより、図１８に示す各機能ブロックが実現される。プロセッサ１１０は、図１３に開示された機能に加え、処理時間測定部１３３として機能する。また第３実施例においては負荷分散用ヘッダ付加部１２２が、パケットを個別に認識するためのパケットＩＤを負荷分散用ヘッダに書込む。更に、処理コスト抽出部１２４はパケットを、割り当て／回収部１２５を介して処理部１４０へ送信する際に、処理コスト、フローＩＤ、処理部ＩＤに加えて、パケットＩＤを負荷分散用ヘッダから抽出し、処理時間測定部１３３へ通知する。処理時間測定部１３３は、パケットが処理部１４０に送信された時刻を処理開始時刻として記録し、時間の経過を測定する。そして、所定の時間が経過しても当該パケットが処理部１４０から回収されない場合は、当該パケットが処理部１４０にて終端又は廃棄されたものと判断し、当該パケットの処理コストを減算するよう、フロー別処理コストカウンタ１２６や処理部別処理コストカウンタ１２７に通知する。これにより、パケットが処理部１４０で終端又は廃棄された場合であって、処理部１４０がパケットを終端又は廃棄したことを負荷分散部１２０に通知しない場合であっても、フロー別処理コスト合計値及び処理部別処理コスト合計値を更新することができる。
【００６５】
図１９は、第３実施例におけるプロセッサ１１０による処理のフローチャートを示す図である。プロセッサ１１０による処理は、第１実施例の図１５にて説明したフローチャートと、処理１２００から処理１２２７までは同一であるため、ここでは処理１２２７以降の処理について説明する。処理１２２７の後、処理１４０３において処理時間測定部１３３が、フローＩＤ、処理コスト、処理部ＩＤ、パケットＩＤに加え、パケットの送信時刻を保持する。処理１４０６において処理時間測定部１３３が、パケットの送信時刻から所定時間以内に、処理部１４０から処理済みのパケットを回収したか否かを判定する。処理１４０６において、所定時間以内にパケットが回収されたと判定された場合は処理１２３２へ移行する。また処理１４０６において、所定時間以内にパケットが回収されなかったと判定された場合は、処理１４０９へ移行する。処理１４０９においてフロー別処理コストカウンタ１２６は、処理コストを減算することにより、フロー別処理コスト合計値を更新する。また処理１４０９において処理部別処理コストカウンタ１２７は、処理コストを減算することにより、処理部別処理コスト合計値を更新する。そして処理１４１２において処理が終了する。尚、第３実施例においては処理１２０９において負荷分散用ヘッダ付加部１２２は、フローＩＤと処理コストに加え、パケットＩＤを負荷分散用ヘッダに書き込む。
【００６６】
＜第４実施例＞
第４実施例では、あるフローＩＤを有する複数のパケットの受信頻度が一定の値以上である場合には、割り当て先である処理部１４０を固定とし、フロー別処理コスト合計値が「０」になった場合であっても、割り当て先の処理部１４０を変更しない。これは、処理部１４０のキャッシュ効果を利用するものである。すなわち、処理部１４０は処理を行う際、繰り返し使用するデータをキャッシュメモリに格納することで、データへのアクセス速度を向上させることができる。同一のフローＩＤに属する複数のパケットの処理においては、キャッシュメモリに格納されたデータの利用回数が増加すると考えられる。仮に同一フローＩＤを有する複数のパケットを処理する処理部１４０が頻繁に変更されると、キャッシュメモリに格納されたデータの利用効率が低下する。そのため、同一フローＩＤを有する複数のパケットの受信頻度が一定の値以上である場合は、キャッシュメモリの利用の効率性を考慮し、割り当て先の処理部１４０を変更しないこととする。
【００６７】
図２０は第４実施例におけるプロセッサ１１０の機能ブロックを示す図である。第１実施例の図１３にて説明した機能ブロックと同一の機能ブロックについては同一の参照符号を付し、説明を省略する。プロセッサ１１０がＣＰＵである場合は、プロセッサ１１０が揮発性メモリ１７０にロードされたコンピュータプログラムを実行することにより、図２０に示す各機能ブロックが実現される。プロセッサ１１０は、図１３に開示された機能に加え、パケット受信頻度測定部１３４として機能する。尚、各処理部１４０はキャッシュメモリを有するものとする。パケット受信頻度測定部１３４は、負荷分散用ヘッダ付加部１２２にて負荷分散用ヘッダが付された複数のパケットについて、フローＩＤ毎にパケットの受信頻度を測定する。そして判定部１２３は、パケット受信頻度測定部１３４で測定されたパケットの受信頻度が所定値以上となった場合は、フロー別処理コスト合計値が「０」となっても、受信パケットの送信先として先行パケットの割り当て先処理部１４０と同一の処理部１４０を選択する。これにより、各処理部１４０におけるキャッシュメモリの利用効率を向上させることができる。
【００６８】
図２１は第４実施例におけるプロセッサ１１０による処理のフローチャートを示す図である。第１実施例の図１５と同一の処理については同一の参照符号を付し、説明を省略する。処理１２０９の後、処理１２１０においてパケット受信頻度測定部１３４が、パケットの受信頻度を測定する。この測定はフロー毎に行われる。処理１２１１において判定部１２３が、パケット受信頻度測定部１３４にて測定された受信頻度が所定値以上となっているか否かを判定する。処理１２１１において、受信頻度が所定値以上となっていないと判定された場合は１２１２へ進む。一方、処理１２１１において、受信頻度が所定値以上となっていると判定された場合は１２１８へ進み、割り当て処理部テーブル１３２に基づいて処理部１４０が選択される。
【００６９】
＜第５実施例＞
ネットワーク内を送信される複数のパケットのパケット長は、必ずしも同一ではない。例えば電話等の音声通信におけるパケットのパケット長と、Ｆｉｌｅ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（ＦＴＰ）等のファイル転送におけるパケットのパケット長とを比較すると、音声通信におけるパケットのパケット長がファイル転送におけるパケットのパケット長よりも短い場合がある。
【００７０】
第５実施例では、あるフローＩＤを有する複数のパケットのうち、パケット長が一定値以下の短パケットの占める割合が所定値以下である場合には、割り当て先である処理部１４０を固定とし、フロー別処理コスト合計値が「０」になった場合であっても、割り当て先の処理部１４０は変更されない。逆に短パケットの占める割合が所定値より大きい場合には、フロー別処理コスト合計値が「０」になった場合に処理部１４０が変更される。パケット長が短い場合は、処理部１４０は頻繁にパケットの受信、ＶＬＡＮ  ＩＤの解読、処理内容テーブル１４５の参照、処理済みパケットの送信等、処理内容テーブル１４５に規定された処理以外の処理の比率が増加し、処理部１４０の処理負荷が増加する。そのため、複数の処理部１４０による負荷分散を行う必要性が高まる。そのため、短パケットの占める割合が所定値以下となったか否かに基づいて、処理部１４０の変更を行うか否かが判断される。
【００７１】
図２２は第５実施例におけるプロセッサ１１０の機能ブロックを示す図である。第１実施例の図１３にて説明した機能ブロックと同一の機能ブロックについては同一の参照符号を付し、説明を省略する。プロセッサ１１０がＣＰＵである場合は、プロセッサ１１０が揮発性メモリ１７０にロードされたコンピュータプログラムを実行することにより、図２２に示す各機能ブロックが実現される。プロセッサ１１０は、図１３に開示された機能に加え、パケット長測定部１３５として機能する。パケット長測定部１３５は、負荷分散用ヘッダ付加部１２２にて負荷分散用ヘッダが付された複数のパケットについて、フロー毎にパケットのパケット長を測定する。そして判定部１２３は、パケット長測定部１３５で測定されたパケット長に基づき、パケット長が一定値以下の短パケットの割合が所定値以下の場合は、当該フローＩＤのフロー別処理コスト合計値が「０」となっても、先行パケットの割り当て先処理部１４０と同一の処理部１４０を選択する。逆に判定部１２３は、パケット長測定部１３５で測定されたパケット長に基づき、短パケットの割合が所定値よりも大きい場合に、当該フローＩＤのフロー別処理コスト合計値が「０」となったタイミングで割り当て先となる処理部１４０を変更する。これにより、適切な負荷分散を行うことができる。
【００７２】
図２３は第５実施例におけるプロセッサ１１０による処理のフローチャートである。第１実施例の図１５と同一の処理については同一の参照符号を付し、説明を省略する。処理１２０９の後、処理１２１３においてパケット長測定部１３５が、パケットのパケット長を測定する。この測定は、フロー毎に行われる。処理１２１４において判定部１２３が、パケット長測定部１３５にて測定されたパケット長に基づき、短パケット率が所定値以下となっているか否かを判定する。処理１２１４において、短パケット率が所定値以下となっていないと判定された場合は処理１２１２へ進む。一方、処理１２１４において、短パケット率が所定値以下となっていると判定された場合は処理１２１８へ進み、割り当て処理部テーブル１３２に基づいて処理部１４０が選択される。
【００７３】
第５実施例において、短パケットであるか否かの判定基準の例として、例えばパケット長の範囲が６４Ｂｙｔｅ以上１５００Ｂｙｔｅ以下と規格により定められている場合は、例えば２５６Ｂｙｔｅ以下のパケットを短パケットと判断する例が挙げられる。
【００７４】
＜第６実施例＞
第６実施例では、割り当て先となる処理部１４０を変更するタイミングが、その時点で処理部１４０によって処理されているパケットの個数をカウントすることによって決定される。例えばあるフローＩＤを有するパケットがある処理部１４０へ送信された場合にカウント値を１つインクリメントし、処理が終了したパケットが処理部１４０から回収された場合にカウント値を１つディクリメントするカウンタを設ける。そしてこのカウンタ値が「０」となった場合に、割り当て先となる処理部１４０を変更することが可能であると判断される。処理部別処理コスト合計値は、他の実施例と同様に測定され、新たな割り当て先となる処理部１４０が選定される際に利用される。
【００７５】
図２４は第６実施例におけるプロセッサ１１０の機能ブロックを示す図である。第１実施例の図１３にて説明した機能ブロックと同一の機能ブロックについては同一の参照符号を付し、説明を省略する。プロセッサ１１０がＣＰＵである場合は、プロセッサ１１０が揮発性メモリ１７０にロードされたコンピュータプログラムを実行することにより、図２４に示す各機能ブロックが実現される。プロセッサ１１０は、図１３に開示された機能に加え、フロー別パケット数カウンタ１３６として機能する。尚、第６実施例において、フロー別処理コストカウンタ１２６は不要である。フロー別パケット数カウンタ１３６は、処理コスト抽出部１２４が割り当て／回収部１２５を介して処理部１４０へパケットを送信する度に、フロー毎にカウント値をインクリメントする。またフロー別パケット数カウンタ１３６は、処理コスト抽出部１２４が割り当て／回収部１２５を介して処理部１４０からパケットを回収する度に、フロー毎にカウント値をディクリメントする。そしてフロー別パケット数カウンタ１３６のカウント値が「０」となった場合に、判定部１２３は割り当て先となる処理部１４０を変更することが可能と判断する。
【００７６】
図２５は第６実施例におけるプロセッサ１１０による処理のフローチャートを示す図である。第１実施例の図１５と同一の処理については同一の参照符号を付し、説明を省略する。処理１２０９の後、処理１２１６において判定部１２３が、受信パケットと同一のフローＩＤを有する先行パケットであって、処理部１４０で処理がなされている最中のパケットの数が「０」であるか否かを判定する。処理１２１６の判定はフロー別パケット数カウンタ１３６のカウント値に基づいてなされる。処理１２１６においてパケットの数が「０」であると判定された場合は、処理１２２１へ移行し、パケットの数が「０」でないと判定された場合は、処理１２１８へ移行する。また処理１２２３の後、処理１２２５においてフロー別パケット数カウンタ１３６が、カウント値をインクリメントする。また処理１２３２の後、処理１２３４においてフロー別パケット数カウンタ１３６が、カウント値をディンクリメントする。
【００７７】
＜第７実施例＞
第７実施例では、複数の処理部１４０に代えて、中継装置１００ａに接続された複数のサーバを用いてパケットの処理が実行される。
【００７８】
図２６は、第７実施例における、プロセッサ１１０の機能ブロックと、プロセッサ１１０とスイッチ装置２００と第１サーバ３００ａ、第２サーバ３００ｂ、第３サーバ３００ｃの関係を示す図である。プロセッサ１１０と第１サーバ３００ａ、第２サーバ３００ｂ、第３サーバ３００ｃはスイッチ装置２００を介してデータの送受信を行う。スイッチ装置は例えばレイヤー２スイッチである。スイッチ装置２００を介したデータの送受信を行うために、プロセッサ１１０はＭＡＣアドレス付与部１３７としても機能し、第１サーバ３００ａ、第２サーバ３００ｂ、第３サーバ３００ｃはそれぞれ、第１ＭＡＣアドレス付与部３１０ａ、第２ＭＡＣアドレス付与部３１０ｂ、第３ＭＡＣアドレス付与部３１０ｃを有する。
【００７９】
このように、本発明は、マルチコアＣＰＵのコア間での負荷分散、複数のＣＰＵチップ間での負荷分散だけでなく、サーバ間での負荷分散にも適用することが可能である。
【００８０】
開示の実施例に基づき、更に以下の付記を開示する。
（付記１）
複数の処理単位と、
前記複数の処理単位に接続され、複数のパケットを前記複数の処理単位に送信し、前記処理単位が処理した前記複数のパケットを前記複数の処理単位から受信する負荷分散部と、
を有し、
前記複数の処理単位は、前記負荷分散部から送信された前記複数のパケットに対して、前記複数のパケットの各々に対して行われる処理の内容を特定する処理内容情報に基づいて処理を行い、
前記負荷分散部は、
前記処理内容情報で特定される前記処理の内容に応じて定められた、前記複数のパケットの各々の処理コストの値を示す処理コスト情報を保持する保持部を有し、
前記複数のパケットに含まれる各パケットを前記複数の処理単位の何れかの処理単位に送信する度に、前記保持部に保持された前記処理コスト情報に基づき、前記複数の処理単位の処理単位毎に、送信された各パケットの前記処理コストの値を加算し、前記複数のパケットに含まれる各パケットを前記複数の処理単位の何れかの処理単位から受信する度に、前記複数の処理単位の処理単位毎に、受信された各パケットの前記処理コストの値を減算することにより、前記複数の処理単位の処理単位毎に第１処理コスト合計値を算出し、
前記複数の処理単位の各々の前記第１処理コスト合計値を互いに比較することにより、第１パケットの送信先となる処理単位を、前記複数の処理単位から選択し、
選択された前記処理単位に前記第１パケットを送信する
ことを特徴とするデータ処理システム。
（付記２）
前記負荷分散部は、
同一のフローに属する複数のパケットであって、前記第１パケットを含む第１パケット列をネットワークから受信し、
前記第１パケット列に含まれる複数のパケットのうち、前記第１パケットよりも先に前記複数の処理単位に含まれる第１処理単位へ送信された１又は複数の第２パケットの全てについて、前記第１処理単位での前記処理が終了したか否かを判定し、
前記１又は複数の第２パケットの全てについて前記第１処理単位での前記処理が終了していないと判定された場合は、前記第１処理単位を、前記第１パケットの送信先となる処理単位として選定し、
前記複数の処理単位での前記処理が終了した前記第１パケット列を前記ネットワークに送出する
ことを特徴とする付記１に記載のデータ処理システム。
（付記３）
前記負荷分散部は、
前記１又は複数の第２パケットの全てについて前記第１処理単位での前記処理が終了していると判定された場合は、前記複数の処理単位のうち、前記第１処理単位の前記第１処理コスト合計値よりも小さい前記第１処理コスト合計値を有する第２処理単位を、前記第１パケットの送信先となる処理単位として選定し、
前記複数の処理単位での前記処理が終了した前記第１パケット列を前記ネットワークに送出する
ことを特徴とする付記２に記載のデータ処理システム。
（付記４）
前記保持部は、前記処理コストの値を前記フロー毎に保持し、
前記同一のフローに属する複数のパケットは、互いに同一の前記処理コストの値を有し、
前記同一のフローに属する複数のパケットは、互いに同一の送信元ノードから同一の宛先ノードへ送信されるか、もしくは互いに同一のＶｉｒｔｕａｌ  Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ内で送信されることを特徴とする付記２又は３に記載のデータ処理システム。
（付記５）
前記負荷分散部は、
前記複数のパケットに含まれる各パケットを前記複数の処理単位の何れかの処理単位に送信する度に、前記保持部に保持された前記処理コスト情報に基づき、前記フロー毎に、送信された各パケットの前記処理コストの値を順次加算し、前記複数のパケットに含まれる各パケットを前記複数の処理単位の何れかの処理単位から受信する度に、前記フロー毎に、受信された各パケットの前記処理コストの値を順次減算することにより、前記フロー毎に第２処理コスト合計値を算出し、
前記第１パケットと同一のフローについての前記第２処理コスト合計値が０である場合に、前記第１パケット列に含まれる前記１又は複数の第２パケットの全てについて前記第１処理単位での前記処理が終了していると判定する
ことを特徴とする付記２乃至４何れか一つに記載のデータ処理システム。
（付記６）
前記負荷分散部は、
前記第１パケットの第１ヘッダに基づき、前記第１パケットの前記フローを特定し、
前記保持部にアクセスすることにより、前記第１パケットの前記処理コストの値を取得し、
前記第１ヘッダに前記処理コストの値を追加する
ことを特徴とする付記２乃至５何れか一つに記載のデータ処理システム。
（付記７）
前記複数の処理単位は、
前記第１パケットを終端させ又は廃棄した場合は、前記第１パケットの前記処理コストの値が設定された第２ヘッダを有する第２パケットを生成し、
前記第２パケットを前記負荷分散部へ送信し、
前記負荷分散部は、
前記第２パケットを受信し、
前記第２パケットの前記第２ヘッダに設定された前記処理コストの値を、前記第１処理コスト合計値から減算する
ことを特徴とする付記１乃至６何れか一つに記載のデータ処理システム。
（付記８）
前記負荷分散部は、
前記第１パケットを前記第１処理単位へ送信した時刻を記録し、
前記時刻から所定期間以内に前記複数の処理単位から前記第１パケットを受信しない場合は、前記第１パケットの前記処理コストの値を前記第１処理コスト合計値から減算する
ことを特徴とする付記１乃至７何れか一つに記載のデータ処理システム。
（付記９）
前記負荷分散部は、
前記第１パケット列に含まれる前記複数のパケットの受信頻度を測定し、
前記受信頻度が第１の所定の値以上である場合は、前記第１処理単位を前記第１パケットの送信先として選択する
ことを特徴とする付記２乃至８何れか一つに記載のデータ処理システム。
（付記１０）
前記負荷分散部は、
前記第１パケット列に含まれる前記複数のパケットの平均パケット長を測定し、
前記平均パケット長が第２の所定の値以上である場合は、前記第１処理単位を前記第１パケットの送信先として選択する
ことを特徴とする付記２乃至８何れか一つに記載のデータ処理システム。
（付記１１）
前記処理コストは、前記複数のパケットの各々について、前記複数の処理単位が前記処理を行う際に要する前記処理単位の動作クロックのクロック数であることを特徴とする付記１乃至１０何れか一つに記載のデータ処理システム。
（付記１２）
複数のパケットの各々に対して行われる処理の内容を特定する処理内容情報に基づいて、前記複数のパケットの処理を行う複数の処理単位と、前記複数の処理単位に接続され、前記処理内容情報で特定される前記処理の内容に応じて定められた、前記複数のパケットの各々の処理コストの値を示す処理コスト情報を保持する保持部を有し、前記複数のパケットを前記複数の処理単位に送信し、前記複数の処理単位が処理した前記複数のパケットを前記複数の処理単位から受信する負荷分散部と、を有するデータ処理システムを用いたデータ処理方法であって、
前記複数のパケットに含まれる各パケットを前記負荷分散部から前記複数の処理単位の何れかの処理単位に送信し、
前記複数のパケットに含まれる各パケットが前記負荷分散部から前記複数の処理単位の何れかの処理単位に送信される度に、前記保持部に保持された前記処理コスト情報に基づき、前記複数の処理単位の処理単位毎に、送信された各パケットの前記処理コストの値を加算することにより、前記複数の処理単位の処理単位毎に第１処理コスト合計値を算出し、
前記複数のパケットに含まれる各パケットを前記複数の処理単位の何れかの処理単位から前記負荷分散部に送信し、
前記複数のパケットに含まれる各パケットが前記複数の処理単位の何れかの処理単位から前記負荷分散部へ送信される度に、前記複数の処理単位の処理単位毎に、受信された各パケットの前記処理コストの値を減算することにより、前記複数の処理単位の処理単位毎に前記第１処理コスト合計値を更新し、
前記複数の処理単位の各々の前記第１処理コスト合計値を互いに比較することにより、第１パケットの送信先となる処理単位を、前記複数の処理単位から選択し、
前記負荷分散部から選択された前記処理単位に前記第１パケットを送信する
ことを特徴とするデータ処理方法。
（付記１３）
同一のフローに属する複数のパケットであって、前記第１パケットを含む第１パケット列を、ネットワークから前記負荷分散部に入力し、
前記第１パケット列に含まれる複数のパケットのうち、前記第１パケットよりも先に前記複数の処理単位に含まれる第１処理単位へ送信された１又は複数の第２パケットの全てについて、前記第１処理単位での前記処理が終了したか否かを判定し、
前記１又は複数の第２パケットの全てについて前記第１処理単位での前記処理が終了していないと判定された場合は、前記第１処理単位を、前記第１パケットの送信先となる処理単位として選定し、
前記複数の処理単位での前記処理が終了した前記第１パケット列を前記ネットワークに送出する
ことを特徴とする付記１２に記載のデータ処理方法。
（付記１４）
前記１又は複数の第２パケットの全てについて前記第１処理単位での前記処理が終了していると判定された場合は、前記複数の処理単位のうち、前記第１処理単位の前記第１処理コスト合計値よりも小さい前記第１処理コスト合計値を有する第２処理単位を、前記第１パケットの送信先となる処理単位として選定することを特徴とする付記１３に記載のデータ処理方法。
（付記１５）
前記保持部は、前記処理コストの値を前記フロー毎に保持し、
前記同一のフローに属する複数のパケットは、互いに同一の前記処理コストの値を有し、
前記同一のフローに属する複数のパケットは、互いに同一の送信元ノードからと同一の宛先ノードへ送信されるか、もしくは互いに同一のＶｉｒｔｕａｌ  Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ内で送信されることを特徴とする付記１４に記載のデータ処理方法。
（付記１６）
前記複数のパケットに含まれる各パケットを前記複数の処理単位の何れかの処理単位に送信する度に、前記保持部に保持された前記処理コスト情報に基づき、前記フロー毎に、送信された各パケットの前記処理コストの値を順次加算することにより前記フロー毎に第２処理コスト合計値を算出し、
前記複数のパケットに含まれる各パケットを前記複数の処理単位の何れかの処理単位から受信する度に、前記フロー毎に、受信された各パケットの前記処理コストの値を順次減算することにより、前記フロー毎の前記第２処理コスト合計値を更新し、
前記第１パケットと同一のフローについての前記第２処理コスト合計値が０である場合に、前記第１パケット列に含まれる前記１又は複数の第２パケットの全てについて前記第１処理単位での前記処理が終了していると判定する
ことを特徴とする付記１３乃至１５何れか一つに記載のデータ処理方法。
（付記１７）
前記第１パケットの第１ヘッダに基づき、前記第１パケットの前記フローを特定し、
前記保持部にアクセスすることにより、前記第１パケットの前記処理コストの値を取得し、
前記第１ヘッダに前記処理コストの値を追加する
ことを特徴とする付記１２乃至１４何れか一つに記載のデータ処理方法。
（付記１８）
前記複数の処理単位が前記第１パケットを終端させ又は廃棄した場合は、前記第１パケットの前記処理コストの値が設定された第２ヘッダを有する第２パケットを生成し、
前記第２パケットを前記複数の処理単位から前記負荷分散部へ送信し、
前記第２パケットの前記第２ヘッダに設定された前記処理コストの値を、前記第１処理コスト合計値から減算する
ことを特徴とする付記１３乃至１７何れか一つに記載のデータ処理方法。
（付記１９）
前記第１パケットを前記第１処理単位へ送信した時刻を記録し、
前記時刻から所定期間以内に前記複数の処理単位から前記負荷分散部へ前記第１パケットが送信されない場合は、前記第１パケットの前記処理コストの値を前記第１処理コスト合計値から減算する
ことを特徴とする付記１３乃至１８何れか一つに記載のデータ処理方法。
（付記２０）
前記処理コストは、前記複数のパケットの各々について、前記複数の処理単位が前記処理を行う際に要する前記処理単位の動作クロックのクロック数であることを特徴とする付記１２乃至１９何れか一つに記載のデータ処理方法。
【符号の説明】
【００８１】
１  入力ユニット
２  スイッチ機構
３  出力ユニット
４  処理エレメント
５  プロセッサアレイモジュール
６  入力制御装置
８  マスクリセットライン
９  バックログ更新ライン
１０ａ、１０ｂ、１０ｃ、１０ｄ  情報処理装置
１００ａ、１００ｂ、１００ｃ、１００ｄ  中継装置
５００  ネットワーク
１１０  プロセッサ
１２０  負荷分散部
１２１  入出力部
１２２  負荷分散用ヘッダ付加部
１２３  判定部
１２４  処理コスト抽出部
１２５  割り当て／回収部
１２６  フロー別処理コストカウンタ
１２７  処理部別処理コストカウンタ
１２８  最小負荷処理部特定部
１２９  負荷分散用ヘッダ除去部
１３０  処理コストテーブル
１３１  フローＩＤテーブル
１３２  割り当て処理部テーブル
１３３  処理時間測定部
１３４  パケット受信頻度測定部
１３５  パケット長測定部
１３６  フロー別パケット数カウンタ
１３７  ＭＡＣアドレス付与部
１４０ａ  第１処理部
１４０ｂ  第２処理部
１４０ｃ  第３処理部
１４１ａ  第１ダミーパケット生成部
１４１ｂ  第２ダミーパケット生成部
１４１ｃ  第３ダミーパケット生成部
１４５  処理内容テーブル
１５０  パケット送受信部
１６０  ＮＩＣ
１７０  揮発性メモリ
１８０  不揮発性メモリ
１９０  バス
２００  スイッチ装置
３００ａ  第１サーバ
３００ｂ  第２サーバ
３００ｃ  第３サーバ
３１０ａ  第１ＭＡＣアドレス付与部
３１０ｂ  第２ＭＡＣアドレス付与部
３１０ｃ  第３ＭＡＣアドレス付与部
【図１】
2017011423.tif 000003
【図２】
2017011423.tif 000004
【図３】
2017011423.tif 000005
【図４】
2017011423.tif 000006
【図５】
2017011423.tif 000007
【図６】
2017011423.tif 000008
【図７】
2017011423.tif 000009
【図８】
2017011423.tif 000010
【図９】
2017011423.tif 000011
【図１０】
2017011423.tif 000012
【図１１】
2017011423.tif 000013
【図１２】
2017011423.tif 000014
【図１３】
2017011423.tif 000015
【図１４】
2017011423.tif 000016
【図１５】
2017011423.tif 000017
【図１６】
2017011423.tif 000018
【図１７】
2017011423.tif 000019
【図１８】
2017011423.tif 000020
【図１９】
2017011423.tif 000021
【図２０】
2017011423.tif 000022
【図２２】
2017011423.tif 000023
【図２４】
2017011423.tif 000024
【図２５】
2017011423.tif 000025
【図２６】
2017011423.tif 000026
【図２１】
2017011423.tif 000027
【図２３】
2017011423.tif 000028