(57)【特許請求の範囲】
【請求項１】
ネットワークに接続するノード装置であって、
複数のパケット処理部と、
スイッチを通じて前記複数のパケット処理部に接続し、各パケットとこれを処理可能なパケット処理部の情報とを対応づけるための対応付け情報を格納し、前記対応付け情報において第１のパケット処理部の情報に対応付けられたパケットを前記第１のパケット処理部に転送するインタフェース部と、
前記第１のパケット処理部が第１の閾値以上の負荷であると判定される場合に、前記対応付け情報において前記第１のパケット処理部で処理可能なパケットを第２のパケット処理部の情報にも対応付けるよう前記対応付け情報を更新する制御部と、を備え、
前記制御部は、未使用のパケット処理部が存在する場合、前記未使用のパケット処理部から前記第２のパケット処理部を選択し、未使用のパケット処理部が存在しない場合、負荷が第２の閾値以下である第２のプログラムが動作する複数のパケット処理部から前記第２のパケット処理部を選択し、
前記インタフェース部は、前記更新された対応付け情報において前記第２のパケット処理部の情報に対応付けられたパケットを前記第２のパケット処理部に転送し、
前記インタフェース部は、各パケットに含まれるべき識別子ごとに前記対応付け情報を備え、
前記インタフェース部は、第１の識別子を含むパケットを、前記第１の識別子に関する対応付け情報において対応付けられた前記第１のパケット処理部に転送し、
前記制御部は、前記第１の識別子を含むパケットを前記第２のパケット処理部の情報にも対応付けるよう前記第１の識別子に関する対応付け情報を更新し、
前記インタフェース部は、前記第１の識別子を含むパケットを前記第２のパケット処理部に転送し、
前記第１のパケット処理部は、前記第１の識別子を含むパケットを処理する第１のプログラムを備え、
前記制御部は、前記第１のパケット処理部が前記第１の閾値以上の負荷である場合に、前記第１のプログラムを前記第２のパケット処理部にロードし、
前記第２のパケット処理部は、前記第１の識別子を含むパケットを前記第１のプログラムによって処理し、
前記制御部は、
前記第１のプログラムを前記第２のパケット処理部にロードする場合に、前記第２のパケット処理部において前記第１のプログラムに対応するキューに対応させるプログラムの総数と、前記第２のパケット処理部において動作するプログラムに割り当てるメモリ量と、に基づいて、前記第２のパケット処理部から前記第２のプログラムを削除するか否かを決定し、
前記第２のパケット処理部から第２のプログラムを削除する場合に、前記第２のプログラムが処理する第２の識別子を含むパケットと前記第２のパケット処理部の情報との対応を、前記対応付け情報から削除することを特徴とするノード装置。
【請求項２】
前記制御部は、前記インタフェース部が有する前記対応付け情報と同じ対応付け情報を格納することを特徴とする請求項１に記載のノード装置。
【請求項３】
各パケット処理部は、その負荷の情報を前記インタフェース部に送り、
前記インタフェース部は、前記負荷の情報を格納する負荷テーブルを備えることを特徴とする請求項１に記載のノード装置。
【請求項４】
前記負荷の情報は、各パケット処理部の各キューに溜まったパケットの数であることを特徴とする請求項３に記載のノード装置。
【請求項５】
ネットワークに接続するノード装置と、前記ノード装置に対して少なくとも第１のプログラムを格納するよう指示する管理装置と、を備えたシステムであって、
前記ノード装置は、
複数のパケット処理部と、
スイッチを通じて前記複数のパケット処理部に接続し、各パケットとこれを処理可能なパケット処理部の情報とを対応づけるための対応付け情報を格納し、前記対応付け情報において第１のパケット処理部の情報に対応付けられたパケットを前記第１のプログラムによって処理するよう前記第１のパケット処理部に転送するインタフェース部と、
前記第１のパケット処理部が第１の閾値以上の負荷であると判定される場合に、前記対応付け情報において前記第１のパケット処理部で処理可能なパケットを第２のパケット処理部の情報にも対応付けるよう前記対応付け情報を更新する制御部と、を備え、
前記制御部は、未使用のパケット処理部が存在する場合、前記未使用のパケット処理部から前記第２のパケット処理部を選択し、未使用のパケット処理部が存在しない場合、負荷が第２の閾値以下である第２のプログラムが動作する複数のパケット処理部から前記第２のパケット処理部を選択し、
前記制御部は、前記第１のプログラムを前記第２のパケット処理部にロードし、
前記インタフェース部は、前記更新された対応付け情報において前記第２のパケット処理部の情報に対応付けられたパケットを前記第２のパケット処理部に転送し、
前記インタフェース部は、各パケットに含まれるべき識別子ごとに前記対応付け情報を備え、
前記インタフェース部は、第１の識別子を含むパケットを、前記第１の識別子に関する対応付け情報において対応付けられた前記第１のパケット処理部に転送し、
前記制御部は、前記第１の識別子を含むパケットを前記第２のパケット処理部の情報にも対応付けるよう前記第１の識別子に関する対応付け情報を更新し、
前記インタフェース部は、前記第１の識別子を含むパケットを前記第２のパケット処理部に転送し、
前記制御部は、前記第１のプログラムを前記第２のパケット処理部にロードする場合に、前記第２のパケット処理部において前記第１のプログラムに対応するキューに対応させるプログラムの総数と、前記第２のパケット処理部において動作するプログラムに割り当てるメモリ量と、に基づいて、前記第２のパケット処理部から前記第２のプログラムを削除するか否かを決定し、
前記第２のパケット処理部から第２のプログラムを削除する場合に、前記第２のプログラムが処理する第２の識別子を含むパケットと前記第２のパケット処理部の情報との対応を、前記対応付け情報から削除することを特徴とするシステム。
【請求項６】
前記制御部は、前記インタフェース部が有する前記対応付け情報と同じ対応付け情報を格納することを特徴とする請求項５に記載のシステム。
【請求項７】
各パケット処理部は、その負荷の情報を前記インタフェース部に送り、
前記インタフェース部は、前記負荷の情報を格納する負荷テーブルを備えることを特徴とする請求項５に記載のシステム。
【請求項８】
前記負荷の情報は、各パケット処理部の各キューに溜まったパケットの数であることを特徴とする請求項７に記載のシステム。
【請求項９】
ネットワークに接続するノード装置において実行されるパケット処理方法であって、
前記ノード装置は、
複数のパケット処理部と、
スイッチを通じて前記複数のパケット処理部に接続し、各パケットとこれを処理可能なパケット処理部の情報とを対応づけるための対応付け情報を格納するインタフェース部と、を有し、
前記パケット処理方法は、
前記対応付け情報において第１のパケット処理部の情報に対応付けられたパケットを前記第１のパケット処理部に転送するステップと、
前記第１のパケット処理部が第１の閾値以上の負荷であると判定される場合に、前記対応付け情報において前記第１のパケット処理部で処理可能なパケットを第２のパケット処理部の情報にも対応付けるよう前記対応付け情報を更新するステップと、
未使用のパケット処理部が存在する場合、前記未使用のパケット処理部から前記第２のパケット処理部を選択し、未使用のパケット処理部が存在しない場合、負荷が第２の閾値以下である第２のプログラムが動作する複数のパケット処理部から前記第２のパケット処理部を選択するステップと、
前記更新された対応付け情報において前記第２のパケット処理部の情報に対応付けられたパケットを前記第２のパケット処理部に転送するステップと、
を含み、
前記インタフェース部は、各パケットに含まれるべき識別子ごとに前記対応付け情報を備え、
前記パケット処理方法は、
第１の識別子を含むパケットを、前記第１の識別子に関する対応付け情報において対応付けられた前記第１のパケット処理部に転送するステップと、
前記第１の識別子を含むパケットを前記第２のパケット処理部の情報にも対応付けるよう前記第１の識別子に関する対応付け情報を更新するステップと、
前記インタフェース部は、前記第１の識別子を含むパケットを前記第２のパケット処理部に転送するステップと、
をさらに含み、
前記第１のパケット処理部は、前記第１の識別子を含むパケットを処理する第１のプログラムを備え、
前記パケット処理方法は、
前記第１のパケット処理部が前記第１の閾値以上の負荷である場合に、前記第１のプログラムを前記第２のパケット処理部にロードするステップと、
前記第２のパケット処理部は、前記第１の識別子を含むパケットを前記第１のプログラムによって処理するステップと、
前記第１のプログラムを前記第２のパケット処理部にロードする場合に、前記第２のパケット処理部において前記第１のプログラムに対応するキューに対応させるプログラムの総数と、前記第２のパケット処理部において動作するプログラムに割り当てるメモリ量と、に基づいて、前記第２のパケット処理部から前記第２のプログラムを削除するか否かを決定するステップと、
前記第２のパケット処理部から第２のプログラムを削除する場合に、前記第２のプログラムが処理する第２の識別子を含むパケットと前記第２のパケット処理部の情報との対応を、前記対応付け情報から削除するステップと、
をさらに含むことを特徴とするパケット処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ノード装置、システム、及び、パケット処理方法に関する。
【背景技術】
【０００２】
ネットワークにおけるパケット・ストリーム処理やデータ・ストリーム処理に関する一つの課題は、複数のユーザに対して複数の高度なサービスを提供し、さらにネットワークの運用中のそのサービスの負荷の変動に対処することである。
【０００３】
特許文献１は、ネットワーク・ノードを仮想化し、かつプログラマブルにすることによって、複数のユーザに対して相互干渉なく複数の高度なサービスを提供する方法を開示する。しかし、特許文献１において、サービスごとにプロセッサは固定的に割り当てられ、一つのサービスの負荷を複数のプロセッサに分散する負荷分散について記載されていない。
【０００４】
特許文献２は、ネットワーク・ノードの負荷が増加した場合に行われる負荷分散を開示する。ここで、負荷が増加した場合に負荷の軽い処理部でパケットが処理される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１９３３６６号公報
【特許文献２】特開２００４−１３５１０６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１の従来技術のようにサービスごとにプロセッサは固定的に割り当てられる場合、時刻によってはプロセッサごとの負荷に片寄りが大きくなってプロセッサを効率的に使用することができなくなる。また、サービスごとの負荷予測が困難な場合、特許文献２の技術の適用が困難になる。さらに、特許文献２の技術において、負荷分散しながら高速処理ができない可能性がある。
【０００７】
本発明の目的は、パケット処理の負荷が動的に変化し予測困難な状況においても、柔軟な負荷分散ができ、かつ、パケットの高速処理ができるノード装置を提供することである。
【課題を解決するための手段】
【０００８】
本発明の代表的な一例を示せば以下の通りである。すなわち、ネットワークに接続するノード装置であって、複数のパケット処理部と、スイッチを通じて前記複数のパケット処理部に接続し、各パケットとこれを処理可能なパケット処理部の情報とを対応づけるための対応付け情報を格納し、前記対応付け情報において第１のパケット処理部の情報に対応付けられたパケットを前記第１のパケット処理部に転送するインタフェース部と、前記第１のパケット処理部が閾値以上の高負荷であると判定される場合に、前記対応付け情報において前記第１のパケット処理部で処理可能なパケットを第２のパケット処理部の情報にも対応付けるよう前記対応付け情報を更新する制御部と、を備え、前記インタフェース部は、前記更新された対応付け情報において前記第２のパケット処理部の情報に対応付けられたパケットを前記第２のパケット処理部に転送することを特徴とするノード装置である。
【発明の効果】
【０００９】
本発明の実施形態によると、ノード装置は、パケットを処理するパケット処理部の数を動的に増減させることによって柔軟な負荷分散ができる。また、インタフェース部が、パケットとこれを処理可能なパケット処理部の情報とを対応づけるための対応付け情報を有しているため、高速にパケット処理部にパケットが振り分けられパケットの高速処理が可能になる。
【図面の簡単な説明】
【００１０】
【図１】ネットワークシステム全体の構成の一例を示す概略図である。
【図２】実施形態におけるパケットストリーム処理装置の構成を示すブロック図である。
【図３】パケット処理ボード（ＰＰＢ）の構成を示すブロック図である。
【図４】ネットワークインタフェース（ＮＩＦ）の構成を示すブロック図である。
【図５】ネットワーク処理ユニット（ＮＰＵ）の構成を示すブロック図である。
【図６】制御ボードにおけるプログラムロード処理の手順を示すフローチャートである。
【図７】制御ボードにおけるプログラムアンロード処理の手順を示すフローチャートである。
【図８】制御ボードにおける負荷監視処理の手順を示すフローチャートである。
【図９】インタフェースにおけるパケット転送処理の手順を示すフローチャートである。
【図１０】インタフェースにおけるパケット処理ボード選択処理の一例を示す図である。
【図１１】（ａ）ビットベクトルＱＡＶＡＩＬのビットとＰＰＢキューとの対応を例示するテーブルである。（ｂ）ビットベクトルＱＡＶＡＩＬのビットとパケット処理ボードとの対応を例示するテーブルである。
【発明を実施するための形態】
【００１１】
図１は、ネットワークシステム全体の構成の一例を概略的に示す。ネットワークシステムは、ネットワーク１０全体を管理するネットワーク管理装置１２（例えば、管理用コンピュータ（サーバ））と、ネットワークに含まれる複数のノード装置１４、１５、端末１６、１７等を備える。
【００１２】
図２は、ある一つのノード装置としてのパケットストリーム処理装置１０１の全体構成を示す。パケットストリーム処理装置１０１は、複数のパケット処理ボード（ＰＰＢ）１１１と、少なくとも一つのネットワークインタフェース（ＮＩＦ）１５１と、制御ボード（ＣＢ）１４１と、それらを接続するスイッチファブリック１８１（単にスイッチとも呼ぶ）とによって構成される。パケット処理ボード、ネットワークインタフェース、制御ボードは、それぞれパケット処理部、インタフェース部（又はインタフェース）、制御部と呼ばれてもよい。パケットストリーム処理装置１０１は、インタフェース１５１によって、ネットワークに接続する。なお、制御ボード１４１は、本実施形態においてパケットストリーム処理装置１０１に内蔵されているが、パケットストリーム処理装置１０１の外部のサーバ等の内部に存在してもよい。
【００１３】
パケットストリーム処理装置１０１は、Ｎ個のパケット処理ボード１１１およびＭ個のインタフェース１５１を備える。ただし、図２は、Ｎ個のパケット処理ボード１１１のうち３個のみを、パケット処理ボード１１１Ａ、１１１Ｂおよび１１１Ｃとして示し、Ｍ個のインタフェース１５１のうち３個のみを、インタフェース１５１Ａ、１５１Ｂおよび１５１Ｃとして示す。本実施形態において、パケット処理ボード１１１Ａ、１１１Ｂ、１１１Ｃのいずれにも共通する説明をする場合、これらを総称してパケット処理ボード１１１とも記載する。同様に、インタフェース１５１Ａ、１５１Ｂ、１５１Ｃのいずれにも共通する説明をする場合、これらを総称してインタフェース１５１とも記載する。
【００１４】
制御ボード１４１はコンピュータであり、ＣＰＵ（中央演算処理装置）１４２とメモリ１４３とを備える。メモリ１４３は、ＣＰＵ１４２が実行するプログラムであるプログラムローダ１４４と負荷テーブル１４５、プログラムテーブル１４６、プログラム格納部（プログラムストア）１４７を含む。プログラムローダ１４４は、プログラム格納部１４７に格納されたプログラムＰ０、Ｐ１、…、Ｐｍをパケット処理ボード１１１のメモリ（後述のＤＲＡＭ１１３）にロードする。プログラムローダ１４４は、プログラム格納部１４７に格納されたＵＲＬ（Uniform Resource Locator）に存在するプログラムＰ０、Ｐ１、…、Ｐｍをパケット処理ボード１１１のメモリ（ＤＲＡＭ１１３）にロードしてもよい。ＣＰＵ１４２を使用してプログラムローダ１４４が行う処理は、図６、図７、図８を参照して後で詳述される。
【００１５】
図３は、パケット処理ボード（ＰＰＢ）１１１（１１１Ａ、１１１Ｂ、１１１Ｃ）の構成を示す。例えば、パケット処理ボード１１１は、パケット処理として、パケットのヘッダに記録されたプロトコルの情報を変更するなどのヘッダ処理を行う。本実施形態において、図２の制御ボード１４１の負荷テーブル１４５は、各パケット処理ボード１１１に関する負荷の情報、即ち負荷の指標となる指標値を格納する。負荷は、キュー単位、パケット処理ボード単位、処理するプログラムの単位などで表現してよい。例えば、負荷の指標値は、キュー単位として、入力キュー１１４ａ、１１４ｂに蓄積されたパケット数、パケット処理ボード単位として、全入力キューに流入または全出力キューから流出するデータ量（バイト数またはパケット数）、プログラムの単位として、パケット処理ボード１１１のＣＰＵ時間（プログラム実行時間）で表されてよい。また、負荷の指標値は、これらのパラメータ（パケット数、データ量、ＣＰＵ時間）を組み合わせた値（特に、これらのパラメータに関して単調増加な関数値）で表されてよい。本実施形態において、負荷テーブルは、各パケット処理ボード１１１が有する各入力キュー１１４ａ、１１４ｂの負荷の情報を格納する。なお、以後、パケット処理ボード１１１が有する入力キューは、ＰＰＢキューと呼ばれることがある。
【００１６】
図３では、パケット処理ボード１１１のＰＰＢキュー（入力キュー）の負荷ＱＬＥＮは、ＰＰＢキューに溜まったパケット（パケットのヘッダ或いはディスクリプタでもよい）の数で表される。ＰＰＢキュー１１４ａの負荷（即ちパケット数）は４であり、ＰＰＢキュー１１４ｂの負荷（即ちパケット数）は２である。なお、前述のように負荷テーブル１４５が各パケット処理ボード１１１の単位で負荷を格納してもよい。
【００１７】
図２と図３において、ｉ番目のパケット処理ボード１１１のＰＰＢキューの識別子ＱＩＤは、Ｑｉ０、Ｑｉ１、・・・、Ｑｉ（Ｌ−１）（Ｌは、パケット処理ボード１１１内のＰＰＢキューの個数）で示されている。負荷テーブル１４５は、各パケット処理ボード１１１の各ＰＰＢキューの負荷をＰＰＢキューの識別子ＱＩＤに対応づけて記録する。なお、パケット処理ボード１１１のＰＰＢキューが一つしかない場合には、ＰＰＢキューの識別子ＱＩＤはパケット処理ボード１１１の識別子にもなる。
【００１８】
負荷テーブル１４５の内容は、各パケット処理ボード１１１からの定期または不定期の通知によって更新される。または、制御ボード１４１が、定期的に各パケット処理ボード１１１に負荷を問い合わせて負荷テーブル１４５の内容を更新してよい。即ち、各パケット処理ボード１１１が、自律的に、つまり、内蔵するタイマーが一定時間進んだ際に、または、各パケット処理ボード１１１における特定の処理が開始または終了する際に、各パケット処理ボード１１１の負荷の指標値を観測して制御ボード１４１に、その値を含むパケットを送信する。または、制御ボード１４１は、各パケット処理ボード１１１に問い合わせ情報を含むパケットを送信して、それに応答して各パケット処理ボード１１１が負荷の指標値を観測して制御ボード１４１にその値を含むパケットを送信する。
【００１９】
プログラム管理テーブル１４６は、パケットのヘッダの特定フィールドにふくまれる値である識別子ＳＩＤと、そのＳＩＤを有するパケットを処理するプログラムの識別子ＰＩＤと、そのプログラムに関連づけられたパケット処理ボード１１１のＰＰＢキューの情報（キューリストＱＡＶＡＩＬ）との組合せを格納する。識別子ＳＩＤは、パケットの種類を示す識別子であり、本実施形態では、パケットが受けるべきサービスを特定するサービス識別子である。図２のプログラム管理テーブル１４６において、０番目のキューリストをＱＡＶＡＩＬ０、１番目のキューリストをＱＡＶＡＩＬ１、ｋ番目のキューリストをＱＡＶＡＩＬｋとする。プログラム管理テーブル１４６は、パケット処理ボード１１１のＰＰＢキューの情報ではなく、パケット処理ボード１１１自体の情報を格納してよい。
【００２０】
本実施形態において、ＳＩＤは固定長であり、６１７、８００、７１５などの値を有するが、ＳＩＤは可変長としてもよい。また、本実施形態において、プログラム管理テーブル１４６は、ＳＩＤとしてパケット中のフィールドに含まれる値（識別子）と完全に一致するべき値を格納するが、代わりにこの値の一部をマスクして変換した値を格納してよい。プログラム管理テーブル１４６にマスクした値が格納される場合に、パケット中のフィールドに含まれる値は、マスクをかけてからプログラムテーブル１４６に含まれる識別子ＳＩＤと比較される。ＳＩＤとプログラムの識別子ＰＩＤとの関係は、ＳＩＤに対応する識別子を含むパケットをどのプログラムで処理すべきか示し、例えば、ネットワーク管理装置１２からのプログラムロード要求によって、パケットストリーム処理装置１０１（ノード装置）の初期設定において指定される。
【００２１】
プログラム管理テーブル１４６において、Ｐ０、Ｐ１、…、Ｐｍのうちある一つのプログラムに対応するＰＰＢキューの情報（キューリストＱＡＶＡＩＬ）は、そのプログラムの実行につながるＰＰＢキューを示すビットベクトルであり、そのプログラムが処理するパケットを保持するＰＰＢキューを示す。ここでは、ビットベクトルの要素（ビット）は、先頭から、所定の順のＰＰＢキューの識別子ＱＩＤ（例えばＱ００、Ｑ０１、・・・、Ｑｉ０、Ｑｉ１、・・・、Ｑ（Ｎ−１）０、Ｑ（Ｎ−１）１）に対応付けられている。ある識別子ＱＩＤのＰＰＢキューに送られたパケットが識別子ＰＩＤのプログラムで処理可能な場合に、その識別子ＰＩＤに対するビットベクトル（ＱＡＶＡＩＬ）において、当該ある識別子ＱＩＤに対応する要素（ビット）は１になり、そうでない場合に、この要素（ビット）は０になる。例えば、識別子Ｑ００とＱｉ１のＰＰＢキューだけがあるプログラムが処理するパケットを保持する場合に、このプログラムに対するビットベクトルＱＡＶＡＩＬのビットは、先頭（左）から、図１１（ａ）のようにＰＰＢキューに対応付けられる。制御ボード１４１とインタフェース１５１は、図１１（ａ）のようなテーブルをそれらのメモリ内に格納してもよい。また、ＰＰＢキューの識別子ＱＩＤは、上記に限られず、例えば、全パケット処理ボードを通じて、順番に整数値による識別子が付与されてもよい。
【００２２】
プログラムローダ１４４は、プログラムＰ０、Ｐ１、…、Ｐｍをパケット処理ボード１１１のメモリ（ＤＲＡＭ１１３）にロードする際に、プログラム管理テーブル１４６にパケット処理ボード１１１のＰＰＢキューの情報（ＱＡＶＡＩＬ）を登録する。
【００２３】
メモリ１４３のプログラム格納部１４７は、実行可能なプログラムＰ０、Ｐ１、…、Ｐｍを格納する。本実施形態において、プログラムＰ０、Ｐ１、…、Ｐｍは、メモリ１４３に含まれるが、半導体ディスクやハードディスク等の大容量記憶装置に格納してよい。
【００２４】
再び図３を参照すると、パケット処理ボード１１１はＳＲＡＭ（スタティックランダムアクセスメモリ）によって構成されたＰＰＢキュー（入力キュー）１１４ａ、１１４ｂと、入力されたパケットを処理可能なＮＰＵ１１２ａ、１１２ｂと、ＳＲＡＭによって構成された出力キュー１１５ａ、１１５ｂと、ＤＲＡＭ１１３とを備える。ここでＮＰＵは、ネットワーク処理ユニットすなわちＣＰＵの一種、またはＣＰＵコアである。スイッチファブリック１８１を経由してパケット処理ボード１１１に入力されたパケットのヘッダおよびディスクリプタ（又はポインタ）は、ＰＰＢキュー１１４ａ、１１４ｂに格納され、パケットの本体はＤＲＡＭ（ダイナミックランダムアクセスメモリ）１１３に格納される。なお、ＰＰＢキュー１１４ａ、１１４ｂにパケット全体が格納される構成も可能である。パケット処理ボード１１１は、動作中でも、サービスが必要とするプログラムをロードして実行できる。
【００２５】
ＰＰＢキュー１１４ａ、１１４ｂのパケット（詳細には、パケットのヘッダおよびディスクリプタ）は、パケット処理可能な状態（例えばアイドル状態）にあるＮＰＵ１１２ａ、１１２ｂのいずれかに転送されて処理される。各ＮＰＵ１１２ａ、１１２ｂは、ＰＰＢキュー１１４ａ、１１４ｂのパケットを処理するため、ＤＲＡＭ１１３に格納された対応するプログラムを実行する。ＰＰＢキュー１１４ａ、１１４ｂのパケットは、そのＰＰＢキューに予め対応付けられたＮＰＵ１１２ａ、１１２ｂに送られてもよい。
【００２６】
処理後のパケット（詳細には、パケットのヘッダおよびディスクリプタ）は、ＮＰＵ１１２ａ、１１２ｂに対応する出力キュー１１５ａ、１１５ｂに格納され、スイッチファブリック１８１を経由してインタフェース１５１Ａ、１５１Ｂまたは１５１Ｃに転送される。
【００２７】
図４は、インタフェース１５１（１５１Ａ、１５１Ｂ、１５１Ｃ）の構成を示す。インタフェース１５１は、パケットをパケットストリーム処理装置１０１（ノード装置）の外部から入力して、スイッチ・ファブリック経由で、パケット処理ボード１１１に出力する。また、インタフェース１５１は、スイッチ・ファブリック経由でパケット処理ボード１１１からパケットを入力してパケットストリーム処理装置１０１の外部に出力する。
【００２８】
インタフェース（ＮＩＦ）１５１は、その動作を制御するＡＳＩＣ等の演算処理回路１５６と、一つ又は複数のメモリとを有する。インタフェース１５１のメモリは、振り分けテーブル１５２と、入力キュー１５４ａ、１５４ｂと、キューリスト１５５ａ、１５５ｂと、負荷テーブル１５３とを格納する。なお、以後、インタフェース１５１の入力キュー１５４ａ、１５４ｂは、ＮＩＦキューと呼ばれることがある。キューリスト１５５ａ、１５５ｂは、利用可能なパケット処理ボード１１１の情報を示す。
【００２９】
インタフェース１５１は、振り分けテーブル１５２を参照して、識別子ＳＩＤ（つまりパケットの種別）に対応するＮＩＦキューを検索して、識別子ＳＩＤごとにＮＩＦキュー１５４ａ、１５４ｂに振り分ける。キューリストによって、ＮＩＦキュー１５４ａ、１５４ｂごとに、利用可能なパケット処理ボード１１１の情報が対応するため、識別子ＳＩＤごと又は振り分けられたパケットごとに利用可能なパケット処理ボード１１１の情報が対応付けられることになる。本実施形態においてＮＩＦキューの個数Ｋは２個であるが、ＮＩＦキューの個数Ｋは３個以上であってよい。また、ＮＩＦキューの個数Ｋを１個にして、キュー振り分けテーブル１５２をなくすこともできる。
【００３０】
さらに、インタフェース１５１は、振り分けられたパケットごとに対応付けられたパケット処理ボード１１１の情報に基づいて、パケットをそのパケット処理ボード１１１の資源に出力する。パケット処理ボード１１１の資源として、パケット処理ボード１１１自体、パケット処理ボード１１１内のＰＰＢキューや処理ユニットＮＰＵがある。例えば、パケット処理ボード１１１の情報は、ＰＰＢキューの識別子（ＩＤ）やアドレス、パケット処理ボード自体の識別子（ＩＤ）やアドレスやポート番号、処理ユニットＮＰＵの番号である。
【００３１】
振り分けテーブル１５２は、入力されたパケットのヘッダに含まれる識別子ＳＩＤとＮＩＦキュー１５４ａ、１５４ｂとの関係を示す。ＮＩＦキュー１５４ａ、１５４ｂは、インタフェース１５１に入力されたパケットをパケット処理ボード１１１に転送するまで保持する。キューリスト（又はキューテーブル）１５５ａ、１５５ｂは、パケットが利用可能なキューを表わす。キューリスト１５５ａ、１５５ｂは、インタフェース１５１に入力されたパケットと、このパケットが転送されてプログラムで処理できるパケット処理ボード１１１の情報を対応付けている対応付け情報である。ここでは、パケット処理ボード１１１の情報は、パケットを転送すれば、対応するプログラムで処理できるＰＰＢキュー（入力キュー）を示す情報である。
【００３２】
本実施形態において、負荷テーブル１５３は、パケット処理ボード１１１の負荷として、各ＰＰＢキューに含まれるパケット数などを、各ＰＰＢキューに対応付けて格納する。負荷テーブル１５３の内容は、制御ボード１４１の負荷テーブル１４５の内容に等しい。また、負荷テーブル１５３は、負荷テーブル１４５と同じく、パケット処理ボード１１１からの定期または不定期の負荷の通知によって更新される。各インタフェース１５１に、一定の時間間隔で各パケット処理ボード１１１から負荷が通知され、通知された負荷に基づいて負荷テーブル１５３に示される負荷が更新されてよい。
【００３３】
負荷テーブル１５３において示された負荷が低く、かつ、利用可能キューリスト（ビットベクトルＱＡＶＡＩＬ）１５５ａ、１５５ｂの対応するビットが１（すなわち利用可能）に設定されているＰＰＢキューが選択されて、ＮＩＦキュー１５４ａ、１５４ｂに保持されたパケットが、選択されたＰＰＢキューに転送される。例えば、ＮＩＦキューに対応する利用可能キューリストのビットベクトルが（０１・・・０）であれば、識別子Ｑ０１のＰＰＢキューにそのＮＩＦキューのパケットが転送される。
【００３４】
図５は、ネットワーク処理ユニット（ＮＰＵ）１１２の構成を示す。ネットワーク処理ユニット１１２（１１２ａ、１１２ｂ）は、１個の汎用処理コア（ＧＰＣ）３１１、複数のパケット処理コア（ＰＰＣ）３２１、Ｉ／Ｏ制御装置（Ｉ／Ｏ  Ｃｏｎｔｒｏｌｌｅｒ）３０２、ＳＲＡＭ３３１、メモリ制御装置（Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌｌｅｒ）３４１と、これらを接続するバス３５１とを備える。各パケット処理コア３２１には、整数値による識別子が付与されている。パケット処理コア３２１Ａ、３２１Ｂ、３２１Ｃのいずれにも共通する説明をする場合、これらを総称してパケット処理コア３２１とも記載する。
【００３５】
汎用処理コア３１１は、主に、ネットワーク処理ユニット１１２内の各部を制御する。複数のパケット処理コア３２１は、主にデータ処理を並列に実行する。Ｉ／Ｏ制御装置  ３０２は、ネットワーク処理ユニット１１２の外部すなわちパケット処理ボード１１１  上にあるスイッチ３６１に接続されている。
【００３６】
ＳＲＡＭ３３１は小容量だが遅延が小さい主記憶装置である。また、メモリ制御装置  ３４１は、ネットワーク処理ユニット１１２の外部でパケット処理ボード１１１上にあるＤＲＡＭ１１３に接続されている。ＤＲＡＭ１１３は、大容量だが遅延がやや大きい主記憶装置である。
【００３７】
スイッチ３６１は、スイッチファブリック１８１を経由してパケット処理ボード１１１に到達するパケットデータをＩ／Ｏ制御装置３０２に転送する。Ｉ／Ｏ制御装置３０２は、バス３５１を介してパケットデータをＳＲＡＭ３３１に転送したり、メモリ制御装置３４１を経由してＤＲＡＭ１１３に転送する。ＳＲＡＭ３３１やＤＲＡＭ１１３に格納されたパケットデータは、パケット処理コア３２１において処理されて再度ＳＲＡＭ３３１やＤＲＡＭ１１３に格納されるか、またはＩ／Ｏ制御装置３０２を介してネットワーク処理ユニット１１２の外部に出力される。
【００３８】
図６は、制御ボード１４１のプログラムローダ１４４が、ＣＰＵ１４２を介して行うプログラムロード処理の手順を示す。プログラムロード処理は、負荷監視を行うための負荷テーブル１４５において、いずれかのＰＰＢキューの負荷が閾値を超えた場合に実行される。また、ネットワーク管理装置１２が送ったプログラムロード要求を制御ボード１４１が受信した場合にも、プログラムロード処理は実行される。ネットワーク管理装置１２は、パケットストリーム処理装置１０１のパケット処理開始前の初期設定等のために、管理者または管理プログラムの指示によりプログラムロード要求を制御ボード１４１に送る。
【００３９】
ただし、プログラムローダ１４４がプログラムロード要求を受信した場合に、プログラムは、まだプログラム格納部１４７に格納されていない。このため、この場合、ＣＰＵ１４２は、プログラムロード要求によって指定されたプログラム、又は、プログラムロード要求に含まれるプログラムをプログラム格納部１４７に格納し、その後、図６の手順を実行する。なお、プログラムロード要求において、プログラムは、それが存在するＵＲＬによって指定されてよい。
【００４０】
プログラムロード処理において、プログラムがパケット処理ボード１１１にロードされる。さらに、ロードされたプログラムが処理するべきパケットがそのパケット処理ボード１１１に送られるように、各インタフェース１５１内において、各パケットとこれを処理可能なパケット処理部の情報とを対応づける対応付け情報（キューリストＱＡＶＡＩＬ）が更新される。これにより、インタフェースに到着したパケットは、それを処理可能なプログラムがロードされたパケット処理装置のうちの１台にこの対応付け情報にしたがって高速に転送され、ロードされたプログラムによって高速に処理される。各パケット処理装置１１１は負荷をプログラムローダ１４４に通知し、通知をうけたプログラムローダ１４４は、特定のパケット処理装置１１１の負荷が過大になる前に、負荷が大きいプログラムを他のパケット処理装置１１１にロードできる。
【００４１】
さらに、プログラムローダ１４４は、処理負荷が大きいプログラムが存在するが、未使用のパケット処理装置１１１がない場合に、複数のパケット処理装置１１１に配布されているが処理負荷が低いプログラムを選択できる。プログラムローダ１４４は、処理負荷が低いプログラムのサービス（サービス識別子ＳＩＤ）に関連する振り分けテーブル１５２の内容を削除するとともに、そのプログラムを前記の複数のパケット処理装置１１１のいずれかからアンロードして、かわりに処理負荷が大きいプログラムをロードできる。
【００４２】
プログラムロード処理が開始されると、まずステップＳ４１１において、プログラムローダ１４４は、負荷テーブル１４５を参照し、パケット処理が可能である未使用又は低負荷のパケット処理ボード１１１とこのボード内のいずれかのＰＰＢキュー１１４ａ、１１４ｂを選択する。なお、後述の負荷監視処理のステップＳ６１１の処理が実行された場合には、ステップＳ６１１で選択された低負荷のＰＰＢキュー１１４ａ、１１４ｂとそれを含むパケット処理ボード１１１が選択されてよい。例えば、負荷テーブル１４５の最少の負荷を有するパケット処理ボード１１１が低負荷と判定されてよい。
【００４３】
プログラムローダ１４４は、選択したＰＰＢキューをプログラム管理テーブル１４６に登録する。ＰＰＢキューのリスト（即ち、ビットベクトルＱＡＶＡＩＬ）に選択されたＰＰＢキューが示される、つまり、選択されたＰＰＢキューに対応するビットは１に設定される。なお、ロードされるプログラムが処理すべきパケットの識別子ＳＩＤ（サービス識別子など）に関する項目がプログラム管理テーブル１４６に存在しない場合に、その項目は生成され、プログラムの識別子ＰＩＤ（プログラム格納部１４７へのポインタまたはＵＲＬ）と、選択されたＰＰＢキューが登録される。また、ロードされるプログラムが処理すべきパケットの識別子ＳＩＤに関する項目が、プログラム管理テーブル１４６に存在する場合に、パケット処理ボード１１１のＰＰＢキューのリストに選択したＰＰＢキューが追加される、つまり、選択したＰＰＢキューに対応するビットは１に設定される。
【００４４】
次に、ステップＳ４１２において、プログラムローダ１４４は、選択したパケット処理ボード１１１のメモリ（ＤＲＡＭ１１３）にプログラムをロードして起動する。
【００４５】
さらに、ステップＳ４１３において、プログラムローダ１４４は、プログラムロード要求に含まれていた識別子ＳＩＤと各インタフェース１５１内のＮＩＦキューを対応づける。このため、プログラムローダ１４４は、各インタフェース１５１に指令を出して、識別子ＳＩＤとこれに割り当てたＮＩＦキュー番号の対を振り分けテーブル（ｑＤＴ）１５２に登録する。例えば、図４では、ｊ番目のインタフェースＮＩＦ＃ｊにおいて、ＳＩＤ６１７に対して番号１のＮＩＦキュー（ｑｊ１）が、ＳＩＤ８００に対して番号０のＮＩＦキュー（ｑｊ０）が割り当てられている。なお、ＰＰＢキューの負荷が閾値を超えた場合に実行されるプログラムロード処理においては、プログラムロード要求時に振り分けテーブル（ｑＤＴ）１５２は既に設定されているため、ステップＳ４１３は省略されてよい。
【００４６】
最後に、ステップＳ４１４において、プログラムローダ１４４の指令に応じて、各インタフェース１５１は、ステップＳ４１１で選択した全てのＰＰＢキューを、これに対応するビットを１に設定することによってＰＰＢキューのリストＱＡＶＡＩＬに登録する。
【００４７】
インタフェース１５１のメモリに記憶されたＰＰＢキューのリストＱＡＶＡＩＬの内容は、制御ボード１４１のメモリに記憶されたＰＰＢキューのリストＱＡＶＡＩＬと等しくなる。これによって、ＰＰＢキューのリストＱＡＶＡＩＬに、プログラムロード処理の実行以前に登録されていたＰＰＢキューが存在しなかった場合（ビットベクトルＱＡＶＡＩＬの全てのビットが０であった場合）に、インタフェース１５１に到着したパケットが新たにパケット処理ボード１１１上のプログラムによって処理できる。また、ＰＰＢキューのリストＱＡＶＡＩＬに、既登録のＰＰＢキューが存在していた場合（ビットベクトルＱＡＶＡＩＬのいずれかのビットが１であった場合）に、インタフェース１５１に到着したパケットが既登録のＰＰＢキューだけでなく新規登録されたＰＰＢキューにも転送され、パケット処理ボード１１１の負荷が分散できる。
【００４８】
ＰＰＢキューのリスト（ＱＡＶＡＩＬ）は、制御ボード１４１に加えて各インタフェース１５１にも重複して存在することになるが、これによって各インタフェース１５１においてパケットが高速に処理できる。インタフェース１５１において、パケットがワイヤレートで処理できるように、ＰＰＢキューのリスト（ＱＡＶＡＩＬ）は、ＣＡＭ（連想メモリ：ｃｏｎｔｅｎｔ  ａｄｄｒｅｓｓａｂｌｅ  ｍｅｍｏｒｙ）のような高速アクセス可能なメモリに格納される。
【００４９】
次に、パケットストリーム処理装置１０１にプログラムロード処理を起動するためのプログラムロード要求について説明する。ネットワーク管理装置１２は、パケットストリーム処理装置１０１のパケット処理開始前の初期設定などのために、管理者または管理プログラムの指示により、プログラムロード要求をパケットストリーム処理装置１０１の制御ボード１４１に送る。プログラムロード要求は、次の（i）−（iii）の各項目を含む：（i）プログラムのＵＲＬまたはプログラム自体、（ii）サービス識別子（ＳＩＤ）、（iii）負荷予測情報（リソース情報）。
【００５０】
項目（i）に関して、プログラムロード要求にプログラム自体がふくまれている場合に、制御ボード１４１は、そのままプログラム格納部１４７にプログラムを格納する。プログラムロード要求にプログラムのＵＲＬが含まれる場合に、制御ボード１４１は、指定されたＵＲＬにＨＴＴＰ（ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）によってアクセスして、そのプログラムを受信してプログラム格納部１４７に格納するか、或いは、プログラム格納部１４７にＵＲＬ自体を格納する。プログラムは、オブジェクトプログラムまたはソースプログラムである。ソースプログラムの場合に、制御ボード１４１は、ソースプログラムをオブジェクトプログラムに変換するためのコンパイラを内蔵し、コンパイルによって得られたオブジェクトプログラムをプログラム格納部１４７  に格納する。代わりに、制御ボード１４１は、プログラムロード処理の一部としてソースプログラムをコンパイルしてよい。コンパイルの際には、ソースプログラムが記述された言語にしたがって、その言語のコンパイラが使用される。例えば、ソースプログラムが、特定のアーキテクチャ（例えば特定のネットワークプロセッサのＣＰＵ）のためのものであることがソースプログラム中に記述されていれば、そのネットワークプロセッサ用のコンパイラを使用する。
【００５１】
なお、プログラムやそのＵＲＬを含まないプログラムロード要求を受信したプログラムローダ１４４は、プログラム管理テーブル１４６にそのプログラムロード要求において指定されたサービス識別子を含む要素が存在する場合には、その要素が含むプログラムをプログラムロード要求において指定されたものとみなすことができる。
【００５２】
項目（ii）に関して、サービス識別子（ＳＩＤ）は、パケットがそれを処理するプログラムを指定するため含む値である。サービス識別子は、プログラムと１対１又は多対１に対応する。
【００５３】
項目（iii）に関して、負荷予測情報は、プログラムが、パケットストリーム処理装置１０１（ノード装置）に与える負荷を予測するための情報である。負荷予測情報は、第１の情報として、プログラムを１回実行するのに要するリソース量またはそれを推定するための情報と、第２の情報として、プログラムの実行回数またはそれを推定するための情報を含む。第１の情報として、処理時間やメモリ量などで表されたリソース量は、値または、受信すべきパケットの属性に応じた関数によって与えられてよい。なお、プログラムを１回実行するのに要するリソース量は、標準的な入力データを与えてプログラムを実行するなどによって、プログラムの静的な解析または動的な解析によって推定することもできる。その場合、第１の情報は必要ない。第２の情報としてのプログラムの実行回数は、パケット数の形で与えられるが、帯域（ビットレート）の形で与えられてもよい。帯域が指定されると、平均パケット長の推定値を使用して、パケット数が推定できる。
【００５４】
制御ボード１４１中のプログラムローダ１４４がプログラムロード要求を受け取った場合に、指定されたサービス識別子をもつパケットに対して、指定されたプログラムが、選択されたパケット処理ボード１１１にロードされて実行される（Ｓ４１２）。指定されたプログラムによって生成あるいは転送されるパケットは、プログラムによって転送先（例えば、いずれかの隣接ノード装置）が決められるように、パケットストリーム処理装置１０１を初期設定できる。しかし、パケットストリーム処理装置１０１は、通常のＥｔｈｅｒｎｅｔ（登録商標、以下同じ）スイッチまたはＩＰルータとして機能して、自動的にパケットが転送されるように初期設定することも可能である。また、パケットストリーム処理装置１０１は、その初期状態として到着したパケットをすべて廃棄するように初期設定することも可能である。
【００５５】
また、到着したパケットのサービス識別子がキュー振り分けテーブル１５２にない場合、ＮＩＦ１５１が、プログラムローダ１４４にプログラムロード要求を送信することもできる。この場合、プログラムやそのＵＲＬをふくまないプログラムロード要求を送信することも可能である。このようなプログラムロード要求は、ＯｐｅｎＦｌｏｗスイッチに新規のフローが到着した際にスイッチの動作をサーバに問い合わせる要求に相当する。（ここで、ＯｐｅｎＦｌｏｗとは、ＯｐｅｎＦｌｏｗスイッチング・コンソーシアムが提唱しているネットワーク制御技術のことである。）すなわち、ＯｐｅｎＦｌｏｗスイッチにおいて、その動作が予め決められた範囲から選択されるが、本実施形態においてはそのサービス識別子を有するパケットに対するパケットストリーム処理装置１０１の動作を任意のプログラムによって与えることができる。本実施形態においては、プログラムの選択のためにサービス識別子というパケット中のひとつのフィールドを使用しているが、ＯｐｅｎＦｌｏｗスイッチにおけるように、パケット中の複数のフィールドの値を使用することもできる。
【００５６】
図７は、制御ボード１４１のプログラムローダ１４４が、ＣＰＵ１４２を介して行うプログラムアンロード処理の手順を示す。プログラムアンロード処理は、負荷監視においてプログラムの実行の負荷が閾値を超えた場合に、このプログラムを新たにロードするパケット処理ボード１１１から他のプログラムをアンロードするために実行される。負荷テーブル１４５において、このプログラムに対応するＰＰＢキューの負荷が閾値を超えた場合に、このプログラムの実行の負荷が閾値を超えたと判定できる。
【００５７】
また、管理者または管理プログラムの指示によりネットワーク管理装置から送られたプログラムアンロード要求を制御ボード１４１が受信した場合に、プログラムローダ１４４は、アンロード処理の対象のプログラムがロードされた全てのパケット処理ボード１１１についてプログラムアンロード処理を実行する。その後、プログラムローダ１４４は、プログラム格納部１４７からこのプログラム又は対応するＵＲＬなどを削除する。プログラムアンロード要求はサービス識別子を含む。サービス識別子はプログラムと１対１又は多対１に対応するので、それによってアンロードするプログラムを指定することができる。プログラムアンロード処理が実施された後、プログラムアンロード要求に含まれたサービス識別子を有するパケットに対して、このサービス識別子に対応するプログラムがロードされる以前と同じ処理が行われる。
【００５８】
図７を参照すると、プログラムアンロード処理が開始すると、まず、ステップＳ５１１において、プログラムローダ１４４は、アンロードするプログラムが存在するパケット処理ボード１１１と、そのプログラムが使用するボード内のＰＰＢキューを求める。なお、負荷監視が行われている場合、このＰＰＢキューは、後述の負荷監視処理のＳ６１１（図８）で選択されている低負荷のＰＰＢキューである。プログラムローダ１４４は、プログラム管理テーブル１４６のＰＰＢキューのリスト（ビットベクトルＱＡＶＡＩＬ）から求めたＰＰＢキューを削除する（即ち、このＰＰＢキューに対応づけられたビットを０にする）。
【００５９】
次に、ステップＳ５１２において、プログラムローダ１４４は、プログラム管理テーブル１４６においてプログラムが利用可能なＰＰＢキューがなくなった場合には、各インタフェース１５１に指令を送って、各インタフェース１５１の振り分けテーブルｑＤＴ内でこのプログラムに対応するサービス（即ちこのサービスの識別子ＳＩＤ）に割り当てられたＮＩＦキューを抹消する。プログラム管理テーブル１４６が含むＰＰＢキューのリストが空（即ち、ＱＡＶＡＩＬの全てのビットが０）になった場合に、サービスが使用するＰＰＢキューがなくなったと判定される。
【００６０】
さらに、ステップＳ５１３において、前記のサービスが使用する各インタフェース１５１において、Ｓ５１１で求められた全てのＰＰＢキューをリスト（ＱＡＶＡＩＬ）から抹消する。これによって、リスト（ＱＡＶＡＩＬ）に登録されたＰＰＢキューがなくなった場合に、インタフェース１５１に到着したパケットがパケット処理ボード１１１上のプログラムによって処理されることがなくなる。即ち、インタフェース１５１に到着したパケットは、初期設定によって、廃棄されるか、通常のＥｔｈｅｒｎｅｔパケットまたはＩＰパケットとして処理される。また、ＱＡＶＡＩＬに登録されたＰＰＢキューが残っている場合は、残っているＰＰＢキューひいてはこのＰＰＢキューを含むパケット処理ボード１１１に負荷が集中されるという効果が生じる。
【００６１】
最後に、ステップＳ５１４において、プログラムローダ１４４は、Ｓ５１１において求めたパケット処理ボード１１１においてプログラムを停止してアンロードする。また、全てのパケット処理ボード１１１からアンロードされる場合、このプログラムをプログラムテーブル１４６からも削除する。プログラムローダ１４４は、このパケット処理ボード１１１のメモリ（ＤＲＡＭ１１３）からプログラムを削除する。プログラムをアンロードされたパケット処理ボード１１１において、そのプログラムを実行することができなくなるが、そのプログラムが占有していたメモリが解放され、他のプログラムがロードされてこのメモリを利用する。
【００６２】
図８は、制御ボード１４１のＣＰＵ１４２が定期的に繰り返して行う負荷監視処理の手順を示す。負荷監視処理において、負荷テーブル１５３が走査され、負荷テーブル１５３内で負荷を示す各要素についてステップＳ６１０以下の処理が反復実行される。
【００６３】
ステップＳ６１０において、負荷テーブル１５３の選択された要素ＱＬＥＮに対応するＰＰＢキューｑｈが高負荷であるか判定される。ＰＰＢキューｑｈが高負荷であれば、ステップＳ６１１−Ｓ６１３の処理が実行される。本実施形態において、負荷テーブル１５３において負荷を示す要素ＱＬＥＮは、対応するＰＰＢキューｑｈに溜まったパケット数である。負荷（ここではパケット数）が一定の閾値を超えている場合、ＰＰＢキューｑｈは、高負荷であると判断される。例えば、閾値は、パケット数で３の値である。ただし、閾値は固定値でなくてよく、負荷テーブルの他の要素ＱＬＥＮの値が高い程、閾値は大きく設定されてよい。
【００６４】
ステップＳ６１１において、負荷テーブル１５３が参照され、未割り当て（未使用）又は低負荷のＰＰＢキューｑｌと、それを含むパケット処理ボードＰＰＢｐｌが選択される。負荷テーブル１５３を走査して、未割り当て又は低負荷のＰＰＢキューｑｌを求めることができる。しかし、前回の走査の中で求めて、このＰＰＢキューｑｌを保存しておくこともできる。ここで、負荷テーブル１５３において最少の負荷を有するＰＰＢキューを低負荷のＰＰＢキューｑｌとして選択できる。
【００６５】
ステップＳ６１２において、選択されたＰＰＢキューｑｌが割り当て済み（即ち低負荷）の場合に、図７のアンロード処理にしたがって、ＰＰＢキューｑｌとＰＰＢｐｌに対応するメモリを解放する。すなわち、ＰＰＢキューｑｌに蓄積されたパケットを処理するプログラムは、パケット処理ボードＰＰＢｐｌのメモリ（ＤＲＡＭ１１３）から削除される。
【００６６】
ステップＳ６１３において、図６のロード処理にしたがって、未割り当て又は低負荷のＰＰＢキューｑｌを含むパケット処理ボードＰＰＢｐｌのメモリ（ＤＲＡＭ１１３）にも、高負荷のＰＰＢキューｑｈのパケットを処理していたプログラムがロードされる。さらに、高負荷のＰＰＢキューｑｈに送られるパケットに対する利用可能キューリスト１５５ａ、１５５ｂ（ＱＡＶＡＩＬ）において、未割り当て又は低負荷のＰＰＢキューｑｌが追加される。すなわち、利用可能キューリスト１５５ａ、１５５ｂ（ＱＡＶＡＩＬ）において高負荷のＰＰＢキューｑｈに対応付けられるパケットが、未割り当て又は低負荷のパケット処理ボードＰＰＢｐｌにも転送され、新たにパケット処理ボードＰＰＢｐｌにロードされたプログラムによって処理できる。
【００６７】
ステップＳ６１４において、負荷テーブル１５３の負荷を示す全要素について処理が終了したか判定される。全要素について処理が終了していない場合、ステップＳ６１５において、次の要素が選択され、ルーチンはステップＳ６１０に戻る。全要素について処理が終了した場合、ルーチンは終了する。
【００６８】
図８の負荷監視処理において、ＰＰＢキューとプログラムとは１対１に対応している。未割り当てのＰＰＢキューが存在しない場合に、パケット処理ボードＰＰＢｐｌにおいてプログラムのアンロードが行われる。しかし、１個のＰＰＢキューを複数のプログラムに対応させる場合もある。このような場合において、使用されているＰＰＢキューを新たなプログラムに割り当てる際に、プログラムをアンロードする必要は必ずしもない。しかし、１個のＰＰＢキューを多数のプログラムによって共用する場合に、サービス（プログラム処理）間の干渉が発生するため、１個のＰＰＢキューに対応させるプログラムの数が一定数を超えた場合には、プログラムをアンロードしてよい。また、プログラムに割り当てるメモリが不足するとき、あるいは余裕がなくなった場合に、プログラムをアンロードしてよい。
【００６９】
図９は、各インタフェース１５１の演算処理回路１５６が行うパケット転送処理（ＰＰＢキュー選択処理）の手順を示す。パケット転送処理において、パケット処理ボード（ＰＰＢ）１１１及びパケット処理ボード１１１内のＰＰＢキューが選択されて、インタフェース１５１内のパケットが選択されたＰＰＢキューに転送される。パケット転送処理が行われるｊ番目のインタフェース１５１をＮＩＦ＃ｊとする。パケット転送処理は、インタフェースＮＩＦ＃ｊ内の全てのＮＩＦキュー（入力キュー）ｑｊｋ（ここでｋ＝０、１、…、Ｋ−１）について並列に実行される。すなわち、各インタフェース１５１について、パケット転送処理は、並列的に、Ｋ回（図４ではＫ＝２）実行される。
【００７０】
ステップＳ８０１において、まず、パケット処理ボード（ＰＰＢ）１１１の番号ｉがゼロに設定され（ｉ＝０）、パケット処理ボード１１１内の入力キュー（ＰＰＢキュー）の番号ｘをゼロに設定する（ｘ＝０）。
【００７１】
ステップＳ８０２において、転送可能判定処理として、ＱＡＶＡＩＬｋ［（ｉ・Ｌ）＋ｘ］が１であり、且つ、ＱＬＥＮ［（ｉ・Ｌ）＋ｘ］が所定値（例えば２）より小さいか判定される。ＱＡＶＡＩＬｋ［（ｉ・Ｌ）＋ｘ］が１であり、且つ、ＱＬＥＮ［（ｉ・Ｌ）＋ｘ］が所定値より小さい場合に、ルーチンはステップＳ８０３に進み、そうでない場合に、ルーチンはステップＳ８０４に進む。ここで、ＱＡＶＡＩＬｋ［］は、ｋ番目のＮＩＦキューｑｊｋのパケットを処理可能なＰＰＢキューを示すビットベクトルＱＡＶＡＩＬｋにおいて、上位から［］番目のビットを示す。ｋ番目のＮＩＦキューｑｊｋのパケットをｉ番目のパケット処理ボード１１１のｘ番目のＰＰＢキューに転送すれば、プログラムによって処理可能な場合に、ＱＡＶＡＩＬｋ［（ｉ・Ｌ）＋ｘ］は１となり、処理不能な場合に、ＱＡＶＡＩＬｋ［（ｉ・Ｌ）＋ｘ］は０にとなる。また、ＱＬＥＮ［］は、負荷テーブル１５３の上位から［］番目の要素（負荷）を示す。ＱＬＥＮ［］は、負荷を代表する値であり、ここではＰＰＢキューに含まれるパケットの数である。
【００７２】
ステップＳ８０３において、転送処理として、ＮＩＦキューｑｊｋから先頭のパケットが取り出されて、ｉ番目のパケット処理ボード１１１内のｘ番目のＰＰＢキューＱｉｘに転送される。
【００７３】
ステップＳ８０４において、ｉ番目のパケット処理ボード１１１内の全てのＰＰＢキューについて、Ｓ８０２の転送可能判定処理が終了したか判定される。即ち、パケット処理ボード１１１内のＰＰＢキューの個数をＬとして、ｘ＝Ｌ−１であるか判定される。ｘ＝Ｌ−１でない場合、Ｓ８０５で番号ｘが１増加して、次のＰＰＢキューについて、Ｓ８０２の処理が行われる。これにより、ｉ番目のパケット処理ボード１１１内の全てのＰＰＢキュー（ｘ＝０、１、…、Ｌ−１）について、Ｓ８０２の転送可能判定処理が行われる。一方、ｘ＝Ｌ−１である場合、ルーチンはステップＳ８０６に進む。
【００７４】
ステップＳ８０６において、全てのパケット処理ボード１１１について、Ｓ８０２の転送可能判定処理が終了したか判定される。即ち、パケットストリーム処理装置１０１内のパケット処理ボード１１１の個数をＮとして、ｉ＝Ｎ−１であるか判定される。ｉ＝Ｎ−１でない場合、Ｓ８０７で番号ｉが１増加して、次のパケット処理ボードについて、Ｓ８０２の処理が行われる。これにより、パケットストリーム処理装置１０１内の全てのパケット処理ボード１１１（ｉ＝０、１、…、Ｎ−１）について、Ｓ８０２の処理が行われる。ｉ＝Ｎ−１である場合、ルーチンは終了する。
【００７５】
簡単な例として、ｋ＝１、Ｌ＝２、Ｎ＝２、且つＱＡＶＡＩＬ１＝（１００１）の場合について説明すると、ＱＡＶＡＩＬ１［０］＝１であるためＱＬＥＮ［０］＜所定値（例えば２）であれば、ＮＩＦキュー１５４ｂ（ｑｊ１）の先頭のパケットがＰＰＢキューＱ００に転送され、パケットの識別子ＳＩＤに対応するプログラム（ＰＰＢ＃０にロードされている）により処理される。ＱＡＶＡＩＬ１［１］＝０、ＱＡＶＡＩＬ１［２］＝０であるためＱＬＥＮ［１］とＱＬＥＮ［２］に関わらず、ＰＰＢキューＱ０１とＱ１０にＮＩＦキュー１５４ｂ（ｑｊ１）のパケットは転送されない。ＱＡＶＡＩＬ１［３］＝１であるためＱＬＥＮ［３］＜所定値であれば、ＮＩＦキュー１５４ｂ（ｑｊ１）の次の先頭のパケットはＰＰＢキューＱ１１に転送され、パケットの識別子ＳＩＤに対応するプログラム（ＰＰＢ＃１にロードされている）により処理される。
【００７６】
パケット転送処理において、利用可能なＰＰＢキューのリストＱＡＶＡＩＬが複数のＰＰＢキューの表示（即ち１）を含んでいる場合、一つのサービス識別子ＳＩＤに関するパケットが各ＰＰＢキューに分散される必要がある。そのための最も単純な方法として上記のようなラウンドロビンスケジューリングによって、負荷が所定値より低いＰＰＢキューを順に使用してパケットを転送することができる。一方、負荷テーブル１５３の負荷が低いＰＰＢキュー（或いはパケット処理ボード）により多くのパケットを転送することもできる。例えば、負荷の値により単調減少する関数によって重みをつけ、重みに応じた量のパケットをＰＰＢキューに転送することもできる。
【００７７】
図１０を参照して、インタフェース１５１に到着したパケットをパケット処理ボード１１１のＮＰＵに転送する転送処理をさらに説明する。まず、インタフェース１５１に到着したパケットに対して、キュー振り分けテーブル１５２（ｑＤＴ）が使用されて、パケットに含まれる識別子（ＳＩＤ）からパケットが入力されるＮＩＦキューの番号（又は識別子）が選択される。選択された番号を有するＮＩＦキューがＮＩＦキュー１５４ａであれば、パケットはＮＩＦキュー１５４ａに登録される。図９の手順にしたがって、各ＮＩＦキューからパケット処理ボード１１１内のＰＰＢキューにパケットが転送される。従って、ＮＩＦキュー１５４ａ内のパケットも転送される。図１０において、転送先がＰＰＢ＃０のＰＰＢキュー１１４ａだと仮定されている。パケットは、転送後、ＰＰＢキュー１１４ａに登録される。パケット処理ボード１１１において、処理を行っていないＮＰＵまたは処理を終了したＮＰＵが、いずれかのＰＰＢキューの先頭からパケットを１個とりだして処理する。各ＮＰＵは、この動作を反復する。
【００７８】
本実施形態によると、インタフェース（ＮＩＦ）１５１は、スイッチ１８１を通じて複数のパケット処理部１１１に接続し、各パケットとこれを処理可能なパケット処理部１１１の情報とを対応づけるための対応付け情報（例えば、キューリストＱＡＶＡＩＬ）を格納し、対応付け情報において第１のパケット処理部の情報に対応付けられたパケットを第１のパケット処理部（例えばＰＰＢ＃０）に転送する。制御ボード１４１（制御部）は、第１のパケット処理部が閾値以上の高負荷であると判定される場合（Ｓ６１０）に、対応付け情報において第１のパケット処理部で処理可能なパケットを第２のパケット処理部（例えば、ＰＰＢ＃１）の情報にも対応付けるよう対応付け情報を更新する（Ｓ４１４、Ｓ６１３）。そして、インタフェース１５１は、更新された対応付け情報において第２のパケット処理部（ＰＰＢ＃１）の情報に対応付けられたパケットを第２のパケット処理部に転送する。
【００７９】
これにより、第１のパケット処理部の負荷が高くなることに応じて、第１のパケット処理部で処理可能なパケットが、第２のパケット処理部でも処理できるようになる。従って、あるサービスに関するパケットを処理するパケット処理部の数を負荷に応じて動的に増減させることができ、柔軟な負荷分散ができる。また、インタフェース１５１が対応付け情報を有するため、高速にパケット処理部にパケットが振り分けられ、ノード装置においてパケットの高速処理が可能になる。
【００８０】
インタフェース１５１は、各パケットに含まれるべき識別子（ＳＩＤ）ごとに対応付け情報（キューリストＱＡＶＡＩＬ）を備える。インタフェース１５１は、第１の識別子を含むパケットを、第１の識別子に関する対応付け情報（例えばＱＡＶＡＩＬ０）において対応付けられた第１のパケット処理部に転送する。制御ボード１４１は、第１の識別子を含むパケットを第２のパケット処理部の情報にも対応付けるよう第１の識別子に関する対応付け情報（例えばＱＡＶＡＩＬ０）を更新する。インタフェース１５１は、第１の識別子を含むパケットを第２のパケット処理部に転送する。
【００８１】
サービスを識別子で特定するような場合に、識別子をパケットに含めて、インタフェース１５１の識別子ごとの対応付け情報において、その識別子を有するパケットとパケット処理部の情報とを対応付ける。これにより、特定のサービスを受けるべきパケットごとに、処理の負荷を複数のパケット処理部に分散できる。
【００８２】
第１のパケット処理部は、第１の識別子を含むパケットを処理する第１のプログラムを備える。制御ボード１４１は、第１のパケット処理部が高負荷である場合に、第１のプログラムを第２のパケット処理部にロードする（Ｓ４１２、Ｓ６１３）。第２のパケット処理部は、第１の識別子を含むパケットを第１のプログラムによって処理する。これにより、あるパケット処理部が高負荷である場合に、そのパケット処理部で実行されるプログラムが他のパケット処理部でも実行されるようになり、プログラムの実行による負荷が分散される。
【００８３】
制御ボード１４１は、第２のパケット処理部を低負荷のパケット処理部に設定する（Ｓ４１１、Ｓ６１１）。制御ボード１４１は、第１のプログラムを第２のパケット処理部にロードする場合に、第２パケット処理部から第２のプログラムを削除する（Ｓ６１２）。これにより、第２パケット処理部から第２のプログラムが占有していたメモリが解放され、第１のプログラムを第２パケット処理部のメモリにロードできる。なお、第２パケット処理部が低負荷であることから、パケットを第２パケット処理部において処理できなくなっても悪影響は少ない。さらに、制御ボード１４１は、前記第２のプログラムが処理するパケットに含まれる第２の識別子に関する対応付け情報において、前記第２パケット処理部の情報を削除する（Ｓ５１３）。これにより、削除された第２のプログラムが処理すべきパケットが第２パケット処理部に転送されなくなる。
【００８４】
制御ボード１４１は、インタフェース１５１が有する対応付け情報と同じ対応付け情報を格納する。このため、制御ボード１４１は、対応付け情報に基づいて、パケット処理部に送られるパケットを処理するために必要なプログラムをパケット処理部にロードできる。
【００８５】
各パケット処理部は、その負荷の情報をインタフェース１５１に送り、インタフェース１５１は、負荷の情報を格納する負荷テーブル１５３を備える。これにより、インタフェース１５１は、対応付け情報に基づいてパケット処理可能なパケット処理部の中から低負荷のパケット処理部を高速に見つけ出して（Ｓ８０２）、この低負荷のパケット処理部にパケットを転送できる。負荷の情報は、各パケット処理部の各キューに溜まったパケットの数であってよい。これにより、簡便に負荷が把握できる。
【００８６】
＜変形例１＞
前記の実施形態において、パケット処理ボード１１１内のリソースの配分をプログラムローダ１４４とインタフェース１５１において決定していた。しかし、プログラムローダ１４４とインタフェース１５１において、パケット処理ボード１１１を単位として管理・制御し、パケット処理ボード１１１内のリソース配分は、パケット処理ボード１１１において決定してもよい。すなわち、パケット処理ボード１１１に入力されたパケットは、パケット処理ボード１１１内できめられた規則にしたがって、パケット処理ボード１１１内のＰＰＢキューに配分される。そして、ＮＰＵがアイドルになった場合に、決められたスケジューリングアルゴリズムにしたがってＰＰＢキューを選択しパケットを取り出し、そのパケットの識別子で指定されたプログラムをＮＰＵにおいて実行する。この場合に、ビットベクトルＱＡＶＡＩＬは、ＰＰＢキューのリストではなく、パケットを処理可能なパケット処理ボード１１１のリストとしてよい。この場合に、ビットベクトルＱＡＶＡＩＬのビットが、先頭（左）から図１１（ｂ）のように、パケット処理ボード１１１の番号（ポート番号でよい）や識別子に対応付けられてよい。
【００８７】
＜変形例２＞
前記の実施形態において、制御ボード１４１は、集中的に負荷監視を行った。しかし、負荷監視を分散的に行うことも可能である。すなわち、各パケット処理ボード１１１が負荷監視を行い、負荷が高い場合に、そのパケット処理ボード１１１にパケットを送信する全てのインタフェース１５１に対して、パケット処理ボード１１１が指令を発して、そのパケット処理ボード１１１へのパケットの送信を停止させる。このため、前記の実施形態においては制御ボードだけが持っていたプログラム管理テーブル１４６を各パケット処理ボード１１１が保持し、分散的に管理する。従って、各パケット処理ボード１１１はそれが使用するプログラムだけをプログラム管理テーブルによって管理する。
【００８８】
＜変形例３＞
なお、前記した実施形態において、パケット処理ボード１１１の負荷としてＰＰＢキューの負荷に基づいて、インタフェース１５１からのパケットの転送先が決定されていた。しかし、プログラムの出力先のインタフェース１５１の負荷すなわち輻輳の状態も加味して転送先をきめることも可能である。すなわち、各インタフェース１５１は、まずプログラムロード要求時にパケット処理ボード１１１上のプログラムごとにその出力先のインタフェース１５１を把握する。そのために、プログラムロード要求が出力先のインタフェース１５１の情報を含んでいてもよいし、プログラムの内容からそれを見つけてもよい。そうやって得られた出力先のインタフェース１５１の情報と、出力先のインタフェース１５１から定期的に報告される輻輳情報を各インタフェース１５１が保管し、出力先のインタフェース１５１が輻輳しているプログラムが処理するパケットはＰＰＢキューに送信するのを遅延させる。これによって、出力先インタフェース１５１の輻輳による出力パケットの廃棄を減少させることができる。
【００８９】
本発明は前記の実施形態とその変形例に限定されずに、その技術的な思想の範囲内において種々の変更がなしうることは明白である。
【符号の説明】
【００９０】
１０  ネットワーク
１２  ネットワーク管理装置
１４、１５  ノード装置
１０１  パケットストリーム処理装置
１１１  パケット処理ボード（ＰＰＢ）
１１４ａ、１１４ｂ  入力キュー（ＰＰＢキュー）
１４１  制御ボード（ＣＢ）
１４４  プログラムローダ
１４５  負荷テーブル
１４６  プログラムテーブル
１４７  プログラム格納部
１５１  ネットワークインタフェース（ＮＩＦ）
１５２  振り分けテーブル（ｑＤＴ）
１５３  負荷テーブル
１５４ａ、１５４ｂ  入力キュー（ＮＩＦキュー）
１５５ａ、１５５ｂ  キューリスト（ＱＡＶＡＩＬ）
１８１  スイッチファブリック
【図１】
0005704567.tif 000002
【図２】
0005704567.tif 000003
【図３】
0005704567.tif 000004
【図４】
0005704567.tif 000005
【図５】
0005704567.tif 000006
【図６】
0005704567.tif 000007
【図７】
0005704567.tif 000008
【図８】
0005704567.tif 000009
【図９】
0005704567.tif 000010
【図１０】
0005704567.tif 000011
【図１１】
0005704567.tif 000012