(57)【特許請求の範囲】
【請求項１】
複数の記憶デバイスと、前記複数の記憶デバイスにデータを格納する制御部と、を有するストレージシステムであって、
複数の前記データと当該複数のデータに対する冗長データとからなる第１所定数のデータ要素で、データセットが構成され、
前記制御部は、前記第１所定数のデータ要素の其々を、異なる前記記憶デバイスに配置し、
前記記憶デバイスの其々に配置されるデータ要素を有するデータセットの組み合わせは、少なくとも２つの前記記憶デバイス間で異なり、
複数の前記データセットを構成する複数のデータ要素は、前記第１所定数よりも多い第２所定数の前記記憶デバイスに分散して配置され、
１つの前記記憶デバイスに配置されるデータ要素を有する複数の前記データセットを構成する複数のデータ要素は、前記第２所定数より少ない前記記憶デバイスの中で、不規則に分散して配置される
ことを特徴とするストレージシステム。
【請求項２】
前記制御部は、
少なくとも２つの仮想ボリュームを提供し、
前記第１所定数のデータ要素を配置するための前記第１所定数の前記記憶デバイスの組合せを複数設定した仮想パリティグループを複数管理し、複数の前記組合せは前記仮想パリティグループ間で異なり、
前記少なくとも２つの仮想ボリュームに、其々異なる前記仮想パリティグループを割り当て、
前記仮想ボリュームのデータは、前記割当てられた仮想パリティグループに設定された前記組合せを構成する前記記憶デバイスに配置される
ことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記制御部は、前記仮想ボリュームの其々に、優先度に従って、複数の前記仮想パリティグループのいずれか１つを割り当てる
ことを特徴とする請求項２に記載のストレージシステム。
【請求項４】
前記制御部は、
前記記憶デバイスに配置される複数のデータ要素のバックアップを、前記仮想ボリューム単位に取得し、
前記第２所定数より少ない記憶デバイスのうち、障害の発生している障害記憶デバイスの数が前記冗長データのデータ要素数を超える場合、前記障害記憶デバイスに配置された複数のデータ要素の復元は、前記仮想ボリューム単位で実行される
ことを特徴とする請求項３に記載のストレージシステム。
【請求項５】
前記少なくとも２つの仮想ボリュームの２つは、仮想ボリュームの複製ペアであり、
前記制御部は、前記複製ペアの仮想ボリュームの其々に、異なる仮想パリティグループを割当てる
ことを特徴とする請求項３に記載のストレージシステム。
【請求項６】
前記第２所定数より少ない記憶デバイスのうち、障害の発生している障害記憶デバイスの数が、前記冗長データのデータ要素数以下である場合、
前記制御部は、前記障害記憶デバイスに配置された複数のデータ要素が属する複数のデータセットを構成する複数のデータ要素のうち、前記障害記憶デバイス以外に格納される前記データ要素に基づいて、前記障害記憶デバイスに配置された複数のデータ要素を復元する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項７】
前記複数の記憶デバイスのそれぞれにスペア領域が設定され、
前記制御部は、前記復元した複数のデータ要素を、前記障害が発生していない複数の記憶デバイスに設定される前記スペア領域に配置する
ことを特徴とする請求項６に記載のストレージシステム。
【請求項８】
前記制御部は、冗長度の低い前記データセットに属するデータ要素を優先して復元する
ことを特徴とする請求項６に記載のストレージシステム。
【請求項９】
前記障害記憶デバイスは、前記複数の記憶デバイスの中では、前記冗長データのデータ要素数より多い
ことを特徴とする請求項６に記載のストレージシステム。
【請求項１０】
前記制御部は、
前記記憶デバイスに配置される複数のデータ要素のバックアップを取得し、
前記第２所定数より少ない記憶デバイスのうち、障害の発生している障害記憶デバイスの数が、前記冗長データのデータ要素数を超える場合、前記バックアップに基づき、前記障害記憶デバイスに配置された複数のデータ要素を復元する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項１１】
前記制御部は、
前記第２所定数の記憶デバイスの物理記憶領域を含む所定サイズの物理記憶領域に、第３所定数の前記データセット毎に、所定の配置パターンを繰り返して前記データ要素を配置する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項１２】
各データセットは、ストライプ列のデータであり、
前記データ要素は、ストライプデータ要素であり、
前記冗長データは、冗長コードである
ことを特徴とする請求項１に記載のストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のストレージ装置によりＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）グループを構成するストレージシステムに関し、ＲＡＩＤグループにおけるデータを管理するストレージシステムに適用して好適なるものである。
【背景技術】
【０００２】
従来、ストレージシステムにおける複数のストレージ装置により、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）グループを構成し、ＲＡＩＤグループに基づいて作成された論理ボリュームを、上位装置（例えばホストコンピュータ）へ提供することが行われている。【０００３】
ＲＡＩＤに関する技術として、特許文献１には、分散ＲＡＩＤに関する技術が開示されている。分散ＲＡＩＤとは、通常データと、通常データを復元するための冗長データとを含むストライプ列を、容量プールに記憶領域を提供する複数のストレージ装置に分散させて管理する技術である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２０１０／０１０７００３号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一般的なストレージ装置では、冗長データを記憶するＲＡＩＤグループを構成するいずれかのストレージ装置に故障が発生した場合には、冗長データ等を使って、故障が発生したストレージ装置に格納されていたデータを復元（リビルド）することが行われている。近年では、ストレージ装置の大容量化が進んでおり、リビルドに要する時間が長時間化しているという問題があった。特許文献１には、容量プールに記憶領域を提供する複数のストレージ装置に分散させて管理する技術が開示されている。特許文献１によれば、リビルド負荷を分散することでリビルドに要する時間を短縮することができる。【０００６】
しかし、容量プール内のドライブについて冗長度（例えばＲＡＩＤ１の場合１、ＲＡＩＤ６の場合２）を超える故障が発生した場合、容量プールに対応する仮想ボリューム全体にデータロスト領域が波及し、バックアップデータからのリストア時間が長時間化するという問題がある。この問題を解決する単純な方法として、プールを複数個に分割することにより、データロストの影響を局所化する方法が考えられるが、ホストＩ／Ｏの負荷分散性やリビルドの負荷分散性が低下してしまうという問題があった。【０００７】
本発明は以上の点を考慮してなされたもので、データロストの影響を局所化し、ホストＩ／Ｏの負荷分散性やリビルドの負荷分散性の低下を防止することが可能なストレージシステムを提案しようとするものである。
【課題を解決するための手段】
【０００８】
かかる課題を解決するために本発明においては、データの入出力を要求するホスト装置とネットワークを介して接続されたストレージ装置であって、複数の記憶デバイスと、前記複数の記憶デバイスの所定の記憶領域を１つ以上の仮想ボリュームを含む仮想ボリューム群として前記ホスト計算機に提供する制御部と、を備え、前記制御部は、前記複数の記憶デバイスから１以上の冗長度を有する１つ以上のデータセットを構成し、前記複数のデータセットを含むストレージプールの記憶領域を前記仮想ボリュームの記憶領域の一部に提供し、前記仮想ボリュームに割り当てる前記データセットを構成する前記記憶デバイスの組み合わせを２以上の一定数の組み合わせに限定し、前記一定数の組み合わせで出現する前記記憶デバイスを前記ストレージプール内の記憶領域に均等に分散し、前記仮想ボリューム群単位で前記仮想ボリュームに割り当てる前記記憶デバイスの一定数の異なる組み合わせを用いることを特徴とする、ストレージ装置が提供される。【０００９】
かかる構成によれば、仮想ボリュームに割り当てるページを構成するドライブの組み合わせを２以上の一定数の組み合わせ（以下この量をcと表現する）に限定し、且つそのドライブの組み合わせはプール内のドライブに均等分散するように定義する。さらに、仮想ボリュームごと又は仮想ボリュームの集合ごとに、異なる組み合わせ（個数cは同一）を用いる。【００１０】
例えば、Ｒ個の物理パリティグループ（ＰＰＧ）について、それらに対応する仮想的なＲ個の仮想パリティグループ（ＶＰＧ）を設ける。仮想パリティグループ（ＶＰＧ）では、ｃ個のサイクルで一定パターン（ドライブの組み合わせがｃ種類、ｃ種類でのドライブあたりの累計パーセル配置量はｃｅｉｌｉｎｇ（ｃ／Ｒ）以下、仮想パリティグループ（ＶＰＧ）ごとにｃ種類のドライブ組み合わせをランダムに変更（計Ｒ通り））のデータ配置を実施する。さらに、仮想ボリュームは、定められた優先度に基づき、特定の仮想パリティグループ（ＶＰＧ）に対して優先的にページを割り当てる。【００１１】
これにより、ホストＩ／Ｏ負荷、延いてはリビルド負荷のバランシングを維持しつつデータロスト領域を特定の仮想ボリュームに局所化することが可能となる。
【発明の効果】
【００１２】
本発明によれば、データロストの影響を局所化し、ホストＩ／Ｏやリビルドの負荷分散性の低下を防止して、ストレージシステム全体の可用性を向上させることができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の第１の実施形態に係る計算機システムの概要を説明する概念図である。
【図２】同実施形態にかかる計算機システムの論理構成を示す概念図である。
【図３】同実施形態にかかるドライブのデータ構成を示す概念図である。
【図４】同実施形態にかかるデータマッピング構造を示す概念図である。
【図５】同実施形態にかかるデータマッピング構造を示す概念図である。
【図６】同実施形態にかかる共有メモリの内容を示すブロック図である。
【図７】同実施形態にかかるローカルメモリの内容を示すブロック図である。
【図８】同実施形態にかかるプール管理テーブルの一例を示す図表である。
【図９】同実施形態にかかる仮想スペア管理テーブルの一例を示す図表である。
【図１０】同実施形態にかかるドライブ状態テーブルの一例を示す図表である。
【図１１】同実施形態にかかるキャッシュ管理テーブルの一例を示す図表である。
【図１２】同実施形態にかかるページマッピングテーブルの一例を示す図表である。
【図１３】同実施形態にかかる優先度テーブルの一例を示す図表である。
【図１４Ａ】同実施形態にかかるデータマッピングテーブルの一例を示す図表である。
【図１４Ｂ】同実施形態にかかるデータマッピングテーブルの一例を示す図表である。
【図１５】同実施形態にかかるＳＥＥＤテーブルの一例を示す図表である。
【図１６】同実施形態にかかる先読み実行ドライブリストの一例を示す図表である。
【図１７Ａ】同実施形態にかかるスペア変換テーブルの一例を示す図表である。
【図１７Ｂ】同実施形態にかかるスペア変換テーブルの一例を示す図表である。
【図１８】同実施形態にかかるホストＩ／Ｏ処理の流れを示すフローチャートである。
【図１９】同実施形態にかかるまとめ書き処理の流れを示すフローチャートである。
【図２０】同実施形態にかかるページ変換処理の流れを示すフローチャートである。
【図２１】同実施形態にかかるＬＰ変換処理の流れを示すフローチャートである。
【図２２】同実施形態にかかるＰＬ変換処理の流れを示すフローチャートである。
【図２３】同実施形態にかかるＶＰ／ＰＶ変換処理の流れを示すフローチャートである。
【図２４Ａ】同実施形態にかかるスペア変換処理の流れを示すフローチャートである。
【図２４Ｂ】同実施形態にかかるスペア逆変換処理の流れを示すフローチャートである。
【図２５】同実施形態にかかるパーセルマッピングテーブル生成処理の流れを示すフローチャートである。
【図２６】同実施形態にかかるスペアマッピングテーブル生成処理の流れを示すフローチャートである。
【図２７】同実施形態にかかるリビルド処理の流れを示すフローチャートである。
【図２８】同実施形態にかかる復元対象のデータ先読み処理の流れを示すフローチャートである。
【図２９Ａ】同実施形態にかかるデータマッピングの例を示す概念図である。
【図２９Ｂ】同実施形態にかかるデータマッピングの例を示す概念図である。
【図２９Ｃ】同実施形態にかかるデータマッピングの例を示す概念図である。
【図３０】本発明の第２の実施の形態にかかる計算機システムの共有メモリおよびローカルメモリの内容を示すブロック図である。
【図３１】同実施形態にかかるＤＧスワップポインタテーブルの内容を示す図表である。
【図３２】同実施形態にかかるＰＰＧ増設処理の流れを示すフローチャートである。
【図３３】同実施形態にかかるＰＰＧ減設処理の流れを示すフローチャートである。
【図３４】同実施形態にかかるＶＰ／ＰＶ変換処理の流れを示すフローチャートである。
【図３５】同実施形態にかかるパーセルリバランス処理の流れを示すフローチャートである。
【図３６】同実施形態にかかるデータスワップ処理の流れを示すフローチャートである。
【図３７】同実施形態にかかる増設時パーセル変更マッピング決定処理の流れを示すフローチャートである。
【図３８】同実施形態にかかる減設時パーセル変更マッピング決定処理の流れを示すフローチャートである。
【図３９】同実施形態にかかるページリバランス処理の流れを示すフローチャートである。
【図４０Ａ】同実施形態にかかる増設時のパーセルマッピングの変更例を示す概念図である。
【図４０Ｂ】同実施形態にかかる減設時のパーセルマッピングの変更例を示す概念図である。
【発明を実施するための形態】
【００１４】
以下図面について、本発明の一実施の形態を詳述する。
【００１５】
なお、以下に説明する実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１６】
なお、以下の説明では、「ａａａテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ａａａテーブル」を「ａａａ情報」と呼ぶことができる。
【００１７】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェースデバイス（例えばポート）を用いながら行うため、処理の主語がプログラムとされてもよい。プログラムを主語として説明された処理は、プロセッサ或いはそのプロセッサを有する計算機（例えば、管理計算機、ホスト計算機、ストレージ装置等）が行う処理としてもよい。また、コントローラは、プロセッサそれ自体であってもよいし、コントローラが行う処理の一部又は全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから各コントローラにインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであってもよい。
【００１８】
（１）第１の実施形態
（１−１）計算機システムの概要
図１を参照して、ストレージシステムを含む計算機システムの概要について説明する。ストレージシステムは、例えば、図１に示すように、上位ストレージ装置（第２のストレージ装置）１００により構成される。また、ストレージシステムは、第１のストレージ装置の一例である外部ストレージ装置４０を含んでもよい。
【００１９】
上位ストレージ装置１００のＤＫＵ１６０には、第１のストレージ装置の一例である下位ストレージ装置１８０が複数備えられている。上位ストレージ装置１００は、複数の下位ストレージ装置１８０の記憶領域から構成される容量プール（以下、プールという）を管理する。また、上位ストレージ装置１００は、プールの領域を用いてＲＡＩＤグループを構成する。すなわち、上位ストレージ装置１００は、プールの領域を構成する複数の下位ストレージ装置１８０を用いて、複数の仮想的なＲＡＩＤグループである仮想パリティグループ（ＶＰＧ）を構成する。
【００２０】
仮想パリティグループの記憶領域は、複数のサブ記憶領域列で構成されている。各サブ記憶領域列は、仮想パリティグループを構成する複数のストレージ装置（下位ストレージ装置及び／又は外部ストレージ装置）にまたがっており、複数のストレージ装置に対応した複数のサブ記憶領域で構成されている。ここで、１つのサブ記憶領域を、「ストライプ」と呼び、複数のストライプで構成された一列を、「ストライプ列」と呼ぶ。複数のストライプ列によって、ＲＡＩＤグループの記憶領域が構成されている。
【００２１】
ＲＡＩＤには、いくつかのレベル（以下、「ＲＡＩＤレベル）という）がある。例えば、ＲＡＩＤ５では、ＲＡＩＤ５に対応したホストコンピュータから指定されたライト対象のデータは、所定サイズのデータ（以下、便宜上「データ単位」という）に分割されて、各データ単位が、複数のデータ要素に分割され、複数のデータ要素が、複数のストライプに書き込まれる。また、ＲＡＩＤ５では、ストレージ装置に障害が発生したことによりそのストレージ装置から読み出せなくなったデータ要素をリビルドするために、各データ単位に対して、“パリティ”と呼ばれる冗長な情報（以下、「冗長コード」）が生成され、その冗長コードも、同一のストライプ列のストライプに書き込まれる。例えば、ＲＡＩＤグループを構成するストレージ装置の数が４である場合は、そのうちの３つのストレージ装置に対応する３つのストライプに、データ単位を構成する３つのデータ要素が書き込まれ、残りの１つのストレージ装置に対応するストライプに、冗長コードが書き込まれる。以下、データ要素と冗長コードとを区別しない場合には、両者をそれぞれストライプデータ要素ということもある。
【００２２】
また、ＲＡＩＤ６では、ＲＡＩＤグループを構成する複数の記憶装置のうちの２つのストレージ装置に障害が発生した等の理由により、データ単位を構成する複数のデータ要素のうちの２つのデータ要素を読み出すことができない場合に、これら２つのデータ要素を復元することができるように、各データ単位に対して、２種類の冗長コード（Ｐパリティ、Ｑパリティという）が生成されて、それぞれの冗長コードが同一のストライプ列のストライプに書き込まれる。
【００２３】
また、上記に説明した以外のＲＡＩＤレベルとして、例えば、ＲＡＩＤ１〜４も存在する。また、データの冗長化技術として、３重ミラー（Ｔｒｉｐｌｉｃａｔｉｏｎ）や、パリティを３個用いたトリプルパリティ技術等もある。また、冗長コードの生成技術についても、ガロア演算を用いたＲｅｅｄ−ｓｏｌｏｍｏｎ符号や、ＥＶＥＮ−ＯＤＤ等さまざまな技術が存在する。本実施形態では、主にＲＡＩＤ５、６について説明するが、これは本発明を限定するものではなく、上述した方法の置き換えによる応用が可能である。
【００２４】
上位ストレージ装置１００は、下位ストレージ装置１８０のいずれかの下位ストレージ装置１８０が故障した場合に、例えば、以下に示す処理により、故障したストレージ装置１８０に格納されているデータ要素を復元する。
【００２５】
第１の処理としては、マイクロプロセッサ（図中ＭＰと表記）１２１が、故障した下位ストレージ装置１８０に格納されていたデータ要素を復元するために必要なデータ（例えば、他のデータ要素及びパリティ）を、そのデータを格納している複数の下位ストレージ装置１８０から取得して、インタフェースデバイス（例えば、ＢＥＰＫ１４０）の転送バッファ１４２を介してキャッシュメモリ（ＣＭ）１３１に格納させる。そして、ＢＥＰＫ１４０のパリティ演算器１４１により、キャッシュメモリ（ＣＭ）１３１のデータに基づいてデータ要素を復元し、当該データ要素を所定の下位ストレージ装置１８０に格納させる。
【００２６】
（１−２）計算機システムのハードウェア構成
次に、計算機システムのハードウェア構成について説明する。図１に示すように、計算機システムは、１以上のホスト計算機（以下、ホストという）１０と、管理サーバ２０と、上位ストレージ装置１００とを含む。ホスト計算機１０と、管理サーバ２０と、上位ストレージ装置１００とは、ネットワーク３０を介して接続されている。ネットワーク３０は、ローカルエリアネットワークであっても、ワイドエリアネットワークであってもよい。また、上位ストレージ装置１００に、１以上の外部ストレージ装置４０を接続するようにしてもよい。外部ストレージ装置４０は、１つ以上の記憶デバイスを含む。記憶デバイスは、不揮発性の記憶媒体であって、例えば、磁気ディスク、フラッシュメモリ、その他半導体メモリである。
【００２７】
ホスト１０は、例えば、アプリケーションを実行する計算機であり、上位ストレージ装置１００からアプリケーションに利用するデータを読み出したり、上位ストレージ装置１００にアプリケーションで作成したデータを書き込んだりする。
【００２８】
管理サーバ２０は、管理者の入力に応じて、計算機システムを管理する管理処理を実行するための計算機である。管理サーバ２０は、入力デバイスに対する管理者の操作により、データを復元する際に実行させるデータ復元処理の種類の設定を受け付け、上位ストレージ装置１００に受け付けたデータ復元処理を実行させるように設定する。
【００２９】
上位ストレージ装置１００は、１以上のフロントエンドパッケージ（ＦＥＰＫ）１１０と、保守インタフェース（保守Ｉ／Ｆ）１１５と、１以上のマイクロプロセッサパッケージ（ＭＰＰＫ）１２０と、１以上のキャッシュメモリパッケージ（ＣＭＰＫ）１３０と、１以上のバックエンドパッケージ（ＢＥＰＫ）１４０と、内部ネットワーク１５０と、１以上のディスクユニット（ＤＫＵ）１６０とを有する。ＦＥＰＫ１１０、保守Ｉ／Ｆ１１５、ＭＰＰＫ１２０、ＣＭＰＫ１３０、及びＢＥＰＫ１４０は、内部ネットワーク１５０を介して接続されている。ＢＥＰＫ１４０は、複数系統のパスを介してＤＫＵ１６０と接続されている。
【００３０】
ＦＥＰＫ１１０は、インタフェースデバイスの一例であり、１以上のポート１１１を有する。ポート１１１は、上位ストレージ装置１００を、ネットワーク３０等を介して種々の装置と接続する。保守Ｉ／Ｆ１１５は、上位ストレージ装置１００を、管理サーバ２０と接続するためのインタフェースである。
【００３１】
ＭＰＰＫ１２０は、第１の制御デバイスの一例としてのマイクロプロセッサ（ＭＰ）１２１と、ローカルメモリ（ＬＭ）１２２とを有する。ローカルメモリ１２２は、各種プログラムや、各種情報を記憶する。マイクロプロセッサ１２１は、ローカルメモリ１２２に格納されたプログラムを実行して各種処理を実行する。マイクロプロセッサ１２１は、ＢＥＰＫ１４０を介して、各種コマンド（例えばＳＣＳＩにおけるリードコマンドやライトコマンドなど）をＤＫＵ１６０の下位ストレージ装置１８０に送信する。また、マイクロプロセッサ１２１は、ＦＥＰＫ１１０を介して、各種コマンドを外部ストレージ装置４０に送信する。
【００３２】
ＣＭＰＫ１３０は、キャッシュメモリ（ＣＭ）１３１を有する。キャッシュメモリ１３１は、ホスト１０から下位ストレージ装置１８０等に書き込むデータ（ライトデータ）や、下位ストレージ装置１８０から読み出したデータ（リードデータ）を一時的に格納する。
【００３３】
ＢＥＰＫ１４０は、パリティ演算器１４１と、第２の制御デバイスの一例としての転送バッファ（ＤＸＢＦ）１４２と、バックエンドコントローラ（ＢＥコントローラ）１４３とを有する。
【００３４】
パリティ演算器１４１は、例えば、小型のプロセッサであり、下位ストレージ装置１８０に障害が発生した際にその障害により読み出せなくなったデータ要素をリビルドするための冗長コード（以下、パリティ）を生成する。パリティ演算器１４１は、例えば、ＲＡＩＤ５で構成されたＲＡＩＤグループのデータ単位に対しては、データ単位を構成する複数のデータ要素の排他的論理和をとることによってＰパリティを生成する。また、パリティ演算器１４１は、ＲＡＩＤ６で構成されたＲＡＩＤグループのデータ単位に対しては、更に、データ単位を構成する複数のデータ要素に所定の係数を掛けた後、それぞれのデータの排他的論理和をとることによって、Ｑパリティを生成する。また、パリティ演算器１４１は、データ単位についての１以上のストライプデータ要素（データ要素及び／又はパリティ）に基づいて、データ単位中のいずれかのデータ要素を復元する復元処理を行う。
【００３５】
転送バッファ１４２は、下位ストレージ装置１８０から送信されたデータや、下位ストージ装置１８０へ送信するデータを一時的に格納する。ＢＥコントローラ１４３は、ＤＫＵ１６０の下位ストレージ装置１８０との間で各種コマンドや、ライトデータ、リードデータ等の通信を行う。
【００３６】
ＤＫＵ１６０は、複数の下位ストレージ装置１８０（以下、ドライブという場合がある）を有する。下位ストレージ装置１８０は、１つ以上の記憶デバイスを含む。記憶デバイスは、不揮発性の記憶媒体であって、例えば、磁気ディスク、フラッシュメモリ、その他半導体メモリ（ＰＲＡＭ、ＲｅＲＡＭ等）である。ＤＫＵ１６０は、ＢＥコントローラ１４３と同一のパスにより接続される複数の下位ストレージ装置１８０のグループ（パスグループ）１７０を複数有する。同一のパスグループ１７０に属する下位ストレージ装置１８０は、スイッチ１６１を介して接続されている。同一のパスグループ１７０に属する下位ストレージ装置１８０同士（以下“同一の筋のドライブ“と呼ぶ）は、直接通信することが可能であり、例えば、同一のパスグループ１７０に属する一の下位ストレージ装置１８０から他の下位ストレージ装置１８０に対して、各種データを送信することができる。なお、何らかの要因によりスイッチや電源に障害が発生した場合に、同一の筋のドライブは他の筋のドライブよりも影響を受けやすいという特性を持つ。
【００３７】
（１−３）計算機システムの論理構成
次に計算機システムの論理構成について説明する。図２は、計算機システムの論理構成を示す概念図である。
【００３８】
上位ストレージ装置１００は、複数のドライブ１８０を束ねて、物理的なパリティグループ（以下、物理パリティグループ（ＰＰＧ）と称する。）２０５を構成する。たとえば、１６個のドライブを束ねて物理パリティグループを構成する。この物理的なパリティグループは、分散グループ（ＤＧ）２０７に対する増設・減設の単位である。
【００３９】
分散グループ（ＤＧ）２０７は、複数の物理パリティグループ２０５を束ねて仮想的なパリティグループ（ＶＰＧ）２０４を構成する。ここで、仮想パリティグループ２０４上の仮想的なストライプ構造は、分散グループ２０７の範囲で物理パリティグループ内のドライブに分散される。つまり、仮想パリティグループ２０４へのＩ／Ｏアクセスは、その所属する分散グループ２０７の範囲内の物理的なドライブにアクセスされ、当該範囲を超えた物理的なドライブにアクセスされることはない。また、分散グループ内に、仮想パリティグループ２０４と物理パリティグループは同数存在し、分散グループ内に存在するその識別子も同じである。仮想パリティグループ２０４が複数束ねられて、論理的な記憶容量の集合であるプール２００が構成される。
【００４０】
また、上記したように、上位ストレージ装置１００は、ドライブ１８０として、例えば、フラッシュメモリや、ＳＡＳドライブ、ＳＡＴＡドライブなどの複数の性能や容量の特性が異なる記憶媒体を有する場合がある。これらの異なる特性に応じて、記憶媒体を分類したものを階層（Ｔｉｅｒ）２０６という。各Ｔｉｅｒは性能の特性が異なるため、分散グループを、Ｔｉｅｒをまたいで構成すると、性能の低いドライブがボトルネックとなってしまう場合がある。そのため、分散グループは、同一のＴｉｅｒで構成するようにしている。
【００４１】
また、プール内には仮想ボリューム（ＶＶＯＬ）２０１が複数存在する。仮想ボリューム２０１は、仮想的なデバイスであり、ホスト１０から参照され、アクセスされる。上位ストレージ装置の管理者は、保守インタフェース１１５を介して、任意のサイズの仮想ボリュームを作成する。このサイズは、実際のドライブ１８０の合計容量に依存しない。
【００４２】
具体的に、ＭＰ１２１は、ホスト１０からＩ／Ｏアクセスがあった仮想ボリューム２０１の仮想的な一記憶領域（ＶＶＯＬページ２０２）に対して、仮想パリティグループ（ＶＰＧ）の一記憶領域（ＶＰＧページ２０３）を動的に割り当てる。ここで、例えば、仮想ボリュームページ２０２毎にアクセス頻度を記録し、高頻度の仮想ボリュームページに対して、高性能な仮想パリティグループ（Ｔｉｅｒ１の仮想パリティグループ（ＶＰＧ）に属するＶＰＧページ）を割り当てるか、継続的に負荷を監視して周期的に再配置をする。
【００４３】
図３に、ドライブ１８０のデータ構成図を示す。下位ストレージ装置（ドライブ）１８０は、上位の装置との間では、ＳＣＳＩコマンド処理の最小単位（例えば、５１２Ｂ）であるサブブロック６１を単位として、データの受け渡しが可能である。また、キャッシュメモリ１３１上でのデータをキャッシュする際の管理単位（例えば、２５６ＫＢ）であるスロット６２は、連続する複数のサブブロック６１の集合で構成される。ストライプ５７は、複数のスロット６２に格納される。ストライプ５７のサイズは、例えば、スロット６２が２個で構成される場合、５１２ＫＢである。
【００４４】
図４に、データマッピング構造図を示す。ホスト１０により認識可能な仮想ボリューム２０１は、複数の仮想ボリュームページ２０２により構成される。仮想ボリュームページ２０２には、仮想パリティグループ２０４の仮想パリティグループページ２０３が割り当てられる。この関係をページマッピング４０１と呼び、マイクロプロセッサ１２１は、後述するページマッピングテーブル７０５を利用して、ページマッピング４０１を動的に管理する。
【００４５】
仮想パリティグループ２０４では、１つ以上の仮想チャンク（Ｖ  Ｃｈｕｎｋ）４００が管理される。仮想チャンク４００は、複数のパーセル（Ｐａｒｃｅｌ）４０２により構成される。パーセル４０２は、１つのストレージ装置（例えば、下位ストレージ装置１８０）上の連続した領域で構成される。パーセル４０２は、図４の例では８つのストライプ５７で構成される。また、上位ストレージ装置１００では、仮想ボリューム２０１をユニークな番号で管理している。
【００４６】
図４は、仮想チャンク４００が、ＲＡＩＤ６の６Ｄ＋２Ｐ構成、すなわち、データ単位を構成する６つのデータ要素（Ｄ）と、これらデータ要素に対応する２つのパリティ（Ｐ）とをそれぞれ異なるストレージ装置に格納する構成の場合を示す。この場合、例えば、８つの異なる下位ストレージ装置１８０のパーセル４０２で構成される。
【００４７】
仮想チャンク４００は、複数（例えば、４個の）の仮想パリティグループページ２０３を含む。仮想パリティグループページ２０３は、複数（例えば、２個）の連続するデータ単位のデータ要素及びパリティ（同一のストライプ列のデータ）を格納することができる。例えば、この複数のデータを数ＭＢとすることで、ドライブ１８０が磁気ディスクなどの場合でもホストＩＯのシーケンシャル性能を一定に保つことができる。同図において、１＿Ｄ１（５７ｂ）、１＿Ｄ２、１＿Ｄ３、１＿Ｄ４、１＿Ｄ５、１＿Ｄ６、１＿Ｐ（５７ｃ）、１＿Ｑ（５７ｄ）のように、「＿」の前の数字が共通するものが、同一のデータ単位（ストライプ列）におけるデータ要素及びパリティを示す。なお、データ要素及びパリティは、それぞれストライプ５７のサイズとなっている。
【００４８】
仮想パリティグループ２０４は上位ストレージ装置１００において、ユニークな番号を有する。また、各仮想パリティグループ２０４には、一定の数（以降、Ｎで表現する）の仮想的なドライブ４０３を表すドライブ番号（ＶＣＤＥＶ番号）を有する。これは、仮想パリティグループ内の記憶領域のアドレッシングのための識別子で、後述する物理パリティグループのドライブ（ＰＣＤＥＶ）との対応関係を表すための識別子である。
【００４９】
各仮想ボリューム２０１は、ホスト１０から、仮想ボリューム２０１を表す識別子と、ＬＢＡ（Logical Block Address）によりアクセスされる。図４に示すように、仮想ボリューム２０１の先頭からＶＶＯＬＰａｇｅ＃を設ける。ホスト１０からのＩ／Ｏにより指定されたＬＢＡに対して、以下の式によりＰａｇｅ＃を算出することができる。
【００５０】
【数１】
0005971354.tif 000002
【００５１】
また、ページは、複数のストライプにより構成されている。ただし、ホスト１０側からはパリティのデータをアクセスさせないため、仮想ボリューム２０１上ではパリティ分が見えない。例えば、図４で示す６Ｄ２Ｐの場合には、仮想パリティグループ側の空間における８×２個のストライプ（仮想ボリュームページ２０２）は、仮想ボリューム２０１上では、６×２個のストライプ（仮想パリティグループページ２０３、ＶＶＯＬＰａｇｅｓｉｚｅ）として見える。これを補正することにより、ページマッピング４０１と合わせて、仮想ボリューム２０１側のＬＢＡに対応する仮想パリティグループ番号（ＶＰＧ＃）でのドライブ番号（ＶＣＤＥＶ＃）、仮想チャンク番号（ＶＣｈｕｎｋ＃）及びＰａｒｃｅｌ内のオフセットアドレスを算出することができる。もちろん、ホスト１０からのＩ／Ｏアクセスに対応したパリティ領域（５７ｃ、５７ｄ）の仮想パリティグループ番号（ＶＰＧ＃）でのＶＣＤＥＶ＃とＶＣｈｕｎｋ＃、Ｐａｒｃｅｌ内のオフセットアドレスも算出可能である。
【００５２】
図４では、RAID6(6D2P)のケースを説明したが、例えば14D2Pなど、データ数を増やしてもよいし、RAID4のようにパリティのみのパーセルを作成してもよい。また、Ｑパリティのエンコーディングはガロア演算以外でも、EVENODD法など他の一般的に知られた方法を用いてもよい。
【００５３】
図５は、本実施の形態にかかる計算機システムの仮想パリティグループと物理パリティグループのデータマッピング構成図である。
【００５４】
仮想チャンク４００は、図４でも説明したように、仮想パリティグループ２０４の記憶領域の空間に対して、連続的に存在する。仮想チャンク４００は、その連続c個に対して、c個の物理チャンク（ＰＣｈｕｎｋ）５００ａと対応し、その関係は周期的である。また、物理パリティグループ側の物理チャンク５００ａについても、連続c＋１個に対して、周期的に同じパターンでマッピングを実施する。
【００５５】
また、仮想チャンク４００と物理チャンク５００ａの対応関係は、ＶＰ／ＰＶマッピング５０１で管理される。ここで、物理パリティグループ２０５が２個以上の場合は、仮想パリティグループの１周期５０５のｃ個の仮想チャンク４００に対して、割り当てられる物理チャンク５００ａの属する物理パリティグループが1対多の関係となる。また、物理パリティグループの１周期５０６のｃ個の物理チャンク５００ａに対して、割り当てられる仮想チャンク４００の属する仮想パリティグループは１対多の関係となる。また、仮想チャンク上のＮ個のパーセルのデータ実体は、ｃ個の物理チャンク５００ａに対して１：１に割りあたるのではなく、ｃ個の物理チャンク５００ａに対して横断的に割りあたる。これらのマッピング方法については、後で詳細に説明する。
【００５６】
また、物理チャンク側がｃ＋１と仮想チャンク側より1個多いのは、物理チャンク側にはスペア用の物理チャンク５００ｂが設けられるためである。以下の式が成立する場合に、そのＰＣｈｕｎｋ＃のＰｃｈｕｎｋは、スペア用の領域となる。
【００５７】
【数２】
0005971354.tif 000003
【００５８】
このスペア領域は、物理パリティグループが属する分散グループ内のドライブが故障した場合に、リビルド処理の復元先として使用される予約領域である。この故障ドライブと対応するのが仮想スペアドライブ５０２であり、実体としては存在しないドライブである。領域としては、スペア用の物理チャンク５００ｂの一部を割り当てる。
【００５９】
このスペア用の物理チャンクの割り当ては、スペアマッピング５０３により管理される。スペア用のマッピング方法については、後で詳細に説明する。
【００６０】
（１−４）各種テーブル
次に、本実施の形態における各種テーブルの構成について説明する。下記で説明するテーブルはメモリ使用量や検索の処理時間削減のため、ポインタ構造やハッシュテーブルを用いてもよいし、逆引きテーブルを用いてもよい。
【００６１】
図６は、本実施の形態に係る共有メモリ２００に格納されている各種テーブルを示す図である。共有メモリ２００は、例えば、下位ストレージ装置１８０、キャッシュメモリ（ＣＭ）１３１、及びローカルメモリ（ＬＭ）１２２の少なくともいずれか１つの記憶領域を用いて構成される。なお、下位ストレージ装置１８０、キャッシュメモリ１３１、及びローカル守り１２２の内の複数の構成の記憶領域を用いて論理的な共有メモリ２００を構成し、各種情報についてキャッシュ管理を行うようにしてもよい。
【００６２】
図６に示すように、共有メモリ２００には、プール管理テーブル７０１と、仮想スペア管理テーブル７０２と、ドライブ状態テーブル７０３と、キャッシュ管理テーブル （ダーティビット）７０４と、ページマッピングテーブル７０５と、ページ割り当て優先度テーブル７０６と、V cycleマッピングテーブル(V2P) ７０７と、P cycleマッピングテーブル(逆変換 P2V) ７０８と、V CDEVマッピングテーブル (SEED) ７０９と、先読み実行ドライブリスト ７１０と、スペア変換テーブル ７１１と、スペア逆変換テーブル ７１２とが格納される。各テーブルの内容については後で詳細に説明する。
【００６３】
図７は、本実施の形態に係るローカルメモリ１２２に格納されている各種プログラムを示す図である。ローカルメモリ１２２には、ホストI/O処理プログラム８０１と、まとめ書き処理プログラム８０２と、ページ変換処理プログラム８０３と、LP変換処理プログラム８０４と、PL変換処理プログラム８０５と、スペア変換処理プログラム８０６と、スペア逆変換処理プログラム８０７と、パーセルマッピングテーブル生成処理プログラム８０８と、スペアマッピングテーブル生成処理プログラム８０９と、リビルド処理プログラム８１０と、復元対象のデータ先読み処理プログラム８１１とが格納される。
【００６４】
ホストＩ／Ｏ処理プログラム８０１は、リード／ライト処理を実行させるためのプログラムである。まとめ書きプログラム８０２は、まとめ書き処理を実行させるためのプログラムである。リビルド処理プログラム８１０は、リビルド処理を実行させるためのプログラムである。各プログラムにより実行される処理については後で詳細に説明する。
【００６５】
プール管理テーブル７０１は、プールと、Ｔｉｅｒと、分散グループ（ＤＧ）と、仮想パリティグループ（ＶＰＧ）との対応関係を管理するテーブルである。図８に示すように、プール管理テーブル７０１は、プール番号欄７０１１、Ｔｉｅｒ番号欄７０１２、分散グループ番号（ＤＧ＃）欄７０１３及び仮想パリティグループ（ＶＰＧ＃）欄７０１４から構成される。
【００６６】
プール番号欄７０１１には、プールを識別する番号が格納される。Ｔｉｅｒ番号欄７０１２には、Ｔｉｅｒを識別する番号が格納される。分散グループ番号欄７０１３には、分散グループを識別する番号が格納される。仮想パリティグループ欄７０１４には、仮想パリティグループを識別する番号が格納される。
【００６７】
プール管理テーブル７０１により、マイクロプロセッサ１２１は、プールの各Ｔｉｅｒに属する分散グループの識別子と、各分散グループに属する仮想パリティグループの識別子を調べることができる。また、分散グループ内の仮想パリティグループと物理パリティグループの識別子は等しいため、マイクロプロセッサ１２１は、各分散グループに属する物理パリティグループも知ることができる。
【００６８】
仮想スペア管理テーブル７０２は、分散グループに属する仮想スペアドライブと、その状態を管理するテーブルである。図９に示すように、仮想スペア管理テーブル７０２は、分散グループ番号（ＤＧ＃）欄７０２１と、仮想スペアドライブ番号（V Spare Drive＃）欄７０２２と、状態欄７０２３と、コピーポインタ欄７０２４とから構成される。
【００６９】
分散グループ番号欄７０２１には、分散グループを識別する番号が格納される。仮想スペアドライブ番号欄７０２２には、仮想スペアドライブを識別する番号が格納される。状態欄７０２３には、生成されるスペアドライブの使用状態が格納される。コピーポインタ欄７０２４には、エントリの仮想スペアドライブ欄７０２２のドライブ番号に対応する仮想スペアドライブがリビルド中である場合に、どこのＬＢＡまでリビルドが進んだかを示すポインタ情報が格納される。リビルド中でない場合は、無効値を入れておく。また、リビルド中の初期状態では、０が格納され、リビルド中の最終状態では、復元対象のドライブの最大のＬＢＡが格納される。
【００７０】
分散グループには、その規模に応じてスペア領域が設けられる。このスペア領域は、仮想スペアドライブとして管理される。つまり、分散グループのスペア領域の量に応じて、マイクロプロセッサ１２１は、仮想スペアドライブを仮想スペア管理テーブル７０２のエントリとして生成する。仮想スペア管理テーブル７０２のエントリを生成する契機としては、例えば、分散グループの増減設、上位ストレージ装置の初期設定時などである。仮想スペア管理テーブル７０２は、ドライブが閉塞した際に、未使用の仮想スペアドライブを探すために使用される。
【００７１】
ドライブ状態テーブル７０３は、物理パリティグループを構成する物理ドライブ（例えば、下位ストレージ装置１８０）の状態を管理するテーブルである。図１０に示すように、ドライブ状態テーブル７０３は、物理パリティグループ番号（ＰＰＧ＃）欄７０３１と、ＰＤＥＶ番号欄７０３２と、状態欄７０３３１とから構成される。
【００７２】
物理パリティグループ欄７０３１には、物理パリティグループを識別する番号が格納される。ＰＤＥＶ番号欄７０３２には、エントリの物理パリティグループ欄７０３１の物理パリティグループを構成する物理ドライブの番号（物理ドライブ番号）が格納される。状態欄７０３３には、エントリのＰＤＥＶ番号欄７０３２の物理ドライブ番号に対応する物理ドライブの状態が格納される。
【００７３】
物理ドライブの状態としては、物理ドライブがリード及びライトアクセスが可能で正常であることを示す「正常」、又は物理ドライブの故障等によりリード及びライトアクセスが不可能なことを示す「アクセス不可」が格納される。
【００７４】
キャッシュ管理テーブル７０４は、キャッシュメモリ１３１に格納されたデータを管理するテーブルである。図１１に示すように、キャッシュ管理テーブル７０４は、仮想ボリューム番号（ＶＶＯＬ＃）欄７０４１と、ボリュームスロット番号欄７０４２と、キャッシュスロット番号欄７０４３と、デステージ抑止フラグ欄７０４４と、ダーティビットマップ欄７０４５とから構成される。
【００７５】
仮想ボリューム番号欄７０４１には、仮想ボリュームを識別する番号が格納される。ボリュームスロット番号欄７０４２には、仮想ボリューム番号欄７０４１の仮想ボリューム番号に対応する仮想ボリュームのボリュームスロットの番号（ボリュームスロット番号）が格納される。
【００７６】
キャッシュスロット番号欄７０４３には、ボリュームスロット番号欄７０４２のボリュームスロット番号に対応するボリュームスロットが格納されているキャッシュメモリ１３１におけるキャッシュスロットの番号（キャッシュスロット番号）が格納される。キャッシュスロット番号欄７０４３には、ボリュームスロットに格納されたデータ要素を格納するキャッシュスロットの番号（図１１では、（データ）と付加されている番号）と、ボリュームスロットに格納されたデータ要素を復元するためのパリティを格納するキャッシュスロットの番号（図１１では、（パリティ）と付加されている番号）とが格納される。
【００７７】
デステージ抑止フラグ欄７０４４には、エントリのキャッシュスロット番号欄７０４３のキャッシュスロット番号に対応するキャッシュスロットのデータを、デステージしてもよいかを示すフラグが格納される。すなわち、デステージ抑止フラグ欄７０４４には、ストレージ装置に書き込んでキャッシュメモリ１３１のキャッシュスロットから削除してもよいかを示すデステージ抑止フラグが格納される。ダーティビットマップ欄７０４５には、エントリのキャッシュスロット番号欄７０４３のキャッシュスロット番号に対応するキャッシュスロットにおける各サブブロックのデータが、ダーティデータであるか否かを示すビットの集合（ビットマップ）が格納される。
【００７８】
ページマッピングテーブル７０５は、仮想ボリューム２０１のページと、仮想パリティグループ２０５のページとの対応関係を示す情報である。図１２に示すように、ページマッピングテーブル７０５は、プール番号欄７０５１と、仮想ボリューム番号（ＶＶＯＬ＃）欄７０５２と、仮想ボリュームのページ番号（Page＃）欄７０５３と、仮想ボリュームに対応する仮想パリティグループ番号（ＶＰＧ＃）欄７０５４と、仮想パリティグループのページ番号（Page＃）欄７０５５とから構成される。
【００７９】
プール番号欄７０５１には、プール２００を識別する番号が格納される。仮想ボリューム番号欄７０５２には、仮想ボリューム２０１を識別する番号が格納され、ページ番号欄７０５３には、仮想ボリュームを構成するページを識別する番号が格納される。仮想パリティグループ７０５４には、エントリの仮想ボリューム２０１に対応する仮想パリティグループを識別する番号が格納される。ページ番号欄７０５５には、仮想パリティグループを構成するページを識別する番号が格納される。
【００８０】
ページ割り当て優先度テーブル７０６は、仮想ボリューム２０１のページに割り当てる仮想パリティグループ２０４の優先度を管理するテーブルである。図１３に示すように、優先度テーブル７０６は、仮想ボリューム番号（ＶＶＯＬ＃）欄７０６１と、優先度欄７０６２と、仮想パリティグループ番号（ＶＰＧ＃）欄７０６３とから構成される。仮想ボリューム番号欄７０６１には、仮想ボリューム２０１を識別する番号が格納される。優先度欄１１０７には、優先度を示す情報が格納され、小さい番号ほど優先度が高いことを意味する。例えば、仮想ボリュームＶＶＯＬ＃１には、仮想パリティグループＶＰＧ＃２から最も優先的にページを配置されることがわかる。また、仮想パリティグループＶＰＧ＃２の空きページがなくなった場合には、その次に優先度の高い仮想パリティグループＶＰＧ＃０から優先的にページが配置される。
【００８１】
図１４Ａ及び図１４Ｂは、仮想パリティグループと物理パリティグループとの間のデータマッピングに関するテーブルである。
【００８２】
V cycleマッピングテーブル７０７（以降Ｖ２Ｐテーブルと称して説明する）は、仮想チャンクと物理チャンクのマッピングを管理するテーブルである。Ｖ２Ｐテーブル７０７は、各チャンクの１周期分のマッピングを管理している。図１４Ａに示すように、Ｖ２Ｐテーブル７０７は、インデックス（Index）欄として、仮想パリティグループ番号（ＶＰＧ＃）欄７０７１及びＶサイクル欄（ＶＣｙｃｌｅ＃）７０７２と、バリュー（Value）欄として、物理パリティグループ番号（ＰＰＧ＃）欄７０７３及びＰサイクル欄（ＰＣｙｃｌｅ＃）７０７４とから構成される。
【００８３】
Ｖ２Ｐテーブル７０７では、仮想パリティグループ番号（ＶＰＧ＃）欄７０７１の値及びＶサイクル番号（ＶＣｙｃｌｅ＃）欄１２０２の値をキーとして、仮想パリティグループ番号（ＰＰＧ＃）欄１２０３の値及びＰサイクル番号（ＰＣｙｃｌｅ＃）欄１２０４の値を求めることができる。
【００８４】
P cycleマッピングテーブル７０８（以降Ｐ２Ｖテーブルと呼ぶ）は、V cycleマッピングテーブル７０７の逆引きテーブルであり、仮想チャンク（Ｖｃｈｕｎｋ）と物理チャンク（Ｐｃｈｕｎｋ）とのマッピングを管理するテーブルである。図１４Ｂに示すように、Ｐ２Ｖテーブル７０８は、インデックス（Index）欄として、物理パリティグループ番号（ＰＰＧ＃）欄７０７３及びＰサイクル欄（ＰＣｙｃｌｅ＃）７０７４と、バリュー（Value）欄として、仮想パリティグループ番号（ＶＰＧ＃）欄７０７１及びＶサイクル欄（ＶＣｙｃｌｅ＃）７０７２とから構成される。各欄はＶ２Ｐテーブルと同様のため詳細な説明は省略する。
【００８５】
ＳＥＥＤテーブル７０９は、仮想チャンク（Ｖｃｈｕｎｋ）内の各ＶＣＤＥＶと物理チャンク（Ｐｃｈｕｎｋ）内の各ＰＣＤＥＶのそれぞれのデータ配置の対応関係を計算するためのもととなる情報を管理するテーブルである。図１５に示すように、ＳＥＥＤテーブル７０９は、インデックス（Index）欄として、仮想パリティグループ番号（ＶＰＧ＃）欄７０９１及びＶＣＤＥＶ＃欄１３０２と、バリュー（Ｖａｌｕｅ）欄としてＳＥＥＤ欄１３０３とから構成される。
【００８６】
ＳＥＥＤ欄１３０３には、仮想パリティグループ及びＶＣＤＥＶに対応するＳＥＥＤ値が格納され、０からｃ−１までの整数値が格納される。効率的な一実施形態としては、一般的に知られている疑似乱数生成方式（例えば線形合同法など）を用いて、ランダムな値（０からｃ−１までの整数）を格納してもよい。ＳＥＥＤ値は、初期設定時に一意に決定され、その後は変更しない。
【００８７】
また、同一の仮想パリティグループ番号（ＶＰＧ＃）内の各ＶＣＤＥＶ＃のＳＥＥＤ値は、できるだけ重複しない値を取るのが望ましい。重複した値を取ると、小規模の構成（ＰＧ数がｃよりも小さい）の場合において、リビルド時の復元元パーセルのドライブ重複率が高くなり、リビルド処理の並列効果が得られない場合があるためである。
【００８８】
先読み実行ドライブリスト７１０は、後述するリビルド処理において、効率的にリビルド処理のドライブアクセスの競合を抑止するためのテーブルである。図１６に示すように、先読み実行ドライブリスト７１０は、物理パリティグループ番号（ＰＰＧ＃）欄７１０１、ＰＤＥＶ＃欄７１０２をキーとして有し、それに対応するＩ／Ｏ発行回数欄７１０３を有する。Ｉ／Ｏ発行回数欄７１０３には、リビルドを実行するために、ドライブに対して何回Ｉ／Ｏを発行したかを示す情報が格納される。Ｉ／Ｏ発行回数は、リビルド処理において、周期のデータ復元処理（計ｃ回）が完了するたびに０にリセットしてもよい。
【００８９】
次に、図１７Ａ及び図１７Ｂを参照して、スペア変換を管理するスペア変換テーブルについて説明する。
【００９０】
スペア変換テーブル７１１は、仮想スペアドライブ５０２に対して、どの物理チャンク５００ｂのパーセルがマッピングされているかを管理するテーブルである。上記したように、仮想スペアドライブ５０２は、物理パリティグループ（ＰＰＧ）２０５上の故障ドライブ１８０に対して、その復元先の記憶領域として仮想的に提供されるドライブである。
【００９１】
図１７Ａに示すように、スペア変換テーブル７１１は、インデックス（Index）欄として、仮想スペアドライブ番号（ＶｓｐａｒｅＤｒｉｖｅ＃）欄７１１１及びＰサイクル番号（ＰＣｙｃｌｅ＃）欄７１１２と、バリュー（Value）欄として、物理側のパーセルの情報である物理パリティグループ番号（ＰＰＧ＃）欄７１１３及びＰＣＤＥＶ＃欄７１１４とから構成される。スペア変換テーブル７１１では、仮想スペアドライブ番号欄７１１１の値及びＰサイクル番号欄７１１２の値をキーとして、物理パリティグループ番号欄７１１３の値及びＰサイクル番号欄７１１４の値を求めることができる。
【００９２】
また、図１７Ｂに示すスペア逆変換テーブル７１２は、スペア変換テーブル７１１の逆引きテーブルであって、インデックス（Index）欄として、物理パリティグループ番号（ＰＰＧ＃）欄７１２１及びＰＣＤＥＶ＃欄７１２２と、バリュー（Value）欄として、仮想スペアドライブ番号（ＶｓｐａｒｅＤｒｉｖｅ＃）欄７１２３及びＰサイクル番号（ＰＣｙｃｌｅ＃）欄７１２４とから構成される。各欄はスペア変換テーブル７１１と同様のため詳細な説明は省略する。
【００９３】
（１−５）ストレージシステムにおけるデータ管理処理の詳細
次に、ストレージシステムにおけるデータ管理処理の詳細について説明する。まず、計算機システムにより発行されたホストＩ／Ｏコマンドに対応したストレージ装置側の同期的な処理であるホストＩ／Ｏ処理について説明する。
【００９４】
ホストＩ／Ｏ処理（リード／ライト処理とも呼ぶ）は、マイクロプロセッサ１２１がＦＥＰＫ１１０のポート１１１を介して、ホスト１０からＩ／Ｏコマンド（リードコマンド、又はライトコマンド）を受信した場合に実行される。
【００９５】
図１８に示すように、まず、マイクロプロセッサ１２１は、ホスト１０から受信したコマンドがライトコマンドであるか否かを判定する（ステップＳ１５０１）。ステップＳ１５０１の判定の結果、受信したコマンドがライトコマンドである場合（ステップＳ１５０１でＹ）には、マイクロプロセッサ１２１は、キャッシュメモリ１３１に、ライトコマンドに対応するライトデータをホスト１０から受領して書き込み（ステップＳ１５０７）、ＦＥＰＫ１１０のポート１１１を介して、ホスト１０に完了通知を送信する（ステップＳ１５０８）。この際に、キャッシュ上のデータがドライブに未反映のデータであることを示すために、ダーティ化する。ダーティ化とは、キャッシュ上のデータが新しいことを表すものであり、まとめ書き処理でドライブへのデータライト処理の対象とすることである。具体的には、対象とするデータのキャッシュ管理テーブル７０４のダーティビットマップ欄７０４５のＢＩＴを全て“１”にすることで実現する。
【００９６】
一方、ステップＳ１５０１の判定の結果、受信したコマンドがライトコマンドでない、すなわち、リードコマンドである場合（ステップＳ１５０１でＮ）には、マイクロプロセッサ１２１は、リードコマンドが対象とするストレージ装置（下位ストレージ装置１８０、又は外部ストレージ装置４０）のアクセス範囲に対応する仮想パリティグループ（ＶＰＧ）２０４上の記憶領域のアドレスを求めるために、ページ変換処理を実行する（ステップＳ１５０２）。リードコマンドには、例えば、アクセス対象とする仮想ボリューム番号及びＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）が含まれている。仮想ボリューム番号及びＬＢＡから、仮想パリティグループ（ＶＰＧ）２０４上の対応するアドレス（ＶＰＧ＃、Ｖｃｈｕｎｋ＃、ＶＣＤＥＶ＃など）を求める方法については、図４にて説明したため、詳細な説明は省略する。
【００９７】
その後、マイクロプロセッサ１２１は、ＬＰ変換処理１５０３により、仮想パリティグループ（ＶＰＧ）のアドレスに対応する物理パリティグループ（ＰＰＧ）のアドレス（ＰＰＧ＃、Ｐｃｈｕｎｋ＃、ＰＣＤＥＶ＃など）を算出する（ステップＳ１５０３）。ＬＰ変換処理については後で詳細に説明する。
【００９８】
次に、マイクロプロセッサ１２１は、ホスト１０からのアクセス範囲に対応するドライブがアクセス不可であるか否かを判定する（ステップＳ１５０４）。具体的に、マイクロプロセッサ１２１は、ドライブ状態テーブル７０３を参照し、ステップＳ１５０３で算出した物理パリティグループ番号（ＰＰＧ＃）とＰＣＤＥＶ＃を用いて、該ドライブの状態を取得して判定する。ここで状態欄７０３３の値がアクセス不可であれば、アクセス不可ドライブ有りと判定する。当該値がアクセス不可ではない場合は、アクセス不可ドライブなしと判定する。
【００９９】
ステップＳ１５０４において、アクセス不可ドライブなしと判定された場合には、マイクロプロセッサ１２１は、通常のリード処理を実行し（ステップＳ１５０５）、ドライブに対してキャッシュメモリにデータをリードして転送する。その後、マイクロプロセッサ１２１は、ホストにデータ転送を実行する（ステップＳ１５０６）。
【０１００】
一方、ステップＳ１５０４において、アクセス不可ドライブ有りと判定された場合には、マイクロプロセッサ１２１は、コピーポインタがアクセス範囲を通過済みかを判定する（ステップＳ１５０９）。ステップＳ１５０４において通過済みであると判定された場合には、マイクロプロセッサ１２１は、通常リード処理を実行する（ステップＳ１５０５）。ステップＳ１５０５において通常リード処理を実行するのは、通過済みである場合には、既にリビルド処理によって復元済みであるので、スペア領域からリードすればよいためである。
【０１０１】
一方、ステップＳ１５０４において通過していないと判定された場合には、まだ復元処理がされていないため、マイクロプロセッサ１２１は、コレクションリード処理を実行する（ステップＳ１５１０）。そして、マイクロプロセッサ１２１は、ＦＥＰＫ１１０を介して、取得したデータをホスト１０に転送する（Ｓ１５０６）。ステップＳ１５１０におけるコレクションリード処理は、失われたデータを、冗長データ（パリティやミラーデータ）から復元する処理である。
【０１０２】
次に、計算機システムにおけるまとめ書き処理の詳細について説明する。まとめ書き処理は、例えば、定期的に実行するようにしてもよい。
【０１０３】
図１９に示すように、マイクロプロセッサ１２１は、キャッシュメモリ１３１上に、ストレージ装置に未反映のデータを含むスロットがあるか否かを判定する（ステップＳ１６０１）。未反映のデータを含むスロットがあるか否かは、キャッシュ管理テーブル２４０を参照することにより把握することができる。マイクロプロセッサ１２１は、ステップＳ１６０１において、未反映のデータを含むスロットがないと判定された場合には、まとめ書き処理を終了する。
【０１０４】
一方、ステップＳ１６０１において、未反映のデータを含むスロットがあと判定された場合には、マイクロプロセッサ１２１は、キャッシュ管理テーブル２４０の当該スロットに対応するエントリのデステージ抑止フラグ２４４を参照し、当該スロットがデステージ抑止中のスロットであるか否かを判定する（ステップＳ１６０２）。
【０１０５】
ステップＳ１６０２において、デステージ抑止中のスロットであると判定された場合には、当該スロットに含まれるデータが復元に利用されていることを示しているため、マイクロプロセッサ１２１は、当該スロットのデータをストレージ装置に反映させることなく、ステップＳ１６０１に戻り、別のスロットを対象とした処理を行う。
【０１０６】
一方、ステップＳ１６０２において、デステージ抑止中のスロットでない場合には、マイクロプロセッサ１２１は、ページ変換処理（Ｓ１６０３）及びＬＰ変換処理（Ｓ１６０４）を行う。ページ変換処理及びＬＰ変換処理によって、当該スロットに対応する物理領域（ＰＰＧ＃、ＰＣｈｕｎｋ＃、ＰＣＤＥＶ＃）を求めることができる。ページ変換処理及びＬＰ変換処理については、後で詳細に説明する。
【０１０７】
そして、マイクロプロセッサ１２１は、ストレージ装置の当該スロットのデータを書き込む範囲（アクセス範囲）に、アクセス不可のドライブがあるか否かを判定する（ステップＳ１６０５）。
【０１０８】
ステップＳ１６０５の判定の結果、アクセス不可のドライブがあると判定された場合には、コレクションライト処理を実行し（ステップＳ１６０６）、ステップＳ１６０１以降の処理を繰り返す。ここで、コレクションライト処理では、ＭＰ１２１は、スロットのデータを用いて、下位ストレージ装置１８０に新しいパリティを生成させて、当該パリティをストレージ装置に格納させる。具体的には、コレクションライト対象データの、ストライプ列の対応する旧データを下位ストレージ装置１８０から読み出し、排他和やガロア演算などにより新しいパリティを生成し、新しいパリティを下位ストレージ装置１８０に書き込む。
【０１０９】
一方、ステップＳ１６０５の判定の結果、復元要のパーセルがないと判定された場合には、ＭＰ１２１は、通常ライト処理を実行し（ステップＳ１６０７）、ステップＳ１６０１以降の処理を繰り返す。ここで、通常ライト処理では、具体的には、そのデータの旧データとパリティの旧データを下位ストレージ装置１８０から読み出し、排他和やガロア演算などにより新しいパリティを生成し、新データ及び新パリティを下位ストレージ装置１８０に書き込む。
【０１１０】
次に、上記したページ変換処理の詳細について説明する。ページ変換処理は、ホストＩ／Ｏ処理（リード処理、ライト処理）時に実行される処理であり、ページマッピングテーブルに基づき、仮想ボリュームのページに対応する仮想パリティグループ番号（ＶＰＧ＃）と仮想パリティグループ上のアドレスを返す処理である。
【０１１１】
図２０に示すように、マイクロプロセッサ１２１は、ページマッピングテーブル７０５に基づき、指定された仮想ボリュームのページに対応する仮想パリティグループ番号（ＶＰＧ＃）とページ番号を算出する（ステップ１７０１）。そして、マイクロプロセッサ１２１は、ページが未割当であるか、割り当て済みであるかを判定する（ステップ１７０２）。
【０１１２】
ステップＳ１７０２では、ページマッピングテーブル７０５の仮想パリティグループ番号（ＶＰＧ＃）のフィールド１１０４に未割当であることを示す”Not-Allocate”などの情報があるため、ページが未割当かを判定することができる。つまり、システムの初期状態（仮想ボリュームに対して一度もホストI/Oが実行されていない状態）では、全てが”Not-Allocate”であることになる。
【０１１３】
ステップＳ１７０２でページが割り当て済みであれば（ステップ１７０２のＮ）、マイクロプロセッサ１２１は、ページマッピングテーブル７０５に示されるアドレスから、仮想チャンク番号（V chunk#）及びV CDEV#を算出し、算出した値を返して（ステップ１７１０）処理を終了する。一方、ページが未割り当てであれば（ステップ１７０２のＹ）、マイクロプロセッサ１２１は、アクセス種別が、リード又はライトかを判定する（ステップ１７０３）。
【０１１４】
ステップＳ１７０３において、アクセス種別がリードであると判定された場合には、マイクロプロセッサ１２１は、ゼロ領域ページの仮想パリティグループ番号（ＶＰＧ＃）及びページ番号を使って（ステップ１７０４）、仮想チャンク番号（V chunk#）及びV CDEV#を算出し、その値を返し（ステップ１７１０）、処理を終了する。ここで、ゼロ領域ページとは、データの値が”0”の領域のページである。一度もライトされていない領域について、”0”であることを保証するためにステップＳ１７０４の処理を実施している。
【０１１５】
このようなゼロ領域ページはストレージシステム内部に１ページあればよいため、そのような領域を予約しておく。アクセス種別がライトである場合（ステップ１７０３において“ライト”と判定）、指定された仮想ボリュームの属するプールのどの分散グループ（ＤＧ）２０７に割り当てるか、対象の分散グループ（ＤＧ）を取得する（ステップ１７０５）。ここで、対象の分散グループ（ＤＧ）を選択する方法は、例えば、対象プールの高Ｔｉｅｒ順に、空きページがあるかをチェックしていき、空きページのあるＴｉｅｒについて、最もページの使用率が少ない分散グループ（ＤＧ）を選択する方法や、最もＩ／Ｏ負荷の低い分散グループ（ＤＧ）を選択する方法などがある。
【０１１６】
以上のようにして分散グループ（ＤＧ）を選択した後、マイクロプロセッサ１２１は、対象の仮想ボリュームについて、優先度テーブルを参照し、優先度の最も高い仮想パリティグループ番号（ＶＰＧ＃）を取得する（ステップ１７０６）。具体的に、マイクロプロセッサ１２１は、ページ割り当て優先度テーブル７０６を参照し、優先度１１０７の値が最も小さい仮想パリティグループ番号（ＶＰＧ＃）１１０８を取得する。
【０１１７】
次に、マイクロプロセッサ１２１は、プール管理テーブル７０１を参照して、対象の仮想パリティグループ（ＶＰＧ＃）が、ステップ１７０５で決定した分散グループ（ＤＧ）内に実装されているかを判定する（ステップ１７０７）。
【０１１８】
ステップ１７０７において、仮想パリティグループが分散グループに実装されていないと判定された場合には、マイクロプロセッサ１２１は、次に優先度の高い仮想パリティグループ（ＶＰＧ＃）を選択して、再度ステップ１７０７の判定を実施する。ステップＳ１７０７において、仮想パリティグループが分散グループに実装されていると判定された場合には、マイクロプロセッサ１２１は、対象の仮想パリティグループ（ＶＰＧ）の空きページが存在するかを判定する（ステップ１７０８）。
【０１１９】
ステップＳ１７０８において、空きページが存在しないと判定された場合には、マイクロプロセッサ１２１は、次に優先度の高い仮想パリティグループ（ＶＰＧ＃）を選択して、再度ステップ１７０７の判定を実施する。ステップＳ１７０８において、空きページが存在すると判定された場合には、マイクロプロセッサ１２１は、当該仮想パリティグループ（ＶＰＧ＃）の空きページに当該ページを割り当てる（ステップ１７０９）。マイクロプロセッサ１２１は、ステップＳ１７０９においてページを割り当てる場合には、割り当て先の情報でページマッピングテーブル７０５を更新する。その後、マイクロプロセッサ１２１は、V chunk#及びV CDEV#を算出し、その値を返し（ステップ１７１０）、処理を終了する。
【０１２０】
上記したように、本実施の形態では、仮想ボリューム毎の優先度に基づいて、できるだけ優先度の高い仮想パリティグループ（ＶＰＧ）からページを割り当てることができる。また、ページ割り当て優先度テーブルの値は、各仮想ボリューム（VVOL）の優先度について、あらかじめ決められた出現が1回づつのランダムな値（ＶＰＧ＃）としてもよいし、ユーザが管理インタフェースなどを通じて、仮想ボリューム毎、又は仮想ボリュームのグループ毎の仮想パリティグループ（ＶＰＧ＃）の優先度を設定してもよい。
【０１２１】
また、仮想ボリュームの複製機能を用いている場合、データ保護の観点で、ＶＶＯＬのペアについて、別々の仮想パリティグループ（ＶＰＧ#）が優先されるように、ストレージ側又は管理インタフェース側で、自動で優先度テーブル７０６の値を決定するようにしてもよい。そのようにした場合は、ドライブ障害が発生してデータロストした場合に、データロストが発生したＶＶＯＬに対して、そのＶＶＯＬの複製からデータを復元できる可能性を高めることができる。
【０１２２】
次に、上記したＬＰ変換処理の詳細について説明する。ＬＰ変換処理は、パーセルマッピングテーブルとＳＥＥＤテーブル、スペア変換テーブルに基づいて、指定された仮想的なアドレスである仮想パリティグループ空間のアドレス（ＶＰＧ＃、Ｖｃｈｕｎｋ＃、ＶＣＤＥＶ＃）から、物理的なデータの格納先である物理パリティグループ空間のアドレス（ＰＰＧ＃、Ｐｃｈｕｎｋ＃、ＰＣＤＥＶ＃）に変換を実施する処理である。ＬＰ変換処理は、ページ変換処理などから実行される処理である。
【０１２３】
図２１に示すように、ＬＰ変換処理では、まず、マイクロプロセッサ１２１は、仮想チャンク（Ｖｃｈｕｎｋ＃）から、仮想サイクル（ＶＣｙｃｌｅ＃）を算出する（ステップ１８０１）。ステップ１８０１では、以下の式により仮想サイクルを算出することができる。
【０１２４】
【数３】
0005971354.tif 000004
【０１２５】
次に、マイクロプロセッサ１２１は、ＶＰ変換処理を実行する（ステップ１８０２）。ステップ１８０２の変換処理については、後で詳細に説明する。ステップＳ１８０２におけるＶＰ変換処理によって、レギュラーなアドレス、つまりドライブが故障していない場合の、物理パリティグループ空間のアドレス（PPG# P Cycle# P CDEV#）を算出することができる。
【０１２６】
次に、マイクロプロセッサ１２１は、ドライブ状態テーブル７０３を参照して算出したＰＰＧ＃及びＰＣＤＥＶ＃を元に、対象ドライブが故障等によりアクセス不可となっているかを判定する（ステップ１８０３）。対象ドライブがアクセス可能な場合（ステップ１８０３でＮ）、レギュラーなアドレス、つまり現在の算出値の物理パリティグループ空間のアドレス（PPG# P Cycle# P CDEV#）がデータの格納先として使われているため、その算出値を用いて物理チャンク（PChunk#）を算出（ステップ１８０５）して終了する。物理サイクル（P Cycle#）から物理チャンク（PChunk#）の算出は、以下の式を用いる。
【０１２７】
【数４】
0005971354.tif 000005
【０１２８】
一方、ステップＳ１８０３において、対象ドライブがアクセス不可な場合には、当該データがスペア領域に退避されることになるため、スペア変換処理を実行（ステップ１８０４）して、スペア先のアドレスを算出し、その算出値を用いて物理チャンク（PChunk#）を算出（ステップ１８０５）して終了する。スペア変換処理については、後で詳細に説明する。
【０１２９】
次に、本実施の形態に係る計算機システムのＰＬ変換処理の詳細について説明する。
ＰＬ変換処理は、リビルド処理などで、故障領域の復元元のデータを特定するためなどに用いられる処理である。ＰＬ変換は、パーセルマッピングテーブルとＳＥＥＤテーブル、スペア変換テーブルに基づき、指定された物理的なデータの格納先である仮想パリティグループ空間のアドレス（ＰＰＧ＃、Ｐｃｈｕｎｋ＃、ＰＣＤＥＶ＃）から、仮想的なアドレスである仮想パリティグループ空間のアドレス（ＶＰＧ＃、Ｖｃｈｕｎｋ＃、ＶＣＤＥＶ＃）に変換を実施する処理である。すなわち、ＰＬ変換は、ＬＰ変換の逆変換に相当する。つまり、ＬＰ変換を実施した後に、その結果でＰＬ変換を実施すると、同じアドレスが返却されることになる。また、逆も同じである。
【０１３０】
図２２に示すように、ＰＬ変換処理では、マイクロプロセッサ１２１は、まず物理チャンク（Ｐｃｈｕｎｋ＃）から、物理サイクル（ＰＣｙｃｌｅ＃）を算出する（ステップ１９０１）。ステップ１９０１では、以下の式により物理サイクルを算出することができる。
【０１３１】
【数５】
0005971354.tif 000006
【０１３２】
次に、マイクロプロセッサ１２１は、算出した物理サイクル（ＰＣｙｃｌｅ＃）を元に、対象がスペア領域かを判定する（１９０２）。この判定は、物理サイクル（ＰＣｙｃｌｅ＃）が0か否かで判定することができる。
【０１３３】
ステップ１９０２において、対象がスペア領域ではない場合、つまり物理サイクル（ＰＣｙｃｌｅ＃）が０でないと判定された場合は、マイクロプロセッサ１２１は、ＰＶ変換処理を実施し、仮想パリティグループアドレス（VPG# V Cycle# V CDEV#）を算出する（ステップ１９０４）。ＰＶ変換処理については後で詳細に説明する。
【０１３４】
その後、マイクロプロセッサ１２１は、仮想チャンク（Ｖｃｈｕｎｋ＃）を算出する（ステップ１９０５）。仮想サイクル（ＶＣｙｃｌｅ＃）から仮想チャンク（Ｖｃｈｕｎｋ＃）の算出は、以下の式を用いて算出することができる。
【０１３５】
【数６】
0005971354.tif 000007
【０１３６】
一方、ステップＳ１９０２において、対象がスペア領域であると判定された場合、つまり、ＰＣｙｃｌｅ＃が０であると判定された場合は、マイクロプロセッサ１２１は、スペア逆変換処理を実施して物理パリティグループアドレス（PPG# P Cycle# P CDEV#）を補正する（ステップ１９０３）。その後ステップ１９０４へと進む。ステップ１９０３の補正処理については、後で詳細に説明する。
【０１３７】
次に、図２３を参照して、本実施の形態に係る計算機システムのＶＰ／ＰＶ変換処理について説明する。図２３は、ＶＰ／ＰＶ変換を示す概念図である。ＶＰ／ＰＶ変換は、パーセルマッピングテーブル（Ｖ２Ｐ、Ｐ２Ｖ）による変換２００５とＳＥＥＤテーブルによる変換２００１によって、算出する。
【０１３８】
パーセルマッピングテーブル（Ｖ２Ｐ、Ｐ２Ｖ）は仮想パリティグループ（ＶＰＧ＃）内の各仮想サイクル（ＶＣｙｃｌｅ＃）内のパーセルについて、物理的な配置先とするＰＰＧ＃ＰＣｙｃｌｅ＃の順番付きの集合を管理する。また、ＳＥＥＤテーブルは、ＰＰＧ＃ＰＣｙｃｌｅ＃の集合内において、データを分散配置する際のパターンを管理するテーブルである。例えば、ＶＰＧ＃０のＶＣｙｃｌｅ＃０のＶチャンク２００２は、Ｖ２Ｐによって、ＰＰＧ＃０のＰＣｙｃｌｅ＃０に対応することが分かる。さらにＳＥＥＤテーブルの値によって、補正する。例えば、ＶＰＧ＃０のＶＣｙｃｌｅ＃０、ＶＣＤＥＶ＃２のパーセルは、ＰＰＧ＃１のＶＣｙｃｌｅ＃２、ＰＣＤＥＶ＃２のパーセル２００６に対応する。具体的な式としては、ＶＰ変換は以下の式により算出される。
【０１３９】
【数７】
0005971354.tif 000008
【０１４０】
また、ＰＶ変換は以下の式により算出される。
【０１４１】
【数８】
0005971354.tif 000009
【０１４２】
次に、本実施の形態に係る計算機システムのスペア変換処理について説明する。図２４Ａは、スペア変換処理を示し、図２４Ｂは、スペア逆変換処理を示す。
【０１４３】
スペア変換処理は、ＬＰ変換処理の一部として実行される。入力としては、スペア退避前の、レギュラー時の故障ドライブのＰＰＧ＃、ＰＣＤＥＶ＃と、ＰＣＹＣＬＥ＃を与えられ、スペア退避先の同等アドレスが算出される。
【０１４４】
マイクロプロセッサ１２１は、スペア変換テーブルに基づいて、スペア変換を実行する（ステップ２１０１）。具体的には、以下の式によりスペア退避先のアドレスを算出する。
【０１４５】
【数９】
0005971354.tif 000010
【０１４６】
マイクロプロセッサ１２１は、変換後のPPG#,PCDEV#が故障ドライブかを、ドライブ状態テーブルを元に判定する（ステップ２１０２）。ステップ２１０２において、変換後のPPG#,PCDEV#が故障ドライブであると判定された場合には、ステップ２１０１に戻り、前回のステップ２１０１の算出結果（PPG#PCDEV#）に対応するVSpareDrive#とP cycle#(=0)を入力として、再度スペア変換を実行する。ステップ２１０２は、スペア領域にデータを退避したのち、最終的な格納先を探すために実行される。これは、そのスペア領域を含むドライブ故障がさらに発生した場合に、その領域を別のドライブのスペア領域に退避することがあるためである。変換後のPPG#,PCDEV#が故障ドライブであると判定された場合には（ステップ２１０２のＮ）、ステップ２１０１の結果を最終結果として処理を終了する。
【０１４７】
次に、図２４Ｂを参照して、スペア逆変換処理について説明する。スペア逆変換処理は、上記したスペア変換処理の逆変換に相当する。スペア逆変換処理により、スペア退避先のアドレスからレギュラー時の故障ドライブのアドレスが算出される。つまり、スペア変換処理を実施した後に、その結果でスペア逆変換処理を実施すると、同じアドレスが返却されることになる。また、逆も同じである。
【０１４８】
図２４Ｂに示すように、マイクロプロセッサ１２１は、スペア逆変換テーブルに基づいて、スペア変換を実行する（ステップ２１０３）。具体的には、以下の式により故障ドライブのアドレスを算出する。
【０１４９】
【数１０】
0005971354.tif 000011
【０１５０】
次に、変換後の物理サイクル（P cycle#）が０か否かを判定する（ステップ２１０４）。ステップ２１０４において、変換後の物理サイクル（P cycle#）が０であると判定された場合には、スペアの退避先となっているため、ステップ２１０３の算出結果（VSpareDrive#）に対応するPPG#PCDEV#を入力として、再度スペア逆変換（ステップ２１０３）を実行する。一方、ステップ２１０４において、変換後のP cycle# が０ではないと判定された場合には、そのアドレスがレギュラーなアドレスであるため、ステップ２１０１の結果を最終結果として処理を終了する。
【０１５１】
次に、本実施の形態にかかる計算機システムのパーセルマッピングテーブル生成処理について説明する。パーセルマッピングテーブル生成処理は、システムの初期設定時やプールの作成時などに実行され、パーセルマッピングテーブル（Ｖ２Ｐ，Ｐ２Ｖ）の初期配置を決定する処理である。当該処理は、まだマッピングを実施していない、ＶＰＧ＃、ＶＣｙｃｌｅ＃について、実施される。
【０１５２】
図２５に示すように、マイクロプロセッサ１２１は、まず、乱数(PPG#, P Cycle#)を生成する（ステップ２２０１）。乱数を生成する方法としては、例えば線形合同法など、疑似乱数を生成する方法を用いてもよいし、あらかじめ決められた乱数テーブルにしたがって生成してもよい。ここで、PPG#は分散グループ（ＤＧ）に実装されている識別子とし、P Cycle#は１〜ｃの範囲の整数値としてランダム値を生成する。
【０１５３】
次に、マイクロプロセッサ１２１は、ステップ２２０１で求めた当該PPG#, P cycle#が既にマッピング済みかを、Ｐ２Ｖテーブルを参照して判定する（ステップ２２０２）。ステップ２２０２で、Ｐ２Ｖテーブル上に既にマッピング済みかの判定は、Ｐ２Ｖテーブルに無効値が入力されているか否かで判定することができる。
【０１５４】
ステップ２２０２において、マッピング済みであると判定された場合には、マイクロプロセッサ１２１は、ステップ２２０１に戻り、別の乱数を生成する。一方、ステップ２２０２において、マッピング済みではないと判定された場合には、マイクロプロセッサ１２１は、次に当該仮想パリティグループ（VPG#）にマップする当該物理パリティグループ（PPG#上）の物理チャンク（P Chunk）の出現頻度がceliing(c / PG)より大か否かを判定する（ステップ２２０３）。具体的には、マイクロプロセッサ１２１は、当該物理パリティグループ（PPG#）と物理サイクル（P Cycle）（1〜cでサーチ）でＰ２Ｖテーブルを参照し、当該仮想パリティグループ（VPG#）の出現頻度をカウントした結果が、celiing(c / PG)以上か否かを判定する。
【０１５５】
ステップ２２０３の目的は、各仮想パリティグループ（ＶＰＧ）がアクセス対象とするドライブの負荷をできるだけ分散させるためである。ステップ２２０３の判定が肯定的である場合は、負荷分散上効率が悪くなってしまうため、再度ステップ２２０１に戻って、別の乱数を生成する。一方、ステップ２２０３の判定が否定的である場合は、当該PPG#、P Cycle#と、当該VPG#、Vcycle#をマッピングする。具体的には、マイクロプロセッサ１２１は、V2P[VPG#][V Cycle#]にPPG#とP cycle#をマッピング（代入）し（ステップ２２０４）、P2V[PPG#][P Cycle#]にVPG#とV cycle#をマッピング（代入）する（ステップ２２０５）。
【０１５６】
その後、マイクロプロセッサ１２１は、全てのVPG#,Vcycle#についてマッピング完了したかを判定する（ステップ２２０６）。ステップ２２０６において、マッピングが完了していないと判定された場合は、次の未マッピングのＶＰＧ＃、ＶＣｙｃｌｅ＃について、ステップ２２０１以降の処理を実行する。一方、ステップ２２０６において、マッピングが完了したと判定された場合は、当該処理を終了する。
【０１５７】
次に本実施の形態に係る計算機システムのスペアマッピングテーブル生成処理について説明する。スペアマッピングテーブル生成処理は、ドライブ故障時などドライブにアクセス不可となった場合にリビルド処理の最初の段階で実行される処理である。本処理は、故障ドライブに格納していたデータの退避先であるスペア領域と、仮想スペアドライブのマッピング（スペアマッピングテーブル）を生成する。
【０１５８】
図２６に示すように、マイクロプロセッサ１２１は、故障ドライブに対して未使用のV SpareDrive#を割り当てる（ステップ２３０１）。具体的には、マイクロプロセッサ１２１は、仮想スペア管理テーブル７０２を参照して、故障ドライブに対応する物理パリティグループ（ＰＰＧ＃）が属する分散グループ（ＤＧ）内に属する仮想スペアドライブで、状態が“未使用”のものを選択する。
【０１５９】
次に、マイクロプロセッサ１２１は、スペア元対象パーセルでスペア領域のマッピングが未決定のパーセル（PPG#, P Cycle#, P CDEV#）について以降の処理を実施する。
【０１６０】
マイクロプロセッサ１２１は、スペア先対象のパーセル（PPG#, P CDEV#, P Cycle#=0固定）を１つ選択し、当該スペア先PPG#及び P CDEV#がスペア領域マッピング済みか否かを判定する（ステップ２３０２）。スペア先対象のパーセル選択方法としては、できるだけ故障ドライブと同じCDEV#にアサインするようにすることでパス障害等による同一CDEV#の同時故障時にデータロスト発生を防ぐ方法が挙げられる。その他、ランダムに選択する方法、CDEV#、PPG#の番号順に選択する方法などでもよい。
【０１６１】
ステップ２３０２では、マイクロプロセッサ１２１は、スペアマッピング逆変換テーブル（spare_rev）を参照して、対象がマッピング済みか否かを判定することができる。ステップ２３０２において、既にマッピング済みであると判定された場合には、別のスペア先対象のパーセルを選択して再度ステップ２３０２の判定処理を実施する。
【０１６２】
一方、ステップ２３０２においてマッピング済みではないと判定された場合には、当該スペア先のPPG#, P CDEV#に当該スペア元PPG# P Cycle#, P CDEV#にマップされるV Cycle#内の他のParcelが存在するかを判定する（ステップ２３０３）。ステップ２３０３の判定処理も、スペアマッピング逆変換テーブル（spare_rev）を参照することにより判断できる。ステップ２３０３では、スペアの退避先として、同一Ｖチャンク内のパーセルが同一のドライブに２個以上入ってしまうと、そのドライブが故障したときに冗長度が一気に２つ落ちることになりデータロスト耐性が低下するため、重複しないことを確認している。
【０１６３】
ステップ２３０３において、他のパーセルが存在すると判定された場合には、マイクロプロセッサ１２１は、別のスペア先対象のパーセルを選択し、再度ステップ２３０２の判定処理を実施する。一方、ステップ２３０３において、他のパーセルが存在しないと判定された場合には、マイクロプロセッサ１２１は、スペア先のパーセルが確定するため、以降の処理でスペアマッピングテーブルを更新する。具体的には、Spare[V SpareDrive#][P Cycle#]にスペア先のPPG#とP CDEV#をマッピング（代入）し（ステップ２３０４）、Spare_rev[PPG#][P CDEV#]にスペア元のP Cycle#とV SpareDrive#をマッピング（代入）する（ステップ２３０５）。
【０１６４】
そして、マイクロプロセッサ１２１は、全てのスペア元Cycle#(c個)についてマッピング実施済みかを判定する（ステップ２３０６）。ステップ２３０６において、すべて実施していないと判定された場合には、マイクロプロセッサ１２１は、マッピング未実施のスペア元対象についてステップ２３０２から実行する。一方、ステップ２３０６において、すべて実施済みであると判定された場合には、マイクロプロセッサ１２１は、処理を終了する。
【０１６５】
次に、本実施の形態に係る計算機システムのリビルド処理について説明する。リビルド処理は、ドライブの故障発生などによりドライブにアクセスが出来なくなった場合に実行され、分散グループ（ＤＧ）の冗長度を回復するために、回復元のデータをリードし、データの回復処理を実行したのちに、スペア領域に回復データを書き込む処理である。リビルド処理は、コレクションコピー処理とも呼ばれる。
【０１６６】
図２７に示すように、マイクロプロセッサ１２１は、まず、スペアマッピング生成処理を実行し、故障ドライブに対応する仮想スペアドライブと、スペア領域へのマッピングを決定する（ステップ２４０１）。
【０１６７】
次に、マイクロプロセッサ１２１は、仮想スペアドライブのコピーポインタに初期値（＝０）を入れる（ステップ２４０２）。このコピーポインタは、どの領域まで復元が完了したかを示すポインタである。
【０１６８】
次に、分散グループ（DG）内で最小の仮想チャンク（V chunk）冗長度を算出する（ステップ２４０３）。本実施形態のようなチャンクが分散した配置では、ドライブの多重故障時に、冗長度の低い仮想チャンクと冗長度の高い仮想チャンクが同時に発生する。そのような状況では、ステップ２４０３の如く、冗長度の低い領域からリビルドを実行することにより、より信頼性を向上させることができる。この優先処理（優先リビルド処理）は、冗長度が２以上の時に有効であり、冗長度が増加すればするほど効果が高くなる。そして、以降の処理は、最小の冗長度のV chunkに対応する故障ドライブについて回復実行をする（複数台ドライブが故障している場合）。
【０１６９】
次に、復元対象データの先読み処理を実行する（ステップ２４０４）。先読み（プリフェッチ）とは、次周期以降（現在のコピーポインタよりも先）の復元対象のデータを本処理とは非同期にステージングする処理である。先読み処理の詳細は後で詳細に説明する。この先読み処理によって、複数のParcelについて多重に復元処理を実行することができ、リビルド時間を削減することが可能となる。
【０１７０】
次に、マイクロプロセッサ１２１は、コピーポインタ値のスロットが復元対象か否かを判定する（ステップ２４０５）。具体的には、コピーポインタ位置の領域について、復元対象パーセルの所属する仮想チャンクの冗長度が、ステップ２４０３で求めた最小の冗長度でない場合、又はページが割当てされていない場合（ステップ２４０５のＮ）は、回復処理の実行は不要であるため、ステップ２４０５の判定処理をスキップしてステップ２４０７に進む。
【０１７１】
一方、ステップ２４０５において対象スロットが復元対象である場合には、マイクロプロセッサ１２１は、データの回復処理を実行する（ステップ２４０６）。ステップ２４０６において、基本的にはステップ２４０４の先読み処理によって、コピーポインタ値のデータがキャッシュ上にステージングされていることが期待できるが、復元対象データがキャッシュ上にない場合（コピーポインタが小さい段階で先読みが動いていない場合など）は、データのステージングを実行したのち、データの回復処理を実行する。また、データの回復処理を実行したら、ダーティビットをＯＮにすることで、復元したデータをまとめ書きにより非同期でスペア領域にデステージする。
【０１７２】
その後、マイクロプロセッサ１２１は、コピーポインタを更新する（ステップ２４０７）。コピーポインタは、データ回復が完了した分、加算して進める。
【０１７３】
次に、マイクロプロセッサ１２１は、新たに他のドライブの故障が発生していないかをチェックする（ステップ２４０８）。ステップ２４０８において、新たに他のドライブ故障が発生していると判定された場合には、ステップ２４０１に戻り、新たに故障したドライブについてスペアマッピング生成処理を実行する。
【０１７４】
一方、ステップ２４０８において、他のドライブ故障が発生していない場合は、マイクロプロセッサ１２１は、コピーポインタが最終ＬＢＡに到達したかを判定する（ステップ２４０９）。最終ＬＢＡとは、ドライブの後端のＬＢＡを意味し、当該ドライブの回復処理が完了したことを示す。ステップ２４０９において、最終ＬＢＡに到達していないと判定された場合には、マイクロプロセッサ１２１は、ステップ２４０４に戻る。
【０１７５】
一方、ステップ２４０９において、最終ＬＢＡに到達したと判定された場合は、マイクロプロセッサ１２１は、コピーポインタに初期値を代入し（ステップ２４１０）、その後全故障ドライブが回復済みかをチェックする（ステップ２４１１）。全故障ドライブが回復済みかは、冗長度が完全に回復したかを確認することである。
【０１７６】
ステップ２４１１において、まだ回復済みではない故障ドライブがある場合は、マイクロプロセッサ１２１は、ステップ２４０３の処理に戻る。一方、すべての故障ドライブが回復済みである場合は、マイクロプロセッサ１２１は、回復ずみのドライブのコピーポインタに無効値を入れ（ステップ２４１２）、リビルド処理を終了する。
【０１７７】
次に、本実施の形態に係る計算機システムの復元対象のデータ先読み処理について説明する。復元対象のデータ先読み処理は、リビルド処理の一部である。
【０１７８】
図２８に示すように、マイクロプロセッサ１２１は、まず、当該回復対象のドライブ（仮想スペアドライブ）のコピーポインタ値から先読み先スロットを算出する（ステップ２５０１）。具体的には、コピーポインタ値にシステムのポリシにより決まっている一定の値を加算したものを先読み先スロットのアドレスとして使用してもよいし、その値をパーセルマッピングテーブルの割り当て状況などから動的に補正してもよい。
【０１７９】
そして、マイクロプロセッサ１２１は、先読み先が有り、且つ先読み先スロットのパーセルが最小の冗長度か否かを判定する（ステップ２５０２）。ここで、先読み先があるとは、ドライブ後端等に達していないことを表している。ステップ２５０２において、最小の冗長度ではない仮想チャンク（Ｖｃｈｕｎｋ）である場合は、マイクロプロセッサ１２１は、当該パーセルの復元処理はスキップして、後で実行する。これは、上記したように、最小の冗長度ではない仮想チャンク（Ｖｃｈｕｎｋ）のパーセルも存在するため、ステップ２５０２において最小の冗長ではない仮想チャンク（Ｖｃｈｕｎｋ）のパーセルの復元処理はスキップし後で実行するためである。
【０１８０】
一方、ステップ２５０２において、最小の冗長度であると判定された場合には、マイクロプロセッサ１２１は、ページ割り当て済みであるか否かを判定する（ステップ２５０３）。ステップ２５０３において、ページが割り当て済みではないと判定された場合には、復元対象としないため、スキップして本処理を終了する。一方、ページが割り当て済みであると判定された場合には、マイクロプロセッサ１２１は、先読み実行ドライブリストから今回先読みするドライブを選択する（ステップ２５０４）。
【０１８１】
当該処理は、ＲＡＩＤ６や３重ミラーなど、２個以上の冗長データを持つ場合に、ドライブへの負荷を効率的に分散させることを目的としている。２個以上の冗長データを持つ場合（この個数をＰとする）は、Ｎ−Ｐ個のデータを読み込めばデータの復元が可能である。故障ドライブがＰ個以下の場合は、復元データの読み出し先のドライブに選択肢が現れる。
【０１８２】
例えば、ＲＡＩＤが６Ｄ２Ｐの場合で、１台のドライブが故障した場合には、故障していないドライブの７台のうちの６台分のデータを読み込めばよいことになる。そこで、一連のリビルド処理で、データを復元するためにアクセスしているドライブ（以前又は以後で復元元、先として使用されている）へのドライブごとのアクセス回数（Ｉ／Ｏ発行回数１３０６）を先読み実行ドライブリストに記録しておき、できるだけアクセス回数が多い（負荷が集中している）ドライブのParcelは選択しないようにすることで、並列効果を引き出し、リビルド時間をより短縮することを可能としている。ステップ２５０４では、上述した先読み実行ドライブリストのＩ／Ｏ発行回数が最も少ないドライブから選択すると、効率的である。
【０１８３】
そして、マイクロプロセッサ１２１は、先読みを実行する（ステップ２５０５）。先読みは、当該処理とは非同期に実行するステージング処理（指定データをドライブからリードしてキャッシュに格納する）である。その後、上記したように、マイクロプロセッサ１２１は、先読み実行ドライブリストのＩ／Ｏ数を更新して（ステップ２５０６）、処理を終了する。
【０１８４】
次に、仮想パリティグループと物理パリティグループのデータマッピングの例について説明する。図２９Ａ〜Ｃは、仮想パリティグループと物理パリティグループのデータマッピングの例を示す概念図である。
【０１８５】
図２９Ａ〜Ｃは、Ｎ＝４（４個のドライブ）、ｃ＝４（４個のパーセル）、ＰＧ＝３（ＰＧは分散グループ（ＤＧ）内の物理パリティグループ数を表す）の例を示している。以下では、２９Ａ〜Ｃを参照して、本実施形態による効果を説明する。
【０１８６】
図中の仮想パリティグループ（ＶＰＧ）内のパーセル４０２で記載している識別子「ｘ−ｙ」のｘは、仮想パリティグループ番号（ＶＰＧ＃）をあらわしている。ｙは仮想チャンク番号（ＶＣｈｕｎｋ＃）を表している。そのパーセルに対応する物理的なドライブ位置を、物理パリティグループ（ＰＰＧ）内の四角（パーセル）の中で同じ識別子で記載している。
【０１８７】
図２９Ａでは、例えば、図中の点線で囲まれたＶＣｈｕｎｋ４００は、ＰＣｈｕｎｋ５００に対応している。ここでは、ＶＣｈｕｎｋ４００内の先頭パーセルがＰＣｈｕｎｋ５００内の先頭パーセルに対応している。
【０１８８】
また、各ＰＰＧは、周期５０６（ｃ＝４個のパーセル＋１個のスペア用パーセル）ごとに、同一のパターンとなっていて、各ＶＰＧも、周期５０５（ｃ＝４個のパーセル）ごとに、同一のパターンとなっていることがわかる。
【０１８９】
図２９Ｂは、ドライブが１台故障した場合（上図）と、２台故障した場合（下図）を示す。（ＶＰＧ側の配置は図２９Ａと同様なので省略している）
【０１９０】
ここでは、ドライブ１８０ａが故障した場合、つまりPPG#0のCDEV#0が故障した場合の、リビルド動作を示している。まず、スペア領域（Ｓと表記）に、故障したドライブに含まれているパーセルを配置する（スペアマッピングテーブル生成処理）。図２９Ｂでは、斜線で示すパーセルがスペア領域に配置されたパーセルである。
【０１９１】
図２９Ｂの上図に示すように、故障したドライブのパーセルに割り当てられたスペア領域に対して、リビルド処理を実行する。冗長度が２（２Ｄ２Ｐ）の場合、２台のドライブをリードすれば、故障ドライブの喪失データを復元することができる。３台のドライブの中から、２台のドライブについて、全体のパーセル数が重複しないように選択する。これにより、１周期あたりのドライブからの最大リード量を２パーセル分に制限し、従来のＲＡＩＤと比較し、２．５倍程度リビルド性能を向上させることが可能となる。
【０１９２】
また、図２９Ｂの下図では、２台のドライブ（180a,180b）が故障した場合の例を示している。図中の点線斜線で示した領域は、冗長度が０の領域である。本実施の形態では、このように冗長度が０の領域を優先して回復する。これにより、１周期あたりのドライブからの最大リード量を１パーセル分に制限し、従来ＲＡＩＤと比較し、５倍程度冗長度の回復性能を高めていることがわかる。また、上記した１台故障時と比較しても２倍程度冗長度の回復性能を高めていることが分かる。
【０１９３】
この点線斜線部分の回復が完了した時点で、分散グループ（ＤＧ）内全体の冗長度は１となるため、次にドライブ障害が発生したとしても、データロストの発生を防ぐことが可能となり、従来ＲＡＩＤと比較してシステムの信頼性を向上させることができる。このように冗長度が０の領域を優先して回復する方法は、冗長度が２以上のデータ保護方法を適用した場合（ＲＡＩＤ６や３重ミラーなど）に実施することができる。
【０１９４】
図２９Ｃは、冗長度を超える障害が発生した場合、例えば、３台以上のドライブで同時に障害が発生した場合を示す図である。図２９Ｃの上図は、３台のドライブ（180a,180b,180c）が同時に閉塞した場合の例である。従来のRAID技術、又は分散RAID技術では、増設したドライブ群（つまりPPG）でこのような冗長度を超える同時多重障害が発生した場合、データロストの発生を防ぐことはできなかった。増設したドライブ群は、同時期かつ同一の製造工程を得ているものであることが多く、製品寿命経過時などに故障が重なる確率が高まる可能性などが考えられる。しかし、本実施の形態では、冗長度を構成する物理ドライブの組み合わせを限定しているため、このような同時多重障害のケースもデータロストの発生を防ぐ可能性を高めることが可能となる。
【０１９５】
例えば、図２９Ｃの上図では、データロスト領域が発生していないことが分かる。ただし、すべての３台故障のケースでデータロストを防ぐことができるわけではない。具体的には、図２９Ｃの上図で示した点線斜線の領域（冗長度０の領域）を含むドライブが同時に故障すると、データロストが発生する。
【０１９６】
図２９Ｃの下図では、データロストが発生するケースを示している。図２９Ｃの下図は、３台のドライブ（180a,180b,180d）が同時に閉塞した場合の例である。この場合、VPG#2、Vchunk#2に相当する領域にデータロストが発生する。しかしながら、本発明によると、冗長度を構成する物理ドライブの組み合わせを限定しているので、確率的に、このようなデータロストが発生する領域は、ほとんどのケースで１個のみとなる。本実施の形態では、さらに仮想ボリュームに対応する仮想パリティグループ（ＶＰＧ）を優先度に基づいて割り当てているため、データロストの発生する仮想ボリュームは、VPG#2に優先的に割り当てているもののみに限定される。
【０１９７】
以上のように、仮にデータロストが発生したとしても、影響を受ける仮想ボリュームは、増設している物理パリティグループ（PPG）数に応じて比率が減少していくことになる。したがって、大規模なプールを構成していても、ロスト時のデータの復旧作業を特定の仮想ボリュームに限定することができるという効果を有する。多くのシステムでは、仮想ボリューム単位にデータのバックアップを持っており、仮にデータが壊れた場合は、そのバックアップから仮想ボリューム単位に復元する。
【０１９８】
上記の例では、パーセルが４個（ｃ＝４）の場合について説明したが、一般的に、ｃの値をパリティグループ（ＰＧ）のＰ乗以下に設定することで、ロスト発生時の周期あたりのパーセル数を１個以下にする確率を高くすることができる。また、一般的に、ｃの値をパリティグループ（ＰＧ）のＰ−１乗以下に設定することにより、冗長度を超えた同時故障によるデータロストの発生確率を低減することができるという特性を有する。
【０１９９】
ただし、ｃを小さくしすぎると、リビルド時間短縮効果が減少し、データロスト率はｃ＝１のときに従来ＲＡＩＤと同等になり、ｃが大きいほどデータロスト率は減少する。また、ｃを大きくしすぎると、ＢＥコントローラ１４３や、スイッチ１６１や、ＣＭＰＫ１３１の帯域や、パリティ演算器１４１の能力限界など、ストライプの分散範囲が広がるのに対して、内部転送ネックにより、信頼性が低下してしまう。つまり、この３つの特性、同時ドライブ多重障害耐性、リビルド時間短縮及びロスト範囲局所化のメリットを同時に享受するためには、ｃの値をＰＧのＰ−１乗程度で、且つ転送ネックを超えない程度に設定することが望ましい。
【０２００】
（２）第２の実施形態
（２−１）計算機システムの概要
次に、第２の実施形態に係るストレージシステムを含む計算機システムについて説明する。以下では、第１の実施形態と異なる構成について詳細に説明し、同様の構成については詳細な説明を省略する。
【０２０１】
本実施形態に係る計算機システムのハードウェア構成は、第１の実施形態と同様のため、詳細な説明は省略する。
【０２０２】
図３０は、本実施形態にかかる計算機システムの共有メモリおよびローカルメモリの図である。
【０２０３】
図３０に示すように、共有メモリ２００には、Ｖ２Ｐ（Ｃｕｒｒｅｎｔ）テーブル７０７ａと、その逆変換テーブルであるＰ２Ｖ（Ｃｕｒｒｅｎｔ）テーブル７０８ａと、Ｖ２Ｐ（Ｔａｒｇｅｔ）テーブル７０７ｂと、その逆変換テーブルであるＰ２Ｖ（Ｔａｒｇｅｔ）テーブル７０８ｂと、ＤＧスワップポインタテーブル２６０１とが格納される。
【０２０４】
上記したように、各Ｖ２ＰテーブルとＰ２Ｖテーブルについて、Ｃｕｒｒｅｎｔ及びＴａｒｇｅｔの２種類のテーブルを有している。これらは、以下に説明する分散グループ（ＤＧ）の増減設処理の途中状態で、正しいアドレスを参照するために存在する。Ｃｕｒｒｅｎｔは、現在のマッピングテーブルを表し、Ｔａｒｇｅｔは増減設後の目標のマッピングテーブルを表している。各Ｖ２Ｐテーブル及びＰ２Ｖテーブルに格納される値は、第１の実施形態のＶ２Ｐテーブル及びＰ２Ｖテーブルと同様のため詳細な説明は省略する。また、各Ｖ２Ｐテーブル及びＰ２Ｖテーブルのデータの生成方法や参照方法については、後述する。
【０２０５】
また、ローカルメモリ１２２には、ＰＰＧ増設処理プログラム８２１、ＰＰＧ減設処理プログラム８２２、パーセル理バランス処理プログラム８２３及びページリバランス処理プログラム８２４などが格納される。各プログラムにより実行される処理については後で詳細に説明する。
【０２０６】
ＤＧスワップポインタテーブル７１３は、対象の分散グループ（ＤＧ）が増設または減設中の場合に、ＤＧスワップポインタの値を管理するテーブルである。
【０２０７】
図３１に示すように、ＤＧスワップポインタテーブル７１３は、プール番号（プール＃）欄７１３１、Ｔｉｅｒ番号（Ｔｉｅｒ＃）欄２７０２と分散グループ番号（ＤＧ＃）欄２７０３及びＤＧスワップポインタ欄２７０４から構成される。
【０２０８】
プール番号欄７１３１には、プールを識別する番号が格納される。Ｔｉｅｒ番号欄には、Ｔｉｅｒを識別する番号が格納される。分散グループ番号欄には、分散グループを識別する番号が格納される。ＤＣスワップポインタ欄２７０４には、ＤＧスワップポインタの値が格納される。
【０２０９】
ＤＧスワップポインタは、仮想パリティグループ（ＶＰＧ）空間のＬＢＡ方向のアドレスを指し、ＤＧスワップポインタ値以前のアドレスのデータは、既に増設又は減設によるデータスワップ処理が完了していることを表している。また、ＤＧスワップポインタの値を超えたアドレスのデータは、まだ増設又は減設が未完了である。また、ＤＧスワップポインタの値が無効値の場合は、増設又は減設が実施されていない又は完了済みの状態を表す。またＤＧスワップポインタの値は、増設又は減設の開始時に０に初期化される。
【０２１０】
次に、計算機システムにおけるＰＰＧ増設処理の詳細について説明する。ＰＰＧ増設処理は、分散グループ（ＤＧ）に物理パリティグループ（ＰＰＧ）を増設する処理である。特に基幹業務向けのストレージシステムでは、可用性を維持するために、分散グループ（ＤＧ）に対するホストＩ／Ｏ処理を継続したまま、容量追加や性能向上のための増設を実現することが必要である。また、増設によって、負荷（ホストＩ／Ｏ負荷、リビルド負荷）をバランシングすることが必要になる。図３２では、ＰＰＧ増設処理の全体像を示す。
【０２１１】
図３２に示すように、マイクロプロセッサ１２１が、プールに物理パリティグループ（ＰＰＧ）の増設指示を受領して（ステップ２８０１）、ＰＰＧ増設処理が開始される。ステップ２８０１において受領する増設指示には、増設対象の物理パリティグループ番号（ＰＰＧ＃）が指定される。増設対象の物理パリティグループ（ＰＰＧ＃）は複数個あってもよい。
【０２１２】
そして、マイクロプロセッサ１２１は、増設対象の分散グループ（ＤＧ）を決定する（ステップ２８０２）。増設対象の分散グループは、物理パリティグループ（ＰＰＧ）のドライブ種別などからプール管理テーブルを用いて自動的に決定するようにしてもよいし、増設指示に含まれた分散グループ（ＤＧ＃）から決定してもよい。
【０２１３】
そして、増設処理時のパーセル変更マッピング決定処理を実行する（ステップ２８０３）。増設時のパーセル変更マッピング決定処理によって、増設した物理パリティグループ（ＰＰＧ）と仮想パリティグループ（ＶＰＧ）のＣｕｒｒｅｎｔのテーブルと、増設後の目標マッピングであるＴａｒｇｅｔのテーブルが生成される。具体的な生成方法については、後で詳細に説明する。
【０２１４】
そして、物理パリティグループ（ＰＰＧ）に対応する仮想パリティグループ（ＶＰＧ）にページ割り当て可能とする（ステップ２８０４）。具体的には、プール管理テーブルの当該分散グループ（ＤＧ）のエントリに、増設した物理パリティグループ（PPG＃）の識別子を仮想パリティグループ（VPG#）として追加する。ステップ２８０４の処理により、増設した物理パリティグループ（ＰＰＧ）がプールの容量として使用可能になる。
【０２１５】
ステップ２８０１からステップ２８０４の処理は、ドライブのデータ移動を必要としないため、高速に実行することができる。これにより、容量枯渇状態でページ割り当てを直ちに開始したいという要求に応えることが可能となる。
【０２１６】
次に、マイクロプロセッサ１２１は、パーセルリバランス処理を実行する（ステップ２８０５）。パーセルリバランス処理では、データスワップ処理を実行して、現状のＣｕｒｒｅｎｔのパーセルマッピングテーブルのデータ配置を、Ｔａｒｇｅｔのデータ配置に、配置変換する。具体的な方法については、後で詳細に説明する。
【０２１７】
続いて、マイクロプロセッサ１２１は、ページリバランス処理を実行する（ステップ２８０６）。ページリバランス処理では、優先度テーブルに基づいて仮想ボリューム内のページ配置を変更する。障害範囲局所化の効果は、仮想ボリューム全体に対して分散グループ（ＤＧ内）の仮想パリティグループ（ＶＰＧ）数（＝ＰＧ）が多ければ多いほど障害範囲局所化の効果が大きくなる。
【０２１８】
仮想ボリューム数が一定であるとすると、１つの仮想パリティグループ（ＶＰＧ）あたりに優先度テーブルに基づいて割り当てられる仮想ボリュームの数を減らしたほうが、障害範囲をより局所化できる。つまり、割り当てる仮想ボリュームの数を減らせば、障害が発生したときの影響を受ける仮想ボリュームの数も減らせる。このページリバランス処理は、増設した仮想パリティグループ（ＶＰＧ）に対して特定の仮想ボリュームのページを移行することによって、１つの仮想パリティグループ（ＶＰＧ）あたりに優先度テーブルに基づいて割り当てられる仮想ボリュームの数を減らすことを目的としている。
【０２１９】
次に、計算機システムにおけるＰＰＧ減設処理の詳細について説明する。ＰＰＧ減設処理は、分散グループ（ＤＧ）から物理パリティグループ（ＰＰＧ）を減設する処理である。特に基幹業務向けのストレージシステムでは、上記したＰＰＧ増設処理と同様に、可用性を維持するために、分散グループ（ＤＧ）に対するホストＩ／Ｏ処理を継続したまま、保守等のためのＰＰＧ減設を実現することが必要である。図３３では、ＰＰＧ減設処理の全体像を示す。
【０２２０】
図３３に示すように、マイクロプロセッサ１２１が、プールに物理パリティグループ（ＰＰＧ）の減設指示を受領して（ステップ２９０１）、ＰＰＧ減設処理が開始される。ステップ２９０１において受領する減設指示には、減設対象の物理パリティグループ番号（ＰＰＧ＃）が指定される。減設対象の物理パリティグループ（ＰＰＧ＃）は複数個あってもよい。
【０２２１】
そして、マイクロプロセッサ１２１は、減設対象の分散グループ（ＤＧ）を決定する（ステップ２９０２）。減設対象の分散グループは、物理パリティグループ（ＰＰＧ）のドライブ種別などからプール管理テーブルを用いて自動的にＤＧ＃を決定してもよいし、減設指示に含まれた分散グループ（ＤＧ＃）から決定してもよい。
【０２２２】
次に、減設処理中にプールの容量が枯渇するかを予想して判定する（ステップ２９０３）。具体的には、現在のページ割り当て量に対して、減設後のプール総ページ量が下回るかで判定する。さらに、実際には減設実行中にもページが割り当てされるため、減設が完了するまでに容量が枯渇する可能性があるので、現在の新規ページ割り当て量の傾きなどを考慮して予測してもよい。
【０２２３】
ステップ２９０３において、容量が枯渇すると予測された場合（ステップ２９０３でＹ）は、マイクロプロセッサ１２１は、減設不可であることを保守Ｉ／Ｆなどを通じてストレージの管理者に通知（ステップ２９０４）し、処理を終了する。この場合は、管理者は、例えばあらかじめプールに対して増設処理を実行してから、減設処理を実行するなどの対策が考えられる。
【０２２４】
一方、ステップ２９０３において、容量が枯渇しないと予測された場合（ステップ２９０３でＮ）は、減設する物理パリティグループ（ＰＰＧ）に対応する仮想パリティグループ（ＶＰＧ）にページ割り当て不可とする（ステップ２９０５）。具体的には、プール管理テーブルの当該分散グループ（ＤＧ）のエントリから、減設する物理パリティグループ（PPG＃）の識別子の仮想パリティグループ（VPG＃）のエントリを削除する。
【０２２５】
そして、減設時のパーセル変更マッピング決定処理を実行する（ステップ２９０６）。本処理によって、パーセルリバランスのためのＴａｒｇｅｔのマッピングが決定される。減設時のパーセル変更マッピング決定処理については、後で詳細に説明する。
【０２２６】
次に、ページリバランス処理を実行する（ステップ２９０７）。この処理によって、減設対象の仮想パリティグループ（ＶＰＧ）に割り当てられているページが、減設されずに残る仮想パリティグループへ移行することができ、対象の仮想パリティグループ（ＶＰＧ）を物理パリティグループ（ＰＰＧ）とともに減設可能にすることが目的である。
【０２２７】
ページリバランス処理については、後で詳細に説明する。ページリバランス処理は、ページの移行先の仮想パリティグループ（ＶＰＧ）の空きページ領域がなくなった場合に、中断する（ステップ２９０８のＹ）。例えば、ホストＩ／Ｏ処理の特性に起因して、新規割り当てが突発的に多く発生した場合などに、ステップ２９０３で予測した合計ページ数よりも多くなってしまうことなどが考えられる。その場合は（ステップ２９０８のＹ）、マイクロプロセッサ１２１は、後始末処理を実行（ステップ２９０９）する。そして、マイクロプロセッサ１２１は、減設不可であることを保守Ｉ／Ｆなどを通じてストレージの管理者に通知（ステップ２９０４）し、処理を終了する。
【０２２８】
後始末処理とは、ステップ２９０７で実行したページリバランスが途中状態のため、ページリバランスを元に戻す（減設対象だったＶＰＧにページを移行する）ことである。ページリバランス処理が中断しなかった場合（ステップ２９０８のＮ）、減設対象の仮想パリティグループ（ＶＰＧ）のページは全て未割り当て状態となる。
【０２２９】
その後、パーセルリバランス処理を実行する（ステップ２９１０）。パーセルリバランス処理によって、減設対象の物理パリティグループ（ＰＰＧ）に配置されているパーセルを減設対象ではない物理パリティグループ（ＰＰＧ）に移行する。具体的には、ステップ２９０７で未使用となった減設対象の仮想パリティグループ（ＶＰＧ）がマップされていた非減設対象の物理パリティグループのパーセル領域に対してデータを移行する。
【０２３０】
その後、物理パリティグループ（ＰＰＧ）を物理的に減設可能とし（ステップ２９１１）、処理を完了する。物理パリティグループ（ＰＰＧ）を物理的に減設可能とする処理とは、具体的にはＨＤＤの場合スピンダウン処理などに相当する。
【０２３１】
次に、本実施形態にかかる計算機システムの物理パリティグループ（ＰＰＧ）増減設時のＶＰ／ＰＶ変換処理について説明する。増減設時のＶＰ／ＰＶ変換処理は、第１の実施形態で説明したＬＰ／ＰＬ変換時に実行されるＶＰ／ＰＶ変換処理に相当する。増減設処理を実施している間は、２種類のマッピングテーブル（Ｃｕｒｒｅｎｔ／Ｔａｒｇｅｔ）のいずれのテーブルを参照してＶＰ／ＰＶ変換を実施するかを判断する必要がある。
【０２３２】
図３４に示すように、マイクロプロセッサ１２１は、ＶＰ変換の場合はＶＰＧ＃、ＶＣＤＥＶ＃，ＶＣｙｃｌｅ＃、ＶＣｈｕｎｋ＃、ＬＢＡを入力とし、ＰＶ変換の場合はＰＰＧ＃、ＰＣＤＥＶ＃，ＰＣｙｃｌｅ＃、ＰＣｈｕｎｋ＃、ＬＢＡを入力として、ＤＧスワップポインタを取得する（ステップ３００１）。入力のＶＰＧ＃又はＰＰＧ＃から、プール管理テーブル７０１を参照して分散グループ（ＤＧ＃）を求め、対象のＤＧスワップポインタを見つけることができる。
【０２３３】
そして、対象の分散グループ（ＤＧ）が増設又は減設中かを判定する（ステップ３００２）。スワップポインタが無効値である場合は、対象の分散グループ（ＤＧ）が増設又は減設中ではないと判断することができる。
【０２３４】
ステップ３００２において、対象の分散グループ（ＤＧ）が増設又は減設中ではないと判断された場合には、マイクロプロセッサ１２１は、V2P/P2V(Target)でVP/PV変換を実施して（ステップ３０１１）、処理を終了する。
【０２３５】
一方、ステップ３００２において、対象の分散グループ（ＤＧ）が増設又は減設中であると判定された場合には、マイクロプロセッサ１２１は、対象の変換操作が、ＶＰ変換か、ＰＶ変換かを判定する（３００３）。
【０２３６】
ステップ３００３において、ＶＰ変換であると判定された場合には、マイクロプロセッサ１２１は、V2P(Current)テーブルを参照して、当該VPG#,V Cycle# (a)からPPG#, P Cycle (b)を算出し（ステップ３００４）、P2V(Target)テーブルからPPG#, P Cycle (b)からVPG#,V Cycle# (c)を算出する（ステップ３００５）。
【０２３７】
上記ステップで算出した(c)及び入力の(a)を用いて、(a)と(c)の両方の値がDGスワップポインタ以後であるかを判定する（ステップ３００９）。具体的には、ＤＧスワップポインタのＬＢＡアドレスと、(a)および(c)のＶサイクル＃と入力値のＬＢＡから算出する(a)と(c)のLBA（スワップ元、スワップ先のＶＰＧ上のＬＢＡに相当）の値とを比較し、(a)と(c)の両方の値がＤＧスワップポインタのＬＢＡアドレスよりも大きい場合は、ステップ３００９の条件が成立する。
【０２３８】
ステップ３００９の判定が肯定的である場合には、マイクロプロセッサ１２１は、V2P/P2V(Current)テーブルを参照してVP/PV変換を実施する（ステップ３０１１）。つまり、(b)を結果として返却する。ステップ３００９の判定が否定的である場合には、V2P/P2V(Target)テーブルを参照してVP/PV変換を実施して（ステップ３０１０）、終了する。つまり、(a)からV2P(Target)を使って、PPG#、PCycle#(d)を算出し、結果として返却する。
【０２３９】
また、ステップ３００において、ＰＶ変換であると判定された場合には、マイクロプロセッサ１２１は、P2V(Current)で当該PPG#,P Cycle# (b)からVPG#, V Cycle (a)を算出し（ステップ３００６）、V2P(Target)でVPG#, V Cycle (a)からPPG#,P Cycle# (d)を算出し（ステップ３００７）、P2V(Current)でPPG#,P Cycle# (d)からVPG#, V Cycle (c)を算出し（ステップ３００８）、ステップ３００９に進む。これ以降の処理としては、ステップ３０１０に進んだ場合は、(c)を結果とし、ステップ３０１１に進んだ場合は、(a)を結果として処理を終了する。
【０２４０】
次に、計算機システムにおけるパーセルリバランス処理の詳細について説明する。パーセルリバランス処理は、分散グループ（ＤＧ）に対する物理パリティグループ（ＰＰＧ）の増減設時に実行されるパーセルのデータ位置を変更する処理である。本処理は、データをステージングして、スワップポインタを進めることにより、図３４に示したアドレス変換を実施できるようしている。
【０２４１】
図３５に示すように、本処理が開始されると、当該分散グループ（ＤＧ）のＤＧスワップポインタから算出されるストライプデータについて、スワップ対象があるかを判定する（ステップ３１０１）。具体的には、例えば分散グループ（ＤＧ）にＰＰＧ＃０、１，２があり、ＰＰＧ＃３を増設する場合に、対象のストライプデータ（ＰＰＧ＃０，１，２，３のすべてのドライブについて）で、ＣｕｒｒｅｎｔとＴａｒｇｅｔのＶ２Ｐテーブルを参照して、割り当て先のＰＰＧ空間のパーセルマッピングの差異を調べる。
【０２４２】
ステップ３１０１において、パーセルマッピングの差異があり、かつ、まだスワップ対象となっていない場合には、差異のあるＶＰＧ＃、ＶＣＤＥＶ＃、ストライプデータ位置（ＶＣＤＥＶ上のＬＢＡなど）を指定してデータスワップ処理を実行する（ステップ３１０２）。具体的には、上記した図３４で算出した(a)及び(c)の関係の仮想パリティグループ（ＶＰＧ）上のデータ位置をペアで指定する。
【０２４３】
その後、次のストライプデータについて、ステップ３１０１に戻り、順番に処理していく。ステップ３１０１における判定が否定的である場合には、マイクロプロセッサ１２１は、ＤＧスワップポインタを更新する（ステップ３１０４）。ここでは、スワップポインタに１ストライプデータ分のブロック数を加算する。
【０２４４】
そして、ステップ３１０２を実施したときにデステージ抑止設定を実施している場合は、マイクロプロセッサ１２１はそれを解除する（ステップ３１０５）。その後、全領域を実行したかを判定する（ステップ３１０６）。具体的には、ＤＧスワップポインタの値が、ドライブの後端に到達したかで判断する。
【０２４５】
ステップ３１０６において、全領域を実行していないと判定された場合には、マイクロプロセッサ１２１は、ステップ３１０１に戻り、次のＬＢＡ（ストライプデータ単位で進める）について再び処理を実行する。一方、ステップ３１０６において全領域を実行済みであると判定された場合には、マイクロプロセッサ１２１は、V2P/P2VのCurrentのマッピング情報をTargetのマッピング情報にコピーし（ステップ３１０７）、処理を終了する。
【０２４６】
次に、計算機システムにおけるデータスワップ処理の詳細について説明する。データスワップ処理は、パーセルリバランス処理から実行される処理で、パーセル内のストライプデータをスワップする処理である。スワップ処理とは、具体的には、２個のＶＰＧアドレスに対応する物理的な２個のＰＰＧアドレスのパーセル内のストライプデータを、データコピーとマッピング変更により入れ替える処理である。
【０２４７】
ここで、マッピングとデータを同時に入れ替えるため、仮想パリティグループ２（ＶＰＧ）空間から見ると、データとアドレスの対応関係は変わらない。実際には、本処理では、以上に述べたスワップするパーセル内のストライプデータのペアをステージングしているが、先読み処理などによりステージング処理を多重化すると、より増減設にかかる時間を削減することができる。
【０２４８】
データスワップ処理は、上記で述べたように、２個のＶＰＧ空間アドレス（スワップ元、スワップ先）を入力とする。図３６に示すように、当該処理が開始されると、マイクロプロセッサ１２１は、指定されたスワップ元及びスワップ先について、１個ずつ、ステップ３２０１から処理を実行する。マイクロプロセッサ１２１は、スワップ対象アドレスについて、ページ割り当て済みかを判定する（ステップ３２０１）。具体的に、マイクロプロセッサ１２１は、ページマッピングテーブル７０５を参照することにより、ページが割り当て済みかを判定する。
【０２４９】
ステップ３２０１において、ページが割り当て済みではないと判定された場合には、その物理的な領域は未使用な状態であり、スワップ時にデータコピーを省略可能であるため、マイクロプロセッサ１２１は、ステップ３２０４の処理に進む。一方、ステップ３２０１において、ページが割り当て済みであると判定された場合には、マイクロプロセッサ１２１は、ドライブから対象キャッシュスロットにデータステージング（読み込み）を実施する（ステップ３２０２）。当該ページに対応する仮想ボリューム領域に対応するキャッシュスロットは、キャッシュ管理テーブルを参照することにより判別できる。ホストＩ／Ｏ処理のリードの場合と同様に、スワップ前のＬＰアドレス変換により、対応するＰＰＧ＃上のドライブ領域を特定して、上記キャッシュスロットにデータを読み込む。
【０２５０】
続いて、マイクロプロセッサ１２１は、対象キャッシュスロットをデステージ抑止し、ダーティ化する（ステップ３２０３）。デステージ抑止とは、キャッシュ上のデータからドライブへの反映処理（まとめ書き処理）を抑止する機能である。キャッシュ管理テーブルのデステージ抑止フラグ１１０８をＯＮとすることで、デステージ抑止を有効化する。また、ダーティ化とは、キャッシュ上のデータが新しいことを表すものであり、まとめ書き処理でドライブへのデータライト処理の対象とすることである。具体的には、キャッシュ管理テーブルのダーティビットマップのＢＩＴを全て“１”にすることで実現する。
【０２５１】
続いて、マイクロプロセッサ１２１は、対象データの全ての読み込みを実施したかを判定する（ステップ３２０４）。ステップ３２０４では、本処理で指定された２個のＶＰＧアドレスについて、全てのデータをリード済みかで判断する。ステップ３２０４において、まだ読み込んでないデータがあると判定された場合には、マイクロプロセッサ１２１は、対象の仮想パリティグループ（ＶＰＧ）のアドレスについて、ステップ３２０１以降の処理を実行する。一方、ステップ３２０４において、全て読み込み済みであると判定された場合には、マイクロプロセッサ１２１は、処理を終了する。
【０２５２】
次に、計算機システムにおける増設時パーセル変更マッピング決定処理の詳細について説明する。当該処理は、分散グループ（ＤＧ）に対して物理パリティグループ（ＰＰＧ）を増設する際に、増設対象のＶＰＧ及びＰＰＧのテンポラリの増設中のＣｕｒｒｅｎｔのパーセルマッピング（Ｐ２Ｖ、Ｖ２Ｐ）と、増設後のＴａｒｇｅｔのパーセルマッピング（Ｐ２Ｖ，Ｖ２Ｐ）を生成する処理である。
【０２５３】
図３７に示すように、本処理が開始されると、マイクロプロセッサ１２１は、パーセルマッピングテーブル生成処理により、増設VPG/PPGのV2P/P2V(Current)を生成する（ステップ３３０１）。このマッピングは、増設中にも増設したＰＰＧの物理容量を使用可能とするための、一時的なマッピング処理である。
【０２５４】
次に、マイクロプロセッサ１２１は、V2P/P2V(Current)をV2P/P2V(Target)にコピーする（ステップ３３０２）。この処理は、以降の処理でTargetのマッピングを生成するための事前準備である。そして、以降の処理は、各増設仮想パリティグループ（ＶＰＧ）の各ＶＣｙｃｌｅ＃について網羅的に実行していく。
【０２５５】
まず、マイクロプロセッサ１２１は、V2P(Current)テーブルを参照し、当該VPG#,V Cycle# (a)からPPG#, P Cycle (b)を算出する（ステップ３３０３）。以降の処理は、各増設ＰＰＧの各ＰＣｙｃｌｅ＃について網羅的に実行していく。
【０２５６】
次に、マイクロプロセッサ１２１は、P2V(Target)をサーチして、マップされているVPG# V Cycle#(c)が増設VPG#ではない非増設PPG# と P Cycle# (d)を算出する（ステップ３３０４）。その後、マイクロプロセッサ１２１は、P2V(Target)において、PPG#(d)にマップされるVPG#(c)のcycle数と、PPG#(d)にマップされるVPG#(a)のcycle数がceiling(c / (PG + 増設PPG数))以下かを判定する（ステップ３３０５）。この判定の意味は、マッピングを変える場合に、マッピングの変更後もＶＰＧから見た各ＰＰＧへのデータ配置の分散度合いを一定に保つことが目的である。
【０２５７】
ステップ３３０５において、cycle数がceiling(c / (PG + 増設PPG数))より大きいと判定された場合には、分散度合いが一定に保てない配置となってしまうため、他のスワップ先を見つけるべく、マイクロプロセッサ１２１は、ステップ３３０４の処理に戻る。一方、ステップ３３０５において、cycle数がceiling(c / (PG + 増設PPG数)) 以下と判定された場合には、分散度合いが一定に保たれている配置であるので、マイクロプロセッサ１２１は、ステップ３３０６の処理を実行する。
【０２５８】
続いて、マイクロプロセッサ１２１は、P2V(Target)において、PPG#(b)にマップされるVPG#(c)のcycle数と、PPG#(b)にマップされるVPG#(a)のcycle数がfloor(c / (PG + 増設PPG数)) 以下かを判定する（ステップ３３０６）。ステップ３３０６における判定は、上記したステップ３３０５と同様に、マッピングを変える場合に、マッピングの変更後も仮想パリティグループ（ＶＰＧ）から見た各物理パリティグループ（ＰＰＧ）へのデータ配置の分散度合いを一定に保つことが目的である。
【０２５９】
ステップ３３０６において、cycle数がfloor(c / (PG + 増設PPG数))より大きいと判定された場合には、分散度合いが一定に保てない配置となってしまうため、他のスワップ先を見つけるべく、マイクロプロセッサ１２１は、ステップ３３０４に戻る。一方、ステップ３３０６において、cycle数がfloor(c / (PG + 増設PPG数)) 以下と判定された場合には、分散度合いが一定に保たれている配置であるので、マイクロプロセッサ１２１は、ステップ３３０７の処理を実行する。
【０２６０】
次に、マイクロプロセッサ１２１は、V2P (Target)の(a) (c)をスワップし、P2P (Target)の(b) (d)をスワップする（ステップ３３０７）。
【０２６１】
続いて、マイクロプロセッサ１２１は、全てのVcycle#について、スワップが完了したかを判定する（ステップ３３０８）。ステップ３３０８において、スワップが完了していないと判定された場合には、マイクロプロセッサ１２１は、次の増設対象ＶＰＧ＃のV Cycle#についてステップ３３０３以降の処理を実行する。一方、ステップ３３０８において、スワップが完了した場合（ステップ３３０８でＹ）は、マイクロプロセッサ１２１は、処理を終了する。
【０２６２】
基本的には、上記した処理により、Ｖ２Ｐ／Ｐ２Ｖのターゲットのテーブルを決定する。当該処理において、ステップ３３０３から開始されるループと、ステップ３３０４から開始されるループが２つあるが、仮に、ステップ３３０４で、ステップ３３０７へと進むことができるVPG# V Cycle#(c)が見つからない場合が考えられる。その場合は、ステップ３３０３から始まるループで、VPG#,V Cycle# (a)を選択する際に、選択する順番の種々の組み合わせを試す必要がある。また、ステップ３３０４から始まるループでも、PPG# と P Cycle# (d)を選択する際に、選択する順番の種々の組み合わせを試すことにより、適切な配置を発見するようにリトライする必要がある。
【０２６３】
次に、本実施形態における計算機システムの減設時パーセル変更マッピング決定処理の詳細について説明する。当該処理は、分散グループ（ＤＧ）に対して物理パリティグループ（ＰＰＧ）を減設する際に、減設後のＴａｒｇｅｔのパーセルマッピング（Ｐ２Ｖ，Ｖ２Ｐ）を生成する処理である。
【０２６４】
図３８に示すように、本処理が開始されると、マイクロプロセッサ１２１は、V2P/P2V(Current)をV2P/P2V(Target)にコピーする（ステップ３４０１）。この処理は、以降の処理でTargetのマッピングを生成するための事前準備である。そして、以降の処理は、各減設仮想パリティグループ（ＶＰＧ）の各ＶＣｙｃｌｅ＃について網羅的に実行していく。
【０２６５】
まず、マイクロプロセッサ１２１は、V2P(Current)テーブルを参照し、当該VPG#,V Cycle# (a)からPPG#, P Cycle (b)を算出する（ステップ３４０２）。以降の処理は、各増設ＰＰＧの各ＰＣｙｃｌｅ＃について網羅的に実行していく。
【０２６６】
次に、マイクロプロセッサ１２１は、P2V(Target)をサーチして、マップされているVPG# V Cycle#(c)が減設VPG#ではない非減設PPG# と P Cycle# (d)を算出する（ステップ３３０４）。その後、マイクロプロセッサ１２１は、P2V(Target)において、PPG#(d)にマップされるVPG#(a)のcycle数が、ceiling(c / (PG - 減設PPG数))より大きいかを判定する（ステップ３４０４）。この判定の意味は、マッピングを変える場合に、マッピングの変更後も仮想パリティグループ（ＶＰＧ）から見た各物理パリティグループ（ＰＰＧ）へのデータ配置の分散度合いを一定に保つことが目的である。
【０２６７】
ステップ３４０４において、cycle数が、ceiling(c / (PG - 減設PPG数))より大きいでないと判定された場合には、分散度合いが一定に保てない配置となってしまうため、他のスワップ先を見つけるべく、マイクロプロセッサ１２１は、ステップ３４０２の処理に戻る。一方、ステップ３４０４において、cycle数がceiling(c / (PG + 増設PPG数)) より大きいの場合には、分散度合いが一定に保てる配置であるので、マイクロプロセッサ１２１は、ステップ３４０５の処理を実行する。
【０２６８】
次に、マイクロプロセッサ１２１は、V2P (Target)の(a) (c)をスワップし、P2P (Target)の(b) (d)をスワップする（３４０５）。
【０２６９】
続いて、マイクロプロセッサ１２１は、全てのVcycle#について、スワップが完了したかを判定する（ステップ３４０６）。ステップ３４０６において、スワップが完了していないと判定された場合には、マイクロプロセッサ１２１は、次の減設対象ＶＰＧ＃のV Cycle#についてステップ３３０３以降の処理を実行する。一方、ステップ３４０６において、スワップが完了したと判定された場合には、マイクロプロセッサ１２１は、処理を終了する。
【０２７０】
基本的には、上記した処理により、Ｖ２Ｐ／Ｐ２Ｖのターゲットのテーブルを決定する。当該処理において、ステップ３４０２から開始されるループと、ステップ３４０３から開始されるループが２つあるが、仮に、ステップ３４０３で、ステップ３４０５へと進むことができるVPG# V Cycle#(c)が見つからない場合が考えられる。その場合は、ステップ３４０２から始まるループで、VPG#,V Cycle# (a)を選択する際に、選択する順番の種々の組み合わせを試す必要がある。また、ステップ３４０３から始まるループでも、PPG# と P Cycle# (d)を選択する際に、選択する順番の種々の組み合わせを試すことにより、適切な配置を発見するようにリトライする必要がある。
【０２７１】
次に、本実施の形態に係る計算機システムのページリバランス処理の詳細について説明する。ページリバランス処理は、分散グループ（ＤＧ）に対して物理パリティグループ（ＰＰＧ）を増減設した際に、ページの仮想パリティグループ（ＶＰＧ）上の配置を変更するための処理である。ページリバランス処理が実行されると、対象プール内の各仮想ボリューム（ＶＶＯＬ）の各ページについて、図３９に示す処理が順番に実行される。
【０２７２】
図３９に示すように、マイクロプロセッサ１２１は、当該ページについて、ページマッピングテーブル７０５を参照し、現在の仮想パリティグループ番号（ＶＰＧ＃）及びページ＃を算出する（ステップ３５０１）。そして、マイクロプロセッサ１２１は、ページが未割り当てかを判定する（ステップ３５０２）。
【０２７３】
マイクロプロセッサ１２１は、ステップ３５０１の処理によって、ページが未割り当てかを判断することができる。ステップ３５０２において、ページが未割り当てであると判定された場合には、マイクロプロセッサ１２１は、ステップ３５０３に進む。一方、ページが割り当て済みであると判定された場合には、マイクロプロセッサ１２１は、対象の分散グループ（ＤＧ）を取得する（ステップ３５０５）。具体的に、マイクロプロセッサ１２１は、プール管理テーブル７０１を参照して、当該仮想パリティグループ（ＶＰＧ）の属する分散グループ（ＤＧ）を取得する。
【０２７４】
続いて、マイクロプロセッサ１２１は、優先度テーブル７０６を参照して、最も優先度の高い仮想パリティグループ（ＶＰＧ＃（移行先候補））を取得する（ステップ３５０６）。その後、マイクロプロセッサ１２１は、対象の仮想パリティグループ（VPG#）が当該分散グループ（DG）内に実装されており、かつ、割り当て可能かを判定する（ステップ３５０７）。具体的に、マイクロプロセッサ１２１は、プール管理テーブルの当該分散グループ（ＤＧ）内に、移行先候補の仮想パリティグループ（ＶＰＧ＃）が属しているかで判断する。
【０２７５】
そして、ステップ３５０７において、対象の仮想パリティグループ（ＶＰＧ＃）が当該分散グループ（ＤＧ）内に実装されておらず、かつ、割り当て可能ではない場合（ステップ３５０７でＮ）、マイクロプロセッサ１２１は、優先度テーブル７０６を参照して、次に優先度の高い仮想パリティグループ（ＶＰＧ＃）を選択して、以降の処理を繰り返す。
【０２７６】
一方、ステップ３５０７において、対象の仮想パリティグループ（ＶＰＧ＃）が当該分散グループ（ＤＧ）内に実装されており、かつ、割り当て可能である場合には、マイクロプロセッサ１２１は、対象の仮想パリティグループ（ＶＰＧ）が容量枯渇かを判定する（ステップ３５０８）。これはページマッピングテーブルの空きページの数で判断できる。
【０２７７】
ステップ３５０８において、容量が枯渇していると判定された場合には、移行先候補とはならないため、次に優先度の高いＶＰＧ＃を選択して、ステップ３５０６以降の処理を繰り返す。一方、ステップ３５０８において、容量が枯渇していないと判定された場合には、マイクロプロセッサ１２１は、移行先候補の仮想パリティグループ（VPG）の優先度が現在の仮想パリティグループ（VPG#）の優先度より高いかを判定する（ステップ３５０９）。具体的に、マイクロプロセッサ１２１は、優先度テーブル７０６を参照して、仮想パリティグループの優先度を比較する。
【０２７８】
ステップ３５０８において、移行先候補の優先度が高くないと判定された場合には、ページの移行は不要であるため、マイクロプロセッサ１２１は、ステップ３５０３以降の処理を実行する。一方、ステップ３５０８において、移行先候補の優先度が高いと判定された場合には、マイクロプロセッサ１２１は、対象の仮想パリティグループ（VPG#）にページをマイグレーションする（ステップ３５１０）。具体的には、当該仮想ボリュームと対応するページ番号の仮想ページのマッピング先の仮想パリティグループ（ＶＰＧ）のページを、移行元から移行先に張り替える（ページマッピングテーブルを更新する）。それと同時に、データをコピーする。
【０２７９】
その後、マイクロプロセッサ１２１は、対象仮想ボリューム（VVOL）の全ページについて当該処理を実施したかを判定する（ステップ３５０３）。ステップ３５０３において、全ページについて当該処理を実施していないと判定された場合には、マイクロプロセッサ１２１は、次のページについてステップ３５０１以降の処理を実行する。一方、ステップ３５０３において、全ページについて当該処理を実施したと判定された場合には、マイクロプロセッサ１２１は、対象プールの全仮想ボリューム（ＶＶＯＬ）を実施したかを判定する（３５０４）。ステップ３５０４において、全仮想ボリュームについて実施していないと判定された場合には、マイクロプロセッサ１２１は、対象プール内の次の仮想ボリューム（ＶＶＯＬ）についてステップ３５０１以降の処理を実行する。一方、ステップ３５０４において、全仮想ボリュームについて実施したと判定された場合には、マイクロプロセッサ１２１は、当該処理を終了する。
【０２８０】
図４０Ａ及び４０Ｂは、本実施形態に係る計算機システムの分散グループ（ＤＧ）増減設時のパーセルマッピングの変更例を示す概念図である。
【０２８１】
図４０Ａは、図２９Ａ〜図２９Ｃで示したＮ＝４（４個のドライブ）、ｃ＝４（４個のパーセル）、ＰＧ＝３（ＰＧは分散グループ（ＤＧ）内の物理パリティグループ数を表す）の例に対する、３つの物理パリティグループ（ＰＰＧ）及び仮想パリティグループ（ＶＰＧ）の増設の例を示している。図４０Ａの上図は、増設前のマッピングを示し、カレントのＶ２Ｐテーブルに相当する。図４０Ａの下図は、増設後のマッピングを示し、ターゲットのＶ２Ｐテーブルに相当する。
【０２８２】
図４０Ａの網掛けで示した部分は、増設開始時に生成したテンポラリのカレントのＶ２Ｐマッピングである。増設開始時は、ＶＰＧ＃３のマッピングは、ＰＰＧ＃３内に閉じていることがわかる。一方、図４０Ａの斜線で示した部分は、増設完了後に、ＶＰＧ＃３のマッピングが物理パリティグループ（ＰＰＧ）全体にマッピングされ、ＶＰＧ＃０〜２の一部のマッピングがＰＰＧ＃３にマッピングされていることがわかる。
【０２８３】
また、図４０Ｂは、図２９Ａ〜図２９Ｃで示したＮ＝４（４個のドライブ）、ｃ＝４（４個のパーセル）、ＰＧ＝３（ＰＧは分散グループ（ＤＧ）内の物理パリティグループ数を表す）の例に対する、２つの物理パリティグループ（ＰＰＧ）及び仮想パリティグループ（ＶＰＧ）の減設の例を示している。図４０Ｂの上図は、減設前のマッピングを示し、カレントのＶ２Ｐテーブルに相当する。図４０Ｂの下図は、減設後のマッピングを示し、ターゲットのＶ２Ｐテーブルに相当する。
【０２８４】
図４０Ｂの下図の網掛けで示した部分が、減設対象のデータである。図４０Ｂでは、パーセルリバランスの動きを説明しているが、減設時は、このパーセルリバランスの前にページのリバランスを実行しているため、この灰色部分の領域はページが割り当てられていないことが期待できる。したがって、以前、ＶＰＧ＃２としてアサインされていた領域は未使用であるので、ＰＰＧ＃２に割り当てられていたＶＰＧ＃０、１のパーセルを、ＶＰＧ＃２として割り当てされていたＰＰＧ０とＰＰＧ１の領域（未使用）にコピーすることにより、ＰＰＧ＃２を空にすることができる。
【０２８５】
以上のコピー対象のパーセルを斜線で示している。最終的な状態では、ＰＰＧ＃２にはＶＰＧ＃２の領域しか割り当てられていないため、未使用なので、この分散グループ（ＤＧ）から物理的に切り離す（減設）ことができることがわかる。
【０２８６】
以上説明したように、本実施形態の増減設方法では、２種類のマッピングテーブルを持ち、ＤＧスワップポインタを更新しながら、データの再配置を実行していくため、ホストＩ／Ｏの処理を継続しながら、ドライブの増減設を行うことができる。
【０２８７】
また、ドライブの増減設の際に、物理パリティグループ（ＰＰＧ）空間でみると、Ｐチャンク単位でデータの移動を各ＰＰＧ＃間で実施していることがわかる。このようなことを実現できるのは、ＳＥＥＤテーブルを用いた演算により、同一のＰＣＤＥＶ＃に登場するＶチャンク＃は、重複しない性質を持つことができるためである。つまり、同一のＰＣＤＥＶ＃に登場するＶチャンク＃は重複しないので、同一物理ドライブ上に同一のＶチャンク＃のパーセルが出現することがない。これにより、データの冗長性を維持することができる。
【０２８８】
また、ドライブの増減設の際に、完全な固定マッピングの場合だと、パーセルリバランスのようなリバランス時に、増設前の規模に応じてデータの移動量が多くなってしまうという問題があった。しかし、本実施形態の方法によれば、すべてのパーセルを入れ替えることなく、その移動量は増設前のプールの規模（ＰＰＧ数）に依存せずに一定となる。具体的には、パーセルリバランスは、最大でも増設分の容量のデータスワップで済み、ページリバランスも、増設分の容量のデータスワップで済むこととなる。
【０２８９】
さらに、本実施形態の増減設方法では、パーセルリバランスで仮想パリティグループ（ＶＰＧ）に対して割り当てる物理パリティグループ（ＰＰＧ）を分散させているため、像減設完了時に、仮想ボリュームに対するホストＩ／Ｏ負荷を各ドライブに分散することができる。これにより、プール全体で負荷分散を実現することができるため、複雑な性能設計が不要となる。
【０２９０】
さらに、本発明の増設方法によって、従来のＲＡＩＤ（増設単位が独立のパリティグループを構成する）と比較し、冗長度が２以上の場合は、ロストの発生確率自体を低減できる。従来、ＲＡＩＤは増設後にデータのロスト確率が比例して上がっているが、冗長度２以上で本発明の技術を用いれば、リビルドを高速化させつつ、障害となるドライブ数を削減できるため、ＰＧ数がｃを大幅に超えなければ、規模にかかわらず概ね一定の信頼性を保つことができる。
【０２９１】
さらに、本実施形態の増設方法によって、データロストが仮に発生した場合でも、仮想ボリュームの影響範囲の局所性を向上でき、全体のリストアが必要になる仮想ボリュームの個数を削減することができる。また、リカバリに必要なデータコピー時間を大幅に短縮し、情報システム全体の可用性を向上させることができる。
【０２９２】
以上、添付図面を参照しながら本発明の好適な実施形態について詳細に説明したが、本発明はかかる例に限定されない。本発明の属する技術の分野における通常の知識を有する者であれば、特許請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本発明の技術的範囲に属するものと了解される。
【符号の説明】
【０２９３】
１０      ホスト
２０      管理サーバ
３０      ネットワーク
４０      外部ストレージ装置
１００    上位ストレージ装置
１８０    下位ストレージ装置
２０１    仮想ボリューム
２０４    仮想パリティグループ
２０５    物理パリティグループ
４００    仮想チャンク
５００    物理チャンク
【図１】
0005971354.tif 000012
【図２】
0005971354.tif 000013
【図３】
0005971354.tif 000014
【図４】
0005971354.tif 000015
【図５】
0005971354.tif 000016
【図６】
0005971354.tif 000017
【図７】
0005971354.tif 000018
【図８】
0005971354.tif 000019
【図９】
0005971354.tif 000020
【図１０】
0005971354.tif 000021
【図１１】
0005971354.tif 000022
【図１２】
0005971354.tif 000023
【図１３】
0005971354.tif 000024
【図１４Ａ】
0005971354.tif 000025
【図１４Ｂ】
0005971354.tif 000026
【図１５】
0005971354.tif 000027
【図１６】
0005971354.tif 000028
【図１７Ａ】
0005971354.tif 000029
【図１７Ｂ】
0005971354.tif 000030
【図１８】
0005971354.tif 000031
【図１９】
0005971354.tif 000032
【図２０】
0005971354.tif 000033
【図２１】
0005971354.tif 000034
【図２２】
0005971354.tif 000035
【図２３】
0005971354.tif 000036
【図２４Ａ】
0005971354.tif 000037
【図２４Ｂ】
0005971354.tif 000038
【図２５】
0005971354.tif 000039
【図２６】
0005971354.tif 000040
【図２７】
0005971354.tif 000041
【図２８】
0005971354.tif 000042
【図２９Ａ】
0005971354.tif 000043
【図３０】
0005971354.tif 000044
【図３１】
0005971354.tif 000045
【図３２】
0005971354.tif 000046
【図３３】
0005971354.tif 000047
【図３４】
0005971354.tif 000048
【図３５】
0005971354.tif 000049
【図３６】
0005971354.tif 000050
【図３７】
0005971354.tif 000051
【図３８】
0005971354.tif 000052
【図３９】
0005971354.tif 000053
【図２９Ｂ】
0005971354.tif 000054
【図２９Ｃ】
0005971354.tif 000055
【図４０Ａ】
0005971354.tif 000056
【図４０Ｂ】
0005971354.tif 000057