以下に図面を参照して、本発明にかかる通信時間算出方法および通信時間算出プログラムの実施の形態を詳細に説明する。
(実施の形態1)
まず、実施の形態1にかかる情報処理システム100のシステム構成例について説明する。情報処理システム100は、例えば、アプリケーションの実行環境をユーザに貸し出すクラウドサービスを提供するコンピュータシステムに適用される。
図1は、実施の形態1にかかる情報処理システム100のシステム構成例を示す説明図である。図1において、情報処理システム100は、複数の情報処理装置101を含む。情報処理システム100において、複数の情報処理装置101は、有線または無線のネットワーク110を介して接続される。ネットワーク110は、例えば、インターネット、LAN、WAN(Wide Area Network)などである。
ここで、情報処理装置101は、コンテナCを実行可能なコンピュータである。コンテナC(Container)は、OS(Operating System)のカーネルを内部で分割して作成される、他と隔離されたユーザ空間に相当し、OSのプロセスのひとつとして動作する。カーネルは、OSの中核的な役割を担う部分であり、OSの基本機能を実行するソフトウェアである。ユーザ空間は、ユーザがアプリケーションを実行するためのリソースをひとまとめにした実行環境である。
OSのリソースは、論理的に分割されて、複数のコンテナCで共有される。具体的には、例えば、各コンテナCには、IP(Internet Protocol)アドレスやホスト名が割り当てられる。また、CPU(Central Processing Unit)、メモリ、ディスクといったリソースもコンテナCごとに論理的に分離される。
コンテナCは、例えば、OSカーネルが持つnamespace(名前空間)機能とcgroups(controlgroups)機能により実装される。namespace機能は、プロセスをグループ化して、他のグループから隔離する役割を担う機能である。cgroups機能は、グループ化されたプロセスに対するリソースの割り当てを制御する機能である。
また、情報処理装置101は、仮想マシンVMを実行可能であってもよい。仮想マシンVM(Virtual Machine)は、物理的なコンピュータのハードウェア資源を分割して構築される実行環境で動作する仮想的なコンピュータである。仮想マシンVMは、例えば、ハイパーバイザによりハードウェア資源を仮想化することにより実現される。
ここで、クラウドシステムの健全性を診断するための情報の一つとして、コンテナC間でやり取りされるパケットの伝送に必要な所要時間である伝送遅延(通信時間)がある。伝送遅延を測定する手法として、例えば、RFC(Request for Comments)791のタイムスタンプオプションヘッダを用いることが考えられる。タイムスタンプオプションヘッダは、パケットの伝搬遅延時間を取得するためのIPv4のオプションヘッダである(TCP(Transmission Control Protocol)/IPの規格)。
例えば、発信側アプリで、パケットにオプションヘッダを付加し、パケットを中継する装置で、自分のIPアドレスと時刻をオプションヘッダに書き込み、受信側アプリで、オプションヘッダを解析して通信時間を測定することが考えられる。時刻は、例えば、当日のUTC(Universal Time Coordinated)0時からの経過時間(ミリ秒単位)である。
しかしながら、この技術は、コンテナC上で動作するユーザアプリのように、発信側・受信側アプリが、オプションヘッダを読み書きする機能や、通信時間を測定する機能を持たないときには適用することができない。また、コンテナC間でやり取りされるパケットの伝送遅延は、1ミリ秒未満であることがある。
また、装置間でやり取りされるパケットをネットワークへの出入り口でミラーリングして蓄積しておき、蓄積したミラーパケットを解析して伝送遅延を測定することが考えられる。しかしながら、ミラーパケットの蓄積量が膨大なものとなるとともに、蓄積したミラーパケットの解析にかかる時間や負荷が増大するという問題がある。
また、装置間で高精度に時刻同期して伝送遅延を測定することが考えられる。この手法を、コンテナC間でやり取りされるパケットの伝送遅延の測定に適用する場合、パケットの加工や読み取りを行う装置(モジュール)を、OSのカーネル内に作り込み、時刻同期する必要がある。
ここで、UNIX系OSの時計として、カレンダ時刻を示す時計とタイマ値を示す時計とがある(UNIXは、登録商標である。)。カレンダ時刻には、時刻やタイムゾーンを設定することができる。カレンダ時刻は、装置間で同期することが可能である。ところが、OSのカーネル内のモジュールでは、カレンダ時刻を読み取ることができない。
一方、OSのカーネル内のモジュールでは、タイマ値は読み取ることができる。タイマ値は、装置(OS)が起動してからの経過時間を示す。しかし、タイマ値は、OSブート時からクロックの周期でカウントアップされ続ける値であり、管理者権限があっても設定できない値のため、装置間で同期することができない。
そこで、本実施の形態では、パケットの加工や読み取りを行うモジュールでタイマ値しか取得できない環境であっても、装置間でやり取りされるパケットの伝送遅延(通信時間)を算出する通信時間算出方法について説明する。
まず、図2を用いて、情報処理システム100内のモジュール例について説明する。ここでは、複数の情報処理装置101のうち、ネットワーク110を介して相互に通信する一方の情報処理装置101を「情報処理装置101#」と表記し、他方の情報処理装置101を「情報処理装置101$」と表記する。
図2は、実施の形態1にかかる情報処理装置101内のモジュール例を示す説明図である。図2において、情報処理装置101#と、情報処理装置101$とが示されている。情報処理装置101#では、OS#のカーネルK#内に、パケット加工モジュールpm#と、パケット読み取りモジュールrm#とが設けられている。また、ユーザ空間U#でアプリA#が実行されている。
情報処理装置101$では、OS$のカーネルK$内に、パケット加工モジュールpm$と、パケット読み取りモジュールrm$とが設けられている。また、ユーザ空間U$でアプリA$が実行されている。パケット加工モジュールpm#,pm$は、パケットを加工する機能を有する。パケット読み取りモジュールrm#,rm$は、パケットを読み取る機能を有する。
パケット加工モジュールpm#,pm$およびパケット読み取りモジュールrm#,rm$は、例えば、プログラム(いわゆる、小型VM)により実現される。アプリA#,A$は、情報処理装置101#,101$間の通信時間の測定に用いられるアプリケーションである。
アプリA#,A$は、カレンダ時刻とタイマ時刻(上述したタイマ値に対応)とを読み取り可能である。カレンダ時刻は、アプリA#,A$間で同期可能である。パケット加工モジュールpm#,pm$およびパケット読み取りモジュールrm#,rm$は、タイマ時刻を読み取り可能である。
なお、アプリA#,A$間でのカレンダ時刻の同期処理には、既存のいかなる技術を用いることにしてもよい。例えば、アプリA#が、経路のRTT(Round−Trip Time)の半分を片道の伝送時間とみなして、通信相手(アプリA$)の時刻と伝送時間から、自分の時刻を設定することにしてもよい。RTTは、通信相手に信号やデータを発信してから、応答が返ってくるまでにかかる時間である。
ここでは、ユーザ空間U#,U$のアプリA#,A$と、カーネルK#,K$内の各モジュールpm#,pm$,rm#,rm$とを連携させ、2種類の時計(カレンダ時刻、タイマ時刻)を組み合わせて、情報処理装置101#、101$間の通信時間を算出する。
つぎに、図3を用いて、情報処理システム100の動作例について説明する。ここでは、情報処理装置101#から情報処理装置101$に送信されるパケットPの伝送遅延を測定する場合を例に挙げて説明する。また、アプリA#を「計測アプリMA#」と表記し、アプリA$を「中継アプリRA$」と表記する。
図3は、実施の形態1にかかる通信時間算出方法の一実施例を示す説明図である。図3において、情報処理装置101#のユーザアプリUA#から、情報処理装置101$のユーザアプリUA$にパケットPが送信される場合を想定する。
この場合、情報処理装置101#において、パケット加工モジュールpm#は、タイマ時刻1をパケットPに付加して送信する。ここで、タイマ時刻1は、情報処理装置101$へのパケットPの送信時における情報処理装置101#が起動してからの経過時間を示すタイマ情報である。
情報処理装置101$において、パケット読み取りモジュールrm$は、パケットPを受信すると、パケットPに含まれるタイマ時刻1と、タイマ時刻2とを中継アプリRA$に送信する。ここで、タイマ時刻2は、パケット読み取りモジュールrm$がパケットPを受信したときの、情報処理装置101$が起動してからの経過時間を示すタイマ情報である。また、パケット読み取りモジュールrm$は、受信したパケットPをユーザアプリUA$に転送する。
情報処理装置101$において、中継アプリRA$は、タイマ時刻1とタイマ時刻2とを受信すると、タイマ時刻1、タイマ時刻2、タイマ時刻3およびカレンダ時刻1を、情報処理装置101#の計測アプリMA#に送信する。ここで、タイマ時刻3は、中継アプリRA$がタイマ時刻1とタイマ時刻2とを受信したときの、情報処理装置101$が起動してからの経過時間を示すタイマ情報である。カレンダ時刻1は、中継アプリRA$がタイマ時刻1とタイマ時刻2とを受信したときの、情報処理装置101$における時刻を示す時刻情報である。
情報処理装置101#において、計測アプリMA#は、タイマ時刻1、タイマ時刻2、タイマ時刻3およびカレンダ時刻1を受信すると、タイマ時刻1、タイマ時刻2、タイマ時刻3、タイマ時刻4、カレンダ時刻1およびカレンダ時刻2に基づいて、情報処理装置101#から情報処理装置101$への通信時間を算出する。
ここで、タイマ時刻4は、計測アプリMA#がタイマ時刻1、タイマ時刻2、タイマ時刻3およびカレンダ時刻1を受信したときの、情報処理装置101#が起動してからの経過時間を示すタイマ情報である。カレンダ時刻2は、計測アプリMA#がタイマ時刻1、タイマ時刻2、タイマ時刻3およびカレンダ時刻1を受信したときの、情報処理装置101#における時刻を示す時刻情報である。
また、情報処理装置101#から情報処理装置101$への通信時間は、パケット加工モジュールpm#からパケットPが送信されてから、パケット読み取りモジュールrm$がパケットPを受信するまでの転送時間D1である。
具体的には、例えば、計測アプリMA#は、タイマ時刻1とタイマ時刻4とから、RTT(全時間)を算出する。RTT(全時間)は、パケット加工モジュールpm#がパケットPを送信してから、計測アプリMA#がタイマ時刻1、タイマ時刻2、タイマ時刻3およびカレンダ時刻1を受信するまでの時間である。
また、計測アプリMA#は、タイマ時刻2とタイマ時刻3とから、転送時間D2を算出する。転送時間D2は、パケット読み取りモジュールrm$がタイマ時刻1とタイマ時刻2とを送信してから、中継アプリRA$がタイマ時刻1とタイマ時刻2とを受信するまでの時間である。
また、計測アプリMA#は、カレンダ時刻1とカレンダ時刻2とから、転送時間D3を算出する。転送時間D3は、中継アプリRA$がタイマ時刻1、タイマ時刻2、タイマ時刻3およびカレンダ時刻1を送信してから、計測アプリMA#がタイマ時刻1、タイマ時刻2、タイマ時刻3およびカレンダ時刻1を受信するまでの時間である。
そして、計測アプリMA#は、算出したRTT(全時間)から、算出した転送時間D2と転送時間D3とを減算することにより、転送時間D1を算出する。以下、図4〜図7を用いて、情報処理装置101#,101$内の各モジュールの具体的な処理例について説明する。
図4〜図7は、情報処理システム100の動作例を示す説明図である。図4において、情報処理装置101#のOS#上でコンテナC#が実行されている。OS#は、物理NIC(Network Interface Card)411と、仮想NW412と、仮想NIC413と、を含む。
また、情報処理装置101$のOS$上でコンテナC$が実行されている。OS$は、物理NIC421と、仮想NW422と、仮想NIC423と、を含む。物理NIC411,421は、ネットワーク110に接続するための機器である。仮想NW412,422は、情報処理装置101#,101$内部の仮想的なネットワークであり、例えば、仮想スイッチ、仮想NIC、仮想ブリッジなどにより構築される。
仮想NIC413,423は、仮想的なNICである。仮想NIC413は、コンテナC#とOS#との間の接続用の仮想NICであり、コンテナC#用の仮想NIC414と対向接続される。仮想NIC423は、コンテナC$とOS$との間の接続用の仮想NICであり、コンテナC$用の仮想NIC424と対向接続される。
情報処理装置101#のユーザ空間U#で計測アプリMA#が実行されている。また、情報処理装置101$のユーザ空間U$で中継アプリRA$が実行されている。OS#のカーネルK#内には、仮想NIC413に対応してパケット加工モジュールpm#が設けられている。また、OS$のカーネルK$内には、仮想NIC423に対応してパケット読み取りモジュールrm$が設けられている。
ここで、パケットPは、ユーザアプリUA#からユーザアプリUA$へ送信されるパケットである。ユーザアプリUA#は、情報処理装置101#のOS#で実行されているコンテナC#上で動作するアプリケーションである。ユーザアプリUA$は、情報処理装置101$のOS$で実行されているコンテナC$上で動作するアプリケーションである。
まず、パケット加工モジュールpm#は、仮想NIC413を介して、ユーザアプリUA#から送信されたパケットPを受信すると、パケット到着時刻ta_1を取得する。パケット到着時刻ta_1は、上述したタイマ時刻1に対応する。そして、パケット加工モジュールpm#は、取得したパケット到着時刻ta_1をパケットPに付加して転送する。
ここで、図8を用いて、パケットPのデータ構造例について説明する。
図8は、パケットPのデータ構造例を示す説明図である。図8において、パケットPは、IPヘッダ810と、タイムスタンプオプションヘッダ820とを含む。タイムスタンプオプションヘッダ820は、IPv4のオプションヘッダの一つである。オプションヘッダ種別「68」は、タイムスタンプオプションヘッダを示す番号である。
具体的には、例えば、パケット加工モジュールpm#は、パケットPを受信すると、パケットPのタイムスタンプオプションヘッダ820に、パケット到着時刻ta_1を書き込んで転送する。この結果、パケット到着時刻ta_1が書き込まれたパケットPが、ネットワーク110に送出され、情報処理装置101$に送信される。
図5において、パケット読み取りモジュールrm$は、パケットPを受信すると、パケット到着時刻tb_1を取得する。パケット到着時刻tb_1は、上述したタイマ時刻2に対応する。また、パケット読み取りモジュールrm$は、受信したパケットPのタイムスタンプオプションヘッダ820(図8参照)から、パケット到着時刻ta_1を読み出す。
そして、パケット読み取りモジュールrm$は、パケット到着時刻ta_1とパケット到着時刻tb_1とを含む通知メッセージmを、中継アプリRA$に送信する。また、パケット読み取りモジュールrm$は、受信したパケットPをユーザアプリUA$に転送する。
なお、パケット読み取りモジュールrm$と中継アプリRA$との通信は、同じOS$内のメッセージ通信のため、TCP/IP通信である必要はなく、各種の通信方式を利用可能である。
中継アプリRA$は、通知メッセージmを受信すると、通知時刻tb_2と通知時刻Tb_1とをOS$から取得する。通知時刻tb_2は、上述したタイマ時刻3に対応する。通知時刻Tb_1は、上述したカレンダ時刻1に対応する。また、中継アプリRA$は、受信した通知メッセージmから、パケット到着時刻ta_1とパケット到着時刻tb_1とを読み出す。
図6において、中継アプリRA$は、パケット到着時刻ta_1とパケット到着時刻tb_1と通知時刻tb_2と通知時刻Tb_1とを含む時刻情報パケットTPを、情報処理装置101#の計測アプリMA#に送信する。
ここで、図9を用いて、時刻情報パケットTPのデータ構造例について説明する。
図9は、時刻情報パケットTPのデータ構造例を示す説明図である。図9において、時刻情報パケットTPは、IPヘッダ910と、ペイロード920とを含む。各種時刻情報(ta_1,tb_1,tb_2,Tb_1)は、時刻情報パケットTPのペイロード920に格納される。
図7において、計測アプリMA#は、時刻情報パケットTPを受信すると、パケット到着時刻ta_2とパケット到着時刻Ta_1とをOS#から取得する。パケット到着時刻ta_2は、上述したタイマ時刻4に対応する。パケット到着時刻Ta_1は、上述したカレンダ時刻2に対応する。
また、計測アプリMA#は、受信した時刻情報パケットTPから、パケット到着時刻ta_1とパケット到着時刻tb_1と通知時刻tb_2と通知時刻Tb_1とを読み出す。そして、計測アプリMA#は、各種時刻情報(ta_1,ta_2,tb_1,tb_2,Tb_1,Ta_1)に基づいて、情報処理装置101#から情報処理装置101$への通信時間(転送時間D1)を算出する。
具体的には、例えば、計測アプリMA#は、パケット到着時刻ta_2からパケット到着時刻ta_1を減算して、RTTを算出する。RTTは、パケットPを送信(すなわち、パケット加工モジュールpm#がパケットPを受信)してから、計測アプリMA#が時刻情報パケットTPを受信するまでの全ての処理にかかった時間に相当する。
また、計測アプリMA#は、通知時刻tb_2からパケット到着時刻tb_1を減算して、転送時間D2を算出する。転送時間D2は、OS$内部の処理にかかった時間に相当する。また、計測アプリMA#は、パケット到着時刻Ta_1から通知時刻Tb_1を減算して、転送時間D3を算出する。転送時間D3は、中継アプリRA$から計測アプリMA#への時刻情報パケットTPの転送にかかった時間に相当する。
そして、計測アプリMA#は、算出したRTTから、算出した転送時間D2と転送時間D3とを減算することにより、転送時間D1を算出する。これにより、パケットPの加工や読み取りを行う各モジュール(pm#,rm$)でタイマ情報しか取得できない環境であっても、ユーザアプリUA#,UA$に特別な仕組みを入れることなく、パケットPの伝送遅延を測定することができる。
(情報処理装置101のハードウェア構成例)
図10は、情報処理装置101のハードウェア構成例を示すブロック図である。図10において、情報処理装置101は、CPU1001と、メモリ1002と、ディスクドライブ1003と、ディスク1004と、通信I/F(Interface)1005と、可搬型記録媒体I/F1006と、可搬型記録媒体1007と、を有する。また、各構成部は、バス1000によってそれぞれ接続される。
ここで、CPU1001は、情報処理装置101の全体の制御を司る。CPU1001は、複数のコアを有していてもよい。メモリ1002は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMがOS(Operating System)のプログラムを記憶し、ROMがアプリケーションプログラムを記憶し、RAMがCPU1001のワークエリアとして使用される。メモリ1002に記憶されるプログラムは、CPU1001にロードされることで、コーディングされている処理をCPU1001に実行させる。
ディスクドライブ1003は、CPU1001の制御に従ってディスク1004に対するデータのリード/ライトを制御する。ディスク1004は、ディスクドライブ1003の制御で書き込まれたデータを記憶する。ディスク1004としては、例えば、磁気ディスク、光ディスクなどが挙げられる。
通信I/F1005は、通信回線を通じてネットワーク110に接続され、ネットワーク110を介して外部のコンピュータ(例えば、他の情報処理装置101)に接続される。そして、通信I/F1005は、ネットワーク110と装置内部とのインターフェースを司り、外部のコンピュータからのデータの入出力を制御する。
可搬型記録媒体I/F1006は、CPU1001の制御に従って可搬型記録媒体1007に対するデータのリード/ライトを制御する。可搬型記録媒体1007は、可搬型記録媒体I/F1006の制御で書き込まれたデータを記憶する。可搬型記録媒体1007としては、例えば、CD(Compact Disc)−ROM、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリなどが挙げられる。
なお、情報処理装置101は、上述した構成部のほかに、例えば、SSD(Solid State Drive)、入力装置、ディスプレイ等を有することにしてもよい。また、情報処理装置101は、上述した構成部のうち、例えば、ディスクドライブ1003、ディスク1004、可搬型記録媒体I/F1006、可搬型記録媒体1007を有していなくてもよい。
(情報処理装置101の機能的構成例)
図11は、情報処理装置101の機能的構成例を示すブロック図である。まず、情報処理装置101#の機能的構成例について説明する。情報処理装置101#は、装置間でやり取りされるパケットの伝送遅延を計測する側の情報処理装置101である。
図11において、情報処理装置101#は、第1の通信部1111と、計測部1112と、出力部1113と、を含む。具体的には、例えば、第1の通信部1111〜出力部1113は、情報処理装置101#のメモリ1002、ディスク1004、可搬型記録媒体1007などの記憶装置に記憶されたプログラムをCPU1001に実行させることにより、または、通信I/F1005により、その機能を実現する。各機能部の処理結果は、例えば、情報処理装置101#のメモリ1002、ディスク1004などの記憶装置に記憶される。
第1の通信部1111は、第1のパケットの送信時における第1のタイマ情報を第1のパケットに付加して送信する。ここで、第1のパケットは、情報処理装置101#から情報処理装置101$へのパケットである。例えば、第1のパケットは、コンテナC#上で動作するユーザアプリUA#から、コンテナC$上で動作するユーザアプリUA$へ送信されるパケットPである。
コンテナC#は、OS#で実行されているいずれかのコンテナである。また、コンテナC$は、OS$で実行されているいずれかのコンテナである。第1のタイマ情報は、第1のパケットの送信時におけるOS#(情報処理装置101#)が起動してからの経過時間を示す。例えば、第1のタイマ情報は、OS#ブート時からクロックの周期でカウントアップされ続けるタイマ値を示す情報であり、ナノ秒単位での経過時間を示す。
具体的には、例えば、第1の通信部1111は、パケットPを受信すると、パケット到着時刻ta_1をOS#から取得する。そして、第1の通信部1111は、パケットPのオプションヘッダに、パケット到着時刻ta_1を書き込んで転送する。より詳細に説明すると、例えば、第1の通信部1111は、図8に示したような、パケットPのタイムスタンプオプションヘッダ820に、パケット到着時刻ta_1を書き込む。第1の通信部1111は、例えば、図4に示したパケット加工モジュールpm#に相当する。
ただし、タイムスタンプオプションヘッダに記録可能な時刻情報が32bit整数の場合、ナノ秒単位の経過時間を完全に記録することができない。また、タイムスタンプオプションヘッダの時刻情報として、UTC0時からの経過時間(ミリ秒)を用いない場合には、先頭ビットを「1」にすることが定められている。
このため、第1の通信部1111は、例えば、OS#(カーネルK#)から取得する64bitの時刻(ナノ秒単位)から下31bitの時刻を抽出して、時刻情報として用いることにしてもよい。この場合、パケット到着時刻ta_1は、先頭ビット「1」と、ナノ秒単位の経過時間を示す64ビットのビット列のうちの下31ビットのビット列とによって表される。
計測部1112は、第2のパケットに含まれる第1のタイマ情報と第2のタイマ情報と第3のタイマ情報と第1の時刻情報と、第2のパケットの受信時における第4のタイマ情報と第2の時刻情報とに基づいて、情報処理装置101#から情報処理装置101$への通信時間を算出する。
ここで、第2のタイマ情報は、後述する第2の通信部1121が、第1のパケットを受信したときのOS$(情報処理装置101$)が起動してからの経過時間を示す。例えば、第2のタイマ情報は、OS$ブート時からクロックの周期でカウントアップされ続けるタイマ値を示す情報であり、ナノ秒単位での経過時間を示す。
第3のタイマ情報は、後述する中継部1122が、第1のタイマ情報と第2のタイマ情報とを含む通知情報を受信したときのOS$が起動してからの経過時間を示す。例えば、第3のタイマ情報は、ナノ秒単位での経過時間を示す。第1の時刻情報は、後述する中継部1122が、第1のタイマ情報と第2のタイマ情報とを含む通知情報を受信したときのOS$における時刻(カレンダ時刻)を示す。例えば、第1の時刻情報は、ナノ秒単位でのカレンダ時刻を示す。
第4のタイマ情報は、計測部1112が、第2のパケットを受信したときのOS#が起動してからの経過時間を示す。例えば、第4のタイマ情報は、ナノ秒単位での経過時間を示す。第2の時刻情報は、計測部1112が、第2のパケットを受信したときのOS#における時刻(カレンダ時刻)を示す。例えば、第2の時刻情報は、ナノ秒単位でのカレンダ時刻を示す。第2のパケットは、例えば、パケット到着時刻ta_1とパケット到着時刻tb_1と通知時刻tb_2と通知時刻Tb_1とを含む時刻情報パケットTPである。
なお、OS#における時刻(カレンダ時刻)と、OS$における時刻(カレンダ時刻)とは、同期しているものとする。ただし、OS#/OS$間のカレンダ時刻に、許容できる程度の誤差が含まれていてもよい。
つぎに、計測部1112は、第1のタイマ情報と第4のタイマ情報との時間差を示す第1の時間を算出する。また、計測部1112は、第2のタイマ情報と第3のタイマ情報との時間差を示す第2の時間を算出する。また、計測部1112は、第1の時刻情報と第2の時刻情報との時間差を示す第3の時間を算出する。そして、計測部1112は、算出した第1の時間から第2の時間と第3の時間とを減算することにより、情報処理装置101#から情報処理装置101$への通信時間を算出する。
具体的には、例えば、計測部1112は、時刻情報パケットTPを受信すると、パケット到着時刻ta_2とパケット到着時刻Ta_1とをOS#から取得する。また、計測部1112は、受信した時刻情報パケットTPのペイロード920(図9参照)から、パケット到着時刻ta_1とパケット到着時刻tb_1と通知時刻tb_2と通知時刻Tb_1とを読み出す。
つぎに、計測部1112は、パケット到着時刻ta_2からパケット到着時刻ta_1を減算して、RTT(第1の時間)を算出する。RTTは、パケットPを送信(すなわち、第1の通信部1111がパケットPを受信)してから、計測部1112が時刻情報パケットTPを受信するまでの全ての処理にかかった時間に相当する。
ただし、パケット到着時刻ta_1が、64bitの時刻(ナノ秒単位)のうち、下31bitの時刻を示す場合、計測部1112は、例えば、パケット到着時刻ta_2が示す64bitの時刻(ナノ秒単位)のうち、上位33bitは無視する。そして、計測部1112は、各パケット到着時刻ta_1,ta_2の下31bitの時刻から、RTTを算出する。これにより、2秒を超えない程度の通信時間であれば、上位33bitは同じ値であると仮定して、パケット到着時刻ta_1,ta_2間の時間差を計算することができる。
また、計測部1112は、通知時刻tb_2からパケット到着時刻tb_1を減算して、転送時間D2(第2の時間)を算出する。転送時間D2は、OS$内部の処理にかかった時間に相当する。また、計測部1112は、パケット到着時刻Ta_1から通知時刻Tb_1を減算して、転送時間D3(第3の時間)を算出する。転送時間D3は、中継アプリRA$から計測部1112の時刻情報パケットTPの転送にかかった時間に相当する。
そして、計測部1112は、算出したRTTから、算出した転送時間D2と転送時間D3とを減算することにより、転送時間D1を算出する。転送時間D1は、第1の通信部1111からパケットPが送信されてから、第2の通信部1121でパケットPを受信するまでの所要時間であり、情報処理装置101#から情報処理装置101$への通信時間(伝送遅延)を表す。計測部1112は、例えば、図4に示した計測アプリMA#に相当する。
出力部1113は、計測部1112によって算出された算出結果を出力する。具体的には、例えば、出力部1113は、ユーザアプリUA#,UA$と、算出された転送時間D1とを対応付けて表す伝送遅延情報を出力することにしてもよい。伝送遅延情報には、各ユーザアプリUA#,UA$が実行されているコンテナC#,C$を特定する情報が含まれていてもよい。
出力部1113の出力形式としては、例えば、メモリ1002、ディスク1004などの記憶装置への記憶、通信I/F1005による他のコンピュータへの送信、不図示のディスプレイへの表示、不図示のプリンタへの印刷出力などがある。他のコンピュータは、例えば、情報処理システム100内の不図示の管理者端末やユーザ端末などである。出力部1113は、例えば、図4に示した計測アプリMA#に相当する。
なお、情報処理装置101#は、例えば、情報処理装置101$上で動作する仮想マシンVMにより実現されることにしてもよい。この場合、OS#は、情報処理装置101$上で動作する仮想マシンVMのゲストOSとなる。
つぎに、情報処理装置101$の機能的構成例について説明する。
図11において、情報処理装置101$は、第2の通信部1121と、中継部1122と、を含む。具体的には、例えば、第2の通信部1121および中継部1122は、情報処理装置101$のメモリ1002、ディスク1004、可搬型記録媒体1007などの記憶装置に記憶されたプログラムをCPU1001に実行させることにより、または、通信I/F1005により、その機能を実現する。各機能部の処理結果は、例えば、情報処理装置101$のメモリ1002、ディスク1004などの記憶装置に記憶される。
第2の通信部1121は、第1のパケットを受信した場合、第1のパケットに含まれる第1のタイマ情報と、第1のパケットの受信時における第2のタイマ情報とを含む通知情報を、中継部1122に送信する。上述したように、第2のタイマ情報は、第2の通信部1121が、第1のパケットを受信したときのOS$が起動してからの経過時間を示す。
具体的には、例えば、第2の通信部1121は、パケットPを受信すると、パケット到着時刻tb_1をOS$から取得する。また、第2の通信部1121は、パケットPのタイムスタンプオプションヘッダ820(図8参照)から、パケット到着時刻ta_1を読み出す。つぎに、第2の通信部1121は、パケット到着時刻ta_1とパケット到着時刻tb_1とを含む通知メッセージm(図5参照)を生成する。
そして、第2の通信部1121は、生成した通知メッセージを中継アプリRA$に送信する。また、第2の通信部1121は、受信したパケットPをユーザアプリUA$に転送する。第2の通信部1121は、例えば、図4に示したパケット読み取りモジュールrm$に相当する。
中継部1122は、受信した通知情報に含まれる第1のタイマ情報と第2のタイマ情報と、通知情報の受信時における第3のタイマ情報と、通知情報の受信時における第1の時刻情報とを含む第2のパケットを、情報処理装置101#に送信する。上述したように、第3のタイマ情報は、中継部1122が、通知情報を受信したときのOS$が起動してからの経過時間を示す。また、第1の時刻情報は、中継部1122が、通知情報を受信したときのOS$における時刻(カレンダ時刻)を示す。
具体的には、例えば、中継部1122は、通知メッセージmを受信した場合、通知時刻tb_2と通知時刻Tb_1とをOS$から取得する。また、中継部1122は、受信した通知メッセージmから、パケット到着時刻ta_1とパケット到着時刻tb_1とを読み出す。つぎに、中継部1122は、パケット到着時刻ta_1とパケット到着時刻tb_1と通知時刻tb_2と通知時刻Tb_1とを含む時刻情報パケットTPを生成する。そして、中継部1122は、生成した時刻情報パケットTPを、情報処理装置101#の計測アプリMA#に送信する。中継部1122は、例えば、図4に示した中継アプリRA#に相当する。
なお、情報処理装置101$は、例えば、情報処理装置101#上で動作する仮想マシンVMにより実現されることにしてもよい。この場合、OS$は、情報処理装置101#上で動作する仮想マシンVMのゲストOSとなる。
(情報処理システム100の各種処理手順)
つぎに、図12〜図15を用いて、実施の形態1にかかる情報処理システム100の各種処理手順について説明する。まず、図12を用いて、情報処理装置101#のパケット加工モジュールpm#のパケット加工処理手順について説明する。
図12は、実施の形態1にかかるパケット加工モジュールpm#のパケット加工処理手順の一例を示すフローチャートである。図12のフローチャートにおいて、まず、パケット加工モジュールpm#は、パケットPを受信したか否かを判断する(ステップS1201)。パケットPは、コンテナC#上で動作するユーザアプリUA#から、コンテナC$上で動作するユーザアプリUA$へのパケットである。
ここで、パケット加工モジュールpm#は、パケットPを受信するのを待つ(ステップS1201:No)。そして、パケット加工モジュールpm#は、パケットPを受信した場合(ステップS1201:Yes)、パケット到着時刻ta_1をOS#から取得する(ステップS1202)。なお、ステップS1202の処理は、ステップS1205の直前に実行することにしてもよい。
つぎに、パケット加工モジュールpm#は、パケットPが計測対象パケットであるか否かを判断する(ステップS1203)。計測対象パケットとは、伝送遅延の計測対象となるパケットである。具体的には、例えば、パケット加工モジュールpm#は、パケットPのIPヘッダの情報(例えば、送信元IPアドレス、宛先IPアドレス、プロトコル種別)を参照して、計測対象パケットであるか否かを判断する。また、計測対象がTCPやUDPの場合は、パケット加工モジュールpm#は、パケットPのプロトコルヘッダの情報(例えば、ポート番号)を参照して、計測対象パケットであるか否かを判断する。なお、計測対象を識別するための情報(送信元IPアドレス、宛先IPアドレス、ポート番号等)は、例えば、パケット加工モジュールpm#に予め設定されている。
ここで、計測対象パケットではない場合(ステップS1203:No)、パケット加工モジュールpm#は、ステップS1206に移行する。一方、計測対象パケットの場合(ステップS1203:Yes)、パケット加工モジュールpm#は、パケットPにタイムスタンプオプションヘッダを付与する(ステップS1204)。
つぎに、パケット加工モジュールpm#は、取得したパケット到着時刻ta_1を、パケットPのタイムスタンプオプションヘッダに書き込む(ステップS1205)。この際、パケット加工モジュールpm#は、自モジュールを識別するID(例えば、32bit整数)を、パケットPのタイムスタンプオプションヘッダ(例えば、アドレス領域)にさらに書き込むことにしてもよい。
そして、パケット加工モジュールpm#は、パケットPを転送して(ステップS1206)、本フローチャートによる一連の処理を終了する。具体的には、例えば、パケット加工モジュールpm#は、カーネルK#のプロトコルスタックにパケットPの処理依頼を行う。プロトコルスタックは、コンピュータ上で通信を実現するための一連の通信プロトコル群を実装するモジュールである。
これにより、ユーザアプリUA#が動作するコンテナC#に対応するパケット加工モジュールpm#において、パケット到着時刻ta_1を取得して、パケットPのタイムスタンプオプションヘッダに書き込むことができる。
つぎに、図13を用いて、情報処理装置101$のパケット読み取りモジュールrm$のパケット読取処理手順について説明する。
図13は、実施の形態1にかかるパケット読み取りモジュールrm$のパケット読取処理手順の一例を示すフローチャートである。図13のフローチャートにおいて、まず、パケット読み取りモジュールrm$は、パケットPを受信したか否かを判断する(ステップS1301)。ここで、パケット読み取りモジュールrm$は、パケットPを受信するのを待つ(ステップS1301:No)。
そして、パケット読み取りモジュールrm$は、パケットPを受信した場合(ステップS1301:Yes)、パケット到着時刻tb_1をOS$から取得する(ステップS1302)。なお、ステップS1302の処理は、ステップS1305の直前に実行することにしてもよい。
つぎに、パケット読み取りモジュールrm$は、パケットPが計測対象パケットであるか否かを判断する(ステップS1303)。具体的には、例えば、パケット読み取りモジュールrm$は、パケットPにタイムスタンプオプションヘッダがある場合、計測対象パケットであると判断する。一方、タイムスタンプオプションヘッダがない場合、パケット加工モジュールpm#は、計測対象パケットではないと判断する。
ここで、計測対象パケットではない場合(ステップS1303:No)、パケット読み取りモジュールrm$は、ステップS1307に移行する。一方、計測対象パケットの場合(ステップS1303:Yes)、パケット読み取りモジュールrm$は、パケットPのタイムスタンプオプションヘッダから、パケット到着時刻ta_1を読み出す(ステップS1304)。
なお、パケットPのタイムスタンプオプションヘッダに、パケット加工モジュールpm#のIDが書き込まれている場合、パケット読み取りモジュールrm$は、パケットPのタイムスタンプオプションヘッダから当該IDをさらに読み出すことにしてもよい。
そして、パケット読み取りモジュールrm$は、読み出したパケット到着時刻ta_1と、取得したパケット到着時刻tb_1とを含む通知メッセージmを生成する(ステップS1305)。通知メッセージmには、パケット加工モジュールpm#のIDを含めることにしてもよい。
つぎに、パケット読み取りモジュールrm$は、生成した通知メッセージmを中継アプリRA$に送信する(ステップS1306)。そして、パケット読み取りモジュールrm$は、受信したパケットPをユーザアプリUA$に転送して(ステップS1307)、本フローチャートによる一連の処理を終了する。具体的には、例えば、パケット読み取りモジュールrm$は、カーネルK$のプロトコルスタックにパケットPの処理依頼を行う。
これにより、ユーザアプリUA$が動作するコンテナC$に対応するパケット読み取りモジュールrm$において、パケット到着時刻ta_1とパケット到着時刻tb_1とを取得して、中継アプリRA$に通知することができる。
つぎに、図14を用いて、情報処理装置101$の中継アプリRA$の時刻情報中継処理手順について説明する。
図14は、実施の形態1にかかる中継アプリRA$の時刻情報中継処理手順の一例を示すフローチャートである。図14のフローチャートにおいて、まず、中継アプリRA$は、通知メッセージmを受信したか否かを判断する(ステップS1401)。ここで、中継アプリRA$は、通知メッセージmを受信するのを待つ(ステップS1401:No)。
そして、中継アプリRA$は、通知メッセージmを受信した場合(ステップS1401:Yes)、通知時刻tb_2と通知時刻Tb_1とをOS$から取得する(ステップS1402)。つぎに、中継アプリRA$は、受信した通知メッセージmから、パケット到着時刻ta_1とパケット到着時刻tb_1とを読み出す(ステップS1403)。
なお、通知メッセージmに、パケット加工モジュールpm#のIDが含まれている場合、中継アプリRA$は、通知メッセージmから当該IDをさらに読み出すことにしてもよい。
中継アプリRA$は、パケット到着時刻ta_1とパケット到着時刻tb_1と通知時刻tb_2と通知時刻Tb_1とをペイロードに含む時刻情報パケットTPを生成する(ステップS1404)。時刻情報パケットTPには、パケット加工モジュールpm#のIDを含めることにしてもよい。
そして、中継アプリRA$は、生成した時刻情報パケットTPを情報処理装置101#の計測アプリMA#に送信して(ステップS1405)、本フローチャートによる一連の処理を終了する。
これにより、中継アプリRA$において、パケット到着時刻ta_1とパケット到着時刻tb_1と通知時刻tb_2と通知時刻Tb_1とを取得して、情報処理装置101#の計測アプリMA#に送信することができる。
つぎに、図15を用いて、情報処理装置101#の計測アプリMA#の通信時間算出処理手順について説明する。
図15は、実施の形態1にかかる計測アプリMA#の通信時間算出処理手順の一例を示すフローチャートである。図15のフローチャートにおいて、まず、計測アプリMA#は、時刻情報パケットTPを受信したか否かを判断する(ステップS1501)。ここで、計測アプリMA#は、時刻情報パケットTPを受信するのを待つ(ステップS1501:No)。
そして、計測アプリMA#は、時刻情報パケットTPを受信した場合(ステップS1501:Yes)、パケット到着時刻ta_2とパケット到着時刻Ta_1とをOS#から取得する(ステップS1502)。つぎに、計測アプリMA#は、受信した時刻情報パケットTPから、パケット到着時刻ta_1とパケット到着時刻tb_1と通知時刻tb_2と通知時刻Tb_1とを読み出す(ステップS1503)。
そして、計測アプリMA#は、パケット到着時刻ta_2からパケット到着時刻ta_1を減算して、RTTを算出する(ステップS1504)。つぎに、計測アプリMA#は、通知時刻tb_2からパケット到着時刻tb_1を減算して、受信側内部処理時間(転送時間D2)を算出する(ステップS1505)。
つぎに、計測アプリMA#は、パケット到着時刻Ta_1から通知時刻Tb_1を減算して、時刻情報返送時間(転送時間D3)を算出する(ステップS1506)。つぎに、計測アプリMA#は、算出したRTTから、算出した受信側内部処理時間と時刻情報返送時間とを減算することにより、伝送遅延時間(転送時間D1)を算出する(ステップS1507)。
そして、計測アプリMA#は、算出した伝送遅延時間を出力して(ステップS1508)、本フローチャートによる一連の処理を終了する。これにより、コンテナC#上で動作するユーザアプリUA#から、コンテナC$上で動作するユーザアプリUA$へ送信されるパケットPの伝送遅延時間を算出することができる。
なお、時刻情報パケットTPにパケット加工モジュールpm#のIDが含まれる場合には、当該IDからコンテナC#やユーザアプリUA#を特定することができる。コンテナC#やユーザアプリUA#の特定に、パケット加工モジュールpm#のIDを用いることで、パケットPの送信元/宛先アドレスなどを用いる場合に比べて、データ量を抑えることができる。
以上説明したように、実施の形態1にかかる情報処理システム100によれば、情報処理装置101#のパケット加工モジュールpm#は、パケットPの送信時におけるOS#が起動してからの経過時間を示す第1のタイマ情報(パケット到着時刻ta_1)を、パケットPに付加して送信することができる。パケットPは、コンテナC#上で動作するユーザアプリUA#から、コンテナC$上で動作するユーザアプリUA$へ送信されるユーザパケットである。パケット加工モジュールpm#は、コンテナC#とOS#との間の接続用の仮想NICに対応して設けられる、OS#のカーネルK#内の通信モジュールである。
これにより、情報処理装置#からパケットPが送信されるときのタイマ時刻(パケット到着時刻ta_1)を、時刻情報としてパケットPに記録することができる。
また、情報処理装置101$のパケット読み取りモジュールrm$は、受信したパケットPに含まれる第1のタイマ情報と、パケットPの受信時におけるOS$が起動してからの経過時間を示す第2のタイマ情報(パケット到着時刻tb_1)とを含む通知メッセージmを、情報処理装置101$の中継アプリRA$に送信することができる。パケット読み取りモジュールrm$は、コンテナC$とOS$との間の接続用の仮想NICに対応して設けられる、OS$のカーネルK$内の通信モジュールである。
これにより、タイマ時刻(パケット到着時刻ta_1)と、情報処理装置101$でパケットPが受信されたときのタイマ時刻(パケット到着時刻tb_1)とを、装置内部のメッセージ通信により、時刻情報として中継アプリRA$に通知することができる。
また、情報処理装置101$の中継アプリRA$は、通知メッセージmの受信時におけるOS$が起動してからの経過時間を示す第3のタイマ情報(通知時刻tb_2)と、通知メッセージmの受信時のOS$におけるカレンダ時刻を示す第1の時刻情報(通知時刻Tb_1)とを取得することができる。
これにより、情報処理装置101$内部で通知メッセージmが受信されたときのタイマ時刻(tb_2)およびカレンダ時刻(Tb_1)を、時刻情報として取得することができる。
また、情報処理装置101$の中継アプリRA$は、受信した通知メッセージmに含まれる第1のタイマ情報と第2のタイマ情報と、取得した第3のタイマ情報と第1の時刻情報とを含む時刻情報パケットTPを、情報処理装置101#の計測アプリMA#に送信することができる。
これにより、タイマ時刻(ta_1,tb_1,tb_2)およびカレンダ時刻(Tb_1)を、アプリ間のデータ通信により、情報処理装置101#の計測アプリMA#に時刻情報として通知することができる。
また、情報処理装置101#の計測アプリMA#は、時刻情報パケットTPの受信時におけるOS#が起動してからの起動時間を示す第4のタイマ情報(ta_2)と、時刻情報パケットTPの受信時のOS#におけるカレンダ時刻を示す第2の時刻情報(Ta_1)とを取得することができる。
これにより、情報処理装置101#で時刻情報パケットTPが受信されたときのタイマ時刻(ta_2)およびカレンダ時刻(Ta_1)を、時刻情報として取得することができる。
また、情報処理装置101#の計測アプリMA#は、各種時刻情報(ta_1,ta_2,tb_1,tb_2,Tb_1,Ta_1)に基づいて、情報処理装置101#から情報処理装置101$への通信時間を算出することができる。具体的には、例えば、計測アプリMA#は、パケット到着時刻ta_1とパケット到着時刻ta_2との時間差を示すRTT(第1の時間)を算出する。また、計測アプリMA#は、パケット到着時刻tb_1と通知時刻tb_2との時間差を示す転送時間D2(第2の時間)を算出する。また、計測アプリMA#は、通知時刻Tb_1とパケット到着時刻Ta_1との時間差を示す転送時間D3(第3の時間)を算出する。そして、計測アプリMA#は、算出したRTTから、算出した転送時間D2と転送時間D3とを減算することにより、情報処理装置101#から情報処理装置101$への通信時間を表す転送時間D1を算出する。
これにより、測定対象の通信を行うユーザアプリUA#,UA$に特別な仕組みを入れることなく、情報処理装置101#,101$間の通信にかかる時間(伝送遅延)を測定することができる。また、パケットの加工や読み取りを行うモジュール(パケット加工モジュールpm#、パケット読み取りモジュールrm$)がIPアドレスを持たず、タイマ時刻しか読み取れないような環境であっても、情報処理装置101#,101$間でやり取りされるパケットの伝送遅延を測定することができる。
また、情報処理装置101#のパケット加工モジュールpm#は、第1のタイマ情報(パケット到着時刻ta_1)を、パケットPのタイムスタンプオプションヘッダに書き込むことができる。
これにより、IPパケットの利用可能なオプションヘッダを用いて、情報処理装置#からパケットPが送信されるときのタイマ時刻(パケット到着時刻ta_1)を記録することができる。また、計測対象パケットを判別可能にすることができる。
また、パケット加工モジュールpm#は、第1のタイマ情報(パケット到着時刻ta_1)として、OS#が起動してからのナノ秒単位の経過時間を示す64ビットのビット列のうちの下31ビットのビット列をタイムスタンプオプションヘッダに書き込むことができる。
これにより、タイムスタンプオプションヘッダに記録可能な時刻情報が32bit整数の場合であっても、伝送遅延が2秒を超えない通信であれば、上位ビットの情報はある程度無視できることを利用して、ナノ秒単位の時刻を記録することができる。また、ナノ秒単位の時刻を記録可能なため、例えば、同一物理サーバ内の異なるOS上で稼働しているコンテナ間でやり取りされるパケットのように、伝送遅延が1ミリ秒未満となる通信であっても通信時間を測定することができる。
また、情報処理装置101#の計測アプリMA#は、算出した情報処理装置101#から情報処理装置101$への通信時間を出力することができる。具体的には、例えば、計測アプリMA#は、算出した通信時間(転送時間D1)を、ユーザアプリUA#,UA$と対応付けて出力する。
これにより、ユーザアプリUA#,UA$を実行するクラウドシステムの健全性を診断するための情報を提供することができる。
これらのことから、実施の形態1にかかる情報処理システム100によれば、異なるOS上で稼働しているコンテナ間でやり取りされるパケットの伝送遅延を測定することができる。これにより、クラウドシステムの健全性を診断するための情報を収集することが可能となり、QoS(Quality of Service)の向上につなげることができる。
(実施の形態2)
つぎに、実施の形態2にかかる通信時間算出方法について説明する。実施の形態2では、パケットPの装置間通信にトンネリングを用いる場合について説明する。なお、実施の形態1で説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。
図16は、実施の形態2にかかる通信時間算出方法の一実施例を示す説明図である。図16において、情報処理装置101#のハイパーバイザ1610上でゲストOS#−1が稼働している。また、ゲストOS#−1上でコンテナC#が実行されている。ゲストOS#−1のカーネル1620は、仮想NW1621と、仮想NIC1622と、を含む。
仮想NW1621は、情報処理装置101#内部の仮想的なネットワークである。仮想NIC1622は、コンテナC#とゲストOS#−1との間の接続用の仮想NICであり、コンテナC#用の仮想NIC1623と対向接続される。ゲストOS#−1のカーネル1620内には、仮想NIC1622に対応してパケット加工モジュールpm#が設けられている。
また、情報処理装置101$のハイパーバイザ1630上でゲストOS$−1が稼働している。また、ゲストOS$−1上でコンテナC$が実行されている。ゲストOS$−1のカーネル1640は、仮想NW1641と、仮想NIC1642と、を含む。
仮想NW1641は、情報処理装置101$内部の仮想的なネットワークである。仮想NIC1642は、コンテナC$とゲストOS$−1との間の接続用の仮想NICであり、コンテナC$用の仮想NIC1643と対向接続される。ゲストOS$−1のカーネル1640内には、仮想NIC1642に対応してパケット読み取りモジュールrm$が設けられている。
ここでは、トンネリング技術により、パケット加工モジュールpm#とパケット読み取りモジュールrm$との間にトンネル1600を確立する。パケット加工モジュールpm#は、トンネル1600を用いて、パケットPをトンネリングして、パケット読み取りモジュールrm$に送信する。
トンネリングとは、ネットワーク(例えば、ネットワーク110)を介して接続される2点間でパケットをカプセル化して通信を行うことである。カプセル化とは、元のパケットに新しいヘッダを付与し、元のパケットをデータ部とみなしたパケットを生成することである。
パケット加工モジュールpm#は、パケットPをカプセル化して新たなパケット(図16中、パケットPx)を生成することで、パケットP自体にオプションヘッダを付加するなどの加工を行うことなく、時刻情報(パケット到着時刻ta_1)を新たなパケットに格納することができる。
なお、図16では図示を省略したが、ゲストOS#−1のユーザ空間で計測アプリMA#が実行され、また、ゲストOS$−1のユーザ空間で中継アプリRA$が実行される。
ここで、図17を用いて、カプセル化されたパケットのデータ構造例について説明する。以下の説明では、パケットPをカプセル化して得られるパケットを「トンネリングパケット」と表記する場合がある。
図17は、カプセル化されたパケットのデータ構造例を示す説明図である。図17において、パケット1700は、パケットPをカプセル化して得られるパケットであり、IPヘッダ1710と、タイムスタンプオプションヘッダ1720と、プロトコルヘッダ1730と、ペイロード1740とを含む。
ペイロード1740には、パケットPが含まれる。すなわち、パケット1700は、元のパケットPに新しいヘッダ1710を付与し、元のパケットPをペイロード1740(データ部)とみなしたパケットである。時刻情報(パケット到着時刻ta_1)は、タイムスタンプオプションヘッダ1720に書き込まれる。
(情報処理システム100の各種処理手順)
つぎに、実施の形態2にかかる情報処理システム100の各種処理手順について説明する。まず、図18を用いて、情報処理装置101#のパケット加工モジュールpm#のパケット加工処理手順について説明する。
図18は、実施の形態2にかかるパケット加工モジュールpm#のパケット加工処理手順の一例を示すフローチャートである。図18のフローチャートにおいて、まず、パケット加工モジュールpm#は、パケットPを受信したか否かを判断する(ステップS1801)。
ここで、パケット加工モジュールpm#は、パケットPを受信するのを待つ(ステップS1801:No)。そして、パケット加工モジュールpm#は、パケットPを受信した場合(ステップS1801:Yes)、パケット到着時刻ta_1をOS#から取得する(ステップS1802)。なお、ステップS1802の処理は、ステップS1805の直前に実行することにしてもよい。
つぎに、パケット加工モジュールpm#は、パケットPがトンネリング対象パケットであるか否かを判断する(ステップS1803)。トンネリング対象パケットとは、伝送遅延の計測対象となるパケットである。具体的には、例えば、パケット加工モジュールpm#は、パケットPのIPヘッダやプロトコルヘッダの情報を参照して、トンネリング対象パケットであるか否かを判断する。
ここで、トンネリング対象パケットではない場合(ステップS1803:No)、パケット加工モジュールpm#は、ステップS1806に移行する。一方、トンネリング対象パケットの場合(ステップS1803:Yes)、パケット加工モジュールpm#は、パケットPをカプセリングしてタイムスタンプオプションヘッダを付与する(ステップS1804)。
つぎに、パケット加工モジュールpm#は、取得したパケット到着時刻ta_1を、パケットPをカプセリングして得られたパケットのタイムスタンプオプションヘッダに書き込む(ステップS1805)。この際、パケット加工モジュールpm#は、自モジュールを識別するIDを、パケットPのタイムスタンプオプションヘッダにさらに書き込むことにしてもよい。
そして、パケット加工モジュールpm#は、カプセル化されたパケット、または、パケットPを転送して(ステップS1806)、本フローチャートによる一連の処理を終了する。
これにより、パケット加工モジュールpm#において、パケットPをカプセリングし、カプセル化されたパケット(パケットPをデータ部とするパケット)のタイムスタンプオプションヘッダに、パケット到着時刻ta_1を書き込むことができる。
つぎに、図19を用いて、情報処理装置101$のパケット読み取りモジュールrm$のパケット読取処理手順について説明する。
図19は、実施の形態2にかかるパケット読み取りモジュールrm$のパケット読取処理手順の一例を示すフローチャートである。図19のフローチャートにおいて、まず、パケット読み取りモジュールrm$は、パケットを受信したか否かを判断する(ステップS1901)。ここで、パケット読み取りモジュールrm$は、パケットを受信するのを待つ(ステップS1901:No)。
そして、パケット読み取りモジュールrm$は、パケットを受信した場合(ステップS1901:Yes)、パケット到着時刻tb_1をOS$から取得する(ステップS1902)。なお、ステップS1902の処理は、ステップS1905の直前に実行することにしてもよい。
つぎに、パケット読み取りモジュールrm$は、受信したパケットがカプセル化されたパケットであるか否かを判断する(ステップS1903)。具体的には、例えば、パケット読み取りモジュールrm$は、パケットのIPヘッダのプロトコル番号を参照して、カプセル化されたパケットであるか否かを判断する。一例としては、プロトコル番号がGRE(Generic Routing Encapsulation)の番号の場合に、パケット読み取りモジュールrm$は、カプセル化されたパケットであると判断する。
ここで、カプセル化されたパケットではない場合(ステップS1903:No)、パケット読み取りモジュールrm$は、ステップS1908に移行する。一方、カプセル化されたパケットの場合(ステップS1903:Yes)、パケット読み取りモジュールrm$は、カプセル化されたパケットのタイムスタンプオプションヘッダから、パケット到着時刻ta_1を読み出す(ステップS1904)。
なお、カプセル化されたパケットのタイムスタンプオプションヘッダに、パケット加工モジュールpm#のIDが書き込まれている場合、パケット読み取りモジュールrm$は、タイムスタンプオプションヘッダから当該IDをさらに読み出すことにしてもよい。
そして、パケット読み取りモジュールrm$は、読み出したパケット到着時刻ta_1と、取得したパケット到着時刻tb_1とを含む通知メッセージmを生成する(ステップS1905)。通知メッセージmには、パケット加工モジュールpm#のIDを含めることにしてもよい。
つぎに、パケット読み取りモジュールrm$は、生成した通知メッセージmを中継アプリRA$に送信する(ステップS1906)。つぎに、パケット読み取りモジュールrm$は、カプセル化されたパケットから中身(データ部)のパケットPを取り出す(ステップS1907)。
そして、パケット読み取りモジュールrm$は、受信したパケットP(カプセル化されていないパケット)、または、取り出したパケットPをユーザアプリUA$に転送して(ステップS1908)、本フローチャートによる一連の処理を終了する。
これにより、パケット読み取りモジュールrm$において、パケット到着時刻ta_1とパケット到着時刻tb_1とを取得して、中継アプリRA$に通知することができる。
なお、中継アプリRA$の時刻情報中継処理手順については、実施の形態1にかかる中継アプリRA$の時刻情報中継処理手順(図14参照)と同様のため、図示および説明を省略する。また、計測アプリMA#の通信時間算出処理手順については、実施の形態1にかかる計測アプリMA#の通信時間算出処理手順(図15参照)と同様のため、図示および説明を省略する。
以上説明したように、実施の形態2にかかる情報処理システム100によれば、パケットPをカプセル化して得られるパケットにタイムオプションヘッダを付加して、時刻情報(パケット到着時刻ta_1)を格納することができる。これにより、パケットP自体にオプションヘッダを付加するなどの加工を行うことなく、パケットPの伝送遅延を測定することが可能となる。
(実施の形態3)
つぎに、実施の形態3にかかる通信時間算出方法について説明する。実施の形態3では、中継アプリRA$において、複数のパケットPそれぞれについての時刻情報を蓄積し、複数のパケットPの時刻情報をまとめて計測アプリMA#に送信する場合について説明する。なお、実施の形態1,2で説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。
図20は、実施の形態3にかかる通信時間算出方法の一実施例を示す説明図である。図20において、中継アプリRA$は、バッファ2010を有する。バッファ2010は、各パケットPについての時刻情報(ta_1,tb_1,tb_2,Tb_1)を記憶する記憶部である。
中継アプリRA$は、パケット読み取りモジュールrm$から通知メッセージmを受信する度に、時刻情報(ta_1,tb_1,tb_2,Tb_1)をバッファ2010に蓄積する。時刻情報(ta_1,tb_1,tb_2,Tb_1)は、パケット到着時刻ta_1とパケット到着時刻tb_1と通知時刻tb_2と通知時刻Tb_1とを含む組合せデータである。
パケット到着時刻ta_1とパケット到着時刻tb_1とは、パケット読み取りモジュールrm$から受信した通知メッセージmに含まれる。通知時刻tb_2は、中継アプリRA$が通知メッセージmを受信したときのOS$が起動してからの経過時間を示す。通知時刻Tb_1とは、中継アプリRA$が通知メッセージmを受信したときのOS$における時刻(カレンダ時刻)を示す。
中継アプリRA$は、バッファ2010に所定数の時刻情報(ta_1,tb_1,tb_2,Tb_1)が蓄積された場合、所定数の時刻情報(ta_1,tb_1,tb_2,Tb_1)を含む時刻情報集約パケット2000(第3のパケット)を、情報処理装置101#の計測アプリMA#に送信する。
ここで、図21を用いて、時刻情報集約パケット2000のデータ構造例について説明する。
図21は、時刻情報集約パケット2000のデータ構造例を示す説明図である。図21において、時刻情報集約パケット2000は、IPヘッダ2110と、TCPヘッダ2120と、ペイロード2130とを含む。ペイロード2130には、時刻情報リスト2131が格納される。
時刻情報リスト2131は、時刻情報2131−1〜2131−nを含む(nは、2以上の自然数)。各時刻情報2131−1〜2131−nは、パケット到着時刻ta_1とパケット到着時刻tb_1と通知時刻tb_2と通知時刻Tb_1とを含む組合せデータである。
例えば、時刻情報2131−1のパケット到着時刻ta_1は、「ta_1_1」である。時刻情報2131−1のパケット到着時刻tb_1は、「tb_1_1」である。時刻情報2131−1の通知時刻tb_2は、「tb_2_1」である。時刻情報2131−1の通知時刻Tb_1は、「Tb_1_1」である。
情報処理装置101#の計測アプリMA#は、時刻情報集約パケット2000を受信した場合、時刻情報集約パケット2000に含まれる時刻情報ごとに、情報処理装置101#から情報処理装置101$への通信時間を算出する。
具体的には、例えば、計測アプリMA#は、時刻情報ごとに、当該時刻情報と、パケット到着時刻ta_2’と、パケット到着時刻Ta_1’とに基づいて、コンテナC#,C$間で送受信されたパケットPの伝送遅延時間を算出する。
ここで、パケット到着時刻ta_2’は、計測アプリMA#が、時刻情報集約パケット2000を受信したときのOS#が起動してからの経過時間を示すタイマ情報(第5のタイマ情報)である。パケット到着時刻Ta_1’は、計測アプリMA#が、時刻情報集約パケット2000を受信したときのOS#における時刻(カレンダ時刻)を示す時刻情報(第3の時刻情報)である。
より詳細に説明すると、例えば、計測アプリMA#は、時刻情報集約パケット2000を受信すると、パケット到着時刻ta_2’とパケット到着時刻Ta_1’とをOS#から取得する。また、計測アプリMA#は、受信した時刻情報集約パケット2000のペイロード2130(図21参照)から、時刻情報リスト2131を読み出す。
つぎに、計測アプリMA#は、時刻情報リスト2131の時刻情報2131−iを参照して、パケット到着時刻ta_1_iとパケット到着時刻tb_1_iと通知時刻tb_2_iと通知時刻Tb_1_iとを特定する(i=1,2,…,n)。そして、計測アプリMA#は、パケット到着時刻ta_2’からパケット到着時刻ta_1_iを減算して、RTT_iを算出する。
また、計測アプリMA#は、通知時刻tb_2_iからパケット到着時刻tb_1_iを減算して、転送時間D2_iを算出する。また、計測アプリMA#は、パケット到着時刻Ta_1’から通知時刻Tb_1_iを減算して、転送時間D3_iを算出する。そして、計測アプリMA#は、算出したRTT_iから、算出した転送時間D2_iと転送時間D3_iとを減算することにより、転送時間D1_iを算出する。
転送時間D1_iは、時刻情報リスト2131内の時刻情報2131−1〜2131−nのうちの時刻情報2131−iに対応する、情報処理装置101#から情報処理装置101$への通信時間(コンテナC#,C$間の伝送遅延時間)を表す。
計測アプリMA#は、例えば、時刻情報リスト2131内の各時刻情報2131−1〜2131−nについて、各転送時間D1_1〜D1_nを算出する。そして、計測アプリMA#は、例えば、算出した各転送時間D1_1〜D1_nを含む伝送遅延リストを出力する。
ここで、図22を用いて、伝送遅延リストの具体例について説明する。
図22は、伝送遅延リストの具体例を示す説明図である。図22において、伝送遅延リスト2200は、伝送遅延時間D1_1〜D1_nを含む。各伝送遅延時間D1_1〜D1_nは、各転送時間D1_1〜D1_nに対応する。
伝送遅延リスト2200によれば、例えば、コンテナC#,C$間の伝送遅延時間を統計的に解析して、伝送遅延時間の移動平均や加重移動平均などを得ることができる。なお、図示は省略するが、伝送遅延リスト2200には、例えば、ユーザアプリUA#,UA$やコンテナC#,C$を特定する情報が含まれていてもよい。
(情報処理システム100の各種処理手順)
つぎに、実施の形態3にかかる情報処理システム100の各種処理手順について説明する。まず、図23を用いて、情報処理装置101$の中継アプリRA$の時刻情報中継処理手順について説明する。
図23は、実施の形態3にかかる中継アプリRA$の時刻情報中継処理手順の一例を示すフローチャートである。図23のフローチャートにおいて、まず、中継アプリRA$は、通知メッセージmを受信したか否かを判断する(ステップS2301)。ここで、中継アプリRA$は、通知メッセージmを受信するのを待つ(ステップS2301:No)。
そして、中継アプリRA$は、通知メッセージmを受信した場合(ステップS2301:Yes)、通知時刻tb_2と通知時刻Tb_1とをOS$から取得する(ステップS2302)。つぎに、中継アプリRA$は、受信した通知メッセージmから、パケット到着時刻ta_1とパケット到着時刻tb_1とを読み出す(ステップS2303)。
なお、通知メッセージmに、パケット加工モジュールpm#のIDが含まれている場合、中継アプリRA$は、通知メッセージmから当該IDをさらに読み出すことにしてもよい。
中継アプリRA$は、パケット到着時刻ta_1とパケット到着時刻tb_1と通知時刻tb_2と通知時刻Tb_1とを含む時刻情報をバッファ2010に蓄積する(ステップS2304)。つぎに、中継アプリRA$は、バッファ2010の蓄積量が上限に達したか否かを判断する(ステップS2305)。例えば、中継アプリRA$は、バッファ2010のn個の時刻情報が蓄積された場合に、バッファ2010の蓄積量が上限に達したと判断する。
ここで、バッファ2010の蓄積量が上限に達していない場合(ステップS2305:No)、中継アプリRA$は、本フローチャートによる一連の処理を終了する。
一方、バッファ2010の蓄積量が上限に達した場合(ステップS2305:Yes)、中継アプリRA$は、バッファ2010に蓄積された全時刻情報(時刻情報リスト)をペイロードに含む時刻情報集約パケットを生成する(ステップS2306)。
つぎに、中継アプリRA$は、生成した時刻情報集約パケットを情報処理装置101#の計測アプリMA#に送信する(ステップS2307)。そして、中継アプリRA$は、バッファ2010を空にして(ステップS2308)、本フローチャートによる一連の処理を終了する。
これにより、中継アプリRA$において、時刻情報(ta_1,tb_1,tb_2,Tb_1)をバッファ2010に蓄積することができる。また、バッファ2010の蓄積量が上限に達したら、バッファ2010内の全時刻情報をまとめて、中継アプリRA$から計測アプリMA#に送信することができる。
つぎに、図24および図25を用いて、情報処理装置101#の計測アプリMA#の通信時間算出処理手順について説明する。
図24および図25は、実施の形態3にかかる計測アプリMA#の通信時間算出処理手順の一例を示すフローチャートである。図24のフローチャートにおいて、まず、計測アプリMA#は、時刻情報集約パケットを受信したか否かを判断する(ステップS2401)。ここで、計測アプリMA#は、時刻情報集約パケットを受信するのを待つ(ステップS2401:No)。
そして、計測アプリMA#は、時刻情報集約パケットを受信した場合(ステップS2401:Yes)、パケット到着時刻ta_2’とパケット到着時刻Ta_1’とをOS#から取得する(ステップS2402)。つぎに、計測アプリMA#は、受信した時刻情報集約パケットのペイロードから、時刻情報リストを読み出す(ステップS2403)。
そして、計測アプリMA#は、「i=1」として(ステップS2404)、時刻情報リストからi番目の時刻情報を選択する(ステップS2405)。つぎに、計測アプリMA#は、選択した時刻情報を参照して、パケット到着時刻ta_1_iとパケット到着時刻tb_1_iと通知時刻tb_2_iと通知時刻Tb_1_iとを特定する(ステップS2406)。
つぎに、計測アプリMA#は、パケット到着時刻ta_2’からパケット到着時刻ta_1_iを減算して、RTT_iを算出する(ステップS2407)。つぎに、計測アプリMA#は、通知時刻tb_2_iからパケット到着時刻tb_1_iを減算して、転送時間D2_iを算出する(ステップS2408)。
つぎに、計測アプリMA#は、パケット到着時刻Ta_1’から通知時刻Tb_1_iを減算して、転送時間D3_iを算出し(ステップS2409)、図25に示すステップS2501に移行する。
図25のフローチャートにおいて、まず、計測アプリMA#は、算出したRTT_iから、算出した転送時間D2_iと転送時間D3_iとを減算することにより、転送時間D1_iを算出する(ステップS2501)。つぎに、計測アプリMA#は、iをインクリメントして(ステップS2502)、iがn以上となったか否かを判断する(ステップS2503)。
ここで、iがn未満の場合(ステップS2503:No)、計測アプリMA#は、図24に示したステップS2405に戻る。一方、iがn以上の場合(ステップS2503:Yes)、計測アプリMA#は、算出した転送時間D1_1〜D1_nを含む伝送遅延リストを作成する(ステップS2504)。
そして、計測アプリMA#は、算出した伝送遅延リストを出力して(ステップS2505)、本フローチャートによる一連の処理を終了する。これにより、時刻情報集約パケットに含まれる時刻情報内の各時刻情報に対応する伝送遅延時間を出力することができる。
なお、パケット加工モジュールpm#のパケット加工処理手順については、実施の形態1または2にかかるパケット加工モジュールpm#のパケット加工処理手順(図12または図18参照)と同様のため、図示および説明を省略する。また、パケット読み取りモジュールrm$のパケット読取処理手順については、実施の形態1,2にかかるパケット読み取りモジュールrm$のパケット読取処理手順(図13または図19参照)と同様のため、図示および説明を省略する。
以上説明したように、実施の形態3にかかる情報処理システム100によれば、中継アプリRA$において、複数のパケットPそれぞれについての時刻情報を蓄積し、複数のパケットPの時刻情報をまとめて計測アプリMA#に送信することができる。これにより、中継アプリRA$から計測アプリMA#に対して、パケットPごとに時刻情報パケットTPを送信する場合に比べて、通信データ量を抑えることができる。
なお、本実施の形態で説明した通信時間算出方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本通信時間算出プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、DVD、USBメモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本通信時間算出プログラムは、インターネット等のネットワークを介して配布してもよい。
また、本実施の形態で説明した情報処理装置101#、101$は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けICやFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)第1の装置と第2の装置との間の通信時間を算出する通信時間算出方法であって、
前記第1の装置が、前記第2の装置への第1のパケットの送信時における前記第1の装置が起動してからの経過時間を示す第1のタイマ情報を前記第1のパケットに付加して送信し、
前記第2の装置の通信モジュールが、受信した前記第1のパケットに含まれる前記第1のタイマ情報と、前記第1のパケットの受信時における前記第2の装置が起動してからの経過時間を示す第2のタイマ情報とを含む通知情報を、前記第2の装置の中継モジュールに送信し、
前記第2の装置の中継モジュールが、受信した前記通知情報に含まれる前記第1のタイマ情報と前記第2のタイマ情報と、前記通知情報の受信時における前記第2の装置が起動してからの経過時間を示す第3のタイマ情報と、前記通知情報の受信時の前記第2の装置における時刻を示す第1の時刻情報とを含む第2のパケットを、前記第1の装置に送信し、
前記第1の装置が、受信した前記第2のパケットに含まれる前記第1のタイマ情報と前記第2のタイマ情報と前記第3のタイマ情報と前記第1の時刻情報と、前記第2のパケットの受信時における前記第1の装置が起動してからの経過時間を示す第4のタイマ情報と、前記第2のパケットの受信時の前記第1の装置における時刻を示す第2の時刻情報とに基づいて、前記第1の装置から前記第2の装置への通信時間を算出する、
ことを特徴とする通信時間算出方法。
(付記2)前記第1の装置が、
前記第1のタイマ情報と前記第4のタイマ情報との時間差を示す第1の時間を算出し、
前記第2のタイマ情報と前記第3のタイマ情報との時間差を示す第2の時間を算出し、
第1の時刻情報と前記第2の時刻情報との時間差を示す第3の時間を算出し、
算出した前記第1の時間から前記第2の時間と前記第3の時間とを減算することにより、前記第1の装置から前記第2の装置への通信時間を算出する、
ことを特徴とする付記1に記載の通信時間算出方法。
(付記3)前記第1のタイマ情報は、前記第1のパケットのオプションヘッダに書き込まれる、ことを特徴とする付記1または2に記載の通信時間算出方法。
(付記4)前記第1のタイマ情報は、ナノ秒単位の経過時間を示す64ビットのビット列のうちの下31ビットのビット列によって表される、ことを特徴とする付記3に記載の通信時間算出方法。
(付記5)前記第1のタイマ情報は、前記第1のパケットをカプセル化して得られるパケットのオプションヘッダに書き込まれる、ことを特徴とする付記1〜4のいずれか一つに記載の通信時間算出方法。
(付記6)前記第2の装置の中継モジュールは、
前記第2の装置の通信モジュールから前記通知情報を受信する度に、受信した前記通知情報に含まれる前記第1のタイマ情報と前記第2のタイマ情報と、前記通知情報の受信時における前記第2の装置が起動してからの経過時間を示す第3のタイマ情報と、前記通知情報の受信時における前記第2の装置における時刻を示す第1の時刻情報とを含む組合せデータを記憶部に蓄積し、
前記記憶部に所定数の組合せデータが蓄積された場合、前記所定数の組合せデータを含む第3のパケットを、前記第1の装置に送信し、
前記第1の装置は、
前記第3のパケットを受信した場合、前記第3のパケットに含まれる組合せデータごとに、前記組合せデータと、前記第3のパケットの受信時における前記第1の装置が起動してからの経過時間を示す第5のタイマ情報と、前記第3のパケットの受信時の前記第1の装置における時刻を示す第3の時刻情報とに基づいて、前記第1の装置から前記第2の装置への通信時間を算出する、ことを特徴とする付記1〜5のいずれか一つに記載の通信時間算出方法。
(付記7)前記第1の装置が、算出した前記通信時間を出力する、ことを特徴とする付記1〜6のいずれか一つに記載の通信時間算出方法。
(付記8)前記第1のパケットは、前記第1の装置の第1のOSで実行されている第1のコンテナ上で動作するアプリケーションから、前記第2の装置の第2のOSで実行されている第2のコンテナ上で動作するアプリケーションへ送信されるパケットである、ことを特徴とする付記1〜7のいずれか一つに記載の通信時間算出方法。
(付記9)前記第1のタイマ情報は、前記第1のコンテナと前記第1のOSとの間の接続用の仮想NICに対応して設けられる、前記第1のOSのカーネル内の通信モジュールにより、前記第1のパケットに付加され、
前記第2の装置の通信モジュールは、前記第2のコンテナと前記第2のOSとの間の接続用の仮想NICに対応して設けられる、前記第2のOSのカーネル内のモジュールである、ことを特徴とする付記8に記載の通信時間算出方法。
(付記10)第1の装置と第2の装置との間の通信時間を算出する通信時間算出プログラムであって、
前記第1の装置に、
前記第2の装置への第1のパケットの送信時における前記第1の装置が起動してからの経過時間を示す第1のタイマ情報を前記第1のパケットに付加して送信し、
前記第2の装置の中継モジュールから、前記第2の装置の通信モジュールが受信した前記第1のパケットに含まれる前記第1のタイマ情報と、前記第2の装置の通信モジュールが前記第1のパケットを受信したときの前記第2の装置が起動してからの経過時間を示す第2のタイマ情報と、前記第2の装置の中継モジュールが前記第2の装置の通信モジュールから前記第1のタイマ情報および前記第2のタイマ情報を受信したときの、前記第2の装置が起動してからの経過時間を示す第3のタイマ情報および前記第2の装置における時刻を示す第1の時刻情報とを含む第2のパケットを受信し、
受信した前記第2のパケットに含まれる前記第1のタイマ情報と前記第2のタイマ情報と前記第3のタイマ情報と前記第1の時刻情報と、前記第2のパケットの受信時における前記第1の装置が起動してからの経過時間を示す第4のタイマ情報と、前記第2のパケットの受信時における前記第1の装置における時刻を示す第2の時刻情報とに基づいて、前記第1の装置から前記第2の装置への通信時間を算出する、
処理を実行させることを特徴とする通信時間算出プログラム。