説明

バッファメモリ装置、及び、バッファリング方法

【課題】バッファメモリを用いた装置において、ソフトエラーの発生によって使用されなくなったバッファメモリの領域を再度使用することを目的とする。
【解決手段】バッファ内の領域にデータを記憶し、当該バッファ内の領域からデータを読み出すバッファメモリ装置は、データを前記バッファ内の空き領域に書き込み、前記バッファ内の領域からのデータの読み出しに成功した場合は、当該領域を空き領域とし、読み出しに失敗した場合は、当該領域を廃棄領域とし、データが書き込まれてから所定の時間が経過した廃棄領域を検出し、検出した廃棄領域を空き領域とする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトエラーにより使用できなくなったバッファを復旧する技術に関する。
【背景技術】
【0002】
バッファメモリを備える装置、例えば、パケットを転送するスイッチ等の通信装置は、受信したパケットをバッファメモリに一旦蓄積し、QoS(Quality of Service)等を考慮した順序でパケットをバッファメモリから読み出して送出している。
【0003】
このような通信装置においては、不具合が発生すると通信に少なからず影響を与えることから、不具合を容易に判定する技術が提案されている。
【0004】
例えば、バッファメモリを複数に分割して線形リスト構造で管理する通信装置において、バッファメモリの不具合の一つであるオーバーフローを容易に判定する技術が提案されている(特許文献1等参照)。
【0005】
また、通信装置においては、不具合が発生してもできる限り処理を続行する必要があるため、バッファメモリの領域からデータを読み出そうとしたときに何らかの理由でエラーとなった場合には、その領域を廃棄し、その他の領域を用いて処理を続行する。
【0006】
ここで、近年、半導体デバイスの微細化、高集積化、及び、低電圧化等が進み、半導体デバイスにソフトエラーが発生する確率が高くなってきている。ソフトエラーとは、ハードウェアに異常が見られない一過性の不良をいう。例えば、メモリに記憶されているデータが書き換えられていたようなエラーであって、そのメモリ素子には異常がなく、データを再度書き込めば正常に動作するようなエラーである。
【0007】
このようなソフトエラーは、いつ起こるか分からず、また、発生頻度もそう多くはない。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2004−280333号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
しかし、上述のような通信装置では、バッファメモリの領域からデータを読出す際に発生したエラーがソフトエラーによるものである場合は、廃棄された領域に問題が無いにもかかわらず使用されないことになる。
【0010】
そこで、本発明は、バッファメモリを用いた装置において、ソフトエラーの発生によって使用されなくなったバッファメモリの領域を再度使用することを目的とする。
【課題を解決するための手段】
【0011】
本発明の1形態に係るバッファメモリ装置は、バッファ内の領域にデータを記憶させ、当該バッファ内の領域からデータを読み出すバッファメモリ装置であって、データを前記バッファ内の空き領域に書き込む書込手段と、前記バッファ内の領域からデータを読み出す読出手段であって、読み出しに成功した場合は、当該領域を空き領域とし、読み出しに失敗した場合は、当該領域を廃棄領域とする読出手段と、前記書込手段によってデータが書き込まれてから所定の時間が経過した前記廃棄領域を検出し、検出した廃棄領域を空き領域とする領域復旧手段と、を有する。
【発明の効果】
【0012】
上記構成のバッファメモリ装置は、ソフトエラーの発生によって使用されなくなったバッファメモリの領域を再度使用することができる。
【図面の簡単な説明】
【0013】
【図1】パケット転送装置の機能的構成の例を示すブロック図である。
【図2】パケット転送装置においてバッファリング処理を行う機能部の詳細を示す図である。
【図3】パケットバッファ及びテーブル等の関連を示す図である。
【図4】パケットバッファ及びテーブルの使用例を示す図である。
【図5】廃棄要素バッファの判定方法を示す図である。
【図6】パケットの書込み処理を示すフローチャートである。
【図7】パケットの書込み処理のタイムチャート(1)である。
【図8】パケットの書込み処理のタイムチャート(2)である。
【図9】パケットの書込み処理のタイムチャートである。
【図10】パケットの読出し処理を示すフローチャートである。
【図11】パケットの読出し処理のタイムチャート(1)である。
【図12】パケットの読出し処理のタイムチャート(2)である。
【図13】復旧処理を示すフローチャートである。
【図14】復旧処理のタイムチャートである。
【図15】パケットの書込み処理におけるパケットバッファ及びテーブルの遷移を示す図(1)である。
【図16】パケットの書込み処理におけるパケットバッファ及びテーブルの遷移を示す図(2)である。
【図17】パケットの書込み処理におけるパケットバッファ及びテーブルの遷移を示す図(3)である。
【図18】パケットの書込み処理におけるパケットバッファ及びテーブルの遷移を示す図(4)である。
【図19】パケットの読出し処理におけるパケットバッファ及びテーブルの遷移を示す図(1)である。
【図20】パケットの読出し処理におけるパケットバッファ及びテーブルの遷移を示す図(2)である。
【図21】廃棄要素バッファが発生した後のパケットの読出し処理におけるパケットバッファ及びテーブルの遷移を示す図である。
【図22】廃棄要素バッファが発生した後のパケットの書込み処理におけるパケットバッファ及びテーブルの遷移を示す図である。
【図23】復旧処理におけるパケットバッファ及びテーブルの遷移を示す図である。
【発明を実施するための形態】
【0014】
<実施形態>
実施形態のバッファメモリ装置は、バッファメモリの領域に記憶されたデータが読み出されるまでの通常の時間を推定し、その推定時間を超えてもデータが読み出されていない領域を空き領域とするものである。すなわち、通常は読み出されているはずのデータが未だ読み出されていないので、今後も読み出されることはないであろうと推定して使用するものである。
【0015】
実施形態のバッファメモリ装置は、スイッチ等のパケット転送装置で用いられているバッファメモリ装置であり、バッファメモリを複数の領域(以下、「要素バッファ」という。)に分割し、線形リスト構造で管理している。具体的には、パケットを記憶している要素バッファをつなげたパケットキューと、パケットを記憶していない空き要素バッファをつなげた空キューとの2種類のキューを用いて管理する。尚、パケットキューは、パケットの種類により複数ある。
【0016】
パケットキューの要素バッファは、記憶しているデータが読み出されると空きキューにつながれ再利用される。
【0017】
データ読出しの際、要素バッファを指すアドレスに誤りがある場合はエラーアドレスとして、そのアドレスを廃棄する。要素バッファを指すアドレスが廃棄されると、そのアドレスによるリンクが切れることから、そのリンク以降のキューにつなげられている要素バッファは全て廃棄されることになる。またこの場合、エラーアドレスが指すはずであった要素バッファが不明であることから、どの要素バッファが廃棄されたかを知ることはできない。
【0018】
そこで、実施形態のバッファメモリ装置では、要素バッファにデータが記憶されてからの経過時間を基に、廃棄された要素バッファであるか否かを判断する。
【0019】
しかし、スイッチ等のパケット転送装置では、パケットの受信タイミングと送信タイミングはパケットの種類に依存する。従って、要素バッファにデータが残っている場合に、まだ送信する順番が来ないためにデータ読み出されていないのか、廃棄されていずれのキューにもつながれていないためにデータが読み出されていないのかを判断することは容易ではない。
【0020】
実施形態のバッファメモリ装置は、正常な状態において、要素バッファに記憶されたデータが読み出されるまでの最長の時間を推定し、バッファメモリの領域に記憶されたデータが、推定時間を超えても未だ読み出されていない要素バッファは、廃棄された要素バッファであると判断する。
【0021】
廃棄された要素バッファであると判断された要素バッファを、空き要素バッファとして再び使用することにより、バッファメモリを無駄なく有効に使用することが可能となる。
【0022】
以下、スイッチ等のパケット転送装置で用いられているバッファメモリ装置を例に説明する。
【0023】
<機能>
以下、図1を用いて、パケット転送装置100の機能について説明する。
【0024】
図1は、パケット転送装置100の機能的構成の例を示すブロック図である。
【0025】
パケット転送装置100は、受信したパケットをバッファメモリに蓄積し、QoS等を考慮した順序でパケットをバッファメモリから読み出して送信する。すなわち、スイッチ等が通常有する転送機能を有するが、図1においては、バッファメモリに関係する機能部を中心に記載している。また、図1において、点線矢印はパケットの流れを示す。
【0026】
パケット転送装置100は、受信部110、送信部120、書込部130、帯域制御部140、読出部150、バッファリング管理部160及びパケットバッファ200を有する。
【0027】
受信部110は、パケット20を受信し、書込部130に依頼して、受信したパケットをパケットバッファ200に記憶させる機能を有する。
【0028】
書込部130は、受信部110から受け取ったパケット20をパケットバッファ200に記憶させる機能を有する。パケットバッファ200内のアドレスを、書込部130はバッファリング管理部160から取得する。
【0029】
送信部120は、読出部150から渡されたパケット21を送信する機能を有する。
【0030】
読出部150は、帯域制御部140からの指示により、パケットバッファ200に記憶されているパケット21を読み出して送信部120に渡す機能を有する。パケット21を読み出すパケットバッファ200内のアドレスを、読出部150はバッファリング管理部160から取得する。
【0031】
帯域制御部140は、パケットバッファ200に記憶されているパケットを、どのような順序で送信するかを管理する機能を有する。パケットを送信する順序は、書込部130から渡される情報に基づいて、パケットが属する通信に保障すべき帯域等に応じて帯域制御部140が定める。
【0032】
次に、バッファリング管理部160は、エラー判定部170、時間カウンタ180及び復旧処理部190の3つの機能部と、リンク管理テーブル210、使用中フラグテーブル220、書込時間テーブル230、HEAD/TAILテーブル240、キュー長管理テーブル250及び空キュー管理テーブル260の6つのテーブルを有する。
【0033】
バッファリング管理部160は、これらの3つの機能部と6つのテーブルを用いて、パケットバッファ200の要素バッファを管理する機能を有する。バッファリング管理部160がパケットバッファ200を管理する方法については、<パケットバッファの使用方法>の項で説明する。
【0034】
エラー判定部170は、要素バッファを指すアドレスに誤りがあるか否かを判定する機能を有する。具体的には、要素バッファからパケットを読み出す際のアドレスが誤っていないか否かを判定する。このアドレスは、リンク管理テーブル210に登録されているアドレスである。実施形態では、例えば、ECC(Error Correcting Code) Multi bit errorが発生した場合にエラーアドレスであると判定するものとする。従って、リンク管理テーブル210には、登録されているアドレス毎に誤り訂正符号が付加されているものとする。
【0035】
時間カウンタ180は、要素バッファが、廃棄された要素バッファ(以下、「廃棄要素バッファ」という。)であるか否かを判断するために用いるタイマである。時間カウンタ180がカウント値を更新する周期、及び、廃棄要素バッファであるか否かを判断する方法は、<廃棄要素バッファの判定方法>の項で説明する。
【0036】
復旧処理部190は、パケットバッファ200から廃棄要素バッファを見つけ出して、空き要素バッファとする処理(以下、「復旧処理」という。)を実行する機能を有する。
【0037】
リンク管理テーブル210は、パケットバッファ200の要素バッファのキューを構築する機能を有する。
【0038】
使用中フラグテーブル220は、パケットバッファ200の各要素バッファの使用状態を記憶しておく機能を有する。
【0039】
書込時間テーブル230は、パケットバッファ200の各要素バッファにパケットが書き込まれた時間を記憶しておく機能を有する。具体的には、書き込まれたときに、時間カウンタ180が示しているカウント値を記憶しておく。
【0040】
HEAD/TAILテーブル240は、複数のパケットキューそれぞれの、先頭の要素バッファのアドレス(以下、「HEADアドレス」という。)と末尾の要素バッファのアドレス(以下、「TAILアドレス」という。)とを記憶しておく機能を有する。キューに新たな要素バッファがつながった場合等には、HEADアドレス又はTAILアドレスが書き換わることになる。
【0041】
キュー長管理テーブル250は、HEAD/TAILテーブル240で管理している各パケットキューにつながっている要素バッファの数を記憶しておく機能を有する。
【0042】
空キュー管理テーブル260は、空き要素バッファをつなげた空キューの先頭の空き要素バッファのアドレス(以下、「TOPアドレス」という。)と末尾の空き要素バッファのアドレス(以下、「ENDアドレス」という。)とを記憶しておく機能を有する。
【0043】
ここで、図2に、図1に示したパケット転送装置100の機能部のうち、バッファリング処理を行う機能部の詳細を示す。
【0044】
テンポラリバッファ1は、受信するパケット長を測定するまでの待ち合わせ用のバッファである。ユーザ識別2は、受信したパケットのユーザを識別する機能を有し、受信したパケットをキューイングするパケットキューの番号を決定する。尚、図2では、Etherパケットを記載しており、「SA」又は「VID」等を基にキュー番号を決定する。パケット長測定3は、受信したパケットの長さを測定し、EnQ処理部4にパケットの格納を指示する。図1の受信部110は、テンポラリバッファ1、ユーザ識別2、及び、パケット長測定3等によって実現される。
【0045】
EnQ処理部4は、パケット長測定3からの指示により、テンポラリバッファ1からパケットを受信してパケットバッファメモリ7に格納する。図1の書込部130は、EnQ処理部4等によって実現される。また、図1のパケットバッファ200は、パケットバッファメモリ7に該当する。
【0046】
ReservedTopレジスタ5は、空き領域を管理する空キューの先頭の要素バッファのアドレスを示し、ReservedENDレジスタ6は、空き領域を管理する空キューの末尾の要素バッファのアドレスを示す。図1の空キュー管理テーブル260は、ReservedTopレジスタ5及びReservedENDレジスタ6に該当する。
【0047】
リンク管理メモリ8は、図1のリンク管理テーブル210を記憶しておくメモリである。また、キュー長管理メモリ9は、図1のキュー長管理テーブル250を記憶しておき、HEAD/TAILメモリ10は、HEAD/TAILテーブル240を記憶しておくメモリである。
【0048】
DeQ処理部11は、パケットバッファメモリ7からパケットを読み出す。図1の読出部150は、DeQ処理部11によって実現される。
【0049】
帯域制御部12は、ユーザ毎の帯域制御を行う。例えば、トークンバケット方式のシェーパー等が該当する。図1の帯域制御部140は、帯域制御部12によって実現される。
【0050】
アドレス損失復旧処理部13は、パケットバッファメモリ7の使用状況の管理と、損失したアドレスの検出及び復旧を行う。時間カウンタ14は、いわゆるタイマであり、図1の時間カウンタ180に該当する。また、使用中フラグメモリ15は、使用中フラグテーブル220を記憶しておき、書込み時間メモリ16は書込時間テーブル230を記憶しておくメモリである。図1のバッファリング管理部160の処理は、アドレス損失復旧処理部13、EnQ処理部4及びReservedTopレジスタ5等によって実現される。
【0051】
<テーブル>
以下、パケットバッファ200、リンク管理テーブル210、使用中フラグテーブル220、書込時間テーブル230、HEAD/TAILテーブル240、キュー長管理テーブル250及び空キュー管理テーブル260について、図3を用いて説明する。
【0052】
図3は、パケットバッファ200及びテーブル等の関連を示す図である。
【0053】
パケットバッファ200は、所定サイズの領域に分割されている。この分割された1領域が、1要素バッファである。実施形態では、パケットバッファ200は16個の要素バッファで構成されているものとする。以下、それぞれの要素バッファを、要素バッファ[0]〜要素バッファ[15]という。添字の「0」〜「15」をそれぞれの要素バッファの番号という。
【0054】
リンク管理テーブル210は、パケットバッファ200の要素バッファの数と同じ16個の配列を有する。以下、この配列の要素を、リンク管理テーブル[0]〜リンク管理テーブル[15]という。リンク管理テーブル210の配列の要素の番号は、パケットバッファ200の要素バッファの番号と対応している。また、リンク管理テーブル210の各要素には、自要素が対応する要素バッファの次につながっている要素バッファのアドレスが記憶されている。例えば、要素バッファ[0]の次に要素バッファ[1]がつながっているとすると、リンク管理テーブル[0]には、要素バッファ[1]のアドレス「A1」が記憶されている。
【0055】
使用中フラグテーブル220は、パケットバッファ200の要素バッファの数と同じ16個の配列、例えば、ビット配列を有する。以下、この配列の要素を、使用中フラグテーブル[0]〜使用中フラグテーブル[15]という。使用中フラグテーブル220の配列の要素の番号は、パケットバッファ200の要素バッファの番号と対応している。
【0056】
使用中フラグテーブル[0]が「1」の場合は、要素バッファ[0]にパケットが記憶されていることを示す。一方、「0」の場合は、要素バッファ[0]は空領域であることを示す。使用中フラグテーブル[1]〜使用中フラグテーブル[15]も同様である。
【0057】
書込時間テーブル230も、パケットバッファ200の要素バッファの数と同じ16個の配列を有する。以下、この配列の要素を、書込時間テーブル[0]〜書込時間テーブル[15]という。書込時間テーブル230の配列の要素の番号は、パケットバッファ200の要素バッファの番号と対応している。
【0058】
書込時間テーブル230には、対応する要素バッファにパケットが書き込まれた時の、時間カウンタ180の値が記憶されている。例えば、書込時間テーブル[0]が「0」の場合は、要素バッファ[0]にパケットが書き込まれた時に、時間カウンタ180のカウント値が「0」であったことを示している。
【0059】
HEAD/TAILテーブル240は、パケットキューを管理する機能を有し、管理するパケットキューの数分の配列を有する。実施形態では、2つのパケットキューを管理するものとする。以下、この配列の要素を、HEAD/TAILテーブル[0]及びHEAD/TAILテーブル[1]といい、添え字は各要素で管理するキューの番号を示す。
【0060】
また、1つの配列は、HEADアドレスとTAILアドレスとで構成され、それぞれHEAD[0]、TAIL[0]のように言う。HEADアドレスは、キューの先頭の要素バッファのアドレスを記憶し、TAILアドレスは、キューの末尾の要素バッファのアドレスを記憶する。
【0061】
キュー長管理テーブル250は、HEAD/TAILテーブル240で管理するパケットキューの数と同じ2個の配列を有する。以下、この配列の要素を、キュー長管理テーブル[0]及びキュー長管理テーブル[1]という。キュー長管理テーブル250の配列の要素の番号は、HEAD/TAILテーブル240の配列の番号と対応している。
【0062】
空キュー管理テーブル260は、空キューを管理する機能を有し、TOPアドレスとENDアドレスとで構成される。TOPアドレスは、空キューの先頭の要素バッファのアドレスを記憶し、ENDアドレスは、キューの末尾の要素バッファのアドレスを記憶する。
【0063】
<パケットバッファの使用方法>
以下、バッファリング管理部160が、パケットバッファ200を使用する方法について、図4を用いて説明する。
【0064】
図4は、パケットバッファ200及びテーブルの使用例を示す図である。
【0065】
図4では、上部に、パケットバッファ200及びテーブルの内容を示し、下部に、2つのパケットキュー、及び、空キューのイメージを示す。円は、要素バッファを示し、円の内部の数字は、円で示される要素バッファの番号を示す。また、パケットキュー[0]は、HEAD/TAILテーブル[0]で管理されるパケットキューを示し、パケットキュー[1]は、HEAD/TAILテーブル[1]で管理されるパケットキューを示す。空キューは、空キュー管理テーブル260で管理される空キューを示す。図15等においても同様である。
【0066】
パケットキュー[0]には、要素バッファ[0]、[1]、[2]、[5]の4つ要素バッファにパケットが書き込まれ、順番につながっている。
【0067】
この要素バッファの順番は、リンク管理テーブル210によって、次のように管理されている。要素バッファ[0]に後続する要素バッファのアドレスは、リンク管理テーブル[0]に記憶されている「A1」である。「A1」は、要素バッファ[1]のアドレスである為、要素バッファ[0]に後続する要素バッファは要素バッファ[1]である。次に、要素バッファ[1]に後続する要素バッファのアドレスは、リンク管理テーブル[1]に記憶されている「A2」である。従って、要素バッファ[1]に後続する要素バッファは要素バッファ[2]である。このように、キューが構築されている。
【0068】
このパケットキュー[0]の先頭の要素バッファのアドレスと末尾の要素バッファのアドレスとを、HEAD/TAILテーブル240のHEAD/TAILテーブル[0]が記憶している。HEAD[0]及びTAIL[0]は、それぞれ要素バッファ[0]のアドレス「A0」及び要素バッファ[5]のアドレス「A5」を記憶している。キュー長管理テーブル[0]は、つながっている要素バッファの個数「4」を記憶している。
【0069】
また、使用中フラグテーブル[0]、[1]、[2]、[5]には、それぞれ「1」が設定されている。対応する要素バッファ[0]、[1]、[2]、[5]にパケットが書き込まれているからである。書込時間テーブル[0]、[1]、[2]、[5]には、要素バッファ[0]、[1]、[2]、[5]にパケットが書き込まれ時の時間カウンタ180の値「0」が設定されている。
【0070】
同様に、パケットキュー[1]には、要素バッファ[3]、[4]の2つ要素バッファにパケットが書き込まれ、順番につながっている。
【0071】
従って、HEAD/TAILテーブル240のHEAD[1]及びTAIL[1]は、それぞれ「A3」及び「A4」を記憶し、キュー長管理テーブル[1]は、「2」を記憶している。
【0072】
また、使用中フラグテーブル[3]、[4]には、それぞれ「1」が設定されている。書込時間テーブル[3]、[4]には、要素バッファ[3]、[4]にパケットが書き込まれ時の時間カウンタ180の値「1」が設定されている。
【0073】
また、空キューには、空き要素バッファがつながっている。空キュー管理テーブル260のTOPアドレス及びENDアドレスは、それぞれ「A6」及び「A15」を記憶している。
【0074】
ここで、例えば、パケットキュー[0]の要素バッファ[0]に記憶されているデータが読み出されると、要素バッファ[0]は空き要素バッファとなり、空キューの末尾につながれる。
【0075】
<廃棄要素バッファの判定方法>
次に、復旧処理において、パケットバッファ200内の各要素バッファが、廃棄要素バッファであるか否かを判断する方法について、図5を用いて説明する。
【0076】
図5は、廃棄要素バッファの判定方法を示す図である。図5においては、説明の便宜上、3つの要素バッファと関連するテーブルを記載している。
【0077】
復旧処理は、時間カウンタ180がカウンタ値を更新する都度に実行する。下向き矢印は、復旧処理を実行するタイミングを示している(矢印300等参照)。
【0078】
まず、時間カウンタ180のカウンタ値は、所定の周期で、「0」、「1」、「2」と順に繰り返される(1段目の時間カウンタ180参照)。復旧処理はこの周期で実行される。
【0079】
その周期は、要素バッファにパケットが書き込まれた時から読み出されるであろうと推測される時までの時間(以下、「滞留時間」という。)を基に決定する。
【0080】
滞留時間が経過しているにも関わらずパケットが読み出されていない要素バッファを、廃棄要素バッファであると判断するからである。
【0081】
実施形態では、時間カウンタ180のカウンタ値と、各要素バッファにパケットが書き込まれた時間を記憶している書込時間テーブル230とを基に、各要素バッファにパケットが書き込まれてから滞留時間が経過しているか否かを判断する。
【0082】
まず、滞留時間は、パケット転送装置100で転送するパケットを送信するユーザに割り当てられた帯域、いわゆる通信速度と、そのユーザが使用することが出来るパケットバッファ200のサイズとに基づいて求める。
【0083】
パケット転送装置100で転送するパケットのうち、最も小さい帯域が割り当てられているパケットの滞留時間を、パケット転送装置100の滞留時間とする。
【0084】
例えば、あるユーザに割り当てられた帯域が、「1Gbps(bit/秒)」であり、そのユーザに割り当てられたパケットバッファ200内の領域のサイズが、「1M×128bit」であるとする。この場合、このユーザのパケットの滞留時間は、「1M×128bit/1Gbps=128ms」となる。
【0085】
実施形態では、滞留時間が「128ms」の場合、周期を「1sec」とする。そして、時間カウンタ180のカウンタ値と、書込時間テーブル230に記憶されている値との差、すなわち、経過したカウント値(以下、「使用時間」という。)が「2」である要素バッファを、廃棄要素バッファであると判断する。使用時間が「2」である場合に廃棄バッファであると判断するのは、滞留時間を超過していないにもかかわらず廃棄要素バッファであると判断されてしまうことを防ぐためである。
【0086】
図5を参照しながら、廃棄要素バッファの判定方法を説明する。
【0087】
要素バッファ[0]にパケットが記憶されると(データ301参照)、使用中フラグテーブル[0]に「1」が設定され(3段目の使用中フラグテーブル220参照)、書込時間テーブル[0]に時間カウンタ180のカウンタ値「0」が設定される(4段目の書込時間テーブル230参照)。
【0088】
時間カウンタ180のカウンタ値が、「0」から「1」に更新されると、復旧処理が実行され(矢印300参照)、各要素バッファにパケットが書き込まれてからの時間である使用時間を算出する。最下段に示す「算出した使用時間」の配列の番号は、要素バッファの番号と対応しているものとし、使用時間[0]等というものとする。
【0089】
使用時間は、使用中フラグテーブル220に設定されている値が「1」、すなわち、パケットが書き込まれている要素バッファに対してのみ行う。
【0090】
ここでは、要素バッファ[0]のみにパケットが書き込まれているので、書込時間テーブル[0]から時間カウンタ180のカウンタ値「1」までの使用時間[0]は「1」となる。使用時間が「1」であるので、要素バッファ[0]は、廃棄要素バッファではないと判断される。
【0091】
時間カウンタ180のカウンタ値が「1」の間に、要素バッファ[0]からパケットが読み出され、使用中フラグテーブル[0]に「0」が設定される。また、要素バッファ[1]にパケットが書き込まれ、使用中フラグテーブル[1]に「1」が設定され、書込時間テーブル[1]に時間カウンタ180のカウンタ値「1」が設定される。
【0092】
次に、時間カウンタ180のカウンタ値が、「1」から「2」に更新されると、復旧処理が実行され、各要素バッファの使用時間を算出する。
【0093】
時間カウンタ180のカウンタ値が「2」の間に、要素バッファ[2]にパケットが書き込まれ、使用中フラグテーブル[2]に「1」が設定され、書込時間テーブル[2]に時間カウンタ180のカウンタ値「2」が設定される。
【0094】
次に、時間カウンタ180のカウンタ値が、「2」から「0」に更新されると、復旧処理が実行され、各要素バッファの使用時間を算出する。使用時間[1]が「2」となるため(使用時間303の斜線部分参照)、要素バッファ[1]は、廃棄要素バッファであると判断される。
【0095】
次に、時間カウンタ180のカウンタ値が、「0」から「1」に更新されると、復旧処理が実行され、各要素バッファの使用時間を算出する。使用時間[2]が「2」となるため(使用時間304の斜線部分参照)、要素バッファ[2]は、廃棄要素バッファであると判断される。
【0096】
<動作>
以下、実施形態のパケット転送装置100の動作について図を用いて説明する。
【0097】
パケット転送装置100の動作として、4つの処理を説明する。
【0098】
1つ目の処理は、パケットの書込み処理であり、図6〜図9、図15〜18を用いて説明する。
【0099】
図6は、パケットの書込み処理を示すフローチャートであり、図7〜図9は、パケットの書込み処理のタイムチャートであり、図15〜図18は、パケットの書込み処理におけるパケットバッファ200及びテーブルの遷移を示す図である。
【0100】
2つ目の処理は、パケットの読出し処理であり、図10〜図12、図19及び図20を用いて説明する。パケットの読出し処理が正常に行われる場合と、廃棄要素バッファが発生する場合とを説明する。
【0101】
図10は、パケットの読出し処理を示すフローチャートであり、図11及び図12は、パケットの読出し処理のタイムチャートであり、図19及び図20は、パケットの読出し処理におけるパケットバッファ200及びテーブルの遷移を示す図である。
【0102】
3つ目の処理は、廃棄要素バッファが発生した後の、パケットの読出し処理及び書込み処理であり、図21及び図22を用いて説明する。
【0103】
図21は、パケットの読出し処理におけるパケットバッファ200及びテーブルの遷移を示す図であり、図22は、書込み処理におけるパケットバッファ200及びテーブルの遷移を示す図である。
【0104】
4つ目の処理は、復旧処理であり、図13、図14、図23を用いて説明する。
【0105】
図13は、復旧処理を示すフローチャートであり、図14は、復旧処理のタイムチャートであり、図23は、復旧処理におけるパケットバッファ200及びテーブルの遷移を示す図である。
【0106】
実施形態では、パケット転送装置100が受信するパケットは可変長であり、パケットの長さに応じて、要素メモリを複数個使用するものとする。また、パケットバッファ200の要素メモリは、全て同じサイズであるとする。
【0107】
図7等のタイムチャートにおいて、番号が同じクロックは、同じタイミングのクロックであるものとする。また、図7等においては、入力されるパケットは、Etherパケット64Byte長の例を示す。パケットバッファ200のデータ幅を128bit幅とし、受信されるパケットのデータ幅も128bitとする。すなわち、1要素バッファを、128bitとする。
【0108】
キュー番号(QID)はパケットのヘッダ内のVIDを用いる。また、パケット長(LENGTH)は、パケットバッファ200の要素バッファの使用数で表わす。従って、Etherパケット64Byteのパケット長は、「64Byte/128bit」で「4」となる。すなわち、パケットは4つに分割されて、それぞれ要素バッファに書き込まれる。以下、分割されたパケットを、パケット(1)、パケット(2)のように言うものとする。
【0109】
ENABLEは、受信されるパケットが有効である区間を表わしている。STARTはユーザパケットの先頭を、ENDはユーザパケットの末端を表している。
【0110】
尚、タイムチャートにおいて、各テーブルのアドレス「A1」等は、各テーブル[1]等のアドレスを示すものとする。
【0111】
図15等のパケットバッファ200及びテーブルの遷移を示す図では、テーブル等で斜線が引かれている部分は、書き換えられたことを示す。
【0112】
また、パケットバッファ200の配列要素の数字は、書き込まれているパケットの分割の番号を示す。
【0113】
<パケットの書込み処理>
まず、図6〜図9、図15〜18を用いてパケットの書込み処理について説明する。
【0114】
図15は、パケット転送装置100の起動時のテーブル及びキュー等の状態を示している。すなわち、空キューに、要素バッファ[0]〜要素バッファ[15]がつながっている。また、使用中フラグテーブル220の各配列要素には「0」が設定されている。
【0115】
ここでは、図15で示す初期状態から、3つのパケットを順次受信する場合を例に説明する。キュー番号「0」、パケット長「4」のパケットを受信し、キュー番号「1」、パケット長「6」のパケットを受信し、キュー番号「0」、パケット長「4」のパケットを受信する場合である。
【0116】
図16は、図15の状態から、最初のキュー番号「0」、パケット長「4」のパケットを受信し、パケットバッファ200に記憶したときのテーブル及びキュー等の状態を示している。
【0117】
図17は、図16の状態から、キュー番号「1」、パケット長「6」のパケットを受信したときのテーブル等の状態を示し、図18は、図17の状態から、2つ目のキュー番号「0」パケット長「4」のパケットを受信したときのテーブル等の状態を示す。
【0118】
<1つ目のパケットの書込み処理>
受信部110は、パケット20の受信を開始し(図6のステップS100)、パケット20をテンポラリバッファ1に蓄積する(図7の処理400参照)と同時に、キュー番号「0」及びパケット長「4」を検出する(図7の処理401及び処理402参照)。
【0119】
キュー番号とパケット長を検出した受信部110は、検出したキュー番号及びパケット長を書込部130に渡して、受信したパケットをパケットバッファ200に記憶するよう依頼する(図7の処理403参照)。
【0120】
依頼を受けた書込部130は、バッファリング管理部160にキュー番号「0」を渡して、空き要素バッファのアドレスを要求する。
【0121】
空き要素バッファのアドレスの要求を受けたバッファリング管理部160は、空キュー管理テーブル260のTOPアドレス「A0」(図15参照)を読み出して、書込部130に渡す。
【0122】
アドレスを渡された書込部130は、渡されたアドレス「A0」の要素バッファ[0]にパケット(1)を書込む(ステップS120、図16参照)。また、書込部130は、書き込んだパケットのヘッダ部から帯域制御部140が帯域の制御に必要な情報を読み出し、帯域制御部140に渡す。
【0123】
アドレスを書込部130に渡したバッファリング管理部160は、渡したアドレスで指される要素バッファ[0]に対応する使用中フラグテーブル220の配列要素、すなわち、使用中フラグテーブル[0]に「1」を設定する(ステップS130、図9の処理420、及び、図16参照)。
【0124】
また、バッファリング管理部160は、時間カウンタ180のカウント値「1」を読み出して、読み出したカウント値を、渡したアドレスで指される要素バッファ[0]に対応する書込時間テーブル230の配列要素、すなわち、書込時間テーブル[0]に「1」設定する(ステップS140、図9の処理421、及び、図16参照)。
【0125】
書込部130は、パケットの書き込みが終了するまで、空き要素バッファをバッファリング管理部160に要求し、ステップS110〜ステップ140の処理を繰り返す(ステップS150:No)。
【0126】
書込部130は、パケットの書き込みが終了したら、すなわち、パケット(4)の書き込みが終了したら(ステップS150:Yes)、パケット長「4」をバッファリング管理部160に渡し、書込みが終了した旨を通知する。
【0127】
終了通知を受けたバッファリング管理部160は、パケットの書込みの完了処理を行う(ステップS160)。
【0128】
具体的に、バッファリング管理部160は、書込部130から渡されたパケット長「4」を、キュー長管理テーブル250のキュー長管理テーブル[0]に加算し、「4」とする(図8の処理410、及び、図16参照)。
【0129】
バッファリング管理部160は、HEAD/TAILテーブル240のHEAD[0]を、空キュー管理テーブル260のTOPアドレス「A0」で更新する(図8の処理411、及び、図16参照)。
【0130】
また、バッファリング管理部160は、HEAD/TAILテーブル240のTAIL[0]を、パケット(4)が書き込まれた要素バッファ[3]のアドレス「A3」で更新する(図8の処理412、及び、図16参照)。
【0131】
バッファリング管理部160は、空キュー管理テーブル260のTOPアドレスを、パケット(4)が書き込まれた要素バッファ[3]が対応するリンク管理テーブル[3]の内容である「A4」で更新する(図8の処理413、及び、図16参照)。
【0132】
<2つ目のパケットの書込み処理>
次に、パケット転送装置100が、キュー番号が「0」、パケット長が「4」であるパケットを受信したあとに、キュー番号が「1」、パケット長が「6」であるパケットを受信する場合を説明する。
【0133】
受信部110は、パケット20の受信を開始し(図6のステップS100)、パケット20をテンポラリバッファ1に蓄積すると同時に、キュー番号「1」及びパケット長「6」を検出する。
【0134】
キュー番号とパケット長を検出した受信部110は、検出したキュー番号「1」及びパケット長「6」を書込部130に渡して、受信したパケットをパケットバッファ200に記憶するよう依頼する。
【0135】
依頼を受けた書込部130は、バッファリング管理部160にキュー番号「1」を渡して、空き要素バッファのアドレスを要求する。
【0136】
空き要素バッファのアドレスの要求を受けたバッファリング管理部160は、空キュー管理テーブル260のTOPアドレス「A4」を読み出して、書込部130に渡す。
【0137】
アドレスを渡された書込部130は、渡されたアドレス「A4」の要素バッファ[4]にパケット(1)を書込む(ステップS120)。
【0138】
アドレスを書込部130に渡したバッファリング管理部160は、渡したアドレスで指される要素バッファ[4]に対応する使用中フラグテーブル[4]に「1」を設定する(ステップS130、図9の処理422、及び、図17参照)。
【0139】
また、バッファリング管理部160は、時間カウンタ180のカウント値「2」を読み出して、読み出したカウント値を、渡したアドレスで指される要素バッファ[4]に対応する書込時間テーブル[4]に「2」設定する(ステップS140、図9の処理423、及び、図17参照)。
【0140】
書込部130は、パケットの書き込みが終了するまで、空き要素バッファをバッファリング管理部160に要求し、ステップS110〜ステップ140の処理を繰り返す(ステップS150:No)。
【0141】
書込部130は、パケットの書き込みが終了したら、すなわち、パケット(6)の書き込みが終了したら(ステップS150:Yes)、パケット長「6」をバッファリング管理部160に渡し、書込みが終了した旨を通知する。
【0142】
終了通知を受けたバッファリング管理部160は、パケットの書込みの完了処理を行う(ステップS160)。
【0143】
具体的には、書込部130から渡されたパケット長「6」を、キュー長管理テーブル250のキュー長管理テーブル[1]に加算し、「6」とする(図8の処理414、及び、図17参照)。
【0144】
HEAD/TAILテーブル240のHEAD[1]を、空キュー管理テーブル260のTOPアドレス「A4」で更新する(図8の処理415、図16、及び、図17参照)。
【0145】
HEAD/TAILテーブル240のTAIL[1]を、パケット(6)が書き込まれた要素バッファ[9]のアドレス「A9」で更新する(図8の処理416、及び、図17参照)。
【0146】
空キュー管理テーブル260のTOPアドレスを、パケット(6)が書き込まれた要素バッファ[9]が対応するリンク管理テーブル[9]の内容である「A10」で更新する(図8の処理417、及び、図17参照)。
【0147】
<3つ目のパケットの書込み処理>
次に、パケット転送装置100が、キュー番号が「1」、パケット長が「6」であるパケットを受信したあとに、キュー番号が「0」、パケット長が「4」であるパケットを受信する場合を説明する。
【0148】
受信部110は、パケット20の受信を開始し(図6のステップS100)、パケット20をテンポラリバッファ1に蓄積すると同時に、キュー番号「0」及びパケット長「4」を検出する。
【0149】
キュー番号とパケット長を検出した受信部110は、検出したキュー番号「0」及びパケット長「4」を書込部130に渡して、受信したパケットをパケットバッファ200に記憶するよう依頼する。
【0150】
依頼を受けた書込部130は、バッファリング管理部160にキュー番号「0」を渡して、空き要素バッファのアドレスを要求する。
【0151】
空き要素バッファのアドレスの要求を受けたバッファリング管理部160は、空キュー管理テーブル260のTOPアドレス「A10」を読み出して、書込部130に渡す。
【0152】
アドレスを渡された書込部130は、渡されたアドレス「A10」の要素バッファ[10]にパケット(1)を書込む(ステップS120)。
【0153】
アドレスを書込部130に渡したバッファリング管理部160は、渡したアドレスで指される要素バッファ[10]に対応する使用中フラグテーブル[10]に「1」を設定する(ステップS130)。
【0154】
また、バッファリング管理部160は、時間カウンタ180のカウント値「2」を読み出して、読み出したカウント値を、渡したアドレスで指される要素バッファ[10]に対応する書込時間テーブル[10]に「2」設定する(ステップS140)。
【0155】
書込部130は、パケットの書き込みが終了するまで、空き要素バッファをバッファリング管理部160に要求し、ステップS110〜ステップ140の処理を繰り返す(ステップS150:No)。
【0156】
書込部130は、パケットの書き込みが終了したら、すなわち、パケット(4)の書き込みが終了したら(ステップS150:Yes)、パケット長「4」をバッファリング管理部160に渡し、書込みが終了した旨を通知する。
【0157】
終了通知を受けたバッファリング管理部160は、パケットの書込みの完了処理を行う(ステップS160)。
【0158】
具体的には、書込部130から渡されたパケット長「4」を、キュー長管理テーブル250のキュー長管理テーブル[0]に加算し、「8」とする(図17、及び、図18参照)。
【0159】
パケットキュー[0]のキューの末尾に、今回受信したパケットを書き込んだ要素バッファ[10]〜[13]をつなげるために、現在のTAIL[0]に記憶されているアドレス「A3」が指す要素バッファ[3]に対億するリンク管理テーブル[3]を、空キュー管理テーブル260のTOPアドレス「A10」で書き換える(図17、及び、図18参照)。また、HEAD/TAILテーブル240のTAIL[0]を、パケット(4)を書き込んだ要素バッファ[13]のアドレスである「A13」で更新する(図18参照)。
【0160】
空キュー管理テーブル260のTOPアドレスを、パケット(4)を書き込んだ要素バッファ[13]に対応するリンク管理テーブル[13]の内容「A14」で更新する(図18参照)。
【0161】
<パケットの読出し処理>
次に、図10〜図12、図19〜図20を用いてパケットの読出し処理を説明する。
【0162】
ここでは、図18で示す状態から、キュー番号「0」、パケット長「4」のパケットを読み出し、キュー番号「1」、パケット長「6」のパケットを読み出す場合を説明する。但し、2つ目のキュー番号「1」、パケット長「6」のパケットを読み出す際にエラーが発生するものとする。
【0163】
図19は、図18の状態で、キュー番号「0」、パケット長「4」のパケットを読み出したときのテーブル及びキュー等の状態を示している。
【0164】
図20は、図19の状態で、キュー番号「1」、パケット長「6」のパケットの読み出す際にエラーが発生したときのテーブル等の状態を示す。
【0165】
以下、パケット転送装置100が、2つのパケットをパケットバッファ200から読み出す場合を説明する。
【0166】
<1つ目のパケットの読出し処理>
帯域制御部140は、QoS等を考慮した送信タイミングが来たら、送信するキュー番号「0」を渡して、読出部150にパケットの送信を依頼する。
【0167】
依頼を受けた読出部150は、バッファリング管理部160にキュー番号「0」を渡して、読み出すパケットが書き込まれている要素バッファのアドレスを要求する(図10のステップS210)。
【0168】
要素バッファのアドレスの要求を受けたバッファリング管理部160は、渡されたキュー番号「0」のキューに要素バッファがつながれているかを判断する。具体的には、キュー長管理テーブル[0]の内容が「0」である場合は、要素バッファはつながれていないと判断する。
【0169】
要素バッファがつながれていない場合(ステップS220:Yes)、バッファリング管理部160は、読み出すべきパケットが記録されていない旨を読出部150に返す。
【0170】
読み出すべきパケットが記録されていない旨を受け取った読出部150は、次のパケット送信依頼を待つ(ステップS210)。
【0171】
一方、要素バッファがつながれている場合(ステップS220:No)、バッファリング管理部160は、パケットキュー[0]の先頭につながれている要素バッファのアドレス、すなわち、HEAD/TAILテーブル240のHEAD[0]の内容「A0」を読み出す。
【0172】
ここでは、キュー長管理テーブル[0]の内容は「8」であるので(図18参照)、バッファリング管理部160は、HEAD[0]の内容「A0」を読み出す。
【0173】
アドレスを読み出したバッファリング管理部160は、エラー判定部170に読み出したアドレスを渡してチェックを依頼する。
【0174】
依頼されたエラー判定部170は、渡されたアドレスがエラーアドレスであるか否かを判定して、結果をバッファリング管理部160に返す。
【0175】
判定結果がエラーアドレスである場合(ステップS230:Yes)、バッファリング管理部160は、キュー長管理テーブル[0]に「0」を設定し、エラーが発生した旨を書込部130に返す。
【0176】
エラーが発生した旨を受け取った読出部150は、次のパケット送信依頼を待つ(ステップS210)。
【0177】
一方、判定結果がエラーアドレスでない場合(ステップS230:No)、バッファリング管理部160は、アドレス「A0」を読出部150に渡す。
【0178】
ここでは、アドレス「A0」は、エラーアドレスではないので、アドレス「A0」を受け取った読出部150は、渡されたアドレス「A0」の要素バッファ[0]からパケット(1)を読み出す(ステップS240)。
【0179】
アドレスを読出部150に渡したバッファリング管理部160は、渡したアドレスで指される要素バッファ[0]に対応する使用中フラグテーブル220の配列要素、すなわち、使用中フラグテーブル[0]に「0」を設定する(ステップS250、図12の処理510、及び、図19参照)。
【0180】
読出部150は、パケットの読出しが終了するまで、要素バッファをバッファリング管理部160に要求し、ステップS230〜ステップ250の処理を繰り返す(ステップS260:No)。
【0181】
読出部150は、パケットの読出しが終了したら、すなわち、パケット(4)の読出しが終了したら(ステップS160:Yes)、パケット長「4」をバッファリング管理部160に渡し、読み出しが終了した旨を通知する。パケットの読出しの終了は、最後のパケットの部分、ここではパケット(4)に設定されている最後である旨を示すフラグを参照して判定する。
【0182】
終了通知を受けたバッファリング管理部160は、パケットの読出しの完了処理を行う(ステップS270)。
【0183】
具体的には、読出部150から渡されたパケット長「4」を、キュー長管理テーブル250のキュー長管理テーブル[0]の値「8」から減算し、「4」とする(図11の処理500、図18、及び、図19参照)。
【0184】
パケットキュー[0]につながっている要素バッファ[0]〜[3]を、空き要素バッファとして空キューの末尾につなげる。空キュー管理テーブル260のENDアドレス「A15」で指す要素バッファ[15]と対応するリンク管理テーブル[15]の内容を、HEAD/TAILテーブル240のHEAD[0]の内容「A0」で更新する(図11の処理501、処理502、図18、及び、図19参照)。パケット(4)を読み出した要素バッファ[3]のアドレス「A3」で、ENDアドレスを更新する(図1の処理503、及び、図19参照)。
【0185】
パケットキュー[0]から要素バッファ[0]〜[3]を外す。パケット(4)を読み出した要素バッファ[3]に対応するリンク管理テーブル210[3]の内容「A10」で、HEAD[0]を更新する(図11の処理504、及び、図19参照)。
【0186】
<2つ目のパケットの読出し処理(エラー発生)>
次に、パケット転送装置100が、キュー番号が「0」、パケット長が「4」であるパケットを読み出したあとに、キュー番号が「1」、パケット長が「6」であるパケットの読出しに失敗する場合を説明する。
【0187】
帯域制御部140は、QoS等を考慮した送信タイミングが来たら、送信するキュー番号「1」を渡して、読出部150にパケットの送信を依頼する。
【0188】
依頼を受けた読出部150は、バッファリング管理部160にキュー番号「1」を渡して、読み出すパケットが書き込まれている要素バッファのアドレスを要求する(図10のステップS210)。
【0189】
要素バッファのアドレスの要求を受けたバッファリング管理部160は、渡されたキュー番号「1」のキューに要素バッファがつながれているかを判断する。この場合、パケットキュー[1]には要素バッファがつながれているので(ステップS220:No)、バッファリング管理部160は、パケットキュー[0]の先頭につながれている要素バッファのアドレス、すなわち、HEAD/TAILテーブル240のHEAD[1]の内容「A4」を読み出す。
【0190】
アドレスを読み出したバッファリング管理部160は、エラー判定部170に読み出したアドレスを渡してチェックを依頼する。
【0191】
依頼されたエラー判定部170は、渡されたアドレス「A4」がエラーアドレスであると判定して、結果をバッファリング管理部160に返す。
【0192】
エラーアドレスである旨の判定を受け取ったので(ステップS230:Yes)、バッファリング管理部160は、キュー長管理テーブル[0]に「0」を設定し、エラーが発生した旨を書込部130に返す(図20参照)。
【0193】
エラーが発生した旨を受け取った読出部150は、次のパケット送信依頼を待つ(ステップS210)。
【0194】
この場合、キュー長管理テーブル[1]は「0」となるので、パケットキュー[1]には要素バッファがつながれていないとして、パケット転送装置100の処理が続けられる。すなわち、HEAD[1]の内容「A4」は無効として扱われ、リンク管理テーブル210に「A4」は登録されていないこととなるため、「A4」からつながっていた要素バッファ[4]〜[9]は、以後使用されることはない。すなわち、廃棄されたことになる。
【0195】
<廃棄要素バッファが発生した後の、パケットの読出し処理及び書込み処理>
次に、要素バッファ[4]〜[9]が廃棄された後に、パケットの読出し及び書込みが行われる場合を、図を用いて説明する。
【0196】
図21は、図20の状態で、キュー番号「0」パケット長「4」のパケットを読み出したときのテーブル等の状態を示す。パケット読出しの際のタイムチャートを図11及び図12に示す。
【0197】
図22は、図21の状態で、キュー番号「1」パケット長「4」のパケットを書込んだときのテーブル等の状態を示す。
【0198】
<廃棄要素バッファが発生した後の、パケットの読出し処理>
帯域制御部140は、QoS等を考慮した送信タイミングが来たら、送信するキュー番号「0」を渡して、読出部150にパケットの送信を依頼する。
【0199】
依頼を受けた読出部150は、バッファリング管理部160にキュー番号「0」を渡して、読み出すパケットが書き込まれている要素バッファのアドレスを要求する(図10のステップS210)。
【0200】
要素バッファのアドレスの要求を受けたバッファリング管理部160は、渡されたキュー番号「0」のキューに要素バッファがつながれているかを判断する。
【0201】
キュー長管理テーブル[0]の内容は「0」ではないので、(ステップS220:No、図20参照)、バッファリング管理部160は、パケットキュー[0]の先頭につながれている要素バッファのアドレス、すなわち、HEAD/TAILテーブル240のHEAD[0]の内容「A10」を読み出す。
【0202】
アドレスを読み出したバッファリング管理部160は、エラー判定部170に読み出したアドレスを渡してチェックを依頼する。
【0203】
ここでは、アドレス「A10」はエラーアドレスではないので(ステップS230:No)、バッファリング管理部160は、アドレス「A10」を読出部150に渡す。
【0204】
アドレス「A10」を受け取った読出部150は、渡されたアドレス「A10」の要素バッファ[10]からパケット(1)を読み出す(ステップS240)。
【0205】
アドレスを読出部150に渡したバッファリング管理部160は、渡したアドレスで指される要素バッファ[10]に対応する使用中フラグテーブル[10]に「0」を設定する(ステップS250、図12の処理511参照)。
【0206】
読出部150は、パケットの読出しが終了するまで、要素バッファをバッファリング管理部160に要求し、ステップS230〜ステップ250の処理を繰り返す(ステップS260:No)。
【0207】
読出部150は、パケットの読出しが終了したら、すなわち、パケット(4)の読出しが終了したら(ステップS160:Yes)、パケット長「4」をバッファリング管理部160に渡し、読み出しが終了した旨を通知する。
【0208】
終了通知を受けたバッファリング管理部160は、パケットの読出しの完了処理を行う(ステップS270)。
【0209】
具体的には、読出部150から渡されたパケット長「4」を、キュー長管理テーブル250のキュー長管理テーブル[0]から減算し、「0」とする(図11の処理505、及び、図21参照)。
【0210】
パケットキュー[0]につながっている要素バッファ[10]〜[13]を、空き要素バッファとして空キューの末尾につなげる。空キュー管理テーブル260のENDアドレス「A3」で指す要素バッファ[3]と対応するリンク管理テーブル[3]の内容を、HEAD/TAILテーブル240のHEAD[0]の内容「A10」で更新する(図11の処理506、処理507、図20、及び、図21参照)。パケット(4)を読み出した要素バッファ[13]のアドレス「A13」で、ENDアドレスを更新する(図11の処理508、図20、及び、図21参照)。
【0211】
パケット(4)を読み出した要素バッファ[13]に対応するリンク管理テーブル210[13]の内容「A14」で、HEAD[0]を更新する(図11の処理509、及び、図21参照)。尚、キュー長管理テーブル[0]が「0」となった場合は、HEAD[0]を更新しなくてもよい。
【0212】
<廃棄要素バッファが発生した後の、パケットの書込み処理>
次に、要素バッファ[4]〜[9]が廃棄された後に、キュー番号「1」パケット長「4」のパケットを書込む場合を説明する。
【0213】
受信部110は、パケット20の受信を開始し(図6のステップS100)、キュー番号「1」及びパケット長「4」を検出する。受信部110は、検出したキュー番号「1」及びパケット長「4」を書込部130に渡して、受信したパケットをパケットバッファ200に記憶するよう依頼する。
【0214】
依頼を受けた書込部130は、バッファリング管理部160にキュー番号「1」を渡して、空き要素バッファのアドレスを要求する。
【0215】
空き要素バッファのアドレスの要求を受けたバッファリング管理部160は、空キュー管理テーブル260のTOPアドレス「A14」を読み出して、書込部130に渡す。
【0216】
アドレスを渡された書込部130は、渡されたアドレス「A14」の要素バッファ[14]にパケット(1)を書込む(ステップS120)。また、書込部130は、書き込んだパケットのヘッダ部から帯域制御部140が帯域確保に必要な情報を読み出し、帯域制御部140に渡す。
【0217】
アドレスを書込部130に渡したバッファリング管理部160は、渡したアドレスで指される要素バッファ[14]に対応する使用中フラグテーブル[14]に「1」を設定する(ステップS130、図22参照)。
【0218】
また、バッファリング管理部160は、時間カウンタ180のカウント値を読み出して、読み出したカウント値を、渡したアドレスで指される要素バッファ[14]に対応する書込時間テーブル[14]に「0」設定する(ステップS140、図22参照)。
【0219】
書込部130は、パケットの書き込みが終了するまで、空き要素バッファをバッファリング管理部160に要求し、ステップS110〜ステップ140の処理を繰り返す(ステップS150:No)。
【0220】
書込部130は、パケットの書き込みが終了したら、すなわち、パケット(4)の書き込みが終了したら(ステップS150:Yes)、パケット長「4」をバッファリング管理部160に渡し、書込みが終了した旨を通知する。
【0221】
終了通知を受けたバッファリング管理部160は、パケットの書込みの完了処理を行う(ステップS160)。
【0222】
具体的には、書込部130から渡されたパケット長「4」を、キュー長管理テーブル250のキュー長管理テーブル[1]に加算し、「4」とする(図22参照)。
【0223】
HEAD/TAILテーブル240のHEAD[1]を、空キュー管理テーブル260のTOPアドレス「A14」で更新する。
【0224】
HEAD/TAILテーブル240のTAIL[1]を、パケット(4)が書き込まれた要素バッファ[1]のアドレス「A1」で更新する。
【0225】
空キュー管理テーブル260のTOPアドレスを、パケット(4)が書き込まれた要素バッファ[1]が対応するリンク管理テーブル[1]の内容である「A2」で更新する。
【0226】
このように、廃棄された要素バッファ[4]〜[9]は、パケットの書込み及び読み込みにおいて、使用されることはない。
【0227】
<復旧処理>
次に、図13、図14、図23を用いて復旧処理を説明する。
【0228】
ここでは、時間カウンタ180のカウンタ値が更新されたら実行される復旧処理について説明する。
【0229】
図23は、図22の状態で、復旧処理が行われたあとのテーブル等の状態を示す。すなわち、廃棄要素バッファ[4]〜[9]が、空き要素バッファに復旧している。
【0230】
時間カウンタ180のカウント値が「0」から「1」に更新されたことを検知したバッファリング管理部160は、復旧処理部190に復旧処理を行うよう依頼する。
【0231】
依頼を受けた復旧処理部190は、パケットバッファ200の要素バッファ[0]から順に、廃棄要素バッファであるか否かに確認を開始する(図13のステップS300)。
【0232】
まず、復旧処理部190は、要素バッファ[0]が使用中であるか、すなわち、読み出しを待つパケットが書き込まれているかを判断する(ステップS310)。具体的には、復旧処理部190は、要素バッファ[0]に対応する使用中フラグテーブル220の使用中フラグテーブル[0]が、「1」である場合は使用中であると判断し、「0」である場合は使用中ではないと判断する。
【0233】
要素バッファ[0]が使用中でないと判断した場合(ステップS310:No)、復旧処理部190は、次の要素バッファ[1]の判断に移る(ステップS310)。
【0234】
一方、要素バッファ[0]が使用中であると判断した場合(ステップS310:Yes)、復旧処理部190は、滞留時間より長い時間使用中であるか否か、すなわち、廃棄要素バッファであるか否かを判断する。この判断は、上述の<廃棄要素バッファの判定方法>で説明した方法により判断する。
【0235】
まず、復旧処理部190は、要素バッファ[0]は廃棄要素バッファではないと判断する。具体的には、使用中フラグテーブル[0]は「1」である(図14の処理600、及び、図22参照)ので廃棄要素バッファであるか否かの判断を行う。時間カウンタ180のカウンタ値が「1」であり、要素バッファ[0]に対応する書込時間テーブル230の書込時間テーブル[0]の値が「0」であるので(図14の処理601参照)、使用時間が「1」となり滞留時間が経過していないと判断する。
【0236】
要素バッファ[0]が廃棄要素バッファではないと判断した場合(ステップS320:No)、復旧処理部190は、次の要素バッファ[1]の判断に移る(ステップS310)。
【0237】
一方、要素バッファ[0]が廃棄要素バッファであると判断した場合(ステップS320:Yes)、復旧処理部190は、要素バッファ[0]を空キューにつなげる。
【0238】
復旧処理部190は、要素バッファ[0]は廃棄要素バッファではないと判断したので、次の要素バッファ[1]の判断に移る。
【0239】
このように、ステップ310〜ステップ330までの処理を、全ての要素バッファに対して順位行う(ステップS340:No)。
【0240】
例えば、要素バッファ[2]の処理を、復旧処理部190は次のように行う。
【0241】
使用中フラグテーブル[2]は「0」であるので(ステップS310:No)、廃棄要素バッファであるか否かの判断を行わずに、次の要素バッファ[3]の判断に移る(ステップS310)。
【0242】
要素バッファ[4]、すなわち、廃棄要素バッファの復旧処理を、復旧処理部190は次のように行う。
【0243】
使用中フラグテーブル[4]は「1」である(ステップS310:Yes、図14の処理602参照)ので廃棄要素バッファであるか否かの判断を行う。時間カウンタ180のカウンタ値が「1」であり、要素バッファ[4]に対応する書込時間テーブル[4]の値が「2」であるので(図14の処理603参照)、使用時間が「2」となり滞留時間が経過していると判断する。
【0244】
復旧処理部190は、要素バッファ[4]が廃棄要素バッファであると判断したので(ステップS320:Yes)、要素バッファ[4]を空キューにつなげる。
【0245】
具体的には、要素バッファ[4]に対応する使用中フラグテーブル[4]に「0」を設定する(図14の処理604参照)。次に、空キュー管理テーブル260のENDアドレス「A13」(図22参照)が指す要素バッファ[13]に対応するリンク管理テーブル[13]に、廃棄要素バッファであると判断された要素バッファ[4]のアドレス「A4」で更新する(図14の処理605参照)。空キュー管理テーブル260のENDアドレスを、要素バッファ[4]のアドレス「A4」で更新する(図14の処理606参照)。
【0246】
全ての要素バッファの判断を行ったら復旧処理を終了する(ステップS340:Yes)。
【0247】
<補足>
以上、本発明の実施形態について説明したが、本発明は上記形態に限らず、以下のようにしてもよい。
(1)実施形態では、パケットをバッファに記憶する場合を説明したが、パケット以外のデータをバッファに読み書きする場合であってもよい。また、各要素バッファは同じサイズでなくてもよい。
(2)パケット転送装置100は、図1の各構成要素の全部又は一部を、コンピュータのプログラムで実現してもよいし、その他どのような形態で実施してもよい。
【0248】
コンピュータプログラムの場合、メモリカード、CD−ROMなどいかなる記録媒体に書き込まれたものをコンピュータに読み込ませて実行させる形にしてもよいし、ネットワークを経由してプログラムをダウンロードして実行させる形にしてもよい。
【符号の説明】
【0249】
1 テンポラリバッファ
2 ユーザ識別
3 パケット長測定
4 EnQ処理部
5 ReserveTOPレジスタ
6 ReserveENDレジスタ
7 パケットバッファメモリ
8 リンク管理メモリ
9 キュー長管理メモリ
11 DeQ処理部
12 帯域制御部
13 アドレス損失復旧処理部
14 時間カウンタ
15 使用中フラグメモリ
16 書込時間メモリ
20 21 パケット
100 パケット転送装置
110 受信部
120 送信部
130 書込部
140 帯域制御部
150 読出部
160 バッファリング管理部
170 エラー判定部
180 時間カウンタ
190 復旧処理部
200 パケットバッファ
210 リンク管理テーブル
220 使用中フラグテーブル
230 書込時間テーブル
240 HEAD/TAILテーブル
250 キュー長管理テーブル
260 空キュー管理テーブル

