以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理装置の構成例および処理例を示す図である。情報処理装置1は、所定の情報処理を実行する装置であり、例えば、コンピュータとして実現される。また、情報処理装置1では、自装置の動作を検証するための動作試験が行われる。動作試験は、例えば、情報処理装置1が試験プログラム4を実行することで行われる。
情報処理装置1は、制御部2と記憶部3を有する。記憶部3は、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。記憶部3は、後述する第1の検出値3aを記憶する。
制御部2は、例えば、プロセッサである。プロセッサは、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。また、プロセッサには、複数のプロセッサの集合(マルチプロセッサ)も含まれ得る。
情報処理装置1の動作試験は、第1の期間と、その後の第2の期間とで行われる。第1の期間における動作試験で障害の発生が検知された場合に、第2の期間において、発生した障害を再現するための動作試験が行われる。
動作試験を実行中の第1の期間において、制御部2は、情報処理装置1の負荷状態を監視する(ステップS1)。負荷状態としては、例えば、情報処理装置1が備えるプロセッサの負荷状態や、情報処理装置1の内部のバスの負荷状態が監視される。そして、制御部2は、情報処理装置1の障害発生を検知すると(ステップS2)、情報処理装置1の負荷状態を示す第1の検出値3aを記憶部3に格納する(ステップS3)。
その後、障害再現のための動作試験を実行中の第2の期間において、制御部2は、情報処理装置1の負荷状態を監視して、情報処理装置1の負荷状態を示す第2の検出値を取得する(ステップS4)。負荷状態の監視内容は、第1の期間と同じでよい。制御部2は、記憶部3に格納された第1の検出値3aを読み出し、読み出した第1の検出値3aと、監視によって得られた第2の検出値とを比較する(ステップS5)。そして、制御部2は、第2の検出値が第1の検出値3aに近づくように、情報処理装置1に与える処理負荷を調整する(ステップS6)。例えば、監視により得られる第2の検出値が第1の検出値3aに一致するまで、ステップS4〜S6の処理が繰り返される。
情報処理装置1に与える処理負荷を調整する方法としては、例えば、次のような方法が用いられる。制御部2は、情報処理装置1が備えるプロセッサに実行させるタスク数を増減させる。また、制御部2は、プロセッサに実行させる所定タスクの実行遅延時間を増減する。所定タスクとしては、CPUビジー率を調整するためのダミー処理を実行するタスクを用いることができる。また、制御部2は、情報処理装置1内のバスに接続された入出力回路にこのバスを通じてデータの入出力を実行させるためのコマンドの発行数を増減する。また、制御部2は、コマンドのそれぞれによって入出力が要求されるデータ量を増減する。
制御部2による上記調整処理により、第2の期間では、情報処理装置1の負荷状態が、第1の期間で障害発生が検知されたときの情報処理装置1の負荷状態に近づけられる。これにより、障害の再現試験中の情報処理装置1のハードウェアの状態が、第1の期間で障害発生が検知されたときの情報処理装置1のハードウェアの状態に近くなる。その結果、第1の期間で発生した障害が第2の期間でも発生する可能性が高くなり、障害の再現性を向上できる。障害が再現されやすくなることで、障害の発生箇所や発生原因を正確に特定できる可能性を高くすることができる。
[第2の実施の形態]
次に、第1の実施の形態の情報処理装置1を含むシステムとして、ストレージシステムを例示する。
図2は、第2の実施の形態のストレージシステムを示す図である。第2の実施の形態のストレージシステムは、ストレージ装置100およびホスト装置400,400aを含む。
ストレージ装置100とホスト装置400,400aとの間は、SAS(Serial Attached SCSI)やファイバチャネル(FC:Fibre Channel)などのケーブルを用いて接続されている。このような接続構成をDAS(Direct Attached Storage)と呼ぶこともある。ただし、ストレージ装置100とホスト装置400,400aとをファイバチャネルやiSCSI(Internet Small Computer System Interface)などを用いたSAN(Storage Area Network)を介して接続してもよい。ストレージ装置100をNAS(Network Attached Storage)として用いることもできる。
ストレージ装置100は、CE(Controller Enclosure)110およびDE(Drive Enclosure)120を有する。CE110は、CM(Controller Module)200,200aを有する。CM200,200aは、ホスト装置400,400aからの要求に応じたDE120に対するデータアクセス、ストレージ装置100内のハードウェアモジュールの動作などを制御する。同様の機能を有するCM200,200aが冗長化されていることにより、ホスト装置400,400aからDE120へのアクセス動作の信頼性が高められている。また、CM200,200aは互いに接続されており、例えばキャッシュされたデータや所定の設定データなど、一方のCMに記憶された情報が他方のCMにも記憶されるようになっている。なお、CM200,200aは、第1の実施の形態の情報処理装置1の一例であり、動作試験の対象装置である。
DE120は、HDD300,300a,300bを有する。なお、DE120に搭載されるHDDの数は、3台に限定されるものではない。
ホスト装置400,400aは、ユーザが利用するクライアントコンピュータである。ホスト装置400,400aは、ストレージ装置100に対して、ストレージ装置100のDE120に搭載されたHDD300〜300bに対するアクセスを要求する。
また、CM200,200aには、試験端末500を接続可能になっている。試験端末500は、CM200,200aの動作試験時に、管理者が利用するクライアントコンピュータである。例えば、試験端末500は、CM200,200aで実行される試験を開始するための起動コマンドを送信する。また、試験端末500は、CM200,200aから試験結果を受信する。
図3は、CMのハードウェア例を示す図である。CM200は、マルチコアCPU201、RAM204、PCH(Platform Controller Hub)205、SSD(Solid State Drive)206、読み取り装置207、PCIe(Peripheral Components Interconnect Express)スイッチ208、CA209,209aおよびSASコントローラ210,210aを有する。
マルチコアCPU201には、RAM204が接続されている。マルチコアCPU201には、PCH205を介して、SSD206、読み取り装置207が接続されている。マルチコアCPU201には、PCIeスイッチ208を介して、CA209,209aおよびSASコントローラ210,210aが接続されている。
マルチコアCPU201は、複数のCPUコアおよびDMA(Direct Memory Access)処理部203を含む。図3の例では、マルチコアCPU201は、CPUコア202,202aを含んでいる。CPUコア202,202aは、CM200の情報処理を制御する演算回路である。DMA処理部203は、CPUコア202またはCPUコア202aからの指示に応じて、RAM204に記憶されたデータを他方のCM200aに送信する。
RAM204は、CM200の主記憶装置である。RAM204は、揮発性の半導体メモリである。RAM204は、マルチコアCPU201に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、RAM204は、マルチコアCPU201による処理に用いる各種データを記憶する。
PCH205は、マルチコアCPU201とSSD206、マルチコアCPU201と読み取り装置207、マルチコアCPU201と試験端末500との間で、データを送受信する。また、PCH205には、LAN(Local Area Network)インタフェースが接続されていてもよい。例えば、試験端末500がLANインタフェースに接続され、マルチコアCPU201と試験端末500とが、PCH205およびLANインタフェースを介して通信してもよい。
SSD206は、CM200の補助記憶装置である。SSD206は、不揮発性の半導体メモリである。SSD206には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。CM200は、補助記憶装置として、SSD206の代わりにHDDを備えていてもよい。
読み取り装置207は、可搬型の記録媒体207aに記録されたプログラムやデータを読み取る装置である。記録媒体207aとして、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)を使用できる。また、記録媒体として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。読み取り装置207は、例えば、CPUコア202からの命令に従って、記録媒体から読み取ったプログラムやデータをCPUコア202に送信する。
PCIeスイッチ208は、マルチコアCPU201とCA209,209aおよびSASコントローラ210,210aとの間で、データを送受信する。CA209は、ホスト装置400と通信するためのインタフェースであり、CA209aは、ホスト装置400aと通信するためのインタフェースである。SASコントローラ210,210aは、DE120内のHDDと通信するためのインタフェースである。
なお、CM200aもCM200と同様のハードウェアにより実現できる。
図4は、CMの機能例を示す図である。CM200は、記憶部220、監視部230、試験処理部240、収集部250、解析部260および調整部270を有する。
記憶部220は、例えば、RAM204またはSSD206に確保した記憶領域として実装される。記憶部220は、収集部250、解析部260および調整部270の処理に用いられる情報を記憶する。記憶部220は、管理テーブル、トレーステーブル、解析テーブル、CPUコア調整用テーブル、IO(Input Output)装置調整用テーブルおよび監視テーブルを記憶する。
管理テーブルには、IO装置がどのバスと接続しており、どのCPUコアから命令を受けるかを示す情報が登録されている。ここで、例えば、IO装置とは、DMA処理部203、CA209、SASコントローラ210である。また、IO装置としては、これらのデバイスの外部に接続された外部装置(例えば、SASコントローラ210に接続された、DE120内のHDD)が含まれてもよい。
トレーステーブルには、時刻毎のCPUコアのアイドル時間およびIO装置に対するデータ転送量、IO処理実行回数を示す情報が登録される。
解析テーブルには、CPUコアおよびバスの負荷状態を示す情報が登録される。ここで、例えば、解析テーブルに登録される対象のバスは、DMA処理部203とCM200aとを接続するバス、PCIeスイッチ208とCA209とを接続するバス、PCIeスイッチ208とCA209aとを接続するバス、PCIeスイッチ208とSASコントローラ210とを接続するバス、PCIeスイッチ208とSASコントローラ210aとを接続するバスである。
CPUコア調整用テーブルには、CPUコアの処理負荷を調整するために用いられる情報が登録される。IO装置調整用テーブルには、試験処理部240による試験処理において、IO装置の負荷(すなわち、単位時間当たりのデータ転送量)を調整するために用いられる情報が登録される。
監視テーブルは、例えば、CPUコア用とIO装置用の2種類が存在する。CPUコア用の監視テーブルには、CPUコアがプロセスを動作させていないアイドル時間が登録される。IO装置用の監視テーブルには、IO装置に対するデータ転送量、IO処理実行回数を示す情報が登録される。
監視部230は、CPUコア毎にアイドル時間を検出する。監視部230は、検出した各CPUコアのアイドル時間を監視テーブルに登録する。また、監視部230は、CPUコアからの要求に応じてIO装置毎に実行されるIO処理の回数、および、IO処理によるIO装置毎のデータ転送量を検出する。具体的には、監視部230は、試験処理部240が各IO装置にIO処理の実行を要求することを監視することで、IO処理の実行回数およびデータ転送量を検出する。監視部230は、検出したIO処理の実行回数およびデータ転送量を監視テーブルに登録する。
監視部230によるCPUコアのアイドル時間の検出処理は、例えば、OSプログラムの実行により実現される。また、監視部230によるIO装置ごとのIO処理実行回数およびデータ転送量の検出処理は、例えば、対応するIO装置を制御するためのドライバプログラムの実行により実現される。すなわち、監視部230は、実際には、対応するプログラム(OSプログラム、IO装置の種類毎のドライバプログラム)毎に存在する。このような監視部230の実際の構成や処理については、図10において説明する。
試験処理部240の処理は、試験プログラムの実行によって実現される。試験処理部240は、試験プログラムにしたがって、CM200の動作試験を行う。試験処理部240による動作試験の処理とは、例えば、ホスト装置400,400aからの要求に応じてDE120内のHDDにアクセスする処理が正常に実行されるかを試験するための処理である。また、動作試験の処理は、CM200内の特定のハードウェア、またはCM200に接続された特定の装置が正常に動作するかを試験するための処理であってもよい。動作試験によって検知される障害は、主にハードウェア障害である。
試験処理部240は、動作試験で障害が発生した場合、試験を中止する。試験処理部240は、障害がタイムアウトによるものであるか否かを収集部250に通知する。ここで、タイムアウトとは、CPUコアがIO装置に対する要求を送信した場合、CPUコアが要求に対する応答を所定時間内に受信できない場合である。また、試験処理部240は、障害がタイムアウトの場合、タイムアウトの原因となったコマンドの名称を収集部250に通知する。
試験処理部240は、障害が発生した後に、障害再現用の再試験を行う。再試験の内容は、元の動作試験の内容と同じであってもよいし、異なる内容であってもよい。試験処理部240は、再試験でIO装置調整用テーブルに登録されている内容を読み込み、その内容に応じて再試験中の動作状態を調整する。
収集部250、解析部260および調整部270の処理は、例えば、試験制御プログラムの実行によって実現される。試験制御プログラムは、例えば、試験プログラムの実行時に自動的に、または管理者の操作に応じて実行される。また、試験制御プログラムは、試験プログラムの一部に含まれていてもよい。
収集部250は、タイマ機能を用いて、定期的に監視テーブルからCPUコアのアイドル時間およびIO装置に対するIO処理実行回数、データ転送量を取得する。以下、収集部250によるアイドル時間、IO処理実行回数およびデータ転送量の定期的な収集処理を、“定期収集”と呼ぶ。
また、収集部250は、試験で障害が発生した場合、監視テーブルから障害が発生した時点のCPUコアのアイドル時間およびIO装置に対するIO処理実行回数、データ転送量を取得する。以下、障害が発生したことを契機とする収集部250によるアイドル時間、IO処理実行回数およびデータ転送量の収集処理を、“ポイント収集”と呼ぶ。収集部250は、定期収集およびポイント収集した情報をトレーステーブルに登録する。
解析部260は、トレーステーブルに登録されたCPUのアイドル時間およびIO装置に対するIO処理実行回数、データ転送量から、CPUコアのCPUビジー率およびバスのスループット、IOPS(Input Output Per Second)を算出する。ここで、CPUコアのCPUビジー率とは、所定時間当たりのアイドル時間の割合を、値“1”から減算して得られる値である。バスのスループットとは、所定時間当たりにバスがIO装置にデータを転送する量である。バスのIOPSとは、1秒当たりにバスを通じてIO装置との間で実行されたIO処理の回数(具体的には、実行されたIO処理に対応するコマンド数)である。解析部260は、算出した内容を解析テーブルに登録する。解析部260の詳細な説明は、図11で行う。
調整部270は、試験で障害が発生した後に再試験を行いながら、再試験におけるCPUコアのCPUビジー率およびバスのスループット、IOPSを解析テーブルに登録されたCPUコアのCPUビジー率およびバスのスループット、IOPSに近づくように、CM200に与える処理負荷を調整する。すなわち、調整部270は、再試験を行いながら、CPUコアのCPUビジー率およびバスのスループット、IOPSが、障害発生時と同じになるように調整する。
具体的には、再試験時には次のような処理が行われる。収集部250は、再試験で定期収集を2回以上行う。解析部260は、定期収集したCPUのアイドル時間およびIO装置に対するIO処理実行回数、データ転送量から、CPUコアのCPUビジー率およびバスのスループット、IOPSを算出する。算出方法の詳細な説明は、図17で行う。調整部270は、算出したCPUコアのCPUビジー率およびバスのスループット、IOPSが、解析テーブルに登録されたCPUコアのCPUビジー率およびバスのスループット、IOPSに近づくように、CM200に与える処理負荷を調整する。
CM200に与える処理負荷の調整方法としては、次のような方法が用いられる。
調整部270は、各CPUコアに実行させる、CPUビジー率の調整用のタスクの実行数を、増減する。調整用のタスクとは、例えば、意味のないメモリアクセスなどのダミーの処理を実行するものである。例えば、調整用タスクの実行数を増やすことで、CPUコアのアイドル時間が短くなり、CPUビジー率を高めることができる。
また、調整部270は、調整用のタスクに設定するディレイ時間を増減する。ディレイ時間とは、調整用のタスクの実行遅延時間である。例えば、調整用のタスクが実行される際、メモリアクセスなどのダミー処理が行われた後、設定されたディレイ時間の分だけ待ち状態となり、待ち状態の間、次のタスクが実行されない。例えば、ディレイ時間を増加させることで、CPUビジー率を低下させることができる。
また、調整部270は、試験処理部240に対して設定するキューイング数およびコマンド当たりのデータサイズを増減する。キューイング数とは、対応するIO装置に対して仕掛かり中にすることが可能なコマンド数、すなわち、その時点でIO装置に発行済みであり、かつ、応答を未受信のコマンドの最大数である。例えば、キューイング数を増加させることで、CPUコアと該当IO装置との間で伝送されるデータ量が増加する。その結果、IO装置との経路上のバスのスループットが増加し、処理負荷が大きくなる。また、コマンド当たりのデータサイズとは、1つのコマンドによって入出力を要求可能なデータのサイズである。例えば、データサイズを小さくすることで、CPUコアから該当IO装置へ発行されるコマンド数が多くなり、IO装置との経路上のバスのIOPSが増加する。その結果、CPUコアとIO装置との通信回数が増加し、処理負荷が大きくなる。
調整部270は、上記で説明したCPUコアのCPUビジー率を変えるための情報をCPUコア調整用テーブルに登録する。調整部270は、CPUコア調整用テーブルに登録された内容に基づいて、CPUコアの処理負荷の状態を調整する。このようにして、調整部270は、監視対象の各CPUコアの処理負荷の状態が障害発生時と同様になるように調整する。また、調整部270は、上記で説明したバスのスループットを変えるための情報をIO装置調整用テーブルに登録する。試験処理部240が、IO装置調整用テーブルに登録された内容に基づいて再試験時のキューイング数やコマンド当たりのデータサイズを調整する。このようにして、監視対象の各バスの負荷状態が障害発生時と同様になるように調整される。
調整部270は、算出したCPUコアのCPUビジー率およびバスのスループット、IOPSが解析テーブルに登録されたCPUコアのCPUビジー率およびバスのスループット、IOPSになるまで、再試験を何回も繰り返し、CM200の負荷状態を調整する。
図5は、管理テーブルの例を示す図である。管理テーブル221は、予め記憶部220に格納されている。管理テーブル221は、IO装置名、CPUコア、識別符号およびバスの項目を含む。
IO装置名の項目には、IO装置を識別する名称が登録される。CPUコアの項目には、CPUコアを識別する名称が登録される。識別符号の項目には、IO装置を識別する符号が登録される。バスの項目には、バスを識別する名称が登録される。
例えば、管理テーブル221には、IO装置名が“IO装置X1”、CPUコアが“C1”、識別符号が“X1”、バスが“B1”という情報が登録される。これは、“IO装置X1”がバス“B1”と接続しており、CPUコア“C1”から命令を受付けることを示している。換言すると、CPUコア“C1”から“IO装置X1”までの経路上にバス“B1”が存在することを示している。
管理テーブル221は、後述するように、解析部260によって参照される。解析部260は、収集部250によってIO装置毎に収集された負荷状態を示す情報を、管理テーブル221に基づいて、バス毎の負荷状態を示す情報に変換することができる。
図6は、トレーステーブルの例を示す図である。トレーステーブル222は、収集部250によって記憶部220に格納される。CPUコア毎にトレーステーブル222が、記憶部220に格納される。例えば、図3の構成の場合、CPUコア202のトレーステーブル222が、記憶部220に登録され、CPUコア202aのトレーステーブル222が、記憶部220に登録される。さらに、トレーステーブル222は、定期収集およびポイント収集のたびに、収集部250によって記憶部220に登録される。
トレーステーブル222は、収集時刻、アイドル時間、各IO装置に対するデータ転送量、各IO装置に対するIO処理実行回数の項目を含む。収集時刻の項目には、収集した時刻が登録される。アイドル時間は、収集した時刻におけるCPUコアのアイドル時間が登録される。また、例えば、IO装置X1に対するデータ転送量の項目には、CPUコアがIO装置X1に対して転送したデータ量が登録される。IO装置X1に対するIO処理実行回数の項目には、CPUコアがIO装置X1に対してIO処理した回数が登録される。
なお、トレーステーブル222に登録されるアイドル時間、データ転送量およびIO処理実行回数は、例えば、CM200が起動してから、または試験処理部240の処理が開始されてからの累積数を示す。
図7は、解析テーブルの例を示す図である。解析テーブル223は、解析部260によって記憶部220に格納される。解析テーブル223は、各CPUコアのCPUビジー率、各バスのスループット、各バスのIOPSの項目を含む。
例えば、CPUコアC1のCPUビジー率の項目には、CPUコアC1のCPUビジー率が登録される。CPUコアCnのCPUビジー率の項目には、CPUコアCnのCPUビジー率が登録される。バスB1のスループットの項目には、バスB1のスループットが登録される。バスB1のIOPSの項目には、バスB1のIOPSが登録される。バスBmのスループットの項目には、バスBmのスループットが登録される。バスBmのIOPSの項目には、バスBmのIOPSが登録される。なお、n、mは3以上の整数である。
図8は、CPUコア調整用テーブルの例を示す図である。CPUコア調整用テーブル224は、記憶部220に格納されており、調整部270によって更新される。CPUコア調整用テーブル224は、CPUコア、タスク数およびディレイ時間の項目を含む。
CPUコアの項目には、CPUコアを識別する名称が登録される。タスク数の項目には、CPUコアに単位時間当たりに実行させる、CPUビジー率調整用のタスク数が登録されている。ディレイ時間の項目には、調整用のタスクの実行遅延時間が登録されている。
例えば、CPUコア調整用テーブル224には、CPUコアが“C1”、タスク数“D1”ディレイ時間が“E1”という情報が登録される。これは、CPUコア“C1”に実行させる調整用のタスク数が“D1”であることを示している。また、CPUコア“C1”が調整用タスクを実行する際の実行遅延時間が“E1”であることを示している。
図9は、IO装置調整用テーブルの例を示す図である。IO装置調整用テーブル225は、記憶部220に格納されており、調整部270によって更新され、試験処理部240によって参照される。IO装置調整用テーブル225は、IO装置名、キューイング数およびデータサイズの項目を含む。
IO装置名の項目には、IO装置を識別する名称が登録される。キューイング数の項目には、仕掛かり中にすることが可能なコマンド数が登録されている。データサイズの項目には、1コマンドで入出力を要求可能なデータサイズが登録されている。
例えば、IO装置調整用テーブル225には、IO装置名が“IO装置X1”、キューイング数“F1”、データサイズ“G1”という情報が登録される。これは、調整部270が“IO装置X1”に対するデータ転送量、IO処理実行回数を調整するためにキューイング数を“F1”、データサイズ“G1”に設定することを示している。
次に、図10,図11を用いて、収集部250による定期収集およびポイント収集について説明する。
まず、図10は、収集部による情報収集の具体例を示す図である。前述のように、図4に示した監視部230は、実際には、対応するプログラム毎に存在する。図10では、監視部230の例として、監視部231,231a,231bを示す。
監視部231の処理は、OSプログラムの実行によって実現される。すなわち、監視部231は、OSの機能の一部である。監視部231は、マルチコアCPU201に搭載されたCPUコア毎にアイドル時間を監視し、監視結果を監視テーブル226に登録する。監視テーブル226は、記憶部220に格納される。監視テーブル226には、CPUコア毎のアイドル時間の累積値が登録される。図10の例では、監視テーブル226には、CPUコアC1(例えば、CPUコア202)のアイドル時間と、CPUコアC2(例えば、CPU202a)のアイドル時間とが登録されている。
監視部231は、例えば、各CPUコアでのアイドルタスクの実行数をCPUコア毎にカウントすることで、各CPUコアでのアイドル時間を算出する。アイドルタスクとは、CPUコアで実行されるタスクの中で最も実行優先度が低いタスク、または、アイドル用にあらかじめ専用に用意されたタスクである。監視部231は、例えば、システムクロックと同じ周期で、各CPUコアに対して割り込みを行い、アイドルタスクが実行されているCPUコアに対応するアイドル時間のカウント数を“1”インクリメントする。
監視部231a,231bの処理は、それぞれ対応するIO装置を制御するためのドライバプログラムの実行によって実現される。図10では、IO装置の例として、DE120に搭載されたHDD300,300aと、CA209,209aとを示す。
監視部231aの処理は、DE120に搭載されたHDDを制御するためのドライバプログラムの実行によって実現される。すなわち、監視部231aは、HDDを制御するためのドライバの機能の一部である。監視部231aは、DE120に搭載されたHDDごとに、試験処理部240から要求されたIO処理の実行回数(具体的には、各IO処理の実行を要求するためのコマンドの発行数)と、IO処理によるHDDと試験処理部240との間のデータ転送量とを検出する。監視部231aは、例えば、試験処理部240から(すなわち、CPUコアから)監視部231aに対して発行されるコマンドを監視することで、IO処理の実行回数およびデータ転送量を検出することができる。
監視部231aは、IO処理の実行回数およびデータ転送量の検出結果を監視テーブル226aに登録する。監視テーブル226aは、記憶部220に格納される。監視テーブル226aには、HDD毎のIO処理の実行回数およびデータ転送量の各累積値が登録される。図10の例では、監視テーブル226aには、HDD#1(例えば、HDD300)に対するIO処理の実行回数およびデータ転送量と、HDD#2(例えば、HDD300a)に対するIO処理の実行回数およびデータ転送量とが登録されている。
監視部231bの処理は、CA209,209aを制御するためのドライバプログラムの実行によって実現される。すなわち、監視部231bは、CA209,209aを制御するためのドライバの機能の一部である。監視部231aは、CA209,209aのそれぞれについて、試験処理部240から要求されたIO処理の実行回数と、IO処理によるCPUコアとCA209,209aのそれぞれとの間のデータ転送量とを検出する。監視部231aと同様に、監視部231bは、例えば、試験処理部240から(すなわち、CPUコアから)監視部231bに対して発行されるコマンドを監視することで、IO処理の実行回数およびデータ転送量を検出することができる。
監視部231bは、IO処理の実行回数およびデータ転送量の検出結果を監視テーブル226bに登録する。監視テーブル226bは、記憶部220に格納される。図示しないが、監視テーブル226bには、CA209,209aのそれぞれについてのIO処理の実行回数およびデータ転送量の各累積値が登録される。
収集部250は、定期収集およびポイント収集の際に、監視テーブル226,226a,226bに登録された情報を収集し、収集内容をその都度、対応するトレーステーブル222に登録する。なお、実際には、収集部250は、監視テーブル226,226a,226bに直接アクセスするのではなく、次のようにして情報を収集する。収集部250は、監視部231に対して情報提供を要求し、監視部231は、要求に応じて、監視テーブル226に登録された情報を収集部250に通知する。同様に、収集部250は、監視部231aに対して情報提供を要求し、監視部231aは、要求に応じて、監視テーブル226aに登録された情報を収集部250に通知する。また、収集部250は、監視部231bに対して情報提供を要求し、監視部231bは、要求に応じて、監視テーブル226bに登録された情報を収集部250に通知する。
図11は、解析部の処理の具体例を示すタイムチャートである。試験処理部240が実行する試験で発生する障害内容には、タイムアウトによる障害とタイムアウト以外の障害との2つがある。タイムアウトによる障害は、CPUコアからIO装置に対して処理が要求された後、所定のタイムアウト時間以内にその処理に対する正常な応答が返信されなかった場合に検知される。タイムアウトによる障害とタイムアウト以外の障害とで、解析部260が解析テーブル223に登録する処理が異なる。そこで、障害内容の違いによる解析部260の処理について説明する。
図11(A)は、タイムアウト以外の障害が発生した場合を示している。動作試験が進行するのにしたがい、収集部250は、CPUコア毎のアイドル時間と、IO装置毎のIO処理の実行回数およびデータ転送量を、一定時間毎に収集(すなわち、定期収集)する。また、時刻T1において障害が発生したとすると、収集部250は、時刻T1でも、CPUコア毎のアイドル時間と、IO装置毎のIO処理の実行回数およびデータ転送量を収集(すなわち、ポイント収集)する。
ここで、時刻T1で発生した障害がタイムアウト以外の障害であったとする。この場合、解析部260は、時刻T1で収集した情報と時刻T1から最も近い時刻T2に定期収集した情報とに基づいて、各CPUコアのCPUビジー率と、各バスのスループットおよびIOPSとを算出する。
具体的には、解析部260は、CPUコアのCPUビジー率を、「(時刻T1のアイドル時間−時刻T2のアイドル時間)/(時刻T1−時刻T2)」という式により算出する。ここで、時刻T1−時刻T2で算出される値の単位は秒でもよい。
また、解析部260は、バスのスループット、IOPSを算出する前に、各IO装置のスループットおよびIOPSを以下のように算出する。例えば、IO装置のスループットは、「(時刻T1のデータ転送量−時刻T2のデータ転送量)/(時刻T1−時刻T2)」という式により算出される。また、IO装置のIOPSは、「(時刻T1のIO処理実行回数−時刻T2のIO処理実行回数)/(時刻T1−時刻T2)」という式により算出される。
解析部260は、管理テーブル221を参照して、バスとIO装置との接続関係からバス毎のスループットおよびIOPSを算出する。例えば、CPUコアC1からIO装置X1およびIO装置X2への経路上にはバスB1が存在する。そのため、解析部260は、バスB1のスループットを、「IO装置X1のデータ転送量+IO装置X2のデータ転送量」と算出する。また、解析部260は、バスB1のIOPSを、「IO装置X1のIOPS+IO装置X2のIOPS」と算出する。このように、解析部260は、各バスのスループット、IOPSを算出する。
解析部260は、算出したCPUコアのCPUビジー率およびバスのスループット、IOPSを解析テーブル223に登録する。
一方、図11(B)は、タイムアウトによる障害が発生した場合を示している。時刻T11〜T14は、収集部250が定期収集をした時刻である。また、時刻T3において障害が発生し、収集部250がポイント収集したとする。
ここで、時刻T3において、収集部250は、試験処理部240から障害内容がタイムアウトによる障害である旨の通知を受信したとする。この場合、収集部250は、試験処理部240からタイムアウトとなったコマンドの名称を受信する。解析部260は、タイムアウトとなったコマンドを試験処理部240が送信した時刻T4を特定する。例えば、解析部260は、試験処理部240が生成したログを参照することで、タイムアウトとなったコマンドが送信された時刻を特定することができる。あるいは、タイムアウト時間が一律に設定されている場合、解析部260は、時刻T3からタイムアウト時間分だけ前の時刻を、時刻T4と特定してもよい。解析部260は、時刻T4の前後である時刻T12と時刻T13とで定期収集された情報に基づいて、各CPUコアのCPUビジー率と、バスのスループットおよびIOPSとを算出する。
例えば、解析部260は、CPUコアのCPUビジー率を、「(時刻T13のアイドル時間−時刻T12のアイドル時間)/(時刻T13−時刻T12)」という式により算出する。また、解析部260は、バスのスループット、IOPSを算出する前に、IO装置のスループットおよびIOPSを以下のように算出する。例えば、IO装置のスループットは、「(時刻T13のデータ転送量−時刻T12のデータ転送量)/(時刻T13−時刻T12)」という式により算出される。また、IO装置のIOPSは、「(時刻T13のIO処理実行回数−時刻T12のIO処理実行回数)/(時刻T13−時刻T12)」という式により算出される。解析部260は、管理テーブル221を参照して、バスとIO装置との接続関係からバス毎のスループットおよびIOPSを算出する。解析部260は、算出したCPUコアのCPUビジー率およびバスのスループット、IOPSを解析テーブル223に登録する。
図12は、動作試験の処理の例を示すフローチャートである。以下、図12に示す処理をステップ番号に沿って説明する。
(S11)試験処理部240は、例えば、試験端末500からの指示に応じて、動作試験を開始する。試験処理部240は、試験が開始した旨を収集部250に通知する。
(S12)収集部250は、定期収集を行う。このステップS12の処理は、次のステップS13で“Yes”と判定されるまでの間、一定時間間隔で実行される。
(S13)収集部250は、試験処理部240から動作試験において障害が発生した旨の通知がされたか否かを判定する。通知されている場合、処理をステップS14に進める。通知されていない場合、処理をステップS12に進める。なお、図示しないが、収集部250は、障害が発生した旨の通知がされずに動作試験が終了した場合、処理を終了する。
(S14)収集部250は、ポイント収集を行う。収集部250は、収集処理が終了した旨を解析部260に通知する。また、試験処理部240は、タイムアウトによる障害であるか否かを収集部250に通知する。試験処理部240は、タイムアウトによる障害の場合、タイムアウトとなったコマンドの名称を収集部250に通知する。
(S15)解析部260は、収集部250が収集した情報に基づいて解析処理を行う。解析部260は、解析処理の結果を解析テーブル223に登録する。
(S16)試験処理部240は、障害が発生したことを試験端末500に通知する。これにより、試験端末500の画面に障害が発生した旨が表示される。
(S17)試験処理部240は、例えば、試験端末500からの指示に応じて、障害再現のための再試験を実行する。再試験の実行中には、収集部250、解析部260、調整部270の処理により、CM200のハードウェアの負荷状態を障害発生時の状態に近づけるような制御が行われる。なお、再試験は、少なくとも、障害が発生した時点で終了される。
図13は、収集処理の例を示すフローチャートである。以下、図13に示す処理をステップ番号に沿って説明する。また、図13に示す処理はステップS12,S14の処理に対応する。すなわち、定期収集およびポイント収集は、いずれも図13のような手順で実行される。
(S21)収集部250は、現在の時刻を取得する。収集部250は、現在の時刻をトレーステーブル222に登録する。
(S22)収集部250は、監視テーブルから各CPUコアのアイドル時間を取得する。図10の構成の場合、収集部250は、監視部231に対してアイドル時間の通知を要求し、監視部231が、監視テーブル226に登録された各CPUコアのアイドル時間を読み出して、収集部250に通知する。収集部250は、各CPUコアのアイドル時間をトレーステーブル222に登録する。
(S23)収集部250は、監視テーブルから各IO装置に対応するIO処理実行回数およびデータ転送量を取得する。図10の構成の場合、収集部250は、監視部231aに対してIO処理実行回数およびデータ転送量の通知を要求する。監視部231aは、監視テーブル226aに登録された各HDDのIO処理実行回数およびデータ転送量を読み出して、収集部250に通知する。また、収集部250は、監視部231bに対してIO処理実行回数およびデータ転送量の通知を要求する。監視部231bは、監視テーブル226bに登録された各CAのIO処理実行回数およびデータ転送量を読み出して、収集部250に通知する。収集部250は、各IO装置に対するデータ転送量をトレーステーブル222に登録する。
(S24)このステップS24は、ポイント収集の場合のみ実行される。収集部250は、試験処理部240から、障害内容がタイムアウトによるものであるか否かを示す情報を受信する。また、障害内容がタイムアウトによるものである場合、収集部250は、試験処理部240から、タイムアウトとなったコマンドの名称を受信する。
図14は、解析処理の例を示すフローチャートである。以下、図14に示す処理をステップ番号に沿って説明する。また、図14に示す処理はステップS15の処理に対応する。
(S31)解析部260は、図13のステップS24で収集部250が試験処理部240から受信した情報に基づいて、障害がタイムアウトによるものであるか否かの判定を行う。タイムアウトによる障害の場合、処理をステップS32に進める。タイムアウト以外の障害の場合、処理をステップS34に進める。
(S32)解析部260は、図13のステップS24で収集部250が試験処理部240から受信した、タイムアウトとなったコマンドの名称に基づいて、試験処理部240によるこのコマンドの発行時刻を特定する。例えば、解析部260は、試験処理部240が生成して記憶部220に格納されたログを参照し、タイムアウトとなったコマンドの発行時刻を特定する。あるいは、タイムアウト時間が一律に設定されている場合、解析部260は、図12のステップS13で障害発生が通知された時刻から、タイムアウト時間分だけ前の時刻を、コマンドの発行時刻と特定してもよい。
(S33)解析部260は、特定した時刻の前後に定期収集された情報に基づいて、CPUコア毎のCPUビジー率およびIO装置毎のスループット、IOPSを算出する。さらに、解析部260は、管理テーブル221を参照し、IO装置毎のスループット、IOPSからバス毎のスループット、IOPSを算出する。解析部260は、算出した内容を解析テーブル223に登録する。そして、処理を終了する。
(S34)解析部260は、ポイント収集で収集した情報と障害が発生した時刻から最も近い時刻に定期収集した情報とに基づいてCPUコア毎のCPUビジー率およびIO装置毎のスループット、IOPSを算出する。さらに、解析部260は、管理テーブル221を参照し、IO装置毎のスループット、IOPSからバス毎のスループット、IOPSを算出する。解析部260は、算出した内容を解析テーブル223に登録する。そして、処理を終了する。
ここで、収集部250が、CM200の内部のバス毎にスループットやIOPSを直接的に収集することは難しい。これに比べて、図13のように、IO装置単位でIO処理実行回数やデータ転送量を収集する方が容易である。解析部260は、管理テーブル221を参照してIO装置とバスとの接続関係を把握することで、IO装置単位で収集されたIO処理実行回数やデータ転送量を、バス単位のスループットやIOPSに変換する。このような処理により、解析部260は、CM200に搭載されたCPUコア毎およびバス毎に、障害が発生した際の負荷状態を示す情報を解析テーブル223に登録することができる。
次に、障害再現のための再試験時の制御について説明する。まず、図15および図16を用いて、CM200に与える処理負荷を調整する方法について説明する。
図15は、CPUコアの処理負荷の調整方法の例を示す図である。調整部270は、各CPUコアに実行させる、CPUビジー率の調整用のタスクの時間当たりの実行数を増減することで、CM200に与える処理負荷を調整する。調整用のタスクとは、例えば、意味のないメモリアクセスなどのダミーの処理を実行するものである。さらに、調整部270は、調整用のタスクに設定するディレイ時間を増減することで、CM200に与える処理負荷を調整することもできる。ディレイ時間とは、調整用のタスクの実行遅延時間である。
図15の例では、CPUコア調整用テーブル224において、CPUコアC1(CPUコア202に対応)でのタスク実行数として“2”が設定され、CPUコアC2(CPUコア202aに対応)でのタスク実行数として“3”が設定されているとする。この場合、調整部270は、調整用タスクTS1,TS2を生成して、所定時間内に調整用タスクTS1,TS2をCPUコア202に実行させる。また、調整部270は、調整用タスクTS11,TS12、TS13を生成して、所定時間内に調整用タスクTS11,TS12、TS13をCPUコア202aに実行させる。
各調整用タスクの処理内容は同じである。例えば、CPUコア202は、調整用タスクTS1を実行すると、RAM204の所定アドレスから所定回数のデータ読み出しを行う。次に、CPUコア202は、CPUコア調整用テーブル224におけるCPUコア202に対応するレコードから、ディレイ時間を読み出す。CPUコア202は、読み出したディレイ時間の分だけ待ち状態となり、待ち状態が解除されると次のタスクを実行する。
以上のような調整用のタスクを用いることにより、調整部270は、各CPUコアの処理負荷を調整することができる。例えば、調整用タスクの実行数を増やすことで、CPUコアのアイドル時間が短くなり、そのCPUコアについてのCPUビジー率を高めることができる。また、ディレイ時間を増加させることで、CPUコアの待ち時間が長くなり、そのコアについてのCPUビジー率を低下させることができる。
なお、CPUコア毎のCPUビジー率の調整方法としては、次のような方法を用いることもできる。この方法では、記憶部220に各CPUコアに対応するディレイ時間が設定されたテーブルが記憶される。ディレイ時間は調整部270により設定される。試験処理部240がIO装置のドライバに対してコマンドを発行すると、ドライバは、コマンド要求元のCPUコアに対応するディレイ時間をテーブルから読み出す。ドライバは、読み出したディレイ時間分だけCPUコアに対する応答処理の実行を遅延させる。なお、この方法は、例えば、所定時間内にCPUコアに上記の調整用のタスクを1つも実行させていない(すなわち、設定されたタスク実行数が“0”である)にもかかわらず、CPUビジー率をさらに下げたい場合に利用することもできる。
図16は、バスの伝送負荷の調整方法の例を示す図である。調整部270は、試験処理部240に対して設定するキューイング数およびコマンド当たりのデータサイズを増減することで、CM200に与える処理負荷を調整する。キューイング数とは、対応するIO装置に対して仕掛かり中にすることが可能なコマンド数、すなわち、その時点でIO装置に発行済みであり、かつ、応答を未受信のコマンドの最大数である。また、コマンド当たりのデータサイズとは、1つのコマンドによって入出力を要求可能なデータのサイズである。
図16では、IO装置の例としてHDD300,300aを示している。また、図16の例では、HDD300のキューイング数として“3”が設定され、HDD300aのキューイング数として“2”が設定されているものとする。この場合、試験処理部240は、IO装置調整用テーブル225におけるHDD300に対応するレコードに基づいて、HDD300に対して最大で3つのコマンドを仕掛かり中にすることができる。また、試験処理部240は、IO装置調整用テーブル225におけるHDD300aに対応するレコードに基づいて、HDD300aに対して最大で2つのコマンドを仕掛かり中にすることができる。キューイング数が増加することで、CPUコアと該当IO装置との間で伝送されるデータ量が増加する。その結果、IO装置との経路上のバスのスループットが増加し、データ伝送負荷が大きくなる。
また、図16の例では、IO装置調整用テーブル225において、HDD300よりHDD300aの方が、コマンド当たりのデータサイズとして大きな値が設定されているものとする。この場合、データの読み出しコマンドに関しては、試験処理部240が1つのコマンドを発行してHDD300からデータを読み出す場合よりも、1つのコマンドを発行してHDD300aからデータを読み出す場合の方が、読み出しデータ量が大きくなる。データの書き込みコマンドに関しても同様である。
コマンド当たりのデータサイズを小さくすることで、CPUコアから該当IO装置へ発行されるコマンド数が多くなり、IO装置との経路上のバスのIOPSが増加する。その結果、CPUコアとIO装置との通信回数が増加し、それらの間の経路上のバスのデータ伝送負荷が大きくなる。
なお、調整部270は、キューイング数とコマンド当たりのデータサイズの一方のみの設定を変更可能であってもよい。
図17は、再試験時の処理例(その1)を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。また、図17に示す処理はステップS17の処理に対応する。
(S41)調整部270は、解析テーブル223の登録内容を読み込む。
(S42)試験処理部240は、例えば、試験端末500からの指示に応じて、再試験を開始する。試験処理部240は、IO装置調整用テーブル225の登録内容を読み込み、これ以後、読み込んだ登録内容に基づいて、各IO装置にコマンドを発行する際のキューイング数およびコマンド当たりのデータサイズを調整する。
(S43)調整部270は、CPUコア調整用テーブル224に登録されたCPUコア毎のタスク数に基づいて、各CPUコアに調整用タスクを実行させる。また、CPUコアが調整用タスクを実行した際には、CPUコア調整用テーブル224の該当レコードに登録されたディレイ時間に基づいて、実行遅延時間(待ち時間)が調整される。
(S44)試験処理部240は、CPUコアとIO装置との通信が安定しているか否かを判定する。例えば、再試験の開始から所定時間が経過すると、通信が安定したと判定される。安定している場合、処理をステップS45に進める。安定していない場合、試験処理部240は、安定するまで待機する。
(S45)収集部250は、定期収集を2回行って、定期収集毎に収集したCPUコアのアイドル時間、IO装置に対するデータ転送量、IO処理実行回数をトレーステーブル222に登録する。処理内容は、ステップS12,S14と同じである。
(S46)解析部260は、ステップS45で収集部250が収集したCPUコアのアイドル時間、IO装置のIO処理実行回数、データ転送量に基づいて、CPUコア毎のCPUビジー率およびバス毎のスループット、IOPSを算出する。
具体的には、解析部260は、CPUコアのCPUビジー率を、「(2回目に収集したアイドル時間−1回目に収集したアイドル時間)/(2回目に収集した時刻−1回目に収集した時刻)」という式により算出する。
また、解析部260は、バスのスループット、IOPSを算出する前に、IO装置のスループットおよびIOPSを以下のように算出する。IO装置のスループットは、「(2回目に収集したデータ転送量−1回目に収集したデータ転送量)/(2回目に収集した時刻−1回目に収集した時刻)」という式により算出される。IO装置のIOPSは、「(2回目に収集したIO処理実行回数−1回目に収集したIO処理実行回数)/(2回目に収集した時刻−1回目に収集した時刻)」という式により算出される。
解析部260は、管理テーブル221を参照して、バスとIO装置との接続関係からバス毎のスループットおよびIOPSを算出する。例えば、解析部260は、バスB1のスループットを、「IO装置X1のデータ転送量+IO装置X2のデータ転送量」と算出する。また、解析部260は、バスB1のIOPSを、「IO装置X1のIOPS+IO装置X2のIOPS」と算出する。このように、解析部260は、各バスのスループット、IOPSを算出する。
そして、解析部260は、処理をステップS51に進める。
なお、以上の図17では、ステップS45で定期収集が2回実行され、その収集結果に基づいてステップS46でCPUコアのCPUビジー率とバスのスループットおよびIOPSが算出された。これに対し、他の例として、ステップS45で定期収集が3回以上実行され、それらの収集結果に基づいてステップS46でCPUコアのCPUビジー率とバスのスループットおよびIOPSが算出されてもよい。この場合、解析部260は、例えば、隣接する2回の定期収集の結果に基づいてCPUコアのCPUビジー率とバスのスループットおよびIOPSを算出し、算出された複数のCPUビジー率とバスのスループットおよびIOPSのそれぞれの平均値を計算する。
図18は、再試験時の処理例(その2)を示すフローチャートである。以下、図18に示す処理をステップ番号に沿って説明する。また、図18に示す処理はステップS17の処理に対応する。
(S51)調整部270は、解析テーブル223から1つのバスを選択する。調整部270は、選択したバスについて解析テーブル223に登録されているスループットと、選択したバスと同じバスについてステップS46で算出したスループットとが同じであるか否かを判定する。スループットが同じ場合、処理をステップS55に進める。スループットが同じでない場合、処理をステップS52に進める。
(S52)調整部270は、ステップS51で比較したスループットのうち、解析テーブル223に登録されている方が大きいか否かを判定する。解析テーブル223に登録されている方が大きい場合、処理をステップS53に進める。解析テーブル223に登録されている方が小さい場合、処理をステップS54に進める。
(S53)調整部270は、管理テーブル221を参照し、ステップS51で選択したバスに接続されているIO装置を特定する。調整部270は、IO装置調整用テーブル225に登録されているキューイング数のうち、特定したIO装置に対応するキューイング数を増加させる。例えば、調整部270は、IO装置調整用テーブル225に登録されているキューイング数を1つ増加させる。そして、処理をステップS55に進める。
(S54)調整部270は、管理テーブル221を参照し、ステップS51で選択したバスに接続されているIO装置を特定する。調整部270は、IO装置調整用テーブル225に登録されているキューイング数を減少させる。例えば、調整部270は、IO装置調整用テーブル225に登録されているキューイング数のうち、特定したIO装置に対応するキューイング数を1つ減少させる。
(S55)調整部270は、ステップS51で選択したバスについて解析テーブル223に登録されているIOPSと、選択したバスと同じバスについてステップS46で算出したIOPSとが同じであるか否かを判定する。IOPSが同じ場合、処理をステップS59に進める。IOPSが同じでない場合、処理をステップS56に進める。
(S56)調整部270は、ステップS55で比較したIOPSのうち、解析テーブル223に登録されている方が大きいか否かを判定する。解析テーブル223に登録されている方が大きい場合、処理をステップS57に進める。解析テーブル223に登録されている方が小さい場合、処理をステップS58に進める。
(S57)調整部270は、IO装置調整用テーブル225に登録されているデータサイズのうち、ステップS53またはステップS54で特定したIO装置に対応するデータサイズを、所定サイズだけ小さくする。そして、処理をステップS59に進める。
(S58)調整部270は、IO装置調整用テーブル225に登録されているデータサイズのうち、ステップS53またはステップS54で特定したIO装置に対応するデータサイズを、所定サイズだけ大きくする。
(S59)調整部270は、解析テーブル223に登録された全てのバスに対して処理済みであるか否かを判定する。処理済みの場合、処理をステップS61に進める。処理済みでない場合、処理をステップS51に進める。
ステップS53,S54では、例として調整部270はキューイング数を1つ増減することを示したが、2以上の整数を増減させてもよい。また、予めどれくらいのキューイング数当たりどのくらいのスループットに相当するのかが分かっている場合は、解析テーブル223に登録されているスループットと同じになるようにキューイング数を設定してもよい。
同様に、予めどのくらいのデータサイズがどのくらいのIOPSに相当するのかが分かっている場合は、解析テーブル223に登録されているIOPSと同じになるようにデータサイズを調整してもよい。
図19は、再試験時の処理例(その3)を示すフローチャートである。以下、図19に示す処理をステップ番号に沿って説明する。また、図19に示す処理はステップS17の処理に対応する。
(S61)調整部270は、解析テーブル223から1つのCPUコアを選択する。調整部270は、選択したCPUコアについて解析テーブル223に登録されているCPUビジー率と、選択したCPUコアと同じCPUコアのステップS46で算出したCPUビジー率とが同じであるか否かを判定する。CPUビジー率が同じ場合、処理をステップS65に進める。CPUビジー率が同じでない場合、処理をステップS62に進める。
(S62)調整部270は、ステップS61で比較したCPUビジー率のうち、解析テーブル223に登録されている方が大きいか否かを判定する。解析テーブル223に登録されている方が大きい場合、処理をステップS63に進める。解析テーブル223に登録されている方が小さい場合、処理をステップS64に進める。
(S63)調整部270は、CPUコア調整用テーブル224に登録されている、ステップS61で選択したCPUコアに対応する調整用タスク数を増加させる。例えば、調整部270は、CPUコア調整用テーブル224に登録されている調整用タスク数を1つ増加させる。または、調整部270は、CPUコア調整用テーブル224に登録されている、ステップS61で選択したCPUコアに対応するディレイ時間を短くする。例えば、調整部270は、CPUコア調整用テーブル224に登録されているディレイ時間を1マイクロ秒短くする。そして、処理をステップS65に進める。
なお、ステップS63では、調整部270は、例えば、調整用タスク数とディレイ時間のうち、ディレイ時間を優先的に変更する。そして、調整部270は、CPUコア調整用テーブル224に登録されているディレイ時間が登録可能な最小値になっている場合に、調整用タスク数を増加させる。
(S64)調整部270は、CPUコア調整用テーブル224に登録されている、ステップS61で選択したCPUコアに対応する調整用タスク数を減少させる。例えば、調整部270は、CPUコア調整用テーブル224に登録されている調整用タスク数を1つ減少させる。または、調整部270は、CPUコア調整用テーブル224に登録されている、ステップS61で選択したCPUコアに対応するディレイ時間を長くする。例えば、調整部270は、CPUコア調整用テーブル224に登録されているディレイ時間を1マイクロ秒長くする。
なお、ステップS64では、調整部270は、例えば、調整用タスク数とディレイ時間のうち、調整用タスク数を優先的に変更する。そして、調整部270は、CPUコア調整用テーブル224に登録されている調整用タスク数が登録可能な最小値になっている場合に、ディレイ時間を長くする。
(S65)調整部270は、解析テーブル223に登録された全てのCPUコアに対して処理済みであるか否かを判定する。処理済みの場合、処理をステップS66に進める。処理済みでない場合、処理をステップS61に進める。
(S66)調整部270は、CPUコア毎のCPUビジー率およびバス毎のスループット、IOPSを調整できているか否かを判定する。すなわち、調整部270は、ステップS51,S55,S61において全て“Yes”であるか否かを判定する。調整できている場合、処理をステップS69に進める。調整できていない場合、調整部270は、試験処理部240に試験中止の要求を通知する。そして、処理をステップS67に進める。
(S67)試験処理部240は、試験を中止する。試験処理部240は、試験を中止した旨を調整部270に通知する。また、試験処理部240は、負荷の調整が必要なために試験を中止した旨を、試験端末500に通知する。
(S68)調整部270は、試験処理部240に試験の再実行の指示をする。そして、処理をステップS42に進める。また、試験端末500でのユーザの操作に応じて試験を再実行するようにしてもよい。また、ステップS68では、CM200が再起動され、再起動後にステップS42からの処理が実行されてもよい。
この後にステップS42からの処理が実行されたとき、更新後のCPUコア調整用テーブル224およびIO装置調整用テーブル225の値に基づいて、試験処理が実行され、調整用タスクの発行および実行が行われる。これにより、CM200の負荷状態が調整後の負荷状態に変更される。
(S69)例えば、障害が発生するまで、再試験が継続される。
なお、上記の例では、キューイング数およびコマンド当たりのデータサイズを調整部270がIO装置調整用テーブル225に設定し、再試験の実行開始時(ステップS42)に試験処理部240がIO装置調整用テーブル225の内容を読み込むことで、キューイング数およびコマンド当たりのデータサイズが制御される構成とした。しかし、このような形態に限らず、例えば、調整後のキューイング数およびコマンド当たりのデータサイズが、試験プログラム自体に設定されてもよい。この場合、ステップS68の次にステップS42が実行される際には、調整後のキューイング数およびコマンド当たりのデータサイズが設定された試験プログラムにしたがって、試験処理部240の再試験処理が実行される。
以上の第2の実施の形態では、調整部270は、CPUコア毎のCPUビジー率およびバス毎のスループット、IOPSの検出値が、解析テーブル223に登録されているCPUコア毎のCPUビジー率およびバス毎のスループット、IOPSになるまで、試験プログラムを用いて再試験を繰り返しながら調整する。このような調整により、各CPUコアや各バスの負荷状態を、障害発生時の負荷状態に近づけることができる。これにより、障害の再現性を向上できる。
また、障害がタイムアウトによるものの場合でも、障害がタイムアウト以外の場合であっても、調整時にターゲットにする各CPUコアや各バスの負荷状態の情報を、障害発生が通知されたタイミングまたはこれより前の期間の中から適切なタイミングで収集することができる。その結果、再試験時における各CPUコアや各バスの負荷状態を、障害発生時の負荷状態に正確に近づけることができる。
なお、第1の実施の形態の情報処理は、情報処理装置1が備えるプロセッサに、プログラムを実行させることで実現できる。第2の実施の形態の情報処理は、CPUコア202,202aにプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体(例えば、RAM204,SSD206,記録媒体207aなど)に記録できる。
プログラムを流通させる場合、例えば、当該プログラムを記録した可搬記録媒体(例えば、記録媒体207a)が提供される。また、プログラムを他のコンピュータの記憶装置に格納しておき、ネットワーク経由でプログラムを配布することもできる。コンピュータは、例えば、可搬記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、記憶装置に格納し、当該記憶装置からプログラムを読み込んで実行する。ただし、可搬記録媒体から読み込んだプログラムを直接実行してもよく、他のコンピュータからネットワークを介して受信したプログラムを直接実行してもよい。
また、上記の情報処理の少なくとも一部を、DSP、ASIC、PLDなどの電子回路で実現することもできる。
なお、各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。