(57)【要約】  一つのＲＡＩＤグループを構成する物理記憶デバイスより少ない単位で物理記憶デバイスを増設しても、冗長性を確保する。  計算機は、ｒ個の物理記憶デバイスが計算機に接続されることでｄ＋ｒ個の物理記憶デバイスが計算機に接続される場合、ｖ×ｒ個の論理チャンクを追加し、各追加記憶デバイス内のｎ×ｖ個の物理記憶領域を追加し、マッピング条件の下で、マッピング情報を、ｖ×（ｄ＋ｒ）個の論理チャンクの夫々にｎ個の物理記憶領域を関連付けるマッピング情報に変更し、ユーザデータのライト要求に応じて、ユーザデータに基づく冗長データを作成し、ライト要求に対応する第１論理チャンクを決定し、マッピング情報に基づいて、ユーザデータ及び冗長データを含むｎ個の要素データを、第１論理チャンクに対応するｎ個の物理記憶領域へ夫々書き込む。
2017175285.tif 000002
【特許請求の範囲】
【請求項１】
ｄが２以上の整数であり、ｄ個の物理記憶デバイスと、
前記ｄ個の物理記憶デバイスに接続される計算機と、
を備え、
前記計算機は、
ｎが２以上の整数であり、ｖが１以上の整数であり、各物理記憶デバイス内にｎ×ｖ個の物理記憶領域を作成することで、ｎ×ｖ×ｄ個の物理記憶領域を作成し、
夫々がｎ個の物理記憶領域のサイズを有する、ｖ×ｄ個の論理チャンクを作成し、
各論理チャンクにｎ個の物理記憶領域を関連付けるマッピング情報であって、各論理チャンクに関連付けられた前記ｎ個の物理記憶領域がｎ個の物理記憶デバイスに夫々含まれるというマッピング条件の下で作成された前記マッピング情報を格納し、
ｒが１以上の整数であり、ｒ個の物理記憶デバイスが前記計算機に接続されることでｄ＋ｒ個の物理記憶デバイスが前記計算機に接続される場合、ｖ×ｒ個の論理チャンクを追加し、各追加記憶デバイス内のｎ×ｖ個の物理記憶領域を追加し、前記マッピング条件の下で、前記マッピング情報を、ｖ×（ｄ＋ｒ）個の論理チャンクの夫々にｎ個の物理記憶領域を関連付けるマッピング情報に変更し、
ユーザデータのライト要求に応じて、前記ユーザデータに基づく冗長データを作成し、前記ライト要求に対応する第１論理チャンクを決定し、前記マッピング情報に基づいて、前記ユーザデータ及び前記冗長データを含むｎ個の要素データを、前記第１論理チャンクに対応するｎ個の物理記憶領域へ夫々書き込む、
ように構成されている、
計算機システム。
【請求項２】
前記計算機は、前記変更により関連付けが変更される第２論理チャンクに有効データが格納されている場合、前記変更前のマッピング情報に基づいて、前記第２論理チャンクに対応する第１物理記憶領域に格納されている有効データを読み出し、前記変更後のマッピング情報に基づいて、前記第２論理チャンクに対応する第２物理記憶領域へ前記有効データを書き込む、
請求項１に記載の計算機システム。
【請求項３】
前記計算機は、ｅがｄ＋ｒ以上の最小のｎの倍数であり、ｅ個の物理記憶デバイスが前記計算機に接続される場合の、ｅ×ｖ個の論理チャンクとｎ×ｖ×ｅ個の物理記憶領域との関連付けを示す基準マッピング情報を格納するように構成されており、
前記計算機は、ｄ＋ｒがｎの倍数でない場合、前記マッピング条件の下、前記変更前のマッピング情報にｎ×ｖ個の物理記憶領域とｖ×ｒ個の論理チャンクとを示す情報を追加することで前記変更前のマッピング情報を拡張し、前記拡張されたマッピング情報の一部を前記基準マッピング情報の一部に合わせることで、前記変更後のマッピング情報を算出する、
請求項２に記載の計算機システム。
【請求項４】
前記計算機は、ｄ＋ｒがｎの倍数である場合、前記基準マッピング情報を前記変更後のマッピング情報として用いる、
請求項３に記載の計算機システム。
【請求項５】
前記計算機は、ｄ＋ｒがｎの倍数でない場合、前記マッピング条件の下、前記ｎ×ｖ×ｄ個の物理記憶領域から二つの物理記憶領域を順次選択し、前記二つの物理記憶領域に夫々関連付けられている二つの論理チャンクを交換することで、前記拡張されたマッピング情報の一部を前記基準マッピング情報の一部に合わせ、前記交換を示す補正マッピング情報を作成し、前記基準マッピング情報と前記補正マッピング情報を前記変更後のマッピング情報として用いる、
請求項４に記載の計算機システム。
【請求項６】
前記計算機は、ｄ＋ｒがｎの倍数でない場合、前記マッピング条件の下、交換前の二つの論理チャンクの少なくとも一方が前記基準マッピング情報と一致せず、且つ交換後の二つの論理チャンクの両方が前記基準マッピング情報と一致する二つの論理チャンクに夫々対応する二つの第１物理記憶領域を順次選択し、前記二つの第１物理記憶領域に夫々関連付けられている二つの論理チャンクを交換し、前記マッピング条件の下、交換前の二つの論理チャンクの少なくとも一方が前記基準マッピング情報と一致せず、且つ交換後の二つの論理チャンクの一方だけが前記基準マッピング情報と一致する、二つの論理チャンクに夫々対応する二つの第２物理記憶領域を順次選択し、前記二つの第２物理記憶領域に夫々関連付けられている二つの論理チャンクを交換し、交換前の二つの論理チャンクの少なくとも一方が前記基準マッピング情報と一致せず、且つ交換後の二つの論理チャンクの両方が前記基準マッピング情報と一致しない、二つの論理チャンクに夫々対応する二つの第３物理記憶領域を順次選択し、前記二つの第３物理記憶領域に夫々関連付けられている二つの論理チャンクを交換する、
請求項５に記載の計算機システム。
【請求項７】
前記計算機は、
ｍが１以上の整数であり、各物理記憶デバイス内にｍ×ｖ個のスペア物理記憶領域を更に作成するように構成されており、
何れかの物理記憶デバイスの障害を検出した場合、前記障害を持つ物理記憶デバイスに含まれる障害物理記憶領域を特定し、前記マッピング情報に基づいて、前記障害物理記憶領域に対応する復元論理チャンクを特定し、前記マッピング情報に基づいて、前記復元論理チャンクに対応するｎ個の物理記憶領域のうち前記障害物理記憶領域を除く正常物理記憶領域を選択し、前記正常物理記憶領域内のデータに基づいて、前記障害を持つ物理記憶デバイス内のデータを復元し、前記障害を持つ物理記憶デバイスを除く複数の物理記憶デバイス内のスペア物理記憶領域へ、前記復元されたデータを書き込む、
請求項６に記載の計算機システム。
【請求項８】
前記計算機は、
仮想ボリュームを作成し、前記仮想ボリューム内に仮想記憶領域を作成し、論理チャンクの少なくとも一部を、前記仮想記憶領域に関連付ける仮想記憶領域マッピング情報を作成し、
Ｉ／Ｏ要求に応じて、前記仮想記憶領域マッピング情報に基づいて、前記Ｉ／Ｏ要求に示された前記仮想ボリューム内のアドレスに対応する論理チャンクを決定する、
ように構成されている、
請求項７に記載の計算機システム。
【請求項９】
前記計算機は、前記変更において、ｅ個の論理記憶デバイスを作成し、夫々がｎ個の論理記憶デバイスを含む、ｅ／ｎ個の論理パリティグループを作成し、各論理パリティグループ内にｎ×ｖ個の論理チャンクを作成する、
請求項８に記載の計算機システム。
【請求項１０】
前記計算機は、
ｗが２以上の整数であり、各論理パリティグループ内にｎ×ｖ×ｗ個の論理チャンクを作成し、
各物理記憶デバイス内にｎ×ｖ×ｗ個の物理記憶領域を作成し、
前記マッピング情報を、各論理記憶デバイス内のアドレスと、各物理記憶デバイス内のアドレスとに対して、周期的に用いる、
ように構成されている、
請求項９に記載の計算機システム。
【請求項１１】
ｄが２以上の整数であり、計算機に接続されるｄ個の物理記憶デバイスの制御方法であって、
ｎが２以上の整数であり、ｖが１以上の整数であり、各物理記憶デバイス内にｎ×ｖ個の物理記憶領域を作成することで、ｎ×ｖ×ｄ個の物理記憶領域を作成し、
夫々がｎ個の物理記憶領域のサイズを有する、ｖ×ｄ個の論理チャンクを作成し、
各論理チャンクにｎ個の物理記憶領域を関連付けるマッピング情報であって、各論理チャンクに関連付けられた前記ｎ個の物理記憶領域がｎ個の物理記憶デバイスに夫々含まれるというマッピング条件の下で作成された前記マッピング情報を格納し、
ｒが１以上の整数であり、ｒ個の物理記憶デバイスが前記計算機に接続されることでｄ＋ｒ個の物理記憶デバイスが前記計算機に接続される場合、ｖ×ｒ個の論理チャンクを追加し、各追加記憶デバイス内のｎ×ｖ個の物理記憶領域を追加し、前記マッピング条件の下で、前記マッピング情報を、ｖ×（ｄ＋ｒ）個の論理チャンクの夫々にｎ個の物理記憶領域を関連付けるマッピング情報に変更し、
ユーザデータのライト要求に応じて、前記ユーザデータに基づく冗長データを作成し、前記ライト要求に対応する第１論理チャンクを決定し、前記マッピング情報に基づいて、前記ユーザデータ及び前記冗長データを含むｎ個の要素データを、前記第１論理チャンクに対応するｎ個の物理記憶領域へ夫々書き込む、
ことを備える制御方法。
【請求項１２】
ｄが２以上の整数である、ｄ個の物理記憶デバイスに接続される計算機に制御プロセスを実行させるプログラムを格納する、計算機読取可能な記録媒体であって、
前記制御プロセスは、
ｎが２以上の整数であり、ｖが１以上の整数であり、各物理記憶デバイス内にｎ×ｖ個の物理記憶領域を作成することで、ｎ×ｖ×ｄ個の物理記憶領域を作成し、
夫々がｎ個の物理記憶領域のサイズを有する、ｖ×ｄ個の論理チャンクを作成し、
各論理チャンクにｎ個の物理記憶領域を関連付けるマッピング情報であって、各論理チャンクに関連付けられた前記ｎ個の物理記憶領域がｎ個の物理記憶デバイスに夫々含まれるというマッピング条件の下で作成された前記マッピング情報を格納し、
ｒが１以上の整数であり、ｒ個の物理記憶デバイスが前記計算機に接続されることでｄ＋ｒ個の物理記憶デバイスが前記計算機に接続される場合、ｖ×ｒ個の論理チャンクを追加し、各追加記憶デバイス内のｎ×ｖ個の物理記憶領域を追加し、前記マッピング条件の下で、前記マッピング情報を、ｖ×（ｄ＋ｒ）個の論理チャンクの夫々にｎ個の物理記憶領域を関連付けるマッピング情報に変更し、
ユーザデータのライト要求に応じて、前記ユーザデータに基づく冗長データを作成し、前記ライト要求に対応する第１論理チャンクを決定し、前記マッピング情報に基づいて、前記ユーザデータ及び前記冗長データを含むｎ個の要素データを、前記第１論理チャンクに対応するｎ個の物理記憶領域へ夫々書き込む、
ことを備える、
記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムに関する。
【背景技術】
【０００２】
複数のストレージ装置により、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ（またはＩｎｄｅｐｅｎｄｅｎｔ）  Ｄｉｓｋｓ）グループを構成し、ＲＡＩＤグループに基づいて作成された論理ボリュームを、上位装置（例えばホストコンピュータ）へ提供するストレージシステムが知られている。【０００３】
ＲＡＩＤに関する技術として、特許文献１には、通常データと、通常データを復元するための冗長データとを含むストライプ列を、容量プールに記憶領域を提供する複数のストレージ装置に分散させて管理する技術、所謂分散ＲＡＩＤ方式が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１４／１１５３２０号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
分散ＲＡＩＤ方式に限らず、一般的に、冗長データを有するＲＡＩＤグループによって構成されるストレージシステムに対して容量追加を行う、即ちドライブを増設する場合、増設したドライブについても既存領域と同等の冗長性を確保するためには、ＲＡＩＤグループを構成するドライブ台数の単位での増設が行われる。しかし、１組のＲＡＩＤグループは２０台以上のドライブで構成されることもあるため、容量追加時のコストの高さが問題となる。【０００６】
また、例えば特許文献１のような分散ＲＡＩＤ方式を採用する場合、システムの最小ドライブ台数は２パリティグループ以上である必要がある。そのため、初期導入時のコストの高さも問題となる。【０００７】
特に、システム内の記憶メディアが、ビットコストの高いＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）のみで構成されたＡＦＡ（Ａｌｌ  Ｆｌａｓｈ  Ａｒｒａｙ）や、搭載ドライブ台数の少ないミッドレンジ以下のストレージシステムにおいては、当該問題による影響が顕著である。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明の一態様である計算機システムは、ｄが２以上の整数であり、ｄ個の物理記憶デバイスと、前記ｄ個の物理記憶デバイスに接続される計算機と、を備える。前記計算機は、ｎが２以上の整数であり、ｖが１以上の整数であり、各物理記憶デバイス内にｎ×ｖ個の物理記憶領域を作成することで、ｎ×ｖ×ｄ個の物理記憶領域を作成し、夫々がｎ個の物理記憶領域のサイズを有する、ｖ×ｄ個の論理チャンクを作成し、各論理チャンクにｎ個の物理記憶領域を関連付けるマッピング情報であって、各論理チャンクに関連付けられた前記ｎ個の物理記憶領域がｎ個の物理記憶デバイスに夫々含まれるというマッピング条件の下で作成された前記マッピング情報を格納し、ｒが１以上の整数であり、ｒ個の物理記憶デバイスが前記計算機に接続されることでｄ＋ｒ個の物理記憶デバイスが前記計算機に接続される場合、ｖ×ｒ個の論理チャンクを追加し、各追加記憶デバイス内のｎ×ｖ個の物理記憶領域を追加し、前記マッピング条件の下で、前記マッピング情報を、ｖ×（ｄ＋ｒ）個の論理チャンクの夫々にｎ個の物理記憶領域を関連付けるマッピング情報に変更し、ユーザデータのライト要求に応じて、前記ユーザデータに基づく冗長データを作成し、前記ライト要求に対応する第１論理チャンクを決定し、前記マッピング情報に基づいて、前記ユーザデータ及び前記冗長データを含むｎ個の要素データを、前記第１論理チャンクに対応するｎ個の物理記憶領域へ夫々書き込む、ように構成されている。
【発明の効果】
【０００９】
一つのＲＡＩＤグループを構成する物理記憶デバイスより少ない単位で物理記憶デバイスを増設しても、冗長性を確保することができる。これにより、ビットコストの高いＳＳＤのみで構成されたＡＦＡ（Ａｌｌ  Ｆｌａｓｈ  Ａｒｒａｙ）や、搭載ドライブ台数の少ないミッドレンジ以下のストレージシステムにおいても、容量追加時のコストを最小限に抑えることができる。また、性能やコストを考慮しながら増設するドライブ台数を任意に選択することにより、増設の自由度を上げることができる。【００１０】
加えて、分散ＲＡＩＤ方式を適用した場合の最小ドライブ台数を１パリティグループ＋１台に削減することが可能となり、初期導入時のコストを最小限に抑えることができる。
【図面の簡単な説明】
【００１１】
【図１】本実施例の計算機システムにおける、仮想記憶領域と物理記憶領域との間のマッピングの概要を示す。
【図２】本実施例に係る計算機システムのハードウェア構成を示す。
【図３】本実施例に係る計算機システムの論理構成を示す。
【図４】物理記憶ドライブのデータ構成を示す。
【図５】仮想ボリュームのページマッピングを示す。
【図６】ＶＰＧとＰＰＧの間のパーセルマッピングを示す。
【図７】物理ドライブ数がＮの整数倍である第１構成ケースのパーセルマッピングの例を示す。
【図８】物理ドライブ数がＮの整数倍でない第２構成ケースのパーセルマッピングの例を示す。
【図９】第１構成ケースの１台のドライブの故障時におけるリビルドの動作例を示す。
【図１０】共有メモリの内容を示す。
【図１１】ローカルメモリの内容を示す。
【図１２】プール管理テーブルを示す。
【図１３】ドライブ状態管理テーブルを示す。
【図１４】ページマッピングテーブルを示す。
【図１５】ＳＷＡＰポインタテーブルを示す。
【図１６】マッピング補正テーブルを示す。
【図１７】マッピング逆補正テーブルを示す。
【図１８】単体増設処理の第１増設ケースを示す。
【図１９】第１増設ケースにおけるマッピングパターン生成方法の概念を示す。
【図２０】単体増設処理の第２増設ケースを示す。
【図２１】単体増設処理を示す。
【図２２】単体増設マッピング生成処理を示す。
【図２３】完全一致ペアＳＷＡＰ処理を示す。
【図２４】部分一致ペアＳＷＡＰ処理を示す。
【図２５】不一致ペアＳＷＡＰ処理を示す。
【図２６】パーセルリバランス処理を示す。
【図２７】ページ割当処理の概念を示す。
【図２８】ページ割当処理を示す。
【図２９】ＬＰ変換処理を示す。
【図３０】ＰＬ変換処理を示す。
【図３１】マッピング補正処理を示す。
【図３２】マッピング逆補正処理を示す。
【発明を実施するための形態】
【００１２】
以下では、幾つかの実施例を、図面を参照して説明する。
【００１３】
なお、以下の説明では、「ａａａテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていても良い。データ構造に依存しないことを示すために「ａａａテーブル」を「ａａａ情報」と呼ぶこともできる。
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェースデバイス（例えばポート）を用いながら行うため、処理の主語がプログラムとされても良い。プログラムを主語として説明された処理は、プロセッサ或いはそのプロセッサを有する計算機（例えば、管理計算機、ホスト計算機、コントローラ等）が行う処理としても良い。また、コントローラ（ストレージコントローラ）は、プロセッサそれ自体であっても良いし、コントローラが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。プログラムは、プログラムソースから各コントローラにインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又はコンピュータ読取可能な記憶メディアであっても良い。
【００１４】
また、以下の説明では、要素の識別情報として、ＩＤが使用されるが、それに代えて又は加えて他種の識別情報が使用されてもよい。
【００１５】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号又は参照符号における共通番号を使用し、同種の要素を区別して説明する場合は、その要素の参照符号を使用又は参照符号に代えてその要素に割り振られたＩＤを使用することがある。
【００１６】
また、以下の説明では、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）要求は、ライト要求又はリード要求であり、アクセス要求と呼ばれてもよい。
【００１７】
ＲＡＩＤグループは、ＰＧ（Ｐａｒｉｔｙ  Ｇｒｏｕｐ）と呼ばれてもよい。
【００１８】
図１は、本実施例の計算機システムにおける、仮想記憶領域と物理記憶領域との間のマッピングの概要を示す。
【００１９】
この図の上部は、仮想記憶領域を示し、この図の下部は、物理記憶領域を示す。
【００２０】
本実施例の計算機システムは、仮想ボリュームをホストに提供し、仮想記憶ドライブ４０２により提供される仮想記憶領域を仮想ボリュームに割り当てる。仮想記憶領域は、例えばページである。
【００２１】
さらに、複数の仮想記憶ドライブ４０２を含む仮想パリティグループ（ＶＰＧ：Ｖｉｒｔｕａｌ  Ｐａｒｉｔｙ  Ｇｒｏｕｐ）２０４が構成される。この図の例においては、４個の仮想記憶ドライブ４０２が、一つの仮想パリティグループ２０４を構成する。この図の例においては、３個の仮想パリティグループ２０４が示されており、それぞれにＶＰＧ＃（番号）が与えられている。また、各仮想パリティグループ２０４に属するドライブには、それぞれ仮想パリティグループ内の位置を示すＶＣＤＥＶ（Ｖｉｒｔｕａｌ  Ｃｏｌｕｍｎ  ＤＥＶｉｃｅ）＃が与えられる。この図の例においては、各仮想パリティグループ２０４内に４個の仮想記憶ドライブ４０２が示されており、それぞれに異なるＶＣＤＥＶ＃が与えられている。
【００２２】
仮想パリティグループ２０４は、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）グループであり、複数の仮想記憶ドライブ４０２に跨る冗長データセットを格納する。冗長データセットは、ＲＡＩＤにおいてデータをリビルドするためのデータセットであり、ホストからのデータと冗長データとを含む。
【００２３】
仮想記憶領域は、所定サイズの仮想ストライプ４０５に分割されている。仮想パリティグループ２０４内の複数の仮想記憶ドライブ４０２のそれぞれの中の特定の論理アドレスの仮想ストライプ４０５は、仮想ストライプ列４０６を構成する。この図の例においては、４個の仮想ストライプ４０５が一つの仮想ストライプ列４０６を構成する。仮想ストライプ列４０６は、冗長データセットを格納する。冗長データセットは、ホストからのデータＤと、データＤに基づくパリティＰとを含む。一つの仮想ストライプ列４０６内の各仮想ストライプ４０５は、対応する冗長データセット内のデータＤ又はパリティＰを格納する。
【００２４】
なお、データＤを、ユーザデータと呼ぶことがある。パリティＰを、冗長データと呼ぶことがある。冗長データセット内の各仮想ストライプに格納されるデータを要素データと呼ぶことがある。
【００２５】
一つの仮想記憶ドライブ４０２において、一つの仮想ストライプ４０５、又は論理アドレスが連続する所定数の仮想ストライプ４０５が、一つの仮想パーセル４００を構成する。この図の例においては、連続する論理アドレスを有する２個の仮想ストライプ４０５が、一つの仮想パーセル４００を構成する。
【００２６】
さらに、連続する論理アドレスを有する所定数の仮想ストライプ列４０６は、仮想チャンク（Ｖｃｈｕｎｋ：Ｖｉｒｔｕａｌ  ｃｈｕｎｋ）４０１を構成する。仮想チャンク４０１は、一つの仮想パーセル列である。仮想パーセル列は、一つの仮想パリティグループ２０４内の複数の仮想記憶ドライブ４０２のそれぞれの中の特定の論理アドレスの仮想パーセル４００で構成される。言い換えれば、一つの仮想チャンク４０１は連続する論理アドレスを有する１以上の仮想ストライプ列４０６で構成されている。この図の例においては、一つの仮想チャンク４０１は、連続する論理アドレスを有する２個の仮想ストライプ列４０６で構成されている。この図の例においては、１２個の仮想チャンク４０１が示されており、それぞれにＶＰＧ２０４内のＶｃｈｕｎｋ＃が与えられている。仮想パーセル４００が一つの仮想ストライプ４０５で構成される場合、仮想チャンク４０１は一つの仮想ストライプ列４０６で構成される。
【００２７】
この図の例においては、各仮想パーセル４００内に記された数字のペアは、ＶＰＧ＃とＶｃｈｕｎｋ＃で表されるＶｃｈｕｎｋ識別子である。例えば、Ｖｃｈｕｎｋ識別子が“０−１”である仮想パーセル４００は、ＶＰＧ＃＝０、Ｖｃｈｕｎｋ＃＝１に属することを示す。
【００２８】
仮想記憶領域は、物理記憶ドライブ１７０が提供する物理記憶領域にマッピングされている。複数の物理記憶ドライブ１７０を含む物理パリティグループ（ＰＰＧ：Ｐｈｙｓｉｃａｌ  Ｐａｒｉｔｙ  Ｇｒｏｕｐ）２０５が構成される。この図の例においては、４個の物理記憶ドライブ１７０が、一つの物理パリティグループ２０５を構成する。この図の例においては、３個の物理パリティグループ２０５が示されており、それぞれにＰＰＧ＃が与えられている。仮想記憶領域と物理記憶領域の間のマッピングをパーセルマッピングと呼ぶことがある。また、各物理パリティグループ２０５に属するドライブには、それぞれ物理パリティグループ内の位置を示すＰＣＤＥＶ（Ｐｈｙｓｉｃａｌ  Ｃｏｌｕｍｎ  ＤＥＶｉｃｅ）＃が与えられる。この図の例においては、各物理パリティグループ２０５内に４個の物理記憶ドライブ１７０が示されており、それぞれに異なるＰＣＤＥＶ＃が与えられている。
【００２９】
仮想チャンク４０１内の各仮想パーセル４００は、物理記憶領域における物理パーセル７０１にマッピングされる。各物理パーセル７０１内の数字は、対応する仮想パーセル４００が属するＶｃｈｕｎｋ識別子（ＶＰＧ＃とＶｃｈｕｎｋ＃）を示し、“Ｓ”はスペア領域を示す。
【００３０】
仮想チャンク４０１と同様に、物理記憶領域において物理チャンク（Ｐｃｈｕｎｋ：Ｐｈｙｓｉｃａｌ  ｃｈｕｎｋ）５０１が構成されている。物理チャンク５０１は、一つの物理パリティグループ２０５内の複数の物理記憶ドライブ１７０のそれぞれの中の特定の物理アドレスの物理パーセル７０１で構成される。この図の例においては、１５個の物理チャンク５０１が示されており、それぞれにＰｃｈｕｎｋ＃が与えられている。各物理チャンク５０１は、Ｐｃｈｕｎｋ＃とＰＰＧ＃で同定される。
【００３１】
この図の例においては、仮想チャンク４０１内の複数の仮想パーセル４００は、障害回復のため、それぞれ異なる複数の物理記憶ドライブ１７０にマッピングされる。言い換えれば、仮想ストライプ列４０６内の複数の仮想ストライプ４０５も、それぞれ異なる複数の物理記憶ドライブ１７０にマッピングされる。これにより、冗長データセットは、物理パリティグループ内の物理記憶ドライブ数の要素データ（データＤ又はパリティＰ）を含み、それらは、物理パリティグループ内の物理記憶ドライブ数の物理記憶ドライブ１７０にそれぞれ書き込まれる。
【００３２】
また、仮想チャンク４０１に含まれる複数の仮想パーセル４００は、１以上の物理パリティグループ２０５に分散してマッピングされる。つまり、各仮想チャンク４０１を構成する仮想ストライプ４０５は、複数の物理パリティグループ２０５に分散してマッピングされうる。これにより、計算機システムは、Ｉ／Ｏ処理の負荷が特定の物理記憶ドライブ１７０に集中することを低減する。
【００３３】
パーセルマッピングは、マッピング条件を満たす。マッピング条件は、各仮想チャンク４０１が複数の物理記憶ドライブ１７０にマッピングされることである。言い換えれば、マッピング条件は、一つの物理記憶ドライブ１７０内の複数の物理パーセル７０１が同一の仮想チャンク４０１にマッピングされないことである。
【００３４】
物理記憶領域においては、所定のＰｃｈｕｎｋ＃の物理チャンク５０１は、スペア領域に割り当てられており、この図の例においては、Ｐｃｈｕｎｋ＃が０である物理チャンク５０１は、スペア領域に割り当てられている。
【００３５】
以下、実施例に係る計算機システムを説明する。以下では、本実施例を実現するための一例として特許文献１に示された構成を用いて説明することがあるが、本実施例は特許文献１に示された構成に限定されない。
【００３６】
図２は、本実施例に係る計算機システムのハードウェア構成を示す。
【００３７】
計算機システム１は、１以上のホスト計算機（以下、ホストという）１０と、管理サーバ２０と、ストレージコントローラ１００と、ドライブエンクロージャ１６０とを含む。ホスト計算機１０と、管理サーバ２０と、ストレージコントローラ１００とは、ネットワーク３０を介して接続されている。ドライブエンクロージャ１６０は、ストレージコントローラ１００と接続されている。ネットワーク３０は、ローカルエリアネットワーク（ＬＡＮ：Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であっても良く、ワイドエリアネットワーク（ＷＡＮ：Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であってもよい。ホスト１０とストレージコントローラ１００が一つの計算機であってもよい。また、ホスト１０とストレージコントローラ１００のそれぞれが仮想マシンであってもよい。
【００３８】
ホスト１０は、例えば、アプリケーションを実行する計算機であり、アプリケーションにより利用されるデータをストレージコントローラ１００から読み出し、アプリケーションにより作成されたデータをストレージコントローラ１００へ書き込む。
【００３９】
管理サーバ２０は、管理者により使用される計算機である。管理サーバ２０は、情報を入力するための入力デバイスと、情報を表示するための出力デバイスとを含んでもよい。管理サーバ２０は、入力デバイスに対する管理者の操作により、データの復元のためのデータ復元処理の種類の設定を受け付け、ストレージコントローラ１００に受け付けたデータ復元処理を実行させるように設定する。
【００４０】
ストレージシステムは、例えば、ストレージコントローラ１００、及びドライブエンクロージャ１６０を含む。ドライブエンクロージャ１６０には、物理記憶ドライブ１７０（単にドライブとも呼ぶ）が複数含まれている。物理記憶ドライブ１７０は、１以上の記憶媒体を含む。記憶媒体は、例えば、磁気ディスク、フラッシュメモリ、その他の不揮発性半導体メモリ（ＰＲＡＭ、ＲｅＲＡＭ等）である。
【００４１】
ストレージコントローラ１００は、１以上のフロントエンドパッケージ（ＦＥＰＫ：ＦｒｏｎｔＥｎｄ  ＰａｃＫａｇｅ）１１０と、保守インタフェース（保守Ｉ／Ｆ）１１２と、１以上のＣＰＵ１２０と、１以上のキャッシュメモリパッケージ（ＣＭＰＫ：ＣＭ  ＰａｃＫａｇｅ）１３０と、１以上のバックエンドパッケージ（ＢＥＰＫ：ＢａｃｋＥｎｄ  ＰａｃＫａｇｅ）１４０と、内部ネットワーク１５０とを有する。
【００４２】
ＦＥＰＫ１１０、保守Ｉ／Ｆ１１２、ＣＰＵ１２０、ＣＭＰＫ１３０、及びＢＥＰＫ１４０は、内部ネットワーク１５０を介して接続されている。ＢＥＰＫ１４０は、複数系統のパスを介してドライブエンクロージャ１６０と接続されている。
【００４３】
ＦＥＰＫ１１０は、ホスト１０とのインタフェースの一例であり、１以上のポート１１１を有する。ポート１１１は、ストレージコントローラ１００を、ネットワーク３０等を介して種々の装置と接続する。保守Ｉ／Ｆ１１２は、ストレージコントローラ１００を、管理サーバ２０と接続するためのインタフェースである。
【００４４】
ＣＰＵ１２０は制御部であって、１以上のＣｏｒｅ１２１と、ローカルメモリ（ＬＭ：Ｌｏｃａｌ  Ｍｅｍｏｒｙ）１２２とを有する。Ｃｏｒｅ１２１は、ＬＭ１２２に格納されたプログラムを実行して各種処理を実行する。Ｃｏｒｅ１２１は、ＢＥＰＫ１４０を介して、各種コマンド（例えばＳＣＳＩにおけるＲＥＡＤコマンドやＷＲＩＴＥコマンドなど）をドライブエンクロージャ１６０内の物理記憶ドライブ１７０に送信する。ＬＭ１２２は、各種プログラムや、各種情報を記憶する。
【００４５】
ＣＭＰＫ１３０は、１以上のキャッシュメモリ（ＣＭ）１３１を有する。ＣＭ１３１は、ホスト１０から物理記憶ドライブ１７０に書き込むデータ（ライトデータ）や、物理記憶ドライブ１７０から読み出したデータ（リードデータ）を一時的に格納する。
【００４６】
ＢＥＰＫ１４０は、ドライブエンクロージャ１６０とのインタフェースの一例であり、１以上のポート１１１を有する。
【００４７】
ドライブエンクロージャ１６０は、複数の物理記憶ドライブ１７０を有する。
【００４８】
ストレージコントローラ１００は、複数の物理記憶ドライブ１７０の記憶領域で構成される容量プール（以下、単にプールという）を管理する。ストレージコントローラ１００は、プール内の記憶領域を用いてＲＡＩＤグループを構成する。すなわち、ストレージコントローラ１００は、複数の物理記憶ドライブ１７０を用いて、複数の仮想パリティグループ（ＶＰＧ）を構成する。ＶＰＧは、仮想的なＲＡＩＤグループである。
【００４９】
ＶＰＧの記憶領域は、複数のサブ記憶領域列で構成されている。各サブ記憶領域列は、複数のサブ記憶領域で構成されている。複数のサブ記憶領域は、ＶＰＧを構成する複数の物理記憶ドライブ１７０に跨っており、複数の物理記憶ドライブ１７０にそれぞれ対応している。ここで、一つのサブ記憶領域を、「ストライプ」と呼び、サブ記憶領域列を、「ストライプ列」と呼ぶ。複数のストライプ列によって、ＲＡＩＤグループの記憶領域が構成されている。
【００５０】
ＲＡＩＤには、いくつかのレベル（以下、「ＲＡＩＤレベル」という）がある。例えば、ＲＡＩＤ５では、ＲＡＩＤ５に対応したホストコンピュータから指定されたライト対象のデータは、所定サイズのデータ（以下、便宜上「データ単位」という）に分割される。各データ単位は、複数のデータ要素に分割される。複数のデータ要素は、同一のストレイプ列内の複数のストライプにそれぞれ書き込まれる。
【００５１】
ＲＡＩＤ５では、物理記憶ドライブ１７０に障害が発生したことにより、その物理記憶ドライブ１７０から読み出せなくなったデータ要素をリビルドするために、各データ単位に対して、“パリティ”と呼ばれる冗長な情報（以下、「冗長コード」）が生成される。冗長コードも、複数のデータ要素と同一のストライプ列内のストライプに書き込まれる。
【００５２】
例えば、ＲＡＩＤグループを構成する物理記憶ドライブ１７０の数が４である場合、そのうちの３個の物理記憶ドライブ１７０に対応する３個のストライプに、データ単位を構成する３個のデータ要素が書き込まれ、残りの一つの物理記憶ドライブ１７０に対応するストライプに、冗長コードが書き込まれる。以下、データ要素と冗長コードとを区別しない場合には、両者をそれぞれストライプデータ要素ということもある。
【００５３】
ＲＡＩＤ６では、各データ単位に対して、２種類の冗長コード（Ｐパリティ、Ｑパリティという）が生成されて、それぞれの冗長コードが同一のストライプ列内のストライプに書き込まれる。これにより、データ単位を構成する複数のデータ要素のうちの２個のデータ要素を読み出すことができない場合に、これら２個のデータ要素を復元することができる。
【００５４】
上記に説明した以外にもＲＡＩＤレベルは存在する（例えばＲＡＩＤ１〜４）。データの冗長化技術として、３重ミラー（Ｔｒｉｐｌｉｃａｔｉｏｎ）や、パリティを３個用いたトリプルパリティ技術等もある。冗長コードの生成技術についても、ガロア演算を用いたＲｅｅｄ−ｓｏｌｏｍｏｎ符号や、ＥＶＥＮ−ＯＤＤ等さまざまな技術が存在する。以下においては、主にＲＡＩＤ５又は６について説明するが、冗長化技術を上述した方法に置き換え可能である。
【００５５】
ストレージコントローラ１００は、物理記憶ドライブ１７０のうちいずれかの物理記憶ドライブ１７０が故障した場合に、故障した物理記憶ドライブ１７０に格納されているデータ要素を復元する。
【００５６】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１２０内のＣｏｒｅ１２１は、故障した物理記憶ドライブ１７０に格納されていたデータ要素を復元するために必要なストライプデータ要素（例えば、他のデータ要素及びパリティ）を、当該データを格納している複数の物理記憶ドライブ１７０から取得する。Ｃｏｒｅ１２１は、インタフェースデバイス（例えば、ＢＥＰＫ１４０）を介して、取得したストライプデータ要素をキャッシュメモリ（ＣＭ：Ｃａｃｈｅ  Ｍｅｍｏｒｙ）１３１に格納する。その後、キャッシュメモリ１３１のストライプデータ要素に基づいてデータ要素を復元し、当該データ要素を所定の物理記憶ドライブ１７０に格納する。
【００５７】
例えば、ＲＡＩＤ５で構成されたＲＡＩＤグループのデータ単位に対して、Ｃｏｒｅ１２１は、データ単位を構成する複数のデータ要素の排他的論理和（ＸＯＲ）をとることによってＰパリティを生成する。ＲＡＩＤ６で構成されたＲＡＩＤグループのデータ単位に対して、Ｃｏｒｅ１２１は、更に、データ単位を構成する複数のデータ要素に所定の係数を掛けた後、それぞれのデータの排他的論理和をとることによって、Ｑパリティを生成する。
【００５８】
以下、Ｃｏｒｅ１２１の動作をストレージコントローラ１００の動作として説明することがある。
【００５９】
図３は、本実施例に係る計算機システムの論理構成を示す。
【００６０】
ストレージコントローラ１００は、複数、たとえば、４個のドライブ１７０を束ねて、物理パリティグループ（ＰＰＧ）２０５を構成する。ストレージコントローラ１００は、１以上の物理パリティグループ２０５とそれに対応する１以上の仮想パリティグループ（ＶＰＧ）２０４とを含むＤＧ（Ｄｉｓｔｒｉｂｕｔｉｏｎ  Ｇｒｏｕｐ）２０７を構成する。
【００６１】
ストレージコントローラ１００は、ＤＧ２０７内の複数のＰＰＧ２０５の一部記憶領域を、同一ＤＧ２０７内のＶＰＧ２０４へ割り当てる。これにより、ＶＰＧ２０４内の仮想的なストライプ列である仮想ストライプ列は、ＤＧ２０７の範囲で、複数のＰＰＧ２０５のドライブに分散される。つまり、ＶＰＧ２０４へのＩ／Ｏ要求によって、そのＶＰＧ２０４が所属するＤＧ２０７の範囲を超えたドライブ１７０へのアクセスは実行されない。ＤＧ２０７内に、ＶＰＧ２０４とＰＰＧ２０５は同数存在し、ＤＧ２０７内に存在するその識別番号も同じである。論理的な記憶容量の集合であるプール２００は、１以上のＤＧ２０７を含む。
【００６２】
前述したように、ストレージコントローラ１００は、ドライブ１７０として、例えば、フラッシュメモリドライブ、ＳＡＳドライブ、ＳＡＴＡドライブなど、性能特性が異なる複数種類のドライブを持つ場合がある。ドライブ１７０は、異なる特性に応じて階層（Ｔｉｅｒ）２０６に分類される。Ｔｉｅｒ２０６はそれぞれ性能特性が異なるため、ＤＧ２０７が異なるＴｉｅｒ２０６に属するドライブ１７０で構成されていた場合、性能の低いドライブがボトルネックとなってしまう。そのため、ＤＧ２０７は、単一のＴｉｅｒ２０６に属するドライブ１７０のみを含むように構成されることが望ましい。
【００６３】
プール２００内には複数の仮想ボリューム（ＶＶＯＬ：Ｖｉｒｔｕａｌ  ＶＯＬｕｍｅ）２０１が存在する。ＶＶＯＬ２０１は、仮想的な記憶デバイスであり、ホスト１０から参照されることができる。ストレージコントローラ１００の管理者からの指示に応じて、管理サーバ２０は、保守Ｉ／Ｆ１１２を介して、ストレージコントローラ１００に任意のサイズのＶＶＯＬ２０１を作成させる。サイズは、実際のドライブ１７０の合計容量に依存しない。ストレージコントローラ１００は、ホスト１０からのＩ／Ｏ要求（ホストＩ／Ｏ）により示されたＶＶＯＬ２０１内の記憶領域（ＶＶＯＬページ２０２）に対して、ＶＰＧ２０３内の記憶領域（ＶＰＧページ２０３）を動的に割り当てる。
【００６４】
ストレージコントローラ１００は、ＶＶＯＬページ２０２毎にアクセス頻度を記録し、高頻度のＶＶＯＬページ２０２に対して、高性能なＶＰＧページ２０３を割り当てるようにしてもよい。例えばこの図において、高性能なＶＰＧページ２０３は、高性能なフラッシュメモリドライブで構成されたＴｉｅｒ２０６内のＶＰＧ２０４に属するＶＰＧページ２０３である。ストレージコントローラ１００は、継続的にＶＶＯＬページ２０２の負荷を監視して、周期的にＶＰＧページ２０３の割り当てを変更してもよい。
【００６５】
図４は、物理記憶ドライブのデータ構成を示す。
【００６６】
物理記憶ドライブ１７０は、ストレージコントローラ１００等の上位の装置との間で、ＳＣＳＩコマンド処理の最小単位（例えば、５１２Ｂｙｔｅ）であるサブブロック３００を単位として、データの受け渡しを行う。スロット３０１は、キャッシュメモリ１３１上でのデータをキャッシュする際の管理単位であり、例えば、２５６ＫＢである。スロット３０１は、連続する複数のサブブロック３００の集合で構成される。物理ストライプ３０２は、複数（例えば、２個）のスロット３０１を格納する。
【００６７】
図５は、仮想ボリュームのページマッピングを示す。
【００６８】
ホスト１０により認識可能なＶＶＯＬ２０１は、複数のＶＶＯＬページ２０２で構成される。ＶＶＯＬ２０１は、ユニークな識別子（ＶＶＯＬ番号）を持つ。ストレージコントローラ１００は、ＶＶＯＬページ２０２に、ＶＰＧ２０４内のＶＰＧページ２０３を割り当てる。この関係をページマッピング４０３と呼ぶ。ページマッピング４０３は、ストレージコントローラ１００により動的に管理される。連続するＶＶＯＬページ＃を持つ複数のＶＶＯＬページには、連続するＶＶＯＬ空間のアドレスが与えられる。
【００６９】
ＶＰＧ２０４は、１以上の仮想チャンク（Ｖｃｈｕｎｋ）４０１を含む。Ｖｃｈｕｎｋ４０１は、複数の仮想パーセル４００で構成される。この図の例では、Ｖｃｈｕｎｋ４０１は、８個の仮想パーセル４００で構成されている。
【００７０】
仮想パーセル４００は、一つの仮想記憶ドライブ４０２内の連続した領域で構成されている。仮想パーセル４００は、１又は複数の仮想ストライプ４０５で構成されている。この図の例において、仮想パーセル４００は、８個の仮想ストライプ４０５で構成されている。仮想パーセル４００における仮想ストライプ４０５の数は特に限定されない。仮想パーセル４００が複数の仮想ストライプ４０５を含むことで、処理の効率化が実現される。
【００７１】
この図の例において、ＶＰＧ２０４は、ＲＡＩＤ６の６Ｄ＋２Ｐ構成である、すなわち、データ単位を構成する６つのデータ要素（Ｄ）と、これらデータ要素に対応する２つのパリティ（Ｐ、Ｑ）とをそれぞれ異なる物理記憶ドライブ１７０に格納する。この場合、Ｖｃｈｕｎｋ４０１は、例えば、８個の異なる物理記憶ドライブ１７０の仮想パーセル４００で構成される。
【００７２】
言い換えれば、Ｖｃｈｕｎｋ４０１は、複数の仮想ストライプ列４０６で構成されており、この図の例においては、８個の仮想ストライプ列４０６で構成されている。Ｖｃｈｕｎｋ４０１が複数の仮想ストライプ列４０６を含むことで、処理の効率化が実現される。なお、Ｖｃｈｕｎｋ４０１は、一つの仮想ストライプ列４０６で構成されてもよい。
【００７３】
Ｖｃｈｕｎｋ４０１は、複数（例えば、４個）のＶＰＧページ２０３を含む。ＶＰＧページ２０３は、複数（例えば、２個）の連続する仮想ストライプ列４０６のストライプデータ要素を格納することができる。例えば、この複数のデータ単位を数ＭＢとすることで、ドライブ１７０が磁気ディスクなどである場合でも、ホストＩ／Ｏのシーケンシャル性能を一定に保つことができる。
【００７４】
この図においては、１＿Ｄ１、１＿Ｄ２、１＿Ｄ３、１＿Ｄ４、１＿Ｄ５、１＿Ｄ６、１＿Ｐ、１＿Ｑのように、「＿」の前の数字が共通するものが、同一の仮想ストライプ列４０６のストライプデータ要素を示す。なお、各ストライプデータ要素のサイズは、物理ストライプ３０２のサイズである。
【００７５】
ＶＰＧ２０４は上位ストレージシステムにおいて、ユニークな識別子（ＶＰＧ番号）を持つ。また、各ＶＰＧ２０４内のＮ個の仮想記憶ドライブ４０２のそれぞれには、ドライブ番号（ＶＣＤＥＶ番号）が与えられている。これは、ＶＰＧ２０４内の記憶領域のアドレッシングのための識別子で、後述するＰＰＧ２０５内のドライブとの対応関係を表すための識別子である。ＮをＰＧドライブ数と呼ぶことがある。
【００７６】
各ＶＶＯＬ２０１は、ホスト１０から、ＶＶＯＬ２０１を表す識別子とＬＢＡとを用いてアクセスされる。この図に示すように、ＶＶＯＬページ２０２には、ＶＶＯＬ２０１の先頭からＶＶＯＬＰａｇｅ＃が与えられる。ホストＩ／Ｏにより指定されたＬＢＡに対して、以下の式によりＶＶＯＬＰａｇｅ＃を算出することが出来る。ここで、Ｆｌｏｏｒ（ｘ）は、実数ｘに対してｘ以下の最大の整数を示す記号である。ＬＢＡ及びＶＶＯＬＰａｇｅｓｉｚｅのそれぞれは、サブブロック数で表されてもよい。
【００７７】
ＶＶＯＬＰａｇｅ＃＝Ｆｌооｒ（ＬＢＡ／ＶＶＯＬＰａｇｅｓｉｚｅ）
【００７８】
また、ＶＶＯＬページ２０２及びＶＰＧページ２０３のそれぞれは、複数の仮想ストライプで構成されている。ただし、ホスト１０にパリティのデータをアクセスさせないため、ＶＶＯＬ２０１上ではパリティが見えない。例えば、この図で示している６Ｄ＋２Ｐの場合、ＶＰＧ２０４の空間において８×２個の仮想ストライプを含むＶＰＧページ２０３は、ＶＶＯＬ２０１の空間において６×２個の仮想ストライプを含むＶＶＯＬページ２０２として見える。
【００７９】
ストレージコントローラ１００は、ＶＰＧ２０４の空間とＶＶＯＬ２０１の空間を補正することにより、ページマッピング４０１と合わせて、ＶＶＯＬ２０１側のＬＢＡに対応するＶＰＧ＃でのＶＣＤＥＶ＃とＶｃｈｕｎｋ＃、及び仮想パーセル４００内のオフセットアドレスを算出することが出来る。もちろん、ストレージコントローラ１００は、ホストＩ／Ｏに対応したパリティ領域のＶＰＧ＃でのＶＣＤＥＶ＃とＶｃｈｕｎｋ＃、及び仮想パーセル４００内のオフセットアドレスも算出可能である。
【００８０】
この図は、ＲＡＩＤ６（６Ｄ＋２Ｐ）を用いるケースを示すが、例えば１４Ｄ＋２Ｐなど、Ｄ数を増やしてもよいし、ＲＡＩＤ５やＲＡＩＤ１を用いてもよい。また、ＲＡＩＤ４のようにパリティのみの仮想パーセルを作成してもよい。通常のＲＡＩＤ４の場合、上位層の論理設計を簡略化できるというメリットがある一方、Ｗｒｉｔｅ時にパリティドライブにアクセスが集中するため、パリティドライブがボトルネック化しやすいというデメリットがあるが、分散ＲＡＩＤ構成の場合、ＶＰＧ２０４上のパリティドライブ内のデータは、ＰＰＧ２０５上では複数の物理ドライブ１７０に分散されているため、当該デメリットの影響を最小化することができる。また、ＲＡＩＤ６におけるＱパリティのエンコーディングはガロア演算以外でも、ＥＶＥＮ−ＯＤＤ法など他の一般的に知られた方法を使ってもよい。
【００８１】
図６は、ＶＰＧとＰＰＧの間のパーセルマッピングを示す。
【００８２】
Ｖｃｈｕｎｋ４０１は、前述のとおり、ＶＰＧ２０４の記憶領域の空間において連続的である。連続するｃ個のＶｃｈｕｎｋ４０１は、Ｖｃｈｕｎｋ周期５０４を構成する。ＰＰＧ２０５は、１以上の物理チャンク（Ｐｃｈｕｎｋ）５０１を含む。Ｐｃｈｕｎｋ５０１は、複数の物理パーセルで構成される。この図の例では、Ｐｃｈｕｎｋ５０１は、８個の物理パーセルで構成されている。
【００８３】
連続する一つ以上のＰｃｈｕｎｋ５０１ｂとｃ個のＰｃｈｕｎｋ５０１ａとは、Ｐｃｈｕｎｋ周期５０５を構成する。ｃを周期Ｖｃｈｕｎｋ数と呼ぶ。Ｐｃｈｕｎｋ５０１ｂはスペア領域であり、Ｐｃｈｕｎｋ５０１ａはデータ領域である。一つのＶｃｈｕｎｋ周期５０４は、一つのＰｃｈｕｎｋ周期５０５に対応する。また、パーセルマッピング５００は周期的である。すなわち、Ｖｃｈｕｎｋ周期５０４とＰｃｈｕｎｋ周期５０５の各ペアにおいてパーセルマッピング５００は共通である。仮想記憶領域と物理記憶領域との間のパーセルマッピング５００が周期的であることで、データを複数の物理記憶領域へ適切に分散できると共に、パーセルマッピング５００の効率的な管理が実現される。なお、非周期的、即ち１周期のみのパーセルマッピングが採用されてもよい。
【００８４】
各Ｖｃｈｕｎｋ周期５０４内のＶｃｈｕｎｋ４０１の識別子をＶｃｙｃｌｅ＃で表す。したがって、Ｖｃｙｃｌｅ＃は、０からｃ−１までの値を取る。Ｐｃｈｕｎｋ周期５０５内のＰｃｈｕｎｋ５０１の識別子を、Ｐｃｙｃｌｅ＃で表す。Ｐｃｙｃｌｅ＃は、一つのＰｃｈｕｎｋ周期５０５内のスペア用Ｐｃｈｕｎｋ数をｍとすると、０からｃ＋ｍ−１までの値を取る。
【００８５】
ストレージコントローラ１００は、一つのＶｃｈｕｎｋ周期５０４に対して、１以上のＰＰＧ２０５に属するＰｃｈｕｎｋ５０１ａを割り当てる。ストレージコントローラ１００は、逆に一つのＰｃｈｕｎｋ周期５０５を、１以上のＶＰＧ２０４に属するＶｃｈｕｎｋ４０１に割り当てる。一つのＶｃｈｕｎｋ４０１内の複数の仮想パーセルのデータ実体には、複数のＰｃｈｕｎｋ５０１ａに亘る複数の物理パーセルが割り当てられる。
【００８６】
上述のように、Ｐｃｈｕｎｋ周期５０５はスペア用のＰｃｈｕｎｋ５０１ｂを持つため、Ｐｃｈｕｎｋ周期５０５のチャンク数は、Ｖｃｈｕｎｋ周期５０４のチャンク数よりも１以上多い。この図の例では、式Ｐｃｈｕｎｋ＃  ｍｏｄ  （ｃ＋１）＝０が成立する場合、即ち、Ｐｃｈｕｎｋ＃＝ｋ（ｃ＋１）（ｋは０以上の整数）の場合に、そのＰｃｈｕｎｋ＃のＰｃｈｕｎｋ５０１ｂは、スペア用の領域である。当該スペア領域は、ＰＰＧ２０５が属するＤＧ２０７内のドライブが故障した場合に、リビルド処理の復元先として使用される予約領域である。
【００８７】
なお、この図の例では、一つのドライブ１７０におけるスペア用のＰｃｈｕｎｋ５０１ｂは、一つのＰｃｈｕｎｋ周期５０５に一つのみ存在しているが、システム全体に占めるスペア領域の割合を増やしたい場合は、当該スペア用のＰｃｈｕｎｋ５０１ｂをＰｃｈｕｎｋ周期５０５あたり２個以上定義してもよい。即ち、Ｐｃｈｕｎｋ周期５０５あたりのスペア用Ｐｃｈｕｎｋ５０１ｂをｍ個（ｍは１以上の整数）とした場合、Ｐｃｈｕｎｋ周期５０５内のチャンク数は、Ｖｃｈｕｎｋ周期５０４内のチャンク数に比べてｍ個多くなる。また、Ｐｃｈｕｎｋ＃＝ｋ（ｃ＋１）〜ｋ（ｃ＋１）＋ｍ−１の場合に、そのＰｃｈｕｎｋ＃のＰｃｈｕｎｋ５０１ｂは、スペア用の領域である。
【００８８】
仮想スペアドライブ（ＶＳＤ：Ｖｉｒｔｕａｌ  Ｓｐａｒｅ  Ｄｒｉｖｅ）５０２は、故障ドライブと対応する、実体としては存在しないドライブである。仮想スペアドライブ５０２には、領域として、Ｐｃｈｕｎｋ５０１ｂの一部であるスペア領域（Ｐｃｙｃｌｅ＃＝０〜ｍ−１）が割り当てられる。当該割り当てをスペアマッピング５０３と呼ぶ。スペアマッピング５０３については、後ほど説明する。
【００８９】
次に、ＶＰＧ２０４とＰＰＧ２０５のパーセルマッピング５００について、ｃ＝４、Ｎ＝４、Ｇ＝３の例について説明する。ｃはＶｃｈｕｎｋ周期５０４内のＶｃｈｕｎｋ数、Ｎはパリティグループ（ＶＰＧ２０４及びＰＰＧ２０５）内のドライブ数、ＧはＤＧ内のパリティグループ数である。
【００９０】
このように、パーセルマッピングを、Ｖｃｈｕｎｋ周期５０４及びＰｃｈｕｎｋ周期５０５の組み合わせ毎に、繰り返し配置することで、マッピングパターンの規模を減少させると共にマッピングパターンの生成の負荷やアドレス変換の負荷を抑えることができる。
【００９１】
図７は、ドライブ数がＮの整数倍である第１構成ケースのパーセルマッピングの例を示す。図８は、ドライブ数がＮの整数倍でない第２構成ケースのパーセルマッピングの例を示す。
【００９２】
ＶＰＧ２０４内の仮想記憶ドライブ４０２内の仮想パーセル４００に記されているＶｃｈｕｎｋ識別子“ｘ−ｙ”のうち、ｘは、ＶＰＧ＃を表し、ｙはＶｃｈｕｎｋ＃を表している。その仮想パーセル４００に割り当てられた物理パーセルには、同じＶｃｈｕｎｋ識別子が記している。ＰＰＧ２０５内の各ドライブ１７０には、スペア領域５０１ｂ（“Ｓ”と表記）が定義されている。パーセルマッピングにおいて、一つのＶｃｈｕｎｋ周期５０４内の複数の仮想パーセル４００と、一つのＰｃｈｕｎｋ周期５０５内の複数の物理パーセルとの間の対応関係を、マッピングパターンと呼ぶ。例えば、マッピングパターンは一つのＰｃｈｕｎｋ周期５０５内の各物理パーセルに対応するＶｃｈｕｎｋ識別子で表される。各Ｐｃｈｕｎｋ周期５０５のマッピングパターンは、共通である。
【００９３】
第１構成ケース及び第２構成ケースにおいては、２個のＶｃｈｕｎｋ周期５０４と、２個のＰｃｈｕｎｋ周期５０５とを示す。各Ｐｃｈｕｎｋ周期５０５（ｃ＋１＝５個のＰｃｈｕｎｋ）は、３個のＰＰＧ２０５に亘る。一つのＰｃｈｕｎｋ周期５０５のうち、スペア領域を除く全ての物理パーセルは、一つのＶｃｈｕｎｋ周期５０４内の仮想パーセルに割り当てられる。第１構成ケースにおいては、全ての仮想パーセルに物理パーセルが割り当てられる。
【００９４】
第２構成ケースのように、ドライブ１７０の台数がＮの整数倍でないケースにおいて、ストレージコントローラ１００は、ＶＰＧ２０４内の全Ｖｃｈｕｎｋをページに割り当てるのではなく、端数分の仮想ストライプについては、特定のＶＰＧ２０４の一部のＶｃｈｕｎｋのみ割当を行う。ＤＧ内のドライブ数が（Ｇ−１）×Ｎ＋ｈ（ｈは１〜Ｎ−１の整数）である場合、一つのＶｃｈｕｎｋ周期５０４に割り当て可能なＶｃｈｕｎｋ数は、ｈ×ｃ／Ｎ個となる。第２構成ケースでは、ｃ＝４、Ｎ＝４であるため、Ｖｃｈｕｎｋ周期５０４あたり１個のＶｃｈｕｎｋが割り当て可能となっている。
【００９５】
ここではｃ＝４としているが、ドライブ１７０の台数がＮの整数倍でない任意のケースにおいて、ＶＰＧ−ＰＰＧ間のマッピングを適切に設定するために、ｃはＮの整数倍であればよい。増設前において、ＶＰＧ内のデータＤのドライブ数をｘとし、ＶＰＧ内のパリティＰのドライブ数をｙとすると、冗長度をｘＤ＋ｙＰと表すことができる。本実施例によれば、増設後も冗長度は変わらず、ｘＤ＋ｙＰである。このように、ＶＰＧ内の仮想記憶ドライブ数Ｎが、ＰＰＧ内の物理記憶ドライブ数Ｎと等しく、Ｖｃｈｕｎｋ周期５０４内のＶｃｈｕｎｋ数がＮの整数倍であることにより、ＤＧ内の物理記憶ドライブ数がＮの整数倍でない場合でも、増設された物理記憶ドライブ内の物理パーセルをＶｃｈｕｎｋに割り当てることができ、ＤＧ内の物理記憶ドライブ数がＮの整数倍である場合と同じ冗長度を維持することができる。
【００９６】
図９は、第１構成ケースの１台のドライブの故障時におけるリビルドの動作例を示す。
【００９７】
ここでは、ドライブ１７０ａ（ＰＰＧ＃０のＰＣＤＥＶ＃０）が故障した場合、リビルド動作を示している。
【００９８】
まず、スペア領域（例えば７００ａ）に、故障したドライブに含まれている物理パーセルに対応する仮想パーセル（例えば仮想パーセル４００ａ）を配置する（管理テーブルの更新）。割り当てたスペア領域７００に対して、リビルド処理を実行する。２Ｄ＋２Ｐ構成では、故障ドライブ１７０ａ内の仮想パーセル４００ａ、４００ｂ、４００ｃ、４００ｄのそれぞれに対して、同一仮想チャンクに属する３個の正常仮想パーセルが存在する。ストレージコントローラ１００は、このうち２パーセルを、故障ドライブ１７０ａ以外の正常ドライブ１７０ｂからリードすれば、故障ドライブの喪失データをスペア領域７００ａ、７００ｂ、７００ｃ、７００ｄへ復元できる。そのため、ストレージコントローラ１００は、各仮想パーセル４００が存在する３台の正常ドライブ１７０ｂの中から、全正常ドライブ１７０ｂ間の偏りが少なくなるように２台の正常ドライブ１７０ｂの仮想パーセルを選択することにより、一つのＰｃｈｕｎｋ周期の一つのドライブ１７０ｂからの最大リード量を２パーセル分に制限できる。従来ＲＡＩＤ方式では、一つのＰｃｈｕｎｋ周期に対応する一つのドライブからの最大リード量が４パーセル分に相当するため、この図の例では、従来ＲＡＩＤ方式と比較し、リビルド時のリード性能を２倍に向上できる。同様に、従来ＲＡＩＤ方式では、リビルドされたデータを一つのドライブへライトするのに対し、この図の例では、リビルドされたデータを複数のドライブへ分散してライトするため、リビルド時のライト性能も向上できる。このように、本実施例の計算機システムは、仮想チャンクのストライプデータ要素を分散して複数のドライブ１７０に配置することにより、リビルド性能を向上させることができる。
【００９９】
この図の例においてストレージコントローラ１００は、故障ドライブ１７０ａ内の８個の物理パーセルのデータを復元するために、正常ドライブ１７０ｂから、点線で囲まれた１６個の物理パーセル７０１をリードする。
【０１００】
図１０は、共有メモリの内容を示す。
【０１０１】
共有メモリ１０００は、例えば、物理記憶ドライブ１７０、ＣＭ１３１、及びＬＭ１２２の少なくともいずれか１個の記憶領域を用いて構成される。なお、ストレージコントローラ１００は、物理記憶ドライブ１７０、ＣＭ１３１、及びＬＭ１２２の内の複数の構成の記憶領域を用いて論理的な共有メモリ１０００を構成し、各種情報についてキャッシュ管理を行うようにしてもよい。
【０１０２】
共有メモリ１０００は、プール管理テーブル１００１と、ドライブ状態管理テーブル１００２と、ページマッピングテーブル１００３と、ＳＷＡＰポインタテーブル１００４と、マッピング補正テーブル１００５と、マッピング逆補正テーブル１００６と、ＶＣＤＥＶマッピングテーブル（ＳＥＥＤテーブル）１００７と、Ｖｃｙｃｌｅマッピングテーブル（Ｖ２Ｐテーブル）１００８と、Ｐｃｙｃｌｅマッピングテーブル（Ｐ２Ｖテーブル）１００９と、スペア変換テーブル１０１０と、スペア逆変換テーブル１０１１と、仮想スペア管理テーブル１０１２とを格納する。
【０１０３】
ＶＣＤＥＶマッピングテーブル１００７と、Ｖｃｙｃｌｅマッピングテーブル１００８と、Ｐｃｙｃｌｅマッピングテーブル１００９と、スペア変換テーブル１０１０と、スペア逆変換テーブル１０１１と、仮想スペア管理テーブル１０１２は、特許文献１に示されたテーブルと同様である。ＶＣＤＥＶマッピングテーブル１００７は、ＶＰＧ＃及びＶＣＤＥＶ＃の組み合わせに対応するＳＥＥＤ値を格納する。ＳＥＥＤ値は、例えば線形合同法等の疑似乱数生成方式により決定される。Ｖｃｙｃｌｅマッピングテーブル１００８は、Ｖｃｈｕｎｋに対応するＰｃｈｕｎｋを示し、ＶＰＧ＃とＶｃｙｃｌｅ＃の組み合わせで表されるＶｃｈｕｎｋと、ＰＰＧ＃とＰｃｙｃｌｅ＃の組み合わせで表されるＰｃｈｕｎｋとを示す。Ｐｃｙｃｌｅマッピングテーブル１００９は、Ｖｃｙｃｌｅマッピングテーブル１００８の逆引きテーブルであり、Ｐｃｈｕｎｋに対応するＶｃｈｕｎｋを示す。スペア変換テーブル１０１０は、仮想スペアドライブ内の仮想チャンクに割り当てられるドライブを示す。スペア逆変換テーブル１０１１は、スペア変換テーブル１０１０の逆引きテーブルであり、ドライブに対応する仮想スペアドライブ内の仮想チャンクを示す。仮想スペア管理テーブル１０１２は、仮想スペアドライブが使用中であるか否かを示す状態と、仮想スペアドライブのリビルド中にリビルドが完了したＬＢＡを示すコピーポインタとを含む。その他の各テーブルの詳細については後述する。
【０１０４】
パーセルマッピングにおいて、ＤＧ内のドライブ数がＮの整数倍である場合のマッピングパターンを、Ｇｏａｌマッピングパターンと呼ぶ。Ｇｏａｌマッピングパターンは、ＶＣＤＥＶマッピングテーブル１００７と、Ｖｃｙｃｌｅマッピングテーブル１００８と、Ｐｃｙｃｌｅマッピングテーブル１００９とにより表される。ＤＧ内のドライブ数がＮの整数倍でない場合のマッピングパターンは、ＧｏａｌマッピングパターンとＧｏａｌマッピングパターンに対する補正パターンとで表される。補正パターンは、マッピング補正テーブル１００５と、マッピング逆補正テーブル１００６とにより表される。
【０１０５】
また、ドライブの増設時、増設前のマッピングパターンを現行マッピングパターン（Ｃｕｒｒｅｎｔ）と呼び、増設後のマッピングパターンを目標マッピングパターン（Ｔａｒｇｅｔ）と呼ぶ。即ち、単体増設時、共有メモリ１０００は、Ｃｕｒｒｅｎｔのマッピング補正テーブル１００５及びマッピング逆補正テーブル１００６と、Ｔａｒｇｅｔのマッピング補正テーブル１００５及びマッピング逆補正テーブル１００６とを格納する。
【０１０６】
スペアマッピングは、スペア変換テーブル１０１０と、スペア逆変換テーブル１０１１と、仮想スペア管理テーブル１０１２とにより管理される。
【０１０７】
図１１は、ローカルメモリの内容を示す。
【０１０８】
ローカルメモリ１２２は、単体増設処理プログラム１１０１と、単体増設マッピング生成処理プログラム１１０２と、完全一致ペアＳＷＡＰ処理プログラム１１０３と、部分一致ペアＳＷＡＰ処理プログラム１１０４と、不一致ペアＳＷＡＰ処理プログラム１１０５と、単体増設パーセルリバランス処理プログラム１１０６と、ページ割り当て処理プログラム１１０７と、ＬＰ変換処理プログラム１１０８と、ＰＬ変換処理プログラム１１０９と、マッピング補正処理プログラム１１１０とを格納する。各処理の具体的な用途については後述する。
【０１０９】
図１２は、プール管理テーブルを示す。
【０１１０】
プール管理テーブル１００１は、プール２００と、Ｔｉｅｒ２０６と、ＤＧ２０７と、ＶＰＧ２０４の対応関係を示す情報である。プール管理テーブル１００１は、Ｐｏｏｌ＃１２００と、Ｔｉｅｒ＃１２０１と、ＤＧ＃１２０２と、ＶＰＧ＃１２０３と、割当可能Ｖｃｈｕｎｋ数１２０４のフィールドを含む。
【０１１１】
本テーブルにより、ストレージコントローラ１００は、プール２００の各Ｔｉｅｒ２０６に属するＤＧ２０７の識別子と、各ＤＧ２０７に属するＶＰＧ２０４の識別子と、各ＶＰＧに２０４の割当可能Ｖｃｈｕｎｋ数を調べることができる。ＤＧ２０７内のＶＰＧ２０４とＰＰＧ２０５の数（識別子）は等しいため、対象ＤＧ２０７に属するＰＰＧ＃も知ることができる。例えばあるＤＧ２０７内にＶＰＧ＃０、１、３が属していた場合、当該ＤＧ２０７内にはＰＰＧ＃０、１、３が属していることがわかる。
【０１１２】
割当可能Ｖｃｈｕｎｋ数１２０３には、対応するＰＰＧ２０５のドライブ数をもとに、Ｖｃｈｕｎｋ周期５０４（ｃ）までの値が格納される。ＶＰＧ＃１２０３で示されたＶＰＧ２０４においては、各Ｖｃｈｕｎｋ周期５０４あたり、その割当可能Ｖｃｈｕｎｋ数１２０３を超えるＶｃｈｕｎｋ＃にページを割り当てることができない。ＤＧ１２０２内のドライブ数をＤ個とした場合、割当可能Ｖｃｈｕｎｋ数１２０３は、以下の基準で設定される。最後に増設されたＶＰＧの割当可能Ｖｃｈｕｎｋ数１２０３には、ＤがＮの整数倍の場合にはｃが設定され、ＤがＮの整数倍でない場合には、式（Ｄ  ｍｏｄ  Ｎ）＊ｃ／Ｎで表される値が設定される。ここで、ｃはＮの整数倍であるので、上記式の結果は必ず整数となる。残りのＶＰＧの割当可能Ｖｃｈｕｎｋ数１２０３には、ｃが設定される。
【０１１３】
図１３は、ドライブ状態管理テーブルを示す。
【０１１４】
ドライブ状態管理テーブル１００２は、ＰＰＧ２０５を構成する物理記憶ドライブ１７０の状態を管理するテーブルである。ドライブ状態テーブル１００２は、ＰＰＧ＃１２０５と、ＰＣＤＥＶ＃１２０６と、状態１２０７とのフィールドを含む。ＰＰＧ＃１２０５には、ＰＰＧ＃が格納される。ＰＣＤＥＶ＃１２０６には、ＰＰＧ＃１２０５のＰＰＧ２０５を構成する物理記憶ドライブ１７０の番号（物理記憶ドライブ番号）、即ち０〜Ｎ−１までの値が格納される。
【０１１５】
状態１２０７には、ＰＰＧ＃１２０５、ＰＣＤＥＶ＃１２０６に対応する物理記憶ドライブ１７０の状態が格納される。物理記憶ドライブ１７０の状態としては、物理記憶ドライブ１７０がリード及びライトアクセスが可能で正常であることを示す「正常」、又は物理記憶ドライブ１７０の故障等によりリードまたはライトアクセスが不可能なことを示す「アクセス不可」、ドライブが未実装であることを示す「未実装」が設定される。
【０１１６】
図１４は、ページマッピングテーブルを示す。
【０１１７】
ページマッピングテーブル１００３は、ＶＶＯＬ２０１のページと、ＶＰＧ２０４のページとの対応関係を示す情報である。ページマッピングテーブル１００３は、プール＃１３００と、ＶＶＯＬ＃１３０１と、ＶＶＯＬページ＃１３０２と、ＶＰＧ＃１３０３と、ＶＰＧページ＃１３０４とのフィールドを含む。プール＃１３００と、ＶＶＯＬ＃１３０１と、ＶＶＯＬページ＃１３０２とは、ＶＶＯＬページを示す。ＶＰＧ＃１３０３と、ＶＰＧページ＃１３０４とは、当該ＶＶＯＬページに割り当てられたＶＰＧページを示す。未使用のＶＶＯＬページ＃１３０２に対応するＶＰＧ＃１３０３及びＶＰＧページ＃１３０４には、「未割当」に相当する値が格納される。
【０１１８】
図１５は、ＳＷＡＰポインタテーブルを示す。
【０１１９】
ＳＷＡＰポインタテーブル１００４は、Ｐｏｏｌ＃１３０５と、ＤＧ＃１３０６と、ＰＧ増設用ＳＷＡＰポインタ１３０７と、単体増設用ＳＷＡＰポインタ１３０８のフィールドを含む。本テーブルにより、ストレージコントローラ１００は、対象のＤＧが増設中である場合、各ＳＷＡＰポインタの値を参照することが出来る。
【０１２０】
ＰＧ増設用ＳＷＡＰポインタ１３０７は、特許文献１に示されたＳＷＡＰポインタと同様であり、対応するＤＧのＶＰＧ空間内のＬＢＡを表す。ＰＧ増設用ＳＷＡＰポインタ１３０７は、ＰＧ単位で増設する場合に使用され、ＰＧ増設用ＳＷＡＰポインタより前のＬＢＡのデータは、ＰＧ増設処理における、データのＳＷＡＰが完了していることを表している。ストレージコントローラ１００は、ＰＧ増設処理中にＶＰＧ空間のアドレスにアクセスする場合、指定されたＶＰＧ空間のアドレスがＰＧ増設用ＳＷＡＰポインタより前であれば、増設後のマッピングパターンを用いてアドレス変換を行い、指定されたＶＰＧ空間のアドレスがＰＧ増設用ＳＷＡＰポインタ以降であれば、増設前のマッピングパターンを用いてアドレス変換を行う。
【０１２１】
単体増設用ＳＷＡＰポインタ１３０８は、対応するＤＧのＶＰＧ空間内のＬＢＡを表す。単体増設用ＳＷＡＰポインタ１３０８は、ドライブ単位で増設する場合に使用され、単体増設用ＳＷＡＰポインタより前のＬＢＡのデータは、単体増設処理における、データのＳＷＡＰが完了していることを表している。ストレージコントローラ１００は、単体増設処理中にＶＰＧ空間のアドレスにアクセスする場合、指定されたＶＰＧ空間のアドレスが単体増設用ＳＷＡＰポインタより前であれば、増設後のマッピングパターンを用いてアドレス変換を行い、指定されたＶＰＧ空間のアドレスが単体増設用ＳＷＡＰポインタ以降であれば、増設前のマッピングパターンを用いてアドレス変換を行う。
【０１２２】
各ＳＷＡＰポインタの値は、無効値である場合、増設が実施されていない又は完了済みの状態を表す。また、各ＳＷＡＰポインタの値は、増設処理の開始時に０に初期化される。
【０１２３】
図１６は、マッピング補正テーブルを示す。
【０１２４】
マッピング補正テーブル１００５は、Ｉｎｄｅｘ＃として、ＰＰＧ＃１４００と、ＰＣＤＥＶ＃１４０１と、Ｐｃｙｃｌｅ＃１４０２とのフィールドを含み、対応するＶａｌｕｅとして、ＰＰＧ＃１４０３と、ＰＣＤＥＶ＃１４０４と、Ｐｃｙｃｌｅ＃１４０５とのフィールドを含み、ＳＷＡＰフラグ１４０６のフィールドを含む。
【０１２５】
マッピング補正テーブル１００５の各エントリにおいて、Ｉｎｄｅｘ＃は、ＳＷＡＰ元の物理パーセルを示し、Ｖａｌｕｅは、ＳＷＡＰ先の物理パーセルを示す。Ｖａｌｕｅに対応するドライブが存在しない場合、Ｖａｌｕｅに「無効」に相当する値が格納される。
【０１２６】
また、ＳＷＡＰフラグ１４０６は、増設処理中に値が更新される。具体的には、ストレージコントローラ１００は、増設処理の実行中において、Ｉｎｄｅｘ＃に対応する物理パーセルがＳＷＡＰ対象であると判定した場合にそのＳＷＡＰフラグ１４０６をＯＮに設定し、その物理パーセルのデータＳＷＡＰ処理が終了した時点でそのＳＷＡＰフラグ１４０６をＯＦＦに設定する。
【０１２７】
図１７は、マッピング逆補正テーブルを示す。
【０１２８】
マッピング逆補正テーブル１００６は、Ｉｎｄｅｘとして、ＰＰＧ＃１４０７と、ＰＣＤＥＶ＃１４０８と、Ｐｃｙｃｌｅ＃１４０９とのフィールドを含み、対応するＶａｌｕｅとして、ＰＰＧ＃１４１０と、ＰＣＤＥＶ＃１４１１と、Ｐｃｙｃｌｅ＃１４１２とのフィールドを含む。
【０１２９】
マッピング逆補正テーブル１００６の各エントリにおいて、Ｉｎｄｅｘ＃は、マッピング補正テーブル１００５に示されたＳＷＡＰ先の物理パーセルを示し、Ｖａｌｕｅは、マッピング補正テーブル１００５に示されたＳＷＡＰ元の物理パーセルを示す。Ｉｎｄｅｘ＃に対応するドライブが存在しない場合は、当該ドライブに対応する物理パーセルのＩｎｄｅｘ＃に「無効」に相当する値が格納される。
【０１３０】
ストレージコントローラ１００は、マッピング補正テーブル１００５のエントリを設定すると、その情報を、マッピング逆補正テーブル１００６の対応するエントリに設定する。
【０１３１】
図１８は、単体増設処理の第１増設ケースを示す。
【０１３２】
ドライブ単位の増設処理を単体増設処理と呼ぶ。第１増設ケースは、ｃ＝４、Ｎ＝４の構成において、ＰＧ＝１、ドライブ数＝４の状態から、１台のドライブを増設し、ＰＧ＝２、ドライブ数＝５に変更する例を示す。
【０１３３】
Ｐ１は、ドライブ増設前の初期のマッピングパターンである現行マッピングパターンを示す。なお、この図の例は、簡単のため、一つのＰｃｈｕｎｋ周期５０５のみを記す。この状態においては、１台のドライブが閉塞した場合に、そのドライブのデータを復旧するためのＰＰＧ内の正常ドライブ内のスペア領域の数３が、閉塞したドライブ内のデータ領域の数４より少なくなる。そのため、Ｐ１の段階において、ストレージコントローラ１００は、まだデータを格納することができない。
【０１３４】
Ｐ２は、ドライブ増設直後の現行マッピングパターンを示す。この状態において現行マッピングパターンには、新規追加ドライブ１７０ｂ内の４個の物理パーセルと、Ｖｃｈｕｎｋ識別子“１−０”で示される１個の仮想チャンクが現行マッピングパターンに追加される。また、現行マッピングパターンは、追加された４個の物理パーセルを、追加された仮想チャンクに割り当てることを示す。当該仮想チャンクをＶＶＯＬページへ割り当てることを許可した場合、新規追加ドライブ１７０ｂが閉塞した時点で当該仮想チャンクに割り当てられたデータがロストしてしまう。そのため、Ｐ２の段階において、ストレージコントローラ１００は、新規追加ドライブ１７０ｂに対応する仮想チャンクをＶＶＯＬページへ割り当てることができない。
【０１３５】
なお、この図の例は、ｃ＝Ｎの場合であるため、ドライブ増設直後のＰ２において、増設対象ドライブ１７０ｂには一つのＶｃｈｕｎｋしか割り当てられていないが、ｃ＝ｋＮ（ｋは１以上の任意の整数）の場合、初期状態における増設対象ドライブ１７０ｂには、ｋ個のＶｃｈｕｎｋが割り当てられる。
【０１３６】
Ｐ２ａは、後述するパーセルリバランス処理を行う際の目標となるマッピングパターンである。以降当該マッピングパターンを「Ｇｏａｌマッピングパターン（或いは単にＧｏａｌマッピング、Ｇｏａｌとも呼称する）」と呼称する。当該Ｇｏａｌマッピングパターンは、ドライブ数＝Ｎ×｛増設後のＰＧ数｝の条件で生成されたマッピングパターンである。この図の例は、ＰＧ＝２、ドライブ数＝８の場合のＧｏａｌマッピングパターンを示す。Ｇｏａｌマッピングパターンの作成方法は、特許文献１に示された方法であってもよいし、その他のＰＧ単位で増設を行う分散ＲＡＩＤ方式のマッピング方式であっても良い。例えば、ストレージコントローラ１００は、疑似乱数の生成や予め設定された乱数テーブルに基づいて、仮想パーセルに割り当てる物理パーセルを決定することで、Ｇｏａｌマッピングパターンを生成してもよい。Ｇｏａｌマッピングパターンは、ストレージコントローラ１００に予め設定されていてもよい。Ｇｏａｌマッピングパターンによる、複数のドライブ１７０への仮想チャンクの配置は、Ｉ／Ｏの負荷を複数のドライブ１７０に最適に分散させる。また、リビルド処理を高速化するために適した配置となっている。
【０１３７】
その後、ストレージコントローラ１００は、Ｇｏａｌマッピングパターンのうち、増設後のドライブ台数に相当する範囲のマッピング情報１５００をもとに、後述の増設後マッピングパターン生成方法を用いて、Ｐ３のマッピングパターンを生成する。ストレージコントローラ１００は、このマッピングパターン生成後、マッピングパターンに従ってデータを移動させるデータＳＷＡＰ処理を行い、増設処理を完了する。但し、Ｐ３の状態では、まだデータが格納されていないので、実際のデータの移動は行われない。この状態は、ＰＧ単位で増設した場合と同じ冗長度を確保でき、どのドライブが故障してもそのドライブのデータをリビルドできる。ストレージコントローラ１００は、データＳＷＡＰ処理の完了後、増設対象ＤＧ２０７に対応する仮想チャンク内の全ＶＰＧページを、ＶＶＯＬページへ割り当てることを許可する。
【０１３８】
従来の分散ＲＡＩＤ方式における最小構成は、Ｐ１で述べた理由により、１個のＰＧでは運用できず、２個のＰＧになる。一方、本実施例の計算機システムの最小構成は、Ｐ２及びＰ３で示したように、１個のＰＧと１個のドライブになる。これにより、初期コストを低減できる。
【０１３９】
図１９は、第１増設ケースにおけるマッピングパターン生成方法の概念を示す。
【０１４０】
Ｐ２−０は初期の現行マッピングパターンを示す。Ｐ２ａはＧｏａｌマッピングパターンを示す。
【０１４１】
まず、ストレージコントローラ１００は、二つの物理パーセルである物理パーセルペアを選択し、現行マッピングパターンから二つの物理パーセルにそれぞれ対応付けられた二つのＶｃｈｕｎｋ識別子を取得し、二つのＶｃｈｕｎｋ識別子をＳＷＡＰした場合の両方のＶｃｈｕｎｋ識別子がＧｏａｌマッピングパターンと一致する物理パーセルペアを検索し、そのような物理パーセルペアが存在した場合、その物理パーセルペアをＳＷＡＰする。
【０１４２】
Ｐ２−１において、物理パーセル１６００ａは現行マッピングパターンではＶｃｈｕｎｋ識別子“１−０”に対応付けられており、ＧｏａｌマッピングパターンではＶｃｈｕｎｋ識別子“０−０”に対応付けられている。一方、物理パーセル１６００ｂは、現行マッピングパターンではＶｃｈｕｎｋ識別子“０−０”に対応付けられており、ＧｏａｌマッピングパターンではＶｃｈｕｎｋ識別子“１−１”に対応付けられている。従って、ストレージコントローラ１００は、当該物理パーセルペア（１６００ａ、１６００ｂ）をＳＷＡＰすることで、その両方に対応するＶｃｈｕｎｋ識別子をＧｏａｌマッピングパターンと一致させることが可能となるため、これをＳＷＡＰする。
【０１４３】
全物理パーセルに対してＰ２−１の条件を満たす物理パーセルペアをＳＷＡＰしても、２個以上の物理パーセルが同一のＶｃｈｕｎｋ識別子に対応するドライブ１７０が１つ以上存在する場合、ストレージコントローラ１００は、ＳＷＡＰ後の一方のＶｃｈｕｎｋ識別子だけがＧｏａｌマッピングパターンと一致する物理パーセルペアを検索し、そのような物理パーセルペアが存在した場合、その物理パーセルペアをＳＷＡＰする。
【０１４４】
Ｐ２−２の１回目において、物理パーセル１６０１ａは、現行マッピングパターンではＶｃｈｕｎｋ識別子“１−０”に対応付けられており、ＧｏａｌマッピングパターンではＶｃｈｕｎｋ識別子“１−１”に対応付けられている。一方、物理パーセル１６００ｂは、現行マッピングパターンではＶｃｈｕｎｋ識別子“０−１”に対応付けられており、ＧｏａｌマッピングパターンではＶｃｈｕｎｋ識別子“１−０”に対応付けられている。従って、ストレージコントローラ１００は、当該物理パーセルペア（１６０１ａ、１６０１ｂ）をＳＷＡＰすることで、物理パーセル１６０１ｂに対応するＶｃｈｕｎｋ識別子をＧｏａｌマッピングパターンと一致させることが可能となるため、これをＳＷＡＰする。
【０１４５】
同様にＰ２−２の２回目において、ストレージコントローラ１００は、物理パーセルペア（１６０２ａ、１６０２ｂ）をＳＷＡＰすることで、物理パーセル１６０２ａに対応するＶｃｈｕｎｋ識別子をＧｏａｌマッピングパターンと一致させることが可能となるため、これをＳＷＡＰする。
【０１４６】
なお、Ｐ２−１及びＰ２−２において、ストレージコントローラ１００は、ＳＷＡＰ前の何れかのＶｃｈｕｎｋ識別子がＧｏａｌマッピングパターンとしている一致する物理パーセルペアをＳＷＡＰ対象として選択しない。
【０１４７】
この図の例では、ストレージコントローラ１００は、Ｐ２−２の処理を行うことで増設後のマッピングパターンを生成することが可能となる。もし、全物理パーセルのうちＰ２−２の条件を満たす物理パーセルペアのＳＷＡＰを行っても、２個以上の物理パーセルが同一のＶｃｈｕｎｋ識別子に対応するドライブ１７０が１つ以上存在する場合、ストレージコントローラ１００は、ＳＷＡＰ後の両方のＶｃｈｕｎｋ識別子がＧｏａｌマッピングパターンと一致しない物理パーセルペアを検索し、その物理パーセルペアをＳＷＡＰする。
【０１４８】
なお、本処理においても、Ｐ２−２と同様に、ストレージコントローラ１００は、ＳＷＡＰ前の何れかのＶｃｈｕｎｋ識別子がＧｏａｌマッピングパターンと一致する物理パーセルをＳＷＡＰ対象として選択しない。ストレージコントローラ１００は、以上の処理によってＰ３の現行マッピングパターンを生成する。
【０１４９】
例えば特許文献１のような分散ＲＡＩＤシステムは、ドライブ数がＮの整数倍である場合を前提としているため、ドライブ数がＮの整数倍の場合、Ｉ／Ｏ時の負荷等の分散が最適化されるように設計されている。一方、本実施例の分散ＲＡＩＤシステムにおいて、ドライブ数がＮの整数倍でない場合は、Ｉ／Ｏ時の負荷等の分散がわずかながら最適化されない。
【０１５０】
しかし、本実施例のように、ストレージコントローラ１００が、Ｇｏａｌマッピングパターンを設定し、当該Ｇｏａｌマッピングパターンに出来るだけ一致するように現行マッピングパターンを生成することにより、ドライブ数がＮの整数倍でない場合の分散の効果を最適に近づけると共に、ドライブ数がＮの整数倍になった場合に最小の移動量で上記最適化の効果を得ることができる。
【０１５１】
図２０は、単体増設処理の第２増設ケースを示す。
【０１５２】
前述の第１増設ケースは、ドライブ数がＮの整数倍の場合からドライブ単位で増設を行った。この図の第２増設ケースのようにドライブ数がＮの整数倍でない場合からも、第１増設ケースと同様の方法によってドライブ単位の増設を実施することが可能である。
【０１５３】
Ｐ１は、増設前の現行マッピングパターンを示す。増設前のＤＧのドライブ数は、５であり、Ｎの整数倍ではない。Ｐ２に示すように、３台のドライブ１７０ｂを増設することで、増設後のドライブ数がＮの整数倍になる場合、前述のマッピング生成処理により、Ｐ３に示す増設後のマッピングパターンは、Ｐ２ａに示すＧｏａｌマッピングパターン１７００と完全に一致させることが可能となる。
【０１５４】
以下、ストレージコントローラ１００の動作の詳細について説明する。
【０１５５】
図２１は、単体増設処理を示す。
【０１５６】
単体増設処理プログラム１１０１は、ドライブ単位でドライブを増設する場合に単体増設処理を行う。管理者は、システムに対して増設用のドライブを追加した後、ＤＧに対するドライブ単位の増設指示を管理サーバ２０へ入力する。ストレージコントローラ１００は、その増設指示を管理サーバ２０から受領した契機で、単体増設処理を実行する。
【０１５７】
まず、単体増設処理プログラム１１０１は、増設ドライブの中から、任意の一台を対象ドライブとして選択する（ステップ１８０１）。ここで、ステップ１８０２〜１８０４をドライブ増設処理と呼ぶ。例えば、単体増設処理プログラム１１０１は、増設ドライブのうち、ドライブ増設処理を未実施のドライブから、システム内の物理的なドライブ＃が若い順に、対象ドライブを選んでもよい。
【０１５８】
次に、単体増設処理プログラム１１０１は、単体増設マッピング生成処理を実施する（ステップ１８０２）。単体増設マッピング生成処理については後述する。
【０１５９】
次に、単体増設処理プログラム１１０１は、単体増設パーセルリバランス処理を実施する（ステップ１８０３）。単体増設パーセルリバランス処理については後述する。
【０１６０】
次に、単体増設処理プログラム１１０１は、対象ドライブに対応するＶｃｈｕｎｋを仮想ボリュームへ割り当てることを許可する（ステップ１８０４）。
【０１６１】
なお、本図の例では、増設ドライブ全体のパーセルリバランス処理が完了した後に、増設ドライブ全体のデータ割当を許可しているが、単体ドライブ内の一定領域のパーセルリバランスが完了する毎に、当該領域のデータ割当を許可するようにしてもよい。
【０１６２】
次に、単体増設処理プログラム１１０１は、システムに対して追加した全増設ドライブに対してドライブ増設処理が完了しているかを判定する（ステップ１８０５）。全増設ドライブに対してドライブ増設処理が完了していない場合（ステップ１８０５でＮｏ）、単体増設処理プログラム１１０１は、ステップ１８０１に戻り、次の対象ドライブに対して同様の処理を実施し、全増設ドライブに対してドライブ増設処理が完了している場合（ステップ１８０５でＹｅｓ）は、処理を終了する。
【０１６３】
図２２は、単体増設マッピング生成処理を示す。
【０１６４】
単体増設マッピング生成処理プログラム１１０２は、前述の単体増設処理のステップ１８０２において、増設後のマッピングパターンを生成する単体増設マッピング生成処理を実行する。
【０１６５】
まず、単体増設マッピング生成処理プログラム１１０２は、増設前の現行マッピングパターン（Ｃｕｒｒｅｎｔ）を、マッピングパターン（Ｔａｒｇｅｔ）にコピーした後、Ｔａｒｇｅｔにおける増設ドライブ内のマッピングを生成する（ステップ１９０１）。本実施例において、周期Ｖｃｈｕｎｋ数ｃはＮの整数倍であるため、ｋを整数としてｃ＝ｋＮとした場合、増設ドライブには、スペア用パーセルを除き、Ｐｃｈｕｎｋ周期あたりｋＮ個の物理パーセルが作成される。前述の通り、増設ドライブ内のマッピングパターンを生成した時点では、当該増設ドライブが閉塞するとデータロストが発生してしまうため、当該増設ドライブに対応するＶｃｈｕｎｋを仮想ボリュームへ割り当てることはできない。
【０１６６】
次に、単体増設マッピング生成処理プログラム１１０２は、Ｇｏａｌマッピングパターン（Ｇｏａｌ）を生成する（ステップ１９０２）。Ｇｏａｌマッピングパターンは、目標となるマッピングパターンであり、ドライブ数＝Ｎ×｛増設後のＰＧ数｝の条件で生成されたマッピングパターンである。
【０１６７】
次に、単体増設マッピング生成処理プログラム１１０２は、ＳＷＡＰ後の二つのＶｃｈｕｎｋ識別子の両方がＧｏａｌと一致する物理パーセルペア（完全一致ペア）のＶｃｈｕｎｋ識別子をＳＷＡＰする完全一致ペアＳＷＡＰ処理を行う（ステップ１９０３）。完全一致ペアＳＷＡＰ処理の詳細は後述する。なお、Ｖｃｈｕｎｋ識別子のＳＷＡＰとは、マッピング補正テーブル及びマッピング逆補正テーブルの更新処理であり、実際の物理パーセルペアのデータのＳＷＡＰは、後述する単体増設パーセルリバランス処理で実施する。
【０１６８】
次に、単体増設マッピング生成処理プログラム１１０２は、一つのドライブ内の複数の物理パーセルが同一Ｖｃｈｕｎｋに割り当てられているか否かの判定を行う（ステップ１９０４）。一つのドライブ内の複数の物理パーセルが同一Ｖｃｈｕｎｋに割り当てられているドライブが存在しない場合（ステップ１９０４でＮｏ）、単体増設マッピング生成処理プログラム１１０２は、処理を終了する。
【０１６９】
一つのドライブ内の複数の物理パーセルが同一Ｖｃｈｕｎｋに割り当てられているドライブが１つ以上存在する場合（ステップ１９０４でＹｅｓ）、単体増設マッピング生成処理プログラム１１０２は、ＳＷＡＰ後の二つのＶｃｈｕｎｋ識別子の一方がＧｏａｌと一致する物理パーセルペア（部分一致ペア）のＶｃｈｕｎｋ識別子をＳＷＡＰする部分一致ペアＳＷＡＰ処理を行う（ステップ１９０５）。部分一致ペアＳＷＡＰ処理の詳細は後述する。
【０１７０】
次に、単体増設マッピング生成処理プログラム１１０２は、一つのドライブ内の複数の物理パーセルが同一Ｖｃｈｕｎｋに割り当てられているか否かの判定を行う（ステップ１９０６）。一つのドライブ内の複数の物理パーセルが同一Ｖｃｈｕｎｋに割り当てられているドライブが存在しない場合（ステップ１９０６でＮｏ）、単体増設マッピング生成処理プログラム１１０２は、処理を終了する。
【０１７１】
一つのドライブ内の複数の物理パーセルが同一Ｖｃｈｕｎｋに割り当てられているドライブが１つ以上存在する場合（ステップ１９０６でＹｅｓ）、単体増設マッピング生成処理プログラム１１０２は、ＳＷＡＰ後の二つのＶｃｈｕｎｋ識別子の両方がＧｏａｌと一致しない物理パーセルペア（不一致ペア）のＶｃｈｕｎｋ識別子をＳＷＡＰする不一致ペアＳＷＡＰ処理を行う（ステップ１９０７）。不一致ペアＳＷＡＰ処理の詳細は後述する。
【０１７２】
図２３は、完全一致ペアＳＷＡＰ処理を示す。
【０１７３】
完全一致ペアＳＷＡＰ処理プログラム１１０３は、前述の単体増設マッピング生成処理のステップ１９０３において、完全一致ペアＳＷＡＰ処理を行う。
【０１７４】
まず、完全一致ペアＳＷＡＰ処理プログラム１１０３は、第１物理パーセルを選択する（ステップ２００１）。第１物理パーセルを選択する方法は、例えば対象ＤＧ内で、ＰＰＧ＃、ＰＣＤＥＶ＃、Ｐｃｙｃｌｅ＃の若い物理パーセルから順に選択する。以下では、第１物理パーセルを、（ＰＰＧ＃，ＰＣＤＥＶ＃，Ｐｃｙｃｌｅ＃）＝（ａ０，ｂ０，ｃ０）と置く。また、以下では、マッピングパターンＸＸＸのうち（ＰＰＧ＃，ＰＣＤＥＶ＃，Ｐｃｙｃｌｅ＃）＝（Ａ，Ｂ，Ｃ）の物理パーセルに対応するＶｃｈｕｎｋ識別子を、ＸＸＸ（Ａ，Ｂ，Ｃ）と呼ぶ（例えばＴａｒｇｅｔ（ａ０，ｂ０，ｃ０））。
【０１７５】
次に、完全一致ペアＳＷＡＰ処理プログラム１１０３は、ステップ２００１で選択した第１物理パーセルと対象ペアを成す物理パーセルである第２物理パーセルを選択する（ステップ２００２）。第２物理パーセルを選択する方法は、例えば対象ＤＧ内で、ステップ２００１で選択した第１物理パーセルを除き、ＰＰＧ＃、ＰＣＤＥＶ＃、Ｐｃｙｃｌｅ＃の若い物理パーセルから順に選択する。以下では、第２物理パーセルを、（ＰＰＧ＃，ＰＣＤＥＶ＃，Ｐｃｙｃｌｅ＃）＝（ａ１，ｂ１，ｃ１）と置く。
【０１７６】
次に、完全一致ペアＳＷＡＰ処理プログラム１１０３は、Ｔａｒｇｅｔから、Ｔａｒｇｅｔ（ａ０，ｂ０，ｃ０）であるＶｔ０と、Ｔａｒｇｅｔ（ａ１，ｂ１，ｃ１）であるＶｔ１とを取得し、Ｇｏａｌから、Ｇｏａｌ（ａ０，ｂ０，ｃ０）であるＶｇ０と、及びＧｏａｌ（ａ１，ｂ１，ｃ１）であるＶｇ１とを取得する（ステップ２００３）。
【０１７７】
次に、完全一致ペアＳＷＡＰ処理プログラム１１０３は、Ｖｔ０とＶｔ１が一致しているか否かを判定する（ステップ２００４）。Ｖｔ０とＶｇ１が一致している場合（ステップ２００４でＮｏ）、対象ペアをＳＷＡＰしてもマッピングパターン上は何も変更がないため、完全一致ペアＳＷＡＰ処理プログラム１１０３は、ステップ２００２に戻り、第２物理パーセルを再選択する。
【０１７８】
次に、完全一致ペアＳＷＡＰ処理プログラム１１０３は、Ｖｔ０とＶｇ１が一致し、かつＶｔ１とＶｇ０が一致しているか否かを判定する（ステップ２００５）。Ｖｔ０とＶｇ１が一致することと、Ｖｔ１とＶｇ０が一致することとの少なくとも何れかが成立しない場合（ステップ２００５でＮｏ）、対象ペアが完全一致ペアでないため、完全一致ペアＳＷＡＰ処理プログラム１１０３は、ステップ２００２に戻り、第２物理パーセルを再選択する。
【０１７９】
Ｖｔ０とＶｇ１が一致し、かつＶｔ１とＶｇ０が一致している場合（ステップ２００５でＹｅｓ）、完全一致ペアＳＷＡＰ処理プログラム１１０３は、Ｖｃｈｕｎｋ重複判定を行う（ステップ２００６）。あるドライブ内の複数の物理パーセルが同一Ｖｃｈｕｎｋに対応する場合、当該Ｖｃｈｕｎｋの冗長度が低下してしまうため、ストレージコントローラ１００は、Ｖｃｈｕｎｋ識別子のＳＷＡＰを行う際、ＳＷＡＰ後の一つのドライブに対応するＶｃｈｕｎｋ識別子が重複しないようにする。言い換えれば、Ｖｃｈｕｎｋ重複判定において、完全一致ペアＳＷＡＰ処理プログラム１１０３は、マッピング条件を満たす場合、あるドライブ内の複数の物理パーセルが同一Ｖｃｈｕｎｋに対応しないと判定する。
【０１８０】
具体的には、Ｔａｒｇｅｔにて、Ｔａｒｇｅｔ（ａ０，ｂ０，＊）の全てがＶｇ１と不一致であり、かつＴａｒｇｅｔ（ａ１，ｂ１，＊）の全てがＶｇ０と不一致であるか否かを判定する。Ｔａｒｇｅｔ（ａ０，ｂ０，＊）は、ＰＰＧ＃がａ０で、ＰＣＤＥＶ＃がＢ０である、全Ｐｃｙｃｌｅ＃に対応するＶｃｈｕｎｋ識別子を示す。Ｔａｒｇｅｔ（ａ０，ｂ０，＊）の何れかがＶｇ１と一致することと、かつＴａｒｇｅｔ（ａ１，ｂ１，＊）の何れかがＶｇ０と一致することとの何れかが成立した場合（ステップ２００６でＮｏ）、完全一致ペアＳＷＡＰ処理プログラム１１０３は、ステップ２００２に戻り、第２物理パーセルを再選択する。
【０１８１】
Ｔａｒｇｅｔ（ａ０，ｂ０，＊）の全てがＶｇ１と不一致であり、かつＴａｒｇｅｔ（ａ１，ｂ１，＊）の全てがＶｇ０と不一致である場合、完全一致ペアＳＷＡＰ処理プログラム１１０３は、Ｔａｒｇｅｔ（ａ０，ｂ０，ｃ０）とＴａｒｇｅｔ（ａ１，ｂ１，ｃ１）をＳＷＡＰする（ステップ２００７）。具体的には、完全一致ペアＳＷＡＰ処理プログラム１１０３は、マッピング補正テーブル１００５及びマッピング逆補正テーブル１００６において、Ｉｎｄｅｘ＃が（ａ０，ｂ０，ｃ０）であるエントリにおけるＶａｌｕｅを（ａ１，ｂ１，ｃ１）に設定し、Ｉｎｄｅｘ＃が（ａ１，ｂ１，ｃ１）であるエントリにおけるＶａｌｕｅを（ａ０，ｂ０，ｃ０）に設定する。更に、完全一致ペアＳＷＡＰ処理プログラム１１０３は、マッピング補正テーブル１００５において、第１物理パーセルのエントリのＳＷＡＰフラグをＯＮに設定する。
【０１８２】
次に、完全一致ペアＳＷＡＰ処理プログラム１１０３は、対象ＤＧ内の全物理パーセルに対してステップ２００１〜ステップ２００７の処理を実施済みかの判定を行う（ステップ２００８）。当該処理を未実施の物理パーセルが存在する場合（ステップ２００８でＮｏ）、完全一致ペアＳＷＡＰ処理プログラム１１０３は、ステップ２００１に戻り、次の第１物理パーセルを選択し、処理を継続する。未実施の物理パーセルが存在しない場合（ステップ２００８でＹｅｓ）、完全一致ペアＳＷＡＰ処理プログラム１１０３は、処理を終了する。
【０１８３】
図２４は、部分一致ペアＳＷＡＰ処理を示す。
【０１８４】
部分一致ペアＳＷＡＰ処理プログラム１１０４は、前述の単体増設マッピング生成処理のステップ１９０５において、部分一致ペアＳＷＡＰ処理を行う。
【０１８５】
部分一致ペアＳＷＡＰ処理におけるステップ２１０１〜ステップ２１０４は、完全一致ペアＳＷＡＰ処理におけるステップ２００１〜ステップ２００４とそれぞれ同様であるため、説明を省略する。
【０１８６】
ステップ２１０４でＹＥＳと判定された場合、部分一致ペアＳＷＡＰ処理プログラム１１０４は、Ｖｔ０とＶｇ０が不一致であり、かつＶｔ１とＶｇ１が不一致であるかを判定する（ステップ２１０５）。Ｖｔ０とＶｇ０が一致していることと、Ｖｔ１とＶｇ１が一致していることとの少なくとも何れかが成立する場合（ステップ２１０５でＮｏ）、少なくとも一方の物理パーセルのＴａｒｇｅｔとＧｏａｌが一致していることになるため、対象ペアは、ＳＷＡＰ不要であり、部分一致ペアＳＷＡＰ処理プログラム１１０４は、ステップ２１０２に戻り、第２物理パーセルを再選択する。
【０１８７】
Ｖｔ０とＶｇ０が不一致であり、かつＶｔ１とＶｇ１が不一致である場合（ステップ２１０５でＹｅｓ）、部分一致ペアＳＷＡＰ処理プログラム１１０４は、Ｖｔ０とＶｇ１が一致している、またはＶｔ１とＶｇ０が一致しているかを判定する（ステップ２１０６）。なお、Ｖｔ０とＶｇ１が一致している、かつＶｔ１とＶｇ０が一致しているペアは、すでに完全一致ペアＳＷＡＰ処理にてＳＷＡＰ済みであるため、ステップ２１０６の時点では存在しない。
【０１８８】
Ｖｔ０とＶｇ１が不一致で、かつＶｔ１とＶｇ０が不一致である場合（ステップ２１０６でＮｏ）、対象ペアが部分一致ペアでないため、部分一致ペアＳＷＡＰ処理プログラム１１０４は、ステップ２１０２に戻り、ＳＷＡＰペアパーセルを再選択する。
【０１８９】
Ｖｔ０とＶｇ１が一致する、またはＶｔ１とＶｇ０が一致する場合（ステップ２１０６でＹｅｓ）、部分一致ペアＳＷＡＰ処理プログラム１１０４は、以降のステップ２１０７〜ステップ２１０９の処理を実施する。これらの処理は、完全一致ペアＳＷＡＰ処理におけるステップ２００６〜ステップ２００８とそれぞれ同様であるため、説明を省略する。
【０１９０】
図２５は、不一致ペアＳＷＡＰ処理を示す。
【０１９１】
不一致ペアＳＷＡＰ処理プログラム１１０５は、前述の単体増設マッピング生成処理のステップ１９０７において、不一致ペアＳＷＡＰ処理を行う。
【０１９２】
不一致ペアＳＷＡＰ処理におけるステップ２２０１〜ステップ２２０８は、完全一致ペアＳＷＡＰ処理におけるステップ２００１〜ステップ２００５及びステップ２００６、ステップ２００７とそれぞれ同様であるため、説明を省略する。
【０１９３】
次に、不一致ペアＳＷＡＰ処理プログラム１１０５は、一つのドライブ内の複数の物理パーセルに同一Ｖｃｈｕｎｋ識別子が割り当てられているか否かの判定を行う（ステップ２２０８）。一つのドライブ内の複数の物理パーセルに同一Ｖｃｈｕｎｋ識別子が割り当てられているドライブが１つ以上存在する場合（ステップ２２０８でＹｅｓ）、不一致ペアＳＷＡＰ処理プログラム１１０５は、ステップ２２０１に戻り、この状態がなくなるまで繰り返す。一つのドライブ内の複数の物理パーセルに同一Ｖｃｈｕｎｋ識別子が割り当てられているドライブが存在しない場合（ステップ２２０８でＮｏ）、不一致ペアＳＷＡＰ処理プログラム１１０５は、処理を終了する。
【０１９４】
以上の単体増設マッピング生成処理によれば、ストレージコントローラ１００は、完全一致ペアＳＷＡＰ処理、部分一致ペアＳＷＡＰ処理、不一致ペアＳＷＡＰ処理を行うことにより、マッピング条件を満たし、且つＧｏａｌマッピングパターンに近いＴａｒｇｅｔを作成することができ、ＧｏａｌマッピングパターンとＴａｒｇｅｔの間の差分を表すマッピング補正テーブル１００５及びマッピング逆補正テーブル１００６を作成することができる。
【０１９５】
なお、完全一致ペアＳＷＡＰ処理、部分一致ペアＳＷＡＰ処理、不一致ペアＳＷＡＰ処理において、ストレージコントローラ１００は、物理パーセルを順次選択する代わりに、仮想チャンクや仮想パーセルを順次選択してもよい。
【０１９６】
図２６は、単体増設パーセルリバランス処理を示す。
【０１９７】
単体増設パーセルリバランス処理プログラム１１０６は、前述の単位増設処理のＳ１８０５において、単体増設パーセルリバランス処理を行う。単体増設パーセルリバランス処理は、後述のデータＳＷＡＰ処理を実行することで、現行マッピングパターン（Ｃｕｒｒｅｎｔ）で示されたデータの配置を、目標マッピングパターン（Ｔａｒｇｅｔ）で示されたデータの配置に変更する。
【０１９８】
まず、単体増設パーセルリバランス処理プログラム１１０６は、増設対象のＤＧ内の一つの物理パーセルを対象物理パーセルとして順次選択する（ステップ２３０１）。例えば、単体増設パーセルリバランス処理プログラム１１０６は、ＤＧ内の全ドライブ内の物理パーセルのうち、システム内の物理ドライブ＃、Ｐｃｙｃｌｅ＃が若いものから順に、データＳＷＡＰ処理が未実施である物理パーセルを、対象物理パーセルとして選べばよい。
【０１９９】
次に、単体増設パーセルリバランス処理プログラム１１０６は、対象物理パーセルがＳＷＡＰ対象であるかを判定する（ステップ２３０２）。具体的には、マッピング補正テーブル１００５を参照し、Ｉｎｄｅｘ＃が対象物理パーセルであるエントリのＳＷＡＰフラグを参照し、これがＯＮであるかを判定する。対象物理パーセルのＳＷＡＰフラグがＯＮである場合、対象物理パーセルがＳＷＡＰ対象であることを意味する。この場合、対象物理パーセルと、そのエントリのＶａｌｕｅに示されたＳＷＡＰ先物理パーセルとのペアをＳＷＡＰ対象ペアとする。対象物理パーセルがＳＷＡＰ対象であると判定された場合（ステップ２３０２でＹｅｓ）、単体増設パーセルリバランス処理プログラム１１０６は、ＳＷＡＰ対象ペアが割り当てられている二つのＶｃｈｕｎｋを対象Ｖｃｈｕｎｋペアとして選択し、対象Ｖｃｈｕｎｋペア内の仮想ストライプを対象ストライプペアとして順に選択する（ステップ２３０３）。
【０２００】
次に、単体増設パーセルリバランス処理プログラム１１０６は、対象ストライプペアに対するデータＳＷＡＰ処理を実施する（ステップ２３０４）。データＳＷＡＰ処理は、特許文献１に示されている処理と同様である。データＳＷＡＰ処理は、対象ストライプペアの少なくとも一つが有効データを格納している場合、対象ストライプペアの間でデータを入れ替える。例えば、データＳＷＡＰ処理は、対象ストライプペアの少なくとも一つの仮想ストライプがＶＶＯＬページに割り当てられている場合、Ｃｕｒｒｅｎｔにおいて当該仮想ストライプに対応する物理ストライプから、当該ＶＶＯＬページに対応する対象キャッシュスロットへデータをステージングし、対象キャッシュスロットのデステージ（ＣＭ１３１からドライブ１７０への書き込み）を抑止し、対象キャッシュスロットをダーティに設定する。データＳＷＡＰ処理後にデステージ抑止を解除されると、対象キャッシュスロットに格納されたデータは、非同期で、Ｔａｒｇｅｔにおいて当該仮想ストライプに対応する物理ストライプへデステージされる。
【０２０１】
次に、単体増設パーセルリバランス処理プログラム１１０６は、対象物理パーセル内に、データＳＷＡＰ処理が行われていないストライプ（未ＳＷＡＰ領域）が存在するかを判定する（ステップ２３０５）。未ＳＷＡＰ領域が存在する場合（ステップ２３０５でＮｏ）、単体増設パーセルリバランス処理プログラム１１０６は、ステップ２３０３に戻り、対象物理パーセル内の次の物理ストライプに対して同様の処理を実施する。
【０２０２】
未ＳＷＡＰ領域が存在しないと判定された場合（ステップ２３０５でＹｅｓ）、または対象物理パーセルがＳＷＡＰ対象でないと判定された場合（ステップ２３０２でＮｏ）、単体増設パーセルリバランス処理プログラム１１０６は、ＳＷＡＰポインタテーブル１００４内の対象ＤＧの単体増設用ＳＷＡＰポインタ１３０８を次の物理パーセルに更新する（ステップ２３０６）。
【０２０３】
なお、当該ＳＷＡＰポインタは、対象物理パーセルのＳＷＡＰが完了した段階で更新されてもよいし、一定領域のＳＷＡＰが完了した段階で更新されてもよい。
【０２０４】
次に単体増設パーセルリバランス処理プログラム１１０６は、マッピング補正テーブル１００５においてＩｎｄｅｘ＃が対象物理パーセルであるエントリのＳＷＡＰフラグをＯＦＦに設定する（２３０７）。
【０２０５】
次に、単体増設パーセルリバランス処理プログラム１１０６は、ステップ２３０４でデステージ抑止を施されていた対象キャッシュスロットのデステージ抑止を解除する（ステップ２３０８）。
【０２０６】
次に、単体増設パーセルリバランス処理プログラム１１０６は、増設対象のＤＧ内の全物理パーセルを対象物理パーセルとして選択したか否かを判定する（ステップ２３０９）。未選択である物理パーセルが存在する場合（ステップ２３０９でＮｏ）、単体増設パーセルリバランス処理プログラム１１０６は、ステップ２３０１に戻って、次の対象物理パーセルを選択する。
【０２０７】
なお、ＳＷＡＰ対象物理パーセルは、Ｉ／Ｏ処理等に応じて任意に決定してもよい。データＳＷＡＰ処理を実施していない領域に対しては、通常、データ割当を行うことはできないが、例えばホストからＷｒｉｔｅ要求を受けた領域に対応する物理パーセルのデータＳＷＡＰ処理を優先的に行うことで増設領域に対して即時データ割当可能としてもよい。
【０２０８】
この場合、対象領域のデータＳＷＡＰ処理中は、キャッシュメモリ上にダーティデータとして当該Ｗｒｉｔｅデータを保持しておき、対象領域のデータＳＷＡＰ処理が完了した時点でドライブに対するデステージを許可すればよい。
【０２０９】
未選択である物理パーセルが存在しない場合（ステップ２３０９でＹｅｓ）、単体増設パーセルリバランス処理プログラム１１０６は、ＣｕｒｒｅｎｔをＴａｒｇｅｔに置き換え（ステップ２３１０）、処理を終了する。
【０２１０】
以上の単体増設パーセルリバランス処理によれば、ストレージコントローラ１００は、ＳＷＡＰ対象の物理パーセルに対応するＶｃｈｕｎｋに有効データが格納されている場合、Ｃｕｒｒｅｎｔに基づいて、当該Ｖｃｈｕｎｋに対応する物理パーセルから有効データを読み出し、Ｔａｒｇｅｔに基づいて、当該Ｖｃｈｕｎｋに対応する物理パーセルへ有効データを書き込む。これにより、ストレージコントローラ１００は、ＣｕｒｒｅｎｔからＴａｒｇｅｔへのマッピングパターンの変更に合わせて、データを移動させることができる。
【０２１１】
図２７は、ページ割当処理の概念を示す。
【０２１２】
この図は、ＶＶＯＬ数＝４、ｃ＝４、Ｎ＝４、ＰＧ＝３、ドライブ数＝９の例を示している。即ち、ドライブ数は、Ｎの倍数ではない。ＶＶＯＬ２０１内のＶＶＯＬページ２０２には、ＶＰＧ２０４のＶＰＧページ２０３が割り当てられる。この図の例では、Ｖｃｈｕｎｋあたり２個のＶＶＯＬページ２０２を割り当てているが、一つのＶｃｈｕｎｋあたりのＶＶＯＬページ割当数は、システムで定義されているページサイズと、パーセルのサイズによって可変である。
【０２１３】
この図の例において、ＶＰＧ＃２は、ＰＰＧ内ドライブ数がＮではないＰＰＧに対応するため、ページ割当が不可能なＶｃｈｕｎｋを含む。この図の例では、ＶＰＧ＃２のＶｃｈｕｎｋ＃１〜＃３、及び＃５〜＃７内のＶＰＧページをＶＶＯＬページに割り当てることはできない。一方、ＶＰＧ＃２のＶｃｈｕｎｋ＃０、＃４内のＶＰＧページはＶＶＯＬページに割り当てることができる。
【０２１４】
図２８は、ページ割当処理を示す。
【０２１５】
ページ割当処理プログラム１１０７は、ホスト１０からのライト処理の一環として、ライトの対象ＶＶＯＬページにＶＰＧページが未割当であった場合に、ページ割当処理を実行する。
【０２１６】
ページ割当処理プログラム１１０７は、ページマッピングテーブル１００３に基づいて、対象ＶＶＯＬページにＶＰＧページが割当済か未割当かの判定を行う。対象ＶＶＯＬページにＶＰＧページが未割当である場合、ページマッピングテーブル１００３のＶＰＧ＃１３０３フィールドに、“未割当”、または“Ｎｏｔ−Ａｌｌｏｃａｔｅ”などの情報が格納されているため、ページ割当処理プログラム１１０７は、対象ページが未割当かどうかを判定できる。システムの初期状態（仮想ボリューム２０１に対して一度もホストＩ／Ｏが実行されていない状態）では、その仮想ボリューム２０１内の全てのページが“未割当（Ｎｏｔ−Ａｌｌｏｃａｔｅ）”である。
【０２１７】
まず、ページ割当処理プログラム１１０７は、対象ＤＧ＃を取得する（ステップ２５０１）。対象ＤＧを選ぶ方法は、例えば、対象プール２００の高Ｔｉｅｒ（性能が高い）順に、空きページがあるかを判定し、空きページのあるＴｉｅｒ２０６について、最もページの使用率が少ないＤＧ２０７を、対象ＤＧとして選択する、又は、単位時間あたりで最もＩ／Ｏ負荷の低いＤＧ２０７や、利用率の最も低いＤＧ２０７や、空き容量の最も多いＤＧ２０７を、対象ＤＧとして選択する。
【０２１８】
ＤＧ２０７を選択した後、ページ割当処理プログラム１１０７は、対象ＶＰＧ＃を取得する（ステップ２５０２）。対象ＶＰＧを選ぶ方法は、例えば利用率の最も低いＶＰＧを、対象ＶＰＧとして選択する、又は、ＶＶＯＬ毎に、割当優先度をＶＰＧに設定し、割当優先度が最も高いＶＰＧを、対象ＶＰＧとして選択する。
【０２１９】
次に、ページ割当処理プログラム１１０７は、プール管理テーブル１００１を参照することにより、対象ＶＰＧが対象ＤＧ内に実装されているか否かを判定する（ステップ２５０３）。
【０２２０】
対象ＶＰＧが対象ＤＧ内に実装されていない場合（ステップ２５０３でＮＯ）、ページ割当処理プログラム１１０７は、ステップ２５０２に戻り、異なる対象ＶＰＧ＃を選択して、再度ステップ２５０３の判定を実施する。
【０２２１】
対象ＶＰＧが対象ＤＧ内に実装されている場合（ステップ２５０３でＹＥＳ）、ページ割当処理プログラム１１０７は、対象ＶＰＧに空きページが存在するかどうかの判定を行う（ステップ２５０４）。ここでページ割当処理プログラム１１０７は、ページマッピングテーブル１００３を参照し、対象ＶＰＧに未割当のＶＰＧページ１３０４が存在するかを判定する。
【０２２２】
空きページが存在しない場合（ステップ２５０４でＮＯ）、ページ割当処理プログラム１１０７は、ステップ２５０２に戻り、異なる対象ＶＰＧ＃を選択して、再度ステップ２５０３、及びステップ２５０４の判定を実施する。空きページが存在する場合（ステップ２５０４でＹＥＳ）、ページ割当処理プログラム１１０７は、対象ＶＰＧ内から対象ＶＰＧページを選択する（ステップ２５０５）。対象ＶＰＧページを選ぶ方法は、例えば対象ＶＰＧ内の空きページのうち、最もＶＰＧページ＃の若いページを、対象ＶＰＧページとして選択する。
【０２２３】
ページ割当処理プログラム１１０７は、以上の処理を対象ＤＧ内の全ＶＰＧに対して実行しても対象ＶＰＧページを選択できなかった場合（ステップ２５０６でＮＯ）、ページ割当処理の指示元に割当不可を応答（ステップ２５０８）し、処理を終了する。
【０２２４】
対象ＶＰＧページを選択できた場合（ステップ２５０６でＹＥＳ）、対象ＶＰＧページをＶＶＯＬページに割り当てるために、ページ割当処理プログラム１１０７は、ページマッピングテーブル内の対象ＶＶＯＬページのエントリに対象ＶＰＧページを登録し（ステップ２５０７）処理を終了する。
【０２２５】
以上のページ割当処理によれば、ストレージコントローラ１００は、必要なＶＰＧページをＶＶＯＬページへ割り当てることで、ＶＰＧ空間を効率的に利用することができる。また、ホストアクセスのデータの単位と、分散ＲＡＩＤの単位とを一致させる必要がないため、ホストアクセスと分散ＲＡＩＤのそれぞれを効率よく行うことができる。
【０２２６】
なお、ストレージコントローラ１００は、ＶＶＯＬ空間の代わりにＶＰＧ空間をホスト１０へ提供してもよい。この場合、ストレージコントローラ１００は、ページマッピングテーブルを用いなくてもよい。
【０２２７】
図２９は、ＬＰ変換処理を示す。
【０２２８】
ＬＰ（Ｌｏｇｉｃａｌ−Ｐｈｙｓｉｃａｌ）変換処理は、ＬＰ変換処理プログラム１１０８により実行される。ＬＰ変換は、論理記憶領域のアドレスから物理記憶領域のアドレスへの変換処理である。ＬＰ変換処理は、ホスト１０からＩ／Ｏ要求を受領した場合のページ変換処理などから呼び出される。ページ変換処理は、Ｉ／Ｏ要求により指定された仮想ボリューム内のアドレスを、ＶＰＧ空間のアドレスに変換する。ＬＰ変換処理は、指定された仮想的なアドレスであるＶＰＧ空間のアドレス（ＶＰＧ＃、ＶＣＤＥＶ＃、Ｖｃｈｕｎｋ＃）を、物理的なデータの格納先であるＰＰＧ空間のアドレス（ＰＰＧ＃、ＰＣＤＥＶ＃、Ｐｃｈｕｎｋ＃）に変換する。ここでは、指定されたＶＰＧ空間のアドレスで示される領域を対象論理記憶領域と呼び、変換後のＰＰＧ空間のアドレスで示される領域を対象物理記憶領域と呼ぶ。
【０２２９】
まず、ＬＰ変換処理プログラム１１０８は、Ｖｃｈｕｎｋ＃から、Ｖｃｙｃｌｅ＃を算出する（ステップ２６０１）。Ｖｃｙｃｌｅ＃は、Ｖｃｙｃｌｅ＃  ＝  Ｖｃｈｕｎｋ＃  ｍｏｄ  ｃで算出できる。
【０２３０】
次に、ＬＰ変換処理プログラム１１０８は、ＶＰ（Ｖｉｒｔｕａｌ−Ｐｈｙｓｉｃａｌ）変換処理を実行する（ステップ２６０２）。ＶＰ変換処理は、例えば特許文献１に示された方法を用いる。例えばＶＰ変換処理において、ＬＰ変換処理プログラム１１０８は、Ｇｏａｌマッピングパターン（ＶＣＤＥＶマッピングテーブル１００７、及びＶｃｙｃｌｅマッピングテーブル１００８）を参照することにより、当該ＶＰＧ＃、ＶＣＤＥＶ＃、Ｖｃｙｃｌｅ＃に対応するレギュラーＰＰＧ空間アドレスを算出する。レギュラーＰＰＧ空間アドレスは、ＤＧ内のドライブ数がＮの整数倍であり、かつ何れのドライブも故障していない場合の、ＶＰＧ＃、ＶＣＤＥＶ＃、Ｖｃｙｃｌｅ＃に対応するＰＰＧ＃、ＰＣＤＥＶ＃、Ｐｃｙｃｌｅ＃であり、マッピング補正テーブル１００５による補正前のＰＰＧ空間アドレスである。
【０２３１】
次に、ＬＰ変換処理プログラム１１０８は、マッピング補正テーブル１００５を参照し、ステップ２６０２で算出したＰＰＧ＃、ＰＣＤＥＶ＃、Ｐｃｙｃｌｅ＃を補正する（ステップ２６０３）。マッピング補正処理の詳細については後述する。
【０２３２】
次に、ＬＰ変換処理プログラム１１０８は、ドライブ状態管理テーブル１００２を参照し、対象ドライブ、即ちステップ２６０３で算出したＰＰＧ＃及びＰＣＤＥＶ＃に対応するドライブの状態１２０７を取得する（ステップ２６０４）。ＬＰ変換処理プログラム１１０８は、対象ドライブの状態１２０７が“アクセス不可“となっているかどうかを判定する（ステップ２６０５）。
【０２３３】
対象ドライブの状態１２０７が“アクセス不可“となっている場合（ステップ２６０５でＹＥＳ）、当該データはスペア領域に退避されている。したがって、ＬＰ変換処理プログラム１１０８は、スペア先のアドレスを算出する。この場合、ＬＰ変換処理プログラム１１０８は、仮想スペア管理テーブル１０１２から、当該ＰＰＧ＃及びＰＣＤＥＶ＃に対応するＶＳＤ＃（仮想スペアドライブ５０２の識別子）を取得する（ステップ２６０６）。
【０２３４】
次に、ＬＰ変換処理プログラム１１０８は、スペア変換処理を実行する（ステップ２６０７）。ここでＬＰ変換処理プログラム１１０８は、スペア変換テーブル１０１０を参照し、当該Ｐｃｙｃｌｅ＃及びステップ２６０６で算出したＶＳＤ＃から、対応するスペア領域のＰＰＧ＃、ＰＣＤＥＶ＃、Ｐｃｙｃｌｅ＃を取得する。その後、ＬＰ変換処理プログラム１１０８は、当該算出したＰＰＧ＃、ＰＣＤＥＶ＃、Ｐｃｙｃｌｅ＃について、再度ステップ２６０４を行う。スペア先が更にスペア領域に退避されている場合、ＬＰ変換処理プログラム１１０８は、ステップ２６０６、２６０７を繰り返す。
【０２３５】
対象ドライブの状態１２０７が“正常”、即ちアクセス可能である場合（ステップ２６０５でＮＯ）、レギュラー物理アドレスのＰＰＧ＃、ＰＣＤＥＶ＃、Ｐｃｙｃｌｅ＃はデータの格納先として使用されている。したがって、ＬＰ変換処理プログラム１１０８は、レギュラー物理アドレスからＰｃｈｕｎｋ＃を算出（ステップ２６０８）して処理を終了する。当該Ｐｃｈｕｎｋ＃は、Ｐｃｈｕｎｋ＃  ＝  Ｆｌｏｏｒ（Ｖｃｈｕｎｋ＃／ｃ）＊（ｃ＋１）＋Ｐｃｙｃｌｅ＃で算出できる。
【０２３６】
なお、スペア用Ｐｃｈｕｎｋがｍ個（ｍは１以上の整数）の場合、当該Ｐｃｈｕｎｋ＃は、Ｐｃｈｕｎｋ＃  ＝  Ｆｌｏｏｒ（Ｖｃｈｕｎｋ＃／ｃ）＊（ｃ＋ｍ）＋Ｐｃｙｃｌｅ＃で算出できる。
【０２３７】
図３０は、ＰＬ変換処理を示す。
【０２３８】
ＰＬ（Ｐｈｙｓｉｃａｌ−Ｌｏｇｉｃａｌ）変換処理は、ＰＬ変換処理プログラム１１０９により実行される。ＰＬ変換は、物理記憶領域から、論理記憶領域への変換処理である。ＰＬ変換は、例えば、リビルド処理で故障した物理記憶領域に対応するデータを特定するためなどに用いられる処理である。ＰＬ変換は、指定された物理的なデータの格納先であるＰＰＧ空間のアドレス（ＰＰＧ＃、ＰＣＤＥＶ＃、Ｐｃｈｕｎｋ＃）を、仮想的なアドレスであるＶＰＧ空間のアドレス（ＶＰＧ＃、ＶＣＤＥＶ＃、Ｖｃｈｕｎｋ＃）に変換する。ＰＬ変換は、ＬＰ変換の逆変換に相当する。つまり、ＬＰ変換を実施した後に、その結果でＰＬ変換を実施すると、同じアドレスが返却されることになる。また、逆も同じである。ここでは、指定されたＰＰＧ空間のアドレスで示される領域を対象物理記憶領域と呼び、変換後のＶＰＧ空間のアドレスで示される領域を対象論理記憶領域と呼ぶ。
【０２３９】
以下では、Ｐｃｈｕｎｋ周期５０５あたりのスペア用Ｐｃｈｕｎｋ５０１ｂ数ｍを１とした場合の例を示す。
【０２４０】
まず、ＰＬ変換処理プログラム１１０９は、Ｐｃｈｕｎｋ＃から、Ｐｃｙｃｌｅ＃を算出する（ステップ２７０１）。Ｐｃｙｃｌｅ＃は、Ｐｃｙｃｌｅ＃  ＝  Ｐｃｈｕｎｋ＃  ｍｏｄ  （ｃ＋１）で算出できる。
【０２４１】
なお、スペア用Ｐｃｈｕｎｋがｍ個（ｍは１以上の整数）の場合、当該Ｐｃｙｃｌｅ＃は、Ｐｃｙｃｌｅ＃  ＝  Ｐｃｈｕｎｋ＃  ｍｏｄ  （ｃ＋ｍ）で算出できる。
【０２４２】
次に、ＰＬ変換処理プログラム１１０９は、ＰＶ（Ｐｈｙｓｉｃａｌ−Ｖｉｒｔｕａｌ）変換処理を実行する（ステップ２７０２）。ＰＶ変換処理は、例えば特許文献１にも示された方法を用いる。例えばＰＶ変換処理においてＰＬ変換処理プログラム１１０９は、Ｇｏａｌマッピングパターン（Ｐｃｙｃｌｅマッピングテーブル１００９、及びＶＣＤＥＶマッピングテーブル１００７）を参照し、当該ＰＰＧ＃、ＰＣＤＥＶ＃、Ｐｃｙｃｌｅ＃に対応するレギュラーＶＰＧ空間アドレスを算出する。レギュラーＶＰＧ空間アドレスは、ＤＧ内のドライブ数がＮの整数倍であり、かつ何れのドライブも故障していない場合の、ＰＰＧ＃、ＰＣＤＥＶ＃、Ｐｃｙｃｌｅ＃に対応するＶＰＧ＃、ＶＣＤＥＶ＃、Ｖｃｙｃｌｅ＃であり、マッピング補正テーブル１００５による補正前のＶＰＧ空間アドレスである。
【０２４３】
次に、ＰＬ変換処理プログラム１１０９は、マッピング逆補正テーブル１００６を参照し、入力であるＰＰＧ＃、ＰＣＤＥＶ＃、及びステップ２７０１で算出したＰｃｙｃｌｅ＃を補正する（ステップ２７０３）。マッピング補正処理の詳細については後述する。
【０２４４】
次に、ＰＬ変換処理プログラム１１０９は、対象物理記憶領域がスペア領域であるかを判定する（ステップ２７０５）。ここでＰｃｙｃｌｅ＃がゼロである場合、ＰＬ変換処理プログラム１１０９は、対象領域がスペア領域と判定する。
【０２４５】
対象物理記憶領域がスペア領域である場合（ステップ２７０５でＹＥＳ）、ＰＬ変換処理プログラム１１０９は、スペア逆変換処理を実行する（ステップ２７０６）。ＰＬ変換処理プログラム１１０９は、スペア逆変換テーブル１０１１を参照し、当該ＰＰＧ＃、ＰＣＤＥＶ＃、Ｐｃｙｃｌｅ＃から、ＶＳＤ＃、及びＰｃｙｃｌｅ＃を取得する。
【０２４６】
その後、ＰＬ変換処理プログラム１１０９は、仮想スペア管理テーブル１０１２から、当該ＶＳＤ＃に対応するＰＰＧ＃、及びＰＣＤＥＶ＃を取得する（ステップ２７０８）。ＰＬ変換処理プログラム１１０９は、当該算出したＰＰＧ＃、ＰＣＤＥＶ＃、及びＰｃｙｃｌｅ＃について、再度ステップ２７０２のＰＶ変換処理の判定を行う。当該処理はスペア領域以外の領域が算出されるまで繰り返される。
【０２４７】
対象領域がスペア領域ではない場合（ステップ２７０５でＮＯ）、ＰＬ変換処理プログラム１１０９は、Ｖｃｈｕｎｋ＃を算出（ステップ２７０９）して処理を終了する。Ｖｃｈｕｎｋ＃は、Ｖｃｈｕｎｋ＃＝Ｆｌｏｏｒ（Ｐｃｈｕｎｋ＃／（ｃ＋１））＊ｃ＋Ｖｃｙｃｌｅ＃−１で算出される。
【０２４８】
なお、スペア用Ｐｃｈｕｎｋがｍ個（ｍは１以上の整数）の場合、当該Ｖｃｈｕｎｋ＃は、Ｖｃｈｕｎｋ＃＝Ｆｌｏｏｒ（Ｐｃｈｕｎｋ＃／（ｃ＋ｍ））＊ｃ＋Ｖｃｙｃｌｅ＃−１で算出される。  
【０２４９】
図３１は、マッピング補正処理を示す。
【０２５０】
マッピング補正処理プログラム１１１０は、前述のＬＰ変換処理のステップ２６０３においてマッピング補正処理を実行する。マッピング補正処理は、ＳＷＡＰ元である物理記憶領域のアドレスを、ＳＷＡＰ先となる物理記憶領域のアドレスに変換する。
【０２５１】
まず、マッピング補正処理プログラム１１１０は、ＤＧ内のドライブ台数を参照し、ドライブ台数がＮの整数倍であるかを判定する（ステップ２８０１）。ドライブ台数がＮの整数倍である場合（ステップ２８０１でＹｅｓ）、マッピング補正処理は不要であるため、マッピング補正処理プログラム１１１０は、処理を終了する（入力値をそのまま出力する）。
【０２５２】
ドライブ数がＮの整数倍ではない場合（ステップ２８０１でＮｏ）、マッピング補正処理プログラム１１１０は、マッピング補正テーブル１００５を参照し、入力値であるＰＰＧ＃１４００、ＰＣＤＥＶ＃１４０１、Ｐｃｙｃｌｅ＃１４０２に対応するＰＰＧ＃１４０３、ＰＣＤＥＶ＃１４０４、Ｐｃｙｃｌｅ＃１４０５を算出し、これを出力値とする（ステップ２８０２）。
【０２５３】
以上のマッピング補正処理及びＬＰ変換処理によれば、ストレージコントローラ１００は、Ｉ／Ｏ要求に基づくＶＰＧ空間のアドレスを、ＰＰＧ空間のアドレスへ変換し、ＰＰＧ空間にアクセスすることができる。また、ストレージコントローラ１００は、ドライブ数がＮの整数倍である場合、Ｇｏａｌマッピングパターンを用いてアドレス変換を行うことで、最適な負荷分散を行うことができ、ドライブ数がＮの整数倍ではない場合、Ｇｏａｌマッピングパターンを、マッピング補正テーブルを用いて補正することで、わずかな補正でアドレス変換を行うことができる。
【０２５４】
図３２は、マッピング逆補正処理を示す。
【０２５５】
マッピング補正処理プログラム１１１０は、前述のＰＬ変換処理のステップ２７０３においてマッピング逆補正処理を実行する。マッピング逆補正処理は、ＳＷＡＰ先となる物理記憶領域のアドレスを、ＳＷＡＰ元である物理記憶領域のアドレスに変換する。
【０２５６】
まず、マッピング補正処理プログラム１１１０は、ＤＧ内のドライブ台数を参照し、ドライブ台数がＮの整数倍であるかを判定する（ステップ２８０３）。ドライブ台数がＮの整数倍である場合（ステップ２８０３でＹｅｓ）、マッピング逆補正処理は不要であるため、マッピング補正処理プログラム１１１０は、処理を終了する（入力値をそのまま出力する）。
【０２５７】
ドライブ数がＮの整数倍ではない場合（ステップ２８０３でＮｏ）、マッピング補正処理プログラム１１１０は、マッピング逆補正テーブル１００６を参照し、入力値であるＰＰＧ＃１４０７、ＰＣＤＥＶ＃１４０８、Ｐｃｙｃｌｅ＃１４０９に対応するＰＰＧ＃１４１０、ＰＣＤＥＶ＃１４１１、Ｐｃｙｃｌｅ＃１４１２を算出し、これを出力値とする（ステップ２８０４）。
【０２５８】
以上のマッピング逆補正処理及びＰＬ変換処理によれば、ストレージコントローラ１００は、リビルド処理において、障害があるドライブ１７０のＰＰＧ空間のアドレスを、ＶＰＧ空間のアドレスへ変換し、リビルドに必要なデータを特定することができる。また、ストレージコントローラ１００は、ドライブ数がＮの整数倍である場合、Ｇｏａｌマッピングパターンを用いてアドレス変換を行うことで、最適な負荷分散を行うことができ、ドライブ数がＮの整数倍ではない場合、Ｇｏａｌマッピングパターンを、マッピング補正テーブルを用いて補正することで、わずかな補正でアドレス変換を行うことができる。
【０２５９】
なお、本実施例ではドライブ単体の増設方法について説明したが、同様の考え方を用いることにより、ドライブ単体での減設処理を行うこともできる。
【０２６０】
減設時には、まず減設対象ドライブに対する新規Ｗｒｉｔｅを禁止した後、減設対象ドライブに格納されているデータを、減設対象以外のドライブに移行する。その後、図１９または図２０に示す方法を逆に実行することで減設後のマッピングパターンを生成する。減設時のＧｏａｌマッピングパターンは、ドライブ数＝Ｎ×｛減設後のＰＧ数｝の条件で生成されたマッピングパターンである。
【０２６１】
減設後のマッピングパターン生成後は、図２６のパーセルリバランス処理を実施し、パーセルリバランス完了後に減設対象ドライブをシステムから抜去する。
【０２６２】
本実施例の計算機システムは、分散ＲＡＩＤ方式において、ドライブ単位での増設を可能にする。一つのＶＰＧの一つのＶｃｈｕｎｋ周期に含まれるＶｃｈｕｎｋ数ｃが、一つのＰＰＧに含まれるドライブ数Ｎの整数倍であることにより、ドライブ単位で増設した場合においても、追加容量分の冗長性を確保することができる。特許文献１には、ＰＧ単位で構成されたストレージシステムにおける、ＶＰＧ−ＰＰＧ間のマッピング方法が開示されている。本実施例では、ＰＧ単位の構成のマッピングパターンを目標マッピングパターンと定義し、目標マッピングパターンに出来るだけ近づくように二つの物理パーセルに関連付けられた仮想パーセルをＳＷＡＰする。これにより、Ｖｃｈｕｎｋのデータを複数のドライブにできるだけ分散させることができ、Ｉ／Ｏ処理やリビルド処理の性能をＰＧ単位の構成の性能に近づけることができる。また、ＰＧより小さい単位でドライブを増設することで、一回の増設のコストを抑えることができる。
【０２６３】
用語について説明する。物理記憶デバイスは、物理記憶ドライブ１７０等に対応する。計算機は、ストレージコントローラ１００、ストレージコントローラの機能を有する計算機等に対応する。論理記憶領域は、仮想パーセル、仮想ストライプ等に対応する。物理記憶領域は、物理パーセル、物理ストライプ等に対応する。論理パリティグループは、仮想パリティグループ等に対応する。マッピング情報は、マッピングパターン等に対応する。基準マッピング情報は、Ｇｏａｌマッピングパターン等に対応する。補正マッピング情報は、マッピング補正テーブル及びマッピング逆補正テーブル等に対応する。スペア物理記憶領域は、スペア領域等に対応する。
【０２６４】
ｄは、ＤＧ内の物理記憶ドライブ数Ｄ等に対応する。ｎは、仮想パリティグループ内の仮想記憶ドライブ数Ｎ、物理パリティグループ内の物理記憶ドライブ数Ｎ等に対応する。ｍは、Ｐｃｈｕｎｋ周期内のスペア用Ｐｃｈｕｎｋ数ｍ等に対応する。ｖは、ｃ／Ｎ等に対応する。ｎ×ｖは、Ｖｃｈｕｎｋ周期内のＶｃｈｕｎｋ数（周期Ｖｃｈｕｎｋ数）ｃ等に対応する。ｗは、ＤＧ内のＶｃｈｕｎｋ周期数、ＤＧ内のＰｃｈｕｎｋ周期数等に対応する。ｒは、増設される物理記憶ドライブ数等に対応する。ｅは、増設後の仮想記憶デバイス数等に対応する。
【０２６５】
以上、本発明の実施例を説明したが、以上の実施例は、本発明を分かりやすく説明するために詳細に説明したものであり、本発明は、必ずしも説明した全ての構成を備えるものに限定されるものではない。ある例の構成の一部を他の例の構成に置き換えることが可能であり、ある例の構成に他の例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。図の構成は説明上必要と考えられるものを示しており、製品上必ずしも全ての構成を示しているとは限らない。
【符号の説明】
【０２６６】
１０…ホスト、  ２０…管理サーバ、  ３０…ネットワーク、  １００…ストレージコントローラ、  １１０…ＦＥＰＫ、  １１１…ポート、  １１２…保守インタフェース、  １２０…ＣＰＵ、  １２１…Ｃｏｒｅ、  １２２…ＬＭ、  １３０…ＣＭＰＫ、  １３１…ＣＭ、  １４０…ＢＥＰＫ、  １５０…内部ネットワーク、  １６０…ドライブエンクロージャ、  １６１…スイッチ
【図１】
2017175285.tif 000003
【図２】
2017175285.tif 000004
【図３】
2017175285.tif 000005
【図４】
2017175285.tif 000006
【図５】
2017175285.tif 000007
【図６】
2017175285.tif 000008
【図７】
2017175285.tif 000009
【図８】
2017175285.tif 000010
【図９】
2017175285.tif 000011
【図１０】
2017175285.tif 000012
【図１１】
2017175285.tif 000013
【図１２】
2017175285.tif 000014
【図１３】
2017175285.tif 000015
【図１４】
2017175285.tif 000016
【図１５】
2017175285.tif 000017
【図１６】
2017175285.tif 000018
【図１７】
2017175285.tif 000019
【図１８】
2017175285.tif 000020
【図１９】
2017175285.tif 000021
【図２０】
2017175285.tif 000022
【図２１】
2017175285.tif 000023
【図２２】
2017175285.tif 000024
【図２３】
2017175285.tif 000025
【図２４】
2017175285.tif 000026
【図２５】
2017175285.tif 000027
【図２６】
2017175285.tif 000028
【図２７】
2017175285.tif 000029
【図２８】
2017175285.tif 000030
【図２９】
2017175285.tif 000031
【図３０】
2017175285.tif 000032
【図３１】
2017175285.tif 000033
【図３２】
2017175285.tif 000034
【国際調査報告】
2017175285.tif 000035
2017175285.tif 000036