説明

通信装置、通信方法、および通信プログラム

【課題】ネットワーク内の複数の通信装置の状況に応じてそれぞれの通信装置から効率よくデータを取得すること。
【解決手段】取得側の通信装置に取得させる被取得データをバッファリングする複数の被取得側の通信装置と、被取得側の通信装置でバッファリングされている被取得データをRDMA(Remote Direct Memory Access)転送により取得可能な取得側の通信装置と、がネットワークで接続されている。ここで、取得側の通信装置は、それぞれの被取得側の通信装置がバッファリングしている被取得データのデータ量を把握し、バッファがより逼迫している被取得側の通信装置から優先して取得対象にする。そして、取得側の通信装置は、取得対象にした被取得側の通信装置から被取得データを取得する。これにより、バッファの枯渇を回避しつつ、ネットワーク上で通信されるデータ量を制御して、衝突を回避し、ネットワークの輻輳を抑制する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、通信をおこなう通信装置、通信方法、および通信プログラムに関する。
【背景技術】
【0002】
クラスタなどの分散並列計算機を使った処理の分野では、処理過程において、通信相手がランダムな大量のメッセージ通信が発生する。このとき、一部の通信装置にメッセージ通信が一時的に集中する場合がある。これにより、ネットワークでデータの衝突が起き、結果としてネットワークの輻輳が発生する。
【0003】
従来では、トークンと呼ばれる送信権をネットワーク上で周回させ、周回するトークンを受信した通信装置のみがメッセージを送信するようにして、ネットワーク上の通信量を制御しメッセージの衝突を回避する技術がある(例えば、下記特許文献1参照)。
【0004】
また、ネットワーク上の通信装置の数に応じて、周回させるトークンの数を変更する技術がある(例えば、下記特許文献2参照)。また、メッセージ通信が集中した通信装置での処理が安定するまで、メッセージの送信を中断する技術がある(例えば、下記特許文献3参照)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平04−070235号公報
【特許文献2】特開2000−332803号公報
【特許文献3】特許第4343119号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、上述した従来技術は、複数の通信装置のそれぞれでの未送信のメッセージの量は考慮されていない。そのため、未送信のメッセージの量が多いために優先して送信をおこなわせるべき通信装置よりも先に、未送信のメッセージの量がまだ少ない他の通信装置に送信権を与えてしまうことがある。この場合、通信装置において、未送信のメッセージが格納されたバッファにメモリ不足が生じるといった問題があった。また、送信権の受信の待ち時間が長い通信装置よりも先に、待ち時間が短い通信装置に送信権を与えてしまうことがある。この場合、通信装置において、メッセージの送信期限を守れず、処理の遅延や処理エラーを生じてしまう。
【0007】
本発明は、1つの側面では、ネットワーク内の複数の通信装置の状況に応じてそれぞれの通信装置から効率よくデータを取得することができる通信装置、通信方法、および通信プログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数の取得先と通信する通信装置であって、複数の取得先のうちいずれかの取得先での自通信装置を取得元にする被取得データのデータ量を特定する情報を、いずれかの取得先から受信し、受信された情報に基づいて、いずれかの取得先を取得対象にするか否かを判定し、取得対象にすると判定されたいずれかの取得先から、自通信装置を取得元にする被取得データを取得する通信装置、通信方法、および通信プログラムが提案される。
【0009】
また、本発明の一側面によれば、取得元に取得させる被取得データのデータ量が閾値以上であることを検出し、被取得データのデータ量が閾値以上であることが検出された場合、被取得データのデータ量を特定する情報を、取得元に通知する通信装置、通信方法、および通信プログラムが提案される。
【発明の効果】
【0010】
本発明の一側面によれば、ネットワーク内の複数の通信装置の状況に応じてそれぞれの通信装置から効率よくデータを取得することができるという効果を奏する。
【図面の簡単な説明】
【0011】
【図1】図1は、通信装置による通信の内容を示す説明図(その1)である。
【図2】図2は、通信装置による通信の内容を示す説明図(その2)である。
【図3】図3は、実施の形態にかかる通信装置Nのハードウェア構成例を示すブロック図である。
【図4】図4は、図3に示したRAM303に記憶されている被取得長履歴の内容を示す説明図である。
【図5】図5は、図3に示したRAM303に記憶されている生成履歴の内容を示す説明図である。
【図6】図6は、図3に示したRAM303に記憶されている要求トークンレイテンシ履歴の内容を示す説明図である。
【図7】図7は、図3に示したRAM303に記憶されている被取得スループット履歴の内容を示す説明図である。
【図8】図8は、図3に示したRAM303に記憶されている取得長履歴の内容を示す説明図である。
【図9】図9は、図3に示したRAM303に記憶されている取得スループット履歴の内容を示す説明図である。
【図10】図10は、図3に示したRAM303に記憶されている要求トークンリストの内容を示す説明図である。
【図11】図11は、図3に示したRAM303に記憶されている通信相手リストの内容を示す説明図である。
【図12】図12は、図3に示したRAM303に記憶されている取得条件の内容を示す説明図である。
【図13】図13は、図3に示したRAM303に記憶されている取得依頼リストの内容を示す説明図である。
【図14】図14は、メッセージMの取得側としての通信装置Nの機能的構成を示すブロック図である。
【図15】図15は、メッセージMの被取得側としての通信装置Nの機能的構成を示すブロック図である。
【図16】図16は、初期化処理の詳細を示すフローチャートである。
【図17】図17は、アプリケーション利用登録処理の詳細を示すフローチャートである。
【図18】図18は、要求トークンの送信の内容を示す説明図である。
【図19】図19は、バッファ管理処理の詳細を示すフローチャートである。
【図20】図20は、要求トークン送信処理の詳細を示すフローチャートである。
【図21】図21は、要求トークンを受信した取得側の通信装置NによるメッセージMの取得の内容を示す説明図である。
【図22】図22は、他の取得側へのバッファリング量を含む要求トークンに基づくメッセージMの取得の内容を示す説明図である。
【図23】図23は、取得依頼登録処理の詳細を示すフローチャートである。
【図24】図24は、取得処理の詳細を示すフローチャートである。
【図25】図25は、取得条件1200の変更の内容を示す説明図である。
【発明を実施するための形態】
【0012】
以下に添付図面を参照して、この発明にかかる通信装置、通信方法、および通信プログラムの実施の形態を詳細に説明する。この発明にかかる通信装置は、RDMA(Remote Direct Memory Access)転送により、他の通信装置の記憶装置からデータを直接取得する機能を有する。また、通信装置は、複数の取得側の通信装置ごとに、それぞれの取得側の通信装置に取得させる被取得データをバッファリングしている。
【0013】
ここで、ネットワークを流れるデータ量を制御し輻輳を抑制するために、まず、被取得側の通信装置は、バッファリングされているデータ量を特定する情報を、取得側の通信装置に通知する。次に、取得側の通信装置では、複数の被取得側の通信装置のそれぞれでバッファリングされているデータ量を特定する情報を受信することにより、複数の被取得側の通信装置でバッファリングされているデータ量を把握する。
【0014】
そして、取得側の通信装置は、バッファがより逼迫している被取得側の装置を優先して取得対象にして、ネットワークの輻輳を発生させないデータ量の範囲で、被取得データを取得していく。これにより、バッファの枯渇を回避しつつ、ネットワークを流れるデータ量を制御して、衝突を回避し、ネットワークの輻輳を抑制できる。また、1対1の通信装置間のスループットのみではなく、ネットワーク全体のスループットを向上させることができる。また、取得側の通信装置ごとに被取得データをバッファリングしているため、スループットを向上させることができる。
【0015】
(通信装置による通信の内容)
図1および図2は、通信装置による通信の内容を示す説明図である。ここで、図1および図2に示す通信システムは、複数の通信装置N(図1および図2では、例えば、3台の通信装置N1〜N3)がネットワークを介して接続され、メッセージMの通信をおこなうシステムである。また、通信システムは、ネットワークにおいて中継をおこなう機器であるスイッチングハブSHを含む。
【0016】
各通信装置Nは、他の通信装置NのメッセージMを直接取得することができる装置である。また、各通信装置Nは、取得側の通信装置Nごとに、それぞれの通信装置Nに取得させるメッセージM(被取得データ)をバッファリングするバッファBを有する。なお、メッセージMは、各通信装置Nが実行するアプリケーションによって生成される。
【0017】
例えば、通信装置N1は、通信装置N2に取得させるメッセージMをバッファリングするバッファB1t2と、通信装置N3に取得させるメッセージMをバッファリングするバッファB1t3と、を有している。
【0018】
また、通信装置N2は、通信装置N1に取得させるメッセージMをバッファリングするバッファB2t1と、通信装置N3に取得させるメッセージMをバッファリングするバッファB2t3と、を有している。
【0019】
そして、通信装置N3は、通信装置N1に取得させるメッセージMをバッファリングするバッファB3t1と、通信装置N2に取得させるメッセージMをバッファリングするバッファB3t2と、を有している。
【0020】
以下では、通信装置N1,N3のそれぞれが、自通信装置NでバッファリングしているメッセージMを、通信装置N2に取得するように要求する場合を例に挙げて、通信装置Nによる通信の内容について説明する。
【0021】
図1において、(1)通信装置N1は、通信装置N2に取得させるメッセージMが生成されるごとに、生成されたメッセージMをバッファB1t2に格納していく。また、同様に、通信装置N3でも、通信装置N2に取得させるメッセージMがバッファB3t2に格納されている。
【0022】
(2)通信装置N1は、バッファB1t2に格納されたメッセージMを通信装置N2に取得させるために、メッセージMを取得するように要求する要求通知(以下、「要求トークン」という)を、通信装置N2に送信する。そして、通信装置N1は、通信装置N2によってメッセージMが取得されるのを待つ。ここで、要求トークンには、メッセージMの被取得側となる通信装置N1の識別子と、バッファB1t2に格納されているメッセージMのデータ量と、が含まれる。バッファB1t2に格納されているメッセージMのデータ量は、バッファB1t2の逼迫具合の指標となる情報である。
【0023】
(3)同様に、通信装置N3は、バッファB3t2に格納されたメッセージMを、通信装置N2に取得させるために、要求トークンを通信装置N2に送信する。そして、通信装置N3は、通信装置N2によってメッセージMが取得されるのを待つ。ここで、要求トークンには、メッセージMの被取得側となる通信装置N3の識別子と、バッファB3t2に格納されているメッセージMのデータ量と、が含まれる。バッファB3t2に格納されているメッセージMのデータ量は、バッファB3t2の逼迫具合の指標となる情報である。
【0024】
(4)通信装置N1,N3からそれぞれ要求トークンを受信した通信装置N2は、要求トークンに含まれるそれぞれの通信装置N1,N3でのバッファBに格納されているメッセージMのデータ量を参照して、取得対象にする通信装置N1,N3を選択する。ここでは、通信装置N2は、バッファBへ格納されているメッセージMのデータ量が多い通信装置N3を優先して取得対象にして、通信装置N3でバッファBがあふれる前にメッセージMを取得するべきであると判定する。
【0025】
図2において、(1)通信装置N2は、ネットワークのスループットを参照して、ネットワークを輻輳させない範囲で、取得対象にした通信装置N3から取得するメッセージMの取得データ量を決定する。そして、通信装置N2は、取得対象にした通信装置N3から、取得データ量のメッセージMを取得する。一方、通信装置N2は、通信装置N1のメッセージMは、まだ取得しない。
【0026】
(2)これにより、ネットワークに流れるメッセージMのデータ量を制御して、メッセージMの衝突を回避することができる。そのため、メッセージMの衝突に起因する輻輳を抑制することができる。そして、輻輳を抑制することができるため、輻輳に起因する通信時間の増加を回避することができ、ネットワーク全体の通信フェーズを短縮することができる。
【0027】
また、各通信装置NでメッセージMをバッファリングすることにより、ネットワークのスループットを向上させることができる。そして、取得側の通信装置Nが、複数の被取得側の通信装置NのそれぞれのバッファBに格納されているメッセージMのデータ量を把握し、バッファBが逼迫しないようにメッセージMを取得していく。そのため、ネットワークを効率よく使用でき、ネットワーク全体のスループットを向上させることができる。
【0028】
(通信装置Nのハードウェア構成例)
図3は、実施の形態にかかる通信装置Nのハードウェア構成例を示すブロック図である。図3において、通信装置Nは、CPU(Central Processing Unit)301と、ROM(Read‐Only Memory)302と、RAM(Random Access Memory)303と、I/F(Interface)304と、ディスプレイ305と、キーボード306と、アプリケーションI/F307と、を備えている。また、各構成部はバス310によってそれぞれ接続されている。
【0029】
ここで、CPU301は、通信装置Nの全体の制御を司る。ROM302は、ブートプログラムなどのプログラムを記憶している。RAM303は、CPU301のワークエリアとして使用される。
【0030】
また、RAM303は、取得側の通信装置NごとのバッファBの領域として使用される。RAM303は、被取得長履歴と、生成履歴と、要求トークンレイテンシ履歴と、被取得スループット履歴と、を記憶している。また、RAM303は、取得長履歴と、取得スループット履歴と、要求トークンリストと、を記憶している。また、RAM303は、通信相手リストと、取得条件と、取得依頼リストと、を記憶している。
【0031】
インターフェース(以下、「I/F」と略する。)304は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク320に接続され、このネットワーク320を介して他の装置に接続される。
【0032】
そして、I/F304は、ネットワーク320と内部のインターフェースを司り、RDMA転送により、他の装置とのデータの送受信をおこなう。また、I/F304は、RDMA転送により、他の装置の記憶領域に対して、直接、データの書き込みまたは読み出しを実行する。I/F304には、例えばモデムやネットワークアダプタなどを採用することができる。より具体的には、ネットワーク320が「Infini Band」である場合は、I/F304には、ホストチャネルアダプタ(HCA:Host Channel Adapter)が採用される。
【0033】
「Infini Band」では、HCAに、データ転送を処理するキューペア(QP:Queue Pair)が保持される。ここで、QPとは、送信ワークキューと受信ワークキューで構成されたアドレス指定が可能なエンティティであり、被取得側の通信装置Nごとに存在する。そして、「Infini Band」の通信は、ポート間ではなく、QP間で行われる。具体的には、取得側の通信装置Nは、ワークキューに一連の命令をキューイングすることで、HCAに命令を実行させて、データ転送をおこなう。
【0034】
ディスプレイ305は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ305は、例えば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。キーボード306は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。
【0035】
アプリケーションI/F307は、アプリケーションからのデータの入出力を制御する。例えば、アプリケーションI/F307は、アプリケーションが生成したデータをRAM303のバッファBに格納したり、I/F304によって外部装置から取得されたデータをアプリケーションに引き渡したりする。
【0036】
(被取得長履歴の内容)
次に、図4を用いて、図3に示したRAM303に記憶されている被取得長履歴の内容について説明する。被取得長履歴は、自通信装置Nから他の通信装置Nが取得していったメッセージMのデータ量についての履歴である。
【0037】
図4は、図3に示したRAM303に記憶されている被取得長履歴の内容を示す説明図である。被取得長履歴400は、時刻項目のそれぞれに対応付けてノード項目と、被取得長項目と、を有し、メッセージMが取得されるごとにレコードを構成する。
【0038】
時刻項目には、メッセージMが取得された時刻(秒)が記憶されている。ノード項目には、メッセージMの取得側の通信装置Nの識別子が記憶されている。被取得長項目には、取得されたメッセージMのデータ量(Byte)が記憶されている。
【0039】
(生成履歴の内容)
次に、図5を用いて、図3に示したRAM303に記憶されている生成履歴の内容について説明する。生成履歴は、自通信装置NにおいてアプリケーションによりメッセージMが生成される速度(バッファBへメッセージMが格納される速度)についての履歴である。そして、生成履歴は、バッファBがあふれる前に取得側の通信装置NにメッセージMを取得させるためには、いつ要求トークンを送信すべきかを決定する際に、被取得側の通信装置Nにより参照される。
【0040】
図5は、図3に示したRAM303に記憶されている生成履歴の内容を示す説明図である。生成履歴500は、時刻項目のそれぞれに対応付けてノード項目と、スループット項目と、を有し、アプリケーションでメッセージMが生成されるごとにレコードを構成する。
【0041】
時刻項目には、メッセージMが生成された時刻(秒)が記憶されている。ノード項目には、生成されたメッセージMの取得側の通信装置Nの識別子が記憶されている。スループット項目には、単位時間に生成されたメッセージMのデータ量(Byte/秒)が記憶されている。
【0042】
(要求トークンレイテンシ履歴の内容)
次に、図6を用いて、図3に示したRAM303に記憶されている要求トークンレイテンシ履歴の内容について説明する。要求トークンレイテンシ履歴は、要求トークンを送信してからメッセージMが取得されるまでの時間についての履歴である。そして、要求トークンレイテンシ履歴は、バッファBがあふれる前に取得側の通信装置NにメッセージMを取得させるためには、いつ要求トークンを送信すべきかを決定する際に、被取得側の通信装置Nにより参照される。
【0043】
図6は、図3に示したRAM303に記憶されている要求トークンレイテンシ履歴の内容を示す説明図である。要求トークンレイテンシ履歴600は、時刻項目のそれぞれに対応付けてノード項目と、レイテンシ項目と、を有する。要求トークンレイテンシ履歴600は、要求トークンを送信するごとにレコードを構成し、メッセージMが取得されるごとにレコードを更新する。
【0044】
時刻項目には、要求トークンを送信した時刻(秒)が記憶されている。ノード項目には、要求トークンの宛先になる取得側の通信装置Nの識別子が記憶されている。レイテンシ項目には、要求トークンを送信してからメッセージMが取得されるまでの時間(秒)が記憶されている。
【0045】
(被取得スループット履歴の内容)
次に、図7を用いて、図3に示したRAM303に記憶されている被取得スループット履歴の内容について説明する。被取得スループット履歴は、単位時間に取得されたメッセージMのデータ量についての履歴であり、被取得長履歴400に基づいて作成される。そして、被取得スループット履歴は、バッファBがあふれる前に取得側の通信装置NにメッセージMを取得させるためには、いつ要求トークンを送信すべきかを決定する際に、被取得側の通信装置Nにより参照される。
【0046】
図7は、図3に示したRAM303に記憶されている被取得スループット履歴の内容を示す説明図である。被取得スループット履歴700は、時刻項目のそれぞれに対応付けてスループット項目を有し、メッセージMが取得されるごとにレコードを構成する。
【0047】
時刻項目には、メッセージMが取得された時刻(秒)が記憶されている。スループット項目には、単位時間に取得されたメッセージMのデータ量(Byte/秒)が記憶されている。具体的には、今回取得されたデータ量/(今回の被取得時刻−前回の被取得時刻)で算出できる。
【0048】
(取得長履歴の内容)
次に、図8を用いて、図3に示したRAM303に記憶されている取得長履歴の内容について説明する。取得長履歴は、自通信装置Nが他の通信装置Nから取得したメッセージMのデータ量についての履歴である。
【0049】
図8は、図3に示したRAM303に記憶されている取得長履歴の内容を示す説明図である。取得長履歴800は、時刻項目のそれぞれに対応付けてノード項目と、取得長項目と、を有し、メッセージMを取得するごとにレコードを構成する。
【0050】
時刻項目には、メッセージMを取得した時刻(秒)が記憶されている。ノード項目には、メッセージMの被取得側の通信装置Nの識別子が記憶されている。取得長項目には、取得したメッセージMのデータ量(Byte)が記憶されている。
【0051】
(取得スループット履歴の内容)
次に、図9を用いて、図3に示したRAM303に記憶されている取得スループット履歴の内容について説明する。取得スループット履歴は、単位時間に取得したメッセージMのデータ量についての履歴であり、取得長履歴800に基づいて作成される。そして、取得スループット履歴は、被取得側の通信装置NのバッファBがあふれないように、どの被取得側の通信装置Nを優先して取得対象に決定すべきかを判定する際に、取得側の通信装置Nにより参照される。
【0052】
図9は、図3に示したRAM303に記憶されている取得スループット履歴の内容を示す説明図である。取得スループット履歴900は、時刻項目のそれぞれに対応付けてスループット項目を有し、メッセージMを取得するごとにレコードを構成する。
【0053】
時刻項目には、メッセージMを取得した時刻(秒)が記憶されている。スループット項目には、単位時間に取得したメッセージMのデータ量(Byte/秒)が記憶されている。具体的には、取得したデータ量/(今回の取得時刻−前回の取得時刻)で算出できる。
【0054】
(要求トークンリストの内容)
次に、図10を用いて、図3に示したRAM303に記憶されている要求トークンリストの内容について説明する。
【0055】
図10は、図3に示したRAM303に記憶されている要求トークンリストの内容を示す説明図である。要求トークンリスト1000は、ノード項目のそれぞれに対応付けて時刻項目と、バッファ項目と、他バッファ項目と、残り時間項目と、を有し、要求トークンを受信するごとにレコードを構成する。
【0056】
ノード項目には、要求トークンの送信元になる通信装置Nの識別子が記憶されている。時刻項目には、要求トークンを受信した時刻(秒)が記憶されている。バッファ項目には、要求トークンの送信元での要求トークンの宛先を取得元にするメッセージMが格納されるバッファBに格納されているデータ量(Byte)が記憶されている。
【0057】
他バッファ項目には、要求トークンの宛先を取得側にするメッセージMが格納されるバッファBとは異なる他のバッファBに格納されているデータ量(Byte)が記憶されている。残り時間項目には、要求トークンの送信元におけるメッセージMの取得期限までの残り時間が記憶されている。
【0058】
(通信相手リストの内容)
次に、図11を用いて、図3に示したRAM303に記憶されている通信相手リストの内容について説明する。通信相手リストは、取得側の通信装置NがメッセージMを取得する際に、または被取得側の通信装置Nが要求トークンを送信する際に、参照される。
【0059】
図11は、図3に示したRAM303に記憶されている通信相手リストの内容を示す説明図である。通信相手リスト1100は、ノード項目のそれぞれに対応付けてキューペア項目を有し、通信相手になる通信装置Nごとにレコードを構成する。
【0060】
ノード項目には、通信相手になる通信装置Nの識別子が記憶されている。キューペア項目には、通信装置Nに対応するキューペアを特定する識別子が記憶されている。
【0061】
(取得条件の内容)
次に、図12を用いて、図3に示したRAM303に記憶されている取得条件の内容について説明する。取得条件は、ネットワークを輻輳させない範囲で、同時に取得可能な通信装置Nの数と、それぞれの通信装置Nから取得するメッセージMのデータ量の上限値と、についてのテーブルである。
【0062】
図12は、図3に示したRAM303に記憶されている取得条件の内容を示す説明図である。取得条件1200は、現在取得数項目と、最大取得数項目と、許可長項目と、を有し、通信装置Nの初期化処理の時にレコードを構成し、通信装置Nが通信を開始または終了するごとにレコードを更新する。
【0063】
現在取得数項目には、現在取得中の取得対象の通信装置Nの数が記憶されている。最大取得数項目には、同時に取得する通信装置Nの数の最大値が記憶されている。許可長項目には、通信装置Nから取得するメッセージMのデータ量の上限値が記憶されている。
【0064】
なお、ここでは、複数の被取得側の通信装置Nのそれぞれから取得するメッセージMのデータ量を同じ値にしている。しかし、被取得側の通信装置Nごとに、取得するメッセージMのデータ量を変えてもよい。この場合、取得条件1200は、複数の被取得側の通信装置Nごとに、許可長項目を有してもよい。
【0065】
(取得依頼リストの内容)
次に、図13を用いて、図3に示したRAM303に記憶されている取得依頼リストの内容について説明する。
【0066】
図13は、図3に示したRAM303に記憶されている取得依頼リストの内容を示す説明図である。取得依頼リスト1300は、ノード項目のそれぞれに対応付けて、要求トークン項目を有し、要求トークンに基づく取得依頼が登録されるごとにレコードを構成する。
【0067】
ノード項目には、取得対象にした被取得側になる通信装置Nの識別子が記憶されている。要求トークン項目には、取得対象にした被取得側の通信装置Nから受信した要求トークンの識別子が記憶されている。要求トークンの識別子は、例えば、要求トークンリスト1000のレコードへのポインタである。
【0068】
(通信装置Nの機能的構成例)
次に、図14および図15を用いて、通信装置Nの機能的構成例について説明する。ここでは、簡単のため、メッセージMの被取得側としての通信装置Nの機能と、メッセージMの取得側としての通信装置Nの機能と、を分けて説明している。ただし、通信装置Nは、メッセージMの被取得側としての機能と、メッセージMの取得側としての機能と、を併せて有してよい。
【0069】
図14は、メッセージMの取得側としての通信装置Nの機能的構成を示すブロック図である。通信装置Nは、受信部1401と、判定部1402と、取得部1403と、決定部1404と、を含む構成である。この制御部となる機能(受信部1401〜決定部1404)は、具体的には、例えば、図3に示したROM302、RAM303などの記憶装置に記憶されたプログラムをCPU301に実行させることにより、または、I/F304により、その機能を実現する。
【0070】
受信部1401は、複数の取得先のうちいずれかの取得先での自通信装置Nを取得元にする被取得データのデータ量を特定する情報を、いずれかの取得先から受信する機能を有する。ここで、取得先とは、上述した被取得側の通信装置Nである。被取得データとは、被取得側の通信装置Nが有し、取得側になる自通信装置Nが取得するデータであり、上述したメッセージMである。
【0071】
データ量とは、自通信装置Nが取得するメッセージMが格納されるバッファB(以下、「自通信装置N宛のバッファB」という)に格納されているメッセージMのデータ量(以下、「自通信装置N宛のバッファリング量」という)である。データ量を特定する情報とは、例えば、自通信装置N宛のバッファリング量の即値であり、さらに、自通信装置N宛のバッファBの容量を含んでもよい。また、自通信装置N宛のバッファBの容量と、自通信装置N宛のバッファリング量と、の比率であってもよい。
【0072】
具体的には、例えば、受信部1401は、被取得側の通信装置Nの識別子と、被取得側の通信装置Nでの自通信装置N宛のバッファリング量と、を含む要求トークンを受信する。これにより、受信部1401は、取得対象にする被取得側の通信装置Nを決定する指標になる情報を受信できる。なお、受信された要求トークンは、RAM303の要求トークンリスト1200に記憶される。
【0073】
また、受信部1401は、いずれかの取得先とは異なる他の取得先での自通信装置Nを取得元にする被取得データのデータ量を特定する情報を、他の取得先から受信する機能を有する。具体的には、例えば、受信部1401は、複数の被取得側の通信装置Nのそれぞれから、各通信装置Nの識別子と、各通信装置Nでの自通信装置N宛のバッファリング量と、を含む要求トークンを受信する。これにより、受信部1401は、取得対象にする被取得側の通信装置Nを決定する指標になる情報を受信できる。
【0074】
また、受信部1401は、いずれかの取得先での自通信装置Nとは異なる他の通信装置Nを取得元にする被取得データのデータ量を特定する情報を、いずれかの取得先から受信する機能を有する。具体的には、例えば、受信部1401は、自通信装置Nとは異なる他の通信装置Nが取得するメッセージMが格納されるバッファB(以下、「他の通信装置N宛のバッファB」という)に格納されているメッセージMのデータ量(以下、「他の通信装置N宛のバッファリング量」という)を含む要求トークンを受信する。これにより、受信部1401は、取得対象にする被取得側の通信装置Nを決定する指標になる情報を受信できる。
【0075】
また、受信部1401は、いずれかの取得先での自通信装置Nを取得元にする被取得データの取得期限に関する情報を、いずれかの取得先から受信する機能を有する。具体的には、例えば、受信部1401は、被取得側の通信装置Nでの自通信装置Nが取得するメッセージMの取得期限までの残り時間を含む要求トークンを受信する。これにより、受信部1401は、取得対象にする被取得側の通信装置Nを決定する指標になる情報を受信できる。
【0076】
また、受信部1401は、いずれかの取得先とは異なる他の取得先での自通信装置Nを取得元にする被取得データの取得期限に関する情報を、他の取得先から受信する機能を有する。具体的には、例えば、受信部1401は、複数の被取得側の通信装置Nのそれぞれから、自通信装置Nが取得するメッセージMの取得期限までの残り時間を含む要求トークンを受信する。これにより、受信部1401は、取得対象にする被取得側の通信装置Nを決定する指標になる情報を受信できる。
【0077】
判定部1402は、受信部1401によって受信された情報に基づいて、いずれかの取得先を取得対象にするか否かを判定する機能を有する。なお、取得対象にすると判定された場合、取得対象にした取得先(被取得側の通信装置N)に対応するレコードが、取得依頼リスト1300に記憶される。
【0078】
具体的には、例えば、判定部1402は、いずれかの取得先での自通信装置Nを取得元にする被取得データのデータ量を特定する情報と、他の取得先での自通信装置Nを取得元にする被取得データのデータ量を特定する情報と、を参照する。そして、判定部1402は、参照した情報に基づいて、いずれかの取得先を取得対象にするか否かを判定する。
【0079】
より具体的には、例えば、判定部1402は、複数の被取得側の通信装置Nから受信した要求トークンに含まれる各通信装置Nでの自通信装置N宛のバッファリング量に基づいて、各通信装置Nでの自通信装置N宛のバッファBの逼迫具合を算出する。そして、判定部1402は、他の通信装置Nよりも自通信装置N宛のバッファBの逼迫具合が大きい通信装置Nを、優先して取得対象にすると判定する。これにより、自通信装置N宛のバッファBがより逼迫している被取得側の通信装置Nから優先してメッセージMを取得し、バッファBがあふれることを防止することができる。
【0080】
また、具体的には、例えば、判定部1402は、いずれかの取得先での自通信装置Nを取得元にする被取得データのデータ量を特定する情報と、いずれかの取得先での他の通信装置Nを取得元にする被取得データのデータ量を特定する情報と、を参照する。そして、判定部1402は、参照した情報に基づいて、いずれかの取得先を取得対象にするか否かを判定する。
【0081】
より具体的には、例えば、判定部1402は、要求トークンに含まれる自通信装置N宛のバッファリング量より、他の通信装置N宛のバッファリング量の方が多い場合、被取得側の通信装置Nを取得対象にしない。これにより、判定部1402は、被取得側の通信装置Nから、自通信装置Nよりも優先してメッセージMを取得するべき他の通信装置Nがある場合は、メッセージMを取得しないようにして、ネットワーク全体での効率化を図ることができる。
【0082】
また、具体的には、例えば、判定部1402は、いずれかの取得先での自通信装置Nを取得元にする被取得データの取得期限に関する情報に基づいて、いずれかの取得先を取得対象にするか否かを判定する。より具体的には、例えば、判定部1402は、要求トークンに含まれる被取得側の通信装置Nでの自通信装置N宛のメッセージMの取得期限までの残り時間を参照する。そして、判定部1402は、参照した残り時間が閾値以下である場合に、被取得側の通信装置Nを取得対象にする。これにより、自通信装置N宛のバッファリング量が少なくても、取得期限に切迫している場合には、被取得側の通信装置Nを取得対象にすることができる。
【0083】
また、具体的には、例えば、判定部1402は、いずれかの取得先での自通信装置Nを取得元にする被取得データの取得期限に関する情報と、他の取得先での自通信装置Nを取得元にする被取得データの取得期限に関する情報を参照する。そして、判定部1402は、参照した情報に基づいて、いずれかの取得先を取得対象にするか否かを判定する。
【0084】
より具体的には、例えば、判定部1402は、複数の被取得側の通信装置Nから受信した要求トークンに含まれる各通信装置Nでの自通信装置Nが取得するメッセージMの取得期限までの残り時間を参照する。そして、判定部1402は、参照した残り時間に基づいて、他の通信装置Nよりも取得期限までの残り時間が短い通信装置Nを、取得対象にすると判定する。これにより、より取得期限に切迫している通信装置Nから優先して取得対象にすることができる。なお、判定結果は、RAM303などの記憶領域に記憶される。
【0085】
また、具体的には、例えば、判定部1402は、取得中の取得対象の数が閾値以上である場合、いずれかの取得先を取得対象にしないと判定する。より具体的には、例えば、判定部1402は、取得対象にした被取得側の通信装置Nのうち、取得が終了していない通信装置Nの数が閾値以上である場合、あらたな被取得側の通信装置Nを取得対象にしないと判定する。これにより、ネットワークを流れるデータ量を制御し、ネットワークの輻輳を抑制する。
【0086】
取得部1403は、判定部1402によって取得対象にすると判定されたいずれかの取得先から、通信装置Nを取得元にする被取得データを取得する機能を有する。具体的には、例えば、取得部1403は、取得対象にした被取得側の通信装置Nから、メッセージMを取得する。より具体的には、例えば、取得部1403は、通信相手リスト1100を参照して、取得対象にした被取得側の通信装置Nに対応するキューペアを特定し、特定したキューペアにメッセージMの取得の命令をキューイングし、HCAにメッセージMを取得させる。これにより、ネットワークにおいて、メッセージMの通信ができる。
【0087】
また、取得部1403は、判定部1402によって取得対象にすると判定されたいずれかの取得先から、決定部1404によって決定されたデータ量で、自通信装置Nを取得元にする被取得データを取得する機能を有する。具体的には、例えば、取得部1403は、取得対象にした被取得側の通信装置Nから、決定部1404によって決定されたデータ量で、メッセージMを取得する。これにより、ネットワークにおいて、メッセージMの通信ができる。
【0088】
決定部1404は、受信部1401によって受信された情報に基づいて、判定部1402によって取得対象にすると判定されたいずれかの取得先から取得するデータ量を決定する機能を有する。ここで、いずれかの取得先から取得するデータ量とは、上述した取得データ量である。
【0089】
具体的には、例えば、決定部1404は、ネットワークのスループットや、要求トークンに含まれる自通信装置N宛のバッファリング量に基づいて、ネットワークを輻輳させない範囲で、被取得側の通信装置Nから取得するメッセージMのデータ量を決定する。また、決定されたメッセージMのデータ量は、RAM303などの記憶領域に記憶される。これにより、決定部1404は、ネットワークの輻輳を抑制しつつ、取得可能なデータ量を決定することができる。
【0090】
図15は、メッセージMの被取得側としての通信装置Nの機能的構成を示すブロック図である。通信装置Nは、検出部1501と、通知部1502と、を含む構成である。この制御部となる機能(検出部1501と通知部1502)は、具体的には、例えば、図3に示したROM302、RAM303などの記憶装置に記憶されたプログラムをCPU301に実行させることにより、または、I/F304により、その機能を実現する。
【0091】
検出部1501は、取得元に取得させる被取得データのデータ量が閾値以上であることを検出する機能を有する。ここで、取得元とは、上述した取得側の通信装置Nである。被取得データとは、取得側の通信装置Nに取得させるメッセージMである。被取得データのデータ量とは、取得側の通信装置Nに取得させるメッセージMが格納されるバッファBのメッセージMのデータ量である。
【0092】
具体的には、例えば、検出部1501は、バッファBのバッファリング量が閾値以上であることを検出する。ここで、閾値とは、後述する目標バッファリング量であり、バッファBがあふれないように、バッファBがあふれる前に要求トークンを送信するための指標となる値である。例えば、閾値は、「バッファBの容量×安全係数(例えば、0.6)」である。また、例えば、閾値は、「バッファBの容量−平均の被取得スループット×平均の要求トークンのレイテンシ」である。これにより、検出部1501は、バッファBがあふれる前に、要求トークンを送信するトリガを発生させることができる。
【0093】
また、検出部1501は、被取得データを生成したときからの経過時間が規定時間以上であることを検出する機能を有する。具体的には、検出部1501は、アプリケーションがメッセージMを生成したときに計時を開始して経過時間を計測し、経過時間が規定時間以上になったことを検出する。ここで、規定時間とは、後述するデッドラインであり、取得期限の前に要求トークンを送信するための指標となる値である。取得期限とは、アプリケーションが許容できるメッセージMのレイテンシ(メッセージMが生成されてから取得されるまでの時間)の最大値(以下、「最大許容レイテンシ」)である。
【0094】
例えば、規定時間は、「最大許容レイテンシ×安全係数(例えば、0.6)」である。また、例えば、規定時間は、「最大許容レイテンシ−平均の要求トークンのレイテンシ」である。これにより、検出部1501は、メッセージMの取得期限になる前に、要求トークンを送信するトリガを発生させることができる。
【0095】
また、検出部1501は、取得元とは異なる他の取得元に取得させる被取得データのデータ量を検出する機能を有する。具体的には、例えば、検出部1501は、複数の取得側の通信装置Nのそれぞれに取得させるバッファBのバッファリング量を検出する。
【0096】
通知部1502は、検出部1501によって被取得データのデータ量が閾値以上であることが検出された場合、被取得データのデータ量を特定する情報を、取得元に通知する機能を有する。具体的には、例えば、通知部1502は、バッファリング量が目標バッファリング量以上になった場合に、メッセージMの取得側の通信装置Nに、バッファリング量を特定する情報を含む要求トークンを通知する。これにより、自通信装置NからメッセージMを取得側の通信装置Nに取得させるトリガとなる要求トークンを、メッセージMの取得側の通信装置Nに送信することができる。
【0097】
また、通知部1502は、検出部1501によって経過時間が規定時間以上であることが検出された場合、被取得データのデータ量を特定する情報を、取得元に通知する機能を有する。具体的には、例えば、通知部1502は、経過時間がデッドライン以上になったとき、メッセージMの取得側の通信装置Nに、バッファリング量を特定する情報を含む要求トークンを通知する。これにより、自通信装置NからメッセージMを取得側の通信装置Nに取得させるトリガとなる要求トークンを、メッセージMの取得側の通信装置Nに送信することができる。
【0098】
また、通知部1502は、被取得データのデータ量を特定する情報とともに、被取得データの取得期限に関する情報を、取得元に通知する機能を有する。取得期限に関する情報とは、例えば、メッセージMの生成からの経過時間である。また、取得期限に関する情報とは、例えば、取得期限までの残り時間でもよい。具体的には、通知部1502は、取得期限に関する情報を含む要求トークンを、取得側の通信装置Nに通知する。これにより、取得側の通信装置Nにおいて取得対象を決定するための指標となる情報になる取得期限に関する情報を、取得側の通信装置Nに提供することができる。
【0099】
また、通知部1502は、被取得データのデータ量を特定する情報とともに、他の取得元に取得させる被取得データのデータ量を特定する情報を、取得元に通知する機能を有する。ここで、他の取得元に取得させる被取得データのデータ量を特定する情報とは、例えば、要求トークンの送信先とは異なる他の取得側の通信装置Nに取得させるメッセージMが格納されるバッファBのバッファリング量である。これにより、取得側の通信装置Nにおいて取得対象を決定するための指標となる情報になる要求トークンの送信先とは異なる他の取得側の通信装置Nが取得するメッセージMが格納されるバッファBのバッファリング量を、取得側の通信装置Nに提供することができる。
【0100】
(通信の準備)
次に、図16および図17を用いて、通信装置Nが通信の準備としておこなう処理について説明する。
【0101】
(初期化処理の詳細)
まず、図16を用いて、通信装置Nが通信をはじめる前におこなう初期化処理の詳細について説明する。
【0102】
図16は、初期化処理の詳細を示すフローチャートである。まず、CPU301は、アプリケーションI/F307を初期化する(ステップS1601)。アプリケーションI/F307の初期化において、後述するアプリケーション利用登録処理がおこなわれる。次に、CPU301は、バッファBを初期化する(ステップS1602)。また、CPU301は、統計情報(被取得長履歴400、被取得スループット履歴700、取得長履歴800、取得スループット履歴900)を初期化する(ステップS1603)。
【0103】
そして、CPU301は、通信相手リスト1100を作成する(ステップS1604)。次に、CPU301は、要求トークンリスト1000と、取得条件1200と、を初期化して(ステップS1605)、初期化処理を終了する。これにより、通信装置Nは、通信をはじめることができるようになる。
【0104】
(アプリケーション利用登録処理の詳細)
次に、図17を用いて、通信装置Nが、取得したメッセージMをアプリケーションへ引き渡すためにおこなうアプリケーション利用登録処理の詳細について説明する。
【0105】
図17は、アプリケーション利用登録処理の詳細を示すフローチャートである。まず、CPU301は、受信関数を登録する(ステップS1701)。次に、CPU301は、受信バッファを登録する(ステップS1702)。
【0106】
そして、CPU301は、最大許容レイテンシを登録し(ステップS1703)、アプリケーション利用登録処理を終了する。これにより、通信装置Nは、取得したメッセージMをアプリケーションに引き渡すことができるようになる。
【0107】
(被取得側の通信装置Nの処理)
次に、図18〜図20を用いて、被取得側の通信装置Nの処理について説明する。具体的には、例えば、図1に示した通信装置N1,N3の処理である。
【0108】
(要求トークンの送信の内容)
まず、図18を用いて、被取得側の通信装置Nによる要求トークンの送信の内容について説明する。
【0109】
図18は、要求トークンの送信の内容を示す説明図である。通信装置Nは、バッファBがあふれないように、バッファBがあふれる前に要求トークンを送信するための指標となる目標バッファリング量を算出しておく。
【0110】
ここで、通信装置Nは、被取得スループット履歴700から、平均の被取得スループットを算出しておく。また、通信装置Nは、要求トークンレイテンシ履歴600から、平均の要求トークンのレイテンシを算出しておく。そして、通信装置Nは、目標バッファリング量として、例えば、「バッファBの容量−平均の被取得スループット×平均の要求トークンのレイテンシ」を算出しておく。
【0111】
ただし、通信装置Nは、被取得長履歴400や生成履歴500を参照して、目標バッファリング量をさらに調整してもよい。例えば、通信装置Nは、被取得長履歴400を参照して、過去に頻繁に少量のメッセージMが取得されている場合には、要求トークンの送信をより頻繁におこなうために、目標バッファリング量を低く調整してもよい。また、通信装置Nは、生成履歴500を参照して、過去にアプリケーションが大量のメッセージMを生成したことがある場合は、目標バッファリング量を低く調整してもよい。
【0112】
(1)そして、通信装置Nは、算出した目標バッファリング量より、バッファBのバッファリング量が多くなったとき、要求トークンを送信する。これにより、通信装置Nは、バッファBがあふれる前に、要求トークンを送信するトリガを発生させ、メッセージMの取得側に要求トークンを送信することができる。
【0113】
また、通信装置Nは、取得期限の前にメッセージMを取得させるための指標となるデッドラインを算出しておく。取得期限とは、アプリケーションが許容できるメッセージMのレイテンシ(メッセージMを生成してから取得されるまでの時間)の最大値(以下、「最大許容レイテンシ」)である。通信装置Nは、例えば、デッドラインとして、「最大許容レイテンシ−平均の要求トークンのレイテンシ」を算出しておく。
【0114】
(2)そして、通信装置Nは、メッセージMが生成されてからの経過時間を測定し、経過時間が算出したデッドラインを超えた場合に、要求トークンを送信する。これにより、通信装置Nは、取得期限を経過する前に、要求トークンを送信するトリガを発生させ、メッセージMの取得側に要求トークンを送信することができる。
【0115】
(バッファ管理処理の詳細)
次に、図19を用いて、図18に示した要求トークンを送信する被取得側の通信装置Nによるバッファ管理処理の詳細について説明する。
【0116】
図19は、バッファ管理処理の詳細を示すフローチャートである。まず、CPU301は、アプリケーションに生成されたメッセージMのサイズが小さいか否かを判定する(ステップS1901)。ここで、サイズが小さい場合(ステップS1901:Yes)、CPU301は、メッセージMをバッファBにコピーして(ステップS1902)、ステップS1904に移行する。一方で、サイズが大きい場合(ステップS1901:No)、CPU301は、メッセージMをバッファBに連結して(ステップS1903)、ステップS1904に移行する。
【0117】
次に、CPU301は、バッファBのバッファリング量を更新して(ステップS1904)、バッファリング量が目標バッファリング量以上か否かを判定する(ステップS1905)。ここで、目標バッファリング量以上である場合(ステップS1905:Yes)、CPU301は、要求トークン送信処理(ステップS1907)に移行する。
【0118】
一方、目標バッファリング量より小さい場合(ステップS1905:No)、CPU301は、メッセージMの生成からの経過時間がデッドラインを超えているか否かを判定する(ステップS1906)。ここで、デッドラインを超えている場合(ステップS1906:Yes)、CPU301は、要求トークン送信処理(ステップS1907)に移行する。
【0119】
一方、デッドラインを超えていない場合(ステップS1906:No)、CPU301は、バッファ管理処理を終了する。これにより、バッファBの容量が枯渇する前に要求トークンの送信のトリガを発生させることができる。また、メッセージMの取得期限を過ぎる前に、要求トークンの送信のトリガを発生させることができる。
【0120】
(要求トークン送信処理の詳細)
次に、図20を用いて、図19に示した要求トークン送信処理の詳細について説明する。
【0121】
図20は、要求トークン送信処理の詳細を示すフローチャートである。まず、CPU301は、要求トークンを生成する(ステップS2001)。次に、CPU301は、生成した要求トークンを送信し(ステップS2002)、要求トークン送信処理を終了する。これにより、通信装置Nは、要求トークンを送信することができる。
【0122】
ここで、生成される要求トークンには、例えば、被取得側の通信装置Nの識別子と、要求トークンの宛先を取得側にするメッセージMが格納されるバッファBへ格納されているメッセージMのデータ量と、が含まれている。また、要求トークンには、要求トークンの宛先を取得側にするメッセージMが格納されるバッファBとは異なる他のバッファBへ格納されているメッセージMのデータ量を含んでもよい。また、要求トークンには、要求トークンの宛先を取得側にする通信装置Nに取得させるメッセージMの取得期限に関する情報(例えば、取得期限までの残り時間)を含んでもよい。
【0123】
(メッセージMを取得する側の通信装置Nの処理)
次に、図21〜図23を用いて、メッセージMを取得する側の通信装置Nの処理について説明する。
【0124】
(メッセージMの取得の内容)
まず、図21を用いて、要求トークンを受信した取得側の通信装置NによるメッセージMの取得の内容について説明する。なお、取得側の通信装置Nは、受信した要求トークンから、要求トークンリスト1000を生成している。
【0125】
図21は、要求トークンを受信した取得側の通信装置NによるメッセージMの取得の内容を示す説明図である。ここで、取得側の通信装置Nは、要求トークンリスト1000の各レコードを参照して、メッセージMの取得対象にする被取得側の通信装置Nを決定する。ただし、取得側の通信装置Nは、取得条件1200を参照して、最大取得数を超えない範囲で、メッセージMの取得対象にする被取得側の通信装置Nを決定する。
【0126】
(1)例えば、通信装置Nは、自通信装置Nが取得するメッセージMを格納するバッファBのメッセージMのデータ量が多い通信装置N2からメッセージMを取得するために、取得依頼リスト1300にレコードを追加する。
【0127】
(2)また、通信装置Nは、自通信装置Nが取得するメッセージMを格納するバッファBとは異なる他のバッファBが逼迫している通信装置N3からは、まだメッセージMを取得しない。
【0128】
(3)また、通信装置Nは、自通信装置Nが取得するメッセージMを格納するバッファBのメッセージMのデータ量は少ないが、取得期限までの残り時間が少ない通信装置N4からメッセージMを取得するために、取得依頼リスト1300にレコードを追加する。
【0129】
(4)また、通信装置Nは、自通信装置Nが取得するメッセージMを格納するバッファBのメッセージMのデータ量が多い通信装置N5からメッセージMを取得するために、取得依頼リスト1300にレコードを追加する。
【0130】
(5)そして、通信装置Nは、取得依頼リスト1300のレコードに基づいて、取得対象にした通信装置Nから、メッセージMを取得する。ただし、通信装置Nは、同時に取得する取得対象の数(現在取得数)を、取得条件1200の最大取得数以内にする。例えば、取得依頼リスト1300のレコードの登録順で被取得側の通信装置Nを取得対象にしていき、最大取得数を超えない数の被取得側の通信装置Nから同時にメッセージMを取得していく。
【0131】
また、例えば、取得依頼リスト1300のレコードに対応する要求トークンに含まれるバッファリング量が多い順で被取得側の通信装置Nを取得対象にしていき、最大取得数を超えない数の被取得側の通信装置Nから同時にメッセージMを取得してもよい。これにより、ネットワークを輻輳させない範囲で、複数の通信装置Nから同時にメッセージMを取得することができる。
【0132】
(他の取得側へのバッファリング量を含む要求トークンに基づくメッセージMの取得)
また、図22を用いて、他の取得側へのバッファリング量を含む要求トークンを受信した通信装置NがおこなうメッセージMの取得について説明する。具体的には、図21の(2)に示した処理の内容である。
【0133】
図22は、他の取得側へのバッファリング量を含む要求トークンに基づくメッセージMの取得の内容を示す説明図である。ここで、図22に示す通信システムは、図1と同様の通信システムである。以下では、通信装置N1が、自通信装置NでバッファリングしているメッセージMを、通信装置N2,N3のそれぞれに取得するように要求する場合を例に挙げて、通信装置Nによる通信の内容について説明する。
【0134】
図22において、(1)通信装置N1は、通信装置N2に取得させるメッセージMがバッファB1t2に格納されているため、通信装置N2に要求トークンを送信する。
【0135】
(2)また、通信装置N1は、通信装置N3に取得させるメッセージMがバッファB1t3に格納されているため、通信装置N3に要求トークンを送信する。
【0136】
ここで、それぞれの要求トークンには、メッセージMの被取得側となる通信装置N1の識別子と、バッファB1t2に格納されているメッセージMのデータ量と、バッファB1t3に格納されているメッセージMのデータ量と、が含まれる。
【0137】
(3)要求トークンを受信した通信装置N2は、要求トークンに含まれるバッファB1t2へ格納されているメッセージMのデータ量と、バッファB1t3に格納されているメッセージMのデータ量と、を参照して、通信装置N1からメッセージMを取得するか否かを判定する。
【0138】
ここでは、バッファB1t3へ格納されているメッセージMのデータ量は、バッファB1t2へ格納されているメッセージMのデータ量より多い。そのため、通信装置N2は、通信装置N1は通信装置N2よりも先に、通信装置N3からメッセージMを取得されるべきであると判定する。そして、通信装置N2は、まだ通信装置N1からメッセージMを取得しない。
【0139】
(4)一方、要求トークンを受信した通信装置N3は、要求トークンに含まれるバッファB1t2へ格納されているメッセージMのデータ量と、バッファB1t3に格納されているメッセージMのデータ量と、を参照して、通信装置N1からメッセージMを取得するか否かを判定する。
【0140】
ここでは、バッファB1t3へ格納されているメッセージMのデータ量は、バッファB1t2へ格納されているメッセージMのデータ量より多い。そのため、通信装置N3は、通信装置N2よりも先に、通信対象にするべきであると判定して、通信装置N1からメッセージMを取得する。
【0141】
このように、被取得側での複数のバッファBの逼迫具合に基づいて、取得対象にするか否かを決定するため、1対1の通信装置N間の効率化ではなく、ネットワーク全体での効率化を図ることができる。また、これにより、取得側の通信装置Nでより逼迫しているバッファBに格納されているメッセージMが優先して取得されるようにすることで、バッファBの容量の枯渇を回避することができる。
【0142】
(取得依頼登録処理)
次に、図23を用いて、要求トークンを受信した通信装置Nがおこなう取得依頼登録処理について説明する。具体的には、例えば、図1に示した通信装置N2がおこなう処理である。
【0143】
図23は、取得依頼登録処理の詳細を示すフローチャートである。まず、CPU301は、要求トークンを受信したか否かを判定する(ステップS2301)。ここで、要求トークンを受信していない場合(ステップS2301:No)、CPU301は、ステップS2301に戻り、要求トークンの受信を待つ。
【0144】
一方、要求トークンを受信した場合(ステップS2301:Yes)、CPU301は、統計情報を更新する(ステップS2302)。次に、CPU301は、受信した要求トークンを参照して、取得すべき状況か否かを判定する(ステップS2303)。ステップS2303の判定は、例えば、図21の(1)〜(4)のそれぞれの処理に対応する。
【0145】
ここで、取得すべき状況でない場合(ステップS2303:No)、CPU301は、取得依頼登録処理を終了する。一方、取得すべき状況である場合(ステップS2303:Yes)、CPU301は、要求トークンを参照して、取得依頼リスト1300にレコードを追加し(ステップS2304)、取得依頼登録処理を終了する。
【0146】
(取得処理)
次に、図24を用いて、取得依頼リスト1300に基づいて通信装置Nがおこなう取得処理について説明する。具体的には、例えば、取得側の通信装置Nは、図23のステップS2304において取得依頼リスト1300にレコードが追加された場合、または、一定時間ごとに、取得処理を実行して被取得側の通信装置NからメッセージMを取得する。
【0147】
図24は、取得処理の詳細を示すフローチャートである。まず、CPU301は、現在取得数が最大取得数より少ないか否かを判定する(ステップS2401)。ここで、現在取得数が最大取得数以上である場合(ステップS2401:No)、CPU301は、ステップS2405に移行する。
【0148】
一方、現在取得数が最大取得数より少ない場合(ステップS2401:Yes)、CPU301は、取得依頼リスト1300にレコードがあるか否かを判定する(ステップS2402)。ここで、レコードがない場合(ステップS2402:No)、CPU301は、ステップS2405に移行する。
【0149】
一方、取得依頼リスト1300にレコードがある場合(ステップS2402:Yes)、CPU301は、取得依頼リスト1300のいずれかのレコードを取得する(ステップS2403)。次に、CPU301は、取得したレコードに基づいて、メッセージMの取得を開始する(ステップS2404)。そして、CPU301は、ステップS2401に戻る。
【0150】
ステップS2405では、CPU301は、取得条件1200を変更し(ステップS2405)、取得処理を終了する。これにより、通信装置Nは、最大取得数以内で、同時に複数の被取得側の通信装置NからメッセージMを取得することができる。
【0151】
なお、取得側の通信装置Nは、メッセージMの取得が終了した場合、被取得側の通信装置Nに終了通知を送信する。また、取得側の通信装置Nは、メッセージMの取得が終了した場合、取得対象にした被取得側の通信装置Nに対応する取得依頼リスト1300のレコードを削除する。また、取得側の通信装置Nは、被取得側の通信装置NのバッファBのすべてのメッセージMの取得が終了した場合、取得対象にした被取得側の通信装置Nに対応する要求トークンリスト1000のレコードを削除する。また、取得側の通信装置Nは、メッセージMの取得が終了した場合、統計情報を更新する。
【0152】
(取得条件1200の変更の内容)
次に、図25を用いて、ステップS2405における取得条件1200の変更の内容について説明する。具体的には、例えば、通信装置Nは、ネットワークの使用状況に応じて、取得条件1200を動的に変更していく。なお、取得条件1200は固定であってもよい。
【0153】
図25は、取得条件1200の変更の内容を示す説明図である。通信装置Nは、図25に示した表のように、許可長が使い切られているか否かと、取得スループットが上限値に達したか否かと、の条件に基づいて、取得条件1200を変更する。
【0154】
ここで、上限値とは、取得スループットの限界値(ネットワークにおける輻輳の発生の閾値となる取得スループット)に安全係数0.8を乗じた値であり、ネットワークの輻輳を回避するための指標となる値である。
【0155】
例えば、通信装置Nは、取得スループットが上限値に達していない場合であって、かつ、許可長を使い切っていない場合、同時に取得する被取得側の通信装置Nの数を増やしてもネットワークは輻輳しないとして、最大取得数を増加させる。
【0156】
また、例えば、通信装置Nは、取得スループットが上限値に達していない場合であって、かつ、許可長を使い切った場合、被取得側の通信装置Nから1度に取得するデータ量を増やしてもネットワークは輻輳しないとして、許可長を増加させる。
【0157】
また、例えば、通信装置Nは、取得スループットが上限値に達した場合であって、かつ、許可長を使い切っていない場合、同時に取得する被取得側の通信装置Nの数を減らして、ネットワークの輻輳を抑制する。
【0158】
また、例えば、通信装置Nは、取得スループットが上限値に達した場合であって、かつ、許可長を使い切った場合、被取得側の通信装置Nから1度に取得するデータ量を減らして、ネットワークの輻輳を抑制する。
【0159】
このように、通信装置Nは、ネットワークの使用状況に応じて、取得条件1200を動的に変更していく。また、取得条件1200は、被取得側の通信装置Nごとに、取得長項目を有してもよい。そして、取得側の通信装置Nは、取得条件1200の取得長項目を参照して、被取得側の通信装置Nごとに異なるデータ量でメッセージMを取得するようにしてもよい。
【0160】
また、取得側の通信装置Nは、被取得側の通信装置Nから受信した要求トークンに含まれる情報に基づいて、取得条件1200のレコードを更新してもよい。例えば、取得側の通信装置Nは、通信の開始時には、複数の被取得側の通信装置Nのそれぞれについて、許可長を同一に設定した取得条件1200のレコードを構成しておく。
【0161】
そして、例えば、取得側の通信装置Nは、要求トークンの受信回数が多く、それぞれの要求トークンに含まれるバッファリング量が多い被取得側の通信装置Nについては、対応する取得条件1200の許可長項目のデータ量を増加させる。また、例えば、取得側の通信装置Nは、要求トークンの受信回数が少なく、それぞれの要求トークンに含まれるバッファリング量が少ない被取得側の通信装置Nについては、対応する取得条件1200の許可長項目のデータ量を減少させる。
【0162】
以上説明したように、取得側になる通信装置Nは、複数の被取得側の通信装置Nから受信した要求トークンに含まれる各被取得側の通信装置Nでのバッファリング量に基づいて、よりバッファBが逼迫している被取得側の通信装置NからメッセージMを取得する。
【0163】
これにより、各被取得側の通信装置NでのバッファBがあふれないようにするとともに、ネットワークを流れるメッセージMのデータ量を管理して、メッセージMの衝突を回避し、輻輳を抑制できる。そして、輻輳を抑制できるため、輻輳に起因する通信時間の増加を回避することができ、ネットワーク全体の通信フェーズを短縮することができる。
【0164】
また、要求トークンに、被取得側の通信装置Nでの複数のバッファBのバッファリング量を含める。これにより、被取得側の通信装置Nで最も逼迫しているバッファBのメッセージMを優先して、取得側の通信装置Nに取得させるようにして、バッファBがあふれないようにすることができる。また、取得側の通信装置Nは、被取得側の通信装置Nでの複数のバッファBのバッファリング量に基づいて、メッセージMを取得するか否かを決定するため、1対1の通信装置N間の効率化ではなく、ネットワーク全体での効率化を図ることができる。
【0165】
また、通信装置Nは、一度に取得する被取得側の通信装置Nの数を閾値以下にして、ネットワークを流れるメッセージMのデータ量を管理して、メッセージMの衝突を回避し、輻輳を抑制できる。
【0166】
また、要求トークンに、被取得側の通信装置NでのメッセージMの取得期限に関する情報を含める。これにより、取得側の通信装置Nは、取得期限が迫っている被取得側の通信装置Nから優先してメッセージMを取得していくため、メッセージMを取得期限までに取得することができる。
【0167】
また、取得側の通信装置Nは、被取得側の通信装置Nから取得するメッセージMのデータ量の上限を定めて、メッセージMを取得する。これにより、ネットワークを流れるメッセージMのデータ量を管理して、メッセージMの衝突を回避し、輻輳を抑制できる。
【0168】
被取得側の通信装置Nでは、バッファBのバッファリング量に基づいて、要求トークンを送信するか否かを判定する。これにより、バッファBがあふれる前に、要求トークンを送信して、メッセージMを取得側の通信装置Nに取得させることができる。
【0169】
また、被取得側の通信装置Nでは、メッセージMの取得期限に基づいて、要求トークンを送信するか否かを判定する。これにより、取得期限より前に、要求トークンを送信して、メッセージMを取得期限までに取得側の通信装置Nに取得させることができる。
【0170】
ここで、クラスタなどの分散並列計算機を使った処理の分野には、処理過程での演算結果に依存して通信相手が決定され、予め通信相手がどの通信装置になるかを予測することが困難な種類の処理がある。例えば、MapReduceのshuffle、Key−Value Storageシステム、または分散Complex Event Processingなどでの処理である。
【0171】
このような予め通信相手が予測困難な処理に対しては、アルゴリズムと、通信装置の物理的配置および時間的配置と、を工夫しておくことにより、メッセージM通信を予めスケジューリングして、衝突を回避し輻輳を抑制することができないという問題がある。しかしながら、本実施の形態にかかる通信装置、通信方法、および通信プログラムは、このような予め通信相手が予測困難な処理に対しても適用可能であり、メッセージMの衝突を回避し輻輳を抑制することができる。
【0172】
また、メッセージMが衝突した場合、輻輳を抑制する技術には、TCP/IP(Transmission Control Protocol/Internet Protocol)のフロー制御やEthernet(登録商標)のパケット衝突回避技術がある。しかし、TCP/IPのフロー制御やEthernet(登録商標)のパケット衝突回避技術では、メッセージMの衝突があってから輻輳を抑制する効果があらわれるまでに、ネットワーク上においてパケットロスが発生するという問題がある。また、Ethernet(登録商標)スイッチでの制御切替のためにオーバヘッドが生じるという問題がある。また、受信データ量の過多により、受信側の通信装置で、キャッシュミスヒットやメモリ不足が生じるという問題がある。しかしながら、本実施の形態にかかる通信装置、通信方法、および通信プログラムは、TCP/IPのフロー制御やEthernet(登録商標)のパケット衝突回避技術のようにパケットロスやキャッシュミスヒットやメモリ不足を生じることなく、メッセージMの衝突を回避し輻輳を抑制することができる。
【0173】
なお、本実施の形態で説明した通信方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本通信プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本通信プログラムは、インターネット等のネットワークを介して配布してもよい。
【0174】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0175】
(付記1)複数の取得先と通信する通信装置であって、
前記複数の取得先のうちいずれかの取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報を、前記いずれかの取得先から受信する受信手段と、
前記受信手段によって受信された情報に基づいて、前記いずれかの取得先を取得対象にするか否かを判定する判定手段と、
前記判定手段によって取得対象にすると判定された前記いずれかの取得先から、前記通信装置を取得元にする被取得データを取得する取得手段と、
を備えることを特徴とする通信装置。
【0176】
(付記2)前記受信手段は、
前記いずれかの取得先とは異なる他の取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報を、前記他の取得先から受信し、
前記判定手段は、
前記いずれかの取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報と、前記他の取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報と、に基づいて、前記いずれかの取得先を取得対象にするか否かを判定することを特徴とする付記1に記載の通信装置。
【0177】
(付記3)前記受信手段は、
前記いずれかの取得先での前記通信装置とは異なる他の通信装置を取得元にする被取得データのデータ量を特定する情報を、前記いずれかの取得先から受信し、
前記判定手段は、
前記いずれかの取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報と、前記いずれかの取得先での前記他の通信装置を取得元にする被取得データのデータ量を特定する情報と、に基づいて、前記いずれかの取得先を取得対象にするか否かを判定することを特徴とする付記1に記載の通信装置。
【0178】
(付記4)前記受信手段は、
前記いずれかの取得先での前記通信装置を取得元にする被取得データの取得期限に関する情報を、前記いずれかの取得先から受信し、
前記判定手段は、
前記いずれかの取得先での前記通信装置を取得元にする被取得データの取得期限に関する情報に基づいて、前記いずれかの取得先を取得対象にするか否かを判定することを特徴とする付記1に記載の通信装置。
【0179】
(付記5)前記受信手段は、
前記いずれかの取得先とは異なる他の取得先での前記通信装置を取得元にする被取得データの取得期限に関する情報を、前記他の取得先から受信し、
前記判定手段は、
前記いずれかの取得先での前記通信装置を取得元にする被取得データの取得期限に関する情報と、前記他の取得先での前記通信装置を取得元にする被取得データの取得期限に関する情報と、に基づいて、前記いずれかの取得先を取得対象にするか否かを判定することを特徴とする付記4に記載の通信装置。
【0180】
(付記6)前記受信手段によって受信された情報に基づいて、前記判定手段によって取得対象にすると判定された前記いずれかの取得先から取得するデータ量を決定する決定手段を備え、
前記取得手段は、
前記判定手段によって取得対象にすると判定された前記いずれかの取得先から、前記決定手段によって決定されたデータ量で、前記通信装置を取得元にする被取得データを取得することを特徴とする付記1〜5のいずれか一つに記載の通信装置。
【0181】
(付記7)前記判定手段は、
取得中の取得対象の数が閾値以上である場合、前記いずれかの取得先を取得対象にしないと判定することを特徴とする付記1〜6のいずれか一つに記載の通信装置。
【0182】
(付記8)取得元に取得させる被取得データのデータ量が閾値以上であることを検出する検出手段と、
前記検出手段によって前記被取得データのデータ量が閾値以上であることが検出された場合、前記被取得データのデータ量を特定する情報を、前記取得元に通知する通知手段と、
を備えることを特徴とする通信装置。
【0183】
(付記9)前記検出手段は、
前記被取得データを生成したときからの経過時間が規定時間以上であることを検出し、
前記通知手段は、
前記検出手段によって前記経過時間が規定時間以上であることが検出された場合、前記被取得データのデータ量を特定する情報を、前記取得元に通知することを特徴とする付記8に記載の通信装置。
【0184】
(付記10)前記通知手段は、
前記被取得データのデータ量を特定する情報とともに、前記被取得データの取得期限に関する情報を、前記取得元に通知することを特徴とする付記8または9に記載の通信装置。
【0185】
(付記11)前記検出手段は、前記取得元とは異なる他の取得元に取得させる被取得データのデータ量を検出し、
前記通知手段は、
前記被取得データのデータ量を特定する情報とともに、前記他の取得元に取得させる被取得データのデータ量を特定する情報を、前記取得元に通知することを特徴とする付記8〜10のいずれか一つに記載の通信装置。
【0186】
(付記12)複数の取得先と通信する通信装置が、
前記複数の取得先のうちいずれかの取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報を、前記いずれかの取得先から受信し、
受信された情報に基づいて、前記いずれかの取得先を取得対象にするか否かを判定し、
取得対象にすると判定された前記いずれかの取得先から、前記通信装置を取得元にする被取得データを取得する、
処理を実行することを特徴とする通信方法。
【0187】
(付記13)コンピュータが、
取得元に取得させる被取得データのデータ量が閾値以上であることを検出し、
前記被取得データのデータ量が閾値以上であることが検出された場合、前記被取得データのデータ量を特定する情報を、前記取得元に通知する、
処理を実行することを特徴とする通信方法。
【0188】
(付記14)複数の取得先と通信する通信装置に、
前記複数の取得先のうちいずれかの取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報を、前記いずれかの取得先から受信し、
受信された情報に基づいて、前記いずれかの取得先を取得対象にするか否かを判定し、
取得対象にすると判定された前記いずれかの取得先から、前記通信装置を取得元にする被取得データを取得する、
処理を実行させることを特徴とする通信プログラム。
【0189】
(付記15)コンピュータに、
取得元に取得させる被取得データのデータ量が閾値以上であることを検出し、
前記被取得データのデータ量が閾値以上であることが検出された場合、前記被取得データのデータ量を特定する情報を、前記取得元に通知する、
処理を実行させることを特徴とする通信プログラム。
【符号の説明】
【0190】
N 通信装置
B バッファ
M メッセージ
1401 受信部
1402 判定部
1403 取得部
1404 決定部
1501 検出部
1502 通知部

