(57)【特許請求の範囲】
【請求項１】
高優先クラスキューおよびユーザごとに区分された低優先クラスキューのそれぞれに格納されたパケットの出力順序を決定するパケットスケジューラであって、
入力されたパケットの優先クラスおよびユーザを識別して前記高優先クラスキューまたは前記低優先クラスキューのいずれかのキューに振り分けるパケット振り分け制御部と、
前記高優先クラスキューから出力されるパケットのユーザおよびパケット長を通知するパケット長通知部と、
前記パケット長通知部から通知されたユーザおよびパケット長の各情報と、前記低優先クラスキューに格納されたパケットのパケット長と、ユーザごとに割り当てられた前記高優先クラスと前記低優先クラスとの合計帯域に応じて該ユーザごとに決定されたウェイト値と、に基づいて前記低優先クラスキューに格納されたパケットの出力完了予定時刻を該ユーザごとに所定のタイミングで算出するＷＦＱ制御部と、
前記低優先クラスキューに格納されて前記ＷＦＱ制御部を介して出力されるパケットおよび前記高優先クラスキューに格納されたパケットの中で、該高優先クラスキューに格納されたパケットを優先して出力するＰＱ制御部と、
を備え、
前記ＷＦＱ制御部は、先頭パケットが出力された低優先クラスキューに次に出力されるパケットが存在する場合、または、空であった低優先クラスキューに新たなパケットが到着した場合のいずれかのタイミングで前記出力完了予定時刻を算出することを特徴とするパケットスケジューラ。
【請求項２】
前記高優先クラスキューから所定ユーザのパケットがｍ個出力されるとき、ｍ番目のパケットが出力された時刻をｔｈ（ｍ）とし、（ｍ−１）番目までに高優先クラスキューから出力されたパケットによって該所定ユーザの低優先クラスに仮想的に溜まったものとして算出される仮想出力完了予定時刻をＶＦｉ（ｍ−１）とするとき、
前記ＷＦＱ制御部は、
前記高優先クラスキューから出力されたｍ番目のパケットの帯域分だけ前記所定ユーザの低優先クラスの優先度を下げるための基準時刻を、前記ＶＦｉ（ｍ−１）と前記ｔｈ（ｍ）との大小関係に基づいて決定することを特徴とする請求項１に記載のパケットスケジューラ。
【請求項３】
前記ＷＦＱ制御部は、
前記高優先クラスキューに格納されたパケットが該高優先クラスキューから出力された際に、当該出力パケットにかかる優先度を演算する演算手段と、
前記ユーザごとに高優先クラスのパケットの優先度を加算して保持する記憶手段と、
前記低優先クラスの各キューの先頭パケットの優先度を演算する手段と、
現在の時刻を保持するレジスタと、
前記高優先クラスのパケットの優先度の加算値と、前記低優先クラスの先頭パケットの優先度と、前記レジスタから出力される現在時刻とを加算する加算器と、
前記加算器の加算値に対応した前記低優先クラスキューに格納されているパケットのキュー情報を記憶するＦＩＦＯメモリと、
前記ＦＩＦＯメモリに格納されているキュー情報に基づいてパケット出力順序を決定するとともに、該ＦＩＦＯメモリに格納されているパケット長に基づいて出力タイミングを決定することを特徴とする請求項１に記載のパケットスケジューラ。
【請求項４】
前記ＷＦＱ制御部は、
前記高優先クラスキューに格納されたパケットが該高優先クラスキューから出力された際に、所定ユーザの低優先クラスキューにパケットが存在しない場合、該所定ユーザの高優先クラスの優先度を加算しないことを特徴とする請求項３に記載のパケットスケジューラ。
【請求項５】
高優先クラスキューおよびユーザごとに区分された低優先クラスキューのそれぞれに格納されたパケットの出力順序を決定するパケットスケジューリング方法であって、
入力されたパケットの優先クラスおよびユーザを識別して前記高優先クラスキューまたは前記低優先クラスキューのいずれかのキューに振り分けるパケット振り分けステップと、
前記高優先クラスキューから出力されるパケットのユーザおよびパケット長を通知するパケット長通知ステップと、
前記パケット長通知部から通知されたユーザおよびパケット長の各情報と、前記低優先クラスキューに格納されたパケットのパケット長の情報と、ユーザごとに割り当てられた前記高優先クラスと前記低優先クラスとの合計帯域に応じてユーザごとに決定されたウェイト値と、に基づいて前記低優先クラスキューに格納されたパケットの出力完了予定時刻を所定のタイミングで算出する出力完了予定時刻算出ステップと、
前記低優先クラスキューに格納されているパケットおよび前記高優先クラスキューに格納されたパケットの中で、該高優先クラスキューに格納されたパケットを優先して出力する出力ステップと、
を含み、 
前記出力完了予定時刻を算出する所定のタイミングが、先頭パケットが出力された低優先クラスキューに次に出力されるパケットが存在する場合、または、空であった低優先クラスキューに新たなパケットが到着した場合のいずれかであることを特徴とするパケットスケジューリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケットスケジューラに関するものであり、特に、パケット転送の際の帯域保証を効果的に行うパケットスケジューラおよびパケットスケジューリング方法に関するものである。
【背景技術】
【０００２】
パケットスケジューラにおいて、複数のユーザからのトラヒックが１つの回線に多重される場合、出力する回線速度以上の入力があると、輻輳が生じ、バッファ溢れによるパケット廃棄等が発生する。このとき、あるユーザの帯域が他のユーザの帯域に影響を及ぼすことを避けるためには、ユーザごとに使用可能な保証帯域を設定し、設定された保証帯域を必ず使用できるような公平な帯域制御が必要となる。
【０００３】
一方、ネットワーク経由で音声や映像等のリアルタイム性を要するアプリケーションを快適に使用するためには、パケットスケジューラに帯域保証や遅延時間保証といったＱｏＳ（Ｑｕａｌｉｔｙ  ｏｆ  Ｓｅｒｖｉｃｅ）制御が必要とされる。
【０００４】
かかる状況下において、ＱｏＳ制御のためのキュースケジューリング手法を開示した公知文献として、下記に示す特許文献１および非特許文献１が存在する。これらの文献では、到着したパケット長とユーザの保証帯域に比例した重み付けに従って出力完了予定時刻を計算し、この出力完了予定時刻が最小のパケットから順に出力するようなＷＦＱ（Ｗｅｉｇｈｔｅｄ  Ｆａｉｒ  Ｑｕｅｕｉｎｇ）方式に基づくパケットスケジューリング方法が開示されている。
【０００５】
例えば、特許文献１に示される技術では、（ユーザ数）×（優先クラス数）のキューが設けられ、到着したパケットをユーザおよび優先クラスに応じて各キューに振り分け、同一ユーザ内では複数の優先クラスのキューに対してＰＱ（Ｐｒｉｏｒｉｔｙ  Ｑｕｅｕｉｎｇ）方式を用いる一方で、ユーザ間ではユーザごとに全優先クラスの合計保証帯域に比例した重み付けを行ったＷＦＱ方式を用いることにより、ユーザごとに全優先クラスを合計した帯域で帯域保証するようにしている。
【０００６】
また、非特許文献１に示される技術では、短い遅延時間でパケットを転送したい優先度の高いクラスのキューと、（ユーザ数）×（高優先以外の優先クラス数）のキューとがそれぞれ設けられ、到着したパケットの中で最も優先度の高いパケットは全ユーザを合わせて到着順に高優先クラスキューへ格納してＰＱ方式で最優先に出力することにより、遅延時間が少ない構成としている。一方、それ以外の優先クラスのパケットは、ユーザおよび優先クラスに応じたキューに振り分け、同一ユーザ内では複数の優先クラスのキューに対してＰＱ方式を用い、ユーザ間ではユーザごとに高優先クラス以外のクラスにおける保証帯域に比例した重み付けを行ったＷＦＱ方式を用いることにより、低優先クラスにかかるユーザごとの帯域を保証している。
【０００７】
【特許文献１】特開２００１−１９７１１０号公報
【非特許文献１】許炎、天羽健策、宮本和代、中後明  「ＷＦＱをベースとした高速パケットスケジューリング手法」  電子情報通信学会技術研究報告  ＳＳＥ９８−７８、ＩＮ９８−５９、ＣＳ９８−７５、１９９８年９月、Ｐ３７〜４４
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記特許文献１に示されるようなＷＦＱ方式を用いたパケットスケジューリング方法では、ユーザごとの帯域は保証されるが、高優先クラスキューに格納されているパケットの読み出し遅延がユーザ数や出力するパケット長に比例して大きくなり、最悪では（ユーザ数−１）×（最大パケット長）の遅延時間が生じる。従って、数千〜数万といった多数のユーザが使用する場合に音声や映像等のリアルタイム性を要するアプリケーションを利用しようとすると、高優先クラスを設定しても遅延時間が大きいため快適に使用できなくなる可能性があるといった問題点があった。
【０００９】
また、上記非特許文献１に示されるようなＷＦＱ方式を用いたパケットスケジューリング方法では、高優先クラスのパケットはＰＱ方式により優先して出力されているので、ユーザ数が増えた場合でも特許文献１のように遅延が大きくなることはない。しかしながら、ＷＦＱ方式によりユーザごとに高優先クラス以外の保証帯域に比例した重み付けを行うようにしているので、高優先クラスとそれ以外のクラスを合わせたユーザごとの帯域は保証できないといった問題点があった。
【００１０】
本発明は、上記に鑑みてなされたものであって、高優先クラスのパケットの遅延時間を少なくし、帯域保証と遅延時間保証との公平性や、高優先クラスと低優先クラスとを合わせた帯域保証をユーザごとに実現可能とするパケットスケジューラおよびパケットスケジューリング方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するため、本発明にかかるパケットスケジューラは、高優先クラスキューおよびユーザごとに区分された低優先クラスキューのそれぞれに格納されたパケットの出力順序を決定するパケットスケジューラであって、入力されたパケットの優先クラスおよびユーザを識別して前記高優先クラスキューまたは前記低優先クラスキューのいずれかのキューに振り分けるパケット振り分け制御部と、前記高優先クラスキューから出力されるパケットのユーザおよびパケット長を通知するパケット長通知部と、前記パケット長通知部から通知されたユーザおよびパケット長の各情報と、前記低優先クラスキューに格納されたパケットのパケット長と、ユーザごとに割り当てられた前記高優先クラスと前記低優先クラスとの合計帯域に応じて該ユーザごとに決定されたウェイト値と、に基づいて前記低優先クラスキューに格納されたパケットの出力完了予定時刻を該ユーザごとに所定のタイミングで算出するＷＦＱ制御部と、前記低優先クラスキューに格納されて前記ＷＦＱ制御部を介して出力されるパケットおよび前記高優先クラスキューに格納されたパケットの中で、該高優先クラスキューに格納されたパケットを優先して出力するＰＱ制御部と、を備え、前記ＷＦＱ制御部は、先頭パケットが出力された低優先クラスキューに次に出力されるパケットが存在する場合、または、空であった低優先クラスキューに新たなパケットが到着した場合のいずれかのタイミングで前記出力完了予定時刻を算出することを特徴とする。
【発明の効果】
【００１２】
本発明にかかるパケットスケジューラによれば、高優先クラスキューから出力されるパケットのユーザおよびパケット長が通知され、通知されたユーザおよびパケット長の各情報と、低優先クラスキューに格納されたパケットのパケット長の情報と、ユーザごとに割り当てられた高優先クラスと低優先クラスとの合計帯域に応じてユーザごとに決定されたウェイト値とに基づいて低優先クラスキューに格納されたパケットの出力完了予定時刻を所定のタイミングでユーザごとに算出するようにしているので、優先クラスのパケットの遅延時間を少なくし、帯域保証と遅延時間保証との公平性や、高優先クラスと低優先クラスとを合わせた帯域保証をユーザごとに実現することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１３】
以下に、本発明にかかるパケットスケジューラおよびパケットスケジューリング方法の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態により本発明が限定されるものではない。
【００１４】
実施の形態１．
図１は、本発明の実施の形態１にかかるパケットスケジューラの機能構成およびキュー構成を示すブロック図である。同図に示すパケットスケジューラは、パケット振り分け制御部１０、高優先クラスキュー１１、低優先クラスキュー１２（１２1，１２2，・・・，１２n）、パケット長通知部１３、ＷＦＱ制御部１４およびＰＱ制御部１５を備えている。
【００１５】
つぎに、図１に示す各構成部の機能について説明する。同図において、パケット振り分け制御部１０は、入力されたパケットの優先クラスとユーザ（＃１〜＃ｎ）を認識するとともに、入力されたパケットを各キュー（高優先クラスキュー１１または低優先クラスキュー１２のいずれかのキュー）に振り分ける。高優先クラスキュー１１は、パケット振り分け制御部１０で振り分けられた高優先クラスのパケットを入力順に格納する。一方、低優先クラスキュー１２は、パケット振り分け制御部１０でユーザごとに振り分けられた低優先クラスのパケットを格納する。パケット長通知部１３は、高優先クラスキュー１１から出力されたパケットのユーザおよびパケット長（バイト数）を認識してＷＦＱ制御部１４に通知する。なお、図１では１つのクラスのｎ個のユーザに対するｎ個分の低優先クラスキュー１２1〜１２nが例示されているが、低優先クラスが複数ある場合には、（ユーザ数）×（低優先クラス数）個分のキューが設けられる。
【００１６】
また、ＷＦＱ制御部１４は、以下の処理を行う。
（１）  パケット長通知部１３から通知された高優先クラスのパケット長（バイト数）をユーザごとに加算して保持する。
（２）  空であるキューにパケットが到着した場合あるいは低優先クラスのパケットが出力された場合に新たにキューの先頭になるパケットのパケット長と保持していた高優先クラスのパケット長とを加算する。
（３）  （２）の処理にて算出された加算出力に対してユーザごとに高優先クラスと低優先クラスとの合計帯域に比例した重み付けを行い、加算されたパケット長とユーザの重み付け値（ウェイト値）に基づいて各低優先クラスキュー１２の出力完了予定時刻を算出する。
（４）  各低優先クラスキュー１２の先頭パケットの中で出力完了予定時刻が最小のパケットを読み出す。
【００１７】
また、ＰＱ制御部１５は、高優先クラスキュー１１に格納されているパケットを優先して出力し、高優先クラスキュー１１が空のときにＷＦＱ制御部１４によって選択される低優先クラスキュー１２の先頭パケットを出力する。
【００１８】
ところで、この実施の形態のパケットスケジューラは、高優先クラスと低優先クラスとが連携したＷＦＱ制御の動作を行う点に特徴がある。より、詳細に説明すれば、高優先クラスに配分されている帯域のうち、未使用帯域（余剰分帯域）をユーザごとの低優先クラスの帯域に振り替える連携処理を行うことで高優先クラスを含めたユーザ単位の設定帯域を保証する点にある。そこで、このような特徴を有する本発明の理解を容易にするため、上述の非特許文献１などに示されたパケットスケジューラについて説明し、その後、本実施の形態にかかるパケットスケジューラの動作について説明する。なお、図２は、非特許文献１などに示されたパケットスケジューラの構成を示す図であり、図３は、図２に示したＷＦＱ制御部１３３の制御動作を説明するための図である。
【００１９】
まず、図２において、同図に示されるパケットスケジューラは、パケット振り分け制御部１３０、高優先クラスキュー１３１、低優先クラスキュー１３２（１３２1，１３２2，・・・，１３２n）、ＷＦＱ制御部１３３およびＰＱ制御部１３４を備えている。
【００２０】
パケット振り分け制御部１３０は、入力されたパケットをユーザ（＃１〜＃ｎ）および優先クラスに応じたキューに振り分ける。高優先クラスキュー１３１は、全ユーザの高優先クラスのパケットを入力順に格納する。一方、低優先クラスキュー１３２は、低優先クラスのパケットをユーザごとに格納する。ＷＦＱ制御部１３３は、ユーザごとに設定された低優先クラスの保証帯域に比例した重み付け（ウェイト）と先頭パケット長（バイト数）に従ってＷＦＱ制御を行って各キューからのパケットを出力する。ＰＱ制御部１３４は、ＷＦＱ制御部１３３で選択された低優先クラスキュー１３２より高優先クラスキュー１３１のパケットを優先して出力する。
【００２１】
なお、図２では、短い遅延時間でパケットを転送したい優先度の高いクラスのキューと、（ユーザ数）×（高優先以外の優先クラスの数（図２では１クラスのみ））のキューとが設けられており、到着したパケットの中で最も優先度の高いパケットは、到着順にＰＱ方式にて最優先に出力することにより遅延時間の少ないパケット伝送が行われるような構成が採用されている。一方、高優先クラス以外の優先クラスのパケットは、ユーザおよび優先クラスに応じたキューに振り分けられ、同一ユーザ内では複数の優先クラスのキューがＰＱ方式で出力され（ただし、図２では１クラスのみのクラス分けなのでＰＱ制御部は図示されていない）、一方、ユーザ間ではユーザごとに高優先クラス以外のクラスにおける保証帯域に比例した重み付けを行ったＷＦＱ方式にて出力される。このような処理が行われる結果、ユーザごとの帯域が保証されるのは低優先クラスのみにとどまっている。
【００２２】
つぎに、図２に示したＷＦＱ制御部１３３の出力動作について図３を用いて説明する。なお、図２と同一の構成部については、同一符号を付して示している。
【００２３】
図３において、ＷＦＱ制御部１３３は、低優先クラスのパケットを格納する低優先クラスキュー１３２1〜１３２nのそれぞれに割り当てられた最低保証帯域比φ１〜φｎと、各キューに到着したそれぞれのパケット長とに基づいてパケットの出力完了予定時刻を算出し、帯域Ｒという制限の下、低優先クラスキュー１３２1〜１３２nに格納された先頭パケットのうち、出力完了予定時刻の最も小さいパケットから順にパケットを出力させる。ここで、同図に示すＦｉ(ｋ)（Ｆ１(１)，Ｆ１(２)，Ｆ２(１)，・・・，Ｆｉ(１)，・・・，Ｆｎ(１)）は、キュー＃ｉに溜まっている先頭からｋ番目のパケットの出力完了予定時刻を表している。
【００２４】
つぎに、Ｆｉ（ｋ）の算出手法について説明する。例えば、ある時刻ｔのときに、キュー＃ｉに先頭からｋ番目のパケットが新たに到着すると、パケットが到着したキューも含め、パケットが溜まっているキューの重み係数の合計φｓｕｍは、次式で表される。
【００２５】
φｓｕｍ＝Σ｛φｉ｜ｉ∈パケットが存在するキュー｝          ・・・（１）
【００２６】
また、読み出し帯域をＲとすると、キュー＃ｉの出力帯域Ｒｉは、次式で表される。
【００２７】
Ｒｉ＝Ｒ×φｉ／φｓｕｍ                                    ・・・（２）
【００２８】
なお、式（１）で表されるφｓｕｍはパケット到着順ｋにより変動する要素であり、その結果、式（２）で表されるＲｉもｋの関数となるので、Ｒｉ（ｋ）と表現する。
【００２９】
また、到着したパケットの長さをＬｉ（ｋ）とすると、当該到着パケットの出力完了予定時刻Ｆｉ（ｋ）は、次式で決定される。
【００３０】
Ｆｉ(ｋ)＝Ｆｉ(ｋ−１)＋Ｌｉ(ｋ)／Ｒｉ(ｋ)  （ｋ＞１のとき）
Ｆｉ(ｋ)＝Ｆｉ(１)＝ｔ＋Ｌｉ(１)／Ｒｉ(１)  （ｋ＝１のとき）・・・（３）
【００３１】
また、各キューの先頭パケットの出力完了予定時刻Ｆｉ（１）のうち、以下に示すパケットが出力されることになる。
【００３２】
ｍｉｎ｛Ｆｉ（１）｜ｉ∈パケットが存在するキュー｝          ・・・（４）
【００３３】
なお、パケットが出力されるキューに２個以上のパケットが溜まっていた場合には、先頭パケットが出力される度に、溜まっているパケットの出力完了予定時刻が次式のように更新される。
【００３４】
Ｆｉ（ｊ＋１）→Ｆｉ（ｊ）  （１≦ｊ≦ｋ−１）              ・・・（５）
【００３５】
もし、出力キューに１パケットしか溜まっていなかった場合には、読み出された後はキューが空になるため、新たなパケットが到着したときには、式（３）に基づいて新たなＦｉ（１）が決定される。
【００３６】
以上の処理により、キューごとの帯域の公平性は保たれる。また、各キューのパケットの出力順序についても出力完了予定時刻の小さい順に出力するため、公平性が保たれる。しかしながら、ＷＦＱ方式により高優先クラス以外の保証帯域に比例した重み付けをユーザごとに行うようにしているので、上記課題の項でも述べたように、高優先クラスとそれ以外のクラスを合わせたユーザごとの帯域を保証することができない。
【００３７】
このことは、例えば、あるユーザが高優先クラスで契約した帯域より少ない帯域で高優先クラスを利用していた場合に、余った帯域は該当ユーザが高優先クラス以外のクラスで利用することができないということであり、全ユーザ間で、ユーザごとに高優先クラス以外に割り当てられた帯域比をシェアするということを意味する。したがって、図２に示す構成では、ユーザごとに高優先クラスとそれ以外のクラスの合計帯域による帯域保証を行うことはできない。
【００３８】
ところで、上記に示す考え方では、ＷＦＱ制御部１３３からパケットが出力される度に当該到着パケットの出力完了予定時刻を式（１）〜（４）に基づいて算出するとともに、先頭パケットが出力されたキューに溜まっているパケットの出力完了予定時刻を式（５）に基づいて更新する必要があり、キュー数ｎが大きい場合に処理負荷が増大するといった不利点があった。そこで、以下に示すような簡易的な算出手法を採用して、処理負荷を軽減する手法が知られている。
【００３９】
この手法では、まず、出力完了予定時刻を算出するタイミングが以下の２点に限定される。
（１）  時刻ｔのときに先頭パケットが出力されたキューにおいて、つぎに出力するパケットが存在する場合
（２）  時刻ｔのときに空であったキューにおいて、新たにパケットが到着した場合
【００４０】
また、ハードウェアによる割り算をなくすため、予め全てのキューの重み係数の合計φａｌｌが、次式を満足するように各キューの重みが決定される。
【００４１】
φａｌｌ＝１＝Σφｉ（１≦ｉ≦ｎ,０≦φｉ≦１）             ・・・（６）
【００４２】
また、設定する重み値（逆数）Ｗｉを次式のように定義する。
【００４３】
Ｗｉ＝１／（Ｒ×φｉ）                                      ・・・（７）
【００４４】
式（７）を用いれば、キュー＃ｉの先頭パケットの出力完了予定時刻Ｆｉ（１）は次式のように表される。
【００４５】
Ｆｉ（１）＝ｔ＋Ｌｉ（１）×Ｗｉ                            ・・・（８）
【００４６】
また、各キューの先頭パケットの出力完了予定時刻Ｆｉ（１）のうち、以下に示す条件のパケットを出力させる（式（４）の再掲）。
【００４７】
ｍｉｎ｛Ｆｉ（１）｜ｉ∈パケットが存在するキュー｝          ・・・（９）
【００４８】
このような簡易的な算出手法であれば、パケットが出力される度あるいは空のキューにパケットが到着する度に式（８）および式（９）に基づく処理を行えばよく、前述の式（１）〜式（５）と比較して計算量が減少し、処理時間を短縮化することができる。
【００４９】
なお、式（１）〜式（５）による通常手法を用いるか、式（８）および式（９）による簡易手法を用いるかは自由であり、キューの個数や、単位時間あたりに到着するパケット数などに基づいて決定すればよい。
【００５０】
つぎに、図１に示したパケットスケジューラの動作について図４を用いて説明する。なお、図４は、図１に示した実施の形態１のパケットスケジューラにおける高優先クラスと連携した低優先クラスのＷＦＱ制御動作を説明するための図である。
【００５１】
図４において、ユーザ＃ｉの高優先クラスのパケットが高優先クラスキュー１１に到着した場合、当該パケットはＰＱ方式により、先に出力される。この場合、ユーザごとに高優先クラスと低優先クラスの合計帯域で帯域保証を行うには、同一ユーザ＃ｉの低優先クラスキュー１２iのパケットに対して、高優先クラスのパケットを読み出した帯域分、出力完了予定時刻を遅らせて優先度を下げることが必要となる。そこで、低優先クラスキューが空であるキューにパケットが到着した場合か、あるいは低優先クラスキューの先頭のパケットが出力された新たに先頭になるパケットが存在する場合には、高優先クラスキュー１１から出力されたユーザ＃ｉのパケットのパケット長Ｌｈｉ（１）を用いて、式（８）で示される低優先クラスキューの先頭パケットの出力完了予定時刻Ｆｉ（１）を次式のように修正する。
【００５２】
Ｆｉ(１)＝ｔ＋｛Ｌｉ(１)＋Ｌｈｉ(１)｝×Ｗｉ                ・・・（１０）
【００５３】
このようなＷＦＱ制御を行うためには、ユーザごとに高優先クラスと低優先クラスの合計帯域に比例したウェイトの逆数Ｗｉを設定し、常に高優先クラスキューから出力されたユーザとパケット長とを認識する必要がある。また、高優先クラスキューから同一ユーザ＃ｉのパケットが複数出力された場合には、それらのパケット長を加算していき、低優先クラスのパケット長Ｌｉ（ｋ）に加算する必要がある。
【００５４】
なお、図１および図４は１つの高優先クラスに対応した１個の高優先クラスキューが具備される場合を例示しているが、高優先クラスが複数あり、高優先クラスキューが高優先クラスごとに複数存在する場合であっても、各高優先クラスキューからユーザ＃ｉのパケットが出力される度にそれらのパケット長を加算し、ユーザ＃ｉの低優先クラスキューが空であるキューにパケットが到着した場合か、あるいは低優先クラスキューの先頭のパケットが出力されて新たに先頭になるパケットが存在する場合には、そのときまでにユーザ＃ｉの各高優先クラスキューから出力されたパケット長の全加算値を用いて出力完了予定時刻を算出すればよい。
【００５５】
このような場合、ユーザ＃ｉの各高優先クラスキューから出力されたパケット長の全加算値をＬｈｉｓｕｍ（１）とすれば、式（８）は次式のように修正される。
【００５６】
Ｆｉ(１)＝ｔ＋｛Ｌｉ(１)＋Ｌｈｉｓｕｍ(１)｝×Ｗｉ          ・・・（１１）
【００５７】
式（１１）は、ユーザごとに高優先クラスキューから出力した帯域（パケット長）分だけ出力完了予定時刻を遅らせることを意味しており、このように処理することで、高優先クラスと低優先クラスを合計した帯域でユーザ単位に設定された帯域の保証が可能になる。また、高優先クラスのパケットはＰＱ方式で読み出しているため、ユーザ数に関係なく、低遅延での出力が可能である。
【００５８】
以上説明したように、この実施の形態のパケットスケジューラおよびパケットスケジューリング方法によれば、ネットワークでリアルタイム性を要するアプリケーション等には、低遅延且つ最優先に出力する高優先クラスのキューを利用することができ、更にユーザごとにネットワーク内の全クラスを合わせた帯域（最低帯域）に比例したウェイトの逆数Ｗｉを設定して、低優先クラスのキューに対して高優先クラスで出力した帯域分を考慮したＷＦＱ制御をユーザごとに行うことによって、ネットワーク内のパワーユーザが同じネットワークを利用している他のユーザの帯域を圧迫することなくユーザごとの公平な帯域保証が可能である。また、ＷＦＱ方式に基づく帯域制御が行われるので、低優先クラスのパケットの出力順序に対しても公平性を保証することができる。
【００５９】
実施の形態２．
実施の形態１では、高優先クラスキューからパケットが出力された場合に該当ユーザに対して高優先クラスキューから出力されたパケット長を、空である低優先クラスキューにパケットが到着した場合、あるいは低優先クラスキューの先頭のパケットが出力されて新たに先頭になるパケットがある場合に、その低優先クラスのパケットのパケット長に加算することにより、ユーザごとの帯域を保証するようにしていた。
【００６０】
しかしながら、前者の場合のように高優先クラスキューからパケットが出力された時刻に、該当ユーザの低優先クラスキューにパケットが存在せず、長時間経過してから低優先パケットが到着した場合のように、該当ユーザがある時点で最低帯域保証分のパケットを出力していなかった場合には、高優先クラスで出力したパケット長を低優先クラスキューの先頭パケット到着時に加算すると、そのユーザの優先度を過剰に下げることとなり、公平性が満たされなくなるという問題点がある。
【００６１】
すなわち、実施の形態１は、
（１）  ユーザの低優先クラスキューに常にパケットが存在する場合
（２）  ユーザの高優先パケットと低優先パケットとの合計帯域が最低保証帯域以上で入力されている場合
（３）  高優先クラスキューに高優先パケットが入力されていない場合
などの条件下においては、正確にユーザごとの帯域保証と公平性を保証可能であるが、その他の条件下ではユーザごとの帯域を保証できない場合がある。
【００６２】
一方、この実施の形態では、高優先クラスキューからパケットが出力された時刻において、該当ユーザの低優先クラスキューにパケットが存在しない場合であっても、ユーザごとの帯域保証を可能とするＷＦＱ制御について示すものである。なお、キュー構成および機能構成については、図１と同一あるいは同等である。
【００６３】
つぎに、この実施の形態にかかるパケットスケジューラの動作について図５、図６−１および図６−２を用いて説明する。なお、図５は、実施の形態２のパケットスケジューラにおける高優先クラスと連携した低優先クラスのＷＦＱ制御動作を説明するための図である。また、図６−１および図６−２は、高優先クラスキューからｍ個のパケットが出力された際に、当該ｍ番目のパケットの帯域分だけ低優先クラスにおける優先度を下げる際の基準時刻が異なる場合の一例をそれぞれ示す図である。
【００６４】
図５において、ユーザ＃ｉの低優先クラスキューにパケットが存在しない状態で、高優先クラスキューからユーザ＃ｉのパケットがｍ個出力され、ｍ番目のパケットが出力された時刻がｔｈ（ｍ）、パケットの長さがＬｈｉ（ｍ）であるとする。いま、高優先クラスキューから出力されたｍ番目のパケットの帯域分だけユーザ＃ｉの低優先クラスの優先度を下げるために、仮想的にユーザ＃ｉの低優先クラスキューにパケット長Ｌｈｉ（ｍ）のパケットが溜まったと仮定する。この考え方は実施の形態１と同じである。このとき、１つ前の（ｍ−１）番目までに高優先クラスキューから出力されたパケットによる低優先クラスにおける仮想出力完了予定時刻をＶＦｉ（ｍ−１）として、ＶＦｉ（ｍ−１）とｍ番目のパケット出力時刻であるｔｈ（ｍ）とを比較する。
【００６５】
図６−１に示すように、ＶＦｉ（ｍ−１）≧ｔｈ（ｍ）の場合には、（ｍ−１）番目までの高優先クラスにおいてＶＦｉ（ｍ−１）の時刻まで低優先クラスの優先度を仮想的に下げる必要があり、この時刻を基準として、さらにｍ番目に出力したパケット長Ｌｈｉ（ｍ）分の時刻を加味した分だけ、低優先クラスの優先度を下げる必要がある。一方、図６−２に示すように、ＶＦｉ（ｍ−１）＜ｔｈ（ｍ）の場合には、（ｍ−１）番目までのパケットが最低保証帯域未満の帯域で入力されていることを意味しているので、ＶＦｉ（ｍ−１）の時刻を基準とせず、ｍ番目のパケットが出力された時刻ｔｈ（ｍ）を基準として、ｍ番目に出力したパケット長Ｌｈｉ（ｍ）分の時刻分だけ低優先クラスの優先度を下げればよい。
【００６６】
結局のところ、ｍ番目の仮想パケットの仮想出力完了予定時刻ＶＦｉ（ｍ）は、ＶＦｉ（ｍ−１）とｔｈ（ｍ）を比較して大きい方の時刻にｍ番目のパケットの帯域分を加算すればよく、このＶＦｉ（ｍ）は次式で表すことができる。
【００６７】
ＶＦｉ(ｍ)＝ｍａｘ[ＶＦｉ(ｍ−１),ｔｈ(ｍ)]＋Ｌｈｉ(ｍ)×Ｗｉ
（ｍ＞１のとき）
ＶＦｉ(ｍ)＝ｔｈ(１)＋Ｌｈｉ(１)×Ｗｉ
（ｍ＝１のとき）                            ・・・（１２）
【００６８】
また、ユーザ＃ｉの低優先クラスキューにパケットが存在せず、高優先クラスキューからユーザ＃ｉのパケットがｍ個出力された後に、低優先クラスキューのＷＦＱ制御部における時刻ｔのときに、ユーザ＃ｉの低優先クラスキューに新たに先頭となるパケット長Ｌｉ（１）のパケットが到着した場合、この先頭パケットの出力完了予定時刻Ｆｉ（１）を次式で表すことができる。
【００６９】
Ｆｉ(１)＝ｍａｘ[ＶＦｉ(ｍ),ｔ]＋Ｌｉ(１)×Ｗｉ          ・・・（１３）
【００７０】
以上説明したように、この実施の形態のパケットスケジューラおよびパケットスケジューリング方法によれば、ユーザごとに高優先クラスと低優先クラスの合計帯域に比例したウェイトを設定し、高優先クラスキューからパケットが出力されたときに、高優先クラスのユーザ情報とパケット長に基づいて高優先クラスキューから出力された帯域（パケット長）分だけ仮想的に優先度を下げるとともに、該当ユーザがある時点で最低帯域保証分のパケットを出力していたか否かの情報に基づいて、優先度を仮想的に下げる基準時刻を可変するようにしているので、実施の形態１の効果に加え、例えば、低優先クラスキューに長時間パケットが存在しない場合や、高優先クラスのパケットが送出された時点で低優先クラスキューにパケットが存在しない場合などであっても、ユーザ単位に設定された帯域の保証が可能となる。
【００７１】
実施の形態３．
図７は、本発明の実施の形態３にかかるＷＦＱ制御部の機能構成を示す図であり、図１に示したパケットスケジューラに具備されるＷＦＱ制御部１４を具現する機能構成を示すものである。
【００７２】
同図に示すＷＦＱ制御部は、低優先クラス優先度演算部８１、端数用メモリ８２、時刻レジスタ８３、加算器８４、パケット情報格納用出力完了予定時刻ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）メモリ８５、出力制御部８６、高優先クラス優先度演算部８７および高優先帯域用メモリ８８の各構成部を備えている。
【００７３】
図７において、低優先クラス優先度演算部８１は、
（１）空の低優先クラスキューに新たにパケットが到着した場合
（２）ある低優先クラスキューの先頭パケットが出力されて次のパケットがある場合
の２つの条件下において、そのパケットのキュー番号ｉ、パケット長Ｌｉ（１）、当該キューの重み係数Ｗｉに基づいて「Ｌｉ（１）×Ｗｉ」の演算を行い、低優先クラスの当該パケットの優先度を出力する。
【００７４】
端数用メモリ８２は、加算器８４で加算されて決定した低優先クラスの該当パケットの出力完了予定時刻のうち、回路規模を小さくするためにパケット情報格納用出力完了予定時刻ＦＩＦＯメモリ８５の刻みによって切り捨てられる出力完了予定時刻の端数分をキュー単位で保持する。なお、端数用メモリ８２に記憶された端数情報は、つぎに出力するパケットに持ち越される。例えば、上記（１）の場合には該当キューの端数を０とし、上記（２）の場合には端数用メモリ８２に格納されている該当キューの端数値が加算器８４に出力されるとともに、加算器８４で加算された際に発生する新たな端数値によって上書きされる。
【００７５】
高優先クラス優先度演算部８７は、高優先クラスキューからパケットが出力されたとき（ただし、高優先クラスがＰＱ方式の高優先キューとして入力される場合には、パケットが到着したときでもよい）に、当該パケットのキュー番号ｉ、パケット長Ｌｈｉ、該当キューの重み係数Ｗｉより（Ｌｈｉ×Ｗｉ）の演算を行う。高優先帯域用メモリ８８は、低優先クラスキュー単位に高優先クラス優先度演算部８７から通知される（Ｌｈｉ×Ｗｉ）の値を順に加算して高優先クラスの合計優先度（Ｌｈｉｓｕｍ×Ｗｉ）として保持し、上記（１）および（２）の場合に低優先クラスキュー単位で該当キューの（Ｌｈｉｓｕｍ×Ｗｉ）の値を加算器８４に出力するとともに、該当キューの出力後は該当キューの値をクリアする。時刻レジスタ８３は、パケット情報格納用出力完了予定時刻ＦＩＦＯ８５からパケットが出力されたときの時刻ｔを保持する。
【００７６】
加算器８４は、上記（１）および（２）の場合に、低優先クラス優先度演算部８１からの低優先クラスの優先度と、端数用メモリ８２からの端数値と、高優先帯域用メモリ８８からの合計優先度値と、時刻レジスタ８３の時刻ｔとを加算して出力完了予定時刻を決定するとともに、該当キュー番号ｉ、パケット長Ｌｉ（１）および加算された出力完了予定時刻のうちパケット情報格納用出力完了予定時刻ＦＩＦＯメモリ８５で対応可能な上位ビットをパケット情報格納用出力完了予定時刻ＦＩＦＯメモリ８５に出力し、残りの端数である下位ビットを端数用メモリ８２に出力する。パケット情報格納用出力完了予定時刻ＦＩＦＯメモリ８５は、加算器８４から出力された、これらの情報を格納する。出力制御部８６は、各ＦＩＦＯメモリに対してパケット情報の有無を示すレジスタを設け、これをスキャンすることにより出力完了予定時刻が最も小さくパケット情報の格納されているＦＩＦＯメモリを検索し、そのＦＩＦＯメモリに格納されたキュー番号に基づいてパケット出力順序を決定し、また、パケット長に基づいて出力タイミングを決定する。
【００７７】
ここで、上述した高優先帯域用メモリ８８の動作では、同一ユーザの低優先クラスキューにパケットが存在せず、高優先クラスキューから多数のパケットが出力されている（到着している）場合、常に加算処理が行われ、その後、低優先クラスキューが到着したときに、これまで出力された高優先クラスキューの帯域分だけ出力完了予定時刻を遅らせることになり、当該ユーザの帯域が設定値より一時的に少なくなることがある。また、低優先クラスキューの空時間が長ければ長いほどキュー単位の高優先帯域用メモリ８８の容量が大きいものが必要となる。
【００７８】
このため、高優先帯域用メモリ８８では、上記（１）の場合には、端数用メモリ８２と同様に加算器８４に対して０を出力し、上記（２）の場合にのみ高優先クラスキューの帯域を加算した値を出力することが好ましい。このような処理を行った場合、上記（１）の場合に瞬間的に該当ユーザの帯域が多めに出力される可能性があるが、それまで低優先クラスキューが空であったことを考慮すれば、低優先キューにおいて輻輳が起こることは考えられない。また、上記（１）の場合には高優先帯域用メモリ８８に蓄積されている値をクリアすることができるので、高優先帯域用メモリ８８の容量も小さいものでよい。
【００７９】
以上説明したように、この実施の形態のパケットスケジューラにおけるＷＦＱ制御部によれば、端数用メモリ、高優先帯域用メモリ、時刻レジスタなどの各種記憶部や、高優先クラス優先度演算部、低優先クラス優先度演算部、加算器などの各種演算部が具備され、これらの構成部に蓄積される情報の管理を適正に行うようにしているので、回路規模が削減され、処理時間が短縮されるとともに、高優先クラスの帯域も考慮した多数のユーザにおける帯域制御の公平性を確保することが可能なＷＦＱ制御が実現される。
【００８０】
なお、この実施の形態では、パケット情報格納用出力完了予定時刻ＦＩＦＯメモリ８５のビット刻みを考慮して端数用メモリ８２を有する構成を具備するように構成しているが、当該ＦＩＦＯメモリのビット刻みが十分であれば、端数用メモリ８２を省略してもよい。
【産業上の利用可能性】
【００８１】
以上のように、本発明は、高優先クラスの帯域も考慮した多数のユーザにおける帯域制御の公平性を確保することが可能なＷＦＱ制御機能を有するパケットスケジューラとして有用である。
【図面の簡単な説明】
【００８２】
【図１】本発明の実施の形態１にかかるパケットスケジューラの機能構成およびキュー構成を示すブロック図である。
【図２】非特許文献１などに示されたパケットスケジューラの構成を示す図である。
【図３】図２に示したＷＦＱ制御部１３３の制御動作を説明するための図である。
【図４】実施の形態１のパケットスケジューラにおける高優先クラスと連携した低優先クラスのＷＦＱ制御動作を説明するための図である。
【図５】実施の形態２のパケットスケジューラにおける高優先クラスと連携した低優先クラスのＷＦＱ制御動作を説明するための図である。
【図６−１】高優先クラスキューからｍ個のパケットが出力された際に、当該ｍ番目のパケットの帯域分だけ低優先クラスにおける優先度を下げる際の基準時刻が異なる場合の一例を示す図である（ＶＦｉ（ｍ−１）≧ｔｈ（ｍ）の場合，ｔｈ（ｍ）：ｍ番目のパケットが出力された時刻、ＶＦｉ（ｍ−１）：（ｍ−１）番目までに高優先クラスキューから出力されたパケットによる低優先クラスにおける仮想出力完了予定時刻）。
【図６−２】高優先クラスキューからｍ個のパケットが出力された際に、当該ｍ番目のパケットの帯域分だけ低優先クラスにおける優先度を下げる際の基準時刻が異なる場合の一例を示す図である（ＶＦｉ（ｍ−１）＜ｔｈ（ｍ）の場合，ｔｈ（ｍ）：ｍ番目のパケットが出力された時刻、ＶＦｉ（ｍ−１）：（ｍ−１）番目までに高優先クラスキューから出力されたパケットによる低優先クラスにおける仮想出力完了予定時刻）。
【図７】本発明の実施の形態３にかかるＷＦＱ制御部の機能構成を示す図である。
【符号の説明】
【００８３】
１０，１３０  パケット振り分け制御部
１１，１３１  高優先クラスキュー
１２，１２1，１２2，１２i，１２n，１３２，１３２1，１３２2，１３２n  低優先クラスキュー
１３  パケット長通知部
１４，１３３  ＷＦＱ制御部
１５，１３４  ＰＱ制御部
８１  低優先クラス優先度演算部
８２  端数用メモリ
８３  時刻レジスタ
８４  加算器
８５  パケット情報格納用出力完了予定時刻ＦＩＦＯメモリ
８６  出力制御部
８７  高優先クラス優先度演算部
８８  高優先帯域用メモリ
【図１】
0004447521.tif 000002
【図２】
0004447521.tif 000003
【図３】
0004447521.tif 000004
【図４】
0004447521.tif 000005
【図５】
0004447521.tif 000006
【図６−１】
0004447521.tif 000007
【図６−２】
0004447521.tif 000008
【図７】
0004447521.tif 000009