以下に添付図面を参照して、この発明にかかるノード、通信プログラムおよび通信方法の好適な実施の形態を詳細に説明する。
(本通信手法の一実施例)
まず、実施の形態にかかる本通信手法の一実施例について説明する。本通信手法では、第1および第2の通信が混在する局所網において、第1の通信と第2の通信とが衝突しないようにノード間の通信を制御する。
ここで、第1の通信は、局所網に含まれるノード群のいずれかのノード間で周期的に実行される通信である。たとえば、第1の通信は、機械制御装置のフィードバック制御のための実時間通信や、音声や動画像などを遅滞なく転送するためのアイソクロナス転送などである。本明細書においては、ある時間間隔でデータの送受信が完了することを保証するという観点からアイソクロナス転送についても実時間通信として扱う。
また、第2の通信は、局所網に含まれるノード群のいずれかのノード間で不定期に実行される通信である。たとえば、第2の通信は、アプリケーションの修正プログラムの配信やファイル転送などの比較的遅延には耐えられるが高いスループットが要求される非実時間通信である。
図1は、本通信手法の一実施例を示す説明図である。図1において、局所網100は、ノード群N1〜N6とスイッチSW1,SW2とを含む構成である。
(1)個々のスイッチSW1,SW2に直接接続されているノード群がグループ化される。ここでは、スイッチSW1に直接接続されているノード群N1〜N3によってグループAが形成され、スイッチSW2に直接接続されているノード群N4〜N6によってグループBが形成されている。
(2)グループA,Bごとに、異なるグループA,Bに属するノード間の第2の通信を中継するための中継ノードが設置される。ここでは、グループAの中継ノードとしてノードN1が設置され、グループBの中継ノードとしてノードN4が設置されている。以下、中継ノードN1,N4のうちグループAの中継ノードN1に着目して本通信手法の一実施例について説明する。
(3)中継ノードN1は、仮想ネットワーク技術を用いて、中継ノードN1,N4間をつなぐ仮想的なリンク(以下、「仮想リンクVL」という)を設定する。仮想リンクVLは、異なるグループA,Bに属するノード間(たとえば、ノードN2,N5間)の第2の通信を中継するために使用される。
具体的には、たとえば、中継ノードN1は、グループAのノードN2から、グループBのノードN5に対する第2の通信に関するデータを受信し、仮想リンクVLを介して中継ノードN4に送信する。中継ノードN1から中継ノードN4に送信されたデータは、中継ノードN4からノードN5に送信される。
ここで、中継ノードN1は、受信された第2の通信に関するデータ群を、下記(6)において送信対象として順次決定して中継ノードN1のバッファに格納する。その結果、中継ノードN1は、送信タスクを起動すると、バッファ内のデータを格納順に局所網100に送出する。
(4)中継ノードN1は、局所網100の伝送能力に基づいて、周期的に実行される送信タスクの開始時点から現時点までに送信対象として順次決定したデータ列の送信にかかる所要時間tを算出する。すなわち、中継ノードN1は、現時点でバッファに格納されているデータ列を、局所網100に送出するのにかかる時間を推定する。
(5)中継ノードN1は、現時点から所要時間tが経過した時点が、複数のノード群N1〜N6のいずれかのノード間(たとえば、ノードN2,N5間)で周期的に実行される第1の通信の開始時点と一致するか否かを判定する。ここで、全ノードN1〜N6は、一定の時間間隔で同期を取っている。
(6)中継ノードN1は、判定された判定結果に基づいて、受信された第2の通信に関するデータ群の中から送信対象となるデータを決定する。なお、送信対象となるデータの決定例については、図2を用いて後述する。
(7)中継ノードN1は、送信対象として順次決定されたデータを、仮想リンクVLを介して中継ノードN4に送信する。具体的には、中継ノードN1は、送信タスクを起動して、バッファ内のデータ列を格納順に読み出して局所網100に送出する。
図2は、送信対象となるデータの決定例の概要を示す説明図である。ここでは、中継ノードN1における送信対象となるデータの決定例について説明する。図2中、データD1〜D12は、中継ノードN1において受信された第2の通信に関するデータ群である。また、ノードN1〜N6のいずれかのノード間で実行される第1の通信の通信元として、グループB内のノードN5を例に挙げて説明する。
図2において、データ列210は、ノードN5のバッファに格納されているデータ列Da〜Djを表している。これらデータ列Da〜Djは、ノードN5の送信タスクが起動すると、格納順(データDa→データDb→…)にバッファから読み出されて局所網100に送出される。その結果、第1の通信に関するデータDa,Dc,De,Dg,Diが一定間隔で局所網100に送出されることになる。
本通信手法では、上記(6)において、第1の通信の開始時点と一致する場合、データ群D1〜D12の中から第1の通信の経路と衝突しない経路のデータ(たとえば、データD1)を送信対象に決定する(データ列220)。一方、上記(6)において、第1の通信の開始時点と一致しない場合、データ群の中から任意のデータ(たとえば、データD2)を送信対象に決定する(データ列220)。
このように、本通信手法では、第1の通信の経路と衝突しない経路のデータを送信対象として順次決定することにより、第1および第2の通信の衝突を回避する。この際、第1の通信と衝突しないようにデータ列120を事前に整形してバッファに格納しておくことで、第1の通信の開始時点に合わせて、送信タイミングを制御する必要がない。
(ネットワークシステム300のシステム構成)
つぎに、実施の形態にかかるネットワークシステム300のシステム構成について説明する。図3は、ネットワークシステムのシステム構成図(その1)である。ネットワークシステム300において、ノードN1〜N12とスイッチSW1〜SW5とが、LAN(Local Area Network)などのネットワーク310を介して通信可能に接続されている。
ここで、ノードN1〜N12は、通信機能(実時間通信、非実時間通信)を有する通信装置であり、たとえば、自動車やロボットなどに搭載されるECU(Electric Control Unit)、センサ、アクチュエータなどである。
スイッチSW1〜SW5は、ノード間のデータを中継する機能を有する中継装置である。スイッチSW1〜SW5は、データを受信すると、たとえば、宛先として指定されている物理アドレスにしたがって、該データをノードN1〜N12のいずれかのノードに転送する。
ネットワークシステム300では、個々のスイッチSW1〜SW4に直接接続されているノード群によりグループG1〜G4が形成されている。具体的には、スイッチSW1に直接接続されているノード群N1〜N3によりグループG1が形成され、スイッチSW2に直接接続されているノード群N4〜N6によりグループG2が形成されている。また、スイッチSW3に直接接続されているノード群N7〜N9によりグループG3が形成され、スイッチSW4に直接接続されているノード群N10〜N12によりグループG4が形成されている。
さらに、ネットワークシステム300では、グループG1〜G4ごとに、グループ間の非実時間通信を中継する中継ノードN1,N4,N7およびN10が設けられている。また、ネットワークシステム300では、各中継ノード間をつなぐ仮想リンクVLがそれぞれ設定されている。
なお、以下の説明において「仮想リンクVLx−y」は、グループGxの中継ノードからグループGyの中継ノードへの仮想リンクを表している。ただし、「仮想リンクVLx−y」と「仮想リンクVLy−x」は同じ仮想リンクを表している。
具体的には、グループG1の中継ノードN1とグループG2〜G4の中継ノードN4,N7,N10との間に仮想リンクVL1−2,VL1−3,VL1−4が設定されている。グループG2の中継ノードN4とグループG3,G4の中継ノードN7,N10との間に仮想リンクVL2−3,VL2−4が設定されている。グループG3の中継ノードN7とグループG4の中継ノードN10との間に仮想リンクVL3−4が設定されている。
(ノードN1〜N12のハードウェア構成)
つぎに、図3に示したノードN1〜N12のハードウェア構成について説明する。図4は、ノードのハードウェア構成の一例を示すブロック図である。図4において、ノードN1〜N12は、CPU(Central Processing Unit)401と、ROM(Read‐Only Memory)402と、RAM(Random Access Memory)403と、I/F(Interface)404と、を備えている。また、各構成部はバス400によってそれぞれ接続されている。
ここで、CPU401は、各ノードN1〜N12の全体の制御を司る。ROM402は、ブートプログラムなどのプログラムを記憶している。RAM403は、CPU401のワークエリアとして使用される。I/F404は、通信回線を通じてLANなどのネットワーク310に接続され、このネットワーク310を介して他の装置に接続される。そして、I/F404は、ネットワーク310と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。
また、ノードN1〜N12は、上記構成部のほか、磁気ディスクドライブ、磁気ディスク、光ディスクドライブおよび光ディスクなどを備えていてもよい。ここで、磁気ディスクドライブは、CPU401の制御にしたがって磁気ディスクに対するデータのリード/ライトを制御する。
磁気ディスクは、磁気ディスクドライブの制御で書き込まれたデータを記憶する。光ディスクドライブは、CPU401の制御にしたがって光ディスクに対するデータのリード/ライトを制御する。光ディスクは、光ディスクドライブの制御で書き込まれたデータを記憶したり、光ディスクに記憶されたデータをコンピュータに読み取らせたりする。
(各種テーブルの記憶内容)
つぎに、ノードN1〜N12が用いる各種テーブル500,600の記憶内容について説明する。各種テーブル500,600は、図4に示したROM402、RAM403などの記憶装置に記憶されている。以下の説明では、特に指定する場合を除いて「ノードN1〜N12」を単に「ノードN」と表記する。
<アドレステーブルの記憶内容>
図5は、アドレステーブルの記憶内容の一例を示す説明図である。図5において、アドレステーブル500は、ノードN1〜N12ごとに、ノード名、システムアドレス、グループアドレス、物理アドレスおよび中継ノード情報を有する。
ノード名とは、本明細書において説明上使用するノードN1〜N12の名称である。システムアドレスとは、ネットワークシステム300全体で一意に決まる各ノードN1〜N12のアドレスである。物理アドレスとは、ネットワーク310に接続されるI/F404固有のアドレスである。物理アドレスは、たとえば、イーサネット(登録商標)のMAC(Media Access Control address)アドレスである。
グループアドレスとは、ネットワークシステム300内の各グループG1〜G4で一意に決まる各ノードN1〜N12のアドレスである。ここでは、グループアドレスのドット「.」で区切られた4組の数字のうち1〜3組目の数字(たとえば、172.xxx.1.1)はグループG1〜G4を識別するグループ識別IDである。また、4組目の数字(たとえば、1)はグループ内のノードNを識別するノード識別IDである。
中継ノード情報とは、中継ノードとして機能するノードNを識別する情報である。ここでは、中継ノードとして機能するノードNの中継ノード情報に「Yes」、グループノードとして機能するノードNの中継ノード情報に「No」が設定されている。なお、中継ノードは、予め設定された情報または選出アルゴリズムにより、各グループG1〜G4から必ず一つ(以上)決定される。
<グループ識別テーブルの記憶内容>
図6は、グループ識別テーブルの記憶内容の一例を示す説明図である。図6において、グループ識別テーブル600は、グループG1〜G4ごとに、グループ名とグループ識別IDとを対応付けて記憶している。
グループ名とは、本明細書において説明上使用するグループG1〜G4の名称である。グループ識別IDとは、各グループG1〜G4を識別する識別子である。グループ識別IDは、たとえば、IP(Internet Protocol)アドレスのネットワーク部である。ここでは、グループアドレスの上位部(たとえば、172.xxx.1)がグループ識別IDに相当する。
なお、以下の説明において、ネットワーク310内のノードN1〜N12のうち、非実時間通信を中継するノードNを「中継ノードJN」と表記し、中継ノードJNを除く残余のノードNを「グループノードGN」と表記する。ここで、中継ノードJNの機能的構成について説明する。
(中継ノードJNの機能的構成)
図7は、中継ノードの機能的構成を示すブロック図である。図7において、中継ノードJNは、受信部701と、設定部702と、関連付け部703と、送信部704と、検出部705と、割当部706と、第1の算出部707と、判定部708と、決定部709と、第2の算出部710と、抽出部711と、判断部712と、を含む構成である。
各機能部(受信部701〜判断部712)は、具体的には、たとえば、図4に示したROM402、RAM403などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、または、I/F404により、その機能を実現する。なお、各機能部(受信部701〜判断部712)の処理結果は、特に指定する場合を除いて、RAM403などの記憶装置に記憶される。
以下の説明において、中継ノードJNの各機能部(受信部701〜判断部712)の具体例を説明する場合、ネットワークシステム300内のノードN1を中継ノードJNとして想定する。また、ネットワークシステム300において混在するノードN間の第1および第2の通信として、ノードN間の実時間通信および非実時間通信を例に挙げて説明する。
まず、受信部701は、各種データを受信する。各種データは、たとえば、非実時間通信に関するデータ(以下、「非実時間データ」という)、同期パケット、実時間通信の流量割当要求および流量割当応答などである。なお、同期パケット、流量割当要求および流量割当応答についての詳細な説明は後述する。
具体的には、たとえば、受信部701が、複数のノードN群のうち一のノードN群に含まれるグループノードGNから他のノードN群に含まれるグループノードGNに対する非実時間データを受信する。ここで、ノードN群とは、たとえば、図3に示した個々のスイッチSW1〜SW4に直接接続されたノードNの集合である。また、一のノードN群とは、自ノードNを含むノードN群である。ここで、非実時間データのデータ構造について説明する。
図8は、非実時間データのデータ構造の一例を示す説明図である。図8において、非実時間800は、ヘッダ領域とデータ領域を有する。ヘッダ領域には、物理宛先アドレス、論理宛先アドレスおよびデータ量が設定される。データ領域には、各ノードNのアプリケーションがやり取りするデータが書き込まれる。
物理宛先アドレスとは、非実時間データの直接の送信先を示す物理アドレスである。論理宛先アドレスとは、非実時間データの最終的な宛先を示す論理アドレスである。論理宛先アドレスは、たとえば、各グループG1〜G4内でのみ通用するグループアドレスである。なお、物理宛先アドレスおよび論理宛先アドレスには、非実時間データの送信元を示す物理アドレスおよび論理アドレスが含まれている。データ量とは、非実時間データのデータ量である。
図7の説明に戻り、設定部702は、他のノードN群から選ばれた他ノードNとの間に経路を設定する。ここで、他ノードNとは、他のノードN群から選ばれた他の中継ノードJNである。経路とは、ネットワーク310上に構築される仮想的なネットワークの仮想リンクVLである。
具体的には、たとえば、まず、設定部702が、図5に示したアドレステーブル500の中継ノード情報を参照して、他の中継ノードN4,N7,N10を特定する。そして、設定部702が、自ノードNと他の中継ノードN4,N7,N10とをつなぐ仮想リンクVL1−2〜VL1−4(図3参照)を設定する。
仮想リンクVL(経路)は、異なるグループGに属するノードN間の非実時間データをまとめて転送するために使用される。仮想リンクVLは、オーバーレイネットワーク等の既存の仮想ネットワーク技術を利用して設定される。ただし、仮想リンクVLの具体的な設定手法については、既存技術のためここでは説明を省略する。また、自ノードNと他の中継ノードJNとの間に設定された仮想リンクVLは、たとえば、図9に示す宛先/転送先対応テーブル900を用いて管理される。
図9は、宛先/転送先対応テーブルの具体例を示す説明図(その1)である。図9において、宛先/転送先対応テーブル900には、宛先アドレスと転送先とが対応付けて記憶されている。ここで、宛先アドレスとは、非実時間データの最終的な宛先として指定される論理宛先アドレスである。ここでは、宛先アドレスとして、ノードNのグループアドレスが設定されている。
転送先とは、非実時間データの転送先である。ここでは、転送先として、自グループG内のグループノードGNの物理アドレス、または、他グループGの中継ノードJNとの間の仮想リンクVL(の識別子)が設定されている。なお、宛先/転送先対応テーブル900は、たとえば、以下の手順で作成されて、RAM403などの記憶装置に記憶される。
まず、設定部702が、アドレステーブル500を参照して、各ノードN1〜N12のうちグループノードGNのグループアドレスを宛先/転送先対応テーブル900の宛先アドレスに設定する。次に、設定部702が、図6に示したグループ識別テーブル600を参照して、各グループノードGNの宛先アドレスからグループGを特定する。
ここで、特定されたグループGが自グループGの場合、設定部702が、アドレステーブル500を参照して、宛先アドレスに対応する物理アドレスを転送先に設定する。一方、特定されたグループGが他グループGの場合、設定部702が、アドレステーブル500を参照して、そのグループGの中継ノードJNを特定する。そして、設定部702が、特定された中継ノードNとの間の仮想リンクVLを転送先に設定する。
図7の説明に戻り、関連付け部703は、自グループGのグループノードGNから受信された非実時間データと、設定された仮想リンクVLとを関連付ける。具体的には、たとえば、関連付け部703が、図10に示すキュー対応テーブル1000を参照して、受信された非実時間データを対応するデータキューに入れる。ここで、キュー対応テーブル1000の記憶内容について説明する。
図10は、キュー対応テーブルの記憶内容の一例を示す説明図である。図10において、キュー対応テーブル1000には、転送先とキューIDとが対応付けて記憶されている。ここで、転送先とは、非実時間データの転送先である。キューIDとは、非実時間データを保持するデータキューを識別する識別子である。
たとえば、受信された非実時間データの宛先アドレス(論理宛先アドレス)が「172.xxx.3.3」の場合、転送先は「VL1−3」となる(宛先/転送先対応テーブル900参照)。したがって、受信された非実時間データは、データキューQ4に入る(キュー対応テーブル1000参照)。
図7の説明に戻り、また、受信部701は、仮想リンクVLを介して、非実時間データを他の中継ノードJNから受信する。具体的には、たとえば、受信部701が、仮想リンクVL1−1を介して、グループG2の中継ノードN4から非実時間データを受信する。
また、関連付け部703は、他の中継ノードJNから受信された非実時間データと、仮想リンクVLとを関連付ける。具体的には、たとえば、関連付け部703が、キュー対応テーブル1000を参照して、受信された非実時間データを対応するデータキューに入れる。
たとえば、非実時間データの宛先アドレス(論理宛先アドレス)が「172.xxx.1.2」の場合、転送先は「0000000002」となる(宛先/転送先対応テーブル900参照)。したがって、非実時間データは、データキューQ1に入る(キュー対応テーブル1000参照)。
送信部704は、受信されたデータ群の中から送信対象として順次決定される非実時間データを、仮想リンクVLを介して、他の中継ノードJNに送信する。また、送信部704は、受信されたデータ群の中から送信対象として順次決定される非実時間データを、自グループGのグループノードGNに送信する。
ここで、データ群は、たとえば、データキューQ1〜Q5に保持されている非実時間データの集合である。また、送信対象となる非実時間データは、後述する決定部709によって順次決定されてバッファに格納されている非実時間データである。バッファは、たとえば、NIC(Network Interface Card)の送信バッファである。
送信部704の非実時間データの送信処理は、一定の時間間隔(たとえば、5[ms(ミリ秒)])で周期的に実行される。具体的には、一定の時間間隔で送信タスクが起動され、バッファに格納されている非実時間データが格納順に読み出されてネットワーク310に送出される。
すなわち、送信部704は、「自グループGのグループノードGN」から非実時間データを受信し、「他の中継ノードJN」に転送する。また、送信部704は、「他の中継ノードJN」から非実時間データを受信し、「自グループGのグループノードGN」に転送する。そこで、以下の説明では、非実時間データの送信処理を「非実時間データの転送処理」と表記する。
検出部705は、ネットワーク310内のノードN1〜N12間で時刻同期を取るための周期開始時点を検出する。具体的には、たとえば、検出部705が、自ノードNが起動してからの経過時間を計時し、予め設定された同期間隔が経過した時刻を周期開始時点として検出する。以下、時刻同期を取るための周期を「周期C1」と表記する。
送信部704は、周期C1の周期開始時点が検出された結果、同期パケットを他の中継ノードJNに送信する。具体的には、たとえば、送信部704が、時刻同期を取るための識別子が付与された同期パケットを他の中継ノードN4,N7,N10に送信する。これにより、ネットワークシステム300内の中継ノードJN間で同期を取ることができる。
また、送信部704は、同期パケットを自グループGのグループノードGNに送信する。これにより、グループG内の全ノードNで同期を取ることができる。なお、検出部705は、周期C1の周期開始時点の検出前に、他の中継ノードJNから同期パケットを受信した場合、同期パケットの受信時刻を周期C1の周期開始時点として検出する。
なお、非実時間データの転送処理は、周期C1の周期開始時点を基点として周期的に実行される。ただし、非実時間データの転送処理が実行される時間間隔は、周期C1の同期間隔以下である。以下、非実時間データの転送処理の周期を「周期C2」と表記する。
割当部706は、ネットワーク310の伝送能力に基づいて、仮想リンクVLに非実時間通信の流量を割り当てる。ここで、ネットワーク310の伝送能力とは、たとえば、ネットワークシステム300の物理リンクのキャパシティ(単位時間当たりの通信速度)である。流量とは、単位時間当たりに送信可能なデータ量である。
具体的には、たとえば、割当部706が、物理リンクのキャパシティを仮想リンクVL数で除算して、各仮想リンクVLに割り当てる流量を算出してもよい。一例として、ネットワークシステム300の物理リンクのキャパシティを12[Mbps]とする。この場合、各仮想リンクVL1−1〜VL1−3に割り当てる流量は4(=12/3)[Mbps]となる。
これにより、物理リンクのキャパシティを仮想リンクVL1−1〜VL1−3に均等に割り当てることができる。ただし、ノードN間の実時間通信のために流量が割り当てられている場合、割当可能な総流量は、物理リンクのキャパシティから実時間通信の割当流量を引いた値となる。
なお、流量割当結果は、たとえば、図11に示す割当流量/送信済データ量対応テーブル1100に記憶される。また、仮想リンクVLの割当流量は、送信部704により、他の中継ノードJNに送信される。また、受信部701により、他の中継ノードJNから仮想リンクVLの割当流量を受信した場合、割当流量/送信済データ量対応テーブル1100に記憶されて、記憶内容が更新される。
また、割当部706は、ネットワーク310の伝送能力に基づいて、自グループGのグループノードGNに非実時間通信の流量を割り当てる。具体的には、たとえば、割当部706が、物理リンクのキャパシティを、グループG1のグループノードGN数で除算して、各グループノードGNに割り当てる流量を算出してもよい。なお、流量割当結果は、たとえば、図11に示す割当流量/送信済データ量対応テーブル1100に記憶される。
図11は、割当流量/送信済データ量対応テーブルの記憶内容の一例を示す説明図である。図11において、割当流量/送信済データ量対応テーブル1100は、転送先ごとの割当流量および送信済データ量を有している。
ここで、転送先とは、非実時間データの転送先である。割当流量とは、単位時間当たり(ここでは、周期C2)に送信可能な非実時間データの流量[byte/周期C2]である。送信済データ量とは、転送先に送信されたデータのデータ量[byte]である。ここでは、後述する決定部709によって送信対象として順次決定された非実時間データのデータ量が累積して設定される。
なお、上記割当部706は、自ノードNと他の中継ノードJN(または、グループノードGN)との間の通信状況に応じて、各仮想リンクVL(または、各グループノードGN)に流量を割り当てることにしてもよい。これにより、動的に変化する通信状況に応じて、割当流量を制御することができる。ただし、通信状況に応じて割当流量を制御する手法は既存技術のため詳細な説明を省略する。
第1の算出部707は、ネットワーク310の伝送能力に基づいて、非実時間データの転送処理の周期開始時点から現時点までに送信対象として順次決定されたデータ列の送信にかかる所要時間tを算出する。ここで、データ列とは、バッファ内に格納されている非実時間データの集合である。また、所要時間tとは、たとえば、データ列のネットワーク310への送出にかかる時間である。
具体的には、たとえば、第1の算出部707が、下記式(1)を用いて所要時間tを算出することができる。ただし、tは、データ列の送信にかかる所要時間[s(秒)]である。Rは、ネットワーク310の単位時間当たりの通信速度[bps(ビット毎秒)]である。dは、データ列のデータ量[b(ビット)]である。
t=d/R ・・・(1)
ここで、ネットワーク310の通信速度Rを1[G(ギガ)bps]、データ列のデータ量dを100[K(キロ)b]とする。この場合、データ列の送信にかかる所要時間tは『t=100[Kb]/1[Gbps]=100[μs(マイクロ秒)]』である。
判定部708は、現時点から、算出された所要時間tが経過した時点が、複数のノード群のいずれかのノードN間で周期的に実行される実時間通信の周期開始時点と一致するか否かを判定する。ここで、ノードN間の実時間通信は、転送処理よりも短い時間間隔(たとえば、125[μs])で、周期C1(または周期C2)の周期開始時点を基点として周期的に実行される。以下、実時間通信の周期を「周期C3」と表記する。
具体的には、たとえば、判定部708が、周期C1(または周期C2)の周期開始時点から現時点までの経過時間T1に所要時間tを足し合わせた経過時間T2が、「0」または「周期C3の定数倍」か否かを判定する。
なお、「T2=0」は、「T1=0」かつ「t=0」、すなわち、現時点が周期C2の周期開始時点でかつ送信対象となるデータが未決定の場合である。すなわち、判定部708は、現時点から仮に所要時間tが経過した時点が、実時間通信の周期開始時点と一致するか否かを判定する。
ここで、経過時間T2が「0」または「周期C3の定数倍」の場合、判定部708が、実時間通信の周期開始時点と一致すると判定する。一方、経過時間T2が「0」または「周期T3の定数倍」ではない場合、判定部708が、実時間通信の周期開始時点と一致しないと判定する。
図12は、実時間通信の周期開始時点との一致判定例を示す説明図である。図12において、時間軸ST1上の各点は、ノードN間で周期的に実行される実時間通信の周期開始時点を表している。また、時間軸ST2,ST3上の点a1,b1は周期C2の周期開始時点、点a2,b2は現時点(経過時間T1)、点a3,b3は現時点から所要時間tが経過した時点(経過時間T2)を表している。
図12中(1)において、現時点a2から所要時間tが経過した時点a3が実時間通信の周期開始時点と一致している。この場合、判定部708は、現時点から所要時間tが経過した時点が、実時間通信の周期開始時点と一致すると判定する。
図12中(2)において、現時点b2から所要時間tが経過した時点b3が実時間通信の周期開始時点と一致していない。この場合、判定部708は、現時点から所要時間tが経過した時点が、実時間通信の周期開始時点と一致していないと判定する。
図7の説明に戻り、決定部709は、判定された判定結果に基づいて、受信されたデータ群の中から送信対象となる非実時間データを決定する。ここで、データ群とは、グループノードGNまたは他の中継ノードJNから受信された非実時間データの集合である。
以下、(i)実時間通信の周期開始時点と一致すると判定された場合と、(ii)実時間通信の周期開始時点と一致しないと判定された場合と、の各々について、決定部709の具体的な処理内容の一例を説明する。
まず、(i)の場合、決定部709は、他の中継ノードJNとの間に設定された仮想リンクVLのうち、ノードN間の実時間通信の経路と衝突する経路を特定する。ここで、実時間通信の経路と衝突する経路とは、実時間通信の通信先となるノードNが属するグループGの中継ノードJNとの間に設定された仮想リンクVLである。なお、実時間通信の通信元および通信先となるノードNは、たとえば、図13に示す実時間通信割当流量テーブル1300から特定することができる。
図13は、実時間通信割当流量テーブルの記憶内容の一例を示す説明図(その1)である。図13において、実時間通信割当流量テーブル1300は、割当ID、割当流量、送信元アドレスおよび宛先アドレスの項目を有し、各項目に情報を設定することで、実時間通信情報1300−1〜1300−4をレコードとして記憶している。
ここで、割当IDとは、ノードN間の実時間通信に割り当てられた割当流量を識別する識別子である。割当流量とは、ノードN間の実時間通信に割り当てられた流量[byte]である。送信元アドレスとは、実時間通信の通信元となるノードNのアドレスである。ここでは、送信元アドレスとして、実時間通信の通信元となるノードNのシステムアドレスおよびグループアドレスが表記されている。
宛先アドレスとは、実時間通信の通信先となるノードNのアドレスである。ここでは、宛先アドレスとして、実時間通信の通信先となるノードNのシステムアドレスおよびグループアドレスが表記されている。なお、実時間通信割当流量テーブル1300を作成するための具体的な処理内容については後述する。
具体的には、たとえば、決定部709が、実時間通信割当流量テーブル1300を参照して、実時間通信の通信先となるノードNのグループアドレスを特定する。ここでは、ノードN2,N5,N8,N9のグループアドレス「172.xxx.1.2」、「172.xxx.2.2」、「172.xxx.3.2」および「172.xxx.3.3」が特定される。
次に、決定部709が、宛先/転送先対応テーブル900を参照して、特定されたグループアドレスから転送先を特定する。ここでは、転送先「0000000002(物理アドレス)」、「VL1−2」および「VL1−3」が特定される。ここで特定される転送先(経路)は、ノードN間の実時間通信と衝突する転送先(経路)である。
すなわち、転送先「0000000002(物理アドレス)」、「VL1−2」および「VL1−3」は、ノードN間の実時間通信との衝突を回避するために、非実時間データの送信を抑制すべき転送先である。そこで、たとえば、図14に示す送信可能宛先リスト1400を用いて、転送先ごとの非実時間データの送信可否を管理する。
図14は、送信可能宛先リストの記憶内容の一例を示す説明図(その1)である。図14において、送信可能宛先リスト1400は、転送先ごとに、非実時間データを、送信可能か否かを示す情報(送信可否)を有している。
ここでは、送信可否が「可」の場合、転送先に非実時間データを送信可能であることを示している。一方、送信可否が「否」の場合、転送先に非実時間データを送信不能であることを示している。なお、送信可否は、初期状態では「可」である。
具体的には、たとえば、決定部709が、ノードN間の実時間通信と衝突する転送先の送信可否を「可」から「否」に変更する。ここでは、特定された転送先「0000000002(物理アドレス)」、「VL1−2」および「VL1−3」の送信可否が「可」から「否」に変更されている。
このあと、第2の算出部710は、ノードN間の実時間通信に割り当てられている割当流量を累積して総割当流量を算出する。具体的には、たとえば、第2の算出部710が、実時間通信割当流量テーブル1300を参照して、割当R1〜R4の割当流量を累積した総割当流量を算出する。ここでは、総割当流量は5800[byte]となる。
そして、抽出部711は、受信されたデータ群の中から、転送先の送信可否が「可」の非実時間データを抽出する。具体的には、たとえば、抽出部711が、送信可能宛先リスト1400を参照して、送信可否が「可」の転送先を特定する。ここでは、転送先「0000000003(物理アドレス)」および「VL1−4」が特定される。
次に、抽出部711が、キュー対応テーブル1000を参照して、特定された転送先のデータキューを特定する。ここでは、転送先「0000000003(物理アドレス)」のデータキューQ2および転送先「VL1−4」のデータキューQ5が特定される。そして、抽出部711が、特定されたデータキュー(ここでは、データキューQ2,Q5)から非実時間データを抽出する。
決定部709は、抽出された非実時間データを送信対象となる非実時間データに決定する。ここで、実時間通信の総割当流量よりデータ量が大きい非実時間データを送信対象とすると、次の周期C3の実時間通信と衝突する可能性がある。そこで、決定部709は、抽出された非実時間データのうち、データ量が、算出された総割当流量以下の非実時間データを送信対象となる非実時間データに決定する。
ただし、単位時間当たりに送信可能な割当流量(図11参照)を超える非実時間データを送信するとデータ喪失の可能性がある。このため、決定部709は、割当流量を超える転送先に対する非実時間データは送信対象に決定しない。
また、送信対象となる非実時間データが存在しない場合、決定部709は、自ノードNに直接接続されたスイッチSW1において破棄される無効データを送信対象に決定する。無効データとしては、たとえば、ポーズ0[s]のイーサネットフレームを用いることができる。
この際、決定部709は、実時間通信の総割当流量分の無効データを送信対象に決定することにしてもよい。なお、送信対象となる非実時間データが存在しない場合とは、抽出対象となる非実時間データが存在しない、または、抽出された非実時間データのうち、データ量が総割当流量以下の非実時間データが存在しない場合である。
また、決定部709は、総割当流量以下の非実時間データが複数存在する場合、複数の非実時間データの中から、データ量が最大の非実時間データを送信対象となる非実時間データに決定してもよい。これにより、非実時間データを効率的に送信することができる。
次に、(ii)の場合、第2の算出部710は、現時点から所要時間tが経過した時点から、実時間通信の周期開始時点となるまでの残余の時間を算出する。具体的には、たとえば、まず、第2の算出部710が、周期C1(または周期C2)の周期開始時点から、現時点直後の実時間通信の周期開始時点までの経過時間T3を算出する。
そして、第2の算出部710が、算出された経過時間T3から経過時間T2を引くことで、実時間通信の周期開始時点となるまでの残余の時間を算出することができる。なお、経過時間T2は、周期C1(または周期C2)の周期開始時点から現時点までの経過時間T1に所要時間tを足し合わせた経過時間である。
また、第2の算出部710は、ネットワーク310の伝送能力に基づいて、残余の時間に送信可能なデータ量を算出する。具体的には、たとえば、第2の算出部710が、下記式(2)を用いて、残余の時間に送信可能なデータ量を算出することができる。ただし、Xは残余の時間に送信可能なデータ量[b]、(T3−T2)は残余の時間[s]、Rはネットワーク310の単位時間当たりの通信速度[bps]である。
X=(T3−T2)×R ・・・(2)
ここで、残余の時間(T3−T2)を20[μs]とし、ネットワーク310の通信速度Rを1[Gbps]とする。この場合、残余の時間(T3−T2)に送信可能なデータ量Xは、『X=20[μs]×1[Gbps]=20[M(メガ)b]』である。
そして、抽出部711は、非実時間データ群の中から、残余の時間に送信可能なデータ量以下の非実時間データを抽出する。具体的には、たとえば、抽出部711が、データキューQ1〜Q5の中から、残余の時間に送信可能なデータ量以下の任意の非実時間データを抽出する。
決定部709は、抽出された非実時間データを送信対象となるデータに決定する。この際、決定部709は、抽出された非実時間データが複数存在する場合、複数のデータの中から、データ量が最大の非実時間データを送信対象となる非実時間データに決定してもよい。
なお、送信対象となる非実時間データが存在しない場合、決定部709は、自ノードNに直接接続されたスイッチSW1において破棄される無効データを送信対象に決定する。この際、決定部709は、残余の時間に送信可能なデータ量分の無効データを送信対象に決定することにしてもよい。
また、送信対象として決定された非実時間データは、バッファに格納される。そして、バッファに格納された非実時間データは、送信部704の送信タスクが起動すると、格納順にネットワーク310に送出されることになる。
このように、実時間通信と衝突する非実時間データの送信を抑制することにより、実時間通信と非実時間通信との衝突を避けることができる。なお、ネットワークシステム300内で実行される実時間通信が複数存在する場合、各実時間通信の開始時点を考慮して、送信対象となる非実時間データを決定することになる。
決定された決定結果は、図11に示した割当流量/送信済データ量対応テーブル1100に反映される。具体的には、割当流量/送信済データ量対応テーブル1100のうち、送信対象として決定された非実時間データの転送先の送信済データ量が更新される。より具体的には、送信対象として決定された非実時間データのデータ量が、現在の送信済データ量に加算される。
また、受信部701は、グループノードGNまたは他の中継ノードJNから実時間通信の流量割当要求を受信する。流量割当要求には、実時間通信の要求流量、通信元アドレスおよび通信先アドレスが含まれている。ここで、要求流量とは、ノードN間の実時間通信のために要求されている流量である。
通信元アドレスとは、実時間通信に関するデータ(以下、「実時間データ」という)の送信元アドレスであり、たとえば、送信元のノードNのシステムアドレスである。通信先アドレスとは、実時間データの宛先アドレスであり、たとえば、宛先のノードNのシステムアドレスである。なお、以下の説明では、流量割当要求の送信元(グループノードGNまたは他の中継ノードJN)を「フォワード元」という。
判断部712は、実時間通信の流量割当要求を受信した結果、要求流量を割り当て可能か否かを判断する。具体的には、たとえば、まず、判断部712が、実時間通信割当流量テーブル1300を参照して、宛先アドレスが流量割当要求に含まれる宛先アドレスと一致する割当流量の合計(以下、「ノード割当流量合計s」という)を算出する。
このあと、判断部712が、ノード割当流量合計sに流量割当要求に含まれる要求流量を加算して仮ノード割当流量合計s’を算出する。そして、判断部712が、仮ノード割当流量合計s’が実時間通信の周期C3の間に送信可能な最大データ量FMAX以下となるか否かを判断する。
ここで、仮ノード割当流量合計s’が最大データ量FMAXより大きい場合、送信部704が、割当不可を示す流量割当応答をフォワード元に送信する。すなわち、実時間通信の通信先となるノードNに送信されるデータ量が、周期C3の間に送信可能な最大データ量FMAXを超えてしまうことを回避して、ネットワーク310上でのデータの喪失を防ぐ。
一方、仮ノード割当流量合計s’が最大データ量FMAX以下の場合、判断部712が、アドレステーブル500を参照して、流量割当要求に含まれる宛先のシステムアドレスに対応するグループアドレスを特定する。そして、判断部712が、グループ識別テーブル600を参照して、特定されたグループアドレスに対応するグループGを特定する。
このあと、判断部712が、特定されたグループGが自グループGか否かを判断する。ここで、自グループGの場合、判断部712が、実時間通信割当流量テーブル1300を参照して、送信元が他グループGかつ宛先が自グループGの実時間通信の割当流量の合計(以下、「割当流量合計S」という)を算出する。
このあと、判断部712が、割当流量合計Sに要求流量を加算して仮割当流量合計S’を算出する。そして、判断部712が、仮割当流量合計S’が実時間通信の周期C3の間に送信可能な最大データ量FMAX以下となるか否かを判断する。
ここで、仮割当流量合計S’が最大データ量FMAXより大きい場合、送信部704が、割当不可を示す流量割当応答をフォワード元に送信する。すなわち、自グループGに送信されるデータ量が、周期C3の間に送信可能な最大データ量FMAXを超えてしまうことを回避して、ネットワーク310上でのデータの喪失を防ぐ。
一方、仮割当流量合計S’が最大データ量FMAX以下の場合、判断部712が、実時間通信に要求流量を割り当てると判断する。そして、判断部712が、流量割当要求に含まれる要求流量、送信元アドレスおよび宛先アドレスを実時間通信割当流量テーブル1300に設定して、新たな実時間通信情報をレコードとして登録する。なお、送信元および宛先のノードNのグループアドレスは、送信元および宛先のシステムアドレスを用いてアドレステーブル500から特定される。最後に、送信部704が、割当可を示す流量割当応答をフォワード元に送信する。
一方、特定されたグループGが他グループGの場合、判断部712が、実時間通信割当流量テーブル1300を参照して、送信元が自グループGかつ宛先が他グループGの実時間通信の割当流量合計Sを算出する。なお、特定されたグループGとは、流量割当要求に含まれる宛先のシステムアドレスに対応するグループアドレスから特定されたグループGである。
このあと、判断部712が、割当流量合計Sに要求流量を加算して仮割当流量合計S’を算出する。そして、判断部712が、仮割当流量合計S’が実時間通信の周期C3の間に送信可能な最大データ量FMAX以下となるか否かを判断する。
ここで、仮割当流量合計S’が最大データ量FMAXより大きい場合、送信部704が、割当不可を示す流量割当応答をフォワード元に送信する。すなわち、自グループGから他グループGに送信されるデータ量が、周期C3の間に送信可能な最大データ量FMAXを超えてしまうことを回避して、ネットワーク310上でのデータの喪失を防ぐ。
一方、仮割当流量合計S’が最大データ量FMAX以下の場合、送信部704が、アドレステーブル500を参照して、特定されたグループGの中継ノードJNに流量割当要求を送信する。このあと、受信部701が、割当不可を示す流量割当応答を中継ノードJNから受信した場合、送信部704が、割当不可を示す流量割当応答をフォワード元に送信する。
一方、受信部701が、割当可を示す流量割当応答を中継ノードJNから受信した場合、判断部712が、実時間通信に要求流量を割り当てると判断する。そして、判断部712が、流量割当要求に含まれる要求流量、送信元アドレスおよび宛先アドレスを実時間通信割当流量テーブル1300に設定して、新たな実時間通信情報をレコードとして登録する。
これにより、実時間通信の流量割当要求に対してネットワーク310の伝送能力を超えた流量割当を回避し、スイッチSW1〜SW4等の通信途中でデータが破棄されることを防いで、実時間通信の通信品質を確保することができる。
(グループノードGNの機能的構成)
つぎに、グループノードGNの機能的構成について説明する。図15は、グループノードの機能的構成を示すブロック図である。図15において、グループノードGNは、受信部1501と、検出部1502と、送信部1503と、割当部1504と、第1の算出部1505と、判定部1506と、決定部1507と、抽出部1508と、第2の算出部1509と、を含む構成である。
各機能部(受信部1501〜第2の算出部1509)は、具体的には、たとえば、図4に示したROM402、RAM403、磁気ディスク、光ディスクなどの記憶装置に記憶されたプログラムをCPU401に実行させることにより、または、I/F404により、その機能を実現する。なお、以下の説明において、グループノードGNの各機能部(受信部1501〜第2の算出部1509)の具体例を説明する場合、ネットワークシステム300内のノードN2をグループノードGNとして想定する。
受信部1501は、各種データを受信する。各種データは、たとえば、同期パケット、非実時間通信の流量割当結果、実時間通信の流量割当結果、実時間通信の流量割当応答、実時間データおよび非実時間データなどである。
検出部1502は、ネットワーク310内のノードN1〜N12間で時刻同期を取るための周期開始時点を検出する。具体的には、検出部1502が、中継ノードJNから同期パケットを受信した結果、同期パケットの受信時刻を周期C1の周期開始時点として検出する。
送信部1503は、実時間データを送信する。具体的には、たとえば、送信部1503が、データ群の中から送信対象として順次決定される実時間データを、他のグループノードGNに送信する。ここで、データ群は、たとえば、データキューに保持されている実時間データおよび非実時間データの集合である。また、送信対象となる実時間データは、後述する決定部1507によって順次決定されてバッファに格納されている。
また、送信部1503は、非実時間データを送信する。具体的には、たとえば、送信部1503が、データ群の中から送信対象として順次決定される非実時間データを、中継ノードJNに送信する。ここで、送信対象となる非実時間データは、後述する決定部1507によって順次決定されてバッファに格納されている。
送信部1503の実時間データおよび非実時間データの送信処理は、周期C1の周期開始時点を基点として周期C2で周期的に実行される。具体的には、周期C2の時間間隔で送信タスクが起動され、バッファに格納されている実時間データまたは非実時間データが格納順に読み出されてネットワーク310に送出される。この際、バッファ内のデータ列が、たとえば、図2に示したデータ列210のように整形されているため、周期C3の時間間隔で実時間データが送信される。
なお、非実時間データの宛先は、たとえば、図16に示す宛先/転送先対応テーブル1600を参照して設定される。図16は、宛先/転送先対応テーブルの具体例を示す説明図(その2)である。図16において、宛先/転送先対応テーブル1600には、宛先アドレスと転送先とが対応付けて記憶されている。
ここで、宛先アドレスとは、非実時間データの最終的な宛先として指定される論理宛先アドレスである。ここでは、宛先アドレスとして、ノードNのグループアドレスが設定されている。転送先とは、非実時間データの転送先である。ここでは、転送先として、グループノードGNまたは中継ノードJNの物理アドレスが設定されている。
たとえば、自グループG1のグループノードN3に非実時間データを送信する場合、物理宛先アドレスとしてグループノードN3の物理アドレスが設定される。一方、他グループG2のグループノードN5に非実時間データを送信する場合、物理宛先アドレスとして中継ノードN1の物理アドレスが設定され、論理宛先アドレスとしてグループノードN5のグループアドレスが設定される。
図15の説明に戻り、割当部1504は、受信された非実時間通信の流量割当結果を、グループノードGNと中継ノードJNとをつなぐ経路に割り当てる。具体的には、たとえば、割当部1504が、自ノードと中継ノードJNとをつなぐ物理リンクと流量割当結果とを関連付けて保持する。
また、送信部1503は、実時間通信の流量割当要求を中継ノードJNに送信する。ここで、実時間通信の流量割当要求とは、自ノードNを通信元とする実時間通信に必要となる流量の割当要求である。実時間通信の流量割当要求には、要求流量を表す情報、実時間通信の通信元(自ノード)のシステムアドレス、および実時間通信の通信先(他のグループノードGN)のシステムアドレスが含まれている。
なお、実時間通信の流量割当要求が送信された結果、要求流量の割当可を示す情報を含む流量割当応答が受信されると、たとえば、図17に示す実時間通信割当流量テーブル1700に記憶される。また、実時間通信の流量割当結果が受信されると、実時間通信割当流量テーブル1700に記憶される。
図17は、実時間通信割当流量テーブルの記憶内容の一例を示す説明図(その2)である。図17において、実時間通信割当流量テーブル1700は、割当ID、割当流量、送信元アドレスおよび宛先アドレスの項目を有し、各項目に情報を設定することで、実時間通信情報1600−1をレコードとして記憶している。
実時間通信割当流量テーブル1700では、自ノードNを実時間通信の通信元または通信先とする実時間通信情報が管理される。ここでは、自ノードNであるノードN2を通信先(宛先)とする実時間通信情報1700−1が記憶されている。
なお、流量割当応答を受信した結果、割当不可の場合、グループノードGNが自律的に実時間通信の要求流量を減らしてもよいか否かを判断することにしてもよい。実時間通信の要求流量を減らしてもよい場合としては、たとえば、実時間通信の要求流量が実際に必要となる流量より多い場合や、動画データ等の転送時にビットレートを下げても問題がない場合などがある。この場合、送信部1503が、実時間通信の要求流量を前回の要求流量よりも減らした流量割当要求を中継ノードJNに再送することになる。
第1の算出部1505は、ネットワーク310の伝送能力に基づいて、実時間データおよび非実時間データの送信処理の周期開始時点から現時点までに送信対象として順次決定されたデータ列の送信にかかる所要時間tを算出する。具体的には、たとえば、第1の算出部1505が、上記式(1)を用いて、データ列の送信にかかる所要時間tを算出することができる。
判定部1506は、現時点から、算出された所要時間tが経過した時点が、複数のノード群のいずれかのノードN間で周期的に実行される実時間通信の周期開始時点と一致するか否かを判定する。具体的には、たとえば、判定部1506が、周期C2(または周期C1)の周期開始時点から現時点までの経過時間T1に所要時間tを足し合わせた経過時間T2が、「0」または「周期C3の定数倍」か否かを判定する。
決定部1507は、判定された判定結果に基づいて、データ群の中から送信対象となるデータを決定する。ここで、データ群は、実時間データおよび非実時間データの集合である。具体的には、たとえば、決定部1507が、実時間通信割当流量テーブル1700を参照して、実時間通信の通信元となるノードNのグループアドレスを特定する。ここでは、ノードN6のグループアドレス「172.xxx.2.3」が特定される。
次に、決定部1507が、特定されたグループアドレスと自ノードNのグループアドレスとを比較して、実時間通信の通信元が自ノードNか否かを判断する。ここで、通信元が自ノードNの場合、決定部1507が、実時間通信の通信先(宛先)のデータキューの先頭の実時間データを送信対象に決定する。
ここでは、実時間通信の通信元は自ノードNではない。この場合、決定部1507が、実時間通信割当流量テーブル1700を参照して、実時間通信の通信先となるノードNのグループアドレスを特定する。ここでは、ノードN2のグループアドレス「172.xxx.1.2」が特定される。
次に、抽出部1508が、宛先/転送先テーブル対応1500を参照して、特定されたグループアドレスから転送先を特定する。ここで特定される転送先(経路)は、ノードN間の実時間通信と衝突する転送先(経路)である。すなわち、ここで特定される転送先は、ノードN間の実時間通信との衝突を回避するために、非実時間データの送信を抑制すべき転送先である。そこで、たとえば、図18に示す送信可能宛先リスト1800を用いて、転送先ごとの非実時間データの送信可否を管理する。
図18は、送信可能宛先リストの記憶内容の一例を示す説明図(その2)である。図18において、送信可能宛先リスト1800は、転送先ごとに、非実時間データを、送信可能か否かを示す情報(送信可否)を有している。
具体的には、たとえば、決定部1507が、ノードN間の実時間通信と衝突する転送先の送信可否を「可」から「否」に変更する。ただし、ここでは、ノードN2は自ノードNのため転送先は非特定となる。したがって、送信可能宛先リスト1800の送信可否に変更はない。
このあと、第2の算出部1509は、周期C1(または周期C2)の周期開始時点から現時点までに送信対象として決定されたデータ列のデータ量(送信済データ量)に基づいて、中継ノードJNとの間をつなぐ経路を使用して送信可能なデータ量を算出する。具体的には、たとえば、第2の算出部1509が、中継ノードJNとの間をつなぐ経路に割り当てられた割当流量から送信済データ量を引いて送信可能なデータ量(以下、「残余の割当流量」という)を算出する。
そして、抽出部1508は、データ群の中から、転送先の送信可否が「可」、かつ、算出された残余の割当流量以下のデータを抽出する。具体的には、たとえば、抽出部1508が、宛先/転送先対応テーブル1600を参照して、送信可否が「可」の転送先を特定する。ここでは、転送先「0000000001(物理アドレス)」および「0000000003(物理アドレス)」が特定される。
次に、抽出部1508が、特定された転送先のデータキューに入っている非実時間データを抽出する。決定部1507は、抽出された非実時間データを送信対象となる非実時間データに決定する。この際、決定部1507は、抽出された非実時間データのうち、データ量が、算出された残余の割当流量以下の非実時間データを送信対象となる非実時間データに決定する。
また、決定部1507は、残余の割当流量以下の非実時間データが複数存在する場合、複数のデータの中から、データ量が最大の非実時間データを送信対象となる非実時間データに決定してもよい。
なお、送信対象となる非実時間データが存在しない場合、決定部1507は、自ノードNに直接接続されたスイッチSW1において破棄される無効データを送信対象に決定する。この際、決定部1507は、残余の割当流量分の無効データを送信対象に決定することにしてもよい。
次に、(ii)の場合、第2の算出部1509は、現時点から所要時間tが経過した時点から、実時間通信の開始時点となるまでの残余の時間を算出する。具体的には、たとえば、まず、第2の算出部1509が、周期C2(または周期C1)の周期開始時点から、現時点直後の実時間通信の開始時点までの経過時間T3を算出する。
そして、第2の算出部1509が、算出された経過時間T3から経過時間T2を引くことで、実時間通信の開始時点となるまでの残余の時間を算出することができる。なお、経過時間T2は、周期C2(または周期C1)の周期開始時点から現時点までの経過時間T1に所要時間tを足し合わせた経過時間である。
また、第2の算出部1509は、ネットワーク310の伝送能力に基づいて、残余の時間に送信可能なデータ量を算出する。具体的には、たとえば、第2の算出部1509が、上記式(2)を用いて、残余の時間に送信可能なデータ量を算出することができる。
そして、抽出部1508は、データ群の中から、残余の時間に送信可能なデータ量以下のデータを抽出する。具体的には、たとえば、抽出部1508が、データキューの中から、残余の時間に送信可能なデータ量以下の任意の非実時間データを抽出する。
決定部1507は、抽出された非実時間データを送信対象となる非実時間データに決定する。この際、決定部1507は、抽出された非実時間データが複数存在する場合、複数のデータの中から、データ量が最大の非実時間データを送信対象となる非実時間データに決定してもよい。
ただし、単位時間当たりに送信可能な割当流量を超える非実時間データを送信するとデータ喪失の可能性がある。このため、決定部1507は、残余の時間に送信可能なデータ量以下であっても、割当流量を超える非実時間データは送信対象に決定しない。また、決定された決定結果は、送信済データ量としてRAM403などの記憶領域に記憶される。
なお、送信対象となる非実時間データが存在しない場合、決定部1507は、自ノードNに直接接続されたスイッチSW1において破棄される無効データを送信対象に決定する。この際、決定部1507は、残余の時間に送信可能なデータ量分の無効データを送信対象に決定することにしてもよい。
なお、送信対象として決定された実時間データおよび非実時間データは、バッファに格納される。そして、バッファに格納された実時間データおよび非実時間データは、送信タスクが起動すると格納順にネットワーク310に送出されることになる。このように、実時間通信と衝突する非実時間データの送信を抑制することにより、実時間通信と非実時間通信との衝突を避けることができる。
(中継ノードJNの通信処理手順)
つぎに、中継ノードJNの通信処理手順について説明する。ただし、中継ノードJN間の仮想リンクVLは予め設定されている場合を想定する。図19は、中継ノードの通信処理手順の一例を示すフローチャートである。図19のフローチャートにおいて、まず、検出部705により、自ノードNが起動してから周期C1の1周期経過したか否かを判断する(ステップS1901)。
ここで、1周期経過していない場合(ステップS1901:No)、受信部701により、他の中継ノードJNから同期パケットを受信したか否かを判断する(ステップS1902)。そして、同期パケットを未受信の場合(ステップS1902:No)、ステップS1901に戻る。
一方、同期パケットを受信した場合(ステップS1902:Yes)、検出部705により、同期パケットの受信時刻を周期C1の周期開始時点として検出する(ステップS1903)。また、ステップS1901において、1周期経過した場合(ステップS1901:Yes)、現時点を周期C1の周期開始時点として検出する(ステップS1904)。
そして、送信部704により、他の中継ノードJNに同期パケットを送信する(ステップS1905)。次に、検出部705により、現時点が周期C1の周期開始時点か否かを判断する(ステップS1906)。なお、現時点が周期C1の周期開始時点か否かを判断するための具体的な処理内容については後述する。
ここで、周期C1の周期開始時点ではない場合(ステップS1906:No)、ステップS1914に移行する。一方、周期C1の周期開始時点の場合(ステップS1906:Yes)、割当部706により、ネットワーク310の伝送能力に基づいて、自グループG内のグループノードGNに非実時間通信の流量を割り当てる(ステップS1907)。そして、割当部706により、グループノードGNの流量割当結果を割当流量/送信済データ量対応テーブル1100に登録する(ステップS1908)。
また、割当部706により、ネットワーク310の伝送能力に基づいて、他の中継ノードJNとの間の仮想リンクVLに非実時間通信の流量を割り当てる(ステップS1909)。そして、割当部706により、仮想リンクVLの流量割当結果を割当流量/送信済データ量対応テーブル1100に登録する(ステップS1910)。
このあと、送信部704により、グループノードGNに同期パケットおよびグループノードGNの流量割当結果を送信する(ステップS1911)。また、送信部704により、他の中継ノードJNに同期パケットおよび他の中継ノードJNの流量割当結果を送信する(ステップS1912)。
次に、検出部705により、周期C1の周期開始時点を修正する周期開始時点修正処理を実行する(ステップS1913)。そして、送信部704により、仮想リンクVLを介して、他の中継ノードJNに非実時間データを転送するための転送制御処理を実行する(ステップS1914)。
このあと、検出部705により、ネットワークシステム300の停止指示があったか否かを判断する(ステップS1915)。なお、ネットワークシステム300の停止指示は、たとえば、ネットワーク310を介して、外部のコンピュータ装置から受け付ける。
ここで、停止指示がない場合(ステップS1915:No)、現時点が周期C2の周期開始時点となるまで待って(ステップS1916:No)、周期C2の周期開始時点となった場合(ステップS1916:Yes)、ステップS1906に戻る。一方、停止指示があった場合(ステップS1915:Yes)、本フローチャートによる一連の処理を終了する。
ここで、ステップS1906において、現時点が周期C1の周期開始時点か否かを判断する具体的な処理内容の一例を説明する。ここでは、周期C1の時間間隔と周期C2の時間間隔との比率を「周期C1:周期C2=N:1」とする。また、周期C2のループ回数をnとする(ただし、nの初期値は「n=0」)。この場合、検出部705が、(n+1)をNで除算した値の余りが0の場合、現時点が周期C1の周期開始時点と判断する。
<周期開始時点修正処理>
次に、図19に示したステップS1913の周期開始時点修正処理の具体的な処理手順について説明する。図20は、ステップS1913の周期開始時点修正処理の具体的処理手順の一例を示すフローチャートである。
図20のフローチャートにおいて、まず、受信部701により、他の中継ノードJNから同期パケットおよび流量割当結果を受信したか否かを判断する(ステップS2001)。ここで、同期パケットおよび流量割当結果を未受信の場合(ステップS2001:No)、ステップS2006に移行する。
一方、同期パケットおよび流量割当結果を受信した場合(ステップS2001:Yes)、割当部706により、仮想リンクVLの流量割当結果を割当流量/送信済データ量対応テーブル1100に登録する(ステップS2002)。そして、検出部705により、同期パケットの受信時刻から、周期C1の周期開始時点にズレがあるか否かを判断する(ステップS2003)。
ここで、周期開始時点にズレがない場合(ステップS2003:No)、ステップS2005に移行する。一方、周期開始時点にズレがある場合(ステップS2003:Yes)、検出部705により、同期パケットの受信時刻を周期C1の周期開始時点として検出する(ステップS2004)。
このあと、受信部701により、すべての他の中継ノードJNから同期パケットおよび流量割当結果を受信したか否かを判断する(ステップS2005)。ここで、同期パケットおよび流量割当結果を受信した場合(ステップS2005:Yes)、図19に示したステップS1914に移行する。一方、同期パケットおよび流量割当結果を未受信の場合(ステップS2005:No)、割当部706により、ステップS2001における最初の判断処理から、予め設定された一定時間経過したか否かを判断する(ステップS2006)。
ここで、一定時間経過していない場合(ステップS2006:No)、ステップS2001に戻る。一方、一定時間経過した場合(ステップS2006:Yes)、割当部706により、同期パケットおよび流量割当結果を未受信の他の中継ノードJNとの間の仮想リンクVLの割当流量を「0」として割当流量/送信済データ量対応テーブル1100に登録して(ステップS2007)、図19に示したステップS1914に移行する。
なお、ステップS2007において、仮想リンクVLの割当流量が規定回数連続して「0」として登録された場合、その仮想リンクVLでつながれた他の中継ノードJNがネットワークシステム300から離脱したと判断することにしてもよい。
<転送制御処理手順>
次に、図19に示したステップS1914の転送制御処理の具体的な処理手順について説明する。図21および図22は、ステップS1914の転送制御処理の具体的処理手順の一例を示すフローチャートである。
図21のフローチャートにおいて、まず、第1の算出部707により、割当流量/送信済データ量対応テーブル1100内の各転送先の送信済データ量を「0」で初期化する(ステップS2101)。また、第1の算出部707により、送信可能宛先リスト1400を初期化する(ステップS2102)。
このあと、第1の算出部707により、割当流量/送信済データ量対応テーブル1100の各転送先の送信済データ量を累積して、周期C2の周期開始時点から現時点までに送信対象として順次決定されたデータ列のデータ量dを算出する(ステップS2103)。そして、第1の算出部707により、上記式(1)を用いて、データ列の送信にかかる所要時間tを算出する(ステップS2104)。
次に、判定部708により、現時点から所要時間tが経過した時点が、実時間通信の周期C3の周期開始時点と一致するか否かを判定する(ステップS2105)。ここで、周期C3の周期開始時点と一致する場合(ステップS2105:Yes)、決定部709により、実時間通信割当流量テーブル1300を参照して、実時間通信の通信先となるノードNのグループアドレスを特定する(ステップS2106)。
このあと、決定部709により、宛先/転送先テーブル対応800を参照して、特定されたグループアドレスから転送先を特定する(ステップS2107)。そして、決定部709により、送信可能宛先リスト1400内の特定された転送先の送信可否を「可」から「否」に変更する(ステップS2108)。
次に、第2の算出部710により、実時間通信割当流量テーブル1300を参照して、ノードN間の実時間通信に割り当てられている割当流量を累積して実時間通信の総割当流量を算出する(ステップS2109)。そして、決定部709により、算出された総割当流量をMaxSendNに代入して(ステップS2110)、図22のステップS2114に移行する。なお、MaxSendNは変数である。
また、ステップS2105において、周期C3の周期開始時点と不一致の場合(ステップS2105:No)、第2の算出部710により、現時点から所要時間tが経過した時点から、周期C3の周期開始時点となるまでの残余の時間を算出する(ステップS2111)。
このあと、第2の算出部710により、上記式(2)を用いて、残余の時間に送信可能なデータ量を算出する(ステップS2112)。そして、決定部709により、算出されたデータ量をMaxSendNに代入して(ステップS2113)、図22のステップS2114に移行する。なお、MaxSendNは変数である。
図22のフローチャートにおいて、まず、抽出部711により、送信可能宛先リスト1400を参照して、送信可否が「可」の転送先を特定する(ステップS2114)。次に、抽出部711により、キュー対応テーブル1000を参照して、特定された転送先のデータキューを特定する(ステップS2115)。
このあと、抽出部711により、特定された転送先のデータキューからMaxSendN以下の非実時間データを抽出する(ステップS2116)。そして、決定部709により、抽出された非実時間データを送信対象となる非実時間データに決定する(ステップS2117)。ただし、決定部709は、割当流量を超える転送先に対する非実時間データは送信対象に決定しない。
また、ステップS2117において、送信対象となる非実時間データが存在しない場合、決定部709は、自ノードNに直接接続されたスイッチSW1において破棄される無効データを送信対象に決定する。この際、決定部709は、MaxSendN分の無効データを送信対象に決定する。
次に、決定部709により、送信対象に決定された非実時間データのデータ量を割当流量/送信済データ量対応テーブル1100内の転送先の送信済データ量に累積する(ステップS2118)。そして、決定部709により、割当流量/送信済データ量対応テーブル1100内の各転送先の送信済データ量を累積して総送信済データ量を算出する(ステップS2119)。
このあと、決定部709により、算出された総送信済データ量が周期C2の送信可能量未満か否かを判断する(ステップS2120)。ここで、送信可能量未満の場合(ステップS2120:Yes)、図21に示したステップS2102に戻る。一方、送信可能量以上の場合(ステップS2120:No)、図19に示したステップS1915に移行する。
これにより、ネットワークシステム300において、実時間通信と非実時間通信との衝突を回避することができる。また、実時間通信と衝突する非実時間データの送出のみを抑制するため、ネットワーク310全体のスループットの低下を抑えることができる。
(グループノードGNの通信処理手順)
つぎに、グループノードGNの通信処理手順について説明する。図23は、グループノードの通信処理手順の一例を示すフローチャートである。図23のフローチャートにおいて、まず、受信部1501により、中継ノードJNから同期パケットを受信したか否かを判断する(ステップS2301)。
ここで、同期パケットを受信するのを待って(ステップS2301:No)、受信した場合(ステップS2301:Yes)、検出部1502により、同期パケットの受信時刻を周期C1の周期開始時点として検出する(ステップS2302)。このあと、検出部1502により、現時点が周期C1の周期開始時点か否かを判断する(ステップS2303)。
ここで、周期C1の周期開始時点ではない場合(ステップS2303:No)、ステップS2308に移行する。一方、周期C1の周期開始時点の場合(ステップS2303:Yes)、受信部1501により、中継ノードJNから同期パケットおよび流量割当結果を受信したか否かを判断する(ステップS2304)。
ここで、同期パケットおよび流量割当結果を受信するのを待って(ステップS2304:No)、受信した場合(ステップS2304:Yes)、割当部1504により、受信された非実時間通信の流量割当結果を、自ノードNと中継ノードJNとをつなぐ経路に割り当てる(ステップS2305)。
次に、検出部1502により、同期パケットの受信時刻から、周期C1の周期開始時点にズレがあるか否かを判断する(ステップS2306)。ここで、周期開始時点にズレがない場合(ステップS2306:No)、ステップS2308に移行する。一方、周期開始時点にズレがある場合(ステップS2306:Yes)、検出部1502により、同期パケットの受信時刻を周期C1の周期開始時点として検出する(ステップS2307)。
そして、送信部1503により、実時間データまたは/および非実時間データを送信するための送信制御処理を実行する(ステップS2308)。このあと、検出部1502により、ネットワークシステム300の停止指示があったか否かを判断する(ステップS2309)。
ここで、停止指示がない場合(ステップS2309:No)、現時点が周期C2の周期開始時点となるまで待って(ステップS2310:No)、周期C2の周期開始時点となった場合(ステップS2310:Yes)、ステップS2303に戻る。一方、停止指示があった場合(ステップS2309:Yes)、本フローチャートによる一連の処理を終了する。
<送信制御処理手順>
次に、図23に示したステップS2308の送信制御処理の具体的な処理手順について説明する。図24および図25は、ステップS2308の送信制御処理の具体的処理手順の一例を示すフローチャートである。
図24のフローチャートにおいて、まず、第1の算出部1505により、自ノードNと中継ノードJNとをつなぐ経路の送信済データ量を「0」で初期化する(ステップS2401)。また、第1の算出部1505により、送信可能宛先リスト1400を初期化する(ステップS2402)。
このあと、第1の算出部1505により、送信済データ量から、周期C2の周期開始時点から現時点までに送信対象として順次決定されたデータ列のデータ量dを特定する(ステップS2403)。そして、第1の算出部1505により、上記式(1)を用いて、データ列の送信にかかる所要時間tを算出する(ステップS2404)。
次に、判定部1506により、現時点から所要時間tが経過した時点が、実時間通信の周期C3の周期開始時点と一致するか否かを判定する(ステップS2405)。ここで、周期C3の周期開始時点と不一致の場合(ステップS2405:No)、第2の算出部1509により、現時点から所要時間tが経過した時点から、周期C3の周期開始時点となるまでの残余の時間を算出する(ステップS2406)。
このあと、第2の算出部1509により、上記式(2)を用いて、残余の時間に送信可能なデータ量を算出して(ステップS2407)、ステップS2416に移行する。一方、ステップS2405において、周期C3の周期開始時点と一致する場合(ステップS2405:Yes)、決定部1507により、実時間通信割当流量テーブル1300を参照して、実時間通信の通信元となるノードNのグループアドレスを特定する(ステップS2408)。
そして、決定部1507により、特定されたグループアドレスと自ノードNのグループアドレスとを比較して、実時間通信の通信元が自ノードNか否かを判断する(ステップS2409)。ここで、自ノードNの場合(ステップS2409:Yes)、決定部1507により、実時間通信の通信先のデータキューの先頭の実時間データを送信対象に決定する(ステップS2410)。
そして、決定部1507により、送信対象に決定された実時間データのデータ量を送信済データ量に累積して(ステップS2411)、図25に示すステップS2421に移行する。
一方、自ノードNではない場合(ステップS2409:No)、決定部1507により、実時間通信の通信先となるノードNのグループアドレスを特定する(ステップS2412)。このあと、決定部1507により、宛先/転送先対応テーブル1600を参照して、特定されたグループアドレスから転送先を特定する(ステップS2413)。
そして、決定部1507により、送信可能宛先リスト1800内の特定された転送先の送信可否を「可」から「否」に変更する(ステップS2414)。次に、第2の算出部1509により、自ノードNと中継ノードJNとをつなぐ経路に割り当てられた割当流量から送信済データ量を引いて残余の割当流量を算出する(ステップS2415)。
そして、決定部1507により、残余の割当流量または送信可能なデータ量のうち小さい方をMaxSendNに代入して(ステップS2416)、図25のステップS2417に移行する。
図25のフローチャートにおいて、まず、抽出部1508により、送信可能宛先リスト1800を参照して、送信可否が「可」の転送先を特定する(ステップS2417)。次に、抽出部1508により、特定された転送先のデータキューからMaxSendN以下の非実時間データを抽出する(ステップS2418)。
そして、決定部1507により、抽出された非実時間データを送信対象となる非実時間データに決定する(ステップS2419)。次に、決定部1507により、送信対象に決定された非実時間データのデータ量を送信済データ量に累積する(ステップS2420)。
なお、ステップS2419において、送信対象となる非実時間データが存在しない場合、決定部1507は、自ノードNに直接接続されたスイッチSWにおいて破棄される無効データを送信対象に決定する。この際、決定部1507は、MaxSendN分の無効データを送信対象に決定する。
このあと、決定部1507により、送信済データ量が割当流量未満か否かを判断する(ステップS2421)。ここで、割当流量未満の場合(ステップS2421:Yes)、図24に示したステップS2402に戻る。一方、割当流量以上の場合(ステップS2421:No)、図23に示したステップS2309に移行する。
これにより、ネットワークシステム300において、実時間通信と非実時間通信との衝突を回避することができる。また、実時間通信と衝突する非実時間データの送出のみを抑制するため、ネットワーク310全体のスループットの低下を抑えることができる。
<実時間通信の流量割当要求処理手順>
つぎに、グループノードGNの実時間通信の流量割当要求処理手順について説明する。図26は、実時間通信の流量割当要求処理手順の一例を示すフローチャートである。図26のフローチャートにおいて、まず、送信部1503により、実時間通信の流量割当要求を中継ノードJNに送信する(ステップS2601)。
このあと、受信部1501により、中継ノードJNから流量割当応答を受信するのを待って(ステップS2602:No)、受信した場合(ステップS2602:Yes)、グループノードGNにより、割当可か否かを判断する(ステップS2603)。
ここで、割当可の場合(ステップS2603:Yes)、グループノードGNにより、実時間通信割当流量テーブル1700に実時間通信情報を新たなレコードとして登録して(ステップS2604)、本フローチャートによる一連の処理を終了する。
一方、割当不可の場合(ステップS2603:No)、グループノードGNにより、実時間通信の要求流量を減らしてもよいか否かを判断する(ステップS2605)。ここで、要求流量を減らせない場合(ステップS2605:No)、本フローチャートによる一連の処理を終了する。
一方、要求流量を減らしてもよい場合(ステップS2605:Yes)、グループノードGNにより、新たな実時間通信の要求流量を算出して(ステップS2606)、ステップS2601に戻る。
<実時間通信の流量割当応答処理手順>
つぎに、中継ノードJNの実時間通信の流量割当応答処理手順について説明する。図27および図28は、実時間通信の流量割当応答処理手順の一例を示すフローチャートである。図27のフローチャートにおいて、まず、受信部701により、フォワード元から実時間通信の流量割当要求を受信したか否かを判断する(ステップS2701)。
ここで、実時間通信の流量割当要求を受信するのを待って(ステップS2701:No)、受信した場合(ステップS2701:Yes)、判断部712により、実時間通信割当流量テーブル1300を参照して、ノード割当流量合計sを算出する(ステップS2702)。
次に、判断部712により、算出されたノード割当流量合計sに流量割当要求に含まれる要求流量を加算して仮ノード割当流量合計s’を算出する(ステップS2703)。そして、判断部712により、仮ノード割当流量合計s’が実時間通信の周期C3の間に送信可能な最大データ量FMAX以下となるか否かを判断する(ステップS2704)。
ここで、仮ノード割当流量合計s’が最大データ量FMAXより大きい場合(ステップS2704:No)、送信部704により、割当不可を示す流量割当応答をフォワード元に送信して(ステップS2705)、本フローチャートによる一連の処理を終了する。
一方、仮ノード割当流量合計s’が最大データ量FMAX以下の場合(ステップS2704:Yes)、判断部712により、アドレステーブル500を参照して、流量割当要求に含まれる宛先のシステムアドレスに対応するグループアドレスを特定する(ステップS2706)。
そして、判断部712により、グループ識別テーブル600を参照して、特定されたグループアドレスに対応するグループGを特定する(ステップS2707)。このあと、判断部712により、特定されたグループGが自グループGか否かを判断する(ステップS2708)。
ここで、自グループGの場合(ステップS2708:Yes)、判断部712により、実時間通信割当流量テーブル1300を参照して、送信元が他グループGかつ宛先が自グループGの実時間通信の割当流量合計Sを算出する(ステップS2709)。
このあと、判断部712により、算出された割当流量合計Sに要求流量を加算して仮割当流量合計S’を算出する(ステップS2710)。そして、判断部712により、仮割当流量合計S’が実時間通信の周期C3の間に送信可能な最大データ量FMAX以下となるか否かを判断する(ステップS2711)。
ここで、仮割当流量合計S’が最大データ量FMAXより大きい場合(ステップS2711:No)、ステップS2705に移行する。一方、仮割当流量合計S’が最大データ量FMAX以下の場合(ステップS2711:Yes)、判断部712により、実時間通信割当流量テーブル1300に新たな実時間通信情報を登録する(ステップS2712)。
そして、送信部704により、割当可を示す流量割当応答をフォワード元に送信する(ステップS2713)。また、送信部704により、フォワード元を除く他の中継ノードJNおよび自グループGのグループノードGNに実時間通信情報を送信する(ステップS2714)。これにより、新たに登録された実時間通信情報を共有する。
また、ステップS2708において、特定されたグループが他グループGの場合(ステップS2708:No)、図28に示すステップS2715に移行する。
図28に示すフローチャートにおいて、まず、判断部712により、実時間通信割当流量テーブル1300を参照して、送信元が自グループGかつ宛先が他グループGの実時間通信の割当流量合計Sを算出する(ステップS2715)。
このあと、判断部712により、算出された割当流量合計Sに要求流量を加算して仮割当流量合計S’を算出する(ステップS2716)。そして、判断部712により、仮割当流量合計S’が実時間通信の周期C3の間に送信可能な最大データ量FMAX以下となるか否かを判断する(ステップS2717)。
ここで、仮割当流量合計S’が最大データ量FMAXより大きい場合(ステップS2717:No)、送信部704により、割当不可を示す流量割当応答をフォワード元に送信して(ステップS2718)、本フローチャートによる一連の処理を終了する。
一方、仮割当流量合計S’が最大データ量FMAX以下の場合(ステップS2717:Yes)、送信部704により、特定されたグループGの中継ノードJNに流量割当要求を送信する(ステップS2719)。このあと、受信部701により、他の中継ノードJNから流量割当応答を受信するのを待つ(ステップS2720:No)。
そして、流量割当応答を受信した場合(ステップS2720:Yes)、判断部712により、流量割当応答が割当可を示すか否かを判断する(ステップS2721)。ここで、割当不可の場合(ステップS2721:No)、ステップS2718に移行する。
一方、割当可の場合(ステップS2721:Yes)、判断部712により、実時間通信割当流量テーブル1300に新たな実時間通信情報を登録する(ステップS2722)。最後に、送信部704により、割当可を示す流量割当応答をフォワード元に送信して(ステップS2723)、本フローチャートによる一連の処理を終了する。
これにより、実時間通信の流量割当要求に対してネットワーク310の伝送能力を超えた流量割当を回避し、スイッチSW1〜SW4等の通信途中でデータが破棄されることを防いで、実時間通信の通信品質を確保することができる。
以上説明したように、本実施の形態によれば、各グループGから選ばれた中継ノードJN間をつなぐ仮想リンクVLを用いて、グループG間の非実時間データを転送することができる。これにより、グループG間の非実時間データを一つにまとめて、実時間通信との衝突を低減させることができる。
また、本実施の形態によれば、バッファ内に格納されているデータ列のネットワーク310への送出にかかる所要時間tから、次に格納するデータの送信時刻を予測して、実時間通信の開始時点と一致するか否かを判定することができる。
この結果、実時間通信の開始時点と一致する場合、実時間通信と衝突しない経路の非実時間データを送信対象に決定することができる。一方、実時間通信の開始時点と不一致の場合は、実時間通信の開始時点までに送信可能なデータ量以下の非実時間データを送信対象に決定することができる。
これにより、実時間通信と衝突する非実時間データの送出のみ抑制し、ネットワーク310全体のスループットの低下を抑えることができる。また、実時間通信と衝突しないようにデータ列を整形してバッファに格納しておくことで、送信タイミングの制御が不要となる。
たとえば、カメラで撮影された動画を、タイマ処理(割込処理)により極短い周期C3(たとえば、125[μs])の実時間通信で転送する場合、送信処理のためだけにCPU401のリソースを使い切って他の処理を実行できなくなることが想定される。しかし、本実施の形態によれば、極短い周期C3に合わせて送信タイミングを制御する必要がないため、高性能なCPU401を各ノードNが搭載していなくても、実時間通信との衝突を回避することができる。
また、本実施の形態によれば、送信対象となる適切な非実時間データが存在しない場合であっても、スイッチSWにおいて破棄される無効データを送信対象とすることにより、実時間通信と衝突しないデータ列を整形することができる。
また、本実施の形態によれば、実時間通信を行うためのプロトコルの種別は問わない。そのため、一般に必要となる実時間通信のためのプロトコル(たとえば、RTP:Real-time Transport Protocol)の設定作業が不要となり、システムを構築する作業者の負荷を低減させることができる。
また、本実施の形態によれば、複数のスイッチSWを用いてネットワークシステム300が構築可能となるため、システム構成の柔軟性や拡張性を向上させることができる。さらに、本実施の形態によれば、ノードN間の実時間通信が複数台のスイッチSWを超えて行われる場合であっても通信品質を確保することができる。また、2種類の通信が混在する多段スイッチ接続の局所網において、2種類の通信の衝突を回避することで、極短周期のアイソクロナス転送を遅滞なく実行することができる。
これらのことから、開示のノード、通信プログラムおよび通信方法によれば、高負荷の非実時間通信が行われている環境下であっても、実時間通信の通信品質を確保することができる。この際、ノードN間をつなぐ一本の物理的な通信媒体によって実時間通信と非実時間通信とが衝突しないように制御できるため、個々の通信に合わせて通信媒体を用意する必要がなく、システム構成の複雑度およびコストの増大化を防ぐことができる。
なお、上述した通信手法では、中継ノードJNと直接接続されていないスイッチSWを隣り合って接続することができないというトポロジ上の制約が存在する。たとえば、コアスイッチやルータスイッチなどのスイッチSW間をつなぐスイッチSWを設置する場合、中継ノードJNと直接接続されていないスイッチSWを隣り合って接続することになる。この場合、中継ノードJNと直接接続されていないスイッチSW間でデータが衝突する可能性がある。
そこで、スイッチSW同士をつなぐスイッチSWに中継ノードJNを設置することにしてもよい。具体的には、中継ノードJNと直接接続されたスイッチSWと、中継ノードJNと直接接続されていないスイッチSWとをつなぐスイッチSWに中継ノードJNを設置する。
図29は、ネットワークシステムのシステム構成図(その2)である。ネットワークシステム2900において、個々のスイッチSW1〜SW16と直接接続されたノード群(不図示)により形成された小グループSG1〜SG15が、ネットワーク310を介して通信可能に接続されている。
また、小グループSG1〜SG5により大グループBG1が形成され、小グループSG6〜SG10により大グループBG2が形成され、小グループSG11〜SG15により大グループBG3が形成されている。ここで、スイッチSW5,SW10,SW15は、スイッチ同士をつなぐコアスイッチである。そこで、各スイッチSW5,SW10,SW15に中継ノード2910,2920,2930を設置する。
ネットワークシステム2900では、大グループBG1〜BG3を超える非実時間通信は、小グループ間の通信として、一度、大グループの中継ノード(たとえば、中継ノード2910,2920,2930)に非実時間データを送信する。また、大グループ間の通信は、小グループ間の中継ノード同士と同様の通信処理手順を実施することにより、実時間通信と非実時間通信との衝突を回避することができる。このように、直接中継ノードを持たないスイッチ同士が隣接することを防ぐことにより、大規模システムにも対応することができる。
なお、本実施の形態で説明した通信方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本通信プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本通信プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)第1のノード及び第2のノードを備える第1のノード群と、第3のノード及び第4のノードを備える第2のノード群との間で、ネットワークを介して第1の通信および第2の通信を実行する該第1のノードであって、
前記第1のノードと前記第3のノードとの間に、前記ネットワークを介する通信経路を設定する設定手段と、
前記第2のノードと前記第4のノードとの間で行われる第2の通信に係るデータであって前記第2のノードから受信した該データから、送信対象のデータを決定する決定手段と、
決定された前記送信対象のデータを、前記通信経路を介して、前記第3のノードに送信する送信手段と、
前記ネットワークの伝送能力に基づいて、前記送信手段によって周期的に実行される送信処理の開始時点から現時点までに、前記送信対象のデータの送信にかかる所要時間を算出する算出手段と、
前記現時点から前記所要時間が経過した時点が、前記第2のノードと前記第4のノードとの間で周期的に実行される第1の通信の開始時点と一致するか否かを判定する判定手段と、
を備え、
前記決定手段は、前記判定手段によって判定された判定結果に基づいて、前記受信したデータから前記送信対象のデータを決定する、
ことを特徴とするノード。
(付記2)第1の通信の開始時点と一致すると判定された場合、前記受信したデータから、第1の通信の通信先となる前記第4のノードを備える前記第2のノード群の前記第3のノードを宛先としない任意のデータを抽出する抽出手段を備え、
前記決定手段は、前記抽出手段によって抽出されたデータを、前記送信対象のデータに決定することを特徴とする付記1に記載のノード。
(付記3)前記決定手段は、前記抽出手段によって抽出されたデータのうち、前記現時点から前記所要時間が経過した時点に前記第2のノードと前記第4のノード間で実行される第1の通信に関するデータのデータ量以下であるデータを、前記送信対象のデータに決定することを特徴とする付記2に記載のノード。
(付記4)前記算出手段は、第1の通信の開始時点と一致しないと判定された場合、前記ネットワークの伝送能力に基づいて、前記現時点から前記所要時間が経過した時点から、第1の通信の前記開始時点となるまでの残余の時間に送信可能なデータ量を算出し、
前記抽出手段は、前記受信されたデータの中から前記算出手段によって算出されたデータ量以下のデータを、抽出することを特徴とする付記2または3に記載のノード。
(付記5)前記決定手段は、前記受信されたデータのうち前記送信対象のデータが存在しない場合、前記ネットワークの中継装置において破棄されるデータを、前記送信対象のデータに決定することを特徴とする付記1〜4のいずれか一つに記載のノード。
(付記6)前記送信手段は、
前記通信経路を介して前記第3のノードから受信されるデータから順次決定される前記送信対象のデータを、前記第2のノードに送信することを特徴とする付記1〜5のいずれか一つに記載のノード。
(付記7)複数のノード群が中継装置を介して接続されたネットワーク内のノードであって、
データ群の中から送信対象として順次決定されるデータを、前記複数のノード群のうち自ノードを含むノード群から選ばれた一のノードに送信する送信手段と、
前記ネットワークの伝送能力に基づいて、前記送信手段によって周期的に実行される送信処理の開始時点から現時点までに前記送信対象として順次決定されたデータ列の送信にかかる所要時間を算出する算出手段と、
前記現時点から前記算出手段によって算出された所要時間が経過した時点が、前記複数のノード群のいずれかのノード間で周期的に実行される通信処理の開始時点と一致するか否かを判定する判定手段と、
前記判定手段によって判定された判定結果に基づいて、前記データ群の中から前記送信対象となるデータを決定する決定手段と、
を備えることを特徴とするノード。
(付記8)第1のノード及び第2のノードを備える第1のノード群と、第3のノード及び第4のノードを備える第2のノード群との間で、ネットワークを介して第1の通信および第2の通信を実行する該第1のノードのコンピュータに実行させる通信プログラムであって、
前記第2のノードと前記第4のノードとの間で行われる第2の通信に係るデータを前記第2のノードから受信する受信工程と、
前記第1のノードと前記第3のノードとの間に、前記ネットワークを介する通信経路を設定する設定工程と、
前記ネットワークの伝送能力に基づいて、前記受信したデータから送信対象として順次決定されるデータを送信するために周期的に実行される送信処理の開始時点から現時点までに順次決定された前記送信対象のデータの送信にかかる所要時間を算出させる算出工程と、
前記現時点から前記所要時間が経過した時点が、前記第2のノードと前記第4のノードとの間で周期的に実行される第1の通信の開始時点と一致するか否かを判定する判定工程と、
前記判定工程によって判定された判定結果に基づいて、前記受信したデータから前記送信対象のデータを決定する決定工程と、
を前記コンピュータに実行させることを特徴とする通信プログラム。
(付記9)第1のノード及び第2のノードを備える第1のノード群と、第3のノード及び第4のノードを備える第2のノード群との間で、ネットワークを介して第1の通信および第2の通信を実行する該第1のノードのコンピュータが、
前記第2のノードと前記第4のノードとの間で行われる第2の通信に係るデータを前記第2のノードから受信する受信工程と、
前記第1のノードと前記第3のノードとの間に、前記ネットワークを介する通信経路を設定する設定工程と、
前記ネットワークの伝送能力に基づいて、前記受信したデータから送信対象として順次決定されるデータを送信するために周期的に実行される送信処理の開始時点から現時点までに順次決定された前記送信対象のデータの送信にかかる所要時間を算出させる算出工程と、
前記現時点から前記所要時間が経過した時点が、前記第2のノードと前記第4のノードとの間で周期的に実行される第1の通信の開始時点と一致するか否かを判定する判定工程と、
前記判定工程によって判定された判定結果に基づいて、前記受信したデータから前記送信対象のデータを決定する決定工程と、
を実行することを特徴とする通信方法。