(57)【要約】【課題】パケット転送装置において、キャッシュによるデータ処理の高速化を向上させ、かつパケットの到着順を管理する情報を検索する時間を短縮する。【解決手段】プロセッサグループＩＤ計算部１１はプロセッサグループＩＤを計算する。グループ所属プロセッサ決定部１８はプロセッサグループごとに単位時間当たりのパケット数を数えてテーブル３３に記録する。プロセッサ検索部１６は該プロセッサグループＩＤをインデックスとして、パケットを処理させるプロセッサの番号とパケットのシーケンス番号を、それぞれテーブル１４とテーブル１５から検索する。シーケンス番号添付部１７は検索されたプロセッサグループに属しているプロセッサを選択し、パケットを処理する情報にプロセッサグループＩＤとシーケンス番号を記載し、プロセッサに渡す。最後に、プロセッサグループＩＤ−シーケンス番号管理テーブル１５中のシーケンス番号を増加させる。【選択図】図２
2008131350.tif 000002
【特許請求の範囲】
【請求項１】
パケットを処理するプロセッサが複数存在するパケット転送装置において、
パケットごとに処理させるプロセッサを決定し、そのプロセッサにパケットを渡す第１のモジュールと、プロセッサでの処理後にパケットを到着順に並べ直す第２のモジュールとを有し、
前記第１のモジュールは、パケット処理を行うプロセッサをまとめたプロセッサグループと、各プロセッサグループに属するプロセッサを管理する手段と、パケットのフロー識別子からパケット処理を行うプロセッサが属するプロセッサグループを、前記プロセッサを管理する手段から選択する手段と、プロセッサグループ毎に単位時間当たりのパケット到着数をカウントし、カウント結果に対応するプロセッサ数を検索し、検索されたプロセッサ数に合うようにプロセッサグループに所属するプロセッサを決定する手段と、該プロセッサグループに属するプロセッサからパケットを処理してもらうプロセッサを選択する手段と、選択したプロセッサにパケットを送る手段と、プロセッサグループごとにパケットの到着順を表わすシーケンス番号を管理する手段と、シーケンス番号をパケット情報としてプロセッサに渡した後、前記シーケンス番号を管理する手段中のシーケンス番号を増加させる手段とを有し、
前記第２のモジュールは、先にフロー情報から計算されたＩＤごとに次に送信するパケットの番号を管理する手段と、処理されたパケットのシーケンス番号と前記パケットの番号を管理する手段で管理している次に転送するパケットのシーケンス番号を比較し、両者が一致する時パケットを送信し、合致しない場合はバッファに格納して、送信する順番になるまで待機させる手段とを有する
パケット転送装置。
【請求項２】
パケット転送装置におけるパケットを処理させるプロセッサにパケットを分配する方法であって、
異なるフローのフロー情報から計算される値が同じになる場合を許可する関数を用いてプロセッサグループＩＤを計算するステップと、
プロセッサグループ毎に単位時間当たりのパケット到着数をカウントし、カウント結果に対応するプロセッサ数を検索し、検索されたプロセッサ数に合うようにプロセッサグループに所属するプロセッサを決定するステップと、
前記プロセッサグループＩＤをインデックスとして、プロセッサグループＩＤ-プロセッサ番号管理テーブルからパケットを処理させるプロセッサグループの番号を検索するステップと、
前記プロセッサグループＩＤをインデックスとして、プロセッサグループＩＤ-シーケンス番号管理テーブルからパケットのシーケンス番号を検索するステップと、
検索されたプロセッサグループに属するプロセッサからパケットを処理してもらうプロセッサを選択する手段と、
選択したプロセッサにパケットを、前記プロセッサグループＩＤと前記シーケンス番号とともに送るステップと、
前記プロセッサグループＩＤ-シーケンス番号管理テーブルの前記計算されたプロセッサグループＩＤのシーケンス番号を増加させるステップと、
を有するパケット分配方法。
【請求項３】
パケット転送装置においてプロセッサによって処理されたパケットを到着順に並べ直すパケットソート方法であって、
プロセッサによって処理されたパケットの情報を受信し、該情報に記載されているプロセッサグループＩＤから次に送信するパケットのシーケンス番号をプロセッサグループＩＤ-シーケンス番号管理テーブルから検索するステップと、
プロセッサから到着したパケットの情報に含まれるシーケンス番号と、検索されたシーケンス番号とを比較し、両者が同じである場合は該パケットを転送した後に、前記プロセッサグループＩＤ-シーケンス番号管理テーブルの、次に転送するシーケンス番号を増加させ、同じでない場合は該パケットに送信する順番になるまでバッファに待機させるステップと
を有するパケットソート方法。
【請求項４】
パケット転送装置においてパケットを処理するプロセッサの負荷を均等にするグループ所属プロセッサ変更方法であって、
前記プロセッサグループに属するプロセッサに処理してもらうパケットが単位時間内に到着する数をプロセッサグループごとに計算するステップと、
プロセッサごとの単位時間当たりのパケット受付数を計算するステップと、
プロセッサグループに属するプロセッサ数を数えるステップと、
該プロセッサグループに属するプロセッサに処理してもらうパケットの単位時間当たりの到着率を計算するステップと、
プロセッサのパケット受付数が第１の閾値を超えると、該プロセッサをグループに加えているプロセッサグループのうち、最も単位時間当たりのパケット到着数の多いグループに、その時点で最も受付数の少なかったプロセッサを追加し、プロセッサのパケット受付数が第１の閾値を下回ると、該プロセッサをグループに加えているプロセッサグループのうち、最も単位時間当たりのパケット到着数の少ないグループから、その時点で最も受付数の多かったプロセッサを削除するステップと、
プロセッサグループに対応するパケットの到着率が、前回測定時よりも増加し、かつ前記到着率に関する複数の第２の閾値とプロセッサ数の関係を記載する表におけるグループに属するプロセッサ数を変更しない上限の第２の閾値を超える場合、その時点で最も受付数の少なかったプロセッサを該プロセッサグループに追加し、プロセッサグループに対応するパケットの到着率が、前回測定時よりも減少し、かつ前記第２の閾値とプロセッサ数の関係を記載する表において、到着率がグループに属するプロセッサ数を変更しない下限の第２の閾値を下回る場合、プロセッサグループに属しているプロセッサのうち、最も単位時間当たりのパケット処理数の大きいものをプロセッサグループから削除するステップと
を有するグループ所属プロセッサ変更方法。
【請求項５】
請求項２に記載のパケット分配方法をコンピュータに実行させるためのプログラム。
【請求項６】
請求項３に記載のソート方法をコンピュータに実行させるためのプログラム。
【請求項７】
請求項４に記載のグループ所属プロセッサ変更方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ通信におけるパケット転送装置に関し、特にパケット処理プロセッサが複数の処理を並列に処理することができるパケット転送装置に関するものである。
【背景技術】
【０００２】
データ通信において、データパケットをあて先に送り届けるための装置として、スイッチなどのパケット転送装置がある。これらのパケット転送装置はネットワークと回線で接続され、ネットワークから到着したパケットをそのあて先に応じてあて先のネットワークへと送信する作業を行う。ネットワークを利用したアプリケーションの増加により処理するデータ量は増加する傾向にある。パケットを処理するプロセッサはデータ量の増加に伴い処理能力を向上させる必要があるが、処理能力の向上に伴い消費電力量が指数関数的に増加するというデメリットが存在する。この消費電力量の増加は、プロセッサ単体の処理能力を増加させずにプロセッサの数を増加させて複数のパケットを同時に処理することで制限することが可能となる。
【０００３】
通常同じフローに属するパケットは送信した時と同じ順番で受信者に到着したときのみデータは正しく受信される。よって、パケット転送装置は同一フローに属するパケットに対しては到着した順番に送信する必要がある。パケットの処理時間はパケットごとに異なり、かつ同じプロセッサで複数のパケットを処理する場合、同時に処理するパケット数に応じて負荷が異なるため負荷状況によっても処理時間は異なる。これにより同一フローのパケットの送信順は負荷の状況に応じて必ずしも到着した順番にはならない。そこで、これに対処するために、現在次に示す２つの方法が考案されている。
【０００４】
非特許文献１ではパケットの送信元アドレスや宛先アドレスをハッシュ関数に入れることにより計算されるＩＤと同じＩＤを持つプロセッサにパケットを処理させる方式である。この方式では同一フローに属するパケットは常に同じＩＤが計算されるため、このフローに属するパケットを処理するプロセッサはいつも同じになり、順序逆転はおこらない。非特許文献２では同一フローに属するパケットをフローごとに用意したＦＩＦＯキューで順番を管理し、プロセッサで処理されたパケットのうちＦＩＦＯのキューに先頭に存在するものからパケットを転送する方法が紹介されている。この方法では到着順序がＦＩＦＯキューによって管理されていることから、処理するプロセッサの負荷の違いで処理時間が異なっていてもパケットを到着順に送信することができる。
【非特許文献１】Ｌ．  Ｋｅｎｃｌ，  Ｊ．  Ｂｏｕｄｅｃ，  “Ａｄａｐｔｉｖｅ  Ｌｏａｄ  Ｓｈａｒｉｎｇ  ｆｏｒ  Ｎｅｔｗｏｒｋ  Ｐｒｏｃｅｓｓｏｒｓ，”  ＩＥＥＥ  Ｉｎｆｏｃｏｍ２００２，  ｐｐ．５４５−５５４，  ２００２
【非特許文献２】Ｂ．  Ｗｏ，  ｅｔ  ａｌ．，  “Ａｎ  Ｅｆｆｉｃｉｅｎｔ  Ｓｃｈｅｄｕｌｉｎｇ  Ｍｅｃｈａｎｉｓｍ  ｗｉｔｈ  Ｆｌｏｗ−Ｂａｓｅｄ  Ｐａｃｋｅｔ  Ｒｅｏｒｄｅｒｉｎｇ  ｉｎ  ａ  Ｈｉｇｈ−Ｓｐｅｅｄ  Ｎｅｔｗｏｒｋ  Ｐｒｏｃｅｓｓｏｒ，”  ＩＥＥＥ  ＨＰＳＲ２００５，  ｐｐ．４８１−４８５，  ２００５
【発明の開示】
【発明が解決しようとする課題】
【０００５】
非特許文献１の問題点はハッシュ関数の計算結果はプロセッサ間の負荷が均等になるようにＩＤを計算する保証がないため、一部のプロセッサに負荷が集中する問題が存在することである。このため、フローに対応するプロセッサの負荷が上がるときでも空いているプロセッサにパケットの処理を行わせることはできない。
【０００６】
非特許文献２の問題点は、フローの数だけＦＩＦＯキューを用意しないといけない点である。このため、ＦＩＦＯキューを格納するバッファの容量が増加し、かつフローのＩＤに相当するＦＩＦＯキューを探索する処理が負荷となり、プロセッサの性能を劣化させる。
【０００７】
本発明の目的は、パケットの送信順序を到着順序と同じ順番に保ちつつ、パケットの処理が特定のプロセッサで行われる状況を回避し、ならびに到着するパケット量に応じてパケットを処理するグループ所属プロセッサを変更することで、キャッシュによるデータ処理の高速化を向上させ、かつパケットの到着順を管理する情報を検索する時間を短縮する、パケット転送装置、パケット分配方法、パケットソート方法、グループ所属プロセッサ変更方法を提供することにある。
【課題を解決するための手段】
【０００８】
本発明のパケット転送装置は、パケットを処理するプロセッサが複数存在するパケット転送装置において、
パケットごとに処理させるプロセッサを決定し、そのプロセッサにパケットを渡す第１のモジュールと、プロセッサでの処理後にパケットを到着順に並べ直す第２のモジュールとを有し、
前記第１のモジュールは、パケット処理を行うプロセッサをまとめたプロセッサグループと、各プロセッサグループに属するプロセッサを管理する手段と、パケットのフロー識別子からパケット処理を行うプロセッサが属するプロセッサグループを、前記プロセッサを管理する手段から選択する手段と、プロセッサグループ毎に単位時間当たりのパケット到着数をカウントし、カウント結果に対応するプロセッサ数を検索し、検索されたプロセッサ数に合うようにプロセッサグループに所属するプロセッサを決定する手段と、該プロセッサグループに属するプロセッサからパケットを処理してもらうプロセッサを選択する手段と、選択したプロセッサにパケットを送る手段と、プロセッサグループごとにパケットの到着順を表わすシーケンス番号を管理する手段と、シーケンス番号をパケット情報としてプロセッサに渡した後、前記シーケンス番号を管理する手段中のシーケンス番号を増加させる手段とを有し、
前記第２のモジュールは、先にフロー情報から計算されたＩＤごとに次に送信するパケットの番号を管理する手段と、処理されたパケットのシーケンス番号と前記パケットの番号を管理する手段で管理している次に転送するパケットのシーケンス番号を比較し、両者が一致する時パケットを送信し、合致しない場合はバッファに格納して、送信する順番になるまで待機させる手段とを有する。
【０００９】
したがって、同一フローに属するパケットを特定多数のプロセッサに処理させることができ、かつパケットの到着順を管理することで、パケットの送信順序を到着順序と同じ状態に保ちつつパケットを転送することが可能になる。
【００１０】
本発明の、パケット転送装置におけるパケットを処理させるプロセッサにパケットを分配する方法は、
異なるフローのフロー情報から計算される値が同じになる場合を許可する関数を用いてプロセッサグループＩＤを計算するステップと、
プロセッサグループ毎に単位時間当たりのパケット到着数をカウントし、カウント結果に対応するプロセッサ数を検索し、検索されたプロセッサ数に合うようにプロセッサグループに所属するプロセッサを決定するステップと、
前記プロセッサグループＩＤをインデックスとして、プロセッサグループＩＤ-プロセッサ番号管理テーブルからパケットを処理させるプロセッサグループの番号を検索するステップと、
前記プロセッサグループＩＤをインデックスとして、プロセッサグループＩＤ-シーケンス番号管理テーブルからパケットのシーケンス番号を検索するステップと、
検索されたプロセッサグループに属するプロセッサからパケットを処理してもらうプロセッサを選択するステップと、
選択したプロセッサにパケットを、前記プロセッサグループＩＤと前記シーケンス番号とともに送るステップと、
前記プロセッサグループＩＤ-シーケンス番号管理テーブルの前記計算されたプロセッサグループＩＤのシーケンス番号を増加させるステップと、
を有する。
【００１１】
したがって、パケットの到着順序を管理するエントリの数を減らすことが可能になり、その結果、パケットの到着順を示すシーケンス番号が格納されている場所を検索する時間を短縮できる。
【００１２】
本発明の、パケット転送装置においてプロセッサによって処理されたパケットを到着順に並べ直すパケットソート方法は、
プロセッサによって処理されたパケットの情報を受信し、該情報に記載されているプロセッサグループＩＤから次に送信するパケットのシーケンス番号をプロセッサグループＩＤ-シーケンス番号管理テーブルから検索するステップと、
プロセッサから到着したパケットの情報に含まれるシーケンス番号と、検索されたシーケンス番号とを比較し、両者が同じである場合は該パケットを転送した後に、前記プロセッサグループＩＤ-シーケンス番号管理テーブルの、次に転送するシーケンス番号を増加させ、同じでない場合は該パケットに送信する順番になるまでバッファに待機させるステップと
を有する。
【００１３】
したがって、パケット処理後にパケットの送信順序を到着順序と同じ順番にソートすることが可能になる。
【００１４】
本発明の、パケット転送装置においてパケットを処理するプロセッサの負荷を均等にするグループ所属プロセッサ変更方法は、
前記プロセッサグループに属するプロセッサに処理してもらうパケットが単位時間内に到着する数をプロセッサグループごとに計算するステップと、
プロセッサごとの単位時間当たりのパケット受付数を計算するステップと、
プロセッサグループに属するプロセッサ数を数えるステップと、
該プロセッサグループに属するプロセッサに処理してもらうパケットの単位時間当たりの到着率を計算するステップと、
プロセッサのパケット受付数が第１の閾値を超えると、該プロセッサをグループに加えているプロセッサグループのうち、最も単位時間当たりのパケット到着数の多いグループに、その時点で最も受付数の少なかったプロセッサを追加し、プロセッサのパケット受付数が第１の閾値を下回ると、該プロセッサをグループに加えているプロセッサグループのうち、最も単位時間当たりのパケット到着数の少ないグループから、その時点で最も受付数の多かったプロセッサを削除するステップと、
プロセッサグループに対応するパケットの到着率が、前回測定時よりも増加し、かつ前記到着率に関する複数の第２の閾値とプロセッサ数の関係を記載する表におけるグループに属するプロセッサ数を変更しない上限の第２の閾値を超える場合、その時点で最も受付数の少なかったプロセッサを該プロセッサグループに追加し、プロセッサグループに対応するパケットの到着率が、前回測定時よりも減少し、かつ前記第２の閾値とプロセッサ数の関係を記載する表において、到着率がグループに属するプロセッサ数を変更しない下限の第２の閾値を下回る場合、プロセッサグループに属しているプロセッサのうち、最も単位時間当たりのパケット処理数の大きいものをプロセッサグループから削除するステップと
を有する。
【００１５】
グループ毎に到着するパケット量に応じてグループに属するグループ所属プロセッサを変更することが可能になり、負荷分散を実現しつつ同一のフローのパケットを特定のプロセッサに送ることが可能となるため、全プロセッサに処理を分散させる場合と比較して同一フローの処理データがキャッシュされているプロセッサにパケットの処理を任せやすくなる。
【発明の効果】
【００１６】
本発明によれば、パケットの処理が特定のプロセッサで行われる状況を緩和することが可能になり、かつ非特許文献２の方式のようにパケットの到着順のソートのために、フローＩＤごとにＦＩＦＯのエントリーを用意しないため、シーケンス番号を検索する時間を短縮することが可能となる。結果として、パケット待機用のバッファ量の削減やパケット処理時間の短縮を実現することが可能となる。
【発明を実施するための最良の形態】
【００１７】
次に、本発明の実施の形態について図面を参照して説明する。
【００１８】
図１は本発明の一実施形態のパケット転送装置の構成図である。
【００１９】
パケット転送装置には複数のプロセッサ１〜５が存在し、それらに異なる機能を割り当てることでパケット処理を実現する。存在するプロセッサとして、パケットを受信するプロセッサ１、パケットを処理するプロセッサ３1〜３n、パケットを転送するプロセッサ５、さらに、パケットを分配するプロセッサを決定するディストリビュータ２と、プロセッサ３1〜３nにより処理されたパケットを到着順に並べ直すソーター４が存在する。パケットを処理するプロセッサ３1〜３nはグループ化されており、１つのグループに１つ以上のプロセッサが属する。
【００２０】
次に、ディストリビュータ２とソーター４の構成について詳しく説明する。
【００２１】
ディストリビュータ２はパケットのヘッダからプロセッサグループを特定するためのＩＤを計算し、そのＩＤをもとにパケットグループを選択した後、グループに属するプロセッサからプロセッサを１つ選んでパケットを処理させる機能を持つ。また、同一フローに属するパケットは到着順に送信する必要がある。到着順を特定するために、ディストリビュータ２はパケットの到着順を示すシーケンス番号をプロセッサグループＩＤごとに管理し、パケットに添付する。このシーケンス番号はパケットが到着するたびに決まった数だけ増加するものである。これらを実現するために、ディストリビュータ２は図２に示すように構成されている。すなわち、ディストリビュータ２は、パケットのヘッダからプロセッサグループＩＤを計算するプロセッサグループＩＤ計算部１１と、プロセッサグループＩＤを計算するための関数を記録する関数記録テーブル１２と、プロセッサグループＩＤから割り当てるプロセッサを決定するためのプロセッサ選択アルゴリズム１３と、プロセッサグループに属するプロセッサを管理するデータベースであるプロセッサグループＩＤ−プロセッサ番号管理テーブル１４と、到着順を示すシーケンス番号を添付するシーケンス番号添付部１７と、プロセッサグループＩＤごとのシーケンス番号を管理するプロセッサグループＩＤ−シーケンス番号管理テーブル１５と、プロセッサグループ毎に単位時間当たりのパケット数を決定し、計測結果に応じてプロセッサグループに属するプロセッサを決定するグループ所属プロセッサ決定部１８と、プロセッサグループに属するプロセッサの中からパケットを処理してもらうプロセッサを選択するプロセッサ検索部１６を有している。プロセッサ検索部１６で用いられるアルゴリズムにはラウンドロビンや重み付けラウンドロビンがある。本発明では異なるフローに同一のプロセッサグループＩＤを添付することを許容している。これにより管理するプロセッサグループＩＤの数を減らすことができる。このため、プロセッサグループＩＤの計算にはハッシュ関数を用いる。
【００２２】
グループ所属プロセッサ決定部１８は、図３に示すように、単位時間を計測するタイマー３１と、単位時間当たりのパケット数を計測するパケット計測部３２と、プロセッサグループ毎に計測した単位時間当たりのパケット数を記録するプロセッサグループ−パケット数管理テーブル３３と、パケット数の計測結果からプロセッサ数およびグループの所属プロセッサを決定するプロセッサ決定部３４と、単位時間当たりのパケット数とプロセッサ数を対応付けるプロセッサ数−パケット到着率対応表３５と、プロセッサの処理負荷を計測し、プロセッサ決定部３４に通知するプロセッサ負荷計測部３６を有する。
【００２３】
ソーター４はプロセッサ３1〜３nによって処理されたパケットを到着順に並べ直す機能を持つ。パケットにはシーケンス番号によって到着の順番が記載されている。このシーケンス番号を用いて到着順に並べ直すために、ソーター４は、図４に示すように、プロセッサグループＩＤごとの次に送信するパケットのシーケンス番号を管理するプロセッサグループＩＤ−シーケンス番号管理テーブル２１と、プロセッサ３1〜３nから送られてきたパケットの情報内に記載されているシーケンス番号と、テーブル２１内の次に転送するパケットのシーケンス番号を比較するシーケンス番号比較部２２と、送られてきたパケットが次に送信するパケットでなかったときにパケットをバッファリングするパケット待機用バッファ２３を有する。
【００２４】
次に、ディストリビュータ２の動作を図５により説明する。
プロセッサグループＩＤ計算部１１はヘッダに記載されているソースアドレスやディスティネーションアドレスなどの情報からプロセッサグループＩＤを計算する（ステップ１０１）。この計算は、関数管理テーブル１２に管理されている関数に、ヘッダに記載されている情報を引数として入力することで行う。次に、グループ所属プロセッサ決定部１８内に存在するパケット計測部３２において計算されたプロセッサグループＩＤをインデックスとして、プロセッサグループ−パケット数管理テーブル３３においてプロセッサグループごとに管理しているパケット数を１増加させる（ステップ１０２）。次に、プロセッサ検索部１６は計算されたプロセッサグループＩＤをインデックスとして、パケットを処理させるプロセッサの番号とパケットのシーケンス番号を、それぞれプロセッサグループＩＤ−プロセッサ番号管理テーブル１４とプロセッサグループＩＤ−シーケンス番号管理テーブル１５から検索する（ステップ１０３、１０４）。次に、シーケンス番号添付部１７は検索されたプロセッサグループに属しているプロセッサを、プロセッサ選択アルゴリズム１３を用いて選択し、パケットを選択したプロセッサに処理してもらうため、パケットを処理するための情報を作成、もしくはプロセッサ１からもたらされたものを利用し、その中にプロセッサグループＩＤとシーケンス番号を記載する（ステップ１０５）。プロセッサ選択アルゴリズム１３の例として、グループ内の処理を行わないプロセッサを、ラウンドロビンや重み付けラウンドで選択する、一様分布に従って選択する、などのアルゴリズムがある。次に、プロセッサにこの情報を渡す（ステップ１０６）。最後に、次に到着したパケットの順番を示すため、プロセッサグループＩＤ−シーケンス番号管理テーブル１５中のシーケンス番号を増加させる（ステップ１０７）。
【００２５】
次に、ディストリビュータ２で行なわれるグループ所属プロセッサ変更を、図６を用いて説明する。
【００２６】
グループ所属プロセッサ変更では、パケット処理を行うプロセッサの処理数や、プロセッサグループに対応するパケットの到着数に応じて、プロセッサグループに属するプロセッサ数を変更する。変更タイミングを決めるために、プロセッサグループごとに表１に示すようなプロセッサ数−パケット到着率対応表３５が設けられている。
【００２７】
【表１】
2008131350.tif 000003
【００２８】
プロセッサ数−パケット到着率対応表３５は、パケット到着率のある範囲ごとに、パケットグループが持つプロセッサの数を割り当てている。表１の例では、パケット到着率がＴ１（ｐａｃｋｅｔ／ｓ）からＴ２（ｐａｃｋｅｔ／ｓ）の間であれば、このプロセッサグループが持つプロセッサの数は２つであり、Ｔｎ−２（ｐａｃｋｅｔ／ｓ）からＴｎ−１（ｐａｃｋｅｔ／ｓ）の間であれば、プロセッサグループにはｎ−１（ｎはプロセッサの最大数）個割り当てることを示す。
【００２９】
グループ所属プロセッサ決定部１８で行われるグループ所属プロセッサ変更動作を図６により説明する。この動作は、パケット計測部３２とプロセッサ決定部３４が連携しながら行う。すなわち、パケット計測部３２で単位時間あたりのパケット数を計測し、プロセッサ決定部３４はその値とプロセッサ数−パケット到着率対応表３５を見ながらパケット数を決定し、アルゴリズムにしたがって、プロセッサグループに属するプロセッサを決定する。
【００３０】
まず、単位時間当たりのプロセッサグループごとの到着パケット数と、プロセッサごとの処理数を定期的にカウントする（ステップ２０１）。このカウント結果に応じて、プロセッサグループに属するプロセッサ数の増減を行う。まず、プロセッサグループに属するプロセッサ数を増やすパターンについて説明する。このパターンは、あるプロセッサの負荷が高くなる時、例では単位時間内にプロセッサが処理のためパケットを受け付けた数が、あらかじめ設けられた閾値Ｐを超える、もしくはプロセッサグループに対応するパケットの到着率が表１のプロセッサ数−パケット到着率対応表１８が示す現行のプロセッサ数の領域の上限の閾値を超える場合に発生する。それぞれの場合についての処理を述べる。
【００３１】
まず、単位時間内にプロセッサが処理のためにパケットを受け付けた数が、あらかじめ設けられた閾値Ｐを超える場合（ステップ２０２のＹ）は、該プロセッサにパケットを処理してもらうプロセッサグループのうち、最も到着パケットの多いグループに、該グループに属していないプロセッサのうち、最も単位時間当たりの受付パケット数の少ないプロセッサを追加する（ステップ２０３）。こうすることで、該グループに属するプロセッサに処理してもらうパケットが、新たに追加されたプロセッサでも処理してもらえるようになる。ついで、プロセッサグループに属するプロセッサに処理してもらうパケットの到着率が、プロセッサ数−パケット到着率対応表１８における、現行のプロセッサ数ｋに対応する領域の上限閾値Ｔｋを超える場合（ステップ２０５のＹ）、グループに属していないプロセッサのうち、単位時間当たりの受付パケット数が少ないプロセッサを該グループに追加する（ステップ２０６）。次に、プロセッサグループに属するプロセッサの数を減らすパターンについて説明する。このパターンはプロセッサの負荷が低くなる（ステップ２０２のＮ）、もしくはプロセッサグループに属するプロセッサにパケットを処理してもらうパケットの到着率が、プロセッサ数−パケット到着率対応表１８が示す現行のプロセッサ数に対応する領域の下限の閾値Ｔｋ−１を下回る場合に発生する（ステップ２０５のＮ）。前者の場合はそのプロセッサにパケットを処理してもらうプロセッサグループのうち、最も到着パケットの少ないグループから該プロセッサを削除する（ステップ２０４）。後者の場合、プロセッサグループに属するプロセッサのうち、最も単位時間当たりの受付パケット処理数の大きいものをプロセッサグループから削除する（ステップ２０７）。
【００３２】
次に、ソーター４の動作を図７により説明する。
ソーター４のシーケンス番号比較部２２は、プロセッサによって処理されたパケットの情報を受信すると（ステップ３０１）、該情報に記載されているプロセッサグループＩＤを用いて、プロセッサグループＩＤ−シーケンス番号管理テーブル２１から次に送信するパケットのシーケンス番号を検索する（ステップ３０２）。次に、検索した番号と受け取ったパケットの番号を比較し、受け取ったパケットが次に送信するパケットかどうかを判断する（ステップ３０３）。両者が一致する場合は次に送信できるパケットを受信したことがわかるため、パケットをプロセッサ５に送る（ステップ３０４）。もし両者が異なっていれば送信する順番が来るまで該パケットをパケット待機用バッファ２３でパケットを待機させる（ステップ３０６）。プロセッサ５がパケットを転送するたびに転送されたパケットと同じプロセッサグループＩＤに対応した、プロセッサグループＩＤ−シーケンス番号管理テーブル２１中の、次に送信する順番を示すシーケンス番号を１増加させる（ステップ３０５）。
【００３３】
次に、ディストリビュータ２の動作を図８から図１０により、具体例を挙げて説明する。
【００３４】
図８にプロセッサグループＩＤの計算（ステップ１０１）の様子を示す。プロセッサグループＩＤを計算する関数は、パケットヘッダに添付されているディスティネーションアドレスを１０進数変換し、３で割った時の余りであるとする。例として、パケットのディスティネーションアドレスが１９２．１６８．１．２であるとすると、あまりは２となるため、プロセッサグループＩＤは２となる。計算する関数は、引数として取るディスティネーションアドレスの値が異なる場合でも、同じ値を計算するものを使用することができる。本例で示した関数である、引数の３で割った余りをプロセッサグループＩＤとする関数もそのような関数の１つである。この場合、１９２．１６８．１．２だけでなく、１９２．１６８．１．５も余りが２となるため、両者のプロセッサグループＩＤは共に２となる。
【００３５】
図９にプロセッサグループＩＤ−プロセッサ番号管理テーブル１４とプロセッサグループＩＤ−シーケンス番号管理テーブル１５の検索（ステップ１０２，１０３）の様子を示す。例では、プロセッサグループＩＤ−プロセッサ番号管理テーブル１４に、プロセッサグループＩＤが２番であるパケットを処理するプロセッサとして、プロセッサ３，４が記載されている。これよりパケットを処理するプロセッサはプロセッサ３もしくは４であることがわかる。次に、プロセッサグループＩＤ−シーケンス番号管理テーブル１５から、プロセッサグループＩＤが２番であるパケットのシーケンス番号が１３５４であることがわかる。パケットをプロセッサに処理させるにはパケットに関する情報を作成してプロセッサに渡すことになる。パケットに関する情報にはパケットが格納されているメモリの位置やパケットのソースアドレス、ディスティネーションアドレスなど、パケット処理に必要な情報が記載されている。この情報の中に、プロセッサグループＩＤとシーケンス番号を追記し、ソーター４でパケット到着順にパケットをソートすることができるようにする。パケット情報を渡すプロセッサであるが、パケットの処理が終了したプロセッサが順にとる方法や、ラウンドロビン形式で処理するプロセッサが決まる方式などが存在する。
【００３６】
図１０はパケット情報をプロセッサに渡す様子を示している。パケットをプロセッサに転送する際、シーケンス番号が到着順を表わすように、プロセッサグループＩＤ−シーケンス番号管理テーブル１５内の、プロセッサグループＩＤ＝２に対応するシーケンス番号を１増加させ、次にプロセッサグループＩＤ＝２のパケットが到着した時にその番号を割り当てる。
【００３７】
次に、ソーター４の動作を図１１から１３により説明する。
ソーター４はプロセッサによって処理されたパケットの情報を受け取ると、パケットの情報の中に入っているプロセッサグループＩＤとシーケンス番号を調べる（図１１）。次に、得られたプロセッサグループＩＤをもとにプロセッサグループＩＤ−シーケンス番号管理テーブル２１から、次に送信するパケットのシーケンス番号を得る（図１２）。この例では、次に送信するパケットのシーケンス番号が１３５４で、プロセッサ３2から送られてきたパケット情報に記載しているシーケンス番号が１３５４であるため、次に送信するパケットであると判断される。その後、パケット情報はプロセッサ５へと送られ、プロセッサ５によってパケットは転送される。プロセッサ５はパケットを送信すると、ソーター４のプロセッサグループＩＤ−シーケンス番号管理テーブル２１で管理される、次に送信するパケットのシーケンス番号の値を１増加させる（図１３）。もし、ソーター４が持つパケット待機用バッファ２３内のキューの中にパケットが待機させられているならば、シーケンス番号が増加するたびに待機しているパケットのシーケンス番号をチェックし、次に転送するパケットが存在するならばそのパケットをプロセッサ５に送る。ソーター４は待機するパケットを収納するためにプロセッサグループＩＤごとにキューを用意している。シーケンス番号をチェックする際には、キューを先頭から探索し、次に送信するシーケンス番号と同じものを持つパケットを検索する。
【００３８】
最後に、プロセッサグループに属するプロセッサ数を変更する時の動作を説明する。このとき、プロセッサ数−パケット到着率対応表３５を表２に示す。
【００３９】
【表２】
2008131350.tif 000004
【００４０】
まず、図１４を用いてプロセッサ数を増加させる時の様子を説明する。プロセッサグループ２（プロセッサグループＩＤ＝２）に属するプロセッサの処理してもらうパケットがディストリビュータ２に１９００  ｐａｃｋｅｔ  ｐｅｒ  ｓｅｃｏｎｄの割合で到着しているとする。このとき、プロセッサ数−到着率対応表１８から、プロセッサグループ２にはプロセッサが２つ割り当てられていることになる。その後、パケットの到着率を計測したところ、プロセッサグループ２に属する２１００ｐｐｓにパケットの到着率が上昇したとする。２１００ｐｐｓはプロセッサ数−到着率対応表１８によると、グループに属するプロセッサ数が３である領域から、負荷分散部１９はパケットグループ２に属するプロセッサの数を増加させる。このとき、プロセッサごとに取っている、プロセッサが処理のために受け付けたパケット数を見て、最もパケット数の少ないプロセッサを新たにパケットグループ２に加える。例では、それぞれのプロセッサ３1、３2、３3、３4の受付パケット数の比がプロセッサ３1：プロセッサ３2：プロセッサ３3：プロセッサ３4＝３：５：１０：１０であるため、プロセッサ３1をプロセッサグループ２に加える。今後、プロセッサグループ２に属するプロセッサにパケットを処理してもらうパケットは、プロセッサ３3，３4のほかにプロセッサ３1にも処理してもらうことが可能となる。
【００４１】
次に、図１５を用いてプロセッサ数を減少させる時の様子を説明する。プロセッサグループ２に属するプロセッサに処理してもらうパケットがディストリビュータ２に２１００ｐｐｓで到着していた状態から１８００ｐｐｓに減少したとする。この場合、プロセッサ数−到着率対応表１８から、プロセッサグループ２に属するプロセッサ数は２であることがわかるため、それまで３個使用していたプロセッサのうち、１つグループから削除する。このとき、プロセッサごとに取っている、プロセッサが処理のため受け付けたパケット数を見て、最もパケット数の多いプロセッサをパケットグループ２から削除する。例では、それぞれのプロセッサ３1、３2、３3、３4の受付パケット数の比がプロセッサ３1：プロセッサ３2：プロセッサ３3：プロセッサ３4＝３：５：１０：１０であるため、プロセッサ３3もしくは３4をプロセッサグループ２から削除することが可能となる。候補が２つ存在する場合はどちらかを選択するが、選択手法としては、ＩＤの最も小さいプロセッサから削除する方法や等確率で選択する方法がある。ここでは前者のポリシーを使用することを想定する。これより、プロセッサ３3がプロセッサグループ２から削除される。これ以後、プロセッサグループ２に属するプロセッサに処理されるパケットはプロセッサ３1，３4のみにより処理される。
【００４２】
なお、ディストリビュータ２およびソーター４の機能は、その機能を実現するためのプログラムを、コンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータに読み込ませ、実行するものであってもよい。コンピュータ読み取り可能な記録媒体とは、フレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ等の記録媒体、コンピュータシステムに内蔵されるハードディスク装置等の記憶装置を指す。さらに、コンピュータ読み取り可能な記録媒体は、インターネットを介してプログラムを送信する場合のように、短時間、動的にプログラムを保持するもの（伝送媒体もしくは伝送波）、その場合のサーバとなるコンピュータ内の揮発性メモリのように、一定時間プログラムを保持しているものを含む。
【図面の簡単な説明】
【００４３】
【図１】本発明の一実施形態によるパケット転送装置のブロック図である。
【図２】ディストリビュータのブロック図である。
【図３】グループ所属プロセッサ決定部のブロック図である。
【図４】ソーターのブロック図である。
【図５】ディストリビュータの動作を示すフローチャートである。
【図６】ディストリビュータで行なわれる負荷分散動作を示すフローチャートである。
【図７】ソーターの動作を示すフローチャートである。
【図８】ディストリビュータでのプロセッサグループＩＤの計算の様子を示す図である。
【図９】プロセッサグループＩＤ−プロセッサ番号管理テーブルとプロセッサグループＩＤ−シーケンス番号管理テーブルの検索の様子を示す図である。
【図１０】パケット情報をプロセッサに渡す様子を示す図である。
【図１１】ソーターの動作の具体例の説明図である。
【図１２】ソーターの動作の具体例の説明図である。
【図１３】ソーターの動作の具体例の説明図である。
【図１４】プロセッサグループに属するプロセッサ数を変更するときの動作の具体例の説明図である。
【図１５】プロセッサグループに属するプロセッサ数を減少させるときの具体例の動作を示す説明図である。
【符号の説明】
【００４４】
１    プロセッサ（Ｒｘ）
２    ディストリビュータ
３1〜３n    プロセッサ
４    ソーター
５    プロセッサ（Ｔｘ）
１１    プロセッサグループＩＤ計算部
１２    関数記録テーブル
１３    プロセッサ選択アルゴリズム
１４    プロセッサグループＩＤ−プロセッサ番号管理テーブル
１５    プロセッサグループＩＤ−シーケンス番号管理テーブル
１６    プロセッサ検索部
１７    シーケンス番号添付部
１８    グループ所属プロセッサ決定部
２１    プロセッサグループＩＤ−シーケンス番号管理テーブル
２２    シーケンス番号比較部
２３    パケット待機用バッファ
３１    タイマー
３２    パケット計測部
３３    プロセッサグループ−プロセッサ数管理テーブル
３４    プロセッサ決定部
３５    プロセッサ数−パケット到着率対応表
３６    プロセッサ負荷計測部
１０１〜１０７，２０１〜２０７，３０１〜３０６    ステップ
【図１】
2008131350.tif 000005
【図２】
2008131350.tif 000006
【図３】
2008131350.tif 000007
【図４】
2008131350.tif 000008
【図５】
2008131350.tif 000009
【図６】
2008131350.tif 000010
【図７】
2008131350.tif 000011
【図８】
2008131350.tif 000012
【図９】
2008131350.tif 000013
【図１０】
2008131350.tif 000014
【図１１】
2008131350.tif 000015
【図１２】
2008131350.tif 000016
【図１３】
2008131350.tif 000017
【図１４】
2008131350.tif 000018
【図１５】
2008131350.tif 000019