(57)【特許請求の範囲】
【請求項１】
複数のパケット処理手段に対してフローを振り分けて前記複数のパケット処理手段間で並列に前記フローに対するパケット処理を実行する並列パケット処理方法であって、
前記複数のパケット処理手段に対して前記フローを振り分ける、相互に異なる第１及び第２の振分アルゴリズムを用意し、
前記第１の振分アルゴリズムを前記フローに適用している状態から、フローごとに当該フローからハッシュ値を計算し、時間経過に対して変化するしきい値と前記ハッシュ値とを比較した結果に基づいて当該フローに前記第１の振分アルゴリズムと前記第２の振分アルゴリズムのいずれかを適用するかを決定することにより、前記第２の振分アルゴリズムが前記フローに適用される状態に切り替える、並列パケット処理方法。
【請求項２】
前記第１の振分アルゴリズムによって振分先となる前記パケット処理手段の数と前記第２の振分アルゴリズムによって振分先となる前記パケット処理手段の数とが異なっている、請求項１に記載の並列パケット処理方法。
【請求項３】
前記振分アルゴリズムにおける変更の前に、当該変更によって各フローが前記複数のパケット処理手段のいずれにおいて処理されるように変化するかを判断し、
前記判断の結果に基づいて事前に、変更後の前記各フローの処理に必要なデータを対応するパケット処理手段に保持させ、その後、前記変更を行う、請求項１または２に記載の並列パケット処理方法。
【請求項４】
複数のパケット処理手段に対してフローを振り分けて前記複数のパケット処理手段間で並列に前記フローに対するパケット処理を実行する並列パケット処理方法であって、
前記複数のパケット処理手段に対して前記フローを振り分ける振分アルゴリズムを変更可能とし、
前記振分アルゴリズムを変更する前に、当該変更によって各フローが前記複数のパケット処理手段のいずれにおいて処理されるように変化するかを判断し、
前記判断の結果に基づいて事前に、変更後の前記各フローの処理に必要なデータを対応するパケット処理手段に保持させ、その後、前記変更を行う、並列パケット処理方法。
【請求項５】
フローに対してパケット処理を行う複数のパケット処理手段と、
相互に異なる第１及び第２の振分アルゴリズムにより前記複数のパケット処理手段にフローを振り分ける振分手段と、
前記第１の振分アルゴリズムを前記フローに適用している状態から、フローごとに当該フローからハッシュ値を計算し、時間経過に対して変化するしきい値と前記ハッシュ値とを比較した結果に基づいて当該フローに前記第１の振分アルゴリズムと前記第２の振分アルゴリズムのいずれかを適用するかを決定することにより前記第２の振分アルゴリズムが前記フローに適用される状態に切り替えるように、前記振分手段を制御する制御手段と、
を有する、並列パケット処理装置。
【請求項６】
前記第１の振分アルゴリズムによって振分先となる前記パケット処理手段の数と前記第２の振分アルゴリズムによって振分先となる前記パケット処理手段の数とが異なっており、前記制御手段は、前記複数のパケット処理手段での並列数の変更を契機として、前記振分手段に状態の切り替えを指示する、請求項５に記載の並列パケット処理装置。
【請求項７】
前記制御手段は、振分アルゴリズム情報と振り分け対象となる前記パケット処理手段の数と各フロー情報を保持し、前記振分アルゴリズムの変更後に前記各フローがいずれのパケット処理手段により処理されるように変化するかを判断し、前記判断の結果に基づいて必要なデータを予め保持するよう前記各パケット処理手段に指示した後、振分先を変更するように前記振分手段を制御する、請求項５または６に記載の並列パケット処理装置。
【請求項８】
フローに対してパケット処理を行う複数のパケット処理手段と、
変更可能な振分アルゴリズムにより前記複数のパケット処理手段に前記フローを振り分ける振分手段と、
振分アルゴリズム情報と振り分け対象となる前記パケット処理手段の数と各フロー情報を保持し、前記振分アルゴリズムの変更後に前記各フローがいずれのパケット処理手段により処理されるように変化するかを判断し、前記判断の結果に基づいて必要なデータを予め保持するよう前記各パケット処理手段に指示した後、振分先を変更するように前記振分手段を制御する制御手段と、
を有する、並列パケット処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク内でデータを送受信および中継する方法及び装置に関し、特に、Ｌ７（レイヤ７）／Ｌ４（レイヤ４）スイッチのような、転送データでの広い範囲を参照して転送データを修正する処理や参照データの情報に基づきデータをある方路へ転送または廃棄する処理での、並列処理による性能向上の方法と、そのような方法に基づいて構成された装置に関する。
【背景技術】
【０００２】
パケット転送は、一般に、ネットワーク内に設けられるノード装置によって処理される。パケット転送処理に対する要求の多様化と高度化により、パケット転送処理をソフトウェアベースで柔軟に実現しながらも、複数のノード装置を設けたり、ノード装置をマルチプロセッサ構成としたり、ノード装置内のプロセッサとして１チップに複数のコアが集積されたマルチコア構成のものを用いたりして並列処理によるスケールアウトを行い、性能向上を図ることが重要となっている。さらに、仮想化に合わせた柔軟な処理割当てなどを実現するために、動的に各処理プログラムに対する並列数を変更する、または、低消費電力化のために並列数を変化させて電源のオン／オフ制御を実行するという要求も高まってきている。ルータやＬ７スイッチでのパケット処理のように、短時間に大量の単純処理を実行しなければならない場合には、並列処理が特に有効である。
【０００３】
パケット転送処理での一般的な並列処理は、実際に処理を行う複数のパケット処理部と、それらのパケット処理部に対して負荷分散などを考慮してパケットあるいはデータを振り分ける振分部で実現される。マルチコア構成のプロセッサが用いられるとすれば、パケット処理部は、パケット処理用のプログラムをロードしたコアによって実現され、振分部は振分用のプログラムをロードしたコアによって実現される。したがって、パケット処理部は処理コアとも呼ばれ、振分部は振分コアとも呼ばれる。
【０００４】
図１は、上述した並列処理を実行するパケット処理装置１０１の一般的な構成を示している。ネットワークとの接続に用いられる２つのインタフェース（Ｉ／Ｆ）部１０２，１０３が設けられており、インタフェース部１０２，１０３は、いずれもパケット入力部１０４とパケット出力部１０５とに接続している。パケット入力部１０４は、パケット処理の対象となるパケットを外部から受信するための受信インタフェース回路であり、パケット出力部１０５は、パケット処理がなされたパケットを外部に送信するための送信インタフェース回路である。パケット入力部１０４とパケット出力部１０５は、内部バス１０６に接続し、内部バス１０６には、振分部（振分コア）１０７と複数のパケット処理部（処理コア）１０８も接続している。パケット処理の実施において必要とするためにデータを保持するデータ保持部１０９が外部メモリとして設けられており、複数のパケット処理部１０８は、メモリバス１１０を介してデータ保持部１０９に接続する。データ保持部１０９は、複数のパケット処理部１０８に対する共有メモリとして機能するものである。この構成においてパケット入力部１０４、パケット出力部１０５、内部バス１０６、振分部１０７、パケット処理部１０８及びメモリバス１１０は、マルチコア構成のプロセッサ（例えばマルチコア構成のＣＰＵ（中央演算ユニット））１１１内に形成されている。
【０００５】
以下の説明において、個々のパケット処理部１０８を区別して説明する場合には、コア１、コア２、…などのように「コア」の用語に数字を付したものを使用するものとする。
【０００６】
各パケット処理部１０８で実行されるパケット処理は、例えば、ファイアウォール（ＦＷ）処理、ＱｏＳ(Quality of Service)処理、ＮＡＰＴ(Network Address Port Translation)処理、暗号／複号処理などが挙げられ、各パケット処理部１０８には、これらの処理を実行するためのプログラムが実装される。この構成では、ネットワーク側から受信したパケットは、パケット入力部１０４を介して、振分部１０７によって指定されたパケット処理部１０８に送られる。パケットが送られてきたパケット処理部１０８は、そのパケットに対してパケット処理を実行し、パケット処理がなされたパケットは、パケット出力部１０５を介してネットワーク側に送信される。
【０００７】
各パケット処理部１０８は、パケット処理の実施に際して、転送テーブルやアドレス変換テーブルなどのデータを参照するためにデータ保持部１０９にアクセスするが、このデータ保持部１０９は、複数のパケット処理部１０８からのアクセスが集中するため、ボトルネックとなりやすく、また、そもそも外部メモリであるデータ保持部１０９にアクセスする時間自体も性能低下を引き起こす。このボトルネックを回避するために、各パケット処理部１０８では、データコピー部として機能するキャッシュメモリが設けられており、このキャッシュメモリにデータのコピーの一部を保持することで高速な処理を実現している。ここでのキャッシュメモリは、例えば、マルチコアのプロセッサ１１１における各コアごとのキャッシュメモリとして設けられているものである。しかしキャッシュメモリの容量は限られていて必要な全データのコピーをキャッシュメモリ上に置くことはできず、キャッシュにおけるミスヒットが発生する。このようなミスヒットが発生すると、パケット処理部１０８がデータ保持部１０９へのアクセスを行う必要が生じて性能が低下する。図２は、上述したパケット処理装置における並列処理動作を示している。図２に示したものでは、各パケット処理部１０８（処理コア１〜４）は同一プログラムの実行が可能であるとし、振分部１０７は、ハッシュ関数などを用いた単純なアルゴリズムで後述するフロー単位で振分先を決定するものとしている。図２は、キャッシュミスヒットが発生した場合に、データ保持部１０９への問い合わせが発生することを示している。
【０００８】
できるかぎりキャッシュミスヒットを低減させるためには、振分部１０７において、同じ処理が施されることになるパケットを可能な限り同じパケット処理部へ振り分けるようにすればよい。このため振分部１０７は、パケットのヘッダ（5-tuple等）を参照し、同じパケット処理の対象となる一連のパケット群（フロー）を特定して、フロー単位に振り分けを行う。
【０００９】
また、複数のパケット処理部１０８で処理することになるパケットの振り分けを行うことから、振分部１０７には負荷が集中しやすい。振分処理がボトルネックとなることを防ぐためには、振分部１０７での振分処理として、単純な動作のものを用いる必要がある。個々のフローとそれらのフローに対して割り当てる処理コア（割当処理コア）のＩＤ（識別番号）とをメモリ上のテーブルで管理し、割当処理コアをメモリアクセスを伴う検索により特定するような振分動作は、メモリアクセスが多くてボトルネックとなりやすい。それよりも、非特許文献１に記載されるように、パケットヘッダでのフローを特定する領域からハッシュ関数などによりハッシュ値を算出して、そのハッシュ値に基づき、割当処理コアのＩＤが記述されたメモリアドレス番地を引く、もしくは、ハッシュ値からある程度まとめたフロー群で割当処理コアＩＤを検索する、といった動作から割当コアを求める動作の方が好ましく、これらの動作を用いることによって、メモリアクセス数を削減し、高速に処理可能とすることが可能である。
【００１０】
このようにハッシュ関数を用いて振分を行う場合、柔軟な処理割当や省電力化のためにパケット処理部１０８の並列数を増減させると、新たに加えたパケット処理部１０８にも処理割当が行われ、あるいは、削減したパケット処理部には処理割当が行われないように、振分アルゴリズム（振分条件）を変更する。具体的には、ハッシュ値を求めるために使用するハッシュ関数の変更、ハッシュ値からフローをまとめる際に用いるしきい値の変更、まとまったフロー群と割当処理コアＩＤとの対応関係の変更などを行う必要がある。このような振分条件の変更を行うと、並列数の変更前後で多くのフローが異なったパケット処理部へ割り当てられることとなり、その結果、短時間にキャッシュミスヒットが集中して発生し、処理遅延が大きくなる。例えば、並列数を１つ増加させた場合は、新しいパケット処理部１０８に割り当てられたフローの処理では、全て、キャッシュミスヒットが発生することから、データ保持部１０９へのアクセス所要時間が長いことに起因して、パケット処理部１０８での処理遅延が発生する。
【００１１】
図３は、パケット処理部１０８を１つ追加したときのキャッシュミスヒットの発生を説明する図である。（Ａ）に示すように、コア１〜コア３までの３個のパケット処理部（処理コア）１０８が設けられており、振分部１０７はそれらの処理コアに対してフローＡ〜Ｄを振分けているものとする。ここで新たにコア４を処理コアとして追加したとすると、振分部１０７は、振分アルゴリズムを３分割用のものから４分割用のものに切り替えて、フローＡ〜Ｄを４個のコア１〜４に改めて振分ける。その結果、（Ｂ）に示すように、各コアには従前のフローとは異なるフローが割り当てられることとなって、各コアにおいてキャッシュミスヒットが発生することになる。その結果、（Ｃ）に示すように、変更タイミングの直後に、処理遅延が急増することになる。
【００１２】
もう一例として、並列数を１つ減少させた場合は、残ったパケット処理部の全てに、減らしたパケット処理部の担当してたフローが割り当てられ、その結果、キャッシュミスヒットが複数のパケット処理部で発生し、データ保持部へのアクセス競合による待ち時間に起因して、各パケット処理部での処理遅延が発生する。個々のパケットに対する処理量は小さいものの多数のパケットに対して低遅延で順序逆転なく処理を実行することが求められるパケット転送処理において、このような振分先の変更時に発生する遅延は大きな課題である。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特表２００２−５３８７２４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
パケット転送処理において並列処理を採用する場合、並列数の変更に伴って振分先を変更する際に大きな遅延が発生する。このような遅延の発生は、パケットの正常な転送を阻害する恐れがある。
【００１５】
本発明の目的は、並列処理によってパケットを処理する際に振分先が変更可能であって、かつ、振分先の変更時に発生する処理遅延の影響を低減した並列パケット処理方法を提供することにある。
【００１６】
本発明の別の目的は、並列処理によってパケットを処理する際に振分先が変更可能であって、かつ、振分先の変更時に発生する処理遅延の影響を低減した並列パケット処理装置を提供することにある。
【課題を解決するための手段】
【００１７】
本発明の第１の並列パケット処理方法は、複数のパケット処理手段に対してフローを振り分けて複数のパケット処理手段間で並列にフローに対するパケット処理を実行する並列パケット処理方法であって、複数のパケット処理手段に対してフローを振り分ける、相互に異なる第１及び第２の振分アルゴリズムを用意し、第１の振分アルゴリズムをフローに適用している状態から、フローごとにそのフローに対して第２の振分アルゴリズムが適用される確率が時間経過とともに高くなるようにして、第２の振分アルゴリズムがフローに適用される状態に切り替える。第１の並列パケット処理方法の例示的な態様においては、第１の振分アルゴリズムによって振分先となるパケット処理手段の数と第２の振分アルゴリズムによって振分先となるパケット処理手段の数とが異なるようにしてもよい。
【００１８】
本発明の第２の並列パケット処理方法は、複数のパケット処理手段に対してフローを振り分けて複数のパケット処理手段間で並列にフローに対するパケット処理を実行する並列パケット処理方法であって、複数のパケット処理手段に対してフローを振り分ける、相互に異なる第１及び第２の振分アルゴリズムを用意し、第１の振分アルゴリズムを用いてフローを複数のパケット処理手段に振り分け、振り分けられたフローのうち、特定のパケット処理手段に振り分けられることとなったフローに対して第２の振分アルゴリズムを適用して再振分を実行する。第２の並列パケット処理方法の例示的な態様においては、第２の振分アルゴリズムは、特定のパケット処理手段を除いた複数のパケット処理手段にフローを振り分ける振分アルゴリズムであるようにしてもよい。
【００１９】
本発明の第３の並列パケット処理方法は、複数のパケット処理手段に対してフローを振り分けて複数のパケット処理手段間で並列にフローに対するパケット処理を実行する並列パケット処理方法であって、複数のパケット処理手段に対してフローを振り分ける振分アルゴリズムを変更可能とし、振分アルゴリズムを変更する前に、その変更によって各フローが複数のパケット処理手段のいずれにおいて処理されるように変化するかを判断し、判断の結果に基づいて事前に、変更後の各フローの処理に必要なデータを対応するパケット処理手段に保持させ、その後、振分アルゴリズムの変更を行う。
【００２０】
本発明の第１の並列パケット処理装置は、フローに対してパケット処理を行う複数のパケット処理手段と、相互に異なる第１及び第２の振分アルゴリズムにより複数のパケット処理手段にフローを振り分ける振分手段と、第１の振分アルゴリズムをフローに適用している状態から、フローごとにそのフローに対して第２の振分アルゴリズムが適用される確率が時間経過とともに高くなるようにして第２の振分アルゴリズムがフローに適用される状態に切り替えるように、振分手段を制御する制御手段と、を有する。第１の並列パケット処理装置の例示的な態様においては、第１の振分アルゴリズムによって振分先となるパケット処理手段の数と第２の振分アルゴリズムによって振分先となるパケット処理手段の数とが異なっており、制御手段は、複数のパケット処理手段での並列数の変更を契機として、振分手段に状態の切り替えを指示するようにしてもよい。
【００２１】
本発明の第２の並列パケット処理装置は、フローに対してパケット処理を行う複数のパケット処理手段と、第１の振分アルゴリズムにより複数のパケット処理手段にフローを振り分る振分手段と、振分手段を制御する制御手段と、を備え、振分手段は、第１の振分アルゴリズムを適用して振り分けられたフローについてそのフローの振分先に基づいて再振分の要否を判断する再振分判断部を有し、再振分が必要と判断したときに、第１の振分アルゴリズムとは異なる第２の振分アルゴリズムでそのフローを複数のパケット処理手段に再振分し、制御手段は、第１の振分アルゴリズムによって特定のパケット処理手段に割り振られることとなったフローの再振分を振分手段に指示する。第２の並列パケット処理装置の例示的な態様においては、第２の振分アルゴリズムは、特定のパケット処理手段を除いた複数のパケット処理手段にフローを振り分ける振分アルゴリズムであるようにしてもよい。
【００２２】
本発明の第３の並列パケット処理装置は、フローに対してパケット処理を行う複数のパケット処理手段と、変更可能な振分アルゴリズムにより複数のパケット処理手段にフローを振り分ける振分手段と、振分アルゴリズム情報と振り分け対象となるパケット処理手段の数と各フロー情報を保持し、振分アルゴリズムの変更後に各フローがいずれのパケット処理手段により処理されるように変化するかを判断し、判断の結果に基づいて必要なデータを予め保持するよう各パケット処理手段に指示した後、振分先を変更するように振分手段を制御する制御手段と、を有する。
【発明の効果】
【００２３】
本発明では、振分先の変更に時間の要素を取り入れ、少数のフロー単位に時間的に分散させて第１の振分アルゴリズムが適用される状態から第２の振分アルゴリズムが適用される状態へと振分先変更を行うことで、キャッシュミスヒットの発生の集中を防ぎ、振分先変更時の処理遅延の発生の低減が可能となる。また本発明では、特定の振分先に振り分けられたフローに対して再振分を行うことで、振分処理におけるフローとパケット処理コアの割当管理の負担を軽減しつつ、キャッシュミスヒットの発生の集中を防ぎ、振分先変更時の処理遅延の発生を低減することが可能となる。また本発明では、振分先の変更により各フローがいずれのパケット処理手段で処理されるようになるかを予測し、その予測結果に基づいて各フローのパケット処理に必要なデータを予め各パケット処理手段にキャッシュさせることで、キャッシュミスヒットの発生を防ぎ、振分先変更時の処理遅延の発生を低減することが可能となる。
【図面の簡単な説明】
【００２４】
【図１】パケット処理装置の一般的な構成の一例を示すブロック図である。
【図２】マルチコア構成のパケット処理装置における並列処理動作を説明する図である。
【図３】並列数を増加させたときのフローの再振分とキャッシュミスヒットの発生とを説明する図である。
【図４】本発明の実施の一形態のパケット処理装置におけるパケット処理を説明する図である。
【図５】振分部での判断ロジックを説明する図である。
【図６】特定のコアにおいて障害が発生した場合のフローの再振分を説明する図である。
【図７】特定のコアにおいて処理の偏りが発生した場合のフローの再振分を説明する図である。
【図８】パケット処理装置の第１の構成例を示すブロック図である。
【図９】パケット処理装置の第２の構成例を示すブロック図である。
【図１０】パケット処理装置の第３の構成例を示すブロック図である。
【図１１】パケット処理装置の第４の構成例を示すブロック図である。
【図１２】パケット処理装置の第５の構成例を示すブロック図である。
【図１３】パケット処理装置の第６の構成例を示すブロック図である。
【図１４】マルチプロセッサ構成としたパケット処理装置の一例を示すブロック図である。
【図１５】マルチノード構成によるパケット処理システムの一例を示すブロック図である。
【発明を実施するための形態】
【００２５】
次に、本発明の好ましい実施の形態について、図面を参照して説明する。
【００２６】
図４は本発明の実施の一形態のパケット処理装置におけるパケット処理を示す図であって、（Ａ）は実施の一形態のパケット処理装置の要部を示すブロック図、（Ｂ）は新旧振分処理を説明する図、（Ｃ）はパケット処理における遅延の時間変化を示すグラフである。
【００２７】
本実施形態のパケット処理装置は、図１に示したものと同様に、ネットワークとの接続に用いられる複数のインタフェース部と、パケット処理を並列に実行するマルチコア構成のプロセッサ１１１と、パケット処理の実施において必要とするためにデータを保持する外部メモリとしてデータ保持部１０９とを備えたものである。図１に示したものとの相違点は、プロセッサ１１１における各プロセッサコアがどのように使用されるかという点であるので、図４の（Ａ）では、本実施形態のパケット処理装置のうち、プロセッサ１１１とデータ保持部（外部メモリ）１０９の部分だけが示されている。
【００２８】
プロセッサ１１１には、図１に示したものと同様に、パケット入力部１０４、パケット出力部１０５、内部バス１０６、振分部（振分コア）１０７、複数のパケット処理部（処理コア）１０８、及びメモリバス１１０が設けられ、さらに、各パケット処理部１０８でのパケット処理と振分部１０７でのフローの振分とを制御するために、制御部１１２が設けられている。制御部１１２は、マルチコア構成のプロセッサ１１１において、制御用のプログラムをロードしたコアによって実現されるのものであり、制御コアとも呼ばれるものである。制御部１１２は、内部バス１０６を介して各パケット処理部１０８と振分部１０７とに接続しており、各パケット処理部１０８における処理プログラムを動的に変更し、さらに、振分部１０７に対して振分方法の変更を指示することで、プログラムのロード状況などに合わせて並列処理数を動的に変更することができ、また、外的要因で並列処理数が変化した場合にその変化にパケット処理装置が対応できるようにする。各パケット処理部１０８での処理プログラムの動的な変更は、例えば、処理プログラムのロードやリロードによって行われる。特に、本実施形態のパケット処理装置では、複数のパケット処理部１０８に対するフローの振分での振分先の変更を行う際に、時間の要素を取り入れ、少数のフロー単位に時間的に分散させて振分先変更を行うことで、キャッシュミスヒットの発生の集中を防ぎ、振分先変更時の処理遅延の発生の低減を可能としている。時間の要素を取り入れた振分先の変更を時間変動切替と呼ぶ。また、このパケット処理装置では、特定のパケット処理部に割り当てられていたフローのみを対象として、再度、振分の処理を実行することによって、振分処理におけるフローとパケット処理部の割当管理の負担を軽減しつつ、キャッシュミスヒットの発生の集中を防ぎ、振分先変更時の処理遅延の発生の低減を可能としている。特定のパケット処理部に割り当てられていたフローに対して再度、振分の処理を行うことを再振分と呼ぶ。また、このパケット処理装置では、振分先の変更により各フローがいずれのパケット処理手段で処理されるようになるかを予測し、予測結果に応じて各フローのパケット処理に必要なデータを予め各パケット処理手段にキャッシュさせることでキャッシュミスヒットの発生を防ぎ、振分先変更時の処理遅延の発生を低減することを可能としている。以下、本実施形態での振分先の変更について説明する。
【００２９】
まず、時間変動切替による振分アルゴリズムの切替について説明する。
【００３０】
図４（Ａ）に示した構成において、当初は３個のパケット処理部１０８、具体的にはコア１〜３のみがパケット処理に用いられていたとする。その状態では、振分部１０７は、入力したフローを３つのコアに振り分けるアルゴリズムを使用して、コア１〜コア３にフローを振り分けている。ここで、制御部１１２が、並列処理に参加するパケット処理部（処理コア）の数を並列数変更指示を出力することによって、コア４の新規起動あるいは割当変更を行い、あるいは、並列数の変更を検出してコア４が新たに加わったことを認識したものとする（図４の［１］）。このとき制御部１１２は、振分部１０７に対して、振分先切替の開始と、利用する振分アルゴリズムとを指示する（図４の［２］）。振分アルゴリズムの指示は、具体的には、利用するハッシュ関数の指示などである。
【００３１】
振分部１０７は、制御部１１２からの制御によって、フローを３つのコアに振り分ける振分アルゴリズム（３分割用振分アルゴリズム）と、フローを４つのコアに振り分ける振分アルゴリズム（４分割用振分アルゴリズム）とを実行可能であるとともに、フローごとに２つの振分アルゴリズムのどちらを適用するかを決定する振分アルゴリズム（新旧振分アルゴリズム）を実行可能である。特に新旧振分アルゴリズムは、切替開始指示からの時間経過をしきい値に利用して、新しい振分に対応する振分アルゴリズム（ここでは４分割用振分アルゴリズム）に渡されるフローが徐々に大きくなるように、２つの振分アルゴリズム（３分割用振分アルゴリズムと４分割用振分アルゴリズム）に対してフローを割り当てる。具体的には、図４（Ｂ）に示すように、フローからハッシュ値を計算し、ハッシュ値に応じてそのフローを（旧）３分割用振分アルゴリズムに振り分けるか（新）４分割用振分アルゴリズムに振り分けるかを決定し、この決定のしきい値を時間の経過に応じて変化させている。３分割用振分アルゴリズムと４分割用振分アルゴリズムは、新旧振分アルゴリズムよって振り分けられたフローをパケット処理部（処理コア）に振り分ける。このように、新しい振分に対応する振分アルゴリズムが適用されるフロー数を徐々に増やすようにすることにより、コア１〜４から外部メモリへのアクセスの集中を防ぎながら、振分先の変更を行うことができる。
【００３２】
図４（Ｃ）は、本実施形態でのパケットの処理遅延の時間変化を示すグラフである。このグラフからも分かるように、フローに対して新しい振分を徐々に適用しているので、変更タイミングの直後に処理遅延が急増することはなく、パケット処理性能への振分先変更の影響が小さく、パケット処理に要求される時間的制約を十分に満たすことが可能となる。
【００３３】
図５は、振分部における判断ロジックの具体的な例を示している。切替開始指示の時刻をｔ0とし、現在の時刻をｔとすると、切替開始からの経過時間Δｔは、
Δｔ＝ｔ−ｔ0
で表される。そこで、経過時間Δｔの関数Ｆ(Δｔ)として、しきい値を表すことにする。フローから求められるハッシュ値（出力Index値）がハッシュ空間においてIndex 0とIndex Xとの間をとるものとすると、出力Indexと、時間変化するしきい値Ｆ(Δｔ)とによって、フローを新旧いずれの振分アルゴリズムに振り分けるかを判断する。しきい値を表す関数Ｆとしては、Ｆ(０)では値がIndex 0であり、所定の時間をＴとしてＦ(Ｔ)では値がIndex Xであり、その間は経過時間Δｔに応じて例えば直線的に変化するものを用いることができる。
【００３４】
時間変動切替では、柔軟な処理割当や省電力化のためにパケット処理部の並列数を動的に増減させることを、パケット処理性能への影響を少なく実施することができる。
【００３５】
また、時間変動切替は、パケット処理部への振分フロー数に偏りが発生した場合に、振分処理におけるフローとパケット処理部の割当変更の負担を軽減しつつ、より偏りのない振分方法へと変更するために用いることができる。パケット処理部間で処理量の偏りが生じた時、その偏りは制御部１１２によって検出される。その検出に基づいて制御部１１２は、より偏りが生じないように、フロー振分におけるアルゴリズムの変更（例えば、ハッシュ値を求めるために用いられるハッシュ関数の変更、ハッシュ値からフローをまとめる際に用いられるしきい値の変更、など）を振分部１０７に指示する。振分部１０７は、この指示に応じて、時間変化するしきい値を用いて、新振分アルゴリズムに振り分けられるフローが徐々に増加するように、フローを新旧の振分アルゴリズムの間で振り分ける。
【００３６】
図４に示した構成では、並列数変更指示による振分の切替を行う際、制御部１１２は、処理コアの並列数を変更するためのパケット処理用のプログラムをプロセッサ１１１にリロードするときに、振分部１０７に対して振分先変更の契機を指示している。処理コアの数を減少させる場合には、振分先の変更が完了してからプログラムのリロードを行い、処理コアの数を増やす橋には、プログラムのリロードの完了後に振分先変更を開始させる。
【００３７】
フローの偏りが発生したことに基づいて振分の切替を行う場合には、振分部１０７が各処理コアに振り分けたフローの数を制御部１１２にフィードバックし、制御部１１２は、そのフィードバック情報に例えばしきい値を適用して偏りを検出し、偏りを検出したこによって振分先変更を開始させる。あるいは、各コアの負荷状況（例えばＣＰＵ使用率）を制御部１１２が収集し、負荷状況に対して例えばしきい値を適用して偏りを検出するようにしてもよい。
【００３８】
次に、再振分による振分アルゴリズムの切替について説明する。
【００３９】
図６は、特定のパケット処理装置（処理コア）において障害が発生した場合のフローの再振分を説明する図である。図６（Ａ）は、図４に示したパケット処理装置において、４個のパケット処理部（コア１〜４）がパケット処理を行っている状態を示している。このとき、図６（Ｂ）に示すように、フローは、例えば、コア１、コア２及びコア４に振り分けられている。ここで、コア４において障害が発生したとする。すると、制御部１１２は、障害発生を検出し（図６の［１］）、障害発生の検出に応じて、振分部１０７に対し、再振分の開始と、利用する振分アルゴリズムとを指示する（図６の［２］）。具体的には、既存の振分アルゴリズムで振り分けたフローに対して再振分を要するかどうかの再振分判断を行い、障害を発生したパケット処理部（ここではコア４）に振り分けられたフローについて、障害を発生していないパケット処理部（ここではコア１〜３）に振り分けるように、制御部１１２は振分部１０７に指示する。その結果、図６の（Ｃ）に示すように、振分部１０７は、コア４に行くとされていたフローについて、再振分判断の結果、再振分を要するものとして、コア４以外の別のコアに振り分けるようにする。障害発生前に図６の（Ｂ）に示すようにフローが振り分けられていたとして、再振分の結果、図６の（Ｄ）に示すように、コア４あてのフローをコア３に振り分ける。なお、障害の発生の検出は、制御部１１２が処理コアの正常性を常時監視することによって、容易に行うことができる。
【００４０】
このように、特定のパケット処理部に障害が発生した場合に、その障害が発生したパケット処理部を除いてフローを振り返るような振分に切り替えることにより、振分処理におけるフローとパケット処理部の割当変更の負担を軽減しつつ、パケット処理性能への影響を低く抑えたまま、すべてのフローに対するパケット処理を継続することができるようになる。再振分での振分アルゴリズムとしては、１つを除くパケット処理部に振分が行われるような振分関数が用いられる。振分関数は、例えば、並列処理に参加するすべてのパケット処理部からある１つのパケット処理部を除き、残ったパケット処理部をハッシュ関数から導出されるアドレス番地に保存することによって構成される。どのパケット処理部が除かれたかだけが異なるこのような振分関数をパケット処理部の数だけ用意し、障害が発生したパケット処理部に応じてそれらの振分関数の中から該当するものを選択して再振分に使用することによって、障害が発生したパケット処理部に振り分けられたフローを正常なパケット処理部に再振分することができる。
【００４１】
また、再振分による振分アルゴリズムの切替は、複数のパケット処理部のうちの特定のパケット処理部にフローが集中するような偏りが発生した場合に、その偏りを解消するためにも用いることができる。図７は、偏りの解消のための振分先変更の一例を示している。図７の（Ａ）は、コア１〜コア４のうち、コア４に大量のフローが割り当てられている状態を示している。このような偏りを制御部１１２が検出すると、障害発生の場合と同様に制御部１１２は、振分部１０７に対し、再振分の開始と、利用する振分アルゴリズムとを指示する。その結果、振分部１０７は、図７の（Ｂ）に示すように、コア４に行くとされていたフローについて、再振分判断の結果、再振分を要するものとして、コア４での偏りが解消するように、コア１〜コア４の全体にフローが分散するようにフローの再振分を実行する。再振分のアルゴリズムとしては、例えば、異なるハッシュ関数によりフローからハッシュ値を求めて再振分するものが挙げられる。コア４で障害が起きているわけではないので、再振分により一部のフローは依然としてコア４に振り分けられ続けることになる。再振分による振分アルゴリズム切替を行うことにより、パケット処理部への振分フロー数に偏りが発生した場合において、振分処理におけるフローとパケット処理部の割当変更の負担を軽減しつつ、パケット処理性能への影響を低く抑えたまま、より偏りのない振分方法へと変更することができる。
【００４２】
フローの偏りの発生の検出は、例えば、振分部１０７が各処理コアに振り分けたフローの数を制御部１１２にフィードバックし、制御部１１２が、そのフィードバック情報に例えばしきい値を適用することによって実現できる。あるいは、各コアの負荷状況（例えばＣＰＵ使用率）を制御部１１２が収集し、負荷状況に対して例えばしきい値を適用するようにしてもよい。
【００４３】
次に、各フローの振分先の変更後のパケット処理部１０８を予測し、その予測に基づいて予め各フローのパケット処理に必要なデータを各パケット処理部１０８に保持させる切替について説明する。これは振分アルゴリズムには依らないが、ここでは図４（Ａ）を例に説明する。
【００４４】
制御部１１２が、データ保持部１０９の各フローのフロー情報と、振分アルゴリズム、振り分け対象となるパケット処理部１０８の数とから、振分アルゴリズムまたは振分先となるパケット処理部１０８の数の変更により各フローがどのパケット処理部１０８に振り分けられるように変更されるかを予測し、振分部１０７に対して振分アルゴリズムの変更の実施を指示する前に、予め、各パケット処理部１０８のキャッシュ内に、変更後に処理することとなる各フローのパケット処理に必要なデータを保持させる。例えば、パケットのヘッダの5-tupleからハッシュを計算しそのハッシュ値から振分先のパケット処理部を決めている場合には、データ保持部１０９内の各フローの5-tupleとハッシュ計算に用いるハッシュ関数とハッシュ値からパケット処理部１０８を決定する割り当て方法とが分かれば、各フローがどのパケット処理部１０８で処理されることになるかが判断可能である。
【００４５】
さらに、時間変動振分や再振分によって同時に振分先が変更されることとなるフロー数を削減することで、予めパケット処理部１０８が保持すべきデータ量を削減することができ、パケット処理部１０８のキャッシュの必要サイズを削減することができる。
【００４６】
なお、ＱｏＳ処理のシェイピングのように、パケットごとにテーブル情報が更新される処理に関するデータについては、各パケット処理部１０８のキャッシュとデータ保持部１０９との間での情報同期を行い、振分先変更時の情報不整合を防ぐようにする。
【００４７】
次に、本発明に基づくパケット処理装置の具体的な構成について説明する。図８〜図１３は、それぞれ、パケット処理装置の構成例を示している。これらのパケット処理装置は、図４に示したものと同様のものであり、振分部１０７、複数のパケット処理部１０８及び制御部１１２の具体的な構成がそれぞれ明らかになっている点で図４に示したものと異なっているから、図８〜図１２では、パケット処理装置のうち、パケット入力部１０３、パケット出力部１０４、振分部１０７、複数のパケット処理部１０８及び制御部１１２の部分のみが示されている。図１３では、パケット入力部１０３、パケット出力部１０４、振分部１０７、複数のパケット処理部１０８及び制御部１１２に加え、データ保持部１０９も示されている。なお、複数のパケット処理部１０８によって並列処理部１１３が構成されている。また、パケット処理部（処理コア）１０８ごとにそのコアを特定するコアＩＤ（識別番号）が付与されているものとする。
【００４８】
図８は、時間変動切替を実行するパケット処理装置の構成の一例を示している。
【００４９】
振分部１０７は、それぞれ異なった振分アルゴリズムでフローを振り分ける第１振分処理部１２２及び第２振分処理部１２３と、パケット入力部１０４に入力したパケットをフロー単位で第１振分処理部１２２及び第２振分処理部１２３に振り分けて受け渡す振分切替部１２１と、を備えている。振分切替部１２１は、振分数の変更などを行っていない定常時には、第１振分処理部１２２及び第２振分処理部１２３のいずれか一方にのみ、フローを受け渡す。特に振分切替部１２１は、図４及び図５に示した振分部１０７において新旧振分を行うものに相当し、制御部１１２からの指示により、第１振分処理部１２２及び第２振分処理部１２３のうちの一方にフローを受け渡す状態から、徐々に、それらのうちの他方にフローを受け渡す状態に遷移する。
【００５０】
ここに示す例では、パケット処理部へのフローの振分のために、ハッシュ値から直接導出されるアドレス番地にコアＩＤを格納するものとする。各振分処理部１２２，１２３は、フローに対してハッシュ関数を適用してハッシュ値を求め、そのハッシュ値で表されるアドレス番地に格納されたコアＩＤに対応するパケット処理部１０８にそのフローを振り分けるようになっている。第１振分処理部１２２は、例えば、３つのアドレス番地のいずれかがフローに応じて導出されるようなハッシュ関数を使用し、第２振分処理部１２３は、例えば、４つのアドレス番地のいずれかがフローに応じて導出されるようなハッシュ関数を使用する。この場合、第１振分処理部１２２は３分割用振分アルゴリズムによるフロー振分を行い、第２振分処理部１２３は４分割用振分アルゴリズムによるフロー振分を行うことになる。振分部１０７においてこれらのハッシュ関数や振分先数、利用するアドレス番地、コアＩＤは、制御部１１２から指示・設定される。
【００５１】
制御部１１２は、情報収集部１４１と振分指示部１４２とから構成されている。情報収集部１４１は、各パケット処理部１０８の情報を収集・管理し、振分の切替契機を抽出し（図８の［１］）、切替契機とパケット処理部１０８との状況とを振分切替契機通知として振分指示部１４２に通知する（図８の［２］）。振分の切替契機としては、例えば、並列処理数の変動、各パケット処理部での処理フロー数の偏りなどが挙げられ、また、制御部１１２から並列処理部１１３に対して並列数変更指示を出したことも含まれる。振分指示部１４２は、情報収集部１４１の振分切替契機通知から振分方法（例えば、振分先、ハッシュ関数など）を判断し、第１振分処理部１２２及び第２振分処理部１２３のうちの動作していない方に新しい振分方法（振分アルゴリズム）を指示し（図８の［３］）、振分切替部１２１に対して振分切替開始を指示する（図８の［４］）。その際に、振分指示部１４２は、新しい振分アルゴリズムに対して一定時間ごとに少数のフローずつ移っていくように、タイマを参照し、判断しきい値の変更を逐次指示する。
【００５２】
このように振分指示部１４２から指示を受けると、振分切替部１２１は、図５に示したように、パケットデータからハッシュ関数により求められるハッシュ値と、時間変動する判断しきい値から、フローのパケット処理部１０８への振分を第１振分処理部１２２で実施するか第２振分処理部１２３で実施するかをフローごとに判断し、該当する振分処理部にそのフローを受け渡す。上述したように、振分切替部１２１は、制御部１１２からの振分先切替の開始指示から振分先の切り替えを開始する。判断しきい値は、一定時間ごとに少数フローずつ振分先のコアが変更されるように変動し、これによって、フローの受け渡し先は、動作中だった振分処理部からそれまで動作していなかった振分処理部へと徐々に変化し、最終的には、それまで動作していなかった方の振分処理部に全フローが受け渡されることになる。
【００５３】
第１振分処理部１２２が３分割用振分アルゴリズムに対応し、第２振分処理部１２３が４分割用振分アルゴリズムに対応する場合、パケット処理に関する並列数が３であれば、第１振分処理部１２２のみにフローが受け渡されている。ここで例えば、パケット処理に関する並列数が３から４に増えると、制御部１１２は新しいパケット処理部を用意し、振分部１０７に振分の切替開始を指示する。それにより、振分切替部１２１による切替が開始され、まず、少数のフローのみが第２振分処理部１２３に渡されるようになる。制御部１１２は、一定時間経過後に、第２振分処理部１２３へ渡されるフローが増えるようにしきい値を変更させ、このしきい値の変更を繰り返す。その結果、最終的には全フローが第２振分処理部１２３に渡されるようになり、３並列から４並列への移行が完了する。
【００５４】
図９は、時間変動切替を実行するパケット処理装置の構成の別の例を示している。図９に示すものは、図８に示すものと同様のものであるが、制御部１１２の振分指示部１４２は振分部１０７に対して、判断しきい値の逐次指示を行わず、その代わり、振分部１０７内に振分変更部１２４が設けられている点で図８のものと異なっている。振分変更部１２４は、振分指示部１４２から切替開始指示を受けると（図９の［４］）、その内蔵するタイマを参照し、一定時間経過ごとに、振分切替部１２１に対して判断しきい値の変更を指示する（図９の［５］）。この判断しきい値の変更は、フローの受け渡し先が、動作中だった振分処理部からそれまで動作していなかった振分処理部へと徐々に変化し、最終的にはそれまで動作していなかった方の振分処理部に全フローが受け渡されるように行われる。図８に示したものでは判断しきい値が制御部１１２からの逐一の指示により変更されるのに対し、図９に示したものでは、振分部１０７において、タイマ参照により自律的に変更されることになる。
【００５５】
図１０は、時間変動切替によるパケット処理装置であるが、パケット処理部の数に比べて十分に大きい数の仮想ノードを想定し、各仮想ノードに対してコアＩＤを割り当てておき、フローの振分に対しては、フローのハッシュ値から仮想ノードを導出し、導出された仮想ノードがどのコアＩＤに対応しているかに応じて、そのフローをパケット処理部に振り分けるようにしたものである。この構成では、振分部１０７は、仮想ノード振分部１２５と実ノード振分部１２６を備えている。仮想ノード振分部１２５は、パケットデータにハッシュ関数を適用してハッシュ値を求め、そのハッシュ値から、仮想ノードに対応づけられたアドレス番地を導出する。仮想ノードの数は、振分対象となるパケット処理部１０８の数よりも十分に多いが、それでも、複数のフローが同一の仮想ノードに振り分けられる。実ノード振分部１２６は、パケットデータが仮想ノードに振り分けられると、その仮想ノードに対応づけられたアドレス番地に保存されているコアＩＤを検索し、そのパケットデータのフローを検索されたコアＩＤのパケット処理部１０８（すなわち実ノード）へ受け渡す。上述した仮想ノードとコアＩＤとの対応関係は、実ノード振分部１２６内に記録されている。
【００５６】
制御部１１２としては、図８に示したものと同様のものが用いられており、割当変更部１４２は、実ノード振分部１２６に対し、仮想ノードとコアＩＤとの割り当ての変更を指示する（図１０の［３］）。このとき割当変更部１４２は、タイマを参照し、一定時間ごとに１つの仮想ノードずつ振分先の処理コアを変更するように、実ノード振分部１２６に指示する。これにより、振分部１０７は、振分先の切り替えを開始し、切替開始指示からの時間経過に応じて新しい振分に基づいて振り分けられるフローが徐々に多くなるように、フローの各パケット処理部１０８への振分が実行されることになる。
【００５７】
図１０に示したものでは、実ノード振分部１２６での割当変更は、制御部１１２からの逐次の指示によって行われていたが、振分部１０７自体が自律的に割当変更を行うようにしてもよい。図１１は、振分部１０７自体が自律的に割当変更を行うようにした構成を示している。図１１に示すものでは、制御部１１２には割当変更部は設けられず、その代わり、振分部１０７に割当変更部１２７が設けられている。制御部１１２から振分部１０７に対して振分切替契機通知が直接送られており（図１１の［２］）、振分部１０７の割当変更部１２７は、振分切替契機通知を受けて、実ノード振分部１２６に割当変更を指示する（図１１の［３］）。
【００５８】
図１２は、特定のパケット処理部にあてたフローを再振分するように構成したパケット処理装置の構成の一例を示している。
【００５９】
図１２に示す装置では、制御部１１２には、図８及び図９に示すものと同様に、情報収集部１４１と振分指示部１４２が設けられている。振分部１０７には、第１振分処理部１２８と第２振分処理部１２９と再振分判断部１３０が設けられている。
【００６０】
制御部１１２において情報収集部１４１は、各パケット処理部１０８の情報を収集・管理し、再振分を実施する契機を抽出するものである。情報収集部１４１は、各パケット処理部１０８から情報収集を行い、障害発生やフロー数の偏りなどの変化を検出し（図１２の［１］）、フローの再振分を行うべきかどうかを判断して、各パケット処理部１０８の状況に関する情報とともに再振分契機通知を振分指示部１４２に通知する（図１２の［２］）。振分指示部１４２は、再振分契機通知を受け取ると振分指示部１４２は、再振分契機通知から振分方法（例えば、振分先、ハッシュ関数など）を判断し、第１振分処理部１２８及び第２振分処理部１２９に振分方法（振分アルゴリズム）を指示し（図１２の［３］）、再振分判断部１３０に対して、再振分の対象となるコアＩＤと再振分の開始指示などを送る（図１２の［４］）。
【００６１】
第１振分処理部１２８は、振分指示部１４２からの指示に基づく振分アルゴリズム（振分先、ハッシュ関数など）でパケットデータをフロー単位に各パケット処理機能へ振り分け、そのフローのコアＩＤを対応付けるものであるが、データそのものは再振分判断部１３０に渡す。第２振分処理部１２９は、振分指示部１４２からの指示に基いて、第１振分処理部１２８におけるものとな異なる振分アルゴリズム（振分先、ハッシュ関数など）で、パケットデータをフロー単位に各パケット処理部１０８へ振り分ける機能を有する。再振分判断部１３０は、振分指示部１４２からの指示により再振分を行う状態となっている場合には、第１振分処理部１２８から受け取ったフローについて、そのフローに関連づけられているコアＩＤから、そのフローが再振分の対象となっているパケット処理部１０８に振り分けられているか否かを判断する。再振分の対象となっているパケット処理部に振り分けられたフローでなければ、再振分判断部１３０は、そのフローを、フローに関連付けられたコアＩＤで示すパケット処理部１０８に受け渡す。一方、第１振分処理部１２８から受け取ったフローが再振分の対象となるものである場合には、再振分判断部１３０は、そのフローを第２振分処理部１２９に受け渡す。
【００６２】
図１２に示したパケット処理装置に関し、具体的な動作を説明する。
【００６３】
まず、いずれかのパケット処理部（処理コア）１０８において障害が発生した場合を説明する。第２振分処理部１２９には、あらかじめ、並列処理部１１３内の複数のパケット処理部１０８のうち、１つを除くパケット処理部にフローの振分が行われるような振分関数が組み込まれている。いずれかのパケット処理部１０８での障害発生を制御部１１２が検出すると、再振分の対象とする処理コアを特定しその処理コアを除くように再振分を開始する指示が振分指示部１４２から再振分判断部１３０と第２振分処理部１２９とに送られる。第１振分処理部１２８での振分により障害発生コアに振り分けられたフローは、再振分判断部１３０と第２振分処理部１２９とによって、障害が発生していない処理コアに再振分されることになる。このような再振分は、例えば、障害が発生した処理コアのコアＩＤが保存されていたアドレス番地に、再振分関数を呼び出す命令へのポインタを格納することにより実現できる。
【００６４】
次に、いずれかのパケット処理部１０８に対してフローが偏った場合の再振分を説明する。第２振分処理部は、第１振分処理部とは異なるハッシュ関数及びパケットデータの参照範囲などによる振分関数を保持している。再振分の指示が振分指示部１４２から再振分判断部１３０と第２振分処理部１２９とに送られると、偏りが発生した処理コアに割り振られたフローを再振分判断部１３０が検出し、検出したフローを第２振分処理部１２９が再度、振り分けることによって、フローの偏りが是正された振分が行われるようになる。
【００６５】
図１３は、図８に示したパケット処理装置と同様のものであるが、振分先変更を行う場合に、その変更後に各フローがどのパケット処理部１０８に振り分けられるかを予測し、予測結果に基づき、変更後の各フローのパケット処理に必要なデータを各パケット処理部１０８に予め保持させる切替を行うように構成したパケット処理装置の構成の一例を示している。
【００６６】
制御部１１２は、まず、データ保持部１０９に保持されているフロー情報を参照し、制御部１１２において管理している振分アルゴリズムと、振分先となるパケット処理部１０８の数とから、振分アルゴリズムの変更または振分先となるパケット処理部１０８の数の変更により、各フローがどのパケット処理部１０８に振り分けられるようになるかを予測する。そして、制御部１１２は、振分部１１２に対して振分アルゴリズムの変更の実施を指示する前に、各パケット処理部１０８に対し、変更後に処理することになる各フローのパケット処理に必要なデータ（特定データ）を予め保持するよう指示する。その結果、各パケット処理部１０８は、データ保持部１０９から事前の情報取得を行う。
【００６７】
また、制御部１１２は、時間変動振分や再振分を実行する際に、そのような振分切替によって同時に振分先が変更されることとなるフローの数が多くならないような振分指示を行い、それに合わせて各パケット処理部１０８に特定データの取得指示を行うことで、パケット処理部１０８が予め保持しなければならないデータ量を削減することができ、パケット処理部１０８のキャッシュの必要サイズを削減することができる。
【００６８】
なお、ＱｏＳ処理のシェイピングのように、パケットごとにテーブル情報が更新される処理に関するデータについては、各パケット処理部１０８のキャッシュとデータ保持部１０９との間での情報同期を行い、振分先変更時の情報不整合を防ぐようにする。
【００６９】
以上、本発明の実施形態について、パケット処理が単一のプロセッサ内の複数の処理コア（パケット処理部）によて行われる場合を例に挙げて説明した。しかしながら、本発明の実施の形態は上記のものに限られるのものではない。例えば、図１４に示すように、パケット処理装置内に複数のプロセッサを設けてこれらの複数のプロセッサにおいてパケット処理を並列に実行するようにした場合にも、本発明の並列パケット処理方法を適用することができる。図１４に示したパケット処理装置１５１は、図４に示したパケット処理装置における処理コア（パケット処理部１０８）をそれぞれパケット処理用プロセッサ１５３に置き換え、また、振分部１０７及び制御部１１２についても、それぞれ独立のプロセッサ（振分用プロセッサ１５２及び制御用プロセッサ１５５）に置き換えたものである。この構成は、マルチプロセッサ構成のものであり、内部バス１０６及びメモリバス１１０は、いわゆるプロセッサ内バスではなく、プロセッサ間バスとして、パケット処理装置１５１内に設けられることになる。また、データ保持部１５４は、複数のプロセッサ１５３に対して共通の共有メモリとして設けられている。さらに、本発明の並列パケット処理方法は、ネットワークに設けられた複数のノードに分散させてパケット処理を行う場合にも適用できる。図１５は、ネットワークを含むシステムとして構成されたパケット処理システムを示している。図１５に示すシステムでは、ネットワーク１６１に対して、振分ノード１６２と、複数のパケット処理ノード１６３と、データサーバ１６４と、制御ノード１６５とが設けられている。パケット処理の対象となるパケットはネットワーク１６１に対して、直接、入出力している。ここで、振分ノード１６２は振分部１０７と同様の処理を行い、パケット処理ノード１６３はパケット処理部１０８と同様の処理を行い、データサーバ１６４はデータ保持部１０９と同等の機能を有し、制御ノード１６５は制御部１１２と同様の機能を有している。図１５に示すようなシステムも、本発明の並列パケット処理装置の範疇に含まれるものである。
【符号の説明】
【００７０】
１０１，１５１    パケット処理装置
１０２，１０３    インタフェース部
１０４    パケット入力部
１０５    パケット出力部
１０６    内部バス
１０７    振分部
１０８    パケット処理部
１０９，１５４    データ保持部
１１０    メモリバス
１１１    プロセッサ
１１２    制御部
１１３    並列処理部
１２１    振分切替部
１２２，１２８    第１振分処理部
１２３，１２９    第２振分処理部
１２４    振分変更部
１２５    仮想ノード振分部
１２６    実ノード振分部
１２７，１４３    割当変更部
１３０    再振分判断部
１４１    情報収集部
１４２    振分指示部
１５２    振分用プロセッサ
１５３    パケット処理用プロセッサ
１５５    制御用プロセッサ
１６１    ネットワーク
１６２    振分ノード
１６３    パケット処理ノード
１６４    データサーバ
１６５    制御ノード
【図１】
0005672504.tif 000002
【図２】
0005672504.tif 000003
【図３】
0005672504.tif 000004
【図４】
0005672504.tif 000005
【図５】
0005672504.tif 000006
【図６】
0005672504.tif 000007
【図７】
0005672504.tif 000008
【図８】
0005672504.tif 000009
【図９】
0005672504.tif 000010
【図１０】
0005672504.tif 000011
【図１１】
0005672504.tif 000012
【図１２】
0005672504.tif 000013
【図１３】
0005672504.tif 000014
【図１４】
0005672504.tif 000015
【図１５】
0005672504.tif 000016