(57)【要約】【課題】帯域制御を維持するアルゴリズムとは異なるアルゴリズムにより選択されたキューからデータを読み出した場合でも、帯域制御を維持するアルゴリズムの帯域の精度を維持する重み付け優先制御方法を提供すること。【解決手段】キュー制御部は、各キュー・バッファに割り付けられた重み付けの値を初期値としてデータ読み出し度に算出される優先度に基づきデータを読み出すキュー・バッファを選択する第１のアルゴリズムによって選択されたキュー・バッファと、第１のアルゴリズムとは異なる処理によってデータを読み出すキュー・バッファを選択する第２のアルゴリズムによって選択されたキュー・バッファとが異なる場合、第２のアルゴリズムによって選択されたキュー・バッファを優先するとともに、優先するキュー・バッファ以外のすべてのキュー・バッファの優先度を上げる処理を行う。【選択図】      図１
2005033408.tif 000002
【特許請求の範囲】
【請求項１】
複数のキュー・バッファに蓄積されているデータを前記複数のキュー・バッファ毎に割り付けられている重み付けの値の割合で各キュー・バッファから読み出して前記データの帯域を保証する重み付け優先制御方法であって、
前記重み付けの値を初期値とし、各キュー・バッファからのデータ読み出しの度に算出される優先度に基づき前記複数のキュー・バッファの優先順位を決定し、決定した優先順位に従ってデータを読み出すキュー・バッファを選択することにより、前記データの帯域を保証する第１のアルゴリズムと、この第１のアルゴリズムとは異なる処理によってデータを読み出すキュー・バッファを選択する第２のアルゴリズムとを有し、前記第１および第２のアルゴリズムによって選択されたキュー・バッファが異なる場合には、所定の条件が成立する以外の場合前記第２のアルゴリズムによって選択されたキュー・バッファを優先するとともに、前記優先するキュー・バッファ以外のすべてのキュー・バッファの第１のアルゴリズムにおける優先度を上げる処理を行う事を特徴とする重み付け優先制御方法。
【請求項２】
前記所定の条件は、前記複数のキュー・バッファの優先度が所定の値以上になった場合であり、このときは第１のアルゴリズムによって選択されたキュー・バッファを優先して選択することを特徴とする請求項１に記載の重み付け優先制御方法。
【請求項３】
前記所定の条件は、前記複数のキュー・バッファの優先度が所定の値以上になった場合であり、このときは該優先度が所定の値以上のキュー・バッファを優先して選択することを特徴とする請求項１に記載の重み付け優先制御方法。
【請求項４】
前記所定の条件は、優先するキュー・バッファが所定の回数連続して同じキュー・バッファであった場合であり、このときは前記第１のアルゴリズムによって選択したキュー・バッファを優先することを特徴とする請求項１に記載の重み付け優先制御方法。
【請求項５】
前記第２のアルゴリズムは、
前記複数のキュー・バッファに蓄積されている複数のデータの合計パケット長が所定の値を超えた場合、該合計パケット長が所定の値を超えたキュー・バッファを選択することを特徴とする請求項１〜４の何れか一つに記載の重み付け優先制御方法。
【請求項６】
前記第１のアルゴリズムは、前記複数のキュー・バッファのデータを読み出す順番が定められており、前記データを読み出す毎に該データを読み出したキュー・バッファの優先度をデクリメントして、該優先度がゼロのキュー・バッファを選択の対象外とし、すべての優先度がゼロになると優先度を前記重み付けの値に再設定してデータを読み出すキュー・バッファを選択する重み付けラウンドロビンであり、前記第２のアルゴリズムによって選択されたキュー・バッファを優先してデータを読み出した場合にも、データを読み出したキュー・バッファの優先度をデクリメントし、該優先度が負数になった場合には、全ての優先度に前記重み付けの値を加算して全ての優先度を上げることを特徴とする請求項１〜５の何れか一つに記載の重み付け優先制御方法。
【請求項７】
複数のキュー・バッファに蓄積されているデータを前記複数のキュー・バッファ毎に割り付けられている重み付けの値の割合で各キュー・バッファから読み出して前記データの帯域を保証する重み付け優先制御方法であって、
前記各キュー・バッファに蓄積されている先頭データと重み付けの値に基づいて算出した優先度に基づき前記複数のキュー・バッファの優先順位を決定し、決定した優先順位に従ってデータを読み出すキュー・バッファを選択することにより、前記データの帯域を保証する第１のアルゴリズムと、この第１のアルゴリズムとは異なる処理によってデータを読み出すキュー・バッファを選択する第２のアルゴリズムとを有し、前記第１および第２のアルゴリズムによって選択されたキュー・バッファが異なる場合には、所定の条件が成立する以外の場合前記第２のアルゴリズムによって選択されたキュー・バッファを優先するとともに、前記優先するキュー・バッファの第１のアルゴリズムにおける優先度を下げる処理を行う重み付け優先制御方法。
【請求項８】
前記所定の条件は、前記複数のキュー・バッファの優先度が所定の値以下になった場合であり、このときは該優先度が所定の値以下のキュー・バッファを優先して選択することを特徴とする請求項７に記載の重み付け優先制御方法。
【請求項９】
前記第２のアルゴリズムは、
前記複数のキュー・バッファに蓄積されている複数のデータの合計パケット長が所定の値を超えた場合、該合計パケット長が所定の値を超えたキュー・バッファを選択することを特徴とする請求項７または８に記載の重み付け優先制御方法。
【請求項１０】
前記第１のアルゴリズムは、前記複数のキュー・バッファの重み付けの値の逆数と所定の値との積であるそれぞれの制御値と、前記複数のキュー・バッファに蓄積されている先頭のパケットのパケット長との積を優先度の初期値として、これらの優先度が一番小さいキュー・バッファを選択するものであって、前記第１のアルゴリズムによって前記選択したキュー・バッファの優先度がゼロまたは正数の場合、該選択したキュー・バッファの優先度を全てのキュー・バッファの優先度から減算し、該選択したキュー・バッファの優先度にはつぎに先頭になったデータ長を用いて初期値を設定し、前記選択したキュー・バッファの優先度が負数の場合、前記選択したキュー・バッファから読み出したデータのつぎのデータに基づき初期値を算出し、算出した初期値と該選択したキュー・バッファの現在の優先度とを加算した値を優先度として設定して該選択したキュー・バッファの優先度を下げ、前記第２のアルゴリズムによって選択されたキュー・バッファを優先した場合には、該選択したキュー・バッファの優先度を全てのキュー・バッファの優先度から減算し、該選択したキュー・バッファの優先度にはつぎに先頭になったデータ長を用いて初期値を設定することを特徴とする請求項７〜９の何れか一つに記載の重み付け優先制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、通信装置の帯域制御方法に関するものであり、特に、回線にデータを出力する際に、回線交換処理と同時に帯域制御を行う重み付け優先制御方法に関するものである。
【０００２】
【従来の技術】
データを出力する１つの出力先、たとえば、回線の直前に設置された複数の待ち行列（キュー）それぞれに設定された重み付けの値にしたがって、各キューのデータに対して回線の帯域のうちの一定の割合の帯域を保証するためのアルゴリズムとして、重み付けラウンドロビン（ＷＲＲ：Ｗｅｉｇｈｔｅｄ  Ｒｏｕｎｄ  Ｒｏｂｉｎ）方式や重み付けフェアキューイング（ＷＦＱ：Ｗｅｉｇｈｔｅｄ  Ｆａｉｒ  Ｑｕｅｕｉｎｇ）方式がある。
【０００３】
ＷＲＲ方式は、データを読み出すキューの順番を予め決めておき、その順番にしたがって、各キューから順次データを読み出していくラウンドロビン（回転優先制御）を行う際に、各キューに重み付けの値を設定しておき、データを読み出すごとに重み付けの値をデクリメントしていく。そして、重み付けの値が「０」になったキューからはデータを読み出さずに、つぎのキューのデータを読み出すことで、各キューから出力するデータの出力頻度を制御して、一定の割合の帯域を保証するものである。したがって、特にＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｔｒａｎｓｆｅｒ  Ｍｏｄｅ）のセルなど固定長のデータを扱う場合、デクリメントと重み付けの値が設定可能なカウンタで実現可能であり、ハードウエアで構成するにあたっても、非常に簡単かつ小規模な回路で実現することができる。
【０００４】
このような理由から、ＷＲＲ方式を用いた装置の実装や機能に様々な拡張や工夫をこらした技術が考えられている。第１の従来技術では、優先インデックスを用いたアルゴリズムを基本とし、優先インデックステーブルを用いた構成に対して、優先ソートリストを設けて、実際のパケット転送シーケンス（ラウンド）ごとに、全フローあるいは所定フローを優先インデックスの大きい順（降順）に格納し、この優先ソートリスト内の先頭の各フローから順にパケットを転送し、その後、優先ソートリスト外の各フローからパケットを転送するようにして、ＷＲＲ方式の問題である遅延ジッタ性能を向上するようにしている（たとえば、特許文献１参照）。
【０００５】
また、第２の従来技術では、セルバッファ回路にセルがないときには有意のセル有無フラグを送出するセル有無フラグ出力回路と、カウントメモリの対応するカウント値が減算され「０」になったときに有意のウエイト有無フラグを送出するウエイト有無フラグ送出回路と、セル有無フラグまたはウエイト有無フラグの何れか一方または両方が有意である時に一斉に有意のカウント初期化フラグを送出するカウント初期化フラグ送出回路とをセルバッファ毎に備え、各セルバッファ回路の中の１つのセルバッファ回路を選択してセルを出力する時に、対応するカウント初期化フラグが有意の場合、対応するカウンタ値のみを初期化するようにして、カウンタ値の初期化する時間の制約をなくすことで、セルバッファ回路の数に関係なくメモリを使用してカウンタを構成することができるようにしている。（たとえば、特許文献２参照）。
【０００６】
【特許文献１】
特開平１１−２９８５２３号公報
【特許文献２】
特開２０００−２７８２７２号公報
【０００７】
【発明が解決しようとする課題】
上記第１の従来技術では優先インデックスを用いたアルゴリズムを、上記第２の技術ではＷＲＲ方式のアルゴリズムを用いている。すなわち、上記従来技術は両者とも、それ自体が１つのアルゴリズムの体を成しており、つぎに読み出すべきキューを選択するのは、そのアルゴリズムが唯一であるという環境のみに適合する。そのため、上記２つの従来技術では、つぎに読み出すべきキューを選択するアルゴリズムが２つである場合、不都合が生じることがある。
【０００８】
たとえば、一般的に、ネットワーク上に流れるデータは、帯域制御の要求の通りに流れるわけではない。ネットワーク上に流れるデータをミクロな時間単位で見ると、あるところにデータが集中して帯域制御の要求する通りにデータを読み出していたのでは、キューからデータがあふれてしまい、あふれたデータは破棄される。
【０００９】
このような場合、ＲＥＤ（Ｒａｎｄｏｍ  Ｅａｒｌｙ  Ｄｅｔｅｃｔｉｏｎ）により破棄が１つのデータ系列に集中しないようにするのが一般的であるが、データを破棄しないに越したことはない。そこで、「キューからデータがあふれる前にデータが集中しているキューを検知して、検知したキューのデータを優先的に回線に出力する」というアルゴリズムを上記２つの従来技術に追加したとする。すなわち、ＷＲＲ方式などの帯域制御を維持するアルゴリズムと、それとは別につぎに読み出すべきキューを選択する（この場合は、データが集中しているキューを選択する）アルゴリズムとがあるとする。これら２つのアルゴリズムがそれぞれに選択したキューが異なり、帯域制御を維持するアルゴリズムとは異なるアルゴリズムが選択したキューからデータを読み出した場合、上記２つの従来技術では、帯域制御の効果そのものを失わないための手順は検討されていない。
【００１０】
そのため、上記２つの従来技術では、キューの状況に応じて帯域制御を維持するアルゴリズムと、それとは別のアルゴリズムとを使い分ける必要がある場合、帯域制御の精度を維持することはできないという問題があった。
【００１１】
この発明は上記に鑑みてなされたもので、帯域制御を維持するアルゴリズムと、それとは異なるアルゴリズムとを有し、帯域制御を維持するアルゴリズムとは異なるアルゴリズムにより選択されたキューからデータを読み出した場合でも、帯域制御を維持するアルゴリズムの帯域の精度を維持することができる重み付け優先制御方法を得ることを目的としている。
【００１２】
【課題を解決するための手段】
上記目的を達成するために、この発明にかかる重み付け優先制御方法は、複数のキュー・バッファに蓄積されているデータを前記複数のキュー・バッファ毎に割り付けられている重み付けの値の割合で各キュー・バッファから読み出して前記データの帯域を保証する重み付け優先制御方法であって、前記重み付けの値を初期値とし、各キュー・バッファからのデータ読み出しの度に算出される優先度に基づき前記複数のキュー・バッファの優先順位を決定し、決定した優先順位に従ってデータを読み出すキュー・バッファを選択することにより、前記データの帯域を保証する第１のアルゴリズムと、この第１のアルゴリズムとは異なる処理によってデータを読み出すキュー・バッファを選択する第２のアルゴリズムとを有し、前記第１および第２のアルゴリズムによって選択されたキュー・バッファが異なる場合には、所定の条件が成立する以外の場合前記第２のアルゴリズムによって選択されたキュー・バッファを優先するとともに、前記優先するキュー・バッファ以外のすべてのキュー・バッファの第１のアルゴリズムにおける優先度を上げる処理を行う事を特徴とする。
【００１３】
この発明によれば、各キュー・バッファごとに割り付けられた重み付けの値を初期値とし、各キュー・バッファからのデータ読み出しの度に算出される優先度に基づき複数のキュー・バッファの優先順位を決定し、決定した優先順位に従ってデータを読み出すキュー・バッファを選択することによりデータの帯域を保証する第１のアルゴリズムによって選択されたキュー・バッファと、第１のアルゴリズムとは異なる処理によってデータを読み出すキュー・バッファを選択する第２のアルゴリズムによって選択されたキュー・バッファとが異なる場合には、所定の条件が成立する場合を除いて、第２のアルゴリズムによって選択されたキュー・バッファを優先するとともに、優先するキュー・バッファ以外のすべてのキュー・バッファの優先度を上げるようにしている。ただし、第２のアルゴリズムによって選択されたキュー・バッファを優先して、優先するキュー・バッファ以外の全てのキュー・バッファの優先度を上げる場合、実装上は優先度を上げる限度がある。この場合、キュー・バッファの優先度が限度を超えた場合を所定の条件として、優先度が限度値を超えた場合には第１のアルゴリズムによって選択されたキュー・バッファを優先することにより、実装上の問題を解決するとともに、第２のアルゴリズムによって選択されたキュー・バッファを選択し続けて帯域保証が維持できなくなるという現象を防ぐことができる。
【００１４】
【発明の実施の形態】
以下に添付図面を参照して、この発明にかかる重み付け優先制御方法の好適な実施の形態を詳細に説明する。
【００１５】
実施の形態１．
図１〜図５を用いて本発明の実施の形態１を説明する。図１は、この発明における実施の形態１の重み付け優先制御方法に基づいて動作する重み付け優先制御装置の構成を示すブロック図である。図１に示した重み付け優先制御装置は、一定量のデータ（パケット）を蓄積する複数（この場合は３つ）のキュー・バッファ１１〜１３と、予め定められた２つの異なるアルゴリズムのうちの一方のアルゴリズムに基づいてキュー・バッファ１１〜１３の１つを選択するキュー制御部３０と、キュー制御部３０が選択したキュー・バッファのパケットを読み出し、回線に出力する多重化部２０とを備えている。
【００１６】
キュー制御部３０は、重み付けによる帯域制御を行い回線の帯域の一定量の割合を保証する第１のアルゴリズムと、帯域制御とは異なるアルゴリズムによりパケットを読み出すべきキュー・バッファを決定する第２のアルゴリズムとを有し、キュー・バッファ１１〜１３を監視して、キュー・バッファ１１〜１３の状態に基づいて、第１のアルゴリズムで選択したキュー・バッファと第２のアルゴリズムで選択したキュー・バッファのどちらを優先するかを選択する。そして、選択したキュー・バッファを多重化部２０に通知する。
【００１７】
第１のアルゴリズムは、複数のキュー・バッファそれぞれに設定された重み付けの値を初期値とし、各キュー・バッファからのデータ読み出しの度に算出される優先度に基づき複数のキュー・バッファの優先順位を決定し、決定した優先順位に従ってデータを読み出すキュー・バッファを選択することにより、データの帯域を保証するアルゴリズムであり、ここではＷＲＲ方式とする。
【００１８】
第２のアルゴリズムは、キュー・バッファからパケットがあふれる前にデータが集中しているキュー・バッファを検知して、検知したキュー・バッファのパケットを優先的に回線に出力するアルゴリズムである。
【００１９】
キュー制御部３０は、キュー・バッファ１１〜１３に対応した重み付けの値をカウントするカウンタ３１〜３３と、キュー・バッファ１１〜１３がそれぞれ保持するパケットの合計パケット長を監視するキュー監視部３４と、つぎにパケットを読み出すべきキュー・バッファを選択するキュー選択部３５と、キュー・バッファ１１〜１３の重み付けの値に基づいてそれぞれの優先度を算出する重み付け演算部３６とを備えている。
【００２０】
キュー監視部３４は、キュー・バッファ１１〜１３がそれぞれに蓄積するパケットの合計パケット長が予め定められた閾値を超えていないかを監視する。そして、蓄積したパケットの合計パケット長が閾値を超えているキュー・バッファを検出した場合、検出したキュー・バッファを識別するための情報を含む超過情報をキュー選択部３５に出力する。
【００２１】
キュー選択部３５は、第１のアルゴリズムまたは第２のアルゴリズムに基づいてつぎにパケットを読み出すべきキュー・バッファを選択して、選択したキュー・バッファのパケットを読み出すように多重化部２０に通知する。キュー選択部３５は、キュー監視部３４から超過情報の通知を受けた場合、第２のアルゴリズムに基づいて選択したキュー・バッファを第１のアルゴリズムに基づいて選択したキュー・バッファよりも優先して多重化部２０に通知する。そして、第２のアルゴリズムに基づいてキュー・バッファを選択した際に、選択したキュー・バッファに対応するカウンタのカウント値（優先度）がマイナスの値になると、重み付け演算部３６に重み付けの値を算出するように通知する。
【００２２】
第１のアルゴリズムの場合、キュー選択部３５は、パケットが蓄積されているキュー・バッファに対応するカウンタのカウント値が「０」でないものをラウンドロビンによって検索し、最初に検出したカウンタに対応するキュー・バッファをパケット読み出し対象のキュー・バッファとして選択する。この場合は、カウンタ３１、カウンタ３２、カウンタ３３、カウンタ３１の順（ラウンドロビン方向）にカウント値を確認する。キュー選択部３５は、最後に選択したキュー・バッファを記憶しておき、つぎにパケットを読み出すべきキュー・バッファを選択する際には、記憶しているキュー・バッファに対応するカウンタのカウント値を確認する。そして、カウント値が「０」の場合は、順次ラウンドロビン方向のカウンタの値を確認し、カウント値が「０」でないカウンタに対応するキュー・バッファを選択する。
【００２３】
第２のアルゴリズムの場合、キュー選択部３５は、キュー監視部３４から通知された超過情報内のキュー・バッファを選択する。ただし、同一のキュー・バッファを選択する超過情報が連続してきた場合には、予め定められた一定の回数を限度に超過情報により通知されたキュー・バッファを連続して選択する。
【００２４】
カウンタ３１〜３３は、各カウンタに対応したキュー・バッファが選択されてパケットが回線に出力された場合、カウント値をデクリメントする。ここでは、カウンタ３１がキュー・バッファ１１に、カウンタ３２がキュー・バッファ１２に、カウンタ３３がキュー・バッファ１３にそれぞれ対応する。
【００２５】
重み付け演算部３６は、カウンタ３１〜３３のカウント値がすべて「０」になると、予め定められたキュー・バッファ１１〜１３の重み付けの値を各カウンタに設定する。また、第２のアルゴリズムにより選択したキュー・バッファに対応するカウンタのカウント値がマイナスになると、各カウンタのカウント値に予め定められた重み付けの値を加算した値を各カウンタに設定する。すなわち、マイナスになったカウンタのカウント値をプラスにするために、各カウンタのカウント値にそれぞれの重み付けの値を加算して、第１のアルゴリズムによる帯域制御の重み付けの比率を維持するようにする。
【００２６】
図２〜図５は、キュー・バッファ１１〜１３に蓄積されているパケットと、カウンタ３１〜３３の値と、キュー選択部３５が選択したキュー・バッファのパケットを多重化部２０が読み出して、読み出したパケットを回線４０に出力した様子を示す図である。図２〜図５を参照して、この発明における実施の形態１の重み付け優先制御方法に基づいて動作する重み付け優先制御装置の動作を説明する。ここでは、キュー・バッファ１１の重み付けの値を「１」、キュー・バッファ１２の重み付けの値を「３」、キュー・バッファ１３の重み付けの値を「２」とし、キュー・バッファ１１〜１３に蓄積されるパケットの長さは全て同一（固定長）であるものとする。
【００２７】
まず、図２および図３を参照して、第１のアルゴリズムに基づいてパケットを出力する動作を説明する。図２（ａ）において、キュー・バッファ１１はパケットＡ１〜Ａ４を、キュー・バッファ１２はパケットＢ１〜Ｂ５を、キュー・バッファ１３はパケットＣ１〜Ｃ４をそれぞれ蓄積しており、カウンタ３１には「１」が、カウンタ３２には「３」が、カウンタ３３には「２」が設定されている。すなわち、カウンタ３１〜３３には、重み付けの値が優先度の初期値として重み付け演算部３６により設定されている。また、キュー監視部３４に予め定められている閾値は、点線で示したようにここではパケット６個分のパケット長とする。
【００２８】
キュー・バッファ１１〜１３に蓄積されているパケットの合計パケット長が各キュー・バッファとも閾値を超えていないので、キュー選択部３５は第１のアルゴリズムに基づいてキュー・バッファを選択する。キュー選択部３５は、キュー・バッファ１１の優先度を示すカウンタ３１のカウント値を確認する。カウンタ３１のカウント値は「１」であるので、キュー選択部３５はキュー・バッファ１１を選択して、キュー・バッファ１１のパケットを読み出すように多重化部２０に通知する。
【００２９】
図２（ｂ）に示すように、多重化部２０は、キュー・バッファ１１のパケットＡ１を読み出して、読み出したパケットＡ１を回線４０に出力する。キュー選択部３５がキュー・バッファ１１を選択したので、カウンタ３１はカウント値をデクリメントして、カウント値を「０」にする。
【００３０】
キュー・バッファ１１を選択したので、キュー選択部３５は、キュー・バッファ１２に対応するカウンタ３２のカウント値を確認する。カウンタ３２のカウント値は「３」であるので、キュー選択部３５はキュー・バッファ１２を選択して、キュー・バッファ１２のパケットを読み出すように多重化部２０に通知する。
【００３１】
図２（ｃ）に示すように、多重化部２０は、キュー・バッファ１２のパケットＢ１を読み出して、読み出したパケットＢ１を回線４０に出力する。キュー選択部３５がキュー・バッファ１２を選択したので、カウンタ３２はカウント値をデクリメントして、カウント値を「２」にする。
【００３２】
キュー・バッファ１２を選択したので、キュー選択部３５は、キュー・バッファ１３に対応するカウンタ３３のカウント値を確認する。カウンタ３３のカウント値は「２」であるので、キュー選択部３５はキュー・バッファ１３を選択して、キュー・バッファ１３のパケットを読み出すように多重化部２０に通知する。
【００３３】
図２（ｄ）に示すように、多重化部２０は、キュー・バッファ１３のパケットＣ１を読み出して、読み出したパケットＣ１を回線４０に出力する。キュー選択部３５がキュー・バッファ１３を選択したので、カウンタ３３はカウント値をデクリメントして、カウント値を「１」にする。
【００３４】
キュー・バッファ１３を選択したので、キュー選択部３５は、カウンタ３１のカウント値を確認する。カウンタ３１のカウント値は「０」である。そのため、キュー選択部３５は、ラウンドロビン方向でカウンタ３１のつぎのカウンタ３２のカウント値を確認する。カウンタ３２のカウント値は「２」であるので、キュー選択部３５は、キュー・バッファ１２を選択して、キュー・バッファ１２のパケットを読み出すように多重化部２０に通知する。
【００３５】
図２（ｅ）に示すように、多重化部２０は、キュー・バッファ１２のパケットＢ２を読み出して、読み出したパケットＢ２を回線４０に出力する。キュー選択部３５がキュー・バッファ１２を選択したので、カウンタ３２はカウント値をデクリメントして、カウント値を「１」にする。
【００３６】
キュー・バッファ１２を選択したので、キュー選択部３５は、キュー・バッファ１３に対応するカウンタ３３のカウント値を確認する。カウンタ３３のカウント値は「１」であるので、キュー選択部３５はキュー・バッファ１３を選択して、キュー・バッファ１３のパケットを読み出すように多重化部２０に通知する。
【００３７】
図３（ｆ）に示すように、多重化部２０は、キュー・バッファ１３のパケットＣ２を読み出して、読み出したパケットＣ２を回線４０に出力する。キュー選択部３５がキュー・バッファ１３を選択したので、カウンタ３３はカウント値をデクリメントして、カウント値を「０」にする。
【００３８】
キュー・バッファ１３を選択したので、キュー選択部３５は、キュー・バッファ１１に対応するカウンタ３１のカウント値を確認する。カウンタ３１のカウント値は「０」であるので、キュー選択部３５は、ラウンドロビン方向でカウンタ３１のつぎのカウンタ３２のカウント値を確認する。カウンタ３２のカウント値は「１」であるので、キュー選択部３５はキュー・バッファ１２を選択して、キュー・バッファ１２のパケットを読み出すように多重化部２０に通知する。
【００３９】
図３（ｇ）に示すように、多重化部２０は、キュー・バッファ１２のパケットＢ３を読み出して、読み出したパケットＢ３を回線４０に出力する。キュー選択部３５がキュー・バッファ１２を選択したので、カウンタ３２はカウント値をデクリメントして、カウント値を「０」にする。
【００４０】
ここで、カウンタ３１〜３３のそれぞれのカウント値が全て「０」となる。キュー選択部３５は、カウンタ３３、カウンタ３１、カウンタ３２の順に各カウンタのカウント値を確認して、各カウンタのカウント値が「０」であることを確認すると、重み付け演算部３６に初期値を設定するように通知する。
【００４１】
通知を受けると重み付け演算部３６は、予め定められたキュー・バッファ１１〜１３の重み付けの値をカウンタ３１〜３３に設定する。キュー・バッファ１１の重み付けが「１」、キュー・バッファ１２の重み付けが「３」、キュー・バッファ１３の重み付けが「２」であるので、重み付け演算部３６は、図３（ｈ）に示すように、カウンタ３１に「１」を、カウンタ３２に「３」を、カウンタ３３に「２」を設定する。
【００４２】
重み付け演算部３６がカウンタ３１〜３３に新たにカウント値を設定した後、キュー選択部３５は、ラウンドロビン方向に順にカウンタ３１〜３３のカウント値を確認して、カウント値が「０」でない場合には、そのカウンタに対応するキュー・バッファを選択し、カウント値が「０」の場合には、つぎのカウンタのカウント値を確認する。多重化部２０は、キュー選択部３５が選択したキュー・バッファのパケットを読み出して回線４０に出力する動作を繰り返す。図３（ｊ）、図３（ｋ）および図３（ｍ）はその様子を示している。
【００４３】
つぎに、図４および図５を参照して、キュー・バッファ１１に蓄積されたパケットが予め定められた閾値を超えた場合を例にあげて、重み付け優先制御装置が第２のアルゴリズムに基づいてパケットを出力する動作を説明する。ここでは、第２のアルゴリズムにより同一のキュー・バッファを連続して選択する限度を４回とする。
【００４４】
図４（ａ）において、キュー・バッファ１１は、パケットＡ１〜Ａ５を、キュー・バッファ１２はパケットＢ１〜Ｂ５を、キュー・バッファ１３はパケットＣ１〜Ｃ５をそれぞれ蓄積しており、カウンタ３１には「１」が、カウンタ３２には「３」が、カウンタ３３には「２」が設定されている。すなわち、カウンタ３１〜３３には、キュー・バッファ１１〜１３の重み付けの値が初期値として重み付け演算部３６により設定されている。また、キュー監視部３４に予め定められている閾値は、点線で示したようにここではパケット６個分のパケット長とする。
【００４５】
キュー・バッファ１３〜３３に蓄積されているパケットの量は、それぞれ５つで閾値を超えていないので、キュー選択部３５は第１のアルゴリズムに基づいてキュー・バッファを選択する。キュー選択部３５は、カウンタ３２のカウント値が  「３」であることを確認して、キュー・バッファ１２を選択する。図４（ｂ）に示すように、多重化部２０は、キュー・バッファ１２のパケットＢ１を読み出して、読み出したパケットＢ１を回線４０に出力する。キュー選択部３５がキュー・バッファ１２を選択したので、カウンタ３２はカウント値をデクリメントして、カウント値を「２」にする。また、パケットＢ１を回線４０に出力している間に、キュー・バッファ１１にパケットＡ６〜Ａ９が、キュー・バッファ１２にパケットＢ６が新たに蓄積され、キュー・バッファ１１に蓄積されたパケットの合計パケット長が閾値を超えたとする。キュー監視部３４は、キュー・バッファ１１に蓄積されたパケットの量が閾値を超えたことを検知して、キュー・バッファ１１が閾値を超えたことを通知するための超過情報をキュー選択部３５に出力する。
【００４６】
キュー・バッファ１２を選択したので、本来、キュー選択部３５は、カウンタ３３のカウント値が「２」であることを確認してキュー・バッファ１３を選択する。しかし、キュー監視部３４から超過情報が通知されたため、通知された超過情報に含まれるキュー・バッファ１１を選択する。すなわち、第１のアルゴリズムに基づいて選択したキュー・バッファ１２ではなく、第２のアルゴリズムに基づいて選択したキュー・バッファ１１を優先して、キュー・バッファ１１のパケットを読み出すように多重化部２０に通知する。
【００４７】
図４（ｃ）に示すように、多重化部２０は、キュー・バッファ１１のパケットＡ１を読み出して、読み出したパケットＡ１を回線４０に出力する。キュー選択部３５がキュー・バッファ１１を選択したので、カウンタ３１はカウント値をデクリメントして、カウント値を「０」にする。
【００４８】
キュー・バッファ１１に蓄積されているパケットの合計パケット長は「８」となるが、まだ閾値を超えている。キュー監視部３４は、キュー・バッファ１１が閾値を超えていることを超過情報によりキュー選択部３５に通知する。キュー選択部３５は、通知された超過情報に含まれるキュー・バッファ１１を選択して、キュー・バッファ１１のパケットを読み出すように多重化部２０に通知する。
【００４９】
図４（ｄ）に示すように、多重化部２０は、キュー・バッファ１１のパケットＡ２を読み出して、読み出したパケットＡ２を回線４０に出力する。キュー選択部３５がキュー・バッファ１１を選択したので、カウンタ３１はカウント値をデクリメントして、カウント値を「−１」にする。
【００５０】
カウンタ３１のカウント値が「−１」になると、重み付け演算部３６は、各カウンタのカウント値に予め定められた重み付けの値を加算した値を各カウンタに設定する。キュー・バッファ１１の重み付けの値は「１」、キュー・バッファ１２の重み付けの値は「３」、キュー・バッファ１３の重み付けの値は「２」であり、カウンタ３１のカウント値は「−１」、カウンタ３２のカウント値は「２」、カウンタ３３のカウント値は「２」である。重み付け演算部３６は、図４（ｅ）に示すように、カウンタ３１のカウント値「−１」とキュー・バッファ１１の重み付けの値「１」を加算した値「０」をカウンタ３１に、カウンタ３２のカウント値「２」とキュー・バッファ１２の重み付けの値「３」を加算した値「５」をカウンタ３１に、カウンタ３３のカウント値「２」とキュー・バッファ１３の重み付けの値「２」を加算した値「４」をカウンタ３３に、それぞれ設定する。
【００５１】
キュー・バッファ１１に蓄積されているパケットの合計パケット長は「７」となるが、まだ閾値を超えている。キュー監視部３４は、キュー・バッファ１１が閾値を超えていることを超過情報によりキュー選択部３５に通知する。キュー選択部３５は、通知された超過情報に含まれるキュー・バッファ１１を選択して、キュー・バッファ１１のパケットを読み出すように多重化部２０に通知する。
【００５２】
図４（ｆ）に示すように、多重化部２０は、キュー・バッファ１１のパケットＡ３を読み出して、読み出したパケットＡ３を回線４０に出力する。キュー選択部３５がキュー・バッファ１１を選択したので、カウンタ３１はカウント値をデクリメントして、カウント値を「−１」にする。
【００５３】
カウンタ３１のカウント値が「−１」になると、重み付け演算部３６は、各カウンタのカウント値に予め定められた重み付けの値を加算した値を各カウンタに設定する。キュー・バッファ１１の重み付けの値は「１」、キュー・バッファ１２の重み付けの値は「３」、キュー・バッファ１３の重み付けの値は「２」であり、カウンタ３１のカウント値は「−１」、カウンタ３２のカウント値は「５」、カウンタ３３のカウント値は「４」である。重み付け演算部３６は、図５（ｇ）に示すように、カウンタ３１のカウント値「−１」とキュー・バッファ１１の重み付けの値「１」を加算した値「０」をカウンタ３１に、カウンタ３２のカウント値「５」とキュー・バッファ１２の重み付けの値「３」を加算した値「８」をカウンタ３１に、カウンタ３３のカウント値「４」とキュー・バッファ１３の重み付けの値「２」を加算した値「６」をカウンタ３３に、それぞれ設定する。キュー・バッファ１１に蓄積されているパケットの合計パケット長は「６」になり、閾値以下となる。キュー・バッファ１１に蓄積されているパケットの量が閾値以下になったので、キュー選択部３５は、第１のアルゴリズムに基づいてキュー・バッファを選択する。キュー・バッファ１１を選択していたので、キュー選択部３５は、カウンタ３２のカウント値を確認する。カウンタ３２の値は「８」であるので、キュー選択部３５は、キュー・バッファ１２を選択して、キュー・バッファ１２のパケットを読み出すように多重化部２０に通知する。
【００５４】
図５（ｈ）に示すように、多重化部２０は、キュー・バッファ１２のパケットＢ２を読み出して、読み出したパケットＢ２を回線４０に出力する。キュー選択部３５がキュー・バッファ１２を選択したので、カウンタ３２はカウント値をデクリメントして、カウント値を「７」にする。
【００５５】
その後、新たにキュー・バッファ１１〜１３にパケットが蓄積されても、キュー・バッファ１１〜１３のそれぞれに蓄積されたパケットの合計パケット長が閾値を超えなければ、キュー選択部３５は第１のアルゴリズムに基づいてキュー・バッファを選択する。第１のアルゴリズムでの動作については図２および図３を参照して説明したものと同様となるのでここでは詳細な動作の説明は省略する。
【００５６】
キュー選択部３５は、ラウンドロビン方向にカウンタ３１〜３３のカウント値が「０」でないものを検索し、最初に検出したカウンタに対応するキュー・バッファをパケット読み出し対象のキュー・バッファとして選択し、多重化部２０は、キュー選択部３５が選択したキュー・バッファのパケットを読み出して、読み出したパケットを回線４０に出力する。そして、キュー選択部３５が選択したキュー・バッファに対応するカウンタは、カウント値をデクリメントする。このような動作を、カウンタ３１〜３３のカウント値が全て「０」になるまで繰り返す。図５（ｈ）では、カウンタ３１のカウント値は「０」である。したがって、キュー・バッファ１２とキュー・バッファ１３に蓄積されているパケットが、それぞれのカウンタ３２、３３のカウント値が「０」になるまで、交互に回線４０に出力される。その様子を、図５（ｊ）、図５（ｋ）および図５（ｍ）に示す。そして、キュー・バッファ１１〜１３に蓄積されたパケットがなくなることなく、かつ、キュー・バッファ１１〜１３に蓄積されたパケットが閾値を超えることなくパケットが蓄積されたとすると、最終的には図５（ｎ）に示すように、カウンタ３１〜３３のカウント値全てが「０」となる。
【００５７】
カウンタ３１〜３３のカウント値が全て「０」になると、重み付け演算部３６は、予め定められたキュー・バッファ１１〜１３の重み付けの値をカウンタ３１〜３３に設定する。そして、キュー選択部３５は重み付けの値が設定されたカウンタ３１〜３３の値を用いてキュー・バッファを選択する。
【００５８】
ここで、実際に、カウンタ３１〜３３に重み付けの値が設定されてから、全てのカウンタのカウント値が「０」になるまでの期間に出力されたパケットが、キュー・バッファ１１〜１３に予め定められた重み付けの値である「１：３：２」の割合となっているかを確認する。図５（ｎ）に示すように、キュー・バッファ１１から出力されたパケットはＡ１〜Ａ３の３つであり、キュー・バッファ１２から出力されたパケットはＢ１〜Ｂ９の９つであり、キュー・バッファ１３から出力されたパケットはＣ１〜Ｃ６の６つである。したがって、各キュー・バッファから出力されたパケットの割合は、「３：９：６＝１：３：２」であり、重み付けの値である「１：３：２」が維持されていることがわかる。
【００５９】
このようにこの実施の形態１では、複数のキュー・バッファに蓄積されているデータに対して一定の割合の帯域を保証するために、予め定められた重み付けの値による優先度に基づいて複数のキュー・バッファの優先順位を決定してデータを読み出すキュー・バッファを選択する第１のアルゴリズムと、第１のアルゴリズムとは異なる第２のアルゴリズムによりデータを読み出すキュー・バッファを選択する第２のアルゴリズムがあり、これら２つのアルゴリズムにより選択したキュー・バッファが異なる場合には、第２のアルゴリズムにより選択したキュー・バッファを優先してデータを出力する。その際に、優先したキュー・バッファ以外の全てのキュー・バッファ優先度を上げるようにしているため、第２のアルゴリズムにより選択したキュー・バッファを優先した場合でも、第１のアルゴリズムの帯域保証の精度を維持することができる。
【００６０】
なお、説明を簡単にするために、第２のアルゴリズムによってキュー・バッファ１を選択する条件を閾値として説明したが、第２のアルゴリズムによってキュー・バッファ１を選択する条件にヒステリシスを用いてもよい。
【００６１】
また、この実施の形態１では、第２のアルゴリズムにより同一のキュー・バッファを連続して選択する限度を４回とした。したがって、たとえば、キュー・バッファ１１に蓄積されているパケットが閾値を超えた場合、キュー・バッファ１１から第２のアルゴリズムによって４回連続でパケットを読み出した後、さらにキュー・バッファ１１に蓄積されているパケットが閾値を超えていても、第１のアルゴリズムを優先することになる。しかし、第１のアルゴリズムを優先する条件はこれに限るものではなく、つぎのような条件も考えられる。
【００６２】
第２のアルゴリズムを優先したことにより、第２のアルゴリズムで選択されたキュー・バッファ以外のカウンタのカウント値は増加する。本発明では、このカウント値の増加の限度値を設定しておき、カウント値が限度値を超えた場合には、キュー監視部３４の要求に拘わらず、限度値を超えたカウンタに対応するキュー・バッファからパケットの読み出しを優先するか、全てのカウンタのカウント値が限度値以下になるまで第１のアルゴリズムによって選択されたキュー・バッファからパケットを読み出すようにしてもよい。カウンタ値の限度値は、各キュー・バッファの重み付けの値、システムに要求される性能、リソースとして実装されるキュー・バッファの深さにより決定すればよい。すなわち、第１のアルゴリズムおよび第２のアルゴリズムの達成度の折り合いは、そのシステムによって決定すればよい。このように、各カウンタのカウント値（優先度）が限度値までは第２のアルゴリズムを優先するが、優先度が限度値を超えた場合には帯域を保証する第１のアルゴリズムを優先することにより、実装時のカウンタのビット値を決定することができ、実装上の問題を解決することができるとともに、第２のアルゴリズムを守り続けて帯域保証が維持できなくなるという現象を防ぐことができる。
【００６３】
また、この実施の形態１では、第２のアルゴリズムを「キュー・バッファからパケットがあふれる前にデータが集中しているキュー・バッファを検知して、検知したキュー・バッファのパケットを優先的に回線に出力する」とした。しかし、第２のアルゴリズムはこれに限定されるものではなく、帯域を保証する帯域制御のアルゴリズムとは異なるものであればよい。たとえば、帯域制御のアルゴリズムと優先度が競合するものとして、入力バッファ型スイッチに帯域制御のアルゴリズムを追加した場合がある。この場合、入力バッファ型スイッチのスイッチ交換アルゴリズムと、帯域制御のアルゴリズムとが競合することがある。入力バッファ型スイッチは、Ｎ（Ｎは自然数）×Ｎポートの交換を行う際に、交換するデータの入力と出力のポートを常に「１：１」に接続しなければデータを流すことができない。つまり、複数の入力ポートから１つの出力ポートへ１回の交換でデータを転送することは不可能であり、交換アルゴリズムがスイッチのスループット性能に与える影響は大きい。そのため交換アルゴリズム性能を維持するのと、帯域制御を維持するのとでは、どちらを優先すべきかはシステム設計で決定すればよい。
【００６４】
実施の形態２．
図６〜図８を用いて本発明の実施の形態２を説明する。実施の形態１では、帯域制御のアルゴリズムとそれとは異なるアルゴリズムとをキュー・バッファの常態に応じて選択して固定長のパケットを回線に出力する際に、帯域制御の制度を維持するようにした。しかしながら、実際のシステムにおいて、パケットは固定長とは限らない。この実施の形態２では、キュー・バッファの状態に応じて帯域制御のアルゴリズムとそれとは異なるアルゴリズムとを選択して、可変長のパケットを回線に出力した際にも、帯域制御の精度を維持するものである。
【００６５】
図６は、この発明における実施の形態２の重み付け優先制御方法に基づいて動作する重み付け優先制御装置の構成を示すブロック図である。図６に示した重み付け優先制御装置は、図１に示した実施の形態１の重み付け優先制御装置のキュー制御部３０の変わりにキュー制御部３０ａを備えている。実施の形態１と同じ機能を持つ構成部分には同一符号を付し、重複する説明は省略する。
【００６６】
キュー制御部３０ａは、重み付けによる帯域制御を行い回線の帯域の一定量の割合を保証する第１のアルゴリズムと、帯域制御とは異なるアルゴリズムによりパケットを読み出すべきキュー・バッファを決定する第２のアルゴリズムとを有し、キュー・バッファ１１〜１３を監視して、キュー・バッファ１１〜１３の状態に基づいて、第１のアルゴリズムで選択したキュー・バッファと第２のアルゴリズムで選択したキュー・バッファのどちらを優先するかを選択する。そして、選択したキュー・バッファを多重化部２０に通知する。
【００６７】
第１のアルゴリズムは、複数のキュー・バッファそれぞれに設定された重み付けの値を初期値とし、各キュー・バッファからのデータ読み出しの度に算出される優先度に基づき複数のキュー・バッファの優先順位を決定し、決定した優先順位に従ってデータを読み出すキュー・バッファを選択することにより、データの帯域を保証するアルゴリズムである。
【００６８】
この発明における実施の形態２の重み付け優先制御装置と、実施の形態１の重み付け優先制御装置との違いは、扱うパケットが可変長であるのか固定長であるのかの違いである。そのため、実施の形態２では、重み付け処理が実施の形態１のＷＲＲ方式とは異なるアルゴリズムを採用する。
【００６９】
まず、可変長のパケットの制御に適用される重み付け処理について説明する。ここで、キュー・バッファ１１の重み付けの値を「４」、キュー・バッファ１２の重み付けの値を「３」、キュー・バッファ１３の重み付けの値を「６」とする。これら重み付けの値は、キュー・バッファ１１から読み出された総パケット長をｘ１、キュー・バッファ１２から読み出された総パケット長をｘ２、キュー・バッファ１３から読み出された総パケット長をｘ３とすると、回線４０にパケットを出力する時の帯域が、「ｘ１：ｘ２：ｘ３＝４：６：３」の比で維持されるようにすることを意味する。この実施の形態２の第１のアルゴリズムにおいては、これら重み付けの値の逆数を帯域制御に利用する。ここで、制御値をｙとすると、制御値ｙは、
ｙ＝（１／重み付けの値）×１００      ・・・（式１）
で表される。ただし、ｙは小数点以下を四捨五入した整数とする。（式１）では、１００をかけるようにしているが、これに限定されるものではなく、ハードウエアで実現する場合にはそのハードウエアに応じて、また、システムの要求する精度に応じて適切な値を決定すればよい。
【００７０】
（式１）を用いた場合、キュー・バッファ１１の制御値ｙ１は、
ｙ１＝（１／４）×１００＝２５
となり、キュー・バッファ１２の制御値ｙ２は、
ｙ２＝（１／６）×１００＝３３
となり、キュー・バッファ１３の制御値ｙ３は、
ｙ３＝（１／３）×１００＝１７
となる。この実施の形態２の重み付け優先制御装置は、これらの制御値ｙ１〜ｙ３に基づいて帯域制御を行う。
【００７１】
第１のアルゴリズムは、キュー・バッファ１１〜１３の先頭のパケット長とキュー・バッファ１１〜１３に対応した制御値ｙ１〜ｙ３との積をカウント値（優先度）とし、これらのカウント値を比較して、一番小さい値のカウント値のキュー・バッファを選択する。すなわち、常に各キュー・バッファの一番先頭のパケットだけが考慮の対象として重み付けの帯域制御を行う。なお、カウント値が等しい場合には、ラウンドロビン等を付加的に実施して常に１つを選択する。
【００７２】
第２のアルゴリズムは、実施の形態１と同様に、キュー・バッファからパケットがあふれる前にパケットが集中しているキュー・バッファを検知して、検知したキューのデータを優先的に回線に出力するためのアルゴリズムである。
【００７３】
キュー制御部３０ａは、キュー・バッファ１１〜１３に対応した重み付けの値を記憶するカウント値レジスタ３７〜３９と、キュー・バッファ１１〜１３がそれぞれ蓄積しているパケットの合計パケット長を監視するキュー監視部３４と、つぎにパケットを読み出すべきキュー・バッファを決定するキュー選択部３５ａと、キュー・バッファ１１〜１３の重み付けの値を算出する重み付け演算部３６ａとを備えている。
【００７４】
キュー選択部３５ａは、第１のアルゴリズムまたは第２のアルゴリズムに基づいてつぎにパケットを読み出すべきキュー・バッファを選択して、選択したキュー・バッファのパケットを読み出すように多重化部２０に通知するとともに、選択したキュー・バッファを重み付け演算部３６ａに通知する。
【００７５】
第１のアルゴリズムの場合、キュー選択部３５ａは、カウント値レジスタ３７〜３９に保持されているカウント値を比較して、一番小さい値のカウント値を検索し、検索したカウント値を保持するカウント値レジスタに対応するキュー・バッファを選択する。カウント値が等しい場合には、ラウンドロビン等を付加的に実施して常に１つを選択する。第２のアルゴリズムの場合、キュー選択部３５ａは、キュー監視部３４から通知された超過情報内のキュー・バッファを選択する。
【００７６】
キュー選択部３５ａが選択したキュー・バッファに対応するカウント値レジスタのカウント値が「０」以上の場合、重み付け演算部３６ａは、キュー選択部３５ａが選択したキュー・バッファに対応するカウント値レジスタのカウント値を各カウント値レジスタのカウント値から減算する。そして、減算したカウント値をカウント値レジスタに設定する。また、キュー選択部３５ａが選択したキュー・バッファに対応するカウント値レジスタには、選択したキュー・バッファの先頭のパケット長と（式１）に基づいて算出した制御値の積を設定する。
【００７７】
キュー選択部３５ａが選択したキュー・バッファに対応するカウント値レジスタのカウント値が「０」より小さい場合、重み付け演算部３６ａは、キュー選択部３５ａが選択したキュー・バッファに対応するカウント値レジスタのカウント値に、選択したキュー・バッファの先頭のパケット長と（式１）に基づいて算出した制御値の積を加算する。そして、加算した値をキュー選択部３５ａが選択したキュー・バッファに対応するカウント値レジスタに設定する。
【００７８】
カウント値レジスタ３７〜３９は、各カウンタに対応したキュー・バッファの先頭パケットのパケット長と（式１）に基づいて算出された制御値との積を保持する。カウント値レジスタ３７がキュー・バッファ１１に、カウント値レジスタ３８がキュー・バッファ１２に、カウント値レジスタ３９がキュー・バッファ１３にそれぞれ対応する。
【００７９】
図７および図８は、キュー・バッファ１１〜１３に蓄積されているパケットと、カウント値レジスタ３７〜３９の値と、キュー選択部３５ａが選択したキュー・バッファのパケットを多重化部２０が読み出して、読み出したパケットを回線４０に出力した様子を示す図である。図７および図８を参照して、この発明における実施の形態２の重み付け優先制御装置の動作を説明する。
【００８０】
まず、図７を参照して、第１のアルゴリズムに基づいてパケットを出力する動作を説明する。図７（ａ）において、キュー・バッファ１１はパケットＡ１〜Ａ３を、キュー・バッファ１２はパケットＢ１〜Ｂ４を、キュー・バッファ１３はパケットＣ１〜Ｃ３をそれぞれ蓄積している。予め定められている基準パケット長を「１」とすると、パケットＡ１のパケット長は「３」、パケットＡ２のパケット長は「２」、パケットＡ３のパケット長は「２」、パケットＢ１のパケット長は「１」、パケットＢ２のパケット長は「２」、パケットＢ３のパケット長は「３」、パケットＢ４のパケット長は「１」、パケットＣ１のパケット長は「２」、パケットＣ２のパケット長は「１」、パケットＣ３のパケット長は「４」である。
【００８１】
カウント値レジスタ３７には（式１）を用いて算出した制御値ｙ１である「２５」とキュー・バッファ１１の先頭のパケットＡ１のパケット長「３」を乗算した値「７５」が、カウント値レジスタ３８には（式１）を用いて算出した制御値ｙ２である「３３」とキュー・バッファ１２の先頭のパケットＢ１のパケット長「１」を乗算した値「３３」が、カウント値レジスタ３９には（式１）を用いて算出した制御値ｙ３である「１７」とキュー・バッファ１３の先頭のパケットＣ１のパケット長「２」を乗算した値「３４」が設定されている。
【００８２】
ここでは、キュー監視部３４に予め定められている閾値は、点線で示したように基準パケット長７個分のパケット長とする。キュー・バッファ１１に蓄積されているパケットＡ１〜Ａ３の合計パケット長、キュー・バッファ１２に蓄積されているパケットＢ１〜Ｂ４の合計パケット長、キュー・バッファ１３に蓄積されているパケットＣ１〜Ｃ３の合計パケット長は、それぞれ「７」であり、閾値を超えていない。
【００８３】
キュー選択部３５ａは、カウント値レジスタ３７〜３９に設定されているカウント値を比較して一番小さいカウント値を検索し、検索したカウント値レジスタに対応するキュー・バッファを選択する。そして、選択したキュー・バッファのパケットを読み出すように多重化部２０に通知するとともに、選択したキュー・バッファを重み付け演算部３６ａに通知する。ここでは、カウント値レジスタ３８に保持されているカウント値「３３」が一番小さいので、キュー選択部３５ａはキュー・バッファ１２を選択する。
【００８４】
図７（ｂ）に示すように、多重化部２０は、キュー・バッファ１２のパケットＢ１を読み出して、読み出したパケットＢ１を回線４０に出力する。カウント値レジスタ３８のカウント値が「０」以上であるので、重み付け演算部３６ａは、カウント値レジスタ３７〜３９のそれぞれのカウント値からカウント値レジスタ３８のカウント値を減算し、減算した値を新たなカウント値としてカウント値レジスタ３７〜３９に設定する。
【００８５】
ここでは、図７（ａ）に示したように、カウント値レジスタ３７のカウント値が「７５」、カウント値レジスタ３８のカウント値が「３３」、カウント値レジスタ３９のカウント値が「３４」である。したがって、カウント値レジスタ３７のカウント値は「４２」、カウント値レジスタ３８のカウント値は「０」、カウント値レジスタ３９のカウント値は「１」となる。
【００８６】
キュー・バッファ１２のパケットＢ１を読み出したので、重み付け演算部３６ａは、キュー・バッファ１２の先頭のパケットＢ２のパケット長「２」と（式１）に基づいて算出したキュー・バッファ１２の制御値ｙ２である「３３」との積「６６」をカウント値レジスタ３８に設定する。したがって、図７（ｂ）に示すように、カウント値レジスタ３７のカウント値は「４２」、カウント値レジスタ３８のカウント値は「６６」、カウント値レジスタ３９のカウント値は「１」となる。
【００８７】
このように第１のアルゴリズムでは、キュー選択部３５ａは、カウント値レジスタ３７〜３９のカウント値を比較して、一番小さいカウント値を検索して、検索したカウント値レジスタに対応するキュー・バッファを選択し、多重化部２０は、選択されたキュー・バッファに蓄積されている先頭のパケットを回線４０に出力する。重み付け演算部３６ａは、選択されたキュー・バッファに対応するカウント値レジスタのカウント値を、各カウント値レジスタの値から減算して、新たなカウント値を各カウント値レジスタに設定する。そして、選択されたキュー・バッファに対応するカウント値レジスタには、キュー・バッファの先頭のパケットのパケット長と（式１）を用いて算出した制御値との積をカウント値として設定する動作を繰り返す。その時のキュー・バッファ１１〜１３に蓄積されているパケットと、カウント値レジスタ３７〜３９の値と、キュー選択部３５ａが選択したキュー・バッファのパケットを多重化部２０が読み出して、読み出したパケットを回線４０に出力した様子を図７（ｃ）〜図７（ｆ）に示す。
【００８８】
ここで、第１のアルゴリズムがＷＲＲ方式やＷＲＱ方式と同様に、キュー・バッファに蓄積されるパケットが輻輳してきた時点においても、各キュー・バッファ毎に出力先の帯域の一定割合以上の帯域を保証することが可能であることを簡単に説明する。
【００８９】
ある時間ｔ内に出力先に読み出されたパケットについて、キュー・バッファＳ（ここでは、キュー・バッファ１１〜１３であり、Ｓ＝１１，１２，１３とする）から読み出されたパケット数をＮｓ（ここでは、キュー・バッファＳごとに、１、２、…、Ｎｓ）、キュー・バッファＳから読み出されたパケットそれぞれのパケット長をｓＰｎ、各キュー・バッファ毎の重み付けをＢｓとすると、キュー・バッファＳ帯域が重み付けの値で維持されるためには、
【数１】
2005033408.tif 000003
が成り立つ必要がある。
【００９０】
【数２】
2005033408.tif 000004
は、キュー・バッファＳから出力された実際の帯域をあらわすので、それぞれの比がＢｓに対応していればよい。厳密には、（式２）の各項が等しく（「＝」で結ばれる）ならなければならないが、有限の時間ｔにおいて、パケット長が可変であるため等しくはならない。（式２）を比の形式で表すと、
【数３】
2005033408.tif 000005
となる。ここでは、時間ｔは共通であるので削除している。そして、各項のΣ内の項、１１Ｐ１／Ｂ１１，１１Ｐ２／Ｂ１１，１１Ｐ３／Ｂ１１，…，１１Ｐｎ／Ｂ１１は、まさに重み付け演算部３６ａが算出する「キュー・バッファ１１の先頭のパケット長×重み付けの値の逆数」に他ならない。したがって、上述したような動作を行うことは、ある時間ｔにおける（式３）の各項の差を、常に極力小さく（最小ではない）維持していくことになる。厳密には、最小でなければならないが、ハードウエアで実現する場合、他の要件も含めて考えると帯域制御の方式の１つとして十分である。
【００９１】
つぎに、図８を参照して、この発明における実施の形態２の重み付け優先制御装置が、第２のアルゴリズムに基づいてパケットを出力する動作を説明する。
【００９２】
図８（ａ）において、キュー・バッファ１１はパケットＡ１〜Ａ３を、キュー・バッファ１２はパケットＢ１〜Ｂ４を、キュー・バッファ１３はパケットＣ１〜Ｃ４をそれぞれ蓄積している。予め定められている基準パケット長を「１」とすると、パケットＡ１のパケット長は「３」、パケットＡ２のパケット長は「２」、パケットＡ３のパケット長は「２」、パケットＢ１のパケット長は「１」、パケットＢ２のパケット長は「２」、パケットＢ３のパケット長は「３」、パケットＢ４のパケット長は「１」、パケットＣ１のパケット長は「２」、パケットＣ２のパケット長は「１」、パケットＣ３のパケット長は「４」である。
【００９３】
カウント値レジスタ３７には（式１）を用いて算出した制御値ｙ１である「２５」とキュー・バッファ１１の先頭のパケットＡ１のパケット長「３」を乗算した値「７５」が、カウント値レジスタ３８には（式１）を用いて算出した制御値ｙ２である「３３」とキュー・バッファ１２の先頭のパケットＢ１のパケット長「１」を乗算した値「３３」が、カウント値レジスタ３９には（式１）を用いて算出した制御値ｙ３である「１７」とキュー・バッファ１３の先頭のパケットＣ１のパケット長「２」を乗算した値「３４」が設定されている。
【００９４】
ここでは、キュー監視部３４に予め定められている閾値は、点線で示したように基準パケット長７個分のパケット長とする。キュー・バッファ１１に蓄積されているパケットＡ１〜Ａ３の合計パケット長、キュー・バッファ１２に蓄積されているパケットＢ１〜Ｂ４の合計パケット長、キュー・バッファ１３に蓄積されているパケットＣ１〜Ｃ３の合計パケット長は、それぞれ「７」であり、閾値を超えていない。しがたって、キュー制御部３０ａは、上述した第１のアルゴリズムに基づいてキュー・バッファ選択して、多重化部２０は、キュー制御部３０ａが選択したパケットを読み出して、読み出したパケットを回線４０に出力する動作を繰り返し、パケットＢ１、パケットＣ１、パケットＣ２、パケットＡ１の順に回線４０にパケットを出力する（図７（ｂ）〜図７（ｅ）参照）。
【００９５】
ここで、図８（ｂ）に示すように、キュー・バッファ１３にパケット長「１」のパケットＣ４とパケット長「３」のパケットＣ５が蓄積されたとする。キュー・バッファ１３に蓄積されているパケットＣ３〜Ｃ５の合計パケット長は「８」となり、閾値「７」を超える。キュー監視部３４は、キュー・バッファ１３に蓄積されているパケットＣ３〜Ｃ５の合計パケット長が閾値を超えたことを検知して、キュー・バッファ１３が閾値を超えたことを通知するための超過情報をキュー選択部３５ａに出力する。
【００９６】
キュー監視部３４から超過情報が通知されたため、キュー選択部３５ａは、通知された超過情報に含まれるキュー・バッファ１３を選択する。すなわち、第１のアルゴリズムに基づいてカウント値の一番小さいキュー・バッファ１２ではなく、第２のアルゴリズムに基づいて選択したキュー・バッファ１３を優先し、キュー・バッファ１３のパケットを読み出すように多重化部２０に通知する。
【００９７】
多重化部２０は、キュー・バッファ１３のパケットＣ３を読み出して、読み出したパケットＣ３を回線４０に出力する。重み付け演算部３６ａは、カウント値レジスタ３７〜３９のそれぞれのカウント値からカウント値レジスタ３９のカウント値を減算し、減算した値を新たなカウント値としてカウント値レジスタ３７〜３９に設定する。
【００９８】
図８（ｂ）に示したように、カウント値レジスタ３７のカウント値が「５０」、カウント値レジスタ３８のカウント値が「２４」、カウント値レジスタ３９のカウント値が「４４」である。したがって、カウント値レジスタ３７のカウント値は「６」、カウント値レジスタ３８のカウント値は「−２０」、カウント値レジスタ３９のカウント値は「０」となる。
【００９９】
キュー・バッファ１３のパケットＣ３を読み出したので、重み付け演算部３６ａは、キュー・バッファ１３の先頭のパケットＣ４のパケット長「１」と（式１）に基づいて算出したキュー・バッファ１３の制御値ｙ３である「１７」を乗算した値「１７」をカウント値レジスタ３７に設定する。したがって、図８（ｃ）に示すように、カウント値レジスタ３７のカウント値は「６」、カウント値レジスタ３８のカウント値は「−２０」、カウント値レジスタ３９のカウント値は「１７」となる。
【０１００】
ここで、キュー・バッファ１１にパケット長「２」のパケットＡ４とパケット長「３」のパケットＡ５が蓄積されたとする（図８（ｃ）参照）。キュー・バッファ１１に蓄積されているパケットＡ２〜Ａ５の合計パケット長が「８」となり、閾値「７」を超える。キュー監視部３４は、キュー・バッファ１１に蓄積されているパケットＡ２〜Ａ５の合計パケット長が閾値を超えたことを検知して、キュー・バッファ１１が閾値を超えたことを通知するための超過情報をキュー選択部３５ａに出力する。
【０１０１】
キュー監視部３４から超過情報が通知されたため、キュー選択部３５ａは、通知された超過情報に含まれるキュー・バッファ１１を選択して、キュー・バッファ１１のパケットを読み出すように多重化部２０に通知する。
【０１０２】
多重化部２０は、キュー・バッファ１１のパケットＡ２を読み出して、読み出したパケットＡ２を回線４０に出力する。重み付け演算部３６ａは、カウント値レジスタ３７〜３９のそれぞれのカウント値からカウント値レジスタ３７のカウント値を減算し、減算した値を新たなカウント値としてカウント値レジスタ３７〜３９に設定する。
【０１０３】
図８（ｃ）に示したように、カウント値レジスタ３７のカウント値が「６」、カウント値レジスタ３８のカウント値が「−２０」、カウント値レジスタ３９のカウント値が「１７」である。したがって、カウント値レジスタ３７のカウント値は「０」、カウント値レジスタ３８のカウント値は「−２６」、カウント値レジスタ３９のカウント値は「１１」となる。
【０１０４】
キュー・バッファ１１のパケットＡ２を読み出したので、重み付け演算部３６ａは、キュー・バッファ１１の先頭のパケットＡ３のパケット長「２」と（式１）に基づいて算出したキュー・バッファ１１の制御値ｙ１である「２５」との積「５０」をカウント値レジスタ３７に設定する。したがって、図８（ｄ）に示すように、カウント値レジスタ３７のカウント値は「５０」、カウント値レジスタ３８のカウント値は「−２６」、カウント値レジスタ３９のカウント値は「１１」となる。
【０１０５】
図８（ｄ）に示したように、キュー・バッファ１１のパケットＡ２を出力し、キュー・バッファ１１〜１３に新たに蓄積されたパケットもないので、キュー・バッファ１１〜１３に蓄積されているパケットの各合計パケット長は、どれも閾値を超えていない。したがって、キュー選択部３５ａは、第１のアルゴリズムに基づいてキュー・バッファを選択する。すなわち、カウント値レジスタ３７〜３８のそれぞれのカウント値の一番小さいカウント値レジスタに対応するキュー・バッファを選択する。図８（ｄ）においては、キュー選択部３５ａは、カウント値が「−２６」のキュー・バッファ１２を選択し、多重化部２０は、キュー・バッファ１２のパケットＢ２を回線４０に出力する。
【０１０６】
重み付け演算部３６ａは、キュー・バッファ１２の先頭のパケットＢ３のパケット長「３」と（式１）に基づいて算出したキュー・バッファ１２の制御値ｙ２である「３３」を乗算した値「９９」を、カウント値レジスタ３８のカウント値「−２６」に加算する。そして、加算した値「７３」をカウント値レジスタ３８に設定する。重み付け演算部３６ａは、キュー・バッファ１１とキュー・バッファ１３に対応するカウント値レジスタ３７とカウント値レジスタ３９のカウント値については変更しない。すなわち、パケットを読み出したキュー・バッファに対応するカウント値レジスタのカウント値が  「０」より小さい場合（カウント値が負数の場合）、重み付け演算部３６ａは、他のカウント値レジスタのカウント値を新たに設定せず、パケットを読み出したキュー・バッファに対応するカウント値レジスタのカウント値にパケット長と制御値との積を加算する。そして、加算した値をパケットを読み出したキュー・バッファに対応するカウント値レジスタに設定する。したがって、図８（ｅ）に示すように、カウント値レジスタ３７のカウント値は「５０」、カウント値レジスタ３８のカウント値は「７３」、カウント値レジスタ３９のカウント値は「１１」となり、カウント値レジスタ３７〜３９のカウント値は、全て「０」以上となる。
【０１０７】
その後、キュー選択部３５ａは、カウント値レジスタ３７〜３９のカウント値を比較して、一番小さいカウント値のカウント値レジスタに対応するキュー・バッファ１３を選択し、多重化部２０は、キュー・バッファ１３のパケットＣ４を回線４０に出力する。そして、重み付け演算部３６ａは、カウント値レジスタ３９のカウント値をカウント値レジスタ３７〜３９のカウント値から減算するとともに、キュー・バッファ１３の先頭パケットＣ５のパケット長と（式１）に基づいて算出した制御値ｙ３を乗算して、カウント値レジスタ３７〜３９のカウント値を算出して、それぞれのカウント値レジスタに設定する。その様子を図８（ｆ）に示す。
【０１０８】
このようにこの実施の形態２では、複数のキュー・バッファに蓄積されているデータに対して一定の割合の帯域を保証するために、予め定められた重み付けの値による優先度に基づいて複数のキュー・バッファの優先順位を決定してデータを読み出すキュー・バッファを選択する第１のアルゴリズムと、第１のアルゴリズムとは異なる第２のアルゴリズムによりデータを読み出すキュー・バッファを選択する第２のアルゴリズムがあり、これら２つのアルゴリズムにより選択したキュー・バッファが異なる場合には、第２のアルゴリズムにより選択したキュー・バッファを優先してデータを出力する。その際に、優先したキュー・バッファの優先度を下げるようにしているため、第２のアルゴリズムにより選択したキュー・バッファを優先した場合でも、第１のアルゴリズムの帯域保証の精度を維持することができる。
【０１０９】
なお、カウント値レジスタの値が負数になったときの取り扱いとして、負数値をいくつまで許可するかという制限が、実現性に大きく影響する。この制限は、重みの逆数を整数に変換するために乗算する値（この場合は１００）と、パケット長として規格化された値（この場合は１から、最大４まで）によって決まる。システムに要求される性能にもよるが、最大長のパケット、数個から数十個分程度、借入ができるようにするのが妥当である。もちろんリソースとして実装されるキュー・バッファの深さもこの値を決定する要因である。そしてこのときの処理は、あるキュー・バッファのカウント値レジスタが負数の限度値に達した場合には、今度はキュー監視部３４の要求に拘わらず、負数の限度に達したカウント値レジスタに対応するキュー・バッファからのパケットの読み出しを最優先するというように、互いのアルゴリズムの達成度に折り合いをつけるようにすればよい。
【０１１０】
また、実施の形態１および２では、帯域制御を第１のアルゴリズムとし、キュー・バッファに保持するデータ長による制御を第２のアルゴリズムとして説明したが、これに限定されるものではなく、つぎにデータを読み出すべき優先制御処理が複数あって、それらの優先制御処理が共謀する可能性がある環境において適用可能である。
【０１１１】
【発明の効果】
以上説明したように、各キュー・バッファ１ごとに割り付けられた重み付けの値を初期値とし、各キュー・バッファからのデータ読み出しの度に算出される優先度に基づき複数のキュー・バッファの優先順位を決定し、決定した優先順位に従ってデータを読み出すキュー・バッファ１を選択することによりデータの帯域を保証する第１のアルゴリズムによって選択されたキュー・バッファと、第１のアルゴリズムとは異なる処理によってデータを読み出すキュー・バッファを選択する第２のアルゴリズムによって選択されたキュー・バッファとが異なる場合には、所定の条件が成立する場合を除いて、第２のアルゴリズムによって選択されたキュー・バッファを優先するとともに、優先するキュー・バッファ以外のすべてのキュー・バッファの優先度を上げるようにしているため、第２のアルゴリズムにより選択したキュー・バッファを優先した場合でも、第１のアルゴリズムの帯域の保証の精度を維持することができる。
【図面の簡単な説明】
【図１】この発明における実施の形態１の重み付け優先制御方法に基づいて動作する重み付け優先制御装置の構成を示すブロック図である。
【図２】図１に示した重み付け優先制御装置の動作を説明するための図である。
【図３】図１に示した重み付け優先制御装置の動作を説明するための図である。
【図４】図１に示した重み付け優先制御装置の動作を説明するための図である。
【図５】図１に示した重み付け優先制御装置の動作を説明するための図である。
【図６】この発明における実施の形態２の重み付け優先制御方法に基づいて動作する重み付け優先制御装置の構成を示すブロック図である。
【図７】図６に示した重み付け優先制御装置の動作を説明するための図である。
【図８】図６に示した重み付け優先制御装置の動作を説明するための図である。
【符号の説明】
１１，１２，１３  キュー・バッファ、２０  多重化部、３０  キュー制御部、３１，３２，３３  カウンタ、３４  キュー監視部、３５，３５ａ  キュー選択部、３６，３６ａ  重み付け演算部、３７，３８，３９  カウント値レジスタ、４０  回線。
【図１】
2005033408.tif 000006
【図２】
2005033408.tif 000007
【図３】
2005033408.tif 000008
【図４】
2005033408.tif 000009
【図５】
2005033408.tif 000010
【図６】
2005033408.tif 000011
【図７】
2005033408.tif 000012
【図８】
2005033408.tif 000013