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