【特許請求の範囲】
【請求項1】
バッファ内の領域にデータを記憶させ、当該バッファ内の領域からデータを読み出すバッファメモリ装置であって、
データを前記バッファ内の空き領域に書き込む書込手段と、
前記バッファ内の領域からデータを読み出す読出手段であって、読み出しに成功した場合は、当該領域を空き領域とし、読み出しに失敗した場合は、当該領域を廃棄領域とする読出手段と、
前記書込手段によってデータが書き込まれてから所定の時間が経過した前記廃棄領域を検出し、検出した廃棄領域を空き領域とする領域復旧手段と
を備えるバッファメモリ装置。
【請求項2】
前記バッファメモリ装置は、受信したパケットを前記バッファ内の領域に記憶させ、所定の帯域を保証しながら当該バッファ内の領域から読み出したパケットを送信する転送装置に備えられ、
前記書込手段は、受信したパケットを前記バッファ内の空き領域に書き込み、
前記読出手段は、前記バッファからパケットを読み出し、読み出しに成功した場合は、当該パケットが蓄積されていた領域を空き領域とし、読み出しに失敗した場合は、当該パケットが蓄積されていた領域を廃棄領域とし、
前記領域復旧手段の所定の時間は、パケットがバッファに記憶されてから読み出されるまでに要する時間であって、前記所定の帯域に基づいて求めた時間であり、前記領域復旧手段は、前記廃棄領域にパケットが記憶されてから当該所定の時間が経過した場合に、当該廃棄領域を空き領域とする
請求項1記載のバッファメモリ装置。
【請求項3】
前記所定の時間は、前記転送装置が保証する帯域のうち最も小さい帯域と、当該帯域に割り当てられている前記バッファ内の領域サイズとから算出する
請求項2記載のバッファメモリ装置。
【請求項4】
バッファ内の領域にデータをバッファリング装置に記憶させ、当該バッファ内の領域からデータを当該バッファリング装置に読み出させるバッファリング方法であって、
データを前記バッファ内の空き領域に書き込む書込ステップと、
前記バッファ内の領域からデータを読み出す読出ステップであって、読み出しに成功した場合は、当該領域を空き領域とし、読み出しに失敗した場合は、当該領域を廃棄領域とする読出ステップと、
前記書込ステップによってデータが書き込まれてから所定の時間が経過した前記廃棄領域を検出し、検出した廃棄領域を空き領域とする領域復旧ステップと
を備えるバッファリング方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate