【実施例1】
【0014】
実施例1に係るストレージシステムを含む計算機システムの概要を説明する。
【0015】
ストレージシステムは、例えば、
図1に示す上位ストレージ装置(第2のストレージ装置)100により構成される。ストレージシステムは、第1のストレージ装置の一例である外部ストレージ装置40を含んでも良い。上位ストレージ装置100のDKU160には、第1のストレージ装置の一例である下位ストレージ装置180が複数備えられている。上位ストレージ装置100においては、複数の下位ストレージ装置180の記憶領域により構成される容量プール(以下、プールという)が管理される。また、上位ストレージ装置100においては、プールの領域を用いてRAIDグループが構成される。すなわち、プールの領域を構成する複数の下位ストレージ装置180を用いて、RAIDグループを構成する。
【0016】
RAIDグループの記憶領域は、複数のサブ記憶領域列で構成されている。各サブ記憶領域列は、RAIDグループを構成する複数のストレージ装置(下位ストレージ装置及び/又は外部ストレージ装置)に跨っており、複数のストレージ装置に対応した複数のサブ記憶領域で構成されている。ここで、1つのサブ記憶領域を、「ストライプ」と呼び、複数のストライプで構成された一列を、「ストライプ列」と呼ぶ。複数のストライプ列によって、RAIDグループの記憶領域が構成されている。
【0017】
RAIDには、いくつかのレベル(以下、「RAIDレベル)という)がある。
【0018】
例えば、RAID5では、RAID5に対応したホストコンピュータから指定されたライト対象のデータは、所定サイズのデータ(以下、便宜上「データ単位」という)に分割されて、各データ単位が、複数のデータ要素に分割され、複数のデータ要素が、複数のストライプに書き込まれる。また、RAID5では、ストレージ装置に障害が発生したことによりそのストレージ装置から読み出せなくなったデータ要素をリビルドするために、各データ単位に対して、“パリティ”と呼ばれる冗長な情報(以下、「冗長コード」)が生成され、その冗長コードも、同一のストライプ列のストライプに書き込まれる。例えば、RAIDグループを構成するストレージ装置の数が4である場合は、そのうちの3つのストレージ装置に対応する3つのストライプに、データ単位を構成する3つのデータ要素が書き込まれ、残りの1つのストレージ装置に対応するストライプに、冗長コードが書き込まれる。以下、データ要素と冗長コードとを区別しない場合には、両者をそれぞれストライプデータ要素ということもある。
【0019】
また、RAID6では、RAIDグループを構成する複数の記憶装置のうちの2つのストレージ装置に障害が発生した等の理由により、データ単位を構成する複数のデータ要素のうちの2つのデータ要素を読み出すことができない場合に、これら2つのデータ要素を復元することができるように、各データ単位に対して、2種類の冗長コード(Pパリティ、Qパリティという)が生成されて、それぞれの冗長コードが同一のストライプ列のストライプに書き込まれる。
【0020】
また、上記に説明した以外にもRAIDレベルは存在する(例えばRAID1〜4)。また、データの冗長化技術として、3重ミラー(Triplication)、パリティを3個用いたトリプルパリティ技術等もある。また、冗長コードの生成技術についても、ガロア演算を用いたReed−solomon符号や、EVEN−ODD等さまざまな技術が存在する。本発明の実施例では、主にRAID5,6について説明するが、これは本発明を限定するものではなく、上述した方法の置き換えによる応用が可能である。
【0021】
上位ストレージ装置100は、下位ストレージ装置180のいずれかの下位ストレージ装置180が故障した場合に、例えば、以下に示す第1の処理又第2の処理により、故障したストレージ装置180に格納されているデータ要素を復元する。
【0022】
第1の処理としては、マイクロプロセッサ(MP)121が、故障した下位ストレージ装置180に格納されていたデータ要素を復元するために必要なデータ(例えば、他のデータ要素及びパリティ)を、そのデータを格納している複数の下位ストレージ装置180から取得して、インターフェースデバイス(例えば、BEPK140)の転送バッファ142に格納させ、BEPK140のパリティ演算器141により、転送バッファ142のデータに基づいてデータ要素を復元し、当該データ要素を所定の下位ストレージ装置180に格納させる。この第1の処理によると、CM131にデータ要素を復元させるためのデータを格納しないで済むので、CM131及び上位ストレージ装置100の内部ネットワーク150に対する負荷を低減することができる。
【0023】
第2の処理としては、MP121が、パスグループのいずれかの下位ストレージ装置180に、故障したストレージ装置180に格納されていたデータ要素を復元するために必要なデータであって、当該パスグループに属する下位ストレージ装置180に格納されているデータ(例えば、他のデータ要素、及び/又はパリティ)を収集させ、収集したデータに基づいて、データ要素を復元するための演算を行わせて復元用データの一例としての部分復元データを生成させ、当該部分復元データを取得して転送バッファ142に格納する。また、MP121は、転送バッファ142に格納された部分復元データを、他のパスグループのいずれかの下位ストレージ装置180に対して送信して、この下位ストレージ装置180により、部分復元データに基づいて、消失したデータ要素を復元させ、いずれかの下位ストレージ装置180に格納させる。この第2の処理によると、CM131にデータ要素を復元させるためのデータを格納しないで済むので、CM131及び上位ストレージ装置100の内部ネットワークに対する負荷を低減することができる。また、下位ストレージ装置180において、他のデータ要素及び/又は、パリティを用いて、部分復元データを生成し、部分復元データをBEPK140に送信するので、下位ストレージ装置180からBEPK140に送信するデータ量を低減することができる。また、上位ストレージ装置100のパリティ演算器141を使わずにデータを復元するため、パリティ演算器141の負荷を軽減することができる。
【0024】
まず、実施例1に係るストレージシステムを含む計算機システムを説明する。
【0025】
図1は、実施例1に係る計算機システムのハードウェア構成図である。
【0026】
計算機システムは、1以上のホスト計算機(以下、ホストという)10と、管理サーバ20と、上位ストレージ装置100とを含む。ホスト計算機10と、管理サーバ20と、上位ストレージ装置100とは、ネットワーク30を介して接続されている。ネットワーク30は、ローカルエリアネットワークであっても良く、ワイドエリアネットワークであっても良い。また、上位ストレージ装置100に、1以上の外部ストレージ装置40を接続するようにしても良い。外部ストレージ装置40は、1つ以上の記憶デバイスを含む。記憶デバイスは、不揮発性の記憶媒体であって、例えば、磁気ディスク、フラッシュメモリ、その他半導体メモリである。
【0027】
ホスト10は、例えば、アプリケーションを実行する計算機であり、上位ストレージ装置100からアプリケーションに利用するデータを読み出したり、上位ストレージ装置100にアプリケーションで作成したデータを書き込んだりする。
【0028】
管理サーバ20は、計算機システムを管理する管理処理を実行するための管理者により使用される計算機である。管理サーバ20は、入力デバイスに対する管理者の操作により、データを復元する際に実行させるデータ復元処理の種類の設定を受け付け、上位ストレージ装置100に受け付けたデータ復元処理を実行させるように設定する。
【0029】
上位ストレージ装置100は、1以上のフロントエンドパッケージ(FEPK)110と、保守インターフェース(保守I/F)115と、1以上のマイクロプロセッサパッケージ(MPPK)120と、1以上のキャッシュメモリパッケージ(CMPK)130と、1以上のバックエンドパッケージ(BEPK)140と、内部ネットワーク150と、1以上のディスクユニット(DKU)160とを有する。FEPK110、保守I/F115、MPPK120、CMPK130、及びBEPK140は、内部ネットワーク150を介して接続されている。BEPK140は、複数系統のパスを介してDKU160と接続されている。
【0030】
FEPK110は、インターフェースデバイスの一例であり、1以上のポート111を有する。ポート111は、上位ストレージ装置100を、ネットワーク30等を介して種々の装置と接続する。保守I/F115は、上位ストレージ装置100を、管理サーバ20と接続するためのインターフェースである。
【0031】
MPPK120は、第1の制御デバイスの一例としてのマイクロプロセッサ(MP)121と、ローカルメモリ(LM)122とを有する。LM122は、各種プログラムや、各種情報を記憶する。MP121は、LM122に格納されたプログラムを実行して各種処理を実行する。MP121は、BEPK140を介して、各種コマンドをDKU160の下位ストレージ装置180に送信する。また、MP121は、FEPK110を介して、各種コマンドを外部ストレージ装置40に送信する。
【0032】
ここで、MP121がBEPK140を介して下位ストレージ装置180に送信したり、FEPK110を介して外部ストレージ装置40に送信したりするコマンドについて説明する。なお、下位ストレージ装置180がSCSIコマンドに対応している場合には、以下のコマンドは、例えば、SCSIコマンドのベンダユニークのフィールドを利用して実現することができる。
【0033】
<プリミティブコマンド>
【0034】
プリミティブコマンドは、基本的な機能をストレージ装置(例えば、下位ストレージ装置180)に実行させるコマンドである。
【0035】
(1)データコピーコマンド
【0036】
データコピーコマンドは、ストレージ装置(例えば、下位ストレージ装置180)に、転送元デバイス(例えば、下位ストレージ装置180)の領域から転送先デバイス(例えば、他の下位ストレージ装置180)の領域にデータをコピーさせるためのコマンドである。このコマンドは、転送先デバイスに送信される。このコマンドを受領したら、転送先デバイスは、転送元デバイスにデータをコピーする。具体的には、例えば、転送元デバイスが、スイッチ161を経由して転送先デバイスをSCSIにおけるイニシエータデバイスとして認識し、SCSIのライトコマンドを発行し、データをコピーする方法がある。また、その他のデータ転送のためのコマンドを用いてもよい。また、スイッチ161が下位ストレージ装置をイニシエータデバイスとして認識して、上位ストレージ装置がデータコピーコマンドを発行することにより、同様のデータ転送を実施してもよい。以上のようにして、BEコントローラ143を介さずにデータコピーを実行することができる。
【0037】
データコピーコマンドの引数には、転送元デバイス#、転送元LBA#(又は転送元バッファ#)、転送先LBA#(又は転送先バッファ#)、TL#、バッファモードがある。各引数は、以下の通りである。
(*)転送元デバイス#は、転送元のストレージ装置を特定する番号、例えば、SCSI ID又はLUN(Logical Unit Number)である。
(*)転送元LBA#は、転送元のサブブロックの番号である。転送元バッファ#は、転送元の下位ストレージ装置180のバッファの番号である。以下に示す転送元に対するバッファモードがOFFの場合には、引数として転送元LBA#が設定され、転送元に対するバッファモードがONの場合には、引数として転送元バッファ#が設定される。
(*)転送先LBA#は、転送先のサブブロックの番号である。転送先バッファ#は、転送先の下位ストレージ装置のバッファの番号である。転送先に対するバッファモードがOFFの場合には、引数として、転送先LBA#が設定され、転送先に対するバッファモードがONの場合には、引数として転送先バッファ#が設定される。
(*)TL#は、転送するサブブロックの数である。
(*)バッファモードは、転送元として、ストレージ装置(例えば、下位ストレージ装置180)のバッファの領域を指定するか否かを示すON/OFFと、転送先として、ストレージ装置のバッファの領域を指定するか否かを示すON/OFFとを含む。
【0038】
なお、1つのデータコピーコマンドにおいて、複数の転送についての内容(例えば、複数の転送元のストレージ装置及び転送元LBA#等)を含ませるようにしても良い。このようにするとコマンド発行回数を削減することができる。
【0039】
(2)パリティ演算コマンド
【0040】
パリティ演算コマンドは、ストレージ装置(例えば、下位ストレージ装置180)に、演算元領域のデータと、演算先領域のデータとのパリティ演算(例えば、RAID5の場合には排他的論理和(XOR))を実行させ、演算結果を演算先領域に書き込む処理を実行させるためのコマンドである。このコマンドは、演算を行わせるストレージ装置に送信される。
【0041】
パリティ演算コマンドの引数には、演算元領域LBA#(又は演算元バッファ#)、演算先領域LBA#(又は演算先バッファ#)、TL#、バッファモードがある。各引数は、以下の通りである。
(*)演算元領域LBA#は、コマンドを受けたストレージ装置における演算に利用するデータが格納されている演算元のサブブロックの番号である。演算元バッファ#は、コマンドを受けたストレージ装置の演算に利用するデータが格納されている演算元のバッファの番号である。演算元に対するバッファモードがOFFの場合には、引数として、演算元領域LBA#が設定され、演算元に対するバッファモードがONの場合には、引数として演算元バッファ#が設定される。
(*)演算先領域LBA#は、コマンドを受けたストレージ装置における演算結果を格納する演算先のサブブロックの番号である。演算先バッファ#は、コマンドを受けたストレージ装置における演算結果を格納するバッファの番号である。演算先に対するバッファモードがOFFの場合には、引数として、演算先領域LBA#が設定され、演算先に対するバッファモードがONの場合には、引数として演算先バッファ#が設定される。
(*)TL#は、演算に利用するデータが含まれるサブブロックの数である。
(*)バッファモードは、演算元として、ストレージ装置のバッファの領域を指定するか否かを示すON/OFFと、演算先として、ストレージ装置のバッファの領域を指定するか否かを示すON/OFFとを含む。
【0042】
なお、1つのパリティ演算コマンドにおいて、複数の演算についての内容(例えば、複数の演算元領域LBA等)を含ませるようにしても良い。このようにするとコマンド発行回数を削減することができる。
【0043】
(3)バッファ確保/解放コマンド
【0044】
バッファ確保/解放コマンドは、ストレージ装置(例えば、下位ストレージ装置180)に、ストレージ装置のメモリ上の領域をバッファとして確保させたり、確保したバッファを開放させたりさせるためのコマンドである。
【0045】
バッファ確保/解放コマンドの引数としては、確保、解放がある。各引数は、以下の通りである。
(*)確保は、バッファを確保する場合に設定される。パラメータの設定を行う必要はない。確保を設定したバッファ確保/解放コマンドに対するストレージ装置からの応答には、確保したバッファのバッファ番号が含まれる。
(*)解放は、バッファを開放する場合に設定される。この引数の場合には、開放するバッファの番号と、開放するサイズ(例えば、サブブロック数)とを設定する必要がある。
【0046】
(4)バッファリードコマンド
【0047】
バッファリードコマンドは、上位ストレージ装置100の転送バッファ142に、ストレージ装置(例えば、下位ストレージ装置180)のバッファのデータをリードするためのコマンドである。すなわち、バッファリードコマンドは、ストレージ装置に対して、ストレージ装置のバッファのデータを、上位ストレージ装置100の転送バッファ142に転送させて格納させるためのコマンドである。
【0048】
バッファリードコマンドの引数としては、バッファ番号がある。バッファ番号は、リードの対象となるストレージ装置のバッファの番号である。
【0049】
(5)バッファライトコマンド
【0050】
バッファライトコマンドは、上位ストレージ装置100の転送バッファ142のデータを、ストレージ装置(例えば、下位ストレージ装置180)のバッファにライトするためのコマンドである。すなわち、バッファライトコマンドは、上位ストレージ装置の転送バッファ142に格納されたデータを、ストレージ装置のバッファに格納させるためのコマンドである。
【0051】
バッファライトコマンドの引数としては、バッファ番号がある。バッファ番号は、ライトの対象となるストレージ装置のバッファの番号である。
【0052】
<ハイレベルコマンド>
【0053】
ハイレベルコマンドは、基本コマンドによる機能を複合した処理をストレージ装置(例えば、下位ストレージ装置180)に実行させるコマンドである。このハイレベルコマンドによると、一連の処理をストレージ装置に実行させる場合に送信するコマンドの数を低減することができ、MP121の処理におけるオーバーヘッドを削減することができる。
【0054】
(6)パリティ復元リードコマンド
【0055】
パリティ復元リードコマンドは、ストレージ装置(例えば、下位ストレージ装置180)に、同一のパスグループ内の複数のストレージ装置から所定のデータ要素を復元するために必要なデータ要素及び/又はパリティを取得させ、これらデータ要素及び/又はパリティに対して復元するための演算(例えば、排他的論理和)を実行させ、この演算結果をイニシエータである上位ストレージ装置100の転送バッファ142に転送させるためのコマンドである。このコマンドは、後述する転送元デバイス#[1]〜[N]のいずれかに設定されているストレージ装置に転送することが好ましい。転送元デバイス#[1]〜[N]のいずれかに設定されているストレージ装置に転送すると、ストレージ装置間でのデータ転送回数を低減することができ、処理効率を向上することができる。
【0056】
パリティ復元リードコマンドの引数には、転送元デバイス#[1]、転送元LBA#[1]、・・・、転送元デバイス#[N]、転送元LBA#[N]、TL#がある。ここで、Nは、任意の整数である。各引数は、以下の通りである。
(*)転送元デバイス#[1]〜[N]は、それぞれ転送元のストレージ装置を特定する番号、例えば、SCSI ID又はLUN(Logical Unit Number)である。なお、1つのコマンドにおいて、転送元デバイス#[1]〜[N]して設定可能なストレージ装置は、同一のパスグループに属するストレージ装置である。
(*)転送元LBA#[1]〜[N]は、それぞれ転送元のサブブロックの番号である。
(*)TL#は、転送するサブブロックの数である。
【0057】
(7)パリティ復元ライトコマンド
【0058】
パリティ復元ライトコマンドは、ストレージ装置(例えば、下位ストレージ装置180)に、同一のパスグループ内の複数のストレージ装置から所定のデータ要素を復元するために必要なデータ要素及び/又はパリティを取得させ、これらデータ要素及び/又はパリティに対して復元するための演算(例えば、排他的論理和)を実行させて第1の演算結果を生成させるとともに、イニシエータである上位ストレージ装置100の転送バッファ142に格納された1以上の演算結果を取得させて、当該演算結果に基づいて所定のデータ要素を復元するための演算(例えば、排他的論理和)を実行させて第2の演算結果を生成させ、第1の演算結果と、第2の演算結果とに所定の演算(例えば、排他的論理和)を実行させて、所定のデータ要素を復元させるためのコマンドである。なお、所定のデータ要素を復元させるための演算の順序は、上記に限られず、任意の順序で実行しても良く、要は、データ要素を復元するために必要な演算が実行されれば良い。このコマンドは、後述する転送元デバイス#[1]〜[N]のいずれかに設定されているストレージ装置に転送しても良い。転送元デバイス#[1]〜[N]のいずれかに設定されているストレージ装置に転送すると、ストレージ装置間でのデータ転送回数を低減することができ、処理効率を向上することができる。
【0059】
パリティ復元ライトコマンドの引数には、転送先デバイス#、転送先LBA#、転送元デバイス#[1]、転送元LBA#[1]、・・・、転送元デバイス#[N]、転送元LBA#[N]、TL#、ライトデータ個数がある。各引数は、以下の通りである。
(*)転送先デバイスは、復元したデータ要素を格納する転送先のストレージ装置を特定する番号、例えば、SCSI ID又はLUN(Logical Unit Number)である。なお、転送先のストレージ装置として指定可能なストレージ装置は、転送元デバイス#[1]〜[N]して設定されるストレージ装置と、同一のパスグループに属するストレージ装置である。
(*)転送先LBA#は、転送先のサブブロックの番号である。
(*)転送元デバイス#[1]〜[N]は、それぞれ転送元のストレージ装置を特定する番号、例えば、SCSI ID又はLUN(Logical Unit Number)である。なお、1つのコマンドにおいて、転送元デバイス#[1]〜[N]して設定可能なストレージ装置は、同一のパスグループに属するストレージ装置である。
(*)転送元LBA#[1]〜[N]は、それぞれ転送元のサブブロックの番号である。
(*)TL#は、転送元デバイス番号に対応するストレージ装置から転送するサブブロックの数である。
(*)ライトデータ個数は、転送バッファ142から取り出して、コマンドの送信先のストレージ装置に対して転送する演算結果の個数である。具体的には、上位ストレージ装置100に格納されている別のパスグループでの演算結果の個数である。
【0060】
CMPK130は、キャッシュメモリ(CM)131を有する。CM131は、ホスト10から下位ストレージ装置180等に書き込むデータ(ライトデータ)や、下位ストレージ装置180から読み出したデータ(リードデータ)を一時的に格納する。
【0061】
BEPK140は、第2の制御デバイスの一例としてのパリティ演算器141と、転送バッファ(DXBF)142と、バックエンドコントローラ(BEコントローラ)143とを有する。
【0062】
パリティ演算器141は、例えば、小型のプロセッサであり、下位ストレージ装置180に障害が発生した際にその障害により読み出せなくなったデータ要素をリビルドするための冗長コード(以下、パリティ)を生成する。パリティ演算器141は、例えば、RAID5で構成されたRAIDグループのデータ単位に対しては、データ単位を構成する複数のデータ要素の排他的論理和をとることによってPパリティを生成する。また、パリティ演算器141は、RAID6で構成されたRAIDグループのデータ単位に対しては、更に、データ単位を構成する複数のデータ要素に所定の係数を掛けた後、それぞれのデータの排他的論理和をとることによって、Qパリティを生成する。また、パリティ演算器141は、データ単位についての1以上のストライプデータ要素(データ要素及び/又はパリティ)に基づいて、データ単位中のいずれかのデータ要素を復元する復元処理を行う。また、パリティ演算器141は、データ単位についての1以上のストライプデータ要素に基づいて、いずれかのデータ要素を復元するための復元処理の演算の一部に相当する部分演算を行うことにより部分演算結果を生成する。
【0063】
転送バッファ142は、下位ストレージ装置180から送信されたデータや、下位ストージ装置180へ送信するデータを一時的に格納する。BEコントローラ143は、DKU160の下位ストレージ装置180との間で各種コマンドや、ライトデータ、リードデータ等の通信を行う。
【0064】
DKU160は、複数の下位ストレージ装置180(以下、ドライブという場合がある)を有する。下位ストレージ装置180は、1つ以上の記憶デバイスを含む。記憶デバイスは、不揮発性の記憶媒体であって、例えば、磁気ディスク、フラッシュメモリ、その他半導体メモリである。DKU160は、BEコントローラ143と同一のパスにより接続される複数の下位ストレージ装置180のグループ(パスグループ)170を複数有する。同一のパスグループ170に属する下位ストレージ装置180は、スイッチ161を介して接続されている。同一のパスグループ170に属する下位ストレージ装置180同士は、直接通信することが可能であり、例えば、同一のパスグループ170に属する一の下位ストレージ装置180から他の下位ストレージ装置180に対して、各種データを送信することができる。なお、別のパスグループ170に属する下位ストレージ装置180同士は、直接通信することはできない。ただし、スイッチ161の接続方法によっては、上位ストレージ装置100内の全ての下位ストレージ装置180同士でアクセス可能とすることも可能である。その場合は、下位ストレージ装置180全てを1個の巨大なパスグループ170としてもよいし、各下位ストレージ装置180の関係において、密に結合された、すなわち通信経路が多数ある、又は通信経路のスループットが高い下位ストレージ装置180の集合を、パスグループ170としてもよい。
【0065】
図2は、実施例1に係る下位ストレージ装置の構成図である。
【0066】
下位ストレージ装置180は、ポート181と、第3の制御デバイスの一例としてのプロセッサ182と、メモリ183と、バックエンドコントローラ184と、1以上のフラッシュメモリチップ185とを有する。
【0067】
ポート181は、BEコントローラ143、又は他の下位ストレージ装置180との通信を行うためのインターフェースである。メモリ183は、プログラムや、各種情報を格納する。プロセッサ182は、メモリ183に格納されたプログラムを実行し、メモリ183に格納された情報を利用することで各種処理を行う。本実施例では、プロセッサ182は、BEPK140を介して送信される後述する各種コマンドに対応する処理を実行する。また、プロセッサ182は、パリティ演算器141と同様な演算処理を実行する。バックエンドコントローラ184は、フラッシュメモリチップ185とのデータのやり取りを仲介する。フラッシュメモリチップ185は、例えば、NAND型のフラッシュメモリチップであっても良く、また、他種(例えばNOR型)のフラッシュメモリであっても良いし、PRAMやReRAMであってもよい。また、磁気ディスクであってもよい。なお、下位ストレージ装置180にパリティ演算器を備えるようにしても良い。
【0068】
図3は、実施例1に係るデータの論理的な構成図である。
【0069】
ホスト10により認識可能な仮想ボリューム50は、複数の仮想ページ(仮想的な論理ページ、論理ページともいう)51により構成される。仮想ページ51には、仮想プール空間52の物理ページ55が割り当てられる。仮想プール空間52においては、1以上のエクステント53が管理される。エクステント53は、複数のパーセル(Parcel)54により構成される。パーセル54は、1つのストレージ装置(例えば、下位ストレージ装置180)上の連続した領域で構成される。パーセル54は、
図3の例では4つのストライプ57で構成される。
【0070】
エクステント53は、
図3に示すように、RAID5の3D+1P構成、すなわち、データ単位を構成する3つのデータ要素(D)と、これらデータ要素に対応する1つのパリティ(P)とをそれぞれ異なるストレージ装置に格納する構成の場合には、例えば、4つの異なる下位ストレージ装置180のパーセル54で構成される。なお、本実施例では、分散RAIDの構成を採っているので、仮想プール空間52の記憶領域を構成する複数(3D+1Pで最低限必要な4つよりも多い数(例えば、8つ))の下位ストレージ装置180の中の異なる4つの下位ストレージ装置180のパーセル54によって、エクステント53が構成されており、各エクステント53を構成するパーセル54を含む下位ストレージ装置180の組み合わせは、固定されていない。
【0071】
エクステント53は、複数(例えば、2つの)の物理ページ55を含む。物理ページ55は、複数(例えば、2つ)の連続するデータ単位のデータ要素及びパリティ(同一のストライプ列56のデータ)を格納することができる。同図において、D1_1、D2_1、D3_1、P_1のように、「_」の後の数字が共通するものが、同一のデータ単位におけるデータ要素及びパリティを示す。なお、データ要素及びパリティは、それぞれストライプ57のサイズとなっている。
【0072】
図4は、実施例1に係る下位ストレージ装置におけるデータの論理的な構成図である。
【0073】
下位ストレージ装置180は、上位の装置との間では、SCSIコマンド処理の最小単位(例えば、512B)であるサブブロック61を単位として、データの受け渡しが可能である。キャッシュメモリ131上でのデータをキャッシュする際の管理単位(例えば、256KB)であるスロット62は、連続する複数のサブブロック61の集合で構成される。ストライプ57は、複数のスロット62に格納される。ストライプ57のサイズは、例えば、スロット62が2個で構成される場合、512KBである。
【0074】
図5は、実施例1に係る共有メモリのテーブルを示す図である。
【0075】
共有メモリ200は、例えば、下位ストレージ装置180、CM131、及びLM122の少なくともいずれか1つの記憶領域を用いて構成される。なお、下位ストレージ装置180、CM131、及びLM122の内の複数の構成の記憶領域を用いて論理的な共有メモリ200を構成し、各種情報についてキャッシュ管理を行うようにしてもよい。
【0076】
共有メモリ200は、ページマッピングテーブル210と、パーセルマッピングテーブル220と、ドライブ状態テーブル230と、キャッシュ管理テーブル240とを格納する。各テーブルの詳細について、引き続いて説明する。
【0077】
図6は、実施例1に係るページマッピングテーブルの一例を示す図である。
【0078】
ページマッピングテーブル210は、仮想ボリューム50の論理ページ51と、仮想プール空間52の物理ページ55との対応関係を示す情報である。ページマッピングテーブル210は、仮想ボリューム番号211と、論理ページ番号212と、プール番号213と、仮想プール空間番号214と、物理ページ番号215とのフィールドを含むエントリを管理する。
【0079】
仮想ボリューム番号211には、仮想ボリューム50の番号(仮想ボリューム番号)が格納される。論理ページ番号212には、エントリにおける仮想ボリューム番号211の仮想ボリューム番号が示す仮想ボリューム50における論理ページの番号(論理ページ番号)が格納される。プール番号213には、エントリにおける論理ページ番号212の論理ページ番号に対応する論理ページに割り当てられている物理ページを含むプールの番号が格納される。仮想プール空間番号214には、エントリにおけるプール番号213のプール番号のプールにおける、論理ページ番号212の論理ページ番号に対応する論理ページに割り当てられている物理ページを含む仮想プール空間の番号(仮想プール空間番号)が格納される。物理ページ番号215には、エントリにおける論理ページ番号212の論理ページ番号に対応する論理ページに割り当てられている物理ページの番号(物理ページ番号)が格納される。物理ページ番号は、例えば、LBA(サブブロック単位のアドレス)である。
【0080】
図6の一番上のエントリによると、仮想ボリューム番号が「1」の仮想ボリュームの論理ページ番号が「1」の論理ページには、プール番号が「0」の仮想プール空間番号が「2」の仮想プール空間の物理ページ番号「0」の物理ページが割り当てられていることがわかる。
【0081】
図7は、実施例1に係るパーセルマッピングテーブルの一例を示す図である。
【0082】
パーセルマッピングテーブル220は、エクステント53に割り当てられた物理パーセル54を管理するためのテーブルである。パーセルマッピングテーブル220は、仮想プール空間番号221と、エクステント番号(#)222と、ドライブオフセット番号(#)223と、物理ドライブ番号(#)224と、物理パーセル番号(#)225と、パーセル状態226とのフィールドを含むエントリを管理する。
【0083】
仮想プール空間番号221には、仮想プール空間の番号(仮想プール空間番号)が格納される。エクステント#222には、エントリの仮想プール空間番号221の仮想プール空間番号に対応する仮想プール空間におけるエクステントの番号(エクステント番号)が格納される。ドライブオフセット#223には、エントリのエクステント#222のエクステント番号に対応するエクステントにおけるドライブオフセットの番号(ドライブオフセット番号)が格納される。ここで、ドライブオフセット番号とは、RAIDグループの構成(たとえば、3D+1P)のいずれのドライブであるかを示す番号であり、本実施例では、1つの仮想プール空間の1つのエクステントに対するドライブオフセット番号として、0〜3の4つのドライブオフセット番号が対応付けられて管理される。物理ドライブ#224には、エントリのドライブオフセット#223のドライブオフセット番号のドライブに対して割り当てられている物理パーセルを格納する物理ドライブ(例えば、下位ストレージ装置)の番号(物理ドライブ番号)が格納される。物理パーセル#225には、ドライブオフセット番号のドライブに対して割り当てられている物理パーセルの番号が格納される。パーセル状態226には、エントリにおける物理パーセル#225の物理パーセル番号に対応する物理パーセルの状態が格納される。本実施例では、パーセル状態226には、パーセルに格納されているデータ要素について復元が必要である場合には、そのことを示す「復元要」が設定され、それ以外の場合には、空白が設定される。例えば、下位ストレージ装置180が故障状態になった場合に、MP121がこの下位ストレージ装置180のパーセルに対応するエントリのパーセル状態226に「復元要」を設定する。
【0084】
図8は、実施例1に係るドライブ状態テーブルの一例を示す図である。
【0085】
ドライブ状態テーブル230は、仮想プール空間52を構成する物理ドライブ(例えば、下位ストレージ装置180)の状態を管理するテーブルである。ドライブ状態テーブル230は、仮想プール空間番号231と、物理ドライブ番号232と、状態233とのフィールドを含むエントリを管理する。仮想プール空間番号231には、仮想プール空間の番号(仮想プール空間番号)が格納される。物理ドライブ番号232には、エントリの仮想プール空間番号231の仮想プール空間番号に対応する仮想プール空間を構成する物理ドライブの番号(物理ドライブ番号)が格納される。状態233には、エントリの物理ドライブ番号232の物理ドライブ番号に対応する物理ドライブの状態が格納される。物理ドライブの状態としては、物理ドライブが正常であることを示す「正常」、又は物理ドライブに対するリード及びライトが不可能なことを示す「異常(R/W不可)」が設定される。
【0086】
図9は、実施例1に係るキャッシュ管理テーブルの一例を示す図である。
【0087】
キャッシュ管理テーブル240は、仮想ボリューム番号241と、ボリュームスロット番号242と、キャッシュスロット番号243と、デステージ抑止フラグ244と、ダーティビットマップ245とのフィールドを含むエントリを管理する。
【0088】
仮想ボリューム番号241には、仮想ボリュームの番号(仮想ボリューム番号)が格納される。ボリュームスロット番号242には、エントリの仮想ボリューム番号241の仮想ボリューム番号に対応する仮想ボリュームのボリュームスロットの番号(ボリュームスロット番号)が格納される。キャッシュスロット番号243には、ボリュームスロット番号242のボリュームスロット番号に対応するボリュームスロットが格納されているCM131におけるキャッシュスロットの番号(キャッシュスロット番号)が格納される。本実施例では、キャッシュスロット番号243には、ボリュームスロットに格納されたデータ要素を格納するキャッシュスロットの番号(同図では、(データ)が付加されている番号)と、ボリュームスロットに格納されたデータ要素を復元するためのパリティを格納するキャッシュスロットの番号(同図では、(パリティ)が付加されている番号)とが格納される。デステージ抑止フラグ244には、エントリのキャッシュスロット番号243のキャッシュスロット番号に対応するキャッシュスロットのデータを、デステージしても良いか、すなわち、ストレージ装置に書き込んでCM131のキャッシュスロットから削除しても良いかを示すデステージ抑止フラグが格納される。ダーティビットマップ245には、エントリのキャッシュスロット番号243のキャッシュスロット番号に対応するキャッシュスロットにおける各サブブロックのデータがダーティデータであるか否かを示すビットの集合(ビットマップ)が格納される。
【0089】
図10は、実施例1に係るローカルメモリの構成図である。
【0090】
ローカルメモリ122は、リード/ライトプログラム1220と、まとめ書きプログラム1221と、通常ライトプログラム1222と、リビルドプログラム1223と、高速データ復元プログラム1224と、通常データ復元プログラム1225とを格納する。リード/ライトプログラム1220は、リード/ライト処理(
図11参照)を実行させるためのプログラムである。まとめ書きプログラム1221は、まとめ書き処理(
図12参照)を実行させるためのプログラムである。通常ライトプログラム1222は、通常ライト処理を実行させるためのプログラムである。リビルドプログラム1223は、リビルド処理(
図13参照)を実行させるためのプログラムである。高速データ復元プログラム1224は、高速データ復元処理(
図14参照)を実行させるためのプログラムである。通常データ復元プログラム1225は、通常データ復元処理(
図16)を実行させるためのプログラムである。
【0091】
次に、実施例1に係る計算機システムにおける処理の動作を説明する。
【0092】
図11は、実施例1に係るリード/ライト処理のフローチャートである。
【0093】
リード/ライト処理は、MP121がFEPK110のポート111を介して、ホスト10からI/Oコマンド(リードコマンド、又はライトコマンド)を受信した場合に実行される。
【0094】
MP121は、受信したコマンドがライトコマンドであるか否かを判定する(ステップS10)。この結果、ライトコマンドである場合(ステップS10でY)には、MP121は、キャッシュメモリ131に、ライトコマンドに対応するライトデータをホスト10から受信して書き込み(ステップS11)、FEPK110のポート111を介して、ホスト10に完了通知を送信する(ステップS12)。
【0095】
一方、受信したコマンドがライトコマンドでない、すなわち、リードコマンドである場合(ステップS10でN)には、MP121は、リードコマンドが対象とするストレージ装置(下位ストレージ装置180、又は外部ストレージ装置40)のアクセス範囲に、復元要のパーセルがあるか否かを判定する(ステップS13)。リードコマンドには、例えば、アクセス対象とする仮想ボリューム番号及び論理ページ番号が含まれている。ここで、リードコマンドが対象とするアクセス範囲に復元要のパーセルがあるか否かは、ページマッピングテーブル210により、リードコマンドのアクセス対象とする仮想プール空間及び物理ページを特定し、パーセルマッピングテーブル220により、物理ページに対応するパーセルに対応するパーセル状態226の値を取得することにより判定することができる。
【0096】
物理ページに対応するパーセルは、仮想プール空間のアドレス(物理ページ番号(例えば、LBA(サブブロック単位のアドレス)))を、ストライプデータサイズで割った商に基づいて、ドライブオフセットを算出することにより特定できる。
【0097】
より具体的には、まず、エクステント#を以下の式により算出する。
【0098】
エクステント#=floor(floor(LBA×D数÷(D数+P数))÷エクステント物理サイズ)で求められる。ここで、D数は、RAIDのストライプ列におけるデータ要素の数であり、P数は、ストライプ列におけるパリティの数である。エクステント物理サイズは、サブブロック数である。
【0099】
次に、ドライブオフセット#を以下の式により算出する。
【0100】
ドライブオフセット#=(floor((floor(LBA÷(ストライプデータサイズ÷サブブロックサイズ)))÷D数)+(floor(LBA÷ストライプデータサイズ÷サブブロックサイズ))MOD D数)MOD (D数+P数)
【0101】
このようにして、アクセス対象とする、仮想プール空間番号、エクステント#、及びドライブオフセット#を特定することができ、パーセルマッピングテーブル220を参照すると、物理ドライブ#及び物理パーセル#を特定することができる。
【0102】
ステップS13の判定の結果、復元要のパーセルがない場合(ステップS13でN)には、MP121は、通常リード処理を実行し(ステップS14)、ステップS16に処理を進める。ここで、通常リード処理では、MP121は、アクセス範囲のパーセルを有するストレージ装置に対して、リード要求を送信してリード対象のデータを取得する。
【0103】
一方、ステップS13の判定の結果、復元要のパーセルがある場合(ステップS13でY)には、MP121は、コレクションリード処理を実行し(ステップS15)、ステップS16に処理を進める。ここで、コレクションリード処理では、MP121は、復元要のパーセルのデータ要素について、後述する高速データ復元処理(
図14参照)と同様な処理により、復元要のデータ要素を復元させ、当該復元されたデータ要素をストレージ装置から取得する。
【0104】
ステップS16では、MP121は、FEPK110を介して、取得したデータをホスト10に転送する。
【0105】
図12は、実施例1に係るまとめ書き処理のフローチャートである。
【0106】
まとめ書き処理は、例えば、定期的に実行される。MP121は、キャッシュメモリ131上に、ストレージ装置に未反映のデータを含むスロットがあるか否かを判定する(ステップS21)。未反映のデータを含むスロットがあるか否かは、キャッシュ管理テーブル240を参照することにより把握することができる。この結果、未反映のデータを含むスロットがない場合(ステップS21でN)には、MP121は、まとめ書き処理を終了する。
【0107】
一方、未反映のデータを含むスロットがある場合(ステップS21でY)には、MP121は、キャッシュ管理テーブル240の当該スロットに対応するエントリのデステージ抑止フラグ244を参照し、当該スロットがデステージ抑止中のスロットであるか否かを判定する(ステップS22)
【0108】
この結果、デステージ抑止中のスロットである場合(ステップS22でY)には、当該スロットに含まれるデータが復元に利用されていることを示しているので、MP121は、当該スロットのデータをストレージ装置に反映させることなく、ステップS21に進んで、別のスロットを対象とした処理を行う。一方、デステージ抑止中のスロットでない場合(ステップS22でN)には、MP121は、ストレージ装置の当該スロットのデータを書き込む範囲(アクセス範囲)に、復元要のパーセルがあるか否かを判定する(ステップS23)。
【0109】
ステップS23の判定の結果、復元要のパーセルがある場合(ステップS23でY)には、コレクションライト処理を実行し(ステップS24)、ステップS21に処理を進める。ここで、コレクションライト処理では、MP121は、スロットのデータを用いて、ストレージ装置に新しいパリティを生成させて、当該パリティをストレージ装置に格納させる。具体的には、コレクションライト対象がD(データ)の場合、ストライプ列のその他の全ての旧データを下位ストレージ装置180から読み出し、排他和により新しいパリティを生成し、新データ及び新パリティを下位ストレージ装置180に書き込む。また、コレクションライト対象がP(パリティ)の場合、パリティは更新不要のため、新データのみを下位ストレージ装置180に書き込む。なお、復元要のパーセルのデータ要素については、後述する高速データ復元処理(
図14参照)と同様な処理により、復元要のデータ要素を復元し、ストレージ装置に格納する。
【0110】
一方、ステップS23の判定の結果、復元要のパーセルがない場合(ステップS23でN)には、MP121は、通常ライト処理を実行し(ステップS25)、ステップS21に処理を進める。ここで、通常ライト処理では、MP121は、スロットのデータに対応するストライプ列のデータ要素を格納しているストレージ装置(例えば、下位ストレージ装置180)に対して、データ要素を格納させる所定のコマンド(XDWRITEコマンド)を送信する。この際、MP121は、スロットのデータに対応するストライプ列のデータ要素を格納している下位ストレージ装置180に対して、CM131のデータ要素を、転送バッファ142を経由させて送信する。また、MP121は、スロットのデータに対応するストライプ列のパリティを格納している下位ストレージ装置180に対して、新たなパリティを生成して格納させる所定のコマンド(XPWRITEコマンド)を送信する。この際、MP121は、スロットのデータに対応するストライプ列のパリティを格納している下位ストレージ装置180に対して、CM131のデータ要素を、転送バッファ142を経由させて送信する。XDWRITEコマンドを受け取った下位ストレージ装置180では、受け取ったデータ要素を、指定された領域に格納する。一方、XPWRITEコマンド受け取った下位ストレージ装置180では、受け取ったデータ要素を利用して新たなパリティを生成し、生成した新たなパリティを指定された領域に格納する。
【0111】
図13は、実施例1に係るリビルド処理のフローチャートである。
【0112】
リビルド処理は、任意のタイミングで実行される。MP121は、パーセルマッピングテーブル220を参照して、リビルドが未完了のパーセルがあるか否か、すなわち、パーセル状態が「復元要」のパーセルがあるか否かを判定する(ステップS41)。この結果、リビルドが未完了のパーセルがない場合(ステップS41でN)には、MP121は、リビルド処理を終了する。一方、リビルドが未完了のパーセルがある場合(ステップS41でY)には、MP121は、リビルドが未完了の1つのパーセルの1つのストライプのデータ(ストライプデータ要素)について、データ復元処理の実行を開始する(ステップS42)。ここで、データ復元処理としては、高速データ復元処理(
図14参照)と、通常データ復元処理(
図16参照)とがある。ここで、実行するデータ復元処理としては、常に、高速データ復元処理(
図14参照)を実行しても良い。また、高速データ復元処理、又は通常データ復元処理の中のユーザに設定された方の処理を行うようにしても良い。
【0113】
次いで、MP121は、パーセルの全てのストライプのデータが復元済みであるか否かを判定する(ステップS43)。この結果、全てのストライプのデータが復元済みでない場合(ステップS43のN)には、MP121は、処理をステップS41に進める。一方、パーセルの全てのストライプのデータが復元済みである場合(ステップS43でY)には、MP121は、パーセルマッピングテーブル220の当該パーセルに対応するエントリのパーセル状態226を復元済み(復元不要)を示す内容に設定し(ステップS44)、処理をステップS41に進める。
【0114】
なお、リビルドが未完了の複数のパーセルに対する複数のリビルド処理を並行して実行するようにしても良い。このようにすると複数のパーセルに対するリビルド処理の時間を低減することができる。また、リビルド処理を並行して実行する場合においては、或るリビルド処理の対象とするパーセルとしては、他のリビルド処理で使用するパーセル(復元元のパーセル及び復元先のパーセル)を有するストレージ装置以外のストレージ装置のパーセルから選択するようにしても良い。このようにすると、ストレージ装置に対するアクセスの衝突を低減でき、複数のリビルド処理の並列効果を向上することができ、その結果、リビルド処理の時間を効果的に短縮することができる。
【0115】
図14は、実施例1に係る高速データ復元処理のフローチャートである。なお、同図においては、RAIDグループが複数の下位ストレージ装置180により構成されている場合を例に説明する。
【0116】
MP121は、復元対象の領域である復元対象のパーセルのストライプが論理ページに対して割当てられていないか否かを判定する(ステップS51)。ここで、復元対象のパーセルのストライプが論理ページに対して割当てられていないか否かについては、パーセルマッピングテーブル220により、復元対象のパーセルのストライプに対応する仮想プール空間番号と、エクステント番号と、ドライブオフセット#とを特定し、当該エクステント番号及びドライブオフセット#に基づいて物理ページ番号を特定し、ページマッピングテーブル210により、特定した物理ページ番号が論理ページ番号に対応付けられているか否かを特定することにより把握することができる。
【0117】
この結果、復元対象のパーセルのストライプが論理ページに割当てられていない場合(ステップS51でY)には、MP121は、高速データ復元処理を終了する。
【0118】
一方、復元対象のパーセルのストライプが論理ページに割当てられている場合(ステップS51でN)には、MP121は、パーセルマッピングテーブル220から復元元領域と、復元先領域とを格納する下位ストレージ装置180及び復元元領域及び復元先領域の下位ストレージ装置180での位置を算出する(ステップS52)。ここで、復元元領域は、復元対象のストライプのストライプデータ要素以外のストライプデータ要素の領域である。例えば、RAID5の3D1P構成である場合には、復元元領域は、3つの領域であり、RAID6の6D2P構成である場合には、復元元領域は、6つの領域である。復元先領域は、復元元領域の下位ストレージ装置180と異なる下位ストレージ装置180の領域であれば、任意の領域で良い。
【0119】
次いで、MP121は、復元領域(復元元領域及び復元先領域)に関連するCM131のスロットに対応するキャッシュ管理テーブル240のデステージ抑止フラグ244のデステージ抑止フラグをONに設定する(ステップS53)。これは、データ復元処理の実行中にホストI/Oによりデータが更新されてしまうことを防ぐ目的で実施している。次いで、MP121は、下位ストレージ装置180にパリティ復元リードコマンドを発行する(ステップS54)。ここで、パリティ復元リードコマンドの復元元領域には、ステップS52で特定した復元元領域の中の同一のパスグループに属する復元元領域が設定される。なお、本実施例では、復元先領域の下位ストレージ装置180の属するパスグループには、パリティ復元リードコマンドを発行しない。
【0120】
下位ストレージ装置180のプロセッサ182は、ポート181を介してパリティ復元リードコマンドを受信すると、パリティ復元リードコマンドに対応する処理を実行することにより、同一のパスグループの他の下位ストレージ装置180から復元に必要なデータ要素及び/又はパリティを取得し、取得したデータ要素及び/又はパリティに基づいて、パリティ復元演算(排他的論理和)を実行して、実行結果(部分復元データ)を作成し、当該実行結果を転送バッファ142に送信する(ステップS55)。これにより、転送バッファ142に実行結果が格納される。この際、1つのパスグループから、1つの実行結果のみが送信されるので、下位ストレージ装置180と、BEPK140との間の通信量を低減することができる。また、実行結果は、CM131に格納されないので、CM131や、内部ネットワーク150に対する負荷が削減される。
【0121】
次いで、MP121は、復元元領域を含むパスグループであり、且つ復元先領域を含まないパスグループの全てにパリティ復元リードコマンドを発行したか否かを判定する(ステップS57)。
【0122】
この結果、復元元領域を含むパスグループであり、且つ復元先領域を含まないパスグループの全てにパリティ復元リードコマンドを発行していない場合(ステップS57のN)には、MP121は、処理をステップS54に進める。
【0123】
一方、復元元領域を含むパスグループであり、且つ復元先領域を含まないパスグループの全てに対するパリティ復元リードコマンドを発行した場合(ステップS57のY)には、MP121は、復元先領域の下位ストレージ装置180にパリティ復元ライトコマンドを発行し、転送バッファ142に格納されている1以上の部分復元データを送信する(ステップS58)。パリティ復元ライトコマンドの復元元領域には、ステップS52で算出した復元元領域の中の、復元先領域の下位ストレージ装置180を含むパスグループに属する下位ストレージ装置180の復元元領域が設定される。
【0124】
下位ストレージ装置180のプロセッサ182は、パリティ復元ライトコマンドを受信すると、パリティ復元ライトコマンドに対応する処理を実行することにより、転送バッファ142に格納されている1以上の部分復元データを受信する。また、プロセッサ182は、同一のパスグループの他の下位ストレージ装置180から復元に必要なデータ要素及び/又はパリティを取得し、取得したデータ要素及び/又はパリティに基づいて、復元演算(排他的論理和)を実行し、実行結果(部分復元データ)を作成する。次いで、プロセッサ182は、作成した部分復元データと、転送バッファ142から取得した部分復元データとに対して復元演算(例えば、排他的論理和)を行って、最終的な復元データを生成し、パリティ復元ライトコマンドにより指定された領域に格納し(ステップS59)、パリティ復元ライトコマンドに対する応答をMP121に送信する。
【0125】
MP121は、パリティ復元ライトコマンドに対する応答を受信すると、復元領域(復元元領域及び復元先領域)に関連するCM131のスロットに対応するキャッシュ管理テーブル240のデステージ抑止フラグ244のデステージ抑止フラグをOFFに設定し(ステップS60)、高速データ復元処理を終了する。
【0126】
図15は、実施例1に係る高速データ復元処理の具体例を説明する模式図である。
【0127】
ここで、複数の下位ストレージ装置180によりRAID5の3D+1Pが構成されており、下位ストレージ装置#0に、データ要素D1が格納され、下位ストレージ装置#1に、Pパリティが格納され、下位ストレージ装置#2に、データ要素D2が格納され、図示しない下位ストレージ装置180にデータ要素D3が格納されているものとする。また、下位ストレージ装置#0と、下位ストレージ装置#1とは、同一のパスグループに属し、下位ストレージ装置#2と、下位ストレージ装置#3とは、同一のパスグループに属するものとする。
【0128】
ここで、データ要素D3を格納している下位ストレージ装置180が故障し、下位ストレージ装置#3にデータ要素D3を復元する場合の高速データ復元処理について説明する。
【0129】
高速データ復元処理においては、MP121がBEコントローラ143を介してパリティ復元リードコマンドを、データ要素D3と同一のストライプ列のデータ要素D1及びPパリティを格納しているパスグループに属する下位ストレージ装置#1に発行する(同図中(1))。
【0130】
下位ストレージ装置#1では、パリティ復元リードコマンドを受信すると、プロセッサ182がコマンドに従って処理を開始して、下位ストレージ装置#1のメモリ183にバッファを確保し(同図中(a))、下位ストレージ装置#0からデータ要素D1を取得してバッファにコピーし(同図中(b))、データ要素D1と、下位ストレージ装置#1内に格納されている同一のストライプ列のPパリティとの排他的論理和を実行し、実行結果(D1+P)を上位ストレージ装置100に送信する(同図中(d))。なお、その後、プロセッサ182は、メモリ183に確保したバッファを開放する(同図中(e))。
【0131】
上位ストレージ装置100では、MP121が下位ストレージ装置#1から送信された実行結果(D1+P)のデータを転送バッファ142に格納する。転送バッファ142に格納された実行結果(D1+P)は、CM131に転送されない。
【0132】
次いで、MP121は、BEコントローラ143を介してパリティ復元ライトコマンドを、下位ストレージ装置#1の属するパスグループと異なるパスグループの復元先の下位ストレージ装置#3に発行する(同図中(3))。
【0133】
下位ストレージ装置#3では、パリティ復元ライトコマンドを受信すると、プロセッサ182がコマンドに従って処理を開始して、下位ストレージ装置#3のメモリ183にバッファを確保し(同図中(f))、MP121により転送バッファ142から転送される実行結果(D1+P)を受信する(同図中(g))。次いで、下位ストレージ装置#3のプロセッサ182は、下位ストレージ装置#2から、データ要素D3と同一のストライプ列のデータ要素D2を取得して、バッファにコピーし(同図中(h))、バッファに格納した実行結果(D1+P)とデータ要素D2との排他的論理和を実行して、データ要素D3を復元し、データ要素D3を下位ストレージ装置#3の復元先の領域に格納する(同図中(i))。
【0134】
上記処理によると、1つのパスクループから転送バッファ142に送信されるデータは、1つの実行結果であり、下位ストレージ装置180とBEPK140との間のデータ量を低減することができる。また、BEPK140から復元先の下位ストレージ装置180に送信される実行結果は、転送元のパスグループの数(本例では、1つ)であり、下位ストレージ装置180とBEPK140との間のデータ量を低減することができる。
【0135】
図16は、実施例1に係る通常データ復元処理のフローチャートである。
【0136】
MP121は、復元対象の領域である復元対象のパーセルのストライプが論理ページに対して割当てられていないか否かを判定する(ステップS61)。ここで、復元対象のパーセルのストライプが論理ページに対して割当てられていないか否かについては、パーセルマッピングテーブル220により、復元対象のパーセルのストライプに対応する仮想プール空間番号と、エクステント番号と、ドライブオフセット#とを特定し、当該エクステント番号及びドライブオフセット#に基づいて物理ページ番号を特定し、ページマッピングテーブル210により、特定した物理ページ番号が論理ページ番号に対応付けられているか否かを特定することにより把握することができる。
【0137】
この結果、復元対象のパーセルのストライプが論理ページに割当てられていない場合(ステップS61でY)には、MP121は、通常データ復元処理を終了する。
【0138】
一方、復元対象のパーセルのストライプが論理ページに割当てられている場合(ステップS61でN)には、MP121は、パーセルマッピングテーブル220から復元元領域と、復元先領域とを格納する下位ストレージ装置180及び復元元領域及び復元先領域の下位ストレージ装置180での位置を算出する(ステップS62)。
【0139】
次いで、MP121は、CM131に復元元領域のデータを格納するためのキャッシュスロットを確保し、確保したキャッシュスロットのロックを取得する(ステップS63)。次いで、MP121は、復元元領域の下位ストレージ装置180から、ロックを取得したキャッシュスロットに対して、転送バッファ142を介して、復元元領域のデータ要素及び/又はパリティを転送する(ステップS64)。
【0140】
次いで、MP121は、全ての復元元領域の下位ストレージ装置180から、復元元領域のデータ要素及び/又はパリティを転送し終えたか否かを判定し(ステップS66)、その結果、全ての復元元領域の下位ストレージ装置180から、復元元領域のデータ要素及び/又はパリティを転送し終えていない場合(ステップS66でN)には、MP121は、処理をステップS63に進めて、処理の対象としていない復元元領域の下位ストレージ装置180を対象に処理を実行する一方、全ての復元元領域の下位ストレージ装置180から、復元元領域のデータ要素及び/又はパリティを転送し終えた場合(ステップS66でY)には、処理をステップS67に進める。
【0141】
次いで、MP121は、CM131に復元するデータを格納するためのキャッシュスロットを確保する(ステップS67)。次いで、MP121は、CM131上の複数の復元元領域のデータに基づいて、データを復元する演算処理を実行して復元データを生成し、復元データをCM131のキャッシュスロットに格納する(ステップS68)。なお、復元されたデータは、以降において、
図12に示すまとめ書き処理が実行されると、下位ストレージ装置180に格納されることとなる。次いで、MP121は、復元元領域のデータを格納していたCM131のキャッシュスロットを解放し(ステップS69)、通常データ復元処理を終了する。
【0142】
図17は、実施例1に係る管理サーバの管理画面の一例を示す図である。
【0143】
管理画面300は、プールを単位として、当該プールに属する領域で管理されるデータ単位に対するデータ復元処理の種類をユーザが指定するための画面である。管理画面300は、リビルド高速モード、すなわち、高速データ復元処理の実行を行う「ON」設定とするか、高速データ復元処理の実行を行わない「OFF」設定とするかを指定するためのラジオボタンが表示されるデータ復元処理設定領域310を有する。このデータ復元処理設定領域310で選択されたラジオボタンに対応する設定内容が、管理サーバ20から上位ストレージ装置100に送信されて、例えば、LM122に管理される。MP121は、
図13のステップS42でデータ復元処理を行う場合には、LM122の設定内容に基づいたデータ復元処理を実行する。
【0144】
なお、プールを単位として実行するデータ復元処理を設定する内容を説明したが、例えば、仮想ボリュームを単位として実行するデータ復元処理を設定するようにしても良く、また、上位ストレージ装置を単位として実行するデータ復元処理を設定するようにしても良い。
【実施例6】
【0192】
実施例6は、1以上のストレージ装置(下位ストレージ装置180又は外部ストレージ装置40)に、そのストレージ装置が属するパスグループ内の同一のストライプ列のストライプデータ要素に基づいて演算された部分復元データを記憶するようにしておき、以降において、その部分復元データを利用して、ストライプデータ要素の復元を行うものである。BEコントローラまたはその接続のためのネットワークのスループットが、下位ストレージ装置間のネットワークのスループットよりも低い場合に、部分復元データの生成処理が高速なのに対して、上位ストレージ装置を経由した復元処理が遅くなり、そのスループットに引きずられてリビルド処理の性能低下が発生する場合が考えられる。その場合は、部分データを各パスグループ内の下位ストレージ装置の空きパーセルに格納しておくことにより、リビルド実行中の下位ストレージ装置のさらなる故障にも対応可能とすることができ、信頼性を向上できる。
【0193】
図25は、実施例6に係るパーセルマッピングテーブルの一例を示す図である。
【0194】
パーセルマッピングテーブル260は、エクステントに割り当てられた物理パーセルを管理するためのテーブルである。パーセルマッピングテーブル260は、仮想プール空間番号261と、エクステント番号(#)262と、ドライブオフセット番号(#)263と、物理ドライブ番号(#)264と、物理パーセル番号(#)265と、パーセル状態266と、復元データ種別267とのフィールドを含むエントリを管理する。各フィールドは、
図7に示す同一の名称のフィールドと基本的には同様である。ここでは、パーセルマッピングテーブル220との差異を説明する。
【0195】
実施例6のパーセルマッピングテーブル260では、同一仮想プール空間の同一のエクステントにおけるドライブオフセットに対して、複数の物理パーセルを対応付けて管理できるようになっている。すなわち、同一仮想プール空間の同一のエクステントの同一ドライブオフセットに対して、複数の物理ドライブ#と、物理パーセル番号と、パーセル状態、復元データ種別とを対応付けて記憶できる。
【0196】
また、パーセル状態266に格納されるパーセル状態の1つとして、新たに、同一のストライプ列における一部のストライプデータ要素に基づいて演算された部分復元データが格納されていることを示す「部分復元データ格納」が追加されている。
【0197】
復元データ種別267には、同一のエントリにおけるパーセル状態266が「部分復元データ格納」である場合において、部分復元データを算出するために用いたデータ要素及び/又はパリティを示す情報が格納される。
【0198】
同図においては、仮想プール空間「2」のエクステント「0」のドライブオフセット「3」について、物理ドライブ「1」の物理パーセル「1」には、復元要のデータが格納され、物理ドライブ「2」の物理パーセル「4」には、部分復元データが格納され、部分復元データは、データ要素D1+Pパリティであることを示している。
【0199】
図26は、実施例6に係るリビルド処理における部分復元データ生成処理を説明する図である。
【0200】
ここで、複数の下位ストレージ装置180によりRAID5の3D+1Pが構成されており、下位ストレージ装置#0に、データ要素D1が格納され、下位ストレージ装置#1に、Pパリティが格納され、下位ストレージ装置#3に、データ要素D2が格納され、図示しない下位ストレージ装置180にデータ要素D3が格納されているものとする。この下位ストレージ180は故障したものとし、実施例6は、データ要素D3が失われている状態における、各パスグループ内のリビルド処理を表わしている。また、下位ストレージ装置#0、下位ストレージ装置#1、及び下位ストレージ装置#2は、同一のパスグループに属し、下位ストレージ装置#3と、下位ストレージ装置#4とは、同一のパスグループに属するものとする。
【0201】
図26に示す部分復元データ生成処理は、例えば、任意の時点で実行される。MP121は、下位ストレージ装置#2及び下位ストレージ装置#4のそれぞれに対して、各パスグループでの部分復元データを生成させるためのコマンドを送信する。
【0202】
下位ストレージ装置#2は、下位ストレージ装置#2のメモリ183にバッファを確保し、同一のパスグループ170の下位ストレージ装置#0からデータ要素D1を取得してバッファにコピーするとともに、下位ストレージ装置#1からPパリティを取得してバッファにコピーし、バッファにコピーしたデータ要素D1とPパリティとの排他的論理和を実行し、実行結果(D1+P)を下位ストレージ装置#2の新たに確保したパーセルに格納し、コマンドの応答を上位ストレージ装置100に返す。
【0203】
コマンドの応答を受けた上位ストレージ装置100のMP121は、パーセルマッピングテーブル260において、部分復元データを作成した対象のストライプ列に対応するエントリ、すなわち、仮想プール空間番号、エクステント#、ドライブオフセット#を共通とするエントリを追加し、そのエントリにおいて、パーセル状態266を「部分復元データ格納」とし、物理ドライブ#264に復元先の物理ドライブ#を格納し、物理パーセル#265に復元先の物理パーセル#を格納し、復元データ種別267に、部分復元データの作成で使用したストライプデータ要素を示す(D1+P)を格納する。
【0204】
また、別のパスグループ170に属する下位ストレージ装置#4は、下位ストレージ装置#4のメモリ183にバッファを確保し、下位ストレージ装置#3からデータ要素D2を取得し、下位ストレージ装置#4の新たに確保したパーセルに格納し、コマンドの応答を上位ストレージ装置100に返す。
【0205】
コマンドの応答を受けた上位ストレージ装置100のMP121は、パーセルマッピングテーブル260において、部分復元データを作成した対象のストライプ列に対応するエントリ、すなわち、仮想プール番号、エクステント#、ドライブオフセット#を共通とするエントリを追加し、そのエントリにおいて、パーセル状態266を「部分復元データ格納」とし、物理ドライブ#264に復元先の物理ドライブ#を格納し、物理パーセル#265に復元先の物理パーセル#を格納し、復元データ種別267に、部分復元データの作成で使用したストライプデータ要素を示す(D2)を格納する。
【0206】
図27は、実施例6に係るリビルド処理におけるデータ復元処理を説明する図である。
【0207】
ここで、データ要素D3を格納している下位ストレージ装置180が故障し、下位ストレージ装置#4にデータ要素D3を復元する場合のデータ復元処理のうち、各パスグループ間を跨ったデータの復元処理(
図26の続き)について説明する。なお、この処理は
図26の各パスグループ内でのデータの復元処理とは非同期に、生成された部分復元データを基に実行する。
【0208】
MP121は、パーセルマッピングテーブル260を参照し、データ要素D3の復元に必要な部分復元データを格納しているパーセル、すなわち、下位ストレージ装置#2のパーセルを特定する。次いで、MP121は、BEPK140のBEコントローラ143を介して、下位ストレージ装置#2から部分復元データ(D1+P)を転送バッファ142に格納する。転送バッファ142に格納された部分復元データ(D1+P)は、CM131に転送されない。なお、以降において、下位ストレージ装置#2のプロセッサ182は、実行結果を格納していたパーセルを解放する。これに伴い、MP121は、パーセルマッピングテーブル260の開放したパーセルに対応するエントリを削除する。
【0209】
次いで、MP121は、BEコントローラ143を介して、下位ストレージ装置#4のメモリ183のバッファに部分復元データ(D1+P)を格納させる。下位ストレージ装置#4のプロセッサ182は、バッファに格納されている部分復元データ(D1+P)と、パーセルに格納されているデータ要素D2との排他的論理和を実行し、その実行結果、すなわちデータ要素D3を下位ストレージ装置#4に格納する。なお、以降において、下位ストレージ装置#4のプロセッサ182は、データ要素D2を格納していたパーセルを解放する。これに伴い、MP121は、パーセルマッピングテーブル260の開放したパーセルに対応するエントリを削除する。
【0210】
このデータ復元処理によると、上位ストレージ装置100は、下位ストレージ装置180から部分復元データを取得して、復元処理を行う下位ストレージ装置180に送信することで、下位ストレージ装置180に復元されたデータを格納させることができる。このため、上位ストレージ装置100と、下位ストレージ装置180との間での通信量を低減することができる。また、上位ストレージ装置100では、このデータ復元処理における部分復元データをCM131に格納しないので、CM131に対する負荷や、内部ネットワーク150に対する負荷を抑えることができる。
【0211】
図28は、実施例6に係るリビルド中の故障対処処理を説明する第1の図である。
【0212】
図28は、
図26に示す状態において、データ要素D1を格納している下位ストレージ装置#0が故障し、下位ストレージ装置#2にデータ要素D1を復元する場合の故障対処処理を示す。
【0213】
MP121は、パーセルマッピングテーブル260を参照して、データ要素D1を用いて演算された部分復元データを格納している下位ストレージ装置#2を特定し、当該下位ストレージ装置#2に対して、データ要素D1を復元させるためのコマンドを送信する。下位ストレージ装置#2のプロセッサ182は、メモリ183にバッファを確保し、同一のパスグループ170の下位ストレージ装置#1からPパリティを取得してバッファにコピーし、バッファにコピーしたPパリティと、パーセルに格納されている部分復元データ(D1+P)との排他的論理和を実行して、データ要素D1を復元し、データ要素D1を下位ストレージ装置#2の新たに確保したパーセルに格納する。この故障対処処理によると、1つのパスグループ内で、部分復元データを用いてデータ要素を復元することができるので、データ復元を迅速に行うことができる。
【0214】
図29は、実施例6に係るリビルド中の故障対処処理を説明する第2の図である。
【0215】
図29は、
図26に示す状態において、Pパリティを格納している下位ストレージ装置#1が故障し、下位ストレージ装置#2にパリティPを復元する場合の故障対処処理を示す。
【0216】
MP121は、パーセルマッピングテーブル260を参照して、Pパリティを用いて演算された部分復元データを格納している下位ストレージ装置#2を特定し、当該下位ストレージ装置#2に対して、パリティPを復元させるためのコマンドを送信する。下位ストレージ装置#2のプロセッサ182は、メモリ183にバッファを確保し、同一のパスグループ170の下位ストレージ装置#0からデータ要素D1を取得してバッファにコピーし、バッファにコピーしたデータ要素D1と、パーセルに格納されている部分復元データ(D1+P)との排他的論理和を実行して、Pパリティを復元し、Pパリティを下位ストレージ装置#2の新たに確保したパーセルに格納する。この故障対処処理によると、1つのパスグループ内で、部分復元データを用いてパリティを復元することができるのでデータ復元を迅速に行うことができる。
【0217】
図30は、実施例6に係るリビルド中の故障対処処理を説明する第3の図である。
【0218】
図30は、
図26に示す状態において、データ要素D2を格納している下位ストレージ装置#3が故障した場合の故障対処処理を示す。
【0219】
この場合においては、下位ストレージ装置#3と同一のパスグループである下位ストレージ装置#4に、当該パスグループ内での部分復元データ、この例では、データ要素D2が格納されている。このため、下位ストレージ装置#4からデータ要素D2を取得することができる。
【0220】
以上のようにして、各パスグループ間を跨ったデータの復元処理が完了していない場合で、かつ各パスグループ間の部分復元データの生成が完了している場合に、別の下位ストレージ装置の故障が発生した場合においてもデータ復元を実行でき、かつ各パスグループ間を跨ったデータの転送量を削減することによりデータ復元を迅速に行うことができる。
【実施例7】
【0221】
次に、実施例7に係る計算機システムについて説明する。
【0222】
実施例7は、下位ストレージ装置180が、例えば、フラッシュメモリデバイスのように、故障が発生してライトが不可能であっても、リードが可能である記憶媒体である場合において、リードが可能である下位ストレージ装置180のデータを用いるようにしたものである。実施例7の共有メモリ200は、実施例1の共有メモリ200に、更に復元済みビットマップテーブル270を格納するとともに、パーセルマッピングテーブル210に代えてパーセルマッピングテーブル280を格納し、ドライブ状態テーブル230に代えてドライブ状態テーブル290を格納したものである。
【0223】
図31は、実施例7に係る復元済みビットマップテーブルの一例を示す図である。
【0224】
復元済みビットマップテーブル270は、パーセルに格納されたデータの復元状態を管理するためのテーブルである。復元済みビットマップテーブル270は、物理ドライブ#271と、物理パーセル#272と、復元ビットマップ273とのフィールドを含むエントリを管理する。
【0225】
物理ドライブ#271には、下位ストレージ装置180の番号(物理ドライブ#)が格納される。物理パーセル#272には、物理ドライブ#271の物理ドライブ#に対応する下位ストレージ装置180における物理パーセルの番号(物理パーセル#)が格納される。復元ビットマップ173には、同じエントリにおける物理パーセル#272の物理パーセルにおける各サブブロックに対応する、復元したか否かを示すビットの集合(ビットマップ)が格納される。本実施例では、サブブロックが復元されている場合には、サブブロックに対応するビットに、“1”が設定され、復元されていない場合には、サブブロックに対応するビットに“0”が設定される。なお、本実施例では、サブブロックを単位に復元されているか否かを管理するようにしているが、これに限られず、例えば、より大きい単位(スロット、ストライプデータ、パーセル等)を単位として復元されているか否かを管理するようにしても良い。
【0226】
図32は、実施例7に係るパーセルマッピングテーブルの一例を示す図である。
【0227】
パーセルマッピングテーブル280は、エクステントに割り当てられた物理パーセルを管理するためのテーブルである。パーセルマッピングテーブル280は、仮想プール空間番号281と、エクステント番号(#)282と、ドライブオフセット番号(#)283と、物理ドライブ番号(#)284と、物理パーセル番号(#)285と、パーセル状態286とのフィールドを含むエントリを管理する。各フィールドは、
図7に示す同一の名称のフィールドと基本的には同様である。ここでは、パーセルマッピングテーブル220との差異を説明する。
【0228】
パーセルマッピングテーブル280では、同一仮想プール空間の同一のエクステントにおけるドライブオフセットに対して、複数の物理パーセルを対応付けて管理できるようになっている。すなわち、同一仮想プール空間の同一のエクステントの同一ドライブオフセットに対して、複数の物理ドライブ#と、物理パーセル番号と、パーセル状態を対応付けて記憶できる。
【0229】
また、パーセル状態286に格納されるパーセル状態の1つとして、同一のストライプ列における復元データが格納されるパーセルであることを示す「復元データ格納」が追加されている。
【0230】
同図においては、仮想プール空間「2」のエクステント「0」のドライブオフセット「3」について、物理ドライブ「1」の物理パーセル「1」に復元要のデータ、すなわち、旧データが格納されることを示し、物理ドライブ「2」の物理パーセル「4」に復元データが格納されることを示している。
【0231】
図33は、実施例7に係るドライブ状態テーブルの一例を示す図である。
【0232】
ドライブ状態テーブル290は、仮想プール空間を構成する物理ドライブの状態を管理するテーブルである。ドライブ状態テーブル290は、仮想プール空間番号291と、物理ドライブ番号292と、エラー回数(Read)293と、エラー回数(Write)294と、状態295とのフィールドを含むエントリを管理する。
【0233】
仮想プール空間番号291には、仮想プール空間の番号(仮想プール空間番号)が格納される。物理ドライブ番号292には、エントリの仮想プール空間番号291の仮想プール空間番号に対応する仮想プール空間を構成する物理ドライブの番号(物理ドライブ番号)が格納される。エラー回数(Read)293には、物理ドライブ番号292の物理ドライブ番号に対応する下位ストレージ装置180におけるRead時のエラー回数(リードエラー回数)が格納される。エラー回数(Write)294には、物理ドライブ番号292の物理ドライブ番号に対応する下位ストレージ装置180におけるWrite時のエラー回数(ライトエラー回数)が格納される。状態295には、エントリの物理ドライブ番号292の物理ドライブ番号に対応する物理ドライブ(下位ストレージ装置180)の状態が格納される。物理ドライブの状態としては、物理ドライブが正常であることを示す「正常」、物理ドライブに対するリード及びライトが不可能なことを示す「異常(アクセス不可)」、又は、物理ドライブに対するライトのみが不可能であることを示す「異常(W不可)」が設定される。
【0234】
図34は、実施例7に係る故障検出処理のフローチャートである。
【0235】
故障検出処理は、例えば、所定の時間毎に、ドライブ状態テーブル290の物理ドライブ番号292に格納されている各物理ドライブ番号の下位ストレージ装置180を対象にして実行される。MP121は、ドライブ状態テーブル290の処理対象の下位ストレージ装置180に対応するエントリを参照し、当該エントリのエラー回数(Write)294に格納されているライトエラー回数が所定のライトエラーに関する閾値を超えているか否かを判定する(ステップS81)。この結果、ライトエラー回数が所定のライトエラーに関する閾値を超えていない場合(ステップS81でN)には、MP121は、故障検出処理を終了する。
【0236】
一方、MP121は、当該エントリのエラー回数(Read)293のリードエラー回数が所定のリードエラーに関する閾値を超えているか否かを判定する(ステップS82)。ここで、リードエラーに関する閾値は、ライトエラーに関する閾値より大きい値となっている。
【0237】
この結果、リードエラー回数がリードエラーに関する閾値を超えている場合(ステップS82でY)には、MP121は、処理をステップS84に進める。一方、リードエラー回数がリードエラーに関する閾値を超えていない場合(ステップS82でN)には、MP121は、対象の下位ストレージ装置180が、例えば、フラッシュメモリのようにライトが不可能であってもリードが可能である、ReadOnly対応メディアであるか否かを判定する(ステップS83)。
【0238】
この判定の結果、対象の下位ストレージ装置180がReadOnly対応メディアでない場合(ステップS83でN)には、MP121は、処理をステップS84に進める一方、対象の下位ストレージ装置180がReadOnly対応メディアである場合(ステップS83でY)には、処理をステップS85に進める。
【0239】
ステップS84では、MP121は、ドライブ状態テーブル290の対象の下位ストレージ装置180のエントリの状態295に「異常(アクセス不可)」を設定する。
【0240】
ステップS85では、MP121は、ドライブ状態テーブル290の対象の下位ストレージ装置180のエントリの状態295に「異常(W不可)」を設定する。
【0241】
なお、リードエラー回数、ライトエラー回数に基づいて、下位ストレージ装置180の故障種別を検出するようにしていたが、本発明はこれに限られず、例えば、MP121が下位ストレージ装置180に対してコマンド等を発行し、下位ストレージ装置180の故障種別を問い合わせるようにしても良い。
【0242】
図35は、実施例7に係るライト処理を説明する図である。
【0243】
ライト処理は、例えば、ホストからのI/Oコマンド(ライトコマンド又はリードコマンド)に同期して実行してもよいし、ホストからのI/Oコマンドと非同期で実行してもよい。MP121は、CM131上にストレージ装置(下位ストレージ装置180又は外部ストレージ装置40)に未反映のデータがあるか否かを判定する(ステップS91)。この結果、CM131上に未反映のデータがない場合(ステップS91でN)には、MP121は、ライト処理を終了する。
【0244】
一方、CM131上に未反映のデータがある場合(ステップS91でY)には、MP121は、未反映のデータを格納する領域の範囲に、復元要のパーセルがあるか否かを判定する(ステップS92)。この判定する処理は、
図11のステップS13と同様である。
【0245】
この結果、未反映のデータを格納する領域の範囲に復元要のパーセルがある場合(ステップS92でY)には、MP121は、処理をステップS93に進める一方、未反映のデータを格納する領域の範囲に復元要のパーセルがない場合(ステップS92でN)には、MP121は、通常ライト処理を実行し(ステップS98)、処理をステップS91に進める。
【0246】
ステップS93では、MP121は、故障ドライブ数が当該未反映データを格納する領域を構成するRAIDグループのパリティ数を超えたか否かを判定する。この結果、故障ドライブ数が当該未反映データを格納する領域を構成するRAIDグループのパリティ数を超えていない場合(ステップS93でN)には、MP121は、コレクションライト処理を実行する(ステップS94)。コレクションライト処理は、
図12のステップS24と同様である。
【0247】
一方、故障ドライブ数が当該未反映データを格納する領域を構成するRAIDグループのパリティ数を超えている場合(ステップS93でY)には、MP121は、復元済みビットマップテーブル270を参照し、未反映データを格納する領域に対応する復元ビットがON(“1”)であるか否かを判定する(ステップS95)。
【0248】
この結果、未反映データを格納するパーセルの領域に対応する復元ビットがONである場合(ステップS95でY)には、MP121は、通常ライト処理を実行し(ステップS98)、処理をステップS91に進める。
【0249】
一方、未反映データを格納するパーセルの領域に対応する復元ビットがONない場合(ステップS95でN)には、MP121は、異常(W不可)の状態の下位ストレージ装置180から未反映データに対応する領域の旧データをリードし、当該旧データと、CM131上の未反映データ(新データ)とをマージして復元データを生成し、復元データを格納するための新たなパーセルを非故障ドライブから確保して、そこに復元データを格納し(ステップS96)、復元済みビットマップテーブル270の復元ビットマップ273の未反映データを格納するパーセルの領域に対応する復元ビットをONに設定し(ステップS97)、処理をステップS91に進める。この際に、パーセルマッピングテーブル280に、復元データが格納されているパーセルを示すエントリを追加することにより、ホストI/Oを復元データが格納されているパーセルに対して実行できる。
【0250】
実施例7におけるリード処理においては、MP121がホスト10からリード要求を受信すると、ドライブ状態テーブル290を参照し、リード要求に対応する下位ストレージ装置180の故障状態が異常(W不可)である場合には、当該下位ストレージ装置180は、リードに関しては適切に動作することを意味しているので、当該下位ストレージ装置180から通常通りにリード要求に対応するデータをリードする。以上の処理によって、冗長度を超える異常の状態のドライブが発生しても、異常(W不可)の状態であれば、継続してホストI/O処理を実行することができる。また、本実施例ではパーセルのマッピングを管理しているが、同様の方法を仮想ページについて実施してもよい。
【実施例8】
【0251】
次に、実施例8に係る計算機システムについて説明する。
【0252】
実施例8は、複数の下位ストレージ装置180により構成されるRAIDグループを、例えば、RAID6のように、複数(例えば、2つ)の下位ストレージ装置180が故障してもリビルドできる構成、すなわち、冗長度が2以上の構成としている場合において、更に下位ストレージ装置180が故障した場合に、消失される可能性のあるストライプ列のデータを優先してリビルドするようにしたものである。なお、冗長度が2以上の構成としては、RAID6に限られず、例えば、トリプルミラー構成であってもよい。
【0253】
図36は、実施例8に係る優先リビルドを説明する図である。
【0254】
図36は、16個の下位ストレージ装置180で、仮想プール空間を構成し、仮想プール空間を6D+2P構成のRAID6とした例を示している。ここで、同図において、D1_1、D2_1、D3_1、D4_1、D5_1、D6_1、P_1、Q_1のように、「_」の後の数字が共通するものが、同一のデータ単位におけるデータ要素及びパリティであること、すなわち、同一のストライプ列であることを示す。
【0255】
図36に示すように、データ要素及びパリティが格納されている状態において、左側の2つの下位ストレージ装置180が故障した場合であっても、RAID6の構成であるので、必要なデータ要素やパリティを復元することができる。しかしながら、もう一つの別の下位ストレージ装置180が故障してしまうと、復元できなくなってしまう可能性のあるデータ要素及び/又はパリティ(ワーニングデータという)が存在する。具体的には、故障している下位ストレージ装置180に、同一のストライプ列の2つのストライプデータ要素が格納されているストライプ列に属するストライプデータ要素が、このような復元できないストライプデータ要素に該当する。同図においては、故障している下位ストレージ装置180に格納されている同一のストライプ列の2つのストライプデータ要素としては、データ要素D2_2及びデータ要素D3_2と、データ要素D4_4及びデータ要素D5_4とがある。以下、ワーニングデータを含むパーセルをワーニングパーセルという。
【0256】
そこで、実施例8では、他の下位ストレージ装置180が故障してしまうと復元できなくなるワーニングデータを優先して、リビルドする。例えば、同図に示すデータ要素D3−2や、データ要素D5_4を、別のストレージ装置180に優先して復元する。これにより、さらに別の1つの下位ストレージ装置180が故障したとしても、ワーニングパーセルを高速に復元可能であるため、データ要素D2_2と同一のストライプ列のデータ要素を適切に復元できる確率が高くなる。この確率は、ストライプ列を分散させるドライブ数が多ければ多いほど高いという特性を持つ。
【0257】
図37は、実施例8に係る上位ストレージ装置の状態遷移を説明する図である。
【0258】
図37は、冗長度毎のRAID6のRAIDグループを管理する上位ストレージ装置100の状態遷移を示している。
【0259】
上位ストレージ装置100は、初期状態では、いずれの下位ストレージ装置180(ドライブ)も故障していないので、通常(Normal)状態ST1であり、冗長度は2である。
【0260】
通常状態ST1において、データを退避する領域であるスペア領域がない場合には、上位ストレージ装置100は、コピーバック中状態ST2となる。コピーバック中状態ST2とは、故障したドライブを新品に交換した後に、スペア領域に復元していたデータを、スペア領域から新品のドライブの領域に戻す処理中の状態である。コピーバック中状態ST2では、冗長度は2である。また、通常状態ST1において、1台のドライブが閉塞した場合には、上位ストレージ装置100は、リビルド中状態ST3となる。リビルド中状態ST3とは、閉塞したドライブに格納されていたデータ(データ要素等)をリビルドしている途中の状態である。リビルド中状態ST3は、冗長度が1である。
【0261】
コピーバック中状態ST2において、或るデータのコピーバックが完了したが、まだコピーバックする対象のデータがあれば、上位ストレージ装置100は、コピーバック中状態ST2のままである。また、コピーバック中状態ST2において、全てのデータのコピーバックが完了した場合には、上位ストレージ装置100は、通常状態ST1となる。また、コピーバック中状態ST2において、1台のドライブが閉塞した場合には、上位ストレージ装置100は、リビルド中状態ST3となる。
【0262】
リビルド中状態ST3において、データを退避する領域であるスペア領域がない場合には、上位ストレージ装置100は、コピーバック中状態ST4となる。コピーバック中状態ST4では、冗長度は1である。また、リビルド中状態ST3において、ドライブが閉塞し、ワーニングパーセルが出現した場合に、上位ストレージ装置100は、優先リビルド中状態ST6となる。優先リビルド中状態ST6とは、ワーニングデータを優先してリビルドしている処理の途中の状態である。ここで、ワーニングデータを優先してリビルドする処理を優先リビルドという。優先リビルド中状態ST6は、冗長度が0である。
【0263】
コピーバック中状態ST4において、全てのデータのコピーバックが完了した場合には、上位ストレージ装置100は、リビルド中状態ST3となる。また、コピーバック中状態ST4において、1台のドライブが閉塞した場合には、上位ストレージ装置100は、コピーバック中状態ST8となる。コピーバック中状態ST8は、冗長度が0である。
【0264】
優先リビルド中状態ST6において、1台のドライブが閉塞した場合には、上位ストレージ装置100は、故障(Failure)状態ST9となる。故障状態ST9は、データの復元ができない状態である。また、優先リビルド中状態ST6において、データを退避する領域であるスペア領域がない場合には、上位ストレージ装置100は、コピーバック中状態ST8なる。コピーバック中状態ST8では、冗長度は0である。また、優先リビルド中状態ST6において、優先リビルドが完了した場合には、上位ストレージ装置100は、残リビルド中状態ST5となる。残リビルド中状態ST5とは、ワーニングデータ以外のパーセルのデータをリビルドしている途中の状態である。残リビルド中状態ST5は、冗長度が1である。
【0265】
残リビルド中状態ST5において、ワーニングパーセルのワーニングデータ以外のデータに対するリビルドを完了した場合には、上位ストレージ装置100は、リビルド中状態ST3となる。また、残リビルド中状態ST5において、1台のドライブが閉塞した場合には、上位ストレージ装置100は、残リビルド中<継続>状態ST7となる。残リビルド中<継続>状態ST7は、更に増加したワーニングデータをリビルドしている途中の状態である。残リビルド中<継続>状態ST7は、冗長度が0である。
【0266】
残リビルド中<継続>状態ST7において、1台のドライブが閉塞した場合には、上位ストレージ装置100は、故障状態ST9となる。残リビルド中<継続>状態ST7において、ワーニングパーセルのすべてのデータに対するリビルドを完了した場合には、上位ストレージ装置100は、リビルド中状態ST3となる。
【0267】
コピーバック中状態ST8において、全てのデータのコピーバックが完了した場合には、上位ストレージ装置100は、優先リビルド中状態ST6となる。また、コピーバック中状態ST8において、1台のドライブが閉塞した場合には、上位ストレージ装置100は、故障状態ST9となる。
【0268】
図38は、実施例8に係るストライプテーブルの一例を示す図である。
【0269】
実施例8の共有メモリ200は、実施例1の共有メモリ200に、更にストライプテーブル300を格納したものである。
【0270】
ストライプテーブル300は、物理ドライブ番号に基づいて、その物理ドライブ番号に対応する下位ストレージ装置180における物理パーセルの状態を高速に判定するためのテーブルであり、パーセルマッピングテーブル220の逆引きテーブルに相当する。ストライプテーブル300は、物理ドライブ#301と、物理パーセル#302と、仮想プール空間番号303と、エクステント#304と、ドライブオフセット#305と、パーセル状態306とのフィールドを含むエントリを管理する。各フィールドは、
図7に示す同一の名称のフィールドと基本的には同様である。
【0271】
図39は、実施例8に係る優先ビルド処理のフローチャートである。
【0272】
優先ビルド処理は、例えば、所定の時間毎に実行しても良いし、MP121が2台の下位ストレージ装置180の故障を検出した場合に実行しても良い。MP121は、ストライプテーブル300のパーセル状態306が復元要である各物理パーセルのエントリについて、当該物理パーセルに対応する仮想プール空間#、エクステント#、ドライブオフセット#を算出する(ステップS101)。
【0273】
次いで、MP121は、算出した仮想プール空間#、エクステント#、及びドライブオフセット#に基づいて、これらに対応するエクステント(対象エクステント)内に、故障状態(復元要)である他のドライブを含むか否かをチェックする(ステップS102)。
【0274】
この結果、対象エクステント内に2台のドライブの故障を含み、且つそのドライブのデータが未復元である場合(S103でY)には、MP121は、未復元のデータを復元するデータ復元処理を実行し(ステップS104)、処理をステップS105に進める一方、対象エクステント内に2台以上のドライブの故障を含まない、又は、データが未復元でない場合(S103でN)には、優先ビルド処理を終了する。
【0275】
ステップS105で、MP121は、エクステントの復元すべきパーセルの全ストライプデータ要素が復元済みか否かを判定し(ステップS105)、全てのストライプデータ要素が復元済みでない場合(ステップS105でN)には、処理をステップS104に進める。
【0276】
一方、エクステントの復元すべきパーセルの全てのストライプデータ要素が復元済みである場合(ステップS105でY)には、MP121は、パーセルマッピングテーブル220及びストライプテーブル300の処理対象のパーセルのエントリのパーセル状態226に復元不要を示す内容(例えば、空白)を設定し(ステップS106)、処理をステップS101に進める。
【0277】
図40は、実施例8に係るデータ配置の一方法を説明する図である。
【0278】
図40は、
図36で述べた方法とは異なる、データ配置の一方法であり、20個の下位ストレージ装置180で、仮想プール空間を構成し、仮想プール空間を2D+2P構成のRAID6とした例を示している。ここで、同図において、1、2のような数字がエクステント#222を表し、共通するものが、同一のエクステントのパーセルを表す。
図40のデータ配置は、数式により算出される。具体的には、パーセルに対応するエクステント#は、式ExtentID(d,p)=((floor(d/S)+p×(d mod S)) mod (D/S))+(D/S)×pにより算出する。dは物理ドライブ#、pは物理パーセル#、Dは全ドライブ数(
図40ではD=20)、Sはストライプを構成するパーセルの数(
図40では2D+2Pの場合でS=4)である。
図40に示したグレーのパーセルが存在する各ドライブは、物理ドライブ#0のストレージ装置180が1台閉塞した場合にリビルドの読み出し元となるドライブである。特に、D/Sが素数の場合に、リビルド時の復元元ストライプデータのリード処理がきれいに分散され、並列効果が高くなり、リビルドの所要時間を短縮できる。
【0279】
図41は、実施例8に係るデータ配置の一方法におけるワーニングパーセルの位置を説明する図である。
【0280】
図41は、
図40で示したデータ配置において、物理ドライブ#0、5のストレージ装置180が2台閉塞した場合にリビルドの読み出し元となるパーセルを示している。黒いパーセル(エクステント#20、45、70に所属)はワーニングパーセルであるが、それらパーセルの配置が2台のドライブ(物理ドライブ#10、15)に限定されている。この限定により、優先リビルド処理が多数のドライブに負荷分散されないので、
図36で述べたランダムな配置による方法よりも優先リビルドの所要時間は長くなるが、一方で、3台目のドライブ閉塞によるデータロストパーセルが出現する確率を減らすことができるため、システム全体としてデータロストの発生確率を削減できる。
【0281】
上記の式は効率的なデータ配置方法の一例であるが、発明を限定するものではなく、上記の式を元に、物理ドライブ#や、物理パーセル#の対応を変更してデータの配置パターンをシフトした配置であってもよいし、
図7のパーセルマッピングテーブルで述べたようなテーブル上で、エクステントを構成するパーセルの存在するドライブの選択方法を特定の組み合わせに限定させることにより、ドライブ故障時のロストする領域を特定のドライブに偏らせる配置としてもよい。
【0282】
優先リビルド処理によると、消失してしまう可能性が高いデータを優先的に復元することができ、データが消失してしまう事態を効果的に防ぐことができる。
【0283】
以上、幾つかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。