(57)【特許請求の範囲】
【請求項１】
入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
上記出力ポート回路は、
送信すべきパケットを一時的に格納する記憶手段と、
上記記憶手段への上記パケットの格納及び読み出しを制御する制御手段とを備え、
上記制御手段は、送信すべきパケットが属する各フローに対して上記記憶手段に格納可能なメモリサイズの基準となる基本量をそれぞれ割り当てるときに、帯域保証型クラスに属するパケットの各フローに対する基本量を、当該各フローが要求するメモリサイズだけ個別に割り当てて管理する一方、ベストエフォート型クラスに属するパケットの各フローに対する基本量を、上記記憶手段全体のメモリサイズから、上記帯域保証型クラスに割り当てられた各基本量の総和を減算したメモリサイズを一括して割り当てて管理することを特徴とするルータ装置の出力ポート回路。
【請求項２】
上記制御手段は、ベストエフォート型クラス毎に、優先度とそのクラスに属するフローの本数との積を計算し、それらの積を、ベストエフォート型クラスの個数について総和を計算することにより、ベストエフォート型クラスにおける総優先度を計算し、受信されたパケットのフローが属するクラスの優先度を、上記計算した総優先度で除算することにより、当該受信されたパケットに対する基本量配分割合を計算し、上記計算した基本量配分割合とベストエフォート型クラス用基本量との積を計算することにより当該受信されたパケットのフローの基本量を計算することを特徴とする請求項１記載のルータ装置の出力ポート回路。
【請求項３】
入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
上記出力ポート回路は、
送信すべきパケットを一時的に格納する記憶手段と、
上記記憶手段への上記パケットの格納及び読み出しを制御する制御手段とを備え、
上記制御手段は、送信すべきパケットが属する各フローに対して上記記憶手段に格納可能なメモリサイズの基準となる基本量をそれぞれ割り当て、各フローの記憶手段における実際の使用量に基づいて、送信すべきパケットの当該フローの基本量に対する超過使用量を計算し、上記記憶手段を上記基本量に対して最も超過して使用しているフローのみのフロー情報とその超過使用量を管理し、
上記制御手段は、所定のフローに属するパケットを受信したときに、管理している超過使用量よりも超過使用量が大きいフローが発生するとき、フロー情報及び超過使用量を新たに受信したパケットが属するフローのフロー情報及び超過使用量に更新することを特徴とするルータ装置の出力ポート回路。
【請求項４】
上記制御手段は、上記割り当てられた基本量を最も超過して使用しているフローに属するパケットが当該ルータ装置から送信されるときに、上記管理している超過使用量のみを当該フローの送信後の超過使用量に更新することを特徴とする請求項３記載のルータ装置の出力ポート回路。
【請求項５】
上記制御手段は、各フローの記憶手段における実際の使用量に基づいて、送信すべきパケットの当該フローの基本量に対する超過使用量を計算し、上記記憶手段を上記基本量に対して最も超過して使用しているフローのみのフロー情報とその超過使用量を管理し、
上記制御手段は、所定のフローに属するパケットを受信したときに、管理している超過使用量よりも超過使用量が大きいフローが発生するとき、フロー情報及び超過使用量を新たに受信したパケットが属するフローのフロー情報及び超過使用量に更新することを特徴とする請求項１又は２記載のルータ装置の出力ポート回路。
【請求項６】
上記制御手段は、上記割り当てられた基本量を最も超過して使用しているフローに属するパケットが当該ルータ装置から送信されるときに、上記管理している超過使用量のみを当該フローの送信後の超過使用量に更新することを特徴とする請求項５記載のルータ装置の出力ポート回路。
【請求項７】
入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
上記出力ポート回路は、
送信すべきパケットを一時的に格納する記憶手段と、
上記記憶手段への上記パケットの格納及び読み出しを制御する制御手段とを備え、
上記制御手段は、複数のフローが上記記憶手段に格納されているときの各フローを送信する順序を管理するために、各フロー毎に、当該フローの次に送信すべきフローのフロー情報を格納する第１の管理テーブルをさらに備え、送信すべき新たなフローが上記記憶手段に格納されたとき、上記新たなフローを、上記現在送信しているフローの前のフローの次の順序に指定するように上記第１の管理テーブルを更新することを特徴とするルータ装置の出力ポート回路。
【請求項８】
上記制御手段は、複数のフローが上記記憶手段に格納されているときの各フローを送信する順序を管理するために、各フロー毎に、当該フローの次に送信すべきフローのフロー情報を格納する第１の管理テーブルをさらに備え、送信すべき新たなフローが上記記憶手段に格納されたとき、上記新たなフローを、上記現在送信しているフローの前のフローの次の順序に指定するように上記第１の管理テーブルを更新することを特徴とする請求項１乃至６のうちのいずれか１つに記載のルータ装置の出力ポート回路。
【請求項９】
入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
上記出力ポート回路は、
送信すべきパケットを一時的に格納する記憶手段と、
上記記憶手段への上記パケットの格納及び読み出しを制御する制御手段とを備え、
上記記憶手段は所定のブロック長の複数のブロックに分割され、上記制御手段は、パケットを記憶したブロックの情報と、上記パケットを記憶したブロックの次に連結されるべきブロックの情報と対応づけて格納する第２の管理テーブルをさらに備え、各フローのパケットの連結状態を管理することを特徴とするルータ装置の出力ポート回路。
【請求項１０】
上記記憶手段は所定のブロック長の複数のブロックに分割され、上記制御手段は、パケットを記憶したブロックの情報と、上記パケットを記憶したブロックの次に連結されるべきブロックの情報と対応づけて格納する第２の管理テーブルをさらに備え、各フローのパケットの連結状態を管理することを特徴とする請求項１乃至８のうちのいずれか１つに記載のルータ装置の出力ポート回路。
【請求項１１】
入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置において、請求項１乃至１０のうちのいずれか１つに記載のルータ装置の出力ポート回路を備えたことを特徴とするルータ装置。
【請求項１２】
入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路の制御方法において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
送信すべきパケットを一時的に格納する記憶手段への上記パケットの格納及び読み出しを制御するステップと、
送信すべきパケットが属する各フローに対して上記記憶手段に格納可能なメモリサイズの基準となる基本量をそれぞれ割り当てるときに、帯域保証型クラスに属するパケットの各フローに対する基本量を、当該各フローが要求するメモリサイズだけ個別に割り当てて管理する一方、ベストエフォート型クラスに属するパケットの各フローに対する基本量を、上記記憶手段全体のメモリサイズから、上記帯域保証型クラスに割り当てられた各基本量の総和を減算したメモリサイズを一括して割り当てて管理するステップを含むことを特徴とするルータ装置用出力ポート回路の制御方法。
【請求項１３】
ベストエフォート型クラス毎に、優先度とそのクラスに属するフローの本数との積を計算し、それらの積を、ベストエフォート型クラスの個数について総和を計算することにより、ベストエフォート型クラスにおける総優先度を計算し、受信されたパケットのフローが属するクラスの優先度を、上記計算した総優先度で除算することにより、当該受信されたパケットに対する基本量配分割合を計算し、上記計算した基本量配分割合とベストエフォート型クラス用基本量との積を計算することにより当該受信されたパケットのフローの基本量を計算するステップをさらに含むことを特徴とする請求項１２記載のルータ装置用出力ポート回路の制御方法。
【請求項１４】
入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路の制御方法において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
送信すべきパケットを一時的に格納する記憶手段への上記パケットの格納及び読み出しを制御するステップと、
送信すべきパケットが属する各フローに対して上記記憶手段に格納可能なメモリサイズの基準となる基本量をそれぞれ割り当て、各フローの記憶手段における実際の使用量に基づいて、送信すべきパケットの当該フローの基本量に対する超過使用量を計算し、上記記憶手段を上記基本量に対して最も超過して使用しているフローのみのフロー情報とその超過使用量を管理するステップと、
所定のフローに属するパケットを受信したときに、管理している超過使用量よりも超過使用量が大きいフローが発生するとき、フロー情報及び超過使用量を新たに受信したパケットが属するフローのフロー情報及び超過使用量に更新するステップとを含むことを特徴とするルータ装置用出力ポート回路の制御方法。
【請求項１５】
上記割り当てられた基本量を最も超過して使用しているフローに属するパケットが当該ルータ装置から送信されるときに、上記管理している超過使用量のみを当該フローの送信後の超過使用量に更新するステップをさらに含むことを特徴とする請求項１４記載のルータ装置用出力ポート回路の制御方法。
【請求項１６】
各フローの記憶手段における実際の使用量に基づいて、送信すべきパケットの当該フローの基本量に対する超過使用量を計算し、上記記憶手段を上記基本量に対して最も超過して使用しているフローのみのフロー情報とその超過使用量を管理するステップと、
所定のフローに属するパケットを受信したときに、管理している超過使用量よりも超過使用量が大きいフローが発生するとき、フロー情報及び超過使用量を新たに受信したパケットが属するフローのフロー情報及び超過使用量に更新するステップとをさらに含むことを特徴とする請求項１２又は１３記載のルータ装置用出力ポート回路の制御方法。
【請求項１７】
上記割り当てられた基本量を最も超過して使用しているフローに属するパケットが当該ルータ装置から送信されるときに、上記管理している超過使用量のみを当該フローの送信後の超過使用量に更新するステップをさらに含むことを特徴とする請求項１６記載のルータ装置用出力ポート回路の制御方法。
【請求項１８】
入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路の制御方法において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
送信すべきパケットを一時的に格納する記憶手段への上記パケットの格納及び読み出しを制御するステップと、
各フロー毎に、当該フローの次に送信すべきフローのフロー情報を格納する第１の管理テーブルを用いて、複数のフローが上記記憶手段に格納されているときの各フローを送信する順序を管理し、送信すべき新たなフローが上記記憶手段に格納されたとき、上記新たなフローを、上記現在送信しているフローの前のフローの次の順序に指定するように上記第１の管理テーブルを更新するステップを含むことを特徴とするルータ装置用出力ポート回路の制御方法。
【請求項１９】
各フロー毎に、当該フローの次に送信すべきフローのフロー情報を格納する第１の管理テーブルを用いて、複数のフローが上記記憶手段に格納されているときの各フローを送信する順序を管理し、送信すべき新たなフローが上記記憶手段に格納されたとき、上記新たなフローを、上記現在送信しているフローの前のフローの次の順序に指定するように上記第１の管理テーブルを更新するステップをさらに含むことを特徴とする請求項１２乃至１７のうちのいずれか１つに記載のルータ装置用出力ポート回路の制御方法。
【請求項２０】
入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路の制御方法において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
送信すべきパケットを一時的に格納する記憶手段への上記パケットの格納及び読み出しを制御するステップと、
上記記憶手段は所定のブロック長の複数のブロックに分割され、パケットを記憶したブロックの情報と、上記パケットを記憶したブロックの次に連結されるべきブロックの情報と対応づけて格納する第２の管理テーブルを用いて、各フローのパケットの連結状態を管理するステップを含むことを特徴とするルータ装置用出力ポート回路の制御方法。
【請求項２１】
上記記憶手段は所定のブロック長の複数のブロックに分割され、パケットを記憶したブロックの情報と、上記パケットを記憶したブロックの次に連結されるべきブロックの情報と対応づけて格納する第２の管理テーブルを用いて、各フローのパケットの連結状態を管理するステップをさらに含むことを特徴とする請求項１２乃至１７のうちのいずれか１つに記載のルータ装置用出力ポート回路の制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えばインターネットなどのパケット交換網から入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置とその出力ポート回路及びその制御方法に関し、特に、当該出力ポート回路内のバッファメモリに対する格納及び読み出しを制御するルータ装置の出力ポート回路及びその制御方法に関する。
【０００２】
【従来の技術】
近年、高性能コンピュータが、研究機関や企業のみならず、一般家庭まで普及しはじめ、新たな情報機器としての機能を発揮しはじめたことにより、ＷＷＷなどのネットワークアプリケーションの利用が飛躍的に増大し、インターネット及び／又はイントラネットでのトラヒックが指数関数的に急増している。音声のトラヒックをインターネットに統合する動き、すなわちＶｏＩＰ（Voice over IP）が本格的に始動しつつあり、今後ビデオのような一定の転送レートをもつストリーム型トラヒックや高速なデータ転送など異なる通信品質を要求する様々な形態のトラヒックの混在が予想される。
【０００３】
それに伴いＤｉｆｆ−Ｓｅｒｖ（差別化されたサービス）やＭＰＬＳ（マルチプロトコル・ラベル・スイッチング）といった技術が提唱され、普及しつつある。Ｄｉｆｆ−Ｓｅｒｖは、異なる属性を持つトラヒックに異なるサービスクラスを定義し、それに見合ったサービスの提供をインターネットルータに要求している。またＭＰＬＳはパケット転送を高速化する技術であるが、差別化サービスを実現するため、そのＭＰＬＳパケットのヘッダにはＣｏＳ（サービスクラス）フィールドが設けられている。このような状況下で多種多様な品質を保証するＱｏＳ（サービス品質）制御機構を実現するには、現在の通信事情ではルータ装置などの中継装置に制御機能を具備することが現実的である。さらに、近年のネットワークの高速化に伴い、ルータ装置において上記ＱｏＳ制御機構を高速に動作させることが必要不可欠となってきた。
【０００４】
上記のようなＱｏＳを保証するための機構やクラス別優先制御機構を備えるために考えられる技術の１つとして、バッファメモリ読み出しスケジューリングの研究が盛んに行われている。例えば、バッファメモリを入出力ポートそれぞれに配置する入出力バッファ型スイッチは、重み付け均等キューイング（ＷＦＱ）や重み付けられたラウンドロビン（ＷＲＲ）等のバッファメモリ読み出しスケジューリング規律によって、特定コネクションによる出力回線の恒常的な占有という問題点を改善する。しかしながら、これらのスケジューリング規律だけでは、バッファメモリ高負荷時に到着する高優先トラヒックのパケットを確実に収容することができず、十分なＱｏＳ保証を提供するのは困難である。また、ルータ装置のインターフェースカードには複数本のポートが接続されることが十分に考えられ、この場合、バッファメモリ空間も複数ポートで共有されることとなる。しかし、複数ポートを考慮したバッファメモリ管理に関しては十分な検討が行われていない。例えば、非特許文献１は、この問題を取り扱うための１つの方法を提示しており、以下この方法を従来技術という。
【０００５】
【非特許文献１】
南勝也ほか，「インターネットルータにおけるクラス優先制御を考慮したフロー別バッファ管理方法」，電子情報通信学会技術研究報告，ＳＳＥ９９−１７５，ＩＮ９９−１３８，電子情報通信学会発行，ｐ．８５−９０，２０００年３月。
【０００６】
従来技術のバッファメモリ管理法について以下に述べる。ルータ装置は、まず、フロー毎に最低限使用可能なバッファメモリサイズ（以下、基本量という。）を論理的に確保する。バッファメモリの使用率が低い環境下では、この基本量に関わらず、実際に必要なだけのバッファメモリの記憶領域を使用することが許可される。高負荷環境に遷移しバッファメモリがフルの状態になった場合、ルータ装置は、プッシュアウト機構を適用することによってバッファメモリ中の特定のパケットを破棄する（プッシュアウトする）。さらに、従来技術の方法では、１つのバッファメモリを複数のポートで共有する環境を想定した。それに伴い、従来技術の方法では、基本量の管理を、ポート、クラス、フローの順に階層的に行い、また、スケジューリング規律として階層的にＷＲＲを行った。さらに、従来技術の方法では、クラス別優先制御を実現するためにその帯域配分を行った。
【０００７】
従来技術における基本量配分法について説明する。ルータ装置がフローを検知すると、そのフローに対して、当該ルータ装置におけるバッファメモリの基本量を割り当てる。その割り当て方法を以下に述べる。
【０００８】
まず、ルータ装置は、当該ルータ装置の全バッファメモリサイズを複数ポート間で回線速度比に応じて配分する。次に、帯域保証型（ＢＧ）クラスに属するフローに対して、そのフローが属するポートに配分された基本量に関わらず、保証された帯域から演算される必要なバッファメモリ量が固定的に配分される。その他のベストエフォート型のクラスに属するフローに対しては、ポートに対する基本量から帯域保証型クラスの配分量を減算した分が、予め決定された重み係数に従って配分される。配分される基本量はフロー検知とフロー消滅に伴い変化する。つまり、実際にバッファメモリを使用しているフローの間だけで基本量が配分されることになる。
【０００９】
具体的に、図４７を参照して説明する。図４７は、従来技術に係るバッファメモリの記憶領域を分配する方法を説明するための概略説明図である。ルータ装置は、まず、各ポートＰ１乃至ＰＮに対して、全体のバッファメモリ量を出力回線速度の比に従って、それぞれバッファメモリ量ｐ１，ｐ２，…，ｐＮを配分する。図４７の場合、まず、ポートＰ１に対して基本量ｐ１が配分される。次に、基本量ｐ１が、そのポートＰ１に属するクラス間で配分される。このクラス間の配分の割合は、動的に変化する。ルータ装置が、帯域保証型クラスＣ２に対して、その予約量に見合った基本量を配分するためである。それ以外のクラスＣ１及びＣ０に対しては、基本量ｐ１のうちの残りの量が、予め決められたクラスの重み係数に従って配分される。図４７の場合、まず帯域保証型であるクラスＣ２に対して、予約される帯域から演算される必要バッファメモリ量α１が配分される。この必要バッファメモリ量は、単位時間間隔に契約分のトラヒックがバースト的に到着した場合に、それらのパケットを全て収容できる量である。その後、残りのバッファメモリ量（ｐ１−α１）を他のクラスに対して配分する。その手順は、まず各クラスの優先度ｗ１１及びｗ１０と、検知されているフロー数ｆ１１及びｆ１０とを用い、クラスの重み係数としてそれらの積をバッファメモリ量（ｐ１−α１）に適用する。図４７におけるポートＰ１の場合、クラスＣ１の重み係数ＷＣ１とクラスＣ０の重み係数ＷＣ０とは、次式で定義される。
【００１０】
【数１】
ＷＣ１＝ｆ１１×ｗ１１
【数２】
ＷＣ０＝ｆ１０×ｗ１０
【００１１】
その重み係数の比をバッファメモリ量（ｐ１−α１）に適用して、クラスＣ０及びＣ１の基本量が取得される。つまり、クラスＣ１及びＣ０それぞれの基本量β１及びγ１は次式で表される。
【００１２】
【数３】
0003643827.tif 000002
【数４】
0003643827.tif 000003
【００１３】
一方、バッファメモリがフルの状態時にパケットが到着すると、余分なパケットを廃棄するためのプッシュアウト機構として、ルータ装置は、以下のような操作を行う。
【００１４】
基本量を超えてバッファメモリを使用しているフローに属するパケットが新たに到着した場合は、そのままそのパケットは破棄される。バッファメモリの使用量が基本量に満たないフローに属するパケットが到着した場合、プッシュアウト機構を採用することにより、バッファメモリに到着パケットを格納することが許可される。プッシュアウト対象パケットのサーチが終了すると、当該プッシュアウト対象パケットが存在するバッファメモリ位置上に到着パケットが上書きされ、上書きされたパケット（すなわちプッシュアウト対象パケット）は廃棄される。プッシュアウト対象パケットをサーチした結果、バッファメモリを基本量以上使用しているフローが存在しない場合は、到着パケットは廃棄される。
【００１５】
従来技術では、基本量を階層的に配分しているので、プッシュアウト対象フローは以下の手順で検索される。ルータ装置は、まず、到着パケットの属するクラスが基本量を超えているか否かを調べる。超えている場合は、そのクラス内で最も超過使用量の大きいフローがプッシュアウトの対象となる。超えていない場合、ルータ装置は、到着パケットの属するポート単位での超過使用量を調べる。使用量が基本量を超過しているクラスが存在すれば、ルータ装置は、そのポート内で最も超過使用量の大きいクラスを決定し、次いで、そのクラス内で最も超過使用量の大きいフローを決定するという順に検索を行う。どのクラスの使用量も基本量を超過していなければ、ルータ装置は、最も超過使用量の大きいポート内で同様の検索を行う。
【００１６】
以上の方法によってプッシュアウト対象フローが検索され、到着パケットはそのフローの先頭パケットに対して上書きが許可される。この方法について、図４８を参照して具体的に説明する。図４８は、図４７で分配されたバッファメモリの記憶領域を超過して使用しているクラスのパケットを廃棄する方法を説明するための概略説明図であり、図４８（ａ）は同一ポートの異なるクラスのパケットを廃棄する場合を示す図であり、図４８（ｂ）は異なるポートのクラスのパケットを廃棄する場合を示す図である。
【００１７】
図４８において、ポートＰ１乃至Ｐ３と各ポート内のクラスＣ１乃至Ｃ３とを囲む実線の円は、各ポート及び各クラスの基本量を示し、点線の円は各ポート及び各クラスの実際の使用量を示している。図４８（ａ）の場合において、到着パケットの属するフローが基本量を超えて使用していないと仮定する。その時到着フローの属するクラスＣ３の超過使用量が調べられることになる。図４８（ａ）の場合、ポートＰ１内のクラスＣ３の使用量（点線の円で表す。）はその基本量（実線の円で表す。）を超過していないので、自分の属するポート単位の超過使用量を調べることとなる。ポートＰ１はその基本量を超過して使用しているので、プッシュアウトの対象となるクラスはポートＰ１に属するクラスで最も超過使用量の大きいクラスＣ２が対象となる。この方法ではフロー単位の制御を行うので、プッシュアウト対象パケットはクラスＣ２に属するクラスのフローの中で最も超過使用量の大きいフローの先頭パケットとなる。
【００１８】
また、図４８（ｂ）の場合に図４８（ａ）と同様の検索を行うと、到着したフローの属するポートＰ１はその基本量（実線の円で表す。）を超えてバッファメモリを使用していない。そのときは、最も超過使用量の大きいポートＰ３がプッシュアウトの対象となり、ルータ装置は、そのポートに属するフローに対して上記と同様の検索を行うことになる。その結果、ポートＰ３中で最も超過使用量が大きいクラスＣ１がプッシュアウトの対象になる。
【００１９】
次いで、従来技術に係るスケジューリング規律及び帯域配分法について説明する。図４９は、従来技術において、送信に利用可能な全帯域幅をポート、クラス及びフローで階層的に分配する方法を説明するための概略説明図である。従来技術の方法では、バッファメモリに格納されたパケットの読み出しスケジューリング規律として、ポート、クラス、フローの順に階層的に重み付けラウンドロビン（ＷＲＲ）が実行される。
【００２０】
ＷＲＲにおいて、各クラスに対する重み係数を決める必要がある。その重み係数の決定法を以下に述べる。まず、第１階層である、ポートに対するＷＲＲでは、そのポートの出力回線速度の比が重み係数とされる。第２階層である、クラスに対するＷＲＲでは、ルータ装置は、始めに、帯域保証型フローに対して保証された帯域を全リンク容量から割り当てる。帯域保証型フローに割り当てた後の残りのリンク容量が、帯域保証型クラス以外のクラスの間で配分される。その配分比として、基本量配分時に使用したクラス比が使用される。それによって演算された帯域配分量を簡単な整数比に換算することで重み係数が得られる。第３階層である、フローに対するＷＲＲでは、帯域保証型クラス内フローに関しては契約帯域の比がそのまま重み係数として使用される。他のクラスに関してはフロー毎の公平性を考慮に入れ、全てのフローに対して重み係数「１」が与えられる。つまり、帯域保証型クラス以外の低優先度クラス内のフローに対するスケジューリング規律にはラウンドロビン（ＲＲ）が使用される。
【００２１】
【発明が解決しようとする課題】
以上説明したように、従来技術においては、到着パケットのためのバッファメモリの記憶領域を、パケットが属するクラス単位で管理する場合、ルータ装置が不確定な性能を示すので、バッファメモリの記憶領域を管理するためのより適切な処理単位を確立する必要がある。
【００２２】
上記の技術課題に対して、フロー毎の適切なバッファ管理機構を含めたＱｏＳ制御機構が実装された高性能ルータ装置を実現する必要がある。特に、ルータ装置のバッファメモリが高負荷時においても、各クラス及び各フローに見合ったサービスを提供し、高度なＱｏＳ保証を実現する必要がある。
【００２３】
さらに、ルータ装置のバッファメモリ管理を実際に実行するためには、到着パケットがどのバッファメモリ位置に格納されたかを管理する必要がある。ここで、インターネットを伝送されるパケットは可変長であるということが問題となる。バッファメモリ内ではパケット格納開始位置とパケット長の管理を行う必要があるが、可変長パケットの格納及び送信を繰り返すと、バッファメモリ内で空き領域が離散してしまい、バッファメモリ並びにパケットの管理が複雑になる。
【００２４】
本発明の目的は以上の問題点を解決し、クラスに見合ったサービスを提供できるとともに、特定のフローによるバッファメモリの占有を解消でき、しかも出力ポート回路内のバッファメモリに対するパケットの入出力の処理を高速化することができるルータ装置とその出力ポート回路及びその制御方法を提供することにある。
【００２５】
【課題を解決するための手段】
第１の発明に係るルータ装置の出力ポート回路は、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
上記出力ポート回路は、
送信すべきパケットを一時的に格納する記憶手段と、
上記記憶手段への上記パケットの格納及び読み出しを制御する制御手段とを備え、
上記制御手段は、送信すべきパケットが属する各フローに対して上記記憶手段に格納可能なメモリサイズの基準となる基本量をそれぞれ割り当てるときに、帯域保証型クラスに属するパケットの各フローに対する基本量を、当該各フローが要求するメモリサイズだけ個別に割り当てて管理する一方、ベストエフォート型クラスに属するパケットの各フローに対する基本量を、上記記憶手段全体のメモリサイズから、上記帯域保証型クラスに割り当てられた各基本量の総和を減算したメモリサイズを一括して割り当てて管理することを特徴とする。
【００２６】
上記ルータ装置の出力ポート回路において、上記制御手段は、ベストエフォート型クラス毎に、優先度とそのクラスに属するフローの本数との積を計算し、それらの積を、ベストエフォート型クラスの個数について総和を計算することにより、ベストエフォート型クラスにおける総優先度を計算し、受信されたパケットのフローが属するクラスの優先度を、上記計算した総優先度で除算することにより、当該受信されたパケットに対する基本量配分割合を計算し、上記計算した基本量配分割合とベストエフォート型クラス用基本量との積を計算することにより当該受信されたパケットのフローの基本量を計算することを特徴とする。
【００２７】
第２の発明に係るルータ装置の出力ポート回路は、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
上記出力ポート回路は、
送信すべきパケットを一時的に格納する記憶手段と、
上記記憶手段への上記パケットの格納及び読み出しを制御する制御手段とを備え、
上記制御手段は、送信すべきパケットが属する各フローに対して上記記憶手段に格納可能なメモリサイズの基準となる基本量をそれぞれ割り当て、各フローの記憶手段における実際の使用量に基づいて、送信すべきパケットの当該フローの基本量に対する超過使用量を計算し、上記記憶手段を上記基本量に対して最も超過して使用しているフローのみのフロー情報とその超過使用量を管理し、
上記制御手段は、所定のフローに属するパケットを受信したときに、管理している超過使用量よりも超過使用量が大きいフローが発生するとき、フロー情報及び超過使用量を新たに受信したパケットが属するフローのフロー情報及び超過使用量に更新することを特徴とする。
【００２８】
上記ルータ装置の出力ポート回路において、上記制御手段は、上記割り当てられた基本量を最も超過して使用しているフローに属するパケットが当該ルータ装置から送信されるときに、上記管理している超過使用量のみを当該フローの送信後の超過使用量に更新することを特徴とする。
【００２９】
また、上記ルータ装置の出力ポート回路において、上記制御手段は、各フローの記憶手段における実際の使用量に基づいて、送信すべきパケットの当該フローの基本量に対する超過使用量を計算し、上記記憶手段を上記基本量に対して最も超過して使用しているフローのみのフロー情報とその超過使用量を管理し、
上記制御手段は、所定のフローに属するパケットを受信したときに、管理している超過使用量よりも超過使用量が大きいフローが発生するとき、フロー情報及び超過使用量を新たに受信したパケットが属するフローのフロー情報及び超過使用量に更新することを特徴とする。
【００３０】
さらに、上記ルータ装置の出力ポート回路において、上記制御手段は、上記割り当てられた基本量を最も超過して使用しているフローに属するパケットが当該ルータ装置から送信されるときに、上記管理している超過使用量のみを当該フローの送信後の超過使用量に更新することを特徴とする。
【００３１】
第３の発明に係るルータ装置の出力ポート回路は、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
上記出力ポート回路は、
送信すべきパケットを一時的に格納する記憶手段と、
上記記憶手段への上記パケットの格納及び読み出しを制御する制御手段とを備え、
上記制御手段は、複数のフローが上記記憶手段に格納されているときの各フローを送信する順序を管理するために、各フロー毎に、当該フローの次に送信すべきフローのフロー情報を格納する第１の管理テーブルをさらに備え、送信すべき新たなフローが上記記憶手段に格納されたとき、上記新たなフローを、上記現在送信しているフローの前のフローの次の順序に指定するように上記第１の管理テーブルを更新することを特徴とする。
【００３２】
上記ルータ装置の出力ポート回路において、上記制御手段は、複数のフローが上記記憶手段に格納されているときの各フローを送信する順序を管理するために、各フロー毎に、当該フローの次に送信すべきフローのフロー情報を格納する第１の管理テーブルをさらに備え、送信すべき新たなフローが上記記憶手段に格納されたとき、上記新たなフローを、上記現在送信しているフローの前のフローの次の順序に指定するように上記第１の管理テーブルを更新することを特徴とする。
【００３３】
第４の発明に係るルータ装置の出力ポート回路は、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
上記出力ポート回路は、
送信すべきパケットを一時的に格納する記憶手段と、
上記記憶手段への上記パケットの格納及び読み出しを制御する制御手段とを備え、
上記記憶手段は所定のブロック長の複数のブロックに分割され、上記制御手段は、パケットを記憶したブロックの情報と、上記パケットを記憶したブロックの次に連結されるべきブロックの情報と対応づけて格納する第２の管理テーブルをさらに備え、各フローのパケットの連結状態を管理することを特徴とする。
【００３４】
上記ルータ装置の出力ポート回路において、上記記憶手段は所定のブロック長の複数のブロックに分割され、上記制御手段は、パケットを記憶したブロックの情報と、上記パケットを記憶したブロックの次に連結されるべきブロックの情報と対応づけて格納する第２の管理テーブルをさらに備え、各フローのパケットの連結状態を管理することを特徴とする。
【００３５】
第５の発明に係るルータ装置は、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置において、上記ルータ装置の出力ポート回路を備えたことを特徴とする。
【００３６】
第６の発明に係るルータ装置用出力ポート回路の制御方法は、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路の制御方法において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
送信すべきパケットを一時的に格納する記憶手段への上記パケットの格納及び読み出しを制御するステップと、
送信すべきパケットが属する各フローに対して上記記憶手段に格納可能なメモリサイズの基準となる基本量をそれぞれ割り当てるときに、帯域保証型クラスに属するパケットの各フローに対する基本量を、当該各フローが要求するメモリサイズだけ個別に割り当てて管理する一方、ベストエフォート型クラスに属するパケットの各フローに対する基本量を、上記記憶手段全体のメモリサイズから、上記帯域保証型クラスに割り当てられた各基本量の総和を減算したメモリサイズを一括して割り当てて管理するステップを含むことを特徴とする。
【００３７】
上記ルータ装置用出力ポート回路の制御方法において、ベストエフォート型クラス毎に、優先度とそのクラスに属するフローの本数との積を計算し、それらの積を、ベストエフォート型クラスの個数について総和を計算することにより、ベストエフォート型クラスにおける総優先度を計算し、受信されたパケットのフローが属するクラスの優先度を、上記計算した総優先度で除算することにより、当該受信されたパケットに対する基本量配分割合を計算し、上記計算した基本量配分割合とベストエフォート型クラス用基本量との積を計算することにより当該受信されたパケットのフローの基本量を計算するステップをさらに含むことを特徴とする。
【００３８】
第７の発明に係るルータ装置用出力ポート回路の制御方法は、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路の制御方法において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
送信すべきパケットを一時的に格納する記憶手段への上記パケットの格納及び読み出しを制御するステップと、
送信すべきパケットが属する各フローに対して上記記憶手段に格納可能なメモリサイズの基準となる基本量をそれぞれ割り当て、各フローの記憶手段における実際の使用量に基づいて、送信すべきパケットの当該フローの基本量に対する超過使用量を計算し、上記記憶手段を上記基本量に対して最も超過して使用しているフローのみのフロー情報とその超過使用量を管理するステップと、
所定のフローに属するパケットを受信したときに、管理している超過使用量よりも超過使用量が大きいフローが発生するとき、フロー情報及び超過使用量を新たに受信したパケットが属するフローのフロー情報及び超過使用量に更新するステップとを含むことを特徴とする。
【００３９】
上記ルータ装置用出力ポート回路の制御方法において、上記割り当てられた基本量を最も超過して使用しているフローに属するパケットが当該ルータ装置から送信されるときに、上記管理している超過使用量のみを当該フローの送信後の超過使用量に更新するステップをさらに含むことを特徴とする。
【００４０】
また、上記ルータ装置用出力ポート回路の制御方法において、各フローの記憶手段における実際の使用量に基づいて、送信すべきパケットの当該フローの基本量に対する超過使用量を計算し、上記記憶手段を上記基本量に対して最も超過して使用しているフローのみのフロー情報とその超過使用量を管理するステップと、
所定のフローに属するパケットを受信したときに、管理している超過使用量よりも超過使用量が大きいフローが発生するとき、フロー情報及び超過使用量を新たに受信したパケットが属するフローのフロー情報及び超過使用量に更新するステップとをさらに含むことを特徴とする。
【００４１】
さらに、上記ルータ装置用出力ポート回路の制御方法において、上記割り当てられた基本量を最も超過して使用しているフローに属するパケットが当該ルータ装置から送信されるときに、上記管理している超過使用量のみを当該フローの送信後の超過使用量に更新するステップをさらに含むことを特徴とする。
【００４２】
第８の発明に係るルータ装置用出力ポート回路の制御方法は、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路の制御方法において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
送信すべきパケットを一時的に格納する記憶手段への上記パケットの格納及び読み出しを制御するステップと、
各フロー毎に、当該フローの次に送信すべきフローのフロー情報を格納する第１の管理テーブルを用いて、複数のフローが上記記憶手段に格納されているときの各フローを送信する順序を管理し、送信すべき新たなフローが上記記憶手段に格納されたとき、上記新たなフローを、上記現在送信しているフローの前のフローの次の順序に指定するように上記第１の管理テーブルを更新するステップを含むことを特徴とする。
【００４３】
上記ルータ装置用出力ポート回路の制御方法において、各フロー毎に、当該フローの次に送信すべきフローのフロー情報を格納する第１の管理テーブルを用いて、複数のフローが上記記憶手段に格納されているときの各フローを送信する順序を管理し、送信すべき新たなフローが上記記憶手段に格納されたとき、上記新たなフローを、上記現在送信しているフローの前のフローの次の順序に指定するように上記第１の管理テーブルを更新するステップをさらに含むことを特徴とする。
【００４４】
第９の発明に係るルータ装置用出力ポート回路の制御方法は、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路の制御方法において、
連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、
送信すべきパケットを一時的に格納する記憶手段への上記パケットの格納及び読み出しを制御するステップと、
上記記憶手段は所定のブロック長の複数のブロックに分割され、パケットを記憶したブロックの情報と、上記パケットを記憶したブロックの次に連結されるべきブロックの情報と対応づけて格納する第２の管理テーブルを用いて、各フローのパケットの連結状態を管理するステップを含むことを特徴とする。
【００４５】
上記ルータ装置用出力ポート回路の制御方法において、上記記憶手段は所定のブロック長の複数のブロックに分割され、パケットを記憶したブロックの情報と、上記パケットを記憶したブロックの次に連結されるべきブロックの情報と対応づけて格納する第２の管理テーブルを用いて、各フローのパケットの連結状態を管理するステップをさらに含むことを特徴とする。
【００４６】
【発明の実施の形態】
以下、図面を参照して本発明の実施形態について説明する。
【００４７】
図１は、本発明の実施形態に係るルータ装置の構成を示すブロック図である。図１のルータ装置は、パケット交換網であるインターネットのためのルータ装置であり、当該ルータ装置は、複数Ｎ個の入力ポート回路１−１乃至１−Ｎ（総称して、入力ポート回路１という。）と、各入力ポート回路１に接続されたスイッチファブリック回路２と、スイッチファブリック回路２にそれぞれ接続された複数Ｎ個の出力ポート３−１乃至３−Ｎ（総称して、出力ポート３という。）と、スイッチファブリック回路２を制御するルーティングプロセッサ４とを備えて構成される。当該ルータ装置は、入力ポート回路１を介して受信されたパケットをスイッチファブリック回路２により各出力ポート回路３を介して各隣接するノードにルーティングして送信し、ここで、連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、出力ポート回路３は、特に、送信すべきパケットを一時的に格納するバッファメモリ１３と、バッファメモリ１３へのパケットの格納及び読み出しを制御する出力ポートコントローラ２０とを備えたことを特徴としている。
【００４８】
図１において、入力ポート回路１は、入力パケットがまず到着する回路であり、以下の３つの機能を有する。まず第１に、各到着パケットに対し最長プリフィックス一致（ＬＰＭ）検索を行うことである。ＬＰＭ検索とはＩＰヘッダに含まれる目的地アドレスから次ホップを決定するために行われるテーブル検索処理である。第２に、ＱｏＳを保証するために、パケットをあらかじめ定義されたサービスクラスに分類することである。第３に、データリンクレイヤのプロトコル処理を実行する。そのプロトコルとして、ＳＬＩＰ（シリアル回線インターネットプロトコル）、ＰＰＰ（ポイント・ツー・ポイント・プロトコル）、ＰＰＴＰ（ポイント・ツー・ポイント・転送プロトコル）などが利用可能である。
【００４９】
図１の各入力ポート回路１においては、到着パケットは高速パスコントローラ１ａに入力され、到着パケットのうち高速で処理する必要があるクラスのパケットは高速パスコントローラ１ａによってすぐに、パケットを時間分割多重化するマルチプレクサ１ｄを介してスイッチファブリック回路２に出力される。一方、到着パケットのうち高速で処理する必要がないクラスのパケットは低速パス用のキューメモリ１ｂに分岐して出力され、キューメモリ１ｂはパケットを一時的に待ち行列として格納する。次いで、低速コントローラ１ｃは、キューメモリ１ｂに格納されたパケットを順次読み出してマルチプレクサ１ｄを介してスイッチファブリック回路２に出力する。
【００５０】
次いで、スイッチファブリック回路２は、各入力ポート回路１から入力されるパケットを、ルーチングプロセッサ４の制御により所定のルーチィング規準を用いて、各隣接するノードにリンクを介して接続された各出力ポート回路３に出力する。すなわち、スイッチファブリック回路２は入力ポート回路１と出力ポート回路３を接続する機能を有する。スイッチファブリック回路２の技術として現在使用されているものに、バス型、クロスバ型、共有メモリ型があって、これらのうちから適宜に選択することができる。ルーティングプロセッサ４は、フォワーディングテーブルの検索、ルーティングプロトコルの実装、そしてルータ装置の設定や管理のためのソフトウェア実行を行っている。また、ルーティングプロセッサ４は、フォワーディングテーブルにエントリされていないあて先アドレスをもったパケットの処理などを実行する。
【００５１】
各出力ポート回路３は、ルート検索により入力ポート回路１からスイッチファブリック回路２を介して転送されてきたパケットをリンクに出力するまでの間一時的に格納し、リンク出力に関するスケジューリングを行う機能を有する。出力ポート回路３には、優先権やＱｏＳ保証をサポートするための洗練されたスケジューリングアルゴリズムが実装されている。そのスケジューリングアルゴリズムとして、例えば当業者に公知のＷＲＲ（重み付けラウンドロビン）や、ＷＦＱ（重み付け均等キューイング）が利用可能である。
【００５２】
図１に示すように、各出力ポート回路３は、ヘッダ情報取得部１１と、一時的パケット格納メモリ１２と、バッファメモリ１３と、パケット送信部１４と、出力ポートコントローラ２０とを備えて構成される。出力ポート回路３は、特に、複数のフローキューメモリ１３ａ，１３ｂを備えたバッファメモリ１３における到着パケットの入出力を制御するための出力ポートコントローラ２０を備えたことを特徴としている。
【００５３】
図１の出力ポート回路３において、ヘッダ情報取得部１１は、まず、スイッチファブリック回路２から到着したパケットのヘッダ情報を読み取り、読み取ったヘッダ情報の信号を出力ポートコントローラ２０に出力するとともに、到着パケットを、一時的パケット格納メモリ１２に一時的に記憶させる。出力ポートコントローラ２０は、パケットが到着した場合、到着パケットのヘッダ情報の信号のみを入力データとしてバッファメモリ１３における到着パケットの格納場所を演算し、上記格納場所を示す信号を一時的パケット格納メモリ１２に出力する。また、パケットを送信する場合は、出力ポートコントローラ２０は、パケット送信部１４からサービス要求信号（すなわち、送信要求信号）を入力されることによって、バッファメモリ１３のどの位置のパケットを送信すべきかを演算し、この演算結果をパケット送信部１４に出力する。一時的パケット格納メモリ１２は、出力ポートコントローラ２０から格納場所を示す信号が入力されると、当該一時的パケット格納メモリ１２からパケットを読み出して、バッファメモリ１３内の演算された格納場所に当該パケットを格納する。バッファメモリ１３はパケットを格納しておくためのメモリである。ここで、到着パケットは、バッファメモリ１３に格納されるとき、当該パケットが属する異なるフロー毎に区別して格納されることが可能であり、図１では、バッファメモリ１３内のフローキューメモリ１３ａ，１３ｂ，…に格納されるものとして仮想的に図示している。一時的パケット格納メモリ１２は、出力ポートコントローラ２０からの格納場所の信号に基づいてフロー毎に、到着パケットをフローに対応したフローキューメモリ１３ａ，１３ｂ，…に格納する。
【００５４】
本実施形態において、バッファメモリ１３は、図３を参照して詳細後述するように、予め複数のブロックに細分化され、任意のフローを格納するために任意のブロックが割り当てが可能である。パケット送信部１４は、出力ポートコントローラ２０に対してサービス要求信号を出力し、これに応答して出力ポートコントローラ２０によって演算された、送信すべきパケットの格納場所情報に基づいて、バッファメモリ１３よりパケットを読み出し、そのパケットをリンクを介して隣接ノードに送信する。
【００５５】
以上のように構成されたルータ装置において、ＱｏＳ保証を実現するためには、トラヒックが集中する出力ポート回路３内のバッファメモリ（図２を参照）においてＱｏＳ制御機構を実装することが現実的である。そこで、本実施形態は、基本量配分、プッシュアウト機構及び階層的ＷＲＲの３つの機能の連携により動作することを特徴とするルータ装置の出力ポート回路を提供する。本実施形態は、特に、フロー管理によるクラス別品質制御方法に係る処理を実行可能なルータ装置の出力ポート回路を提供することを特徴している。本実施形態では、管理方法の実装容易性を考慮して、フローを「出力ポート回路３のバッファメモリ内に存在する同種のパケット群」と定義する。つまり、出力ポート回路３は、バッファメモリ１３内でそのフローに属する種類のパケットが一時的にでもゼロになると、当該フローが消滅したと認識する。以上より、管理可能なフロー数は多くともバッファメモリ領域の大きさに等しくなり、実装が容易となる。また、タイマを用いる必要もなくなる点から有利であると言える。以下、上記３つの機能の詳細を具体例を用いて説明する。
【００５６】
図２は、図１の出力ポート回路３の詳細な構成を示すブロック図である。以下、バッファメモリ１３を管理するための、出力ポートコントローラ２０内の各機能ブロックについて説明する。出力ポートコントローラ２０内で計算処理部として機能する部分は、主要な部分として、プッシュアウト対象ブロック決定部１５と、格納ブロック決定部１６と、格納場所決定部１７と、スケジューラ１８とを備えている。また、出力ポートコントローラ２０は、それぞれ異なるデータを格納管理して処理するための、空き領域管理部２１と、格納場所管理部２２と、フロー管理部２３と、クラス管理部２４と、ポート管理部２５と、前サービスフロー管理部２６と、前サービスクラス管理部２７と、ＷＲＲフロー順管理部２８と、ＷＲＲクラス順管理部２９と、ＷＲＲポート順管理部３０とをさらに備えている。
【００５７】
パケットが到着すると、到着パケットは、ヘッダ情報取得部１１を介して一時的パケット格納メモリ１２に一時的に格納されるとともに、到着パケットのヘッダ情報がヘッダ情報取得部１１で取得されて、この取得されたヘッダ情報の信号のみが、プッシュアウト対象ブロック決定部１５、格納ブロック決定部１６及び格納場所決定部１７に出力される。プッシュアウト対象ブロック決定部１５は、このヘッダ情報と、フロー管理部２３及びクラス管理部２４に記憶されたデータとに基づいて、廃棄されてもよいフロー（以下、プッシュアウト対象フローという。）に属するパケットを格納したバッファメモリ１３内のブロック（以下、プッシュアウト対象ブロックという。）のブロック番号を、格納場所決定部１７に出力する。また、格納ブロック決定部１６は、ヘッダ情報と空き領域管理部２１に記憶されたデータとに基づいて、到着パケットを格納するブロックを決定する。さらに、格納場所決定部１７は、プッシュアウト対象ブロック決定部１５と格納ブロック決定部１６から入力される信号に基づいて、到着パケットの格納又は廃棄を命令する信号を一時的パケット格納メモリ１２に出力するとともに、各管理部２１乃至３０内のデータを更新する。
【００５８】
一時的パケット格納メモリ１２は、格納場所決定部１７からの信号に基づいて到着パケットをバッファメモリ１３に書き込むか、又は廃棄する。一時的パケット格納メモリ１２は、到着パケットをバッファメモリ１３に書き込む場合、プッシュアウト対象フローの先頭パケットを格納したブロックに到着パケットを書き込むが、ここでフローの先頭パケットを格納したブロックを選択する理由は、ＴＣＰ等の廃棄を検知するプロトコルを使用している場合に、パケット廃棄の早期検出につながる利点があるからである。
【００５９】
パケットサービスフェーズになると、パケット送信部１４は、スケジューラ１８にサービス要求信号を送信することによってスケジューラ１８を起動し、次いで、スケジューラ１８は各管理部２１乃至３０を参照して、到着パケットの格納場所及び送信パケットを決定し、この格納場所及び送信パケットについてのデータをパケット送信部１４に戻す。パケット送信部１４は、スケジューラ１８が指定したアドレスに格納されているデータをバッファメモリ１３から読み出し、ブロックに分割されていたパケットを復元した後、復元されたパケットをリンクに転送する。
【００６０】
実施形態において、出力ポートコントローラ２０は、好ましくは、１個の集積回路チップで構成され、パケット到着における入力信号（すなわちヘッダ情報の信号）と、パケット送信における入力信号（すなわちサービス要求信号）とを受信し、それに応答してブロック番号を決定して出力する。このとき、すべての管理部２１乃至３０は出力ポートコントローラ２０内に実装可能である。
【００６１】
図３は、実施形態に係るバッファメモリ１３のブロック化を説明するための概略説明図である。図３において、図３（ａ）は図１の出力ポート回路３への到着パケットを示す図であり、図３（ｂ）は図２のバッファメモリ１３のメモリ空間を示す図であり、図３（ｃ）は出力ポート回路３からの送信パケットを示す図である。
【００６２】
本実施形態のルータ装置において、出力ポートコントローラ２０は、パケットが出力ポート回路３内のどのバッファメモリ位置に格納されたかを管理するときに、バッファメモリ１３を、図３（ｂ）に示すように予め複数の固定サイズＬのブロックに細分化して格納管理する。バッファメモリ１３内のアドレスは、細分化されたブロックのブロック番号として管理される。到着パケットはこのブロックのサイズ（すなわち、固定サイズＬ）に分割して格納される。ブロックのサイズに満たない部分には図３（ａ）に示すように空データを付与し、他のデータを格納することを行わない。付与された空データは、図３（ｃ）に示すように送信時に除去される。以上のように格納管理することにより、格納場所管理部２２は、バッファメモリ１３内のブロック数に等しい行数を有する管理テーブルを用意するだけでよい。また、バッファメモリ１３の空き領域管理もブロック毎の管理となるため、パケット到着時の空きブロック検索処理も高速化することができる。
【００６３】
このようにバッファメモリ１３をブロック化することによって、本実施形態に係るルータ装置は、インターネットを流れる可変長パケットを処理するときに性能低下するような状況が防止される。出力ポートコントローラ２０は、バッファメモリ１３のパケットの格納状況を管理するために、各パケットを格納するブロック番号（ブロックの位置を表す。）と、複数個のパケットにてなるフローを記憶する複数のブロック間の連結状態とを示すための管理テーブルを備えたことを特徴としている。
【００６４】
以下、図２の出力ポートコントローラ２０がバッファメモリ１３を管理するために必要な管理テーブルの概要について説明する。
【００６５】
図４は、図２の空き領域管理部２１によって管理される空き領域管理テーブルＴ１の概略構成の一例を示す図であり、図５は、図４の空き領域管理テーブルＴ１を用いた空き領域管理を説明するための概略説明図である。
【００６６】
図４に示すように、空き領域管理テーブルＴ１は、バッファメモリ１３内のあるブロックのブロック番号に対する次のブロック番号を格納し、ここで、次のブロック番号とは、空きブロックの連結状態を示す。図４の例では、ブロック番号２、３及び５をそれぞれ有するブロック２、３及び５は空きブロックである。図４の空き領域管理テーブルＴ１において、ブロック番号１に対応する次のブロック番号は「−１」を示している。これは、ブロック１は使用中であることを意味している。また、空き領域管理部２１はまた、空き領域管理テーブルＴ１とは別に、先頭の空きブロック番号と最後尾の空きブロック番号とを格納して管理する。これにより、パケット到着時における空きブロック検索時には、先頭の空きブロック番号を出力することにより、また、パケット送信時には最後尾の空きブロック番号の値を変更することにより、空きブロックをリストとして格納して管理することが可能となる。
【００６７】
以上に述べた空き領域のブロック管理の概略説明図を図５に示す。これは、ブロック２を先頭ブロックとし、ブロック３５を最後尾ブロックとする、一連の空きブロックがバッファメモリ１３内に存在する場合の例である。ただし、空き領域管理部２１は、先頭ブロックのブロック番号と最後尾ブロックのブロック番号とを、空き領域管理テーブルＴ１とは別に格納して管理する。
【００６８】
図６は、図２の格納場所管理部２２によって管理される格納場所管理テーブルＴ２の概略構成の一例を示す図であり、図７は、図６の格納場所管理テーブルＴ２を用いた格納場所管理を説明するための概略説明図である。
【００６９】
図６に示すように、格納場所管理テーブルＴ２は、各ブロック番号に対する次のブロック番号を格納し、ここで、次のブロック番号とは、各フローにおけるブロックの連結状態を示す。図６の例では、ブロック番号１、３及び８をそれぞれ有するブロック１、３及び８は、あるフローにおけるデータの到着順を示している。また、次のブロック番号の値が「−１」であるブロック（例えば、ブロック４及び８）は、当該ブロックが含まれるフロー内において当該ブロック自体が最後尾ブロックであり、その次のブロックとしてのデータが格納されていないことを示す。パケット到着時には、格納場所管理部２２は、パケットの属するフローにおける最後尾ブロック番号の値を取得し、そのブロック番号に対する次のブロック番号を変更することにより、データの連結状態を管理することが可能となる。また、パケット送信時にはフローの先頭ブロック番号を取得し、そのブロック番号に対する次のブロック番号を新たなフロー先頭ブロック番号とすることによりフローの管理を行う。
【００７０】
以上に述べた格納場所のブロック管理の概略説明図を図７に示す。図７の例では、ブロック１を先頭とするフローＡと、ブロック２を先頭とするフローＢとが図示されているが、格納場所管理部２２は、ブロックを含むフローについての情報は管理せず、そのような情報（例えば、図７に示された各フローＡ及びＢの先頭ブロック及び最後尾ブロックについての情報）は、フロー管理部２３によって格納されて管理される。
【００７１】
図８は、図２のフロー管理部２３によって管理される帯域保証型クラスに属するフローのためのフロー管理テーブルＴ３の概略構成の一例を示す図であり、図９は、図８のフロー管理テーブルＴ３を用いた先頭ブロック及び最後尾ブロックの管理を説明するための概略説明図である。
【００７２】
図８に示すように、フロー管理テーブルＴ３は、あるクラスに含まれる各フローの基本量、使用量、先頭ブロック番号、最後尾ブロック番号、及び優先度の５つの値を格納して管理する。まず第１に、基本量は、フローに割り当てられたバッファメモリ量を、バッファメモリ１３のブロック長Ｌを単位として示し、そのバッファメモリ量を超えて使用しない限り、当該フローは他のフローに悪影響を及ぼしていないと判断される。各フローが帯域保証型クラスに含まれるフローであるときは、図８に示すようにフロー毎に異なる値の基本量が割り当てられる一方、各フローがベストエフォート型クラスに含まれるフローであるときは、クラスに割り当てられた基本量が、そのクラスに含まれるフローの間で等分される。次に、使用量とは、当該フローが実際に使用しているバッファメモリ量（ただし、ブロック長Ｌを単位とする。）を示す。先頭ブロック番号とは、当該フローにおいて最も先に到着したデータ（すなわち、このデータを含むパケットを記憶したバッファメモリ１３内のブロック）を示し、当該フローのパケットがサービスされるとき、この先頭ブロック番号を有するブロックに格納されているデータが最初にバッファメモリ１３より読み出される。最後尾ブロック番号とは、当該フローにおいて最も新しく到着したデータ（すなわち、このデータを含むパケットを記憶したバッファメモリ１３内のブロック）を含むブロックを示し、当該フローにおいて次にデータ到着があった場合、そのデータのパケットを記憶するためのブロックは、この最後尾ブロック番号を有するブロックに対して、格納場所管理テーブルＴ２の次のブロック番号を用いて連結される。つまり、格納場所管理テーブルＴ２の更新を行うとき、最後尾ブロック番号が読み出され、格納場所管理テーブルＴ２の更新に使用される。最後に、優先度は、基本量を配分するときと、ＷＲＲにおいてサービス順を決定するときに用いられる値である。各フローが帯域保証型クラスに含まれるフローであるときは、図８に示すようにフロー毎に異なる値の優先度が割り当てられる一方、各フローがベストエフォート型クラスに含まれるフローであるときは、当該フローを含むクラスの優先度が当該フローの優先度として用いられる。
【００７３】
以上説明した先頭ブロック管理と最後尾ブロック管理の概略説明図を図９に示す。前述したように、フロー管理テーブルＴ３は、各フローの先頭ブロックと最後尾ブロックとを格納して管理するために用いられ、フロー内の各ブロックの順序は格納場所管理テーブルＴ２を用いて管理される。
【００７４】
図１０は、図２のクラス管理部２４によって管理されるクラス管理テーブルＴ４の概略構成の一例を示す図である。図１０に示すように、クラス管理テーブルＴ４は、あるポートに含まれる各クラスの基本量、使用量、フロー数、及び優先度の４つの値を格納して管理する。基本量、使用量、優先度はフロー管理テーブルＴ３における値と同様である。フロー数とは、当該クラスに存在するフロー数を示し、ベストエフォート型クラスにおいてフローに対する基本量を演算する場合に使用される。
【００７５】
図１１は、図２のポート管理部２５によって管理されるポート管理テーブルＴ５の概略構成の一例を示す図である。図１１に示すように、ポート管理テーブルＴ５は、各ポートの基本量、使用量、クラス数、及び優先度を格納して管理する。ここで、クラス数とはフローが存在するクラスの数を示す。また、優先度としては、ルータ装置の出力回線速度に比例した値が格納される。
【００７６】
図１２は、図２のＷＲＲフロー順管理部２８によって管理されるＷＲＲフロー順管理テーブルＴ６の概略構成の一例を示す図であり、図１３は、図１２のＷＲＲフロー順管理テーブルＴ６を用いたサービスフロー順の管理を説明するための概略説明図である。
【００７７】
図１２に示すように、ＷＲＲフロー順管理テーブルＴ６は、あるフローＩＤに対し次にサービスすべきフローのフローＩＤを格納して管理する。図１２の例では、フローＩＤ１、３及び４をそれぞれ有するフロー１、フロー３及びフロー４は、「フロー１→フロー３→フロー４→フロー１…」の順番で繰り返しサービスされることになる。また、フロー２の次にサービスされるフローのＩＤは５であり、フロー２及び５は、フロー１、３及び４とは違うクラスに属するフローであるといえる。同様のテーブルをクラス、ポートに対して用意することにより、階層的ＷＲＲを実現することが可能となる。すなわち、複数のクラスをサービスする順序を決定するためのＷＲＲクラス順管理テーブルがＷＲＲクラス順管理部２９に提供され、複数のポートをサービスする順序を決定するためのＷＲＲポート順管理テーブルがＷＲＲポート順管理部３０に提供される。
【００７８】
ＷＲＲフロー順管理テーブルＴ６を用いたサービス順管理の概略説明図を図１３に示す。上述のように、ＷＲＲフロー順管理テーブルＴ６は、フロー１、フロー３及びフロー４が構成するループについての情報を保持する。図１３に示すように、現在サービスしているフローがフロー３であるとき、「前のサービスフロー」（すなわち、フロー１のフローＩＤ）と「残りのサービス回数」とは、詳細後述するように、前サービスフロー管理部２６によって管理されているが、現在フロー３をサービスしているということについての情報は出力ポートコントローラ２０によって管理されない。
【００７９】
図１４は、図２の前サービスフロー管理部２６によって管理される前サービスフロー管理テーブルＴ７の概略構成の一例を示す図である。図１４に示すように、前サービスフロー管理テーブルＴ７は、各クラスのクラスＩＤ毎に前サービスフローＩＤと残りサービス回数を格納して管理する。サービスを開始する場合は、前サービスフロー管理部２６は、当該クラスでの前サービスフローＩＤを出力し、そのフローＩＤに基づいてＷＲＲフロー順管理テーブルＴ６を用いて次にサービスすべきフローのフローＩＤを出力する。残りサービス回数は、現在サービスしているフローを連続してサービスする回数を示し、残りサービス回数が０になると前サービスフロー管理部２６は前サービスフローＩＤを更新する。管理する値として、現在サービスしているフローのフローＩＤではなく前サービスフローＩＤを使用する理由は、当該クラスにおいて新しくフローが到着した場合、ＷＲＲフロー順管理テーブルＴ６において前サービスフローの次にフローを登録することにより、現在サービスされているフローは連続してサービスすることが可能となるためである。
【００８０】
この前サービスフロー管理の概略説明図、並びに新規フロー発生時におけるデータ更新処理を図１５に示す。すなわち、図１５は、図１４の前サービスフロー管理テーブルＴ７を用いたサービスフロー順の管理を説明するための概略説明図であり、図１５（ａ）は新規のフローが発生したときの前サービスフロー管理を示す図であり、図１５（ｂ）は図１５（ａ）の後のデータ更新処理を示す図である。
【００８１】
図１５（ａ）の例において、現在のサービスフローがフロー３であり、かつ前のサービスフローがフロー１であるとき、フローＩＤ「７」を有する新規の到着フローが発生したならば、図１５（ｂ）に示すように、前サービスフローであるフロー１の次にフロー７を挿入して、前サービスフローＩＤを到着フローのフローＩＤ「７」に更新するともに、ＷＲＲフロー順管理テーブルＴ６のデータを「フロー１→フロー７→フロー３→フロー４→フロー１→…」となるように更新する。ここで、前述のように、前サービスフロー管理部２６は「前のサービスフロー」と「残りのサービス回数」とを格納して管理しているが、現在フローのフローＩＤは管理されない。
【００８２】
従って、出力ポートコントローラ２０は、送信される新たなフローが上記バッファメモリに格納されたとき、上記新たなフローを、上記現在送信しているフローの前のフローの次の順序に指定するようにＷＲＲフロー順管理テーブルＴ６のデータを更新する。
【００８３】
以上説明した前サービスフロー管理テーブルＴ７と同様に、前サービスクラス管理部２７は、各ポートのポートＩＤ毎に前サービスクラスＩＤと残りサービス回数とを格納して管理するための、前サービスクラス管理テーブルを備えている。
【００８４】
次いで、基本量の管理方法について以下に説明する。
【００８５】
図１６は、図２のバッファメモリ１３の記憶領域を、帯域保証型（ＢＧ）クラスのフローと、ベストエフォート型（ＢＥ）クラスのフローとの間で分配する方法を説明するための概略説明図である。本実施形態ではフロー毎に基本量の管理を行う。帯域保証型クラスのフローに配分される基本量は、そのフローの優先度に従い固定値を取る。ベストエフォート型クラスのフローに配分される基本量（以下、ベストエフォート型クラス用基本量という。）は、バッファメモリの全メモリ容量である全バッファ量から帯域保証型クラスのフローに配分された基本量の総和を減算した残りバッファ量を、各フローの優先度に従って配分する。つまり、ベストエフォート型クラスのフローに対する基本量は新しいフローの発生、並びにフローの消滅によって変動することとなる。
【００８６】
フロー数が変化する毎に全フローの基本量を再計算していては、ルータ装置の処理速度が極度に小さくなるので、本実施形態においては、基本量の管理を図１６に示すように行う。まず、帯域保証型クラスのフローに対しては、基本量は優先度に応じて固定であるためフロー毎の管理を行う。ベストエフォート型クラスのフローに対しては、フローの本数により基本量が変動するため、ベストエフォート型クラス用基本量として、全バッファ量から帯域保証型クラスに配分された基本量の総和を減算した量のみを格納して管理する。上記のように格納管理することにより、帯域保証型クラスのフローが発生するか又は消滅した場合は、そのフローの基本量とベストエフォート型クラス用基本量を変更するのみでよい。一方、ベストエフォート型クラスのフローが発生するか又は消滅した場合は、基本量の変更を行う必要はない。ただし、超過使用量を演算する際には基本量が必要となるため、その度に基本量の演算を行う必要があり、その演算式を次式に示す。
【００８７】
【数５】
0003643827.tif 000004
【００８８】
【数６】
0003643827.tif 000005
【００８９】
ここで、ベストエフォート型フローに対しては、前述のように、フローの優先度と当該フローを含むクラスの優先度とを同一の値として格納して管理している。
【００９０】
あるベストエフォート（ＢＥ）型の到着フローに対する基本量を演算するためには、まず、ベストエフォート型クラス毎に優先度とそのクラスに属するフローの本数との積を計算し、それらの積を、ベストエフォート型クラスの個数について総和することにより、ベストエフォート型クラスにおける総優先度が演算される。到着フローが属するクラスの優先度（これは、到着フローの優先度に等価である。）を、演算された総優先度で除算することにより、到着フローに対する基本量配分割合が決定される。基本量配分割合とベストエフォート型クラス用基本量との積を計算することにより、到着フローの基本量を演算することができる。
【００９１】
従って、出力ポートコントローラ２０は、帯域保証型クラスに含まれる各フローに対する基本量を、当該各フローが要求するメモリサイズだけ個別に割り当てかつ個別に管理し、ベストエフォート型クラスに含まれる各フローに対する基本量を、バッファメモリ全体のメモリサイズから上記帯域保証型クラスに割り当てられた各基本量を減算したメモリサイズを一括して割り当てかつ一括して格納して管理することができる。
【００９２】
次いで、最超過クラス及び最超過フローの管理方法について以下に説明する。
【００９３】
バッファメモリ１３がフルの状態においてパケットが到着した場合、その到着パケットが属するフローが基本量を超過使用していなければ、他のフローのパケットをプッシュアウトすることができる。そのプッシュアウトの対象となるフローは、最も基本量を超過使用しているフロー（以下、最超過フローという。）である。パケット到着時に高速にプッシュアウト対象フローを決定するためには、クラスの基本量を最も超過使用している最超過クラスを予め管理し、かつクラス毎に最超過フローを格納して管理しておく必要がある。
【００９４】
全フローの超過使用量をチェックして、最も超過しているフローを決定するという手法では、定期的に動作させるとしても処理時間が膨大になってしまうので、本実施形態では、最超過クラスと最超過フローの管理を図１７及び図１８に示すように行う。なお、ここで用いる最超過フロー管理テーブルＴ８は、図１９に示すように、フローＩＤ毎に超過使用量を格納している。
【００９５】
図１７は、図２の格納場所決定部１７によって実行される、パケット到着時における最超過フローの管理処理を示すフローチャートである。まず、パケットが到着した時に、ステップＳ１において、到着パケットのヘッダ情報を取得し、ステップＳ２において、到着したパケットが属するフローの超過使用量と、最超過フロー管理テーブルＴ８に格納して管理している最超過フローの超過使用量とを比較する。ここで、到着フローの方が大きい場合（ステップＳ２がＹＥＳのとき）は、ステップＳ３において、最超過フロー管理テーブルＴ８に記憶されたフローＩＤを更新し、次いで、ステップＳ４において、最超過フロー管理テーブルＴ８に記憶された超過使用量を更新して当該管理処理を終了する。逆に、最超過管理テーブルＴ８のフローの方が大きい場合（ステップＳ２がＮＯのとき）は、管理データを変更せずに当該管理処理を終了する。
【００９６】
図１８は、図２のスケジューラ１８によって実行される、パケット送信時における最超過フローの管理処理を示すフローチャートである。まず、ステップＳ１１において、所定数のパケットにてなるフローを送信し、次いで、ステップＳ１２において、送信したパケットが属するフローのフローＩＤと、最超過フロー管理テーブルＴ８に格納して管理している最超過フローのＩＤとが一致するか否かを判断し、一致しているとき（ステップＳ１２がＹＥＳのとき）、ステップＳ１３で最超過フロー管理テーブルＴ８に格納して管理している最超過フローの超過使用量を更新して当該管理処理を終了する。一方、フローＩＤが一致しない場合（ステップＳ１２がＮＯのとき）は、管理データを変更せずに当該管理処理を終了する。上記の方法により、全フローの超過使用量のチェックを行う必要がなくなる。
【００９７】
図１９は、図２のクラス管理部２４によって管理される最超過フロー管理テーブルＴ８を用いた最超過フロー管理を説明するための概略説明図であり、最超過フローの管理の動作を、図１９に示す例を用いて具体的に説明する。
【００９８】
クラス管理部２４は、最超過フロー管理テーブルＴ８を用いて、最も大きい超過使用量を有するフローのフローＩＤとその超過使用量（ただし、バッファメモリ１３内のブロック長Ｌを単位とする。）とを格納して管理する。図１９（ａ）は初期状態の（ａ１）最超過フロー管理テーブルＴ８と（ａ２）フロー毎の超過使用量の現在の状態とを示す図であり、ここで、最超過フロー管理テーブルＴ８は、フロー１が最超過フローであり、その超過使用量が１２であることを示している。次いで、図１９（ｂ）は、図１９（ａ）の状態からパケットサイズが２であるフロー３が到着したときの（ｂ１）最超過フロー管理テーブルＴ８と（ｂ２）フロー毎の超過使用量の現在の状態とを示す図である。到着パケットサイズは２であるため、フロー３の超過使用量は１３となる。クラス管理部２４は、この値と、格納管理している最超過フロー１の超過使用量の値を比較し、この場合到着フロー３の超過使用量の方が大きいので、最超過フロー管理テーブルＴ８の管理データを、フローＩＤが３でありかつ超過使用量が１３であるように変更する。そして、図１９（ｃ）はパケットサイズが２であるフロー３を送信したときの（ｃ１）最超過フロー管理テーブルＴ８と（ｃ２）フロー毎の超過使用量の現在の状態とを示している。送信したフローのフローＩＤと、最超過フロー管理テーブルＴ８に管理されているフローＩＤとが一致するので、クラス管理部２４は、格納して管理している超過使用量の値を変更する。このとき、最超過フローのフローＩＤが正しく管理されていない状態が発生する。しかし、パケットを送信した時点における管理テーブルの状態であるため必ずバッファメモリ１３に空きが存在すること、さらに管理されているフローは超過使用をしていることから、本ルータ装置のパケット送受信性能には影響を及ぼさないと考えられる。さらに、図１９（ｄ）はパケットサイズが２であるフロー１が到着したときの（ｄ１）最超過フロー管理テーブルＴ８と（ｄ２）フロー毎の超過使用量の現在の状態とを示す図である。到着フローの超過使用量は管理されている超過使用量を超えているので管理データは変更され、最も超過しているフローの管理が正常に行われている状態になる。
【００９９】
従って、出力ポートコントローラ２０は、所定のフローに属するパケットが到着することによって、格納して管理している超過使用量よりも超過使用量が大きいフローが発生するとき、フローＩＤ及び超過使用量を新たに到着したパケットが属するフローのフローＩＤ及び超過使用量に更新し、基本量を最も超過して使用しているフローに属するパケットが当該ルータ装置から送信されるとき、格納して管理している超過使用量のみを当該フローの送信後の超過使用量に更新することができる。
【０１００】
本実施形態において、以上のように最超過フローを管理してプッシュアウト対象パケットを検索するとき、帯域保証型クラスに対してはその帯域分の基本量を保証してさえおけば他のフローの影響を受けることはなくなる。また、他のポートに属するフローが予想外の動作を行ったとしても、基本量配分の効果によりその影響を最小限に抑えることが可能となる。さらにバッファメモリ１３を複数のポートで共有することで、不均質なトラヒックに対するスループット向上の効果が期待できる。特に、本実施形態のプッシュアウト機構は、パケットの優先権を予め決めておく方法とは異なり、基本量を超えて使用している量に従って動的に優先権が変化するものである。
【０１０１】
次に、本発明の実施形態に係るより具体的な実施例について説明する。以下では、簡単化のために、複数個のポートは管理せず、複数個のクラスと複数個のフローのみを格納して管理するものとするが、本実施形態は、複数個のポートが存在する場合でも同様に実施可能であることは理解されると考えられる。なお、この簡単化のために、ポート管理部２５とＷＲＲポート順管理部３０の動作を以下の説明では取り上げない。
【０１０２】
図２０は、格納場所決定部１７の詳細構成と格納場所決定処理のフローとを示すブロック図である。図２０に示すように、格納場所決定部１７は、セレクタ３５と、後処理用前置処理部３６と、パケット格納用後処理部３７とを備えて構成される。
【０１０３】
図２０を参照して、到着パケットに対する格納場所決定処理の流れを説明する。出力ポートコントローラ２０に到着パケットのフローＩＤ等のヘッダ情報がヘッダ情報取得部１１から入力されると、プッシュアウト対象ブロック決定部１５によってプッシュアウト検索が開始され、それと同時に格納ブロック決定部１６によって格納場所検索が開始される。プッシュアウト検索において、プッシュアウト対象ブロック決定部１５は、ヘッダ情報と、フロー管理部２３及びクラス管理部２４内のデータとを参照して、到着フローがバッファメモリ１３中の余分なデータを廃棄する（プッシュアウトする）場合における、プッシュアウト対象ブロックのブロック番号を出力する。プッシュアウト対象ブロック決定部１５は、さらに、到着パケットの属するフローの使用量が基本量を超えているか否かを決定し、その超過使用量のデータを出力する。また、格納場所検索において、格納ブロック決定部１６は、ヘッダ情報と空き領域管理部２１内のデータとを参照し、バッファメモリ１３に空き領域が存在する場合、到着フローがプッシュアウトをせずに格納されるブロックのブロック番号を出力する。一方、バッファメモリ１３がフルの場合は、格納ブロック決定部１６は、プッシュアウト要求を表す特別な値を、プッシュアウト要求信号として出力する。
【０１０４】
セレクタ３５は、プッシュアウト検索と格納場所検索による結果を参照し、バッファメモリ１３に空き領域が存在する場合には格納ブロック決定部１６の出力するブロック番号を選択し、バッファメモリ１３に空き領域が存在せず、格納ブロック決定部１６がプッシュアウト要求信号を出力した場合には、プッシュアウト対象ブロック決定部１５が出力するブロック番号を選択する。セレクタ３５は、さらに、バッファメモリ１３に空き領域が存在せず、到着パケットの属するフローの超過使用量が正数である場合、到着パケットの廃棄を選択する。後処理用前置処理部３６は、ヘッダ情報と、フロー管理部２３内のデータとに基づいて、最超過フロー超過使用量を決定する。セレクタ３５において格納ブロック番号が決定されると、パケット格納用後処理部３７は、ヘッダ情報と、セレクタ３５及び後処理用前置処理部３６からの出力信号とに基づいて、後処理として各管理部２１乃至２４と２６乃至２９内のデータを更新するとともに、バッファメモリ１３中で到着パケットを記憶するブロックのブロック番号を示す信号、又は到着パケットの廃棄を命令する信号を一時的パケット格納メモリ１２に出力して、一時的パケット格納メモリ１２内のパケットをバッファメモリ１３内の当該ブロックに記憶させるか、又は当該パケットを廃棄する。
【０１０５】
図２１は、図２０のパケット格納用後処理部３７の詳細構成を示すブロック図である。図２１において、コントローラ４２には、超過使用クラス演算回路４３と、超過使用フロー演算回路４４と、サービスクラスチェック回路４５と、サービスフローチェック回路４６と、ＢＥクラス基本量演算回路４７と、優先度演算回路４８と、最超過クラス超過使用量レジスタＲ１と、新管理クラスレジスタＲ２と、新管理クラス超過使用量レジスタＲ３と、新管理フローレジスタＲ４と、新管理フロー超過使用量レジスタＲ５とが接続されている。コントローラ４２は、上記接続された内部回路４３乃至４８及びレジスタＲ１乃至Ｒ５と、外部回路との間で入出力インターフェース４１を介してデータを入出力するように制御する。
【０１０６】
図２１において、最超過クラス超過使用量レジスタＲ１は最超過クラスの超過使用量を格納し、新管理クラスレジスタＲ２は最超過クラスのクラスＩＤを格納し、新管理クラス超過使用量レジスタＲ３は最超過クラスのクラス使用量を格納する。また、新管理フローレジスタＲ４は到着クラス内の最超過フローのフローＩＤを格納し、新管理フロー超過使用量レジスタＲ５は最超過フローの超過使用量を格納する。
【０１０７】
超過使用クラス演算回路４３は、到着パケットのクラスＩＤと、到着パケットの属するクラスの超過使用量と、最超過クラスレジスタ２４ｄに記憶された値と、最超過クラス超過使用量レジスタＲ１に記憶された値とに基づいて、最超過クラスと、その最超過クラスのクラス使用量とを演算する。超過使用フロー演算回路４４は、到着パケットのフローＩＤと、到着パケットの属するフローの超過使用量と、到着クラスの最超過フローと、最超過フローの超過使用量とに基づいて、到着クラス内の最超過フローと、その最超過フローの超過使用量とを演算する。サービスクラスチェック回路４５は、パケット到着時における前サービスクラスの決定を行う。到着クラスが新規クラスの場合、つまり当該クラスに属するパケットがそれまで存在しなかった場合、その新規到着クラスを前サービスクラスとして扱いＷＲＲの最後の順番とするため、サービスクラスチェック回路４５は当該到着クラスのクラスＩＤを出力する。逆に到着クラスが新規クラスでない場合は、前サービスクラスは、管理されていた前サービスクラスをそのまま採用するため、サービスクラスチェック回路４５は既に管理されていた前サービスクラスＩＤを出力する。
【０１０８】
サービスフローチェック回路４６は、パケット到着時における前サービスフローの決定を行う。到着フローが新規フローである場合、到着フローを前サービスフローとして扱うため、サービスフローチェック回路４６は当該到着フローのフローＩＤを出力する。逆に到着フローが新規フローでない場合は、前サービスフローは、管理されていた前サービスフローをそのまま採用するため、サービスフローチェック回路４６は既に管理されていた前サービスフローＩＤを出力する。ＢＥクラス基本量演算回路４７は、到着フローが新規フローであり、かつ属するクラスが帯域保証型クラスである場合、図１６を参照して説明されたベストエフォート型クラス用基本量（以下、ＢＥクラス基本量という。）の再計算を行う。ＢＥクラス基本量演算回路４７は、到着クラスＩＤによって到着フロー基本量を演算し、到着フローが帯域保証型クラスに属する場合にはＢＥクラス基本量から到着フローの基本量を減算し、その値を出力する。到着フローがベストエフォート型クラスに属する場合は、ＢＥクラス基本量演算回路４７は既に管理されていたＢＥクラス基本量をそのまま出力する。優先度演算回路４８は、到着フローが新規フローである場合、属するクラスのクラス優先度を、各クラスに予め決定された１フローに属する優先度分だけ増加させる。
【０１０９】
図２２は、スケジューラ１８の詳細構成と送信パケット決定処理のフローとを示すブロック図である。図２２に示すように、スケジューラ１８は、サービスパケット出力決定部５１と、パケット送信用後処理部５２と、次サービスパケット選択部５３とを備えて構成される。
【０１１０】
図２２を参照して、サービス要求に対する送信パケット決定処理の流れを以下に説明する。パケット送信部１４がサービス要求信号をスケジューラ１８に入力すると、スケジューラ１８のサービスパケット出力決定部５１は、各管理部２６乃至２９を参照して、次サービスパケット選択部５３において予め決定された次サービスブロック番号をパケット送信用後処理部５２に出力する。そして、パケット送信用後処理部５２は、次サービスブロック番号を出力信号としてパケット送信部１４に出力するとともに、後処理として各管理部２１乃至２４と２６乃至２９内のデータを更新する。その後、パケットサービス中に、次サービスパケット選択部５３は、パケット送信用後処理部５２からの信号と、各管理部２３、２４、２６乃至２９に記憶されたデータとに基づいて、次サービスパケットの決定を行う。
【０１１１】
ここで、パケットは一般に可変長であるため、本実施形態ではブロック単位の処理が行われている。そのため、出力ポートコントローラ２０は、パケット送信部１４に対して、パケットの終了を告げる必要がある。そこで、出力ポートコントローラ２０の出力としてフラグを用意し、そのフラグが「１」である間はパケットが連続していることを示す。
【０１１２】
図２３は、図２２のパケット送信用後処理部５２の詳細構成を示すブロック図である。図２３に示すように、コントローラ６２には、クラスサービス回数演算回路６３と、フローサービス回数演算回路６４と、優先度演算回路６５と、最超過クラス超過使用量演算回路６６と、最超過フロー超過使用量演算回路６７と、サービスクラス保持レジスタＲ１１と、サービスフロー保持レジスタＲ１２と、最超過クラス超過使用量レジスタＲ１３と、最超過フロー超過使用量レジスタＲ１４とが接続されている。コントローラ６２は、これら内部回路６３乃至６７及びレジスタＲ１１乃至Ｒ１４と、外部回路との間で入出力インターフェース５１を介してデータを入出力するように制御する。
【０１１３】
図２３において、サービスクラス保持レジスタＲ１１はサービスクラスのクラスＩＤを格納し、サービスフロー保持レジスタＲ１２は図３４を参照して後述するＷＲＲフロー順管理テーブルメモリ２８ｃからのサービスフローのフローＩＤを格納する。また、最超過クラス超過使用量レジスタＲ１３は最超過クラスの超過使用量を格納し、最超過フロー超過使用量レジスタＲ１４は最超過フローの超過使用量を格納する。
【０１１４】
クラスサービス回数演算回路６３は、前サービスクラスＩＤの決定と残りサービス回数の演算を行う。通常は、残りサービス回数を１だけ減少させるのみである。減少させる前の値が１である場合はサービス順が移動するため、前サービスクラスＩＤを現在のサービスクラスＩＤの値に変更し、同時に、次のサービスを受けるクラスのサービス回数を演算する。フローサービス回数演算回路６４は、前サービスフローＩＤの決定と残りサービス回数の演算を行う。通常は、残りサービス回数を１だけ減少させるのみである。減少させる前の値が１である場合はサービス順が移動するため、前サービスフローＩＤを現在のサービスフローＩＤの値に変更し、同時に、次のサービスを受けるフローのサービス回数を演算する。
【０１１５】
優先度演算回路６５は、サービスされるフローが消滅する（バッファメモリ１３にパケットが無い状態になる）場合、属するクラスのクラス優先度を、各クラスに予め決定された１つのフローに属する優先度分だけ減少させる。最超過クラス超過使用量演算回路６６は、管理されている最超過クラスＩＤとサービスされたクラスＩＤが等しい場合、最超過クラス超過使用量を１だけ減少させ、それ以外の場合は、管理されている最超過クラス超過使用量の値をそのまま出力する。最超過フロー超過使用量演算回路６７は、管理されている最超過フローＩＤとサービスされたフローＩＤが等しい場合、最超過フロー超過使用量を１だけ減少させ、それ以外の場合は、管理されている最超過フロー超過使用量の値をそのまま出力する。
【０１１６】
以下、本実施形態の説明において、説明の簡単化のためにさらにいくつかの仮定をする。仮定の第１点目は、１個のパケットがバッファメモリ１３中の１個のブロックに格納可能であるとする点である。これにより、ブロック分割されたパケットの連結フラグ機能の実装を省略する。仮定の第２点目は、複数のポートでバッファメモリ１３を共有しない環境を想定する点である。これにより、ポート単位での管理機構の実装を省略する。このような仮定及び省略を含まずに本実施形態のルータ装置を実施する方法も、当業者には容易に理解されるだろう。
【０１１７】
また、以下の説明では、フローＩＤのビット幅をＦビットとし、クラスＩＤのビット幅をＣビットとし、優先度ビット幅をＷビットとしてパラメータ化して設定することにより、ハードウェア設計の拡張性をもたせる。ここで、フローＩＤのビット幅をＦビットと設定することにより、管理可能フロー数は２Ｆ−１個（すべてのビットが「１」を示す値には特殊な意味をもたせる。）となる。
【０１１８】
本実施形態の出力ポートコントローラ２０を実装するにあたり、信号処理の高速化を図るために、図４乃至図１９を参照して概念的に説明された管理テーブルを細分化する。管理テーブルを細分化することにより、各管理テーブルへの同時アクセスによる信号の衝突を防ぐことが可能となるためである。具体的には、フロー管理テーブルＴ３は、図２８乃至図３３を参照して後述するものであり、図２８を参照して後述する基本量管理テーブルメモリ２３ｃと、フロー使用量管理テーブルメモリ２３ｄと、先頭ブロック管理テーブルメモリ２３ｅと、最後尾ブロック管理テーブルメモリ２３ｆと、フロー優先度レジスタ２３ｇとに分割される。また、クラス管理テーブルＴ４（図３０参照。）は、最超過フローレジスタ２４ｃと、最超過クラスレジスタ２４ｄと、クラス優先度レジスタ２４ｅと、ＢＥクラス基本量レジスタ２４ｆと、クラス使用量管理テーブルメモリ２４ｇと、クラスフロー数管理テーブルメモリ２４ｈと、最超過フロー超過使用量管理テーブルメモリ２４ｉとに分割される。さらに、前サービスフロー管理テーブルＴ７（図３２参照。）は、前サービスフロー管理レジスタ２６ｃと、フロー残りサービス回数レジスタ２６ｄに分割される。前サービスクラス管理テーブル２７（図３３参照。）は、前サービスクラス管理レジスタ２７ｃと、クラス残りサービス回数レジスタ２７ｄに分割される。以下の説明で、細分化された各管理テーブルへのアクセスを補助する管理部を定義する。
【０１１９】
図２４は、図２の空き領域管理部２１の詳細構成を示すブロック図である。図２４に示すように、コントローラ２１ｂは、空き領域管理テーブルメモリ２１ｃと、リスト先頭ブロック番号レジスタ２１ｄと、リスト最後尾ブロック番号レジスタ２１ｅと、及び空きブロック数レジスタ２１ｆと接続されている。コントローラ２１ｂは、これらメモリ又はレジスタ２１ｃ乃至２１ｆなどの内部回路と、外部回路との間で入出力インターフェース２１ａを介してデータを入出力するように制御する。また、図２５は、図２４の空き領域管理部２１によって管理されるデータの一例を示す図であり、図２５（ａ）は空き領域管理テーブルメモリ２１ｃ内の空き領域管理テーブルの一例を示す図であり、図２５（ｂ）はリスト先頭ブロック番号レジスタ２１ｄ内のリスト先頭ブロック番号の一例を示す図であり、図２５（ｃ）はリスト最後尾ブロック番号レジスタ２１ｅ内のリスト最後尾ブロック番号の一例を示す図であり、図２５（ｄ）は空きブロック数レジスタ２１ｆ内の空きブロック数の一例を示す図である。
【０１２０】
図２４の空き領域管理部２１は、バッファメモリ１３中の空き領域をリスト形式で格納して管理し、基本的な動作として、クロック毎に空き領域であるブロックのブロック番号を出力する。これは、パケットが到着した時に空きブロック番号を検索するために使用される。空きブロック追加処理と空きブロック削除処理は１クロックで終了する。表１に、空き領域管理部２１によって管理されるデータのサイズを示す。
【０１２１】
【表１】
空き領域管理部２１によって管理されるデータのサイズ
―――――――――――――――――――――――――――
空き領域管理テーブル：Ｆビット×２Ｆ−１行
リスト先頭ブロック番号（Ｆｒｏｎｔ）：Ｆビット
リスト最後尾ブロック番号（Ｌａｓｔ）：Ｆビット
空きブロック数（Ｎｕｍ）：Ｆビット
―――――――――――――――――――――――――――
【０１２２】
次いで、空き領域管理部２１によって管理されるデータの概要について説明する。空き領域管理テーブルメモリ２１ｃ内の空き領域管理テーブルは、図２５（ａ）に示すように、各ブロック番号毎に、次の空きブロックのブロック番号を「次のブロック番号」として格納して管理する。図２５（ａ）の例では、例えば、ブロック番号「１」を有するブロックの次の空きブロックのブロック番号は「２」であることを示している。また、図２５（ｂ）に示すように、「次のブロック番号」とは別の値として「リスト先頭ブロック番号」を格納して管理しておくことにより、空きブロック番号は空き領域管理テーブルを検索することなく発見可能である。さらに、新たに空きブロックを追加する時のために、図２５（ｃ）に示すように、「リスト最後尾ブロック番号」を格納して管理しておき、このブロック番号に対する空き領域管理テーブル上の値を変更することにより追加処理を高速に行うことが可能となる。また、空きでないブロック（例えば、ブロック０）のブロック番号毎に、図２５（ａ）に示すように、空き領域管理テーブル上の値として「−１」を格納する。
【０１２３】
図２６は、図２の格納場所管理部２２の詳細構成を示すブロック図である。図２６に示すように、コントローラ２２ｂには格納場所管理テーブルメモリ２２ｃと接続され、コントローラ２２ｂは、格納場所管理テーブルメモリ２２ｃと、外部回路との間で入出力インターフェース２２ａを介してデータを入出力するように制御する。また、図２７は、図２６の格納場所管理テーブルメモリ２２ｃによって管理される格納場所管理テーブルの一例を示す図である。
【０１２４】
図２６の格納場所管理部２２は、各フローにおけるデータの連結状態を格納して管理し、基本的な動作としては、入力信号としてのブロック番号に応答して、同一フローにおける次のブロック番号を出力する。これはあるブロックがサービスされたとき、次にサービスすべきブロックのブロック番号を検索するために使用される。格納場所管理部２２は、動作周期として、入力信号に応答してその１クロック後に結果の出力信号を出力する。格納場所管理部２２によって格納されて管理される格納場所管理テーブルのサイズは、Ｆビット×２Ｆ−１行である。図２６の格納場所管理テーブルメモリ２２ｃ内の格納場所管理テーブルは、各ブロック番号毎に「次のブロック番号」を格納して管理する。図２７の例では、例えば、ブロック番号「１」を有するブロックに格納されたデータの続きのデータとして、ブロック番号「６」を有するブロックのデータが存在することとなる。次のデータが存在しない場合は、格納場所管理テーブルメモリ２２ｃに「−１」が格納される。
【０１２５】
図２８は、図２のフロー管理部２３の詳細構成を示すブロック図である。図２８に示すように、コントローラ２３ｂには、基本量管理テーブルメモリ２３ｃと、フロー使用量管理テーブルメモリ２３ｄと、先頭ブロック管理テーブルメモリ２３ｅと、最後尾ブロック管理テーブルメモリ２３ｆと、及びフロー優先度レジスタ２３ｇとが接続されている。コントローラ２３ｂは、これらメモリ又はレジスタ２３ｃ乃至２３ｇと、外部回路との間で入出力インターフェース２３ａを介してデータを入出力するように制御する。また、図２９は、図２８のフロー管理部２３内のデータの一例を示す図であり、図２９（ａ）は基本量管理テーブルメモリ２３ｃ内の基本量管理テーブルの一例を示す図であり、図２９（ｂ）はフロー使用量管理テーブルメモリ２３ｄ内のフロー使用量管理テーブルの一例を示す図であり、図２９（ｃ）は先頭ブロック管理テーブルメモリ２３ｅ内の先頭ブロック管理テーブルの一例を示す図であり、図２９（ｄ）は最後尾ブロック管理テーブルメモリ２３ｆ内の最後尾ブロック管理テーブルの一例を示す図である。
【０１２６】
図２８において、基本量管理テーブルメモリ２３ｃは各フローの基本量を格納して管理する。ただし、基本量管理テーブルメモリ２３ｃによって管理される基本量は帯域保証型クラスに属するフローの基本量のみで、ベストエフォート型クラスに属するフローの基本量は変動が激しいため別途管理を行う。基本量管理テーブルメモリ２３ｃは、基本的な動作として、入力信号としてのフローＩＤに応答してそのフローの基本量を出力する。フローの基本量は、パケット到着時と送信時において超過使用量を演算する場合等に用いられる。動作周期として、基本量管理テーブルメモリ２３ｃは、入力信号に応答してその１クロック後に結果の出力信号を出力する。基本量管理テーブルメモリ２３ｃによって管理される基本量管理テーブルのサイズは、Ｆビット×２Ｆ−１行である。基本量管理テーブルメモリ２３ｃ内の基本量管理テーブルは、図２９（ａ）にその一例を示すように、各フローＩＤ毎に「基本量」を格納して管理する。フローが存在しない場合と、基本量が割り当てられない場合には、その基本量管理テーブル上の値が「０」となる。
【０１２７】
図２８のフロー使用量管理テーブルメモリ２３ｄは各フローの使用量を格納して管理し、基本的な動作として、入力信号としてのフローＩＤに応答してそのフローの使用量を出力し、ここで、フローの使用量はパケット到着時及び送信時において超過使用量を演算する場合等に用いられる。動作周期として、フロー使用量管理テーブルメモリ２３ｄは入力信号に応答してその１クロック後に結果の出力信号を出力する。フロー使用量管理テーブルメモリ２３ｄ内のフロー使用量管理テーブルのサイズは、Ｆビット×２Ｆ−１行である。フロー使用量管理テーブルメモリ２３ｄ内のフロー使用量管理テーブルは、図２９（ｂ）にその一例を示すように、各フローＩＤ毎にそのフローの「使用量」を格納して管理する。使用量の値が「０」を示した瞬間に、当該フローは途切れたものと判断される。
【０１２８】
図２８の先頭ブロック管理テーブルメモリ２３ｅは各フローにおける最も先に到着したデータブロック、つまりバッファにおける各フローの先頭ブロックのブロック番号を格納して管理し、基本的な動作として、入力信号としてのフローＩＤに応答してそのフローの先頭ブロック番号を出力する。先頭ブロック番号は主として、パケット送信時やプッシュアウト時に使用される。先頭ブロック管理テーブルメモリ２３ｅは、動作周期として、入力信号に応答してその１クロック後に結果の出力信号を出力する。先頭ブロック管理テーブルメモリ２３ｅ内の先頭ブロック管理テーブルのサイズは、Ｆビット×２Ｆ−１行であり、先頭ブロック管理テーブルは、図２９（ｃ）にその一例を示すように、各フローＩＤ毎に「フローの先頭ブロック番号」を格納して管理する。この値が「−１」である場合は、そのフローが存在しないことを示す。
【０１２９】
図２８の最後尾ブロック管理テーブルメモリ２３ｆは、各フローにおける最も新しく到着したデータブロック、つまりバッファにおける各フローの最後尾ブロックのブロック番号を格納して管理し、基本的な動作として、入力信号としてのフローＩＤに応答してそのフローの最後尾ブロック番号を出力する。最後尾ブロック番号は主として、パケット到着時に格納場所管理部２２と連携して使用される。最後尾ブロック管理テーブルメモリ２３ｆは、動作周期として、入力信号に応答してその１クロック後に結果の出力信号を出力する。最後尾ブロック管理テーブルメモリ２３ｆ内の最後尾ブロック管理テーブルのサイズはＦビット×２Ｆ−１行であり、当該最後尾ブロック管理テーブルメモリ２３ｆは、図２９（ｄ）にその一例を示すように、各フローＩＤ毎に「フローの最後尾ブロック番号」を格納して管理する。この値が「−１」である場合は、そのフローが存在しないことを示す。
【０１３０】
図３０は、図２のクラス管理部２４の詳細構成を示すブロック図である。コントローラ２４ｂには、最超過フローレジスタ２４ｃと、最超過クラスレジスタ２４ｄと、クラス優先度レジスタ２４ｅと、ＢＥクラス基本量レジスタ２４ｆと、クラス使用量管理テーブルメモリ２４ｇと、クラスフロー数管理テーブルメモリ２４ｈと、最超過フロー超過使用量管理テーブルメモリ２４ｉとが接続されている。コントローラ２４ｂは、これら内部回路のレジスタ又はメモリ２４ｃ乃至２４ｉと、外部回路との間で入出力インターフェース２４ａを介してデータを入出力するように制御する。図３１は、図３０のクラス管理部２４内のデータの一例を示す図であり、図３１（ａ）はクラス使用量管理テーブルメモリ２４ｇ内のクラス使用量管理テーブルの一例を示す図であり、図３１（ｂ）はクラスフロー数管理テーブルメモリ２４ｈ内のクラスフロー数管理テーブルの一例を示す図であり、図３１（ｃ）は最超過フロー超過使用量管理テーブルメモリ２４ｉ内の最超過フロー超過使用量管理テーブルの一例を示す図である。
【０１３１】
図３０において、最超過フローレジスタ２４ｃはクラス毎に最も超過使用しているフローのフローＩＤを格納して管理し、最超過クラスレジスタ２４ｄはも超過使用しているクラスのクラスＩＤを格納して管理する。また、クラス優先度レジスタ２４ｅは各クラスのクラス優先度を格納して管理し、ＢＥクラス基本量レジスタ２４ｆはＢＥクラス基本量を格納して管理する。
【０１３２】
図３０のクラス使用量管理テーブルメモリ２４ｇは各クラスの使用量を格納して管理し、基本的な動作として、入力信号としてのクラスＩＤに応答してそのクラスの使用量を出力する。クラスの使用量は、パケット到着時及び送信時において超過使用量を演算する場合等に用いられる。クラス使用量管理テーブルメモリ２４ｇは、動作周期として、入力信号に応答してその１クロック後に結果の出力信号を出力する。クラス使用量管理テーブルメモリ２４ｇ内のクラス使用量管理テーブルのサイズは、Ｆビット×２Ｃ−１行であり、当該クラス使用量管理テーブルは、図３１（ａ）にその一例を示すように、各クラスＩＤ毎にそのクラスの「使用量」を格納して管理する。使用量の値が「０」を示す場合は、そのクラス内にフローが存在しないことを示す。
【０１３３】
図３０のクラスフロー数管理テーブルメモリ２４ｈは各クラスにおけるフロー数を格納して管理し、基本的な動作として、クロック毎にすべてのベストエフォート型クラスのフロー数を出力する。クラスのフロー数は、ベストエフォート型クラスの基本量を演算する時に使用される。すべてのベストエフォート型クラスのフロー数を同時に出力することにより、基本量の演算を高速に行うことが可能となる。クラスフロー数管理テーブルメモリ２４ｈは、フロー数の増減処理を１クロックで実行して終了する。クラスフロー数管理テーブルメモリ２４ｈ内のクラスフロー数管理テーブルのサイズはＦビット×２Ｃ−１行であり、そのクラスフロー数管理テーブルは、図３０（ｂ）にその一例を示すように、各クラス毎に「クラスに属するフロー数」を格納して管理している。
【０１３４】
図３０の最超過フロー超過使用量管理テーブルメモリ２４ｉは各クラスにおける最超過フローの超過使用量を格納して管理し、基本的な動作として、入力としてのクラスＩＤに応答してそのクラス内で最も超過使用しているフローの超過使用量を出力する。当該最超過フロー超過使用量管理テーブルメモリ２４ｉを備えることにより、プッシュアウト対象フローを高速に決定することが可能となる。最超過フロー超過使用量管理テーブルメモリ２４ｉは、動作周期として、入力信号に応答してその１クロック後に結果の出力信号を出力する。最超過フロー超過使用量管理テーブルメモリ２４ｉ内の最超過フロー超過使用量管理テーブルのサイズは、Ｆビット×２Ｃ−１行であり、その最超過フロー超過使用量管理テーブルは、図３１（ｃ）にその一例を示すように、各クラス毎に「最超過フローの超過使用量」を格納して管理する。この値が「０」である場合は、そのクラス内に超過使用しているフローが存在しないことを示す。
【０１３５】
図３２は、図２の前サービスフロー管理部２６の詳細構成を示すブロック図である。図３２において、コントローラ２６ｂには、前サービスフロー管理レジスタ２６ｃ及びフロー残りサービス回数レジスタ２６ｄが接続されており、コントローラ２６ｂは、これら内部のレジスタ２６ｃ，２６ｄと、外部回路との間で入出力インターフェース２６ａを介してデータを入出力するように制御する。前サービスフロー管理部２６内の前サービスフロー管理レジスタ２６ｃのサイズはＦビット×２Ｆ−１行であり、同時に管理されるフロー残りサービス回数レジスタ２６ｄのサイズはＷビット×２Ｃ−１行である。前サービスフロー管理部２６内の前サービスフロー管理レジスタ２６ｃは、クラス毎に直前にサービスしたフローを格納して管理する。サービスすべきブロックの決定を行う時には、サービスすべきクラスを決定した後、当該レジスタ２６ｃを参照することによって、前にサービスしたフローのＩＤが決定される。この値をＷＲＲフロー順管理部２８に入力することにより、サービスすべきフローＩＤが決定される。また、フロー残りサービス回数レジスタ２６ｄは、クラス毎に現在サービス中であるフローがサービス可能なブロック数を格納して管理し、この値が「０」になると、次のフローのサービスを行う。
【０１３６】
また、図３３は、図２の前サービスクラス管理部２７の詳細構成を示すブロック図である。コントローラ２７ｂには、前サービスクラス管理レジスタ２７ｃ及びクラス残りサービス回数レジスタ２７ｄが接続されており、コントローラ２７ｂは、これら内部回路のレジスタ２７ｃ，２７ｄと、外部回路との間で入出力インターフェース２７ａを介してデータを入出力するように制御する。サービスクラス管理部２７によって管理される前サービスクラス管理レジスタ２７ｃのサイズはＣビットであり、管理されるクラス残りサービス回数レジスタ２７ｄのデータはＦビットである。前サービスクラス管理部２７内の前サービスクラス管理レジスタ２７ｃは、直前にサービスしたクラスを格納して管理し、この値をＷＲＲクラス順管理部２９に入力することにより、サービスすべきクラスＩＤが決定される。また、クラス残りサービス回数レジスタ２７ｄは、現在サービス中のクラスがサービス可能なブロック数を格納して管理する。この値が「０」になると、次のクラスのサービスを行う。
【０１３７】
図３４は、図２のＷＲＲフロー順管理部２８の詳細構成を示すブロック図である。コントローラ２８ｂには、ＷＲＲフロー順管理テーブルメモリ２８ｃが接続されており、コントローラ２８ｂは、その内部回路であるＷＲＲフロー順管理テーブルメモリ２８ｃと、外部回路との間で入出力インターフェース２８ａを介してデータを入出力するように制御する。
【０１３８】
図３４のＷＲＲフロー順管理テーブルメモリ２８ｃは、図３５にその一例を示すように、各フローＩＤ毎にそのフローＩＤの次にサービスすべきフローＩＤを格納して管理し、基本的な動作として、入力されるフローＩＤに応答してサービスすべきフローのフローＩＤを出力する。この出力されたフローＩＤは、パケット送信時に、まず、どのフローをサービスすべきであるかを決定するために使用される。ＷＲＲフロー順管理部２８は、動作周期として、入力信号に応答してその１クロック後に結果の出力信号を出力する。ＷＲＲフロー順管理テーブルメモリ２８ｃ内のＷＲＲフロー順管理テーブルのサイズは、Ｆビット×２Ｆ−１行であり、そのＷＲＲフロー順管理テーブルは、各フローＩＤ毎に「次にサービスすべきフローＩＤ」を格納して管理する。例えば、図３５の例では、フローＩＤ「０」の次にサービスするフローのＩＤは「１」であり、さらに次にサービスするフローは「５」であることが示されている。また、フローＩＤ「５」の次にサービスするフローのＩＤは「０」であることから、あるクラス下ではフローＩＤ「０」、「１」、「５」が存在し、それらのサービス順は「０→１→５→０→…」であることを示している。また、ＷＲＲフロー順管理テーブル上の値が「−１」である場合、そのフローは存在していないことを示す。
【０１３９】
図３６は、図２のＷＲＲクラス順管理部２９の詳細構成を示すブロック図である。コントローラ２９ｂには、ＷＲＲクラス順管理テーブルメモリ２９ｃが接続され、その内部回路であるＷＲＲクラス順管理テーブルメモリ２９ｃと、外部回路との間で入出力インターフェース２９ａを介してデータを入出力するように制御する。
【０１４０】
ＷＲＲクラス順管理テーブルメモリ２８ｃは、図３６にその一例を示すように、各クラスＩＤ毎にそのクラスの次にサービスすべきクラスのクラスＩＤを格納して管理し、基本的な動作として、入力されるクラスＩＤに応答して、次にサービスすべきクラスＩＤを出力する。この出力されたクラスＩＤはパケット送信時にどのクラスをサービスすべきであるかを決定するために使用される。ＷＲＲクラス順管理テーブルメモリ２８ｃは、動作周期として、入力信号に応答してその１クロック後に結果の出力信号を出力する。ＷＲＲクラス順管理部２９内のＷＲＲクラス順管理テーブルのサイズは、Ｃビット×２Ｃ−１行であり、そのＷＲＲクラス順管理テーブルは、図３６に示すように、各クラス毎に「次にサービスすべきクラスＩＤ」を格納して管理する。ここで、ＷＲＲクラス順管理テーブ上の値の意味は、「ＷＲＲフロー順管理テーブル」と同様である。
【０１４１】
出力ポートコントローラ２０は、以上説明したすべての管理テーブルへのアクセス処理と、またそれら管理テーブルの出力処理とを用いて以下の演算処理を行う。パケット到着時には、到着パケットが属するフローＩＤ等を入力することにより、格納ブロック番号の決定が行われる。また、パケット送信時には、サービス要求信号を入力することにより送信すべきブロック番号の出力が行われる。これらの処理を行うためには、本ブロックでは４クロックが必要である。表２に、出力ポートコントローラ２０に対する入出力信号を示し、表３に、以上説明した各管理テーブルを記憶した各メモリと各レジスタとをまとめて列挙して示す。
【０１４２】
【表２】
出力ポートコントローラ２０に対する入出力信号
――――――――――――――――――――――
信号名                入出力  ビット幅
――――――――――――――――――――――
フローＩＤ            入力    Ｆ
クラスＩＤ            入力    Ｃ
優先度                入力    Ｗ
到着フラグ            入力    １
送信フラグ            入力    １
クロックＣＬＫ        入力    １
リセットＲＳＴ        入力    １
出力データＤＯＵＴ    出力    Ｆ
――――――――――――――――――――――
【０１４３】
表２において、出力ポートコントローラ２０は、出力データＤＯＵＴとして、到着パケットの格納の場合には格納ブロック信号を出力し、パケットを送信する場合には送信ブロック番号を出力する。
【０１４４】
【表３】
出力ポートコントローラ２０によって管理されるメモリ及びレジスタ
―――――――――――――――――――――――――――――――
空き領域管理テーブルメモリ２１ｃ
格納場所管理テーブルメモリ２２ｃ
基本量管理テーブルメモリ２３ｃ
フロー使用量管理テーブルメモリ２３ｄ
先頭ブロック管理テーブルメモリ２３ｅ
最後尾ブロック管理テーブルメモリ２３ｆ
クラス使用量管理テーブルメモリ２４ｇ
クラスフロー数管理テーブルメモリ２４ｈ
最超過フロー超過使用量管理テーブルメモリ２４ｉ
ＷＲＲフロー順管理テーブルメモリ２８ｃ
ＷＲＲクラス順管理テーブルメモリ２９ｃ
前サービスフロー管理レジスタ２６ｃ：Ｆビット×２Ｃ−１行
前サービスクラス管理レジスタ２７ｃ：Ｃビット
最超過フローレジスタ２４ｃ：Ｆビット×２Ｃ−１行
最超過クラスレジスタ２４ｄ：Ｃビット
クラス優先度レジスタ２４ｅ：Ｗビット×２Ｃ−１行
フロー残りサービス回数レジスタ２６ｄ：Ｗビット×２Ｃ−１行
クラス残りサービス回数レジスタ２７ｄ：Ｆビット
ＢＥクラス基本量レジスタ２４ｆ：Ｆビット
――――――――――――――――――――――――――――――
【０１４５】
本実施形態の出力ポート回路３をハードウェア実装すると、結果の出力信号を出力して各管理テーブルの変更を終了するまでに４クロックの処理が必要である。このことを説明するために、図２の出力ポートコントローラ２０によって実行される、パケット到着時の処理のタイミングチャートを図３８乃至図４１に示す。なお、図３８乃至図４１に図示されたパケット到着時の処理と、後述する図４５及び図４６に示されたパケット送信時の処理において、各管理部２１乃至２４及び２６乃至２９内の入出力インターフェース２１ａ乃至２４ａ及び２６ａ乃至２９ａと、コントローラ２１ｂ乃至２４ｂ及び２６ｂ乃至２９ｂとを介して、プッシュアウト対象ブロック決定部１５、格納ブロック決定部１６、格納場所決定部１７及びスケジューラ１８と、各管理テーブル及びレジスタとの間でデータが送受信されるが、以下では、説明の簡単化のために、これら入出力インターフェース及びコントローラについての説明を省略する。
【０１４６】
図３８の第１クロックの期間（時刻ｔ１乃至ｔ２）においては、出力ポートコントローラ２０において、各管理テーブルを保持する空き領域管理部２１、フロー管理部２３及びクラス管理部２４へのデータ入力が実行される。格納ブロック決定部１６は、空き領域管理テーブルメモリ２１ｃに読み出しフラグを入力し、これに応答して時刻ｔ２において空き領域管理テーブルメモリ２１ｃは空きブロック番号を格納場所決定部１７に出力する。また、プッシュアウト対象ブロック決定部１５はフロー使用量管理テーブルメモリ２３ｄと基本量管理テーブルメモリ２３ｃに到着パケットの属するフローのフローＩＤを入力し、これに応答して、フロー使用量管理テーブルメモリ２３ｄは時刻ｔ２においてバッファメモリ１３における当該フローの現在のフロー使用量をプッシュアウト対象ブロック決定部１５に出力する。さらに、基本量管理テーブルメモリ２３ｃは時刻ｔ２においてバッファメモリ１３における帯域保証型クラスのフローの現在のフロー基本量をプッシュアウト対象ブロック決定部１５に出力する。
【０１４７】
プッシュアウト対象ブロック決定部１５はまた、クラスフロー数管理テーブルメモリ２４ｈに到着パケットの読み出しフラグを入力し、クラス使用量管理テーブルメモリ２４ｇに到着パケットの属するクラスのクラスＩＤを入力する。これに応答して、クラスフロー数管理テーブルメモリ２４ｈは時刻ｔ２において各ベストエフォート型クラスに含まれるフロー数をプッシュアウト対象ブロック決定部１５に出力し、クラス使用量管理テーブルメモリ２４ｇは時刻ｔ２においてバッファメモリ１３における当該クラスの現在のクラス使用量をプッシュアウト対象ブロック決定部１５に出力する。また、プッシュアウト対象ブロック決定部１５は、到着時における最超過フローのフローＩＤを読み出しフラグとして先頭ブロック管理テーブルメモリ２３ｅに入力し、これに応答して、先頭ブロック管理テーブルメモリ２３ｅは時刻ｔ２においてバッファメモリ１３における最超過クラス中の最超過フローの先頭ブロックと、到着パケットが属するクラス中の最超過フローの先頭ブロック番号とをプッシュアウト対象ブロック決定部１５に出力する。これは、バッファメモリ１３中に格納されたフローにプッシュアウトが適用される場合に、到着パケットの格納場所としてその出力（すなわち、最超過フローの先頭ブロック番号）を採用するためである。さらに、後処理用前置処理部３６は、最超過フロー超過使用量管理テーブルメモリ２４ｉに到着パケットのクラスＩＤを入力して、最超過フロー超過使用量管理テーブルメモリ２４ｉは時刻ｔ２において最超過フロー超過使用量をパケット格納用後処理部３７に出力する。
【０１４８】
次いで、第２クロックの期間（時刻ｔ２乃至ｔ４）では、第１クロックの期間に出力された管理テーブル上の値を使用し、到着パケットの格納場所を決定する処理を行う。図３８において、プッシュアウト対象ブロック決定部１５は、まず、フロー使用量管理テーブルメモリ２３ｄ、基本量管理テーブルメモリ２３ｃ及びクラスフロー数管理テーブルメモリ２４ｈから出力されたデータと、ＢＥクラス基本量レジスタ２４ｆとクラス優先度レジスタ２４ｅ内のデータとを使用し、到着パケットの属するフローの超過使用量を演算する。その演算回路構成の具体例を図４２及び図４３に示す。
【０１４９】
図４２は、プッシュアウト対象ブロック決定部１５に含まれる、ベストエフォート型クラスに属するフローに対する超過使用量演算処理を実行する回路のブロック図である。プッシュアウト対象ブロック決定部１５は、乗算器ＯＰ１，ＯＰ２，ＯＰ４及びＯＰ６と、加算器ＯＰ３と、除算器ＯＰ５と、減算器ＯＰ７及びＯＰ８と、セレクタＳＥ１乃至ＳＥ６とを備えた回路を備え、また、到着パケットが属するフローの基本量は数５及び数６によって演算することが可能であるので、図４２に概略的に示すような回路構成を用いて当該基本量を計算することができる。
【０１５０】
例えば２つのベストエフォート型クラスＣ１及びＣ２が存在する場合において、プッシュアウト対象ブロック決定部１５は、クラスフロー数管理テーブルメモリ２４ｈが出力したクラス１とクラス２の各フロー数と、クラス優先度レジスタ２４ｅから取得されたクラス１とクラス２の各優先度とを、乗算器ＯＰ１及びＯＰ２を用いてそれぞれ乗算し、次いで、各乗算結果を加算器ＯＰ３を用いて加算する。図３８のセレクタＳＥ２は、クラス優先度レジスタ２４ｅから出力される各クラスの優先度から到着クラスの優先度を選択して出力し、プッシュアウト対象ブロック決定部１５は、乗算器ＯＰ４を用いて、到着クラスの優先度を、ＢＥクラス基本量レジスタ２４ｆから取得されたＢＥクラス基本量と乗算し、その乗算結果を除算器ＯＰ５を用いて加算器ＯＰ３の加算結果で除算する。除算器ＯＰ５の除算結果はベストエフォート型クラスに属する到着フローの基本量である。減算器ＯＰ７により、以上のように計算されたフロー基本量の値を、フロー使用量管理テーブルメモリ２３ｄから出力された現在のフロー使用量の値から減算することにより、到着フローの超過使用量が演算される。
【０１５１】
図４３は、プッシュアウト対象ブロック決定部１５に含まれる、帯域保証型クラスに属するフローに対する超過使用量演算処理を実行する回路のブロック図である。到着パケットが帯域保証型（ＢＧ）クラスのフローに属する場合、ＢＧフロー基本量は、基本量管理テーブルメモリ２３ｃの基本量管理テーブルメモリ２３ｃにより格納されて管理されているので、その出力を使用して超過使用量を演算する。
【０１５２】
図３８の処理では、到着フローが帯域保証型であるか又はベストエフォート型であるかに応じて、セレクタＳＥ３が到着パケットのフロー使用量から減算されるべきフロー基本量を選択している。また、セレクタＳＥ１は、クラスフロー数管理テーブルメモリ２４ｈから出力される各クラスのフロー数から到着クラスのフロー数を選択して出力し、プッシュアウト対象ブロック決定部１５は、到着クラスのフロー数と、除算器ＯＰ５の除算結果とを乗算器ＯＰ６で乗算して、その乗算結果をベストエフォート型到着パケットが属するクラスのクラス基本量として出力する。以上によって演算された超過使用量と、先頭ブロック管理テーブルメモリ２３ｅからの出力と、空き領域管理テーブルメモリ２１からの出力を使用して格納場所を決定する。
【０１５３】
図３９に図示された第２クロックの後半期間（時刻ｔ３乃至ｔ４）において、プッシュアウト対象ブロック決定部１５は、減算器ＯＰ８を用いてクラス基本量からクラス使用量を減算し、その減算結果である到着クラスの超過使用量を、セレクタＳＥ４及びＳＥ５と処理フラグセレクタＳＥ７とに出力する。セレクタＳＥ４は、到着パケットのクラスＩＤと最超過クラスレジスタ２４ｄから取得されたデータと減算器ＯＰ８から出力された到着クラスの超過使用量とに基づいてプッシュアウト対象クラスＩＤを決定し、決定結果を示す信号をセレクタＳＥ６に出力する。また、セレクタＳＥ６は、最超過フローレジスタ２４ｃから取得されたクラス毎の最超過フローのフローＩＤと、セレクタＳＥ４から入力されたプッシュアウト対象クラスのクラスＩＤとに基づいて、プッシュアウト対象フローを決定して、当該決定したプッシュアウト対象フローのフローＩＤを出力する。セレクタＳＥ５は、先頭ブロック管理テーブルメモリ２３ｅから出力された最超過クラス及び到着クラス中の最超過フローの先頭ブロック番号と、減算器ＯＰ８から出力された到着クラスの超過使用量とに基づいて、プッシュアウト対象ブロックの先頭ブロック番号を決定し、決定結果を示す信号をセレクタ３５に出力する。
【０１５４】
図４４は、図２０のセレクタ３５によって実行される、到着パケットのための格納場所決定を説明するための概略説明図である。演算された到着フローの超過使用量（図４４の信号Ａ）が０以下である場合（すなわち、バッファメモリ１３の使用量が基本量を超過していない場合）、バッファメモリ１３内に空き領域が存在しないならば、到着パケットは、すでにバッファメモリ１３内に格納されているパケットをプッシュアウトする可能性がある。その場合、セレクタ３５内のセレクタＳＥ１１は、先頭ブロック管理テーブルメモリ２３ｅから出力され、次いで、セレクタＳＥ５によって選択して出力されたデータ（図４４の信号Ｂ）を、プッシュアウト対象ブロックのブロック番号として選択して出力する（図４４の信号Ｄ）。到着パケットの属するフローの超過使用量（図４４の信号Ａ）が１以上である場合、他のフローに対してプッシュアウトを適用できないため、セレクタＳＥ１１は、プッシュアウト対象ブロック番号（図４４の信号Ｄ）として「−１」を出力する。
【０１５５】
図４４のセレクタ３５内のセレクタＳＥ１２は、上述のように演算されたプッシュアウト対象ブロック番号と、空き領域管理テーブルメモリ２１ｃからの出力結果である空きブロック番号とを比較して格納ブロック番号を決定する。具体的に、空き領域管理テーブルメモリ２１ｃからの出力信号（図４４の信号Ｃ）が「−１」である場合、バッファメモリ１３内に空きがないことを示しているため、セレクタＳＥ１２は、プッシュアウト対象ブロック番号（図４４の信号Ｄ）を格納ブロック番号として採用する。空き領域管理テーブルメモリ２１ｃからの出力信号（図４４の信号Ｃ）が「−１」以外である場合は、バッファメモリ１３内に空きがあるということを意味しているため、その出力信号（図４４の信号Ｃ）を格納ブロック番号として採用する。以上より、バッファメモリ１３に空きがある場合はその空きブロック番号が格納ブロック番号として出力され、空きがなくかつ到着パケットの属するフローが超過使用していなければプッシュアウト対象ブロックが格納ブロック番号として出力され、また、空きがなくかつ到着パケットの属するフローが超過使用していれば廃棄信号（１１１…）が格納ブロック番号として出力されることとなる。
【０１５６】
図３９において、処理フラグセレクタＳＥ７は、空きブロック番号と、到着フローの超過使用量と、到着クラスの超過使用量とに基づいて、処理フラグを生成して出力する。処理フラグは２ビットのサイズを有し、当該処理フラグは、後処理時（時刻ｔ５乃至ｔ６）に全ての管理テーブルに入力するものであって、その意義を次の表に示す。
【０１５７】
【表４】
―――――――――――――――――――――――――――――――――
処理フラグ          意義
―――――――――――――――――――――――――――――――――
００        通常格納する（バッファに空きが存在していた）。
０１        廃棄する（到着パケットを格納しない）。
１０        到着フローの属するクラス内でプッシュアウトする。
１１        到着フローの属するクラス外でプッシュアウトする。
―――――――――――――――――――――――――――――――――
【０１５８】
表４に示すように、処理フラグのビットを判断することにより、後処理時での各管理テーブルの更新内容が変化する。実施例では、更新すべき値と処理フラグとを同時にそれぞれの管理テーブルに入力し、各管理部は、更新すべきかどうかを処理フラグに基づいて判断する。処理フラグセレクタＳＥ７は、空きブロック番号、到着フローの超過使用量、到着クラスの超過使用量の値に基づいて、上記処理フラグを決定する。処理フラグセレクタＳＥ７は、具体的には以下の表に示すように動作する。
【０１５９】
【表５】
―――――――――――――――――――――――――――――――――――
（１）空きブロック番号が「−１」以外である場合、処理フラグ「００」を出力する。
（２）空きブロック番号が「−１」であり、かつ到着フローの超過使用量が１以上である場合、処理フラグ「０１」を出力する。
（３）空きブロック番号が「−１」であり、かつ到着フローの超過使用量が１未満であり、かつ到着クラスの超過使用量が１以上である場合、処理フラグ「１０」を出力する。
（４）空きブロック番号が「−１」であり、到着フローの超過使用量が１未満であり、かつ到着クラスの超過使用量が１未満である場合、処理フラグ「１１」を出力する。
―――――――――――――――――――――――――――――――――――
【０１６０】
また、図３９のパケット格納用後処理部３７は、最超過クラスと最超過フローの管理を行う。セレクタＳＥ８は、最超過フローレジスタ２４ｃから取得されたクラス毎の最超過フローのフローＩＤと、到着パケットのクラスＩＤとに基づいて、到着クラス内の最超過フローを決定して、それのフローＩＤをパケット格納用後処理部３７内の超過使用フロー演算回路４４に出力する。超過使用フロー演算回路４４は、到着パケットのフローＩＤ、到着フローと最超過フローの各超過使用量、及び到着クラスの最超過フローＩＤに基づいて、到着フローの超過使用量と管理されている超過使用量の比較を行い、新たに管理すべきフローＩＤと超過使用量を決定する。当該決定された到着クラス内の最超過フローのフローＩＤを新管理フローレジスタＲ４に一時的に格納し、最超過フローの超過使用量を新管理フロー超過使用量レジスタＲ５に一時的に格納しておき、後の更新フェーズにおいてそれらを利用して値の更新を行う。同様に、超過使用クラス演算回路４３は、到着パケットのクラスＩＤ及び到着クラスの超過使用量と、最超過クラスレジスタ２４ｄ及び最超過クラス超過使用量レジスタＲ１から取得されたデータとに基づいて、新たに管理すべきクラスＩＤと超過使用量の決定を行い、その決定結果である最超過クラスのクラスＩＤを新管理クラスレジスタＲ２に格納し、最超過クラスのクラス使用量を新管理クラス超過使用量レジスタＲ３に格納する。
【０１６１】
次いで、図４０に図示された第３クロックの期間（時刻ｔ４乃至ｔ５）と、図４１に図示された第４クロックの期間（時刻ｔ５乃至ｔ６）においては、パケット格納用後処理部３７は各管理テーブル上の値を更新する。
【０１６２】
まず、図４０の時刻ｔ４において、パケット格納用後処理部３７は到着パケットのフローＩＤをフロー使用量管理テーブルメモリ２３ｄに入力し、これに応答して、フロー使用量管理テーブルメモリ２３ｄは、フロー使用量のデータを、先頭ブロック管理テーブルメモリ２３ｅ、クラスフロー数管理テーブルメモリ２４ｈ、ＷＲＲフロー順管理テーブルメモリ２８ｃ、基本量管理テーブルメモリ２３ｃ、及びサービスフローチェック回路４６に出力する。また、パケット格納用後処理部３７は到着パケットのクラスＩＤをクラス使用量管理テーブルメモリ２４ｇに入力し、これに応答して、クラス使用量管理テーブルメモリ２４ｇは、クラス使用量のデータを、ＷＲＲクラス順管理テーブルメモリ２９ｃとサービスクラスチェック回路４５に出力する。サービスクラスチェック回路４５は、到着パケットのクラスが新規クラスであった場合、到着パケットのクラスＩＤと、クラス使用量管理テーブルメモリ２４ｇから入力されたクラス使用量のデータと、前サービスクラス管理レジスタ２７ｃから取得された前サービスクラスのクラスＩＤとに基づいて、時刻ｔ５で前サービスクラス管理レジスタ２７ｃを更新する。また、サービスフローチェック回路４６は、到着パケットのフローＩＤと、フロー使用量管理テーブルメモリ２３ｄから入力されたフロー使用量のデータと、前サービスフロー管理レジスタ２６ｃから取得された前サービスフローのフローＩＤとに基づいて、時刻ｔ５で前サービスフロー管理レジスタ２６ｃを更新する。さらに、ＢＥクラス基本量演算回路４７は、到着フローが新規フローであった場合、到着パケットのクラスＩＤと、ＢＥクラス基本量レジスタ２４ｆから取得されたＢＥクラス基本量を示すデータとに基づいて、ＢＥクラス基本量レジスタ２４ｆを更新する。
【０１６３】
図４０において、パケット格納用後処理部３７は時刻ｔ５において格納ブロック番号を用いて空き領域管理テーブルメモリ２１ｃを更新し、また、到着パケットのフローＩＤを用いてフロー使用量管理テーブルメモリ２３ｄを更新する。到着フローが新規フローであった場合はさらに、パケット格納用後処理部３７は時刻ｔ５において到着パケットのフローＩＤを用いて、先頭ブロック管理テーブルメモリ２３ｅ、最後尾ブロック管理テーブルメモリ２３ｆ、ＷＲＲフロー順管理テーブルメモリ２８ｃ及び基本量管理テーブルメモリ２３ｃを更新し、さらにクラスフロー数管理テーブルメモリ２４ｈを更新する。また、パケット格納用後処理部３７は時刻ｔ５において到着パケットのクラスＩＤを用いてクラス使用量管理テーブルメモリ２４ｇを更新し、到着パケットのクラスＩＤと新管理フロー超過使用量レジスタＲ５内のデータとを用いて最超過フロー超過使用量管理テーブルメモリ２４ｉを更新する。パケット格納用後処理部３７は、到着クラスが新規クラスであった場合、ＷＲＲクラス順管理テーブルメモリ２９ｃと前サービスクラス管理レジスタ２７ｃを更新する。
【０１６４】
図４１の時刻ｔ５において、次の第４クロックの期間（時刻ｔ５乃至時刻ｔ６）における各管理テーブル更新のため、パケット格納用後処理部３７は格納場所管理テーブルメモリ２２ｃにプッシュアウト対象フローのフローＩＤを入力し、これに応答して、格納場所管理テーブルメモリ２２ｃはプッシュアウト対象フローの新しい先頭ブロック番号を出力し、また、パケット格納用後処理部３７は最後尾ブロック管理テーブルメモリ２３ｆに到着パケットのフローＩＤを入力し、これに応答して、最後尾ブロック管理テーブルメモリ２３ｆは到着フローの最後尾ブロック番号を出力する。以上説明したように、処理フラグセレクタＳＥ７が出力した処理フラグは、時刻ｔ５においてすべての管理テーブルに入力される。
【０１６５】
図４１の第４クロックの期間（時刻ｔ５乃至時刻ｔ６）において、パケット格納用後処理部３７は、時刻ｔ６で到着フローの最後尾ブロック番号に基づいて格納場所管理テーブルメモリ２２ｃを更新し、到着パケットのフローＩＤを用いて最後尾ブロック管理テーブルメモリ２３ｆを更新し、また、プッシュアウト対象フローＩＤを用いてフロー使用量管理テーブルメモリ２３ｄを更新し、プッシュアウト対象フローの新しい先頭ブロック番号を用いて先頭ブロック管理テーブルメモリ２３ｅを更新する。また、パケット格納用後処理部３７は、プッシュアウト対象クラスＩＤを用いてクラス使用量管理テーブルメモリ２４ｇを更新する。同時に、パケット格納用後処理部３７は、新管理クラスレジスタＲ２から取得されたデータを用いて最超過クラスレジスタ２４ｄを更新し、新管理クラス超過使用量レジスタＲ３から取得されたデータを用いて最超過クラス超過使用量レジスタＲ１を更新し、新管理フローレジスタＲ４から取得されたデータを用いて最超過フローレジスタ２４ｃを更新する。さらに、優先度演算回路４８は、到着パケットのクラスＩＤに基づいてクラス優先度レジスタ２４ｅを更新する。また、処理フラグセレクタＳＥ７が出力した処理フラグは、時刻ｔ６においてすべての管理テーブルに入力される。
【０１６６】
図４５及び図４６は、図２の出力ポートコントローラ２０によって実行される、パケット送信時の処理のタイミングチャートである。パケット送信時の各管理テーブルを格納して管理する処理は３クロックで終了する。ただし、パケット到着時の処理が４クロック必要であるため、本実施形態においては、パケット送信時の処理もまた４クロック動作とする。パケット送信時における前半部の２クロックの期間（時刻ｔ１１乃至ｔ１３）のタイミングチャートを図４５に示す。
【０１６７】
図４５において、スケジューラ１８は、ＷＲＲクラス順管理テーブルメモリ２９ｃに前サービスクラスのクラスＩＤを予め入力しておき、まず、パケット送信時の第１クロックの期間（時刻ｔ１１乃至ｔ１２）において、ＷＲＲクラス順管理テーブルメモリ２９ｃは、ＷＲＲフロー順管理テーブルメモリ２８ｃとサービスクラス保持レジスタＲ１１にサービスクラスのクラスＩＤを入力する。同時に、スケジューラ１８は、予め管理されている前サービスフローＩＤをＷＲＲフロー順管理テーブルメモリ２８ｃに入力する。これにより、ＷＲＲフロー順管理テーブルメモリ２８ｃは、サービスすべきフローのフローＩＤを出力することとなる。第２クロックの期間（時刻ｔ１２乃至ｔ１３）において、ＷＲＲフロー順管理テーブルメモリ２８ｃがそのサービスフローのフローＩＤを先頭ブロック管理テーブルメモリ２３ｅとサービスフロー保持レジスタＲ１２に入力することにより、先頭ブロック管理テーブルメモリ２３ｅは、サービスすべきブロック番号を、時刻ｔ１３において、空き領域管理テーブルメモリ２１ｃと格納場所管理テーブルメモリ２２ｃに出力することとなる。
【０１６８】
次いで、パケット送信時の後半部の１クロック（時刻ｔ１３乃至ｔ１４）のタイミングチャートを図４６に示す。図４６に図示された第３クロックの期間（時刻ｔ１３乃至ｔ１４）において、スケジューラ１８はパケット送信による管理テーブルの変更を同時に行い、パケット送信時の処理は終了する。
【０１６９】
具体的には、フロー使用量管理テーブルメモリ２３ｄは、サービスフローのフローＩＤに基づいて、フロー使用量を表すデータをクラスフロー数管理テーブルメモリ２４ｄとフローサービス回数演算回路６４に出力する。クラス使用量管理テーブルメモリ２４ｇは、サービスクラスのクラスＩＤに基づいて、クラス使用量を表すデータをクラスサービス回数演算回路６３と優先度演算回路６５に出力する。これに応答して、クラスサービス回数演算回路６３は、サービスクラスのクラスＩＤと、クラス使用量と、前サービスクラス管理レジスタ２７ｃ及びクラス残りサービス回数レジスタ２７ｄから取得されたデータとに基づいて、残りサービス回数が０になるとき、又はクラス使用量が０になるとき、サービスが終了した前サービスクラスのクラスＩＤと、次にサービスするクラスに対する残りのサービス回数とを出力し、それぞれ前サービスクラス管理レジスタ２７ｃとクラス残りサービス回数レジスタ２７ｄに格納する。また、フローサービス回数演算回路６４も同様に、サービスフローのフローＩＤと、フロー使用量と、前サービスフロー管理レジスタ２６ｃ及びフロー残りサービス回数レジスタ２６ｄから取得されたデータとに基づいて、前サービスフロー管理レジスタ２６ｃとフロー残りサービス回数レジスタ２６ｄを更新する。さらに、優先度演算回路６５は、サービスクラスのクラスＩＤとクラス使用量とに基づいて、フローが消滅した場合に新たなクラス優先度を演算して、演算結果はクラス優先度レジスタ２４ｅに出力して格納する。
【０１７０】
最超過クラス超過使用量演算回路６６は、サービスクラスのクラスＩＤと、最超過クラス超過使用量レジスタＲ１３及び最超過クラスレジスタ２４ｄから取得されたデータとを参照し、サービスクラスＩＤと、格納して管理している最超過クラスＩＤが等しい場合は超過使用量の更新を行い、その値を最超過クラス超過使用量レジスタＲ１３に格納する。最超過フロー超過使用量演算回路６７も同様に、サービスフローのフローＩＤと、最超過フロー超過使用量レジスタＲ１４及び最超過フローレジスタ２４ｃから取得されたデータとを参照し、最超過フロー超過使用量レジスタＲ１４を更新する。また、スケジューラ１８は、サービスクラスのクラスＩＤを用いて、クラス使用量管理テーブルメモリ２４ｇ、クラスフロー数管理テーブルメモリ２４ｈ、及びＷＲＲクラス順管理テーブルメモリ２９ｃを更新し、サービスフローのフローＩＤを用いて、フロー使用量管理テーブルメモリ２３ｄ、先頭ブロック管理テーブルメモリ２３ｅ、最後尾ブロック管理テーブルメモリ２３ｆ、ＷＲＲフロー順管理テーブルメモリ２８ｃ、及び基本量管理テーブルメモリ２３ｃを更新し、クラスＩＤとフローＩＤを用いて最超過フロー超過使用量管理テーブルメモリ２４ｉを更新する。
【０１７１】
以上説明したように、本発明に係る実施形態の出力ポートコントローラ２０によるバッファメモリ管理では、まずフロー毎に最低限使用可能なバッファメモリ量（すなわち、基本量）を論理的に確保する。バッファメモリの使用率が低い状態では、各フローは基本量に関わらずバッファメモリの使用を許可される。使用率が高い状態に遷移しバッファメモリがフルになった場合、基本量を超えてバッファメモリを使用しているフローについてはそのまま廃棄されるが、逆に基本量に達していないフローが到着したときには、プッシュアウト機構を採用することにより、到着パケットのバッファメモリ使用が許可される。プッシュアウト対象パケットのサーチが終了すると、そのバッファメモリ位置上に到着パケットが上書きされ、上書きされたパケットは廃棄される。プッシュアウト対象パケットをサーチした結果、基本量以上使用しているフローが存在しない場合は、到着パケットは廃棄される。このような機構によって、特定コネクションに対するバッファメモリ空間の過度の独占使用を防止し、各フローの最低レートを保証する方法が実現される。本実施形態の重要な特徴は基本量の決定法にある。本実施形態の方法では、この基本量をポート、クラス、フローの順に階層的に格納して管理することにより、１つのバッファメモリを複数のポートで共有する環境において、それぞれに対するトラヒックのＱｏＳをより効率的に保証することが可能となる。
【０１７２】
また、本実施形態では、パケットサービス規律としてＷＲＲを採用した。ＷＲＲを使用するに当たり、各フローに対する重み係数を決定する必要がある。重み係数決定法では、まず帯域保証型クラスに優先的に全リンク容量のうち保証分の配分を行う。残りの帯域を他クラスで予め決定された重み係数に従って配分する。配分された帯域を簡単な整数比に換算することにより重み係数とする。以上の手順を用いることにより、帯域保証型クラスにはその契約帯域を確実に保証し、他のクラスに対しても優先制御が実現できる。また本実施形態において、基本量配分、プッシュアウト機構による廃棄制御と帯域配分法の連携をとることにより、バッファメモリ高負荷時においてもクラスに見合ったサービスを提供し、高度なＱｏＳ保証が可能となる。
【０１７３】
さらに、本実施形態によれば、ルータ装置を高速に動作させるように論理設計するための以下の２つの課題を以下のように解決したことを特徴としている。
【０１７４】
１つ目の課題は、基本量の管理であった。本実施形態ではフロー毎に基本量の管理を行う。帯域保証型フローに配分される基本量は、そのフローの優先度に従い固定値を取るが、ベストエフォート型フローに配分される基本量は、全バッファメモリ量から帯域保証型フローに配分された基本量の総和を減算した残りバッファメモリ量を優先度に従って配分される。つまり、ベストエフォート型フローに対する基本量は新しいフローの発生、並びにフローの消滅によって変動することとなり、フロー数の変化毎に全フローの基本量を再計算していては処理速度が極度に減少するという問題点が発生する。この問題を解決するために本実施形態では、帯域保証型クラスのフローに対しては、基本量をフロー毎に管理し、ベストエフォート型クラスのフローに対しては、ベストエフォート型クラス用基本量として、全バッファメモリ量から帯域保証型クラスに配分された基本量の総和を減算した量のみを格納して管理する。そのため、超過使用量を演算する際には、その度に基本量の演算を行う必要があるが、全フローに対する基本量の変更を行う必要がなくなるため管理機構の高速化が可能となる。
【０１７５】
また、２つ目の課題は、最超過使用フローの管理であった。プッシュアウトの対象となるフローは、最も基本量を超過使用しているフローである。パケット到着時に高速にプッシュアウト対象フローを決定するためには、予め最超過使用クラス、クラス毎に最超過使用フローを格納して管理しておく必要があるが、全フローの超過使用量をチェックして、最も超過しているフローを決定するという手法では、定期的に動作させるとしても処理時間が膨大になるという問題が発生していた。そこで、本実施形態では、最超過使用クラス、最超過使用フローの管理を以下のように行うことを提案している。まず、パケットが到着した時に、到着したフローの超過使用量と、格納して管理している最超過使用フローの超過使用量を比較する。到着フローの方が大きい場合は、最超過フローＩＤとその超過使用量の変更を行う。逆に管理フローの方が大きい場合は、管理データの変更を行わないとする。また、パケットを送信する時は、送信したフローＩＤと、格納して管理している最超過使用フローのＩＤが一致する場合、管理している最超過使用フローの超過使用量の更新を行う。逆にフローＩＤが一致しない場合は、管理データの変更を行わない。上記の方法により、全フローの超過使用量のチェックを行う必要がなくなり、管理機構の高速化が達成される。
【０１７６】
以上説明したように、本実施形態に係る基本量の管理方法によれば、送信すべきパケットが属する各フローに対してバッファメモリ１３に格納可能なメモリサイズの基準となる基本量をそれぞれ割り当てるときに、帯域保証型クラスに属するパケットの各フローに対する基本量を、当該各フローが要求するメモリサイズだけ個別に割り当てて管理する一方、ベストエフォート型クラスに属するパケットの各フローに対する基本量を、バッファメモリ１３全体のメモリサイズから、上記帯域保証型クラスに割り当てられた各基本量の総和を減算したメモリサイズを一括して割り当てて管理する。ここで、好ましくは、ベストエフォート型クラス毎に、優先度とそのクラスに属するフローの本数との積を計算し、それらの積を、ベストエフォート型クラスの個数について総和を計算することにより、ベストエフォート型クラスにおける総優先度を計算し、受信されたパケットのフローが属するクラスの優先度を、上記計算した総優先度で除算することにより、当該受信されたパケットに対する基本量配分割合を計算し、上記計算した基本量配分割合とベストエフォート型クラス用基本量との積を計算することにより当該受信されたパケットのフローの基本量を計算する。従って、超過使用量を演算する際には、その度に基本量の演算を行う必要があるが、全フローに対する基本量の変更を行う必要がなくなるため、出力ポートコントローラ２０の処理を従来技術に比較して高速化できる。
【０１７７】
また、本実施形態に係る超過使用量の管理方法によれば、送信すべきパケットが属する各フローに対してバッファメモリ１３に格納可能なメモリサイズの基準となる基本量をそれぞれ割り当て、各フローのバッファメモリ１３における実際の使用量に基づいて、送信すべきパケットの当該フローの基本量に対する超過使用量を計算し、バッファメモリ１３を上記基本量に対して最も超過して使用しているフローのみのフロー情報とその超過使用量を管理し、所定のフローに属するパケットを受信したときに、管理している超過使用量よりも超過使用量が大きいフローが発生するとき、フロー情報及び超過使用量を新たに受信したパケットが属するフローのフロー情報及び超過使用量に更新する。ここで、好ましくは、上記割り当てられた基本量を最も超過して使用しているフローに属するパケットが当該ルータ装置から送信されるときに、上記管理している超過使用量のみを当該フローの送信後の超過使用量に更新する。従って、全フローの超過使用量のチェックを行う必要がなくなり、出力ポートコントローラ２０の処理を従来技術に比較して高速化できる。
【０１７８】
さらに、本実施形態に係るサービス順序の管理方法によれば、複数のフローがバッファメモリ１３に格納されているときの各フローを送信する順序を管理するために、各フロー毎に、当該フローの次に送信すべきフローのフロー情報を格納する管理テーブル２８ｃを備え、送信すべき新たなフローがバッファメモリ１３に格納されたとき、上記新たなフローを、上記現在送信しているフローの前のフローの次の順序に指定するように管理テーブル２８ｃを更新する。従って、上記管理テーブル２８ｃを備えたので、次の送信すべきフローを検索する必要がなくなり、出力ポートコントローラ２０の処理を従来技術に比較して高速化できる。
【０１７９】
またさらに、本実施形態に係るバッファメモリ２０のブロック化と連結管理方法によれば、バッファメモリ２０は所定のブロック長の複数のブロックに分割され、パケットを記憶したブロックの情報と、上記パケットを記憶したブロックの次に連結されるべきブロックの情報と対応づけて格納する管理テーブル２２ｃを備え、各フローのパケットの連結状態を管理する。従って、バッファメモリ２０を効率的に使用できるとともに、管理テーブル２２ｃを備えたので、次に連結するブロックを容易に検索することができ、出力ポートコントローラ２０の処理を従来技術に比較して高速化できる。
【０１８０】
さらに、本実施形態に係るルータ装置によれば、図１の出力ポートコントローラ２０を有する出力ポート回路３を備えたので、クラスに見合ったサービスを提供できるとともに、特定のフローによるバッファメモリ２０の占有を解消でき、しかも出力ポート回路３内のバッファメモリ２０に対するパケットの入出力の処理を高速化することができる。
【０１８１】
【発明の効果】
以上詳述したように、第１の発明に係るルータ装置の出力ポート回路によれば、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路において、連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、上記出力ポート回路は、送信すべきパケットを一時的に格納する記憶手段と、上記記憶手段への上記パケットの格納及び読み出しを制御する制御手段とを備え、上記制御手段は、送信すべきパケットが属する各フローに対して上記記憶手段に格納可能なメモリサイズの基準となる基本量をそれぞれ割り当てるときに、帯域保証型クラスに属するパケットの各フローに対する基本量を、当該各フローが要求するメモリサイズだけ個別に割り当てて管理する一方、ベストエフォート型クラスに属するパケットの各フローに対する基本量を、上記記憶手段全体のメモリサイズから、上記帯域保証型クラスに割り当てられた各基本量の総和を減算したメモリサイズを一括して割り当てて管理する。ここで、好ましくは、上記制御手段は、ベストエフォート型クラス毎に、優先度とそのクラスに属するフローの本数との積を計算し、それらの積を、ベストエフォート型クラスの個数について総和を計算することにより、ベストエフォート型クラスにおける総優先度を計算し、受信されたパケットのフローが属するクラスの優先度を、上記計算した総優先度で除算することにより、当該受信されたパケットに対する基本量配分割合を計算し、上記計算した基本量配分割合とベストエフォート型クラス用基本量との積を計算することにより当該受信されたパケットのフローの基本量を計算する。従って、超過使用量を演算する際には、その度に基本量の演算を行う必要があるが、全フローに対する基本量の変更を行う必要がなくなるため、上記制御手段の処理を従来技術に比較して高速化できる。
【０１８２】
また、第２の発明に係るルータ装置の出力ポート回路によれば、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路において、連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、上記出力ポート回路は、送信すべきパケットを一時的に格納する記憶手段と、上記記憶手段への上記パケットの格納及び読み出しを制御する制御手段とを備え、上記制御手段は、送信すべきパケットが属する各フローに対して上記記憶手段に格納可能なメモリサイズの基準となる基本量をそれぞれ割り当て、各フローの記憶手段における実際の使用量に基づいて、送信すべきパケットの当該フローの基本量に対する超過使用量を計算し、上記記憶手段を上記基本量に対して最も超過して使用しているフローのみのフロー情報とその超過使用量を管理し、上記制御手段は、所定のフローに属するパケットを受信したときに、管理している超過使用量よりも超過使用量が大きいフローが発生するとき、フロー情報及び超過使用量を新たに受信したパケットが属するフローのフロー情報及び超過使用量に更新する。ここで、好ましくは、上記制御手段は、上記割り当てられた基本量を最も超過して使用しているフローに属するパケットが当該ルータ装置から送信されるときに、上記管理している超過使用量のみを当該フローの送信後の超過使用量に更新する。従って、全フローの超過使用量のチェックを行う必要がなくなり、上記制御手段の処理を従来技術に比較して高速化できる。
【０１８３】
さらに、第３の発明に係るルータ装置の出力ポート回路によれば、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路において、連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、上記出力ポート回路は、送信すべきパケットを一時的に格納する記憶手段と、上記記憶手段への上記パケットの格納及び読み出しを制御する制御手段とを備え、上記制御手段は、複数のフローが上記記憶手段に格納されているときの各フローを送信する順序を管理するために、各フロー毎に、当該フローの次に送信すべきフローのフロー情報を格納する第１の管理テーブルをさらに備え、送信すべき新たなフローが上記記憶手段に格納されたとき、上記新たなフローを、上記現在送信しているフローの前のフローの次の順序に指定するように上記第１の管理テーブルを更新する。従って、上記第１の管理テーブルを備えたので、次の送信すべきフローを検索する必要がなくなり、上記制御手段の処理を従来技術に比較して高速化できる。
【０１８４】
またさらに、第４の発明に係るルータ装置の出力ポート回路によれば、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置のための出力ポート回路において、連続した複数のパケットによりフローを構成し、上記フローは帯域保証型クラス又はベストエフォート型クラスに属し、上記出力ポート回路は、送信すべきパケットを一時的に格納する記憶手段と、上記記憶手段への上記パケットの格納及び読み出しを制御する制御手段とを備え、上記記憶手段は所定のブロック長の複数のブロックに分割され、上記制御手段は、パケットを記憶したブロックの情報と、上記パケットを記憶したブロックの次に連結されるべきブロックの情報と対応づけて格納する第２の管理テーブルをさらに備え、各フローのパケットの連結状態を管理する。従って、上記記憶手段を効率的に使用できるとともに、上記第２の管理テーブルを備えたので、次に連結するブロックを容易に検索することができ、上記制御手段の処理を従来技術に比較して高速化できる。
【０１８５】
さらに、第５の発明に係るルータ装置によれば、入力ポート回路を介して受信されたパケットをスイッチファブリック回路により各出力ポート回路を介して各隣接するノードにルーティングして送信するルータ装置において、上記ルータ装置の出力ポート回路を備える。従って、クラスに見合ったサービスを提供できるとともに、特定のフローによる記憶手段の占有を解消でき、しかも出力ポート回路内の記憶手段に対するパケットの入出力の処理を高速化することができる。
【図面の簡単な説明】
【図１】  本発明の実施形態に係るルータ装置の構成を示すブロック図である。
【図２】  図１の出力ポート回路３の詳細な構成を示すブロック図である。
【図３】  （ａ）は図１の出力ポート回路３への到着パケットを示す図であり、（ｂ）は図２のバッファメモリ１３のメモリ空間を示す図であり、（ｃ）は出力ポート回路３からの送信パケットを示す図である。
【図４】  図２の空き領域管理部２１によって管理される空き領域管理テーブルＴ１の概略構成の一例を示す図である。
【図５】  図４の空き領域管理テーブルＴ１を用いた空き領域管理を説明するための概略説明図である。
【図６】  図２の格納場所管理部２２によって管理される格納場所管理テーブルＴ２の概略構成の一例を示す図である。
【図７】  図６の格納場所管理テーブルＴ２を用いた格納場所管理を説明するための概略説明図である。
【図８】  図２のフロー管理部２３によって管理される帯域保証型クラスに属するフローのためのフロー管理テーブルＴ３の概略構成の一例を示す図である。
【図９】  図８のフロー管理テーブルＴ３を用いた先頭ブロック及び最後尾ブロックの管理を説明するための概略説明図である。
【図１０】  図２のクラス管理部２４によって管理されるクラス管理テーブルＴ４の概略構成の一例を示す図である。
【図１１】  図２のポート管理部２５によって管理されるポート管理テーブルＴ５の概略構成の一例を示す図である。
【図１２】  図２のＷＲＲフロー順管理部２８によって管理されるＷＲＲフロー順管理テーブルＴ６の概略構成の一例を示す図である。
【図１３】  図１２のＷＲＲフロー順管理テーブルＴ６を用いたサービスフロー順の管理を説明するための概略説明図である。
【図１４】  図２の前サービスフロー管理部２６によって管理される前サービスフロー管理テーブルＴ７の概略構成の一例を示す図である。
【図１５】  図１４の前サービスフロー管理テーブルＴ７を用いたサービスフロー順の管理を説明するための概略説明図であり、（ａ）は新規のフローが発生したときの前サービスフロー管理を示す図であり、（ｂ）は（ａ）の後のデータ更新処理を示す図である。
【図１６】  図２のバッファメモリ１３の記憶領域を、帯域保証型クラスのフローと、ベストエフォート型クラスのフローとの間で分配する方法を説明するための概略説明図である。
【図１７】  図２の格納場所決定部１７によって実行される、パケット到着時における最超過フローの管理処理を示すフローチャートである。
【図１８】  図２のスケジューラ１８によって実行される、パケット送信時における最超過フローの管理処理を示すフローチャートである。
【図１９】  図２のクラス管理部２４によって管理される最超過フロー管理テーブルＴ８を用いた最超過フロー管理を説明するための概略説明図であり、（ａ）は初期状態の（ａ１）最超過フロー管理テーブルＴ８と（ａ２）フロー毎の超過使用量の現在の状態とを示す図であり、（ｂ）はパケットサイズが２であるフロー３が到着したときの（ｂ１）最超過フロー管理テーブルＴ８と（ｂ２）フロー毎の超過使用量の現在の状態とを示す図であり、（ｃ）はパケットサイズが２であるフロー３を送信したときの（ｃ１）最超過フロー管理テーブルＴ８と（ｃ２）フロー毎の超過使用量の現在の状態とを示す図であり、（ｄ）はパケットサイズが２であるフロー１が到着したときの（ｄ１）最超過フロー管理テーブルＴ８と（ｄ２）フロー毎の超過使用量の現在の状態とを示す図である。
【図２０】  図２の格納場所決定部１７の詳細構成と格納場所決定処理のフローとを示すブロック図である。
【図２１】  図２０のパケット格納用後処理部３７の詳細構成を示すブロック図である。
【図２２】  図２のスケジューラ１８の詳細構成と送信パケット決定処理のフローとを示すブロック図である。
【図２３】  図２２のパケット送信用後処理部５２の詳細構成を示すブロック図である。
【図２４】  図２の空き領域管理部２１の詳細構成を示すブロック図である。
【図２５】  図２４の空き領域管理部２１によって管理されるデータの一例を示す図であり、（ａ）は空き領域管理テーブルメモリ２１ｃ内の空き領域管理テーブルの一例を示す図であり、（ｂ）はリスト先頭ブロック番号レジスタ２１ｄ内のリスト先頭ブロック番号の一例を示す図であり、（ｃ）はリスト最後尾ブロック番号レジスタ２１ｅ内のリスト最後尾ブロック番号の一例を示す図であり、（ｄ）は空きブロック数レジスタ２１ｆ内の空きブロック数の一例を示す図である。
【図２６】  図２の格納場所管理部２２の詳細構成を示すブロック図である。
【図２７】  図２６の格納場所管理テーブルメモリ２２ｃによって管理される格納場所管理テーブルの一例を示す図である。
【図２８】  図２のフロー管理部２３の詳細構成を示すブロック図である。
【図２９】  図２８のフロー管理部２３内のデータの一例を示す図であり、（ａ）は基本量管理テーブルメモリ２３ｃ内の基本量管理テーブルの一例を示す図であり、（ｂ）はフロー使用量管理テーブルメモリ２３ｄ内のフロー使用量管理テーブルの一例を示す図であり、（ｃ）は先頭ブロック管理テーブルメモリ２３ｅ内の先頭ブロック管理テーブルの一例を示す図であり、（ｄ）は最後尾ブロック管理テーブルメモリ２３ｆ内の最後尾ブロック管理テーブルの一例を示す図である。
【図３０】  図２のクラス管理部２４の詳細構成を示すブロック図である。
【図３１】  図３０のクラス管理部２４内のデータの一例を示す図であり、（ａ）はクラス使用量管理テーブルメモリ２４ｇ内のクラス使用量管理テーブルの一例を示す図であり、（ｂ）はクラスフロー数管理テーブルメモリ２４ｈ内のクラスフロー数管理テーブルの一例を示す図であり、（ｃ）は最超過フロー超過使用量管理テーブルメモリ２４ｉ内の最超過フロー超過使用量管理テーブルの一例を示す図である。
【図３２】  図２の前サービスフロー管理部２６の詳細構成を示すブロック図である。
【図３３】  図２の前サービスクラス管理部２７の詳細構成を示すブロック図である。
【図３４】  図２のＷＲＲフロー順管理部２８の詳細構成を示すブロック図である。
【図３５】  図３４のＷＲＲフロー順管理テーブルメモリ２８ｃ内のＷＲＲフロー順管理テーブルの一例を示す図である。
【図３６】  図２のＷＲＲクラス順管理部２９の詳細構成を示すブロック図である。
【図３７】  図３６のＷＲＲクラス順管理テーブルメモリ２９ｃ内のＷＲＲクラス順管理テーブルの一例を示す図である。
【図３８】  図２の出力ポートコントローラ２０によって実行される、パケット到着時の処理の第１の部分を示すタイミングチャートである。
【図３９】  図２の出力ポートコントローラ２０によって実行される、パケット到着時の処理の第２の部分を示すタイミングチャートである。
【図４０】  図２の出力ポートコントローラ２０によって実行される、パケット到着時の処理の第３の部分を示すタイミングチャートである。
【図４１】  図２の出力ポートコントローラ２０によって実行される、パケット到着時の処理の第４の部分を示すタイミングチャートである。
【図４２】  図２のプッシュアウト対象ブロック決定部１５に含まれる、ベストエフォート型クラスに属するフローに対する超過使用量演算処理を実行する回路のブロック図である。
【図４３】  図２のプッシュアウト対象ブロック決定部１５に含まれる、帯域保証型クラスに属するフローに対する超過使用量演算処理を実行する回路のブロック図である。
【図４４】  図２０のセレクタ３５によって実行される、到着パケットのための格納場所決定を説明するための概略説明図である。
【図４５】  図２の出力ポートコントローラ２０によって実行される、パケット送信時の処理の第１の部分を示すタイミングチャートである。
【図４６】  図２の出力ポートコントローラ２０によって実行される、パケット送信時の処理の第２の部分を示すタイミングチャートである。
【図４７】  従来技術に係るバッファメモリの記憶領域を分配する方法を説明するための概略説明図である。
【図４８】  図４７で分配されたバッファメモリの記憶領域を超過して使用しているクラスのパケットを廃棄する方法を説明するための概略説明図であり、（ａ）は同一ポートの異なるクラスのパケットを廃棄する場合を示す図であり、（ｂ）は異なるポートのクラスのパケットを廃棄する場合を示す図である。
【図４９】  従来技術において、送信に利用可能な全帯域幅をポート、クラス及びフローで階層的に分配する方法を説明するための概略説明図である。
【符号の説明】
１−１乃至１−Ｎ…入力ポート回路、
１ａ…高速パスコントローラ、
１ｂ…キューメモリ、
１ｃ…低速パスコントローラ、
１ｄ…マルチプレクサ、
２…スイッチファブリック回路、
３−１乃至３−Ｎ…出力ポート回路、
４…ルーティングプロセッサ、
１１…ヘッダ情報取得部、
１２…一時的パケット格納メモリ、
１３…バッファメモリ、
１３ａ，１３ｂ…フローキューメモリ、
１４…パケット送信部、
１５…プッシュアウト対象ブロック決定部、
１６…格納ブロック決定部、
１７…格納場所決定部、
１８…スケジューラ、
２０…出力ポートコントローラ、
２１…空き領域管理部、
２１ａ，２２ａ，２３ａ，２４ａ，２６ａ，２７ａ，２８ａ，２９ａ，４１，６１…入出力インターフェース、
２１ｂ，２２ｂ，２３ｂ，２４ｂ，２６ｂ，２７ｂ，２８ｂ，２９ｂ，４２，６２…コントローラ、
２１ｃ…空き領域管理テーブルメモリ、
２１ｄ…リスト先頭ブロック番号レジスタ、
２１ｅ…リスト最後尾ブロック番号レジスタ、
２１ｆ…空きブロック数レジスタ、
２２…格納場所管理部、
２２ｃ…格納場所管理テーブルメモリ、
２３…フロー管理部、
２３ｃ…基本量管理テーブルメモリ、
２３ｄ…フロー使用量管理テーブルメモリ、
２３ｅ…先頭ブロック管理テーブルメモリ、
２３ｆ…最後尾ブロック管理テーブルメモリ、
２３ｇ…フロー優先度レジスタ、
２４…クラス管理部、
２４ｃ…最超過フローレジスタ、
２４ｄ…最超過クラスレジスタ、
２４ｅ…クラス優先度レジスタ、
２４ｆ…ＢＥクラス基本量レジスタ、
２４ｇ…クラス使用量管理テーブルメモリ、
２４ｈ…クラスフロー数管理テーブルメモリ、
２４ｉ…最超過フロー超過使用量管理テーブルメモリ、
２５…ポート管理部、
２６…前サービスフロー管理部、
２６ｃ…前サービスフロー管理レジスタ、
２６ｄ…フロー残りサービス回数レジスタ、
２７…前サービスクラス管理部、
２７ｃ…前サービスクラス管理レジスタ、
２７ｄ…クラス残りサービス回数レジスタ、
２８…ＷＲＲフロー順管理部、
２８ｃ…ＷＲＲフロー順管理テーブルメモリ、
２９…ＷＲＲクラス順管理部、
２９ｃ…ＷＲＲクラス順管理テーブルメモリ、
３０…ＷＲＲポート順管理部、
３５，ＳＥ１乃至ＳＥ８，ＳＥ１１，ＳＥ１２…セレクタ、
３６…後処理用前置処理部、
３７…パケット格納用後処理部、
４３…超過使用クラス演算回路、
４４…超過使用フロー演算回路、
４５…サービスクラスチェック回路、
４６…サービスフローチェック回路、
４７…ＢＥクラス基本量演算回路、
４８…優先度演算回路、
５１…サービスパケット出力決定部、
５２…パケット送信用後処理部、
５３…次サービスパケット選択部、
６３…クラスサービス回数演算回路、
６４…フローサービス回数演算回路、
６５…優先度演算回路、
６６…最超過クラス超過使用量演算回路、
６７…最超過フロー超過使用量演算回路、
ＯＰ１，ＯＰ２，ＯＰ４，ＯＰ６…乗算器、
ＯＰ３…加算器、
ＯＰ５…除算器、
ＯＰ７，ＯＰ８…減算器、
Ｒ１…最超過クラス超過使用量レジスタ、
Ｒ２…新管理クラスレジスタ、
Ｒ３…新管理クラス超過使用量レジスタ、
Ｒ４…新管理フローレジスタ、
Ｒ５…新管理フロー超過使用量レジスタ、
Ｒ１１…サービスクラス保持レジスタ、
Ｒ１２…サービスフロー保持レジスタ、
Ｒ１３…最超過クラス超過使用量レジスタ、
Ｒ１４…最超過フロー超過使用量レジスタ、
Ｔ１…空き領域管理テーブル、
Ｔ２…格納場所管理テーブル、
Ｔ３…フロー管理テーブル、
Ｔ４…クラス管理テーブル、
Ｔ５…ポート管理テーブル、
Ｔ６…ＷＲＲフロー順管理テーブル、
Ｔ７…前サービスフロー管理テーブル、
Ｔ８…最超過フロー管理テーブル。
【図１】
0003643827.tif 000006
【図２】
0003643827.tif 000007
【図３】
0003643827.tif 000008
【図４】
0003643827.tif 000009
【図５】
0003643827.tif 000010
【図６】
0003643827.tif 000011
【図７】
0003643827.tif 000012
【図８】
0003643827.tif 000013
【図９】
0003643827.tif 000014
【図１０】
0003643827.tif 000015
【図１１】
0003643827.tif 000016
【図１２】
0003643827.tif 000017
【図１３】
0003643827.tif 000018
【図１４】
0003643827.tif 000019
【図１５】
0003643827.tif 000020
【図１６】
0003643827.tif 000021
【図１７】
0003643827.tif 000022
【図１８】
0003643827.tif 000023
【図１９】
0003643827.tif 000024
【図２０】
0003643827.tif 000025
【図２１】
0003643827.tif 000026
【図２２】
0003643827.tif 000027
【図２３】
0003643827.tif 000028
【図２４】
0003643827.tif 000029
【図２５】
0003643827.tif 000030
【図２６】
0003643827.tif 000031
【図２７】
0003643827.tif 000032
【図２８】
0003643827.tif 000033
【図２９】
0003643827.tif 000034
【図３０】
0003643827.tif 000035
【図３１】
0003643827.tif 000036
【図３２】
0003643827.tif 000037
【図３３】
0003643827.tif 000038
【図３４】
0003643827.tif 000039
【図３５】
0003643827.tif 000040
【図３６】
0003643827.tif 000041
【図３７】
0003643827.tif 000042
【図３８】
0003643827.tif 000043
【図３９】
0003643827.tif 000044
【図４０】
0003643827.tif 000045
【図４１】
0003643827.tif 000046
【図４２】
0003643827.tif 000047
【図４３】
0003643827.tif 000048
【図４４】
0003643827.tif 000049
【図４５】
0003643827.tif 000050
【図４６】
0003643827.tif 000051
【図４７】
0003643827.tif 000052
【図４８】
0003643827.tif 000053
【図４９】
0003643827.tif 000054