(57)【特許請求の範囲】
【請求項１】
パケットを伝送する複数のフローを流れるパケットをそれぞれ前記複数のフローに対応して格納するパケットバッファと、
前記パケットバッファに格納されたパケットの出力を許可するか否かを判別するのに用いる情報であるトークン値を前記複数のフローに対応して記憶する記憶部と、
前記複数のフローに対応して前記記憶部に記憶されたトークン値のそれぞれにあらかじめ設定された周期で所定のトークン値を加算し、前記パケットバッファからパケットが出力されたフローに対応して前記記憶部に記憶されたトークン値から出力パケット長に応じたトークン値を減算し、前記複数のフローに対応して前記記憶部に記憶されたトークン値のそれぞれがあらかじめ設定された上限値を超過したら超過した分のトークン値を廃棄し、前記複数のフローに対応して前記記憶部に記憶されたトークン値のそれぞれが正か負かを判別するトークン演算部と、
前記複数のフローごとに前記パケットバッファにパケットが格納されているか否かを検出するパケット監視部と、
前記パケット監視部で検出された前記パケットの格納の有無および前記トークン演算部による前記トークン値の廃棄の有無に応じて、前記複数のフローのパケット出力の優先度を高優先度または低優先度に設定する優先制御信号生成部と、
前記パケットバッファにパケットが格納されていないフローまたは前記記憶部に記憶されたトークン値が負であるフローをスキップしながら、前記優先制御信号生成部で設定された前記複数のフローのパケット出力の優先度に応じて、パケットを出力するフローを順次選択する出力フロー選択部と
を備え、
前記優先制御信号生成部は、前記出力フロー選択部でスキップされて、前記トークン演算部でトークン値が正と判別され、かつ前記パケットバッファにパケットが格納されていないフローのパケット出力の優先度を低優先度に設定し、前記出力フロー選択部でスキップされて、かつ前記トークン演算部でトークン値が負と判別されたフローのパケット出力の優先度を保持し、前記出力フロー選択部でスキップされず、かつ前記トークン演算部によるトークン値の廃棄が有りであるフロー、または、前記出力フロー選択部でスキップされて、前記トークン演算部でトークン値が正と判別され、前記パケットバッファにパケットが格納され、かつ前記トークン演算部によるトークン値の廃棄が有りであるフローの優先度を高優先度に設定し、前記出力フロー選択部でスキップされず、かつ前記トークン演算部によるトークン値の廃棄が無しであるフローの優先度を保持し、
前記出力フロー選択部は、前記優先制御信号生成部により低優先度に設定されたフローよりも前記優先制御信号生成部により高優先度に設定されたフローを優先して選択する
ことを特徴とするパケット転送装置。 
【請求項２】
前記優先制御信号生成部は、前記パケット監視部で検出された前記パケットの格納が有りであり、かつ前記トークン演算部による前記トークン値の廃棄の発生が有りであるフローのパケットの出力の優先度を高優先度に設定し、
少なくとも前記パケット監視部で検出された前記パケットの格納が無しであるフローのパケットの出力の優先度を低優先度に設定する
請求項１に記載のパケット転送装置。 
【請求項３】
パケットを伝送する複数のフローを流れるパケットをそれぞれ前記複数のフローに対応して格納するパケットバッファにパケットが格納されているか否かを前記複数のフローごとに検出する監視ステップと、
前記複数のフローに対応して記憶部に記憶されており、前記パケットバッファに格納されたパケットの出力を許可するか否かを判別するのに用いる情報であるトークン値のそれぞれに、あらかじめ設定された周期で所定のトークン値を加算する加算ステップと、
前記パケットバッファからパケットが出力されたフローに対応して前記記憶部に記憶されたトークン値から出力パケット長に応じたトークン値を減算する減算ステップと、
前記複数のフローに対応して前記記憶部に記憶されたトークン値のそれぞれがあらかじめ設定された上限値を超過したら超過した分のトークン値を廃棄する廃棄ステップと、
前記複数のフローに対応して前記記憶部に記憶されたトークン値のそれぞれが正か負かを判別する判別ステップと、
前記監視ステップで検出されたパケットの格納の有無および前記廃棄ステップによるトークン値の廃棄の有無に応じて、前記複数のフローのパケット出力の優先度を高優先度または低優先度に設定する優先度設定ステップと、
前記パケットバッファにパケットが格納されていないフローまたは前記記憶部に記憶されたトークン値が負であるフローをスキップしながら、前記優先度設定ステップで設定された前記複数のフローのパケット出力の優先度に応じて、パケットを出力するフローを順次選択する出力フロー選択ステップと
を備え、
前記優先度設定ステップは、前記出力フロー選択ステップでスキップされて、かつ前記判別ステップでトークン値が正と判別され、かつ前記パケットバッファにパケットが格納されていないフローのパケット出力の優先度を低優先度に設定し、前記出力フロー選択ステップでスキップされて、かつ前記判別ステップでトークン値が負と判別されたフローのパケット出力の優先度を保持し、前記出力フロー選択ステップでスキップされず、かつ前記廃棄ステップによるトークン値の廃棄が有りであるフロー、または、前記出力フロー選択ステップでスキップされて、前記判別ステップでトークン値が正と判別され、前記パケットバッファにパケットが格納され、かつ前記廃棄ステップによるトークン値の廃棄が有りであるフローの優先度を高優先度に設定し、前記出力フロー選択ステップでスキップされず、かつ前記廃棄ステップによるトークン値の廃棄が無しであるフローの優先度を保持し、
前記出力フロー選択ステップは、前記優先度設定ステップにより低優先度に設定されたフローよりも前記優先度設定ステップにより高優先度に設定されたフローを優先して選択する
ことを特徴とするパケット転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット転送装置およびパケット転送方法に関する。
【背景技術】
【０００２】
従来、パケット通信の技術分野においては、パケットが伝送される複数のフローの合流地点にパケット転送装置を設けることが知られている。パケット転送装置は、複数のフローを流れるパケットの出力順序を制御しながら出力回路に転送することにより、出力回路のトラフィックを制御する。
【０００３】
また、パケット転送装置のパケット転送技術としてトークンバケット方式が知られている。トークンバケット方式は、複数のフローを流れるパケットをパケットバッファにいったん格納し、パケットバッファに格納されたパケットの出力を許可するか否かを判別するのに用いる情報であるトークン値を用いてパケットを出力する。
【０００４】
図８は、トークンバケット方式を説明するための図である。図８において横軸は時間を示し、縦軸は記憶部に記憶されているトークン値を示す。トークンバケット方式では、複数のフローに対応してトークン値が記憶される記憶部を有する。トークンバケット方式では、記憶部に記憶されたトークン値に、あらかじめ設定された周期（以下、「トークン追加周期」という。）で所定のトークン値（以下、「追加トークン値」という。）を加算する（図８の（ａ）参照）。また、トークンバケット方式では、記憶部に記憶されているトークン値が正または出力パケット長以上である場合にパケットの出力許可を行う。また、トークンバケット方式では、パケットバッファからパケットが出力されたら、パケットが出力されたフローに対応する記憶部に記憶されたトークン値から出力パケット長に応じたトークン値を減算する（図８の（ｂ）参照）。なお図８の例は、トークン値が正の場合にパケットの出力許可を行う例である。また、トークンバケット方式では、複数のフローに対応して記憶部に記憶されたトークン値のそれぞれがあらかじめ設定された上限値（以下、「Max Token」という。）を超過したら、超過した分のトークン値を廃棄する（図８の（ｃ）参照）。
【０００５】
トークンバケット方式によって導かれるシェーピングレート（Shaping Rate：以下、「Sh_R」という。） は、トークン追加周期と、追加トークン値とによって以下のように表される。
Sh_R [bps(bits per second)]＝追加トークン値[byte]×8／トークン追加周期[s(second)]
なお、Sh_Rとは、フローごとのパケットの出力帯域である。例えば、追加トークン値が40,000[byte]、トークン追加周期が32[us]（=32×10^−6 [s]）の場合、Sh_Rは10G[bps]（=40,000 [byte]×8／32×10^−6[s]）となる。
【０００６】
また、パケット転送装置では、トークンバケット方式とラウンドロビン（Round Robin：以下、「RR」という。）方式との組み合わせにより、複数のフローからのパケットの出力順序を制御することが知られている。RR方式とは、複数のフローを順番に選択しながら、選択されたフローのパケットバッファに格納されたパケットを順次出力する方式である。
【０００７】
図９は、トークンバケット方式とRR方式との組み合わせを用いたパケット出力を説明するための図である。フロー♯１〜フロー♯ｎを流れるパケット♯１〜パケット♯ｎは、パケットバッファ♯１〜パケットバッファ♯ｎにそれぞれ格納される。なおｎは２以上の自然数である。ここで、フロー♯１〜フロー♯ｎのうち、記憶部に記憶されたトークン値が正であり、かつパケットバッファにパケットが格納されているフローが順次選択され、選択されたフローのパケットバッファに格納されたパケットが出力回路へ出力される。なお、フロー♯１〜フロー♯ｎそれぞれのSh_Rの総和ΣSh_Rは、出力回線のワイヤレート以下である。
【０００８】
なお、複数のフローのパケットの出力帯域を管理する方法としては、ＷＲＲ(Weighted Round Robin)という技術も知られている。ＷＲＲは、トークンの代わりに重み（Weight）をフローごとに与える。また、ＷＲＲでは、あるフローが読み出し権利を得たら重みに応じた量を読み出した後、次のフローに読み出し権利を渡す制御を行う。例えばパケットの出力帯域=10G[bps]であり、重み=1のフローが1本のみである場合、そのフローは10G[bps]の性能が得られる。また、パケットの出力帯域=10G[bps]であり、重み=1のフローがもう1本存在すれば、各フローはそれぞれ5G[bps]の性能が得られる。ここで、一方のフローにパケットが入力されない場合、他方のフローが10G[bps]の出力帯域を占有することになるが、出力されたパケットを受信する装置が5G[bps]の受信能力しか無ければパケットは廃棄される。そこでもしパケットの出力帯域の上限設定が必要な場合、各フローにシェーパの設定を行う。
【０００９】
ところで、従来技術では、トークン値の廃棄の発生を抑制する目的で、パケットバッファにパケットが格納されているフローのMax Tokenを、パケットバッファにパケットが格納されていないフローのMax Tokenより大きく設定することが知られている。例えば従来技術は、パケットバッファにパケットが格納されていないフローのMax Token＝追加トークン値×1とし、パケットバッファにパケットが格納されているフローのMax Token=追加トークン値×nとする。ここでnは、トークン値が廃棄されない程度に大きく設定する値である。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００７−１８１０８５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、従来技術は、フローの数にかかわらずMax Tokenの増大を抑制することについては考慮されていない。
【００１２】
すなわち、従来技術によれば、フロー数の増大にしたがって記憶部に記憶されているトークン値の最大値が大きくなる場合がある。以下この点について説明する。図１０，図１１は、従来技術のパケット転送装置のトークン値の遷移モデルを示す図である。図１０のトークン値の遷移モデルは、３フローを収容したパケット転送装置の一例である。また、図１１のトークン値の遷移モデルは、全体の帯域は図１０の場合と変えずに２フロー増加したパケット転送装置の一例である。図１０と図１１において、各フローのパケットバッファにパケットが格納されていない期間をαで示し、パケットバッファにパケットが格納されている期間をβで示す。また、図１０と図１１において、複数のトークン追加周期を時間軸に沿って周期（Ａ）〜周期（Ｆ）という。
【００１３】
図１０の周期（Ａ）ではフロー♯１とフロー♯２のパケットバッファにパケットが格納されていないので、フロー♯５のパケットバッファからパケットが出力される（図１０の（ａ）参照）。続いて周期（Ｂ）に入ると各フローの記憶部にトークン値が加算される（図１０の（ｂ）参照）。なおフロー♯１およびフロー♯２のトークン値はMax Tokenに達しているから、加算されるトークン値は全て廃棄される。周期（Ｂ）ではフロー♯１、フロー♯２およびフロー♯５のパケットバッファにパケットが格納されているから、フロー♯１、フロー♯２、フロー♯５の順にパケットが出力される（図１０の（ｃ）参照）。また、周期（Ｂ）においてパケットを出力した後、フロー♯１とフロー♯２のトークン値は負になるのに対して、フロー♯５のトークン値は正であるから、フロー♯５からパケットが出力される（図１０の（ｄ）参照）。続いて周期（Ｃ）に入ると各フローの記憶部にトークン値が加算される（図１０の（ｅ）参照）。周期（Ｃ）ではフロー♯１およびフロー♯２のトークン値が「０」つまり正ではないから、フロー♯１およびフロー♯２からはパケットが出力されず、フロー♯５からパケットが出力される（図１０の（ｆ）参照）。図１０の周期（Ｄ）以降の処理は図１０の周期（Ｂ）および周期（Ｃ）と同様であるから、説明を省略する。
【００１４】
次に、図１１の周期（Ａ）は図１０の場合と同様であるから説明を省略する。これに対して、図１１の周期（Ｂ）では、フロー♯３とフロー♯４が追加されてフロー数が多くなっているから、フロー♯１〜フロー♯４の順にパケットが出力され（図１１の（ａ）参照）、フロー♯５からはパケットが出力されない。この状態で周期（Ｃ）に入ると各フローの記憶部にトークン値が加算される（図１１の（ｂ）参照）。その結果、図１０のフロー♯５と図１１のフロー♯５を比較すると、フロー数が多い図１０のフロー♯５の記憶部に記憶されるトークン値の最大値が、図１０の場合と比べて大きくなる。なお、図１１の周期（Ｃ）の以後の処理は図１０の周期（Ｂ）および周期（Ｃ）と同様であるから、説明を省略する。
【００１５】
このように、RR方式を用いてパケットを出力するフローを順次選択する場合、フローの数が多くなるにしたがって、あるフローのパケットを出力する処理の待ち時間が長くなる。待ち時間の間はトークン追加周期がくるたびに記憶部にトークン値が加算される。一方、待ち時間の間はパケットが出力されないから、記憶部に記憶されているトークン値の減算は行われない。したがって、フローの数が多くなると、記憶部に記憶されるトークン値の最大値は大きくなる。トークン値の最大値が大きくなると、トークン値がMax Tokenを超えてトークン値の廃棄が発生するおそれが増大する。パケットバッファにパケットが格納されているフローに対してトークン値の廃棄が頻繁に発生すると、パケットの出力帯域の劣化につながるので好ましくない。一方、トークン値の廃棄を抑制するためにMax Tokenを大きく設定することも考えられるが、これは回路規模の増大を招くので好ましくない。
【００１６】
開示の技術は、上記に鑑みてなされたものであって、フローの数にかかわらずMax Tokenの増大を抑制し、かつトークン値の廃棄の発生を抑制することができるパケット転送装置およびパケット転送方法を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本願の開示するパケット転送装置は、一つの態様において、パケットを伝送する複数のフローを流れるパケットをそれぞれ複数のフローに対応して格納するパケットバッファを有する。また、パケット転送装置は、パケットバッファに格納されたパケットの出力を許可するか否かを判別するのに用いる情報であるトークン値を複数のフローに対応して記憶する記憶部を有する。また、パケット転送装置は、複数のフローに対応して記憶部に記憶されたトークン値のそれぞれにあらかじめ設定された周期で所定のトークン値を加算するトークン演算部を有する。トークン演算部は、パケットバッファからパケットが出力されたフローに対応して記憶部に記憶されたトークン値から出力パケット長に応じたトークン値を減算する。また、トークン演算部は、複数のフローに対応して記憶部に記憶されたトークン値のそれぞれがあらかじめ設定された上限値を超過したら超過した分のトークン値を廃棄する。また、パケット転送装置は、複数のフローごとにパケットバッファにパケットが格納されているか否かを検出するパケット監視部を有する。また、パケット転送装置は、パケット監視部で検出されたパケットの格納の有無およびトークン演算部によるトークン値の廃棄の有無に応じて、複数のフローのパケット出力の優先度を高優先度または低優先度に設定する優先制御信号生成部を有する。また、パケット転送装置は、優先制御信号生成部で設定された複数のフローのパケット出力の優先度に応じて、パケットを出力するフローを順次選択する出力フロー選択部を有する。
【発明の効果】
【００１８】
本願の開示するパケット転送装置の一つの態様によれば、フローの数の多少にかかわらずMax Tokenの増大を抑制し、かつトークン値の廃棄の発生を抑制することができる。
【図面の簡単な説明】
【００１９】
【図１】図１は、実施例にかかるパケット転送装置の全体構成を示す図である。
【図２】図２は、優先制御信号生成部の詳細構成を示す図である。
【図３】図３は、出力フロー選択部の詳細構成を示す図である。
【図４】図４は、スキップ判定回路の動作を説明するための図である。
【図５】図５は、優先制御信号生成部の動作を説明するための図である。
【図６】図６は、実施例にかかるパケット転送装置のトークン値の遷移モデルを示す図である。
【図７Ａ】図７Ａは、実施例にかかるパケット転送装置のトークン値の遷移モデルを示す図である。
【図７Ｂ】図７Ｂは、実施例にかかるパケット転送装置のトークン値の遷移モデルを示す図である。
【図８】図８は、トークンバケット方式を説明するための図である。
【図９】図９は、トークンバケット方式とRR方式との組み合わせを用いたパケット出力を説明するための図である。
【図１０】図１０は、従来技術のパケット転送装置のトークン値の遷移モデルを示す図である。
【図１１】図１１は、従来技術のパケット転送装置のトークン値の遷移モデルを示す図である。
【発明を実施するための形態】
【００２０】
以下に、本願の開示するパケット転送装置およびパケット転送方法の実施例を図面に基づいて詳細に説明する。なお、この実施例により開示技術が限定されるものではない。
【実施例】
【００２１】
図１は、実施例にかかるパケット転送装置の全体構成を示す図である。本実施例のパケット転送装置１００は、パケットバッファ１２０と、記憶部１４０と、トークン演算部１６０と、パケット監視部１８０と、優先制御信号生成部２００と、出力フロー選択部２２０とを有する。
【００２２】
パケットバッファ１２０は、パケットバッファ１２０−１〜パケットバッファ１２０−ｎを有する。パケットバッファ１２０−１〜パケットバッファ１２０−ｎはそれぞれ、パケットを伝送するフロー♯１〜フロー♯ｎに対応して設けられる。パケットバッファ１２０−１〜パケットバッファ１２０−ｎには、フロー♯１〜フロー♯ｎを流れるパケットがそれぞれ格納される。
【００２３】
記憶部１４０は、記憶部１４０−１〜記憶部１４０−ｎを有する。記憶部１４０−１〜記憶部１４０−ｎはそれぞれ、フロー♯１〜フロー♯ｎに対応して設けられる。記憶部１４０−１〜記憶部１４０−ｎには、それぞれトークン値が記憶される。トークン値は、パケットバッファ１２０−１〜パケットバッファ１２０−ｎに格納されたパケットの出力を許可するか否かを判別するのに用いる情報である。
【００２４】
トークン演算部１６０は、トークンバケット方式にしたがって、記憶部１４０−１〜記憶部１４０−ｎに記憶されているトークン値に、トークン追加周期で追加トークン値を加算する。また、トークン演算部１６０は、記憶部１４０−１〜記憶部１４０−ｎのうちパケットバッファからパケットが出力されたフローに対応する記憶部に記憶されたトークン値から出力パケット長に応じたトークン値を減算する。さらに、トークン演算部１６０は、記憶部１４０−１〜記憶部１４０−ｎごとに、記憶されたトークン値が正か負かを判別する。記憶部１４０−１〜記憶部１４０−ｎごとのトークン値の正負の情報は、トークン情報として、優先制御信号生成部２００と出力フロー選択部２２０に出力される。また、トークン演算部１６０は、フロー♯１〜フロー♯ｎに対応して記憶部１４０−１〜記憶部１４０−ｎに記憶されたトークン値があらかじめ設定されたMax Tokenを超過したら超過した分のトークン値を廃棄する。記憶部１４０−１〜記憶部１４０−ｎごとのトークン値の廃棄の有無の情報は、トークン廃棄情報として、優先制御信号生成部２００に出力される。
【００２５】
パケット監視部１８０は、フロー♯１〜フロー♯ｎからパケットが入力されたら、パケットバッファ１２０−１〜パケットバッファ１２０−ｎのうち、パケットが入力されたフローに対応するパケットバッファにパケットを格納する。また、パケット監視部１８０は、パケットが格納されたパケットバッファの総パケット数の加算を行う。また、パケット監視部１８０は、パケットバッファ１２０−１〜パケットバッファ１２０−ｎからパケットが出力されたら、パケットが出力されたパケットバッファの総パケット数の減算を行う。さらに、パケット監視部１８０は、パケットバッファ１２０−１〜パケットバッファ１２０−ｎそれぞれの総パケット数を監視することにより、パケットバッファにパケットが格納されているか否かを検出する。パケットバッファ１２０−１〜パケットバッファ１２０−ｎごとのパケットが格納されているか否かの情報は、パケット有無情報として、優先制御信号生成部２００と出力フロー選択部２２０に出力される。
【００２６】
優先制御信号生成部２００には、トークン演算部１６０から出力されたトークン廃棄情報およびトークン情報と、パケット監視部１８０から出力されたパケット有無情報と、出力フロー選択部２２０から出力されたスキップ情報とが入力される。優先制御信号生成部２００は、入力された各情報に基づいて、フロー♯１〜フロー♯ｎのパケット出力の優先度を高優先度または低優先度に設定する。フロー♯１〜フロー♯ｎごとのパケット出力の優先度は、優先情報として出力フロー選択部２２０に出力される。優先制御信号生成部２００の詳細は後述する。
【００２７】
出力フロー選択部２２０は、優先制御信号生成部２００から出力されたフロー♯１〜フロー♯ｎごとのパケット出力の優先情報に応じて、パケットを出力するフローを順次選択する。より具体的には、出力フロー選択部２２０は、フロー♯１〜フロー♯ｎを高優先度のクラスと低優先度のクラスに分け、高優先度のクラスのフローから優先的にパケットを出力し、高優先度のフローがなくなったら、低優先度のフローからパケットを出力する。出力フロー選択部２２０は、パケットバッファにパケットが格納されていないフローまたは記憶部のトークン値が負のフローをスキップしながらパケットを出力するフローを順次選択する。フロー♯１〜フロー♯ｎごとのスキップの発生の有無の情報は、スキップ情報として、優先制御信号生成部２００に出力される。また、フロー♯１〜フロー♯ｎのうち、どのフローからパケットが出力されたかという情報は、出力フロー情報として、パケットバッファ１２０、トークン演算部１６０、およびパケット監視部１８０に出力される。
【００２８】
次に、優先制御信号生成部２００の詳細を説明する。図２は、優先制御信号生成部２００の詳細構成を示す図である。優先制御信号生成部２００は、選択回路２０２−１〜選択回路２０２−ｎと、ａｎｄ回路２０４ａ−１〜ａｎｄ回路２０４ａ−ｎと、ａｎｄ回路２０４ｂ−１〜ａｎｄ回路２０４ｂ−ｎとを有する。選択回路２０２−１〜選択回路２０２−ｎはそれぞれ、フロー♯１〜フロー♯ｎに対応して設けられる。ａｎｄ回路２０４ａ−１〜ａｎｄ回路２０４ａ−ｎはそれぞれ、フロー♯１〜フロー♯ｎに対応して設けられる。ａｎｄ回路２０４ｂ−１〜ａｎｄ回路２０４ｂ−ｎはそれぞれ、フロー♯１〜フロー♯ｎに対応して設けられる。
【００２９】
ａｎｄ回路２０４ａ−１〜ａｎｄ回路２０４ａ−ｎにはそれぞれ、フロー♯１〜フロー♯ｎのトークン廃棄情報のうち、対応するフローのトークン廃棄情報が入力される。トークン廃棄情報は、トークン値の廃棄が発生した場合には「１」、トークン値の廃棄が発生しなかった場合には「０」という論理値でａｎｄ回路２０４ａ−１〜ａｎｄ回路２０４ａ−ｎに入力される。
【００３０】
また、ａｎｄ回路２０４ａ−１〜ａｎｄ回路２０４ａ−ｎにはそれぞれ、フロー♯１〜フロー♯ｎのパケット有無情報のうち、対応するフローのパケット有無情報が入力される。つまり、パケット有無情報は、フローのパケットが存在した場合には「１」、フローのパケットが存在しない場合には「０」という論理値でａｎｄ回路２０４ａ−１〜ａｎｄ回路２０４ａ−ｎに入力される。
【００３１】
また、ａｎｄ回路２０４ａ−１〜ａｎｄ回路２０４ａ−ｎはそれぞれ、入力されたトークン廃棄情報とパケット有無情報に応じた論理値を、対応する選択回路２０２−１〜選択回路２０２−ｎに出力する。具体的には、ａｎｄ回路２０４ａ−１〜ａｎｄ回路２０４ａ−ｎはそれぞれ、入力されたトークン廃棄情報とパケット有無情報がともに「１」の場合には「１」を、対応する選択回路２０２−１〜選択回路２０２−ｎに出力する。また、ａｎｄ回路２０４ａ−１〜ａｎｄ回路２０４ａ−ｎはそれぞれ、入力されたトークン廃棄情報とパケット有無情報の少なくとも一方が「０」の場合には「０」を、対応する選択回路２０２−１〜選択回路２０２−ｎに出力する。
【００３２】
一方、ａｎｄ回路２０４ｂ−１〜ａｎｄ回路２０４ｂ−ｎにはそれぞれ、フロー♯１〜フロー♯ｎのトークン情報のうち、対応するフローのトークン情報が入力される。トークン情報は、記憶部のトークン値が正の場合は「１」、記憶部のトークン値が負の場合は「０」という論理値でａｎｄ回路２０４ｂ−１〜ａｎｄ回路２０４ｂ−ｎに入力される。
【００３３】
また、ａｎｄ回路２０４ｂ−１〜ａｎｄ回路２０４ｂ−ｎにはそれぞれ、フロー♯１〜フロー♯ｎのスキップ情報のうち、対応するフローのスキップ情報が入力される。スキップ情報は、フローのパケット出力処理がスキップされた場合には「１」、フローのパケット出力処理がスキップされなかった場合には「０」という論理値でａｎｄ回路２０４ｂ−１〜ａｎｄ回路２０４ｂ−ｎに入力される。さらに、ａｎｄ回路２０４ｂ−１〜ａｎｄ回路２０４ｂ−ｎにはそれぞれ、フロー♯１〜フロー♯ｎのパケット有無情報のうち、対応するフローのパケット有無情報が論理反転されて入力される。つまり、フローのパケットが存在しない場合には「１」、フローのパケットが存在する場合には「０」という論理値でａｎｄ回路２０４ｂ−１〜ａｎｄ回路２０４ｂ−ｎに入力される。
【００３４】
ａｎｄ回路２０４ｂ−１〜ａｎｄ回路２０４ｂ−ｎはそれぞれ、入力されたトークン情報とスキップ情報とパケット有無情報に応じた論理値を、対応する選択回路２０２−１〜選択回路２０２−ｎに出力する。具体的には、ａｎｄ回路２０４ｂ−１〜ａｎｄ回路２０４ｂ−ｎはそれぞれ、入力されたトークン情報とスキップ情報とパケット有無情報がともに「１」の場合には「１」を、対応する選択回路２０２−１〜選択回路２０２−ｎに出力する。また、ａｎｄ回路２０４ｂ−１〜ａｎｄ回路２０４ｂ−ｎはそれぞれ、入力されたトークン情報とスキップ情報とパケット有無情報のいずれかが「０」の場合には「０」を、対応する選択回路２０２−１〜選択回路２０２−ｎに出力する。
【００３５】
選択回路２０２−１〜選択回路２０２−ｎはそれぞれ、対応するａｎｄ回路２０４ａ−１〜ａｎｄ回路２０４ａ−ｎおよびａｎｄ回路２０４ｂ−１〜ａｎｄ回路２０４ｂ−ｎから入力された論理値に応じた論理値を優先情報として出力する。例えば選択回路２０２−１は、ａｎｄ回路２０４ａ−１から出力された論理値が「１」で、ａｎｄ回路２０４ｂ−１から出力された論理値が「０」の場合は、フロー♯１の優先度を高優先度に設定する論理値「１」を優先情報として出力する。一方、選択回路２０２−１は、ａｎｄ回路２０４ａ−１から出力された論理値が「０」で、ａｎｄ回路２０４ｂ−１から出力された論理値が「１」の場合は、フロー♯１の優先度を低優先度に設定する論理値「０」を優先情報として出力する。選択回路２０２−２〜選択回路２０２−ｎについても同様である。
【００３６】
次に、出力フロー選択部２２０の詳細を説明する。図３は、出力フロー選択部２２０の詳細構成を示す図である。出力フロー選択部２２０は、ストリクトプライオリティ（Strict Priority：以下「SP」という。）回路２２２と、RR回路２２４ａと、RR回路２２４ｂを有する。また、出力フロー選択部２２０は、出力用ａｎｄ回路２２６ａ−１〜出力用ａｎｄ回路２２６ａ−ｎと、出力用ａｎｄ回路２２６ｂ−１〜出力用ａｎｄ回路２２６ｂ−ｎとを有する。また、出力フロー選択部２２０は、出力フロー保持回路２２８と、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎを有する。
【００３７】
出力用ａｎｄ回路２２６ａ−１〜出力用ａｎｄ回路２２６ａ−ｎにはそれぞれ、フロー♯１〜フロー♯ｎの優先情報のうち、対応するフローの優先情報が入力される。優先情報は、フローの優先度が高優先度の場合には「１」、フローの優先度が低優先度の場合には「０」の論理値で出力用ａｎｄ回路２２６ａ−１〜出力用ａｎｄ回路２２６ａ−ｎに入力される。
【００３８】
また、出力用ａｎｄ回路２２６ａ−１〜出力用ａｎｄ回路２２６ａ−ｎにはそれぞれ、フロー♯１〜フロー♯ｎのトークン情報のうち、対応するフローのトークン情報が入力される。また、出力用ａｎｄ回路２２６ａ−１〜出力用ａｎｄ回路２２６ａ−ｎにはそれぞれ、フロー♯１〜フロー♯ｎのパケット有無情報のうち、対応するフローのパケット有無情報が入力される。パケット有無情報は、パケットバッファにパケットが格納されている場合には「１」、パケットバッファにパケットが格納されていない場合には「０」の論理値で出力用ａｎｄ回路２２６ａ−１〜出力用ａｎｄ回路２２６ａ−ｎに入力される。
【００３９】
出力用ａｎｄ回路２２６ａ−１〜出力用ａｎｄ回路２２６ａ−ｎはそれぞれ、入力された優先情報とトークン情報とパケット有無情報に応じた論理値を、RR回路２２４ａに出力する。具体的には、出力用ａｎｄ回路２２６ａ−１〜出力用ａｎｄ回路２２６ａ−ｎはそれぞれ、入力された優先情報とトークン情報とパケット有無情報の全ての論理値が「１」の場合には論理値「１」を出力する。また、出力用ａｎｄ回路２２６ａ−１〜出力用ａｎｄ回路２２６ａ−ｎはそれぞれ、入力された優先情報とトークン情報とパケット有無情報の少なくとも１つの論理値が「０」の場合には論理値「０」を出力する。
【００４０】
一方、出力用ａｎｄ回路２２６ｂ−１〜出力用ａｎｄ回路２２６ｂ−ｎにはそれぞれ、フロー♯１〜フロー♯ｎのトークン情報のうち、対応するフローのトークン情報が入力される。また、出力用ａｎｄ回路２２６ｂ−１〜出力用ａｎｄ回路２２６ｂ−ｎにはそれぞれ、フロー♯１〜フロー♯ｎのパケット有無情報のうち、対応するフローのパケット有無情報が入力される。
【００４１】
出力用ａｎｄ回路２２６ｂ−１〜出力用ａｎｄ回路２２６ｂ−ｎはそれぞれ、入力されたトークン情報とパケット有無情報に応じた論理値を、RR回路２２４ｂに出力する。具体的には、出力用ａｎｄ回路２２６ｂ−１〜出力用ａｎｄ回路２２６ｂ−ｎはそれぞれ、入力されたトークン情報とパケット有無情報の論理値がともに「１」の場合には論理値「１」を出力する。また、出力用ａｎｄ回路２２６ｂ−１〜出力用ａｎｄ回路２２６ｂ−ｎはそれぞれ、入力されたトークン情報とパケット有無情報の少なくとも一方の論理値が「０」の場合には論理値「０」を出力する。
【００４２】
RR回路２２４ａは、フロー♯１〜フロー♯ｎのうち、出力用ａｎｄ回路２２６ａ−１〜出力用ａｎｄ回路２２６ａ−ｎからの出力論理値が「１」である出力用ａｎｄ回路に対応するフローを順次選択してSP回路２２２に出力する。RR回路２２４ｂは、フロー♯１〜フロー♯ｎのうち、出力用ａｎｄ回路２２６ｂ−１〜出力用ａｎｄ回路２２６ｂ−ｎからの出力論理値が「１」である出力用ａｎｄ回路に対応するフローを順次選択してSP回路２２２に出力する。
【００４３】
SP回路２２２は、RR回路２２４ａからの出力がある場合、RR回路２２４ａからの出力を出力フロー情報として出力する。つまり、SP回路２２２は、高優先度に設定されたフローがあるときには、高優先度のフローからのパケット出力を優先する。一方、SP回路２２２は、RR回路２２４ａからの出力がない場合、RR回路２２４ｂからの出力を出力フロー情報として出力する。このように、出力フロー選択部２２０は、フロー♯１〜フロー♯ｎを高優先度のクラスと低優先度のクラスに分け、高優先度のクラスのフローから優先的にパケットを出力し、高優先度のフローがなくなったら、低優先度のフローからパケットを出力する。
【００４４】
SP回路２２２から出力された出力フロー情報は、出力フロー選択部２２０の外部へ出力されるとともに、出力フロー保持回路２２８と、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎのそれぞれに入力される。出力フロー保持回路２２８は、SP回路２２２から出力された出力フロー情報を保持するとともに、前回出力フロー情報をスキップ判定回路２３０−１〜スキップ判定回路２３０−ｎのそれぞれに入力する。スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎはそれぞれ、出力フロー情報と前回出力フロー情報に基づいて、フロー♯１〜フロー♯ｎのパケット出力の処理がスキップされたか否かを判定する。前回出力フロー情報とは、最新のパケット出力の１つ前にパケットバッファからパケットが出力されたフローの情報である。
【００４５】
図４は、スキップ判定回路の動作を説明するための図である。図４において、自フローとは、フロー♯１〜フロー♯ｎのそれぞれのフローを指す。スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、フロー♯１〜フロー♯ｎのそれぞれに対して以下のフローチャートの処理を行う。また、図４の例では、フロー♯１〜フロー♯ｎにはそれぞれ、昇順のフローID（Identification）が付されているものとする。
【００４６】
まず、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、フロー♯１〜フロー♯ｎのうち、パケットバッファからパケットが出力された最新のフローのID（以下、「出力フローID」という。）＝自フローIDであるか確認する（ステップＳ１）。ステップＳ１でYesの場合、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、自フローにスキップ有りの判定がなされていたら、そのスキップ判定を解除する（ステップＳ２）。
【００４７】
一方、ステップＳ１でNoの場合、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、出力フローID＞自フローIDであるか確認する（ステップＳ３）。ステップＳ３でYesの場合、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、フロー♯１〜フロー♯ｎのうち、前回出力フローID＜自フローIDであるか確認する（ステップＳ４）。前回出力フローIDとは、出力フローIDの１つ前にパケットバッファからパケットが出力されたフローのIDである。ステップＳ４でYesの場合、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、自フローがスキップされたと判定する（ステップＳ５）。
【００４８】
一方、Ｓ４でNoの場合、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、前回出力フローID＞出力フローIDであるか確認する（ステップＳ６）。ステップＳ６でYesの場合、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、自フローがスキップされたと判定する（ステップＳ７）。一方、ステップＳ６でNoの場合、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、自フローはスキップ判定が解除されているかまたはスキップされたと判定されているかの現在の状態（以下、「現在スキップ判定状態」という。）を保持する（ステップＳ８）。
【００４９】
ステップＳ３でNoの場合、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、前回出力フローID≧自フローIDであるか確認する（ステップＳ９）。ステップＳ９でYesの場合、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、現在スキップ判定状態を保持する（ステップＳ１０）。
【００５０】
一方、ステップＳ９でNoの場合、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、前回出力フローID＜出力フローIDであるか確認する（ステップＳ１１）。ステップＳ１１でYesの場合、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、現在スキップ判定状態を保持する（ステップＳ１２）。一方、ステップＳ１１でNoの場合、スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎは、自フローがスキップされたと判定する（ステップＳ１３）。
【００５１】
スキップ判定回路２３０−１〜スキップ判定回路２３０−ｎから出力されたフロー♯１〜フロー♯ｎの現在スキップ判定状態は、スキップ情報として優先制御信号生成部２００に入力される。図５は、優先制御信号生成部２００の動作を説明するための図である。優先制御信号生成部２００は、以下のフローチャートの処理をフロー♯１〜フロー♯ｎのそれぞれに対して行う。
【００５２】
まず、優先制御信号生成部２００は、フロー♯１〜フロー♯ｎのスキップ情報に基づいて、フロー♯１〜フロー♯ｎのスキップの発生が有か否かを判定する（ステップＳ２０）。ステップＳ２０でYesと判定した場合、優先制御信号生成部２００は、フロー♯１〜フロー♯ｎのトークン情報に基づいて、フロー♯１〜フロー♯ｎのトークン値の正か否かを判定する（ステップＳ２１）。ステップＳ２１でYesと判定した場合、優先制御信号生成部２００は、フロー♯１〜フロー♯ｎのパケット有無情報に基づいて、フロー♯１〜フロー♯ｎのパケットが有るか無いかを判定する（ステップＳ２６）。一方、ステップＳ２１でNoと判定した場合、優先制御信号生成部２００は、フローの優先度を現在の優先度に保持する（ステップＳ２３）。ステップＳ２６でYesと判定した場合、優先制御信号生成部２００は、このフローの優先度を低優先度に設定する（ステップＳ２２）。
【００５３】
ステップＳ２０でNoと判定した場合、または、ステップＳ２６でNoと判定した場合、優先制御信号生成部２００は、フロー♯１〜フロー♯ｎのトークン廃棄情報に基づいて、フロー♯１〜フロー♯ｎのトークン値の廃棄が有か否かを判定する（ステップＳ２４）。ステップＳ２４でYesと判定した場合、優先制御信号生成部２００は、このフローの優先度を高優先度に設定する（ステップＳ２５）。一方、ステップＳ２４でNoと判定した場合、優先制御信号生成部２００は、フローの優先度を現在の優先度に保持する（ステップＳ２３）。なおフロー♯１〜フロー♯ｎの優先度の初期状態は低優先度に設定される。
【００５４】
なお、本実施例では、優先制御信号生成部２００は、フロー♯１〜フロー♯ｎのスキップ情報、トークン情報、パケット有無情報、およびトークン廃棄情報に基づいて、フロー♯１〜フロー♯ｎの優先度を設定しているが、これには限られない。すなわち、優先制御信号生成部２００は、パケット監視部１８０で検出されたパケット有無情報およびトークン演算部１６０によるトークン廃棄情報に応じて、フロー♯１〜フロー♯ｎのパケット出力の優先度を高優先度または低優先度に設定することができる。より具体的には、優先制御信号生成部２００は、パケット監視部１８０で検出されたパケットの格納が有りであり、かつトークン演算部１６０によるトークン値の廃棄の発生が有りであるフローのパケットの出力の優先度を高優先度に設定することができる。また、優先制御信号生成部２００は、少なくともパケット監視部１８０で検出されたパケットの格納が無しであるフローのパケットの出力の優先度を低優先度に設定することができる。
【００５５】
次に、図６，図７Ａ，図７Ｂを用いて、実施例にかかるパケット転送装置１００のトークン値の遷移について説明する。図６，図７Ａ，図７Ｂは、実施例にかかるパケット転送装置１００のトークン値の遷移モデルを示す図である。図６，図７Ａ，図７Ｂはそれぞれ、フロー♯１〜フロー♯５のトークン値の遷移モデルを示している。図６，図７Ａ，図７Ｂのフロー♯１〜フロー♯５において、横軸は時間を示し、縦軸は記憶部♯１〜記憶部♯５に記憶されているトークン値を示す。図６，図７Ａ，図７Ｂにおいて、各フローのパケットバッファにパケットが格納されていない期間をαで示し、パケットバッファにパケットが格納されている期間をβで示す。また、図６と図７Ａにおいて、複数のトークン追加周期を時間軸に沿って周期（Ａ）〜周期（Ｆ）という。また、図７Ｂは図７Ａのトークン値の遷移モデルの続きを示すものであるから、図７Ｂの複数のトークン追加周期を時間軸に沿って周期（Ｆ）〜周期（Ｋ）という。
【００５６】
図６の周期（Ａ）では、パケットバッファ１２０−１〜パケットバッファ１２０−４にパケットが格納されていないから、フロー♯１〜フロー♯４の優先度はそれぞれ低優先度に設定されているとする。一方、フロー♯５の優先度は高優先度に設定されているとする。図６の周期（Ａ）ではパケットバッファ１２０−１〜パケットバッファ１２０−４にパケットが格納されていないので、フロー♯５のパケットバッファ♯５からパケットが出力される（図６の（ａ）参照）。
【００５７】
続いて周期（Ｂ）に入ると記憶部１４０−１〜記憶部１４０−５に記憶されているトークン値に追加トークン値が加算される（図６の（ｂ）参照）。なおフロー♯１〜フロー♯４のトークン値はMax Tokenに達しているから、加算されるトークン値は全て廃棄される。周期（Ｂ）では、フロー♯５だけが高優先度に設定されているから、フロー♯５のパケットバッファ１２０−５から優先的にパケットが出力される（図６の（ｃ）参照）。また、周期（Ｂ）においてパケットを出力した後、フロー♯５のトークン値は負になるから、フロー♯１のパケットバッファ１２０−１からパケットが出力される（図６の（ｄ）参照）。
【００５８】
続いて周期（Ｃ）に入ると記憶部１４０−１〜記憶部１４０−５に記憶されたトークン値に追加トークン値が加算される（図６の（ｅ）参照）。なおフロー♯１〜フロー♯４のトークン値はパケット有り時のMax Tokenに変更される。周期（Ｃ）ではパケットバッファ１２０−１〜パケットバッファ１２０−５にパケットが格納されているが、フロー♯５だけが高優先度に設定されているから、フロー♯５のパケットバッファ１２０−５から優先的にパケットが出力される（図６の（ｆ）参照）。また、周期（Ｃ）においてパケットを出力した後、フロー♯５のトークン値は負になるから、パケットバッファ１２０−２およびパケットバッファ１２０−３からパケットが出力される（図６の（ｇ）参照）。図６の周期（Ｄ）以降の処理は図６の周期（Ｂ）および周期（Ｃ）と同様であるから説明を省略する。
【００５９】
図６で示した本実施例のモデルと図１１で示した従来技術のパケット転送装置のモデルとを比較すると、フロー＃５の優先度を高優先度に設定しているから、フロー＃５のトークン値の最大値が従来技術に比べて小さくなる。つまり、高優先度のフローは優先的にパケットが出力され、パケットが出力されるたびにトークン値が減算されるので、トークン値の最大値を抑制することができる。したがって、Max Tokenを比較的小さく設定したとしてもトークン値の廃棄は発生し難い。その結果、Max Tokenを抑制しつつ、トークン値の廃棄の発生を抑制することができる。
【００６０】
次に、図７Ａ，図７Ｂでは、フロー♯１〜フロー♯５の優先度がそれぞれ低優先度に設定されているとする。まず、図７Ａの周期（Ａ）ではフロー♯１〜フロー♯５がいずれも低優先度に設定されているから、フロー♯１〜フロー♯４の順に、パケットバッファ１２０−１〜パケットバッファ１２０−４からパケットが出力される（図５Ａの（ａ）参照）。
【００６１】
続いて周期（Ｂ）に入ると記憶部１４０−１〜記憶部１４０−５に記憶されたトークン値に追加トークン値が加算される（図７Ａの（ｂ）参照）。なおフロー♯５のトークン値はMax Tokenに達しているから、加算されるトークン値は全て廃棄される。周期（Ｂ）ではフロー♯１〜フロー♯４のトークン値が負であるから、パケットバッファ１２０−１〜パケットバッファ１２０−４からはパケットは出力されず、パケットバッファ１２０−５からパケットが出力される（図７Ａの（ｃ）参照）。
【００６２】
続いて周期（Ｃ）に入ると記憶部１４０−１〜記憶部１４０−５にトークン値が加算される（図７Ａの（ｄ）参照）。周期（Ｃ）においても、フロー♯１〜フロー♯４のトークン値が負であるから、パケットバッファ１２０−１〜パケットバッファ１２０−４からはパケットは出力されず、パケットバッファ１２０−５からパケットが出力される（図７Ａの（ｅ）参照）。
【００６３】
続いて周期（Ｄ）に入ると記憶部１４０−１〜記憶部１４０−５に記憶されたトークン値に追加トークン値が加算される（図７Ａの（ｆ）参照）。周期（Ｄ）では、フロー♯１〜フロー♯４のトークン値が０つまり正ではないから、パケットバッファ１２０−１〜パケットバッファ１２０−４からはパケットは出力されず、パケットバッファ１２０−５からパケットが出力される（図７Ａの（ｇ）参照）。
【００６４】
続いて周期（Ｅ）に入ると記憶部１４０−１〜記憶部１４０−５に記憶されたトークン値に追加トークン値が加算される（図７Ａの（ｈ）参照）。周期（Ｅ）では、フロー♯１〜フロー♯４の順に、パケットバッファ１２０−１〜パケットバッファ１２０−４からパケットが出力される（図７Ａの（ｉ）参照）。
【００６５】
続いて周期（Ｆ）に入ると記憶部１４０−１〜記憶部１４０−５にトークン値が加算される（図７Ａの（ｊ）参照）。ここで、フロー♯５では、記憶部１４０−５に記憶されたトークン値がMax Tokenを超過するから、超過した分のトークン値は廃棄される（図７Ａの（ｋ）参照）。すると、フロー♯５は、パケットバッファ１２０−５にパケットが格納されており、かつトークン値の廃棄が発生するので、パケットの出力の優先度が高優先度に設定される（図７Ａの（ｍ）参照）。周期（Ｆ）では、フロー♯１〜フロー♯４のトークン値が負であるから、パケットバッファ１２０−１〜パケットバッファ１２０−４からはパケットは出力されず、パケットバッファ１２０−５からパケットが出力される（図７Ｂの（ｎ）参照）。図７Ｂの周期（Ｇ）は図５Ｂの周期（Ｆ）と同様であるから、説明を省略する。また、図７Ｂの周期（Ｈ）は図７Ａの周期（Ｄ）と同様であるから、説明を省略する。
【００６６】
続いて周期（Ｉ）に入ると記憶部１４０−１〜記憶部１４０−５に記憶されたトークン値に追加トークン値が加算される（図７Ｂの（ｏ）参照）。周期（Ｉ）ではパケットバッファ１２０−１〜パケットバッファ１２０−５にパケットが格納されているが、フロー♯５だけが高優先度に設定されているから、フロー♯５のパケットバッファ１２０−５から優先的にパケットが出力される（図７Ｂの（ｐ）参照）。また、周期（Ｉ）においてパケットを出力した後、フロー♯５のトークン値は０つまり正ではなくなるから、パケットバッファ１２０−１、パケットバッファ１２０−２からパケットが出力される（図７Ｂの（ｑ）参照）。
【００６７】
続いて周期（Ｊ）に入ると記憶部１４０−１〜記憶部１４０−５に記憶されたトークン値に追加トークン値が加算される（図７Ｂの（ｒ）参照）。周期（Ｊ）ではフロー♯５だけが高優先度に設定されているから、フロー♯５のパケットバッファ１２０−５から優先的にパケットが出力される（図７Ｂの（ｓ）参照）。また、周期（Ｊ）においてパケットを出力した後、フロー♯５のトークン値は負になるから、パケットバッファ１２０−３からパケットが出力される（図７Ｂの（ｔ）参照）。
【００６８】
続いて周期（Ｋ）に入ると記憶部１４０−１〜記憶部１４０−５に記憶されたトークン値に追加トークン値が加算される（図７Ｂの（ｕ）参照）。周期（Ｋ）ではフロー♯５だけが高優先度に設定されているから、フロー♯５のパケットバッファ１２０−５から優先的にパケットが出力される（図７Ｂの（ｖ）参照）。また、周期（Ｋ）においてパケットを出力した後、フロー♯５のトークン値は負になるから、パケットバッファ１２０−４からパケットが出力される（図７Ｂの（ｗ）参照）。
【００６９】
以上のように、仮に、フロー♯５の優先度が低優先度の状態からトークン値が遷移したとしても、パケットバッファ１２０−５にパケットが格納されており、かつフロー♯５のトークン値がMax Tokenに達した時点でフロー♯５の優先度は高優先度に設定される。したがって、図７Ａ，図７Ｂで示したパケット転送装置のモデルと図１１で示した従来技術のパケット転送装置のモデルとを比較すると、フロー＃５のトークン値の最大値が従来技術に比べて小さくなる。つまり、高優先度のフローは優先的にパケットが出力され、パケットが出力されるたびにトークン値が減算されるので、トークン値の最大値を抑制することができる。したがって、Max Tokenを比較的小さく設定したとしてもトークン値の廃棄は発生し難い。その結果、Max Tokenを抑制しつつ、トークン値の廃棄の発生を抑制することができる。
【００７０】
また、本実施例によれば、パケットバッファ１２０−１〜パケットバッファ１２０−ｎにパケットが蓄積された後、所定の時間が経過するとパケットを廃棄するHead Dropのような制御を行う場合であっても、パケットの廃棄の発生を抑制することができる。つまり、従来技術では、パケットバッファ１２０−１〜パケットバッファ１２０−ｎにパケットが蓄積されているにもかかわらず、他のフローの処理待ちのためにパケットが廃棄されるおそれがある。この点、本実施例は、パケットバッファ１２０−１〜パケットバッファ１２０−ｎにパケットが格納されていれば、トークン値の廃棄が発生した時点で高優先度になり、優先してパケットが出力されるので、所定時間経過後のパケットの廃棄が生じ難い。
【００７１】
ところで、トークン値の廃棄が発生しないようにMax Tokenを設定するためには、Max Token[byte]=フロー数[本]×最大パケット長[byte]/出力回線ワイヤレート[bps]×フローのSh_R[bps]とする。
【００７２】
例えばあるパケット転送装置Xが、収容フロー数1024、最大パケット長10K[byte]、Sh_R設定粒度500K[bps]、Sh_Rのレンジ500K[bps]〜10G[bps]、トークン追加周期32u[s]という仕様となっているとする。このパケット転送装置Xにおいて、Sh_Rが500K[bps]の場合、トークン追加周期ごとに2[byte](=500K[bps]/8×32u[s])のトークン値が加算される。また、このパケット転送装置Xにおいて、Sh_Rが10Gbpsの場合、トークン追加周期ごとに40000byte(=10G[bps]/8×32u[s])のトークン値が加算される。
【００７３】
また、Sh_Rが1[Mbps]のフローが1000本あり、Sh_Rが9G[bps] のフローが1本あり、トータルのSh_Rが10G[bps]である場合を例に挙げると、Sh_Rが1M[bps]のフローのMax Tokenは、1K[byte](= 1000[本]×10K[byte]/(10×10^9)[bps]×(1×10^6)[bps])となる。また、Sh_Rが9G[bps]のフローのMax Tokenは、9M[byte](=1000[本]×10K[byte]/(10×10^9)[bps]×(9×10^9)[bps])となる。
【００７４】
これに対して、本実施例のパケット転送装置においては、46K[byte]（=１回の追加トークン分(36K[byte])＋最大パケット長(10K[byte])）のMax Tokenで、パケットの出力帯域の劣化を抑制することができる。ここで、低優先度のフローは従来技術に比べてトークン値が貯まりやすくなるが、Sh_Rが低ければ、トークン追加周期ごとのトークン値の追加は小さい。したがって、低優先度のフローであっても、従来技術のような例えば9M[byte]ものトークン値には達し難い。
【００７５】
また、Sh_Rが1M[bps]のフローの最大待ち合わせ時間は、80[ms]となる。つまり、低優先(1M[bps])のフローには、32u[s]周期で1G[bps]分が割り当てられるので、単位時間あたりには4K[byte]が割り当てられる。したがって、10K[byte]のパケット出力を1000フロー分確保するためには、80[ms]必要になる。ここで、待ち合わせ時間の間に追加するトークン値は10K[byte](=1M[bps]/8×80m[s])となるので、追加するトークン値以上のMax Token値を設定すればパケットの出力帯域の劣化を抑制することができる。
【００７６】
以下、本実施例のパケット転送装置についてフローの本数およびフローのSh_Rを変えたいくつかのケースを説明する。
【００７７】
（ケース１）
Sh_Rが1M[bps]のフローが500本、Sh_Rが5M[bps]のフローが500本、Sh_Rが7G[bps]のフローが1本である場合を例に挙げる。Sh_Rが7G[bps]のフローのMax Tokenが38K[byte]であった場合、Sh_Rが7G[bps]のフローは、パケットが格納されており、かつトークン値の廃棄が発生した時点で高優先になる。このとき、Sh_Rが1M[bps]のフローとSh_Rが5M[bps]のフローの最大待ち合わせ時間は、26.7m[s] となる。つまり、低優先(1M[bps] と5M[bps])のフローには、32u[s]周期で3G[bps]分が割り当てられるので、単位時間あたり12K[byte]が割り当てられる。したがって、10K[byte]のパケット出力を1000フロー分確保するためには、26.7[ms]必要になる。ここで、その待ち合わせ時間の間に追加するトークン値は16.7K[byte](=5M[bps] /8 x 26.7m[s])となるので、追加するトークン値以上のMax Token値を設定すればパケットの出力帯域の劣化を抑制することができる。
【００７８】
（ケース２）
Sh_Rが1M[bps]フローが999本、Sh_Rが5M[bps]フローが1本、Sh_Rが9G[bps]フローが1本である場合を例に挙げる。Sh_Rが9G[bps]フローのMax Tokenが46K[byte]であった場合、Sh_Rが9G[bps]フローは、パケットが格納されており、かつトークン値の廃棄が発生した時点で高優先になる。このとき、Sh_Rが1M[bps]のフローとSh_Rが5M[bps]のフローの最大待ち合わせ時間は、80m[s]となる。つまり、低優先(1M[bps])のフローには、32u[s]周期で1G[bps]分が割り当てられるので、単位時間あたり4K[byte]が割り当てられる。したがって、10K[byte]のパケット出力を1000フロー分確保するためには、80[ms]必要になる。ここで、その待ち合わせ時間の間に追加するトークン値は50K[byte](=5M[bps] / 8 x 80m[s])となるので、追加するトークン値以上のMax Token値を設定すればパケットの出力帯域の劣化を抑制することができる。
【００７９】
（ケース３）
Sh_Rが1M[bps]フローが1000本、Sh_Rが1G[bps]フローが1本、Sh_Rが8G[bps]フローが1本である場合を例に挙げる。Sh_Rが8G[bps]フローのMax Tokenが42K[byte]であった場合、Sh_Rが8G[bps]フローは、パケットが格納されており、かつトークン値の廃棄が発生した時点で高優先になる。このとき、Sh_Rが1M[bps]のフローとSh_Rが1G[bps]のフローの最大待ち合わせ時間は、40m[s]となる。つまり、低優先(1M[bps]と1G[bps])のフローには、32u[s]周期で2G[bps]分が割り当てられるので、単位時間あたり8K[byte]が割り当てられる。したがって、10K[byte]のパケット出力を1000フロー分確保するためには、40[ms]必要になる。ここで、その待ち合わせ時間の間に追加するトークン量は5M[byte](=1G[bps]/8×40m[s])となるので、追加するトークン値以上のMax Token値を設定すればパケットの出力帯域の劣化を抑制することができる。
【００８０】
また、Sh_Rが1G[bps]フローのMax Tokenも42K[byte]であった場合、Sh_Rが1G[bps]フローは、パケットが格納されており、かつトークン値の廃棄が発生した時点で高優先になる。そのときはSh_Rが8G[bps]フローのMax TokenはSh_Rが1G[bps]フローにより10K[byte]パケット出力時間を奪われてもトークン値の廃棄の発生を回避しなければならないため、さらに最大パケット長分を加えた52K[byte]のMax Tokenが必要となる。しかし、それでも従来技術においてパケットの出力帯域の劣化を抑制ために必要なMax Tokenと比較すると1/100以下のMax Tokenでパケットの出力帯域の劣化を抑制することができる。
【００８１】
以上、本実施例のパケット転送装置１００によれば、バケットバッファ１２０−１〜パケットバッファ１２０−ｎにパケットが格納されているフロー♯１〜フロー♯ｎでトークン値の廃棄が発生したら、そのフローのパケット出力の優先度は高優先度になる。パケット出力の優先度が高優先度になると、そのフローのパケットバッファからは優先的にパケットが出力される。パケットバッファからパケットが出力されると、パケットが出力されたフローに対応して記憶部に記憶されたトークン値から出力パケット長に応じたトークン値が減算される。したがって、本実施例のパケット転送装置１００によれば、フローの数が増大したとしても、記憶部に記憶されるトークン値の最大値を抑制することができるので、Max Tokenを抑制し、かつトークン値の廃棄の発生を抑制することができる。
【００８２】
上記の実施例に関し、さらに以下の付記を開示する。
【００８３】
（付記１）パケットを伝送する複数のフローを流れるパケットをそれぞれ前記複数のフローに対応して格納するパケットバッファと、
前記パケットバッファに格納されたパケットの出力を許可するか否かを判別するのに用いる情報であるトークン値を前記複数のフローに対応して記憶する記憶部と、
前記複数のフローに対応して前記記憶部に記憶されたトークン値のそれぞれにあらかじめ設定された周期で所定のトークン値を加算するとともに、前記パケットバッファからパケットが出力されたフローに対応して前記記憶部に記憶されたトークン値から出力パケット長に応じたトークン値を減算し、さらに前記複数のフローに対応して前記記憶部に記憶されたトークン値のそれぞれがあらかじめ設定された上限値を超過したら超過した分のトークン値を廃棄するトークン演算部と、
前記複数のフローごとに前記パケットバッファにパケットが格納されているか否かを検出するパケット監視部と、
前記パケット監視部で検出された前記パケットの格納の有無および前記トークン演算部による前記トークン値の廃棄の有無に応じて、前記複数のフローのパケット出力の優先度を高優先度または低優先度に設定する優先制御信号生成部と、
前記優先制御信号生成部で設定された前記複数のフローのパケット出力の優先度に応じて、パケットを出力するフローを順次選択する出力フロー選択部と
を備えたことを特徴とするパケット転送装置。
【００８４】
（付記２）前記優先制御信号生成部は、前記パケット監視部で検出された前記パケットの格納が有りであり、かつ前記トークン演算部による前記トークン値の廃棄の発生が有りであるフローのパケットの出力の優先度を高優先度に設定し、
少なくとも前記パケット監視部で検出された前記パケットの格納が無しであるフローのパケットの出力の優先度を低優先度に設定する
付記１に記載のパケット転送装置。
【００８５】
（付記３）前記トークン演算部は、前記複数のフローに対応して前記記憶部に記憶されたトークン値のそれぞれが正か負かを判別し、
前記出力フロー選択部は、前記パケットバッファにパケットが格納されていないフローまたは前記記憶部に記憶されたトークン値が負であるフローをスキップしながらパケットを出力するフローを順次選択し、
前記優先制御信号生成部は、前記出力フロー選択部でスキップされて、かつ前記トークン演算部でトークン値が正と判別されたフローのパケット出力の優先度を低優先度に設定し、
前記出力フロー選択部でスキップされて、かつ前記トークン演算部でトークン値が負と判別されたフローのパケット出力の優先度を保持し、
前記出力フロー選択部でスキップされず、かつ前記トークン演算部でトークン値の廃棄が有りであるフローの優先度を高優先度に設定し、
前記出力フロー選択部でスキップされず、かつ前記トークン演算部でトークン値の廃棄が無しであるフローの優先度を保持する
付記１に記載のパケット転送装置。
【００８６】
（付記４）パケットを伝送する複数のフローを流れるパケットをそれぞれ前記複数のフローに対応して格納するパケットバッファにパケットが格納されているか否かを前記複数のフローごとに検出する監視ステップと、
前記複数のフローに対応して記憶部に記憶されており、前記パケットバッファに格納されたパケットの出力を許可するか否かを判別するのに用いる情報であるトークン値のそれぞれに、あらかじめ設定された周期で所定のトークン値を加算する加算ステップと、
前記パケットバッファからパケットが出力されたフローに対応して前記記憶部に記憶されたトークン値から出力パケット長に応じたトークン値を減算する減算ステップと、
前記複数のフローに対応して前記記憶部に記憶されたトークン値のそれぞれがあらかじめ設定された上限値を超過したら超過した分のトークン値を廃棄する廃棄ステップと、
前記監視ステップで検出されたパケットの格納の有無および前記廃棄ステップによるトークン値の廃棄の有無に応じて、前記複数のフローのパケット出力の優先度を高優先度または低優先度に設定する優先度設定ステップと、
前記優先度設定ステップで設定された前記複数のフローのパケット出力の優先度に応じて、パケットを出力するフローを順次選択する出力フロー選択ステップと
を備えたことを特徴とするパケット転送方法。
【００８７】
（付記５）前記優先度設定ステップは、前記監視ステップで検出された前記パケットの格納が有りであり、かつ前記廃棄ステップによる前記トークン値の廃棄の発生が有りであるフローのパケットの出力の優先度を高優先度に設定し、
少なくとも前記監視ステップで検出された前記パケットの格納が無しであるフローのパケットの出力の優先度を低優先度に設定する
付記４に記載のパケット転送方法。
【００８８】
（付記６）前記複数のフローに対応して前記記憶部に記憶されたトークン値のそれぞれが正か負かを判別する判別ステップを有し、
前記出力フロー選択ステップは、前記パケットバッファにパケットが格納されていないフローまたは前記記憶部に記憶されたトークン値が負であるフローをスキップしながらパケットを出力するフローを順次選択し、
前記優先度設定ステップは、前記出力フロー選択ステップでスキップされて、かつ前記判別ステップでトークン値が正と判別されたフローのパケット出力の優先度を低優先度に設定し、
前記出力フロー選択ステップでスキップされて、かつ前記判別ステップでトークン値が負と判別されたフローのパケット出力の優先度を保持し、
前記出力フロー選択ステップでスキップされず、かつ前記判別ステップでトークン値の廃棄が有りであるフローの優先度を高優先度に設定し、
前記出力フロー選択ステップでスキップされず、かつ前記判別ステップでトークン値の廃棄が無しであるフローの優先度を保持する
付記４に記載のパケット転送方法。
【符号の説明】
【００８９】
１００ パケット転送装置
１２０ パケットバッファ
１４０ 記憶部
１６０ トークン演算部
１８０ パケット監視部
２００ 優先制御信号生成部
２２０ 出力フロー選択部
【図１】
0005604919.tif 000002
【図２】
0005604919.tif 000003
【図３】
0005604919.tif 000004
【図４】
0005604919.tif 000005
【図５】
0005604919.tif 000006
【図６】
0005604919.tif 000007
【図７Ａ】
0005604919.tif 000008
【図７Ｂ】
0005604919.tif 000009
【図８】
0005604919.tif 000010
【図９】
0005604919.tif 000011
【図１０】
0005604919.tif 000012
【図１１】
0005604919.tif 000013