JP5748288B2 - パケットバッファ装置およびパケットバッファ制御方法 - Google Patents
パケットバッファ装置およびパケットバッファ制御方法 Download PDFInfo
- Publication number
- JP5748288B2 JP5748288B2 JP2011285526A JP2011285526A JP5748288B2 JP 5748288 B2 JP5748288 B2 JP 5748288B2 JP 2011285526 A JP2011285526 A JP 2011285526A JP 2011285526 A JP2011285526 A JP 2011285526A JP 5748288 B2 JP5748288 B2 JP 5748288B2
- Authority
- JP
- Japan
- Prior art keywords
- packet
- block
- data
- buffer
- partition
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Communication Control (AREA)
Description
従来、このようなパケットバッファ装置において、パケット処理をハードウェア化することにより、処理能力を改善したものが提案されている(例えば、非特許文献1など参照)。
図15のパケットバッファ装置50は、バッファ制御部51、データ用メモリ52、およびジョブ用メモリ53から構成される。
このパケットバッファ装置50は、複数のキュー(FIFOメモリ)を備え、入力された可変長のパケットを前記キューに格納し、入力された出力指示情報に応じて、前記キューに格納されていた前記パケットを前記キューから取り出して出力する機能を有している。
ジョブ用メモリ53は、キュー毎に異なるアドレス領域を有し、入力パケット毎に生成される固定長のパケットジョブ(ジョブ情報)を、前記キューに対応する前記領域に蓄積する機能を有している。パケットジョブは、前記データ用メモリ52における各パケットの境界位置を特定するためのパケット境界情報を含んでいる。
これら前記データ用メモリ52および前記ジョブ用メモリ53は、バッファ制御部51により、FIFOバッファとして制御される。
また、バッファ制御部51は、出力指示情報の入力に応じて、ジョブ用メモリ53からパケットジョブを読み出す機能と、このパケットジョブに基づいて、データ用メモリ52から、対応するパケットのパケットデータを読み出して出力する機能とを有している。
したがって、入力されたパケットデータは、バッファ制御部51により、DDR−SDRAMに格納される。このとき、DDR−SDRAMにおける前記パケットデータの格納位置を含むパケットジョブが、バッファ制御部51により、内部メモリに格納される。また、出力指示情報に応じて、DDR−SDRAMからパットデータが読み出されて出力される。
また、データ用メモリ52にはSDRAMのように大容量のメモリを使用することが一般的であるが、ジョブ用メモリ53は、データ用メモリほどの容量を必要としないことから、ジョブ用メモリ53専用にSDRAMを使用することは回路規模の増大を招くため、一般的にはSRAMが使用される。
このとき、格納位置の情報とパケットデータの両方が同一のSDRAMに記憶されていると、格納位置の情報をメモリから読み出すために読み出しコマンドをメモリに発行し、一定の待ち時間の経過後に、前記格納位置の情報をメモリから受け取り、その後、前記格納位置の情報に基づいて、パケットデータを読み出すために読み出しコマンドをメモリに発行し、一定の待ち時間の経過後に、前記パケットデータをメモリから受け取る、という手順になる。
SRAMは、1ビットあたりの面積がSDRAMより大きいが、メモリからの読み出しを短時間に行うことができる、という特徴を備えている。SRAM上のジョブ用メモリ53から短時間でパケットジョブを読み出し、このパケットジョブの情報に基づいて、SDRAM上のデータ用メモリ52からパケットデータを読み出すことにより、SDRAMの帯域利用効率を上げている。
[第1の実施の形態]
まず、図1を参照して、本発明の第1の実施の形態にかかるパケットバッファ装置10について説明する。図1は、第1の実施の形態にかかるパケットバッファ装置の構成を示すブロック図である。
このパケットバッファ装置10には、主な機能部として、バッファ制御部11、メモリ部12、書込バッファ部13、および読出バッファ部14が設けられている。
メモリ部12は、バッファ制御部11からの制御に基づき、固定長であるKバイトのブロック単位でパケットをシーケンシャルで書き込み/読み出しする。本例では、アドレスが連続するメモリ領域を、Kバイトずつに区切って各々をブロックとし、パケットの入力順に、アドレスが小さい方のブロックから格納されている。
また、メモリが複数のバンクに分かれている場合は、マルチ・バンク・オペレーションによって、メモリの帯域利用効率を向上させることができるので、Kを、バーストあたりのデータ量×バンク数の整数倍とすると、1ブロックのアクセスを予め決めておいたメモリへのコマンド発行手順によって行うことで、簡単な回路でマルチ・バンク・オペレーションを実現することができる。Kの値の例は、128,256,512,1024である。
各ブロックには、パケットデータの他に、固定長(Hバイト)のブロック管理情報が含まれ、ブロック管理情報のブロック内での位置が定められている。本例では、ブロックの先頭側すなわちアドレス最小側に寄せて配置される。
一方、前記パケットデータ継続フラグが「0」の場合は、前記領域内に含まれるパケットデータの末尾(1個のブロックに複数のパケットが収容されている場合は最後のパケットのデータ末尾)より後ろに、有効なパケットデータが格納されていないことを示す。
ただし、K=512,1024の場合、パケット終端位置はブロック先頭からのバイト数ではなく、ブロック先頭からのワード数を表すと仮定している。前記により、パケット終端位置は、ブロック内のデータのバイト数を2進数として表現可能なビット数よりも少ないビット数で表現できるためである。例えば、K=512のとき、ブロック先頭からのバイト数としてパケット終端位置を規定すると8bit長となるが、ブロック先頭からの4Byte長のワード数パケット終端位置を規定すると6bit長で済む。
次に、図3を参照して、本実施の形態にかかるパケットバッファ装置10の書込動作について説明する。図3は、第1の実施の形態にかかる書込動作を示す状態遷移図である。
パケット終端位置は、各パケットデータの末尾バイトの位置を示す変数であり、1個のブロックデータ内のパケットデータ領域の先頭バイトからのバイト数で表現される。
変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタである。
変数Mは、1個のブロックデータ内に含みうるパケット数の最大値である。
格納位置は、パケットデータを1バイトずつ書込ブロックバッファ13A内のパケットデータ領域に格納するときの位置を指定する変数(バイトアドレス)である。
パケットデータ継続フラグは、パケットデータ領域を使い切っているか否かを示す変数である。
パケットバッファ装置10は、電源投入後、パケットの入力を開始する前に、初期化状態(ステップ100)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
入力待ち状態(ステップ101)において、パケットの入力があった時点、すなわち「入力あり」の場合、バッファ制御部11は、前記パケットのパケットデータを書込ブロックバッファ13Aに格納する、データ格納状態(ステップ102)に遷移する。
そこで、このような状況では、ブロック書き込み2状態(ステップ104)に遷移することによって、書込ブロックバッファ13A内に残された残りのデータを、1ブロック分のブロックデータが揃っていなくともメモリ部12に書き込むことにより、メモリ部12から1個のパケットデータを全て読み出せるようにしている。
データ格納状態(ステップ102)において、バッファ制御部11は、書込ブロックバッファ13Aのうち、格納位置が示すパケットデータ領域内の位置に、入力されたパケットデータを1バイトずつ格納し、併せて、前記格納位置を1バイトずつ後ろに移動させる。
データ終端位置更新状態(ステップ105)において、バッファ制御部11は、変数iの値に「1」を加算する。
さらに、バッファ制御部11は、直前のデータ格納状態(ステップ102)において、パケットデータの末尾バイトを書込ブロックバッファ13Aに格納した際、その格納位置に相当するバイト数、すなわち、前記書込ブロックバッファ13Aのパケットデータ領域先頭から前記末尾バイトまでのバイト数を、ブロック管理情報に含まれるパケット終端位置#iとして、書込ブロックバッファ13Aに格納する。
また、データ終端位置更新状態(ステップ105)において、書込ブロックバッファ13Aのパケットデータ領域に空きがなくなった場合、すなわち「ブロック満了」時、バッファ制御部11は、書込ブロックバッファ13Aに保持されたブロックをメモリ部12に書き込む、ブロック書き込み2状態(ステップ104)に遷移する。
ブロック書き込み1状態(ステップ103)において、バッファ制御部11は、書込ブロックバッファ13A内にブロック管理情報として保持されているパケットデータ継続フラグの値を「1」とし、書込ブロックバッファ13Aに保持されているブロックデータを、メモリ部12内の所定のアドレスに書き込む。
ブロック書き込み2状態(ステップ104)において、バッファ制御部11は、書込ブロックバッファ13A内にブロック管理情報として保持されているパケットデータ継続フラグの値を「0」に初期化し、書込ブロックバッファ13Aに保持されたブロックデータを、メモリ部12内の所定のアドレスに書き込む。
次に、図4を参照して、本実施の形態にかかるパケットバッファ装置10の読出動作について説明する。図4は、第1の実施の形態にかかる読出動作を示す状態遷移図である。
データ保持有無は、読出ブロックバッファ14Aでのデータ保持あり/なしを示す変数である。
変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタである。
変数Mは、1個のブロックデータ内に含みうるパケット数の最大値である。
パケット終端位置は、各パケットデータの末尾バイトの位置を示す変数であり、1個のブロックデータ内のパケットデータ領域の先頭バイトからのバイト数で表現される。
取得位置は、パケットデータを1バイトずつ読出ブロックバッファ14A内のパケットデータ領域から取得するときの位置を指定する変数(バイトアドレス)である。
パケットデータ継続フラグは、パケットデータパケットデータ領域を使い切っているか否かを示す変数である。
パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態(ステップ110)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
バッファ制御部11は、初期化状態(ステップ110)において、初期化が完了した時点で、出力指示情報の入力を待つ、入力待ち状態(ステップ111)に遷移する。
入力待ち状態(ステップ111)において、バッファ制御部11は、出力指示情報の入力があるまで、他の状態に遷移せずに、出力指示情報の入力を待ち受ける入力待ち状態(ステップ111)に留まる。
また、入力待ち状態(ステップ111)において、出力指示情報の入力があった時点で、前記データ保持有無がデータ保持ありを示す場合、すなわち「入力あり and データ保持あり」の場合、バッファ制御部11は、データ取得状態(ステップ112)に遷移する。
データ取得状態(ステップ112)において、バッファ制御部11は、読出ブロックバッファ14Aから、取得位置が示す位置から、パケットデータを1バイトずつ取得して出力し、併せて、前記取得位置を1バイトずつ後ろに移動させる。なお、パケットデータが1バイト単位で出力するのではなく、予め定められたバイト数単位で出力する場合には、前記バイト数単位で格納と格納位置の移動を行う。
この際、前記パケット終了は、読出ブロックバッファ14Aに格納されたパケット終端位置#iが示す位置に前記取得位置が達したこと、すなわち、取得中のパケットデータの末尾バイトまで取得を終えたことを条件として判定する。なお、変数iは、読出ブロックバッファ14Aに含まれるM個のパケット終端位置のうち、取得対象のパケットに対するパケット終端位置を特定する変数としても用いられる。
一方、前記残データありは、前記取得位置がパケットデータ領域の最終バイト位置に達していないことであり、残データなしの条件は、前記残データありの条件を満たさないことを条件として判定する。
一方、前記取得位置がパケットデータ領域の最終バイト位置に達していない場合は、バッファ制御部11は、変数iの値に「1」を加算する。
また、前記以外、すなわち、前記パケット終端位置#iの値が「0」以外、かつ、i≦Mの場合、バッファ制御部11は、データ保持有無の値を保持ありと設定する。
ブロック読み出し状態(ステップ113)において、バッファ制御部11は、メモリ部12の所定アドレスから1個のブロックデータを読み出して、読出ブロックバッファ14Aに前記ブロックデータを格納する。また、バッファ制御部11は、前記取得位置の値を、読出ブロックバッファ14A内のパケットデータ領域の先頭位置を示す値に初期化するとともに、前記データ保持有無の値を保持ありに初期化し、さらに、変数iの値を「1」に初期化する。
このように、本実施の形態にかかるパケットバッファ装置10は、固定長の記憶領域であるブロックを単位としてデータの書き込みおよび読み出しを行うメモリ部12と、少なくとも前記ブロック分のデータを保持する書込ブロックバッファ13Aと、少なくとも前記ブロック分のデータを保持する読出ブロックバッファ14Aとを備え、パケット制御部11において、入力された可変長のパケットのパケットデータを、前記書込ブロックバッファ13Aへ順次格納するとともに、当該書込ブロックバッファ13A内における当該パケットデータの終端位置を示すパケット境界情報を当該書込ブロックバッファ13Aへ格納し、当該書込ブロックバッファ13A内に所定量のデータが格納された時点で、当該データをメモリ部12へ書き込み、入力された出力指示に応じて、メモリ部12から前記データを読み出して前記読出ブロックバッファ14Aへ格納し、当該データに含まれる前記パケット境界情報に基づいて、当該データに含まれる各パケットデータを読み出して出力するようにしたものである。
これにより、メモリのデータバス幅やクロック周波数を低減することができるため、回路規模および消費電力を削減することができる。
したがって、メモリにソフトエラー等が発生し、前記エラーが発生したブロックに格納されているパケットデータを正常に読み出すことができなくなったとしても、続く正常なブロックとブロック管理情報を読み出すことができるため、後続のパケットについては、正常にそのパケットデータを読み出すことができる。これにより、ブロック管理情報にエラーがないことを確認するためのパリティを付加やチェックは不要であり、前記パリティ演算や保持のための回路を削減することができる。また、エラーが発生した場合にも、メモリ部12の初期化といった正常なパケットまでも廃棄される深刻な影響をもたらすエラー回復処理を必要としない。
本実施の形態にかかるパケットバッファ装置10は、前述したように、ジョブ用メモリを必要としないため、蓄積されるパケット数の増大に伴う回路規模の増大を抑制することができる。
本発明は、ブロックとしてパケットデータをメモリ(SDRAM)に記憶するが、前記ブロックのブロック管理情報を記憶したメモリ領域に連接するメモリ領域に前記ブロックのデータを記憶する。
一方、ブロック管理情報とブロックのデータを、メモリの異なる領域に分離して記憶した場合は、ブロックを読み出すとき、管理情報を読み出すための読み出しコマンドと、データを読み出すための読み出しコマンドの、少なくとも2回のコマンドをメモリに対して発行する必要がある。
また、ブロック単位でメモリにアクセスするため、ブロック長を、メモリをバーストアクセスするときの1度のアクセスで書き込み/読み出しするデータ量の、整数倍とすることにより、メモリを効率よくアクセスすることができる。
これにより、メモリのデータバス幅やクロック周波数を低減することができるため、回路規模と消費電力を削減することができる。
したがって、メモリにソフトエラー等が発生し、前記エラーが発生したブロックに格納されているパケットデータを正常に読み出すことができなくなったとしても、続く正常なブロックとブロック管理情報を読み出すことができるため、後続のパケットについては、正常にそのパケットデータを読み出すことができる。
これに対して、本実施の形態にかかるパケットバッファ装置10によれば、ブロックごとに設けたブロック管理情報に、ブロック内に格納されたパケットデータの終端位置を示すパケット境界情報が含まれている。このため、このパケット境界情報に基づき、ブロック内に格納されている各パケットデータの先頭アドレスを、極めて容易に特定することができ、メモリの増大に伴う余分な回路規模の増加を抑制することも可能となる。
次に、本発明の第2の実施の形態にかかるパケットバッファ装置10について説明する。
本実施の形態にかかるパケットバッファ装置10は、図1に示した第1の実施の形態と同様の構成を有しているが、図3および図4に示した状態遷移とは一部異なる処理を行うことで、メモリ部12に蓄積されるブロックの内部構造が異なっている。
本実施の形態にかかるパケットバッファ装置10において、メモリ部12は、図5に示すように、バッファ制御部11によって、固定長(Kワード、各ワードはKビット)のブロック単位でパケットを蓄積するよう制御される。
本例では、メモリ部12内のアドレスが連続するメモリ領域を、Kワードずつに区切って各々をブロックを構成し、パケットデータが入力されるごとに、アドレスの小さいブロックから順に格納する。
各ブロックには、パケットデータの他に、例えば1ワード分からなる固定長のブロック管理情報が含まれ、このブロック管理情報の格納位置は、各ブロック内で固定された位置が定められている。本例において、ブロック管理情報はブロックの先頭側すなわちアドレス最小側に寄せて配置される。
前記パケットデータ継続フラグは、そのブロックのパケットデータ領域を使い切っているか否かを示す。前記パケットデータ継続フラグが「1」の場合は、パケットデータ領域を使い切っている場合であり、パケットデータ領域の最後まで有効なパケットデータが格納されていることを示す。一方、前記パケットデータ継続フラグが「0」の場合は、前記領域内に含まれるパケットデータの末尾(1個のブロックに複数のパケットが収容されている場合は最後のパケットのデータ末尾)より後ろに、有効なパケットデータが格納されていないことを示す。
次に、前述した図3を参照して、本実施の形態にかかるパケットバッファ装置10の書込動作について説明する。なお、本実施の形態にかかる読出動作は、図3の状態遷移図の一部において相違しているところがある。
境界判定ビットは、ワードごとに、当該ワードにおけるパケット末尾バイトの存在有無を示す変数である。
変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタである。
格納位置は、パケットデータを1ワードずつ書込ブロックバッファ13A内のパケットデータ領域に格納するときの位置を指定する変数(ワードアドレス)である。
パケットデータ継続フラグは、パケットデータパケットデータ領域を使い切っているか否かを示す変数である。
初期化状態(ステップ100)において、バッファ制御部11は、書込ブロックバッファ13Aを初期化する。この初期化処理において、バッファ制御部11は、書込ブロックバッファ13Aの全ての境界判定ビットの値を「0」とする。また、書込バッファ部13の格納位置を初期化する。これにより、格納位置は、パケットデータ領域の先頭位置にセットされる。
バッファ制御部11は、初期化状態(ステップ100)において、初期化が完了した時点で、パケットの入力を待つ、入力待ち状態(ステップ101)に遷移する。
入力待ち状態(ステップ101)において、パケットの入力があった時点、すなわち「入力あり」の場合、バッファ制御部11は、前記パケットのパケットデータを書込ブロックバッファ13Aに格納する、データ格納状態(ステップ102)に遷移する。
データ格納状態(ステップ102)において、バッファ制御部11は、書込ブロックバッファ13Aのうち、格納位置が示すパケットデータ領域内の位置に、入力されたパケットデータを1ワードずつ格納し、併せて、前記格納位置を1ワードずつ後ろに移動させる。なお、パケットデータの先頭バイトが、前記バイトを含むワードの先頭位置となるように、前記パケットデータをワード単位で分割する。
データ終端位置更新状態(ステップ105)において、バッファ制御部11は、データ格納状態において格納した最後のワード内に含まれるパケットデータの末尾バイトに続けて、パケット終端パタンを格納する。本例では、前記パケットデータの末尾バイトの次のバイト位置に、値「0」のパケット終端バイトを格納し、さらに、前記パケット終端バイトを含むワード内において、前記パケット終端バイトの次のバイト位置から前記ワードの末尾バイト位置までに、各バイト値が「255」のパケット終端パッドパタンを格納する。さらに、データ終端位置更新状態(ステップ105)において、バッファ制御部11は、パケット終端バイトを格納したワードに対応する境界判定ビットに「1」を格納する。
一方、データ終端位置更新状態(ステップ105)において、書込ブロックバッファ13Aのパケットデータ領域に空きがなくなった場合、すなわち「ブロック満了」時、バッファ制御部11は、書込ブロックバッファ13Aに保持されたブロックをメモリ部12に書き込む、ブロック書き込み2状態(ステップ104)に遷移する。
ブロック書き込み1状態(ステップ103)において、バッファ制御部11は、書込ブロックバッファ13A内のブロック管理情報に保持されているパケットデータ継続フラグの値を「1」とし、書込ブロックバッファ13Aに保持されているブロックデータを、メモリ部12内の所定のアドレスに書き込む。
ブロック書き込み2状態(ステップ104)において、バッファ制御部11は、書込ブロックバッファ13A内に保持されているパケットデータ継続フラグの値を「0」に初期化し、書込ブロックバッファ13Aに保持されているブロックデータを、メモリ部12内の所定のアドレスに書き込む。
次に、図4を参照して、本実施の形態にかかるパケットバッファ装置10の読出動作について説明する。なお、本実施の形態にかかる読出動作は、図4の状態遷移図の一部において相違しているところがある。
データ保持有無は、読出ブロックバッファ14Aでのデータ保持あり/なしを示す変数である。
変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタである。
パケット終端位置は、各パケットデータの末尾バイトの位置を示す変数であり、1個のブロックデータ内のパケットデータ領域の先頭バイトからのバイト数で表現される。
取得位置は、パケットデータを1ワードずつ読出ブロックバッファ14A内のパケットデータ領域から取得するときの位置を指定する変数(ワードアドレス)である。
パケットデータ継続フラグは、パケットデータパケットデータ領域を使い切っているか否かを示す変数である。
初期化状態(ステップ110)において、バッファ制御部11は、読出ブロックバッファ14Aを初期化する。この初期化処理において、バッファ制御部11は、データ保持有無の値をデータ保持なしに初期化する。
バッファ制御部11は、初期化状態(ステップ110)において、初期化が完了した時点で、出力指示情報の入力を待つ、入力待ち状態(ステップ111)に遷移する。
入力待ち状態(ステップ111)において、バッファ制御部11は、出力指示情報の入力があるまで、他の状態に遷移せずに、出力指示情報の入力を待ち受ける入力待ち状態(ステップ111)に留まる。
また、入力待ち状態(ステップ111)において、出力指示情報の入力があった時点で、前記データ保持有無がデータ保持ありを示す場合、すなわち「入力あり and データ保持あり」の場合、バッファ制御部11は、データ取得状態(ステップ112)に遷移する。
データ取得状態(ステップ112)において、バッファ制御部11は、読出ブロックバッファ14Aから、取得位置が示す位置から、パケットデータを1ワードずつ取得して出力し、併せて、前記取得位置を1ワードずつ後ろに移動させる。
この際、前記パケット終了は、読出ブロックバッファ14Aから取得したワードに対応した境界判定ビットが「1」となる(前記ワード内にパケット終端バイトを含む)こと、すなわち、取得中のパケットデータの末尾バイトまで取得を終えたことを条件として判定する。また、パケット継続は、前記パケット終了の条件を満たさないことを条件として判定する。
一方、前記取得位置がパケットデータ領域の最終ワード位置に達していない場合、かつ、パケットデータ継続フラグの値が「1」の場合は、保持ありとする。
また、前記以外は、保持なしとする。
ブロック読み出し状態(ステップ113)において、バッファ制御部11は、メモリ部12の所定アドレスから1個のブロックを読み出して、読出ブロックバッファ14Aに前記ブロックを格納する。また、バッファ制御部11は、前記取得位置を示す変数値を、読出ブロックバッファ14A内のパケットデータ領域の先頭ワード位置を示す値に初期化するとともに、データ保持有無の値を保持ありに初期化する。
このように、本実施の形態にかかるパケットバッファ装置10は、メモリ部12の前記ブロックが、複数バイトの固定長からなるワードを単位として複数個に分割されてなり、前記パケット制御部11は、前記書込ブロックバッファ13Aに前記ブロック管理情報を格納する際、前記書込ブロックバッファ13A内の前記ワードの先頭ワードから前記ブロック管理情報を格納し、前記書込ブロックバッファ13Aに前記パケットデータを書き込む際、前記ブロック管理情報の末尾バイトを格納した前記先頭ワードの次のワードから順に格納用のワードを選択し、選択したワードに前記パケットデータを格納する際、当該ワードの先頭バイトから順に当該パケットデータの各バイトを格納するとともに、当該パケットデータの末尾バイトを格納したバイトの次のバイトから所定のパケット終端パタンを格納し、前記書込ブロックバッファ13Aに前記ブロック管理情報を格納する際、前記パケット境界情報に代えて、前記各ワードにおける前記パケットデータの末尾バイトの存在有無を示す境界判定ビット列を含む前記ブロック管理情報を格納するようにしたものである。
また、境界判定ビット列をパケット境界情報としているため、ブロック先頭バイトからのバイト数を計数する必要がなくなり、パケット境界情報を生成するための回路を簡易化することができる。同様に、パケット境界情報に基づいてブロックから個々のパケットを抽出するための回路を簡易化することができる。
第2の実施の形態では、ブロック管理情報およびパケットデータを、固定長のワード単位で扱うが、第1の実施の形態ではバイト単位で扱う。
パケットの宛先や送信元など表す情報を含むヘッダは、パケットデータの先頭バイトを基準として決まった位置にあり、パケットに対する処理を行うとき、例えば、パケットを入出力する複数のポートを装置が備えるときパケットのヘッダの値に応じて、どのポートから出力するかを決める、複数のキューを備えるときパケットのヘッダの値に応じて、どのキューにパケットを蓄積するかを決める、など、パケットデータのヘッダの値を読み取る処理が行われる。
ここで、パケット先頭バイトが、ワード内のどのバイトにも現れる可能性があるような回路では、パケットデータのワード列からヘッダの値を読み取るとき、前記パケット先頭バイトのワード内での位置を考慮した処理が必要となる。
すなわち、第2の実施の形態にかかるパケットバッファ装置10が、パケット先頭バイト位置をワード内の第1バイトのみに現れるように整列されたワード列として扱う装置の後段あるいは前段にあり、装置間の信号形式が、パケット先頭バイト位置をワード内の第1バイトのみに現れるように整列されたワード列、という場合は、その信号形式を保ったまま、ブロック化してメモリに蓄積することができるので、バイト列としてパケットデータを扱う第1の実施の形態にかかるパケットバッファ装置10では必要であった信号形式の変換が不要となる。
次に、図6を参照して、本発明の本実施の形態にかかるパケットバッファ装置10について説明する。図6は、第3の実施の形態にかかるパケットバッファ装置の構成を示すブロック図である。
前述した第1の実施の形態では、固定長の記憶領域からなるブロックを単位として、入力された各パケットのパケットデータを、メモリ部12で蓄積する場合を例として説明した。本実施の形態は、複数個のブロックで区画を構成し、入力された各パケットのパケットデータを、指定されたキューと対応する区画内のブロックで蓄積するようにしたものである。
なお、本実施の形態では、連結区画情報保持部23は、連結区画識別子の値としてMを保持することが可能であり、前記値は連結された区画がないことを意味する。
メモリ部12は、図7に示すように、バッファ制御部11によって、複数の互いに重ならないアドレス範囲で区分けされ、前記区分けされた複数の区画として管理される。本実施の形態では、M個の区画に区分けされる。Mはキューの個数N以上の値をとる整数である。前記Mに対する制約は、すべてのキューに同時にパケットを蓄積可能とするために必要な制約であり、すべてのキューに同時にパケットを蓄積することが必要とされない実施形態では、前記制約は必要ない。また、メモリ部12のアドレス順に区分けしたときの各区画に割り付けられた番号を、前記区画を特定するための区画識別子とし、その値は0からM−1までの整数のうち何れかの値をとる。
本実施の形態では、メモリ部12のうち、アドレスが連続するメモリ領域を、Kバイトずつに区切ってB個のブロックを設け、パケットの入力順に、アドレスが小さい方のブロックから格納される。
上記Bは、各区画に含まれるブロック数であるが、Bの値は自然数であり値に制限はない。ただし、B×K×Mの値は、パケットバッファが蓄積すべきデータの全バイト数より大きくすべき値なので、BやKやMの値の範囲に定めがあり、パケットバッファが蓄積すべきデータの全バイト数が規定されている場合には、Bの取りうる範囲が前記式によって実用上制約を受ける。
パケットバッファが蓄積すべきデータの全ビット数が規定されているとき、Mの値を大きくすれば、各区画のビット数を小さくすることができる。これにより、キューに対して割当済である区画のうち、データを記憶していない空き領域の大きさを小さくすることが可能である、これは、空き領域が、最悪で、1区画分のメモリ量程度になるためである。
ただし、Mを大きくすると、バッファ制御部11が管理すべき区画数が増えるので、各キューの区画連結の状態を保持する連結区画情報保持部23や、空き区画を管理する空き区画情報保持部24の回路規模が増大する。つまり、メモリ利用効率を100%に近づけようとすると上記回路規模の増大が問題となるので、前記利用効率を80%から90%とする場合の指標である、M=N×5〜N×10程度が実用的な範囲である。
また、メモリが複数のバンクに分かれている場合は、マルチ・バンク・オペレーションによって、メモリの帯域利用効率を向上させることができるので、Kを、バーストあたりのデータ量×バンク数の整数倍とすると、1ブロックのアクセスを予め決めておいたメモリへのコマンド発行手順によって行うことで、簡単な回路でマルチ・バンク・オペレーションを実現することができる。Kの値の例は、128,256,512,1024である。
各ブロックには、パケットデータの他に、固定長(Hバイト)のブロック管理情報が含まれ、ブロック管理情報のブロック内での位置が定められている。本例では、ブロックの先頭側すなわちアドレス最小側に寄せて配置される。
一方、前記パケットデータ継続フラグが「0」の場合は、前記領域内に含まれるパケットデータの末尾(1個のブロックに複数のパケットが収容されている場合は最後のパケットのデータ末尾)より後ろに、有効なパケットデータが格納されていないことを示す。
ただし、K=512,1024の場合、パケット終端位置はブロック先頭からのバイト数ではなく、ブロック先頭からのワード数を表すと仮定している。前記により、パケット終端位置は、ブロック内のデータのバイト数を2進数として表現可能なビット数よりも少ないビット数で表現できるためである。例えば、K=512のとき、ブロック先頭からのバイト数としてパケット終端位置を規定すると8bit長となるが、ブロック先頭からの4Byte長のワード数パケット終端位置を規定すると6bit長で済む。
次に、図9を参照して、本実施の形態にかかるパケットバッファ装置10において、キュー入力指示情報の入力に応じて、入力されたパケットのパケットデータを、書込ブロックバッファ13Aへワード単位で順次格納した後、ブロック単位で、メモリ部12内の対応する区画へ書き込む書込動作について説明する。図9は、第3の実施の形態にかかる書込動作を示す状態遷移図である。なお、書込動作動作のうち、ブロック書き込み1状態(ステップ203)およびブロック書き込み2状態(ステップ204)におけるブロック書込動作の詳細については、図10を参照して後述する。
パケット終端位置は、各パケットデータの末尾バイトの位置を示す変数であり、1個のブロックデータ内のパケットデータ領域の先頭バイトからのバイト数で表現される。
変数Pは、1個のブロックデータ内に含みうるパケット数の最大値である。
変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタであり、最大値P個以下の値をとる。
格納位置は、パケットデータを1バイトずつ書込ブロックバッファ13A内のパケットデータ領域に格納するときの位置を指定する変数(バイトアドレス)である。
パケットデータ継続フラグは、パケットデータ領域を使い切っているか否かを示す変数である。
パケットバッファ装置10は、電源投入後、パケットの入力を開始する前に、初期化状態(ステップ200)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
入力待ち状態(ステップ201)において、パケットの入力があった時点で、バッファ制御部11は、パケットデータを蓄積可能か否かを判定する。この際、蓄積可否は、現在の書込区画内での書込区画内位置(ブロック)が満了であり、かつ、連結区画が連結されていない状態を蓄積不可と判定し、他の状態を蓄積可と判定する。
したがって、パケットの入力があって、パケットの蓄積が可能であった場合、すなわち「入力あり and メモリ蓄積可」の場合、バッファ制御部11は、前記パケットのパケットデータを書込ブロックバッファ13Aに格納する、データ格納状態(ステップ202)に遷移する。
そこで、このような状況では、ブロック書き込み2状態(ステップ204)に遷移することによって、書込ブロックバッファ13A内に残された残りのデータを、1ブロック分のブロックデータが揃っていなくともメモリ部12に書き込むことにより、メモリ部12から1個のパケットデータを全て読み出せるようにしている。
入力パケット廃棄状態(ステップ206)において、バッファ制御部11は、パケットデータの入力が終了するまで、前記状態に留まり、前記パケットデータの入力終了に応じて、入力待ち状態(ステップ201)に遷移する。これにより、パケット単位で、パケットデータを廃棄することができる。したがって、パケットデータが途中まで書き込まれた後、その後半だけが廃棄されるという不連続パケットデータの発生を回避でき、不連続パケットデータに起因するパケット読み出し時の不具合発生を抑止することが可能となる。
データ格納状態(ステップ202)において、バッファ制御部11は、書込ブロックバッファ13Aのうち、格納位置が示すパケットデータ領域内の位置に、入力されたパケットデータを1バイトずつ格納し、併せて、前記格納位置を1バイトずつ後ろに移動させる。なお、パケットデータが1バイト単位で入力されるのではなく、予め定められたバイト数単位で入力される場合には、前記バイト数単位で格納と格納位置の移動を行う。
データ終端位置更新状態(ステップ205)において、バッファ制御部11は、変数iの値に「1」を加算する。
さらに、バッファ制御部11は、直前のデータ格納状態(ステップ202)において、パケットデータの末尾バイトを書込ブロックバッファ13Aに格納した際、その格納位置に相当するバイト数、すなわち、前記書込ブロックバッファ13Aのパケットデータ領域先頭から前記末尾バイトまでのバイト数を、ブロック管理情報に含まれるパケット終端位置#iとして、書込ブロックバッファ13Aに格納する。
また、データ終端位置更新状態(ステップ205)において、書込ブロックバッファ13Aのパケットデータ領域に空きがなくなった場合、すなわち「ブロック満了」時、バッファ制御部11は、書込ブロックバッファ13Aに保持されたブロックをメモリ部12に書き込む、ブロック書き込み2状態(ステップ204)に遷移する。
ブロック書き込み1状態(ステップ203)において、バッファ制御部11は、書込ブロックバッファ13A内にブロック管理情報として保持されているパケットデータ継続フラグの値を「1」とし、書込ブロックバッファ13Aに保持されているブロックデータを、メモリ部12内の所定のアドレスに書き込む。
ブロック書き込み2状態(ステップ204)において、バッファ制御部11は、書込ブロックバッファ13A内にブロック管理情報として保持されているパケットデータ継続フラグの値を「0」に初期化し、書込ブロックバッファ13Aに保持されたブロックデータを、メモリ部12内の所定のアドレスに書き込む。
次に、図10を参照して、前述した図9のブロック書き込み1状態(ステップ203)およびブロック書き込み2状態(ステップ204)において、書込ブロックバッファ13A内のブロックデータを、ブロックデータ単位で、メモリ部12内の対応する区画へ書き込むブロック書込動作について説明する。図10は、第3の実施の形態にかかるブロック書込動作を示す状態遷移図である。
書込区画識別子は、前記キューごと設けられて、当該キューと対応する前記パケットデータを書き込む区画を特定するための識別子である。
書込区画内位置情報は、前記キューごと設けられて、当該キューの書込区画識別子で特定される区画内における書込開始ブロック位置を示す情報である。
アドレスは、書込区画内位置情報と対応する記憶場所を示す、メモリ部12におけるアドレス値である。
変数Bは、区画内に設けられたブロックの全ブロック数である。
変数Kは、ブロック内の記憶領域の大きさを示すバイト数である。
区画連結位置は、区画に対するパケットデータの書き込み処理中に、当該区画に対して新たな区画を連結をするための区画連結信号を出力するタイミングを特定するための、区画内における書込位置情報である。
変数Mは、メモリ部12に設けられた区画の全区画数であり、書込区画識別子の最大値に相当する。
パケットバッファ装置10は、電源投入後、パケットの入力を開始する前に、初期化状態(ステップ210)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
入力待ち状態(ステップ211)において、パケットとキュー入力指示情報の入力があった時点で、書込位置情報取得状態(ステップ212)に遷移する。前記入力がない間、バッファ制御部11は、他の状態に遷移せずに、パケットの入力を待ち受ける入力待ち状態(ステップ211)に留まる。
書込位置情報取得状態(ステップ212)において、バッファ制御部11は、書込位置情報保持部21に対して、入力されたキュー入力指示情報に含まれるキュー識別子の値を出力し、パケットを蓄積するキューの、書込区画識別子(区画単位)と書込区画内位置情報(ブロック単位)の値を書込位置情報保持部21から受け取って、アドレス算出状態(ステップ213)に遷移する。
アドレス算出状態(ステップ213)において、バッファ制御部11は、書込区画識別子と書込区画内位置情報との値に基づいて、パケットデータをワード単位で書き込むときのメモリのアドレスを算出する。本実施の形態では、アドレス=書込区画識別子値×B×K+書込区画内位置情報値×K、で算出する。前記算出後、バッファ制御部11は、ブロックデータ書き込み状態(ステップ214)に遷移する。
ブロックデータ書き込み状態(ステップ214)において、バッファ制御部11は、算出されたアドレスと、書込ブロックバッファ13A内の1ブロック分のデータを、メモリ部12に出力する。
これにより、メモリ部12では、前記アドレスのメモリセルに1ブロックデータが保持される。前記出力後、以下の条件に応じて、書込区画内位置更新状態(ステップ215)、あるいは、連結区画情報取得状態(ステップ216)のいずれかに一方に遷移する。
なお、書込区画内位置情報は、書き込みを行う区画内のワードの番号にあたる。実施例では、区画先頭のブロックの番号を0としており、区画内のワード数はBなので、区画最後のワードの番号はB−1になる。また、書込区画内位置が未満了とは、書込区画内位置情報値が区画最後のブロックより手前(区画先頭側にある)ということであり、書込区画内位置情報値<B−1が、前記条件を表す式となる。
なお、区画先頭のワードの位置における書込区画内位置情報値を0と規定したとき、区画最後のブロックの位置における書込画内位置情報値はB−1となる。区画内のワード数はBであり、書込区画内位置情報値が区画内のワードを指す場合には、書込区画内位置情報値がB以上となることや負の値をとることは発生しない。
書込区画内位置更新状態(ステップ215)において、バッファ制御部11は、書込区画内位置を書き込みを終えた位置から次の位置に更新する。本実施の形態では、書込区画内位置情報の値を+1する。この後、書込位置情報更新状態(ステップ218)に遷移する。
連結区画情報取得状態(ステップ216)において、バッファ制御部11は、連結区画情報保持部23に対して、書込区画識別子の値を出力し、連結区画情報保持部23から、書き込み中の区画に連結されている区画を特定する連結区画識別子の値を入力する。その後、書込区画情報更新状態(ステップ217)へ遷移する。なお、本実施の形態では、前記連結区画識別子値としてMを入力した場合、連結されている区画がないことを意味する。
書込区画情報更新状態(ステップ217)において、バッファ制御部11は、書込区画識別子の値を連結区画識別子の値に更新する。併せて、書込区画内位置の値を初期化する。本実施の形態では書込区画内位置の値を0に更新する。すなわち、書き込みを行う位置を、連結された区画の先頭位置に変更する。その後、書込位置情報更新状態(ステップ218)に遷移する。
書込位置情報更新状態(ステップ218)において、バッファ制御部11は、入力されたキュー入力指示情報に含まれるキュー識別子の値と、更新された書込区画識別子と書込区画内位置情報の値とを、書込位置情報保持部21に出力し、書込位置情報保持部21が保持している値を更新する。すなわち、パケットデータのメモリ部12への書き込みによって、書込区画識別子と書込区画内位置情報が更新されるが、これらの値を前記パケットデータの書き込みを完了した時点で、書込位置情報保持部21での保持値に反映させ、入力待ち状態(ステップ211)に遷移する。
次に、図11参照して、本実施の形態にかかるパケットバッファ装置10において、キュー出力指示情報の入力に応じて、指定されたキューのパケットデータを、メモリ部12内の対応する区画から、ブロック単位で読み出して読出ブロックバッファ14Aへ格納した後、読出ブロックバッファ14Aから該当するパケットデータを読み出す際の読出動作について説明する。図11は、第3の実施の形態にかかる読出動作を示す状態遷移図である。なお、読出動作のうち、ブロック読出状態(ステップ223)におけるブロック読出動作の詳細については、図12を参照して後述する。
データ保持有無は、読出ブロックバッファ14Aでのデータ保持あり/なしを示す変数である。
変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタである。
変数Pは、1個のブロックデータ内に含みうるパケット数の最大値である。
パケット終端位置は、各パケットデータの末尾バイトの位置を示す変数であり、1個のブロックデータ内のパケットデータ領域の先頭バイトからのバイト数で表現される。
取得位置は、パケットデータを1バイトずつ読出ブロックバッファ14A内のパケットデータ領域から取得するときの位置を指定する変数(バイトアドレス)である。
パケットデータ継続フラグは、パケットデータパケットデータ領域を使い切っているか否かを示す変数である。
パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態(ステップ220)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
バッファ制御部11は、初期化状態(ステップ220)において、初期化が完了した時点で、キュー出力指示情報の入力を待つ、入力待ち状態(ステップ221)に遷移する。
入力待ち状態(ステップ221)において、バッファ制御部11は、キュー出力指示情報の入力があるまで、他の状態に遷移せずに、キュー出力指示情報の入力を待ち受ける入力待ち状態(ステップ221)に留まる。
また、入力待ち状態(ステップ221)において、キュー出力指示情報の入力があった時点で、前記データ保持有無がデータ保持ありを示す場合、すなわち「入力あり and データ保持あり」の場合、バッファ制御部11は、データ取得状態(ステップ222)に遷移する。
データ取得状態(ステップ222)において、バッファ制御部11は、読出ブロックバッファ14Aから、取得位置が示す位置から、パケットデータを1バイトずつ取得して出力し、併せて、前記取得位置を1バイトずつ後ろに移動させる。なお、パケットデータが1バイト単位で出力するのではなく、予め定められたバイト数単位で出力する場合には、前記バイト数単位で格納と格納位置の移動を行う。
この際、前記パケット終了は、読出ブロックバッファ14Aに格納されたパケット終端位置#iが示す位置に前記取得位置が達したこと、すなわち、取得中のパケットデータの末尾バイトまで取得を終えたことを条件として判定する。なお、変数iは、読出ブロックバッファ14Aに含まれるP個のパケット終端位置のうち、取得対象のパケットに対するパケット終端位置を特定する変数としても用いられる。
一方、前記残データありは、前記取得位置がパケットデータ領域の最終バイト位置に達していないことであり、残データなしの条件は、前記残データありの条件を満たさないことを条件として判定する。
一方、前記取得位置がパケットデータ領域の最終バイト位置に達していない場合は、バッファ制御部11は、変数iの値に「1」を加算する。
また、前記以外、すなわち、前記パケット終端位置#iの値が「0」以外、かつ、i≦Pの場合、バッファ制御部11は、データ保持有無の値を保持ありと設定する。
ブロック読み出し状態(ステップ223)において、バッファ制御部11は、メモリ部12の所定アドレスから1個のブロックデータを読み出して、読出ブロックバッファ14Aに前記ブロックデータを格納する。また、バッファ制御部11は、前記取得位置の値を、読出ブロックバッファ14A内のパケットデータ領域の先頭位置を示す値に初期化するとともに、前記データ保持有無の値を保持ありに初期化し、さらに、変数iの値を「1」に初期化する。
次に、図12を参照して、前述した図11のブロック読み出し状態(ステップ223)において、メモリ部12内の対応する区画から、ブロックデータを読み出して、読出ブロックバッファ14Aへ格納するブロック読出動作について説明する。図12は、第3の実施の形態にかかるブロック読出動作を示す状態遷移図である。
読出区画識別子は、前記キューごと設けられて、当該キューと対応する前記パケットデータを読み出す区画を特定するための識別子である。
読出区画内位置情報は、前記キューごと設けられて、当該キューの読出区画識別子で特定される区画内における読出開始ブロック位置を示す情報である。
アドレスは、読出区画内位置情報と対応する記憶場所を示す、メモリ部12におけるアドレス値である。
変数Kは、ブロック内の記憶領域の大きさを示すバイト数である。
連結区画識別子は、前記区画ごと設けられて、当該区画に連結された区画を特定するための識別子である。
パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態(ステップ230)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
バッファ制御部11は、初期化状態(ステップ230)において、初期化が完了した時点で、パケットとキュー入力指示情報の入力を待つ、入力待ち状態(ステップ231)に遷移する。
入力待ち状態(ステップ231)において、バッファ制御部11は、キュー出力指示情報の入力があった時点で、読出位置情報取得状態(ステップ232)に遷移する。前記入力がない間は、他の状態に遷移せずに、キュー出力指示情報の入力を待ち受ける入力待ち状態(ステップ231)に留まる。
読出位置情報取得状態(ステップ232)において、バッファ制御部11は、読出位置情報保持部22に対して、入力されたキュー出力指示情報に含まれるキュー識別子の値を出力し、パケットを蓄積するキューの、読出区画識別子と読出区画内位置情報の値を読出位置情報保持部22から受け取って、アドレス算出状態(ステップ233)に遷移する。
アドレス算出状態(ステップ233)では、読出区画識別子と読出位置情報との値に基づいて、パケットのデータをワード単位で書き込むときのメモリのアドレスを算出する。本実施の形態では、アドレス=読出区画識別子値×B×K+読出位置情報値×K、で算出する。前記算出後、ブロックデータ読み出し状態(ステップ234)に遷移する。
ブロックデータ読み出し状態(ステップ234)において、バッファ制御部11は、算出されたアドレスをメモリ部12に出力し、前記アドレスに対応するメモリ部12内のメモリセルに保持された1ブロック分のデータをメモリ部12から読み出す。前記読み出し後、以下の条件に応じて、読出区画内位置更新状態(ステップ235)、あるいは、連結区画情報取得状態(ステップ236)のいずれかに一方に遷移する。
読出区画内位置更新状態(ステップ235)において、バッファ制御部11は、読出区画内位置を読み出しを終えた位置から次の位置に更新する。本実施の形態で読出区画内位置の値を+1する。その後、読出位置情報更新状態(ステップ237)に遷移する。
連結区画情報取得状態(ステップ236)において、バッファ制御部11は、連結区画情報保持部23に対して、読出区画識別子の値を出力し、連結区画情報保持部23から、読み出し中の区画に連結されている区画を特定する連結区画識別子の値を受け取って、読出区画情報更新状態(ステップ238)に遷移する。
また、連結区画情報取得状態(ステップ236)において、バッファ制御部11は、区画解放信号を生成する。前記区画解放信号を契機として、後述する区画解放に関わる状態遷移の処理により区画を空き区画のリストに戻す区画解放が行われる。
読出区画情報更新状態(ステップ238)において、バッファ制御部11は、読出区画識別子の値を連結区画識別子の値に更新する。併せて、読出区画内位置の値を初期化する。本実施の形態では読出区画内位置の値を0に更新する。すなわち、読み出しを行う位置を、連結された区画の先頭位置に変更する。この後、読出位置情報更新状態(ステップ237)へ遷移する。
読出位置情報更新状態(ステップ237)において、バッファ制御部11は、バッファ制御部11は、読出位置情報保持部22に対して、入力されたキュー出力指示情報に含まれるキュー識別子の値と、更新された読出区画識別子と読出区画内位置情報の値とを、読出位置情報保持部22に出力し、読出位置情報保持部22が保持している値を更新する。すなわち、ブロックデータをメモリ部12から読み出すことによって、読出区画識別子と読出区画内位置情報が更新されるが、これらの値を前記ブロックデータの読み出しを完了した時点で、読出位置情報保持部22での保持値に反映させ、入力待ち状態(ステップ231)に遷移する。
次に、図13を参照して、本実施の形態にかかるパケットバッファ装置10の区画連結動作について説明する。図13は、区画連結動作を示す状態遷移図である。前述した図10の書込区画内位置更新状態(ステップ215)において、区画連結信号が生成された場合、バッファ制御部11は、図13の状態遷移に基づいて、区画連結動作を実行する。
パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態(ステップ240)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
バッファ制御部11は、初期化状態(ステップ240)において、初期化が完了した時点で、区画連結信号を待つ、区画連結信号待ち状態(ステップ241)に遷移する。
区画連結信号待ち状態(ステップ241)において、バッファ制御部11は、区画連結信号があった時点で、空き区画情報取得状態(ステップ242)に遷移する。前記信号がない間は遷移しない。なお、区画連結信号があった時点での、バッファ制御部11のパケットデータ書込の対象となっている区画を特定する書込区画識別子の値を保持しておく。
空き区画情報取得状態(ステップ242)において、バッファ制御部11は、空き区画情報保持部24から、空き区画連結開始識別子の値を入力する。前記入力後、以下の条件に応じて、未連結状態(ステップ243)、あるいは、空き区画取得状態(ステップ244)のいずれかに一方に遷移する。
一方、上記空き区画取得状態(ステップ244)への遷移条件は空き区画ありの場合であり、本実施の形態では、上記取得した空き区画連結開始識別子の値が有効な区画識別子の範囲(0からM−1までの整数)にある場合である。
空き区画取得状態(ステップ244)において、バッファ制御部11は、連結区画情報保持部23に対して、空き区画情報取得状態(ステップ242)で空き区画情報保持部24から取得した空き区画連結開始識別子の値を区画識別子として出力し、連結区画情報保持部23から、前記区画識別子に連結されている区画を特定する連結区画識別子の値を入力する。さらに、空き区画情報保持部24に対して、空き区画連結開始識別子の値を、前記入力した連結区画識別子の値に更新する。
連結更新状態(ステップ245)において、バッファ制御部11は、連結区画情報保持部23に対して、区画連結信号があった時点で保持した書込区画識別子の値と、空き区画情報取得状態(ステップ242)で空き区画情報保持部24から取得した空き区画連結開始識別子の値とを出力することで、前記書込区画の連結区画識別子の値を、前記空き区画連結開始識別子の値へと書き換える。
これにより、書込が満了を向える(書込区画内位置が満了する予定の)区画に、空き区画のリストから取り外した1つの区画を連結したことになる。その後、区画連結信号待ち状態(ステップ241)に遷移する。
未連結状態(ステップ243)において、バッファ制御部11は、連結区画情報保持部23に対して、区画連結信号があった時点で保持した書込区画識別子の値と、連結されている区画がないことを意味する連結区画識別子の値を出力し、前記書込区画の連結区画識別子の値を、連結されている区画がないことを意味する連結区画識別子の値へと書き換え、区画連結信号待ち状態(ステップ241)に遷移する。本実施の形態では、前記連結されている区画がないことを意味する連結区画識別子の値はMである。
次に、図14を参照して、本実施の形態にかかるパケットバッファ装置10の区画解放動作について説明する。図14は、区画解放動作を示す状態遷移図である。前述した図12の連結区画情報取得状態(ステップ236)において、区画解放信号が生成された場合、バッファ制御部11は、図14の状態遷移に基づいて、区画解放動作を実行する。
パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態(ステップ250)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
バッファ制御部11は、初期化状態(ステップ250)において、初期化が完了した時点で、区画解放信号を待つ、区画解放信号待ち状態(ステップ251)に遷移する。
区画解放信号待ち状態(ステップ251)において、区画解放信号があった時点で、空き区画情報取得状態(ステップ252)に遷移する。前記信号がない間は遷移しない。なお、区画解放信号があった時点での、バッファ制御部11のパケットデータ読出の対象となっている区画を特定する読出区画識別子の値を保持しておく。
空き区画情報取得状態(ステップ252)において、バッファ制御部11は、空き区画情報保持部24から、空き区画連結終了識別子の値を受け取って、空き区画返却状態(ステップ253)に遷移する。
空き区画返却状態(ステップ253)において、バッファ制御部11は、連結区画情報保持部23に対して、区画解放信号があった時点で保持した読出区画識別子の値と、連結されている区画がないことを意味する連結区画識別子の値を出力し、前記読出区画識別子の値によって特定される区画の連結区画識別子の値を、連結されている区画がないことを意味する連結区画識別子の値へと書き換える。本実施の形態では、前記連結されている区画がないことを意味する連結区画識別子の値はMである。さらに、連結区画情報保持部23に対して、空き区画情報取得状態(ステップ252)で入力した空き区画連結終了識別子の値と、区画解放信号があった時点で保持した読出区画識別子の値とを出力し、前記空き区画連結終了識別子によって特定される
空き区画更新状態(ステップ254)では、バッファ制御部11は、空き区画情報保持部24に対して、空き区画連結終了識別子の値を、区画解放信号があった時点で保持した読出区画識別子の値に更新する。ただし、空き区画情報取得状態(ステップ252)で入力した空き区画連結終了識別子の値が、連結されている区画がないことを意味する連結区画識別子の値であった場合は、前記に加えて、空き区画情報保持部24に対して、空き区画連結開始識別子の値を、区画解放信号があった時点で保持した読出区画識別子の値に更新する。その後、区画解放信号待ち状態(ステップ251)に遷移する。
このように、本実施の形態は、第1の実施の形態において、複数個のブロックで区画を構成し、入力された各パケットのパケットデータを、指定されたキューと対応する区画内のブロックで蓄積するようにしたものである。
また、本実施の形態は、1つの区画内ではメモリにアクセスするときのアドレスを連続させることができ、従来技術を適用したパケットバッファ装置と同じく、メモリに対するバーストアクセスを可能とする。これにより、1つのキューからの出力が連続して行われるような用途で使用される場合、メモリからの読み出しを高速に行うことができるため、キューからのパケット取り出しが速い。
各区画の大きさをmとし、入力されたパケットが連続して蓄積されるときの最大蓄積データ量(=バースト長)をLbとし、キューがデータ量Lbを蓄積するとき、Lb/m個の区画が使用される。
なお、Lb,Lp,Rs,Pcの与えられ方によっては、実用的な範囲のmが存在しないこともあるが、この場合は、本発明が有効ではなく従来構成を採用した方がよいと判断できる。
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解しうる様々な変更をすることができる。また、各実施形態については、矛盾しない範囲で任意に組み合わせて実施することができる。
Claims (5)
- 固定長の記憶領域からなるブロックを複数有し、これらブロックごとにデータの書き込みおよび読み出しを行うメモリ部と、
少なくとも前記ブロック分のデータを保持する書込ブロックバッファと、
少なくとも前記ブロック分のデータを保持する読出ブロックバッファと、
入力された可変長のパケットのパケットデータを、前記書込ブロックバッファへ順次格納するとともに、当該書込ブロックバッファへ格納した各パケットデータの終端位置を示すパケット境界情報を含むブロック管理情報を当該書込ブロックバッファへ格納し、当該書込ブロックバッファの空き容量がなくなった場合に、当該書込ブロックバッファに格納されているデータを前記メモリ部へ書き込んだ後、残りのパケットデータを当該書込ブロックバッファへ格納し、入力された出力指示に応じて、前記メモリ部から前記データを読み出して前記読出ブロックバッファへ格納し、当該データに含まれる前記ブロック管理情報の前記パケット境界情報に基づいて、当該データに含まれる各パケットデータを読み出して出力するパケット制御部と
を備えることを特徴とするパケットバッファ装置。 - 請求項1に記載のパケットバッファ装置において、
前記ブロックは、複数ビットの固定長からなるワードを単位として複数個に分割されてなり、
前記パケット制御部は、
前記書込ブロックバッファに前記ブロック管理情報を格納する際、前記書込ブロックバッファ内の先頭ワードから前記ブロック管理情報を格納し、
前記書込ブロックバッファに前記パケットデータを格納する際、前記ブロック管理情報を格納した次のワードから順に格納用のワードを選択し、該選択したワードの先頭バイトから順に当該パケットデータの各バイトを格納するとともに、当該パケットデータの末尾バイトを格納したバイトの次のバイトから所定のパケット終端パタンを格納し、
前記書込ブロックバッファに前記ブロック管理情報を格納する際、前記パケット境界情報に代えて、前記各ワードにおける前記パケットデータの末尾バイトの存在有無を示す境界判定ビット列を含む前記ブロック管理情報を格納する
ことを特徴とするパケットバッファ装置。 - 請求項2に記載のパケットバッファ装置において、
前記パケット制御部は、
前記メモリ部内の前記ブロックから前記パケットデータを読み出す際、最初に当該ブロックの先頭ワードから前記ブロック管理情報を取得して、このブロック管理情報の前記境界判定ビット列に基づき、当該ブロックにおけるパケットデータの末尾バイトの存在有無を判定し、当該末尾バイトが存在しない場合には、前記メモリ部に対して次のブロックの読出要求を行う
ことを特徴とするパケットバッファ装置。 - 請求項1〜請求項3のいずれか1つに記載のパケットバッファ装置において、
前記バッファ制御部は、
前記メモリ部内の複数個の前記ブロックで構成された区画のうち、入力されたキュー入力指示情報で指定されたキューと対応する区画に対して、前記パケットデータを書き込むことにより、前記パケットデータを前記キュー入力指示情報で指定されたキューに蓄積し、前記区画のうち、入力されたキュー出力指示情報で指定されたキューと対応する区画から、前記パケットデータの読み出すことにより、前記パケットデータを前記キュー入力指示情報で指定されたキューから取り出し、
前記区画への前記パケットデータの書き込みが満了した場合、当該区画に対して空き区画を連結区画として連結した後、当該空き区画に対する前記パケットデータの書き込みを継続し、前記区画からの前記パケットデータの読み出しが満了した場合、当該区画を空き区画として解放するとともに、当該区画に連結されている連結区画からの前記パケットデータの読み出しを継続する
ことを特徴とするパケットバッファ装置。 - 入力されたパケットをメモリ部に格納するとともに、出力指示に応じて該メモリ部からパケットを取り出して出力するパケットバッファ装置で用いられるパケットバッファ制御方法であって、
前記パケットバッファ装置が、
固定長の記憶領域からなるブロックを複数有し、これらブロックごとにデータの書き込みおよび読み出しを行うメモリ部と、
少なくとも前記ブロック分のデータを保持する書込ブロックバッファと、
少なくとも前記ブロック分のデータを保持する読出ブロックバッファと、
パケット制御部とを備え、
前記パケット制御部が、
入力された可変長のパケットのパケットデータを、前記書込ブロックバッファへ順次格納するとともに、当該書込ブロックバッファへ格納した各パケットデータの終端位置を示すパケット境界情報を含むブロック管理情報を当該書込ブロックバッファへ格納し、当該書込ブロックバッファの空き容量がなくなった場合に、当該書込ブロックバッファに格納されているデータを前記メモリ部へ書き込んだ後、残りのパケットデータを当該書込ブロックバッファへ格納するステップと、
入力された出力指示に応じて、前記メモリ部から前記データを読み出して前記読出ブロックバッファへ格納し、当該データに含まれる前記ブロック管理情報の前記パケット境界情報に基づいて、当該データに含まれる各パケットデータを読み出して出力するステップとを実行する
ことを特徴とするパケットバッファ制御方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011285526A JP5748288B2 (ja) | 2011-12-27 | 2011-12-27 | パケットバッファ装置およびパケットバッファ制御方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011285526A JP5748288B2 (ja) | 2011-12-27 | 2011-12-27 | パケットバッファ装置およびパケットバッファ制御方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2013135383A JP2013135383A (ja) | 2013-07-08 |
JP5748288B2 true JP5748288B2 (ja) | 2015-07-15 |
Family
ID=48911791
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011285526A Expired - Fee Related JP5748288B2 (ja) | 2011-12-27 | 2011-12-27 | パケットバッファ装置およびパケットバッファ制御方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5748288B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115190089B (zh) * | 2022-05-26 | 2024-03-22 | 中科驭数(北京)科技有限公司 | 一种报文存储方法、装置、设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2791037B2 (ja) * | 1988-05-25 | 1998-08-27 | 株式会社日立製作所 | パケットデータ転送制御装置 |
JP3085391B2 (ja) * | 1989-06-19 | 2000-09-04 | 株式会社日立製作所 | 通信装置 |
JP3503725B2 (ja) * | 1996-06-28 | 2004-03-08 | ソニー株式会社 | 情報処理装置および方法 |
JP2002084316A (ja) * | 2000-09-08 | 2002-03-22 | Toyo Commun Equip Co Ltd | 可変長パケット書き込み及び読み出し回路 |
WO2004095286A2 (en) * | 2003-04-22 | 2004-11-04 | Agere Systems Inc. | Method and apparatus for shared multi-bank memory in a packet switching system |
-
2011
- 2011-12-27 JP JP2011285526A patent/JP5748288B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2013135383A (ja) | 2013-07-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110806986B (zh) | 提高网络芯片报文存储效率的方法、设备及存储介质 | |
US8325603B2 (en) | Method and apparatus for dequeuing data | |
US10205673B2 (en) | Data caching method and device, and storage medium | |
US9304939B2 (en) | Method and multi-core communication processor for replacing data in system cache | |
JP2013507022A (ja) | フローアウェアネットワークノード内でデータパケットを処理するための方法 | |
WO2020199760A1 (zh) | 数据存储方法、存储器和服务器 | |
WO2011015055A1 (zh) | 一种存储管理的方法和系统 | |
US7000073B2 (en) | Buffer controller and management method thereof | |
JP5332430B2 (ja) | 共有メモリシステム | |
JP5748288B2 (ja) | パケットバッファ装置およびパケットバッファ制御方法 | |
US8812787B2 (en) | Router and many-core system | |
CN116955247B (zh) | 一种缓存描述符管理装置及其方法、介质、芯片 | |
US8363653B2 (en) | Packet forwarding method and device | |
JP5748287B2 (ja) | パケットバッファ装置およびパケットバッファ制御方法 | |
US7620770B2 (en) | Device and method for storing and processing data units | |
US20160085683A1 (en) | Data receiving device and data receiving method | |
CN114401072B (zh) | 一种基于hinoc协议的拆帧重排序队列的动态缓存控制方法及系统 | |
CN102571535B (zh) | 一种数据延迟装置、方法及通信系统 | |
CN114610231A (zh) | 大位宽数据总线分段存储的控制方法、系统、设备及介质 | |
US9128785B2 (en) | System and method for efficient shared buffer management | |
US20140297972A1 (en) | Memory control device and memory control method | |
US7836231B2 (en) | Buffer control method and device thereof | |
JP4252379B2 (ja) | 可変長フレームバッファ装置 | |
KR102335798B1 (ko) | 다수의 클라이언트 데이터를 처리하는 저장 장치 및 방법 | |
US9544229B2 (en) | Packet processing apparatus and packet processing method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20140307 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20141106 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20141125 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20150126 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20150507 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20150508 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5748288 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |