以下に添付図面を参照して、開示の通信装置、および通信方法の実施の形態1〜実施の形態3を詳細に説明する。
図1は、本実施の形態1〜実施の形態3における通信システム100の通信路選択例を示す説明図である。通信システム100は、通信装置101#0〜通信装置101#2と、基地局102とを含む。通信装置101は、ユーザにより使用可能な小型の携帯端末であり、たとえば、携帯電話等である。
基地局102は、通信装置101との間で無線通信を行い、他の端末との通話、通信を中継する装置である。また、基地局102は複数存在し、複数の基地局102と通信装置101で携帯電話網を形成している。また、基地局102は、ネットワークを通して、通信装置101とサーバとの通信を中継する。サーバは、特定のサービスを提供する装置であり、たとえば、Webページの閲覧を提供するWebサーバ、メール送受信サービスを提供するメールサーバ、動画再生を提供する動画配信サーバ等である。
図1では、通信装置101#0〜通信装置101#2が同一の列車内に存在している状態であり、さらに、列車の一部が基地局102と無線通信の行えないトンネル内を通過している状態を想定している。このとき、通信装置101#0はトンネル内に位置しているため、基地局102と通信できない状態である。通信装置101#1は、トンネルの入り口近くに位置しているため、基地局102と通信可能であるが、電界強度が低くノイズが多くなってしまい通信速度が遅い状態である。通信装置101#2は、トンネルの外に位置しているため、基地局102と通信可能であり、電界強度が高く、ノイズが少なく通信速度が速い状態である。また、通信装置101#0は、基地局102を介さずに通信するアドホック通信により、通信装置101#1、通信装置101#2と通信可能である。
このような状態で、ユーザ等の要求により実行されたアプリによって、通信装置101#0がサーバに接続する状態が発生した場合を想定する。なお、通信装置101#0は基地局102と直接通信できないが、通信装置101#1または通信装置101#2を経由して基地局102と通信することが可能である。このとき、通信装置101#0は通信装置101#2を経由する通信路を選択する。これにより、通信装置101#0は、基地局102と高速に通信することができる。
また、通信装置101#0の負荷より通信装置101#2の負荷が小さく、アプリから発生した通信処理103を通信装置101#2の方が速く実行可能な場合、通信装置101#0は、通信処理103を通信装置101#2に移行する。これにより、通信システム100間で負荷を分散することができる。
なお、通信処理103は、サーバとの送受信を行う処理や、また、それに付随する処理であってもよい。付随する処理としては、たとえば、通信装置101#0で実行するアプリがメーラアプリであれば、送受信時に行うBase64のエンコード/デコード処理である。また、付随する処理が動画再生アプリである場合は、動画フォーマットに対応したエンコード/デコード処理である。このように、本実施の形態における通信システム100は、複数の通信路から、最適な通信路を選択し、また負荷を分散できる。
図2は、実施の形態1〜実施の形態3にかかる通信装置101#0のハードウェアを示すブロック図である。なお、図2では通信装置101#0のハードウェアについて図示しているが、通信装置101#1、通信装置101#2のハードウェアについても通信装置101#0のハードウェアと同様のハードウェアを含む。図2において、通信装置101#0は、CPU201#0〜CPU201#nと、ROM(Read‐Only Memory)202と、RAM(Random Access Memory)203と、を含む。また、通信装置101#0は、フラッシュROMコントローラ204と、フラッシュROM205と、を含む。
また、通信装置101#0は、ユーザやその他の機器との入出力装置として、ディスプレイ206と、キーボード207と、通信モジュール208と、無線LAN通信モジュール209を含む。また、各部はバス210によってそれぞれ接続されている。
ここで、CPU201#0〜CPU201#nは、通信装置101#0の全体の制御を司る。CPU201#0〜CPU201#nは、シングルコアのプロセッサを並列して接続した全てのCPUを指している。nは0以上の整数である。CPU201#0〜CPU201#nは、それぞれ専用のキャッシュメモリを有する。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態1〜実施の形態3では、シングルコアのプロセッサであるCPUが並列されている形態を例にあげて説明する。
ROM202は、ブートプログラムなどのプログラムを記憶している。RAM203は、CPU201#0〜CPU201#nのワークエリアとして使用される。フラッシュROMコントローラ204は、CPU201#0〜CPU201#nの制御にしたがってフラッシュROM205に対するデータのリード/ライトを制御する。フラッシュROM205は、フラッシュROMコントローラ204の制御で書き込まれたデータを記憶する。データの具体例としては、通信装置101#0を使用するユーザが通信モジュール208を通して取得した画像データ、映像データや、本実施の形態である通信方法を実行するプログラムなどである。また、フラッシュROM205は、たとえば、メモリカード、SDカードなどを採用することができる。
ディスプレイ206は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ206は、たとえば、TFT液晶ディスプレイなどを採用することができる。キーボード207は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード207は、タッチパネル式の入力パッドやテンキーなどであってもよい。
通信モジュール208は、基地局102を経由して携帯電話網に接続する。通信装置101#0は、携帯電話網を経由して、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。また、通信装置101#0は、携帯電話網を経由して、通信装置101#1、通信装置101#2と接続してもよい。
無線LAN通信モジュール209は、基地局102を経由せずに他の通信装置101と接続する。たとえば、無線LAN通信モジュール209は、IEEE 802.11にしたがって、通信装置101#1、通信装置101#2と接続する。また、無線LAN通信モジュール209は、アドホックモードによって通信装置101#1、通信装置101#2と直接通信を行う。
(実施の形態1にかかる通信システム100の機能)
次に、通信システム100の機能について説明する。図3は、実施の形態1にかかる通信システム100の機能を示すブロック図である。通信システム100は、検出部311と、測定部312と、選択部313と、特定部314と、制御部315と、判定部316と、移行指示部317と、算出部318と、設定部319と、を含む。さらに、通信システム100は、移行部320と、実行部321と、通信部322と、収集部323と、実行部324と、通信部325と、を含む。
この制御部となる機能(検出部311〜収集部323)は、記憶装置に記憶されたプログラムをたとえばCPU201#0が実行することにより、その機能を実現する。また、実行部324と通信部325は、記憶装置に記憶されたプログラムを通信装置101#1内のたとえばCPU307#0〜CPU307#mのうち、CPU307#0が実行することにより、その機能を実現する。なお、mは0以上の整数である。また、記憶装置とは、具体的には、たとえば、図2に示したROM202、RAM203、フラッシュROM205などである。また、図3では検出部311〜収集部323がCPU201#0の機能として表示されているが、CPU201#1〜CPU201#nの機能であってもよい。
また、通信装置101#0は、RAM203内のパラメタテーブル301と入れ子情報テーブル302にアクセス可能である。また、通信装置101#0は、ソフトウェアとして、OS(Operating System)303と、計算ライブラリ304と、判定ライブラリ305と、収集ライブラリ306を実行する。なお、選択部313は、計算ライブラリ304に含まれ、特定部314〜設定部319は、判定ライブラリ305に含まれ、収集部323は収集ライブラリ306に含まれる。また、通信装置101#0は、アプリ331、アプリ332を実行する。また、アプリ331とアプリ332は、それぞれ、通信処理341、通信処理342を含む。また、通信処理343は、通信装置101#2からディスパッチされてきた処理であると想定する。
パラメタテーブル301は、自装置の基地局102への通信速度と、自装置とアドホック通信可能な他装置の通信速度と、を記憶するテーブルである。また、パラメタテーブル301は、自装置、他装置が通信処理341、通信処理342を実行可能な処理速度を記憶してもよい。なお、パラメタテーブル301の詳細は、図4にて後述する。
入れ子情報テーブル302は、自装置にディスパッチされた通信処理をさらに他装置へディスパッチする際に生成する入れ子情報を記憶するテーブルである。なお、入れ子情報テーブルの詳細は、図14にて後述する。
OS303は、通信装置101#0を制御するプログラムである。具体的には、OS303は、アプリ331、アプリ332が使用するライブラリを提供する。また、OS303は、ROM202、RAM203などのメモリの管理を行う。また、OS303は、CPU201#0が実行するアプリ331、アプリ332のスケジューリング処理を行う。
計算ライブラリ304は、パラメタテーブル301に格納する各フィールドを計算する機能を有する。判定ライブラリ305は、パラメタテーブル301に基づいて最適な通信路、または、通信処理341や通信処理342を高速に実行可能な通信装置101を判定する。また、判定ライブラリ305は、入れ子情報テーブル302への登録を行う。また、判定ライブラリ305は、入れ子情報テーブル302を参照して、通信処理を回収する。収集ライブラリ306は、アドホック通信可能な他装置に対して、通信速度と処理速度を問い合わせる。また、収集ライブラリ306は、問い合わせに対応する応答も行う。
検出部311は、自装置にて通信処理が実行されることを検出する機能を有する。たとえば、検出部311は、通信処理341が実行されることを検出する。また、検出部311は、基地局102を介さずに自装置に通信可能である他装置群のうち、移行元装置から移行された通信処理を検出してもよい。たとえば、検出部311は、通信装置101#2から移行された通信処理343を検出する。なお、検出されたという情報は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶される。
測定部312は、検出部311によって検出された通信処理が実行される場合、自装置および基地局102間の通信となる第1通信路の間で、通信処理を行うときの第1通信速度を測定する機能を有する。たとえば、測定部312は、基地局102に対してPingを発行して基地局との通信速度B0=1[Mbps]を測定する。なお、第1通信速度の値は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶される。
選択部313は、基地局102を介さずに自装置に通信可能である他装置および自装置間の通信速度と他装置および基地局102間の通信速度とのうち遅い通信速度を、他装置を経由する第2通信路の第2通信速度として選択する機能を有する。たとえば、他装置となる通信装置101#1および自装置となる通信装置101#0の通信速度tが10[Mbps]であり、通信装置101#1および基地局102間の通信速度Tが5[Mbps]であることを想定する。このとき、選択部313は、遅い通信速度となる5[Mbps]を選択する。なお、選択された第2通信路の第2通信速度の値は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶される。
特定部314は、第1および第2通信路の通信速度のうち速い通信路を、特定の通信路に特定する機能を有する。たとえば、特定部314は、第1通信路の第1通信速度が1[Mbps]であり、第2通信路の第2通信速度が5[Mbps]である場合、速い通信路となる第2通信路を、特定の通信路に特定する。また、特定部314は、第1通信路に含まれる通信装置101#0の基地局102との通信速度と、第2通信路に含まれる通信装置101#1の基地局102との通信速度とを比較する。また、特定部314は、第2通信路の通信速度が速い場合、第2通信路に含まれる通信装置101#1を経由装置として特定する。
また、特定部314は、基地局102との通信路に他装置となる通信装置101が存在する数に基づいて、特定の通信路を特定してもよい。他装置となる通信装置101が存在する数をホップ数と呼称する。たとえば、通信装置101#1を経由して基地局102と通信する通信路の通信速度が5[Mbps]であり、通信装置101#2と通信装置101#1とを経由して基地局102と通信する通信路の通信速度が5[Mbps]であると想定する。
このとき、特定部314は、ホップ数が小さい通信装置101#1を経由して基地局102と通信する通信路を特定の通信路として特定する。また、この場合、特定部314は、通信装置101#1を経由装置として特定する。なお、特定された情報は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶される。
制御部315は、特定部314によって第2通信路が特定の通信路に特定された場合、自装置および基地局102間で行われる通信を、他装置を経由して通信するように他装置を制御する機能を有する。たとえば、特定部314によって通信装置101#1を経由する通信路が特定の通信路に特定された場合を想定する。このとき、制御部315は、自装置および基地局間で行われる通信を、通信装置101#1を経由して通信するように通信装置101#1を制御する。
判定部316は、第1通信速度と第2通信速度とに基づいて他装置に通信処理を移行するか否かを判定する機能を有する。たとえば、判定部316は、第2通信速度が第1通信速度より大きい値となる場合に、通信装置101#1に通信処理341を移行すると判定する。また、判定部316は、自装置が通信処理を実行可能な第1処理速度および第1通信速度と、他装置が通信処理を実行可能な第2処理速度および第2通信速度とに基づいて判定してもよい。なお、判定された結果は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶される。
移行指示部317は、判定部316によって通信処理を他装置に移行させると判定された場合、通信処理を他装置に移行するように移行部320に指示する機能を有する。たとえば、移行指示部317は、通信処理341を通信装置101#1に移行するように移行部320に指示する。なお、指示を行ったという情報は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶されてもよい。
また、移行指示部317は、移行元装置から移行された通信処理を、さらに別の他装置に移行するように移行部320に指示してもよい。たとえば、移行指示部317は、通信装置101#2から移行された通信処理343を、通信装置101#1に移行するように移行部320に指示する。このとき、移行指示部317は、移行元装置となる通信装置101#2の識別情報と移行先装置となる通信装置101#1の識別情報と通信処理343の識別情報とを入れ子情報として、入れ子情報テーブル302に登録する。
算出部318は、特定の通信路が特定された場合、特定の通信路内に含まれる通信装置101ごとに、通信装置101から基地局102までの通信速度と通信装置101が通信処理を実行可能である処理速度とに基づいた評価値を算出する機能を有する。
たとえば、特定部314が、通信装置101#1を経由する第2通信路を特定の通信路に特定した場合を想定する。また、通信装置101#0から基地局102までの通信速度T0を1[Mbps]であると想定し、通信装置101#0が通信処理341を実行する処理速度P0を5[Mbps]であると想定する。また、通信装置101#0から通信装置101#1を経由して基地局102までの通信速度T1を5[Mbps]であると想定し、通信装置101#1が通信処理341を実行する処理速度P1を4[Mbps]であると想定する。
このとき、算出部318は、第2通信路内に含まれる通信装置101#0と、通信装置101#1に対して評価値を算出する。算出部318は、通信装置101#0の評価値として、Min(T0、P0)=Min(1、5)=1[Mbps]のように算出する。同様に、算出部318は、通信装置101#1の評価値として、Min(T1、P1)=Min(5、4)=4[Mbps]のように算出する。なお、算出結果は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶される。
設定部319は、算出部318によって算出された評価値群に基づいて、特定の通信路内に含まれる通信装置101群のうち通信処理を実行する実行対象装置を設定する機能を有する。たとえば、算出部318が、第2通信路内の通信装置101#0の評価値を1[Mbps]であると算出し、通信装置101#1の評価値を4[Mbps]であると算出した状態を想定する。このとき、設定部319は、評価値が大きい通信装置101#1を実行対象装置に設定する。なお、設定された実行対象装置の識別情報は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶されてもよい。
移行部320は、移行指示部317からの指示にしたがって通信処理を他装置に移行する機能を有する。たとえば、移行部320は、通信処理341を通信装置101#1に移行する。具体的に、移行部320は、ROM202、フラッシュROM205等に格納されている通信処理341の実行コードと、通信処理341の実行時情報となるCPU201#0のレジスタの値等を送信する。なお、移行を行ったという情報は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶されてもよい。
また、移行部320は、他装置から移行した通信処理の実行結果を回収してもよい。たとえば、移行部320は、通信装置101#1へ移行した通信処理341の実行結果を回収してもよい。なお、回収結果は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶され、通信処理を発生させたアプリによって読み込まれる。
実行部321、実行部324は、通信処理を実行する機能を有する。たとえば、実行部321は通信処理342を実行し、実行部324は通信処理341を実行する。なお、通信処理を実行したという情報は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶されてもよい。
通信部322、通信部325は、第1通信速度で通信処理を行う他装置からの要求に基づいて、基地局102との間の第2通信速度と第2処理速度とを他装置へ通信する機能を有する。たとえば、通信部322は、通信装置101#1からの要求に基づいて、基地局102との間の第2通信速度T0と通信装置101#0の第2処理速度P0とを通信装置101#1へ通信する。なお、通信結果は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶されてもよい。
収集部323は、第1通信速度に基づいて少なくとも一の他装置から基地局102および装置の第2通信速度と他装置に含まれる第2CPUの第2処理速度とを収集する機能を有する。たとえば、収集部323は、通信装置101#1の通信速度T1と処理速度P1を収集する。収集結果は、パラメタテーブル301に格納される。
図4は、パラメタテーブル301の記憶内容の一例を示す説明図である。図4では、通信装置101#0上のパラメタテーブル301#0の記憶内容の一例を示している。パラメタテーブル301は、通信装置名、基地局−通信装置間の通信速度B、通信装置間の通信速度t、基地局−通信装置間の最良通信速度T、というフィールドを含む。さらに、パラメタテーブル301は、CPUの通信処理における最大処理速度m、CPUアイドル率c、CPUの通信処理における処理速度P、経由装置V、ホップ数Hというフィールドを含む。以下、説明の簡略化のため、通信装置名フィールドを除く各フィールドを、B、t、T、m、c、P、V、Hというように、省略して記述する。
なお、以下の説明で、t以外の変数に接尾記号“0”〜“2”が付与された場合は、通信装置101#0〜通信装置101#2に対応している変数であることを示す。たとえば、B0は、通信装置101#0の基地局−通信装置間の通信速度であることを示しており、通信装置名フィールドが“通信装置101#0”であるレコードのBフィールドに格納されている。また、通信装置間の通信速度tには、接尾記号として“01”、“02”、“12”が付与されている。これらの接尾記号は、対応する通信装置101間の通信速度であることを示している。たとえば、t01は、通信装置101#0と通信装置101#1間の通信速度であり、通信装置名フィールドが“通信装置101#1”であるレコードのtフィールドに格納されていることを示している。
通信装置名フィールドには、自装置の名称、または自装置からアドホック接続が可能な通信装置の名称が格納される。Bフィールドには、基地局102から通信装置101までの通信速度が格納される。たとえば、通信装置101#0は、基地局102との通信速度を計測し1[Mbps]であった場合、B0=1となり、通信装置101#0のBフィールドに1を格納する。tフィールドには、通信装置101間の通信速度が格納される。たとえば、通信装置101#0は、通信装置101#1との通信速度を測定し、10[Mbps]であった場合、t01=10となり、通信装置101#1のtフィールドに、10を格納する。
Tフィールドには、基地局−通信装置間の複数の通信路のうち、最良な通信路の通信速度が格納される。たとえば、通信装置101#0は、基地局102と直接通信する通信路1と、通信装置101#1を経由して基地局102と通信する通信路2があった場合を想定する。このとき、通信装置101#0は、通信路1と通信路2の通信速度、または各通信路内の処理速度等に基づいて、最良な通信路の通信速度を設定する。なお、Tフィールドの具体的な算出例については、図5にて後述する。
mフィールドには、CPUの通信処理における最大処理速度が格納されている。たとえば、通信装置101#0が1秒間に最大で10[Mビット]の情報を処理可能である場合、m0=10となり、通信装置101#0のmフィールドに、10が設定される。cフィールドには、CPUのアイドル率が格納されている。たとえば、通信装置101#0が他のソフトウェア等を実行しており、CPUのアイドル率が50[%]である場合、c0=50となり、通信装置101#0は、通信装置101#0のcフィールドに50を格納する。
Pフィールドには、CPUの通信処理における処理速度が格納されている。たとえば、通信装置101#0が現在1秒間に5[Mビット]の情報を処理可能である場合、P0=5となり、通信装置101#0は、通信装置101#0のPフィールドに5を格納する。なお、Pフィールドの具体的な算出例については、図5にて後述する。
Vフィールドには、自装置が基地局102と直接通信を行わず、該当の通信装置101を経由した通信路にて基地局102と通信するか否かを示す値が格納されている。たとえば、通信装置101#0が通信装置101#1を経由した通信路にて基地局102と通信を行う場合、通信装置101#0は、通信装置101#1のVフィールドに、通信装置101#1を経由して通信を行うことを示す1を格納する。また、パラメタテーブル301#0にV1=1となっている場合、通信装置101#1は、基地局102と直接通信を行っていてもよいし、通信装置101#0以外の他の装置を経由して基地局102と通信を行っていてもよい。通信装置101#1が基地局102と直接通信を行うか否かは、パラメタテーブル301#1に記載されている。
Hフィールドには、基地局102との通信路に、自装置を除いた通信装置101が存在する数が格納されている。たとえば、通信装置101#0が通信装置101#1を経由して基地局102と通信している場合、H0=1となり、通信装置101#0は、通信装置101#0のHフィールドに1を格納する。
なお、パラメタテーブル301#0のうち、通信装置101#0に関するレコードのうち、mについては、通信装置101#0が自装置の仕様、または設定値より取得する。B、cについては、通信装置101#0が計測の結果を設定する。T、P、V、Hについては、通信装置101#0が図5に示す算出方法により得た結果を設定する。
また、通信装置101#0の他装置に関するレコードのT、P、Hについては、通信装置101#0が、基地局を介さずに自装置に通信可能である他装置に問い合わせ、通信装置101#0が問い合わせ応答処理を行い取得する。tについては、通信装置101#0が計測した結果を設定する。Vについては、初期値として0が設定されており、通信装置101#0が自装置のTを算出した結果を用いて設定する。
図5は、パラメタテーブル301の算出例を示す説明図である。符号501で示す数式は、T、Pを算出する数式を示している。符号502で示す説明図は、符号501で示す数式を、図4で示すパラメタテーブル301にて適用した状態を示している。通信装置101#xの最良通信速度Txは、下記(1)式によって算出される。
Tx=Max(Bx、Min(Ty、txy)、Min(Tz、txz)、…) …(1)
なお、接尾記号y、接尾記号zは、通信装置101#xと基地局102を介さずに通信可能な通信装置101#y、通信装置101#zを示している。また、通信装置101#xの処理速度Pは、下記(2)式によって算出される。
Px=mx*cx/100 …(2)
また、経由装置Vフィールドは、(1)式によるMax関数の引数群を評価値として、最も大きい評価値に対応する装置に1が設定される。以下、Max関数の引数を経由装置評価値と呼称する。具体的には、自装置が通信装置101#xである場合、通信装置101#xの経由装置評価値は、Bxとなる。同様に、通信装置101#yの経由装置評価値はMin(Ty、txy)となり、通信装置101#zの経由装置評価値はMin(Tz、txz)となる。また、自装置が基地局102と直接通信する場合は、経由装置が存在しない。したがって、通信装置101#xは、(1)式によるMax関数の引数群において、自装置のBxが最も大きい値となる場合、Vフィールドを変更しなくてよい。
符号502で示す説明図では、図4で設定されていた通信装置101#0のTおよびPの算出例、通信装置101#0〜通信装置101#2のVの設定例を示す。通信装置101#0は、(1)式、(2)式よりT0、P0を以下のように算出する。
T0=Max(B0、Min(T1、t01)、Min(T2、t02))
⇔T0=Max(1、Min(10、5)、Min(10、3))
⇔T0=Max(1、5、3)
⇔T0=5[Mbps]
P0=m0*c0/100
⇔P0=10*50/100=5[Mbps]
同様に、通信装置101#0は、V1、V2を設定する。通信装置101#0の経由装置評価値=1、通信装置101#1の経由装置評価値=5、通信装置101#2の経由装置評価値=3、となるため、通信装置101#0は、経由装置を通信装置101#1に特定する。具体的には、通信装置101#0は、通信装置101#1のVフィールドに1を格納する。
図6は、最良装置の設定例を示す説明図である。図6では、通信システム100が、図4で示したパラメタテーブル301の状態の場合に、最良装置の設定例を示している。また、最良装置とは、アプリケーションソフトウェア(以下、アプリと称する)601において、アプリ601に含まれる通信処理602を実行する実行対象装置である。最良装置の設定方法は、自装置と経由装置のうち、最良装置を判断する評価値となるMin(T、P)が最も大きい値となる装置に設定する。以下、最良装置を判断する評価値を最良装置評価値と呼称する。図6の例では、通信装置101#0は、自装置となる通信装置101#0の最良装置評価値を、以下のように算出する。
Min(T0、P0)=Min(5、5)=5
また、通信装置101#0は、経由装置に特定された通信装置101#1の最良装置評価値を、以下のように算出する。
Min(T1、P1)=Min(5、4)=4
以上より、最良装置は、通信装置101#0となる。したがって、パラメタテーブル301#0の状態における通信装置101#0は、アプリの通信処理を自装置にて行い、通信処理によって発生する基地局102との通信を、通信装置101#1を経由して行う。
以下、図7〜図11について、図4、図5で示したパラメタテーブル301を用いて、通信システム100が最良の通信路を選択する様子を説明する。図7〜図11では、通信装置101#0が、通信処理602を含むアプリ601を実行する状態を想定する。また、図7〜図11に示す通信装置101は、基地局102との通信速度Bが1[Mbps]より大きい場合には、他の装置を経由する通信路を検索せず、自装置と基地局102の通信を行う。
図7は、通信装置101#0の速度低下が起こっていない状態を示す説明図である。図7の状態は、基地局102と通信装置101#0〜通信装置101#2の通信速度Bが、それぞれ、B0=5[Mbps]、B1=3[Mbps]、B2=5[Mbps]となる。また、通信装置101間の通信速度tが、それぞれ、t01=t02=t12=10[Mbps]となる。
また、パラメタテーブル301#0の自装置に関する値として、T0=5[Mbps]、m0=10[Mbps]、c0=50[%]、P0=5[Mbps]、B0=5[Mbps]が設定されている。また、Hフィールドに関しては、通信装置101#0で基地局102と直接通信を行っているため、H0=0となる。なお、t01とt02に関しては、図7の状態では基地局102との通信速度が充分に確保されているため、パラメタテーブル301#0には格納されていなくてよい。
同様に、パラメタテーブル301#1には、T1=3[Mbps]、m1=10[Mbps]、c1=50[%]、P1=5[Mbps]、B1=3[Mbps]、H1=0が設定されている。また、パラメタテーブル301#2には、T2=5[Mbps]、m2=10[Mbps]、c2=40[%]、P2=4[Mbps]、B2=5[Mbps]、H2=0が格納されている。
図7の状態では、B0=5[Mbps]であり、基地局102との通信速度が充分であるため、通信装置101#0が最良装置となり、通信装置101にて、通信処理602を行う。なお、基地局102との通信速度が充分である場合、通信装置101#0は、他の装置のT、P、Hの問い合わせを行わない。
図8は、通信装置101#0の通信速度低下時における問い合わせ動作を示す説明図である。図8で示す通信システム100は、図7の状態から、B0が低下し、1[Mbps]になった状態を示している。通信速度が低下したため、通信装置101#0は、周囲の通信装置101に対して、T、P、Hを問い合わせる。
具体的には、通信装置101#0は、通信装置101#1と通信装置101#2に問い合わせを行う。問い合わせの結果、通信装置101#1は、T1、P1、H1を通信装置101#0に通知する。同様に、通信装置101#2は、T2、P2、H2を通信装置101#0に通知する。
通知を受けた通信装置101#0は、T1、P1、T2、P2を基に、T0、P0、V0〜V2を算出し、パラメタテーブル301#0に格納する。具体的な算出結果として、通信装置101#0は、(1)式にしたがってT0を得る。
T0=Max(B0、Min(T1、t01)、Min(T2、t02))
⇔T0=Max(1、Min(3、10)、Min(5、10))
⇔T0=Max(1、3、5)=5[Mbps]
同様に、通信装置101#0は、(2)式にしたがってP0を得る。
P0=m0*c0/100
⇔P0=10*50/100=5[Mbps]
また、通信装置101#0は、経由装置評価値群(B0、Min(T1、t01)、Min(T2、t02))=(1、3、5)のうち、最も大きい評価値となる通信装置101#2を経由装置に特定する。結果、通信装置101#0は、パラメタテーブル301のVに関して、V2=1、V0=V1=0を格納する。
図9は、通信装置101#0の通信速度低下時における経路選択方法を示す説明図である。図9で示す通信システム100は、B0が低下し、通信装置101#0が、T1、P1、T2、P2に基づいて、T0、P0、V0〜V2を算出した状態である。
算出後、通信装置101#0は、最良装置を設定する。図9における最良装置評価値群は、(Min(T0、P0)、Min(T2、P2))=(Min(5、5)、Min(5、4))=(5、4)となる。以上より、自装置と経由装置のうち、最も大きい最良装置評価値は通信装置101#0となるため、通信装置101#0は、最良装置を通信装置101#0に設定する。
これにより、通信システム100は、通信処理602を通信装置101#0で行う。また、通信装置101#0からみた経由装置がV2=1より通信装置101#2に特定されているため、選択される通信路は、通信装置101#0から、通信装置101#2を経由して基地局102までの通信路となる。これにより、通信システム100は、通信装置101#0と基地局102が直接通信する通信路より、高速な通信路を用いて通信処理602を行うことができる。
図10は、通信装置101#0の処理速度低下時における問い合わせ動作を示す説明図である。図10で示す通信システム100は、図9で示した通信システム100の状態から、CPUアイドル率cが50[%]から10[%]まで低下した場合を示している。このとき、通信装置101#0は、再度、最良装置を設定する。また、通信速度に関しては図9の状態から変化していないため、T0=5[Mbps]となり、経由装置は通信装置101#2に特定されたままである。
初めに、c0が変化したため、通信装置101は、(2)式より、新たなP0を得る。
P0=m0*c0/100
⇔P0=10*10/100=1[Mbps]
したがって、図10における最良装置評価値群は、(Min(T0、P0)、Min(T2、P2))=(Min(5、1)、Min(5、4))となる。以上より、自装置と経由装置のうち最も大きい最良装置評価値は通信装置101#2となるため、最良装置は通信装置101#2に設定される。最良装置にて通信処理602を行うため、通信装置101#0は、通信装置101#2に通信処理602をディスパッチする。
これにより、通信システム100は、CPUの処理能力に空きが少ない状態である通信装置101#0で通信処理602を行わず、CPUの処理能力に空きのある通信装置101#2で通信処理602を行うことで、負荷を分散することができる。また、CPUの処理能力に空きがなくなった場合、実行中の処理が低速化してしまう可能性がある。図10で示す通信システム100は、処理能力に空きのある通信装置101に通信処理602をディスパッチすることで、通信処理602の処理速度の低下を防ぐことができる。
図11は、通信装置101間の通信速度低下時における経路選択方法を示す説明図である。図11で示す通信システム100は、図10で示した通信システム100の状態から、通信装置101#2が通信装置101#0および通信装置101#1から離れた結果、t02およびt12が10[Mbps]から1[Mbps]まで低下した状態を示している。
t02とt12が変化したため、通信装置101#0は、(1)式により、T0を再計算する。
T0=Max(B0、Min(T1、t01)、Min(T2、t02))
⇔T0=Max(1、Min(3、10)、Min(5、1))
⇔T0=Max(1、3、1)=3[Mbps]
なお、P0の値は、c0が変化していないので、1[Mbps]のままである。続けて、通信装置101#0は、(B0、Min(T1、t01)、Min(T2、t02))=(1、3、1)のうち、最も大きい値である3に対応する通信装置101#1を経由装置に特定する。結果、通信装置101#0は、パラメタテーブル301のVに関して、V1=1、V0=V2=0を格納する。
続けて、通信装置101#0は、自装置と経由装置に対して最良装置評価値を算出し、最良装置を設定する。図11における最良装置評価値群は、(Min(T0、P0)、Min(T1、P1))=(Min(3、1)、Min(3、5))となる。
以上より、自装置と経由装置のうち最も大きい最良装置評価値は通信装置101#1となるため、最良装置は通信装置101#1に設定される。最良装置が変更されたため、通信装置101#2にディスパッチされていた通信処理602を回収し、通信装置101#1に通信処理602をディスパッチする。このように、通信システム100は、通信路が変更した場合に、最速な通信路を再度検索し、最速な通信路内の最良装置で通信処理602を実行するため、通信処理602を効率よく実行することができる。
図12は、経由装置評価値が同値である通信装置が複数存在する場合の経路選択方法を示す説明図である。図12で示す通信システム100は、通信装置101#2が既に通信装置101#1を経由してアプリ1201を実行している。この状態で、通信装置101#0の通信速度Bが低下した状態を想定している。
また、基地局102と通信装置101#0〜通信装置101#2の通信速度Bが、それぞれ、B0=1[Mbps]、B1=5[Mbps]、B2=1[Mbps]となる。また、通信装置101間の通信速度tが、それぞれ、t01=t02=t12=10[Mbps]となる。パラメタテーブル301#0の、自装置に関する値として、m0=10[Mbps]、c0=40[%]、B0=1[Mbps]が設定されている。また、P0については、(2)式より、4[Mbps]が設定されている。
通信速度Bが低下しているため、通信装置101#0は、通信装置101#1と通信装置101#2に問い合わせ、問い合わせ応答処理を行い、経由装置評価値を算出する。問い合わせの結果、通信装置101#0が受け取る値は、通信装置101#1からT1=5[Mbps]、P1=5[Mbps]、H1=0であり、通信装置101#2からT2=5[Mbps]、P2=5[Mbps]、H2=1である。これより、通信装置101#0は、(1)式より、T0を以下のように算出する。
T0=Max(1、Min(5、10)、Min(5、10))=5
また、通信装置101#0の経由装置評価値は、B0=1となる。同様に、通信装置101#1の経由装置評価値は、Min(T1、t01)=Min(5、10)=5となり、通信装置101#2の経由装置評価値は、Min(T2、t02)=Min(5、10)=5となる。
通信装置101#1と通信装置101#2の経由装置評価値が同値となるため、通信装置101#0は、ホップ数Hが小さい方を経由装置に特定する。図12の場合、H1=0、H2=1となるため、通信装置101#0は、経由装置を通信装置101#1に設定する。なお、通信装置101#1を経由装置に特定したため、通信装置101#0は、H0をH1+1=1に設定する。
経由装置の特定後、通信装置101#0は、最良装置を設定する。図12における最良装置評価値群は、(Min(T0、P0)、Min(T1、P1))=(Min(5、4)、Min(5、5))=(4、5)となる。以上より、自装置と経由装置のうち最も大きい最良装置評価値は通信装置101#1となるため、通信装置101#0は、最良装置を通信装置101#1に設定する。このように、通信システム100は、ホップ数を参照することで、通信路が最も短い経路を選択することができる。
図13は、入れ子情報テーブル302が生成される場合の通信システム100の状態を示す説明図である。図13で示す通信システム100は、通信装置101#1が既に通信装置101#2を経由して通信を行っている。この状態で、通信装置101#0の通信速度Bが低下した状態を想定している。具体的な通信速度として、基地局102と通信装置101#0〜通信装置101#2の通信速度Bが、それぞれ、B0=B1=1[Mbps]、B2=5[Mbps]となる。また、通信装置101間の通信速度tが、それぞれ、t01=t12=10[Mbps]となり、t02=1[Mbps]となる。
パラメタテーブル301#0の、自装置に関する値として、T0=5[Mbps]、m0=10[Mbps]、c0=30[%]、P0=3[Mbps]、B0=1[Mbps]が設定されている。また、通信装置101#0は、通信装置101#1と通信装置101#2に問い合わせ、T0=5[Mbps]を算出する。
また、通信装置101#0は、経由装置評価値群(B0、Min(T1、t01)、Min(T2、t02))=(1、5、1)のうち、最も大きい評価値となる通信装置101#1を経由装置に特定する。なお、通信装置101#1を経由装置に特定したため、通信装置101#0は、H0をH1+1=2に設定する。
同様に、図13における最良装置評価値群は、(Min(T0、P0)、Min(T1、P1))=(Min(5、3)、Min(5、4))=(3、4)となる。以上より、自装置と経由装置のうち、最も大きい最良装置評価値は通信装置101#1となるため、通信装置101#0は、最良装置を通信装置101#1に設定する。これにより、通信装置101#0は通信処理602を通信装置101#1にディスパッチする。
通信処理602のディスパッチを受けた通信装置101#1は、最良装置の設定を行う。図13における、通信装置101#1での最良装置評価値群は、(Min(T1、P1)、Min(T2、P2))=(Min(5、4)、Min(5、5))=(4、5)となる。以上より、最も大きい最良装置評価値は通信装置101#2となるため、通信装置101#0は、最良装置を通信装置101#2設定する。これにより、通信装置101#1は通信処理602を通信装置101#2にディスパッチする。
これにより、通信装置101#1は、ディスパッチされた通信処理602をさらに他の装置にディスパッチすることになったため、入れ子情報テーブル302#1に入れ子情報を格納する。入れ子情報テーブル302#1の具体例は、図14にて後述する。
図14は、入れ子情報テーブル302の記憶内容の一例を示す説明図である。図14では、図13における通信システム100にて生成されたパラメタテーブル301の構造と記憶内容の一例を示している。
入れ子情報テーブル302は、処理識別子、ディスパッチ元識別子、ディスパッチ先識別子という3つのフィールドを含む。処理識別子フィールドには、ディスパッチされる通信処理602を一意に特定できる識別情報が格納される。通信処理602を一意に特定できる識別情報としては、通信処理602の関数名や関数の先頭アドレス、通信処理602に採番された番号等である。ディスパッチ元識別子フィールドには、ディスパッチ元の通信装置101が一意に特定できる識別情報が格納される。
ディスパッチ先識別子フィールドには、ディスパッチ先の通信装置101が一意に特定できる識別情報が格納される。なお、通信装置101が一意に特定できる識別情報としては、MAC(Media Access Control)アドレスや、SIM(Subscriber Identity Module) ID(IDentification)等がある。
たとえば、図14で示す通信システム100は、アプリ601の識別情報が“1111”であることを想定する。さらに、通信装置101の識別子としてMACアドレスを採用し、通信装置101#0のMACアドレスが“00−00−00−00−00−00”である。同様に、通信装置101#1のMACアドレスが“00−00−00−00−00−01”であり、通信装置101#2のMACアドレスが“00−00−00−00−00−02”であることを想定する。
このとき、入れ子情報テーブル302#1のレコードには、処理識別子フィールドに“1111”が格納される。また、入れ子情報テーブル302#1のレコードに、ディスパッチ元識別子フィールドに“00−00−00−00−00−00”、ディスパッチ先識別子フィールドに“00−00−00−00−00−02”が格納される。
図15は、通信システム100の処理遷移を示す説明図である。図15では、図16〜図23で示す処理群の遷移図を示している。また、図15〜図23で示す通信システム100では、図6で示した設定と等しく、通信装置101#0が通信処理602を含むアプリ601を実行する状態を想定する。
通信装置101#0は、周期的にパラメタ更新処理を実行する。パラメタ更新処理内にて、通信装置101#0は、パラメタの問い合わせを通信装置101#1と通信装置101#2に行う。通信装置101#1と通信装置101#2は、パラメタの問い合わせに対応する問い合わせ応答処理を実行する。
また、通信装置101#0は、アプリ601からの通信要求により通信処理実行処理を実行する。通信処理実行処理内にて、通信装置101#0は、通信処理のディスパッチ受付要求を通信装置101#1と通信装置101#2のうち、最良装置となった装置に行う。たとえば、通信装置101#1が通信装置101#0における最良装置となった場合、要求を受け付けた通信装置101#1は、ディスパッチ応答処理を行う。通信装置101#1にてディスパッチ応答処理が終了した場合、通信装置101#1は、ディスパッチ元となる通信装置101#0に実行結果を通知する。実行結果の受付により通信装置101#0は、通信処理実行結果応答処理を実行する。
また、ディスパッチ応答処理にて、通信装置101#1における最良装置が通信装置101#2となった場合、通信装置101#1は、通信処理のディスパッチ受付要求を通信装置101#2に行う。要求を受け付けた通信装置101#2は、ディスパッチ応答処理を行う。通信装置101#2にてディスパッチ応答処理が終了した場合、通信装置101#2は、ディスパッチ元となる通信装置101#1に実行結果を通知する。実行結果の受付により通信装置101#1は、ディスパッチ元となる通信装置101#0に実行結果を通知する。
また、パラメタ更新処理時にアプリ601から通信要求がある場合、通信装置101#0は、通信処理再実行処理を実行する。通信装置101#0は、通信処理602のディスパッチ受付要求を通信装置101#1と通信装置101#2のうち、最良装置となった装置に行う。また、最良装置が前回から変更された場合、変更前の最良装置に対して、通信処理602の回収要求を通知する。たとえば、変更前の最良装置が通信装置101#1である場合、通信処理602の回収要求を受け付けた通信装置101#1は、通信処理回収応答処理を実行する。
また、通信処理回収応答処理にて、通信装置101#1における最良装置が通信装置101#2である場合、通信装置101#1は、通信装置101#2に通信処理602の回収要求を通知する。回収要求を受け付けた通信装置101#2は、通信処理回収応答処理を実行する。
図16は、パラメタ更新処理および問い合わせ応答処理を示すフローチャートである。ステップS1601〜ステップS1604、ステップS1606〜ステップS1612がパラメタ更新処理となり、ステップS1605が問い合わせ応答処理となる。
通信装置101#0は、パラメタテーブル301#0をクリアする(ステップS1601)。クリア後、通信装置101#0は、通信速度Bを測定し、パラメタテーブル301#0に登録する。登録後、通信装置101#0は、通信速度Bが閾値以下か否かを判断する(ステップS1603)。通信速度Bが閾値以下である場合(ステップS1603:Yes)、通信装置101#0は、周囲の通信装置に最良通信速度Tと処理速度Pとホップ数Hを問い合わせる(ステップS1604)。問い合わせを受けた通信装置101#1と通信装置101#2は、自装置の最良通信速度Tと処理速度Pとホップ数Hを、問い合わせ元装置に送信する(ステップS1605)。送信後、通信装置101#1と通信装置101#2は、問い合わせ応答処理を終了する。
通信装置101#0は、受け付けた最良通信速度Tと処理速度Pとホップ数Hをパラメタテーブル301#0に登録する(ステップS1606)。登録後、通信装置101#0は、応答があった通信装置101との通信速度tを測定し、パラメタテーブル301#0に登録する(ステップS1607)。
登録後、または通信速度Bが閾値より大きい場合(ステップS1603:No)、通信装置101#0は、自装置の最良通信速度Tと処理速度Pを算出する(ステップS1608)。算出後、通信装置101#0は、経由装置特定処理を実行する(ステップS1609)。経由装置特定処理の詳細については、図17にて後述する。実行後、通信装置101#0は、算出された最良通信速度Tと処理速度Pをパラメタテーブル301#0に登録する(ステップS1610)。登録後、通信装置101#0は、アプリ601からの通信要求があったか否かを判断する(ステップS1611)。
通信要求があった場合(ステップS1611:Yes)、通信装置101#0は、通信処理再実行処理を実行する(ステップS1612)。通信処理再実行処理を実行後、または通信要求がない場合(ステップS1611:No)、通信装置101#0は、パラメタ更新処理を終了する。
図17は、経由装置特定処理を示すフローチャートである。経由装置特定処理は、通信装置101#0〜通信装置101#2にて実行されるが、図17の説明では、説明の簡略化のため、通信装置101#0を実行主体として説明を行う。
通信装置101#0は、自装置のパラメタテーブル301から、経由装置評価値となる自装置のBと他装置のMin(T、t)のうち、最も値が大きいレコードを選択する(ステップS1701)。なお、最も値が大きいレコードが複数存在する場合、通信装置101#0は、最も値が大きいレコード全てを選択する。
選択後、通信装置101#0は、選択されたレコードが1つか否かを判断する(ステップS1702)。選択されたレコードが2つ以上である場合(ステップS1702:No)、通信装置101#0は、選択されたレコードのうち、自装置のレコードが含まれるか否かを判断する(ステップS1703)。自装置のレコードが含まれる場合(ステップS1703:Yes)、通信装置101#0は、自装置のレコードを選択する(ステップS1704)。自装置のレコードが含まれていない場合(ステップS1703:No)、通信装置101#0は、選択されたレコードのうち、最小のホップ数Hとなるレコードを選択する(ステップS1705)。
ステップS1704、ステップS1705の終了後、または選択されたレコードが1つである場合(ステップS1702:Yes)、通信装置101#0は、選択されたレコードが自装置のレコードか否かを判断する(ステップS1706)。選択されたレコードが自装置のレコードである場合(ステップS1706:Yes)、通信装置101#0は、パラメタテーブル301の自装置のホップ数Hを0に設定し(ステップS1707)、経由装置特定処理を終了する。
選択されたレコードが自装置のレコードでない場合(ステップS1706:No)、通信装置101#0は、選択されたレコードに対応する装置を経由装置に特定し(ステップS1708)、経由装置のVフィールドを1に設定する(ステップS1709)。設定後、通信装置101#0は、自装置のホップ数Hを経由装置のホップ数H+1に設定し(ステップS1710)、経由装置特定処理を終了する。
図18は、通信処理実行処理を示すフローチャートである。通信装置101#0は、アプリ601から、通信要求を受け付ける(ステップS1801)。受け付け後、通信装置101#0は、最良装置設定処理を実行する(ステップS1802)。最良装置設定処理の詳細は、図19にて後述する。最良装置設定処理の実行後、通信装置101#0は、自装置が最良装置に設定されたか否かを判断する(ステップS1803)。自装置が最良装置に設定された場合(ステップS1803:Yes)、通信装置101#0は、自装置にて通信処理602を実行し(ステップS1804)、通信処理実行処理を終了する。
自装置が最良装置に設定されていない場合(ステップS1803:No)、通信装置101#0は、最良装置に設定された通信装置101#xに、通信処理602と通信処理602のディスパッチ応答要求を通知する(ステップS1805)。なお、通信装置101#xとなる通信装置101は、通信装置101#1または通信装置101#2のいずれか一方となる。通知後、通信装置101#0は、通信処理実行処理を終了する。通知を受け付けた通信装置101#xは、通信処理ディスパッチ応答処理を実行する(ステップS1806)。
図19は、最良装置設定処理を示すフローチャートである。最良装置設定処理は、通信装置101#0〜通信装置101#2にて実行されるが、図19の説明では、説明の簡略化のため、通信装置101#0を実行主体として説明を行う。また、最良装置設定処理では、自装置のパラメタテーブル301に対して処理を行う。
通信装置101#0は、自装置と経由装置のレコードのうち、最良装置評価値となるMin(T、P)が最も大きいレコードを選択する(ステップS1901)。選択後、通信装置101#0は、選択されたレコードが1つか否かを判断する(ステップS1902)。選択されたレコードが1つである場合(ステップS1902:Yes)、通信装置101#0は、選択されたレコードの通信装置を最良装置に設定し(ステップS1903)、最良装置設定処理を終了する。
選択されたレコードが2つ以上の場合(ステップS1902:No)、通信装置101#0は、選択されたレコードのうち、自装置のレコードが含まれるか否かを判断する(ステップS1904)。自装置のレコードが含まれる場合(ステップS1904:Yes)、通信装置101#0は、自装置を最良装置に設定し(ステップS1905)、最良装置設定処理を終了する。自装置のレコードが含まれていない場合(ステップS1904:No)、通信装置101#0は、選択されたレコードのうち、最小のホップ数Hとなる装置を最良装置に設定し(ステップS1906)、最良装置設定処理を終了する。
図20は、通信処理ディスパッチ応答処理を示すフローチャートである。通信処理ディスパッチ応答処理は、通信装置101#1、通信装置101#2にて実行されるが、図20の説明では、説明の簡略化のため、通信装置101#1を実行主体として説明を行う。
通信装置101#1は、他装置から、通信処理602と通信処理602のディスパッチ応答要求を受け付ける(ステップS2001)。受け付け後、通信装置101#1は、自装置が最良装置に設定されているか否かを判断する(ステップS2002)。なお、最良装置の設定がされていない場合、通信装置101#1は、最良装置設定処理を実行する。
自装置が最良装置に設定されている場合(ステップS2002:Yes)、通信装置101#1は、自装置のCPU群のうち他のCPUからアイソレートしたCPUにて通信処理602を実行する(ステップS2003)。ここで、アイソレートとは、メモリ空間等を分断して動作させる処理である。これにより、通信装置101#1のユーザによって操作されるアプリ群は、ディスパッチされた通信処理602にアクセスできず、セキュリティを保つことが可能である。
通信処理602を実行後、通信装置101#1は、実行要求を通知した他装置とアドホック通信可能か否かを判断する(ステップS2004)。アドホック通信可能である場合(ステップS2004:Yes)、通信装置101#1は、実行要求を通知した通信装置101#yに、受け付けた通信処理602の処理識別子と実行結果を通知する(ステップS2005)。なお、通信装置101#yとなる通信装置101は、実行主体が通信装置101#1の場合、アプリ601を実行する通信装置101#0か、または通信装置101#0の最良装置となった通信装置101#2のいずれかである。
また、アドホック通信可能でない場合(ステップS2004:No)、通信装置101#1は、基地局102を経由して、実行要求を通知した通信装置101#yに、受け付けた通信処理602の処理識別子と実行結果を通知する(ステップS2006)。処理識別子と実行結果の通知を、通信装置101#1は、アイソレートしていたCPUを解除し(ステップS2007)、通信処理ディスパッチ応答処理を終了する。また、通知を受けた通信装置101#yは、通信処理実行結果応答処理を実行する(ステップS2008)。
自装置が最良装置に設定されていない場合(ステップS2002:No)、通信装置101#1は、処理識別子=受け付けた処理識別子、ディスパッチ元=実行要求を通知した他装置、ディスパッチ先=最良装置として、入れ子情報を生成する(ステップS2009)。生成後、通信装置101#1は、生成された入れ子情報を入れ子情報テーブル302に登録する(ステップS2010)。登録後、通信装置101#1は、最良装置となる通信装置101#xに、受け付けた通信処理602と通信処理602のディスパッチ応答要求を通知し(ステップS2011)、通信処理ディスパッチ応答処理を終了する。また、通知を受けた通信装置101#xは、通信処理ディスパッチ応答処理を実行する(ステップS2012)。
図21は、通信処理実行結果応答処理を示すフローチャートである。図21では、通信処理実行結果応答処理を実行する実行主体を図20で示した通信装置101#yであると想定して説明を行う。
通信装置101#yは、他装置から、通信処理602の処理識別子と実行結果を受け付ける(ステップS2101)。受け付け後、通信装置101#yは、入れ子情報テーブル302のうち、処理識別子フィールドの値が受け付けた処理識別子と一致する入れ子情報が存在するか否かを判断する(ステップS2102)。存在する場合(ステップS2102:Yes)、通信装置101#yは、一致した入れ子情報のディスパッチ元と、アドホック通信可能か否かを判断する(ステップS2103)。アドホック通信可能である場合(ステップS2103:Yes)、通信装置101#yは、ディスパッチ元フィールドに登録されている通信装置101#zに、受け付けた処理識別子と実行結果を通知する(ステップS2104)。通知後、通信装置101#yは、通信処理実行結果応答処理を終了する。
アドホック通信可能でない場合(ステップS2103:No)、通信装置101#yは、基地局102を経由して、ディスパッチ元フィールドに登録されている通信装置101#zに、受け付けた処理識別子と実行結果を通知する(ステップS2105)。通知後、通信装置101#yは、通信処理実行結果応答処理を終了する。また、通知を受けた通信装置101#zは、通信処理実行結果応答処理を実行する(ステップS2106)。
存在しない場合(ステップS2102:No)、実行結果は自装置のアプリに対応する実行結果であるため、通信装置101#yは、実行結果を受け付け(ステップS2107)、通信処理実行結果応答処理を終了する。
図22は、通信処理再実行処理を示すフローチャートである。通信装置101#0は、最良装置設定処理を実行する(ステップS2201)。設定後、通信装置101#0は、最良装置が変更されたか否かを判断する(ステップS2202)。最良装置が変更されていない場合(ステップS2202:No)、通信装置101#0は、通信処理再実行処理を終了する。
最良装置が変更されている場合(ステップS2202:Yes)、通信装置101#0は、自装置にて通信処理602を実行しているか否かを判断する(ステップS2203)。自装置にて通信処理602を実行していない場合(ステップS2203:No)、通信装置101#0は、ディスパッチ先の通信装置101#yに、ディスパッチした通信処理602の処理識別子と通信処理602の回収要求を通知する(ステップS2204)。通知を受けた通信装置101#yは、通信処理回収応答処理を実行する(ステップS2205)。
通知を行ってから一定時間経過後、通信装置101#0は、通信処理602の回収に成功したか否かを判断する(ステップS2206)。自装置にて通信処理602を実行している場合(ステップS2203:Yes)、または回収に成功した場合(ステップS2206:Yes)、通信装置101#0は、自装置が最良装置に設定されたか否かを判断する(ステップS2207)。自装置が最良装置に設定されていない場合(ステップS2207:No)、通信装置101#0は、最良装置となる通信装置101#xに通信処理602の処理識別子と通信処理602のディスパッチ応答要求を通知する(ステップS2208)。通知後、通信装置101#0は、通信処理再実行処理を終了する。通知を受けた通信装置101#xは、通信処理ディスパッチ応答処理を実行する(ステップS2209)。
自装置が最良装置に設定されている場合(ステップS2207:Yes)、通信装置101#0は、自装置にて通信処理602を実行し(ステップS2210)、通信処理再実行処理を終了する。回収に失敗した場合(ステップS2206:No)、通信装置101#0は、基地局102を経由して、ディスパッチ先の通信装置101#yに、ディスパッチした通信処理602の処理識別子と通信処理602の回収要求を通知する(ステップS2211)。なお、回収に失敗する場合としては、たとえば、回収失敗を受け付けた場合、一定時間経過しても応答を受け付けなかった場合等である。通知を行ってから一定時間経過後、通信装置101#0は、自装置が最良装置に設定されたか否かを判断する(ステップS2207)。
図23は、通信処理回収応答処理を示すフローチャートである。図23では、通信処理回収応答処理を実行する実行主体を図22で示した通信装置101#yであると想定して説明を行う。
通信装置101#yは、他装置から、処理識別子と通信処理602の回収要求を受け付ける(ステップS2301)。受け付け後、通信装置101#yは、入れ子情報テーブル302に、処理識別子フィールドの値が受け付けた処理識別子と一致する入れ子情報が存在するか否かを判断する(ステップS2302)。存在する場合(ステップS2302:Yes)、通信装置101#yは、ディスパッチ先フィールドに登録されている通信装置101#zに、ディスパッチした通信処理602の処理識別子と通信処理602の回収要求を通知する(ステップS2303)。通知を受けた通信装置101#zは、通信処理回収応答処理を実行する(ステップS2304)。
通知を行ってから一定時間経過後、通信装置101#yは、通信処理602の回収に成功したか否かを判断する(ステップS2305)。回収に成功した場合(ステップS2305:Yes)、通信装置101#yは、通信処理602を、回収要求を行った通信装置101#xに通知し(ステップS2306)、通信処理回収応答処理を終了する。また、入れ子情報が存在しない場合(ステップS2302:No)、通信装置101#yにて通信処理602を実行していることになるため、通信装置101#yは、ステップS2306の処理に移行する。回収に失敗した場合(ステップS2305:No)、通信装置101#yは、基地局102を経由して、ディスパッチ先の通信装置101#zに、ディスパッチした通信処理602の処理識別子と通信処理602の回収要求を通知する(ステップS2307)。通知を行ってから一定時間経過後、通信装置101#yは、通信処理602を、回収要求を行った通信装置101#xに通知し(ステップS2306)、通信処理回収応答処理を終了する。
以上説明したように、通信装置、および通信方法によれば、自装置および基地局の通信速度と、自他装置間の通信速度と他装置および基地局間の通信速度に基づく他装置経由の通信速度と、に基づいて通信処理を自装置または他装置で実行するか判定する。これにより、通信装置は、基地局との通信路のうち最適な通信路を選択して、通信処理を高速に処理できる。
また、通信装置は、他装置の処理速度を周期的に収集してもよい。通信装置は移動していることが多く、自装置および基地局の通信速度が刻々と変化する。通信装置は、このように刻々と変化する通信速度を周期的に収集することで、常に最適な通信路と通信処理を実行する装置を選択することができる。
また、通信装置は、自装置と基地局の通信速度および自装置の処理速度と、他装置経由の通信速度および他装置の処理速度と、に基づいて通信処理を自装置または他装置で実行するか判定してもよい。これにより、通信装置は、自装置で行っていた通信処理を負荷の低い他装置に移行させることで、負荷を分散することができる。
また、通信装置は、通信処理の実行結果を回収してもよい。これにより、通信処理を発生させたアプリは、通信処理が自装置で行われたか他装置で行われたかを意識せずに処理を続行することができる。
また、通信装置は、自装置から基地局までの第1通信路と自装置から他装置を経由して基地局までの第2通信路とのうち、速度の速い通信路を特定の通信路に特定し、特定の通信路を経由して通信するように、他装置を制御してもよい。これにより、通信装置は、より高速な通信路を選択して基地局と通信することができる。
また、通信装置は、通信路に他装置が存在する数に基づいて、特定の通信路を特定してもよい。これにより、通信装置は、より短い通信路を選択でき、通信路を最小に留めることができる。
(実施の形態2の概要)
実施の形態1にかかる通信システム100では、通信速度と処理速度のうち小さい値を最良装置評価値として設定していた。しかしながら、アプリによっては、CPUの処理速度を多大に要求し、通信速度は低速でもよいというアプリも存在する。したがって、実施の形態2にかかる通信システム100は、アプリがCPUの処理速度を要求するか、または、通信速度を要求するか否かによって、最良装置評価値を設定する。また、実施の形態2にかかる通信装置101#0〜通信装置101#2のハードウェアは、実施の形態1にかかるハードウェアと等しいため、説明を省略する。
図24は、実施の形態2にかかる通信システム100の機能を示す説明図である。実施の形態2にかかる検出部311〜実行部324のうち、判定部316と算出部318以外の機能については、実施の形態1の機能と等しいため、説明を省略する。同様に、実施の形態2にかかるパラメタテーブル301と入れ子情報テーブル302は、実施の形態1にかかるパラメタテーブル301と入れ子情報テーブル302と等しい情報を記憶するため、説明を省略する。
実施の形態2にかかる通信システム100は、アプリ属性テーブル2401にアクセス可能である。アプリ属性テーブル2401は、基地局102への通信速度の要求度と前記通信処理を実行可能な処理速度の要求度とをアプリごとに記憶するテーブルである。なお、アプリ属性テーブル2401の詳細は、図25にて後述する。
判定部316は、通信処理の発生元となるアプリの属性に基づいて他装置に通信処理を移行するか否かを判定してもよい。たとえば、通信処理341を発生させたアプリ331は、処理速度を要求するアプリであることがアプリ属性テーブル2401に記憶されている場合を想定する。このとき、判定部316は、通信装置101#1と通信装置101#2のうち、処理速度が最も速い装置に通信処理341を移行すると判定する。なお、判定結果は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶される。
算出部318は、通信処理の発生元となるアプリの属性に基づいて評価値を算出してもよい。たとえば、算出部318は、通信処理341を発生させたアプリ331は、処理速度を要求するアプリである場合、評価値を処理速度の値として算出する。なお、算出結果は、CPU201#0のレジスタ、キャッシュメモリ、RAM203などの記憶領域に記憶される。
図25は、実施の形態2にかかるアプリ属性テーブル2401の記憶内容の一例を示す説明図である。アプリ属性テーブル2401は、アプリ名称、CPU処理速度要求、通信速度要求という3つのフィールドを含む。アプリ名称フィールドには、アプリの名称など、対象アプリが一意に特定できる情報が格納される。
CPU処理速度要求フィールドには、対象アプリがCPU処理速度に対する要求が大きいか否かが格納される。具体的に、CPU処理速度要求フィールドには、要求が大きいことを示す識別子“大”と、要求が小さいことを示す識別子“小”のいずれかが格納される。通信速度要求フィールドには、対象アプリが通信速度に対する要求が大きいか否かが格納される。具体的に、通信速度要求フィールドには、要求が大きいことを示す識別子“大”と、要求が小さいことを示す識別子“小”のいずれかが格納される。以下の説明では、CPU処理速度要求と通信速度要求とをあわせてアプリ属性と称する。
たとえば、メーラアプリは、複雑な処理を要求しないうえ、通信量も小さいため、アプリ属性は、CPU処理速度要求、通信速度要求共に“小”に設定される。ダウンローダアプリは、複雑な処理は要求しないが、通信量は大きいことが好ましい。したがって、ダウンローダアプリのアプリ属性は、CPU処理速度要求が“小”に設定され、通信速度要求が“大”に設定される。
ネットワークゲームアプリは、通信量は小さくてよいが、通信処理で得た結果を用いて複雑な処理を実行する。したがって、ネットワークゲームアプリのアプリ属性は、CPU処理速度要求が“大”に設定され、通信速度要求フィールドが“小”に設定される。ストリーミング動画再生アプリは、通信量は大きいことが好ましく、また、通信処理で得た結果に対してデコード処理といった複雑な処理を実行する。したがって、ストリーミング動画再生アプリのアプリ属性は、CPU処理速度要求、通信速度要求共に“大”に設定される。
なお、ストリーミング動画再生アプリに関して、高圧縮の動画を受信する場合、通信速度を低くすることができる代わりに、伸長処理の処理量が多くなる。このような場合、ストリーミング動画再生アプリのアプリ属性は、CPU処理速度要求が“大”に設定され、通信速度要求が“小”に設定されてもよい。
実施の形態2にかかる通信システム100は、アプリ属性テーブル2401を参照して通信処理を実行する。なお、実施の形態2にかかる通信システム100は、図16〜図23で示した処理群のうち、最良装置設定処理以外は全て実施の形態1にかかる通信システム100と等しい処理を行う。実施の形態2にかかる最良装置設定処理については、図26で説明を行う。
図26は、実施の形態2にかかる最良装置設定処理を示すフローチャートである。実施の形態2にかかる最良装置設定処理のうち、ステップS2606〜ステップS2610は、図19に示したステップS1902〜ステップS1906と等しい処理を行うため、説明を省略する。また、実施の形態2にかかる最良装置設定処理は、通信装置101#0〜通信装置101#2にて実行されるが、図26の説明では、説明の簡略化のため、通信装置101#0を実行主体として説明を行う。また、実施の形態2にかかる最良装置設定処理では、自装置のパラメタテーブル301に対して処理を行う。
通信装置101#0は、アプリ属性テーブル2401を参照して、対象アプリのアプリ属性を確認する(ステップS2601)。CPU処理速度要求と通信速度要求が共に小である場合(ステップS2601:CPU処理速度要求:小&通信速度要求:小)、通信装置101#0は、自装置のレコードを選択し(ステップS2602)、ステップS2606の処理に移行する。
CPU処理速度要求が小、かつ通信速度要求が大である場合(ステップS2601:CPU処理速度要求:小&通信速度要求:大)、通信装置101#0は、自装置と経由装置のうち、最良装置評価値となるT=Max(T0、T1、T2)となるレコードを選択する(ステップS2603)。選択後、通信装置101#0は、ステップS2606の処理に移行する。
CPU処理速度要求が大、かつ通信速度要求が小である場合(ステップS2601:CPU処理速度要求:大&通信速度要求:小)、通信装置101#0は、自装置と経由装置のうち、最良装置評価値となるP=Max(P0、P1、P2)となるレコードを選択する(ステップS2604)。選択後、通信装置101#0は、ステップS2606の処理に移行する。
CPU処理速度要求と通信速度要求が共に大である場合(ステップS2601:CPU処理速度要求:大&通信速度要求:大)、通信装置101#0は、自装置と経由装置のうち、Min(T、P)=Max(Min(T0、P0)、Min(T1、P1)、Min(T2、P2))となるレコードを選択する(ステップS2605)。選択後、通信装置101#0は、ステップS2606の処理に移行する。
以上説明したように、実施の形態2にかかる通信装置、および通信方法によれば、アプリの属性に基づいて、通信処理を移行するか否かを判定する。これにより、通信装置は、アプリが要求する属性に最も適している装置に、通信処理を振り分けることができる。
たとえば、アプリ1が処理速度を要求し、アプリ2が通信速度を要求する場合を想定し、さらに、通信装置1が処理速度:中、通信速度:中、通信装置2が処理速度:小、通信速度:大、通信装置3が処理速度:大、通信速度:小となる場合を想定する。このとき、実施の形態1にかかる通信システム100では、アプリ1の通信処理、アプリ2の通信処理共に、通信装置1に移行することになる。このように、実施の形態1にかかる通信システム100では、アプリ1の通信処理を実行するに適している通信装置3、アプリ2に通信処理を実行するに適している通信装置2が存在するにもかかわらず、通信装置1を選択することになる。
しかし、実施の形態2にかかる通信システムでは、アプリ1の通信処理を通信装置3に移行し、アプリ2の通信処理を通信装置2に移行する。このように、実施の形態2にかかる通信システムは、それぞれのアプリが要求する属性に適している装置に通信処理を振り分けることができる。
(実施の形態3の概要)
実施の形態1、実施の形態2にかかる通信システム100では、アプリが要求する通信速度が通信路内の通信装置101#0の最良通信速度Tより大きい場合、アプリの要求を完全に満たすことができなかった。実施の形態3にかかる通信システム100では、複数の通信装置101に分散して通信処理を実行することにより、アプリの要求が満たされることを可能にする。
また、実施の形態3にかかる通信装置101#0〜通信装置101#2のハードウェアは、実施の形態1にかかるハードウェアと等しいため、説明を省略する。さらに、実施の形態3にかかる通信システム100の機能については、実施の形態2にかかる通信システム100の機能とほぼ等しいため、図を省略する。以下、実施の形態3の機能について説明を行う。
また、実施の形態3にかかるアプリ属性テーブルは、実施の形態2にかかるアプリ属性テーブル2401に、アプリが要求する通信速度を記憶するフィールドが追加される。実施の形態3にかかるアプリ属性テーブルの説明については、図28にて、実施の形態3にかかるアプリ属性テーブル2801として説明を行う。
特定部314は、特定の通信路の通信速度が、アプリ属性テーブル2801を参照した通信処理を発生させたアプリが要求する通信速度より小さい場合、特定の通信路以外から新たな特定の通信路を特定してもよい。たとえば、特定部314が、過去に、通信装置101#0から通信装置101#2を経由して基地局102へ通信する通信路を特定の通信路として特定したことを想定し、特定の通信路の通信速度が70[Mbps]であると想定する。
このとき、アプリが要求する通信速度が100[Mbps]である場合、特定部314は、通信装置101#0から通信装置101#2を経由して基地局102へ通信する通信路以外の通信路を新たな特定の通信路に特定する。たとえば、特定部314は、通信装置101#0から通信装置101#1を経由して基地局102へ通信する通信路を新たな特定の通信路に特定する。
以降、算出部318が、新たな特定の通信路内に含まれる装置ごとに、評価値を算出し、設定部319が、算出された評価値群に基づいて、新たな特定の通信路内に含まれる装置のうち、通信処理を実行する新たな実行対象装置を設定する。設定後、判定部316は、設定された新たな実行対象装置が自装置であるか否かを判定し、移行部320は、新たな実行対象装置が自装置でない場合、新たな実行対象装置に通信処理を移行する。
図27は、通信処理を複数の通信装置101にて分割実行する動作を示す説明図である。図27では、通信装置101#0で実行されるアプリ2701がストリーミング動画再生アプリであることを想定している。
また、アプリ2701がストリーミング再生する動画は、画面サイズが320×480[ピクセル]であり、色情報が24ビットカラーであり、30[フレーム/秒]である動画である。したがって、アプリ2701が要求する通信速度は、480*320*24*30≒106[Mbps]となる。さらに、アプリ2701が再生するストリーミング動画は、高圧縮であることを想定しており、1秒間分のデータを、約500[Kバイト]まで圧縮することが可能であることを想定する。このように、アプリ2701は、通信速度は小さくてよいが、CPU処理速度は大きい値を要求するため、通信システム100は、最良装置評価値を処理速度Pに設定する。
また、図27の状態は、通信装置101と基地局102の直接の通信路が遮断されており、B0=0[Mbps]であると想定する。さらに、他の通信速度Bは、それぞれ、B1=B2=7[Mbps]であると想定する。また、通信装置101間の通信速度tが、それぞれ、t01=t02=t12=54[Mbps]であると想定する。
また、パラメタテーブル301#0の自装置に関する値として、m0=10[Mbps]、c0=10[%]が格納されている。さらに、通信装置101#0は、パラメタ更新処理を実行することで、通信装置101#1、通信装置101#2からT1=T2=7[Mbps]、P1=60[Mbps]、P2=70[Mbps]、H1=H2=0を受け付ける。受け付け後、通信装置101#0は、(1)式、(2)式によって、T0=7[Mbps]、P0=1[Mbps]を算出し、パラメタテーブル301#0に登録する。
また、通信装置101#0は、経由装置評価値群(B0、Min(T1、t01)、Min(T2、t02))=(0、7、7)から、最も大きい評価値となる通信装置101#1、通信装置101#2のうち、通信装置101#2を経由装置に特定する。さらに、通信装置101#0は、最良装置評価値群(P0、P2)=(1、70)から、通信装置101#2を最良装置に設定する。設定後、通信装置101#0は、通信装置101#2に通信処理2702#1をディスパッチする。
しかしながら、通信装置101#2は、最良装置評価値となるP2=70[Mbps]であるため、アプリ2701が要求する通信速度106[Mbps]を満たすことができない。また、図27の場合、t02=54[Mbps]であるために、通信装置101#2は、伸長した映像データを54[Mbps]までしか転送できない。したがって、通信装置101#0は、既に設定されている最良装置とは別の最良装置を設定し、別の最良装置に通信処理をディスパッチしてもよい。
具体的には、通信装置101#0は、経由装置評価値群(0、7、7)のうち、最良装置となっている通信装置101#2を除いたうち、最も大きい評価値となる通信装置101#1を2番目の経由装置に特定する。なお、このとき、通信装置101#0は、パラメタテーブル301#0の通信装置101#1のVフィールドに、2番目の経由装置を示す“2”を設定してもよい。続けて、通信装置101#0は、自装置と2番目の経由装置の最良装置評価値群(P0、P1)=(1、60)から、通信装置101#1を2番目の最良装置に設定する。設定後、通信装置101#0は、通信装置101#1に通信処理2702#2をディスパッチする。
このように、図27に示す通信システム100は、1つの通信装置101でアプリの要求を満たすことができない場合、複数の通信装置101に分散して通信処理を実行することにより、アプリの要求を満たすことができる。具体的な通信量として、通信装置101#1と通信装置101#2は、圧縮されたデータを約250[Kbps]で受信し、圧縮されたデータを伸長する。伸長後、通信装置101#1と通信装置101#2は、伸長されたデータを、約53[Mbps]で通信装置101#0に送信する。
図28は、実施の形態3にかかるアプリ属性テーブル2801の記憶内容の一例を示す説明図である。アプリ属性テーブル2801は、アプリ属性テーブル2401に含まれるフィールドに加え、さらに、アプリ要求通信速度フィールドを含む。なお、アプリ名称フィールド、CPU処理速度要求フィールド、通信速度要求フィールドに関しては、アプリ属性テーブル2401と同等であるため、説明を省略する。
アプリ要求通信速度は、対象アプリが要求する通信速度である。たとえば、メーラアプリは、CPU処理速度要求も通信速度要求も小さいため、アプリ要求通信速度は小さくなり、アプリ要求通信速度フィールドには、1[Mbps]が格納されている。同様に、ダウンローダアプリは、通信速度要求が大きいため、アプリ要求通信速度が大きくなり、アプリ要求通信速度フィールドには、100[Mbps]が格納されている。
また、ネットワークゲームアプリは、CPU処理速度要求が大きくなり、アプリ要求通信速度フィールドには、50[Mbps]が格納されている。また、ストリーミング動画再生アプリは、CPU処理速度要求も通信速度要求も大きいため、アプリ要求通信速度は大きくなり、アプリ要求通信速度フィールドには、106[Mbps]が格納されている。
実施の形態3にかかる通信システム100は、アプリ属性テーブル2801を参照して通信処理を実行する。なお、実施の形態2にかかる通信システム100は、図16〜図23で示した処理群のうち、通信処理実行処理以外は全て実施の形態1にかかる通信システム100と等しい処理を行う。したがって、図29にて実施の形態3にかかる通信処理実行処理の説明を行う。
図29は、実施の形態3にかかる通信処理実行処理を示すフローチャートである。通信装置101#0は、アプリ2701から、通信要求を受け付ける(ステップS2901)。受け付け後、通信装置101#0は、変数iを1に設定する(ステップS2902)。設定後、通信装置101#0は、最良装置設定処理を実行し、i番目の最良装置に設定する(ステップS2903)。なお、ステップS2903における最良装置設定処理は、実施の形態1における最良装置設定処理でもよいし、実施の形態2における最良装置設定処理であってもよい。
設定後、通信装置101#0は、自装置がi番目の最良装置に設定されたか否かを判断する(ステップS2904)。自装置がi番目の最良装置に設定された場合(ステップS2904:Yes)、通信装置101#0は、自装置にて通信処理2702#iを実行する(ステップS2905)。自装置がi番目の最良装置に設定されていない場合(ステップS2904:No)、通信装置101#0は、最良装置に設定された通信装置101#xに、通信処理2702#iと通信処理2702#iのディスパッチ応答要求を通知する(ステップS2906)。通知を受けた通信装置101#xは、通信処理ディスパッチ応答処理を実行する(ステップS2907)。
ステップS2905、またはステップS2906の処理終了後、通信装置101#0は、要求を行ったアプリのCPU処理速度要求が小、かつ通信速度要求が小か否かを判断する(ステップS2908)。CPU処理速度要求か通信速度要求のいずれかが小でない場合(ステップS2908:No)、通信装置101#0は、1番目からi番目の最良装置の最良装置評価値の合計がアプリ2701のアプリ要求通信速度以上か否かを判断する(ステップS2909)。
最良装置評価値の合計がアプリ要求通信速度より小さい場合(ステップS2909:No)、通信装置101#0は、ディスパッチ可能な通信装置101が存在するか否かを判断する(ステップS2910)。存在する場合(ステップS2910:Yes)、通信装置101#0は、i番目の最良装置を経由装置評価値群から除いて、経由装置特定処理を実行する(ステップS2911)。具体的に、通信装置101#0は、ステップS1701を、“経由装置評価値となる自装置のBとi番目の最良装置を除いた他装置のMin(T、t)のうち、最も値が大きいレコードを選択する”に置き換えて実行する。実行後、通信装置101#0は、変数iをインクリメントし(ステップS2912)、ステップS2903の処理に移行する。
CPU処理速度要求が小、かつ通信速度要求が小である場合(ステップS2908:Yes)、最良装置評価値の合計がアプリ要求通信速度以上の場合(ステップS2909:Yes)、通信装置101#0は、通信処理実行処理を終了する。また、ディスパッチ可能な通信装置101が存在しない場合(ステップS2910:No)、通信装置101#0は、通信処理実行処理を終了する。
なお、ステップS2909の処理にて、1番目からi番目の最良装置の最良装置評価値の合計がアプリ2701のアプリ要求通信速度であっても、たとえば、通信装置101間の通信速度がボトルネックとなり、アプリの要求を満たさない場合が存在する。このような場合、通信装置101#0は、実際に受信しているデータ量の受信速度がアプリ2701のアプリ要求通信速度以下であれば、ステップS2909:Noの処理を実行してもよい。
以上説明したように、通信装置、および通信方法によれば、特定の通信路の通信速度が、通信処理を発生させたアプリが要求する通信速度より小さい場合、特定の通信路以外の新たな特定の通信路に特定し、新たな特定の通信路内の装置に通信処理を移行する。これにより、通信装置は、1つの通信装置ではアプリの要求が満たせない場合に、複数の装置に通信処理を実行させることで、アプリの要求を満たすことができる。
なお、本実施の形態で説明した通信方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本通信方法を実行するプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本通信方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態1〜3に関し、さらに以下の付記を開示する。
(付記1)通信処理を第1処理速度で実行可能な第1CPUと、
基地局との間で前記通信処理を行うときの第1通信速度を測定する測定部と、
前記第1通信速度に基づいて少なくとも一の他装置に前記基地局および前記他装置の第2通信速度と前記他装置に含まれる第2CPUの第2処理速度とを収集する収集部と、
前記第2通信速度と前記第2処理速度とに基づいて前記他装置に前記通信処理を移行するか否かを判定する判定部と、
判定結果に基づいて前記通信処理を前記他装置に移行する移行部と、
を含むことを特徴とする通信装置。
(付記2)前記判定部は、前記他装置が複数ある場合、前記第2通信速度および前記第2処理速度のうちの最小である値が最も大きい装置に前記通信処理を移行するか否かを判定すること
を特徴とする付記1に記載の通信装置。
(付記3)前記判定部は、前記他装置へ移行した前記通信処理の実行結果を回収すること
を特徴とする付記1または付記2に記載の通信装置。
(付記4)前記判定部は、前記通信処理の発生元となるアプリケーションの属性に基づいて前記他装置に前記通信処理を移行するか否かを判定すること
を特徴とする付記1乃至付記3の何れか一に記載の通信装置。
(付記5)前記第2通信速度および前記第2処理速度を登録するメモリを有すること
を特徴とする付記1乃至付記4の何れか一に記載の通信装置。
(付記6)前記第1通信速度および前記第2通信速度に基づいて、自装置から前記基地局までの第1通信路と前記自装置から前記他装置を経由して前記基地局までの第2通信路とのうちいずれかを特定の通信路に特定する特定部と、
前記特定部によって前記第2通信路が前記特定の通信路に特定された場合、前記通信処理によって発生する通信を、前記他装置を経由して通信するように前記他装置を制御する制御部と、
をさらに含むことを特徴とする付記1に記載の通信装置。
(付記7)前記特定部は、さらに、前記第1通信路と前記第2通信路とのうち、当該通信路に前記他装置が存在する数に基づいて、前記特定の通信路に特定すること
を特徴とする付記6に記載の通信装置。
(付記8)前記判定部は、前記特定部によって前記第2通信路が前記特定の通信路に特定された場合、前記特定の通信路の通信速度および前記第1処理速度と、前記他装置および前記基地局間の通信速度および前記第2処理速度とに基づいて、前記他装置に前記通信処理を移行させるか否かを判定すること
を特徴とする付記6に記載の通信装置。
(付記9)前記特定部によって前記特定の通信路が特定された場合、前記特定の通信路内に含まれる装置ごとに、当該装置から前記基地局までの通信速度と当該装置が前記通信処理を実行可能である処理速度とに基づいた評価値を算出する算出部と、
前記算出部によって算出された評価値群に基づいて、前記特定の通信路内に含まれる装置群のうち前記通信処理を実行する実行対象装置を設定する設定部と、
をさらに含み、
前記判定部は、前記設定部によって設定された前記実行対象装置が前記自装置であるか否かを判定し、
前記移行部は、前記判定部によって前記実行対象装置が前記自装置でない場合、前記実行対象装置に前記通信処理を移行すること
を特徴とする付記8に記載の通信装置。
(付記10)アプリケーションごとに、当該アプリケーションが要求する通信速度を登録するメモリを有し、
前記特定部は、前記特定の通信路の通信速度が、前記メモリを参照した前記通信処理を発生させたアプリケーションが要求する通信速度より小さい場合、前記第1通信路と前記第2通信路とのうち、前記特定の通信路以外から新たな特定の通信路を特定し、
前記算出部は、前記特定部によって前記新たな特定の通信路が特定された場合、前記新たな特定の通信路内に含まれる装置ごとに、当該装置から前記基地局までの通信速度と当該装置が前記通信処理を実行可能である処理速度とに基づいた評価値を算出し、
前記設定部は、前記算出部によって算出された評価値群に基づいて、前記新たな特定の通信路内に含まれる装置群のうち前記通信処理を実行する新たな実行対象装置を設定し、
前記判定部は、前記設定部によって設定された前記新たな実行対象装置が前記自装置であるか否かを判定し、
前記移行部は、前記判定部によって前記新たな実行対象装置が前記自装置でない場合、前記新たな実行対象装置に前記通信処理を移行すること
を特徴とする付記9に記載の通信装置。
(付記11)通信処理を第2処理速度で実行可能な第2CPUと、
前記通信処理を第1処理速度で実行可能な第1CPUを含むと共に基地局との間で第1通信速度で前記通信処理を行う他装置からの要求に基づいて、前記基地局との間の第2通信速度と前記第2処理速度とを前記他装置へ通信する通信部と、
前記他装置から移行される第1通信処理を実行する実行部と、
を含むことを特徴とする通信装置。
(付記12)前記他装置からの要求に応じて、前記通信処理の実行結果を前記他装置に送信すること
を特徴とする付記11に記載の通信装置。
(付記13)少なくとも一の対象装置に前記基地局と前記対象装置との第3通信速度と前記対象装置に含まれる第3CPUの第3処理速度とを問い合わせる収集部と、
前記第3通信速度と前記第3処理速度とに基づいて前記対象装置に前記通信処理を移行するか否かを判定する判定部と、
を含むことを特徴とする付記11または付記12に記載の通信装置。
(付記14)前記第3通信速度と前記第3処理速度とを登録するメモリを含むこと
を特徴とする付記13に記載の通信装置。
(付記15)基地局との間で通信処理を行うときの第1通信速度を測定し、
第1装置に前記基地局と前記第1装置との間の第2通信速度と前記第1装置に含まれるCPUが前記通信処理を実行する際の処理速度とを要求し、
前記第1通信速度と第2通信速度と前記処理速度とに基づいて前記第1装置に前記通信処理を移行するか否かを判定し、
判定結果に基づいて前記通信処理を前記第1装置に移行すること
を特徴とする通信方法。
(付記16)第2装置からの要求に応じて前記第2通信速度と前記処理速度を前記第2装置に送信すること
を特徴とする付記15に記載の通信方法。
(付記17)前記第2装置から移行された前記通信処理を実行すること
を特徴とする付記16に記載の通信方法。