図1は、実施例に係る通信装置の機能構成を示す構成図である。通信装置は、複数のネットワークインターフェースカード91と、2枚のスイッチカード92と、コントロールカード93とを有する。各カード91〜93は、筐体に設けられた個別のスロットに収容され、互いに電気的に接続される。なお、本明細書において、通信装置として、レイヤ2スイッチやルータなどのパケット交換装置を例に挙げるが、これに限定されない。
通信装置は、外部装置から受信したパケットを、その宛先に従って他の外部装置に中継する。なお、本明細書において、パケットとは、伝送されるデータ(情報)の伝送単位であり、例としてイーサネットフレームを挙げるが、これに限られず、IPパケットなどの他のフレームであってもよい。
複数のネットワークインターフェースカード91は、それぞれ、外部装置との間において、パケットを送受信する。外部装置としては、例えば、パーソナルコンピュータなどの端末装置、サーバ装置、及びルータが挙げられる。複数のネットワークインターフェースカード91は、複数のポートにより光ファイバと接続され、例えば10GBASE−LRの規格に基づく通信を行う。
2枚のスイッチカード92は、それぞれ、複数のネットワークインターフェースカード91の間において、パケットを交換する。より具体的には、スイッチカード92は、ネットワークインターフェースカード91からパケットが入力され、パケットを、その宛先に応じたネットワークインターフェースカード91に出力する。2枚のスイッチカード92は、例えば、ハードウェア故障などの障害に備えて、現用系及び予備系として使用される。
コントロールカード93は、複数のネットワークインターフェースカード91及び2枚のスイッチカード92を制御する。コントロールカード93は、ネットワーク制御装置などと接続され、ユーザーインターフェースに関する処理、各カード91,92に対する設定処理、及び各カード91,92からの情報収集処理などを行う。コントロールカード93は、これらの処理を実行するCPU(Central Processing Unit)などのプロセッサ930、及び、プロセッサ930を駆動するプログラムを記憶するメモリ931を有する。
図2は、ネットワークインターフェースカード91の機能構成を示す構成図である。ネットワークインターフェースカード91は、複数の光送受信器910と、PHY/MAC部911と、入力処理部912と、出力処理部913と、制御部914とを有する。
複数の光送受信器910は、それぞれ、外部装置から光ファイバを介して受信した光信号を電気信号に変換してPHY/MAC部911に出力し、また、PHY/MAC部911から入力された電気信号を光信号に変換し、光ファイバを介して外部装置に送信する。つまり、複数の光送受信器910は、外部装置との間でパケットを送受信するためのポートとして機能する。
PHY/MAC部911は、外部装置とのリンクの確立処理や複数の光送受信器10に対するパケットの分配処理などを行う。PHY/MAC部911は、複数の光送受信器910から入力されたパケットを入力処理部912に出力し、出力処理部913から入力されたパケットを複数の光送受信器910に出力する。
入力処理部912及び出力処理部913は、イングレス(INGRESS)及びイーグレス(EGRESS)のパケット処理をそれぞれ行う。入力処理部912は、パケットの帯域制御処理などを行って、スイッチカード92にパケットを出力する。出力処理部913は、スイッチカード92から入力されたパケットの帯域制御処理などを行って、PHY/MAC部911にパケットを出力する。
制御部914は、コントロールカード93と通信を行い、入力処理部912及び出力処理部913の制御を行う。制御部914は、CPUなどのプロセッサ及びメモリ(図示せず)を備える。
図3には、通信装置内のパケットの経路が示されている。なお、図3は、入力処理部912の構成も示す。
まず、パケットは、ネットワークインターフェースカード91の入力処理部912に入力される。入力処理部912は、クラス判定部912aと、ポリサー912bと、分配部912cと、複数の入力キュー912dと、出力部912eとを有する。
クラス判定部912aは、パケットごとの通信品質(QoS)のクラスを判定し、クラスに応じたフローIDを、例えば装置内ヘッダに含めてパケットに付与する。クラス判定部912aは、例えば、パケットのヘッダに含まれる宛先(DA:Destination Address)、またはVLAN(Virtual Local Area Network) IDに基づいてクラスを判定する。
ポリサー912bは、入力されるパケットのトラフィック量が所定の帯域を超えないように、所定帯域を超える分のパケットを廃棄する。分配部912cは、パケットを、宛先となるネットワークインターフェースカード91に応じて、複数の入力キュー912dに分配する。つまり、入力キュー912dは、ネットワークインターフェースカード91ごとに設けられている。複数の入力キュー912dは、パケットを、出力部912eにより読み出されるまで蓄積する。出力部912eは、複数の入力キュー912dから1つを選択して、選択した入力キュー912dからパケットを読み出して、スイッチカード92のスイッチ部920に出力する。スイッチ部920は、入力されたパケットを宛先に応じたネットワークインターフェースカード91の出力処理部913に出力する。
(第1比較例)
まず、入力型スケジューラの比較例を説明する。入力型スケジューラは、出力処理部913に設けられ、フローIDに応じたレートでパケットを複数のキューに分配する。なお、本例では、パケットの長さ(データ量)が一定である場合を例に挙げて説明するが、これに限定されず、以下に述べる内容は、可変長のパケットの場合にも適用可能である。
図4は、第1比較例の出力処理部913の機能構成を示す構成図である。出力処理部913は、スケジューラ80と、記憶部81と、キュー管理部82と、複数のキュー(時刻バッファ(Time Region Buffer))830〜834と、セレクタ84とを有する。なお、出力ポート85は、例えば、パケットPを他装置に送信する光送受信器910に対応する。
スケジューラ80は、フローシェーパ800を含み、スイッチ部920から入力されたパケットPを、フローIDごとのレートに基づいて、複数のキュー830〜834に分配する。本例では、フロー#1のレート(1秒当たりのパケットの個数)を1(個/秒)とし、フロー#2のレートを3(個/秒)とし、フロー#3のレートを0.5(個/秒)とする。なお、図4において、フローID#1〜#3のパケットPの区別は、符号Iで示されるとおりである。
各キュー830〜834は、FIFO(First In First Out)のようなバッファであり、スケジューラ80から入力されたパケットPを格納する。各キュー830〜834は、セレクタ84により、パケットPが出力される期間Trが割り当てられる。
セレクタ84は、パケットPが出力されるキュー830を、各期間Tr(1(秒)単位)が経過するたびに切り替える。より具体的には、セレクタ84は、複数のキュー830〜834のうち、タイマ86が示す時刻Tcに応じた期間Trのキューを選択して、当該キューからパケットPを読み出し、出力ポート85に出力する。パケットPは、出力ポート85から他装置に出力される。
例えば、キュー830は、期間Tr=5〜6(秒)であるため、時刻Tcが5〜6(秒)であるとき、セレクタ84により選択され、格納したパケットPが出力ポート85から出力される。また、キュー831は、期間Tr=6〜7(秒)であるため、時刻Tcが6〜7(秒)であるとき、セレクタ84により選択され、格納したパケットPが出力ポート85から出力される。
このように、各キュー830〜834に格納されたパケットは、一定の期間Tr内に読み出される。つまり、各キュー830〜834に格納されたパケットは、次のキューの期間Trが開始される前に読み出される。したがって、各キュー830〜834の容量は、各期間Trの長さである一定時間(1(秒))内に読み出し可能な量に制限される。仮に、1(秒)当たり最大で9(個)のパケットPが、キュー830〜834から読み出されて出力ポート84から出力されるとすると、各キュー830〜834の容量は、9(個)に制限される。なお、以降の説明において、各期間Trの長さを「時間幅」と表記する。
また、空になったキュー830〜834は、新たな期間Trが割り当てられる。例えば、キュー831が空になった場合、新たな期間Tr=10〜11(秒)が割り当てられる。このため、セレクタ84は、キュー830〜834を、時刻Tcに従って繰り返し選択する。したがって、パケットPを格納するキュー830〜834は、時刻Tcによらず、常に、一定時間先の期間Trまで確保される。
なお、セレクタ84は、期間Trの途中でキュー830〜834が空になっても、期間Trが終了するまで、当該キューの選択を維持する。例えば、時刻Tc=5.5(秒)の時点でキュー831が空になっても、セレクタ84は、時刻Tc=6(秒)まで、同じキュー831を選択し続ける。
フローシェーパ800は、フローIDごとのレートが維持されるように、パケットPを出力する時刻を決定し、決定した時刻に応じた期間Trのキュー830〜834にパケットPを入力する。例えば、フロー#1のレートは1(個/秒)であるため、フローシェーパ800は、フロー#1のパケットPを、各キュー830〜834に1(個)ずつ入力する。ここで、各キュー830〜834の時間幅は1(秒)であるため、1(秒)当たり1(個)のパケットPが出力され、フロー#1のレートが維持される。
フロー#2のレートは3(個/秒)であるため、フローシェーパ800は、フロー#2のパケットPを、各キュー830〜834に3(個)ずつ入力する。このため、1(秒)当たり3(個)のパケットPが出力され、フロー#2のレートが維持される。
フロー#3のレートは0.5(個/秒)であるため、フローシェーパ800は、フロー#3のパケットPを、1(個)おきのキュー830〜834に1(個)ずつ入力する。このため、2(秒)当たり1(個)のパケットPが出力され、フロー#3のレートが維持される。
このように、スケジューラ80は、キュー830〜834の前段において、フローIDごとのレートに応じ、パケットPを複数のキュー830〜834に分配する。このため、スケジューラ80は、出力型スケジューラに比べると、キュー830〜834間の読み出し処理の競合を回避し、高いスループットを実現する。
本例では、パケットの長さが一定である場合を例に挙げたが、可変長のパケットの場合、各キュー830〜834の容量は、Byte単位で管理される。この場合、スケジューラ80は、メモリなどの記憶部81に記憶されたフロー情報81a、及びキュー管理部82が保持する管理情報を参照して、パケットPをキュー830〜834に分配する。
フロー情報81aは、シェーピング粒度の向上と可変長パケットに対応するように、例えば、キュー830〜834の容量(Byte)、次にパケットPを入力するキュー830〜834、及び、次のキュー830〜834の空き容量(Byte)などを示す。キュー管理部82は、キュー830〜834の空き状態を、管理情報として管理する。
スケジューラ80は、到着したパケットPからフローID及びパケット長などの情報を取得し、フロー情報81aや管理情報に基づいて、パケットPを入力するキュー830〜834を決定する。スケジューラ80は、決定したキュー830〜834にパケットPを入力すると、フロー情報81aや管理情報を更新する。
また、キュー830〜834のパケットPの蓄積量は、上限値(Byte)により管理される。スケジューラ80は、キュー830〜834に格納されたパケットPのデータ量(Byte)の合計が、上限値を上回った場合、当該キューへのパケットPの入力を停止する。なお、期間Trごとに出力されるパケットPの総量は、各キュー830〜834の上限値及び読み出し時間の柔軟な調整により平滑化される。
(第2比較例)
第1比較例において、パケットPは、単一の出力ポート85から出力されるが、複数の出力ポートから出力されてもよい。この場合、パケットPは、複数の出力ポートのうち、宛先に応じた出力ポートから出力される。
図5は、第2比較例の出力処理部913の機能構成を示す構成図である。図5において、図4と共通する構成については、同一の符号を付し、その説明を省略する。
出力処理部913は、スケジューラ80aと、記憶部81と、キュー管理部82と、複数のキュー830a〜833aと、セレクタ84とを有する。本例において、パケットPは、光送受信器910に対応する10(個)の出力ポート851〜853から出力される。また、分配部87は、PHY/MAC部911に対応し、キュー830a〜833aから読み出されたパケットPを出力ポート851〜853に分配する。
また、図5において、符号Pは、10(個)のパケットを示す。各パケットP内の番号(「#1」〜「#10」)は、当該パケットPが出力される出力ポート851〜853を示す。例えば、番号が「#1」のパケットPは、出力ポート(#1)851から出力される。
スケジューラ80aは、フローシェーパ800a及びポートシェーパ801aを有する。フローシェーパ800aは、第1比較例と同様に、フローIDごとのレートに基づいて、パケットPを複数のキュー830a〜833aに分配する。
ポートシェーパ801aは、パケットPを、出力ポート851〜853の各出力レートに基づいて、複数のキュー830〜834に分配する。ポートシェーパ801aは、出力ポート851〜853の各出力レートが、例えば10(個/秒)である場合、各キュー830a〜833aに、各出力ポート851〜853から出力されるパケットPを10(個)ずつ分配する。
キュー830a〜833aは、第1比較例と同様に、割り当てられた期間Tr内にパケットPが読み出される。本例では、期間Tr=0〜1(秒),1〜2(秒),・・・,49〜50(秒)にそれぞれ対応する50(個)のキュー830a〜833aが、設けられている。例えば、期間Tr=0〜1(秒)であるキュー830aに格納されたパケットPは、時刻Tc=0〜1(秒)にセレクタ84により読み出される。また、期間Tr=1〜2(秒)であるキュー831aに格納されたパケットPは、時刻Tc=1〜2(秒)にセレクタ84により読み出される。
本例では、パケットPは、10(個/秒)の出力レートを有する10(個)の出力ポート851〜853に分けられて出力される。このため、セレクタ84は、100(個/秒)(=出力ポート数10×10(個/秒))の読み出しレートを有する。
また、キュー830a〜833aの容量は、各キューの時間幅は1(秒)であるので、セレクタ84の読み出しレートに基づいて、100(個)となる。つまり、各キュー830a〜833aは、各期間Tr内に読み出し可能な量のパケットPを格納するので、セレクタ84の読み出しレートに基づき、最大で100(個)のパケットPを格納する。
各キュー830a〜833aは、ポートシェーパ801aにより、各出力ポート(#1〜#10)851〜853から出力されるパケット(#1〜#10)Pが最大で10(個)ずつ格納される。このため、キュー830a〜833aに格納されたパケットPが最大量である場合、セレクタ84から出力される1(秒)単位のデータXaには、各出力ポート(#1〜#10)851〜853から出力されるパケット(#1〜#10)Pが10個ずつ含まれる。
各出力ポート851〜853は、送信先の他装置(図示せず)のバックプレッシャー制御に従って、セレクタ84にパケットPの読み出し停止制御を行う。例えば、イーサネットの場合、各出力ポート851〜853は、送信先の他装置からポーズフレームを受信したとき、セレクタ84にポーズ制御を行う。
例えば、出力ポート(#1)851は、ポーズフレームを受信したとき、パケットPの読み出しの停止を指示する停止指示信号Spをセレクタ84に出力する。ここで、各キュー830a〜833aは、出力ポート(#1)851から出力されるパケット(#1)Pだけでなく、他の出力ポート(#2〜#10)852,853から出力されるパケット(#1〜#10)Pも格納する。
このため、セレクタ84は、出力ポート(#1)851から出力されるパケット(#1)Pの読み出しを停止するために、全てのキュー830a〜833aからの読み出し処理を停止する(×印参照)。したがって、各出力ポート851〜853の送信先となる全ての他装置が、パケットPを受け取ることが不可能な状態となる。なお、この問題は、「Head of Line Blocking」などと呼ばれる。
(第3比較例)
上記の問題を解決するため、第2比較例のキュー830a〜833aを、出力ポート851〜853ごとに分割してもよい。この構成によると、停止指示信号Spを出力した出力ポート851〜853に対応するキューだけを読み出し停止とすることができる。
図6は、第3比較例の出力処理部913の機能構成を示す構成図である。図6において、図5と共通する構成については、同一の符号を付し、その説明を省略する。なお、本例において、符号Pは、10(個)のパケットを示し、パケットP内の番号(「#1」〜「#10」)は、出力ポート(#1〜#10)851〜853に対応する。
出力処理部913は、スケジューラ80bと、記憶部81と、キュー管理部82と、複数のキュー830b〜835bと、セレクタ84bとを有する。本例において、複数のキュー830b〜835bは、パケットPを、同一の出力ポート851〜853から出力されるパケットごとに分けて格納する。すなわち、複数のキュー830b〜835bは、複数の出力ポート851〜853に対応して設けられる。なお、キュー830b〜835bの容量は、10(個)のパケット分となる。
このため、同一の期間Trに出力されるパケットPは、10(個)のキュー830b〜832b,833b〜835bに分かれて格納される。例えば、期間Tr=0〜1(秒)において、出力ポート(#1)851から出力されるパケットPは、キュー830bに格納され、出力ポート(#2)852から出力されるパケットPは、キュー831bに格納される。また、期間Tr=49〜50(秒)において、出力ポート(#1)851から出力されるパケットPは、キュー833bに格納され、出力ポート(#2)852から出力されるパケットPは、キュー834bに格納される。
このようなキュー構成のため、セレクタ84bは、各期間Tr内、つまり時間幅である1(秒)内に、10(個)のキュー830b〜832b,833b〜835bからパケットPを読み出す。つまり、厳密には、各キュー830b〜835bの時間幅は、0.1(秒)(時間幅1(秒)÷10(個))である。したがって、セレクタ84bは、0.1(秒)ごとに、パケットPを読み出すキュー830b〜835bを切り替える。
このため、キュー830b〜835bに格納されたパケットPが最大量である場合、セレクタ84から出力される1(秒)単位のデータXbには、各出力ポート851〜853から出力されるパケット(#1〜#10)Pが10個ずつ含まれる。つまり、各出力ポート851〜853は、1(秒)当たり10(個)のパケットPが入力されるため、第2比較例と同様の低いバースト性が実現される。
また、スケジューラ80bは、キュー830b〜835bが、出力ポート851〜853ごとに分割されているため、ポートシェーパを有していない。スケジューラ80bは、第2比較例と同様のフローシェーパ800bを有する。
セレクタ84bは、例えば出力ポート(#1)851から停止指示信号Spが入力されると、複数のキュー830b〜835bのうち、出力ポート(#1)851に対応するキュー830b,833bの読み出し処理だけを停止する。つまり、他の出力ポート(#2〜#10)852,853に対応するキュー831b,832b,834b,835bからのパケットPの読み出し処理は、停止されないので、上記の問題は解決される。
しかし、本例では、キュー830b〜835bが、出力ポート851〜853ごとに分割されているため、キュー数が第2比較例より多い。つまり、本例では、期間Tr=0〜1(秒)、1〜2(秒)、・・・、49〜50(秒)の各々について、10(個)の出力ポート851〜853と同数のキューを設けたため、キュー数は、500(個)(=出力ポート数10×50(個))となる。したがって、キューを管理するハードウェアが大規模化かつ複雑化し、コスト増加やスループット低下の問題が生ずる。
(第4比較例)
そこで、同一の出力ポート851〜853に対応し、期間Trが異なる複数のキューを、1(個)のキューに束ねることにより、キュー数を削減してもよい。本例では、第3比較例における10秒内の期間Tr(例えば0〜1(秒),1〜2(秒),・・・,9〜10(秒))の10(個)のキュー830b〜835bを1(個)のキューに束ねる。これにより、キュー数は、第2比較例と同じ50(個)(=500(個)÷10)となる。
図7は、第4比較例の出力処理部913の機能構成を示す構成図である。図7において、図5と共通する構成については、同一の符号を付し、その説明を省略する。なお、本例において、符号Pは、10(個)のパケットを示し、パケットP内の番号(「#1」〜「#10」)は、出力ポート(#1〜#10)851〜853に対応する。
出力処理部913は、スケジューラ80cと、記憶部81と、キュー管理部82と、複数のキュー830c〜835cと、セレクタ84cとを有する。
複数のキュー830c〜835cは、第3比較例と同様に、パケットPを、同一の出力ポート851〜853から出力されるパケットごとに分けて格納する。すなわち、複数のキュー830c〜835cは、複数の出力ポート851〜853に対応して設けられる。例えば、キュー830c,833cは、出力ポート(#1)851から出力されるパケットPが格納され、キュー831c,834cは、出力ポート(#2)852から出力されるパケットPが格納される。このため、「Head of Line Blocking」の問題は、生じない。
また、各キュー830c〜835cの期間Trの時間幅は、第3比較例の10倍、つまり第2比較例と同じ1(秒)である。このため、セレクタ84cは、1(秒)ごとに、パケットPが読み出されるキュー830c〜835cを切り替える。
複数のキュー830c〜835cは、それぞれ、時間幅が第3比較例の10倍であるので、容量も第3比較例の10倍となる。このため、複数のキュー830c〜835cは、それぞれ、最大で、第3比較例における10(秒)分の送出量のパケットPを格納する。言い換えれば、複数のキュー830c〜835cは、第2比較例における各キュー830a〜833aに格納されたパケットPを、出力先の出力ポート851〜853が統一されるように並び替えたものに等しい。
このキュー構成より、キュー数は、第3比較例の10分の1、つまり第2比較例と同数の50(個)となる。
また、スケジューラ80cは、キュー830c〜835cが、出力ポート851〜853ごとに分割されているため、第3比較例と同様に、ポートシェーパを有していない。スケジューラ80cは、フローシェーパ800cを有する。フローシェーパ800cは、各キュー830c〜835cの期間Trの時間幅が第3比較例の10倍であるため、各フロー#1〜#10のレートも第3比較例の10倍になる。
一方、セレクタ84cは、各キュー830c〜835cから、時間幅である1(秒)内にパケットPを読み出す。このため、キュー830c〜835cに格納されたパケットPが最大量(100(個))である場合、セレクタ84から出力される1(秒)単位のデータXcには、同一の出力ポート851〜853(図7では#1)から出力されるパケットPが100(個)ずつ含まれる。
したがって、各出力ポート851〜853は、1(秒)当たり、最大で100(個)のパケットPが入力される。このため、バースト性は、第2比較例及び第3比較例の10倍に増加する。
このように、パケットPの読み出しレート(100(個/秒))が、出力ポート851〜853の出力レート(10(個/秒))を超えると、読み出し停止制御が多発して読み出し待機時間が増加し、またはパケットロスが生ずることで、通信品質が低下する。これを回避するため、例えば、各出力ポート851〜853に、バースト性を緩衝するバッファを設けることもできるが、ハードウェアの規模が増加するため、コストの観点から好ましくない。
(キューの単純巡回性)
また、第2比較例の構成を例に挙げて、キューの単純巡回性の問題について説明する。本明細書において、キューの単純巡回性とは、セレクタ84bが、一定時間ごとに、所定の順序で、パケットPが読み出されるキュー830b〜835bを切り替えることを繰り返す動作を指す。つまり、キューの単純巡回性とは、一定の規則に従ってキュー830b〜835bを巡回する動作である。
図8は、キューの単純巡回性の問題を説明するための構成図である。図8において、図6と共通する構成については、同一の符号を付し、その説明を省略する。キュー836b,837bは、期間Tr=1〜2(秒)に出力ポート(#1、#2)850,851から出力されるパケットPをそれぞれ格納する。
図8において、キュー830b〜837bの近傍に付された数字(丸で囲まれた「1」〜「500」を参照)は、セレクタ84bによるキュー830b〜837bの選択順序を示す。セレクタ84bは、期間Trごとに、出力ポート851〜853の番号(#1〜#10)の昇順に従って、キュー830b〜837bを選択する。この選択順序は一定であるため、セレクタ84bは、キューの単純巡回性を維持している。
ここで、出力ポート(#1)851からポーズ制御が行われ、出力ポート(#1)851から出力されるパケットPを格納する、期間Tr=0〜1(秒)のキュー830bが、1秒間だけ読み出し処理が停止された後、ポーズ制御が解除されたとする。この場合、セレクタ84bは、読み出し処理が停止されたキュー830bを除く、期間Tr=0〜1(秒)の各キュー831b,832bを選択した後、当該キュー830bを選択し、その後、期間Tr=1〜2(秒)のキュー837bを選択する(符号F参照)。つまり、セレクタ84bは、時刻Tc=1〜2(秒)のとき、出力ポート(#1)851についてだけ、時刻Tcに応じた期間Tr=1〜2(秒)のキュー836bではなく、過去の期間Tr=0〜1(秒)のキュー830bを選択する。
したがって、この場合、キューの単純巡回性の選択順序(「1」、「2」、・・・、「10」、「11」、「12」、・・・)が遵守されず、異なった選択順序(「2」、・・・、「10」、「1」、「12」、・・・)でキュー830b〜837bが選択される。つまり、ポーズ制御が解除された場合、パケットPが未読出のキュー830bを選択することで、キューの単純巡回性が崩れてしまう。
このような選択処理は、セレクタ84bの構成を複雑化するため、やはり、ハードウェアの規模が増加する。
また、ポーズ制御に伴って生ずる問題は、キューの単純巡回性だけではない。符号Bで示されたグラフは、時刻に対する出力ポート(#1)851の出力帯域を示す。時刻t1において、ポーズ制御が行われ、時刻t2においてポーズ制御が解除された場合、解除されるまでの期間Δt(=t2−t1)において、パケットPが出力されないため、空き帯域が生ずるという問題がある。
(第1実施例)
実施例に係る通信装置は、2つのセレクタを用いることにより、1つのキューに格納されたパケットを複数回に分けて読み出すことで、第3比較例において問題となったバースト性を低減し、通信品質を向上する。
図9は、実施例の出力処理部913の機能構成を示す構成図である。図9において、図7と共通する構成については、同一の符号を付し、その説明を省略する。なお、本例において、符号Pは、10(個)のパケットを示し、パケットP内の番号(「#1」〜「#10」)は、出力ポート(#1〜#10)851〜853に対応する。
出力処理部913は、スケジューラ80cと、記憶部81と、キュー管理部82と、複数のキュー30,31,34,40,41,44,50,51,54と、複数の第1セレクタ11〜13と、第2セレクタ2とを有する。出力処理部913は、複数の第1タイマ61〜63と、第2タイマ7とを、さらに有する。
複数のキュー30,31,34,40,41,44,50,51,54は、パケットPを、複数の出力ポート851〜853のうち、同一の出力ポートから同一の期間Tr内に出力されるパケットごとに分けて格納する。複数のキュー30,31,34,40,41,44,50,51,54は、それぞれ、時間幅が、第3比較例と同じ10(秒)であり、最大で100(個)のパケットPを格納可能な容量を有する。
例えば、キュー30は、出力ポート(#1)851から期間Tr=0〜10(秒)内に出力されるパケットPを格納し、キュー31は、出力ポート(#1)851から期間Tr=10〜20(秒)内に出力されるパケットPを格納する。また、キュー34は、出力ポート(#1)851から期間Tr=40〜50(秒)内に出力されるパケットPを格納する。つまり、出力ポート(#1)851から出力されるパケットPは、各期間Tr=0〜10(秒)、10〜20(秒)、・・・、40〜50(秒)に対応する5(個)のキュー30,31,34に分けられて格納される。
キュー40は、出力ポート(#2)852から期間Tr=0〜10(秒)内に出力されるパケットPを格納し、キュー41は、出力ポート(#2)852から期間Tr=10〜20(秒)内に出力されるパケットPを格納する。また、キュー44は、出力ポート(#2)852から期間Tr=40〜50(秒)内に出力されるパケットPを格納する。つまり、出力ポート(#2)852から出力されるパケットPは、各期間Tr=0〜10(秒)、10〜20(秒)、・・・、40〜50(秒)に対応する5(個)のキュー40,41,44に分けられて格納される。
キュー50は、出力ポート(#10)853から期間Tr=0〜10(秒)内に出力されるパケットPを格納し、キュー51は、出力ポート(#10)853から期間Tr=10〜20(秒)内に出力されるパケットPを格納する。また、キュー54は、出力ポート(#10)853から期間Tr=40〜50(秒)内に出力されるパケットPを格納する。つまり、出力ポート(#10)853から出力されるパケットPは、各期間Tr=0〜10(秒)、10〜20(秒)、・・・、40〜50(秒)に対応する5(個)のキュー50,51,54に分けられて格納される。したがって、キュー数は、第4比較例と同じ50(個)(=10(出力ポート数)×5(個))に抑えられる。
なお、図9において、期間Tr=20〜30(秒)、30〜40(秒)に対応する2(個)のキューの図示は省略する。また、10(個)の出力ポート(#1〜#10)のうち、他の出力ポート(#3〜#9)から出力されるパケットを格納するキューの図示も省略する。
複数の第1セレクタ(#1〜#10)11〜13は、複数の出力ポート(#1〜#10)851〜853のそれぞれに対応して設けられている。各第1セレクタ11〜13は、複数の出力ポート851〜853のうち、当該出力ポートから出力されるパケットPを格納するキュー30,31,34,40,41,44,50,51,54の1つを選択する。なお、図9において、10(個)の出力ポート(#1〜#10)のうち、他の出力ポート(#3〜#9)にそれぞれ対応する第1セレクタ(#3〜#9)の図示は省略する。
また、第1タイマ(#1〜#10)61〜63は、複数の第1セレクタ(#1〜#10)11〜13に時刻T1〜T10を通知する。第1セレクタ(#1〜#10)11〜13は、時刻T1〜T10に応じた期間Trのキュー30,31,34,40,41,44,50,51,54をそれぞれ選択する。つまり、第1セレクタ(#1〜#10)11〜13は、時刻T1〜T10に基づいて時間幅である10(秒)を計測する。
出力ポート(#1)851に対応する第1セレクタ(#1)11は、出力ポート(#1)851から出力されるパケットPを格納する10(個)のキュー30,31,34のうち、時刻T1に応じた期間Trのキューを選択する。第1セレクタ(#1)11は、例えば、時刻T1=0.5(秒)の場合、期間Tr=0〜1(秒)のキュー30を選択し、時刻T1=1.5(秒)の場合、期間Tr=1〜2(秒)のキュー31を選択する。
出力ポート(#2)852に対応する第1セレクタ(#2)12は、出力ポート(#2)852から出力されるパケットPを格納する10(個)のキュー40,41,44のうち、時刻T2に応じた期間Trのキューを選択する。第1セレクタ(#2)12は、例えば、時刻T2=0.5(秒)の場合、期間Tr=0〜1(秒)のキュー40を選択し、時刻T2=1.5(秒)の場合、期間Tr=1〜2(秒)のキュー41を選択する。
出力ポート(#10)853に対応する第1セレクタ(#10)13は、出力ポート(#10)853から出力されるパケットPを格納する10(個)のキュー50,51,54のうち、時刻T10に応じた期間Trのキューを選択する。第1セレクタ(#10)13は、例えば、時刻T10=0.5(秒)の場合、期間Tr=0〜1(秒)のキュー50を選択し、時刻T10=1.5(秒)の場合、期間Tr=1〜2(秒)のキュー51を選択する。
このように、第1セレクタ(#1〜#10)11〜13は、複数のキュー30,31,34,40,41,44,50,51,54のうち、当該出力ポート851〜853から出力されるパケットPが読み出されるキューを、期間Trが経過するたびに切り替える。つまり、第1セレクタ11〜13は、時間幅である10(秒)ごとに、パケットPが読み出されるキュー30,31,34,40,41,44,50,51,54を切り替える。したがって、各キュー30,31,34,40,41,44,50,51,54に格納されたパケットPは、当該期間Tr内に読み出される。
第2セレクタ2は、複数の出力ポート851〜853のパケットの出力レート(10(個/秒))に応じた時間間隔で、複数の第1セレクタ11〜13のうち、パケットPが出力される第1セレクタ11〜13を切り替える。つまり、第2セレクタ2は、第1セレクタ11〜13の選択により、パケットPを出力する出力ポート851〜853を選択する。
第2タイマ7は、時刻Tjを第2セレクタ2に通知する。第2セレクタ2は、時刻Tjに基づいて、上記の時間間隔を計測し、時間間隔をおいて第1セレクタ11〜13を切り替える。
本例において、各出力ポート851〜853の出力レートは、10(個/秒)であり、ポート数は10(個)であるため、第2セレクタ2は、100(個/秒)(=10(出力ポート数)×10(個/秒))のレートでパケットPを読み出す。このため、第2セレクタ2は、各出力ポート(#1〜#10)851〜853の出力レートが維持されるように、0.1(秒)(=10(個)÷100(個/秒))の時間間隔で第1セレクタ11〜13を切り替える。
したがって、キュー30〜54に格納されたパケットPが最大量である場合、第2セレクタ2から出力される1(秒)単位のデータXには、各出力ポート851〜853から出力されるパケット(#1〜#10)Pが10個ずつ含まれる。つまり、各出力ポート851〜853は、1(秒)当たり10(個)のパケットPが入力されるため、第2比較例と同様の低いバースト性が実現される。これにより、ポーズ制御の多発やパケットロスが抑制され、通信品質が向上する。
このように、第1セレクタ11〜13は、出力ポート851〜853ごとに期間Trに応じたキュー30〜54を選択し、第2セレクタ2は、第1セレクタ11〜13から単位時間内に出力されるパケット量を、出力ポート851〜853の出力レートに基づいて調整できる。したがって、本実施例によると、第4比較例と異なり、1つの出力ポート851〜853に、各出力ポート851〜853の出力レートを超えるパケットPが入力されることが防止される。
さらに、第1セレクタ11〜13を切り替える時間間隔は、キュー30〜54の期間Trの長さ、つまり時間幅によらずに決定される。このため、第4比較例と同様に、キュー30〜54の容量を増加させることにより時間幅を10(秒)に拡張し、ハードウェアの規模を縮小することができる。すなわち、本実施例によると、キュー数を、第4比較例と同数(50(個))とすることができる。
また、複数のキュー30,31,34,40,41,44,50,51,54は、パケットPを、複数の出力ポート851〜853のうち、同一の出力ポートから出力されるパケットごとに分けて格納する。各第1セレクタ11〜13は、出力ポート851〜853ごとに、パケットPが出力されるキュー30〜54を切り替える。このため、「Head of Line Blocking」の問題は、生じない。
例えば、第1セレクタ(#1)11は、出力ポート(#1)851から第2セレクタ2を介して停止指示信号Spを受けると、キュー30〜34の読み出し処理を停止する(×印参照)。一方、他の第1セレクタ(#2〜#10)12,13は、キュー40,41,44,50,51,54の読み出し処理を停止しない。したがって、出力ポート(#1)851から出力されるパケットPの送信だけが停止される。
また、各第1セレクタ(#1〜#10)11〜13は、出力ポート(#1〜#10)851〜853ごとに設けられ、個別の第1タイマ(#1〜#10)61〜63により、キュー30〜54を切り替える時間間隔を計測する。このため、各第1セレクタ(#1〜#10)11〜13は、ポーズ制御が行われても、キューの巡回動作を個別に行うことができる。したがって、本実施例によると、キューの単純巡回性が維持される。
例えば、第1セレクタ(#1〜#10)11〜13が、期間Tr=0〜10(秒)のキュー30,40,50をそれぞれ選択した状態において、第1セレクタ(#1)11が、停止指示信号Spを受けて、パケットPの読み出しを停止したとする。このとき、第1タイマ(#1)61は、時刻T1の計時を停止する。
読み出しの停止から10秒後にポーズ制御が解除されると、第1セレクタ(#1)11は、時刻T1に従って、期間Tr=0〜10(秒)のキュー30からのパケットPの読み出しを再開する。このとき、第1セレクタ(#2〜#10)12,13は、時刻T2〜T10に従って、期間Tr=10〜20(秒)のキュー30からパケットPを読み出している。
したがって、第1セレクタ(#1)11の読み出し停止動作は、他の第1セレクタ(#2〜#10)12,13の読み出し動作に影響を与えないので、キューの単純巡回性が維持される。また、このように、ポーズ制御が行われることにより、出力ポート(#1〜#10)851〜853の間において、パケットPが出力されるキュー30〜54の期間Trにずれが生ずる。しかし、出力ポート(#1〜#10)は、そもそも、互いに独立して動作するため、出力ポート(#1〜#10)851〜853の間におけるキューの期間Trのずれは問題とならない。
(第2実施例)
上述したように、各第1セレクタ(#1〜#10)11〜13は、出力ポート(#1〜#10)851〜853のポーズ制御(停止制御)にそれぞれ従ってパケットPの読み出しを停止する。このとき、ポーズ制御が解除するまでの間に空き帯域が生ずる。
図10は、ポーズ制御時の動作を示す構成図である。図10は、図9に示された構成のうち、出力ポート(#1)851に関する構成と、時刻に対する、出力ポート(#1)851から出力されるパケットPの様子を符号B1の吹き出し内に示す。なお、図10において、図9と共通する構成については、同一の符号を付し、その説明を省略する。
まず、第1セレクタ(#1)11は、期間Tr=0〜10(秒)のキュー30からパケットPを読み出して、第2セレクタ2を介し、出力ポート(#1)851から出力する。その後、時刻t1において、出力ポート(#1)がポーズ制御を実行し、第1セレクタ(#1)11は、読み出し処理を停止する。ポーズ制御は、7秒後の時刻t2において解除されるが、ポーズ制御の実行中、パケットPは出力されないので、時刻t1〜t2の間に空き帯域が生ずる。
次に、第1セレクタ(#1)11は、期間Tr=10〜20(秒)のキュー31を選択して、パケットPを読み出す。ここで、キュー31には、40(個)のパケットPが格納されているとする。
第1セレクタ(#1)11は、4秒後の時刻t3において、キュー31内の40(個)のパケットPの読み出しを完了する。しかし、第1セレクタ(#1)11は、キュー31が空であるにも関わらず(点線参照)、当該期間Tr内はキュー31の選択を維持する。つまり、第1セレクタ(#1)11は、キュー31が空になった後の6秒後の時刻t4まで、キュー31を選択し続ける。このため、時刻t3〜t4の間(6秒間)に空き帯域が生ずる。
本実施例では、ポーズ制御の解除後、空のキューの選択時間を、多くとも当該停止時間だけ短縮することにより、空きキューの空読み時間(時刻t2〜t3の間)を省き、ポーズ制御により生じた停止時間(時刻t1〜t2の間)を取り戻す。
図11は、第2実施例における空きキューの読み出し時間の短縮動作を示す構成図である。図11は、図9に示された構成のうち、出力ポート(#1)851に関する構成と、時刻に対する、出力ポート(#1)851から出力されるパケットPの様子を符号B2の吹き出し内に示す。なお、図11において、図10と共通する構成については、同一の符号を付し、その説明を省略する。
カウンタ(#1)11aは、第1セレクタ(#1)11がポーズ制御によりパケットPの読み出しを停止する停止時間Tpを計測して、第1セレクタ(#1)11に通知する。カウンタ(#1)11aは、第1セレクタ(#1)11の指示に従って計測の開始及び停止を行う。なお、図11において、他の第1セレクタ(#2〜#10)12,13に対応するカウンタ(#2〜#10)は、図示が省略されているが、カウンタ(#1)11aと同様の動作を行う。
符号B2に示されるように、第1セレクタ(#1)11は、期間Tr=0〜10(秒)のキュー30からパケットPを読み出して、第2セレクタ2を介し、出力ポート(#1)851から出力する。その後、時刻t1において、出力ポート(#1)がポーズ制御を実行し、第1セレクタ(#1)11は、読み出し処理を停止し、カウンタ(#1)11aに停止時間Tpの計測の開始を指示する。
ポーズ制御は、開始から7秒後の時刻t2に解除される(つまり、停止時間Tp=7(秒))。第1セレクタ(#1)11は、ポーズ制御の解除を通知する通知信号を、出力ポート(#1)851から受けると、カウンタ(#1)11aに停止時間Tpの計測の停止を指示する。このとき、カウンタ(#1)11aは、第1セレクタ(#1)11に、カウンタ値N=7(秒)を示す。
次に、第1セレクタ(#1)11は、期間Tr=10〜20(秒)のキュー31を選択し、パケットPを読み出す。ここで、キュー31に40(個)のパケットPしか格納されていない場合、読み出しの開始(時刻t2)から4秒後の時刻t3において、キュー31は空になる。
時刻t3において、期間Trの残りは、6(秒)(=時間幅10(秒)―4(秒))であり、カウンタ値N=7(秒)より少ない。このため、第1セレクタ(#1)11は、空になったキュー31の読み出しをスキップして、次の期間Tr=20〜30(秒)のキュー32を選択する。つまり、第1セレクタ(#1)11は、キュー32の読み出し処理の開始を、6(秒)だけ早めることにより、期間Tr(時間幅10(秒))の経過前にキューを切り替える。
これにより、ポーズ制御による停止時間Tp(時刻t2〜t3の間)のうち、6(秒)だけが取り戻される。第1セレクタ(#1)11は、キュー31をスキップした後、カウンタ(#1)11aに、カウンタ値N=7(秒)から当該短縮時間の6(秒)を減算するように指示する。このため、時刻t3において、カウンタ値N=1(秒)(=7(秒)−6(秒))となる。
このため、次の期間Tr=20〜30(秒)のキュー32も40(個)のパケットPしか格納されていない場合、キュー32が空になった後、カウンタ値N(=1(秒))分の時間が取り戻される。より具体的には、キュー32は、読み出しの開始(時刻t3)から4秒後に空になり、その後、第1セレクタ(#1)11は、5秒間だけキュー32を空読みし、時刻t4において、次の期間Tr=30〜40(秒)のキュー(図示せず)を選択する。つまり、第1セレクタ(#1)11は、キュー32の読み出し処理の開始を、1(秒)だけ早めることにより、期間Tr(時間幅10(秒))の経過前にキューを切り替える。
これにより、カウンタ値N=0(秒)(=1(秒)−1(秒))となるため、第1セレクタ(#1)11は、再度ポーズ制御が行われない限り、時刻t4以降、空のキュー31,32の選択時間の短縮を行わない。
このように、第1セレクタ(#1)11は、ポーズ制御の解除後、1以上の空のキューの選択時間を、多くとも当該停止時間Tpだけ短縮する。言い換えると、1以上の空のキュー32,32は、当該期間Trのうち、多くとも停止時間Tp分の読み出し処理がスキップされる。したがって、第1セレクタ(#1)11の巡回動作が早まり、ポーズ制御により生じた停止時間Tp(時刻t1〜t2の間)が取り戻される。
本実施例では、ポーズ制御による停止時間Tpが長いほど、多くの読み出し時間が短縮されるため、出力ポート851〜853から出力されるパケットPの間隔が狭くなり、バースト性が高まる。そこで、カウンタ値Nに、停止時間Tpより小さい上限値(第1上限値)を設け、1以上の空のキュー31,32の選択時間の各短縮時間の合計を制限することにより、バースト性の増加を抑制してもよい。
図12は、短縮時間に上限を設けた場合の空きキューの読み出し時間の短縮動作を示す構成図である。図12は、図9に示された構成のうち、出力ポート(#1)851に関する構成と、時刻に対する、出力ポート(#1)851から出力されるパケットPの様子を符号B3の吹き出し内に示す。なお、図12において、図11と共通する構成については、同一の符号を付し、その説明を省略する。
本例において、カウンタ値Nは、上限値Nmaxにより制限される。上限値Nmaxは、カウンタ(#1)11a及び第1セレクタ(#1)11の何れに、レジスタとして設定される。上限値Nmaxの設定値は、一例として5(秒)とするが、その設定値に制限はない。もっとも、上限値Nmax=0(秒)に設定した場合、空のキューの読み出し時間の短縮が行われないため、図10の例と同様のバースト性が保たれる。
符号B3に示されるように、第1セレクタ(#1)11は、期間Tr=0〜10(秒)のキュー30からパケットPを読み出して、第2セレクタ2を介し、出力ポート(#1)851から出力する。その後、時刻t1において、出力ポート(#1)がポーズ制御を実行し、第1セレクタ(#1)11は、読み出し処理を停止し、カウンタ(#1)11aに停止時間Tpの計測の開始を指示する。
ポーズ制御は、開始から7秒後の時刻t2に解除される(つまり、停止時間Tp=7(秒))。第1セレクタ(#1)11は、ポーズ制御の解除を通知する通知信号を、出力ポート(#1)851から受けると、カウンタ(#1)11aに停止時間Tpの計測の停止を指示する。このとき、カウンタ(#1)11aは、停止時間Tp=7(秒)が上限値Nmax=5(秒)を超えるため、カウンタ値N=5(秒)を示す。
次に、第1セレクタ(#1)11は、期間Tr=10〜20(秒)のキュー31を選択し、パケットPを読み出す。ここで、キュー31に40(個)のパケットPしか格納されていない場合、読み出しの開始(時刻t2)から4秒後にキュー31は空になる。
このとき、期間Trの残りは、6(秒)(=時間幅10(秒)―4(秒))であり、カウンタ値N=5(秒)より多い。このため、第1セレクタ(#1)11は、空になったキュー31の読み出しを1秒間(=6(秒)−5(秒))だけ行い、次の期間Tr=20〜30(秒)のキュー32を選択する。つまり、第1セレクタ(#1)11は、キュー32の読み出し処理の開始を、5(秒)だけ早めることにより、期間Tr(時間幅10(秒))の経過前、すなわちキュー31を選択して5秒後の時刻t3にキューを切り替える。
これにより、カウンタ値N=0(秒)(=残り時間5(秒)−短縮時間5(秒))となるため、第1セレクタ(#1)11は、再度ポーズ制御が行われない限り、時刻t3以降、空のキュー31,32の選択時間の短縮を行わない。
このように、1以上の空のキュー31,32の選択時間の各短縮時間の合計を、停止時間Tpより小さい上限値により制限することにより、取り戻す停止時間Tpを制限し、バースト性の増加を抑制できる。
上記の効果は、空のキュー31,32の選択時間の短縮を、キューごとに制限することによっても得られる。すなわち、1以上の空のキュー31,32の選択時間の各短縮時間は、期間Trより短い上限値(第2上限値)により制限されてもよい。
図13は、空きキューごとの短縮時間に上限を設けた場合の空きキューの読み出し時間の短縮動作を示す構成図である。図13は、図9に示された構成のうち、出力ポート(#1)851に関する構成と、時刻に対する、出力ポート(#1)851から出力されるパケットPの様子を符号B4の吹き出し内に示す。なお、図13において、図11と共通する構成については、同一の符号を付し、その説明を省略する。
本例において、空のキューの読み出しの短縮時間は、上限値Lmにより制限される。上限値Lmは、第1セレクタ(#1)11にレジスタとして設定される。上限値Lmの設定値は、一例として2(秒)とする。このため、第1セレクタ(#1)11は、空きキューを少なくとも8秒間(=時間間隔10(秒)−上限値2(秒))選択する。なお、上限値Lmの設定値に制限はなく、上限値Lm=0(秒)に設定した場合、空のキューの読み出し時間の短縮が行われないため、図10の例と同様のバースト性が保たれる。
符号B4に示されるように、第1セレクタ(#1)11は、期間Tr=0〜10(秒)のキュー30からパケットPを読み出して、第2セレクタ2を介し、出力ポート(#1)851から出力する。その後、時刻t1において、出力ポート(#1)がポーズ制御を実行し、第1セレクタ(#1)11は、読み出し処理を停止し、カウンタ(#1)11aに停止時間Tpの計測の開始を指示する。なお、本例において、カウンタ値Nの上限値Nmaxの設定はないものとする。
ポーズ制御は、開始から7秒後の時刻t2に解除される(つまり、停止時間Tp=7(秒))。第1セレクタ(#1)11は、ポーズ制御の解除を通知する通知信号を、出力ポート(#1)851から受けると、カウンタ(#1)11aに停止時間Tpの計測の停止を指示する。このとき、カウンタ(#1)11aは、カウンタ値N=7(秒)を示す。
次に、第1セレクタ(#1)11は、期間Tr=10〜20(秒)のキュー31を選択し、パケットPを読み出す。ここで、キュー31に40(個)のパケットPしか格納されていない場合、読み出しの開始(時刻t2)から4秒後にキュー31は空になる。
このとき、期間Trの残りは、6(秒)(=時間幅10(秒)―4(秒))であり、カウンタ値N=7(秒)より少ないが、読み出し処理の短縮時間は、上限値Lm=8(秒)に制限される。このため、第1セレクタ(#1)11は、空になったキュー31の読み出しを4秒間(=8(秒)−4(秒))だけ行い、次の期間Tr=20〜30(秒)のキュー32を選択する。つまり、第1セレクタ(#1)11は、キュー32の読み出し処理の開始を、2(秒)だけ早めることにより、期間Tr(時間幅10(秒))の経過前、すなわちキュー31を選択して8秒後の時刻t3にキューを切り替える。
これにより、カウンタ値N=5(秒)(=残り時間7(秒)−短縮時間2(秒))となるため、次の期間Tr=20〜30(秒)のキュー32も同様に、読み出し処理を2(秒)だけ短縮する。このとき、カウンタ値N=3(秒)(=残り時間5(秒)−短縮時間2(秒))となる。なお、空のキューの読み出し処理の短縮は、図示を省略するが、以降も同様に行われる。
このように、1以上の空のキュー31,32の選択時間の各短縮時間を、期間Trより短い上限値Lmにより制限することにより、読み出し処理の短縮に伴うバースト性の増加が抑制される。
次に、上記の上限値Nmax,Lmを用いた場合の第1セレクタ11〜13及び第2セレクタ2の動作を説明する。
図14は、第1セレクタ11〜13の動作を示すフローチャートである。なお、図14において、各第1タイマ61〜63が示す時刻T1〜10を「Ti」(i=1〜10)と表記する。
まず、第1セレクタ11〜13は、第1タイマ61〜63から時刻Tiを取得する(ステップSt1)。なお、各第1タイマ61〜63の時刻Tiは、同一でなくてもよい。
次に、第1セレクタ11〜13は、時刻TiがTi_max以上であるか否かを判定する(ステップSt2)。Ti_maxは、各キュー30〜54の選択時間の最大値であり、期間Trの時間幅(10(秒))に一致する。つまり、第1セレクタ11〜13は、選択中のキュー30〜54の期間Trが経過したか否かを判定する。
第1セレクタ11〜13は、時刻TiがTi_max以上ではない場合(ステップSt2のNo)、ステップSt17の処理を行う。後述するように、ステップSt17〜St20では、空のキュー30〜54の読み出し処理の短縮が行われる。
第1セレクタ11〜13は、時刻TiがTi_max以上である場合(ステップSt2のYes)、第1セレクタ11〜13は、出力ポート851〜853から出力されるパケットPが読み出されるキュー30〜54を切り替える(ステップSt3)。すなわち、第1セレクタ11〜13は、期間Trが経過するたびに、キュー30〜54を切り替える。次に、第1セレクタ11〜13は、例えば第1タイマ61〜63をリセットすることにより、時刻Ti=0とする(ステップSt4)。
次に、第1セレクタ11〜13は、ポーズ制御の有無を判定する(ステップSt5)。ポーズ制御の有無は、例えば停止指示信号Spの有無に基づいて判定される。なお、ステップSt5の判定処理は、ステップSt3の判定処理より先に行われてもよい。
第1セレクタ11〜13は、ポーズ制御が行われていない場合(ステップSt5のNo)、再びステップSt1の処理を行う。ポーズ制御が行われた場合(ステップSt5のYes)、第1セレクタ11〜13は、選択中のキュー30〜54からのパケットPの読み出しを停止する(ステップSt6)。
次に、第1セレクタ11〜13は、第1タイマ61〜63に時刻Tiの計時処理の停止を指示する(ステップSt7)。次に、第1セレクタ11〜13は、カウンタ11aを起動する(ステップSt8)。これにより、カウンタ11aは、停止時間Tpの計測を開始する。
次に、第1セレクタ11〜13は、カウンタ11aからカウンタ値Nを取得する(ステップSt9)。次に、第1セレクタ11〜13は、カウンタ値Nが上限値Nmaxであるか否かを判定する(ステップSt10)。
第1セレクタ11〜13は、カウンタ値Nが上限値Nmaxではない場合(ステップSt10のNo)、後述するステップSt12の処理を行う。カウンタ値Nが上限値Nmaxである場合(ステップSt10のYes)、第1セレクタ11〜13は、カウンタ11aを停止する(ステップSt11)。これにより、カウンタ11aは、停止時間Tpの計測を停止する。なお、本例では、上限値Nmaxが、第1セレクタ11〜13に設定されているものとするが、カウンタ11aに設定されてもよい。この場合、カウンタ11aが、自律的に停止時間Tpの計測を停止する。
次に、第1セレクタ11〜13は、ポーズ制御が解除されたか否かを判定する(ステップSt12)。ポーズ制御の解除有無の判定は、例えば、ポーズ制御の解除を示す指示信号に基づいて行われる。
第1セレクタ11〜13は、ポーズ制御が解除されていない場合(ステップSt12のNo)、再びステップSt9の処理を行う。第1セレクタ11〜13は、ポーズ制御が解除された場合(ステップSt12のYes)、カウンタ11aを停止する(ステップSt13)。これにより、カウンタ11aは、停止時間Tpの計測を停止する。なお、ステップSt11において、既にカウンタ11aが停止している場合、第1セレクタ11〜13は、ステップSt13の処理をスキップしてもよい。
次に、第1セレクタ11〜13は、選択中のキュー30〜54からのパケットPの読み出しを再開する(ステップSt14)。次に、第1セレクタ11〜13は、第1タイマ61〜63を再開させる(ステップSt15)。これにより、第1タイマ61〜63は、時刻Tiの計時を再開する。
次に、第1セレクタ11〜13は、通信装置の運用停止などの要因により動作を終了するか否かを判定する(ステップSt16)。第1セレクタ11〜13は、動作を終了する場合(ステップSt16のYes)、処理を終了し、動作を継続する場合(ステップSt16のNo)、再びステップSt1の処理を行う。
第1セレクタ11〜13は、時刻TiがTi_max以上ではない場合(ステップSt2のNo)、選択中のキュー30〜54が空であるか否かを判定する(ステップSt17)。ステップSt17の判定処理は、例えば、キュー管理部82から取得したキュー30〜54の管理情報、またはキュー30〜54から取得した空き容量値に基づいて行われる。第1セレクタ11〜13は、選択中のキュー30〜54が空ではない場合(ステップSt17のNo)、ステップSt5の処理を行う。
選択中のキュー30〜54が空である場合(ステップSt17のYes)、第1セレクタ11〜13は、時刻Tiが、時刻幅Ti_maxから、キュー30〜54ごとの短縮時間の上限値Lmを差し引いた値以上であるか否かを判定する(ステップSt18)。
これにより、第1セレクタ11〜13は、選択中のキュー30〜54の読み出し処理を短縮する場合、当該短縮時間が上限値Lm以下となるか否かを判定する。図13の例の場合、上限値Lm=2(秒)であるため、第1セレクタ11〜13は、時刻Tiが、8(秒)(=時刻幅10(秒)−上限値2(秒))以上であるか否かを判定する。
第1セレクタ11〜13は、時刻Tiが、時刻幅Ti_maxから上限値Lmを差し引いた値より小さい場合(ステップSt18のNo)、ステップSt5の処理を行う。時刻幅Ti_maxから上限値Lmを差し引いた値以上である場合(ステップSt18のYes)、第1セレクタ11〜13は、時刻Tiが、時刻幅Ti_maxからカウンタ値Nを差し引いた値以上であるか否かを判定する(ステップSt19)。
これにより、第1セレクタ11〜13は、選択中のキュー30〜54の読み出し処理を短縮する場合、当該短縮時間がカウンタ値N以下となるか否かを判定する。図11の例の場合、時刻t2の時点のカウンタ値N=5(秒)であるため、第1セレクタ11〜13は、キュー31を選択中、時刻Tiが、5(秒)(=時刻幅10(秒)−カウンタ値5(秒))以上であるか否かを判定する。
第1セレクタ11〜13は、時刻Tiが、時刻幅Ti_maxからカウンタ値Nを差し引いた値より小さい場合(ステップSt19のNo)、ステップSt5の処理を行う。時刻Tiが、時刻幅Ti_maxからカウンタ値Nを差し引いた値以上である場合(ステップSt19のYes)、第1セレクタ11〜13は、カウンタ値Nを、N−(Ti_max−Ti)に更新する(ステップSt20)。つまり、第1セレクタ11〜13は、カウンタ値Nから短縮時間(Ti_max−Ti)を差し引く。
次に、第1セレクタ11〜13は、再びステップSt3の処理を行う。つまり、第1セレクタ11〜13は、空のキュー30〜54の読み出し処理をスキップして、次の期間Trのキューに選択を切り替える。このようにして、第1セレクタ11〜13の動作は行われる。
図15は、第2セレクタ2の動作を示すフローチャートである。まず、第2セレクタ2は、第2タイマ7から時刻Tjを取得する(ステップSt31)。
次に、第2セレクタ2は、時刻Tjが、Tj_max以上であるか否かを判定する(ステップSt32)。Tj_maxは、出力ポート851〜853の出力レート(10(個/秒))に基づいて決定された時間間隔であり、図9の例の場合、0.2(秒)である。
第2セレクタ2は、時刻Tjが、Tj_max以上ではない場合(ステップSt32のNo)、後述するステップSt35の処理を行う。時刻Tjが、Tj_max以上である場合(ステップSt32のYes)、第2セレクタ2は、パケットが出力される第1セレクタ11〜13を切り替える(ステップSt33)。これにより、第1セレクタ11〜13は、0.2(秒)の時間間隔で切り替えられる。次に、第2セレクタ2は、例えば第2タイマ7をリセットすることにより、時刻Tj=0とする(ステップSt34)。
次に、第2セレクタ2は、通信装置の運用停止などの要因により動作を終了するか否かを判定する(ステップSt35)。第2セレクタ2は、動作を終了する場合(ステップSt35のYes)、処理を終了し、動作を継続する場合(ステップSt35のNo)、再びステップSt31の処理を行う。このようにして、第2セレクタ2の動作は、行われる。
これまで述べたように、実施例に係る通信装置は、複数の出力ポート851〜853と、複数のキュー30〜54と、複数の第1セレクタ11〜13と、第2セレクタ2とを有する。複数のキュー30〜54は、パケットPを、複数の出力ポート851〜853のうち、同一の出力ポートから同一の期間Tr内に出力されるパケットごとに分けて格納する。
複数の第1セレクタ11〜13は、複数の出力ポート851〜853のそれぞれに対応し、複数のキュー30〜54のうち、当該出力ポートから出力されるパケットPが読み出されるキューを、期間Trが経過するたびに切り替える。第2セレクタ2は、複数の出力ポート851〜853のパケットPの出力レートに応じた時間間隔で、複数の第1セレクタ11〜13のうち、パケットが出力される第1セレクタを切り替える。
複数のキュー30,31,34,40,41,44,50,51,54は、パケットPを、複数の出力ポート851〜853のうち、同一の出力ポートから出力されるパケットごとに分けて格納する。各第1セレクタ11〜13は、出力ポート851〜853ごとに、パケットPが出力されるキュー30〜54を切り替える。
したがって、読み出し停止制御(ポーズ制御)が行われても、複数の第1セレクタ11〜13のうち、制御対象となる第1セレクタだけが、パケットPの読み出しを停止することにより、他の出力ポート851〜853から出力されるパケットPへの影響が回避される。
また、第1セレクタ11〜13は、対応する出力ポート851〜853から出力されるパケットPが読み出されるキュー30〜54を、期間Trが経過するたびに切り替える。第2セレクタ2は、複数の出力ポート851〜853のパケットPの出力レートに応じた時間間隔で、パケットPが出力される第1セレクタ11〜13を切り替える。
このため、第2セレクタ2は、第1セレクタ11〜13から単位時間内に出力されるパケット量を、出力ポート851〜853の出力レートに基づいて調整できる。したがって、本実施例によると、1つの出力ポート851〜853に、各出力ポート851〜853の出力レートを超えるパケットPが入力されることが防止され低いバースト性が実現される。よって、読み出し停止制御の多発やパケットロスが抑制され、通信品質が向上する。
さらに、第1セレクタ11〜13を切り替える時間間隔は、キュー30〜54の期間Trの長さ、つまり時間幅によらずに決定される。このため、キュー30〜54の容量を増加させることにより時間幅を拡張し、ハードウェアの規模を縮小することができる。
また、実施例に係る通信方法は、以下の工程を有する。
工程(1):パケットPを、複数の出力ポート851〜853のうち、同一の出力ポートから同一の期間Tr内に出力されるパケットごとに分けて複数のキュー30〜54にそれぞれ格納する。
工程(2):複数の出力ポート851〜853のそれぞれに対応する複数の第1セレクタ11〜13により、複数のキュー30〜54のうち、当該出力ポートから出力されるパケットPが読み出されるキューを、期間Trが経過するたびに切り替える。
工程(3):第2セレクタ2により、複数の出力ポート850〜853のパケットPの出力レートに応じた時間間隔で、複数の第1セレクタ11〜13のうち、パケットPが出力される第1セレクタを切り替える。
実施例に係る通信方法は、上記の通信装置と同様の構成を有するので、上述した内容と同様の作用効果を奏する。
以上、好ましい実施例を参照して本発明の内容を具体的に説明したが、本発明の基本的技術思想及び教示に基づいて、当業者であれば、種々の変形態様を採り得ることは自明である。
なお、以上の説明に関して更に以下の付記を開示する。
(付記1) 複数の出力ポートと、
パケットを、前記複数の出力ポートのうち、同一の出力ポートから同一の期間内に出力されるパケットごとに分けて格納する複数のキューと、
前記複数の出力ポートのそれぞれに対応し、前記複数のキューのうち、当該出力ポートから出力されるパケットが読み出されるキューを、前記期間が経過するたびに切り替える複数の第1セレクタと、
前記複数の出力ポートのパケットの出力レートに応じた時間間隔で、前記複数の第1セレクタのうち、パケットが出力される第1セレクタを切り替える第2セレクタとを有することを特徴とする通信装置。
(付記2) 前記複数の第1セレクタは、前記複数の出力ポートの停止制御にそれぞれ従ってパケットの読み出しを停止し、前記停止制御の解除後、前記複数のキューのうち、1以上の空のキューの選択時間を、多くとも当該停止時間だけ短縮することを特徴とする付記1に記載の通信装置。
(付記3) 前記1以上の空のキューの選択時間の各短縮時間の合計は、前記停止時間より小さい第1上限値により制限されることを特徴とする付記2に記載の通信装置。
(付記4) 前記1以上の空のキューの選択時間の各短縮時間は、前記期間より短い第2上限値により制限されることを特徴とする付記2または3に記載の通信装置。
(付記5) パケットを、複数の出力ポートのうち、同一の出力ポートから同一の期間内に出力されるパケットごとに分けて複数のキューにそれぞれ格納し、
前記複数の出力ポートのそれぞれに対応する複数の第1セレクタにより、前記複数のキューのうち、当該出力ポートから出力されるパケットが読み出されるキューを、前記期間が経過するたびに切り替え、
第2セレクタにより、前記複数の出力ポートのパケットの出力レートに応じた時間間隔で、前記複数の第1セレクタのうち、パケットが出力される第1セレクタを切り替えることを特徴とする通信方法。
(付記6) 前記複数の第1セレクタは、前記複数の出力ポートの停止制御にそれぞれ従ってパケットの読み出しを停止し、前記停止制御の解除後、前記複数のキューのうち、1以上の空のキューの選択時間を、多くとも当該停止時間だけ短縮することを特徴とする付記5に記載の通信方法。
(付記7) 前記1以上の空のキューの選択時間の各短縮時間の合計は、前記停止時間より小さい第1上限値により制限されることを特徴とする付記6に記載の通信方法。
(付記8) 前記1以上の空のキューの選択時間の各短縮時間は、前記期間より短い第2上限値により制限されることを特徴とする付記5または6に記載の通信方法。