(57)【特許請求の範囲】
【請求項１】
記憶装置群と、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、前記論理記憶領域に割り当てられた記憶装置のうち、第１の記憶装置に記録されていたデータと同一のデータを、前記第１の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第１の記憶装置と交換された第２の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、を有するストレージ制御装置と、
を備え、
前記リビルド制御部は、前記論理記憶領域についての前記リビルド処理のデータの読み出し対象範囲を複数に分割した制御範囲ごとに、当該制御範囲からデータを読み出す読み出し処理と、当該制御範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む書き込み処理との組み合わせを含む部分リビルド処理を生成して、前記アクセス処理部に対して複数の前記部分リビルド処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分リビルド処理の実行指示に応じて、指示された複数の前記部分リビルド処理を並列に実行する、
ことを特徴とするストレージシステム。
【請求項２】
前記リビルド制御部は、前記記憶装置群に含まれる記憶装置のうち互いに異なる複数の記憶装置の記憶領域によってそれぞれ構成され、データが異なる記憶装置に冗長化されるようにデータ記録がそれぞれ制御される複数の論理記憶領域について、それぞれ複数の前記部分リビルド処理の実行を前記アクセス処理部に指示し、
前記アクセス処理部は、前記複数の論理記憶領域のそれぞれについての複数の前記部分リビルド処理の実行指示に応じて、前記複数の論理記憶領域のそれぞれについての前記部分リビルド処理を並列に実行する、
ことを特徴とする請求項１記載のストレージシステム。
【請求項３】
前記アクセス処理部は、ホスト装置からの要求に応じて前記複数の論理記憶領域の少なくとも１つにアクセスするホストアクセス処理を、前記リビルド処理と並列に実行し、
前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域に対する前記ホストアクセス処理が実行されていない場合と比較して、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分リビルド処理の多重度を低下させる、
ことを特徴とする請求項２記載のストレージシステム。
【請求項４】
前記アクセス処理部は、
前記リビルド処理によって前記予備用記憶装置に書き込まれたデータを前記第２の記憶装置に書き戻すコピーバック処理、または、前記複数の論理記憶領域のいずれかについての前記リビルド処理を、当該論理記憶領域に割り当てられた前記第１の記憶装置を当該論理記憶領域から切り離さずに実行する冗長コピー処理についても、前記部分処理を単位として実行し、
前記リビルド制御部から受け付けた、前記冗長コピー処理または前記コピーバック処理に含まれる複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とする請求項２記載のストレージシステム。
【請求項５】
記憶装置群と、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、前記論理記憶領域に割り当てられた記憶装置のうち、第１の記憶装置に記録されていたデータと同一のデータを、前記第１の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第１の記憶装置と交換された第２の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、多重度設定値記憶部と、を有するストレージ制御装置と、
を備え、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行するとともに、ホスト装置から前記論理記憶領域へのアクセス要求を受信すると、前記論理記憶領域にアクセスするホストアクセス処理を、前記リビルド処理と並列に実行し、
さらに、
前記多重度設定値記憶部には、前記論理記憶領域が有し得る仕様ごとに、前記ホストアクセス処理に与える影響度合いが略均等になるように前記部分処理の多重度が設定され、
前記リビルド制御部は、前記論理記憶領域に対する前記ホストアクセス処理と当該論理記憶領域についての前記リビルド処理とが前記アクセス処理部で実行されている場合、当該論理記憶領域の仕様に対応する多重度を前記多重度設定値記憶部から取得し、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を前記多重度設定値記憶部から取得した多重度に設定し、当該論理記憶領域に対する前記ホストアクセス処理が実行されていない場合と比較して、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させる、
ことを特徴とするストレージシステム。
【請求項６】
前記リビルド制御部は、実行中の前記リビルド処理の対象の前記論理記憶領域に対する前記ホストアクセス処理が実行されていない場合、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を、異なる仕様の論理記憶領域間で共通にあらかじめ定められた多重度に設定することを特徴とする請求項５記載のストレージシステム。
【請求項７】
記憶装置群と、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、前記論理記憶領域に割り当てられた記憶装置のうち、第１の記憶装置に記録されていたデータと同一のデータを、前記第１の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第１の記憶装置と交換された第２の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、を有するストレージ制御装置と、
を備え、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行するとともに、ホスト装置から前記論理記憶領域へのアクセス要求を受信すると、前記論理記憶領域にアクセスするホストアクセス処理を、前記リビルド処理と並列に実行し、
さらに、
前記リビルド制御部は、前記論理記憶領域に対する前記ホストアクセス処理と当該論理記憶領域についての前記リビルド処理とが前記アクセス処理部で実行されている場合、当該論理記憶領域に対する前記ホストアクセス処理が実行されていない場合と比較して、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させるとともに、当該論理記憶領域に対して設定された優先度が低いほど、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させる、
ことを特徴とするストレージシステム。
【請求項８】
記憶装置群と、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、前記論理記憶領域に割り当てられた記憶装置のうち、第１の記憶装置に記録されていたデータと同一のデータを、前記第１の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第１の記憶装置と交換された第２の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、を有するストレージ制御装置と、
を備え、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示するとともに、前記ストレージ制御装置におけるバッファ使用量が所定のしきい値を超えている場合、前記バッファ使用量が前記しきい値以下の場合と比較して、前記アクセス処理部に実行させる前記論理記憶領域についての前記部分処理の多重度を低下させ、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とするストレージシステム。
【請求項９】
記憶装置群と、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、前記論理記憶領域に割り当てられた記憶装置のうち、第１の記憶装置に記録されていたデータと同一のデータを、前記第１の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第１の記憶装置と交換された第２の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、多重度設定値記憶部と、を有するストレージ制御装置と、
を備え、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行するとともに、ホスト装置から前記論理記憶領域へのアクセス要求を受信すると、前記論理記憶領域にアクセスするホストアクセス処理を、前記リビルド処理と並列に実行し、
さらに、
前記多重度設定値記憶部には、前記論理記憶領域が有し得る仕様ごとに、前記ホストアクセス処理に与える影響度合いが略均等になるように前記部分処理の多重度が設定され、
前記リビルド制御部は、前記論理記憶領域に対する前記ホストアクセス処理と当該論理記憶領域についての前記リビルド処理とが前記アクセス処理部で実行されている場合、当該論理記憶領域の仕様に対応する多重度を前記多重度設定値記憶部から取得し、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を前記多重度設定値記憶部から取得した多重度に設定する、
ことを特徴とするストレージシステム。
【請求項１０】
記憶装置群に含まれる記憶装置に対するアクセスを制御するストレージ制御装置において、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、
前記論理記憶領域に割り当てられた記憶装置のうち、第１の記憶装置に記録されていたデータと同一のデータを、前記第１の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第１の記憶装置と交換された第２の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、
を有し、
前記リビルド制御部は、前記論理記憶領域についての前記リビルド処理のデータの読み出し対象範囲を複数に分割した制御範囲ごとに、当該制御範囲からデータを読み出す読み出し処理と、当該制御範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む書き込み処理との組み合わせを含む部分リビルド処理を生成して、前記アクセス処理部に対して複数の前記部分リビルド処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分リビルド処理の実行指示に応じて、指示された複数の前記部分リビルド処理を並列に実行する、
ことを特徴とするストレージ制御装置。
【請求項１１】
記憶装置群に含まれる記憶装置に対するアクセスを制御するストレージ制御装置におけるストレージ制御方法であって、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置のうち、第１の記憶装置に記録されていたデータと同一のデータを、前記第１の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第１の記憶装置と交換された第２の記憶装置に書き込むリビルド処理を実行し、
前記リビルド処理では、
前記論理記憶領域についてのデータの読み出し対象範囲を複数に分割した制御範囲ごとに、当該制御範囲からデータを読み出す読み出し処理と、当該制御範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む書き込み処理との組み合わせを含む部分リビルド処理を生成し、
複数の前記部分リビルド処理を並列に実行する、
ことを特徴とするストレージ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム、ストレージ制御装置およびストレージ制御方法に関する。
【背景技術】
【０００２】
近年、ＨＤＤ（Hard Disk Drive）などの記憶装置を複数用いたストレージシステムが広く使用されている。このようなストレージシステムでは、一般的に、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）技術を用いて、データが２つ以上の記憶装置に冗長化されるような記録制御が行われることで、記録されるデータの安全性が高められている。
【０００３】
また、データが冗長化されたストレージシステムにおいて、記憶装置が故障すると、故障した記憶装置に記憶されていたデータが再構築されて、ホットスペア（Hot Spare）と呼ばれる予備用記憶装置などの他の記憶装置に格納される。このような処理は、一般に「リビルド処理」と呼ばれる。リビルド処理が実行されることで、データの冗長度が回復する。
【０００４】
ストレージシステムでは、ホスト装置からの要求に基づく記憶装置へのＩ／Ｏ（In/Out）処理（以下、「ホストＩ／Ｏ処理」と呼ぶ）を停止させることなく、リビルド処理をホストＩ／Ｏ処理と同時に実行することが求められている。この場合、ホストＩ／Ｏ処理の性能をできるだけ低下させずにリビルド処理が実行されることが望ましいが、その一方で、リビルド処理に要する時間を短縮したいという要求もある。
【０００５】
このような問題に鑑みて、ホストＩ／Ｏ処理とリビルド処理との負荷バランスを制御することが考えられている。例えば、ホストＩ／Ｏ処理の仕掛かり数とリビルド処理の仕掛かり数とを管理し、ホストＩ／Ｏ処理の仕掛かり数に応じてリビルド処理の実行要求数を制御するようにしたストレージシステムがある。また、リビルド処理の１回の処理サイズを、ホストＩ／Ｏ処理の有無に応じて変更するようにしたストレージシステムもある。さらに、ホスト装置からのＩ／Ｏ要求が所定時間到来しない場合には、リビルド処理におけるあるアドレスについての書き込み処理と、別のアドレスについての読み出し処理とを並行して実行するようにしたストレージシステムもある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第４３２２０６８号公報
【特許文献２】特開２００７−９４９９４号公報
【特許文献３】特許第４４７２９１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
近年のストレージシステムにおける記憶領域の大容量化に伴い、リビルド処理に要する時間が増大する傾向にある。このため、リビルド処理に要する時間をより短縮することが課題となっている。
【０００８】
１つの側面では、本発明は、リビルド処理を高速化できるようにしたストレージシステム、ストレージ制御装置およびストレージ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、記憶装置群とストレージ制御装置とを備えるストレージシステムが提供される。ストレージ制御装置は、記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、論理記憶領域に割り当てられた記憶装置のうち、第１の記憶装置に記録されていたデータと同一のデータを、第１の記憶装置以外の記憶装置から読み出したデータを基に生成して、記憶装置群に含まれる予備用記憶装置または第１の記憶装置と交換された第２の記憶装置に書き込むリビルド処理をアクセス処理部に実行させるリビルド制御部と、を有する。また、リビルド制御部は、リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、この分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、アクセス処理部に対して部分処理の実行を指示する。アクセス処理部は、リビルド制御部から受け付けた複数の部分処理の実行指示に応じて、指示された複数の部分処理を並列に実行する。
【００１０】
また、上記目的を達成するために、上記のストレージシステムと同様の処理を実行するストレージ制御装置およびストレージ制御方法が提供される。
【発明の効果】
【００１１】
１態様によれば、リビルド処理を高速化できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係るストレージシステムの構成例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの全体構成例を示す図である。
【図３】ＣＭのハードウェア構成例を示す図である。
【図４】ＣＭの処理機能の構成例を示すブロック図である。
【図５】リビルド系処理の実行時に生成される制御ブロックの構成例を示す図である。
【図６】制御ブロックに基づいて部分処理が多重実行される際の処理例を示すシーケンス図である。
【図７】リビルド系処理を実行する際に参照される主な情報の例を示す図である。
【図８】ＲＡＩＤ管理テーブルに登録される情報の例を示す図である。
【図９】多重度設定テーブルに登録される情報の例を示す図である。
【図１０】２つのＲＬＵについてのリビルド系処理が実行されている状態を示す図である。
【図１１】部分処理の実行を依頼する際のリカバリ制御部の処理手順の例を示すフローチャート（その１）である。
【図１２】部分処理の実行を依頼する際のリカバリ制御部の処理手順の例を示すフローチャート（その２）である。
【図１３】部分処理の実行を依頼する際のリカバリ制御部の処理手順の例を示すフローチャート（その３）である。
【図１４】ＲＡＩＤ制御部からの応答を受けたときのリカバリ制御部の処理手順の例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、実施の形態について図面を参照して詳細に説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るストレージシステムの構成例を示す図である。
【００１４】
ストレージシステム１は、ストレージ制御装置１０と、複数の記憶装置とを備える。ストレージシステム１が備える記憶装置は、ＨＤＤ、ＳＳＤ（Solid State Drive）などの不揮発性記憶装置である。図１では、ストレージシステム１が備える記憶装置として、記憶装置２１〜２５を例示している。
【００１５】
ストレージ制御装置１０は、図示しないホスト装置からの要求に応じて、ストレージシステム１内の記憶装置に対するアクセスを制御する。また、ストレージ制御装置１０は、記憶装置へのアクセス処理を、それぞれ複数の記憶装置の記憶領域によって構成される論理記憶領域を単位として制御する。論理記憶領域に対するデータ記録は、データが異なる記憶装置に冗長化されるように制御される。以下、このような論理記憶領域をＲＬＵ（RAID Logical Unit）と呼ぶ。図１では例として、記憶装置２１〜２４の各記憶領域が、「ＲＬＵ＃１」という１つのＲＬＵに属しているものとする。
【００１６】
ストレージ制御装置１０は、リビルド制御部１１およびアクセス処理部１２を備える。リビルド制御部１１およびアクセス処理部１２の各処理は、例えば、ストレージ制御装置１０が備えるＣＰＵ（Central Processing Unit）が所定のプログラムを実行することで実現される。
【００１７】
リビルド制御部１１は、アクセス処理部１２にリビルド処理を実行させる。リビルド処理は、ＲＬＵを構成する１つの記憶装置（第１の記憶装置とする）に記録されていたデータと同一のデータを、ＲＬＵを構成する記憶装置のうち第１の記憶装置以外の記憶装置から読み出したデータを基に生成して、ストレージシステム１に含まれる予備用記憶装置、または、上記の第１の記憶装置と交換された第２の記憶装置に書き込む処理である。
【００１８】
なお、例えば、ＲＬＵがＲＡＩＤ−４，５，６のようにパリティを用いてデータが冗長化されるように制御されていた場合には、ＲＬＵを構成する、第１の記憶装置以外の記憶装置から読み出したデータを基に、書き込み先に書き込むべきデータが計算によって生成される。しかしながら、例えば、ＲＬＵがＲＡＩＤ−１のようにミラーリング制御されていた場合には、第１の記憶装置以外の記憶装置から読み出されたデータは、書き込み先に対してそのまま書き込まれる。
【００１９】
アクセス処理部１２は、リビルド制御部１１からの要求に応じて上記のリビルド処理を実行する。アクセス処理部１２は、リビルド処理を、データの読み出し対象範囲を一定サイズごとに分割した分割範囲からデータを読み出す処理と、この分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して実行する。
【００２０】
ここで、リビルド制御部１１は、１つのＲＬＵについてのリビルド処理をアクセス処理部１２に実行させる際に、複数の部分処理の実行を指示することで、指示した複数の部分処理をアクセス処理部１２に並列に実行させることができる。このように、複数の部分処理を並列に実行することで、リビルド処理を高速化することができる。
【００２１】
以下、例として、図１に示すＲＬＵ＃１についてのリビルド処理の処理手順について説明する。なお、ここでは例として、ＲＬＵ＃１は、ＲＡＩＤ−４，５，６のようにパリティを用いてデータが冗長化されるように制御されているものとする。そして、以下の説明では、記憶装置２４が故障し、故障した記憶装置２４に記録されていたデータを、予備用の記憶装置２５に格納するものとする。
【００２２】
リビルド制御部１１は、部分処理の実行をアクセス処理部１２に指示することで、アクセス処理部１２にリビルド処理を実行させる。部分処理は、リビルド処理でのデータの読み出し対象範囲を一定サイズごとに分割した分割範囲ごとに実行される。図１の例では、読み出し対象範囲は、記憶装置２１〜２３の記憶領域である。そして、分割範囲は、記憶装置２４の記憶領域を一定サイズごとに分割した各領域（例えば、図１の領域Ａ４＿１）に対応する、同じＲＬＵを構成する他の記憶装置２１〜２３の記憶領域（例えば、図１の領域Ａ１＿１，Ａ２＿１，Ａ３＿１）である。
【００２３】
なお、ＲＬＵ＃１がＲＡＩＤ−１で制御される場合には、読み出し対象範囲は、記憶装置２１〜２３のいずれかである。そして例えば、領域Ａ４＿１に対応する分割領域は、領域Ａ１＿１，Ａ２＿１，Ａ３＿１のいずれかである。
【００２４】
図１のＲＬＵ＃１についてのリビルド処理における１つの部分処理は、１つの分割範囲（例えば、領域Ａ１＿１，Ａ２＿１，Ａ３＿１）からデータを読み出す処理と、読み出したデータに基づいて生成したデータを、記憶装置２５の対応する領域（例えば、領域Ａ５＿１）に書き込む処理との組み合わせを含む。アクセス処理部１２は、このような部分処理を単位としてリビルド処理を実行する。
【００２５】
リビルド制御部１１は、アクセス処理部１２に対して複数の部分処理の実行を指示することで、指示した複数の部分処理をアクセス処理部１２に並列に実行させる。図１の例では、リビルド制御部１１は、領域Ａ１＿１，Ａ２＿１，Ａ３＿１からのデータ読み出しを含む部分処理Ｐ１と、領域Ａ１＿２，Ａ２＿２，Ａ３＿２からのデータ読み出しを含む部分処理Ｐ２の実行を、アクセス処理部１２に指示する。このとき、アクセス処理部１２は、指示された部分処理Ｐ１，Ｐ２を並列に実行する。
【００２６】
このようにアクセス処理部１２によって複数の部分処理が並列に実行されることで、リビルド処理の速度を高速化することができる。例えば図１において、部分処理Ｐ１における領域Ａ５＿１に対するデータの書き込みと、部分処理Ｐ２における領域Ａ１＿１，Ａ２＿１，Ａ３＿１からのデータ読み出しとを、同時に実行することができる。これにより、アクセス処理部１２は、部分処理Ｐ１の実行が完了する前に、部分処理Ｐ２の実行を開始することができ、その結果、リビルド処理全体に要する時間が短縮される。
【００２７】
また、上記のように、各部分処理は、ある分割範囲からのデータ読み出し処理と、読み出したデータを基に生成したデータを他の記憶装置に書き込む処理とを含む。このため、例えば、１つの部分処理の中では、読み出し元を特定する論理アドレス（ＬＢＡ：Logical Block Address）と、書き込み先を特定する論理アドレスとを同じ値とすることができる。従って、アクセス処理部１２が部分処理を並列に実行する際の処理手順を簡易化することができ、リビルド処理の効率を向上させることができる。
【００２８】
なお、リビルド制御部１１は、複数の論理記憶領域についてそれぞれ１つ以上の部分処理の実行をアクセス処理部１２に指示することで、複数の論理記憶領域のそれぞれについてのリビルド処理をアクセス処理部１２に並列に実行させることもできる。この場合、複数の論理記憶領域についてのリビルド処理全体を高速化することができる。
【００２９】
また、リビルド制御部１１は、アクセス処理部１２に実行を指示する部分処理の数を調整することで、ストレージ制御装置１０におけるリビルド処理による処理負荷を増減することができる。さらに、複数の論理記憶領域のそれぞれについてのリビルド処理を並列に実行する場合には、アクセス処理部１２に対して実行を指示する部分領域の数を論理記憶領域ごとに変えることにより、論理記憶領域ごとのリビルド処理負荷のバランスを調整することもできる。
【００３０】
次に、第２の実施の形態として、リビルド処理負荷の調整機能を備えたストレージ制御装置を含むストレージシステムの例について説明する。
〔第２の実施の形態〕
図２は、第２の実施の形態に係るストレージシステムの全体構成例を示す図である。図２に示すストレージシステム１００は、ＣＥ（Controller Enclosure）２００と、ＤＥ（Drive Enclosure）３００とを含む。また、ＣＥ２００には、ホスト装置４００が接続されている。
【００３１】
ＣＥ２００は、ＣＭ（Controller Module）２０１，２０２を備える。ＣＭ２０１，２０２のそれぞれは、ホスト装置４００からのＩ／Ｏ（In/Out）要求に応じて、ＤＥ３００内の記憶装置に対するデータの読み書きを行う。ＣＭ２０１，２０２は、ＤＥ３００内の記憶装置によって実現される物理記憶領域をＲＡＩＤ（Redundant Arrays of Inexpensive Disks）によって管理し、これらの物理記憶領域に対するアクセスを制御する。
【００３２】
なお、ＣＭ２０１，２０２は、例えばルータなどを介して互いに接続されていてもよい。また、ＣＭは、ＣＥ２００内に１つのみ設けられてもよいし、３つ以上設けられてもよい。ただし、ＣＭが複数設けられることで、ＤＥ３００に対するアクセス制御系統が冗長化され、アクセス制御処理の信頼性が向上する。
【００３３】
ＤＥ３００は、ＣＭ２０１，２０２からのアクセス制御対象となる複数の記憶装置を備える。本実施の形態のＤＥ３００は、記憶装置としてＨＤＤを備えるディスクアレイ装置である。なお、ＤＥ３００が備える記憶装置としては、ＳＳＤなどの他の種類の不揮発性記憶装置を使用することもできる。また、ＣＥ２００には、複数のＤＥ３００が接続されていてもよい。
【００３４】
ホスト装置４００は、ユーザの操作に応じて、ＣＭ２０１，２０２に対して、ＤＥ３００内のＨＤＤへのアクセスを要求する。ホスト装置４００は、例えば、ユーザの操作に応じて、ＣＭ２０１，２０２のいずれかを通じて、ＤＥ３００内のＨＤＤからのデータの読み出しや、ＤＥ３００内のＨＤＤに対するデータの書き込みを行うことができる。
【００３５】
なお、ＣＥ２００内のＣＭ２０１，２０２は、ともに同様の構成を有し、同様の処理を実行可能である。そこで、以下、ＣＭ２０１についてのみ説明し、ＣＭ２０２についての説明を省略する。
【００３６】
図３は、ＣＭのハードウェア構成例を示す図である。
ＣＭ２０１は、ＣＰＵ２１１によって装置全体が制御されている。ＣＰＵ２１１には、ＲＡＭ（Random Access Memory）２１２および複数の周辺機器が、バス２１７を介して接続されている。ＲＡＭ２１２は、ＣＭ２０１の主記憶装置として使用され、ＣＰＵ２１１に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
【００３７】
ＣＰＵ２１１には、周辺機器の例として、ＳＳＤ２１３、入力Ｉ／Ｆ（インタフェース）２１４、ホストＩ／Ｆ２１５およびディスクＩ／Ｆ２１６が接続されている。
ＳＳＤ２１３は、ＣＭ２０１の二次記憶装置として使用され、ＣＰＵ２１１によって実行されるプログラムやその実行に必要な各種のデータなどを記憶する。なお、二次記憶装置としては、例えば、ＨＤＤなどの他の種類の不揮発性記憶装置が使用されてもよい。
【００３８】
入力Ｉ／Ｆ２１４には、操作キーなどを備える入力装置２１４ａが接続されている。入力Ｉ／Ｆ２１４は、入力装置２１４ａに対する操作入力に応じた信号をＣＰＵ２１１に出力する。
【００３９】
ホストＩ／Ｆ２１５は、ホスト装置４００とＣＭ２０１との間でデータを送受信するインタフェース処理を実行する。ホストＩ／Ｆ２１５とホスト装置４００とは、例えば、ＦＣ（Fibre Channel）規格に従って通信する。
【００４０】
ディスクＩ／Ｆ２１６は、ＤＥ３００とＣＭ２０１との間でデータを送受信するインタフェース処理を実行する。ディスクＩ／Ｆ２１６とＤＥ３００とは、例えば、ＳＡＳ（Serial Attached SCSI，SCSI：Small Computer System Interface）規格に従って通信する。
【００４１】
図４は、ＣＭの処理機能の構成例を示すブロック図である。
ＣＭ２０１は、ＲＡＩＤ制御部２２１、ホストＩ／Ｏ制御部２２２、リカバリ制御部２２３、構成制御部２２４、ホストＩ／Ｏ監視部２２５、バッファ監視部２２６およびエラー監視部２２７を備える。これらの各部の処理は、例えば、ＣＭ２０１のＣＰＵ２１１が所定のプログラムを実行することで実現される。
【００４２】
ＲＡＩＤ制御部２２１は、ホストＩ／Ｏ制御部２２２またはリカバリ制御部２２３からの要求に応じて、ＤＥ３００内のＨＤＤにアクセスする。ＲＡＩＤ制御部２２１は、ＤＥ３００内のＨＤＤにアクセスする際に、アクセス先の領域に対して設定されたＲＡＩＤに関する設定情報に基づいてアクセス制御を行う。このような設定情報は、ＳＳＤ２１３に記録された後述するＲＡＩＤ管理テーブルに登録されている。ＲＡＩＤ管理テーブルには、ＲＬＵごとに、ＲＡＩＤレベル、ＲＬＵを構成するＨＤＤの数などの設定情報が記録されている。なお、ＲＬＵとは、ＤＥ３００に搭載された複数のＨＤＤの物理記憶領域を組み合わせて構成される論理記憶領域であり、ＲＡＩＤグループとも呼ばれる。
【００４３】
例えば、ＲＡＩＤ制御部２２１は、ホストＩ／Ｏ制御部２２２からあるＲＬＵに対するデータの書き込み要求を受けると、ＲＡＩＤ管理テーブル２４１に設定された書き込み先ＲＬＵについての情報に基づいて、データが冗長化されるように書き込み処理を行う。例としてディスク数「６」のＲＡＩＤ−５で制御されるＲＬＵに書き込みを行うものとすると、ＲＡＩＤ制御部２２１は、ホストＩ／Ｏ制御部２２２から受信したデータを分割し、連続する５個の分割データとそれらに基づくパリティとを、６台のＨＤＤにおける同一ストライプ番号の領域に分散させて記録する。
【００４４】
ホストＩ／Ｏ制御部２２２は、ホスト装置４００から、ＲＬＵに対するＩ／Ｏ要求（読み出し要求または書き込み要求）を受け付ける。ホストＩ／Ｏ制御部２２２は、受け付けたＩ／Ｏ要求に応じたＩ／Ｏ処理の実行を、ＲＡＩＤ制御部２２１に依頼する。なお、以下、ホスト装置４００からの要求に応じてＲＡＩＤ制御部２２１で実行されるＩ／Ｏ処理を、「ホストＩ／Ｏ処理」と呼ぶ。
【００４５】
例えば、ホストＩ／Ｏ制御部２２２は、ホスト装置４００から読み出し要求を受けた場合、読み出し元のＲＬＵおよびアドレスをＲＡＩＤ制御部２２１に通知して、読み出しを依頼する。ホストＩ／Ｏ制御部２２２は、ＲＡＩＤ制御部２２１によって読み出されたデータを、ホスト装置４００に送信する。一方、ホストＩ／Ｏ制御部２２２は、ホスト装置４００から受信した書き込みデータと、書き込み先のＲＬＵおよびアドレスとをＲＡＩＤ制御部２２１に出力して、書き込みを依頼する。ＲＡＩＤ制御部２２１によって書き込み処理が正常に実行されると、ホストＩ／Ｏ制御部２２２は、ホスト装置４００に対して正常応答する。
【００４６】
リカバリ制御部２２３は、リビルド処理、冗長コピー処理およびコピーバック処理の実行をＲＡＩＤ制御部２２１に依頼して、それらの処理の進捗状況を管理する。リビルド処理は、ＲＬＵに属するいずれかのＨＤＤが故障した場合に、同じＲＬＵに属する故障していないＨＤＤからデータを読み出し、読み出したデータを基に故障したＨＤＤのデータを再構築して、予備用のＨＤＤ（ホットスペア）、または、故障したＨＤＤを交換した交換後のＨＤＤに書き込む処理である。冗長コピー処理は、ＲＬＵに属するいずれかのＨＤＤから故障の予兆を検出した場合に、故障の予兆が検出されたＨＤＤを切り離すことなく、リビルド処理と同様の読み出し、データ再構築および書き込みを実行する処理である。コピーバック処理は、故障したＨＤＤが新たなＨＤＤに交換された場合に、リビルド処理または冗長コピー処理によってホットスペアに格納されたデータを、交換後のＨＤＤに書き戻す処理である。以下、これらのリビルド処理、冗長コピー処理およびコピーバック処理を総称して、「リビルド系処理」と呼ぶ。
【００４７】
リカバリ制御部２２３は、あるＲＬＵについてのリビルド系処理を実行させる際、リビルド系処理の対象となる記憶領域を一定サイズごとに分割する。そして、リカバリ制御部２２３は、一定サイズごとのデータの読み出しと、読み出したデータに基づく書き込みとの組み合わせからなる部分処理を、順次ＲＡＩＤ制御部２２１に依頼することで、ＲＬＵについてのリビルド系処理を実行させる。
【００４８】
例えば、ＲＡＩＤ−４，５，６にいずれかで制御されるＲＬＵの場合、部分処理は、リビルド系処理を一定ストライプ数の領域ごとに実行した処理となる。また、ＲＡＩＤ−１で制御されるＲＬＵの場合、部分処理は、ミラーリングする各記憶領域における一定サイズの領域ごとに、リビルド系処理を実行した処理となる。
【００４９】
なお、リビルド系処理のうち、リビルド処理および冗長コピー処理を依頼する際には、ＲＡＩＤ制御部２２１に依頼される部分処理には、データの読み出しと書き込みとの間に、必要に応じてデータの再構築処理が含まれる。
【００５０】
リカバリ制御部２２３は、上記のように、１つのＲＬＵについてのリビルド系処理を実行させる際に、ＲＡＩＤ制御部２２１に対して、一定サイズごとの部分処理の実行を同じ期間中に複数依頼し、依頼した複数の部分処理をＲＡＩＤ制御部２２１に並列に実行させることができる。このように、部分処理を並列に実行させることで、リビルド系処理に要する時間を短縮することができる。
【００５１】
また、リカバリ制御部２２３は、複数のＲＬＵについてのリビルド系処理をＲＡＩＤ制御部２２１に並列に実行することもできる。この場合には、あるＲＬＵについての１つ以上の部分処理と、他のＲＬＵについての１つ以上の部分処理とが、ＲＡＩＤ制御部２２１によって並列に実行される。
【００５２】
さらに、リカバリ制御部２２３は、ＲＬＵごとの部分処理の多重度を、ＲＬＵごとに設定された優先度、ホストＩ／Ｏ処理の実行状況、および、ＣＭ２０１内のメモリリソースの使用状況に応じて可変する。これにより、ホストＩ／Ｏ処理の性能に対する影響をできるだけ抑制しつつ、リビルド系処理を高速化する。
【００５３】
構成制御部２２４は、ＲＡＩＤ管理テーブル２４１を用いてＲＬＵの構成を管理する。例えば、構成制御部２２４は、エラー監視部２２７によってＨＤＤの故障が検出された場合に、ＲＡＩＤ管理テーブル２４１を更新することで、故障したＨＤＤを今まで属していたＲＬＵから切り離すとともに、そのＲＬＵにホットスペアを組み込む。また、構成制御部２２４は、ＨＤＤの故障が検出された場合には、リカバリ制御部２２３に対してリビルド処理の実行を要求する。
【００５４】
ホストＩ／Ｏ監視部２２５は、仕掛かり中のホストＩ／Ｏ処理（処理が完了していないホストＩ／Ｏ処理）を監視する。例えば、ホストＩ／Ｏ制御部２２２は、ホスト装置４００からのＩ／Ｏ要求コマンドをコマンドキューに登録し、対応するＩ／Ｏ処理が完了したＩ／Ｏ要求コマンドをコマンドキューから消去する。ホストＩ／Ｏ監視部２２５は、コマンドキューを監視することで、仕掛かり中のホストＩ／Ｏ処理を判別する。なお、コマンドキューは、例えば、ＣＭ２０１のＲＡＭ２１２に記憶される。ホストＩ／Ｏ監視部２２５は、例えば、仕掛かり中のホストＩ／Ｏ処理の有無を、アクセス先のＲＬＵごとにリカバリ制御部２２３に通知することができる。
【００５５】
バッファ監視部２２６は、バッファ領域２３１の使用状況を監視する。バッファ領域２３１は、少なくともＲＡＩＤ制御部２２１、ホストＩ／Ｏ制御部２２２およびリカバリ制御部２２３によってバッファとして使用される記憶領域であり、ＲＡＭ２１２内に確保される。バッファ監視部２２６は、例えば、バッファ領域２３１の使用状況をリカバリ制御部２２３に通知することができる。
【００５６】
エラー監視部２２７は、ＤＥ３００内のＨＤＤについてのエラー発生状況を監視する。例えば、エラー監視部２２７は、ＲＡＩＤ制御部２２１によるＨＤＤへのアクセスの際に発生したエラーの回数を、アクセス先のＨＤＤごとに、ＣＭ２０１のＳＳＤ２１３に記録しておく。また、エラー監視部２２７は、故障判定のためのＨＤＤへのアクセスをＲＡＩＤ制御部２２１に定期的に依頼することで、エラーの発生を検知してもよい。
【００５７】
エラー監視部２２７は、あるＨＤＤにおけるエラー発生回数が所定のしきい値Ｔｈ１を超えると、そのＨＤＤでの故障発生の予兆を検出したことを構成制御部２２４に通知する。この場合、構成制御部２２４は、故障発生の予兆が検出されたＨＤＤが属するＲＬＵについての冗長コピー処理の実行を、リカバリ制御部２２３に要求する。また、エラー監視部２２７は、あるＨＤＤにおけるエラー発生回数がしきい値Ｔｈ１より大きいＴｈ２を超えると、そのＨＤＤで故障が発生したと判定して、構成制御部２２４に故障発生を通知する。この場合、構成制御部２２４は、故障発生の検出されたＨＤＤが属するＲＬＵについての冗長コピー処理の実行を、リカバリ制御部２２３に要求する。
【００５８】
ところで、例えば、ホストＩ／Ｏ制御部２２２とＲＡＩＤ制御部２２１との間、構成制御部２２４とリカバリ制御部２２３との間、リカバリ制御部２２３とＲＡＩＤ制御部２２１との間では、「制御ブロック」と呼ばれる制御データを用いて、処理要求および応答が行われる。図４に示した制御ブロックプール２３２は、制御ブロックの登録用に確保されたＲＡＭ２１２上の記憶領域である。
【００５９】
制御ブロックには、依頼する処理を識別するための処理名や、処理の対象を識別するための情報などが格納される。例えば、ホストＩ／Ｏ制御部２２２は、ＲＡＩＤ制御部２２１に読み出し処理を依頼する場合には、制御ブロックを確保し、確保した制御ブロック内に、読み出しを示す処理名、読み出し元を指定するアドレスなどを登録する。ホストＩ／Ｏ制御部２２２は、確保した制御ブロックを識別するＩＤをＲＡＩＤ制御部２２１に通知することで、その制御ブロックで指示される処理を依頼する。
【００６０】
ここで、図５は、リビルド系処理の実行時に生成される制御ブロックの構成例を示す図である。
リカバリ制御部２２３に対してリビルド系処理の実行を依頼する際に構成制御部２２４が生成する制御ブロックは、ＩＤ、ＲＬＵ番号、処理名、読み出し元ディスク番号および書き込み先ディスク番号を含む。ＩＤは、制御ブロックを識別するための番号である。ＲＬＵ番号は、処理対象のＲＬＵを示す。処理名は、依頼する処理の種類を示す。読み出し元ディスク番号は、依頼する処理における読み出し元のＨＤＤを示す。書き込み先ディスク番号は、依頼する処理における書き込み先のＨＤＤを示す。
【００６１】
構成制御部２２４は、制御ブロックプール２３２に確保した制御ブロックに対して、ＩＤ、ＲＬＵ番号、処理名、読み出し元ディスク番号および書き込み先ディスク番号を設定する。そして、構成制御部２２４は、リカバリ制御部２２３に対してＩＤを通知して、処理名が示す処理の実行を要求する。なお、ＩＤは、制御ブロックプール２３２における制御ブロックのアドレスであってもよい。要求を受けたリカバリ制御部２２３は、ＩＤが指し示す制御ブロックに応じた処理を行う。また、制御ブロックに応じた処理を完了したリカバリ制御部２２３は、その制御ブロックのＩＤを構成制御部２２４に通知するとともに、処理が完了したことを通知する。
【００６２】
一方、ＲＡＩＤ制御部２２１に対してリビルド系処理のうちの部分処理の実行を依頼する際にリカバリ制御部２２３が生成する制御ブロックは、上記のＩＤ、ＲＬＵ番号、処理名、読み出し元ディスク番号および書き込み先ディスク番号に加えて、部分処理の対象とする領域を示すアドレス（ＬＢＡ）を含む。なお、図５の例では、アドレスとして対象範囲の先頭ＬＢＡと最後尾のＬＢＡとが設定されているが、他の例として、先頭ＬＢＡと、対象範囲の大きさを示すブロック数とが設定されてもよい。
【００６３】
リカバリ制御部２２３は、ＩＤ、ＲＬＵ番号、処理名、読み出し元ディスク番号、書き込み先ディスク番号およびアドレスが設定された制御ブロックのＩＤを、ＲＡＩＤ制御部２２１に通知して、処理名が示す処理の実行を要求する。要求を受けたＲＡＩＤ制御部２２１は、ＩＤが指し示す制御ブロックに応じた処理を行う。また、制御ブロックに応じた処理を完了したＲＡＩＤ制御部２２１は、その制御ブロックのＩＤをリカバリ制御部２２３に通知するとともに、処理が完了したことを通知する。
【００６４】
なお、リカバリ制御部２２３からＲＡＩＤ制御部２２１に通知される制御ブロックには、リカバリ制御部２２３自身が獲得した制御ブロックと、構成制御部２２４が獲得した制御ブロックに対してリカバリ制御部２２３がアドレスを追記した制御ブロックとがある。後者の場合、構成制御部２２４が獲得してリカバリ制御部２２３に通知する制御ブロックのＩＤと、リカバリ制御部２２３がＲＡＩＤ制御部２２１に通知する制御ブロックのＩＤとは、同一になる。
【００６５】
図６は、制御ブロックに基づいて部分処理が多重実行される際の処理例を示すシーケンス図である。この図６では例として、１つのＲＬＵについてのリビルド処理が実行されるものとする。また、リビルド処理対象のＲＬＵは、ＲＡＩＤ−４，５などに基づき、パリティを用いてデータが冗長化されるものとする。
【００６６】
構成制御部２２４は、制御ブロックＢＬ１を確保し、この制御ブロックＢＬ１をリカバリ制御部２２３に通知することで、所定のＲＬＵについてのリビルド処理の実行をリカバリ制御部２２３に依頼する（タイミングＴ１１）。依頼を受けたリカバリ制御部２２３は、後述する手順に従って、該当ＲＬＵについて許容される部分処理の多重度を判定する。ここで言う多重度とは、該当ＲＬＵについていくつの部分処理を並列に実行可能かを示すものである。
【００６７】
該当ＲＬＵに対して多重度「４」が許容されていると判定したものとすると、リカバリ制御部２２３は、ＲＡＩＤ制御部２２１に対して４つの制御ブロックを通知して、各制御ブロックに基づく部分処理の実行を依頼する。図６の例では、リカバリ制御部２２３は、まず、３つの制御ブロックＢＬ２，ＢＬ３，ＢＬ４を新規に獲得し（それぞれタイミングＴ１２，Ｔ１３，Ｔ１４）、制御ブロックＢＬ２，ＢＬ３，ＢＬ４に対して、リビルド処理対象とする領域のアドレスを対象領域全体の先頭から順に設定する。例えば、制御ブロックＢＬ２にはアドレス「０ｘ００００〜０ｘ０３ｆｆ」が設定され、制御ブロックＢＬ３にはそれに続くアドレス「０ｘ０４００〜０ｘ０７ｆｆ」が設定され、制御ブロックＢＬ４にはそれに続くアドレス「０ｘ０８００〜０ｘ０ｂｆｆ」が設定される。なお、「０ｘ“ＸＸＸＸ”」は、“ＸＸＸＸ”が１６進数で表記されていることを示す。
【００６８】
リカバリ制御部２２３は、アドレスを設定した制御ブロックＢＬ２，ＢＬ３，ＢＬ４をＲＡＩＤ制御部２２１に通知し、制御ブロックＢＬ２，ＢＬ３，ＢＬ４のそれぞれに基づく部分処理の実行を依頼する（それぞれタイミングＴ１５，Ｔ１６，Ｔ１７）。さらに、リカバリ制御部２２３は、４つ目の制御ブロックとして、構成制御部２２４から通知された制御ブロックＢＬ１に対して、次のリビルド処理対象領域を示すアドレス「０ｘ０ｃ００〜０ｘ０ｆｆｆ」を設定する。そして、リカバリ制御部２２３は、アドレスを設定した制御ブロックＢＬ１をＲＡＩＤ制御部２２１に通知して、制御ブロックＢＬ１に基づく部分処理の実行を依頼する（タイミングＴ１８）。
【００６９】
ＲＡＩＤ制御部２２１は、リカバリ制御部２２３から通知された制御ブロックＢＬ２，ＢＬ３，ＢＬ４，ＢＬ１にそれぞれ基づく部分処理を、並列に実行する。それぞれの部分処理では、（１）ＲＬＵに属するＨＤＤのうち故障していないＨＤＤにおける、アドレスによって指定された領域からのデータ読み出し処理、（２）読み出したデータを基に、故障したＨＤＤにおける同じアドレスに対応する領域に記憶されていたデータを、計算によって再構築する処理、（３）再構築されたデータを、ホットスペアにおける同じアドレスに対応する領域に書き込む処理が、順次実行される。
【００７０】
例えば、（１）での読み出し元のＨＤＤと（３）での書き込み先のＨＤＤとは異なるので、ある制御ブロックに基づいて（３）の書き込み処理が実行されている間に、別の制御ブロックに基づいて（１）の読み出し処理を並列に実行することができる。また、ある制御ブロックに基づく（１）の読み出し処理が完了すると、同じ制御ブロックに基づく（２）の再構築処理を開始するとともに、別の制御ブロックに基づいて次の領域からの（１）の読み出し処理を続けて開始することができる。このように、ＲＡＩＤ制御部２２１に対して複数の制御ブロックを通知して、各制御ブロックに基づく部分処理を並列に実行させることで、ＲＬＵについてのリビルド系処理全体に要する処理時間を短縮することができる。
【００７１】
また、１つの部分処理では、（１）での読み出し元アドレスと（３）での書き込み先アドレスとは同じになる。このように、読み出し元と書き込み先とが同じ処理を１つの部分処理に含め、そのような部分処理の並列処理をＲＡＩＤ制御部２２１に依頼するようにしたことで、並列処理を依頼する際のリカバリ制御部２２３の処理手順を単純化することができ、また、依頼を受けたＲＡＩＤ制御部２２１での処理も単純化される。
【００７２】
なお、例えば、ＲＬＵに設定されたＲＡＩＤレベルがＲＡＩＤ−１の場合、（１）の読み出し処理では、ＲＬＵに属する故障していないＨＤＤのうち１台からデータが読み出され、（２）の再構築処理がスキップされ、（３）の書き込み処理では、１台のＨＤＤから読み出されたデータがそのままホットスペアに書き込まれる。また、コピーバック処理が要求されている場合、（１）の読み出し処理では、ホットスペアにおけるアドレスによって指定された領域からデータが読み出され、（２）の再構築処理がスキップされ、（３）の書き込み処理では、ホットスペアから読み出されたデータが、交換されたＨＤＤにおける同じアドレスに対応する領域にそのまま書き込まれる。
【００７３】
以上説明したように、構成制御部２２４からリビルド系処理の実行要求を受けたリカバリ制御部２２３は、その時点で該当ＲＬＵに対して許容されている多重度を判定し、判定した多重度分の数の制御ブロックをＲＡＩＤ制御部２２１に通知する。これにより、ＲＡＩＤ制御部２２１による部分処理が、リビルド系処理の実行が要求された時点での適切な多重度で、並列に実行されるようになる。
【００７４】
続いて、ＲＡＩＤ制御部２２１は、制御ブロックに基づく部分処理の実行を完了すると、その制御ブロックのＩＤをリカバリ制御部２２３に通知して、処理が完了したことを通知する。例えば、図６において、制御ブロックＢＬ２に基づく部分処理が完了すると、ＲＡＩＤ制御部２２１は、リカバリ制御部２２３に対して制御ブロックＢＬ２を通知し、処理完了を通知する（タイミングＴ１９）。
【００７５】
処理完了通知を受けたリカバリ制御部２２３は、後述する手順に従って、その時点で該当ＲＬＵに対して許容されている多重度を判定する。図６の例では多重度「４」であるものとすると、リカバリ制御部２２３は、制御ブロックＢＬ２に設定されたアドレスを、ＲＡＩＤ制御部２２１に部分処理を依頼していない処理対象領域のうちの先頭領域のアドレス「０ｘ１０００〜０ｘ１３ｆｆ」に書き換える。そして、リカバリ制御部２２３は、アドレスを書き換えた制御ブロックＢＬ２をＲＡＩＤ制御部２２１に通知して、制御ブロックＢＬ２に基づく部分処理の実行を依頼する（タイミングＴ２１）。依頼を受けたＲＡＩＤ制御部２２１は、制御ブロックＢＬ２に基づく部分処理の実行を開始する。
【００７６】
ただし、仮に、制御ブロックＢＬ２についての処理完了通知を受けたとき（タイミングＴ１９）、該当ＲＬＵに対して許容されている多重度が「３」であった場合には、リカバリ制御部２２３は、さらなる部分処理を実行させることが不可能と判断して、制御ブロックＢＬ２を解放する。これにより、ＲＡＩＤ制御部２２１で並列に実行される、該当ＲＬＵについての部分処理の数が「３」に減少する。
【００７７】
一方、例えば、制御ブロックＢＬ１についての処理完了通知を受けたとき（例えばタイミングＴ２２）、該当ＲＬＵに対して許容されている多重度が「５」であった場合には、リカバリ制御部２２３は、新たな制御ブロック（「制御ブロック５」とする）を獲得する。そして、リカバリ制御部２２３は、新規に獲得した制御ブロック５に次の処理対象領域のアドレス「０ｘ１０００〜０ｘ１３ｆｆ」を設定し、制御ブロック５をＲＡＩＤ制御部２２１に通知して、部分処理の実行を依頼する。さらに、リカバリ制御部２２３は、元の制御ブロックＢＬ２のアドレスを、次の処理対象領域のアドレス「０ｘ１４００〜０ｘ１７ｆｆ」に書き換え、この制御ブロックＢＬ２をＲＡＩＤ制御部２２１に通知して、部分処理の実行を依頼する。これにより、ＲＡＩＤ制御部２２１で並列に実行される、該当ＲＬＵについての部分処理の数が「５」に増加する。
【００７８】
このように、リカバリ制御部２２３は、ＲＡＩＤ制御部２２１から応答を受けるたびに、その時点で該当ＲＬＵに対して許容されている多重度を判定する。そして、リカバリ制御部２２３は、多重度の判定結果に応じて、ＲＡＩＤ制御部２２１に並列に実行させる部分処理の数を調整する。従って、ＲＡＩＤ制御部２２１による部分処理の実行が完了するたびに、ＲＡＩＤ制御部２２１で並列に実行される部分処理の数が最適化される。
【００７９】
ところで、図６に示したように、ＲＡＩＤ制御部２２１で実行される部分処理は、リカバリ制御部２２３から実行を依頼された順に完了するとは必ずしも限らない。例えば図６において、制御ブロックＢＬ４に基づく部分処理が完了したとき（タイミングＴ２０）、制御ブロックＢＬ３に基づく部分処理は完了していない。このような場合に、制御ブロックＢＬ３に基づく部分処理が完了するまで、次の制御ブロックに基づく部分処理を実行させないようにすると、待ち時間が発生する分だけ、リビルド系処理に要する時間が長くなってしまう。
【００８０】
そこで、リカバリ制御部２２３は、ＲＡＩＤ制御部２２１から応答を受けたとき、他の部分処理の待ち合わせを行わずに、その時点で許容されている多重度を判定し、部分処理をさらに実行させることが可能であれば、ＲＡＩＤ制御部２２１に対して制御ブロックを通知して、次の領域についての部分処理を開始させる。
【００８１】
図６の例では、リカバリ制御部２２３は、制御ブロックＢＬ４に基づく部分処理の完了通知を受けると（タイミングＴ２０）、制御ブロックＢＬ３に基づく部分処理の完了を待ち合わせることなく、その時点で許容されている多重度を判定する。そして、例えば多重度が「４」である場合、リカバリ制御部２２３は、制御ブロックＢＬ４のアドレスを次の領域を示すアドレス「０ｘ１４００〜０ｘ１７ｆｆ」に書き換え、この制御ブロックＢＬ４をＲＡＩＤ制御部２２１に通知して、部分処理の実行を依頼する。
【００８２】
このような処理により、他の部分処理より長い処理時間を要する部分処理の影響を受けることなく、処理対象領域に対するリビルド系処理を迅速に進めることができ、リビルド系処理全体に要する処理時間が短縮できる。
【００８３】
また、制御ブロックには、構成制御部２２４からリビルド系処理の実行が要求された初期段階でのＲＡＩＤ制御部２２１への制御ブロックの通知順とは関係なく、あくまでＲＡＩＤ制御部２２１へ制御ブロックが通知された順に、処理対象領域の先頭側から順番にアドレスが設定される。これにより、リカバリ制御部２２３は、制御ブロックの通知順と、通知した制御ブロックに基づく部分処理の完了順との対応を管理する必要がなく、部分処理が完了した順にアドレスを順次設定していけばよくなる。このため、リカバリ制御部２２３での処理手順が簡略化され、その処理負荷が軽減される。これとともに、同一ＲＬＵに対応する読み出し元および書き込み先の各ＨＤＤにおいては、読み出しアドレスおよび書き込みアドレスが、途中で順序が変わることなく連続的に指定されるようになる。このため、各ＨＤＤでの読み出し速度および書き込み速度を高速化することができる。
【００８４】
次に、図７は、リビルド系処理を実行する際に参照される主な情報の例を示す図である。
ＣＭ２０１内のＳＳＤ２１３には、ＲＡＩＤ管理テーブル２４１と、多重度設定テーブル２４２とが記憶される。ＲＡＩＤ管理テーブル２４１は、ＲＬＵに関する設定情報を保持する。ＲＡＩＤ管理テーブル２４１に対する情報の登録や更新は構成制御部２２４によって行われ、ＲＡＩＤ管理テーブル２４１は、ＲＡＩＤ制御部２２１およびリカバリ制御部２２３に参照される。多重度設定テーブル２４２は、ＲＡＩＤの構成ごとにあらかじめ決められた多重度上限値（構成別多重度上限値）を保持する。多重度設定テーブル２４２は、ＲＬＵごとに獲得可能な制御ブロック数を判定する際に、リカバリ制御部２２３によって参照される。
【００８５】
ここで、図８は、ＲＡＩＤ管理テーブルに登録される情報の例を示す図である。
ＲＡＩＤ管理テーブル２４１には、構成制御部２２４によって、ＲＬＵごとにレコード２４１ａが登録される。各レコード２４１ａには、対応するＲＬＵを識別するＲＬＵ番号が付与されている。また、各レコード２４１ａには、「ＲＡＩＤレベル」、「ディスク数」、「ディスク番号」、「ＨＳディスク番号」および「リビルド優先度」が登録される。
【００８６】
「ＲＡＩＤレベル」は、該当ＲＬＵに対して設定されたＲＡＩＤレベルを示す。「ディスク数」は、該当ＲＬＵに属するＨＤＤの数を示す。「ディスク番号」は、該当ＲＬＵに属するＨＤＤの識別番号を示す。「ディスク番号」は、「ディスク数」に設定された数だけ、レコード２４１ａに登録される。
【００８７】
「ディスク番号」によって識別されるＨＤＤのそれぞれには、「ディスク状態」が登録される。「ディスク状態」は、該当ＨＤＤの動作状態を示す。「ディスク状態」には、例えば、「正常」、「故障」および「ＨＳに退避中」のいずれかが設定される。「正常」は、該当ＨＤＤが正常に動作していることを示し、「故障」は、該当ＨＤＤが故障していることを示す。「ＨＳに退避中」は、該当ＨＤＤに記録されていたデータについてのホットスペアへのリビルド処理が完了し、そのホットスペアを組み込んだ状態で該当ＲＬＵが運用されていることを示す。なお、「ディスク状態」は、例えば、ＲＡＩＤ管理テーブル２４１とは別に用意されてＨＤＤごとの情報を保持するディスク管理テーブルに登録されてもよい。
【００８８】
「ＨＳディスク番号」は、リビルド処理または冗長コピー処理の実行前に設定され、これらの処理においてデータの書き込み先とするホットスペアのＨＤＤを識別する番号を示す。
【００８９】
構成制御部２２４は、エラー監視部２２７からＨＤＤの故障通知を受けると、故障したＨＤＤが属するＲＬＵのレコード２４１ａを抽出し、故障したＨＤＤについての「ディスク状態」を「正常」から「故障」に更新することで、故障したＨＤＤをＲＬＵから切り離す。さらに、構成制御部２２４は、ホットスペアとして使用するＨＤＤのディスク番号を「ＨＳディスク番号」に設定する。構成制御部２２４は、このような設定変更を行ったレコード２４１ａに対応するＲＬＵについて、リビルド処理やコピーバック処理をリカバリ制御部２２３に要求する。一方、構成制御部２２４は、エラー監視部２２７から故障の予兆が検出されたＨＤＤが通知された場合、通知されたＨＤＤについての「ディスク状態」を「正常」にしたまま（すなわち、通知されたＨＤＤをＲＬＵに組み込んだ状態のまま）、通知されたＨＤＤが属するＲＬＵについての冗長コピー処理をリカバリ制御部２２３に要求する。
【００９０】
なお、ＲＡＩＤ管理テーブル２４１は、ＲＡＩＤ制御部２２１からも参照される。例えば、ＲＡＩＤ制御部２２１は、ホストＩ／Ｏ処理を行う際に、Ｉ／Ｏ処理対象のＲＬＵに対応するＲＡＩＤ管理テーブル２４１のレコード２４１ａを参照する。ＲＡＩＤ制御部２２１は、参照先のレコード２４１ａに設定されたＲＡＩＤレベル、ディスク数およびディスク番号に応じたＩ／Ｏ処理を実行する。
【００９１】
また、ＲＡＩＤ制御部２２１は、リカバリ制御部２２３からリビルド系処理の依頼を受けたとき、リカバリ制御部２２３から通知された制御ブロックに記載されたＲＬＵ番号に対応する、ＲＡＩＤ管理テーブル２４１のレコード２４１ａを参照する。ＲＡＩＤ制御部２２１は、参照先のレコード２４１ａに登録されたＲＡＩＤレベルと、リカバリ制御部２２３から通知された制御ブロックに設定された読み出し元ディスク番号および書き込み先ディスク番号とを基に、実行すべき処理内容の詳細を判別する。例えば、リビルド処理が依頼された場合、ＲＡＩＤ制御部２２１は、レコード２４１ａに登録されたＲＡＩＤレベルに基づいて、データの再構築計算を行うか否かを判別するなど、ＲＡＩＤの構成に応じた処理を実行する。
【００９２】
次に、図８のＲＡＩＤ管理テーブル２４１において、「リビルド優先度」は、該当ＲＬＵに対して付与されたリビルド系処理の優先度を示す。この「リビルド優先度」は、ユーザによる操作入力に応じて任意に設定可能である。「リビルド優先度」には、例えば、「高」または「低」のいずれかが設定される。「リビルド優先度」は、ＲＬＵごとに許容される部分処理の多重度を判定する際に、リカバリ制御部２２３によって参照される。
【００９３】
後述するように、リカバリ制御部２２３は、リカバリ系処理対象のＲＬＵに対する仕掛かり中のホストＩ／Ｏがある場合や、ＣＭ２０１での処理負荷が高い場合（メモリリソースの使用量が所定量以上の場合）に、リカバリ系処理対象のＲＬＵに対応付けられた「リビルド優先度」を読み込む。「リビルド優先度」が「高」の場合、リカバリ制御部２２３は、多重度設定テーブル２４２に基づき、該当ＲＬＵの構成に応じた多重度の上限値を認識し、認識した多重度の上限値にできるだけ近づくように部分処理の多重度を設定する。一方、「リビルド優先度」が「低」の場合、リカバリ制御部２２３は、該当ＲＬＵについての部分処理を多重実行しないように制御する。
【００９４】
図９は、多重度設定テーブルに登録される情報の例を示す図である。
多重度設定テーブル２４２には、ＲＡＩＤの構成に応じてあらかじめ決められた、１ＲＬＵにおける部分処理の多重度の上限値（構成別多重度上限値）が登録される。図９では例として、ＲＬＵに設定されるＲＡＩＤレベルと、ＲＬＵに属するディスク数との組み合わせによって、ＲＡＩＤの構成が識別され、これらの組み合わせごとに構成別多重度上限値が登録されている。
【００９５】
構成別多重度上限値は、各ＲＡＩＤ構成が適用されたときのホストＩ／Ｏ処理性能に対する影響度合いが同程度になるように、ＲＡＩＤ構成ごとにあらかじめ算出される。例えば、ＲＬＵに属するディスク数が同じ場合、パリティを使用しないＲＡＩＤ−１より、パリティを使用するＲＡＩＤ−５，６の方が、処理負荷が高いと考えられる。このため、ＲＬＵに属するディスク数が同じ場合、ＲＡＩＤ−１についての構成別多重度上限値より、ＲＡＩＤ−４，５についての構成別多重度上限値を小さくする。また、ＲＡＩＤレベルが同じ場合には、ディスク数が多いほど処理負荷が高いと考えられる。このため、ＲＡＩＤレベルが同じ場合、ディスク数が多いほど構成別多重度上限値を小さくする。
【００９６】
以下、図７に戻って説明する。
ＳＳＤ２１３には、リカバリ制御部２２３が参照する値として、多重度全体上限値Ｍ１と、ＲＬＵ内多重度上限値Ｍ２とがあらかじめ記憶される。多重度全体上限値Ｍ１は、ＣＭ２０１全体で実行可能な、リビルド系処理についての部分処理の上限多重度を示す。ＲＬＵ内多重度上限値Ｍ２は、１ＲＬＵに対して実行可能な、リビルド系処理についての部分処理の上限多重度を示す。このＲＬＵ内多重度上限値Ｍ２としては、多重度全体上限値Ｍ１より小さい値が設定される。
【００９７】
また、リカバリ制御部２２３は、それぞれＲＡＭ２１２に記憶された多重度調整係数Ｃ１、現在の多重度Ｍ３および完了アドレスＡＤを参照しながら、処理を実行する。
多重度調整係数Ｃ１は、リビルド系処理を実行中の全ＲＬＵに対して共通に適用される係数であり、部分処理の多重度を決定する際に、各ＲＬＵについての部分処理の多重度の合計値が多重度全体上限値Ｍ１を超えないように調整するために使用される。なお、多重度調整係数Ｃ１は、０より大きく、１以下の値をとり、例えば０．１などの所定間隔で増減される。また、例えば、ＣＭ２０１が起動した際、あるいは、ＣＭ２０１の起動後にリカバリ制御部２２３の処理が開始された際に、多重度調整係数Ｃ１には初期値「１」が設定される。
【００９８】
現在の多重度Ｍ３および完了アドレスＡＤは、ともにリビルド系処理を実行中のＲＬＵごとに個別に設定される値である。現在の多重度Ｍ３は、該当ＲＬＵについて現在実行中の部分処理数（各ＲＬＵに対して現在確保されている制御ブロックの数）を示す。完了アドレスＡＤは、該当ＲＬＵについてのリビルド系処理対象の全領域のうち、部分処理の実行が完了している最後尾領域を示すアドレスである。
【００９９】
次に、図１０は、２つのＲＬＵについてのリビルド系処理が実行されている状態を示す図である。以下、図１０を例として参照しながら、リカバリ制御部２２３による部分処理の多重度調整手順について説明する。
【０１００】
図１０では例として、ＲＬＵ番号「００」のＲＬＵ（以下、「ＲＬＵ＃００」とする）についてのリビルド処理と、ＲＬＵ番号「０１」のＲＬＵ（以下、「ＲＬＵ＃０１」とする）についてのコピーバック処理とが実行されている状態を示す。
【０１０１】
図６で説明した手順に従い、構成制御部２２４は、制御ブロックＢＬ１ａを通知することで、リカバリ制御部２２３に対してＲＬＵ＃００についてのリビルド処理を要求する。例としてＲＡＬ＃００に対して多重度「３」が許容されているものとすると、リカバリ制御部２２３は、制御ブロックＢＬ１ａ，ＢＬ２ａ，ＢＬ３ａをＲＡＩＤ制御部２２１に通知することで、ＲＡＩＤ制御部２２１に各制御ブロックに基づく部分処理を並列に実行させる。
【０１０２】
また、構成制御部２２４は、制御ブロックＢＬ１ｂを通知することで、リカバリ制御部２２３に対してＲＬＵ＃０１についてのコピーバック処理を要求する。例としてＲＬＵ＃０１に対して多重度「３」が許容されているものとすると、リカバリ制御部２２３は、制御ブロックＢＬ１ｂ，ＢＬ２ｂ，ＢＬ３ｂをＲＡＩＤ制御部２２１に通知することで、ＲＡＩＤ制御部２２１に各制御ブロックに基づく部分処理を並列に実行させる。
【０１０３】
以上のように、リカバリ制御部２２３からＲＡＩＤ制御部２２１に対して制御ブロックＢＬ１ａ，ＢＬ２ａ，ＢＬ３ａ，ＢＬ１ｂ，ＢＬ２ｂ，ＢＬ３ｂが通知されることで、ＲＡＩＤ制御部２２１は、制御ブロックＢＬ１ａ，ＢＬ２ａ，ＢＬ３ａ，ＢＬ１ｂ，ＢＬ２ｂ，ＢＬ３ｂのそれぞれに基づく部分処理を並列に実行する。このように、ＲＡＩＤ制御部２２１は、１ＲＬＵについての部分処理だけでなく、複数のＲＬＵについての部分処理も並列に実行可能である。
【０１０４】
リカバリ制御部２２３は、基本的に、各ＲＬＵについて、ＲＬＵ内多重度上限値Ｍ２を超えない範囲で部分処理の多重度を設定する。これとともに、リカバリ制御部２２３は、リビルド系処理を実行中の全ＲＬＵに設定された多重度の合計値が、多重度全体上限値Ｍ１を超えないように制御する。上記の図１０の状態では、ＲＬＵ＃００についての現在の多重度Ｍ３＿１は「３」であり、ＲＬＵ＃０１についての現在の多重度Ｍ３＿２は「３」である。リカバリ制御部２２３は、（Ｍ３＿１＋Ｍ３＿２）の値が多重度全体上限値Ｍ１を超えないように、部分処理の多重度を設定する。
【０１０５】
リカバリ制御部２２３は、次のような方法で、部分処理の多重度を動的に調整する。
リカバリ制御部２２３は、ホストＩ／Ｏ処理の状況に応じて、部分処理の多重度を調整する。ホストＩ／Ｏ処理の状況は、ホストＩ／Ｏ監視部２２５によってＲＬＵごとに監視される。リカバリ制御部２２３は、リビルド系処理を実行中のＲＬＵについて、仕掛かり中のホストＩ／Ｏ処理が存在する場合には、存在しない場合より、このＲＬＵについての部分処理の多重度を低下させる。これにより、リビルド系処理の影響によってホストＩ／Ｏ処理の速度ができるだけ低下しないように、多重度が調整される。
【０１０６】
また、リカバリ制御部２２３は、ＣＭ２０１内のメモリリソースの使用状況に応じて、部分処理の多重度を調整する。ＣＭ２０１内のメモリリソースの使用状況は、バッファ監視部２２６によって監視される。バッファ領域２３１は、少なくともＲＡＩＤ制御部２２１、ホストＩ／Ｏ制御部２２２およびリカバリ制御部２２３によって共通に使用される。このことから、リカバリ制御部２２３は、例えば、あるＲＬＵについてのリビルド系処理に許容される多重度を判定する際に、同じＲＬＵについての仕掛かり中のホストＩ／Ｏ処理が存在しない場合でも、バッファ領域２３１の使用量を検出することで、他のＲＬＵについてのホストＩ／Ｏ処理などによる処理負荷の大きさを判断できる。リカバリ制御部２２３は、バッファ領域２３１の使用量が所定のしきい値を超えている場合には、しきい値以下である場合より、リビルド系処理を実行中の全ＲＬＵについての部分処理の多重度を低下させる。
【０１０７】
リカバリ制御部２２３は、例えば図１０のＲＬＵ＃００に対する仕掛かり中のホストＩ／Ｏ処理が存在せず、かつ、バッファ領域２３１の使用量がしきい値以下である場合には、ＲＬＵ＃００に設定する多重度を、ＲＬＵ内多重度上限値Ｍ２に近づけるように制御する。ＲＬＵ＃００に対する仕掛かり中のホストＩ／Ｏ処理が存在せず、かつ、バッファ領域２３１の使用量がしきい値以下である場合には、ＲＬＵ＃００についてのリビルド系処理がホストＩ／Ｏ処理の性能に及ぼす影響を考慮する必要がないと考えられる。このため、このような条件下では、ＲＬＵ＃００のＲＡＩＤ構成によらず一定のＲＬＵ内多重度上限値Ｍ２を、多重度の上限値とすることができる。
【０１０８】
一方、リカバリ制御部２２３は、ＲＬＵ＃００に対する仕掛かり中のホストＩ／Ｏ処理が存在する場合や、バッファ領域２３１の使用量がしきい値を超えている場合には、ＲＬＵ＃００についての多重度の上限値を、多重度設定テーブル２４２から取得した構成別多重度上限値に抑制する。このような条件下では、ＲＬＵ＃００におけるＲＡＩＤ構成に応じて、ＲＬＵ＃００についての多重度の上限値が設定されることになる。このとき設定される多重度の上限値は、多重度全体上限値Ｍ１より低い値となる。
【０１０９】
また、ＲＬＵ＃００に対する仕掛かり中のホストＩ／Ｏ処理が存在する場合や、バッファ領域２３１の使用量がしきい値を超えている場合に、ＲＬＵ＃００に設定されたリビルド優先度が「低」である場合には、「高」である場合よりさらに多重度の上限値が低く設定される。本実施の形態では、リビルド優先度が「低」である場合、多重度が「１」に設定されて、そのＲＬＵについての部分処理が並列に実行されなくなる。このようにリビルド優先度に応じて多重度が調整されることで、高い優先度が付与されたＲＬＵほど高い多重度が設定され、リビルド系処理の速度が速くなるように制御される。
【０１１０】
ここで、例として、ＲＬＵ内多重度上限値Ｍ２が「３」であり、多重度全体上限値Ｍ１が「６」以上であるものとする。この条件下で、バッファ領域２３１の使用量がしきい値以下で、かつ、ＲＬＵ＃００，＃０１の両方についての仕掛かり中のホストＩ／Ｏ処理が存在しない場合には、図１０のように、ＲＬＵ＃００，＃０１の両方についての多重度が「３」に設定される。この場合、ホストＩ／Ｏ処理に対する影響を考慮する必要がないため、ＲＬＵ＃００，＃０１のそれぞれについてのリビルド系処理が最も高速に実行されるように制御される。
【０１１１】
次に、上記の状態から、例として、制御ブロックＢＬ３ａに基づくＲＬＵ＃００の部分処理と、制御ブロックＢＬ３ｂに基づくＲＬＵ＃０１の部分処理とが、連続して終了した場合を考える。なお、ＲＬＵ＃００，＃０１の両方とも、リビルド優先度は「高」であるものとする。
【０１１２】
例えば、制御ブロックＢＬ３ａに基づく部分処理の終了時と、制御ブロックＢＬ３ｂに基づく部分処理の終了時の両方において、バッファ領域２３１の使用量がしきい値を超えている場合、リカバリ制御部２２３は、ＲＬＵ＃００，＃０１の両方について、多重度をＲＬＵ内多重度上限値Ｍ２より低い値（すなわち、多重度設定テーブル２４２から取得した、各ＲＬＵの構成に対応する値）に抑制する。
【０１１３】
このように、バッファ領域２３１の使用量がしきい値を超えている場合には、どのＲＬＵについても、多重度がＲＬＵ内多重度上限値Ｍ２より小さい値になるように制御される。すなわち、ＣＭ２０１全体の処理負荷が高いと考えられる場合には、リビルド系処理を実行している全ＲＬＵについての多重度を一律に低下させて、リビルド系処理全体の処理負荷を軽減することで、ＣＭ２０１全体の処理負荷を軽減する。
【０１１４】
一方、制御ブロックＢＬ３ａに基づく部分処理の終了時と、制御ブロックＢＬ３ｂに基づく部分処理の終了時の両方において、バッファ領域２３１の使用量がしきい値以下のままである場合には、次のような処理になる場合がある。まず、制御ブロックＢＬ３ａに基づく部分処理の終了時に、ＲＬＵ＃００に対する仕掛かり中のホストＩ／Ｏ処理があった場合、リカバリ制御部２２３は、ＲＬＵ＃００についての多重度を、ＲＬＵ内多重度上限値Ｍ２より低い値（すなわち、多重度設定テーブル２４２から取得した、ＲＬＵ＃００の構成に対応する値）に抑制する。例えば、リカバリ制御部２２３は、制御ブロックＢＬ３ａを解放することによって、ＲＬＵ＃００についての多重度を「３」から「２」に低下させる。これにより、仕掛かり中のホストＩ／Ｏ処理性能に与える影響が少なくなるように、ＲＬＵ＃００についてのリビルド系処理速度が抑制され、その処理負荷が軽減される。なお、ＲＬＵ＃００のリビルド優先度が「低」であれば、ＲＬＵ＃００についての多重度はさらに低く設定される。
【０１１５】
その後、制御ブロックＢＬ３ｂに基づく部分処理が終了したとき、ＲＬＵ＃０１に対する仕掛かり中のホストＩ／Ｏ処理がない場合には、リカバリ制御部２２３は、ＲＬＵ＃０１についての多重度を、ＲＬＵ内多重度上限値Ｍ２である「３」のまま低下させない。仮に、制御ブロックＢＬ３ｂに基づく部分処理が終了した時点で、ＲＬＵ＃００に対する仕掛かり中のホストＩ／Ｏ処理があった場合でも、リカバリ制御部２２３は同様に、ＲＬＵ＃０１についての多重度を「３」のまま維持する。
【０１１６】
このように、リビルド系処理の実行中にホストＩ／Ｏ処理も並行して実行されている状況では、リビルド系処理を実行中のＲＬＵのうち、ホストＩ／Ｏ処理が実行されているＲＬＵについての多重度を優先的に低下させる。これにより、ホストＩ／Ｏ処理とリビルド系処理とを合わせた処理による負荷が特定のＲＬＵに偏らないように制御される。
【０１１７】
ところで、上記のように、リカバリ制御部２２３は、ホストＩ／Ｏ処理の状況、バッファ領域２３１の使用状況、ＲＬＵごとのリビルド優先度に応じて、およびＲＬＵにおけるＲＡＩＤ構成に応じて、ＲＬＵに設定する多重度の上限値を認識する。しかしながら、リビルド系処理を実行中の全ＲＬＵに、認識した多重度の上限値を適用してしまうと、全ＲＬＵについて設定された多重度の合計値が、多重度全体上限値Ｍ１を超えてしまう場合があり得る。そこで、リカバリ制御部２２３は、各ＲＬＵが設定可能な多重度の上限値に対して、全ＲＬＵに共通の多重度調整係数Ｃ１を乗算することで、全ＲＬＵに設定される多重度を均等な割合で低下させ、多重度の合計値を多重度全体上限値Ｍ１以内に収めるようにする。
【０１１８】
例えば、図１０において、バッファ領域２３１の使用量がしきい値以下であり、かつ、ＲＬＵ＃００，＃０１の両方に対する仕掛かり中のホストＩ／Ｏ処理もないものとする。この場合、リカバリ制御部２２３は、ＲＬＵ＃００，＃０１のそれぞれに設定し得る多重度の上限値が、ＲＬＵ内多重度上限値Ｍ２（＝３）であると認識する。しかしながら、仮に多重度全体上限値Ｍ１が「４」であった場合、ＲＬＵ＃００，＃０１のそれぞれの多重度を「３」に設定してしまうと、多重度の加算値が「６」となって、多重度全体上限値Ｍ１を超えてしまう。
【０１１９】
この場合、ＲＬＵ＃００，＃０１に設定する多重度をそれぞれＭ４＿１，Ｍ４＿２とすると、リカバリ制御部２２３は、Ｍ４＿１＝Ｍ４＿２＝３として、Ｃ１×（Ｍ４＿１＋Ｍ４＿２）の値が多重度全体上限値Ｍ１（＝４）以下になるように、多重度調整係数Ｃ１を調整する。この例では、Ｃ１＝２／３と求められるので、リカバリ制御部２２３は、ＲＬＵ＃００，＃０１のそれぞれについての多重度を、設定し得る上限値「３」にＣ１＝２／３を乗じた「２」に設定する。
【０１２０】
このように多重度調整係数Ｃ１を用いることにより、ＲＬＵごとに認識した多重度の上限値の比率をできるだけ保ったまま、多重度の合計値を低下させて、ＣＭ２０１の処理負荷が一定以上にまで増大しないように制御することができる。
【０１２１】
リカバリ制御部２２３は、構成制御部２２４からリビルド系処理の実行を要求されるごと、および、ＲＡＩＤ制御部２２１から部分処理の完了通知を受けるごとに、その時点での状況に応じて、上記のような多重度の調整を行う。
【０１２２】
次に、上記の調整処理についてフローチャートを用いて説明する。
図１１〜図１３は、部分処理の実行を依頼する際のリカバリ制御部の処理手順の例を示すフローチャートである。
【０１２３】
この図１１〜図１３の処理は、構成制御部２２４から制御ブロックの通知を受けてリビルド系処理の実行が依頼されたとき、または、ＲＡＩＤ制御部２２１から制御ブロックの通知を受けて部分処理の実行完了を通知する応答を受けたときに、通知された制御ブロックを参照しながら実行される。ただし、後者の場合（ＲＡＩＤ制御部２２１からの応答を受けた場合）の詳細な処理については、後の図１４を用いてあらためて説明する。
【０１２４】
［ステップＳ１１］リカバリ制御部２２３は、通知された制御ブロックに設定されたＲＬＵに対する仕掛かり中のホストＩ／Ｏ処理がないかを、ホストＩ／Ｏ監視部２２５に問い合わせる。リカバリ制御部２２３は、該当ＲＬＵに対する仕掛かり中のホストＩ／Ｏ処理があった場合には、ステップＳ１２の処理を実行する一方、仕掛かり中のホストＩ／Ｏ処理がない場合には、ステップＳ１４の処理を実行する。
【０１２５】
［ステップＳ１２］リカバリ制御部２２３は、バッファ領域２３１の使用量をバッファ監視部２２６に問い合わせる。リカバリ制御部２２３は、バッファ監視部２２６からの応答に基づき、バッファ領域２３１の使用量が所定のしきい値以下の場合には、ステップＳ１３の処理を実行する一方、しきい値を超えている場合には、ステップＳ１４の処理を実行する。
【０１２６】
［ステップＳ１３］該当ＲＬＵに対する仕掛かり中のホストＩ／Ｏ処理がなく（Ｓ１１：Ｙｅｓ）、バッファ領域２３１の使用量がしきい値以下である（Ｓ１２：Ｙｅｓ）場合、リカバリ制御部２２３は、該当ＲＬＵについての多重度設定値Ｍ４に、あらかじめ設定されたＲＬＵ内多重度上限値Ｍ２を設定する。なお、多重度設定値Ｍ４は、この図１１〜図１３の処理で使用される内部変数であり、例えばＲＡＭ２１２に記憶される。
【０１２７】
［ステップＳ１４］該当ＲＬＵに対する仕掛かり中のホストＩ／Ｏ処理があった場合（Ｓ１１：Ｎｏ）、または、バッファ領域２３１の使用量がしきい値を超えていた場合（Ｓ１２：Ｎｏ）、リカバリ制御部２２３は、該当ＲＬＵに対応するＲＡＩＤ管理テーブル２４１のレコード２４１ａを参照し、該当ＲＬＵに設定されたリビルド優先度を読み出す。リカバリ制御部２２３は、リビルド優先度が「高」の場合（Ｓ１４：Ｙｅｓ）、ステップＳ１５の処理を実行する一方、リビルド優先度が「低」の場合（Ｓ１４：Ｎｏ）、ステップＳ１６の処理を実行する。
【０１２８】
［ステップＳ１５］該当ＲＬＵに設定されたリビルド優先度が「高」の場合（Ｓ１４：Ｙｅｓ）、リカバリ制御部２２３は、ステップＳ１４で参照したレコード２４１ａから、該当ＲＬＵについてのＲＡＩＤ構成（ＲＡＩＤレベルおよび使用ディスク数）を読み出す。リカバリ制御部２２３は、多重度設定テーブルから、ＲＡＩＤ構成に対応する構成別多重度上限値を読み込む。リカバリ制御部２２３は、多重度設定値Ｍ４に、多重度設定テーブルから読み込んだ構成別多重度上限値を設定する。
【０１２９】
［ステップＳ１６］該当ＲＬＵに設定されたリビルド優先度が「低」の場合（Ｓ１４：Ｎｏ）、リカバリ制御部２２３は、多重度設定値Ｍ４に、多重度の下限値「１」を設定する。
【０１３０】
なお、ステップＳ１６では、多重度設定値Ｍ４として、例えば、ステップＳ１５の手順で得られる構成別多重度上限値から一定数を減算した数（ただし、下限値を「１」とする）、または、構成別多重度上限値を所定割合で低下させた数の整数値を設定してもよい。
【０１３１】
また、例えば、リビルド優先度を３段階以上の値として設定できるようにしてもよい。この場合、リカバリ制御部２２３は、例えば、ステップＳ１４〜Ｓ１６の代わりに、多重度設定値Ｍ４として、構成別多重度上限値を上限として、リビルド優先度に応じた値を設定してもよい。例えば、多重度設定値Ｍ４として、リビルド優先度が「高」の場合には構成別多重度上限値を、リビルド優先度が「中」の場合には構成別多重度上限値の１／２の値の整数値を、リビルド優先度が「低」の場合には「１」を、それぞれ設定してもよい。
【０１３２】
［ステップＳ１７］リカバリ制御部２２３は、該当ＲＬＵについての多重度設定値Ｍ４に、現在設定されている多重度調整係数Ｃ１を乗じた（Ｍ４×Ｃ１）を計算する。これとともに、リカバリ制御部２２３は、リビルド系処理を実行中の他のＲＬＵについての現在の多重度Ｍ３を、ＲＡＭ２１２から読み込む。リカバリ制御部２２３は、リビルド系処理を実行中の他のＲＬＵそれぞれについての（Ｍ３×Ｃ１）を計算し、他のＲＬＵそれぞれについての（Ｍ３×Ｃ１）と上記の（Ｍ４×Ｃ１）との合計値Ｎ１を計算する。
【０１３３】
なお、本実施の形態では、ＲＬＵごとの現在の多重度Ｍ３をＲＡＭ２１２に設定しておくが、例えば、処理名としてリビルド系処理が設定された制御ブロックをＲＬＵごとに探索することで、ＲＬＵ別の現在の多重度Ｍ３を取得することもできる。
【０１３４】
［ステップＳ１８］リカバリ制御部２２３は、算出した合計値Ｎ１が多重度全体上限値Ｍ１より大きいかを判定する。リカバリ制御部２２３は、Ｎ１がＭ１より大きい場合（Ｓ１８：Ｙｅｓ）、ステップＳ１９の処理を実行する一方、Ｎ１がＭ１以下の場合（Ｓ１８：Ｎｏ）、ステップＳ２１の処理を実行する。
【０１３５】
［ステップＳ１９］合計値Ｎ１が多重度全体上限値Ｍ１より大きい場合（Ｓ１８：Ｙｅｓ）、多重度調整係数Ｃ１を減少させて、リビルド系処理を実行中の全ＲＬＵについての多重度を低下させる必要がある。リカバリ制御部２２３は、まず、多重度調整係数Ｃ１が所定の下限値であるかを判定する。なお、多重度調整係数Ｃ１の下限値は、０より大きく１未満の任意の値に設定される。リカバリ制御部２２３は、Ｃ１が下限値である場合（Ｓ１９：Ｙｅｓ）、ステップＳ２６の処理を実行する一方、Ｃ１が下限値より大きい場合（Ｓ１９：Ｎｏ）、ステップＳ２０の処理を実行する。
【０１３６】
［ステップＳ２０］リカバリ制御部２２３は、多重度調整係数Ｃ１を１段階減少させる。この後、ステップＳ１７に戻り、減少されたＣ１を用いて（Ｍ４×Ｃ１）および他のＲＬＵそれぞれについての（Ｍ３×Ｃ１）が計算され、それらの算出結果に基づく合計値Ｎ１が計算される。
【０１３７】
［ステップＳ２１］ステップＳ１７で求められた合計値Ｎ１が多重度全体上限値Ｍ１以下である場合（Ｓ１８：Ｎｏ）、リカバリ制御部２２３は、多重度調整係数Ｃ１を増加させて、全体の多重度を高くすることができるかを試す。リカバリ制御部２２３は、まず、現在設定されているＣ１が上限値「１」未満であるかを判定する。リカバリ制御部２２３は、Ｃ１が上限値未満である場合（Ｓ２１：Ｙｅｓ）、ステップＳ２２の処理を実行する一方、Ｃ１が上限値に達している場合（Ｓ２１：Ｎｏ）、ステップＳ２６の処理を実行する。
【０１３８】
［ステップＳ２２］リカバリ制御部２２３は、現在設定されている多重度調整係数Ｃ１を１段階増加させた値を、変数Ｃ２に設定する。なお、変数Ｃ２は、この図１１〜図１３の処理で使用される内部変数であり、例えばＲＡＭ２１２に記憶される。
【０１３９】
［ステップＳ２３］リカバリ制御部２２３は、多重度調整係数Ｃ１の代わりに変数Ｃ２を用いて、ステップＳ１７と同様の計算を行い、他のＲＬＵそれぞれについての（Ｍ３×Ｃ２）と（Ｍ４×Ｃ２）との合計値Ｎ２を計算する。
【０１４０】
［ステップＳ２４］リカバリ制御部２２３は、算出した合計値Ｎ２が多重度全体上限値Ｍ１より大きいかを判定する。リカバリ制御部２２３は、Ｎ２がＭ１より大きい場合（Ｓ２４）、ステップＳ２６の処理を実行する一方、Ｎ２がＭ１以下の場合（Ｓ２４：Ｎｏ）、ステップＳ２５の処理を実行する。
【０１４１】
［ステップＳ２５］合計値Ｎ２が多重度全体上限値Ｍ１以下に収まっている場合、多重度調整係数Ｃ１をステップＳ２２で設定した変数Ｃ２と同一値に設定することが可能になっているので、リカバリ制御部２２３は、Ｃ１を１段階増加させて、変数Ｃ２に一致させる。この後、ステップＳ２１に戻り、増加させたＣ１が上限値に達したかが判定される。
【０１４２】
［ステップＳ２６］該当ＲＬＵに設定すべき適正な多重度が、（Ｍ４×Ｃ１）であることが決定される。
例えば、合計値Ｎ１が多重度全体上限値Ｍ１より大きい場合（Ｓ１８：Ｙｅｓ）には、Ｎ１がＭ１以下に収まるようになるまで、多重度調整係数Ｃ１が徐々に引き下げられていく（Ｓ２０）。そして、Ｎ１がＭ１以下に収まるようになったとき（Ｓ１８：Ｎｏ）、Ｃ１は上限値「１」より小さくなり（Ｓ２１：Ｙｅｓ）、かつ、Ｃ１より１段階大きいＣ２に基づくＮ２はＭ１より大きくなってしまうことから（Ｓ２４：Ｙｅｓ）、現在のＣ１が適正であることになる。
【０１４３】
また、合計値Ｎ１が多重度全体上限値Ｍ１以下である場合（Ｓ１８：Ｎｏ）には、Ｃ１が上限値「１」に達するか（Ｓ２１：Ｎｏ）、あるいは、Ｃ１より１段階大きいＣ２に基づくＮ２がＭ１より大きくなる（Ｓ２４：Ｙｅｓ）まで、Ｃ１が徐々に引き上げられる（Ｓ２５）。これにより、Ｃ１が適正な値に設定される。
【０１４４】
以上のように、該当ＲＬＵに設定すべき多重度が決定されると、リカバリ制御部２２３は、（Ｍ４×Ｃ１）を、該当ＲＬＵについての適正多重度Ｍ５として設定する。なお、適正多重度Ｍ５は、この図１１〜図１３の処理で使用される内部変数であり、例えばＲＡＭ２１２に記憶される。リカバリ制御部２２３は、次のステップＳ２７以降で、該当ＲＬＵの実際の多重度を適正多重度Ｍ５に一致させるための処理を実行する。
【０１４５】
［ステップＳ２７］リカバリ制御部２２３は、現在参照中の制御ブロックが、リカバリ制御部２２３自身が獲得したものかを判定する。なお、リカバリ制御部２２３は、例えば、構成制御部２２４から制御ブロックの通知を受けたときに、その制御ブロックのＩＤをＲＡＭ２１２に記憶しておくことで、ステップＳ２７の判定処理を実行可能である。
【０１４６】
リカバリ制御部２２３は、参照中の制御ブロックが、自身が獲得したものである場合（Ｓ２７：Ｙｅｓ。例えば、図６の制御ブロックＢＬ２〜ＢＬ４のいずれかである場合）、ステップＳ２８の処理を実行する。一方、リカバリ制御部２２３は、参照中の制御ブロックが、構成制御部２２４から通知された制御ブロックである場合（Ｓ２７：Ｎｏ。例えば、図６の制御ブロックＢＬ１の場合）、ステップＳ３１の処理を実行する。
【０１４７】
［ステップＳ２８］リカバリ制御部２２３は、該当ＲＬＵについての現在の多重度Ｍ３が、適正多重度Ｍ５より大きいかを判定する。リカバリ制御部２２３は、Ｍ３がＭ５より大きい場合（Ｓ２８：Ｙｅｓ）、ステップＳ２９の処理を実行する一方、Ｍ３がＭ５以下である場合（Ｓ２８：Ｎｏ）、ステップＳ３２の処理を実行する。
【０１４８】
［ステップＳ２９］該当ＲＬＵについての現在の多重度Ｍ３が適正多重度Ｍ５より大きい場合（Ｓ２８：Ｙｅｓ）、該当ＲＬＵについての実際の多重度を低下させる必要がある。このため、リカバリ制御部２２３は、まず、該当ＲＬＵについての現在の多重度Ｍ３を「１」だけデクリメントする。
【０１４９】
［ステップＳ３０］リカバリ制御部２２３は、現在参照している制御ブロックを解放して、この制御ブロックに対応する処理を終了する。
［ステップＳ３１］リカバリ制御部２２３は、該当ＲＬＵについての現在の多重度Ｍ３が、適正多重度Ｍ５より小さいかを判定する。リカバリ制御部２２３は、Ｍ３がＭ５より小さい場合（Ｓ３１：Ｙｅｓ）、ステップＳ３６の処理を実行する一方、Ｍ３がＭ５以上である場合（Ｓ３１：Ｎｏ）、ステップＳ３２の処理を実行する。
【０１５０】
［ステップＳ３２］ステップＳ２８で、該当ＲＬＵについての現在の多重度Ｍ３が適正多重度以下である場合（Ｓ２８：Ｎｏ）、または、ステップＳ３１で、該当ＲＬＵについての現在の多重度Ｍ３が適正多重度以上である場合（Ｓ３１：Ｎｏ）には、該当ＲＬＵについての実際の多重度が適正化されていると判断できる。この場合、リカバリ制御部２２３は、該当ＲＬＵについてのリビルド系処理対象領域のうち、ＲＡＩＤ制御部２２１に対して部分処理を依頼していない最も先頭側の領域を示すアドレスを判定する。リカバリ制御部２２３は、判定したアドレスを、参照中の制御ブロックにおけるアドレスの領域に、次の処理対象として上書き設定する。
【０１５１】
具体的には、リカバリ制御部２２３は、該当ＲＬＵが設定されている制御ブロックを探索し、探索された制御ブロックに設定されたアドレスの中から、リビルド系処理対象の領域における最も後ろ側（先頭とは反対側）の領域を示すアドレスを抽出する。そして、リカバリ制御部２２３は、抽出したアドレスが示す領域の次の領域を示すアドレスを、参照中の制御ブロックにおけるアドレスの領域に上書き設定する。
【０１５２】
［ステップＳ３３］リカバリ制御部２２３は、参照している制御ブロックに基づく現在の処理が、構成制御部２２４からの依頼に応じた処理かを判定する。リカバリ制御部２２３は、現在の処理が構成制御部２２４からの依頼に応じた処理である場合（Ｓ３３：Ｙｅｓ。）、ステップＳ３４の処理を実行する。一方、リカバリ制御部２２３は、現在の処理が、ＲＡＩＤ制御部２２１からの応答に応じた処理である場合（Ｓ３３：Ｎｏ）、ステップＳ３５の処理を実行する。
【０１５３】
［ステップＳ３４］現在の処理が構成制御部２２４からの依頼に応じた処理である場合（Ｓ３３：Ｙｅｓ）、ＲＡＩＤ制御部２２１に依頼する、参照している制御ブロックに基づく部分処理は、現在の多重度Ｍ３に反映されていない。このため、リカバリ制御部２２３は、該当ＲＬＵに対応する現在の多重度Ｍ３を「１」だけインクリメントする。
【０１５４】
なお、ステップＳ３３（Ｙｅｓ），Ｓ３４の順に処理が実行されるケースとしては、例えば、図６のタイミングＴ１８でのリカバリ制御部２２３の処理がある。一方、ステップＳ３３でＮｏと判定されるケースとしては、例えば、図６のタイミングＴ１７や、タイミングＴ２３でのリカバリ制御部２２３の処理がある。
【０１５５】
［ステップＳ３５］リカバリ制御部２２３は、ステップＳ３２でアドレスを更新した、参照中の制御ブロックのＩＤを、ＲＡＩＤ制御部２２１に通知して、その制御ブロックに基づく部分処理の実行を依頼する。これにより、参照していた制御ブロックに対応する処理が終了される。
【０１５６】
［ステップＳ３６］ステップＳ３１で、該当ＲＬＵについての現在の多重度Ｍ３が適正多重度より小さい場合（Ｓ３１：Ｙｅｓ）、該当ＲＬＵについての多重度を高くすることができる。この場合、リカバリ制御部２２３は、新規に制御ブロックを獲得する。このとき、獲得した制御ブロックのＲＬＵ番号、処理名、読み出し元ディスク番号および書き込み先ディスク番号に、参照している制御ブロックに設定されたものと同じ情報を設定する。
【０１５７】
［ステップＳ３７］リカバリ制御部２２３は、ステップＳ３２と同様の手順で、該当ＲＬＵについてのリビルド系処理対象領域のうち、ＲＡＩＤ制御部２２１に対して部分処理を依頼していない最も先頭側の領域を示すアドレスを判定する。リカバリ制御部２２３は、判定したアドレスを、新規に獲得した制御ブロックにおけるアドレスの領域に、次の処理対象として上書き設定する。
【０１５８】
［ステップＳ３８］リカバリ制御部２２３は、新規に獲得した制御ブロックのＩＤをＲＡＩＤ制御部２２１に通知して、その制御ブロックに基づく部分処理の実行を依頼する。
［ステップＳ３９］リカバリ制御部２２３は、該当ＲＬＵについての現在の多重度Ｍ３を「１」だけインクリメントする。この後、ステップＳ３１の処理に戻る。
【０１５９】
なお、ステップＳ３９の処理は、例えば、ステップＳ３１の実行後から、ステップＳ３８の処理を実行して次にステップＳ３１の実行を開始するまでの間の任意のタイミングで実行可能である。
【０１６０】
図１３に示した処理では、ステップＳ２７（Ｙｅｓ），Ｓ２８（Ｙｅｓ），Ｓ２９，Ｓ３０の順の処理が行われた場合、該当ＲＬＵについての多重度が減少して、該当ＲＬＵについてのリビルド系処理の速度が低下する。一方、ステップＳ２７（Ｎｏ），Ｓ３１（Ｙｅｓ）の順に処理が行われた場合、その後にステップＳ３６〜Ｓ３９の処理が実行されることで、該当ＲＬＵについての多重度が増加して、該当ＲＬＵについてのリビルド系処理の速度が高められる。
【０１６１】
なお、図１３の処理例では、参照中の制御ブロックが構成制御部２２４から通知されたものである場合のみ、新規の制御ブロックを獲得して多重度を増加させるものとした。しかしながら、例えば、参照中の制御ブロックがリカバリ制御部２２３自身が獲得したものである場合でも、新規の制御ブロックを獲得して多重度を増加させることができるようにしてもよい。
【０１６２】
次に、図１４は、ＲＡＩＤ制御部からの応答を受けたときのリカバリ制御部の処理手順の例を示すフローチャートである。
［ステップＳ５１］リカバリ制御部２２３は、ＲＡＩＤ制御部２２１から、リビルド系処理の依頼に対する応答を受ける。このとき、リカバリ制御部２２３は、実行が完了した部分処理に対応する制御ブロックのＩＤの通知を受ける。以後、リカバリ制御部２２３は、ＲＡＩＤ制御部２２１から通知されたＩＤに対応する制御ブロックを参照しながら処理を行う。
【０１６３】
［ステップＳ５２］リカバリ制御部２２３は、ＲＡＩＤ制御部２２１から通知された制御ブロックに設定されたＲＬＵについて、部分処理の実行が完了した領域の最後尾を示すアドレスを、ＲＡＭ２１２内の完了アドレスＡＤに設定する。
【０１６４】
具体的には、リカバリ制御部２２３は、該当ＲＬＵが設定されている制御ブロックを探索し、探索された制御ブロックに設定されたアドレスの中から、リビルド系処理対象の領域における最も先頭側の領域を示すアドレスを抽出する。リカバリ制御部２２３は、抽出したアドレスが示す領域より１ブロック分先頭側の領域のアドレスを、該当ＲＬＵについての完了アドレスＡＤとしてＲＡＭ２１２に記録する。
【０１６５】
［ステップＳ５３］リカバリ制御部２２３は、該当ＲＬＵについてのリビルド系処理対象の全領域について、ＲＡＩＤ制御部２２１に対する部分処理の依頼が済んだかを判定する。
【０１６６】
具体的には、リカバリ制御部２２３は、該当ＲＬＵが設定されている制御ブロックを探索し、探索された制御ブロックに設定されたアドレスの中から、リビルド系処理対象の領域における最も後ろ側（先頭とは反対側）の領域を示すアドレスを抽出する。リカバリ制御部２２３は、抽出したアドレスが示す領域が、リビルド系処理対象の領域の最後尾である場合に、全対象領域についての部分処理の依頼が済んでいると判定する。
【０１６７】
リカバリ制御部２２３は、全対象領域についての部分処理が依頼済みである場合（Ｓ５３：Ｙｅｓ）、ステップＳ５４の処理を実行する。一方、リカバリ制御部２２３は、部分処理を依頼していない領域が存在する場合（Ｓ５３：Ｎｏ）には、図１１のステップＳ１１を起点として図１１〜図１３に示した処理を実行する。すなわち、リカバリ制御部２２３は、リビルド系処理対象の全領域について部分処理を依頼するまでの間、ＲＡＩＤ制御部２２１からの応答を受けるたびに、該当ＲＬＵについての多重度が適正かを判定し、多重度の調整を行う。
【０１６８】
［ステップＳ５４］リビルド系処理対象の全領域について部分処理が依頼済みである場合（Ｓ５３：Ｙｅｓ）、リカバリ制御部２２３は、リビルド系処理対象の全領域について部分処理が完了したかを判定する。リカバリ制御部２２３は、ＲＡＭ２１２に設定された、該当ＲＬＵについての完了アドレスＡＤが、リビルド系処理対象領域の最後尾を示す場合に、全領域について部分処理が完了したと判定して、ステップＳ５５の処理を実行する（Ｓ５４：Ｙｅｓ）。
【０１６９】
一方、リカバリ制御部２２３は、リビルド系処理対象の全領域について部分処理が完了していない場合（Ｓ５４：Ｎｏ）、全領域について部分処理が完了するまで待ち合わせる。この場合、リカバリ制御部２２３は、同じＲＬＵについての他の制御ブロックに基づく部分処理の完了通知をＲＡＩＤ制御部２２１から受けたとき、この制御ブロックを参照しながら図１４の処理を実行したときに、ステップＳ５２の処理によって完了アドレスＡＤを更新する。ステップＳ５４では、リカバリ制御部２２３は、他の制御ブロックを参照した処理によって、完了アドレスＡＤがリビルド系処理対象領域の最後尾を示すようになったとき、ステップＳ５５の処理を開始する。
【０１７０】
［ステップＳ５５］リカバリ制御部２２３は、現在参照中の制御ブロックが、リカバリ制御部２２３自身が獲得したものかを判定する。リカバリ制御部２２３は、参照中の制御ブロックが、自身が獲得したものである場合（Ｓ５５：Ｙｅｓ。例えば、図６の制御ブロックＢＬ２〜ＢＬ４のいずれかである場合）、参照中の制御ブロックに基づく処理を終了する。この場合、参照されていた制御ブロックは、構成制御部２２４から通知された制御ブロックを参照した、後述するステップＳ５７の処理によって、解放される。
【０１７１】
一方、リカバリ制御部２２３は、参照中の制御ブロックが、構成制御部２２４から通知された制御ブロックである場合（Ｓ５５：Ｎｏ。例えば、図６の制御ブロックＢＬ１の場合）、ステップＳ５６の処理を実行する。この場合、リカバリ制御部２２３は、構成制御部２２４から通知された制御ブロックを参照しながら、ステップＳ５６以降の処理によって、該当ＲＬＵについてのリビルド系処理の完了処理を行い、構成制御部２２４に対して処理の完了を通知する。
【０１７２】
［ステップＳ５６］リカバリ制御部２２３は、参照中の制御ブロックと同じＲＬＵ番号および同じ処理名が設定された、リカバリ制御部２２３自身が獲得した制御ブロックがあるかを判定する。該当ＲＬＵについての現在の多重度Ｍ３が２以上の場合、構成制御部２２４から通知された制御ブロックの他に、同じＲＬＵについてのリカバリ制御部２２３自身が獲得した制御ブロックが存在することになる。
【０１７３】
リカバリ制御部２２３は、自身が獲得した制御ブロックがある場合（Ｓ５６：Ｙｅｓ）、ステップＳ５７の処理を実行する一方、自身が獲得した制御ブロックがない場合（Ｓ５６：Ｎｏ）、ステップＳ５８の処理を実行する。
【０１７４】
［ステップＳ５７］リカバリ制御部２２３は、自身が獲得した制御ブロックを解放する。これにより、参照中の制御ブロック以外に、同じＲＬＵ番号および同じ処理名が設定された制御ブロックが存在しない状態となる。
【０１７５】
［ステップＳ５８］リカバリ制御部２２３は、該当ＲＬＵについての現在の多重度Ｍ３を、「０」にリセットする。
［ステップＳ５９］リカバリ制御部２２３は、参照中の制御ブロックから読み出し元ディスク番号および書き込み先ディスク番号を削除する。リカバリ制御部２２３は、各ディスク番号を削除した制御ブロックのＩＤを構成制御部２２４に通知して、制御ブロックの処理名が示すリビルド系処理の実行完了を通知する応答を行う。
【０１７６】
応答を受けた構成制御部２２４は、リカバリ制御部２２３から通知されたＩＤに対応する制御ブロックを解放して、リカバリ制御部２２３に依頼したリビルド系処理を完了させる。
【０１７７】
以上説明した第２の実施の形態によれば、バッファ領域２３１の使用量、ＲＬＵごとの仕掛かり中のホストＩ／Ｏ処理の有無、および、ＲＬＵごとのリビルド優先度に応じて、リビルド系処理における部分処理の多重度が、ＲＬＵごとに最適化される。これにより、ホストＩ／Ｏ処理性能に与える影響をできるだけ抑制しながら、リビルド系処理を高速化することができる。
【０１７８】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  記憶装置群と、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、前記論理記憶領域に割り当てられた記憶装置のうち、第１の記憶装置に記録されていたデータと同一のデータを、前記第１の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第１の記憶装置と交換された第２の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、を有するストレージ制御装置と、
を備え、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とするストレージシステム。
【０１７９】
（付記２）  前記リビルド制御部は、前記記憶装置群に含まれる記憶装置のうち互いに異なる複数の記憶装置の記憶領域によってそれぞれ構成され、データが異なる記憶装置に冗長化されるようにデータ記録がそれぞれ制御される複数の論理記憶領域について、それぞれ１つ以上の前記部分処理の実行を前記アクセス処理部に指示し、
前記アクセス処理部は、前記複数の論理記憶領域のそれぞれについての１つ以上の前記部分処理の実行指示に応じて、前記複数の論理記憶領域のそれぞれについての前記部分処理を並列に実行する、
ことを特徴とする付記１記載のストレージシステム。
【０１８０】
（付記３）  前記アクセス処理部は、ホスト装置からの要求に応じて前記複数の論理記憶領域の少なくとも１つにアクセスするホストアクセス処理を、前記リビルド処理と並列に実行し、
前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域に対する前記ホストアクセス処理が実行されていない場合と比較して、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させる、
ことを特徴とする付記２記載のストレージシステム。
【０１８１】
（付記４）  前記ストレージ制御装置は、データを冗長化するための論理記憶領域の仕様ごとに、前記ホストアクセス処理に与える影響度合いが略均等になるように前記部分処理の多重度が設定された多重度設定値記憶部を有し、
前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域の仕様に対応する多重度を前記多重度設定値記憶部から取得し、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を前記多重度設定値記憶部から取得した多重度に設定する、
ことを特徴とする付記３記載のストレージシステム。
【０１８２】
（付記５）  前記リビルド制御部は、実行中の前記リビルド処理の対象の論理記憶領域と同じ論理記憶領域に対する前記ホストアクセス処理が実行されていない場合、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を、異なる仕様の論理記憶領域間で共通にあらかじめ定められた多重度に設定することを特徴とする付記４記載のストレージシステム。
【０１８３】
（付記６）  前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域に対して設定された優先度が低いほど、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする付記３記載のストレージシステム。
【０１８４】
（付記７）  前記リビルド制御部は、前記ストレージ制御装置におけるバッファ使用量が所定のしきい値を超えている場合、前記バッファ使用量が前記しきい値以下の場合と比較して、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする付記２または３記載のストレージシステム。
【０１８５】
（付記８）  前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了するたびに、前記バッファ使用量が前記しきい値を超えているかを判定し、前記バッファ使用量が前記しきい値を超えている場合、前記バッファ使用量が前記しきい値以下である場合と比較して、実行が完了した前記部分処理が処理対象とする論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする付記７記載のストレージシステム。
【０１８６】
（付記９）  前記ストレージ制御装置は、データを冗長化するための論理記憶領域の仕様ごとに、前記ホストアクセス処理に与える影響度合いが略均等になるように前記部分処理の多重度が設定された多重度設定値記憶部を有し、
前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了したとき、前記バッファ使用量が前記しきい値を超えている場合には、前記バッファ使用量が前記しきい値以下である場合と比較して、実行が完了した前記部分処理が処理対象とする前記論理記憶領域の仕様に対応する多重度を前記多重度設定値記憶部から取得し、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を前記多重度設定値記憶部から取得した多重度に設定する、
ことを特徴とする付記８記載のストレージシステム。
【０１８７】
（付記１０）  前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了したとき、前記バッファ使用量が前記しきい値を超えている場合には、前記バッファ使用量が前記しきい値以下である場合と比較して、実行が完了した前記部分処理が処理対象とする論理記憶領域についての前記部分処理の多重度を、異なる仕様の論理記憶領域間で共通にあらかじめ定められた多重度に設定することを特徴とする付記９記載のストレージシステム。
【０１８８】
（付記１１）  前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了したとき、前記バッファ使用量が前記しきい値を超えている場合には、前記バッファ使用量が前記しきい値以下である場合と比較して、実行が完了した前記部分処理が処理対象とする論理記憶領域に対して設定された優先度が低いほど、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする付記８記載のストレージシステム。
【０１８９】
（付記１２）  前記アクセス処理部は、ホスト装置からの要求に応じて前記複数の論理記憶領域の少なくとも１つにアクセスするホストアクセス処理を、前記リビルド処理と並列に実行し、
前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了するたびに、実行が完了した前記部分処理が処理対象とする論理記憶領域に対する前記ホストアクセス処理が前記アクセス処理部で実行されているか否か、または、前記ストレージ制御装置におけるバッファ使用量が所定のしきい値を超えているか否かに応じて、実行が完了した前記部分処理が処理対象とする論理記憶領域についての前記部分処理の多重度を調整するとともに、実行中の前記部分処理の総数が所定の上限値以下でかつ当該上限値に近づくように、各論理記憶領域についての前記部分処理の多重度を一定割合で増減することを特徴とする付記２記載のストレージシステム。
【０１９０】
（付記１３）  前記リビルド制御部は、前記論理記憶領域についての前記リビルド処理が完了するまでの間、前記アクセス処理部に実行を指示した複数の前記部分処理のうちのいずれかが完了すると、次の未処理の前記分割範囲についての前記部分処理の実行を前記アクセス処理部に指示することを特徴とする付記１記載のストレージシステム。
【０１９１】
（付記１４）  前記アクセス処理部は、
前記リビルド処理によって前記予備用記憶装置に書き込まれたデータを前記第２の記憶装置に書き戻すコピーバック処理、または、前記複数の論理記憶領域のいずれかについての前記リビルド処理を、当該論理記憶領域に割り当てられた前記第１の記憶装置を当該論理記憶領域から切り離さずに実行する冗長コピー処理についても、前記部分処理を単位として実行し、
前記リビルド制御部から受け付けた、前記冗長コピー処理または前記コピーバック処理に含まれる複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とする付記１記載のストレージシステム。
【０１９２】
（付記１５）  記憶装置群に含まれる記憶装置に対するアクセスを制御するストレージ制御装置において、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、
前記論理記憶領域に割り当てられた記憶装置のうち、第１の記憶装置に記録されていたデータと同一のデータを、前記第１の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第１の記憶装置と交換された第２の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、
を有し、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とするストレージ制御装置。
【０１９３】
（付記１６）  記憶装置群に含まれる記憶装置に対するアクセスを制御するストレージ制御装置におけるストレージ制御方法であって、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置のうち、第１の記憶装置に記録されていたデータと同一のデータを、前記第１の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第１の記憶装置と交換された第２の記憶装置に書き込むリビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して実行するとともに、複数の前記部分処理を並列に実行する、
ことを特徴とするストレージ制御方法。
【０１９４】
（付記１７）  前記記憶装置群に含まれる記憶装置のうち互いに異なる複数の記憶装置の記憶領域によってそれぞれ構成され、データが異なる記憶装置に冗長化されるようにデータ記録がそれぞれ制御される複数の論理記憶領域について、それぞれ１つ以上の前記部分処理を並列に実行することで、前記複数の論理記憶領域のそれぞれについての前記部分処理を並列に実行する、
ことを特徴とする付記１６記載のストレージ制御方法。
【０１９５】
（付記１８）  前記ストレージ制御装置は、ホスト装置からの要求に応じて前記複数の論理記憶領域の少なくとも１つにアクセスするホストアクセス処理を、前記リビルド処理と並列に実行可能であり、
前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が実行されている場合、当該論理記憶領域に対する前記ホストアクセス処理が実行されていない場合と比較して、当該論理記憶領域を処理対象として実行する前記部分処理の多重度を低下させる、
ことを特徴とする付記１７記載のストレージ制御方法。
【０１９６】
（付記１９）  前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が実行中である場合、データを冗長化するための論理記憶領域の仕様ごとに、前記ホストアクセス処理に与える影響度合いが略均等になるように前記部分処理の多重度が設定された多重度設定値記憶部を参照し、前記ホストアクセス処理および前記リビルド処理の両方が実行中である論理記憶領域の仕様に対応する多重度を前記多重度設定値記憶部から取得し、当該論理記憶領域を処理対象として実行する前記部分処理の多重度を前記多重度設定値記憶部から取得した多重度に設定する、
ことを特徴とする付記１８記載のストレージ制御方法。
【０１９７】
（付記２０）  前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が実行中である場合、当該論理記憶領域に対して設定された優先度が低いほど、当該論理記憶領域を処理対象として実行する前記部分処理の多重度を低下させることを特徴とする付記１８記載のストレージ制御方法。
【符号の説明】
【０１９８】
１  ストレージシステム
１０  ストレージ制御装置
１１  リビルド制御部
１２  アクセス処理部
２１〜２５  記憶装置
Ａ１＿１，Ａ１＿２，Ａ２＿１，Ａ２＿２，Ａ３＿１，Ａ３＿２，Ａ４＿１，Ａ４＿２，Ａ５＿１，Ａ５＿２  領域
Ｐ１，Ｐ２  部分処理
【図１】
0005807458.tif 000002
【図２】
0005807458.tif 000003
【図３】
0005807458.tif 000004
【図４】
0005807458.tif 000005
【図５】
0005807458.tif 000006
【図６】
0005807458.tif 000007
【図７】
0005807458.tif 000008
【図８】
0005807458.tif 000009
【図９】
0005807458.tif 000010
【図１０】
0005807458.tif 000011
【図１１】
0005807458.tif 000012
【図１２】
0005807458.tif 000013
【図１３】
0005807458.tif 000014
【図１４】
0005807458.tif 000015