(57)【特許請求の範囲】
【請求項１】
データパケットを一時的に蓄積するパケットバッファを有するバッファ装置において、
単位量データを読み出す権利となるトークンを一時的に蓄積するものであって、蓄積可能なトークン数を表すトークンバケットサイズが互いに異なる複数のトークンバケットと、
全てのトークンバケットについて同じ数の前記トークンを消費させる、前記トークンバケット毎のトークン消費制御手段と、
前記トークンバケットサイズが大きいほど、単位時間当たり生成されるトークン数を表すトークンレートが低くなるように設定された、前記トークンバケット毎のトークン生成手段と、
前記トークンバケットによって消費されたトークン数を計数し、トークンが空となっているトークンバケットについては負のトークン数を計数するトークン消費計数手段と、
消費されたトークン数に応じて、前記パケットバッファから前記データパケットを読み出すバッファ読出手段と
を有し、
単位時間毎に、蓄積されたトークン量が最も多いトークンバケットに基づいてトークン数が規制されることを特徴とするバッファ装置。
【請求項２】
単位時間毎に、全てのトークン消費制御手段が、各トークンバケットからトークンを消費すると共に、全てのトークン生成手段が、前記トークンレートに応じて前記トークンバケットにトークンを補充入力することを特徴とする請求項１に記載のバッファ装置。
【請求項３】
前記トークン消費計数手段は、前記トークン数が負である場合、前記トークンバケットにトークンが補充入力される毎に、負のトークン数を増分させることを特徴とする請求項１又は２に記載のバッファ装置。
【請求項４】
前記バッファ読出手段の最大読出レートに応じて、全てのトークンバケットについて、トークンを一度に消費できるトークン最大消費数を設定することを特徴とする請求項１から３のいずれか１項に記載のバッファ装置。
【請求項５】
前記トークンバケットは、
いずれか１つのトークンバケットに、トークン最大消費数以上のトークンが蓄積されている場合、全てのトークンバケットについてトークン最大消費数のトークンを消費し、
又は、
全てのトークンバケットについて、トークン最大消費数以上のトークンが蓄積されていない場合、蓄積しているトークン数が最も多いトークンバケットを選択し、そのトークンバケットに蓄積されているトークン数のトークンを、全てのトークンバケットについて消費する
ように制御されることを特徴とする請求項４に記載のバッファ装置。
【請求項６】
請求項１から５のいずれか１項に記載のバッファ装置を備え、データパケットを送信することを特徴とする通信装置。
【請求項７】
データパケットを一時的に蓄積するパケットバッファに対する読み出し制御としてコンピュータを機能させるプログラムにおいて、
単位量データを読み出す権利となるトークンを一時的に蓄積するものであって、蓄積可能なトークン数を表すトークンバケットサイズが互いに異なり、且つ、全てのトークンバケットについて同じ数の前記トークンが消費される複数のトークンバケットと、
前記トークンバケットサイズが大きいほど、単位時間当たり生成されるトークン数を表すトークンレートが低くなるように設定された、前記トークンバケット毎のトークン生成手段と、
前記トークンバケットによって消費されたトークン数を計数し、トークンが空となっているトークンバケットについては負のトークン数を計数するトークン消費計数手段と、
消費されたトークン数に応じて、前記パケットバッファから前記データパケットを読み出すバッファ読出手段と
してコンピュータを機能させ、
単位時間毎に、蓄積されたトークン量が最も多いトークンバケットに基づいてトークン数が規制されることを特徴とするバッファ用の読出制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トークンバケットを用いたバッファ装置及びプログラムに関する。
【背景技術】
【０００２】
データパケットのバッファ読出制御について、「トークンバケット」方式がある。トークンバケット方式は、データパケットを蓄積したパケットバッファからの読み出しを制御するための技術である。トークンとは、単位量データを読み出す権利をいう。トークンバケットとは、所定レートで生成されるトークンをバケットに一時的に蓄積するバッファをいう。トークンバケット内に蓄積されたトークンを消費した際に、そのトークン数に応じたデータパケットが、パケットバッファから出力される。
【０００３】
図１は、従来技術におけるバッファ装置の機能構成図である。
【０００４】
図１によれば、バッファ装置１は、パケットバッファ１０と、バッファ読出部１１と、トークンバケット１２と、トークン生成部１３と、トークン消費制御部１４とを有する。これら機能構成部は、バッファ装置（例えばバッファ部を有する通信装置）に搭載されたコンピュータを機能させるプログラムを実行することによって実現できる。
【０００５】
パケットバッファ１０は、データパケットを一時的に蓄積する。バッファ読出部１１は、トークンバケット１２によって消費されたトークン数に応じて、パケットバッファ１０からデータパケットを読み出して出力する。トークンバケット１２は、トークンを一時的に蓄積するものであって、蓄積可能なトークン数を表すバッファサイズ（以下「トークンバケットサイズ」という）を有する。トークン生成部１３は、所定レート（単位時間当たりのトークン数、以下「トークンレート」という）でトークンを生成し、トークンバケット１２へ補充入力する。トークン消費制御部１４は、トークンバケット１２によって消費させるトークン数を制御する。
【０００６】
トークンバケットを用いたバッファ読出制御については、トークンバケット１２のトークンバケットサイズと、トークン生成部１３によって生成されるトークンレートとを、どのように設定するかが問題となる。
【０００７】
従来、トークンバケットは、制御対象となるトラヒック種別毎に備えるのが一般的であった。バッファ読出制御について、複数のトークンバケットを備える技術がある（例えば特許文献１参照）。この技術は、複数のトラヒック種別について、そのトラヒック種別毎に単一のトークンバケットを割り当てたものである。
【０００８】
トークンバケットにおけるトークンバケットサイズ及びトークンレートを、ネットワークの混雑度に応じて動的に変化させる技術もある（例えば特許文献２、３及び４参照）。この技術によれば、トラヒック種別毎に単一のトークンバケットを備えており、トークンバケットサイズ及びトークンレートのパラメータ値は、動的に変更可能であって、ネットワークの混雑率等を考慮して適応的に制御することができる。
【０００９】
トークンバケットを用いたバッファ読出制御によれば、短期間に集中したバーストトラヒックの転送を許容しつつ、長期間の平均トラヒック量を規制することができる。許容可能なバーストトラヒック量は、トークンバケットサイズに依存し、長期間の平均トラヒック量は、トークンレートによって規制される。
【００１０】
ここで、バーストトラヒック量及び平均トラヒック量の両方のトレードオフを利用した、トラヒック種別毎の制御も重要となる。具体的には、トラヒック種別毎に、ネットワーク容量への影響を考慮して、許容可能なバーストトラヒック量を抑えて平均トラヒック量を高くしたり、逆に平均トラヒック量を抑えてバーストトラヒック量を高くしたりする。
【００１１】
【特許文献１】特開２００７−０４９５９１号公報
【特許文献２】特開２００７−１８９５９２号公報
【特許文献３】特開２００７−２２１５２９号公報
【特許文献４】特開２００７−０９７０４５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかしながら、前述した従来技術によれば、トークンバケットについて、トークンバケットサイズ及びトークンレートの両パラメータを、予め適切な値に決定する必要がある。そのためには、トラヒックの特性を一定期間観測し又は予測し、バーストトラヒック量又は平均トラヒック量のいずれを重視するかを判断しなければならない。その上で、トークンバケットサイズ及びトークンレートを決定する。従って、トラヒック特性を特定できない場合、トークンバケットサイズ及びトークンレートを適切な値に決定できないという課題がある。
【００１３】
例えば通信ネットワークについては、その多様化によって、トラヒック種別毎に細かいトラヒック制御が要求される。一方で、スケーラビリティの観点からも、トラヒック種別毎のトラヒック特性を把握することは難しく、トークンバケットサイズ及びトークンレートの適切な値を特定することは難しい。
【００１４】
従って、本発明は、トークンバケットサイズ及びトークンレートのパラメータを予め設定することなく、パケットバッファからの読み出しを柔軟に規制することができるバッファ装置及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明によれば、データパケットを一時的に蓄積するパケットバッファを有するバッファ装置において、
単位量データを読み出す権利となるトークンを一時的に蓄積するものであって、蓄積可能なトークン数を表すトークンバケットサイズが互いに異なる複数のトークンバケットと、
全てのトークンバケットについて同じ数のトークンを消費させる、トークンバケット毎のトークン消費制御手段と、
トークンバケットサイズが大きいほど、単位時間当たり生成されるトークン数を表すトークンレートが低くなるように設定された、トークンバケット毎のトークン生成手段と、
トークンバケットによって消費されたトークン数を計数し、トークンが空となっているトークンバケットについては負のトークン数を計数するトークン消費計数手段と、
消費されたトークン数に応じて、パケットバッファからデータパケットを読み出すバッファ読出手段と
を有し、
単位時間毎に、蓄積されたトークン量が最も多いトークンバケットに基づいてトークン数が規制されることを特徴とする。
【００１６】
本発明のバッファ装置における他の実施形態によれば、単位時間毎に、全てのトークン消費制御手段が、各トークンバケットからトークンを消費すると共に、全てのトークン生成手段が、トークンレートに応じてトークンバケットにトークンを補充入力することも好ましい。
【００１７】
本発明のバッファ装置における他の実施形態によれば、トークン消費計数手段は、トークン数が負である場合、トークンバケットにトークンが補充入力される毎に、負のトークン数を増分させることも好ましい。
【００１８】
本発明のバッファ装置における他の実施形態によれば、バッファ読出手段の最大読出レートに応じて、全てのトークンバケットについて、トークンを一度に消費できるトークン最大消費数を設定することも好ましい。
【００１９】
本発明のバッファ装置における他の実施形態によれば、トークンバケットは、
いずれか１つのトークンバケットに、トークン最大消費数以上のトークンが蓄積されている場合、全てのトークンバケットについてトークン最大消費数のトークンを消費し、
又は、
全てのトークンバケットについて、トークン最大消費数以上のトークンが蓄積されていない場合、蓄積しているトークン数が最も多いトークンバケットを選択し、そのトークンバケットに蓄積されているトークン数のトークンを、全てのトークンバケットについて消費する
ように制御されることも好ましい。
【００２０】
本発明によれば、通信装置であって、前述された本発明のバッファ装置を備え、データパケットを送信することを特徴とする。
【００２１】
本発明によれば、データパケットを一時的に蓄積するパケットバッファに対する読み出し制御としてコンピュータを機能させるプログラムにおいて、
単位量データを読み出す権利となるトークンを一時的に蓄積するものであって、蓄積可能なトークン数を表すトークンバケットサイズが互いに異なり、且つ、全てのトークンバケットについて同じ数のトークンが消費される複数のトークンバケットと、
トークンバケットサイズが大きいほど、単位時間当たり生成されるトークン数を表すトークンレートが低くなるように設定された、トークンバケット毎のトークン生成手段と、
トークンバケットによって消費されたトークン数を計数し、トークンが空となっているトークンバケットについては負のトークン数を計数するトークン消費計数手段と、
消費されたトークン数に応じて、パケットバッファからデータパケットを読み出すバッファ読出手段と
してコンピュータを機能させ、
単位時間毎に、蓄積されたトークン量が最も多いトークンバケットに基づいてトークン数が規制されることを特徴とする。
【発明の効果】
【００２２】
本発明のバッファ装置及びプログラムによれば、異なるトークンバケットサイズ及びトークンレートを有する複数のトークンバケットを同時に用いることによって、両パラメータを予め設定することなく、パケットバッファからの読み出しを柔軟に規制することができる。
【発明を実施するための最良の形態】
【００２３】
以下では、図面を用いて、本発明を実施するための最良の形態について詳細に説明する。
【００２４】
図２は、本発明におけるバッファ装置の機能構成図である。
【００２５】
図２によれば、バッファ装置１は、３つのトークンバケット１２１、１２２及び１２３を有し、トークンバケット毎にトークン生成部１３１、１３２及び１３３を有する。第１のトークンバケット１２１のトークンバケットサイズは小さく、そのトークン生成部１３１によって生成されるトークンレートは高い。第２のトークンバケット１２２のトークンバケットサイズは中程度であり、そのトークン生成部１３２によって生成されるトークンレートも中程度である。第３のトークンバケット１２３のトークンバケットサイズは大きく、そのトークン生成部１３３によって生成されるトークンレートは低い。本発明における複数のトークンバケットは、トークンバケットサイズが大きいバケットほど、トークンレートが低くなるように設定されている。
【００２６】
また、バッファ装置１は、トークンバケット毎に、トークン消費計数部１５１、１５２及び１５３を更に有する。トークン消費計数部は、トークン数について正及び負の両方を計数する。トークンバケットにトークンが蓄積されている場合、正のトークン数を計数する。一方で、トークンバケットにトークンが空であっても、消費された負のトークン数を計数する。負のトークン数が計数されている場合に、トークンバケットにトークンが新たに補充入力されると、トークン消費計数部は、トークン数を、正の方向に増分する。
【００２７】
更に、トークンバケット毎のトークン消費制御部１４１、１４２及び１４３は、同じ数のトークンを同時に消費する。ここで、「トークン最大消費数」を設定する。トークン最大消費数は、バッファ読出部１１の最大読出レートに応じて、全てのトークンバケットから一度に消費できる最大のトークン数をいう。
【００２８】
本発明によれば、以下のような具体的な判断によって、トークンを消費する。
［判断１］いずれか１つのトークンバケットに、トークン最大消費数以上のトークンが蓄積されている場合、全てのトークンバケットについてトークン最大消費数のトークンを消費する。
［判断２］全てのトークンバケットについて、トークン最大消費数以上のトークンが蓄積されていない場合、蓄積しているトークン数が最も多いトークンバケットを選択する。そして、そのトークンバケットに蓄積されているトークン数のトークンを、全てのトークンバケットについて消費する。
（補足３）尚、全てのトークン生成部が所定のトークンレートで常に、トークンバケットにトークンを補充入力する限り、全てのトークンバケットについて全くトークンが蓄積されていない状態はありえないと考えられる。
【００２９】
バッファ読出部１１は、トークンバケット１２１、１２２及び１２３から出力されたトークン数に、１トークン当たりの読み出し権利の単位データ量（ビット数）を乗じた値に相当するパケット数を、パケットバッファ１０から読み出す。バッファ読出部１１は、トークンバケットについてトークン最大消費数のトークンが消費された場合、パケットバッファ１０から読み出されるデータパケットの量は、最大となる。
【００３０】
尚、バッファ装置のこれら機能構成部は、バッファ装置（例えばバッファ部を有する通信装置）に搭載されたコンピュータを機能させるプログラムを実行することによって実現できる。
【００３１】
図３は、本発明におけるトークンバケットの説明図である。
【００３２】
図３によれば、第１、第２及び第３のトークンバケットが表されており、トークンバケット内に蓄積された正のトークンと、トークンバケットは空であっても計数することができる負のトークンとが表されている。
【００３３】
例えば、具体的には以下のような数値例がある。尚、トークンバケットは、例えば１秒毎に同時に、トークンを消費するものとする。
トークン１個当たり１２０ｋビット（１２０ｋｂｐｓ）の出力権利
第１のトークンバケットサイズ：最大５個のトークンを蓄積可能
１２０ｋビット×  ５個＝６００ｋビット
第１のトークンレート        ：１秒当たり３個のトークンを補充入力
１２０ｋｂｐｓ×  ３個＝３６０ｋｂｐｓ
第２のトークンバケットサイズ：最大１０個のトークンを蓄積可能
１２０ｋビット×１０個＝１．２Ｍビット
第２のトークンレート：１秒当たり２個のトークンを補充入力
１２０ｋｂｐｓ×  ２個＝２４０ｋｂｐｓ
第３のトークンバケットサイズ：最大１５個のトークンを蓄積可能
１２０ｋビット×１５個＝１．８Ｍビット
第３のトークンレート：１秒当たり１個のトークンを補充入力
１２０ｋｂｐｓ×  １個＝１２０ｋｂｐｓ
【００３４】
前述の数値例に対応して、バッファ装置からの最大読出レートは、以下のようになる。
トークン最大消費数：６個
バッファ装置からの最大読出レート
＝トークン最大消費数×１トークンの出力権利
＝６個×１２０ｋビット
＝７２０ｋビット
【００３５】
図３によれば、以下で説明する図４〜図１５における初期状態が表されている。第１のトークンバケット１２１には、既に３個のトークンが蓄積されている。第２のトークンバケット１２２には、トークンバケットサイズ一杯の１０個のトークンが蓄積されている。第３のトークンバケット１２３には、既に１４個のトークンが蓄積されている。
【００３６】
尚、以下では、説明を容易にするために、パケットバッファに常に、データパケットがバッファされているものとしている。パケットバッファにデータパケットが蓄積されていない場合、勿論、トークンバケットに蓄積されたトークンは、消費されることはない。但し、トークンバケットに蓄積される最大のトークン数は、トークンバケットサイズである。
【００３７】
図４は、第１のトークンバケットの状態図である。
【００３８】
［判断１］が適用できる。第２及び第３のトークンバケットに、トークン最大消費数６個以上のトークンが蓄積されているので、全てのトークンバケットについてトークン最大消費数６個のトークンを消費する。
【００３９】
このとき、第１のトークンバケットは３個のトークンしか消費できず、第２及び第３のトークンバケットは６個のトークンを消費する。
第１のトークンバケットのトークン数＝  ＋３個−６個＝−３個（負のトークン数）
第２のトークンバケットのトークン数＝＋１０個−６個＝＋４個
第３のトークンバケットのトークン数＝＋１４個−６個＝＋８個
【００４０】
このとき、バッファ装置からの最大読出レートは、以下のようになる。
最大読出レート＝消費されたトークン数×１トークンの出力権利
＝６個×１２０ｋビット
＝７２０ｋビット
【００４１】
次に、トークンバケット毎に、トークン生成部からトークンが補充入力される。第１のトークンバケットには３個のトークンが補充入力され、第２のトークンバケットには２個のトークンが補充入力され、第３のトークンバケットには１個のトークンが補充入力される。
第１のトークンバケットのトークン数＝−３個＋３個＝  ０個
第２のトークンバケットのトークン数＝＋４個＋２個＝＋６個
第３のトークンバケットのトークン数＝＋８個＋１個＝＋９個
【００４２】
図５は、第２のトークンバケットの状態図である。
【００４３】
［判断１］が適用できる。第２及び第３のトークンバケットに、トークン最大消費数６個以上のトークンが蓄積されているので、全てのトークンバケットについてトークン最大消費数６個のトークンを消費する。
【００４４】
このとき、第１のトークンバケットはトークンを消費できず、第２及び第３のトークンバケットは６個のトークンを消費する。
第１のトークンバケットのトークン数＝  ０個−６個＝−６個
第２のトークンバケットのトークン数＝＋６個−６個＝  ０個
第３のトークンバケットのトークン数＝＋９個−６個＝＋３個
【００４５】
このとき、バッファ装置からの最大読出レートは、以下のようになる。
最大読出レート＝６個×１２０ｋビット
＝７２０ｋビット
【００４６】
次に、トークンバケット毎に、トークン生成部からトークンが補充入力される。
第１のトークンバケットのトークン数＝−６個＋３個＝−３個
第２のトークンバケットのトークン数＝  ０個＋２個＝＋２個
第３のトークンバケットのトークン数＝＋３個＋１個＝＋４個
【００４７】
図６は、第３のトークンバケットの状態図である。
【００４８】
［判断２］が適用できる。全てのトークンバケットについて、トークン最大消費数６個以上のトークンが蓄積されていないので、蓄積しているトークン数が最も多い第３のトークンバケットを選択する。そして、その第３のトークンバケットに蓄積されているトークン数４個のトークンを、全てのトークンバケットについて消費する。
【００４９】
このとき、第１のトークンバケットはトークンを消費できず、第２のトークンバケットは２個のトークンを消費でき、第３のトークンバケットは４個のトークンを消費する。
第１のトークンバケットのトークン数＝−３個−４個＝−７個
第２のトークンバケットのトークン数＝＋２個−４個＝−２個
第３のトークンバケットのトークン数＝＋４個−４個＝  ０個
【００５０】
このとき、バッファ装置からの最大読出レートは、以下のようになる。
最大読出レート＝４個×１２０ｋビット
＝４８０ｋビット
【００５１】
次に、トークンバケット毎に、トークン生成部からトークンが補充入力される。
第１のトークンバケットのトークン数＝−７個＋３個＝−４個
第２のトークンバケットのトークン数＝−２個＋２個＝  ０個
第３のトークンバケットのトークン数＝  ０個＋１個＝＋１個
【００５２】
図７は、第４のトークンバケットの状態図である。
【００５３】
［判断２］が適用できる。全てのトークンバケットについて、トークン最大消費数６個以上のトークンが蓄積されていないので、蓄積しているトークン数が最も多い第３のトークンバケットを選択する。そして、その第３のトークンバケットに蓄積されているトークン数１個のトークンを、全てのトークンバケットについて消費する。
【００５４】
このとき、第１及び第２のトークンバケットはトークンを消費できず、第３のトークンバケットは１個のトークンを消費する。
第１のトークンバケットのトークン数＝−４個−１個＝−５個
第２のトークンバケットのトークン数＝  ０個−１個＝−１個
第３のトークンバケットのトークン数＝＋１個−１個＝  ０個
【００５５】
このとき、バッファ装置からの最大読出レートは、以下のようになる。
最大読出レート＝１個×１２０ｋビット
＝１２０ｋビット
【００５６】
次に、トークンバケット毎に、トークン生成部からトークンが補充入力される。
第１のトークンバケットのトークン数＝−５個＋３個＝−２個
第２のトークンバケットのトークン数＝−１個＋２個＝＋１個
第３のトークンバケットのトークン数＝  ０個＋１個＝＋１個
【００５７】
図８は、第５のトークンバケットの状態図である。
【００５８】
［判断２］が適用できる。全てのトークンバケットについて、トークン最大消費数６個以上のトークンが蓄積されていないので、蓄積しているトークン数が最も多い第２又は第３のトークンバケットを選択する。そして、その第２又は第３のトークンバケットに蓄積されているトークン数１個のトークンを、全てのトークンバケットについて消費する。
【００５９】
このとき、第１のトークンバケットはトークンを消費できず、第２及び第３のトークンバケットは１個のトークンを消費する。
第１のトークンバケットのトークン数＝−２個−１個＝−３個
第２のトークンバケットのトークン数＝＋１個−１個＝  ０個
第３のトークンバケットのトークン数＝＋１個−１個＝  ０個
【００６０】
このとき、バッファ装置からの最大読出レートは、以下のようになる。
最大読出レート＝１個×１２０ｋビット
＝１２０ｋビット
【００６１】
次に、トークンバケット毎に、トークン生成部からトークンが補充入力される。
第１のトークンバケットのトークン数＝−３個＋３個＝  ０個
第２のトークンバケットのトークン数＝  ０個＋２個＝＋２個
第３のトークンバケットのトークン数＝  ０個＋１個＝＋１個
【００６２】
図９は、第６のトークンバケットの状態図である。
【００６３】
［判断２］が適用できる。全てのトークンバケットについて、トークン最大消費数６個以上のトークンが蓄積されていないので、蓄積しているトークン数が最も多い第２のトークンバケットを選択する。そして、その第２のトークンバケットに蓄積されているトークン数２個のトークンを、全てのトークンバケットについて消費する。
【００６４】
このとき、第１のトークンバケットはトークンを消費できず、第２のトークンバケットは２個のトークンを消費し、第３のトークンバケットは１個のトークンを消費する。
第１のトークンバケットのトークン数＝  ０個−２個＝−２個
第２のトークンバケットのトークン数＝＋２個−２個＝  ０個
第３のトークンバケットのトークン数＝＋１個−２個＝−１個
【００６５】
このとき、バッファ装置からの最大読出レートは、以下のようになる。
最大読出レート＝２個×１２０ｋビット
＝２４０ｋビット
【００６６】
次に、トークンバケット毎に、トークン生成部からトークンが補充入力される。
第１のトークンバケットのトークン数＝−２個＋３個＝＋１個
第２のトークンバケットのトークン数＝  ０個＋２個＝＋２個
第３のトークンバケットのトークン数＝−１個＋１個＝  ０個
【００６７】
図１０は、第７のトークンバケットの状態図である。
【００６８】
［判断２］が適用できる。全てのトークンバケットについて、トークン最大消費数６個以上のトークンが蓄積されていないので、蓄積しているトークン数が最も多い第２のトークンバケットを選択する。そして、その第２のトークンバケットに蓄積されているトークン数２個のトークンを、全てのトークンバケットについて消費する。
【００６９】
このとき、第１のトークンバケットは１個のトークンを消費し、第２のトークンバケットは２個のトークンを消費し、第３のトークンバケットはトークンを消費できない。
第１のトークンバケットのトークン数＝＋１個−２個＝−１個
第２のトークンバケットのトークン数＝＋２個−２個＝  ０個
第３のトークンバケットのトークン数＝  ０個−２個＝−２個
【００７０】
このとき、バッファ装置からの最大読出レートは、以下のようになる。
最大読出レート＝２個×１２０ｋビット
＝２４０ｋビット
【００７１】
次に、トークンバケット毎に、トークン生成部からトークンが補充入力される。
第１のトークンバケットのトークン数＝−１個＋３個＝＋２個
第２のトークンバケットのトークン数＝  ０個＋２個＝＋２個
第３のトークンバケットのトークン数＝−２個＋１個＝−１個
【００７２】
図１１は、第８のトークンバケットの状態図である。
【００７３】
［判断２］が適用できる。全てのトークンバケットについて、トークン最大消費数６個以上のトークンが蓄積されていないので、蓄積しているトークン数が最も多い第１又は第２のトークンバケットを選択する。そして、その第２のトークンバケットに蓄積されているトークン数２個のトークンを、全てのトークンバケットについて消費する。
【００７４】
このとき、第１及び第２のトークンバケットは２個のトークンを消費し、第３のトークンバケットはトークンを消費できない。
第１のトークンバケットのトークン数＝＋２個−２個＝  ０個
第２のトークンバケットのトークン数＝＋２個−２個＝  ０個
第３のトークンバケットのトークン数＝−１個−２個＝−３個
【００７５】
このとき、バッファ装置からの最大読出レートは、以下のようになる。
最大読出レート＝２個×１２０ｋビット
＝２４０ｋビット
【００７６】
次に、トークンバケット毎に、トークン生成部からトークンが補充入力される。
第１のトークンバケットのトークン数＝  ０個＋３個＝＋３個
第２のトークンバケットのトークン数＝  ０個＋２個＝＋２個
第３のトークンバケットのトークン数＝−３個＋１個＝−２個
【００７７】
図１２は、第９のトークンバケットの状態図である。
【００７８】
［判断２］が適用できる。全てのトークンバケットについて、トークン最大消費数６個以上のトークンが蓄積されていないので、蓄積しているトークン数が最も多い第１のトークンバケットを選択する。そして、その第１のトークンバケットに蓄積されているトークン数３個のトークンを、全てのトークンバケットについて消費する。
【００７９】
このとき、第１のトークンバケットは３個のトークンを消費し、第２のトークンバケットは２個のトークンを消費し、第３のトークンバケットはトークンを消費できない。
第１のトークンバケットのトークン数＝＋３個−３個＝  ０個
第２のトークンバケットのトークン数＝＋２個−３個＝−１個
第３のトークンバケットのトークン数＝−２個−３個＝−５個
【００８０】
このとき、バッファ装置からの最大読出レートは、以下のようになる。
最大読出レート＝３個×１２０ｋビット
＝３６０ｋビット
【００８１】
次に、トークンバケット毎に、トークン生成部からトークンが補充入力される。
第１のトークンバケットのトークン数＝  ０個＋３個＝＋３個
第２のトークンバケットのトークン数＝−１個＋２個＝＋１個
第３のトークンバケットのトークン数＝−５個＋１個＝−４個
【００８２】
図１３は、第１０のトークンバケットの状態図である。
【００８３】
［判断２］が適用できる。全てのトークンバケットについて、トークン最大消費数６個以上のトークンが蓄積されていないので、蓄積しているトークン数が最も多い第１のトークンバケットを選択する。そして、その第１のトークンバケットに蓄積されているトークン数３個のトークンを、全てのトークンバケットについて消費する。
【００８４】
このとき、第１のトークンバケットは３個のトークンを消費し、第２のトークンバケットは１個のトークンを消費し、第３のトークンバケットはトークンを消費できない。
第１のトークンバケットのトークン数＝＋３個−３個＝  ０個
第２のトークンバケットのトークン数＝＋１個−３個＝−２個
第３のトークンバケットのトークン数＝−４個−３個＝−７個
【００８５】
このとき、バッファ装置からの最大読出レートは、以下のようになる。
最大読出レート＝３個×１２０ｋビット
＝３６０ｋビット
【００８６】
次に、トークンバケット毎に、トークン生成部からトークンが補充入力される。
第１のトークンバケットのトークン数＝  ０個＋３個＝＋３個
第２のトークンバケットのトークン数＝−２個＋２個＝  ０個
第３のトークンバケットのトークン数＝−７個＋１個＝−６個
【００８７】
図１４は、第１１のトークンバケットの状態図である。
【００８８】
［判断２］が適用できる。全てのトークンバケットについて、トークン最大消費数６個以上のトークンが蓄積されていないので、蓄積しているトークン数が最も多い第１のトークンバケットを選択する。そして、その第１のトークンバケットに蓄積されているトークン数３個のトークンを、全てのトークンバケットについて消費する。
【００８９】
このとき、第１のトークンバケットは３個のトークンを消費し、第２及び第３のトークンバケットはトークンを消費できない。
第１のトークンバケットのトークン数＝＋３個−３個＝  ０個
第２のトークンバケットのトークン数＝  ０個−３個＝−３個
第３のトークンバケットのトークン数＝−６個−３個＝−９個
【００９０】
このとき、バッファ装置からの最大読出レートは、以下のようになる。
最大読出レート＝３個×１２０ｋビット
＝３６０ｋビット
【００９１】
次に、トークンバケット毎に、トークン生成部からトークンが補充入力される。
第１のトークンバケットのトークン数＝  ０個＋３個＝＋３個
第２のトークンバケットのトークン数＝−３個＋２個＝−１個
第３のトークンバケットのトークン数＝−９個＋１個＝−８個
【００９２】
図１５は、図４〜図１４における時刻経過に伴うスループットのグラフである。
【００９３】
最初に、第３のトークンバケットのトークンバケットサイズによって、スループットが抑制される。その後、時間経過と共に、第２のトークンバケット、次いで第１のトークンバケットの各トークンレートが適用される。第１のトークンバケットのトークンレートが適用されている間は、第２及び第３のトークンバケット内のトークン量は負となる。そして、パケットバッファが空になると、第１、第２及び第３の順に、トークンバケットにトークンが補充され始める。また、パケットバッファにデータパケットが蓄積されると、その時点でトークン量が最も多いトークンバケットのトークンレートに基づく規制が適用される。
【００９４】
以上、詳細に説明したように、本発明のバッファ装置及びプログラムによれば、異なるトークンバケットサイズ及びトークンレートを有する複数のトークンバケットを同時に用いることによって、両パラメータを予め設定することなく、パケットバッファからの読み出しを柔軟に規制することができる。即ち、トークンバケットサイズ及びトークンレートの異なるパラメータ値を適用することによって、トラヒック特性に適した制御パラメータが自動的に選択されることとなる。
【００９５】
前述した本発明の種々の実施形態において、本発明の技術思想及び見地の範囲の種々の変更、修正及び省略は、当業者によれば容易に行うことができる。前述の説明はあくまで例であって、何ら制約しようとするものではない。本発明は、特許請求の範囲及びその均等物として限定するものにのみ制約される。
【図面の簡単な説明】
【００９６】
【図１】従来技術におけるバッファ装置の機能構成図である。
【図２】本発明におけるバッファ装置の機能構成図である。
【図３】本発明におけるトークンバケットの説明図である。
【図４】第１のトークンバケットの状態図である。
【図５】第２のトークンバケットの状態図である。
【図６】第３のトークンバケットの状態図である。
【図７】第４のトークンバケットの状態図である。
【図８】第５のトークンバケットの状態図である。
【図９】第６のトークンバケットの状態図である。
【図１０】第７のトークンバケットの状態図である。
【図１１】第８のトークンバケットの状態図である。
【図１２】第９のトークンバケットの状態図である。
【図１３】第１０のトークンバケットの状態図である。
【図１４】第１１のトークンバケットの状態図である。
【図１５】図４〜図１４における時刻経過に伴うスループットのグラフである。
【符号の説明】
【００９７】
１  バッファ装置
１０  パケットバッファ
１１  バッファ読出部
１２、１２１、１２２、１２３  トークンバケット
１３、１３１、１３２、１３３  トークン生成部
１４、１４１、１４２、１４３  トークン消費制御部
１５１、１５２、１５３  トークン消費計数部
【図１】
0005107016.tif 000002
【図２】
0005107016.tif 000003
【図３】
0005107016.tif 000004
【図４】
0005107016.tif 000005
【図５】
0005107016.tif 000006
【図６】
0005107016.tif 000007
【図７】
0005107016.tif 000008
【図８】
0005107016.tif 000009
【図９】
0005107016.tif 000010
【図１０】
0005107016.tif 000011
【図１１】
0005107016.tif 000012
【図１２】
0005107016.tif 000013
【図１３】
0005107016.tif 000014
【図１４】
0005107016.tif 000015
【図１５】
0005107016.tif 000016