【特許請求の範囲】
【請求項1】
複数の取得先と通信する通信装置であって、
前記複数の取得先のうちいずれかの取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報を、前記いずれかの取得先から受信する受信手段と、
前記受信手段によって受信された情報に基づいて、前記いずれかの取得先を取得対象にするか否かを判定する判定手段と、
前記判定手段によって取得対象にすると判定された前記いずれかの取得先から、前記通信装置を取得元にする被取得データを取得する取得手段と、
を備えることを特徴とする通信装置。
【請求項2】
前記受信手段は、
前記いずれかの取得先とは異なる他の取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報を、前記他の取得先から受信し、
前記判定手段は、
前記いずれかの取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報と、前記他の取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報と、に基づいて、前記いずれかの取得先を取得対象にするか否かを判定することを特徴とする請求項1に記載の通信装置。
【請求項3】
前記受信手段は、
前記いずれかの取得先での前記通信装置とは異なる他の通信装置を取得元にする被取得データのデータ量を特定する情報を、前記いずれかの取得先から受信し、
前記判定手段は、
前記いずれかの取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報と、前記いずれかの取得先での前記他の通信装置を取得元にする被取得データのデータ量を特定する情報と、に基づいて、前記いずれかの取得先を取得対象にするか否かを判定することを特徴とする請求項1に記載の通信装置。
【請求項4】
前記受信手段は、
前記いずれかの取得先での前記通信装置を取得元にする被取得データの取得期限に関する情報を、前記いずれかの取得先から受信し、
前記判定手段は、
前記いずれかの取得先での前記通信装置を取得元にする被取得データの取得期限に関する情報に基づいて、前記いずれかの取得先を取得対象にするか否かを判定することを特徴とする請求項1に記載の通信装置。
【請求項5】
前記受信手段は、
前記いずれかの取得先とは異なる他の取得先での前記通信装置を取得元にする被取得データの取得期限に関する情報を、前記他の取得先から受信し、
前記判定手段は、
前記いずれかの取得先での前記通信装置を取得元にする被取得データの取得期限に関する情報と、前記他の取得先での前記通信装置を取得元にする被取得データの取得期限に関する情報と、に基づいて、前記いずれかの取得先を取得対象にするか否かを判定することを特徴とする請求項4に記載の通信装置。
【請求項6】
前記受信手段によって受信された情報に基づいて、前記判定手段によって取得対象にすると判定された前記いずれかの取得先から取得するデータ量を決定する決定手段を備え、
前記取得手段は、
前記判定手段によって取得対象にすると判定された前記いずれかの取得先から、前記決定手段によって決定されたデータ量で、前記通信装置を取得元にする被取得データを取得することを特徴とする請求項1〜5のいずれか一つに記載の通信装置。
【請求項7】
取得元に取得させる被取得データのデータ量が閾値以上であることを検出する検出手段と、
前記検出手段によって前記被取得データのデータ量が閾値以上であることが検出された場合、前記被取得データのデータ量を特定する情報を、前記取得元に通知する通知手段と、
を備えることを特徴とする通信装置。
【請求項8】
前記検出手段は、
前記被取得データを生成したときからの経過時間が規定時間以上であることを検出し、
前記通知手段は、
前記検出手段によって前記経過時間が規定時間以上であることが検出された場合、前記被取得データのデータ量を特定する情報を、前記取得元に通知することを特徴とする請求項7に記載の通信装置。
【請求項9】
複数の取得先と通信する通信装置が、
前記複数の取得先のうちいずれかの取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報を、前記いずれかの取得先から受信し、
受信された情報に基づいて、前記いずれかの取得先を取得対象にするか否かを判定し、
取得対象にすると判定された前記いずれかの取得先から、前記通信装置を取得元にする被取得データを取得する、
処理を実行することを特徴とする通信方法。
【請求項10】
コンピュータが、
取得元に取得させる被取得データのデータ量が閾値以上であることを検出し、
前記被取得データのデータ量が閾値以上であることが検出された場合、前記被取得データのデータ量を特定する情報を、前記取得元に通知する、
処理を実行することを特徴とする通信方法。
【請求項11】
複数の取得先と通信する通信装置に、
前記複数の取得先のうちいずれかの取得先での前記通信装置を取得元にする被取得データのデータ量を特定する情報を、前記いずれかの取得先から受信し、
受信された情報に基づいて、前記いずれかの取得先を取得対象にするか否かを判定し、
取得対象にすると判定された前記いずれかの取得先から、前記通信装置を取得元にする被取得データを取得する、
処理を実行させることを特徴とする通信プログラム。
【請求項12】
コンピュータに、
取得元に取得させる被取得データのデータ量が閾値以上であることを検出し、
前記被取得データのデータ量が閾値以上であることが検出された場合、前記被取得データのデータ量を特定する情報を、前記取得元に通知する、
処理を実行させることを特徴とする通信プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate