本発明の実施の形態について図面を参照しながら詳細に説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰返さない。
[実施の形態1]
図1は、この発明の実施の形態1による通信装置の構成を示す概略図である。この発明の実施の形態による通信装置100は、MACレイヤモジュール1と、リンクレイヤクラシファイア2と、トラフィッククラシファイア3と、キュー4〜6,8,9と、アップストリームスケジューラ7と、ダウンストリームスケジューラ10と、負荷モニタモジュール11と、下層レートコントローラ12と、ネットワークレイヤクラシファイア13と、ルーティングモジュール14と、UDP15と、TCP16と、Voice17と、Video18と、Text19と、上層レートコントローラ20と、クロスレイヤモジュール21とを備える。
MACレイヤモジュール1は、MAC層に属し、他の通信装置から受信したパケットをリンクレイヤクラシファイア2へ送信する。
また、MACレイヤモジュール1は、2つの通信装置間における物理的な接続を制御する。
更に、MACレイヤモジュール1は、チャネルアクセスしてチャネルが空いているとき、データリンク層から受けたパケットを所定のチャネルで送信する。
リンクレイヤクラシファイア2は、データリンク層に属し、MACレイヤモジュール1からパケットを受ける。そして、リンクレイヤクラシファイア2は、その受けたパケットが後述するレートコントロールを要求する信号Rate_signalを含むとき、その信号Rate_signalをパケットから取り出して下層レートコントローラ12へ送信し、残りのデータパケットをネットワーククラシファイア13へ送信する。
トラフィッククラシファイア3は、データリンク層に属し、通信装置100が他の通信装置から受信したパケットまたは上位層から受信したパケットをパケットの送信元ごとに分類してキュー4〜6へ入れる。
キュー4〜6の各々は、データリンク層に属し、トラフィッククラシファイア3から受けたパケットを保持するとともに、その保持したパケットをアップストリームスケジューラ7からの出力要求に応じてアップストリームスケジューラ7へ出力する。なお、キュー4,6は、通信装置100が他の通信装置から受信したパケットを保持し、キュー5は、通信装置100において生成されたパケットを保持する。
アップストリームスケジューラ7は、データリンク層に属する。そして、アップストリームスケジューラ7は、キュー8または9が空になると、キュー4〜6から1個のパケットを読み出し、その読み出した1個のパケットをキュー8または9へ入れる。
また、アップストリームスケジューラ7は、後述する目標入力パケットレートを含む信号Rate_signalを負荷モニタモジュール11から受けると、その受けた信号Rate_signalをデータパケットに追加してキュー8または9へ送信する。
キュー8,9の各々は、データリンク層に属し、パケットを出力できないロック状態とパケットを出力可能なアンロック状態とを有する。そして、キュー8,9の各々は、アップストリームスケジューラ7から受けた1個のパケットを保持するとともに、アンロック状態になり、かつ、ダウンストリームスケジューラ10からの出力要求に応じて、保持した1個のパケットをダウンストリームスケジューラ10へ出力する。
ダウンストリームスケジューラ10は、データリンク層に属する。そして、ダウンストリームスケジューラ10は、MACレイヤモジュール1からパケットの出力要求を受け、かつ、キュー8,9の状態がアンロック状態になると、キュー8,9から1個のパケットを読み出してMACレイヤモジュール1へ送信する。
負荷モニタモジュール11は、データリンク層に属し、キュー5〜6に保持されたパケット数をレートコントロール間隔ごとにモニタするとともに、制御方式に応じてキュー4〜6の許容サイズを後述する方法によって演算する。そして、負荷モニタモジュール11は、後述する方法によって、キュー4〜6に保持されているパケット数がキュー4〜6の許容サイズに近づくようにキュー4〜6に入れるパケットの目標レートである目標入力パケットレートをレートコントロール間隔ごとに計算する。そして、負荷モニタモジュール11は、キュー5の目標入力パケットレートを計算すると、その計算した目標入力パケットレートを含む信号Rate_signalをクロスレイヤモジュール21へ送信し、キュー4,6の目標入力パケットレートを計算すると、その計算した目標入力パケットレートを含む信号Rate_signalをアップストリームスケジューラ7へ送信する。
下層レートコントローラ12は、データリンク層に属する。そして、下層レートコントローラ12は、隣接する通信装置のキュー4〜6に保持されているパケット数がキュー4〜6の許容サイズになるようにキュー8,9からの出力パケットレートの制御を後述する方法によって行なう。
また、下層レートコントローラ12は、キュー8,9の状態をロック状態に設定するロック期間を後述する方法によって演算する。そして、下層レートコントローラ12は、その演算したロック期間を用いてキュー8,9からのパケットの出力パケットレートを制御する。
ネットワーククラシファイア13は、ネットワーク層に属し、リンクレイヤクラシファイア2から受けたパケットをルーティングモジュール14へ出力する。
ルーティングモジュール14は、ネットワーク層に属し、ネットワーククラシファイア13からパケットを受ける。そして、ルーティングモジュール14は、ルーティングプロトコルに従って、その受けたパケットの送信先を決定し、その決定した送信先宛のパケットをトラフィッククラシファイア3を介してキュー(キュー4または6)へ入れる。また、ルーティングモジュール14は、UDP15およびTCP16からパケットを受ける。そして、ルーティングモジュール14は、ルーティングプロトコルに従って、その受けたパケットの送信先を決定し、その決定した送信先宛のパケットをトラフィッククラシファイア3を介してキュー5へ入れる。なお、この発明においては、ルーティングモジュール14が送信先を決定するために用いるルーティングプロトコルとしては、オンデマンド型のルーティングプロトコルとテーブル駆動型のルーティングプロトコルとがある。
UDP15は、トランスポート層に属し、アプリケーション層のプロトコル(例えば(Voice17,Video18)からパケットを受け、その受けたパケットをルーティングモジュール14へ送信する。
TCP16は、トランスポート層に属し、アプリケーション層から受けたデータを上層レートコントローラ20から受けた目標出力パケットレートでルーティングモジュール14へ送信する。
Voice17は、アプリケーション層に属し、音声データを生成する。そして、Voice17は、上層レートコントローラ20から受けた目標出力パケットレートで音声データからなるパケットをUDP15へ送信する。
Video18は、アプリケーション層に属し、映像データを生成する。そして、Video18は、上層レートコントローラ20から受けた目標出力パケットレートで画像データからなるパケットをUDP15へ送信する。
Text19は、アプリケーション層に属し、テキストデータを生成する。そして、Text19は、その生成したテキストデータをTCP16へ送信する。
上層レートコントローラ20は、トランスポート層およびアプリケーション層に跨って属し、クロスレイヤモジュール21から目標入力パケットレートを含む信号Rate_signalを受けると、後述する方法によって目標出力パケットレートを演算する。そして、上層レートコントローラ20は、TCP16、Voice17およびVideo18からの出力パケットレートが演算した目標出力パケットレートになるようにTCP16、Voice17およびVideo18を制御する。
クロスレイヤモジュール21は、負荷モニタモジュール11から目標入力パケットレートを含む信号Rate_siganalを受けると、その受けた信号Rate_signalを上層レートコントローラ20へ送信する。
図2は、自律的に確立される通信ネットワークであるアドホックネットワークの概念図である。通信装置100〜102は、アドホックネットワークを構成する。そして、例えば、通信装置101は、送信元の通信装置であり、通信装置102は、送信先の通信装置であり、通信装置100は、通信装置101と通信装置102との間でパケットを中継する中継通信装置である。中継通信装置である通信装置100においては、例えば、キュー4は、通信装置101から受信したパケットを保持し、キュー6は、通信装置102から受信したパケットを保持する。また、通信装置100においては、キュー8は、通信装置101宛てのパケットを保持し、キュー9は、通信装置102宛てのパケットを保持する。なお、通信装置101,102の各々は、図1に示す通信装置100と同じ構成からなる。
以下においては、図2に示すアドホックネットワークにおいて各通信装置100〜102が自己のキュー4〜6に保持されているパケット数がキュー4〜6の許容サイズに近づくように制御することによって、アドホックネットワーク全体を安定化させる方法について説明する。
[負荷のモニタ]
負荷モニタモジュール11がキュー4〜6に保持されているパケット数をモニタする方法について説明する。負荷モニタモジュール11は、システムのパラメータであるレートコントロール間隔ごとに、各々のキューに関して出力パケット数N_Dequeue_Pkt、失敗回数N_Dequeue_Fail、パケットサイズS_Dequeue_Pktおよび保持パケット数H_Pktを演算する。
出力パケット数N_Dequeue_Pktは、前回の処理時刻以降にキューから出力されたパケット数である。失敗回数N_Dequeue_Pktは、前回の処理時刻以降にキューからのパケットの出力に失敗した回数である。パケットサイズS_Dequeue_Pktは、前回の処理時刻以降にキューから出力されたパケットのサイズの合計である。保持パケット数H_Pktは、現時点でキューに保持されているパケット数である。
負荷モニタモジュール11は、3つの制御方法のいずれかに従って各キュー4〜6に保持されている保持パケット数H_Pktが各キュー4〜6の許容サイズ(TQL:Tolerance Queue Length)にそれぞれ近づくように各キュー4〜6に入力されるパケットレートを制御する。
3つの制御方法は、Constant TQL(C−TQL)、Additive Increase/Decrease TQL(AIAD−TQL)およびDelay Based TQL(DB−TQL)である。C−TQLは、リンクレイヤにおけるパケットの輻輳状態を回避することによって、パケット落ちまたはキューにおける待ち時間を解消することを目的とする制御方法である。また、AIAD−TQLは、高いチャネル使用率を保持し、かつ、必要最小限のキュー長を保つことを目的とする制御方法である。更に、DB−TQLは、キューにおけるパケット遅延を特定の値以内に保つことを目的とする制御方法である。そして、この3つの制御方法のいずれの制御方法を用いるかによってキューの許容サイズ(TQL)の決定方法が異なる。
i)C−TQLを用いた場合のTQLの決定方法
C−TQLを用いた場合、TQLは、一定値C_TQLに保持され、この一定値C_TQLは、システムパラメータとして負荷モニタモジュール11に設定される。従って、この場合、負荷モニタモジュール11は、TQLを演算することはない。
一定値C_TQLは、次のように決定される。許容サイズTQLの最大値をTQL_maxとし、許容サイズTQLの最小値をTQL_minとすると、許容サイズの最大値TQL_maxは、次式によって決定される。
TQL_max=(キューの最大サイズ(バイト)の70%)/(キューから出力されたパケットの平均サイズ(バイト))・・・(1)
また、許容サイズの最小値TQL_minは、次式によって決定される。
TQL_min=(キューの最大サイズ(バイト)の10%)/(キューから出力されたパケットの平均サイズ(バイト))・・・(2)
そして、キューサイズ>TQL_max、かつ、キューサイズ<TQL_minであるとき、許容サイズTQLは、次式によって決定される。
TQL=(TQL_max−TQL_min)/2+TQL_min
・・・(3)
一方、キューサイズ>TQL_max、かつ、キューサイズ<TQL_minが成立しない場合、許容サイズTQLは、次式によって決定される。
TQL=キューサイズ・・・(4)
また、許容サイズTQLは、次の方法によって決定されてもよい。
キューサイズ>TQL_maxであれば、TQL=TQL_maxと決定し、キューサイズ<TQL_minであれば、TQL=TQL_minと決定し、キューサイズ>TQL_max、かつ、キューサイズ<TQL_minが成立しない場合、TQL=キューサイズと決定する。
C−TQLが用いられる場合、上述した方法のいずれかによって、許容サイズTQLが決定される。
ii)AIAD−TQLを用いた場合のTQLの決定方法
負荷モニタモジュール11は、演算したパケットサイズS_Dequeue_Pktおよび出力パケット数N_Dequeue_Pktに基づいて、前回の処理時刻以降にキューから出力されたパケットの平均サイズS_Dequeue_Pkt_aveを演算する。そして、負荷モニタモジュール11は、その演算したパケットの平均サイズを用いて、次式により許容サイズTQLの最大値TQL_maxを演算する。
TQL_max=(キューのサイズの30%)/(S_Dequeue_Pkt_ave)・・・(5)
また、負荷モニタモジュール11は、TQL_minをTQL_min=1と決定する。
そして、TQL_prevを前回のレートコントロールタイマが終了した時のTQLの値とし、TQL_newを次回のレートコントロールタイマが終了した時のTQLの値とする。
そうすると、負荷モニタモジュール11は、該当のキュー4〜6から出力されたパケットがあった場合、TQL_prevとキューに保持されているパケット数とを比較し、TQL_prev>保持されているパケット数であれば、TQL_newを下げる。この場合、負荷モニタモジュール11は、例えば、TQL_newを1パケット分だけ下げる(TQL_new=TQL_prev−1)。キューへ入れたパケット数がキューへのパケットの出力要求数を上回っているので、TQL_newを下げることにしたものである。
また、負荷モニタモジュール11は、キューからのパケットの出力要求に対してキューからパケットを出力できなかったとき(即ち、空振りしたとき)、TQL_newを上げる。この場合、負荷モニタモジュール11は、例えば、TQL_newを1パケット分だけ上げる(TQL_new=TQL_prev+1)。パケットの出力要求数がキューへ入れたパケット数を上回っているので、パケットの送信処理に余裕がある状態であると見なし、TQL_newを上げることにしたものである。
ただし、負荷モニタモジュール11は、TQL_minからTQL_maxの範囲を超えないようにTQL_newの値を決定する。
そして、負荷モニタモジュール11は、レートコントロールタイマが終了した時点のTQL_newを許容サイズTQLとして更新するとともに、その更新したTQL_newをTQL_prevに設定する。
iii)DB−TQLを用いた場合のTQLの決定方法
負荷モニタモジュール11は、キューへのパケットの出力要求回数とレートコントロール間隔とに基づいて、MAC要求レートを次式によって演算する。
MAC要求レート=(出力要求回数)/(レートコントロール間隔)
・・・(6)
なお、出力要求回数は、パケットの出力要求が空振りであった回数を含む。
そして、負荷モニタモジュール11は、アップストリームスケジューラ7からパケットの出力要求があったときに、空振りせずに各キュー4〜6の遅延が許容遅延量TQD(Tolerable Queue Delay)になるようにTQLを演算する。即ち、負荷モニタモジュール11は、次式によってTQLを演算する。
TQL=TQD×(MAC要求レート)・・・(7)
負荷モニタモジュール11は、上述した3つの制御方法のいずれかにおける許容サイズTQLの決定方法に従って許容サイズTQLを演算すると、その演算した許容サイズTQLを用いて目標入力パケットレート(Target Enqueue Rate)を次式によって演算する。
Target Enqueue Rate=(dequeue Rate)-((Queue Length-TQL)/(Rate Control Interval))+(Number of Dequeue Failure)/(Rate Control Interval)
・・・(8)
即ち、負荷モニタモジュール11は、レートコントロール間隔内でキュー長(=キューに保持されているパケット数)が許容サイズTQLに近づくように、各キュー4〜6にパケットを入れるときの目標入力パケットレートを演算する。なお、式(8)において、dequeue rateは、各キュー4〜6から出力されるパケットの出力レートであり、Queue Lengthは、キュー長であり、Rate Control Intervalは、レートコントロール間隔であり、Number of Dequeue Failureは、上述した失敗回数N_Dequeue_Failである。
そして、負荷モニタモジュール11は、通知タイプ=NOTIFY_TARGET_RATE、RateInfo=Target Enqueue RateおよびLoad Generation ID=負荷を発生させている通信装置のIDからなる信号Rate_signalを生成し、その生成した信号Rate_signal=[NOTIFY_TARGET_RATE/Target Enqueue Rate/Load Generation ID]をクロスレイヤモジュール21へ送信する。
[レートシグナリング]
A.上層レートコントローラへのレートシグナリング
クロスレイヤモジュール21は、負荷モニタモジュール11から信号Rate_signal=[NOTIFY_TARGET_RATE/Target Enqueue Rate/Load Generation ID]を受けると、信号Rate_signal=[NOTIFY_TARGET_RATE/Target Enqueue Rate]を上層レートコントローラ20へ送信する(図1参照)。
B.下層レートコントローラへのレートシグナリング
図3および図4は、それぞれ、目標入力パケットレートを他の通信装置へ通知する動作を説明するための実施の形態1における第1および第2の概念図である。なお、図3および図4においては、通信装置100が通信装置101へ目標入力パケットレートを通知する場合について説明する。
通信装置100の負荷モニタモジュール11は、キュー4(通信装置101から受信したパケットを保持するキュー)における保持パケット数H_Pktがキュー4の許容サイズTQLから掛け離れていることを検出し、上述した方法でキュー6への目標入力パケットレートを演算する。
そして、通信装置100の負荷モニタモジュール11は、その演算した目標入力パケットレートを含む信号Rate_signal=[NOTIFY_TARGET_RATE/Target Enqueue Rate/Load Generation ID]をアップストリームスケジューラ7へ送信し、アップストリームスケジューラ7は、信号Rate_signalを負荷モニタモジュール11から受信する。
そうすると、通信装置100のアップストリームスケジューラ7は、通信装置101宛てのパケットを保持するキュー8に1個のパケットを入れる際にそのパケットに受信した信号Rate_signal=[NOTIFY_TARGET_RATE/Target Enqueue Rate/Requester ID]を追加してからキュー8に入れる。ここで、Requester IDは、通信装置100のIDである。そして、通信装置100のキュー8は、アンロック状態にある場合にMACレイヤモジュール1からパケットの出力要求を受けると、信号Rate_signalを含む1個のパケットをMACレイヤモジュール1へ送信し、MACレイヤモジュール1は、信号Rate_signalを含む1個のパケットを通信装置101へ送信する(図3参照)。
通信装置101のMACレイヤモジュール1は、信号Rate_signalを含む1個のパケットを通信装置100から受信し、信号Rate_signalを含む1個のパケットをリンクレイヤクラスファイア2へ送信する。
通信装置101のリンクレイヤクラスファイア2は、信号Rate_signalを含む1個のパケットを受け、その受けた1個のパケットから信号Rate_signalを取り出す。そして、通信装置101のリンクレイヤクラスファイア2は、その取り出した信号Rate_signalを下層レートコントローラ12へ送信し、信号Rate_signalを取り出した後の1個のパケットをネットワーククラシファイア13へ送信する。
ネットワーククラシファイア13は、信号Rate_signalを取り出した後の1個のパケットを受け、その受けた1個のパケットの宛先が通信装置101であるとき、その1個のパケットをUDP15またはTCP16へ送信し、その受けた1個のパケットの宛先が通信装置101以外の通信装置であるとき、その1個のパケットをルーティングモジュール14へ送信する(図4参照)。
上述した動作によって、通信装置100におけるキュー4の負荷を発生させている通信装置101へ目標入力パケットレートが送信される。
[レートコントロール]
A.上層レートコントローラ20におけるレートコントロール
次に、上層レートコントローラ20におけるレートコントロールについて説明する。
上層レートコントローラ20は、信号Rate_signal=[NOTIFY_TARGET_RATE/Target Enqueue Rate]を受けると、パケットのキュー5への入力レートが目標入力パケットレートに近づくように、トラフィックを生成するアプリケーション毎の目標出力パケットレートを演算する。
以下、例として、Voice17とVideo18との2つのアプリケーションがトラフィックを生成する場合を対象にして説明する。
上層レートコントローラ20は、信号Rate_signalに含まれる目標入力パケットレート(=Target Enqueue Rate)を用いて増減レート(Decrement/increment Rate)=Δを次式により演算する。
Δ=(Current Total Rate−Target Enqueue Rate)・・・(9)
なお、式(9)において、Current Total Rateは、Voice17から出力されている現在の出力レートCurrent Voice Rateと、Video18から出力されている現在の出力レートCurrent Video Rateとの和である。
式(9)によって、Voice17およびVideo18が増減すべき出力レートの増減レートΔが決定される。そして、Δが正であれば、出力パケットレートは、減少され、Δが負であれば、出力パケットレートは、増加される。
上層レートコントローラ20は、式(9)によって増減レートΔを演算すると、その演算した増減レートΔを用いて各アプリケーションごとの目標出力パケットレートを演算する。
この場合、上層レートコントローラ20は、全体の増減レートΔを相対トラフィックレート係数であるαを用いてαと(1−α)とに重み付けして、Voice17とVideo18とのそれぞれの目標出力パケットレートを演算する。
例として、上層レートコントローラ20は、相対トラフィックレート係数αを次式によって演算する。
α=Initial Voice Rate/Initial Total Rate・・・(10)
上層レートコントローラ20は、相対トラフィックレート係数αを演算すると、その演算した相対トラフィックレート係数αを用いて各アプリケーション(Voice17およびVideo18)の目標出力パケットレートを次のように演算する。
i)VoiceおよびVideoの出力レートが共に最小レートよりも大きい場合
上層レートコントローラ20は、次式によってVoice17およびVideo18のそれぞれの目標出力パケットレートを演算する。
VoiceOutgoingTrafficeRate=CurrentVoiceOutgoingTrafficRate-α×Δ
・・・(11)
VideoOutgoingTrafficeRate=CurrentVideoOutgoingTrafficRate-(1-α)×Δ
・・・(12)
ii)VoiceおよびVideoの一方の出力レートが最小レートで送信している場合
上層レートコントローラ20は、式(9)によって演算した増減レートΔが正である場合(Δ>0)、次の方法によってVoice17およびVideo18の目標出力パケットレートを演算する。
上層レートコントローラ20は、Voice17の現在の出力レート(=CurrentVoiceOutgoingTrafficRate)がVoice17の出力レートの最小値(=VoiceOutgoingTrafficRate_min)よりも大きいか否かを判定し、Voice17の現在の出力レートがVoice17の出力レートの最小値よりも大きい場合、次式によってVoice17およびVideo18の目標出力パケットレートを演算する。
TargetVoiceOutgoingTrafficeRate=CurrentVoiceOutgoingTrafficRate-Δ
・ ・・(13)
TargetVideoOutgoingTrafficeRate=VideoOutgoingTrafficRate_min
・ ・・(14)
また、上層レートコントローラ20は、Video18の現在の出力レート(=CurrentVideoOutgoingTrafficRate)がVideo18の出力レートの最小値(=VideoOutgoingTrafficRate_min)よりも大きいか否かを判定し、Video18の現在の出力レートがVideo18の出力レートの最小値よりも大きい場合、次式によってVoice17およびVideo18の目標出力パケットレートを演算する。
TargetVoiceOutgoingTrafficeRate=VoiceOutgoingTrafficRate-min
・ ・・(15)
TargetVideoOutgoingTrafficeRate=CurrentVideoOutgoingTrafficRate-Δ
・・・(16)
このように、上層レートコントローラ20は、出力パケットレートを減らす処理を行なう場合(Δ>0である場合)、指定された最小レートよりも大きいレートで送信しているアプリケーション(Voice17およびVideo18のいずれか一方)の出力パケットレートを減らす。
但し、上層レートコントローラ20は、指定された最小レートを下回らないようにVoice17およびVideo18の目標出力パケットレートを演算する。
次に、出力パケットレートを増やす場合(Δ<0である場合)、上層レートコントローラ20は、次式によって、Voice17およびVideo18の目標出力パケットレートを演算する。
TargetVoiceOutgoingTrafficeRate=CurrentVoiceOutgoingTrafficRate-α×Δ
・ ・・(17)
TargetVideoOutgoingTrafficeRate=CurrentVideoOutgoingTrafficRate-(1−α)×Δ ・・・(18)
上層レートコントローラ20は、上述した方法によって演算したVoice17およびVideo18の目標出力パケットレートをそれぞれVoice17およびVideo18へ出力し、目標出力パケットレートでパケットをキュー5へ出力するようにVoice17およびVideo18を制御する。
B.下層レートコントローラ12におけるレートコントロール
下層レートコントローラ12は、レートコントロールの対象となるキュー(キュー8,9の少なくとも1つ)を決定するために、信号Rate_signalに含まれている送信元のIPアドレスを抽出する。
上述したように、信号Rate_signalは、信号Rate_signal=[NOTIFY_TARGET_RATE/Target Enqueue Rate/Requester ID]からなるので、下層レートコントローラ12は、信号Rate_signalから“Requester ID”を送信元のIPアドレスとして抽出する。Requester IDは、レート制御を要求した通信装置のIPアドレスからなるので、Requester IDが送信元のIPアドレスを示すことになる。
そして、Requester IDが通信装置101のIPアドレスからなるとき、下層レートコントローラ12は、キュー8をレートコントローラの対象となるキューと決定し、Requester IDが通信装置102のIPアドレスからなるとき、下層レートコントローラ12は、キュー9をレートコントローラの対象となるキューと決定する。
下層レートコントローラ12は、レートコントロールの対象となるキューを決定すると、信号Rate_signal=[NOTIFY_TARGET_RATE/Target Enqueue Rate/Requester ID]に含まれているTarget Enqueue Rateを抽出し、その抽出したTarget Enqueue Rateを目標出力パケットレートとする。
そうすると、下層レートコントローラ12は、目標出力パケットレートの逆数を演算して該当のキューがロック状態に設定されているロック期間Lck_time(=Lock Interval)を演算し、その演算したロック期間Lck_timeによって、レートコントロールの対象となるキューのロック期間を更新する。
その後、下層レートコントローラ12は、ロック期間Lck_timeを用いてキュー8,9から出力されるパケットのレートコントロールを行なう。
キュー8,9は、最初の状態は、アンロック状態である。キュー8,9が初期状態にあるときに、下層レートコントローラ12は、信号Rate_signalを受けると、該当のキュー(キュー8または9)の状態をアンロック状態からロック状態に変えてから、ロックタイマにロック期間Lck_timeを設定し、ロックタイマを起動させる。一方、該当のキューが初期状態でない場合、下層レートコントローラ12は、信号Rate_signalを受けたとき、ロックタイマが既に進行していれば、ロック期間Lck_timeの満了を待つ。そして、ロック期間Lck_timeが満了したら、該当のキューの状態をアンロック状態に更新してから、新しいロック期間Lck_timeでロックタイマを起動させる。
また、下層レートコントローラ12は、ロック期間Lck_timeが満了したとき、該当のキューの状態をアンロック状態に更新し、ロックタイマをリセットする(再起動させる)。
一方、ダウンストリームスケジューラ10は、MACレイヤモジュール1からパケットの出力要求が届いたとき、アンロック状態にあるキュー(キュー8,9のいずれか)から1個のパケットを取り出してMACレイヤモジュール1へ送信する。そして、ダウンストリームスケジューラ10が下層レートコントローラ12に対してキューの状態をロック状態に設定するように要求する。下層レートコントローラ12は、要求に応じて、そのパケットを取り出したキュー(キュー8,9のいずれか)の状態をロック状態に更新する。
上述したように下層レートコントローラ12は、受信した信号Rate_signalから目標出力パケットレート(=Target Enqueue Rate)を取り出し、その取り出した目標出力パケットレートになるようにキュー(キュー8,9のいずれか)の出力パケットレートを制御する。
これによって、通信装置101から通信装置100へ送信されるパケットが増減し、隣接の通信装置100のキュー(キュー4または6)に保持された保持パケット数H_Pktがキュー(キュー4または6)の許容サイズTQLに徐々に近づく。
図5は、目標入力パケットレートをアプリケーションへ通知する動作を説明するためのフローチャートである。一連の動作が開始され、レートコントロールタイマが満了すると(ステップS1)、負荷モニタモジュール11は、キュー4〜6(アップストリームキュー)に対してキュー条件取得要求を送信し(ステップS2)、キュー4〜6(アップストリームキュー)は、キュー条件(=出力パケット数N_Dequeue_Pkt、失敗回数N_Dequeue_Fail、パケットサイズS_Dequeue_Pktおよび保持パケット数H_Pktからなる)を負荷モニタモジュール11へ送信する(ステップS3)。
そして、負荷モニタモジュール11は、キュー条件(=出力パケット数N_Dequeue_Pkt、失敗回数N_Dequeue_Fail、パケットサイズS_Dequeue_Pktおよび保持パケット数H_Pktからなる)を受信し、その受信したキュー条件(=出力パケット数N_Dequeue_Pkt、失敗回数N_Dequeue_Fail、パケットサイズS_Dequeue_Pktおよび保持パケット数H_Pktからなる)を用いて、上述した方法によって、目標入力パケットレートを演算する(ステップS4)。
そうすると、負荷モニタモジュール11は、その演算した目標入力パケットレートを含む信号Rate_signalをクロスレイヤモジュール21へ通知する(ステップS5)。そして、負荷モニタモジュール11において、新たなレートコントロールタイマが設定される(ステップS6)。
信号Rate_signalを受信したクロスレイヤモジュール21は、その受信した信号Rate_signalを上層レートコントローラ20へ送信する(ステップS7)。そして、上層レートコントローラ20は、クロスレイヤモジュール21から受信した信号Rate_signalに含まれる目標入力パケットレートを用いて、上述した方法によって、Voice17およびVideo18の目標出力パケットレートを演算し(ステップS8)、Voice17およびVideo18からのパケットの出力パケットレートが目標出力パケットレートになるようにVoice17およびVideo18を制御する(ステップS9,S10)。
そして、Voice17およびVideo18は、それぞれ、パケットの出力パケットレートが目標出力パケットレートになるようにパケットをルーティングモジュール14へ送信する。これによって、一連の動作は終了する。
このように、負荷の発生元が当該通信装置である場合、パケットの生成元(=Voice17およびVideo18)からキュー5への出力パケットレートを制御することによって、キュー5に保持された保持パケット数N_Pktがキュー5の許容サイズTQLに近づく。その結果、キュー5における負荷が減少する。
図6は、目標入力パケットレートを他の通信装置へ通知する動作を説明するためのフローチャートである。図6に示すフローチャートは、図5に示すフローチャートのステップS5,S7〜S10をステップS11〜S18に代えたものであり、その他は、図5に示すフローチャートと同じである。
上述したステップS1〜ステップS4が順次実行されると、負荷モニタモジュール11は、演算した目標入力パケットレートを含む信号Rate_signalをアップストリームスケジューラ7へ送信し、目標入力パケットレートのパケットへの追加を依頼する(ステップS11)。
一方、MAC層のMACレイヤモジュール1は、チャネルアクセスを行ない、パケットの送信が可能な状態になると、パケットの出力要求(Dequeue要求)をダウンストリームスケジューラ10へ送信する(ステップS12)。そして、ダウンストリームスケジューラ10は、パケットの出力要求(Dequeue要求)に応じて、アンロック状態にあるキュー(ダウンストリームキュー)から1個のパケットを取り出し(ステップS13)、その取り出した1個のパケットをMACレイヤモジュール1へ送信する(ステップS14)。
また、ダウンストリームスケジューラ10は、パケットが空になったキューを指定したパケットの出力要求(Dequeue要求)をアップストリームスケジューラ7へ送信する(ステップS15)。そして、アップストリームスケジューラ7は、ダウンストリームスケジューラ10からのパケットの出力要求(Dequeue要求)に応じて、空になったキュー(キュー8,9のいずれか)に入れるべき1個のパケットをキュー4〜6(アップストリームキュー)から取り出し(ステップS16)、その取り出した1個のパケットに目標入力パケットレートを含む信号Rate_signalを追加する(ステップS17)。
そして、アップストリームスケジューラ7は、目標入力パケットレートを含む1個のパケットを空になったキューへ入れる(ステップS18)。
パケットが空であったキューは、目標入力パケットレートを含む1個のパケットが入れられることによって空でなくなり、上述したステップS12〜ステップS14に従って他の通信装置へ送信される。これによって、一連の動作は終了する。
図7は、目標入力パケットレートを受信した通信装置における動作を説明するためのフローチャートである。一連の動作が開始されると、MACレイヤモジュール1は、信号Rate_signal(目標入力パケットレート)を含むパケットを受信し、その受信したパケットをリンクレイヤクラシファイア2へ送信する(ステップS21)。
そして、リンクレイヤクラシファイア2は、MACレイヤモジュール1から信号Rate_signalを含むパケットを受信し、その受信したパケットから信号Rate_signalを抽出するとともに、その抽出した信号Rate_signalを下層レートコントローラ12へ通知する(ステップS22)。なお、リンクレイヤクラシファイア2は、信号Rate_signalを抽出した後のパケットをその送信先に応じてトランスポート層(UDP15およびTCP16)またはルーティングモジュール14へ送信する。
下層レートコントローラ12は、信号Rate_signalを受信すると、その受信した信号Rate_signalに含まれる目標入力パケットレートを用いて、上述した方法によって、目標出力パケットレートを演算するとともに、その演算した目標出力パケットレートの逆数を演算してロック期間Lck_time(=ロックインターバル)を演算する(ステップS23)。
そして、ロックタイマが満了すると(ステップS24)、下層レートコントローラ12は、ロック状態にあるキュー(ダウンストリームキュー)の状態をロック状態からアンロック状態に変える(ステップS25)。その後、ロックタイマが設定される(ステップS26)。
一方、MAC層のMACレイヤモジュール1は、チャネルアクセスを行ない、パケットの送信が可能な状態になると、パケットの出力要求(Dequeue要求)をダウンストリームスケジューラ10へ送信する(ステップS27)。そして、ダウンストリームスケジューラ10は、パケットの出力要求(Dequeue要求)に応じて、アンロック状態にあるキュー(ダウンストリームキュー)から1個のパケットを取り出す(ステップS28)。
また、ダウンストリームスケジューラ10は、1個のパケットを取り出したキューの状態をロック状態に設定するためのキューロック要求を下層レートコントローラ12へ送信する(ステップS29)。
下層レートコントローラ12は、ダウンストリームスケジューラ10からのキューロック要求に応じて、1個のパケットを出力したキュー(UNLOCK_queueID)の状態をロック状態に変更する(ステップS30)。
その後、ダウンストリームスケジューラ10は、ステップS28において、キューから取り出した1個のパケットをMACレイヤモジュール1へ送信するとともに(ステップS31)、パケットが空になったキューを指定したパケットの出力要求(Dequeue要求)をアップストリームスケジューラ7へ送信する(ステップS32)。
そして、アップストリームスケジューラ7は、パケットの出力要求(Dequeue要求)に応じて、キュー4〜6(アップストリームキュー)から1個のパケットを取り出し(ステップS33)、その取り出した1個のパケットを空になったキューへ入れる(ステップS34)。これによって、一連の動作が終了する。
上述したように、目標入力パケットレートを受信した通信装置においては、受信した目標入力パケットレートに応じたロック期間Lck_time(ロックインターバル)が演算され、その演算されたたロック期間Lck_time(ロックインターバル)によって、キュー8,9からMACレイヤモジュール1(MAC層)へのパケットの出力パケットレートが制御される。
なお、図7においては、通信装置101が目標入力パケットレートの通知を受信した場合について説明したが、通信装置102が目標入力パケットレートの通知を受信した場合も、図7に示すフローチャートに従ってパケットの出力パケットレートの制御が行なわれる。
図8は、図1に示す負荷モニタモジュール11におけるキューの許容サイズを演算する動作を説明するためのフローチャートである。一連の動作が開始されると、アップストリームスケジューラ7は、キュー(キュー4〜6のいずれか)からパケットの出力を試みる(ステップS41)。
そして、負荷モニタモジュール11は、パケットを出力(Dequeue)できたか否かを判定し(ステップS42)、パケットを出力(Dequeue)できたと判定したとき、出力(Dequeue)できたパケット数を計測する(ステップS43)。その後、負荷モニタモジュール11は、出力(Dequeue)できたパケット数のパケットサイズを演算する(ステップS44)。
一方、ステップS42において、パケットを出力(Dequeue)できなかった判定されたとき、負荷モニタモジュール11は、出力(Dequeue)の失敗回数N_Dequeue_Failを計測する(ステップS45)。
そして、ステップS44またはステップS45の後、負荷モニタモジュール11は、MACリクエストの回数を計測し(ステップS46)、制御方式がAIAD−TQLか否かを判定する(ステップS47)。
ステップS47において、制御方式がAIAD−TQLであると判定された場合、負荷モニタモジュール11は、上述した式(5)によって、許容サイズTQLの最大値TQL_max=(キューのサイズの30%)/(S_Dequeue_Pkt_ave)を演算する(ステップS48)。
その後、負荷モニタモジュール11は、パケットを出力できたか否かを判定する(ステップS49)。そして、負荷モニタモジュール11は、パケットを出力できなかったとき、即ち、キューからのデータの取り出しを空振りしたときTQL_newを増加(例えば、1パケット分)させる(ステップS50)。
一方、ステップS49において、パケットを出力できたと判定されたとき、負荷モニタモジュール11は、前回のレートコントロールタイマ終了時のTQLの値TQL_prevがキュー中のパケットサイズよりも小さいか否かを更に判定する(ステップS51)。
そして、ステップS51において、前回のレートコントロールタイマ終了時のTQLの値TQL_prevがキュー中のパケットサイズよりも小さいと判定されたとき、負荷モニタモジュール11は、TQL_newを減少(例えば、1パケット分)させる(ステップS52)。
ステップS50の後、またはステップS51において、前回のレートコントロールタイマ終了時のTQLの値TQL_prevがキュー中のパケットサイズ以上であると判定されたとき、またはステップS52の後、負荷モニタモジュール11は、TQL_newがTQL_minよりも小さいか否かを判定し(ステップS53)、TQL_newがTQL_min以上であるとき、TQL_newがTQL_maxよりも大きいか否かを更に判定する(ステップS54)。
そして、ステップS54において、TQL_newがTQL_maxよりも大きいと判定されたとき、負荷モニタモジュール11は、TQL_newをTQL_maxに設定する(ステップS55)。
一方、ステップS53において、TQL_newがTQL_minよりも小さいと判定されたとき、負荷モニタモジュール11は、TQL_newをTQL_minに設定する(ステップS56)。
そして、ステップS47において制御方式がAIAD−TQLでないと判定されたとき、またはステップS54においてTQL_newがTQL_maxよりも大きくないと判定されたとき、またはステップS55の後、またはステップS56の後、一連の動作は終了する。
上述したように、図8に示すフローチャートに従えば、AIAD−TQL方式におけるTQL_newは、最小値TQL_minと最大値TQL_maxとの間に設定される(ステップS48〜ステップS56参照)。
図9は、許容サイズの計算方法を説明するためのフローチャートである。一連の動作が開始されると、負荷モニタモジュール11は、パケットの出力情報(=Dequeue情報)、即ち、出力パケット数N_Dequeue_Pkt、失敗回数N_Dequeue_Fail、パケットサイズS_Dequeue_Pktおよび保持パケット数H_Pktを取得する(ステップS61)。
そして、負荷モニタモジュール11は、制御方式がAIAD−TQLであるか否かを判定し(ステップS62)、制御方式がAIAD−TQLであると判定したとき、許容サイズTQLを図8に示すフローチャートに従って演算したTQL_newに設定する(ステップS63)。その後、一連の動作は、ステップS75へ移行する。
一方、ステップS62において、制御方式がAIAD−TQLでないと判定されたとき、負荷モニタモジュール11は、制御方式がC−TQLであるか否かを更に判定する(ステップS64)。そして、制御方式がC−TQLであると判定されたとき、負荷モニタモジュール11は、キューから出力されたパケット数(=Dequeueパケット数)が“0”よりも大きいか否かを更に判定する(ステップS65)。
ステップS65において、キューから出力されたパケット数が“0”であると判定されたとき、負荷モニタモジュール11は、平均パケットサイズを“DEFAULT_EHTERNET_MTU”に設定する(ステップS66)。その後、一連の動作は、ステップS68へ移行する。
一方、ステップS65において、キューから出力されたパケット数が“0”よりも大きいと判定されたとき、負荷モニタモジュール11は、キューから出力されたパケットサイズをキューから出力されたパケット数で除算して平均パケットサイズを演算する(ステップS67)。
そして、ステップS66またはステップS67の後、負荷モニタモジュール11は、上述した式(1)によって許容サイズTQLの最大値TQL_maxを演算し(ステップS68)、上述した式(2)によって許容サイズの最小値TQL_minを演算する(ステップS69)。
そうすると、負荷モニタモジュール11は、キュー長が許容サイズTQLの最小値TQL_minよりも小さく、かつ、キュー長が許容サイズTQLの最大値TQL_maxよりも大きいか否かを判定する(ステップS70)。
そして、ステップS70において、キュー長が最小値TQL_minよりも小さく、または、キュー長が最大値TQL_maxよりも大きいと判定されたとき、負荷モニタモジュール11は、上述した式(3)によって許容サイズTQLを演算する(ステップS71)。
一方、ステップS70において、キュー長が最小値TQL_min以上であり、かつ、キュー長が最大値TQL_max以下であると判定されたとき、負荷モニタモジュール11は、許容サイズTQLをキュー長に設定する(ステップS72)。
ステップS64において、制御方式がC−TQLでないと判定されたとき、即ち、制御方式がDB−TQLであると判定されたとき、負荷モニタモジュール11は、上述した式(6)によってMAC要求レートを演算し(ステップS73)、その演算したMAC要求レートを用いて式(7)によって許容サイズTQLを演算する(ステップS74)。
そして、ステップS63、ステップS71、ステップS72およびステップS74のいずれかの後、負荷モニタモジュール11は、変数をクリアする(ステップS75)。これによって、一連の動作は終了する。
図10は、許容サイズの他の計算方法を説明するためのフローチャートである。図10に示すフローチャートは、図9に示すフローチャートのステップS70〜ステップS72をステップS70A,S71A,S72A,S73A,S74Aに代えたものであり、その他は、図9に示すフローチャートと同じである。
ステップS69の後、負荷モニタモジュール11は、キュー長が許容サイズTQLの最小値TQL_minよりも小さいか否かを判定し(ステップS70A)、キュー長が最小値TQL_minよりも小さいとき、許容サイズTQLを最小値TQL_minに設定する(ステップS71A)。
一方、ステップS70Aにおいて、キュー長が最小値TQL_minよりも小さくないと判定されたとき、負荷モニタモジュール11は、キュー長が許容サイズTQLの最大値TQL_maxよりも大きいか否かを更に判定し(ステップS72A)、キュー長が最大値TQL_maxよりも大きいと判定したとき、許容サイズTQLを最大値TQL_maxに設定する(ステップS73A)。
一方、ステップS72Aにおいて、キュー長が最大値TQL_maxよりも大きくないと判定されたとき、負荷モニタモジュール11は、許容サイズTQLをキュー長に設定する(ステップS74A)。そして、ステップS63、ステップS71A、ステップS73A、ステップS74およびステップS74Aのいずれかの後、一連の動作は、ステップS75へ移行する。
図11は、目標入力パケットレートの計算方法を説明するためのフローチャートである。一連の動作が開始されると、負荷モニタモジュール11は、図9に示すフローチャートまたは図10に示すフローチャートに従って許容サイズTQLを演算する(ステップS81)。
そして、負荷モニタモジュール11は、キューから出力されたパケット数をレートコントロール間隔で除算することによって出力パケットレート(Dequeueレート)を演算する(ステップS82)。
その後、負荷モニタモジュール11は、通知タイプtypeを“NOTIFY_TARGET_RATEに設定し(ステップS83)、キューからのパケットの出力に失敗した失敗回数(=Dequeue失敗数)をレートコントロール間隔で除算することによってincrement_valueを演算する(ステップS84)。
そして、負荷モニタモジュール11は、ステップS81、ステップS82およびステップS84において演算した各値を用いて、Dequeueレート−((キュー長−TQL)/レートコントロール間隔)+increment_valueによってvalue(=目標入力パケットレート)を演算する(ステップS85)。
そうすると、負荷モニタモジュール11は、タイプtypeおよびvalueをアップストリームスケジューラ79またはクロスレイヤモジュール21へ通知する(ステップS86)。その後、レートコントロールタイマが設定される(ステップS87)。
これによって、目標入力パケットレートを演算する動作が終了する。
図12は、目標出力パケットレートの計算方法を説明するためのフローチャートである。一連の動作が開始されると、上層レートコントローラ20は、現在のVoice17の出力レートと現在のVideo18の出力レートとの和を演算して現在のトータルレートを演算する(ステップS91)。
そして、上層レートコントローラ20は、現在のトータルレートから目標入力パケットレートを減算して増減レートΔを演算し(ステップS92)、初期のVoiceレートを初期のトータルレートで除算して相対トラフィックレート係数αを演算する(ステップS93)。
そうすると、上層レートコントローラ20は、現在のVoice17の出力レートがVoiceレートの最小値よりも大きく、かつ、現在のVideo18の出力レートがVideoレートの最小値よりも大きいか否かを判定する(ステップS94)。
そして、ステップS94において、現在のVoice17の出力レートがVoiceレートの最小値よりも大きく、かつ、現在のVideo18の出力レートがVideoレートの最小値よりも大きいと判定されたとき、上層レートコントローラ20は、上述した式(11)によって目標Voiceレートを演算し(ステップS95)、上述した式(12)によって目標Videoレートを演算する(ステップS96)。
一方、ステップS94において、現在のVoice17の出力レートがVoiceレートの最小値以下である、または現在のVideo18の出力レートがVideoレートの最小値以下であると判定されたとき、上層レートコントローラ20は、増減レートΔが0よりも大きいか否かを更に判定する(ステップS97)。
そして、ステップS97において、増減レートΔが0よりも大きいと判定されたとき、上層レートコントローラ20は、現在のVoice17の出力レートがVoice17の最小値よりも大きいか否かを更に判定する(ステップS98)。ステップS98において、現在のVoice17の出力レートがVoice17の最小値よりも大きいと判定されたとき、上層レートコントローラ20は、上述した式(13)によって、目標Voiceレートを演算し(ステップS99)、上述した式(14)によって目標Videoレートを演算する(ステップS100)。
一方、ステップS98において、現在のVoice17の出力レートがVoice17の最小値以下であると判定されたとき、上層レートコントローラ20は、上述した式(15)によって目標Voiceレートを演算し(ステップS101)、上述した式(16)によって目標Videoレートを演算する(ステップS102)。
一方、ステップS97において、増減レートΔが0よりも大きくない、即ち、増減レートが0以下であると判定されたとき、上層レートコントローラ20は、上述した式(17)によって目標Voiceレートを演算し(ステップS103)、上述した式(18)によって目標Videoレートを演算する(ステップS104)。
そして、ステップS96、ステップS100、ステップS102およびステップS104のいずれかの後、上層レートコントローラ20は、目標VoiceレートがVoiceレートの最小値よりも小さいか否かを判定し(ステップS105)、目標VoiceレートがVoiceレートの最小値よりも小さいとき、目標VoiceレートをVoiceレートの最小値に設定する(ステップS106)。その後、一連の動作は、ステップS107へ移行する。
一方、ステップS105において、目標VoiceレートがVoiceレートの最小値よりも小さくないと判定されたとき、またはステップS106の後、上層レートコントローラ20は、目標VideoレートがVideoレートの最小値よりも小さいか否かを更に判定し(ステップS107)、目標VideoレートがVideoレートの最小値よりも小さいとき、目標VideoレートをVideoレートの最小値に設定する(ステップS108)。その後、一連の動作は、ステップS109へ移行する。
一方、ステップS107において、目標VideoレートがVideoレートの最小値よりも小さくないと判定されたとき、またはステップS108の後、上層レートコントローラ20は、変更した目標出力パケットレートをVoice17へ通知し(ステップS109)、変更した目標出力パケットレートをVideo18へ通知する(ステップS110)。そして、一連の動作は、終了する。
図13は、図1に示す下層レートコントローラ12における目標出力パケットレートの計算方法を説明するためのフローチャートである。下層レートコントローラ12は、信号Rate_signalで通知された目標出力パケットレートを該当キュー(キュー8,9のいずれか)の目標出力パケットレートとして設定する(ステップS111)。そして、一連の動作は、終了する。
図14は、図1に示すダウンストリームスケジューラ10における動作を説明するためのフローチャートである。一連の動作が開始されると、ダウンストリームスケジューラ10は、前回、パケットを取り出した(Dequeueした)キューの次のキュー(キュー8,9のいずれか)を操作対象のターゲットキューとする(ステップS121)。
そして、ダウンストリームスケジューラ10は、ターゲットキューの状態がロック状態であるか否かを判定する(ステップS122)。ステップS122において、ターゲットキューの状態がロック状態であると判定されたとき、次のキューをターゲットキューとし(ステップS123)、ターゲットキューのステータスを既にチェックしているか否かを判定する(ステップS124)。
そして、チェック済みであれば、一連の動作は、ステップS126へ移行し、チェック済みではない場合は、ステップS122へ戻る。
一方、ステップS122において、ターゲットキューの状態がロックではない(=アンロック)状態であれば、ダウンストリームスケジューラ10は、ターゲットキュー(キュー4〜6のいずれか)からパケットを取り出し(ステップS125)、一連の動作は、ステップS126へ移行する。
以上、パケットの取得処理が終了すると、ダウンストリームスケジューラ10は、全ての空のキューに対して、アップストリームスケジューラ7へパケットのDequeue要求の処理を開始する。
パケットのDequeue要求の処理は、ステップS124の判定がYESとなった場合、またはステップS125が終了したときに、ターゲットキューが空であるか否かを判定するステップS126から開始される。
ステップS126において、ターゲットキューが空であると判定された場合、ダウンストリームスケジューラ10は、アップストリームスケジューラ7へターゲットキューに関してパケットのDequeue要求を送信し(ステップS127)、一連の動作は、ステップS128へ移行する。
そして、ステップS126において、ターゲットキューが空ではないと判定された場合、またはステップS127の後、ダウンストリームスケジューラ10は、ターゲットキューを次のキューに設定する(ステップS128)。
その後、ダウンストリームスケジューラ10は、ターゲットキューが空であるかについてチェック済みか否かを判定する(ステップS129)。ステップS129において、ターゲットキューがチェック済みでないと判定された場合、一連の動作は、ステップS126へ戻り、ステップS129において、ターゲットキューが空であるかについてチェック済みであると判定されるまで、上述したステップS126〜ステップS129が繰り返し実行される。そして、ステップS129において、ターゲットキューが空であるかについてチェック済みであると判定されると、一連の動作は終了する。
このように、ダウンストリームスケジューラ10は、キューの状態をチェックし(ステップS122参照)、アンロック状態のキューがあれば、保持されたパケットを取り出す(ステップS125参照)。更に、キュー8,9の全てに対して、キューが空であるか否かをチェックし(ステップS126参照)、キューが空であれば、アップストリームスケジューラ7に対してパケットの出力を要求する(ステップS127参照)。
図15は、図14によってダウンストリームスケジューラ10からパケットのDequeue要求を受けたときの図1に示すアップストリームスケジューラ7における動作を説明するためのフローチャートである。一連の動作が開始されると、アップストリームスケジューラ7は、前回、パケットを出力した(Dequeueした)アップストリームキューの次のキューをチェックのターゲットキューとする(ステップS131)。
そして、アップストリームスケジューラ7は、ターゲットキューを既にチェックしたか否かを判定し(ステップS132)、チェックしていないと判定したとき、先頭パケットの送信IPアドレスをチェックする(ステップS133)。
そうすると、アップストリームスケジューラ7は、チェックしたIPアドレスが、要求があったIPアドレスと一致するか否かを判定し(ステップS134)、チェックしたIPアドレスが、要求があったIPアドレスと一致しないとき、次にチェックするキューを取得する(ステップS135)。そして、一連の動作は、ステップS132へ戻り、ステップS134において、チェックしたIPアドレスが、要求があったIPアドレスと一致すると判定されるまで、上述したステップS132〜ステップS134が繰り返し実行される。
ステップS134において、チェックしたIPアドレスが、要求があったIPアドレスと一致すると判定されると、アップストリームスケジューラ7は、キューからパケットを取得し(ステップS136)、同一のIPアドレスに関して、目標入力パケットレートの追加依頼が有ったか否かを判定する(ステップS137)。そして、目標入力パケットレートの追加依頼が有ったと判定されたとき、アップストリームスケジューラ7は、追加依頼された目標入力パケットレートをパケットに追加する(ステップS138)。
ステップS137において、目標入力パケットレートの追加依頼が無かったと判定されたとき、またはステップS138の後、アップストリームスケジューラ7は、パケットをキュー8または9(ダウンストリームキュー)に入れる(ステップS139)。
そして、ステップS132において、ターゲットキューがチェック済みであると判定されたとき、またはステップS139の後、一連の動作は終了する。
上述した図8から図11に示すフローチャートは、図5および図6に示すフローチャートのステップS4において実行される。
また、上述した図12に示すフローチャートは、図5に示すフローチャートのステップS8〜ステップS10において実行される。
更に、上述した図13に示すフローチャートは、図7に示すフローチャートのステップS23において実行される。
更に、上述した図14に示すフローチャートは、図6に示すフローチャートのステップS13〜ステップS15および図7に示すフローチャートのステップS28およびステップS32において実行される。
更に、上述した図15に示すフローチャートは、図6に示すフローチャートのステップS16〜ステップS18および図7に示すフローチャートのステップS33〜ステップS34において実行される。
上述したように、通信装置100で生成されたパケットを保持するキュー5の負荷(=保持パケット数H_Pkt)がキュー5の許容サイズTQLから掛け離れたとき、通信装置100のアプリケーション(Voice17およびVideo18)がキュー5へ出力するパケットの出力パケットレートを制御してキュー5に保持された保持パケット数H_Pktをキュー5の許容サイズTQLに近づける。また、通信装置100以外の通信装置101,102から送信されたパケットを保持する通信装置100のキュー4,6の負荷(=保持パケット数H_Pkt)がキュー4,6の許容サイズTQLから掛け離れたとき、通信装置101,102のキュー8,9からのパケットの出力パケットレートを制御して通信装置100のキュー4,6に保持された保持パケット数H_Pktをキュー4,6の許容サイズTQLに近づける。
そして、この通信装置100におけるアプリケーション(Voice17およびVideo18)からキュー5へのパケットの出力パケットレートの制御と、通信装置101,102における通信装置101,102から通信装置100へのパケットの出力パケットレートの制御を行なうことによって、各通信装置100〜102においてキュー4〜6に保持される保持パケット数H_Pktがキュー4〜6の許容サイズTQLに近づき、各通信装置100〜102における負荷が軽減される。その結果、通信装置100〜102からなるアドホックネットワークを安定化できる。
[実施の形態2]
図16は、実施の形態2による通信装置の構成を示す概略図である。実施の形態2による通信装置100Aは、図1に示す通信装置100のリンクレイヤクラシファイア2を削除し、負荷モニタモジュール11を負荷モニタモジュール11Aに代え、クロスレイヤモジュール21をクロスレイヤモジュール21Aに代えたものであり、その他は、通信装置100と同じである。
負荷モニタモジュール11Aは、負荷モニタモジュール11と同じ方法によってキュー4〜6における負荷をモニタし、他の通信装置から受信したパケットを保持するキュー4,6への目標入力パケットレートを他の通信装置へ通知する場合も、目標入力パケットレートを含む信号Rate_signalをクロスレイヤモジュール21へ送信する。その他、負荷モニタモジュール11Aは、負荷モニタモジュール11と同じ機能を果たす。
クロスレイヤモジュール21Aは、他の通信装置へ通知する目標入力パケットレートを含む信号Rate_signalを負荷モニタモジュール11Aから受信すると、上述した信号Rate_signalを含む専用パケットPKT_Dを生成し、その生成した専用パケットPKT_Dをルーティングモジュール14へ送信する。ルーティングモジュール14は、専用パケットPKT_Dを受信すると、その受信した専用パケットPKT_Dをトラフィッククラシファイア3を介してキュー5へ入れる。
このように、実施の形態2においては、目標入力パケットレートの他の通信装置への通知は、専用パケットPKT_Dを用いて行なわれる。
なお、実施の形態2においては、図2に示す通信装置101,102も、図16に示す通信装置100Aと同じ構成からなる。
図17および図18は、それぞれ、目標入力パケットレートを他の通信装置へ通知する動作を説明するための実施の形態2における第1および第2の概念図である。なお、図17および図18においては、通信装置100Aが通信装置101へ目標入力パケットレートを通知する場合について説明する。
通信装置100Aの負荷モニタモジュール11Aは、キュー4(通信装置101から受信したパケットを保持するキュー)における保持パケット数H_Pktがキュー4の許容サイズTQLから掛け離れていることを検出し、上述した方法でキュー4への目標入力パケットレートを演算する。
そして、通信装置100Aの負荷モニタモジュール11Aは、その演算した目標入力パケットレート(=Target Enqueue Rate)と、NOTIFY_TARGET_RATEと、Load Generation IDとを含む信号Rate_signal=[NOTIFY_TARGET_RATE/Target Enqueue Rate/Load Generation ID]を生成し、その生成した信号Rate_signalをクロスレイヤモジュール21Aへ送信する。通信装置100Aのクロスレイヤモジュール212Aは、信号Rate_signalを負荷モニタモジュール11Aから受信する。
そうすると、通信装置100Aのクロスレイヤモジュール21Aは、その受信した信号Rate_signalと、Requester IDである通信装置100AのIPアドレスとを含む専用パケットPKT_Dを生成し、その生成した専用パケットPKT_Dをルーティングモジュール14へ送信する。
通信装置100Aのルーティングモジュール14は、クロスレイヤモジュール21Aから専用パケットPKT_Dを受信すると、その受信した専用パケットPKT_Dをトラフィッククラシファイア3を介してキュー5へ入れる。
そして、通信装置100Aのアップストリームスケジューラ7は、ダウンストリームスケジューラ10からのパケットの出力要求に応じて、キュー5に保持された専用パケットPKT_Dを読み出してキュー8(通信装置101宛てのパケットを保持するキュー)に入れる。
通信装置100Aのキュー8は、アンロック状態にある場合にMACレイヤモジュール1からパケットの出力要求を受けると、専用パケットPKT_DをMACレイヤモジュール1へ送信し、MACレイヤモジュール1は、専用パケットPKT_Dを通信装置101へ送信する(図17参照)。
通信装置101のMACレイヤモジュール1は、専用パケットPKT_Dを通信装置100Aから受信し、専用パケットPKT_Dをネットワークレイヤクラスファイア13へ送信する。
通信装置101のネットワークレイヤクラスファイア13は、専用パケットPKT_Dを受け、その受けた専用パケットPKT_Dをクロスレイヤモジュール21Aへ送信する。
通信装置101のクロスレイヤモジュール21Aは、専用パケットPKT_Dを受信すると、その受信した専用パケットPKT_Dから信号Rate_signal=[NOTIFY_TARGET_RATE/Target Enqueue Rate/Load Generation ID/Requester ID]を取り出す。そして、通信装置101のクロスレイヤモジュール21Aは、その取り出した信号Rate_signalを下層レートコントローラ12へ送信する(図18参照)。
上述した動作によって、通信装置100Aにおけるキュー4の負荷を発生させている通信装置101へ目標入力パケットレートが専用パケットPKT_Dによって送信される。そして、目標入力パケットレートを受信した通信装置101においては、目標入力パケットレートは、上述したように下層レートコントローラ12へ送信されるので、下層レートコントローラ12は、目標入力パケットレート=目標出力パケットレートとして目標出力パケットレートを演算し、その演算した目標出力パケットレートになるように通信装置100A宛てのパケットを保持するキュー(キュー8,9のいずれか)の出力パケットレートを制御する。
これによって、通信装置101から通信装置100Aへ送信されるパケットが増減し、通信装置100Aのキュー4に保持された保持パケット数H_Pktがキュー4の許容サイズTQLに徐々に近づく。
図19は、目標入力パケットレートを他の通信装置へ通知する動作を説明するための実施の形態2におけるフローチャートである。図19に示すフローチャートは、図5に示すフローチャートのステップS7〜ステップS10をステップS140,S141に代えたものであり、その他は、図5に示すフローチャートと同じである。
一連の動作が開始されると、上述したステップS1〜ステップS5が順次実行され、負荷モニタモジュール11Aは、目標入力パケットレートを含む信号Rate_signalをクロスレイヤモジュール21Aへ送信する。
そして、クロスレイヤモジュール21Aは、負荷モニタモジュール11Aから信号Rate_signalを受信し、その受信した信号Rate_signalと、宛先の通信装置のIPアドレス(Load Generation ID)とRequester IDとして自端末のIPアドレスとを含む専用パケットPKT_Dを生成する(ステップS140)。そして、クロスレイヤモジュール21Aは、その生成した専用パケットPKT_Dをルーティングモジュール14へ送信する(ステップS141)。
ルーティングモジュール14は、クロスレイヤモジュール21Aから受信した専用パケットPKT_Dをトラフィッククラシファイア3を介してキュー5に入れ、アップストリームスケジューラ7は、キュー5に保持された専用パケットPKT_Dをキュー8に入れ、ダウンストリームスケジューラ10は、キュー8がアンロック状態である期間にキュー5から専用パケットPKT_Dを読み出してMACレイヤモジュール1へ送信する。そして、MACレイヤモジュール1は、専用パケットPKT_Dを通信装置101へ送信する。これによって、一連の動作は、終了する。
図20は、図16に示すクロスレイヤモジュール21Aにおける動作を説明するためのフローチャートである。実施の形態2においては、通信装置100Aで生成されたパケットを保持するキュー5および他の通信装置で生成されたパケットを保持するキュー4,6のいずれで負荷が発生しても、各キュー4〜6へのパケットの目標入力パケットレートは、負荷モニタモジュール11Aからクロスレイヤモジュール21Aへ送信され、クロスレイヤモジュール21Aは、目標入力パケットレートを通信装置100Aの上層レートコントローラ20または他の通信装置へ送信する。図20は、目標入力パケットレートのクロスレイヤモジュール21Aにおける処理を説明するためのフローチャートである。
一連の動作が開始されると、クロスレイヤモジュール21Aは、負荷モニタモジュール11Aから信号Rate_signal=[NOTIFY_TARGET_RATE/Target Enqueue Rate/Load Generation ID]を受信し、その受信した信号Rate_signalに含まれる“LOAD Generation ID”に基づいて、負荷を発生して通信装置をチェックする(ステップS151)。
そして、クロスレイヤモジュール21Aは、負荷元が他の通信装置か否かを判定し(ステップS152)、負荷元が他の通信装置ではないとき、信号Rate_signal=[NOTIFY_TARGET_RATE/Target Enqueue Rate]を上層レートコントローラ20へ通知する(ステップS153)。
一方、ステップS152において、負荷元が他の通信装置であると判定されたとき、クロスレイヤモジュール21Aは、送信先アドレスDEST_ADD、Requester ID=own ID、Notification Type=NOTIFY_TARGET_RATEおよびRateinfo=Target Enqueue Rateを含む専用パケットPKT_Dを生成し(ステップS154)、その生成した専用パケットPKT_Dをルーティングモジュール14へ送信する(ステップS155)。
そして、ステップS153またはステップS155の後、一連の動作は、終了する。
図21は、専用パケットPKT_Dを受信した通信装置における動作を説明するためのフローチャートである。一連の動作が開始されると、MACレイヤモジュール1は、目標入力パケットレートを含む専用パケットPKT_Dを受信し、その受信した専用パケットPKT_Dをネットワークレイヤクラシファイア13へ送信する(ステップS161)。
そして、ネットワークレイヤクラシファイア13は、MACレイヤモジュール1から専用パケットPKT_Dを受信し、その受信した専用パケットPKT_Dをクロスレイヤモジュール21Aへ送信する(ステップS162)。
クロスレイヤモジュール21Aは、専用パケットPKT_Dを受信すると、その受信した専用パケットPKT_Dから目標入力パケットレートを含む信号Rate_signalを取り出し、その取り出した信号Rate_signalを下層レートコントローラ12へ送信する(ステップS163)。
下層レートコントローラ12は、信号Rate_signalを受信すると、その受信した信号Rate_signalから目標入力パケットレートを読み出し、その読み出した目標入力パケットレートを用いて、上述した方法(図13に示すフローチャート)によって、目標出力パケットレートを演算し、その演算した目標出力パケットレートの逆数を演算してロック期間Lck_time(=ロックインターバル)を計算する(ステップS164)。
そして、レートコントロールタイマが満了すると(ステップS165)、下層レートコントローラ12は、ロック状態にあるキュー(ダウンストリームキュー)の状態をロック状態からアンロック状態に変える(ステップS166)。その後、レートコントロールタイマが設定される(ステップS167)。
一方、MAC層のMACレイヤモジュール1は、チャネルアクセスを行ない、パケットの送信が可能な状態になると、パケットの出力要求(Dequeue要求)をダウンストリームスケジューラ10へ送信する(ステップS168)。そして、ダウンストリームスケジューラ10は、パケットの出力要求(Dequeue要求)に応じて、アンロック状態にあるキュー(ダウンストリームキュー)から1個のパケットを取り出す(ステップS169)。
また、ダウンストリームスケジューラ10は、1個のパケットを取り出したキューの状態をロック状態に設定するためのキューロック要求を下層レートコントローラ12へ送信する(ステップS170)。
下層レートコントローラ12は、ダウンストリームスケジューラ10からのキューロック要求に応じて、1個のパケットを出力したキュー(UNLOCK_queueID)の状態をロック状態に変更する(ステップS171)。
その後、ダウンストリームスケジューラ10は、ステップS169において、キューから取り出した1個のパケットをMACレイヤモジュール1へ送信するとともに(ステップS172)、パケットが空になったキューを指定し、パケットの出力要求(Dequeue要求)をアップストリームスケジューラ7へ送信する(ステップS173)。
そして、アップストリームスケジューラ7は、パケットの出力要求(Dequeue要求)に応じて、キュー4〜6(アップストリームキュー)から1個のパケットを取り出し(ステップS174)、その取り出した1個のパケットを空になったキューへ入れる(ステップS175)。これによって、一連の動作が終了する。
上述したように、目標入力パケットレートを含む専用パケットPKT_Dを受信した通信装置においては、受信した目標入力パケットレートに応じたロック期間Lck_time(ロックインターバル)が演算され、その演算されたたロック期間Lck_time(ロックインターバル)によって、キュー8,9からMACレイヤモジュール1(MAC層)へのパケットの出力パケットレートが制御される。
なお、図21においては、通信装置101が目標入力パケットレートを含む専用パケットPKT_Dを受信した場合について説明したが、通信装置102が目標入力パケットレートを含む専用パケットPKT_Dを受信した場合も、図21に示すフローチャートに従ってパケットの出力パケットレートの制御が行なわれる。
上述したように、通信装置100Aで生成されたパケットを保持するキュー5の負荷(=保持パケット数H_Pkt)がキュー5の許容サイズTQLから掛け離れたとき、通信装置100Aのアプリケーション(Voice17およびVideo18)がキュー5へ出力するパケットの出力パケットレートを制御してキュー5に保持された保持パケット数H_Pktをキュー5の許容サイズTQLに近づける。また、通信装置100A以外の通信装置101,102から送信されたパケットを保持する通信装置100Aのキュー4,6の負荷(=保持パケット数H_Pkt)がキュー4,6の許容サイズTQLから掛け離れたとき、通信装置101,102のキュー8,9からのパケットの出力パケットレートを制御して通信装置100Aのキュー4,6に保持された保持パケット数H_Pktをキュー4,6の許容サイズTQLに近づける。
そして、この通信装置100Aにおけるアプリケーション(Voice17およびVideo18)からキュー5へのパケットの出力パケットレートの制御と、通信装置101,102における通信装置101,102から通信装置100Aへのパケットの出力パケットレートの制御を行なうことによって、各通信装置100A,101,102においてキュー4〜6に保持される保持パケット数H_Pktがキュー4〜6の許容サイズTQLに近づき、各通信装置100A,101,102における負荷が軽減される。その結果、通信装置100A,101,102からなるアドホックネットワークを安定化できる。
その他は、実施の形態1と同じである。
上記においては、キュー8,9は、1個のパケットを保持すると説明したが、この発明においては、これに限らず、キュー8,9は、1個以外の任意に決定された一定個数のパケットを保持するようにしてもよい。つまり、キュー8,9は、ダウンストリームスケジューラ10が、キュー8,9が空であるか否かを容易に判定できる個数のパケットを保持すればよい。
なお、キュー4〜6は、「入力バッファ」を構成し、キュー4〜6に保持された保持パケット数H_Pktを検出する負荷モニタモジュール11,11Aは、「検出手段」を構成する。
また、負荷モニタモジュール11、上層レートコントローラ20、下層レートコントローラ12およびアップストリームスケジューラ7は、「制御手段」を構成し、負荷モニタモジュール11A、上層レートコントローラ20および下層レートコントローラ12は、「制御手段」を構成する。
更に、Voice17およびVideo18は、「生成手段」を構成する。
更に、キュー5は、「第1の入力バッファ」を構成し、キュー4,6は、「第2の入力バッファ」を構成する。
更に、目標入力パケットレートを演算する負荷モニタモジュール11,11Aは、「第1の演算手段」を構成し、目標入力パケットレートを上層レートコントローラ20へ通知するクロスレイヤモジュール21,21Aは、「通知手段」を構成し、目標入力パケットレートを用いて目標出力パケットレートを演算する上層レートコントローラ20および下層レートコントローラ12は、「第2の演算手段」を構成し、演算した目標出力パケットレートをVoice17およびVideo18へ送信する上層レートコントローラ20は、「出力手段」を構成する。
更に、他の通信装置へ通知する目標入力パケットレートを演算する負荷モニタモジュール11は、「演算手段」を構成し、他の通信装置へ通知する目標入力パケットレートをパケットに入れるアップストリームスケジューラ7は、「通知手段」を構成する。
更に、専用パケットPKT_Dを生成して他の通信装置へ送信するクロスレイヤモジュール21Aは、「通知手段」を構成する。
MACレイヤモジュール1は、「送信手段」を構成し、キュー8,9は、「出力バッファ」を構成し、下層レートコントローラ12は、「通信制御手段」を構成する。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
1 MACレイヤモジュール、2 リンクレイヤクラシファイア、3 トラフィッククラシファイア、4〜6,8,9 キュー、7 アップストリームスケジューラ、10 ダウンストリームスケジューラ、11,11A 負荷モニタモジュール、12 下層レートコントローラ、13 ネットワークレイヤクラシファイア、14 ルーティングモジュール、15 UDP、16 TCP、17 Voice、18 Video、19 Text、20 上層レートコントローラ、21,21A クロスレイヤモジュール、100,100A,101,102 通信装置。