JP6252282B2 - 制御プログラム、制御方法および制御装置 - Google Patents

制御プログラム、制御方法および制御装置 Download PDF

Info

Publication number
JP6252282B2
JP6252282B2 JP2014059018A JP2014059018A JP6252282B2 JP 6252282 B2 JP6252282 B2 JP 6252282B2 JP 2014059018 A JP2014059018 A JP 2014059018A JP 2014059018 A JP2014059018 A JP 2014059018A JP 6252282 B2 JP6252282 B2 JP 6252282B2
Authority
JP
Japan
Prior art keywords
read
verification
data
storage device
write
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2014059018A
Other languages
English (en)
Other versions
JP2015184822A (ja
Inventor
準一 鈴木
準一 鈴木
敬藏 小池
敬藏 小池
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014059018A priority Critical patent/JP6252282B2/ja
Publication of JP2015184822A publication Critical patent/JP2015184822A/ja
Application granted granted Critical
Publication of JP6252282B2 publication Critical patent/JP6252282B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、制御プログラム、制御方法および制御装置に関する。
近年、ビックデータの時代となり、扱うデータ量が膨大になったことから、ICT(Information and Communication Technology)環境も大規模化し、特に大容量の記憶装置が普及している。ストレージやディスクなどの記憶装置は、データを記録、参照するものであり、記録するデータ量が増加すれば記録可能な領域が減少する。ビックデータを支えるICT環境では、膨大なデータを格納するために、記憶装置を増設することが行われている。
ソフトウェアとしては、処理対象の数量が増加すると、線形的あるいは指数関数的に処理時間が増加する。また、扱うデータ量が小規模の場合には障害とならなかったことが、データ量の大規模化に伴って障害として顕在化することがある。
このため、ソフトウェア開発において、実際の運用時の環境と同じ大容量の記憶装置を利用した環境または記憶装置が大量に接続された環境で、ソフトウェアの障害を顕在化させる検証手法が知られている。
また、検証対象のソフトウェアが実行するデータアクセスに対して、予め定義した応答を返すことで、当該ソフトウェアを検証するシミュレーション手法が知られている。具体的には、記憶装置をシミュレートするシミュレータは、OS(オペレーティングシステム)に対するアクセスはそのままOSに依頼し、書き込み命令は正常終了させ、読み出し命令に対しては予め定義したデータを応答する。
また、シミュレータに疑似領域を用意し、実際のディスク上のアドレスと疑似領域をマッピングさせ、疑似領域でデータの読み出しや書き込みを制御するシミュレーション手法が知られている。具体的には、シミュレータは、書き込み命令を受け付けると、疑似領域にデータの書き込みを実行し、読み出し命令を受け付けた場合は疑似領域からデータを読み出して応答する。また、シミュレータは、擬似領域に空きがなくなった場合は、受け付けた書き込み命令に対して何も実行せずに処理を正常終了させ、擬似領域がカバーする以外の領域に対する読み出し命令を受け付けた場合は、予め定義したデータを応答する。
特開2001−22609号公報
しかしながら、上記技術では、運用環境と同じ記憶容量の記憶装置を用意してソフトウェアの動作検証を実行するには検証コストが高く、記憶装置の記憶容量を削減してソフトウェアの動作検証を実行すると、検証精度が低下する。
例えば、実際の運用環境と同等のデータ量で検証する場合、記憶装置の記憶容量の増大を招き、検証コストの増加につながる。さらに、単に検証実行時に要する記憶容量が増加するだけでなく、その後の検証のためにデータを保持する際に要する記憶容量も増加する。一方で、データ量を縮小させた環境で検証を行った場合、実際の運用時のデータ構成とは異なる構成しか作れないため、実際の運用時で正常な動作を適切に担保することができない。また、予め定義した応答を返すシミュレーション手法では、データ量を縮小させる必要はないが、予め定義したデータしか応答できないので、実際の運用時での正常な動作を適切に担保することができない。
1つの側面では、検証精度の低下を抑制することができる制御プログラム、制御方法および制御装置を提供することを目的とする。
第1の案では、コンピュータに、記憶装置に対してデータの読み書き命令を実行するソフトウェアに、前記読み書き命令を含む所定の処理を実行させて、当該所定の処理実行時に、前記記憶装置への書き込み命令が行われ、かつ、該書き込み命令後に読出し命令が行われるデータを特定する情報を記憶部に記憶する処理を実行させる。コンピュータに、前記情報を前記記憶部に記憶した後に前記所定の処理を前記ソフトウェアに実行させた際に、当該所定の処理時に書き込み命令を受けたデータのうち、前記記憶部に記憶される情報に基づき特定されるデータを前記記憶装置に記憶する処理を実行させる。
1実施形態によれば、検証精度の低下を抑制することができる。
図1は、実施例1に係る検証装置を説明する図である。 図2は、実施例1に係る検証装置の機能構成を示す機能ブロック図である。 図3は、リード領域テーブルに記憶される情報の例を示す図である。 図4は、ワークテーブルに記憶される情報の例を示す図である。 図5は、ワークファイルの生成を説明する図である。 図6は、リード領域を特定する処理の流れを示すフローチャートである。 図7は、リード領域の割合を算出する処理の流れを示すフローチャートである。 図8は、ワークファイルを生成する処理の流れを示すフローチャートである。 図9は、実施例1に係る検証処理の流れを示すフローチャートである。 図10は、実施例2に係るワークファイルの構成変更を説明する図である。 図11は、実施例2に係る検証装置の機能構成を示す機能ブロック図である。 図12は、使用期間テーブルを説明する図である。 図13は、使用期間を抽出する処理の流れを示すフローチャートである。 図14は、使用期間テーブルの生成処理の流れを示すフローチャートである。 図15は、使用期間テーブルの生成処理の流れを示すフローチャートである。 図16は、ワークファイルの構成を変更する処理の流れを示すフローチャートである。 図17は、実施例2に係るワークファイルの構成変更の具体例を説明する図である。 図18は、待ち時間を算出する処理の流れを示すフローチャートである。 図19は、待ち時間テーブルの例を示す図である。 図20は、ハードウェア構成例を示す図である。
以下に、本願の開示する制御プログラム、制御方法および制御装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
[全体構成]
図1は、実施例1に係る検証装置を説明する図である。図1に示す検証装置10は、ソフトウェアの開発段階において、ソフトウェアが正常に動作するかを検証するサーバなどの装置である。
まず、検証装置10は、検証データ生成用プログラムを実行して、ストレージ装置50に検証用の検証データを生成する。具体的には、検証装置10は、所定の処理を実行する検証対象プログラムと同様の処理を実行する検証データ生成用プログラムを実行する。検証データ生成用プログラムは、ストレージ装置50がOS等の情報を管理する管理領域をオープンし、ストレージ装置50のデータ領域に対してデータの書き込みやデータの読出しを実行して、ストレージ装置50の検証データを生成する。
次に、検証装置10は、検証対象プログラムを実行して検証処理を行う。具体的には、検証装置10は、検証用プログラムを実行して、検証用プログラムによって検証対象プログラムに所定の処理を実行させる。検証用プログラムは、検証データ生成用プログラムを同様の処理を実行し、書き込み命令(以下、ライト命令と記載する場合がある)や読出し命令(以下、リード命令と記載する場合がある)を指示するコマンド等を検証対象プログラムに発行する。検証対象プログラムは、検証用プログラムから受け付けたコマンド等にしたがって、ストレージ装置50の管理領域をオープンし、データ領域に対してデータの書き込みや読出しを実行する。
このように、検証装置10は、検証対象プログラムを各開発段階で検証する際に、検証データ生成用プログラムで検証データを生成した後に検証処理を実行する。そして、検証装置10は、書き込みや読出しが正常に終了するか、意図するデータを書き込みまたは読み出すことができるかなどを検証する。なお、実施例では、検証データ生成プログラムと検証対象プログラムとをまとめて「検証対象ソフトウェア」と記載する場合がある。
実施例1に係る検証装置10は、ストレージ装置50に対してデータの読み書き命令を実行する検証対象ソフトウェアに、読み書き命令を含む所定の処理を実行させる。このとき、検証装置10は、当該所定の処理実行時に、ストレージ装置50への書き込み命令が行われ、かつ、該書き込み命令後に読出し命令が行われるデータを特定する情報を記憶部に記憶する。
続いて、検証装置10は、情報を記憶部に記憶した後に所定の処理を検証対象ソフトウェアに実行させた際に、当該所定の処理時にライト命令を受けたデータのうち、記憶部に記憶される情報に基づき特定されるデータをストレージ装置50や検証装置10内のワークファイル等に記憶する。
つまり、検証装置10は、1回目の検証時に検証対象ソフトウェアがライト後にリードするデータを特定し、2回目からは特定したデータに対してだけ実際にライトを実行する。この結果、検証装置10は、検証に要するデータ量を減らし、検証精度も向上させることができる。
[検証装置の機能構成]
図2は、実施例1に係る検証装置の機能構成を示す機能ブロック図である。図2に示すように、検証装置10は、通信制御部11、記憶部12、制御部20を有する。
通信制御部11は、他の装置との通信を制御する処理部であり、例えば、ネットワークインタフェースカードなどである。例えば、通信制御部11は、ストレージ装置50に対してデータのライト命令やリード命令等を送信し、命令の実行結果をストレージ装置50から受信する。
記憶部12は、制御部20が実行するプログラム等を記憶する記憶装置であり、例えばハードディスクやメモリなどである。この記憶部12は、プログラムDB13、リード領域テーブル14、ワークテーブル15、ワークファイル16等を記憶する。
プログラムDB13は、制御部20が実行する各種プログラムを記憶する。例えば、プログラムDB13は、検証データ生成用プログラム、検証対象プログラム、検証用プログラム、リード領域を特定するトレースプログラム、ワークファイル等を作成する準備プログラム等を記憶する。
リード領域テーブル14は、所定の処理実行時に、ストレージ装置50へのライト命令が行われ、かつ、該ライト命令後にリード命令が行われるデータを特定する情報を記憶する。具体的には、リード領域テーブル14は、検証対象ソフトウェアがリード命令を発行してデータを読み出すストレージ装置50の領域を記憶する。
図3は、リード領域テーブルに記憶される情報の例を示す図である。図3に示すように、リード領域テーブル14は、ブロック番号とリードされたか否かを示す情報とを対応付けて記憶する。図3の例では、ブロック番号0、ブロック番号1、ブロック番号64がリードされた領域であることを示している。
一例を挙げると、オフセットが128から1152の領域にデータの書き込みが実行された後、データの読出しが実行された場合、ブロック番号0と1がリード領域として記録(ON)される。同様に、オフセットが6553から6579の領域にデータの書き込みが実行された後、データの読出しが実行された場合、ブロック番号64がリード領域として記録される。
ワークテーブル15は、ワークファイルの情報を記憶する。図4は、ワークテーブルに記憶される情報の例を示す図である。図4に示すように、ワークテーブル15は、ワークファイル16内のブロック番号と、ストレージ装置50において実際に書き込み後に読み出されたブロック番号とを対応付けて記憶する。図4の例では、ワークファイル16内のブロック番号0、1、2がそれぞれストレージ装置15内のブロック番号0、1、64に対応付けられている。
ワークファイル16は、検証対象ソフトウェアが検証処理時にデータの書き込みを実行し、書き込み後に読出しを実行した領域を記憶する一時領域である。すなわち、ワークファイル16は、検証対象ソフトウェアが検証処理時にリードする領域を連続領域で記憶する。
上記例で説明すると、ワークファイル16は、ブロック番号0の領域に、ストレージ装置50のブロック番号0に対応する領域に記憶されていたデータを記憶する。同様に、ワークファイル16は、ブロック番号2の領域に、ストレージ装置50のブロック番号64に対応する領域に記憶されていたデータを記憶する。
制御部20は、プロセッサなどであり、検証データ生成部21、特定部22、ワークファイル生成部23、検証実行部24を有する。なお、各処理部は、電子回路の一例やプロセッサが実行するプロセスなどの一例である。
検証データ生成部21は、検証対象の検証データを生成する処理部である。例えば、検証データ生成部21は、検証対象プログラムの検証を実行する前に、検証対象プログラムと同じ処理を実行する検証データ生成用プログラムをプログラムDB13から読み出して実行する。
1回目の実行時には、検証データ用生成プログラムは、ストレージ装置50に対して、管理領域のオープン、データ領域へのデータ書き込みやデータ読み出しを実行して、検証データを生成する。2回目以降は、応答制御部24bによって応答が制御される。
特定部22は、検証対象ソフトウェアが読み出すデータの領域を特定する処理部である。例えば、特定部22は、1回目の検証データ生成用プログラムの動作を監視し、検証データ生成用プログラムがデータを書き込んだ後に読出したデータの領域を特定する。そして、特定部22は、特定した領域の情報をリード領域テーブル14に格納する。
同様に、特定部22は、ソフトウェア実行部24aが実行した1回目の検証対象プログラムの動作を監視し、検証対象プログラムがデータを書き込んだ後に読出したデータの領域を特定する。そして、特定部22は、特定した領域の情報をリード領域テーブル14に格納する。
なお、ここでは、検証前に検証データ生成用プログラムを実行してテストデータを生成する例を説明したが、検証データ生成用プログラムを用いない検証手法においても適用することができる。その場合、ストレージ装置50にはすでに検証データが生成されているので、特定部22は、初回の検証対象プログラムの処理を監視し、ストレージ装置50から読み出されるデータの領域を特定する。
ワークファイル生成部23は、リード領域テーブル14に格納された情報に基づいて、ワークファイル16を生成する処理部である。具体的には、ワークファイル生成部23は、リード領域テーブル14を参照して、リードされた順に、リードされた領域にワークファイル上のブロック番号を割り振って、ワークテーブル15を生成する。
そして、ワークファイル生成部23は、ワークテーブル15を参照して、ワークファイル16内に、リードされたストレージ装置50の領域を割り当てる。すなわち、ワークファイル生成部23は、ワークファイル16内に、検証データ生成用プログラムまたは検証対象プログラムがストレージ装置50からリードしたデータを格納する。
ここで、ワークファイルの生成の一例を説明する。図5は、ワークファイルの生成を説明する図である。図5に示すように、検証装置10は、アクセステーブルとブロックテーブルとを記憶部12等に保持する。アクセステーブルは、検証対象ソフトウェアごとに、検証対象ソフトウェアがアクセスするファイル名を記憶する。ブロックテーブルは、検証対象ソフトウェアがアクセスするファイル名ごとに、ブロック数とリード対象のブロック数とを記憶する。
また、アクセステーブルの各ファイルは、ポインタによってブロックテーブルに関連付けられており、ブロックテーブルの各ファイル名は、ポインタによってリード領域テーブル14に関連付けられている。なお、各テーブルは、管理者等が事前に生成してもよく、制御部20が各プログラムを解析して生成することもできる。また、各テーブルは、記憶部12等に記憶される。
このような状態において、特定部22は、検証対象ソフトウェアが実行されると、検証対象ソフトウェアがアクセスするファイル名をアクセステーブルから検索し、検索された各ファイルのブロック数とリード対象のブロック数とをブロックテーブルから特定する。そして、特定部22は、検証対象ソフトウェアがアクセスするブロック総数の合計とリード対象のブロック総数の合計とから、リード対象領域の割合を算出する。これは、必要に応じて、テスト実施者がテストプログラムの実行単位をさらに分割または実行単位にまとめることを行う場合に使用できる。なお、特定部22は、テストプログラムごと、または、分割したテストプログラムごとにディスクの使用率をディスプレイ等に表示させることもできる。
図5の例では、特定部22は、検証対象ソフトウェアがアクセスするブロックの総数が150個、そのうちリード対象のブロック総数が20となり、リードされるブロックの割合を「20/150×100≒13%」と算出する。
さらに、特定部22は、各ファイルへのアクセスを監視して、リードされたブロック番号にフラグ(ON)を立てる。図5の例では、特定部22は、ファイル名「/urawa/ponte/eme10」について、ブロック番号1、12、13、22、50がリードされたことを検出している。
その後、ワークファイル生成部23は、リードされた領域にワークファイル16上のブロック番号を割り振って、ワークテーブル15を生成し、ワークファイル16内に、リードされたストレージ装置50の領域を割り当てる。
図5の例では、ワークファイル生成部23は、ストレージ装置50のブロック1、12、13、22、50に、ワークファイル16内のブロック番号1、2、3、4、5を割り振る。そして、ワークファイル生成部23は、ストレージ装置50のブロック1、12、13、22、50の各領域に記憶されるデータを、ワークファイル16内に領域が連続するように格納する。
図2に戻り、検証実行部24は、ソフトウェア実行部24aと応答制御部24bとを有し、これらによって、検証対象プログラムの動作を検証する処理部である。
ソフトウェア実行部24aは、検証対象プログラムを実行する処理部である。具体的には、ソフトウェア実行部24aは、検証データ生成部21による検証データ生成プログラムの実行が完了した場合に、検証用プログラムをプログラムDB13から読み出して実行する。検証用プログラムは、プログラムDB13に記憶される検証対象プログラムに対して、データの書き込みや読出しを実行する。
応答制御部24bは、1回目の検証時にストレージ装置50へのアクセスを実行し、2回目以降の検証時は、ワークファイル16を利用した応答制御を実行する処理部である。
具体的には、応答制御部24bは、1回目の検証時、すなわち1回目の検証対象ソフトウェアの実行時には、各プログラムのアクセス要求をストレージ装置50に対して実行して、その結果を応答する。ここで、アクセス要求とは、管理領域へのオープン要求、データ書き込み命令、データ読出し命令などである。
また、応答制御部24bは、2回目の検証時、すなわち2回目の検証対象ソフトウェアの実行時には、リード領域テーブル14を参照して応答を制御する。例えば、応答制御部24bは、検証対象ソフトウェアから管理領域へのオープン要求を受け付けた場合には、パススルーさせて、ストレージ装置50へ当該要求を送信する。
また、応答制御部24bは、検証対象ソフトウェアからワークテーブル15に記憶されない領域へのライト命令を受け付けた場合、ライト命令が正常に終了したことを検証対象ソフトウェアに応答する。つまり、応答制御部24bは、実際の書き込みを実行せずに、応答の送信だけを実行する。
また、応答制御部24bは、検証対象ソフトウェアからワークテーブル15に記憶される領域へのライト命令を受け付けた場合、ワークファイル16に対してデータの書き込みを実行し、その結果を応答する。例えば図4の例で説明すると、応答制御部24bは、ストレージ装置50上のブロック番号64へのライト命令を受信すると、ワークファイル16上のブロック番号2の領域にデータの書き込みを実行する。
また、応答制御部24bは、検証対象ソフトウェアからワークテーブル15に記憶されない領域へのリード命令を受け付けた場合、リード命令が正常に終了したことを検証プログラムに応答する。つまり、応答制御部24bは、実際の読出しを実行せずに、応答の送信だけを実行する。
また、応答制御部24bは、検証対象ソフトウェアからワークテーブル15に記憶される領域へのリード命令を受け付けた場合、ワークファイル16に対してデータの読出しを実行し、読み出したデータを検証対象ソフトウェアに応答する。例えば図4の例で説明すると、応答制御部24bは、ストレージ装置50上のブロック番号10487に対するリード命令を受信すると、ワークファイル16上のブロック番号3の領域に記憶されるデータを読み出して、検証対象ソフトウェアに応答する。
[処理の流れ]
次に、各処理部が実行する処理の流れについて説明する。ここでは、リード領域の特定処理、リード領域の割合を算出する処理、ワークファイルを生成する処理、検証処理の各処理について説明する。
(リード領域の特定処理)
図6は、リード領域を特定する処理の流れを示すフローチャートである。このフローチャートを実行することで、上記アクセステーブルやリード領域テーブル14が生成される。
図6に示すように、特定部22は、実行された検証対象ソフトウェアからデータアクセスを取得すると、当該データアクセスの種別を取得し(S101)、当該種別がライト命令であるかを判定する(S102)。
そして、特定部22は、ライト命令であると判定した場合(S102:Yes)、ディスクドライバへライト命令の実行を依頼し(S103)、ライト命令の復帰値をセットして呼出元に戻る(S104)。
一方、特定部22は、リード命令であると判定した場合(S102:No)、リード命令のパラメータであるオフセットやサイズから、読出し対象のブロック番号を特定する(S105)。続いて、特定部22は、リード命令のパラメータであるファイルディスクリプター等からファイル名を取得する(S106)。
そして、特定部22は、取得したファイルをキーにしてアクセステーブルを検索し、該当ファイルについてリード領域テーブル14の該当ブロック番号のフィールドをONにする(S107)。なお、特定部22は、リード領域テーブル14に該当するブロック番号がない場合、リード領域テーブル14を拡張して同様の処理を実行する。
その後、特定部22は、ディスクドライバへリード命令の実行を依頼し(S108)、リード命令の復帰値をセットして呼出元に戻る(S109)。
(リード領域の割合算出処理)
図7は、リード領域の割合を算出する処理の流れを示すフローチャートである。図7に示すように、特定部22は、ファイルに関するカウンターであるjに1をセットし(S201)、リード領域テーブル14を読み込む(S202)。続いて、特定部22は、変数であるwork1とwork2のそれぞれに1を設定する(S203)。
その後、特定部22は、ブロック番号の通番であるkに1を設定して(S204)、リード領域テーブル14(j,k)の値がONか否かを判定する(S205)。
ここで、特定部22は、リード領域テーブル(j,k)がONではない場合(S205:No)、work2にwork2+1の値を設定する(S206)。一方、特定部22は、リード領域テーブル(j,k)がONである場合(S205:Yes)、work1にwork1+1の値を設定する(S207)。
その後、特定部22は、kにk+1の値を代入し(S208)、ファイルの終端か否かを判定し(S209)、ファイルの終端ではない場合(S209:No)、S205に戻って以降を繰り返す。
一方、特定部22は、ファイルの終端である場合(S209:Yes)、リード対象ブロック数(i)にwork1の値を設定し(S210)、ブロック総数(i)にwork2の値を設定する(S211)。
その後、特定部22は、リード対象ブロック数(i)とブロック総数(i)とをブロックテーブルに格納した後(S212)、jにj+1の値を設定し(S213)、jがファイルの総数を超えているかを判定する(S214)。
そして、特定部22は、jがファイルの総数を超えていない場合(S214:No)、S202に戻って以降を繰り返す。一方、特定部22は、jがファイルの総数を超えている場合(S214:Yes)、全ファイルに関するリード対象ブロック数とブロック総数とから、リード対象ブロック数の割合を算出して、ブロックテーブルに格納する(S215)。すなわち、特定部22は、検証対象ソフトウェアがアクセスするブロック数のうちリード対象ブロック数の割合を算出する。
(ワークファイルの生成処理)
図8は、ワークファイルを生成する処理の流れを示すフローチャートである。図8に示すように、ワークファイル生成部23は、ファイルに関するカウンターであるjに1をセットし(S301)、リード領域テーブル(j,k)をコピーする(S302)。なお、kは、ブロック番号の通番、すなわちファイル位置に関するカウンターである。
続いて、ワークファイル生成部23は、変数wに1を代入し(S303)、変数kに1を代入し(S304)、リード領域テーブル(j,k)の値がONか否かを判定する(S305)。
そして、ワークファイル生成部23は、リード領域テーブル(j,k)の値がONである場合(S305:Yes)、ワークテーブル(j,w)にkの値を設定し、wにw+1の値を設定する(S306)。一方、ワークファイル生成部23は、リード領域テーブル(j,k)の値がONではない場合(S305:No)、S306を実行せずにS307を実行する。
その後、ワークファイル生成部23は、kにk+1の値を設定し(S307)、ファイルの終端か否かを判定し(S308)、ファイルの終端ではない場合(S308:No)、S305に戻って以降を繰り返す。
一方、ワークファイル生成部23は、ファイルの終端である場合(S308:Yes)、jにj+1の値を設定し(S309)、jがファイルの総数を超えているかを判定する(S310)。
そして、ワークファイル生成部23は、jがファイルの総数を超えていない場合(S310:No)、S303に戻って以降を繰り返す。
一方、ワークファイル生成部23は、jがファイルの総数を超えている場合(S310:Yes)、上述した処理で生成されたワークテーブル15にしたがって、ワークファイル16を生成する(S311)。その後、実行回数が2回目以降となる検証対象ソフトウェアが起動される(S312)。
(検証処理)
図9は、実施例1に係る検証処理の流れを示すフローチャートである。この処理は、検証対象ソフトウェアによるファイルアクセスが発生するたびに実行される。図9に示すように、応答制御部24bは、検証対象ソフトウェアから命令を受け付けると、当該命令の種別がリード命令か否かを判定する(S401)。
そして、応答制御部24bは、リード命令であると判定した場合(S401:Yes)、リード命令のパラメータであるファイルディスクリプター等からファイル名を取得する(S402)。続いて、応答制御部24bは、ファイル名をキーにしてアクセステーブルを参照してファイル番号を特定する(S403)。
その後、応答制御部24bは、リード命令のパラメータであるオフセットやサイズから、リード対象のブロック番号を特定する(S404)。そして、応答制御部24bは、特定したストレージ装置50のブロック番号をキーにしてワークテーブル15を検索し、リード対象のワークファイル16上のブロック番号を特定する(S405)。
続いて、応答制御部24bは、動作モードがリード待ちモードであるかを判定する(S406)。なお、動作モードについては実施例3で詳細に説明する。
そして、応答制御部24bは、動作モードがリード待ちモードである場合(S406:Yes)、特定したファイル番号が最後のファイル番号を示すラストファイル番号であるかを判定する(S407)。
ここで、応答制御部24bは、特定したファイル番号が最後のファイル番号を示すラストファイル番号ではない場合(S407:No)、S408を実行する。すなわち、応答制御部24bは、元のファイルにおいてリード対象のブロックの先頭にあたるブロック番号を「先頭ブロック−org(i)」にセットし、ワークファイル16における先頭にあたるブロック番号を「先頭ブロック−work(i)」にセットする。
さらに、応答制御部24bは、「ラストブロック−work(i)」が「先頭ブロック−work(i)」の次のブロックである場合(S409:Yes)、S410を実行する。すなわち、応答制御部24bは、「ラストブロック−org(i)」が「先頭ブロック−org(i)」の次のブロックではないか否かを判定する。
ここで、応答制御部24bは、「ラストブロック−org(i)」が「先頭ブロック−org(i)」の次のブロックではないと判定した場合(S410:Yes)、一定時間待機する(S411)。その後、応答制御部24bは、ワークファイル16の該当ブロックに対するリード命令をドライバへ依頼する(S412)。
そして、応答制御部24bは、動作モードがリード待ちモードである場合(S413:Yes)、S414を実行する。すなわち、応答制御部24bは、元のファイルにおいてリード対象のブロックの最後にあたるブロック番号を「ラストブロック−org(i)」にセットし、ワークファイル16における最後にあたるブロック番号を「ラストブロック−work(i)」にセットする。
そして、応答制御部24bは、ラストファイル番号にファイル番号をセットし(S415)、リード命令の復帰値をセットして呼出元に戻る(S416)。
なお、S406において、応答制御部24bは、動作モードがリード待ちモードではない場合(S406:No)、S407からS411を実行することなく、S412を実行する。
また、S407において、応答制御部24bは、特定したファイル番号が最後のファイル番号を示すラストファイル番号であると判定した場合(S407:Yes)、S408からS411を実行することなく、S412を実行する。
また、S409において、応答制御部24bは、「ラストブロック−work(i)」が「先頭ブロック−work(i)」の次のブロックではないと判定した場合(S409:No)、S410とS411を実行することなく、S412を実行する。
同様に、S410において、応答制御部24bは、「ラストブロック−org(i)」が「先頭ブロック−org(i)」の次のブロックであると判定した場合(S410:No)、S411を実行することなく、S412を実行する。
また、S413において、動作モードがリード待ちモードではないと判定した場合(S413:No)、S414およびS415を実行することなく、S416を実行する。
一方で、S401において、応答制御部24bは、ライト命令であると判定した場合(S401:No)、ライト命令のパラメータであるファイルディスクリプター等からファイル名を取得する(S417)。続いて、応答制御部24bは、ファイル名をキーにしてアクセステーブルを参照してファイル番号を特定する(S418)。
その後、応答制御部24bは、ライト命令のパラメータであるオフセットやサイズから、ライト対象のブロック番号を特定する(S419)。そして、応答制御部24bは、特定したストレージ装置50のフロック番号をキーにしてリード領域テーブル14を参照して、ONになっているブロック番号が含まれているかを判定する(S420)。
ここで、応答制御部24bは、ONになっているブロック番号が含まれていない場合(S420:No)、そのまま処理を終了する。つまり、応答制御部24bは、ライト対象の領域がその後にリードされない領域であることから、データの書き込みを実行したように見せかける。
一方、応答制御部24bは、ONになっているブロック番号が含まれている場合(S420:Yes)、特定したストレージ装置50のフロック番号をキーにしてワークテーブル15を検索し、ライト対象のワークファイル16上のブロック番号を特定する(S421)。
続いて、応答制御部24bは、動作モードがライト待ちモードであるかを判定する(S422)。なお、動作モードについては実施例3で詳細に説明する。
そして、応答制御部24bは、動作モードがライト待ちモードである場合(S422:Yes)、特定したファイル番号が最後のファイル番号を示すラストファイル番号であるかを判定する(S423)。
ここで、応答制御部24bは、特定したファイル番号が最後のファイル番号を示すラストファイル番号ではない場合(S423:No)、S424を実行する。すなわち、応答制御部24bは、元のファイルにおいてライト対象のブロックの先頭にあたるブロック番号を「先頭ブロック−org(i)」にセットし、ワークファイル16における先頭にあたるブロック番号を「先頭ブロック−work(i)」にセットする。
さらに、応答制御部24bは、「ラストブロック−work(i)」が「先頭ブロック−work(i)」の次のブロックである場合(S425:Yes)、S426を実行する。すなわち、応答制御部24bは、「ラストブロック−org(i)」が「先頭ブロック−org(i)」の次のブロックではないか否かを定する。
ここで、応答制御部24bは、「ラストブロック−org(i)」が「先頭ブロック−org(i)」の次のブロックではないと判定した場合(S426:Yes)、一定時間待機する(S427)。その後、応答制御部24bは、ワークファイル16の該当ブロックに対するライト命令をドライバへ依頼する(S428)。
そして、応答制御部24bは、動作モードがライト待ちモードである場合(S429:Yes)、S430を実行する。すなわち、応答制御部24bは、元のファイルにおいてライト対象のブロックの最後にあたるブロック番号を「ラストブロック−org(i)」にセットし、ワークファイル16における最後にあたるブロック番号を「ラストブロック−work(i)」にセットする。
そして、応答制御部24bは、ラストファイル番号にファイル番号をセットし(S431)、ライト命令の復帰値をセットして呼出元に戻る(S432)。
なお、S422において、応答制御部24bは、動作モードがライト待ちモードではない場合(S422:No)、S423からS427を実行することなく、S428を実行する。
また、S423において、応答制御部24bは、特定したファイル番号が最後のファイル番号を示すラストファイル番号であると判定した場合(S423:Yes)、S424からS427を実行することなく、S428を実行する。
また、S425において、応答制御部24bは、「ラストブロック−work(i)」が「先頭ブロック−work(i)」の次のブロックではないと判定した場合(S425:No)、S426とS427を実行することなく、S428を実行する。
同様に、S426において、応答制御部24bは、「ラストブロック−org(i)」が「先頭ブロック−org(i)」の次のブロックであると判定した場合(S426:No)、S427を実行することなく、S428を実行する。
また、S429において、動作モードがリード待ちモードではないと判定した場合(S429:No)、S430およびS431を実行することなく、S432を実行する。
[効果]
このように、検証装置10は、検証対象ソフトウェアの初回の実行の際に、検証対象ソフトウェアがアクセスする各ファイルのリード対象となる位置を記録し、記録した内容を基に該当領域サイズ分のワークファイル16を生成する。そして、検証装置10は、2回目以降に検証対象ソフトウェアを実行する際には、リード対象となる領域へのライトやリードなどのアクセスの際に実際のファイルではなく、ワークファイル16へアクセスする。
したがって、検証装置10は、検証時に使用するストレージ装置の記憶容量を削減してソフトウェアの動作検証を行なう場合の、検証精度の低下を抑止できる。
また、検証装置10は、ソフトウェアのエンハンスやパッチ提供時において、大容量のディスクをその都度用意せずに、また、常時用意しておくことなく、検証処理が実行できる。このため、開発期間で保持するトータルの設備として、ディスク装置の削減が可能である。
また、検証装置10は、テスト実行前に大容量のテストデータを作成するケースにおいて、テストデータ作成にかかる時間を大幅に短縮できる。また、検証装置10は、テストデータ生成を行うプログラムで読出し命令を行う領域のみディスクに対する書き込みを行う。従って、2回目以降のデータ生成に関する大半の書き込み命令はディスクへの書き込みを行わないので、テストの準備時間がほとんどかからない。このため、トータルの実行時間は、従来手法に比べ、大幅に短縮できる。さらに、使用するディスク容量が削減させることにより、ストレージ装置の台数についても2回目以降では削減できる。
ところで、実施例1では、複数の検証対象ソフトウェアを順次実行する場合、各検証対象ソフトウェアがリードする全領域を有するワークファイル16を用意することになるが、これに限定されるものではなく、ワークファイル16の容量を削減することもできる。
そこで、実施例2では、検証装置10が、未実行の検証対象ソフトウェアに対応する領域のワークファイル16を用意して、検証対象ソフトウェアを順次実行することで、ワークファイル16の容量を削減する例を説明する。なお、実施例2では、検証対象ソフトウェア1、検証対象ソフトウェア2、検証対象ソフトウェア3を順に検証するものとする。
[処理の説明]
図10は、実施例2に係るワークファイルの構成変更を説明する図である。検証装置10は、検証対象プログラム1の検証を実行する場合、検証対象ソフトウェア1がリードする領域を有するワークファイル16を生成して、検証を実行する。
その後、検証装置10は、検証対象プログラム2の検証を実行する場合、ワークファイル16の構成を変更する準備プログラムを実行する。そして、検証装置10は、検証対象ソフトウェア2がリードする領域を有するように、ワークファイル16の構成を変更してから、検証を実行する。
このようにすることで、検証装置10は、1つの検証対象プログラムの検証完了後、以降の検証対象プログラムがリードする領域を有するようにワークファイル16の構成を変更することで、ワークファイル16の容量を削減することができる。
[機能構成]
図11は、実施例2に係る検証装置の機能構成を示す機能ブロック図である。なお、実施例1と同様の機能については、図2と同一符号を付し、詳細な説明を省略する。ここでは、使用期間テーブル17、使用期間調査部25、ワークファイル構成部26について説明する。
使用期間テーブル17は、ストレージ装置50の各ブロックがどの検証対象ソフトウェアからどの検証対象ソフトウェアまで使用されるかを示す情報を記憶するテーブルである。図12は、使用期間テーブルを説明する図である。図12に示すように、使用期間テーブル17は、リード領域テーブル14とライトされた領域を記憶するライト領域テーブルとを用いて生成される。なお、ライト領域テーブルは、記憶部12等に格納されている。
図12の例では、ブロック番号1およびブロック番号2は、検証対象ソフトウェア1にリードおよびライトされる。ブロック番号3は、検証対象ソフトウェア1と検証対象ソフトウェア3にリードされ、検証対象ソフトウェア1と検証対象ソフトウェア2にライトされる。ブロック番号4は、いずれの検証対象ソフトウェアにもリードもライトもされない。
ブロック番号5は、検証対象ソフトウェア2にリードされ、検証対象ソフトウェア1と検証対象ソフトウェア2にライトされる。ブロック番号6は、検証対象ソフトウェア2と検証対象ソフトウェア3にリードおよびライトされる。ブロック番号7−9は、いずれの検証対象ソフトウェアにもリードもライトもされない。
この結果、使用期間テーブル17には、ブロック番号1については検証対象ソフトウェア1で使用が開始されて使用が終了することから、ブロック番号1に対応付けて「始&終」がセットされる。同様に、使用期間テーブル17には、ブロック番号2については検証対象ソフトウェア1で使用が開始されて使用が終了することから、ブロック番号1に対応付けて「始&終」がセットされる。
また、ブロック番号3については検証対象ソフトウェア1で使用が開始されて、検証対象ソフトウェア3で使用が終了すると判定する。この結果、使用期間テーブル17には、ブロック番号1に対応付けて「始」、ブロック番号2に対応付けて「中」、ブロック番号3に対応付けて「終」がセットされる。
また、ブロック番号5については検証対象ソフトウェア1で使用が開始されて、検証対象ソフトウェア2で使用が終了すると判定する。この結果、使用期間テーブル17には、ブロック番号1に対応付けて「始」、ブロック番号2に対応付けて「終」がセットされる。
また、ブロック番号6については検証対象ソフトウェア2で使用が開始されて、検証対象ソフトウェア3で使用が終了すると判定する。この結果、使用期間テーブル17には、ブロック番号2に対応付けて「始」、ブロック番号3に対応付けて「終」がセットされる。
使用期間調査部25は、各検証対象ソフトウェアがリードする領域やライトする領域に基づいて、ストレージ装置50の各ブロックが使用される期間を特定する処理部である。例えば、特定部22は、実施例1と同様の手法でリード領域テーブル14を生成し、リード領域テーブル14と同様の手法で、図12に示したライト領域テーブルを生成する。そして、使用期間調査部25は、図12で説明した手法で、リード領域テーブル14およびライト領域テーブルの情報にしたがって使用期間テーブル17を生成する。
ワークファイル構成部26は、検証対象ソフトウェアの検証が完了すると、次以降の検証対象ソフトウェアに対応するワークファイル16を生成する処理部である。例えば、ワークファイル構成部26は、検証実行部24から検証の順番の指定を受け付ける。
そして、ワークファイル構成部26は、検証対象ソフトウェア1の実行開始指示を検証実行部24から受け付けると、検証対象ソフトウェア1、2、3のそれぞれで使用される領域を有するワークファイル16を生成する。
検証対象ソフトウェア1の実行が完了し、ワークファイル構成部26は、検証対象ソフトウェア2の実行開始指示を検証実行部24から受け付けると、検証対象ソフトウェア2、3で使用される領域を有するワークファイル16を生成する。このようにして、ワークファイル構成部26は、検証対象ソフトウェアが実行されるタイミングで、ワークファイル16を生成する。なお、特定部22は、実施例1と同様に、検証対象ソフトウェア1、検証対象ソフトウェア2、検証対象ソフトウェア3のそれぞれの検証対象ソフトウェアがアクセスするブロック総数の合計、リード対象のブロック総数の合計、リード対象領域の割合を算出する。これらの値をもとにして、検証対象ソフトウェアを分割することにより、ワークファイル16の容量を削減することもできる。
[処理の流れ]
次に、実施例2で実行される各処理について説明するが、検証処理については実施例1と同様の処理なので、詳細な説明は省略する。
(使用期間の抽出処理)
図13は、使用期間を抽出する処理の流れを示すフローチャートである。ここでは、検証対象ソフトウェア1に対して実行する例を説明するが、他の検証対象ソフトウェアについても同様に実行される。なお、このフローチャートを実行することで、上記アクセステーブル、リード領域テーブル14、ライト領域テーブルが生成される。
図13に示すように、特定部22は、検証対象ソフトウェア1が実行されると、検証対象ソフトウェア1を特定するカウンターiに1を代入し(S501)、ファイルに関するカウンターjに1を代入する(S502)。
続いて、特定部22は、検証対象ソフトウェア1からデータアクセスを取得すると、当該データアクセスの種別を取得し、当該種別がライト命令であるかを判定する(S503)。
そして、特定部22は、ライト命令と判定した場合(S503:Yes)、ライト領域テーブルを生成する(S504)。具体的には、特定部22は、オフセットとサイズを基に、ライト領域テーブル(i;j,k)の該当ブロック番号にONを設定する。なお、kは、ブロック番号である。
その後、特定部22は、jにj+1を代入した後(S505)、ライト命令の実行をディスクドライバへ依頼し(S506)、S503以降を繰り返す。
一方、S503において、特定部22は、リード命令と判定した場合(S503:No)、リード領域テーブルを生成する(S507)。具体的には、特定部22は、オフセットとサイズを基に、リード領域テーブル(i;j,k)の該当ブロック番号にONを設定する。なお、kは、ブロック番号である。
その後、特定部22は、jにj+1を代入した後(S508)、ライト命令の実行をディスクドライバへ依頼し(S506)、S503以降を繰り返す。
(使用期間テーブルの生成処理)
図14と図15は、使用期間テーブルの生成処理の流れを示すフローチャートである。この処理では、使用期間テーブルとブロックテーブルとを作成する。また、図14では、各テーブルの作成処理をシーケンシャルに実行する例を説明するが、並列に実行することもできる。
図14に示すように、使用期間調査部25は、検証対象ソフトウェアを特定するカウンターiに1を代入し(S601)、ファイルを表すカウンターjに1を代入し(S602)、ブロック番号を表すカウンターkに1を代入する(S603)。
そして、使用期間調査部25は、リード領域テーブル(i;j,k)とライト領域テーブル(i;j,k)とから、該当ブロックに対して最初にライトする検証対象ソフトウェアと最後にリードする検証対象ソフトウェアを特定する(S604)。このとき、使用期間調査部25は、該当する検証対象ソフトウェアの番号を「最初の番号」と「最後の番号」に設定する。
その後、使用期間調査部25は、使用期間テーブル(i;j,k)を生成する(S605)。具体的には、使用期間調査部25は、使用期間テーブル(i;j,k)を初期化する。続いて、使用期間調査部25は、jが最初の番号、最後の番号としたとき、使用期間テーブル(i;k,最初の番号)=“始”、使用期間テーブル(i;k,最後の番号)=“終”と設定する。なお、最初の番号=最後の番号のときは、“始&終”が設定される。
そして、使用期間調査部25は、kにk+1の値を設定し(S606)、kがファイルの終端番号以下の場合(S607:No)、S604以降を繰り返す。
また、使用期間調査部25は、kがファイルの終端番号より大きい場合(S607:Yes)、jにj+1の値を設定し(S608)、jがファイル総数以下の場合(S609:No)、S603以降を繰り返す。つまり、使用期間調査部25は、ファイルの最後のブロック番号である場合、S608を実行する。
また、使用期間調査部25は、jがファイル総数より大きい場合(S609:Yes)、iにi+1の値を設定し(S610)、iが検証対象ソフトウェアの総数以下の場合(S611:No)、S602以降を繰り返す。
その後、図15に示すように、使用期間調査部25は、iが検証対象ソフトウェアの総数より大きい場合(S611:Yes)、iに1を設定し(S612)、jに1を設定し(S613)、使用期間テーブルを読み込む(S614)。
続いて、使用期間調査部25は、変数work1およびwork2のそれぞれに1を設定し(S615)、kに1を設定し(S616)、使用期間テーブル(i;j,k)の値が0か否かを判定する(S617)。つまり、使用期間調査部25は、j番目のファイルのブロック番号kが0か否かを判定する。
そして、使用期間調査部25は、使用期間テーブル(i;j,k)の値が0以外の場合(S617:No)、work1にwork1+1の値を設定し(S618)、kにk+1の値を設定する(S619)。なお、使用期間調査部25は、使用期間テーブル(i;j,k)の値が0である場合(S617:Yes)、S618を実行することなくS619を実行する。
続いて、使用期間調査部25は、ファイルの終端ではない場合(S620:No)、S617以降を繰り返し、ファイルの終端である場合(S620:Yes)、リード対象ブロック数(i)にwork1の値を設定する(S621)。さらに、使用期間調査部25は、ブロック総数(i)にwork2の値を設定する(S622)。
その後、使用期間調査部25は、リード対象ブロック数(i)とブロック総数(i)とをブロックテーブルにセットし(S623)、jにj+1の値をセットする(S624)。そして、使用期間調査部25は、jがファイルの総数を超えない場合(S625:No)、S614以降を繰り返す。
一方、使用期間調査部25は、jがファイルの総数を超える場合(S625:Yes)、全ファイルに関するリード対象ブロック数とブロック総数とから、リード対象ブロック数の割合を算出して、ブロックテーブルに格納する(S626)。なお、S626は、検証対象ソフトウェアごとに実行される。
その後、使用期間調査部25は、iにi+1の値を設定し(S627)、iが検証対象ソフトウェアの総数を超えない場合は(S628:No)、S613以降を繰り返し、
iが検証対象ソフトウェアの総数を超える場合は(S628:Yes)、処理を終了する。
(ワークファイルの構成変更処理)
図16は、ワークファイルの構成を変更する処理の流れを示すフローチャートである。この処理は、複数の検証対象ソフトウェアが順次実行される場合に、各検証対象ソフトウェアの実行前に起動され、図10に示した準備プログラムの処理に該当する。
また、図16では、検証対象ソフトウェアの番号を引数で渡すように制御しているが、呼ばれるたびに自身でカウントアップするように制御することもできる。この処理によって、順次実行される検証対象ソフトウェアに関する実行環境が生成される。つまり、1つ前の検証対象ソフトウェアに関するワークファイルの引き継ぎが実行される。
図16に示すように、ワークファイル構成部26は、変数iに引数(検証対象ソフトウェア)をセットし(S701)、ファイルに関するカウンターjに1を設定する(S702)。
そして、ワークファイル構成部26は、ワークファイル16を読み込み、DATA(r)を生成し(S703)、ワークテーブル(j,b)を読み込む(S704)。なお、r=1、2、・・・、SUM(j)である。SUM(j)は、j番目のワークファイル16のブロック数である。この時点のワークファイル16、ワークテーブルは、前の検証対象ソフトウェアの実行が完了した状態のデータである。
その後、ワークファイル構成部26は、bに1を設定し(S705)、kにワークテーブル(j;b)の値を設定する(S706)。そして、ワークファイル構成部26は、使用期間テーブル(i;j,k)の値を判定する(S707)。
そして、ワークファイル構成部26は、使用期間テーブル(i;j,k)の値が“始”または“始&終”である場合、今回の検証対象ソフトウェアに関するデータをセットする(S708)。具体的には、ワークファイル構成部26は、新DATA(k)に0を設定する。
また、ワークファイル構成部26は、使用期間テーブル(i;j,k)の値が“中”または“終”である場合、前回のワークファイル16の内容をコピーする(S709)。また、ワークファイル構成部26は、使用期間テーブル(i;j,k)の値が空白である場合、何も実行せずにS710を実行する。
その後、ワークファイル構成部26は、リード領域テーブル(j,k)に使用期間テーブル(i;j,k)の値を設定し(S710)、bにb+1の値を設定する(S711)。すなわち、ワークファイル構成部26は、リード領域テーブル14を生成する。
そして、ワークファイル構成部26は、変数bの値がリード対象ブロック数以下の場合(S712:No)、S706以降を繰り返す。
続いて、ワークファイル構成部26は、リード領域テーブル(j,k)からワークテーブル(j,b)を生成する(S713)。つまり、今回の検証対象ソフトウェアの実行時に参照されるワークテーブル15が生成される。なお、b=1、2、・・・、NUM(j)である。
その後、ワークファイル構成部26は、「新DATA(r):r=1、2、・・・、SUM(j)」からワークファイル16へ書き込む(S714)。
そして、ワークファイル構成部26は、jがファイルの総数を超えない場合(S715:No)、S703以降を繰り返す。一方、jがファイルの総数を超える場合(S715:Yes)、ソフトウェア実行部24aが該当する次の検証対象ソフトウェアを実行する(S716)。
[効果]
このように、検証装置10は、次の検証対象ソフトウェアを実行する際に、実行済みの検証対象ソフトウェアしか参照しないワークファイル16の領域を削除し、次以降の検証対象ソフトウェアが参照するワークファイル16を再構成する。その後、検証装置10は、再構成後のワークファイル16を用いて検証処理を実行する。
図17は、実施例2に係るワークファイルの構成変更の具体例を説明する図である。図17に示すように、検証装置10は、検証対象ソフトウェア1の検証時は、4つのブロックを有するワークファイル16を用いて検証する。
そして、検証装置10は、検証対象ソフトウェア1の検証が終了すると、準備プログラムを実行して、ワークファイル16の構成を変更する。この結果、検証装置10は、検証対象ソフトウェア2の検証時は、3つのブロックを有するワークファイル16を用いて検証する。
そして、検証装置10は、検証対象ソフトウェア2の検証が終了すると、準備プログラムを実行して、ワークファイル16の構成を変更する。この結果、検証装置10は、検証対象ソフトウェア3の検証時は、2つのブロックを有するワークファイル16を用いて検証する。
このように、検証装置10は、実行対象の検証対象ソフトウェアの数が減るに連れてワークファイル16が有するブロック数を減らすことができ、ワークファイル16の容量を削減できる。
次に、検証装置10は、より実動環境に近づけるために、リードやライトの応答を送信する際に、待ち時間を設けることができる。
[処理の説明]
具体的には、以下の条件では、実際にファイルアクセスを行う場合とワークファイル16にアクセスする場合で、ディスクから完了が返るタイミングが異なる。
(条件)続けて同じファイルへのアクセスを行う かつ 直前のアクセスが実際のファイルアクセスでは離れた領域へアクセスを行う かつ ワークファイル上では連続した領域である。
そこで、検証装置10は、この条件に合致する場合は、アクセスを行う前に一定時間の待ちを入れることで実動環境に近づける。なお、リード命令、ライト命令のそれぞれに待ち時間を入れるかどうかについて、検証者に指定させることもできる。実施例では、この検証者の指定を動作モードと呼ぶ。
検証装置10は、検証対象ソフトウェアとは別に、予めサイズを定義したダミーファイルのリード命令およびライト命令を行う性能情報取得プログラムを用いる。性能情報取得プログラムでは、以下のように2つのダミーファイルを用意しておき、それぞれ同じサイズの連続した領域と、離れた領域に対するリード命令とライト命令を行い、その差を測定する。
例えば、検証装置10は、ストレージ装置50に格納されるダミーファイルXの先頭から「サイズ」分のリード命令またはライト命令を実施し、実行時間を計測する。続いて、検証装置10は、「サイズ」分だけオフセットをずらし、「サイズ」分のリード命令またはライト命令を実施し、実行時間を計測する。検証装置10は、上記処理を例えばn回など所定回数繰り返し、計測したn回の測定値の平均として「測定値1」を算出する。
次に、検証装置10は、ストレージ装置50に格納されるダミーファイルYの先頭から「サイズ」分のリード命令またはライト命令を実施し、実行時間を計測する。続いて、検証装置10は、「サイズ」×2だけオフセットをずらし、「サイズ」分のリード命令またはライト命令を実施し、実行時間を計測する。検証装置10は、上記処理を例えばn回など所定回数繰り返し、計測したn回の測定値の平均として「測定値2」を算出する。
その後、検証装置10は、「待ち時間 = 測定値2 − 測定値1」を算出する。そして、検証装置10は、ライト命令やリード命令に対して応答を送信する場合、待ち時間経過後に応答を送信する。なお、ダミーファイルXとダミーファイルYは、同じファイルであってもよい。
[処理の流れ]
図18は、待ち時間を算出する処理の流れを示すフローチャートである。この処理は、上記性能情報取得プログラムが実行する処理である。また、ここでは、一例として、リード命令について説明するが、ライト命令に対しても同様に処理することができる。
図18に示すように、検証装置10の検証実行部24は、サイズに1Mbyteを設定し(S801)、ダミーファイル1をオープンし(S802)、オフセットに0をセットする(S803)。
そして、検証実行部24は、変数iに1を設定した後(S804)、オフセットにオフセット+サイズ×iの値を設定し(S805)、時刻を取得して開始時刻にセットする(S806)。続いて、検証実行部24は、オフセットやサイズをパラメータとしてダミーファイル1をリードする(S807)。
そして、検証実行部24は、ダミーファイル1をリードした時刻を終了時刻にセットし(S808)、「リード時間(i)=終了時刻−開始時刻」を算出する(S809)。その後、検証実行部24は、iにi+1の値を設定し(S810)、iが予め定めた繰り返し回数を示す定数以下の場合(S811:No)、S805以降を繰り返す。
一方、検証実行部24は、iが予め定めた繰り返し回数を示す定数よりも大きい場合(S811:Yes)、平均リード時間(1)を計算する(S812)。
その後、検証実行部24は、ダミーファイル2をオープンし(S813)、オフセットに0をセットし(S814)、変数iに1を設定する(S815)。そして、検証実行部24は、オフセットにオフセット+サイズ×2iの値を設定し(S816)、時刻を取得して開始時刻にセットする(S817)。
続いて、検証実行部24は、オフセットやサイズをパラメータとしてダミーファイル2をリードする(S818)。そして、検証実行部24は、ダミーファイル2をリードした時刻を終了時刻にセットし(S819)、「リード時間(i)=終了時刻−開始時刻」を算出する(S820)。
その後、検証実行部24は、iにi+1の値を設定し(S821)、iが予め定めた繰り返し回数を示す定数以下の場合(S822:No)、S816以降を繰り返す。
一方、検証実行部24は、iが予め定めた繰り返し回数を示す定数よりも大きい場合(S822:Yes)、平均リード時間(2)を計算する(S823)。その後、検証実行部24は、「平均リード時間(2)−平均リード時間(1)」を算出して、「リード待ち時間」に設定する(S824)。
検証実行部24は、上述した処理をリード命令とライト命令について実行することで、図19に示す待ち時間テーブルを生成する。図19は、待ち時間テーブルの例を示す図である。図19に示すように、待ち時間テーブルは、リード待ち時間とライト待ち時間とを記憶する。
図19の例では、応答制御部24bは、検証対象ソフトウェアからリード命令を受け付けた場合、リード命令実行後に150μsec経過してから応答を送信する。また、応答制御部24bは、検証対象ソフトウェアからライト命令を受け付けた場合、ライト命令実行後に120μsec経過してから応答を送信する。なお、待ち時間テーブルは、記憶部12に記憶されている。
[結果]
このように、検証装置10は、待ち時間を設けて応答することができ、ストレージ装置50上で実際にリードまたはライトするので、待ち時間の信頼性も高い。この結果、検証装置10は、より実動環境に近い検証処理を実行できるので、検証精度の向上が図れる。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
(記憶装置)
実施例では、検証装置10は、ストレージ装置50とは異なる記憶装置にワークファイル16を生成する例を説明したが、これに限定されるものではなく、ストレージ装置50内にワークファイル16を生成することもできる。また、検証装置10は、検証装置10の記憶部12やストレージ装置50以外の別の記憶装置にワークファイル16を生成することもできる。
(システム)
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散や統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
(ハードウェア)
図20は、ハードウェア構成例を説明する図である。図20に示すように、検証装置10は、通信インタフェース10a、HDD(Hard Disk Drive)10b、メモリ10c、CPU(Central Processing Unit)10dを有する。また、図20に示した各部は、バス等で相互に接続される。
通信インタフェース10aは、他の装置との通信を制御するインタフェースであり、例えばネットワークインタフェースカードである。HDD10bは、図2等に示した機能を動作させるプログラム、DB、テーブルを記憶する。
CPU10dは、図2等に示した各処理部と同様の処理を実行するプログラムをHDD10b等から読み出してメモリ10cに展開することで、図2等で説明した各機能を実行するプロセスを動作させる。
すなわち、このプロセスは、検証装置10が有する各処理部と同様の機能を実行する。具体的には、CPU10dは、検証データ生成部21、特定部22、ワークファイル生成部23、検証実行部24等と同様の機能を有するプログラムをHDD10b等から読み出す。そして、CPU10dは、検証データ生成部21、特定部22、ワークファイル生成部23、検証実行部24と同様の処理を実行するプロセスを実行する。
このように検証装置10は、プログラムを読み出して実行することで検証方法を実行する情報処理装置として動作する。また、検証装置10は、媒体読取装置によって記録媒体から上記プログラムを読み出し、読み出された上記プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、検証装置10によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
10 検証装置
11 通信制御部
12 記憶部
13 プログラムDB
14 リード領域テーブル
15 ワークテーブル
16 ワークファイル
20 制御部
21 検証データ生成部
22 特定部
23 ワークファイル生成部
24 検証実行部
24a ソフトウェア実行部
24b 応答制御部
25 使用期間調査部
26 ワークファイル構成部

Claims (8)

  1. コンピュータに、
    記憶装置に対してデータの読み書き命令を実行するソフトウェアに、前記読み書き命令を含む所定の処理を実行させて、当該所定の処理実行時に、前記記憶装置への書き込み命令が行われ、かつ、該書き込み命令後に読出し命令が行われるデータを特定する情報を記憶部に記憶し、
    前記情報を前記記憶部に記憶した後に前記所定の処理を前記ソフトウェアに実行させた際に、当該所定の処理時に書き込み命令を受けたデータのうち、前記記憶部に記憶される情報に基づき特定されるデータを前記記憶装置に記憶する
    処理を実行させることを特徴とする制御プログラム。
  2. 前記ソフトウェアの検証に用いるテストデータを前記記憶装置に生成する生成処理をテスト用ソフトウェアに実行させて、当該生成処理時に、前記記憶部に記憶される情報に基づき特定されるデータに対して書き込み命令が実行される場合、前記書き込み命令の対象データを前記記憶装置に書き込む処理を前記コンピュータにさらに実行させることを特徴とする請求項1に記載の制御プログラム。
  3. 前記記憶装置に記憶する処理は、前記所定の処理時に、前記記憶部に記憶される情報に基づき特定されるデータの領域に対する書き込み命令に対しては、当該書き込み命令の対象データを前記記憶装置に書き込んで書き込み結果を応答し、前記記憶部に記憶される情報に基づき特定されるデータ以外の領域に対する書き込み命令に対しては、書き込みの完了を応答することを特徴とする請求項1に記載の制御プログラム。
  4. 前記記憶装置内で隣接する第1の領域と第2の領域に対して、前記第1の領域に対して書き込み命令または読出し命令を実行してから、前記第2の領域に対して書き込み命令または読出し命令の実行完了までにかかる第1の時間を測定し、
    前記記憶装置内で所定の距離離れた第3の領域と第4の領域に対して、前記第3の領域に対して書き込み命令または読出し命令を実行してから、前記第4の領域に対して書き込み命令または読出し命令の実行完了までにかかる第2の時間を測定し、
    前記第1の時間と前記第2の時間との差分時間を算出する処理を前記コンピュータにさらに実行させ、
    前記記憶装置に記憶する処理は、前記書き込み命令または読出し命令を実行してから、前記差分時間経過後に応答することを特徴とする請求項3に記載の制御プログラム。
  5. 前記記憶部に記憶する処理は、複数のソフトウェアに前記所定の処理を実行させて、各ソフトウェアによる前記所定の処理実行時に、前記記憶装置への書き込み命令が行われ、かつ、該書き込み命令後に読出し命令が行われるデータを特定する情報を前記記憶部に記憶し、
    前記記憶装置に記憶する処理は、前記複数のソフトウェアに対して順に前記所定の処理を実行させる際に、実行対象のソフトウェアまたは未実行のソフトウェアが読み出すデータを特定する情報以外の情報を前記記憶部から削除してから実行することを特徴とする請求項1に記載の制御プログラム。
  6. 前記記憶装置に記憶する処理、および、前記記憶部に記憶する処理は、検証処理を実行する検証プログラムを実行し、検証プログラムによって前記ソフトウェアに前記所定の処理を実行させることを特徴とする請求項1に記載の制御プログラム。
  7. コンピュータが、
    記憶装置に対してデータの読み書き命令を実行するソフトウェアに、前記読み書き命令を含む所定の処理を実行させて、当該所定の処理実行時に、前記記憶装置への書き込み命令が行われ、かつ、該書き込み命令後に読出し命令が行われるデータを特定する情報を記憶部に記憶し、
    前記情報を前記記憶部に記憶した後に前記所定の処理を前記ソフトウェアに実行させた際に、当該所定の処理時に書き込み命令を受けたデータのうち、前記記憶部に記憶される情報に基づき特定されるデータを前記記憶装置に記憶する
    処理を実行することを特徴とする制御方法。
  8. 記憶装置に対してデータの読み書き命令を実行するソフトウェアに、前記読み書き命令を含む所定の処理を実行させて、当該所定の処理実行時に、前記記憶装置への書き込み命令が行われ、かつ、該書き込み命令後に読出し命令が行われるデータを特定する情報を記憶部に記憶する第1格納部と、
    前記情報を前記記憶部に記憶した後に前記所定の処理を前記ソフトウェアに実行させた際に、当該所定の処理時に書き込み命令を受けたデータのうち、前記記憶部に記憶される情報に基づき特定されるデータを前記記憶装置に記憶する第2格納部と
    を有することを特徴とする制御装置。
JP2014059018A 2014-03-20 2014-03-20 制御プログラム、制御方法および制御装置 Active JP6252282B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014059018A JP6252282B2 (ja) 2014-03-20 2014-03-20 制御プログラム、制御方法および制御装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014059018A JP6252282B2 (ja) 2014-03-20 2014-03-20 制御プログラム、制御方法および制御装置

Publications (2)

Publication Number Publication Date
JP2015184822A JP2015184822A (ja) 2015-10-22
JP6252282B2 true JP6252282B2 (ja) 2017-12-27

Family

ID=54351306

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014059018A Active JP6252282B2 (ja) 2014-03-20 2014-03-20 制御プログラム、制御方法および制御装置

Country Status (1)

Country Link
JP (1) JP6252282B2 (ja)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3565987B2 (ja) * 1996-05-28 2004-09-15 株式会社ルネサステクノロジ エミュレータ装置
JP4149762B2 (ja) * 2002-08-09 2008-09-17 富士通株式会社 メモリ資源最適化支援方法、プログラム及び装置
WO2013145055A1 (ja) * 2012-03-30 2013-10-03 日本電気株式会社 デバッグ制御回路、方法及びシステム

Also Published As

Publication number Publication date
JP2015184822A (ja) 2015-10-22

Similar Documents

Publication Publication Date Title
JP2014513338A5 (ja) 仮想ディスクの最適圧縮のための方法、コンピュータ可読記憶媒体及びシステム
EP2840495A1 (en) Container-based processing method, device and system
JP6870466B2 (ja) 制御プログラム、制御方法、制御装置、及びデータベースサーバ
US10318479B2 (en) Method and device for automatically identifying junk file
US20120284471A1 (en) Virtual machine disk migration
US8732427B2 (en) Systems and methods for collapsing a derivative version of a primary storage volume
CN112612417B (zh) 数据迁移方法、装置、设备及存储介质
CN107203480B (zh) 一种数据预取方法以及装置
US20180157605A1 (en) Configuration of a memory controller for copy-on-write
CN108475201A (zh) 一种虚拟机启动过程中的数据获取方法和云计算系统
US9588884B2 (en) Systems and methods for in-place reorganization of device storage
CN113064919B (zh) 数据处理方法、数据存储系统、计算机设备及存储介质
JP6252282B2 (ja) 制御プログラム、制御方法および制御装置
CN106775846A (zh) 用于物理服务器的在线迁移的方法及装置
CN111147226A (zh) 数据存储方法、装置及存储介质
JP7326970B2 (ja) バックアップ処理装置、バックアップ処理システム、バックアップ処理方法、及び、バックアップ処理プログラム
CN112433669A (zh) 一种分布式存储卷在线迁移的方法、系统、设备及介质
CN105808318B (zh) 一种信息处理方法和电子设备
JP5692590B2 (ja) リブート、ブート、シャットダウン高速化装置並びにリブート、ブート、シャットダウン高速化方法
JPWO2020065778A1 (ja) 情報処理装置、制御方法、及びプログラム
JPWO2018225747A1 (ja) 分散システム、データ管理装置、データ管理方法、及びコンピュータ読み取り可能な記録媒体
JP6374180B2 (ja) データストレージ装置およびシステム、ならびにデータストレージ方法
JP2015005080A (ja) ソフトウェア管理システムおよび計算機システム
CN109086172B (zh) 一种数据处理的方法以及相关装置
JP5708053B2 (ja) 情報処理装置、デフラグメンテーション方法、およびデフラグメンテーションプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171023

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171031

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171113

R150 Certificate of patent or registration of utility model

Ref document number: 6252282

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150