以下、図面に基づいて本発明の実施の形態を説明する。図3は、本発明の実施の形態におけるネットワーク構成例を示す図である。
同図において、クライアント装置20と実動系サーバ30aとは、ネットワークn1を介して通信可能に接続されている。実動系サーバ30aは、例えば、実際に稼動している現用系のコンピュータである。クライアント装置20は、実動系サーバ30aに対して処理要求を行うコンピュータである。
TAP40は、ネットワークn1を流れる信号を試験装置10に分岐させる装置(ネットワーク・タップ)である。
試験装置10は、検証系サーバ30bの性能評価試験のための処理を実行するコンピュータである。試験装置10は、TAP40によって分岐される信号を監視することにより、ネットワークn1において、クライアント装置20と実動系サーバ30aとの間でやりとりされるパケットをキャプチャする。試験装置10は、キャプチャされたパケットを利用して、検証系サーバ30bに関する性能評価試験のための処理を実行する。
検証系サーバ30bは、実動系サーバ30aから移行予定のコンピュータであり、本実施の形態において、性能評価試験の対象とされる。検証系サーバ30bは、基本的に、実動系サーバ30aと同じ機能を有する。同一機能に関して、実動系サーバ30aに対する相対的な性能が評価対象とされるからである。
なお、本実施の形態において、試験装置10、クライアント装置20、及び実動系サーバ30aは、大阪に配置されていることとする。検証系サーバ30bは、東京に配置されていることとする。斯かる配置関係は、検証系サーバ30bと試験装置10との距離は、実動系サーバ30aとクライアント装置20との距離に対して必ずしも一致しないことを示すための便宜的なものである。
また、以下において、クライアント装置20と実動系サーバ30aとが構成するシステム系を「実動系」という。試験装置10と検証系サーバ30bとが構成するシステム系を「検証系」という。
図4は、本発明の実施の形態における試験装置のハードウェア構成例を示す図である。図4の試験装置10は、それぞれバスBで相互に接続されているドライブ装置100と、補助記憶装置102と、メモリ装置103と、CPU104と、インタフェース装置105とを有する。
試験装置10での処理を実現するプログラムは、例えば、記録媒体101によって提供される。プログラムを記録した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、メモリ装置103に格納されたプログラムに従って試験装置10に係る機能を実行する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。
なお、記録媒体101の一例としては、CD−ROM、DVDディスク、又はUSBメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置102の一例としては、HDD(Hard Disk Drive)又はフラッシュメモリ等が挙げられる。記録媒体101及び補助記憶装置102のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
図5は、本発明の実施の形態における基本的な処理内容を説明するための図である。
同図において、クライアント装置20は、実動系サーバ30aへの上り方向のACKパケットPa1、Pb2、及びPa3を順番に送信している。ACKパケットPa1、Pb2、Pa3のぞれぞれは、試験装置10によって、時刻T1、時刻T2、時刻T3のタイミングでキャプチャされている。試験装置10は、キャプチャしたACKパケットの内容と、キャプチャした時刻とを関連付けて記憶しておく。以下、記憶されたデータを「キャプチャデータ」という。
また、実動系サーバ30aは、クライアント装置20への下りのパケットPc1、Pc2、Pc3、Pc4、Pc5、及びPc6を順番に送信している。これらの下りのパケットに関しても、試験装置10によってキャプチャされる。試験装置10は、キャプチャしたパケットの内容と、キャプチャした時刻とを関連付けてキャプチャデータとして記憶しておく。
試験装置10は、キャプチャデータに含まれるパケットのデータ(IPアドレス等)に関して、検証系に適合するように変換を行い、上り方向のパケットの通信履歴を再現させることにより、検証系サーバ30bに関する性能評価のための試験を行う。具体的には、試験装置10は、ACKパケットPb1、Pb2、及びPb3を、それぞれ、時刻T1+Toffset、時刻T2+Toffset、時刻T3+Toffsetに、検証系サーバ30b宛に送信する。ここで、Toffsetは、試験の開始時刻である。なお、試験装置10は、上り方向のパケットに対する応答パケットの受信は待機しない。したがって、ACKパケットPb1、Pb2、及びPb3の時間間隔は、ACKパケットPa1、Pb2、及びPa3の時間間隔と一致させることができる。なお、ACKパケットPb1、Pb2、Pb3は、それぞれ、ACKパケットPa1、Pb2、Pa3に対応するパケットである。
検証系においては、各パケットのACK番号(確認応答番号)及びシーケンス番号の相対的な関係についても、実動系においてキャプチャされた関係が維持される。相対的な関係とは、具体的には、ACK番号及びシーケンス番号の間隔である。同図では、実動系の各パケットのACK番号及びシーケンス番号に対して、10000が加算され値が、検証系において対応する各パケットのACK番号又はシーケンス番号とされている。
検証系における各上り方向のパケットの時間間隔を、実動系において対応する各パケットの時間間隔に一致させることで、検証系サーバ30bは、実動系サーバ30aと同じ時間間隔で同様のパケットが受信する。その結果、検証系サーバ30bに対して、実動系サーバ30aと同一の負荷を与えることができる。すなわち、検証系サーバ30bが遠隔地に設置されていることの試験への影響を吸収することができる。
また、下り方向のパケットの時間間隔についても、検証系サーバ30bが遠隔地に設置されていることの影響を吸収することができる。すなわち、検証系サーバ30bの挙動が、実動系サーバ30aと完全に同じである場合、検証系サーバ30bが送信する下り方向のパケットPt1、Pt2、Pt3、Pt4、Pt5、及びPt6の時間間隔は、実動系サーバ30aが送信する下り方向のパケットの時間間隔と一致するはずである。一方、検証系サーバ30bの挙動が、実動系サーバ30aと異なる場合、検証系サーバ30bが送信する下り方向のパケットの時間間隔は、実動系サーバ30aが送信する下り方向のパケットの時間間隔と異なるはずである。
したがって、例えば、検証系における下り方向のパケットの時間間隔を、実動系における下り方向のパケットの時間間隔と比較することにより、検証系サーバ30bについて、実動系サーバ30aと同一負荷に基づく性能評価を行うことができる。当該性能評価は、実動系サーバ30aに対する相対的なものである。
なお、同図では、上り方向のパケットの送信元が試験装置10に変換された例が示されている。そのため、検証系サーバ30bから送信される下り方向のパケットは、試験装置10宛となっている。但し、上り方向のパケットの送信元は、クライアント装置20のままであってもよい。この場合、試験装置10は、検証系サーバ30bからの下り方向のパケットをキャプチャして、その履歴を記憶すればよい。
図5に示される試験方法によれば、検証系サーバ30bが遠隔地に配置されている問題を解消することができる。しかし、実動系サーバ30aと検証系サーバ30bとの間で、ハードウェア構成及びソフトウェア構成を同一のものとしても、両者の振る舞いが異なるケースが、本願発明者の実験により観測されている。例えば、図6に示されるような現象が発生する場合があることが確認されている。
図6は、実動系と検証系とにおいて振る舞いが異なるケースの一例を説明するための図である。
同図の実動系において、実動系サーバ30aからは、パケット群Pc11が、ウィンドウ制御によって連続して送信されている。実動系サーバ30aは、シーケンス番号が「50000」であるパケットの送信後、パケットの送信を停止し、待機状態となっている。パケット群Pc11が送信される間、クライアント装置2は、上り方向のパケットPa11〜Pa13を実動系サーバ30aに送信している。その後、実動系サーバ30aが待機状態中に、クライアント装置20は、ACKパケットPa14を送信する。ACKパケットPa14の受信に応じ、実動系サーバ30aは、パケットPc12を送信する。
検証系において、試験装置10は、実動系のパケットPa11〜Pa14と同じ時間間隔で、上り方向のパケットPb11〜Pb14を送信している。なお、同図において、検証系における各パケットのACK番号は、説明の便宜上、実動系において対応するパケットのACK番号と一致させている。
一方、検証系サーバ30bは、パケット群Pt11の送信後、待機状態となっている。パケット群Pt11に含まれるパケット数は、パケット群Pc11に含まれるパケット数より少ない。その結果、パケット群Pt11において最後に送信されたパケットのシーケンス番号は、「40000」となっている。
その後、検証系サーバ30bは、シーケンス番号が「40000」の状態で、ACK番号が「51500」であるACKパケットPb14を受信する。この時点で、検証系サーバ30bでは、上り方向のパケットのACK番号が、下り方向のパケットのシーケンス番号を超えてしまっている。したがって、検証系サーバ30bは、この現象を異常と判断し、以降のパケットの送信を停止してしまう。
なお、同図において、実動系サーバ30a又は検証系サーバ30bより送信されるパケットを示す矢印の単位は、必ずしもパケット単位ではない。一つの矢印によって、複数のパケットが表現されている。
本願発明者は、検証系の通信履歴(キャプチャデータ)を解析した結果、上り方向のパケットに関してACK番号の間隔が相対的に大きいときに、このような現象(以下、「ACK番号とシーケンス番号との逆転現象」という。)が発生する可能性が高いことに着眼した。そして、実動系サーバ30aと検証系サーバ30bとの振る舞いの相違の代表的な要因は、TCP/IP通信における制御機構に有ることに想到した。
すなわち、TCP/IP通信では、通信開始後、クライアント(本実施の形態のクライアント装置20又は試験装置10)は、サーバ(本実施の形態の実動系サーバ30a又は検証系サーバ30b)からパケットを2個受信するごとに1個のACKパケットを返信する。その後、時間経過に応じて、クライアントは、サーバより連続して多数(2個以上)のパケットを受信し、それに対して1個のACKパケットを返信する。これは、通信の効率化を図るための制御であり、ウィンドウ制御と呼ばれる。
サーバが一度に送信できるパケットの量は、サーバの輻輳ウィンドウサイズや広告ウィンドウサイズによって定まる。輻輳ウィンドウサイズは、サーバのパケットの送信に応じて徐々に縮退し、ACKパケットの受信に応じて徐々に回復する。但し、回復の度合いに対して縮退の度合いの方が大きければ、輻輳ウィンドウサイズは、いずれ使い尽くされる(枯渇する)。輻輳ウィンドウサイズが使い尽くされると、サーバはパケットの送信を停止し、待機状態となる。待機状態において、クライアントからのACKパケットが受信されると、輻輳ウィンドウサイズは少し回復する。その結果、サーバは、パケットの送信が可能となる。
上記をふまえて、図6の例を改めて参照すると、実動系サーバ30aにおいては、シーケンス番号が「50000」であるパケットの送信後に、輻輳ウィンドウサイズが使い尽くされているものと考えられる。そして、ACKパケットPa14の受信によって、輻輳ウィンドウサイズが回復し、その結果、実動系サーバ30aは、パケットPc12の送信が可能となったものと考えられる。
同様に、検証系サーバ30bにおいては、シーケンス番号が「40000」であるパケットの送信後に、輻輳ウィンドウサイズが使い尽くされているものと考えられる。すなわち、図6では、何らかの原因により、検証系サーバ30bの輻輳ウィンドウサイズが、実動系サーバ30aの輻輳ウィンドウサイズより小さくなり、検証系サーバ30bが連続して送信可能なパケットの数が実動系サーバ30aより少なくなってしまう状態が発生していることが考えられる。
理論的には、或る二つのサーバが同一の性能である場合、同一時間間隔でACKパケットを受信すれば輻輳ウィンドウサイズの変動は実動系と検証系で変わらないはずである。しかし、実際には通信経路上にあるネットワーク機器やサーバのバッファの大きさの揺らぎ等が障壁となり、輻輳ウィンドウサイズの変動が実動系と検証系で変わることは十分に発生しうる。
ACK番号とシーケンス番号との逆転現象が発生した場合、検証系サーバ30bは、パケットの送信を停止してしまうため、試験の継続が困難となる。そのため、試験実施者は、多大な作業負担を被ることになる。
そこで、本実施の形態では、ACK番号とシーケンス番号との逆転現象を回避した例についても説明する。
本実施の形態において、試験装置10は、実動系のキャプチャデータ(通信履歴)を解析し、上り方向のACKパケットに関して、ACK番号の間隔を計測する。すなわち、試験装置10は、上り方向の各ACKパケットのACK番号について、直前のACKパケットのACK番号との差分を算出する。閾値以上の間隔(差分)が検出された場合、試験装置10は、当該間隔に係る二つのACKパケットの間(以下、「対象パケット間」という。)において、上り方向のACKパケット(以下、「追加パケット」という。)を追加送信する。すなわち、追加パケットは、実動系におけるパケットを再現するものではなく、検証系においてのみ送信されるACKパケットである。なお、対象パケット間に係る二つのACKパケットのうち、前のACKパケットを、以下「前パケット」といい、後のACKパケットを、以下「後パケット」という。
追加パケットが追加送信されるのは、後パケットのACK番号が、検証系サーバ30bのシーケンス番号より大きくなる可能性が高いからである。追加パケットが送信されることにより、検証系サーバ30bの輻輳ウィンドウサイズの回復と、それに伴う検証系サーバ30bによるパケットの送信の再開が期待できる。その結果、ACK番号とシーケンス番号との逆転現象の発生の回避が期待できる。なお、ACKパケット(追加パケットも含む。)の処理負荷は低いため、追加パケットの追加による検証系サーバ30bの処理負荷の増加は、無視できる程度に小さいものと考えられる。
図7は、追加パケットの第一の追加例を説明するための図である。図7中、図6と同一部分には同一符号を付し、その説明は適宜省略する。
図7の実動系において、ACKパケットPa13のACK番号(16000)とACKパケットPa14のACK番号(51500)とは乖離している。試験装置10は、二つのACK番号の間隔と閾値との比較に基づいて斯かる状態(ACK番号の乖離状態)を検出すると、二つのACKパケットの間に追加パケットを追加する。すなわち、試験装置10は、パケットPa13を再現するパケットPb13と、パケットPa14を再現するパケットPb14の間で、追加パケットPd1を送信する。同図の例では、追加パケットのACK番号は、前パケットであるパケットPb13のACK番号に1を加算した「16001」とされている。なお、図7以降の図面において、追加パケットは、他のパケットとの区別を明確にするために、破線の矢印によって表現されている。
検証系サーバ30bでは、追加パケットPd1の受信により、輻輳ウィンドウサイズが回復する。それに伴い、パケット群Pt11には、例えば、シーケンス番号が「50000」であるパケットまでが含まれるようになる。その結果、検証系サーバ30bにおいてACKパケットPb14が受信された際に、ACK番号とシーケンス番号との逆転現象の発生が回避される。
なお、追加パケットの追加の要否の判断基準として、ACK番号の間隔ではなく、パケットの通信時刻(キャプチャされた時刻)の間隔(時間間隔)が用いられてもよい。二つのパケットのACK番号の間隔と時間間隔との間には相関関係が有るからである。すなわち、ACK番号の乖離は、大量のパケットが実動系サーバ30aより送信されたことにより発生するところ、大量のパケットの送信には、時間を要するからである。
ところで、本実施の形態では、追加パケットのACK番号が、検証系サーバ30bのシーケンス番号を追い越すことがあってはならないという制約がある。したがって、追加パケットの送信時間や追加個数、追加パケットのACK番号については適切な値を考慮する必要がある。図7の例では、追加パケットは一つである。また、追加パケットPd1の送信時間は、前パケットであるACKパケットPb13の送信直後である。更に、前パケットのACK番号に1が加算された値が、追加パケットのACK番号とされている。これは、追加パケットの一つの追加例に過ぎない。
図8は、追加パケットのACK番号の例を説明するための第一の図である。図8中、図7と同一部分には同一符号を付し、その説明は適宜省略する。
図8においては、追加パケットのACK番号に関する他の例が示されている。同図では、前パケット(パケットPb13)のACK番号に対して、検証系サーバ30bの最大セグメント長(Maximum Segment Size:以下、「MSS」と記す。)を整数倍した値が加算された例が示されている。TCPでは、送信データはセグメントと呼ばれる単位に分割されて送信される。この分割単位の最大サイズが、最大セグメント長(MSS)である。
本実施の形態において、検証系サーバ30bのMSSは、1500バイトであるとする。したがって、同図では、ACKパケットPb13のACK番号(16000)に対して(1×MSS=1500)が加算された値(17500)が、追加パケットPd2のACK番号とされている。
なお、同図の追加パケットPd2は、図7の追加パケットPd1より遅れた時間に送信されている。これは、追加パケットは、必ずしも前パケットの直後に送信されなくてもよいことを示したものである。その結果、検証系サーバ30bから送信されるパケット群Pt11の最後のパケットのシーケンス番号は、「40000」となっている。その後、追加パケットPd2が検証系サーバ30bにおいて受信されることにより、検証系サーバ30bの輻輳ウィンドウが回復し、シーケンス番号「50000」までのパケット群Pt12が検証系サーバ30bより送信されている。その結果、検証系サーバ30bにおいてACKパケットPb14が受信された際に、ACK番号とシーケンス番号との逆転現象の発生が回避される。
図9は、追加パケットのACK番号の例を説明するための第二の図である。図9中、図8と同一部分には同一符号を付し、その説明は適宜省略する。
図9の趣旨は、図8と同様である。但し、図9において、追加パケットPd3のACK番号は、前パケットPb13のACK番号(16000)に(2×MSS)が加算された値(19000)となっている。
なお、追加パケットのACK番号は、前パケットPb13のACK番号(16000)より大きく、後パケット(ACKパケットPb14)のACK番号(51500)より小さい値でなければならない。安全性を考慮すれば、追加パケットのACK番号の最大値は、前パケットPb13のACK番号+2×MSS以下であることが望ましい。したがって、同図の例では、追加パケットのAC番号は、16001以上、かつ、19000以下であることが望ましいことになる。ここでいう、安全性とは、追加パケットのACK番号が、検証系サーバ30bにおけるシーケンス番号を超えないことに関する安全性をいう。前パケットPb13のACK番号+2×MSS以下が安全であると考えるのは、TCPの実装における、クライアントとサーバとの間のパケットの通信規則に基づく。すなわち、TCPの実装において、クライアントは、最大で、サーバから2つのパケットを受信するごとに、1つのACKパケットを送信する。このことは、サーバのシーケンス番号の間隔(増加幅)の最小値は、2×MSSであることを意味する。したがって、クライアントのACK番号の間隔の最大値を2×MSSとしておけば、ACK番号の増加幅は、シーケンス番号の増加幅を超える可能性は低いと考えられるからである。但し、クアライアントが、ACKパケットを送信する最大の頻度については、TCPの実装に依存する可能性がある。したがって、追加パケットのACK番号の最大値は、利用するTCPの実装の特性を考慮して定められるのが望ましい。
また、一つの対象パケット間に追加される追加パケットは、一つでなくてもよい。
図10は、追加パケットの個数の例を説明するための第一の図である。図10中、図7と同一部分には同一符号を付し、その説明は適宜省略する。
図10において、試験装置10は、同一のACK番号を有する二つの追加パケットPd1及びPd4を、ACKパケットPb13の送信直後に同時に又は連続して送信する。このように、同一のACK番号を有する追加パケットが複数送信されてもよい。追加パケットが複数送信されることにより、検証系サーバ30bの輻輳ウィンドウサイズの回復の度合いを高めることができる。換言すれば、検証系サーバ30bからの下り方向のパケットの送信量を増加させることができる。その結果、検証系サーバ30bにおいてACKパケットPb14が受信された際に、ACK番号とシーケンス番号との逆転現象が発生する可能性を更に低減させることができる。
すなわち、図7のように追加パケットが一つの場合、可能性としては、パケット群Pt11の最後のパケットのシーケンス番号は、「50000」より小さいことも考えられる。この場合、検証系サーバ30bにおいてACKパケットPb14が受信された際、ACK番号とシーケンス番号との逆転現象が発生してしまう。一方、追加パケットが複数送信されれば、パケット群Pt11に含まれるパケット数を増加させることができる。その結果、当該逆転現象が発生する可能性を低減させることができる。
なお、検証系サーバ30bは、同じACK番号を有するACKパケットを3個受信すると、パケットロスが発生したと判断する可能性がある。したがって、同一のACK番号を有する追加パケットは、2個以下とされることが望ましい。
但し、同一のACK番号を有する追加パケットが2個以下であるという制限が守られる限り、追加パケットは3個以上追加されてもよい。
図11は、追加パケットの個数の例を説明するための第二の図である。図11中、図10と同一部分には同一符号を付し、その説明は適宜省略する。
図11では、追加パケットPd1、Pd5、及びPd6の三つの追加パケットが追加されている。各追加パケットのACK番号は、順番に、「16001」、「16002」、「16003」であり、相互に異なる。このように、同一のACK番号が2個以下の範囲内であれば、3個以上の追加パケットが追加されてもよい。
また、追加パケットが複数追加される場合、追加パケット間のACK番号の刻み幅(間隔)は、1でなくてもよい。
図12は、追加パケット間のACK番号の刻み幅の例を説明するための第一の図である。図12中、図9と同一部分には同一符号を付し、その説明は適宜省略する。
図12では、追加パケットPd7と追加パケットPd8とが追加されている。二つの追加パケットのACK番号の刻み幅は、1MSS(=1500)である。すなわち、追加パケットPd7のACK番号は、17500である。また、追加パケットPd8のACK番号は、19000である。
また、図13は、追加パケット間のACK番号の刻み幅の例を説明するための第二の図である。図13中、図12と同一部分には同一符号を付し、その説明は適宜省略する。
図13では、追加パケットPd9と追加パケットPd10とが追加されている。二つの追加パケットのACK番号の刻み幅は、2MSS(=3000)である。すなわち、追加パケットPd9のACK番号は、19000である。また、追加パケットPd10のACK番号は、22000である。
このように、追加パケットのACK番号の刻み幅は、1以外であってもよい。また、当該刻み幅は、MSSの整数倍でなくてもよい。例えば、当該刻み幅は、不規則であってもよい。すなわち、3つ以上の追加パケットが追加される場合、最初の追加パケットと2番目の追加パケットとの刻み幅と、2番目の追加パケットと3番目の追加パケットとの刻み幅は異なっていてもよい。
なお、一つの対象パケット間における追加パケットの個数の最小値は、1である。最大値は、対象パケット間のACK番号の間隔DAを、追加パケットのACK番号の刻み幅で除した値に2を乗じることにより得られる値である。2を乗じるのは、同一のACK番号ついて、二つの追加パケットが許容されるからである。
本実施の形態(図7等)において、DAの値は、51500−16000=35500である。追加パケットのACK番号の刻み幅が、図11のように1である場合、追加パケットの個数の最大値は、355000÷1×2=71000となる。また、追加パケットのACK番号の刻み幅が、図12のように1MSS(=1500)である場合、追加パケットの個数の最大値は、355000÷1500=23.6…であるため、23×2=46となる。更に、追加パケットのACK番号の刻み幅が、図13のように2MSS(=3000)である場合、追加パケットの個数の最大値は、355000÷3000=11.83…であるため、11×2=22となる。
但し、追加パケットのACK番号が、検証系サーバ30bにおけるシーケンス番号を超えないことの安全性を考慮すれば、上記したように、追加パケットのACK番号の最大値は、前パケットのACK番号+2×MSS以下である。そうすると、上記DAの値を、2×MSS(=3000)として、上記と同様の演算をした結果が、安全な追加パケットの最大数であるといえる。
続いて、追加パケットを送信するタイミングについて説明する。追加パケットの送信タイミングとしては、前パケットと同時、前パケットの直後、前パケットから所定時間経過後、前パケットを送信してからRTT(Round-Trip Time)の整数倍の時間の経過後等が考えられる。
例えば、図14は、追加パケットの送信タイミングの一例を説明するための図である。図14中、図13と同一部分には同一符号を付し、その説明は適宜省略する。
図14では、前パケットPb13の送信後、RTT経過後に追加パケットPd11が送信される例が示されている。
一方、追加パケットの送信タイミングとして許容される最終時刻(以下、「最終許容送信時刻」という。)は、次のように求められる。まず、後パケットPb14が検証系サーバ30bに到達するまでに、検証系サーバ30bが、後パケットPb14のACK番号までの(未満の)シーケンス番号に係る全てのパケットを送信し終えるまでの所要時間を算出する。当後パケットPb14の送信時刻から当該所要時間を差し引いた時刻が、追加パケットの最終許容送信時刻である。
図15は、追加パケットの最終許容送信時刻を説明するための図である。図15中、図14と同一部分には同一符号を付し、その説明は適宜省略する。
図15において、検証系サーバ30bによるパケットの送信時間間隔は、0.2ミリ秒であるとする。検証系サーバ30bに後パケットPb14が到達するまでに、検証系サーバ30bは、シーケンス番号が「41500」のパケットからシーケンス番号が「50000」のパケットを送信する必要がある。そうでないと、後パケットPb14の受信時において、ACK番号とシーケンス番号との逆転現象が発生してしまうからである。そうすると、追加パケットPd12の最終許容送信時刻は、Tn+1+Toffset−(50000−41500)×0.2によって求められる。なお、Tn+1+Toffsetは、後パケットPb14の送信時刻である。
以下、試験装置10の機能構成及び試験装置10が実行する処理内容等について、更に詳しく説明する。
図16は、本発明の実施の形態における試験装置の機能構成例を示す図である。同図において、試験装置10は、パケット取得部11、記録部12、再現試験部13、試験結果出力部14、実動系通信履歴記憶部15、試験用データ記憶部16、及び検証系通信履歴記憶部17等を有する。パケット取得部11、記録部12、再現試験部13、及び試験結果出力部14等は、試験装置10にインストールされたプログラムがCPU104に実行させる処理によって実現される。実動系通信履歴記憶部15、試験用データ記憶部16、及び検証系通信履歴記憶部17等は、メモリ装置103又は補助記憶装置102等を用いて実現可能である。
パケット取得部11は、ネットワークn1におけるTCP/IP通信を監視し、実動系におけるパケットをキャプチャ(捕捉又は取得)する。パケット取得部11は、また、試験装置10より送信されるパケット、及び試験装置10において受信されるパケットについても監視することにより、検証系におけるパケットをキャプチャする。
記録部12は、パケット取得部11によってキャプチャされたパケットのうち、実動系のパケットに関するデータを実動系通信履歴記憶部15に記録し、検証系のパケットに関するデータを検証系通信履歴記憶部17に記録する。その結果、実動系通信履歴記憶部15には、実動系における通信履歴が記録される。また、検証系通信履歴記憶部17には、検証系における通信履歴が記録される。記録部12は、キャプチャされたパケットの送信元IPアドレス又は宛先IPアドレスに基づいて、当該パケットが実動系のパケットであるか検証系のパケットであるかを判定する。なお、本実施の形態において、実動系通信履歴記憶部15は、第一の記憶部の一例である。また、検証系通信履歴記憶部17は、第二の記憶部の一例である。
再現試験部13は、実動系通信履歴記憶部15に記録された通信履歴を用いて、実動系における上り方向のパケットの通信シーケンスを検証系において再現し、その結果実行される検証系サーバ30bから返信される下り方向のパケットの通信シーケンスに基づいて検証系サーバ30bの性能を評価する。再現試験部13が実行する処理によって検証サーバ30b宛に送信されるパケット及び検証サーバ30bより返信されるパケットに関するデータは、上記の通りパケット取得部11によってキャプチャされ、記録部12によって検証系通信履歴記憶部17に記録される。
試験結果出力部14は、再現試験部13による試験結果(評価結果)を出力する。出力形態は所定のものに限定されない。例えば、試験結果を示すデータが補助記憶装置102に記録されてもよいし、所定の表示装置に表示されてもよい。
同図において、再現試験部13は、試験用データ生成部131、変換部132、パケット削除部133、及び性能評価部135等を有する。
試験用データ生成部131は、実動系通信履歴記憶部15に記憶されている通信履歴のうち、上り方向のパケットに関するデータを試験用データ記憶部16に転記(コピー)する。試験用データ生成部131は、コピーに際し、上り方向のACKパケット間のACK番号の間隔を計測する。試験用データ生成部131は、予め設定されている閾値以上の間隔が検出された場合、当該間隔に係る対象パケット間に追加パケットを追加する。すなわち、本実施の形態において、試験用データ生成部131は、追加部の一例である。
変換部132は、試験用データ記憶部16に記録されているパケットに関して、検証系に適合させるための変換処理を行う。例えば、送信元IPアドレス、宛先IPアドレス、及びACK番号等が変換される。
パケット削除部133は、検証系において試験を開始した結果、追加パケットが不要であると判定される場合に、当該追加パケットを破棄する。追加パケットが不要であると判定される場合とは、例えば、検証系サーバ30bの輻輳ウィンドウサイズが、実動系サーバ30aの輻輳ウィンドウサイズよりも小さくなっていないと判定される場合である。
性能評価部135は、検証系通信履歴記憶部17に記録された通信履歴に基づいて、検証系サーバ30bの性能を評価する。例えば、性能評価部135は、検証系サーバ30bの性能に関して、実動系サーバ30aの性能との比較結果を出力する。
以下、試験装置10が実行する処理手順について説明する。
図17は、試験装置によるパケットのキャプチャ処理の処理手順の一例を説明するためのフローチャートである。
ステップS101において、パケット取得部11は、インタフェース装置105を介してパケットを取得する。続いて、パケット取得部11は、取得されたパケットのIPヘッダを参照して、当該パケットの送信元IPアドレス又は宛先IPアドレスが実動系サーバ30aのIPアドレスと一致するか否かを判定する(S102)。すなわち、当該パケットが実動系における通信に係るパケットであるか否かが判定される。なお、試験装置10の補助記憶装置102には、実動系サーバ30a及び検証系サーバ30bのそれぞれのIPアドレスが予め記録されている。
取得されたパケットの送信元IPアドレス又は宛先IPアドレスが実動系サーバ30aのIPアドレスと一致する場合(S102でYes)、記録部12は、現在時刻を試験装置10のタイマー(時計)より取得する(S103)。続いて、記録部12は、パケット内の各レイヤのヘッダ及びペイロードを解析する(S103)。続いて、記録部12は、現在時刻及びパケットの解析結果を実動系通信履歴記憶部15に記録する(S105)。
したがって、実動系に関するパケットが取得されるたびにステップS103〜S105が実行される。その結果、実動系通信履歴記憶部15には、実動系における通信履歴が蓄積される。
図18は、実動系通信履歴記憶部の構成例を示す図である。同図において、実動系通信履歴記憶部15は、取得されたパケットごとに、セッションID、時刻、送信元IPアドレス、宛先IPアドレス、送信元ポート番号、宛先ポート番号、シーケンス番号、ACK番号、SYNフラグ、ACKフラグ、PSHフラグ、FINフラグ、HTTP情報、及びペイロード等を記憶する。
セッションIDは、送信元IPアドレス、宛先IPアドレス、送信元ポート番号、及び宛先ポート番の4つのパラメータに基づいて生成される、TCPレベルでのセッションの識別子(例えば、ハッシュ値)である。すなわち、記録部は、取得されたパケットの、送信元IPアドレス、宛先IPアドレス、送信元ポート番号、及び宛先ポート番を入力情報として所定の演算を行ってセッションIDを生成する。なお、当該4つのパラメータの値が一致する場合、所定の演算によって得られるセッションIDは、同じである。所定の演算によって、送信元IPアドレスと宛先IPアドレスとの区別、及び送信元ポート番号と宛先ポート番号との区別はない。したがって、クライアント装置10と実動系サーバ30aとの間でやりとりされるパケットに関して、使用されるポート番号が同じであれば、上り方向であるか下り方向であるかを問わず、セッションIDは一致する。
時刻は、ステップS102において取得される時刻(通信時刻)である。同図では、実動系の最初のパケットが受信されてからの相対的な時刻が示されている。送信元IPアドレスは、パケットの送信元のIPアドレスである。本実施の形態において、上り方向のパケットの送信元IPアドレスは、クライアント装置20のIPアドレスとなる。下り方向のパケットの送信元アドレスは、実動系サーバ30aのIPアドレスとなる。宛先IPアドレスは、パケットの宛先のIPアドレスである。本実施の形態において、上り方向のパケットの宛先IPアドレスは、実動系サーバ30aのIPアドレスとなる。下り方向のパケットの宛先アドレスは、クライアント装置20のIPアドレスとなる。なお、送信元IPアドレス及び宛先IPアドレスは、パケット内のIPヘッダより取得される。
送信元ポート番号は、パケットの送信元のポート番号である。宛先ポート番号は、パケットの宛先のポート番号である。シーケンス番号は、パケットのシーケンス番号である。ACK番号は、パケットのACK番号である。SYNフラグ、ACKフラグ、PSHフラグ、及びFINフラグは、TCPヘッダに含まれている各種フラグである。なお、ACKフラグが1であるパケットが、ACKパケットである。これら各種フラグと、送信元ポート番号及び宛先ポート番号とは、TCPヘッダより取得される。
HTTP情報は、HTTP(HyperText Transfer Protocol)のメッセージ内容である。同図では、要求メソッド(GET等)又は応答コード(200 OK等)が記録されている。HTTP情報は、HTTPヘッダより取得される。なお、本実施の形態では、実動系サーバ30aは、HTTPによってサービスを提供する。したがって、HTTP情報が記録される。POP(Post Office Protocol)3やIMAP(Internet Message Access Protocol)等、実動系において他の通信プロトコルが利用される場合、当該通信プロトコルに応じた情報がHTTP情報の代わりに記録されればよい。
ペイロードは、パケットから全てのレイヤのヘッダを除いたデータである。なお、本実施の形態において、ペイロードは必ずしも記録されなくてもよい。
また、イーサネット(登録商標)・フレームに関する情報が実動系通信履歴記憶部に記録されてもよい。例えば、送信元MACアドレス及び宛先MACアドレス等が記録されてもよい。
一方、ステップS102において、取得されたパケットの送信元IPアドレス又は宛先IPアドレスが実動系サーバ30aのIPアドレスと一致しない場合(S102でNo)、記録部12は、取得されたパケットの送信元IPアドレス又は宛先IPアドレスが検証系サーバ30bのIPアドレスと一致するか否かを判定する(S106)。すなわち、当該パケットが検証系における通信に係るパケットであるか否かが判定される。
取得されたパケットの送信元IPアドレス又は宛先IPアドレスが検証系サーバ30bのIPアドレスと一致する場合(S106でYes)、記録部12は、現在時刻を試験装置10のタイマー(時計)より取得する(S107)。続いて、記録部12は、パケット内の各レイヤのヘッダ及びペイロードを解析する(S108)。続いて、記録部12は、現在時刻及びパケットの解析結果を検証系通信履歴記憶部17に記録する(S109)。
したがって、検証系に関するパケットが取得されるたびにステップS103〜S105が実行される。その結果、検証系通信履歴記憶部17には、検証系における通信履歴が直積される。なお、検証系通信履歴記憶部17の構成は、実動系通信履歴記憶部15の構成と同様でよいため、その説明は省略する。
続いて、試験用データの生成処理について説明する。図19は、試験装置による試験データ生成処理の処理手順の一例を説明するためのフローチャートである。
ステップS201において、試験用データ生成部131は、実動系通信履歴記憶部15のレコードを記録順に走査し、最初の上り方向のパケットに係るレコードを取得する。当該パケットを「パケットP1」と呼ぶ。また、パケットP1のACK番号はA1であり、時刻はT1であるとする。なお、各パケットが上り方向であるか否かは、送信先IPアドレスが、実動系サーバ30aのIPアドレスであるか否かに基づいて判定されればよい。
続いて、試験用データ生成部131は、取得されたレコードを試験用データ記憶部16に記録する(S202)。すなわち、パケットP1に係るレコードが、試験用データ記憶部16にコピーされる。
続いて、試験用データ生成部131は、実動系通信履歴記憶部15において、パケットP1に係るレコードより後のレコードを走査し、次の上り方向のパケットのレコードを取得する(S203)。当該次の上り方向のパケットを、「パケットP2」と呼ぶ。
パケットP2のレコードが取得できた場合(S204でYes)、試験用データ生成部131は、パケットP1のACK番号とパケットP2のACK番号との間隔(差分)DAを算出する(S205)。続いて、試験用データ生成部131は、間隔DAが、ACK番号の間隔に対する閾値以上であるか否かを判定する(S206)。
当該閾値は、検証系サーバ30bに対する負荷よりも、検証系サーバ30bがパケットを送信しなくなるのを防ぐことを重視して決定されればよい。追加パケットが検証系サーバ30bに与える処理負荷は、無視できる程度に小さいからである。例えば、TCP/IPプロトコルでは、通信開始直後において、クライアントは、サーバから2パケット受信するごとにACKパケットを1つ返信する。このような振る舞いに鑑みれば、クライアントは、2パケットの受信に対して1パケット返信すれば、サーバの輻輳ウィンドウサイズは、枯渇しないと考えられる。そこで、クライアントが4パケット受信してもACKパケットを返信していない場合、輻輳ウィンドウサイズの減少が始まると考え、このような状態が発生しないように閾値を定めるとよい。そうすると、4MSSが安全な閾値であると考えられる。但し、これは、理論的な値であって、4MSSよりも大きな値を閾値とした場合に、シーケンス番号とACK番号との逆転現象が必ず発生するというわけではない。すなわち、実際上、4MSSよりも大きな値が閾値とされてもよい。
間隔DAが閾値以上である場合(S206でYes)、試験用データ生成部131は、追加パケットの生成処理を実行する(S207)。追加パケットの生成処理の詳細については後述する。なお、追加パケットの生成処理が実行される場合、パケットP1は、前パケットに相当し、パケットP2は、後パケットに相当する。
ステップS206でNoの場合、又はステップS207に続いて、試験用データ生成部131は、パケットP2に係るレコードを試験用データ記憶部16に記録する(S208)。続いて、試験用データ生成部131は、パケットP2をパケットP1の位置付けとして(S209)、ステップS203以降を繰り返す。
ステップS203において、上り方向のパケットが取得できなかった場合(S204でNo)、すなわち、全ての上り方向のパケットに関して処理が終了した場合、図19の処理は終了する。
なお、ステップS205において、試験用データ生成部131は、パケットP1の時刻とパケットP2の時刻との時間間隔(差分)DTを算出してもよい。この場合、ステップS206にいて、試験用データ生成部131は、時間間隔DTが、時間間隔に対する閾値以上であるか否かを判定する。時間間隔DTが当該閾値以上である場合(S206でYes)、試験用データ生成部131は、追加パケットの生成処理を実行する(S207)。
なお、追加パケットの追加の要否を判定するための閾値は、ACK番号の間隔又は時刻の間隔の平均、分散、又は時系列解析等によって求められてもよい。
続いて、ステップS207の詳細について説明する。図20は、追加パケットの生成処理の処理手順の一例を説明するためのフローチャートである。
ステップS301において、試験用データ生成部131は、変数iを1に初期化する。変数iは、追加パケットの個数を記憶する変数である。続いて、試験用データ生成部131は、追加パケットP3のACK番号を計算する(S302)。試験用データ生成部131は、例えば、パケットP1のACK番号+α×iの計算式に基づいて追加パケットのACK番号を計算する。ここで、αの値は、例えば、追加パケット間のACK番号の刻み幅である。したがって、αの値は、図11、図12、又は図13において説明したように「1」、「1MSS」、又は「2MSS」でもよいし、他の値であってもよい。また、2以上の追加パケットが生成される場合、図10において説明したように、同じACK番号が2回連続で使用されてもよい。
続いて、試験用データ生成部131は、追加パケットの時刻を計算する(S303)。試験用データ生成部131は、例えば、パケットP1の時刻+β×iの計算式に基づいて追加パケットの時刻を計算する。βは、追加パケット間の時間間隔である。βの値は、図14において説明したように、RTTであってもよいし、他の値でもよい。
続いて、試験用データ生成部131は、追加パケットのACK番号がパケットP2のACK番号未満であり、かつ、追加パケットの時刻がパケットP2の時刻より前であるという条件が満たされているか否かを判定する(S304)。安全性を考慮すると、ステップS304における条件は、追加パケットのACK番号がパケットP1のACK番号+2MSS以下であり、かつ、追加パケットの時刻が、図14において説明した、最終許容送信時刻以前であることとされればよい。但し、当該条件(特にACK番号に関する条件)は、TCPの実装に応じて異なりうる。
ステップS304における条件が満たされている場合(S304でYes)、試験用データ生成部131は、追加パケット用の空のレコードを試験用データ記憶部16に生成する。当該レコードは、試験用データ記憶部16に既に記録されている最後のレコードの次に生成される。したがって、一つの対象パケット間に関してステップS305が初めてに実行されるとき、当該レコードは、図19のステップS202において記録されたパケットP1に係るレコードの次に生成される。
続いて、試験用データ生成部131は、パケットP1に係るレコードの内容を、ステップS305において生成された追加パケットのレコードにコピーする(S306)。続いて、試験用データ生成部131は、追加パケットのレコードのACK番号及び時刻を、ステップS302又はステップS303において算出されたACK番号又は時刻によって更新する(S307)。これにより、実質的に追加パケットが生成されたことになる。続いて、試験用データ生成部131は、変数iに1を加算し、ステップS302以降を繰り返す。
その後、ステップS304の条件が満たされなくなった場合(S304でNo)、図20の処理は終了する。
なお、追加パケットの生成処理の後に、図19のステップS208において、パケットP2のレコードが試験用データ記憶部16に記録される。したがって、前パケットであるパケットP1に係るレコードと、後パケットであるパケットP2に係るレコードとの間に、追加パケットに関するレコードが試験用データ記憶部16に記録される。
また、図20では、追加パケットを複数追加可能な処理手順を説明した。追加パケットを1つしか追加しない場合、ステップS302以降の繰り返しは実行しなければよい。
図19及び図20において説明した処理手順の実行により、試験用データ記憶部16には、例えば、図21に示されるようなレコードが記録される。
図21は、試験用データ記憶部の構成例を示す図である。
同図に示されるように、試験用データ記憶部16のレコードは、基本的に、実動系通信履歴記憶部15より上り方向のパケットに係るレコードが抽出されたものである。但し、試験用データ記憶部16には、必要に応じて、追加パケットに係るレコードが追加されている。同図では、レコードr3.4とレコードr5.4との間に、追加パケットに係るレコードr3.8及びレコードr4.2が追加されている。これは、レコードr3.4のACK番号と、レコードr5.4のACK番号との間隔(差分)が、閾値以上であると判定されたことに基づく。なお、同図の説明において、レコードに対する符号は、「r<時刻>」という命名規則に従っている。
また、試験用データ記憶部16は、追加パケットフラグという項目(列)を有する。追加パケットフラグは、各レコードが追加パケットに係るレコードであるか否かを識別するためのフラグである。本実施の形態では、追加パケットに係るレコードの追加パケットフラグには、「1」が記録される。したがって、レコードr3.8及びレコードr4.2の追加パケットフラグには「1」が記録されている。
なお、一つの対象パケット間に対する追加パケットの個数を一つとする場合は、例えば、レコードr4.2は、試験用データ記憶部16に記録されない。
続いて、性能評価試験の実行処理について説明する。図22は、試験装置による性能評価試験の実行処理の処理手順の一例を説明するためのフローチャートである。
ステップS401において、変換部132は、試験用データ記憶部16に記憶されているレコードを一つ取得する。当該ステップでは、試験用データ記憶部16の記憶順において上位から順にレコードが取得される。取得されたレコードを、以下「対象レコード」という。
続いて、変換部132は、試験開始時刻から対象レコードの時刻までの時間(以下、「オフセット時間」という。)が到来するまで待機する(S402)。試験開始時刻とは、図22の処理の開始時刻である。
対象レコードのオフセット時間が到来すると、変換部132は、対象レコードに記録されている情報を検証系に適合するように変換して、検証系用のパケットを生成する(S403)。生成されたパケットを、「試験用パケット」という。具体的には、変換部132は、送信元IPアドレスを、試験装置10のIPアドレスに変換する。また、変換部132は、対象レコードの宛先IPアドレスを、検証系サーバ30bのIPアドレスに変換する。したがって、試験用パケットのIPヘッダのチェックサム及びTCPヘッダのチェックサム等は、実動系のパケットと異なる値となる。
また、ACK番号についても変換される。すなわち、TCP/IPのプロトコルにおいて、シーケンス番号の初期値は、3ウェイハンドシェイクによってセッションが確立される際に乱数に基づいて決定される。その後のシーケンス番号及びACK番号は、シーケンス番号の初期値に対して、それまでに送受信されたデータ長が加算された値となる。したがって、検証系における各パケットのACK番号は、実動系において対応するパケットのACK番号と一致するとは限らない。よって、ACK番号の変換も必要とされるのである。
検証系において、実動系の上り方向の通信シーケンスと同一の通信シーケンスを再現する試験では、検証系における上り方向のパケットについて将来のACK番号の値を推測することが可能である。
図23は、ACK番号の変換について説明するための図である。同図において、上側の表は変換前の試験用データ記憶部16の一部を示す。下側は変換後の試験用データ記憶部16の一部を示す。なお、変換前の試験用データ記憶部16の記憶内容は、実動系における記録結果である。
例えば、実動系で通信開始後2.1秒後にACK番号が5001のパケットが送られ、通信開始後2.4秒後にACK番号が7001のパケットが送られたとする。ここで、検証系で通信を開始した際、通信開始後2.1秒後に送信されたパケットのACK番号が11001であった場合、実動系とのACK番号の変化量は、11001−5001=6000である。したがって、検証系で通信開始後2.4秒後に送信されたパケットのACK番号は、変換前の値である7001に6000を加算することにより、13001として算出することができる。
また、対象レコードの送信元IPアドレス及び宛先IPアドレス等が変換されたことにより、変換部132は、変換後の対象レコードの送信元IPアドレス、宛先IPアドレス、送信元ポート番号、及び宛先ポート番号に基づいて、セッションIDを算出する。変換部132は、算出されたセッションIDによって、対象レコードのセッションIDを更新する。変換部は、更新前のセッションIDと更新後のセッションIDとの対応情報を、補助記憶装置102に記録しておく。但し、セッションIDは、通信に利用されるデータではなく、性能評価処理において利用されるデータである。性能評価処理では、各セッションの異同が識別できればよい。したがって、セッションIDの更新は、必ずしも実行されなくてもよい。
また、送信元MACアドレス及び宛先MACアドレスが記録対象とされている場合は、送信元MACアドレス及び宛先MACアドレスについても変換が行われる。
なお、HTTP情報やペイロード等については、変換が必要な情報と変換が不要な情報とを示す情報が予め補助記憶装置102に記録されている。変換部132は、変換が必要な情報に関して変換を実行する。
続いて、パケット送信部134は、試験用パケットが追加パケットであるか否かを判定する(S404)。当該判定は、試験用パケットに係るレコードの追加パケットフラグに「1」が記録されているか否かに基づいて行われる。
試験用パケットが追加パケットでない場合(S404でNo)、パケット送信部134は、インタフェース装置105を用いて、試験用パケットの送信を実行する(S405)。本実施の形態において、試験用パケットの宛先IPアドレスは、検証用サーバ30bのIPアドレスとされている。したがって、試験用パケットは、検証用サーバ30bに転送される。なお、試験用パケットの送信に応じ、パケット取得部11によって、図17のステップS107〜S109が実行される。その結果、試験用パケットに係るレコードが検証系通信履歴記憶部17に記録される。また、試験用パケットに応じて検証系サーバ30bより返信されるパケットに関しても、パケット取得部11によって、図17のステップS107〜S109が実行される。
一方、試験用パケットが追加パケットである場合(S404でYes)、パケット削除部133は、検証系通信履歴記憶部17より、試験用パケットと同一のセッションIDに係る最後の下り方向のレコードを取得する(S406)。当該レコードは、検証系サーバ30bより最後に送信されたパケット(最後の下り方向のパケット)に係るレコードである。
続いて、パケット削除部133は、ステップS406において取得されたレコードのシーケンス番号は、試験用パケット(追加パケット)のACK番号より大きいか否かを判定する(S407)。すなわち、最後の下り方向のパケットのシーケンス番号が、追加パケットのACK番号より大きいか否かが判定される。最後の下り方向のパケットのシーケンス番号が、追加パケットのACK番号より大きい場合(S407でYes)、パケット削除部133は、追加パケットを破棄する(S408)。したがって、この場合、追加パケットの送信は行われない。検証系サーバ30bのシーケンス番号の方が大きい場合、追加パケットを送信しなくても、その後に送信される上り方向の再現パケットのACK番号が、検証系サーバ30bのシーケンス番号を超えてしまう可能性は低いからである。追加パケットが破棄される典型的なケースとしては、検証系サーバ30bの振る舞いが、実動系サーバ30aの振る舞いと一致する場合が挙げられる。
ステップS408が実行されることにより、不要な追加パケットの送信を抑制することができる。なお、その後に送信される上り方向の再現パケットとは、実動系においてキャプチャされた上り方向のパケットに対応するパケットである。
一方、最後の下り方向のパケットのシーケンス番号が、追加パケットのACK番号以下である場合(S407でYes)、パケット送信部134は、追加パケットを送信する(S405)。
ステップS405又はS408に続いて、変換部132は、試験用データ記憶部16における全てのレコードに関して図22の処理を実行したか否かを判定する(S409)。未処理のレコードが残っている場合(S409でNo)、残りのレコードに関して記録順にステップS401以降の処理が実行される。全てのレコードに関して処理が完了した場合(S409でYes)、図22の処理は終了する。
図22の処理が終了すると、性能評価部135によって、検証系サーバ30bに関する性能評価が実行される。
図24は、第一の性能評価方法を説明するための図である。第一の性能評価方法では、実動系におけるRTT(Round-Trip Time)と、検証系におけるRTTとの差が既知であることが前提とされる。例えば、試験実施者は、予め、pingコマンド等を利用して、実動系におけるRTTと、検証系におけるRTTとを計測し、その差(ΔRTT)を求めておく。同図では、ΔRTT=1.2秒であるとする。なお、実動系のRTTと検証系のRTTとの間に相違が有るのは、双方の通信距離が必ずしも同じであるとは限らないからである。
同図の実動系において、上り方向のパケットPa1の時刻(キャプチャされた時刻)は、通信開始から2.1秒後であるとする。また、パケットPa1の応答であるパケットPc1の時刻(キャプチャされた時刻)は、通信開始から2.3秒後であるとする。この場合、RTT1の値は、2.3−2.1=0.2秒となる。
一方、検証系において、パケットPa1を再現した上り方向のパケットPb1の時刻は、試験開始から2.1秒後であるとする。また、パケットPa1の応答であるパケットPt1の時刻は、試験開始から3.5秒後であるとする。この場合、RTT2の値は、3.5−2.1=1.4秒となる。
試験装置10は、RTT1と、RTT2−ΔRTTとを比較して、検証系サーバ30bの性能を評価する。RTT2よりΔRTTが差し引かれることにより、実動系と検証系との通信距離の相違を吸収することができる。図24の場合、0.2と、1.4−1.2=0.2とが比較される。両者は等しいため、検証系サーバ30bの性能は、実動系サーバ30aの性能と同等であると判定される。なお、RTT1<RTT2−ΔRTTの場合、検証系サーバ30bの性能は、実動系サーバ30aの性能より低いと判定される。また、RTT1>RTT2−ΔRTTの場合、検証系サーバ30bの性能は、実動系サーバ30aの性能より高いと判定される。
図24に示される第一の性能評価方法を実現するために試験装置10が実行する処理手順について説明する。
図25は、検証系サーバに関する第一の性能評価処理の処理手順の一例を説明するためのフローチャートである。同図の処理は、図22の処理の終了をきっかけとして実行されてもよいし、図22の処理の実行後の任意のタイミングで実行されてもよい。
ステップS501において、性能評価部135は、例えば、補助記憶装置102より、実動系のRTTと検証系のRTTとの差であるΔRTTを取得する。続いて、性能評価部135は、実動系通信履歴記憶部15に記録されているレコード(実動系の通信履歴)に基づいて、実動系において、HTTPリクエストに対するHTTPレスポンスが応答されるまでのRTT(RTT1)を算出する(S502)。例えば、図18に示される実動系通信履歴記憶部15によれば、HTTP情報に「GET」が記録されているレコードが、HTTPリクエストに係るパケットのレコードに相当する。また、当該レコードと同一のセッションIDを有し、HTTP情報に「200 OK」が記録されているレコードが、HTTPレスポンスに係るパケットのレコードに相当する。HTTPレスポンスに係るレコードの時刻からHTTPリクエストに係る時刻を差し引くことにより、RTT1が算出される。
続いて、性能評価部135は、検証系通信履歴記憶部17に記録されているレコード(検証系の通信履歴)に基づいて、検証系において、HTTPリクエストに対するHTTPレスポンスが応答されるまでのRTT(RTT2)を算出する(S503)。なお、RTT2の算出に用いられるHTTPリクエスト及びHTTPレスポンスは、RTT1の算出に用いられたHTTPリクエスト及びHTTPレスポンスを再現したものであることが望ましい。例えば、性能評価部135は、RTT1の算出に用いられたHTTPリクエストに係るレコードと同一の又は対応するセッションIDを有し、同じ時刻を有するレコードを検証系通信履歴記憶部17より取得する。性能評価部135は、取得されたレコードと同一のセッションIDを有し、HTTP情報にHTTPレスポンスを示す情報(例えば、応答コード)が記録されているレコードを取得する。性能評価部135は、取得された二つのレコードの時刻の差分を算出する。当該差分の値が、RTT2である。
続いて、性能評価部135は、RTT1とRTT2−ΔRTTとを比較する(S504)。RTT1の方が、RTT2−ΔRTTより大きい場合、性能評価部135は、検証系サーバ30bは、実動系サーバ30aより高性能であると判定する(S505)。RTT1と、RTT2−ΔRTTとが等しい場合、性能評価部135は、検証系サーバ30bは、実動系サーバ30aと同性能であると判定する(S506)。RTT1の方が、RTT2−ΔRTTより小さい場合、性能評価部135は、検証系サーバ30bは、実動系サーバ30aより低性能であると判定する(S507)。なお、試験結果出力部14は、判定結果を示す情報を、例えば、補助記憶装置102に保存してもよいし、表示装置等に表示させてもよい。
続いて、第二の性能評価方法について説明する。図26は、第二の性能評価方法を説明するための図である。第二の性能評価方法では、実動系における下り方向のパケットの時間間隔と、検証系における下り方向のパケットの時間間隔との比較によって、検証系サーバ30bの性能が評価される。上り方向のパケットに関して実動系と検証系との送信間隔が同じである場合、実動系サーバ30aと検証系サーバ30bの性能が同じあれば下り方向のパケットの時間間隔は、ΔRTTの影響を受けずに同じになることが期待される。したがって、下り方向の時間間隔を比較することにより、検証系サーバ30bの性能を評価することができる。
例えば、同図の実動系において、パケットPc1の時刻(キャプチャされた時刻)は、通信開始から2.1秒後であり、パケットPc2の時刻(キャプチャされた時刻)は、通信開始から2.4秒後であるとする。そうすると、実動系における下り方向のパケットの時間間隔DT1は、2.4−2.1=0.3秒となる。
一方、同図の検証系において、パケットPt1の時刻は、試験開始から3.5秒後であり、パケットPt2の時刻は、試験開始から3.8秒後であるとする。そうすると、検証系における下り方向のパケットの時間間隔DT2は、3.8−3.5=0.3秒となる。
この場合、実動系における下り方向のパケットの時間間隔DT1と、検証系における下り方向のパケットの時間間隔DT2は等しい。したがって、検証系サーバ30bの性能は、実動系サーバ30aの性能と同等であると判定される。なお、DT1<DT2の場合、検証系サーバ30bの性能は、実動系サーバ30aの性能より低いと判定される。また、DT1>DT2の場合、検証系サーバ30bの性能は、実動系サーバ30aの性能より高いと判定される。
図26に示される第二の性能評価方法を実現するために試験装置10が実行する処理手順について説明する。
図27は、検証系サーバに関する第二の性能評価処理の処理手順の一例を説明するためのフローチャートである。同図の処理は、図22の処理の終了をきっかけとして実行されてもよいし、図22の処理の実行後の任意のタイミングで実行されてもよい。
ステップS601において、性能評価部135は、実動系通信履歴記憶部15に記録されているレコード(実動系の通信履歴)に基づいて、実動系において、例えば、同一のセッションIDに係るHTTPレスポンスの時間間隔DT1を算出する(S601)。例えば、セッションIDが共通し、HTTP情報にHTTPレスポンスを示す情報(例えば、応答コード)が記録されている二つのレコードの時刻の差分が算出される。
続いて、性能評価部135は、検証系通信履歴記憶部17に記録されているレコード(検証系の通信履歴)に基づいて、検証系において、例えば、同一のセッションIDに係るHTTPレスポンスの時間間隔DT2を算出する(S602)。なお、DT2の算出に用いられる、HTTPHTTPレスポンスは、DT1の算出に用いられたHTTPレスポンスに対応したものであることが望ましい。例えば、性能評価部135は、DT1の算出に用いられた二つのHTTPレスポンスに対応する二つのHTTPリクエストに係るそれぞれのレコードと同一の又は対応するセッションIDを有し、同じ時刻を有する二つのレコードを検証系通信履歴記憶部17より取得する。性能評価部135は、取得された二つのレコードごとに、当該レコードと同一のセッションIDを有し、HTTP情報にHTTPレスポンスを示す情報(例えば、応答コード)が記録されているレコードを取得する。性能評価部135は、取得された二つのレコードの時刻の差分を算出する。当該差分の値が、DT2である。
続いて、性能評価部135は、DT1とDT2とを比較する(S603)。DT1の方が、DT2より大きい場合、性能評価部135は、検証系サーバ30bは、実動系サーバ30aより高性能であると判定する(S604)。DT1とDT2とが等しい場合、性能評価部135は、検証系サーバ30bは、実動系サーバ30aと同性能であると判定する(S605)。DT1の方が、DT2より小さい場合、性能評価部135は、検証系サーバ30bは、実動系サーバ30aより低性能であると判定する(S606)。
なお、試験実施者は、性能評価処理の判定結果を受けて、実動系サーバ30aから検証系サーバ30bへ移行の当否を判断する。例えば、検証系サーバ30bの性能が、実動系サーバの性能と同等以上であるという判定結果が得られた場合、試験実施者は、検証系サーバ30bへの移行は妥当であると判断する。一方、検証系サーバ30bの性能が、実動系サーバの性能より低いという判定結果が得られた場合、試験実施者は、検証系サーバ30bへの移行は妥当でないと判断する。
上述したように、本実施の形態によれば、検証系サーバ30bへのパケットの送信間隔を実動系サーバ30aへのパケットの送信間隔と等しくすることができる。その結果、検証系サーバ30bの処理負荷が実動系サーバ30aの処理負荷と同等である状態によって、検証系サーバ30bの性能を評価することができる。
また、追加パケットが追加されることにより、シーケンス番号とACK番号との逆転現象の発生の可能性を低減させることができる。その結果、検証系サーバ30bがパケットの送信を停止してしまい、性能評価試験を中断せざるを得ないような事態の発生を回避することができる。
上記より、検証系サーバ30bが実動系に対して遠隔地に配置されている場合であっても、検証系サーバ30bの性能評価試験を高い精度で、かつ、効率的に実行することができる。
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
以上の説明に関し、更に以下の項を開示する。
(付記1)
第一の記憶部が記憶する、パケットの通信時刻及び応答確認番号を含む通信履歴において通信時刻の間隔又は応答確認番号の間隔が閾値以上である連続する二つのパケットの間の、通信時刻及び応答確認番号を有する追加パケットを生成し、
前記第一の記憶部に記憶されている各パケット及び前記追加パケットを、それぞれの通信時刻に基づく時間間隔で所定の宛先に送信する処理をコンピュータに実行させる試験プログラム。
(付記2)
前記送信する処理において送信される送信パケットの送信履歴と、該パケットに応じて受信される受信パケットの受信履歴とを第二の記憶部に記録する処理を前記コンピュータに実行させ、
前記送信する処理は、前記追加パケットの応答確認番号が、当該追加パケットを送信するまでに前記第二の記憶部に記録されている前記受信パケットのシーケンス番号よりも小さい場合は、当該追加パケットを送信しない付記1記載の試験プログラム。
(付記3)
前記追加パケットを生成する処理は、前記通信履歴において通信時刻の間隔又は応答確認番号の間隔が閾値以上である連続する二つの送信パケットの間に、複数の前記追加パケットを生成する付記1又は2記載の試験プログラム。
(付記4)
パケットの通信時刻及び応答確認番号を含む通信履歴を記憶した第一の記憶部と、
前記通信履歴において通信時刻の間隔又は応答確認番号の間隔が閾値以上である連続する二つのパケットの間の、通信時刻及び応答確認番号を有する追加パケットを生成する追加部と、
前記第一の記憶部に記憶されている各パケット及び前記追加パケットを、それぞれの通信時刻に基づく時間間隔で所定の宛先に送信する送信部とを有する試験装置。
(付記5)
前記送信部によって送信される送信パケットの送信履歴と、該パケットに応じて受信される受信パケットの受信履歴とを第二の記憶部に記録する記録部を有し、
前記送信部は、前記追加パケットの応答確認番号が、当該追加パケットを送信するまでに前記第二の記憶部に記録されている前記受信パケットのシーケンス番号よりも小さい場合は、当該追加パケットを送信しない付記4記載の試験装置。
(付記6)
前記追加部は、前記通信履歴において通信時刻の間隔又は応答確認番号の間隔が閾値以上である連続する二つの送信パケットの間に、複数の前記追加パケットを生成する付記4又は5記載の試験装置。
(付記7)
第一の記憶部が記憶する、パケットの通信時刻及び応答確認番号を含む通信履歴において通信時刻の間隔又は応答確認番号の間隔が閾値以上である連続する二つのパケットの間の、通信時刻及び応答確認番号を有する追加パケットを生成し、
前記第一の記憶部に記憶されている各パケット及び前記追加パケットを、それぞれの通信時刻に基づく時間間隔で所定の宛先に送信する処理をコンピュータが実行する試験方法。
(付記8)
前記送信する処理において送信される送信パケットの送信履歴と、該パケットに応じて受信される受信パケットの受信履歴とを第二の記憶部に記録する処理を前記コンピュータが実行し、
前記送信する処理は、前記追加パケットの応答確認番号が、当該追加パケットを送信するまでに前記第二の記憶部に記録されている前記受信パケットのシーケンス番号よりも小さい場合は、当該追加パケットを送信しない付記7記載の試験方法。
(付記9)
前記追加パケットを生成する処理は、前記通信履歴において通信時刻の間隔又は応答確認番号の間隔が閾値以上である連続する二つの送信パケットの間に、複数の前記追加パケットを生成する付記7又は8記載の試験方法。