(57)【要約】【課題】  通信品質が改善された通信装置及びパケットスケジューリング方法を提供する。【解決手段】  通信装置は、１以上のパケットを蓄積する複数のキューと、前記複数のキューの各々に読出許容量を与えるスケジューラ部と、前記複数のキューのうち、前記スケジューラ部により与えられる前記読出許容量に基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別する判別部と、前記複数のキューから、前記優先キューを優先し、キューごとの前記読出許容量及びキューごとに蓄積された前記１以上のパケットのデータ量に関する読出条件を満たした順に、前記読出許容量を消費して前記１以上のパケットを読み出す読出処理部とを有する。【選択図】図１６
2015037251.tif 000002
【特許請求の範囲】
【請求項１】
１以上のパケットを蓄積する複数のキューと、
前記複数のキューの各々に読出許容量を与えるスケジューラ部と、
前記複数のキューのうち、前記スケジューラ部により与えられる前記読出許容量に基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別する判別部と、
前記複数のキューから、前記優先キューを優先し、キューごとの前記読出許容量及びキューごとに蓄積された前記１以上のパケットのデータ量に関する読出条件を満たした順に、前記読出許容量を消費して前記１以上のパケットを読み出す読出処理部とを有することを特徴とする通信装置。
【請求項２】
前記判別部は、前記複数のキューのうち、保有する前記読出許容量が、蓄積された前記１以上のパケットのデータ量の合計に相当する量以上とする優先条件を満たすキューを、前記優先キューとして判別することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記複数のキューのうち、前記読出処理部の読み出し対象となるキューの識別子が登録された第１リスト及び第２リストを記憶する記憶部を、さらに有し、
前記判別部は、前記複数のキューのうち、前記優先キューの識別子を、前記読出条件を満たした順に前記第１リストに登録し、他のキューの識別子を、前記読出条件を満たした順に前記第２リストに登録し、
前記読出処理部は、前記識別子を、前記第２リストより前記第１リストから優先して取得し、前記複数のキューのうち、取得した前記識別子に応じたキューから前記１以上のパケットを読み出すことを特徴とする請求項２に記載の通信装置。
【請求項４】
前記判別部は、前記スケジューラ部が、前記複数のキューのうち、前記識別子が前記第２リストに登録されたキューに前記読出許容量を与えたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を前記第１リストに再登録することを特徴とする請求項３に記載の通信装置。
【請求項５】
前記判別部は、前記読出処理部が、前記複数のキューのうち、前記識別子が前記第１リストに登録されたキューから前記１以上のパケットを読み出したとき、または、前記複数のキューのうち、前記識別子が前記第１リストに登録されたキューに前記１以上のパケットが蓄積されたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を前記第２リストに再登録することを特徴とする請求項３または４に記載の通信装置。
【請求項６】
前記判別部は、前記識別子を再登録するとき、前記識別子を、該再登録の前に登録された前記第１リストまたは前記第２リストから削除することを特徴とする請求項４または５に記載の通信装置。
【請求項７】
前記判別部は、前記複数のキューのうち、所定量以上の前記読出許容量を保有するキューを、前記優先条件に関わらず、前記優先キューとして判別することを特徴とする請求項２乃至６の何れかに記載の通信装置。
【請求項８】
前記複数のキューのうち、前記読出処理部の読み出し対象となるキューの識別子が登録された第１リスト、第２リスト、第３リスト、及び第４リストを記憶する記憶部を、さらに有し、
前記判別部は、
前記スケジューラ部が、前記複数のキューの１つに前記読出許容量を与えたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を、前記読出条件を満たした順に前記第１リストに登録し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を、前記読出条件を満たした順に前記第３リストに登録し、
前記読出処理部が、前記複数のキューの１つから前記１以上のパケットを読み出したとき、または、前記複数のキューの１つに前記１以上のパケットが蓄積されたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を、前記読出条件を満たした順に前記第２リストに登録し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を、前記読出条件を満たした順に前記第４リストに登録し、
前記読出処理部は、優先順位を、前記第１リスト、前記第２リスト、前記第３リスト、及び前記第４リストの順とし、前記識別子を、前記第１リスト、前記第２リスト、前記第３リスト、及び前記第４リストから前記優先順位に従って取得し、前記複数のキューのうち、取得した前記識別子に応じたキューから前記１以上のパケットを読み出すことを特徴とする請求項２に記載の通信装置。
【請求項９】
前記読出条件は、前記読出許容量及び前記複数のキューに蓄積された前記１以上のパケットのデータ量が、それぞれ、０より大きいときに満たされることを特徴とする請求項１乃至８の何れかに記載の通信装置。
【請求項１０】
１以上のパケットを蓄積する複数のキューの各々に読出許容量を与え、
前記複数のキューのうち、与えられる前記読出許容量に基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別し、
前記複数のキューから、前記優先キューを優先し、キューごとの前記読出許容量及びキューごとに蓄積された前記１以上のパケットのデータ量に関する読出条件を満たした順に、前記読出許容量を消費して前記１以上のパケットを読み出すことを特徴とするパケットスケジューリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、通信装置及びパケットスケジューリング方法に関する。
【背景技術】
【０００２】
通信需要の増加に伴い、レイヤ２スイッチやルータなどのスイッチ機器、すなわちパケットを交換するパケット交換装置のスループットの向上が求められている。スループットを向上するために、キューからのパケットの読み出し制御によりトラフィックを管理するスケジューリング機能の改善が提案されている（例えば特許文献１〜３）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００５−５１０９５７号公報
【特許文献２】特開２０００−２４４５０２号公報
【特許文献３】特開２００７−１１０４８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
キューから１つのパケットが読み出されるたびに、スケジューリングにより次の読み出し対象のキューを選択する場合、スケジューリングに許容される処理時間は、パケットの読み出し処理の時間に制約される。このため、スケジューリングに許容される処理時間は、パケットの長さが、例えばイーサネット（登録商標、以下同様）フレームのように可変であるとき、読み出されるパケットの長さ（つまり、データ量）に依存する。
【０００５】
例えば、通信速度を１００（Ｇｂｐｓ）とすると、スケジューリングに許容される処理時間は、１５００（Ｂｙｔｅ）の長さのパケットの場合、約１２１（ｎｓ）であるのに対し、６４（Ｂｙｔｅ）の長さのパケットの場合、約６．７（ｎｓ）となる。つまり、短いパケット（ショートパケット）が連続で読み出されるとき、スケジューリングに許容される時間は、比較的に短い時間に制限されるため、スケジューリングに高い処理性能が求められる。
【０００６】
例えば、ショートパケットだけを読み出す場合、スケジューリングに約１４８．８（Ｍｐｐｓ（packets per second））の処理速度が求められる。この場合、パケット処理の動作周波数を３００（ＭＨｚ）とすると、１つのショートパケットを２クロック（３００（ＭＨｚ）／２＝１５０（Ｍｐｐｓ）≒１４８．８（Ｍｐｐｓ））で処理することになる。要求される処理速度は、キューの個数が多い場合や、スケジューリングに複雑なアルゴリズムを用いた場合、さらに高くなる。
【０００７】
これに対して、複数のパケットを、連続して読み出せるようにバースト的なトラフィックとして扱い、スケジューリング処理を、１パケット単位ではなく、所定のデータ量を単位として行えば、スケジューリングに許容される時間の制限が緩和される。例えば、２５００（Ｂｙｔｅ）単位でスケジューリング処理を行う場合、動作周波数を３００（ＭＨｚ）とすれば、６０クロックの処理時間（２００（ｎｓ））で１００（Ｇｂｐｓ）（＝２５００（Ｂｙｔｅ）／２００（ｎｓ））のスループットが実現される。つまり、このバーストデータ単位のスケジューリング方式（以下、「バーストスケジューリング方式」と表記）によれば、スケジューリングに許容される時間の制限を緩和することが可能となる。
【０００８】
バーストスケジューリング方式の場合、各キューから所定のデータ量が一度に読み出されるように、当該データ量が、読み出し可能なパケットのデータ量を示す読出許容量として、キューごとに与えられる。キューに蓄積されたパケットは、キューが保有する読出許容量が０より大きい場合、該読出許容量を消費して読み出される。
【０００９】
このとき、１つのパケットを分割して読み出すことはできないため、各キューは、保有する読出許容を超えるデータ量のパケットが読み出される。例えば、長さが９６００（Ｂｙｔｅ）のパケット（ジャンボフレーム）がキューに蓄積されているとき、該キューが１００（Ｂｙｔｅ）分の読出許容量しか保有していなくても、パケットは読み出される。このとき、読み出し後の読出許容量は、−９５００（Ｂｙｔｅ）（＝１００（Ｂｙｔｅ）−９６００（Ｂｙｔｅ））となる。このように、読出許容量が負の値である状態を、本明細書において「借金状態」と表記する。
【００１０】
パケットは、フローごとに分けられてキューに格納される。フローは、例えば、パケットごとの宛先などに応じて決定されるクラスである。パケットの読み出しレートは、フローごとのシェーパによりそれぞれ制御される。各シェーパは、フローごとの読み出しレートの合計が、読み出されたパケットを出力する出力ポートの帯域以下となるように、各キューに与える読出許容量を制御する。
【００１１】
しかし、ベストエフォート型のトラフィックのように、帯域が制御されず、シェーパが制御する帯域を上回るレートで入力されるフローが多い場合、借金状態が頻繁に生ずることにより、出力ポートの帯域が圧迫される。このため、例えば、音声系データや金融系データのように、帯域が保証されたフローのパケットは、ミリ秒単位の遅延または揺らぎが生じてしまい、通信品質が劣化するという問題がある。なお、このような問題は、イーサネットフレームに限られず、ＩＰ（Internet Protocol）パケットなどの他のパケットについても同様に存在する。
【００１２】
そこで本件は上記の課題に鑑みてなされたものであり、通信品質が改善された通信装置及びパケットスケジューリング方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本明細書に記載の通信装置は、１以上のパケットを蓄積する複数のキューと、前記複数のキューの各々に読出許容量を与えるスケジューラ部と、前記複数のキューのうち、前記スケジューラ部により与えられる前記読出許容量に基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別する判別部と、前記複数のキューから、前記優先キューを優先し、キューごとの前記読出許容量及びキューごとに蓄積された前記１以上のパケットのデータ量に関する読出条件を満たした順に、前記読出許容量を消費して前記１以上のパケットを読み出す読出処理部とを有する。
【００１４】
本明細書に記載のパケットスケジューリング方法は、１以上のパケットを蓄積する複数のキューの各々に読出許容量を与え、前記複数のキューのうち、与えられる前記読出許容量に基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別し、前記複数のキューから、前記優先キューを優先し、キューごとの前記読出許容量及びキューごとに蓄積された前記１以上のパケットのデータ量に関する読出条件を満たした順に、前記読出許容量を消費して前記１以上のパケットを読み出す方法である。
【発明の効果】
【００１５】
本明細書に記載の通信装置及びパケットスケジューリング方法は、通信品質を改善できるという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】実施例に係る通信装置の機能構成を示す構成図である。
【図２】ネットワークインターフェースカードの機能構成を示す構成図である。
【図３】通信装置内のパケットの経路を示す図である。
【図４】第１比較例の出力処理部の機能構成を示す構成図である。
【図５】パケットが入力されたときのスケジューラ部の動作例を示すフローチャートである。
【図６】クレジットを払い出すときのスケジューラ部の動作例を示すフローチャートである。
【図７】第２比較例の出力処理部の機能構成を示す構成図である。
【図８】キューにパケットを格納するときのキュー管理部の動作例を示すフローチャートである。
【図９】クレジットが払い出されたときのキュー管理部の動作例を示すフローチャートである。
【図１０】パケットを読み出すときのキュー管理部の動作例を示すフローチャートである。
【図１１】キュー管理部のパケット読み出し前の状態の一例を示す図である。
【図１２】キュー管理部のパケット読み出し後の状態の一例を示す図である。
【図１３】フローの入力レートが異なる場合におけるパケット読み出し後の状態の一例を示す図である。
【図１４】出力ポートにおけるフローごとの帯域の占有状態を示す図である。
【図１５】借金状態を許容しない場合及び借金状態を許容する場合におけるパケット読み出し後のパケット数及びクレジットカウンタを示す表である。
【図１６】第１実施例の出力処理部の機能構成を示す構成図である。
【図１７】キューにパケットを格納するときのキュー管理部の動作例を示すフローチャートである。
【図１８】クレジットが払い出されたときのキュー管理部の動作例を示すフローチャートである。
【図１９】パケットを読み出すときのキュー管理部の動作例を示すフローチャートである。
【図２０】第１実施例における登録処理のフローチャートである。
【図２１】第２実施例における登録管理テーブルの一例を示す表である。
【図２２】第２実施例における登録処理のフローチャートである。
【図２３】優先リスト及び非優先リストの構成例を示す構成図である。
【図２４】登録変更前及び登録変更後の優先リスト及び非優先リストの状態の一例を示す構成図である。
【図２５】第３実施例における登録処理のフローチャートである。
【図２６】第４実施例における登録管理テーブルの一例を示す表である。
【図２７】第４実施例における登録処理のフローチャートである。
【図２８】ポリサーの帯域判定機能の概念を示す構成図である。
【図２９】第５実施例の出力処理部の機能構成を示す構成図である。
【図３０】第５実施例における登録処理のフローチャートである。
【図３１】第６実施例の出力処理部の機能構成を示す構成図である。
【図３２】ＶｏＩＰ（Voice over Internet Protocol）のパケットの構成を示す構成図である。
【図３３】第６実施例における登録処理のフローチャートである。
【図３４】シミュレーションモデルを示す構成図である。
【図３５】比較例及び実施例におけるパケットの最大遅延時間のシミュレーション結果を示すグラフである。
【発明を実施するための形態】
【００１７】
図１は、実施例に係る通信装置の機能構成を示す構成図である。通信装置は、複数のネットワークインターフェースカード９１と、２枚のスイッチカード９２と、コントロールカード９３とを有する。各カード９１〜９３は、筐体に設けられた個別のスロットに収容され、互いに電気的に接続される。なお、本明細書において、通信装置として、レイヤ２スイッチやルータなどのパケット交換装置を例に挙げるが、これに限定されない。
【００１８】
通信装置は、外部装置から受信したパケットを、その宛先に従って他の外部装置に中継する。なお、本明細書において、パケットとは、伝送されるデータ（情報）の伝送単位であり、例としてイーサネットフレームを挙げるが、これに限られず、ＩＰパケットなどの他のフレームであってもよい。
【００１９】
複数のネットワークインターフェースカード９１は、それぞれ、外部装置との間において、パケットを送受信する。外部装置としては、例えば、パーソナルコンピュータなどの端末装置、サーバ装置、及びルータが挙げられる。複数のネットワークインターフェースカード９１は、複数のポートにより光ファイバと接続され、例えば１０ＧＢＡＳＥ−ＬＲの規格に基づく通信を行う。
【００２０】
２枚のスイッチカード９２は、それぞれ、複数のネットワークインターフェースカード９１の間において、パケットを交換する。より具体的には、スイッチカード９２は、ネットワークインターフェースカード９１からパケットが入力され、パケットを、その宛先に応じたネットワークインターフェースカード９１に出力する。２枚のスイッチカード９２は、例えば、ハードウェア故障などの障害に備えて、現用系及び予備系として使用される。
【００２１】
コントロールカード９３は、複数のネットワークインターフェースカード９１及び２枚のスイッチカード９２を制御する。コントロールカード９３は、ネットワーク制御装置などと接続され、ユーザーインターフェースに関する処理、各カード９１，９２に対する設定処理、及び各カード９１，９２からの情報収集処理などを行う。コントロールカード９３は、これらの処理を実行するＣＰＵ（Central Processing Unit）などのプロセッサ９３０、及び、プロセッサ９３０を駆動するプログラムを記憶するメモリ９３１を有する。
【００２２】
図２は、ネットワークインターフェースカード９１の機能構成を示す構成図である。ネットワークインターフェースカード９１は、複数の光送受信器９１０と、ＰＨＹ／ＭＡＣ部９１１と、入力処理部９１２と、出力処理部９１３と、制御部９１４とを有する。
【００２３】
複数の光送受信器９１０は、それぞれ、外部装置から光ファイバを介して受信した光信号を電気信号に変換してＰＨＹ／ＭＡＣ部９１１に出力し、また、ＰＨＹ／ＭＡＣ部９１１から入力された電気信号を光信号に変換し、光ファイバを介して外部装置に送信する。つまり、複数の光送受信器９１０は、外部装置との間でパケットを送受信するためのポートとして機能する。
【００２４】
ＰＨＹ／ＭＡＣ部９１１は、外部装置とのリンクの確立処理や複数の光送受信器１０に対するパケットの分配処理などを行う。ＰＨＹ／ＭＡＣ部９１１は、複数の光送受信器９１０から入力されたパケットを入力処理部９１２に出力し、出力処理部９１３から入力されたパケットを複数の光送受信器９１０に出力する。
【００２５】
入力処理部９１２及び出力処理部９１３は、イングレス（INGRESS）及びイーグレス（EGRESS）のパケット処理をそれぞれ行う。入力処理部９１２は、パケットの帯域制御処理などを行って、スイッチカード９２にパケットを出力する。出力処理部９１３は、スイッチカード９２から入力されたパケットの帯域制御処理などを行って、ＰＨＹ／ＭＡＣ部９１１にパケットを出力する。
【００２６】
制御部９１４は、コントロールカード９３と通信を行い、入力処理部９１２及び出力処理部９１３の制御を行う。制御部９１４は、ＣＰＵなどのプロセッサ及びメモリ（図示せず）を備える。
【００２７】
図３には、通信装置内のパケットの経路が示されている。なお、図３は、入力処理部９１２の構成も示す。
【００２８】
まず、パケットは、ネットワークインターフェースカード９１の入力処理部９１２に入力される。入力処理部９１２は、クラス判定部８０と、ポリサー８１と、分配部８２と、複数の入力キュー８３と、出力部８４とを有する。
【００２９】
クラス判定部８０は、パケットごとの通信品質（ＱｏＳ：Quality of Service）のクラスを判定し、クラスに応じたフローＩＤを、例えば装置内ヘッダに含めてパケットに付与する。クラス判定部８０は、例えば、パケットのヘッダに含まれる宛先（ＤＡ：Destination Address）、またはＶＬＡＮ（Virtual Local Area Network）  ＩＤに基づいてクラスを判定する。
【００３０】
ポリサー８１は、入力されるパケットのトラフィック量が所定の帯域を超えないように、所定帯域を超える分のパケットを廃棄する。分配部８２は、パケットを、宛先となるネットワークインターフェースカード９１に応じて、複数の入力キュー８３に分配する。つまり、入力キュー８３は、ネットワークインターフェースカード９１ごとに設けられている。複数の入力キュー８３は、パケットを、出力部８４により読み出されるまで蓄積する。出力部８４は、複数の入力キュー８３から１つを選択して、選択した入力キュー８３からパケットを読み出して、スイッチカード９２のスイッチ部９２０に出力する。スイッチ部９２０は、入力されたパケットを宛先に応じたネットワークインターフェースカード９１の出力処理部９１３に出力する。
【００３１】
（第１比較例）
【００３２】
まず、バーストスケジューリング方式の比較例について説明する。バーストスケジューリング方式では、スケジューリング機能が、パケットの読み出し機能から独立して設けられ、読み出し可能なパケットのデータ量を示す読出許容量を、キューごとに与える。なお、この読出許容量を、以降の説明において「クレジット」と表記する。
【００３３】
図４は、第１比較例の出力処理部９１３の機能構成を示す構成図である。出力処理部９１３は、キュー管理部５及びスケジューラ部６を有する。キュー管理部５は、分配部５０と、複数のキュー５１１〜５１３と、クレジットカウンタ部５２と、読出調停手段４とを有し、クレジットを消費して複数のキュー５１１〜５１３からパケットを読み出す。スケジューラ部６は、蓄積量カウンタ部６０と、クレジット払出部６１と、複数のクレジットシェーパ６２とを有し、クレジットをキュー管理部５に払い出す。
【００３４】
分配部５０は、入力されたパケットを、フローＩＤに基づいて、複数のキュー５１１〜５１３に分配する。複数のキュー５１１〜５１３は、それぞれ、１以上のパケットを蓄積する。また、分配部５０は、入力されたパケットのフローＩＤ及びパケット長をスケジューラ部６に通知する。
【００３５】
蓄積量カウンタ部６０は、分配部５０からの通知及びキューに与えたクレジット量に基づいて、フローＩＤごとのパケットのデータ量を仮想的に計数する。図４の例では、フロー＃１に対応するキュー５１１に５８００（Ｂｙｔｅ）のデータが蓄積され、フロー＃２に対応するキュー５１２に３９８６（Ｂｙｔｅ）のデータが蓄積され、フロー＃Ｎに対応するキュー５１３に１２８（Ｂｙｔｅ）のデータが蓄積されている。なお、以降の説明において、蓄積量カウンタ部６０が計数したデータ量を、「蓄積量カウンタ」と表記する。
【００３６】
クレジットシェーパ６２は、フロー＃１〜＃Ｎごとに設けられ、該フローのキュー５１１〜５１３にクレジットを与える間隔を調整する。クレジットシェーパ６２は、例えば、送信権として扱われるトークンを貯めるトークンバケットを有し、トークンの残量に応じてクレジットの払い出しを制限する。クレジットシェーパ６２は、クレジットを与える間隔を、トークンの供給レートにより調整する。
【００３７】
クレジット払出部６１は、キュー管理部５に一定のクレジットを払い出す。つまり、クレジット払出部６１は、複数のキュー５１１〜５１３の各々に一定のクレジットを与える。クレジット払出部６１は、キュー５１１〜５１３ごとにクレジットの払い出しの可否を示す払出フラグ６１１〜６１３を有する。
【００３８】
払出フラグ６１１〜６１３は、それぞれ、クレジットの払い出しが可能である場合に”１”を示し、払い出しが不可能である場合に“０“を示す。払出フラグ６１１〜６１３は、それぞれ、該当するフローの蓄積量カウンタが所定量Ｂ以上であり、クレジットシェーパ６２のトークンの残量が０より多いとき、”１”に設定される。
【００３９】
図４の例では、仮に所定量Ｂを１５００（Ｂｙｔｅ）とすると、フロー＃Ｎの蓄積量カウンタ（１２８（Ｂｙｔｅ））は、所定量Ｂより少ないため、払出フラグ６１３は”０”を示す。また、他のフロー＃１，＃２については、蓄積量カウンタが所定量Ｂより多いため、他の払出フラグ６１１，６１２は”１”を示す。このように、複数のキュー５１１〜５１３のうち、蓄積されたパケットのデータ量が一定量Ｂ以上であるキューに、クレジットを与えることにより、パケットを、一定のバースト性を有するトラフィックとして読み出して、スループットを向上することができる。
【００４０】
図５は、パケットが入力されたときのスケジューラ部６の動作例を示すフローチャートである。まず、蓄積量カウンタ部６０は、キュー管理部５からフローＩＤ及びパケット長を取得する（ステップＳｔ１）。次に、蓄積量カウンタ部６０は、取得したフローＩＤ及びパケット長に基づいて、該当するフロー＃１〜＃Ｎの蓄積量カウンタを更新する（ステップＳｔ２）。次に、クレジット払出部６１は、該当するフロー＃１〜＃Ｎの蓄積量カウンタが所定量Ｂ以上であり、かつ、該当するクレジットシェーパ６２のトークンの残量が０より多い、とする払出条件の成否を判定する（ステップＳｔ３）。
【００４１】
払出条件が満たされる場合（ステップＳｔ３のＹｅｓ）、クレジット払出部６１は、該当するフロー＃１〜＃Ｎの払出フラグ６１１〜６１３を“１”にし（ステップＳｔ４）、処理を終了する。一方、払出条件が満たされない場合（ステップＳｔ３のＮｏ）、クレジット払出部６１は、処理を終了する。このようにして、スケジューラ部６は、パケットが入力されたときの処理を行う。
【００４２】
クレジット払出部６１は、払出フラグ６１１〜６１３が”１”を示すフロー＃１〜＃Ｎのキュー５１１〜５１３に、一定のクレジットを払い出す。
【００４３】
図６は、クレジットを払い出すときのスケジューラ部６の動作例を示すフローチャートである。まず、クレジット払出部６１は、払出フラグ６１１〜６１３が”１”を示すフロー＃１〜＃Ｎから１つを選択する（ステップＳｔ１１）。クレジット払出部６１は、例えばラウンドロビン方式によりフロー＃１〜＃Ｎを選択してもよいし、または、フロー＃１〜＃Ｎのうち、１以上の特定のフローを優先的に選択してもよい。
【００４４】
次に、クレジット払出部６１は、キュー管理部５にクレジットを払い出す（ステップＳｔ１２）。つまり、スケジューラ部６は、複数のキュー５１１〜５１３に、一定のクレジットを与える。払い出されたクレジットは、キュー管理部５のクレジットカウンタ部５２により計数される。
【００４５】
クレジットカウンタ部５２は、フローＩＤごとに、つまりキュー５１１〜５１３ごとにクレジットを計数する。図４の例において、フロー＃１のキュー５１１は、−２５０（Ｂｙｔｅ）のクレジットを有し、フロー＃２のキュー５１２は、５４８６（Ｂｙｔｅ）のクレジットを有する。また、フロー＃Ｎのキュー５１３は、１５００（Ｂｙｔｅ）のクレジットを有する。クレジットは、スケジューラ部６により一定量ずつ各キュー５１１〜５１３に与えられる。なお、以降の説明において、クレジットカウンタ部５２が計数したクレジットの量を、「クレジットカウンタ」と表記する。
【００４６】
次に、クレジット払出部６１は、該当するフロー＃１〜＃Ｎの蓄積量カウンタから一定量を減算する（ステップＳｔ１３）。つまり、クレジット払出部６１は、クレジットを払い出したときに、クレジット分のパケットが読み出されたものとして、蓄積量カウンタ部６０の蓄積量カウンタを更新する。このため、蓄積量カウンタは、各キュー５１１〜５１３に蓄積されているパケットのデータ量の合計に必ずしも一致せず、仮想的な蓄積量を示す。したがって、蓄積量カウンタは、払い出されたクレジットが、キュー５１１〜５１３に蓄積されているパケットのデータ量の合計を上回ったとき、負の値になる。
【００４７】
次に、クレジット払出部６１は、該当するフロー＃１〜＃Ｎのクレジットシェーパ６２のトークンから一定量を減算する（ステップＳｔ１４）。つまり、クレジット払出部６１は、トークンを消費してクレジットを払い出す。したがって、各キュー５１１〜５１３に単位時間内に払い出されるクレジットの量（つまり、払い出しレート）は、各フロー＃１〜＃Ｎのクレジットシェーパ６２により制御される。
【００４８】
次に、クレジット払出部６１は、該当するフロー＃１〜＃Ｎの蓄積量カウンタが所定量Ｂ以上であり、かつ、該当するクレジットシェーパ６２のトークンの残量が０より多い、とする払出条件の成否を判定する（ステップＳｔ１５）。
【００４９】
払出条件が満たされない場合（ステップＳｔ１５のＮｏ）、クレジット払出部６１は、該当するフロー＃１〜＃Ｎの払出フラグ６１１〜６１３を”０”に設定して（ステップＳｔ１６）、処理を終了する。一方、払出条件が満たされる場合（ステップＳｔ１５のＹｅｓ）、クレジット払出部６１は、処理を終了する。このようにして、スケジューラ部６は、クレジットを払い出す処理を行う。
【００５０】
一方、キュー管理部５において、読出調停手段４は、キュー５１１〜５１３ごとに、クレジットを消費してパケットを読み出す。読出調停手段４は、フロー＃１〜＃Ｎごとに読出フラグ４１〜４３を有している。読出フラグ４１〜４３は、キュー５１１〜５１３ごとのクレジット及びキュー５１１〜５１３ごとに蓄積されたパケットのデータ量に関する読出条件を満たす場合、”１”を示し、読出条件を満たさない場合、”０”を示す。
【００５１】
読出条件は、キュー５１１〜５１３のクレジット及びキュー５１１〜５１３に蓄積されたパケットのデータ量が、０より大きいときに満たされる。つまり、読出調停手段４は、キュー５１１〜５１３にパケットが格納され、クレジットカウンタが正の値であるとき、キュー５１１〜５１３からパケットを読み出す。
【００５２】
図４の例では、各キュー５１１〜５１３にパケットが格納され、フロー＃１のクレジットカウンタが−２５０であるので、読出フラグ４１は”０”に設定される。また、他のフロー＃２、＃Ｎは、クレジットカウンタが正の値であるので、読出フラグ４２，４３は”１”に設定される。この読出条件によると、少なくとも１（Ｂｙｔｅ）のクレジット、及び、少なくとも１つのパケットがあれば、該パケットは、パケット長によらずにキュー５１１〜５１３から読み出されるので、パケットの待機時間が低減され、スループットが向上する。
【００５３】
読出調停手段４は、読出フラグ４１〜４３が”１”を示すフロー＃１〜＃Ｎに対応するキュー５１１〜５１３からパケットを読み出す。複数の読出フラグ４１〜４３が”１”を示す場合、読出調停手段４は、複数のキュー５１１〜５１３からパケットの読み出し対象とするキューを選択する。すなわち、読出調停手段４は、複数のキュー５１１〜５１３の間における読み出しの競合を調停する。
【００５４】
仮に、読出調停手段４として、新たなスケジューラを設けたとすると、スケジューラ部６を分離した意義が失われてしまう。スケジューラは、所定のスケジューリングアルゴリズムに従って、パケットの読み出しが可能なキューから１つのキューを選択するために、フローごとの優先度や重みなどのパラメータに基づくサーチ処理を行う。このサーチ処理は、読み出し可能なキューのパタン数が多いほど、多くの時間を必要とし、キュー数が多い場合、及びアルゴリズムが複雑である場合、さらに多くの時間を必要とする。したがって、サーチ処理の負担がない、もしくは少ない読出調停手段４を用いることが望ましい。
【００５５】
（第２比較例）
そこで、第２比較例に係る通信装置は、上記のサーチ処理を用いずに、キュー５１１〜５１３から読出調停手段４に対して、読み出し可能な状態であることを通知する手法を用いる。図７は、第２比較例の出力処理部９１３の機能構成を示す構成図である。なお、図７において、図４と共通する構成には、同一の符号を付し、その説明を省略する。
【００５６】
出力処理部９１３は、キュー管理部５及びスケジューラ部６を有する。キュー管理部５は、分配部５０と、複数のキュー５１１〜５１３と、クレジットカウンタ部５２と、読出処理部５３と、登録処理部５４と、読出順序登録リスト５５を記憶するメモリＭとを有する。スケジューラ部６は、蓄積量カウンタ部６０と、クレジット払出部６１と、複数のクレジットシェーパ６２とを有する。なお、スケジューラ部６の動作は、図４を参照して述べたとおりである。
【００５７】
登録処理部５４は、キュー５１１〜５１３が読出条件を満たしたか否かを判定し、読出条件を満たしたキュー５１１〜５１３のフローＩＤを読出順序登録リスト５５に登録する。登録処理部５４は、キュー５１１〜５１３ごとに読出フラグ５４１〜５４３を有している。この読出フラグ５４１〜５４３の内容は、図４を参照して説明した読出フラグ４１〜４３と同一であり、読出条件も上述した通りである。
【００５８】
登録処理部５４は、各キュー５１１〜５１３のフローＩＤを、読出条件を満たした順に、読出順序登録リスト５５に登録する。読出処理部５３は、読出順序登録リスト５５からフローＩＤを読み出し、該フローのキュー５１１〜５１３から、クレジットを消費してパケットを読み出す。このとき、読出処理部５３は、読出順序登録リスト５５に登録されたフローＩＤのうち、先頭のフローＩＤ、つまり時間的に最も早く登録されたフローＩＤを読み出す。
【００５９】
つまり、読出処理部５３は、複数のキュー５１１〜５１３から、キューごとのクレジット及びキューごとに蓄積されたパケットのデータ量に関する読出条件を満たした順に、クレジットを消費してパケットを読み出す。図７の例では、フロー＃２、フロー＃９７、フロー＃１９６の順に、該当するキューからパケットが読み出される。このように、読出処理部５３は、複雑なサーチ処理を行うことなく、読出順序登録リスト５５に登録されたフローＩＤに従って簡単に読み出し対象のキューを決定するので、少ない時間で読み出し処理を行うことができる。なお、クレジットが払い出される時間間隔は、クレジットシェーパ６２により制御されるので、読出処理部５３のパケットの読出レート、つまりポートからパケットが出力される出力レートも、クレジットシェーパ６２により制御される。
【００６０】
キュー５１１〜５１３からパケットが読み出された後、登録処理部５４は、該キューが読出条件をさらに満たす場合、当該フローＩＤを読出順序登録リスト５５に再び登録する。もっとも、登録処理部５４は、クレジットが０以下となるまでパケットを読み出す場合、フローＩＤの登録処理を行わない。フローＩＤの登録処理は、読出条件が満たされるイベントを契機として行われる。このイベントとは、キュー５１１〜５１３へのパケットの格納、スケジューラ部６からのクレジットの払い出し、及びキュー５１１〜５１３からのパケットの読み出しである。以下に、各イベントにおけるキュー管理部５の動作について説明する。
【００６１】
図８は、キュー５１１〜５１３にパケットを格納するときのキュー管理部５の動作例を示すフローチャートである。まず、分配部５０は、スイッチカード２から入力されたパケットから、フローＩＤ及びパケット長を取得する（ステップＳｔ２１）。
【００６２】
次に、分配部５０は、取得したフローＩＤに対応するキュー５１１〜５１３に、パケットを格納する（ステップＳｔ２２）。次に、分配部５０は、取得したフローＩＤ及びパケット長をスケジューラ部６に通知する（ステップＳｔ２３）。次に、登録処理部５４は、該フローＩＤに対応するキュー５１１〜５１３に蓄積されたパケットのデータ量が０より大きく、かつ、該フローＩＤに対応するクレジットカウンタが０より大きい、とする読出条件の成否を判定する（ステップＳｔ２４）。
【００６３】
読出条件が満たされない場合（ステップＳｔ２４のＮｏ）、キュー管理部５は、処理を終了する。一方、読出条件が満たされる場合（ステップＳｔ２４のＹｅｓ）、登録処理部５４は、読出順序登録リスト５５の該フローＩＤの登録の有無を判定する（ステップＳｔ２５）。該フローＩＤが登録されている場合（ステップＳｔ２５のＮｏ）、キュー管理部５は、処理を終了する。
【００６４】
一方、該フローＩＤが登録されていない場合（ステップＳｔ２５のＹｅｓ）、登録処理部５４は、該フローＩＤを読出順序登録リスト５５に登録して（ステップＳｔ２６）、キュー管理部５は、処理を終了する。このようにして、キュー管理部５は、パケット入力時の処理を行う。
【００６５】
また、図９は、クレジットが払い出されたときのキュー管理部５の動作例を示すフローチャートである。まず、クレジットカウンタ部５２は、スケジューラ部６から払い出された一定量のクレジットを、該当するフローＩＤのクレジットカウンタに加算する（ステップＳｔ３１）。
【００６６】
次に、登録処理部５４は、該フローＩＤに対応するキュー５１１〜５１３に蓄積されたパケットのデータ量が０より大きく、かつ、該フローＩＤに対応するクレジットカウンタが０より大きい、とする読出条件の成否を判定する（ステップＳｔ３２）。読出条件が満たされない場合（ステップＳｔ３２のＮｏ）、キュー管理部５は、処理を終了する。
【００６７】
一方、読出条件が満たされる場合（ステップＳｔ３２のＹｅｓ）、登録処理部５４は、読出順序登録リスト５５の該フローＩＤの登録の有無を判定する（ステップＳｔ３３）。該フローＩＤが登録されている場合（ステップＳｔ３３のＮｏ）、キュー管理部５は、処理を終了する。
【００６８】
一方、該フローＩＤが登録されていない場合（ステップＳｔ３３のＹｅｓ）、登録処理部５４は、該フローＩＤを読出順序登録リスト５５に登録し（ステップＳｔ３４）、キュー管理部５は、処理を終了する。このようにして、キュー管理部５は、クレジットが払い出されたときの処理を行う。
【００６９】
また、図１０は、パケットを読み出すときのキュー管理部５の動作を示すフローチャートである。まず、読出処理部５３は、読出順序登録リスト５５から先頭のフローＩＤを読み出す（ステップＳｔ６１）。読み出されたフローＩＤは、読出順序登録リスト５５から削除される。
【００７０】
次に、読出処理部５３は、読み出したフローＩＤに対応するキュー５１１〜５１３から、１つのパケットを読み出す（ステップＳｔ６２）。次に、読出処理部５３は、該フローＩＤに対応するクレジットカウンタから、読み出したパケットの長さ分のクレジットを減算する（ステップＳｔ６３）。すなわち、読出処理部５３は、複数のキュー５１１〜５１３から、キューごとのクレジット及びキューごとに蓄積されたパケットのデータ量に関する読出条件を満たした順に、クレジットを消費してパケットを読み出す。
【００７１】
次に、登録処理部５４は、該フローＩＤに対応するキュー５１１〜５１３に蓄積されたパケットのデータ量が０より大きく、かつ、該フローＩＤのクレジットカウンタが０より大きい、とする読出条件の成否を判定する（ステップＳｔ６４）。読出条件が満たされない場合（ステップＳｔ６４のＮｏ）、キュー管理部５は、処理を終了する。
【００７２】
一方、読出条件が満たされる場合（ステップＳｔ６４のＹｅｓ）、再びステップＳｔ６２の処理が行われる。このようにして、キュー管理部５は、パケット読み出し時の処理を行う。なお、図１０の例において、読出処理部５３は、読出条件が満たされなくなるまで、パケットを連続して読み出すが、これとは異なり、パケットを、１個ずつ、または一定のデータ量分だけ読み出してもよい。この場合、登録処理部５４は、読み出しが行われるたびに読出条件の成否を判定し、読出条件が満たされる場合、当該フローＩＤを読出順序登録リスト５５に再登録する。
【００７３】
このパケット読み出し動作について、図１１及び図１２を参照して具体例を述べる。図１１には、キュー管理部５のパケット読み出し前の状態の一例が示されている。図１２には、キュー管理部５のパケット読み出し後の状態の一例が示されている。
【００７４】
読み出し前、読出順序登録リスト５５には、フロー＃１、フロー＃２、フロー＃Ｎの順にフローＩＤが登録されている。また、クレジットカウンタは、フロー＃１が７０８（Ｂｙｔｅ）であり、フロー＃２が５４８６（Ｂｙｔｅ）であり、フロー＃Ｎが１５００（Ｂｙｔｅ）である。
【００７５】
読出処理部５３は、読出順序登録リスト５５に登録されたフローＩＤの順に従い、まず、フロー＃１のキュー５１１からＰＫＴ＃５及びＰＫＴ＃６（データ量の合計は８００（Ｂｙｔｅ））を連続して読み出す。このとき、フロー＃１のクレジットカウンタは、読み出し済みのＰＫＴ＃５及びＰＫＴ＃６の長さ８００（Ｂｙｔｅ）分のクレジットが減算され、−９２（Ｂｙｔｅ）となる。この時点において、フロー＃１のキュー５１１は、読出条件を満たさなくなる（ステップＳｔ６４のＮｏ）。このため、読出処理部５３は、フロー＃１のキュー５１１からのパケットの読み出しを終了する。
【００７６】
読出処理部５３は、次に、フロー＃２のキュー５１２からＰＫＴ＃３〜ＰＫＴ＃６（データ量の合計は１４００（Ｂｙｔｅ））を連続して読み出す。このとき、フロー＃２のクレジットカウンタは、読み出し済みのＰＫＴ＃３〜ＰＫＴ＃６の長さ１４００（Ｂｙｔｅ）分のクレジットが減算され、４０８６（Ｂｙｔｅ）となる。この時点において、フロー＃２のキュー５１２は、空になるので、読出条件を満たさなくなる（ステップＳｔ６４のＮｏ）。このため、読出処理部５３は、フロー＃２のキュー５１２からのパケットの読み出しを終了する。
【００７７】
読出処理部５３は、最後に、フロー＃Ｎのキュー５１３からＰＫＴ＃１（データ量は１００（Ｂｙｔｅ））を読み出す。このとき、フロー＃Ｎのクレジットカウンタは、読み出し済みのＰＫＴ＃１の長さ１００（Ｂｙｔｅ）分のクレジットが減算され、１４００（Ｂｙｔｅ）となる。この時点において、フロー＃Ｎのキュー５１３は、空になるので、読出条件を満たさなくなる（ステップＳｔ６４のＮｏ）。このため、読出処理部５３は、フロー＃Ｎのキュー５１３からのパケットの読み出しを終了する。
【００７８】
このように、読出処理部５３は、複数のキュー５１１〜５１３のうち、読出条件を満たしたキューから、パケットを、読出条件が満たさなくなるまで連続して読み出す。このため、トラフィックのバースト性は、１度の読出処理においてパケットを１つだけ読み出す場合より高くなるが、読出処理の頻度が、この場合より低くなるので、読出処理部５３の負荷が低減される。さらに、一度の読出処理において、複数のパケットが読み出されるので、通信装置のスループットが向上する。
【００７９】
また、登録処理部５４は、上述したように、パケットの格納、クレジットの払い出し、パケットの読み出しの各イベントの発生時に、フローＩＤを読出順序登録リスト５５に登録する。各イベントは同時に発生することがないため、登録処理部５４は、フローＩＤの登録にあたって、登録の競合の調停を行うことはない。
【００８０】
理由を述べると、まず、スイッチカード９２から出力処理部９１３へのパケットの入力は、１つずつ順次に行われるため、パケットの格納のイベントが同時に発生することはない。クレジットの払い出し及びパケットの読み出しも、各フローについて順次に行われるため、これらのイベントも同時に発生することはない。また、異なるイベント同士の同時発生は、例えば、各イベントの処理に同期するクロックタイミングを、イベントの発生タイミングがずれるように調整することにより回避される。
【００８１】
本比較例では、上記のイベントの発生を契機として、登録処理部５４が、読出条件を満たした順に、該当するフローＩＤを読出順序登録リスト５５に登録する。そして、読出処理部５３は、登録されたフローＩＤを先頭から順に取得して、取得したフローＩＤに応じたキュー５１１〜５１３からパケットを読み出す。このため、読出処理部５３は、多くの時間を必要とするサーチ処理を行うことなく、負荷が軽い簡単な処理でキュー５１１〜５１３を選択し、パケットを読み出すことができる。
【００８２】
しかし、本比較例では、以下に述べるように、各フローの入力レートが相違する場合、クレジットシェーパ６２により決定される出力レートを超えるレートで入力されるフローが、出力レート以下のレートで入力されるフローの帯域を圧迫する。
【００８３】
図１３には、フローの入力レートが異なる場合におけるパケット読み出し後の状態の一例が示されている。本例において、フロー＃１は、入力レートが２（Ｇｂｐｓ）であり、例えば音声データまたは金融系データのような帯域保証型のリアルタイム／インタラクティブトラフィックである。また、フロー＃２及びフロー＃Ｎは、入力レートが１０（Ｇｂｐｓ）であり、例えばベストエフォート型のトラフィックである。
【００８４】
フロー＃１、＃２、＃Ｎのパケットは、キュー５１１〜５１３から読み出された後、例えば、１０（Ｇｂｐｓ）の帯域を有する出力ポートから他装置に送信される。このため、フロー＃１、＃２、＃Ｎのクレジットシェーパ６２は、フロー＃１、＃２、＃Ｎの出力レートの合計が１０（Ｇｂｐｓ））となるように帯域制御を行う。
【００８５】
フロー＃１のクレジットシェーパ６２は、フロー＃１のパケットの読み出しレート、つまり出力レートが２（Ｇｂｐｓ）となるように、クレジットの払い出しの時間間隔を調整する。また、フロー＃２及びフロー＃Ｎのクレジットシェーパ６２は、フロー＃２及びフロー＃Ｎのパケットの出力レートがそれぞれ４（Ｇｂｐｓ）となるように、クレジット払出部６１によるクレジットの払い出しの時間間隔を調整する。
【００８６】
しかし、読出処理部５３は、１つのパケットを分割して読み出すことはできないため、クレジットカウンタを超えるデータ量のパケットを読み出す。例えば、９６００（Ｂｙｔｅ）のパケット（ジャンボフレーム）がフロー＃Ｎのキュー５１３に蓄積されているとき、該キューのクレジットカウンタが１００（Ｂｙｔｅ）であっても、読出処理部５３は、該パケットを読み出す。このとき、読み出し後のクレジットカウンタは、−９５００（Ｂｙｔｅ）（＝１００（Ｂｙｔｅ）−９６００（Ｂｙｔｅ））となる。
【００８７】
このように、スケジューラ部６がクレジットシェーパ６２により帯域制御を行っても、読出処理部５３は、クレジットが借金状態となることを許容してパケットを読み出すので、制御された出力レートを上回る過剰なバーストトラフィックが生じ得る。このバーストトラフィックは、出力ポートにおいて、帯域保証されたフロー＃１のトラフィックに影響を与える。
【００８８】
図１４には、出力ポートにおけるフロー＃１、＃２、＃Ｎごとの帯域の占有状態が示されている。ここで、符号Ｓ１は、理想的なトラフィックの帯域の占有状態を示し、符号Ｓ２は、フロー＃２、＃Ｎにバーストトラフィックが生じたときの帯域の占有状態を示す。また、出力ポートの帯域は、１０（Ｇｂｐｓ）とする（つまり、「１０ＧｂＥ」）。
【００８９】
理想的なトラフィックの場合、帯域保証されたフロー＃１のパケットは、実質的に一定の間隔ΔＴで出力される。一方、フロー＃２、＃Ｎにバーストトラフィックが生じた場合、フロー＃１のパケットに先立って、フロー＃２、＃Ｎのパケットが大きな帯域Ｂ１，Ｂ２を占有するので、フロー＃１のパケットにミリ秒単位の遅延が生ずる。
【００９０】
したがって、ベストエフォート型のトラフィックのように、帯域が制御されず、クレジットシェーパ６２が制御する帯域を上回るレートで入力されるフローが多い場合、借金状態が頻繁に生ずることにより、出力ポートの帯域が圧迫される。このため、例えば、音声系データや金融系データのように、帯域保証されたフローのパケットは、ミリ秒単位の遅延または揺らぎが生じてしまい、通信品質が劣化するという問題がある。
【００９１】
これに対し、仮に、借金状態を許容せずにパケットの読み出し制御を行えば、パケットの遅延や揺らぎは回避できる。
【００９２】
図１５には、借金状態を許容しない場合及び借金状態を許容する場合におけるパケット読み出し後のパケット数及びクレジットが示されている。パケットの読み出し前、フロー＃１のキュー５１１には、２００（Ｂｙｔｅ）×２個のパケットが蓄積され、フロー＃１のクレジットカウンタは、５００（Ｂｙｔｅ）を示す。また、フロー＃２のキュー５１２には、９６００（Ｂｙｔｅ）及び６４（Ｂｙｔｅ）のパケットが蓄積され、フロー＃２のクレジットカウンタは、１００（Ｂｙｔｅ）を示す。フロー＃Ｎのキュー５１３には、１００（Ｂｙｔｅ）×１０個のパケットが蓄積され、フロー＃Ｎのクレジットカウンタは、９９９（Ｂｙｔｅ）を示す。
【００９３】
フロー＃１は、クレジットが、蓄積されたパケットのデータ量の合計より多い。このため、フロー＃１については、借金状態の許否に関わらず、２個のパケットが読み出され、１００（Ｂｙｔｅ）のクレジットが残る。
【００９４】
フロー＃２は、クレジットが、蓄積されたパケットのデータ量の合計より少ない。このため、フロー＃２については、借金状態を許容しない場合、６４（Ｂｙｔｅ）のパケットのみが読み出され、３６（Ｂｙｔｅ）のクレジットが残る。一方、借金状態を許容する場合、９６００（Ｂｙｔｅ）及び６４（Ｂｙｔｅ）のパケットが読み出され、−９５００（Ｂｙｔｅ）のクレジットが残る。
【００９５】
フロー＃Ｎは、クレジットが、蓄積されたパケットのデータ量の合計より少ない。このため、フロー＃Ｎについては、借金状態を許容しない場合、１００（Ｂｙｔｅ）×９個のパケットのみが読み出され、９９（Ｂｙｔｅ）のクレジットが残る。一方、借金状態を許容する場合、１００（Ｂｙｔｅ）×１０個のパケットが読み出され、−１（Ｂｙｔｅ）のクレジットが残る。
【００９６】
借金状態を許容しないようにパケットを読み出す場合、読み出しのタイミングごとに、キュー５１１〜５１３に蓄積されたパケットのうち、何れのパケットが読み出し可能であるかを判断する必要がある。このような処理は、ハードウェアに過剰な負担がかかるため、現実的には困難である。
【００９７】
また、キュー５１１〜５１３に蓄積されたパケットのうち、先頭のパケット、つまり最も早く蓄積されたパケットに限定して、該パケットが読み出されたときに借金状態が生ずるか否かを判断すれば、処理負担が軽減される。しかし、この場合、読み出しのタイミングごとに、１個のパケットしか読み出されないため、スループットが低下するという他の問題を生ずる。したがって、できるだけクレジットを余らせずに消費し、パケットをバーストトラフィックとして読み出す手法が望ましい。
【００９８】
（第１実施例）
そこで、実施例に係る通信装置は、複数のキューから、与えられたクレジットに基づく読出レート以下の入力レートでパケットが入力されるキューを優先し、上記の読出条件を満たした順にクレジットを消費してパケットを読み出すことで、通信品質を改善する。
【００９９】
図１６は、第１実施例の出力処理部９１３の機能構成を示す構成図である。図１６において、図７と共通する構成には、同一の符号を付し、その説明を省略する。
【０１００】
出力処理部９１３は、キュー管理部５及びスケジューラ部６を有する。キュー管理部５は、分配部５０ａと、複数のキュー５１１〜５１３と、クレジットカウンタ部５２と、読出処理部５３ａと、登録処理部５４ａと、蓄積量監視部５６と、メモリ（記憶部）Ｍとを有する。メモリＭは、読出処理部５３ａの読み出し対象となるキュー５１１〜５１３の識別子、つまりフローＩＤが登録された第１読出順序登録リスト５５ａ及び第２読出順序登録リスト５５ｂを記憶する。
【０１０１】
スケジューラ部６は、蓄積量カウンタ部６０と、クレジット払出部６１と、複数のクレジットシェーパ６２とを有する。なお、スケジューラ部６の動作は、図４を参照して述べたとおりである。
【０１０２】
蓄積量監視部５６は、分配部５０ａ及び読出処理部５３ａからの通知に基づいて、各フロー＃１〜＃Ｎのキュー５１１〜５１３に蓄積されたパケットのデータ量の合計を計数し、監視する。蓄積量監視部５６は、蓄積量カウンタ部６０が計数する蓄積量カウンタのような仮想的な蓄積量ではなく、キュー５１１〜５１３に蓄積された実際のパケットのデータ量の合計を計数する。
【０１０３】
分配部５０ａは、入力されたパケットを、フローＩＤに基づいて、複数のキュー５１１〜５１３に分配するだけでなく、各キュー５１１〜５１３に入力したパケットのデータ量（長さ）を蓄積量監視部５６に通知する。また、読出処理部５３ａは、第１読出順序登録リスト５５ａまたは第２読出順序登録リスト５５ｂからフローＩＤを取得し、該フローＩＤのキュー５１１〜５１３から、クレジットを消費してパケットを読み出す。このとき、読出処理部５３ａは、各キュー５１１〜５１３から読み出したパケットのデータ量（長さ）を蓄積量監視部５６に通知する。
【０１０４】
蓄積量監視部５６は、分配部５０ａから通知されたデータ量を加算し、また、読出処理部５３ａから通知されたデータ量を減算することにより、フロー＃１〜＃Ｎごとのパケットの蓄積量を計数する。蓄積量監視部５６は、フロー＃１〜＃Ｎごとのパケットの蓄積量を登録処理部５４ａに通知する。
【０１０５】
登録処理部５４ａは、キュー５１１〜５１３が読出条件を満たしたか否かを判定し、読出条件を満たしたキュー５１１〜５１３のフローＩＤを、読出条件を満たした順に、第１読出順序登録リスト５５ａ及び第２読出順序登録リスト５５ｂの一方に登録する。登録処理部５４ａは、キュー５１１〜５１３ごとに読出フラグ５４１〜５４３を有している。この読出フラグ５４１〜５４３の内容は、図４を参照して説明した読出フラグ４１〜４３と同一であり、読出条件も上述した通りである。
【０１０６】
第１読出順序登録リスト５５ａは、優先的なフローのフローＩＤが登録される優先リストとして取り扱われ、第２読出順序登録リスト５５ｂは、非優先的なフローのフローＩＤが登録される非優先リストとして取り扱われる。なお、以降の説明において、第１読出順序登録リスト５５ａ及び第２読出順序登録リスト５５ｂを、「優先リスト」及び「非優先リスト」とそれぞれ表記する。
【０１０７】
登録処理部（判別部）５４ａは、蓄積量監視部５６から通知されるフロー＃１〜＃Ｎごとのパケットの蓄積量に基づいて、フローＩＤごとに、優先リスト５５ａ及び非優先リスト５５ｂの何れに登録するかを判別する。登録処理部５４ａは、複数のキュー５１１〜５１３のうち、スケジューラ部６により与えられるクレジットに基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別する。そして、登録処理部５４ａは、優先キューに対応するフローＩＤを優先リスト５５ａに登録し、その他のキュー（非優先キュー）に対応するフローＩＤを非優先リスト５５ｂに登録する。
【０１０８】
読出処理部５３ａは、複数のキュー５１１〜５１３から、上記の優先キューを優先し、キューごとの読出条件を満たした順に、クレジットを消費して１以上のパケットを読み出す。すなわち、読出処理部５３ａは、フローＩＤを、非優先リスト５５ｂより優先リスト５５ａから優先して取得し、複数のキュー５１１〜５１３のうち、取得したフローＩＤに応じたキューから１以上のパケットを読み出す。このように、登録処理部５４ａは、フローＩＤを優先リスト５５ａ及び非優先リスト５５ｂに分けて登録するので、読出処理部５３ａは、容易にパケット（つまりフロー）の優先度を判断できる。
【０１０９】
登録処理部５４ａは、より具体的には、複数のキュー５１１〜５１３のうち、保有するクレジットが、蓄積されたパケットのデータ量の合計に相当する量以上とする優先条件を満たすキューを、優先キューとして判別する。本実施例において、１（Ｂｙｔｅ）のクレジットは、１（Ｂｙｔｅ）のパケットのデータ量に相当するため、上記の優先条件は、「クレジット≧蓄積されたパケットのデータ量の合計」となる。つまり、複数のキュー５１１〜５１３のうち、「クレジット≧蓄積されたパケットのデータ量の合計」とする優先条件を満たすキューは、当該フローＩＤが優先リスト５５ａに登録される。言い換えると、複数のキュー５１１〜５１３のうち、「クレジット＜蓄積されたパケットのデータ量の合計」の条件を満たすキューは、当該フローＩＤが非優先リスト５５ｂに登録される。
【０１１０】
登録処理部５４ａは、第２比較例と同様に、パケットの格納、クレジットの払い出し、パケットの読み出しの各イベントの発生時に、フローＩＤを優先リスト５５ａ及び非優先リスト５５ｂの一方に登録する。以下に、登録処理部５４ａの登録処理について説明する。
【０１１１】
図１７は、キュー５１１〜５１３にパケットを格納するときのキュー管理部５の動作例を示すフローチャートである。まず、分配部５０ａは、スイッチカード２から入力されたパケットから、フローＩＤ及びパケット長を取得する（ステップＳｔ５１）。
【０１１２】
次に、分配部５０ａは、取得したフローＩＤに対応するキュー５１１〜５１３に、パケットを格納する（ステップＳｔ５２）。次に、分配部５０ａは、取得したフローＩＤ及びパケット長をスケジューラ部６及び蓄積量監視部５６に通知する（ステップＳｔ５３）。次に、登録処理部５４ａは、該フローＩＤに対応するキュー５１１〜５１３に蓄積されたパケットのデータ量が０より大きく、かつ、該フローＩＤに対応するクレジットカウンタが０より大きい、とする読出条件の成否を判定する（ステップＳｔ５４）。
【０１１３】
読出条件が満たされない場合（ステップＳｔ５４のＮｏ）、キュー管理部５は、処理を終了する。一方、読出条件が満たされる場合（ステップＳｔ５４のＹｅｓ）、登録処理部５４ａは、フローＩＤの登録処理を行う（ステップＳｔ５５）。このようにして、キュー管理部５は、パケット格納されたときの処理を行う。なお、フローＩＤの登録処理については、後述する。
【０１１４】
図１８は、クレジットが払い出されたときのキュー管理部の動作例を示すフローチャートである。まず、クレジットカウンタ部５２は、スケジューラ部６から払い出された一定量のクレジットを、該当するフローＩＤのクレジットカウンタに加算する（ステップＳｔ７１）。
【０１１５】
次に、登録処理部５４ａは、該フローＩＤに対応するキュー５１１〜５１３に蓄積されたパケットのデータ量が０より大きく、かつ、該フローＩＤに対応するクレジットカウンタが０より大きい、とする読出条件の成否を判定する（ステップＳｔ７２）。読出条件が満たされない場合（ステップＳｔ７２のＮｏ）、キュー管理部５は、処理を終了する。
【０１１６】
一方、読出条件が満たされる場合（ステップＳｔ７２のＹｅｓ）、登録処理部５４ａは、登録処理を行い（ステップＳｔ７３）、キュー管理部５は処理を終了する。このようにして、キュー管理部５は、クレジットが払い出されたときの処理を行う。
【０１１７】
また、図１９は、パケットを読み出すときのキュー管理部５の動作例を示すフローチャートである。まず、読出処理部５３ａは、優先リスト５５ａ及び非優先リスト５５ｂの一方から先頭のフローＩＤを読み出す（ステップＳｔ４１）。このとき、読出処理部５３ａは、非優先リスト５５ｂより優先リスト５５ａから優先して、フローＩＤを読み出す。読み出されたフローＩＤは、優先リスト５５ａまたは非優先リスト５５ｂから削除される。
【０１１８】
次に、読出処理部５３ａは、読み出したフローＩＤに対応するキュー５１１〜５１３から、１以上のパケットを読み出す（ステップＳｔ４２）。次に、読出処理部５３ａは、該フローＩＤに対応するクレジットカウンタから、読み出したパケットの長さ分のクレジットを減算する（ステップＳｔ４３）。すなわち、読出処理部５３ａは、複数のキュー５１１〜５１３から、優先キューを優先し、キューごとのクレジット及びキューごとに蓄積されたパケットのデータ量に関する読出条件を満たした順に、クレジットを消費してパケットを読み出す。
【０１１９】
次に、読出処理部５３ａは、読み出したパケットの長さ、つまりデータ量を蓄積量監視部５６に通知する（ステップＳｔ４４）。なお、ステップＳｔ４３及びステップＳｔ４４の各処理は、何れが先に行われてもよい。
【０１２０】
次に、登録処理部５４ａは、該フローＩＤに対応するキュー５１１〜５１３に蓄積されたパケットのデータ量が０より大きく、かつ、該フローＩＤのクレジットカウンタが０より大きい、とする読出条件の成否を判定する（ステップＳｔ４５）。読出条件が満たされない場合（ステップＳｔ４５のＮｏ）、キュー管理部５は、処理を終了する。
【０１２１】
一方、読出条件が満たされる場合（ステップＳｔ４５のＹｅｓ）、登録処理部５４ａは、登録処理を行い（ステップＳｔ４６）、キュー管理部５は処理を終了する。このようにして、キュー管理部５は、パケット読み出し時の処理を行う。
【０１２２】
次に、上述した各動作における登録処理（ステップＳｔ５５、Ｓｔ７３，Ｓｔ４６）を説明する。図２０は、第１実施例における登録処理のフローチャートである。
【０１２３】
まず、登録処理部５４ａは、当該フローＩＤに対応するキュー５１１〜５１３が、クレジットカウンタ≧パケットのデータ量の合計（優先条件）を満たすか否かを判定する（ステップＳｔ８１）。このとき、登録処理部５４ａは、クレジットカウンタをクレジットカウンタ部５２から取得し、パケットのデータ量の合計、つまりパケットの蓄積量を蓄積量監視部５６から取得する。
【０１２４】
優先条件が満たされる場合（ステップＳｔ８１のＹｅｓ）、登録処理部５４ａは、当該フローＩＤを優先リスト５５ａに登録して（ステップＳｔ８２）、処理を終了する。一方、優先条件が満たされない場合（ステップＳｔ８１のＮｏ）、登録処理部５４ａは、当該フローＩＤを非優先リスト５５ｂに登録して（ステップＳｔ８３）、処理を終了する。このようにして、登録処理は行われる。
【０１２５】
このように、本実施例において、登録処理部５４ａは、複数のキュー５１１〜５１３のうち、優先条件を満たすキューを判別し、フローＩＤを優先リスト５５ａ及び非優先リスト５５ｂに分けて登録する。したがって、クレジットが借金状態となる可能性がないキュー５１１〜５１３は、優先キューとして判定され、当該フローＩＤは優先リスト５５ａに登録される。逆に、クレジットが借金状態となる可能性があるキュー５１１〜５１３は、非優先キューとして判定され、当該フローＩＤは非優先リスト５５ｂに登録される。
【０１２６】
読出処理部５３ａは、複数のキュー５１１〜５１３から、優先キューを優先し、読出条件を満たした順に、クレジットを消費してパケットを読み出す。このため、クレジットが借金状態となる可能性があるキュー５１１〜５１３からのパケットの読み出しは、クレジットが借金状態となる可能性がないキュー５１１〜５１３の後回しとなる。
【０１２７】
したがって、パケットの読み出し処理において、複数のキュー５１１〜５１３のうち、スケジューラ部６により与えられるクレジットに基づく読出レート以下のレートでパケットが入力されるキューが、他のキューより優先される。このため、借金状態が頻発することにより、特定のフローのパケットに遅延または揺らぎが生ずることがない。
【０１２８】
なお、本実施例において、登録処理部５４ａは、上記の優先条件に基づいて、複数のキュー５１１〜５１３のうち、スケジューラ部６により与えられるクレジットに基づく読出レート以下のレートでパケットが入力されるキューを判別したが、これに限定されない。登録処理部５４ａは、例えば、キュー５１１〜５１３にパケットが入力されるときの入力レートと、キュー５１１〜５１３からパケットが読み出されるときの出力レートをそれぞれ測定する測定手段を有し、当該測定結果に従って、優先キューを判別してもよい。
【０１２９】
（第２実施例）
優先条件の成否は、パケットの格納、クレジットの払い出し、パケットの読み出しの何れかのイベントの発生により変化し得る。したがって、フローＩＤの登録を、イベントの発生を契機として、優先リスト５５ａ及び非優先リスト５５ｂ間において動的に変更してもよい。この場合、登録処理部５４ａは、各フローＩＤの優先度（優先または非優先）に基づく登録状態を管理するため、登録管理テーブルを保持してもよい。
【０１３０】
図２１には、第２実施例における登録管理テーブルの一例が示されている。図２１において、丸印（「○」参照）は、該フローＩＤが登録されていることを示し、バツ印（「×」参照）は、該フローＩＤが登録されていないことを示す。
【０１３１】
本例では、フロー＃１は、優先リスト５５ａに登録され、フロー＃２は、非優先リスト５５ｂに登録されている。また、フロー＃Ｎは、優先リスト５５ａ及び非優先リスト５５ｂの何れにも登録されていない。この未登録の状態は、例えばフロー＃Ｎのクレジットカウンタが負の値である場合、またはキュー５１３が空である場合に生じ得る。
【０１３２】
登録処理部５４ａは、各フローＩＤの登録先が最大で１カ所となるように、登録状態を管理する。つまり、登録処理部５４ａは、各フローＩＤの二重登録を禁止する。登録処理部５４ａは、登録管理テーブルを参照することにより、フローＩＤの変更要否を判断する。
【０１３３】
図２２は、第２実施例における登録処理のフローチャートである。まず、登録処理部５４ａは、当該フローＩＤに対応するキュー５１１〜５１３が、クレジットカウンタ≧パケットのデータ量の合計（優先条件）を満たすか否かを判定する（ステップＳｔ９１）。
【０１３４】
優先条件が満たされる場合（ステップＳｔ９１のＹｅｓ）、登録処理部５４ａは、登録管理テーブルを参照して、当該フローＩＤが優先リスト５５ａに登録済みであるか否かを判定する（ステップＳｔ９２）。当該フローＩＤが優先リスト５５ａに登録済みである場合（ステップＳｔ９２のＹｅｓ）、登録処理部５４ａは、処理を終了する。
【０１３５】
一方、当該フローＩＤが優先リスト５５ａに登録済みではない場合（ステップＳｔ９２のＮｏ）、登録処理部５４ａは、登録管理テーブルを参照して、当該フローＩＤが非優先リスト５５ｂに登録済みであるか否かを判定する（ステップＳｔ９３）。当該フローＩＤが非優先リスト５５ｂに登録済みである場合（ステップＳｔ９３のＹｅｓ）、登録処理部５４ａは、当該フローＩＤを非優先リスト５５ｂから削除する（ステップＳｔ９４）。
【０１３６】
次に、登録処理部５４ａは、当該フローＩＤを優先リスト５５ａに再登録して（ステップＳｔ９５）、処理を終了する。この処理は、当該フローＩＤが非優先リスト５５ｂに登録済みではない場合（ステップＳｔ９３のＮｏ）も同様に行われる。このとき、登録処理部５４ａは、登録の変更に従って、登録管理テーブルを更新する。
【０１３７】
一方、優先条件が満たされない場合（ステップＳｔ９１のＮｏ）、登録処理部５４ａは、登録管理テーブルを参照して、当該フローＩＤが非優先リスト５５ｂに登録済みであるか否かを判定する（ステップＳｔ９６）。当該フローＩＤが非優先リスト５５ａに登録済みである場合（ステップＳｔ９６のＹｅｓ）、登録処理部５４ａは、処理を終了する。
【０１３８】
一方、当該フローＩＤが非優先リスト５５ｂに登録済みではない場合（ステップＳｔ９６のＮｏ）、登録管理テーブルを参照して、当該フローＩＤが優先リスト５５ａに登録済みであるか否かを判定する（ステップＳｔ９７）。当該フローＩＤが優先リスト５５ａに登録済みである場合（ステップＳｔ９７のＹｅｓ）、登録処理部５４ａは、当該フローＩＤを優先リスト５５ａから削除する（ステップＳｔ９８）。
【０１３９】
次に、登録処理部５４ａは、当該フローＩＤを非優先リスト５５ｂに再登録して（ステップＳｔ９９）、処理を終了する。この処理は、当該フローＩＤが優先リスト５５ａに登録済みではない場合（ステップＳｔ９７のＮｏ）も同様に行われる。このとき、登録処理部５４ａは、登録の変更に従って、登録管理テーブルを更新する。このようにして、登録処理は行われる。
【０１４０】
このように、登録処理部５４ａは、スケジューラ部６が、複数のキュー５１１〜５１３のうち、フローＩＤ（識別子）が非優先リスト５５ｂに登録されたキューにクレジットを与えたとき、当該キューが優先条件を満たすか否かを判定する。そして、登録処理部５４ａは、当該キューが優先条件を満たす場合、当該フローＩＤを優先リスト５５ａに再登録する。
【０１４１】
また、登録処理部５４ａは、読出処理部５３ａが、複数のキュー５１１〜５１３のうち、フローＩＤ（識別子）が優先リスト５５ａに登録されたキューから１以上のパケットを読み出したとき、当該キューが優先条件を満たすか否かを判定する。そして、登録処理部５４ａは、当該キューが優先条件を満たさない場合、当該フローＩＤを非優先リスト５５ｂに再登録する。
【０１４２】
さらに、登録処理部５４ａは、複数のキュー５１１〜５１３のうち、フローＩＤ（識別子）が優先リスト５５ａに登録されたキューに１以上のパケットが蓄積されたとき、当該キューが優先条件を満たすか否かを判定する。そして、登録処理部５４ａは、当該キューが優先条件を満たさない場合、当該フローＩＤを非優先リスト５５ｂに再登録する。
【０１４３】
したがって、優先条件に従ってフローＩＤの登録が動的に変更されるため、バースト的なトラフィックが入力された場合（例えばロングパケットの入力）であっても、読出処理部５３ａは、読み出し処理の優先度をキュー５１１〜５１３ごとに柔軟に制御することができる。
【０１４４】
また、登録処理部５４ａは、フローＩＤを再登録するとき、フローＩＤを、該再登録の前に登録された優先リスト５５ａまたは非優先リスト５５ｂから削除する。仮に、フローＩＤの削除を行わなければ、例えば、フロー＃１が非優先リスト５５ｂから優先リスト５５ａに再登録されたとき、読出処理部５３ａは、優先リスト５５ａ及び非優先リスト５５ｂから取得したフロー＃１に従い、キュー５１１からパケットを読み出す。つまり、読出処理部５３ａは、優先リスト５５ａ及び非優先リスト５５ｂの両方に従って、フロー＃１のキュー５１１から２度のパケットの読み出し処理を行う。
【０１４５】
したがって、一度目の読み出し処理によりキュー５１１が空になった場合、読出処理部５３ａは、二度目の読み出し処理において、無駄にキュー５１１を空読みしてしまう。よって、フローＩＤの登録変更時に、フローＩＤを元のリスト５５ａ，５５ｂから削除することにより、キュー５１１〜５１３の空読みを回避し、読み出し処理の効率が向上する。
【０１４６】
上述したフローＩＤの登録変更を容易とするため、優先リスト５５ａ及び非優先リスト５５ｂを、例えば双方向リンクリストにより構成するとよい。図２３は、この場合の優先リスト５５ａ及び非優先リスト５５ｂの構成例を示す構成図である。
【０１４７】
優先リスト５５ａにおいて、先頭のフロー＃１０（「先頭」参照）が、登録されたフローＩＤ５５０ａのうち、最も早く登録されたものであり、末尾のフロー＃１４２（「末尾」参照）が、登録されたフローＩＤ５５０ａのうち、最も遅く登録されたものである。非優先リスト５５ｂにおいて、先頭のフロー＃２０６が、登録されたフローＩＤ５５０ｂのうち、最も早く登録されたものであり、末尾のフロー＃１２１が、登録されたフローＩＤ５５０ｂのうち、最も遅く登録されたものである。
【０１４８】
優先リスト５５ａは、１組以上のフローＩＤ５５０ａ、後方リンクポインタ５５１ａ、及び前方リンクポインタ５５２ａを有する。図２３において、後方リンクポインタ５５１ａ及び前方リンクポインタ５５２ａが示すフローＩＤは、カッコ内に示されている。フローＩＤを後方リンクポインタ５５１ａは、フローＩＤ５５０ａの後側（末尾側）のフローＩＤ５５０ａを示し、前方リンクポインタ５５２ａは、フローＩＤ５５０ａの前側（先頭側）のフローＩＤ５５０ａを示す。
【０１４９】
例えば、フロー＃５５の後方リンクポインタ５５１ａは、「＃１４２」であるので、フロー＃５５の後側のフローＩＤは、「＃１４２」である。また、フロー＃５５の前方リンクポインタ５５２ａは、「＃１０」であるので、フロー＃５５の前側のフローＩＤは、「＃１０」である。なお、先頭のフローＩＤ５５０ａの前方リンクポインタ５５２ａ、及び、末尾のフローＩＤ５５０ａの後方リンクポインタ５５１ａは、存在しないため、「−」として記載されている。
【０１５０】
非優先リスト５５ｂは、１組以上のフローＩＤ５５０ｂ、後方リンクポインタ５５１ｂ、及び前方リンクポインタ５５２ｂを有する。図２３において、後方リンクポインタ５５１ｂ及び前方リンクポインタ５５２ｂが示すフローＩＤは、カッコ内に示されている。後方リンクポインタ５５１ｂは、フローＩＤ５５０ｂの後側（末尾側）のフローＩＤ５５０ｂを示し、前方リンクポインタ５５２ｂは、フローＩＤ５５０ｂの前側（先頭側）のフローＩＤ５５０ｂを示す。
【０１５１】
例えば、フロー＃１の後方リンクポインタ５５１ｂは、「＃８７」であるので、フロー＃１の後側のフローＩＤは、「＃８７」である。また、フロー＃１の前方リンクポインタ５５２ｂは、「＃４」であるので、フロー＃１の前側のフローＩＤは、「＃４」である。なお、先頭のフローＩＤ５５０ｂの前方リンクポインタ５５２ｂ、及び、末尾のフローＩＤ５５０ｂの後方リンクポインタ５５１ｂは、存在しないため、「−」として記載されている。
【０１５２】
次に、この双方向リンクリストを用いた登録変更の一例を述べる。図２４は、登録変更前及び登録変更後の優先リスト５５ａ及び非優先リスト５５ｂの状態の一例を示す構成図である。図２４（ａ）は、登録変更前の優先リスト５５ａ及び非優先リスト５５ｂの状態とフロー＃１の登録管理テーブルＴ１を示す。また、図２４（ｂ）は、登録変更後の優先リスト５５ａ及び非優先リスト５５ｂの状態とフロー＃１の登録管理テーブルＴ２を示す。登録管理テーブルＴ１、Ｔ２を参照すると理解されるように、ここでは、フロー＃１の登録先を、非優先リスト５５ｂから優先リスト５５ａに変更する例を挙げる。
【０１５３】
フロー＃１は、非優先リスト５５ｂから削除され（「削除」参照）、優先リスト５５ａの末尾に追加される（「追加」参照）。このとき、優先リスト５５ａにおいて、末尾に登録されていたフロー＃１４２の後方リンクポインタ５５１ａは、「−」（未登録）から「＃１」に変更される。また、フロー＃１の後方リンクポインタ５５１ａは、「−」（未登録）であり、フロー＃１の前方リンクポインタ５５２ａは、「＃１４２」である。これにより、フロー＃１４２の後方に、フロー＃１がリンクされる。
【０１５４】
また、非優先リスト５５ｂは、フロー＃１が削除されたので、フロー＃１の前方に登録されていたフロー＃４の後方リンクポインタ５５１ｂは、「＃１」から「＃８７」に変更される。また、フロー＃１の後方に登録されていたフロー＃８７の前方リンクポインタ５５２ｂは、「＃１」から「＃４」に変更される。これにより、フロー＃４の後方にフロー＃８７がリンクされる。
【０１５５】
このように、双方向リンクリストを用いることにより、前方リンクポインタ５５２ａ，５５２ｂ及び後方リンクポインタ５５１ａ，５５１ｂを変更するだけで、フローＩＤの登録変更を容易に行うことができる。また、双方向リンクリストを用いることにより、登録変更の対象となるフローＩＤの検索処理の負担が低減される。
【０１５６】
（第３実施例）
これまで述べた実施例において、フローの入力レート及び出力レートが近い場合、優先条件の成否が繰り返され、優先リスト５５ａ及び非優先リスト５５ｂ間において、当該フローＩＤの登録変更が頻繁に繰り返されることが考えられる。例えば、フロー＃１の入力レートが１１（Ｇｂｐｓ）であるのに対し、当該クレジットシェーパ６２により制御された出力レートが１０（Ｇｂｐｓ）である場合、フロー＃１は、優先リスト５５ａ及び非優先リスト５５ｂに交互に登録され得る。このような事態が生ずると、出力レートが安定せず、通信品質が劣化する可能性がある。
【０１５７】
そこで、登録処理部５４ａは、複数のキュー５１１〜５１３のうち、所定量以上のクレジットを保有するキューを、上記の優先条件に関わらず、優先キューとして判別してもよい。これにより、所定量以上のクレジットを保有するキュー５１１〜５１３に該当するフローＩＤは、優先条件の成否によらずに、優先リスト５５ａに登録される。
【０１５８】
図２５は、第３実施例における登録処理のフローチャートである。まず、登録処理部５４ａは、当該フローＩＤのクレジットカウンタが、所定量ＴＨ以上であるか否かを判定する（ステップＳｔ１０１）。このとき、登録処理部５４ａは、クレジットカウンタ部５２からクレジットカウンタを取得する。
【０１５９】
当該フローＩＤのクレジットカウンタが、所定量ＴＨ以上である場合（ステップＳｔ１０１のＹｅｓ）、登録処理部５４ａは、当該フローＩＤを優先リスト５５ａに登録して（ステップＳｔ１０３）、処理を終了する。一方、当該フローＩＤのクレジットカウンタが、所定量ＴＨより小さい場合（ステップＳｔ１０１のＮｏ）、登録処理部５４ａは、当該フローＩＤに対応するキュー５１１〜５１３が、クレジットカウンタ≧パケットのデータ量の合計（優先条件）を満たすか否かを判定する（ステップＳｔ１０２）。このとき、登録処理部５４ａは、クレジットカウンタをクレジットカウンタ部５２から取得し、パケットのデータ量の合計、つまりパケットの蓄積量を蓄積量監視部５６から取得する。
【０１６０】
優先条件が満たされる場合（ステップＳｔ１０２のＹｅｓ）、登録処理部５４ａは、当該フローＩＤを優先リスト５５ａに登録して（ステップＳｔ１０３）、処理を終了する。一方、優先条件が満たされない場合（ステップＳｔ１０２のＮｏ）、登録処理部５４ａは、当該フローＩＤを非優先リスト５５ｂに登録して（ステップＳｔ１０４）、処理を終了する。このようにして、登録処理は行われる。なお、図２５に示された処理は、図２０に示された処理にステップＳｔ１０１の処理を追加したものであるが、ステップＳｔ１０１の処理を、図２２に示された処理に追加してもよい。
【０１６１】
このように、登録処理部５４ａは、複数のキュー５１１〜５１３のうち、所定量ＴＨ以上のクレジットを保有するキューを、優先条件に関わらず、優先キューとして判別することにより、当該フローの出力レートが安定する。
【０１６２】
（第４実施例）
これまで述べた実施例において、登録処理部５４ａは、フローＩＤを２つのリスト５５ａ，５５ｂに分けて登録したが、これに限定されず、フローＩＤを、例えば４つのリストに分けて登録してもよい。この場合、例えば、上述した３つのイベント（パケットの格納、クレジットの払い出し、パケットの読み出し）が発生したときの入力レートに従って優先度を決定し、第１〜第４リストに分けて登録してもよい。
【０１６３】
例えば、スケジューラ部６からクレジットが払い出されたときに上記の優先条件が満たされる場合、パケットの入力レートは比較的に高いと考えられる。また、パケットがキュー５１１〜５１３に格納されたとき、または、パケットがキュー５１１〜５１３から読み出されたときに優先条件が満たされる場合、パケットの入力レートは比較的に低いと考えられる。そこで、例えば、以下の４つの条件に従って優先度１〜４を定義し、優先度１〜４に応じて、フローＩＤを第１〜第４リストに分けて登録してもよい。なお、優先度の高さの順は、１〜４の順とする（つまり、優先度１が最も高く、優先度４が最も低い）。
【０１６４】
優先度１：スケジューラ部６からクレジットが払い出されたときに優先条件が満たされる。
優先度２：パケットがキュー５１１〜５１３に格納されたとき、または、パケットがキュー５１１〜５１３から読み出されたときに優先条件が満たされる。
優先度３：スケジューラ部６からクレジットが払い出されたときに優先条件が満たされない。
優先度４：パケットがキュー５１１〜５１３に格納されたとき、または、パケットがキュー５１１〜５１３から読み出されたときに優先条件が満たされない。
【０１６５】
図２６には、第４実施例における登録管理テーブルの一例が示されている。図２６において、丸印（「○」参照）は、該フローＩＤが登録されていることを示し、バツ印（「×」参照）は、該フローＩＤが登録されていないことを示す。
【０１６６】
本例では、各フローＩＤは、優先度１〜４、つまり第１〜第４リストの１つに登録されるか、または何れのリストにも登録されない。フロー＃１は、優先度１であるので、第１リストに登録され、フロー＃２は、優先度４であるので、第４リストに登録されている。また、フロー＃Ｎは、優先度が決定されず、何れのリストにも登録されていない。この未登録の状態は、例えばフロー＃Ｎのクレジットカウンタが負の値である場合、またはキュー５１３が空である場合に生じ得る。
【０１６７】
登録処理部５４ａは、各フローＩＤの登録先が最大で１カ所となるように、登録状態を管理する。つまり、登録処理部５４ａは、各フローＩＤの二重登録を禁止する。登録処理部５４ａは、登録管理テーブルを参照することにより、フローＩＤの変更要否を判断する。
【０１６８】
図２７は、第４実施例における登録処理のフローチャートである。まず、登録処理部５４ａは、スケジューラ部６がクレジットを払い出したか否かを判定する（ステップＳｔ１１１）。
【０１６９】
スケジューラ部６がクレジットを払い出した場合（ステップＳｔ１１１のＹｅｓ）、登録処理部５４ａは、当該フローＩＤに対応するキュー５１１〜５１３が、クレジットカウンタ≧パケットのデータ量の合計（優先条件）を満たすか否かを判定する（ステップＳｔ１１４）。このとき、登録処理部５４ａは、クレジットカウンタをクレジットカウンタ部５２から取得し、パケットのデータ量の合計、つまりパケットの蓄積量を蓄積量監視部５６から取得する。
【０１７０】
優先条件が満たされる場合（ステップＳｔ１１４のＹｅｓ）、登録処理部５４ａは、当該フローＩＤを第１リストに登録して（ステップＳｔ１１５）、処理を終了する。一方、優先条件が満たされない場合（ステップＳｔ１１４のＮｏ）、登録処理部５４ａは、当該フローＩＤを第３リストに登録して（ステップＳｔ１１８）、処理を終了する。
【０１７１】
また、スケジューラ部６がクレジットを払い出していない場合（ステップＳｔ１１１のＮｏ）、登録処理部５４ａは、パケットがキュー５１１〜５１３に格納されたか否かを判定する（ステップＳｔ１１２）。パケットがキュー５１１〜５１３に格納されていない場合（ステップＳｔ１１２のＮｏ）、登録処理部５４ａは、パケットがキュー５１１〜５１３から読み出されたか否かを判定する（ステップＳｔ１１３）。
【０１７２】
パケットがキュー５１１〜５１３から読み出されていない場合（ステップＳｔ１１３のＮｏ）、登録処理部５４ａは、処理を終了する。一方、パケットがキュー５１１〜５１３から読み出された場合（ステップＳｔ１１３のＹｅｓ）、登録処理部５４ａは、当該フローＩＤに対応するキュー５１１〜５１３が、クレジットカウンタ≧パケットのデータ量の合計（優先条件）を満たすか否かを判定する（ステップＳｔ１１７）。また、パケットがキュー５１１〜５１３に格納された場合（ステップＳｔ１１２のＹｅｓ）も、登録処理部５４ａは、優先条件の成否を判定する（ステップＳｔ１１７）。
【０１７３】
優先条件が満たされる場合（ステップＳｔ１１７のＹｅｓ）、登録処理部５４ａは、当該フローＩＤを第２リストに登録して（ステップＳｔ１１６）、処理を終了する。一方、優先条件が満たされない場合（ステップＳｔ１１７のＮｏ）、登録処理部５４ａは、当該フローＩＤを第４リストに登録して（ステップＳｔ１１９）、処理を終了する。このようにして、登録処理は行われる。
【０１７４】
このように、登録処理部５４ａは、スケジューラ部６が、複数のキュー５１１〜５１３の１つにクレジットを与えたとき、当該キューが優先条件を満たすか否かを判定する。そして、登録処理部５４ａは、当該キューが優先条件を満たす場合、当該フローＩＤを、読出条件を満たした順に第１リストに登録する。一方、当該キューが前記優先条件を満たさない場合、登録処理部５４ａは、当該フローＩＤを、読出条件を満たした順に前記第３リストに登録する。
【０１７５】
また、登録処理部５４ａは、読出処理部５３ａが、複数のキュー５１１〜５１３の１つから１以上のパケットを読み出したとき、または、複数のキュー５１１〜５１３の１つに１以上のパケットが蓄積されたとき、当該キューが優先条件を満たすか否かを判定する。そして、登録処理部５４ａは、当該キューが前記優先条件を満たす場合、当該フローＩＤを、読出条件を満たした順に第２リストに登録する。一方、当該キューが前記優先条件を満たさない場合、登録処理部５４ａは、当該フローＩＤを、読出条件を満たした順に前記第４リストに登録する。
【０１７６】
読出処理部５３ａは、優先順位を、第１リスト、第２リスト、第３リスト、及び第４リストの順とし、フローＩＤを、第１リスト、第２リスト、第３リスト、及び第４リストから優先順位に従って取得する。読出処理部５３ａは、複数のキュー５１１〜５１３のうち、取得したフローＩＤに応じたキューから１以上のパケットを読み出す。
【０１７７】
これにより、読出処理部５３ａは、優先条件の成否だけでなく、イベント（パケットの格納、クレジットの払い出し、パケットの読み出し）に基づくフローの優先度に応じて、柔軟にパケットを読み出すことができる。なお、本実施例において、第２実施例の登録変更処理（図２２参照）、及び第３実施例のクレジットに基づく優先キューの判別処理（図２５参照）を用いてもよい。
【０１７８】
（第５実施例）
これまで述べた実施例において、登録処理部５４ａは、上記の優先条件に基づき、スケジューラ部６により与えられるクレジットに基づく読出レート以下のレートでパケットが入力されるキュー５１１〜５１３、つまり優先キューを判別したが、これに限定されない。例えば、登録処理部５４ａは、入力処理部９１２内のポリサー８１におけるポリシングの実行結果に基づいて、優先キューを判別してもよい。
【０１７９】
ポリシング機能は、例えば「ＭＥＦ（Metro Ethernet Forum）１０」及び「ＲＦＣ（Request For Comments）２６９８」により、「2-rate 3-color」などの方式が規定されている。「2-rate 3-color」方式では、保証帯域であるＣＩＲ（Committed Information Rate）と、ベストエフォート型帯域であるＥＩＲ（Excess Information Rate）とに応じた２つのポリサーが用いられる。そして、２つのポリサーのポリシングの結果に基づいて、パケットごとに、入力レート（帯域）のレベルを示すカラー情報が判定される（いわゆる「2-rate 3-color  メータ」）。なお、ＣＩＲは、ＥＩＲより小さい。
【０１８０】
ＣＩＲ以下のレート（流量）で入力されるパケットは、カラー情報が「Green」であると判定され、ＣＩＲを超え、ＥＩＲ以下のレートで入力されるパケットは、カラー情報が「Yellow」であると判定される。さらに、ＥＩＲを超えるレートで入力されるパケットは、カラー情報が「Red」であると判定される。
【０１８１】
図２８は、ポリサー８１の帯域判定機能の概念を示す構成図である。ポリサー８１は、ＣＩＲのポリシング機能に用いられるトークンを供給する第１供給源８１０と、該トークンを貯留する第１トークンバケット８１１と、パケットの入力レートがＣＩＲ以上であるか否かをチェックするＣＩＲチェック部８１２とを有する。また、ポリサー８１は、ＥＩＲのポリシング機能に用いられるトークンを供給する第２供給源８１３と、該トークンを貯留する第２トークンバケット８１４と、パケットの入力レートがＥＩＲ以下であるか否かをチェックするＥＩＲチェック部８１５とを有する。
【０１８２】
図２８において、第１供給源８１０は、水道の蛇口として記載され、第１供給源８１０が供給するトークンは、蛇口から出る水滴として記載されている。第１供給源８１０は、１滴を１（Ｂｙｔｅ）として、８／ＣＩＲの間隔で第１トークンバケット８１１に水滴を供給する。
【０１８３】
また、第２供給源８１３は、水道の蛇口として記載され、第２供給源８１３が供給するトークンは、蛇口から出る水滴として記載されている。第２供給源８１３は、１滴を１（Ｂｙｔｅ）として、８／ＥＩＲの間隔で第２トークンバケット８１４に水滴を供給する。
【０１８４】
ＣＩＲチェック部８１２は、パケット（ＰＫＴ）ごとに、第１トークンバケット８１１に貯留されたトークンの貯留量に基づいて、パケットの入力レートがＣＩＲ以上であるか否かをチェックする。入力レートがＣＩＲ以上である場合（「ＯＫ」参照）、ポリサー８１は、パケットのカラー情報が「Green」であると判定する。
【０１８５】
一方、入力レートがＣＩＲより小さい場合（「ＮＧ」参照）、ＥＩＲチェック部８１５は、パケットごとに、第２トークンバケット８１４に貯留されたトークンの貯留量に基づいて、パケットの入力レートがＥＩＲ以下であるか否かをチェックする。入力レートがＥＩＲ以下である場合（「ＯＫ」参照）、ポリサー８１は、パケットのカラー情報が「Yellow」であると判定する。また、入力レートがＥＩＲより大きい場合（「ＮＧ」参照）、ポリサー８１は、パケットのカラー情報が「Red」であると判定する。
【０１８６】
このような判定処理により得られたカラー情報は、例えば、パケットに付与された装置内ヘッダＨに格納される。なお、カラー情報は、通信装置から出力されるとき、パケットのヘッダの廃棄優先度情報フィールドに格納されてもよい。
【０１８７】
図２９は、第５実施例の出力処理部９１３の機能構成を示す構成図である。図２９において、図１６と共通する構成には、同一の符号を付し、その説明を省略する。
【０１８８】
出力処理部９１３は、キュー管理部５及びスケジューラ部６を有する。キュー管理部５は、分配部５０ｂと、複数のキュー５１１〜５１３と、クレジットカウンタ部５２と、読出処理部５３ａと、登録処理部５４ｂと、カラー情報監視部５６ａと、メモリ（記憶部）Ｍとを有する。メモリＭは、優先リスト５５ａ及び非優先リスト５５ｂを記憶する。
【０１８９】
スケジューラ部６は、蓄積量カウンタ部６０と、クレジット払出部６１と、複数のクレジットシェーパ６２とを有する。なお、スケジューラ部６の動作は、図４を参照して述べたとおりである。
【０１９０】
分配部５０ｂは、入力されたパケットを、フローＩＤに基づいて、複数のキュー５１１〜５１３に分配するだけでなく、各キュー５１１〜５１３に入力したパケットの装置内ヘッダＨのカラー情報を取得して、カラー情報監視部５６ａに通知する。カラー情報監視部５６ａは、分配部５０ｂからのカラー情報の通知に基づいて、フロー＃１〜＃Ｎごとのカラー情報を監視する。
【０１９１】
カラー情報監視部５６ａは、フロー＃１〜＃Ｎごとのカラー情報を登録処理部５４ｂに通知する。登録処理部５４ｂは、カラー情報に基づいて、フローごとの優先度を判別する。より具体的には、登録処理部５４ｂは、複数のキュー５１１〜５１３のうち、カラー情報が「Green」であるパケットを蓄積するキューを、優先キューとして判別し、上記の読出条件を満たした順に、当該フローＩＤを優先キュー５５ａに登録する。また、登録処理部５４ｂは、カラー情報が「Yellow」または「Red」であるパケットを蓄積するキューを、非優先キューとして判別し、読出条件を満たした順に、当該フローＩＤを非優先キュー５５ｂに登録する。
【０１９２】
図３０は、第５実施例における登録処理のフローチャートである。まず、登録処理部５４ｂは、当該フローのパケットのカラー情報が「Green」であるか否かを判定する（ステップＳｔ１２１）。
【０１９３】
カラー情報が「Green」である場合（ステップＳｔ１２１のＹｅｓ）、登録処理部５４ｂは、当該フローＩＤを優先リスト５５ａに登録して（ステップＳｔ１２２）、処理を終了する。一方、カラー情報が「Yellow」または「Red」である場合（ステップＳｔ１２１のＮｏ）、登録処理部５４ｂは、当該フローＩＤを非優先リスト５５ｂに登録して（ステップＳｔ１２３）、処理を終了する。このようにして、登録処理は行われる。
【０１９４】
このように、本実施例において、ポリサー（レート検出部）８１は、パケットの入力レートを、カラー情報として検出する。登録処理部５４ｂは、複数のキュー５１１〜５１３のうち、ポリサー８１により検出された入力レートが所定値（ＣＩＲ）以下であるパケット、つまりカラー情報が「Green」であるパケットを蓄積するキューを、優先キューとして判別する。
【０１９５】
したがって、登録処理部５４ｂは、パケットに付与されるカラー情報を用いることにより、優先キューを容易に判別できる。なお、本実施例において、カラー情報が「Green」であるパケットに対応するフローＩＤは、優先リスト５５ａに登録され、カラー情報が「Yellow」または「Red」であるパケットに対応するフローＩＤは、非優先リスト５５ｂに登録されたが、これに限定されない。例えば、「Green」、「Yellow」または「Red」の各カラー情報にそれぞれ対応する３つのリストを設けておき、フローＩＤを、該３つのリストのうち、当該パケットのカラー情報に対応するリストに登録してもよい。また、本実施例において、第２実施例の登録変更処理（図２２参照）、及び第３実施例のクレジットに基づく優先キューの判別処理（図２５参照）を用いてもよい。
【０１９６】
（第６実施例）
優先キューの判別手段は、上述した内容に限定されず、例えば、パケットの種類を識別し、キューに蓄積されるパケットの種類に応じて、優先キューを判別してもよい。図３１は、第６実施例の出力処理部９１３の機能構成を示す構成図である。図３１において、図１６と共通する構成には、同一の符号を付し、その説明を省略する。
【０１９７】
出力処理部９１３は、ヘッダ識別部７、キュー管理部５、及びスケジューラ部６を有する。ヘッダ識別部７は、例えば、ＶｏＩＰのパケットを識別する。図３２は、ＶｏＩＰのパケットの構成を示す構成図である。
【０１９８】
ＶｏＩＰは、ＵＤＰ（User Datagram Protocol）を上位プロトコルとし、さらに、ＲＴＰ（Real-time Transport Protocol）を、その上位プロトコルとする。このため、ＶｏＩＰのパケット（ＩＰパケット）は、ＩＰヘッダ及びＵＤＰデータグラムを有し、ＵＤＰデータグラムは、ＵＤＰヘッダと、ＲＴＰヘッダ及び音声データを含むＲＴＰパケットとを有する。
【０１９９】
ヘッダ識別部７は、ＶｏＩＰのパケットを識別した場合、当該パケットに付与された装置内ヘッダに、「高」を示す遅延優先度情報を挿入し、その他のパケットを識別した場合、当該パケットに付与された装置内ヘッダに、「低」を示す遅延優先度情報を挿入する。遅延優先度情報が「高」を示す場合、当該パケットは、遅延及び揺らぎが優先的に抑止され、遅延優先度情報が「低」を示す場合、当該パケットは、低優先で遅延及び揺らぎが抑止される。
【０２００】
キュー管理部５は、分配部５０ｃと、複数のキュー５１１〜５１３と、クレジットカウンタ部５２と、読出処理部５３ａと、登録処理部５４ｃと、遅延優先度監視部５６ｂと、メモリ（記憶部）Ｍとを有する。メモリＭは、優先リスト５５ａ及び非優先リスト５５ｂを記憶する。
【０２０１】
スケジューラ部６は、蓄積量カウンタ部６０と、クレジット払出部６１と、複数のクレジットシェーパ６２とを有する。なお、スケジューラ部６の動作は、図４を参照して述べたとおりである。
【０２０２】
分配部５０ｃは、入力されたパケットを、フローＩＤに基づいて、複数のキュー５１１〜５１３に分配するだけでなく、各キュー５１１〜５１３に入力したパケットの装置内ヘッダの遅延優先度情報を取得して、遅延優先度監視部５６ｂに通知する。遅延優先度監視部５６ｂは、分配部５０ｂからのカラー情報の通知に基づいて、フロー＃１〜＃Ｎごとの遅延優先度情報を監視する。
【０２０３】
遅延優先度監視部５６ｂは、フロー＃１〜＃Ｎごとの遅延優先度情報を登録処理部５４ｃに通知する。登録処理部５４ｃは、遅延優先度情報に基づいて、フローごとの優先度を判別する。より具体的には、登録処理部５４ｃは、複数のキュー５１１〜５１３のうち、遅延優先度情報が「高」であるパケットを蓄積するキューを、優先キューとして判別し、上記の読出条件を満たした順に、当該フローＩＤを優先キュー５５ａに登録する。また、登録処理部５４ｃは、遅延優先度情報が「低」であるパケットを蓄積するキューを、非優先キューとして判別し、読出条件を満たした順に、当該フローＩＤを非優先キュー５５ｂに登録する。
【０２０４】
図３３は、第６実施例における登録処理のフローチャートである。まず、登録処理部５４ｃは、当該フローのパケットの遅延優先度情報が「高」であるか否かを判定する（ステップＳｔ１３１）。
【０２０５】
遅延優先度情報が「高」である場合（ステップＳｔ１３１のＹｅｓ）、登録処理部５４ｃは、当該フローＩＤを優先リスト５５ａに登録して（ステップＳｔ１３２）、処理を終了する。一方、遅延優先度情報が「低」である場合（ステップＳｔ１３１のＮｏ）、登録処理部５４ｃは、当該フローＩＤを非優先リスト５５ｂに登録して（ステップＳｔ１３３）、処理を終了する。このようにして、登録処理は行われる。
【０２０６】
このように、ヘッダ識別部（識別部）７は、特定の種類のパケット（上記の例では、ＶｏＩＰのパケット）を識別する。登録処理部５４ｃは、複数のキュー５１１〜５１３のうち、ヘッダ識別部７により識別された特定の種類のパケットを蓄積するキューを、優先キューとして判別する。
【０２０７】
したがって、ヘッダ識別部７が識別するパケットの種類を、ＶｏＩＰのような帯域保証されたフローのパケットとすることにより、登録処理部５４ｂは、ヘッダ識別部７により識別した種類に応じて、優先キューを容易に判別できる。なお、本実施例において、第２実施例の登録変更処理（図２２参照）、及び第３実施例のクレジットに基づく優先キューの判別処理（図２５参照）を用いてもよい。
【０２０８】
（シミュレーション結果）
次に、実施例に係る通信装置の効果を、シミュレーション結果を用いて説明する。図３４は、シミュレーションモデルを示す構成図である。
【０２０９】
本シミュレーションにおいて、入力されるパケットのフローとして、２０００組のHighクラス及びLowクラスのフローを仮定する。Highクラスのフローは、例えば音声系データや金融系データなどの帯域保証型トラフィックであり、６４（Ｂｙｔｅ）長のパケットが、５（Ｍｂｐｓ）のレートでキューに入力される。一方、Lowクラスのフローは、例えばベストエフォート型トラフィックであり、６４（Ｂｙｔｅ）長のパケットが、４５（Ｍｂｐｓ）のレートでキューに入力される。
【０２１０】
各組のHighクラスのフローは、同一組のLowクラスのフローより優先的に出力されるように、完全優先制御される（「ＳＰ」（Strict Priority）参照）。シェーパ（クレジットシェーパ６２に相当）は、Highクラス及びLowクラスのフローの出力レートの合計が２５（Ｍｂｐｓ）となるように各フローをシェーピングする。また、Highクラス及びLowクラスの組同士の間の制御は、例えばラウンドロビン方式（「ＲＲ」（Round Robin）参照）に従って行われる。
【０２１１】
これにより、Highクラスのフローは、入力レート及び出力レートの両方が５（Ｍｂｐｓ）となり、Lowクラスのフローは、入力レートが４５（Ｍｂｐｓ）であるのに対し、出力レートとして、残りの２５（Ｍｂｐｓ）（＝２５−５）が与えられる。すなわち、Highクラスのフローのパケットは、スケジューラ部６により与えられるクレジットに基づく読出レート以下のレートでキュー入力される。また、Lowクラスのフローのパケットは、スケジューラ部６により与えられるクレジットに基づく読出レートより大きいレートでキュー入力される。なお、Highクラス及びLowクラスは２０００組あるため、全入力レートが１００（Ｇｂｐｓ）であるのに対し、全出力レートは５０（Ｇｂｐｓ）となる。
【０２１２】
図３５は、比較例及び実施例におけるパケットの最大遅延時間のシミュレーション結果を示すグラフである。図３５（ａ）は、上記の第２比較例に基づくシミュレーション結果を示し、図３５（ｂ）は、上述した実施例に基づくシミュレーション結果を示す。
【０２１３】
図３５（ａ）及び図３５（ｂ）において、横軸は、シミュレーション時間を示し、縦軸は、上記のHighクラスのフローのパケットの最大遅延時間を示す。なお、シミュレーション時間は、フローの入力の開始後の１００〜２００（ｍｓ）である。
【０２１４】
図３５（ａ）を参照すると理解されるように、比較例では、最大で約４（ｍｓ）の遅延が生ずる。本シミュレーションにおいて、Lowクラスのフローのパケット長は、６４（Ｂｙｔｅ）（つまりショートパケット）であるため、クレジットが借金状態となっても、個々のフローのクレジットカウンタの絶対値は小さい。しかし、２０００ものLowクラスのフローのクレジットの借金状態が重畳されると、Lowクラスのフローのパケットは、出力ポートの帯域を、Highクラスのフローのパケットの出力に先立って占有する（図１４参照）。このため、Highクラスのフローのパケットの最大遅延時間が増加し、通信品質が劣化する。
【０２１５】
これに対し、図３５（ｂ）を参照すると理解されるように、実施例では、最大遅延時間が、約０．０１（ｍｓ）に安定している。このように、実施例によれば、Highクラスのフローのように、スケジューラ部６により与えられるクレジットに基づく読出レート以下のレートでキュー入力されるフローの通信品質が改善される。
【０２１６】
これまで述べたように、実施例に係る通信装置は、１以上のパケットを蓄積する複数のキュー５１１〜５１３と、スケジューラ部６と、判別部（登録処理部）５４ａ〜５４ｃと、読出処理部５３ａとを有する。スケジューラ部６は、複数のキュー５１１〜５１３の各々に読出許容量（クレジット）を与える。
【０２１７】
判別部５４ａ〜５４ｃは、複数のキュー５１１〜５１３のうち、スケジューラ部６により与えられる読出許容量に基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別する。読出処理部５３ａは、複数のキュー５１１〜５１３から、優先キューを優先し、キューごとの読出許容量及びキューごとに蓄積された１以上のパケットのデータ量に関する読出条件を満たした順に、読出許容量を消費して１以上のパケットを読み出す。
【０２１８】
実施例に係る通信装置によると、読出処理部５３は、複数のキュー５１１〜５１３から、キューごとの読出許容量及びキューごとに蓄積されたパケットのデータ量に関する読出条件を満たした順に、パケットを読み出す。このため、読出処理部５３は、多くの時間を必要とするサーチ処理を行うことなく、負荷が軽い簡単な処理でキュー５１１〜５１３を選択し、高いスループットでパケットを読み出すことができる。
【０２１９】
また、実施例に係る通信装置によると、判別部５４ａ〜５４ｃは、複数のキュー５１１〜５１３のうち、パケットの入力レートが、読出許容量に基づく読出レート以下であるキューを、優先キューとして識別する。読出処理部５３ａは、複数のキュー５１１〜５１３から、優先キューを優先してパケットを読み出す。
【０２２０】
このため、帯域保証されたトラフィックのように、入力レートが一定以下に制御されたパケットは、他のパケットに優先して、キュー５１１〜５１３から読み出される。一方、ベストエフォート型のトラフィックのように、入力レートが制御されず、出力レートを上回るパケットは、キュー５１１〜５１３から読み出しが、上記のパケットの後回しとなる。したがって、実施例に係る通信装置によると、通信品質を改善することができる。
【０２２１】
また、実施例に係るパケットスケジューリング方法は、以下の工程（１）及び（２）を含む。
（１）１以上のパケットを蓄積する複数のキュー５１１〜５１３の各々に読出許容量（クレジット）を与える工程
（２）複数のキュー５１１〜５１３のうち、与えられる読出許容量に基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別する工程
（３）複数のキュー５１１〜５１３から、優先キューを優先し、キューごとの読出許容量及びキューごとに蓄積されたパケットのデータ量に関する読出条件を満たした順に、読出許容量を消費してパケットを読み出す工程
【０２２２】
実施例に係るパケットスケジューリング方法によると、上記の通信換装置と同様の構成を有するため、上述した作用効果を奏する。
【０２２３】
以上、好ましい実施例を参照して本発明の内容を具体的に説明したが、本発明の基本的技術思想及び教示に基づいて、当業者であれば、種々の変形態様を採り得ることは自明である。
【０２２４】
なお、以上の説明に関して更に以下の付記を開示する。
（付記１）  １以上のパケットを蓄積する複数のキューと、
前記複数のキューの各々に読出許容量を与えるスケジューラ部と、
前記複数のキューのうち、前記スケジューラ部により与えられる前記読出許容量に基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別する判別部と、
前記複数のキューから、前記優先キューを優先し、キューごとの前記読出許容量及びキューごとに蓄積された前記１以上のパケットのデータ量に関する読出条件を満たした順に、前記読出許容量を消費して前記１以上のパケットを読み出す読出処理部とを有することを特徴とする通信装置。
（付記２）  前記判別部は、前記複数のキューのうち、保有する前記読出許容量が、蓄積された前記１以上のパケットのデータ量の合計に相当する量以上とする優先条件を満たすキューを、前記優先キューとして判別することを特徴とする付記１に記載の通信装置。
（付記３）  前記複数のキューのうち、前記読出処理部の読み出し対象となるキューの識別子が登録された第１リスト及び第２リストを記憶する記憶部を、さらに有し、
前記判別部は、前記複数のキューのうち、前記優先キューの識別子を、前記読出条件を満たした順に前記第１リストに登録し、他のキューの識別子を、前記読出条件を満たした順に前記第２リストに登録し、
前記読出処理部は、前記識別子を、前記第２リストより前記第１リストから優先して取得し、前記複数のキューのうち、取得した前記識別子に応じたキューから前記１以上のパケットを読み出すことを特徴とする付記２に記載の通信装置。
（付記４）  前記判別部は、前記スケジューラ部が、前記複数のキューのうち、前記識別子が前記第２リストに登録されたキューに前記読出許容量を与えたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を前記第１リストに再登録することを特徴とする付記３に記載の通信装置。
（付記５）  前記判別部は、前記読出処理部が、前記複数のキューのうち、前記識別子が前記第１リストに登録されたキューから前記１以上のパケットを読み出したとき、または、前記複数のキューのうち、前記識別子が前記第１リストに登録されたキューに前記１以上のパケットが蓄積されたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を前記第２リストに再登録することを特徴とする付記３または４に記載の通信装置。
（付記６）  前記判別部は、前記識別子を再登録するとき、前記識別子を、該再登録の前に登録された前記第１リストまたは前記第２リストから削除することを特徴とする付記４または５に記載の通信装置。
（付記７）  前記判別部は、前記複数のキューのうち、所定量以上の前記読出許容量を保有するキューを、前記優先条件に関わらず、前記優先キューとして判別することを特徴とする付記２乃至６に記載の通信装置。
（付記８）  前記複数のキューのうち、前記読出処理部の読み出し対象となるキューの識別子が登録された第１リスト、第２リスト、第３リスト、及び第４リストを記憶する記憶部を、さらに有し、
前記判別部は、
前記スケジューラ部が、前記複数のキューの１つに前記読出許容量を与えたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を、前記読出条件を満たした順に前記第１リストに登録し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を、前記読出条件を満たした順に前記第３リストに登録し、
前記読出処理部が、前記複数のキューの１つから前記１以上のパケットを読み出したとき、または、前記複数のキューの１つに前記１以上のパケットが蓄積されたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を、前記読出条件を満たした順に前記第２リストに登録し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を、前記読出条件を満たした順に前記第４リストに登録し、
前記読出処理部は、優先順位を、前記第１リスト、前記第２リスト、前記第３リスト、及び前記第４リストの順とし、前記識別子を、前記第１リスト、前記第２リスト、前記第３リスト、及び前記第４リストから前記優先順位に従って取得し、前記複数のキューのうち、取得した前記識別子に応じたキューから前記１以上のパケットを読み出すことを特徴とする付記２に記載の通信装置。
（付記９）  前記読出条件は、前記読出許容量及び前記複数のキューに蓄積された前記１以上のパケットのデータ量が、それぞれ、０より大きいときに満たされることを特徴とする付記１乃至８の何れかに記載の通信装置。
（付記１０）  前記１以上のパケットの入力レートを検出するレート検出部を、さらに有し、
前記判別部は、前記複数のキューのうち、前記レート検出部により検出された前記入力レートが所定値以下である前記１以上のパケットを蓄積するキューを、前記優先キューとして判別することを特徴とする付記１に記載の通信装置。
（付記１１）  前記１以上のパケットのうち、特定の種類のパケットを識別する識別部を、さらに有し、
前記判別部は、前記複数のキューのうち、前記識別部により識別された前記特定の種類のパケットを蓄積するキューを、前記優先キューとして判別することを特徴とする付記１に記載の通信装置。
（付記１２）  １以上のパケットを蓄積する複数のキューの各々に読出許容量を与え、
前記複数のキューのうち、与えられる前記読出許容量に基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別し、
前記複数のキューから、前記優先キューを優先し、キューごとの前記読出許容量及びキューごとに蓄積された前記１以上のパケットのデータ量に関する読出条件を満たした順に、前記読出許容量を消費して前記１以上のパケットを読み出すことを特徴とするパケットスケジューリング方法。
（付記１３）  前記複数のキューのうち、保有する前記読出許容量が、蓄積された前記１以上のパケットのデータ量の合計に相当する量以上とする優先条件を満たすキューを、前記優先キューとして判別することを特徴とする付記１２に記載のパケットスケジューリング方法。
（付記１４）  前記複数のキューのうち、前記優先キューの識別子を、前記読出条件を満たした順に第１リストに登録し、他のキューの識別子を、前記読出条件を満たした順に第２リストに登録し、
前記識別子を、前記第２リストより前記第１リストから優先して取得し、前記複数のキューのうち、取得した前記識別子に応じたキューから前記１以上のパケットを読み出すことを特徴とする付記１３に記載のパケットスケジューリング方法。
（付記１５）  前記複数のキューのうち、前記識別子が前記第２リストに登録されたキューに前記読出許容量を与えたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を前記第１リストに再登録することを特徴とする付記１４に記載のパケットスケジューリング方法。
（付記１６）  前記複数のキューのうち、前記識別子が前記第１リストに登録されたキューから前記１以上のパケットを読み出したとき、または、前記複数のキューのうち、前記識別子が前記第１リストに登録されたキューに前記１以上のパケットが蓄積されたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を前記第２リストに再登録することを特徴とする付記１４または１５に記載のパケットスケジューリング方法。
（付記１７）  前記識別子を再登録するとき、前記識別子を、該再登録の前に登録された前記第１リストまたは前記第２リストから削除することを特徴とする付記１５または１６に記載のパケットスケジューリング方法。
（付記１８）  前記複数のキューのうち、所定量以上の前記読出許容量を保有するキューを、前記優先条件に関わらず、前記優先キューとして判別することを特徴とする付記１３乃至１７に記載のパケットスケジューリング方法。
（付記１９）  前記複数のキューの１つに前記読出許容量を与えたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を、前記読出条件を満たした順に第１リストに登録し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を、前記読出条件を満たした順に第３リストに登録し、
前記複数のキューの１つから前記１以上のパケットを読み出したとき、または、前記複数のキューの１つに前記１以上のパケットが蓄積されたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を、前記読出条件を満たした順に第２リストに登録し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を、前記読出条件を満たした順に第４リストに登録し、
優先順位を、前記第１リスト、前記第２リスト、前記第３リスト、及び前記第４リストの順とし、前記識別子を、前記第１リスト、前記第２リスト、前記第３リスト、及び前記第４リストから前記優先順位に従って取得し、前記複数のキューのうち、取得した前記識別子に応じたキューから前記１以上のパケットを読み出すことを特徴とする付記１３に記載のパケットスケジューリング方法。
（付記２０）  前記読出条件は、前記読出許容量及び前記複数のキューに蓄積された前記１以上のパケットのデータ量が、それぞれ、０より大きいときに満たされることを特徴とする付記１２乃至１９の何れかに記載のパケットスケジューリング方法。
【符号の説明】
【０２２５】
６                                              スケジューラ部
７                                              ヘッダ識別部（識別部）
５３，５３ａ                                    読出処理部
５４ａ〜５４ｃ                                  登録処理部（判別部）
５１１〜５１３                                  キュー
５５ａ                                          優先リスト（第１リスト）
５５ｂ                                          非優先リスト（第２リスト）
８１                                            ポリサー（レート検出部）
Ｍ                                              メモリ（記憶部）
【図１】
2015037251.tif 000003
【図２】
2015037251.tif 000004
【図３】
2015037251.tif 000005
【図４】
2015037251.tif 000006
【図５】
2015037251.tif 000007
【図６】
2015037251.tif 000008
【図７】
2015037251.tif 000009
【図８】
2015037251.tif 000010
【図９】
2015037251.tif 000011
【図１０】
2015037251.tif 000012
【図１１】
2015037251.tif 000013
【図１２】
2015037251.tif 000014
【図１３】
2015037251.tif 000015
【図１４】
2015037251.tif 000016
【図１５】
2015037251.tif 000017
【図１６】
2015037251.tif 000018
【図１７】
2015037251.tif 000019
【図１８】
2015037251.tif 000020
【図１９】
2015037251.tif 000021
【図２０】
2015037251.tif 000022
【図２１】
2015037251.tif 000023
【図２２】
2015037251.tif 000024
【図２３】
2015037251.tif 000025
【図２４】
2015037251.tif 000026
【図２５】
2015037251.tif 000027
【図２６】
2015037251.tif 000028
【図２７】
2015037251.tif 000029
【図２８】
2015037251.tif 000030
【図２９】
2015037251.tif 000031
【図３０】
2015037251.tif 000032
【図３１】
2015037251.tif 000033
【図３２】
2015037251.tif 000034
【図３３】
2015037251.tif 000035
【図３４】
2015037251.tif 000036
【図３５】
2015037251.tif 000037