比較例
図24は、比較例のパケット伝送装置100の一例を示す説明図である。図24に示すパケット伝送装置100は、パケット処理部101と、トラヒック管理部102とを有する。パケット処理部101は、入力されたパケット内の制御情報とユーザの設定情報とに基づき、入力パケットの宛先キュー番号を決定する処理部である。トラヒック管理部102は、パケット処理部101で決定された宛先キュー番号のキューに入力パケットを蓄積すると共に、蓄積中の入力パケットを出力する出力対象のキューを識別するキュー番号を決定する処理部である。
パケット処理部101は、抽出部111と、回線設定テーブル112と、決定部113と、付与部114とを有する。抽出部111は、入力パケット内の制御情報を抽出する。制御情報は、回線識別番号(VLANID:Virtual Local Area Network Identifier)及び優先度を含むものである。回線識別番号は、契約回線に割り当てる回線識別番号である。優先度は、入力パケットを送信する際の優先レベルを識別する情報である。回線設定テーブル112は、VLANIDと宛先キュー番号との対応関係を管理するテーブルである。
決定部113は、回線設定テーブル112を参照し、抽出部111にて抽出した制御情報内のVLANIDに対応する宛先キュー番号を決定する。付与部114は、決定された宛先キュー番号を入力パケットに付与し、その入力パケットをトラヒック管理部102に出力する。
図25は、トラヒック管理部102の機能構成の一例を示す説明図である。図25に示すトラヒック管理部102は、バッファ管理部121と、出力速度制限部122と、出力キュー選択部123と、スケジューラ124と、キュー管理テーブル125と、速度制限メモリ126と、キュー蓄積メモリ127とを有する。
バッファ管理部121は、入力パケットを蓄積するバッファメモリ121Aを有し、バッファメモリ121Aを管理する。バッファ管理部121は、バッファメモリ121A内の宛先キュー番号に応じたキューを管理する。バッファ管理部121は、パケット処理部101内の付与部114から入力パケットを受信した場合、入力パケット内の宛先キュー番号に応じた、バッファメモリ121A内のキューに入力パケットを蓄積する。出力速度制限部122は、宛先キュー番号毎にシェーパを有し、シェーパを使用して宛先キュー番号に応じた各キューから出力できる出力データ量(送信権利値)を管理する。出力キュー選択部123は、宛先キュー番号毎の複数のキューの内、出力対象の入力パケットを格納したキューを選択する。
スケジューラ124は、バッファ管理部121、出力速度制限部122及び出力キュー選択部123を制御する。スケジューラ124は、入力パケットにキューを振り分けるバッファ管理部121を制御する。スケジューラ124は、キュー毎に入力パケットの出力速度を制限する出力速度制限部122を制御する。スケジューラ124は、複数のキューの内、蓄積パケットがあり、かつ、出力速度の上限値を超えない出力対象の任意のキューを選択する出力キュー選択部123を制御する。そして、スケジューラ124は、出力対象のキュー内に蓄積の先頭の入力パケットを読み出して出力する出力キュー選択部123を制御する。
スケジューラ124は、入力パケットにキューを振り分けるキュー振分処理を実行する。キュー振分処理は、パケット処理部101の付与部114からの入力パケット内の宛先キュー番号を抽出し、抽出した宛先キュー番号に対応するキューに入力パケットを蓄積する処理である。スケジューラ124は、入力パケットをキューに蓄積した場合、入力パケットを蓄積したキューのアドレスをキュー管理テーブル125に書込む。スケジューラ124は、入力パケットを蓄積したキュー対応のキュー蓄積メモリ127内の蓄積フラグを“0”から“1”に設定する。スケジューラ124は、キュー蓄積メモリ127内の宛先キュー番号毎の蓄積フラグを参照し、宛先キュー番号毎の入力パケットの蓄積の有無を認識できる。
スケジューラ124は、各キューが出力できる出力データ量(送信権利値)を管理する速度制限メモリ126の内容を更新する送信権利値更新処理を実行する。送信権利値は、キュー毎に周期加算値を周期的に加算する。周期加算値は、回線設定、すなわち契約速度に応じて周期的に加算する出力データ量である。また、スケジューラ124は、キューから蓄積パケットが出力されると、そのキューの送信権利値から、出力した蓄積パケットの出力データ量を減算して送信権利値を更新する。従って、キュー数が増えると、全キューの更新に要する時間が増えることになる。
スケジューラ124は、キュー蓄積メモリ127及び速度制限メモリ126を参照し、複数のキューの内、出力対象のキューを選択する出力キー選択処理を実行する。出力キー選択処理は、キュー蓄積メモリ127内の蓄積フラグが“1”、かつ、速度制限メモリ126内の送信権利値がパケット長よりも大きいキューを選択する処理である。
スケジューラ124は、選択された出力対象のキューからパケットを出力するパケット出力処理である。スケジューラ124は、出力対象のキューからパケットが出力され、キュー内の蓄積パケットが無くなった場合、キュー蓄積メモリ127内の該当キューに対応する蓄積フラグを“1”から“0”に設定する。更に、スケジューラ124は、出力対象のキューからパケットが出力された場合、速度制限メモリ126内の該当キューに対応する送信権利値から出力データ量を減算して送信権利値を更新する。
次に比較例のパケット伝送装置100の動作について説明する。図26は、パケット処理に関わるパケット処理部101の処理動作の一例を示すフローチャートである。図26においてパケット処理部101内の抽出部111は、入力パケットを検知したか否かを判定する(ステップS111)。抽出部111は、入力パケットを検知した場合(ステップS111:Yes)、入力パケットから制御情報を抽出する(ステップS112)。
パケット処理部101内の決定部113は、回線設定テーブル112を参照し、抽出した制御情報内のVLANIDに対応する宛先キュー番号を決定する(ステップS113)。パケット処理部101内の付与部114は、決定した宛先キュー番号を入力パケットに付与する(ステップS114)。付与部114は、宛先キュー番号が付与された入力パケットをトラヒック管理部102に出力し(ステップS115)、図26に示す処理動作を終了する。抽出部111は、入力パケットを検知しなかった場合(ステップS111:No)、図26に示す処理動作を終了する。
図27は、キュー振分処理に関わるスケジューラ124の処理動作の一例を示すフローチャートである。図27においてスケジューラ124は、パケット処理部101からの入力パケットをバッファメモリ121Aに書込む(ステップS121)。スケジューラ124は、入力パケットの宛先キュー番号に対応する、バッファメモリ121A内の先頭ポインタである格納アドレスをキュー管理テーブル125に書込む(ステップS122)。尚、キュー管理テーブル125は、宛先キュー番号毎にバッファメモリ121A内に格納する入力パケットの格納アドレスを管理する。
スケジューラ124は、キュー管理テーブル125内の該当キュー番号の末尾ポインタを次のアドレスに更新する(ステップS123)。スケジューラ124は、該当キューに対応するキュー蓄積メモリ127の蓄積フラグが“0”であるか否かを判定する(ステップS124)。スケジューラ124は、該当キューに対応するキュー蓄積メモリ127の蓄積フラグが“0”の場合(ステップS124:Yes)、該当キューのキュー蓄積メモリ127の蓄積フラグを“1”に設定し(ステップS125)、図27に示す処理動作を終了する。スケジューラ124は、該当キューに対応するキュー蓄積メモリ127の蓄積フラグが“0”でない場合(ステップS124:No)、図27に示す処理動作を終了する。
図28は、送信権利値更新処理に関わるスケジューラ124の処理動作の一例を示すフローチャートである。図28においてスケジューラ124は、キュー番号Xを“1”に設定する(ステップS131)。スケジューラ124は、設定する該当キュー番号Xのキューに対応する送信権利値が上限値未満であるか否かを判定する(ステップS132)。尚、上限値は契約速度に応じて異なる。
スケジューラ124は、設定のキュー番号Xのキューに対応する送信権利値が上限値未満の場合(ステップS132:Yes)、設定のキュー番号Xのキューに対応する送信権利値に契約速度分の周期加算値を加算する(ステップS133)。尚、周期加算値とは、送信権利値の更新周期毎に加算する出力データ量である。契約速度は、宛先キュー番号毎の契約内容に応じて異なる。スケジューラ124は、設定のキュー番号Xがキュー数N以上であるか否かを判定する(ステップS134)。尚、キュー数Nは、全キューの数である。
スケジューラ124は、設定キュー番号Xがキュー数N以上でない場合(ステップS134:No)、設定キュー番号Xを+1インクリメントして設定する(ステップS135)。スケジューラ124は、設定キュー番号Xのキューに対応する送信権利値が上限値未満であるか否かを判定すべく、ステップS132に移行する。
スケジューラ124は、設定キュー番号Xのキューに対応する送信権利値が上限値未満でない場合(ステップS132:No)、送信権利値が上限値以上と判断し、設定キュー番号Xがキュー数N以上であるか否かを判定すべく、ステップS134に移行する。スケジューラ124は、設定キュー番号Xがキュー数N以上の場合(ステップS134:Yes)、送信権利値の更新周期が1周期完了したものと判断し、設定キュー番号Xを“1”に再設定すべく、ステップS131に移行する。
図29は、速度制限メモリ126に関わる各キューの周期加算値の加算動作の一例を示す説明図である。例えば、キュー番号#Xに着目し、キュー番号#Xの回線の契約速度を800Mbps、速度制限メモリ126内の更新周期を1μ秒、キュー番号#Xのキュー状態が1000バイトのパケット送信待ちと仮定する。周期加算値は、送信権利値の更新周期毎に加算する送信権利値の加算値であって、契約速度及び更新周期に基づき算出する。つまり、キュー番号#Xの周期加算値は、800Mbps×1μ秒=800ビット=100バイトである。従って、キュー番号#Xは、周期加算値が100バイトであるため、送信権利値が1000バイトになるまでに10μ秒の10回の更新周期を要することになる。
スケジューラ124は、キュー番号#Xの送信権利値と該当キューの先頭パケットのパケット長とを比較し、送信権利値が該当キューの先頭パケットのパケット長未満の場合、パケット送信不可と判定する。これに対して、スケジューラ124は、送信権利値が該当キューの先頭パケットのパケット長よりも大きい場合、パケット送信可と判定する。
スケジューラ124は、該当キューからパケットを出力した場合、該当キューの送信権利値から出力パケット長を減算して送信権利値を更新することになる。例えば、キュー番号#Xの場合、1000バイトのパケットを100バイト単位のパケットで1μ秒間隔で10回送信する。つまり、1000バイト÷10μ秒=100Mバイト/秒=800Mbpsとなる。
図30は、パケット出力処理に関わるスケジューラ124の処理動作の一例を示すフローチャートである。図30においてスケジューラ124は、該当キューの先頭パケットを出力した場合(ステップS141)、キュー管理テーブル125から出力パケットの格納アドレスを削除する(ステップS142)。
スケジューラ124は、該当キュー内に蓄積パケットがあるか否かを判定する(ステップS143)。スケジューラ124は、該当キュー内に蓄積パケットがない場合(ステップS143:No)、該当キュー番号のキュー蓄積メモリ127の蓄積フラグを“0”に設定する(ステップS144)。スケジューラ124は、速度制限メモリ126内の該当キューの送信権利値から出力データ量を減算して送信権利値を更新し(ステップS145)、該当キューの先頭からパケットを出力すべく、ステップS141に移行する。
スケジューラ124は、該当キュー内にパケットがある場合(ステップS143:Yes)、速度制限メモリ126内の該当キューの送信権利値から出力データ量を減算して送信権利を更新すべく、ステップS145に移行する。
図31は、出力キュー選択処理に関わるスケジューラ124の処理動作の一例を示すフローチャートである。図31においてスケジューラ124は、キュー番号Xを“1”に設定し(ステップS151)、設定キュー番号Xのキューに対応するキュー蓄積メモリ127の蓄積フラグが“1”であるか否かを判定する(ステップS152)。
スケジューラ124は、設定キュー番号Xのキュー蓄積メモリ127の蓄積フラグが“1”の場合(ステップS152:Yes)、設定キュー番号Xの速度制限メモリ126内の送信権利値がパケット長よりも大きいか否かを判定する(ステップS153)。スケジューラ124は、設定キュー番号Xの送信権利値がパケット長よりも大きい場合(ステップS153:Yes)、設定キュー番号Xのキューに対して出力を指示する(ステップS154)。更に、スケジューラ124は、設定キュー番号Xが最大キュー数N以上であるか否かを判定する(ステップS155)。
スケジューラ124は、設定キュー番号Xが最大キュー数N以上でない場合(ステップS155:No)、設定キュー番号Xを+1加算する(ステップS156)。そして、スケジューラ124は、設定キュー番号Xのキュー蓄積メモリ127の蓄積フラグが“1”であるか否かを判定すべく、ステップS152に移行する。
スケジューラ124は、設定キュー番号Xのキュー蓄積メモリ127の蓄積フラグが“1”でない場合(ステップS152:No)、設定キュー番号Xが最大キュー数N以上であるか否かを判定すべく、ステップS155に移行する。また、スケジューラ124は、設定キュー番号Xの送信権利値がパケット長よりも大きくない場合(ステップS153:No)、設定キュー番号Xが最大キュー数N以上であるか否かを判定すべく、ステップS155に移行する。スケジューラ124は、設定キュー番号Xが最大キュー数N以上の場合(ステップS155:Yes)、キュー番号Xに“1”を設定すべく、ステップS151に移行する。
近年、5Gサービスでは、超低遅延・多数同時接続の実現が求められているため、多数接続先からのパケット入力に対応すべくキュー数が増大する傾向にある。比較例のパケット伝送装置100が、5Gサービスに適用させる場合、キュー数が増えることになる。図32は、速度制限メモリ126の周期更新及びキュー蓄積メモリ127の検索に関わるパケット伝送装置100の課題の一例を示す説明図である。
速度制限メモリ126では、キュー数が増加した場合、更新周期が長くなるため、契約速度以上のバースト出力が生じるおそれがある。また、キュー蓄積メモリ127でも、キュー数が増加した場合、キュー番号毎のキュー蓄積メモリ127の蓄積フラグの蓄積有無を検索する検索時間が長くなるため、パケット出力間隔が延びてパケット伝送のスループットが低下する。つまり、比較例のパケット伝送装置100では、キュー数の増加に応じて周期加算値の更新や蓄積フラグの検索に要するスケジューラ124の処理負担が大きくなる。その結果、接続先の増大によってパケット伝送のスループットが低下してしまう。そこで、このような事態に対処すべく、本実施例のパケット伝送装置1を提案する。
以下、図面に基づいて、本願の開示するパケット伝送装置1等の実施例を詳細に説明する。尚、各実施例により、開示技術が限定されるものではない。また、以下に示す各実施例は、矛盾を起こさない範囲で適宜組み合わせても良い。
図1は、実施例1のパケット伝送装置1の一例を示す説明図である。図1に示すパケット伝送装置1は、パケット処理部2と、分散制御部3とを有する。パケット処理部2は、入力されたパケット内の制御情報とユーザの設定情報とに基づき、入力パケットの宛先キュー番号を決定する処理部である。
分散制御部3は、バッファメモリ11と、管理部12と、複数のDSP(Digital Signal Processor)13と、出力FIFO(First-In First-Out)14と、パケット管理メモリ15とを有する。更に、分散制御部3は、リソース管理メモリ16と、出力判断値レジスタ17と、故障管理メモリ18とを有する。バッファメモリ11は、入力パケットを蓄積する領域である。管理部12は、分散制御部3全体を管理制御する。DSP13は、入力パケット毎に割当てられ、入力パケットの出力を判断する処理部である。尚、複数のDSP13は、FPGA(Field Programmable Gate Array)内に内蔵されるものである。出力FIFO14は、出力対象のパケットを格納して、先入れ先出しで出力する。
つまり、本実施例のパケット伝送装置1では、入力パケット毎に割り当てられた各DSP13が入力パケットの出力判断を分散して実行するため、比較例のパケット伝送装置100で全てのキューを集中制御するスケジューラ124のような処理負担が無くなる。
パケット管理メモリ15は、バッファメモリ11を管理するメモリである。リソース管理メモリ16は、DSP13等のリソースを管理するメモリである。出力判断値レジスタ17は、DSP13毎の割当パケットの出力判断有無を識別する出力判断値を管理するレジスタである。故障管理メモリ18は、DSP13毎の故障を管理するメモリである。
図2は、パケット処理部2の機能構成の一例を示すブロック図である。図2に示すパケット処理部2は、抽出部21と、回線設定テーブル22と、決定部23と、付与部24とを有する。抽出部21は、入力パケット内の制御情報を抽出する。制御情報は、入力パケットの回線識別番号(VLANID:Virtual Local Area Network Identifier)及び優先度を含むものである。回線識別番号は、契約回線に割り当てる回線識別番号である。優先度は、入力パケットを送信する際の優先レベルを識別する情報である。回線設定テーブル22は、VLANIDと宛先キュー番号との対応関係を管理するテーブルである。
決定部23は、回線設定テーブル22を参照し、抽出部21にて抽出した制御情報内のVLANIDに対応する宛先キュー番号を決定する。付与部24は、決定された宛先キュー番号を入力パケットに付与し、その入力パケットを分散制御部3に出力する。
図3は、分散制御部3の機能構成の一例を示すブロック図である。図3に示す分散制御部3内の管理部12は、抽出部31と、割当管理部32と、出力選択部33とを有する。抽出部31は、入力パケットから宛先キュー番号及び優先度等を抽出する。割当管理部32は、管理部12全体を制御する。出力選択部33は、各DSP13の出力判断値を収集する。
パケット管理メモリ15は、パケット管理テーブル41を有する。パケット管理テーブル41は、パケットを識別するパケット番号毎に、当該パケットを蓄積するバッファメモリ11内の格納アドレスを管理するテーブルである。尚、パケット番号は、パケットを蓄積するバッファメモリのアドレス番号である。リソース管理メモリ16は、パケット割当管理テーブル42と、DSP空き管理テーブル43と、DSP割当管理テーブル44とを有する。パケット割当管理テーブル42は、パケット番号毎にDSP番号を管理するテーブルである。DSP空き管理テーブル43は、空きのDSP13を識別するDSP番号13を管理するテーブルである。DSP割当管理テーブル44は、DSP番号毎にパケット番号を管理するテーブルである。故障管理メモリ18は、故障管理テーブル45を有する。故障管理テーブル45は、DSP番号毎の故障を管理するテーブルである。
図4は、DSP13の設定情報の一例を示す説明図である。各DSP13は、設定情報を設定する。設定情報は、出力判断値51と、送信権利値52と、速度制限値53と、管理情報54と、パケット番号55と、入力順番号56とを有する。出力判断値51は、DSP13に割り当てられたパケットの出力判断を識別する情報である。出力判断値51は、出力可の場合は“1”、出力不可の場合は“0”である。送信権利値52は、DSP13の出力判断に用いる値である。速度制限値53は、周期更新毎に加算される、回線設定(契約内容)に応じた周期加算値である。パケット番号55は、割当パケットを識別する情報である。入力順番号56は、割当パケットをバッファメモリ11に蓄積した入力順序を識別する情報である。
管理情報54は、DSP13に割り当てられた割当パケットの情報である。管理情報54は、出力データ量54Aと、キュー番号54Bと、パケット長54Cと、優先度54Dとを有する。出力データ量54Aは、割当パケットの出力データ量である。キュー番号54Bは、割当パケットに付与された宛先キュー番号である。パケット長54Cは、割当パケットのパケット長である。優先度54Dは、割当パケットの優先度である。
図5は、パケット管理テーブル41の一例を示す説明図である。図5に示すパケット管理テーブル41は、パケットを識別するパケット番号毎に、当該パケットを蓄積するバッファメモリ11内の格納アドレスを管理するテーブルである。
図6は、DSP空き管理テーブル43の一例を示す説明図である。図6に示すDSP空き管理テーブル43は、パケット未割当のDSP13である空きDSP13を識別するDSP番号を管理するテーブルである。
図7は、DSP割当管理テーブル44の一例を示す説明図である。図7に示すDSP割当管理テーブル44は、DSP13を識別するDSP番号毎に、当該DSP13に割当てるパケットを識別するパケット番号を管理するテーブルである。
図8は、パケット割当管理テーブル42の一例を示す説明図である。図8に示すパケット割当管理テーブル42は、割当パケットを識別するパケット番号毎に、当該割当DSP13を識別するDSP番号を管理するテーブルである。
図9は、故障管理テーブル45の一例を示す説明図である。図9に示す故障管理テーブル46は、DSP13を識別するDSP番号毎に当該DSP13がパケットを保持する期間、すなわち更新周期の回数を示すカウント値を管理するテーブルである。カウント値は、DSP13の故障を判定する情報である。
図10は、出力FIFO14の一例を示す説明図である。図10に示す出力FIFO14は、出力選択のパケットを順次格納し、読出し指示に応じて先頭のパケットを読出出力する。
図11は、割当管理部32の機能構成の一例を示す説明図である。図11に示す割当管理部32は、検索部61と、設定部62と、第1の更新部63と、第2の更新部64とを有する。検索部61は、DSP空き管理テーブル43を参照し、空きDSP13を検索する。設定部62は、検索部61にて検索された空きDSP13に対して割当パケットの設定情報を設定する。設定部62は、割当パケットを割り当てた空きDSP13に対して出力判断プログラムをロードする。出力判断プログラムは、割当パケットの出力判断の処理を実行するプログラムである。第1の更新部63は、パケット管理テーブル41の割当パケットの情報を更新する。第2の更新部64は、DSP空き管理テーブル43、DSP割当管理テーブル44及びパケット割当管理テーブル42の情報を更新する。
図12は、1パケット分のDSP13及び管理部12の処理の一例を示す説明図である。DSP13及び管理部12では、1個の割当パケットを処理する上で3サイクルを要する。先ず1サイクル目は、各DSP13が自分の割当パケットの出力判断処理を実行する。2サイクル目は、管理部12が出力対象DSP13の選択処理を実行する。更に、3サイクル目は、DSP13が出力対象DSP13の出力パケットの情報を反映し、管理部12が出力対象DSP13から出力パケットを出力FIFO14へ読出し指示する処理を実行する。その結果、出力FIFO14では、管理部12からの読出し指示に応じて出力対象DSP13からの出力パケットを出力する。
図13は、出力判断値レジスタ17のビットマップ構成の一例を示す説明図である。尚、説明の便宜上、パケットの優先度は、“1”が最上位、その後、“2”→“3”→…の順に優先度が低くなる。図13に示す例では、入力パケットの入力先着順序は、#4のDSP13の割当パケット→#5のDSP13の割当パケット→#1のDSP13の割当パケット→#2のDSP13の割当パケット→#3のDSP13の割当パケット→…の順序とする。管理部12では、入力パケットの優先度に応じて各入力パケットを優先度毎にマスク化する。出力判断値レジスタ17は、#4及び#5のDSP13の割当パケットの出力判断値を優先度“3”でマスク化し、#1及び#2のDSP13の割当パケットの出力判断値を優先度“2”でマスク化している状態である。出力判断値レジスタ17は、#3のDSP13の割当パケットの出力判断値を優先度“1”でマスク化している状態である。更に、出力判断値レジスタ17は、#4及び#5のDSP13の割当パケットの出力判断値“1”、#1のDSP13の割当パケットの出力判断値“0”を管理している。更に出力判断値レジスタ17は、#2のDSP13の割当パケットの出力判断値“1”、#3のDSP13の割当パケットの出力判断値“0”を管理している。つまり、出力判断値レジスタ17は、各DSP13の出力判断値を入力先着順に1次元のビット列で保持することになる。
図14は、パケット受付処理に関わるパケット処理部2の処理動作の一例を示すフローチャートである。図14においてパケット処理部2内の抽出部21は、入力パケットを検知したか否かを判定する(ステップS11)。抽出部21は、入力パケットを検知した場合(ステップS11:Yes)、入力パケットから制御情報を抽出する(ステップS12)。パケット処理部2内の決定部23は、回線設定テーブル22を参照し、制御情報内のVLANIDに対応する宛先キュー番号を決定する(ステップS13)。更に、パケット処理部2内の付与部24は、決定された宛先キュー番号を入力パケットに付与する(ステップS14)。更に、付与部24は、宛先キュー番号が付与された入力パケットを分散制御部3に出力し(ステップS15)、新たな入力パケットを検知したか否かを判定すべく、ステップS11に移行する。
パケット処理部2は、入力パケットを検知すると、入力パケットからVLANIDを抽出し、抽出したVLANIDに対応する宛先キュー番号を決定し、決定した宛先番号を入力パケットに付与して分散制御部3に出力する。その結果、パケット処理部2は、入力パケットに宛先キュー番号を付与して分散制御部3に出力できる。
図15は、入力パケット処理に関わる割当管理部32の処理動作の一例を示すフローチャートである。図15において割当管理部32は、パケット処理部2から入力パケットを受信したか否かを判定する(ステップS21)。割当管理部32は、入力パケットを受信した場合(ステップS21:Yes)、バッファメモリ11内に空きがあるか否かを判定する(ステップS22)。
割当管理部32は、バッファメモリ11内に空きがある場合(ステップS22:Yes)、入力パケットをバッファメモリ11に書込む(ステップS23)。割当管理部32は、入力パケットをバッファメモリ11に書込んだ後、入力パケットの格納アドレスを入力パケットのパケット番号に対応付けてパケット管理テーブル41内に書き込むべく、当該パケット管理テーブル41の内容を更新する(ステップS24)。
割当管理部32内の検索部61は、パケット管理テーブル41の更新後、DSP空き管理テーブル43を参照し、入力パケットが未割当の空きDSP13があるか否かを判定する(ステップS25)。割当管理部32内の設定部62は、空きDSP13がある場合(ステップS25:Yes)、空きDSP13に対して出力判断プログラム及び設定情報をロードする(ステップS26)。つまり、割当管理部32は、空きDSP13に入力パケットを割り当てることになる。そして、割当管理部32内の第2の更新部64は、空きDSP13に対して入力パケットの割当を完了した場合、DSP空き管理テーブル43、DSP割当管理テーブル44及びパケット割当管理テーブル42の内容を更新する(ステップS27)。そして、図15に示す処理動作を終了する。
割当管理部32は、パケット処理部2から入力パケットを受信しなかった場合(ステップS21:No)、図15に示す処理動作を終了する。割当管理部32は、バッファメモリ11に空きがない場合(ステップS22:No)、入力パケットを廃棄し(ステップS28)、図15に示す処理動作を終了する。
また、割当管理部32は、空きDSP13がない場合(ステップS25:No)、入力パケットを廃棄し(ステップS29)、バッファメモリ11から該当パケットを削除する(ステップS30)。更に、割当管理部32内の第1の更新部63は、該当パケットの削除に応じて、パケット管理テーブル41の内容を更新し(ステップS31)、図15に示す処理動作を終了する。
割当管理部32は、入力パケットをバッファメモリ11に書込み後、空きDSP13に出力判断プログラム及び、入力パケットの情報を含む設定情報をロードする。その結果、DSP13は、割当パケットに対する出力判断処理を実行する。
割当管理部32は、空きDSP13がない場合、入力パケットを廃棄し、バッファメモリ11から入力パケットを削除する。また、割当管理部32は、バッファメモリ11に空きがない場合、入力パケットを廃棄する。その結果、処理しきれない入力パケットを廃棄できる。
図16は、出力判断処理に関わるDSP13の処理動作の一例を示すフローチャートである。図16においてDSP13は、割当パケットがあるか否かを判定する(ステップS41)。DSP13は、割当パケットがある場合(ステップS41:Yes)、割当パケットの送信権利値が割当パケットの出力データ量以上であるか否かを判定する(ステップS42)。
DSP13は、割当パケットの送信権利値が出力データ量以上の場合(ステップS42:Yes)、割当パケットの出力可と判断し、出力判断値を“0”から“1”に変更し(ステップS43)、図16に示す処理動作を終了する。DSP13は、出力判断値“1”を管理部12に送信する。また、DSP13は、割当パケットがない場合(ステップS41:No)、図16に示す処理動作を終了する。また、DSP13は、割当パケットの送信権利値が出力データ量以上でない場合(ステップS42:No)、図16に示す処理動作を終了する。DSP13は、出力判断値“0”のまま、出力判断値“0”を管理部12に送信する。
DSP13は、割当パケットがある場合、割当パケットの送信権利値が割当パケットの出力データ量以上の場合、割当パケットの出力可と判断し、出力判断値を“1”に設定する。その結果、DSP13は、割当パケットの出力可を示す出力判断値“1”を管理部12に通知できる。
DSP13は、割当パケットの送信権利値が割当パケットの出力データ量以上でない場合、割当パケットの出力不可と判断し、出力判断値を“0”に設定する。その結果、DSP13は、割当パケットの出力不可を示す出力判断値“0”を管理部12に通知できる。
図17は、第1の出力選択処理に関わる出力選択部33の処理動作の一例を示すフローチャートである。図17において出力選択部33は、各DSP13から出力判断値を受信した場合、DSP13の割当パケットの優先度を識別することになる。そして、出力選択部33は、DSP13の割当パケットの優先度が“1”の場合、優先度“1”で出力判断値をマスク化する(ステップS51A)。出力選択部33は、優先度“1”でマスク化した出力判断値の内、出力判断値が“1”の入力先着順で先頭DSP13を検索する(ステップS52A)。尚、先頭DSP13は、バッファメモリ11に格納したパケットの入力先着順で先頭のDSP13である。
出力選択部33は、DSP13の割当パケットの優先度が“2”の場合、優先度“2”で出力判断値をマスク化する(ステップS51B)。出力選択部33は、優先度“2”でマスク化した出力判断値の内、出力判断値が“1”の入力先着順で先頭DSP13を検索する(ステップS52B)。つまり、出力選択部33は、DSP13の割当パケットの優先度を識別し、優先度毎に出力判断値をマスク化し、優先度毎にマスク化した出力判断値の内、出力判断値が“1”の入力先着順で先頭DSP13を検索することになる。
出力選択部33は、優先度毎に出力判断値が“1”の入力先着順で先頭DSP13を検索した場合、全ての優先度の検索結果から優先度が最上位、例えば、優先度“1”の検索結果を特定する(ステップS53)。出力選択部33は、特定された優先度の検索結果から出力判断値が“1”の先頭DSP13を出力対象のキュー番号を選択し(ステップS54)、出力対象のキュー番号を全DSP13に同報送信し(ステップS55)、図17に示す処理動作を終了する。
出力選択部33は、DSP13の割当パケットの優先度を識別し、優先度毎に出力判断値をマスク化し、優先度毎にマスク化した出力判断値の内、出力判断値が“1”の入力先着順で先頭DSP13を検索する。出力選択部33は、優先度毎に出力判断値が“1”の先頭DSP13を検索した場合、全ての優先度の検索結果から優先度が最上位の検索結果を特定する。出力選択部33は、特定された優先度の検索結果から出力判断値が“1”の先頭DSP13のキュー番号を出力対象のキュー番号に選択し、出力対象のキュー番号を全DSP13に通知する。その結果、各DSP13は、出力対象のキュー番号を認識できる。
図18は、パケット情報更新処理に関わるDSP13の処理動作の一例を示すフローチャートである。図18においてDSP13は、出力選択部33から受信した出力対象のキュー番号が割当パケットのキュー番号と同一であるか否かを判定する(ステップS61)。DSP13は、出力対象のキュー番号が割当パケットのキュー番号と同一の場合(ステップS61:Yes)、割当パケットの送信権利値から出力対象のキュー番号のパケット長を減算して送信権利値を更新する(ステップS62)。
DSP13は、割当パケットの送信権利値に周期加算値を加算して送信権利値を更新する(ステップS63)。尚、周期加算値は、送信権利値の更新周期毎に加算する出力データ量である。契約速度は、宛先キュー番号毎の契約内容に応じて異なる。DSP13は、出力対象のキュー番号の入力順番号が保持している割当パケットの入力順番号よりも小さいか否かを判定する(ステップS64)。DSP13は、出力対象のキュー番号の入力順番号が保持している割当パケットの入力順番号よりも小さい場合(ステップS64:Yes)、入力順番号を“1”減算して入力順番号を更新し(ステップS65)、図18に示す処理動作を終了する。
DSP13は、出力対象のキュー番号が割当パケットのキュー番号と同一でない場合(ステップS61:No)、割当パケットの送信権利値に周期加算値を加算して送信権利値を更新すべく、ステップS63に移行する。また、DSP13は、出力対象のキュー番号の入力順番号が保持している割当パケットの入力順番号よりも小さくない場合(ステップS64:No)、図18に示す処理動作を終了する。
各DSP13は、出力対象のキュー番号が割当パケットのキュー番号と同一の場合、割当パケットの送信権利値から出力対象のキュー番号のパケット長を減算して送信権利値を更新する。更に、DPS13は、割当パケットの送信権利値に周期加算値を加算して送信権利値を更新し、出力対象のキュー番号の入力順番号が保持している割当パケットの入力順番号よりも小さい場合、入力順番号を“1”減算して入力順番号を更新する。つまり、各DSP13が、割当パケットの出力に応じて割当パケットの送信権利値及び入力順番号を更新する。DSP13が入力パケット毎に割当てられているため、キュー数が増大した場合でも送信権利値の周期加算値を更新する更新周期が長くなるような事態を回避できる。
図19は、出力FIFOセット処理に関わる割当管理部32の処理動作の一例を示すフローチャートである。図19において割当管理部32は、出力対象のキュー番号に対応するDSP番号から割当パケットを識別するパケット番号を取得する(ステップS71)。割当管理部32は、取得したパケット番号に対応する出力対象のパケットをバッファメモリ11から読み出して出力FIFO14にセットする(ステップS72)。
割当管理部32は、出力対象のパケットの情報を各管理テーブル及び割当DSP13から削除し(ステップS73)、図19に示す処理動作を終了する。
割当管理部32は、出力対象のキュー番号に対応するDSP番号から割当パケットを識別するパケット番号を取得し、取得したパケット番号に対応する出力対象のパケットをバッファメモリ11から読み出して出力FIFO14にセットする。更に、割当管理部32は、出力対象のパケットの情報を各管理テーブル及び割当DSP13から削除する。その結果、出力対象のキュー番号に対応する割当パケットを出力FIFO14にセットした場合、出力対象の割当パケットの情報を割当DSP13から削除できる。
図20は、故障監視処理に関わる割当管理部32の処理動作の一例を示すフローチャートである。図20において割当管理部32は、DSP番号“1”を指定し(ステップS81)、DSP割当管理テーブル44を参照し、指定DSP番号のDSP13に割当パケットがあるか否かを判定する(ステップS82)。割当管理部32は、指定DSP番号のDSP13に割当パケットがある場合(ステップS82:Yes)、故障管理テーブル45内の指定DSP番号のカウント値を+1インクリメントする(ステップS83)。
割当管理部32は、カウント値を+1インクリメントした後、カウント値が故障閾値を超えたか否かを判定する(ステップS84)。割当管理部32は、カウント値が故障閾値を超えた場合(ステップS84:Yes)、指定DSP番号に対応する割当パケットをバッファメモリ11から廃棄する。更に、割当管理部32は、指定DSP番号に対応するパケット情報やDSP情報を各テーブルから削除し、指定DSP13の設定情報を初期化する(ステップS85)。
尚、ステップS85の各テーブルは、例えば、パケット管理テーブル41、パケット割当管理テーブル42、DSP空き管理テーブル43及びDSP割当管理テーブル44である。つまり、割当管理部32は、指定DSP番号の割当パケットのパケット番号及び格納アドレスをパケット管理テーブル41から削除する。更に、割当管理部32は、指定DSP番号及び割当パケットのパケット番号をパケット割当管理テーブル42及びDSP割当管理テーブル44から削除する。更に、割当管理部32は、指定DSP番号及びパケット番号の削除に応じて指定DSP番号が空きDSP13となるため、空きDSP13の空きDSP番号をDSP空き管理テーブル43に登録する。
割当管理部32は、指定DSP番号が最大値Nを超えたか否かを判定する(ステップS86)。尚、最大値Nは、全てのDSP13の個数である。割当管理部32は、指定DSP番号が最大値Nを超えていない場合(ステップS86:No)、指定DSP番号を+1インクリメントし(ステップS87)、指定DSP番号のDSP13に割当パケットがあるか否かを判定すべく、ステップS82に移行する。
割当管理部32は、指定DSP番号が最大値Nを超えた場合(ステップS86:Yes)、指定DSP番号“1”を再指定すべく、ステップS81に移行する。割当管理部32は、カウント値が故障閾値を超えていない場合(ステップS84:No)、指定DSP番号が最大値Nを超えたか否かを判定すべく、ステップS86に移行する。
また、割当管理部32は、指定DSP番号のDSP13に割当パケットがない場合(ステップS82:No)、故障管理テーブル45内の指定DSP番号のカウント値を“0”に設定し(ステップS88)、図20に示す処理動作を終了する。
図21は、DSP故障検出時の故障管理テーブル45の一例を示す説明図である。尚、説明の便宜上、DSP番号#1~#N、故障閾値は「99」とする。また、故障閾値は「99」としたが、「99」に限定されるものではなく、適宜設定変更可能である。割当管理部32は、DSP番号#1からDSP番号#NまでのDSP13のパケット滞留のカウント値のカウント動作を1周期とし、DSP番号#Nのパケット滞留のカウント動作の終了後、更に、DSP番号#1のパケット滞留のカウント動作に移行する。
割当管理部32は、故障管理テーブル45を参照し、例えば、DSP番号#1のカウント値が「0」、DSP番号#2のカウント値が「3」、DSP番号#5のカウント値が「100」と認識できる。割当管理部32は、DSP番号#5のカウント値が「100」の場合、カウント値が故障閾値を超えたと判断し、DSP番号#5対応のDSP13の故障と判断する。
割当管理部32は、DSP番号毎に割当パケットがあるか否かを判定し、割当パケットがある場合にDSP番号のカウント値を+1インクリメントし、カウント値が故障閾値を超えた場合に当該DSP番号のDSP13の故障と判定する。その結果、割当管理部32は、DSP番号毎のカウント値を参照し、カウント値が故障閾値を超える期間で割当パケットが滞留しているDSP13を故障と判断できる。
割当管理部32は、カウント値が故障閾値を超えたDSP13の割当パケットを廃棄するため、割当パケットの滞留を回避できる。
本実施例のパケット伝送装置1は、入力パケットを検知した場合、入力パケット毎に空きDSP13を割当てる。各DSP13は、割当パケットの送信権利値を管理し、送信権利値に基づき、割当パケットの出力判断処理を実行し、出力判断値を管理部12に通知する。更に、パケット管理部は、各DSP13の出力判断値に基づき、出力対象のDSP13を選択する。
パケット伝送装置1内の管理部12は、パケットを検知した場合に、複数のDSP13内の空きDSP13に検知したパケットを割り当てる。更に、DSP13は、割り当てられたパケットの送信権利値が出力データ量以上であるか否かを判断し、その出力判断結果を管理部12に通知する。管理部12は、各DSP13の出力判断結果に基づき、出力対象のDSP13を選択し、選択した出力対象のプDSP13に割り当てたパケットを出力FIFO14にセットする。その結果、比較例のスケジューラの集中制御を要することなく、各DSP13でパケット管理及び出力判断を分散制御できる。従って、キュー数が増大した場合でも、送信権利値更新に要する更新周期の待機や蓄積有無の検索時間を無くすことでパケット伝送のスループット低下を抑制できる。つまり、接続先の増大に対処できる。
各DSP13は、割当パケットの送信権利値を管理し、送信権利値に基づき割当パケットの出力判断を実行する。その結果、キュー数が増大した場合でも、DSP13の分散処理で処理時間が一定、DSP13単位の負荷がほぼ一定にし、集中制御のスケジューラが不要となることで、低負荷のパケット伝送処理が可能となる。
管理部12は、各DSP13の出力判断結果を当該パケットの優先度で分別し、優先度毎に出力判断値“1”のDSP13から入力先着順で先頭となるDSP13を検索する。更に、管理部12は、優先度毎の検索結果から最高優先度のDSP13を出力対象のDSP13として選択する。その結果、優先度が高い方から入力先着順に出力対象のDSP13を選択できる。
管理部12は、出力対象のDSP13として選択し、選択した出力対象のDSP13に割り当てられたパケットのキュー番号を各DSP13に通知する。その結果、各DSP13は、出力対象のDSP13に割り当てられたパケットのキュー番号を認識できる。
各DSP13は、管理部12からの出力対象のプロセッサに割り当てられたパケットのキュー番号を受信し、当該キュー番号が割当パケットのキュー番号の場合、当該キュー番号に対応するパケット長を送信権利値から減算して送信権利値を更新する。その結果、出力対象のDSP13は、割当パケットを出力FIFOにセットして出力し、割当パケットの出力に応じて送信権利値を更新できる。
管理部12は、送信権利値が出力データ量以上である否かを判断するための出力判断プログラムを、検知したパケットを割り当てる空きDSP13に設定する。その結果、DSP13は、入力パケットが割り当てられると、出力判断プログラムを設定して出力判断処理を実行できる。
管理部12は、DSP13毎に割当てられるパケットの有無を定期的に監視し、パケットありの場合にカウント値をインクリメントすると共に、パケットなしの場合にカウント値をリセットする。更に、管理部12は、カウント値が故障閾値を超えた場合に当該DSP13の故障と判定する。その結果、管理部12は、DSP13の故障を認識できる。
管理部12では、全DSP13に対する検索や更新を行わないため、比較例のスケジューラに比べ負荷は大幅に小さくなる。その結果、集中制御を行うスケジューラが不要になり、部品の性能要求を下げることができる(コストダウン可能)。しかも、出力FIFO14は入力順序性の保証のために用いるが、出力FIFO14なので特別な処理は必要ない。また、近年では、FPGA内蔵のDSP数が増加する傾向にあるため、装置コストを安価できる。
実施例1の出力判断値レジスタ17は、各DSP13の割当パケットの出力判断値を優先度毎にマスク化し、各DSP13の出力判断値を入力先着順に1次元のビット列で保持する場合を例示した。しかしながら、DSP13の割当パケットの出力判断値を優先度毎にマスク化しなくても良く、適宜変更可能である。従って、その実施の形態につき、実施例2のパケット伝送装置として説明する。尚、実施例1のパケット伝送装置1と同一の構成には同一符号を付すことで、その重複する構成及び動作の説明については省略する。
図22は、実施例2の出力判断値レジスタ17Aのビットマップ構成の一例を示す説明図である。尚、説明の便宜上、割当パケットの優先度は、“1”が最上位、その後、“2”→“3”→…の順に優先度が低くなる。図22に示す例では、割当パケットの入力先着順序は、#4のDSP13の割当パケット→#5のDSP13の割当パケット→#1のDSP13の割当パケット→#2のDSP13の割当パケット→#3のDSP13の割当パケット→…の順序とする。出力選択部33では、入力パケットの優先度毎の出力判断値を1次元のビット列で出力判断値レジスタ17Aに格納する。つまり、出力判断値レジスタ17Aは、各DSP13の優先度毎の出力判断値を入力先着順に1次元のビット列で保持する。
図23は、実施例2の第2の出力選択処理に関わる出力選択部33の処理動作の一例を示すフローチャートである。図23において出力選択部33は、各DSP13から出力判断値を受信した場合、DSP13の割当パケットの優先度を識別することになる。そして、出力選択部33は、DSP13の出力判断値を受信する(ステップS91A)。出力選択部33は、DSP13の出力判断値を受信した場合、優先度“1”の割当パケットの出力判断値の内、出力判断値が“1”の入力先着順で先頭DSP13を検索する(ステップS92A)。また、出力選択部33は、DSP13の出力判断値を受信する(ステップS91B)。出力選択部33は、DSP13の出力判断値を受信した場合、優先度“2”の割当パケットの出力判断値の内、出力判断値が“1”の入力先着順で先頭DSP13を検索する(ステップS92B)。尚、割当パケットの優先度は、“1”及び“2”に限定されるものではなく、適宜変更可能である。つまり、出力選択部33は、割当パケットの優先度毎に出力判断値の中から出力判断値が“1”の入力先着順で先頭DSP13を検索することになる。
出力選択部33は、優先度毎に出力判断値が“1”の入力先着順で先頭DSP13を検索した場合、全ての優先度の検索結果から優先度が最上位、例えば、優先度“1”の検索結果を特定する(ステップS93)。出力選択部33は、特定された優先度の検索結果から出力判断値が“1”の先頭DSP13を出力対象のキュー番号を選択し(ステップS94)、出力対象のキュー番号を全DSP13に同報送信し(ステップS95)、図23に示す処理動作を終了する。
出力選択部33は、DSP13の割当パケットの優先度を識別し、優先度毎の出力判断値の内、出力判断値が“1”の入力先着順で先頭DSP13を検索する。出力選択部33は、優先度毎に出力判断値が“1”の先頭DSP13を検索した場合、全ての優先度の検索結果から優先度が最上位の検索結果を特定する。出力選択部33は、特定された優先度の検索結果から出力判断値が“1”の先頭DSP13のキュー番号を出力対象のキュー番号に選択し、出力対象のキュー番号を全DSP13に通知する。その結果、各DSP13は、出力対象のキュー番号を認識できる。
実施例2のパケット伝送装置1内の管理部12は、各DSP13の出力判断結果を取得し、優先度毎に出力判断値を出力判断値レジスタ17Aに格納し、優先度毎に出力判断値“1”のDSP13から入力先着順で先頭となるDSP13を検索する。更に、管理部12は、優先度毎の検索結果から最高優先度のDSPを出力対象のDSP13として選択する。その結果、優先度が高い方から入力先着順に出力対象のDSP13を選択できる。
本実施例のプロセッサとしてDSP13を例示したが、DSP13に限定されるものではなく、例えば、CPU(Central Processing Unit)、MPU(Micro Processing Unit)、MCU(Micro Controller Unit)等のプロセッサでも良く、適宜変更可能である。
尚、説明の便宜上、分散制御部3は、パケット管理メモリ15と、リソース管理メモリ16と、出力判断値レジスタ17と、故障管理メモリ18と分けて説明したが、単一のメモリでも良く、適宜変更可能である。また、パケット番号は、バッファメモリ11に当該パケットを格納する格納アドレス番号と同じとしたが、パケットを識別する番号でも良く、適宜変更可能である。
また、管理部12は、単一の場合を例示したが、管理部12の処理負担を考慮して複数設けて分散制御しても良く、適宜変更可能である。
また、図示した各部の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
更に、各装置で行われる各種処理機能は、CPU(Central Processing Unit)(又はMPU(Micro Processing Unit)、MCU(Micro Controller Unit)等のマイクロ・コンピュータ)上で、その全部又は任意の一部を実行するようにしても良い。また、各種処理機能は、CPU(又はMPU、MCU等のマイクロ・コンピュータ)で解析実行するプログラム上、又はワイヤードロジックによるハードウェア上で、その全部又は任意の一部を実行するようにしても良いことは言うまでもない。