図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は、クラス判定部80と、ポリサー81と、分配部82と、複数の入力キュー83と、出力部84とを有する。
クラス判定部80は、パケットごとの通信品質(QoS:Quality of Service)のクラスを判定し、クラスに応じたフローIDを、例えば装置内ヘッダに含めてパケットに付与する。クラス判定部80は、例えば、パケットのヘッダに含まれる宛先(DA:Destination Address)、またはVLAN(Virtual Local Area Network) IDに基づいてクラスを判定する。
ポリサー81は、入力されるパケットのトラフィック量が所定の帯域を超えないように、所定帯域を超える分のパケットを廃棄する。分配部82は、パケットを、宛先となるネットワークインターフェースカード91に応じて、複数の入力キュー83に分配する。つまり、入力キュー83は、ネットワークインターフェースカード91ごとに設けられている。複数の入力キュー83は、パケットを、出力部84により読み出されるまで蓄積する。出力部84は、複数の入力キュー83から1つを選択して、選択した入力キュー83からパケットを読み出して、スイッチカード92のスイッチ部920に出力する。スイッチ部920は、入力されたパケットを宛先に応じたネットワークインターフェースカード91の出力処理部913に出力する。
(第1比較例)
まず、バーストスケジューリング方式の比較例について説明する。バーストスケジューリング方式では、スケジューリング機能が、パケットの読み出し機能から独立して設けられ、読み出し可能なパケットのデータ量を示す読出許容量を、キューごとに与える。なお、この読出許容量を、以降の説明において「クレジット」と表記する。
図4は、第1比較例の出力処理部913の機能構成を示す構成図である。出力処理部913は、キュー管理部5及びスケジューラ部6を有する。キュー管理部5は、分配部50と、複数のキュー511〜513と、クレジットカウンタ部52と、読出調停手段4とを有し、クレジットを消費して複数のキュー511〜513からパケットを読み出す。スケジューラ部6は、蓄積量カウンタ部60と、クレジット払出部61と、複数のクレジットシェーパ62とを有し、クレジットをキュー管理部5に払い出す。
分配部50は、入力されたパケットを、フローIDに基づいて、複数のキュー511〜513に分配する。複数のキュー511〜513は、それぞれ、1以上のパケットを蓄積する。また、分配部50は、入力されたパケットのフローID及びパケット長をスケジューラ部6に通知する。
蓄積量カウンタ部60は、分配部50からの通知及びキューに与えたクレジット量に基づいて、フローIDごとのパケットのデータ量を仮想的に計数する。図4の例では、フロー#1に対応するキュー511に5800(Byte)のデータが蓄積され、フロー#2に対応するキュー512に3986(Byte)のデータが蓄積され、フロー#Nに対応するキュー513に128(Byte)のデータが蓄積されている。なお、以降の説明において、蓄積量カウンタ部60が計数したデータ量を、「蓄積量カウンタ」と表記する。
クレジットシェーパ62は、フロー#1〜#Nごとに設けられ、該フローのキュー511〜513にクレジットを与える間隔を調整する。クレジットシェーパ62は、例えば、送信権として扱われるトークンを貯めるトークンバケットを有し、トークンの残量に応じてクレジットの払い出しを制限する。クレジットシェーパ62は、クレジットを与える間隔を、トークンの供給レートにより調整する。
クレジット払出部61は、キュー管理部5に一定のクレジットを払い出す。つまり、クレジット払出部61は、複数のキュー511〜513の各々に一定のクレジットを与える。クレジット払出部61は、キュー511〜513ごとにクレジットの払い出しの可否を示す払出フラグ611〜613を有する。
払出フラグ611〜613は、それぞれ、クレジットの払い出しが可能である場合に”1”を示し、払い出しが不可能である場合に“0“を示す。払出フラグ611〜613は、それぞれ、該当するフローの蓄積量カウンタが所定量B以上であり、クレジットシェーパ62のトークンの残量が0より多いとき、”1”に設定される。
図4の例では、仮に所定量Bを1500(Byte)とすると、フロー#Nの蓄積量カウンタ(128(Byte))は、所定量Bより少ないため、払出フラグ613は”0”を示す。また、他のフロー#1,#2については、蓄積量カウンタが所定量Bより多いため、他の払出フラグ611,612は”1”を示す。このように、複数のキュー511〜513のうち、蓄積されたパケットのデータ量が一定量B以上であるキューに、クレジットを与えることにより、パケットを、一定のバースト性を有するトラフィックとして読み出して、スループットを向上することができる。
図5は、パケットが入力されたときのスケジューラ部6の動作例を示すフローチャートである。まず、蓄積量カウンタ部60は、キュー管理部5からフローID及びパケット長を取得する(ステップSt1)。次に、蓄積量カウンタ部60は、取得したフローID及びパケット長に基づいて、該当するフロー#1〜#Nの蓄積量カウンタを更新する(ステップSt2)。次に、クレジット払出部61は、該当するフロー#1〜#Nの蓄積量カウンタが所定量B以上であり、かつ、該当するクレジットシェーパ62のトークンの残量が0より多い、とする払出条件の成否を判定する(ステップSt3)。
払出条件が満たされる場合(ステップSt3のYes)、クレジット払出部61は、該当するフロー#1〜#Nの払出フラグ611〜613を“1”にし(ステップSt4)、処理を終了する。一方、払出条件が満たされない場合(ステップSt3のNo)、クレジット払出部61は、処理を終了する。このようにして、スケジューラ部6は、パケットが入力されたときの処理を行う。
クレジット払出部61は、払出フラグ611〜613が”1”を示すフロー#1〜#Nのキュー511〜513に、一定のクレジットを払い出す。
図6は、クレジットを払い出すときのスケジューラ部6の動作例を示すフローチャートである。まず、クレジット払出部61は、払出フラグ611〜613が”1”を示すフロー#1〜#Nから1つを選択する(ステップSt11)。クレジット払出部61は、例えばラウンドロビン方式によりフロー#1〜#Nを選択してもよいし、または、フロー#1〜#Nのうち、1以上の特定のフローを優先的に選択してもよい。
次に、クレジット払出部61は、キュー管理部5にクレジットを払い出す(ステップSt12)。つまり、スケジューラ部6は、複数のキュー511〜513に、一定のクレジットを与える。払い出されたクレジットは、キュー管理部5のクレジットカウンタ部52により計数される。
クレジットカウンタ部52は、フローIDごとに、つまりキュー511〜513ごとにクレジットを計数する。図4の例において、フロー#1のキュー511は、−250(Byte)のクレジットを有し、フロー#2のキュー512は、5486(Byte)のクレジットを有する。また、フロー#Nのキュー513は、1500(Byte)のクレジットを有する。クレジットは、スケジューラ部6により一定量ずつ各キュー511〜513に与えられる。なお、以降の説明において、クレジットカウンタ部52が計数したクレジットの量を、「クレジットカウンタ」と表記する。
次に、クレジット払出部61は、該当するフロー#1〜#Nの蓄積量カウンタから一定量を減算する(ステップSt13)。つまり、クレジット払出部61は、クレジットを払い出したときに、クレジット分のパケットが読み出されたものとして、蓄積量カウンタ部60の蓄積量カウンタを更新する。このため、蓄積量カウンタは、各キュー511〜513に蓄積されているパケットのデータ量の合計に必ずしも一致せず、仮想的な蓄積量を示す。したがって、蓄積量カウンタは、払い出されたクレジットが、キュー511〜513に蓄積されているパケットのデータ量の合計を上回ったとき、負の値になる。
次に、クレジット払出部61は、該当するフロー#1〜#Nのクレジットシェーパ62のトークンから一定量を減算する(ステップSt14)。つまり、クレジット払出部61は、トークンを消費してクレジットを払い出す。したがって、各キュー511〜513に単位時間内に払い出されるクレジットの量(つまり、払い出しレート)は、各フロー#1〜#Nのクレジットシェーパ62により制御される。
次に、クレジット払出部61は、該当するフロー#1〜#Nの蓄積量カウンタが所定量B以上であり、かつ、該当するクレジットシェーパ62のトークンの残量が0より多い、とする払出条件の成否を判定する(ステップSt15)。
払出条件が満たされない場合(ステップSt15のNo)、クレジット払出部61は、該当するフロー#1〜#Nの払出フラグ611〜613を”0”に設定して(ステップSt16)、処理を終了する。一方、払出条件が満たされる場合(ステップSt15のYes)、クレジット払出部61は、処理を終了する。このようにして、スケジューラ部6は、クレジットを払い出す処理を行う。
一方、キュー管理部5において、読出調停手段4は、キュー511〜513ごとに、クレジットを消費してパケットを読み出す。読出調停手段4は、フロー#1〜#Nごとに読出フラグ41〜43を有している。読出フラグ41〜43は、キュー511〜513ごとのクレジット及びキュー511〜513ごとに蓄積されたパケットのデータ量に関する読出条件を満たす場合、”1”を示し、読出条件を満たさない場合、”0”を示す。
読出条件は、キュー511〜513のクレジット及びキュー511〜513に蓄積されたパケットのデータ量が、0より大きいときに満たされる。つまり、読出調停手段4は、キュー511〜513にパケットが格納され、クレジットカウンタが正の値であるとき、キュー511〜513からパケットを読み出す。
図4の例では、各キュー511〜513にパケットが格納され、フロー#1のクレジットカウンタが−250であるので、読出フラグ41は”0”に設定される。また、他のフロー#2、#Nは、クレジットカウンタが正の値であるので、読出フラグ42,43は”1”に設定される。この読出条件によると、少なくとも1(Byte)のクレジット、及び、少なくとも1つのパケットがあれば、該パケットは、パケット長によらずにキュー511〜513から読み出されるので、パケットの待機時間が低減され、スループットが向上する。
読出調停手段4は、読出フラグ41〜43が”1”を示すフロー#1〜#Nに対応するキュー511〜513からパケットを読み出す。複数の読出フラグ41〜43が”1”を示す場合、読出調停手段4は、複数のキュー511〜513からパケットの読み出し対象とするキューを選択する。すなわち、読出調停手段4は、複数のキュー511〜513の間における読み出しの競合を調停する。
仮に、読出調停手段4として、新たなスケジューラを設けたとすると、スケジューラ部6を分離した意義が失われてしまう。スケジューラは、所定のスケジューリングアルゴリズムに従って、パケットの読み出しが可能なキューから1つのキューを選択するために、フローごとの優先度や重みなどのパラメータに基づくサーチ処理を行う。このサーチ処理は、読み出し可能なキューのパタン数が多いほど、多くの時間を必要とし、キュー数が多い場合、及びアルゴリズムが複雑である場合、さらに多くの時間を必要とする。したがって、サーチ処理の負担がない、もしくは少ない読出調停手段4を用いることが望ましい。
(第2比較例)
そこで、第2比較例に係る通信装置は、上記のサーチ処理を用いずに、キュー511〜513から読出調停手段4に対して、読み出し可能な状態であることを通知する手法を用いる。図7は、第2比較例の出力処理部913の機能構成を示す構成図である。なお、図7において、図4と共通する構成には、同一の符号を付し、その説明を省略する。
出力処理部913は、キュー管理部5及びスケジューラ部6を有する。キュー管理部5は、分配部50と、複数のキュー511〜513と、クレジットカウンタ部52と、読出処理部53と、登録処理部54と、読出順序登録リスト55を記憶するメモリMとを有する。スケジューラ部6は、蓄積量カウンタ部60と、クレジット払出部61と、複数のクレジットシェーパ62とを有する。なお、スケジューラ部6の動作は、図4を参照して述べたとおりである。
登録処理部54は、キュー511〜513が読出条件を満たしたか否かを判定し、読出条件を満たしたキュー511〜513のフローIDを読出順序登録リスト55に登録する。登録処理部54は、キュー511〜513ごとに読出フラグ541〜543を有している。この読出フラグ541〜543の内容は、図4を参照して説明した読出フラグ41〜43と同一であり、読出条件も上述した通りである。
登録処理部54は、各キュー511〜513のフローIDを、読出条件を満たした順に、読出順序登録リスト55に登録する。読出処理部53は、読出順序登録リスト55からフローIDを読み出し、該フローのキュー511〜513から、クレジットを消費してパケットを読み出す。このとき、読出処理部53は、読出順序登録リスト55に登録されたフローIDのうち、先頭のフローID、つまり時間的に最も早く登録されたフローIDを読み出す。
つまり、読出処理部53は、複数のキュー511〜513から、キューごとのクレジット及びキューごとに蓄積されたパケットのデータ量に関する読出条件を満たした順に、クレジットを消費してパケットを読み出す。図7の例では、フロー#2、フロー#97、フロー#196の順に、該当するキューからパケットが読み出される。このように、読出処理部53は、複雑なサーチ処理を行うことなく、読出順序登録リスト55に登録されたフローIDに従って簡単に読み出し対象のキューを決定するので、少ない時間で読み出し処理を行うことができる。なお、クレジットが払い出される時間間隔は、クレジットシェーパ62により制御されるので、読出処理部53のパケットの読出レート、つまりポートからパケットが出力される出力レートも、クレジットシェーパ62により制御される。
キュー511〜513からパケットが読み出された後、登録処理部54は、該キューが読出条件をさらに満たす場合、当該フローIDを読出順序登録リスト55に再び登録する。もっとも、登録処理部54は、クレジットが0以下となるまでパケットを読み出す場合、フローIDの登録処理を行わない。フローIDの登録処理は、読出条件が満たされるイベントを契機として行われる。このイベントとは、キュー511〜513へのパケットの格納、スケジューラ部6からのクレジットの払い出し、及びキュー511〜513からのパケットの読み出しである。以下に、各イベントにおけるキュー管理部5の動作について説明する。
図8は、キュー511〜513にパケットを格納するときのキュー管理部5の動作例を示すフローチャートである。まず、分配部50は、スイッチカード2から入力されたパケットから、フローID及びパケット長を取得する(ステップSt21)。
次に、分配部50は、取得したフローIDに対応するキュー511〜513に、パケットを格納する(ステップSt22)。次に、分配部50は、取得したフローID及びパケット長をスケジューラ部6に通知する(ステップSt23)。次に、登録処理部54は、該フローIDに対応するキュー511〜513に蓄積されたパケットのデータ量が0より大きく、かつ、該フローIDに対応するクレジットカウンタが0より大きい、とする読出条件の成否を判定する(ステップSt24)。
読出条件が満たされない場合(ステップSt24のNo)、キュー管理部5は、処理を終了する。一方、読出条件が満たされる場合(ステップSt24のYes)、登録処理部54は、読出順序登録リスト55の該フローIDの登録の有無を判定する(ステップSt25)。該フローIDが登録されている場合(ステップSt25のNo)、キュー管理部5は、処理を終了する。
一方、該フローIDが登録されていない場合(ステップSt25のYes)、登録処理部54は、該フローIDを読出順序登録リスト55に登録して(ステップSt26)、キュー管理部5は、処理を終了する。このようにして、キュー管理部5は、パケット入力時の処理を行う。
また、図9は、クレジットが払い出されたときのキュー管理部5の動作例を示すフローチャートである。まず、クレジットカウンタ部52は、スケジューラ部6から払い出された一定量のクレジットを、該当するフローIDのクレジットカウンタに加算する(ステップSt31)。
次に、登録処理部54は、該フローIDに対応するキュー511〜513に蓄積されたパケットのデータ量が0より大きく、かつ、該フローIDに対応するクレジットカウンタが0より大きい、とする読出条件の成否を判定する(ステップSt32)。読出条件が満たされない場合(ステップSt32のNo)、キュー管理部5は、処理を終了する。
一方、読出条件が満たされる場合(ステップSt32のYes)、登録処理部54は、読出順序登録リスト55の該フローIDの登録の有無を判定する(ステップSt33)。該フローIDが登録されている場合(ステップSt33のNo)、キュー管理部5は、処理を終了する。
一方、該フローIDが登録されていない場合(ステップSt33のYes)、登録処理部54は、該フローIDを読出順序登録リスト55に登録し(ステップSt34)、キュー管理部5は、処理を終了する。このようにして、キュー管理部5は、クレジットが払い出されたときの処理を行う。
また、図10は、パケットを読み出すときのキュー管理部5の動作を示すフローチャートである。まず、読出処理部53は、読出順序登録リスト55から先頭のフローIDを読み出す(ステップSt61)。読み出されたフローIDは、読出順序登録リスト55から削除される。
次に、読出処理部53は、読み出したフローIDに対応するキュー511〜513から、1つのパケットを読み出す(ステップSt62)。次に、読出処理部53は、該フローIDに対応するクレジットカウンタから、読み出したパケットの長さ分のクレジットを減算する(ステップSt63)。すなわち、読出処理部53は、複数のキュー511〜513から、キューごとのクレジット及びキューごとに蓄積されたパケットのデータ量に関する読出条件を満たした順に、クレジットを消費してパケットを読み出す。
次に、登録処理部54は、該フローIDに対応するキュー511〜513に蓄積されたパケットのデータ量が0より大きく、かつ、該フローIDのクレジットカウンタが0より大きい、とする読出条件の成否を判定する(ステップSt64)。読出条件が満たされない場合(ステップSt64のNo)、キュー管理部5は、処理を終了する。
一方、読出条件が満たされる場合(ステップSt64のYes)、再びステップSt62の処理が行われる。このようにして、キュー管理部5は、パケット読み出し時の処理を行う。なお、図10の例において、読出処理部53は、読出条件が満たされなくなるまで、パケットを連続して読み出すが、これとは異なり、パケットを、1個ずつ、または一定のデータ量分だけ読み出してもよい。この場合、登録処理部54は、読み出しが行われるたびに読出条件の成否を判定し、読出条件が満たされる場合、当該フローIDを読出順序登録リスト55に再登録する。
このパケット読み出し動作について、図11及び図12を参照して具体例を述べる。図11には、キュー管理部5のパケット読み出し前の状態の一例が示されている。図12には、キュー管理部5のパケット読み出し後の状態の一例が示されている。
読み出し前、読出順序登録リスト55には、フロー#1、フロー#2、フロー#Nの順にフローIDが登録されている。また、クレジットカウンタは、フロー#1が708(Byte)であり、フロー#2が5486(Byte)であり、フロー#Nが1500(Byte)である。
読出処理部53は、読出順序登録リスト55に登録されたフローIDの順に従い、まず、フロー#1のキュー511からPKT#5及びPKT#6(データ量の合計は800(Byte))を連続して読み出す。このとき、フロー#1のクレジットカウンタは、読み出し済みのPKT#5及びPKT#6の長さ800(Byte)分のクレジットが減算され、−92(Byte)となる。この時点において、フロー#1のキュー511は、読出条件を満たさなくなる(ステップSt64のNo)。このため、読出処理部53は、フロー#1のキュー511からのパケットの読み出しを終了する。
読出処理部53は、次に、フロー#2のキュー512からPKT#3〜PKT#6(データ量の合計は1400(Byte))を連続して読み出す。このとき、フロー#2のクレジットカウンタは、読み出し済みのPKT#3〜PKT#6の長さ1400(Byte)分のクレジットが減算され、4086(Byte)となる。この時点において、フロー#2のキュー512は、空になるので、読出条件を満たさなくなる(ステップSt64のNo)。このため、読出処理部53は、フロー#2のキュー512からのパケットの読み出しを終了する。
読出処理部53は、最後に、フロー#Nのキュー513からPKT#1(データ量は100(Byte))を読み出す。このとき、フロー#Nのクレジットカウンタは、読み出し済みのPKT#1の長さ100(Byte)分のクレジットが減算され、1400(Byte)となる。この時点において、フロー#Nのキュー513は、空になるので、読出条件を満たさなくなる(ステップSt64のNo)。このため、読出処理部53は、フロー#Nのキュー513からのパケットの読み出しを終了する。
このように、読出処理部53は、複数のキュー511〜513のうち、読出条件を満たしたキューから、パケットを、読出条件が満たさなくなるまで連続して読み出す。このため、トラフィックのバースト性は、1度の読出処理においてパケットを1つだけ読み出す場合より高くなるが、読出処理の頻度が、この場合より低くなるので、読出処理部53の負荷が低減される。さらに、一度の読出処理において、複数のパケットが読み出されるので、通信装置のスループットが向上する。
また、登録処理部54は、上述したように、パケットの格納、クレジットの払い出し、パケットの読み出しの各イベントの発生時に、フローIDを読出順序登録リスト55に登録する。各イベントは同時に発生することがないため、登録処理部54は、フローIDの登録にあたって、登録の競合の調停を行うことはない。
理由を述べると、まず、スイッチカード92から出力処理部913へのパケットの入力は、1つずつ順次に行われるため、パケットの格納のイベントが同時に発生することはない。クレジットの払い出し及びパケットの読み出しも、各フローについて順次に行われるため、これらのイベントも同時に発生することはない。また、異なるイベント同士の同時発生は、例えば、各イベントの処理に同期するクロックタイミングを、イベントの発生タイミングがずれるように調整することにより回避される。
本比較例では、上記のイベントの発生を契機として、登録処理部54が、読出条件を満たした順に、該当するフローIDを読出順序登録リスト55に登録する。そして、読出処理部53は、登録されたフローIDを先頭から順に取得して、取得したフローIDに応じたキュー511〜513からパケットを読み出す。このため、読出処理部53は、多くの時間を必要とするサーチ処理を行うことなく、負荷が軽い簡単な処理でキュー511〜513を選択し、パケットを読み出すことができる。
しかし、本比較例では、以下に述べるように、各フローの入力レートが相違する場合、クレジットシェーパ62により決定される出力レートを超えるレートで入力されるフローが、出力レート以下のレートで入力されるフローの帯域を圧迫する。
図13には、フローの入力レートが異なる場合におけるパケット読み出し後の状態の一例が示されている。本例において、フロー#1は、入力レートが2(Gbps)であり、例えば音声データまたは金融系データのような帯域保証型のリアルタイム/インタラクティブトラフィックである。また、フロー#2及びフロー#Nは、入力レートが10(Gbps)であり、例えばベストエフォート型のトラフィックである。
フロー#1、#2、#Nのパケットは、キュー511〜513から読み出された後、例えば、10(Gbps)の帯域を有する出力ポートから他装置に送信される。このため、フロー#1、#2、#Nのクレジットシェーパ62は、フロー#1、#2、#Nの出力レートの合計が10(Gbps))となるように帯域制御を行う。
フロー#1のクレジットシェーパ62は、フロー#1のパケットの読み出しレート、つまり出力レートが2(Gbps)となるように、クレジットの払い出しの時間間隔を調整する。また、フロー#2及びフロー#Nのクレジットシェーパ62は、フロー#2及びフロー#Nのパケットの出力レートがそれぞれ4(Gbps)となるように、クレジット払出部61によるクレジットの払い出しの時間間隔を調整する。
しかし、読出処理部53は、1つのパケットを分割して読み出すことはできないため、クレジットカウンタを超えるデータ量のパケットを読み出す。例えば、9600(Byte)のパケット(ジャンボフレーム)がフロー#Nのキュー513に蓄積されているとき、該キューのクレジットカウンタが100(Byte)であっても、読出処理部53は、該パケットを読み出す。このとき、読み出し後のクレジットカウンタは、−9500(Byte)(=100(Byte)−9600(Byte))となる。
このように、スケジューラ部6がクレジットシェーパ62により帯域制御を行っても、読出処理部53は、クレジットが借金状態となることを許容してパケットを読み出すので、制御された出力レートを上回る過剰なバーストトラフィックが生じ得る。このバーストトラフィックは、出力ポートにおいて、帯域保証されたフロー#1のトラフィックに影響を与える。
図14には、出力ポートにおけるフロー#1、#2、#Nごとの帯域の占有状態が示されている。ここで、符号S1は、理想的なトラフィックの帯域の占有状態を示し、符号S2は、フロー#2、#Nにバーストトラフィックが生じたときの帯域の占有状態を示す。また、出力ポートの帯域は、10(Gbps)とする(つまり、「10GbE」)。
理想的なトラフィックの場合、帯域保証されたフロー#1のパケットは、実質的に一定の間隔ΔTで出力される。一方、フロー#2、#Nにバーストトラフィックが生じた場合、フロー#1のパケットに先立って、フロー#2、#Nのパケットが大きな帯域B1,B2を占有するので、フロー#1のパケットにミリ秒単位の遅延が生ずる。
したがって、ベストエフォート型のトラフィックのように、帯域が制御されず、クレジットシェーパ62が制御する帯域を上回るレートで入力されるフローが多い場合、借金状態が頻繁に生ずることにより、出力ポートの帯域が圧迫される。このため、例えば、音声系データや金融系データのように、帯域保証されたフローのパケットは、ミリ秒単位の遅延または揺らぎが生じてしまい、通信品質が劣化するという問題がある。
これに対し、仮に、借金状態を許容せずにパケットの読み出し制御を行えば、パケットの遅延や揺らぎは回避できる。
図15には、借金状態を許容しない場合及び借金状態を許容する場合におけるパケット読み出し後のパケット数及びクレジットが示されている。パケットの読み出し前、フロー#1のキュー511には、200(Byte)×2個のパケットが蓄積され、フロー#1のクレジットカウンタは、500(Byte)を示す。また、フロー#2のキュー512には、9600(Byte)及び64(Byte)のパケットが蓄積され、フロー#2のクレジットカウンタは、100(Byte)を示す。フロー#Nのキュー513には、100(Byte)×10個のパケットが蓄積され、フロー#Nのクレジットカウンタは、999(Byte)を示す。
フロー#1は、クレジットが、蓄積されたパケットのデータ量の合計より多い。このため、フロー#1については、借金状態の許否に関わらず、2個のパケットが読み出され、100(Byte)のクレジットが残る。
フロー#2は、クレジットが、蓄積されたパケットのデータ量の合計より少ない。このため、フロー#2については、借金状態を許容しない場合、64(Byte)のパケットのみが読み出され、36(Byte)のクレジットが残る。一方、借金状態を許容する場合、9600(Byte)及び64(Byte)のパケットが読み出され、−9500(Byte)のクレジットが残る。
フロー#Nは、クレジットが、蓄積されたパケットのデータ量の合計より少ない。このため、フロー#Nについては、借金状態を許容しない場合、100(Byte)×9個のパケットのみが読み出され、99(Byte)のクレジットが残る。一方、借金状態を許容する場合、100(Byte)×10個のパケットが読み出され、−1(Byte)のクレジットが残る。
借金状態を許容しないようにパケットを読み出す場合、読み出しのタイミングごとに、キュー511〜513に蓄積されたパケットのうち、何れのパケットが読み出し可能であるかを判断する必要がある。このような処理は、ハードウェアに過剰な負担がかかるため、現実的には困難である。
また、キュー511〜513に蓄積されたパケットのうち、先頭のパケット、つまり最も早く蓄積されたパケットに限定して、該パケットが読み出されたときに借金状態が生ずるか否かを判断すれば、処理負担が軽減される。しかし、この場合、読み出しのタイミングごとに、1個のパケットしか読み出されないため、スループットが低下するという他の問題を生ずる。したがって、できるだけクレジットを余らせずに消費し、パケットをバーストトラフィックとして読み出す手法が望ましい。
(第1実施例)
そこで、実施例に係る通信装置は、複数のキューから、与えられたクレジットに基づく読出レート以下の入力レートでパケットが入力されるキューを優先し、上記の読出条件を満たした順にクレジットを消費してパケットを読み出すことで、通信品質を改善する。
図16は、第1実施例の出力処理部913の機能構成を示す構成図である。図16において、図7と共通する構成には、同一の符号を付し、その説明を省略する。
出力処理部913は、キュー管理部5及びスケジューラ部6を有する。キュー管理部5は、分配部50aと、複数のキュー511〜513と、クレジットカウンタ部52と、読出処理部53aと、登録処理部54aと、蓄積量監視部56と、メモリ(記憶部)Mとを有する。メモリMは、読出処理部53aの読み出し対象となるキュー511〜513の識別子、つまりフローIDが登録された第1読出順序登録リスト55a及び第2読出順序登録リスト55bを記憶する。
スケジューラ部6は、蓄積量カウンタ部60と、クレジット払出部61と、複数のクレジットシェーパ62とを有する。なお、スケジューラ部6の動作は、図4を参照して述べたとおりである。
蓄積量監視部56は、分配部50a及び読出処理部53aからの通知に基づいて、各フロー#1〜#Nのキュー511〜513に蓄積されたパケットのデータ量の合計を計数し、監視する。蓄積量監視部56は、蓄積量カウンタ部60が計数する蓄積量カウンタのような仮想的な蓄積量ではなく、キュー511〜513に蓄積された実際のパケットのデータ量の合計を計数する。
分配部50aは、入力されたパケットを、フローIDに基づいて、複数のキュー511〜513に分配するだけでなく、各キュー511〜513に入力したパケットのデータ量(長さ)を蓄積量監視部56に通知する。また、読出処理部53aは、第1読出順序登録リスト55aまたは第2読出順序登録リスト55bからフローIDを取得し、該フローIDのキュー511〜513から、クレジットを消費してパケットを読み出す。このとき、読出処理部53aは、各キュー511〜513から読み出したパケットのデータ量(長さ)を蓄積量監視部56に通知する。
蓄積量監視部56は、分配部50aから通知されたデータ量を加算し、また、読出処理部53aから通知されたデータ量を減算することにより、フロー#1〜#Nごとのパケットの蓄積量を計数する。蓄積量監視部56は、フロー#1〜#Nごとのパケットの蓄積量を登録処理部54aに通知する。
登録処理部54aは、キュー511〜513が読出条件を満たしたか否かを判定し、読出条件を満たしたキュー511〜513のフローIDを、読出条件を満たした順に、第1読出順序登録リスト55a及び第2読出順序登録リスト55bの一方に登録する。登録処理部54aは、キュー511〜513ごとに読出フラグ541〜543を有している。この読出フラグ541〜543の内容は、図4を参照して説明した読出フラグ41〜43と同一であり、読出条件も上述した通りである。
第1読出順序登録リスト55aは、優先的なフローのフローIDが登録される優先リストとして取り扱われ、第2読出順序登録リスト55bは、非優先的なフローのフローIDが登録される非優先リストとして取り扱われる。なお、以降の説明において、第1読出順序登録リスト55a及び第2読出順序登録リスト55bを、「優先リスト」及び「非優先リスト」とそれぞれ表記する。
登録処理部(判別部)54aは、蓄積量監視部56から通知されるフロー#1〜#Nごとのパケットの蓄積量に基づいて、フローIDごとに、優先リスト55a及び非優先リスト55bの何れに登録するかを判別する。登録処理部54aは、複数のキュー511〜513のうち、スケジューラ部6により与えられるクレジットに基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別する。そして、登録処理部54aは、優先キューに対応するフローIDを優先リスト55aに登録し、その他のキュー(非優先キュー)に対応するフローIDを非優先リスト55bに登録する。
読出処理部53aは、複数のキュー511〜513から、上記の優先キューを優先し、キューごとの読出条件を満たした順に、クレジットを消費して1以上のパケットを読み出す。すなわち、読出処理部53aは、フローIDを、非優先リスト55bより優先リスト55aから優先して取得し、複数のキュー511〜513のうち、取得したフローIDに応じたキューから1以上のパケットを読み出す。このように、登録処理部54aは、フローIDを優先リスト55a及び非優先リスト55bに分けて登録するので、読出処理部53aは、容易にパケット(つまりフロー)の優先度を判断できる。
登録処理部54aは、より具体的には、複数のキュー511〜513のうち、保有するクレジットが、蓄積されたパケットのデータ量の合計に相当する量以上とする優先条件を満たすキューを、優先キューとして判別する。本実施例において、1(Byte)のクレジットは、1(Byte)のパケットのデータ量に相当するため、上記の優先条件は、「クレジット≧蓄積されたパケットのデータ量の合計」となる。つまり、複数のキュー511〜513のうち、「クレジット≧蓄積されたパケットのデータ量の合計」とする優先条件を満たすキューは、当該フローIDが優先リスト55aに登録される。言い換えると、複数のキュー511〜513のうち、「クレジット<蓄積されたパケットのデータ量の合計」の条件を満たすキューは、当該フローIDが非優先リスト55bに登録される。
登録処理部54aは、第2比較例と同様に、パケットの格納、クレジットの払い出し、パケットの読み出しの各イベントの発生時に、フローIDを優先リスト55a及び非優先リスト55bの一方に登録する。以下に、登録処理部54aの登録処理について説明する。
図17は、キュー511〜513にパケットを格納するときのキュー管理部5の動作例を示すフローチャートである。まず、分配部50aは、スイッチカード2から入力されたパケットから、フローID及びパケット長を取得する(ステップSt51)。
次に、分配部50aは、取得したフローIDに対応するキュー511〜513に、パケットを格納する(ステップSt52)。次に、分配部50aは、取得したフローID及びパケット長をスケジューラ部6及び蓄積量監視部56に通知する(ステップSt53)。次に、登録処理部54aは、該フローIDに対応するキュー511〜513に蓄積されたパケットのデータ量が0より大きく、かつ、該フローIDに対応するクレジットカウンタが0より大きい、とする読出条件の成否を判定する(ステップSt54)。
読出条件が満たされない場合(ステップSt54のNo)、キュー管理部5は、処理を終了する。一方、読出条件が満たされる場合(ステップSt54のYes)、登録処理部54aは、フローIDの登録処理を行う(ステップSt55)。このようにして、キュー管理部5は、パケット格納されたときの処理を行う。なお、フローIDの登録処理については、後述する。
図18は、クレジットが払い出されたときのキュー管理部の動作例を示すフローチャートである。まず、クレジットカウンタ部52は、スケジューラ部6から払い出された一定量のクレジットを、該当するフローIDのクレジットカウンタに加算する(ステップSt71)。
次に、登録処理部54aは、該フローIDに対応するキュー511〜513に蓄積されたパケットのデータ量が0より大きく、かつ、該フローIDに対応するクレジットカウンタが0より大きい、とする読出条件の成否を判定する(ステップSt72)。読出条件が満たされない場合(ステップSt72のNo)、キュー管理部5は、処理を終了する。
一方、読出条件が満たされる場合(ステップSt72のYes)、登録処理部54aは、登録処理を行い(ステップSt73)、キュー管理部5は処理を終了する。このようにして、キュー管理部5は、クレジットが払い出されたときの処理を行う。
また、図19は、パケットを読み出すときのキュー管理部5の動作例を示すフローチャートである。まず、読出処理部53aは、優先リスト55a及び非優先リスト55bの一方から先頭のフローIDを読み出す(ステップSt41)。このとき、読出処理部53aは、非優先リスト55bより優先リスト55aから優先して、フローIDを読み出す。読み出されたフローIDは、優先リスト55aまたは非優先リスト55bから削除される。
次に、読出処理部53aは、読み出したフローIDに対応するキュー511〜513から、1以上のパケットを読み出す(ステップSt42)。次に、読出処理部53aは、該フローIDに対応するクレジットカウンタから、読み出したパケットの長さ分のクレジットを減算する(ステップSt43)。すなわち、読出処理部53aは、複数のキュー511〜513から、優先キューを優先し、キューごとのクレジット及びキューごとに蓄積されたパケットのデータ量に関する読出条件を満たした順に、クレジットを消費してパケットを読み出す。
次に、読出処理部53aは、読み出したパケットの長さ、つまりデータ量を蓄積量監視部56に通知する(ステップSt44)。なお、ステップSt43及びステップSt44の各処理は、何れが先に行われてもよい。
次に、登録処理部54aは、該フローIDに対応するキュー511〜513に蓄積されたパケットのデータ量が0より大きく、かつ、該フローIDのクレジットカウンタが0より大きい、とする読出条件の成否を判定する(ステップSt45)。読出条件が満たされない場合(ステップSt45のNo)、キュー管理部5は、処理を終了する。
一方、読出条件が満たされる場合(ステップSt45のYes)、登録処理部54aは、登録処理を行い(ステップSt46)、キュー管理部5は処理を終了する。このようにして、キュー管理部5は、パケット読み出し時の処理を行う。
次に、上述した各動作における登録処理(ステップSt55、St73,St46)を説明する。図20は、第1実施例における登録処理のフローチャートである。
まず、登録処理部54aは、当該フローIDに対応するキュー511〜513が、クレジットカウンタ≧パケットのデータ量の合計(優先条件)を満たすか否かを判定する(ステップSt81)。このとき、登録処理部54aは、クレジットカウンタをクレジットカウンタ部52から取得し、パケットのデータ量の合計、つまりパケットの蓄積量を蓄積量監視部56から取得する。
優先条件が満たされる場合(ステップSt81のYes)、登録処理部54aは、当該フローIDを優先リスト55aに登録して(ステップSt82)、処理を終了する。一方、優先条件が満たされない場合(ステップSt81のNo)、登録処理部54aは、当該フローIDを非優先リスト55bに登録して(ステップSt83)、処理を終了する。このようにして、登録処理は行われる。
このように、本実施例において、登録処理部54aは、複数のキュー511〜513のうち、優先条件を満たすキューを判別し、フローIDを優先リスト55a及び非優先リスト55bに分けて登録する。したがって、クレジットが借金状態となる可能性がないキュー511〜513は、優先キューとして判定され、当該フローIDは優先リスト55aに登録される。逆に、クレジットが借金状態となる可能性があるキュー511〜513は、非優先キューとして判定され、当該フローIDは非優先リスト55bに登録される。
読出処理部53aは、複数のキュー511〜513から、優先キューを優先し、読出条件を満たした順に、クレジットを消費してパケットを読み出す。このため、クレジットが借金状態となる可能性があるキュー511〜513からのパケットの読み出しは、クレジットが借金状態となる可能性がないキュー511〜513の後回しとなる。
したがって、パケットの読み出し処理において、複数のキュー511〜513のうち、スケジューラ部6により与えられるクレジットに基づく読出レート以下のレートでパケットが入力されるキューが、他のキューより優先される。このため、借金状態が頻発することにより、特定のフローのパケットに遅延または揺らぎが生ずることがない。
なお、本実施例において、登録処理部54aは、上記の優先条件に基づいて、複数のキュー511〜513のうち、スケジューラ部6により与えられるクレジットに基づく読出レート以下のレートでパケットが入力されるキューを判別したが、これに限定されない。登録処理部54aは、例えば、キュー511〜513にパケットが入力されるときの入力レートと、キュー511〜513からパケットが読み出されるときの出力レートをそれぞれ測定する測定手段を有し、当該測定結果に従って、優先キューを判別してもよい。
(第2実施例)
優先条件の成否は、パケットの格納、クレジットの払い出し、パケットの読み出しの何れかのイベントの発生により変化し得る。したがって、フローIDの登録を、イベントの発生を契機として、優先リスト55a及び非優先リスト55b間において動的に変更してもよい。この場合、登録処理部54aは、各フローIDの優先度(優先または非優先)に基づく登録状態を管理するため、登録管理テーブルを保持してもよい。
図21には、第2実施例における登録管理テーブルの一例が示されている。図21において、丸印(「○」参照)は、該フローIDが登録されていることを示し、バツ印(「×」参照)は、該フローIDが登録されていないことを示す。
本例では、フロー#1は、優先リスト55aに登録され、フロー#2は、非優先リスト55bに登録されている。また、フロー#Nは、優先リスト55a及び非優先リスト55bの何れにも登録されていない。この未登録の状態は、例えばフロー#Nのクレジットカウンタが負の値である場合、またはキュー513が空である場合に生じ得る。
登録処理部54aは、各フローIDの登録先が最大で1カ所となるように、登録状態を管理する。つまり、登録処理部54aは、各フローIDの二重登録を禁止する。登録処理部54aは、登録管理テーブルを参照することにより、フローIDの変更要否を判断する。
図22は、第2実施例における登録処理のフローチャートである。まず、登録処理部54aは、当該フローIDに対応するキュー511〜513が、クレジットカウンタ≧パケットのデータ量の合計(優先条件)を満たすか否かを判定する(ステップSt91)。
優先条件が満たされる場合(ステップSt91のYes)、登録処理部54aは、登録管理テーブルを参照して、当該フローIDが優先リスト55aに登録済みであるか否かを判定する(ステップSt92)。当該フローIDが優先リスト55aに登録済みである場合(ステップSt92のYes)、登録処理部54aは、処理を終了する。
一方、当該フローIDが優先リスト55aに登録済みではない場合(ステップSt92のNo)、登録処理部54aは、登録管理テーブルを参照して、当該フローIDが非優先リスト55bに登録済みであるか否かを判定する(ステップSt93)。当該フローIDが非優先リスト55bに登録済みである場合(ステップSt93のYes)、登録処理部54aは、当該フローIDを非優先リスト55bから削除する(ステップSt94)。
次に、登録処理部54aは、当該フローIDを優先リスト55aに再登録して(ステップSt95)、処理を終了する。この処理は、当該フローIDが非優先リスト55bに登録済みではない場合(ステップSt93のNo)も同様に行われる。このとき、登録処理部54aは、登録の変更に従って、登録管理テーブルを更新する。
一方、優先条件が満たされない場合(ステップSt91のNo)、登録処理部54aは、登録管理テーブルを参照して、当該フローIDが非優先リスト55bに登録済みであるか否かを判定する(ステップSt96)。当該フローIDが非優先リスト55aに登録済みである場合(ステップSt96のYes)、登録処理部54aは、処理を終了する。
一方、当該フローIDが非優先リスト55bに登録済みではない場合(ステップSt96のNo)、登録管理テーブルを参照して、当該フローIDが優先リスト55aに登録済みであるか否かを判定する(ステップSt97)。当該フローIDが優先リスト55aに登録済みである場合(ステップSt97のYes)、登録処理部54aは、当該フローIDを優先リスト55aから削除する(ステップSt98)。
次に、登録処理部54aは、当該フローIDを非優先リスト55bに再登録して(ステップSt99)、処理を終了する。この処理は、当該フローIDが優先リスト55aに登録済みではない場合(ステップSt97のNo)も同様に行われる。このとき、登録処理部54aは、登録の変更に従って、登録管理テーブルを更新する。このようにして、登録処理は行われる。
このように、登録処理部54aは、スケジューラ部6が、複数のキュー511〜513のうち、フローID(識別子)が非優先リスト55bに登録されたキューにクレジットを与えたとき、当該キューが優先条件を満たすか否かを判定する。そして、登録処理部54aは、当該キューが優先条件を満たす場合、当該フローIDを優先リスト55aに再登録する。
また、登録処理部54aは、読出処理部53aが、複数のキュー511〜513のうち、フローID(識別子)が優先リスト55aに登録されたキューから1以上のパケットを読み出したとき、当該キューが優先条件を満たすか否かを判定する。そして、登録処理部54aは、当該キューが優先条件を満たさない場合、当該フローIDを非優先リスト55bに再登録する。
さらに、登録処理部54aは、複数のキュー511〜513のうち、フローID(識別子)が優先リスト55aに登録されたキューに1以上のパケットが蓄積されたとき、当該キューが優先条件を満たすか否かを判定する。そして、登録処理部54aは、当該キューが優先条件を満たさない場合、当該フローIDを非優先リスト55bに再登録する。
したがって、優先条件に従ってフローIDの登録が動的に変更されるため、バースト的なトラフィックが入力された場合(例えばロングパケットの入力)であっても、読出処理部53aは、読み出し処理の優先度をキュー511〜513ごとに柔軟に制御することができる。
また、登録処理部54aは、フローIDを再登録するとき、フローIDを、該再登録の前に登録された優先リスト55aまたは非優先リスト55bから削除する。仮に、フローIDの削除を行わなければ、例えば、フロー#1が非優先リスト55bから優先リスト55aに再登録されたとき、読出処理部53aは、優先リスト55a及び非優先リスト55bから取得したフロー#1に従い、キュー511からパケットを読み出す。つまり、読出処理部53aは、優先リスト55a及び非優先リスト55bの両方に従って、フロー#1のキュー511から2度のパケットの読み出し処理を行う。
したがって、一度目の読み出し処理によりキュー511が空になった場合、読出処理部53aは、二度目の読み出し処理において、無駄にキュー511を空読みしてしまう。よって、フローIDの登録変更時に、フローIDを元のリスト55a,55bから削除することにより、キュー511〜513の空読みを回避し、読み出し処理の効率が向上する。
上述したフローIDの登録変更を容易とするため、優先リスト55a及び非優先リスト55bを、例えば双方向リンクリストにより構成するとよい。図23は、この場合の優先リスト55a及び非優先リスト55bの構成例を示す構成図である。
優先リスト55aにおいて、先頭のフロー#10(「先頭」参照)が、登録されたフローID550aのうち、最も早く登録されたものであり、末尾のフロー#142(「末尾」参照)が、登録されたフローID550aのうち、最も遅く登録されたものである。非優先リスト55bにおいて、先頭のフロー#206が、登録されたフローID550bのうち、最も早く登録されたものであり、末尾のフロー#121が、登録されたフローID550bのうち、最も遅く登録されたものである。
優先リスト55aは、1組以上のフローID550a、後方リンクポインタ551a、及び前方リンクポインタ552aを有する。図23において、後方リンクポインタ551a及び前方リンクポインタ552aが示すフローIDは、カッコ内に示されている。フローIDを後方リンクポインタ551aは、フローID550aの後側(末尾側)のフローID550aを示し、前方リンクポインタ552aは、フローID550aの前側(先頭側)のフローID550aを示す。
例えば、フロー#55の後方リンクポインタ551aは、「#142」であるので、フロー#55の後側のフローIDは、「#142」である。また、フロー#55の前方リンクポインタ552aは、「#10」であるので、フロー#55の前側のフローIDは、「#10」である。なお、先頭のフローID550aの前方リンクポインタ552a、及び、末尾のフローID550aの後方リンクポインタ551aは、存在しないため、「−」として記載されている。
非優先リスト55bは、1組以上のフローID550b、後方リンクポインタ551b、及び前方リンクポインタ552bを有する。図23において、後方リンクポインタ551b及び前方リンクポインタ552bが示すフローIDは、カッコ内に示されている。後方リンクポインタ551bは、フローID550bの後側(末尾側)のフローID550bを示し、前方リンクポインタ552bは、フローID550bの前側(先頭側)のフローID550bを示す。
例えば、フロー#1の後方リンクポインタ551bは、「#87」であるので、フロー#1の後側のフローIDは、「#87」である。また、フロー#1の前方リンクポインタ552bは、「#4」であるので、フロー#1の前側のフローIDは、「#4」である。なお、先頭のフローID550bの前方リンクポインタ552b、及び、末尾のフローID550bの後方リンクポインタ551bは、存在しないため、「−」として記載されている。
次に、この双方向リンクリストを用いた登録変更の一例を述べる。図24は、登録変更前及び登録変更後の優先リスト55a及び非優先リスト55bの状態の一例を示す構成図である。図24(a)は、登録変更前の優先リスト55a及び非優先リスト55bの状態とフロー#1の登録管理テーブルT1を示す。また、図24(b)は、登録変更後の優先リスト55a及び非優先リスト55bの状態とフロー#1の登録管理テーブルT2を示す。登録管理テーブルT1、T2を参照すると理解されるように、ここでは、フロー#1の登録先を、非優先リスト55bから優先リスト55aに変更する例を挙げる。
フロー#1は、非優先リスト55bから削除され(「削除」参照)、優先リスト55aの末尾に追加される(「追加」参照)。このとき、優先リスト55aにおいて、末尾に登録されていたフロー#142の後方リンクポインタ551aは、「−」(未登録)から「#1」に変更される。また、フロー#1の後方リンクポインタ551aは、「−」(未登録)であり、フロー#1の前方リンクポインタ552aは、「#142」である。これにより、フロー#142の後方に、フロー#1がリンクされる。
また、非優先リスト55bは、フロー#1が削除されたので、フロー#1の前方に登録されていたフロー#4の後方リンクポインタ551bは、「#1」から「#87」に変更される。また、フロー#1の後方に登録されていたフロー#87の前方リンクポインタ552bは、「#1」から「#4」に変更される。これにより、フロー#4の後方にフロー#87がリンクされる。
このように、双方向リンクリストを用いることにより、前方リンクポインタ552a,552b及び後方リンクポインタ551a,551bを変更するだけで、フローIDの登録変更を容易に行うことができる。また、双方向リンクリストを用いることにより、登録変更の対象となるフローIDの検索処理の負担が低減される。
(第3実施例)
これまで述べた実施例において、フローの入力レート及び出力レートが近い場合、優先条件の成否が繰り返され、優先リスト55a及び非優先リスト55b間において、当該フローIDの登録変更が頻繁に繰り返されることが考えられる。例えば、フロー#1の入力レートが11(Gbps)であるのに対し、当該クレジットシェーパ62により制御された出力レートが10(Gbps)である場合、フロー#1は、優先リスト55a及び非優先リスト55bに交互に登録され得る。このような事態が生ずると、出力レートが安定せず、通信品質が劣化する可能性がある。
そこで、登録処理部54aは、複数のキュー511〜513のうち、所定量以上のクレジットを保有するキューを、上記の優先条件に関わらず、優先キューとして判別してもよい。これにより、所定量以上のクレジットを保有するキュー511〜513に該当するフローIDは、優先条件の成否によらずに、優先リスト55aに登録される。
図25は、第3実施例における登録処理のフローチャートである。まず、登録処理部54aは、当該フローIDのクレジットカウンタが、所定量TH以上であるか否かを判定する(ステップSt101)。このとき、登録処理部54aは、クレジットカウンタ部52からクレジットカウンタを取得する。
当該フローIDのクレジットカウンタが、所定量TH以上である場合(ステップSt101のYes)、登録処理部54aは、当該フローIDを優先リスト55aに登録して(ステップSt103)、処理を終了する。一方、当該フローIDのクレジットカウンタが、所定量THより小さい場合(ステップSt101のNo)、登録処理部54aは、当該フローIDに対応するキュー511〜513が、クレジットカウンタ≧パケットのデータ量の合計(優先条件)を満たすか否かを判定する(ステップSt102)。このとき、登録処理部54aは、クレジットカウンタをクレジットカウンタ部52から取得し、パケットのデータ量の合計、つまりパケットの蓄積量を蓄積量監視部56から取得する。
優先条件が満たされる場合(ステップSt102のYes)、登録処理部54aは、当該フローIDを優先リスト55aに登録して(ステップSt103)、処理を終了する。一方、優先条件が満たされない場合(ステップSt102のNo)、登録処理部54aは、当該フローIDを非優先リスト55bに登録して(ステップSt104)、処理を終了する。このようにして、登録処理は行われる。なお、図25に示された処理は、図20に示された処理にステップSt101の処理を追加したものであるが、ステップSt101の処理を、図22に示された処理に追加してもよい。
このように、登録処理部54aは、複数のキュー511〜513のうち、所定量TH以上のクレジットを保有するキューを、優先条件に関わらず、優先キューとして判別することにより、当該フローの出力レートが安定する。
(第4実施例)
これまで述べた実施例において、登録処理部54aは、フローIDを2つのリスト55a,55bに分けて登録したが、これに限定されず、フローIDを、例えば4つのリストに分けて登録してもよい。この場合、例えば、上述した3つのイベント(パケットの格納、クレジットの払い出し、パケットの読み出し)が発生したときの入力レートに従って優先度を決定し、第1〜第4リストに分けて登録してもよい。
例えば、スケジューラ部6からクレジットが払い出されたときに上記の優先条件が満たされる場合、パケットの入力レートは比較的に高いと考えられる。また、パケットがキュー511〜513に格納されたとき、または、パケットがキュー511〜513から読み出されたときに優先条件が満たされる場合、パケットの入力レートは比較的に低いと考えられる。そこで、例えば、以下の4つの条件に従って優先度1〜4を定義し、優先度1〜4に応じて、フローIDを第1〜第4リストに分けて登録してもよい。なお、優先度の高さの順は、1〜4の順とする(つまり、優先度1が最も高く、優先度4が最も低い)。
優先度1:スケジューラ部6からクレジットが払い出されたときに優先条件が満たされる。
優先度2:パケットがキュー511〜513に格納されたとき、または、パケットがキュー511〜513から読み出されたときに優先条件が満たされる。
優先度3:スケジューラ部6からクレジットが払い出されたときに優先条件が満たされない。
優先度4:パケットがキュー511〜513に格納されたとき、または、パケットがキュー511〜513から読み出されたときに優先条件が満たされない。
図26には、第4実施例における登録管理テーブルの一例が示されている。図26において、丸印(「○」参照)は、該フローIDが登録されていることを示し、バツ印(「×」参照)は、該フローIDが登録されていないことを示す。
本例では、各フローIDは、優先度1〜4、つまり第1〜第4リストの1つに登録されるか、または何れのリストにも登録されない。フロー#1は、優先度1であるので、第1リストに登録され、フロー#2は、優先度4であるので、第4リストに登録されている。また、フロー#Nは、優先度が決定されず、何れのリストにも登録されていない。この未登録の状態は、例えばフロー#Nのクレジットカウンタが負の値である場合、またはキュー513が空である場合に生じ得る。
登録処理部54aは、各フローIDの登録先が最大で1カ所となるように、登録状態を管理する。つまり、登録処理部54aは、各フローIDの二重登録を禁止する。登録処理部54aは、登録管理テーブルを参照することにより、フローIDの変更要否を判断する。
図27は、第4実施例における登録処理のフローチャートである。まず、登録処理部54aは、スケジューラ部6がクレジットを払い出したか否かを判定する(ステップSt111)。
スケジューラ部6がクレジットを払い出した場合(ステップSt111のYes)、登録処理部54aは、当該フローIDに対応するキュー511〜513が、クレジットカウンタ≧パケットのデータ量の合計(優先条件)を満たすか否かを判定する(ステップSt114)。このとき、登録処理部54aは、クレジットカウンタをクレジットカウンタ部52から取得し、パケットのデータ量の合計、つまりパケットの蓄積量を蓄積量監視部56から取得する。
優先条件が満たされる場合(ステップSt114のYes)、登録処理部54aは、当該フローIDを第1リストに登録して(ステップSt115)、処理を終了する。一方、優先条件が満たされない場合(ステップSt114のNo)、登録処理部54aは、当該フローIDを第3リストに登録して(ステップSt118)、処理を終了する。
また、スケジューラ部6がクレジットを払い出していない場合(ステップSt111のNo)、登録処理部54aは、パケットがキュー511〜513に格納されたか否かを判定する(ステップSt112)。パケットがキュー511〜513に格納されていない場合(ステップSt112のNo)、登録処理部54aは、パケットがキュー511〜513から読み出されたか否かを判定する(ステップSt113)。
パケットがキュー511〜513から読み出されていない場合(ステップSt113のNo)、登録処理部54aは、処理を終了する。一方、パケットがキュー511〜513から読み出された場合(ステップSt113のYes)、登録処理部54aは、当該フローIDに対応するキュー511〜513が、クレジットカウンタ≧パケットのデータ量の合計(優先条件)を満たすか否かを判定する(ステップSt117)。また、パケットがキュー511〜513に格納された場合(ステップSt112のYes)も、登録処理部54aは、優先条件の成否を判定する(ステップSt117)。
優先条件が満たされる場合(ステップSt117のYes)、登録処理部54aは、当該フローIDを第2リストに登録して(ステップSt116)、処理を終了する。一方、優先条件が満たされない場合(ステップSt117のNo)、登録処理部54aは、当該フローIDを第4リストに登録して(ステップSt119)、処理を終了する。このようにして、登録処理は行われる。
このように、登録処理部54aは、スケジューラ部6が、複数のキュー511〜513の1つにクレジットを与えたとき、当該キューが優先条件を満たすか否かを判定する。そして、登録処理部54aは、当該キューが優先条件を満たす場合、当該フローIDを、読出条件を満たした順に第1リストに登録する。一方、当該キューが前記優先条件を満たさない場合、登録処理部54aは、当該フローIDを、読出条件を満たした順に前記第3リストに登録する。
また、登録処理部54aは、読出処理部53aが、複数のキュー511〜513の1つから1以上のパケットを読み出したとき、または、複数のキュー511〜513の1つに1以上のパケットが蓄積されたとき、当該キューが優先条件を満たすか否かを判定する。そして、登録処理部54aは、当該キューが前記優先条件を満たす場合、当該フローIDを、読出条件を満たした順に第2リストに登録する。一方、当該キューが前記優先条件を満たさない場合、登録処理部54aは、当該フローIDを、読出条件を満たした順に前記第4リストに登録する。
読出処理部53aは、優先順位を、第1リスト、第2リスト、第3リスト、及び第4リストの順とし、フローIDを、第1リスト、第2リスト、第3リスト、及び第4リストから優先順位に従って取得する。読出処理部53aは、複数のキュー511〜513のうち、取得したフローIDに応じたキューから1以上のパケットを読み出す。
これにより、読出処理部53aは、優先条件の成否だけでなく、イベント(パケットの格納、クレジットの払い出し、パケットの読み出し)に基づくフローの優先度に応じて、柔軟にパケットを読み出すことができる。なお、本実施例において、第2実施例の登録変更処理(図22参照)、及び第3実施例のクレジットに基づく優先キューの判別処理(図25参照)を用いてもよい。
(第5実施例)
これまで述べた実施例において、登録処理部54aは、上記の優先条件に基づき、スケジューラ部6により与えられるクレジットに基づく読出レート以下のレートでパケットが入力されるキュー511〜513、つまり優先キューを判別したが、これに限定されない。例えば、登録処理部54aは、入力処理部912内のポリサー81におけるポリシングの実行結果に基づいて、優先キューを判別してもよい。
ポリシング機能は、例えば「MEF(Metro Ethernet Forum)10」及び「RFC(Request For Comments)2698」により、「2-rate 3-color」などの方式が規定されている。「2-rate 3-color」方式では、保証帯域であるCIR(Committed Information Rate)と、ベストエフォート型帯域であるEIR(Excess Information Rate)とに応じた2つのポリサーが用いられる。そして、2つのポリサーのポリシングの結果に基づいて、パケットごとに、入力レート(帯域)のレベルを示すカラー情報が判定される(いわゆる「2-rate 3-color メータ」)。なお、CIRは、EIRより小さい。
CIR以下のレート(流量)で入力されるパケットは、カラー情報が「Green」であると判定され、CIRを超え、EIR以下のレートで入力されるパケットは、カラー情報が「Yellow」であると判定される。さらに、EIRを超えるレートで入力されるパケットは、カラー情報が「Red」であると判定される。
図28は、ポリサー81の帯域判定機能の概念を示す構成図である。ポリサー81は、CIRのポリシング機能に用いられるトークンを供給する第1供給源810と、該トークンを貯留する第1トークンバケット811と、パケットの入力レートがCIR以上であるか否かをチェックするCIRチェック部812とを有する。また、ポリサー81は、EIRのポリシング機能に用いられるトークンを供給する第2供給源813と、該トークンを貯留する第2トークンバケット814と、パケットの入力レートがEIR以下であるか否かをチェックするEIRチェック部815とを有する。
図28において、第1供給源810は、水道の蛇口として記載され、第1供給源810が供給するトークンは、蛇口から出る水滴として記載されている。第1供給源810は、1滴を1(Byte)として、8/CIRの間隔で第1トークンバケット811に水滴を供給する。
また、第2供給源813は、水道の蛇口として記載され、第2供給源813が供給するトークンは、蛇口から出る水滴として記載されている。第2供給源813は、1滴を1(Byte)として、8/EIRの間隔で第2トークンバケット814に水滴を供給する。
CIRチェック部812は、パケット(PKT)ごとに、第1トークンバケット811に貯留されたトークンの貯留量に基づいて、パケットの入力レートがCIR以上であるか否かをチェックする。入力レートがCIR以上である場合(「OK」参照)、ポリサー81は、パケットのカラー情報が「Green」であると判定する。
一方、入力レートがCIRより小さい場合(「NG」参照)、EIRチェック部815は、パケットごとに、第2トークンバケット814に貯留されたトークンの貯留量に基づいて、パケットの入力レートがEIR以下であるか否かをチェックする。入力レートがEIR以下である場合(「OK」参照)、ポリサー81は、パケットのカラー情報が「Yellow」であると判定する。また、入力レートがEIRより大きい場合(「NG」参照)、ポリサー81は、パケットのカラー情報が「Red」であると判定する。
このような判定処理により得られたカラー情報は、例えば、パケットに付与された装置内ヘッダHに格納される。なお、カラー情報は、通信装置から出力されるとき、パケットのヘッダの廃棄優先度情報フィールドに格納されてもよい。
図29は、第5実施例の出力処理部913の機能構成を示す構成図である。図29において、図16と共通する構成には、同一の符号を付し、その説明を省略する。
出力処理部913は、キュー管理部5及びスケジューラ部6を有する。キュー管理部5は、分配部50bと、複数のキュー511〜513と、クレジットカウンタ部52と、読出処理部53aと、登録処理部54bと、カラー情報監視部56aと、メモリ(記憶部)Mとを有する。メモリMは、優先リスト55a及び非優先リスト55bを記憶する。
スケジューラ部6は、蓄積量カウンタ部60と、クレジット払出部61と、複数のクレジットシェーパ62とを有する。なお、スケジューラ部6の動作は、図4を参照して述べたとおりである。
分配部50bは、入力されたパケットを、フローIDに基づいて、複数のキュー511〜513に分配するだけでなく、各キュー511〜513に入力したパケットの装置内ヘッダHのカラー情報を取得して、カラー情報監視部56aに通知する。カラー情報監視部56aは、分配部50bからのカラー情報の通知に基づいて、フロー#1〜#Nごとのカラー情報を監視する。
カラー情報監視部56aは、フロー#1〜#Nごとのカラー情報を登録処理部54bに通知する。登録処理部54bは、カラー情報に基づいて、フローごとの優先度を判別する。より具体的には、登録処理部54bは、複数のキュー511〜513のうち、カラー情報が「Green」であるパケットを蓄積するキューを、優先キューとして判別し、上記の読出条件を満たした順に、当該フローIDを優先キュー55aに登録する。また、登録処理部54bは、カラー情報が「Yellow」または「Red」であるパケットを蓄積するキューを、非優先キューとして判別し、読出条件を満たした順に、当該フローIDを非優先キュー55bに登録する。
図30は、第5実施例における登録処理のフローチャートである。まず、登録処理部54bは、当該フローのパケットのカラー情報が「Green」であるか否かを判定する(ステップSt121)。
カラー情報が「Green」である場合(ステップSt121のYes)、登録処理部54bは、当該フローIDを優先リスト55aに登録して(ステップSt122)、処理を終了する。一方、カラー情報が「Yellow」または「Red」である場合(ステップSt121のNo)、登録処理部54bは、当該フローIDを非優先リスト55bに登録して(ステップSt123)、処理を終了する。このようにして、登録処理は行われる。
このように、本実施例において、ポリサー(レート検出部)81は、パケットの入力レートを、カラー情報として検出する。登録処理部54bは、複数のキュー511〜513のうち、ポリサー81により検出された入力レートが所定値(CIR)以下であるパケット、つまりカラー情報が「Green」であるパケットを蓄積するキューを、優先キューとして判別する。
したがって、登録処理部54bは、パケットに付与されるカラー情報を用いることにより、優先キューを容易に判別できる。なお、本実施例において、カラー情報が「Green」であるパケットに対応するフローIDは、優先リスト55aに登録され、カラー情報が「Yellow」または「Red」であるパケットに対応するフローIDは、非優先リスト55bに登録されたが、これに限定されない。例えば、「Green」、「Yellow」または「Red」の各カラー情報にそれぞれ対応する3つのリストを設けておき、フローIDを、該3つのリストのうち、当該パケットのカラー情報に対応するリストに登録してもよい。また、本実施例において、第2実施例の登録変更処理(図22参照)、及び第3実施例のクレジットに基づく優先キューの判別処理(図25参照)を用いてもよい。
(第6実施例)
優先キューの判別手段は、上述した内容に限定されず、例えば、パケットの種類を識別し、キューに蓄積されるパケットの種類に応じて、優先キューを判別してもよい。図31は、第6実施例の出力処理部913の機能構成を示す構成図である。図31において、図16と共通する構成には、同一の符号を付し、その説明を省略する。
出力処理部913は、ヘッダ識別部7、キュー管理部5、及びスケジューラ部6を有する。ヘッダ識別部7は、例えば、VoIPのパケットを識別する。図32は、VoIPのパケットの構成を示す構成図である。
VoIPは、UDP(User Datagram Protocol)を上位プロトコルとし、さらに、RTP(Real-time Transport Protocol)を、その上位プロトコルとする。このため、VoIPのパケット(IPパケット)は、IPヘッダ及びUDPデータグラムを有し、UDPデータグラムは、UDPヘッダと、RTPヘッダ及び音声データを含むRTPパケットとを有する。
ヘッダ識別部7は、VoIPのパケットを識別した場合、当該パケットに付与された装置内ヘッダに、「高」を示す遅延優先度情報を挿入し、その他のパケットを識別した場合、当該パケットに付与された装置内ヘッダに、「低」を示す遅延優先度情報を挿入する。遅延優先度情報が「高」を示す場合、当該パケットは、遅延及び揺らぎが優先的に抑止され、遅延優先度情報が「低」を示す場合、当該パケットは、低優先で遅延及び揺らぎが抑止される。
キュー管理部5は、分配部50cと、複数のキュー511〜513と、クレジットカウンタ部52と、読出処理部53aと、登録処理部54cと、遅延優先度監視部56bと、メモリ(記憶部)Mとを有する。メモリMは、優先リスト55a及び非優先リスト55bを記憶する。
スケジューラ部6は、蓄積量カウンタ部60と、クレジット払出部61と、複数のクレジットシェーパ62とを有する。なお、スケジューラ部6の動作は、図4を参照して述べたとおりである。
分配部50cは、入力されたパケットを、フローIDに基づいて、複数のキュー511〜513に分配するだけでなく、各キュー511〜513に入力したパケットの装置内ヘッダの遅延優先度情報を取得して、遅延優先度監視部56bに通知する。遅延優先度監視部56bは、分配部50bからのカラー情報の通知に基づいて、フロー#1〜#Nごとの遅延優先度情報を監視する。
遅延優先度監視部56bは、フロー#1〜#Nごとの遅延優先度情報を登録処理部54cに通知する。登録処理部54cは、遅延優先度情報に基づいて、フローごとの優先度を判別する。より具体的には、登録処理部54cは、複数のキュー511〜513のうち、遅延優先度情報が「高」であるパケットを蓄積するキューを、優先キューとして判別し、上記の読出条件を満たした順に、当該フローIDを優先キュー55aに登録する。また、登録処理部54cは、遅延優先度情報が「低」であるパケットを蓄積するキューを、非優先キューとして判別し、読出条件を満たした順に、当該フローIDを非優先キュー55bに登録する。
図33は、第6実施例における登録処理のフローチャートである。まず、登録処理部54cは、当該フローのパケットの遅延優先度情報が「高」であるか否かを判定する(ステップSt131)。
遅延優先度情報が「高」である場合(ステップSt131のYes)、登録処理部54cは、当該フローIDを優先リスト55aに登録して(ステップSt132)、処理を終了する。一方、遅延優先度情報が「低」である場合(ステップSt131のNo)、登録処理部54cは、当該フローIDを非優先リスト55bに登録して(ステップSt133)、処理を終了する。このようにして、登録処理は行われる。
このように、ヘッダ識別部(識別部)7は、特定の種類のパケット(上記の例では、VoIPのパケット)を識別する。登録処理部54cは、複数のキュー511〜513のうち、ヘッダ識別部7により識別された特定の種類のパケットを蓄積するキューを、優先キューとして判別する。
したがって、ヘッダ識別部7が識別するパケットの種類を、VoIPのような帯域保証されたフローのパケットとすることにより、登録処理部54bは、ヘッダ識別部7により識別した種類に応じて、優先キューを容易に判別できる。なお、本実施例において、第2実施例の登録変更処理(図22参照)、及び第3実施例のクレジットに基づく優先キューの判別処理(図25参照)を用いてもよい。
(シミュレーション結果)
次に、実施例に係る通信装置の効果を、シミュレーション結果を用いて説明する。図34は、シミュレーションモデルを示す構成図である。
本シミュレーションにおいて、入力されるパケットのフローとして、2000組のHighクラス及びLowクラスのフローを仮定する。Highクラスのフローは、例えば音声系データや金融系データなどの帯域保証型トラフィックであり、64(Byte)長のパケットが、5(Mbps)のレートでキューに入力される。一方、Lowクラスのフローは、例えばベストエフォート型トラフィックであり、64(Byte)長のパケットが、45(Mbps)のレートでキューに入力される。
各組のHighクラスのフローは、同一組のLowクラスのフローより優先的に出力されるように、完全優先制御される(「SP」(Strict Priority)参照)。シェーパ(クレジットシェーパ62に相当)は、Highクラス及びLowクラスのフローの出力レートの合計が25(Mbps)となるように各フローをシェーピングする。また、Highクラス及びLowクラスの組同士の間の制御は、例えばラウンドロビン方式(「RR」(Round Robin)参照)に従って行われる。
これにより、Highクラスのフローは、入力レート及び出力レートの両方が5(Mbps)となり、Lowクラスのフローは、入力レートが45(Mbps)であるのに対し、出力レートとして、残りの25(Mbps)(=25−5)が与えられる。すなわち、Highクラスのフローのパケットは、スケジューラ部6により与えられるクレジットに基づく読出レート以下のレートでキュー入力される。また、Lowクラスのフローのパケットは、スケジューラ部6により与えられるクレジットに基づく読出レートより大きいレートでキュー入力される。なお、Highクラス及びLowクラスは2000組あるため、全入力レートが100(Gbps)であるのに対し、全出力レートは50(Gbps)となる。
図35は、比較例及び実施例におけるパケットの最大遅延時間のシミュレーション結果を示すグラフである。図35(a)は、上記の第2比較例に基づくシミュレーション結果を示し、図35(b)は、上述した実施例に基づくシミュレーション結果を示す。
図35(a)及び図35(b)において、横軸は、シミュレーション時間を示し、縦軸は、上記のHighクラスのフローのパケットの最大遅延時間を示す。なお、シミュレーション時間は、フローの入力の開始後の100〜200(ms)である。
図35(a)を参照すると理解されるように、比較例では、最大で約4(ms)の遅延が生ずる。本シミュレーションにおいて、Lowクラスのフローのパケット長は、64(Byte)(つまりショートパケット)であるため、クレジットが借金状態となっても、個々のフローのクレジットカウンタの絶対値は小さい。しかし、2000ものLowクラスのフローのクレジットの借金状態が重畳されると、Lowクラスのフローのパケットは、出力ポートの帯域を、Highクラスのフローのパケットの出力に先立って占有する(図14参照)。このため、Highクラスのフローのパケットの最大遅延時間が増加し、通信品質が劣化する。
これに対し、図35(b)を参照すると理解されるように、実施例では、最大遅延時間が、約0.01(ms)に安定している。このように、実施例によれば、Highクラスのフローのように、スケジューラ部6により与えられるクレジットに基づく読出レート以下のレートでキュー入力されるフローの通信品質が改善される。
これまで述べたように、実施例に係る通信装置は、1以上のパケットを蓄積する複数のキュー511〜513と、スケジューラ部6と、判別部(登録処理部)54a〜54cと、読出処理部53aとを有する。スケジューラ部6は、複数のキュー511〜513の各々に読出許容量(クレジット)を与える。
判別部54a〜54cは、複数のキュー511〜513のうち、スケジューラ部6により与えられる読出許容量に基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別する。読出処理部53aは、複数のキュー511〜513から、優先キューを優先し、キューごとの読出許容量及びキューごとに蓄積された1以上のパケットのデータ量に関する読出条件を満たした順に、読出許容量を消費して1以上のパケットを読み出す。
実施例に係る通信装置によると、読出処理部53は、複数のキュー511〜513から、キューごとの読出許容量及びキューごとに蓄積されたパケットのデータ量に関する読出条件を満たした順に、パケットを読み出す。このため、読出処理部53は、多くの時間を必要とするサーチ処理を行うことなく、負荷が軽い簡単な処理でキュー511〜513を選択し、高いスループットでパケットを読み出すことができる。
また、実施例に係る通信装置によると、判別部54a〜54cは、複数のキュー511〜513のうち、パケットの入力レートが、読出許容量に基づく読出レート以下であるキューを、優先キューとして識別する。読出処理部53aは、複数のキュー511〜513から、優先キューを優先してパケットを読み出す。
このため、帯域保証されたトラフィックのように、入力レートが一定以下に制御されたパケットは、他のパケットに優先して、キュー511〜513から読み出される。一方、ベストエフォート型のトラフィックのように、入力レートが制御されず、出力レートを上回るパケットは、キュー511〜513から読み出しが、上記のパケットの後回しとなる。したがって、実施例に係る通信装置によると、通信品質を改善することができる。
また、実施例に係るパケットスケジューリング方法は、以下の工程(1)及び(2)を含む。
(1)1以上のパケットを蓄積する複数のキュー511〜513の各々に読出許容量(クレジット)を与える工程
(2)複数のキュー511〜513のうち、与えられる読出許容量に基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別する工程
(3)複数のキュー511〜513から、優先キューを優先し、キューごとの読出許容量及びキューごとに蓄積されたパケットのデータ量に関する読出条件を満たした順に、読出許容量を消費してパケットを読み出す工程
実施例に係るパケットスケジューリング方法によると、上記の通信換装置と同様の構成を有するため、上述した作用効果を奏する。
以上、好ましい実施例を参照して本発明の内容を具体的に説明したが、本発明の基本的技術思想及び教示に基づいて、当業者であれば、種々の変形態様を採り得ることは自明である。
なお、以上の説明に関して更に以下の付記を開示する。
(付記1) 1以上のパケットを蓄積する複数のキューと、
前記複数のキューの各々に読出許容量を与えるスケジューラ部と、
前記複数のキューのうち、前記スケジューラ部により与えられる前記読出許容量に基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別する判別部と、
前記複数のキューから、前記優先キューを優先し、キューごとの前記読出許容量及びキューごとに蓄積された前記1以上のパケットのデータ量に関する読出条件を満たした順に、前記読出許容量を消費して前記1以上のパケットを読み出す読出処理部とを有することを特徴とする通信装置。
(付記2) 前記判別部は、前記複数のキューのうち、保有する前記読出許容量が、蓄積された前記1以上のパケットのデータ量の合計に相当する量以上とする優先条件を満たすキューを、前記優先キューとして判別することを特徴とする付記1に記載の通信装置。
(付記3) 前記複数のキューのうち、前記読出処理部の読み出し対象となるキューの識別子が登録された第1リスト及び第2リストを記憶する記憶部を、さらに有し、
前記判別部は、前記複数のキューのうち、前記優先キューの識別子を、前記読出条件を満たした順に前記第1リストに登録し、他のキューの識別子を、前記読出条件を満たした順に前記第2リストに登録し、
前記読出処理部は、前記識別子を、前記第2リストより前記第1リストから優先して取得し、前記複数のキューのうち、取得した前記識別子に応じたキューから前記1以上のパケットを読み出すことを特徴とする付記2に記載の通信装置。
(付記4) 前記判別部は、前記スケジューラ部が、前記複数のキューのうち、前記識別子が前記第2リストに登録されたキューに前記読出許容量を与えたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を前記第1リストに再登録することを特徴とする付記3に記載の通信装置。
(付記5) 前記判別部は、前記読出処理部が、前記複数のキューのうち、前記識別子が前記第1リストに登録されたキューから前記1以上のパケットを読み出したとき、または、前記複数のキューのうち、前記識別子が前記第1リストに登録されたキューに前記1以上のパケットが蓄積されたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を前記第2リストに再登録することを特徴とする付記3または4に記載の通信装置。
(付記6) 前記判別部は、前記識別子を再登録するとき、前記識別子を、該再登録の前に登録された前記第1リストまたは前記第2リストから削除することを特徴とする付記4または5に記載の通信装置。
(付記7) 前記判別部は、前記複数のキューのうち、所定量以上の前記読出許容量を保有するキューを、前記優先条件に関わらず、前記優先キューとして判別することを特徴とする付記2乃至6に記載の通信装置。
(付記8) 前記複数のキューのうち、前記読出処理部の読み出し対象となるキューの識別子が登録された第1リスト、第2リスト、第3リスト、及び第4リストを記憶する記憶部を、さらに有し、
前記判別部は、
前記スケジューラ部が、前記複数のキューの1つに前記読出許容量を与えたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を、前記読出条件を満たした順に前記第1リストに登録し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を、前記読出条件を満たした順に前記第3リストに登録し、
前記読出処理部が、前記複数のキューの1つから前記1以上のパケットを読み出したとき、または、前記複数のキューの1つに前記1以上のパケットが蓄積されたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を、前記読出条件を満たした順に前記第2リストに登録し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を、前記読出条件を満たした順に前記第4リストに登録し、
前記読出処理部は、優先順位を、前記第1リスト、前記第2リスト、前記第3リスト、及び前記第4リストの順とし、前記識別子を、前記第1リスト、前記第2リスト、前記第3リスト、及び前記第4リストから前記優先順位に従って取得し、前記複数のキューのうち、取得した前記識別子に応じたキューから前記1以上のパケットを読み出すことを特徴とする付記2に記載の通信装置。
(付記9) 前記読出条件は、前記読出許容量及び前記複数のキューに蓄積された前記1以上のパケットのデータ量が、それぞれ、0より大きいときに満たされることを特徴とする付記1乃至8の何れかに記載の通信装置。
(付記10) 前記1以上のパケットの入力レートを検出するレート検出部を、さらに有し、
前記判別部は、前記複数のキューのうち、前記レート検出部により検出された前記入力レートが所定値以下である前記1以上のパケットを蓄積するキューを、前記優先キューとして判別することを特徴とする付記1に記載の通信装置。
(付記11) 前記1以上のパケットのうち、特定の種類のパケットを識別する識別部を、さらに有し、
前記判別部は、前記複数のキューのうち、前記識別部により識別された前記特定の種類のパケットを蓄積するキューを、前記優先キューとして判別することを特徴とする付記1に記載の通信装置。
(付記12) 1以上のパケットを蓄積する複数のキューの各々に読出許容量を与え、
前記複数のキューのうち、与えられる前記読出許容量に基づく読出レート以下のレートでパケットが入力されるキューを、優先キューとして判別し、
前記複数のキューから、前記優先キューを優先し、キューごとの前記読出許容量及びキューごとに蓄積された前記1以上のパケットのデータ量に関する読出条件を満たした順に、前記読出許容量を消費して前記1以上のパケットを読み出すことを特徴とするパケットスケジューリング方法。
(付記13) 前記複数のキューのうち、保有する前記読出許容量が、蓄積された前記1以上のパケットのデータ量の合計に相当する量以上とする優先条件を満たすキューを、前記優先キューとして判別することを特徴とする付記12に記載のパケットスケジューリング方法。
(付記14) 前記複数のキューのうち、前記優先キューの識別子を、前記読出条件を満たした順に第1リストに登録し、他のキューの識別子を、前記読出条件を満たした順に第2リストに登録し、
前記識別子を、前記第2リストより前記第1リストから優先して取得し、前記複数のキューのうち、取得した前記識別子に応じたキューから前記1以上のパケットを読み出すことを特徴とする付記13に記載のパケットスケジューリング方法。
(付記15) 前記複数のキューのうち、前記識別子が前記第2リストに登録されたキューに前記読出許容量を与えたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を前記第1リストに再登録することを特徴とする付記14に記載のパケットスケジューリング方法。
(付記16) 前記複数のキューのうち、前記識別子が前記第1リストに登録されたキューから前記1以上のパケットを読み出したとき、または、前記複数のキューのうち、前記識別子が前記第1リストに登録されたキューに前記1以上のパケットが蓄積されたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を前記第2リストに再登録することを特徴とする付記14または15に記載のパケットスケジューリング方法。
(付記17) 前記識別子を再登録するとき、前記識別子を、該再登録の前に登録された前記第1リストまたは前記第2リストから削除することを特徴とする付記15または16に記載のパケットスケジューリング方法。
(付記18) 前記複数のキューのうち、所定量以上の前記読出許容量を保有するキューを、前記優先条件に関わらず、前記優先キューとして判別することを特徴とする付記13乃至17に記載のパケットスケジューリング方法。
(付記19) 前記複数のキューの1つに前記読出許容量を与えたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を、前記読出条件を満たした順に第1リストに登録し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を、前記読出条件を満たした順に第3リストに登録し、
前記複数のキューの1つから前記1以上のパケットを読み出したとき、または、前記複数のキューの1つに前記1以上のパケットが蓄積されたとき、当該キューが前記優先条件を満たすか否かを判定し、当該キューが前記優先条件を満たす場合、当該キューの識別子を、前記読出条件を満たした順に第2リストに登録し、当該キューが前記優先条件を満たさない場合、当該キューの識別子を、前記読出条件を満たした順に第4リストに登録し、
優先順位を、前記第1リスト、前記第2リスト、前記第3リスト、及び前記第4リストの順とし、前記識別子を、前記第1リスト、前記第2リスト、前記第3リスト、及び前記第4リストから前記優先順位に従って取得し、前記複数のキューのうち、取得した前記識別子に応じたキューから前記1以上のパケットを読み出すことを特徴とする付記13に記載のパケットスケジューリング方法。
(付記20) 前記読出条件は、前記読出許容量及び前記複数のキューに蓄積された前記1以上のパケットのデータ量が、それぞれ、0より大きいときに満たされることを特徴とする付記12乃至19の何れかに記載のパケットスケジューリング方法。