図1は、本実施例の伝送システムの一例を示す説明図である。図1に示す伝送システム1は、複数の端末装置2と、複数の伝送装置3とを有する。端末装置2と伝送装置3との間や伝送装置3間は、例えば、光ファイバ4等の物理回線で通信接続するものとする。端末装置2は、例えば、パーソナルコンピュータ等の通信端末装置である。また、端末装置2は、例えば、スマートフォン、タブレット端末や携帯電話機等の無線端末である。伝送装置3は、例えば、端末装置2から収集した音声やメール等の各種データを格納したパケットを他の伝送装置3や他の端末装置2に伝送する伝送装置である。尚、伝送装置3は、例えば、端末装置2が無線端末の場合に、無線端末を無線接続して収容する基地局等である。
図2は、伝送装置3の一例を示すブロック図である。図2に示す伝送装置3は、複数の入力ポート11と、複数の出力ポート12と、パケット処理部13と、トラフィック管理部14とを有する。入力ポート11は、光ファイバ4と物理的に接続し、例えば、光ファイバ4から光信号を入力し、入力した光信号をパケット単位のビット列に変換する光電変換機能を備えた入力インタフェースである。出力ポート12は、例えば、光ファイバ4と物理的に接続し、パケット単位のビット列を光信号に変換する光電変換機能を備え、変換された光信号を光ファイバ4に出力する出力インタフェースである。パケット処理部13は、ビット列のパケット内のヘッダ情報を解析し、その解析結果に基づき、伝送経路の選択やパケットの廃棄判定等の各種パケット処理を実行する、例えば、NPU(Network Processing Unit)等で実現する。
トラフィック管理部14は、バッファリング機能と、優先制御機能と、帯域制御機能と、出力キュー選択機能等とを有する。バッファリング機能は、入力パケットのパケット情報にあるフローIDからユーザフローを識別し、入力パケットが属するユーザフロー毎にバッファ内に出力キューを生成し、出力キュー内に入力パケットを格納する機能である。尚、ユーザフローとは、例えば、特定ユーザから他の特定ユーザへのデータの流れである。優先制御機能は、ユーザフローの優先度に応じてパケットの出力タイミングを決定する機能である。尚、優先度は、データのクラス情報やトークン状態等に応じたユーザフローの出力優先度である。帯域制御機能は、例えば、トークンバケット方式やリーキーバケット方式等を用いてユーザフロー毎の回線帯域を管理する機能である。出力キュー選択機能は、複数の出力キューの内、対応する出力キューを選択し、選択した出力キュー内のパケットを出力ポート12から出力する機能である。尚、トラフィック管理部14は、例えば、ASIC(Application Specific Integrated Circuit)や、FPGA(Field-Programmable Gate Array)等で実現する。
トラフィック管理部14は、スケジュール管理部20と、バッファ管理部30とを有する。バッファ管理部30は、入力パケットが属するユーザフロー毎に出力キューをバッファ内に生成し、当該ユーザフローに対応した出力キューに入力パケットを格納する、例えば、バッファリング機能を司るものである。スケジュール管理部20は、複数の出力キューの内、対応する出力キューを効率良く、かつ、高速に決定する、例えば、優先制御機能、帯域制御機能や出力キュー選択機能等を司るものである。
図3は、スケジュール管理部20及びバッファ管理部30の一例を示すブロック図である。図3に示すバッファ管理部30は、EnQ部31と、バッファ32と、出力制御部33とを有する。EnQ部31は、入力ポート11を通じてパケットを入力する。バッファ32は、EnQ部31から入力パケットを検出すると、入力パケットが属するユーザフローに対応した出力キュー32Aに入力パケットを格納する。尚、バッファ32は、新規のユーザフローに属する入力パケットを検出すると、新規のユーザフローに対応した出力キュー32Aを生成する。つまり、バッファ32は、ユーザフロー毎に出力キュー32Aを有する。更に、EnQ部31は、入力パケットを検出すると、入力パケットの入力パケット長及び入力パケットのユーザフローを識別するフロー番号をパケット情報としてスケジュール管理部20に通知する。
出力制御部33は、複数の出力キュー32Aの内、ユーザフロー単位で出力キュー32Aを選択し、選択された出力キュー32A内のパケットをパケット単位で出力する。また、出力制御部33は、ユーザフローに属するパケットを格納した出力キュー32A毎に、出力キュー32Aから出力可能なクレジット量をカウントするクレジットカウンタ33Aを生成する。尚、クレジット量は、少なくとも出力キュー32Aの選択の処理に要する時間よりも大の時間をデータ換算したデータ量等の出力許可量である。クレジットカウンタ33Aは、出力キュー32A内のパケットを出力した場合に、現在クレジット量から出力パケット長を減算することで現在クレジット量を更新する、例えば算出部である。クレジットカウンタ33Aは、スケジュール管理部20が発行した発行クレジット量を現在クレジット量に加算することで現在クレジット量を更新する。
スケジュール管理部20は、追加制御部21と、リスト管理部22と、全体管理部23とを有する。追加制御部21は、EnQ部31から得た入力パケットのパケット情報に基づき、図5に示すリンクリスト40を構成するエントリ41を取得する処理部である。リンクリスト40は、フロー番号で識別するユーザフローの出力順序を示す配列リストである。リンクリスト40は、フロー番号を識別するエントリ41を出力順に数珠繋ぎにして配列している。全体管理部23は、追加制御部21及びリスト管理部22を管理している。
追加制御部21は、フロー管理部211と、要求判定部212とを有する。フロー管理部211は、現在キュー長を管理するキュー長カウンタ211Aをユーザフロー毎に生成する。キュー長カウンタ211Aは、現在キュー長から発行クレジット量を減算することでユーザフロー毎に現在キュー長を更新する、例えば、キュー長算出部である。フロー管理部211は、ユーザフロー毎のキュー長カウンタ211Aの現在キュー長を参照し、キュー長カウンタ211Aの現在キュー長が正(プラス値)であるか否かを判定する。
要求判定部212は、第1のタイミングに応じて入力パケットのエントリに関わるリスト操作要求があるか否かを判定し、リスト管理部22側で実行するリスト操作の処理時間を確保するための処理部である。第1のタイミングとは、例えば、パケット入力やトークン追加処理でユーザフロー毎の出力キュー32Aがパケット出力可能な状態に移行した場合のリンクリスト40に対する追加イベントが発生したタイミングである。また、第1のタイミングとは、例えば、クレジット発行が完了してリンクリスト40に対する追加イベントが発生したタイミングである。リスト操作要求とは、例えば、リンクリスト40にフロー番号のエントリ41を追加するリスト操作をリスト管理部22に要求するコマンドである。
要求判定部212は、図示せぬ記憶領域内にFIFO212A等の一時記憶部を生成する。尚、任意のユーザフローからリスト操作要求が発生するタイミングの最短時間は、最短パケットの処理時間となる。しかしながら、異なるユーザフローの短パケットが短い間隔で入力されると、ユーザフロー毎に、最短パケットの処理時間で当該パケットのエントリ41に関わるリスト操作要求が発生する。そして、要求判定部212は、リスト管理部22側で処理可能な時間よりも短い時間でリスト管理部22に対してリスト操作要求が発行されることになるため、リスト操作要求に関わるエントリ41をFIFO212A内に一時的に格納する。その結果、要求判定部212は、リスト管理部22側で処理可能なタイミングでリスト操作要求をリスト管理部22に通知するため、各ユーザフローのリンクリスト40のリスト操作を実行する処理時間を確保できる。
要求判定部212は、対象ユーザフローに属するパケットの入力タイミングで、現在キュー長が正、かつ、回線帯域がOKの場合に、リンクリスト40をリスト操作する際の対象ユーザフローのエントリを取得する。また、要求判定部212は、対象ユーザフローの回線帯域の更新タイミングで、現在キュー長が正、かつ、回線帯域がOKの場合に、リンクリスト40をリスト操作する際の対象ユーザフローのエントリを取得する。また、要求判定部212は、対象ユーザフロー対応のクレジットカウンタ33Aへのクレジット発行が完了したタイミングで、現在キュー長が正、かつ、回線帯域がOKの場合に、リンクリスト40をリスト操作する際の対象ユーザフローのエントリを取得する。
要求判定部212は、対象ユーザフローのエントリ41を取得すると、取得されたエントリ41と同一のエントリがFIFO212A内にあるか否かを判定する、例えば、判定部である。要求判定部212は、同一のエントリ41がFIFO212A内にある場合に、当該エントリ41のFIFO212A内への格納を禁止する。また、要求判定部212は、同一のエントリ41がFIFO212A内にない場合に、当該エントリ41をFIFO212A内に格納する。その結果、要求判定部212は、FIFO212A内のリンクリスト40に関わる同一エントリ41の重複登録を防止し、1エントリ/1フローを実現する。
要求判定部212は、第2のタイミングを検出すると、FIFO212Aに格納中の先頭エントリ41をリンクリスト40内の適切な位置に挿入する。尚、第2のタイミングは、FIFO212A内にエントリ41があり、かつ、リスト管理部22側で処理が可能な状態の場合のタイミングである。
要求判定部212は、FIFO212A内にエントリ41があるか否かを判定する。要求判定部212は、FIFO212A内にエントリ41がある場合に、FIFO212A内の先頭のエントリ41を読み出す。要求判定部212は、先頭のエントリ41を読み出した場合に、対象ユーザフローに対応したキュー長カウンタ211Aの最新の状態を参照する。要求判定部212は、リンクリスト40のエントリ41に関わるリスト操作を要求する、最新状態を反映したリスト操作要求をリスト管理部22に通知する。更に、要求判定部212は、リスト操作要求の通知が完了した後、FIFO212A内の先頭エントリ41を削除する。
要求判定部212は、FIFO212A内にエントリ41がない場合に、リスト操作要求を発行せずに処理を終了する。また、要求判定部212は、FIFO212A内にエントリ41がある場合でも、リスト管理部22側で処理可能な状態でない場合に、FIFO212A内の先頭エントリ41を残したまま、リスト操作要求を発行せずに処理を終了する。
リスト管理部22は、リスト操作部221と、リストテーブル222と、発行部224とを有する。リスト操作部221は、要求判定部212からのリスト操作要求のエントリ41をリンクリスト40の適切な位置に挿入するリスト操作を実行する、例えば、実行部である。リスト操作部221は、リスト操作を実行したリンクリスト40を、例えば、記憶部等のリストテーブル222内に格納する。
図4は、リンクリスト40のエントリ構成の一例を示す説明図である。図4に示すリンクリスト40内のエントリ41は、エントリ番号41Aと、前方向ポインタ41Bと、後方向ポインタ41Cとを有する。エントリ番号41Aは、リンクリスト40内の対象ユーザフローのフロー番号のエントリ41を識別する番号である。前方向ポインタ41Bは、対象ユーザフローと前方向に隣接するユーザフローのフロー番号のエントリ41を識別するエントリ番号である。後方向ポインタ41Cは、対象ユーザフローと後方向に隣接するユーザフローのフロー番号のエントリ41を識別するエントリ番号である。尚、エントリ番号41Aは、例えば、ソフトの配列の要素番号等であっても良い。リンクリスト40は、エントリ番号41A毎に双方向の前方向ポインタ41B及び後方向ポインタ41Cを管理しているため、エントリ番号41Aの追加、削除や並び替えが容易である。
図5は、リンクリスト40の一例を示す説明図である。図5に示すリンクリスト40は、エントリ41と、先頭(ヘッド)42と、最後尾(テイル)43とを有し、先頭42から最後尾43までの出力順序にユーザフローのエントリ41を繋げた双方向の配列リストである。リスト管理部22は、リストテーブル222内に格納中のリンクリスト40を参照し、リンクリスト40内の先頭42から最後尾43までの各エントリ41を辿ることで、対象ユーザフローの出力順序を識別できる。また、リスト管理部22は、リンクリスト40を参照し、リンクリスト40の最後尾43から先頭42までの各エントリ41を辿ることで、ユーザフローの出力順序の逆経路を識別できる。
図6は、優先度を設定したリンクリスト40の一例を示す説明図である。図6に示すリンクリスト40は、先頭42から最後尾43までのエントリ41の内、境界44のエントリ41を指定可能にし、境界44、先頭42若しくは最後尾43で優先度を設定する。リスト操作部221は、例えば、第1の境界44Aを指定し、先頭42のエントリ41から第1の境界44Aのエントリ41までの区間内の各エントリ41に第1位の優先度Lv1を設定する。また、リスト操作部221は、第2の境界44Bを指定し、第1の境界44Aのエントリ41直後のエントリ41から第2の境界44Bのエントリ41までの区間内の各エントリ41に第2位の優先度Lv2を設定する。
また、リスト操作部221は、第3の境界44Cを指定し、第2の境界44Bのエントリ41直後のエントリ41から第3の境界44Cのエントリ41までの区間内の各エントリ41に第3位の優先度Lv3を設定する。また、リスト操作部221は、第3の境界44Cのエントリ41直後のエントリ41から最後尾43までの区間の各エントリ41に第4位の優先度Lv4を設定する。尚、第1位の優先度Lv1は優先順位が最も高く、優先順位の高い順に第2位の優先度Lv2、第3位の優先度Lv3、第4位の優先度Lv4…の順である。従って、リスト操作部221は、リンクリスト40内の任意のエントリ41に境界44を指定することで簡単に優先度を設定できる。
リスト管理部22の発行部224は、リンクリスト40内の先頭エントリ41を定期的に参照し、先頭のエントリ41がある場合、先頭エントリ41のユーザフローに対応したクレジットカウンタ33Aに固定長のクレジットを発行する。その結果、キュー長カウンタ211Aは、現在キュー長から発行クレジット量を減算することで現在キュー長を更新する。また、クレジットカウンタ33Aは、現在クレジット量に発行クレジット量を加算することで現在クレジット量を更新する。発行クレジット量は、少なくとも次の出力キュー32Aの選択に要する処理時間よりも大の時間をデータ換算したデータ量、例えば、固定長の1024バイトとする。図7は、100Gbpsの回線帯域の150MHzクロックと発行クレジット量との関係の一例を示す説明図である。発行クレジット量は、例えば、150MHzクロックの8クロック分の時間相当のデータ量である。例えば、図7の上段に示す比較例として100Gbpsの回線帯域で従来のRR方式を採用した場合では、150MHzの1クロック分の時間内に出力キューを選択する処理時間を確保する必要がある。従って、回線帯域が広くなるに連れて処理時間を確保するのは困難と言える。これに対して、本実施例では、図7の下段に示すように、150MHzクロックの8クロック分(クレジット量)相当の時間内に出力キュー32Aを選択すれば良く、回線帯域が広くなったとしても出力キュー32Aの選択に要する処理時間を確保している。
スケジュール管理部20及びバッファ管理部30は、ユーザフロー毎に、出力キュー32A、クレジットカウンタ33A及びキュー長カウンタ211Aを生成する。
次に本実施例の伝送システム1の動作について説明する。図8及び図9は、短パケット出力時のスケジュール管理部20及びバッファ管理部30の動作の一例を示す説明図である。図8の(A)に示す伝送装置3は、例えば、バッファ32内の対象ユーザフロー対応の出力キュー32Aに格納中のパケット長(キュー長)を“0”バイト、対象ユーザフロー対応のキュー長カウンタ211Aの現在キュー長を“0バイト”とする。更に、伝送装置3は、対象ユーザフロー対応のクレジットカウンタ33Aの現在クレジット量を“0バイト”とする。
バッファ管理部30内のEnQ部31は、図8の(A)に示すように、64バイトのパケットを入力すると、入力パケットが属する対象ユーザフロー対応の出力キュー32A内に64バイトの入力パケットを格納する。EnQ部31は、64バイトのパケットに関するパケット情報をスケジュール管理部20に通知する。尚、パケット情報は、入力パケットのパケット長及び入力パケットが属するユーザフローのフロー番号等を含む。
スケジュール管理部20内の対象ユーザフロー対応のキュー長カウンタ211Aは、現在キュー長“0バイト”に入力パケット長“64バイト”を加算することで“64バイト”として現在キュー長を更新する。スケジュール管理部20内の発行部224は、リンクリスト40内の先頭エントリ41を定期的に参照して、対象ユーザフローの先頭エントリ41があるか否かを判定する。発行部224は、対象ユーザフローの先頭エントリ41がある場合、図8の(B)に示すように、発行クレジット“1Kバイト(1024バイト)”を先頭エントリ41のユーザフロー対応の出力キュー32Aのクレジットカウンタ33Aに発行する。クレジットカウンタ33Aは、現在クレジット量“0バイト”に発行クレジット量“1024バイト”を加算することで“1024バイト”として現在クレジット量を更新する。キュー長カウンタ211Aは、現在キュー長“64バイト”から発行クレジット量“1024バイト”を減算することで“−960バイト”として現在キュー長を更新する。
バッファ管理部30内の出力制御部33は、対象ユーザフロー対応のクレジットカウンタ33A内の現在クレジット量“1024バイト”が正であるか否かを判定する。出力制御部33は、現在クレジット量が正である場合に、図8の(C)に示すように、対象ユーザフロー対応の出力キュー32Aに格納された64バイトのパケットを出力する。そして、対象ユーザフロー対応のクレジットカウンタ33Aは、現在クレジット量“1024バイト”から出力パケット長“64バイト”を減算することで“960バイト”として現在クレジット量を更新する。
更に、EnQ部31は、図8の(D)に示すように、64バイトのパケットを入力すると、64バイトの入力パケットを対象ユーザフロー対応の出力キュー32A内に格納する。そして、EnQ31は、64バイトのパケット格納に関わるパケット情報をスケジュール管理部20に通知する。対象ユーザフロー対応のキュー長カウンタ211Aは、現在キュー長“−960バイト”に64バイトの入力パケット長を加算することで“−896バイト”の現在キュー長を更新する。
更に、出力制御部33は、対象ユーザフロー対応のクレジットカウンタ33A内の現在クレジット量“960バイト”が正であるか否かを判定する。出力制御部33は、現在クレジット量が正である場合に、対象ユーザフロー対応の出力キュー32Aを選択し、図9の(A)に示すように、出力キュー32Aに格納された64バイトのパケットを出力する。そして、対象ユーザフロー対応のクレジットカウンタ33Aは、現在クレジット量“960バイト”から出力パケット長“64バイト”を減算することで“896バイト”として現在クレジット量を更新する。
更に、EnQ部31は、図9の(B)に示すように、1024バイトのパケットを入力すると、入力パケットを対象ユーザフロー対応の出力キュー32A内に格納する。そして、EnQ部31は、1024バイトのパケット格納に関わるパケット情報をスケジュール管理部20に通知する。対象ユーザフロー対応のキュー長カウンタ211Aは、現在キュー長“−896バイト”に1024バイトの入力パケット長を加算することで“128バイト”として現在キュー長を更新する。
更に、出力制御部33は、対象ユーザフロー対応のクレジットカウンタ33A内の現在クレジット量“896バイト”が正であるか否かを判定する。出力制御部33は、現在クレジット量“896バイト”が正である場合に、図9の(C)に示すように、対象ユーザフロー対応の出力キュー32A内に格納された1024バイトのパケットを出力する。そして、対象ユーザフロー対応のクレジットカウンタ33Aは、現在クレジット量“896バイト”から出力パケット長“1024バイト”を減算することで“−128バイト”として現在クレジット量を更新する。
更に、発行部224は、リンクリスト40内の先頭エントリ41を定期的に参照して、対象ユーザフローの先頭エントリ41があるか否かを判定する。発行部224は、対象ユーザフローの先頭エントリ41がある場合、図9の(D)に示すように、発行クレジットを先頭エントリ41の対象ユーザフロー対応の出力キュー32Aのクレジットカウンタ33Aに発行する。対象ユーザフロー対応のクレジットカウンタ33Aは、現在クレジット量“−128バイト”に発行クレジット量“1024バイト”を加算することで“896バイト”として現在クレジット量を更新する。更に、対象ユーザフロー対応のキュー長カウンタ211Aは、現在キュー長“128バイト”から発行クレジット量“1024バイト”を減算することで“−896バイト”として現在キュー長を更新する。
伝送装置3は、対象ユーザフロー対応の出力キュー32A内に出力可能なパケットがあり、かつ、対象ユーザフロー対応のクレジットカウンタ33A内の現在クレジット量が正の場合に、出力キュー32A内のパケットをパケット単位で出力する。更に、伝送装置3は、対象ユーザフロー対応の出力キュー32A内に出力可能なパケットがある場合に、パケット単位でパケットを順次出力する。その結果、伝送装置3は、現在クレジット量が0以下になるまで出力キュー32A内の短パケットをパケット単位で順次出力できる。
伝送装置3は、リンクリスト40を定期的に参照して先頭エントリ41のユーザフローに対応したクレジットカウンタ33Aに固定長のクレジットを発行する。その結果、クレジットを発行された対象ユーザフロー対応の出力キュー32Aは、パケットが出力可能な状態となる。
図10及び図11は、長パケット出力時のスケジュール管理部20及びバッファ管理部30の動作の一例を示す説明図である。図10(A)の伝送装置3は、バッファ32内の対象ユーザフロー対応の出力キュー32A内に格納中のパケット長を“0”バイト、対象ユーザフロー対応のキュー長カウンタ211Aの現在キュー長を“0バイト”とする。更に、伝送装置3は、対象ユーザフロー対応のクレジットカウンタ33Aの現在クレジット量を“0バイト”とする。
EnQ部31は、図10の(A)に示すように、“4000バイト”のパケットを入力すると、入力パケットを対象ユーザフロー対応の出力キュー32A内に格納する。そして、EnQ部31は、4000バイトのパケット格納に関するパケット情報をスケジュール管理部20に通知する。対象ユーザフロー対応のキュー長カウンタ211Aは、現在キュー長“0バイト”に入力パケット長“4000バイト”を加算することで“4000バイト”として現在キュー長を更新する。
発行部224は、リンクリスト40の先頭エントリ41を定期的に参照して、対象ユーザフローの先頭エントリ41があるか否かを判定する。発行部224は、対象ユーザフローの先頭エントリ41がある場合、図10の(B)に示すように、発行クレジット“1024バイト”を先頭エントリ41の対象ユーザフロー対応のクレジットカウンタ33Aに発行する。クレジットカウンタ33Aは、現在クレジット量“0バイト”に発行クレジット量“1024バイト”を加算することで“1024バイト”として現在クレジット量を更新する。更に、対象ユーザフロー対応のキュー長カウンタ211Aは、現在キュー長“4000バイト”から発行クレジット量“1024バイト”を減算することで“2976バイト”として現在キュー長を更新する。
出力制御部33は、対象ユーザフロー対応のクレジットカウンタ33A内の現在クレジット量“1024バイト”が正であるか否かを判定する。出力制御部33は、現在クレジット量“1024バイト”が正である場合に、図10の(C)に示すように、対象ユーザフロー対応の出力キュー32A内に格納中の4000バイトのパケットを出力する。そして、対象ユーザフロー対応のクレジットカウンタ33Aは、現在クレジット量“1024バイト”から出力パケット長“4000バイト”を減算することで“−2976バイト”として現在クレジット量を更新する。
更に、EnQ部31は、図10の(D)に示すように、64バイトのパケットを入力した場合に、入力パケットを対象ユーザフロー対応の出力キュー32A内に格納する。そして、EnQ部31は、64バイトのパケット格納に関するパケット情報をスケジュール管理部20に通知する。対象ユーザフロー対応のキュー長カウンタ211Aは、現在キュー長“2976バイト”に入力パケット長“64バイト”を加算することで“3040バイト”として現在キュー長を更新する。
発行部224は、リンクリスト40内の先頭エントリ41を定期的に参照して、対象ユーザフローの先頭エントリ41があるか否かを判定する。発行部224は、対象ユーザフローの先頭エントリ41がある場合、図11の(A)に示すように、発行クレジット“1024バイト”を先頭エントリ41の対象ユーザフロー対応の出力キュー32Aのクレジットカウンタ33Aに発行する。クレジットカウンタ33Aは、現在クレジット量“−2976バイト”に発行クレジット量“1024バイト”を加算することで“−1952バイト”として現在クレジット量を更新する。更に、対象ユーザフロー対応のキュー長カウンタ211Aは、現在キュー長“3040バイト”から発行クレジット量“1024バイト”を減算することで“2016バイト”として現在キュー長を更新する。
発行部224は、リンクリスト40内の先頭エントリ41を定期的に参照して、対象ユーザフローの先頭エントリ41があるか否かを判定する。発行部224は、対象ユーザフローの先頭エントリ41がある場合、図11の(B)に示すように、発行クレジット“1024バイト”を先頭エントリ41の対象ユーザフロー対応の出力キュー32Aのクレジットカウンタ33Aに発行する。クレジットカウンタ33Aは、現在クレジット量“−1952バイト”に発行クレジット量“1024バイト”を加算することで“−928バイト”として現在クレジット量を更新する。更に、対象ユーザフロー対応のキュー長カウンタ211Aは、現在キュー長“2016バイト”から発行クレジット量“1024バイト”を減算することで“992バイト”として現在キュー長を更新する。
発行部224は、リンクリスト40内の先頭エントリ41を定期的に参照して、対象ユーザフローの先頭エントリ41があるか否かを判定する。発行部224は、対象ユーザフローの先頭エントリ41がある場合、図11の(C)に示すように、発行クレジット“1024バイト”を先頭エントリ41の対象ユーザフロー対応の出力キュー32Aのクレジットカウンタ33Aに発行する。クレジットカウンタ33Aは、現在クレジット量“−928バイト”に発行クレジット量“1024バイト”を加算することで“96バイト”として現在クレジット量を更新する。更に、対象ユーザフロー対応のキュー長カウンタ211Aは、現在キュー長“992バイト”から発行クレジット量“1024バイト”を減算することで“−32バイト”として現在キュー長を更新する。
更に、出力制御部33は、対象ユーザフロー対応のクレジットカウンタ33A内の現在クレジット量“96バイト”が正であるか否かを判定する。出力制御部33は、現在クレジット量“96バイト”が正である場合に、図11の(D)に示すように、対象ユーザフロー対応の出力キュー32A内に格納中の64バイトのパケットを出力する。そして、対象ユーザフロー対応のクレジットカウンタ33Aは、現在クレジット量“96バイト”から出力パケット長“64バイト”を減算することで“−32バイト”として現在クレジット量を更新する。
伝送装置3は、対象ユーザフロー対応の出力キュー32A内にパケットがあり、かつ、現在クレジット量が正の場合に、出力キュー32A内のパケットが長パケットの場合でも、出力キュー32A内の長パケットをパケット単位で出力する。その結果、伝送装置3は、対象ユーザフロー対応の出力キュー32A内の長パケットをパケット単位で出力できる。
伝送装置3は、対象ユーザフロー対応の出力キュー32Aからパケット出力する場合に、現在クレジット量から出力パケット長を減算することで、対象ユーザフロー対応のクレジットカウンタ33Aの現在クレジット量を更新する。伝送装置3は、リンクリスト40を定期的に参照して先頭エントリ41のユーザフローに対応したクレジットカウンタ33Aに固定長のクレジットを発行する。伝送装置3は、クレジットカウンタ33Aの現在クレジット量が正になるまで、対象ユーザフローに対応したパケット出力を停止する。
図12は、エントリ格納処理に関わる追加制御部21の処理動作の一例を示すフローチャートである。図12に示すエントリ格納処理は、第1のタイミングに応じて対象ユーザフローのパケットのエントリ41をFIFO212A内に格納する処理である。
図12において追加制御部21内の要求判定部212は、EnQ部31からのパケット情報に基づき、対象ユーザフローへのパケットが入力されたか否かを判定する(ステップS11)。要求判定部212は、対象ユーザフローへのパケットが入力された場合に(ステップS11肯定)、対象ユーザフロー対応のキュー長カウンタ211A内の現在キュー長に入力パケット長を加算する(ステップS11A)。要求判定部212は、対象ユーザフロー対応のキュー長カウンタ211A内の現在キュー長が正であるか否かを判定する(ステップS12)。要求判定部212は、現在キュー長が正である場合に(ステップS12肯定)、対象ユーザフロー対応の回線帯域がOKであるか否かを判定する(ステップS13)。要求判定部212は、回線帯域がOKである場合に(ステップS13肯定)、対象ユーザフローのエントリ41がFIFO212A内に既にあるか否かを判定する(ステップS14)。
要求判定部212は、対象ユーザフローのエントリがFIFO212A内に既にない場合に(ステップS14否定)、対象ユーザフローのエントリ41をFIFO212A内に格納し(ステップS15)、図12に示す処理動作を終了する。要求判定部212は、対象ユーザフローのエントリ41がFIFO212A内にない場合にのみ、当該エントリ41をFIFO212A内に格納する。その結果、要求判定部212は、FIFO212A内のリンクリスト40に関わる同一エントリの重複登録を防止し、1エントリ/1フローを実現できる。
要求判定部212は、対象ユーザフローへのパケットが入力されなかった場合に(ステップS11否定)、対象ユーザフロー対応の回線帯域の更新を検出したか否かを判定する(ステップS16)。尚、回線帯域の更新とは、例えば、NGからOKへの更新である。要求判定部212は、回線帯域の更新を検出した場合に(ステップS16肯定)、対象ユーザフロー対応のキュー長カウンタ211Aの現在キュー長が正であるか否かを判定すべく、ステップS12に移行する。
要求判定部212は、回線帯域の更新を検出しなかった場合に(ステップS16否定)、対象ユーザフロー対応のクレジットカウンタ33Aへのクレジット発行が完了したか否かを判定する(ステップS17)。要求判定部212は、クレジット発行が完了した場合に(ステップS17肯定)、対象ユーザフロー対応の現在キュー長から発行クレジット量を減算する(ステップS18)。要求判定部212は、発行クレジット量減算後、対象ユーザフロー対応の現在キュー長が正であるか否かを判定すべく、ステップS12に移行する。
要求判定部212は、クレジット発行が完了しなかった場合に(ステップS17否定)、図12に示す処理動作を終了する。要求判定部212は、対象ユーザフロー対応の現在キュー長が正でない場合に(ステップS12否定)、図12に示す処理動作を終了する。要求判定部212は、対象ユーザフロー対応の回線帯域がOKでない場合に(ステップS13否定)、又は対象ユーザフローのエントリがFIFO212A内に既にある場合に(ステップS14肯定)、図12に示す処理動作を終了する。
図12に示すエントリ格納処理の要求判定部212は、対象ユーザフローへのパケットが入力された場合、対象ユーザフロー対応の回線帯域を更新した場合や、対象ユーザフロー対応のクレジット発行が完了した場合に、現在キュー長が正であるか否かを判定する。要求判定部212は、対象ユーザフロー対応の現在キュー長が正、かつ、対象ユーザフロー対応の回線帯域がOKの場合に、対象ユーザフローのエントリ41がFIFO212A内に既にあるか否かを判定する。要求判定部212は、対象ユーザフローのエントリ41がFIFO212A内にない場合にのみ、エントリ41をFIFO212A内に格納する。その結果、要求判定部212は、リンクリスト40に対する同一エントリ41の重複登録を防止し、1エントリ/1フローを実現できる。
図13は、エントリ読出処理に関わる追加制御部21の処理動作の一例を示すフローチャートである。エントリ読出処理は、第2のタイミングに応じて、FIFO212A内の先頭のエントリ41を読み出し、読み出したエントリ41に関わるリスト操作要求を発行する処理である。
図13において追加制御部21内の要求判定部212は、FIFO212A内にエントリ41が存在するか否かを判定する(ステップS21)。要求判定部212は、FIFO212A内にエントリ41が存在する場合に(ステップS21肯定)、リスト管理部22側で処理可能な状態であるか否かを判定する(ステップS22)。
要求判定部212は、リスト管理部22側で処理可能な状態の場合に(ステップS22肯定)、FIFO212A内の先頭エントリ41を取得する(ステップS23)。要求判定部212は、対象ユーザフロー対応のキュー長カウンタ211Aの内容を参照して最新状態情報を取得する(ステップS24)。要求判定部212は、対象ユーザフローの最新状態情報を取得した後、リスト操作部221に対して対象ユーザフローのエントリ41に関わる、最新の状態情報を反映したリスト操作要求を発行する(ステップS25)。尚、リスト操作要求は、例えば、リンクリスト40に対してエントリ41の追加、削除や並び替えのリスト操作を要求するコマンドである。その結果、リスト操作部221は、要求判定部212からのリスト操作要求に応じて、FIFO212A内の先頭エントリ取得時の対象ユーザフローの最新状態を認識できる。要求判定部212は、リスト操作要求を発行した後、FIFO212A内の先頭エントリ41を削除し(ステップS26)、図13に示す処理動作を終了する。
要求判定部212は、FIFO212A内にエントリ41が存在しない場合に(ステップS21否定)、図13に示す処理動作を終了する。要求判定部212は、リスト管理部22側で処理可能な状態でない場合に(ステップS22否定)、図13に示す処理動作を終了する。
図13に示すエントリ読出処理の要求判定部212は、FIFO212A内にエントリ41が存在し、かつ、リスト管理部22側で処理が可能な状態の場合に、対象ユーザフローの最新状態情報を取得する。要求判定部212は、エントリ41に関わる、最新状態情報を反映したリスト操作要求をリスト操作部221に通知する。つまり、リスト操作部221は、処理が可能なタイミングで、要求判定部212からリスト操作要求を受け付ける。その結果、例えば、異なるユーザフローの短パケットが短い間隔で到着しても、そのフロー番号をFIFO212A内に一時的に記憶することで輻輳を吸収するため、処理可能時間よりも短い間隔で複数のリスト操作要求が集中するような場合にも対応できる。
尚、任意のユーザフローからリスト操作要求が発生するタイミングの最短時間は、最短パケットの処理時間となる。しかし、同一ユーザフローの最短パケットが連続した場合でも、固定長のクレジット量単位で管理しているため、リスト操作を最短パケットの処理時間内に終わらせる必要はなく、クレジット量相当の時間内に終わらせれば良い。
図14は、リスト操作処理に関わるリスト操作部221の処理動作の一例を示すフローチャートである。図14に示すリスト操作処理は、リスト操作要求を受信した場合に、対象ユーザフローに対応したリスト操作要求に関わるエントリ41を用いてリンクリスト40のリスト操作を実行する処理である。
図14においてリスト操作部221は、追加制御部21内の要求判定部212から対象ユーザフロー対応のエントリ41に関わるリスト操作要求を受信したか否かを判定する(ステップS31)。リスト操作部221は、対象ユーザフロー対応のリスト操作要求を受信した場合に(ステップS31肯定)、リストテーブル222内のリンクリスト40を参照する(ステップS32)。
リスト操作部221は、参照したリンクリスト40内にリスト操作要求に関わる同一エントリ41があるか否かを判定する(ステップS33)。リスト操作部221は、リンクリスト40内に同一エントリ41がある場合に(ステップS33肯定)、エントリ41の優先度変更要求を検出したか否かを判定する(ステップS34)。尚、優先度変更要求は、例えば、図示せぬ管理端末から指定可能な要求である。
リスト操作部221は、エントリ41の優先度変更要求を検出した場合に(ステップS34肯定)、リンクリスト40内の該当エントリ41の優先度変更のリスト操作を実行する(ステップS35)。尚、優先度変更のリスト操作は、リンクリスト40内のエントリ41に境界44を指定することでリンクリスト40内のエントリ41の優先度を変更するリスト操作である。リスト操作部221は、エントリ41の優先度を変更したリンクリスト40をリストテーブル222内に格納し(ステップS36)、図14に示す処理動作を終了する。
リスト操作部221は、リンクリスト40内に同一エントリ41がない場合に(ステップS33否定)、リンクリスト40内の各優先度の境界44又は最後尾43にリスト操作要求に関わるエントリを追加するリスト操作を実行する(ステップS37)。尚、エントリ追加のリスト操作は、リンクリスト40内の各優先度の境界44又は最後尾43にエントリ41を追加するリスト操作である。そして、リスト操作部221は、優先度の境界44又は最後尾43にエントリ41を追加したリンクリスト40をリストテーブル222内に格納すべく、ステップS36に移行する。
リスト操作部221は、エントリ41の優先度変更要求を検出しなかった場合に(ステップS34否定)、リンクリスト40内の該当エントリ41の順序を並び替える並び替え要求を検出したか否かを判定する(ステップS38)。リスト操作部221は、並び替え要求を検出した場合に(ステップS38肯定)、並び替えのリスト操作を実行する(ステップS39)。尚、並び替えのリスト操作は、リンクリスト40内の任意のエントリ41の順序を並び替えるリスト操作である。そして、リスト操作部221は、エントリ41の順序を並び替えたリンクリスト40をリストテーブル222内に格納すべく、ステップS36に移行する。
リスト操作部221は、並び替え要求を検出しなかった場合に(ステップS38否定)、該当エントリ41を破棄し(ステップS40)、図14に示す処理動作を終了する。尚、ステップS40の該当エントリ41は、新しく追加しようとするエントリ、すなわち新規エントリに相当する。リスト操作部221は、対象ユーザフロー対応のエントリ41に関わるリスト操作要求を受信しなかった場合に(ステップS31否定)、図14に示す処理動作を終了する。
図14に示すリスト操作処理のリスト操作部221は、対象ユーザフローのリスト操作要求を受信した場合に、リンクリスト40内にリスト操作要求に関わるエントリ41と同一のエントリ41があるか否かを判定する。リスト操作部221は、リンクリスト40内にリスト操作要求と同一のエントリ41がない場合に、リンクリスト40内の優先度の境界44又は最後尾43にリスト操作要求のエントリ41を追加するリスト操作を実行する。その結果、リスト操作部221は、リンクリスト40内の優先度の境界44又は最後尾43にエントリ41を順次追加できる。尚、エントリ41を追加するリスト操作には、新規のエントリ41を先頭42に配置するリンクリスト40のリスト操作を含む。
リスト操作部221は、リンクリスト40内にリスト操作要求と同一のエントリ41があり、かつ、優先度変更要求の場合に、指定した境界44に応じてエントリ41の優先度を設定するリスト操作を実行する。その結果、リスト操作部221は、リンクリスト40内のエントリ41の優先度を自由に設定できる。
リスト操作部221は、リンクリスト40内にリスト操作要求と同一のエントリ41があり、かつ、並び替え要求の場合に、リンクリスト40内のエントリ41を並び替えるリスト操作を実行する。その結果、リスト操作部221は、リンクリスト40内のエントリ41を簡単に並び替えることができる。
リスト操作部221は、リンクリスト40内の先頭42のエントリ41のユーザフローに対応したクレジット発行が完了する都度、該当エントリ41をリンクリスト40から削除する。そして、リスト操作部221は、先頭42のエントリ41のリンクリスト40へのリスト再追加が可能な場合、エントリ41をFIFO212Aに追加登録する。その結果、出力制御部33は、リンクリスト40の先頭42から最後尾43へと、エントリ41のユーザフローに対応した出力キュー32Aからパケットを順次出力することになるため、RR方式に類似した動作を実現している。
次に、並び替えのリスト操作について説明する。図15は、並び替えのリスト操作に関わるリンクリスト40のエントリ41の変更推移の一例を示す説明図である。図15の(A)に示すリンクリスト40は、例えば、先頭42から最後尾43までの区間のエントリ41としてエントリ番号#10→#0→#11→#5→#3→#71→#31の順に配置する。そして、エントリ番号#0に第1位の境界44A、エントリ番号#3に第2位の境界44B、エントリ番号#31に最後尾43を設定する。その結果、エントリ番号#10及び#0は第1位の優先度Lv1、エントリ番号#11、#5及び#3は第2位の優先度Lv2、エントリ番号#71及び#31は第3位の優先度Lv3として設定する。
次に、新規ユーザフローのエントリ番号#53を第1位の優先度Lv1に並び替えるリスト操作について説明する。リスト操作部221は、図15の(B)に示すように、リンクリスト40内のエントリ番号#0の直後に新規のエントリ番号#53を配置するリスト操作を実行する。この際、エントリ番号#53の前方向ポインタ41B及び後方向ポインタ41Cの変更は勿論のこと、エントリ番号#0の後方向ポインタ41Cを#11→#53、エントリ番号#11の前方向ポインタ41Bを#0→#53に書き換える。その結果、リスト操作部221は、リンクリスト40内のエントリ番号#10とエントリ番号#11との間に新規のエントリ番号#53を簡単に挿入できる。
また、リンクリスト40内の第3位の優先度Lv3のエントリ番号#71及び#31を第1位の優先度Lv1に並び替えるリスト操作について説明する。リスト操作部221は、図15の(C)に示すように、リンクリスト40内のエントリ番号#53の直後にエントリ番号#71及び#31を配置するリスト操作を実行する。この際、エントリ番号#71及び#31の前方向ポインタ41B及び後方向ポインタ41Cの変更は勿論のこと、エントリ番号#53の後方向ポインタ41Cを#11→#71、エントリ番号#11の前方向ポインタ41Bを#53→#31に書き換える。その結果、リスト操作部221は、リンクリスト40内の第3位の優先度Lv3のエントリ番号#71及び#31を第1位の優先度Lv1に簡単に設定できる。
図16は、第1のパケット出力処理に関わる出力制御部33の処理動作の一例を示すフローチャートである。第1のパケット出力処理は、発行クレジットを取得したクレジットカウンタ33Aに対応する出力キュー32Aからパケット単位でパケットを出力する処理である。
図16において出力制御部33は、発行部224から発行クレジットを取得したか否かを判定する(ステップS51)。出力制御部33は、発行クレジットを取得した場合に(ステップS51肯定)、対象ユーザフロー対応の出力キュー32Aのクレジットカウンタ33Aの現在クレジット量に発行クレジット量を加算することで現在クレジット量を更新する(ステップS52)。出力制御部33は、現在クレジット量が正(プラス値)であるか否かを判定する(ステップS53)。出力制御部33は、現在クレジット量が正の場合に(ステップS53肯定)、対象ユーザフロー対応の出力キュー32A内に出力可能なパケットがあるか否かを判定する(ステップS54)。
出力制御部33は、対象ユーザフロー対応の出力キュー32A内に出力可能なパケットがある場合に(ステップS54肯定)、当該出力キュー32Aからパケットをパケット単位で出力する(ステップS55)。出力制御部33は、対象ユーザフロー対応のクレジットカウンタ33A内の現在クレジット量から出力パケット長を減算することで現在クレジット量を更新する(ステップS56)。
出力制御部33は、現在クレジット量の更新後、対象ユーザフロー対応の出力キュー32A内に出力可能なパケットがあるか否かを判定する(ステップS57)。出力制御部33は、対象ユーザフロー対応の出力キュー32A内に出力可能なパケットがない場合に(ステップS57否定)、図16に示す処理動作を終了する。
出力制御部33は、対象ユーザフロー対応の出力キュー32A内に出力可能なパケットがある場合に(ステップS57肯定)、対象ユーザフロー対応の現在クレジット量が正であるか否かを判定する(ステップS58)。出力制御部33は、現在クレジット量が正の場合に(ステップS58肯定)、対象ユーザフロー対応の出力キュー32Aからパケット出力すべく、図中のM1に移行する。
出力制御部33は、現在クレジット量が正でない場合に(ステップS58否定)、発行クレジットを取得したか否かを判定すべく、ステップS51に移行する。
出力制御部33は、発行クレジットを取得しなかった場合に(ステップS51否定)、図16に示す処理動作を終了する。また、出力制御部33は、現在クレジット量が正でない場合に(ステップS53否定)、対象ユーザフロー対応の出力キュー32A内に出力可能なパケットがあるか否かを判定する(ステップS59)。出力制御部33は、出力キュー32A内に出力可能なパケットがある場合に(ステップS59肯定)、発行クレジットを取得したか否かを判定すべく、ステップS51に移行する。
出力制御部33は、対象ユーザフロー対応の出力キュー32A内に出力可能なパケットがない場合に(ステップS59否定)、図16に示す処理動作を終了すべく、図中のM2に移行する。また、出力制御部33は、対象ユーザフロー対応の出力キュー32A内に出力可能なパケットがない場合に(ステップS54否定)、図16に示す処理動作を終了する。
出力制御部33は、対象ユーザフロー対応のクレジットカウンタ33Aの現在クレジット量が正、かつ、対応の出力キュー32A内に出力可能なパケットがある場合に、対象ユーザフロー対応の出力キュー32Aからパケット単位でパケットを出力する。その結果、出力制御部33は、現在クレジット量が0以下になるまで対象ユーザフローのパケットをパケット単位で順次出力できる。
出力制御部33は、現在クレジット量が0以下、かつ、対応の出力キュー32A内に出力可能なパケットがある場合に、発行部224からのクレジットを取得するまでパケット出力を待機する。出力制御部33は、発行クレジットを取得した場合に、現在クレジット量に発行クレジット量を加算することで現在クレジット量を更新し、現在クレジット量が正となると、対応の出力キュー32Aからパケット単位でパケット出力する。その結果、出力制御部33は、現在クレジット量が0以下になるまで対象ユーザフロー対応の出力キュー32Aのパケットをパケット単位で順次出力できる。
図17は、第2のパケット出力処理に関わる出力制御部33の処理動作の一例を示すフローチャートである。第2のパケット出力処理は、EnQ部31からパケットを入力した場合に、対象ユーザフロー対応の出力キュー32Aからパケット単位でパケットを出力する処理である。
図17において出力制御部33は、EnQ部31からパケットを入力したか否かを判定する(ステップS61)。出力制御部33は、パケットを入力した場合に(ステップS61肯定)、入力パケットを対象ユーザフロー対応の出力キュー32A内に格納し(ステップS62)、現在クレジット量が正であるか否かを判定する(ステップS63)。
出力制御部33は、現在クレジット量が正である場合に(ステップS63肯定)、当該出力キュー32Aからパケットをパケット単位で出力する(ステップS64)。出力制御部33は、対象ユーザフロー対応のクレジットカウンタ33A内の現在クレジット量から出力パケット長を減算することで現在クレジット量を更新し(ステップS65)、図17に示す処理動作を終了する。出力制御部33は、EnQ部31からパケットを入力しなかった場合に(ステップS61否定)、図17に示す処理動作を終了する。出力制御部33は、現在クレジット量が正でない場合に(ステップS63否定)、図17に示す処理動作を終了する。
出力制御部33は、対象ユーザフロー対応のクレジットカウンタ33Aの現在クレジット量が正、かつ、対応の出力キュー32A内に出力可能なパケットがある場合に、対象ユーザフロー対応の出力キュー32Aからパケット単位でパケットを出力する。その結果、出力制御部33は、現在クレジット量が0以下になるまで対象ユーザフローのパケットをパケット単位で順次出力できる。
出力制御部33は、現在クレジット量が0以下、かつ、対応の出力キュー32A内に出力可能なパケットがある場合に、発行部224からのクレジットを取得するまでパケット出力を待機する。出力制御部33は、発行クレジットを取得した場合に、現在クレジット量に発行クレジット量を加算することで現在クレジット量を更新し、現在クレジット量が正となると、対応の出力キュー32Aからパケット単位でパケット出力する。その結果、出力制御部33は、現在クレジット量が0以下になるまで対象ユーザフロー対応の出力キュー32Aのパケットをパケット単位で順次出力できる。
尚、説明の便宜上、単一のキュー階層でユーザフローの出力順序を示すリンクリスト40を例示したが、通常の伝送システムでは、例えば、物理ポート→仮想ポート→ユーザフローの複数段のキュー階層構造を有している。そこで、複数段のキュー階層構造のリンクリストに関わる全体リンクリストについて説明する。図18は、キュー階層構造の一例を示す説明図である。図18に示すキュー階層構造は、回線100と、回線100と下位階層関係にある物理ポート101と、物理ポート101と下位階層関係にある仮想ポート102と、仮想ポート102と下位階層関係にあるユーザフロー103とを含む階層構造である。
伝送装置3は、キュー階層構造全体のリンクリストとして全体リンクリストを管理している。全体リンクリストは、回線100を識別するエントリ300と、物理ポート101の物理ポート番号を識別するエントリ301と、仮想ポート102の仮想ポート番号を識別するエントリ302と、ユーザフロー103のフロー番号を識別するエントリ303とを双方向ポインタで管理している。例えば、回線100のエントリ300の接続順序は、物理ポート101Aのエントリ301A→物理ポート101Bのエントリ301Bの順である。物理ポート101Aのエントリ301Aの接続順序は、仮想ポート102Aのエントリ302A→仮想ポート102Bのエントリ302Bの順である。更に、仮想ポート102Aのエントリ302Aの接続順序は、ユーザフロー103Aのエントリ303A→ユーザフロー103Bのエントリ303Bの順である。また、例えば、物理ポート101Bのエントリ301Bの接続順序は、仮想ポート102Dのエントリ302D→仮想ポート102Cのエントリ302Cの順である。また、仮想ポート102Cのエントリ302Cの接続順序は、ユーザフロー103Fのエントリ303F→ユーザフロー103Dのエントリ303D→ユーザフロー103Eのエントリ303Eの順である。
図19は、キュー階層構造上の全体リンクリストの参照動作の一例を示す説明図である。図19に示す全体リンクリストの例として、回線のエントリ300の接続順序は、物理ポートのエントリ301C→物理ポートのエントリ301Dの順である。物理ポートのエントリ301Cの接続順序は、仮想ポートのエントリ302G→仮想ポートのエントリ302Eの順である。更に、仮想ポートのエントリ302Gの接続順序は、ユーザフローのエントリ303J→ユーザフローのエントリ303H→ユーザフローのエントリ303Mの順である。リスト管理部22は、全体リンクリストを参照し、回線のエントリ300→物理ポートのエントリ301C→仮想ポートのエントリ302G→ユーザフローのエントリ303Jの伝送経路を識別する。更に、リスト管理部22は、ユーザフローのエントリ303J→仮想ポートのエントリ302G→物理ポートのエントリ301C→回線のエントリ300の逆経路も識別できる。尚、この場合、スケジュール管理部20は、キュー階層毎に追加制御部21及びリスト管理部22を生成する。従って、スケジュール管理部20は、複数のキュー階層を構築する場合に、キュー階層数分の追加制御部21及びリスト管理部22を生成する。全体管理部23は、キュー階層毎の追加制御部21及びリスト管理部22を管理している。
全体管理部23は、キュー階層毎の追加制御部21及びリスト管理部22を管理し、出力可能なユーザフローが存在するか否かを判定する。全体管理部23は、出力可能なユーザフローが存在する際、全体リンクリストを参照して、物理ポート、仮想ポート及びユーザフローのキュー階層毎の先頭エントリを辿って対象ユーザフローの出力キュー32Aのクレジットカウンタ33Aにクレジットを発行する。
図20は、キュー階層構造の一例を示す説明図である。伝送装置3は、全体リンクリストに示すようにキュー階層間の接続関係が固定的でないため、複数段のキュー構成に柔軟に対応できる。従来のRR方式では、上位階層側のキューと下位階層側のキューとの関係が固定的で、例えば、連続性、接続数及び接続関係等の様々な制限がある。任意の上位階層側のキューに接続される下位階層側のキューを割り当てる際に連続性を持って割り当てられ、更に、各階層の接続数も固定的で、下位階層の大小関係と上位階層の大小関係とが交差しない接続関係となっている。しかも、上位階層側から目的のユーザフローを見つけ出すまでにキューの接続情報を逆に辿る逆引きの変換テーブルが必要であった。これに対して、本実施例の全体リンクリストを用いるキュー階層構造では、階層毎に任意のエントリ情報を追加可能とし、全体リンクリストを参照して全体の伝送経路は勿論のこと、逆経路も識別できる。図20に示すキュー階層構造は、任意の上位階層側の接続ポートに下位階層側の接続ポートを自由に割り当て、各階層の接続数が自由で、しかも、下位階層の大小関係と上位階層の大小関係とが交差する接続関係も許容している。その結果、キュー階層構造では、例えば、連続性、接続数及び接続関係等の制約なく、複数段のキュー階層構造に柔軟に対応できる。しかも、伝送装置3は、全体リンクリスト内の先頭を参照することで、次に参照すべき接続ポートが判るため、逆引きのための変換テーブルを必要としない。
本実施例の伝送装置3は、ユーザフロー毎に出力キュー32Aを生成し、入力したパケットを当該パケットが属するユーザフローに対応した出力キュー32Aに格納する。伝送装置3は、ユーザフローの出力順序を示すリンクリスト40内の先頭エントリ41を参照し、先頭エントリ41のユーザフローに対応した出力キュー32Aのクレジットカウンタ33Aにクレジットを発行する。伝送装置3は、クレジットが発行された出力キュー32Aからパケットをパケット単位で出力する。その結果、リンクリスト40内の先頭エントリ41を参照して該当ユーザフローが見つかるため、パケット伝送性能の低下を防止できる。
伝送装置3は、リンクリスト40内の先頭エントリ41を定期的に参照し、固定長のクレジットを先頭エントリ41のユーザフローに対応したクレジットカウンタ33Aに発行し、クレジットのクレジット量相当の時間内にキュー選択する。その結果、固定長のクレジット量相当の時間内に出力キュー32Aの選択が完了すれば良く、パケット伝送性能の低下を防止できる。
伝送装置3は、対象ユーザフロー対応のパケットを出力した場合に、対象ユーザフローに対応した現在クレジット量から出力パケット長を減算することで現在クレジット量を更新する。伝送装置3は、対象ユーザフロー対応の出力キュー32A内にパケットがあり、かつ、対象ユーザフロー対応の現在クレジット量が正の場合に、出力キュー32A内のパケットをパケット単位で出力する。その結果、伝送装置3は、回線帯域を広くしたとしても、固定長のクレジット量相当の時間内に出力キュー32Aの選択を完了し、対象ユーザフローのパケットをパケット単位で順次出力するため、パケット伝送性能の低下を防止できる。
伝送装置3は、リンクリスト40内の先頭エントリ41を定期的に参照し、先頭エントリ41のユーザフローに対応したクレジットカウンタ33Aに固定長の発行クレジットを発行する。その結果、伝送装置3は、対象ユーザフロー対応の出力キュー32A内にパケットがある場合に、クレジット発行に応じて出力キュー32A内のパケットをパケット単位で出力できる。
伝送装置3は、リンクリスト40を用いて対象ユーザフロー対応の出力キュー32Aからパケット単位でパケットを出力する。その結果、伝送装置3は、従来のRR方式に比較して、ユーザフローの数が増加した場合でも、リンクリスト40内のエントリ数が増えるのみで、回路数を増やすことなく、ユーザフロー数の増加に柔軟に対応できる。
伝送装置3は、リンクリスト40を用いて先頭エントリ41の対象ユーザフロー対応の出力キュー32Aからパケット単位でパケットを出力する。その結果、伝送装置3は、リンクリスト40の配列を辿ることで入力ユーザフローのパケットを順次出力するため、従来のRR方式に比較して入力順にパケットが出力できないようなパケット遅延を防止できる。
伝送装置3は、異なるユーザフローのパケットを入力した場合でも、FIFO212A内に各ユーザフローのエントリ41を一時的に格納し、リスト操作部221側でリンクリスト40のリスト操作の処理が可能となるまで待機する。その結果、伝送装置3は、リスト操作部221側での各ユーザフローのリンクリスト40に対するリスト操作の処理負担を軽減できる。
伝送装置3は、対象ユーザフロー対応の現在キュー長が正で、かつ、対象ユーザフロー対応の回線帯域がOKの場合に、対象ユーザフローのエントリ41がFIFO212A内にあるか否かを判定する。伝送装置3は、対象ユーザフローのエントリ41がFIFO212A内に既にある場合に当該エントリ41のFIFO212A内への登録を禁止し、当該エントリ41がFIFO212A内にない場合に当該エントリ41をFIFO212A内に登録する。その結果、伝送装置3は、FIFO212A内のリンクリスト40に対する同一エントリ41の重複登録を防止して1エントリ/1フローを実現できる。
伝送装置3は、FIFO212A内にエントリがあり、かつ、リスト操作部221側で処理が可能な状態の場合に、FIFO212A内のエントリ41をリンクリスト40の適切な位置に挿入するリスト操作を実行する。その結果、伝送装置3は、リスト操作部221側でのリンクリスト40に対するリスト操作の処理負担を軽減できる。
伝送装置3は、リンクリスト40内の連続するエントリ41に境界44を指定可能とし、境界44、先頭42及び最後尾43等で区分したエントリ41の区間を優先度として設定する。その結果、伝送装置3は、ユーザフロー単位で優先度を簡単に設定できるため、従来のRR方式に比較して、優先度変更に柔軟に対応できる。しかも、伝送装置3は、優先度の変更、例えば、優先度の新規追加、削除や並び替えが生じたとしても、回路構成を変更することなく、優先度変更に柔軟に対応できる。
伝送装置3は、全体リンクリストに階層毎の任意のエントリを追加可能とし、全体リンクリストを参照して全体の伝送経路は勿論のこと、逆経路も識別できる。キュー階層構造は、任意の上位階層側の接続ポートに下位階層側の接続ポートを自由に割り当て、各階層の接続数が自由で、しかも、下位階層の大小関係と上位階層の大小関係とが交差する接続関係も許容している。その結果、キュー階層構造では、例えば、連続性、接続数及び接続関係等の制約なく、複数段のキュー階層構造に柔軟に対応できる。しかも、伝送装置3は、全体リンクリスト内の先頭を参照することで、次に参照すべき接続ポートが判るため、逆引きのための変換テーブルを必要としない。
伝送装置3は、リンクリスト40内のエントリ41のエントリ番号41A毎に前後のエントリ41に対応した前方向ポインタ41B及び後方向ポインタ41Cを管理した。その結果、リンクリスト40内の各エントリ41の前方向ポインタ41B及び後方向ポインタ41Cを書き換えることでエントリ41の並び替えのリスト操作が容易となる。
伝送装置3は、同一ユーザフローの短パケットが短い間隔で入力した場合でも、固定長のクレジット量単位で管理しているため、リスト操作を最短パケットの処理時間内で終わらせる必要はなく、固定長の処理時間内で終了すれば良い。従って、パケット伝送性能の低下を防止できる。
伝送装置3では、キュー選択の処理においてパケットの概念を排除し、出力キュー選択に要する時間がパケットの長さに縛られずに済む。このため回線の高速化に伴う最短パケットの処理時間の短縮に影響されることなく、高速スケジューリングを実現できる。
伝送装置3は、リンクリスト40を用いるため、リンクリスト40を格納するリストテーブル222へのアクセスが複数回必要となるが、パケット単位ではなく、ユーザフロー単位で実行することになるため、アクセス回数を最小限に抑制できる。
従来のRR方式では、ユーザフロー数分の検索処理が必要となり、処理の高速化やユーザフロー数の増加に限界が見えていた。これに対して、本実施例では、先頭42からリンクリスト40内のエントリ41を辿るだけで、ユーザフロー数が増加したとしても、次に出力可能な出力キュー32Aを決定するまでの処理時間に影響はなく、多フローの高速処理が可能となる。
また、従来のRR方式では、選択順と到着順の関係によっては、先に到着していたデータの出力が待たされることがある。これに対して、本実施例では、優先度の設定がない場合、到着順にリンクリスト40の最後尾43に接続されていくため、データ遅延を防止できる。
従来のRR方式では、キュー階層を多段で構築する場合に、例えば、連続性、接続数及び接続関係等の制約を受けながら回路構成の変更を要するため、キュー構築の柔軟性が低い。これに対して、本実施例では、全体リンクリストを用いて、全体リンクリスト内の先頭を辿っていくことで目的のユーザフローを選択できる仕組みにしている。その結果、例えば、連続性、接続数及び接続関係等が自由であるため、キュー階層構造構築の柔軟性を高めることができる。
尚、本実施例の伝送装置3は、例えば、ピザボックス型の伝送装置を例示したが、例えば、伝送装置3をラインカードに搭載したシャーシ型の伝送装置にも適用可能である。
伝送装置3は、ユーザフロー毎に発行するクレジット量が1024バイトで説明したが、少なくともキュー選択の処理に要する時間よりも大の時間をデータ換算したデータ量であれば良い。
伝送装置3は、可変長のパケットを伝送するパケット伝送装置を例示したが、固定長のパケットを伝送する伝送装置にも適用可能である。更に、伝送装置3は、パケットに限定されるものではなく、例えば、可変長や固定長のデータ単位でデータを伝送する伝送装置にも適用可能である。
また、図示した各部の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
更に、各装置で行われる各種処理機能は、CPU(Central Processing Unit)(又はMPU(Micro Processing Unit)、MCU(Micro Controller Unit)等のマイクロ・コンピュータ)上で、その全部又は任意の一部を実行するようにしても良い。また、各種処理機能は、CPU(又はMPU、MCU等のマイクロ・コンピュータ)で解析実行するプログラム上、又はワイヤードロジックによるハードウェア上で、その全部又は任意の一部を実行するようにしても良いことは言うまでもない。
ところで、本実施例で説明した各種の処理は、予め用意されたプログラムを伝送装置に組み込むことでも実現できる。そこで、以下では、上記実施例と同様の機能を有するプログラムを実行する伝送装置の一例について説明する。図21は、伝送プログラムを実行する伝送装置200を示す説明図である。
図21において伝送プログラムを実行する伝送装置200では、通信インタフェース201と、ROM202と、RAM203と、CPU204とを有する。
そして、ROM202には、上記実施例と同様の機能を発揮する伝送プログラムが予め記憶されている。尚、ROM202ではなく、図示せぬドライブで読取可能な記録媒体に伝送プログラムが記録されていても良い。また、記録媒体としては、例えば、CD−ROM、DVDディスク、USBメモリ、SDカード等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ等でも良い。また、伝送プログラムは、ネットワークを介して通信可能な記憶装置から取得されても良い。伝送プログラムとしては、図21に示すように、格納プログラム202A、発行プログラム202B及び出力制御プログラム202Cである。尚、プログラム202A、202B及び202Cについては、適宜統合又は分散しても良い。
そして、CPU204は、これらのプログラム202A、202B及び202CをROM202から読み出し、これら読み出された各プログラムを実行する。そして、CPU204は、格納プロセス204A、発行プロセス204B及び出力制御プロセス204Cとして機能する。RAM203には、ユーザフローの出力順序を示すリンクリストが記憶されている。
CPU204は、ユーザフロー毎にRAM203内のキューを有し、入力したデータを、当該データが属するユーザフローに対応したキューに格納する。CPU204は、ユーザフローの出力順序を示すリンクリストを参照してユーザフローに対応したキューに所定の出力許可量を発行する。CPU204は、出力許可量が発行されたキューからデータをデータ単位で出力する。その結果、伝送装置200は、データ伝送性能の低下を防止できる。