図17は従来のパケット処理装置の構成を示すブロック図である。パケット処理装置は、通信回線からパケットを受信する回線対応部100と、通信回線から受信したパケットが格納されるパケットメモリ101と、通信回線から受信したパケットをパケットメモリ101に転送するパケット転送部102と、パケットメモリ101からパケットを読み出す受信処理部103と、パケットに対してプロトコル処理を行うプロトコル処理部104とを備えている。
このパケット処理装置では、通信回線(不図示)と接続された回線対応部100へのパケットの到着を契機として、パケット転送部102がDMA(Direct Memory Access)を用いたデータ転送を行い、到着したパケットをパケットメモリ101に格納する。同時に、パケット転送部102は、パケットを受信したことをパケット処理装置のプロセッサ(不図示)に通知するためにハードウェア割り込みを発生させ、受信処理部103の起動要求を行う。
パケット転送部102は、パケット処理装置のプロセッサが実行するソフトウェアによって構築されるデータ構造体であるディスクリプタ1020と、ハードウェアであるDMAコントローラ1021とから構成される。図18はディスクリプタ1020の概要を説明する図である。
図18の例では、パケットメモリ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とが設定される。
図19はDMAコントローラ1021の動作を説明するフローチャートである。最初に、DMAコントローラ1021は、ディスクリプタ1020の読出および書込の順を示す変数nを1に初期化し(図19ステップS100)、n=1番目のフラグAF#1をディスクリプタ1020から読み出す(図19ステップS101)。
DMAコントローラ1021は、先頭アドレスが有効であることをフラグAF#1が示している場合(図19ステップS102においてyes)、n=1番目の先頭アドレスA#1をディスクリプタ1020から読み出し(図19ステップS103)、対応するn=1番目のパケットをパケットメモリ101の先頭アドレスA#1から始まる領域に書き込む(図19ステップS104)。
パケットの書き込み完了後、DMAコントローラ1021は、n=1番目のパケットのパケット長を示す受信データサイズL#1と、パケットの書き込みが完了したことを示す受信完了フラグWF#1とをディスクリプタ1020に書き込む(図19ステップS105)。
また、パケットの書き込みが完了したことをパケット処理装置のプロセッサ(不図示)に通知するためにハードウェア割り込みを発生させ、受信処理部103の起動要求を行う。
そして、DMAコントローラ1021は、変数nがNと等しいかどうかを判定する(図19ステップS106)。DMAコントローラ1021は、変数nがNに達していない場合(ステップS106においてno)、変数nを1増やし(図19ステップ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転送のオーバーヘッドを削減することができるので、高速な受信処理を行うことができる。
図20は特許文献1に開示された従来のパケット処理装置の構成を示すブロック図である。このパケット処理装置は、回線対応部100と、パケットメモリ101と、結合パケット転送部102aと、受信処理部103と、プロトコル処理部104と、受信バッファ105と、パケット結合部106と、結合閾値制御部107とを備えている。
図20に示したパケット処理装置では、パケット結合部106は、回線対応部100において受信されたパケットをパケット結合用の受信バッファ105に転送する。このとき、パケット結合部106は、回線対応部100において受信されたパケットと受信バッファ105中に既に格納されているパケットとが結合され、1つの結合パケットになるように、パケットを受信バッファ105に格納する。そして、パケット結合部106は、受信バッファ105中の結合パケットの大きさが、結合閾値制御部107にあらかじめ設定された閾値を超えると、結合パケットのパケットメモリ101への転送要求を発行する。
図17の場合と同様に、結合パケット転送部102aは、ディスクリプタ1020aと、DMAコントローラ1021aとから構成される。図21はディスクリプタ1020aの概要を説明する図である。図21の例では、パケットメモリ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とが設定される。
図22はDMAコントローラ1021aの動作を説明するフローチャートである。最初に、DMAコントローラ1021aは、ディスクリプタ1020aの読出および書込の順を示す変数nを1に初期化し(図22ステップS200)、n=1番目のフラグADF#1をディスクリプタ1020aから読み出す(図22ステップS201)。
DMAコントローラ1021aは、先頭アドレスが有効であることをフラグADF#1が示している場合(図22ステップS202においてyes)、n=1番目の先頭アドレスAD#1をディスクリプタ1020aから読み出し(図22ステップS203)、対応するn=1番目の結合パケットをパケットメモリ101の先頭アドレスAD#1から始まる領域に書き込む(図22ステップS204)。
結合パケットの書き込み完了後、DMAコントローラ1021aは、n=1番目の結合パケットの長さを示す受信データサイズLD#1と、結合パケットの書き込みが完了したことを示す受信完了フラグWDF#1とをディスクリプタ1020aに書き込む(図22ステップS205)。
また、結合パケットの書き込みが完了したことをパケット処理装置のプロセッサ(不図示)に通知するためにハードウェア割り込みを発生させ、受信処理部103の起動要求を行う。
そして、DMAコントローラ1021aは、変数nがNと等しいかどうかを判定する(図22ステップS206)。DMAコントローラ1021aは、変数nがNに達していない場合(ステップS206においてno)、変数nを1増やし(図22ステップS207)、ステップS201に戻る。また、DMAコントローラ1021aは、変数nがNに達した場合(ステップS206においてyes)、ステップS200に戻る。こうして、N個の結合パケットが順番にパケットメモリ101に転送される。
結合パケット転送部102a(DMAコントローラ1021a)からの起動要求に応じて起動した受信処理部103は、パケットメモリ101に転送された結合パケットをプロトコル処理部104へと渡す。
図20に示した構成によって、受信処理の起動要求が、複数のパケットが結合した結合パケットが転送される度に行われるようになるため、受信処理部103の起動回数が減少し、パケット処理装置のプロセッサの負荷が軽減される。また、DMA転送制御の回数も減少するためにオーバーヘッドの割合が低くなり、高い受信性能を発揮することが可能となる。
ただし、図20に示した構成では、結合パケットをプロトコル処理部104において元の複数のパケットに復元する必要がある。この復元処理をプロトコル処理部104のハードウェアで実現しようとすると、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケット結合部106からプロトコル処理部104に通知する手段が必要となり、そのためにパケット結合部106等のハードウェアの規模が大きくなるという課題がある。また、復元処理に必要な情報をパケットメモリ101等に保持しておく必要がある。
また、復元処理を受信処理部103等のソフトウェアで実現することも可能であるが、上記と同様に、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケット結合部106から受信処理部103に通知する手段が必要となり、そのためにパケット結合部106等のハードウェアの規模が大きくなるという課題がある。また、ソフトウェアで復元処理を行うため、ソフトウェアによる処理が増加し、プロセッサの負荷が上がり、その結果として、纏めDMA転送による受信性能の向上が抑制されるという課題もある。
図23はパケット処理装置の別の構成を示すブロック図である。このパケット処理装置は、図20のパケット処理装置の受信処理部103とプロトコル処理部104との間に、結合パケットを元の複数のパケットに復元する結合パケット分離部108を挿入したものである。
パケットの復元処理をプロトコル処理部104のハードウェアで実現する場合と同様に、結合パケット分離部108をハードウェアで実現しようとすると、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケット結合部106から結合パケット分離部108まで通知する手段が必要となり、そのためにパケット結合部106等のハードウェアの規模が大きくなるという課題がある。
また、結合パケット分離部108をソフトウェアで実現することも可能であるが、上記と同様に、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケット結合部106から結合パケット分離部108に通知する手段が必要となり、そのためにパケット結合部106等のハードウェアの規模が大きくなるという課題がある。また、ソフトウェアで復元処理を行うため、ソフトウェアによる処理が増加し、プロセッサの負荷が上がり、その結果として、纏めDMA転送による受信性能の向上が抑制されるという課題もある。
図24はパケット処理装置の別の構成を示すブロック図である。このパケット処理装置は、図20、図23のパケット処理装置の結合パケット転送部102aの代わりに、ソフトウェアによる結合パケット書き込み部109を設けたものである。DMA転送を用いないパケット処理装置においても、ソフトウェアにより複数のパケットを纏めてパケットメモリ101に書き込むこと(以降、纏め書き込み)によりパケットメモリ101への書き込みの実効スループットが向上する場合(パケットメモリ101がDRAMで構成されている場合等)がある。このように、纏め書き込みを行うパケット処理装置においても、結合パケットを元の複数のパケットに復元する際に上記と同様の問題がある。
また、図24の処理の全て(パケットメモリ101内と回線対応部100内のハードウェア処理を除く)をソフトウェアで行う場合、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケットメモリ101等に保存する必要があり、纏め書き込みを行わない場合と比較して、パケットメモリ101等の容量(書き込み可能なビット数)を大きくする必要があるという課題が有る。
また、図20、図23、もしくは図24の構成では、パケットメモリ101内に、N×DB_mux(DB_muxは結合パケットの最大サイズ)のバッファ領域を確保しておく必要がある。この結合パケットの最大サイズDB_muxは、結合閾値制御部107に設定される閾値に許容最大パケット長を足した値となる。したがって、例えば閾値を500Byte、許容最大パケット長を2000Byteとすると、パケットメモリ101内に確保が必要なバッファ領域のサイズは、N×2500Byteとなる。
しかし、実際にパケットメモリ101に転送される結合パケットのサイズは501Byte~2500Byteとなり、確保した領域の一部が無駄になるという課題がある。例えば、結合パケットのサイズが501Byteの場合、パケットメモリ101に確保したバッファ領域の内、1999Byte分が無駄になる。
[第1の実施例]
以下、図面を参照して本発明の実施例を詳細に説明する。なお、実施例を説明するための全図において、同一機能を有するものは同一符号を付け、その繰り返しの説明は省略する。図1は、本発明の第1の実施例に係るパケット処理装置の構成を示すブロック図である。
図1のパケット処理装置は、図20の構成と同様に、通信回線(不図示)と接続され、通信回線からデータを受信する回線対応部100と、通信回線から受信したパケットが格納されるパケットメモリ101と、パケットメモリ101に格納されたパケットをプロトコル処理部104へ渡す受信処理部103と、パケットのプロトコル処理を行うプロトコル処理部104と、パケット結合用の受信バッファ105と、結合パケットの大きさを規制する閾値があらかじめ設定された結合閾値制御部107と、通信回線から受信した複数のパケットを受信バッファ105において連結して1つの結合パケットを生成するパケット結合部110と、パケット結合部110によって生成された結合パケットをパケットメモリ101にDMA転送する結合パケット転送部111と、予め定められたメモリ上のデータ領域であるディスクリプタ1110と制御用レジスタ113の初期設定を行う転送管理部112とから構成される。なお、転送管理部112については、受信処理部103の一部として構成しても良い。
このうち、回線対応部100とパケット結合用の受信バッファ105と結合閾値制御部107とは、図20の構成と同等である。
パケット結合部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の動作は、図17の構成の動作と同等である。
プロトコル処理部104は、受信処理部103から受け取ったパケットに対して必要なプロトコル処理を行う。そして、プロトコル処理部104は、必要なプロトコル処理が終了すると、受信処理部103から渡されたパケットが格納されていたパケットメモリ101の領域を解放する。このプロトコル処理部104の動作は、図17の構成の動作と同等である。
なお、必要なプロトコル処理が終了し、受信処理部103から渡されたパケットが格納されていたパケットメモリ101の領域が開放されたことをもって、後述する図8のS503における処理終了と判断する。
なお、受信処理部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と、受信したパケットのパケット長を示す受信データサイズL#1~L#Nと、パケットメモリ101からのパケットの読み出しが完了したか否かを示す受信完了フラグWF#1~WF#Nとを、複数(N組)書き込み可能なデータ構造体となっている。
ディスクリプタ1110は、実体としては、パケットメモリ101と同様に、パーソナルコンピュータ、通信機器あるいは通信ボード上のメモリ内に配置される。
なお、ディスクリプタ1110をパケットメモリ101と同じメモリ内に配置することも可能であるが、その場合、どちらの用途に使用するのかをメモリ内のアドレスにより分けることができる。
ここで、図17、図20および図23の構成で一般的に用いられている受信処理用のディスクリプタ1020,1020aを用いた従来のDMA転送の動作例を、図18と図19を用いて再度詳細に説明する。
まず、パケット処理装置のプロセッサは、パケット(もしくは結合パケット)の書き込み先の先頭アドレスA#1~A#Nを決定してディスクリプタ1020,1020aに書き込み、さらに、その先頭アドレスA#1~A#Nが有効か否かを示す有効フラグAF#1~AF#Nを「無効」から「有効」に書き換える。
なお、ディスクリプタ1020,1020aには、先頭アドレスの情報等を書き込む領域がN組あるが、書き込む(「有効」化する)順番は予め決められている。例えば図18の例では、プロセッサは、1番目の先頭アドレスA#1、2番目の先頭アドレスA#2、・・・・、N番目の先頭アドレスA#Nと順番に書き込む。
一通り書き込んだ後に、再び1番目のパケット(もしくは結合パケット)の転送が可能になったときには、1番目の先頭アドレスA#1から順番にディスクリプタ1020,1020aに書き込むようにすればよい。先頭アドレスA#n(nは1~N)の書き込みが可能か否かは、例えば先頭アドレスA#nに対応する有効フラグAF#nが「無効」であれば可能と判断すればよい。
次に、DMAコントローラ1021,1021aは、ディスクリプタ1020,1020aの有効フラグAF#nを確認して、先頭アドレスA#nが「有効」であることを有効フラグAF#nが示している場合(図19ステップS102においてyes)、先頭アドレスA#nをディスクリプタ1020,1020aから読み出し(図19ステップS103)、対応するn番目のパケット(もしくは結合パケット)をパケットメモリ101の先頭アドレスA#nから始まる領域に書き込む(図19ステップS104)。
このDMA転送完了後、DMAコントローラ1021,1021aは、n番目のパケットのパケット長(もしくはn番目の結合パケットの長さ)を示す受信データサイズL#nをディスクリプタ1020,1020aに書き込むと共に、ディスクリプタ1020,1020aに設定されている、n番目のパケット(もしくは結合パケット)の書き込みが完了したことを示す受信完了フラグWF#nを「未了」から「完了」に書き換える(図19ステップS105)。
上記のとおりディスクリプタ1020,1020aには、有効フラグAF#1~AF#Nの領域がN個(組)あるが、有効フラグAF#1~AF#Nを確認する順番は予め決められている。例えば、図18、図19の例では、DMAコントローラ1021,1021aは、1番目の有効フラグAF#1、2番目の有効フラグAF#2、・・・・、N番目の有効フラグAF#Nと順番に確認する。一通り確認が終わった後には、再び1番目の有効フラグAF#1から順番に確認する。
ディスクリプタ1020,1020aには、受信データサイズL#1~L#Nと受信完了フラグWF#1~WF#Nとを書き込む領域もN組用意されている。DMAコントローラ1021,1021aは、n番目の先頭アドレスA#nが「有効」であることが確認されたn番目の有効フラグAF#nに対応する番号の領域に、受信データサイズL#nと受信完了フラグWF#nとを書き込む。
次に、パケット処理装置のプロセッサは、定期的にディスクリプタ1020,1020aの受信完了フラグWF#nを確認して、受信完了フラグWF#nが「完了」を示している場合には、対応するn番目の先頭アドレスA#nの情報と受信データサイズL#nの情報とを用いて、パケットメモリ101からn番目のパケット(もしくは結合パケット)を読み出し、必要な処理(例えばプロトコル処理)を行う。
そして、プロセッサは、処理が終わったn番目のパケット(もしくは結合パケット)に対応する、ディスクリプタ1020,1020aのn番目の有効フラグAF#nを「有効」から「無効」に書き換えると共に、ディスクリプタ1020,1020aのn番目の受信完了フラグWF#nを「完了」から「未了」に書き換える。
ディスクリプタ1020,1020aには、受信完了フラグWF#1~WF#Nの領域がN個(組)あるが、受信完了フラグWF#1~WF#Nを確認する順番は予め決められている。例えば、図18、図19の例では、プロセッサは、1番目の受信完了フラグWF#1、2番目の受信完了フラグWF#2、・・・・、N番目の受信完了フラグWF#Nと順番に確認する。一通り確認が終わった後には、再び1番目の受信完了フラグWF#1から順番に確認する。
なお、上記の動作でDMAコントローラ1021,1021aがDMA転送完了後にプロセッサに対して割り込み処理要求を行うようにし、プロセッサが定期的に受信完了フラグWF#1~WF#Nを確認する代わりに、プロセッサがDMAコントローラ1021,1021aからの割り込み処理要求を受信したときに受信完了フラグWF#1~WF#Nを確認することもある。
次に、図2の構成のディスクリプタ1110を用いた本実施例の動作例を図1~図9を用いて説明する。図3は転送管理部112の動作を説明するフローチャート、図4~図7、図9はDMAコントローラ1111の動作を説明するフローチャート、図8は受信処理部103の動作を説明するフローチャートである。
最初に、転送管理部112(プロセッサが実行するソフトウェア)は、パケット処理装置の初期設定として、パケットメモリ101内に結合パケット用のバッファ領域として連続した領域を確保し(図3ステップS300)、このバッファ領域の先頭アドレスA0と容量(サイズ)C0を示す情報とを制御用レジスタ113に書き込む(図3ステップS301)。制御用レジスタ113は、例えばプロセッサ内に設けられる。
なお、制御用レジスタ113は、1個(組)だけでも問題無いが、複数用意しておくことも可能である。制御用レジスタ113を複数設ける場合、パケットの書き込みに使用する順番は予め決めておく。また、制御用レジスタ113の設定は、初期設定時に行うものとし、動作中の設定変更は行わないものとする。
次に、転送管理部112は、ディスクリプタ1110の初期設定として、先頭アドレスA#n(nは1~N)が有効か否かを示す有効フラグAF#nを全て「無効」とし(図3ステップS302)、パケットメモリ101からのパケットの読み出しが完了したことを示す受信完了フラグWF#nを全て「完了」とする(図3ステップS303)。
結合パケット転送部111内のDMAコントローラ1111は、パケット結合部110から転送要求が発行されると、上記の初期設定後の最初の転送要求の場合、転送管理部112が設定した先頭アドレスA0と容量(サイズ)C0とを制御用レジスタ113から読み出す(図4ステップS400)。そして、DMAコントローラ1111は、パケットメモリ101へのパケットの転送に使用するためのライトポインタWPの初期値として、ステップS400で読み出した先頭アドレスA0を設定する(図4ステップS401)。すなわち、本実施例では、制御用レジスタ113の設定からパケットメモリ101内の書き込み可能なバッファ領域のアドレスの範囲を計算し、書き込み可能なバッファ領域をリングバッファとして使用する。
続いて、DMAコントローラ1111は、ディスクリプタ1110の読出および書込の順を示す変数nを1に初期化する(図4ステップS402)。
DMAコントローラ1111は、パケット結合部110からの情報を確認して、パケットメモリ101に転送すべきデータが、結合されていない単体のパケットか結合パケットかを確認し、結合したパケットの数kを確認する(図4ステップS403)。上記のとおり、結合したパケットの数kは、パケット結合部110から通知される情報に含まれている(結合していない場合はk=1)。そして、DMAコントローラ1111は、ディスクリプタ1110内のk個の受信完了フラグWF#n~WF#n(n+k-1)を確認する(図4ステップS404)。
なお、n=Nの場合、DMAコントローラ1111は、WF#NとWF#1からWF#(k-1)までの受信完了フラグを確認すればよい。また、n<Nかつn+k-1>Nの場合、DMAコントローラ1111は、WF#nからWF#NまでとWF#1からWF#(k-1-(N-n))までの受信完了フラグを確認すればよい。
DMAコントローラ1111は、ステップS404の処理により、確認したk個の受信完了フラグが全て「完了」の場合(ステップS404においてyes)、パケットメモリ101内の結合パケット用のバッファ領域の残容量CRとパケットメモリ101に転送すべきデータのサイズCDとを比較する(図4ステップS405)。パケットメモリ101に転送すべきデータが結合されていない単体のパケットの場合には、単体のパケットのサイズを残容量CRと比較し、パケットメモリ101に転送すべきデータが結合パケットの場合には、結合パケットのサイズを残容量CRと比較する。上記のとおり、パケットメモリ101に転送すべきデータのサイズCDは、パケット結合部110から通知される。
この比較の際に、DMAコントローラ1111は、ライトポインタWPとリードポインタRPに基づいて、パケットメモリ101内の結合パケット用のバッファ領域の残容量CRを算出する。具体的には、DMAコントローラ1111は、初期状態(ライトポインタWP=リードポインタRP)の場合、ステップS400において制御用レジスタ113から読み出した容量(サイズ)C0の値をそのまま残容量CRとする。
また、DMAコントローラ1111は、ライトポインタWP>リードポインタRPの場合、C0-WP+RPを残容量CRとし、ライトポインタWP<リードポインタRPの場合、RP-WPを残容量CRとする。また、DMAコントローラ1111は、初期状態以外で、ライトポインタWP=リードポインタRPの場合、0もしくはC0を残容量CRとする。具体的には、ライトポインタWP>リードポインタRPの状態からライトポインタWP=リードポインタRPに遷移した場合はリードポインタが更新されたと判断して、残容量CRをC0とし、ライトポインタWP<リードポインタRPの状態からライトポインタWP=リードポインタRPに遷移した場合はライトポインタが更新されたと判断して、残容量CRを0とする。
なお、上記のとおりディスクリプタ1110には、受信完了フラグWF#1~WF#Nの領域がN個(組)用意されているが、受信完了フラグWF#1~WF#Nを確認する順番は予め決められている。例えば、図2、図4の例では、DMAコントローラ1111は、n番目の受信完了フラグWF#n、(n+1)番目の受信完了フラグWF#(n+1)、・・・・、N番目の受信完了フラグWF#Nと順番に確認する(ステップS404)。N番目の受信完了フラグWF#Nの確認を行った後、k組分の確認が終わっていない場合は、1番目の受信完了フラグWF#1から順番に確認を行う。
DMAコントローラ1111は、パケットメモリ101内の結合パケット用のバッファ領域の残容量CRがパケットメモリ101に転送すべきデータのサイズCDより小さい場合(ステップS405においてyes)、ステップS404に戻る。このバッファ領域の残容量CRがデータサイズCDより小さい状態は、ソフトウェアによるパケットメモリ101からのパケットの読み出しにより、バッファ領域の残容量CRが回復すると解消する。
また、DMAコントローラ1111は、バッファ領域の残容量CRがパケットメモリ101に転送すべきデータのサイズCD以上の場合(ステップS405においてno)、ライトポインタWPに、パケットメモリ101に転送すべきデータのサイズCDを加算した値(WP+CD)と、所定の上限値とを比較する(図5ステップS406)。ここで、上限値は、パケットメモリ101内のバッファ領域の先頭アドレスA0に、このバッファ領域の容量C0を加算した値(A0+C0)である。
DMAコントローラ1111は、ライトポインタWPにデータのサイズCDを加算した値(WP+CD)が、上限値(A0+C0)より小さい場合(ステップS406においてyes)、パケット結合部110から通知された情報(結合した各パケットのサイズ)に基づいて、パケットメモリ101に転送すべきデータを構成するk個のパケットのパケット長を示す受信データサイズL#n~L#(n+k-1)を、ディスクリプタ1110に書き込む(図5ステップS407)。
続いて、DMAコントローラ1111は、n番目の先頭アドレスA#nの値として、ライトポインタWPの値をディスクリプタ1110に書き込む(図5ステップS408)。さらに、DMAコントローラ1111は、パケットメモリ101に転送すべきデータが、結合されていない単体のパケット(k=1)の場合(図5ステップS409においてno)、図5ステップS412に遷移する。
また、DMAコントローラ1111は、パケットメモリ101に転送すべきデータが結合パケットの場合(ステップS409においてyes)、ディスクリプタ1110内の「k-1」個の先頭アドレスA#(n+1)~A#(n+k-1)を、結合パケットを構成するk個のパケットのうち、初めの「k-1」個のパケットのパケット長に応じて書き込む(図5ステップS411)。
具体的には、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」番目のパケットのパケット長とを足した値を書き込むようにすればよい。
なお、n=Nの場合、DMAコントローラ1111は、受信データサイズL#nと、L#1からL#(k-1)までの受信データサイズをディスクリプタ1110に書き込むと共に、先頭アドレスA#nと、A#1からA#(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に書き込むと共に、先頭アドレスA#nと、A#(n+1)からA#NまでとA#1からA#(k-1-(N-n))までの先頭アドレスをディスクリプタ1110に書き込むようにすればよい。
次に、DMAコントローラ1111は、ライトポインタWPをパケットメモリ101の転送先の先頭アドレスとして、パケットメモリ101に転送すべきデータ(単体のパケットまたは結合パケット)を、パケットメモリ101の転送先の先頭アドレスから始まるバッファ領域に書き込むDMA転送を行う(図6ステップS412)。すなわち、パケットメモリ101内のバッファ領域の先頭アドレスA0に、このバッファ領域の容量C0を加算した値(A0+C0)が、ライトポインタWPにデータのサイズCDを加算した値(WP+CD)より大きい場合、ライトポインタWPを転送先の先頭アドレスとしてDMA転送を行う。
そして、DMAコントローラ1111は、パケットメモリ101にDMA転送したデータ(単体のパケットまたは結合パケット)のサイズをライトポインタWPに加算する(図6ステップS413)。具体的には、DMAコントローラ1111は、パケットメモリ101にDMA転送したデータが、結合されていない単体のパケット(k=1)の場合、当該パケットのパケット長(受信データサイズL#nが示す値)をライトポインタWPに加算する。また、DMAコントローラ1111は、パケットメモリ101に転送すべきデータが結合パケットの場合、受信データサイズL#n~L#(n+k-1)をライトポインタWPに加算する。
なお、n=Nの場合、DMAコントローラ1111は、受信データサイズL#nと、L#1からL#(k-1)までの受信データサイズをライトポインタWPに加算すればよい。また、n<Nかつn+k-1>Nの場合、DMAコントローラ1111は、受信データサイズL#nと、L#(n+1)からL#NまでとL#1からL#(k-1-(N-n))までの受信データサイズをライトポインタWPに加算すればよい。
次に、DMAコントローラ1111は、パケットメモリ101にDMA転送したデータを構成する各パケットに対応する受信完了フラグWF#n~WF#(n+k-1)を「完了」から「未了」に書き換える(図6ステップS414)。さらに、DMAコントローラ1111は、パケットメモリ101にDMA転送したデータを構成する各パケットに対応する有効フラグAF#n~AF#(n+k-1)を「無効」から「有効」に書き換える(図6ステップS415)。
なお、n=Nの場合、DMAコントローラ1111は、受信完了フラグWF#nと、WF#1からWF#(k-1)までの受信完了フラグとを「完了」から「未了」に書き換えると共に、有効フラグAF#nと、AF#1からAF#(k-1)までの有効フラグとを「無効」から「有効」に書き換えるようにすればよい。また、n<Nかつn+k-1>Nの場合、DMAコントローラ1111は、受信完了フラグWF#nと、WF#(n+1)からWF#NまでとWF#1からWF#(k-1-(N-n))までの受信完了フラグとを「未了」に書き換えると共に、有効フラグAF#nと、AF#(n+1)からAF#NまでとAF#1からAF#(k-1-(N-n))までの有効フラグとを「有効」に書き換えるようにすればよい。
そして、DMAコントローラ1111は、n+k>Nが成立するかどうかを確認し(図6ステップS416)、n+kがNより大きい場合は、変数nをn=n+k-Nとし(図6ステップS417)とし、ステップS403に戻る。また、DMAコントローラ1111は、n+kがN以下の場合は、変数nをn=n+kとし(図6ステップS418)とし、ステップS403に戻る。
一方、DMAコントローラ1111は、ライトポインタWPに、パケットメモリ101に転送すべきデータのサイズCDを加算した値(WP+CD)が、上限値(A0+C0)以上の場合(ステップS406においてno)、データのサイズCDと、リードポインタRPからパケットメモリ101内のバッファ領域の先頭アドレスA0を減算した値(RP-A0)とを比較する(図5ステップS419)。
DMAコントローラ1111は、データのサイズCDが、減算値(RP-A0)より小さい場合(ステップS419においてyes)、パケット結合部110から通知された情報(結合した各パケットのサイズ)に基づいて、パケットメモリ101に転送すべきデータを構成するk個のパケットのパケット長を示す受信データサイズL#n~L#(n+k-1)を、ディスクリプタ1110に書き込む(図7ステップS420)。
続いて、DMAコントローラ1111は、n番目の先頭アドレスA#nの値として、パケットメモリ101内のバッファ領域の先頭アドレスA0の値をディスクリプタ1110に書き込む(図7ステップS421)。さらに、DMAコントローラ1111は、パケットメモリ101に転送すべきデータが、結合されていない単体のパケット(k=1)の場合(図7ステップS422においてno)、図7ステップS425に遷移する。
また、DMAコントローラ1111は、パケットメモリ101に転送すべきデータが結合パケットの場合(ステップS422においてyes)、ディスクリプタ1110内の「k-1」個の先頭アドレスA#(n+1)~A#(n+k-1)を、結合パケットを構成するk個のパケットのうち、初めの「k-1」個のパケットのパケット長に応じて書き込む(図7ステップS424)。
具体的には、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」番目のパケットのパケット長とを足した値を書き込むようにすればよい。
なお、n=Nの場合、DMAコントローラ1111は、受信データサイズL#nと、L#1からL#(k-1)までの受信データサイズをディスクリプタ1110に書き込むと共に、先頭アドレスA#nと、A#1からA#(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に書き込むと共に、先頭アドレスA#nと、A#(n+1)からA#NまでとA#1からA#(k-1-(N-n))までの先頭アドレスをディスクリプタ1110に書き込むようにすればよい。
次に、DMAコントローラ1111は、パケットメモリ101に転送すべきデータ(単体のパケットまたは結合パケット)を、パケットメモリ101の先頭アドレスA0から始まるバッファ領域に書き込むDMA転送を行う(図7ステップS425)。すなわち、「A0+C0-WP」がパケットメモリ101に転送すべきデータのサイズCDより小さく、バッファ領域の先頭アドレスA0からリードポインタRPまでの容量が転送データのサイズCDより大きい場合、ライトポインタWPの代わりに、パケットメモリ101の先頭アドレスA0を転送先の先頭アドレスとしてDMA転送を行う。
そして、DMAコントローラ1111は、パケットメモリ101にDMA転送したデータ(単体のパケットまたは結合パケット)のサイズを、パケットメモリ101のバッファ領域の先頭アドレスA0に加算した値を、ライトポインタWPの新たな値として更新する(図7ステップS426)。具体的には、DMAコントローラ1111は、パケットメモリ101にDMA転送したデータが、結合されていない単体のパケット(k=1)の場合、当該パケットのパケット長(受信データサイズL#nが示す値)を先頭アドレスA0に加算した値を、ライトポインタWPの新たな値とする。また、DMAコントローラ1111は、パケットメモリ101に転送すべきデータが結合パケットの場合、受信データサイズL#n~L#(n+k-1)を先頭アドレスA0に加算した値を、ライトポインタWPの新たな値とする。
なお、n=Nの場合、DMAコントローラ1111は、受信データサイズL#nと、L#1からL#(k-1)までの受信データサイズを先頭アドレスA0に加算した値を、ライトポインタWPの新たな値とすればよい。また、n<Nかつn+k-1>Nの場合、DMAコントローラ1111は、受信データサイズL#nと、L#(n+1)からL#NまでとL#1からL#(k-1-(N-n))までの受信データサイズを先頭アドレスA0に加算した値を、ライトポインタWPの新たな値とすればよい。
次に、DMAコントローラ1111は、パケットメモリ101にDMA転送したデータを構成する各パケットに対応する受信完了フラグWF#n~WF#(n+k-1)を「完了」から「未了」に書き換える(図7ステップS427)。さらに、DMAコントローラ1111は、パケットメモリ101にDMA転送したデータを構成する各パケットに対応する有効フラグAF#n~AF#(n+k-1)を「無効」から「有効」に書き換える(図7ステップS428)。
なお、n=Nの場合、DMAコントローラ1111は、受信完了フラグWF#nと、WF#1からWF#(k-1)までの受信完了フラグとを「完了」から「未了」に書き換えると共に、有効フラグAF#nと、AF#1からAF#(k-1)までの有効フラグとを「無効」から「有効」に書き換えるようにすればよい。また、n<Nかつn+k-1>Nの場合、DMAコントローラ1111は、受信完了フラグWF#nと、WF#(n+1)からWF#NまでとWF#1からWF#(k-1-(N-n))までの受信完了フラグとを「未了」に書き換えると共に、有効フラグAF#nと、AF#(n+1)からAF#NまでとAF#1からAF#(k-1-(N-n))までの有効フラグとを「有効」に書き換えるようにすればよい。
そして、DMAコントローラ1111は、n+k>Nが成立するかどうかを確認し(図7ステップS429)、n+kがNより大きい場合は、変数nをn=n+k-Nとし(図7ステップS430)とし、ステップS403に戻る。また、DMAコントローラ1111は、n+kがN以下の場合は、変数nをn=n+kとし(図7ステップS431)とし、ステップS403に戻る。
こうして、本実施例のDMA転送では、k個のパケットが連結された結合パケットを纏めてパケットメモリ101に転送し、ディスクリプタ1110の先頭アドレスの情報をDMAコントローラ1111が書き込むことにより、パケット処理装置のプロセッサ(受信処理部103とプロトコル処理部104)に対して各パケットの先頭が書き込まれたアドレスを通知するようにしている。
なお、DMAコントローラ1111は、以下の受信処理部103等(プロセッサが実行するソフトウェア)の処理に対応してリードポインタRPの更新処理も行うが、このリードポインタRPの更新処理の詳細は後述する。
受信処理部103(プロセッサが実行するソフトウェア)は、定期的にディスクリプタ1110の有効フラグAF#n(nは1~N)を確認して、有効フラグAF#nが「有効」を示している場合(図8ステップS501においてyes)、対応するn番目の先頭アドレスA#nの情報と受信データサイズL#nの情報とに基づいてパケットメモリ101からn番目のパケットを読み出してプロトコル処理部104へ渡す(図8ステップS502)。
プロトコル処理部104で必要な処理が行われた後に(図8ステップS503においてyes)、受信処理部103(プロセッサが実行するソフトウェア)は、プロトコル処理が終わったn番目のパケットに対応する、ディスクリプタ1110のn番目の受信完了フラグWF#nを「未了」から「完了」に書き換えると共に、ディスクリプタ1110のn番目の有効フラグAF#nを「有効」から「無効」に書き換える(図8ステップS504)。
ディスクリプタ1110には、有効フラグAF#1~AF#Nの領域がN個(組)あるが、有効フラグAF#1~AF#Nを確認する順番は予め決められている。例えば、受信処理部103は、1番目の有効フラグAF#1、2番目の有効フラグAF#2、・・・・、N番目の有効フラグAF#Nと順番に確認する。一通り確認が終わった後には、再び1番目の有効フラグAF#1から順番に確認する。
なお、定期的にディスクリプタ1110の有効フラグAF#nを確認する代わりに、DMA転送の完了後にDMAコントローラ1111がプロセッサに対して割り込み処理要求を発行し、この割り込み処理要求に応じて受信処理部103(プロセッサが実行するソフトウェア)が、ディスクリプタ1110の有効フラグAF#n(nは1~N)を確認するようにしてもよい。
以上のプロセッサ(ソフトウェア)の動作は図17の構成の従来技術のプロセッサ(ソフトウェア)の動作と同等であり、結合パケットを元の複数のパケットに復元する処理を受信処理用のソフトウェアで実現する必要はない。すなわち、受信処理部103とプロトコル処理部104とは、本実施例のように結合パケットがパケットメモリ101に書き込まれる場合でも、従来と同等な処理を行えばよい。
次に、DMAコントローラ1111によるリードポインタRPの更新処理について説明する。最初に、DMAコントローラ1111は、リードポインタRPの初期値として、パケットメモリ101の結合パケット用のバッファ領域の先頭アドレスA0を設定する(図9ステップS440)。また、DMAコントローラ1111は、有効フラグの確認順を示す変数nを1に初期化する(図9ステップS441)。なお、この変数nと図4~図7の変数nとは同じ値であるから、ステップS441はステップS402と同じ処理である。
DMAコントローラ1111は、図4~図7の処理中に、ディスクリプタ1110のn番目の有効フラグAF#nを定期的に確認する(図9ステップS442)。DMAコントローラ1111は、n番目の先頭アドレスA#nが「有効」であることを有効フラグAF#nが示していることを検出した後(図9ステップS443においてyes)、このn番目の先頭アドレスA#nに対応するディスクリプタ1110のn番目の受信完了フラグWF#nを確認する(図9ステップS444)。
DMAコントローラ1111は、ディスクリプタ1110のn番目の受信完了フラグWF#nが「完了」を示している場合(図9ステップS445においてyes)、n番目の先頭アドレスA#nにn番目の受信データサイズL#nを加算した値を、リードポインタRPの新たな値として更新する(図9ステップS446)。
また、有効フラグAF#nがプロセッサが実行するソフトウェアにより「無効」に書き換えられていない場合はDMAコントローラ1111が「無効」に更新する(図9ステップS447)。
DMAコントローラ1111は、変数nがNと等しいかどうかを判定する(図9ステップS448)。DMAコントローラ1111は、変数nがNに達していない場合(ステップS448においてno)、変数nを1増やし(図9ステップS449)、ステップS442に戻る。また、DMAコントローラ1111は、変数nがNに達した場合(ステップS448においてyes)、変数nを1とし(図9ステップS450)、ステップS442に戻る。
なお、受信完了フラグWF#nが「完了」になるのは、図8の受信処理部103の動作によるものである。
また、以上に説明したリードポインタRPは、DMAコントローラ1111がパケットメモリ101内の結合パケット用のバッファ領域の残容量の計算等に使用するためのものであり、ソフトウェアによる読み出し時等の使用は想定していない。
以上に説明したように、本実施例のパケット処理装置は、纏めDMA転送を実現することができ、かつ結合パケットを元の複数のパケットに復元するための情報をディスクリプタ1110に書き込む手段(DMAコントローラ1111)を内蔵する結合パケット転送部111を備えている。DMAコントローラ1111はハードウェアで実装可能なので、復元処理のソフトウェアでの実行を不要とし、かつ、纏めDMA転送の効果による高い受信性能を実現することが可能となる。
なお、従来の図20の構成、もしくは図23の構成のパケット処理装置において、結合パケットを元の複数のパケットに復元する処理をプロセッサ(ソフトウェア)で実行する場合と比較すると、本実施例では、復元処理をプロセッサ(ソフトウェア)で行う必要がなくなるので、1パケットの処理に必要となるプロセッサの処理が軽くなり、受信性能が向上する(単位時間に処理できるパケットの数が増加する)という効果がある。また、本実施例では、1パケットの処理に必要となるプロセッサの消費電力が小さくなるという効果もある。
また、従来の図20の構成、もしくは図23の構成で、纏めDMA転送を正常に行うためには、ソフトウェアによって事前に、パケットメモリ101内に、N×DB_mux(DB_muxは結合パケットの最大サイズ)のバッファ領域を確保しておく必要がある。これに対して、本実施例のパケット処理装置では、より小さいバッファ領域で纏めDMA転送を正常に行うことができる。
上記の結合パケットの最大サイズDB_muxは、結合閾値制御部107に設定される閾値に許容最大パケット長を足した値となる。したがって、例えば閾値を500Byte、許容最大パケット長を2000Byte、Nを10とすると、従来の図20の構成、もしくは図23の構成でパケットメモリ101内に確保が必要なバッファ領域のサイズは、10×2500=25000Byteとなる。
本実施例のパケット処理装置でパケットメモリ101内に確保が必要なバッファ領域のサイズは、Nに依存せず、結合パケットの最大サイズDB_muxとなる。すなわち、本実施例のパケット処理装置でパケットメモリ101内に確保が必要なバッファ領域のサイズは、上記と同じ条件で、2500Byteとなる。このようにバッファ領域のサイズを小さくできるのは、バッファ領域の残容量CRが小さい場合に残容量CRが必要な量になるまでDMA転送を待たせる機能(図4のステップS405、図5のステップS419)の実装による効果である。
したがって、本実施例では、パケットメモリ101内に確保するバッファ領域のサイズが小さいと、ソフトウェアによるパケットメモリ101からのパケットの読み出しが完了するまで次のDMA転送が待たされる確率が高くなる。
ここで、本実施例のパケット処理装置でパケットメモリ101内に確保するバッファ領域のサイズを従来の図20の構成、もしくは図23の構成で必要なサイズと同じサイズにした場合に無駄となる領域の量を比較する。
上記のように閾値を500Byte、許容最大パケット長を2000Byte、Nを10とした場合、実際にパケットメモリ101に転送される結合パケットのサイズは501Byte~2500Byteとなる。つまり、従来の図20の構成、もしくは図23の構成では、各結合パケットのサイズをSとしたとき、(2500-S)を10個の結合パケット分加算した領域が無駄になる。これは、結合パケットのサイズSの平均が仮に1500Byteだとすると、25000Byteの内10000Byte分の領域が無駄になっていることを示している。
本実施例の構成でパケットメモリ101内に確保するバッファ領域のサイズを25000Byteとした場合、25000Byteが連続した領域で確保され、複数の結合パケットを連続した領域に書き込むことが可能な構成となっている。したがって、本実施例で無駄になるのは、最大で結合パケットの最大サイズ2500Byteから1Byteを引いた値、すなわち、2499Byteのみとなる。この値は、結合パケットのサイズSの平均が(25000-2499)/10=2250.1より小さい場合、Nを11以上にすれば、11個以上の結合パケットを同じ容量(25000Byte)のバッファに書き込めることを示している。従来の図20の構成、もしくは図23の構成で11個以上の結合パケットを書き込むためにはNを11以上にし、かつ27500Byte以上のバッファ領域が必要である。
したがって、本実施例のパケット処理装置でパケットメモリ101内に確保するバッファ領域のサイズを従来の図20の構成、もしくは図23の構成で必要なサイズと同じサイズにした場合、従来の図20の構成、もしくは図23の構成の場合より、無駄になる領域が小さくなり、より多数の結合パケットを同じサイズのバッファ領域に書き込むことが可能となる場合もある。
また、結合パケットのサイズSの平均を仮に1500Byte、バッファ領域に書き込む結合パケットの最大数を10だとして、本実施例のパケット処理装置でパケットメモリ101内に確保すべきバッファ領域のサイズを計算すると、1500×10=15000Byteとなり、従来の図20の構成、もしくは図23の構成で必要なサイズ(25000Byte)より小さくなる。
なお、本実施例の構成では、パケットメモリ101のバッファ領域に書き込む結合パケットの最大数とディスクリプタ1110のNを独立に決定することができる。上記のようにバッファ領域に書き込む結合パケットの最大数によりバッファ領域のサイズを決め、Nはバッファ領域に書き込むパケットの最大数とすれば良い。ただし、実際にバッファ領域に書き込めるパケットの最大数は、格納するパケットのサイズとバッファ領域のサイズに依存するので、Nもしくはそれより小さい値となる。仮に、結合パケットのサイズSの平均が1500Byte、結合したパケットの数kの平均が2個、バッファ領域に書き込む結合パケットの最大数を10だとすると、バッファ領域のサイズを1500×10=15000Byte、Nを2×10=20とするのが望ましい。
複数のパケットが結合した結合パケットを元の複数のパケットに復元する処理を受信処理部103、プロトコル処理部104、もしくは図23の結合パケット分離部108のハードウェアで実現しようとすると、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケット結合部106から受信処理部103、プロトコル処理部104、もしくは図23の結合パケット分離部108に通知する手段が必要となる。
また、復元処理を受信処理部103、プロトコル処理部104、もしくは図23の結合パケット分離部108のハードウェアで実現しようとすると、DMA転送完了後、受信処理が起動されるまで、場合によっては複数の結合パケット分の復元処理に必要な情報を保持しておく必要があることを考慮しなければならない。
これに対して、本実施例のパケット処理装置では、1つの結合パケットのDMA転送が完了した時点で結合パケットの復元処理は終わっているので、複数の結合パケット分の情報を保持する必要がない。したがって、復元処理を受信処理部103、プロトコル処理部104、もしくは図23の結合パケット分離部108のハードウェアで実現する場合と比較して、本実施例の方がハードウェアの規模が小さい。
また、復元処理に必要な情報をパケット結合部106から受信処理部103、プロトコル処理部104、もしくは図23の結合パケット分離部108に通知する手段として、復元処理に必要な情報を結合パケットの中に書き込むことも可能である。しかし、復元処理に必要な情報を結合パケットの中に書き込む場合、DMA転送に使用するバスの帯域の一部を、復元処理に必要な情報で占有してしまうことになるので、本来のパケットデータの転送に使用できる実効帯域が小さくなり、その結果、DMA転送の性能が劣化してしまうという問題が発生する。
本実施例のパケット処理装置では、復元処理に必要な情報を結合パケットに書き込む必要がないので、上記のような実効帯域の劣化は起こらない。
本実施例では、結合パケット転送部111をハードウェアで実現する例を示したが、受信処理に使用するプロセッサとは別のプロセッサとソフトウェアにより結合パケット転送部111の少なくとも一部の処理を実装することも可能である。このように結合パケット転送部111の少なくとも一部の処理をソフトウェアで実現する場合でも、結合パケットを元の複数のパケットに復元する処理を受信処理部103もしくはプロトコル処理部104で行う必要がなくなるので、纏めDMA転送の効果による高い受信性能を実現することが可能となる。
また、結合パケット転送部111の少なくとも一部の処理をソフトウェアで実現する場合でも、結合パケット転送部111をハードウェアで実現する場合と同様に、結合パケットを元の複数のパケットに復元する処理に必要となるハードウェアの規模が小さくなる効果(複数の結合パケット分の情報を保持する必要がないことによる効果)、およびパケットデータの転送に使用できる実効帯域の劣化が起こらない効果(復元処理に必要な情報を結合パケットの中に加えないことによる効果)を得ることができる。
本実施例の変形として、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個のみの場合と比較して、ソフトウェアによる受信処理の性能を向上させることができる。
なお、パケットメモリ101内の書き込み可能なアドレスとして、制御用レジスタ113等により、間に書込みできないアドレスが設定された場合、その時点のライトポインタWPから書き込みできないアドレスまでの容量が転送データ(結合していないパケット、もしくは結合パケット)のサイズCDより小さい場合、ライトポインタWPの値を転送データのサイズCDより大きな容量を持っているアドレス領域までジャンプさせて書き込みに使用すればよい。
[第2の実施例]
次に、本発明の第2の実施例について説明する。第1の実施例では、DMA転送を用いる場合を前提として説明したが、DMA転送を用いないパケット処理装置においても、複数のパケットを連結した結合パケットを纏めてパケットメモリに書き込む纏め書き込みにより、パケットメモリへの書き込みの実効スループットが大きくなる場合がある(例えばパケットメモリがDRAM(Dynamic Random Access Memory)で構成されている場合等)。
図10は本発明の第2の実施例に係るパケット処理装置の構成を示すブロック図である。図10のパケット処理装置は、回線対応部100と、パケットメモリ101と、受信処理部103と、プロトコル処理部104と、受信バッファ105と、結合閾値制御部107と、パケット結合部110と、転送管理部112と、結合パケット転送部114と、制御用レジスタ113と、ディスクリプタ1130とから構成される。
図10の構成と図1の構成の違いは、図1における転送手段を、パケット処理装置のプロセッサ(ソフトウェア)による書き込み手段に置き換えた点である。つまり、本実施例は、図1の結合パケット転送部111を、ソフトウェアによる結合パケット転送部114に置き換えたものである。
回線対応部100とパケットメモリ101と受信処理部103とプロトコル処理部104と受信バッファ105と結合閾値制御部107と転送管理部112と制御用レジスタ113は、図1の構成と同等である。
図10のパケット結合部110は、回線対応部100において受信されたパケットをパケット結合用の受信バッファ105に転送する。このとき、パケット結合部110は、回線対応部100において受信されたパケットと受信バッファ105中に既に格納されているパケットとを結合して1つの結合パケットになるように、パケットを受信バッファ105に格納する。そして、パケット結合部110は、受信バッファ105中の結合パケットの大きさが、結合閾値制御部107に設定された閾値を超えると、結合パケットのパケットメモリ101への転送要求を発行する。
なお、パケット結合部110は、受信バッファ105中の結合パケットの大きさが閾値を超える前に、タイムアウト(パケット間の間隔が予め定められた期間を超えた場合等)が発生した場合に、転送要求を発行するようにしてもよい。
さらに、パケット結合部110は、受信バッファ105において結合したパケットの数と各パケットのサイズとを記録し、結合パケットの転送要求を発行する際に、結合したパケットの数と各パケットのサイズの情報を結合パケット転送部114に対して通知する。
結合パケット転送部114(プロセッサが実行するソフトウェア)は、複数のパケットが結合された結合パケットをパケットメモリ101に書き込み、受信処理部103の起動要求を行なう。また、結合パケット転送部114は、パケット結合部110から通知された、結合したパケットの数と各パケットのサイズの情報を用いて、パケット毎に用意したディスクリプタ1130にサイズ等の情報を書き込む。
図11に示すように、ディスクリプタ1130の構成は、第1の実施例のディスクリプタ1110の構成と同等である。ただし、本実施例では、結合パケット転送部111の代わりに、結合パケット転送部114(プロセッサが実行するソフトウェア)がディスクリプタ1130への書き込みを行うという違いがある。
図12~図16は結合パケット転送部114(プロセッサが実行するソフトウェア)の動作を説明するフローチャートである。結合パケット転送部114は、パケット結合部110から転送要求が発行されると、初期設定後の最初の転送要求の場合、転送管理部112が設定した先頭アドレスA0と容量(サイズ)C0とを制御用レジスタ113から読み出す(図12ステップS600)。そして、結合パケット転送部114は、ライトポインタWPの初期値として先頭アドレスA0を設定する(図12ステップS601)。
続いて、結合パケット転送部114は、ステップS402~S406と同等のステップS602~S606の処理を行う。結合パケット転送部114は、ライトポインタWPにデータのサイズCDを加算した値(WP+CD)が、上限値(A0+C0)より小さい場合(図13ステップS606においてyes)、パケット結合部110から通知された情報(結合した各パケットのサイズ)に基づいて、パケットメモリ101に転送すべきデータを構成するk個のパケットのパケット長を示す受信データサイズL#n~L#(n+k-1)を、ディスクリプタ1130に書き込む(図13ステップS607)。
図13のステップS608~S611の処理は、図5のステップS408~S411の処理と同等である。
次に、結合パケット転送部114は、ライトポインタWPをパケットメモリ101の転送先の先頭アドレスとして、パケットメモリ101に転送すべきデータ(単体のパケットまたは結合パケット)を、パケットメモリ101の転送先の先頭アドレスから始まるバッファ領域に書き込む(図14ステップS612)。
図14のステップS613~S618の処理は、図6のステップS413~S418の処理と同等である。結合パケット転送部114は、ステップS617またはS618の処理後、ステップS603に戻る。
また、結合パケット転送部114は、ライトポインタWPに、パケットメモリ101に転送すべきデータのサイズCDを加算した値(WP+CD)が、上限値(A0+C0)以上の場合(図13ステップS606においてno)、データのサイズCDと、リードポインタRPからパケットメモリ101内のバッファ領域の先頭アドレスA0を減算した値(RP-A0)とを比較する(図13ステップS619)。
結合パケット転送部114は、データのサイズCDが、減算値(RP-A0)より小さい場合(ステップS619においてyes)、パケット結合部110から通知された情報(結合した各パケットのサイズ)に基づいて、パケットメモリ101に転送すべきデータを構成するk個のパケットのパケット長を示す受信データサイズL#n~L#(n+k-1)を、ディスクリプタ1130に書き込む(図15ステップS620)。
図15のステップS621~S624の処理は、図7のステップS421~S424の処理と同等である。
次に、結合パケット転送部114は、パケットメモリ101に転送すべきデータ(単体のパケットまたは結合パケット)を、パケットメモリ101の先頭アドレスA0から始まるバッファ領域に書き込む(図15ステップS625)。
図15のステップS626~S631の処理は、図7のステップS426~S431の処理と同等である。結合パケット転送部114は、ステップS630またはS631の処理後、ステップS603に戻る。
次に、結合パケット転送部114によるリードポインタRPの更新処理について説明する。最初に、結合パケット転送部114は、リードポインタRPの初期値として、パケットメモリ101の結合パケット用のバッファ領域の先頭アドレスA0を設定する(図9ステップS640)。また、結合パケット転送部114は、有効フラグの確認順を示す変数nを1に初期化する(図9ステップS641)。なお、この変数nと図12~図15の変数nとは同じ値であるから、ステップS641はステップS602と同じ処理である。
図16のステップS642~S650の処理は、図9のステップS442~S450の処理と同等である。
こうして、本実施例のパケット処理装置は、纏め書き込みを実現することができ、かつ結合パケットを元の複数のパケットに復元するための情報をディスクリプタ1130に書き込む手段(結合パケット転送部114)を備えている。本実施例によれば、復元処理の受信処理部103、プロトコル処理部104、もしくは、図23の結合パケット分離部108での実行を不要とすることができ、かつ、纏め書き込みの効果による高い受信性能を実現することが可能となる。
ここで、本実施例のパケット処理装置でパケットメモリ101内に確保するバッファ領域のサイズを従来の図24の構成で必要なサイズと同じサイズにした場合に無駄となる領域の量を比較する。
従来の図24の構成で、纏め書き込みを正常に行うためには、受信処理用(読み出し処理用)のソフトウェアによって事前に、パケットメモリ101内に、N×DB_mux(DB_muxは結合パケットの最大サイズ)のバッファ領域を確保しておく必要がある。この結合パケットの最大サイズDB_muxは、結合閾値制御部107に設定される閾値に許容最大パケット長を足した値となる。したがって、例えば閾値を500Byte、許容最大パケット長を2000Byte、Nを10とすると、従来の図24の構成でパケットメモリ101内に確保が必要なバッファ領域のサイズは、10×2500=25000Byteとなる。
上記のように閾値を500Byte、許容最大パケット長を2000Byte、Nを10とした場合、実際にパケットメモリ101に転送される結合パケットのサイズは501Byte~2500Byteとなる。つまり、従来の図24の構成では、各結合パケットのサイズをSとしたとき、(2500-S)を10個の結合パケット分加算した領域が無駄になる。これは、結合パケットのサイズSの平均が仮に1500Byteだとすると、25000Byteの内10000Byte分の領域が無駄になっていることを示している。
本実施例の構成でパケットメモリ101内に確保するバッファ領域のサイズを25000Byteとした場合、25000Byteが連続した領域で確保され、複数の結合パケットを連続した領域に書き込むことが可能な構成となっている。したがって、本実施例で無駄になるのは、最大で結合パケットの最大サイズ2500Byteから1Byteを引いた値、すなわち、2499Byteのみとなる。この値は、結合パケットのサイズSの平均が(25000-2499)/10=2250.1より小さい場合、Nを11以上にすれば、11個以上の結合パケットを同じ容量(25000Byte)のバッファに書き込めることを示している。従来の図24の構成で11個以上の結合パケットを書き込むためにはNを11以上にし、かつ27500Byte以上のバッファ領域が必要である。
したがって、本実施例のパケット処理装置でパケットメモリ101内に確保するバッファ領域のサイズを従来の図24の構成で必要なサイズと同じサイズにした場合、従来の図24の構成の場合より、無駄になる領域が小さくなり、より多数の結合パケットを同じサイズのバッファ領域に書き込むことが可能となる場合もある。
また、結合パケットのサイズSの平均を仮に1500Byte、バッファ領域に書き込む結合パケットの最大数を10だとして、本実施例のパケット処理装置でパケットメモリ101内に確保すべきバッファ領域のサイズを計算すると、1500×10=15000Byteとなり、従来の図24の構成で必要なサイズ(25000Byte)より小さくなる。
本実施例のパケット処理装置では、結合パケット転送部114がディスクリプタ1130の情報(先頭アドレス、受信データサイズ、受信完了フラグ)を書き込むことにより、復元処理を不要としている。
復元処理を受信処理部103、プロトコル処理部104、もしくは図24の結合パケット分離部108で実現しようとすると、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケット結合部106から受信処理部103、プロトコル処理部104、もしくは図24の結合パケット分離部108に通知する手段が必要となる。
また、復元処理を受信処理部103、プロトコル処理部104、もしくは図24の結合パケット分離部108で実現しようとすると、纏め書き込み完了後、受信処理が起動されるまで、場合によっては複数の結合パケット分の復元処理に必要な情報を保持しておく必要があることを考慮しなければならない。
これに対して、本実施例のパケット処理装置では、1つの結合パケットの纏め書き込みが完了した時点で結合パケットの復元処理は終わっているので、複数の結合パケット分の情報を保持する必要がない。したがって、復元処理を受信処理部103、プロトコル処理部104、もしくは図24の結合パケット分離部108で実現する場合と比較して、本実施例の方がハードウェアの規模が小さい。これは、結合パケットを元の複数のパケットに復元する処理をソフトウェアで実装する場合で比較しても同じである。
例えば、図24の構成でパケットメモリ101と回線対応部100以外の構成をすべてソフトウェアで実現した場合、パケットメモリ101への書き込みの処理と、復元処理を含む受信処理とを異なるプロセッサ(もしくはバーチャルマシン等)に実装すると、パケットメモリ101への書き込み完了後、受信処理が起動されるまで、場合によっては複数の結合パケット分の復元処理に必要な情報を保持しておく必要があるため、複数の結合パケット分の復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケットメモリ101等に保持しておく必要がある。
これに対して、本実施例の構成でパケットメモリ101と回線対応部100以外の構成をすべてソフトウェアで実現した場合は、パケットメモリ101への書き込みの処理と、復元処理を含まない受信処理とを異なるプロセッサ(もしくはバーチャルマシン等)に実装した場合でも、パケットメモリ101への書き込みの処理と復元処理を同じプロセッサ(もしくはバーチャルマシン等)に実装することにより、複数の結合パケット分の情報(結合したパケットの数、パケット毎のサイズ)を保持する必要がない、すなわち、1つの結合パケット分のみの復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)をパケットメモリ101等に保持しておくだけでよい。
つまり、本実施例の構成は、図24の構成と比較して、復元処理に必要な情報(結合したパケットの数、パケット毎のサイズ)の保持に使用するパケットメモリ101等の容量(書き込み可能なビット数)が小さくてもよいことになり、必要となるハードウェアの規模を削減することができる。
また、復元処理に必要な情報をパケット結合部106から受信処理部103、プロトコル処理部104、もしくは図24の結合パケット分離部108に通知する手段として、復元処理に必要な情報をパケットメモリ101に書き込むことも可能である。しかし、この場合、纏め書き込みに使用するバスの帯域の一部を、復元処理に必要な情報で占有してしまうことになるので、本来のパケットデータの書き込みに使用できる実効帯域が小さくなり、その結果、纏め書き込みの性能が劣化する。
本実施例のパケット処理装置では、復元処理に必要な情報を、パケットメモリ101ではなく、パケットメモリ101が接続されているバスを使用しない別のメモリ(パケット結合部110からの書き込みと結合パケット転送部114からの読み出しだけが可能であれば良い)に保持することができ、上記のような実効帯域の劣化は起こらない。
第1の実施例と同様に、本実施例の変形として、パケット結合部110においてパケットの種類を判定して同じ種類のパケットを結合パケットとして纏める構成としてもよいし、パケットの種類に応じて複数のディスクリプタ1130を使い分ける構成としてもよい。パケットの種類別にディスクリプタ1130を用意し、パケットの種類に応じて複数のディスクリプタ1130を使い分ける構成とすると、パケットの種類毎に異なる受信処理を行うことが容易になる。
また、本実施例において、複数のCPUコアを内蔵するプロセッサのコア毎に複数のディスクリプタ1130を使い分ける構成としてもよいし、バーチャルマシン毎に複数のディスクリプタ1130を使い分ける構成としてもよい。CPUコア毎もしくはバーチャルマシン毎に複数のディスクリプタ1130を使い分ける構成とすることにより、ディスクリプタ1130が1個のみの場合と比較して、ソフトウェアによる書き込み処理および読み出し処理の性能が向上する。
第1、第2の実施例のパケット処理装置において、パケットメモリ101と転送管理部112と受信処理部103とプロトコル処理部104と結合パケット転送部114とは、プロセッサ、記憶装置及びインタフェースを備えたコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。
このようなコンピュータにおいて、本発明のパケット処理方法を実現させるためのプログラムは記憶装置に格納される。プロセッサは、記憶装置に格納されたプログラムに従って第1、第2の実施例で説明した処理を実行する。また、上記のとおり、結合パケット転送部111の一部の処理をコンピュータで実現することも可能である。