(57)【特許請求の範囲】
【請求項１】
複数のキューを有し、パケットデータを前記複数のキューのいずれかに格納するバッファと、
前記複数のキューの各々について送信可能なパケットデータが存在するか否かを示す複数のキューステータス信号を出力するキュー管理部と、
各々のキューごとに所定の周期を有するトリガ信号に応答してトークンを蓄積し、各々のキューについて前記蓄積されたトークン量が各々の対応するキューごとに設けられたトークン閾値よりも多いか否かを示す、各々のキューに対応した複数のトークンステータス信号を出力する帯域制御部と、
各々のキューごとに、対応する前記キューステータス信号が前記キューに送信可能なパケットデータが存在することを示し、かつ、対応する前記トークンステータス信号が前記蓄積されたトークン量が前記各々のキューに設けられたトークン閾値よりも多いことを示す送信可能状態の継続時間を前記トリガ信号または前記蓄積されたトークン量に基づいて計測し、前記送信可能状態の継続時間が各々のキューごとに設けられた継続時間閾値よりも長いキューを優先的に選択するキュー選択部と、
前記選択されたキューからの前記パケットデータの読み出しを制御するバッファ読み出し部と
を有することを特徴するパケット伝送装置。
【請求項２】
前記帯域制御部は、
各々のキューごとに設けられ、前記所定の周期を有するトリガ信号に応答して、対応するトークン値を加算することにより、前記蓄積されたトークン量をカウントする複数のトークンカウンタを有し、
前記キュー選択部は、
各々のキューごとに設けられ、対応する前記キューが前記送信可能状態にあるとき、前記トリガ信号のトリガの数をカウントする複数のトリガカウンタと、
前記複数のキューの中から、前記トリガカウンタのカウント値が対応する前記継続時間閾値に対応するカウント値よりも大きいキューを選択するキュー選択制御部と
を有することを特徴とする請求項１記載のパケット伝送装置。
【請求項３】
前記帯域制御部は、
各々のキューごとに設定された、前記蓄積されたトークン量に対する蓄積トークン閾値を格納する閾値格納部と、
各々対応する前記蓄積されたトークン量が前記蓄積トークン閾値よりも多いか否かを示す複数のトークン閾値超過ステータス信号を出力するトークン制御部を有し、
前記キュー選択部は、
前記複数のキューの中から、前記送信可能状態にあって、かつ、対応する前記トークン閾値超過ステータス信号が前記蓄積されたトークン量が前記蓄積トークン閾値よりも多いことを示すキューを選択するキュー選択制御部と
を有することを特徴とする請求項１記載のパケット伝送装置。
【請求項４】
前記帯域制御部は、
各々のキューごとに設けられ、前記所定の周期を有するトリガ信号に応答して、対応するトークン値を加算することにより、前記蓄積されたトークン量をカウントする複数のトークンカウンタと、
各々のキューごとに設定された、前記蓄積されたトークン量に対する蓄積トークン発生閾値及び蓄積トークン解除閾値を格納する閾値格納部と、
各々対応する前記蓄積されたトークン量が前記蓄積トークン発生閾値より多いか否かを示す複数のトークン閾値超過ステータス信号を出力するトークン制御部と
を有し、
前記キュー選択部は、
各々のキューごとに設けられ、対応する前記キューが前記送信可能状態にあって、かつ、対応する前記トークン閾値超過ステータス信号が前記蓄積されたトークン量が前記蓄積トークン発生閾値より多いことを示すとき、前記トリガ信号のトリガの数をカウントする複数のトリガカウンタと、
前記複数のキューの中から、前記トリガカウンタのカウント値が前記継続時間閾値に対応するカウント値よりも大きいキューを選択するキュー選択制御部と
を有することを特徴とする請求項１記載のパケット伝送装置。
【請求項５】
前記帯域制御部において、前記トークン制御部は、
前記選択されたキューに対応する前記トークンカウンタのカウント値を、前記選択されたキューから読み出された前記パケットデータのパケット長に応じて、減少させることにより、前記蓄積されたトークン量を更新し、
前記更新されたトークン量が対応する前記蓄積トークン解除閾値より多いとき、前記選択されたキューに対応する前記トークンカウンタのカウント値を、前記選択されたキューに対応する前記トリガカウンタのカウント値に応じて、増加させることを特徴とする請求項４記載のパケット伝送装置。
【請求項６】
前記キュー選択部は、
前記複数のトリガカウンタのカウント値を、前記複数のキューの前記送信可能状態の前記継続時間として監視するステータス監視部をさらに有し、
前記ステータス監視部は、前記選択されたキューに対応する前記トリガカウンタのカウント値を、前記選択されたキューに対応する前記トークンカウンタのカウント値の増加量に応じて、減少させることを特徴とする請求項５記載のパケット伝送装置。
【請求項７】
前記複数のトークンカウンタの各々は、対応する前記トークン閾値超過ステータス信号が前記蓄積されたトークン量が前記蓄積トークン発生閾値よりも多いことを示し、かつ、対応する前記キューステータス信号が前記キューに送信可能なパケットデータが存在することを示すとき、カウントを停止することを特徴とする請求項４ないし６のいずれか一つ記載のパケット伝送装置。
【請求項８】
前記キュー選択部は、
前記複数のキューのうち、前記トリガカウンタのカウント値がアラーム通知閾値よりも大きいキューに対して、アラーム通知信号を生成するアラーム通知部
をさらに有することを特徴とする請求項２又は４記載のパケット伝送装置。
【請求項９】
パケットデータを複数のキューのいずれかに格納するメモリを制御するメモリ制御回路であって、
前記複数のキューの各々について送信可能なパケットデータが存在するか否かを示す複数のキューステータス信号を出力するキュー管理部と、
各々のキューごとに所定の周期を有するトリガ信号に応答してトークンを蓄積し、各々のキューについて前記蓄積されたトークン量が各々の対応するキューごとに設けられたトークン閾値よりも多いか否かを示す各々のキューに対応した複数のトークンステータス信号を出力する帯域制御部と、
各々のキューごとに、対応する前記キューステータス信号が前記キューに送信可能なパケットデータが存在することを示し、かつ、対応する前記トークンステータス信号が前記蓄積されたトークン量が前記各々のキューに設けられたトークン閾値よりも多いことを示す送信可能状態の継続時間を前記トリガ信号または前記蓄積されたトークン量に基づいて計測し、前記送信可能状態の継続時間が各々のキューごとに設けられた継続時間閾値よりも長いキューを優先的に選択するキュー選択部と
を有することを特徴するメモリ制御回路。
【請求項１０】
パケットデータをバッファメモリの複数のキューのいずれかに格納し、
前記複数のキューの各々について前記パケットデータが格納されているか否かを判定し、
各々のキューごとに所定の周期を有するトリガ信号に応答してトークンを蓄積し、
各々のキューについて、前記蓄積したトークン量が各々の対応するキューごとに設けられたトークン閾値よりも多いか否かを判定し、
各々のキューごとに、対応する前記キューに前記パケットデータが格納されており、かつ、前記蓄積したトークン量が前記各々のキューに設けられたトークン閾値よりも多い送信可能状態の継続時間を前記トリガ信号または前記蓄積されたトークン量に基づいて計測し、前記送信可能状態の継続時間を監視し、
前記複数のキューの中から前記継続時間が各々のキューごとに設けられた継続時間閾値よりも長いキューを選択し、
前記選択されたキューから前記パケットデータを読み出す
ことを特徴するパケット伝送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施例の一側面において開示する技術は、パケット伝送装置、メモリ制御回路及びパケット伝送方法に関する。
【背景技術】
【０００２】
パケット送信が行われるネットワークにおいては、端末における大きなトラフィックの突発的な発生、中継ノードにおけるトラフィックの合流や中継回線の通信速度等の事情により、大きな送信帯域や、大きなバースト性（バースト転送されるデータ量の多さ）を持つトラフィックが発生することがある。過度に大きな送信帯域やバースト性を有するトラフィックにおいては、一定時間内に転送されるパケットデータ量が、中継する伝送装置や受信する端末の処理性能を超えてしまうため、送信すべきパケットの一部が廃棄されてしまうといった不具合が起こる。
【０００３】
このような過度に大きな送信帯域やバースト性を有するトラフィックの発生を防止するために、シェーパー（Ｓｈａｐｅｒ）などの帯域制御機能を有するパケット伝送装置が知られている。この帯域制御としては、パケットの出力を許可するか否かを判別するための情報であるトークンを用いたトークン制御が広く用いられており、トークンを用いて、転送するトラフィックの送信帯域やバースト性の大きさを制限する制御が行われている。
【０００４】
また、同一の物理回線に出力されるトラフィックであっても、宛先の装置単位や、ユーザのグループ等の論理的な単位に応じて、複数のトラフィックをグループ化し、そのトラフィックグループ単位で帯域制御を行う場合もある。この場合、各々のトラフィックグループごとに、対応するキューが割り当てられ、各々のキューごとに帯域制御が行われる。そして、パケットの出力が許可された複数のキューの中から、ラウンドロビン（Ｒｏｕｎｄ  Ｒｏｂｉｎ、ＲＲ）と呼ばれる方法により、最終的にパケットの出力対象とするキューを選択する方法が広く行われている。
【０００５】
図１は、帯域制御機能を有するパケット伝送装置の内部構成の一例を示す図である。
【０００６】
パケットバッファ１０６は、内部のデータ格納領域を論理的に分割することにより作成された複数のキューを含み、パケットが属するトラフィックグループに応じて、パケットデータを複数のキューのいずれかに格納する。
【０００７】
キュー管理部１０４は、パケットバッファ１０６内の複数のキューを管理し、複数のキューにそれぞれパケットデータが格納されているか否かを判定し、その判定結果に基づいて複数のキューステータス信号を出力する。
【０００８】
バッファ読み出し制御部１０２は、パケットデータ読み出し部１０８、帯域制御部１１０、及びキュー選択部１１２を含む。帯域制御部１１０は、トークン制御部１１４の制御の下で、複数のトークンカウンタ１２０（１２０−１〜ｎ、ｎはキューの個数）を用いて、各キューごとに、トークンテーブル１１６に格納された加算トークン値に従って、一定の周期でトークンを加算し蓄積していく。最大値テーブル１１８は、各キューごとに蓄積可能なトークン量の最大値（最大トークン値）を格納している。トークン制御部１１４は、各キューごとに、蓄積されたトークン量（蓄積トークン値）が所定の閾値以上（例えば、０（零）以上）であるか否かを判定し、その判定結果に基づいて複数のトークンステータス信号を出力する。
【０００９】
キュー選択部１１２は、キュー管理部１０４から複数のキューステータス信号を受けとるとともに、帯域制御部１１０から複数のトークンステータス信号を受けとる。キュー選択部１１２において、ステータス監視部１２２は、対応するキューステータス信号及びトークンステータス信号に基づいて、各キューごとに、パケットが格納されており、かつ、蓄積されたトークン量が所定の閾値以上であることを示す状態（送信可能状態）にあるか否かを判定する。キュー選択制御部１２４は、ステータス監視部１２２の判定結果に基づいて、複数のキューの中から送信可能状態にあるキューを送信対象として選択し、選択したキューの識別情報（選択キュー識別情報）を生成する。
【００１０】
キュー管理部１０４は、キュー選択制御部１２４から選択キュー識別情報を受けとり、受けとった識別情報と内部に格納されているパケット情報に基づいて、選択キューの読み出しアドレス情報を生成する。
【００１１】
パケットデータ読み出し部１０８は、キュー管理部１０４から選択キューの読み出しアドレス情報を受けとり、受けとった読み出しアドレス情報に基づいてパケットバッファ１０６の選択キューからパケットデータを読み出して出力する。
【００１２】
尚、帯域制御方法としては、上述のトークン制御に基づく方法のほかに、例えば、各キューごとに設定された最大帯域、最低帯域及び重み付けにより利用可能帯域を計算した上で送信予定時刻を管理し、いずれのキューに振り分けられたパケットを優先して送信するかを判断する方法（特許文献１）や、各論理ポート毎の非優先クラスのトラフィックに対しＷＦＱ型読み出し制御を行うＷＦＱ手段と、各ＷＦＱ手段からの出力トラフィックに対してＷＲＲ型の読み出し制御を行うＷＲＲ手段を設け、ＷＲＲ読み出し制御で読み出す非優先クラスの出力トラフィックと優先キューからの優先クラスの出力トラフィックに対してＳＰ型読み出し制御を行う方法（特許文献２）が知られている。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００９−１８２５４６号公報
【特許文献２】特開２００５−１２３９１９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
同一の物理回線を使用する複数のキューに対して個別に複数の帯域制御を行う場合、あるキューに対する帯域制御においては、蓄積されたトークン量が十分であり、パケット送信が可能なタイミングであっても、パケット送信ができず、その結果、ラウンドロビンに従ってパケット送信が次の送信タイミングまで待たされる場合がある。
【００１５】
例えば、あるキューの送信可能なタイミングにおいて、他のキューのパケットデータを送信中であり、その送信中のキューが物理回線の送信帯域を全て使用している場合は、そのキューは送信可能なタイミングであってもパケットを送信することができない。特に、１つの物理回線に割り当てられるキューの数が増加し、１つの物理回線に対して多くの帯域制御が個別に行われる場合には、複数のキューによって送信帯域が全て使用され、送信帯域不足に陥る可能性が高くなることから、複数回パケット送信が待たされるキューが発生し得る。
【００１６】
このような場合、パケット送信が待たされたキューについては、蓄積されるトークン量が多くなるため、パケット送信時においては、バースト転送されるデータ量も多くなる。その結果、バースト転送におけるパケット送信揺らぎ（パケット送信時にバースト転送されるデータ量がばらつくこと）が大きくなるという問題が生じる。
【００１７】
本実施例の一側面においては、パケット伝送装置において、送信可能な状態にあるにもかかわらず、送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することを目的とする。
【課題を解決するための手段】
【００１８】
本実施例の一側面におけるパケット伝送装置は、複数のキューを有し、パケットデータを前記複数のキューのいずれかに格納するバッファと、前記複数のキューの各々について送信可能なパケットデータが存在するか否かを示す複数のキューステータス信号を出力するキュー管理部と、各々のキューごとに所定の周期でトークンを蓄積し、各々のキューについて前記蓄積されたトークン量が各々の対応するキューごとに設けられたトークン閾値よりも多いか否かを示す、各々のキューに対応した複数のトークンステータス信号を出力する帯域制御部と、各々のキューごとに、対応する前記キューステータス信号が前記キューに送信可能なパケットデータが存在することを示し、かつ、対応する前記トークンステータス信号が前記蓄積されたトークン量が前記各々のキューに設けられたトークン閾値よりも多いことを示す送信可能状態の継続時間が各々のキューごとに設けられた継続時間閾値よりも長いキューを優先的に選択するキュー選択部と、前記選択されたキューからの前記パケットデータの読み出しを制御するバッファ読み出し部とを含むものである。
【発明の効果】
【００１９】
本実施例の一側面におけるパケット伝送装置においては、送信可能な状態にあるにもかかわらず、送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することができる。
【図面の簡単な説明】
【００２０】
【図１】帯域制御機能を有するパケット伝送装置の内部構成の一例を示す図である。
【図２】パケット送信が行われるネットワークの一例を示す図である。
【図３】パケット伝送装置３００の内部構成の一例を示す図である。
【図４】パケットバッファ制御部３１０の内部構成の一例を示す図である。
【図５】バッファ読み出し制御部４０６の内部構成の一例を示す図である。
【図６】パケットバッファ制御部３１０において、トークン加算トリガの生成に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
【図７】パケットバッファ制御部３１０において、パケットの受信に応答して実行されるパケット伝送制御の処理内容を示すフローチャートである。
【図８】パケットバッファ制御部３１０において、パケット送信トリガに応答して実行されるパケット伝送制御の処理内容を示すフローチャートである。
【図９】第２実施例に係るバッファ読み出し制御部９０６の内部構成の一例を示す図である。
【図１０】パケットバッファ制御部９１０において、トークン加算トリガの生成に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
【図１１】パケットバッファ制御部９１０において、パケットの受信に応答して実行されるパケット伝送制御の処理内容を示すフローチャートである。
【図１２】パケットバッファ制御部９１０において、パケット送信トリガに応答して実行されるパケット伝送制御の処理内容を示すフローチャートである。
【図１３】第３実施例に係るバッファ読み出し制御部１３０６の内部構成の一例を示す図である。
【図１４】パケットバッファ制御部１３１０において、トークン加算トリガの生成に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
【図１５】パケットバッファ制御部１３１０において、パケットの受信に応答して実行されるパケット伝送制御の処理内容を示すフローチャートである。
【図１６】パケットバッファ制御部１３１０において、パケット送信トリガに応答して実行されるパケット伝送制御処理の内容を示すフローチャート（その１）である。
【図１７】パケットバッファ制御部１３１０において、パケット送信トリガに応答して実行されるパケット伝送制御処理の内容を示すフローチャート（その２）である。
【発明を実施するための形態】
【００２１】
以下、本発明の実施例について説明する。
【実施例】
【００２２】
［１．第１実施例］
以下、第１実施例に係るパケット伝送装置及びパケット伝送方法について説明する。
【００２３】
［１−１．パケット送信が行われるネットワーク］
まず、パケット送信が行われるネットワークについて説明する。
【００２４】
図２は、パケット送信が行われるネットワークの一例を示す図である。
【００２５】
図２に示したネットワーク２００は、端末ノードとして、サーバ２０２やユーザ装置２０４−１〜７を含み、これらの端末ノードを接続する中継ノードとしてパケット伝送装置２０６−１〜３やハブ（ＨＵＢ）２０８−１〜３を含む。各々の端末ノードは、少なくとも１つの中継ノードを介して、他の端末ノードと通信を行う。パケット伝送装置２０６−１〜３はそれぞれ帯域制御機能を有しており、図２に示した中継点２１０−１〜８において、物理回線単位で、トラフィックグループごとに帯域制御を行う。
【００２６】
例えば、ユーザ装置２０４−１とユーザ装置２０４−５の間で通信が行われる場合は、ＨＵＢ２０８−１、パケット伝送装置２０６−１〜３及びＨＵＢ２０８−２を介して通信が行われる。このユーザ装置２０４−１と２０４−５の間の通信のトラフィックが属するトラフィックグループをトラフィックグループＡとする。一方、例えば、ユーザ装置２０４−３とユーザ装置２０４−６との間で通信が行われる場合は、ＨＵＢ２０８−１、パケット伝送装置２０６−１〜３及びＨＵＢ２０８−３を介して通信が行われる。このユーザ装置２０４−３と２０４−６の間の通信のトラフィックは、トラフィックグループＡとは異なるトラフィックグループＢに属することになる。
【００２７】
そして、上記の例では、トラフィックグループＡに属するトラフィックとトラフィックグループＢに属するトラフィックは、中継点２１０−２〜６において合流していることになる。このため、パケット伝送装置２０６−１〜３は、中継点２１０−２〜６において、それぞれ帯域制御を行う。
【００２８】
［１−２．パケット伝送装置の内部構成］
次に、図２に示したネットワーク２００において用いられるパケット伝送装置について説明する。
【００２９】
図３は、パケット伝送装置３００の内部構成の一例を示す図である。パケット伝送装置３００は、図２に示したネットワーク２００のパケット伝送装置２０６−１〜３に対応するものである。
【００３０】
図３に示したように、パケット伝送装置３００は、入力インターフェース３０２、宛先判定部３０４、宛先管理テーブル３０６、スイッチング部３０８、パケットバッファ制御部３１０、パケットバッファ３１２及び出力インターフェース３１４を含む。
【００３１】
入力インターフェース３０２は、パケット伝送装置３００の複数の入力ポート（物理回線）（図示せず）を介して、他のパケット伝送装置やサーバ、ユーザ装置といった外部装置からパケットデータを受けとる。
【００３２】
宛先判定部３０４は、入力インターフェース３０２からパケットデータを受けとる。宛先判定部３０４は、受けとったパケットの制御データを参照し、受けとったパケットの宛先情報（例えば、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレス）を取得する。宛先管理テーブル３０６は、例えば、ＭＡＣアドレス等の宛先情報と、出力ポート等のパケット伝送装置３００の出力経路に関する情報との間の対応関係を示す管理テーブルを格納している。宛先判定部３０４は、宛先管理テーブル３０６に格納された管理テーブルを参照することにより、受けとったパケットの宛先情報に対応する出力ポートを判定し、判定した出力ポート等の情報を含む出力経路情報を生成する。
【００３３】
スイッチング部３０８は、宛先判定部３０４からパケットデータを受けとるともに、そのパケットデータに対応する出力経路情報を受けとる。スイッチング部３０８は、受けとった出力経路情報に基づいて、受けとったパケットデータを出力する出力ポート（物理回線）（図示せず）の切り換え（スイッチング）を行う。スイッチング部３０８は、受けとったパケットデータに、スイッチングによって決定された出力ポートを示す出力ポート情報を付加することにより、送信用のパケットデータを生成する。
【００３４】
パケットバッファ制御部３１０は、スイッチング部３０８から送信用のパケットデータを受けとり、受けとった送信用のパケットデータをパケットバッファ３１２に書き込む。パケットバッファ３１２は、内部のデータ格納領域を論理的に分割することにより作成された複数のキューを含み、パケットが属するトラフィックグループに応じて、送信用のパケットデータを複数のキューのいずれかに一時的に格納する。パケットバッファ制御部３１０は、各々のトラフィックグループごとに、対応するキューを割り当てる。
【００３５】
パケットバッファ制御部３１０は、パケットバッファ３１２から送信用のパケットデータを読み出す際に、同一の出力ポート（物理回線）をデータ出力対象とする複数のキューに対して、各々のキューごとに帯域制御と優先制御を実行する。帯域制御は、パケットの出力を許可するか否かを判別するための情報であるトークンを用いたトークン制御により行われる。パケットバッファ制御部３１０は、その帯域制御（トークン制御）に基づいて、複数のキューの中から送信対象となる１つのキューを選択する優先制御を行う。パケットバッファ制御部３１０は、優先制御によって決定されたタイミングで、パケットバッファ３１２の選択されたキューから送信用のパケットデータを読み出す。パケットバッファ制御部３１０における帯域制御（トークン制御）及び優先制御の詳細については、後で説明する。
【００３６】
出力インターフェース３１４は、パケットバッファ制御部３１０から、パケットバッファ３１２より読み出された送信用のパケットデータを受けとる。出力インターフェース３１４は、送信用のパケットデータに付加された出力ポート情報に応じた出力ポートに、送信用のパケットデータを出力する。
【００３７】
尚、図３に示したパケット伝送装置３００の各部は、例えば、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）やＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの、デジタル信号を処理する回路又は装置によって実現することができる。パケット伝送装置３００は、各部を別個の回路又は装置によって実現してもよく、全体を単一の回路又は装置によって実現してもよく、あるいは、複数の部分の機能を実現する回路又は装置を、複数個組み合わせることによって実現してもよい。
【００３８】
また、宛先判定テーブル３０６やパケットバッファ３１２については、他の部分とは独立したメモリによって実現することができ、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）によって実現することができる。
【００３９】
［１−３．パケットバッファ制御部３１０の内部構成］
次に、パケットバッファ制御部３１０の内部構成について説明する。
【００４０】
図４は、パケットバッファ制御部３１０の内部構成の一例を示す図である。
【００４１】
図４に示したように、パケットバッファ制御部３１０は、同一の出力ポート（物理回線）をデータ出力対象とする複数のキューに対して、各々のキューごとに帯域制御と優先制御を実行する機能を有し、バッファ書き込み制御部４０２、キュー管理部４０４、及びバッファ読み出し制御部４０６を含む。
【００４２】
バッファ書き込み制御部４０２は、スイッチング部３０８から送信用のパケットデータを受けとる。バッファ書き込み制御部４０２は、受けとったパケットデータを格納する書き込みアドレスを指定し、パケットデータと書き込みアドレスをパケットバッファ３１２に供給する。パケットバッファ３１２は、供給された書き込みアドレスによって示されるデータ格納領域に、供給されたパケットデータを格納する。
【００４３】
また、バッファ書き込み制御部４０２は、キュー管理部４０４に、例えば、格納されたパケットデータの書き込みアドレス、パケット長及び制御データ等の情報を含むパケット情報を供給する。
【００４４】
キュー管理部４０４は、バッファ書き込み制御部４０２からパケット情報を受けとる。キュー管理部４０４は、受けとったパケット情報に基づいて、同一の出力ポート（物理回線）をデータ出力対象とする複数のキューの中から、パケットバッファ３１２に格納されたパケットデータに割り当てられるキューを特定する。キューの割り当てはトラフィックグループ単位で行われ、受けとったパケットの制御データを参照することにより、受けとったパケットが属するトラフィックグループに応じて行われる。トラフィックグループは、パケットの宛先装置やパケットを送信するユーザのグループに応じて、バケットバッファ制御部３１０が、送受信する複数のトラフィックをグループ化することにより形成される。
【００４５】
キュー管理部４０４は、パケットバッファ３１２内の複数のキューに対応する、複数のパケット情報格納部４０８を含む。複数のパケット情報格納部４０８はそれぞれ、対応するキューにおけるパケットデータの格納状況を管理するための管理情報を格納するものである。キュー管理部４０４は、複数のパケット情報格納部４０８の中から、特定したキューに対応するパケット情報格納部４０８を選択する。キュー管理部４０４は、選択したパケット情報格納部４０８に、特定したキューの識別情報（キュー識別情報）とともに、受けとったパケット情報を格納する。
【００４６】
キュー管理部４０４は、パケット情報格納部４０８に格納されたパケット情報に基づいて、各々のキューに送信可能なパケットデータが存在するか否かを判定する。キュー管理部４０４は、判定結果に基づいて、複数のキューに対する複数のキューステータス信号を生成する。複数のキューステータス信号はそれぞれ、対応するキューに送信可能なパケットデータが存在するか否かを示す信号であり、対応するキューに送信可能なパケットデータが存在するときにオン状態（例えば、Ｈレベル）となり、存在しないときにオフ状態（例えば、Ｌレベル）となる信号である。
【００４７】
バッファ読み出し制御部４０６は、キュー管理部４０４から複数のキューステータス信号を受けとる。バッファ読み出し制御部４０６は、受けとったキューステータス信号に基づいて、各々のキューごとに帯域制御と優先制御を実行する。帯域制御は、パケットの出力を許可するか否かを判別するための情報であるトークンを用いたトークン制御に基づいて行われる。バッファ読み出し制御部４０６は、その帯域制御（トークン制御）に基づいて、複数のキューの中から１つのキューを送信対象として優先的に選択する優先制御を行う。バッファ読み出し制御部４０６における帯域制御（トークン制御）及び優先制御の詳細については、後で説明する。バッファ読み出し制御部４０６は、優先制御により選択されたキューの識別情報（選択キュー識別情報）をキュー管理部４０４に供給する。
【００４８】
キュー管理部４０４は選択キュー識別情報を受けとり、受けとった選択キュー識別情報に基づいて、対応するキュー識別情報を有するパケット情報格納部４０８を特定する。キュー管理部４０４は、特定したパケット情報格納部４０８に格納されたパケット情報を参照することにより、選択されたキューに対応する読み出しアドレス（選択キュー読み出しアドレス）を生成する。
【００４９】
また、キュー管理部４０４は、受けとった選択キュー識別情報に基づいて、パケット情報格納部４０８に格納されたパケット情報を参照することにより、選択されたキューから読み出されるパケットデータのパケット長の情報（選択キューパケット長情報）を生成する
バッファ読み出し制御部４０６は、キュー管理部４０４から選択キュー読み出しアドレスを受けとり、受けとった選択キュー読み出しアドレスに基づいて、パケットバッファ３１２の選択されたキューから、送信用のパケットデータを読み出す。バッファ読み出し制御部４０６は、読み出した送信用のパケットデータを出力インターフェース３１４に供給する。また、バッファ読み出し制御部４０６は、キュー管理部４０４から選択キューパケット長情報を受けとり、受けとった選択キューパケット長情報に基づいて、各キューごとに帯域制御（トークン制御）と優先制御を継続する。
【００５０】
［１−４．バッファ読み出し制御部４０６の内部構成］
次に、バッファ読み出し制御部４０６の内部構成について説明する。
【００５１】
図５は、バッファ読み出し制御部４０６の内部構成の一例を示す図である。
【００５２】
図５に示したように、バッファ読み出し制御部４０６は、帯域制御部５０２、キュー選択部５０４、及びパケットデータ読み出し部５０８を含む。
【００５３】
［１−４−１．帯域制御］
まず、帯域制御部５０２において行われる帯域制御（トークン制御）について説明する。
【００５４】
帯域制御部５０２は、トークン制御部５１２、トークンテーブル５１４、最大値テーブル５１６及び複数のトークンカウンタ５１８（５１８−１〜ｎ、ｎはキューの個数）を含む。
【００５５】
トークンテーブル５１４は、パケットバッファ３１２内の複数のキューに対応する複数の加算トークン値を記憶している。複数の加算トークン値はそれぞれ、各キューごとに定められた送信帯域に応じて周期的に加算されるトークン量を示す値であり、各キューごとに予め設定された値である。
【００５６】
最大値テーブル５１６は、複数のキューに対応する複数の最大トークン値を記憶している。複数の最大トークン値はそれぞれ、対応するトークンカウンタ５１８において各キューごとに蓄積可能な最大のトークン量を示す値であり、各キューごとに予め設定された値である。
【００５７】
トークンカウンタ５１８（５１８−１〜ｎ）は、複数のキューに対応して設けられた複数のカウンタである。複数のトークンカウンタ５１８−１〜ｎはカウント動作によって、対応するキューごとに、加算されたトークンを蓄積し、蓄積トークン値を保持する。トークンカウンタ５１８−１〜ｎのカウント値はそれぞれ、各キューに蓄積されている現在のトークン量を示す値である。
【００５８】
トークン制御部５１２は、トークンカウンタ５１８−１〜ｎのカウント動作を制御する。トークン制御部５１２は、トークンテーブル５１４に記憶されている加算トークン値を参照し、トークンカウンタ５１８−１〜ｎに、対応する加算トークン値を供給する。また、トークン制御部５１２は、トークンカウンタ５１８−１〜ｎの各々に、トークンの加算タイミングを示すトリガ（トークン加算トリガ）を含むトークン加算トリガ信号を供給する。
【００５９】
複数のトークンカウンタ５１８−１〜ｎは、トークン加算トリガ信号を受けとり、そのトークン加算トリガによって定まる一定の周期で、各キューごとに、対応する加算トークン値を現在のカウント値（蓄積トークン値）に加算する。さらに、トークン制御部５１２は、最大値テーブル５１８に記憶されている最大トークン値を参照し、各キューごとに、加算後のカウント値が対応する最大トークン値を超える場合は、加算後のカウント値に換えて、トークンカウンタ５１８のカウント値（蓄積トークン値）をその最大トークン値に設定する。
【００６０】
また、トークン制御部５１２は、複数のキューに対応する複数のトークンステータス信号を生成し、キュー選択部５０４に供給する。複数のトークンステータス信号はそれぞれ、対応するキューに必要最低限の量のトークンが蓄積されているか否かを示す信号である。トークン制御部５１２は、トークンカウンタ５１８−１〜ｎのカウント値（蓄積トークン値）がそれぞれ、予め定められたトークン閾値以上（例えば、０（零）以上）であるか否かを判定する。トークン制御部５１２は、トークンカウンタ５１８のカウント値（蓄積トークン値）がそのトークン閾値以上であると判定した場合、対応するキューのトークンステータス信号をオン状態（例えば、Ｈレベル）にする。一方、トークン制御部５１２は、トークンカウンタ５１８のカウント値（蓄積トークン値）がトークン閾値より小さいと判定した場合には、対応するキューのトークンステータス信号をオフ状態（例えば、Ｌレベル）にする。尚、本実施例では、各々のキューについて共通のトークン閾値として０（零）を設けた場合を示したが、各々のキュー毎に異なるトークン閾値を設定してもよい。
【００６１】
更に、トークン制御部５１２は、複数のトリガ信号を生成し、キュー選択部５０４に供給する。複数のトリガ信号はそれぞれ、複数のトークンカウンタ５１８−１〜ｎに供給されるトークン加算トリガ信号と同一の周期を有する信号であり、各々のトークンカウンタ５１８においてトークンが加算されるタイミングを示すトリガを含む信号である。
［１−４−２．送信可能状態の継続時間の計測］
次に、キュー選択部５０４において行われる、対応するキューごとの送信可能状態の継続時間の計測について説明する。
【００６２】
キュー選択部５０４は、ステータス監視部５２２、送信可能ステータスフラグ５２４、トリガカウンタ５２６（５２６−１〜ｎ）、キュー選択制御部５２８、優先制御閾値格納部５３０、アラーム通知閾値格納部５３２を含む。
【００６３】
ステータス監視部５２２は、帯域制御部５０２のトークン制御部５１２から、複数のトークンステータス信号及び複数のトリガ信号を受けとるともに、キュー管理部４０４から複数のキューステータス信号を受けとる。ステータス監視部５２２は、各々のキューごとに、対応するトークンステータス信号及びキューステータス信号の状態を監視する。
【００６４】
送信可能ステータスフラグ５２４は、複数のキューに対応する複数の送信可能フラグを含む。複数の送信可能フラグはそれぞれ、対応するキューが送信可能状態にあるか否かを示すものであり、送信可能状態にある場合にオン状態となり、送信可能状態にない場合はオフ状態となるものである。
【００６５】
ステータス監視部５２２は、あるキューについて、対応するトークンステータス信号がそのキューに必要最低限の量以上のトークンが蓄積されていることを示し、かつ、対応するキューステータス信号がそのキューに送信可能なパケットデータが存在することを示す場合に、そのキューは送信可能状態にあると判定し、送信可能ステータスフラグ５２４の対応する送信可能フラグをオン状態にする。すなわち、ステータス監視部５２２は、あるキューについて、対応するトークンステータス信号とキューステータス信号がともにオン状態（例えば、Ｈレベル）を示す場合に、そのキューは送信可能状態にあると判定し、送信可能ステータスフラグ５２４の対応する送信可能フラグをオン状態にする。
【００６６】
一方、ステータス監視部５２２は、あるキューについて、対応するトークンステータス信号がそのキューに必要最低限の量より少ないトークンしか蓄積されていないことを示すか、又は、対応するキューステータス信号がそのキューに送信可能なパケットデータが無いことを示す場合に、そのキューは送信可能状態にないと判定し、送信可能ステータスフラグ５２４の対応する送信可能フラグをオフ状態にする。すなわち、ステータス監視部５２２は、あるキューについて、対応するトークンステータス信号とキューステータス信号の少なくともいずれか一方がオフ状態（例えば、Ｌレベル）を示す場合に、そのキューは送信可能状態にないと判定し、送信可能ステータスフラグ５２４の対応する送信可能フラグをオフ状態にする。
【００６７】
また、ステータス監視部５２２は、トリガカウンタ５２６−１〜ｎのカウント動作を制御する。トリガカウンタ５２６（５２６−１〜ｎ）は、複数のキューに対応して設けられた複数のカウンタである。複数のトリガカウンタ５２６−１〜ｎはそれぞれ、ステータス監視部５２２の制御の下、対応するキューが送信可能状態である期間内に、ステータス監視部５２２に供給された、対応するトリガ信号のトリガの数をカウントする。
【００６８】
トリガ信号は対応するキューにおいてトークンが加算されるタイミングを示す信号であり、そのトリガの数はトークンの加算回数に相当するものであることから、トリガカウンタ５２６−１〜ｎのカウント値は、送信可能状態にあるキューにおけるトークン加算回数に相当するものである。
【００６９】
また、トリガ信号の周期は一定（トークンカウンタ５１８−１〜ｎに供給されるトークン加算トリガ信号の周期と同一）であることから、トリガカウンタ５２６−１〜ｎのカウント値は、対応するキューの送信可能状態の継続時間を示す値ともなる。よって、ステータス監視部５２２は、上述のトリガカウンタ５２６−１〜ｎのカウント動作によって、対応するキューごとに、送信可能状態の継続時間を計測することができる。
【００７０】
上述のトリガカウンタ５２６−１〜ｎのカウント動作は、ステータス監視部５２２によって、以下のように制御される。
【００７１】
トリガカウンタ５２６−１〜ｎは、各キューごとに、送信可能ステータスフラグ５２４の対応する送信可能フラグがオフ状態からオン状態に変化したとき、対応するトリガ信号のトリガの数のカウント動作を開始し、対応する送信可能フラグがオン状態を示している間、トリガ信号のトリガの数のカウントを継続する。
【００７２】
トリガカウンタ５２６−１〜ｎは、対応する送信可能フラグがオン状態からオフ状態に変化したとき、カウント動作を停止し、カウント値をクリアする（０（零）にする）。また、トリガカウンタ５２６−１〜ｎは、後述するカウントクリア信号に応答して、カウント値をクリアする（０（零）にする）。
【００７３】
［１−４−３．キュー選択における優先制御］
次に、キュー選択部５０４において行われる、キュー選択における優先制御について説明する。
【００７４】
キュー選択制御部５２８は、パケット送信トリガに応答して、送信可能ステータスフラグ５２４内の複数の送信可能フラグの状態、及び、複数のトリガカウンタ５２６のカウント値（トークン加算回数）を参照することにより、各々のキューごとに送信可能状態の継続時間を監視し、複数のキューの中からその継続時間が予め定められた閾値よりも長いキューを送信対象として優先的に選択する優先制御を行う。
【００７５】
パケット送信トリガは、出力ポート（物理回線）の送信帯域に応じて定まる、データ出力対象の出力ポート（物理回線）がデータ送信可能なタイミングで発生するトリガ信号である。パケット送信トリガは、例えば、パケットバッファ制御部３１０内に設けられた、その出力ポート（物理回線）に対する帯域制御機能（不図示）によって、その出力ポート（物理回線）の送信帯域に一定量以上の空きがあるときに生成される。あるいは、パケット送信トリガは、例えば、出力インターフェース３１４内に出力ポート（物理回線）単位で設けられたキャッシュバッファ（不図示）の蓄積量が一定の量以下になったときに、出力インターフェース３１４によって生成されるようにしてもよい。
【００７６】
キュー選択部５０４では、優先制御は以下のようにして行われる。
【００７７】
優先制御閾値格納部５３０は、上述の優先制御の基準となる優先制御閾値を記憶している。優先制御閾値は、トリガカウンタ５２６のカウント値（トークン加算回数）に対する閾値であり、送信可能状態の継続時間の閾値（継続時間閾値）に対応するものである。優先制御閾値は、各キューごとに個別に設定された値としてもよく、各キューに対して共通に設定された値としてもよい。
【００７８】
キュー選択制御部５２８は、優先制御閾値格納部５３０を参照することにより、優先制御閾値を取得する。キュー選択制御部５２８は、各々のキューごとに、対応する送信可能フラグの状態とトリガカウンタ５２６のカウント値（トークン加算回数）を監視する。キュー選択制御部５２８は、複数のキューの中から、対応する送信可能フラグがオン状態を示しており、かつ、トリガカウンタ５２６のカウント値が、取得した優先制御閾値より大きいキューを、送信対象として優先的に選択する。
【００７９】
キュー選択制御部５２８は、優先制御により選択したキューの識別情報（選択キュー識別情報）を生成し、キュー管理部４０４に供給する。
【００８０】
尚、上述の優先制御により送信対象として２つ以上のキューが選択された場合、キュー選択制御部５２８は、上述のラウンドロビン（ＲＲ）により、選択された２つ以上のキューの中から送信対象のキューを１つずつ順次選択していき、対応する選択キュー識別情報を順次生成していく。
【００８１】
また、上述の優先制御により送信対象として１つもキューが選択されなかった場合、キュー選択制御部５２８は、上述のラウンドロビン（ＲＲ）により、同一の出力ポート（物理回線）をデータ出力対象とする全てのキューの中から送信対象のキューを１つずつ順次選択していき、対応する選択キュー識別情報を順次生成していく。
【００８２】
また、キュー選択制御部５２８は、同一の出力ポート（物理回線）をデータ出力対象とする複数のキューについて、その出力ポート（物理回線）の送信帯域が全て使用されている場合等、送信帯域不足にある場合には、上述の優先制御においては、送信対象として選択することが可能なキューが存在しても、そのキューの選択を行わず、送信帯域に空きが生じるまで選択を遅延させる。
【００８３】
キュー管理部４０４は、キュー選択制御部５２８から選択キュー識別情報を受けとる。キュー管理部４０４は、上記説明したように、受けとった選択キュー識別情報に基づいて、選択されたキューに対応する読み出しアドレス（選択キュー読み出しアドレス）、及び、選択されたキューから読み出されるパケットデータのパケット長の情報（選択キューパケット長情報）を生成する。
【００８４】
パケットデータ読み出し部５０８は、キュー管理部４０４から選択キュー読み出しアドレスを受けとり、受けとった選択キュー読み出しアドレスに基づいて、パケットバッファ３１２に読み出しアドレスを供給する。
【００８５】
パケットバッファ３１２は、バッファ読み出し部５０８から読み出しアドレスを受けとり、受けとった読み出しアドレスによって示されるデータ格納領域からパケットデータを出力する。
【００８６】
パケットデータ読み出し部５０８は、パケットバッファ３１２からパケットデータを受けとり、受けとったパケットデータを出力インターフェース３１４に供給する。
【００８７】
一方、帯域制御部５０２において、トークン制御部５１２は、キュー管理部４０４から選択キューパケット長情報を受けとり、受けとった選択キューパケット長情報に基づいて、バケットバッファ３１２から読み出されたパケットデータのパケット長に相当するトークン値を算出する。トークン制御部５１２は、選択されたキューに対応するトークンカウンタ５１８の現在のカウント値（蓄積トークン値）から、算出されたトークン値を減算し、選択されたキューに対応するトークンカウンタ５１８のカウント値（蓄積トークン値）を更新する。帯域制御部５０２は、更新されたカウント値（蓄積トークン値）に基づいて、各キューごとの帯域制御（トークン制御）を継続して行う。
【００８８】
さらに、トークン制御部５１２は、ステータス監視部５２２に、選択したキューに対応するカウントクリア信号を生成する。カウントクリア信号は、選択したキューに対応するトリガカウンタ５２６のカウント値をクリアすることを、ステータス監視部５２２に指示するための信号である。
【００８９】
キュー選択部５０４において、ステータス監視部５２２は、カウントクリア信号を受けとったとき、対応するトリガカウンタ５２６のカウント値をクリアする（０（零）にする）。
【００９０】
以上説明したように、第１実施例に係るバッファ読み出し制御部４０６においては、キュー選択部５０４によって、各々のキューごとに、送信可能状態の継続時間を監視し、複数のキューの中から、その継続時間が予め定められた閾値よりも長いキューを送信対象として優先的に選択する優先制御を行うようにしたので、送信可能状態にあるにもかかわらず、対応する出力ポート（物理回線）の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、送信可能状態の継続時間が長いキューから優先的に送信対象とすることができる。
【００９１】
これにより、各々のキューについて蓄積されるトークン量（蓄積トークン値）が増加し、これに伴って、パケット送信時においてバースト転送されるデータ量が増加するのを防止することができ、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することができる。
【００９２】
［１−４−４．アラーム通知処理］
次に、キュー選択部５０４において行われるアラーム通知処理について説明する。
【００９３】
ステータス監視部５２２は、アラーム通知閾値格納部５３２を参照することにより、アラーム通知閾値を取得する。アラーム通知閾値は、アラーム通知閾値格納部５３２に記憶されており、トリガカウンタ５２６のカウント値に対する閾値であり、送信可能状態の継続時間の閾値に相当するものである。
【００９４】
ステータス監視部５２２は、複数のトリガカウンタ５２６のカウント値を監視し、複数のトリガカウンタ５２６のいずれかのカウント値がアラーム通知閾値よりも大きいと判定したとき、アラーム通知信号を出力する。アラーム通知信号は、トリガカウンタ５２６のカウント値がアラーム通知閾値を超えたキューの識別情報や、そのイベントの発生時刻等の情報を含むようにすることができる。
【００９５】
アラーム通知信号は、図３に示した各部を含む、パケット伝送装置３００内の各種の回路又は装置などを全体的に制御する制御装置（図示せず）に出力される。制御装置はアラーム通知信号を受けとり、例えば、アラーム通知信号の受信状況をログとして保存しておく。
【００９６】
以上説明したように、第１実施例に係るバッファ読み出し制御部４０６においては、ステータス監視部５２２によってアラーム通知信号を出力するようにしたので、例えば、ネットワーク管理者は、上記のログを参照することにより、パケット伝送装置３００において行われた帯域制御（トークン制御）の状況を適切に把握することができ、どのキューにおいて送信可能状態の継続時間が閾値を超えやすい傾向にあるか等の統計情報を取得することができる。
【００９７】
これにより、ネットワーク管理者は、各キューごとの送信帯域や、各キューごとに周期的に加算されるトークン量及び蓄積されるトークン量の最大値といった各種の送信パラメータを適切に設定することができ、ネットワーク設計を適切に行うことができる。
【００９８】
［１−５．パケットバッファ制御部３１０におけるパケット伝送制御］
次に、パケット伝送装置３００のパケットバッファ制御部３１０が実行するパケット伝送制御処理について説明する。
【００９９】
［１−５−１．トークン加算トリガの生成に応答して実行される処理］
図６は、トークン加算トリガの生成に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
【０１００】
ステップＳ６０２において、帯域制御部５０２のトークン制御部５１２は、トークンの加算タイミングを示すトリガ（トークン加算トリガ）を生成し、トークン加算トリガ信号としてトークンカウンタ５１８に出力する。
【０１０１】
ステップＳ６０４において、トークン制御部５１２は、同一の出力ポート（物理回線）をデータ出力対象とする複数のキューの中から、１番目のキューを処理対象として選択する（ｋ＝１）。
【０１０２】
ステップＳ６０６において、トークン制御部５１２は、ｋ番目のキューに対応する加算トークン値、最大トークン値及び蓄積トークン値を取得する。トークン制御部５１２は、トークンテーブル５１４を参照することにより、ｋ番目のキューに対応する加算トークン値を取得する。トークン制御部５１２は、最大値テーブル５１６を参照することにより、ｋ番目のキューに対応する最大トークン値を取得する。また、トークン制御部５１２は、ｋ番目のキューに対応するトークンカウンタ５１８からそのカウント値を読み出すことにより、蓄積トークン値を取得する。
【０１０３】
ステップＳ６０８において、トークン制御部５１２は、ｋ番目のキューに対応するトークンカウンタ５１８により、ステップＳ６０６において取得した蓄積トークン値と加算トークン値を加算し、加算後のトークン値がステップＳ６０６において取得した最大トークン値以上の値であるか否かを判定する。判定の結果、加算後のトークン値が最大トークン値より小さい場合、処理はステップ６１０に進む。加算後のトークン値が最大トークン値以上の値である場合、処理はステップ６１２に進む。
【０１０４】
ステップＳ６１０において、トークン制御部５１２は、加算後のトークン値を、ｋ番目のキューに対応するトークンカウンタ５１８のカウント値として保持することにより、加算後のトークン値を蓄積トークン値の更新値とする。また、トークン制御部５１２は、ステップＳ６０２において生成したトークン加算トリガに対応するトリガを生成し、ｋ番目のキューに対応するトリガ信号として、キュー選択部５０４のステータス監視部５２２に出力する。
【０１０５】
ステップＳ６１２において、トークン制御部５１２は、加算後のトークン値に換えて、ｋ番目のキューに対応するトークンカウンタ５１８のカウント値をステップＳ６０６において取得した最大トークン値に設定することにより、最大トークン値を蓄積トークン値の更新値とする。また、トークン制御部５１２は、ステップＳ６１０の場合と同様に、トリガ信号をステータス監視部５２２に出力する。
【０１０６】
ステップＳ６１４において、ステータス監視部５２２は、トークン制御部５１２から、ｋ番目のキューに対応するトリガ信号を受けとる。ステータス監視部５２２は、受けとったトリガ信号に含まれるトリガに応答して、送信可能ステータスフラグ５２４の、ｋ番目のキューに対応する送信可能フラグの状態をチェックする。チェックの結果、その送信可能フラグがオフ状態にある場合、処理はステップＳ６１６に進む。その送信可能フラグがオン状態にある場合、処理はステップＳ６１８に進む。
【０１０７】
ステップＳ６１６において、ステータス監視部５２２は、ｋ番目のキューに対応するトリガカウンタ５２６において、トークン制御部５１２から供給されるトリガ信号のトリガの数のカウント動作を停止し、そのカウント値（トークン加算回数）をクリアする（０（零）にする）。これにより、ステータス監視部５２２は、ｋ番目のキューにおけるトークン加算回数の値をリセットし、０（零）に保持する。
【０１０８】
ステップＳ６１８において、ステータス監視部５２２は、ｋ番目のキューに対応するトリガカウンタ５２６において、トークン制御部５１２から供給されるトリガ信号のトリガの数のカウント動作を実行する。トリガカウンタ５２６は、トリガ信号において、トークン加算トリガに対応するトリガを検出し、そのカウント値（トークン加算回数）を１だけ増加させる。これにより、ステータス監視部５２２は、ｋ番目のキューにおけるトークン加算回数の値を１だけ増加させ、トークン加算回数の値を更新する。
【０１０９】
ステップＳ６２０において、トークン制御部５１２は、ｋ番目のキューに対応するトークンカウンタ５１８のカウント値（蓄積トークン値）を参照することにより、蓄積トークン値が０（零）より小さい、すなわち、負の値であるか否かを判定する。判定の結果、蓄積トークン値が０（零）以上である場合、処理はステップＳ６２２に進む。蓄積トークン値が負の値である場合、処理はステップＳ６２８に進む。
【０１１０】
ステップＳ６２２において、トークン制御部５１２は、ｋ番目のキューにおいて必要最低限の量以上のトークンが蓄積されていると判定し、ｋ番目のキューに対応するトークンステータス信号をオン状態（例えば、Ｈレベル）に設定する。
【０１１１】
ステップＳ６２４において、ステータス監視部５２２は、ｋ番目のキューに対応するキューステータス信号の状態をチェックする。チェックの結果、そのキューステータス信号がオン状態である場合、処理はステップＳ６２６に進む。そのキューステータス信号がオフ状態である場合、処理はステップＳ６２８に進む。
【０１１２】
ステップＳ６２６において、ステータス監視部５２２は、ｋ番目のキューに送信可能なパケットデータが存在すると判定し、送信可能ステータスフラグ５２４の、ｋ番目のキューに対応する送信可能フラグをオン状態に設定する。
【０１１３】
ステップＳ６２８において、トークン制御部５１２は、現在処理対象としているｋ番目のキューが最後のキュー（ｋ＝ｎ、ｎはキューの個数）であるか否かを判定する。判定の結果、ｋ番目のキューが最後のキューである場合、処理はステップＳ６３０に進む。ｋ番目のキューが最後のキューでない場合、処理はステップＳ６３２に進む。
【０１１４】
ステップＳ６３０において、パケットバッファ制御部３１０は、一連の処理を終了する。トークン制御部５１２は、次のトークン加算トリガが生成されるタイミングまで処理を停止する。
【０１１５】
ステップＳ６３２において、トークンァ制御部５１２は次のキュー、すなわち、ｋ＋１番目のキューを処理対象として選択し、処理対象のキューを更新する。その後、処理はステップＳ６０６に戻り、パケットバッファ制御部３１０は更新された処理対象のキューに対して、ステップＳ６０６〜Ｓ６２８までの各処理を実行する。
【０１１６】
以上説明したステップＳ６０２〜Ｓ６３２までの一連の処理によって、パケットバッファ制御部３１０は、トークン加算トリガの生成に応答して、各々のキューに対して蓄積されたトークン量（蓄積トークン値）に応じて、各キューごとに、トークンステータス信号及び送信可能ステータスフラグの状態を適切に設定することができる。さらに、パケットバッファ制御部３１０は、送信可能ステータスフラグ５２４の送信可能フラグがオン状態である場合に、対応するキューにおいてトークン加算回数をカウントすることにより、そのキューの送信可能状態の継続時間を適切に計測することができる。
【０１１７】
［１−５−２．パケットの受信に応答して実行される処理］
図７は、パケットの受信に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
【０１１８】
ステップＳ７０２において、バッファ書き込み制御部４０２は、送信用のパケットを受信する。バッファ書き込み制御部４０２は、受信した送信用のパケットデータをパケットバッファ３１２に書き込む。
【０１１９】
ステップＳ７０４において、キュー管理部４０４は、バッファ書き込み制御部４０２から、書き込んだパケットデータに関するパケット情報を受けとる。キュー管理部４０４は、受けとったパケット情報に基づいて、同一の出力ポート（物理回線）をデータ出力対象とする複数のキューの中から、パケットバッファ３１２に格納されたパケットデータに割り当てられるキューを特定する。
【０１２０】
ステップＳ７０６において、キュー管理部４０４は、受信したパケットが、ステップＳ７０４において特定したキューに最初に格納されるパケットであるか否かを判定する。判定の結果、受信したパケットが、特定したキューに最初に格納されるパケットである場合、処理はステップＳ７０８に進む。受信したパケットが、特定したキューに最初に格納されるパケットでない場合、処理はステップＳ７１０に進む。
【０１２１】
ステップＳ７０８において、キュー管理部４０４は、ステップＳ７０４において特定したキューに送信可能なパケットデータが格納されたことを確認し、特定したキューに対応するキューステータス信号をオン状態（例えば、Ｈレベル）に設定し、オン状態のキューステータス信号をキュー選択部５０４のステータス監視部５２２に出力する。
【０１２２】
ステップＳ７１０において、ステータス監視部５２２は、キュー管理部４０４から、ステップＳ７０４において特定したキューに対応するキューステータス信号を受けとる。ステータス監視部５２２は、受けとったキューステータス信号がオン状態であることに応答して、ステップＳ７０４において特定したキューに対応するトークンステータス信号の状態をチェックする。チェックの結果、そのキューステータス信号がオン状態である場合、処理はステップＳ７１２に進む。そのキューステータスがオフ状態である場合、処理はステップＳ７１４に進む。
【０１２３】
ステップＳ７１２において、ステータス制御部５２２は、特定したキューに必要最低限の量以上のトークンが蓄積されていると判定し、送信可能ステータスフラグ５２４において、特定したキューに対応する送信可能フラグをオン状態に設定する。
【０１２４】
ステップＳ７１４において、パケットバッファ制御部３１０は、一連の処理を終了し、次のパケットが受信されるのを待つ。
【０１２５】
以上説明したステップＳ７０２〜Ｓ７３２までの一連の処理によって、パケットバッファ制御部３１０は、パケットの受信に応答して、各キューごとに、キューステータス信号及び送信可能ステータスフラグの状態を適切に設定することができる。
【０１２６】
［１−５−３．パケット送信トリガに応答して実行される処理］
図８は、パケット送信トリガに応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
【０１２７】
ステップＳ８０２において、キュー選択部５０４のキュー選択制御部５２８は、パケット送信トリガを受信する。パケット送信トリガは、上記説明したように、出力ポート（物理回線）の送信帯域によって定まる、データ出力対象の出力ポート（物理回線）が送信可能なタイミングで発生するトリガ信号である。
【０１２８】
ステップＳ８０４において、キュー選択制御部５２８は、優先制御閾値格納部５３０を参照することにより優先制御閾値を取得するとともに、送信可能ステータスフラグ５２４の状態、及び複数のトリガカウンタ５２６のカウント値をチェックする。キュー選択制御部５２８は、複数のキューの中で、送信可能ステータスフラグ５２４の対応する送信可能フラグがオン状態であり、かつ、トークン加算回数が優先制御閾値よりも大きいキュー（優先キュー）が存在するか否かを判定する。判定の結果、優先キューが存在する場合、処理はステップＳ８０６に進む。優先キューが存在しない場合、処理はステップＳ８０８に進む。
【０１２９】
ステップＳ８０６において、キュー選択制御部５２８は、複数のキューの中で、上述の優先キューが複数個存在する場合は、複数の優先キューの中からラウンドロビンにより、１つのキューを送信対象として選択する。キュー選択制御部５２８は、上述の優先キューが１つしか存在しない場合は、その１つの優先キューを送信対象として選択する。キュー選択制御部５２８は、選択したキューの識別情報（選択キュー識別情報）をキュー管理部４０４に通知する。
【０１３０】
ステップＳ８０８において、キュー選択制御部５２８は、複数のキューの中で、送信可能ステータスフラグ５３０の対応する送信可能フラグがオン状態であるキューが存在するか否かを判定する。判定の結果、送信可能フラグがオン状態のキューが存在する場合、処理はステップＳ８１０に進む。送信可能フラグがオン状態のキューが存在しない場合、処理はステップＳ８２４に進む。
【０１３１】
ステップＳ８１０において、キュー選択制御部５２８は、対応する送信可能フラグがオン状態のキューが複数個存在する場合は、複数のキューの中からラウンドロビンにより、１つのキューを送信対象として選択する。キュー選択制御部５２８は、対応する送信可能フラグがオン状態のキューが１つしか存在しない場合は、その１つのキューを送信対象として選択する。キュー選択制御部５２８は、選択したキューの識別情報（選択キュー識別情報）をキュー管理部４０４に通知する。
【０１３２】
ステップＳ８１２において、キュー管理部４０４は、選択キュー識別情報に基づいて、ステップＳ８０６又はＳ８１０において選択したキューに対応するパケット情報格納部４０８を参照し、選択したキューに格納されている、先頭のパケットデータの読み出しアドレスを生成する。パケットデータ読み出し部５０８は、生成した読み出しアドレスによって示されるパケットバッファ３１２のデータ格納領域からパケットデータを読み出すことにより、先頭のパケットデータを出力インターフェース３１４に出力する。
【０１３３】
ステップＳ８１４において、帯域制御部５０２のトークン制御部５１２は、キュー管理部４０４から、選択したキューから読み出されたパケットデータのパケット長の情報（選択キューパケット長情報）を受けとり、そのパケット長に相当するトークン値を算出する。トークン制御部５１２は、選択されたキューに対応するトークンカウンタ５１８の現在のカウント値（蓄積トークン値）から、算出されたトークン値を減算することにより、選択したキューの蓄積トークン値を更新する。
【０１３４】
さらに、トークン制御部５１２は、選択したキューに対応するトリガカウンタ５２６のカウント値のクリアをステータス監視部５２２に要求する。ステータス監視部５２２は、そのクリア要求に応答して、選択したキューに対応するトリガカウンタ５２６のカウント値（トークン加算回数）をクリアする（０（零）にする）ことにより、トークン加算回数をリセットする。
【０１３５】
ステップＳ８１６において、キュー管理部４０４は、ステップＳ８１２におおけるパケットデータの出力後に、パケットバッファ３１２内の選択したキューにパケットデータが残っているか否かを判定する。判定の結果、パケットデータが残っていない場合、処理はステップＳ８１８に進む。パケットデータが残っている場合、処理はステップＳ８２０に進む。
【０１３６】
ステップＳ８１８において、キュー管理部４０４は、選択したキューにパケットデータが残っていないことを確認し、選択したキューに対応するキューステータス信号をオフ状態（例えば、Ｌレベル）に設定する。ステータス監視部５２２は、キューステータス信号がオフ状態に変化したことに応答して、送信可能ステータスフラグ５２４の選択したキューに対応する送信可能フラグをオフ状態に設定する。
【０１３７】
ステップＳ８２０において、トークン制御部５１２は、ステップＳ８１４における更新後の、選択したキューに対応するトークンカウンタ５１８のカウント値（蓄積トークン値）を参照することにより、ステップＳ８１２におけるパケットデータの出力後において、選択したキューに対応する蓄積トークン値が、閾値（例えば、０（零））以上の値であるか否かを判定する。判定の結果、選択した蓄積トークン値が閾値以上である場合、処理はステップＳ８２４に進む。選択したキューに対応する蓄積トークン値が閾値より小さい場合、処理はステップＳ８２２に進む。
【０１３８】
ステップＳ８２２において、トークン制御部５１２は、選択したキューに必要最低限の量以上のトークンが残っていないと判定し、選択したキューに対応するトークンステータス信号をオフ状態（例えば、Ｌレベル）に設定する。ステータス監視部５２２は、トークンステータス信号がオフ状態に変化したことに応答して、送信可能ステータスフラグ５２４の選択したキューに対応する送信可能フラグをオフ状態に設定する。
【０１３９】
ステップＳ８２４において、パケットバッファ制御部３１０は一連の処理を終了する。
【０１４０】
以上説明したステップＳ８０２〜Ｓ８２４までの一連の処理によって、パケットバッファ制御部３１０は、パケット送信トリガの受信に応答して送信対象のキューを選択する際に、各々のキューのトークン加算回数に応じて優先制御を行うか否かを判定することができるので、各々のキューに対して、その送信可能状態の継続時間に応じた優先制御を適切に行うことができる。
【０１４１】
これにより、送信可能状態にあるにもかかわらず、対応する出力ポート（物理回線）の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、送信可能状態の継続時間が長いキューから優先的に送信対象とすることができる。よって、各々のキューについて蓄積されるトークン量（蓄積トークン値）が増加し、これに伴って、パケット送信時においてバースト転送されるデータ量が増加するのを防止することができ、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することができる。
【０１４２】
さらに、パケットバッファ制御部３１０は、選択したキューからパケットデータを出力した後においても、各キューごとに、送信可能ステータスフラグの状態を適切に設定することができる。
【０１４３】
［１−５−４．パケットバッファ制御部の変形例］
図６〜図８に示した各々のパケット伝送制御処理は、図４及び図５に示したハードウェアによって実現する代わりに、図６〜図８に示した各々の処理をプログラムに実行させることにより、ソフトウェアによって実現することも可能である。
【０１４４】
この場合、パケットバッファ制御部３１０は例えば、図６〜図８に示した各々のステップを処理内容とするプログラム（パケットバッファ制御プログラム）を格納するプログラムメモリ、そのプログラムを実行可能なプロセッサ、及びそのプロセッサによる演算処理のワークエリアを提供するワークメモリを含むものとすることができる。
【０１４５】
パケットバッファ制御部３１０のプロセッサは、ワークメモリを用いて、プログラムメモリに格納されたパケットバッファ制御プログラムを実行することにより、図４及び図５に示したパケットバッファ制御部３１０内部の各々の部分が連携して実行する処理と同等の処理を実行することができる。
【０１４６】
［２．第２実施例］
以下、第２実施例に係るパケット伝送装置及びパケット伝送方法について説明する。
【０１４７】
［２−１．バッファ読み出し制御部９０６の内部構成］
第２実施例に係るパケット伝送装置９００の構成は、図３〜図５に示したパケット伝送装置３００の構成と、パケットバッファ制御部に含まれるバッファ読み出し制御部の内部構成の点で異なるが、それ以外の部分は同様である。よって、第２実施例に係るパケット伝送装置９００の全体構成については、図示及び説明を省略し、第２実施例に係るパケットバッファ制御部９１０におけるバッファ読み出し制御部９０６の内部構成について説明する。
【０１４８】
図９は、第２実施例に係るバッファ読み出し制御部９０６の内部構成の一例を示す図である。バッファ読み出し制御部９０６の構成は、図５に示したバッファ読み出し制御部４０６の構成と、帯域制御部及びキュー選択部の内部構成の点で異なっているが、それ以外の部分については同様である。
【０１４９】
図９に示した帯域制御部９０２は、図５に示した帯域制御部５０２に、トークン閾値テーブル９２０が追加され、トークン制御部５１２の代わりにトークン制御部９１２が設けられている点、及び、トークン制御部９１２がトークン閾値超過ステータス信号を生成する点で異なっているが、その以外の部分については同様である。
【０１５０】
図９に示したキュー選択部９０４は、図５に示したキュー選択部５０４と、トリガカウンタ５２６及び優先制御閾値格納部５３０が設けられておらず、代わりにトークン閾値超過ステータスフラグ９３４が追加されている点、及び、ステータス監視部５２２の代わりにステータス監視部９２２が設けられている点で異なっているが、その以外の部分については同様である。
【０１５１】
尚、図９において、図５に示したバッファ読み出し制御部４０６と同一又は対応する部分は、同一の符号で示されている。図９において同一の符号で示した部分の動作や機能は、図５において説明したとおりであるので、詳細な説明は省略する。
【０１５２】
［２−１−１．帯域制御］
まず、帯域制御部９０２において行われる帯域制御（トークン制御）について説明する。
【０１５３】
帯域制御部９０２において、トークン制御部９１２は、図５に示したトークン制御部５１２と同様に、トークンテーブル５１４に記憶されている加算トークン値及び最大値テーブル５１６に記憶されている最大トークン値を参照することにより、トークンカウンタ５１８−１〜ｎのカウント動作を制御する。
【０１５４】
トークン閾値テーブル９２０は、複数のキューに対応する複数の蓄積トークン閾値を記憶している。複数の蓄積トークン閾値はそれぞれ、対応するトークンカウンタ５１８において十分な量のトークンが蓄積されているか否かを判定するための基準値であり、各キューごとに予め設定された値である。各々の蓄積トークン閾値は、上述した、トークンステータス信号の状態を決定するための閾値よりも大きい値である。
【０１５５】
トークン制御部９１２は、複数のキューに対応する複数のトークン閾値超過ステータス信号を生成し、キュー選択部９０４に供給する。複数のトークン閾値超過ステータス信号はそれぞれ、対応する蓄積トークン値が蓄積トークン閾値以上の値であるか否かを示す信号であり、対応するキューに十分な量のトークンが蓄積されているか否かを示す信号である。
【０１５６】
トークン制御部９１２は、トークン閾値テーブル９２０に記憶されている蓄積トークン閾値を参照することにより、トークンカウンタ５１８−１〜ｎのカウント値（蓄積トークン値）がそれぞれ、対応する蓄積トークン閾値以上の値である否かを判定する。トークン制御部９１２は、トークンカウンタ５１８のカウント値（蓄積トークン値）が蓄積トークン閾値以上の値であると判定した場合、対応するキューのトークン閾値超過ステータス信号をオン状態（例えば、Ｈレベル）にする。一方、トークン制御部９１２は、トークンカウンタ５１８のカウント値（蓄積トークン値）が蓄積トークン閾値より小さいと判定した場合には、対応するキューのトークン閾値超過ステータス信号をオフ状態（例えば、Ｌレベル）にする。
【０１５７】
トークン制御部９１２は、図５に示したトークン制御部５１２と同様に、複数のキューに対応する複数のトークンステータス信号を生成し、キュー選択部９０４に供給する。複数のトークンステータス信号については、図５において説明したとおりである。
【０１５８】
［２−１−２．送信可能状態の継続時間の計測、及び、キュー選択における優先制御］
次に、キュー選択部９０４において行われる、送信可能状態の継続時間の計測、及び、キュー選択における優先制御について説明する。
【０１５９】
キュー選択部９０４において、ステータス監視部９２２は、トークン制御部９１２から、複数のトークンステータス信号及び複数のトークン閾値超過ステータス信号を受けとるともに、キュー管理部４０４から複数のキューステータス信号を受けとる。ステータス監視部９２２は、各々のキューごとに、対応するトークンステータス信号、トークン閾値超過ステータス信号及びキューステータス信号の状態を監視する。
【０１６０】
ステータス監視部９２２は、図５に示したステータス監視部５２２と同様に、各キューごとに、対応するトークンステータス信号とキューステータス信号の状態に応じて、そのキューが送信可能な状態にあるか否かを判定し、送信可能ステータスフラグ５２４の対応する送信可能フラグの状態を制御する。
【０１６１】
トークン閾値超過ステータスフラグ９３４は複数のキューに対応する複数の閾値超過フラグを含む。複数の閾値超過フラグはそれぞれ、対応するトークン閾値超過ステータス信号がオン状態であるか否か、すなわち、対応するキューに十分な量のトークンが蓄積されているか否かを示すものである。
【０１６２】
ステータス監視部９２２は、あるキューについて、対応するトークン閾値超過ステータス信号がオン状態（例えば、Ｈレベル）である場合に、対応する閾値超過フラグをオン状態に設定する。一方、ステータス監視部９２２は、あるキューについて、対応するトークン閾値超過ステータス信号がオフ状態である場合に、対応する閾値超過フラグをオフ状態に設定する。
【０１６３】
キュー選択制御部９２８は、パケット送信トリガに応答して、送信可能ステータスフラグ５２４内の複数の送信可能フラグ及びトークン閾値超過ステータスフラグ内の複数の閾値超過フラグの状態を参照することにより、各々のキューごとに送信可能状態の継続時間を監視し、複数のキューの中から、送信可能状態の継続時間が予め定められた閾値よりも長いキューを送信対象として優先的に選択する優先制御を行う。尚、パケット送信トリガについては、図５においてキュー選択制御部５２８に関連して説明したとおりである。
【０１６４】
キュー選択部９０４において、優先制御は以下のようにして行われる。
【０１６５】
キュー選択制御部９２８は、各々のキューごとに、対応する送信可能フラグと閾値超過フラグの状態を監視する。キュー選択制御部９２８は、あるキューについて、対応する送信可能フラグがオン状態になった時点で、そのキューが送信可能状態になったと判定し、その後さらに、対応する閾値超過フラグがオン状態になったときに、そのキューの送信可能状態の継続時間が予め定められた閾値を超えたと判定する。すなわち、キュー選択制御部９２８は、対応する送信可能フラグと閾値超過フラグがともにオン状態を示すキューについては、その送信可能状態の継続時間が一定の閾値を超えたものと判定する。
【０１６６】
閾値超過フラグがオン状態になったということは、対応するキューに十分な量のトークンが蓄積されていることを意味することから、送信可能状態にあるキューに対応する閾値超過フラグがオン状態になったということは、そのキューにおいて送信可能なパケットデータは存在するが、そのパケットデータの送信が行われず、トークンが使用されない状態が継続していることを意味するためである。
【０１６７】
キュー選択制御部９２８は、対応する送信可能フラグと閾値超過フラグがともにオン状態であるキューを送信対象として優先的に選択する。キュー選択制御部９２８は、優先制御により選択したキューの識別情報（選択キュー識別情報）を生成し、キュー管理部４０４に供給する。
【０１６８】
尚、上述の優先制御により送信対象として２つ以上のキューが選択された場合、キュー選択制御部９２８は、上述のラウンドロビン（ＲＲ）により、選択された２つ以上の優先キューの中から送信対象のキューを１つずつ順次選択していき、対応する選択キュー識別情報を順次生成していく。
【０１６９】
また、上述の優先制御により送信対象として１つもキューが選択されなかった場合、キュー選択制御部９２８は、上述のラウンドロビン（ＲＲ）により、同一の出力ポート（物理回線）をデータ出力対象とする全てのキューの中から送信対象のキューを１つずつ順次選択していき、対応する選択キュー識別情報を順次生成していく。
【０１７０】
一方、キュー選択制御部９２８は、同一の出力ポート（物理回線）をデータ出力対象とする複数のキューについて、その出力ポート（物理回線）の送信帯域が全て使用されている場合等、送信帯域不足にある場合には、上述の優先制御においては、送信対象として選択することが可能なキューが存在しても、そのキューの選択を行わず、送信帯域に空きが生じるまで選択を遅延させる。
【０１７１】
パケットデータ読み出し部５０８は、図５に示したバッファ読み出し制御部４０６の場合と同様に、キュー管理部４０４から供給された選択キュー読み出しアドレスに基づいて、パケットバッファ３１２からパケットデータを読み出し、出力インターフェース３１４に供給する。
【０１７２】
一方、帯域制御部９０２において、トークン制御部９１２は、図５に示したトークン制御部５１２と同様に、キュー管理部４０４から供給される選択キューパケット長情報に基づいて、読み出されたパケットデータのパケット長に相当するトークン値を算出し、算出されたトークン値に基づいて、選択したキューに対応するトークンカウンタ５１８のカウント値（蓄積トークン値）を更新する。帯域制御部９０２は、更新されたカウント値（蓄積トークン値）に基づいて、各キューごとの帯域制御（トークン制御）を継続して行う。
【０１７３】
以上説明したように、第２実施例に係るバッファ読み出し制御部９０６においては、キュー選択部９０４によって、各々のキューごとに、送信可能状態の継続時間を監視し、複数のキューの中から、その継続時間が予め定められた閾値よりも長いキューを送信対象として優先的に選択する優先制御を行うようにしたので、送信可能状態にあるにもかかわらず、対応する出力ポート（物理回線）の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、送信可能状態の継続時間が長いキューから優先的に送信対象とすることができる。
【０１７４】
これにより、各々のキューについて蓄積されるトークン量（蓄積トークン値）が増加し、これに伴って、パケット送信時においてバースト転送されるデータ量が増加するのを防止することができ、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することができる。
【０１７５】
また、第２実施例に係るバッファ読み出し制御部９０６においては、バッファ読み出し制御部４０６とは異なり、カウンタを用いることなく、トークン閾値超過ステータスフラグ９３４のフラグ情報に基づいて、各々のキューごとの送信可能状態の継続時間を計測するようにしたので、キュー選択部９０４の内部構成を、図５に示したキュー選択部５０４と比べて、よりシンプルなものとすることができ、回路や装置の全体の規模を増大させることなく、上述の作用効果を得ることができる。
【０１７６】
［２−２．パケットバッファ制御部９１０におけるパケット伝送制御］
次に、パケット伝送装置９００のパケットバッファ制御部９１０が実行するパケット伝送制御処理について説明する。
【０１７７】
［２−２−１．トークン加算トリガの生成に応答して実行される処理］
図１０は、パケットバッファ制御部９１０において、トークン加算トリガの生成に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
【０１７８】
ステップＳ１００２からＳ１０１０までの処理は、図６に示したステップＳ６０２からＳ６１０までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップＳ１０１２及びＳ１０１０の後、処理はステップＳ１０１４に進む。
【０１７９】
ステップ１０１４からＳ１０２０までの処理は、図６に示したステップＳ６２０からＳ６２６までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップＳ１０１４において蓄積トークン値が負の値である場合、及び、ステップＳ１０１８においてキューステータス信号がオン状態でない場合、処理はステップＳ１０２２に進む。また、ステップＳ１０２０の後、処理はステップＳ１０２２に進む。
【０１８０】
ステップＳ１０２２において、帯域制御部９０２のトークン制御部９１２は、ｋ番目のキューに対応する蓄積トークン閾値を取得する。トークン制御部９１２は、トークン閾値テーブル９２０を参照することにより、ｋ番目のキューに対応する蓄積トークン閾値を取得する。
【０１８１】
ステップＳ１０２４において、トークン制御部９１２は、ステップＳ１０１０又はＳ１０１２において更新した蓄積トークン値が、ステップＳ１０２２において取得した蓄積トークン閾値より小さいか否かを判定する。判定の結果、蓄積トークン値が蓄積トークン閾値以上である場合、処理はステップＳ１０２６に進む。蓄積トークン値が蓄積トークン閾値より小さい場合、処理はステップＳ１０２８に進む。
【０１８２】
ステップＳ１０２６において、トークン制御部９１２は、ｋ番目のキューに十分な量のトークンが蓄積されていると判定し、ｋ番目のキューに対応するトークン閾値超過ステータス信号をオン状態（例えば、Ｈレベル）に設定する。また、キュー選択部９０４のステータス監視部９２２は、ｋ番目のキューに対応するトークン閾値超過ステータス信号がオン状態に設定されたことに応答して、トークン閾値超過ステータスフラグ９３４のｋ番目のキューに対応する閾値超過フラグをオン状態（例えば、Ｈレベル）に設定する。
【０１８３】
ステップＳ１０２８からＳ１０３２までの処理は、図６に示したステップＳ６２８からＳ６３２までの処理と同様である。よって、処理内容についての詳細な説明は省略する。
【０１８４】
以上説明したステップＳ１００２〜Ｓ１０３２までの一連の処理によって、パケットバッファ制御部９１０は、トークン加算トリガの生成に応答して、各々のキューに対して蓄積されたトークン量（蓄積トークン値）に応じて、各キューごとに、トークンステータス信号及び送信可能ステータスフラグの状態を適切に設定することができる。
【０１８５】
さらに、パケットバッファ制御部９１０は、各々のキューに対して蓄積されたトークン量（蓄積トークン値）をトークン閾値超過ステータスフラグ９３４の閾値超過フラグの状態によって監視することにより、そのキューの送信可能状態の継続時間が一定の閾値を超えたことを適切に判定することができる。
【０１８６】
［２−２−２．パケットの受信に応答して実行される処理］
図１１は、パケットバッファ制御部９１０において、パケットの受信に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
【０１８７】
ステップＳ１１０２からＳ１１１４までの処理は、図７に示したステップＳ７０２からＳ７１４までの処理と同様である。よって、処理内容についての詳細な説明は省略する。
【０１８８】
ステップＳ１１０２からＳ１１１４までの一連の処理によって、パケットバッファ制御部９１０は、パケットの受信に応答して、各キューごとに、キューステータス信号及び送信可能ステータスフラグの状態を適切に設定することができる。
【０１８９】
［２−２−３．パケット送信トリガに応答して実行される処理］
図１２は、パケット送信トリガに応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
【０１９０】
ステップＳ１２０２において、キュー選択部９０４のキュー選択制御部９２８は、パケット送信トリガを受信する。尚、パケット送信トリガについては、図５においてキュー選択制御部５２８に関連して説明したとおりである。
【０１９１】
ステップＳ１２０４において、キュー選択制御部９２８は、送信可能ステータスフラグ５２４及びトークン閾値超過ステータスフラグ９３４の状態をチェックする。キュー選択制御部９２８は、複数のキューの中で、送信可能ステータスフラグ５２４の対応する送信可能フラグがオン状態であり、かつ、トークン閾値超過ステータスフラグ９３４の対応する閾値超過フラグがオン状態であるキュー（優先キュー）が存在するか否かを判定する。判定の結果、優先キューが存在する場合、処理はステップＳ１２０６に進む。優先キューが存在しない場合、処理はステップＳ１２０８に進む。
【０１９２】
ステップＳ１２０６において、キュー選択制御部９２８は、複数のキューの中で、上述の優先キューが複数個存在する場合は、複数の優先キューの中からラウンドロビンにより、１つのキューを送信対象として選択する。キュー選択制御部９２８は、上述の優先キューが１つしか存在しない場合は、その１つの優先キューを送信対象として選択する。キュー選択制御部９２８は、選択したキューの識別情報（選択キュー識別情報）をキュー管理部４０４に通知する。ステップＳ１２０６の後、処理はステップＳ１２１２に進む。
【０１９３】
ステップＳ１２０８において、キュー選択制御部９２８は、複数のキューの中で、送信可能ステータスフラグ５３０の対応する送信可能フラグがオン状態であるキューが存在するか否かを判定する。判定の結果、送信可能フラグがオン状態のキューが存在する場合、処理はステップＳ１２１０に進む。送信可能フラグがオン状態のキューが存在しない場合、処理はステップＳ１２２８に進む。
【０１９４】
ステップＳ１２１０において、キュー選択制御部９２８は、対応する送信可能フラグがオン状態のキューが複数個存在する場合は、複数のキューの中からラウンドロビンにより、１つのキューを送信対象として選択する。キュー選択制御部９２８は、対応する送信可能フラグがオン状態のキューが１つしか存在しない場合は、その１つのキューを送信対象として選択する。キュー選択制御部５２８は、選択したキューの識別情報（選択キュー識別情報）をキュー管理部４０４に通知する。ステップＳ１２０６の後、処理はステップＳ１２１２に進む。
【０１９５】
ステップＳ１２１２からＳ１２１８までの処理は、ステップＳ１２１４においてトークン加算回数のリセットが行われない点を除いて、図８に示したステップＳ８１２からＳ８１８までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップＳ１２１６及びＳ１２１８の後、処理はステップＳ１２２０に進む。
【０１９６】
ステップＳ１２２０において、帯域制御部９０２のトークン制御部９１２は、トークン閾値テーブル９２０を参照することにより、選択したキューに対応する蓄積トークン閾値を取得する。トークン制御部９１２はさらに、ステップＳ１２１４における更新後の、選択したキューに対応するトークンカウンタ５１８のカウント値を参照することにより、ステップＳ１２１２におけるパケットデータの出力後の、選択したキューに対応する蓄積トークン値を取得する。これにより、トークン制御部９１２は、選択したキューに対応する蓄積トークン値の更新値が蓄積トークン閾値以上の値であるか否かを判定する。判定の結果、蓄積トークン値の更新値が蓄積トークン閾値より小さい値である場合、処理はステップＳ１２２２に進む。蓄積トークン値の更新値が閾値以上の値である場合、処理はステップＳ１２２８に進む。
【０１９７】
ステップＳ１２２２において、トークン制御部９１２は、選択したキューに十分な量のトークンが残っていないと判定し、選択したキューに対応するトークン閾値超過ステータス信号をオフ状態（例えば、Ｌレベル）に設定する。キュー選択部９０６のステータス監視部９２２は、トークン閾値超過ステータス信号がオフ状態に変化したことに応答して、トークン閾値超過ステータスフラグ９３４の選択したキューに対応する閾値超過フラグをオフ状態に設定する。ステップＳ１２２２の後、処理はステップＳ１２２４に進む。
【０１９８】
ステップＳ１２２４からＳ１２２８までの処理は、図８に示したステップＳ８２０からＳ８２４までの処理と同様である。よって、処理内容についての詳細な説明は省略する。
【０１９９】
以上説明したステップＳ１２０２〜Ｓ１２２８までの一連の処理によって、パケットバッファ制御部９１０は、パケット送信トリガの受信に応答して送信対象のキューを選択する際に、各々のキューのトークン閾値値超過ステータスフラグの状態に応じて優先制御を行うか否かを判定することができるので、各々のキューに対して、その送信可能状態の継続時間に応じた優先制御を適切に行うことができる。
【０２００】
これにより、送信可能状態にあるにもかかわらず、対応する出力ポート（物理回線）の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、送信可能状態の継続時間が長いキューから優先的に送信対象とすることができる。よって、各々のキューについて蓄積されるトークン量（蓄積トークン値）が増加し、これに伴って、パケット送信時においてバースト転送されるデータ量が増加するのを防止することができ、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することができる。
【０２０１】
さらに、パケットバッファ制御部９１０は、選択したキューからパケットデータを出力した後においても、各キューごとに、トークン閾値超過フラグ及び送信可能ステータスフラグの状態を適切に設定することができる。
【０２０２】
［２−２−４．パケットバッファ制御部の変形例］
第１実施例の場合と同様に、図１０〜図１２に示した各々のパケット伝送制御処理は、図４及び図９に示したハードウェアによって実現する代わりに、図１０〜図１２に示した各々の処理をプログラムに実行させることにより、ソフトウェアによって実現することも可能である。
【０２０３】
この場合、パケットバッファ制御部９１０は例えば、図１０〜図１２に示した各々のステップを処理内容とするプログラム（パケットバッファ制御プログラム）を格納するプログラムメモリ、そのプログラムを実行可能なプロセッサ、及びそのプロセッサによる演算処理のワークエリアを提供するワークメモリを含むものとすることができる。
【０２０４】
パケットバッファ制御部９１０のプロセッサは、ワークメモリを用いて、プログラムメモリに格納されたパケットバッファ制御プログラムを実行することにより、図４及び図９に示したパケットバッファ制御部９１０内部の各々の部分が連携して実行する処理と同等の処理を実行することができる。
【０２０５】
［３．第３実施例］
以下、第３実施例に係るパケット伝送装置及びパケット伝送方法について説明する。
【０２０６】
［３−１．バッファ読み出し制御部１３０６の内部構成］
第３実施例に係るパケット伝送装置１３００の構成は、図３〜図５及び図９に示したパケット伝送装置３００及び９００の構成と、パケットバッファ制御部に含まれるバッファ読み出し制御部の内部構成の点で異なるが、それ以外の部分は同様である。よって、第３実施例に係るパケット伝送装置１３００の全体構成については、図示及び説明を省略し、第３実施例に係るパケットバッファ制御部１３１０におけるバッファ読み出し制御部１３０６の内部構成について説明する。
【０２０７】
図１３は、第３実施例に係るバッファ読み出し制御部１３０６の内部構成の一例を示す図である。バッファ読み出し制御部１３０６の構成は、図５及び図９に示したバッファ読み出し制御部４０６及び９０６の構成と、帯域制御部及びキュー選択部の内部構成の点で異なっているが、それ以外の部分については同様である。
【０２０８】
図１３に示した帯域制御部１３０２は、図５及び図９に示した帯域制御部５０２及び９０２と、トークン閾値テーブル１３２０が追加され、トークン制御部５１２及び９１２の代わりにトークン制御部１３１２が設けられている点、及び、トークン制御部１３１２がトリガ信号とトークン閾値超過ステータス信号の２つを生成する点で異なっているが、その以外の部分については同様である。
【０２０９】
図１３に示したキュー選択部１３０４は、図５及び図９に示したキュー選択部５０４及び９０４と、トリガカウンタ５２６の代わりにトリガカウンタ１３２６が設けられ、トリガカウンタ１３２６と同時にトークン閾値超過ステータスフラグ９３４も設けられている点、及びステータス監視部５２２及び９２２の代わりにステータス監視部１３２２が設けられている点で異なっているが、その以外の部分については同様である。
【０２１０】
尚、図１３において、図５に示したバッファ読み出し制御部４０６と同一又は対応する部分は、同一の符号で示されており、図９に示したバッファ読み出し制御部９０６と同一又は対応する部分は、同一の符号で示されている。図１３において同一の符号で示された部分の動作や機能は、図５及び図９において説明したとおりであるので、詳細な説明は省略する。
【０２１１】
［３−１−１．帯域制御］
まず、帯域制御部１３０２において行われる帯域制御（トークン制御）について説明する。
【０２１２】
帯域制御部１３０２において、トークン制御部１３１２は、図５に示したトークン制御部５１２と同様に、トークンテーブル５１４に記憶されている加算トークン値及び最大値テーブル５１６に記憶されている最大トークン値を参照することにより、トークンカウンタ５１８−１〜ｎのカウント動作を制御する。
【０２１３】
トークン閾値テーブル１３２０は、複数のキューに対応する複数の蓄積トークン発生閾値及び複数の蓄積トークン解除閾値を記憶している。
【０２１４】
複数の蓄積トークン発生閾値はそれぞれ、対応するトークンカウンタ５１８において十分な量のトークンが蓄積されているか否かを判定するための第1の基準値であり、各キューごとに予め設定された値である。複数の蓄積トークン発生閾値は、上述した、トークンステータス信号の状態を決定するための閾値よりも大きい値である。
【０２１５】
複数の蓄積トークン解除閾値はそれぞれ、対応するトークンカウンタ５１８において十分な量のトークンが蓄積されているか否かを判定するための第２の基準値であり、各キューごとに予め設定された値である。また、複数の蓄積トークン解除閾値はそれぞれ、対応するトークンカウンタ５１８において、後述するトークン加算処理を実行するか否かを判定するための基準値である。複数の蓄積トークン解除閾値は、上述した、トークンステータス信号の状態を決定するための閾値よりも大きい値である。また、複数の蓄積トークン解除閾値はそれぞれ、同一のキューに対応する蓄積トークン発生閾値よりも小さい値であることが好ましく、同一のキューに対応する蓄積トークン発生閾値と蓄積トークン解除閾値の間の差分値が、パケットデータ読み出し部５０８から出力されるパケットデータのパケット長に相当するトークン値よりも大きくなるようにすることが好ましい。但し、蓄積トークン解除閾値は蓄積トークン発生と同一の値としてもよい。
【０２１６】
トークン制御部１３１２は、トークン閾値テーブル１３２０に記憶されている蓄積トークン発生閾値及び蓄積トークン解除閾値を参照することにより、複数のキューに対応する複数のトークン閾値超過ステータス信号を生成し、ステータス監視部１３２２に供給する。
【０２１７】
トークン制御部１３１２は、トークンカウンタ５１８−１〜ｎのカウント値（蓄積トークン値）がそれぞれ、対応する蓄積トークン発生閾値以上の値である否かを判定する。トークン制御部９１２は、トークンカウンタ５１８のカウント値（蓄積トークン値）が蓄積トークン発生閾値以上の値であると判定した場合、対応するキューのトークン閾値超過ステータス信号をオン状態（例えば、Ｈレベル）にする。一方、トークン制御部１３１２は、トークンカウンタ５１８−１〜ｎのカウント値（蓄積トークン値）がそれぞれ、対応する蓄積トークン解除閾値以上の値である否かを判定する。トークン制御部１３１２は、トークンカウンタ５１８のカウント値（蓄積トークン値）が蓄積トークン解除閾値より小さいと判定した場合には、対応するキューのトークン閾値超過ステータス信号をオフ状態（例えば、Ｌレベル）にする。このように、蓄積トークン発生閾値と蓄積トークン解除閾値を別々に設けることにより、トークン制御部１３１２は、トークン閾値超過ステータス信号のオン状態及びオフ状態の設定に対して、ヒステリシス特性を付与することができる。
【０２１８】
また、トークン制御部１３１２は、図５に示したトークン制御部５１２と同様に、複数のキューに対応する複数のトークンステータス信号及び複数のトリガ信号を生成し、ステータス監視部１３２２に供給する。複数のトークンステータス信号及び複数のトリガ信号については、図５において説明したとおりである。
【０２１９】
［３−１−２．送信可能状態の継続時間の計測］
次に、キュー選択部１３０２において行われる、対応するキューごとの送信可能状態の継続時間の計測について説明する。
【０２２０】
キュー選択部１３０４において、ステータス監視部１３２２は、トークン制御部１３１２から、複数のトークンステータス信号、複数のトリガ信号及び複数のトークン閾値超過ステータス信号を受けとるともに、キュー管理部４０４から複数のキューステータス信号を受けとる。ステータス監視部１３２２は、各々のキューごとに、対応するトークンステータス信号、キューステータス信号及びトークン閾値超過ステータス信号の状態を監視する。
【０２２１】
ステータス監視部１３２２は、図５に示したステータス監視部５２２と同様に、各キューごとに、対応するトークンステータス信号とキューステータス信号の状態に応じて、対応するキューが送信可能な状態にあるか否かを判定し、送信可能ステータスフラグ５２４の対応する送信可能フラグの状態を制御する。
【０２２２】
ステータス監視部１３２２は、図９に示したステータス監視部９２２と同様に、各キューごとに、対応するトークン閾値超過ステータス信号の状態に応じて、トークン閾値超過ステータスフラグ９３４の対応する閾値超過フラグの状態を制御する。
【０２２３】
ステータス監視部１３２２は、あるキューについて、送信可能ステータスフラグ５２４の対応する送信可能フラグとトークン閾値超過ステータスフラグ９３４の対応する閾値超過フラグがともにオン状態を示す場合、そのキューは送信可能状態が一定の時間以上継続しているキューであって、後述するトークン加算処理を行う候補となるキュー（トークン加算候補キュー）であると判定する。ステータス監視部１３２２は、そのキューがトークン加算候補キューであることを示す制御情報を、トークン加算制御情報の一部として、トークン制御部１３１２に通知する。
【０２２４】
トークン制御部１３１２は、ステータス監視部１３２２からトークン加算候補キューの制御情報を受けとる。トークン制御部１３１２は、受けとった制御情報に基づいて、トークン加算候補キューに対応するトークンカウンタ５１８においては、そのカウント動作を停止させる。すなわち、トークン加算候補キューに対応するトークンカウンタ５１８は、加算トークン値及びトークン加算トリガが供給され、トークンが加算されるタイミングになっても、そのカウント値を更新せず、本来加算されるはずのトークンを廃棄する。トークンカウンタ５１８のカウント値（蓄積トークン値）はすでに蓄積トークン発生閾値を超えているため、カウント動作を継続してトークンの加算を継続したとしても、カウント値が最大トークン値に達してしまい、本来加算することが可能なはずのトークンを加算することができないからである。
【０２２５】
尚、トークンカウンタ５１８のカウント動作を停止させた場合でも、後述するように、代わりにトリガカウンタ１３２６のカウント動作が開始されるため、加算されずに廃棄されることになるトークン量は、トリガカウンタ１３２６のカウント値（トークン廃棄回数）として保持される。
【０２２６】
更に、ステータス監視部１３２２は、トリガカウンタ１３２６−１〜ｎのカウント動作を制御する。トリガカウンタ１３２６（１３２６−１〜ｎ）は、複数のキューに対応して設けられた複数のカウンタである。トリガカウンタ１３２６−１〜ｎはそれぞれ、ステータス監視部１３２２の制御の下で、対応するキューが送信可能状態であり、かつ、対応する蓄積トークン値が蓄積トークン発生閾値を超えている期間内に、ステータス監視部１３２２に供給された、対応するトリガ信号のトリガの数をカウントする。
【０２２７】
トリガ信号は、トークンカウンタ５１８におけるトークン加算タイミングを示す信号であるが、上述のように、対応するキューが送信可能状態であり、かつ、対応する蓄積トークン値が蓄積トークン発生閾値を超えている期間は、対応するトークンカウンタ５１８はそのカウント値の更新を停止する。よって、トリガカウンタ１３２６−１〜ｎのカウント値は、送信可能状態にあるキューにおいて、対応する蓄積トークン値が蓄積トークン発生閾値を超えた後に、本来加算されるべきであったにもかかわらず、トークンが加算されずに廃棄された回数（トークン廃棄回数）に相当する値となる。
【０２２８】
また、トリガ信号の周期は一定（トークンカウンタ５１８−１〜ｎに供給されるトークン加算トリガ信号の周期と同一）であることから、トリガカウンタ１３２６−１〜ｎのカウント値は、対応する蓄積トークン値が蓄積トークン発生閾値を超えた後の、対応するキューの送信可能状態の継続時間を示す値となる。
【０２２９】
ここで、蓄積トークン値が蓄積トークン発生閾値を超えたということは、対応するキューにすでに十分な量のトークンが蓄積されていることを意味することから、送信可能状態にあるキューにおいて、対応する蓄積トークン値が蓄積トークン発生閾値を超えたということは、送信可能状態にあるキューにおいて、そのキューにおいて送信可能なパケットデータは存在するが、そのパケットデータの送信が行われず、トークンが使用されない状態がすでに一定時間継続していることを意味する。このため、カウント動作が行われるのは、対応する蓄積トークン値が蓄積トークン発生閾値を超えた後ではあるが、カウントを開始する時点で、対応するキューの送信可能状態はすでに一定の時間継続していることになる。
【０２３０】
従って、トリガカウンタ１３２６−１〜ｎのカウント値は、対応するキューの送信可能状態の継続時間を示す値となり、より具体的には、対応する蓄積トークン値が蓄積トークン発生閾値を超えた後の継続時間を示す値となる。よって、ステータス監視部１３２２は、上述のトリガカウンタ１３２６−１〜ｎのカウント動作によって、対応するキューごとに送信可能状態の継続時間を計測することができる。
【０２３１】
上述のトリガカウンタ１３２６−１〜ｎのカウント動作は、ステータス監視部１３２２によって、以下のように制御される。
【０２３２】
トリガカウンタ１３２６−１〜ｎは、各キューごとに、送信可能ステータスフラグ５２４の対応する送信可能フラグがオフ状態からオン状態に変化し、かつ、トークン閾値超過ステータスフラグ９３４の対応する閾値超過フラグがオフ状態からオン状態に変化したとき、対応するトリガ信号のトリガの数のカウント動作を開始する。その後、トリガカウンタ１３２６−１〜ｎはそれぞれ、対応する送信可能フラグと閾値超過フラグがともにオン状態を示している間、トリガ信号のトリガの数のカウントを継続する。トリガカウンタ１３２６−１〜ｎはそれぞれ、対応する送信可能フラグ及び閾値超過フラグの少なくとも一方がオン状態からオフ状態に変化したとき、そのカウント動作を停止する。
【０２３３】
［３−１−３．キュー選択における優先制御］
次に、キュー選択部１３０４において行われる、キュー選択における優先制御について説明する。
【０２３４】
キュー選択制御部１３２８は、パケット送信トリガに応答して、送信可能ステータスフラグ５２４内の複数の送信可能フラグの状態、及び、複数のトリガカウンタ１３２６のカウント値を参照することにより、各キューごとに送信可能状態の継続時間を監視し、複数のキューの中から、その継続時間が予め定められた閾値よりも長いキューを送信対象として優先的に選択する優先制御を行う。尚、パケット送信トリガについては、図５においてキュー選択制御部５２８に関連して説明したとおりである。
【０２３５】
キュー選択部１３０４では、優先制御は以下のようにして行われる。
【０２３６】
キュー選択制御部１３２８は、優先制御閾値格納部５３０を参照することにより、優先制御閾値を取得する。キュー選択制御部１３２８は、各キューごとに、対応する送信可能フラグの状態とトリガカウンタ１３２６のカウント値（トークン廃棄回数）を監視する。キュー選択制御部１３２８は、複数のキューの中から、対応する送信可能フラグがオン状態を示しており、かつ、トリガカウンタ１３２６のカウント値（トークン廃棄回数）が、取得した優先制御閾値より大きいキューを送信対象として優先的に選択する。キュー選択制御部１３２８は、優先制御により選択したキューの識別情報（選択キュー識別情報）を生成し、キュー管理部４０４に供給する。
【０２３７】
尚、上述の優先制御により送信対象として２つ以上のキューが選択された場合、キュー選択制御部１３２８は、上述のラウンドロビン（ＲＲ）により、選択された２つ以上の優先キューの中から送信対象のキューを１つずつ順次選択していき、対応する選択キュー識別情報を順次生成していく。
【０２３８】
また、上述の優先制御により送信対象として１つもキューが選択されなかった場合、キュー選択制御部１３２８は、上述のラウンドロビン（ＲＲ）により、存在する全てのキューの中から送信対象のキューを１つずつ順次選択していき、対応する選択キュー識別情報を順次生成していく。
【０２３９】
また、キュー選択制御部１３２８は、同一の出力ポート（物理回線）をデータ出力対象とする複数のキューについて、その出力ポート（物理回線）の送信帯域が全て使用されている場合等、送信帯域不足にある場合には、上述の優先制御においては、送信対象として選択することが可能なキューが存在しても、そのキューの選択を行わず、送信帯域に空きが生じるまで選択を遅延させる。
【０２４０】
パケットデータ読み出し部５０８は、図５に示したバッファ読み出し制御部４０６の場合と同様に、キュー管理部４０４から供給された選択キュー読み出しアドレスに基づいて、パケットバッファ３１２からパケットデータを読み出し、出力インターフェース３１４に供給する。
【０２４１】
以上説明したように、第３実施例に係るバッファ読み出し制御部１３０６においては、キュー選択部１３０４によって、各々のキューごとに、送信可能状態の継続時間を監視し、複数のキューの中から、その継続時間が予め定められた閾値よりも長いキューを送信対象として優先的に選択する優先制御を行うようにしたので、送信可能状態にあるにもかかわらず、対応する出力ポート（物理回線）の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、送信可能状態の継続時間が長いキューから優先的に送信対象とすることができる。
【０２４２】
これにより、各々のキューについて蓄積されるトークン量（蓄積トークン値）が増加し、これに伴って、パケット送信時においてバースト転送されるデータ量が増加するのを防止することができ、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することができる。
【０２４３】
［３−１−４．トークン加算処理］
次に、帯域制御部１３０２において行われるトークン加算制御について説明する。
【０２４４】
帯域制御部１３０２において、トークン制御部１３１２は、図５に示したトークン制御部５１２と同様に、キュー管理部４０４から供給される選択キューパケット長情報に基づいて、パケットバッファ３１２から読み出されたパケットデータのパケット長に相当するトークン値を算出し、算出されたトークン値に基づいて、選択したキューに対応するトークンカウンタ５１８のカウント値（蓄積トークン値）を更新する。
【０２４５】
トークン制御部１３１２は、トークン閾値テーブル１３２０を参照することにより、パケットデータの送信が行われたキューに対応する蓄積トークン解除閾値を取得する。これにより、トークン制御部１３１２は、トークンカウンタ５１８のカウント値（蓄積トークン値）の更新値が、対応する蓄積トークン解除閾値以上の値である否かを判定する。
【０２４６】
トークン制御部１３１２は、トークンカウンタ５１８のカウント値（蓄積トークン値）の更新値が蓄積トークン解除閾値以上の値であると判定した場合、そのキューをトークン加算処理の対象とするキュー（トークン加算対象キュー）に決定し、そのキューに対するトークン加算処理の開始を決定する。トークン加算処理は、パケットデータの送信が行われたキューにおいて、本来加算されるべきであったにもかかわらず、加算されずに廃棄されたトークンの一部又は全部を後発的に加算する処理である。帯域制御部１３０２は、トークン加算処理後のトークンカウンタ５１８のカウント値（蓄積トークン値）に基づいて、各キューごとの帯域制御（トークン制御）を継続して行う。
【０２４７】
トークン制御部１３１２は、トークンカウンタ５１８のカウント値（蓄積トークン値）が蓄積トークン解除閾値より小さいと判定した場合、トークン加算処理は行わない。帯域制御部５０２は、現在のトークンカウンタ５１８の更新値（蓄積トークン値の更新値）に基づいて、各キューごとの帯域制御（トークン制御）を継続して行う。
【０２４８】
トークン加算処理は、トークン制御部１３１２がステータス監視部１３２２と、種々の制御情報を含むトークン加算制御情報のやり取りをすることによって、以下のように制御される。
【０２４９】
トークン制御部１３１２は、トークン加算対象キューの識別情報、及び、トークン加算処理を開始することを示す制御情報を、トークン加算制御情報の一部として、ステータス監視部１３２２に通知する。
【０２５０】
ステータス監視部１３２２は、トークン制御部１３１２より、トークン加算対象キューの識別情報、及び、トークン加算処理の開始を示す制御情報を受けとったとき、トークン加算対象キューに対応するトリガカウンタ１３２６のカウント値（トークン廃棄回数）を参照する。トリガカウンタ１３２６のカウント値は、上述したように、送信可能状態にあるキューにおいて、対応する蓄積トークン値が蓄積トークン発生閾値を超えた後に、本来加算されるべきであったにもかかわらず、トークンが加算されずに廃棄された回数に相当する値である。
【０２５１】
ステータス監視部１３２２は、トークン加算対象キューに対応するトリガカウンタ１３２６のカウント値（トークン廃棄回数）が１以上の値であるか否かを判定する。ステータス監視部１３２２は、そのカウント値（トークン廃棄回数）が１以上の値である場合、トークン加算対象キューにおいて廃棄されたトークンの中に加算されていないトークンが存在すると判定し、トークン加算処理の実行を許可することを示す制御情報を、トークン加算制御情報の一部として、トークン制御部１３１２に通知する。一方、ステータス監視部１３２２は、そのカウント値（トークン廃棄回数）が０である場合、廃棄されたトークンの中に加算されていないトークンが残っていないと判定し、トークン加算処理を終了することを示す制御信号を、トークン加算制御情報の一部として、トークン制御部１３１２に通知する。
【０２５２】
トークン制御部１３１２は、ステータス監視部１３２２よりトークン加算処理の実行を許可することを示す制御情報を受けとったとき、トークンテーブル５１４を参照することにより、トークン加算対象キューに対応する加算トークン値を取得する。トークン制御部１３１２は、トークン加算対象キューに対応するトークンカウンタ５１８に、取得した加算トークン値を供給する。トークン加算対象キューに対応するトークンカウンタ５１８は、現在のカウント値に加算トークン値を加算することにより、カウント値（蓄積トークン値）を更新する処理（トークン加算処理）を実行する。このトークン加算処理により、トークン加算対象キューにおいては、廃棄１回分に相当するトークン値が後発的に加算されたことになる。トークン制御部１３１２は、トークン加算処理後、トークン加算処理を実行したことを示す制御情報を、トークン加算制御情報の一部として、ステータス監視部１３２２に通知する。
【０２５３】
ステータス監視部１３２２は、トークン制御部１３１２よりトークン加算処理を実行したことを示す制御情報を受けとったとき、トークン加算対象キューに対応するトリガカウンタ１３２６のカウント値を１だけ減算することにより、トリガカウンタ１３２６のカウント値（トークン廃棄回数）を更新する。すなわち、ステータス監視部１３２２は、トークン加算処理によって廃棄１回分に相当するトークンが後発的に加算されたことに対応して、トークン加算対象キューにおいてトークン廃棄回数を１回分だけ減少させる。
【０２５４】
トークン制御部１３１２は、トークン加算処理を実行したことを示す制御情報を通知したとき、さらに、トークン閾値テーブル１３２０を参照することにより、トークン加算対象キューに対応する蓄積トークン発生閾値を取得する。トークン制御部１３１２は、トークンカウンタ５１８のカウント値（蓄積トークン値）の更新値が、取得した蓄積トークン発生閾値以上の値である否かを判定する。
【０２５５】
トークン制御部１３１２は、トークンカウンタ５１８のカウント値（蓄積トークン値）の更新値が蓄積トークン発生閾値より小さい場合、トークン加算対象キューには十分な量のトークンが蓄積されておらず、更にトークン値を加算することが可能であると判定し、トークン加算処理を継続することを示す制御情報を、トークン加算制御情報の一部として、ステータス監視部１３１２に通知する。一方、トークン制御部１３１２は、そのカウント値（蓄積トークン値）の更新値が蓄積トークン発生閾値以上の値である場合、トークン加算対象キューに十分な量のトークンが蓄積されたと判定し、トークン加算処理を終了することを示す制御情報を、トークン加算制御情報の一部として、ステータス監視部１３２２に通知する。
【０２５６】
ステータス監視部１３２２は、トークン制御部１３１２よりトークン加算処理を継続することを示す制御情報を受けとったとき、トークン加算対象キューに対応するトリガカウンタ１３２６のカウント値（トークン廃棄回数）の更新値が１以上の値であるか否かを判定する。ステータス監視部１３２２は、そのカウント値（トークン廃棄回数）の更新値が１以上の値である場合、トークン加算対象キューにおいて廃棄されたトークンの中に加算されていないトークンが残っていると判定し、トークン加算処理の実行を許可することを示す制御情報を、トークン加算制御情報の一部として、再度トークン制御部１３１２に通知する。一方、ステータス監視部１３２２は、そのカウント値（トークン廃棄回数）が０である場合、廃棄されたトークンの中に加算されていないトークンが残っていないと判定し、トークン加算処理を終了することを示す制御信号を、トークン加算制御情報の一部として、トークン制御部１３１２に通知する。
【０２５７】
トークン制御部１３１２は、トークン加算処理の実行を許可することを示す制御情報を受けとったとき、上述のトークン加算処理を再度実行する。
【０２５８】
一方、トークン制御部１３１２は、ステータス監視部１３２２よりトークン加算処理を終了することを示す制御情報を受けとったとき、トークン加算処理を実行しない。
【０２５９】
また、ステータス監視部１３２２は、トークン制御部１３１２よりトークン加算処理を終了することを示す制御情報を受けとったとき、トークン加算対象キューに対応するトリガカウンタ１３２６のカウント値（トークン廃棄回数）をクリアする（０（零）にする）。
【０２６０】
尚、上述のトークン加算処理の例では、廃棄１回分に相当するトークン値を加算した後、更新後のトークン廃棄回数が１以上であるか否かを再度判定するようにし、トークン廃棄回数分に相当するトークン値を複数回に分けて加算するようにしたが、この例には限定されない。
【０２６１】
例えば、ステータス監視部１３２２は、トークン加算対象キューに対応するトリガカウンタ１３２６のカウント値（トークン廃棄回数）が１以上の値である場合、トークン廃棄回数に相当するトークン値（加算トークン値にトークン廃棄回数を乗じた値）を一度に、トークンカウンタ５１８のカウント値に加算することにより、カウント値（蓄積トークン値）を更新するようにしてもよい。
【０２６２】
以上説明したように、第３実施例に係るバッファ読み出し制御部１３０６においては、キュー選択部１３０４によって、各々のキューごとに、蓄積可能な最大トークン量の制限により、本来加算されるべきであったにもかかわらず、加算されずに廃棄されるに至ったトークンの量を保持しておき、帯域制御部１３０２によって、パケットデータの送信が行われたキューにおいて、その廃棄されたトークンの一部又は全部を後発的に加算し蓄積するようにしたので、蓄積されたトークン量が許容される最大値を超えてしまうことにより廃棄される結果、無駄になるトークン量を少なくすることができる。
【０２６３】
これにより、送信可能状態にあるにもかかわらず、対応する出力ポート（物理回線）の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、各キューごとに蓄積されるトークン量を実質的に増加させることができるので、パケットデータのデータ転送レートが低下するのを防止することができる。
【０２６４】
［３−１−５．アラーム通知処理］
次に、キュー選択部１３０４において行われるアラーム通知処理について説明する。
【０２６５】
ステータス監視部１３２２は、図５に示したステータス監視部５２２と同様に、アラーム通知処理を実行する。ステータス監視部１３２２は、アラーム通知閾値格納部５３２を参照することにより、アラーム通知閾値を取得する。アラーム通知閾値は、アラーム通知閾値格納部５３２に記憶されており、トリガカウンタ１３２６のカウント値に対する閾値であり、送信可能状態の継続時間の閾値に相当するものである。
【０２６６】
ステータス監視部１３２２は、複数のトリガカウンタ１３２６のカウント値を監視し、複数のトリガカウンタ１３２６のいずれかのカウント値がアラーム通知閾値よりも大きいと判定したとき、アラーム通知信号を出力する。アラーム通知信号は、トリガカウンタ１３２６のカウント値がアラーム通知閾値を超えたキューの識別情報や、そのイベントの発生時刻等の情報を含むようにすることができる。
【０２６７】
アラーム通知信号は、図３に示した各部を含む、パケット伝送装置１３００内の各種の回路又は装置などを全体的に制御する制御装置（図示せず）に出力される。制御装置はアラーム通知信号を受けとり、例えば、アラーム通知信号の受信状況をログとして保存しておく。
【０２６８】
以上説明したように、第３実施例に係るバッファ読み出し制御部１３０６においては、第１実施例に係るバッファ読み出し制御部４０６と同様に、ステータス監視部１３２２によってアラーム通知信号を出力するようにしたので、例えば、ネットワーク管理者は、上記のログを参照することにより、パケット伝送装置３００において行われた帯域制御（トークン制御）の状況を適切に把握することができ、どのキューにおいて送信可能状態の継続時間が閾値を超えやすい傾向にあるか等の統計情報を取得することができる。
【０２６９】
これにより、ネットワーク管理者は、各キューごとの送信帯域や、各キューごとに周期的に加算されるトークン量及び蓄積されるトークン量の最大値といった各種の送信パラメータを適切に設定することができ、ネットワーク設計を適切に行うことができる。
【０２７０】
［３−２．パケットバッファ制御部１３１０におけるパケット伝送制御］
次に、パケット伝送装置１３００のパケットバッファ制御部１３１０が実行するパケット伝送制御処理について説明する。
【０２７１】
［３−２−１．トークン加算トリガの生成に応答して実行される処理］
図１４は、パケットバッファ制御部１３１０において、トークン加算トリガの生成に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
【０２７２】
ステップＳ１４０２からＳ１４０６までの処理は、図６に示したステップＳ６０２からＳ６０６までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップＳ１４０６の後、処理はステップＳ１４０８に進む。
【０２７３】
ステップＳ１４０８において、ステータス監視部１３２２は、送信可能ステータスフラグ５２４及びトークン閾値超過ステータスフラグ９３４の状態をチェックする。ステータス監視部１３２２は、送信可能ステータスフラグ５２４のｋ番目のキューに対応する送信可能フラグがオン状態であり、かつ、トークン閾値超過ステータスフラグ９３４のｋ番目のキューに対応する閾値超過フラグがオン状態であるが存在するか否かを判定する。判定の結果、ｋ番目のキューに対応する送信可能フラグ及び閾値超過フラグがともにオン状態である場合、処理はステップＳ１４１０に進む。ｋ番目のキューに対応する送信可能フラグ及び閾値超過フラグの少なくとも一方がオフ状態である場合、処理はステップＳ１４１２に進む。
【０２７４】
ステップＳ１４１０において、ステータス監視部１３２２は、ｋ番目のキューは送信可能状態が一定の時間以上継続しているキューであって、トークン加算処理を行う候補となるキュー（トークン加算候補キュー）であると判定し、ｋ番目のキューに対応するトリガカウンタ１３２６において、トークン制御部１３１２から供給されるトリガ信号のトリガの数をカウントする。トリガカウンタ１３２６は、トリガ信号において、ステップＳ１４０２において生成したトークン加算トリガに対応するトリガを検出し、そのカウント値（トークン廃棄回数）を１だけ増加させる。これにより、ステータス監視部１３２２は、ｋ番目のキューにおけるトークン廃棄回数の値を１だけ増加させ、トークン廃棄回数の値を更新する。
【０２７５】
一方、このとき、ｋ番目のキューに対応するトークンカウンタ５１８はカウント動作を停止し、トークン制御部１３１２から加算トークン値及びトークン加算トリガが供給され、トークンの加算タイミングとなっても、そのカウント値（蓄積トークン値）を更新しない。
【０２７６】
ステップＳ１４１２からＳ１４０６までの処理は、図６に示したステップＳ６０８からＳ６１２までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップＳ１４１４及びＳ１４１６の後、処理はステップＳ１４１８に進む。
【０２７７】
ステップＳ１４１８からＳ１４２４までの処理は、図６に示したステップＳ６２０からＳ６２６までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップＳ１４１８において蓄積トークン値が負の値である場合、及び、ステップＳ１４２２においてキューステータス信号がオン状態でない場合、処理はステップＳ１４２６に進む。また、ステップＳ１４２４の後、処理はステップＳ１４２６に進む。
【０２７８】
ステップＳ１４２６からＳ１４３０までの処理は、蓄積トークン閾値の代わりに蓄積トークン発生閾値を用いる点を除いて、図１０に示したステップＳ１０２４からＳ１０２６までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップＳ１４２８において蓄積トークン値が蓄積トークン発生閾値よりも小さい場合、処理はステップＳ１４３２に進む。また、ステップＳ１４３０の後、処理はステップＳ１４３２に進む。
【０２７９】
ステップＳ１４３２からＳ１４３６までの処理は、図６に示したステップＳ６２８からＳ６３２までの処理と同様である。よって、処理内容についての詳細な説明は省略する。
【０２８０】
以上説明したステップＳ１４０２〜Ｓ１４３６までの一連の処理によって、パケットバッファ制御部１３１０は、トークン加算トリガの生成に応答して、各々のキューに対して蓄積されたトークン量（蓄積トークン値）に応じて、各キューごとに、トークンステータス信号及び送信可能ステータスフラグの状態を適切に設定することができる。
【０２８１】
さらに、パケットバッファ制御部１３１０は、各々のキューに対して蓄積されたトークン量（蓄積トークン値）をトークン閾値超過ステータスフラグ９３４の閾値超過フラグの状態によって監視するとともに、送信可能ステータスフラグ５２４の送信可能フラグとトークン閾値超過ステータスフラグ９３４の閾値超過フラグがともにオン状態である場合に、対応するキューにおけるトークン廃棄回数を適切にカウントすることにより、そのキューの送信可能状態の継続時間を適切に計測することができる。
【０２８２】
［３−２−２．パケットの受信に応答して実行される処理］
図１５は、パケットバッファ制御部１３１０において、パケットの受信に応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
【０２８３】
ステップＳ１５０２からＳ１５１４までの処理は、図７に示したステップＳ７０２からＳ７１４までの処理と同様である。よって、処理内容についての詳細な説明は省略する。
【０２８４】
ステップＳ１５０５からＳ１５１４までの一連の処理によって、パケットバッファ制御部１３１０は、パケットの受信に応答して、各キューごとに、キューステータス信号及び送信可能ステータスフラグの状態を適切に設定することができる。
【０２８５】
［３−２−３．パケット送信トリガに応答して実行される処理］
図１６及び図１７は、パケットバッファ制御部１３１０において、パケット送信トリガに応答して実行されるパケット伝送制御処理の内容を示すフローチャートである。
【０２８６】
ステップＳ１６０２からＳ１６１２までの処理は、トークン加算回数の代わりにトークン廃棄回数が用いられる点を除いて、図６に示したステップＳ８０２からＳ８１２までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップＳ１６０８において、送信可能ステータスフラグ５２４の送信可能フラグがオン状態のキューが存在しない場合、処理はステップＳ１７１８に進む。ステップＳ１６１２の後、処理はステップＳ１６１４に進む。
【０２８７】
ステップＳ１６１４からＳ１６１８までの処理は、ステップＳ１６１４においてトークン加算回数のリセットが行われない点を除いて、図８に示したステップＳ８１２からＳ８１８までの処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップＳ１６１６及びＳ１６１８の後、処理はステップＳ１６２０に進む。
【０２８８】
ステップＳ１６２０及びＳ１６２２の処理は、蓄積トークン閾値の代わりに蓄積トークン解除閾値を用いる点を除いて、図１２に示したステップＳ１２２０及びステップＳ１２２２の処理と同様である。よって、処理内容についての詳細な説明は省略する。尚、ステップＳ１６２０及びＳ１６２２の後、処理はステップＳ１７０２に進む。
【０２８９】
ステップＳ１７０２において、帯域制御部１３０２のトークン制御部１３１２は、トークン閾値テーブル１３２０を参照することにより、選択したキューに対応する蓄積トークン解除閾値を取得する。これにより、トークン制御部１３１２は、ステップＳ１６１４において更新した後の、選択したキューに対応する蓄積トークン値（更新値）が、取得した蓄積トークン解除閾値以上の値であるか否かを判定する。選択したキューに対応する蓄積トークン値が蓄積トークン解除閾値以上の値である場合、処理はステップＳ１７０４に進む。判定の結果、選択した蓄積トークン値が解除閾値より小さい値である場合、処理はステップＳ１７１２に進む。
【０２９０】
ステップＳ１７０４において、ステータス監視部１３２２は、選択したキューに対応するトリガカウンタ１３２６のカウント値（トークン廃棄回数）を参照することにより、選択したキューに対応するトークン廃棄回数を取得する。これにより、ステータス監視部１３２２は、選択したキューに対応するトークン廃棄回数の値が０（零）であるか否かを判定する。選択したキューに対応するトークン廃棄回数の値が０（零）でない場合、すなわち１以上である場合、処理はステップＳ１７０６に進む。判定の結果、選択したキューに対応するトークン廃棄回数の値が０（零）である場合、処理はステップＳ１７１２に進む。
【０２９１】
ステップＳ１７０６において、トークン制御部１３１２は、トークンテーブル５１４を参照することにより、選択したキューに対応する加算トークン値を取得する。トークン制御部１３１２は、選択したキューに対応するトークンカウンタ５１８によって、取得した加算トークン値と、ステップＳ１６１４において更新した後の、選択キューに対応する蓄積トークン値を加算することにより、トークン加算処理を行う。また、ステータス監視部１３２２は、ステップＳ１７０４において取得したトークン廃棄回数の値から１を減算することにより、トークン廃棄回数の値を更新する。
【０２９２】
ステップＳ１７０８において、トークン制御部１３１２は、トークン閾値テーブル１３２０を参照することにより、選択したキューに対応する蓄積トークン発生閾値を取得する。これにより、トークン制御部１３１２は、ステップＳ１７０６においてトークン加算処理を行った後の、選択したキューに対応する蓄積トークン値（更新値）が、取得した蓄積トークン発生閾値以上の値であるか否かを判定する。判定の結果、蓄積トークン値（更新値）が蓄積トークン発生閾値以上である場合、処理はステップＳ１７１０に進む。蓄積トークン値（更新値）が蓄積トークン発生閾値より小さい場合、処理はステップＳ１７０４に戻る。
【０２９３】
ステップＳ１７１０において、トークン制御部１３１２は、選択したキューに十分な量のトークンが蓄積されていると判定し、選択したキューに対応するトークン閾値超過ステータス信号をオン状態（例えば、Ｈレベル）に設定する。ステータス監視部１３２２は、トークン閾値超過ステータス信号がオン状態に変化したことに応答して、トークン閾値超過ステータスフラグ９３４の選択したキューに対応する閾値超過フラグをオン状態に設定する。
【０２９４】
ステップＳ１７１２において、ステータス監視部１３２２は、トークン加算処理は終了したと判断し、選択したキューに対応するトリガカウンタ１３２６のカウント値（トークン廃棄回数）をクリアする（０（零）にする）ことにより、トークン廃棄回数をリセットする。
【０２９５】
ステップＳ１７１４からＳ１７１８までの処理は、図８に示したステップＳ８２０からＳ８２４の処理と同様である。よって、処理内容についての詳細な説明は省略する。
【０２９６】
以上説明したステップＳ１６０２〜Ｓ１６２２及びＳ１７０２〜Ｓ１７１８までの一連の処理によって、パケットバッファ制御部１３１０は、パケット送信トリガの受信に応答して送信対象のキューを選択する際に、各々のキューのトークン廃棄回数に応じて優先制御を行うか否かを判定することができるので、各々のキューに対して、その送信可能状態の継続時間に応じた優先制御を適切に行うことができる。
【０２９７】
これにより、送信可能状態にあるにもかかわらず、対応する出力ポート（物理回線）の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、送信可能状態の継続時間が長いキューから優先的に送信対象とすることができる。よって、各々のキューについて蓄積されるトークン量（蓄積トークン値）が増加し、これに伴って、パケット送信時においてバースト転送されるデータ量が増加するのを防止することができ、バースト転送におけるパケット送信揺らぎが大きくなるのを防止することができる。
【０２９８】
さらに、パケットバッファ制御部１３１０は、選択したキューからパケットデータを出力した後においても、各キューごとに、送信可能ステータスフラグの状態を適切に設定することができる。
【０２９９】
また、パケットバッファ制御部１３１０は、パケット送信トリガの受信に応答して、選択したキューからパケットデータを出力した後において、各々のキューごとに、蓄積されているトークン量（蓄積トークン値）と、廃棄されたトークンの量（トークン廃棄回数）に基づいて、トークン加算処理を行うか否かを判定することができるので、パケットデータの送信が行われたキューにおいて、本来加算されるべきであったにもかかわらず、加算されずに廃棄されたトークンの量の一部又は全部を後発的に加算し蓄積することができる。
【０３００】
これにより、送信可能状態にあるにもかかわらず、対応する出力ポート（物理回線）の送信帯域不足によりパケット送信が待たされるキューが発生する状況下においても、各キューごとに蓄積されるトークン量を実質的に増加させることができるので、パケットデータのデータ転送レートが低下するのを防止することができる。
【０３０１】
［３−２−４．パケットバッファ制御部の変形例］
第１実施例及び第２実施例の場合と同様に、図１４〜図１７に示した各々のパケット伝送制御処理は、図４及び図１３に示したハードウェアによって実現する代わりに、図１４〜図１７に示した各々の処理をプログラムに実行させることにより、ソフトウェアによって実現することも可能である。
【０３０２】
この場合、パケットバッファ制御部１３１０は例えば、図１４〜図１７に示した各々のステップを処理内容とするプログラム（パケットバッファ制御プログラム）を格納するプログラムメモリ、そのプログラムを実行可能なプロセッサ、及びそのプロセッサによる演算処理のワークエリアを提供するワークメモリを含むものとすることができる。
【０３０３】
パケットバッファ制御部１３１０のプロセッサは、ワークメモリを用いて、プログラムメモリに格納されたパケットバッファ制御プログラムを実行することにより、図４及び図１３に示したパケットバッファ制御部１３１０内部の各々の部分が連携して実行する処理と同等の処理を実行することができる。
【０３０４】
以上、本発明の例示的な実施形態のパケット伝送装置、及びパケット伝送方法について説明したが、本発明は、具体的に開示された実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。各実施例に開示された技術は、相互に矛盾することがない限り、適宜組合せることが可能であるものである。
【０３０５】
以上の第１ないし第３実施例を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
複数のキューを有し、パケットデータを前記複数のキューのいずれかに格納するバッファと、
前記複数のキューの各々について送信可能なパケットデータが存在するか否かを示す複数のキューステータス信号を出力するキュー管理部と、
各々のキューごとに所定の周期でトークンを蓄積し、各々のキューについて前記蓄積されたトークン量が各々の対応するキューごとに設けられたトークン閾値よりも多いか否かを示す、各々のキューに対応した複数のトークンステータス信号を出力する帯域制御部と、
各々のキューごとに、対応する前記キューステータス信号が前記キューに送信可能なパケットデータが存在することを示し、かつ、対応する前記トークンステータス信号が前記蓄積されたトークン量が前記各々のキューに設けられたトークン閾値よりも多いことを示す送信可能状態の継続時間が各々のキューごとに設けられた継続時間閾値よりも長いキューを優先的に選択するキュー選択部と、
前記選択されたキューからの前記パケットデータの読み出しを制御するバッファ読み出し部と
を有することを特徴するパケット伝送装置。
（付記２）
前記帯域制御部は、
各々のキューごとに設けられ、前記所定の周期を有するトリガ信号に応答して、対応するトークン値を加算することにより、前記蓄積されたトークン量をカウントする複数のトークンカウンタを有し、
前記キュー選択部は、
各々のキューごとに設けられ、対応する前記キューが前記送信可能状態にあるとき、前記トリガ信号のトリガの数をカウントする複数のトリガカウンタと、
前記複数のキューの中から、前記トリガカウンタのカウント値が対応する前記継続時間閾値に対応するカウント値よりも大きいキューを選択するキュー選択制御部と
を有することを特徴とする付記１記載のパケット伝送装置。
（付記３）
前記帯域制御部は、
各々のキューごとに設定された、前記蓄積されたトークン量に対する蓄積トークン閾値を格納する閾値格納部と、
各々対応する前記蓄積されたトークン量が前記蓄積トークン閾値よりも多いか否かを示す複数のトークン閾値超過ステータス信号を出力するトークン制御部を有し、
前記キュー選択部は、
前記複数のキューの中から、前記送信可能状態にあって、かつ、対応する前記トークン閾値超過ステータス信号が前記蓄積されたトークン量が前記蓄積トークン閾値よりも多いことを示すキューを選択するキュー選択制御部と
を有することを特徴とする付記１記載のパケット伝送装置。
（付記４）
前記帯域制御部は、
各々のキューごとに設けられ、前記所定の周期を有するトリガ信号に応答して、対応するトークン値を加算することにより、前記蓄積されたトークン量をカウントする複数のトークンカウンタと、
各々のキューごとに設定された、前記蓄積されたトークン量に対する蓄積トークン発生閾値及び蓄積トークン解除閾値を格納する閾値格納部と、
各々対応する前記蓄積されたトークン量が前記蓄積トークン発生閾値より多いか否かを示す複数のトークン閾値超過ステータス信号を出力するトークン制御部と
を有し、
前記キュー選択部は、
各々のキューごとに設けられ、対応する前記キューが前記送信可能状態にあって、かつ、対応する前記トークン閾値超過ステータス信号が前記蓄積されたトークン量が前記蓄積トークン発生閾値より多いことを示すとき、前記トリガ信号のトリガの数をカウントする複数のトリガカウンタと、
前記複数のキューの中から、前記トリガカウンタのカウント値が前記計測時間閾値に対応するカウント値よりも大きいキューを選択するキュー選択制御部と
を有することを特徴とする付記１記載のパケット伝送装置。
（付記５）
前記帯域制御部において、前記トークン制御部は、
前記選択されたキューに対応する前記トークンカウンタのカウント値を、前記選択されたキューから読み出された前記パケットデータのパケット長に応じて、減少させることにより、前記蓄積されたトークン量を更新し、
前記更新されたトークン量が対応する前記蓄積トークン解除閾値より多いとき、前記選択されたキューに対応する前記トークンカウンタのカウント値を、前記選択されたキューに対応する前記トリガカウンタのカウント値に応じて、増加させることを特徴とする付記４記載のパケット伝送装置。
（付記６）
前記キュー選択部は、
前記複数のトリガカウンタのカウント値を、前記複数のキューの前記送信可能状態の前記継続時間として監視するステータス監視部をさらに有し、
前記ステータス監視部は、前記選択されたキューに対応する前記トリガカウンタのカウント値を、前記選択されたキューに対応する前記トークンカウンタのカウント値の増加量に応じて、減少させることを特徴とする付記５記載のパケット伝送装置。
（付記７）
前記複数のトークンカウンタの各々は、対応する前記トークン閾値超過ステータス信号が前記蓄積されたトークン量が前記蓄積トークン発生閾値よりも多いことを示し、かつ、対応する前記キューステータス信号が前記キューに送信可能なパケットデータが存在することを示すとき、カウントを停止することを特徴とする付記４ないし６のいずれか一つ記載のパケット伝送装置。
（付記８）
前記キュー選択部は、
前記複数のキューのうち、前記トリガカウンタのカウント値がアラーム通知閾値よりも大きいキューに対して、アラーム通知信号を生成するアラーム通知部をさらに有することを特徴とする付記２又は４記載のパケット伝送装置。
（付記９）
前記キュー選択部は、前記複数のキューの中に前記継続時間が前記継続時間閾値よりも長いキューが複数存在する場合、前記複数のキューの中からをラウンドロビンにより１つのキューを選択することを特徴とする付記１記載のパケット伝送装置。
（付記１０）
前記キュー選択部は、前記複数のキューの中に前記継続時間が前記継続時間閾値よりも長いキューが存在しない場合、前記複数のキューの中で前記送信可能状態にあるキューを選択することを特徴とする付記１記載のパケット伝送装置。
（付記１１）
前記帯域制御部は、
各々のキューごとに設けられ、前記所定の周期を有するトリガ信号に応答して、対応するトークン値を加算することにより、前記蓄積されたトークン量をカウントする複数のトークンカウンタと、
各々のキューごとに設定された、前記蓄積されたトークン量に対する最大値を格納する最大値格納部と、
前記選択されたキューに対応する前記トークンカウンタのカウント値を、対応する前記最大値を超えないように増加させるトークン制御部
をさらに有することを特徴とする付記１記載のパケット伝送装置。
（付記１２）
パケットデータを複数のキューのいずれかに格納するメモリを制御するメモリ制御回路であって、
前記複数のキュー各々について送信可能なパケットデータが存在するか否かを示す複数のキューステータス信号を出力するキュー管理部と、
各々のキューごとに所定の周期でトークンを蓄積し、各々のキューについて前記蓄積されたトークン量が各々の対応するキューごとに設けられたトークン閾値よりも多いか否かを示す、各々のキューに対応した複数のトークンステータス信号を出力する帯域制御部と、
各々のキューごとに、対応する前記キューステータス信号が前記キューに送信可能なパケットデータが存在することを示し、かつ、対応する前記トークンステータス信号が前記蓄積されたトークン量が前記各々のキューに設けられたトークン閾値よりも多いことを示す送信可能状態の継続時間が各々のキューごとに設けられた継続時間閾値よりも長いキューを優先的に選択するキュー選択部と
を有することを特徴するメモリ制御回路。
（付記１３）
パケットデータをバッファメモリの複数のキューのいずれかに格納し、
前記複数のキューの各々について前記パケットデータが格納されているか否かを判定し、
各々のキューごとに所定の周期でトークンを蓄積し、
各々のキューについて、前記蓄積したトークン量が各々の対応するキューごとに設けられたトークン閾値よりも多いか否かを判定し、
各々のキューごとに、対応する前記キューに前記パケットデータが格納されており、かつ、前記蓄積したトークン量が前記各々のキューに設けられたトークン閾値よりも多い送信可能状態の継続時間を監視し、
前記複数のキューの中から前記継続時間が各々のキューごとに設けられた継続時間閾値よりも長いキューを選択し、
前記選択されたキューから前記パケットデータを読み出す
ことを特徴するパケット伝送方法。
（付記１４）
前記継続時間が前記継続時間閾値よりも長いキューの選択は、パケット送信トリガが生成されたときに行われることを特徴とする付記１２記載のパケット伝送方法。
【符号の説明】
【０３０６】
１０２  バッファ読み出し制御部、
１０４  キュー管理部、
１０６  パケットバッファ、
１０８  パケットデータ読み出し部、
１１０  帯域制御部、
１１２  キュー選択部、
１１４  トークン制御部、
１１６  トークンテーブル
１１８  最大値テーブル、
１２０  トークンカウンタ
１２２  ステータス監視部、
１２４  キュー選択制御部
２００  ネットワーク、
２０２  サーバ、
２０４−１〜７  ユーザ装置、
２０６−１〜３  パケット伝送装置、
２０８−１〜３  ハブ（ＨＵＢ）、
２１０−１〜８  中継点、
３００  パケット伝送装置、
３０２  入力インターフェース、
３０４  宛先判定部、
３０６  宛先管理テーブル、
３０８  スイッチング部、
３１０  パケットバッファ制御部、
３１２  パケットバッファ、
３１４  出力インターフェース、
４０２  バッファ書き込み制御部、
４０４  キュー管理部、
４０６  バッファ読み出し制御部、
４０８  パケット情報格納部、
５０２  帯域制御部、
５０４  キュー選択部、
５０８  バッファ読み出し部、
５１２  トークン制御部、
５１４  トークンテーブル、
５１６  最大値テーブル、
５１８  トークンカウンタ
５２２  ステータス監視部、
５２４  送信可能ステータスフラグ、
５２６  トリガカウンタ、
５２８  キュー選択制御部、
５３０  優先制御閾値格納部、
５３２  アラーム通知閾値格納部
９０２  帯域制御部、
９０４  キュー選択部、
９０６  バッファ読み出し制御部、
９１２  トークン制御部、
９２０  トークン閾値テーブル、
９２２  ステータス監視部、
９２８  キュー選択制御部、
９３４  トークン閾値超過ステータスフラグ、
１３０２  帯域制御部、
１３０４  キュー選択部、
１３１２  トークン制御部、
１３２０  トークン閾値テーブル、
１３２２  ステータス監視部、
１３２６  トリガカウンタ、
１３２８  キュー選択制御部
【図１】
0005737039.tif 000002
【図２】
0005737039.tif 000003
【図３】
0005737039.tif 000004
【図４】
0005737039.tif 000005
【図５】
0005737039.tif 000006
【図６】
0005737039.tif 000007
【図７】
0005737039.tif 000008
【図８】
0005737039.tif 000009
【図９】
0005737039.tif 000010
【図１０】
0005737039.tif 000011
【図１１】
0005737039.tif 000012
【図１２】
0005737039.tif 000013
【図１３】
0005737039.tif 000014
【図１４】
0005737039.tif 000015
【図１５】
0005737039.tif 000016
【図１６】
0005737039.tif 000017
【図１７】
0005737039.tif 000018