(57)【要約】【課題】結合パケットを元の複数のパケットに復元する処理に必要となるハードウェアの規模を小さくし、かつ高い受信性能を実現する。【解決手段】パケット処理装置は、通信回線からパケットを受信する回線対応部１００と、通信回線から受信した複数のパケットを連結して結合パケットを生成するパケット結合部１１０と、通信回線から受信したパケットが格納されるパケットメモリ１０１と、パケット結合部１１０によって生成された結合パケットをパケットメモリ１０１にＤＭＡ転送する結合パケット転送部１１１とを備える。結合パケット転送部１１１は、結合パケット内の各パケットの先頭データの、パケットメモリ１０１上におけるアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタ１１１０に書き込む。【選択図】  図１
2019185376.tif 000002
【特許請求の範囲】
【請求項１】
通信回線からパケットを受信する回線対応部と、
前記通信回線から受信した複数のパケットを連結して結合パケットを生成するパケット結合部と、
前記通信回線から受信したパケットが格納されるパケットメモリと、
前記パケット結合部によって生成された結合パケットを前記パケットメモリにＤＭＡ転送するか、またはプロセッサによって書き込む結合パケット転送部とを備え、
前記結合パケット転送部は、前記結合パケット内の各パケットの先頭データの、前記パケットメモリ上におけるアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込むことを特徴とするパケット処理装置。
【請求項２】
請求項１記載のパケット処理装置において、
前記結合パケット転送部は、前記結合パケット内の各パケットのパケット長を示す受信データサイズの情報を前記ディスクリプタに書き込むことを特徴とするパケット処理装置。
【請求項３】
請求項１または２記載のパケット処理装置において、
前記パケットメモリに格納されたパケットを読み出す処理部をさらに備え、
前記処理部は、前記ディスクリプタに書き込まれた情報に基づいて前記パケットメモリからパケットを読み出して処理を施すことを特徴とするパケット処理装置。
【請求項４】
通信回線から受信した複数のパケットを連結して結合パケットを生成する第１のステップと、
前記通信回線から受信したパケットに対して処理を施す処理部がパケットの読み出しを行うパケットメモリに対して、前記結合パケットをＤＭＡ転送するか、またはプロセッサによって書き込む第２のステップと、
前記結合パケット内の各パケットの先頭データの、前記パケットメモリ上におけるアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込む第３のステップとを含むことを特徴とするパケット処理方法。
【請求項５】
請求項４記載のパケット処理方法において、
前記結合パケット内の各パケットのパケット長を示す受信データサイズの情報を前記ディスクリプタに書き込む第４のステップをさらに含むことを特徴とするパケット処理方法。
【請求項６】
請求項４または５記載のパケット処理方法において、
前記ディスクリプタに書き込まれた情報に基づいて前記パケットメモリからパケットを読み出して処理を施すステップをさらに含むことを特徴とするパケット処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット処理装置およびパケット処理方法に係り、特に、通信システムの中で、パケットデータの転送処理を行うパケット処理装置およびパケット処理方法に関するものである。
【背景技術】
【０００２】
図１１は従来のパケット処理装置の構成を示すブロック図である。パケット処理装置は、通信回線からパケットを受信する回線対応部１００と、通信回線から受信したパケットが格納されるパケットメモリ１０１と、通信回線から受信したパケットをパケットメモリ１０１に転送するパケット転送部１０２と、パケットメモリ１０１からパケットを読み出す受信処理部１０３と、パケットに対してプロトコル処理を行うプロトコル処理部１０４とを備えている。
【０００３】
このパケット処理装置では、通信回線（不図示）と接続された回線対応部１００へのパケットの到着を契機として、パケット転送部１０２がＤＭＡ（Direct Memory Access）を用いたデータ転送を行い、到着したパケットをパケットメモリ１０１に格納する。同時に、パケット転送部１０２は、パケットを受信したことをパケット処理装置のプロセッサ（不図示）に通知するためにハードウェア割り込みを発生させ、受信処理部１０３の起動要求を行う。
【０００４】
パケット転送部１０２は、パケット処理装置のプロセッサが実行するソフトウェアによって構築されるデータ構造体であるディスクリプタ１０２０と、ハードウェアであるＤＭＡコントローラ１０２１とから構成される。図１２はディスクリプタ１０２０の概要を説明する図である。
【０００５】
図１２の例では、パケットメモリ１０１にＮ個のパケットが格納される場合を示している。この場合、パケット処理装置のプロセッサは、Ｎ個のパケットの各々に対応するアドレスやフラグをディスクリプタ１０２０に設定する。プロセッサは、受信したパケットをパケットメモリ１０１へ書き込む際の先頭アドレスＡ＃１〜Ａ＃Ｎをディスクリプタ１０２０に予め設定しておく。通常、同時に設定できるアドレスの数は予め決まっており、使用されるアドレスの順番も決まっている。
【０００６】
プロセッサは、設定したアドレスＡ＃１〜Ａ＃Ｎが有効か否かを示すフラグＡＦ＃１〜ＡＦ＃Ｎのセット／リセットをディスクリプタ１０２０に対して行う。アドレスＡ＃１〜Ａ＃Ｎの設定後、プロセッサがフラグＡＦ＃１〜ＡＦ＃Ｎを有効にすると、パケットメモリ１０１へのパケットの書き込みが可能となる。
【０００７】
また、ディスクリプタ１０２０には、設定されたアドレスＡ＃１〜Ａ＃Ｎへのパケットの書き込みが完了したか否かを示す受信完了フラグＷＦ＃１〜ＷＦ＃Ｎと、設定されたアドレスＡ＃１〜Ａ＃Ｎへの書き込みが行われたパケットのパケット長を示す受信データサイズＬ＃１〜Ｌ＃Ｎとが設定される。
【０００８】
図１３はＤＭＡコントローラ１０２１の動作を説明するフローチャートである。最初に、ＤＭＡコントローラ１０２１は、ディスクリプタ１０２０の読出および書込の順を示す変数ｎを１に初期化し（図１３ステップＳ１００）、ｎ＝１番目のフラグＡＦ＃１をディスクリプタ１０２０から読み出す（図１３ステップＳ１０１）。
【０００９】
ＤＭＡコントローラ１０２１は、先頭アドレスが有効であることをフラグＡＦ＃１が示している場合（図１３ステップＳ１０２においてｙｅｓ）、ｎ＝１番目の先頭アドレスＡ＃１をディスクリプタ１０２０から読み出し（図１３ステップＳ１０３）、対応するｎ＝１番目のパケットをパケットメモリ１０１の先頭アドレスＡ＃１から始まる領域に書き込む（図１３ステップＳ１０４）。
【００１０】
パケットの書き込み完了後、ＤＭＡコントローラ１０２１は、ｎ＝１番目のパケットのパケット長を示す受信データサイズＬ＃１と、パケットの書き込みが完了したことを示す受信完了フラグＷＦ＃１とをディスクリプタ１０２０に書き込む（図１３ステップＳ１０５）。
また、パケットの書き込みが完了したことをパケット処理装置のプロセッサ（不図示）に通知するためにハードウェア割り込みを発生させ、受信処理部１０３の起動要求を行う。
【００１１】
そして、ＤＭＡコントローラ１０２１は、変数ｎがＮと等しいかどうかを判定する（図１３ステップＳ１０６）。ＤＭＡコントローラ１０２１は、変数ｎがＮに達していない場合（ステップＳ１０６においてｎｏ）、変数ｎを１増やし（図１３ステップＳ１０７）、ステップＳ１０１に戻る。また、ＤＭＡコントローラ１０２１は、変数ｎがＮに達した場合（ステップＳ１０６においてｙｅｓ）、ステップＳ１００に戻る。こうして、Ｎ個のパケットが順番にパケットメモリ１０１に転送される。
【００１２】
次に、起動した受信処理部１０３は、パケットメモリ１０１に転送された受信パケットをプロトコル処理部１０４へ受渡す。同時に、受信処理部１０３は、プロトコル処理部１０４へ受け渡したパケットメモリ分を補充するために、パケット処理装置が持つメモリから新たなパケットメモリ１０１の領域を確保する。
受信パケットが受け渡されたプロトコル処理部１０４は、必要なプロトコル処理が終了するとパケットメモリ１０１の領域を解放する。
【００１３】
以上のような一般的な受信処理では、特に、小さいパケットが高頻度に到着した場合、ハードウェアの割り込みの数が増大するために、パケット処理装置のプロセッサが高負荷となり、受信性能が低下することが知られている。また、ＤＭＡ転送が起動される回数が増加するために、ＤＭＡ転送制御に伴うオーバーヘッドのために受信性能が低下することが知られている。
【００１４】
このような問題に対処するために、回線対応部において設定された閾値に達するまで、複数の小さいパケットを１つの大きな結合パケットに纏め、結合パケットのサイズが閾値に到達することを契機として、一括してパケットメモリへ結合パケットをＤＭＡ転送する技術が提案されている（特許文献１参照）。
【００１５】
このような、複数の小さなパケットを１つの結合パケットに纏めて転送するＤＭＡ転送方式（以降、纏めＤＭＡ転送）を用いることにより、パケット処理装置に小さなパケットが到着した場合でも、ハードウェア割り込みの回数を減少させることができ、またＤＭＡ転送のオーバーヘッドを削減することができるので、高速な受信処理を行うことができる。
【００１６】
図１４は特許文献１に開示された従来のパケット処理装置の構成を示すブロック図である。このパケット処理装置は、回線対応部１００と、パケットメモリ１０１と、結合パケット転送部１０２ａと、受信処理部１０３と、プロトコル処理部１０４と、受信バッファ１０５と、パケット結合部１０６と、結合閾値制御部１０７とを備えている。
【００１７】
図１４に示したパケット処理装置では、パケット結合部１０６は、回線対応部１００において受信されたパケットをパケット結合用の受信バッファ１０５に転送する。このとき、パケット結合部１０６は、回線対応部１００において受信されたパケットと受信バッファ１０５中に既に格納されているパケットとが結合され、１つの結合パケットになるように、パケットを受信バッファ１０５に格納する。そして、パケット結合部１０６は、受信バッファ１０５中の結合パケットの大きさが、結合閾値制御部１０７にあらかじめ設定された閾値を超えると、結合パケットのパケットメモリ１０１への転送要求を発行する。
【００１８】
図１１の場合と同様に、結合パケット転送部１０２ａは、ディスクリプタ１０２０ａと、ＤＭＡコントローラ１０２１ａとから構成される。図１５はディスクリプタ１０２０ａの概要を説明する図である。図１５の例では、パケットメモリ１０１にＮ個の結合パケットが格納される場合を示している。この場合、パケット処理装置のプロセッサは、Ｎ個の結合パケットの各々に対応するアドレスやフラグをディスクリプタ１０２０ａに設定する。
【００１９】
プロセッサは、結合パケットをパケットメモリ１０１へ書き込む際の先頭アドレスＡＤ＃１〜ＡＤ＃Ｎをディスクリプタ１０２０ａに予め設定しておく。通常、同時に設定できるアドレスの数は予め決まっており、使用されるアドレスの順番も決まっている。
【００２０】
プロセッサは、設定したアドレスＡＤ＃１〜ＡＤ＃Ｎが有効か否かを示すフラグＡＤＦ＃１〜ＡＤＦ＃Ｎのセット／リセットをディスクリプタ１０２０ａに対して行う。アドレスＡＤ＃１〜ＡＤ＃Ｎの設定後、プロセッサがフラグＡＤＦ＃１〜ＡＤＦ＃Ｎを有効にすると、パケットメモリ１０１への結合パケットの書き込みが可能となる。
【００２１】
また、ディスクリプタ１０２０ａには、設定されたアドレスＡＤ＃１〜ＡＤ＃Ｎへの結合パケットの書き込みが完了したか否かを示す受信完了フラグＷＤＦ＃１〜ＷＤＦ＃Ｎと、設定されたアドレスＡ＃１〜Ａ＃Ｎへの書き込みが行われた結合パケットの長さ（結合したパケットのパケット長の合計値）を示す受信データサイズＬＤ＃１〜ＬＤ＃Ｎとが設定される。
【００２２】
図１６はＤＭＡコントローラ１０２１ａの動作を説明するフローチャートである。最初に、ＤＭＡコントローラ１０２１ａは、ディスクリプタ１０２０ａの読出および書込の順を示す変数ｎを１に初期化し（図１６ステップＳ２００）、ｎ＝１番目のフラグＡＤＦ＃１をディスクリプタ１０２０ａから読み出す（図１６ステップＳ２０１）。
【００２３】
ＤＭＡコントローラ１０２１ａは、先頭アドレスが有効であることをフラグＡＤＦ＃１が示している場合（図１６ステップＳ２０２においてｙｅｓ）、ｎ＝１番目の先頭アドレスＡＤ＃１をディスクリプタ１０２０ａから読み出し（図１６ステップＳ２０３）、対応するｎ＝１番目の結合パケットをパケットメモリ１０１の先頭アドレスＡＤ＃１から始まる領域に書き込む（図１６ステップＳ２０４）。
【００２４】
結合パケットの書き込み完了後、ＤＭＡコントローラ１０２１ａは、ｎ＝１番目の結合パケットの長さを示す受信データサイズＬＤ＃１と、結合パケットの書き込みが完了したことを示す受信完了フラグＷＤＦ＃１とをディスクリプタ１０２０ａに書き込む（図１６ステップＳ２０５）。
また、結合パケットの書き込みが完了したことをパケット処理装置のプロセッサ（不図示）に通知するためにハードウェア割り込みを発生させ、受信処理部１０３の起動要求を行う。
【００２５】
そして、ＤＭＡコントローラ１０２１ａは、変数ｎがＮと等しいかどうかを判定する（図１６ステップＳ２０６）。ＤＭＡコントローラ１０２１ａは、変数ｎがＮに達していない場合（ステップＳ２０６においてｎｏ）、変数ｎを１増やし（図１６ステップＳ２０７）、ステップＳ２０１に戻る。また、ＤＭＡコントローラ１０２１ａは、変数ｎがＮに達した場合（ステップＳ２０６においてｙｅｓ）、ステップＳ２００に戻る。こうして、Ｎ個の結合パケットが順番にパケットメモリ１０１に転送される。
【００２６】
結合パケット転送部１０２ａ（ＤＭＡコントローラ１０２１ａ）からの起動要求に応じて起動した受信処理部１０３は、パケットメモリ１０１に転送された結合パケットをプロトコル処理部１０４へと渡す。
【００２７】
図１４に示した構成によって、受信処理の起動要求が、複数のパケットが結合した結合パケットが転送される度に行われるようになるため、受信処理部１０３の起動回数が減少し、パケット処理装置のプロセッサの負荷が軽減される。また、ＤＭＡ転送制御の回数も減少するためにオーバーヘッドの割合が低くなり、高い受信性能を発揮することが可能となる。
【００２８】
ただし、図１４に示した構成では、結合パケットをプロトコル処理部１０４において元の複数のパケットに復元する必要がある。この復元処理をプロトコル処理部１０４のハードウェアで実現しようとすると、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケット結合部１０６からプロトコル処理部１０４に通知する手段が必要となり、そのためにパケット結合部１０６等のハードウェアの規模が大きくなるという課題がある。また、復元処理に必要な情報をパケットメモリ１０１等に保持しておく必要がある。
【００２９】
また、復元処理を受信処理部１０３等のソフトウェアで実現することも可能であるが、上記と同様に、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケット結合部１０６から受信処理部１０３に通知する手段が必要となり、そのためにパケット結合部１０６等のハードウェアの規模が大きくなるという課題がある。また、ソフトウェアで復元処理を行うため、ソフトウェアによる処理が増加し、プロセッサの負荷が上がり、その結果として、纏めＤＭＡ転送による受信性能の向上が抑制されるという課題もある。
【００３０】
図１７はパケット処理装置の別の構成を示すブロック図である。このパケット処理装置は、図１４のパケット処理装置の受信処理部１０３とプロトコル処理部１０４との間に、結合パケットを元の複数のパケットに復元する結合パケット分離部１０８を挿入したものである。
【００３１】
パケットの復元処理をプロトコル処理部１０４のハードウェアで実現する場合と同様に、結合パケット分離部１０８をハードウェアで実現しようとすると、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケット結合部１０６から結合パケット分離部１０８まで通知する手段が必要となり、そのためにパケット結合部１０６等のハードウェアの規模が大きくなるという課題がある。
【００３２】
また、結合パケット分離部１０８をソフトウェアで実現することも可能であるが、上記と同様に、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケット結合部１０６から結合パケット分離部１０８に通知する手段が必要となり、そのためにパケット結合部１０６等のハードウェアの規模が大きくなるという課題がある。また、ソフトウェアで復元処理を行うため、ソフトウェアによる処理が増加し、プロセッサの負荷が上がり、その結果として、纏めＤＭＡ転送による受信性能の向上が抑制されるという課題もある。
【００３３】
図１８はパケット処理装置の別の構成を示すブロック図である。このパケット処理装置は、図１４、図１７のパケット処理装置の結合パケット転送部１０２ａの代わりに、ソフトウェアによる結合パケット書き込み部１０９を設けたものである。ＤＭＡ転送を用いないパケット処理装置においても、ソフトウェアにより複数のパケットを纏めてパケットメモリ１０１に書き込むこと（以降、纏め書き込み）によりパケットメモリ１０１への書き込みの実効スループットが向上する場合（パケットメモリ１０１がＤＲＡＭで構成されている場合等）がある。このように、纏め書き込みを行うパケット処理装置においても、結合パケットを元の複数のパケットに復元する際に上記と同様の問題がある。
【００３４】
また、図１８の処理の全て（パケットメモリ１０１内と回線対応部１００内のハードウェア処理を除く）をソフトウェアで行う場合、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケットメモリ１０１等に保存する必要があり、纏め書き込みを行わない場合と比較して、パケットメモリ１０１等の容量（書き込み可能なビット数）を大きくする必要があるという課題が有る。
【先行技術文献】
【特許文献】
【００３５】
【特許文献１】特許第４４６８３３２号公報
【発明の概要】
【発明が解決しようとする課題】
【００３６】
本発明は、前記従来技術の問題点を解決するためになされたものであり、本発明の目的は、ハードウェアによる纏めＤＭＡ転送、もしくはソフトウェアによる纏め書き込みを用いるパケット処理装置において、結合パケットを元の複数のパケットに復元する処理に必要となるハードウェアの規模を小さくし、かつ纏めＤＭＡ転送もしくは纏め書き込みの効果による高い受信性能を実現することが可能となる技術を提供することにある。
【課題を解決するための手段】
【００３７】
本発明のパケット処理装置は、通信回線からパケットを受信する回線対応部と、前記通信回線から受信した複数のパケットを連結して結合パケットを生成するパケット結合部と、前記通信回線から受信したパケットが格納されるパケットメモリと、前記パケット結合部によって生成された結合パケットを前記パケットメモリにＤＭＡ転送するか、またはプロセッサによって書き込む結合パケット転送部とを備え、前記結合パケット転送部は、前記結合パケット内の各パケットの先頭データの、前記パケットメモリ上におけるアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込むことを特徴とするものである。
また、本発明のパケット処理装置の１構成例において、前記結合パケット転送部は、前記結合パケット内の各パケットのパケット長を示す受信データサイズの情報を前記ディスクリプタに書き込むことを特徴とするものである。
また、本発明のパケット処理装置の１構成例は、前記パケットメモリに格納されたパケットを読み出す処理部をさらに備え、前記処理部は、前記ディスクリプタに書き込まれた情報に基づいて前記パケットメモリからパケットを読み出して処理を施すことを特徴とするものである。
【００３８】
また、本発明のパケット処理方法は、通信回線から受信した複数のパケットを連結して結合パケットを生成する第１のステップと、前記通信回線から受信したパケットに対して処理を施す処理部がパケットの読み出しを行うパケットメモリに対して、前記結合パケットをＤＭＡ転送するか、またはプロセッサによって書き込む第２のステップと、前記結合パケット内の各パケットの先頭データの、前記パケットメモリ上におけるアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込む第３のステップとを含むことを特徴とするものである。
また、本発明のパケット処理方法の１構成例は、前記結合パケット内の各パケットのパケット長を示す受信データサイズの情報を前記ディスクリプタに書き込む第４のステップをさらに含むことを特徴とするものである。
また、本発明のパケット処理方法の１構成例は、前記ディスクリプタに書き込まれた情報に基づいて前記パケットメモリからパケットを読み出して処理を施すステップをさらに含むことを特徴とするものである。
【発明の効果】
【００３９】
本発明によれば、結合パケット転送部は、パケット結合部によって生成された結合パケットをパケットメモリにＤＭＡ転送するか、またはプロセッサによって書き込み、結合パケット内の各パケットの先頭データの、パケットメモリ上におけるアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込む。本発明の結合パケット転送部を備えたパケット処理装置によれば、従来技術の構成と比較して、複数のパケットが結合した結合パケットを元の複数のパケットに復元する処理に必要となるハードウェアの規模を小さくすることができ、かつ纏めＤＭＡ転送もしくは纏め書き込みの効果による高い受信性能を実現することが可能となる。
【００４０】
なお、従来の図１４の構成、もしくは図１７の構成で、複数のパケットが結合した結合パケットを元の複数のパケットに復元する処理をソフトウェアで実現する場合と比較すると、本発明の構成で複数のパケットが結合した結合パケットを元の複数のパケットに復元する処理をハードウェアで行う場合、１パケットの処理に必要となるプロセッサの処理が軽くなるため、受信性能が向上する（単位時間に処理できるパケットの数が増加する）という効果がある。また、１パケットの処理に必要となるプロセッサの消費電力が小さくなるという効果もある。
【図面の簡単な説明】
【００４１】
【図１】図１は、本発明の第１の実施例に係るパケット処理装置の構成を示すブロック図である。
【図２】図２は、本発明の第１の実施例に係るパケット処理装置のディスクリプタの概要を説明する図である。
【図３】図３は、本発明の第１の実施例に係るパケット処理装置の転送管理部の動作を説明するフローチャートである。
【図４】図４は、本発明の第１の実施例に係るパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図５】図５は、本発明の第１の実施例に係るパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図６】図６は、本発明の第１の実施例に係るパケット処理装置の受信処理部の動作を説明するフローチャートである。
【図７】図７は、本発明の第２の実施例に係るパケット処理装置の構成を示すブロック図である。
【図８】図８は、本発明の第２の実施例に係るパケット処理装置のディスクリプタの概要を説明する図である。
【図９】図９は、本発明の第２の実施例に係るパケット処理装置の結合パケット転送部の動作を説明するフローチャートである。
【図１０】図１０は、本発明の第２の実施例に係るパケット処理装置の結合パケット転送部の動作を説明するフローチャートである。
【図１１】図１１は、従来のパケット処理装置の構成を示すブロック図である。
【図１２】図１２は、図１１のパケット処理装置のディスクリプタの概要を説明する図である。
【図１３】図１３は、図１１のパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図１４】図１４は、従来のパケット処理装置の別の構成を示すブロック図である。
【図１５】図１５は、図１４のパケット処理装置のディスクリプタの概要を説明する図である。
【図１６】図１６は、図１４のパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図１７】図１７は、従来のパケット処理装置の別の構成を示すブロック図である。
【図１８】図１８は、従来のパケット処理装置の別の構成を示すブロック図である。
【発明を実施するための形態】
【００４２】
［第１の実施例］
以下、図面を参照して本発明の実施例を詳細に説明する。なお、実施例を説明するための全図において、同一機能を有するものは同一符号を付け、その繰り返しの説明は省略する。図１は、本発明の第１の実施例に係るパケット処理装置の構成を示すブロック図である。
【００４３】
図１のパケット処理装置は、図１４の構成と同様に、通信回線（不図示）と接続され、通信回線からデータを受信する回線対応部１００と、通信回線から受信したパケットが格納されるパケットメモリ１０１と、パケットメモリ１０１に格納されたパケットをプロトコル処理部１０４へ渡す受信処理部１０３と、パケットのプロトコル処理を行うプロトコル処理部１０４と、パケット結合用の受信バッファ１０５と、結合パケットの大きさを規制する閾値があらかじめ設定された結合閾値制御部１０７と、通信回線から受信した複数のパケットを受信バッファ１０５において連結して１つの結合パケットを生成するパケット結合部１１０と、パケット結合部１１０によって生成された結合パケットをパケットメモリ１０１にＤＭＡ転送する結合パケット転送部１１１と、予め定められたメモリ上のデータ領域であるディスクリプタ１１１０の初期設定を行う転送管理部１１２とから構成される。なお、転送管理部１１２については、受信処理部１０３の一部として構成しても良い。
【００４４】
このうち、回線対応部１００とパケット結合用の受信バッファ１０５と結合閾値制御部１０７とは、図１４の構成と同等である。
【００４５】
パケット結合部１１０は、回線対応部１００において受信されたパケットをパケット結合用の受信バッファ１０５に転送する。このとき、パケット結合部１１０は、回線対応部１００において受信されたパケットと受信バッファ１０５中に既に格納されているパケットとを連結して１つの結合パケットになるように、パケットを受信バッファ１０５に格納する。そして、パケット結合部１１０は、受信バッファ１０５中の結合パケットの大きさが、結合閾値制御部１０７に設定された閾値を超えると、結合パケットのパケットメモリ１０１への転送要求を発行する。
【００４６】
なお、パケット結合部１１０は、受信バッファ１０５中の結合パケットの大きさが閾値を超える前に、タイムアウト（パケット間の受信間隔が予め定められた期間を超えた場合等）が発生した場合に、転送要求を発行するようにしてもよい。
【００４７】
さらに、パケット結合部１１０は、受信バッファ１０５において結合したパケットの数と各パケットのサイズとを記録し、結合パケットの転送要求を発行する際に、結合したパケットの数と各パケットのサイズとを結合パケット転送部１１１に対して通知する。
【００４８】
結合パケット転送部１１１は、ＤＭＡコントローラ１１１１から構成される。結合パケット転送部１１１は、結合パケットを１度のＤＭＡ転送により、パケットメモリ１０１に転送し、ハードウェア割り込みを発生させて受信処理部１０３の起動要求を発行する。
なお、パケット処理装置のプロセッサ（不図示）へのハードウェア割り込みの発生を行わないようにしてもよい。
【００４９】
また、結合パケット転送部１１１は、パケット結合部１１０から通知された、結合したパケットの数と各パケットのサイズの情報を用いて、転送管理部１１２（プロセッサが実行するソフトウェア）がパケット毎に用意したディスクリプタ１１１０にサイズ等を書き込む。ディスクリプタ１１１０の構成と結合パケット転送部１１１の動作の詳細については後述する。
【００５０】
受信処理部１０３は、起動要求を検知すると、パケット毎に用意されているディスクリプタ１１１０に書き込まれているアドレス情報とサイズの情報とに基づいてパケットメモリ１０１内のパケットを読み出してプロトコル処理部１０４へ渡す。同時に、受信処理部１０３は、プロトコル処理部１０４へ渡したパケットメモリ分を補充するために、パケット処理装置が持つメモリから新たなパケットメモリ１０１の領域を確保する。この受信処理部１０３の動作は、図１１の構成の動作と同等である。
【００５１】
プロトコル処理部１０４は、受信処理部１０３から受け取ったパケットに対して必要なプロトコル処理を行う。そして、プロトコル処理部１０４は、必要なプロトコル処理が終了すると、受信処理部１０３から渡されたパケットが格納されていたパケットメモリ１０１の領域を解放する。このプロトコル処理部１０４の動作は、図１１の構成の動作と同等である。
【００５２】
なお、受信処理部１０３とプロトコル処理部１０４と転送管理部１１２は、汎用のパーソナルコンピュータやワークステーション上で動作するソフトウェアで実現することもできるし、プログラムと協調して動作するＦＰＧＡ（Field Programmable Gate Array）等のハードウェアで実現することも可能である。
パケットメモリ１０１は、パーソナルコンピュータ、通信機器あるいは通信ボード上のメモリとして構成可能である。
【００５３】
回線対応部１００と結合閾値制御部１０７とパケット結合部１１０とは、通信機器あるいは通信ボード上のＦＰＧＡ等により構成可能である。
受信バッファ１０５は、通信機器あるいは通信ボード上のＦＰＧＡ等が持つ記憶領域や、ＦＩＦＯ（First In,First Out）等の記憶回路により構成可能である。
【００５４】
図２に本実施例の結合パケット転送部１１１が使用するディスクリプタ１１１０の構成例を示す。一般的に、受信処理用のパケットメモリ１０１のアドレス等を記録するデータ構造体がディスクリプタ１１１０と呼ばれている。図２の例では、パケットメモリ１０１にＮ個のパケットが格納される場合を示している。
【００５５】
図２のディスクリプタ１１１０は、受信したパケットの書き込み先の先頭アドレスＡ＃１〜Ａ＃Ｎと、先頭アドレスＡ＃１〜Ａ＃Ｎが有効か否かを示す有効フラグＡＦ＃１〜ＡＦ＃Ｎと、先頭アドレスＡ＃１〜Ａ＃Ｎへの書き込みが行われたパケットのパケット長を示す受信データサイズＬ＃１〜Ｌ＃Ｎと、先頭アドレスＡ＃１〜Ａ＃Ｎへのパケットの書き込みが完了したか否かを示す受信完了フラグＷＦ＃１〜ＷＦ＃Ｎとを、複数（Ｎ組）書き込み可能なデータ構造体となっている。このディスクリプタ１１１０の構成は、図１１の構成で一般的に用いられている受信処理用のディスクリプタ１０２０の構成と同等である。
【００５６】
ディスクリプタ１１１０は、実体としては、パケットメモリ１０１と同様に、パーソナルコンピュータ、通信機器あるいは通信ボード上のメモリ内に配置される。
なお、ディスクリプタ１１１０をパケットメモリ１０１と同じメモリ内に配置することも可能であるが、その場合、どちらの用途に使用するのかをメモリ内のアドレスにより分けることができる。
【００５７】
ここで、従来のディスクリプタ１０２０を用いた従来のＤＭＡ転送の動作例を、図１２と図１３を用いて再度詳細に説明する。
まず、パケット処理装置のプロセッサは、パケットの書き込み先の先頭アドレスＡ＃１〜Ａ＃Ｎを決定してディスクリプタ１０２０に書き込み、さらに、その先頭アドレスＡ＃１〜Ａ＃Ｎが有効か否かを示す有効フラグＡＦ＃１〜ＡＦ＃Ｎを「無効」から「有効」に書き換える。
【００５８】
なお、ディスクリプタ１０２０には、先頭アドレスの情報等を書き込む領域がＮ組あるが、書き込む順番は予め決められている。例えば図１２の例では、プロセッサは、１番目の先頭アドレスＡ＃１、２番目の先頭アドレスＡ＃２、・・・・、Ｎ番目の先頭アドレスＡ＃Ｎと順番に書き込む。
【００５９】
一通り書き込んだ後に、再び１番目のパケットの転送が可能になったときには、１番目の先頭アドレスＡ＃１から順番にディスクリプタ１０２０に書き込むようにすればよい。先頭アドレスＡ＃ｎ（ｎは１〜Ｎ）の書き込みが可能か否かは、例えば先頭アドレスＡ＃ｎに対応する有効フラグＡＦ＃ｎが「無効」であれば可能と判断すればよい。
【００６０】
次に、ＤＭＡコントローラ１０２１は、ディスクリプタ１０２０の有効フラグＡＦ＃ｎを確認して、先頭アドレスＡ＃ｎが「有効」であることを有効フラグＡＦ＃ｎが示している場合（図１３ステップＳ１０２においてｙｅｓ）、先頭アドレスＡ＃ｎをディスクリプタ１０２０から読み出し（図１３ステップＳ１０３）、対応するｎ番目のパケットをパケットメモリ１０１の先頭アドレスＡ＃ｎから始まる領域に書き込む（図１３ステップＳ１０４）。
【００６１】
このＤＭＡ転送完了後、ＤＭＡコントローラ１０２１は、ｎ番目のパケットのパケット長を示す受信データサイズＬ＃ｎをディスクリプタ１０２０に書き込むと共に、ディスクリプタ１０２０に設定されている、ｎ番目のパケットの書き込みが完了したことを示す受信完了フラグＷＦ＃ｎを「未了」から「完了」に書き換える（図１３ステップＳ１０５）。
【００６２】
上記のとおりディスクリプタ１０２０には、有効フラグＡＦ＃１〜ＡＦ＃Ｎの領域がＮ個（組）あるが、有効フラグＡＦ＃１〜ＡＦ＃Ｎを確認する順番は予め決められている。例えば、図１２、図１３の例では、ＤＭＡコントローラ１０２１は、１番目の有効フラグＡＦ＃１、２番目の有効フラグＡＦ＃２、・・・・、Ｎ番目の有効フラグＡＦ＃Ｎと順番に確認する。一通り確認が終わった後には、再び１番目の有効フラグＡＦ＃１から順番に確認する。
【００６３】
ディスクリプタ１０２０には、受信データサイズＬ＃１〜Ｌ＃Ｎと受信完了フラグＷＦ＃１〜ＷＦ＃Ｎとを書き込む領域もＮ組用意されている。ＤＭＡコントローラ１０２１は、ｎ番目の先頭アドレスＡ＃ｎが「有効」であることが確認されたｎ番目の有効フラグＡＦ＃ｎに対応する番号の領域に、受信データサイズＬ＃ｎと受信完了フラグＷＦ＃ｎとを書き込む。
【００６４】
次に、パケット処理装置のプロセッサは、定期的にディスクリプタ１０２０の受信完了フラグＷＦ＃ｎを確認して、受信完了フラグＷＦ＃ｎが「完了」を示している場合には、対応するｎ番目の先頭アドレスＡ＃ｎの情報と受信データサイズＬ＃ｎの情報とを用いて、パケットメモリ１０１からｎ番目のパケットを読み出し、必要な処理（例えばプロトコル処理）を行う。
【００６５】
そして、プロセッサは、処理が終わったｎ番目のパケットに対応する、ディスクリプタ１０２０のｎ番目の有効フラグＡＦ＃ｎを「有効」から「無効」に書き換えると共に、ディスクリプタ１０２０のｎ番目の受信完了フラグＷＦ＃ｎを「完了」から「未了」に書き換える。
【００６６】
ディスクリプタ１０２０には、受信完了フラグＷＦ＃１〜ＷＦ＃Ｎの領域がＮ個（組）あるが、受信完了フラグＷＦ＃１〜ＷＦ＃Ｎを確認する順番は予め決められている。例えば、図１２、図１３の例では、プロセッサは、１番目の受信完了フラグＷＦ＃１、２番目の受信完了フラグＷＦ＃２、・・・・、Ｎ番目の受信完了フラグＷＦ＃Ｎと順番に確認する。一通り確認が終わった後には、再び１番目の受信完了フラグＷＦ＃１から順番に確認する。
【００６７】
なお、上記の動作でＤＭＡコントローラ１０２１がＤＭＡ転送完了後にプロセッサに対して割り込み処理要求を行うようにし、プロセッサが定期的に受信完了フラグＷＦ＃１〜ＷＦ＃Ｎを確認する代わりに、プロセッサがＤＭＡコントローラ１０２１からの割り込み処理要求を受信したときに受信完了フラグＷＦ＃１〜ＷＦ＃Ｎを確認するようにしてもよい。
【００６８】
次に、図２の構成のディスクリプタ１１１０を用いた本実施例の動作例を図１〜図６を用いて説明する。図３は転送管理部１１２の動作を説明するフローチャート、図４、図５はＤＭＡコントローラ１１１１の動作を説明するフローチャート、図６は受信処理部１０３の動作を説明するフローチャートである。
【００６９】
最初に、転送管理部１１２（プロセッサが実行するソフトウェア）は、パケット処理装置の初期設定として、Ｎ個の各パケットの先頭データの、パケットメモリ１０１上におけるアドレス、すなわち各パケットの書き込み先の先頭アドレスＡ＃ｎ（ｎは１〜Ｎ）を決定してディスクリプタ１０２０に書き込む（図３ステップＳ３００）。さらに、転送管理部１１２は、その先頭アドレスＡ＃ｎが有効か否かを示す有効フラグＡＦ＃ｎを「無効」から「有効」に書き換える（図３ステップＳ３０１）。
【００７０】
ディスクリプタ１１１０には、先頭アドレスの情報等を書き込む領域がＮ組用意されているが、書き込む順番は予め決められている。例えば図２の例では、転送管理部１１２は、１番目の先頭アドレスＡ＃１、２番目の先頭アドレスＡ＃２、・・・・、Ｎ番目の先頭アドレスＡ＃Ｎと順番に書き込む。
【００７１】
一通り書き込んだ後に、再び１番目のパケットの転送が可能になったときには、１番目の先頭アドレスＡ＃１から順番にディスクリプタ１１１０に書き込むようにすればよい。先頭アドレスＡ＃ｎの書き込みが可能か否かは、例えば先頭アドレスＡ＃ｎに対応する有効フラグＡＦ＃ｎが「無効」であれば可能と判断すればよい。なお、この動作は従来技術と同等である。
【００７２】
最初に、結合パケット転送部１１１内のＤＭＡコントローラ１１１１は、ディスクリプタ１１１０の読出および書込の順を示す変数ｎを１に初期化する（図４ステップＳ４００）。
そして、ＤＭＡコントローラ１１１１は、パケット結合部１１０から転送要求が発行されると、ディスクリプタ１１１０のｎ番目の有効フラグＡＦ＃ｎを確認する（図４ステップＳ４０１）。
【００７３】
ＤＭＡコントローラ１１１１は、ｎ番目の先頭アドレスＡ＃ｎが「有効」であることを有効フラグＡＦ＃ｎが示している場合（図４ステップＳ４０２においてｙｅｓ）、パケット結合部１１０からの情報（結合したパケットの数と各パケットのサイズ）を確認して、パケットメモリ１０１に転送すべきデータが、結合されていない単体のパケットか結合パケットかを確認する（図４ステップＳ４０３）。
【００７４】
ＤＭＡコントローラ１１１１は、パケットメモリ１０１に転送すべきデータが結合パケットではない場合（結合したパケットの数が１の場合）、対応する有効フラグＡＦ＃ｎが「有効」であることを確認したｎ番目の先頭アドレスＡ＃ｎをディスクリプタ１１１０から読み出し（図４ステップＳ４０４）、対応するｎ番目のパケットをパケットメモリ１０１の先頭アドレスＡ＃ｎから始まる領域に書き込むＤＭＡ転送を行う（図４ステップＳ４０５）。
【００７５】
このＤＭＡ転送の完了後、ＤＭＡコントローラ１１１１は、ｎ番目のパケットのパケット長を示す受信データサイズＬ＃ｎをディスクリプタ１１１０に書き込むと共に、ディスクリプタ１１１０に設定されている、ｎ番目のパケットの書き込みが完了したことを示す受信完了フラグＷＦ＃ｎを「未了」から「完了」に書き換える（図４ステップＳ４０６）。
【００７６】
ＤＭＡコントローラ１１１１は、変数ｎがＮと等しいかどうかを判定する（図４ステップＳ４０７）。ＤＭＡコントローラ１１１１は、変数ｎがＮに達していない場合（ステップＳ４０７においてｎｏ）、変数ｎを１増やし（図４ステップＳ４０８）、ステップＳ４０１に戻る。また、ＤＭＡコントローラ１１１１は、変数ｎがＮに達した場合（ステップＳ４０７においてｙｅｓ）、ステップＳ４００に戻る。
【００７７】
上記のとおりディスクリプタ１１１０には、有効フラグＡＦ＃１〜ＡＦ＃Ｎの領域がＮ個（組）用意されているが、有効フラグＡＦ＃１〜ＡＦ＃Ｎを確認する順番は予め決められている。例えば、図２、図４の例では、ＤＭＡコントローラ１１１１は、１番目の有効フラグＡＦ＃１、２番目の有効フラグＡＦ＃２、・・・・、Ｎ番目の有効フラグＡＦ＃Ｎと順番に確認する。一通り確認が終わった後、ＤＭＡコントローラ１１１１は、変数ｎを１に初期化し（ステップＳ４００）、再び１番目の有効フラグＡＦ＃１から順番に確認する。
【００７８】
ディスクリプタ１１１０には、受信データサイズＬ＃１〜Ｌ＃Ｎと受信完了フラグＷＦ＃１〜ＷＦ＃Ｎとを書き込む領域もＮ組用意されている。ＤＭＡコントローラ１１１１は、ｎ番目の先頭アドレスＡ＃ｎが「有効」であることが確認されたｎ番目の有効フラグＡＦ＃ｎに対応する番号の領域に、受信データサイズＬ＃ｎと受信完了フラグＷＦ＃ｎとを書き込む。
【００７９】
また、ＤＭＡコントローラ１１１１は、パケットメモリ１０１に転送すべきデータが結合パケットの場合（結合したパケットの数ｋが２以上の場合）、結合したパケットの数ｋを確認し（図５ステップＳ４０９）、ディスクリプタ１１１０内の「ｋ−１」個の有効フラグＡＦ＃（ｎ＋１）〜ＡＦ＃（ｎ＋ｋ−１）を確認する（図５ステップＳ４１０）。ここで、「ｋ−１」個の有効フラグを確認する理由は、ｎ番目の有効フラグＡＦ＃ｎを既にステップＳ４０２で確認しているからである。
【００８０】
なお、ｎ＝Ｎの場合、ＤＭＡコントローラ１１１１は、ＡＦ＃１からＡＦ＃（ｋ−１）までの有効フラグを確認すればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１１１１は、ＡＦ＃（ｎ＋１）からＡＦ＃ＮまでとＡＦ＃１からＡＦ＃（ｋ−１−（Ｎ−ｎ））までの有効フラグを確認すればよい。
【００８１】
ＤＭＡコントローラ１１１１は、ステップＳ４０２，Ｓ４１０の処理により、確認したｋ個の有効フラグが全て「有効」の場合（ステップＳ４１０においてｙｅｓ）、確認したｋ個の有効フラグの中で最初の有効フラグＡＦ＃ｎに対応するｎ番目の先頭アドレスＡ＃ｎをディスクリプタ１１１０から読み出し（図５ステップＳ４１１）、対応する結合パケットをパケットメモリ１０１の先頭アドレスＡ＃ｎから始まる領域に書き込むＤＭＡ転送を行う（図５ステップＳ４１２）。
【００８２】
このＤＭＡ転送の完了後、ＤＭＡコントローラ１１１１は、パケット結合部１１０から通知された情報（結合した各パケットのサイズ）に基づいて、パケットメモリ１０１にＤＭＡ転送した結合パケットを構成する各パケットのパケット長を示す受信データサイズＬ＃ｎ〜Ｌ＃（ｎ＋ｋ−１）を、ディスクリプタ１１１０に書き込む（図５ステップＳ４１３）。
【００８３】
なお、ｎ＝Ｎの場合、ＤＭＡコントローラ１１１１は、受信データサイズＬ＃ｎと、Ｌ＃１からＬ＃（ｋ−１）までの受信データサイズをディスクリプタ１１１０に書き込むようにすればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１１１１は、受信データサイズＬ＃ｎと、Ｌ＃（ｎ＋１）からＬ＃ＮまでとＬ＃１からＬ＃（ｋ−１−（Ｎ−ｎ））までの受信データサイズをディスクリプタ１１１０に書き込むようにすればよい。
【００８４】
続いて、ＤＭＡコントローラ１１１１は、ディスクリプタ１１１０内の「ｋ−１」個の先頭アドレスＡ＃（ｎ＋１）〜Ａ＃（ｎ＋ｋ−１）を、結合パケットを構成するｋ個のパケットのうち、初めの「ｋ−１」個のパケットのパケット長に応じて書き換える（図５ステップＳ４１４）。
【００８５】
具体的には、ＤＭＡコントローラ１１１１は、先頭アドレスＡ＃（ｎ＋１）については、先頭アドレスＡ＃ｎと、結合パケットを構成するｋ個のパケットのうち１番目のパケットのパケット長（受信データサイズＬ＃ｎが示す値）とを足した値に書き換える。また、ＤＭＡコントローラ１１１１は、先頭アドレスＡ＃（ｎ＋ｋ−１）については、先頭アドレスＡ＃（ｎ＋ｋ−２）と、結合パケットを構成するｋ個のパケットのうち「ｋ−１」番目のパケットのパケット長（受信データサイズＬ＃（ｎ＋ｋ−２）が示す値）とを足した値に書き換える。
【００８６】
このように、ＤＭＡコントローラ１１１１は、先頭アドレスＡ＃ｉを書き換える場合、１つ前の先頭アドレスＡ＃（ｉ−１）と、結合パケットを構成するパケットのうち「ｉ−１」番目のパケットのパケット長とを足した値に書き換えるようにすればよい。
【００８７】
次に、ＤＭＡコントローラ１１１１は、パケットメモリ１０１にＤＭＡ転送した結合パケットを構成する各パケットに対応する受信完了フラグＷＦ＃ｎ〜ＷＦ＃（ｎ＋ｋ−１）を「未了」から「完了」に書き換える（図５ステップＳ４１５）。
【００８８】
なお、ｎ＝Ｎの場合、ＤＭＡコントローラ１１１１は、受信完了フラグＷＦ＃ｎと、ＷＦ＃１からＷＦ＃（ｋ−１）までの受信完了フラグとを「未了」から「完了」に書き換えるようにすればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１１１１は、受信完了フラグＷＦ＃ｎと、ＷＦ＃（ｎ＋１）からＷＦ＃ＮまでとＷＦ＃１からＷＦ＃（ｋ−１−（Ｎ−ｎ））までの受信完了フラグとを「完了」に書き換えるようにすればよい。
【００８９】
そして、ＤＭＡコントローラ１１１１は、ｎ＋ｋ＞Ｎが成立するかどうかを確認し（図５ステップＳ４１６）、ｎ＋ｋがＮより大きい場合は、変数ｎをｎ＝ｎ＋ｋ−Ｎとし（図５ステップＳ４１７）とし、ステップＳ４０１に戻る。また、ＤＭＡコントローラ１１１１は、ｎ＋ｋがＮ以下の場合は、変数ｎをｎ＝ｎ＋ｋとし（図５ステップＳ４１８）とし、ステップＳ４０１に戻る。
【００９０】
こうして、本実施例のＤＭＡ転送では、ｋ個のパケットが連結された結合パケットを纏めてパケットメモリ１０１に転送し、ディスクリプタ１１１０の先頭アドレスの情報を一部書き換えることにより、パケット処理装置のプロセッサ（受信処理部１０３とプロトコル処理部１０４）に対して各パケットの先頭が書き込まれたアドレスを通知するようにしている。
【００９１】
受信処理部１０３（プロセッサが実行するソフトウェア）は、定期的にディスクリプタ１１１０の受信完了フラグＷＦ＃ｎ（ｎは１〜Ｎ）を確認して、受信完了フラグＷＦ＃ｎが「完了」を示している場合（図６ステップＳ５０１においてｙｅｓ）、対応するｎ番目の先頭アドレスＡ＃ｎの情報と受信データサイズＬ＃ｎの情報とに基づいてパケットメモリ１０１からｎ番目のパケットを読み出してプロトコル処理部１０４へ渡す（図６ステップＳ５０２）。
【００９２】
プロトコル処理部１０４で必要な処理が行われた後に（図６ステップＳ５０３においてｙｅｓ）、受信処理部１０３（プロセッサが実行するソフトウェア）は、プロトコル処理が終わったｎ番目のパケットに対応する、ディスクリプタ１１１０のｎ番目の有効フラグＡＦ＃ｎを「有効」から「無効」に書き換えると共に、ディスクリプタ１１１０のｎ番目の受信完了フラグＷＦ＃ｎを「完了」から「未了」に書き換える（図６ステップＳ５０４）。
【００９３】
ディスクリプタ１１１０には、受信完了フラグＷＦ＃１〜ＷＦ＃Ｎの領域がＮ個（組）あるが、受信完了フラグＷＦ＃１〜ＷＦ＃Ｎを確認する順番は予め決められている。例えば、受信処理部１０３（プロセッサが実行するソフトウェア）は、１番目の受信完了フラグＷＦ＃１、２番目の受信完了フラグＷＦ＃２、・・・・、Ｎ番目の受信完了フラグＷＦ＃Ｎと順番に確認する。一通り確認が終わった後には、再び１番目の受信完了フラグＷＦ＃１から順番に確認する。
【００９４】
なお、定期的にディスクリプタ１１１０の受信完了フラグＷＦ＃ｎを確認する代わりに、ＤＭＡ転送の完了後にＤＭＡコントローラ１１１１がプロセッサに対して割り込み処理要求を発行し、この割り込み処理要求に応じて受信処理部１０３（プロセッサが実行するソフトウェア）が、ディスクリプタ１１１０の受信完了フラグＷＦ＃ｎ（ｎは１〜Ｎ）を確認するようにしてもよい。
【００９５】
以上のプロセッサ（ソフトウェア）の動作は図１１の構成の従来技術のプロセッサ（ソフトウェア）の動作と同等であり、結合パケットを元の複数のパケットに復元する処理を受信処理用のソフトウェアで実現する必要はない。すなわち、受信処理部１０３とプロトコル処理部１０４とは、本実施例のように結合パケットがパケットメモリ１０１に書き込まれる場合でも、従来と同じ処理を行えばよい。
【００９６】
以上に説明したように、本実施例のパケット処理装置は、纏めＤＭＡ転送を実現することができ、かつ結合パケットを元の複数のパケットに復元するための情報をディスクリプタ１１１０に書き込む手段（ＤＭＡコントローラ１１１１）を内蔵する結合パケット転送部１１１を備えている。ＤＭＡコントローラ１１１１はハードウェアで実装可能なので、復元処理のソフトウェアでの実行を不要とし、かつ、纏めＤＭＡ転送の効果による高い受信性能を実現することが可能となる。
【００９７】
なお、従来の図１４の構成、もしくは図１７の構成のパケット処理装置において、結合パケットを元の複数のパケットに復元する処理をプロセッサ（ソフトウェア）で実行する場合と比較すると、本実施例では、復元処理をプロセッサ（ソフトウェア）で行う必要がなくなるので、１パケットの処理に必要となるプロセッサの処理が軽くなり、受信性能が向上する（単位時間に処理できるパケットの数が増加する）という効果がある。また、本実施例では、１パケットの処理に必要となるプロセッサの消費電力が小さくなるという効果もある。
【００９８】
また、本実施例では、図１１の構成の受信処理部１０３およびプロトコル処理部１０４用のソフトウェアをそのまま本実施例のパケット処理装置で使用することができる。これは、ハードウェア（ＤＭＡコントローラ１１１１）を変えるだけで、纏めＤＭＡによる受信性能の向上が実現できることを示している。
【００９９】
なお、本実施例では、プロセッサ（ソフトウェア）が用意するパケットメモリ１０１上のアドレス領域を複数のパケットで共有するので、共有する全てのパケットの受信処理（プロトコル処理部１０４への転送）が完了するまでそのアドレス領域は再利用できない。
【０１００】
また、転送管理部１１２（プロセッサが実行するソフトウェア）は、結合パケットの最大サイズの書き込みが可能なサイズのアドレス領域を用意してディスクリプタ１１１０に設定する必要が有る。結合パケットの最大サイズは、結合閾値制御部１０７に設定される閾値に許容最大パケット長を足した値となる。
【０１０１】
また、本実施例のパケット処理装置で纏めＤＭＡ転送を正常に行うため、転送管理部１１２（プロセッサが実行するソフトウェア）は、事前に、パケットメモリ１０１内に、Ｎ×ＤＢ＿ｍｕｘ（ＤＢ＿ｍｕｘは結合パケットの最大サイズ）のバッファ領域を確保しておく必要がある。この領域確保は、図１４の構成の場合と同等である。
【０１０２】
例えば、本実施例において、上記のバッファ領域をパケットメモリ１０１内の連続した領域で用意する場合、このバッファ領域の先頭アドレスは、転送管理部１１２（プロセッサが実行するソフトウェア）が設定する、図２中の先頭アドレスＡ＃１である。一方、バッファ領域の最終アドレスは、先頭アドレスＡ＃１＋（Ｎ×ＤＢ＿ｍｕｘ）−１となる。この場合、転送管理部１１２（プロセッサが実行するソフトウェア）が設定する、図２中の先頭アドレスＡ＃Ｎは、先頭アドレスＡ＃１＋（Ｎ−１）×ＤＢ＿ｍｕｘである。
【０１０３】
このような領域確保により、結合パケットのＤＭＡ転送の転送先アドレスがＡ＃Ｎとなった場合でも、このアドレスＡ＃Ｎから上記のバッファ領域の最終アドレスまでＤＢ＿ｍｕｘ分の領域がパケットメモリ１０１に確保されているので、結合パケットをこのＤＢ＿ｍｕｘ分の連続した領域に確実に書き込むことができる。
【０１０４】
仮に、アドレスＡ＃Ｎからバッファ領域の最終アドレスまでの領域がＤＢ＿ｍｕｘより小さい場合、書き込むべき結合パケットの一部を本来書き込んではいけない領域に書き込んでしまうケースが発生することになる。
【０１０５】
また、パケットメモリ１０１内に確保するバッファ領域を連続した領域ではなく、例えばＮ個の領域に非連続で用意する場合、ＤＢ＿ｍｕｘ分の領域をあらかじめＮ個用意し、それぞれの領域の先頭アドレスをＡ＃１〜Ａ＃Ｎとして転送管理部１１２（プロセッサが実行するソフトウェア）で設定することにより、結合パケットをＤＢ＿ｍｕｘ分の連続した領域に確実に書き込むことができ、本来書き込んではいけない領域に書き込んでしまうような不具合は発生しない。
【０１０６】
本実施例のパケット処理装置では、ＤＭＡ転送後にＤＭＡコントローラ１１１１がディスクリプタ１１１０の情報（先頭アドレス、受信データサイズ、受信完了フラグ）を書き換えることにより、ソフトウェアでの復元処理を不要としている。
【０１０７】
復元処理を受信処理部１０３、プロトコル処理部１０４、もしくは図１７の結合パケット分離部１０８のハードウェアで実現しようとすると、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケット結合部１０６から受信処理部１０３、プロトコル処理部１０４、もしくは図１７の結合パケット分離部１０８に通知する手段が必要となる。
【０１０８】
また、復元処理を受信処理部１０３、プロトコル処理部１０４、もしくは図１７の結合パケット分離部１０８のハードウェアで実現しようとすると、ＤＭＡ転送完了後、受信処理が起動されるまで、場合によっては複数の結合パケット分の復元処理に必要な情報を保持しておく必要があることを考慮しなければならない。
【０１０９】
これに対して、本実施例のパケット処理装置では、１つの結合パケットのＤＭＡ転送が完了した時点で結合パケットの復元処理は終わっているので、複数の結合パケット分の情報を保持する必要がない。したがって、復元処理を受信処理部１０３、プロトコル処理部１０４、もしくは図１７の結合パケット分離部１０８のハードウェアで実現する場合と比較して、本実施例の方がハードウェアの規模が小さい。
【０１１０】
また、復元処理に必要な情報をパケット結合部１０６から受信処理部１０３、プロトコル処理部１０４、もしくは図１７の結合パケット分離部１０８に通知する手段として、復元処理に必要な情報を結合パケットの中に書き込むことも可能である。具体的には、結合された各パケットのサイズを通知するために、例えば各パケットの前にパケットサイズ等を書き込んだヘッダを付与して付加ヘッダをパケットデータと共にＤＭＡ転送する方法が考えられる。
【０１１１】
しかし、復元処理に必要な情報を結合パケットの中に書き込む場合、ＤＭＡ転送に使用するバスの帯域の一部を、復元処理に必要な情報で占有してしまうことになるので、本来のパケットデータの転送に使用できる実効帯域が小さくなり、その結果、ＤＭＡ転送の性能が劣化してしまうという問題が発生する。
本実施例のパケット処理装置では、復元処理に必要な情報を結合パケットに書き込む必要がないので、上記のような実効帯域の劣化は起こらない。
【０１１２】
本実施例では、結合パケット転送部１１１をハードウェアで実現する例を示したが、受信処理に使用するプロセッサとは別のプロセッサとソフトウェアにより結合パケット転送部１１１の少なくとも一部の処理を実装することも可能である。このように結合パケット転送部１１１の少なくとも一部の処理をソフトウェアで実現する場合でも、結合パケットを元の複数のパケットに復元する処理を受信処理部１０３もしくはプロトコル処理部１０４で行う必要がなくなるので、纏めＤＭＡ転送の効果による高い受信性能を実現することが可能となる。
【０１１３】
また、結合パケット転送部１１１の少なくとも一部の処理をソフトウェアで実現する場合でも、結合パケット転送部１１１をハードウェアで実現する場合と同様に、結合パケットを元の複数のパケットに復元する処理に必要となるハードウェアの規模が小さくなる効果（複数の結合パケット分の情報を保持する必要がないことによる効果）、およびパケットデータの転送に使用できる実効帯域の劣化が起こらない効果（復元処理に必要な情報を結合パケットの中に加えないことによる効果）を得ることができる。
【０１１４】
本実施例の変形として、ディスクリプタ１１１０に、先頭アドレスの書き換えを行ったか否かを示す書き換え実行フラグの領域を追加してもよい。例えば、先頭アドレスＡ＃１〜Ａ＃Ｎの初期設定を行う転送管理部１１２を実装しているプロセッサがキャッシュメモリを持っている場合、ディスクリプタ１１１０に書き込んだ先頭アドレスＡ＃１〜Ａ＃Ｎがキャッシュメモリ内にコピーされる。
【０１１５】
しかし、ＤＭＡコントローラ１１１１によりディスクリプタ１１１０内の先頭アドレスが書き換えられたときに、転送管理部１１２を実装しているプロセッサのキャッシュメモリ内の該当の情報は書き換えが行われない場合がある。このような場合でも、プロセッサが、キャッシュメモリ内の情報ではなく、ディスクリプタ１１１０内の情報を読み出すために、書き換え実行フラグを参照することができる。
【０１１６】
具体的には、プロセッサは、書き換え実行フラグを参照した結果、ディスクリプタ１１１０内の先頭アドレスが書き換えられていないと判断した場合、キャッシュメモリ内の情報を読み出して使用し、ディスクリプタ１１１０内の先頭アドレスが書き換えられたと判断した場合、一時的にキャッシュを無効にしてディスクリプタ１１１０内の先頭アドレスを直接読み出して使用すればよい。
【０１１７】
結合パケット転送部１１１は、図５のステップＳ４１４の処理でディスクリプタ１１１０内の先頭アドレスを書き換えたときに、ディスクリプタ１１１０内の対応する書き換え実行フラグを、「書き換え未実行」から「書き換え実行」に書き換えるようにすればよい。
【０１１８】
また、本実施例の別の変形例として、転送管理部１１２（プロセッサが実行するソフトウェア）が書き込む先頭アドレスの領域とは別に、ＤＭＡコントローラ１１１１が変更後の先頭アドレスを書き込む領域をディスクリプタ１１１０に用意してもよい。この場合、受信処理部１０３（プロセッサが実行するソフトウェア）は、変更後の先頭アドレスが書き込まれた領域を参照することになる。また、図５のステップＳ４１４で説明した処理は、先頭アドレスの書き換えではなく、変更後の先頭アドレスを書き込む処理となる。
【０１１９】
また、本実施例において、ＤＭＡコントローラ１１１１とそれぞれのＤＭＡコントローラ１１１１に対応するディスクリプタ１１１０とを複数搭載する構成としてもよい。また、パケット結合部１１０においてパケットの種類を判定して同じ種類のパケットを結合パケットとして纏める構成としてもよいし、パケットの種類に応じて複数のＤＭＡコントローラ１１１１と複数のディスクリプタ１１１０とを使い分ける構成としてもよい。
【０１２０】
パケットの種類別にＤＭＡコントローラ１１１１とディスクリプタ１１１０とを用意し、パケットの種類に応じて複数のＤＭＡコントローラ１１１１と複数のディスクリプタ１１１０とを使い分ける構成とすると、パケットの種類毎に異なる受信処理を行うことが容易になる。
【０１２１】
また、本実施例において、複数のＣＰＵコアを内蔵するプロセッサのコア毎に複数のＤＭＡコントローラ１１１１と複数のディスクリプタ１１１０とを使い分ける構成としてもよいし、バーチャルマシン毎に複数のＤＭＡコントローラ１１１１と複数のディスクリプタ１１１０とを使い分ける構成としてもよい。
【０１２２】
ＣＰＵコア毎もしくはバーチャルマシン毎に複数のＤＭＡコントローラ１１１１と複数のディスクリプタ１１１０とを使い分ける構成とすることにより、ＤＭＡコントローラ等が１個のみの場合と比較して、ソフトウェアによる受信処理の性能を向上させることができる。
【０１２３】
［第２の実施例］
次に、本発明の第２の実施例について説明する。第１の実施例では、ＤＭＡ転送を用いる場合を前提として説明したが、ＤＭＡ転送を用いないパケット処理装置においても、複数のパケットを連結した結合パケットを纏めてパケットメモリに書き込む纏め書き込みにより、パケットメモリへの書き込みの実効スループットが大きくなる場合がある（例えばパケットメモリがＤＲＡＭ（Dynamic Random Access Memory）で構成されている場合等）。
【０１２４】
図７は本発明の第２の実施例に係るパケット処理装置の構成を示すブロック図である。図７のパケット処理装置は、回線対応部１００と、パケットメモリ１０１と、受信処理部１０３と、プロトコル処理部１０４と、受信バッファ１０５と、結合閾値制御部１０７と、パケット結合部１１０と、転送管理部１１２と、結合パケット転送部１１３とから構成される。
【０１２５】
図７の構成と図１の構成の違いは、図１における転送手段を、パケット処理装置のプロセッサ（ソフトウェア）による書き込み手段に置き換えた点である。つまり、本実施例は、図１の結合パケット転送部１１１を、ソフトウェアによる結合パケット転送部１１３に置き換えたものである。
【０１２６】
回線対応部１００とパケットメモリ１０１と受信処理部１０３とプロトコル処理部１０４と受信バッファ１０５と結合閾値制御部１０７と転送管理部１１２とは、図１の構成と同等である。
【０１２７】
図７のパケット結合部１１０は、回線対応部１００において受信されたパケットをパケット結合用の受信バッファ１０５に転送する。このとき、パケット結合部１１０は、回線対応部１００において受信されたパケットと受信バッファ１０５中に既に格納されているパケットとを結合して１つの結合パケットになるように、パケットを受信バッファ１０５に格納する。そして、パケット結合部１１０は、受信バッファ１０５中の結合パケットの大きさが、結合閾値制御部１０７に設定された閾値を超えると、結合パケットのパケットメモリ１０１への転送要求を発行する。
【０１２８】
なお、パケット結合部１１０は、受信バッファ１０５中の結合パケットの大きさが閾値を超える前に、タイムアウト（パケット間の間隔が予め定められた期間を超えた場合等）が発生した場合に、転送要求を発行するようにしてもよい。
さらに、パケット結合部１１０は、受信バッファ１０５において結合したパケットの数と各パケットのサイズとを記録し、結合パケットの転送要求を発行する際に、結合したパケットの数と各パケットのサイズの情報を結合パケット転送部１１３に対して通知する。
【０１２９】
結合パケット転送部１１３（プロセッサが実行するソフトウェア）は、複数のパケットが結合された結合パケットをパケットメモリ１０１に書き込み、受信処理部１０３の起動要求を行なう。また、結合パケット転送部１１３（プロセッサが実行するソフトウェア）は、パケット結合部１１０から通知された、結合したパケットの数と各パケットのサイズの情報を用いて、パケット毎に用意したディスクリプタ１１３０にサイズ等の情報を書き込む。
【０１３０】
図８に示すように、ディスクリプタ１１３０の構成は、第１の実施例のディスクリプタ１１１０の構成と同等である。ただし、本実施例では、結合パケット転送部１１１の代わりに、結合パケット転送部１１３（プロセッサが実行するソフトウェア）がディスクリプタ１１３０への書き込みを行うという違いがある。
【０１３１】
図９、図１０は結合パケット転送部１１３（プロセッサが実行するソフトウェア）の動作を説明するフローチャートである。最初に、結合パケット転送部１１３は、変数ｎを１に初期化し（図９ステップＳ６００）、パケット結合部１１０から転送要求が発行された後に、ディスクリプタ１１３０の有効フラグＡＦ＃ｎを確認する（図９ステップＳ６０１）。
【０１３２】
結合パケット転送部１１３は、先頭アドレスＡ＃ｎが「有効」であることを有効フラグＡＦ＃ｎが示している場合（図９ステップＳ６０２においてｙｅｓ）、パケット結合部１１０からの情報を確認して、パケットメモリ１０１に転送すべきデータが単体のパケットか結合パケットかを確認する（図９ステップＳ６０３）。
【０１３３】
結合パケット転送部１１３は、パケットメモリ１０１に転送すべきデータが結合パケットではない場合、有効フラグＡＦ＃ｎが「有効」であることを確認した先頭アドレスＡ＃ｎをディスクリプタ１１３０から読み出し（図９ステップＳ６０４）、対応するｎ番目のパケットをパケットメモリ１０１の先頭アドレスＡ＃ｎから始まる領域に書き込む（図９ステップＳ６０５）。
【０１３４】
この書き込み完了後、結合パケット転送部１１３は、受信データサイズＬ＃ｎをディスクリプタ１１３０に書き込むと共に、ディスクリプタ１１３０に設定されている受信完了フラグＷＦ＃ｎを「未了」から「完了」に書き換える（図９ステップＳ６０６）。以上のステップＳ６００〜Ｓ６０６およびステップＳ６０７，Ｓ６０８の処理は、図４のステップＳ４００〜Ｓ４０８の処理と同等である。
【０１３５】
また、結合パケット転送部１１３は、パケットメモリ１０１に転送すべきデータが結合パケットの場合、結合したパケットの数ｋを確認し（図１０ステップＳ６０９）、ディスクリプタ１１３０内の「ｋ−１」個の有効フラグＡＦ＃（ｎ＋１）〜ＡＦ＃（ｎ＋ｋ−１）を確認する（図１０ステップＳ６１０）。
【０１３６】
結合パケット転送部１１３は、確認したｋ個の有効フラグが全て「有効」の場合（ステップＳ６１０においてｙｅｓ）、確認したｋ個の有効フラグの中で最初の有効フラグＡＦ＃ｎに対応する先頭アドレスＡ＃ｎをディスクリプタ１１３０から読み出し（図１０ステップＳ６１１）、対応する結合パケットをパケットメモリ１０１の先頭アドレスＡ＃ｎから始まる領域に書き込む（図１０ステップＳ６１２）。
【０１３７】
この書き込み完了後、結合パケット転送部１１３は、パケットメモリ１０１に書き込んだ結合パケットを構成する各パケットのパケット長を示す受信データサイズＬ＃ｎ〜Ｌ＃（ｎ＋ｋ−１）をディスクリプタ１１３０に書き込む（図１０ステップＳ６１３）。
【０１３８】
続いて、結合パケット転送部１１３は、ディスクリプタ１１３０内の「ｋ−１」個の先頭アドレスＡ＃（ｎ＋１）〜Ａ＃（ｎ＋ｋ−１）を、結合パケットを構成するｋ個のパケットのうち、初めの「ｋ−１」個のパケットのパケット長に応じて書き換える（図１０ステップＳ６１４）。
【０１３９】
次に、結合パケット転送部１１３は、パケットメモリ１０１に書き込んだ結合パケットを構成する各パケットに対応する受信完了フラグＷＦ＃ｎ〜ＷＦ＃（ｎ＋ｋ−１）を「未了」から「完了」に書き換える（図１０ステップＳ６１５）。
【０１４０】
以上のステップＳ６０９〜Ｓ６１５およびステップＳ６１６〜Ｓ６１８の処理は、図５のステップＳ４０９〜Ｓ４１８の処理と同等である。ステップＳ６１０，Ｓ６１３，Ｓ６１５において、ｎ＝Ｎ、またはｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ステップＳ４１０，Ｓ４１３，Ｓ４１５で説明した処理を実行すればよい。
【０１４１】
こうして、本実施例のパケット処理装置は、纏め書き込みを実現することができ、かつ結合パケットを元の複数のパケットに復元するための情報をディスクリプタ１１３０に書き込む手段（結合パケット転送部１１３）を備えている。本実施例によれば、復元処理の受信処理部１０３、プロトコル処理部１０４、もしくは、図１７の結合パケット分離部１０８での実行を不要とすることができ、かつ、纏め書き込みの効果による高い受信性能を実現することが可能となる。
【０１４２】
また、本実施例では、図１１の構成の受信処理部１０３およびプロトコル処理部１０４用のソフトウェアをそのまま本実施例のパケット処理装置で使用することができる。
なお、本実施例のパケット処理装置で図９、図１０で説明した纏め書き込みを正常に行うため、転送管理部１１２（プロセッサが実行するソフトウェア）は、事前に、パケットメモリ１０１内に、Ｎ×ＤＢ＿ｍｕｘ（ＤＢ＿ｍｕｘは結合パケットの最大サイズ）のバッファ領域を確保しておく必要がある。この領域確保は、図１４および図１の構成の場合と同等である。
【０１４３】
本実施例のパケット処理装置では、纏め書き込み完了後に結合パケット転送部１１３がディスクリプタ１１３０の情報（先頭アドレス、受信データサイズ、受信完了フラグ）を書き換えることにより、復元処理を不要としている。
【０１４４】
復元処理を受信処理部１０３、プロトコル処理部１０４、もしくは図１８の結合パケット分離部１０８で実現しようとすると、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケット結合部１０６から受信処理部１０３、プロトコル処理部１０４、もしくは図１８の結合パケット分離部１０８に通知する手段が必要となる。
【０１４５】
また、復元処理を受信処理部１０３、プロトコル処理部１０４、もしくは図１８の結合パケット分離部１０８で実現しようとすると、纏め書き込み完了後、受信処理が起動されるまで、場合によっては複数の結合パケット分の復元処理に必要な情報を保持しておく必要があることを考慮しなければならない。
【０１４６】
これに対して、本実施例のパケット処理装置では、１つの結合パケットの纏め書き込みが完了した時点で結合パケットの復元処理は終わっているので、複数の結合パケット分の情報を保持する必要がない。したがって、復元処理を受信処理部１０３、プロトコル処理部１０４、もしくは図１８の結合パケット分離部１０８で実現する場合と比較して、本実施例の方がハードウェアの規模が小さい。これは、結合パケットを元の複数のパケットに復元する処理をソフトウェアで実装する場合で比較しても同じである。
【０１４７】
例えば、図１８の構成でパケットメモリ１０１と回線対応部１００以外の構成をすべてソフトウェアで実現した場合、複数の結合パケット分の復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケットメモリ１０１等に保持しておく必要がある。
【０１４８】
これに対して、本実施例の構成でパケットメモリ１０１と回線対応部１００以外の構成をすべてソフトウェアで実現した場合は、複数の結合パケット分の情報（結合したパケットの数、パケット毎のサイズ）を保持する必要がないすなわち、１つの結合パケット分のみの復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケットメモリ１０１等に保持しておくだけでよい。
【０１４９】
つまり、本実施例の構成は、図１８の構成と比較して、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）の保持に使用するパケットメモリ１０１等の容量（書き込み可能なビット数）が小さくてもよいことになり、必要となるハードウェアの規模を削減することができる。
【０１５０】
また、復元処理に必要な情報をパケット結合部１０６から受信処理部１０３、プロトコル処理部１０４、もしくは図１８の結合パケット分離部１０８に通知する手段として、復元処理に必要な情報を結合パケットの中に書き込むことも可能である。具体的には、結合された各パケットのサイズを通知するために、例えば各パケットの前にパケットサイズ等を書き込んだヘッダを付与して付加ヘッダをパケットデータと共に書き込みする方法が考えられる。しかし、この場合、纏め書き込みに使用するバスの帯域の一部を、復元処理に必要な情報で占有してしまうことになるので、本来のパケットデータの書き込みに使用できる実効帯域が小さくなり、その結果、纏め書き込みの性能が劣化する。
【０１５１】
本実施例のパケット処理装置では、復元処理に必要な情報を、パケットメモリ１０１ではなく、パケットメモリ１０１が接続されているバスを使用しない別のメモリ（パケット結合部１１０からの書き込みと結合パケット転送部１１３からの読み出しだけが可能であれば良い）に保持することができ、上記のような実効帯域の劣化は起こらない。
【０１５２】
第１の実施例と同様に、本実施例の変形として、ディスクリプタ１１３０に、先頭アドレスの書き換えを行ったか否かを示す書き換え実行フラグの領域を追加してもよい。この場合、結合パケット転送部１１３は、図１０のステップＳ６１４の処理でディスクリプタ１１３０内の先頭アドレスを書き換えたときに、ディスクリプタ１１３０内の対応する書き換え実行フラグを、「書き換え未実行」から「書き換え実行」に書き換えるようにすればよい。
【０１５３】
また、第１の実施例と同様に、転送管理部１１２（プロセッサが実行するソフトウェア）が書き込む先頭アドレスの領域とは別に、結合パケット転送部１１３が変更後の先頭アドレスを書き込む領域をディスクリプタ１１３０に用意してもよい。
【０１５４】
また、本実施例において、パケット結合部１１０においてパケットの種類を判定して同じ種類のパケットを結合パケットとして纏める構成としてもよいし、パケットの種類に応じて複数のディスクリプタ１１３０を使い分ける構成としてもよい。パケットの種類別にディスクリプタ１１３０を用意し、パケットの種類に応じて複数のディスクリプタ１１３０を使い分ける構成とすると、パケットの種類毎に異なる受信処理を行うことが容易になる。
【０１５５】
また、本実施例において、複数のＣＰＵコアを内蔵するプロセッサのコア毎に複数のディスクリプタ１１３０を使い分ける構成としてもよいし、バーチャルマシン毎に複数のディスクリプタ１１３０を使い分ける構成としてもよい。ＣＰＵコア毎もしくはバーチャルマシン毎に複数のディスクリプタ１１３０を使い分ける構成とすることにより、ディスクリプタ１１３０が１個のみの場合と比較して、ソフトウェアによる書き込み処理および読み出し処理の性能が向上する。
【０１５６】
第１、第２の実施例のパケット処理装置において、パケットメモリ１０１と転送管理部１１２と受信処理部１０３とプロトコル処理部１０４と結合パケット転送部１１３とは、プロセッサ、記憶装置及びインタフェースを備えたコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。
【０１５７】
このようなコンピュータにおいて、本発明のパケット処理方法を実現させるためのプログラムは記憶装置に格納される。プロセッサは、記憶装置に格納されたプログラムに従って第１、第２の実施例で説明した処理を実行する。また、上記のとおり、結合パケット転送部１１１の一部の処理をコンピュータで実現することも可能である。
【産業上の利用可能性】
【０１５８】
本発明は、通信データのプロトコル処理や転送処理等を行う技術に適用することができる。
【符号の説明】
【０１５９】
１００…回線対応部、１０１…パケットメモリ、１０３…受信処理部、１０４…プロトコル処理部、１０５…受信バッファ、１０７…結合閾値制御部、１１０…パケット結合部、１１１，１１３…結合パケット転送部、１１２…転送管理部、１１１０，１１３０…ディスクリプタ、１１１１…ＤＭＡコントローラ。
【図１】
2019185376.tif 000003
【図２】
2019185376.tif 000004
【図３】
2019185376.tif 000005
【図４】
2019185376.tif 000006
【図５】
2019185376.tif 000007
【図６】
2019185376.tif 000008
【図７】
2019185376.tif 000009
【図８】
2019185376.tif 000010
【図９】
2019185376.tif 000011
【図１０】
2019185376.tif 000012
【図１１】
2019185376.tif 000013
【図１２】
2019185376.tif 000014
【図１３】
2019185376.tif 000015
【図１４】
2019185376.tif 000016
【図１５】
2019185376.tif 000017
【図１６】
2019185376.tif 000018
【図１７】
2019185376.tif 000019
【図１８】
2019185376.tif 000020