(57)【特許請求の範囲】
【請求項１】
予め定められたトークンカウンタ値の最大値であるトークンサイズを上限値として、予め定められた周期により加算されるトークンカウンタ値を記憶するトークンカウンタ記憶部を備え、当該トークンカウンタ記憶部に記憶される前記トークンカウンタ値に基づいてパケット送信を制御するトラヒックシェーピング装置であって、
予め定められたシフト値を記憶するシフト値記憶手段と、
前記トークンカウンタ値に加算値を加算する際に、当該トークンカウンタ値と、前記トークンサイズを前記シフト値により左シフト演算した値とを比較し、前記トークンカウンタ値の方が、前記トークンサイズを前記シフト値により左シフト演算した値よりも大きい場合に、前記トークンサイズを、前記トークンカウンタ値として前記トークンカウンタ記憶部に記憶させる第１の演算手段と、
前記パケットの送信要求を受信した場合に、前記トークンカウンタ値に基づいて、前記パケットの送信要求を行う制御手段と、
前記制御手段が前記パケットの送信要求を行った場合に、前記パケットのフレームサイズ値を前記シフト値により左シフト演算した値を、前記トークンカウンタ値から減算する第２の演算手段と、
を備えることを特徴とするトラヒックシェーピング装置。
【請求項２】
前記制御手段は、前記パケットの送信要求を受信した場合に、前記トークンカウンタ値が、前記パケットのフレームサイズ値を前記シフト値により左シフト演算した値以上である場合に、前記パケットの送信要求を行う
ことを特徴とする請求項１に記載のトラヒックシェーピング装置。
【請求項３】
前記制御手段は、前記パケットの送信要求を受信した場合に、前記トークンカウンタ値が、予め定められたトークンカウンタ値の初期値以上である場合に、前記パケットの送信要求を行う
ことを特徴とする請求項１に記載のトラヒックシェーピング装置。
【請求項４】
前記制御手段が、前記送信要求を行った後、予め定められた待機時間の間、新たなパケットの送信要求を受信しない場合に、前記トークンカウンタ記憶部に記憶されたトークンカウンタ値に初期値を記憶させる第３の演算手段と、
を備えることを特徴とする請求項１から請求項３のいずれか１項に記載のトラヒックシェーピング装置。
【請求項５】
予め定められたトークンカウンタ値の最大値であるトークンサイズを上限値として、予め定められた周期により加算されるトークンカウンタ値を記憶するトークンカウンタ記憶部に記憶される前記トークンカウンタ値に基づいてパケット送信を制御するトラヒックシェーピング方法であって、
第１の演算手段が、前記トークンカウンタ値に加算値を加算する際に、当該トークンカウンタ値と、前記トークンサイズを予め定められたシフト値により左シフト演算した値とを比較し、前記トークンカウンタ値の方が、前記トークンサイズを前記シフト値により左シフト演算した値よりも大きい場合に、前記トークンサイズを、前記トークンカウンタ値として前記トークンカウンタ記憶部に記憶させるステップと、
制御手段が、前記パケットの送信要求を受信した場合に、前記トークンカウンタ値に基づいて、前記パケットの送信要求を行うステップと、
第２の演算手段が、前記制御手段が前記パケットの送信要求を行った場合に、前記パケットのフレームサイズ値を前記シフト値により左シフト演算した値を、前記トークンカウンタ値から減算するステップと、
を備えることを特徴とするトラヒックシェーピング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信網におけるパケットの転送、出力を指定された帯域に制限し、かつ平滑化するトラヒックシェーピング装置および方法に関する。
【背景技術】
【０００２】
従来、通信網におけるパケットの転送、出力においては、送信要求されたパケットを指定された帯域に制限し、かつ平滑化してパケットを出力するトラヒックシェーピング（パケットシェーピング）装置が用いられている。例えば、特許文献１には、トークンバケツモデルおよびリーキバケツモデルを用いたトラヒックシェーピング装置（シェーパ）が開示されている。
【０００３】
このようなトークンバケツモデルまたはリーキバケツモデルのトラヒックシェーピング装置におけるトークンカウント方法としては、システムクロックを分周し、分周したタイミングで、トークンバケツにトークンカウント値を加算している。このとき、トークンカウント値が加算される頻度を示すトークンレートは，システムクロックをＣｌｋ、分周比をＮ、加算値をＴとすると、以下の式のようになる。
トークンレート＝８×Ｃｌｋ×Ｔ／Ｎ
上記式が示すように、トークンレートは、システムクロックを分周比Ｎで除算することで算出されるため、トークンレートが高い場合には粗くしか設定できず、また、低い場合には必要以上に密に設定されるという問題があった。
【０００４】
この問題を解決するために、特許文献２には、システムクロックを設定された分周比に分周し、分周されたシステムクロックをカウントして、カウントされたカウンタ値が予め設定された比較値以下の場合に分周されたクロックを出力し、一方、カウントされたカウンタ値が予め設定された比較値を超えた場合に分周されたクロックを出力しないことにより、単位時間あたりのトリガの生成を調整して、トークンレートの設定を行う方法が提案されている。
【０００５】
また、特許文献３には、このようなシェーパを多段的に複数備え、前段回路からのパケット送信要求と当該パケットのフレーム情報を受け取り、トークンの状態によって送信要求を後段回路に出力し、後段回路から受信したパケット受理信号を前段回路に出力する多段ＱｏＳモジュールが開示されている。
【特許文献１】特開２００７−０８８９９８号公報
【特許文献２】特開２００７−０８８９９４号公報
【特許文献３】特開２００５−３２３２３０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述の特許文献２に示す方法でも、分周されたクロックをカウントするカウンタ手段に設定された加算値により、周期的にクロックが出力と停止を繰り返すため、設定される値によりトークンレートの精度は上下するという問題がある。
【０００７】
本発明は、このような状況に鑑みてなされたもので、所望のトークンレートに対して高い精度でトークンレートを制御するトラヒックシェーピングが可能なトラヒックシェーピング装置を提供する。
【課題を解決するための手段】
【０００８】
上述の課題を解決するために、本発明は、予め定められたトークンカウンタ値の最大値であるトークンサイズを上限値として、予め定められた周期により加算されるトークンカウンタ値を記憶するトークンカウンタ記憶部を備え、トークンカウンタ記憶部に記憶されるトークンカウンタ値に基づいてパケット送信を制御するトラヒックシェーピング装置であって、予め定められたシフト値を記憶するシフト値記憶手段と、トークンカウンタ値に加算値を加算する際に、トークンカウンタ値と、トークンサイズをシフト値により左シフト演算した値とを比較し、トークンカウンタ値の方が、トークンサイズをシフト値により左シフト演算した値よりも大きい場合に、トークンサイズを、トークンカウンタ値としてトークンカウンタ記憶部に記憶させる第１の演算手段と、パケットの送信要求を受信した場合に、トークンカウンタ値に基づいて、パケットの送信要求を行う制御手段と、制御手段がパケットの送信要求を行った場合に、パケットのフレームサイズ値をシフト値により左シフト演算した値を、トークンカウンタ値から減算する第２の演算手段と、を備えることを特徴とする。
【０００９】
本発明は、上述の制御手段が、パケットの送信要求を受信した場合に、トークンカウンタ値が、パケットのフレームサイズ値をシフト値により左シフト演算した値以上である場合に、パケットの送信要求を行うことを特徴とする。
【００１０】
本発明は、上述の制御手段が、パケットの送信要求を受信した場合に、トークンカウンタ値が、予め定められたトークンカウンタ値の初期値以上である場合に、パケットの送信要求を行うことを特徴とする。
【００１１】
本発明は、上述の制御手段が、送信要求を行った後、予め定められた待機時間の間、新たなパケットの送信要求を受信しない場合に、トークンカウンタ記憶部に記憶されたトークンカウンタ値に初期値を記憶させる第３の演算手段と、を備えることを特徴とする。
【００１２】
本発明は、予め定められたトークンカウンタ値の最大値であるトークンサイズを上限値として、予め定められた周期により加算されるトークンカウンタ値を記憶するトークンカウンタ記憶部に記憶されるトークンカウンタ値に基づいてパケット送信を制御するトラヒックシェーピング方法であって、第１の演算手段が、トークンカウンタ値に加算値を加算する際に、トークンカウンタ値と、トークンサイズを予め定められたシフト値により左シフト演算した値とを比較し、トークンカウンタ値の方が、トークンサイズをシフト値により左シフト演算した値よりも大きい場合に、トークンサイズを、トークンカウンタ値としてトークンカウンタ記憶部に記憶させるステップと、制御手段が、パケットの送信要求を受信した場合に、トークンカウンタ値に基づいて、パケットの送信要求を行うステップと、第２の演算手段が、制御手段がパケットの送信要求を行った場合に、パケットのフレームサイズ値をシフト値により左シフト演算した値を、トークンカウンタ値から減算するステップと、を備えることを特徴とする。
【発明の効果】
【００１３】
以上説明したように、本発明によれば、予め定められた周期（Ｃｌｋ）により加算値（Ｔ）が加算されるトークンカウンタ値に基づいてパケット送信を制御するトラヒックシェーピング装置が、パケットの送信要求を受信した場合に、パケットのフレームサイズ値を予め定められたシフト値（Ｎ）により左シフト演算した値と、前記トークンカウンタ値とを比較して大小を判定し、トークンカウンタ値の方が大きいと判定された場合に、前記パケットを送信すると、前記フレームサイズ値を、トークンカウンタ値から減算するようにしたので、トークンレートの値の算出式を、トークンレート＝８×Ｃｌｋ×Ｔ／２Ｎとすることができ、従来と比べて精度の高いトークンレートによるトラヒックシェーピングを行うことが可能となる。
【００１４】
さらに、本発明によれば、パケットを送信した後、予め定められた待機時間の間、新たなパケットの送信要求を受信しない場合に、トークンカウンタ記憶部に記憶されたトークンカウンタ値に初期値を記憶させてトークンカウンタ値をリセットするようにしたので、リーキバケツモデルでのパケットの送受信の間隔が長い場合、その間もトークンカウンタ値には加算値が加算され、トークンカウンタ値が０以上となり、早い時点でのトークン加算の停止によるトークンレートの低下を抑え、所望するトークンレートを保つことが可能となる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の一実施形態について、図面を参照して説明する。
本発明の説明中で、Ｍ＜＜Ｎ（Ｍ、Ｎは任意の数）とは、Ｍの値をＮの値分左シフト演算を行うことを示す。また、本発明の説明中で、（条件）？（真値）：（偽値）とは、三項演算子であり、（条件）が真であれば（真値）をとり、（条件）が偽であれば（偽値）をとることを示す。また、本発明の説明中で、（条件Ａ）＝＝（条件Ｂ）とは、（条件Ａ）が示す条件と（条件Ｂ）が示す条件とが一致するか否かの判定を行い、一致すれば真とし、一致しなければ偽とする条件式を示す。また、本発明の説明中で、（条件Ａ）＆＆（条件Ｂ）とは、（条件Ａ）が示す条件と（条件Ｂ）が示す条件とのＡＮＤ（論理積）をとることを示す。
【００１６】
＜第１の実施形態＞
図１の（ａ）は、第１の実施形態によりトークンバケツモデルで動作するトラヒックシェーピング装置の構成を示すブロック図である。
トラヒックシェーピング装置１００は、トークンバケツモデルにより送信要求されたパケットの帯域を平滑化して出力し、トークンサイズ設定部１０１と、加算値設定部１０２と、トークンカウンタ１０３と、シフト値設定部１０４と、フレーム長設定部１０５と、演算部１０６と、制御部１０７とを備えている。
【００１７】
ここで、図２を参照して、トークンバケツモデルの処理概念を説明する。この図が示すようにトークンバケツモデルは、所望の帯域に合わせたレート（トークンレート）でトークンをトークンバケツに入れてゆき、予め定められたトークンサイズを最大とするトークンが蓄積される。
【００１８】
そして、フレームバッファからフレームの送出要求を得た場合、送出要求フレームのサイズと現在のトークンバケツに蓄積されているトークン量とが比較され、送出要求フレームのサイズよりもトークン量が少ない場合には、トークン量が送出要求フレームのサイズ以上になるまでフレームは送出されない。一方、トークン量が送出要求フレームのサイズ以上であれば、送出要求フレームが送出され、トークンバケツに蓄積されているトークンから送出されたフレームのサイズ（フレーム長）分のトークンを減算する。
【００１９】
図１に戻り、トークンサイズ設定部１０１は、トークンバケツに蓄積されるトークン量の最大値であるトークンサイズを記憶する。加算値設定部１０２は、トークンカウンタ１０３に加算する加算値（Ｔ）を記憶する。トークンカウンタ１０３は、トークンバケツに蓄積されているトークン量としてのトークンカウンタ値を記憶する。シフト値設定部１０４は、フレーム長とトークンカウンタ値とを比較する際に用いるシフト値を記憶する。フレーム長設定部１０５は、前段回路１０から入力されるフレームのサイズを記憶する。演算部１０６は、システムクロック周波数に合わせて、トークンカウンタ１０３に記憶されたトークンカウンタ値に、トークンサイズ設定部１０１に記憶されたトークンサイズを最大値として、加算値設定部１０２に記憶された加算値を加算するトークンカウント処理を実行する。図１の（ｂ）に、演算部１０６が行う比較処理を示す式を示す。
【００２０】
制御部１０７は、トラヒックシェーピング装置１００の各機能部の動作を制御する。図３は、本実施形態における制御部１０７の状態遷移を示す図である。制御部１０７は、ＩＤＬＥ（待機）、ＲｅｑＳｎｄ（後段回路２０へのパケット送信要求出力）、ＡｃｋＷａｉｔ（後段回路２０からのパケット受理信号待ち）、ＡｃｋＳｎｄ（後段回路２０からの受理信号を後段回路２０に送信）のうちいずれかの状態をとる。
【００２１】
制御部１０７の初期状態は、ＩＤＬＥである。ＩＤＬＥ状態にて、制御部１０７に、前段回路１０からフレーム送信要求が入力され、一定の条件を満たすと、制御部１０７は、ＲｅｑＳｎｄ状態に遷移する。制御部１０７は、ＲｅｑＳｎｄ状態に遷移すると、後段回路２０にフレームの送信要求を出力する。そして、制御部１０７は、ＡｃｋＷａｉｔ状態となり、後段回路２０からの応答を待つ。
【００２２】
制御部１０７は、ＡｃｋＷａｉｔ状態にて後段回路２０から受理信号を受信すると、ＡｃｋＳｎｄ状態となり、受理信号を前段回路１０に出力する。図１の（ｃ）に、制御部１０７が行う処理動作を示す式を示す。ここで、前段回路１０と後段回路２０とは、例えば、他のトラヒックシェーピング装置１００や、パケットの送信制御に関連する、パケットのキュー制御を行うキュー制御回路、パケットの優先制御、重み付け構成制御などを行うスケジューラ回路などである。
【００２３】
次に、図４を参照して、本発明によるトラヒックシェーピング装置１００が、トラヒックシェーピングを行う動作例を説明する。
ユーザは、トラヒックシェーピング装置１００の、トークンサイズ設定部１０１と、加算値設定部１０２と、シフト値設定部１０４とに、所定の値を記憶させておく。また、制御部１０７の初期状態はＩＤＬＥとする（ステップＳ５０１）。
【００２４】
演算部１０６は、トークンカウント処理を開始する。すなわち、演算部１０６は、一定周期で、トークンカウンタ１０３に記憶されたトークンカウンタ値（トークン量）を読み出し、加算値設定部１０２に記憶された加算値を、読み出したトークンカウンタ値に加算する。そして、演算部１０６は、トークンカウンタ値が、トークンサイズ設定部１０１に記憶されたトークンサイズをシフト値設定部１０４に記憶されたシフト値分左シフトした値より大きくなった場合は、トークンサイズ設定部１０１に記憶された値をシフト値分左シフトした値を、トークンカウンタ１０３にトークンカウンタ値として記憶させる。
【００２５】
一方、トークン量が、トークンサイズ設定部１０１に記憶されたトークンサイズをシフト値設定部１０４に記憶されたシフト値分左シフトした値より小さければ、上述のように、加算値を加算したトークンカウンタ値をトークンカウンタ１０３に記憶させる（ステップＳ５０２）。以降、演算部１０６は、ステップＳ５０２において説明したトークンカウント処理を実行し続ける。
【００２６】
制御部１０７は、前段回路１０からフレーム送信要求を受信するとともに、パケットのフレーム長を受信すると、フレーム長設定部１０５にフレーム長を記憶させ、トークンカウンタ１０３に記憶されたトークンカウンタ値を読み出すとともに、シフト値設定部１０４からシフト値を読み出す（ステップＳ５０３）。ここで、トークンカウンタ１０３に記憶されたトークンカウンタ値は、ステップＳ５０２にて、一定周期で、加算値が加算されている。
【００２７】
そして、制御部１０７は、読み出したトークンカウンタ値が、フレーム長設定部１０５に記憶されたフレーム長をシフト値分左シフトした値以上である（ＹＥＳ）か否（ＮＯ）かを判定する（ステップＳ５０４）。制御部１０７が、ステップＳ５０４の判定処理で、ＮＯと判定すれば、再度、トークンカウンタ１０３の値を読み出し、ステップＳ５０３とステップＳ５０４との処理を繰り返す。
【００２８】
一方、制御部１０７が、ステップＳ５０４の判定処理で、ＹＥＳと判定すれば、制御部１０７は、制御部１０７の状態をＩＤＬＥからＲｅｑＳｎｄに遷移させる（ステップＳ５０５）。すなわち、演算部１０６が、シフト値設定部１０４に記憶されたシフト値分フレーム長を左にシフトさせた値を算出し、加算値設定部１０２に記憶された加算値をトークンカウンタ１０３に記憶されたトークンカウンタ値に加算し、加算されたトークンカウンタ値からフレーム長をシフト値分左にシフトした値を減算し、減算した結果をトークンカウンタ１０３に記憶させる（ステップＳ５０６）。
【００２９】
そして、制御部１０７は、後段回路２０に送信要求を出力すると、制御部１０７の状態をＲｅｑＳｎｄからＡｃｋＷａｉｔに遷移させる（ステップＳ５０８）。制御部１０７は、後段回路２０から受理信号を受信すると、制御部１０７の状態をＡｃｋＷａｉｔからＡｃｋＳｎｄに遷移させる（ステップＳ５０８）。そして、制御部１０７は、前段回路１０に受理信号を出力すると、制御部１０７の状態をＡｃｋＳｎｄからＩＤＬＥに遷移させる（ステップＳ５０９）。以後、トラヒックシェーピング装置１００は、ステップＳ５０３からステップＳ５０９までの処理を繰り返す。
【００３０】
以上説明したように、本実施形態によれば、加算値をＴ、システムクロックをＣｌｋ、シフト値をＮとすると、トークンレートは以下の式で表される。
トークンレート＝８×Ｔ×Ｃｌｋ／２Ｎ
上式を用いると、トークンレートの設定ステップΔは、Δ＝８×（Ｔ＋１）×Ｃｌｋ／２Ｎ−８×Ｔ×Ｃｌｋ／２Ｎ＝８×Ｃｌｋ／２Ｎで表される。ここで、設定ステップΔは、シェーピングレートをつかさどるＴに無関係である。そのため、トラヒックシェーピング装置１００は、トークンレートの高低にかかわらず一定の設定ステップを取ることが出来る。また、上式が示すように、２Ｎで除算を行うことで、除算をシフト演算に変形することが出来るため、計算コストが低いという特長を持つ。
【００３１】
＜第２の実施形態＞
図５の（ａ）は、第２の実施形態によりリーキバケツモデルで動作するトラヒックシェーピング装置の構成を示すブロック図である。第２の実施形態によるトラヒックシェーピング装置２００は、第１の実施形態と同様の構成をしており、第１の実施形態と同様の構成・動作については、その説明を省略する。
【００３２】
トラヒックシェーピング装置２００は、リーキバケツモデルにより送信要求されたパケットの帯域を平滑化して出力し、トークンサイズ設定部２０１と、加算値設定部２０２と、トークンカウンタ２０３と、シフト値設定部２０４と、フレーム長設定部２０５と、演算部２０６と、制御部２０７とを備えている。ここで、リーキバケツモデルは、トークン量が正あるいは０である場合にフレームを送出するとともに、トークンバケツに蓄積されているトークンからフレーム長分のトークンを減算するシェーピングモデルである。
【００３３】
図６は、本実施形態における制御部２０７の状態遷移を示す図である。本実施形態による制御部２０７の状態遷移は、第１の実施形態とほぼ同様であるが、本実施形態では、制御部２０７の状態がＩＤＬＥからＲｅｑＳｎｄへ遷移する要因が、第１の実施形態と異なる。すなわち、第１の実施形態のトークンバケツモデルででは、後段回路２０に送信要求を出力する状態（ＲｅｑＳｎｄ）へ移行する条件が、トークンカウンタ値≧（フレーム長＜＜シフト値）であるのに対し、第２の実施形態のリーキバケツモデルの場合は、トークンカウンタ値≧０である。図５の（ｂ）に、制御部２０７が行う処理動作を示す式を示す。
【００３４】
次に、図７を参照して、本発明によるトラヒックシェーピング装置２００が、トラヒックシェーピングを行う動作例を説明する。ステップＳ６０１からステップＳ６０３までの動作は、第１の実施形態におけるステップＳ５０１からステップＳ５０３までの動作と同様である。そしてステップＳ６０３の後、制御部２０７が、トークンカウンタ２０３に記憶されたトークンカウンタ値を読み出し、読み出したトークンカウンタ値が０以上（ＹＥＳ）か否（ＮＯ）かを判定する（ステップＳ６０４）。
【００３５】
ステップＳ６０４の判定処理で、制御部２０７がＮＯと判定すれば、再度、トークンカウンタ１０３に記憶されたトークンカウンタ値を読み出し、ステップＳ６０３とステップＳ６０４とを繰り返す。
一方、ステップＳ６０４の判定処理で、制御部２０７がＹＥＳと判定すれば、第１の実施形態と同様に、制御部２０７の状態をＩＤＬＥからＲｅｑＳｎｄに遷移させ（ステップＳ６０５）、第１の実施形態と同様の動作を行う。
【００３６】
このように、第２の実施形態においても、第１の実施形態と同様、トークンレートを示す式は、トークンレート＝８×Ｔ×Ｃｌｋ／２Ｎとなり、従来の分周比で単に除算する場合の問題である、設定可能なトークンレートが高い場合、粗くなり、低い場合、必要以上に細かいという点を改善できる。
【００３７】
以上説明したように、第２の実施形態によれば、リーキバケツモデルによっても設定ステップΔを一定にすることができる。次に、本実施形態によるトラヒックシェーピング装置２００を、図８に示すような多段ＱｏＳモジュールにおけるシェーパとして用いる場合を考える。
【００３８】
図８に示す例では、トークンレートが２００Ｍｂｉｔ／ｓであるシェーパＡと、トークンレートが９０Ｍｂｉｔ／ｓであるシェーパＢと、トークンレートが１００Ｍｂｉｔ／ｓであるシェーパＣとを想定する。シェーパＡには、フレーム長１５００Ｂｙｔｅのパケットが入力され、シェーパＢには、フレーム長６４Ｂｙｔｅのパケットが入力される。スケジューラ回路２１は、予め定められた優先度に応じてパケットの出力を選択する。ここで、スケジューラ回路２１によって、シェーパＢの出力が、シェーパＡの出力よりも優先される。
【００３９】
図９は、図８におけるシェーパＡ、シェーパＢ、シェーパＣを動作させた場合の各シェーパのトークンカウンタ値を示す表である。ここで、各シェーパのシステムクロック周波数を４０ＭＨｚとしたトークン加算値を用いている。また、シフト量を１６ビットとして扱っているため実数であらわしている。図９に示される時刻の項は、システムクロックのクロック数を示す。
【００４０】
図９に示されるように、スケジューラ回路２１の出力先に接続されたシェーパＣのトークンレートが、スケジューラ回路２１の高優先入力に接続されているシェーパＢのトークンレートに近い場合、低優先入力のパケット出力時間中に高優先側に接続されているシェーパＢのトークンがいっぱいになってしまい、次の高優先入力が選択されるまで加算されなくなる（時刻４５６から時刻５００６まで）。
【００４１】
このため、指定されたレートでパケットをシェーピングできなくなる場合がある。図９に示されるように、シェーパＣのトークン加算量の累積は、時刻７２８０において２２７５Ｂｙｔｅである。よって２２７５Ｂｙｔｅ×８／（７２８０／４０ＭＨｚ）＝１００Ｍｂｉｔ／ｓとなり、システム全体のレートは１００Ｍｂｉｔ／ｓであり設定値どおりであるが、シェーパＢのトークン加算量の累計は、時刻７２８０において７６８７．８１２５Ｂｙｔｅである。そのため、７６７．８１２５×８／（７２８０／４０ＭＨｚ）＝３３．７６Ｍｂｉｔ／ｓとなり設定値とまったく異なるレートになってしまう。この原因は、先に示したようにトークンが加算されない期間が存在するためである。
【００４２】
このように、第２の実施形態では、制御部２０７の状態がＡｃｋＳｎｄの状態で前段回路１０に受理信号を出力した場合、制御部２０７の状態はＩＤＬＥに遷移する。ここで、図７のステップＳ６０２に示すように、前段回路１０から次の送信要求信号を受信するまでの間、演算部１０６は、トークンカウンタ２０３に記憶されたトークンカウンタ値は加算値設定部２０２に設定された加算値をトークンサイズ設定部２０１に設定されたトークンサイズになるまで加算し続ける。そして、トークンカウンタ２０３に記憶されたトークンカウンタ値は、トークンサイズ設定部２０１に記憶されたトークンサイズに達した時点で加算が行われなくなる。
【００４３】
＜第３の実施形態＞
図１０は、第３の実施形態によりリーキバケツモデルで動作するトラヒックシェーピング装置の構成を示すブロック図である。第３の実施形態によるトラヒックシェーピング装置３００は、第２の実施形態と同様の構成をしており、第２の実施形態と同様の構成・動作については、その説明を省略する。
【００４４】
本実施形態によるトラヒックシェーピング装置３００は、トークンサイズ設定部３０１と、加算値設定部３０２と、トークンカウンタ３０３と、シフト値設定部３０４と、フレーム長設定部３０５と、演算部３０６と、制御部３０７と、ウェイト値設定部３０８と、ウェイトカウンタ３０９とを備えている。
【００４５】
このように、第３の実施形態によるトラヒックシェーピング装置３００は、第２の実施形態によるトラヒックシェーピング装置２００に加え、ウェイト制御に関連する機能部が加えられている。ウェイト値設定部３０８は、ウェイト値の最大値（ＪｕｄｇｅＷａｉｔ）を記憶する。ウェイトカウンタ３０９は、ウェイト値（ＷａｉｔＣｎｔ）を記憶する。図１１は、本実施形態における制御部３０７の状態遷移を示す図である。本実施形態では、制御部３０７は、後段回路２０から受信信号を受信した後、ＴｉｍｅＷａｉｔの状態をとることが可能である。制御部３０７は、ＴｉｍｅＷａｉｔの状態では、ウェイト値設定部３０８に設定されたウェイト値の最大値が示す間、送信処理を待機する。
【００４６】
次に、図１２を参照して、本発明によるトラヒックシェーピング装置３００が、トラヒックシェーピングを行う動作例を説明する。
ユーザは、トークンサイズ設定部３０１、加算値設定部３０２、トークンカウンタ３０３、シフト値設定部３０４、ウェイト値設定部３０８に所定の値を記憶させておく。また制御部３０７の初期状態はＩＤＬＥとする（ステップＳ７０１）。演算部３０６は、トークンカウンタ３０３からトークンカウンタ値を読み出し、また、制御部３０７の状態を読み出し、制御部３０７の状態がＩＤＬＥで、かつ、トークンカウンタ≧０なら、トークンカウンタを０にリセットする。図１の（ｂ）には、演算部３０６が行う処理動作を表す式が示されている。
【００４７】
一方、演算部３０６は、制御部３０７の状態がＩＤＬＥではないか、または、トークンカウンタ＜０の場合には、加算値設定部３０２に設定された加算値をトークンカウンタ３０３のトークンカウンタ値に加算する。加算した結果、トークンカウンタ値がトークンサイズ設定部３０１に記憶された値をシフト値分左シフトした値より大きくなった場合は、トークンカウンタ３０３の値を、トークンサイズ設定部３０１に記憶された値をシフト債分左シフトした値に設定する（ステップＳ７０２）。
【００４８】
制御部３０７は、前段回路１０から送信要求を受信するとともに、パケットのフレーム長を受信すると、トークンカウンタ３０３の値を読み出し（ステップＳ７０３）、トークンカウンタ３０３の値が０以上（ＹＥＳ）か否（ＮＯ）かを判定する（ステップＳ７０４）。制御部３０７は、ステップＳ７０４でＮＯと判定した場合は、所定の周期で、トークンカウンタ３０３の値を読み出しステップＳ７０３とステップＳ７０４とを繰り返す。一方、制御部３０７は、ステップＳ７０でＹＥＳと判定した場合は、制御部３０７の状態をＩＤＬＥからＲｅｑＳｎｄに遷移させる（ステップＳ７０５）。
【００４９】
演算部３０６は、制御部３０７の状態がＲｅｑＳｎｄである場合、加算値設定部３０２に設定された加算値をトークンカウンタ３０３に記憶されたトークンカウンタ値に加算し、トークンカウンタ値から、シフト値設定部１０４に記憶されたシフト値分フレーム長を左にシフトした値を減算した算出結果をトークンカウンタ３０３にトークンカウンタ値として記憶させる（ステップＳ７０６）。
【００５０】
制御部３０７は、後段回路２０へ送信要求を出力すると、制御部３０７の状態をＲｅｑＳｎｄからＡｃｋＷａｉｔに遷移させる（ステップＳ７０７）。そして、制御部３０７が、後段回路２０から受理信号を受信すると、制御部３０７の状態をＡｃｋＷａｉｔからＡｃｋＳｎｄに遷移させる（ステップＳ７０８）。演算部３０６は、ウェイト値設定部３０８に記憶されたウェイトカウント最大値を、ウェイトカウンタ３０９にウェイトカウント値として記憶させる（ステップＳ７０９）。
【００５１】
次に、制御部３０７は、前段回路１０に受理信号を出力し、制御部１０７の状態をＡｃｋＳｎｄからＴｉｍｅＷａｉｔに遷移させる（ステップＳ７１０）。演算部３０６は、ウェイトカウンタ３０９に記憶されたウェイトカウント値を１減算する。演算部３０６は、ウェイトカウンタ３０９に記憶された値が０になるまで、所定の周期で減算処理を繰り返す（ステップＳ７１１、ステップＳ７１２）。
【００５２】
制御部３０７は、ウェイトカウンタ３０９に記憶された値が０であり、かつ、前段回路１０から送信要求を受信した場合は、ステップＳ７０２に戻り、以降の処理動作を繰り返す（ステップＳ７１３：ＹＥＳ）。制御部３０７は、ウェイトカウンタ３０９に記憶されたウェイトカウント値が０であり、前段回路１０から送信要求を受信しない場合（ステップＳ７１３：ＮＯ）は、制御部３０７の状態をＴｉｍｅＷａｉｔからＩＤＬＥに遷移させ、ステップＳ７０２に戻り、以降の処理動作を繰り返す（ステップＳ７１４）。
【００５３】
このように、第３の実施形態によれば、制御部３０７の状態がＡｃｋＳｎｄであり、前段回路１０に受理信号を出力した場合、制御部３０７の状態として、ＴｉｍｅＷａｉｔの状態を設け、このＴｉｍｅＷａｉｔの状態に遷移させ、ウェイト値設定部３０８に設定した値になるまで、前段からの次の送信要求の受信を待ち、設定した時間内に次の送信要求の受信がない場合に、制御部の状態をＩＤＬＥにするとともに、演算部３０６において、トークンカウンタ３０３に記憶されたトークンカウンタ値が０以上の場合には、トークンカウンタ値を０にリセットする。
【００５４】
例えば、以上説明したようなトラヒックシェーピング装置３００を、図１３に示したような多段ＱｏＳモジュールにおけるシェーパとして用いる場合を考える。ここで、シェーパＡ´、シェーパＢ´、シェーパＣ´はいずれも本実施形態におけるトラヒックシェーピング装置３００である。各シェーパのトークンレート、システムクロック周波数、フレーム長などの値は第２の実施形態において図８を用いた説明と同様である。
【００５５】
図１４は、図１３におけるシェーパＡ´、シェーパＢ´、シェーパＣ´を動作させた場合の各シェーパのトークンカウンタ値を示す表である。トラヒックシェーピング装置３００は、後段回路２０からの受理信号を受信し、前段回路１０に受理信号を送信し、もし次に送出すべき送信要求がある場合には、ウェイトカウンタ３０９に記憶されたウェイトカウンタ値が０になる前に前段回路１０から送信要求を受理する。
【００５６】
時刻「５００５」で、シェーパＣ´のトークンカウンタ値が０または正になるので、トラヒックシェーピング装置３００は、スケジューラ回路２１に要求信号を出力し、それに対して受理信号がその後戻ってくる。つまり、加算停止していた時刻「４５６」から時刻「５００６」の区間においてシェーパＢのトークンカウンタヘの加算は継続される。従って、前段回路からの次の送信要求の受信時のトークンカウンタの値は正常となり、指定されたレートでパケットをシェーピングすることが可能となる。
【００５７】
すなわち、演算部１０６は、時刻「４５６」の段階で加算停止せず、加算値設定部１０２に記憶された加算値をトークンカウンタ１０３に加算し続ける。これにより、時刻「７２８２」のときのシェーパＢ´のトークン累積値が２０４８．０６２５００であり、シェーパＢ´のトークンレートは、２０４８．０６２５×８／（７２８２／４０ＭＨｚ）＝９０Ｍｂｉｔ／ｓとなり、指定されたレートで正しくシェーピング動作をしていることがわかる。
【００５８】
ただし、演算部１０６は、加算を続けるままでは、トークンバケツモデルのようにバーストで送信要求を行うことを許容してしまうことになるので、ウェイト値が０になった場合、すなわち設定されたトークンレートより入力される送信要求速度が低い場合には、先の加算は必要ないので、トークンカウンタを０にする。
【００５９】
以上説明したように、本発明によるトラヒックシェーピング装置は、前段回路からの送信要求をフレーム長とともに受信し、トークンカウンタの値により決定される送信可能状態である場合に、送信要求を後段回路にフレーム長とともに送信し、後段回路から受理信号を受信した場合、前段回路に受理信号を送信する制御部を具備し、制御部の状態により加算値をトークンカウンタに加算し、トークンサイズよりトークンカウンタの値が大きくなったときトークンカウンタの値をトークンサイズにし、制御部が送信要求を後段に送信したときトークンサイズから送信したフレーム長を減算する演算部を具備する。
【００６０】
さらに、本発明は、トークンサイズおよびフレームサイズを指定されたシフト値により左シフトした値とトークンカウンタとを比較する演算部を具備する。また、前段回路に受理信号を送出した後、指定された待ち時間の間トークンカウンタを加算し続け、待ち時間経過しても前段回路からの送信要求がない場合、トークンカウンタ値をリセットする。
【００６１】
このように、本発明によれば、リーキバケツモデル時において、ウェイト制御機能を設け、後段回路に送信要求を出力して、後段回路から受理信号を受信し、前段回路に受理信号を出力してから、次の送信要求を受信するまでの時間を調整する待ち時間が経過するまでの間、トークンサイズに指定された値までトークンカウンタに加算値を加算し続け、待ち時間が経過しても送信要求信号の受信がない場合、トークンカウンタを０にする制御を行っている。このことにより、前段回路に受理信号を出力してから次の送信要求を受信するまでの時間がかかる場合、その間、トークンカウンタに加算値が加算されるため、トークンカウンタ値が０以上となり、早い時点でトークンの加算が停止する状況が発生し、そのため、トークンレートが下がり、指定されたレートでパケットをシェーピングできなくなるという問題を解消できる。
【００６２】
以上、本発明の実施の形態について説明した。本実施形態によるトラヒックシェーピング装置の各手段は、専用のハードウェア（例えば、ワイヤードロジック等）により実現されるが、メモリおよびＣＰＵ（中央処理装置）により構成され、各部の機能を実現するためのプログラムをメモリからロードして実行することによりその機能を実現させるものであってもよい。また、本発明における処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりトラヒックシェーピングを行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境（あるいは表示環境）を備えたＷＷＷシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００６３】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【図面の簡単な説明】
【００６４】
【図１】本発明の第１の実施形態によるトラヒックシェーピング装置の構成を示す図である。
【図２】トークンバケツを用いたトラヒックシェーピングの概念を示す図である。
【図３】本発明の第１の実施形態による制御部の状態遷移を示す図である。
【図４】本発明の第１の実施形態によるトラヒックシェーピング装置の動作例を示すフローチャートである。
【図５】本発明の第２の実施形態によるトラヒックシェーピング装置の構成を示す図である。
【図６】本発明の第２の実施形態による制御部の状態遷移を示す図である。
【図７】本発明の第２の実施形態によるトラヒックシェーピング装置の動作例を示すフローチャートである。
【図８】本発明の第２の実施形態によるトラヒックシェーピング装置の実施例を示す図である。
【図９】本発明の第２の実施形態によるトラヒックシェーピング装置の実施例によるトークンカウンタ値を示す図である。
【図１０】本発明の第３の実施形態によるトラヒックシェーピング装置の構成を示す図である。
【図１１】本発明の第３の実施形態による制御部の状態遷移を示す図である。
【図１２】本発明の第３の実施形態によるトラヒックシェーピング装置の動作例を示すフローチャートである。
【図１３】本発明の第３の実施形態によるトラヒックシェーピング装置の実施例を示す図である。
【図１４】本発明の第３の実施形態によるトラヒックシェーピング装置の実施例によるトークンカウンタ値を示す図である。
【符号の説明】
【００６５】
１０  前段回路
２０  後段回路
２１  スケジューラ回路
１００  トラヒックシェーピング装置
１０１  トークンサイズ設定部
１０２  加算値設定部
１０３  トークンカウンタ
１０４  シフト値設定部
１０５  フレーム長設定部
１０６  演算部
１０７  制御部
２００  トラヒックシェーピング装置
２０１  トークンサイズ設定部
２０２  加算値設定部
２０３  トークンカウンタ
２０４  シフト値設定部
２０５  フレーム長設定部
２０６  演算部
２０７  制御部
３００  トラヒックシェーピング装置
３０１  トークンサイズ設定部
３０２  加算値設定部
３０３  トークンカウンタ
３０４  シフト値設定部
３０５  フレーム長設定部
３０６  演算部
３０７  制御部
３０８  ウェイト値設定部
３０９  ウェイトカウンタ
【図１】
0004601657.tif 000002
【図２】
0004601657.tif 000003
【図３】
0004601657.tif 000004
【図４】
0004601657.tif 000005
【図５】
0004601657.tif 000006
【図６】
0004601657.tif 000007
【図７】
0004601657.tif 000008
【図８】
0004601657.tif 000009
【図９】
0004601657.tif 000010
【図１０】
0004601657.tif 000011
【図１１】
0004601657.tif 000012
【図１２】
0004601657.tif 000013
【図１３】
0004601657.tif 000014
【図１４】
0004601657.tif 000015