ストレージシステム、ストレージ制御装置およびストレージ制御方法
【課題】リビルド処理を高速化する。
【解決手段】リビルド制御部11は、RLU#1を構成する記憶装置24に記録されていたデータと同一のデータを、RLU#1を構成する記憶装置21〜23から読み出したデータを基に生成して、ストレージシステム1に含まれる予備用の記憶装置25に書き込むリビルド処理を、データの読み出し対象範囲を一定サイズごとに分割した分割範囲からデータを読み出す処理と、この分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、部分処理の実行をアクセス処理部12に指示する。アクセス制御部12は、リビルド制御部11から受け付けた複数の部分処理P1,P2の実行指示に応じて、指示された部分処理P1,P2を並列に実行する。
【解決手段】リビルド制御部11は、RLU#1を構成する記憶装置24に記録されていたデータと同一のデータを、RLU#1を構成する記憶装置21〜23から読み出したデータを基に生成して、ストレージシステム1に含まれる予備用の記憶装置25に書き込むリビルド処理を、データの読み出し対象範囲を一定サイズごとに分割した分割範囲からデータを読み出す処理と、この分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、部分処理の実行をアクセス処理部12に指示する。アクセス制御部12は、リビルド制御部11から受け付けた複数の部分処理P1,P2の実行指示に応じて、指示された部分処理P1,P2を並列に実行する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステム、ストレージ制御装置およびストレージ制御方法に関する。
【背景技術】
【0002】
近年、HDD(Hard Disk Drive)などの記憶装置を複数用いたストレージシステムが広く使用されている。このようなストレージシステムでは、一般的に、RAID(Redundant Arrays of Inexpensive Disks)技術を用いて、データが2つ以上の記憶装置に冗長化されるような記録制御が行われることで、記録されるデータの安全性が高められている。
【0003】
また、データが冗長化されたストレージシステムにおいて、記憶装置が故障すると、故障した記憶装置に記憶されていたデータが再構築されて、ホットスペア(Hot Spare)と呼ばれる予備用記憶装置などの他の記憶装置に格納される。このような処理は、一般に「リビルド処理」と呼ばれる。リビルド処理が実行されることで、データの冗長度が回復する。
【0004】
ストレージシステムでは、ホスト装置からの要求に基づく記憶装置へのI/O(In/Out)処理(以下、「ホストI/O処理」と呼ぶ)を停止させることなく、リビルド処理をホストI/O処理と同時に実行することが求められている。この場合、ホストI/O処理の性能をできるだけ低下させずにリビルド処理が実行されることが望ましいが、その一方で、リビルド処理に要する時間を短縮したいという要求もある。
【0005】
このような問題に鑑みて、ホストI/O処理とリビルド処理との負荷バランスを制御することが考えられている。例えば、ホストI/O処理の仕掛かり数とリビルド処理の仕掛かり数とを管理し、ホストI/O処理の仕掛かり数に応じてリビルド処理の実行要求数を制御するようにしたストレージシステムがある。また、リビルド処理の1回の処理サイズを、ホストI/O処理の有無に応じて変更するようにしたストレージシステムもある。さらに、ホスト装置からのI/O要求が所定時間到来しない場合には、リビルド処理におけるあるアドレスについての書き込み処理と、別のアドレスについての読み出し処理とを並行して実行するようにしたストレージシステムもある。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特許第4322068号公報
【特許文献2】特開2007−94994号公報
【特許文献3】特許第4472917号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
近年のストレージシステムにおける記憶領域の大容量化に伴い、リビルド処理に要する時間が増大する傾向にある。このため、リビルド処理に要する時間をより短縮することが課題となっている。
【0008】
1つの側面では、本発明は、リビルド処理を高速化できるようにしたストレージシステム、ストレージ制御装置およびストレージ制御方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
上記目的を達成するために、記憶装置群とストレージ制御装置とを備えるストレージシステムが提供される。ストレージ制御装置は、記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、記憶装置群に含まれる予備用記憶装置または第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理をアクセス処理部に実行させるリビルド制御部と、を有する。また、リビルド制御部は、リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、この分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、アクセス処理部に対して部分処理の実行を指示する。アクセス処理部は、リビルド制御部から受け付けた複数の部分処理の実行指示に応じて、指示された複数の部分処理を並列に実行する。
【0010】
また、上記目的を達成するために、上記のストレージシステムと同様の処理を実行するストレージ制御装置およびストレージ制御方法が提供される。
【発明の効果】
【0011】
1態様によれば、リビルド処理を高速化できる。
【図面の簡単な説明】
【0012】
【図1】第1の実施の形態に係るストレージシステムの構成例を示す図である。
【図2】第2の実施の形態に係るストレージシステムの全体構成例を示す図である。
【図3】CMのハードウェア構成例を示す図である。
【図4】CMの処理機能の構成例を示すブロック図である。
【図5】リビルド系処理の実行時に生成される制御ブロックの構成例を示す図である。
【図6】制御ブロックに基づいて部分処理が多重実行される際の処理例を示すシーケンス図である。
【図7】リビルド系処理を実行する際に参照される主な情報の例を示す図である。
【図8】RAID管理テーブルに登録される情報の例を示す図である。
【図9】多重度設定テーブルに登録される情報の例を示す図である。
【図10】2つのRLUについてのリビルド系処理が実行されている状態を示す図である。
【図11】部分処理の実行を依頼する際のリカバリ制御部の処理手順の例を示すフローチャート(その1)である。
【図12】部分処理の実行を依頼する際のリカバリ制御部の処理手順の例を示すフローチャート(その2)である。
【図13】部分処理の実行を依頼する際のリカバリ制御部の処理手順の例を示すフローチャート(その3)である。
【図14】RAID制御部からの応答を受けたときのリカバリ制御部の処理手順の例を示すフローチャートである。
【発明を実施するための形態】
【0013】
以下、実施の形態について図面を参照して詳細に説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージシステムの構成例を示す図である。
【0014】
ストレージシステム1は、ストレージ制御装置10と、複数の記憶装置とを備える。ストレージシステム1が備える記憶装置は、HDD、SSD(Solid State Drive)などの不揮発性記憶装置である。図1では、ストレージシステム1が備える記憶装置として、記憶装置21〜25を例示している。
【0015】
ストレージ制御装置10は、図示しないホスト装置からの要求に応じて、ストレージシステム1内の記憶装置に対するアクセスを制御する。また、ストレージ制御装置10は、記憶装置へのアクセス処理を、それぞれ複数の記憶装置の記憶領域によって構成される論理記憶領域を単位として制御する。論理記憶領域に対するデータ記録は、データが異なる記憶装置に冗長化されるように制御される。以下、このような論理記憶領域をRLU(RAID Logical Unit)と呼ぶ。図1では例として、記憶装置21〜24の各記憶領域が、「RLU#1」という1つのRLUに属しているものとする。
【0016】
ストレージ制御装置10は、リビルド制御部11およびアクセス処理部12を備える。リビルド制御部11およびアクセス処理部12の各処理は、例えば、ストレージ制御装置10が備えるCPU(Central Processing Unit)が所定のプログラムを実行することで実現される。
【0017】
リビルド制御部11は、アクセス処理部12にリビルド処理を実行させる。リビルド処理は、RLUを構成する1つの記憶装置(第1の記憶装置とする)に記録されていたデータと同一のデータを、RLUを構成する記憶装置のうち第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、ストレージシステム1に含まれる予備用記憶装置、または、上記の第1の記憶装置と交換された第2の記憶装置に書き込む処理である。
【0018】
なお、例えば、RLUがRAID−4,5,6のようにパリティを用いてデータが冗長化されるように制御されていた場合には、RLUを構成する、第1の記憶装置以外の記憶装置から読み出したデータを基に、書き込み先に書き込むべきデータが計算によって生成される。しかしながら、例えば、RLUがRAID−1のようにミラーリング制御されていた場合には、第1の記憶装置以外の記憶装置から読み出されたデータは、書き込み先に対してそのまま書き込まれる。
【0019】
アクセス処理部12は、リビルド制御部11からの要求に応じて上記のリビルド処理を実行する。アクセス処理部12は、リビルド処理を、データの読み出し対象範囲を一定サイズごとに分割した分割範囲からデータを読み出す処理と、この分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して実行する。
【0020】
ここで、リビルド制御部11は、1つのRLUについてのリビルド処理をアクセス処理部12に実行させる際に、複数の部分処理の実行を指示することで、指示した複数の部分処理をアクセス処理部12に並列に実行させることができる。このように、複数の部分処理を並列に実行することで、リビルド処理を高速化することができる。
【0021】
以下、例として、図1に示すRLU#1についてのリビルド処理の処理手順について説明する。なお、ここでは例として、RLU#1は、RAID−4,5,6のようにパリティを用いてデータが冗長化されるように制御されているものとする。そして、以下の説明では、記憶装置24が故障し、故障した記憶装置24に記録されていたデータを、予備用の記憶装置25に格納するものとする。
【0022】
リビルド制御部11は、部分処理の実行をアクセス処理部12に指示することで、アクセス処理部12にリビルド処理を実行させる。部分処理は、リビルド処理でのデータの読み出し対象範囲を一定サイズごとに分割した分割範囲ごとに実行される。図1の例では、読み出し対象範囲は、記憶装置21〜23の記憶領域である。そして、分割範囲は、記憶装置24の記憶領域を一定サイズごとに分割した各領域(例えば、図1の領域A4_1)に対応する、同じRLUを構成する他の記憶装置21〜23の記憶領域(例えば、図1の領域A1_1,A2_1,A3_1)である。
【0023】
なお、RLU#1がRAID−1で制御される場合には、読み出し対象範囲は、記憶装置21〜23のいずれかである。そして例えば、領域A4_1に対応する分割領域は、領域A1_1,A2_1,A3_1のいずれかである。
【0024】
図1のRLU#1についてのリビルド処理における1つの部分処理は、1つの分割範囲(例えば、領域A1_1,A2_1,A3_1)からデータを読み出す処理と、読み出したデータに基づいて生成したデータを、記憶装置25の対応する領域(例えば、領域A5_1)に書き込む処理との組み合わせを含む。アクセス処理部12は、このような部分処理を単位としてリビルド処理を実行する。
【0025】
リビルド制御部11は、アクセス処理部12に対して複数の部分処理の実行を指示することで、指示した複数の部分処理をアクセス処理部12に並列に実行させる。図1の例では、リビルド制御部11は、領域A1_1,A2_1,A3_1からのデータ読み出しを含む部分処理P1と、領域A1_2,A2_2,A3_2からのデータ読み出しを含む部分処理P2の実行を、アクセス処理部12に指示する。このとき、アクセス処理部12は、指示された部分処理P1,P2を並列に実行する。
【0026】
このようにアクセス処理部12によって複数の部分処理が並列に実行されることで、リビルド処理の速度を高速化することができる。例えば図1において、部分処理P1における領域A5_1に対するデータの書き込みと、部分処理P2における領域A1_1,A2_1,A3_1からのデータ読み出しとを、同時に実行することができる。これにより、アクセス処理部12は、部分処理P1の実行が完了する前に、部分処理P2の実行を開始することができ、その結果、リビルド処理全体に要する時間が短縮される。
【0027】
また、上記のように、各部分処理は、ある分割範囲からのデータ読み出し処理と、読み出したデータを基に生成したデータを他の記憶装置に書き込む処理とを含む。このため、例えば、1つの部分処理の中では、読み出し元を特定する論理アドレス(LBA:Logical Block Address)と、書き込み先を特定する論理アドレスとを同じ値とすることができる。従って、アクセス処理部12が部分処理を並列に実行する際の処理手順を簡易化することができ、リビルド処理の効率を向上させることができる。
【0028】
なお、リビルド制御部11は、複数の論理記憶領域についてそれぞれ1つ以上の部分処理の実行をアクセス処理部12に指示することで、複数の論理記憶領域のそれぞれについてのリビルド処理をアクセス処理部12に並列に実行させることもできる。この場合、複数の論理記憶領域についてのリビルド処理全体を高速化することができる。
【0029】
また、リビルド制御部11は、アクセス処理部12に実行を指示する部分処理の数を調整することで、ストレージ制御装置10におけるリビルド処理による処理負荷を増減することができる。さらに、複数の論理記憶領域のそれぞれについてのリビルド処理を並列に実行する場合には、アクセス処理部12に対して実行を指示する部分領域の数を論理記憶領域ごとに変えることにより、論理記憶領域ごとのリビルド処理負荷のバランスを調整することもできる。
【0030】
次に、第2の実施の形態として、リビルド処理負荷の調整機能を備えたストレージ制御装置を含むストレージシステムの例について説明する。
〔第2の実施の形態〕
図2は、第2の実施の形態に係るストレージシステムの全体構成例を示す図である。図2に示すストレージシステム100は、CE(Controller Enclosure)200と、DE(Drive Enclosure)300とを含む。また、CE200には、ホスト装置400が接続されている。
【0031】
CE200は、CM(Controller Module)201,202を備える。CM201,202のそれぞれは、ホスト装置400からのI/O(In/Out)要求に応じて、DE300内の記憶装置に対するデータの読み書きを行う。CM201,202は、DE300内の記憶装置によって実現される物理記憶領域をRAID(Redundant Arrays of Inexpensive Disks)によって管理し、これらの物理記憶領域に対するアクセスを制御する。
【0032】
なお、CM201,202は、例えばルータなどを介して互いに接続されていてもよい。また、CMは、CE200内に1つのみ設けられてもよいし、3つ以上設けられてもよい。ただし、CMが複数設けられることで、DE300に対するアクセス制御系統が冗長化され、アクセス制御処理の信頼性が向上する。
【0033】
DE300は、CM201,202からのアクセス制御対象となる複数の記憶装置を備える。本実施の形態のDE300は、記憶装置としてHDDを備えるディスクアレイ装置である。なお、DE300が備える記憶装置としては、SSDなどの他の種類の不揮発性記憶装置を使用することもできる。また、CE200には、複数のDE300が接続されていてもよい。
【0034】
ホスト装置400は、ユーザの操作に応じて、CM201,202に対して、DE300内のHDDへのアクセスを要求する。ホスト装置400は、例えば、ユーザの操作に応じて、CM201,202のいずれかを通じて、DE300内のHDDからのデータの読み出しや、DE300内のHDDに対するデータの書き込みを行うことができる。
【0035】
なお、CE200内のCM201,202は、ともに同様の構成を有し、同様の処理を実行可能である。そこで、以下、CM201についてのみ説明し、CM202についての説明を省略する。
【0036】
図3は、CMのハードウェア構成例を示す図である。
CM201は、CPU211によって装置全体が制御されている。CPU211には、RAM(Random Access Memory)212および複数の周辺機器が、バス217を介して接続されている。RAM212は、CM201の主記憶装置として使用され、CPU211に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
【0037】
CPU211には、周辺機器の例として、SSD213、入力I/F(インタフェース)214、ホストI/F215およびディスクI/F216が接続されている。
SSD213は、CM201の二次記憶装置として使用され、CPU211によって実行されるプログラムやその実行に必要な各種のデータなどを記憶する。なお、二次記憶装置としては、例えば、HDDなどの他の種類の不揮発性記憶装置が使用されてもよい。
【0038】
入力I/F214には、操作キーなどを備える入力装置214aが接続されている。入力I/F214は、入力装置214aに対する操作入力に応じた信号をCPU211に出力する。
【0039】
ホストI/F215は、ホスト装置400とCM201との間でデータを送受信するインタフェース処理を実行する。ホストI/F215とホスト装置400とは、例えば、FC(Fibre Channel)規格に従って通信する。
【0040】
ディスクI/F216は、DE300とCM201との間でデータを送受信するインタフェース処理を実行する。ディスクI/F216とDE300とは、例えば、SAS(Serial Attached SCSI,SCSI:Small Computer System Interface)規格に従って通信する。
【0041】
図4は、CMの処理機能の構成例を示すブロック図である。
CM201は、RAID制御部221、ホストI/O制御部222、リカバリ制御部223、構成制御部224、ホストI/O監視部225、バッファ監視部226およびエラー監視部227を備える。これらの各部の処理は、例えば、CM201のCPU211が所定のプログラムを実行することで実現される。
【0042】
RAID制御部221は、ホストI/O制御部222またはリカバリ制御部223からの要求に応じて、DE300内のHDDにアクセスする。RAID制御部221は、DE300内のHDDにアクセスする際に、アクセス先の領域に対して設定されたRAIDに関する設定情報に基づいてアクセス制御を行う。このような設定情報は、SSD213に記録された後述するRAID管理テーブルに登録されている。RAID管理テーブルには、RLUごとに、RAIDレベル、RLUを構成するHDDの数などの設定情報が記録されている。なお、RLUとは、DE300に搭載された複数のHDDの物理記憶領域を組み合わせて構成される論理記憶領域であり、RAIDグループとも呼ばれる。
【0043】
例えば、RAID制御部221は、ホストI/O制御部222からあるRLUに対するデータの書き込み要求を受けると、RAID管理テーブル241に設定された書き込み先RLUについての情報に基づいて、データが冗長化されるように書き込み処理を行う。例としてディスク数「6」のRAID−5で制御されるRLUに書き込みを行うものとすると、RAID制御部221は、ホストI/O制御部222から受信したデータを分割し、連続する5個の分割データとそれらに基づくパリティとを、6台のHDDにおける同一ストライプ番号の領域に分散させて記録する。
【0044】
ホストI/O制御部222は、ホスト装置400から、RLUに対するI/O要求(読み出し要求または書き込み要求)を受け付ける。ホストI/O制御部222は、受け付けたI/O要求に応じたI/O処理の実行を、RAID制御部221に依頼する。なお、以下、ホスト装置400からの要求に応じてRAID制御部221で実行されるI/O処理を、「ホストI/O処理」と呼ぶ。
【0045】
例えば、ホストI/O制御部222は、ホスト装置400から読み出し要求を受けた場合、読み出し元のRLUおよびアドレスをRAID制御部221に通知して、読み出しを依頼する。ホストI/O制御部222は、RAID制御部221によって読み出されたデータを、ホスト装置400に送信する。一方、ホストI/O制御部222は、ホスト装置400から受信した書き込みデータと、書き込み先のRLUおよびアドレスとをRAID制御部221に出力して、書き込みを依頼する。RAID制御部221によって書き込み処理が正常に実行されると、ホストI/O制御部222は、ホスト装置400に対して正常応答する。
【0046】
リカバリ制御部223は、リビルド処理、冗長コピー処理およびコピーバック処理の実行をRAID制御部221に依頼して、それらの処理の進捗状況を管理する。リビルド処理は、RLUに属するいずれかのHDDが故障した場合に、同じRLUに属する故障していないHDDからデータを読み出し、読み出したデータを基に故障したHDDのデータを再構築して、予備用のHDD(ホットスペア)、または、故障したHDDを交換した交換後のHDDに書き込む処理である。冗長コピー処理は、RLUに属するいずれかのHDDから故障の予兆を検出した場合に、故障の予兆が検出されたHDDを切り離すことなく、リビルド処理と同様の読み出し、データ再構築および書き込みを実行する処理である。コピーバック処理は、故障したHDDが新たなHDDに交換された場合に、リビルド処理または冗長コピー処理によってホットスペアに格納されたデータを、交換後のHDDに書き戻す処理である。以下、これらのリビルド処理、冗長コピー処理およびコピーバック処理を総称して、「リビルド系処理」と呼ぶ。
【0047】
リカバリ制御部223は、あるRLUについてのリビルド系処理を実行させる際、リビルド系処理の対象となる記憶領域を一定サイズごとに分割する。そして、リカバリ制御部223は、一定サイズごとのデータの読み出しと、読み出したデータに基づく書き込みとの組み合わせからなる部分処理を、順次RAID制御部221に依頼することで、RLUについてのリビルド系処理を実行させる。
【0048】
例えば、RAID−4,5,6にいずれかで制御されるRLUの場合、部分処理は、リビルド系処理を一定ストライプ数の領域ごとに実行した処理となる。また、RAID−1で制御されるRLUの場合、部分処理は、ミラーリングする各記憶領域における一定サイズの領域ごとに、リビルド系処理を実行した処理となる。
【0049】
なお、リビルド系処理のうち、リビルド処理および冗長コピー処理を依頼する際には、RAID制御部221に依頼される部分処理には、データの読み出しと書き込みとの間に、必要に応じてデータの再構築処理が含まれる。
【0050】
リカバリ制御部223は、上記のように、1つのRLUについてのリビルド系処理を実行させる際に、RAID制御部221に対して、一定サイズごとの部分処理の実行を同じ期間中に複数依頼し、依頼した複数の部分処理をRAID制御部221に並列に実行させることができる。このように、部分処理を並列に実行させることで、リビルド系処理に要する時間を短縮することができる。
【0051】
また、リカバリ制御部223は、複数のRLUについてのリビルド系処理をRAID制御部221に並列に実行することもできる。この場合には、あるRLUについての1つ以上の部分処理と、他のRLUについての1つ以上の部分処理とが、RAID制御部221によって並列に実行される。
【0052】
さらに、リカバリ制御部223は、RLUごとの部分処理の多重度を、RLUごとに設定された優先度、ホストI/O処理の実行状況、および、CM201内のメモリリソースの使用状況に応じて可変する。これにより、ホストI/O処理の性能に対する影響をできるだけ抑制しつつ、リビルド系処理を高速化する。
【0053】
構成制御部224は、RAID管理テーブル241を用いてRLUの構成を管理する。例えば、構成制御部224は、エラー監視部227によってHDDの故障が検出された場合に、RAID管理テーブル241を更新することで、故障したHDDを今まで属していたRLUから切り離すとともに、そのRLUにホットスペアを組み込む。また、構成制御部224は、HDDの故障が検出された場合には、リカバリ制御部223に対してリビルド処理の実行を要求する。
【0054】
ホストI/O監視部225は、仕掛かり中のホストI/O処理(処理が完了していないホストI/O処理)を監視する。例えば、ホストI/O制御部222は、ホスト装置400からのI/O要求コマンドをコマンドキューに登録し、対応するI/O処理が完了したI/O要求コマンドをコマンドキューから消去する。ホストI/O監視部225は、コマンドキューを監視することで、仕掛かり中のホストI/O処理を判別する。なお、コマンドキューは、例えば、CM201のRAM212に記憶される。ホストI/O監視部225は、例えば、仕掛かり中のホストI/O処理の有無を、アクセス先のRLUごとにリカバリ制御部223に通知することができる。
【0055】
バッファ監視部226は、バッファ領域231の使用状況を監視する。バッファ領域231は、少なくともRAID制御部221、ホストI/O制御部222およびリカバリ制御部223によってバッファとして使用される記憶領域であり、RAM212内に確保される。バッファ監視部226は、例えば、バッファ領域231の使用状況をリカバリ制御部223に通知することができる。
【0056】
エラー監視部227は、DE300内のHDDについてのエラー発生状況を監視する。例えば、エラー監視部227は、RAID制御部221によるHDDへのアクセスの際に発生したエラーの回数を、アクセス先のHDDごとに、CM201のSSD213に記録しておく。また、エラー監視部227は、故障判定のためのHDDへのアクセスをRAID制御部221に定期的に依頼することで、エラーの発生を検知してもよい。
【0057】
エラー監視部227は、あるHDDにおけるエラー発生回数が所定のしきい値Th1を超えると、そのHDDでの故障発生の予兆を検出したことを構成制御部224に通知する。この場合、構成制御部224は、故障発生の予兆が検出されたHDDが属するRLUについての冗長コピー処理の実行を、リカバリ制御部223に要求する。また、エラー監視部227は、あるHDDにおけるエラー発生回数がしきい値Th1より大きいTh2を超えると、そのHDDで故障が発生したと判定して、構成制御部224に故障発生を通知する。この場合、構成制御部224は、故障発生の検出されたHDDが属するRLUについての冗長コピー処理の実行を、リカバリ制御部223に要求する。
【0058】
ところで、例えば、ホストI/O制御部222とRAID制御部221との間、構成制御部224とリカバリ制御部223との間、リカバリ制御部223とRAID制御部221との間では、「制御ブロック」と呼ばれる制御データを用いて、処理要求および応答が行われる。図4に示した制御ブロックプール232は、制御ブロックの登録用に確保されたRAM212上の記憶領域である。
【0059】
制御ブロックには、依頼する処理を識別するための処理名や、処理の対象を識別するための情報などが格納される。例えば、ホストI/O制御部222は、RAID制御部221に読み出し処理を依頼する場合には、制御ブロックを確保し、確保した制御ブロック内に、読み出しを示す処理名、読み出し元を指定するアドレスなどを登録する。ホストI/O制御部222は、確保した制御ブロックを識別するIDをRAID制御部221に通知することで、その制御ブロックで指示される処理を依頼する。
【0060】
ここで、図5は、リビルド系処理の実行時に生成される制御ブロックの構成例を示す図である。
リカバリ制御部223に対してリビルド系処理の実行を依頼する際に構成制御部224が生成する制御ブロックは、ID、RLU番号、処理名、読み出し元ディスク番号および書き込み先ディスク番号を含む。IDは、制御ブロックを識別するための番号である。RLU番号は、処理対象のRLUを示す。処理名は、依頼する処理の種類を示す。読み出し元ディスク番号は、依頼する処理における読み出し元のHDDを示す。書き込み先ディスク番号は、依頼する処理における書き込み先のHDDを示す。
【0061】
構成制御部224は、制御ブロックプール232に確保した制御ブロックに対して、ID、RLU番号、処理名、読み出し元ディスク番号および書き込み先ディスク番号を設定する。そして、構成制御部224は、リカバリ制御部223に対してIDを通知して、処理名が示す処理の実行を要求する。なお、IDは、制御ブロックプール232における制御ブロックのアドレスであってもよい。要求を受けたリカバリ制御部223は、IDが指し示す制御ブロックに応じた処理を行う。また、制御ブロックに応じた処理を完了したリカバリ制御部223は、その制御ブロックのIDを構成制御部224に通知するとともに、処理が完了したことを通知する。
【0062】
一方、RAID制御部221に対してリビルド系処理のうちの部分処理の実行を依頼する際にリカバリ制御部223が生成する制御ブロックは、上記のID、RLU番号、処理名、読み出し元ディスク番号および書き込み先ディスク番号に加えて、部分処理の対象とする領域を示すアドレス(LBA)を含む。なお、図5の例では、アドレスとして対象範囲の先頭LBAと最後尾のLBAとが設定されているが、他の例として、先頭LBAと、対象範囲の大きさを示すブロック数とが設定されてもよい。
【0063】
リカバリ制御部223は、ID、RLU番号、処理名、読み出し元ディスク番号、書き込み先ディスク番号およびアドレスが設定された制御ブロックのIDを、RAID制御部221に通知して、処理名が示す処理の実行を要求する。要求を受けたRAID制御部221は、IDが指し示す制御ブロックに応じた処理を行う。また、制御ブロックに応じた処理を完了したRAID制御部221は、その制御ブロックのIDをリカバリ制御部223に通知するとともに、処理が完了したことを通知する。
【0064】
なお、リカバリ制御部223からRAID制御部221に通知される制御ブロックには、リカバリ制御部223自身が獲得した制御ブロックと、構成制御部224が獲得した制御ブロックに対してリカバリ制御部223がアドレスを追記した制御ブロックとがある。後者の場合、構成制御部224が獲得してリカバリ制御部223に通知する制御ブロックのIDと、リカバリ制御部223がRAID制御部221に通知する制御ブロックのIDとは、同一になる。
【0065】
図6は、制御ブロックに基づいて部分処理が多重実行される際の処理例を示すシーケンス図である。この図6では例として、1つのRLUについてのリビルド処理が実行されるものとする。また、リビルド処理対象のRLUは、RAID−4,5などに基づき、パリティを用いてデータが冗長化されるものとする。
【0066】
構成制御部224は、制御ブロックBL1を確保し、この制御ブロックBL1をリカバリ制御部223に通知することで、所定のRLUについてのリビルド処理の実行をリカバリ制御部223に依頼する(タイミングT11)。依頼を受けたリカバリ制御部223は、後述する手順に従って、該当RLUについて許容される部分処理の多重度を判定する。ここで言う多重度とは、該当RLUについていくつの部分処理を並列に実行可能かを示すものである。
【0067】
該当RLUに対して多重度「4」が許容されていると判定したものとすると、リカバリ制御部223は、RAID制御部221に対して4つの制御ブロックを通知して、各制御ブロックに基づく部分処理の実行を依頼する。図6の例では、リカバリ制御部223は、まず、3つの制御ブロックBL2,BL3,BL4を新規に獲得し(それぞれタイミングT12,T13,T14)、制御ブロックBL2,BL3,BL4に対して、リビルド処理対象とする領域のアドレスを対象領域全体の先頭から順に設定する。例えば、制御ブロックBL2にはアドレス「0x0000〜0x03ff」が設定され、制御ブロックBL3にはそれに続くアドレス「0x0400〜0x07ff」が設定され、制御ブロックBL4にはそれに続くアドレス「0x0800〜0x0bff」が設定される。なお、「0x“XXXX”」は、“XXXX”が16進数で表記されていることを示す。
【0068】
リカバリ制御部223は、アドレスを設定した制御ブロックBL2,BL3,BL4をRAID制御部221に通知し、制御ブロックBL2,BL3,BL4のそれぞれに基づく部分処理の実行を依頼する(それぞれタイミングT15,T16,T17)。さらに、リカバリ制御部223は、4つ目の制御ブロックとして、構成制御部224から通知された制御ブロックBL1に対して、次のリビルド処理対象領域を示すアドレス「0x0c00〜0x0fff」を設定する。そして、リカバリ制御部223は、アドレスを設定した制御ブロックBL1をRAID制御部221に通知して、制御ブロックBL1に基づく部分処理の実行を依頼する(タイミングT18)。
【0069】
RAID制御部221は、リカバリ制御部223から通知された制御ブロックBL2,BL3,BL4,BL1にそれぞれ基づく部分処理を、並列に実行する。それぞれの部分処理では、(1)RLUに属するHDDのうち故障していないHDDにおける、アドレスによって指定された領域からのデータ読み出し処理、(2)読み出したデータを基に、故障したHDDにおける同じアドレスに対応する領域に記憶されていたデータを、計算によって再構築する処理、(3)再構築されたデータを、ホットスペアにおける同じアドレスに対応する領域に書き込む処理が、順次実行される。
【0070】
例えば、(1)での読み出し元のHDDと(3)での書き込み先のHDDとは異なるので、ある制御ブロックに基づいて(3)の書き込み処理が実行されている間に、別の制御ブロックに基づいて(1)の読み出し処理を並列に実行することができる。また、ある制御ブロックに基づく(1)の読み出し処理が完了すると、同じ制御ブロックに基づく(2)の再構築処理を開始するとともに、別の制御ブロックに基づいて次の領域からの(1)の読み出し処理を続けて開始することができる。このように、RAID制御部221に対して複数の制御ブロックを通知して、各制御ブロックに基づく部分処理を並列に実行させることで、RLUについてのリビルド系処理全体に要する処理時間を短縮することができる。
【0071】
また、1つの部分処理では、(1)での読み出し元アドレスと(3)での書き込み先アドレスとは同じになる。このように、読み出し元と書き込み先とが同じ処理を1つの部分処理に含め、そのような部分処理の並列処理をRAID制御部221に依頼するようにしたことで、並列処理を依頼する際のリカバリ制御部223の処理手順を単純化することができ、また、依頼を受けたRAID制御部221での処理も単純化される。
【0072】
なお、例えば、RLUに設定されたRAIDレベルがRAID−1の場合、(1)の読み出し処理では、RLUに属する故障していないHDDのうち1台からデータが読み出され、(2)の再構築処理がスキップされ、(3)の書き込み処理では、1台のHDDから読み出されたデータがそのままホットスペアに書き込まれる。また、コピーバック処理が要求されている場合、(1)の読み出し処理では、ホットスペアにおけるアドレスによって指定された領域からデータが読み出され、(2)の再構築処理がスキップされ、(3)の書き込み処理では、ホットスペアから読み出されたデータが、交換されたHDDにおける同じアドレスに対応する領域にそのまま書き込まれる。
【0073】
以上説明したように、構成制御部224からリビルド系処理の実行要求を受けたリカバリ制御部223は、その時点で該当RLUに対して許容されている多重度を判定し、判定した多重度分の数の制御ブロックをRAID制御部221に通知する。これにより、RAID制御部221による部分処理が、リビルド系処理の実行が要求された時点での適切な多重度で、並列に実行されるようになる。
【0074】
続いて、RAID制御部221は、制御ブロックに基づく部分処理の実行を完了すると、その制御ブロックのIDをリカバリ制御部223に通知して、処理が完了したことを通知する。例えば、図6において、制御ブロックBL2に基づく部分処理が完了すると、RAID制御部221は、リカバリ制御部223に対して制御ブロックBL2を通知し、処理完了を通知する(タイミングT19)。
【0075】
処理完了通知を受けたリカバリ制御部223は、後述する手順に従って、その時点で該当RLUに対して許容されている多重度を判定する。図6の例では多重度「4」であるものとすると、リカバリ制御部223は、制御ブロックBL2に設定されたアドレスを、RAID制御部221に部分処理を依頼していない処理対象領域のうちの先頭領域のアドレス「0x1000〜0x13ff」に書き換える。そして、リカバリ制御部223は、アドレスを書き換えた制御ブロックBL2をRAID制御部221に通知して、制御ブロックBL2に基づく部分処理の実行を依頼する(タイミングT21)。依頼を受けたRAID制御部221は、制御ブロックBL2に基づく部分処理の実行を開始する。
【0076】
ただし、仮に、制御ブロックBL2についての処理完了通知を受けたとき(タイミングT19)、該当RLUに対して許容されている多重度が「3」であった場合には、リカバリ制御部223は、さらなる部分処理を実行させることが不可能と判断して、制御ブロックBL2を解放する。これにより、RAID制御部221で並列に実行される、該当RLUについての部分処理の数が「3」に減少する。
【0077】
一方、例えば、制御ブロックBL1についての処理完了通知を受けたとき(例えばタイミングT22)、該当RLUに対して許容されている多重度が「5」であった場合には、リカバリ制御部223は、新たな制御ブロック(「制御ブロック5」とする)を獲得する。そして、リカバリ制御部223は、新規に獲得した制御ブロック5に次の処理対象領域のアドレス「0x1000〜0x13ff」を設定し、制御ブロック5をRAID制御部221に通知して、部分処理の実行を依頼する。さらに、リカバリ制御部223は、元の制御ブロックBL2のアドレスを、次の処理対象領域のアドレス「0x1400〜0x17ff」に書き換え、この制御ブロックBL2をRAID制御部221に通知して、部分処理の実行を依頼する。これにより、RAID制御部221で並列に実行される、該当RLUについての部分処理の数が「5」に増加する。
【0078】
このように、リカバリ制御部223は、RAID制御部221から応答を受けるたびに、その時点で該当RLUに対して許容されている多重度を判定する。そして、リカバリ制御部223は、多重度の判定結果に応じて、RAID制御部221に並列に実行させる部分処理の数を調整する。従って、RAID制御部221による部分処理の実行が完了するたびに、RAID制御部221で並列に実行される部分処理の数が最適化される。
【0079】
ところで、図6に示したように、RAID制御部221で実行される部分処理は、リカバリ制御部223から実行を依頼された順に完了するとは必ずしも限らない。例えば図6において、制御ブロックBL4に基づく部分処理が完了したとき(タイミングT20)、制御ブロックBL3に基づく部分処理は完了していない。このような場合に、制御ブロックBL3に基づく部分処理が完了するまで、次の制御ブロックに基づく部分処理を実行させないようにすると、待ち時間が発生する分だけ、リビルド系処理に要する時間が長くなってしまう。
【0080】
そこで、リカバリ制御部223は、RAID制御部221から応答を受けたとき、他の部分処理の待ち合わせを行わずに、その時点で許容されている多重度を判定し、部分処理をさらに実行させることが可能であれば、RAID制御部221に対して制御ブロックを通知して、次の領域についての部分処理を開始させる。
【0081】
図6の例では、リカバリ制御部223は、制御ブロックBL4に基づく部分処理の完了通知を受けると(タイミングT20)、制御ブロックBL3に基づく部分処理の完了を待ち合わせることなく、その時点で許容されている多重度を判定する。そして、例えば多重度が「4」である場合、リカバリ制御部223は、制御ブロックBL4のアドレスを次の領域を示すアドレス「0x1400〜0x17ff」に書き換え、この制御ブロックBL4をRAID制御部221に通知して、部分処理の実行を依頼する。
【0082】
このような処理により、他の部分処理より長い処理時間を要する部分処理の影響を受けることなく、処理対象領域に対するリビルド系処理を迅速に進めることができ、リビルド系処理全体に要する処理時間が短縮できる。
【0083】
また、制御ブロックには、構成制御部224からリビルド系処理の実行が要求された初期段階でのRAID制御部221への制御ブロックの通知順とは関係なく、あくまでRAID制御部221へ制御ブロックが通知された順に、処理対象領域の先頭側から順番にアドレスが設定される。これにより、リカバリ制御部223は、制御ブロックの通知順と、通知した制御ブロックに基づく部分処理の完了順との対応を管理する必要がなく、部分処理が完了した順にアドレスを順次設定していけばよくなる。このため、リカバリ制御部223での処理手順が簡略化され、その処理負荷が軽減される。これとともに、同一RLUに対応する読み出し元および書き込み先の各HDDにおいては、読み出しアドレスおよび書き込みアドレスが、途中で順序が変わることなく連続的に指定されるようになる。このため、各HDDでの読み出し速度および書き込み速度を高速化することができる。
【0084】
次に、図7は、リビルド系処理を実行する際に参照される主な情報の例を示す図である。
CM201内のSSD213には、RAID管理テーブル241と、多重度設定テーブル242とが記憶される。RAID管理テーブル241は、RLUに関する設定情報を保持する。RAID管理テーブル241に対する情報の登録や更新は構成制御部224によって行われ、RAID管理テーブル241は、RAID制御部221およびリカバリ制御部223に参照される。多重度設定テーブル242は、RAIDの構成ごとにあらかじめ決められた多重度上限値(構成別多重度上限値)を保持する。多重度設定テーブル242は、RLUごとに獲得可能な制御ブロック数を判定する際に、リカバリ制御部223によって参照される。
【0085】
ここで、図8は、RAID管理テーブルに登録される情報の例を示す図である。
RAID管理テーブル241には、構成制御部224によって、RLUごとにレコード241aが登録される。各レコード241aには、対応するRLUを識別するRLU番号が付与されている。また、各レコード241aには、「RAIDレベル」、「ディスク数」、「ディスク番号」、「HSディスク番号」および「リビルド優先度」が登録される。
【0086】
「RAIDレベル」は、該当RLUに対して設定されたRAIDレベルを示す。「ディスク数」は、該当RLUに属するHDDの数を示す。「ディスク番号」は、該当RLUに属するHDDの識別番号を示す。「ディスク番号」は、「ディスク数」に設定された数だけ、レコード241aに登録される。
【0087】
「ディスク番号」によって識別されるHDDのそれぞれには、「ディスク状態」が登録される。「ディスク状態」は、該当HDDの動作状態を示す。「ディスク状態」には、例えば、「正常」、「故障」および「HSに退避中」のいずれかが設定される。「正常」は、該当HDDが正常に動作していることを示し、「故障」は、該当HDDが故障していることを示す。「HSに退避中」は、該当HDDに記録されていたデータについてのホットスペアへのリビルド処理が完了し、そのホットスペアを組み込んだ状態で該当RLUが運用されていることを示す。なお、「ディスク状態」は、例えば、RAID管理テーブル241とは別に用意されてHDDごとの情報を保持するディスク管理テーブルに登録されてもよい。
【0088】
「HSディスク番号」は、リビルド処理または冗長コピー処理の実行前に設定され、これらの処理においてデータの書き込み先とするホットスペアのHDDを識別する番号を示す。
【0089】
構成制御部224は、エラー監視部227からHDDの故障通知を受けると、故障したHDDが属するRLUのレコード241aを抽出し、故障したHDDについての「ディスク状態」を「正常」から「故障」に更新することで、故障したHDDをRLUから切り離す。さらに、構成制御部224は、ホットスペアとして使用するHDDのディスク番号を「HSディスク番号」に設定する。構成制御部224は、このような設定変更を行ったレコード241aに対応するRLUについて、リビルド処理やコピーバック処理をリカバリ制御部223に要求する。一方、構成制御部224は、エラー監視部227から故障の予兆が検出されたHDDが通知された場合、通知されたHDDについての「ディスク状態」を「正常」にしたまま(すなわち、通知されたHDDをRLUに組み込んだ状態のまま)、通知されたHDDが属するRLUについての冗長コピー処理をリカバリ制御部223に要求する。
【0090】
なお、RAID管理テーブル241は、RAID制御部221からも参照される。例えば、RAID制御部221は、ホストI/O処理を行う際に、I/O処理対象のRLUに対応するRAID管理テーブル241のレコード241aを参照する。RAID制御部221は、参照先のレコード241aに設定されたRAIDレベル、ディスク数およびディスク番号に応じたI/O処理を実行する。
【0091】
また、RAID制御部221は、リカバリ制御部223からリビルド系処理の依頼を受けたとき、リカバリ制御部223から通知された制御ブロックに記載されたRLU番号に対応する、RAID管理テーブル241のレコード241aを参照する。RAID制御部221は、参照先のレコード241aに登録されたRAIDレベルと、リカバリ制御部223から通知された制御ブロックに設定された読み出し元ディスク番号および書き込み先ディスク番号とを基に、実行すべき処理内容の詳細を判別する。例えば、リビルド処理が依頼された場合、RAID制御部221は、レコード241aに登録されたRAIDレベルに基づいて、データの再構築計算を行うか否かを判別するなど、RAIDの構成に応じた処理を実行する。
【0092】
次に、図8のRAID管理テーブル241において、「リビルド優先度」は、該当RLUに対して付与されたリビルド系処理の優先度を示す。この「リビルド優先度」は、ユーザによる操作入力に応じて任意に設定可能である。「リビルド優先度」には、例えば、「高」または「低」のいずれかが設定される。「リビルド優先度」は、RLUごとに許容される部分処理の多重度を判定する際に、リカバリ制御部223によって参照される。
【0093】
後述するように、リカバリ制御部223は、リカバリ系処理対象のRLUに対する仕掛かり中のホストI/Oがある場合や、CM201での処理負荷が高い場合(メモリリソースの使用量が所定量以上の場合)に、リカバリ系処理対象のRLUに対応付けられた「リビルド優先度」を読み込む。「リビルド優先度」が「高」の場合、リカバリ制御部223は、多重度設定テーブル242に基づき、該当RLUの構成に応じた多重度の上限値を認識し、認識した多重度の上限値にできるだけ近づくように部分処理の多重度を設定する。一方、「リビルド優先度」が「低」の場合、リカバリ制御部223は、該当RLUについての部分処理を多重実行しないように制御する。
【0094】
図9は、多重度設定テーブルに登録される情報の例を示す図である。
多重度設定テーブル242には、RAIDの構成に応じてあらかじめ決められた、1RLUにおける部分処理の多重度の上限値(構成別多重度上限値)が登録される。図9では例として、RLUに設定されるRAIDレベルと、RLUに属するディスク数との組み合わせによって、RAIDの構成が識別され、これらの組み合わせごとに構成別多重度上限値が登録されている。
【0095】
構成別多重度上限値は、各RAID構成が適用されたときのホストI/O処理性能に対する影響度合いが同程度になるように、RAID構成ごとにあらかじめ算出される。例えば、RLUに属するディスク数が同じ場合、パリティを使用しないRAID−1より、パリティを使用するRAID−5,6の方が、処理負荷が高いと考えられる。このため、RLUに属するディスク数が同じ場合、RAID−1についての構成別多重度上限値より、RAID−4,5についての構成別多重度上限値を小さくする。また、RAIDレベルが同じ場合には、ディスク数が多いほど処理負荷が高いと考えられる。このため、RAIDレベルが同じ場合、ディスク数が多いほど構成別多重度上限値を小さくする。
【0096】
以下、図7に戻って説明する。
SSD213には、リカバリ制御部223が参照する値として、多重度全体上限値M1と、RLU内多重度上限値M2とがあらかじめ記憶される。多重度全体上限値M1は、CM201全体で実行可能な、リビルド系処理についての部分処理の上限多重度を示す。RLU内多重度上限値M2は、1RLUに対して実行可能な、リビルド系処理についての部分処理の上限多重度を示す。このRLU内多重度上限値M2としては、多重度全体上限値M1より小さい値が設定される。
【0097】
また、リカバリ制御部223は、それぞれRAM212に記憶された多重度調整係数C1、現在の多重度M3および完了アドレスADを参照しながら、処理を実行する。
多重度調整係数C1は、リビルド系処理を実行中の全RLUに対して共通に適用される係数であり、部分処理の多重度を決定する際に、各RLUについての部分処理の多重度の合計値が多重度全体上限値M1を超えないように調整するために使用される。なお、多重度調整係数C1は、0より大きく、1以下の値をとり、例えば0.1などの所定間隔で増減される。また、例えば、CM201が起動した際、あるいは、CM201の起動後にリカバリ制御部223の処理が開始された際に、多重度調整係数C1には初期値「1」が設定される。
【0098】
現在の多重度M3および完了アドレスADは、ともにリビルド系処理を実行中のRLUごとに個別に設定される値である。現在の多重度M3は、該当RLUについて現在実行中の部分処理数(各RLUに対して現在確保されている制御ブロックの数)を示す。完了アドレスADは、該当RLUについてのリビルド系処理対象の全領域のうち、部分処理の実行が完了している最後尾領域を示すアドレスである。
【0099】
次に、図10は、2つのRLUについてのリビルド系処理が実行されている状態を示す図である。以下、図10を例として参照しながら、リカバリ制御部223による部分処理の多重度調整手順について説明する。
【0100】
図10では例として、RLU番号「00」のRLU(以下、「RLU#00」とする)についてのリビルド処理と、RLU番号「01」のRLU(以下、「RLU#01」とする)についてのコピーバック処理とが実行されている状態を示す。
【0101】
図6で説明した手順に従い、構成制御部224は、制御ブロックBL1aを通知することで、リカバリ制御部223に対してRLU#00についてのリビルド処理を要求する。例としてRAL#00に対して多重度「3」が許容されているものとすると、リカバリ制御部223は、制御ブロックBL1a,BL2a,BL3aをRAID制御部221に通知することで、RAID制御部221に各制御ブロックに基づく部分処理を並列に実行させる。
【0102】
また、構成制御部224は、制御ブロックBL1bを通知することで、リカバリ制御部223に対してRLU#01についてのコピーバック処理を要求する。例としてRLU#01に対して多重度「3」が許容されているものとすると、リカバリ制御部223は、制御ブロックBL1b,BL2b,BL3bをRAID制御部221に通知することで、RAID制御部221に各制御ブロックに基づく部分処理を並列に実行させる。
【0103】
以上のように、リカバリ制御部223からRAID制御部221に対して制御ブロックBL1a,BL2a,BL3a,BL1b,BL2b,BL3bが通知されることで、RAID制御部221は、制御ブロックBL1a,BL2a,BL3a,BL1b,BL2b,BL3bのそれぞれに基づく部分処理を並列に実行する。このように、RAID制御部221は、1RLUについての部分処理だけでなく、複数のRLUについての部分処理も並列に実行可能である。
【0104】
リカバリ制御部223は、基本的に、各RLUについて、RLU内多重度上限値M2を超えない範囲で部分処理の多重度を設定する。これとともに、リカバリ制御部223は、リビルド系処理を実行中の全RLUに設定された多重度の合計値が、多重度全体上限値M1を超えないように制御する。上記の図10の状態では、RLU#00についての現在の多重度M3_1は「3」であり、RLU#01についての現在の多重度M3_2は「3」である。リカバリ制御部223は、(M3_1+M3_2)の値が多重度全体上限値M1を超えないように、部分処理の多重度を設定する。
【0105】
リカバリ制御部223は、次のような方法で、部分処理の多重度を動的に調整する。
リカバリ制御部223は、ホストI/O処理の状況に応じて、部分処理の多重度を調整する。ホストI/O処理の状況は、ホストI/O監視部225によってRLUごとに監視される。リカバリ制御部223は、リビルド系処理を実行中のRLUについて、仕掛かり中のホストI/O処理が存在する場合には、存在しない場合より、このRLUについての部分処理の多重度を低下させる。これにより、リビルド系処理の影響によってホストI/O処理の速度ができるだけ低下しないように、多重度が調整される。
【0106】
また、リカバリ制御部223は、CM201内のメモリリソースの使用状況に応じて、部分処理の多重度を調整する。CM201内のメモリリソースの使用状況は、バッファ監視部226によって監視される。バッファ領域231は、少なくともRAID制御部221、ホストI/O制御部222およびリカバリ制御部223によって共通に使用される。このことから、リカバリ制御部223は、例えば、あるRLUについてのリビルド系処理に許容される多重度を判定する際に、同じRLUについての仕掛かり中のホストI/O処理が存在しない場合でも、バッファ領域231の使用量を検出することで、他のRLUについてのホストI/O処理などによる処理負荷の大きさを判断できる。リカバリ制御部223は、バッファ領域231の使用量が所定のしきい値を超えている場合には、しきい値以下である場合より、リビルド系処理を実行中の全RLUについての部分処理の多重度を低下させる。
【0107】
リカバリ制御部223は、例えば図10のRLU#00に対する仕掛かり中のホストI/O処理が存在せず、かつ、バッファ領域231の使用量がしきい値以下である場合には、RLU#00に設定する多重度を、RLU内多重度上限値M2に近づけるように制御する。RLU#00に対する仕掛かり中のホストI/O処理が存在せず、かつ、バッファ領域231の使用量がしきい値以下である場合には、RLU#00についてのリビルド系処理がホストI/O処理の性能に及ぼす影響を考慮する必要がないと考えられる。このため、このような条件下では、RLU#00のRAID構成によらず一定のRLU内多重度上限値M2を、多重度の上限値とすることができる。
【0108】
一方、リカバリ制御部223は、RLU#00に対する仕掛かり中のホストI/O処理が存在する場合や、バッファ領域231の使用量がしきい値を超えている場合には、RLU#00についての多重度の上限値を、多重度設定テーブル242から取得した構成別多重度上限値に抑制する。このような条件下では、RLU#00におけるRAID構成に応じて、RLU#00についての多重度の上限値が設定されることになる。このとき設定される多重度の上限値は、多重度全体上限値M1より低い値となる。
【0109】
また、RLU#00に対する仕掛かり中のホストI/O処理が存在する場合や、バッファ領域231の使用量がしきい値を超えている場合に、RLU#00に設定されたリビルド優先度が「低」である場合には、「高」である場合よりさらに多重度の上限値が低く設定される。本実施の形態では、リビルド優先度が「低」である場合、多重度が「1」に設定されて、そのRLUについての部分処理が並列に実行されなくなる。このようにリビルド優先度に応じて多重度が調整されることで、高い優先度が付与されたRLUほど高い多重度が設定され、リビルド系処理の速度が速くなるように制御される。
【0110】
ここで、例として、RLU内多重度上限値M2が「3」であり、多重度全体上限値M1が「6」以上であるものとする。この条件下で、バッファ領域231の使用量がしきい値以下で、かつ、RLU#00,#01の両方についての仕掛かり中のホストI/O処理が存在しない場合には、図10のように、RLU#00,#01の両方についての多重度が「3」に設定される。この場合、ホストI/O処理に対する影響を考慮する必要がないため、RLU#00,#01のそれぞれについてのリビルド系処理が最も高速に実行されるように制御される。
【0111】
次に、上記の状態から、例として、制御ブロックBL3aに基づくRLU#00の部分処理と、制御ブロックBL3bに基づくRLU#01の部分処理とが、連続して終了した場合を考える。なお、RLU#00,#01の両方とも、リビルド優先度は「高」であるものとする。
【0112】
例えば、制御ブロックBL3aに基づく部分処理の終了時と、制御ブロックBL3bに基づく部分処理の終了時の両方において、バッファ領域231の使用量がしきい値を超えている場合、リカバリ制御部223は、RLU#00,#01の両方について、多重度をRLU内多重度上限値M2より低い値(すなわち、多重度設定テーブル242から取得した、各RLUの構成に対応する値)に抑制する。
【0113】
このように、バッファ領域231の使用量がしきい値を超えている場合には、どのRLUについても、多重度がRLU内多重度上限値M2より小さい値になるように制御される。すなわち、CM201全体の処理負荷が高いと考えられる場合には、リビルド系処理を実行している全RLUについての多重度を一律に低下させて、リビルド系処理全体の処理負荷を軽減することで、CM201全体の処理負荷を軽減する。
【0114】
一方、制御ブロックBL3aに基づく部分処理の終了時と、制御ブロックBL3bに基づく部分処理の終了時の両方において、バッファ領域231の使用量がしきい値以下のままである場合には、次のような処理になる場合がある。まず、制御ブロックBL3aに基づく部分処理の終了時に、RLU#00に対する仕掛かり中のホストI/O処理があった場合、リカバリ制御部223は、RLU#00についての多重度を、RLU内多重度上限値M2より低い値(すなわち、多重度設定テーブル242から取得した、RLU#00の構成に対応する値)に抑制する。例えば、リカバリ制御部223は、制御ブロックBL3aを解放することによって、RLU#00についての多重度を「3」から「2」に低下させる。これにより、仕掛かり中のホストI/O処理性能に与える影響が少なくなるように、RLU#00についてのリビルド系処理速度が抑制され、その処理負荷が軽減される。なお、RLU#00のリビルド優先度が「低」であれば、RLU#00についての多重度はさらに低く設定される。
【0115】
その後、制御ブロックBL3bに基づく部分処理が終了したとき、RLU#01に対する仕掛かり中のホストI/O処理がない場合には、リカバリ制御部223は、RLU#01についての多重度を、RLU内多重度上限値M2である「3」のまま低下させない。仮に、制御ブロックBL3bに基づく部分処理が終了した時点で、RLU#00に対する仕掛かり中のホストI/O処理があった場合でも、リカバリ制御部223は同様に、RLU#01についての多重度を「3」のまま維持する。
【0116】
このように、リビルド系処理の実行中にホストI/O処理も並行して実行されている状況では、リビルド系処理を実行中のRLUのうち、ホストI/O処理が実行されているRLUについての多重度を優先的に低下させる。これにより、ホストI/O処理とリビルド系処理とを合わせた処理による負荷が特定のRLUに偏らないように制御される。
【0117】
ところで、上記のように、リカバリ制御部223は、ホストI/O処理の状況、バッファ領域231の使用状況、RLUごとのリビルド優先度に応じて、およびRLUにおけるRAID構成に応じて、RLUに設定する多重度の上限値を認識する。しかしながら、リビルド系処理を実行中の全RLUに、認識した多重度の上限値を適用してしまうと、全RLUについて設定された多重度の合計値が、多重度全体上限値M1を超えてしまう場合があり得る。そこで、リカバリ制御部223は、各RLUが設定可能な多重度の上限値に対して、全RLUに共通の多重度調整係数C1を乗算することで、全RLUに設定される多重度を均等な割合で低下させ、多重度の合計値を多重度全体上限値M1以内に収めるようにする。
【0118】
例えば、図10において、バッファ領域231の使用量がしきい値以下であり、かつ、RLU#00,#01の両方に対する仕掛かり中のホストI/O処理もないものとする。この場合、リカバリ制御部223は、RLU#00,#01のそれぞれに設定し得る多重度の上限値が、RLU内多重度上限値M2(=3)であると認識する。しかしながら、仮に多重度全体上限値M1が「4」であった場合、RLU#00,#01のそれぞれの多重度を「3」に設定してしまうと、多重度の加算値が「6」となって、多重度全体上限値M1を超えてしまう。
【0119】
この場合、RLU#00,#01に設定する多重度をそれぞれM4_1,M4_2とすると、リカバリ制御部223は、M4_1=M4_2=3として、C1×(M4_1+M4_2)の値が多重度全体上限値M1(=4)以下になるように、多重度調整係数C1を調整する。この例では、C1=2/3と求められるので、リカバリ制御部223は、RLU#00,#01のそれぞれについての多重度を、設定し得る上限値「3」にC1=2/3を乗じた「2」に設定する。
【0120】
このように多重度調整係数C1を用いることにより、RLUごとに認識した多重度の上限値の比率をできるだけ保ったまま、多重度の合計値を低下させて、CM201の処理負荷が一定以上にまで増大しないように制御することができる。
【0121】
リカバリ制御部223は、構成制御部224からリビルド系処理の実行を要求されるごと、および、RAID制御部221から部分処理の完了通知を受けるごとに、その時点での状況に応じて、上記のような多重度の調整を行う。
【0122】
次に、上記の調整処理についてフローチャートを用いて説明する。
図11〜図13は、部分処理の実行を依頼する際のリカバリ制御部の処理手順の例を示すフローチャートである。
【0123】
この図11〜図13の処理は、構成制御部224から制御ブロックの通知を受けてリビルド系処理の実行が依頼されたとき、または、RAID制御部221から制御ブロックの通知を受けて部分処理の実行完了を通知する応答を受けたときに、通知された制御ブロックを参照しながら実行される。ただし、後者の場合(RAID制御部221からの応答を受けた場合)の詳細な処理については、後の図14を用いてあらためて説明する。
【0124】
[ステップS11]リカバリ制御部223は、通知された制御ブロックに設定されたRLUに対する仕掛かり中のホストI/O処理がないかを、ホストI/O監視部225に問い合わせる。リカバリ制御部223は、該当RLUに対する仕掛かり中のホストI/O処理があった場合には、ステップS12の処理を実行する一方、仕掛かり中のホストI/O処理がない場合には、ステップS14の処理を実行する。
【0125】
[ステップS12]リカバリ制御部223は、バッファ領域231の使用量をバッファ監視部226に問い合わせる。リカバリ制御部223は、バッファ監視部226からの応答に基づき、バッファ領域231の使用量が所定のしきい値以下の場合には、ステップS13の処理を実行する一方、しきい値を超えている場合には、ステップS14の処理を実行する。
【0126】
[ステップS13]該当RLUに対する仕掛かり中のホストI/O処理がなく(S11:Yes)、バッファ領域231の使用量がしきい値以下である(S12:Yes)場合、リカバリ制御部223は、該当RLUについての多重度設定値M4に、あらかじめ設定されたRLU内多重度上限値M2を設定する。なお、多重度設定値M4は、この図11〜図13の処理で使用される内部変数であり、例えばRAM212に記憶される。
【0127】
[ステップS14]該当RLUに対する仕掛かり中のホストI/O処理があった場合(S11:No)、または、バッファ領域231の使用量がしきい値を超えていた場合(S12:No)、リカバリ制御部223は、該当RLUに対応するRAID管理テーブル241のレコード241aを参照し、該当RLUに設定されたリビルド優先度を読み出す。リカバリ制御部223は、リビルド優先度が「高」の場合(S14:Yes)、ステップS15の処理を実行する一方、リビルド優先度が「低」の場合(S14:No)、ステップS16の処理を実行する。
【0128】
[ステップS15]該当RLUに設定されたリビルド優先度が「高」の場合(S14:Yes)、リカバリ制御部223は、ステップS14で参照したレコード241aから、該当RLUについてのRAID構成(RAIDレベルおよび使用ディスク数)を読み出す。リカバリ制御部223は、多重度設定テーブルから、RAID構成に対応する構成別多重度上限値を読み込む。リカバリ制御部223は、多重度設定値M4に、多重度設定テーブルから読み込んだ構成別多重度上限値を設定する。
【0129】
[ステップS16]該当RLUに設定されたリビルド優先度が「低」の場合(S14:No)、リカバリ制御部223は、多重度設定値M4に、多重度の下限値「1」を設定する。
【0130】
なお、ステップS16では、多重度設定値M4として、例えば、ステップS15の手順で得られる構成別多重度上限値から一定数を減算した数(ただし、下限値を「1」とする)、または、構成別多重度上限値を所定割合で低下させた数の整数値を設定してもよい。
【0131】
また、例えば、リビルド優先度を3段階以上の値として設定できるようにしてもよい。この場合、リカバリ制御部223は、例えば、ステップS14〜S16の代わりに、多重度設定値M4として、構成別多重度上限値を上限として、リビルド優先度に応じた値を設定してもよい。例えば、多重度設定値M4として、リビルド優先度が「高」の場合には構成別多重度上限値を、リビルド優先度が「中」の場合には構成別多重度上限値の1/2の値の整数値を、リビルド優先度が「低」の場合には「1」を、それぞれ設定してもよい。
【0132】
[ステップS17]リカバリ制御部223は、該当RLUについての多重度設定値M4に、現在設定されている多重度調整係数C1を乗じた(M4×C1)を計算する。これとともに、リカバリ制御部223は、リビルド系処理を実行中の他のRLUについての現在の多重度M3を、RAM212から読み込む。リカバリ制御部223は、リビルド系処理を実行中の他のRLUそれぞれについての(M3×C1)を計算し、他のRLUそれぞれについての(M3×C1)と上記の(M4×C1)との合計値N1を計算する。
【0133】
なお、本実施の形態では、RLUごとの現在の多重度M3をRAM212に設定しておくが、例えば、処理名としてリビルド系処理が設定された制御ブロックをRLUごとに探索することで、RLU別の現在の多重度M3を取得することもできる。
【0134】
[ステップS18]リカバリ制御部223は、算出した合計値N1が多重度全体上限値M1より大きいかを判定する。リカバリ制御部223は、N1がM1より大きい場合(S18:Yes)、ステップS19の処理を実行する一方、N1がM1以下の場合(S18:No)、ステップS21の処理を実行する。
【0135】
[ステップS19]合計値N1が多重度全体上限値M1より大きい場合(S18:Yes)、多重度調整係数C1を減少させて、リビルド系処理を実行中の全RLUについての多重度を低下させる必要がある。リカバリ制御部223は、まず、多重度調整係数C1が所定の下限値であるかを判定する。なお、多重度調整係数C1の下限値は、0より大きく1未満の任意の値に設定される。リカバリ制御部223は、C1が下限値である場合(S19:Yes)、ステップS26の処理を実行する一方、C1が下限値より大きい場合(S19:No)、ステップS20の処理を実行する。
【0136】
[ステップS20]リカバリ制御部223は、多重度調整係数C1を1段階減少させる。この後、ステップS17に戻り、減少されたC1を用いて(M4×C1)および他のRLUそれぞれについての(M3×C1)が計算され、それらの算出結果に基づく合計値N1が計算される。
【0137】
[ステップS21]ステップS17で求められた合計値N1が多重度全体上限値M1以下である場合(S18:No)、リカバリ制御部223は、多重度調整係数C1を増加させて、全体の多重度を高くすることができるかを試す。リカバリ制御部223は、まず、現在設定されているC1が上限値「1」未満であるかを判定する。リカバリ制御部223は、C1が上限値未満である場合(S21:Yes)、ステップS22の処理を実行する一方、C1が上限値に達している場合(S21:No)、ステップS26の処理を実行する。
【0138】
[ステップS22]リカバリ制御部223は、現在設定されている多重度調整係数C1を1段階増加させた値を、変数C2に設定する。なお、変数C2は、この図11〜図13の処理で使用される内部変数であり、例えばRAM212に記憶される。
【0139】
[ステップS23]リカバリ制御部223は、多重度調整係数C1の代わりに変数C2を用いて、ステップS17と同様の計算を行い、他のRLUそれぞれについての(M3×C2)と(M4×C2)との合計値N2を計算する。
【0140】
[ステップS24]リカバリ制御部223は、算出した合計値N2が多重度全体上限値M1より大きいかを判定する。リカバリ制御部223は、N2がM1より大きい場合(S24)、ステップS26の処理を実行する一方、N2がM1以下の場合(S24:No)、ステップS25の処理を実行する。
【0141】
[ステップS25]合計値N2が多重度全体上限値M1以下に収まっている場合、多重度調整係数C1をステップS22で設定した変数C2と同一値に設定することが可能になっているので、リカバリ制御部223は、C1を1段階増加させて、変数C2に一致させる。この後、ステップS21に戻り、増加させたC1が上限値に達したかが判定される。
【0142】
[ステップS26]該当RLUに設定すべき適正な多重度が、(M4×C1)であることが決定される。
例えば、合計値N1が多重度全体上限値M1より大きい場合(S18:Yes)には、N1がM1以下に収まるようになるまで、多重度調整係数C1が徐々に引き下げられていく(S20)。そして、N1がM1以下に収まるようになったとき(S18:No)、C1は上限値「1」より小さくなり(S21:Yes)、かつ、C1より1段階大きいC2に基づくN2はM1より大きくなってしまうことから(S24:Yes)、現在のC1が適正であることになる。
【0143】
また、合計値N1が多重度全体上限値M1以下である場合(S18:No)には、C1が上限値「1」に達するか(S21:No)、あるいは、C1より1段階大きいC2に基づくN2がM1より大きくなる(S24:Yes)まで、C1が徐々に引き上げられる(S25)。これにより、C1が適正な値に設定される。
【0144】
以上のように、該当RLUに設定すべき多重度が決定されると、リカバリ制御部223は、(M4×C1)を、該当RLUについての適正多重度M5として設定する。なお、適正多重度M5は、この図11〜図13の処理で使用される内部変数であり、例えばRAM212に記憶される。リカバリ制御部223は、次のステップS27以降で、該当RLUの実際の多重度を適正多重度M5に一致させるための処理を実行する。
【0145】
[ステップS27]リカバリ制御部223は、現在参照中の制御ブロックが、リカバリ制御部223自身が獲得したものかを判定する。なお、リカバリ制御部223は、例えば、構成制御部224から制御ブロックの通知を受けたときに、その制御ブロックのIDをRAM212に記憶しておくことで、ステップS27の判定処理を実行可能である。
【0146】
リカバリ制御部223は、参照中の制御ブロックが、自身が獲得したものである場合(S27:Yes。例えば、図6の制御ブロックBL2〜BL4のいずれかである場合)、ステップS28の処理を実行する。一方、リカバリ制御部223は、参照中の制御ブロックが、構成制御部224から通知された制御ブロックである場合(S27:No。例えば、図6の制御ブロックBL1の場合)、ステップS31の処理を実行する。
【0147】
[ステップS28]リカバリ制御部223は、該当RLUについての現在の多重度M3が、適正多重度M5より大きいかを判定する。リカバリ制御部223は、M3がM5より大きい場合(S28:Yes)、ステップS29の処理を実行する一方、M3がM5以下である場合(S28:No)、ステップS32の処理を実行する。
【0148】
[ステップS29]該当RLUについての現在の多重度M3が適正多重度M5より大きい場合(S28:Yes)、該当RLUについての実際の多重度を低下させる必要がある。このため、リカバリ制御部223は、まず、該当RLUについての現在の多重度M3を「1」だけデクリメントする。
【0149】
[ステップS30]リカバリ制御部223は、現在参照している制御ブロックを解放して、この制御ブロックに対応する処理を終了する。
[ステップS31]リカバリ制御部223は、該当RLUについての現在の多重度M3が、適正多重度M5より小さいかを判定する。リカバリ制御部223は、M3がM5より小さい場合(S31:Yes)、ステップS36の処理を実行する一方、M3がM5以上である場合(S31:No)、ステップS32の処理を実行する。
【0150】
[ステップS32]ステップS28で、該当RLUについての現在の多重度M3が適正多重度以下である場合(S28:No)、または、ステップS31で、該当RLUについての現在の多重度M3が適正多重度以上である場合(S31:No)には、該当RLUについての実際の多重度が適正化されていると判断できる。この場合、リカバリ制御部223は、該当RLUについてのリビルド系処理対象領域のうち、RAID制御部221に対して部分処理を依頼していない最も先頭側の領域を示すアドレスを判定する。リカバリ制御部223は、判定したアドレスを、参照中の制御ブロックにおけるアドレスの領域に、次の処理対象として上書き設定する。
【0151】
具体的には、リカバリ制御部223は、該当RLUが設定されている制御ブロックを探索し、探索された制御ブロックに設定されたアドレスの中から、リビルド系処理対象の領域における最も後ろ側(先頭とは反対側)の領域を示すアドレスを抽出する。そして、リカバリ制御部223は、抽出したアドレスが示す領域の次の領域を示すアドレスを、参照中の制御ブロックにおけるアドレスの領域に上書き設定する。
【0152】
[ステップS33]リカバリ制御部223は、参照している制御ブロックに基づく現在の処理が、構成制御部224からの依頼に応じた処理かを判定する。リカバリ制御部223は、現在の処理が構成制御部224からの依頼に応じた処理である場合(S33:Yes。)、ステップS34の処理を実行する。一方、リカバリ制御部223は、現在の処理が、RAID制御部221からの応答に応じた処理である場合(S33:No)、ステップS35の処理を実行する。
【0153】
[ステップS34]現在の処理が構成制御部224からの依頼に応じた処理である場合(S33:Yes)、RAID制御部221に依頼する、参照している制御ブロックに基づく部分処理は、現在の多重度M3に反映されていない。このため、リカバリ制御部223は、該当RLUに対応する現在の多重度M3を「1」だけインクリメントする。
【0154】
なお、ステップS33(Yes),S34の順に処理が実行されるケースとしては、例えば、図6のタイミングT18でのリカバリ制御部223の処理がある。一方、ステップS33でNoと判定されるケースとしては、例えば、図6のタイミングT17や、タイミングT23でのリカバリ制御部223の処理がある。
【0155】
[ステップS35]リカバリ制御部223は、ステップS32でアドレスを更新した、参照中の制御ブロックのIDを、RAID制御部221に通知して、その制御ブロックに基づく部分処理の実行を依頼する。これにより、参照していた制御ブロックに対応する処理が終了される。
【0156】
[ステップS36]ステップS31で、該当RLUについての現在の多重度M3が適正多重度より小さい場合(S31:Yes)、該当RLUについての多重度を高くすることができる。この場合、リカバリ制御部223は、新規に制御ブロックを獲得する。このとき、獲得した制御ブロックのRLU番号、処理名、読み出し元ディスク番号および書き込み先ディスク番号に、参照している制御ブロックに設定されたものと同じ情報を設定する。
【0157】
[ステップS37]リカバリ制御部223は、ステップS32と同様の手順で、該当RLUについてのリビルド系処理対象領域のうち、RAID制御部221に対して部分処理を依頼していない最も先頭側の領域を示すアドレスを判定する。リカバリ制御部223は、判定したアドレスを、新規に獲得した制御ブロックにおけるアドレスの領域に、次の処理対象として上書き設定する。
【0158】
[ステップS38]リカバリ制御部223は、新規に獲得した制御ブロックのIDをRAID制御部221に通知して、その制御ブロックに基づく部分処理の実行を依頼する。
[ステップS39]リカバリ制御部223は、該当RLUについての現在の多重度M3を「1」だけインクリメントする。この後、ステップS31の処理に戻る。
【0159】
なお、ステップS39の処理は、例えば、ステップS31の実行後から、ステップS38の処理を実行して次にステップS31の実行を開始するまでの間の任意のタイミングで実行可能である。
【0160】
図13に示した処理では、ステップS27(Yes),S28(Yes),S29,S30の順の処理が行われた場合、該当RLUについての多重度が減少して、該当RLUについてのリビルド系処理の速度が低下する。一方、ステップS27(No),S31(Yes)の順に処理が行われた場合、その後にステップS36〜S39の処理が実行されることで、該当RLUについての多重度が増加して、該当RLUについてのリビルド系処理の速度が高められる。
【0161】
なお、図13の処理例では、参照中の制御ブロックが構成制御部224から通知されたものである場合のみ、新規の制御ブロックを獲得して多重度を増加させるものとした。しかしながら、例えば、参照中の制御ブロックがリカバリ制御部223自身が獲得したものである場合でも、新規の制御ブロックを獲得して多重度を増加させることができるようにしてもよい。
【0162】
次に、図14は、RAID制御部からの応答を受けたときのリカバリ制御部の処理手順の例を示すフローチャートである。
[ステップS51]リカバリ制御部223は、RAID制御部221から、リビルド系処理の依頼に対する応答を受ける。このとき、リカバリ制御部223は、実行が完了した部分処理に対応する制御ブロックのIDの通知を受ける。以後、リカバリ制御部223は、RAID制御部221から通知されたIDに対応する制御ブロックを参照しながら処理を行う。
【0163】
[ステップS52]リカバリ制御部223は、RAID制御部221から通知された制御ブロックに設定されたRLUについて、部分処理の実行が完了した領域の最後尾を示すアドレスを、RAM212内の完了アドレスADに設定する。
【0164】
具体的には、リカバリ制御部223は、該当RLUが設定されている制御ブロックを探索し、探索された制御ブロックに設定されたアドレスの中から、リビルド系処理対象の領域における最も先頭側の領域を示すアドレスを抽出する。リカバリ制御部223は、抽出したアドレスが示す領域より1ブロック分先頭側の領域のアドレスを、該当RLUについての完了アドレスADとしてRAM212に記録する。
【0165】
[ステップS53]リカバリ制御部223は、該当RLUについてのリビルド系処理対象の全領域について、RAID制御部221に対する部分処理の依頼が済んだかを判定する。
【0166】
具体的には、リカバリ制御部223は、該当RLUが設定されている制御ブロックを探索し、探索された制御ブロックに設定されたアドレスの中から、リビルド系処理対象の領域における最も後ろ側(先頭とは反対側)の領域を示すアドレスを抽出する。リカバリ制御部223は、抽出したアドレスが示す領域が、リビルド系処理対象の領域の最後尾である場合に、全対象領域についての部分処理の依頼が済んでいると判定する。
【0167】
リカバリ制御部223は、全対象領域についての部分処理が依頼済みである場合(S53:Yes)、ステップS54の処理を実行する。一方、リカバリ制御部223は、部分処理を依頼していない領域が存在する場合(S53:No)には、図11のステップS11を起点として図11〜図13に示した処理を実行する。すなわち、リカバリ制御部223は、リビルド系処理対象の全領域について部分処理を依頼するまでの間、RAID制御部221からの応答を受けるたびに、該当RLUについての多重度が適正かを判定し、多重度の調整を行う。
【0168】
[ステップS54]リビルド系処理対象の全領域について部分処理が依頼済みである場合(S53:Yes)、リカバリ制御部223は、リビルド系処理対象の全領域について部分処理が完了したかを判定する。リカバリ制御部223は、RAM212に設定された、該当RLUについての完了アドレスADが、リビルド系処理対象領域の最後尾を示す場合に、全領域について部分処理が完了したと判定して、ステップS55の処理を実行する(S54:Yes)。
【0169】
一方、リカバリ制御部223は、リビルド系処理対象の全領域について部分処理が完了していない場合(S54:No)、全領域について部分処理が完了するまで待ち合わせる。この場合、リカバリ制御部223は、同じRLUについての他の制御ブロックに基づく部分処理の完了通知をRAID制御部221から受けたとき、この制御ブロックを参照しながら図14の処理を実行したときに、ステップS52の処理によって完了アドレスADを更新する。ステップS54では、リカバリ制御部223は、他の制御ブロックを参照した処理によって、完了アドレスADがリビルド系処理対象領域の最後尾を示すようになったとき、ステップS55の処理を開始する。
【0170】
[ステップS55]リカバリ制御部223は、現在参照中の制御ブロックが、リカバリ制御部223自身が獲得したものかを判定する。リカバリ制御部223は、参照中の制御ブロックが、自身が獲得したものである場合(S55:Yes。例えば、図6の制御ブロックBL2〜BL4のいずれかである場合)、参照中の制御ブロックに基づく処理を終了する。この場合、参照されていた制御ブロックは、構成制御部224から通知された制御ブロックを参照した、後述するステップS57の処理によって、解放される。
【0171】
一方、リカバリ制御部223は、参照中の制御ブロックが、構成制御部224から通知された制御ブロックである場合(S55:No。例えば、図6の制御ブロックBL1の場合)、ステップS56の処理を実行する。この場合、リカバリ制御部223は、構成制御部224から通知された制御ブロックを参照しながら、ステップS56以降の処理によって、該当RLUについてのリビルド系処理の完了処理を行い、構成制御部224に対して処理の完了を通知する。
【0172】
[ステップS56]リカバリ制御部223は、参照中の制御ブロックと同じRLU番号および同じ処理名が設定された、リカバリ制御部223自身が獲得した制御ブロックがあるかを判定する。該当RLUについての現在の多重度M3が2以上の場合、構成制御部224から通知された制御ブロックの他に、同じRLUについてのリカバリ制御部223自身が獲得した制御ブロックが存在することになる。
【0173】
リカバリ制御部223は、自身が獲得した制御ブロックがある場合(S56:Yes)、ステップS57の処理を実行する一方、自身が獲得した制御ブロックがない場合(S56:No)、ステップS58の処理を実行する。
【0174】
[ステップS57]リカバリ制御部223は、自身が獲得した制御ブロックを解放する。これにより、参照中の制御ブロック以外に、同じRLU番号および同じ処理名が設定された制御ブロックが存在しない状態となる。
【0175】
[ステップS58]リカバリ制御部223は、該当RLUについての現在の多重度M3を、「0」にリセットする。
[ステップS59]リカバリ制御部223は、参照中の制御ブロックから読み出し元ディスク番号および書き込み先ディスク番号を削除する。リカバリ制御部223は、各ディスク番号を削除した制御ブロックのIDを構成制御部224に通知して、制御ブロックの処理名が示すリビルド系処理の実行完了を通知する応答を行う。
【0176】
応答を受けた構成制御部224は、リカバリ制御部223から通知されたIDに対応する制御ブロックを解放して、リカバリ制御部223に依頼したリビルド系処理を完了させる。
【0177】
以上説明した第2の実施の形態によれば、バッファ領域231の使用量、RLUごとの仕掛かり中のホストI/O処理の有無、および、RLUごとのリビルド優先度に応じて、リビルド系処理における部分処理の多重度が、RLUごとに最適化される。これにより、ホストI/O処理性能に与える影響をできるだけ抑制しながら、リビルド系処理を高速化することができる。
【0178】
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) 記憶装置群と、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、前記論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、前記第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、を有するストレージ制御装置と、
を備え、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とするストレージシステム。
【0179】
(付記2) 前記リビルド制御部は、前記記憶装置群に含まれる記憶装置のうち互いに異なる複数の記憶装置の記憶領域によってそれぞれ構成され、データが異なる記憶装置に冗長化されるようにデータ記録がそれぞれ制御される複数の論理記憶領域について、それぞれ1つ以上の前記部分処理の実行を前記アクセス処理部に指示し、
前記アクセス処理部は、前記複数の論理記憶領域のそれぞれについての1つ以上の前記部分処理の実行指示に応じて、前記複数の論理記憶領域のそれぞれについての前記部分処理を並列に実行する、
ことを特徴とする付記1記載のストレージシステム。
【0180】
(付記3) 前記アクセス処理部は、ホスト装置からの要求に応じて前記複数の論理記憶領域の少なくとも1つにアクセスするホストアクセス処理を、前記リビルド処理と並列に実行し、
前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域に対する前記ホストアクセス処理が実行されていない場合と比較して、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させる、
ことを特徴とする付記2記載のストレージシステム。
【0181】
(付記4) 前記ストレージ制御装置は、データを冗長化するための論理記憶領域の仕様ごとに、前記ホストアクセス処理に与える影響度合いが略均等になるように前記部分処理の多重度が設定された多重度設定値記憶部を有し、
前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域の仕様に対応する多重度を前記多重度設定値記憶部から取得し、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を前記多重度設定値記憶部から取得した多重度に設定する、
ことを特徴とする付記3記載のストレージシステム。
【0182】
(付記5) 前記リビルド制御部は、実行中の前記リビルド処理の対象の論理記憶領域と同じ論理記憶領域に対する前記ホストアクセス処理が実行されていない場合、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を、異なる仕様の論理記憶領域間で共通にあらかじめ定められた多重度に設定することを特徴とする付記4記載のストレージシステム。
【0183】
(付記6) 前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域に対して設定された優先度が低いほど、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする付記3記載のストレージシステム。
【0184】
(付記7) 前記リビルド制御部は、前記ストレージ制御装置におけるバッファ使用量が所定のしきい値を超えている場合、前記バッファ使用量が前記しきい値以下の場合と比較して、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする付記2または3記載のストレージシステム。
【0185】
(付記8) 前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了するたびに、前記バッファ使用量が前記しきい値を超えているかを判定し、前記バッファ使用量が前記しきい値を超えている場合、前記バッファ使用量が前記しきい値以下である場合と比較して、実行が完了した前記部分処理が処理対象とする論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする付記7記載のストレージシステム。
【0186】
(付記9) 前記ストレージ制御装置は、データを冗長化するための論理記憶領域の仕様ごとに、前記ホストアクセス処理に与える影響度合いが略均等になるように前記部分処理の多重度が設定された多重度設定値記憶部を有し、
前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了したとき、前記バッファ使用量が前記しきい値を超えている場合には、前記バッファ使用量が前記しきい値以下である場合と比較して、実行が完了した前記部分処理が処理対象とする前記論理記憶領域の仕様に対応する多重度を前記多重度設定値記憶部から取得し、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を前記多重度設定値記憶部から取得した多重度に設定する、
ことを特徴とする付記8記載のストレージシステム。
【0187】
(付記10) 前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了したとき、前記バッファ使用量が前記しきい値を超えている場合には、前記バッファ使用量が前記しきい値以下である場合と比較して、実行が完了した前記部分処理が処理対象とする論理記憶領域についての前記部分処理の多重度を、異なる仕様の論理記憶領域間で共通にあらかじめ定められた多重度に設定することを特徴とする付記9記載のストレージシステム。
【0188】
(付記11) 前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了したとき、前記バッファ使用量が前記しきい値を超えている場合には、前記バッファ使用量が前記しきい値以下である場合と比較して、実行が完了した前記部分処理が処理対象とする論理記憶領域に対して設定された優先度が低いほど、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする付記8記載のストレージシステム。
【0189】
(付記12) 前記アクセス処理部は、ホスト装置からの要求に応じて前記複数の論理記憶領域の少なくとも1つにアクセスするホストアクセス処理を、前記リビルド処理と並列に実行し、
前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了するたびに、実行が完了した前記部分処理が処理対象とする論理記憶領域に対する前記ホストアクセス処理が前記アクセス処理部で実行されているか否か、または、前記ストレージ制御装置におけるバッファ使用量が所定のしきい値を超えているか否かに応じて、実行が完了した前記部分処理が処理対象とする論理記憶領域についての前記部分処理の多重度を調整するとともに、実行中の前記部分処理の総数が所定の上限値以下でかつ当該上限値に近づくように、各論理記憶領域についての前記部分処理の多重度を一定割合で増減することを特徴とする付記2記載のストレージシステム。
【0190】
(付記13) 前記リビルド制御部は、前記論理記憶領域についての前記リビルド処理が完了するまでの間、前記アクセス処理部に実行を指示した複数の前記部分処理のうちのいずれかが完了すると、次の未処理の前記分割範囲についての前記部分処理の実行を前記アクセス処理部に指示することを特徴とする付記1記載のストレージシステム。
【0191】
(付記14) 前記アクセス処理部は、
前記リビルド処理によって前記予備用記憶装置に書き込まれたデータを前記第2の記憶装置に書き戻すコピーバック処理、または、前記複数の論理記憶領域のいずれかについての前記リビルド処理を、当該論理記憶領域に割り当てられた前記第1の記憶装置を当該論理記憶領域から切り離さずに実行する冗長コピー処理についても、前記部分処理を単位として実行し、
前記リビルド制御部から受け付けた、前記冗長コピー処理または前記コピーバック処理に含まれる複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とする付記1記載のストレージシステム。
【0192】
(付記15) 記憶装置群に含まれる記憶装置に対するアクセスを制御するストレージ制御装置において、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、
前記論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、前記第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、
を有し、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とするストレージ制御装置。
【0193】
(付記16) 記憶装置群に含まれる記憶装置に対するアクセスを制御するストレージ制御装置におけるストレージ制御方法であって、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、前記第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して実行するとともに、複数の前記部分処理を並列に実行する、
ことを特徴とするストレージ制御方法。
【0194】
(付記17) 前記記憶装置群に含まれる記憶装置のうち互いに異なる複数の記憶装置の記憶領域によってそれぞれ構成され、データが異なる記憶装置に冗長化されるようにデータ記録がそれぞれ制御される複数の論理記憶領域について、それぞれ1つ以上の前記部分処理を並列に実行することで、前記複数の論理記憶領域のそれぞれについての前記部分処理を並列に実行する、
ことを特徴とする付記16記載のストレージ制御方法。
【0195】
(付記18) 前記ストレージ制御装置は、ホスト装置からの要求に応じて前記複数の論理記憶領域の少なくとも1つにアクセスするホストアクセス処理を、前記リビルド処理と並列に実行可能であり、
前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が実行されている場合、当該論理記憶領域に対する前記ホストアクセス処理が実行されていない場合と比較して、当該論理記憶領域を処理対象として実行する前記部分処理の多重度を低下させる、
ことを特徴とする付記17記載のストレージ制御方法。
【0196】
(付記19) 前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が実行中である場合、データを冗長化するための論理記憶領域の仕様ごとに、前記ホストアクセス処理に与える影響度合いが略均等になるように前記部分処理の多重度が設定された多重度設定値記憶部を参照し、前記ホストアクセス処理および前記リビルド処理の両方が実行中である論理記憶領域の仕様に対応する多重度を前記多重度設定値記憶部から取得し、当該論理記憶領域を処理対象として実行する前記部分処理の多重度を前記多重度設定値記憶部から取得した多重度に設定する、
ことを特徴とする付記18記載のストレージ制御方法。
【0197】
(付記20) 前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が実行中である場合、当該論理記憶領域に対して設定された優先度が低いほど、当該論理記憶領域を処理対象として実行する前記部分処理の多重度を低下させることを特徴とする付記18記載のストレージ制御方法。
【符号の説明】
【0198】
1 ストレージシステム
10 ストレージ制御装置
11 リビルド制御部
12 アクセス処理部
21〜25 記憶装置
A1_1,A1_2,A2_1,A2_2,A3_1,A3_2,A4_1,A4_2,A5_1,A5_2 領域
P1,P2 部分処理
【技術分野】
【0001】
本発明は、ストレージシステム、ストレージ制御装置およびストレージ制御方法に関する。
【背景技術】
【0002】
近年、HDD(Hard Disk Drive)などの記憶装置を複数用いたストレージシステムが広く使用されている。このようなストレージシステムでは、一般的に、RAID(Redundant Arrays of Inexpensive Disks)技術を用いて、データが2つ以上の記憶装置に冗長化されるような記録制御が行われることで、記録されるデータの安全性が高められている。
【0003】
また、データが冗長化されたストレージシステムにおいて、記憶装置が故障すると、故障した記憶装置に記憶されていたデータが再構築されて、ホットスペア(Hot Spare)と呼ばれる予備用記憶装置などの他の記憶装置に格納される。このような処理は、一般に「リビルド処理」と呼ばれる。リビルド処理が実行されることで、データの冗長度が回復する。
【0004】
ストレージシステムでは、ホスト装置からの要求に基づく記憶装置へのI/O(In/Out)処理(以下、「ホストI/O処理」と呼ぶ)を停止させることなく、リビルド処理をホストI/O処理と同時に実行することが求められている。この場合、ホストI/O処理の性能をできるだけ低下させずにリビルド処理が実行されることが望ましいが、その一方で、リビルド処理に要する時間を短縮したいという要求もある。
【0005】
このような問題に鑑みて、ホストI/O処理とリビルド処理との負荷バランスを制御することが考えられている。例えば、ホストI/O処理の仕掛かり数とリビルド処理の仕掛かり数とを管理し、ホストI/O処理の仕掛かり数に応じてリビルド処理の実行要求数を制御するようにしたストレージシステムがある。また、リビルド処理の1回の処理サイズを、ホストI/O処理の有無に応じて変更するようにしたストレージシステムもある。さらに、ホスト装置からのI/O要求が所定時間到来しない場合には、リビルド処理におけるあるアドレスについての書き込み処理と、別のアドレスについての読み出し処理とを並行して実行するようにしたストレージシステムもある。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特許第4322068号公報
【特許文献2】特開2007−94994号公報
【特許文献3】特許第4472917号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
近年のストレージシステムにおける記憶領域の大容量化に伴い、リビルド処理に要する時間が増大する傾向にある。このため、リビルド処理に要する時間をより短縮することが課題となっている。
【0008】
1つの側面では、本発明は、リビルド処理を高速化できるようにしたストレージシステム、ストレージ制御装置およびストレージ制御方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
上記目的を達成するために、記憶装置群とストレージ制御装置とを備えるストレージシステムが提供される。ストレージ制御装置は、記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、記憶装置群に含まれる予備用記憶装置または第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理をアクセス処理部に実行させるリビルド制御部と、を有する。また、リビルド制御部は、リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、この分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、アクセス処理部に対して部分処理の実行を指示する。アクセス処理部は、リビルド制御部から受け付けた複数の部分処理の実行指示に応じて、指示された複数の部分処理を並列に実行する。
【0010】
また、上記目的を達成するために、上記のストレージシステムと同様の処理を実行するストレージ制御装置およびストレージ制御方法が提供される。
【発明の効果】
【0011】
1態様によれば、リビルド処理を高速化できる。
【図面の簡単な説明】
【0012】
【図1】第1の実施の形態に係るストレージシステムの構成例を示す図である。
【図2】第2の実施の形態に係るストレージシステムの全体構成例を示す図である。
【図3】CMのハードウェア構成例を示す図である。
【図4】CMの処理機能の構成例を示すブロック図である。
【図5】リビルド系処理の実行時に生成される制御ブロックの構成例を示す図である。
【図6】制御ブロックに基づいて部分処理が多重実行される際の処理例を示すシーケンス図である。
【図7】リビルド系処理を実行する際に参照される主な情報の例を示す図である。
【図8】RAID管理テーブルに登録される情報の例を示す図である。
【図9】多重度設定テーブルに登録される情報の例を示す図である。
【図10】2つのRLUについてのリビルド系処理が実行されている状態を示す図である。
【図11】部分処理の実行を依頼する際のリカバリ制御部の処理手順の例を示すフローチャート(その1)である。
【図12】部分処理の実行を依頼する際のリカバリ制御部の処理手順の例を示すフローチャート(その2)である。
【図13】部分処理の実行を依頼する際のリカバリ制御部の処理手順の例を示すフローチャート(その3)である。
【図14】RAID制御部からの応答を受けたときのリカバリ制御部の処理手順の例を示すフローチャートである。
【発明を実施するための形態】
【0013】
以下、実施の形態について図面を参照して詳細に説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージシステムの構成例を示す図である。
【0014】
ストレージシステム1は、ストレージ制御装置10と、複数の記憶装置とを備える。ストレージシステム1が備える記憶装置は、HDD、SSD(Solid State Drive)などの不揮発性記憶装置である。図1では、ストレージシステム1が備える記憶装置として、記憶装置21〜25を例示している。
【0015】
ストレージ制御装置10は、図示しないホスト装置からの要求に応じて、ストレージシステム1内の記憶装置に対するアクセスを制御する。また、ストレージ制御装置10は、記憶装置へのアクセス処理を、それぞれ複数の記憶装置の記憶領域によって構成される論理記憶領域を単位として制御する。論理記憶領域に対するデータ記録は、データが異なる記憶装置に冗長化されるように制御される。以下、このような論理記憶領域をRLU(RAID Logical Unit)と呼ぶ。図1では例として、記憶装置21〜24の各記憶領域が、「RLU#1」という1つのRLUに属しているものとする。
【0016】
ストレージ制御装置10は、リビルド制御部11およびアクセス処理部12を備える。リビルド制御部11およびアクセス処理部12の各処理は、例えば、ストレージ制御装置10が備えるCPU(Central Processing Unit)が所定のプログラムを実行することで実現される。
【0017】
リビルド制御部11は、アクセス処理部12にリビルド処理を実行させる。リビルド処理は、RLUを構成する1つの記憶装置(第1の記憶装置とする)に記録されていたデータと同一のデータを、RLUを構成する記憶装置のうち第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、ストレージシステム1に含まれる予備用記憶装置、または、上記の第1の記憶装置と交換された第2の記憶装置に書き込む処理である。
【0018】
なお、例えば、RLUがRAID−4,5,6のようにパリティを用いてデータが冗長化されるように制御されていた場合には、RLUを構成する、第1の記憶装置以外の記憶装置から読み出したデータを基に、書き込み先に書き込むべきデータが計算によって生成される。しかしながら、例えば、RLUがRAID−1のようにミラーリング制御されていた場合には、第1の記憶装置以外の記憶装置から読み出されたデータは、書き込み先に対してそのまま書き込まれる。
【0019】
アクセス処理部12は、リビルド制御部11からの要求に応じて上記のリビルド処理を実行する。アクセス処理部12は、リビルド処理を、データの読み出し対象範囲を一定サイズごとに分割した分割範囲からデータを読み出す処理と、この分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して実行する。
【0020】
ここで、リビルド制御部11は、1つのRLUについてのリビルド処理をアクセス処理部12に実行させる際に、複数の部分処理の実行を指示することで、指示した複数の部分処理をアクセス処理部12に並列に実行させることができる。このように、複数の部分処理を並列に実行することで、リビルド処理を高速化することができる。
【0021】
以下、例として、図1に示すRLU#1についてのリビルド処理の処理手順について説明する。なお、ここでは例として、RLU#1は、RAID−4,5,6のようにパリティを用いてデータが冗長化されるように制御されているものとする。そして、以下の説明では、記憶装置24が故障し、故障した記憶装置24に記録されていたデータを、予備用の記憶装置25に格納するものとする。
【0022】
リビルド制御部11は、部分処理の実行をアクセス処理部12に指示することで、アクセス処理部12にリビルド処理を実行させる。部分処理は、リビルド処理でのデータの読み出し対象範囲を一定サイズごとに分割した分割範囲ごとに実行される。図1の例では、読み出し対象範囲は、記憶装置21〜23の記憶領域である。そして、分割範囲は、記憶装置24の記憶領域を一定サイズごとに分割した各領域(例えば、図1の領域A4_1)に対応する、同じRLUを構成する他の記憶装置21〜23の記憶領域(例えば、図1の領域A1_1,A2_1,A3_1)である。
【0023】
なお、RLU#1がRAID−1で制御される場合には、読み出し対象範囲は、記憶装置21〜23のいずれかである。そして例えば、領域A4_1に対応する分割領域は、領域A1_1,A2_1,A3_1のいずれかである。
【0024】
図1のRLU#1についてのリビルド処理における1つの部分処理は、1つの分割範囲(例えば、領域A1_1,A2_1,A3_1)からデータを読み出す処理と、読み出したデータに基づいて生成したデータを、記憶装置25の対応する領域(例えば、領域A5_1)に書き込む処理との組み合わせを含む。アクセス処理部12は、このような部分処理を単位としてリビルド処理を実行する。
【0025】
リビルド制御部11は、アクセス処理部12に対して複数の部分処理の実行を指示することで、指示した複数の部分処理をアクセス処理部12に並列に実行させる。図1の例では、リビルド制御部11は、領域A1_1,A2_1,A3_1からのデータ読み出しを含む部分処理P1と、領域A1_2,A2_2,A3_2からのデータ読み出しを含む部分処理P2の実行を、アクセス処理部12に指示する。このとき、アクセス処理部12は、指示された部分処理P1,P2を並列に実行する。
【0026】
このようにアクセス処理部12によって複数の部分処理が並列に実行されることで、リビルド処理の速度を高速化することができる。例えば図1において、部分処理P1における領域A5_1に対するデータの書き込みと、部分処理P2における領域A1_1,A2_1,A3_1からのデータ読み出しとを、同時に実行することができる。これにより、アクセス処理部12は、部分処理P1の実行が完了する前に、部分処理P2の実行を開始することができ、その結果、リビルド処理全体に要する時間が短縮される。
【0027】
また、上記のように、各部分処理は、ある分割範囲からのデータ読み出し処理と、読み出したデータを基に生成したデータを他の記憶装置に書き込む処理とを含む。このため、例えば、1つの部分処理の中では、読み出し元を特定する論理アドレス(LBA:Logical Block Address)と、書き込み先を特定する論理アドレスとを同じ値とすることができる。従って、アクセス処理部12が部分処理を並列に実行する際の処理手順を簡易化することができ、リビルド処理の効率を向上させることができる。
【0028】
なお、リビルド制御部11は、複数の論理記憶領域についてそれぞれ1つ以上の部分処理の実行をアクセス処理部12に指示することで、複数の論理記憶領域のそれぞれについてのリビルド処理をアクセス処理部12に並列に実行させることもできる。この場合、複数の論理記憶領域についてのリビルド処理全体を高速化することができる。
【0029】
また、リビルド制御部11は、アクセス処理部12に実行を指示する部分処理の数を調整することで、ストレージ制御装置10におけるリビルド処理による処理負荷を増減することができる。さらに、複数の論理記憶領域のそれぞれについてのリビルド処理を並列に実行する場合には、アクセス処理部12に対して実行を指示する部分領域の数を論理記憶領域ごとに変えることにより、論理記憶領域ごとのリビルド処理負荷のバランスを調整することもできる。
【0030】
次に、第2の実施の形態として、リビルド処理負荷の調整機能を備えたストレージ制御装置を含むストレージシステムの例について説明する。
〔第2の実施の形態〕
図2は、第2の実施の形態に係るストレージシステムの全体構成例を示す図である。図2に示すストレージシステム100は、CE(Controller Enclosure)200と、DE(Drive Enclosure)300とを含む。また、CE200には、ホスト装置400が接続されている。
【0031】
CE200は、CM(Controller Module)201,202を備える。CM201,202のそれぞれは、ホスト装置400からのI/O(In/Out)要求に応じて、DE300内の記憶装置に対するデータの読み書きを行う。CM201,202は、DE300内の記憶装置によって実現される物理記憶領域をRAID(Redundant Arrays of Inexpensive Disks)によって管理し、これらの物理記憶領域に対するアクセスを制御する。
【0032】
なお、CM201,202は、例えばルータなどを介して互いに接続されていてもよい。また、CMは、CE200内に1つのみ設けられてもよいし、3つ以上設けられてもよい。ただし、CMが複数設けられることで、DE300に対するアクセス制御系統が冗長化され、アクセス制御処理の信頼性が向上する。
【0033】
DE300は、CM201,202からのアクセス制御対象となる複数の記憶装置を備える。本実施の形態のDE300は、記憶装置としてHDDを備えるディスクアレイ装置である。なお、DE300が備える記憶装置としては、SSDなどの他の種類の不揮発性記憶装置を使用することもできる。また、CE200には、複数のDE300が接続されていてもよい。
【0034】
ホスト装置400は、ユーザの操作に応じて、CM201,202に対して、DE300内のHDDへのアクセスを要求する。ホスト装置400は、例えば、ユーザの操作に応じて、CM201,202のいずれかを通じて、DE300内のHDDからのデータの読み出しや、DE300内のHDDに対するデータの書き込みを行うことができる。
【0035】
なお、CE200内のCM201,202は、ともに同様の構成を有し、同様の処理を実行可能である。そこで、以下、CM201についてのみ説明し、CM202についての説明を省略する。
【0036】
図3は、CMのハードウェア構成例を示す図である。
CM201は、CPU211によって装置全体が制御されている。CPU211には、RAM(Random Access Memory)212および複数の周辺機器が、バス217を介して接続されている。RAM212は、CM201の主記憶装置として使用され、CPU211に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
【0037】
CPU211には、周辺機器の例として、SSD213、入力I/F(インタフェース)214、ホストI/F215およびディスクI/F216が接続されている。
SSD213は、CM201の二次記憶装置として使用され、CPU211によって実行されるプログラムやその実行に必要な各種のデータなどを記憶する。なお、二次記憶装置としては、例えば、HDDなどの他の種類の不揮発性記憶装置が使用されてもよい。
【0038】
入力I/F214には、操作キーなどを備える入力装置214aが接続されている。入力I/F214は、入力装置214aに対する操作入力に応じた信号をCPU211に出力する。
【0039】
ホストI/F215は、ホスト装置400とCM201との間でデータを送受信するインタフェース処理を実行する。ホストI/F215とホスト装置400とは、例えば、FC(Fibre Channel)規格に従って通信する。
【0040】
ディスクI/F216は、DE300とCM201との間でデータを送受信するインタフェース処理を実行する。ディスクI/F216とDE300とは、例えば、SAS(Serial Attached SCSI,SCSI:Small Computer System Interface)規格に従って通信する。
【0041】
図4は、CMの処理機能の構成例を示すブロック図である。
CM201は、RAID制御部221、ホストI/O制御部222、リカバリ制御部223、構成制御部224、ホストI/O監視部225、バッファ監視部226およびエラー監視部227を備える。これらの各部の処理は、例えば、CM201のCPU211が所定のプログラムを実行することで実現される。
【0042】
RAID制御部221は、ホストI/O制御部222またはリカバリ制御部223からの要求に応じて、DE300内のHDDにアクセスする。RAID制御部221は、DE300内のHDDにアクセスする際に、アクセス先の領域に対して設定されたRAIDに関する設定情報に基づいてアクセス制御を行う。このような設定情報は、SSD213に記録された後述するRAID管理テーブルに登録されている。RAID管理テーブルには、RLUごとに、RAIDレベル、RLUを構成するHDDの数などの設定情報が記録されている。なお、RLUとは、DE300に搭載された複数のHDDの物理記憶領域を組み合わせて構成される論理記憶領域であり、RAIDグループとも呼ばれる。
【0043】
例えば、RAID制御部221は、ホストI/O制御部222からあるRLUに対するデータの書き込み要求を受けると、RAID管理テーブル241に設定された書き込み先RLUについての情報に基づいて、データが冗長化されるように書き込み処理を行う。例としてディスク数「6」のRAID−5で制御されるRLUに書き込みを行うものとすると、RAID制御部221は、ホストI/O制御部222から受信したデータを分割し、連続する5個の分割データとそれらに基づくパリティとを、6台のHDDにおける同一ストライプ番号の領域に分散させて記録する。
【0044】
ホストI/O制御部222は、ホスト装置400から、RLUに対するI/O要求(読み出し要求または書き込み要求)を受け付ける。ホストI/O制御部222は、受け付けたI/O要求に応じたI/O処理の実行を、RAID制御部221に依頼する。なお、以下、ホスト装置400からの要求に応じてRAID制御部221で実行されるI/O処理を、「ホストI/O処理」と呼ぶ。
【0045】
例えば、ホストI/O制御部222は、ホスト装置400から読み出し要求を受けた場合、読み出し元のRLUおよびアドレスをRAID制御部221に通知して、読み出しを依頼する。ホストI/O制御部222は、RAID制御部221によって読み出されたデータを、ホスト装置400に送信する。一方、ホストI/O制御部222は、ホスト装置400から受信した書き込みデータと、書き込み先のRLUおよびアドレスとをRAID制御部221に出力して、書き込みを依頼する。RAID制御部221によって書き込み処理が正常に実行されると、ホストI/O制御部222は、ホスト装置400に対して正常応答する。
【0046】
リカバリ制御部223は、リビルド処理、冗長コピー処理およびコピーバック処理の実行をRAID制御部221に依頼して、それらの処理の進捗状況を管理する。リビルド処理は、RLUに属するいずれかのHDDが故障した場合に、同じRLUに属する故障していないHDDからデータを読み出し、読み出したデータを基に故障したHDDのデータを再構築して、予備用のHDD(ホットスペア)、または、故障したHDDを交換した交換後のHDDに書き込む処理である。冗長コピー処理は、RLUに属するいずれかのHDDから故障の予兆を検出した場合に、故障の予兆が検出されたHDDを切り離すことなく、リビルド処理と同様の読み出し、データ再構築および書き込みを実行する処理である。コピーバック処理は、故障したHDDが新たなHDDに交換された場合に、リビルド処理または冗長コピー処理によってホットスペアに格納されたデータを、交換後のHDDに書き戻す処理である。以下、これらのリビルド処理、冗長コピー処理およびコピーバック処理を総称して、「リビルド系処理」と呼ぶ。
【0047】
リカバリ制御部223は、あるRLUについてのリビルド系処理を実行させる際、リビルド系処理の対象となる記憶領域を一定サイズごとに分割する。そして、リカバリ制御部223は、一定サイズごとのデータの読み出しと、読み出したデータに基づく書き込みとの組み合わせからなる部分処理を、順次RAID制御部221に依頼することで、RLUについてのリビルド系処理を実行させる。
【0048】
例えば、RAID−4,5,6にいずれかで制御されるRLUの場合、部分処理は、リビルド系処理を一定ストライプ数の領域ごとに実行した処理となる。また、RAID−1で制御されるRLUの場合、部分処理は、ミラーリングする各記憶領域における一定サイズの領域ごとに、リビルド系処理を実行した処理となる。
【0049】
なお、リビルド系処理のうち、リビルド処理および冗長コピー処理を依頼する際には、RAID制御部221に依頼される部分処理には、データの読み出しと書き込みとの間に、必要に応じてデータの再構築処理が含まれる。
【0050】
リカバリ制御部223は、上記のように、1つのRLUについてのリビルド系処理を実行させる際に、RAID制御部221に対して、一定サイズごとの部分処理の実行を同じ期間中に複数依頼し、依頼した複数の部分処理をRAID制御部221に並列に実行させることができる。このように、部分処理を並列に実行させることで、リビルド系処理に要する時間を短縮することができる。
【0051】
また、リカバリ制御部223は、複数のRLUについてのリビルド系処理をRAID制御部221に並列に実行することもできる。この場合には、あるRLUについての1つ以上の部分処理と、他のRLUについての1つ以上の部分処理とが、RAID制御部221によって並列に実行される。
【0052】
さらに、リカバリ制御部223は、RLUごとの部分処理の多重度を、RLUごとに設定された優先度、ホストI/O処理の実行状況、および、CM201内のメモリリソースの使用状況に応じて可変する。これにより、ホストI/O処理の性能に対する影響をできるだけ抑制しつつ、リビルド系処理を高速化する。
【0053】
構成制御部224は、RAID管理テーブル241を用いてRLUの構成を管理する。例えば、構成制御部224は、エラー監視部227によってHDDの故障が検出された場合に、RAID管理テーブル241を更新することで、故障したHDDを今まで属していたRLUから切り離すとともに、そのRLUにホットスペアを組み込む。また、構成制御部224は、HDDの故障が検出された場合には、リカバリ制御部223に対してリビルド処理の実行を要求する。
【0054】
ホストI/O監視部225は、仕掛かり中のホストI/O処理(処理が完了していないホストI/O処理)を監視する。例えば、ホストI/O制御部222は、ホスト装置400からのI/O要求コマンドをコマンドキューに登録し、対応するI/O処理が完了したI/O要求コマンドをコマンドキューから消去する。ホストI/O監視部225は、コマンドキューを監視することで、仕掛かり中のホストI/O処理を判別する。なお、コマンドキューは、例えば、CM201のRAM212に記憶される。ホストI/O監視部225は、例えば、仕掛かり中のホストI/O処理の有無を、アクセス先のRLUごとにリカバリ制御部223に通知することができる。
【0055】
バッファ監視部226は、バッファ領域231の使用状況を監視する。バッファ領域231は、少なくともRAID制御部221、ホストI/O制御部222およびリカバリ制御部223によってバッファとして使用される記憶領域であり、RAM212内に確保される。バッファ監視部226は、例えば、バッファ領域231の使用状況をリカバリ制御部223に通知することができる。
【0056】
エラー監視部227は、DE300内のHDDについてのエラー発生状況を監視する。例えば、エラー監視部227は、RAID制御部221によるHDDへのアクセスの際に発生したエラーの回数を、アクセス先のHDDごとに、CM201のSSD213に記録しておく。また、エラー監視部227は、故障判定のためのHDDへのアクセスをRAID制御部221に定期的に依頼することで、エラーの発生を検知してもよい。
【0057】
エラー監視部227は、あるHDDにおけるエラー発生回数が所定のしきい値Th1を超えると、そのHDDでの故障発生の予兆を検出したことを構成制御部224に通知する。この場合、構成制御部224は、故障発生の予兆が検出されたHDDが属するRLUについての冗長コピー処理の実行を、リカバリ制御部223に要求する。また、エラー監視部227は、あるHDDにおけるエラー発生回数がしきい値Th1より大きいTh2を超えると、そのHDDで故障が発生したと判定して、構成制御部224に故障発生を通知する。この場合、構成制御部224は、故障発生の検出されたHDDが属するRLUについての冗長コピー処理の実行を、リカバリ制御部223に要求する。
【0058】
ところで、例えば、ホストI/O制御部222とRAID制御部221との間、構成制御部224とリカバリ制御部223との間、リカバリ制御部223とRAID制御部221との間では、「制御ブロック」と呼ばれる制御データを用いて、処理要求および応答が行われる。図4に示した制御ブロックプール232は、制御ブロックの登録用に確保されたRAM212上の記憶領域である。
【0059】
制御ブロックには、依頼する処理を識別するための処理名や、処理の対象を識別するための情報などが格納される。例えば、ホストI/O制御部222は、RAID制御部221に読み出し処理を依頼する場合には、制御ブロックを確保し、確保した制御ブロック内に、読み出しを示す処理名、読み出し元を指定するアドレスなどを登録する。ホストI/O制御部222は、確保した制御ブロックを識別するIDをRAID制御部221に通知することで、その制御ブロックで指示される処理を依頼する。
【0060】
ここで、図5は、リビルド系処理の実行時に生成される制御ブロックの構成例を示す図である。
リカバリ制御部223に対してリビルド系処理の実行を依頼する際に構成制御部224が生成する制御ブロックは、ID、RLU番号、処理名、読み出し元ディスク番号および書き込み先ディスク番号を含む。IDは、制御ブロックを識別するための番号である。RLU番号は、処理対象のRLUを示す。処理名は、依頼する処理の種類を示す。読み出し元ディスク番号は、依頼する処理における読み出し元のHDDを示す。書き込み先ディスク番号は、依頼する処理における書き込み先のHDDを示す。
【0061】
構成制御部224は、制御ブロックプール232に確保した制御ブロックに対して、ID、RLU番号、処理名、読み出し元ディスク番号および書き込み先ディスク番号を設定する。そして、構成制御部224は、リカバリ制御部223に対してIDを通知して、処理名が示す処理の実行を要求する。なお、IDは、制御ブロックプール232における制御ブロックのアドレスであってもよい。要求を受けたリカバリ制御部223は、IDが指し示す制御ブロックに応じた処理を行う。また、制御ブロックに応じた処理を完了したリカバリ制御部223は、その制御ブロックのIDを構成制御部224に通知するとともに、処理が完了したことを通知する。
【0062】
一方、RAID制御部221に対してリビルド系処理のうちの部分処理の実行を依頼する際にリカバリ制御部223が生成する制御ブロックは、上記のID、RLU番号、処理名、読み出し元ディスク番号および書き込み先ディスク番号に加えて、部分処理の対象とする領域を示すアドレス(LBA)を含む。なお、図5の例では、アドレスとして対象範囲の先頭LBAと最後尾のLBAとが設定されているが、他の例として、先頭LBAと、対象範囲の大きさを示すブロック数とが設定されてもよい。
【0063】
リカバリ制御部223は、ID、RLU番号、処理名、読み出し元ディスク番号、書き込み先ディスク番号およびアドレスが設定された制御ブロックのIDを、RAID制御部221に通知して、処理名が示す処理の実行を要求する。要求を受けたRAID制御部221は、IDが指し示す制御ブロックに応じた処理を行う。また、制御ブロックに応じた処理を完了したRAID制御部221は、その制御ブロックのIDをリカバリ制御部223に通知するとともに、処理が完了したことを通知する。
【0064】
なお、リカバリ制御部223からRAID制御部221に通知される制御ブロックには、リカバリ制御部223自身が獲得した制御ブロックと、構成制御部224が獲得した制御ブロックに対してリカバリ制御部223がアドレスを追記した制御ブロックとがある。後者の場合、構成制御部224が獲得してリカバリ制御部223に通知する制御ブロックのIDと、リカバリ制御部223がRAID制御部221に通知する制御ブロックのIDとは、同一になる。
【0065】
図6は、制御ブロックに基づいて部分処理が多重実行される際の処理例を示すシーケンス図である。この図6では例として、1つのRLUについてのリビルド処理が実行されるものとする。また、リビルド処理対象のRLUは、RAID−4,5などに基づき、パリティを用いてデータが冗長化されるものとする。
【0066】
構成制御部224は、制御ブロックBL1を確保し、この制御ブロックBL1をリカバリ制御部223に通知することで、所定のRLUについてのリビルド処理の実行をリカバリ制御部223に依頼する(タイミングT11)。依頼を受けたリカバリ制御部223は、後述する手順に従って、該当RLUについて許容される部分処理の多重度を判定する。ここで言う多重度とは、該当RLUについていくつの部分処理を並列に実行可能かを示すものである。
【0067】
該当RLUに対して多重度「4」が許容されていると判定したものとすると、リカバリ制御部223は、RAID制御部221に対して4つの制御ブロックを通知して、各制御ブロックに基づく部分処理の実行を依頼する。図6の例では、リカバリ制御部223は、まず、3つの制御ブロックBL2,BL3,BL4を新規に獲得し(それぞれタイミングT12,T13,T14)、制御ブロックBL2,BL3,BL4に対して、リビルド処理対象とする領域のアドレスを対象領域全体の先頭から順に設定する。例えば、制御ブロックBL2にはアドレス「0x0000〜0x03ff」が設定され、制御ブロックBL3にはそれに続くアドレス「0x0400〜0x07ff」が設定され、制御ブロックBL4にはそれに続くアドレス「0x0800〜0x0bff」が設定される。なお、「0x“XXXX”」は、“XXXX”が16進数で表記されていることを示す。
【0068】
リカバリ制御部223は、アドレスを設定した制御ブロックBL2,BL3,BL4をRAID制御部221に通知し、制御ブロックBL2,BL3,BL4のそれぞれに基づく部分処理の実行を依頼する(それぞれタイミングT15,T16,T17)。さらに、リカバリ制御部223は、4つ目の制御ブロックとして、構成制御部224から通知された制御ブロックBL1に対して、次のリビルド処理対象領域を示すアドレス「0x0c00〜0x0fff」を設定する。そして、リカバリ制御部223は、アドレスを設定した制御ブロックBL1をRAID制御部221に通知して、制御ブロックBL1に基づく部分処理の実行を依頼する(タイミングT18)。
【0069】
RAID制御部221は、リカバリ制御部223から通知された制御ブロックBL2,BL3,BL4,BL1にそれぞれ基づく部分処理を、並列に実行する。それぞれの部分処理では、(1)RLUに属するHDDのうち故障していないHDDにおける、アドレスによって指定された領域からのデータ読み出し処理、(2)読み出したデータを基に、故障したHDDにおける同じアドレスに対応する領域に記憶されていたデータを、計算によって再構築する処理、(3)再構築されたデータを、ホットスペアにおける同じアドレスに対応する領域に書き込む処理が、順次実行される。
【0070】
例えば、(1)での読み出し元のHDDと(3)での書き込み先のHDDとは異なるので、ある制御ブロックに基づいて(3)の書き込み処理が実行されている間に、別の制御ブロックに基づいて(1)の読み出し処理を並列に実行することができる。また、ある制御ブロックに基づく(1)の読み出し処理が完了すると、同じ制御ブロックに基づく(2)の再構築処理を開始するとともに、別の制御ブロックに基づいて次の領域からの(1)の読み出し処理を続けて開始することができる。このように、RAID制御部221に対して複数の制御ブロックを通知して、各制御ブロックに基づく部分処理を並列に実行させることで、RLUについてのリビルド系処理全体に要する処理時間を短縮することができる。
【0071】
また、1つの部分処理では、(1)での読み出し元アドレスと(3)での書き込み先アドレスとは同じになる。このように、読み出し元と書き込み先とが同じ処理を1つの部分処理に含め、そのような部分処理の並列処理をRAID制御部221に依頼するようにしたことで、並列処理を依頼する際のリカバリ制御部223の処理手順を単純化することができ、また、依頼を受けたRAID制御部221での処理も単純化される。
【0072】
なお、例えば、RLUに設定されたRAIDレベルがRAID−1の場合、(1)の読み出し処理では、RLUに属する故障していないHDDのうち1台からデータが読み出され、(2)の再構築処理がスキップされ、(3)の書き込み処理では、1台のHDDから読み出されたデータがそのままホットスペアに書き込まれる。また、コピーバック処理が要求されている場合、(1)の読み出し処理では、ホットスペアにおけるアドレスによって指定された領域からデータが読み出され、(2)の再構築処理がスキップされ、(3)の書き込み処理では、ホットスペアから読み出されたデータが、交換されたHDDにおける同じアドレスに対応する領域にそのまま書き込まれる。
【0073】
以上説明したように、構成制御部224からリビルド系処理の実行要求を受けたリカバリ制御部223は、その時点で該当RLUに対して許容されている多重度を判定し、判定した多重度分の数の制御ブロックをRAID制御部221に通知する。これにより、RAID制御部221による部分処理が、リビルド系処理の実行が要求された時点での適切な多重度で、並列に実行されるようになる。
【0074】
続いて、RAID制御部221は、制御ブロックに基づく部分処理の実行を完了すると、その制御ブロックのIDをリカバリ制御部223に通知して、処理が完了したことを通知する。例えば、図6において、制御ブロックBL2に基づく部分処理が完了すると、RAID制御部221は、リカバリ制御部223に対して制御ブロックBL2を通知し、処理完了を通知する(タイミングT19)。
【0075】
処理完了通知を受けたリカバリ制御部223は、後述する手順に従って、その時点で該当RLUに対して許容されている多重度を判定する。図6の例では多重度「4」であるものとすると、リカバリ制御部223は、制御ブロックBL2に設定されたアドレスを、RAID制御部221に部分処理を依頼していない処理対象領域のうちの先頭領域のアドレス「0x1000〜0x13ff」に書き換える。そして、リカバリ制御部223は、アドレスを書き換えた制御ブロックBL2をRAID制御部221に通知して、制御ブロックBL2に基づく部分処理の実行を依頼する(タイミングT21)。依頼を受けたRAID制御部221は、制御ブロックBL2に基づく部分処理の実行を開始する。
【0076】
ただし、仮に、制御ブロックBL2についての処理完了通知を受けたとき(タイミングT19)、該当RLUに対して許容されている多重度が「3」であった場合には、リカバリ制御部223は、さらなる部分処理を実行させることが不可能と判断して、制御ブロックBL2を解放する。これにより、RAID制御部221で並列に実行される、該当RLUについての部分処理の数が「3」に減少する。
【0077】
一方、例えば、制御ブロックBL1についての処理完了通知を受けたとき(例えばタイミングT22)、該当RLUに対して許容されている多重度が「5」であった場合には、リカバリ制御部223は、新たな制御ブロック(「制御ブロック5」とする)を獲得する。そして、リカバリ制御部223は、新規に獲得した制御ブロック5に次の処理対象領域のアドレス「0x1000〜0x13ff」を設定し、制御ブロック5をRAID制御部221に通知して、部分処理の実行を依頼する。さらに、リカバリ制御部223は、元の制御ブロックBL2のアドレスを、次の処理対象領域のアドレス「0x1400〜0x17ff」に書き換え、この制御ブロックBL2をRAID制御部221に通知して、部分処理の実行を依頼する。これにより、RAID制御部221で並列に実行される、該当RLUについての部分処理の数が「5」に増加する。
【0078】
このように、リカバリ制御部223は、RAID制御部221から応答を受けるたびに、その時点で該当RLUに対して許容されている多重度を判定する。そして、リカバリ制御部223は、多重度の判定結果に応じて、RAID制御部221に並列に実行させる部分処理の数を調整する。従って、RAID制御部221による部分処理の実行が完了するたびに、RAID制御部221で並列に実行される部分処理の数が最適化される。
【0079】
ところで、図6に示したように、RAID制御部221で実行される部分処理は、リカバリ制御部223から実行を依頼された順に完了するとは必ずしも限らない。例えば図6において、制御ブロックBL4に基づく部分処理が完了したとき(タイミングT20)、制御ブロックBL3に基づく部分処理は完了していない。このような場合に、制御ブロックBL3に基づく部分処理が完了するまで、次の制御ブロックに基づく部分処理を実行させないようにすると、待ち時間が発生する分だけ、リビルド系処理に要する時間が長くなってしまう。
【0080】
そこで、リカバリ制御部223は、RAID制御部221から応答を受けたとき、他の部分処理の待ち合わせを行わずに、その時点で許容されている多重度を判定し、部分処理をさらに実行させることが可能であれば、RAID制御部221に対して制御ブロックを通知して、次の領域についての部分処理を開始させる。
【0081】
図6の例では、リカバリ制御部223は、制御ブロックBL4に基づく部分処理の完了通知を受けると(タイミングT20)、制御ブロックBL3に基づく部分処理の完了を待ち合わせることなく、その時点で許容されている多重度を判定する。そして、例えば多重度が「4」である場合、リカバリ制御部223は、制御ブロックBL4のアドレスを次の領域を示すアドレス「0x1400〜0x17ff」に書き換え、この制御ブロックBL4をRAID制御部221に通知して、部分処理の実行を依頼する。
【0082】
このような処理により、他の部分処理より長い処理時間を要する部分処理の影響を受けることなく、処理対象領域に対するリビルド系処理を迅速に進めることができ、リビルド系処理全体に要する処理時間が短縮できる。
【0083】
また、制御ブロックには、構成制御部224からリビルド系処理の実行が要求された初期段階でのRAID制御部221への制御ブロックの通知順とは関係なく、あくまでRAID制御部221へ制御ブロックが通知された順に、処理対象領域の先頭側から順番にアドレスが設定される。これにより、リカバリ制御部223は、制御ブロックの通知順と、通知した制御ブロックに基づく部分処理の完了順との対応を管理する必要がなく、部分処理が完了した順にアドレスを順次設定していけばよくなる。このため、リカバリ制御部223での処理手順が簡略化され、その処理負荷が軽減される。これとともに、同一RLUに対応する読み出し元および書き込み先の各HDDにおいては、読み出しアドレスおよび書き込みアドレスが、途中で順序が変わることなく連続的に指定されるようになる。このため、各HDDでの読み出し速度および書き込み速度を高速化することができる。
【0084】
次に、図7は、リビルド系処理を実行する際に参照される主な情報の例を示す図である。
CM201内のSSD213には、RAID管理テーブル241と、多重度設定テーブル242とが記憶される。RAID管理テーブル241は、RLUに関する設定情報を保持する。RAID管理テーブル241に対する情報の登録や更新は構成制御部224によって行われ、RAID管理テーブル241は、RAID制御部221およびリカバリ制御部223に参照される。多重度設定テーブル242は、RAIDの構成ごとにあらかじめ決められた多重度上限値(構成別多重度上限値)を保持する。多重度設定テーブル242は、RLUごとに獲得可能な制御ブロック数を判定する際に、リカバリ制御部223によって参照される。
【0085】
ここで、図8は、RAID管理テーブルに登録される情報の例を示す図である。
RAID管理テーブル241には、構成制御部224によって、RLUごとにレコード241aが登録される。各レコード241aには、対応するRLUを識別するRLU番号が付与されている。また、各レコード241aには、「RAIDレベル」、「ディスク数」、「ディスク番号」、「HSディスク番号」および「リビルド優先度」が登録される。
【0086】
「RAIDレベル」は、該当RLUに対して設定されたRAIDレベルを示す。「ディスク数」は、該当RLUに属するHDDの数を示す。「ディスク番号」は、該当RLUに属するHDDの識別番号を示す。「ディスク番号」は、「ディスク数」に設定された数だけ、レコード241aに登録される。
【0087】
「ディスク番号」によって識別されるHDDのそれぞれには、「ディスク状態」が登録される。「ディスク状態」は、該当HDDの動作状態を示す。「ディスク状態」には、例えば、「正常」、「故障」および「HSに退避中」のいずれかが設定される。「正常」は、該当HDDが正常に動作していることを示し、「故障」は、該当HDDが故障していることを示す。「HSに退避中」は、該当HDDに記録されていたデータについてのホットスペアへのリビルド処理が完了し、そのホットスペアを組み込んだ状態で該当RLUが運用されていることを示す。なお、「ディスク状態」は、例えば、RAID管理テーブル241とは別に用意されてHDDごとの情報を保持するディスク管理テーブルに登録されてもよい。
【0088】
「HSディスク番号」は、リビルド処理または冗長コピー処理の実行前に設定され、これらの処理においてデータの書き込み先とするホットスペアのHDDを識別する番号を示す。
【0089】
構成制御部224は、エラー監視部227からHDDの故障通知を受けると、故障したHDDが属するRLUのレコード241aを抽出し、故障したHDDについての「ディスク状態」を「正常」から「故障」に更新することで、故障したHDDをRLUから切り離す。さらに、構成制御部224は、ホットスペアとして使用するHDDのディスク番号を「HSディスク番号」に設定する。構成制御部224は、このような設定変更を行ったレコード241aに対応するRLUについて、リビルド処理やコピーバック処理をリカバリ制御部223に要求する。一方、構成制御部224は、エラー監視部227から故障の予兆が検出されたHDDが通知された場合、通知されたHDDについての「ディスク状態」を「正常」にしたまま(すなわち、通知されたHDDをRLUに組み込んだ状態のまま)、通知されたHDDが属するRLUについての冗長コピー処理をリカバリ制御部223に要求する。
【0090】
なお、RAID管理テーブル241は、RAID制御部221からも参照される。例えば、RAID制御部221は、ホストI/O処理を行う際に、I/O処理対象のRLUに対応するRAID管理テーブル241のレコード241aを参照する。RAID制御部221は、参照先のレコード241aに設定されたRAIDレベル、ディスク数およびディスク番号に応じたI/O処理を実行する。
【0091】
また、RAID制御部221は、リカバリ制御部223からリビルド系処理の依頼を受けたとき、リカバリ制御部223から通知された制御ブロックに記載されたRLU番号に対応する、RAID管理テーブル241のレコード241aを参照する。RAID制御部221は、参照先のレコード241aに登録されたRAIDレベルと、リカバリ制御部223から通知された制御ブロックに設定された読み出し元ディスク番号および書き込み先ディスク番号とを基に、実行すべき処理内容の詳細を判別する。例えば、リビルド処理が依頼された場合、RAID制御部221は、レコード241aに登録されたRAIDレベルに基づいて、データの再構築計算を行うか否かを判別するなど、RAIDの構成に応じた処理を実行する。
【0092】
次に、図8のRAID管理テーブル241において、「リビルド優先度」は、該当RLUに対して付与されたリビルド系処理の優先度を示す。この「リビルド優先度」は、ユーザによる操作入力に応じて任意に設定可能である。「リビルド優先度」には、例えば、「高」または「低」のいずれかが設定される。「リビルド優先度」は、RLUごとに許容される部分処理の多重度を判定する際に、リカバリ制御部223によって参照される。
【0093】
後述するように、リカバリ制御部223は、リカバリ系処理対象のRLUに対する仕掛かり中のホストI/Oがある場合や、CM201での処理負荷が高い場合(メモリリソースの使用量が所定量以上の場合)に、リカバリ系処理対象のRLUに対応付けられた「リビルド優先度」を読み込む。「リビルド優先度」が「高」の場合、リカバリ制御部223は、多重度設定テーブル242に基づき、該当RLUの構成に応じた多重度の上限値を認識し、認識した多重度の上限値にできるだけ近づくように部分処理の多重度を設定する。一方、「リビルド優先度」が「低」の場合、リカバリ制御部223は、該当RLUについての部分処理を多重実行しないように制御する。
【0094】
図9は、多重度設定テーブルに登録される情報の例を示す図である。
多重度設定テーブル242には、RAIDの構成に応じてあらかじめ決められた、1RLUにおける部分処理の多重度の上限値(構成別多重度上限値)が登録される。図9では例として、RLUに設定されるRAIDレベルと、RLUに属するディスク数との組み合わせによって、RAIDの構成が識別され、これらの組み合わせごとに構成別多重度上限値が登録されている。
【0095】
構成別多重度上限値は、各RAID構成が適用されたときのホストI/O処理性能に対する影響度合いが同程度になるように、RAID構成ごとにあらかじめ算出される。例えば、RLUに属するディスク数が同じ場合、パリティを使用しないRAID−1より、パリティを使用するRAID−5,6の方が、処理負荷が高いと考えられる。このため、RLUに属するディスク数が同じ場合、RAID−1についての構成別多重度上限値より、RAID−4,5についての構成別多重度上限値を小さくする。また、RAIDレベルが同じ場合には、ディスク数が多いほど処理負荷が高いと考えられる。このため、RAIDレベルが同じ場合、ディスク数が多いほど構成別多重度上限値を小さくする。
【0096】
以下、図7に戻って説明する。
SSD213には、リカバリ制御部223が参照する値として、多重度全体上限値M1と、RLU内多重度上限値M2とがあらかじめ記憶される。多重度全体上限値M1は、CM201全体で実行可能な、リビルド系処理についての部分処理の上限多重度を示す。RLU内多重度上限値M2は、1RLUに対して実行可能な、リビルド系処理についての部分処理の上限多重度を示す。このRLU内多重度上限値M2としては、多重度全体上限値M1より小さい値が設定される。
【0097】
また、リカバリ制御部223は、それぞれRAM212に記憶された多重度調整係数C1、現在の多重度M3および完了アドレスADを参照しながら、処理を実行する。
多重度調整係数C1は、リビルド系処理を実行中の全RLUに対して共通に適用される係数であり、部分処理の多重度を決定する際に、各RLUについての部分処理の多重度の合計値が多重度全体上限値M1を超えないように調整するために使用される。なお、多重度調整係数C1は、0より大きく、1以下の値をとり、例えば0.1などの所定間隔で増減される。また、例えば、CM201が起動した際、あるいは、CM201の起動後にリカバリ制御部223の処理が開始された際に、多重度調整係数C1には初期値「1」が設定される。
【0098】
現在の多重度M3および完了アドレスADは、ともにリビルド系処理を実行中のRLUごとに個別に設定される値である。現在の多重度M3は、該当RLUについて現在実行中の部分処理数(各RLUに対して現在確保されている制御ブロックの数)を示す。完了アドレスADは、該当RLUについてのリビルド系処理対象の全領域のうち、部分処理の実行が完了している最後尾領域を示すアドレスである。
【0099】
次に、図10は、2つのRLUについてのリビルド系処理が実行されている状態を示す図である。以下、図10を例として参照しながら、リカバリ制御部223による部分処理の多重度調整手順について説明する。
【0100】
図10では例として、RLU番号「00」のRLU(以下、「RLU#00」とする)についてのリビルド処理と、RLU番号「01」のRLU(以下、「RLU#01」とする)についてのコピーバック処理とが実行されている状態を示す。
【0101】
図6で説明した手順に従い、構成制御部224は、制御ブロックBL1aを通知することで、リカバリ制御部223に対してRLU#00についてのリビルド処理を要求する。例としてRAL#00に対して多重度「3」が許容されているものとすると、リカバリ制御部223は、制御ブロックBL1a,BL2a,BL3aをRAID制御部221に通知することで、RAID制御部221に各制御ブロックに基づく部分処理を並列に実行させる。
【0102】
また、構成制御部224は、制御ブロックBL1bを通知することで、リカバリ制御部223に対してRLU#01についてのコピーバック処理を要求する。例としてRLU#01に対して多重度「3」が許容されているものとすると、リカバリ制御部223は、制御ブロックBL1b,BL2b,BL3bをRAID制御部221に通知することで、RAID制御部221に各制御ブロックに基づく部分処理を並列に実行させる。
【0103】
以上のように、リカバリ制御部223からRAID制御部221に対して制御ブロックBL1a,BL2a,BL3a,BL1b,BL2b,BL3bが通知されることで、RAID制御部221は、制御ブロックBL1a,BL2a,BL3a,BL1b,BL2b,BL3bのそれぞれに基づく部分処理を並列に実行する。このように、RAID制御部221は、1RLUについての部分処理だけでなく、複数のRLUについての部分処理も並列に実行可能である。
【0104】
リカバリ制御部223は、基本的に、各RLUについて、RLU内多重度上限値M2を超えない範囲で部分処理の多重度を設定する。これとともに、リカバリ制御部223は、リビルド系処理を実行中の全RLUに設定された多重度の合計値が、多重度全体上限値M1を超えないように制御する。上記の図10の状態では、RLU#00についての現在の多重度M3_1は「3」であり、RLU#01についての現在の多重度M3_2は「3」である。リカバリ制御部223は、(M3_1+M3_2)の値が多重度全体上限値M1を超えないように、部分処理の多重度を設定する。
【0105】
リカバリ制御部223は、次のような方法で、部分処理の多重度を動的に調整する。
リカバリ制御部223は、ホストI/O処理の状況に応じて、部分処理の多重度を調整する。ホストI/O処理の状況は、ホストI/O監視部225によってRLUごとに監視される。リカバリ制御部223は、リビルド系処理を実行中のRLUについて、仕掛かり中のホストI/O処理が存在する場合には、存在しない場合より、このRLUについての部分処理の多重度を低下させる。これにより、リビルド系処理の影響によってホストI/O処理の速度ができるだけ低下しないように、多重度が調整される。
【0106】
また、リカバリ制御部223は、CM201内のメモリリソースの使用状況に応じて、部分処理の多重度を調整する。CM201内のメモリリソースの使用状況は、バッファ監視部226によって監視される。バッファ領域231は、少なくともRAID制御部221、ホストI/O制御部222およびリカバリ制御部223によって共通に使用される。このことから、リカバリ制御部223は、例えば、あるRLUについてのリビルド系処理に許容される多重度を判定する際に、同じRLUについての仕掛かり中のホストI/O処理が存在しない場合でも、バッファ領域231の使用量を検出することで、他のRLUについてのホストI/O処理などによる処理負荷の大きさを判断できる。リカバリ制御部223は、バッファ領域231の使用量が所定のしきい値を超えている場合には、しきい値以下である場合より、リビルド系処理を実行中の全RLUについての部分処理の多重度を低下させる。
【0107】
リカバリ制御部223は、例えば図10のRLU#00に対する仕掛かり中のホストI/O処理が存在せず、かつ、バッファ領域231の使用量がしきい値以下である場合には、RLU#00に設定する多重度を、RLU内多重度上限値M2に近づけるように制御する。RLU#00に対する仕掛かり中のホストI/O処理が存在せず、かつ、バッファ領域231の使用量がしきい値以下である場合には、RLU#00についてのリビルド系処理がホストI/O処理の性能に及ぼす影響を考慮する必要がないと考えられる。このため、このような条件下では、RLU#00のRAID構成によらず一定のRLU内多重度上限値M2を、多重度の上限値とすることができる。
【0108】
一方、リカバリ制御部223は、RLU#00に対する仕掛かり中のホストI/O処理が存在する場合や、バッファ領域231の使用量がしきい値を超えている場合には、RLU#00についての多重度の上限値を、多重度設定テーブル242から取得した構成別多重度上限値に抑制する。このような条件下では、RLU#00におけるRAID構成に応じて、RLU#00についての多重度の上限値が設定されることになる。このとき設定される多重度の上限値は、多重度全体上限値M1より低い値となる。
【0109】
また、RLU#00に対する仕掛かり中のホストI/O処理が存在する場合や、バッファ領域231の使用量がしきい値を超えている場合に、RLU#00に設定されたリビルド優先度が「低」である場合には、「高」である場合よりさらに多重度の上限値が低く設定される。本実施の形態では、リビルド優先度が「低」である場合、多重度が「1」に設定されて、そのRLUについての部分処理が並列に実行されなくなる。このようにリビルド優先度に応じて多重度が調整されることで、高い優先度が付与されたRLUほど高い多重度が設定され、リビルド系処理の速度が速くなるように制御される。
【0110】
ここで、例として、RLU内多重度上限値M2が「3」であり、多重度全体上限値M1が「6」以上であるものとする。この条件下で、バッファ領域231の使用量がしきい値以下で、かつ、RLU#00,#01の両方についての仕掛かり中のホストI/O処理が存在しない場合には、図10のように、RLU#00,#01の両方についての多重度が「3」に設定される。この場合、ホストI/O処理に対する影響を考慮する必要がないため、RLU#00,#01のそれぞれについてのリビルド系処理が最も高速に実行されるように制御される。
【0111】
次に、上記の状態から、例として、制御ブロックBL3aに基づくRLU#00の部分処理と、制御ブロックBL3bに基づくRLU#01の部分処理とが、連続して終了した場合を考える。なお、RLU#00,#01の両方とも、リビルド優先度は「高」であるものとする。
【0112】
例えば、制御ブロックBL3aに基づく部分処理の終了時と、制御ブロックBL3bに基づく部分処理の終了時の両方において、バッファ領域231の使用量がしきい値を超えている場合、リカバリ制御部223は、RLU#00,#01の両方について、多重度をRLU内多重度上限値M2より低い値(すなわち、多重度設定テーブル242から取得した、各RLUの構成に対応する値)に抑制する。
【0113】
このように、バッファ領域231の使用量がしきい値を超えている場合には、どのRLUについても、多重度がRLU内多重度上限値M2より小さい値になるように制御される。すなわち、CM201全体の処理負荷が高いと考えられる場合には、リビルド系処理を実行している全RLUについての多重度を一律に低下させて、リビルド系処理全体の処理負荷を軽減することで、CM201全体の処理負荷を軽減する。
【0114】
一方、制御ブロックBL3aに基づく部分処理の終了時と、制御ブロックBL3bに基づく部分処理の終了時の両方において、バッファ領域231の使用量がしきい値以下のままである場合には、次のような処理になる場合がある。まず、制御ブロックBL3aに基づく部分処理の終了時に、RLU#00に対する仕掛かり中のホストI/O処理があった場合、リカバリ制御部223は、RLU#00についての多重度を、RLU内多重度上限値M2より低い値(すなわち、多重度設定テーブル242から取得した、RLU#00の構成に対応する値)に抑制する。例えば、リカバリ制御部223は、制御ブロックBL3aを解放することによって、RLU#00についての多重度を「3」から「2」に低下させる。これにより、仕掛かり中のホストI/O処理性能に与える影響が少なくなるように、RLU#00についてのリビルド系処理速度が抑制され、その処理負荷が軽減される。なお、RLU#00のリビルド優先度が「低」であれば、RLU#00についての多重度はさらに低く設定される。
【0115】
その後、制御ブロックBL3bに基づく部分処理が終了したとき、RLU#01に対する仕掛かり中のホストI/O処理がない場合には、リカバリ制御部223は、RLU#01についての多重度を、RLU内多重度上限値M2である「3」のまま低下させない。仮に、制御ブロックBL3bに基づく部分処理が終了した時点で、RLU#00に対する仕掛かり中のホストI/O処理があった場合でも、リカバリ制御部223は同様に、RLU#01についての多重度を「3」のまま維持する。
【0116】
このように、リビルド系処理の実行中にホストI/O処理も並行して実行されている状況では、リビルド系処理を実行中のRLUのうち、ホストI/O処理が実行されているRLUについての多重度を優先的に低下させる。これにより、ホストI/O処理とリビルド系処理とを合わせた処理による負荷が特定のRLUに偏らないように制御される。
【0117】
ところで、上記のように、リカバリ制御部223は、ホストI/O処理の状況、バッファ領域231の使用状況、RLUごとのリビルド優先度に応じて、およびRLUにおけるRAID構成に応じて、RLUに設定する多重度の上限値を認識する。しかしながら、リビルド系処理を実行中の全RLUに、認識した多重度の上限値を適用してしまうと、全RLUについて設定された多重度の合計値が、多重度全体上限値M1を超えてしまう場合があり得る。そこで、リカバリ制御部223は、各RLUが設定可能な多重度の上限値に対して、全RLUに共通の多重度調整係数C1を乗算することで、全RLUに設定される多重度を均等な割合で低下させ、多重度の合計値を多重度全体上限値M1以内に収めるようにする。
【0118】
例えば、図10において、バッファ領域231の使用量がしきい値以下であり、かつ、RLU#00,#01の両方に対する仕掛かり中のホストI/O処理もないものとする。この場合、リカバリ制御部223は、RLU#00,#01のそれぞれに設定し得る多重度の上限値が、RLU内多重度上限値M2(=3)であると認識する。しかしながら、仮に多重度全体上限値M1が「4」であった場合、RLU#00,#01のそれぞれの多重度を「3」に設定してしまうと、多重度の加算値が「6」となって、多重度全体上限値M1を超えてしまう。
【0119】
この場合、RLU#00,#01に設定する多重度をそれぞれM4_1,M4_2とすると、リカバリ制御部223は、M4_1=M4_2=3として、C1×(M4_1+M4_2)の値が多重度全体上限値M1(=4)以下になるように、多重度調整係数C1を調整する。この例では、C1=2/3と求められるので、リカバリ制御部223は、RLU#00,#01のそれぞれについての多重度を、設定し得る上限値「3」にC1=2/3を乗じた「2」に設定する。
【0120】
このように多重度調整係数C1を用いることにより、RLUごとに認識した多重度の上限値の比率をできるだけ保ったまま、多重度の合計値を低下させて、CM201の処理負荷が一定以上にまで増大しないように制御することができる。
【0121】
リカバリ制御部223は、構成制御部224からリビルド系処理の実行を要求されるごと、および、RAID制御部221から部分処理の完了通知を受けるごとに、その時点での状況に応じて、上記のような多重度の調整を行う。
【0122】
次に、上記の調整処理についてフローチャートを用いて説明する。
図11〜図13は、部分処理の実行を依頼する際のリカバリ制御部の処理手順の例を示すフローチャートである。
【0123】
この図11〜図13の処理は、構成制御部224から制御ブロックの通知を受けてリビルド系処理の実行が依頼されたとき、または、RAID制御部221から制御ブロックの通知を受けて部分処理の実行完了を通知する応答を受けたときに、通知された制御ブロックを参照しながら実行される。ただし、後者の場合(RAID制御部221からの応答を受けた場合)の詳細な処理については、後の図14を用いてあらためて説明する。
【0124】
[ステップS11]リカバリ制御部223は、通知された制御ブロックに設定されたRLUに対する仕掛かり中のホストI/O処理がないかを、ホストI/O監視部225に問い合わせる。リカバリ制御部223は、該当RLUに対する仕掛かり中のホストI/O処理があった場合には、ステップS12の処理を実行する一方、仕掛かり中のホストI/O処理がない場合には、ステップS14の処理を実行する。
【0125】
[ステップS12]リカバリ制御部223は、バッファ領域231の使用量をバッファ監視部226に問い合わせる。リカバリ制御部223は、バッファ監視部226からの応答に基づき、バッファ領域231の使用量が所定のしきい値以下の場合には、ステップS13の処理を実行する一方、しきい値を超えている場合には、ステップS14の処理を実行する。
【0126】
[ステップS13]該当RLUに対する仕掛かり中のホストI/O処理がなく(S11:Yes)、バッファ領域231の使用量がしきい値以下である(S12:Yes)場合、リカバリ制御部223は、該当RLUについての多重度設定値M4に、あらかじめ設定されたRLU内多重度上限値M2を設定する。なお、多重度設定値M4は、この図11〜図13の処理で使用される内部変数であり、例えばRAM212に記憶される。
【0127】
[ステップS14]該当RLUに対する仕掛かり中のホストI/O処理があった場合(S11:No)、または、バッファ領域231の使用量がしきい値を超えていた場合(S12:No)、リカバリ制御部223は、該当RLUに対応するRAID管理テーブル241のレコード241aを参照し、該当RLUに設定されたリビルド優先度を読み出す。リカバリ制御部223は、リビルド優先度が「高」の場合(S14:Yes)、ステップS15の処理を実行する一方、リビルド優先度が「低」の場合(S14:No)、ステップS16の処理を実行する。
【0128】
[ステップS15]該当RLUに設定されたリビルド優先度が「高」の場合(S14:Yes)、リカバリ制御部223は、ステップS14で参照したレコード241aから、該当RLUについてのRAID構成(RAIDレベルおよび使用ディスク数)を読み出す。リカバリ制御部223は、多重度設定テーブルから、RAID構成に対応する構成別多重度上限値を読み込む。リカバリ制御部223は、多重度設定値M4に、多重度設定テーブルから読み込んだ構成別多重度上限値を設定する。
【0129】
[ステップS16]該当RLUに設定されたリビルド優先度が「低」の場合(S14:No)、リカバリ制御部223は、多重度設定値M4に、多重度の下限値「1」を設定する。
【0130】
なお、ステップS16では、多重度設定値M4として、例えば、ステップS15の手順で得られる構成別多重度上限値から一定数を減算した数(ただし、下限値を「1」とする)、または、構成別多重度上限値を所定割合で低下させた数の整数値を設定してもよい。
【0131】
また、例えば、リビルド優先度を3段階以上の値として設定できるようにしてもよい。この場合、リカバリ制御部223は、例えば、ステップS14〜S16の代わりに、多重度設定値M4として、構成別多重度上限値を上限として、リビルド優先度に応じた値を設定してもよい。例えば、多重度設定値M4として、リビルド優先度が「高」の場合には構成別多重度上限値を、リビルド優先度が「中」の場合には構成別多重度上限値の1/2の値の整数値を、リビルド優先度が「低」の場合には「1」を、それぞれ設定してもよい。
【0132】
[ステップS17]リカバリ制御部223は、該当RLUについての多重度設定値M4に、現在設定されている多重度調整係数C1を乗じた(M4×C1)を計算する。これとともに、リカバリ制御部223は、リビルド系処理を実行中の他のRLUについての現在の多重度M3を、RAM212から読み込む。リカバリ制御部223は、リビルド系処理を実行中の他のRLUそれぞれについての(M3×C1)を計算し、他のRLUそれぞれについての(M3×C1)と上記の(M4×C1)との合計値N1を計算する。
【0133】
なお、本実施の形態では、RLUごとの現在の多重度M3をRAM212に設定しておくが、例えば、処理名としてリビルド系処理が設定された制御ブロックをRLUごとに探索することで、RLU別の現在の多重度M3を取得することもできる。
【0134】
[ステップS18]リカバリ制御部223は、算出した合計値N1が多重度全体上限値M1より大きいかを判定する。リカバリ制御部223は、N1がM1より大きい場合(S18:Yes)、ステップS19の処理を実行する一方、N1がM1以下の場合(S18:No)、ステップS21の処理を実行する。
【0135】
[ステップS19]合計値N1が多重度全体上限値M1より大きい場合(S18:Yes)、多重度調整係数C1を減少させて、リビルド系処理を実行中の全RLUについての多重度を低下させる必要がある。リカバリ制御部223は、まず、多重度調整係数C1が所定の下限値であるかを判定する。なお、多重度調整係数C1の下限値は、0より大きく1未満の任意の値に設定される。リカバリ制御部223は、C1が下限値である場合(S19:Yes)、ステップS26の処理を実行する一方、C1が下限値より大きい場合(S19:No)、ステップS20の処理を実行する。
【0136】
[ステップS20]リカバリ制御部223は、多重度調整係数C1を1段階減少させる。この後、ステップS17に戻り、減少されたC1を用いて(M4×C1)および他のRLUそれぞれについての(M3×C1)が計算され、それらの算出結果に基づく合計値N1が計算される。
【0137】
[ステップS21]ステップS17で求められた合計値N1が多重度全体上限値M1以下である場合(S18:No)、リカバリ制御部223は、多重度調整係数C1を増加させて、全体の多重度を高くすることができるかを試す。リカバリ制御部223は、まず、現在設定されているC1が上限値「1」未満であるかを判定する。リカバリ制御部223は、C1が上限値未満である場合(S21:Yes)、ステップS22の処理を実行する一方、C1が上限値に達している場合(S21:No)、ステップS26の処理を実行する。
【0138】
[ステップS22]リカバリ制御部223は、現在設定されている多重度調整係数C1を1段階増加させた値を、変数C2に設定する。なお、変数C2は、この図11〜図13の処理で使用される内部変数であり、例えばRAM212に記憶される。
【0139】
[ステップS23]リカバリ制御部223は、多重度調整係数C1の代わりに変数C2を用いて、ステップS17と同様の計算を行い、他のRLUそれぞれについての(M3×C2)と(M4×C2)との合計値N2を計算する。
【0140】
[ステップS24]リカバリ制御部223は、算出した合計値N2が多重度全体上限値M1より大きいかを判定する。リカバリ制御部223は、N2がM1より大きい場合(S24)、ステップS26の処理を実行する一方、N2がM1以下の場合(S24:No)、ステップS25の処理を実行する。
【0141】
[ステップS25]合計値N2が多重度全体上限値M1以下に収まっている場合、多重度調整係数C1をステップS22で設定した変数C2と同一値に設定することが可能になっているので、リカバリ制御部223は、C1を1段階増加させて、変数C2に一致させる。この後、ステップS21に戻り、増加させたC1が上限値に達したかが判定される。
【0142】
[ステップS26]該当RLUに設定すべき適正な多重度が、(M4×C1)であることが決定される。
例えば、合計値N1が多重度全体上限値M1より大きい場合(S18:Yes)には、N1がM1以下に収まるようになるまで、多重度調整係数C1が徐々に引き下げられていく(S20)。そして、N1がM1以下に収まるようになったとき(S18:No)、C1は上限値「1」より小さくなり(S21:Yes)、かつ、C1より1段階大きいC2に基づくN2はM1より大きくなってしまうことから(S24:Yes)、現在のC1が適正であることになる。
【0143】
また、合計値N1が多重度全体上限値M1以下である場合(S18:No)には、C1が上限値「1」に達するか(S21:No)、あるいは、C1より1段階大きいC2に基づくN2がM1より大きくなる(S24:Yes)まで、C1が徐々に引き上げられる(S25)。これにより、C1が適正な値に設定される。
【0144】
以上のように、該当RLUに設定すべき多重度が決定されると、リカバリ制御部223は、(M4×C1)を、該当RLUについての適正多重度M5として設定する。なお、適正多重度M5は、この図11〜図13の処理で使用される内部変数であり、例えばRAM212に記憶される。リカバリ制御部223は、次のステップS27以降で、該当RLUの実際の多重度を適正多重度M5に一致させるための処理を実行する。
【0145】
[ステップS27]リカバリ制御部223は、現在参照中の制御ブロックが、リカバリ制御部223自身が獲得したものかを判定する。なお、リカバリ制御部223は、例えば、構成制御部224から制御ブロックの通知を受けたときに、その制御ブロックのIDをRAM212に記憶しておくことで、ステップS27の判定処理を実行可能である。
【0146】
リカバリ制御部223は、参照中の制御ブロックが、自身が獲得したものである場合(S27:Yes。例えば、図6の制御ブロックBL2〜BL4のいずれかである場合)、ステップS28の処理を実行する。一方、リカバリ制御部223は、参照中の制御ブロックが、構成制御部224から通知された制御ブロックである場合(S27:No。例えば、図6の制御ブロックBL1の場合)、ステップS31の処理を実行する。
【0147】
[ステップS28]リカバリ制御部223は、該当RLUについての現在の多重度M3が、適正多重度M5より大きいかを判定する。リカバリ制御部223は、M3がM5より大きい場合(S28:Yes)、ステップS29の処理を実行する一方、M3がM5以下である場合(S28:No)、ステップS32の処理を実行する。
【0148】
[ステップS29]該当RLUについての現在の多重度M3が適正多重度M5より大きい場合(S28:Yes)、該当RLUについての実際の多重度を低下させる必要がある。このため、リカバリ制御部223は、まず、該当RLUについての現在の多重度M3を「1」だけデクリメントする。
【0149】
[ステップS30]リカバリ制御部223は、現在参照している制御ブロックを解放して、この制御ブロックに対応する処理を終了する。
[ステップS31]リカバリ制御部223は、該当RLUについての現在の多重度M3が、適正多重度M5より小さいかを判定する。リカバリ制御部223は、M3がM5より小さい場合(S31:Yes)、ステップS36の処理を実行する一方、M3がM5以上である場合(S31:No)、ステップS32の処理を実行する。
【0150】
[ステップS32]ステップS28で、該当RLUについての現在の多重度M3が適正多重度以下である場合(S28:No)、または、ステップS31で、該当RLUについての現在の多重度M3が適正多重度以上である場合(S31:No)には、該当RLUについての実際の多重度が適正化されていると判断できる。この場合、リカバリ制御部223は、該当RLUについてのリビルド系処理対象領域のうち、RAID制御部221に対して部分処理を依頼していない最も先頭側の領域を示すアドレスを判定する。リカバリ制御部223は、判定したアドレスを、参照中の制御ブロックにおけるアドレスの領域に、次の処理対象として上書き設定する。
【0151】
具体的には、リカバリ制御部223は、該当RLUが設定されている制御ブロックを探索し、探索された制御ブロックに設定されたアドレスの中から、リビルド系処理対象の領域における最も後ろ側(先頭とは反対側)の領域を示すアドレスを抽出する。そして、リカバリ制御部223は、抽出したアドレスが示す領域の次の領域を示すアドレスを、参照中の制御ブロックにおけるアドレスの領域に上書き設定する。
【0152】
[ステップS33]リカバリ制御部223は、参照している制御ブロックに基づく現在の処理が、構成制御部224からの依頼に応じた処理かを判定する。リカバリ制御部223は、現在の処理が構成制御部224からの依頼に応じた処理である場合(S33:Yes。)、ステップS34の処理を実行する。一方、リカバリ制御部223は、現在の処理が、RAID制御部221からの応答に応じた処理である場合(S33:No)、ステップS35の処理を実行する。
【0153】
[ステップS34]現在の処理が構成制御部224からの依頼に応じた処理である場合(S33:Yes)、RAID制御部221に依頼する、参照している制御ブロックに基づく部分処理は、現在の多重度M3に反映されていない。このため、リカバリ制御部223は、該当RLUに対応する現在の多重度M3を「1」だけインクリメントする。
【0154】
なお、ステップS33(Yes),S34の順に処理が実行されるケースとしては、例えば、図6のタイミングT18でのリカバリ制御部223の処理がある。一方、ステップS33でNoと判定されるケースとしては、例えば、図6のタイミングT17や、タイミングT23でのリカバリ制御部223の処理がある。
【0155】
[ステップS35]リカバリ制御部223は、ステップS32でアドレスを更新した、参照中の制御ブロックのIDを、RAID制御部221に通知して、その制御ブロックに基づく部分処理の実行を依頼する。これにより、参照していた制御ブロックに対応する処理が終了される。
【0156】
[ステップS36]ステップS31で、該当RLUについての現在の多重度M3が適正多重度より小さい場合(S31:Yes)、該当RLUについての多重度を高くすることができる。この場合、リカバリ制御部223は、新規に制御ブロックを獲得する。このとき、獲得した制御ブロックのRLU番号、処理名、読み出し元ディスク番号および書き込み先ディスク番号に、参照している制御ブロックに設定されたものと同じ情報を設定する。
【0157】
[ステップS37]リカバリ制御部223は、ステップS32と同様の手順で、該当RLUについてのリビルド系処理対象領域のうち、RAID制御部221に対して部分処理を依頼していない最も先頭側の領域を示すアドレスを判定する。リカバリ制御部223は、判定したアドレスを、新規に獲得した制御ブロックにおけるアドレスの領域に、次の処理対象として上書き設定する。
【0158】
[ステップS38]リカバリ制御部223は、新規に獲得した制御ブロックのIDをRAID制御部221に通知して、その制御ブロックに基づく部分処理の実行を依頼する。
[ステップS39]リカバリ制御部223は、該当RLUについての現在の多重度M3を「1」だけインクリメントする。この後、ステップS31の処理に戻る。
【0159】
なお、ステップS39の処理は、例えば、ステップS31の実行後から、ステップS38の処理を実行して次にステップS31の実行を開始するまでの間の任意のタイミングで実行可能である。
【0160】
図13に示した処理では、ステップS27(Yes),S28(Yes),S29,S30の順の処理が行われた場合、該当RLUについての多重度が減少して、該当RLUについてのリビルド系処理の速度が低下する。一方、ステップS27(No),S31(Yes)の順に処理が行われた場合、その後にステップS36〜S39の処理が実行されることで、該当RLUについての多重度が増加して、該当RLUについてのリビルド系処理の速度が高められる。
【0161】
なお、図13の処理例では、参照中の制御ブロックが構成制御部224から通知されたものである場合のみ、新規の制御ブロックを獲得して多重度を増加させるものとした。しかしながら、例えば、参照中の制御ブロックがリカバリ制御部223自身が獲得したものである場合でも、新規の制御ブロックを獲得して多重度を増加させることができるようにしてもよい。
【0162】
次に、図14は、RAID制御部からの応答を受けたときのリカバリ制御部の処理手順の例を示すフローチャートである。
[ステップS51]リカバリ制御部223は、RAID制御部221から、リビルド系処理の依頼に対する応答を受ける。このとき、リカバリ制御部223は、実行が完了した部分処理に対応する制御ブロックのIDの通知を受ける。以後、リカバリ制御部223は、RAID制御部221から通知されたIDに対応する制御ブロックを参照しながら処理を行う。
【0163】
[ステップS52]リカバリ制御部223は、RAID制御部221から通知された制御ブロックに設定されたRLUについて、部分処理の実行が完了した領域の最後尾を示すアドレスを、RAM212内の完了アドレスADに設定する。
【0164】
具体的には、リカバリ制御部223は、該当RLUが設定されている制御ブロックを探索し、探索された制御ブロックに設定されたアドレスの中から、リビルド系処理対象の領域における最も先頭側の領域を示すアドレスを抽出する。リカバリ制御部223は、抽出したアドレスが示す領域より1ブロック分先頭側の領域のアドレスを、該当RLUについての完了アドレスADとしてRAM212に記録する。
【0165】
[ステップS53]リカバリ制御部223は、該当RLUについてのリビルド系処理対象の全領域について、RAID制御部221に対する部分処理の依頼が済んだかを判定する。
【0166】
具体的には、リカバリ制御部223は、該当RLUが設定されている制御ブロックを探索し、探索された制御ブロックに設定されたアドレスの中から、リビルド系処理対象の領域における最も後ろ側(先頭とは反対側)の領域を示すアドレスを抽出する。リカバリ制御部223は、抽出したアドレスが示す領域が、リビルド系処理対象の領域の最後尾である場合に、全対象領域についての部分処理の依頼が済んでいると判定する。
【0167】
リカバリ制御部223は、全対象領域についての部分処理が依頼済みである場合(S53:Yes)、ステップS54の処理を実行する。一方、リカバリ制御部223は、部分処理を依頼していない領域が存在する場合(S53:No)には、図11のステップS11を起点として図11〜図13に示した処理を実行する。すなわち、リカバリ制御部223は、リビルド系処理対象の全領域について部分処理を依頼するまでの間、RAID制御部221からの応答を受けるたびに、該当RLUについての多重度が適正かを判定し、多重度の調整を行う。
【0168】
[ステップS54]リビルド系処理対象の全領域について部分処理が依頼済みである場合(S53:Yes)、リカバリ制御部223は、リビルド系処理対象の全領域について部分処理が完了したかを判定する。リカバリ制御部223は、RAM212に設定された、該当RLUについての完了アドレスADが、リビルド系処理対象領域の最後尾を示す場合に、全領域について部分処理が完了したと判定して、ステップS55の処理を実行する(S54:Yes)。
【0169】
一方、リカバリ制御部223は、リビルド系処理対象の全領域について部分処理が完了していない場合(S54:No)、全領域について部分処理が完了するまで待ち合わせる。この場合、リカバリ制御部223は、同じRLUについての他の制御ブロックに基づく部分処理の完了通知をRAID制御部221から受けたとき、この制御ブロックを参照しながら図14の処理を実行したときに、ステップS52の処理によって完了アドレスADを更新する。ステップS54では、リカバリ制御部223は、他の制御ブロックを参照した処理によって、完了アドレスADがリビルド系処理対象領域の最後尾を示すようになったとき、ステップS55の処理を開始する。
【0170】
[ステップS55]リカバリ制御部223は、現在参照中の制御ブロックが、リカバリ制御部223自身が獲得したものかを判定する。リカバリ制御部223は、参照中の制御ブロックが、自身が獲得したものである場合(S55:Yes。例えば、図6の制御ブロックBL2〜BL4のいずれかである場合)、参照中の制御ブロックに基づく処理を終了する。この場合、参照されていた制御ブロックは、構成制御部224から通知された制御ブロックを参照した、後述するステップS57の処理によって、解放される。
【0171】
一方、リカバリ制御部223は、参照中の制御ブロックが、構成制御部224から通知された制御ブロックである場合(S55:No。例えば、図6の制御ブロックBL1の場合)、ステップS56の処理を実行する。この場合、リカバリ制御部223は、構成制御部224から通知された制御ブロックを参照しながら、ステップS56以降の処理によって、該当RLUについてのリビルド系処理の完了処理を行い、構成制御部224に対して処理の完了を通知する。
【0172】
[ステップS56]リカバリ制御部223は、参照中の制御ブロックと同じRLU番号および同じ処理名が設定された、リカバリ制御部223自身が獲得した制御ブロックがあるかを判定する。該当RLUについての現在の多重度M3が2以上の場合、構成制御部224から通知された制御ブロックの他に、同じRLUについてのリカバリ制御部223自身が獲得した制御ブロックが存在することになる。
【0173】
リカバリ制御部223は、自身が獲得した制御ブロックがある場合(S56:Yes)、ステップS57の処理を実行する一方、自身が獲得した制御ブロックがない場合(S56:No)、ステップS58の処理を実行する。
【0174】
[ステップS57]リカバリ制御部223は、自身が獲得した制御ブロックを解放する。これにより、参照中の制御ブロック以外に、同じRLU番号および同じ処理名が設定された制御ブロックが存在しない状態となる。
【0175】
[ステップS58]リカバリ制御部223は、該当RLUについての現在の多重度M3を、「0」にリセットする。
[ステップS59]リカバリ制御部223は、参照中の制御ブロックから読み出し元ディスク番号および書き込み先ディスク番号を削除する。リカバリ制御部223は、各ディスク番号を削除した制御ブロックのIDを構成制御部224に通知して、制御ブロックの処理名が示すリビルド系処理の実行完了を通知する応答を行う。
【0176】
応答を受けた構成制御部224は、リカバリ制御部223から通知されたIDに対応する制御ブロックを解放して、リカバリ制御部223に依頼したリビルド系処理を完了させる。
【0177】
以上説明した第2の実施の形態によれば、バッファ領域231の使用量、RLUごとの仕掛かり中のホストI/O処理の有無、および、RLUごとのリビルド優先度に応じて、リビルド系処理における部分処理の多重度が、RLUごとに最適化される。これにより、ホストI/O処理性能に与える影響をできるだけ抑制しながら、リビルド系処理を高速化することができる。
【0178】
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) 記憶装置群と、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、前記論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、前記第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、を有するストレージ制御装置と、
を備え、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とするストレージシステム。
【0179】
(付記2) 前記リビルド制御部は、前記記憶装置群に含まれる記憶装置のうち互いに異なる複数の記憶装置の記憶領域によってそれぞれ構成され、データが異なる記憶装置に冗長化されるようにデータ記録がそれぞれ制御される複数の論理記憶領域について、それぞれ1つ以上の前記部分処理の実行を前記アクセス処理部に指示し、
前記アクセス処理部は、前記複数の論理記憶領域のそれぞれについての1つ以上の前記部分処理の実行指示に応じて、前記複数の論理記憶領域のそれぞれについての前記部分処理を並列に実行する、
ことを特徴とする付記1記載のストレージシステム。
【0180】
(付記3) 前記アクセス処理部は、ホスト装置からの要求に応じて前記複数の論理記憶領域の少なくとも1つにアクセスするホストアクセス処理を、前記リビルド処理と並列に実行し、
前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域に対する前記ホストアクセス処理が実行されていない場合と比較して、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させる、
ことを特徴とする付記2記載のストレージシステム。
【0181】
(付記4) 前記ストレージ制御装置は、データを冗長化するための論理記憶領域の仕様ごとに、前記ホストアクセス処理に与える影響度合いが略均等になるように前記部分処理の多重度が設定された多重度設定値記憶部を有し、
前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域の仕様に対応する多重度を前記多重度設定値記憶部から取得し、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を前記多重度設定値記憶部から取得した多重度に設定する、
ことを特徴とする付記3記載のストレージシステム。
【0182】
(付記5) 前記リビルド制御部は、実行中の前記リビルド処理の対象の論理記憶領域と同じ論理記憶領域に対する前記ホストアクセス処理が実行されていない場合、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を、異なる仕様の論理記憶領域間で共通にあらかじめ定められた多重度に設定することを特徴とする付記4記載のストレージシステム。
【0183】
(付記6) 前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域に対して設定された優先度が低いほど、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする付記3記載のストレージシステム。
【0184】
(付記7) 前記リビルド制御部は、前記ストレージ制御装置におけるバッファ使用量が所定のしきい値を超えている場合、前記バッファ使用量が前記しきい値以下の場合と比較して、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする付記2または3記載のストレージシステム。
【0185】
(付記8) 前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了するたびに、前記バッファ使用量が前記しきい値を超えているかを判定し、前記バッファ使用量が前記しきい値を超えている場合、前記バッファ使用量が前記しきい値以下である場合と比較して、実行が完了した前記部分処理が処理対象とする論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする付記7記載のストレージシステム。
【0186】
(付記9) 前記ストレージ制御装置は、データを冗長化するための論理記憶領域の仕様ごとに、前記ホストアクセス処理に与える影響度合いが略均等になるように前記部分処理の多重度が設定された多重度設定値記憶部を有し、
前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了したとき、前記バッファ使用量が前記しきい値を超えている場合には、前記バッファ使用量が前記しきい値以下である場合と比較して、実行が完了した前記部分処理が処理対象とする前記論理記憶領域の仕様に対応する多重度を前記多重度設定値記憶部から取得し、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を前記多重度設定値記憶部から取得した多重度に設定する、
ことを特徴とする付記8記載のストレージシステム。
【0187】
(付記10) 前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了したとき、前記バッファ使用量が前記しきい値を超えている場合には、前記バッファ使用量が前記しきい値以下である場合と比較して、実行が完了した前記部分処理が処理対象とする論理記憶領域についての前記部分処理の多重度を、異なる仕様の論理記憶領域間で共通にあらかじめ定められた多重度に設定することを特徴とする付記9記載のストレージシステム。
【0188】
(付記11) 前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了したとき、前記バッファ使用量が前記しきい値を超えている場合には、前記バッファ使用量が前記しきい値以下である場合と比較して、実行が完了した前記部分処理が処理対象とする論理記憶領域に対して設定された優先度が低いほど、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする付記8記載のストレージシステム。
【0189】
(付記12) 前記アクセス処理部は、ホスト装置からの要求に応じて前記複数の論理記憶領域の少なくとも1つにアクセスするホストアクセス処理を、前記リビルド処理と並列に実行し、
前記リビルド制御部は、前記アクセス処理部において前記部分処理の実行が完了するたびに、実行が完了した前記部分処理が処理対象とする論理記憶領域に対する前記ホストアクセス処理が前記アクセス処理部で実行されているか否か、または、前記ストレージ制御装置におけるバッファ使用量が所定のしきい値を超えているか否かに応じて、実行が完了した前記部分処理が処理対象とする論理記憶領域についての前記部分処理の多重度を調整するとともに、実行中の前記部分処理の総数が所定の上限値以下でかつ当該上限値に近づくように、各論理記憶領域についての前記部分処理の多重度を一定割合で増減することを特徴とする付記2記載のストレージシステム。
【0190】
(付記13) 前記リビルド制御部は、前記論理記憶領域についての前記リビルド処理が完了するまでの間、前記アクセス処理部に実行を指示した複数の前記部分処理のうちのいずれかが完了すると、次の未処理の前記分割範囲についての前記部分処理の実行を前記アクセス処理部に指示することを特徴とする付記1記載のストレージシステム。
【0191】
(付記14) 前記アクセス処理部は、
前記リビルド処理によって前記予備用記憶装置に書き込まれたデータを前記第2の記憶装置に書き戻すコピーバック処理、または、前記複数の論理記憶領域のいずれかについての前記リビルド処理を、当該論理記憶領域に割り当てられた前記第1の記憶装置を当該論理記憶領域から切り離さずに実行する冗長コピー処理についても、前記部分処理を単位として実行し、
前記リビルド制御部から受け付けた、前記冗長コピー処理または前記コピーバック処理に含まれる複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とする付記1記載のストレージシステム。
【0192】
(付記15) 記憶装置群に含まれる記憶装置に対するアクセスを制御するストレージ制御装置において、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、
前記論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、前記第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、
を有し、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とするストレージ制御装置。
【0193】
(付記16) 記憶装置群に含まれる記憶装置に対するアクセスを制御するストレージ制御装置におけるストレージ制御方法であって、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、前記第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して実行するとともに、複数の前記部分処理を並列に実行する、
ことを特徴とするストレージ制御方法。
【0194】
(付記17) 前記記憶装置群に含まれる記憶装置のうち互いに異なる複数の記憶装置の記憶領域によってそれぞれ構成され、データが異なる記憶装置に冗長化されるようにデータ記録がそれぞれ制御される複数の論理記憶領域について、それぞれ1つ以上の前記部分処理を並列に実行することで、前記複数の論理記憶領域のそれぞれについての前記部分処理を並列に実行する、
ことを特徴とする付記16記載のストレージ制御方法。
【0195】
(付記18) 前記ストレージ制御装置は、ホスト装置からの要求に応じて前記複数の論理記憶領域の少なくとも1つにアクセスするホストアクセス処理を、前記リビルド処理と並列に実行可能であり、
前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が実行されている場合、当該論理記憶領域に対する前記ホストアクセス処理が実行されていない場合と比較して、当該論理記憶領域を処理対象として実行する前記部分処理の多重度を低下させる、
ことを特徴とする付記17記載のストレージ制御方法。
【0196】
(付記19) 前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が実行中である場合、データを冗長化するための論理記憶領域の仕様ごとに、前記ホストアクセス処理に与える影響度合いが略均等になるように前記部分処理の多重度が設定された多重度設定値記憶部を参照し、前記ホストアクセス処理および前記リビルド処理の両方が実行中である論理記憶領域の仕様に対応する多重度を前記多重度設定値記憶部から取得し、当該論理記憶領域を処理対象として実行する前記部分処理の多重度を前記多重度設定値記憶部から取得した多重度に設定する、
ことを特徴とする付記18記載のストレージ制御方法。
【0197】
(付記20) 前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が実行中である場合、当該論理記憶領域に対して設定された優先度が低いほど、当該論理記憶領域を処理対象として実行する前記部分処理の多重度を低下させることを特徴とする付記18記載のストレージ制御方法。
【符号の説明】
【0198】
1 ストレージシステム
10 ストレージ制御装置
11 リビルド制御部
12 アクセス処理部
21〜25 記憶装置
A1_1,A1_2,A2_1,A2_2,A3_1,A3_2,A4_1,A4_2,A5_1,A5_2 領域
P1,P2 部分処理
【特許請求の範囲】
【請求項1】
記憶装置群と、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、前記論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、前記第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、を有するストレージ制御装置と、
を備え、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とするストレージシステム。
【請求項2】
前記リビルド制御部は、前記記憶装置群に含まれる記憶装置のうち互いに異なる複数の記憶装置の記憶領域によってそれぞれ構成され、データが異なる記憶装置に冗長化されるようにデータ記録がそれぞれ制御される複数の論理記憶領域について、それぞれ1つ以上の前記部分処理の実行を前記アクセス処理部に指示し、
前記アクセス処理部は、前記複数の論理記憶領域のそれぞれについての1つ以上の前記部分処理の実行指示に応じて、前記複数の論理記憶領域のそれぞれについての前記部分処理を並列に実行する、
ことを特徴とする請求項1記載のストレージシステム。
【請求項3】
前記アクセス処理部は、ホスト装置からの要求に応じて前記複数の論理記憶領域の少なくとも1つにアクセスするホストアクセス処理を、前記リビルド処理と並列に実行し、
前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域に対する前記ホストアクセス処理が実行されていない場合と比較して、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させる、
ことを特徴とする請求項2記載のストレージシステム。
【請求項4】
前記ストレージ制御装置は、データを冗長化するための論理記憶領域の仕様ごとに、前記ホストアクセス処理に与える影響度合いが略均等になるように前記部分処理の多重度が設定された多重度設定値記憶部を有し、
前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域の仕様に対応する多重度を前記多重度設定値記憶部から取得し、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を前記多重度設定値記憶部から取得した多重度に設定する、
ことを特徴とする付記3記載のストレージシステム。
【請求項5】
前記リビルド制御部は、実行中の前記リビルド処理の対象の論理記憶領域と同じ論理記憶領域に対する前記ホストアクセス処理が実行されていない場合、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を、異なる仕様の論理記憶領域間で共通にあらかじめ定められた多重度に設定することを特徴とする請求項4記載のストレージシステム。
【請求項6】
前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域に対して設定された優先度が低いほど、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする請求項3記載のストレージシステム。
【請求項7】
前記リビルド制御部は、前記ストレージ制御装置におけるバッファ使用量が所定のしきい値を超えている場合、前記バッファ使用量が前記しきい値以下の場合と比較して、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする請求項2または3記載のストレージシステム。
【請求項8】
前記アクセス処理部は、
前記リビルド処理によって前記予備用記憶装置に書き込まれたデータを前記第2の記憶装置に書き戻すコピーバック処理、または、前記複数の論理記憶領域のいずれかについての前記リビルド処理を、当該論理記憶領域に割り当てられた前記第1の記憶装置を当該論理記憶領域から切り離さずに実行する冗長コピー処理についても、前記部分処理を単位として実行し、
前記リビルド制御部から受け付けた、前記冗長コピー処理または前記コピーバック処理に含まれる複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とする請求項1記載のストレージシステム。
【請求項9】
記憶装置群に含まれる記憶装置に対するアクセスを制御するストレージ制御装置において、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、
前記論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、前記第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、
を有し、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とするストレージ制御装置。
【請求項10】
記憶装置群に含まれる記憶装置に対するアクセスを制御するストレージ制御装置におけるストレージ制御方法であって、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、前記第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して実行するとともに、複数の前記部分処理を並列に実行する、
ことを特徴とするストレージ制御方法。
【請求項1】
記憶装置群と、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、前記論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、前記第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、を有するストレージ制御装置と、
を備え、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とするストレージシステム。
【請求項2】
前記リビルド制御部は、前記記憶装置群に含まれる記憶装置のうち互いに異なる複数の記憶装置の記憶領域によってそれぞれ構成され、データが異なる記憶装置に冗長化されるようにデータ記録がそれぞれ制御される複数の論理記憶領域について、それぞれ1つ以上の前記部分処理の実行を前記アクセス処理部に指示し、
前記アクセス処理部は、前記複数の論理記憶領域のそれぞれについての1つ以上の前記部分処理の実行指示に応じて、前記複数の論理記憶領域のそれぞれについての前記部分処理を並列に実行する、
ことを特徴とする請求項1記載のストレージシステム。
【請求項3】
前記アクセス処理部は、ホスト装置からの要求に応じて前記複数の論理記憶領域の少なくとも1つにアクセスするホストアクセス処理を、前記リビルド処理と並列に実行し、
前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域に対する前記ホストアクセス処理が実行されていない場合と比較して、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させる、
ことを特徴とする請求項2記載のストレージシステム。
【請求項4】
前記ストレージ制御装置は、データを冗長化するための論理記憶領域の仕様ごとに、前記ホストアクセス処理に与える影響度合いが略均等になるように前記部分処理の多重度が設定された多重度設定値記憶部を有し、
前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域の仕様に対応する多重度を前記多重度設定値記憶部から取得し、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を前記多重度設定値記憶部から取得した多重度に設定する、
ことを特徴とする付記3記載のストレージシステム。
【請求項5】
前記リビルド制御部は、実行中の前記リビルド処理の対象の論理記憶領域と同じ論理記憶領域に対する前記ホストアクセス処理が実行されていない場合、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を、異なる仕様の論理記憶領域間で共通にあらかじめ定められた多重度に設定することを特徴とする請求項4記載のストレージシステム。
【請求項6】
前記リビルド制御部は、前記複数の論理記憶領域のうちの同じ論理記憶領域に対する前記ホストアクセス処理および前記リビルド処理が前記アクセス処理部で実行されている場合、当該論理記憶領域に対して設定された優先度が低いほど、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする請求項3記載のストレージシステム。
【請求項7】
前記リビルド制御部は、前記ストレージ制御装置におけるバッファ使用量が所定のしきい値を超えている場合、前記バッファ使用量が前記しきい値以下の場合と比較して、前記アクセス処理部に実行させる当該論理記憶領域についての前記部分処理の多重度を低下させることを特徴とする請求項2または3記載のストレージシステム。
【請求項8】
前記アクセス処理部は、
前記リビルド処理によって前記予備用記憶装置に書き込まれたデータを前記第2の記憶装置に書き戻すコピーバック処理、または、前記複数の論理記憶領域のいずれかについての前記リビルド処理を、当該論理記憶領域に割り当てられた前記第1の記憶装置を当該論理記憶領域から切り離さずに実行する冗長コピー処理についても、前記部分処理を単位として実行し、
前記リビルド制御部から受け付けた、前記冗長コピー処理または前記コピーバック処理に含まれる複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とする請求項1記載のストレージシステム。
【請求項9】
記憶装置群に含まれる記憶装置に対するアクセスを制御するストレージ制御装置において、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置に対してアクセスを行うアクセス処理部と、
前記論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、前記第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理を前記アクセス処理部に実行させるリビルド制御部と、
を有し、
前記リビルド制御部は、前記リビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して、前記アクセス処理部に対して前記部分処理の実行を指示し、
前記アクセス処理部は、前記リビルド制御部から受け付けた複数の前記部分処理の実行指示に応じて、指示された複数の前記部分処理を並列に実行する、
ことを特徴とするストレージ制御装置。
【請求項10】
記憶装置群に含まれる記憶装置に対するアクセスを制御するストレージ制御装置におけるストレージ制御方法であって、
前記記憶装置群に含まれる複数の記憶装置の記憶領域によって構成され、データが異なる記憶装置に冗長化されるようにデータ記録が制御される論理記憶領域に割り当てられた記憶装置のうち、第1の記憶装置に記録されていたデータと同一のデータを、前記第1の記憶装置以外の記憶装置から読み出したデータを基に生成して、前記記憶装置群に含まれる予備用記憶装置または前記第1の記憶装置と交換された第2の記憶装置に書き込むリビルド処理を、データの読み出し対象範囲を分割した分割範囲からデータを読み出す処理と、当該分割範囲から読み出したデータに基づいて他の記憶装置にデータを書き込む処理との組み合わせを含む部分処理に分割して実行するとともに、複数の前記部分処理を並列に実行する、
ことを特徴とするストレージ制御方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【公開番号】特開2013−54407(P2013−54407A)
【公開日】平成25年3月21日(2013.3.21)
【国際特許分類】
【出願番号】特願2011−190133(P2011−190133)
【出願日】平成23年8月31日(2011.8.31)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成25年3月21日(2013.3.21)
【国際特許分類】
【出願日】平成23年8月31日(2011.8.31)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]