(57)【要約】      （修正有）【課題】ディスクアレイ装置のリビルド時間を短縮する。【解決手段】複数の記憶装置をそなえるストレージ装置を制御するストレージ制御装置１１は、複数の記憶装置のそれぞれの統計情報２３を収集する監視部１３と、複数の記憶装置のいずれかの故障時に、故障が発生した記憶装置のデータを復元する復元先の記憶装置を、監視部１３によって収集された統計情報２３に基づいて選択する選択部１４と、をそなえる。【選択図】図２
2015099438.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶装置をそなえるストレージ装置を制御するストレージ制御装置であって、
前記複数の記憶装置のそれぞれの統計情報を収集する監視部と、
前記複数の記憶装置のいずれかの故障時に、故障が発生した記憶装置のデータを復元する復元先の記憶装置を、前記監視部によって収集された前記統計情報に基づいて選択する選択部と、
をそなえることを特徴とするストレージ制御装置。
【請求項２】
前記監視部は、記憶装置毎に前記統計情報を収集することを特徴とする請求項１記載のストレージ制御装置。
【請求項３】
前記統計情報は前記記憶装置に対する入出力数であることを特徴とする請求項１又は２記載のストレージ制御装置。
【請求項４】
前記選択部は、前記記憶装置の発行コマンド数及びアクセスデータ量を前記入出力負荷として収集することを特徴とする請求項３記載のストレージ制御装置。
【請求項５】
前記選択部は、前記復元先の記憶装置を、前記入出力負荷の低い記憶装置から優先的に、所定サイズのチャンク単位で選択することを特徴とする請求項３又は４記載のストレージ制御装置。
【請求項６】
前記複数の記憶装置は、記憶されている前記チャンク単位のデータに対し、予備のチャンク単位を複数有することを特徴とする請求項５記載のストレージ制御装置。
【請求項７】
複数の記憶装置をそなえるストレージ装置を制御するストレージ制御方法であって、
前記複数の記憶装置のそれぞれの統計情報を収集し、
前記複数の記憶装置のいずれかの故障時に、故障が発生した記憶装置のデータを復元する復元先の記憶装置を、収集された前記統計情報に基づいて選択する
ことを特徴とするストレージ制御方法。
【請求項８】
複数の記憶装置をそなえるストレージ装置を制御するストレージ制御プログラムであって、
前記複数の記憶装置のそれぞれの統計情報を収集し、
前記複数の記憶装置のいずれかの故障時に、故障が発生した記憶装置のデータを復元する復元先の記憶装置を、収集された前記統計情報に基づいて選択する
処理をコンピュータに実行させることを特徴とするストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、ストレージ制御方法及びストレージ制御プログラムに関する。
【背景技術】
【０００２】
情報通信技術（Information and Communication Technology；ＩＣＴ）システムの普及に伴い、近年、Hard Disk Drive（ＨＤＤ）などの記憶装置（以下、「ディスク」と総称する）を複数使用するディスクアレイ装置が広く用いられるようになっている。このようなディスクアレイ装置では、一般に、Redundant Arrays of Inexpensive Disks（ＲＡＩＤ）技術を用いて、データが２台以上のディスクに冗長化されて記録されることにより、データの安全性が担保されている。
【０００３】
又、データが冗長化されたディスクアレイ装置において、ディスクが故障すると、故障したディスクに記憶されていたデータが再構築されて、ホットスペアと呼ばれる予備ディスクなどの他のディスクに格納される。このような処理は、一般にリビルド処理と呼ばれる。リビルド処理が実行されることで、データの冗長性が回復する。
図１９に、従来のディスクアレイ装置１０２におけるＲＡＩＤ１（ミラーリング）のレイアウト例を示す。
【０００４】
ディスクアレイ装置１０２は、ディスク１０５−０〜１０５−２（以下、それぞれ、ディスク＃０，＃１、スペアディスクとも呼ぶ）の３台のディスクをそなえる。
以下、ディスク１０５−０〜１０５−２上の区分けされたそれぞれの領域を「チャンク」と呼ぶ。さらに、各ディスク１０５−０〜１０５−２の同一位置にあるチャンクのグループとそのスペア領域との組を「チャンクセット」と呼ぶ。ここで、１つのチャンクのサイズは、例えば数十メガバイト（ＭＢ）〜１ギガバイト（ＧＢ）である。
【０００５】
図１９の例においては、１つのチャンクセットを構成するチャンクＡとチャンクＡ′との間でデータが冗長化されている。ディスク１０５−０又は１０５−１が故障した時には、チャンクセット内のディスク１０５−２に存在するスペアチャンクに、故障ディスク１０５−０又は１０５−１のデータが復元される。
図１９に示すような通常のＲＡＩＤ１では、例えば、ディスク１０５−０の故障時に、リビルド処理においてディスク１０５−１から３０チャンク分のデータを読み出し、スペアディスク１０５−２に３０チャンク分のデータを書き込む必要がある。
【０００６】
近年のストレージシステムにおける記憶領域の大容量化に伴い、リビルド処理に要する時間が増大する傾向にある。このため、リビルド処理に要する時間を短縮することが求められている。
これを解決するため、従来のＲＡＩＤ構成における構成ディスク以上の本数にまたがってＲＡＩＤグループを形成し、リビルド処理時のディスク負荷を分散することにより、リビルド時間を短縮する「ファーストリビルド（fast rebuild）」と呼ばれる手法が採用されている。
【０００７】
ここで、「従来のＲＡＩＤ構成における構成ディスク本数」とは、例えばＲＡＩＤ１の場合は２台、ＲＡＩＤ５（３Ｄ＋１Ｐ）の場合は４台、ＲＡＩＤ６（４Ｄ＋２Ｐ）の場合は６台である（ここで、Ｄはデータ用ディスク、Ｐはパリティディスクをそれぞれ表わす）。
図２０に、従来のファーストリビルド対応ディスクアレイ装置１０２′におけるＲＡＩＤグループのレイアウト例を示す。本例においても、ＲＡＩＤ１構成が採用されている。
【０００８】
ディスクアレイ装置１０２′においては、ディスク１０５−０〜１０５−４（以下、ディスク＃０〜＃４とも呼ぶ）の５台のディスクをそなえるファーストリビルド対応のＲＡＩＤグループが構成されている。
この構成においては、１つのチャンクセットが、２つの冗長グループと１つのスペア領域とから構成されている。
【０００９】
以下、ファーストリビルドに対応するように形成されたＲＡＩＤグループを「仮想ＲＡＩＤグループ」と呼ぶ。
図２０の例では、１つのチャンクセットを構成するチャンクＡとチャンクＡ′との間でデータが冗長化されており、１つのチャンクセットを構成するチャンクＢとチャンクＢ′との間でデータが冗長化されている。ディスク１０５−０〜１０５−４のいずれかの故障時には、チャンクセット内のスペアチャンクに、故障ディスクのデータが復元される。
【００１０】
図２０の仮想ＲＡＩＤグループにおいては、ディスク＃１〜ディスク＃４から、それぞれ６チャンク（すなわち、各ディスクからＡ′３チャンク及びＢ′３チャンク）分のデータを読み出し、スペア領域に書き込めばよい。
図１９，図２０のリビルド性能を単体のディスクで比較すると、仮想ＲＡＩＤグループを構成しているディスクアレイ装置１０２′のほうが、３０／（６チャンク分×リード及びライトで合計２回）＝２．５倍リビルド性能が向上する。仮想ＲＡＩＤグループを構成するディスク１０５−０〜１０５−４の台数を増やせば、ディスクアレイ装置１０２′のリビルド性能がさらに向上する。
【００１１】
このように、多数のディスクを用いて仮想ＲＡＩＤグループを構成することにより、リビルド性能を向上できることが期待される。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０００−２００１５７号公報
【特許文献２】特開２００１−３１２３７２号公報
【特許文献３】特開２００５−０５０３０３号公報
【特許文献４】特開２０１０−２７７２４０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかし、仮想ＲＡＩＤグループへのユーザデータの配置の方式やアクセスの方式によっては、Ｉ／Ｏ処理により特定のディスクに負荷が偏る場合が考えられる。仮想ＲＡＩＤグループにおいては、ディスク台数が増えても、一部のディスクに偏って入出力（Input/Output；Ｉ／Ｏ）が発生している場合、全ディスクを均等に使用してリビルドを行なうと、高負荷のディスクの処理能力によってリビルド処理の速度が制限されてしまう。つまり、リビルド性能はディスク性能の限界によって頭打ちとなり、他のディスクの性能を十分に活用することができなくなる。
【００１４】
上記課題に鑑みて、１つの側面では、本発明は、ディスクアレイ装置のリビルド時間を短縮することを目的とする。
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の１つとして位置付けることができる。
【課題を解決するための手段】
【００１５】
このため、ストレージ制御装置は、複数の記憶装置をそなえるストレージ装置を制御するストレージ制御装置であって、前記複数の記憶装置のそれぞれの統計情報を収集する監視部と、前記複数の記憶装置のいずれかの故障時に、故障が発生した記憶装置のデータを復元する復元先の記憶装置を、前記監視部によって収集された前記統計情報に基づいて選択する選択部と、をそなえる。
【００１６】
又、ストレージ制御方法は、複数の記憶装置をそなえるストレージ装置を制御するストレージ制御方法であって、前記複数の記憶装置のそれぞれの統計情報を収集し、前記複数の記憶装置のいずれかの故障時に、故障が発生した記憶装置のデータを復元する復元先の記憶装置を、収集された前記統計情報に基づいて選択する。
さらに、ストレージ制御プログラムは、複数の記憶装置をそなえるストレージ装置を制御するストレージ制御プログラムであって、前記複数の記憶装置のそれぞれの統計情報を収集し、前記複数の記憶装置のいずれかの故障時に、故障が発生した記憶装置のデータを復元する復元先の記憶装置を、収集された前記統計情報に基づいて選択する処理をコンピュータに実行させる。
【発明の効果】
【００１７】
本発明によれば、ディスクアレイ装置のリビルド時間を短縮することができる。
【図面の簡単な説明】
【００１８】
【図１】実施形態の一例としてのディスクアレイ装置をそなえる情報処理システムのハードウェア構成を示す図である。
【図２】実施形態の一例としてのディスクアレイ装置の制御部の機能構成を示す図である。
【図３】実施形態の一例としてのディスクアレイ装置におけるＲＡＩＤグループのレイアウトを例示する図である。
【図４】実施形態の一例としてのディスクアレイ装置にそなえられる統計情報制御用変数及びディスク負荷監視テーブルを例示する図である。
【図５】実施形態の一例としてのディスクアレイ装置にそなえられるリビルド負荷目標値テーブルを例示する図である。
【図６】実施形態の一例としてのディスクアレイ装置にそなえられるリビルド負荷調整テーブルを例示する図である。
【図７】実施形態の一例としてのＩ／Ｏ負荷監視部によるディスク負荷監視処理のフローチャートである。
【図８】実施形態の一例としてのＩ／Ｏ負荷監視部による統計情報切り替え及びクリア処理のフローチャートである。
【図９】実施形態の一例としてのリビルド先選択部によるファーストリビルド最適化処理のフローチャートである。
【図１０】実施形態の一例としてのディスクアレイ装置におけるリビルド負荷調整テーブル及びリビルド負荷目標値テーブルのそれぞれの値を例示する図である。
【図１１】実施形態の一例としてのディスクアレイ装置におけるリビルド負荷調整テーブル及びリビルド負荷目標値テーブルのそれぞれの値を例示する図である。
【図１２】実施形態の一例としてのディスクアレイ装置におけるリビルド負荷調整テーブル及びリビルド負荷目標値テーブルのそれぞれの値を例示する図である。
【図１３】実施形態の一例としてのディスクアレイ装置におけるリビルド負荷調整テーブル及びリビルド負荷目標値テーブルのそれぞれの値を例示する図である。
【図１４】実施形態の一例としてのディスクアレイ装置におけるリビルド負荷調整テーブル及びリビルド負荷目標値テーブルのそれぞれの値を例示する図である。
【図１５】（ａ）は、実施形態の一例としてのディスクアレイ装置のディスク故障発生前のレイアウトテーブルを示す図であり、（ｂ）は、そのときのディスク負荷監視テーブルの具体例を示す図である。
【図１６】（ａ）は、実施形態の一例としてのディスクアレイ装置のディスク故障発生後のレイアウトテーブルを示す図であり、（ｂ）は、そのときのディスク負荷監視テーブルの具体例を示す図である。
【図１７】実施形態の一例としてのリビルド先選択部によるファーストリビルド最適化処理中の計算結果を例示する図である。
【図１８】実施形態の一例としてのファーストリビルド最適化処理後のレイアウトテーブルを例示する図である。
【図１９】従来のディスクアレイ装置におけるＲＡＩＤ１のレイアウトを例示する図である。
【図２０】従来のファーストリビルド対応ディスクアレイ装置におけるＲＡＩＤグループのレイアウトを例示する図である。
【発明を実施するための形態】
【００１９】
以下、図面を参照して、本実施の形態の一例としてのストレージ制御装置、ストレージ制御方法及びストレージ制御プログラムについて説明する。
ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形（実施形態及び各変形例を組み合わせる等）して実行することができる。
（Ａ）構成
最初に、実施形態の一例としてのディスクアレイ装置２の構成を説明する。
【００２０】
図１は、実施形態の一例としてのディスクアレイ装置２をそなえる情報処理システム１のハードウェア構成を示す図である。
情報処理システム１は、ホスト装置８と、ディスクアレイ装置２とそなえる。
情報処理システム１において、ホスト装置８と、ディスクアレイ装置２とは、例えば、Storage Area Network（ＳＡＮ）によって相互接続されている。
【００２１】
ホスト装置８は、例えば、サーバ機能をそなえたコンピュータ（情報処理装置）であり、ディスクアレイ装置２との間において、Small Computer System Interface（ＳＣＳＩ）コマンドやレスポンス等の各種データを、ストレージ接続プロトコルを用いて送受信する。このホスト装置８は、ディスクアレイ装置２に対してリード／ライト等のディスクアクセスコマンド（Ｉ／Ｏコマンド）を送信することにより、ディスクアレイ装置２が提供する記憶領域にデータの書き込みや読み出しを行なう。
【００２２】
ディスクアレイ装置２は、ホスト装置８に対して記憶領域を提供するものであり、ＬＡＮやＳＡＮを介してホスト装置８と相互に通信可能に接続されている。ここで、ディスクアレイ装置２は、ファーストリビルドに対応したＲＡＩＤ装置である。
ディスクアレイ装置２は、Control Module（ＣＭ）３−０，３−１と、ディスク（記憶装置）５−０，５−１，…，５−ｎ（ｎは３以上の整数）とをそなえる。
【００２３】
ＣＭ３−０，３−１は、ディスクアレイ装置２内の動作を制御するコントローラであり、ホスト装置８からリード／ライト等のＩ／Ｏコマンドを受け取り、種々の制御を行なう。
ＣＭ３−０，３−１は二重化されており、通常は、ＣＭ３−０がプライマリＣＭとして、セカンダリＣＭのＣＭ３−１を制御し、ディスクアレイ装置２全体の動作を管理している。しかしＣＭ３−０の故障時には、ＣＭ３−１がプライマリＣＭとなり、ＣＭ３−０の動作を引き継ぐ。
【００２４】
ＣＭ３−０は、ホストインタフェース（Interface；Ｉ／Ｆ）６−０，６−１、ディスクＩ／Ｆ７−０，７−１、Central Processing Unit（ＣＰＵ）４−０、及びメモリ９−０をそなえる。
ホストＩ／Ｆ６−０，６−１は、例えばＳＡＮ経由でホスト装置８とＣＭ３−０とを接続するためのインタフェースである。ホストＩ／Ｆ６−０，６−１は、Fibra Channel（ＦＣ）、Internet ＳＣＳＩ（ｉＳＣＳＩ）、Serial Attached SCSI（ＳＡＳ）、Fibre Channel over Ethernet（登録商標）（ＦＣｏＥ）、Infinibandなど、様々な通信規格によりホスト装置８とＣＭ３−０とを接続する。ホストＩ／Ｆ６−０，６−１は二重化されており、ホストＩ／Ｆ６−０，６−１の一方が故障した場合でも、他方が正常に動作している限り、ＣＭ３−０は正常に動作を継続することができる。
【００２５】
ディスクＩ／Ｆ７−０，７−１は、ＣＭ３と後述するディスク５−０，５−１，…，５−ｎとを、例えば、ＳＡＳによって接続するExpanderやI/O Controller（ＩＯＣ）などのインタフェースである。ディスクＩ／Ｆ７−０，７−１は、ディスク５−０，５−１，…，５−ｎとのデータのやり取りを制御する。ディスクＩ／Ｆ７−０，７−１は二重化されており、ディスクＩ／Ｆ７−０，７−１の一方が故障した場合でも、他方が正常に動作している限り、ＣＭ３−０は正常に動作を継続することができる。
【００２６】
ＣＰＵ４−０は、種々の制御や演算を行なう処理装置であり、不図示のRead Only Memory（ＲＯＭ）等に格納されたプログラムを実行することにより、種々の機能を実現する。又、ＣＰＵ４−０は、プログラムを実行することにより、図２を用いて後述する制御部（ストレージ制御装置）１１として機能する。
メモリ９−０は、ＣＰＵ４−０が実行するプログラムや種々のデータ、ＣＰＵ４−０の動作により得られたデータ等を格納する。又、メモリ９−０は、図２を用いて後述する各種変数やテーブルを格納する格納部としても機能する。メモリ９−０としては、例えばRandom Access Memory（ＲＡＭ）などを用いることができる。
【００２７】
なお、ＣＭ３−０内のホストＩ／Ｆ６−０，６−１、ＣＰＵ４−０などの構成要素は、例えばPCI Express（ＰＣＩｅ）により相互に接続されている。
ＣＭ３−１は、ホストＩ／Ｆ６−２，６−３、ディスクＩ／Ｆ７−２，７−３、ＣＰＵ４−１、及びメモリ９−１をそなえる。
ホストＩ／Ｆ６−２，６−３は、例えばＳＡＮ経由でホスト装置８とＣＭ３−１とを接続するためのインタフェースである。ホストＩ／Ｆ６−２，６−３は、ＦＣ、ｉＳＣＳＩ、ＳＡＳ、ＦＣｏＥ、Infinibandなど、様々な通信規格によりホスト装置８とＣＭ３−１とを接続する。ホストＩ／Ｆ６−２，６−３は二重化されており、ホストＩ／Ｆ６−２，６−３の一方が故障した場合でも、他方が正常に動作している限り、ＣＭ３−１は正常に動作を継続することができる。
【００２８】
ディスクＩ／Ｆ７−２，７−３は、ＣＭ３−０と後述するディスク５−０，５−１，…，５−ｎとを、例えば、ＳＡＳによって接続するExpanderやＩＯＣなどのインタフェースである。ディスクＩ／Ｆ７−２，７−３は、ディスク５−０，５−１，…，５−ｎとのデータのやり取りを制御する。ディスクＩ／Ｆ７−２，７−３は二重化されており、ディスクＩ／Ｆ７−２，７−３の一方が故障した場合でも、他方が正常に動作している限り、ＣＭ３−１は正常に動作を継続することができる。
【００２９】
ＣＰＵ４−１は、種々の制御や演算を行なう処理装置であり、不図示のＲＯＭ等に格納されたプログラムを実行することにより、種々の機能を実現する。又、ＣＰＵ４−１は、プログラムを実行することにより、図２を用いて後述する制御部１１として機能する。
メモリ９−１は、ＣＰＵ４−１が実行するプログラムや種々のデータ、ＣＰＵ４−１の動作により得られたデータ等を格納する。又、メモリ９−１は、図２を用いて後述する各種変数やテーブルを格納する格納部としても機能する。メモリ９−１としては、例えばＲＡＭなどを用いることができる。
【００３０】
なお、ＣＭ３−１内のホストＩ／Ｆ６−２，６−３、ＣＰＵ４−１などの構成要素は、例えばＰＣＩｅにより相互に接続されている。
ディスク５−０，５−１，…，５−ｎは、記憶域を提供するディスクドライブである。ディスクアレイ装置２は、これらの複数のディスク５−０，５−１，…，５−ｎを組み合わせて、論理ボリュームとして機能する。
【００３１】
なお、以下、ＣＭを示す符号としては、複数のＣＭのうち１つを特定する必要があるときには符号３−０，３−１を用いるが、任意のＣＭを指すときには符号３を用いる。
又、以下、ＣＰＵを示す符号としては、複数のＣＰＵのうち１つを特定する必要があるときには符号４−０，４−１を用いるが、任意のＣＰＵを指すときには符号４を用いる。
又、以下、ディスクを示す符号としては、複数のディスクのうち１つを特定する必要があるときには符号５−０，５−１，…，５−ｎを用いるが、任意のディスクを指すときには符号５を用いる。
【００３２】
又、以下、ホストＩ／Ｆを示す符号としては、複数のホストＩ／Ｆのうち１つを特定する必要があるときには符号６−０〜６−３を用いるが、任意のホストＩ／Ｆを指すときには符号６を用いる。
又、以下、ディスクＩ／Ｆを示す符号としては、複数のディスクＩ／Ｆのうち１つを特定する必要があるときには符号７−０〜７−３を用いるが、任意のディスクＩ／Ｆを指すときには符号７を用いる。
【００３３】
又、以下、ＲＡＭを示す符号としては、複数のＲＡＭのうち１つを特定する必要があるときには符号９−０，９−１を用いるが、任意のＲＡＭを指すときには符号９を用いる。
次に、制御部１１の各機能構成について説明する。
図２は、実施形態の一例としてのディスクアレイ装置２の制御部１１の機能構成を示す図である。
【００３４】
制御部１１は、仮想ＲＡＩＤグループを形成するディスク５毎の負荷を監視して、収集した統計情報に基づいて、最適なリビルド先スペア領域を選択し、ディスクアレイ装置２のファーストリビルドを実行する。
ここで、仮想ＲＡＩＤグループとは、従来のＲＡＩＤ構成における構成ディスク以上の本数（ＲＡＩＤの冗長度以上の本数のディスク）にまたがって形成された、ファーストリビルド対応のＲＡＩＤグループである。本実施形態の一例としてのディスクアレイ装置２は、仮想ＲＡＩＤグループを形成することにより、リビルド処理時のディスク負荷を分散させる。
【００３５】
制御部１１は、仮想ＲＡＩＤグループ構成部１２、Ｉ／Ｏ負荷監視部１３、リビルド先選択部１４、リビルド実行部１５、レイアウトパターンテーブル２１、統計情報制御用変数２２、ディスク負荷監視テーブル２３、リビルド負荷目標値テーブル２４、及びリビルド負荷調整テーブル２５をそなえる。
仮想ＲＡＩＤグループ構成部１２は、図３を用いて後述する仮想ＲＡＩＤグループのレイアウトを構成し、構成したレイアウトをレイアウトパターンテーブル２１に格納する。このとき、仮想ＲＡＩＤグループ構成部１２は、公知のレイアウト作成アルゴリズムを用いてレイアウトを作成する。仮想ＲＡＩＤグループ構成部１２によるレイアウト作成アルゴリズムについては公知であるため、その説明を省略する。
【００３６】
レイアウトパターンテーブル２１は、図３に示すようなＲＡＩＤグループのレイアウトを任意の形式で格納しているテーブルである。
図３は、実施形態の一例としてのディスクアレイ装置２におけるＲＡＩＤグループのレイアウトを例示する図である。
このディスクアレイ装置２では、ＲＡＩＤ１構成が採用されている。ディスクアレイ装置２においては、ディスク５−０〜５−５の６台のディスク５により仮想ＲＡＩＤグループが構成されており、うち２台のディスク５にスペア領域１，２がチャンクセット毎に確保されている。以下の説明並びに図面においては、ディスク５−０〜５−５を、ディスク＃０〜＃５と記載することがある。
【００３７】
本例では、１つのチャンクセットを構成するチャンクＡとチャンクＡ′との間でデータが冗長化されており、１つのチャンクセットを構成するチャンクＢとチャンクＢ′との間でデータが冗長化されている。ディスク５の故障時には、チャンクセット内のスペアチャンクに、故障ディスク５のデータが復元される。各チャンクセットは、２台のディスク５上にスペア領域１，２をスペアチャンクとして有する。なお、スペア領域には、スペア領域１，２のように、それぞれ番号が付されている。
【００３８】
ここで、仮想ＲＡＩＤグループのディスクの台数をｎ、チャンクセット内の冗長グループ数をｋ、チャンクセット内の冗長グループ数をｎとすると、これらと、チャンクセット内のスペア領域の個数、並びに、チャンクセットのレイアウトの組み合わせの総数は、以下の式に示す関係を満たす。
【００３９】
【数１】
2015099438.tif 000003
【００４０】
なお、チャンクセット内のスペア領域の個数は、ｎ−２ｋとなる。
例えば、図３に示すような６台のディスク５−０〜５−５を用いて仮想ＲＡＩＤグループを形成し、スペア領域を２台のディスク５に確保する場合のレイアウトの組み合わせの総数は、６Ｃ２・４Ｃ２＝９０となる。このため、図３には各ディスク５に９０のレイアウトが図示されている。
【００４１】
又、図２に示す統計情報制御用変数２２は、後述のディスク負荷監視テーブル２３−０，２３−１のうち、アクティブな（使用中の）テーブルを示す変数を格納する。例えば、統計情報制御用変数２２に“０”が格納されている場合、ディスク負荷監視テーブル２３−０がアクティブ（使用中）であり、ディスク負荷監視テーブル２３−１が非アクティブ（使用中ではない）である。一方、統計情報制御用変数２２に“１”が格納されている場合、ディスク負荷監視テーブル２３−１がアクティブ（使用中）であり、ディスク負荷監視テーブル２３−０が非アクティブ（使用中ではない）である。
【００４２】
ディスク負荷監視テーブル２３−０，２３−１は、後述するＩ／Ｏ負荷監視部１３が集計したディスク５の統計情報を格納するテーブルである。
なお、以下、ディスク負荷監視テーブルを示す符号としては、複数のディスク負荷監視テーブルのうち１つを特定する必要があるときには符号２３−０，２３−１を用いるが、任意のディスク負荷監視テーブルを指すときには符号２３を用いる。又、以下の説明並びに図面においては、ディスク負荷監視テーブル２３−０をディスク負荷監視テーブル［０］、ディスク負荷監視テーブル２３−１をディスク負荷監視テーブル［１］と、それぞれ記載することがある。
【００４３】
ディスク負荷監視テーブル２３は複数（本例では２つ）存在する。いずれのディスク負荷監視テーブル２３が現在使用中（アクティブ）であるかは、上記の統計情報制御用変数２２によって示される。そして、アクティブなディスク負荷監視テーブル２３は、後述するＩ／Ｏ負荷監視部１３によって、規定時間毎に切り替えられる。
例えば、規定時間を３０分とすると、ディスク負荷監視テーブル２３が２つ存在する場合には、ディスク負荷監視テーブル２３が１時間毎に交互にリセットされる。この場合、ファーストリビルド開始時に、アクティブなディスク負荷監視テーブル２３を参照することにより、常に少なくとも３０分間の履歴が記録されている統計情報に基づいて、ファーストリビルドの最適化を行なうことができる。
【００４４】
図４は、実施形態の一例としてのディスクアレイ装置２にそなえられる統計情報制御用変数２２及びディスク負荷監視テーブル２３を例示する図である。
図４の例では、ディスク負荷監視テーブル［０］とディスク負荷監視テーブル［１］との２つのディスク負荷監視テーブル２３が使用される。統計情報制御用変数２２には、アクティブなディスク負荷監視テーブル２３の要素数を示す数値として、“０”又は“１”が格納される。前述のように、統計情報制御用変数２２に“０”が格納されている場合、ディスク負荷監視テーブル［０］がアクティブであり、統計情報制御用変数２２に“１”が格納されている場合、ディスク負荷監視テーブル［１］がアクティブである。
【００４５】
各ディスク負荷監視テーブル２３は、ディスク５毎に、当該ディスク５で発生したリードＩ／Ｏ数及びライトＩ／Ｏ数が記録されている。各ディスク負荷監視テーブル２３には、複数のディスクテーブル＃０〜＃ｎが存在し、これらのディスクテーブル＃０〜＃ｎは、それぞれ、ディスク５−０〜５−ｎ（ディスク＃０〜＃ｎ）に対応している。図３の例では、各ディスク負荷監視テーブル２３は、ディスク５−０〜５−ｎのそれぞれのリードＩ／Ｏ数及びライトＩ／Ｏ数を記録しているディスクテーブル＃０〜＃ｎを含む。
【００４６】
各ディスクテーブル＃０〜＃ｎには、図３に図示したようなレイアウトパターン＃０〜＃ｍ（ｍ＝レイアウトパターン数−１；図３の例ではｍ＝８９）毎に、Ｉ／Ｏコマンド数（リードＩ／Ｏ数及びライトＩ／Ｏ数）が記録される。
古い（非アクティブな）ディスク負荷監視テーブル２３は、一定時間毎にＩ／Ｏ負荷監視部１３によってクリアされる。
【００４７】
ディスク負荷監視テーブル２３の切り替え及びクリアの処理については、図８を用いて後述する。
図４において、２つのディスク負荷監視テーブル２３が使用される例を示し、以下の説明でも、この例を用いて説明するが、ディスク負荷監視テーブル２３の数は２以外であってもよい。
【００４８】
図５は、実施形態の一例としてのディスクアレイ装置２にそなえられるリビルド負荷目標値テーブル２４を例示する図である。
リビルド負荷目標値テーブル２４は、ファーストリビルド時に、後述するリビルド先選択部１４がリビルド先のスペア領域を選択する際に、ディスク５毎のスペア領域数の目標とすべき値（期待値）を格納しているテーブルである。つまり、リビルド負荷目標値テーブル２４は、ディスク５毎に、当該ディスク５で使用されるスペア領域の個数の目標値が記録される。リビルド負荷目標値テーブル２４は、後述するリビルド先選択部１４によって、Ｉ／Ｏ負荷監視部１３が収集した統計情報から生成される。その際、リビルド先選択部１４は、ファーストリビルド時のディスク５の負荷が分散されるよう、各ディスク５のスペア領域の個数の目標値を決定する。目標値の決定方法については後述する。
【００４９】
図６は、実施形態の一例としてのディスクアレイ装置２にそなえられるリビルド負荷調整テーブル２５を例示する図である。
リビルド負荷調整テーブル２５は、ディスク５毎に、ファーストリビルド時に、当該ディスク５で使用されるスペア領域の実際の個数が記録される作業テーブルである。後述するリビルド先選択部１４は、リビルド負荷調整テーブル２５に格納される各ディスク５のスペア領域の個数を、リビルド負荷目標値テーブル２４に格納されている目標値（期待値）に近づけるように調整する。
【００５０】
図２に示すＩ／Ｏ負荷監視部１３は、仮想ＲＡＩＤグループを形成するディスク５毎に、当該ディスク５で実行されるＩ／Ｏコマンドを監視して、統計情報として記録する。詳細には、Ｉ／Ｏ負荷監視部１３は、ホスト８からのリードＩ／Ｏ及びライトＩ／Ｏのコマンド数を、前述のディスク負荷監視テーブル２３に記録する。その際、Ｉ／Ｏ負荷監視部１３は、各ディスク５について、レイアウトパターン毎のＩ／Ｏコマンド数を加算する。その際、Ｉ／Ｏ負荷監視部１３は、後述するように、Ｉ／Ｏコマンドの要求ブロックサイズに応じて、加算するＩ／Ｏコマンド数に重み付けを行なう。
【００５１】
又、Ｉ／Ｏ負荷監視部１３は、ディスク５へのコマンド発行時に、当該コマンドがリビルドのコマンドか否かを判定して、リビルドのコマンドであればＩ／Ｏコマンドのカウントに加算しない。
なお、Ｉ／Ｏ負荷監視部１３は、ディスクアレイ装置２がホスト８からＩ／Ｏを受け付けたタイミングではなく、各ディスク５に実際にコマンドを発行するタイミングで負荷監視を行なう。この理由は、リビルド処理は、ディスクアレイ装置２としての負荷よりも、各ディスク５に実際にかかっている負荷によってより大きな影響を受けるためである。
【００５２】
リビルド先選択部１４は、ディスク５の故障が発生した際に、Ｉ／Ｏ負荷監視部１３が集計した統計情報に基づいて、リビルド先として最適なスペア領域を決定し、リビルド処理を最適化する。
その際、リビルド先選択部１４は、Ｉ／Ｏ負荷監視部１３が集計した統計情報に基づいて、各ディスク５から、リビルド先に選択するスペア領域の個数を求め、その値を後述するリビルド負荷目標値テーブル２４に記憶する。
【００５３】
詳細には、リビルド先選択部１４は、ディスク負荷監視テーブル２３−０，２３−１のうちのアクティブなディスク負荷監視テーブル２３の内容をコピーする。
次に、リビルド先選択部１４は、コピーしたディスク負荷監視テーブル２３のデータについて、レイアウトパターン毎に、故障ディスク５のディスクテーブルのリードＩ／Ｏの値を、故障ディスクと対をなすディスク５のディスクテーブルの値に加算する。ここで、リードＩ／Ｏの値のみを加算するのは、リードＩ／Ｏは通常、ＲＡＩＤの冗長ペアの一方のディスク５に対してのみ行なわれるので、故障ディスク５のリードが冗長ペアに実施されることを加味するためである。ライトＩ／Ｏは常に冗長ペアの両方のディスク５に対して行なわれるため、ライトＩ／Ｏの値を加算する必要はない。
【００５４】
リビルド先選択部１４は、故障したディスク５以外のディスク５について、コピーしたディスク負荷監視テーブル２３において、ディスク５毎にリードＩ／ＯとライトＩ／Ｏとを合算する。
リビルド先選択部１４は、以下の式（２）に従って、故障したディスク５以外のディスク５について、ディスク５毎に、ディスクアレイ装置２に対する総Ｉ／Ｏ数と各ディスク５のＩ／Ｏ数の比率の逆数を算出する。
【００５５】
比率の逆数＝｛（総Ｉ／Ｏ数）／（ディスク＃０のＩ／Ｏ数）｝／［｛（総Ｉ／Ｏ数）／（ディスク＃０のＩ／Ｏ数）｝＋｛（総Ｉ／Ｏ数）／（ディスク＃１のＩ／Ｏ数）｝＋｛（総Ｉ／Ｏ数）／（ディスク＃２のＩ／Ｏ数）｝＋｛（総Ｉ／Ｏ数）／（ディスク＃３のＩ／Ｏ数）｝＋｛（総Ｉ／Ｏ数）／（ディスク＃４のＩ／Ｏ数）｝＋｛（総Ｉ／Ｏ数）／（ディスク＃５のＩ／Ｏ数）｝］
…式（２）
この逆数の値は、ディスク５のＩ／Ｏ数が少ないほうが大きくなる。
【００５６】
リビルド先選択部１４は、リビルドが必要な総チャンク数を母数とした比率に分配した値を、各ディスク５の使用チャンク数として、リビルド負荷目標値テーブル２４として記憶する。
各ディスク５の使用チャンク数＝リビルドが必要な総チャンク数×比率の逆数  
…式（３）
次に、リビルド先選択部１４は、リビルド先のスペア領域を、レイアウトパターン毎に、最も番号の小さい空きのスペア領域に仮決めして、リビルド負荷調整テーブル２５を生成する。
【００５７】
そして、リビルド先選択部１４は、リビルド負荷目標値テーブル２４に基づいて、リビルド負荷調整テーブル２５内のレイアウトパターン毎のスペア領域の個数を修正していく。つまり、リビルド先選択部１４は、リビルド負荷目標値テーブル２４の目標値に近づけるべく、レイアウトパターン毎に仮決めしたスペア領域を変更していく。以下、リビルド先選択部１４によるこの処理を、「ファーストリビルド最適化処理」と呼ぶ。ファーストリビルド最適化処理の詳細については、図９を用いて後述する。
【００５８】
リビルド実行部１５は、リビルド先選択部１４が選択したリビルド先のスペア領域に、故障ディスク５のデータを復元してリビルドを実行する。その際、リビルド実行部１５は公知のリビルド手法を用いてリビルド処理を実行する。なお、リビルド手法については公知であるため、その説明を省略する。
なお、上記実施形態の一例においては、ＣＭ３のＣＰＵ４が、データ複製プログラムを実行することにより、上述した制御部１１、仮想ＲＡＩＤグループ構成部１２、Ｉ／Ｏ負荷監視部１３、リビルド先選択部１４、及びリビルド実行部１５として機能するようになっている。
【００５９】
なお、上述した制御部１１、仮想ＲＡＩＤグループ構成部１２、Ｉ／Ｏ負荷監視部１３、リビルド先選択部１４、及びリビルド実行部１５としての機能を実現するためのプログラムは、例えばフレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ等），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ＋Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋ＲＷ，ＨＤ  ＤＶＤ等），ブルーレイディスク，磁気ディスク，光ディスク，光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
【００６０】
上述した制御部１１、仮想ＲＡＩＤグループ構成部１２、Ｉ／Ｏ負荷監視部１３、リビルド先選択部１４、及びリビルド実行部１５としての機能を実現する際には、内部記憶装置（本実施形態ではＣＭ３のメモリ９や不図示のＲＯＭ）に格納されたプログラムがコンピュータのマイクロプロセッサ（本実施形態ではＣＭ３のＣＰＵ４）によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
（Ｂ）動作
次に、実施形態の一例としてのディスクアレイ装置２の制御部１１の動作について説明する。
【００６１】
図７は、実施形態の一例としてのＩ／Ｏ負荷監視部１３によるディスク負荷監視処理のフローチャートである。
ステップＳ１において、Ｉ／Ｏ負荷監視部１３は、ホスト８からのＩ／Ｏ要求を受信する。
ステップＳ２において、Ｉ／Ｏ負荷監視部１３は、ステップＳ１で受信したＩ／Ｏ要求がリビルドに起因して発生したＩ／Ｏであるかどうかを判定する。
【００６２】
Ｉ／Ｏ要求がリビルドに起因して発生したＩ／Ｏである場合（ステップＳ２のＹＥＳルート参照）、そのＩ／Ｏ要求は監視対象外であるので、Ｉ／Ｏ負荷監視部１３は監視を行なわない。そして、ステップＳ１０においてそのＩ／Ｏ要求が実行される。
Ｉ／Ｏ要求がリビルドに起因して発生したＩ／Ｏではない場合（ステップＳ２のＮＯルート参照）、Ｉ／Ｏ負荷監視部１３は、ステップＳ３において、ステップＳ１で受信したＩ／Ｏ要求がリードＩ／Ｏ、ライトＩ／Ｏのいずれであるかを特定する。
【００６３】
ステップＳ４において、Ｉ／Ｏ負荷監視部１３は、ステップＳ１で受信したＩ／Ｏ要求コマンドに基づいて、要求されているブロックサイズを特定する。
ステップＳ５において、Ｉ／Ｏ負荷監視部１３は、ステップＳ４で確認したブロックサイズより、加算すべきコマンド数を決定する。
ここで、加算するコマンド数はＩ／Ｏ要求ブロック数から決定する。例えば「８ＫＢまでの要求なら１コマンド分、８ＫＢ〜３２ＫＢなら２コマンド分、３２ＫＢ〜１２８ＫＢなら３コマンド分、１２８ＫＢ〜５１２ＫＢなら４コマンド分、５１２ＫＢ〜なら５コマンド分として加算する」などのように予め規定しておく。このように規定することにより、発行されたコマンド数だけではなく、コマンドで転送されるブロック長も考慮したディスク５の負荷監視を行なうことができる。
【００６４】
ステップＳ６において、Ｉ／Ｏ負荷監視部１３は、ステップＳ１で受信したＩ／Ｏ要求コマンドに基づいて、要求されているディスク論理ブロックアドレス（Logical Block Address；ＬＢＡ）を特定する。
ステップＳ７において、Ｉ／Ｏ負荷監視部１３は、要求されたＬＢＡとレイアウトパターンテーブル２１とから、ステップＳ１で受信した要求コマンドの範囲に該当するレイアウトパターンを特定する。
【００６５】
ここで、ディスクアレイ装置２のボリュームに対するＩ／Ｏ要求は、仮想ＲＡＩＤグループのレイアウト（図３参照）を参照することによって、ディスク５のＬＢＡに対するＩ／Ｏ要求に変換される。このため、Ｉ／Ｏ負荷監視部１３は、レイアウトパターンテーブル２１に記録されている仮想ＲＡＩＤグループのレイアウトを参照することにより、Ｉ／Ｏコマンドの対象のレイアウトを特定することができる。
【００６６】
ステップＳ８において、Ｉ／Ｏ負荷監視部１３は、ディスク負荷監視テーブル［０］の、対象のディスク５、コマンド種別（リード又はライト）、レイアウトパターンの該当する箇所に、ステップＳ５で決定したコマンド数を加算する。
ステップＳ９において、Ｉ／Ｏ負荷監視部１３は、ディスク負荷監視テーブル［１］の、対象のディスク５、コマンド種別（リード又はライト）、レイアウトパターンの該当する箇所に、ステップＳ５で決定したコマンド数を加算する。
【００６７】
図８は、実施形態の一例としてのＩ／Ｏ負荷監視部１３による統計情報切り替え及びクリア処理のフローチャートである。
ステップＳ１１において、Ｉ／Ｏ負荷監視部１３は、アクティブなディスク負荷監視テーブル２３を切り替える。詳細には、ディスク負荷監視テーブル２３［０］がアクティブであった場合はディスク負荷監視テーブル２３［１］をアクティブに、ディスク負荷監視テーブル２３［１］がアクティブであった場合はディスク負荷監視テーブル２３［０］をアクティブにする。
【００６８】
ステップＳ１２において、Ｉ／Ｏ負荷監視部１３は、ステップＳ１１で非アクティブに設定したディスク負荷監視テーブル２３の情報をクリアする。
ステップＳ１３において、Ｉ／Ｏ負荷監視部１３は、ディスク負荷監視テーブル２３をクリアする規定時間（例えば３０分）のタイマを仕掛けて、規定時間待機する。規定時間の経過後、Ｉ／Ｏ負荷監視部１３はステップＳ１１に戻り、アクティブなディスク負荷監視テーブル２３を切り替える。
【００６９】
このように、図８の処理においては、Ｉ／Ｏ負荷監視部１３は、規定時間毎にアクティブなディスク負荷監視テーブル２３を切り替えて、古くなったディスク負荷監視テーブル２３をクリアする。
図９は、実施形態の一例としてのリビルド先選択部１４によるファーストリビルド最適化処理のフローチャートである。
【００７０】
ステップＳ２１において、リビルド先選択部１４は、リビルド対象のディスク５が、仮想ＲＡＩＤグループに所属しているかどうかを判定する。
リビルド対象のディスク５が、仮想ＲＡＩＤグループに所属していない場合（ステップＳ２１のＮＯルート参照）、リビルド先選択部１４は、ファーストリビルド最適化処理を行なわずに処理を終了する。
【００７１】
リビルド対象のディスク５が、仮想ＲＡＩＤグループに所属している場合（ステップＳ２１のＹＥＳルート参照）、ステップＳ２２において、リビルド先選択部１４は、リビルドに使用するスペア領域を、最も番号の小さい空きのスペア領域に仮決めする。そして、リビルド先選択部１４は、各レイアウトパターンについて最若番のスペア領域を使用して、リビルド負荷調整テーブル２５を作成する。
【００７２】
ステップＳ２３において、リビルド先選択部１４は、仮想ＲＡＩＤグループにおいて複数のスペア領域が使用可能かどうかを判定する。例えば、リビルド先選択部１４は、複数のスペア領域が使用可能かどうかを、ディスクアレイ装置２の不図示の構成情報を参照することにより判定することができる。ディスクアレイ装置２の構成情報については、当業界において公知であるためその詳細な説明は省略する。
仮想ＲＡＩＤグループにおいて複数のスペア領域を使用できない場合（ステップＳ２３のＮＯルート参照）、リビルド先選択部１４は、ファーストリビルド最適化処理を行なわずに処理を終了する。
【００７３】
仮想ＲＡＩＤグループにおいて複数のスペア領域を使用可能な場合（ステップＳ２３のＹＥＳルート参照）、リビルド先選択部１４は、ステップＳ２４において、アクティブなディスク負荷監視テーブル２３をコピーする。そして、故障したディスク５のリードＩ／Ｏ数をペアディスク５のリードＩ／Ｏ数に加算し、リビルド負荷目標値テーブル２４を作成する。
【００７４】
以降のステップＳ２５〜Ｓ３２では、リビルド先選択部１４は、レイアウトパターン毎にファーストリビルド最適化処理を実行する。まず、ステップＳ２５において、リビルド先選択部１４は、先頭のレイアウトパターン＃０（初期値）を処理対象として設定する。
ステップＳ２６において、リビルド先選択部１４は、仮決めしたスペア領域が格納されているディスク５について、リビルド負荷調整テーブル２５の値がリビルド負荷目標値テーブル２４の値以上であるかどうかを判定する。
【００７５】
リビルド負荷調整テーブル２５の値がリビルド負荷目標値テーブル２４の値以上ではない場合（ステップＳ２６のＮＯルート参照）、処理が後述するステップＳ３１に移る。
一方、リビルド負荷調整テーブル２５の値がリビルド負荷目標値テーブル２４の値以上である場合（ステップＳ２６のＹＥＳルート参照）、選択するスペア領域を減らすほうが望ましいと考えられる。そこで、ステップＳ２７において、リビルド先選択部１４は、本レイアウトパターンにおける次のスペア領域候補が格納されているディスク５について、リビルド負荷調整テーブル２５の値がリビルド負荷目標値テーブル２４の値を下回っているかどうかを確認する。
【００７６】
リビルド負荷調整テーブル２５の値がリビルド負荷目標値テーブル２４の値を下回っている場合（ステップＳ２７のＹＥＳルート参照）、選択するスペア領域を増やすことが望ましいと考えられる。このため、ステップＳ２８において、リビルド先選択部１４はリビルド先スペア領域を変更し、リビルド負荷調整テーブル２５の値を変更する。このため、ステップＳ２８において、リビルド先選択部１４は、当該レイアウトパターンにおけるリビルド先スペア領域をステップＳ２２で仮決めした領域から、ステップＳ２７で候補とした領域に変更する。その際、リビルド負荷調整テーブルにおいて、ステップＳ２２で仮決めした領域が存在するディスクの値から１減算し、ステップＳ２７で候補となった領域が存在するディスクの値に１加算する。
【００７７】
一方、ステップＳ２７でリビルド負荷調整テーブル２５の値がリビルド負荷目標値テーブル２４の値を下回っていない場合（ステップＳ２７のＮＯルート参照）、ステップＳ２９において、リビルド先選択部１４は、本レイアウトパターン内に更に次のスペア領域候補が存在するかどうかを判定する。
次の候補が存在する場合（ステップＳ２９のＹＥＳルート参照）、リビルド先選択部１４は、ステップＳ３０において次の候補を選択し、ステップＳ２７に戻り、次の候補の使用可否を判断する。
【００７８】
次の候補が存在しない場合（ステップＳ２９のＮＯルート参照）、このレイアウトパターンにおける最適化が完了したので、ステップＳ３１において、リビルド先選択部１４は、まだ最適化処理を行なっていないレイアウトパターンが存在するかどうかを判定する。
まだ最適化処理を行なっていないレイアウトパターンが存在する場合（ステップＳ３１のＮＯルート参照）、リビルド先選択部１４は、ステップＳ３２において次のレイアウトパターンを処理対象に設定して、ステップＳ２６に戻る。
【００７９】
一方、全レイアウトパターンの最適化処理を完了している場合（ステップＳ３１のＹＥＳルート参照）、リビルド先選択部１４はファーストリビルド最適化処理を終了し、リビルド実行部１５が実際のリビルド処理を開始する。
図１０〜図１４は、実施形態の一例としてのディスクアレイ装置におけるリビルド負荷調整テーブル２５及びリビルド負荷目標値テーブル２４の値を例示する図である。なお、これらの例示には、後述する図１５（ａ）に示されるレイアウトパターンを用いる。
【００８０】
ここで、図１０は、図９のステップＳ２４実行後のリビルド負荷調整テーブル２５及びリビルド負荷目標値テーブル２４のそれぞれの値を例示する。又、図１１は、レイアウトパターン＃０〜＃３に対して図９のステップＳ２６〜Ｓ３１を実行した後のリビルド負荷調整テーブル２５及びリビルド負荷目標値テーブル２４のそれぞれの値を例示する。図１２は、レイアウトパターン＃４に対して図９のステップＳ２６〜Ｓ３１を実行した後のリビルド負荷調整テーブル２５及びリビルド負荷目標値テーブル２４のそれぞれの値を例示する。図１３は、レイアウトパターン＃５に対して図９のステップＳ２６〜Ｓ３１を実行した後のリビルド負荷調整テーブル２５及びリビルド負荷目標値テーブル２４のそれぞれの値を例示する。図１４は、レイアウトパターン＃６に対して図９のステップＳ２６〜Ｓ３１を実行した後のリビルド負荷調整テーブル２５及びリビルド負荷目標値テーブル２４のそれぞれの値を例示する。
【００８１】
次に、図１５〜図１８を用いて、実施形態の一例としてのディスクアレイ装置２の制御部１１によるファーストリビルド最適化処理の具体例を説明する。
図１５（ａ）は、実施形態の一例としてのディスクアレイ装置２のディスク故障発生前のレイアウトテーブル２１を示す図であり、図１５（ｂ）は、そのときのディスク負荷監視テーブル２３の具体例を示す図である。図１６（ａ）は、実施形態の一例としてのディスクアレイ装置２のディスク故障発生後のレイアウトテーブル２１を示す図であり、図１６（ｂ）は、そのときのディスク負荷監視テーブル２３の具体例を示す図である。図１７は、リビルド先選択部１４によるファーストリビルド最適化処理中の計算結果を、図１８は、リビルド先選択部１４によるファーストリビルド最適化処理後のレイアウトテーブルをそれぞれ例示する図である。
【００８２】
図１５〜図１８の例では、ディスク５−０〜５−４（ディスク＃０〜＃４）の５台のディスク５により仮想ＲＡＩＤグループが構成されており、うち３台のディスク５にスペア領域１〜３がチャンクセット毎に確保されている。
図１５（ｂ）に示すように、１つのチャンクセットを構成するチャンクＡとチャンクＡ′との間でデータが冗長化されており、ディスク５の故障時には、チャンクセット内のスペアチャンクに、故障ディスク５のデータが復元される。各チャンクセットは、３台のディスク５上にスペア領域１〜３をスペアチャンクとして有する。
【００８３】
このときのアクティブなディスク負荷監視テーブル２３−０を、図１５（ｂ）に示す。
図１５（ａ）に示すように、冗長ペアを形成するチャンク同士はライトＩ／Ｏのカウントが一致している。例えば、ディスクテーブル＃０のレイアウトパターン＃０とディスクテーブル＃１のレイアウトパターン＃０とのライトＩ／Ｏの値は共に３２００であり、ディスクテーブル＃０のレイアウトパターン＃１とディスクテーブル＃２のレイアウトパターン＃１とのライトＩ／Ｏの値は共に６００である。
【００８４】
図１５（ａ）に示す例では、ディスク＃０及びディスク＃１の先頭領域にアクセスが偏っている。
ここで、ディスク５−１（ディスク＃１）で故障が発生したとする。
ディスク＃１が故障したときのレイアウトテーブル２１及びディスク負荷監視テーブル２３を、図１６（ａ），（ｂ）に示す。故障したディスク＃１は、斜線を付して示されている。
【００８５】
図１６（ａ）中、網掛けを付したチャンク（Ａで示す）は、リビルド先選択部１４によって仮決めされたリビルド先スペア領域を示す。又、縦線を付したチャンク（Ｂで示す）は、リビルドのためにリードを行なう必要があるチャンクを示す。
ここで、リビルド先選択部１４は、アクティブなディスク負荷監視テーブル２３−０のコピーを作成し、各ディスク５のＩ／Ｏ数について、ディスク＃１のリードＩ／Ｏの値を、冗長ペアを形成するディスク５のＩ／Ｏ数にそれぞれ加算する。例えば、ディスクテーブル＃１のレイアウトパターン＃０とのリードＩ／Ｏの値の１１００を、冗長ペアを形成するディスクテーブル＃０のレイアウトパターン＃０の値である１３００に加算する。図１６（ｂ）に斜体文字（矢印Ｃ）で示すように、冗長ペアを形成するディスクテーブル＃０のレイアウトパターン＃０の値が、１３００＋１１００＝２４００と変更される。そして、各レイアウトパターンのリードＩ／Ｏ数及びライトＩ／Ｏ数を加算して、ディスク＃０のＩ／Ｏ数を、２４００＋３２００＋３３０＋６００＋２０＋３０＋１２０＋７５０＝７５４０と求める。同様に、ディスク＃１〜＃４についても、ディスク＃１のリードＩ／Ｏの値を、冗長ペアを形成するディスク５のＩ／Ｏ数にそれぞれ加算したのち、各ディスク５のＩ／Ｏ数を求める。この計算結果を、図１７の「Ｉ／Ｏ数」の欄に示す。
【００８６】
又、リビルド先選択部１４は、全Ｉ／Ｏに対する各ディスク５のＩ／Ｏの比率の逆数を算出する。まず、図１７の表から、ディスクアレイ装置２の総Ｉ／Ｏ数を、７４５０＋１５４０＋５４０＋１２３０＝１０７６０と求める。次に、リビルド先選択部１４は、ディスク＃０のＩ／Ｏ数を、２４００＋３２００＋３３０＋６００＋２０＋３０＋１２０＋７５０＝７４５０と求める。総Ｉ／Ｏ数に対するディスク＃０のＩ／Ｏ比の逆数は、（１０７６０／７４５０）／｛（１０７６０／７４５０）＋（１０７６０／１５４０）＋（１０７６０／５４０）＋（１０７６０／１２３０）｝＝０．０３８９…＝３．９％となる。リビルド先選択部１４は、ディスク＃１〜＃４についても同様の計算を行なう。上記の計算結果を、図１７の「Ｉ／Ｏ比率の逆数」の欄に示す。
【００８７】
次に、リビルド先選択部１４は、リビルド先として使用するスペア領域の個数を、ディスク５毎に算出する。その際、リビルド先選択部１４は、故障ディスク＃１に格納されているチャンクＡ，Ａ′の総数である４に、各ディスク５のＩ／Ｏ比率の逆数の値を掛けて、得られた値を整数値に丸めることにより、スペア領域の個数を算出する。この結果を、図１７の「リビルド負荷目標値」の欄に示す。
【００８８】
なお、整数値への値の丸めは、リビルド先選択部１４によって公知の手法により行なわれるので、その詳細な説明はここでは省略する。リビルド先選択部１４は、このようにして算出した図１７の「リビルド負荷目標値」の欄の値を、リビルド負荷目標値テーブル２４（図５参照）に設定する。
リビルド先選択部１４は、このリビルド負荷目標値テーブル２４を使用して、図９のファーストリビルド最適化処理を実行する。この結果、リビルド先選択部１４は、最終的なリビルド先スペア領域として図１８に網掛けを付した領域（Ｅで示す）を選択して、ディスク５のＩ／Ｏ負荷に応じてファーストリビルドを最適化する。
【００８９】
図１８中、Ｄで示すチャンクが、リビルドのためのリードが必要な領域である。リビルド先選択部１４によって選択されたリビルド先スペア領域である。Ｅで示すチャンクが、リビルド先選択部１４によって選択されたリビルド先スペア領域である。リビルド先選択部１４は、Ｉ／Ｏ負荷が高いディスク＃０を避けて、Ｉ／Ｏ負荷が低いディスク＃３のチャンクを多く使用している。
【００９０】
図１５〜図１８の例では、説明の便宜上、レイアウトの組み合わせ数が１０という小規模な例を示したが、レイアウトの組み合わせ数が多いほど、リビルド先選択部１４によるリビルド最適化の効果が向上する。
（Ｃ）効果
このように、本実施形態の一例の制御部１１においては、Ｉ／Ｏ負荷監視部１３が、ホスト８から、仮想ＲＡＩＤグループを構成する各ディスク５に対する発行コマンド数及びアクセスデータ量などのＩ／Ｏ負荷を監視して、その結果を、レイアウトパターン毎にディスク負荷監視テーブル２３に集計する。そして、ディスク５の故障時に、リビルド先選択部１４が、Ｉ／Ｏ負荷監視部１３が収集したこの統計情報に基づいて、ファーストリビルド先のスペア領域を選択して、ファーストリビルド処理を最適化する。
【００９１】
これにより、リビルド先選択部１４は、Ｉ／Ｏ負荷が高いディスク５を避け、Ｉ／Ｏ負荷が低いディスク５から多くのスペア領域を選択する。
この結果、ファーストリビルド時のディスク５のＩ／Ｏ負荷が分散され、ファーストリビルドの処理時間が短縮される。
仮想ＲＡＩＤグループへのユーザデータの配置の方式やアクセスの方式によっては、Ｉ／Ｏ処理により特定のディスクに負荷が偏る場合が考えられる。そのような状況でディスク故障が発生した場合、全ディスクに均等にアクセスを行なってリビルド処理を遂行するよりも、Ｉ／Ｏ負荷の低いディスクを積極的に使用してリビルド処理を遂行したほうが、性能が向上すると考えられる。
【００９２】
そこで、このような場合に、Ｉ／Ｏ負荷に応じてリビルド処理を実施するディスクを選択することにより、ファーストリビルド実行時の負荷バランスを最適化して、ディスクアレイ装置のリビルド時間を短縮することができる。
又、Ｉ／Ｏ負荷監視部１３は、アクティブなディスク負荷監視テーブル２３を規定時間毎に切り替えている。このため、ファーストリビルド開始時に、リビルド先選択部１４がアクティブなディスク負荷監視テーブル２３を参照することにより、少なくとも３０分間の履歴が記録されている統計情報に基づいて、ファーストリビルドの最適化を行なうことができる。
（Ｄ）その他
なお、上述した実施形態に関わらず、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。
【００９３】
例えば、上記の実施形態の一例においては、ＲＡＩＤ１ベースの仮想ＲＡＩＤグループを例に採り上げて説明したが、上記の実施形態の一例は、他のＲＡＩＤレベルにも適用することができる。例えば、各チャンクセット内に複数のスペア領域を有する仮想ＲＡＩＤグループであれば、ＲＡＩＤ５構成またはＲＡＩＤ６構成に対しても本実施形態の一例を適用可能である。
【００９４】
又、上記の実施形態の一例においては、ディスク５がＨＤＤである構成について説明したが、ディスク５がSolid State Drive（ＳＳＤ）などの他のストレージ装置であってもよい。
或いは、上記の実施形態においては、アクティブなディスク負荷監視テーブル２３を３０分毎に切り替える例について説明した。しかし、統計情報は、リビルド処理に要する時間分だけ採取すればよく、アクティブなディスク負荷監視テーブル２３を切り替える時間を、仮想ＲＡＩＤグループの構成に応じて適宜設定することができる。
【００９５】
（Ｅ）付記
以上の実施形態に関し、さらに以下の付記を開示する。
（付記１）
複数の記憶装置をそなえるストレージ装置を制御するストレージ制御装置であって、
前記複数の記憶装置のそれぞれの統計情報を収集する監視部と、
前記複数の記憶装置のいずれかの故障時に、故障が発生した記憶装置のデータを復元する復元先の記憶装置を、前記監視部によって収集された前記統計情報に基づいて選択する選択部と、
をそなえることを特徴とするストレージ制御装置。
【００９６】
（付記２）
前記監視部は、記憶装置毎に前記統計情報を収集することを特徴とする付記１記載のストレージ制御装置。
（付記３）
前記統計情報は前記記憶装置に対する入出力数であることを特徴とする付記１又は２記載のストレージ制御装置。
【００９７】
（付記４）
前記選択部は、前記記憶装置の発行コマンド数及びアクセスデータ量を前記入出力負荷として収集することを特徴とする付記３記載のストレージ制御装置。
（付記５）
前記選択部は、前記復元先の記憶装置を、前記入出力負荷の低い記憶装置から優先的に、所定サイズのチャンク単位で選択することを特徴とする付記３又は４記載のストレージ制御装置。
【００９８】
（付記６）
前記複数の記憶装置は、記憶されている前記チャンク単位のデータに対し、予備のチャンク単位を複数有することを特徴とする付記５記載のストレージ制御装置。
（付記７）
複数の記憶装置をそなえるストレージ装置を制御するストレージ制御方法であって、
前記複数の記憶装置のそれぞれの統計情報を収集し、
前記複数の記憶装置のいずれかの故障時に、故障が発生した記憶装置のデータを復元する復元先の記憶装置を、収集された前記統計情報に基づいて選択する
ことを特徴とするストレージ制御方法。
【００９９】
（付記８）
記憶装置毎に前記統計情報を収集することを特徴とする付記７記載のストレージ制御方法。
（付記９）
前記統計情報は前記記憶装置に対する入出力数であることを特徴とする付記７又は８記載のストレージ制御方法。
【０１００】
（付記１０）
前記記憶装置の発行コマンド数及びアクセスデータ量を前記入出力負荷として収集することを特徴とする付記９記載のストレージ制御方法。
（付記１１）
前記復元先の記憶装置を、前記入出力負荷の低い記憶装置から優先的に、所定サイズのチャンク単位で選択することを特徴とする付記９又は１０記載のストレージ制御方法。
【０１０１】
（付記１２）
前記複数の記憶装置は、記憶されている前記チャンク単位のデータに対し、予備のチャンク単位を複数有することを特徴とする付記１１記載のストレージ制御方法。
（付記１３）
複数の記憶装置をそなえるストレージ装置を制御するストレージ制御プログラムであって、
前記複数の記憶装置のそれぞれの統計情報を収集し、
前記複数の記憶装置のいずれかの故障時に、故障が発生した記憶装置のデータを復元する復元先の記憶装置を、収集された前記統計情報に基づいて選択する
処理をコンピュータに実行させることを特徴とするストレージ制御プログラム。
【０１０２】
（付記１４）
記憶装置毎に前記統計情報を収集する処理を前記コンピュータに実行させることを特徴とする付記１３記載のストレージ制御プログラム。
（付記１５）
前記統計情報は前記記憶装置に対する入出力数であることを特徴とする付記１３又は１４記載のストレージ制御プログラム。
【０１０３】
（付記１６）
前記記憶装置の発行コマンド数及びアクセスデータ量を前記入出力負荷として収集する処理を前記コンピュータに実行させることを特徴とする付記１５記載のストレージ制御プログラム。
（付記１７）
前記復元先の記憶装置を、前記入出力負荷の低い記憶装置から優先的に、所定サイズのチャンク単位で選択する処理を前記コンピュータに実行させることを特徴とする付記１５又は１６記載のストレージ制御プログラム。
【０１０４】
（付記１８）
前記複数の記憶装置は、記憶されている前記チャンク単位のデータに対し、予備のチャンク単位を複数有することを特徴とする付記１７記載のストレージ制御プログラム。
（付記１９）
複数の記憶装置と、
前記複数の記憶装置のそれぞれの統計情報を収集する監視部と、
前記複数の記憶装置のいずれかの故障時に、故障が発生した記憶装置のデータを復元する復元先の記憶装置を、前記監視部によって収集された前記統計情報に基づいて選択する選択部と、
をそなえることを特徴とするストレージ装置。
【符号の説明】
【０１０５】
１                  情報処理システム
２                  ディスクアレイ装置
３，３−０，３−１  ＣＭ
４，４−０，４−１  ＣＰＵ
５，５−０〜５−ｎ  ディスク（記憶装置）
１１                制御部（ストレージ制御装置）
１２                仮想ＲＡＩＤグループ構成部
１３                Ｉ／Ｏ負荷監視部（監視部）
１４                リビルド先選択部（選択部）
１５                リビルド実行部
２１                レイアウトパターンテーブル
２２                統計情報制御用変数
２３                ディスク負荷監視テーブル（統計情報）
２４                リビルド負荷目標値テーブル
２５                リビルド負荷監視テーブル
【図１】
2015099438.tif 000004
【図２】
2015099438.tif 000005
【図３】
2015099438.tif 000006
【図４】
2015099438.tif 000007
【図５】
2015099438.tif 000008
【図６】
2015099438.tif 000009
【図７】
2015099438.tif 000010
【図８】
2015099438.tif 000011
【図９】
2015099438.tif 000012
【図１０】
2015099438.tif 000013
【図１１】
2015099438.tif 000014
【図１２】
2015099438.tif 000015
【図１３】
2015099438.tif 000016
【図１４】
2015099438.tif 000017
【図１５】
2015099438.tif 000018
【図１６】
2015099438.tif 000019
【図１７】
2015099438.tif 000020
【図１８】
2015099438.tif 000021
【図１９】
2015099438.tif 000022
【図２０】
2015099438.tif 000023