(57)【要約】  ストレージシステムは、ネットワークにより接続され、ボリュームを提供する複数ノードと、複数のドライブユニットと、管理システムと、を含む。上記複数のドライブユニットのそれぞれは、複数の記憶ドライブからなり、上記複数ノードにおける１以上のノードから他のノードを介することなくアクセス可能である。上記管理システム又は上記複数ノードの一つは、第１ボリュームのアクセス頻度に基づいて、当該第１ボリュームのデータを配置する新たな分散範囲の記憶ドライブ数を決定する。
2017061008.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークにより接続され、ボリュームを提供する複数ノードと、
複数のドライブユニットと、
管理システムと、を含み、
前記複数のドライブユニットのそれぞれは、複数の記憶ドライブからなり、前記複数ノードにおける１以上のノードから他のノードを介することなくアクセス可能であり、
前記管理システム又は前記複数ノードの一つは、第１ボリュームのアクセス頻度に基づいて、前記第１ボリュームのデータを配置する新たな分散範囲の記憶ドライブ数を決定する、ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記管理システム又は前記複数ノードの前記一つは、
前記アクセス頻度が第１閾値以上である場合、前記新たな分散範囲を、前記第１ボリュームのオーナノードから他のノードを介することなくアクセス可能な記憶ドライブで構成すると決定する、ストレージシステム。
【請求項３】
請求項１に記載のストレージシステムであって、
前記管理システム又は前記複数ノードの前記一つは、前記新たな分散範囲のドライブユニット数を決定することによって、前記新たな分散範囲の記憶ドライブ数を決定する、ストレージシステム。
【請求項４】
請求項１に記載のストレージシステムであって、
前記管理システム又は前記複数ノードの前記一つは、
前記アクセス頻度と複数の閾値との比較を行って、前記アクセス頻度が属する範囲を決定し、
決定された前記範囲に対応する記憶ドライブ数を、前記新たな分散範囲のドライブユニット数と決定する、ストレージシステム。
【請求項５】
請求項１に記載のストレージシステムであって、
前記管理システム又は前記複数ノードの前記一つは、前記新たな分散範囲の記憶ドライブ数として、現在の分散範囲の記憶ドライブ数よりも少ない数を決定した場合、前記第１ボリュームを提供するオーナノードから他のノードを介することなくアクセス可能な記憶ドライブを優先して残す、ストレージシステム。
【請求項６】
請求項１に記載のストレージシステムであって、
前記管理システム又は前記複数ノードの前記一つは、前記第１ボリュームの現在の分散範囲を構成する記憶ドライブの空き容量に基づいて、前記現在の分散範囲から削除する記憶ドライブを決定する、ストレージシステム。
【請求項７】
請求項１に記載のストレージシステムであって、
前記管理システム又は前記複数ノードの前記一つは、前記新たな分散範囲の記憶ドライブ数として、現在の分散範囲の記憶ドライブ数よりも多くの数を決定した場合、前記現在の記憶ドライブ数及び前記多くの記憶ドライブ数におけるリビルド時間を推定し、
前記多くの記憶ドライブ数における推定されたリビルド時間が前記現在の記憶ドライブ数における推定されたリビルド時間よりも長い場合、前記現在の分散範囲を維持すると決定する、ストレージシステム。
【請求項８】
請求項７に記載のストレージシステムであって、
前記リビルド時間の推定は、分散範囲の内の記憶ドライブのスループット及びノード間インタフェースのスループット、を参照する、ストレージシステム。
【請求項９】
請求項１に記載のストレージシステムであって、
前記管理システム又は前記複数ノードの前記一つは、前記第１ボリュームの現在の分散範囲外の記憶ドライブの空き容量に基づいて、前記現在の分散範囲に追加する記憶ドライブを決定する、ストレージシステム。
【請求項１０】
請求項１に記載のストレージシステムであって、
前記管理システム又は前記複数ノードの前記一つは、
前記アクセス頻度が第１閾値以上である場合、前記新たな分散範囲を、前記第１ボリュームのオーナノードから他のノードを介することなくアクセス可能な記憶ドライブで構成すると決定し、
前記新たな分散範囲の記憶ドライブ数として、現在の分散範囲の記憶ドライブ数よりも多くの数を決定した場合、前記現在の記憶ドライブ数及び前記多くの記憶ドライブ数におけるリビルド時間を推定し、
前記多くの記憶ドライブ数における推定されたリビルド時間が前記現在の記憶ドライブ数における推定されたリビルド時間よりも長い場合、前記現在の分散範囲を維持する、ストレージシステム。
【請求項１１】
ネットワークにより接続され、ボリュームを提供する複数ノードと、複数のドライブユニットと、を含み、前記複数のドライブユニットのそれぞれが、複数の記憶ドライブからなり、前記複数ノードにおける１以上のノードから他のノードを介することなくアクセス可能であるストレージシステム、の制御方法であって
第１ボリュームのアクセス頻度を監視し、
前記アクセス頻度の監視結果に基づいて、前記第１ボリュームのデータを配置する新たな分散範囲の記憶ドライブ数を決定する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージシステムに関する。
【背景技術】
【０００２】
従来、ストレージシステムにおける複数の記憶デバイスにより、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）グループを構成し、ＲＡＩＤグループに基づいて作成された論理ボリュームを、ホストコンピュータへ提供することが行われている。【０００３】
ＲＡＩＤに関する技術として、特許文献１には、通常データと、通常データを復元するための冗長データとを含むストライプを、容量プールに記憶領域を提供する複数の記憶デバイスに分散させて管理する、所謂分散ＲＡＩＤが開示されている。【０００４】
具体的には、「ストレージ装置は、複数の記憶デバイスと、前記複数の記憶デバイスの所定の記憶領域を１つ以上の仮想ボリュームを含む仮想ボリューム群として前記ホスト計算機に提供する制御部と、を備え、前記制御部は、前記複数の記憶デバイスから１以上の冗長度を有する１つ以上のデータセットを構成し、前記複数のデータセットを含むストレージプールの記憶領域を前記仮想ボリュームの記憶領域の一部に提供し、前記仮想ボリュームに割り当てる前記データセットを構成する前記記憶デバイスの組み合わせを２以上の一定数の組み合わせに限定し、前記一定数の組み合わせで出現する前記記憶デバイスを前記ストレージプール内の記憶領域に均等に分散し、前記仮想ボリューム群単位で前記仮想ボリュームに割り当てる前記記憶デバイスの一定数の異なる組み合わせを用いる」（要約）ことが開示されている。【０００５】
また、分散型ストレージシステムの一つとして、複数のサーバ（計算機）をネットワークにより接続しストレージプールを生成する、ＳｅｒｖｅｒＳＡＮ型ストレージシステムが、知られている。ＳｅｒｖｅｒＳＡＮ型ストレージシステムは、サーバノードそれぞれに直結されたローカル記憶デバイスを最終格納場所として使用し、ライトデータ及びその冗長データを複数サーバノードに分散させることでデータを保護する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開２０１４／１１５３２０号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
冗長データを記憶するＲＡＩＤグループを構成するいずれかのドライブに故障が発生した場合には、冗長データ等を用い、故障が発生したドライブに格納されていたデータを、装置に備え付けられたスペアドライブに対してリビルドする。特許文献１に開示されるように、複数のストライプからなるストライプ列を、容量プールに記憶領域を提供する複数の記憶デバイスに分散させて管理し、記憶デバイスの並列度を上げることで、リビルドを高速化できる。【０００８】
しかし、ＳｅｒｖｅｒＳＡＮ型ストレージシステムのように、ストライプ列を構成するライトデータとパリティが複数ノードに分散されている構成において、ライトミスのパリティ生成時に他ノードの記憶デバイスから旧データ／パリティをリードするためのノード間通信が発生する。このため、Ｉ／Ｏ性能が低下する。
【課題を解決するための手段】
【０００９】
本発明の代表的な一例は、ネットワークにより接続され、ボリュームを提供する複数ノードと、複数のドライブユニットと、管理システムと、を含むストレージシステムである。前記複数のドライブユニットのそれぞれは、複数の記憶ドライブからなり、前記複数ノードにおける１以上のノードから他のノードを介することなくアクセス可能である。前記管理システム又は前記複数ノードの一つは、第１ボリュームのアクセス頻度に基づいて、前記第１ボリュームのデータを配置する新たな分散範囲の記憶ドライブ数を決定する。
【発明の効果】
【００１０】
本発明の一態様によれば、複数のノードを含むストレージシステムにおいて、リビルドを高速化させつつ、Ｉ／Ｏ性能の低下を抑制できる。
【図面の簡単な説明】
【００１１】
【図１】計算機システムのハードウェア構成を示す。
【図２】バックエンド接続冗長構成の例を示す。
【図３】ストレージシステムにおけるデータ転送の例を示す。
【図４Ａ】ホストに提供されるボリュームと、ボリュームに割り当てられる物理記憶領域との関係例を示す。
【図４Ｂ】ＶＶＯＬのデータ構成と物理記憶領域に格納されるデータ構成との関係、及び物理記憶領域におけるデータ格納位置（データ格納記憶ドライブ）の例を示す。
【図５】計算機ノードそれぞれのメモリに格納されている管理情報を示す。
【図６】ボリューム管理テーブルの例を示す。
【図７】プール管理テーブルの例を示す。
【図８】スループット管理テーブルの例を示す。
【図９】割り当て済み容量管理テーブルの例を示す。
【図１０】仮想ボリュームの分散範囲を変更する処理のフローチャートを示す。
【図１１】図１０における新たな分散ビットマップ作成ステップの詳細のフローチャートを示す。
【図１２】パーセルを記憶ドライブの記憶領域に割り当てる処理のフローチャートを示す。
【発明を実施するための形態】
【００１２】
以下では、幾つかの実施例を、図面を参照して説明する。なお、以下に説明する実施例は特許請求の範囲にかかる発明を限定するものではなく、また実施例で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１３】
なお、以下の説明では、「ａａａテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ａａａテーブル」を「ａａａ情報」と呼ぶこともできる。
【００１４】
以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェースデバイス（例えばポート）を用いながら行うため、処理の主語がプログラムとされてもよい。プログラムを主語として説明された処理は、プロセッサ又はそのプロセッサを有する計算機（例えば、管理計算機、ホスト計算機、ストレージ装置等）が行う処理としてもよい。
【００１５】
また、コントローラは、プロセッサそれ自体であってもよいし、コントローラが行う処理の一部又は全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから各コントローラにインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであってもよい。
【００１６】
ストレージシステムを含む計算機システムの概要を説明する。図１は、計算機システムのハードウェア構成を示す。計算機システムは、１以上のホスト計算機（以下、ホストという）１０Ａ、１０Ｂと、管理サーバ２０と、ストレージシステム１００とを含む。ホスト計算機１０Ａ、１０Ｂと、管理サーバ２０と、ストレージシステム１００とは、ネットワーク４０を介して接続されている。ネットワーク４０は、ローカルエリアネットワーク（ＬＡＮ：Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であっても良く、ワイドエリアネットワーク（ＷＡＮ：Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であってもよい。
【００１７】
ホスト計算機１０Ａ、１０Ｂと、ストレージシステム１００とは、ネットワーク３０を介して接続されている。ネットワーク３０は、データ通信用のネットワークであって、本構成においては、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）である。ネットワーク３０は、データ通信用のネットワークであればＳＡＮ以外のネットワークでもよく、例えばＩＰネットワークでもよい。ネットワーク３０、４０は、同一のネットワークであってもよい。
【００１８】
ホスト１０Ａ、１０Ｂは、例えば、アプリケーションを実行する計算機であり、ストレージシステム１００からアプリケーションが利用するデータを読み出し、ストレージシステム１００にアプリケーションが作成したデータを書き込む。管理サーバ２０は、管理者により使用される管理システムである。図１の例において管理システムは１台の計算機であるが、複数台の計算機で構成されてもよい。管理サーバ２０はいずれかの計算機ノードと一体でもよい。管理サーバ２０は、入力デバイスに対する管理者の操作により、ストレージシステム１００を設定し及び制御する。
【００１９】
ストレージシステム１００は、複数の計算機ノード（以下、ノードともいう）１１０Ａ〜１１０Ｄを含む。計算機ノード１１０Ａ〜１１０Ｄはスイッチ１５０を介して接続されており、相互に通信する。図１の例において、計算機ノード１１０Ａ〜１１０Ｄは同様の構成要素を含む。図１において、計算機ノード１１０Ｃ、１１０Ｄの内部要素は、省略されている。
【００２０】
計算機ノード１１０Ａ〜１１０Ｄは、それぞれ、バスで接続された二つのコントローラ１２０Ａ、１２０Ｂを含む。コントローラ１２０Ａ、１２０Ｂは、同様の構成を有している。例えば、コントローラ１２０Ａ、ホストインタフェース（Ｉ／Ｆ）１２１、管理Ｉ／Ｆ１２２、ＣＰＵ１２３、メモリ１２４、スイッチＩ／Ｆ１２５、及びドライブＩ／Ｆ１２６を含む。これらは、内部バスを介して接続されている。コントローラ１２０Ａ、１２０Ｂの構成要素の数は、一致していなくてもよい。
【００２１】
ホストＩ／Ｆ１２１は、ネットワーク３０を介してホストとのインタフェースであり、管理Ｉ／Ｆ１１２は、ネットワーク４０を介してストレージシステム１００を、管理サーバ２０と接続するためのインタフェースである。
【００２２】
計算機ノード１１０Ａ〜１１０Ｄは、それぞれ、複数の記憶ドライブ１８０（単にドライブとも呼ぶ）を含んで構成されたドライブユニット（ＤＵ）とドライブＩ／Ｆ１２６を介して接続している。記憶ドライブ１８０は、物理記憶ドライブである。記憶ドライブ１８０は、不揮発性又は揮発性の記憶媒体を含み、例えば、磁気ディスク、フラッシュメモリ、及びその他半導体メモリを含む。
【００２３】
図１においては、計算機ノード１１０Ａ、１１０Ｂそれぞれから直接アクセス可能なＤＵ１６０Ａ、１６０Ｂが例示されている。一つの計算機ノード（ＣＰＵ）は、１又は複数のＤＵに直接アクセス可能である。他の計算機ノード１１０Ｃ、１１０Ｄも、不図示のＤＵがドライブＩ／Ｆ１２６に接続されている。
【００２４】
ここで、計算機ノード（ＣＰＵ１２３）が直接アクセス可能なＤＵは、他の計算器ノードを介することなく当該計算機ノードがアクセス可能なＤＵであり、コマンド及びリード／ライトデータは、他の計算器ノードの要素を通過することなく、送受信される。計算機ノード１１０Ａ〜１１０Ｄは、それぞれ、ドライブＩ／Ｆ１２６を介して、直接アクセス可能なＤＵと通信する。
【００２５】
計算機ノードから直接アクセス可能なＤＵ及び記憶ドライブを、当該計算機ノードのローカルＤＵ及びローカルドライブとも呼ぶ。計算機ノードから間接アクセス可能、つまり、他の計算器ノードを介してアクセス可能なＤＵ及び記憶ドライブを、当該計算機ノードのリモートＤＵ及びリモートドライブとも呼ぶ。
【００２６】
ドライブＩ／Ｆ１２６は、ＤＵの記憶ドライブ１８０との間で各種コマンドや、ライトデータ、リードデータ等の通信を行う。ドライブＩ／Ｆ１２６は、転送バッファを含み、記憶ドライブ１８０から送信されたデータや、記憶ドライブ１８０へ送信するデータを一時的に格納する。
【００２７】
メモリ１２４は、各種プログラムや、各種情報を記憶する。メモリ１２４は、キャッシュ領域を含む。キャッシュ領域は、ホストから記憶ドライブ１８０等に書き込むデータ（ライトデータ）や、記憶ドライブ１８０から読み出したデータ（リードデータ）を一時的に格納する。
【００２８】
ＣＰＵ１２３は、メモリ１２４に格納されたプログラムを実行して各種処理を実行する。ＣＰＵ１２３は、ドライブＩ／Ｆ１２６を介して、各種コマンド（例えばＳＣＳＩにおけるＲＥＡＤコマンドやＷＲＩＴＥコマンドなど）をＤＵの記憶ドライブ１８０に送信する。また、ＣＰＵ１２３は、スイッチＩ／Ｆ１２５を介して、各種コマンドを他の計算器ノード又は間接アクセス可能なＤＵに送信する。
【００２９】
図２は、バックエンド接続冗長構成の例を示す。図１において、一つのＤＵに対しては、一つの計算機ノードのみが直接アクセス可能である。図２のバックエンド接続構成において、複数の計算機ノードが同一のＤＵにアクセス可能である。具体的には、計算機ノード１１０Ａ、１１０Ｂの双方は、ドライブＩ／Ｆ１２６においてＤＵ１６０Ａに接続されている。同様に、計算機ノード１１０Ａ、１１０Ｂの双方は、ドライブＩ／Ｆ１２６においてＤＵ１６０Ｂに接続されている。
【００３０】
また、図２の例においては、一つの計算機ノードが、複数のＤＵに直接アクセス可能である。具体的には、計算機ノード１１０Ａは、ドライブＩ／Ｆ１２６においてＤＵ１６０Ａ、１６０Ｂに接続されている。同様に、計算機ノード１１０Ｂは、ドライブＩ／Ｆ１２６においてＤＵ１６０Ａ、１６０Ｂに接続されている。
【００３１】
図３は、ストレージシステム１００におけるデータ転送の例を示す。ホストからのＩ／Ｏ要求を受信したオーナＣＰＵ１２３は、ドライブＩ／Ｆ１２６を介してローカルＤＵにアクセスする、又は、スイッチ１５０及び他の計算器ノードを介してリモートＤＵにアクセスする。
【００３２】
図３の例において、ノード１１０Ａは、アクセスされたボリュームのオーナノードであり、そのＣＰＵ１２３Ａは、オーナＣＰＵである。オーナＣＰＵ１２３Ａは、ボリュームをホストに提供する。オーナＣＰＵ１２３Ａは、ボリュームに対するリード要求を受信し、指定されたリードデータをホストに返す。
【００３３】
図３の例において、オーナＣＰＵ１２３Ａは、直接アクセス可能なＤＵ１６０Ａに格納されたデータＤＡＴＡ（１）６７＿１に対するリード要求を受信する。オーナＣＰＵ１２３Ａは、データＤＡＴＡ（１）６７＿１のアドレス指定したリードコマンドを、計算機ノード１１０ＡのドライブＩ／Ｆ１２６Ａに送信する。
【００３４】
ドライブＩ／Ｆ１２６Ａは、ＤＵ１６０ＡからデータＤＡＴＡ（１）６７＿１を取得し、ノード１１０Ａのメモリ１２４ＡにデータＤＡＴＡ（１）６７＿１を格納する。以上により、ＤＵ１６０ＡからデータＤＡＴＡ（１）６７＿１がステージングされる。
【００３５】
オーナＣＰＵ１２３Ａは、リモートＤＵ１６０Ｂに格納されたデータＤＡＴＡ（２）６７＿２に対するリード要求を受信する。オーナＣＰＵ１２３Ａは、他の計算器ノード１１０Ｂを介してＤＵ１６０Ｂにアクセス可能である。オーナＣＰＵ１２３Ａは、データＤＡＴＡ（２）６７＿２のアドレス指定したリードコマンドを、スイッチＩ／Ｆ１２５Ａ及びスイッチ１５０を介して、計算機ノード１１０Ｂに送信する。
【００３６】
計算機ノード１１０ＢのＣＰＵ１２３Ｂは、スイッチＩ／Ｆ１２５Ｂから受信したリードコマンドを、ノード１１０ＢのドライブＩ／Ｆ１２６Ｂに送信する。ドライブＩ／Ｆ１２６Ｂは、ＤＵ１６０ＢからデータＤＡＴＡ（２）６７＿２を取得し、計算機ノード１１０Ｂのメモリ１２４ＢにデータＤＡＴＡ（１）６７＿１を格納する。
【００３７】
計算機ノード１１０ＢのスイッチＩ／Ｆ１２５Ｂは、メモリ１２４ＢのデータＤＡＴＡ（２）６７＿２を、スイッチ１５０を介して、計算機ノード１１０Ａに送信する。計算機ノード１１０ＡのスイッチＩ／Ｆ１２５Ａは、受信したデータＤＡＴＡ（２）６７＿２を、ノード１１０Ａのメモリ１２４Ａに転送する。以上により、ＤＵ１６０ＢからデータＤＡＴＡ（２）６７＿２がステージングされる。
【００３８】
計算機ノード１１０ＢのＣＰＵ１２３Ｂに代わり、スイッチ１５０がノード１１０ＢのドライブＩ／Ｆ１２６Ｂにリードコマンドを送信してもよい。リードコマンドは、ＣＰＵ１２３Ｂを介することなく、ドライブＩ／Ｆ１２６Ｂに書き込まれる。データＤＡＴＡ（２）６７＿２は、ＣＰＵ１２３Ｂを介することなく、メモリ１２４Ｂに格納される。
【００３９】
図４Ａは、ホストに提供されるボリュームと、ボリュームに割り当てられる物理記憶領域との関係例を示す。図４Ａにおいて、複数の仮想ボリューム（ＶＶＯＬ）が提供されている。具体的には、四つのＶＶＯＬ（１）４０１＿１〜ＶＶＯＬ（４）４０１＿４が１又は複数のホストに提供される。
【００４０】
仮想ボリュームは、仮想的な記憶デバイスであり、ホストから参照することができる。ストレージシステム１００の管理者は、管理サーバ２０を使用して、任意のサイズの仮想ボリュームを作成する。サイズは、実際の記憶ドライブ１８０の合計容量に依存しない。ホストから新たなライトアクセスがあった仮想的な記憶領域単位（ＶＶＯＬページ）に対して、ＣＰＵ１２３が複数記憶ドライブ１８０の記憶領域（物理記憶領域）を割り当てる。なお、本開示の技術は、ボリュームの容量が割り当てられている物理記憶容量と一致する論理ボリュームにも適用可能である。
【００４１】
ＶＶＯＬ（１）４０１＿１〜ＶＶＯＬ（４）４０１＿４に対して、容量プール（単にプールとも呼ぶ）１６７から記憶領域が割り当てられる。ＶＶＯＬ（１）４０１＿１〜ＶＶＯＬ（４）４０１＿４に対して、プール１６７のみから記憶領域が割り当てられる。プール１６７は、三つのＤＵの六つのパリティグループ（ＰＧ）の記憶領域で構成されている。ＰＧは、記憶ドライブ１８０のグループである。
【００４２】
六つのＰＧは、具体的には、ＤＵ（１）１６０＿１のＰＧ（１）１６１＿０及びＰＧ（１）１６１＿１、ＤＵ（２）１６０＿２のＰＧ（２）１６２＿２及びＰＧ（３）１６２＿３、及びＤＵ（３）１６０＿３のＰＧ（２）１６３＿２及びＰＧ（３）１６３＿３である。ＤＵ（１）１６０＿１〜ＤＵ（３）１６０＿３は、それぞれ、図４Ａに示すＰＧ以外のＰＧを含む。
【００４３】
ＰＧは、複数、例えば、８個の記憶ドライブ１８０で構成される。ＰＧは、プールに対する増設・減設の単位である。本開示例において、一つのＰＧ内の記憶ドライブ１８０は、全て同一のドライブ種別（同一性能及び同一容量）を有する。一つのプール内で、ＰＧの記憶ドライブ数は共通でも異なっていてもよい。一つのＤＵ内で、ＰＧの記憶ドライブ数は共通でも異なっていてもよい。
【００４４】
図４Ａに示すように、ＶＶＯＬ（１）４０１＿１〜ＶＶＯＬ（４）４０１＿４それぞれに対して、分散範囲１６６＿１〜１６６＿４が定義されている。分散範囲は、ＶＶＯＬに記憶領域が割り当てられるＰＧを規定し、ＶＶＯＬのデータは、対応する分散範囲内の記憶領域に格納される。
【００４５】
例えば、ＶＶＯＬ（１）４０１に対する分散範囲１６６＿１は、ＤＵ（１）１６０＿１の二つのＰＧ（０）１６１＿０及びＰＧ（１）１６１＿１で構成されている。本例において、分散範囲は、一つのプール内の１又は複数のＤＵで定義される。
【００４６】
図４Ｂは、ＶＶＯＬのデータ構成と物理記憶領域に格納されるデータ構成との関係、及び物理記憶領域におけるデータ格納位置（データ格納記憶ドライブ）の例を示す。ＶＶＯＬ（１）４０１＿１のＶＶＯＬページ４２１に、ライトデータ（ユーザデータ）が格納されている。ＶＶＯＬページのサイズは規定値である。ＶＶＯＬページ４２１は、複数のサブ領域４２３から構成されている。このサブ領域４２３をストライプと呼ぶ。
【００４７】
図４Ｂにおいて、ＶＶＯＬページ４２１は、二つのストライプ列４２２で構成されている。ストライプ列４２２は、ライトデータのデータ単位を格納する。ホストから指定されたライト対象のデータは、所定サイズのデータ単位に分割されて、各データ単位が、複数のデータ要素に分割され、複数のデータ要素それぞれが、ストライプ４２３に書き込まれる。
【００４８】
ストライプ列４２２のサイズ及びＶＶＯＬページ４２１を構成するストライプ列４２２の数は規定値である。一つのストライプ列４２２を構成するストライプ４２３の数は、分散範囲１６６＿１のＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）構成に従う。
【００４９】
ＣＰＵ１２３は、記憶ドライブ１８０に障害が発生した際にその障害により読み出せなくなったデータ要素を回復するためにパリティを生成する。ＣＰＵ１２３は、例えば、ＲＡＩＤ５で構成されたＲＡＩＤグループのデータ単位に対しては、データ単位を構成する複数のデータ要素の排他的論理和（ＸＯＲ）をとることによってＰパリティを生成する。
【００５０】
ＣＰＵ１２３は、ＲＡＩＤ６で構成されたＲＡＩＤグループのデータ単位に対しては、更に、データ単位を構成する複数のデータ要素に所定の係数を掛けた後、それぞれのデータの排他的論理和をとることによって、Ｑパリティを生成する。ＣＰＵ１２３は、データ単位についての１以上のデータ要素（データ要素及び／又はパリティ）に基づいて、データ単位中のいずれかのデータ要素を復元する復元処理を行う。
【００５１】
なお、データの冗長化技術として、３重ミラー（Ｔｒｉｐｌｉｃａｔｉｏｎ）や、トリプルパリティ技術を使用してもよい。また、Ｒｅｅｄ−ｓｏｌｏｍｏｎ符号やＥＶＥＮ−ＯＤＤ等、任意の冗長コード生成技術を使用できる。
【００５２】
図４Ｂの例において、分散範囲１６６＿１のＲＡＩＤ構成は、７Ｄ１Ｐ構成である。そのため、ＶＶＯＬページ４２１における一つのストライプ列４２２は、７つのストライプ４２３で構成されており、各ストライプ４２３にライトデータのデータ要素が格納される。
【００５３】
図４Ｂにおいて、１＿Ｄ１、１＿Ｄ２、１＿Ｄ３、１＿Ｄ４、１＿Ｄ５、１＿Ｄ６、１＿Ｐのように、「＿」の前の数字が共通するものが、同一のデータ単位（ストライプ列）におけるデータ要素及びパリティを示す。なお、データ要素及びパリティは、それぞれストライプ４２３のサイズとなっている。
【００５４】
ＶＶＯＬページ４２１は、論理ページ４４１に対応づけられる。論理ページ４４１は、二つのストライプ列４４２で構成されている。ストライプ列４４２は、それぞれ、ＶＶＯＬページ４２１のストライプ列４２２に対応する。
【００５５】
論理ページ４４１のストライプ列４４２は、ライトデータ要素を格納するストライプ４４３（Ｄ１〜Ｄ７で示されている）に加え、冗長コード（パリティ）を格納するストライプ４４３（Ｐで示されている）を含む。論理ページ４４１において、冗長コードがライトデータと同一のストライプ列４４２に格納される。
【００５６】
論理ページにおけるストライプ列でのデータ要素配列順序は、ＶＶＯＬページのストライプ列のデータ要素配列順序と異なっていてもよい。図４Ｂの例において、データ単位２のストライプ列４４２（２で示されている）において、ライトデータ要素の配列順序が、対応するＶＶＯＬページ４２１のストライプ列４２２（２で示されている）と異なっている。
【００５７】
論理ページ４４１において、パーセル４４５が定義されている。パーセル４４５は、論理ページ４４１を構成するストライプ列４４２それぞれのストライプ４４３で構成されている。したがって、論理ページ４４１は、複数のパーセル４４５からなるパーセル列である。図４Ｂの例において、パーセル４４５は、二つのストライプ４４３で構成されているが、パーセル４４５は、１又は複数のストライプで構成することができる。
【００５８】
論理ページ４４１のデータは、分散範囲１６６＿１（物理記憶領域）内において分散して配置される。図４Ｂの例において、論理ページ４４１のデータは、パーセル単位で記憶ドライブ１８０に格納される。ＣＰＵ１２３は、予め定められたアルゴリズムに従って、パーセル４４５それぞれのデータを格納する記憶ドライブ１８０を、分散範囲１６６＿１から選択する。パーセル４４５の分散配置（分散割当）のために任意のアルゴリズムが使用でき、その一例は後述される。
【００５９】
分散範囲１６６＿１は、二つのＰＧで構成されており、本例において、ＰＧ（０）１６１＿０及びＰＧ（１）１６１＿１は、それぞれ、７Ｄ１Ｐ構成に対応して、八つの記憶ドライブ１８０で構成されている。従って、１６の記憶ドライブ１８０から、八つのパーセル４４５のデータを格納する記憶ドライブ１８０が選択される。選択される記憶ドライブ１８０の組み合わせは、論理ページ毎に決定される。
【００６０】
なお、ＶＶＯＬページのアドレスと論理ページのアドレスとの関係、及び、論理ページのアドレスと分散範囲内のアドレスとの関係は、計算機ノードが格納する管理情報において管理されている。
【００６１】
このように、論理ページのパーセル数よりも多い記憶ドライブ１８０から、論理ページ毎に記憶ドライブの組み合わせを選択することで、記憶ドライブ障害時のリビルドにおける負荷を記憶ドライブ１８０の間で分散することができ、リビルド時間を短縮できる。リビルドの動作例を説明する。
【００６２】
例えば１台の記憶ドライブが故障すると、ストレージシステム１００は、スペア領域に、故障した記憶ドライブに含まれているパーセルを配置し（管理情報の更新）、割り当てたスペア領域に対して、リビルド処理を実行する。
【００６３】
例えば、２つの３Ｄ＋１Ｐ構成のＲＧがあり、８台の記憶ドライブ全てが分散範囲である場合、障害記憶ドライブ内の各パーセルと同一ストライプ列に属する３つの正常パーセルが存在し、これら３パーセルを正常記憶ドライブからリードすれば、故障記憶ドライブの喪失データを復元できる。
【００６４】
ストレージシステム１００は、各パーセルが存在する７台の正常記憶ドライブの中から３台の正常記憶ドライブについて、全正常記憶ドライブ間の偏りが少なくなるように選択する。これにより、各正常記憶ドライブからの最大リード量を制限できる。これにより、従来ＲＡＩＤ方式と比較し、リビルド性能を向上できる。
【００６５】
図５は、計算機ノードそれぞれのメモリ１２４に格納されている管理情報を示す。図５に示す情報は、メモリ１２４の共有領域（共有メモリ）に格納されており、計算機ノードそれぞれ同様の管理情報を保持している。メモリ１２４は、ボリューム管理テーブル２４１、プール管理テーブル２４３、スループット管理テーブル２４５、及び割り当て済み容量管理テーブル２４７を格納している。
【００６６】
図６は、ボリューム管理テーブル２４１の例を示す。ボリューム管理テーブル２４１は、仮想ボリュームを管理する。ボリューム番号欄４１１は、仮想ボリュームの識別子である、ボリューム番号を示す。オーナノード欄４１２は、仮想ボリュームをホストに提供するオーナノードの識別子を示す。
【００６７】
自動再配置欄４１３は、仮想ボリュームのデータの分散範囲を計算機ノードが自動的に変更してよいか否かを示す。「１」は、自動再配置可を示し、「０」は自動再配置不可を示す。自動再配置欄４１３の値は、管理者（ユーザ）により設定される。プール内のＰＧのＲＡＩＤ構成及びドライブ種別が全て同一のプールに対してのみ、「１」が設定可能である。
【００６８】
所属プール欄４１４は、仮想ボリュームが所属する、つまり、仮想ボリュームに記憶領域を提供するプールの識別子を示す。分散ＤＵ数欄４１５は、仮想ボリュームのデータを格納する分散範囲を構成するＤＵの数を示す。分散ビットマップ欄４１６は、分散範囲を構成するＤＵを示す。例えば、分散ビットマップ０００００１０１は、ＤＵ（１）及びＤＵ（３）を示し、分散ビットマップ１１１１００００は、ＤＵ（５）、ＤＵ（６）、ＤＵ（７）、ＤＵ（８）を示す。
【００６９】
リビルド時間欄４１７は、一つの記憶ドライブが故障した時の、リビルドに係る時間の推定値を示す。Ｉ／Ｏアクセス数欄４１８は、仮想ボリュームに対する単位時間当たりの過去のＩ／Ｏアクセス数（アクセス頻度）を示す。各仮想ボリュームのアクセス頻度は、例えばオーナノードによって監視されている。Ｉ／Ｏアクセス数は、例えば、過去の所定期間の平均値であり、データ単位当たり又はデータ量に拠らないアクセス数である。Ｉ／Ｏアクセス数欄４１８は、例えばオーナノードによって、所定期間毎に更新される。
【００７０】
図７は、プール管理テーブル２４３の例を示す。プール管理テーブル２４３は、仮想ボリュームに物理記憶領域を提供するプールを管理する。プール番号欄４３１は、プールの識別子である、プール番号を示す。ＤＵ番号欄４３２は、プールに含まれるＤＵのＤＵ番号を示す。ＰＧ番号欄４３３は、プールに含まれるＰＧのＰＧ番号を示す。ＰＧ番号は、ＤＵ内で一意であるが、異なるＤＵの異なるＰＧは同一のＰＧ番号を持ち得る。
【００７１】
接続ノード欄４３４は、ＰＧ（ＤＵ）に直接アクセス可能なノードの識別子を示す。ドライブ数欄４３５は、ＰＧを構成する記憶ドライブの数を示す。ＲＡＩＤ欄４３６は、ＰＧが対応するＲＡＩＤ構成、つまり、当該ＰＧに格納されるデータのＲＡＩＤ構成を示す。ドライブ種別欄４３７は、ＰＧを構成する記憶ドライブの種別を示す。ＤＵ空き容量欄４３８は、プール内でのＤＵの空き容量を示す。つまり、ＤＵ内でプールに割り当てられているＰＧの総空き容量を示す。
【００７２】
図８は、スループット管理テーブル２４５の例を示す。スループット管理テーブル２４５は、異なる種類のデバイスそれぞれのスループットの値（仕様）を管理する。第１分類欄４５１は、装置の種類を示す。図８の例においては、ＨＤＤ、ＳＳＤ及びインタフェースが示されている。第２分類欄４５２は、各第１分類におけるサブ種類を示す。例えば、ＨＤＤは、容量とディスク回転速度の組によって分類されている。スループット欄４５３は、各デバイスのスループットの仕様値を示す。
【００７３】
図９は、割り当て済み容量管理テーブル２４７の例を示す。割り当て済み容量管理テーブル２４７は、各仮想ボリュームに対する各記憶ドライブの割り当て済み容量を管理する。図９は、ＶＶＯＬ（０）に対する各記憶ドライブの割り当て済み容量を示す。記憶ドライブは、ＤＵ番号、ＰＧ番号及びドライブ番号で識別される。ＤＵ番号はストレージシステム１００内で一意、ＰＧ番号はＤＵ内で一意、ドライブ番号はＰＧ内で一意である。Ｒ（ｘ、ｙ、ｚ）は、ＰＧ番号ｘ、ＤＵ番ｙ、ドライブ番号ｚの記憶ドライブから仮想ボリュームに割り当てられている容量を示す。
【００７４】
図１０は、仮想ボリュームの分散範囲を変更する処理のフローチャートを示す。いずれかの計算機ノード、例えば、当該仮想ボリュームのオーナノードが、当該処理を実行する。管理サーバ２０が当該処理を実行してもよい。当該処理は、例えば、定期的に実行される。ボリューム管理テーブル２４１における当該仮想ボリュームのＩ／Ｏアクセス数の更新と同期して実行されてもよい。
【００７５】
図１０において、ＣＰＵ１２３は、ボリューム管理テーブル２４１を参照し（Ｓ１０１）、当該仮想ボリュームの自動再配置欄４１３の値が、「１」であるか判定する（Ｓ１０２）。上述のように、「１」は、自動再配置可を示す。自動再配置欄４１３の値が「１」ではなく「０」である場合（Ｓ１０２：Ｎｏ）、ＣＰＵ１２３は、分散範囲を変更することなく本処理を終了する。
【００７６】
自動再配置欄４１３の値が、「１」である場合（Ｓ１０２：Ｙｅｓ）、ＣＰＵ１２３は、ボリューム管理テーブル２４１のＩ／Ｏアクセス数欄４１８から、当該仮想ボリュームのＩ／Ｏアクセス数を取得し、変数ａに代入する。さらに、ＣＰＵ１２３は、取得したＩ／Ｏアクセス数と、予め設定されている複数の閾値と、を比較して、取得したＩ／Ｏアクセス数が含まれる数値範囲を決定する（Ｓ１０３）。
【００７７】
Ｉ／Ｏアクセス数が閾値Ｓ２以上である場合（Ｓ１０３：Ｓ２＜＝ａ）、ＣＰＵ１２３は、新分散範囲のＤＵ数を１と決定する（Ｓ１０４）。Ｉ／Ｏアクセス数が閾値Ｓ１以上Ｓ２未満である場合（Ｓ１０３：Ｓ１＜＝ａ＜Ｓ２）、ＣＰＵ１２３は、新分散範囲のＤＵ数を２と決定する（Ｓ１０５）。Ｉ／Ｏアクセス数が閾値Ｓ１未満である場合（Ｓ１０３：ａ＜Ｓ１）、ＣＰＵ１２３は、新分散範囲のＤＵ数を３と決定する（Ｓ１０６）。これらＤＵ数は一例である。
【００７８】
ＣＰＵ１２３は、ボリューム管理テーブル２４１の分散ＤＵ数欄４１５から、当該仮想ボリュームの現在の分散範囲のＤＵ数を取得し、新たに決定した分散範囲のＤＵ数と比較する（Ｓ１０７）。現在の分散範囲のＤＵ数と新たに決定した分散範囲のＤＵ数が同一である場合（Ｓ１０７：Ｙｅｓ）、ＣＰＵ１２３は、分散範囲を変更することなく本処理を終了する。
【００７９】
現在の分散範囲のＤＵ数と新たに決定した分散範囲のＤＵ数が異なる場合（Ｓ１０７：Ｎｏ）、ＣＰＵ１２３は、新たな分散ビットマップを作成する（Ｓ１０８）。新たな分散ビットマップの作成の詳細は後述する。なお、ステップＳ１０８で分散ビットマップが作成されない場合、ＣＰＵ１２３は、本処理を終了する。
【００８０】
ＣＰＵ１２３は、新たに決定した分散範囲のリビルド時間の推定値を計算する（Ｓ１０９）。分散範囲のリビルド時間Ｔは、ボトルネックで決まる。記憶ドライブの性能又は計算機ノード間をつなぐインタフェースの性能が、ボトルネックとなり得る。従って、リビルド時間Ｔは、下記の数式で適切に計算できる。
【００８１】
【数１】
2017061008.tif 000003
【００８２】
ここで、Ｎは分散範囲に含まれるＤＵ数である。Ｃは、故障した記憶ドライブの容量である。Ｃが、記憶ドライブのトータル容量であるか、割り当て済領域の容量であるかは実装による。割り当て済み容量が使用される場合、定期的に値を確認する必要があり、割り当て済み容量管理テーブル２４７が参照される。
【００８３】
Ｐｎ（ｎ＝０、…Ｎ−１）はＤＵのスループットであり、したがって、ＰｎはＤＵの記憶ドライブのスループットに等しい。ＰＩは、インタフェーススループットである。デバイスのスループットの値は、スループット管理テーブル２４５から取得される。
【００８４】
ＣＰＵ１２３は、当該仮想ボリュームの現在の分散範囲のＤＵ数と、新たに決定した分散範囲のＤＵ数と比較する（Ｓ１１０）。新たに決定した分散範囲のＤＵ数が現在の分散範囲のＤＵ数がよりも少ない場合（Ｓ１１０：Ｙｅｓ）、ＣＰＵ１２３は、新たに作成した分散ビットマップ及び計算した新たなリビルド時間によって、ボリューム管理テーブル２４１において、当該仮想ボリュームの分散ＤＵ数欄４１５、分散ビットマップ欄４１６、及びリビルド時間欄４１７の値を更新し（Ｓ１１２）、本処理を終了する。
【００８５】
新たに決定した分散範囲のＤＵ数が現在の分散範囲のＤＵ数がより多い場合（Ｓ１１０：Ｎｏ）、ＣＰＵ１２３は、ボリューム管理テーブル２４１のリビルド時間欄４１７から、当該仮想ボリュームの現在のリビルド時間を取得し、ステップＳ１０９で算出した新たなリビルド時間と比較する（Ｓ１１１）。
【００８６】
新たなリビルド時間が現在のリビルド時間以上である場合（Ｓ１１１：Ｎｏ）、ＣＰＵ１２３は、分散範囲を変更することなく本処理を終了する。新たなリビルド時間が現在のリビルド時間よりも短い場合（Ｓ１１１：Ｙｅｓ）、ＣＰＵ１２３は、新たに作成した分散ビットマップ及び計算した新たなリビルド時間によって、ボリューム管理テーブル２４１において、当該仮想ボリュームの分散ＤＵ数欄４１５、分散ビットマップ欄４１６、及びリビルド時間欄４１７の値を更新し（Ｓ１１２）、本処理を終了する。
【００８７】
上述のように、分散範囲の変更を、自動再配置が許可されている仮想ボリュームに対してのみ実行することで、ユーザ要求に即した制御を実現できる。仮想ボリュームへのアクセス数（アクセス頻度）に応じて分散範囲を動的に決定することで、適切に、リビルドを高速化させつつ、Ｉ／Ｏ性能の低下を抑制できる。
【００８８】
分散範囲のＤＵ数をアクセス頻度が含まれる数値範囲に応じて決定することで、ＤＵ数決定の処理負荷を小さくでき、また、３以上の数値範囲数を定義することで、アクセス頻度に応じてより適切なＤＵ数を決定できる。分散範囲のＤＵを増加させるとリビルド時間が増加する場合に、分散範囲の変更を中止することによって、システム構成に応じて適切に分散範囲を決定できる。
【００８９】
現在の分散範囲からＤＵを削除する場合、削除されるＤＵに格納されている当該仮想ボリュームのデータは、新たな分散範囲に残されるＤＵに再配置される。論理ページのデータは、パーセル単位で分散配置されている。例えば、当該仮想ボリュームのオーナノードは、図１２を参照して後述する規則と同様の規則に従って、削除されるＤＵに格納されているデータの論理ページそれぞれのデータを、新たな分散範囲において再配置する。
【００９０】
図１１は、図１０における新たな分散ビットマップ作成ステップ（Ｓ１０８）の詳細のフローチャートを示す。ＣＰＵ１２３は、ボリューム管理テーブル２４１を参照し、分散ビットマップ欄４１６から当該仮想ボリュームの現在の分散ビットマップを取得する（Ｓ１３１）。
【００９１】
ＣＰＵ１２３は、取得した分散ビットマップから、当該仮想ボリュームの現在の分散範囲を構成するＤＵを同定する（Ｓ１３２）。当該仮想ボリュームの現在の分散範囲は、分散ビットマップが示すＤＵにおいて、当該仮想ボリュームが属するプール内のＰＧで構成される。
【００９２】
ＣＰＵ１２３は、ステップＳ１０４、Ｓ１０５、Ｓ１０６のいずれかのステップで決定した新分散ＤＵ数と、現在の分散ビットマップが示す現在分散ＤＵ数とを比較する（Ｓ１３３）。
【００９３】
新分散ＤＵ数が現在の分散ＤＵ数よりも小さい場合（Ｓ１３３：Ｎｏ）、ＣＰＵ１２３は、プール管理テーブル２４３を参照し（Ｓ１３４）、現在の分散範囲から削除するＤＵを選択する（Ｓ１３５）。ＣＰＵ１２３は、現在分散範囲のＤＵにおいて、当該仮想ボリュームのオーナノードのリモートＤＵ（直接アクセスできないＤＵ）から、削除するＤＵを選択する。ＣＰＵ１２３は、接続ノード欄４３４を参照して、現在分散範囲の各ＤＵが、当該仮想ボリュームのオーナノードのリモートＤＵかローカルＤＵか判定する。
【００９４】
現在分散範囲が、当該仮想ボリュームのオーナノードのローカルＤＵ（直接アクセス可能なＤＵ）のみで構成されている場合、ＣＰＵ１２３は、本ステップＳ１３５をスキップする。ＣＰＵ１２３は、ローカルＤＵから削除するＤＵを選択してもよい。
【００９５】
現在分散範囲に含まれるリモートＤＵの数が、削除すべきＤＵの数に満たない場合、ＣＰＵ１２３は、現在分散範囲から、ローカルＤＵ以外の全てのリモートＤＵを選択する。ＣＰＵ１２３は、現在分散範囲内の全てのリモートＤＵに加え、ローカルＤＵを選択してもよい。ＣＰＵ１２３は、本ステップＳ１３５をスキップしてもよい。
【００９６】
このように、仮想ボリュームのオーナノードのリモートＤＵを優先して削除し、ローカルＤＵを優先して新しい分散範囲に残すことによって、新しい分散範囲におけるアクセス性能を高めることができる。
【００９７】
ＣＰＵ１２３は、削除可能なＤＵから、空き容量の値が小さい順に削除するＤＵを選択する。ＣＰＵ１２３は、ＤＵ空き容量欄４３８を参照することで、各ＤＵの空き容量を知ることができる。これによって、新しい分散範囲での空き容量の枯渇の可能性を低減することができる。
【００９８】
ローカルＤＵとリモートＤＵが削除可能である場合、例えば、ＣＰＵ１２３は、リモートＤＵを選択した後、不足している下図のローカルＤＵを空き容量の値に従って選択する。ＣＰＵ１２３は、当該仮想ボリュームのオーナノードのリモートＤＵを優先して削除し、さらに、空き容量が小さいＤＵを優先して削除する。
【００９９】
オーナノードとＤＵの接続関係又は空き容量の一方のみが削除するＤＵの選択基準であってもよく、他の要素が選択基準に含まれてもよい。選択基準において、空き容量が、オーナノードとＤＵの接続関係より優先されてもよい。
【０１００】
新分散ＤＵ数が現在分散ＤＵ数よりも大きい場合（Ｓ１３３：Ｙｅｓ）、ＣＰＵ１２３は、プール管理テーブル２４３を参照し（Ｓ１３６）、当該仮想ボリュームが属するプールの現在分散範囲外のＤＵから、追加するＤＵを選択する（Ｓ１３７）。ＣＰＵ１２３は、現在分散範囲のＤＵと同一ＲＡＩＤ構成かつ同一ドライブ種別のＤＵを選択する。ＣＰＵ１２３は、ＲＡＩＤ欄４３６及びドライブ種別欄４３７を参照して、各ＤＵのＲＡＩＤ構成及びドライブ種別を同定する。
【０１０１】
ここで、追加すべきＤＵとして選択されるＤＵの、当該プールにおける全てのＰＧのＲＡＩＤ構成及びドライブ種別は、同一である。プール内の全てのＰＧが同一のＲＡＩＤ構成及びドライブ種別を有するプールに属する仮想ボリュームのみが、自動再配置が許可されていてもよい（ボリューム管理テーブル２４１の自動再配置欄４１３）。
【０１０２】
当該プール内に、現在分散範囲のＤＵと同一ＲＡＩＤ構成及び同一ドライブ種別のＤＵが存在しない場合、ＣＰＵ１２３は、本ステップＳ１３５をスキップする。現在分散範囲のＤＵと同一ＲＡＩＤ構成及び同一ドライブ種別のＤＵの数が、追加すべきＤＵの数に満たない場合、ＣＰＵ１２３は、現在分散範囲のＤＵとＲＡＩＤ構成及びドライブ種別が同一の全ＤＵを追加するＣＰＵ１２３は、本ステップＳ１３５をスキップしてもよい。
【０１０３】
当該プールにおいて、現在分散範囲のＤＵと同一ＲＡＩＤ構成及び同一ドライブ種別のＤＵの数が、追加すべきＤＵの数以上である場合、ＣＰＵ１２３は、空き容量の値が大きい順に、追加するＤＵを選択する。ＣＰＵ１２３は、ＤＵ空き容量欄４３８を参照することで、各ＤＵの空き容量を知ることができる。これによって、新しい分散範囲での空き容量の枯渇の可能性を低減することができる。
【０１０４】
ＣＰＵ１２３は、空き容量を参照する前に、ＤＵが当該仮想ボリュームのオーナノードのローカルＤＵをリモートＤＵより優先して追加するＤＵを選択してもよい。これによって、新たな分散範囲のＩ／Ｏ性能の低下を抑制できる。
【０１０５】
以上のように削除するＤＵを選択する（Ｓ１３５）又は追加するＤＵを選択した（Ｓ１３７）後、ＣＰＵ１２３は、現在の分散範囲及び選択したＤＵに基づいて、新たな分散ビットマップを作成する（Ｓ１３８）。作成された新たな分散ビットマップは、図１０のフローチャートにおけるステップＳ１０８の出力である。
【０１０６】
上記例は、分散範囲のＤＵ数をアクセス頻度に応じて動的に変更する。ストレージシステム１００は、他の種類のドライブグループ、たとえば、ＰＧの数をアクセス頻度に応じて動的に変更してもよい。分散範囲のＤＵ数又はＰＧ数を決定することは、結果的に、分散範囲の記憶ドライブ数を決定することと一致する。
【０１０７】
図１２は、パーセルを記憶ドライブの記憶領域に割り当てる処理のフローチャートを示す。以下に説明する割り当て方法は一例であって、他のアルゴリズムを使用することができる。ＣＰＵ１２３は、仮想ボリュームに新たなライトアクセス、つまり、空きＶＶＯＬページにライトアクセスがあると、当該ＶＶＯＬページに記憶ドライブの記憶領域を割り当てる。若しくは、ＣＰＵ１２３は、論理ページの再配置において、当該論理ページに記憶ドライブの記憶領域を割り当てる。図４Ｂを参照して説明したように、パーセル単位で記憶ドライブの記憶領域が割り当てられる。
【０１０８】
図１２に示すように、ＣＰＵ１２３は、ボリューム管理テーブル２４１を参照して（Ｓ１５１）、分散ビットマップ欄４１６からアクセス先の仮想ボリュームの分散ビットマップを取得し、分散範囲のＤＵを同定する（Ｓ１５２）。
【０１０９】
次に、ＣＰＵ１２３は、プール管理テーブル２４３を参照し（Ｓ１５３）、ＲＡＩＤ欄４３６（又はドライブ数欄４３５）から、必要なパーセル数を決定する（Ｓ１５４）。例えば、７Ｄ１ＰのＲＡＩＤ構成のパーセル数は８である。
【０１１０】
次に、ＣＰＵ１２３は、割り当て済み容量管理テーブル２４７を参照し（Ｓ１５６）、当該仮想ボリュームのエントリから分散範囲に含まれるＤＵを選択し、さらに、選択したＤＵにおいて、割り当て済み容量が小さい順で、上記パーセル数の記憶ドライブを選択する（Ｓ１５６）。これにより、記憶ドライブに均等にデータが格納され、記憶ドライブの負荷を適切に分散できる。
【０１１１】
次に、ＣＰＵ１２３は、選択した記憶ドライブに対してパーセルのデータを格納した後、割り当て済み容量管理テーブル２４７の該当エントリの値に、パーセルの割り当て容量分可算して、更新する。以上により本フローチャートの処理が終了する。
【０１１２】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１１３】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。
【０１１４】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【図１】
2017061008.tif 000004
【図２】
2017061008.tif 000005
【図３】
2017061008.tif 000006
【図４Ａ】
2017061008.tif 000007
【図４Ｂ】
2017061008.tif 000008
【図５】
2017061008.tif 000009
【図６】
2017061008.tif 000010
【図７】
2017061008.tif 000011
【図８】
2017061008.tif 000012
【図９】
2017061008.tif 000013
【図１０】
2017061008.tif 000014
【図１１】
2017061008.tif 000015
【図１２】
2017061008.tif 000016
【国際調査報告】
2017061008.tif 000017
2017061008.tif 000018
2017061008.tif 000019
2017061008.tif 000020