(57)【要約】【課題】  フロー間の帯域制御の公平性を損なわずに、帯域制御処理の負荷を低減する帯域制御装置及び帯域制御システムを提供する。【解決手段】  帯域制御装置は、パケットをフローごとに格納する複数のパケット格納部と、前記フローごとに供給された読出許容量に基づき前記複数のパケット格納部からパケットを読み出して、前記フローに応じたポートに出力する出力部と、前記ポートを順次に選択し、前記ポートを選択するたびに選択中の前記ポートに応じた前記フローを選択し、該選択したフローに前記読出許容量を供給するスケジューラ部と、前記選択したフローが帯域保証されている場合、前記スケジューラ部により供給される前記読出許容量が増加し、前記選択したフローが帯域保証されていない場合、前記ポートの選択が切り替わる前に、選択中の前記ポートに応じた他のフローにも前記読出許容量が供給されるように、前記スケジューラ部を制御する制御部とを有する。【選択図】図３
2017063388.tif 000002
【特許請求の範囲】
【請求項１】
パケットをフローごとに格納する複数のパケット格納部と、
前記フローごとに供給された読出許容量に基づき前記複数のパケット格納部からパケットを読み出して、前記フローに応じたポートに出力する出力部と、
前記ポートを順次に選択し、前記ポートを選択するたびに選択中の前記ポートに応じた前記フローを選択し、該選択したフローに前記読出許容量を供給するスケジューラ部と、
前記選択したフローが帯域保証されている場合、前記スケジューラ部により供給される前記読出許容量が増加し、前記選択したフローが帯域保証されていない場合、前記ポートの選択が切り替わる前に、選択中の前記ポートに応じた他のフローにも前記読出許容量が供給されるように、前記スケジューラ部を制御する制御部と、
を有することを特徴とする帯域制御装置。
【請求項２】
前記スケジューラ部は、前記ポートごとに割り当てられる帯域量に基づき、前記選択したフローに前記読出許容量を供給し、
前記制御部は、前記選択したフローが帯域保証されていない場合、選択中の前記ポートの前記帯域量が所定量より大きいとき、前記スケジューラ部により供給される前記読出許容量が増加し、選択中の前記ポートの前記帯域量が前記所定量以下であるとき、前記ポートの選択が切り替わる前に、選択中の前記ポートに応じた他のフローにも前記読出許容量が供給されるように、前記スケジューラ部を制御することを特徴とする請求項１に記載の帯域制御装置。
【請求項３】
前記制御部は、前記帯域量の割り当て周期を延ばすように、前記スケジューラ部を制御することを特徴とする請求項２に記載の帯域制御装置。
【請求項４】
前記スケジューラ部の処理の負荷を監視する監視部を、さらに有し、
前記制御部は、前記監視部による監視結果に応じて前記スケジューラ部を制御することを特徴とする請求項１乃至３の何れかに記載の帯域制御装置。
【請求項５】
前記制御部は、前記負荷が所定の閾値を上回ったとき、前記スケジューラ部により供給される前記読出許容量が一定量だけ増加するように、前記スケジューラ部を制御することを特徴とする請求項４に記載の帯域制御装置。
【請求項６】
前記制御部は、前記負荷が前記所定の閾値以下であるとき、前記スケジューラ部により供給される前記読出許容量を増加前の値に戻すように、前記スケジューラ部を制御することを特徴とする請求項５に記載の帯域制御装置。
【請求項７】
前記制御部は、前記負荷に応じて、前記スケジューラ部により供給される前記読出許容量が増加するように、前記スケジューラ部を制御することを特徴とする請求項４に記載の帯域制御装置。
【請求項８】
前記複数のパケット格納部にパケットが入力されるたびに、前記スケジューラ部に一定の前記読出許容量を要求する要求部を、さらに有し、
前記スケジューラ部は、前記負荷が前記所定の閾値を上回ったとき、前記要求部からの要求を前記フローごとにまとめて受け付けて、該受け付けた要求に応じ前記読出許容量を供給することを特徴とする請求項５乃至７の何れかに記載の帯域制御装置。
【請求項９】
前記スケジューラ部は、前記要求部から要求された前記読出許容量の合計に応じた優先度に従い要求をまとめて受け付けて、該受け付けた要求に応じ前記読出許容量を供給することを特徴とする請求項８に記載の帯域制御装置。
【請求項１０】
ネットワークを介して通信する第１処理装置及び第２処理装置を有し、
前記第１処理装置は、
パケットをフローごとに格納する複数のパケット格納部と、
前記フローごとに供給された読出許容量に基づき前記複数のパケット格納部からパケットを読み出して、前記フローに応じたポートに出力する出力部とを有し、
前記第２処理装置は、
前記ポートを順次に選択し、前記ポートを選択するたびに選択中の前記ポートに応じた前記フローを選択し、該選択したフローに、前記ネットワークを介して、前記読出許容量を供給するスケジューラ部と、
前記選択した前記フローが帯域保証されている場合、前記読出許容量を増加させ、前記選択した前記フローが帯域保証されていない場合、前記ポートの選択が切り替わる前に、選択中の前記ポートに応じた他のフローにも前記読出許容量が供給されるように、前記スケジューラ部を制御する制御部と、
を有することを特徴とする帯域制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、帯域制御装置及び帯域制御システムに関する。
【背景技術】
【０００２】
通信需要の増加に伴い、ネットワークを流れるトラフィックの帯域が増加している。このため、例えばネットワーク内のルータやレイヤ２スイッチには、ユーザごとのトラフィックの帯域を制御する手段が設けられる。
【０００３】
例えば特許文献１には、スケジューラ部から複数のキューの各々に与えられるクレジットを消費してキューからパケットを読み出すことにより帯域を制御する手法が開示されている。この手法によると、クレジット量分のパケットを一度に読み出すことができるため、パケットごとではなく、クレジットの供給量ごとに読み出し対象のキューを選択すればよく、読み出し対象のキューの選択回数が低減される。
【０００４】
例えば、パケットごとにキューを選択する場合、１００（Gbps）のイーサネット（登録商標、以下同様）における最短フレーム長の６４（Byte）のスケジューリングでは、約１５０Ｍ（回／秒）、つまり６．７２（ns）の周期の選択処理が必要となる。しかし、クレジットの供給量ごとにキューを選択する場合、例えばクレジットの供給量を１０（KByte）とすると、約１．２５Ｍ（回／秒）、つまり８００（ns）の周期の選択処理で済む。さらに、クレジットの供給量を１０倍の１００（KByte）とすれば、約１２５Ｋ（回／秒）、つまり８（μs）の周期の選択処理で済む。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−１３５５８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記の手法では、クレジットの供給量を増やすほど、キューの選択回数が低減されるため、スケジューラ部におけるクレジットを供給処理の負荷が低減されるが、その一方でキューから一度に読み出されるパケットのデータ量が増加する。
【０００７】
一度に読み出されるパケットのデータ量が増加すると、トラフィックのバースト性が増加してしまう。この場合、例えばＶｏＩＰ（Voice Over Internet Protocol）や映像配信などのリアルタイム系の通信サービスの品質が低下する。このため、バースト性の観点からすると、クレジットの供給量は小さい方が望ましい。
【０００８】
しかし、例えばスケジューラ部をＣＰＵ（Central Processing Unit）などのプロセッサによりソフトウェアで構成した場合、スケジューラ部の処理の負荷は、クレジットの供給処理以外の処理の発生により変動し得る。この場合、スケジューラ部は、低負荷のときには、クレジットの供給量を小さくして（例えば１０（KByte））、高周期で供給することができるが、高負荷のときには、クレジットの供給処理がパケットの読み出し処理に間に合わずにパケットの出力レートが低下し得る。
【０００９】
これに対して、スケジューラ部の負荷に応じてクレジットの供給量を変更することが考えられる。しかし、クレジットの供給対象のキューを順次に選択している途中でクレジットの供給量が変更された場合、キュー間でパケットの読み出し量に差が生ずるため、キューごとのパケットのフロー間において帯域制御が不公平となる。さらに、クレジットの供給は、パケットのキューへの入力を契機として行われるため、クレジットの供給量を変更できる適切なタイミングを予測することは不可能である。
【００１０】
そこで本件は上記の課題に鑑みてなされたものであり、フロー間の帯域制御の公平性を損なわずに、帯域制御処理の負荷を低減する帯域制御装置及び帯域制御システムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本明細書に記載の帯域制御装置は、パケットをフローごとに格納する複数のパケット格納部と、前記フローごとに供給された読出許容量に基づき前記複数のパケット格納部からパケットを読み出して、前記フローに応じたポートに出力する出力部と、前記ポートを順次に選択し、前記ポートを選択するたびに選択中の前記ポートに応じた前記フローを選択し、該選択したフローに前記読出許容量を供給するスケジューラ部と、前記選択したフローが帯域保証されている場合、前記スケジューラ部により供給される前記読出許容量が増加し、前記選択したフローが帯域保証されていない場合、前記ポートの選択が切り替わる前に、選択中の前記ポートに応じた他のフローにも前記読出許容量が供給されるように、前記スケジューラ部を制御する制御部とを有する。
【００１２】
本明細書に記載の帯域制御システムは、ネットワークを介して通信する第１処理装置及び第２処理装置を有し、前記第１処理装置は、パケットをフローごとに格納する複数のパケット格納部と、前記フローごとに供給された読出許容量に基づき前記複数のパケット格納部からパケットを読み出して、前記フローに応じたポートに出力する出力部とを有し、前記第２処理装置は、前記ポートを順次に選択し、前記ポートを選択するたびに選択中の前記ポートに応じた前記フローを選択し、該選択したフローに、前記ネットワークを介して、前記読出許容量を供給するスケジューラ部と、前記選択した前記フローが帯域保証されている場合、前記読出許容量を増加させ、前記選択した前記フローが帯域保証されていない場合、前記ポートの選択が切り替わる前に、選択中の前記ポートに応じた他のフローにも前記読出許容量が供給されるように、前記スケジューラ部を制御する制御部とを有する。
【発明の効果】
【００１３】
フロー間の帯域制御の公平性を損なわずに、帯域制御処理の負荷を低減できる。
【図面の簡単な説明】
【００１４】
【図１】通信装置の一例を示す構成図である。
【図２】インターフェースカードの一例を示す構成図である。
【図３】実施例に係る帯域制御装置を示す構成図である。
【図４】負荷監視部の処理の一例を示すフローチャートである。
【図５】負荷監視部の処理の他例を示すフローチャートである。
【図６】クレジット制御部の処理の一例を示すフローチャートである。
【図７】フロー管理テーブルの一例を示す図である。
【図８】要求受付部の処理の一例を示すフローチャートである。
【図９】スケジューリング処理の一例を示すフローチャートである。
【図１０】スキップ処理の一例を示すフローチャートである。
【図１１】低負荷時の非帯域保証フローへのクレジット供給動作の一例を示す図である。
【図１２】高負荷時の非帯域保証フローへのクレジット供給動作の一例を示す図である。
【図１３】高負荷時の帯域保証フローへのクレジット供給動作の一例を示す図である。
【図１４】高負荷時の非帯域保証フロー及び帯域保証フローへのクレジット供給動作の一例を示すシーケンス図である。
【図１５】高負荷時の非帯域保証フローへのクレジット供給動作の他例を示す図である。
【図１６】高負荷時の非帯域保証フローへのクレジット供給動作の他例を示すシーケンス図である。
【図１７】他の実施例におけるクレジット制御部の処理の一例を示すフローチャートである。
【図１８（ａ）】低負荷時のポート管理テーブルの一例を示す図である。
【図１８（ｂ）】高負荷時のポート管理テーブルの一例を示す図である。
【図１９（ａ）】低負荷時の要求受付部の動作の一例を示す図である。
【図１９（ｂ）】高荷時の要求受付部の動作の一例を示す図である。
【図２０】要求メッセージの優先制御処理の一例を示す図である。
【図２１】帯域制御システムの一例を示す構成図である。
【発明を実施するための形態】
【００１５】
図１は、通信装置の一例を示す構成図である。通信装置は、複数のインターフェースカード９１と、２枚のスイッチカード９２と、コントロールカード９３とを有する。各カード９１〜９３は、筐体に設けられた個別のスロットに収容され、互いに電気的に接続される。なお、本明細書では、実施例の帯域制御装置を実装した通信装置として、レイヤ２スイッチやルータなどを例に挙げるが、これに限定されず、実施例の帯域制御装置は、例えば波長多重伝送装置などの他種の通信装置にも同様に実装される。
【００１６】
通信装置は、他装置から受信したパケットを、その宛先に従って他装置に中継する。なお、本明細書において、パケットとは、伝送されるデータ（情報）の伝送単位（ＰＤＵ：Protocol Data Unit）であり、例としてイーサネットフレームを挙げるが、これに限られず、ＩＰ（Internet Protocol）パケットなどの他のＰＤＵが用いられてもよい。
【００１７】
インターフェースカード９１は、それぞれ、他装置との間において、パケットを送受信する。他装置としては、例えば、パーソナルコンピュータなどの端末装置、サーバ、及びルータが挙げられる。インターフェースカード９１は、複数のポートにより光ファイバと接続され、例えば１０ＧＢＡＳＥ−ＬＲの規格に基づく通信を行う。
【００１８】
２枚のスイッチカード９２は、それぞれ、複数のインターフェースカード９１の間において、パケットを交換する。より具体的には、スイッチカード９２は、インターフェースカード９１からパケットが入力され、パケットを、その宛先に応じたインターフェースカード９１に出力する。２枚のスイッチカード９２は、例えば、ハードウェア故障などの障害に備えて、現用系及び予備系として使用される。
【００１９】
コントロールカード９３は、複数のインターフェースカード９１及び２枚のスイッチカード９２を制御する。コントロールカード９３は、ネットワーク制御装置などと接続され、ユーザーインターフェースに関する処理、各カード９１，９２に対する設定処理、及び各カード９１，９２からの情報収集処理などを行う。コントロールカード９３は、これらの処理を実行するＣＰＵなどのプロセッサ９３０、及び、プロセッサ９３０を駆動するプログラムを記憶するメモリ９３１を有する。
【００２０】
また、コントロールカード９３には、トラフィックの帯域制御機能が実装されてもよい。このような機能は、ネットワーク機能仮想化（NFV: Network Functions Virtualization）により例えばプロセッサ９３０、つまりソフトウェアにより実現される。
【００２１】
しかし、１００（Gbps）を超えるようなトラフィックの帯域制御処理の全てをプロセッサ９３０で実現することは処理速度の観点から困難である。このため、後述するように、帯域制御処理のうち、例えばパケットのキューに対する入出力処理は、インターフェースカード９１内のハードウェアに分担させ、ＱｏＳ（Quality of Service）に関わる帯域割り当てや優先制御などのスケジューリング処理は、ソフトウェアに分担させるのが好ましい。
【００２２】
この場合、通信装置を運用するキャリアに応じたソフトウェアを用いることにより、キャリアの仕様に従った適切なスケジューリング処理が可能となる。なお、帯域制御処理は、これに限定されず、その全てがインターフェースカード９１に実装されてもよい。
【００２３】
図２は、インターフェースカード９１の機能構成を示す構成図である。インターフェースカード９１は、複数の光送受信器９１０と、ＰＨＹ／ＭＡＣ部９１１と、入力処理部９１２と、出力処理部９１３と、制御部９１４と、記憶部９１５とを有する。
【００２４】
複数の光送受信器９１０は、例えばＳＦＰ（Small Form Factor Pluggable）であり、それぞれ、他装置から光ファイバを介して受信した光信号を電気信号に変換してＰＨＹ／ＭＡＣ部９１１に出力し、また、ＰＨＹ／ＭＡＣ部９１１から入力された電気信号を光信号に変換し、光ファイバを介して他装置に送信する。つまり、複数の光送受信器９１０は、他装置との間でパケットを送受信するための複数のポート＃１〜＃Ｎ（Ｎ：正の整数）として機能する。
【００２５】
ＰＨＹ／ＭＡＣ部９１１は、他装置とのリンクの確立処理や複数の光送受信器９１０に対するパケットの分配処理などを行う。ＰＨＹ／ＭＡＣ部９１１は、複数の光送受信器９１０から入力されたパケットを入力処理部９１２に出力し、出力処理部９１３から入力されたパケットを複数の光送受信器９１０に出力する。
【００２６】
入力処理部９１２及び出力処理部９１３は、ＦＰＧＡ（Field Programmable Gate Array）やＡＳＩＣ（Application Specific Integrated Circuit）などの論理回路であり、イングレス（INGRESS）及びイーグレス（EGRESS）のパケット処理をそれぞれ行う。入力処理部９１２は、ＰＨＹ／ＭＡＣ部９１１からのパケットの入力レートの制御処理などを行って、スイッチカード９２にパケットを出力する。
【００２７】
出力処理部９１３は、スイッチカード９２から入力されたパケットのフローごとに帯域制御処理などを行って、ＰＨＹ／ＭＡＣ部９１１にパケットを出力する。記憶部９１５は、メモリなどの記憶手段であり、入力処理部９１２及び出力処理部９１３が処理に用いる各種のデータを記憶する。
【００２８】
制御部９１４は、コントロールカード９３と通信を行い、入力処理部９１２及び出力処理部９１３の制御を行う。制御部９１４は、ＣＰＵなどのプロセッサ及びメモリ（図示せず）を備える。制御部９１４の処理としては、例えば、入力処理部９１２及び出力処理部９１３の各種の設定処理、及び入力処理部９１２及び出力処理部９１３で検出された警報の収集処理などが挙げられる。なお、帯域制御処理の一部を、制御部９１４のソフトウェア処理により実現することも可能である。
【００２９】
図３は、実施例に係る帯域制御装置を示す構成図である。帯域制御装置は、出力処理部９１３からＰＨＹ／ＭＡＣ部９１１を介して各ポート＃１〜＃Ｎに出力されるパケットの帯域をフローごとに行う。つまり、帯域制御装置は、上記の帯域制御処理を行う。
【００３０】
帯域制御装置は、クレジット制御部１と、負荷監視部２と、キュー管理部４と、スケジューラ部５とを有する。キュー管理部４は、パケットのキューに対する入出力処理などを行い、例えば出力処理部９１３に設けられる。スケジューラ部５は、ＱｏＳに関わる帯域割り当てや優先制御などのスケジューリング処理などを行い、例えばコントロールカード９３内のプロセッサ９３０の機能として構成される。
【００３１】
負荷監視部２は、監視部の一例であり、スケジューラ部５の処理の負荷を監視し、例えばコントロールカード９３内のハードウェアに設けられる。例えばスケジューラ部５がＣＰＵにより構成される場合、負荷監視部２は、ＣＰＵ使用率を監視する。
【００３２】
クレジット制御部１は、制御部の一例であり、スケジューラ部５からキュー管理部４に供給されるクレジット量などを制御する。クレジット量は、キュー管理部４内のキュー４１から一度に読み出し可能なパケットのデータ量、つまり読み出し許容量の一例である。クレジット制御部１は、負荷監視部２の監視結果に応じてスケジューラ部５を制御するため、スケジューラ部５の処理の負荷を動的に低減できる。以下に各部の機能の詳細を説明する。
【００３３】
キュー管理部４は、パケット（ＰＫＴ）分配部４０と、パケットｐをフロー＃１〜＃Ｍ（Ｍ：整数）ごとに格納する複数のキュー４１と、読出処理部４２と、クレジットテーブル４３と、読出判定部４４と、読出順序登録ＦＩＦＯ（First In First Out）４５とを有する。
【００３４】
ＰＫＴ分配部４０は、スイッチカード９２から入力されたパケットのフロー＃１〜＃Ｍを特定し、そのフロー＃１〜＃Ｍに応じたキュー４１にパケットを入力する。つまり、ＰＫＴ分配部４０は、複数のキュー４１にパケットを分配する。ＰＫＴ分配部４０は、例えばパケットに付与されたＶＬＡＮ（Virtual Local Area Network）タグなどからフロー＃１〜＃Ｍを特定する。
【００３５】
キュー４１は、パケット格納部の一例であり、フロー＃１〜＃Ｍごとに設けられて、パケットｐを格納する。パケットｐは、そのフロー＃１〜＃Ｍに応じたキュー４１に格納され、格納順に従い読出処理部４２により読み出される。読出処理部４２は、出力部の一例であり、フロー＃１〜＃Ｍごとに供給されたクレジット量に基づきキュー４１からパケットｐを読み出して、フローに応じたポート＃１〜＃Ｎに出力する。
【００３６】
クレジット量は、キュー４１からの読み出しが許容されるパケットｐのデータ量である読出許容量の一例である。読出処理部４２は、クレジットを消費して、パケットｐを読み出す。このため、読出処理部４２は、クレジット量分のパケットｐを一度に読み出すことができるので、パケットｐごとではなく、クレジット量ごとに読み出し対象のキュー４１を選択すればよい。
【００３７】
クレジットテーブル４３は、フロー＃１〜＃Ｍごとのクレジット量を管理する。クレジットは、スケジューラ部５からフロー＃１〜＃Ｍごとに一定量ずつ供給される。クレジットテーブル４３のクレジット量は、クレジットの供給により加算される。また、読出処理部４２は、パケットｐを読み出したとき、読み出したパケットｐのデータ量に応じてクレジットテーブル４３のクレジット量を減算する。なお、クレジットテーブル４３は、例えばメモリまたはカウンタなどにより構成される。
【００３８】
図３の例において、フロー＃１のクレジット量は−２５８（Byte）であり、フロー＃２のクレジット量は３６０（Byte）である。読出処理部４２は、クレジット量が０より大きければパケットｐを読み出すため、クレジット量は負の値を取り得る。例えば、クレジット量が１０（byte）であるとき、６４（Byte）長のパケットｐが読み出されると、クレジット量は−５４（Byte）（＝１０−６４）となる。
【００３９】
読出判定部４４は、キュー４１に格納されたパケットｐのデータ量及びクレジットテーブル４３のクレジット量に基づき、フロー＃１〜＃Ｍごとのパケットｐの読み出しの可否を判定する。読出判定部４４は、読み出し可能と判定したフローのフローＩＤ（＃１〜＃Ｍ）を読出順序登録ＦＩＦＯ４５に登録する。
【００４０】
より具体的には、読出判定部４４は、フロー＃１〜＃Ｍごとに、キュー４１内のパケットｐのデータ量＞０かつクレジット量＞０とする読み出し条件の成否を判定し、読み出し条件を満たしたフローＩＤを時系列で読出順序登録ＦＩＦＯ４５に登録する。図３の例の場合、フロー＃３、フロー＃２、フロー＃７の順番で読み出し条件が満たされたため、読出順序登録ＦＩＦＯ４５には、「３」、「２」、「７」の順にフローＩＤが登録されている。なお、フロー＃１については、クレジット量が負（−２５８（Byte））であるため、読み出し条件が満たされない。
【００４１】
読出順序登録ＦＩＦＯ４５は、読み出し条件を満たしたフローＩＤが時系列で登録されている。読出処理部４２は、読出順序登録ＦＩＦＯ４５から登録順でフローＩＤを読み出し、読み出したフローＩＤに応じたキュー４１からパケットｐを読み出す。
【００４２】
このように、読出処理部４２は、読み出し対象のキュー４１を簡単に選択することができるので、キュー４１の選択処理の負荷が低減される。
【００４３】
また、ＰＫＴ分配部４０は、要求部の一例であり、キュー４１にパケットが入力されるたびに、スケジューラ部５に一定量のクレジットを要求する。ＰＫＴ分配部４０は、キュー４１にパケットを入力したとき、クレジットの要求メッセージ（ＭＳＧ）をスケジューラ部５に出力する。
【００４４】
ＰＫＴ分配部４０は、パケットのフローＩＤとデータ量、つまりパケット長を検出して、要求メッセージに格納する。これにより、スケジューラ部５は、キュー４１に入力されたパケットｐのデータ量がフロー＃１〜＃Ｍごとに通知される。
【００４５】
スケジューラ部５は、要求受付部５０と、蓄積量テーブル５１と、クレジット供給部５２と、トークン管理部５３と、フローシェーパ５４と、通常フロー選択部５５と、優先フロー選択部５６と、ポートシェーパ５７，５８と、ポート選択部５９とを有する。なお、フローシェーパ５４、通常フロー選択部５５、優先フロー選択部５６、ポートシェーパ５７，５８、及びポート選択部５９は、それぞれ、１つだけ示されているが、複数個設けられてもよい。
【００４６】
要求受付部５０は、ＰＫＴ分配部４０から要求メッセージを受け付け、要求メッセージが示すデータ量を蓄積量テーブル５１に登録する。蓄積量テーブル５１は、キュー４１に蓄積されたパケットｐの仮想的な蓄積量がフロー＃１〜＃Ｍごとに登録されている。なお、蓄積量テーブル５１は、例えばメモリまたはカウンタなどにより構成される。
【００４７】
要求受付部５０は、受け付けた要求メッセージからフローＩＤ及びパケット長を取得して、蓄積量テーブル５１の該当フローＩＤの蓄積量にパケット長を加算する。また、クレジット供給部５２は、フロー＃１〜＃Ｍごとにクレジットを供給し、供給したクレジット量を、蓄積量テーブル５１の該当フローＩＤの蓄積量から減算する。このとき、供給されたクレジット量は、読出処理部４２により読み出されたパケットｐのデータ量と仮定される。
【００４８】
しかし、上述したように、読出処理部４２は、クレジットテーブル４３内のクレジット量＞０であればパケットｐを読み出すため、クレジット量を超えるパケットｐを読み出すことができる。このため、スケジューラ部５により供給されたクレジット量と、読出処理部４２により読み出されたパケットｐのデータ量との間には誤差が存在する。また、クレジットの供給レートがパケットの入力レートを上回る場合、蓄積量テーブル５１の蓄積量は負の値となり得る。
【００４９】
したがって、蓄積量テーブル５１の蓄積量は、キュー４１内のパケットｐの実際の蓄積量とは異なる仮想的な値である。クレジットの供給対象のフロー＃１〜＃Ｍは、蓄積量テーブル５１の蓄積量に基づき選択される。
【００５０】
ポート選択部５９、通常フロー選択部５５、及び優先フロー選択部５６は、クレジットの供給対象のフロー＃１〜＃Ｍを選択して、選択したフローのフローＩＤをクレジット供給部５２に通知する。ポート選択部５９、通常フロー選択部５５、及び優先フロー選択部５６は、フロー＃１〜＃Ｍとポート＃１〜＃Ｎの対応関係及びフロー＃１〜＃Ｍ同士の対応関係に基づいて階層的に配置されている。
【００５１】
図３には、一例としてフロー＃１〜＃４に関するポート選択部５９、通常フロー選択部５５、及び優先フロー選択部５６の配置が示されている。ここで、フロー＃１及びフロー＃２のパケットは同一のポート＃１に出力され、フロー＃１及びフロー＃２の両方とも帯域保証されない、いわゆるベストエフォートのフロー（以下、「非帯域保証フロー」と表記）であると仮定する。また、フロー＃３及びフロー＃４のパケットが同一のポート＃２に出力され、フロー＃３だけが帯域保証されたフロー（以下、「帯域保証フロー」と表記）であると仮定する。
【００５２】
通常フロー選択部５５は、ポート＃１に対応し、蓄積量テーブル５１からフロー＃１とフロー＃２の蓄積量を取得する。優先フロー選択部５６は、ポート＃２に対応し、蓄積量テーブル５１からフロー＃３とフロー＃４の蓄積量を取得する。
【００５３】
ポート選択部５９は、ポート＃１〜＃Ｎを順次に選択する。より具体的には、ポート選択部５９は、ポート＃１に対応する通常フロー選択部５５、及びポート＃２に対応する優先フロー選択部５６を交互に選択する。このとき、通常フロー選択部５５は、ポートシェーパ５７のトークンバケットに蓄積されたトークン量が０より大きい場合、配下のフロー＃１、＃２をクレジット供給対象として選択可能であり、トークン量が０以下である場合、配下のフロー＃１、＃２をクレジット供給対象として選択不可能である。また、優先フロー選択部５６は、ポートシェーパ５８のトークンバケットに蓄積されたトークン量が０より大きい場合、配下のフロー＃３、＃４をクレジット供給対象として選択可能であり、トークン量が０以下である場合、配下のフロー＃３、＃４をクレジット供給対象として選択不可能である。
【００５４】
ポートシェーパ５７，５８は、トークン管理部５３からトークンが供給される。ポート＃１の出力レートはポートシェーパ５７のトークンの供給レートに基づき制御され、ポート＃２の出力レートはポートシェーパ５８のトークンの供給レートに基づき制御される。
【００５５】
このように、ポートシェーパ５７，５８のトークン量は、ポート＃１、＃２ごとに割り当てられる帯域量であり、クレジット供給部５２は、ポートシェーパ５７，５８のトークン量に基づき、選択中のフロー＃１〜＃Ｍにクレジットを供給する。
【００５６】
通常フロー選択部５５は、ポート選択部５９から選択されるたびに、フロー＃１とフロー＃２の一方を選択する。通常フロー選択部５５は、例えばラウンドロビン方式に基づきフロー＃１とフロー＃２を公平に選択する。通常フロー選択部５５は、選択したフロー＃１、＃２の蓄積量を蓄積量テーブル５１から取得してポート選択部５９に通知する。
【００５７】
また、優先フロー選択部５６は、ポート選択部５９から選択されるたびに、フロー＃３とフロー＃４の一方を選択する。優先フロー選択部５６は、例えば「Strict Priority」方式に基づき、フロー＃３とフロー＃４のうち、フロー＃３を優先的に選択する。
【００５８】
このとき、フロー＃３は、フローシェーパ５４のトークンバケットに蓄積されたトークン量が０より大きい場合、選択可能であり、トークン量が０以下である場合、選択不可能である。フローシェーパ５４は、トークン管理部５３からトークンが供給される。フロー＃３は、フローシェーパ５４に対するトークンの供給レートに応じた帯域が保証される。優先フロー選択部５６は、選択したフロー＃３、＃４の蓄積量を取得してポート選択部５９に通知する。
【００５９】
ポート選択部５９は、通常フロー選択部５５または優先フロー選択部５６から通知された蓄積量が０より大きい場合、選択されたフロー＃１〜＃ＭのフローＩＤをクレジット供給部５２に通知する。一方、ポート選択部５９は、蓄積量が０以下である場合、選択中のフローＩＤを通知せず、次のポートを選択する。すなわち、クレジット供給部５２は、トークン量＞０かつ蓄積量＞０とする供給条件を満たしたフロー＃１〜＃Ｍを選択し、選択したフロー＃１〜＃Ｍにクレジットを供給する。フローの選択順序について、以下に例を挙げて説明する。
【００６０】
まず、ポート選択部５９は、ポートシェーパ５７のトークン量＞０の場合、ポート＃１に対応する通常フロー選択部５５を選択する。通常フロー選択部５５は、フロー＃１を選択して、フロー＃１の蓄積量をポート選択部５９に通知する。ポート選択部５９は、フロー＃１の蓄積量が３０００（＞０）であるため、クレジット供給部５２にフローＩＤ「＃１」を通知する。このため、クレジット供給部５２は、フロー＃１にクレジットを供給する。
【００６１】
次に、ポート選択部５９は、ポートシェーパ５８のトークン量＞０の場合、ポート＃２に対応する優先フロー選択部５６を選択する。優先フロー選択部５６は、フローシェーパ５４のトークン量＞０の場合、フロー＃３を選択して、フロー＃３の蓄積量をポート選択部５９に通知する。ポート選択部５９は、フロー＃３の蓄積量が−８００（≦０）であるため、クレジット供給部５２にフローＩＤ「＃３」を通知しない。このため、クレジット供給部５２は、フロー＃３にはクレジットを供給しない。なお、仮にフロー＃３の蓄積量＞０であれば、フロー＃３にもクレジットが供給される。
【００６２】
次に、ポート選択部５９は、ポートシェーパ５７のトークン量＞０の場合、ポート＃２に対応する通常フロー選択部５５を選択する。通常フロー選択部５５は、フロー＃２を選択して、フロー＃２の蓄積量をポート選択部５９に通知する。ポート選択部５９は、フロー＃２の蓄積量が２８００（＞０）であるため、クレジット供給部５２にフローＩＤ「＃２」を通知する。このため、クレジット供給部５２は、フロー＃２にクレジットを供給する。以降は、同様にフロー＃１〜＃Ｍの選択が繰り返される。
【００６３】
このように、スケジューラ部５は、ポート＃１〜＃Ｎを順次に選択し、ポートを選択するたびに選択中のポートに応じたフロー＃１〜＃Ｍの１つを選択し、その選択したフローにクレジットを供給する。これにより、全てのフロー＃１〜＃Ｍにクレジットの供給の機会が与えられる。
【００６４】
また、トークン管理部５３は、ポート単位またはフロー単位のパケットの出力レートを管理する。トークン管理部５３は、後述するフロー管理テーブルに基づきフローシェーパ５４へのトークンの供給レートを制御し、後述するポート管理テーブルに基づきポートシェーパ５７，５８へのトークンの供給レートを制御する。
【００６５】
クレジット供給部５２は、キュー管理部４にクレジットの供給量と供給対象のフローＩＤを通知する。これにより、クレジットテーブル４３が更新される。クレジット供給部５２は、クレジットを供給すると、トークン管理部５３にキュー管理部４にクレジットの供給量と供給対象のフローＩＤを通知する。トークン管理部５３は、該当するフローに対応するポートシェーパ５７，５８のトークン量からクレジットの供給量を減算する。また、帯域保証フローの場合、トークン管理部５３は、該当するフローに対応するフローシェーパ５４のトークン量からクレジットの供給量を減算する。
【００６６】
負荷監視部２は、上述したようにスケジューラ部５の処理の負荷を監視して、監視結果を、アラーム情報としてクレジット制御部１に通知する。クレジット制御部１は、アラーム情報に応じて、クレジット供給部５２のクレジットの供給量及びトークン管理部５３のトークンの減算量を制御する。このとき、クレジット制御部１は、ポート選択部５９から選択中のフローＩＤを取得して、フロー＃１〜＃Ｍの種別（帯域制御フローまたは非帯域制御フロー）に応じて制御内容を異ならせる。
【００６７】
このように、クレジット制御部１は、負荷監視部２による監視結果に応じてスケジューラ部５を制御するため、クレジットの供給量が適時に制御される。なお、後述するように、負荷監視部２は、アラーム情報を要求受付部５０に通知してもよい（点線参照）。
【００６８】
図４は、負荷監視部２の処理の一例を示すフローチャートである。本処理は、例えば周期的に実行される。
【００６９】
まず、負荷監視部２は、スケジューラ部５の処理の負荷を取得する（ステップＳｔ１）。スケジューラ部５が例えばＣＰＵの機能として構成される場合、負荷はＣＰＵ使用率やメモリ使用率に基づいて判定される。
【００７０】
次に、負荷監視部２は、取得した負荷を閾値Ｌｔｈと比較する（ステップＳｔ２）。負荷をＣＰＵ使用率とした場合、閾値Ｌｔｈは例えば７０（％）である。
【００７１】
負荷監視部２は、負荷＞Ｌｔｈの場合（ステップＳｔ２のＹｅｓ）、アラーム情報として、アラーム発生通知をクレジット制御部１に出力して（ステップＳｔ３）、処理を終了する。また、負荷監視部２は、負荷≦Ｌｔｈの場合（ステップＳｔ２のＮｏ）、アラーム情報として、アラーム解除通知をクレジット制御部１に出力して（ステップＳｔ４）、処理を終了する。このようにして、負荷監視部２の処理は実行される。
【００７２】
なお、スケジューラ部５が複数のＣＰＵから構成されている場合、負荷監視部２は、ＣＰＵごとにステップＳｔ２の判定処理を行い、何れかのＣＰＵについて負荷＞Ｌｔｈが成立するとアラーム発生通知を出力すればよい。また、負荷監視部２は、以下のようにアラーム情報を、負荷に応じて複数の段階に区別して通知してもよい。
【００７３】
図５は、負荷監視部２の処理の他例を示すフローチャートである。本処理は、例えば周期的に実行される。
【００７４】
まず、負荷監視部２は、スケジューラ部５の処理の負荷を取得する（ステップＳｔ１１）。次に、負荷監視部２は、取得した負荷を閾値Ｌｔｈ１と比較する（ステップＳｔ１２）。閾値Ｌｔｈ１は例えば９０（％）である。
【００７５】
負荷監視部２は、負荷＞Ｌｔｈ１の場合（ステップＳｔ１２のＹｅｓ）、アラーム情報として、アラームレベル「３」通知をクレジット制御部１に出力して（ステップＳｔ１６）、処理を終了する。また、負荷監視部２は、負荷≦Ｌｔｈ１の場合（ステップＳｔ１２のＮｏ）、取得した負荷を閾値Ｌｔｈ２と比較する（ステップＳｔ１３）。閾値Ｌｔｈ２は例えば７０（％）である。
【００７６】
負荷監視部２は、負荷＞Ｌｔｈ２の場合（ステップＳｔ１３のＹｅｓ）、アラーム情報として、アラームレベル「２」通知をクレジット制御部１に出力して（ステップＳｔ１７）、処理を終了する。また、負荷監視部２は、負荷≦Ｌｔｈ２の場合（ステップＳｔ１３のＮｏ）、取得した負荷を閾値Ｌｔｈ３と比較する（ステップＳｔ１４）。閾値Ｌｔｈ３は例えば５０（％）である。
【００７７】
負荷監視部２は、負荷＞Ｌｔｈ３の場合（ステップＳｔ１４のＹｅｓ）、アラーム情報として、アラームレベル「１」通知をクレジット制御部１に出力して（ステップＳｔ１８）、処理を終了する。また、負荷監視部２は、負荷≦Ｌｔｈ３の場合（ステップＳｔ１４のＮｏ）、アラーム情報として、アラーム解除通知をクレジット制御部１に出力して（ステップＳｔ１５）、処理を終了する。このようにして、負荷監視部２の処理は実行される。
【００７８】
上述したように、アラーム情報をアラームレベル「１」〜「３」に分けて通知することにより、クレジット制御部１は、クレジットの供給量をアラームレベル「１」〜「３」に応じて制御することができる。例えば通常時のクレジットの供給量を１０（KByte）とすると、クレジット制御部１は、クレジットの供給量を、アラームレベル「１」のとき、３０(KByte)とし、アラームレベル「２」のとき、５０(KByte)とし、アラームレベル「３」のとき、１００(KByte)とすることが可能となる。
【００７９】
このように、クレジット制御部１は、負荷に応じてクレジットの供給量が増加するように、スケジューラ部５を制御する場合、クレジットの供給量が負荷に応じ適切に制御される。以下にクレジット制御部１の動作を説明する。
【００８０】
クレジット制御部１は、以下に述べるように、フロー＃１〜＃Ｍの間で帯域制御が不公平とならないように、クレジットの供給対象として選択されたフロー＃１〜＃Ｍの種別に応じてクレジットの供給を制御する。
【００８１】
クレジット制御部１は、例えば図３のフロー＃３のような帯域保証フローが選択された場合、クレジットの供給量が増加するようにスケジューラ部５を制御する。帯域保証フローは、フローシェーパ５４により帯域が制御されるため、クレジットの供給量が変更されても、トータルで見ると保証帯域に応じた一定のクレジット量が供給される。このため、帯域保証フローの場合、クレジットの供給量が変更されても、他のフロー＃１〜＃Ｍの帯域に影響がない。
【００８２】
また、クレジット制御部１は、例えば図３のフロー＃１及びフロー＃２のような非帯域保証フローが選択された場合、ポートシェーパ５７のトークン量に応じてクレジットの供給を制御する。クレジット制御部１は、ポート選択部５９が選択中のポートのトークン量が所定量Ｋより大きいとき、クレジットの供給量が増加するようにスケジューラ部５を制御する。
【００８３】
これは、トークン量に余剰分がある場合、クレジットの供給量を変更しても、同一ポート＃１〜＃Ｎに対応する他のフロー＃１〜＃Ｍにも十分な帯域が割り当てられるため、他のフロー＃１〜＃Ｍの帯域への影響がないからである。この制御により、クレジット制御部１は、非帯域保証フローの場合でも、クレジットの供給量を増加させることでスケジューラ部５の処理の負荷を低減できる。
【００８４】
一方、クレジット制御部１は、ポート選択部５９が選択中のポートのトークン量が所定量Ｋ以下であるとき、クレジットの供給量を増加させない。これは、トークン量に余剰分がない場合、クレジットの供給量を変更すると、同一ポート＃１〜＃Ｎに対応する他のフロー＃１〜＃Ｍに割り当てる帯域が不足するため、フロー＃１〜＃Ｍ間で帯域の不公平が生じるからである。
【００８５】
しかし、上記の場合、クレジット制御部１は、ポート選択部５９のポート＃１〜＃Ｎの選択処理をスキップさせる処理（以下、「スキップ処理」と表記）を実行するように、スケジューラ部５に指示する。より具体的には、クレジット制御部１は、ポート選択部５９のポートの選択が切り替わる前に、選択中のポートに応じた他のフロー＃１〜＃Ｍにもクレジットが供給されるように、スケジューラ部５を制御する。
【００８６】
このため、選択中のポート＃１〜＃Ｎに対応する各フロー＃１〜＃Ｍには、ポートの選択が行われずに、クレジットが供給される。したがって、スケジューラ部５は、ポート＃１〜＃Ｎの選択を、該当するフロー数分だけスキップすることができるので、処理の負荷が低減される。
【００８７】
図６は、クレジット制御部１の処理の一例を示すフローチャートである。本処理は、例えば周期的に実行される。
【００８８】
まず、クレジット制御部１は、負荷監視部２からのアラーム情報に基づいてアラームの発生の有無を判定する（ステップＳｔ６１）。クレジット制御部１は、アラームが発生している場合（ステップＳｔ６１のＹｅｓ）、クレジット供給部５２が供給対象として選択中のフロー＃１〜＃Ｍの種別を取得する（ステップＳｔ６２）。より具体的には、クレジット制御部１は、ポート選択部５９から選択中のフローＩＤを取得し、取得したフローＩＤに基づきトークン管理部５３のフロー管理テーブルを参照することにより、フローの種別を取得する。
【００８９】
図７にはフロー管理テーブルの一例が示されている。フロー管理テーブルには、フローごとに種別（帯域保証または非帯域保証）及びレートが登録されている。レートは、帯域保証フローについてのみ登録されており、トークン管理部５３は、帯域保証フローのレートに基づきフローシェーパ５４にトークンを供給する。
【００９０】
再び図６を参照すると、クレジット制御部１は、フロー種別が帯域保証フローである場合（ステップＳｔ６３のＹｅｓ）、クレジットの供給量が一定量だけ増加するようにスケジューラ部５を制御する（ステップＳｔ６４）。このとき、クレジット制御部１は、クレジットの供給量を、例えば１０（Kbyte）から１００（KByte）に増加させる。
【００９１】
このように、クレジット制御部１は、スケジューラ部５の負荷が所定の閾値Ｌｔｈを上回ったとき、クレジットの供給量が一定量だけ増加するように、スケジューラ部５を制御する。したがって、スケジューラ部５は、負荷の増加に応じ、クレジットの供給レートを抑えることができるため、処理の負荷が低減される。
【００９２】
次に、クレジット制御部１は、クレジットの供給量の増加に合わせて、クレジット供給時のポートシェーパ５８のトークンの減算量が増加するようにトークン管理部５３を制御する（ステップＳｔ６５）。このとき、クレジット制御部１は、トークンの減算量を、例えば１０（Kbyte）から１００（KByte）に増加させる。このため、ポート単位の帯域の管理に矛盾が生ずることはない。
【００９３】
次に、クレジット制御部１は、クレジットの供給量の増加に合わせて、クレジット供給時のフローシェーパ５４のトークンの減算量が増加するようにトークン管理部５３を制御する（ステップＳｔ６６）。このとき、クレジット制御部１は、トークンの減算量を、例えば１０（Kbyte）から１００（KByte）に増加させる。このため、帯域保証フローの帯域の管理に矛盾が生ずることはない。
【００９４】
一方、クレジット制御部１は、フロー種別が非帯域保証フロー（ベストエフォートのフロー）である場合（ステップＳｔ６３のＮｏ）、そのフローに対応するポートシェーパ５７のトークン量をトークン管理部５３から取得する（ステップＳｔ６７）。次に、クレジット制御部１は、取得したトークン量を所定量Ｋと比較する（ステップＳｔ６８）。
【００９５】
クレジット制御部１は、トークン量＞Ｋの場合（ステップＳｔ６８のＹｅｓ）、クレジットの供給量が一定量だけ増加するようにスケジューラ部５を制御する（ステップＳｔ６９）。このとき、クレジット制御部１は、クレジットの供給量を、例えば１０（Kbyte）から１００（KByte）に増加させる。
【００９６】
次に、クレジット制御部１は、クレジットの供給量の増加に合わせて、クレジット供給時のポートシェーパ５７のトークンの減算量が増加するようにトークン管理部５３を制御する（ステップＳｔ７０）。このとき、クレジット制御部１は、トークンの減算量を、例えば１０（Kbyte）から１００（KByte）に増加させる。このため、ポート単位の帯域の管理に矛盾が生ずることはない。
【００９７】
なお、図５の例のように、アラーム情報としてアラームレベル「１」〜「３」が通知される場合、上記のステップＳｔ６４，Ｓｔ６９における増加後のクレジットの供給量、及び上記のステップＳｔ６５，Ｓｔ６６，Ｓｔ７０における増加後のトークンの減算量は、アラームレベルに応じて変化する。
【００９８】
クレジット制御部１は、トークン量≦Ｋの場合（ステップＳｔ６８のＮｏ）、スケジューラ部５にスキップ処理を指示する（ステップＳｔ７１）。これにより、クレジット供給部５２は、選択中のフロー＃１〜＃Ｍと同一ポートに対応する他のフロー＃１〜＃Ｍに、ポート＃１〜＃Ｎの選択を行うことなく、クレジットを供給する。このため、クレジットを供給した他のフロー数と同じ回数だけポート＃１〜＃Ｎの選択をスキップすることが可能となり、スケジューラ部５の処理の負荷が低減される。
【００９９】
また、ステップＳｔ６１の判定処理において、アラームが発生していない場合（ステップＳｔ６１のＮｏ）、クレジット制御部１は、クレジットの供給量及びトークンの減算量を増加前の値に戻すようにスケジューラ部５を制御する（ステップＳｔ７２）。このとき、クレジット制御部１は、クレジットの供給量を１００（Kbyte）から１０（KByte）に戻し、トークンの減算量を１００（Kbyte）から１０（KByte）に戻す。なお、アラームが発生していないことは、アラーム解除通知により判定される。
【０１００】
このように、クレジット制御部１は、スケジューラ部５の処理の負荷が閾値Ｌｔｈ以下であるとき、クレジットの供給量を増加前の値に戻すように、スケジューラ部５を制御する。このため、クレジット制御部１は、スケジューラ部５の処理の負荷が低下した場合、クレジットの供給量を減少させることによりトラフィックのバースト性を低減できる。このようにして、クレジット制御部１の処理は実行される。
【０１０１】
次にスケジューラ部５の処理について説明する。
【０１０２】
図８は、要求受付部５０の処理の一例を示すフローチャートである。本処理は、例えば周期的に実行される。
【０１０３】
まず、要求受付部５０は、キュー管理部４からの要求メッセージの有無を判定する（ステップＳｔ２１）。キュー管理部４から受信された要求メッセージは、後述するようにバッファに格納されている。
【０１０４】
要求受付部５０は、要求メッセージがない場合（ステップＳｔ２１のＮｏ）、処理を終了する。また、要求受付部５０は、要求メッセージがある場合（ステップＳｔ２１のＹｅｓ）、その要求を受け付ける（ステップＳｔ２２）。このとき、要求受付部５０は、要求メッセージをバッファから読み出す。なお、要求受付部５０は、後述するように、スケジューラ部５の処理の負荷が閾値Ｌｔｈを超える場合、複数の要求メッセージをまとめて受け付けてもよい。
【０１０５】
次に、要求受付部５０は、要求メッセージの内容に応じて蓄積量テーブル５１を更新する（ステップＳｔ２３）。このとき、要求受付部５０は、要求メッセージに格納されたパケット長を、蓄積量テーブル５１の該当フロー＃１〜＃Ｍの蓄積量に加算する。このようにして、要求受付部５０の処理は実行される。
【０１０６】
図９は、スケジューリング処理の一例を示すフローチャートである。本処理は、例えば周期的に実行されるが、その周期はクレジットの供給量に応じて変化する。
【０１０７】
まず、スケジューラ部５は、ポート選択部５９によりポート＃１〜＃Ｎを選択する（ステップＳｔ３１）。より具体的には、ポート選択部５９は、ポート＃１〜＃Ｎに対応する通常フロー選択部５５または優先フロー選択部５６を選択する。
【０１０８】
次に、スケジューラ部５は、ポート選択部５９が選択したポート＃１〜＃Ｎに対応する５７のトークン量が０より大きいか否かを判定する（ステップＳｔ３２）。スケジューラ部５は、トークン量≦０の場合（ステップＳｔ３２のＮｏ）、処理を終了する。また、スケジューラ部５は、トークン量＞０の場合（ステップＳｔ３２のＹｅｓ）、通常フロー選択部５５または優先フロー選択部５６によりフロー＃１〜＃Ｍを選択する（ステップＳｔ３３）。
【０１０９】
スケジューラ部５は、選択したフロー＃１〜＃Ｍが非帯域保証フロー（ベストエフォートのフロー）である場合（ステップＳｔ３４のＮｏ）、クレジット制御部１からのスキップ処理の指示の有無を判定する（ステップＳｔ３５）。スケジューラ部５は、スキップ処理の指示がある場合（ステップＳｔ３５のＹｅｓ）、後述するスキップ処理を実行する（ステップＳｔ３６）。スケジューラ部５は、スキップ処理の指示がない場合（ステップＳｔ３５のＮｏ）、後述するステップＳｔ３８以降の処理を実行する。
【０１１０】
また、スケジューラ部５は、選択したフロー＃１〜＃Ｍが帯域保証フローである場合（ステップＳｔ３４のＹｅｓ）、そのフロー＃１〜＃Ｍに対応するフローシェーパ５４のトークン量が０より大きいか否かを判定する（ステップＳｔ３７）。スケジューラ部５は、トークン量≦０の場合（ステップＳｔ３７のＮｏ）、処理を終了する。また、スケジューラ部５は、トークン量＞０の場合（ステップＳｔ３７のＹｅｓ）、クレジット供給部５２によりクレジットをキュー管理部４に供給する（ステップＳｔ３９）。
【０１１１】
次に、スケジューラ部５は、トークン管理部５３によりトークン量を減算して（ステップＳｔ４０）、処理を終了する。このとき、スケジューラ部５は、選択したポート＃１〜＃Ｎが帯域保証フローである場合、ポートシェーパ５８及びフローシェーパ５４の各トークン量を減算し、選択したポート＃１〜＃Ｎが非帯域保証フローである場合、ポートシェーパ５７のトークン量を減算する。このようにして、スケジューリング処理は実行される。
【０１１２】
図１０は、スキップ処理の一例を示すフローチャートである。本処理は、図９のステップＳｔ３６の処理に対応する。
【０１１３】
スケジューラ部５は、蓄積量テーブル５１から、選択したフロー＃１〜＃Ｍの蓄積量を取得する（ステップＳｔ５１）。次に、スケジューラ部５は、取得した蓄積量が０より大きいか否かを判定する（ステップＳｔ５２）。
【０１１４】
スケジューラ部５は、蓄積量＞０の場合（ステップＳｔ５２のＹｅｓ）、クレジット供給部５２によりクレジットをキュー管理部４に供給する。このときのクレジットの供給量は、増加しておらず、元の値である。また、スケジューラ部５は、蓄積量≦０の場合（ステップＳｔ５２のＮｏ）、クレジットの供給処理は行わない。
【０１１５】
次に、スケジューラ部５は、選択したフロー＃１〜＃Ｍと同一ポート＃１〜＃Ｎに対応する他のフローのうち、未選択のフローの有無を判定する（ステップＳｔ５４）。スケジューラ部５は、未選択のフローがある場合（ステップＳｔ５４のＹｅｓ）、該当するフローの１つを選択して（ステップＳｔ５６）、上記のステップＳｔ５１〜Ｓｔ５４の処理を繰り返す。
【０１１６】
次に、スケジューラ部５は、未選択のフローがない場合（ステップＳｔ５４のＮｏ）、ステップＳｔ５３の処理におけるクレジットの供給量の合計をポートシェーパ５７のトークン量から減算して（ステップＳｔ５５）、処理を終了する。このようにして、スキップ処理は実行される。
【０１１７】
スキップ処理において、スケジューラ部５は、ポート＃１〜＃Ｎを選択することなく、同一ポートに対応する各フロー＃１〜＃Ｍにクレジットを供給する。したがって、スケジューラ部５は、ポート＃１〜＃Ｎの選択処理を、クレジットを供給したフロー数分だけスキップできる。
【０１１８】
例えば、フロー＃１〜＃１０が同一ポートに対応する場合、クレジット供給部５２が、非帯域保証フローであるフロー＃１をクレジットの供給対象として選択した場合、残りのフロー＃２〜＃１０にもクレジットを供給する。この場合、フロー＃２〜＃１０と同数の９回分のポート選択処理がスキップされたことになる。これにより、スケジューラ部５は、処理の負荷が低減される。
【０１１９】
次に、クレジットの供給動作を、例を挙げて説明する。
【０１２０】
図１１には、低負荷時（負荷＜Ｌｔｈ）の非帯域保証フローへのクレジット供給動作の一例が示されている。図１１において、図３と共通する構成については同一の符号を付し、その説明を省略する。また、符号５４ａはフローシェーパ５４のトークンバケットを示し、符号５７ａ，５８ａはポートシェーパ５７，５８のトークンバケットを示す。
【０１２１】
本例において、フロー＃１Ａ〜＃１Ｚはポート＃１に対応し、フロー＃２Ａ，２Ｂ，・・・はポート＃２に対応する。フロー＃１Ａ〜＃１Ｚ及びフロー＃２Ｂは非帯域保証フローであり、フロー＃２Ａは帯域保証フローである。本例では、クレジット供給部５２が非帯域保証フローを選択した場合の動作を挙げる。
【０１２２】
クレジット供給部５２は、ポート＃１を選択し、さらにポート＃１に対応するフロー＃１Ａを選択し、１０（KByte）のクレジットを供給する（点線参照）。このとき、ポートシェーパ５７のトークンバケット５７ａから１０（KByte）のトークン量が減算される。クレジット供給部５２は、ポート＃１の選択後、ポート＃２を選択する（「次選択」参照）。
【０１２３】
また、図１２には、高負荷時（負荷≧Ｌｔｈ）の非帯域保証フローへのクレジット供給動作の一例が示されている。図１２において、図１１と共通する構成については同一の符号を付し、その説明を省略する。本例は、図６のステップＳｔ６９，Ｓｔ７０の処理が行われた場合の動作である。
【０１２４】
クレジット供給部５２は、ポート＃１を選択し、さらにポート＃１に対応するフロー＃１Ａを選択する。クレジット供給部５２は、選択したフロー＃１Ａに対応するポートシェーパ５７のトークンバケット５７ａのトークン量が所定量Ｋより多いため、フロー＃１Ａに１００（KByte）のクレジットを供給する（点線参照）。このとき、帯域管理に矛盾が生じないように、ポートシェーパ５７のトークンバケット５７ａから１００（KByte）のトークン量が減算される。クレジット供給部５２は、ポート＃１の選択後、ポート＃２を選択する（「次選択」参照）。
【０１２５】
本例において、フロー＃１Ａには低負荷時の１０倍のクレジット（＝１００（KByte）÷１０（KByte））が供給されるため、例えば次のポート＃２の選択に通常の１０倍の時間を要したとしても、スケジューリング処理の性能は維持される。
【０１２６】
また、図１３は、高負荷時の帯域保証フローへのクレジット供給動作の一例が示されている。図１３において、図１１と共通する構成については同一の符号を付し、その説明を省略する。本例は、図６のステップＳｔ６４〜Ｓｔ６６の処理が行われた場合の動作である。
【０１２７】
クレジット供給部５２は、上記の動作の後、ポート＃２を選択し、さらにポート＃２に対応するフロー＃２Ａを選択する。フロー＃２Ａは帯域保証フローであるため、クレジット供給部５２は、選択したフロー＃２Ａに対応するポートシェーパ５８のトークンバケット５８ａのトークン量またはフローシェーパ５４のトークンバケット５４ａのトークン量によらず、フロー＃２Ａに１００（KByte）のクレジットを供給する（点線参照）。このとき、帯域管理に矛盾が生じないように、ポートシェーパ５８のトークンバケット５８ａ及びフローシェーパ５４のトークンバケット５４ａから１００（KByte）のトークン量が減算される。
【０１２８】
図１４は、高負荷時の非帯域保証フロー及び帯域保証フローへのクレジット供給動作の一例を示すシーケンス図である。図１４において、スケジューラ部５の処理は、ポート単位のものとフロー単位のものに分けて示されている。なお、符号Ｔａは、図１２に示された動作のシーケンスを示し、符号Ｔｂは、図１３に示された動作のシーケンスを示す。
【０１２９】
負荷監視部２は、アラーム発生通知をクレジット制御部１に出力する。次に、スケジューラ部５は、ポート＃１を選択し（符号Ｓ１参照）、フロー＃１Ａを選択する（符号Ｓ２参照）。次に、スケジューラ部５は、フロー種別及びポートシェーパ５７のトークン量を含むフロー情報をクレジット制御部１に通知する。
【０１３０】
クレジット制御部１は、フロー情報に基づき、フロー種別が非帯域保証フローであり、かつ、トークン量＞Ｋと判定するため、クレジットの供給量及びトークンの減算量を１００（KByte）に変更するように、クレジット変更指示をスケジューラ部５に出力する。スケジューラ部５は、クレジット変更指示に従い、ポートシェーパ５７のトークン量から１００（KByte）を減算し（符号Ｓ３参照）、１００（KByte）のクレジットをフロー＃１Ａに供給する（符号Ｓ４参照）。
【０１３１】
次に、スケジューラ部５は、ポート＃２を選択し（符号Ｓ５参照）、フロー＃２Ａを選択する（符号Ｓ６参照）。次に、スケジューラ部５は、フロー種別を含むフロー情報をクレジット制御部１に通知する。
【０１３２】
クレジット制御部１は、フロー情報に基づき、フロー種別が帯域保証フローであると判定するため、クレジットの供給量及びトークンの減算量を１００（KByte）に変更するように、クレジット変更指示をスケジューラ部５に出力する。スケジューラ部５は、クレジット変更指示に従い、ポートシェーパ５８のトークン量から１００（KByte）を減算し（符号Ｓ７参照）、フローシェーパ５４のトークン量から１００（KByte）を減算する（符号Ｓ８参照）。また、スケジューラ部５は、１００（KByte）のクレジットをフロー＃２Ａに供給する（符号Ｓ９参照）。
【０１３３】
上述したように、本例において、フロー＃１Ａには低負荷時の１０倍のクレジットが供給されるため、例えば次のポート＃２の選択に通常の１０倍の時間ΔＴを要したとしても、スケジューリング処理の性能は維持される。
【０１３４】
また、図１５には、高負荷時の非帯域保証フローへのクレジット供給動作の他例が示されている。図１５において、図１１と共通する構成については同一の符号を付し、その説明を省略する。本例は、図６のステップＳｔ７１の処理が行われた場合の動作である。
【０１３５】
本例では、蓄積量テーブル５１において、ポート＃１に対応するフロー＃１Ａ〜＃１Ｚのうち、フロー＃１Ａ〜＃１Ｊの蓄積量だけが０より大きいと仮定する。換言すれば、フロー＃１Ａ〜＃１Ｊだけがクレジットを要求している。
【０１３６】
クレジット供給部５２は、ポート＃１を選択し、さらにポート＃１に対応するフロー＃１Ａを選択する。クレジット供給部５２は、選択したフロー＃１Ａに対応するポートシェーパ５７のトークンバケット５７ａのトークン量が所定量Ｋより少ないため、フロー＃１Ａに１０（KByte）のクレジットを供給する（点線参照）。つまり、クレジットの供給量は増加しない。
【０１３７】
次に、クレジット供給部５２は、１０個のフロー＃１Ｂ，フロー＃１Ｃ，・・・，フロー＃１Ｊを順次に選択して１０（KByte）のクレジットを供給する（「次選択」参照）。
このとき、帯域管理に矛盾が生じないように、ポートシェーパ５７のトークンバケット５７ａから、１０個のフロー＃１Ａ，フロー＃１Ｂ，・・・，フロー＃１Ｊのクレジットの供給量の合計である１００（KByte）のトークン量が減算される。
【０１３８】
このように、クレジット制御部１は、１回のポート選択で１０個のフロー＃１Ａ，フロー＃１Ｂ，・・・，フロー＃１Ｊにクレジットを供給する。クレジット制御部１は、低負荷時には、１回のポート選択で１個のフロー＃１〜＃Ｍにクレジットを供給するため、９回分のポート選択をスキップしたことになる。これにより、スケジューラ部５は、処理の負荷が低減される。
【０１３９】
図１６は、高負荷時の非帯域保証フロー及び帯域保証フローへのクレジット供給動作の他例を示すシーケンス図である。本シーケンスは、図１５に示された動作例に対応する。
【０１４０】
負荷監視部２は、アラーム発生通知をクレジット制御部１に出力する。次に、スケジューラ部５は、ポート＃１を選択し（符号Ｓ１１参照）、フロー＃１Ａを選択する（符号Ｓ１２参照）。次に、スケジューラ部５は、フロー種別及びポートシェーパ５７のトークン量を含むフロー情報をクレジット制御部１に通知する。
【０１４１】
クレジット制御部１は、フロー情報に基づき、フロー種別が非帯域保証フローであり、かつ、トークン量≦Ｋと判定するため、スキップ処理の指示をスケジューラ部５に出力する。スケジューラ部５は、スキップ処理の指示に従い、ポートシェーパ５７のトークン量から、クレジットの供給量の合計である１００（KByte）を減算する（符号Ｓ１３参照）。また、スケジューラ部５は、１０（KByte）のクレジットをフロー＃１Ａに供給する（符号Ｓ１４参照）。
【０１４２】
次に、スケジューラ部５は、フロー＃１Ｂを選択して（符号Ｓ１５参照）、１０（KByte）のクレジットを供給する（符号Ｓ１６参照）。その後、スケジューラ部５は、順次にフロー＃１Ｃ〜＃１Ｉを選択して、１０（KByte）のクレジットを供給し、最後にフロー＃１Ｊを選択して（符号Ｓ１７参照）、１０（KByte）のクレジットを供給する（符号Ｓ１８参照）。
【０１４３】
これにより、９回分のポート選択がスキップされるため、スケジューラ部５の処理の負荷が低減される。
【０１４４】
なお、例えば、全てのフロー＃１〜＃Ｍが非帯域保証フローである場合、以下の例のように全てのフロー＃１〜＃Ｍについて一括でクレジットの供給量を増加させてもよい。この場合、クレジットの供給量の変更の所要時間が延びるため、その変更途中でアラームが停止し、クレジットの供給量を元の値に戻すとき、一部のフローだけのクレジットの供給量が増加した状態が生ずることでフロー＃１〜＃Ｍ間の帯域制御が不公平となる。これを回避するため、以下に述べるように、クレジットの供給量を元の値に戻すまでに一定の待機時間を設けてもよい。
【０１４５】
図１７は、他の実施例におけるクレジット制御部１の処理の一例を示すフローチャートである。本処理は、例えば周期的に実行される。
【０１４６】
まず、クレジット制御部１は、アラームの発生の有無を判定する（ステップＳｔ８１）。このとき、アラーム発生の有無は、負荷監視部２からのアラーム情報に基づき判定される。
【０１４７】
次に、クレジット制御部１は、変更フラグＦｌｇが「１」であるか否かを判定する（ステップＳｔ８３）。変更フラグＦｌｇは、「０」の場合、クレジットの供給量が変更されたことを示し、「１」の場合、クレジットの供給量の変更がないことを示す。
【０１４８】
クレジット制御部１は、変更フラグＦｌｇ＝「１」の場合（ステップＳｔ８２のＹｅｓ）、処理を終了する。また、クレジット制御部１は、変更フラグＦｌｇ＝「０」の場合（ステップＳｔ８２のＮｏ）、変更フラグＦｌｇ＝「１」とする（ステップＳｔ８３）。次に、クレジット制御部１は、クレジットの供給量を元の値に戻すための待機時間を計測するため、タイマをスタートさせる（ステップＳｔ８４）。
【０１４９】
次に、クレジット制御部１は、全てのフロー＃１〜＃Ｍのクレジットの供給量が一定量だけ増加するようにスケジューラ部５を制御する（ステップＳｔ８５）。次に、クレジット制御部１は、全てのポートシェーパ５７，５８のトークン量の減算量が一定量だけ増加するようにスケジューラ部５を制御し（ステップＳｔ８６）、処理を終了する。
【０１５０】
また、クレジット制御部１は、アラームが発生していない場合（ステップＳｔ８１のＮｏ）、変更フラグＦｌｇが「１」であるか否かを判定する（ステップＳｔ８８）。クレジット制御部１は、変更フラグＦｌｇ＝「０」の場合（ステップＳｔ８８のＮｏ）、処理を終了する。また、クレジット制御部１は、変更フラグＦｌｇ＝「１」の場合（ステップＳｔ８８のＹｅｓ）、タイマがタイムアウトしたか否かを判定する（ステップＳｔ８９）。なお、タイマがタイムアウトするまでの時間、つまり待機時間は、全てのフロー＃１〜＃Ｍのクレジットの供給量の変更に十分な時間とする。
【０１５１】
クレジット制御部１は、タイマがタイムアウトしていない場合（ステップＳｔ８９のＮｏ）、処理を終了する。また、クレジット制御部１は、タイマがタイムアウトしている場合（ステップＳｔ８９のＹｅｓ）、タイマを初期化する（ステップＳｔ９０）。
【０１５２】
次に、クレジット制御部１は、全てのフロー＃１〜＃Ｍのクレジットの供給量が増加前の値に戻るようにスケジューラ部５を制御する（ステップＳｔ９１）。次に、クレジット制御部１は、全てのポートシェーパ５７，５８のトークン量の減算量が増加前の値に戻るようにスケジューラ部５を制御し（ステップＳｔ９２）、処理を終了する。このようにして、クレジット制御部１の処理は実行される。
【０１５３】
また、クレジット制御部１は、トークン管理部５３からポートシェーパ５７，５８へのトークンの供給周期を延ばすことにより、スケジューラ部５の処理の負荷を低減してもよい。この場合、クレジット制御部１は、トークン管理部５３のポート管理テーブルを制御する。
【０１５４】
図１８（ａ）には低負荷時のポート管理テーブルの一例が示されており、図１８（ｂ）には高負荷時のポート管理テーブルの一例が示されている。なお、低負荷時とは、スケジューラ部５の処理の負荷≦Ｌｔｈの場合を指し、高負荷時とは、スケジューラ部５の処理の負荷＞Ｌｔｈの場合を指すものとする。なお、図５のような負荷監視部２の処理が行われる場合、例えば、低負荷時とは、スケジューラ部５の処理の負荷≦Ｌｔｈ１の場合を指し、高負荷時とは、スケジューラ部５の処理の負荷＞Ｌｔｈ１の場合を指すものとする。
【０１５５】
ポート管理テーブルには、ポートごとにレート（Gbps）、トークン供給量（MByte）、及び供給周期（ms）が登録されている。トークン管理部５３は、例えばポート＃１に対応するポートシェーパ５７，５８には、低負荷時、１（ms）の周期で１．２５（MByte）のトークンを供給するが、高負荷時、１０（ms）の周期で１２．５（MByte）のトークンを供給する。
【０１５６】
また、トークン管理部５３は、例えばポート＃２に対応するポートシェーパ５７，５８には、低負荷時、１（ms）の周期で５（MByte）のトークンを供給するが、高負荷時、１０（ms）の周期で５０（MByte）のトークンを供給する。つまり、トークン管理部５３は、高負荷時、供給周期を低負荷時の１０倍に延ばし、トークン供給量を低負荷時の１０倍に増加させる。なお、本例では、ポートシェーパ５７，５８の制御を挙げたが、フローシェーパ５４についても同様の制御が行われてもよい。
【０１５７】
このように、クレジット制御部１は、ポート＃１〜＃Ｎへのトークンの割り当て周期を延ばすように、スケジューラ部５を制御することにより、スケジューラ部５の処理の負荷を低減できる。なお、スケジューラ部５が複数のＣＰＵのソフトウェアにより実現されている場合、ポートシェーパ５７，５８のトークン供給処理を行うＣＰＵが高負荷であるときだけ、上記のような制御が行われてもよい。
【０１５８】
また、スケジューラ部５は、処理の負荷を低減するため、ＰＫＴ分配部４０からの要求メッセージを、個別ではなく、パケットの優先度ごとにまとめて受け付けて、受け付けた要求に応じてクレジットを供給してもよい。この場合、スケジューラ部５の要求受付部５０は、以下に述べるように、例えば負荷監視部２が取得した負荷に応じて要求メッセージの受け付け周期を制御してもよい。
【０１５９】
図１９（ａ）には低負荷時（負荷≦Ｌｔｈ）の要求受付部５０の動作の一例が示され、図１９（ｂ）には高荷時（負荷＞Ｌｔｈ）の要求受付部５０の動作の一例が示されている。本例において、ＰＫＴ分配部４０は、６４（Byte）長の１０個のパケット（ＰＫＴ）が入力され、６４（Byte）のクレジットを要求する１０個の要求メッセージ（ＭＳＧ）を要求受付部５０に出力する。
【０１６０】
要求受付部５０は、振り分け部５００と、フロー＃１〜＃Ｍごとに設けられたバッファ５０１と、メッセージ取得部５０２を有する。振り分け部５００は、ＰＫＴ分配部４０から入力された要求メッセージのフローＩＤを識別して、そのフローＩＤに対応するバッファ５０１に入力する。バッファ５０１は、振り分け部５００から入力された要求メッセージを格納する。
【０１６１】
メッセージ取得部５０２は、一定の周期でバッファ５０１を順次に選択して、選択したバッファ５０１から要求メッセージを取得する。メッセージ取得部５０２は、取得した要求メッセージからパケット長、つまりクレジットの要求量（本例では６４（Bye））を読み出して、蓄積量テーブル５１の該当フローＩＤの蓄積量に加算する。
【０１６２】
メッセージ取得部５０２は、図１９（ａ）に示されるように、負荷≦Ｌｔｈの場合、高周期でバッファ５０１を選択することにより、個別に要求メッセージを取得する（点線参照）。また、メッセージ取得部５０２は、図１９（ｂ）に示されるように、負荷＞Ｌｔｈの場合、低周期でバッファ５０１を選択することにより、１０個の要求メッセージをまとめて取得する（点線参照）。このとき、メッセージ取得部５０２は、１０個の要求メッセージを、６４０（Byte）（＝６４×１０）のクレジットの要求として受け付ける。これにより、メッセージ取得部５０２は、高負荷時、複数の要求メッセージをまとめて受け付けることができる。
【０１６３】
したがって、メッセージ取得部５０２は、蓄積量テーブル５１の更新頻度を低減することができ、スケジューラ部５の処理の負荷が低減される。なお、メッセージ取得部５０２は、負荷監視部２からのアラーム情報に基づき負荷を判定することができる（図３の点線参照）。また、スケジューラ部５が複数のＣＰＵのソフトウェアにより実現されている場合、要求メッセージの受付処理を行うＣＰＵが高負荷であるときだけ、上記のような制御が行われてもよい。さらに、負荷監視部２が図５のような処理を行う場合、要求受付部５０は、例えば、負荷≦Ｌｔｈ１の場合、図１９（ａ）のような制御を行い、負荷＞Ｌｔｈ１の場合、図１９（ｂ）のような制御を行ってもよい。
【０１６４】
また、上記の場合、要求受付部５０は、高負荷時、要求メッセージの受付処理が低負荷時より遅れる。このため、要求受付部５０は、要求メッセージにより要求されたクレジット量の合計に応じた優先度に従い要求をまとめて受け付けてもよい。つまり、要求受付部５０は、上記のバッファ５０１に加えて、高優先バッファ及び低優先バッファを設けることにより、要求メッセージの優先制御処理を行ってもよい。
【０１６５】
図２０には要求メッセージの優先制御処理の一例が示されている。図２０において、図１９（ａ）及び図１９（ｂ）と共通する構成については同一の符号を付し、その説明を省略する。
【０１６６】
本例において、要求受付部５０は、一例として、上述したフロー＃１〜＃Ｍごとのバッファ５０１と、優先度が最も高い高優先バッファ５０１ａと、優先度が最も低い低優先バッファ５０１ｃとを有する。バッファ５０１の優先度は、高優先バッファ５０１ａ及び低優先バッファ５０１ｃの中間であり、要求メッセージは、このバッファ５０１にいったん格納された後、所定の条件が満たされた場合、高優先バッファ５０１ａまたは低優先バッファ５０１ｃに移し替えられる。
【０１６７】
メッセージ取得部５０２は、各バッファ５０１内の要求メッセージのクレジットの要求量の合計を算出して、要求量の合計に基づき優先制御を行う（「優先度」参照）。例えば、フロー＃ｉの入力レートが高く、フロー＃ｉのバッファ５０１内の要求メッセージのクレジットの要求量の合計が所定の閾値Ｄｔｈを超える場合（「条件Ａ」参照）、振り分け部５００は、フロー＃ｉのバッファ５０１内の全ての要求メッセージを高優先バッファ５０１ａに移し替える。メッセージ取得部５０２は、クレジットの供給がパケットの処理に間に合うように、高優先バッファ５０１ａを優先的に選択して要求メッセージを受け付ける。
【０１６８】
また、フロー＃ｋは、例えば、要求メッセージの出力の直前にクレジットが供給されたため、蓄積量テーブル５１の蓄積量が負の値であると仮定する。このとき、フロー＃ｋのバッファ５０１ａ内の要求メッセージのクレジットの要求量の合計と、蓄積量テーブル５１の蓄積量の加算値が０以下である場合（「条件Ｂ」参照）、振り分け部５００は、フロー＃ｋのバッファ５０１内の全ての要求メッセージを低優先バッファ５０１ｃに移し替える。メッセージ取得部５０２は、最低優先で低優先バッファ５０１ｃを選択して要求メッセージを受け付ける。これは、条件Ｂが満たされる場合、蓄積量≦０であるため、フロー＃ｋにはクレジットを供給できないからである。なお、上記の条件Ａ及び条件Ｂの何れも満たされないフロー＃１〜＃Ｍの要求メッセージは、高優先バッファ５０１ａまたは低優先バッファ５０１ｃに移し替えられることなく、中間の優先度のバッファ５０１に留まる。
【０１６９】
上述した帯域制御装置は、１つの通信装置に実装されるものであるが、これに限定されない。例えば、通信装置にはキュー管理部４を実装し、通信装置を管理するネットワーク管理装置には負荷監視部２、クレジット制御部１、及びスケジューラ部５を実装してもよい。以下に通信装置及びネットワーク管理装置を含む帯域制御システムについて述べる。
【０１７０】
図２１は、帯域制御システムの一例を示す構成図である。帯域制御システムは、ネットワークＮＷを介して通信するネットワーク管理装置７及び通信装置８を有する。なお、通信装置８は第１処理装置の一例であり、ネットワーク管理装置７は第２処理装置の一例である。
【０１７１】
通信装置８は、複数のポート８０と、キュー管理部４と、通信処理部８１とを有する。複数のポート８０は、それぞれ、伝送路との間でパケット（ＰＫＴ）の送受信を行う。
【０１７２】
キュー管理部４は、ネットワーク管理装置７と通信処理部８１を介して通信し、上記の帯域制御を行う。より具体的には、キュー管理部４は、ネットワーク管理装置７にクレジットを要求し、ネットワーク管理装置７からクレジットを供給され、クレジットに基づきキュー４１からパケットを読み出してポート８０へ出力する。
【０１７３】
ネットワーク管理装置７は、通信処理部７０と、スケジューラ部５と、クレジット制御部１と、負荷監視部２とを有する。通信処理部７０は、キュー管理部４と通信処理部８１を介して通信し、上記の帯域制御を行う。より具体的には、スケジューラ部５は、キュー管理部４からの要求に応じクレジットを供給する。なお、クレジット制御部１及び負荷監視部２の動作についても上述した通りである。
【０１７４】
これまで述べたように、実施例に係る帯域制御装置は、複数のキュー４１と、読出処理部４２と、スケジューラ部５と、クレジット制御部１とを有する。複数のキュー４１は、パケットをフロー＃１〜＃Ｍごとに格納する。読出処理部４２は、フロー＃１〜＃Ｍごとに供給されたクレジットに基づき複数のキュー４１からパケットを読み出して、フロー＃１〜＃Ｍに応じたポート＃１〜＃Ｎに出力する。
【０１７５】
スケジューラ部５は、ポート＃１〜＃Ｎを順次に選択し、ポートを選択するたびに選択中のポートに応じたフロー＃１〜＃Ｍを選択し、その選択したフローにクレジットを供給する。
【０１７６】
クレジット制御部１は、スケジューラ部５が選択したフローが帯域保証フローである場合、スケジューラ部５により供給されるクレジットが増加するようにスケジューラ部５を制御する。また、クレジット制御部１は、スケジューラ部５が選択したフローが非帯域保証フローである場合、ポート＃１〜＃Ｎの選択が切り替わる前に、選択中のポートに応じた他のフローにもクレジットが供給されるように、スケジューラ部５を制御する。
【０１７７】
上記の構成によると、スケジューラ部５により帯域保証フローが選択された場合、クレジットの供給量が増加するため、スケジューラ部５の処理の負荷が低減される。また、スケジューラ部５により非帯域保証フローが選択された場合、選択中のフロー＃１〜＃Ｍには、ポートの選択が行われずに、クレジットが供給されるため、ポートの選択がスキップされることでスケジューラ部５の処理の負荷が低減される。
【０１７８】
このように、クレジット制御部１は、フロー＃１〜＃Ｍの間で帯域制御が不公平とならないように、クレジットの供給対象として選択されたフロー＃１〜＃Ｍの種別に応じてクレジットの供給を制御する。したがって、実施例に係る帯域制御装置によると、フロー＃１〜＃Ｍ間の帯域制御の公平性を損なわずに、帯域制御処理の負荷を低減できる。
【０１７９】
また、実施例に係る帯域制御システムは、ネットワークＮＷを介して通信する通信装置８及びネットワーク管理装置７を有する。通信装置８は、複数のキュー４１と、読出処理部４２とを有する。ネットワーク管理装置７は、スケジューラ部５と、クレジット制御部１とを有する。
【０１８０】
複数のキュー４１は、パケットをフロー＃１〜＃Ｍごとに格納する。読出処理部４２は、フロー＃１〜＃Ｍごとに供給されたクレジットに基づき複数のキュー４１からパケットを読み出して、フロー＃１〜＃Ｍに応じたポート＃１〜＃Ｎに出力する。
【０１８１】
スケジューラ部５は、ポート＃１〜＃Ｎを順次に選択し、ポートを選択するたびに選択中のポートに応じたフロー＃１〜＃Ｍを選択し、その選択したフローにクレジットを供給する。
【０１８２】
クレジット制御部１は、スケジューラ部５が選択したフローが帯域保証フローである場合、スケジューラ部５により供給されるクレジットが増加するようにスケジューラ部５を制御する。また、クレジット制御部１は、スケジューラ部５が選択したフローが非帯域保証フローである場合、ポート＃１〜＃Ｎの選択が切り替わる前に、選択中のポートに応じた他のフローにもクレジットが供給されるように、スケジューラ部５を制御する。
【０１８３】
実施例に係る帯域制御システムは、上記の帯域制御装置と同様の構成を含むので、上述した内容と同様の作用効果を奏する。
【０１８４】
上述した実施形態は本発明の好適な実施の例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施可能である。
【０１８５】
なお、以上の説明に関して更に以下の付記を開示する。
（付記１）  パケットをフローごとに格納する複数のパケット格納部と、
前記フローごとに供給された読出許容量に基づき前記複数のパケット格納部からパケットを読み出して、前記フローに応じたポートに出力する出力部と、
前記ポートを順次に選択し、前記ポートを選択するたびに選択中の前記ポートに応じた前記フローを選択し、該選択したフローに前記読出許容量を供給するスケジューラ部と、
前記選択したフローが帯域保証されている場合、前記スケジューラ部により供給される前記読出許容量が増加し、前記選択したフローが帯域保証されていない場合、前記ポートの選択が切り替わる前に、選択中の前記ポートに応じた他のフローにも前記読出許容量が供給されるように、前記スケジューラ部を制御する制御部と、
を有することを特徴とする帯域制御装置。
（付記２）  前記スケジューラ部は、前記ポートごとに割り当てられる帯域量に基づき、前記選択したフローに前記読出許容量を供給し、
前記制御部は、前記選択したフローが帯域保証されていない場合、選択中の前記ポートの前記帯域量が所定量より大きいとき、前記スケジューラ部により供給される前記読出許容量が増加し、選択中の前記ポートの前記帯域量が前記所定量以下であるとき、前記ポートの選択が切り替わる前に、選択中の前記ポートに応じた他のフローにも前記読出許容量が供給されるように、前記スケジューラ部を制御することを特徴とする付記１に記載の帯域制御装置。
（付記３）  前記制御部は、前記帯域量の割り当て周期を延ばすように、前記スケジューラ部を制御することを特徴とする付記２に記載の帯域制御装置。
（付記４）  前記スケジューラ部の処理の負荷を監視する監視部を、さらに有し、
前記制御部は、前記監視部による監視結果に応じて前記スケジューラ部を制御することを特徴とする付記１乃至３の何れかに記載の帯域制御装置。
（付記５）  前記制御部は、前記負荷が所定の閾値を上回ったとき、前記スケジューラ部により供給される前記読出許容量が一定量だけ増加するように、前記スケジューラ部を制御することを特徴とする付記４に記載の帯域制御装置。
（付記６）  前記制御部は、前記負荷が前記所定の閾値以下であるとき、前記スケジューラ部により供給される前記読出許容量を増加前の値に戻すように、前記スケジューラ部を制御することを特徴とする付記５に記載の帯域制御装置。
（付記７）  前記制御部は、前記負荷に応じて、前記スケジューラ部により供給される前記読出許容量が増加するように、前記スケジューラ部を制御することを特徴とする付記４に記載の帯域制御装置。
（付記８）  前記複数のパケット格納部にパケットが入力されるたびに、前記スケジューラ部に一定の前記読出許容量を要求する要求部を、さらに有し、
前記スケジューラ部は、前記負荷が前記所定の閾値を上回ったとき、前記要求部からの要求を前記フローごとにまとめて受け付けて、該受け付けた要求に応じ前記読出許容量を供給することを特徴とする付記５乃至７の何れかに記載の帯域制御装置。
（付記９）  前記スケジューラ部は、前記要求部から要求された前記読出許容量の合計に応じた優先度に従い要求をまとめて受け付けて、該受け付けた要求に応じ前記読出許容量を供給することを特徴とする付記８に記載の帯域制御装置。
（付記１０）  ネットワークを介して通信する第１処理装置及び第２処理装置を有し、
前記第１処理装置は、
パケットをフローごとに格納する複数のパケット格納部と、
前記フローごとに供給された読出許容量に基づき前記複数のパケット格納部からパケットを読み出して、前記フローに応じたポートに出力する出力部とを有し、
前記第２処理装置は、
前記ポートを順次に選択し、前記ポートを選択するたびに選択中の前記ポートに応じた前記フローを選択し、該選択したフローに、前記ネットワークを介して、前記読出許容量を供給するスケジューラ部と、
前記選択した前記フローが帯域保証されている場合、前記読出許容量を増加させ、前記選択した前記フローが帯域保証されていない場合、前記ポートの選択が切り替わる前に、選択中の前記ポートに応じた他のフローにも前記読出許容量が供給されるように、前記スケジューラ部を制御する制御部とを有することを特徴とする帯域制御システム。
（付記１１）  前記スケジューラ部は、前記ポートごとに割り当てられる帯域量に基づき、前記選択したフローに前記読出許容量を供給し、
前記制御部は、前記選択したフローが帯域保証されていない場合、選択中の前記ポートの前記帯域量が所定量より大きいとき、前記スケジューラ部により供給される前記読出許容量が増加し、選択中の前記ポートの前記帯域量が前記所定量以下であるとき、前記ポートの選択が切り替わる前に、選択中の前記ポートに応じた他のフローにも前記読出許容量が供給されるように、前記スケジューラ部を制御することを特徴とする付記１０に記載の帯域制御システム。
（付記１２）  前記制御部は、前記帯域量の割り当て周期を延ばすように、前記スケジューラ部を制御することを特徴とする付記１１に記載の帯域制御システム。
（付記１３）  前記スケジューラ部の処理の負荷を監視する監視部を、さらに有し、
前記制御部は、前記監視部による監視結果に応じて前記スケジューラ部を制御することを特徴とする付記１０乃至１２の何れかに記載の帯域制御システム。
（付記１４）  前記制御部は、前記負荷が所定の閾値を上回ったとき、前記スケジューラ部により供給される前記読出許容量が一定量だけ増加するように、前記スケジューラ部を制御することを特徴とする付記１３に記載の帯域制御システム。
（付記１５）  前記制御部は、前記負荷が前記所定の閾値以下であるとき、前記スケジューラ部により供給される前記読出許容量を増加前の値に戻すように、前記スケジューラ部を制御することを特徴とする付記１４に記載の帯域制御システム。
（付記１６）  前記制御部は、前記負荷に応じて、前記スケジューラ部により供給される前記読出許容量が増加するように、前記スケジューラ部を制御することを特徴とする付記１３に記載の帯域制御システム。
（付記１７）  前記第１処理装置は、前記複数のパケット格納部にパケットが入力されるたびに、前記スケジューラ部に一定の前記読出許容量を要求する要求部を、さらに有し、
前記スケジューラ部は、前記負荷が前記所定の閾値を上回ったとき、前記要求部からの要求を前記フローごとにまとめて受け付けて、該受け付けた要求に応じ前記読出許容量を供給することを特徴とする付記１４乃至１６の何れかに記載の帯域制御システム。
（付記１８）  前記スケジューラ部は、前記要求部から要求された前記読出許容量の合計に応じた優先度に従い要求をまとめて受け付けて、該受け付けた要求に応じ前記読出許容量を供給することを特徴とする付記１７に記載の帯域制御システム。
【符号の説明】
【０１８６】
１       クレジット制御部
２       負荷監視部
４       キュー管理部
５       スケジューラ部
４０       パケット分配部
４１       キュー
４２       読出処理部
５０       要求受付部
５２       クレジット供給部
５５       通常フロー選択部
５６       優先フロー選択部
５９       ポート選択部
【図１】
2017063388.tif 000003
【図２】
2017063388.tif 000004
【図３】
2017063388.tif 000005
【図４】
2017063388.tif 000006
【図５】
2017063388.tif 000007
【図６】
2017063388.tif 000008
【図７】
2017063388.tif 000009
【図８】
2017063388.tif 000010
【図９】
2017063388.tif 000011
【図１０】
2017063388.tif 000012
【図１１】
2017063388.tif 000013
【図１２】
2017063388.tif 000014
【図１３】
2017063388.tif 000015
【図１４】
2017063388.tif 000016
【図１５】
2017063388.tif 000017
【図１６】
2017063388.tif 000018
【図１７】
2017063388.tif 000019
【図１８】
2017063388.tif 000020
【図１９】
2017063388.tif 000021
【図２０】
2017063388.tif 000022
【図２１】
2017063388.tif 000023