[実施の形態1]
本発明の第1の実施の形態に係るシステムの概要を図1に示す。図1におけるデータ収集配信システムは、複数のノードA乃至Cを含む。ノードA及びBは、センサなどのデータソースからデータを受信して、ノードCに送信する。ノードCは、データを処理する1又は複数のアプリケーションに出力する。
本実施の形態に係るデータ収集配信システムに含まれるノードの数は3に限定されるものではなく、データソースからアプリケーションまでの間に設けられるノードの段数も2に限定されるものではなく、2以上であればよい。すなわち、本実施の形態では、複数段構成になるようにノードが接続される。
ここで以下の説明で用いる変数の定義について説明しておく。ここでは、以下の説明を分かりやすくするために、図2に示すように、ノードNda乃至Ndcによる3段構成になっているものとする。
図2に示すように、ノードNdaとノードNdbとの間にはリンクLa,bが設けられ、ノードNdbとノードNdcとの間にはリンクLb,cが設けられている。そして、リンクLa,bのデータ転送遅延(レイテンシ)をla,bと表し、リンクLb,cのデータ転送遅延をlb,cと表す。
このとき、データdj(データのサイズはsjバイトと表すものとする)の転送ルートが[La,b,Lb,c]であるとすると、ノードNdaからノードNdcまでのエンドツーエンド(end to end)のタイムリミット(time limit。到達期限又は送達期限とも呼ぶ。)をtlim,jと表すものとする。また、データdjの、ノードNdaでの送信期限tlim,j,aは、tlim,j−sum([la,b,lb,c])(sumは総和を表す)となる。同様に、データdjの、ノードNdbでの送信期限tlim,j,bは、tlim,j−lb,cとなる。
なお、リンクLa,bの帯域(bps(bit per second))をca,bと表す。
また、以下で説明するタイムスロットについても、図3を用いて説明する。タイムスロットの幅をΔtと表し、i番目のタイムスロットをtiと表す。また、1度にスケジューリングを行うタイムスロットの数をwと表すと、スケジューリングの幅(すなわちスケジューリングウィンドウ)はwΔtとなる。なお、ノードNdxにおいてスケジューリング要求を行う処理の周期(起動1と起動2の間隔、起動2と起動3の間隔)をTSR,xと表し、スケジューリング要求を行う処理の起動から、スケジューリング対象のスケジューリングウインドウの先頭時刻との差をMxと表すものとする。なお、ノードNdxにおいて、スケジューリング要求を処理する側の処理の周期をTTLS-inter,xと表すものとする。
本実施の形態では、図4Aで示すように、ノードAでの送信スケジュールと、ノードBでの送信スケジュールとを、ノードCに送信する。送信スケジュールは、スケジューリングウィンドウ(ここではw=4)内の各スロットにおいて送信すべきデータに関する情報を含んでいる。具体的には、宛先までの送達期限tlim,j及び送信元のノードにおける送信期限tlim,j,xを含む。図4Aでは、4つのタイムスロットの各々に割り当てられたデータをブロック状に示しており、以下1塊のデータをデータブロックと呼ぶものとする。
ノードCは、ノードA及びBから送信スケジュールを受信すると、図4Bに示すように送信スケジュールを重ね合わせて、各タイムスロットにおいてノードCの受信リソース以内に送信されるデータが収まっているか否かを判断する。図4Bの例では、6つのデータブロックまで1タイムスロット内で受信できるものとする。そうすると3つ目のタイムスロットでは、1つのデータブロックが受信できないことが分かる。そうすると、3つ目のタイムスロットに割り当てられているデータブロックを、tlim,j,x及びtlim,jでソートし、データブロックの優先順位付けを行う。ノードCは、優先順位に基づきデータブロックを選択して、他のタイムスロットにスケジュールし直すが、図4Cに示すように、ここでは受信リソースが余っている1つ手前のタイムスロットに、選択されたデータブロックを割り当てる。そして、ノードCは、このようなスケジューリングの結果をノードA及びノードBに返信する。図4Dに示すように、ノードBのスケジューリング結果は、元の送信スケジュールと同じであるが、ノードAのスケジューリング結果は、2番目のタイムスロットと3番目のタイムスロットとで異なっている。ノードA及びBは、このようなスケジューリング結果に従って、データブロックを送信する。
次に、このような処理を行うためのノードA乃至Cの構成例を図5に示す。ノードは、データ受信部101と、第1スケジューラ102と、リンクデータ格納部103と、データ転送ルート格納部104と、レイテンシデータ格納部105と、データキュー106と、データ送信部107と、スケジュールネゴシエータ108と、第2スケジューラ109と、リソース管理データ格納部110と、スケジューリングデータ格納部111とを有する。
データ受信部101は、他のノードやデータソースからメッセージを受信する。なお、ノード自身が、メッセージに含まれるデータに対して処理を行う場合には、データ受信部101の前段で処理を行うものとする。本実施の形態において、データ受信部101が受信するメッセージのフォーマット例を図6及び図7に示す。データソースから受信したメッセージの場合には、図6に示すように、データのID(dj)と、データの宛先次ノード(直接の送信先のノード)のIDと、データ本体とを含む。データ本体はデータのIDを含む場合もある。また、宛先次ノードのIDではなく、宛先次ノードを特定するためのキーを含むようにして、当該キーから宛先次ノードのIDを特定するためのデータ構造を利用して宛先次ノードのIDを特定するようにしても良い。
なお、他のノードから受信したメッセージの場合には、図7に示すように、データのIDと、データの宛先次ノードのIDと、データdjの宛先までの送達期限tlim,jと、データ本体とを含む。
レイテンシデータ格納部105は、図8に示すように、データのID毎に、当該データ発生から宛先までの送達に許容される遅延時間を格納している。
また、リンクデータ格納部103は、図9に示すように、リンクID毎に、送信元(Source)ノードのIDと、宛先(Destination)ノードのIDと、当該リンクの遅延時間とを格納している。
また、データ転送ルート格納部104は、図10に示すように、データのID毎に、当該データが経由する転送ルートのリンクID配列([L1,2,L2,3,...,Ln-1,n])を格納している。
第1スケジューラ102は、リンクデータ格納部103とデータ転送ルート格納部104とレイテンシデータ格納部105とを用いて、受信したメッセージに対して宛先までの送達期限(到着期限)を特定し、本ノードにおける送信期限を特定し、メッセージのデータと共に、データキュー106に格納する。
データキュー106のデータ構造例を図11A及び図11Bに示す。図11Aの例では、開始時刻と終了時刻とで特定されるタイムスロット毎に、当該タイムスロットのためのキューへのポインタ(又はリンク)が登録されるようになっている。キューには、当該キューに投入されたメッセージ(データブロックに対応)が格納される。
図11Bに、キューに投入されたデータのデータフォーマット例を示す。図11Bの例では、データのIDと、宛先までの送達期限と、本ノードにおける送信期限と、データ本体又はデータへのリンクとが含まれる。
データ送信部107は、データキュー106に規定されているタイムスロット毎に、当該タイムスロットに割り当てられているメッセージを宛先ノードやアプリケーションに送信する。
スケジュールネゴシエータ108は、スケジューリング要求部1081と、スケジュール受信部1082と、リスケジューラ1083とを有する。
スケジューリング要求部1081は、データキュー106に格納されているデータから、送信スケジュールを含むスケジューリング要求を生成し、メッセージ送信先のノードに送信する。スケジュール受信部1082は、メッセージ送信先のノードからスケジューリング結果を含むスケジュール通知を受信し、リスケジューラ1083に出力する。リスケジューラ1083は、受信したスケジューリング結果に従って、データキュー106の内容を更新する。
また、第2スケジューラ109は、要求受信部1091と、スケジューリング処理部1092と、通知部1093とを有する。
要求受信部1091は、他のノードからスケジューリング要求を受信してスケジューリングデータ格納部111に格納し、スケジューリング処理部1092に出力する。スケジューリング処理部1092は、複数ノードからのスケジューリング要求に基づき、リソース管理データ格納部110に格納されているデータを用いて、各ノードの送信スケジュールを変更する。
リソース管理データ格納部110には、例えば図12及び図13で示すようなデータフォーマットでデータが格納される。すなわち、図12の例では、開始時刻と終了時刻とで特定されるタイムスロット毎に、ノードの受信リソースの使用済み数と空き数と最大数と、当該タイムスロットについてのキュー(データリストとも呼ぶ)へのポインタとが格納される。この例では、タイムスロットの幅は1秒で、10データブロック(すなわち10メッセージ)を1タイムスロットで受信できるようになっている。
キューには、当該キューに投入された、データブロックに関する情報が格納される。但し、この情報は、図13に示すように、データブロック毎に、データのIDと、送達期限tlim,jと、要求元ノードxの送信期限tlim,j,xとを含む。
また、スケジューリングデータ格納部111には、例えば図14に示すようなデータフォーマットでデータが格納される。すなわち、スケジューリング要求元のノードのID毎に、スケジューリング要求本体又はそれへのリンクと、スケジューリング結果とが格納される。
通知部1093は、スケジューリング処理部1092によって生成されたスケジューリング結果を、各ノードへ送信する。
次に、図15乃至図28を用いて、ノードの処理内容について説明する。
まず、図15を用いてメッセージ受信時の処理内容について説明する。なお、アンダーバーは、表記の問題を解決するために下付け文字を表すものとする。
データ受信部101は、データ(dj)を含むメッセージを受信し、第1スケジューラ102に出力する(ステップS1)。自ノードがデータソースに接続されている最上流ノードであれば(ステップS3:Yesルート)、第1スケジューラ102は、データのID「dj」でレイテンシデータ格納部105を検索して、宛先までに許容される遅延時間を読み出して、送達期限tlim,jを取得する(ステップS5)。例えば、現時刻+遅延時間にて送達期限を算出する。なお、レイテンシデータ格納部105に送達期限そのものが格納されていれば、それを用いる。一方、自ノードが最上流ノードでなければ(ステップS3:Noルート)、処理はステップS9に移行する。
また、第1スケジューラ102は、受信したメッセージヘッダに送達期限tlim,jを追加する(ステップS7)。これによって、図7に示すようなメッセージが生成される。
さらに、第1スケジューラ102は、データ転送ルート格納部104をdjで検索して転送ルート[Lx,y]を読み出す(ステップS9)。転送ルートは、リンクIDの配列データであるものとする。
そして、第1スケジューラ102は、転送ルート[Lx,y]の各リンクIDでレイテンシデータ格納部105を検索して、各リンクの遅延時間(レイテンシ)lx,yを読み出す(ステップS11)。
その後、第1スケジューラ102は、送達期限tlim,j及びレイテンシlx,yから、本ノードの送信期限tlim,j,xを算出する(ステップS13)。具体的には、tlim,j−Σlx,y(転送経路上の全リンクについての総和)によって計算する。
そして、第1スケジューラ102は、送信期限tlim,j,xから送出要求時刻treq,j,xを決定する(ステップS15)。tlim,j,x=treq,j,xの場合もあれば、一定のマージンαを考慮してtreq,j,x=tlim,j,x−αと設定する場合もある。なお、以下の説明では、説明を簡単にするため、送信期限=送出要求時刻とする。
そして、第1スケジューラ102は、送出要求時刻treq,j,xのタイムスロットに、メッセージを付加データと共に投入する(ステップS17)。図11Bに示すようなデータが格納される。
以上のような処理を、メッセージを受信する毎に実行する。
次に、図16乃至図20を用いて、スケジュールネゴシエータ108の処理内容について説明する。
まず、スケジュールネゴシエータ108は、時間間隔TSR,xの起動タイミングであるか否かを判断する(図16:ステップS21)。起動タイミングでなければ処理はステップS29に移行する。一方、起動タイミングであれば、スケジューリング要求部1081を起動させ、スケジューリング要求部1081は、今回のスケジューリングウィンドウを決定する(ステップS23)。具体的には、図3で説明したように、現在時刻tとすると、t+Mxからt+Mx+wΔtまでが今回のスケジューリングウィンドウとなる。なお、本実施の形態では、システム内の全ノードが同期しているものとする。
そして、スケジューリング要求部1081は、データキュー106から、スケジューリングウィンドウ内のデータ(データ本体を除く)を読み出し、スケジューリング要求を生成する(ステップS25)。
スケジューリング要求のデータフォーマット例を図17に示す。図17の例では、送信元ノードIDと、宛先ノードIDと、各タイムスロットのデータとが含まれる。各タイムスロットのデータは、当該タイムスロットの識別情報(例えば開始時刻−終了時刻)と、各データブロック(メッセージ)について、データのIDと、送達期限と、送信期限とが含まれる。
例えば、JSON(Javascript Object Notation)形式で具体値を入れると、図18に示すようになる。図18の例では、第1のタイムスロットについては2つのデータブロックに関するデータが含まれ、第2のタイムスロットについても2つのデータブロックに関するデータが含まれ、最後のタイムスロットについても2つのデータブロックに関するデータが含まれる。
その後、スケジューリング要求部1081は、スケジューリング要求を、データの送信先に送信する(ステップS27)。
そして、スケジュールネゴシエータ108は、処理終了が指示されたか判断し(ステップS29)、処理終了ではない場合には処理はステップS21に戻る。一方、処理終了であれば、処理を終了する。
このように複数のタイムスロットについてスケジューリング要求を行うことで、送信タイミングの調整が適切に行われるようになる。
次に、図19及び図20を用いて、スケジュール結果を受信した際の処理を説明する。
スケジュール受信部1082は、スケジュール結果を含むスケジュール通知を受信し(図19:ステップS31)、リスケジューラ1083に出力する。スケジュール通知のデータフォーマットは、図17及び図18に示したようなフォーマットである。
そして、リスケジューラ1083は、スケジュール通知を受信すると、スケジュール通知に従って、データキュー106におけるメッセージ(すなわちデータブロック)が投入されるタイムスロットを更新する処理を行う(ステップS33)。スケジュール通知で通知された送信スケジュールとスケジューリング要求における送信スケジュールとが一致する場合もあるので、その場合には特に処理は行わない。異なるタイムスロットに移動させられた場合には、そのタイムスロットのキューにエンキューする。そのタイムスロットのデータがなければ、この段階で生成する。
このようにすれば、送信先ノードにおいて調整された送信スケジュールを、データキュー106に反映させることができる。
次に、データ送信部107の処理内容について、図20を用いて説明する。
データ送信部107は、タイムスロット幅Δtの起動タイミングtになったか否かを判断する(図20:ステップS41)。起動タイミングtになっていない場合には、処理はステップS53に移行する。一方、起動タイミングtになると、データ送信部107は、データキュー106における時刻tからt+Δtのタイムスロットのキューから、メッセージ(すなわちデータブロック)を読み出す処理を行う(ステップS43)。
ステップS43でメッセージのデータを読み出すことができなければ(ステップS45:Noルート)、このタイムスロットについての処理は終了することになる。
一方、メッセージのデータを読み出すことができれば(ステップS45:Yesルート)、データ送信部107は、自ノードが転送経路の末端ノードであるか否かを判断する(ステップS47)。すなわち、アプリケーションにメッセージを出力するノードであるか否かを判断する。
そして、自ノードが末端ノードである場合には、データ送信部107は、読み出したメッセージに付加されている送達期限を削除する(ステップS49)。一方、自ノードが末端ノードでない場合には、処理はステップS51に移行する。
その後、データ送信部107は、読み出したメッセージを、宛先に送信する(ステップS51)。そして、データ送信部107は、処理終了であるか否かを判断し(ステップS53)、処理が終了でなければ処理はステップS41に戻る。一方、処理が終了であれば、処理を終了する。
このように送信先ノードによって決定された送信スケジュールに従ってメッセージを送信できるようになる。従って、送信先ノードでは、その受信リソースで受信できるだけのデータが送信される。よって、データ送信の遅延が抑制される。
次に、第2スケジューラ109の処理内容について、図21乃至図28を用いて説明する。
第2スケジューラ109の要求受信部1091は、データソースに近い各ノードから、スケジューリング要求を受信し、スケジューリング処理部1092に出力すると共に、スケジューリングデータ格納部111に格納する(図21:ステップS61)。
そして、第2スケジューラ109のスケジューリング処理部1092は、各スケジューリング要求を、各タイムスロットについて展開して、各タイムスロットでメッセージ数(データブロック数)を合算する(ステップS63)。この処理結果については、図12及び図13に示すように、リソース管理データ格納部110に格納される。
図22に本ステップの具体例を示す。図22の例では、ノードA乃至Cからスケジューリング要求を受信した場合を示しており、各々4つのタイムスロットについての送信スケジュールのデータが含まれる。このような送信スケジュールを、各タイムスロットについて重ね合わせると、図22の右側のようになる。このような状態を表すデータが、図12及び図13に示すようなデータフォーマットで格納される。この例では、1番目のタイムスロットは、受信リソースの上限である8つのデータブロックで満たされ、2番目のタイムスロットは受信リソースより少ない6つのデータブロックが割り当てられており、3番目のタイムスロットは受信リソースを超える9つのデータブロックが割り当てられており、4番目のタイムスロットは受信リソースより少ない7つのデータブロックが割り当てられている。
そうすると、スケジューリング処理部1092は、各タイムスロットで送信されるメッセージの数(データブロックの数)は、受信リソースの範囲内(すなわち、最大値以下)であるか否かを判断する(ステップS65)。各タイムスロットで送信されるメッセージの数が受信リソースの範囲内であれば、スケジューリング処理部1092は、スケジューリングデータ格納部111に格納されているスケジューリング要求の内容をそのまま含むスケジュール通知を、通知部1093に出力し、各要求元ノードに送信させる(ステップS67)。このような場合には、各ノードの送信スケジュールを変更せずとも受信できるためである。
そして、スケジューリング処理部1092は、各スケジュール通知の内容を、スケジューリングデータ格納部111に格納する(ステップS69)。また、スケジューリング処理部1092は、今回受信した各スケジュール要求を破棄する(ステップS71)。
一方、いずれかのタイムスロットのメッセージの数が受信リソースの範囲を超える場合には、処理は端子Aを介して図23の処理に移行する。
まず、スケジューリング処理部1092は、タイムスロットのカウンタnを1に初期化する(ステップS73)。そして、スケジューリング処理部1092は、n番目のタイムスロットのメッセージの数が受信リソースを超えているか判断する(ステップS75)。n番目のタイムスロットのメッセージの数が受信リソースの範囲内であれば、処理は端子Cを介して図26の処理に移行する。
一方、n番目のタイムスロットのメッセージの数が受信リソースを超えている場合には、スケジューリング処理部1092は、n番目のタイムスロット内のメッセージを、送信元ノードの送信期限を第1のキーとして、送達期限を第2のキーとしてソートする(ステップS77)。
図22の3番目のタイムスロットについて図24及び図25を用いて本ステップの具体例を説明する。なお、キュー(データリストとも呼ぶ)の上が先頭で下が末尾であるものとする。図24では、9つのメッセージ(データブロック)のうち1番目から4番目がノードAについてのメッセージであり、5及び6番目がノードBについてのメッセージであり、7番目から9番目がノードCについてのメッセージである。e2e_limは送達期限を表し、local_limはノードの送信期限を表すとする。上で述べたように、送信期限及び送達期限でこれらのメッセージをソートすると、図25のような結果が得られる。すなわち、同じタイムスロットに割り当てられているメッセージが送信期限及び送達期限から優先順位付けされることになる。
その後、スケジューリング処理部1092は、n番目のタイムスロットより前のタイムスロットに、受信リソースの空きがあるか判断する(ステップS79)。空きがなければ処理は端子Bを介して図26の処理に移行する。送信を前倒しできれば、データ送信遅延の可能性を抑制できるため、先に前のタイムスロットを判断する。
一方、n番目のタイムスロットより前のタイムスロットに空きがあれば、スケジューリング処理部1092は、n番目のタイムスロットの先頭から、空きのあるタイムスロットの末尾にメッセージを移動させる(ステップS81)。
図22に示した例では、3番目のタイムスロットより前の2番目のタイムスロットに空きがあるので、3番目のタイムスロットの先頭のメッセージを、2番目のタイムスロットの末尾に移動させる。
なお、2以上のメッセージが受信リソースの範囲を超える場合もある。この場合には、n番目のタイムスロットより前のタイムスロットの空き数だけ、n番目のタイムスロットの先頭からメッセージを取り出して、移動させる。3つのメッセージが受信リソースの範囲を超えるが、前のタイムスロットに2つしか空きがない場合には、2つだけメッセージを前のタイムスロットに移動させる。残りの1つは以下の処理で対応策が決定される。
そして、スケジューリング処理部1092は、n番目のスロットにはまだ受信リソースの範囲を超えるメッセージが割り当てられている状態であるか否かを判断する(ステップS83)。この条件を満たす場合には、処理は端子Bを介して図26の処理に移行する。
一方、n番目のスロットのメッセージの数が受信リソースの範囲内となった場合には、処理は端子Cを介して図26の処理に移行する。
図26の処理の説明に移行して、スケジューリング処理部1092は、n番目のタイムスロットより後のタイムスロットに空きがあるか否かを判断する(ステップS85)。空きがない場合には、処理はステップS91に移行する。
一方、n番目より後ろのスロットにタイムスロットに空きがある場合には、スケジューリング処理部1092は、n番目のタイムスロットの末尾から、空きのあるタイムスロットの先頭にメッセージを移動させる(ステップS87)。
図22に示した例で、3番目のタイムスロットより前に空きがないと仮定した場合、4番目のタイムスロットにも空きがあるので、3番目のタイムスロットの末尾のメッセージを、4番目のタイムスロットの先頭に移動させる。
なお、2以上のメッセージが受信リソースの範囲を超える場合もある。この場合には、n番目のタイムスロットより後のタイムスロットの空き数だけ、n番目のタイムスロットの末尾からメッセージを取り出して、移動させる。3つのメッセージが受信リソースの範囲を超えるが、後のタイムスロットに2つしか空きがない場合には、2つだけメッセージを後のタイムスロットに移動させる。残りの1つは後に処理される。
さらに、スケジューリング処理部1092は、n番目のタイムスロットにはまだ受信リソースの範囲を超えるメッセージが割り当てられている状態であるか否かを判断する(ステップS89)。この条件を満たさない場合には、処理はステップS95に移行する。
この条件を満たす場合には、スケジューリング処理部1092は、今回のスケジューリングウィンドウの後ろにタイムスロットを追加する(ステップS91)。そして、スケジューリング処理部1092は、n番目のスロットの末尾から、追加タイムスロットの先頭に、この段階で受信リソースの範囲を超えた分のメッセージを移動させる(ステップS93)。
このようにすれば、スケジューリングウィンドウの各タイムスロットにおいては、受信リソースの範囲内にメッセージの受信を抑制できるので、輻輳が抑制され、データ送信の遅延が抑制される。
そして、スケジューリング処理部1092は、カウンタnが、スケジューリングウィンドウ内のタイムスロット数w以上となったか判断する(ステップS95)。この条件を満たさない場合には、スケジューリング処理部1092は、nを1インクリメントして(ステップS97)、処理は端子Dを介して図23のステップS75に戻る。一方、nがw以上となると、処理は端子Eを介して図27の処理に移行する。
図27の処理の説明に移行して、スケジューリング処理部1092は、各要求元ノードについて、そのメッセージのスケジューリング結果(すなわち送信スケジュール)を抽出して、スケジュール通知を生成し、各要求元ノードへ通知部1093に送信させる(ステップS99)。
図28に示すように、ノードAでは、3番目のタイムスロットにおけるノードAのデータブロック(メッセージ)を、2番目のタイムスロットに移動させるので、ノードAに対するスケジュール通知では、1番目から4番目までのタイムスロットで均等にデータブロック(メッセージ)を送信するという送信スケジュールを指示するようになる。
そして、スケジューリング処理部1092は、各スケジュール通知の内容を、スケジューリングデータ格納部111に格納する(ステップS101)。また、スケジューリング処理部1092は、今回受信した各スケジュール要求を破棄する(ステップS103)。
このような処理を行えば、データの受信側のリソースの範囲内で送信元ノードからデータを受信できるようになり、輻輳が抑制され、データの遅延が抑制される。
[実施の形態2]
第1の実施の形態では、各メッセージのサイズが同じであることを前提にして説明したが、メッセージのサイズが異なる場合もある。本実施の形態では、併せてリンクの送信能力をも考慮して処理する場合について説明する。
なお、図5に示したノードの構成は、本実施の形態においてもおおよそ同じであるが、保持するデータの内容については異なるものもある。
本実施の形態に係るリンクデータ格納部103には、図29に示すようなデータフォーマットでデータが格納される。図29の例では、リンク毎に、リンクのIDと、送信元ノードのIDと、宛先ノードのIDと、送信元ノードから宛先ノードまでのリンク帯域[bps]とが格納される。
また、データキュー106におけるタイムスロットについてのデータは同じであるが、個々のメッセージ(データブロック)に関するデータの部分については、図30に示すようなデータフォーマットでデータが格納される。図30の例では、データのIDと、宛先までの送達期限と、本ノードの送信期限と、データのサイズ(bytes)と、データ本体又はその格納領域へのリンクとが格納されるようになっている。
さらに、リソース管理データ格納部110には、図31及び図32に示すようなデータフォーマットでデータが格納される。すなわち、図31の例では、開始時刻と終了時刻とで特定されるタイムスロット毎に、ノードの受信リソースの使用済み容量(bit)と空き容量(bit)と最大容量(bit)と、当該タイムスロットについてのキュー(データリストとも呼ぶ)へのポインタとが格納される。この例では、1タイムスロットには最大1Gビット受信でき、1番目のタイムスロットでは、既に200Mビット分のデータを受信することになっており、800Mビット分空いていることを表している。
キューには、当該キューに投入された、メッセージ(データブロック)に関する情報が格納される。但し、この情報は、図32に示すように、メッセージ(データブロック)毎に、データのIDと、送達期限tlim,jと、要求元ノードjの送信期限tlim,j,xと、データサイズとを含む。なお、データサイズについてはビット単位又はバイト単位であってもよいが、タイムスロットの最大容量に対する割合で表すようにしても良い。
また、スケジューリング要求及びスケジュール通知のデータフォーマットは、図33及び図34に示すようになる。図17及び図18と異なる点は、各メッセージ(データブロック)についてデータサイズ(ds)が追加された部分のみである。
本実施の形態では、データサイズ及びリンクの帯域を用いてレイテンシ(遅延時間)を算出することになる。この点について、図35を用いて説明する。
ここではノードNdaがデータソースからデータサイズsjのデータdjを受信し、ノードNdbを介してノードNddに送信する。また、ノードNdcがデータソースからデータサイズskのデータdkを受信し、ノードNddに送信する。
ここで、ノードNdaからノードNdbまでのリンクLa,bのレイテンシla,bは、データサイズsj/リンク帯域ca,bで算出される。同様に、ノードNdbからノードNddまでのリンクLb,dのレイテンシlb,dは、データサイズsj/リンク帯域cb,dで算出される。
従って、ノードNdaにおける送信期限tlim,j,aは、送達期限tlim,j−sum([la,b,lb,d])=tlim,j−(sj/ca,b+sj/cb,d)と算出される。同様に、ノードNdbにおける送信期限tlim,j,bは、送達期限tlim,j−lb,d=tlim,j−sj/cb,dとなる。
また、ノードNdcにおける送信期限tlim,k,cは、送達期限tlim,k−lc,d =tlim,k−sk/cc,dで算出される。
次に、本実施の形態に係る処理内容について図36及び図37を用いて説明する。
まず、図36を用いてメッセージ受信時の処理内容について説明する。
データ受信部101は、データ(dj)を含むメッセージを受信し、第1スケジューラ102に出力する(ステップS201)。自ノードがデータソースに接続されている最上流ノードであれば(ステップS203:Yesルート)、第1スケジューラ102は、データのID「dj」でレイテンシデータ格納部105を検索して、宛先までに許容される遅延時間を読み出して、送達期限tlim,jを取得する(ステップS205)。例えば、現時刻+遅延時間にて送達期限を算出する。なお、レイテンシデータ格納部105に送達期限そのものが格納されていれば、それを用いる。一方、自ノードが最上流ノードでなければ(ステップS203:Noルート)、処理はステップS209に移行する。
また、第1スケジューラ102は、受信したメッセージヘッダに送達期限tlim,jを追加する(ステップS207)。これによって、図7に示すようなメッセージが生成される。
さらに、第1スケジューラ102は、データ転送ルート格納部104をdjで検索して転送ルート[Lx,y]を読み出す(ステップS209)。転送ルートは、リンクIDの配列データであるものとする。
そして、第1スケジューラ102は、転送ルート[Lx,y]の各リンクIDでレイテンシデータ格納部105を検索して、各リンクのリンク帯域cx,yを読み出す(ステップS211)。
その後、第1スケジューラ102は、送達期限tlim,j、リンク帯域cx,y及びメッセージのデータサイズから、本ノードの送信期限tlim,j,xを算出する(ステップS213)。具体的には、tlim,j−Σsj/cx,y(転送経路上の全リンクについての総和)によって計算する。
そして、第1スケジューラ102は、送信期限tlim,j,xから送出要求時刻treq,j,xを決定する(ステップS215)。tlim,j,x=treq,j,xの場合もあれば、一定のマージンαを考慮してtreq,j,x=tlim,j,x−αと設定する場合もある。なお、以下の説明では、説明を簡単にするため、送信期限=送出要求時刻とする。
そして、第1スケジューラ102は、送出要求時刻treq,j,xのタイムスロットに、メッセージを付加データと共に投入する(ステップS217)。
以上のような処理を、メッセージを受信する毎に実行する。
スケジュールネゴシエータ108の処理内容については、第1の実施の形態とほぼ同様であり、生成されるスケジューリング要求のデータフォーマットが、図33及び図34に示すようなデータである点のみが異なる。
また、データ送信部107の処理内容についても図20に示したものと同様である。
さらに、第2スケジューラ109の処理内容についても一部を除き同様である。具体的には、メッセージ数(データブロック数)ではなくデータ量でスロットの空きを判断する点が異なる。
図37に示すように、各データブロック(メッセージ)のデータサイズ(ds)を考慮することになる。送信元ノード毎にリンク帯域が異なる場合には、リンク帯域をも考慮することになるが、ここでは同一であるものとする。
例えば、スロット幅Δt=1秒で100Mbpsであるとする。そうすると、20Mビットのデータであれば、送信に、0.2秒かかり、10Mビットのデータであれば0.1秒かかる。ここでは、10Mビットを1単位として、ds:1は10Mビットのデータを表し、ds:2は20Mビットであるものとする。
ここでノードA及びノードBの送信スケジュールを重ね合わせると、図37の右側のように表される。図37の右側では、データサイズに応じた高さでデータブロック(メッセージ)を表している。このように、3番目のタイムスロットでは、受信リソースである最大容量を超えており、超えた分だけデータブロックを他のタイムスロットに移動させることになる。
空きスロットについても、空き容量を考慮して、データブロック(メッセージ)を移動させられるか否かを判断する。例えば、1つのデータブロック(メッセージ)のデータサイズが大きく、空きスロットの空き容量が不足する場合には、移動できないものとする。
通知部1093の処理内容についてもスケジュール通知のデータフォーマットが図33及び図34のようになる点のみが異なる。
以上のように、データサイズが異なるメッセージ(データブロック)を送信する場合であっても、対処できる。
[実施の形態3]
第1の実施の形態及び第2の実施の形態では、各ノードにおけるスケジューリング要求部1081の起動間隔TSR,x及び初期起動時刻が同じであるという前提で説明している。
本実施の形態では、各ノードにおいて、スケジューリング要求部1081の起動間隔TSR,x及び初期起動時刻が異なるものとする。従って、スケジューリングウィンドウも、各ノードで異なり、そのノードの起動間隔TSR,xに応じて設定されるものとする。
なお、第1及び第2の実施の形態では、ほぼ同時にスケジューリング要求を受信して、それに応じて第2スケジューラ109が処理を行うようになっていたが、本実施の形態では、スケジューリング要求を受信するタイミングが、各送信元ノードで異なるので、第2スケジューラ109の起動間隔TTLS-inter,xについては、以下のように定義する。
TTLS-inter,x=min(TSR,a,TSR,b,TSR,c,...,TSR,n)
すなわち、送信元ノードの最も短い起動間隔を、第2スケジューラ109の起動間隔の最大値とする。これは、1つのTTLS-inter,xの間に、複数のスケジューリング要求を送信するノードが発生しないようにするためである。
このような状況に対処するためのノードの構成は、第1の実施の形態と同様である。但し、処理内容については一部異なるので、異なる処理内容について以下説明する。
まず、要求受信部1091の処理内容について図38を用いて説明する。第1の実施の形態では、要求受信部1091はスケジューリング処理部1092と連動していたが、スケジューリング要求の受信タイミングが、各ノードで異なるので、独立して動作するようになる。
すなわち、要求受信部1091は、送信元ノードからスケジューリング要求を受信すると(ステップS301)、当該スケジューリング要求のデータを、スケジューリングデータ格納部111に格納する(ステップS303)。
このような処理を、スケジューリング要求を受信する毎に繰り返すことになる。
次に、スケジューリング処理部1092等の処理内容について、図39乃至図46を用いて説明する。
スケジューリング処理部1092は、起動間隔TTLS-inter,x又は以下の処理で設定された時間が経過して、起動タイミングtになったか判断する(図39:ステップS311)。起動タイミングtでなければ、待機する。
一方、起動タイミングtになると、スケジューリング処理部1092は、最大幅TTLS-inter,x以内であって全ノードからのスケジューリング要求が揃っている未処理タイムスロットについてのデータを、スケジューリングデータ格納部111から読み出す(ステップS313)。
例えば図40のような初期的な状態を想定する。この場合、3つのノードからスケジューリング要求を受信することになるが、スケジューリングウィンドウに含まれるタイムスロットの数wが異なっている。ここでは、ノードBが最も小さいw=2を採用しているので、t0からt0+2Δtまでのタイムスロットについてのデータを、スケジューリングデータ格納部111から読み出すことになる。なお、t0から2Δtまでのタイムスロットのデータを含むスケジューリング要求のデータを読み出すようにしても良い。
そして、スケジューリング処理部1092は、読み出したデータを、各タイムスロットについて展開して、各タイムスロットでメッセージ数(データブロック数)を合算する(ステップS315)。この処理結果については、図12及び図13に示すように、リソース管理データ格納部110に格納される。
図40の例では、最上段に示すように、2つのタイムスロットの各々についてメッセージ数(データブロック数)を計数することになる。この場合、いずれのタイムスロットについても、受信リソースの最大数には達していない。
そうすると、スケジューリング処理部1092は、各タイムスロットで送信されるメッセージの数は、受信リソースの範囲内であるか否かを判断する(ステップS317)。各タイムスロットで送信されるメッセージの数が受信リソースの範囲内であれば、スケジューリング処理部1092は、スケジューリングデータ格納部111に格納されているスケジューリング要求の内容をそのまま含むスケジュール通知を、通知部1093に出力し、各要求元ノードに送信させる(ステップS319)。このような場合には、各ノードの送信スケジュールを変更せずとも受信できるためである。
そして、スケジューリング処理部1092は、各スケジュール通知の内容を、スケジューリングデータ格納部111に格納する(ステップS321)。
さらに、スケジューリング処理部1092は、次回の起動タイミングを、t+今回のスケジュール完了タイムスロット数×Δtに設定する(ステップS323)。本実施の形態では、起動タイミング毎に、処理されるタイムスロット数が異なるため、このように起動毎に、次回の起動タイミングを設定するものである。
一方、いずれかのタイムスロットのメッセージの数が受信リソースの範囲を超える場合には、処理は端子Fを介して図41の処理に移行する。
まず、スケジューリング処理部1092は、タイムスロットのカウンタnを1に初期化する(ステップS325)。そして、スケジューリング処理部1092は、n番目のタイムスロットのメッセージの数が受信リソースを超えているか判断する(ステップS327)。n番目のタイムスロットのメッセージの数が受信リソースの範囲内であれば、処理は端子Gを介して図42の処理に移行する。
一方、n番目のタイムスロットのメッセージの数が受信リソースを超えている場合には、スケジューリング処理部1092は、n番目のタイムスロット内のメッセージを、送信元ノードの送信期限を第1のキーとして、送達期限を第2のキーとしてソートする(ステップS329)。この処理はステップS77と同様である。
その後、スケジューリング処理部1092は、n番目より前のタイムスロット(但し、今回処理するタイムスロットの範囲内)に、受信リソースの空きがあるか判断する(ステップS331)。空きがなければ処理は端子Hを介して図42の処理に移行する。送信を前倒しできれば、データ送信遅延の可能性を抑制できるため、先に前のタイムスロットを判断する。
一方、n番目より前のタイムスロットに空きがあれば、スケジューリング処理部1092は、n番目のタイムスロットの先頭から、空きのあるタイムスロットの末尾にメッセージを移動させる(ステップS333)。
なお、2以上のメッセージが受信リソースの範囲を超える場合もある。この場合には、n番目のタイムスロットより前のタイムスロットの空き数だけ、n番目のタイムスロットの先頭からメッセージを取り出して、移動させる。3つのメッセージが受信リソースの範囲を超えるが、前のタイムスロットに2つしか空きがない場合には、2つだけメッセージを前のタイムスロットに移動させる。残りの1つは以下の処理で対応策が決定される。
そして、スケジューリング処理部1092は、n番目のスロットにはまだ受信リソースの範囲を超えるメッセージが割り当てられている状態であるか否かを判断する(ステップS335)。この条件を満たす場合には、処理は端子Hを介して図42の処理に移行する。
一方、n番目のスロットのメッセージの数が受信リソースの範囲内となった場合には、処理は端子Gを介して図42の処理に移行する。
図42の処理の説明に移行して、スケジューリング処理部1092は、n番目のタイムスロットより後のタイムスロット(但し、今回処理するタイムスロットの範囲内)に空きがあるか否かを判断する(ステップS337)。空きがない場合には、処理はステップS343に移行する。
一方、n番目のタイムスロットより後ろのスロットにタイムスロットに空きがある場合には、スケジューリング処理部1092は、n番目のタイムスロットの末尾から、空きのあるタイムスロットの先頭にメッセージを移動させる(ステップS339)。
なお、2以上のメッセージが受信リソースの範囲を超える場合もある。この場合には、n番目のタイムスロットより後のタイムスロットの空き数だけ、n番目のタイムスロットの末尾からメッセージを取り出して、移動させる。3つのメッセージが受信リソースの範囲を超えるが、後のタイムスロットに2つしか空きがない場合には、2つだけメッセージを後のタイムスロットに移動させる。残りの1つは後に処理される。
さらに、スケジューリング処理部1092は、n番目のタイムスロットにはまだ受信リソースの範囲を超えるメッセージが割り当てられている状態であるか否かを判断する(ステップS341)。この条件を満たさない場合には、処理はステップS345に移行する。
この条件を満たす場合には、第1の実施の形態ではスケジューリングウィンドウの後ろにタイムスロットを生成して、その先頭にメッセージ(データブロック)を割り当てるような処理を行うが、本実施の形態では、既にタイムスロットが存在して、そのタイムスロットにはメッセージ(データブロック)が割り当てられているので、異なる処理を行うことになる。
すなわち、スケジューリング処理部1092は、他のタイムスロットに移動させることができなかったメッセージ(データブロック)を、今回処理対象のタイムスロットの範囲より後のタイムスロットに移動させる(ステップS343)。
図43は、図40の後の起動タイミングt0+2Δtにおける処理を模式的に示すものである。ノードBからは2回目のスケジューリング要求を受信した状態であるが、他のノードについては1回目のスケジューリング要求しか受信していない。そうすると、全ノードから送信スケジュールが得られているタイムスロットは3番目のタイムスロット1つしかない。このタイムスロットについて、メッセージの数を合算すると、図43の最上段に示すように、1つのメッセージ(データブロック)が、受信リソースの範囲を超えることになる。しかしながら、1つのタイムスロットしか処理しないので、前のタイムスロットにも、後のタイムスロットにも、移動させることはできない。そこで、優先順位が低い順にメッセージ(データブロック)を、今回処理対象のタイムスロットの範囲より後ろのタイムスロット(例えば直後)に移動させる。
このようにすれば、スケジューリングウィンドウの各タイムスロットにおいては、受信リソースの範囲内にメッセージの受信を抑制できるので、輻輳が抑制され、データ送信の遅延が抑制される。
そして、スケジューリング処理部1092は、カウンタnが、今回処理対象のタイムスロットの数以上となったか判断する(ステップS345)。この条件を満たさない場合には、スケジューリング処理部1092は、nを1インクリメントして(ステップS347)、処理は端子Jを介して図41のステップS327に戻る。一方、nが今回処理対象のタイムスロットの数以上となると、処理は端子Iを介して図44の処理に移行する。
図44の処理の説明に移行して、スケジューリング処理部1092は、各要求元ノードについて、そのメッセージのスケジューリング結果(すなわち送信スケジュール)を抽出して、スケジュール通知を生成し、各要求元ノードへ通知部1093に送信させる(ステップS349)。
そして、スケジューリング処理部1092は、各スケジュール通知の内容を、スケジューリングデータ格納部111に格納する(ステップS351)。
さらに、スケジューリング処理部1092は、次回の起動タイミングを、t+今回のスケジュール完了タイムスロット数×Δtに設定する(ステップS353)。本ステップは、ステップS323と同様の処理である。
図43の処理を行った後の状態を、図45に示す。ここではノードAから2回目のスケジューリング要求を受信した状態である。ここで、ノードA乃至Cからのスケジューリング要求のうち、共通する未処理のタイムスロットは1つしかない。ここで、図45の最上段のように、メッセージ数を合算すると、受信リソースの範囲内となっている。但し、図43で示したように、1つのメッセージ(データブロック)が追加されているので、そのメッセージの割当先タイムスロットが変更されたことになる。このようなスケジューリング結果を各ノードに通知する。
さらに、図45の処理を行った後の状態を、図46に示す。ノードBからは3回目のスケジューリング要求を受信し、ノードCからは2回目のスケジューリング要求を受信した状態を表している。そうすると、今回は、2つの未処理タイムスロットについて処理することになる。図46の最上段に示すように、いずれのタイムスロットについても、受信リソースの範囲内のメッセージ(データブロック)しか送信予定となっていないので、要求どおりに送信するように各ノードに通知する。
このようにすれば、スケジューリングウィンドウの差及び初期起動タイミングのずれに対処できるようになる。
なお、第2の実施の形態のように、各メッセージのデータサイズが異なっていても、第2の実施の形態のように本実施の形態を変形すればよい。
[実施の形態4]
本実施の形態では、送信リソースの上限値を考慮する場合について説明する。
本実施の形態に係るノードの構成を図47に示す。本実施の形態では、リソースデータ格納部112が追加されており、第1スケジューラ102は、このリソースデータ格納部112に格納されている送信リソースのデータを参照して、メッセージのタイムスロットへの割り当てを制御する。
図48に、リソースデータ格納部112に格納されるデータのデータフォーマット例を示す。図48に示すように、タイムスロット幅のデータと、最大送信リソースとしてタイムスロットにおいて送信可能な最大メッセージ数(最大データブロック数)とが格納されるようになっている。なお、タイムスロット毎に最大メッセージ数(最大データブロック数)が異なる場合には、タイムスロットの開始時刻と終了時刻とのペアに対応付けて最大メッセージ数(最大データブロック数)を格納するようにしても良い。
次に、本実施の形態に係るデータ受信部101及び第1スケジューラ102の処理について図49及び図50を用いて説明する。
データ受信部101は、データ(dj)を含むメッセージを受信し、第1スケジューラ102に出力する(図49:ステップS501)。自ノードがデータソースに接続されている最上流ノードであれば(ステップS503:Yesルート)、第1スケジューラ102は、データのID「dj」でレイテンシデータ格納部105を検索して、宛先までに許容される遅延時間を読み出して、送達期限tlim,jを取得する(ステップS505)。例えば、現時刻+遅延時間にて送達期限を算出する。なお、レイテンシデータ格納部105に送達期限そのものが格納されていれば、それを用いる。一方、自ノードが最上流ノードでなければ(ステップS503:Noルート)、処理はステップS509に移行する。
また、第1スケジューラ102は、受信したメッセージヘッダに送達期限tlim,jを追加する(ステップS507)。これによって、図7に示すようなメッセージが生成される。
さらに、第1スケジューラ102は、データ転送ルート格納部104をdjで検索して転送ルート[Lx,y]を読み出す(ステップS509)。転送ルートは、リンクIDの配列データであるものとする。
そして、第1スケジューラ102は、転送ルート[Lx,y]の各リンクIDでレイテンシデータ格納部105を検索して、各リンクの遅延時間(レイテンシ)lx,yを読み出す(ステップS511)。
その後、第1スケジューラ102は、送達期限tlim,j及びレイテンシlx,yから、本ノードの送信期限tlim,j,xを算出する(ステップS513)。具体的には、tlim,j−Σlx,y(転送経路上の全リンクについての総和)によって計算する。
そして、第1スケジューラ102は、送信期限tlim,j,xから送出要求時刻treq,j,xを決定する(ステップS515)。tlim,j,x=treq,j,xの場合もあれば、一定のマージンαを考慮してtreq,j,x=tlim,j,x−αと設定する場合もある。なお、以下の説明では、説明を簡単にするため、送信期限=送出要求時刻とする。
そして、第1スケジューラ102は、送出要求時刻treq,j,xのタイムスロットに、メッセージを付加データと共に投入する(ステップS517)。図11A及びBに示すようなデータが格納される。ここまでは第1の実施の形態と同様である。処理は端子Kを介して図50の処理に移行する。
図50の処理の説明に移行して、第1スケジューラ102は、リソースデータ格納部112に格納されている送信リソース(最大メッセージ数(最大データブロック数))から、エンキューされたタイムスロットはリソース不足となっているか判断する(ステップS519)。エンキューされたタイムスロットのリソースが足りている場合には、処理は終了する。
一方、エンキューされたタイムスロットがリソース不足である場合には、第1スケジューラ102は、今回受信したメッセージがエンキューされたタイムスロット内のメッセージを、本ノードの送信期限を第1のキーとして、送達期限を第2のキーとしてソートする(ステップS521)。
そして、第1スケジューラ102は、今回受信したメッセージがエンキューされたタイムスロットより前のタイムスロットに、送信リソースの空きがあるか判断する(ステップS523)。送信を前倒しできれば、データ送信遅延の可能性を抑制できるため、先に前のタイムスロットを判断する。
エンキューされたタイムスロットより前のタイムスロットに空きがあれば、第1スケジューラ102は、今回メッセージがエンキューされたタイムスロットの先頭から、空きのあるタイムスロットの末尾にメッセージを移動させる(ステップS525)。そして処理は終了する。
一方、エンキューされたタイムスロットより前のタイムスロットに空きがなければ、第1スケジューラ102は、今回受信したメッセージがエンキューされたタイムスロットより後のタイムスロットに空きがあるか判断する(ステップS527)。
エンキューされたタイムスロットより後ろのスロットにタイムスロットに空きがある場合には、第1スケジューラ102は、今回受信したメッセージがエンキューされたタイムスロットの末尾から、空きのあるタイムスロットの先頭にメッセージを移動させる(ステップS529)。そして処理は終了する。
一方、エンキューされたタイムスロットより後ろのタイムスロットに空きがない場合には、第1スケジューラ102は、現在定義されているタイムスロットの後ろ側にタイムスロットを追加し(ステップS531)、今回受信されたメッセージがエンキューされたタイムスロットの末尾から、追加タイムスロットの先頭に、今回受信されたメッセージを移動させる(ステップS533)。
このような処理を行えば、データの送信側のリソースの範囲内でデータを送信できるようになり、輻輳が抑制され、データ送信の遅延が抑制される。
他の処理内容については第1の実施の形態と同様であるから、説明を省略する。
[実施の形態5]
第4の実施の形態についても、第2の実施の形態のように、データサイズを考慮する形に変形しても良い。
ノードの構成については図47に示したものと同様である。但し、第2の実施の形態で説明したように、処理内容が異なる。さらに、第4の実施の形態においては、送信リソースをも考慮することになるので、そのため、データ受信部101及び第1スケジューラ102の処理が異なる。さらに、リソースデータ格納部112に格納されているデータのデータフォーマットを、図51に示す。図51でも、タイムスロット幅Δtと、タイムスロット幅Δtにおいて送信可能な最大ビット数とが格納されるようになっている。
次に、本実施の形態に係るデータ受信部101及び第1スケジューラ102の処理内容について図52及び図53を用いて説明する。
データ受信部101は、データ(dj)を含むメッセージを受信し、第1スケジューラ102に出力する(図52:ステップS601)。自ノードがデータソースに接続されている最上流ノードであれば(ステップS603:Yesルート)、第1スケジューラ102は、データのID「dj」でレイテンシデータ格納部105を検索して、宛先までに許容される遅延時間を読み出して、送達期限tlim,jを取得する(ステップS605)。例えば、現時刻+遅延時間にて送達期限を算出する。なお、レイテンシデータ格納部105に送達期限そのものが格納されていれば、それを用いる。一方、自ノードが最上流ノードでなければ(ステップS603:Noルート)、処理はステップS609に移行する。
また、第1スケジューラ102は、受信したメッセージヘッダに送達期限tlim,jを追加する(ステップS607)。これによって、図7に示すようなメッセージが生成される。
さらに、第1スケジューラ102は、データ転送ルート格納部104をdjで検索して転送ルート[Lx,y]を読み出す(ステップS609)。転送ルートは、リンクIDの配列データであるものとする。
そして、第1スケジューラ102は、転送ルート[Lx,y]の各リンクIDでレイテンシデータ格納部105を検索して、各リンクのリンク帯域cx,yを読み出す(ステップS611)。
その後、第1スケジューラ102は、送達期限tlim,j、リンク帯域cx,y及びメッセージのデータサイズから、本ノードの送信期限tlim,j,xを算出する(ステップS613)。具体的には、tlim,j−Σsj/cx,y(転送経路上の全リンクについての総和)によって計算する。
そして、第1スケジューラ102は、送信期限tlim,j,xから送出要求時刻treq,j,xを決定する(ステップS615)。tlim,j,x=treq,j,xの場合もあれば、一定のマージンαを考慮してtreq,j,x=tlim,j,x−αと設定する場合もある。なお、以下の説明では、説明を簡単にするため、送信期限=送出要求時刻とする。
そして、第1スケジューラ102は、送出要求時刻treq,j,xのタイムスロットに、メッセージ(データブロック)を付加データと共に投入する(ステップS617)。そして処理は、端子Lを介して図53の処理の説明に移行する。
図53の処理の説明に移行して、第1スケジューラ102は、リソースデータ格納部112に格納されている送信リソース(最大ビット数)から、エンキューされたタイムスロットはリソース不足となっているか判断する(ステップS619)。すなわち、エンキューされたタイムスロットにおけるメッセージ(データブロック)のデータサイズの総和を算出し、最大ビット数と比較する。エンキューされたタイムスロットの送信リソースが足りている場合には、処理は終了する。
一方、エンキューされたタイムスロットがリソース不足である場合には、第1スケジューラ102は、今回受信したメッセージがエンキューされたタイムスロット内のメッセージを、本ノードの送信期限を第1のキーとして、送達期限を第2のキーとしてソートする(ステップS621)。
そして、第1スケジューラ102は、今回受信したメッセージがエンキューされたタイムスロットより前のタイムスロットに、送信リソースの空きがあるか判断する(ステップS623)。送信を前倒しできれば、データ送信遅延の可能性を抑制できるため、先に前のタイムスロットを判断する。なお、空きがあるか否かについては、空き容量が、今回メッセージがエンキューされたタイムスロットの先頭メッセージ(先頭データブロック)のデータサイズ以上であるか否かを判断することになる。
エンキューされたタイムスロットより前のタイムスロットに空きがあれば、第1スケジューラ102は、今回メッセージがエンキューされたタイムスロットの先頭から、空きのあるタイムスロットの末尾にメッセージを移動させる(ステップS625)。そして処理は終了する。
一方、エンキューされたタイムスロットより前のタイムスロットに空きがなければ、第1スケジューラ102は、今回受信したメッセージがエンキューされたタイムスロットより後のタイムスロットに空きがあるか判断する(ステップS627)。ステップS623と同様に、空きがあるか否かについては、空き容量が、今回メッセージがエンキューされたタイムスロットの末尾メッセージ(末尾データブロック)のデータサイズ以上であるか否かを判断することになる。
エンキューされたタイムスロットより後ろのスロットにタイムスロットに空きがある場合には、第1スケジューラ102は、今回受信したメッセージがエンキューされたタイムスロットの末尾から、空きのあるタイムスロットの先頭にメッセージを移動させる(ステップS629)。そして処理は終了する。
一方、エンキューされたタイムスロットより後ろのタイムスロットに空きがない場合には、第1スケジューラ102は、現在定義されているタイムスロットの後ろ側にタイムスロットを追加し(ステップS631)、今回受信されたメッセージがエンキューされたタイムスロットの末尾から、追加タイムスロットの先頭に、今回受信されたメッセージを移動させる(ステップS633)。
このような処理を行えば、データの送信側のリソースの範囲内でデータを送信できるようになり、輻輳が抑制され、データ送信の遅延が抑制される。
他の処理内容については第4の実施の形態と同様であるから、説明を省略する。
[実施の形態6]
本実施の形態では、図54に示すように、ノードAがノードC及びノードDにメッセージ(データブロック)を送信し、ノードBがノードC及びノードDにメッセージ(データブロック)を送信するようになっている場合を取り扱う。このように、複数のノードにメッセージ(データブロック)を送信するようになっている場合には、送信先ノード毎にデータキューを設けるようにする。
すなわち、ノードの構成例は図55に示すように変形される。第1の実施の形態に係るノードの構成と異なる点は、データキュー106a及び106bが、送信先ノード毎に設けられる点である。すなわち、図11A及び図11Bに示すデータフォーマットで、各データキュー106a及び106bにおいてデータを格納する。
次に、図56を用いてメッセージ受信時の処理内容について説明する。
データ受信部101は、データ(dj)を含むメッセージを受信し、第1スケジューラ102に出力する(ステップS701)。自ノードがデータソースに接続されている最上流ノードであれば(ステップS703:Yesルート)、第1スケジューラ102は、データのID「dj」でレイテンシデータ格納部105を検索して、宛先までに許容される遅延時間を読み出して、送達期限tlim,jを取得する(ステップS705)。例えば、現時刻+遅延時間にて送達期限を算出する。なお、レイテンシデータ格納部105に送達期限そのものが格納されていれば、それを用いる。一方、自ノードが最上流ノードでなければ(ステップS703:Noルート)、処理はステップS709に移行する。
また、第1スケジューラ102は、受信したメッセージヘッダに送達期限tlim,jを追加する(ステップS707)。これによって、図7に示すようなメッセージが生成される。
さらに、第1スケジューラ102は、データ転送ルート格納部104をdjで検索して転送ルート[Lx,y]を読み出す(ステップS709)。転送ルートは、リンクIDの配列データであるものとする。
そして、第1スケジューラ102は、転送ルート[Lx,y]の各リンクIDでレイテンシデータ格納部105を検索して、各リンクの遅延時間(レイテンシ)lx,yを読み出す(ステップS711)。
その後、第1スケジューラ102は、送達期限tlim,j及びレイテンシlx,yから、本ノードの送信期限tlim,j,xを算出する(ステップS713)。具体的には、tlim,j−Σlx,y(転送経路上の全リンクについての総和)によって計算する。
そして、第1スケジューラ102は、送信期限tlim,j,xから送出要求時刻treq,j,xを決定する(ステップS715)。tlim,j,x=treq,j,xの場合もあれば、一定のマージンαを考慮してtreq,j,x=tlim,j,x−αと設定する場合もある。なお、以下の説明では、説明を簡単にするため、送信期限=送出要求時刻とする。
そして、第1スケジューラ102は、送信先ノードのデータキューにおいて、送出要求時刻treq,j,xのタイムスロットに、メッセージを付加データと共に投入する(ステップS717)。図11A及び図11Bに示すようなデータが格納される。
以上のような処理を、メッセージを受信する毎に実行する。
なお、第2スケジューラ109の処理内容については、第1の実施の形態と同様であるので、説明は省略する。
但し、スケジュールネゴシエータ108の処理内容については一部異なる。すなわち、リスケジューラ1083の処理内容は、図57に示すように変更される。
すなわち、スケジュール受信部1082は、スケジュール結果を含むスケジュール通知を受信し(ステップS721)、リスケジューラ1083に出力する。スケジュール通知のデータフォーマットは、図17及び図18に示したようなフォーマットである。
そして、リスケジューラ1083は、スケジュール通知を受信すると、その送信元ノードのIDからデータキュー106a又は106bを特定し(ステップS723)、当該スケジュール通知に従って、データキュー106a又は106bにおけるメッセージ(すなわちデータブロック)が投入されるタイムスロットを更新する処理を行う(ステップS725)。スケジュール通知で通知された送信スケジュールとスケジューリング要求における送信スケジュールとが一致する場合もあるので、その場合には特に処理は行わない。異なるタイムスロットに移動させられた場合には、そのタイムスロットのキューにエンキューする。そのタイムスロットのデータがなければ、この段階で生成する。
このようにすれば、送信先ノードにおいて調整された送信スケジュールを、送信先ノードのためのデータキュー106a又は106bに反映させることができる。
なお、第2の実施の形態のように、第6の実施の形態においても、データサイズを考慮するような形態に変形しても良い。
[実施の形態7]
本実施の形態では、第6の実施の形態において送信リソースを考慮する場合について説明する。具体的には、送信先ノードが複数ある場合、スケジュール通知に含まれる送信スケジュールを重ね合わせると、送信リソースを超えたメッセージ(データブロック)を送信することになってしまう場合がある。そこで、本実施の形態では、リスケジューラ1083の処理を変更することで、送信リソースを考慮したリスケジュール処理を行うこととする。
なお、第6の実施の形態に係るノードの構成は、処理内容以外については本実施の形態でも同様である。
特に、スケジュールネゴシエータ108のスケジュール受信部1082及びリスケジューラ1083の処理内容について、図58乃至図60Eを用いて説明する。
すなわち、スケジュール受信部1082は、スケジュール結果を含むスケジュール通知を受信し(図58:ステップS801)、リスケジューラ1083に出力する。スケジュール通知のデータフォーマットは、図17及び図18に示したようなフォーマットである。
そして、リスケジューラ1083は、スケジュール通知を受信すると、その送信元ノードのIDを特定する(ステップS803)。
そして、リスケジューラ1083は、送信元ノードのIDからデータキュー106a又は106bを特定し、当該スケジュール通知に従って、データキュー106a又は106bにおけるメッセージ(すなわちデータブロック)が投入されるタイムスロットを更新する処理を行う(ステップS805)。スケジュール通知で通知された送信スケジュールとスケジューリング要求における送信スケジュールとが一致する場合もあるので、その場合には特に処理は行わない。異なるタイムスロットに移動させられた場合には、そのタイムスロットのキューにエンキューする。そのタイムスロットのデータがなければ、この段階で生成する。
さらに、リスケジューラ1083は、更新があったタイムスロットのうち未処理のタイムスロットを1つ特定する(ステップS807)。なお、更新があったタイムスロットが存在しない場合には、処理を終了する。一方、更新があったタイムスロットは複数の場合もある。
そうすると、リスケジューラ1083は、特定されたタイムスロットのデータを全送信先についてデータキュー106a又は106bから読み出して、メッセージ数(データブロック数)を合算する(ステップS809)。
そして、リスケジューラ1083は、特定されたタイムスロットで送信されるメッセージの数は、リソースデータ格納部112に格納されている送信リソースの範囲内であるか否かを判断する(ステップS811)。
特定されたタイムスロットで送信されるメッセージの数が送信リソースの範囲内(最大メッセージ数)であれば、リスケジューラ1083は、更新があったタイムスロットのうち、未処理のスロットが存在するか否かを判断する(ステップS813)。未処理のスロットが存在しない場合には、処理を終了する。また、未処理のスロットが存在する場合には、処理はステップS807に戻る。
一方、特定されたタイムスロットで送信されるメッセージの数が、送信リソースの範囲内ではない、すなわち送信リソースが不足する場合には、処理は端子Mを介して図59の処理に移行する。
図59の処理の説明に移行して、リスケジューラ1083は、特定されたタイムスロット内のメッセージ(データブロック)を、本ノードの送信期限を第1のキーとして、送達期限を第2のキーとしてソートする(ステップS815)。
その後、リスケジューラ1083は、次回以降にスケジューリング要求の対象となる各タイムスロットについて、全送信先のメッセージの数を合算する(ステップS816)。
そして、リスケジューラ1083は、次回以降にスケジューリング要求の対象となるいずれかのタイムスロットに空きが存在するか否かを判断する(ステップS817)。空きがなければ処理はステップS821に移行する。
一方、空きがあれば、リスケジューラ1083は、特定されたタイムスロットの末尾から、空きのあるタイムスロットの先頭にメッセージを移動させる(ステップS819)。
なお、2以上のメッセージが送信リソースの範囲を超える場合もある。この場合には、タイムスロットの空き数だけ、特定されたタイムスロットの末端からメッセージを取り出して、移動させる。3つのメッセージが送信リソースの範囲を超えるが、次回以降にスケジューリング要求の対象となるタイムスロットに2つしか空きがない場合には、2つだけメッセージをそのタイムスロットに移動させる。残りの1つは以下の処理で対応策が決定される。
そして、リスケジューラ1083は、特定されたタイムスロットにはまだ送信リソースの範囲を超えるメッセージが割り当てられている状態であるか否かを判断する(ステップS821)。この条件を満たさない場合には、処理は端子Nを介して図58のステップS813に戻る。
一方、この条件を満たす場合には、リスケジューラ1083は、他のタイムスロットに移動させることができなかったメッセージ(データブロック)を、現在生成されているタイムスロットより後ろにタイムスロットを追加設定して、当該追加タイムスロットに、移動させられなかったメッセージ(データブロック)を移動させる(ステップS823)。
このようにすれば、スケジューリングウィンドウの各タイムスロットにおいては、送信リソースの範囲内にメッセージの送信を抑制できるので、輻輳が抑制され、データ送信の遅延が抑制される。
以下、図58及び図59で説明した処理について、図60A乃至図60Eにおいて具体例を用いて説明する。
まず、例えばノードDにおいて、送信先ノードA、ノードB及びノードCについて、データキュー106a乃至106cが、図60Aに示す状態であるものとする。そのため、図60Bの左側に示すようなスケジューリング要求が、ノードA、ノードB及びノードCに送信される。ノードA、ノードB及びノードCにおいては、その第2スケジューラ109が処理を行って、図60Bの右側に示すようなスケジュール結果が生成されたものとする。なお、ノードAにおけるスケジュール結果は、2番目のタイムスロットにおけるメッセージ(データブロック)を1つ3番目のタイムスロットに移動させることを示している。同様に、ノードCにおけるスケジュール結果は、2番目のタイムスロットにおけるメッセージ(データブロック)を1つ3番目のタイムスロットに移動させることを示している。
そうすると、ノードDにおけるデータキュー106a乃至106cは、図60Cに示すような状態に更新される。但し、3番目のタイムスロットに割り当てられたメッセージ(データブロック)の数が増加している。
ここで、上で述べた処理フローによれば、図60Dの左側に示すように、ノードA乃至ノードCへ送信されるメッセージの数を、各タイムスロットで合算する。そうすると、3番目のタイムスロットにおいて送信リソースの範囲を超えるメッセージの送信が予定されるようになる。
しかしながら、これでは3番目のタイムスロットでメッセージを送りきれないので、図60Dに示すように、この例では1つのメッセージ(データブロック)を、他のタイムスロットへ移動させる。但し、第1のスケジューリングウィンドウについては既に他のノードでスケジューリングが行われてしまっているので、第1のスケジューリングウィンドウに含まれるタイムスロットへ移動させることはできない。そこで、第2のスケジューリングウィンドウ以降のタイムスロットへ移動させる。図60Dの右側に示すように、5番目のタイムスロットにおいては空きリソースが存在しているので、このタイムスロットに、3番目のタイムスロットにおいて優先順位が最下位のメッセージ(データブロック)を、移動させる。そうすると、ノードA乃至Cのためのデータキュー106a乃至106cは、図60Eに示すような状態となる。
このようにすれば、スケジュール済みのタイムスロットに影響を最小限度に抑えつつ、輻輳などによるデータ送信の遅延を抑制できるようになる。
なお、本実施の形態についても、第2の実施の形態のように、データサイズを考慮するように変形しても良い。
以上、本発明に係る実施の形態を説明したが、本発明はこれに限定されるものではない。
例えば、処理フローについては、処理結果が変わらない限り、処理順番を入れ替えたり、並列処理するようにしても良い。機能ブロック図も一例であって、プログラムモジュール構成及びファイル構成と一致しない場合もある。
さらに、上で述べた実施の形態を、任意に組み合わせるようにしても良い。
なお、上で述べたノードは、コンピュータ装置であって、図61に示すように、メモリ2501とCPU(Central Processing Unit)2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本実施の形態をまとめると、以下のようになる。
本実施の形態に係る情報通信方法は、(A)第1の情報処理装置は、1又は複数のデータブロックについての第1の送信スケジュールを、1又は複数のデータブロックの送信先である第2の情報処理装置に送信し、(B)第2の情報処理装置は、第1の送信スケジュールを第1の情報処理装置から受信し、(C)第2の情報処理装置は、受信した第1の送信スケジュールと、第2の情報処理装置の受信リソースとに基づき、受信した第1の送信スケジュールに含まれる1又は複数のデータブロックの少なくとも一部のデータブロックについて第2の送信スケジュールを決定し、(D)第2の情報処理装置は、第2の送信スケジュールを、第1の情報処理装置に送信し、(E)第1の情報処理装置は、第2の情報処理装置から第2の送信スケジュールを受信し、(F)第1の情報処理装置は、受信した第2の送信スケジュールに基づき、当該第2の送信スケジュールで規定されているデータブロックを、第2の情報処理装置に送信する処理を含む。
このようにすれば、受信側の第2の情報処理装置において受信リソースを超えるようなデータブロック(例えばメッセージ)を受信することを回避でき、データ送信の遅延を抑制できる。
なお、上で述べた第1の送信スケジュールが、複数のタイムスロットについての送信スケジュールである場合もある。また、上で述べた第2の送信スケジュールが、複数のタイムスロットのうちの少なくともいずれかについての送信スケジュールである場合もある。このように複数のタイムスロットについて処理することで、受信リソースを超えるようなデータブロックの受信を回避するようなスケジューリングが容易になる。
また、上で述べた決定する処理が、(c1)第1の情報処理装置における送信期限と宛先での到着期限とのうち少なくともいずれかによって1又は複数のデータブロックを優先順位付けする処理を含むようにしても良い。このようにすれば、データ送信の遅延を最小限度に抑えることができるようになる。
また、上で述べた決定する処理が、(c2)複数のタイムスロットのうちのあるタイムスロットについて、当該あるタイムスロットに送信がスケジュールされたデータブロックの数又はデータ量が閾値以下であるか否かを判断し、(c3)あるタイムスロットに送信がスケジュールされたデータブロックの数又はデータ量が閾値を超える場合には、あるタイムスロットに送信がスケジュールされたデータブロックのうち優先順位に基づき選択されたデータブロックを、あるタイムスロットの前又は後のタイムスロットに割り当てる処理を含むようにしても良い。このようにすれば、確実に受信リソースの範囲内でデータブロック(メッセージ)を受信できるようになる。
さらに、上で述べた割り当てる処理が、(c31)あるタイムスロットに送信がスケジュールされたデータブロックのうち優先順位に基づき選択されるデータブロック(例えば優先順位が最上位から選択されるデータブロック)を、あるタイムスロットの前のタイムスロットに割り当てられるか判断し、(c32)割り当てられない場合には、あるタイムスロットに送信がスケジュールされたデータブロックのうち優先順位に基づき選択されるデータブロック(例えば優先順位が最下位から選択されるデータブロック)を、あるタイムスロットの後のタイムスロットに割り当てる処理を含むようにしても良い。これによって送信スケジュールを変更することによって生ずる遅延を最小限に抑制できるようになる。
さらに、第1の情報処理装置が複数であって、第1の送信スケジュールでスケジュールされたタイムスロットが複数の第1の情報処理装置において異なる場合には、上で述べた決定する処理が、(c4)複数の第1の情報処理装置から受信した第1の送信スケジュールでスケジュールされたタイムスロットのうち共通するタイムスロットについて、当該あるタイムスロットに送信がスケジュールされたデータブロックの数又はデータ量が閾値以下であるか否かを判断し、(c5)あるタイムスロットに送信がスケジュールされたデータブロックの数又はデータ量が閾値を超える場合には、あるタイムスロットに送信がスケジュールされたデータブロックのうち優先順位に基づき選択されたデータブロックを、あるタイムスロットの前又は後のタイムスロットに割り当てる処理を含むようにしても良い。
第1の送信スケジュールにおけるタイムスロットが送信元の第1の情報処理装置によってずれている場合には、このようにすればずれを吸収しつつ第2の送信スケジュールを生成できる。
さらに、上記情報通信方法は、(G)第1の情報処理装置が、受信したデータブロックの送信期限に応じて第1の送信スケジュールを生成する処理をさらに含むようにしても良い。
また、上記情報通信方法は、(H)第1の情報処理装置が、受信したデータブロックの送信期限に応じて、当該データブロックを送信すべきタイムスロットを特定し、(I)第1の情報処理装置が、特定したタイムスロットにおいて送信すべきデータブロックの数又はデータ量が閾値以下であるか否かを判断し、(J)第1の情報処理装置が、特定したタイムスロットにおいて送信すべきデータブロックの数又はデータ量が閾値を超える場合には、特定したタイムスロットに送信がスケジュールされたデータブロックのうち優先順位に基づき選択されたデータブロックを、特定したタイムスロットの前又は後のタイムスロットに割り当てる処理をさらに含むようにしても良い。
これによって、送信リソースを超えるようなデータブロック(メッセージ)の送信が抑制される。
さらに、第2の情報処理装置が複数である場合、(K)第1の情報処理装置が、受信したデータブロックの送信期限及び第2の情報処理装置に応じて第1の送信スケジュールを生成する処理をさらに含むようにしても良い。送信先毎に処理を行うものである。
さらに、第2の情報処理装置が複数である場合、(L)第1の情報処理装置が、受信したデータブロックの送信期限及び第2の情報処理装置に応じて第1の送信スケジュールを生成してもよい。この場合、上で述べた第2の送信スケジュールを受信する処理において、(e1)第1の情報処理装置が、複数の第2の情報処理装置のうちいずれかの第2の情報処理装置から第2の送信スケジュールを受信する場合がある。さらに、上で述べたデータブロックを送信する処理が、(f1)受信した第2の送信スケジュールが、受信した第2の送信スケジュールの送信元の第2の情報処理装置に送信した第1の送信スケジュールとは異なる場合、相違があるタイムスロットにおいて送信すべきデータブロックの数又はデータ量が閾値を超える場合には、相違があるタイムスロットに送信がスケジュールされたデータブロックのうち優先順位に基づき選択されたデータブロックを、第2の送信スケジュールより後のタイムスロットに割り当てる処理を含むようにしても良い。
複数の第2の情報処理装置があれば、第2の送信スケジュールに従うと送信リソースを超えるような送信スケジュールが規定される場合もあるので、それを適切に是正するものである。
なお、本実施の形態に係るデータフロー上流側の情報処理装置は、(M)1又は複数のデータブロックについての第1の送信スケジュールを、1又は複数のデータブロックの送信先であって第1の送信スケジュールに含まれる1又は複数のデータブロックの少なくとも一部のデータブロックについて受信リソースに基づき第2の送信スケジュールを生成する第2の情報処理装置に送信する第1の送信部と、(N)第2の情報処理装置から第2の送信スケジュールを受信する受信部と、(O)受信した第2の送信スケジュールに基づき、当該第2の送信スケジュールで規定されているデータブロックを、第2の情報処理装置に送信する第2の送信部とを有する。
本実施の形態に係るデータフロー下流側の情報処理装置は、(P)1又は複数のデータブロックについての第1の送信スケジュールを、1又は複数のデータブロックの送信元である第2の情報処理装置から受信する受信部と、(Q)受信した第1の送信スケジュールと、第2の情報処理装置の受信リソースとに基づき、受信した第1の送信スケジュールに含まれる1又は複数のデータブロックの少なくとも一部のデータブロックについて第2の送信スケジュールを決定する決定部と、(R)第2の送信スケジュールを、第2の情報処理装置に送信する送信部とを有する。
なお、上で述べたような処理をプロセッサ又はコンピュータに実行させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROMなどの光ディスク、光磁気ディスク、半導体メモリ(例えばROM)、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、RAM等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
第1の情報処理装置は、1又は複数のデータブロックについての第1の送信スケジュールを、前記1又は複数のデータブロックの送信先である第2の情報処理装置に送信し、
前記第2の情報処理装置は、前記第1の送信スケジュールを前記第1の情報処理装置から受信し、
前記第2の情報処理装置は、受信した前記第1の送信スケジュールと、前記第2の情報処理装置の受信リソースとに基づき、受信した前記第1の送信スケジュールに含まれる前記1又は複数のデータブロックの少なくとも一部のデータブロックについて第2の送信スケジュールを決定し、
前記第2の情報処理装置は、前記第2の送信スケジュールを、前記第1の情報処理装置に送信し、
前記第1の情報処理装置は、前記第2の情報処理装置から前記第2の送信スケジュールを受信し、
前記第1の情報処理装置は、受信した前記第2の送信スケジュールに基づき、当該第2の送信スケジュールで規定されているデータブロックを、前記第2の情報処理装置に送信する
処理を含む、情報通信方法。
(付記2)
前記第1の送信スケジュールが、複数のタイムスロットについての送信スケジュールであり、
前記第2の送信スケジュールが、前記複数のタイムスロットのうちの少なくともいずれかについての送信スケジュールである
付記1記載の情報通信方法。
(付記3)
前記決定する処理が、
前記第1の情報処理装置における送信期限と宛先での到着期限とのうち少なくともいずれかによって前記1又は複数のデータブロックを優先順位付けする処理
を含む付記1又は2記載の情報通信方法。
(付記4)
前記決定する処理が、
前記複数のタイムスロットのうちのあるタイムスロットについて、当該あるタイムスロットに送信がスケジュールされたデータブロックの数又はデータ量が閾値以下であるか否かを判断し、
前記あるタイムスロットに送信がスケジュールされたデータブロックの数又はデータ量が閾値を超える場合には、前記あるタイムスロットに送信がスケジュールされたデータブロックのうち優先順位に基づき選択されたデータブロックを、前記あるタイムスロットの前又は後のタイムスロットに割り当てる
処理を含む付記2記載の情報通信方法。
(付記5)
前記割り当てる処理が、
前記あるタイムスロットに送信がスケジュールされたデータブロックのうち優先順位に基づき選択されるデータブロックを、前記あるタイムスロットの前のタイムスロットに割り当てられるか判断し、
割り当てられない場合には、前記あるタイムスロットに送信がスケジュールされたデータブロックのうち優先順位に基づき選択されるデータブロックを、前記あるタイムスロットの後のタイムスロットに割り当てる
処理を含む付記4記載の情報通信方法。
(付記6)
前記第1の情報処理装置が複数であって、前記第1の送信スケジュールでスケジュールされたタイムスロットが前記複数の第1の情報処理装置において異なる場合には、
前記決定する処理が、
前記複数の第1の情報処理装置から受信した前記第1の送信スケジュールでスケジュールされたタイムスロットのうち共通するタイムスロットについて、当該あるタイムスロットに送信がスケジュールされたデータブロックの数又はデータ量が閾値以下であるか否かを判断し、
前記あるタイムスロットに送信がスケジュールされたデータブロックの数又はデータ量が閾値を超える場合には、前記あるタイムスロットに送信がスケジュールされたデータブロックのうち優先順位に基づき選択されたデータブロックを、前記あるタイムスロットの前又は後のタイムスロットに割り当てる
処理を含む付記2記載の情報通信方法。
(付記7)
前記第1の情報処理装置が、受信したデータブロックの送信期限に応じて第1の送信スケジュールを生成する
処理をさらに含む付記1乃至6のいずれか1つ記載の情報通信方法。
(付記8)
前記第1の情報処理装置が、受信したデータブロックの送信期限に応じて、当該データブロックを送信すべきタイムスロットを特定し、
前記第1の情報処理装置が、特定した前記タイムスロットにおいて送信すべきデータブロックの数又はデータ量が閾値以下であるか否かを判断し、
前記第1の情報処理装置が、特定した前記タイムスロットにおいて送信すべきデータブロックの数又はデータ量が閾値を超える場合には、特定した前記タイムスロットに送信がスケジュールされたデータブロックのうち優先順位に基づき選択されたデータブロックを、特定した前記タイムスロットの前又は後のタイムスロットに割り当てる
処理をさらに含む付記1乃至6のいずれか1つ記載の情報通信方法。
(付記9)
前記第2の情報処理装置が複数である場合、
前記第1の情報処理装置が、受信したデータブロックの送信期限及び前記第2の情報処理装置に応じて第1の送信スケジュールを生成する
処理をさらに含む付記1乃至6のいずれか1つ記載の情報通信方法。
(付記10)
前記第2の情報処理装置が複数である場合、
前記第1の情報処理装置が、受信したデータブロックの送信期限及び前記第2の情報処理装置に応じて第1の送信スケジュールを生成し、
前記第2の送信スケジュールを受信する処理において、
前記第1の情報処理装置が、前記複数の第2の情報処理装置のうちいずれかの第2の情報処理装置から前記第2の送信スケジュールを受信し、
前記データブロックを送信する処理が、
受信した前記第2の送信スケジュールが、受信した前記第2の送信スケジュールの送信元の第2の情報処理装置に送信した第1の送信スケジュールとは異なる場合、相違があるタイムスロットにおいて送信すべきデータブロックの数又はデータ量が閾値を超える場合には、前記相違があるタイムスロットに送信がスケジュールされたデータブロックのうち優先順位に基づき選択されたデータブロックを、前記第2の送信スケジュールより後のタイムスロットに割り当てる
処理を含む付記1乃至6のいずれか1つ記載の情報通信方法。
(付記11)
第1の情報処理装置に、
1又は複数のデータブロックについての第1の送信スケジュールを、前記1又は複数のデータブロックの送信先であって前記第1の送信スケジュールに含まれる1又は複数のデータブロックの少なくとも一部のデータブロックについて受信リソースに基づき第2の送信スケジュールを生成する第2の情報処理装置に送信し、
前記第2の情報処理装置から前記第2の送信スケジュールを受信し、
受信した前記第2の送信スケジュールに基づき、当該第2の送信スケジュールで規定されているデータブロックを、前記第2の情報処理装置に送信する
処理を実行させるプログラム。
(付記12)
第1の情報処理装置に、
1又は複数のデータブロックについての第1の送信スケジュールを、前記1又は複数のデータブロックの送信元である第2の情報処理装置から受信し、
受信した前記第1の送信スケジュールと、前記第2の情報処理装置の受信リソースとに基づき、受信した前記第1の送信スケジュールに含まれる前記1又は複数のデータブロックの少なくとも一部のデータブロックについて第2の送信スケジュールを決定し、
前記第2の送信スケジュールを、前記第2の情報処理装置に送信する
処理を実行させるためのプログラム。
(付記13)
情報処理装置であって、
1又は複数のデータブロックについての第1の送信スケジュールを、前記1又は複数のデータブロックの送信先であって前記第1の送信スケジュールに含まれる1又は複数のデータブロックの少なくとも一部のデータブロックについて受信リソースに基づき第2の送信スケジュールを生成する第2の情報処理装置に送信する第1の送信部と、
前記第2の情報処理装置から前記第2の送信スケジュールを受信する受信部と、
受信した前記第2の送信スケジュールに基づき、当該第2の送信スケジュールで規定されているデータブロックを、前記第2の情報処理装置に送信する第2の送信部と、
を有する情報処理装置。
(付記14)
情報処理装置であって、
1又は複数のデータブロックについての第1の送信スケジュールを、前記1又は複数のデータブロックの送信元である第2の情報処理装置から受信する受信部と、
受信した前記第1の送信スケジュールと、前記第2の情報処理装置の受信リソースとに基づき、受信した前記第1の送信スケジュールに含まれる前記1又は複数のデータブロックの少なくとも一部のデータブロックについて第2の送信スケジュールを決定する決定部と、
前記第2の送信スケジュールを、前記第2の情報処理装置に送信する送信部と、
を有する情報処理装置。