(57)【要約】【課題】  連続入力される複数パケットのプロトコル処理を効率的に並列処理する並列パケット処理装置を提供する。【解決手段】  並列パケット処理装置は、受信パケットを入力して、処理時間一定のヘッダ解析と、ペイロード長に応じて処理時間可変のペイロード処理を実施して、それぞれの結果を出力する並列処理部と、受信パケットを空き状態の並列処理部のいずれかに振り分ける振り分け部と、受信パケットのコネクションに関連するコネクション情報を格納する記憶部と、並列処理部からのヘッダ解析結果とペイロード処理結果をそれぞれ受信してコネクション処理を実施してコネクション情報を更新する順序処理部と、順序処理部からの指示により受信パケットデータの書き込み制御するデータ書き込み制御部を備える。【選択図】  図１
2014175781.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介してパケットデータを受信する並列パケット処理装置であって、
受信パケットを入力するネットワークインターフェース部と、
前記受信パケットを入力として、前記受信パケットのヘッダ部を解析するヘッダ解析と、ペイロード長に応じて処理時間可変のペイロード処理を実施して、それぞれの結果を出力する複数の並列処理部と、
前記受信パケットを、前記複数の並列処理部のうち、空き状態の前記並列処理部を選択して振り分ける振り分け部と、
前記受信パケットのコネクションに関連するコネクション情報を格納する記憶部と、
前記並列処理部からのヘッダ解析結果とペイロード処理結果をそれぞれ受信してコネクション処理を実施してコネクション情報を更新する順序処理部と、
前記受信パケットを格納するバッファと、
前記順序処理部からの指示により、前記バッファに格納されていた受信パケットデータのメモリへの書き込み制御を実施するデータ書き込み制御部と、
を備えることを特徴とする並列パケット処理装置。
【請求項２】
前記記憶部は、コネクション情報として、前記ヘッダ解析の結果に基づいて確定した情報を格納する一時コネクション情報と、一つのコネクションに属する前記複数のパケットのヘッダ解析とペイロード処理が終了した時に確定する情報を格納する正規コネクション情報を保持し、
前記順序処理部は、前記ヘッダ解析結果を受信した場合に、前記一時コネクション情報のパケット数カウンタをインクリメントして更新し、
前記ペイロード処理結果を受信した場合に、前記パケット数カウンタをデクリメントして更新し、
前記パケット数カウンタをデクリメントして更新した際にゼロになった場合に、前記一時コネクション情報で前記正規コネクション情報を上書きして更新することを特徴とする、
請求項１に記載の並列パケット処理装置。
【請求項３】
前記順序処理部は、前記正規コネクション情報の更新の必要がある場合に、前記並列処理部にペイロード処理結果待ち合わせフラグを有効にして出力し、
前記並列処理部は、前記ペイロード処理結果待ち合わせフラグの有効を入力した場合に前記ヘッダ解析結果と前記ペイロード処理結果を１つの処理結果として出力すること、
を特徴とする請求項２に記載の並列パケット処理装置。
【請求項４】
前記順序処理部を複数設け、前記受信した複数のパケットのそれぞれのプロトコルが異なる、もしくは、属するコネクションが異なる場合に、それぞれの受信パケットを前記複数の順序処理部のそれぞれで処理させることを特徴とする、
請求項２に記載の並列パケット処理装置。
【請求項５】
前記振り分け部は、並列処理コアの負荷を検出して、ネットワーク処理、アプリケーション処理、及び順序処理のそれぞれ割り当てるコア数を変更することを特徴とする、
請求項２に記載の並列パケット処理装置。
【請求項６】
複数の並列処理部を用いて、ネットワークを介して受信した複数のパケットのプロトコル処理を行う並列処理装置における並列パケット処理方法であって、
第１の並列処理部は、前記受信した複数のパケットを、複数の第２の並列処理部のうち、空き状態の前記第２の並列処理部を選択して振り分け、前記振り分けた前記第２の並列処理部に対応するバッファ内の領域に前記パケットを格納し、
前記複数の第２の並列処理部のそれぞれは、前記複数のパケットを受信した順に入力し、処理時間一定のヘッダ解析と、ペイロード長に応じて処理時間可変のペイロード処理を実施して、それぞれの結果を出力し、
前記第１の並列処理部は、前記パケットが属するコネクションに関連するコネクション情報を記憶部に格納し、
前記第１の並列処理部は、前記ヘッダ解析の結果と前記ペイロード処理の結果に基づいて、前記コネクション情報を更新し、
前記第１の並列処理部は、前記コネクション情報に基づいて、前記バッファに格納されていた前記パケットのメモリへの書き込み制御を行う、
ことを特徴とする並列パケット処理方法。
【請求項７】
前記記憶部は、コネクション情報として、前記ヘッダ解析の結果に基づいて確定した情報を格納する一時コネクション情報と、一つのコネクションに属する前記複数のパケットのヘッダ解析とペイロード処理が終了した時に確定する情報を格納する正規コネクション情報を保持し、
前記第１の並列処理部は、
前記ヘッダ解析結果を受信した場合に、前記一時コネクション情報のパケット数カウンタをインクリメントして更新し、
前記ペイロード処理結果を受信した場合に、前記パケット数カウンタをデクリメントして更新し、
前記パケット数カウンタをデクリメントして更新した際にゼロになった場合に、前記一時コネクション情報で前記正規コネクション情報を上書きして更新することを特徴とする請求項６に記載の並列パケット処理方法。
【請求項８】
前記第１の並列処理部は、
前記正規コネクション情報の更新の必要がある場合に、前記第２の並列処理部にペイロード処理結果待ち合わせフラグを有効にして出力し、
前記第２の並列処理部は、
前記ペイロード処理結果待ち合わせフラグの有効を入力した場合に、前記ヘッダ解析結果と前記ペイロード処理結果を１つの処理結果として出力することを特徴とする請求項７に記載の並列パケット処理方法。
【請求項９】
前記第１の並列処理部は、
前記受信した複数のパケットのそれぞれのプロトコルが異なる、もしくは、属するコネクションが異なる場合に、前記受信した複数のパケットのそれぞれに対して、前記コネクション情報の更新処理を別々に行うことを特徴とする請求項７に記載の並列パケット処理方法。
【請求項１０】
前記第１の並列処理部は、
前記複数の第２の並列処理部の負荷を検出して、前記負荷に基づいて、前記第１の処理部及び前記第２の処理部に割り当てる前記並列処理部の数を変更することを特徴とする請求項７に記載の並列パケット処理方法。
【請求項１１】
第１の並列処理部は、
前記受信した複数のパケットを、前記複数の第２の並列処理部のうち、空き状態の前記第２の並列処理部を選択して振り分ける処理と並行して、前記パケットを前記バッファに格納し、前記ヘッダ解析の結果に基づいて前記コネクション情報が更新されると、前記バッファ内の前記パケットを前記メモリに出力することを特徴とする請求項７記載の並列パケット処理方法。
【請求項１２】
複数の並列処理部を用いて、ネットワークを介して受信した複数のパケットのプロトコル処理を行う並列処理装置における並列パケット処理方法を実行するためのプログラムを格納した、計算機が読み取り可能な記憶媒体であって、
第１の並列処理部は、前記受信した複数のパケットを、複数の第２の並列処理部のうち、空き状態の前記第２の並列処理部を選択して振り分け、前記振り分けた第２の並列処理部に対応するバッファ内の領域に前記パケットを格納し、
前記複数の第２の並列処理部のそれぞれは、前記複数のパケットを受信した順に入力し、処理時間一定のヘッダ解析と、ペイロード長に応じて処理時間可変のペイロード処理を実施して、それぞれの結果を出力し、
前記第１の並列処理部は、前記パケットが属するコネクションに関連するコネクション情報を記憶部に格納し、
前記第１の並列処理部は、前記ヘッダ解析の結果と前記ペイロード処理の結果に基づいて、前記コネクション情報を更新し、
前記第１の並列処理部は、前記コネクション情報に基づいて、前記バッファに格納されていた前記パケットのメモリへの書き込み制御を行う、動作を実行するためのプログラムを格納したことを特徴とする記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット処理装置に関する。特に、プロトコル処理の並列化に関する。
【背景技術】
【０００２】
近年、プロセッサの進化は、クロック周波数の向上からマルチコア化へと向かっており、今後もプロセッサに搭載されるコア数の増加が見込まれている。このようなマルチコアプロセッサを活用するためには、ネットワーク入出力性能が重要となる。従来、ネットワーク処理は、単一コアを割り当てて処理されていた。そのためコアのクロック周波数向上が限界に達している現在ではネットワーク処理がボトルネックとなり、コア数の増加に見合った性能向上が困難となっている。
【０００３】
そこで、汎用的なプロセッサに代わり、専用ハードウェアによってネットワークプロトコル処理を行うＴＯＥ（ＴＣＰ／ＩＰ  Ｏｆｆｌｏａｄ  Ｅｎｇｉｎｅ）が提案されている。例えば特許文献１に示されるデータ受信装置は、ＴＣＰ(Transmission Control Protocol)やＵＤＰ(User Datagram Protocol)の受信処理を効率的に並列化して実行し、処理速度を向上させることができる、と記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４９２２２７９号公報（特開２０１０−１０９７４６号公報）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ネットワークプロトコル処理は、パケット毎にヘッダ解析、チェックサム判定、コネクション情報処理、ホストメモリへのデータ書き込み等の複数のステップに分かれる。特許文献１では、前記複数のステップのうち並列処理可能なステップを並列化することで処理速度を向上させている。しかしながら、特許文献１による並列化は、１つのパケットの処理の並列処理であり、連続する複数パケットの並列処理については開示されておらず、さらなる高速化は困難である。また、例えば特許文献１のデータ受信装置を複数備えて単純に並列処理を行うことはできない。なぜなら、ＴＣＰ／ＩＰのようなコネクション型のプロトコル処理は、連続するパケットを受信順に処理しなければならない順序処理が存在するため、同時並列処理することはできないためである。
【０００６】
本発明は、上記課題に鑑みてなされたものであって、連続入力される複数パケットのプロトコル処理を効率的に並列処理する並列パケット処理方法、装置およびプログラムを提供することを目的としている。具体的には、プロトコル処理におけるヘッダ解析とペイロード処理とを関連付けしないコネクション管理を行うことを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明は、ネットワークを介してパケットデータを受信する並列パケット処理装置であって、
受信パケットを入力するネットワークインターフェース部と、
前記受信パケットを入力として、処理時間一定のヘッダ解析と、ペイロード長に応じて処理時間可変のペイロード処理を実施して、それぞれの結果を出力する並列処理部と、
前記受信パケットを空き状態の前記並列処理部のいずれかに振り分ける振り分け部と、
前記受信パケットのコネクションに関連するコネクション情報を格納する記憶部と、
前記並列処理部からのヘッダ解析結果とペイロード処理結果をそれぞれ受信してコネクション処理を実施してコネクション情報を更新する順序処理部と、
前記受信パケットを格納するバッファと、
前記順序処理部からの指示により受信パケットデータの書き込み制御を実施するデータ書き込み制御部と、を備える並列パケット処理装置として構成される。
【０００８】
また、本発明は、並列パケット処理装置における並列パケット処理方法として構成される。更に、本発明は、並列パケット処理装置で実行されるプログラムとして構成される。
【発明の効果】
【０００９】
本発明によれば、連続入力される複数パケットのプロトコル処理をマルチコアによって並列処理する並列パケット処理装置を提供することができる。その際に、プロトコル処理におけるヘッダ解析とペイロード処理とを関連付けしないコネクション管理を行うことで、プロトコル処理の高スループット化を実現できる。
【図面の簡単な説明】
【００１０】
【図１】第一の実施例に係る並列パケット処理装置の構成図である。
【図２】第一の実施例に係るタイムチャートを示す図である。
【図３Ａ】第一の実施例に係る正規コネクション情報テーブルを示す図である。
【図３Ｂ】第一の実施例に係る一時コネクション情報テーブルを示す図である。
【図４】第一の実施例に係る並列処理部の出力結果を示す図である。
【図５】第一の実施例に係る並列処理部の処理フローを示す図である。
【図６Ａ】第一の実施例に係る順序処理部の処理フローを示す図である。
【図６Ｂ】第一の実施例に係る順序処理部の処理フローを示す図である。
【図７】第二の実施例に係る並列パケット処理装置の構成図ある。
【図８】第二の実施例に係るタイムチャートを示す図である。
【図９】第三の実施例に係る並列パケット処理装置の構成図である。
【図１０】第四の実施例に係る並列パケット処理装置の構成図である。
【図１１】第四の実施例に係るホストプロセッサの処理フローを示す図である。
【図１２】第一の実施例に係る計算機システムの構成図である。
【発明を実施するための形態】
【００１１】
連続入力される複数パケットの並列プロトコル処理を考える場合、例えば、プロトコル処理のうち、並列処理可能な処理（例えば、ヘッダ解析、チェックサム計算）を複数の並列処理部を設けて並列処理し、残りの順序処理（例えば、コネクション情報処理）を後段に配置された単一の順序処理部により順序処理する方法が考えられる。
【００１２】
しかしながら、このような単純な並列処理方法をとった場合、新たな課題が生まれる。一般的に、パケット毎にペイロード(payload、通信パケットのうちヘッダ部分を除いたデータ本体)長は異なるためパケット毎に並列処理の時間は異なる。そのため、パケットの受信順とは異なる順序で並列処理部の結果がそれぞれの並列処理部から出力されてしまう。プロトコル処理は整列されたパケット受信に最適化されているため、順序が入れ違った並列処理結果を順序処理部で処理した場合、連続するパケットの一部が欠損するパケットロスと判定される等によりパフォーマンス低下の原因となる。
【００１３】
また、並列処理結果を順序整列してから順序処理部へ入力する方法も考えられるが、この方法にも課題がある。順序整列は一般的に整列する要素数をｎとするとｎの２乗に比例した計算量を必要とし、実装コストが非常に高い。そのため、順序整列の処理によって新たなボトルネックを生じさせてしまう。
【００１４】
本発明による並列パケット処理装置の好ましい例では、並列処理部は、パケットのヘッダ部を解析する、処理時間が一定なヘッダ解析と、ペイロード長に応じて処理時間が可変なペイロード処理の結果を別々に出力させる。順序処理部ではパケット数カウンタを設けて、ヘッダ解析結果の処理回数とペイロード処理結果の処理回数を管理して照合するだけでパケット順序入れ違いやパケットロス発生の課題を解決する。即ち、本発明の好ましい例では、パケットの受付順にヘッダ解析を行った処理結果の数と、それぞれの処理時間が異なるペイロード処理の処理結果の数とを、コネクション毎に照合することで並列パケット処理における上記の問題を解決する。
【００１５】
また、本発明の好ましい例によれば、コネクション毎にヘッダ解析結果とペイロード処理結果の照合を行うので、同じコネクションに属するパケットと別のパケットがそれぞれ別々の並列処理部で処理されても、パケット順序入れ違いやパケットロスをチェックできる。
【００１６】
以下、本発明の実施例について図面を用いて詳細に説明する。  
【実施例１】
【００１７】
本発明の第一の実施例に係る並列パケット処理装置の構成について、図１を用いて説明する。
【００１８】
並列パケット処理装置は、ネットワークインターフェース部１００、振り分け部１０１、並列処理部（１０４−１、１０４−２、・・、１０４−Ｎ（ただしＮは並列数）、以下では特に断らない限りこれらを総称して１０４と表す）、バッファ１２１、キュー１２０、順序処理部１０７、記憶部１０８、データ書き込み制御部１１２、ホストメモリ１１３を備えた専用装置である。
【００１９】
ネットワークインターフェース部１００は、例えばＰＨＹ(PHYsical Layer)やＭＡＣ（Media Access Control）であり、ネットワークから受信したＥｔｈｅｒｎｅｔ（登録商標）フレーム（以後Ｅｔｈｅｒｎｅｔフレームと同等の意味でパケットと記す）を出力する。
【００２０】
振り分け部１０１は、振り分け制御部１０２、それぞれが対応する並列処理部１０４に接続されたＦＩＦＯ(First In, First Out)（１０３−１、１０３−２、・・、１０３−Ｎ、以下では特に断らない限りこれらを総称して１０３と表す）を備え、ネットワークインターフェース部１００より入力される受信パケットを後段の並列処理部に振り分ける。ＦＩＦＯ１０３は、最初に入ってきたデータを最初に出力するメモリであり、データ入力クロック周波数とデータ出力クロック周波数が異なる場合のクロックドメイン変換を行う。また、ＦＩＦＯ１０３は、ＦＩＦＯにデータが存在しない場合は格納データが存在しないことを示すｅｍｐｔｙ信号を状態信号として振り分け制御部１０２に出力する。振り分け制御部１０２は、受信パケットが入力された場合、ＦＩＦＯ１０３のｅｍｐｔｙ信号を参照して格納データが存在しないＦＩＦＯへ前記受信パケットを書き込む。次に、振り分け制御部１０２は、前記ｅｍｐｔｙ信号を参照して受信パケットを格納しているＦＩＦＯ１０３から受信パケットを読み出して、当該ＦＩＦＯ１０３に接続されている並列処理部１０４への受信パケットの出力を開始する。ＦＩＦＯ１０３に受信パケットが残っている間は、ｅｍｐｔｙ信号はＯＦＦになる。従って、当該ＦＩＦＯ１０３に接続されている並列処理部１０４はパケットの処理中であるため、当該並列処理部には新たな受信パケットは振り分けられない。
【００２１】
例えば、ネットワークインターフェース部１００からの受信パケットは、バス幅６４ビット、クロック周波数１５６.２５ＭＨｚで振り分け部１０１に入力されるものとすると、振り分け部１０１はバス幅３２ビット、クロック周波数６２.５ＭＨｚ、５並列（Ｎ＝５）として出力する((156.25/62.5)X(64/32)=2.5X2=5)。つまり、後段の並列処理部１０４は、並列度を上げることにより、クロック周波数を落とすことができる。また、格納データが存在しないＦＩＦＯ１０３に受信パケットを書き込むことにより、受信パケットの到着順に並列処理部１０４への受信パケットの出力が開始される。
【００２２】
並列処理部１０４は、ヘッダ解析部１０５、及びペイロード処理部１０６を備える。ヘッダ解析部１０５は、パケットのヘッダ部を解析するものであり、例えば当該パケットのプロトコル種別（ＥｔｈｅｒｎｅｔＩＩ、ＴＣＰ、ＩＰ、ＵＤＰ、ＡＲＰ(Address Resolution Protocol)、ＩＣＭＰ(Internet Control Message Protocol)等）、アドレス、ポート番号、ＡＣＫ番号、ＳＥＱ番号等の情報を後段の順序処理部１０７が利用しやすい形にして出力する。ペイロード処理部１０６は、主にペイロード部分に関するデータ処理を実施するものであり、例えばデータ処理としてＴＣＰチェックサム計算の場合には疑似ヘッダを付加してパケット全体を２バイト毎に加算していき、結果の総和値がゼロに一致するか否かを判定し、結果の総和値がゼロに一致していればデータエラーがない正常パケットとして判定結果を出力する。また、ペイロード処理部１０６が実施するデータ処理は、チェックサム計算以外にも例えば、ＩＰｓｅｃ（Security Architecture for Internet Protocol）通信に必要とされる暗号／復号処理、データの圧縮伸長処理等、が挙げられる。復号処理の場合には、復号済みデータはバッファ１２１に書き戻す。復号処理に必要とされる鍵データは、コネクション情報として順序処理部１０７が管理しているものとし、並列処理部１０４が順序処理部１０７に問い合わせることで提供される。
【００２３】
バッファ１２１には、振り分け部１０１より入力される受信パケットを格納する。また、データ書き込み制御部１１２の指示に従って、当該受信パケットのペイロード部分を出力したり、消去したりする。バッファ１２１には、ＦＩＦＯ１０３と同じ受信パケットが格納される。
【００２４】
前記ヘッダ解析結果と前記ペイロード処理結果は、後段のキュー１２０へ出力される。キュー１２０は、入力が開始された順、あるいは入力が完了した順に結果を順序処理部１０７へ出力する。
【００２５】
順序処理部１０７は、記憶部１０８より順序処理プログラム１０９をロードして、入力されたヘッダ解析結果とペイロード処理結果をもとに後述するコネクション情報に関連するプロトコル処理を実施するプロセッサである。コネクション情報に関連するプロトコル処理とは、例えば、受信パケットがどのコネクションのものなのかをＩＰアドレスとポート番号から特定するコネクション検索、受信パケットのシーケンス番号（ＳＥＱ番号）が順番通りに正しいかどうかをコネクション情報内の情報と比較することでチェック、コネクション情報にある返信すべきＡＣＫ（肯定応答）番号の更新、受信パケットのペイロードデータの書き込み先アドレス計算、等である。また、順序処理部１０７は、コネクション検索のためにＣＡＭ（Content Addressable Memory）を備えていてもよく、その場合、順序処理部１０７は、宛先ＩＰアドレスやポート番号をＣＡＭに格納し、当該ＣＡＭに検索要求を出すことで１〜数サイクルでコネクション特定が可能となる。
【００２６】
記憶部１０８は、順序処理プログラム１０９、正規コネクション情報テーブル１１０、一時コネクション情報テーブル１１１を格納し、順序処理部１０７からのアクセス要求に従ってデータを参照して更新させる。
【００２７】
データ書き込み制御部１１２は、順序処理部１０７からのデータ書き込み指示（書き込み先アドレス、書き込みサイズ、転送対象データのバッファ１２１内の格納位置情報を含む）の受け付け処理、バッファ１２１のバッファリング完了の待ち合わせ処理、バッファ１２１より読み出したデータをホストメモリ１１３へ転送書き込み、等を実施する。
【００２８】
ホストメモリ１１３は、受信パケットのペイロードデータを格納するための記憶部である。ホストメモリ１１３に格納された当該ペイロードデータは、図示していないホストＣＰＵで動作するアプリケーションによって利用される。
【００２９】
図１には、専用装置である並列パケット処理装置の構成を示したが、第一の実施例をマルチプロセッサ（複数の並列処理部）からなる計算機システムで実施する場合を図１２に示す。図１２では、図１に示した各部との対応を示す符号を付した。図１２では、複数ある並列処理部のうち、特定の１台（並列処理部＃０（１０４））で振り分け部（１０１）、順序処理部（１０７）、及びデータ書き込み制御部（１１２）を実行し、その他の並列処理部＃１〜＃Ｎ（１０４−１〜Ｎ）で並列パケット処理を実行する。並列処理部＃０（１０４）のキャッシュメモリにはバッファ（１２１）及びキュー（１２０）に対応する記憶領域を設ける。
【００３０】
図３Ａは、正規コネクション情報テーブル１１０の一例であり、図３Ｂは一時コネクション情報テーブル１１１の一例である。図３Ａの正規コネクション情報テーブル１１０はコネクション毎に設けられており、一つのコネクションに属する複数のパケットのヘッダ解析とペイロード処理が終了した時に確定する情報が格納される。図３Ｂの一時コネクション情報テーブル１１１は、ヘッダ解析結果に基づいて確定した情報が格納され、一つのコネクションに属する複数のパケットの一つを解析するごとに内容が更新される。
【００３１】
テーブル有効フラグ３００、３５０は、当該テーブルが有効か無効かを示す情報であり、コネクションが有効の場合には、当該コネクションのテーブル有効フラグ３００、３５０は「ＯＮ」になり、コネクションが無効の場合には、「ＯＦＦ」になる。正規コネクション情報テーブル１１０は、大きく分けて受信系項目と送信系項目とコネクション管理系項目に分けられる。
【００３２】
コネクション管理系項目には、正規コネクション情報更新タイムアウト値３０１、正規コネクション情報前回更新時刻３０２、あて先ＩＰアドレス３０３、あて先ポート番号３０４から構成される。
【００３３】
受信系項目におけるＡＣＫ番号３０５は、次に受信すべきパケットのＳＥＱ番号を示す情報であり、順序処理部は当該ＡＣＫ番号と次に受け取った受信パケットのＳＥＱ番号が一致しているかどうかをチェックし、番号が不一致の受信パケットを何度か受信した場合は、パケットロス等が発生したと判断し、再送要求を送信したりする。ホストメモリ受信バッファサイズ３０６は、ホストメモリ１１３上のデータ書き込みのためのメモリ領域のサイズを示す。ホストメモリ受信バッファ先頭アドレス３０７は、前記受信バッファの先頭アドレスを示す。ホストメモリ書き込み済みサイズ３０８は、前記受信バッファに既に書き込まれたデータ領域のサイズを示す。
【００３４】
同様に、送信系項目には、シーケンス番号３０９、スライディングウィンドウ３１０、ホストメモリ送信バッファサイズ３１１、ホストメモリ送信バッファ先頭アドレス３１２、ホストメモリ送信済みサイズ３１３から構成され、順序処理部１０７がそれぞれ送信処理の際に更新していく情報である。
【００３５】
一時コネクション情報テーブル１１１は、受信系と送信系に分けられる。受信系は、一時ＡＣＫ番号３５１、一時ホストメモリ書き込み済みサイズ３５２、パケット数カウンタ３５３、一時コネクション情報更新回数カウンタ３５４で構成され、送信系は、一時スライディングウィンドウ３５５から構成される。スライディングウィンドウは、ウィンドウと呼ばれる概念を設け、そのウィンドウに空きがある限り、受信側からの応答を待たずに送信側が送信を行なうというものである。
【００３６】
パケット数カウンタ３５３は、順序処理部１０７がヘッダ解析結果を正常処理完了の度にインクリメントし、ペイロード処理結果を正常処理完了の度にデクリメントしていく管理情報である。パケット数カウンタがゼロになった場合（ヘッダ解析とペイロード処理のそれぞれの処理が完了したパケットの数が一致した場合）に一時コネクション情報テーブルで正規コネクション情報テーブルを更新する。
【００３７】
一時コネクション情報更新回数カウンタ３５４は、順序処理部１０７がヘッダ解析結果をもとに一時コネクション情報テーブルを更新した場合にインクリメントしていく管理情報である。
【００３８】
図４に並列処理部１０４がヘッダ解析又はペイロード処理の後で順序処理部１０７へ出力する結果情報４００の例を示す。結果種別４０１は、当該結果情報がヘッダ解析結果なのか、ペイロード処理結果なのか、あるいは両方の結果を含むものなのかを示す項目である。ヘッダ解析の結果である、プロトコル種別４０２は、当該パケットのプロトコル種別を示し、ＴＣＰ、ＩＰ、ＵＤＰ、ＩＣＭＰ、ＡＲＰ等を示し、あて先ＩＰアドレス４０３、あて先ポート番号４０４は、パケットのあて先情報を示す。ペイロード処理結果４０５は、例えばチェックサム計算が正常判定か、異常判定か、計算中で未確定かを示す。
【００３９】
また、結果情報４００には、図示した以外にも、例えば、送信元ＩＰアドレス、送信元ポート番号、送信元ハードウェアアドレス、あて先ハードウェアアドレス、パケット長、ペイロード長、ＴＣＰオプション情報、ＩＰオプション情報、ＡＣＫ番号、ＳＥＱ番号、ウィンドウサイズ、コントロールフラグ、当該パケットのバッファ１２１内の格納先アドレス情報等を含む。
【００４０】
次に、図２は、実施例１による並列パケット処理装置の動作のタイムチャートである。以降の説明では、本並列パケット処理装置に、時刻順にペイロードサイズ１００のパケット１、ペイロードサイズ３０のパケット２、ペイロードサイズ５０のパケット３が連続でネットワークインターフェース部１００を介して入力されたものとする。振り分け部１０１は、各ＦＩＦＯ１０３からのｅｍｐｔｙ信号に基づいて、処理中でない並列処理部１０４にパケットを振り分ける。即ち、並列処理部１０４が、接続されているＦＩＦＯ１０３から所定の単位（４バイト）でパケットデータを読み出して処理している間は、ＦＩＦＯ１０３からのｅｍｐｔｙ信号は「ＯＦＦ」である。
【００４１】
図２では、振り分け部１０１が、（１）パケット１を並列処理部＃１（１０４−１）に振り分けた後、並列処理部＃１（１０４−１）でパケット１の処理中にパケット２が受信されたので、パケット２をｅｍｐｔｙ信号が出力されている並列処理部＃２（１０４−２）に割り振り、（２）並列処理部＃２（１０４−２）でのパケット２の処理後（並列処理部＃２はｅｍｐｔｙ信号を出力）にパケット３が受信されたが、その時点では並列処理部＃１（１０４−１）はまだパケット１の処理中であったため、受信したパケットを先ほどと同じ並列処理部＃２（１０４−２）に割り振った場合を示している。その結果、パケット１を並列処理部＃１（１０４−１）に振り分け、パケット２と３を並列処理部＃２（１０４−２）に振り分けることになる。また、前記のパケット１、パケット２、パケット３はすべて同一コネクションのパケットとする。
【００４２】
ネットワークインターフェース部１００は、パケット１の出力を開始する（２００）。振り分け部１０１は、パケット１を空き状態のＦＩＦＯ＃１（１０３−１）に入力する。次に、振り分け部１０１は、当該ＦＩＦＯ＃１からパケット１を例えば４バイト単位で読み出して複数サイクルに渡って並列処理部＃１（１０４−１）へ出力する（２０１）。並列処理部＃１（１０４−１）は、入力されたパケットデータを４バイト単位で逐次解析して結果を出力する（２０３）。順序処理部１０７は、ヘッダ解析結果から後述するコネクション処理を実施し、一時コネクション情報テーブル１１１内のパケット数カウンタ３５３をインクリメントして更新し、ペイロードデータの書き込み先アドレス情報とともに書き込み指示をデータ書き込み制御部１１２に出力する（２０７）。データ書き込み制御部１１２は、データ書き込み指示を受け付けて、当該パケットのバッファ１２１への格納完了を待つ。格納完了後に、ホストメモリ１１３へ当該パケットのペイロードをバッファ１２１から読み出す指示を送り（２１５）、ホストメモリ１１３へのデータ転送を行う（２１６）。
【００４３】
同様に、パケット２をネットワークインターフェース部１００が出力を開始する（２０４）。振り分け部１０１は、パケット２を空き状態のＦＩＦＯ＃２（１０３−２）に入力する。次に、振り分け部１０１は、当該ＦＩＦＯ＃２（１０３−２）からパケット２を例えば４バイト単位で読み出して複数サイクルに渡って並列処理部＃２（１０４−２）へ出力する（２０５）。並列処理部＃２（１０４−２）は、入力されたパケットデータを４バイト単位で逐次解析して結果を出力する（２０８）。順序処理部１０７は、ヘッダ解析結果から後述するコネクション処理を実施し、一時コネクション情報テーブル１１１内のパケット数カウンタ３５３をインクリメントして更新し、ペイロードデータの書き込み先アドレス情報とともに書き込み指示をデータ書き込み制御部１１２に出力する（２０９）。データ書き込み制御部１１２は、データ書き込み指示を受け付けて、当該パケットのバッファ１２１への格納完了を待つ。格納完了後に、ホストメモリ１１３へ当該パケットのペイロードをバッファ１２１から読み出す指示を送り（２１９）、ホストメモリ１１３へのデータ転送を行う（２２０）。
【００４４】
同様に、パケット３をネットワークインターフェース部１００が出力を開始する（２１１）。振り分け部１０１は、パケット３を空き状態のＦＩＦＯ＃２（１０３−２）に入力する。次に、振り分け部１０１は、当該ＦＩＦＯ＃２からパケット３を例えば４バイト単位で読み出して複数サイクルに渡って並列処理部＃２（１０４−２）へ出力する（２１２）。並列処理部＃２（１０４−２）は、入力されたパケットデータを４バイト単位で逐次解析して結果を出力する（２１７）。順序処理部１０７は、ヘッダ解析結果から後述するコネクション処理を実施し、一時コネクション情報テーブル１１１内のパケット数カウンタ３５３をインクリメントして更新し、ペイロードデータの書き込み先アドレス情報とともに書き込み指示をデータ書き込み制御部１１２に出力する（２１８）。データ書き込み制御部１１２は、データ書き込み指示を受け付けて、当該パケットのバッファ１２１への格納完了を待つ。格納完了後に、ホストメモリ１１３へ当該パケットのペイロードをバッファ１２１から読み出す指示を送り（２２２）、ホストメモリ１１３へのデータ転送を行う（２２３）。
【００４５】
ここで、パケット１に対してパケット２はペイロード長が短いため、パケット２のペイロード処理結果がパケット１のペイロード処理結果よりも先に並列処理部＃２（１０４−２）から出力される（２１０）。順序処理部１０７は、ペイロード処理結果が出力されると、後述するコネクション処理を実施し、一時コネクション情報テーブル１１１内のパケット数カウンタ３５３をデクリメントして更新する。同様に、パケット１のペイロード処理結果が並列処理部＃１（１０４−１）から出力（２１４）され、順序処理部１０７によって一時コネクション情報テーブル１１１内のパケット数カウンタ３５３をデクリメントして更新する。パケット３のペイロード処理結果が並列処理部＃２（１０４−２）から出力（２２１）されると、順序処理部１０７によって一時コネクション情報テーブル１１１内のパケット数カウンタ３５３をデクリメントして更新し、パケット数カウンタ３５３がゼロになったことにより一時コネクション情報テーブル１１１を用いて正規コネクション情報テーブル１１０を更新する。
【００４６】
図５を用いて並列処理部１０４の処理フローについて説明する。並列処理部１０４は振り分け部１０１からのパケット入力開始を契機として処理を開始する（５００）。並列処理部１０４に振り分け部１０１から４バイト単位で複数サイクルに渡ってパケットデータが入力される。並列処理部１０４は、処理開始後の最初の１サイクルでパケットの先頭４バイトをヘッダ解析部１０５とペイロード処理部１０６に入力する（５０１）。ヘッダ解析部１０５から解析結果が逐次出力される（５０２）。解析結果はキュー１２０へ格納される。次に、ヘッダ解析が完了したかを判定し（５０３）、ヘッダ解析が完了していないならば、次の４バイトをヘッダ解析部１０５とペイロード処理部１０６に入力する（５０１）。以下同様に、ヘッダ解析部１０５から解析結果が逐次出力され（５０２）、解析結果はキュー１２０へ格納されていく。
【００４７】
ヘッダ解析が完了した場合、並列処理部１０４は、後述する順序処理部１０７が設定するペイロード処理結果待ち合わせフラグが有効かを判定する（５０４）。ペイロード処理結果待ち合わせフラグは、後述する図６のステップ６１０で有効化され、ステップ６１５で無効化される。ペイロード処理結果待ち合わせフラグが有効となるのは、ヘッダ解析を行ったパケットのペイロード処理の完了を待っていることを意味する。
【００４８】
フラグが有効である場合、ヘッダ部分の解析に続いて入力されるペイロードデータをペイロード処理部１０６に入力する（５０５）。ペイロード処理が完了したかを判定し（５０６）、完了していなければ次の４バイトのペイロードデータをペイロード処理部１０６に入力する（５０５）。次に、ペイロード処理が完了した場合、並列処理部１０４は、キュー１２０を介して順序処理部１０７へヘッダ解析結果とペイロード処理結果を通知する（５０７）。
【００４９】
一方、前記ペイロード処理結果待ち合わせフラグが無効と判定された場合、キューを介して順序処理部１０７へヘッダ解析結果を通知する（５０８）。次に、ペイロード処理部１０６に次の４バイトを入力する（５０９）。ペイロード処理が完了したかを判定し（５１０）、完了していなければ次の４バイトのペイロードデータをペイロード処理部１０６に入力する（５０９）。次に、ペイロード処理が完了した場合、並列処理部１０４は、キューを介して順序処理部１０７へペイロード処理結果を通知する（５１１）。
【００５０】
キュー１２０は、前記ペイロード処理結果待ち合わせフラグが有効の場合には、並列処理結果の受信を開始した順に順序処理部１０７へ出力し、また、前記ペイロード処理結果待ち合わせフラグが無効の場合には、並列処理結果の受信を完了した順に順序処理部１０７へ出力する。
【００５１】
上記のように、並列処理部１０４は、ペイロード処理結果待ち合わせフラグが無効の場合に、処理時間が一定のヘッダ解析結果と、ペイロード長によって処理時間が可変なペイロード処理結果を別々に出力することで、順序処理部１０７はパケットの到着順にヘッダ解析結果を受け取ることが可能となる。また、並列処理部１０４は、ペイロード処理結果待ち合わせフラグが有効の場合に、ヘッダ解析結果とペイロード処理結果を同時に出力し、キューが受信を開始した順に出力することで、順序処理部１０７はパケットの到着順にペイロード処理結果を受け取る。
【００５２】
図６Ａを用いて順序処理部１０７の処理フローについて説明する。順序処理部１０７は、並列処理部１０４からの並列処理結果（ヘッダ解析結果、ペイロード処理結果）の入力によって処理を開始する（６００）。ヘッダ解析結果から、コネクションが存在するかを判定する（６０１）。コネクションが存在するかを判定するとは、ヘッダに格納されている送信元ＩＰアドレス、送信元ポート番号、あて先ポート番号等の情報から、当該入力パケットがどのコネクションに関連するものなのかを検索する処理であり、これにより更新すべき正規コネクション情報テーブル１１０及び一時のコネクション情報テーブル１１１が特定される。
【００５３】
コネクションが存在しない場合、当該並列処理結果は破棄される。コネクションが存在する場合、当該並列処理結果がヘッダ解析結果かを判定する（６０３）。当該並列処理結果がヘッダ解析結果の場合、図３Ｂの送信系の一時コネクション情報１１１を更新する（６０４）。
【００５４】
次に、当該パケットのペイロード長が１以上かを判定する（６０５）。ペイロード長が１以上であればペイロードが存在するため、順序処理部１０７はホストメモリへのペイロードデータの書き込み指示を出す（６０６）。次に、順序処理部１０７は一時コネクション情報テーブル１１１内のパケット数カウンタ３５３をインクリメント更新する（６０７）。次に、その他のパケットに対する受信系の一時コネクション情報テーブル１１１を更新する（６０８）。次に、一時コネクション情報更新回数カウンタ３５４が規定値を上回ったかを判定する（６０９）。カウンタ３５４が規定値を上回った場合、ペイロード処理結果待ち合わせフラグを有効化する（６１０）。カウンタ３５４が規定値を上回った場合とは、規定数以上の受信パケットを処理しても、正規コネクション情報が確定せずに、定期的に返信すべき通信相手へのＡＣＫ応答等を返信できない状態を示している。  
ステップ６０３でＮの場合、ステップ６０９でＮの場合、又はステップ６１０の完了後、ペイロード処理結果かを判定する（６１１）。ペイロード処理結果は正常かを判定する（６１２）。正常の場合、パケット数カウンタ３５３をデクリメント更新する（６１３）。パケット数カウンタ３５３はゼロかを判定する（６１４）。パケット数カウンタ３５３がゼロでない場合は、図６Ａの処理を終了する。
【００５５】
パケット数カウンタ３５３がゼロの場合、一時コネクション情報で正規コネクション情報１１０を更新する（６１５）。例えば、一時コネクション情報テーブル１１１内の一時ＡＣＫ番号３５１を正規コネクション情報テーブル１１０内のＡＣＫ番号３０５に上書きコピーする。一時コネクション情報テーブル１１１内の一時ホストメモリ書き込み済みサイズ３５２は、正規コネクション情報テーブル１１０内のホストメモリ書き込み済みサイズ３０８へ上書きコピーされる。一時コネクション情報テーブル１１１内の一時スライディングウィンドウ３５５は、正規コネクション情報テーブル１１０内のスライディングウィンドウ３１０へ上書きコピーされる。
【００５６】
一時コネクション情報１１１で正規コネクション情報１１０の更新が完了した場合、一時コネクション情報テーブル１１１のテーブル有効フラグ３５０は無効に設定されてテーブル１１１はクリアされる。ペイロード処理結果が異常であれば、一時コネクション情報１１１を破棄（クリア）する（６１６）。
【００５７】
また、一時コネクション情報１１１が破棄（クリア）された状態において、新たにヘッダ解析結果の処理を開始した場合には、正規コネクション情報テーブル１１０の情報をベースにして一時コネクション情報テーブル１１１を作成する。例えば、正規コネクション情報テーブル１１０のＡＣＫ番号３０５が１００に設定されていて、ペイロードサイズ１００のパケットを受信した場合は、一時コネクション情報テーブル１１１内の一時ＡＣＫ番号に２００を設定し、テーブル有効フラグ３５０を有効に設定する。パケット数カウンタ３５３と一時コネクション情報更新回数カウンタ３５４は、ゼロにリセットしてからインクリメント更新する。
【００５８】
ヘッダ解析結果とペイロード処理結果の数が一致するまで（パケット数カウンタ値がゼロになるまで）の経過時間が規定値を上回って、正規コネクション情報が確定せずに、定期的に返信すべき通信相手へのＡＣＫ応答等を返信できないことを防止するために、順序処理部１０７が定期的に前記経過時間のチェックをする場合の処理フローを図６Ｂに示す。
【００５９】
順序処理部１０７は、あるコネクションに関連付けされてタイマーにより定期的に起動される（６１７）。正規コネクション情報更新タイマーがタイムアウトしたかを判定する（６１８）。タイムアウト判定は、正規コネクション情報１１０の前回更新時刻３０２と順序処理部１０７が持つフリーランカウンタ等による時刻との差分を算出し、この差分値と正規コネクション情報更新タイムアウト値３０１を比較して、差分値が大きい場合にタイムアウトと判定することで実現できる。次に、タイムアウトの場合、ペイロード処理結果待ち合わせフラグを有効化する（６１９）。次に、送信処理等を行う（６２０）。送信処理は、正規コネクション情報１１０を参照して更新しながら、例えば、送信すべきデータが存在するかの判定や、再送タイマー切れ判定、ＡＣＫ応答等、送信に関わる処理を実施する。
【００６０】
実施例１による並列パケット処理装置に対してパケット入力が長時間連続しているため、正規コネクション情報１１０が長時間更新されない場合は、送信元に対してＡＣＫパケットを返信できない等によって、送信元が送信データレートを落として全体のスループットが低下してしまう可能性がある。そこで、正規コネクション情報更新タイムアウト値３０１以上の時間の間、更新がされない場合、あるいは、一時コネクション情報更新回数カウンタ３５４が規定回数を上回っている場合、前記ペイロード処理結果待ち合わせフラグ機構により正規コネクション情報１１０の更新を確実に実施させるものである。
【００６１】
以上のように、実施例１によれば、振り分け部１０１が、ＦＩＦＯ１０３からのｅｍｐｔｙ信号に基づいて、空き状態の並列処理部１０４にパケットを振り分けることで、ヘッダ解析処理の開始時刻をパケット受信順にし、かつ、並列処理部１０４が処理時間一定なヘッダ解析結果と処理時間可変なペイロード処理結果を別々に出力することで、順序処理部１０７はパケット受信順にヘッダ解析結果を受け取ることとなり、パケットの順序入れ違いが生じることなしに順序処理が可能となる効果がある。
【００６２】
また、順序処理部１０７は、ペイロード処理結果を入れ違って受けとるが、ペイロード処理結果は、基本的に正常か異常かを示すものであり、ヘッダ解析結果の処理回数と数が一致していればよいという特徴を利用して、パケット数カウンタによる制御だけでパケットの入れ違いに対応できる。これにより、本発明によれば、順序が入れ違った並列処理結果数に比例して処理量が増加するようなボトルネック処理がなく、高い効率でパケット並列処理を実施できる効果がある。
【００６３】
パケット数カウンタに基づくコネクション情報の更新の処理結果を、コネクション毎に、パケット並列処理装置の端末画面（図示せず）に表示することにより、ユーザは、どのコネクションが正常に処理されなかったかを判断できる。また、同様のコネクション情報の更新の処理結果を、ネットワークを介してホスト計算機に通知して表示することもできる。
【実施例２】
【００６４】
本発明の第二の実施例に係る並列パケット処理装置の構成について、図７を用いて説明する。図１の並列パケット処理装置のうち、既に説明した図１に示される同一の符号を付された構成と同一の機能を有する部分については、説明を省略する。第一の実施例との差異は、振分け前にパケットをネットワークインターフェース部１００から直接バッファ７００に格納することである。
【００６５】
本実施例では、第一の実施例におけるバッファ１２１を入力側と出力側とでクロック周波数が異なるデュアルクロック対応のバッファ７００に置き換えることにより、バッファ１２１へのパケットデータ格納のためのバッファリング完了待ち合わせを不要とするものである。各ＦＩＦＯ１０３とバッファ７００の入力側のクロックは同じである。
【００６６】
ネットワークインターフェース部１００から出力されたパケットデータは、振り分け部１０１とバッファ７００に入力される。バッファ７００は、データ書き込み用クロックとデータ読み出し用クロックの２系統のクロック入力ポートを持ち、ネットワークインターフェース部１００の出力用クロックでデータ書き込みを実行し、データ書き込み制御部１１２の制御用クロックでデータ読み出しを実行する。また、バッファ７００は、データ書き込みの際に、バッファ７００内の書き込み先のアドレス情報を振り分け部１０１に出力する。当該書き込み先のアドレス情報は、振り分け部１０１から並列処理部１０４、順序処理部１０７、データ書き込み制御部１１２へと順に伝達されて、データ書き込み制御部１１２がバッファ７００からペイロードデータを読み出す際に指定するアドレス情報となる。
【００６７】
次に、図８は、本発明の第二の実施例における並列パケット処理装置の動作のタイムチャートである。図８のタイムチャートのうち、既に説明した図２に示される同一の符号を付された処理と同一のものについては、説明を省略する。
【００６８】
ネットワークインターフェース部１００は、バッファ７００にパケット１を出力して格納する（８００）。
【００６９】
同様に、ネットワークインターフェース部１００は、パケット２を出力してバッファ７００に格納する（８０１）。データ書き込み制御部１１２は、順序処理部１０７からのデータ書き込み指示を受け付けて（２０７）、ホストメモリ１１３へ当該パケットのペイロードをバッファ７００から出力する指示を送り（８０２）、ホストメモリ１１３へのデータ転送を行う（８０３）。同様に、データ書き込み制御部１１２は、順序処理部１０７からのデータ書き込み指示を受け付けて（２０９）、ホストメモリ１１３へ当該パケットのペイロードをバッファ７００から出力する指示を送り（８０４）、ホストメモリ１１３へのデータ転送を行う（８０５）。
【００７０】
ネットワークインターフェース部１００は、パケット３を出力してバッファ７００に格納する（８０６）。データ書き込み制御部１１２は、順序処理部１０７からのデータ書き込み指示を受け付けて（２１８）、ホストメモリ１１３へ当該パケットのペイロードをバッファ７００から出力する指示を送り（８０７）、ホストメモリ１１３へのデータ転送を行う（８０８）。
【００７１】
以上のように実施例２によれば、ネットワークインターフェース部１００からのパケットデータをバッファ７００に書き込める構成とすることで、振分け部１０１によるバッファリングのための書き込み完了待ち合わせが不要となり、結果としてホストメモリ１１３へのデータ格納までの遅延が少なくなる効果がある。
【実施例３】
【００７２】
本発明の第三の実施例に係る並列パケット処理装置の構成について、図９を用いて説明する。図９の並列パケット処理装置のうち、既に説明した図１に示される同一の符号を付された構成と同一の機能を有する部分については、説明を省略する。
【００７３】
本実施例では、第一の実施例における順序処理部１０７を複数（Ｍ個）備える構成にすることで、異なるプロトコルのパケットや異なるコネクションの複数のパケットを同時並列に順序処理することが可能となる。即ち、第三の実施例は、順序処理部１０７の負荷分散を目的としている。
【００７４】
順序処理振り分け部９００は、並列処理部１０４の出力結果のプロトコル種別を参照し、連続する複数のパケットでそれぞれプロトコルが異なれば、それぞれのプロトコルに対応した別々の順序処理部（９０１−１〜９０１−Ｍ、以下では特に断らない限りこれらを総称して９０１と表す）へ振り分け、複数の順序処理部９０１で並列に処理させる。また、順序処理振り分け部９００は、並列処理部１０４の出力結果のあて先ＩＰアドレス等のコネクション特定のための情報を参照し、連続する複数のパケットでそれぞれコネクションが異なれば、別々の順序処理部９０１へ振り分け、複数の順序処理部９０１で並列に処理させる。プロトコルやコネクションが同一の場合は、同一の順序処理部９０１へ振り分ける。
【００７５】
また、順序処理振り分け部９００は、ＩＤＬＥ状態の空いている順序処理部９０１へ振り分けるとしてもよい。その結果、１つのプロトコルに対して２つ以上の順序処理部９０１が割り当てられる場合がある。その場合は、複数の順序処理部９０１において、コネクション情報テーブルに対して排他処理機構を備えることで、同一コネクションに属するそれぞれのパケットを別々の順序処理部９０１に割り当てて並列に順序処理しないようにする。更に、排他処理機構は、正規又は一時のコネクション情報テーブルに対して、複数の順序処理部９０１から同時にアクセスしないように制御するものである。
【００７６】
以上のように実施例３によれば、複数の順序処理部９０１を備えることにより、異なるプロトコルや異なるコネクションの連続するパケットを並列に順序処理可能となり、スループットが向上し、処理の遅延が少なくなる効果がある。
【００７７】
並列処理装置が有する複数のプロセッサの数が限られているので、プロトコル処理を行う並列処理部１０４及び順序処理を行う順序処理部９０１のそれぞれに割り当てるプロセッサの数を、それぞれの処理負荷に応じて変えることができる。
【実施例４】
【００７８】
本発明の第四の実施例に係る並列パケット処理装置の構成について、図１０を用いて説明する。図１０の並列パケット処理装置のうち、既に説明した図１に示される同一の符号を付された構成と同一の機能を有する部分については、説明を省略する。
【００７９】
本実施例では、第一の実施例の振り分け部１０１、並列処理部１０４、順序処理部１０７の各構成要素を汎用的なマルチコアプロセッサで構成し、各々の機能のプログラムを配信することで動的に各構成要素の数を変更できるようにしたものである。
【００８０】
本実施例における並列パケット処理装置は、ホストプロセッサ１０００、ネットワークインターフェース部１００、ブリッジ１００２、ホストメモリ１００３、マルチコアプロセッサ１００４から構成される。ホストメモリ１００３は、プログラムやアプリケーションデータの記憶部であり、振り分け制御プログラム１００６、アプリケーションプログラム１００７、ヘッダ解析・ペイロード処理プログラム１００８、順序処理プログラム１００９、コア割り当て制御テーブル１０３０を記憶している。マルチコアプロセッサ１００４は、PCIｅインターフェース部１０１０、リングバス１０１１、コア＃１〜＃Ｎ（１０１６、１０１７、１０１８、１０１９）、各コアに備えられているキャッシュメモリ（１０１２、１０１３、１０１４、１０１５）から構成される。コア＃１〜＃Ｎ−２（１０１６、１０１７・・・）は並列パケット処理を実行し、＃Ｎ−１（１０１８）は順序処理部１０７に対応し、＃Ｎ（１０１９）は本発明の並列パケット処理に関係しない。
【００８１】
ホストプロセッサ１０００は、ホストメモリ１００３からコア割り当て制御プログラム１００５および振り分け制御プログラム１００６、振り分け制御テーブル１０３０をロードして実行する。コア＃１〜＃Ｎ（１０１６、１０１７・・・、１０１８、１０１９）は、キャッシュメモリ（１０１２、１０１３、１０１４、１０１５）からプログラムやコネクション情報テーブルをロードして実行する。
【００８２】
振り分け制御テーブル１０３０は、ヘッダ解析及びペイロード処理に割り当て済みのコアの識別情報、順序処理に割り当て済みコアの識別情報、未割り当てのコアの識別情報、アプリケーション用に割り当て済みのコアの識別情報から構成される。
【００８３】
キャッシュメモリ１０１２には、ヘッダ解析・ペイロード処理プログラム１００８がロードされて、コア＃１（１０１６）上で実行される。キャッシュメモリ１０１３には、ヘッダ解析・ペイロード処理プログラム１００８がロードされて、コア＃２（１０１７）上で実行される。キャッシュメモリ１０１４には、順序処理プログラム１０９、一時コネクション情報テーブル１１１、正規コネクション情報テーブル１１０がロードされて、コア＃Ｎ−１（１０１８）上で実行される。キャッシュメモリ１０１５には、アプリケーションプログラム１００８がロードされて、コア＃Ｎ（１０１９）上で実行される。
【００８４】
本実施例のホストプロセッサの処理フローについて図１１を用いて説明する。ネットワークインターフェース部１００から出力されたパケットデータは、ホストメモリ１００３に格納される。ネットワークインターフェース部１００は、パケットデータの格納を完了すると、割り込みをホストプロセッサ１０００に挙げる。前記割り込み受信（１１００）を契機として、ホストプロセッサ１０００上で動作する振り分け制御プログラム１００６が、ヘッダ解析・ペイロード処理に割り当て済みのコアでＩＤＬＥ状態のコア（＃１〜＃Ｎ−２）があるかどうかを判定する（１１０１）。
【００８５】
もしＩＤＬＥ状態のコアがない場合、コアが高負荷条件に達したかを判定する（１１０２）。例えば、単位時間あたりの処理パケット数が規定値を上回ったかどうか、あるいは、コアのＩＤＬＥ状態に対してＢＵＳＹ状態の時間比率が規定値を上回ったかどうか、等を判定することで、ヘッダ解析・ペイロード処理用のコアに高い負荷がかかっているのかどうかを判定する。
【００８６】
もし、コアが高負荷条件に達している場合、割り当てコア数を増やす（１１０３）。割り当てコア数を増やすとは、ヘッダ解析・ペイロード処理プログラム１００８や順序処理プログラム１００９を、未割り当てコアのキャッシュメモリにロードして、当該コアを処理用コアとして利用可能な状態にすることを指す。
【００８７】
次に、ホストプロセッサ１０００は、ＩＤＬＥ状態コアにパケットデータの振り分け処理を実施する（１１０４）。前記振り分け処理とは、ホストメモリに格納されたパケットデータを例えばＩＤＬＥ状態のコア＃１（１０１６）のキャッシュメモリ（１０１２）に、ブリッジ１００２とＰＣＩｅインターフェース部とリングバス１０１１を介して転送し、その後に、コア＃１（１０１６）に転送完了を通知することを指す。
【００８８】
次に、ホストプロセッサ１０００は、コアが低負荷条件に達したかを判定する（１１０５）。例えば、単位時間あたりの処理パケット数が規定値を下回ったかどうか、あるいは、コアのＩＤＬＥ状態に対してＢＵＳＹ状態の時間比率が規定値を下回ったかどうか、等を判定することで、ヘッダ解析・ペイロード処理用のコアの負荷が十分に低いのかどうかを判定する。もし、コアが低負荷条件に達している場合は、割り当てコア数を削減する（１１０６）。
【００８９】
また、ホストプロセッサ１０００は、パケットデータの振り分け時に、振り分けたコアの識別情報と振り分け順番を記録し、順番記録を順序処理用のコアに通知する。順序処理用のコアにおいて、ペイロード処理結果待ち合わせる場合には、前記順番記録をもとにペイロード処理結果を待ち合わる。これにより、確実に正規コネクション情報テーブルの更新を実施できる。
【００９０】
以下では、図１０に示した並列パケット処理装置の各部の処理概要を説明する。  
コア＃１（１０１６）は、転送されたパケットデータに対して、ヘッダ解析を実施し、ヘッダ解析結果とパケットデータを順序処理用のコア＃Ｎ−１（１０１８）に転送する。次に、ペイロード処理を実施し、ペイロード処理結果を順序処理用のコア＃Ｎ−１（１０１８）に転送する。
【００９１】
順序処理用のコア＃Ｎ−１（１０１８）は、ヘッダ解析結果とパケットデータを受け取ると、パケット数カウンタを含む一時コネクション情報テーブル１１１を更新し、アプリケーション用のコア＃Ｎ（１０１９）のキャッシュメモリ１０１５に対してペイロードデータを書き込む。順序処理用のコア＃Ｎ−１（１０１８）は、ペイロード処理結果を受け取ると、パケット数カウンタを含む一時コネクション情報テーブル１１１や正規コネクション情報テーブル１１０を更新する。
【００９２】
アプリケーション用のコア＃Ｎ（１０１９）では、アプリケーションプログラム１０２０が前記書き込まれたペイロードデータを利用する。あるいは、ペイロードデータの書き込み先は、ホストメモリ１００３としてもよく、その場合はアプリケーションプログラム１００７がペイロードデータを利用する。
【００９３】
以上のように実施例４によれば、マルチコアプロセッサにおいて、並列処理用のコアの負荷状況に応じて、動的に割り当てコア数を増加又は減少させることで、ネットワーク処理やアプリケーション処理、更には順序処理のバランスを見ながら、最適な負荷分散を実施できる効果がある。即ち、図１０に示した振り分け制御プログラム１００６が、ヘッダ解析・ペイロード処理、アプリケーション処理、及び順序処理の負荷状況に応じて、それぞれの処理に割り当てるコアの数を変えることで最適な負荷分散を実施できる。
【符号の説明】
【００９４】
１００：ネットワークインターフェース部、１０１：振り分け部、１０２：振り分け制御部、１０３−１〜１０３−Ｎ：ＦＩＦＯ、１０４−１〜１０４−Ｎ：並列処理部、１０５：ヘッダ解析部、１０６：ペイロード処理部、１０７：順序処理部、１０８：記憶部、１０９：順序処理プログラム、１１０：正規コネクション情報テーブル、１１１：一時コネクション情報テーブル、１１２：データ書き込み制御部、１１３：ホストメモリ、１２０：キュー、１２１：バッファ
【図１】
2014175781.tif 000003
【図２】
2014175781.tif 000004
【図３Ａ】
2014175781.tif 000005
【図３Ｂ】
2014175781.tif 000006
【図４】
2014175781.tif 000007
【図５】
2014175781.tif 000008
【図６Ａ】
2014175781.tif 000009
【図６Ｂ】
2014175781.tif 000010
【図７】
2014175781.tif 000011
【図８】
2014175781.tif 000012
【図９】
2014175781.tif 000013
【図１０】
2014175781.tif 000014
【図１１】
2014175781.tif 000015
【図１２】
2014175781.tif 000016