(57)【要約】【課題】  通信品質を向上する通信装置及び通信方法を提供する。【解決手段】  通信装置は、複数の出力ポートと、パケットを、前記複数の出力ポートのうち、同一の出力ポートから同一の期間内に出力されるパケットごとに分けて格納する複数のキューと、前記複数の出力ポートのそれぞれに対応し、前記複数のキューのうち、当該出力ポートから出力されるパケットが読み出されるキューを、前記期間が経過するたびに切り替える複数の第１セレクタと、前記複数の出力ポートのパケットの出力レートに応じた時間間隔で、前記複数の第１セレクタのうち、パケットが出力される第１セレクタを切り替える第２セレクタとを有する。【選択図】図９
2015091009.tif 000002
【特許請求の範囲】
【請求項１】
複数の出力ポートと、
パケットを、前記複数の出力ポートのうち、同一の出力ポートから同一の期間内に出力されるパケットごとに分けて格納する複数のキューと、
前記複数の出力ポートのそれぞれに対応し、前記複数のキューのうち、当該出力ポートから出力されるパケットが読み出されるキューを、前記期間が経過するたびに切り替える複数の第１セレクタと、
前記複数の出力ポートのパケットの出力レートに応じた時間間隔で、前記複数の第１セレクタのうち、パケットが出力される第１セレクタを切り替える第２セレクタとを有することを特徴とする通信装置。
【請求項２】
前記複数の第１セレクタは、前記複数の出力ポートの停止制御にそれぞれ従ってパケットの読み出しを停止し、前記停止制御の解除後、前記複数のキューのうち、１以上の空のキューの選択時間を、多くとも当該停止時間だけ短縮することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記１以上の空のキューの選択時間の各短縮時間の合計は、前記停止時間より小さい第１上限値により制限されることを特徴とする請求項２に記載の通信装置。
【請求項４】
前記１以上の空のキューの選択時間の各短縮時間は、前記期間より短い第２上限値により制限されることを特徴とする請求項２または３に記載の通信装置。
【請求項５】
パケットを、複数の出力ポートのうち、同一の出力ポートから同一の期間内に出力されるパケットごとに分けて複数のキューにそれぞれ格納し、
前記複数の出力ポートのそれぞれに対応する複数の第１セレクタにより、前記複数のキューのうち、当該出力ポートから出力されるパケットが読み出されるキューを、前記期間が経過するたびに切り替え、
第２セレクタにより、前記複数の出力ポートのパケットの出力レートに応じた時間間隔で、前記複数の第１セレクタのうち、パケットが出力される第１セレクタを切り替えることを特徴とする通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、通信装置及び通信方法に関する。
【背景技術】
【０００２】
通信需要の増加に伴い、レイヤ２スイッチやルータなどのスイッチ機器、すなわちパケットを交換するパケット交換装置のスループットの向上が求められている。スループットを向上するために、複数のキューからのパケットの読み出し制御によりトラフィックを管理するスケジューラの改善が提案されている（例えば特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−２０４３４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
スケジューラの種類としては、例えば、「出力型スケジューラ」及び「入力型スケジューラ」が挙げられる。出力型スケジューラは、パケットを格納するキューの出力側に配置され、パケットの読み出し対象となるキューを選択する。出力型スケジューラを用いた場合、フロー（宛先や優先度などに応じたパケットの区分）ごとのキューの容量の設定及びＱｏＳ（Quality of Service）の実現が容易である。しかし、出力型スケジューラは、キュー数が多いほど、キュー間において読み出し処理の競合が発生しやすいため、読み出し対象のキューの選択に時間がかかり、スループットが影響を受ける。
【０００５】
これに対し、入力型スケジューラは、キューの入力側に配置され、パケットが出力される時刻を決定し、パケットが出力される期間ごと（例えば１（秒）単位の期間）に設けられた複数のキューに、決定した時刻に応じて、順次にパケットを入力する。ここで、各キューに格納されるパケット量は、該期間内に読み出し可能な量に制限される。つまり、各キュー内のパケットは、次に読み出されるキューの期間が始まるまでに読み出される。これにより、入力型スケジューラは、キュー間の読み出し処理の競合を回避し、高いスループットを実現する。
【０００６】
入力型スケジューラは、パケットを、当該パケットのフロー（宛先や優先度などに応じたパケットの区分）のレートに応じて、各キューに入力する。例えば、各キューの期間が１（秒）単位である場合、入力型スケジューラは、レートが１（個／秒）であるとき、各キューに１（個）ずつパケットを入力し、レートが３（個／秒）であるとき、各キューに３（個）ずつパケットを入力する。また、入力型スケジューラは、レートが０．５（個／秒）であるとき、１（個）おきのキューに１（個）ずつパケットを入力する。
【０００７】
キューから読み出されたパケットは、複数の出力ポートのうち、宛先に応じた出力ポートから他装置に送信される。出力ポートは、他装置において、例えば、受信バッファのパケットの蓄積量が所定の閾値を超えた場合、他装置からポーズフレーム（pause frame）を受信する。
【０００８】
例えばイーサネット（登録商標、以下同様）において、複数の出力ポートのうち、ポーズフレームを受信した出力ポートは、キューに対して、パケットの読み出しを停止させるためにポーズ制御を行う。しかし、各キューは、特定の出力ポートではなく、複数の出力ポートから出力されるパケットを格納するので、ポーズ制御を受けた場合、ポーズ制御を受けた出力ポートだけでなく、他の出力ポートから出力されるパケットも読み出しが停止される。この問題は、「Ｈｅａｄ  ｏｆ  Ｌｉｎｅ  Ｂｌｏｃｋｉｎｇ」などと呼ばれる。
【０００９】
この問題を回避するため、キューを出力ポートごとに設けることもできる。つまり、同一出力ポートから出力されるパケットを同一のキューに入力することができる。しかし、この場合、期間ごとに、出力ポートと同数のキューが設けられるため、キュー数が増加する。したがって、キューを管理するハードウェアが大規模化かつ複雑化し、コスト増加やスループット低下の問題が生ずる。
【００１０】
これに対し、複数の期間のキューを出力バッファごとに束ねることでキューの容量を増加させれば、キュー数の増加を防止することができる。例えば、キューの期間が１（秒）単位である場合、出力ポートが共通する１０（個）のキューを束ねることで、各キューの期間の単位を１０（秒）とすることができる。
【００１１】
しかし、この場合、１つのキューの期間が拡張されるため、当該期間内に同一出力ポートから連続して出力されるパケット数が増加し、バースト性が高まる。その結果、パケットの読み出しレートが、出力ポートのレートを超えることにより、ポーズ制御が多発して読み出し待機時間が増加し、またはパケットロスが生ずることで、通信品質が低下するという問題が生ずる。
【００１２】
そこで本件は上記の課題に鑑みてなされたものであり、通信品質を向上する通信装置及び通信方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本明細書に記載の通信装置は、複数の出力ポートと、パケットを、前記複数の出力ポートのうち、同一の出力ポートから同一の期間内に出力されるパケットごとに分けて格納する複数のキューと、前記複数の出力ポートのそれぞれに対応し、前記複数のキューのうち、当該出力ポートから出力されるパケットが読み出されるキューを、前記期間が経過するたびに切り替える複数の第１セレクタと、前記複数の出力ポートのパケットの出力レートに応じた時間間隔で、前記複数の第１セレクタのうち、パケットが出力される第１セレクタを切り替える第２セレクタとを有する。
【００１４】
本明細書に記載の通信方法は、パケットを、複数の出力ポートのうち、同一の出力ポートから同一の期間内に出力されるパケットごとに分けて複数のキューにそれぞれ格納し、前記複数の出力ポートのそれぞれに対応する複数の第１セレクタにより、前記複数のキューのうち、当該出力ポートから出力されるパケットが読み出されるキューを、前記期間が経過するたびに切り替え、第２セレクタにより、前記複数の出力ポートのパケットの出力レートに応じた時間間隔で、前記複数の第１セレクタのうち、パケットが出力される第１セレクタを切り替える。
【発明の効果】
【００１５】
本明細書に記載の通信装置及び通信方法は、通信品質を向上できるという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】実施例に係る通信装置の機能構成を示す構成図である。
【図２】ネットワークインターフェースカードの機能構成を示す構成図である。
【図３】通信装置内のパケットの経路を示す図である。
【図４】第１比較例の出力処理部の機能構成を示す構成図である。
【図５】第２比較例の出力処理部の機能構成を示す構成図である。
【図６】第３比較例の出力処理部の機能構成を示す構成図である。
【図７】第４比較例の出力処理部の機能構成を示す構成図である。
【図８】キューの単純巡回性の問題を説明するための構成図である。
【図９】実施例の出力処理部の機能構成を示す構成図である。
【図１０】ポーズ制御時の動作を示す構成図である。
【図１１】第２実施例における空きキューの読み出し時間の短縮動作を示す構成図である。
【図１２】短縮時間に上限を設けた場合の空きキューの読み出し時間の短縮動作を示す構成図である。
【図１３】空きキューごとの短縮時間に上限を設けた場合の空きキューの読み出し時間の短縮動作を示す構成図である。
【図１４】第１セレクタの動作を示すフローチャートである。
【図１５】第２セレクタの動作を示すフローチャートである。
【発明を実施するための形態】
【００１７】
図１は、実施例に係る通信装置の機能構成を示す構成図である。通信装置は、複数のネットワークインターフェースカード９１と、２枚のスイッチカード９２と、コントロールカード９３とを有する。各カード９１〜９３は、筐体に設けられた個別のスロットに収容され、互いに電気的に接続される。なお、本明細書において、通信装置として、レイヤ２スイッチやルータなどのパケット交換装置を例に挙げるが、これに限定されない。
【００１８】
通信装置は、外部装置から受信したパケットを、その宛先に従って他の外部装置に中継する。なお、本明細書において、パケットとは、伝送されるデータ（情報）の伝送単位であり、例としてイーサネットフレームを挙げるが、これに限られず、ＩＰパケットなどの他のフレームであってもよい。
【００１９】
複数のネットワークインターフェースカード９１は、それぞれ、外部装置との間において、パケットを送受信する。外部装置としては、例えば、パーソナルコンピュータなどの端末装置、サーバ装置、及びルータが挙げられる。複数のネットワークインターフェースカード９１は、複数のポートにより光ファイバと接続され、例えば１０ＧＢＡＳＥ−ＬＲの規格に基づく通信を行う。
【００２０】
２枚のスイッチカード９２は、それぞれ、複数のネットワークインターフェースカード９１の間において、パケットを交換する。より具体的には、スイッチカード９２は、ネットワークインターフェースカード９１からパケットが入力され、パケットを、その宛先に応じたネットワークインターフェースカード９１に出力する。２枚のスイッチカード９２は、例えば、ハードウェア故障などの障害に備えて、現用系及び予備系として使用される。
【００２１】
コントロールカード９３は、複数のネットワークインターフェースカード９１及び２枚のスイッチカード９２を制御する。コントロールカード９３は、ネットワーク制御装置などと接続され、ユーザーインターフェースに関する処理、各カード９１，９２に対する設定処理、及び各カード９１，９２からの情報収集処理などを行う。コントロールカード９３は、これらの処理を実行するＣＰＵ（Central Processing Unit）などのプロセッサ９３０、及び、プロセッサ９３０を駆動するプログラムを記憶するメモリ９３１を有する。
【００２２】
図２は、ネットワークインターフェースカード９１の機能構成を示す構成図である。ネットワークインターフェースカード９１は、複数の光送受信器９１０と、ＰＨＹ／ＭＡＣ部９１１と、入力処理部９１２と、出力処理部９１３と、制御部９１４とを有する。
【００２３】
複数の光送受信器９１０は、それぞれ、外部装置から光ファイバを介して受信した光信号を電気信号に変換してＰＨＹ／ＭＡＣ部９１１に出力し、また、ＰＨＹ／ＭＡＣ部９１１から入力された電気信号を光信号に変換し、光ファイバを介して外部装置に送信する。つまり、複数の光送受信器９１０は、外部装置との間でパケットを送受信するためのポートとして機能する。
【００２４】
ＰＨＹ／ＭＡＣ部９１１は、外部装置とのリンクの確立処理や複数の光送受信器１０に対するパケットの分配処理などを行う。ＰＨＹ／ＭＡＣ部９１１は、複数の光送受信器９１０から入力されたパケットを入力処理部９１２に出力し、出力処理部９１３から入力されたパケットを複数の光送受信器９１０に出力する。
【００２５】
入力処理部９１２及び出力処理部９１３は、イングレス（INGRESS）及びイーグレス（EGRESS）のパケット処理をそれぞれ行う。入力処理部９１２は、パケットの帯域制御処理などを行って、スイッチカード９２にパケットを出力する。出力処理部９１３は、スイッチカード９２から入力されたパケットの帯域制御処理などを行って、ＰＨＹ／ＭＡＣ部９１１にパケットを出力する。
【００２６】
制御部９１４は、コントロールカード９３と通信を行い、入力処理部９１２及び出力処理部９１３の制御を行う。制御部９１４は、ＣＰＵなどのプロセッサ及びメモリ（図示せず）を備える。
【００２７】
図３には、通信装置内のパケットの経路が示されている。なお、図３は、入力処理部９１２の構成も示す。
【００２８】
まず、パケットは、ネットワークインターフェースカード９１の入力処理部９１２に入力される。入力処理部９１２は、クラス判定部９１２ａと、ポリサー９１２ｂと、分配部９１２ｃと、複数の入力キュー９１２ｄと、出力部９１２ｅとを有する。
【００２９】
クラス判定部９１２ａは、パケットごとの通信品質（ＱｏＳ）のクラスを判定し、クラスに応じたフローＩＤを、例えば装置内ヘッダに含めてパケットに付与する。クラス判定部９１２ａは、例えば、パケットのヘッダに含まれる宛先（ＤＡ：Destination Address）、またはＶＬＡＮ（Virtual Local Area Network）  ＩＤに基づいてクラスを判定する。
【００３０】
ポリサー９１２ｂは、入力されるパケットのトラフィック量が所定の帯域を超えないように、所定帯域を超える分のパケットを廃棄する。分配部９１２ｃは、パケットを、宛先となるネットワークインターフェースカード９１に応じて、複数の入力キュー９１２ｄに分配する。つまり、入力キュー９１２ｄは、ネットワークインターフェースカード９１ごとに設けられている。複数の入力キュー９１２ｄは、パケットを、出力部９１２ｅにより読み出されるまで蓄積する。出力部９１２ｅは、複数の入力キュー９１２ｄから１つを選択して、選択した入力キュー９１２ｄからパケットを読み出して、スイッチカード９２のスイッチ部９２０に出力する。スイッチ部９２０は、入力されたパケットを宛先に応じたネットワークインターフェースカード９１の出力処理部９１３に出力する。
【００３１】
（第１比較例）
まず、入力型スケジューラの比較例を説明する。入力型スケジューラは、出力処理部９１３に設けられ、フローＩＤに応じたレートでパケットを複数のキューに分配する。なお、本例では、パケットの長さ（データ量）が一定である場合を例に挙げて説明するが、これに限定されず、以下に述べる内容は、可変長のパケットの場合にも適用可能である。
【００３２】
図４は、第１比較例の出力処理部９１３の機能構成を示す構成図である。出力処理部９１３は、スケジューラ８０と、記憶部８１と、キュー管理部８２と、複数のキュー（時刻バッファ（Time Region Buffer））８３０〜８３４と、セレクタ８４とを有する。なお、出力ポート８５は、例えば、パケットＰを他装置に送信する光送受信器９１０に対応する。
【００３３】
スケジューラ８０は、フローシェーパ８００を含み、スイッチ部９２０から入力されたパケットＰを、フローＩＤごとのレートに基づいて、複数のキュー８３０〜８３４に分配する。本例では、フロー＃１のレート（１秒当たりのパケットの個数）を１（個／秒）とし、フロー＃２のレートを３（個／秒）とし、フロー＃３のレートを０．５（個／秒）とする。なお、図４において、フローＩＤ＃１〜＃３のパケットＰの区別は、符号Ｉで示されるとおりである。
【００３４】
各キュー８３０〜８３４は、ＦＩＦＯ（First In First Out）のようなバッファであり、スケジューラ８０から入力されたパケットＰを格納する。各キュー８３０〜８３４は、セレクタ８４により、パケットＰが出力される期間Ｔｒが割り当てられる。
【００３５】
セレクタ８４は、パケットＰが出力されるキュー８３０を、各期間Ｔｒ（１（秒）単位）が経過するたびに切り替える。より具体的には、セレクタ８４は、複数のキュー８３０〜８３４のうち、タイマ８６が示す時刻Ｔｃに応じた期間Ｔｒのキューを選択して、当該キューからパケットＰを読み出し、出力ポート８５に出力する。パケットＰは、出力ポート８５から他装置に出力される。
【００３６】
例えば、キュー８３０は、期間Ｔｒ＝５〜６（秒）であるため、時刻Ｔｃが５〜６（秒）であるとき、セレクタ８４により選択され、格納したパケットＰが出力ポート８５から出力される。また、キュー８３１は、期間Ｔｒ＝６〜７（秒）であるため、時刻Ｔｃが６〜７（秒）であるとき、セレクタ８４により選択され、格納したパケットＰが出力ポート８５から出力される。
【００３７】
このように、各キュー８３０〜８３４に格納されたパケットは、一定の期間Ｔｒ内に読み出される。つまり、各キュー８３０〜８３４に格納されたパケットは、次のキューの期間Ｔｒが開始される前に読み出される。したがって、各キュー８３０〜８３４の容量は、各期間Ｔｒの長さである一定時間（１（秒））内に読み出し可能な量に制限される。仮に、１（秒）当たり最大で９（個）のパケットＰが、キュー８３０〜８３４から読み出されて出力ポート８４から出力されるとすると、各キュー８３０〜８３４の容量は、９（個）に制限される。なお、以降の説明において、各期間Ｔｒの長さを「時間幅」と表記する。
【００３８】
また、空になったキュー８３０〜８３４は、新たな期間Ｔｒが割り当てられる。例えば、キュー８３１が空になった場合、新たな期間Ｔｒ＝１０〜１１（秒）が割り当てられる。このため、セレクタ８４は、キュー８３０〜８３４を、時刻Ｔｃに従って繰り返し選択する。したがって、パケットＰを格納するキュー８３０〜８３４は、時刻Ｔｃによらず、常に、一定時間先の期間Ｔｒまで確保される。
【００３９】
なお、セレクタ８４は、期間Ｔｒの途中でキュー８３０〜８３４が空になっても、期間Ｔｒが終了するまで、当該キューの選択を維持する。例えば、時刻Ｔｃ＝５．５（秒）の時点でキュー８３１が空になっても、セレクタ８４は、時刻Ｔｃ＝６（秒）まで、同じキュー８３１を選択し続ける。
【００４０】
フローシェーパ８００は、フローＩＤごとのレートが維持されるように、パケットＰを出力する時刻を決定し、決定した時刻に応じた期間Ｔｒのキュー８３０〜８３４にパケットＰを入力する。例えば、フロー＃１のレートは１（個／秒）であるため、フローシェーパ８００は、フロー＃１のパケットＰを、各キュー８３０〜８３４に１（個）ずつ入力する。ここで、各キュー８３０〜８３４の時間幅は１（秒）であるため、１（秒）当たり１（個）のパケットＰが出力され、フロー＃１のレートが維持される。
【００４１】
フロー＃２のレートは３（個／秒）であるため、フローシェーパ８００は、フロー＃２のパケットＰを、各キュー８３０〜８３４に３（個）ずつ入力する。このため、１（秒）当たり３（個）のパケットＰが出力され、フロー＃２のレートが維持される。
【００４２】
フロー＃３のレートは０．５（個／秒）であるため、フローシェーパ８００は、フロー＃３のパケットＰを、１（個）おきのキュー８３０〜８３４に１（個）ずつ入力する。このため、２（秒）当たり１（個）のパケットＰが出力され、フロー＃３のレートが維持される。
【００４３】
このように、スケジューラ８０は、キュー８３０〜８３４の前段において、フローＩＤごとのレートに応じ、パケットＰを複数のキュー８３０〜８３４に分配する。このため、スケジューラ８０は、出力型スケジューラに比べると、キュー８３０〜８３４間の読み出し処理の競合を回避し、高いスループットを実現する。
【００４４】
本例では、パケットの長さが一定である場合を例に挙げたが、可変長のパケットの場合、各キュー８３０〜８３４の容量は、Ｂｙｔｅ単位で管理される。この場合、スケジューラ８０は、メモリなどの記憶部８１に記憶されたフロー情報８１ａ、及びキュー管理部８２が保持する管理情報を参照して、パケットＰをキュー８３０〜８３４に分配する。
【００４５】
フロー情報８１ａは、シェーピング粒度の向上と可変長パケットに対応するように、例えば、キュー８３０〜８３４の容量（Ｂｙｔｅ）、次にパケットＰを入力するキュー８３０〜８３４、及び、次のキュー８３０〜８３４の空き容量（Ｂｙｔｅ）などを示す。キュー管理部８２は、キュー８３０〜８３４の空き状態を、管理情報として管理する。
【００４６】
スケジューラ８０は、到着したパケットＰからフローＩＤ及びパケット長などの情報を取得し、フロー情報８１ａや管理情報に基づいて、パケットＰを入力するキュー８３０〜８３４を決定する。スケジューラ８０は、決定したキュー８３０〜８３４にパケットＰを入力すると、フロー情報８１ａや管理情報を更新する。
【００４７】
また、キュー８３０〜８３４のパケットＰの蓄積量は、上限値（Ｂｙｔｅ）により管理される。スケジューラ８０は、キュー８３０〜８３４に格納されたパケットＰのデータ量（Ｂｙｔｅ）の合計が、上限値を上回った場合、当該キューへのパケットＰの入力を停止する。なお、期間Ｔｒごとに出力されるパケットＰの総量は、各キュー８３０〜８３４の上限値及び読み出し時間の柔軟な調整により平滑化される。
【００４８】
（第２比較例）
第１比較例において、パケットＰは、単一の出力ポート８５から出力されるが、複数の出力ポートから出力されてもよい。この場合、パケットＰは、複数の出力ポートのうち、宛先に応じた出力ポートから出力される。
【００４９】
図５は、第２比較例の出力処理部９１３の機能構成を示す構成図である。図５において、図４と共通する構成については、同一の符号を付し、その説明を省略する。
【００５０】
出力処理部９１３は、スケジューラ８０ａと、記憶部８１と、キュー管理部８２と、複数のキュー８３０ａ〜８３３ａと、セレクタ８４とを有する。本例において、パケットＰは、光送受信器９１０に対応する１０（個）の出力ポート８５１〜８５３から出力される。また、分配部８７は、ＰＨＹ／ＭＡＣ部９１１に対応し、キュー８３０ａ〜８３３ａから読み出されたパケットＰを出力ポート８５１〜８５３に分配する。
【００５１】
また、図５において、符号Ｐは、１０（個）のパケットを示す。各パケットＰ内の番号（「＃１」〜「＃１０」）は、当該パケットＰが出力される出力ポート８５１〜８５３を示す。例えば、番号が「＃１」のパケットＰは、出力ポート（＃１）８５１から出力される。
【００５２】
スケジューラ８０ａは、フローシェーパ８００ａ及びポートシェーパ８０１ａを有する。フローシェーパ８００ａは、第１比較例と同様に、フローＩＤごとのレートに基づいて、パケットＰを複数のキュー８３０ａ〜８３３ａに分配する。
【００５３】
ポートシェーパ８０１ａは、パケットＰを、出力ポート８５１〜８５３の各出力レートに基づいて、複数のキュー８３０〜８３４に分配する。ポートシェーパ８０１ａは、出力ポート８５１〜８５３の各出力レートが、例えば１０（個／秒）である場合、各キュー８３０ａ〜８３３ａに、各出力ポート８５１〜８５３から出力されるパケットＰを１０（個）ずつ分配する。
【００５４】
キュー８３０ａ〜８３３ａは、第１比較例と同様に、割り当てられた期間Ｔｒ内にパケットＰが読み出される。本例では、期間Ｔｒ＝０〜１（秒），１〜２（秒），・・・，４９〜５０（秒）にそれぞれ対応する５０（個）のキュー８３０ａ〜８３３ａが、設けられている。例えば、期間Ｔｒ＝０〜１（秒）であるキュー８３０ａに格納されたパケットＰは、時刻Ｔｃ＝０〜１（秒）にセレクタ８４により読み出される。また、期間Ｔｒ＝１〜２（秒）であるキュー８３１ａに格納されたパケットＰは、時刻Ｔｃ＝１〜２（秒）にセレクタ８４により読み出される。
【００５５】
本例では、パケットＰは、１０（個／秒）の出力レートを有する１０（個）の出力ポート８５１〜８５３に分けられて出力される。このため、セレクタ８４は、１００（個／秒）（＝出力ポート数１０×１０（個／秒））の読み出しレートを有する。
【００５６】
また、キュー８３０ａ〜８３３ａの容量は、各キューの時間幅は１（秒）であるので、セレクタ８４の読み出しレートに基づいて、１００（個）となる。つまり、各キュー８３０ａ〜８３３ａは、各期間Ｔｒ内に読み出し可能な量のパケットＰを格納するので、セレクタ８４の読み出しレートに基づき、最大で１００（個）のパケットＰを格納する。
【００５７】
各キュー８３０ａ〜８３３ａは、ポートシェーパ８０１ａにより、各出力ポート（＃１〜＃１０）８５１〜８５３から出力されるパケット（＃１〜＃１０）Ｐが最大で１０（個）ずつ格納される。このため、キュー８３０ａ〜８３３ａに格納されたパケットＰが最大量である場合、セレクタ８４から出力される１（秒）単位のデータＸａには、各出力ポート（＃１〜＃１０）８５１〜８５３から出力されるパケット（＃１〜＃１０）Ｐが１０個ずつ含まれる。
【００５８】
各出力ポート８５１〜８５３は、送信先の他装置（図示せず）のバックプレッシャー制御に従って、セレクタ８４にパケットＰの読み出し停止制御を行う。例えば、イーサネットの場合、各出力ポート８５１〜８５３は、送信先の他装置からポーズフレームを受信したとき、セレクタ８４にポーズ制御を行う。
【００５９】
例えば、出力ポート（＃１）８５１は、ポーズフレームを受信したとき、パケットＰの読み出しの停止を指示する停止指示信号Ｓｐをセレクタ８４に出力する。ここで、各キュー８３０ａ〜８３３ａは、出力ポート（＃１）８５１から出力されるパケット（＃１）Ｐだけでなく、他の出力ポート（＃２〜＃１０）８５２，８５３から出力されるパケット（＃１〜＃１０）Ｐも格納する。
【００６０】
このため、セレクタ８４は、出力ポート（＃１）８５１から出力されるパケット（＃１）Ｐの読み出しを停止するために、全てのキュー８３０ａ〜８３３ａからの読み出し処理を停止する（×印参照）。したがって、各出力ポート８５１〜８５３の送信先となる全ての他装置が、パケットＰを受け取ることが不可能な状態となる。なお、この問題は、「Ｈｅａｄ  ｏｆ  Ｌｉｎｅ  Ｂｌｏｃｋｉｎｇ」などと呼ばれる。
【００６１】
（第３比較例）
上記の問題を解決するため、第２比較例のキュー８３０ａ〜８３３ａを、出力ポート８５１〜８５３ごとに分割してもよい。この構成によると、停止指示信号Ｓｐを出力した出力ポート８５１〜８５３に対応するキューだけを読み出し停止とすることができる。
【００６２】
図６は、第３比較例の出力処理部９１３の機能構成を示す構成図である。図６において、図５と共通する構成については、同一の符号を付し、その説明を省略する。なお、本例において、符号Ｐは、１０（個）のパケットを示し、パケットＰ内の番号（「＃１」〜「＃１０」）は、出力ポート（＃１〜＃１０）８５１〜８５３に対応する。
【００６３】
出力処理部９１３は、スケジューラ８０ｂと、記憶部８１と、キュー管理部８２と、複数のキュー８３０ｂ〜８３５ｂと、セレクタ８４ｂとを有する。本例において、複数のキュー８３０ｂ〜８３５ｂは、パケットＰを、同一の出力ポート８５１〜８５３から出力されるパケットごとに分けて格納する。すなわち、複数のキュー８３０ｂ〜８３５ｂは、複数の出力ポート８５１〜８５３に対応して設けられる。なお、キュー８３０ｂ〜８３５ｂの容量は、１０（個）のパケット分となる。
【００６４】
このため、同一の期間Ｔｒに出力されるパケットＰは、１０（個）のキュー８３０ｂ〜８３２ｂ，８３３ｂ〜８３５ｂに分かれて格納される。例えば、期間Ｔｒ＝０〜１（秒）において、出力ポート（＃１）８５１から出力されるパケットＰは、キュー８３０ｂに格納され、出力ポート（＃２）８５２から出力されるパケットＰは、キュー８３１ｂに格納される。また、期間Ｔｒ＝４９〜５０（秒）において、出力ポート（＃１）８５１から出力されるパケットＰは、キュー８３３ｂに格納され、出力ポート（＃２）８５２から出力されるパケットＰは、キュー８３４ｂに格納される。
【００６５】
このようなキュー構成のため、セレクタ８４ｂは、各期間Ｔｒ内、つまり時間幅である１（秒）内に、１０（個）のキュー８３０ｂ〜８３２ｂ，８３３ｂ〜８３５ｂからパケットＰを読み出す。つまり、厳密には、各キュー８３０ｂ〜８３５ｂの時間幅は、０．１（秒）（時間幅１（秒）÷１０（個））である。したがって、セレクタ８４ｂは、０．１（秒）ごとに、パケットＰを読み出すキュー８３０ｂ〜８３５ｂを切り替える。
【００６６】
このため、キュー８３０ｂ〜８３５ｂに格納されたパケットＰが最大量である場合、セレクタ８４から出力される１（秒）単位のデータＸｂには、各出力ポート８５１〜８５３から出力されるパケット（＃１〜＃１０）Ｐが１０個ずつ含まれる。つまり、各出力ポート８５１〜８５３は、１（秒）当たり１０（個）のパケットＰが入力されるため、第２比較例と同様の低いバースト性が実現される。
【００６７】
また、スケジューラ８０ｂは、キュー８３０ｂ〜８３５ｂが、出力ポート８５１〜８５３ごとに分割されているため、ポートシェーパを有していない。スケジューラ８０ｂは、第２比較例と同様のフローシェーパ８００ｂを有する。
【００６８】
セレクタ８４ｂは、例えば出力ポート（＃１）８５１から停止指示信号Ｓｐが入力されると、複数のキュー８３０ｂ〜８３５ｂのうち、出力ポート（＃１）８５１に対応するキュー８３０ｂ，８３３ｂの読み出し処理だけを停止する。つまり、他の出力ポート（＃２〜＃１０）８５２，８５３に対応するキュー８３１ｂ，８３２ｂ，８３４ｂ，８３５ｂからのパケットＰの読み出し処理は、停止されないので、上記の問題は解決される。
【００６９】
しかし、本例では、キュー８３０ｂ〜８３５ｂが、出力ポート８５１〜８５３ごとに分割されているため、キュー数が第２比較例より多い。つまり、本例では、期間Ｔｒ＝０〜１（秒）、１〜２（秒）、・・・、４９〜５０（秒）の各々について、１０（個）の出力ポート８５１〜８５３と同数のキューを設けたため、キュー数は、５００（個）（＝出力ポート数１０×５０（個））となる。したがって、キューを管理するハードウェアが大規模化かつ複雑化し、コスト増加やスループット低下の問題が生ずる。
【００７０】
（第４比較例）
そこで、同一の出力ポート８５１〜８５３に対応し、期間Ｔｒが異なる複数のキューを、１（個）のキューに束ねることにより、キュー数を削減してもよい。本例では、第３比較例における１０秒内の期間Ｔｒ（例えば０〜１（秒），１〜２（秒），・・・，９〜１０（秒））の１０（個）のキュー８３０ｂ〜８３５ｂを１（個）のキューに束ねる。これにより、キュー数は、第２比較例と同じ５０（個）（＝５００（個）÷１０）となる。
【００７１】
図７は、第４比較例の出力処理部９１３の機能構成を示す構成図である。図７において、図５と共通する構成については、同一の符号を付し、その説明を省略する。なお、本例において、符号Ｐは、１０（個）のパケットを示し、パケットＰ内の番号（「＃１」〜「＃１０」）は、出力ポート（＃１〜＃１０）８５１〜８５３に対応する。
【００７２】
出力処理部９１３は、スケジューラ８０ｃと、記憶部８１と、キュー管理部８２と、複数のキュー８３０ｃ〜８３５ｃと、セレクタ８４ｃとを有する。
【００７３】
複数のキュー８３０ｃ〜８３５ｃは、第３比較例と同様に、パケットＰを、同一の出力ポート８５１〜８５３から出力されるパケットごとに分けて格納する。すなわち、複数のキュー８３０ｃ〜８３５ｃは、複数の出力ポート８５１〜８５３に対応して設けられる。例えば、キュー８３０ｃ，８３３ｃは、出力ポート（＃１）８５１から出力されるパケットＰが格納され、キュー８３１ｃ，８３４ｃは、出力ポート（＃２）８５２から出力されるパケットＰが格納される。このため、「Ｈｅａｄ  ｏｆ  Ｌｉｎｅ  Ｂｌｏｃｋｉｎｇ」の問題は、生じない。
【００７４】
また、各キュー８３０ｃ〜８３５ｃの期間Ｔｒの時間幅は、第３比較例の１０倍、つまり第２比較例と同じ１（秒）である。このため、セレクタ８４ｃは、１（秒）ごとに、パケットＰが読み出されるキュー８３０ｃ〜８３５ｃを切り替える。
【００７５】
複数のキュー８３０ｃ〜８３５ｃは、それぞれ、時間幅が第３比較例の１０倍であるので、容量も第３比較例の１０倍となる。このため、複数のキュー８３０ｃ〜８３５ｃは、それぞれ、最大で、第３比較例における１０（秒）分の送出量のパケットＰを格納する。言い換えれば、複数のキュー８３０ｃ〜８３５ｃは、第２比較例における各キュー８３０ａ〜８３３ａに格納されたパケットＰを、出力先の出力ポート８５１〜８５３が統一されるように並び替えたものに等しい。
【００７６】
このキュー構成より、キュー数は、第３比較例の１０分の１、つまり第２比較例と同数の５０（個）となる。
【００７７】
また、スケジューラ８０ｃは、キュー８３０ｃ〜８３５ｃが、出力ポート８５１〜８５３ごとに分割されているため、第３比較例と同様に、ポートシェーパを有していない。スケジューラ８０ｃは、フローシェーパ８００ｃを有する。フローシェーパ８００ｃは、各キュー８３０ｃ〜８３５ｃの期間Ｔｒの時間幅が第３比較例の１０倍であるため、各フロー＃１〜＃１０のレートも第３比較例の１０倍になる。
【００７８】
一方、セレクタ８４ｃは、各キュー８３０ｃ〜８３５ｃから、時間幅である１（秒）内にパケットＰを読み出す。このため、キュー８３０ｃ〜８３５ｃに格納されたパケットＰが最大量（１００（個））である場合、セレクタ８４から出力される１（秒）単位のデータＸｃには、同一の出力ポート８５１〜８５３（図７では＃１）から出力されるパケットＰが１００（個）ずつ含まれる。
【００７９】
したがって、各出力ポート８５１〜８５３は、１（秒）当たり、最大で１００（個）のパケットＰが入力される。このため、バースト性は、第２比較例及び第３比較例の１０倍に増加する。
【００８０】
このように、パケットＰの読み出しレート（１００（個／秒））が、出力ポート８５１〜８５３の出力レート（１０（個／秒））を超えると、読み出し停止制御が多発して読み出し待機時間が増加し、またはパケットロスが生ずることで、通信品質が低下する。これを回避するため、例えば、各出力ポート８５１〜８５３に、バースト性を緩衝するバッファを設けることもできるが、ハードウェアの規模が増加するため、コストの観点から好ましくない。
【００８１】
（キューの単純巡回性）
また、第２比較例の構成を例に挙げて、キューの単純巡回性の問題について説明する。本明細書において、キューの単純巡回性とは、セレクタ８４ｂが、一定時間ごとに、所定の順序で、パケットＰが読み出されるキュー８３０ｂ〜８３５ｂを切り替えることを繰り返す動作を指す。つまり、キューの単純巡回性とは、一定の規則に従ってキュー８３０ｂ〜８３５ｂを巡回する動作である。
【００８２】
図８は、キューの単純巡回性の問題を説明するための構成図である。図８において、図６と共通する構成については、同一の符号を付し、その説明を省略する。キュー８３６ｂ，８３７ｂは、期間Ｔｒ＝１〜２（秒）に出力ポート（＃１、＃２）８５０，８５１から出力されるパケットＰをそれぞれ格納する。
【００８３】
図８において、キュー８３０ｂ〜８３７ｂの近傍に付された数字（丸で囲まれた「１」〜「５００」を参照）は、セレクタ８４ｂによるキュー８３０ｂ〜８３７ｂの選択順序を示す。セレクタ８４ｂは、期間Ｔｒごとに、出力ポート８５１〜８５３の番号（＃１〜＃１０）の昇順に従って、キュー８３０ｂ〜８３７ｂを選択する。この選択順序は一定であるため、セレクタ８４ｂは、キューの単純巡回性を維持している。
【００８４】
ここで、出力ポート（＃１）８５１からポーズ制御が行われ、出力ポート（＃１）８５１から出力されるパケットＰを格納する、期間Ｔｒ＝０〜１（秒）のキュー８３０ｂが、１秒間だけ読み出し処理が停止された後、ポーズ制御が解除されたとする。この場合、セレクタ８４ｂは、読み出し処理が停止されたキュー８３０ｂを除く、期間Ｔｒ＝０〜１（秒）の各キュー８３１ｂ，８３２ｂを選択した後、当該キュー８３０ｂを選択し、その後、期間Ｔｒ＝１〜２（秒）のキュー８３７ｂを選択する（符号Ｆ参照）。つまり、セレクタ８４ｂは、時刻Ｔｃ＝１〜２（秒）のとき、出力ポート（＃１）８５１についてだけ、時刻Ｔｃに応じた期間Ｔｒ＝１〜２（秒）のキュー８３６ｂではなく、過去の期間Ｔｒ＝０〜１（秒）のキュー８３０ｂを選択する。
【００８５】
したがって、この場合、キューの単純巡回性の選択順序（「１」、「２」、・・・、「１０」、「１１」、「１２」、・・・）が遵守されず、異なった選択順序（「２」、・・・、「１０」、「１」、「１２」、・・・）でキュー８３０ｂ〜８３７ｂが選択される。つまり、ポーズ制御が解除された場合、パケットＰが未読出のキュー８３０ｂを選択することで、キューの単純巡回性が崩れてしまう。
【００８６】
このような選択処理は、セレクタ８４ｂの構成を複雑化するため、やはり、ハードウェアの規模が増加する。
【００８７】
また、ポーズ制御に伴って生ずる問題は、キューの単純巡回性だけではない。符号Ｂで示されたグラフは、時刻に対する出力ポート（＃１）８５１の出力帯域を示す。時刻ｔ１において、ポーズ制御が行われ、時刻ｔ２においてポーズ制御が解除された場合、解除されるまでの期間Δｔ（＝ｔ２−ｔ１）において、パケットＰが出力されないため、空き帯域が生ずるという問題がある。
【００８８】
（第１実施例）
実施例に係る通信装置は、２つのセレクタを用いることにより、１つのキューに格納されたパケットを複数回に分けて読み出すことで、第３比較例において問題となったバースト性を低減し、通信品質を向上する。
【００８９】
図９は、実施例の出力処理部９１３の機能構成を示す構成図である。図９において、図７と共通する構成については、同一の符号を付し、その説明を省略する。なお、本例において、符号Ｐは、１０（個）のパケットを示し、パケットＰ内の番号（「＃１」〜「＃１０」）は、出力ポート（＃１〜＃１０）８５１〜８５３に対応する。
【００９０】
出力処理部９１３は、スケジューラ８０ｃと、記憶部８１と、キュー管理部８２と、複数のキュー３０，３１，３４，４０，４１，４４，５０，５１，５４と、複数の第１セレクタ１１〜１３と、第２セレクタ２とを有する。出力処理部９１３は、複数の第１タイマ６１〜６３と、第２タイマ７とを、さらに有する。
【００９１】
複数のキュー３０，３１，３４，４０，４１，４４，５０，５１，５４は、パケットＰを、複数の出力ポート８５１〜８５３のうち、同一の出力ポートから同一の期間Ｔｒ内に出力されるパケットごとに分けて格納する。複数のキュー３０，３１，３４，４０，４１，４４，５０，５１，５４は、それぞれ、時間幅が、第３比較例と同じ１０（秒）であり、最大で１００（個）のパケットＰを格納可能な容量を有する。
【００９２】
例えば、キュー３０は、出力ポート（＃１）８５１から期間Ｔｒ＝０〜１０（秒）内に出力されるパケットＰを格納し、キュー３１は、出力ポート（＃１）８５１から期間Ｔｒ＝１０〜２０（秒）内に出力されるパケットＰを格納する。また、キュー３４は、出力ポート（＃１）８５１から期間Ｔｒ＝４０〜５０（秒）内に出力されるパケットＰを格納する。つまり、出力ポート（＃１）８５１から出力されるパケットＰは、各期間Ｔｒ＝０〜１０（秒）、１０〜２０（秒）、・・・、４０〜５０（秒）に対応する５（個）のキュー３０，３１，３４に分けられて格納される。
【００９３】
キュー４０は、出力ポート（＃２）８５２から期間Ｔｒ＝０〜１０（秒）内に出力されるパケットＰを格納し、キュー４１は、出力ポート（＃２）８５２から期間Ｔｒ＝１０〜２０（秒）内に出力されるパケットＰを格納する。また、キュー４４は、出力ポート（＃２）８５２から期間Ｔｒ＝４０〜５０（秒）内に出力されるパケットＰを格納する。つまり、出力ポート（＃２）８５２から出力されるパケットＰは、各期間Ｔｒ＝０〜１０（秒）、１０〜２０（秒）、・・・、４０〜５０（秒）に対応する５（個）のキュー４０，４１，４４に分けられて格納される。
【００９４】
キュー５０は、出力ポート（＃１０）８５３から期間Ｔｒ＝０〜１０（秒）内に出力されるパケットＰを格納し、キュー５１は、出力ポート（＃１０）８５３から期間Ｔｒ＝１０〜２０（秒）内に出力されるパケットＰを格納する。また、キュー５４は、出力ポート（＃１０）８５３から期間Ｔｒ＝４０〜５０（秒）内に出力されるパケットＰを格納する。つまり、出力ポート（＃１０）８５３から出力されるパケットＰは、各期間Ｔｒ＝０〜１０（秒）、１０〜２０（秒）、・・・、４０〜５０（秒）に対応する５（個）のキュー５０，５１，５４に分けられて格納される。したがって、キュー数は、第４比較例と同じ５０（個）（＝１０（出力ポート数）×５（個））に抑えられる。
【００９５】
なお、図９において、期間Ｔｒ＝２０〜３０（秒）、３０〜４０（秒）に対応する２（個）のキューの図示は省略する。また、１０（個）の出力ポート（＃１〜＃１０）のうち、他の出力ポート（＃３〜＃９）から出力されるパケットを格納するキューの図示も省略する。
【００９６】
複数の第１セレクタ（＃１〜＃１０）１１〜１３は、複数の出力ポート（＃１〜＃１０）８５１〜８５３のそれぞれに対応して設けられている。各第１セレクタ１１〜１３は、複数の出力ポート８５１〜８５３のうち、当該出力ポートから出力されるパケットＰを格納するキュー３０，３１，３４，４０，４１，４４，５０，５１，５４の１つを選択する。なお、図９において、１０（個）の出力ポート（＃１〜＃１０）のうち、他の出力ポート（＃３〜＃９）にそれぞれ対応する第１セレクタ（＃３〜＃９）の図示は省略する。
【００９７】
また、第１タイマ（＃１〜＃１０）６１〜６３は、複数の第１セレクタ（＃１〜＃１０）１１〜１３に時刻Ｔ１〜Ｔ１０を通知する。第１セレクタ（＃１〜＃１０）１１〜１３は、時刻Ｔ１〜Ｔ１０に応じた期間Ｔｒのキュー３０，３１，３４，４０，４１，４４，５０，５１，５４をそれぞれ選択する。つまり、第１セレクタ（＃１〜＃１０）１１〜１３は、時刻Ｔ１〜Ｔ１０に基づいて時間幅である１０（秒）を計測する。
【００９８】
出力ポート（＃１）８５１に対応する第１セレクタ（＃１）１１は、出力ポート（＃１）８５１から出力されるパケットＰを格納する１０（個）のキュー３０，３１，３４のうち、時刻Ｔ１に応じた期間Ｔｒのキューを選択する。第１セレクタ（＃１）１１は、例えば、時刻Ｔ１＝０．５（秒）の場合、期間Ｔｒ＝０〜１（秒）のキュー３０を選択し、時刻Ｔ１＝１．５（秒）の場合、期間Ｔｒ＝１〜２（秒）のキュー３１を選択する。
【００９９】
出力ポート（＃２）８５２に対応する第１セレクタ（＃２）１２は、出力ポート（＃２）８５２から出力されるパケットＰを格納する１０（個）のキュー４０，４１，４４のうち、時刻Ｔ２に応じた期間Ｔｒのキューを選択する。第１セレクタ（＃２）１２は、例えば、時刻Ｔ２＝０．５（秒）の場合、期間Ｔｒ＝０〜１（秒）のキュー４０を選択し、時刻Ｔ２＝１．５（秒）の場合、期間Ｔｒ＝１〜２（秒）のキュー４１を選択する。
【０１００】
出力ポート（＃１０）８５３に対応する第１セレクタ（＃１０）１３は、出力ポート（＃１０）８５３から出力されるパケットＰを格納する１０（個）のキュー５０，５１，５４のうち、時刻Ｔ１０に応じた期間Ｔｒのキューを選択する。第１セレクタ（＃１０）１３は、例えば、時刻Ｔ１０＝０．５（秒）の場合、期間Ｔｒ＝０〜１（秒）のキュー５０を選択し、時刻Ｔ１０＝１．５（秒）の場合、期間Ｔｒ＝１〜２（秒）のキュー５１を選択する。
【０１０１】
このように、第１セレクタ（＃１〜＃１０）１１〜１３は、複数のキュー３０，３１，３４，４０，４１，４４，５０，５１，５４のうち、当該出力ポート８５１〜８５３から出力されるパケットＰが読み出されるキューを、期間Ｔｒが経過するたびに切り替える。つまり、第１セレクタ１１〜１３は、時間幅である１０（秒）ごとに、パケットＰが読み出されるキュー３０，３１，３４，４０，４１，４４，５０，５１，５４を切り替える。したがって、各キュー３０，３１，３４，４０，４１，４４，５０，５１，５４に格納されたパケットＰは、当該期間Ｔｒ内に読み出される。
【０１０２】
第２セレクタ２は、複数の出力ポート８５１〜８５３のパケットの出力レート（１０（個／秒））に応じた時間間隔で、複数の第１セレクタ１１〜１３のうち、パケットＰが出力される第１セレクタ１１〜１３を切り替える。つまり、第２セレクタ２は、第１セレクタ１１〜１３の選択により、パケットＰを出力する出力ポート８５１〜８５３を選択する。
【０１０３】
第２タイマ７は、時刻Ｔｊを第２セレクタ２に通知する。第２セレクタ２は、時刻Ｔｊに基づいて、上記の時間間隔を計測し、時間間隔をおいて第１セレクタ１１〜１３を切り替える。
【０１０４】
本例において、各出力ポート８５１〜８５３の出力レートは、１０（個／秒）であり、ポート数は１０（個）であるため、第２セレクタ２は、１００（個／秒）（＝１０（出力ポート数）×１０（個／秒））のレートでパケットＰを読み出す。このため、第２セレクタ２は、各出力ポート（＃１〜＃１０）８５１〜８５３の出力レートが維持されるように、０．１（秒）（＝１０（個）÷１００（個／秒））の時間間隔で第１セレクタ１１〜１３を切り替える。
【０１０５】
したがって、キュー３０〜５４に格納されたパケットＰが最大量である場合、第２セレクタ２から出力される１（秒）単位のデータＸには、各出力ポート８５１〜８５３から出力されるパケット（＃１〜＃１０）Ｐが１０個ずつ含まれる。つまり、各出力ポート８５１〜８５３は、１（秒）当たり１０（個）のパケットＰが入力されるため、第２比較例と同様の低いバースト性が実現される。これにより、ポーズ制御の多発やパケットロスが抑制され、通信品質が向上する。
【０１０６】
このように、第１セレクタ１１〜１３は、出力ポート８５１〜８５３ごとに期間Ｔｒに応じたキュー３０〜５４を選択し、第２セレクタ２は、第１セレクタ１１〜１３から単位時間内に出力されるパケット量を、出力ポート８５１〜８５３の出力レートに基づいて調整できる。したがって、本実施例によると、第４比較例と異なり、１つの出力ポート８５１〜８５３に、各出力ポート８５１〜８５３の出力レートを超えるパケットＰが入力されることが防止される。
【０１０７】
さらに、第１セレクタ１１〜１３を切り替える時間間隔は、キュー３０〜５４の期間Ｔｒの長さ、つまり時間幅によらずに決定される。このため、第４比較例と同様に、キュー３０〜５４の容量を増加させることにより時間幅を１０（秒）に拡張し、ハードウェアの規模を縮小することができる。すなわち、本実施例によると、キュー数を、第４比較例と同数（５０（個））とすることができる。
【０１０８】
また、複数のキュー３０，３１，３４，４０，４１，４４，５０，５１，５４は、パケットＰを、複数の出力ポート８５１〜８５３のうち、同一の出力ポートから出力されるパケットごとに分けて格納する。各第１セレクタ１１〜１３は、出力ポート８５１〜８５３ごとに、パケットＰが出力されるキュー３０〜５４を切り替える。このため、「Ｈｅａｄ  ｏｆ  Ｌｉｎｅ  Ｂｌｏｃｋｉｎｇ」の問題は、生じない。
【０１０９】
例えば、第１セレクタ（＃１）１１は、出力ポート（＃１）８５１から第２セレクタ２を介して停止指示信号Ｓｐを受けると、キュー３０〜３４の読み出し処理を停止する（×印参照）。一方、他の第１セレクタ（＃２〜＃１０）１２，１３は、キュー４０，４１，４４，５０，５１，５４の読み出し処理を停止しない。したがって、出力ポート（＃１）８５１から出力されるパケットＰの送信だけが停止される。
【０１１０】
また、各第１セレクタ（＃１〜＃１０）１１〜１３は、出力ポート（＃１〜＃１０）８５１〜８５３ごとに設けられ、個別の第１タイマ（＃１〜＃１０）６１〜６３により、キュー３０〜５４を切り替える時間間隔を計測する。このため、各第１セレクタ（＃１〜＃１０）１１〜１３は、ポーズ制御が行われても、キューの巡回動作を個別に行うことができる。したがって、本実施例によると、キューの単純巡回性が維持される。
【０１１１】
例えば、第１セレクタ（＃１〜＃１０）１１〜１３が、期間Ｔｒ＝０〜１０（秒）のキュー３０，４０，５０をそれぞれ選択した状態において、第１セレクタ（＃１）１１が、停止指示信号Ｓｐを受けて、パケットＰの読み出しを停止したとする。このとき、第１タイマ（＃１）６１は、時刻Ｔ１の計時を停止する。
【０１１２】
読み出しの停止から１０秒後にポーズ制御が解除されると、第１セレクタ（＃１）１１は、時刻Ｔ１に従って、期間Ｔｒ＝０〜１０（秒）のキュー３０からのパケットＰの読み出しを再開する。このとき、第１セレクタ（＃２〜＃１０）１２，１３は、時刻Ｔ２〜Ｔ１０に従って、期間Ｔｒ＝１０〜２０（秒）のキュー３０からパケットＰを読み出している。
【０１１３】
したがって、第１セレクタ（＃１）１１の読み出し停止動作は、他の第１セレクタ（＃２〜＃１０）１２，１３の読み出し動作に影響を与えないので、キューの単純巡回性が維持される。また、このように、ポーズ制御が行われることにより、出力ポート（＃１〜＃１０）８５１〜８５３の間において、パケットＰが出力されるキュー３０〜５４の期間Ｔｒにずれが生ずる。しかし、出力ポート（＃１〜＃１０）は、そもそも、互いに独立して動作するため、出力ポート（＃１〜＃１０）８５１〜８５３の間におけるキューの期間Ｔｒのずれは問題とならない。
【０１１４】
（第２実施例）
上述したように、各第１セレクタ（＃１〜＃１０）１１〜１３は、出力ポート（＃１〜＃１０）８５１〜８５３のポーズ制御（停止制御）にそれぞれ従ってパケットＰの読み出しを停止する。このとき、ポーズ制御が解除するまでの間に空き帯域が生ずる。
【０１１５】
図１０は、ポーズ制御時の動作を示す構成図である。図１０は、図９に示された構成のうち、出力ポート（＃１）８５１に関する構成と、時刻に対する、出力ポート（＃１）８５１から出力されるパケットＰの様子を符号Ｂ１の吹き出し内に示す。なお、図１０において、図９と共通する構成については、同一の符号を付し、その説明を省略する。
【０１１６】
まず、第１セレクタ（＃１）１１は、期間Ｔｒ＝０〜１０（秒）のキュー３０からパケットＰを読み出して、第２セレクタ２を介し、出力ポート（＃１）８５１から出力する。その後、時刻ｔ１において、出力ポート（＃１）がポーズ制御を実行し、第１セレクタ（＃１）１１は、読み出し処理を停止する。ポーズ制御は、７秒後の時刻ｔ２において解除されるが、ポーズ制御の実行中、パケットＰは出力されないので、時刻ｔ１〜ｔ２の間に空き帯域が生ずる。
【０１１７】
次に、第１セレクタ（＃１）１１は、期間Ｔｒ＝１０〜２０（秒）のキュー３１を選択して、パケットＰを読み出す。ここで、キュー３１には、４０（個）のパケットＰが格納されているとする。
【０１１８】
第１セレクタ（＃１）１１は、４秒後の時刻ｔ３において、キュー３１内の４０（個）のパケットＰの読み出しを完了する。しかし、第１セレクタ（＃１）１１は、キュー３１が空であるにも関わらず（点線参照）、当該期間Ｔｒ内はキュー３１の選択を維持する。つまり、第１セレクタ（＃１）１１は、キュー３１が空になった後の６秒後の時刻ｔ４まで、キュー３１を選択し続ける。このため、時刻ｔ３〜ｔ４の間（６秒間）に空き帯域が生ずる。
【０１１９】
本実施例では、ポーズ制御の解除後、空のキューの選択時間を、多くとも当該停止時間だけ短縮することにより、空きキューの空読み時間（時刻ｔ２〜ｔ３の間）を省き、ポーズ制御により生じた停止時間（時刻ｔ１〜ｔ２の間）を取り戻す。
【０１２０】
図１１は、第２実施例における空きキューの読み出し時間の短縮動作を示す構成図である。図１１は、図９に示された構成のうち、出力ポート（＃１）８５１に関する構成と、時刻に対する、出力ポート（＃１）８５１から出力されるパケットＰの様子を符号Ｂ２の吹き出し内に示す。なお、図１１において、図１０と共通する構成については、同一の符号を付し、その説明を省略する。
【０１２１】
カウンタ（＃１）１１ａは、第１セレクタ（＃１）１１がポーズ制御によりパケットＰの読み出しを停止する停止時間Ｔｐを計測して、第１セレクタ（＃１）１１に通知する。カウンタ（＃１）１１ａは、第１セレクタ（＃１）１１の指示に従って計測の開始及び停止を行う。なお、図１１において、他の第１セレクタ（＃２〜＃１０）１２，１３に対応するカウンタ（＃２〜＃１０）は、図示が省略されているが、カウンタ（＃１）１１ａと同様の動作を行う。
【０１２２】
符号Ｂ２に示されるように、第１セレクタ（＃１）１１は、期間Ｔｒ＝０〜１０（秒）のキュー３０からパケットＰを読み出して、第２セレクタ２を介し、出力ポート（＃１）８５１から出力する。その後、時刻ｔ１において、出力ポート（＃１）がポーズ制御を実行し、第１セレクタ（＃１）１１は、読み出し処理を停止し、カウンタ（＃１）１１ａに停止時間Ｔｐの計測の開始を指示する。
【０１２３】
ポーズ制御は、開始から７秒後の時刻ｔ２に解除される（つまり、停止時間Ｔｐ＝７（秒））。第１セレクタ（＃１）１１は、ポーズ制御の解除を通知する通知信号を、出力ポート（＃１）８５１から受けると、カウンタ（＃１）１１ａに停止時間Ｔｐの計測の停止を指示する。このとき、カウンタ（＃１）１１ａは、第１セレクタ（＃１）１１に、カウンタ値Ｎ＝７（秒）を示す。
【０１２４】
次に、第１セレクタ（＃１）１１は、期間Ｔｒ＝１０〜２０（秒）のキュー３１を選択し、パケットＰを読み出す。ここで、キュー３１に４０（個）のパケットＰしか格納されていない場合、読み出しの開始（時刻ｔ２）から４秒後の時刻ｔ３において、キュー３１は空になる。
【０１２５】
時刻ｔ３において、期間Ｔｒの残りは、６（秒）（＝時間幅１０（秒）―４（秒））であり、カウンタ値Ｎ＝７（秒）より少ない。このため、第１セレクタ（＃１）１１は、空になったキュー３１の読み出しをスキップして、次の期間Ｔｒ＝２０〜３０（秒）のキュー３２を選択する。つまり、第１セレクタ（＃１）１１は、キュー３２の読み出し処理の開始を、６（秒）だけ早めることにより、期間Ｔｒ（時間幅１０（秒））の経過前にキューを切り替える。
【０１２６】
これにより、ポーズ制御による停止時間Ｔｐ（時刻ｔ２〜ｔ３の間）のうち、６（秒）だけが取り戻される。第１セレクタ（＃１）１１は、キュー３１をスキップした後、カウンタ（＃１）１１ａに、カウンタ値Ｎ＝７（秒）から当該短縮時間の６（秒）を減算するように指示する。このため、時刻ｔ３において、カウンタ値Ｎ＝１（秒）（＝７（秒）−６（秒））となる。
【０１２７】
このため、次の期間Ｔｒ＝２０〜３０（秒）のキュー３２も４０（個）のパケットＰしか格納されていない場合、キュー３２が空になった後、カウンタ値Ｎ（＝１（秒））分の時間が取り戻される。より具体的には、キュー３２は、読み出しの開始（時刻ｔ３）から４秒後に空になり、その後、第１セレクタ（＃１）１１は、５秒間だけキュー３２を空読みし、時刻ｔ４において、次の期間Ｔｒ＝３０〜４０（秒）のキュー（図示せず）を選択する。つまり、第１セレクタ（＃１）１１は、キュー３２の読み出し処理の開始を、１（秒）だけ早めることにより、期間Ｔｒ（時間幅１０（秒））の経過前にキューを切り替える。
【０１２８】
これにより、カウンタ値Ｎ＝０（秒）（＝１（秒）−１（秒））となるため、第１セレクタ（＃１）１１は、再度ポーズ制御が行われない限り、時刻ｔ４以降、空のキュー３１，３２の選択時間の短縮を行わない。
【０１２９】
このように、第１セレクタ（＃１）１１は、ポーズ制御の解除後、１以上の空のキューの選択時間を、多くとも当該停止時間Ｔｐだけ短縮する。言い換えると、１以上の空のキュー３２，３２は、当該期間Ｔｒのうち、多くとも停止時間Ｔｐ分の読み出し処理がスキップされる。したがって、第１セレクタ（＃１）１１の巡回動作が早まり、ポーズ制御により生じた停止時間Ｔｐ（時刻ｔ１〜ｔ２の間）が取り戻される。
【０１３０】
本実施例では、ポーズ制御による停止時間Ｔｐが長いほど、多くの読み出し時間が短縮されるため、出力ポート８５１〜８５３から出力されるパケットＰの間隔が狭くなり、バースト性が高まる。そこで、カウンタ値Ｎに、停止時間Ｔｐより小さい上限値（第１上限値）を設け、１以上の空のキュー３１，３２の選択時間の各短縮時間の合計を制限することにより、バースト性の増加を抑制してもよい。
【０１３１】
図１２は、短縮時間に上限を設けた場合の空きキューの読み出し時間の短縮動作を示す構成図である。図１２は、図９に示された構成のうち、出力ポート（＃１）８５１に関する構成と、時刻に対する、出力ポート（＃１）８５１から出力されるパケットＰの様子を符号Ｂ３の吹き出し内に示す。なお、図１２において、図１１と共通する構成については、同一の符号を付し、その説明を省略する。
【０１３２】
本例において、カウンタ値Ｎは、上限値Ｎｍａｘにより制限される。上限値Ｎｍａｘは、カウンタ（＃１）１１ａ及び第１セレクタ（＃１）１１の何れに、レジスタとして設定される。上限値Ｎｍａｘの設定値は、一例として５（秒）とするが、その設定値に制限はない。もっとも、上限値Ｎｍａｘ＝０（秒）に設定した場合、空のキューの読み出し時間の短縮が行われないため、図１０の例と同様のバースト性が保たれる。
【０１３３】
符号Ｂ３に示されるように、第１セレクタ（＃１）１１は、期間Ｔｒ＝０〜１０（秒）のキュー３０からパケットＰを読み出して、第２セレクタ２を介し、出力ポート（＃１）８５１から出力する。その後、時刻ｔ１において、出力ポート（＃１）がポーズ制御を実行し、第１セレクタ（＃１）１１は、読み出し処理を停止し、カウンタ（＃１）１１ａに停止時間Ｔｐの計測の開始を指示する。
【０１３４】
ポーズ制御は、開始から７秒後の時刻ｔ２に解除される（つまり、停止時間Ｔｐ＝７（秒））。第１セレクタ（＃１）１１は、ポーズ制御の解除を通知する通知信号を、出力ポート（＃１）８５１から受けると、カウンタ（＃１）１１ａに停止時間Ｔｐの計測の停止を指示する。このとき、カウンタ（＃１）１１ａは、停止時間Ｔｐ＝７（秒）が上限値Ｎｍａｘ＝５（秒）を超えるため、カウンタ値Ｎ＝５（秒）を示す。
【０１３５】
次に、第１セレクタ（＃１）１１は、期間Ｔｒ＝１０〜２０（秒）のキュー３１を選択し、パケットＰを読み出す。ここで、キュー３１に４０（個）のパケットＰしか格納されていない場合、読み出しの開始（時刻ｔ２）から４秒後にキュー３１は空になる。
【０１３６】
このとき、期間Ｔｒの残りは、６（秒）（＝時間幅１０（秒）―４（秒））であり、カウンタ値Ｎ＝５（秒）より多い。このため、第１セレクタ（＃１）１１は、空になったキュー３１の読み出しを１秒間（＝６（秒）−５（秒））だけ行い、次の期間Ｔｒ＝２０〜３０（秒）のキュー３２を選択する。つまり、第１セレクタ（＃１）１１は、キュー３２の読み出し処理の開始を、５（秒）だけ早めることにより、期間Ｔｒ（時間幅１０（秒））の経過前、すなわちキュー３１を選択して５秒後の時刻ｔ３にキューを切り替える。
【０１３７】
これにより、カウンタ値Ｎ＝０（秒）（＝残り時間５（秒）−短縮時間５（秒））となるため、第１セレクタ（＃１）１１は、再度ポーズ制御が行われない限り、時刻ｔ３以降、空のキュー３１，３２の選択時間の短縮を行わない。
【０１３８】
このように、１以上の空のキュー３１，３２の選択時間の各短縮時間の合計を、停止時間Ｔｐより小さい上限値により制限することにより、取り戻す停止時間Ｔｐを制限し、バースト性の増加を抑制できる。
【０１３９】
上記の効果は、空のキュー３１，３２の選択時間の短縮を、キューごとに制限することによっても得られる。すなわち、１以上の空のキュー３１，３２の選択時間の各短縮時間は、期間Ｔｒより短い上限値（第２上限値）により制限されてもよい。
【０１４０】
図１３は、空きキューごとの短縮時間に上限を設けた場合の空きキューの読み出し時間の短縮動作を示す構成図である。図１３は、図９に示された構成のうち、出力ポート（＃１）８５１に関する構成と、時刻に対する、出力ポート（＃１）８５１から出力されるパケットＰの様子を符号Ｂ４の吹き出し内に示す。なお、図１３において、図１１と共通する構成については、同一の符号を付し、その説明を省略する。
【０１４１】
本例において、空のキューの読み出しの短縮時間は、上限値Ｌｍにより制限される。上限値Ｌｍは、第１セレクタ（＃１）１１にレジスタとして設定される。上限値Ｌｍの設定値は、一例として２（秒）とする。このため、第１セレクタ（＃１）１１は、空きキューを少なくとも８秒間（＝時間間隔１０（秒）−上限値２（秒））選択する。なお、上限値Ｌｍの設定値に制限はなく、上限値Ｌｍ＝０（秒）に設定した場合、空のキューの読み出し時間の短縮が行われないため、図１０の例と同様のバースト性が保たれる。
【０１４２】
符号Ｂ４に示されるように、第１セレクタ（＃１）１１は、期間Ｔｒ＝０〜１０（秒）のキュー３０からパケットＰを読み出して、第２セレクタ２を介し、出力ポート（＃１）８５１から出力する。その後、時刻ｔ１において、出力ポート（＃１）がポーズ制御を実行し、第１セレクタ（＃１）１１は、読み出し処理を停止し、カウンタ（＃１）１１ａに停止時間Ｔｐの計測の開始を指示する。なお、本例において、カウンタ値Ｎの上限値Ｎｍａｘの設定はないものとする。
【０１４３】
ポーズ制御は、開始から７秒後の時刻ｔ２に解除される（つまり、停止時間Ｔｐ＝７（秒））。第１セレクタ（＃１）１１は、ポーズ制御の解除を通知する通知信号を、出力ポート（＃１）８５１から受けると、カウンタ（＃１）１１ａに停止時間Ｔｐの計測の停止を指示する。このとき、カウンタ（＃１）１１ａは、カウンタ値Ｎ＝７（秒）を示す。
【０１４４】
次に、第１セレクタ（＃１）１１は、期間Ｔｒ＝１０〜２０（秒）のキュー３１を選択し、パケットＰを読み出す。ここで、キュー３１に４０（個）のパケットＰしか格納されていない場合、読み出しの開始（時刻ｔ２）から４秒後にキュー３１は空になる。
【０１４５】
このとき、期間Ｔｒの残りは、６（秒）（＝時間幅１０（秒）―４（秒））であり、カウンタ値Ｎ＝７（秒）より少ないが、読み出し処理の短縮時間は、上限値Ｌｍ＝８（秒）に制限される。このため、第１セレクタ（＃１）１１は、空になったキュー３１の読み出しを４秒間（＝８（秒）−４（秒））だけ行い、次の期間Ｔｒ＝２０〜３０（秒）のキュー３２を選択する。つまり、第１セレクタ（＃１）１１は、キュー３２の読み出し処理の開始を、２（秒）だけ早めることにより、期間Ｔｒ（時間幅１０（秒））の経過前、すなわちキュー３１を選択して８秒後の時刻ｔ３にキューを切り替える。
【０１４６】
これにより、カウンタ値Ｎ＝５（秒）（＝残り時間７（秒）−短縮時間２（秒））となるため、次の期間Ｔｒ＝２０〜３０（秒）のキュー３２も同様に、読み出し処理を２（秒）だけ短縮する。このとき、カウンタ値Ｎ＝３（秒）（＝残り時間５（秒）−短縮時間２（秒））となる。なお、空のキューの読み出し処理の短縮は、図示を省略するが、以降も同様に行われる。
【０１４７】
このように、１以上の空のキュー３１，３２の選択時間の各短縮時間を、期間Ｔｒより短い上限値Ｌｍにより制限することにより、読み出し処理の短縮に伴うバースト性の増加が抑制される。
【０１４８】
次に、上記の上限値Ｎｍａｘ，Ｌｍを用いた場合の第１セレクタ１１〜１３及び第２セレクタ２の動作を説明する。
【０１４９】
図１４は、第１セレクタ１１〜１３の動作を示すフローチャートである。なお、図１４において、各第１タイマ６１〜６３が示す時刻Ｔ１〜１０を「Ｔｉ」（ｉ＝１〜１０）と表記する。
【０１５０】
まず、第１セレクタ１１〜１３は、第１タイマ６１〜６３から時刻Ｔｉを取得する（ステップＳｔ１）。なお、各第１タイマ６１〜６３の時刻Ｔｉは、同一でなくてもよい。
【０１５１】
次に、第１セレクタ１１〜１３は、時刻ＴｉがＴｉ＿ｍａｘ以上であるか否かを判定する（ステップＳｔ２）。Ｔｉ＿ｍａｘは、各キュー３０〜５４の選択時間の最大値であり、期間Ｔｒの時間幅（１０（秒））に一致する。つまり、第１セレクタ１１〜１３は、選択中のキュー３０〜５４の期間Ｔｒが経過したか否かを判定する。
【０１５２】
第１セレクタ１１〜１３は、時刻ＴｉがＴｉ＿ｍａｘ以上ではない場合（ステップＳｔ２のＮｏ）、ステップＳｔ１７の処理を行う。後述するように、ステップＳｔ１７〜Ｓｔ２０では、空のキュー３０〜５４の読み出し処理の短縮が行われる。
【０１５３】
第１セレクタ１１〜１３は、時刻ＴｉがＴｉ＿ｍａｘ以上である場合（ステップＳｔ２のＹｅｓ）、第１セレクタ１１〜１３は、出力ポート８５１〜８５３から出力されるパケットＰが読み出されるキュー３０〜５４を切り替える（ステップＳｔ３）。すなわち、第１セレクタ１１〜１３は、期間Ｔｒが経過するたびに、キュー３０〜５４を切り替える。次に、第１セレクタ１１〜１３は、例えば第１タイマ６１〜６３をリセットすることにより、時刻Ｔｉ＝０とする（ステップＳｔ４）。
【０１５４】
次に、第１セレクタ１１〜１３は、ポーズ制御の有無を判定する（ステップＳｔ５）。ポーズ制御の有無は、例えば停止指示信号Ｓｐの有無に基づいて判定される。なお、ステップＳｔ５の判定処理は、ステップＳｔ３の判定処理より先に行われてもよい。
【０１５５】
第１セレクタ１１〜１３は、ポーズ制御が行われていない場合（ステップＳｔ５のＮｏ）、再びステップＳｔ１の処理を行う。ポーズ制御が行われた場合（ステップＳｔ５のＹｅｓ）、第１セレクタ１１〜１３は、選択中のキュー３０〜５４からのパケットＰの読み出しを停止する（ステップＳｔ６）。
【０１５６】
次に、第１セレクタ１１〜１３は、第１タイマ６１〜６３に時刻Ｔｉの計時処理の停止を指示する（ステップＳｔ７）。次に、第１セレクタ１１〜１３は、カウンタ１１ａを起動する（ステップＳｔ８）。これにより、カウンタ１１ａは、停止時間Ｔｐの計測を開始する。
【０１５７】
次に、第１セレクタ１１〜１３は、カウンタ１１ａからカウンタ値Ｎを取得する（ステップＳｔ９）。次に、第１セレクタ１１〜１３は、カウンタ値Ｎが上限値Ｎｍａｘであるか否かを判定する（ステップＳｔ１０）。
【０１５８】
第１セレクタ１１〜１３は、カウンタ値Ｎが上限値Ｎｍａｘではない場合（ステップＳｔ１０のＮｏ）、後述するステップＳｔ１２の処理を行う。カウンタ値Ｎが上限値Ｎｍａｘである場合（ステップＳｔ１０のＹｅｓ）、第１セレクタ１１〜１３は、カウンタ１１ａを停止する（ステップＳｔ１１）。これにより、カウンタ１１ａは、停止時間Ｔｐの計測を停止する。なお、本例では、上限値Ｎｍａｘが、第１セレクタ１１〜１３に設定されているものとするが、カウンタ１１ａに設定されてもよい。この場合、カウンタ１１ａが、自律的に停止時間Ｔｐの計測を停止する。
【０１５９】
次に、第１セレクタ１１〜１３は、ポーズ制御が解除されたか否かを判定する（ステップＳｔ１２）。ポーズ制御の解除有無の判定は、例えば、ポーズ制御の解除を示す指示信号に基づいて行われる。
【０１６０】
第１セレクタ１１〜１３は、ポーズ制御が解除されていない場合（ステップＳｔ１２のＮｏ）、再びステップＳｔ９の処理を行う。第１セレクタ１１〜１３は、ポーズ制御が解除された場合（ステップＳｔ１２のＹｅｓ）、カウンタ１１ａを停止する（ステップＳｔ１３）。これにより、カウンタ１１ａは、停止時間Ｔｐの計測を停止する。なお、ステップＳｔ１１において、既にカウンタ１１ａが停止している場合、第１セレクタ１１〜１３は、ステップＳｔ１３の処理をスキップしてもよい。
【０１６１】
次に、第１セレクタ１１〜１３は、選択中のキュー３０〜５４からのパケットＰの読み出しを再開する（ステップＳｔ１４）。次に、第１セレクタ１１〜１３は、第１タイマ６１〜６３を再開させる（ステップＳｔ１５）。これにより、第１タイマ６１〜６３は、時刻Ｔｉの計時を再開する。
【０１６２】
次に、第１セレクタ１１〜１３は、通信装置の運用停止などの要因により動作を終了するか否かを判定する（ステップＳｔ１６）。第１セレクタ１１〜１３は、動作を終了する場合（ステップＳｔ１６のＹｅｓ）、処理を終了し、動作を継続する場合（ステップＳｔ１６のＮｏ）、再びステップＳｔ１の処理を行う。
【０１６３】
第１セレクタ１１〜１３は、時刻ＴｉがＴｉ＿ｍａｘ以上ではない場合（ステップＳｔ２のＮｏ）、選択中のキュー３０〜５４が空であるか否かを判定する（ステップＳｔ１７）。ステップＳｔ１７の判定処理は、例えば、キュー管理部８２から取得したキュー３０〜５４の管理情報、またはキュー３０〜５４から取得した空き容量値に基づいて行われる。第１セレクタ１１〜１３は、選択中のキュー３０〜５４が空ではない場合（ステップＳｔ１７のＮｏ）、ステップＳｔ５の処理を行う。
【０１６４】
選択中のキュー３０〜５４が空である場合（ステップＳｔ１７のＹｅｓ）、第１セレクタ１１〜１３は、時刻Ｔｉが、時刻幅Ｔｉ＿ｍａｘから、キュー３０〜５４ごとの短縮時間の上限値Ｌｍを差し引いた値以上であるか否かを判定する（ステップＳｔ１８）。
【０１６５】
これにより、第１セレクタ１１〜１３は、選択中のキュー３０〜５４の読み出し処理を短縮する場合、当該短縮時間が上限値Ｌｍ以下となるか否かを判定する。図１３の例の場合、上限値Ｌｍ＝２（秒）であるため、第１セレクタ１１〜１３は、時刻Ｔｉが、８（秒）（＝時刻幅１０（秒）−上限値２（秒））以上であるか否かを判定する。
【０１６６】
第１セレクタ１１〜１３は、時刻Ｔｉが、時刻幅Ｔｉ＿ｍａｘから上限値Ｌｍを差し引いた値より小さい場合（ステップＳｔ１８のＮｏ）、ステップＳｔ５の処理を行う。時刻幅Ｔｉ＿ｍａｘから上限値Ｌｍを差し引いた値以上である場合（ステップＳｔ１８のＹｅｓ）、第１セレクタ１１〜１３は、時刻Ｔｉが、時刻幅Ｔｉ＿ｍａｘからカウンタ値Ｎを差し引いた値以上であるか否かを判定する（ステップＳｔ１９）。
【０１６７】
これにより、第１セレクタ１１〜１３は、選択中のキュー３０〜５４の読み出し処理を短縮する場合、当該短縮時間がカウンタ値Ｎ以下となるか否かを判定する。図１１の例の場合、時刻ｔ２の時点のカウンタ値Ｎ＝５（秒）であるため、第１セレクタ１１〜１３は、キュー３１を選択中、時刻Ｔｉが、５（秒）（＝時刻幅１０（秒）−カウンタ値５（秒））以上であるか否かを判定する。
【０１６８】
第１セレクタ１１〜１３は、時刻Ｔｉが、時刻幅Ｔｉ＿ｍａｘからカウンタ値Ｎを差し引いた値より小さい場合（ステップＳｔ１９のＮｏ）、ステップＳｔ５の処理を行う。時刻Ｔｉが、時刻幅Ｔｉ＿ｍａｘからカウンタ値Ｎを差し引いた値以上である場合（ステップＳｔ１９のＹｅｓ）、第１セレクタ１１〜１３は、カウンタ値Ｎを、Ｎ−（Ｔｉ＿ｍａｘ−Ｔｉ）に更新する（ステップＳｔ２０）。つまり、第１セレクタ１１〜１３は、カウンタ値Ｎから短縮時間（Ｔｉ＿ｍａｘ−Ｔｉ）を差し引く。
【０１６９】
次に、第１セレクタ１１〜１３は、再びステップＳｔ３の処理を行う。つまり、第１セレクタ１１〜１３は、空のキュー３０〜５４の読み出し処理をスキップして、次の期間Ｔｒのキューに選択を切り替える。このようにして、第１セレクタ１１〜１３の動作は行われる。
【０１７０】
図１５は、第２セレクタ２の動作を示すフローチャートである。まず、第２セレクタ２は、第２タイマ７から時刻Ｔｊを取得する（ステップＳｔ３１）。
【０１７１】
次に、第２セレクタ２は、時刻Ｔｊが、Ｔｊ＿ｍａｘ以上であるか否かを判定する（ステップＳｔ３２）。Ｔｊ＿ｍａｘは、出力ポート８５１〜８５３の出力レート（１０（個／秒））に基づいて決定された時間間隔であり、図９の例の場合、０．２（秒）である。
【０１７２】
第２セレクタ２は、時刻Ｔｊが、Ｔｊ＿ｍａｘ以上ではない場合（ステップＳｔ３２のＮｏ）、後述するステップＳｔ３５の処理を行う。時刻Ｔｊが、Ｔｊ＿ｍａｘ以上である場合（ステップＳｔ３２のＹｅｓ）、第２セレクタ２は、パケットが出力される第１セレクタ１１〜１３を切り替える（ステップＳｔ３３）。これにより、第１セレクタ１１〜１３は、０．２（秒）の時間間隔で切り替えられる。次に、第２セレクタ２は、例えば第２タイマ７をリセットすることにより、時刻Ｔｊ＝０とする（ステップＳｔ３４）。
【０１７３】
次に、第２セレクタ２は、通信装置の運用停止などの要因により動作を終了するか否かを判定する（ステップＳｔ３５）。第２セレクタ２は、動作を終了する場合（ステップＳｔ３５のＹｅｓ）、処理を終了し、動作を継続する場合（ステップＳｔ３５のＮｏ）、再びステップＳｔ３１の処理を行う。このようにして、第２セレクタ２の動作は、行われる。
【０１７４】
これまで述べたように、実施例に係る通信装置は、複数の出力ポート８５１〜８５３と、複数のキュー３０〜５４と、複数の第１セレクタ１１〜１３と、第２セレクタ２とを有する。複数のキュー３０〜５４は、パケットＰを、複数の出力ポート８５１〜８５３のうち、同一の出力ポートから同一の期間Ｔｒ内に出力されるパケットごとに分けて格納する。
【０１７５】
複数の第１セレクタ１１〜１３は、複数の出力ポート８５１〜８５３のそれぞれに対応し、複数のキュー３０〜５４のうち、当該出力ポートから出力されるパケットＰが読み出されるキューを、期間Ｔｒが経過するたびに切り替える。第２セレクタ２は、複数の出力ポート８５１〜８５３のパケットＰの出力レートに応じた時間間隔で、複数の第１セレクタ１１〜１３のうち、パケットが出力される第１セレクタを切り替える。
【０１７６】
複数のキュー３０，３１，３４，４０，４１，４４，５０，５１，５４は、パケットＰを、複数の出力ポート８５１〜８５３のうち、同一の出力ポートから出力されるパケットごとに分けて格納する。各第１セレクタ１１〜１３は、出力ポート８５１〜８５３ごとに、パケットＰが出力されるキュー３０〜５４を切り替える。
【０１７７】
したがって、読み出し停止制御（ポーズ制御）が行われても、複数の第１セレクタ１１〜１３のうち、制御対象となる第１セレクタだけが、パケットＰの読み出しを停止することにより、他の出力ポート８５１〜８５３から出力されるパケットＰへの影響が回避される。
【０１７８】
また、第１セレクタ１１〜１３は、対応する出力ポート８５１〜８５３から出力されるパケットＰが読み出されるキュー３０〜５４を、期間Ｔｒが経過するたびに切り替える。第２セレクタ２は、複数の出力ポート８５１〜８５３のパケットＰの出力レートに応じた時間間隔で、パケットＰが出力される第１セレクタ１１〜１３を切り替える。
【０１７９】
このため、第２セレクタ２は、第１セレクタ１１〜１３から単位時間内に出力されるパケット量を、出力ポート８５１〜８５３の出力レートに基づいて調整できる。したがって、本実施例によると、１つの出力ポート８５１〜８５３に、各出力ポート８５１〜８５３の出力レートを超えるパケットＰが入力されることが防止され低いバースト性が実現される。よって、読み出し停止制御の多発やパケットロスが抑制され、通信品質が向上する。
【０１８０】
さらに、第１セレクタ１１〜１３を切り替える時間間隔は、キュー３０〜５４の期間Ｔｒの長さ、つまり時間幅によらずに決定される。このため、キュー３０〜５４の容量を増加させることにより時間幅を拡張し、ハードウェアの規模を縮小することができる。
【０１８１】
また、実施例に係る通信方法は、以下の工程を有する。
工程（１）：パケットＰを、複数の出力ポート８５１〜８５３のうち、同一の出力ポートから同一の期間Ｔｒ内に出力されるパケットごとに分けて複数のキュー３０〜５４にそれぞれ格納する。
工程（２）：複数の出力ポート８５１〜８５３のそれぞれに対応する複数の第１セレクタ１１〜１３により、複数のキュー３０〜５４のうち、当該出力ポートから出力されるパケットＰが読み出されるキューを、期間Ｔｒが経過するたびに切り替える。
工程（３）：第２セレクタ２により、複数の出力ポート８５０〜８５３のパケットＰの出力レートに応じた時間間隔で、複数の第１セレクタ１１〜１３のうち、パケットＰが出力される第１セレクタを切り替える。
【０１８２】
実施例に係る通信方法は、上記の通信装置と同様の構成を有するので、上述した内容と同様の作用効果を奏する。
【０１８３】
以上、好ましい実施例を参照して本発明の内容を具体的に説明したが、本発明の基本的技術思想及び教示に基づいて、当業者であれば、種々の変形態様を採り得ることは自明である。
【０１８４】
なお、以上の説明に関して更に以下の付記を開示する。
（付記１）  複数の出力ポートと、
パケットを、前記複数の出力ポートのうち、同一の出力ポートから同一の期間内に出力されるパケットごとに分けて格納する複数のキューと、
前記複数の出力ポートのそれぞれに対応し、前記複数のキューのうち、当該出力ポートから出力されるパケットが読み出されるキューを、前記期間が経過するたびに切り替える複数の第１セレクタと、
前記複数の出力ポートのパケットの出力レートに応じた時間間隔で、前記複数の第１セレクタのうち、パケットが出力される第１セレクタを切り替える第２セレクタとを有することを特徴とする通信装置。
（付記２）  前記複数の第１セレクタは、前記複数の出力ポートの停止制御にそれぞれ従ってパケットの読み出しを停止し、前記停止制御の解除後、前記複数のキューのうち、１以上の空のキューの選択時間を、多くとも当該停止時間だけ短縮することを特徴とする付記１に記載の通信装置。
（付記３）  前記１以上の空のキューの選択時間の各短縮時間の合計は、前記停止時間より小さい第１上限値により制限されることを特徴とする付記２に記載の通信装置。
（付記４）  前記１以上の空のキューの選択時間の各短縮時間は、前記期間より短い第２上限値により制限されることを特徴とする付記２または３に記載の通信装置。
（付記５）  パケットを、複数の出力ポートのうち、同一の出力ポートから同一の期間内に出力されるパケットごとに分けて複数のキューにそれぞれ格納し、
前記複数の出力ポートのそれぞれに対応する複数の第１セレクタにより、前記複数のキューのうち、当該出力ポートから出力されるパケットが読み出されるキューを、前記期間が経過するたびに切り替え、
第２セレクタにより、前記複数の出力ポートのパケットの出力レートに応じた時間間隔で、前記複数の第１セレクタのうち、パケットが出力される第１セレクタを切り替えることを特徴とする通信方法。
（付記６）  前記複数の第１セレクタは、前記複数の出力ポートの停止制御にそれぞれ従ってパケットの読み出しを停止し、前記停止制御の解除後、前記複数のキューのうち、１以上の空のキューの選択時間を、多くとも当該停止時間だけ短縮することを特徴とする付記５に記載の通信方法。
（付記７）  前記１以上の空のキューの選択時間の各短縮時間の合計は、前記停止時間より小さい第１上限値により制限されることを特徴とする付記６に記載の通信方法。
（付記８）  前記１以上の空のキューの選択時間の各短縮時間は、前記期間より短い第２上限値により制限されることを特徴とする付記５または６に記載の通信方法。
【符号の説明】
【０１８５】
１１〜１３                    第１セレクタ
２                            第２セレクタ
３０〜５４                    キュー
８５１〜８５３                出力ポート
Ｔｒ                          期間
【図１】
2015091009.tif 000003
【図２】
2015091009.tif 000004
【図３】
2015091009.tif 000005
【図４】
2015091009.tif 000006
【図５】
2015091009.tif 000007
【図６】
2015091009.tif 000008
【図７】
2015091009.tif 000009
【図８】
2015091009.tif 000010
【図９】
2015091009.tif 000011
【図１０】
2015091009.tif 000012
【図１１】
2015091009.tif 000013
【図１２】
2015091009.tif 000014
【図１３】
2015091009.tif 000015
【図１４】
2015091009.tif 000016
【図１５】
2015091009.tif 000017