図11は従来のパケット処理装置の構成を示すブロック図である。パケット処理装置は、通信回線からパケットを受信する回線対応部100と、通信回線から受信したパケットが格納されるパケットメモリ101と、通信回線から受信したパケットをパケットメモリ101に転送するパケット転送部102と、パケットメモリ101からパケットを読み出す受信処理部103と、パケットに対してプロトコル処理を行うプロトコル処理部104とを備えている。
このパケット処理装置では、通信回線(不図示)と接続された回線対応部100へのパケットの到着を契機として、パケット転送部102がDMA(Direct Memory Access)を用いたデータ転送を行い、到着したパケットをパケットメモリ101に格納する。同時に、パケット転送部102は、パケットを受信したことをパケット処理装置のプロセッサ(不図示)に通知するためにハードウェア割り込みを発生させ、受信処理部103の起動要求を行う。
パケット転送部102は、パケット処理装置のプロセッサが実行するソフトウェアによって構築されるデータ構造体であるディスクリプタ1020と、ハードウェアであるDMAコントローラ1021とから構成される。図12はディスクリプタ1020の概要を説明する図である。
図12の例では、パケットメモリ101にN個のパケットが格納される場合を示している。この場合、パケット処理装置のプロセッサは、N個のパケットの各々に対応するアドレスやフラグをディスクリプタ1020に設定する。プロセッサは、受信したパケットをパケットメモリ101へ書き込む際の先頭アドレスA#1~A#Nをディスクリプタ1020に予め設定しておく。通常、同時に設定できるアドレスの数は予め決まっており、使用されるアドレスの順番も決まっている。
プロセッサは、設定したアドレスA#1~A#Nが有効か否かを示すフラグAF#1~AF#Nのセット/リセットをディスクリプタ1020に対して行う。アドレスA#1~A#Nの設定後、プロセッサがフラグAF#1~AF#Nを有効にすると、パケットメモリ101へのパケットの書き込みが可能となる。
また、ディスクリプタ1020には、設定されたアドレスA#1~A#Nへのパケットの書き込みが完了したか否かを示す受信完了フラグWF#1~WF#Nと、設定されたアドレスA#1~A#Nへの書き込みが行われたパケットのパケット長を示す受信データサイズL#1~L#Nとが設定される。
図13はDMAコントローラ1021の動作を説明するフローチャートである。最初に、DMAコントローラ1021は、ディスクリプタ1020の読出および書込の順を示す変数nを1に初期化し(図13ステップS100)、n=1番目のフラグAF#1をディスクリプタ1020から読み出す(図13ステップS101)。
DMAコントローラ1021は、先頭アドレスが有効であることをフラグAF#1が示している場合(図13ステップS102においてyes)、n=1番目の先頭アドレスA#1をディスクリプタ1020から読み出し(図13ステップS103)、対応するn=1番目のパケットをパケットメモリ101の先頭アドレスA#1から始まる領域に書き込む(図13ステップS104)。
パケットの書き込み完了後、DMAコントローラ1021は、n=1番目のパケットのパケット長を示す受信データサイズL#1と、パケットの書き込みが完了したことを示す受信完了フラグWF#1とをディスクリプタ1020に書き込む(図13ステップS105)。
また、パケットの書き込みが完了したことをパケット処理装置のプロセッサ(不図示)に通知するためにハードウェア割り込みを発生させ、受信処理部103の起動要求を行う。
そして、DMAコントローラ1021は、変数nがNと等しいかどうかを判定する(図13ステップS106)。DMAコントローラ1021は、変数nがNに達していない場合(ステップS106においてno)、変数nを1増やし(図13ステップS107)、ステップS101に戻る。また、DMAコントローラ1021は、変数nがNに達した場合(ステップS106においてyes)、ステップS100に戻る。こうして、N個のパケットが順番にパケットメモリ101に転送される。
次に、起動した受信処理部103は、パケットメモリ101に転送された受信パケットをプロトコル処理部104へ受渡す。同時に、受信処理部103は、プロトコル処理部104へ受け渡したパケットメモリ分を補充するために、パケット処理装置が持つメモリから新たなパケットメモリ101の領域を確保する。
受信パケットが受け渡されたプロトコル処理部104は、必要なプロトコル処理が終了するとパケットメモリ101の領域を解放する。
以上のような一般的な受信処理では、特に、小さいパケットが高頻度に到着した場合、ハードウェアの割り込みの数が増大するために、パケット処理装置のプロセッサが高負荷となり、受信性能が低下することが知られている。また、DMA転送が起動される回数が増加するために、DMA転送制御に伴うオーバーヘッドのために受信性能が低下することが知られている。
このような問題に対処するために、回線対応部において設定された閾値に達するまで、複数の小さいパケットを1つの大きな結合パケットに纏め、結合パケットのサイズが閾値に到達することを契機として、一括してパケットメモリへ結合パケットをDMA転送する技術が提案されている(特許文献1参照)。
このような、複数の小さなパケットを1つの結合パケットに纏めて転送するDMA転送方式(以降、纏めDMA転送)を用いることにより、パケット処理装置に小さなパケットが到着した場合でも、ハードウェア割り込みの回数を減少させることができ、またDMA転送のオーバーヘッドを削減することができるので、高速な受信処理を行うことができる。
図14は特許文献1に開示された従来のパケット処理装置の構成を示すブロック図である。このパケット処理装置は、回線対応部100と、パケットメモリ101と、結合パケット転送部102aと、受信処理部103と、プロトコル処理部104と、受信バッファ105と、パケット結合部106と、結合閾値制御部107とを備えている。
図14に示したパケット処理装置では、パケット結合部106は、回線対応部100において受信されたパケットをパケット結合用の受信バッファ105に転送する。このとき、パケット結合部106は、回線対応部100において受信されたパケットと受信バッファ105中に既に格納されているパケットとが結合され、1つの結合パケットになるように、パケットを受信バッファ105に格納する。そして、パケット結合部106は、受信バッファ105中の結合パケットの大きさが、結合閾値制御部107にあらかじめ設定された閾値を超えると、結合パケットのパケットメモリ101への転送要求を発行する。
図11の場合と同様に、結合パケット転送部102aは、ディスクリプタ1020aと、DMAコントローラ1021aとから構成される。図15はディスクリプタ1020aの概要を説明する図である。図15の例では、パケットメモリ101にN個の結合パケットが格納される場合を示している。この場合、パケット処理装置のプロセッサは、N個の結合パケットの各々に対応するアドレスやフラグをディスクリプタ1020aに設定する。
プロセッサは、結合パケットをパケットメモリ101へ書き込む際の先頭アドレスAD#1~AD#Nをディスクリプタ1020aに予め設定しておく。通常、同時に設定できるアドレスの数は予め決まっており、使用されるアドレスの順番も決まっている。
プロセッサは、設定したアドレスAD#1~AD#Nが有効か否かを示すフラグADF#1~ADF#Nのセット/リセットをディスクリプタ1020aに対して行う。アドレスAD#1~AD#Nの設定後、プロセッサがフラグADF#1~ADF#Nを有効にすると、パケットメモリ101への結合パケットの書き込みが可能となる。
また、ディスクリプタ1020aには、設定されたアドレスAD#1~AD#Nへの結合パケットの書き込みが完了したか否かを示す受信完了フラグWDF#1~WDF#Nと、設定されたアドレスA#1~A#Nへの書き込みが行われた結合パケットの長さ(結合したパケットのパケット長の合計値)を示す受信データサイズLD#1~LD#Nとが設定される。
図16はDMAコントローラ1021aの動作を説明するフローチャートである。最初に、DMAコントローラ1021aは、ディスクリプタ1020aの読出および書込の順を示す変数nを1に初期化し(図16ステップS200)、n=1番目のフラグADF#1をディスクリプタ1020aから読み出す(図16ステップS201)。
DMAコントローラ1021aは、先頭アドレスが有効であることをフラグADF#1が示している場合(図16ステップS202においてyes)、n=1番目の先頭アドレスAD#1をディスクリプタ1020aから読み出し(図16ステップS203)、対応するn=1番目の結合パケットをパケットメモリ101の先頭アドレスAD#1から始まる領域に書き込む(図16ステップS204)。
結合パケットの書き込み完了後、DMAコントローラ1021aは、n=1番目の結合パケットの長さを示す受信データサイズLD#1と、結合パケットの書き込みが完了したことを示す受信完了フラグWDF#1とをディスクリプタ1020aに書き込む(図16ステップS205)。
また、結合パケットの書き込みが完了したことをパケット処理装置のプロセッサ(不図示)に通知するためにハードウェア割り込みを発生させ、受信処理部103の起動要求を行う。
そして、DMAコントローラ1021aは、変数nがNと等しいかどうかを判定する(図16ステップS206)。DMAコントローラ1021aは、変数nがNに達していない場合(ステップS206においてno)、変数nを1増やし(図16ステップS207)、ステップS201に戻る。また、DMAコントローラ1021aは、変数nがNに達した場合(ステップS206においてyes)、ステップS200に戻る。こうして、N個の結合パケットが順番にパケットメモリ101に転送される。
結合パケット転送部102a(DMAコントローラ1021a)からの起動要求に応じて起動した受信処理部103は、パケットメモリ101に転送された結合パケットをプロトコル処理部104へと渡す。
図14に示した構成によって、受信処理の起動要求が、複数のパケットが結合した結合パケットが転送される度に行われるようになるため、受信処理部103の起動回数が減少し、パケット処理装置のプロセッサの負荷が軽減される。また、DMA転送制御の回数も減少するためにオーバーヘッドの割合が低くなり、高い受信性能を発揮することが可能となる。
ただし、図14に示した構成では、結合パケットをプロトコル処理部104において元の複数のパケットに復元する必要がある。この復元処理をプロトコル処理部104のハードウェアで実現しようとすると、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケット結合部106からプロトコル処理部104に通知する手段が必要となり、そのためにパケット結合部106等のハードウェアの規模が大きくなるという課題がある。また、復元処理に必要な情報をパケットメモリ101等に保持しておく必要がある。
また、復元処理を受信処理部103等のソフトウェアで実現することも可能であるが、上記と同様に、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケット結合部106から受信処理部103に通知する手段が必要となり、そのためにパケット結合部106等のハードウェアの規模が大きくなるという課題がある。また、ソフトウェアで復元処理を行うため、ソフトウェアによる処理が増加し、プロセッサの負荷が上がり、その結果として、纏めDMA転送による受信性能の向上が抑制されるという課題もある。
図17はパケット処理装置の別の構成を示すブロック図である。このパケット処理装置は、図14のパケット処理装置の受信処理部103とプロトコル処理部104との間に、結合パケットを元の複数のパケットに復元する結合パケット分離部108を挿入したものである。
パケットの復元処理をプロトコル処理部104のハードウェアで実現する場合と同様に、結合パケット分離部108をハードウェアで実現しようとすると、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケット結合部106から結合パケット分離部108まで通知する手段が必要となり、そのためにパケット結合部106等のハードウェアの規模が大きくなるという課題がある。
また、結合パケット分離部108をソフトウェアで実現することも可能であるが、上記と同様に、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケット結合部106から結合パケット分離部108に通知する手段が必要となり、そのためにパケット結合部106等のハードウェアの規模が大きくなるという課題がある。また、ソフトウェアで復元処理を行うため、ソフトウェアによる処理が増加し、プロセッサの負荷が上がり、その結果として、纏めDMA転送による受信性能の向上が抑制されるという課題もある。
図18はパケット処理装置の別の構成を示すブロック図である。このパケット処理装置は、図14、図17のパケット処理装置の結合パケット転送部102aの代わりに、ソフトウェアによる結合パケット書き込み部109を設けたものである。DMA転送を用いないパケット処理装置においても、ソフトウェアにより複数のパケットを纏めてパケットメモリ101に書き込むこと(以降、纏め書き込み)によりパケットメモリ101への書き込みの実効スループットが向上する場合(パケットメモリ101がDRAMで構成されている場合等)がある。このように、纏め書き込みを行うパケット処理装置においても、結合パケットを元の複数のパケットに復元する際に上記と同様の問題がある。
また、図18の処理の全て(パケットメモリ101内と回線対応部100内のハードウェア処理を除く)をソフトウェアで行う場合、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケットメモリ101等に保存する必要があり、纏め書き込みを行わない場合と比較して、パケットメモリ101等の容量(書き込み可能なビット数)を大きくする必要があるという課題が有る。
[第1の実施例]
以下、図面を参照して本発明の実施例を詳細に説明する。なお、実施例を説明するための全図において、同一機能を有するものは同一符号を付け、その繰り返しの説明は省略する。図1は、本発明の第1の実施例に係るパケット処理装置の構成を示すブロック図である。
図1のパケット処理装置は、図14の構成と同様に、通信回線(不図示)と接続され、通信回線からデータを受信する回線対応部100と、通信回線から受信したパケットが格納されるパケットメモリ101と、パケットメモリ101に格納されたパケットをプロトコル処理部104へ渡す受信処理部103と、パケットのプロトコル処理を行うプロトコル処理部104と、パケット結合用の受信バッファ105と、結合パケットの大きさを規制する閾値があらかじめ設定された結合閾値制御部107と、通信回線から受信した複数のパケットを受信バッファ105において連結して1つの結合パケットを生成するパケット結合部110と、パケット結合部110によって生成された結合パケットをパケットメモリ101にDMA転送する結合パケット転送部111と、予め定められたメモリ上のデータ領域であるディスクリプタ1110の初期設定を行う転送管理部112とから構成される。なお、転送管理部112については、受信処理部103の一部として構成しても良い。
このうち、回線対応部100とパケット結合用の受信バッファ105と結合閾値制御部107とは、図14の構成と同等である。
パケット結合部110は、回線対応部100において受信されたパケットをパケット結合用の受信バッファ105に転送する。このとき、パケット結合部110は、回線対応部100において受信されたパケットと受信バッファ105中に既に格納されているパケットとを連結して1つの結合パケットになるように、パケットを受信バッファ105に格納する。そして、パケット結合部110は、受信バッファ105中の結合パケットの大きさが、結合閾値制御部107に設定された閾値を超えると、結合パケットのパケットメモリ101への転送要求を発行する。
なお、パケット結合部110は、受信バッファ105中の結合パケットの大きさが閾値を超える前に、タイムアウト(パケット間の受信間隔が予め定められた期間を超えた場合等)が発生した場合に、転送要求を発行するようにしてもよい。
さらに、パケット結合部110は、受信バッファ105において結合したパケットの数と各パケットのサイズとを記録し、結合パケットの転送要求を発行する際に、結合したパケットの数と各パケットのサイズとを結合パケット転送部111に対して通知する。
結合パケット転送部111は、DMAコントローラ1111から構成される。結合パケット転送部111は、結合パケットを1度のDMA転送により、パケットメモリ101に転送し、ハードウェア割り込みを発生させて受信処理部103の起動要求を発行する。
なお、パケット処理装置のプロセッサ(不図示)へのハードウェア割り込みの発生を行わないようにしてもよい。
また、結合パケット転送部111は、パケット結合部110から通知された、結合したパケットの数と各パケットのサイズの情報を用いて、転送管理部112(プロセッサが実行するソフトウェア)がパケット毎に用意したディスクリプタ1110にサイズ等を書き込む。ディスクリプタ1110の構成と結合パケット転送部111の動作の詳細については後述する。
受信処理部103は、起動要求を検知すると、パケット毎に用意されているディスクリプタ1110に書き込まれているアドレス情報とサイズの情報とに基づいてパケットメモリ101内のパケットを読み出してプロトコル処理部104へ渡す。同時に、受信処理部103は、プロトコル処理部104へ渡したパケットメモリ分を補充するために、パケット処理装置が持つメモリから新たなパケットメモリ101の領域を確保する。この受信処理部103の動作は、図11の構成の動作と同等である。
プロトコル処理部104は、受信処理部103から受け取ったパケットに対して必要なプロトコル処理を行う。そして、プロトコル処理部104は、必要なプロトコル処理が終了すると、受信処理部103から渡されたパケットが格納されていたパケットメモリ101の領域を解放する。このプロトコル処理部104の動作は、図11の構成の動作と同等である。
なお、受信処理部103とプロトコル処理部104と転送管理部112は、汎用のパーソナルコンピュータやワークステーション上で動作するソフトウェアで実現することもできるし、プログラムと協調して動作するFPGA(Field Programmable Gate Array)等のハードウェアで実現することも可能である。
パケットメモリ101は、パーソナルコンピュータ、通信機器あるいは通信ボード上のメモリとして構成可能である。
回線対応部100と結合閾値制御部107とパケット結合部110とは、通信機器あるいは通信ボード上のFPGA等により構成可能である。
受信バッファ105は、通信機器あるいは通信ボード上のFPGA等が持つ記憶領域や、FIFO(First In,First Out)等の記憶回路により構成可能である。
図2に本実施例の結合パケット転送部111が使用するディスクリプタ1110の構成例を示す。一般的に、受信処理用のパケットメモリ101のアドレス等を記録するデータ構造体がディスクリプタ1110と呼ばれている。図2の例では、パケットメモリ101にN個のパケットが格納される場合を示している。
図2のディスクリプタ1110は、受信したパケットの書き込み先の先頭アドレスA#1~A#Nと、先頭アドレスA#1~A#Nが有効か否かを示す有効フラグAF#1~AF#Nと、先頭アドレスA#1~A#Nへの書き込みが行われたパケットのパケット長を示す受信データサイズL#1~L#Nと、先頭アドレスA#1~A#Nへのパケットの書き込みが完了したか否かを示す受信完了フラグWF#1~WF#Nとを、複数(N組)書き込み可能なデータ構造体となっている。このディスクリプタ1110の構成は、図11の構成で一般的に用いられている受信処理用のディスクリプタ1020の構成と同等である。
ディスクリプタ1110は、実体としては、パケットメモリ101と同様に、パーソナルコンピュータ、通信機器あるいは通信ボード上のメモリ内に配置される。
なお、ディスクリプタ1110をパケットメモリ101と同じメモリ内に配置することも可能であるが、その場合、どちらの用途に使用するのかをメモリ内のアドレスにより分けることができる。
ここで、従来のディスクリプタ1020を用いた従来のDMA転送の動作例を、図12と図13を用いて再度詳細に説明する。
まず、パケット処理装置のプロセッサは、パケットの書き込み先の先頭アドレスA#1~A#Nを決定してディスクリプタ1020に書き込み、さらに、その先頭アドレスA#1~A#Nが有効か否かを示す有効フラグAF#1~AF#Nを「無効」から「有効」に書き換える。
なお、ディスクリプタ1020には、先頭アドレスの情報等を書き込む領域がN組あるが、書き込む順番は予め決められている。例えば図12の例では、プロセッサは、1番目の先頭アドレスA#1、2番目の先頭アドレスA#2、・・・・、N番目の先頭アドレスA#Nと順番に書き込む。
一通り書き込んだ後に、再び1番目のパケットの転送が可能になったときには、1番目の先頭アドレスA#1から順番にディスクリプタ1020に書き込むようにすればよい。先頭アドレスA#n(nは1~N)の書き込みが可能か否かは、例えば先頭アドレスA#nに対応する有効フラグAF#nが「無効」であれば可能と判断すればよい。
次に、DMAコントローラ1021は、ディスクリプタ1020の有効フラグAF#nを確認して、先頭アドレスA#nが「有効」であることを有効フラグAF#nが示している場合(図13ステップS102においてyes)、先頭アドレスA#nをディスクリプタ1020から読み出し(図13ステップS103)、対応するn番目のパケットをパケットメモリ101の先頭アドレスA#nから始まる領域に書き込む(図13ステップS104)。
このDMA転送完了後、DMAコントローラ1021は、n番目のパケットのパケット長を示す受信データサイズL#nをディスクリプタ1020に書き込むと共に、ディスクリプタ1020に設定されている、n番目のパケットの書き込みが完了したことを示す受信完了フラグWF#nを「未了」から「完了」に書き換える(図13ステップS105)。
上記のとおりディスクリプタ1020には、有効フラグAF#1~AF#Nの領域がN個(組)あるが、有効フラグAF#1~AF#Nを確認する順番は予め決められている。例えば、図12、図13の例では、DMAコントローラ1021は、1番目の有効フラグAF#1、2番目の有効フラグAF#2、・・・・、N番目の有効フラグAF#Nと順番に確認する。一通り確認が終わった後には、再び1番目の有効フラグAF#1から順番に確認する。
ディスクリプタ1020には、受信データサイズL#1~L#Nと受信完了フラグWF#1~WF#Nとを書き込む領域もN組用意されている。DMAコントローラ1021は、n番目の先頭アドレスA#nが「有効」であることが確認されたn番目の有効フラグAF#nに対応する番号の領域に、受信データサイズL#nと受信完了フラグWF#nとを書き込む。
次に、パケット処理装置のプロセッサは、定期的にディスクリプタ1020の受信完了フラグWF#nを確認して、受信完了フラグWF#nが「完了」を示している場合には、対応するn番目の先頭アドレスA#nの情報と受信データサイズL#nの情報とを用いて、パケットメモリ101からn番目のパケットを読み出し、必要な処理(例えばプロトコル処理)を行う。
そして、プロセッサは、処理が終わったn番目のパケットに対応する、ディスクリプタ1020のn番目の有効フラグAF#nを「有効」から「無効」に書き換えると共に、ディスクリプタ1020のn番目の受信完了フラグWF#nを「完了」から「未了」に書き換える。
ディスクリプタ1020には、受信完了フラグWF#1~WF#Nの領域がN個(組)あるが、受信完了フラグWF#1~WF#Nを確認する順番は予め決められている。例えば、図12、図13の例では、プロセッサは、1番目の受信完了フラグWF#1、2番目の受信完了フラグWF#2、・・・・、N番目の受信完了フラグWF#Nと順番に確認する。一通り確認が終わった後には、再び1番目の受信完了フラグWF#1から順番に確認する。
なお、上記の動作でDMAコントローラ1021がDMA転送完了後にプロセッサに対して割り込み処理要求を行うようにし、プロセッサが定期的に受信完了フラグWF#1~WF#Nを確認する代わりに、プロセッサがDMAコントローラ1021からの割り込み処理要求を受信したときに受信完了フラグWF#1~WF#Nを確認するようにしてもよい。
次に、図2の構成のディスクリプタ1110を用いた本実施例の動作例を図1~図6を用いて説明する。図3は転送管理部112の動作を説明するフローチャート、図4、図5はDMAコントローラ1111の動作を説明するフローチャート、図6は受信処理部103の動作を説明するフローチャートである。
最初に、転送管理部112(プロセッサが実行するソフトウェア)は、パケット処理装置の初期設定として、N個の各パケットの先頭データの、パケットメモリ101上におけるアドレス、すなわち各パケットの書き込み先の先頭アドレスA#n(nは1~N)を決定してディスクリプタ1020に書き込む(図3ステップS300)。さらに、転送管理部112は、その先頭アドレスA#nが有効か否かを示す有効フラグAF#nを「無効」から「有効」に書き換える(図3ステップS301)。
ディスクリプタ1110には、先頭アドレスの情報等を書き込む領域がN組用意されているが、書き込む順番は予め決められている。例えば図2の例では、転送管理部112は、1番目の先頭アドレスA#1、2番目の先頭アドレスA#2、・・・・、N番目の先頭アドレスA#Nと順番に書き込む。
一通り書き込んだ後に、再び1番目のパケットの転送が可能になったときには、1番目の先頭アドレスA#1から順番にディスクリプタ1110に書き込むようにすればよい。先頭アドレスA#nの書き込みが可能か否かは、例えば先頭アドレスA#nに対応する有効フラグAF#nが「無効」であれば可能と判断すればよい。なお、この動作は従来技術と同等である。
最初に、結合パケット転送部111内のDMAコントローラ1111は、ディスクリプタ1110の読出および書込の順を示す変数nを1に初期化する(図4ステップS400)。
そして、DMAコントローラ1111は、パケット結合部110から転送要求が発行されると、ディスクリプタ1110のn番目の有効フラグAF#nを確認する(図4ステップS401)。
DMAコントローラ1111は、n番目の先頭アドレスA#nが「有効」であることを有効フラグAF#nが示している場合(図4ステップS402においてyes)、パケット結合部110からの情報(結合したパケットの数と各パケットのサイズ)を確認して、パケットメモリ101に転送すべきデータが、結合されていない単体のパケットか結合パケットかを確認する(図4ステップS403)。
DMAコントローラ1111は、パケットメモリ101に転送すべきデータが結合パケットではない場合(結合したパケットの数が1の場合)、対応する有効フラグAF#nが「有効」であることを確認したn番目の先頭アドレスA#nをディスクリプタ1110から読み出し(図4ステップS404)、対応するn番目のパケットをパケットメモリ101の先頭アドレスA#nから始まる領域に書き込むDMA転送を行う(図4ステップS405)。
このDMA転送の完了後、DMAコントローラ1111は、n番目のパケットのパケット長を示す受信データサイズL#nをディスクリプタ1110に書き込むと共に、ディスクリプタ1110に設定されている、n番目のパケットの書き込みが完了したことを示す受信完了フラグWF#nを「未了」から「完了」に書き換える(図4ステップS406)。
DMAコントローラ1111は、変数nがNと等しいかどうかを判定する(図4ステップS407)。DMAコントローラ1111は、変数nがNに達していない場合(ステップS407においてno)、変数nを1増やし(図4ステップS408)、ステップS401に戻る。また、DMAコントローラ1111は、変数nがNに達した場合(ステップS407においてyes)、ステップS400に戻る。
上記のとおりディスクリプタ1110には、有効フラグAF#1~AF#Nの領域がN個(組)用意されているが、有効フラグAF#1~AF#Nを確認する順番は予め決められている。例えば、図2、図4の例では、DMAコントローラ1111は、1番目の有効フラグAF#1、2番目の有効フラグAF#2、・・・・、N番目の有効フラグAF#Nと順番に確認する。一通り確認が終わった後、DMAコントローラ1111は、変数nを1に初期化し(ステップS400)、再び1番目の有効フラグAF#1から順番に確認する。
ディスクリプタ1110には、受信データサイズL#1~L#Nと受信完了フラグWF#1~WF#Nとを書き込む領域もN組用意されている。DMAコントローラ1111は、n番目の先頭アドレスA#nが「有効」であることが確認されたn番目の有効フラグAF#nに対応する番号の領域に、受信データサイズL#nと受信完了フラグWF#nとを書き込む。
また、DMAコントローラ1111は、パケットメモリ101に転送すべきデータが結合パケットの場合(結合したパケットの数kが2以上の場合)、結合したパケットの数kを確認し(図5ステップS409)、ディスクリプタ1110内の「k-1」個の有効フラグAF#(n+1)~AF#(n+k-1)を確認する(図5ステップS410)。ここで、「k-1」個の有効フラグを確認する理由は、n番目の有効フラグAF#nを既にステップS402で確認しているからである。
なお、n=Nの場合、DMAコントローラ1111は、AF#1からAF#(k-1)までの有効フラグを確認すればよい。また、n<Nかつn+k-1>Nの場合、DMAコントローラ1111は、AF#(n+1)からAF#NまでとAF#1からAF#(k-1-(N-n))までの有効フラグを確認すればよい。
DMAコントローラ1111は、ステップS402,S410の処理により、確認したk個の有効フラグが全て「有効」の場合(ステップS410においてyes)、確認したk個の有効フラグの中で最初の有効フラグAF#nに対応するn番目の先頭アドレスA#nをディスクリプタ1110から読み出し(図5ステップS411)、対応する結合パケットをパケットメモリ101の先頭アドレスA#nから始まる領域に書き込むDMA転送を行う(図5ステップS412)。
このDMA転送の完了後、DMAコントローラ1111は、パケット結合部110から通知された情報(結合した各パケットのサイズ)に基づいて、パケットメモリ101にDMA転送した結合パケットを構成する各パケットのパケット長を示す受信データサイズL#n~L#(n+k-1)を、ディスクリプタ1110に書き込む(図5ステップS413)。
なお、n=Nの場合、DMAコントローラ1111は、受信データサイズL#nと、L#1からL#(k-1)までの受信データサイズをディスクリプタ1110に書き込むようにすればよい。また、n<Nかつn+k-1>Nの場合、DMAコントローラ1111は、受信データサイズL#nと、L#(n+1)からL#NまでとL#1からL#(k-1-(N-n))までの受信データサイズをディスクリプタ1110に書き込むようにすればよい。
続いて、DMAコントローラ1111は、ディスクリプタ1110内の「k-1」個の先頭アドレスA#(n+1)~A#(n+k-1)を、結合パケットを構成するk個のパケットのうち、初めの「k-1」個のパケットのパケット長に応じて書き換える(図5ステップS414)。
具体的には、DMAコントローラ1111は、先頭アドレスA#(n+1)については、先頭アドレスA#nと、結合パケットを構成するk個のパケットのうち1番目のパケットのパケット長(受信データサイズL#nが示す値)とを足した値に書き換える。また、DMAコントローラ1111は、先頭アドレスA#(n+k-1)については、先頭アドレスA#(n+k-2)と、結合パケットを構成するk個のパケットのうち「k-1」番目のパケットのパケット長(受信データサイズL#(n+k-2)が示す値)とを足した値に書き換える。
このように、DMAコントローラ1111は、先頭アドレスA#iを書き換える場合、1つ前の先頭アドレスA#(i-1)と、結合パケットを構成するパケットのうち「i-1」番目のパケットのパケット長とを足した値に書き換えるようにすればよい。
次に、DMAコントローラ1111は、パケットメモリ101にDMA転送した結合パケットを構成する各パケットに対応する受信完了フラグWF#n~WF#(n+k-1)を「未了」から「完了」に書き換える(図5ステップS415)。
なお、n=Nの場合、DMAコントローラ1111は、受信完了フラグWF#nと、WF#1からWF#(k-1)までの受信完了フラグとを「未了」から「完了」に書き換えるようにすればよい。また、n<Nかつn+k-1>Nの場合、DMAコントローラ1111は、受信完了フラグWF#nと、WF#(n+1)からWF#NまでとWF#1からWF#(k-1-(N-n))までの受信完了フラグとを「完了」に書き換えるようにすればよい。
そして、DMAコントローラ1111は、n+k>Nが成立するかどうかを確認し(図5ステップS416)、n+kがNより大きい場合は、変数nをn=n+k-Nとし(図5ステップS417)とし、ステップS401に戻る。また、DMAコントローラ1111は、n+kがN以下の場合は、変数nをn=n+kとし(図5ステップS418)とし、ステップS401に戻る。
こうして、本実施例のDMA転送では、k個のパケットが連結された結合パケットを纏めてパケットメモリ101に転送し、ディスクリプタ1110の先頭アドレスの情報を一部書き換えることにより、パケット処理装置のプロセッサ(受信処理部103とプロトコル処理部104)に対して各パケットの先頭が書き込まれたアドレスを通知するようにしている。
受信処理部103(プロセッサが実行するソフトウェア)は、定期的にディスクリプタ1110の受信完了フラグWF#n(nは1~N)を確認して、受信完了フラグWF#nが「完了」を示している場合(図6ステップS501においてyes)、対応するn番目の先頭アドレスA#nの情報と受信データサイズL#nの情報とに基づいてパケットメモリ101からn番目のパケットを読み出してプロトコル処理部104へ渡す(図6ステップS502)。
プロトコル処理部104で必要な処理が行われた後に(図6ステップS503においてyes)、受信処理部103(プロセッサが実行するソフトウェア)は、プロトコル処理が終わったn番目のパケットに対応する、ディスクリプタ1110のn番目の有効フラグAF#nを「有効」から「無効」に書き換えると共に、ディスクリプタ1110のn番目の受信完了フラグWF#nを「完了」から「未了」に書き換える(図6ステップS504)。
ディスクリプタ1110には、受信完了フラグWF#1~WF#Nの領域がN個(組)あるが、受信完了フラグWF#1~WF#Nを確認する順番は予め決められている。例えば、受信処理部103(プロセッサが実行するソフトウェア)は、1番目の受信完了フラグWF#1、2番目の受信完了フラグWF#2、・・・・、N番目の受信完了フラグWF#Nと順番に確認する。一通り確認が終わった後には、再び1番目の受信完了フラグWF#1から順番に確認する。
なお、定期的にディスクリプタ1110の受信完了フラグWF#nを確認する代わりに、DMA転送の完了後にDMAコントローラ1111がプロセッサに対して割り込み処理要求を発行し、この割り込み処理要求に応じて受信処理部103(プロセッサが実行するソフトウェア)が、ディスクリプタ1110の受信完了フラグWF#n(nは1~N)を確認するようにしてもよい。
以上のプロセッサ(ソフトウェア)の動作は図11の構成の従来技術のプロセッサ(ソフトウェア)の動作と同等であり、結合パケットを元の複数のパケットに復元する処理を受信処理用のソフトウェアで実現する必要はない。すなわち、受信処理部103とプロトコル処理部104とは、本実施例のように結合パケットがパケットメモリ101に書き込まれる場合でも、従来と同じ処理を行えばよい。
以上に説明したように、本実施例のパケット処理装置は、纏めDMA転送を実現することができ、かつ結合パケットを元の複数のパケットに復元するための情報をディスクリプタ1110に書き込む手段(DMAコントローラ1111)を内蔵する結合パケット転送部111を備えている。DMAコントローラ1111はハードウェアで実装可能なので、復元処理のソフトウェアでの実行を不要とし、かつ、纏めDMA転送の効果による高い受信性能を実現することが可能となる。
なお、従来の図14の構成、もしくは図17の構成のパケット処理装置において、結合パケットを元の複数のパケットに復元する処理をプロセッサ(ソフトウェア)で実行する場合と比較すると、本実施例では、復元処理をプロセッサ(ソフトウェア)で行う必要がなくなるので、1パケットの処理に必要となるプロセッサの処理が軽くなり、受信性能が向上する(単位時間に処理できるパケットの数が増加する)という効果がある。また、本実施例では、1パケットの処理に必要となるプロセッサの消費電力が小さくなるという効果もある。
また、本実施例では、図11の構成の受信処理部103およびプロトコル処理部104用のソフトウェアをそのまま本実施例のパケット処理装置で使用することができる。これは、ハードウェア(DMAコントローラ1111)を変えるだけで、纏めDMAによる受信性能の向上が実現できることを示している。
なお、本実施例では、プロセッサ(ソフトウェア)が用意するパケットメモリ101上のアドレス領域を複数のパケットで共有するので、共有する全てのパケットの受信処理(プロトコル処理部104への転送)が完了するまでそのアドレス領域は再利用できない。
また、転送管理部112(プロセッサが実行するソフトウェア)は、結合パケットの最大サイズの書き込みが可能なサイズのアドレス領域を用意してディスクリプタ1110に設定する必要が有る。結合パケットの最大サイズは、結合閾値制御部107に設定される閾値に許容最大パケット長を足した値となる。
また、本実施例のパケット処理装置で纏めDMA転送を正常に行うため、転送管理部112(プロセッサが実行するソフトウェア)は、事前に、パケットメモリ101内に、N×DB_mux(DB_muxは結合パケットの最大サイズ)のバッファ領域を確保しておく必要がある。この領域確保は、図14の構成の場合と同等である。
例えば、本実施例において、上記のバッファ領域をパケットメモリ101内の連続した領域で用意する場合、このバッファ領域の先頭アドレスは、転送管理部112(プロセッサが実行するソフトウェア)が設定する、図2中の先頭アドレスA#1である。一方、バッファ領域の最終アドレスは、先頭アドレスA#1+(N×DB_mux)-1となる。この場合、転送管理部112(プロセッサが実行するソフトウェア)が設定する、図2中の先頭アドレスA#Nは、先頭アドレスA#1+(N-1)×DB_muxである。
このような領域確保により、結合パケットのDMA転送の転送先アドレスがA#Nとなった場合でも、このアドレスA#Nから上記のバッファ領域の最終アドレスまでDB_mux分の領域がパケットメモリ101に確保されているので、結合パケットをこのDB_mux分の連続した領域に確実に書き込むことができる。
仮に、アドレスA#Nからバッファ領域の最終アドレスまでの領域がDB_muxより小さい場合、書き込むべき結合パケットの一部を本来書き込んではいけない領域に書き込んでしまうケースが発生することになる。
また、パケットメモリ101内に確保するバッファ領域を連続した領域ではなく、例えばN個の領域に非連続で用意する場合、DB_mux分の領域をあらかじめN個用意し、それぞれの領域の先頭アドレスをA#1~A#Nとして転送管理部112(プロセッサが実行するソフトウェア)で設定することにより、結合パケットをDB_mux分の連続した領域に確実に書き込むことができ、本来書き込んではいけない領域に書き込んでしまうような不具合は発生しない。
本実施例のパケット処理装置では、DMA転送後にDMAコントローラ1111がディスクリプタ1110の情報(先頭アドレス、受信データサイズ、受信完了フラグ)を書き換えることにより、ソフトウェアでの復元処理を不要としている。
復元処理を受信処理部103、プロトコル処理部104、もしくは図17の結合パケット分離部108のハードウェアで実現しようとすると、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケット結合部106から受信処理部103、プロトコル処理部104、もしくは図17の結合パケット分離部108に通知する手段が必要となる。
また、復元処理を受信処理部103、プロトコル処理部104、もしくは図17の結合パケット分離部108のハードウェアで実現しようとすると、DMA転送完了後、受信処理が起動されるまで、場合によっては複数の結合パケット分の復元処理に必要な情報を保持しておく必要があることを考慮しなければならない。
これに対して、本実施例のパケット処理装置では、1つの結合パケットのDMA転送が完了した時点で結合パケットの復元処理は終わっているので、複数の結合パケット分の情報を保持する必要がない。したがって、復元処理を受信処理部103、プロトコル処理部104、もしくは図17の結合パケット分離部108のハードウェアで実現する場合と比較して、本実施例の方がハードウェアの規模が小さい。
また、復元処理に必要な情報をパケット結合部106から受信処理部103、プロトコル処理部104、もしくは図17の結合パケット分離部108に通知する手段として、復元処理に必要な情報を結合パケットの中に書き込むことも可能である。具体的には、結合された各パケットのサイズを通知するために、例えば各パケットの前にパケットサイズ等を書き込んだヘッダを付与して付加ヘッダをパケットデータと共にDMA転送する方法が考えられる。
しかし、復元処理に必要な情報を結合パケットの中に書き込む場合、DMA転送に使用するバスの帯域の一部を、復元処理に必要な情報で占有してしまうことになるので、本来のパケットデータの転送に使用できる実効帯域が小さくなり、その結果、DMA転送の性能が劣化してしまうという問題が発生する。
本実施例のパケット処理装置では、復元処理に必要な情報を結合パケットに書き込む必要がないので、上記のような実効帯域の劣化は起こらない。
本実施例では、結合パケット転送部111をハードウェアで実現する例を示したが、受信処理に使用するプロセッサとは別のプロセッサとソフトウェアにより結合パケット転送部111の少なくとも一部の処理を実装することも可能である。このように結合パケット転送部111の少なくとも一部の処理をソフトウェアで実現する場合でも、結合パケットを元の複数のパケットに復元する処理を受信処理部103もしくはプロトコル処理部104で行う必要がなくなるので、纏めDMA転送の効果による高い受信性能を実現することが可能となる。
また、結合パケット転送部111の少なくとも一部の処理をソフトウェアで実現する場合でも、結合パケット転送部111をハードウェアで実現する場合と同様に、結合パケットを元の複数のパケットに復元する処理に必要となるハードウェアの規模が小さくなる効果(複数の結合パケット分の情報を保持する必要がないことによる効果)、およびパケットデータの転送に使用できる実効帯域の劣化が起こらない効果(復元処理に必要な情報を結合パケットの中に加えないことによる効果)を得ることができる。
本実施例の変形として、ディスクリプタ1110に、先頭アドレスの書き換えを行ったか否かを示す書き換え実行フラグの領域を追加してもよい。例えば、先頭アドレスA#1~A#Nの初期設定を行う転送管理部112を実装しているプロセッサがキャッシュメモリを持っている場合、ディスクリプタ1110に書き込んだ先頭アドレスA#1~A#Nがキャッシュメモリ内にコピーされる。
しかし、DMAコントローラ1111によりディスクリプタ1110内の先頭アドレスが書き換えられたときに、転送管理部112を実装しているプロセッサのキャッシュメモリ内の該当の情報は書き換えが行われない場合がある。このような場合でも、プロセッサが、キャッシュメモリ内の情報ではなく、ディスクリプタ1110内の情報を読み出すために、書き換え実行フラグを参照することができる。
具体的には、プロセッサは、書き換え実行フラグを参照した結果、ディスクリプタ1110内の先頭アドレスが書き換えられていないと判断した場合、キャッシュメモリ内の情報を読み出して使用し、ディスクリプタ1110内の先頭アドレスが書き換えられたと判断した場合、一時的にキャッシュを無効にしてディスクリプタ1110内の先頭アドレスを直接読み出して使用すればよい。
結合パケット転送部111は、図5のステップS414の処理でディスクリプタ1110内の先頭アドレスを書き換えたときに、ディスクリプタ1110内の対応する書き換え実行フラグを、「書き換え未実行」から「書き換え実行」に書き換えるようにすればよい。
また、本実施例の別の変形例として、転送管理部112(プロセッサが実行するソフトウェア)が書き込む先頭アドレスの領域とは別に、DMAコントローラ1111が変更後の先頭アドレスを書き込む領域をディスクリプタ1110に用意してもよい。この場合、受信処理部103(プロセッサが実行するソフトウェア)は、変更後の先頭アドレスが書き込まれた領域を参照することになる。また、図5のステップS414で説明した処理は、先頭アドレスの書き換えではなく、変更後の先頭アドレスを書き込む処理となる。
また、本実施例において、DMAコントローラ1111とそれぞれのDMAコントローラ1111に対応するディスクリプタ1110とを複数搭載する構成としてもよい。また、パケット結合部110においてパケットの種類を判定して同じ種類のパケットを結合パケットとして纏める構成としてもよいし、パケットの種類に応じて複数のDMAコントローラ1111と複数のディスクリプタ1110とを使い分ける構成としてもよい。
パケットの種類別にDMAコントローラ1111とディスクリプタ1110とを用意し、パケットの種類に応じて複数のDMAコントローラ1111と複数のディスクリプタ1110とを使い分ける構成とすると、パケットの種類毎に異なる受信処理を行うことが容易になる。
また、本実施例において、複数のCPUコアを内蔵するプロセッサのコア毎に複数のDMAコントローラ1111と複数のディスクリプタ1110とを使い分ける構成としてもよいし、バーチャルマシン毎に複数のDMAコントローラ1111と複数のディスクリプタ1110とを使い分ける構成としてもよい。
CPUコア毎もしくはバーチャルマシン毎に複数のDMAコントローラ1111と複数のディスクリプタ1110とを使い分ける構成とすることにより、DMAコントローラ等が1個のみの場合と比較して、ソフトウェアによる受信処理の性能を向上させることができる。
[第2の実施例]
次に、本発明の第2の実施例について説明する。第1の実施例では、DMA転送を用いる場合を前提として説明したが、DMA転送を用いないパケット処理装置においても、複数のパケットを連結した結合パケットを纏めてパケットメモリに書き込む纏め書き込みにより、パケットメモリへの書き込みの実効スループットが大きくなる場合がある(例えばパケットメモリがDRAM(Dynamic Random Access Memory)で構成されている場合等)。
図7は本発明の第2の実施例に係るパケット処理装置の構成を示すブロック図である。図7のパケット処理装置は、回線対応部100と、パケットメモリ101と、受信処理部103と、プロトコル処理部104と、受信バッファ105と、結合閾値制御部107と、パケット結合部110と、転送管理部112と、結合パケット転送部113とから構成される。
図7の構成と図1の構成の違いは、図1における転送手段を、パケット処理装置のプロセッサ(ソフトウェア)による書き込み手段に置き換えた点である。つまり、本実施例は、図1の結合パケット転送部111を、ソフトウェアによる結合パケット転送部113に置き換えたものである。
回線対応部100とパケットメモリ101と受信処理部103とプロトコル処理部104と受信バッファ105と結合閾値制御部107と転送管理部112とは、図1の構成と同等である。
図7のパケット結合部110は、回線対応部100において受信されたパケットをパケット結合用の受信バッファ105に転送する。このとき、パケット結合部110は、回線対応部100において受信されたパケットと受信バッファ105中に既に格納されているパケットとを結合して1つの結合パケットになるように、パケットを受信バッファ105に格納する。そして、パケット結合部110は、受信バッファ105中の結合パケットの大きさが、結合閾値制御部107に設定された閾値を超えると、結合パケットのパケットメモリ101への転送要求を発行する。
なお、パケット結合部110は、受信バッファ105中の結合パケットの大きさが閾値を超える前に、タイムアウト(パケット間の間隔が予め定められた期間を超えた場合等)が発生した場合に、転送要求を発行するようにしてもよい。
さらに、パケット結合部110は、受信バッファ105において結合したパケットの数と各パケットのサイズとを記録し、結合パケットの転送要求を発行する際に、結合したパケットの数と各パケットのサイズの情報を結合パケット転送部113に対して通知する。
結合パケット転送部113(プロセッサが実行するソフトウェア)は、複数のパケットが結合された結合パケットをパケットメモリ101に書き込み、受信処理部103の起動要求を行なう。また、結合パケット転送部113(プロセッサが実行するソフトウェア)は、パケット結合部110から通知された、結合したパケットの数と各パケットのサイズの情報を用いて、パケット毎に用意したディスクリプタ1130にサイズ等の情報を書き込む。
図8に示すように、ディスクリプタ1130の構成は、第1の実施例のディスクリプタ1110の構成と同等である。ただし、本実施例では、結合パケット転送部111の代わりに、結合パケット転送部113(プロセッサが実行するソフトウェア)がディスクリプタ1130への書き込みを行うという違いがある。
図9、図10は結合パケット転送部113(プロセッサが実行するソフトウェア)の動作を説明するフローチャートである。最初に、結合パケット転送部113は、変数nを1に初期化し(図9ステップS600)、パケット結合部110から転送要求が発行された後に、ディスクリプタ1130の有効フラグAF#nを確認する(図9ステップS601)。
結合パケット転送部113は、先頭アドレスA#nが「有効」であることを有効フラグAF#nが示している場合(図9ステップS602においてyes)、パケット結合部110からの情報を確認して、パケットメモリ101に転送すべきデータが単体のパケットか結合パケットかを確認する(図9ステップS603)。
結合パケット転送部113は、パケットメモリ101に転送すべきデータが結合パケットではない場合、有効フラグAF#nが「有効」であることを確認した先頭アドレスA#nをディスクリプタ1130から読み出し(図9ステップS604)、対応するn番目のパケットをパケットメモリ101の先頭アドレスA#nから始まる領域に書き込む(図9ステップS605)。
この書き込み完了後、結合パケット転送部113は、受信データサイズL#nをディスクリプタ1130に書き込むと共に、ディスクリプタ1130に設定されている受信完了フラグWF#nを「未了」から「完了」に書き換える(図9ステップS606)。以上のステップS600~S606およびステップS607,S608の処理は、図4のステップS400~S408の処理と同等である。
また、結合パケット転送部113は、パケットメモリ101に転送すべきデータが結合パケットの場合、結合したパケットの数kを確認し(図10ステップS609)、ディスクリプタ1130内の「k-1」個の有効フラグAF#(n+1)~AF#(n+k-1)を確認する(図10ステップS610)。
結合パケット転送部113は、確認したk個の有効フラグが全て「有効」の場合(ステップS610においてyes)、確認したk個の有効フラグの中で最初の有効フラグAF#nに対応する先頭アドレスA#nをディスクリプタ1130から読み出し(図10ステップS611)、対応する結合パケットをパケットメモリ101の先頭アドレスA#nから始まる領域に書き込む(図10ステップS612)。
この書き込み完了後、結合パケット転送部113は、パケットメモリ101に書き込んだ結合パケットを構成する各パケットのパケット長を示す受信データサイズL#n~L#(n+k-1)をディスクリプタ1130に書き込む(図10ステップS613)。
続いて、結合パケット転送部113は、ディスクリプタ1130内の「k-1」個の先頭アドレスA#(n+1)~A#(n+k-1)を、結合パケットを構成するk個のパケットのうち、初めの「k-1」個のパケットのパケット長に応じて書き換える(図10ステップS614)。
次に、結合パケット転送部113は、パケットメモリ101に書き込んだ結合パケットを構成する各パケットに対応する受信完了フラグWF#n~WF#(n+k-1)を「未了」から「完了」に書き換える(図10ステップS615)。
以上のステップS609~S615およびステップS616~S618の処理は、図5のステップS409~S418の処理と同等である。ステップS610,S613,S615において、n=N、またはn<Nかつn+k-1>Nの場合、ステップS410,S413,S415で説明した処理を実行すればよい。
こうして、本実施例のパケット処理装置は、纏め書き込みを実現することができ、かつ結合パケットを元の複数のパケットに復元するための情報をディスクリプタ1130に書き込む手段(結合パケット転送部113)を備えている。本実施例によれば、復元処理の受信処理部103、プロトコル処理部104、もしくは、図17の結合パケット分離部108での実行を不要とすることができ、かつ、纏め書き込みの効果による高い受信性能を実現することが可能となる。
また、本実施例では、図11の構成の受信処理部103およびプロトコル処理部104用のソフトウェアをそのまま本実施例のパケット処理装置で使用することができる。
なお、本実施例のパケット処理装置で図9、図10で説明した纏め書き込みを正常に行うため、転送管理部112(プロセッサが実行するソフトウェア)は、事前に、パケットメモリ101内に、N×DB_mux(DB_muxは結合パケットの最大サイズ)のバッファ領域を確保しておく必要がある。この領域確保は、図14および図1の構成の場合と同等である。
本実施例のパケット処理装置では、纏め書き込み完了後に結合パケット転送部113がディスクリプタ1130の情報(先頭アドレス、受信データサイズ、受信完了フラグ)を書き換えることにより、復元処理を不要としている。
復元処理を受信処理部103、プロトコル処理部104、もしくは図18の結合パケット分離部108で実現しようとすると、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケット結合部106から受信処理部103、プロトコル処理部104、もしくは図18の結合パケット分離部108に通知する手段が必要となる。
また、復元処理を受信処理部103、プロトコル処理部104、もしくは図18の結合パケット分離部108で実現しようとすると、纏め書き込み完了後、受信処理が起動されるまで、場合によっては複数の結合パケット分の復元処理に必要な情報を保持しておく必要があることを考慮しなければならない。
これに対して、本実施例のパケット処理装置では、1つの結合パケットの纏め書き込みが完了した時点で結合パケットの復元処理は終わっているので、複数の結合パケット分の情報を保持する必要がない。したがって、復元処理を受信処理部103、プロトコル処理部104、もしくは図18の結合パケット分離部108で実現する場合と比較して、本実施例の方がハードウェアの規模が小さい。これは、結合パケットを元の複数のパケットに復元する処理をソフトウェアで実装する場合で比較しても同じである。
例えば、図18の構成でパケットメモリ101と回線対応部100以外の構成をすべてソフトウェアで実現した場合、複数の結合パケット分の復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケットメモリ101等に保持しておく必要がある。
これに対して、本実施例の構成でパケットメモリ101と回線対応部100以外の構成をすべてソフトウェアで実現した場合は、複数の結合パケット分の情報(結合したパケットの数、パケット毎のサイズ)を保持する必要がないすなわち、1つの結合パケット分のみの復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケットメモリ101等に保持しておくだけでよい。
つまり、本実施例の構成は、図18の構成と比較して、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)の保持に使用するパケットメモリ101等の容量(書き込み可能なビット数)が小さくてもよいことになり、必要となるハードウェアの規模を削減することができる。
また、復元処理に必要な情報をパケット結合部106から受信処理部103、プロトコル処理部104、もしくは図18の結合パケット分離部108に通知する手段として、復元処理に必要な情報を結合パケットの中に書き込むことも可能である。具体的には、結合された各パケットのサイズを通知するために、例えば各パケットの前にパケットサイズ等を書き込んだヘッダを付与して付加ヘッダをパケットデータと共に書き込みする方法が考えられる。しかし、この場合、纏め書き込みに使用するバスの帯域の一部を、復元処理に必要な情報で占有してしまうことになるので、本来のパケットデータの書き込みに使用できる実効帯域が小さくなり、その結果、纏め書き込みの性能が劣化する。
本実施例のパケット処理装置では、復元処理に必要な情報を、パケットメモリ101ではなく、パケットメモリ101が接続されているバスを使用しない別のメモリ(パケット結合部110からの書き込みと結合パケット転送部113からの読み出しだけが可能であれば良い)に保持することができ、上記のような実効帯域の劣化は起こらない。
第1の実施例と同様に、本実施例の変形として、ディスクリプタ1130に、先頭アドレスの書き換えを行ったか否かを示す書き換え実行フラグの領域を追加してもよい。この場合、結合パケット転送部113は、図10のステップS614の処理でディスクリプタ1130内の先頭アドレスを書き換えたときに、ディスクリプタ1130内の対応する書き換え実行フラグを、「書き換え未実行」から「書き換え実行」に書き換えるようにすればよい。
また、第1の実施例と同様に、転送管理部112(プロセッサが実行するソフトウェア)が書き込む先頭アドレスの領域とは別に、結合パケット転送部113が変更後の先頭アドレスを書き込む領域をディスクリプタ1130に用意してもよい。
また、本実施例において、パケット結合部110においてパケットの種類を判定して同じ種類のパケットを結合パケットとして纏める構成としてもよいし、パケットの種類に応じて複数のディスクリプタ1130を使い分ける構成としてもよい。パケットの種類別にディスクリプタ1130を用意し、パケットの種類に応じて複数のディスクリプタ1130を使い分ける構成とすると、パケットの種類毎に異なる受信処理を行うことが容易になる。
また、本実施例において、複数のCPUコアを内蔵するプロセッサのコア毎に複数のディスクリプタ1130を使い分ける構成としてもよいし、バーチャルマシン毎に複数のディスクリプタ1130を使い分ける構成としてもよい。CPUコア毎もしくはバーチャルマシン毎に複数のディスクリプタ1130を使い分ける構成とすることにより、ディスクリプタ1130が1個のみの場合と比較して、ソフトウェアによる書き込み処理および読み出し処理の性能が向上する。
第1、第2の実施例のパケット処理装置において、パケットメモリ101と転送管理部112と受信処理部103とプロトコル処理部104と結合パケット転送部113とは、プロセッサ、記憶装置及びインタフェースを備えたコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。
このようなコンピュータにおいて、本発明のパケット処理方法を実現させるためのプログラムは記憶装置に格納される。プロセッサは、記憶装置に格納されたプログラムに従って第1、第2の実施例で説明した処理を実行する。また、上記のとおり、結合パケット転送部111の一部の処理をコンピュータで実現することも可能である。