(57)【要約】【課題】  可変長フレームに対して、帯域使用量および遅延時間の点で公平な読出しを実現するメモリ共用の個別ＦＩＦＯ型バッファについて、構成要素をリンク構造によって管理するよりも高速化かつ効率化するフレームバッファ管理回路を提供する。【解決手段】  入力されたフレームに対する振分先バッファを決定するフレーム振分部と、フレーム蓄積部と、メモリブロックをポインタにより指示するバッファ用メモリブロックアドレス管理部と、バッファの先頭後尾位置をポインタにより指示するキュー管理部と、未使用メモリブロックをポインタにより指示する空きメモリブロック管理部と、収容するフレームの長さを保持するフレーム長管理部と、いずれかの操作を実行するかを判別する蓄積／読出／廃棄判別部と、フレーム蓄積手段からフレームを読出すフレーム読出部と、フレームを格納しきれないときにフレームを廃棄するフレーム廃棄部とを有する。【選択図】  図１
2005295443.tif 000002
【特許請求の範囲】
【請求項１】
１以上のコネクションを収容し、コネクションごとにＦＩＦＯ型のデータ構造を有し、全コネクション間で共用するメモリを動的に個別のコネクション用バッファとして割当および開放を行うフレームバッファ管理回路において、
入力されたフレームに対して、フレームヘッダ部に記録されている属性情報又は事前に与えられる設定値に基づいて、振分先のバッファを決定するフレーム振分手段と、
メモリブロックの集合として構成され、入力されたフレームの実体を格納するフレーム蓄積手段と、
コネクション用バッファを構成し、前記フレーム蓄積手段の一部であるメモリブロックをポインタにより指示および管理し、ＦＩＦＯ型のデータ構造を有するバッファ用メモリブロックアドレス管理手段と、
コネクション用バッファの先頭位置および後尾位置をポインタにより指示および管理するキュー管理手段と、
前記フレーム蓄積手段において使用していないメモリブロックをポインタにより指示および管理する空きメモリブロック管理手段と、
コネクション用バッファに収容するフレームの長さを保持するフレーム長管理手段と、
バッファのフレーム蓄積状態に関する情報に基づいて、操作対象となるフレームと蓄積もしくは読出または廃棄のいずれかの操作を実行するかを判別する蓄積／読出／廃棄判別手段と、
前記フレーム蓄積手段からフレームを読出すフレーム読出手段と、
バッファにフレームを格納しきれなくなったときにフレームを廃棄するフレーム廃棄手段と
を有することを特徴とするフレームバッファ管理回路。
【請求項２】
バッファの管理単位を単一コネクションの代わりに、コネクション群もしくは方路またはこれらの組合わせとして扱うコネクショングループ情報管理手段を備えることを特徴とする請求項１に記載のフレームバッファ管理回路。
【請求項３】
各コネクションが１以上のＱｏＳクラス又はポートごとにバッファを保持および管理するマルチバッファ管理手段を備え、
前記マルチバッファ管理手段は、コネクション内に１以上のＱｏＳクラスまたはポートを収容する前記バッファ用メモリブロック管理手段と、
コネクション内に１以上のＱｏＳクラスまたはポートを収容する前記キュー管理手段を備えることを特徴とする請求項１又は２に記載のフレームバッファ管理回路。
【請求項４】
前記バッファ用メモリブロックアドレス管理手段を構成する１以上のブロックをグループ化し、グループごとに前記バッファ用メモリブロックアドレス管理手段の一部として割当および開放を行う、アドレスグループ管理手段を備えることを特徴とする請求項１から３のいずれか１項に記載のフレームバッファ管理回路。
【請求項５】
各コネクションのバッファ使用状況を監視するバッファ使用状況監視手段と、
バッファ使用状況監視手段から取得した情報に基づいて、前記バッファ用メモリブロックアドレス管理手段で使用する最大キュー長を動的に決定する最大キュー長決定手段を備えることを特徴とする請求項１から４のいずれか１項に記載のフレームバッファ管理回路。
【請求項６】
フレームバッファに収容するフレームの長さを、前記フレーム長管理手段の代わりに、前記フレーム蓄積手段に含まれるメモリブロック内にフレームの実体と併せて記録する拡張型フレーム蓄積手段を備えることを特徴とする請求項１から５のいずれか１項に記載のフレームバッファ管理回路。
【請求項７】
優先的に廃棄するフレームを選択する優先廃棄フレーム選択手段を備えることを特徴とする請求項１から６のいずれか１項に記載のフレームバッファ管理回路。
【請求項８】
１以上のコネクションを収容し、コネクションごとにＦＩＦＯ型のデータ構造を有し、全コネクション間で共用するメモリを動的に個別のコネクション用バッファとして割当および開放を行うフレームバッファ管理方法において、
入力されたフレームに対して、フレームヘッダ部に記録されている属性情報又は事前に与えられる設定値に基づいて、振分先のバッファを決定するフレーム振分ステップと、
メモリブロックの集合として構成され、入力されたフレームの実体を格納するフレーム蓄積ステップと、
コネクション用バッファを構成し、ＦＩＦＯ型のデータ構造であって、一部であるメモリブロックをポインタにより指示および管理するバッファ用メモリブロックアドレス管理ステップと、
コネクション用バッファの先頭位置および後尾位置をポインタにより指示および管理するキュー管理ステップと、
使用していない前記メモリブロックをポインタにより指示および管理する空きメモリブロック管理ステップと、
コネクション用バッファに収容するフレームの長さを保持するフレーム長管理ステップと、
バッファのフレーム蓄積状態に関する情報に基づいて、操作対象となるフレームと蓄積もしくは読出または廃棄のいずれかの操作を実行するかを判別する蓄積／読出／廃棄判別ステップと、
蓄積されたフレームを読出すフレーム読出ステップと、
バッファにフレームを格納しきれなくなったときにフレームを廃棄するフレーム廃棄ステップと
を有することを特徴とするフレームバッファ管理方法。
【請求項９】
バッファの管理単位を単一コネクションの代わりに、コネクション群もしくは方路またはこれらの組合わせとして扱うコネクショングループ情報管理ステップを有することを特徴とする請求項８に記載のフレームバッファ管理方法。
【請求項１０】
各コネクションが１以上のＱｏＳクラス又はポートごとにバッファを保持および管理するマルチバッファ管理ステップを有し、
前記マルチバッファ管理ステップは、コネクション内に１以上のＱｏＳクラスまたはポートを収容するバッファ用メモリブロック管理ステップと、コネクション内に１以上のＱｏＳクラスまたはポートを収容するキュー管理ステップとを備えることを特徴とする請求項８又は９に記載のフレームバッファ管理方法。
【請求項１１】
前記バッファ用メモリブロックアドレス管理手段を構成する１以上のブロックをグループ化し、グループごとに前記バッファ用メモリブロックアドレス管理手段の一部として割当および開放を行う、アドレスグループ管理ステップを有することを特徴とする請求項８から１０のいずれか１項に記載のフレームバッファ管理方法。
【請求項１２】
各コネクションのバッファ使用状況を監視するバッファ使用状況監視ステップと、
バッファ使用状況監視ステップから取得した情報に基づいて、前記バッファ用メモリブロックアドレス管理ステップで使用する最大キュー長を動的に決定する最大キュー長決定ステップを有することを特徴とする請求項８から１１のいずれか１項に記載のフレームバッファ管理方法。
【請求項１３】
フレームバッファに収容するフレームの長さを、前記フレーム長管理ステップの代わりに、蓄積されたメモリブロック内にフレームの実体と併せて記録する拡張型フレーム蓄積ステップを備えることを特徴とする請求項８から１２のいずれか１項に記載のフレームバッファ管理方法。
【請求項１４】
優先的に廃棄するフレームを選択する優先廃棄フレーム選択ステップを備えることを特徴とする請求項８から１３のいずれか１項に記載のフレームバッファ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｅｔｈｅｒｎｅｔ（登録商標）フレームなどを扱うスイッチにおいて、複数のコネクションを集線または多重する場合に、コネクション単位で優先制御や重み付きラウンドロビン(Weighted Round Robin)制御などによりフレームを読出すために、コネクションごとのバッファを備えるフレームバッファ管理方法および回路に関する。
【背景技術】
【０００２】
ネットワーク上のスイッチにおいて複数のコネクションを集線または多重する場合、フレーム読出部において複数のコネクション間で共用する単一のＦＩＦＯ(First In First Out)型バッファを使用すると、バッファ内の占有率や廃棄率に対して無関係に到着順でフレームを蓄積するため、帯域使用量および遅延時間の点でパワーユーザを収容するコネクションの方が有利になる。
【０００３】
コネクション間の帯域使用量および遅延時間の公平性を確保する手段としては、例えばコネクションごとに個別にＦＩＦＯ型バッファを用いる手法がある。しかし、個別ＦＩＦＯ型バッファをメモリ占有方式で実装すると、メモリの使用効率が低くなるため、多くのメモリ容量を用意する必要がある。
【０００４】
多くのメモリを装置内に実装することは、実装面積やコストの点で不利である。そこで、バッファのためのメモリを必要に応じて動的に割当および開放を行うことにより、コネクション間でメモリを共用し使用効率を向上させる（例えば非特許文献１参照）。
【０００５】
【非特許文献１】特開平１１−３２０５５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
前記の方法では、共用するバッファ用メモリの管理にポインタチェーン（リンク）を用いている。ポインタチェーンは、バッファ用メモリをリンクによって接続するため、バッファ用メモリの管理が煩雑になって処理時間が増大する。スイッチが大容量化すると、１フレームに与えることができる処理時間は短くなるので、処理が間に合わなくなる可能性がある。
【０００７】
また、バッファ用メモリのリンクのための情報を保持する必要があるので、リンク用のメモリ容量を別途確保することになる。リンク用のメモリをバッファ用メモリとは別のメモリチップとして配置すると、実装面積および実装ピン数が増大してしまう。
【０００８】
さらに、前記の方法は、ＡＴＭセルなどの固定長フレームの収容を想定している。Ｅｔｈｅｒｎｅｔ（登録商標）フレームなどの可変長フレームを扱う場合、最大フレーム長に合わせてメモリブロックを用意すると、短フレームを格納する場合にメモリの使用効率が低下するので、フレーム長による影響を低減する必要がある。これらは実装時に制限となり得る。
【０００９】
従って、本発明は、Ｅｔｈｅｒｎｅｔ（登録商標）フレームなどの可変長フレームに対して、帯域使用量および遅延時間の点で公平な読出しを実現し、メモリの使用効率を高くし、かつリンクによる管理よりも高速化することができるフレームバッファ管理回路を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明によれば、１以上のコネクションを収容し、コネクションごとにＦＩＦＯ型のデータ構造を有し、全コネクション間で共用するメモリを動的に個別のコネクション用バッファとして割当および開放を行うフレームバッファ管理回路において、
入力されたフレームに対して、フレームヘッダ部に記録されている属性情報又は事前に与えられる設定値に基づいて、振分先のバッファを決定するフレーム振分手段と、
メモリブロックの集合として構成され、入力されたフレームの実体を格納するフレーム蓄積手段と、
コネクション用バッファを構成し、フレーム蓄積手段の一部であるメモリブロックをポインタにより指示および管理し、ＦＩＦＯ型のデータ構造を有するバッファ用メモリブロックアドレス管理手段と、
コネクション用バッファの先頭位置および後尾位置をポインタにより指示および管理するキュー管理手段と、
フレーム蓄積手段において使用していないメモリブロックをポインタにより指示および管理する空きメモリブロック管理手段と、
コネクション用バッファに収容するフレームの長さを保持するフレーム長管理手段と、
バッファのフレーム蓄積状態に関する情報に基づいて、操作対象となるフレームと蓄積または読出または廃棄のいずれかの操作を実行するかを判別する蓄積／読出／廃棄判別手段と、
フレーム蓄積手段からフレームを読出すフレーム読出手段と、
バッファにフレームを格納しきれなくなったときにフレームを廃棄するフレーム廃棄手段とを有することを特徴とする。
【００１１】
本発明のフレームバッファ管理回路における他の実施形態によれば、バッファの管理単位を単一コネクションの代わりに、コネクション群または方路またはこれらの組合わせとして扱うコネクショングループ情報管理手段を備えることも好ましい。
【００１２】
また、本発明のフレームバッファ管理回路における他の実施形態によれば、各コネクションが１以上のＱｏＳクラス又はポートごとにバッファを保持および管理するマルチバッファ管理手段を備え、マルチバッファ管理手段は、コネクション内に１以上のＱｏＳクラスまたはポートを収容するバッファ用メモリブロック管理手段と、コネクション内に１以上のＱｏＳクラスまたはポートを収容するキュー管理手段を備えることも好ましい。
【００１３】
更に、本発明のフレームバッファ管理回路における他の実施形態によれば、バッファ用メモリブロックアドレス管理手段を構成する１以上のブロックをグループ化し、グループごとにバッファ用メモリブロックアドレス管理手段の一部として割当および開放を行う、アドレスグループ管理手段を備えることも好ましい。
【００１４】
更に、本発明のフレームバッファ管理回路における他の実施形態によれば、各コネクションのバッファ使用状況を監視するバッファ使用状況監視手段と、バッファ使用状況監視手段から取得した情報に基づいて、バッファ用メモリブロックアドレス管理手段で使用する最大キュー長を動的に決定する最大キュー長決定手段を備えることも好ましい。
【００１５】
更に、本発明のフレームバッファ管理回路における他の実施形態によれば、フレームバッファに収容するフレームの長さを、フレーム長管理手段の代わりに、フレーム蓄積手段に含まれるメモリブロック内にフレームの実体と併せて記録する拡張型フレーム蓄積手段を備えることも好ましい。
【００１６】
更に、本発明のフレームバッファ管理回路における他の実施形態によれば、優先的に廃棄するフレームを選択する優先廃棄フレーム選択手段を備えることも好ましい。
【００１７】
また、本発明によれば、１以上のコネクションを収容し、コネクションごとにＦＩＦＯ型のデータ構造を有し、全コネクション間で共用するメモリを動的に個別のコネクション用バッファとして割当および開放を行うフレームバッファ管理方法において、
入力されたフレームに対して、フレームヘッダ部に記録されている属性情報又は事前に与えられる設定値に基づいて、振分先のバッファを決定するフレーム振分ステップと、
メモリブロックの集合として構成され、入力されたフレームの実体を格納するフレーム蓄積ステップと、
コネクション用バッファを構成し、ＦＩＦＯ型のデータ構造であって、一部であるメモリブロックをポインタにより指示および管理するバッファ用メモリブロックアドレス管理ステップと、
コネクション用バッファの先頭位置および後尾位置をポインタにより指示および管理するキュー管理ステップと、
使用していないメモリブロックをポインタにより指示および管理する空きメモリブロック管理ステップと、
コネクション用バッファに収容するフレームの長さを保持するフレーム長管理ステップと、
バッファのフレーム蓄積状態に関する情報に基づいて、操作対象となるフレームと蓄積もしくは読出または廃棄のいずれかの操作を実行するかを判別する蓄積／読出／廃棄判別ステップと、
蓄積されたフレームを読出すフレーム読出ステップと、
バッファにフレームを格納しきれなくなったときにフレームを廃棄するフレーム廃棄ステップとを有することを特徴とする。
【００１８】
本発明のフレームバッファ管理方法における他の実施形態によれば、バッファの管理単位を単一コネクションの代わりに、コネクション群もしくは方路またはこれらの組合わせとして扱うコネクショングループ情報管理ステップを有することも好ましい。
【００１９】
また、本発明のフレームバッファ管理方法における他の実施形態によれば、各コネクションが１以上のＱｏＳクラス又はポートごとにバッファを保持および管理するマルチバッファ管理ステップを有し、マルチバッファ管理ステップは、コネクション内に１以上のＱｏＳクラスまたはポートを収容するバッファ用メモリブロック管理ステップと、コネクション内に１以上のＱｏＳクラスまたはポートを収容するキュー管理ステップとを備えることも好ましい。
【００２０】
更に、本発明のフレームバッファ管理方法における他の実施形態によれば、バッファ用メモリブロックアドレス管理手段を構成する１以上のブロックをグループ化し、グループごとにバッファ用メモリブロックアドレス管理手段の一部として割当および開放を行う、アドレスグループ管理ステップを有することも好ましい。
【００２１】
更に、本発明のフレームバッファ管理方法における他の実施形態によれば、各コネクションのバッファ使用状況を監視するバッファ使用状況監視ステップと、バッファ使用状況監視ステップから取得した情報に基づいて、バッファ用メモリブロックアドレス管理ステップで使用する最大キュー長を動的に決定する最大キュー長決定ステップを有することも好ましい。
【００２２】
更に、本発明のフレームバッファ管理方法における他の実施形態によれば、フレームバッファに収容するフレームの長さを、フレーム長管理ステップの代わりに、蓄積されたメモリブロック内にフレームの実体と併せて記録する拡張型フレーム蓄積ステップを備えることも好ましい。
【００２３】
更に、本発明のフレームバッファ管理方法における他の実施形態によれば、優先的に廃棄するフレームを選択する優先廃棄フレーム選択ステップを備えることも好ましい。
【発明の効果】
【００２４】
本発明のフレームバッファ管理回路によれば、論理的な個別ＦＩＦＯ型バッファを構成することで、Ｅｔｈｅｒｎｅｔ（登録商標）フレームなどの可変長フレームに対して、帯域使用量および遅延時間の点で公平な読出しを実現可能としながら、コネクション間でメモリを共用することによりメモリの使用効率を高くする。共用するメモリの使用率を監視して最大キュー長を制限することで、特定コネクションがメモリを占有することを防止する。個別ＦＩＦＯ型バッファの構成要素をキューによって管理することで、リンクによる管理よりも簡易化、高速化する。優先度に基づく廃棄操作を行うことで、優先度の高いフレームの廃棄を防止することが可能となる。
【発明を実施するための最良の形態】
【００２５】
以下、図面を用いて、本発明の実施例について詳細に説明する。
【００２６】
＜請求項１に係る発明に基づく実施例１＞
実施例１は、論理的な個別ＦＩＦＯ型バッファを構成することで、帯域使用量および遅延時間の点で公平な読出しを実現可能としながら、コネクション間でメモリを共用することにより使用効率を高くし、かつ個別ＦＩＦＯ型バッファ管理をキューによって行うことで簡易化し、リンクによる管理よりも高速化することを特徴とする。
【００２７】
図１は、フレームバッファ管理回路の構成図である。
【００２８】
フレームバッファ管理回路１は、フレーム振分部１０１、フレーム蓄積部１０２、蓄積／読出／廃棄判別部１０３、バッファ用メモリブロックアドレス管理部１０４、キュー管理部１０５、空きメモリブロック管理部１０６、フレーム長管理部１０７、フレーム読出部１０９及びフレーム廃棄部１１０から構成される。
【００２９】
フレームバッファ管理回路１に入力されたフレームは、フレーム振分部１０１でヘッダ部に記載されるフレーム情報を読出し、フレーム蓄積部１０２に蓄積される。フレーム蓄積部１０２に蓄積されたフレームは、蓄積／読出／廃棄判別部１０３からの命令により、フレーム読出部１０９でフレーム出力されるか、またはフレーム廃棄部１１０でフレーム廃棄される。
【００３０】
蓄積／読出／廃棄判別部１０３は、フレーム振分部１０１からフレーム入力またはフレームバッファ管理回路外のからの読出命令をトリガとして、フレーム蓄積部１０２に蓄積するフレームの処理方法を決定する。フレーム処理方法を決定するために、フレーム振分部１０１からはフレーム情報が取得され、空きメモリブロック管理部１０６からはバッファ使用状況情報が取得され、バッファ用メモリブロックアドレス管理部１０４からは個別ＦＩＦＯ型バッファのメモリ蓄積状況の情報が取得される。蓄積／読出／廃棄判別部１０３がフレームの処理方法を決定した場合には、バッファ用メモリブロックアドレス管理部１０４に個別ＦＩＦＯ型バッファの状態変更を反映させる。
【００３１】
バッファ用メモリブロックアドレス管理部１０４は、キュー管理部１０５と連携して個別ＦＩＦＯ型バッファの状態を管理する。
【００３２】
蓄積／読出／廃棄判別部１０３からの命令により、フレーム蓄積部１０２の状態が変化する場合には、空きメモリブロック管理部１０６およびフレーム長管理部１０７と連携してメモリブロックの状態を管理する。
【００３３】
図２は、論理的なフレームバッファ管理回路の構成図である。
【００３４】
フレームバッファ管理回路１は、フレーム振分部１０１、個別ＦＩＦＯ型バッファ及びフレーム読出部１０９により構成される。
【００３５】
フレームバッファ管理回路１に入力したフレームは、フレーム振分部１０１で収容する個別ＦＩＦＯ型バッファを選択する。各々の個別ＦＩＦＯ型バッファは、論理的に独立したバッファとして振舞う。フレーム読出部１０９は、個別ＦＩＦＯ型バッファから優先制御や重み付きラウンドロビン制御によりフレームの読出しを行う。
【００３６】
個別ＦＩＦＯ型バッファは、図１におけるフレーム蓄積部１０２のメモリブロックにより構成されるが、メモリブロックはコネクション間で共用するため、各々の個別ＦＩＦＯ型バッファの最大キュー長は、フレームの蓄積状況によって動的に変化する。
【００３７】
図３は、図１に基づく各機能のバッファ構成図である。
【００３８】
フレーム蓄積部１０２、バッファ用メモリブロックアドレス管理部１０４、キュー管理部１０５、空きメモリブロック管理部１０６及びフレーム長管理部１０７はそれぞれ、図３に示すように、メモリ上に構成する。フレーム蓄積部１０２は、固定長（例えば５１２ｂｙｔｅ）のメモリブロックにより構成する。
【００３９】
図４は、フレーム蓄積部と収容フレームとの関係を示す説明図である。
【００４０】
各々のメモリブロックには、フレームの実体(Payload)を格納する。格納するフレームの長さがメモリブロック長よりも長い場合には分割して、複数のメモリブロックを使用する。メモリブロックの境界と格納するフレームの境界が一致しない場合には、空きをパディングで埋める。なお、パディングとしている領域は、特定パターン値の他に不定値(Don't care)で埋めても良い。
【００４１】
図５は、フレーム蓄積部とバッファ用メモリアドレス管理部の関係を示す説明図である。
【００４２】
バッファ用メモリブロックアドレス管理部１０４は、フレーム蓄積部１０２のメモリブロックを指示するポインタにより構成する。バッファ用メモリブロックアドレス管理部１０４内のポインタは、連続した複数のブロックとしてまとめ、各々コネクションに関連付ける。例えば、図３（ｂ）のアドレス＃１〜＃ｑまでのポインタは、コネクション＃１（ＩＤ＃１）に関連付けている。同一コネクションに関連付けられたポインタは、キュー（ＦＩＦＯ）型のデータ構造として扱う。
【００４３】
キュー管理部１０５は、バッファ用メモリブロックアドレス管理部１０４における各コネクションごとのキューの範囲を指示するもので、その先頭を示すポインタ(Head)と後尾を示すポインタ(Tail)の組により構成する。このキュー両端を示すポインタの組の数は、バッファ用メモリブロックアドレス管理部において関連付けたキュー数（コネクション数）と同数になる。
【００４４】
図６は、バッファ長メモリブロックアドレス管理部とキュー長管理部の関係を示す説明図である。
【００４５】
バッファ用メモリブロックアドレス管理部１０４の各キューにおいて使用中の領域が変化すると、それに合わせてキュー長管理部１０５のポインタの値が変化する。バッファ用メモリブロックアドレス管理部１０４のコネクションごとのキューを構成するバッファは、リング状に連続しているものとして扱う。このため、図６（ｄ）のように、キュー長管理部１０５の２つのポインタに格納するアドレスの大小関係が逆転する（Tail＜Head）こともある。この場合には、物理的なメモリ配置において後尾のポインタ（図６（ｄ）ではアドレス＃ｑ）の後に先頭のポインタ（図６（ｄ）ではアドレス＃１）が続くものとして扱う。
【００４６】
図７Ａ及び図７Ｂは、フレーム蓄積部と空きメモリブロック管理部の関係を示す説明図である。
【００４７】
空きメモリブロック管理部１０６は、フレーム蓄積部１０２のメモリブロックと同数のポインタにより構成する。空きメモリブロックは、スタック（ＦＩＬＯ：First In Last Out）型のデータ構造として扱い、現在の使用位置を指示するためにスタックポインタを用意する。空きメモリブロックのポインタは、フレーム蓄積部１０２の使用していないメモリブロックを指示する。図７Ａ（ｂ）に示すように、フレーム入力によりメモリブロックを使用する場合には、空きメモリブロック管理部１０６が指示するメモリブロックを順に使用し、スタックポインタを移動させる。図７Ｂ（ｃ）に示すように、フレーム出力によりメモリブロックを開放する場合には、開放したメモリブロックのアドレスを空きメモリブロック管理部１０６の空き領域に順に記録し、スタックポインタを移動させる。
【００４８】
なお、実施例１では、空きメモリブロック管理部をスタック型のデータ構造としたが、バッファ用メモリブロックアドレス管理部のようにHeadおよびTailの２つのポインタを用いて、キュー型のデータ構造とすることもできる。
【００４９】
図８は、フレーム蓄積部とフレーム長管理部の関係を示す説明図である。
【００５０】
フレーム長管理部１０７は、フレーム蓄積部１０２のメモリブロックと同数のデータ領域により構成する。メモリブロックにフレームを格納している場合には、フレーム蓄積部１０２とフレーム長管理部１０７は、同一アドレスの位置に関連する情報を格納する。例えば、フレーム蓄積部のアドレス＃ｘ＋１に関するフレーム長情報は、フレーム長管理部のアドレス＃ｘ＋１に格納する。フレーム長管理部１０７のデータ領域には、関連付けられたフレーム蓄積部１０２に格納されるフレームのフレーム長情報を格納する。フレーム長情報としては、例えば、該当するメモリブロック先頭からフレーム後尾までの長さなどを格納する。この方法では、フレームがメモリブロック長を超えているために分割された場合でも、フレーム終端を構成するメモリブロックを判別できる。さらに任意のメモリブロックの位置から残りのフレーム長を判別することができる。また、フレーム長情報を表す他の方法として、フラグ終端を示すフラグとメモリブロック内に占めるフレーム実体の長さという組合せとすることもできる。
【００５１】
図９は、フレームバッファ管理回路におけるフレーム入出力時のフローチャートである。
【００５２】
図９（ａ）フレーム入力時のフローを説明する。
（Ｓ１）フレームが入力される
（Ｓ２）フレーム振分部は、入カフレームを収容するバッファ用メモリブロック管理部を選択し、フレーム情報を蓄積／読出／廃棄判別部に送る。
（Ｓ３）蓄積／読出／廃棄判別部は、バッファ用メモリブロックアドレス管理部に空きがあるか確認し、空きがなければ、（Ｓ８）入力フレームを廃棄する。
（Ｓ４）蓄積／読出／廃棄判別部は、空きメモリブロック管理部に対して、フレーム蓄積部に空きがあるか確認する。
（Ｓ５）フレーム蓄積部に空きがない場合、蓄積／読出／廃棄判別部は、バッファ用メモリブロックアドレス管理部が保持するコネクションごとの個別キュー情報を参照して、廃棄すべきフレームを決定する。入カフレームが廃棄対象となっている場合は、（Ｓ８）入カフレームを廃棄する。
（Ｓ６）他コネクションのフレームを廃棄すべきである場合には、該当フレームを廃棄する。
（Ｓ７）空きメモリブロック管理部から、空いているメモリブロックのアドレスを読出す。
（Ｓ８）読出したアドレスをキーとして、フレーム長管理テーブルにフレーム長情報を書込む。
（Ｓ９）フレーム蓄積部内の空きメモリブロックサイズを上限としてフレームの内容を書込む。
（Ｓ１０）バッファ用メモリブロックアドレス管理部のキュー情報を更新する。
（Ｓ１１）該当メモリブロックが扱うのが入力フレームの後尾か判別し、後尾であれば終了、後尾でなければ（Ｓ７）から続きのフレームの蓄積処理を行う。
【００５３】
続いて、図９（ｂ）フレーム出力時のフローを説明する。
フレーム読出命令が蓄積／読出／廃棄判別部に与えられると、
（Ｓ１）バッファ用メモリブロックアドレス管理部から、フレームが記録されているフレーム蓄積部内のアドレスを読出す。
（Ｓ２）フレーム長管理テーブルからフレーム長情報を読出す。
（Ｓ３）フレーム蓄積部内のメモリブロックから、メモリブロックサイズを上限として分割したフレームの内容を読出す。
（Ｓ４）読出したアドレスをキーとして、バッファ用メモリブロックアドレス管理部のキュー情報を更新する。
（Ｓ５）空きメモリブロック管理部に、不要なメモリブロックのアドレスを書込み、空きメモリブロックとする。
（Ｓ６）該当メモリブロックが扱うのが出力フレームの後尾か判別し、後尾でなければ（１）から続きのフレームの読出処理を行う。
（Ｓ７）分割したフレームから元のフレームを再構成する。
（Ｓ８）再構成したフレームを出力する。
【００５４】
実施例１における他の実施形態として、蓄積するフレームがメモリブロックよりも大きいため、フレームを複数のメモリブロックに分割して管理する場合に、メモリブロック内に設けたポインタを用いてフレームを構成するメモリブロックを指示することによって接続するものがある。
【００５５】
図１０は、フレームを複数メモリブロックに分割するときの管理方法の説明図である。
【００５６】
図１０（ａ）は、実施例１にて説明した方法で、分割したメモリブロック１つにつき、バッファ用メモリブロックアドレス管理部１０４のポインタを１つ使用する。言い換えれば、１フレームを構成するメモリブロック数が多ければ、バッファ用メモリブロックアドレス管理部１０４のポインタを多数使用する。
【００５７】
これに対して、図１０（ｂ）では、バッファ用メモリブロックアドレス管理部１０４のポインタは、フレームの先頭に相当するメモリブロックを指示するが、それ以降のメモリブロックは、先頭のメモリブロック内に設けたポインタによって指示する。これにより、１フレームを構成するメモリブロック数には関わらず、１フレームに対して使用するバッファ用メモリブロックアドレス管理部のポインタを１つとすることができる。
【００５８】
１フレームを構成するメモリブロックの最大数が小さい場合には、フレーム先頭のメモリブロック内のポインタ領域を固定的に確保しても良いが、１フレームを構成するメモリブロックの最大数が大きくなる場合には、フレーム長によって必要分だけ動的にポインタ領域を設ける方が、メモリの有効利用の観点から有利である。
【００５９】
同様に、図１０（ｃ）では、フレームを構成するメモリブロックをメモリブロック内に設けたポインタによって指示する。この構成では、フレームを構成するメモリブロックの数が増大しても、メモリブロックにおけるポインタの領域の比率は変わらないので、動的にポインタ領域を設ける必要がない。よって、図１０（ｂ）よりもメモリブロックの管理を簡易化できる。
【００６０】
この実施形態の構成を適用することにより、バッファ用メモリブロックアドレス管理部１０４がフレーム先頭のメモリブロックのみを指示することにより、バッファ用メモリブロックアドレス管理部１０４の規模縮小とメモリブロックの管理を簡易化する効果がある。
【００６１】
＜請求項２に係る発明の実施例２＞
実施例２は、図２に示す個別ＦＩＦＯ型バッファに収容および管理する単位を、単一コネクションに限定するのではなく、コネクション群もしくは方路またはこれらの組合せとして扱うことを特徴とする。
【００６２】
コネクションを識別する手段としては、例えばＥｔｈｅｒｎｅｔ（登録商標）フレームならＭＡＣ(Media Access Control)アドレスやＶＬＡＮ(Virtual LAN)タグ、ＡＴＭ(Asynchronous Transfer Mode)セルならＶＰＩ(Virtual Path Identifier)／ＶＣＩ(Virtual Channel Identifier)を用いることができる。また、装置に実装される物理ポートに関連付けることもできる。
【００６３】
前述の手段により識別したコネクションを個別にバッファヘ収容することもできるが、場合によっては複数のコネクションをグループ化して扱うこともある。コネクションをグループ化したときには、コネクション群として単一コネクションと同等に扱い、同一の個別ＦＩＦＯ型バッファに収容する。
【００６４】
図１１は、コネクションのグループ化に対応したフレームバッファ管理回路の構成図である。
【００６５】
図１１は、図１と比較して、コネクショングループ情報管理部１１１を備える部分が異なる。入力されたフレームが保持するコネクション情報と、コネクショングループ情報管理部が保持するコネクションとグループの対応情報を参照することにより、コネクションのグループ化を実現する。
【００６６】
本実施例の構成を適用することにより、扱うコネクション（群）数を削減し、回路規模を縮小する効果がある。
【００６７】
＜請求項３に係る発明の実施例３＞
実施例３は、図２に示す個別ＦＩＦＯ型バッファに収容および管理する単位を、コネクションごとに設定する１以上のＱｏＳクラスまたはポートごととして扱うことを特徴とする。
【００６８】
図１２は、コネクション内にマルチバッファを備えるフレームバッファ管理回路の構成図である。
【００６９】
図１２は、図１と比較して、バッファ用メモリブロックアドレス管理部１１２０とキュー管理部１１２１とを、マルチクラスまたはマルチポートに対応させたマルチバッファ管理部を備える部分が異なる。
【００７０】
図１３は、コネクション内にマルチクラスを収容するバッファ用メモリブロックアドレス管理部のメモリ構成図である。図１４は、コネクション内にマルチクラスを収容するキュー管理部のメモリ構成図である。それぞれ図３（ｂ）および（ｃ）のものと比較すると、各コネクション内にクラス別の領域が設けられている部分が異なる。
【００７１】
図１５は、論理的なフレームバッファ管理回路の構成図である。クラスごとに個別ＦＩＦＯ型バッファを割当てることで、図１５（ａ）および（ｂ）に示すように、クラスごとまたはコネクションごとに階層化して帯域の割当を行うことができる。
【００７２】
図１５（ａ）の構成とした場合、割当可能な全帯域をコネクションごとに分配し、分配された帯域をコネクション内のクラス間で分配する。つまり、コネクションに対する帯域分配をクラスに対する帯域分配より優先させる。これにより、例えば後段のフレーム読出部にラウンドロビン読出しや重付きラウンドロビン読出しを適用すれば、コネクション間の帯域割当に関する公平性を保ちながら、クラス間の帯域割当を行うことができる。
【００７３】
図１５（ｂ）の構成とした場合、割当可能な全帯域をクラスごとに分配し、分配された帯域を該当するクラスを有するコネクション間で分配する。つまり、クラスに対する帯域分配をコネクションに対する帯域分配より優先させる。これにより、例えば後段のフレーム読出部に優先読出しを適用すれば、フレームバッファ管理回路内における各コネクションの同一クラスの総和（図１５（ｂ）の破線で囲んだ範囲）に対して、帯域割当に関する優先度を設定できるし、後段のフレーム読出部にラウンドロビン読出しや重み付きラウンドロビン読出しを適用すれば、最大帯域や保証帯域を設定できる。
【００７４】
本実施例の構成を適用することにより、扱うコネクションが、異なる帯域設定パラメータを有する複数のＱｏＳクラスの収容を可能とする効果がある。
【００７５】
なお、図１３および図１４では、各コネクションに割当てるクラス数が同一になっているが、クラス数はコネクションごとに異なっていても良い。
【００７６】
＜請求項４に係る発明の実施例４＞
実施例４は、バッファ用メモリブロックアドレス管理部内の複数のポインタをグループ化したものをアドレスグループとすると、このアドレスグループの使用領域を動的に割当てることを特徴とする。
【００７７】
図１６は、バッファ用メモリブロックアドレス管理部のアドレスグループ化に対応したフレームバッファ管理回路の構成図である。
【００７８】
図１６は、図１と比較して、アドレスグループ管理部１１３を備える部分が異なる。アドレスグループ管理部１１３は、アドレスグループの割当および開放を管理する。
【００７９】
図１７は、ポインタのグループ化による動的にバッファ長を変更するバッファ用メモリブロックアドレス管理部のメモリ構成図である。
【００８０】
実施例４では、バッファ用メモリブロックアドレス管理部を複数に分割し、メモリブロックを指示するための１つ以上のポインタ(Pointer)と、グループを接続するポインタ(Next)とをグループ化する。バッファ用メモリブロックアドレス管理部１０４は、必要に応じてグループ単位でバッファを動的に割当／開放する。各コネクションにフレーム入力があり、新たなバッファが必要になる場合には、グループ単位で割当を行い、バッファに追加する。フレーム出力があり、バッファを構成するグループの中にすべてのポインタが未使用の状態になっている場合には、未使用のグループをバッファから開放し、他のコネクション用のバッファとして使用できるようにする。
【００８１】
図１８は、フレーム蓄積部とグループ化したバッファ用メモリアドレス管理部とキュー長管理部の関係を示す説明図である。
【００８２】
バッファ用メモリアドレス管理部１０４がグループ化されている以外は、図６と同様である。各グループを連結するためには、グループに含まれるグループ接続用ポインタ(Next)を使用する。グループ接続用ポインタは、次に接続するグループのＩＤを指示する。後方にグループが接続されていない場合には、グループ接続用ポインタに終端を表す値（例えばNULL）を格納する。
【００８３】
図１９Ａ及び図１９Ｂは、フレーム入出力時のフローチャートである。
【００８４】
図１９Ａ（ａ）はフレーム入力時のフローである。図９（ａ）と比較して、（Ｓ４）および（Ｓ５）が追加されている部分が異なる。図１９Ｂ（ｂ）はフレーム出力時のフローである。図９（ｂ）と比較して、（Ｓ６）および（Ｓ７）が追加されている部分が異なる。
【００８５】
実施例４の構成を適用することにより、バッファ用メモリブロックアドレス管理部１０４の各個別ＦＩＦＯ型バッファの最大長を伸ばすことができるので、フレーム蓄積部１０２に空きがあるにも関わらず、バッファ用メモリブロックアドレス管理部１０４に空きがないために発生するフレームの廃棄を抑制する。つまり、バッファ用メモリブロックアドレス管理部１０４の使用効率を向上させる効果がある。
【００８６】
なお、実施例４では、バッファ用メモリブロックアドレス管理部１０４にNextポインタを用意することにより、単方向のグループ間のリンクを行ったが、双方向のリンク、または別途グループ管理用のテーブルを用いても良い。
【００８７】
＜請求項５に係る発明の実施例５＞
実施例５は、図２に示す各コネクションの個別ＦＩＦＯ型バッファ使用状況を監視し、使用状況に基づいて個別ＦＩＦＯ型バッファの最大キュー長を可変とすることを特徴とする。
【００８８】
図２０は、最大キュー長を変動可能なフレームバッファ管理回路の構成図である。
【００８９】
図２０は、図１と比較して、バッファ使用状況監視部１１４および最大キュー長決定部１１５を備えることが異なる。蓄積／読出／廃棄判別部１０３からバッファ用メモリブロックアドレス管理部１０４に対してフレーム入出力を命令された場合、バッファ用メモリブロックアドレス管理部１０４は、バッファ使用状況監視部１１４に対してフレーム入出力情報を通知する。バッファ使用状況監視部１１４は、各コネクションの現在の個別ＦＩＦＯ型バッファにおけるキュー状態を保持する。バッファ使用状況監視部１１４には、あらかじめ最大キュー長を変化させる条件を設定しておく。この条件を満たした場合、最大キュー長決定部１１５に対して通知する。最大キュー長決定部１１５は、この通知を受けると、反映すべき最大キュー長を決定し、バッファ用メモリブロックアドレス管理部１０４に最大キュー長情報を通知する。バッファ用メモリブロックアドレス管理部１０４は、通知されたキュー長情報を反映し、この値を超えてコネクションの個別ＦＩＦＯ型バッファのキューが伸長しないように制御する。
【００９０】
最大キュー長決定部が最大キュー長を更新するための条件としては、例えば、ある時刻におけるバッファ（メモリブロック）使用量に関する閾値の超過／非超過、または一定時間におけるバッファ（メモリブロック）総使用量に関する閾値の超過／非超過がある。
【００９１】
実施例５の構成を適用することにより、特定のコネクションが偏在的にメモリブロックを使用して、他のコネクションがメモリブロックを使用することを妨げてしまい割当帯域が不公平になることを抑止する効果がある。
【００９２】
＜請求項６に係る発明の実施例６＞
実施例６は、図３（ｅ）に示すフレーム長管理部を図３（ａ）に示すフレーム蓄積部に統合し、拡張型フレーム長管理部を備えることを特徴とする。
【００９３】
図２１は、拡張型フレーム蓄積部の構成図である。
【００９４】
フレーム長管理部１０７は、対応するフレーム蓄積部１０２に格納しているフレームの長さを格納する。フレーム長を格納するのに必要なメモリ領域はたかだか数バイトである。フレーム蓄積部１０２のメモリブロックのメモリ領域はＥｔｈｅｒｎｅｔ（登録商標）フレームを格納することを考えると１５００Ｂｙｔｅ程度、最大フレーム長を２〜１０程度の部分に分割しても１００Ｂｙｔｅのオーダとなる。よって、フレーム蓄積部１０２にフレーム長を格納するフィールドを追加しても、フレーム蓄積部１０２に対して容量や収容可能なメモリブロック数の点で与える影響は小さい。
【００９５】
一方、フレーム蓄積部１０２とフレーム長管理部１０７とを統合することにより、実装するメモリチップ数を削減することができる。実装するメモリチップ数を削減することにより、メモリチップに対してアクセスするためのピン数を減らすことができるため、実装の自由度が拡大する。
【００９６】
フレームの実体とフレーム長の２つの情報は常に対にして扱うため、これらを統合して管理することにより、個別に管理するのに比べて制御を簡易化できる。
【００９７】
実施例６の構成を適用することにより、メモリ管理を簡易化し、物理的な実装の自由度を拡大する効果がある。
【００９８】
＜請求項７に係る発明の実施例７＞
実施例７は、コネクションやフレームの属性により廃棄優先度を設け、優先的に廃棄するフレームを選択することを特徴とする。
【００９９】
図２２は、優先廃棄を実現するフレームバッファ管理回路の構成図である。
【０１００】
図２２は、図１と比較して、優先廃棄フレーム選択部１１６を備えることが異なる。また、優先廃棄フレーム選択のための情報を収集する目的で、バッファ使用状況監視部１１４を備えることもできる。フレームバッファ管理回路１にフレーム入力があると、蓄積／読出／廃棄判別部１０３が入カフレームの処理方法を判別するが、フレーム蓄積部１０２のメモリブロックに空きがない場合には、入力されたフレームまたは既に蓄積しているフレームのいずれかを廃棄する。
【０１０１】
廃棄対象のフレームを決定するには、フレームまたはコネクションの属性のみにより廃棄対象のフレームを判別する場合と、フレームまたはコネクションの属性に加え、バッファ使用状況情報を加味して廃棄対象のフレームを判別する場合がある。各場合の動作について、以下に例を示す。
【０１０２】
フレームの属性により廃棄対象のフレームを決定する場合には、判断のための情報としてフレーム内の優先度情報、例えば優先度付きのＶＬＡＮタグに設定するプライオリティビット情報やＩＰパケットのＴＯＳ(Type of Service)情報などを用いることができる。入力されたフレームの優先度と蓄積されているフレームの優先度を管理しておき、新たに入力されたフレームの優先度が低ければそのまま廃棄するが、入力されたフレームの優先度が高ければ蓄積フレームの中の低優先フレームから廃棄する。
【０１０３】
コネクションの属性により廃棄対象のフレームを決定する場合には、コネクションに設定した優先クラス情報などを用いることができる。帯域保証型のクラスとベストエフォート型のクラスがある場合、ベストエフォート型のクラスの方が優先度が低い。よって低優先のベストエフォート型クラスのフレームから先に廃棄される。
【０１０４】
上記に述べた静的な情報に、バッファ使用状況情報を加味して廃棄フレームを判断する場合、廃棄対象フレームはトラフィック状況により動的に変化する。
【０１０５】
例えば、コネクションごとのバッファにおけるメモリブロック使用量の多寡を基に判断を行って、メモリブロック使用量の多いコネクションから先に廃棄を行う。または、計測時間を基準として遡る一定時間内に使用したメモリブロック量を基に判断することもできる。
【０１０６】
実施例７の構成を適用することにより、低優先フレームを優先的に廃棄することで、高優先フレームの廃棄を防止するなどの優先サービスを提供可能とする効果、動的に負荷の高いコネクションのフレームから廃棄することで、パワーユーザなどの一部ユーザが共用バッファのリソースを寡占的に使用し、他ユーザのスループット低下の原因となることを防止するなど、コネクション間の公平性を確保する効果がある。
【図面の簡単な説明】
【０１０７】
【図１】フレームバッファ管理回路の構成図である。
【図２】論理的なフレームバッファ管理回路の構成図である。
【図３】図１に基づく各機能のバッファ構成図である。
【図４】フレーム蓄積部と収容フレームとの関係を示す説明図である。
【図５】フレーム蓄積部とバッファ用メモリアドレス管理部の関係を示す説明図である。
【図６】バッファ長メモリブロックアドレス管理部とキュー長管理部の関係を示す説明図である。
【図７Ａ】フレーム蓄積部と空きメモリブロック管理部の関係を示す説明図である。
【図７Ｂ】フレーム蓄積部と空きメモリブロック管理部の関係を示す説明図である。
【図８】フレーム蓄積部とフレーム長管理部の関係を示す説明図である。
【図９】フレームバッファ管理回路におけるフレーム入出力時のフローチャートである。
【図１０】フレームを複数メモリブロックに分割するときの管理方法の説明図である。
【図１１】コネクションのグループ化に対応したフレームバッファ管理回路の構成図である。
【図１２】コネクション内にマルチバッファを備えるフレームバッファ管理回路の構成図である。
【図１３】コネクション内にマルチクラスを収容するバッファ用メモリブロックアドレス管理部のメモリ構成図である。
【図１４】コネクション内にマルチクラスを収容するキュー管理部のメモリ構成図である。
【図１５】論理的なフレームバッファ管理回路の構成図である。
【図１６】バッファ用メモリブロックアドレス管理部のアドレスグループ化に対応したフレームバッファ管理回路の構成図である。
【図１７】ポインタのグループ化による動的にバッファ長を変更するバッファ用メモリブロックアドレス管理部のメモリ構成図である。
【図１８】フレーム蓄積部とグループ化したバッファ用メモリアドレス管理部とキュー長管理部の関係を示す説明図である。
【図１９Ａ】フレーム入出力時のフローチャートである。
【図１９Ｂ】フレーム入出力時のフローチャートである。
【図２０】最大キュー長を変動可能なフレームバッファ管理回路の構成図である。
【図２１】拡張型フレーム蓄積部の構成図である。
【図２２】優先廃棄を実現するフレームバッファ管理回路の構成図である。
【符号の説明】
【０１０８】
１  フレームバッファ管理回路
１０１  フレーム振分部
１０２  フレーム蓄積部
１０３  蓄積／読出／廃棄判別部
１０４  バッファ用メモリブロックアドレス管理部
１０５  キュー管理部
１０６  空きメモリブロック管理部
１０７  フレーム長管理部
１０９  フレーム読出部
１１０  フレーム廃棄部
１１１  コネクショングループ情報管理部
１１２  マルチバッファ管理部
１１２０  マルチクラス／ポート化したバッファ用メモリブロックアドレス管理部
１１２１  マルチクラス／ポート化したキュー管理部
１１３  アドレスグループ管理部
１１４  バッファ使用状況監視部
【図１】
2005295443.tif 000003
【図２】
2005295443.tif 000004
【図３】
2005295443.tif 000005
【図４】
2005295443.tif 000006
【図５】
2005295443.tif 000007
【図６】
2005295443.tif 000008
【図７Ａ】
2005295443.tif 000009
【図７Ｂ】
2005295443.tif 000010
【図８】
2005295443.tif 000011
【図９】
2005295443.tif 000012
【図１０】
2005295443.tif 000013
【図１１】
2005295443.tif 000014
【図１２】
2005295443.tif 000015
【図１３】
2005295443.tif 000016
【図１４】
2005295443.tif 000017
【図１５】
2005295443.tif 000018
【図１６】
2005295443.tif 000019
【図１７】
2005295443.tif 000020
【図１８】
2005295443.tif 000021
【図１９Ａ】
2005295443.tif 000022
【図１９Ｂ】
2005295443.tif 000023
【図２０】
2005295443.tif 000024
【図２１】
2005295443.tif 000025
【図２２】
2005295443.tif 000026