[1.第1実施例]
以下、第1実施例に係るパケット伝送装置及びパケット伝送方法について説明する。
[1−1.パケット送信が行われるネットワーク]
まず、パケット送信が行われるネットワークについて説明する。
図2は、パケット送信が行われるネットワークの一例を示す図である。
図2に示したネットワーク200は、端末ノードとして、サーバ202やユーザ装置204−1〜7を含み、これらの端末ノードを接続する中継ノードとしてパケット伝送装置206−1〜3やハブ(HUB)208−1〜3を含む。各々の端末ノードは、少なくとも1つの中継ノードを介して、他の端末ノードと通信を行う。パケット伝送装置206−1〜3はそれぞれ帯域制御機能を有しており、図2に示した中継点210−1〜8において、物理回線単位で、トラフィックグループごとに帯域制御を行う。
例えば、ユーザ装置204−1とユーザ装置204−5の間で通信が行われる場合は、HUB208−1、パケット伝送装置206−1〜3及びHUB208−2を介して通信が行われる。このユーザ装置204−1と204−5の間の通信のトラフィックが属するトラフィックグループをトラフィックグループAとする。一方、例えば、ユーザ装置204−3とユーザ装置204−6との間で通信が行われる場合は、HUB208−1、パケット伝送装置206−1〜3及びHUB208−3を介して通信が行われる。このユーザ装置204−3と204−6の間の通信のトラフィックは、トラフィックグループAとは異なるトラフィックグループBに属することになる。
そして、上記の例では、トラフィックグループAに属するトラフィックとトラフィックグループBに属するトラフィックは、中継点210−2〜6において合流していることになる。このため、パケット伝送装置206−1〜3は、中継点210−2〜6において、それぞれ帯域制御を行う。
[1−2.パケット伝送装置の内部構成]
次に、図2に示したネットワーク200において用いられるパケット伝送装置について説明する。
図3は、パケット伝送装置300の内部構成の一例を示す図である。パケット伝送装置300は、図2に示したネットワーク200のパケット伝送装置206−1〜3に対応するものである。
図3に示したように、パケット伝送装置300は、入力インターフェース302、宛先判定部304、宛先管理テーブル306、スイッチング部308、パケットバッファ制御部310、パケットバッファ312及び出力インターフェース314を含む。
入力インターフェース302は、パケット伝送装置300の複数の入力ポート(物理回線)(図示せず)を介して、他のパケット伝送装置やサーバ、ユーザ装置といった外部装置からパケットデータを受けとる。
宛先判定部304は、入力インターフェース302からパケットデータを受けとる。宛先判定部304は、受けとったパケットの制御データを参照し、受けとったパケットの宛先情報(例えば、MAC(Media Access Control)アドレス)を取得する。宛先管理テーブル306は、例えば、MACアドレス等の宛先情報と、出力ポート等のパケット伝送装置300の出力経路に関する情報との間の対応関係を示す管理テーブルを格納している。宛先判定部304は、宛先管理テーブル306に格納された管理テーブルを参照することにより、受けとったパケットの宛先情報に対応する出力ポートを判定し、判定した出力ポート等の情報を含む出力経路情報を生成する。
スイッチング部308は、宛先判定部304からパケットデータを受けとるともに、そのパケットデータに対応する出力経路情報を受けとる。スイッチング部308は、受けとった出力経路情報に基づいて、受けとったパケットデータを出力する出力ポート(物理回線)(図示せず)の切り換え(スイッチング)を行う。スイッチング部308は、受けとったパケットデータに、スイッチングによって決定された出力ポートを示す出力ポート情報を付加することにより、送信用のパケットデータを生成する。
パケットバッファ制御部310は、スイッチング部308から送信用のパケットデータを受けとり、受けとった送信用のパケットデータをパケットバッファ312に書き込む。パケットバッファ312は、内部のデータ格納領域を論理的に分割することにより作成された複数のキューを含み、パケットが属するトラフィックグループに応じて、送信用のパケットデータを複数のキューのいずれかに一時的に格納する。パケットバッファ制御部310は、各々のトラフィックグループごとに、対応するキューを割り当てる。
パケットバッファ制御部310は、パケットバッファ312から送信用のパケットデータを読み出す際に、同一の出力ポート(物理回線)をデータ出力対象とする複数のキューに対して、各々のキューごとに帯域制御と優先制御を実行する。帯域制御は、パケットの出力を許可するか否かを判別するための情報であるトークンを用いたトークン制御により行われる。パケットバッファ制御部310は、その帯域制御(トークン制御)に基づいて、複数のキューの中から送信対象となる1つのキューを選択する優先制御を行う。パケットバッファ制御部310は、優先制御によって決定されたタイミングで、パケットバッファ312の選択されたキューから送信用のパケットデータを読み出す。パケットバッファ制御部310における帯域制御(トークン制御)及び優先制御の詳細については、後で説明する。
出力インターフェース314は、パケットバッファ制御部310から、パケットバッファ312より読み出された送信用のパケットデータを受けとる。出力インターフェース314は、送信用のパケットデータに付加された出力ポート情報に応じた出力ポートに、送信用のパケットデータを出力する。
尚、図3に示したパケット伝送装置300の各部は、例えば、FPGA(Field−Programmable Gate Array)やASIC(Application Specific Integrated Circuit)などの、デジタル信号を処理する回路又は装置によって実現することができる。パケット伝送装置300は、各部を別個の回路又は装置によって実現してもよく、全体を単一の回路又は装置によって実現してもよく、あるいは、複数の部分の機能を実現する回路又は装置を、複数個組み合わせることによって実現してもよい。
また、宛先判定テーブル306やパケットバッファ312については、他の部分とは独立したメモリによって実現することができ、例えばRAM(Random Access Memory)によって実現することができる。
[1−3.パケットバッファ制御部310の内部構成]
次に、パケットバッファ制御部310の内部構成について説明する。
図4は、パケットバッファ制御部310の内部構成の一例を示す図である。
図4に示したように、パケットバッファ制御部310は、同一の出力ポート(物理回線)をデータ出力対象とする複数のキューに対して、各々のキューごとに帯域制御と優先制御を実行する機能を有し、バッファ書き込み制御部402、キュー管理部404、及びバッファ読み出し制御部406を含む。
バッファ書き込み制御部402は、スイッチング部308から送信用のパケットデータを受けとる。バッファ書き込み制御部402は、受けとったパケットデータを格納する書き込みアドレスを指定し、パケットデータと書き込みアドレスをパケットバッファ312に供給する。パケットバッファ312は、供給された書き込みアドレスによって示されるデータ格納領域に、供給されたパケットデータを格納する。
また、バッファ書き込み制御部402は、キュー管理部404に、例えば、格納されたパケットデータの書き込みアドレス、パケット長及び制御データ等の情報を含むパケット情報を供給する。
キュー管理部404は、バッファ書き込み制御部402からパケット情報を受けとる。キュー管理部404は、受けとったパケット情報に基づいて、同一の出力ポート(物理回線)をデータ出力対象とする複数のキューの中から、パケットバッファ312に格納されたパケットデータに割り当てられるキューを特定する。キューの割り当てはトラフィックグループ単位で行われ、受けとったパケットの制御データを参照することにより、受けとったパケットが属するトラフィックグループに応じて行われる。トラフィックグループは、パケットの宛先装置やパケットを送信するユーザのグループに応じて、バケットバッファ制御部310が、送受信する複数のトラフィックをグループ化することにより形成される。
キュー管理部404は、パケットバッファ312内の複数のキューに対応する、複数のパケット情報格納部408を含む。複数のパケット情報格納部408はそれぞれ、対応するキューにおけるパケットデータの格納状況を管理するための管理情報を格納するものである。キュー管理部404は、複数のパケット情報格納部408の中から、特定したキューに対応するパケット情報格納部408を選択する。キュー管理部404は、選択したパケット情報格納部408に、特定したキューの識別情報(キュー識別情報)とともに、受けとったパケット情報を格納する。
キュー管理部404は、パケット情報格納部408に格納されたパケット情報に基づいて、各々のキューに送信可能なパケットデータが存在するか否かを判定する。キュー管理部404は、判定結果に基づいて、複数のキューに対する複数のキューステータス信号を生成する。複数のキューステータス信号はそれぞれ、対応するキューに送信可能なパケットデータが存在するか否かを示す信号であり、対応するキューに送信可能なパケットデータが存在するときにオン状態(例えば、Hレベル)となり、存在しないときにオフ状態(例えば、Lレベル)となる信号である。
バッファ読み出し制御部406は、キュー管理部404から複数のキューステータス信号を受けとる。バッファ読み出し制御部406は、受けとったキューステータス信号に基づいて、各々のキューごとに帯域制御と優先制御を実行する。帯域制御は、パケットの出力を許可するか否かを判別するための情報であるトークンを用いたトークン制御に基づいて行われる。バッファ読み出し制御部406は、その帯域制御(トークン制御)に基づいて、複数のキューの中から1つのキューを送信対象として優先的に選択する優先制御を行う。バッファ読み出し制御部406における帯域制御(トークン制御)及び優先制御の詳細については、後で説明する。バッファ読み出し制御部406は、優先制御により選択されたキューの識別情報(選択キュー識別情報)をキュー管理部404に供給する。
キュー管理部404は選択キュー識別情報を受けとり、受けとった選択キュー識別情報に基づいて、対応するキュー識別情報を有するパケット情報格納部408を特定する。キュー管理部404は、特定したパケット情報格納部408に格納されたパケット情報を参照することにより、選択されたキューに対応する読み出しアドレス(選択キュー読み出しアドレス)を生成する。
また、キュー管理部404は、受けとった選択キュー識別情報に基づいて、パケット情報格納部408に格納されたパケット情報を参照することにより、選択されたキューから読み出されるパケットデータのパケット長の情報(選択キューパケット長情報)を生成する
バッファ読み出し制御部406は、キュー管理部404から選択キュー読み出しアドレスを受けとり、受けとった選択キュー読み出しアドレスに基づいて、パケットバッファ312の選択されたキューから、送信用のパケットデータを読み出す。バッファ読み出し制御部406は、読み出した送信用のパケットデータを出力インターフェース314に供給する。また、バッファ読み出し制御部406は、キュー管理部404から選択キューパケット長情報を受けとり、受けとった選択キューパケット長情報に基づいて、各キューごとに帯域制御(トークン制御)と優先制御を継続する。
[1−4.バッファ読み出し制御部406の内部構成]
次に、バッファ読み出し制御部406の内部構成について説明する。
図5は、バッファ読み出し制御部406の内部構成の一例を示す図である。
図5に示したように、バッファ読み出し制御部406は、帯域制御部502、キュー選択部504、及びパケットデータ読み出し部508を含む。
[1−4−1.帯域制御]
まず、帯域制御部502において行われる帯域制御(トークン制御)について説明する。
帯域制御部502は、トークン制御部512、トークンテーブル514、最大値テーブル516及び複数のトークンカウンタ518(518−1〜n、nはキューの個数)を含む。
トークンテーブル514は、パケットバッファ312内の複数のキューに対応する複数の加算トークン値を記憶している。複数の加算トークン値はそれぞれ、各キューごとに定められた送信帯域に応じて周期的に加算されるトークン量を示す値であり、各キューごとに予め設定された値である。
最大値テーブル516は、複数のキューに対応する複数の最大トークン値を記憶している。複数の最大トークン値はそれぞれ、対応するトークンカウンタ518において各キューごとに蓄積可能な最大のトークン量を示す値であり、各キューごとに予め設定された値である。
トークンカウンタ518(518−1〜n)は、複数のキューに対応して設けられた複数のカウンタである。複数のトークンカウンタ518−1〜nはカウント動作によって、対応するキューごとに、加算されたトークンを蓄積し、蓄積トークン値を保持する。トークンカウンタ518−1〜nのカウント値はそれぞれ、各キューに蓄積されている現在のトークン量を示す値である。
トークン制御部512は、トークンカウンタ518−1〜nのカウント動作を制御する。トークン制御部512は、トークンテーブル514に記憶されている加算トークン値を参照し、トークンカウンタ518−1〜nに、対応する加算トークン値を供給する。また、トークン制御部512は、トークンカウンタ518−1〜nの各々に、トークンの加算タイミングを示すトリガ(トークン加算トリガ)を含むトークン加算トリガ信号を供給する。
複数のトークンカウンタ518−1〜nは、トークン加算トリガ信号を受けとり、そのトークン加算トリガによって定まる一定の周期で、各キューごとに、対応する加算トークン値を現在のカウント値(蓄積トークン値)に加算する。さらに、トークン制御部512は、最大値テーブル518に記憶されている最大トークン値を参照し、各キューごとに、加算後のカウント値が対応する最大トークン値を超える場合は、加算後のカウント値に換えて、トークンカウンタ518のカウント値(蓄積トークン値)をその最大トークン値に設定する。
また、トークン制御部512は、複数のキューに対応する複数のトークンステータス信号を生成し、キュー選択部504に供給する。複数のトークンステータス信号はそれぞれ、対応するキューに必要最低限の量のトークンが蓄積されているか否かを示す信号である。トークン制御部512は、トークンカウンタ518−1〜nのカウント値(蓄積トークン値)がそれぞれ、予め定められたトークン閾値以上(例えば、0(零)以上)であるか否かを判定する。トークン制御部512は、トークンカウンタ518のカウント値(蓄積トークン値)がそのトークン閾値以上であると判定した場合、対応するキューのトークンステータス信号をオン状態(例えば、Hレベル)にする。一方、トークン制御部512は、トークンカウンタ518のカウント値(蓄積トークン値)がトークン閾値より小さいと判定した場合には、対応するキューのトークンステータス信号をオフ状態(例えば、Lレベル)にする。尚、本実施例では、各々のキューについて共通のトークン閾値として0(零)を設けた場合を示したが、各々のキュー毎に異なるトークン閾値を設定してもよい。
更に、トークン制御部512は、複数のトリガ信号を生成し、キュー選択部504に供給する。複数のトリガ信号はそれぞれ、複数のトークンカウンタ518−1〜nに供給されるトークン加算トリガ信号と同一の周期を有する信号であり、各々のトークンカウンタ518においてトークンが加算されるタイミングを示すトリガを含む信号である。
[1−4−2.送信可能状態の継続時間の計測]
次に、キュー選択部504において行われる、対応するキューごとの送信可能状態の継続時間の計測について説明する。
キュー選択部504は、ステータス監視部522、送信可能ステータスフラグ524、トリガカウンタ526(526−1〜n)、キュー選択制御部528、優先制御閾値格納部530、アラーム通知閾値格納部532を含む。
ステータス監視部522は、帯域制御部502のトークン制御部512から、複数のトークンステータス信号及び複数のトリガ信号を受けとるともに、キュー管理部404から複数のキューステータス信号を受けとる。ステータス監視部522は、各々のキューごとに、対応するトークンステータス信号及びキューステータス信号の状態を監視する。
送信可能ステータスフラグ524は、複数のキューに対応する複数の送信可能フラグを含む。複数の送信可能フラグはそれぞれ、対応するキューが送信可能状態にあるか否かを示すものであり、送信可能状態にある場合にオン状態となり、送信可能状態にない場合はオフ状態となるものである。
ステータス監視部522は、あるキューについて、対応するトークンステータス信号がそのキューに必要最低限の量以上のトークンが蓄積されていることを示し、かつ、対応するキューステータス信号がそのキューに送信可能なパケットデータが存在することを示す場合に、そのキューは送信可能状態にあると判定し、送信可能ステータスフラグ524の対応する送信可能フラグをオン状態にする。すなわち、ステータス監視部522は、あるキューについて、対応するトークンステータス信号とキューステータス信号がともにオン状態(例えば、Hレベル)を示す場合に、そのキューは送信可能状態にあると判定し、送信可能ステータスフラグ524の対応する送信可能フラグをオン状態にする。
一方、ステータス監視部522は、あるキューについて、対応するトークンステータス信号がそのキューに必要最低限の量より少ないトークンしか蓄積されていないことを示すか、又は、対応するキューステータス信号がそのキューに送信可能なパケットデータが無いことを示す場合に、そのキューは送信可能状態にないと判定し、送信可能ステータスフラグ524の対応する送信可能フラグをオフ状態にする。すなわち、ステータス監視部522は、あるキューについて、対応するトークンステータス信号とキューステータス信号の少なくともいずれか一方がオフ状態(例えば、Lレベル)を示す場合に、そのキューは送信可能状態にないと判定し、送信可能ステータスフラグ524の対応する送信可能フラグをオフ状態にする。
また、ステータス監視部522は、トリガカウンタ526−1〜nのカウント動作を制御する。トリガカウンタ526(526−1〜n)は、複数のキューに対応して設けられた複数のカウンタである。複数のトリガカウンタ526−1〜nはそれぞれ、ステータス監視部522の制御の下、対応するキューが送信可能状態である期間内に、ステータス監視部522に供給された、対応するトリガ信号のトリガの数をカウントする。
トリガ信号は対応するキューにおいてトークンが加算されるタイミングを示す信号であり、そのトリガの数はトークンの加算回数に相当するものであることから、トリガカウンタ526−1〜nのカウント値は、送信可能状態にあるキューにおけるトークン加算回数に相当するものである。
また、トリガ信号の周期は一定(トークンカウンタ518−1〜nに供給されるトークン加算トリガ信号の周期と同一)であることから、トリガカウンタ526−1〜nのカウント値は、対応するキューの送信可能状態の継続時間を示す値ともなる。よって、ステータス監視部522は、上述のトリガカウンタ526−1〜nのカウント動作によって、対応するキューごとに、送信可能状態の継続時間を計測することができる。
上述のトリガカウンタ526−1〜nのカウント動作は、ステータス監視部522によって、以下のように制御される。
トリガカウンタ526−1〜nは、各キューごとに、送信可能ステータスフラグ524の対応する送信可能フラグがオフ状態からオン状態に変化したとき、対応するトリガ信号のトリガの数のカウント動作を開始し、対応する送信可能フラグがオン状態を示している間、トリガ信号のトリガの数のカウントを継続する。
トリガカウンタ526−1〜nは、対応する送信可能フラグがオン状態からオフ状態に変化したとき、カウント動作を停止し、カウント値をクリアする(0(零)にする)。また、トリガカウンタ526−1〜nは、後述するカウントクリア信号に応答して、カウント値をクリアする(0(零)にする)。
[1−4−3.キュー選択における優先制御]
次に、キュー選択部504において行われる、キュー選択における優先制御について説明する。
キュー選択制御部528は、パケット送信トリガに応答して、送信可能ステータスフラグ524内の複数の送信可能フラグの状態、及び、複数のトリガカウンタ526のカウント値(トークン加算回数)を参照することにより、各々のキューごとに送信可能状態の継続時間を監視し、複数のキューの中からその継続時間が予め定められた閾値よりも長いキューを送信対象として優先的に選択する優先制御を行う。
パケット送信トリガは、出力ポート(物理回線)の送信帯域に応じて定まる、データ出力対象の出力ポート(物理回線)がデータ送信可能なタイミングで発生するトリガ信号である。パケット送信トリガは、例えば、パケットバッファ制御部310内に設けられた、その出力ポート(物理回線)に対する帯域制御機能(不図示)によって、その出力ポート(物理回線)の送信帯域に一定量以上の空きがあるときに生成される。あるいは、パケット送信トリガは、例えば、出力インターフェース314内に出力ポート(物理回線)単位で設けられたキャッシュバッファ(不図示)の蓄積量が一定の量以下になったときに、出力インターフェース314によって生成されるようにしてもよい。
キュー選択部504では、優先制御は以下のようにして行われる。
優先制御閾値格納部530は、上述の優先制御の基準となる優先制御閾値を記憶している。優先制御閾値は、トリガカウンタ526のカウント値(トークン加算回数)に対する閾値であり、送信可能状態の継続時間の閾値(継続時間閾値)に対応するものである。優先制御閾値は、各キューごとに個別に設定された値としてもよく、各キューに対して共通に設定された値としてもよい。
キュー選択制御部528は、優先制御閾値格納部530を参照することにより、優先制御閾値を取得する。キュー選択制御部528は、各々のキューごとに、対応する送信可能フラグの状態とトリガカウンタ526のカウント値(トークン加算回数)を監視する。キュー選択制御部528は、複数のキューの中から、対応する送信可能フラグがオン状態を示しており、かつ、トリガカウンタ526のカウント値が、取得した優先制御閾値より大きいキューを、送信対象として優先的に選択する。
キュー選択制御部528は、優先制御により選択したキューの識別情報(選択キュー識別情報)を生成し、キュー管理部404に供給する。
尚、上述の優先制御により送信対象として2つ以上のキューが選択された場合、キュー選択制御部528は、上述のラウンドロビン(RR)により、選択された2つ以上のキューの中から送信対象のキューを1つずつ順次選択していき、対応する選択キュー識別情報を順次生成していく。
また、上述の優先制御により送信対象として1つもキューが選択されなかった場合、キュー選択制御部528は、上述のラウンドロビン(RR)により、同一の出力ポート(物理回線)をデータ出力対象とする全てのキューの中から送信対象のキューを1つずつ順次選択していき、対応する選択キュー識別情報を順次生成していく。
また、キュー選択制御部528は、同一の出力ポート(物理回線)をデータ出力対象とする複数のキューについて、その出力ポート(物理回線)の送信帯域が全て使用されている場合等、送信帯域不足にある場合には、上述の優先制御においては、送信対象として選択することが可能なキューが存在しても、そのキューの選択を行わず、送信帯域に空きが生じるまで選択を遅延させる。
キュー管理部404は、キュー選択制御部528から選択キュー識別情報を受けとる。キュー管理部404は、上記説明したように、受けとった選択キュー識別情報に基づいて、選択されたキューに対応する読み出しアドレス(選択キュー読み出しアドレス)、及び、選択されたキューから読み出されるパケットデータのパケット長の情報(選択キューパケット長情報)を生成する。
パケットデータ読み出し部508は、キュー管理部404から選択キュー読み出しアドレスを受けとり、受けとった選択キュー読み出しアドレスに基づいて、パケットバッファ312に読み出しアドレスを供給する。
パケットバッファ312は、バッファ読み出し部508から読み出しアドレスを受けとり、受けとった読み出しアドレスによって示されるデータ格納領域からパケットデータを出力する。
パケットデータ読み出し部508は、パケットバッファ312からパケットデータを受けとり、受けとったパケットデータを出力インターフェース314に供給する。
一方、帯域制御部502において、トークン制御部512は、キュー管理部404から選択キューパケット長情報を受けとり、受けとった選択キューパケット長情報に基づいて、バケットバッファ312から読み出されたパケットデータのパケット長に相当するトークン値を算出する。トークン制御部512は、選択されたキューに対応するトークンカウンタ518の現在のカウント値(蓄積トークン値)から、算出されたトークン値を減算し、選択されたキューに対応するトークンカウンタ518のカウント値(蓄積トークン値)を更新する。帯域制御部502は、更新されたカウント値(蓄積トークン値)に基づいて、各キューごとの帯域制御(トークン制御)を継続して行う。
さらに、トークン制御部512は、ステータス監視部522に、選択したキューに対応するカウントクリア信号を生成する。カウントクリア信号は、選択したキューに対応するトリガカウンタ526のカウント値をクリアすることを、ステータス監視部522に指示するための信号である。
キュー選択部504において、ステータス監視部522は、カウントクリア信号を受けとったとき、対応するトリガカウンタ526のカウント値をクリアする(0(零)にする)。
以上説明したように、第1実施例に係るバッファ読み出し制御部406においては、キュー選択部504によって、各々のキューごとに、送信可能状態の継続時間を監視し、複数のキューの中から、その継続時間が予め定められた閾値よりも長いキューを送信対象として優先的に選択する優先制御を行うようにしたので、送信可能状態にあるにもかかわらず、対応する出力ポート(物理回線)の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、送信可能状態の継続時間が長いキューから優先的に送信対象とすることができる。
これにより、各々のキューについて蓄積されるトークン量(蓄積トークン値)が増加し、これに伴って、パケット送信時においてバースト転送されるデータ量が増加するのを防止することができ、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することができる。
[1−4−4.アラーム通知処理]
次に、キュー選択部504において行われるアラーム通知処理について説明する。
ステータス監視部522は、アラーム通知閾値格納部532を参照することにより、アラーム通知閾値を取得する。アラーム通知閾値は、アラーム通知閾値格納部532に記憶されており、トリガカウンタ526のカウント値に対する閾値であり、送信可能状態の継続時間の閾値に相当するものである。
ステータス監視部522は、複数のトリガカウンタ526のカウント値を監視し、複数のトリガカウンタ526のいずれかのカウント値がアラーム通知閾値よりも大きいと判定したとき、アラーム通知信号を出力する。アラーム通知信号は、トリガカウンタ526のカウント値がアラーム通知閾値を超えたキューの識別情報や、そのイベントの発生時刻等の情報を含むようにすることができる。
アラーム通知信号は、図3に示した各部を含む、パケット伝送装置300内の各種の回路又は装置などを全体的に制御する制御装置(図示せず)に出力される。制御装置はアラーム通知信号を受けとり、例えば、アラーム通知信号の受信状況をログとして保存しておく。
以上説明したように、第1実施例に係るバッファ読み出し制御部406においては、ステータス監視部522によってアラーム通知信号を出力するようにしたので、例えば、ネットワーク管理者は、上記のログを参照することにより、パケット伝送装置300において行われた帯域制御(トークン制御)の状況を適切に把握することができ、どのキューにおいて送信可能状態の継続時間が閾値を超えやすい傾向にあるか等の統計情報を取得することができる。
これにより、ネットワーク管理者は、各キューごとの送信帯域や、各キューごとに周期的に加算されるトークン量及び蓄積されるトークン量の最大値といった各種の送信パラメータを適切に設定することができ、ネットワーク設計を適切に行うことができる。
[1−5.パケットバッファ制御部310におけるパケット伝送制御]
次に、パケット伝送装置300のパケットバッファ制御部310が実行するパケット伝送制御処理について説明する。
[1−5−1.トークン加算トリガの生成に応答して実行される処理]
図6は、トークン加算トリガの生成に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
ステップS602において、帯域制御部502のトークン制御部512は、トークンの加算タイミングを示すトリガ(トークン加算トリガ)を生成し、トークン加算トリガ信号としてトークンカウンタ518に出力する。
ステップS604において、トークン制御部512は、同一の出力ポート(物理回線)をデータ出力対象とする複数のキューの中から、1番目のキューを処理対象として選択する(k=1)。
ステップS606において、トークン制御部512は、k番目のキューに対応する加算トークン値、最大トークン値及び蓄積トークン値を取得する。トークン制御部512は、トークンテーブル514を参照することにより、k番目のキューに対応する加算トークン値を取得する。トークン制御部512は、最大値テーブル516を参照することにより、k番目のキューに対応する最大トークン値を取得する。また、トークン制御部512は、k番目のキューに対応するトークンカウンタ518からそのカウント値を読み出すことにより、蓄積トークン値を取得する。
ステップS608において、トークン制御部512は、k番目のキューに対応するトークンカウンタ518により、ステップS606において取得した蓄積トークン値と加算トークン値を加算し、加算後のトークン値がステップS606において取得した最大トークン値以上の値であるか否かを判定する。判定の結果、加算後のトークン値が最大トークン値より小さい場合、処理はステップ610に進む。加算後のトークン値が最大トークン値以上の値である場合、処理はステップ612に進む。
ステップS610において、トークン制御部512は、加算後のトークン値を、k番目のキューに対応するトークンカウンタ518のカウント値として保持することにより、加算後のトークン値を蓄積トークン値の更新値とする。また、トークン制御部512は、ステップS602において生成したトークン加算トリガに対応するトリガを生成し、k番目のキューに対応するトリガ信号として、キュー選択部504のステータス監視部522に出力する。
ステップS612において、トークン制御部512は、加算後のトークン値に換えて、k番目のキューに対応するトークンカウンタ518のカウント値をステップS606において取得した最大トークン値に設定することにより、最大トークン値を蓄積トークン値の更新値とする。また、トークン制御部512は、ステップS610の場合と同様に、トリガ信号をステータス監視部522に出力する。
ステップS614において、ステータス監視部522は、トークン制御部512から、k番目のキューに対応するトリガ信号を受けとる。ステータス監視部522は、受けとったトリガ信号に含まれるトリガに応答して、送信可能ステータスフラグ524の、k番目のキューに対応する送信可能フラグの状態をチェックする。チェックの結果、その送信可能フラグがオフ状態にある場合、処理はステップS616に進む。その送信可能フラグがオン状態にある場合、処理はステップS618に進む。
ステップS616において、ステータス監視部522は、k番目のキューに対応するトリガカウンタ526において、トークン制御部512から供給されるトリガ信号のトリガの数のカウント動作を停止し、そのカウント値(トークン加算回数)をクリアする(0(零)にする)。これにより、ステータス監視部522は、k番目のキューにおけるトークン加算回数の値をリセットし、0(零)に保持する。
ステップS618において、ステータス監視部522は、k番目のキューに対応するトリガカウンタ526において、トークン制御部512から供給されるトリガ信号のトリガの数のカウント動作を実行する。トリガカウンタ526は、トリガ信号において、トークン加算トリガに対応するトリガを検出し、そのカウント値(トークン加算回数)を1だけ増加させる。これにより、ステータス監視部522は、k番目のキューにおけるトークン加算回数の値を1だけ増加させ、トークン加算回数の値を更新する。
ステップS620において、トークン制御部512は、k番目のキューに対応するトークンカウンタ518のカウント値(蓄積トークン値)を参照することにより、蓄積トークン値が0(零)より小さい、すなわち、負の値であるか否かを判定する。判定の結果、蓄積トークン値が0(零)以上である場合、処理はステップS622に進む。蓄積トークン値が負の値である場合、処理はステップS628に進む。
ステップS622において、トークン制御部512は、k番目のキューにおいて必要最低限の量以上のトークンが蓄積されていると判定し、k番目のキューに対応するトークンステータス信号をオン状態(例えば、Hレベル)に設定する。
ステップS624において、ステータス監視部522は、k番目のキューに対応するキューステータス信号の状態をチェックする。チェックの結果、そのキューステータス信号がオン状態である場合、処理はステップS626に進む。そのキューステータス信号がオフ状態である場合、処理はステップS628に進む。
ステップS626において、ステータス監視部522は、k番目のキューに送信可能なパケットデータが存在すると判定し、送信可能ステータスフラグ524の、k番目のキューに対応する送信可能フラグをオン状態に設定する。
ステップS628において、トークン制御部512は、現在処理対象としているk番目のキューが最後のキュー(k=n、nはキューの個数)であるか否かを判定する。判定の結果、k番目のキューが最後のキューである場合、処理はステップS630に進む。k番目のキューが最後のキューでない場合、処理はステップS632に進む。
ステップS630において、パケットバッファ制御部310は、一連の処理を終了する。トークン制御部512は、次のトークン加算トリガが生成されるタイミングまで処理を停止する。
ステップS632において、トークンァ制御部512は次のキュー、すなわち、k+1番目のキューを処理対象として選択し、処理対象のキューを更新する。その後、処理はステップS606に戻り、パケットバッファ制御部310は更新された処理対象のキューに対して、ステップS606〜S628までの各処理を実行する。
以上説明したステップS602〜S632までの一連の処理によって、パケットバッファ制御部310は、トークン加算トリガの生成に応答して、各々のキューに対して蓄積されたトークン量(蓄積トークン値)に応じて、各キューごとに、トークンステータス信号及び送信可能ステータスフラグの状態を適切に設定することができる。さらに、パケットバッファ制御部310は、送信可能ステータスフラグ524の送信可能フラグがオン状態である場合に、対応するキューにおいてトークン加算回数をカウントすることにより、そのキューの送信可能状態の継続時間を適切に計測することができる。
[1−5−2.パケットの受信に応答して実行される処理]
図7は、パケットの受信に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
ステップS702において、バッファ書き込み制御部402は、送信用のパケットを受信する。バッファ書き込み制御部402は、受信した送信用のパケットデータをパケットバッファ312に書き込む。
ステップS704において、キュー管理部404は、バッファ書き込み制御部402から、書き込んだパケットデータに関するパケット情報を受けとる。キュー管理部404は、受けとったパケット情報に基づいて、同一の出力ポート(物理回線)をデータ出力対象とする複数のキューの中から、パケットバッファ312に格納されたパケットデータに割り当てられるキューを特定する。
ステップS706において、キュー管理部404は、受信したパケットが、ステップS704において特定したキューに最初に格納されるパケットであるか否かを判定する。判定の結果、受信したパケットが、特定したキューに最初に格納されるパケットである場合、処理はステップS708に進む。受信したパケットが、特定したキューに最初に格納されるパケットでない場合、処理はステップS710に進む。
ステップS708において、キュー管理部404は、ステップS704において特定したキューに送信可能なパケットデータが格納されたことを確認し、特定したキューに対応するキューステータス信号をオン状態(例えば、Hレベル)に設定し、オン状態のキューステータス信号をキュー選択部504のステータス監視部522に出力する。
ステップS710において、ステータス監視部522は、キュー管理部404から、ステップS704において特定したキューに対応するキューステータス信号を受けとる。ステータス監視部522は、受けとったキューステータス信号がオン状態であることに応答して、ステップS704において特定したキューに対応するトークンステータス信号の状態をチェックする。チェックの結果、そのキューステータス信号がオン状態である場合、処理はステップS712に進む。そのキューステータスがオフ状態である場合、処理はステップS714に進む。
ステップS712において、ステータス制御部522は、特定したキューに必要最低限の量以上のトークンが蓄積されていると判定し、送信可能ステータスフラグ524において、特定したキューに対応する送信可能フラグをオン状態に設定する。
ステップS714において、パケットバッファ制御部310は、一連の処理を終了し、次のパケットが受信されるのを待つ。
以上説明したステップS702〜S732までの一連の処理によって、パケットバッファ制御部310は、パケットの受信に応答して、各キューごとに、キューステータス信号及び送信可能ステータスフラグの状態を適切に設定することができる。
[1−5−3.パケット送信トリガに応答して実行される処理]
図8は、パケット送信トリガに応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
ステップS802において、キュー選択部504のキュー選択制御部528は、パケット送信トリガを受信する。パケット送信トリガは、上記説明したように、出力ポート(物理回線)の送信帯域によって定まる、データ出力対象の出力ポート(物理回線)が送信可能なタイミングで発生するトリガ信号である。
ステップS804において、キュー選択制御部528は、優先制御閾値格納部530を参照することにより優先制御閾値を取得するとともに、送信可能ステータスフラグ524の状態、及び複数のトリガカウンタ526のカウント値をチェックする。キュー選択制御部528は、複数のキューの中で、送信可能ステータスフラグ524の対応する送信可能フラグがオン状態であり、かつ、トークン加算回数が優先制御閾値よりも大きいキュー(優先キュー)が存在するか否かを判定する。判定の結果、優先キューが存在する場合、処理はステップS806に進む。優先キューが存在しない場合、処理はステップS808に進む。
ステップS806において、キュー選択制御部528は、複数のキューの中で、上述の優先キューが複数個存在する場合は、複数の優先キューの中からラウンドロビンにより、1つのキューを送信対象として選択する。キュー選択制御部528は、上述の優先キューが1つしか存在しない場合は、その1つの優先キューを送信対象として選択する。キュー選択制御部528は、選択したキューの識別情報(選択キュー識別情報)をキュー管理部404に通知する。
ステップS808において、キュー選択制御部528は、複数のキューの中で、送信可能ステータスフラグ530の対応する送信可能フラグがオン状態であるキューが存在するか否かを判定する。判定の結果、送信可能フラグがオン状態のキューが存在する場合、処理はステップS810に進む。送信可能フラグがオン状態のキューが存在しない場合、処理はステップS824に進む。
ステップS810において、キュー選択制御部528は、対応する送信可能フラグがオン状態のキューが複数個存在する場合は、複数のキューの中からラウンドロビンにより、1つのキューを送信対象として選択する。キュー選択制御部528は、対応する送信可能フラグがオン状態のキューが1つしか存在しない場合は、その1つのキューを送信対象として選択する。キュー選択制御部528は、選択したキューの識別情報(選択キュー識別情報)をキュー管理部404に通知する。
ステップS812において、キュー管理部404は、選択キュー識別情報に基づいて、ステップS806又はS810において選択したキューに対応するパケット情報格納部408を参照し、選択したキューに格納されている、先頭のパケットデータの読み出しアドレスを生成する。パケットデータ読み出し部508は、生成した読み出しアドレスによって示されるパケットバッファ312のデータ格納領域からパケットデータを読み出すことにより、先頭のパケットデータを出力インターフェース314に出力する。
ステップS814において、帯域制御部502のトークン制御部512は、キュー管理部404から、選択したキューから読み出されたパケットデータのパケット長の情報(選択キューパケット長情報)を受けとり、そのパケット長に相当するトークン値を算出する。トークン制御部512は、選択されたキューに対応するトークンカウンタ518の現在のカウント値(蓄積トークン値)から、算出されたトークン値を減算することにより、選択したキューの蓄積トークン値を更新する。
さらに、トークン制御部512は、選択したキューに対応するトリガカウンタ526のカウント値のクリアをステータス監視部522に要求する。ステータス監視部522は、そのクリア要求に応答して、選択したキューに対応するトリガカウンタ526のカウント値(トークン加算回数)をクリアする(0(零)にする)ことにより、トークン加算回数をリセットする。
ステップS816において、キュー管理部404は、ステップS812におおけるパケットデータの出力後に、パケットバッファ312内の選択したキューにパケットデータが残っているか否かを判定する。判定の結果、パケットデータが残っていない場合、処理はステップS818に進む。パケットデータが残っている場合、処理はステップS820に進む。
ステップS818において、キュー管理部404は、選択したキューにパケットデータが残っていないことを確認し、選択したキューに対応するキューステータス信号をオフ状態(例えば、Lレベル)に設定する。ステータス監視部522は、キューステータス信号がオフ状態に変化したことに応答して、送信可能ステータスフラグ524の選択したキューに対応する送信可能フラグをオフ状態に設定する。
ステップS820において、トークン制御部512は、ステップS814における更新後の、選択したキューに対応するトークンカウンタ518のカウント値(蓄積トークン値)を参照することにより、ステップS812におけるパケットデータの出力後において、選択したキューに対応する蓄積トークン値が、閾値(例えば、0(零))以上の値であるか否かを判定する。判定の結果、選択した蓄積トークン値が閾値以上である場合、処理はステップS824に進む。選択したキューに対応する蓄積トークン値が閾値より小さい場合、処理はステップS822に進む。
ステップS822において、トークン制御部512は、選択したキューに必要最低限の量以上のトークンが残っていないと判定し、選択したキューに対応するトークンステータス信号をオフ状態(例えば、Lレベル)に設定する。ステータス監視部522は、トークンステータス信号がオフ状態に変化したことに応答して、送信可能ステータスフラグ524の選択したキューに対応する送信可能フラグをオフ状態に設定する。
ステップS824において、パケットバッファ制御部310は一連の処理を終了する。
以上説明したステップS802〜S824までの一連の処理によって、パケットバッファ制御部310は、パケット送信トリガの受信に応答して送信対象のキューを選択する際に、各々のキューのトークン加算回数に応じて優先制御を行うか否かを判定することができるので、各々のキューに対して、その送信可能状態の継続時間に応じた優先制御を適切に行うことができる。
これにより、送信可能状態にあるにもかかわらず、対応する出力ポート(物理回線)の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、送信可能状態の継続時間が長いキューから優先的に送信対象とすることができる。よって、各々のキューについて蓄積されるトークン量(蓄積トークン値)が増加し、これに伴って、パケット送信時においてバースト転送されるデータ量が増加するのを防止することができ、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することができる。
さらに、パケットバッファ制御部310は、選択したキューからパケットデータを出力した後においても、各キューごとに、送信可能ステータスフラグの状態を適切に設定することができる。
[1−5−4.パケットバッファ制御部の変形例]
図6〜図8に示した各々のパケット伝送制御処理は、図4及び図5に示したハードウェアによって実現する代わりに、図6〜図8に示した各々の処理をプログラムに実行させることにより、ソフトウェアによって実現することも可能である。
この場合、パケットバッファ制御部310は例えば、図6〜図8に示した各々のステップを処理内容とするプログラム(パケットバッファ制御プログラム)を格納するプログラムメモリ、そのプログラムを実行可能なプロセッサ、及びそのプロセッサによる演算処理のワークエリアを提供するワークメモリを含むものとすることができる。
パケットバッファ制御部310のプロセッサは、ワークメモリを用いて、プログラムメモリに格納されたパケットバッファ制御プログラムを実行することにより、図4及び図5に示したパケットバッファ制御部310内部の各々の部分が連携して実行する処理と同等の処理を実行することができる。
[2.第2実施例]
以下、第2実施例に係るパケット伝送装置及びパケット伝送方法について説明する。
[2−1.バッファ読み出し制御部906の内部構成]
第2実施例に係るパケット伝送装置900の構成は、図3〜図5に示したパケット伝送装置300の構成と、パケットバッファ制御部に含まれるバッファ読み出し制御部の内部構成の点で異なるが、それ以外の部分は同様である。よって、第2実施例に係るパケット伝送装置900の全体構成については、図示及び説明を省略し、第2実施例に係るパケットバッファ制御部910におけるバッファ読み出し制御部906の内部構成について説明する。
図9は、第2実施例に係るバッファ読み出し制御部906の内部構成の一例を示す図である。バッファ読み出し制御部906の構成は、図5に示したバッファ読み出し制御部406の構成と、帯域制御部及びキュー選択部の内部構成の点で異なっているが、それ以外の部分については同様である。
図9に示した帯域制御部902は、図5に示した帯域制御部502に、トークン閾値テーブル920が追加され、トークン制御部512の代わりにトークン制御部912が設けられている点、及び、トークン制御部912がトークン閾値超過ステータス信号を生成する点で異なっているが、その以外の部分については同様である。
図9に示したキュー選択部904は、図5に示したキュー選択部504と、トリガカウンタ526及び優先制御閾値格納部530が設けられておらず、代わりにトークン閾値超過ステータスフラグ934が追加されている点、及び、ステータス監視部522の代わりにステータス監視部922が設けられている点で異なっているが、その以外の部分については同様である。
尚、図9において、図5に示したバッファ読み出し制御部406と同一又は対応する部分は、同一の符号で示されている。図9において同一の符号で示した部分の動作や機能は、図5において説明したとおりであるので、詳細な説明は省略する。
[2−1−1.帯域制御]
まず、帯域制御部902において行われる帯域制御(トークン制御)について説明する。
帯域制御部902において、トークン制御部912は、図5に示したトークン制御部512と同様に、トークンテーブル514に記憶されている加算トークン値及び最大値テーブル516に記憶されている最大トークン値を参照することにより、トークンカウンタ518−1〜nのカウント動作を制御する。
トークン閾値テーブル920は、複数のキューに対応する複数の蓄積トークン閾値を記憶している。複数の蓄積トークン閾値はそれぞれ、対応するトークンカウンタ518において十分な量のトークンが蓄積されているか否かを判定するための基準値であり、各キューごとに予め設定された値である。各々の蓄積トークン閾値は、上述した、トークンステータス信号の状態を決定するための閾値よりも大きい値である。
トークン制御部912は、複数のキューに対応する複数のトークン閾値超過ステータス信号を生成し、キュー選択部904に供給する。複数のトークン閾値超過ステータス信号はそれぞれ、対応する蓄積トークン値が蓄積トークン閾値以上の値であるか否かを示す信号であり、対応するキューに十分な量のトークンが蓄積されているか否かを示す信号である。
トークン制御部912は、トークン閾値テーブル920に記憶されている蓄積トークン閾値を参照することにより、トークンカウンタ518−1〜nのカウント値(蓄積トークン値)がそれぞれ、対応する蓄積トークン閾値以上の値である否かを判定する。トークン制御部912は、トークンカウンタ518のカウント値(蓄積トークン値)が蓄積トークン閾値以上の値であると判定した場合、対応するキューのトークン閾値超過ステータス信号をオン状態(例えば、Hレベル)にする。一方、トークン制御部912は、トークンカウンタ518のカウント値(蓄積トークン値)が蓄積トークン閾値より小さいと判定した場合には、対応するキューのトークン閾値超過ステータス信号をオフ状態(例えば、Lレベル)にする。
トークン制御部912は、図5に示したトークン制御部512と同様に、複数のキューに対応する複数のトークンステータス信号を生成し、キュー選択部904に供給する。複数のトークンステータス信号については、図5において説明したとおりである。
[2−1−2.送信可能状態の継続時間の計測、及び、キュー選択における優先制御]
次に、キュー選択部904において行われる、送信可能状態の継続時間の計測、及び、キュー選択における優先制御について説明する。
キュー選択部904において、ステータス監視部922は、トークン制御部912から、複数のトークンステータス信号及び複数のトークン閾値超過ステータス信号を受けとるともに、キュー管理部404から複数のキューステータス信号を受けとる。ステータス監視部922は、各々のキューごとに、対応するトークンステータス信号、トークン閾値超過ステータス信号及びキューステータス信号の状態を監視する。
ステータス監視部922は、図5に示したステータス監視部522と同様に、各キューごとに、対応するトークンステータス信号とキューステータス信号の状態に応じて、そのキューが送信可能な状態にあるか否かを判定し、送信可能ステータスフラグ524の対応する送信可能フラグの状態を制御する。
トークン閾値超過ステータスフラグ934は複数のキューに対応する複数の閾値超過フラグを含む。複数の閾値超過フラグはそれぞれ、対応するトークン閾値超過ステータス信号がオン状態であるか否か、すなわち、対応するキューに十分な量のトークンが蓄積されているか否かを示すものである。
ステータス監視部922は、あるキューについて、対応するトークン閾値超過ステータス信号がオン状態(例えば、Hレベル)である場合に、対応する閾値超過フラグをオン状態に設定する。一方、ステータス監視部922は、あるキューについて、対応するトークン閾値超過ステータス信号がオフ状態である場合に、対応する閾値超過フラグをオフ状態に設定する。
キュー選択制御部928は、パケット送信トリガに応答して、送信可能ステータスフラグ524内の複数の送信可能フラグ及びトークン閾値超過ステータスフラグ内の複数の閾値超過フラグの状態を参照することにより、各々のキューごとに送信可能状態の継続時間を監視し、複数のキューの中から、送信可能状態の継続時間が予め定められた閾値よりも長いキューを送信対象として優先的に選択する優先制御を行う。尚、パケット送信トリガについては、図5においてキュー選択制御部528に関連して説明したとおりである。
キュー選択部904において、優先制御は以下のようにして行われる。
キュー選択制御部928は、各々のキューごとに、対応する送信可能フラグと閾値超過フラグの状態を監視する。キュー選択制御部928は、あるキューについて、対応する送信可能フラグがオン状態になった時点で、そのキューが送信可能状態になったと判定し、その後さらに、対応する閾値超過フラグがオン状態になったときに、そのキューの送信可能状態の継続時間が予め定められた閾値を超えたと判定する。すなわち、キュー選択制御部928は、対応する送信可能フラグと閾値超過フラグがともにオン状態を示すキューについては、その送信可能状態の継続時間が一定の閾値を超えたものと判定する。
閾値超過フラグがオン状態になったということは、対応するキューに十分な量のトークンが蓄積されていることを意味することから、送信可能状態にあるキューに対応する閾値超過フラグがオン状態になったということは、そのキューにおいて送信可能なパケットデータは存在するが、そのパケットデータの送信が行われず、トークンが使用されない状態が継続していることを意味するためである。
キュー選択制御部928は、対応する送信可能フラグと閾値超過フラグがともにオン状態であるキューを送信対象として優先的に選択する。キュー選択制御部928は、優先制御により選択したキューの識別情報(選択キュー識別情報)を生成し、キュー管理部404に供給する。
尚、上述の優先制御により送信対象として2つ以上のキューが選択された場合、キュー選択制御部928は、上述のラウンドロビン(RR)により、選択された2つ以上の優先キューの中から送信対象のキューを1つずつ順次選択していき、対応する選択キュー識別情報を順次生成していく。
また、上述の優先制御により送信対象として1つもキューが選択されなかった場合、キュー選択制御部928は、上述のラウンドロビン(RR)により、同一の出力ポート(物理回線)をデータ出力対象とする全てのキューの中から送信対象のキューを1つずつ順次選択していき、対応する選択キュー識別情報を順次生成していく。
一方、キュー選択制御部928は、同一の出力ポート(物理回線)をデータ出力対象とする複数のキューについて、その出力ポート(物理回線)の送信帯域が全て使用されている場合等、送信帯域不足にある場合には、上述の優先制御においては、送信対象として選択することが可能なキューが存在しても、そのキューの選択を行わず、送信帯域に空きが生じるまで選択を遅延させる。
パケットデータ読み出し部508は、図5に示したバッファ読み出し制御部406の場合と同様に、キュー管理部404から供給された選択キュー読み出しアドレスに基づいて、パケットバッファ312からパケットデータを読み出し、出力インターフェース314に供給する。
一方、帯域制御部902において、トークン制御部912は、図5に示したトークン制御部512と同様に、キュー管理部404から供給される選択キューパケット長情報に基づいて、読み出されたパケットデータのパケット長に相当するトークン値を算出し、算出されたトークン値に基づいて、選択したキューに対応するトークンカウンタ518のカウント値(蓄積トークン値)を更新する。帯域制御部902は、更新されたカウント値(蓄積トークン値)に基づいて、各キューごとの帯域制御(トークン制御)を継続して行う。
以上説明したように、第2実施例に係るバッファ読み出し制御部906においては、キュー選択部904によって、各々のキューごとに、送信可能状態の継続時間を監視し、複数のキューの中から、その継続時間が予め定められた閾値よりも長いキューを送信対象として優先的に選択する優先制御を行うようにしたので、送信可能状態にあるにもかかわらず、対応する出力ポート(物理回線)の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、送信可能状態の継続時間が長いキューから優先的に送信対象とすることができる。
これにより、各々のキューについて蓄積されるトークン量(蓄積トークン値)が増加し、これに伴って、パケット送信時においてバースト転送されるデータ量が増加するのを防止することができ、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することができる。
また、第2実施例に係るバッファ読み出し制御部906においては、バッファ読み出し制御部406とは異なり、カウンタを用いることなく、トークン閾値超過ステータスフラグ934のフラグ情報に基づいて、各々のキューごとの送信可能状態の継続時間を計測するようにしたので、キュー選択部904の内部構成を、図5に示したキュー選択部504と比べて、よりシンプルなものとすることができ、回路や装置の全体の規模を増大させることなく、上述の作用効果を得ることができる。
[2−2.パケットバッファ制御部910におけるパケット伝送制御]
次に、パケット伝送装置900のパケットバッファ制御部910が実行するパケット伝送制御処理について説明する。
[2−2−1.トークン加算トリガの生成に応答して実行される処理]
図10は、パケットバッファ制御部910において、トークン加算トリガの生成に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
ステップS1002からS1010までの処理は、図6に示したステップS602からS610までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップS1012及びS1010の後、処理はステップS1014に進む。
ステップ1014からS1020までの処理は、図6に示したステップS620からS626までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップS1014において蓄積トークン値が負の値である場合、及び、ステップS1018においてキューステータス信号がオン状態でない場合、処理はステップS1022に進む。また、ステップS1020の後、処理はステップS1022に進む。
ステップS1022において、帯域制御部902のトークン制御部912は、k番目のキューに対応する蓄積トークン閾値を取得する。トークン制御部912は、トークン閾値テーブル920を参照することにより、k番目のキューに対応する蓄積トークン閾値を取得する。
ステップS1024において、トークン制御部912は、ステップS1010又はS1012において更新した蓄積トークン値が、ステップS1022において取得した蓄積トークン閾値より小さいか否かを判定する。判定の結果、蓄積トークン値が蓄積トークン閾値以上である場合、処理はステップS1026に進む。蓄積トークン値が蓄積トークン閾値より小さい場合、処理はステップS1028に進む。
ステップS1026において、トークン制御部912は、k番目のキューに十分な量のトークンが蓄積されていると判定し、k番目のキューに対応するトークン閾値超過ステータス信号をオン状態(例えば、Hレベル)に設定する。また、キュー選択部904のステータス監視部922は、k番目のキューに対応するトークン閾値超過ステータス信号がオン状態に設定されたことに応答して、トークン閾値超過ステータスフラグ934のk番目のキューに対応する閾値超過フラグをオン状態(例えば、Hレベル)に設定する。
ステップS1028からS1032までの処理は、図6に示したステップS628からS632までの処理と同様である。よって、処理内容についての詳細な説明は省略する。
以上説明したステップS1002〜S1032までの一連の処理によって、パケットバッファ制御部910は、トークン加算トリガの生成に応答して、各々のキューに対して蓄積されたトークン量(蓄積トークン値)に応じて、各キューごとに、トークンステータス信号及び送信可能ステータスフラグの状態を適切に設定することができる。
さらに、パケットバッファ制御部910は、各々のキューに対して蓄積されたトークン量(蓄積トークン値)をトークン閾値超過ステータスフラグ934の閾値超過フラグの状態によって監視することにより、そのキューの送信可能状態の継続時間が一定の閾値を超えたことを適切に判定することができる。
[2−2−2.パケットの受信に応答して実行される処理]
図11は、パケットバッファ制御部910において、パケットの受信に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
ステップS1102からS1114までの処理は、図7に示したステップS702からS714までの処理と同様である。よって、処理内容についての詳細な説明は省略する。
ステップS1102からS1114までの一連の処理によって、パケットバッファ制御部910は、パケットの受信に応答して、各キューごとに、キューステータス信号及び送信可能ステータスフラグの状態を適切に設定することができる。
[2−2−3.パケット送信トリガに応答して実行される処理]
図12は、パケット送信トリガに応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
ステップS1202において、キュー選択部904のキュー選択制御部928は、パケット送信トリガを受信する。尚、パケット送信トリガについては、図5においてキュー選択制御部528に関連して説明したとおりである。
ステップS1204において、キュー選択制御部928は、送信可能ステータスフラグ524及びトークン閾値超過ステータスフラグ934の状態をチェックする。キュー選択制御部928は、複数のキューの中で、送信可能ステータスフラグ524の対応する送信可能フラグがオン状態であり、かつ、トークン閾値超過ステータスフラグ934の対応する閾値超過フラグがオン状態であるキュー(優先キュー)が存在するか否かを判定する。判定の結果、優先キューが存在する場合、処理はステップS1206に進む。優先キューが存在しない場合、処理はステップS1208に進む。
ステップS1206において、キュー選択制御部928は、複数のキューの中で、上述の優先キューが複数個存在する場合は、複数の優先キューの中からラウンドロビンにより、1つのキューを送信対象として選択する。キュー選択制御部928は、上述の優先キューが1つしか存在しない場合は、その1つの優先キューを送信対象として選択する。キュー選択制御部928は、選択したキューの識別情報(選択キュー識別情報)をキュー管理部404に通知する。ステップS1206の後、処理はステップS1212に進む。
ステップS1208において、キュー選択制御部928は、複数のキューの中で、送信可能ステータスフラグ530の対応する送信可能フラグがオン状態であるキューが存在するか否かを判定する。判定の結果、送信可能フラグがオン状態のキューが存在する場合、処理はステップS1210に進む。送信可能フラグがオン状態のキューが存在しない場合、処理はステップS1228に進む。
ステップS1210において、キュー選択制御部928は、対応する送信可能フラグがオン状態のキューが複数個存在する場合は、複数のキューの中からラウンドロビンにより、1つのキューを送信対象として選択する。キュー選択制御部928は、対応する送信可能フラグがオン状態のキューが1つしか存在しない場合は、その1つのキューを送信対象として選択する。キュー選択制御部528は、選択したキューの識別情報(選択キュー識別情報)をキュー管理部404に通知する。ステップS1206の後、処理はステップS1212に進む。
ステップS1212からS1218までの処理は、ステップS1214においてトークン加算回数のリセットが行われない点を除いて、図8に示したステップS812からS818までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップS1216及びS1218の後、処理はステップS1220に進む。
ステップS1220において、帯域制御部902のトークン制御部912は、トークン閾値テーブル920を参照することにより、選択したキューに対応する蓄積トークン閾値を取得する。トークン制御部912はさらに、ステップS1214における更新後の、選択したキューに対応するトークンカウンタ518のカウント値を参照することにより、ステップS1212におけるパケットデータの出力後の、選択したキューに対応する蓄積トークン値を取得する。これにより、トークン制御部912は、選択したキューに対応する蓄積トークン値の更新値が蓄積トークン閾値以上の値であるか否かを判定する。判定の結果、蓄積トークン値の更新値が蓄積トークン閾値より小さい値である場合、処理はステップS1222に進む。蓄積トークン値の更新値が閾値以上の値である場合、処理はステップS1228に進む。
ステップS1222において、トークン制御部912は、選択したキューに十分な量のトークンが残っていないと判定し、選択したキューに対応するトークン閾値超過ステータス信号をオフ状態(例えば、Lレベル)に設定する。キュー選択部906のステータス監視部922は、トークン閾値超過ステータス信号がオフ状態に変化したことに応答して、トークン閾値超過ステータスフラグ934の選択したキューに対応する閾値超過フラグをオフ状態に設定する。ステップS1222の後、処理はステップS1224に進む。
ステップS1224からS1228までの処理は、図8に示したステップS820からS824までの処理と同様である。よって、処理内容についての詳細な説明は省略する。
以上説明したステップS1202〜S1228までの一連の処理によって、パケットバッファ制御部910は、パケット送信トリガの受信に応答して送信対象のキューを選択する際に、各々のキューのトークン閾値値超過ステータスフラグの状態に応じて優先制御を行うか否かを判定することができるので、各々のキューに対して、その送信可能状態の継続時間に応じた優先制御を適切に行うことができる。
これにより、送信可能状態にあるにもかかわらず、対応する出力ポート(物理回線)の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、送信可能状態の継続時間が長いキューから優先的に送信対象とすることができる。よって、各々のキューについて蓄積されるトークン量(蓄積トークン値)が増加し、これに伴って、パケット送信時においてバースト転送されるデータ量が増加するのを防止することができ、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することができる。
さらに、パケットバッファ制御部910は、選択したキューからパケットデータを出力した後においても、各キューごとに、トークン閾値超過フラグ及び送信可能ステータスフラグの状態を適切に設定することができる。
[2−2−4.パケットバッファ制御部の変形例]
第1実施例の場合と同様に、図10〜図12に示した各々のパケット伝送制御処理は、図4及び図9に示したハードウェアによって実現する代わりに、図10〜図12に示した各々の処理をプログラムに実行させることにより、ソフトウェアによって実現することも可能である。
この場合、パケットバッファ制御部910は例えば、図10〜図12に示した各々のステップを処理内容とするプログラム(パケットバッファ制御プログラム)を格納するプログラムメモリ、そのプログラムを実行可能なプロセッサ、及びそのプロセッサによる演算処理のワークエリアを提供するワークメモリを含むものとすることができる。
パケットバッファ制御部910のプロセッサは、ワークメモリを用いて、プログラムメモリに格納されたパケットバッファ制御プログラムを実行することにより、図4及び図9に示したパケットバッファ制御部910内部の各々の部分が連携して実行する処理と同等の処理を実行することができる。
[3.第3実施例]
以下、第3実施例に係るパケット伝送装置及びパケット伝送方法について説明する。
[3−1.バッファ読み出し制御部1306の内部構成]
第3実施例に係るパケット伝送装置1300の構成は、図3〜図5及び図9に示したパケット伝送装置300及び900の構成と、パケットバッファ制御部に含まれるバッファ読み出し制御部の内部構成の点で異なるが、それ以外の部分は同様である。よって、第3実施例に係るパケット伝送装置1300の全体構成については、図示及び説明を省略し、第3実施例に係るパケットバッファ制御部1310におけるバッファ読み出し制御部1306の内部構成について説明する。
図13は、第3実施例に係るバッファ読み出し制御部1306の内部構成の一例を示す図である。バッファ読み出し制御部1306の構成は、図5及び図9に示したバッファ読み出し制御部406及び906の構成と、帯域制御部及びキュー選択部の内部構成の点で異なっているが、それ以外の部分については同様である。
図13に示した帯域制御部1302は、図5及び図9に示した帯域制御部502及び902と、トークン閾値テーブル1320が追加され、トークン制御部512及び912の代わりにトークン制御部1312が設けられている点、及び、トークン制御部1312がトリガ信号とトークン閾値超過ステータス信号の2つを生成する点で異なっているが、その以外の部分については同様である。
図13に示したキュー選択部1304は、図5及び図9に示したキュー選択部504及び904と、トリガカウンタ526の代わりにトリガカウンタ1326が設けられ、トリガカウンタ1326と同時にトークン閾値超過ステータスフラグ934も設けられている点、及びステータス監視部522及び922の代わりにステータス監視部1322が設けられている点で異なっているが、その以外の部分については同様である。
尚、図13において、図5に示したバッファ読み出し制御部406と同一又は対応する部分は、同一の符号で示されており、図9に示したバッファ読み出し制御部906と同一又は対応する部分は、同一の符号で示されている。図13において同一の符号で示された部分の動作や機能は、図5及び図9において説明したとおりであるので、詳細な説明は省略する。
[3−1−1.帯域制御]
まず、帯域制御部1302において行われる帯域制御(トークン制御)について説明する。
帯域制御部1302において、トークン制御部1312は、図5に示したトークン制御部512と同様に、トークンテーブル514に記憶されている加算トークン値及び最大値テーブル516に記憶されている最大トークン値を参照することにより、トークンカウンタ518−1〜nのカウント動作を制御する。
トークン閾値テーブル1320は、複数のキューに対応する複数の蓄積トークン発生閾値及び複数の蓄積トークン解除閾値を記憶している。
複数の蓄積トークン発生閾値はそれぞれ、対応するトークンカウンタ518において十分な量のトークンが蓄積されているか否かを判定するための第1の基準値であり、各キューごとに予め設定された値である。複数の蓄積トークン発生閾値は、上述した、トークンステータス信号の状態を決定するための閾値よりも大きい値である。
複数の蓄積トークン解除閾値はそれぞれ、対応するトークンカウンタ518において十分な量のトークンが蓄積されているか否かを判定するための第2の基準値であり、各キューごとに予め設定された値である。また、複数の蓄積トークン解除閾値はそれぞれ、対応するトークンカウンタ518において、後述するトークン加算処理を実行するか否かを判定するための基準値である。複数の蓄積トークン解除閾値は、上述した、トークンステータス信号の状態を決定するための閾値よりも大きい値である。また、複数の蓄積トークン解除閾値はそれぞれ、同一のキューに対応する蓄積トークン発生閾値よりも小さい値であることが好ましく、同一のキューに対応する蓄積トークン発生閾値と蓄積トークン解除閾値の間の差分値が、パケットデータ読み出し部508から出力されるパケットデータのパケット長に相当するトークン値よりも大きくなるようにすることが好ましい。但し、蓄積トークン解除閾値は蓄積トークン発生と同一の値としてもよい。
トークン制御部1312は、トークン閾値テーブル1320に記憶されている蓄積トークン発生閾値及び蓄積トークン解除閾値を参照することにより、複数のキューに対応する複数のトークン閾値超過ステータス信号を生成し、ステータス監視部1322に供給する。
トークン制御部1312は、トークンカウンタ518−1〜nのカウント値(蓄積トークン値)がそれぞれ、対応する蓄積トークン発生閾値以上の値である否かを判定する。トークン制御部912は、トークンカウンタ518のカウント値(蓄積トークン値)が蓄積トークン発生閾値以上の値であると判定した場合、対応するキューのトークン閾値超過ステータス信号をオン状態(例えば、Hレベル)にする。一方、トークン制御部1312は、トークンカウンタ518−1〜nのカウント値(蓄積トークン値)がそれぞれ、対応する蓄積トークン解除閾値以上の値である否かを判定する。トークン制御部1312は、トークンカウンタ518のカウント値(蓄積トークン値)が蓄積トークン解除閾値より小さいと判定した場合には、対応するキューのトークン閾値超過ステータス信号をオフ状態(例えば、Lレベル)にする。このように、蓄積トークン発生閾値と蓄積トークン解除閾値を別々に設けることにより、トークン制御部1312は、トークン閾値超過ステータス信号のオン状態及びオフ状態の設定に対して、ヒステリシス特性を付与することができる。
また、トークン制御部1312は、図5に示したトークン制御部512と同様に、複数のキューに対応する複数のトークンステータス信号及び複数のトリガ信号を生成し、ステータス監視部1322に供給する。複数のトークンステータス信号及び複数のトリガ信号については、図5において説明したとおりである。
[3−1−2.送信可能状態の継続時間の計測]
次に、キュー選択部1302において行われる、対応するキューごとの送信可能状態の継続時間の計測について説明する。
キュー選択部1304において、ステータス監視部1322は、トークン制御部1312から、複数のトークンステータス信号、複数のトリガ信号及び複数のトークン閾値超過ステータス信号を受けとるともに、キュー管理部404から複数のキューステータス信号を受けとる。ステータス監視部1322は、各々のキューごとに、対応するトークンステータス信号、キューステータス信号及びトークン閾値超過ステータス信号の状態を監視する。
ステータス監視部1322は、図5に示したステータス監視部522と同様に、各キューごとに、対応するトークンステータス信号とキューステータス信号の状態に応じて、対応するキューが送信可能な状態にあるか否かを判定し、送信可能ステータスフラグ524の対応する送信可能フラグの状態を制御する。
ステータス監視部1322は、図9に示したステータス監視部922と同様に、各キューごとに、対応するトークン閾値超過ステータス信号の状態に応じて、トークン閾値超過ステータスフラグ934の対応する閾値超過フラグの状態を制御する。
ステータス監視部1322は、あるキューについて、送信可能ステータスフラグ524の対応する送信可能フラグとトークン閾値超過ステータスフラグ934の対応する閾値超過フラグがともにオン状態を示す場合、そのキューは送信可能状態が一定の時間以上継続しているキューであって、後述するトークン加算処理を行う候補となるキュー(トークン加算候補キュー)であると判定する。ステータス監視部1322は、そのキューがトークン加算候補キューであることを示す制御情報を、トークン加算制御情報の一部として、トークン制御部1312に通知する。
トークン制御部1312は、ステータス監視部1322からトークン加算候補キューの制御情報を受けとる。トークン制御部1312は、受けとった制御情報に基づいて、トークン加算候補キューに対応するトークンカウンタ518においては、そのカウント動作を停止させる。すなわち、トークン加算候補キューに対応するトークンカウンタ518は、加算トークン値及びトークン加算トリガが供給され、トークンが加算されるタイミングになっても、そのカウント値を更新せず、本来加算されるはずのトークンを廃棄する。トークンカウンタ518のカウント値(蓄積トークン値)はすでに蓄積トークン発生閾値を超えているため、カウント動作を継続してトークンの加算を継続したとしても、カウント値が最大トークン値に達してしまい、本来加算することが可能なはずのトークンを加算することができないからである。
尚、トークンカウンタ518のカウント動作を停止させた場合でも、後述するように、代わりにトリガカウンタ1326のカウント動作が開始されるため、加算されずに廃棄されることになるトークン量は、トリガカウンタ1326のカウント値(トークン廃棄回数)として保持される。
更に、ステータス監視部1322は、トリガカウンタ1326−1〜nのカウント動作を制御する。トリガカウンタ1326(1326−1〜n)は、複数のキューに対応して設けられた複数のカウンタである。トリガカウンタ1326−1〜nはそれぞれ、ステータス監視部1322の制御の下で、対応するキューが送信可能状態であり、かつ、対応する蓄積トークン値が蓄積トークン発生閾値を超えている期間内に、ステータス監視部1322に供給された、対応するトリガ信号のトリガの数をカウントする。
トリガ信号は、トークンカウンタ518におけるトークン加算タイミングを示す信号であるが、上述のように、対応するキューが送信可能状態であり、かつ、対応する蓄積トークン値が蓄積トークン発生閾値を超えている期間は、対応するトークンカウンタ518はそのカウント値の更新を停止する。よって、トリガカウンタ1326−1〜nのカウント値は、送信可能状態にあるキューにおいて、対応する蓄積トークン値が蓄積トークン発生閾値を超えた後に、本来加算されるべきであったにもかかわらず、トークンが加算されずに廃棄された回数(トークン廃棄回数)に相当する値となる。
また、トリガ信号の周期は一定(トークンカウンタ518−1〜nに供給されるトークン加算トリガ信号の周期と同一)であることから、トリガカウンタ1326−1〜nのカウント値は、対応する蓄積トークン値が蓄積トークン発生閾値を超えた後の、対応するキューの送信可能状態の継続時間を示す値となる。
ここで、蓄積トークン値が蓄積トークン発生閾値を超えたということは、対応するキューにすでに十分な量のトークンが蓄積されていることを意味することから、送信可能状態にあるキューにおいて、対応する蓄積トークン値が蓄積トークン発生閾値を超えたということは、送信可能状態にあるキューにおいて、そのキューにおいて送信可能なパケットデータは存在するが、そのパケットデータの送信が行われず、トークンが使用されない状態がすでに一定時間継続していることを意味する。このため、カウント動作が行われるのは、対応する蓄積トークン値が蓄積トークン発生閾値を超えた後ではあるが、カウントを開始する時点で、対応するキューの送信可能状態はすでに一定の時間継続していることになる。
従って、トリガカウンタ1326−1〜nのカウント値は、対応するキューの送信可能状態の継続時間を示す値となり、より具体的には、対応する蓄積トークン値が蓄積トークン発生閾値を超えた後の継続時間を示す値となる。よって、ステータス監視部1322は、上述のトリガカウンタ1326−1〜nのカウント動作によって、対応するキューごとに送信可能状態の継続時間を計測することができる。
上述のトリガカウンタ1326−1〜nのカウント動作は、ステータス監視部1322によって、以下のように制御される。
トリガカウンタ1326−1〜nは、各キューごとに、送信可能ステータスフラグ524の対応する送信可能フラグがオフ状態からオン状態に変化し、かつ、トークン閾値超過ステータスフラグ934の対応する閾値超過フラグがオフ状態からオン状態に変化したとき、対応するトリガ信号のトリガの数のカウント動作を開始する。その後、トリガカウンタ1326−1〜nはそれぞれ、対応する送信可能フラグと閾値超過フラグがともにオン状態を示している間、トリガ信号のトリガの数のカウントを継続する。トリガカウンタ1326−1〜nはそれぞれ、対応する送信可能フラグ及び閾値超過フラグの少なくとも一方がオン状態からオフ状態に変化したとき、そのカウント動作を停止する。
[3−1−3.キュー選択における優先制御]
次に、キュー選択部1304において行われる、キュー選択における優先制御について説明する。
キュー選択制御部1328は、パケット送信トリガに応答して、送信可能ステータスフラグ524内の複数の送信可能フラグの状態、及び、複数のトリガカウンタ1326のカウント値を参照することにより、各キューごとに送信可能状態の継続時間を監視し、複数のキューの中から、その継続時間が予め定められた閾値よりも長いキューを送信対象として優先的に選択する優先制御を行う。尚、パケット送信トリガについては、図5においてキュー選択制御部528に関連して説明したとおりである。
キュー選択部1304では、優先制御は以下のようにして行われる。
キュー選択制御部1328は、優先制御閾値格納部530を参照することにより、優先制御閾値を取得する。キュー選択制御部1328は、各キューごとに、対応する送信可能フラグの状態とトリガカウンタ1326のカウント値(トークン廃棄回数)を監視する。キュー選択制御部1328は、複数のキューの中から、対応する送信可能フラグがオン状態を示しており、かつ、トリガカウンタ1326のカウント値(トークン廃棄回数)が、取得した優先制御閾値より大きいキューを送信対象として優先的に選択する。キュー選択制御部1328は、優先制御により選択したキューの識別情報(選択キュー識別情報)を生成し、キュー管理部404に供給する。
尚、上述の優先制御により送信対象として2つ以上のキューが選択された場合、キュー選択制御部1328は、上述のラウンドロビン(RR)により、選択された2つ以上の優先キューの中から送信対象のキューを1つずつ順次選択していき、対応する選択キュー識別情報を順次生成していく。
また、上述の優先制御により送信対象として1つもキューが選択されなかった場合、キュー選択制御部1328は、上述のラウンドロビン(RR)により、存在する全てのキューの中から送信対象のキューを1つずつ順次選択していき、対応する選択キュー識別情報を順次生成していく。
また、キュー選択制御部1328は、同一の出力ポート(物理回線)をデータ出力対象とする複数のキューについて、その出力ポート(物理回線)の送信帯域が全て使用されている場合等、送信帯域不足にある場合には、上述の優先制御においては、送信対象として選択することが可能なキューが存在しても、そのキューの選択を行わず、送信帯域に空きが生じるまで選択を遅延させる。
パケットデータ読み出し部508は、図5に示したバッファ読み出し制御部406の場合と同様に、キュー管理部404から供給された選択キュー読み出しアドレスに基づいて、パケットバッファ312からパケットデータを読み出し、出力インターフェース314に供給する。
以上説明したように、第3実施例に係るバッファ読み出し制御部1306においては、キュー選択部1304によって、各々のキューごとに、送信可能状態の継続時間を監視し、複数のキューの中から、その継続時間が予め定められた閾値よりも長いキューを送信対象として優先的に選択する優先制御を行うようにしたので、送信可能状態にあるにもかかわらず、対応する出力ポート(物理回線)の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、送信可能状態の継続時間が長いキューから優先的に送信対象とすることができる。
これにより、各々のキューについて蓄積されるトークン量(蓄積トークン値)が増加し、これに伴って、パケット送信時においてバースト転送されるデータ量が増加するのを防止することができ、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することができる。
[3−1−4.トークン加算処理]
次に、帯域制御部1302において行われるトークン加算制御について説明する。
帯域制御部1302において、トークン制御部1312は、図5に示したトークン制御部512と同様に、キュー管理部404から供給される選択キューパケット長情報に基づいて、パケットバッファ312から読み出されたパケットデータのパケット長に相当するトークン値を算出し、算出されたトークン値に基づいて、選択したキューに対応するトークンカウンタ518のカウント値(蓄積トークン値)を更新する。
トークン制御部1312は、トークン閾値テーブル1320を参照することにより、パケットデータの送信が行われたキューに対応する蓄積トークン解除閾値を取得する。これにより、トークン制御部1312は、トークンカウンタ518のカウント値(蓄積トークン値)の更新値が、対応する蓄積トークン解除閾値以上の値である否かを判定する。
トークン制御部1312は、トークンカウンタ518のカウント値(蓄積トークン値)の更新値が蓄積トークン解除閾値以上の値であると判定した場合、そのキューをトークン加算処理の対象とするキュー(トークン加算対象キュー)に決定し、そのキューに対するトークン加算処理の開始を決定する。トークン加算処理は、パケットデータの送信が行われたキューにおいて、本来加算されるべきであったにもかかわらず、加算されずに廃棄されたトークンの一部又は全部を後発的に加算する処理である。帯域制御部1302は、トークン加算処理後のトークンカウンタ518のカウント値(蓄積トークン値)に基づいて、各キューごとの帯域制御(トークン制御)を継続して行う。
トークン制御部1312は、トークンカウンタ518のカウント値(蓄積トークン値)が蓄積トークン解除閾値より小さいと判定した場合、トークン加算処理は行わない。帯域制御部502は、現在のトークンカウンタ518の更新値(蓄積トークン値の更新値)に基づいて、各キューごとの帯域制御(トークン制御)を継続して行う。
トークン加算処理は、トークン制御部1312がステータス監視部1322と、種々の制御情報を含むトークン加算制御情報のやり取りをすることによって、以下のように制御される。
トークン制御部1312は、トークン加算対象キューの識別情報、及び、トークン加算処理を開始することを示す制御情報を、トークン加算制御情報の一部として、ステータス監視部1322に通知する。
ステータス監視部1322は、トークン制御部1312より、トークン加算対象キューの識別情報、及び、トークン加算処理の開始を示す制御情報を受けとったとき、トークン加算対象キューに対応するトリガカウンタ1326のカウント値(トークン廃棄回数)を参照する。トリガカウンタ1326のカウント値は、上述したように、送信可能状態にあるキューにおいて、対応する蓄積トークン値が蓄積トークン発生閾値を超えた後に、本来加算されるべきであったにもかかわらず、トークンが加算されずに廃棄された回数に相当する値である。
ステータス監視部1322は、トークン加算対象キューに対応するトリガカウンタ1326のカウント値(トークン廃棄回数)が1以上の値であるか否かを判定する。ステータス監視部1322は、そのカウント値(トークン廃棄回数)が1以上の値である場合、トークン加算対象キューにおいて廃棄されたトークンの中に加算されていないトークンが存在すると判定し、トークン加算処理の実行を許可することを示す制御情報を、トークン加算制御情報の一部として、トークン制御部1312に通知する。一方、ステータス監視部1322は、そのカウント値(トークン廃棄回数)が0である場合、廃棄されたトークンの中に加算されていないトークンが残っていないと判定し、トークン加算処理を終了することを示す制御信号を、トークン加算制御情報の一部として、トークン制御部1312に通知する。
トークン制御部1312は、ステータス監視部1322よりトークン加算処理の実行を許可することを示す制御情報を受けとったとき、トークンテーブル514を参照することにより、トークン加算対象キューに対応する加算トークン値を取得する。トークン制御部1312は、トークン加算対象キューに対応するトークンカウンタ518に、取得した加算トークン値を供給する。トークン加算対象キューに対応するトークンカウンタ518は、現在のカウント値に加算トークン値を加算することにより、カウント値(蓄積トークン値)を更新する処理(トークン加算処理)を実行する。このトークン加算処理により、トークン加算対象キューにおいては、廃棄1回分に相当するトークン値が後発的に加算されたことになる。トークン制御部1312は、トークン加算処理後、トークン加算処理を実行したことを示す制御情報を、トークン加算制御情報の一部として、ステータス監視部1322に通知する。
ステータス監視部1322は、トークン制御部1312よりトークン加算処理を実行したことを示す制御情報を受けとったとき、トークン加算対象キューに対応するトリガカウンタ1326のカウント値を1だけ減算することにより、トリガカウンタ1326のカウント値(トークン廃棄回数)を更新する。すなわち、ステータス監視部1322は、トークン加算処理によって廃棄1回分に相当するトークンが後発的に加算されたことに対応して、トークン加算対象キューにおいてトークン廃棄回数を1回分だけ減少させる。
トークン制御部1312は、トークン加算処理を実行したことを示す制御情報を通知したとき、さらに、トークン閾値テーブル1320を参照することにより、トークン加算対象キューに対応する蓄積トークン発生閾値を取得する。トークン制御部1312は、トークンカウンタ518のカウント値(蓄積トークン値)の更新値が、取得した蓄積トークン発生閾値以上の値である否かを判定する。
トークン制御部1312は、トークンカウンタ518のカウント値(蓄積トークン値)の更新値が蓄積トークン発生閾値より小さい場合、トークン加算対象キューには十分な量のトークンが蓄積されておらず、更にトークン値を加算することが可能であると判定し、トークン加算処理を継続することを示す制御情報を、トークン加算制御情報の一部として、ステータス監視部1312に通知する。一方、トークン制御部1312は、そのカウント値(蓄積トークン値)の更新値が蓄積トークン発生閾値以上の値である場合、トークン加算対象キューに十分な量のトークンが蓄積されたと判定し、トークン加算処理を終了することを示す制御情報を、トークン加算制御情報の一部として、ステータス監視部1322に通知する。
ステータス監視部1322は、トークン制御部1312よりトークン加算処理を継続することを示す制御情報を受けとったとき、トークン加算対象キューに対応するトリガカウンタ1326のカウント値(トークン廃棄回数)の更新値が1以上の値であるか否かを判定する。ステータス監視部1322は、そのカウント値(トークン廃棄回数)の更新値が1以上の値である場合、トークン加算対象キューにおいて廃棄されたトークンの中に加算されていないトークンが残っていると判定し、トークン加算処理の実行を許可することを示す制御情報を、トークン加算制御情報の一部として、再度トークン制御部1312に通知する。一方、ステータス監視部1322は、そのカウント値(トークン廃棄回数)が0である場合、廃棄されたトークンの中に加算されていないトークンが残っていないと判定し、トークン加算処理を終了することを示す制御信号を、トークン加算制御情報の一部として、トークン制御部1312に通知する。
トークン制御部1312は、トークン加算処理の実行を許可することを示す制御情報を受けとったとき、上述のトークン加算処理を再度実行する。
一方、トークン制御部1312は、ステータス監視部1322よりトークン加算処理を終了することを示す制御情報を受けとったとき、トークン加算処理を実行しない。
また、ステータス監視部1322は、トークン制御部1312よりトークン加算処理を終了することを示す制御情報を受けとったとき、トークン加算対象キューに対応するトリガカウンタ1326のカウント値(トークン廃棄回数)をクリアする(0(零)にする)。
尚、上述のトークン加算処理の例では、廃棄1回分に相当するトークン値を加算した後、更新後のトークン廃棄回数が1以上であるか否かを再度判定するようにし、トークン廃棄回数分に相当するトークン値を複数回に分けて加算するようにしたが、この例には限定されない。
例えば、ステータス監視部1322は、トークン加算対象キューに対応するトリガカウンタ1326のカウント値(トークン廃棄回数)が1以上の値である場合、トークン廃棄回数に相当するトークン値(加算トークン値にトークン廃棄回数を乗じた値)を一度に、トークンカウンタ518のカウント値に加算することにより、カウント値(蓄積トークン値)を更新するようにしてもよい。
以上説明したように、第3実施例に係るバッファ読み出し制御部1306においては、キュー選択部1304によって、各々のキューごとに、蓄積可能な最大トークン量の制限により、本来加算されるべきであったにもかかわらず、加算されずに廃棄されるに至ったトークンの量を保持しておき、帯域制御部1302によって、パケットデータの送信が行われたキューにおいて、その廃棄されたトークンの一部又は全部を後発的に加算し蓄積するようにしたので、蓄積されたトークン量が許容される最大値を超えてしまうことにより廃棄される結果、無駄になるトークン量を少なくすることができる。
これにより、送信可能状態にあるにもかかわらず、対応する出力ポート(物理回線)の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、各キューごとに蓄積されるトークン量を実質的に増加させることができるので、パケットデータのデータ転送レートが低下するのを防止することができる。
[3−1−5.アラーム通知処理]
次に、キュー選択部1304において行われるアラーム通知処理について説明する。
ステータス監視部1322は、図5に示したステータス監視部522と同様に、アラーム通知処理を実行する。ステータス監視部1322は、アラーム通知閾値格納部532を参照することにより、アラーム通知閾値を取得する。アラーム通知閾値は、アラーム通知閾値格納部532に記憶されており、トリガカウンタ1326のカウント値に対する閾値であり、送信可能状態の継続時間の閾値に相当するものである。
ステータス監視部1322は、複数のトリガカウンタ1326のカウント値を監視し、複数のトリガカウンタ1326のいずれかのカウント値がアラーム通知閾値よりも大きいと判定したとき、アラーム通知信号を出力する。アラーム通知信号は、トリガカウンタ1326のカウント値がアラーム通知閾値を超えたキューの識別情報や、そのイベントの発生時刻等の情報を含むようにすることができる。
アラーム通知信号は、図3に示した各部を含む、パケット伝送装置1300内の各種の回路又は装置などを全体的に制御する制御装置(図示せず)に出力される。制御装置はアラーム通知信号を受けとり、例えば、アラーム通知信号の受信状況をログとして保存しておく。
以上説明したように、第3実施例に係るバッファ読み出し制御部1306においては、第1実施例に係るバッファ読み出し制御部406と同様に、ステータス監視部1322によってアラーム通知信号を出力するようにしたので、例えば、ネットワーク管理者は、上記のログを参照することにより、パケット伝送装置300において行われた帯域制御(トークン制御)の状況を適切に把握することができ、どのキューにおいて送信可能状態の継続時間が閾値を超えやすい傾向にあるか等の統計情報を取得することができる。
これにより、ネットワーク管理者は、各キューごとの送信帯域や、各キューごとに周期的に加算されるトークン量及び蓄積されるトークン量の最大値といった各種の送信パラメータを適切に設定することができ、ネットワーク設計を適切に行うことができる。
[3−2.パケットバッファ制御部1310におけるパケット伝送制御]
次に、パケット伝送装置1300のパケットバッファ制御部1310が実行するパケット伝送制御処理について説明する。
[3−2−1.トークン加算トリガの生成に応答して実行される処理]
図14は、パケットバッファ制御部1310において、トークン加算トリガの生成に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
ステップS1402からS1406までの処理は、図6に示したステップS602からS606までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップS1406の後、処理はステップS1408に進む。
ステップS1408において、ステータス監視部1322は、送信可能ステータスフラグ524及びトークン閾値超過ステータスフラグ934の状態をチェックする。ステータス監視部1322は、送信可能ステータスフラグ524のk番目のキューに対応する送信可能フラグがオン状態であり、かつ、トークン閾値超過ステータスフラグ934のk番目のキューに対応する閾値超過フラグがオン状態であるが存在するか否かを判定する。判定の結果、k番目のキューに対応する送信可能フラグ及び閾値超過フラグがともにオン状態である場合、処理はステップS1410に進む。k番目のキューに対応する送信可能フラグ及び閾値超過フラグの少なくとも一方がオフ状態である場合、処理はステップS1412に進む。
ステップS1410において、ステータス監視部1322は、k番目のキューは送信可能状態が一定の時間以上継続しているキューであって、トークン加算処理を行う候補となるキュー(トークン加算候補キュー)であると判定し、k番目のキューに対応するトリガカウンタ1326において、トークン制御部1312から供給されるトリガ信号のトリガの数をカウントする。トリガカウンタ1326は、トリガ信号において、ステップS1402において生成したトークン加算トリガに対応するトリガを検出し、そのカウント値(トークン廃棄回数)を1だけ増加させる。これにより、ステータス監視部1322は、k番目のキューにおけるトークン廃棄回数の値を1だけ増加させ、トークン廃棄回数の値を更新する。
一方、このとき、k番目のキューに対応するトークンカウンタ518はカウント動作を停止し、トークン制御部1312から加算トークン値及びトークン加算トリガが供給され、トークンの加算タイミングとなっても、そのカウント値(蓄積トークン値)を更新しない。
ステップS1412からS1406までの処理は、図6に示したステップS608からS612までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップS1414及びS1416の後、処理はステップS1418に進む。
ステップS1418からS1424までの処理は、図6に示したステップS620からS626までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップS1418において蓄積トークン値が負の値である場合、及び、ステップS1422においてキューステータス信号がオン状態でない場合、処理はステップS1426に進む。また、ステップS1424の後、処理はステップS1426に進む。
ステップS1426からS1430までの処理は、蓄積トークン閾値の代わりに蓄積トークン発生閾値を用いる点を除いて、図10に示したステップS1024からS1026までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップS1428において蓄積トークン値が蓄積トークン発生閾値よりも小さい場合、処理はステップS1432に進む。また、ステップS1430の後、処理はステップS1432に進む。
ステップS1432からS1436までの処理は、図6に示したステップS628からS632までの処理と同様である。よって、処理内容についての詳細な説明は省略する。
以上説明したステップS1402〜S1436までの一連の処理によって、パケットバッファ制御部1310は、トークン加算トリガの生成に応答して、各々のキューに対して蓄積されたトークン量(蓄積トークン値)に応じて、各キューごとに、トークンステータス信号及び送信可能ステータスフラグの状態を適切に設定することができる。
さらに、パケットバッファ制御部1310は、各々のキューに対して蓄積されたトークン量(蓄積トークン値)をトークン閾値超過ステータスフラグ934の閾値超過フラグの状態によって監視するとともに、送信可能ステータスフラグ524の送信可能フラグとトークン閾値超過ステータスフラグ934の閾値超過フラグがともにオン状態である場合に、対応するキューにおけるトークン廃棄回数を適切にカウントすることにより、そのキューの送信可能状態の継続時間を適切に計測することができる。
[3−2−2.パケットの受信に応答して実行される処理]
図15は、パケットバッファ制御部1310において、パケットの受信に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
ステップS1502からS1514までの処理は、図7に示したステップS702からS714までの処理と同様である。よって、処理内容についての詳細な説明は省略する。
ステップS1505からS1514までの一連の処理によって、パケットバッファ制御部1310は、パケットの受信に応答して、各キューごとに、キューステータス信号及び送信可能ステータスフラグの状態を適切に設定することができる。
[3−2−3.パケット送信トリガに応答して実行される処理]
図16及び図17は、パケットバッファ制御部1310において、パケット送信トリガに応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
ステップS1602からS1612までの処理は、トークン加算回数の代わりにトークン廃棄回数が用いられる点を除いて、図6に示したステップS802からS812までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップS1608において、送信可能ステータスフラグ524の送信可能フラグがオン状態のキューが存在しない場合、処理はステップS1718に進む。ステップS1612の後、処理はステップS1614に進む。
ステップS1614からS1618までの処理は、ステップS1614においてトークン加算回数のリセットが行われない点を除いて、図8に示したステップS812からS818までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップS1616及びS1618の後、処理はステップS1620に進む。
ステップS1620及びS1622の処理は、蓄積トークン閾値の代わりに蓄積トークン解除閾値を用いる点を除いて、図12に示したステップS1220及びステップS1222の処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップS1620及びS1622の後、処理はステップS1702に進む。
ステップS1702において、帯域制御部1302のトークン制御部1312は、トークン閾値テーブル1320を参照することにより、選択したキューに対応する蓄積トークン解除閾値を取得する。これにより、トークン制御部1312は、ステップS1614において更新した後の、選択したキューに対応する蓄積トークン値(更新値)が、取得した蓄積トークン解除閾値以上の値であるか否かを判定する。選択したキューに対応する蓄積トークン値が蓄積トークン解除閾値以上の値である場合、処理はステップS1704に進む。判定の結果、選択した蓄積トークン値が解除閾値より小さい値である場合、処理はステップS1712に進む。
ステップS1704において、ステータス監視部1322は、選択したキューに対応するトリガカウンタ1326のカウント値(トークン廃棄回数)を参照することにより、選択したキューに対応するトークン廃棄回数を取得する。これにより、ステータス監視部1322は、選択したキューに対応するトークン廃棄回数の値が0(零)であるか否かを判定する。選択したキューに対応するトークン廃棄回数の値が0(零)でない場合、すなわち1以上である場合、処理はステップS1706に進む。判定の結果、選択したキューに対応するトークン廃棄回数の値が0(零)である場合、処理はステップS1712に進む。
ステップS1706において、トークン制御部1312は、トークンテーブル514を参照することにより、選択したキューに対応する加算トークン値を取得する。トークン制御部1312は、選択したキューに対応するトークンカウンタ518によって、取得した加算トークン値と、ステップS1614において更新した後の、選択キューに対応する蓄積トークン値を加算することにより、トークン加算処理を行う。また、ステータス監視部1322は、ステップS1704において取得したトークン廃棄回数の値から1を減算することにより、トークン廃棄回数の値を更新する。
ステップS1708において、トークン制御部1312は、トークン閾値テーブル1320を参照することにより、選択したキューに対応する蓄積トークン発生閾値を取得する。これにより、トークン制御部1312は、ステップS1706においてトークン加算処理を行った後の、選択したキューに対応する蓄積トークン値(更新値)が、取得した蓄積トークン発生閾値以上の値であるか否かを判定する。判定の結果、蓄積トークン値(更新値)が蓄積トークン発生閾値以上である場合、処理はステップS1710に進む。蓄積トークン値(更新値)が蓄積トークン発生閾値より小さい場合、処理はステップS1704に戻る。
ステップS1710において、トークン制御部1312は、選択したキューに十分な量のトークンが蓄積されていると判定し、選択したキューに対応するトークン閾値超過ステータス信号をオン状態(例えば、Hレベル)に設定する。ステータス監視部1322は、トークン閾値超過ステータス信号がオン状態に変化したことに応答して、トークン閾値超過ステータスフラグ934の選択したキューに対応する閾値超過フラグをオン状態に設定する。
ステップS1712において、ステータス監視部1322は、トークン加算処理は終了したと判断し、選択したキューに対応するトリガカウンタ1326のカウント値(トークン廃棄回数)をクリアする(0(零)にする)ことにより、トークン廃棄回数をリセットする。
ステップS1714からS1718までの処理は、図8に示したステップS820からS824の処理と同様である。よって、処理内容についての詳細な説明は省略する。
以上説明したステップS1602〜S1622及びS1702〜S1718までの一連の処理によって、パケットバッファ制御部1310は、パケット送信トリガの受信に応答して送信対象のキューを選択する際に、各々のキューのトークン廃棄回数に応じて優先制御を行うか否かを判定することができるので、各々のキューに対して、その送信可能状態の継続時間に応じた優先制御を適切に行うことができる。
これにより、送信可能状態にあるにもかかわらず、対応する出力ポート(物理回線)の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、送信可能状態の継続時間が長いキューから優先的に送信対象とすることができる。よって、各々のキューについて蓄積されるトークン量(蓄積トークン値)が増加し、これに伴って、パケット送信時においてバースト転送されるデータ量が増加するのを防止することができ、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することができる。
さらに、パケットバッファ制御部1310は、選択したキューからパケットデータを出力した後においても、各キューごとに、送信可能ステータスフラグの状態を適切に設定することができる。
また、パケットバッファ制御部1310は、パケット送信トリガの受信に応答して、選択したキューからパケットデータを出力した後において、各々のキューごとに、蓄積されているトークン量(蓄積トークン値)と、廃棄されたトークンの量(トークン廃棄回数)に基づいて、トークン加算処理を行うか否かを判定することができるので、パケットデータの送信が行われたキューにおいて、本来加算されるべきであったにもかかわらず、加算されずに廃棄されたトークンの量の一部又は全部を後発的に加算し蓄積することができる。
これにより、送信可能状態にあるにもかかわらず、対応する出力ポート(物理回線)の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、各キューごとに蓄積されるトークン量を実質的に増加させることができるので、パケットデータのデータ転送レートが低下するのを防止することができる。
[3−2−4.パケットバッファ制御部の変形例]
第1実施例及び第2実施例の場合と同様に、図14〜図17に示した各々のパケット伝送制御処理は、図4及び図13に示したハードウェアによって実現する代わりに、図14〜図17に示した各々の処理をプログラムに実行させることにより、ソフトウェアによって実現することも可能である。
この場合、パケットバッファ制御部1310は例えば、図14〜図17に示した各々のステップを処理内容とするプログラム(パケットバッファ制御プログラム)を格納するプログラムメモリ、そのプログラムを実行可能なプロセッサ、及びそのプロセッサによる演算処理のワークエリアを提供するワークメモリを含むものとすることができる。
パケットバッファ制御部1310のプロセッサは、ワークメモリを用いて、プログラムメモリに格納されたパケットバッファ制御プログラムを実行することにより、図4及び図13に示したパケットバッファ制御部1310内部の各々の部分が連携して実行する処理と同等の処理を実行することができる。
以上、本発明の例示的な実施形態のパケット伝送装置、及びパケット伝送方法について説明したが、本発明は、具体的に開示された実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。各実施例に開示された技術は、相互に矛盾することがない限り、適宜組合せることが可能であるものである。
以上の第1ないし第3実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
複数のキューを有し、パケットデータを前記複数のキューのいずれかに格納するバッファと、
前記複数のキューの各々について送信可能なパケットデータが存在するか否かを示す複数のキューステータス信号を出力するキュー管理部と、
各々のキューごとに所定の周期でトークンを蓄積し、各々のキューについて前記蓄積されたトークン量が各々の対応するキューごとに設けられたトークン閾値よりも多いか否かを示す、各々のキューに対応した複数のトークンステータス信号を出力する帯域制御部と、
各々のキューごとに、対応する前記キューステータス信号が前記キューに送信可能なパケットデータが存在することを示し、かつ、対応する前記トークンステータス信号が前記蓄積されたトークン量が前記各々のキューに設けられたトークン閾値よりも多いことを示す送信可能状態の継続時間が各々のキューごとに設けられた継続時間閾値よりも長いキューを優先的に選択するキュー選択部と、
前記選択されたキューからの前記パケットデータの読み出しを制御するバッファ読み出し部と
を有することを特徴するパケット伝送装置。
(付記2)
前記帯域制御部は、
各々のキューごとに設けられ、前記所定の周期を有するトリガ信号に応答して、対応するトークン値を加算することにより、前記蓄積されたトークン量をカウントする複数のトークンカウンタを有し、
前記キュー選択部は、
各々のキューごとに設けられ、対応する前記キューが前記送信可能状態にあるとき、前記トリガ信号のトリガの数をカウントする複数のトリガカウンタと、
前記複数のキューの中から、前記トリガカウンタのカウント値が対応する前記継続時間閾値に対応するカウント値よりも大きいキューを選択するキュー選択制御部と
を有することを特徴とする付記1記載のパケット伝送装置。
(付記3)
前記帯域制御部は、
各々のキューごとに設定された、前記蓄積されたトークン量に対する蓄積トークン閾値を格納する閾値格納部と、
各々対応する前記蓄積されたトークン量が前記蓄積トークン閾値よりも多いか否かを示す複数のトークン閾値超過ステータス信号を出力するトークン制御部を有し、
前記キュー選択部は、
前記複数のキューの中から、前記送信可能状態にあって、かつ、対応する前記トークン閾値超過ステータス信号が前記蓄積されたトークン量が前記蓄積トークン閾値よりも多いことを示すキューを選択するキュー選択制御部と
を有することを特徴とする付記1記載のパケット伝送装置。
(付記4)
前記帯域制御部は、
各々のキューごとに設けられ、前記所定の周期を有するトリガ信号に応答して、対応するトークン値を加算することにより、前記蓄積されたトークン量をカウントする複数のトークンカウンタと、
各々のキューごとに設定された、前記蓄積されたトークン量に対する蓄積トークン発生閾値及び蓄積トークン解除閾値を格納する閾値格納部と、
各々対応する前記蓄積されたトークン量が前記蓄積トークン発生閾値より多いか否かを示す複数のトークン閾値超過ステータス信号を出力するトークン制御部と
を有し、
前記キュー選択部は、
各々のキューごとに設けられ、対応する前記キューが前記送信可能状態にあって、かつ、対応する前記トークン閾値超過ステータス信号が前記蓄積されたトークン量が前記蓄積トークン発生閾値より多いことを示すとき、前記トリガ信号のトリガの数をカウントする複数のトリガカウンタと、
前記複数のキューの中から、前記トリガカウンタのカウント値が前記計測時間閾値に対応するカウント値よりも大きいキューを選択するキュー選択制御部と
を有することを特徴とする付記1記載のパケット伝送装置。
(付記5)
前記帯域制御部において、前記トークン制御部は、
前記選択されたキューに対応する前記トークンカウンタのカウント値を、前記選択されたキューから読み出された前記パケットデータのパケット長に応じて、減少させることにより、前記蓄積されたトークン量を更新し、
前記更新されたトークン量が対応する前記蓄積トークン解除閾値より多いとき、前記選択されたキューに対応する前記トークンカウンタのカウント値を、前記選択されたキューに対応する前記トリガカウンタのカウント値に応じて、増加させることを特徴とする付記4記載のパケット伝送装置。
(付記6)
前記キュー選択部は、
前記複数のトリガカウンタのカウント値を、前記複数のキューの前記送信可能状態の前記継続時間として監視するステータス監視部をさらに有し、
前記ステータス監視部は、前記選択されたキューに対応する前記トリガカウンタのカウント値を、前記選択されたキューに対応する前記トークンカウンタのカウント値の増加量に応じて、減少させることを特徴とする付記5記載のパケット伝送装置。
(付記7)
前記複数のトークンカウンタの各々は、対応する前記トークン閾値超過ステータス信号が前記蓄積されたトークン量が前記蓄積トークン発生閾値よりも多いことを示し、かつ、対応する前記キューステータス信号が前記キューに送信可能なパケットデータが存在することを示すとき、カウントを停止することを特徴とする付記4ないし6のいずれか一つ記載のパケット伝送装置。
(付記8)
前記キュー選択部は、
前記複数のキューのうち、前記トリガカウンタのカウント値がアラーム通知閾値よりも大きいキューに対して、アラーム通知信号を生成するアラーム通知部をさらに有することを特徴とする付記2又は4記載のパケット伝送装置。
(付記9)
前記キュー選択部は、前記複数のキューの中に前記継続時間が前記継続時間閾値よりも長いキューが複数存在する場合、前記複数のキューの中からをラウンドロビンにより1つのキューを選択することを特徴とする付記1記載のパケット伝送装置。
(付記10)
前記キュー選択部は、前記複数のキューの中に前記継続時間が前記継続時間閾値よりも長いキューが存在しない場合、前記複数のキューの中で前記送信可能状態にあるキューを選択することを特徴とする付記1記載のパケット伝送装置。
(付記11)
前記帯域制御部は、
各々のキューごとに設けられ、前記所定の周期を有するトリガ信号に応答して、対応するトークン値を加算することにより、前記蓄積されたトークン量をカウントする複数のトークンカウンタと、
各々のキューごとに設定された、前記蓄積されたトークン量に対する最大値を格納する最大値格納部と、
前記選択されたキューに対応する前記トークンカウンタのカウント値を、対応する前記最大値を超えないように増加させるトークン制御部
をさらに有することを特徴とする付記1記載のパケット伝送装置。
(付記12)
パケットデータを複数のキューのいずれかに格納するメモリを制御するメモリ制御回路であって、
前記複数のキュー各々について送信可能なパケットデータが存在するか否かを示す複数のキューステータス信号を出力するキュー管理部と、
各々のキューごとに所定の周期でトークンを蓄積し、各々のキューについて前記蓄積されたトークン量が各々の対応するキューごとに設けられたトークン閾値よりも多いか否かを示す、各々のキューに対応した複数のトークンステータス信号を出力する帯域制御部と、
各々のキューごとに、対応する前記キューステータス信号が前記キューに送信可能なパケットデータが存在することを示し、かつ、対応する前記トークンステータス信号が前記蓄積されたトークン量が前記各々のキューに設けられたトークン閾値よりも多いことを示す送信可能状態の継続時間が各々のキューごとに設けられた継続時間閾値よりも長いキューを優先的に選択するキュー選択部と
を有することを特徴するメモリ制御回路。
(付記13)
パケットデータをバッファメモリの複数のキューのいずれかに格納し、
前記複数のキューの各々について前記パケットデータが格納されているか否かを判定し、
各々のキューごとに所定の周期でトークンを蓄積し、
各々のキューについて、前記蓄積したトークン量が各々の対応するキューごとに設けられたトークン閾値よりも多いか否かを判定し、
各々のキューごとに、対応する前記キューに前記パケットデータが格納されており、かつ、前記蓄積したトークン量が前記各々のキューに設けられたトークン閾値よりも多い送信可能状態の継続時間を監視し、
前記複数のキューの中から前記継続時間が各々のキューごとに設けられた継続時間閾値よりも長いキューを選択し、
前記選択されたキューから前記パケットデータを読み出す
ことを特徴するパケット伝送方法。
(付記14)
前記継続時間が前記継続時間閾値よりも長いキューの選択は、パケット送信トリガが生成されたときに行われることを特徴とする付記12記載のパケット伝送方法。