(57)【要約】【課題】プールの使用効率が低下せず、且つ、プールの空き容量が枯渇しても業務が停止しないようにする。【解決手段】少なくとも１つのプールに、複数の仮想ボリュームのうちの２以上の仮想ボリュームが関連付けられる。各仮想ボリュームに、複数のプールのうちの２以上のプールが関連付けられる。各仮想ボリュームについて、関連付けられている２以上のプールに優先順位がある。記憶制御装置は、ライトコマンド及びライト対象データをホスト装置から受信し、そのライトコマンドから特定されるライト先の仮想領域が未割当ての仮想領域であれば、そのライトコマンドから特定されるライト先の仮想ボリュームに関連付けられている２以上のプールの優先順位を基に、それら２以上のプールから１つのプールを選択する。記憶制御装置は、選択したプール内の未割当ての物理領域をライト先の仮想領域に割り当て、割り当てた物理領域に、ライト対象データを書き込む。【選択図】図３
2011242840.tif 000002
【特許請求の範囲】
【請求項１】
複数の物理記憶デバイスと、
ホスト装置と前記複数の物理記憶デバイスとに接続されたコントローラと
を有し、
複数の仮想ボリュームと、前記複数の仮想ボリュームに関連付けられた複数のプールがあり、
各仮想ボリュームは、Thin Provisioningが適用された仮想的な論理ボリュームであり、複数の仮想領域で構成され、
各プールは、前記複数の物理記憶デバイスに基づく複数の物理領域で構成された記憶領域であり、
前記複数のプールのうちの少なくとも１つのプールに、前記複数の仮想ボリュームのうちの２以上の仮想ボリュームが関連付けられており、
各仮想ボリュームに、前記複数のプールのうちの２以上のプールが関連付けられており、
各仮想ボリュームについて、関連付けられている２以上のプールに優先順位があり、
前記コントローラは、
（Ａ）ライトコマンド及びライト対象データを前記ホスト装置から受信し、
（Ｂ）前記ライトコマンドから特定されるライト先の仮想領域が未割当ての仮想領域であれば、そのライトコマンドから特定されるライト先の仮想ボリュームに関連付けられている２以上のプールの優先順位を基に、それら２以上のプールから１つのプールを選択し、選択したプール内の未割当ての物理領域を前記ライト先の仮想領域に割り当て、割り当てた物理領域に、前記ライト対象データを書き込む、
ストレージ装置。
【請求項２】
請求項１記載のストレージ装置であって、
各プールについて、プールの使用率と比較される閾値である使用率閾値があり、
プールの使用率は、そのプールの容量に対する、そのプールにおける割当て済みの物理領域の総容量の割合であり、
前記（Ｂ）において、前記選択されたプールが、前記ライト先の仮想ボリュームについて最も優先順位が高いプール以外のプールである場合、前記選択されたプールは、前記ライト先の仮想ボリューム以外の仮想ボリュームに優先順位が最も高いプールとして関連付けられており、前記コントローラは、
（ｂ１）前記選択されたプールの使用率が、そのプールの使用率閾値を超えているか否かを判断し、
（ｂ２）前記（ｂ１）の判断の結果が否定的の場合、前記選択されたプール内の未割当ての物理領域を前記ライト先の仮想領域に割り当て、割り当てた物理領域に、前記ライト対象データを書き込み、
（ｂ３）前記（ｂ１）の判断の結果が肯定的の場合、前記選択されたプール内の未割当ての物理領域を前記ライト先の仮想領域に割り当てない、
ストレージ装置。
【請求項３】
請求項２記載のストレージ装置であって、
前記コントローラは、前記（ｂ３）において、前記ライト先の仮想ボリュームに関連付けられている２以上のプールから、前記選択されたプールの優先順位より優先順位が低いプールを選択し、その選択したプールについて、前記（ｂ１）を行う、
ストレージ装置。
【請求項４】
請求項３記載のストレージ装置であって、
各仮想ボリュームについて、関連付けられている２以上のプールのうちの１つが、物理領域の現在の割当て元であるカレントプールであり、
前記（Ｂ）において、前記選択されたプールは、カレントプールであり、
前記（ｂ３）が行われた場合、前記コントローラは、前記ライト先の仮想ボリュームについてのカレントプールを、前記（ｂ３）で選択したプールに変更する、
ストレージ装置。
【請求項５】
請求項４記載のストレージ装置であって、
各仮想ボリュームについて、カレントプールは、最初、優先順位が最も高いプールである、
ストレージ装置。
【請求項６】
請求項１記載のストレージ装置であって、
前記コントローラは、前記（Ｂ）において、
（ｘ１）前記選択したプールに未割当ての物理領域があるか否かを判断し、
（ｘ２）前記（ｘ１）の判断の結果が肯定的であれば、前記選択したプール内の未割当ての物理領域を前記ライト先の仮想領域に割り当て、割り当てた物理領域に、前記ライト対象データを書き込み、
（ｘ３）前記（ｘ１）の判断の結果が否定的であれば、前記選択したプールの優先順位より低い優先順位のプールを選択し、その後、前記（ｘ１）を行う、
ストレージ装置。
【請求項７】
請求項６記載のストレージ装置であって、
各仮想ボリュームについて、関連付けられている２以上のプールのうちの１つが、物理領域の現在の割当て元であるカレントプールであり、
前記（ｘ１）における前記選択したプールは、カレントプールであり、
前記（ｘ３）が行われた場合、前記コントローラは、前記ライト先の仮想ボリュームについてのカレントプールを、前記（ｘ３）で選択されたプールに変更する、
ストレージ装置。
【請求項８】
請求項７記載のストレージ装置であって、
前記コントローラは、仮想ボリュームについて、その仮想ボリュームのカレントプールより優先順位が高いプールに、割当て可能な物理ページが存在するか否かを判断し、その判断の結果が肯定的の場合に、そのプールを、カレントプールとする、
ストレージ装置。
【請求項９】
請求項６記載のストレージ装置であって、
各プールについて、プールの使用率と比較される閾値である使用率閾値があり、
プールの使用率は、そのプールの容量に対する、そのプールにおける割当て済みの物理領域の総容量の割合であり、
前記（Ｂ）において、前記選択されたプールが、前記ライト先の仮想ボリュームについて最も優先順位が高いプール以外のプールである場合、前記選択されたプールは、前記ライト先の仮想ボリューム以外の仮想ボリュームに優先順位が最も高いプールとして関連付けられており、前記コントローラは、前記（ｘ２）において、
（ｘ２１）前記選択されたプールの使用率が、そのプールの使用率閾値を超えているか否かを判断し、
（ｘ２２）前記（ｘ２１）の判断の結果が否定的の場合に、前記選択されたプール内の未割当ての物理領域を前記ライト先の仮想領域に割り当て、割り当てた物理領域に、前記ライト対象データを書き込み、
（ｘ２３）前記（ｘ２１）の判断の結果が肯定的の場合、前記選択したプールの優先順位より低い優先順位のプールを選択し、その後、前記（ｘ１）を行う、
ストレージ装置。
【請求項１０】
請求項１記載のストレージ装置であって、
前記コントローラは、前記複数の仮想ボリュームから１つの仮想ボリュームを選択し、選択した仮想ボリュームについて、下記（ｆ１）乃至（ｆ３）を行う、
（ｆ１）前記選択した仮想ボリュームに関連付けられている２以上のプールから、最も優先順位が高いプール以外のプールを選択する、
（ｆ２）前記（ｆ１）で選択したプールより優先順位が高いプールに割当て可能な物理領域があるか否かを判断する、
（ｆ３）前記（ｆ２）の判断の結果が肯定的の場合、前記（ｆ１）で選択したプールにおける割当て済みの物理領域のうちの、前記選択した仮想ボリュームに割り当てられている物理領域から、前記（ｆ１）で選択したプールより優先順位が高いプール内の物理領域に、データをコピーする、
ストレージ装置。
【請求項１１】
請求項１記載のストレージ装置であって、
各仮想ボリュームについての、関連付けられている２以上のプールの優先順位は、前記複数の仮想ボリュームにアクセスする複数のホスト装置の重要度を基に決定された順位である、
ストレージ装置。
【請求項１２】
請求項１１記載のストレージ装置であって、
各仮想ボリュームについて、関連付けられている３以上のプールの優先順位のうち、最も優先順位以外の優先順位は、その仮想ボリュームが関連付けられているプールに関連付けられている他の仮想ボリュームにアクセスするホスト装置の重要度が低いほど、高い、
ストレージ装置。
【請求項１３】
請求項１２記載のストレージ装置であって、
各仮想ボリュームについて、最も優先順位が高いプール以外の２以上のプールに関連付けられている２以上の他の仮想ボリュームにアクセスする２以上のホスト装置の重要度が同じ場合、それら２以上のプールの優先順位は、プールの基になっている物理記憶デバイスのアクセス性能が高いほど、高い、
ストレージ装置。
【請求項１４】
複数の仮想ボリュームと前記複数の仮想ボリュームに関連付けられた複数のプールとを有するシステムでの記憶制御方法であって、
（Ａ）ライトコマンド及びライト対象データを前記ホスト装置から受信し、
（Ｂ）前記ライトコマンドから特定されるライト先の仮想領域が未割当ての仮想領域であれば、そのライトコマンドから特定されるライト先の仮想ボリュームに関連付けられている２以上のプールの優先順位を基に、それら２以上のプールから１つのプールを選択し、選択したプール内の未割当ての物理領域を前記ライト先の仮想領域に割り当て、割り当てた物理領域に、前記ライト対象データを書き込み、
各仮想ボリュームは、Thin Provisioningが適用された、複数の仮想領域で構成された仮想的な論理ボリュームであり、
各プールは、前記複数の物理記憶デバイスに基づく複数の物理領域で構成された記憶領域であり、
前記複数のプールのうちの少なくとも１つのプールに、前記複数の仮想ボリュームのうちの２以上の仮想ボリュームが関連付けられており、
各仮想ボリュームに、前記複数のプールのうちの２以上のプールが関連付けられており、
各仮想ボリュームについて、関連付けられている２以上のプールに優先順位がある、
記憶制御方法。
【請求項１５】
ホスト装置に対する第１のインタフェース装置と、
複数の物理記憶デバイスに対する第２のインタフェース装置と、
記憶資源と、
前記第１のインタフェース装置、前記第２のインタフェース装置及び前記記憶資源に接続されたプロセッサと
を有し、
複数の仮想ボリュームと、前記複数の仮想ボリュームに関連付けられた複数のプールがあり、
各仮想ボリュームは、Thin Provisioningが適用された仮想的な論理ボリュームであり、複数の仮想領域で構成され、
各プールは、前記複数の物理記憶デバイスに基づく複数の物理領域で構成された記憶領域であり、
前記複数のプールのうちの少なくとも１つのプールに、前記複数の仮想ボリュームのうちの２以上の仮想ボリュームが関連付けられており、
各仮想ボリュームに、前記複数のプールのうちの２以上のプールが関連付けられており、
前記記憶資源は、ボリューム管理情報を記憶し、
前記ボリューム管理情報は、各仮想ボリュームについて、関連付けられている２以上のプールの優先順位を表し、
（Ａ）前記第１のインタフェース装置が、ライトコマンド及びライト対象データを前記ホスト装置から受信し、
（Ｂ）前記プロセッサが、前記ライトコマンドから特定されるライト先の仮想領域が未割当ての仮想領域であれば、前記ボリューム管理情報が表す、そのライトコマンドから特定されるライト先の仮想ボリュームに関連付けられている２以上のプールの優先順位、を基に、それら２以上のプールから１つのプールを選択し、選択したプール内の未割当ての物理領域を前記ライト先の仮想領域に割り当て、割り当てた物理領域に、前記第２のインタフェースを介して、前記ライト対象データを書き込む、
記憶制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇが適用された記憶制御に関する。
【背景技術】
【０００２】
従来、ストレージ装置では、一般に、複数のデータ記憶媒体がＲＡＩＤ（Redundant  Array  Of  Independent/Inexpensive  Disks）技術を用いて管理されている。複数のデータ記憶媒体は、ＲＡＩＤグループという単位で管理されている。ＲＡＩＤグループが提供する記憶領域は、論理的に区切られることがある。ストレージ装置は、この論理的に区切られた記憶領域（又は、ＲＡＩＤグループが提供する記憶領域全体）を、「論理ボリューム」として、ホスト装置（例えば、１以上の物理的又は仮想的なコンピュータで構成されたシステム）に提供する。
【０００３】
近年、情報量の増大に伴い、Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ（Dynamic  Provisioningとも呼ばれる）が適用されたストレージ装置に注目が集まっている。このストレージ装置は、一般に、複数の仮想ページで構成された仮想的な論理ボリューム（以下、仮想ＶＯＬ）を提供し、複数の物理ページで構成されたプールを有する。ストレージ装置は、仮想ページに対するデータの書込みの際に、書込み先の仮想ページが未割当ての仮想ページであれば、その仮想ページに物理ページをプールから割当て、割り当てた物理ページに書込み対象のデータを書き込む。「未割当ての仮想ページ」とは、物理ページが割り当てられていない仮想ページ、又は、実質的に物理ページが割り当てられていない仮想ページ（例えば、所定のデータが書き込まれた所定の物理ページが割り当てられている仮想ページ）である。
【０００４】
このように、Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇによれば、ホスト装置からのデータの書き込みを契機に、仮想ＶＯＬに、プールの記憶領域の一部（物理ページ）が動的に割り当てられる。仮想ＶＯＬは、物理的な記憶領域ではなく、ユーザが使用できるように定義された仮想的な記憶領域である。仮想ＶＯＬの記憶容量は、ストレージ装置の物理的な記憶容量を超えていても良い。
【０００５】
ところで、プールから物理ページを割り当てるためには、プールの空き容量がゼロより大きいことが必要になる。「プールの空き容量」とは、プールにおける、１以上の空き物理ページ（仮想ページに割り当て可能な物理ページ）の総記憶容量である。
【０００６】
プールの空き容量を増やす方法として、例えば、プール容量の拡張、或いは、ゼロデータ削除がある。
【０００７】
プール容量の拡張とは、プールを構成する物理ページの数を増やすことにより、プール容量を拡張することである。
【０００８】
ゼロデータ削除とは、仮想ＶＯＬに割り当てられている物理ページのうち、ゼロデータ（全てのビットの値が“０”であるデータ）を記憶している物理ページを仮想ＶＯＬから解放することである。解放された物理ページは、空き物理ページとなるので、プールの空き容量が増える。
【０００９】
プール空き容量を増やす方法として、さらに、特許文献１に開示の方法がある。特許文献１によれば、複数のプールが存在している環境において、或るプール内の容量が枯渇する恐れがある場合には、そのプールから別のプールにデータをコピーさせる。データのコピー元の物理ページが、空き物理ページとなるので、当該プールの空き容量が増える。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００８−１８６１７２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
一般に、１つのプールに、複数の仮想ＶＯＬが関連付けられる（仮想ＶＯＬとプールはＮ対１である）。しかし、この場合、用途が異なる複数のホスト装置が複数の仮想ＶＯＬに対してＩ／Ｏ（Input/Output）が行われることに伴い、１つのプールにＩ／Ｏが集中することになる。それ故、そのプールの基になっている記憶媒体にＩ／Ｏが集中する。さらに、プールで障害が発生すると（例えば、プールの基になっているいずれかの記憶媒体で障害が発生すると）、当該プールに関連付けられているすべての仮想ＶＯＬが影響を受けてしまう。従って、上記を考慮すると、プールを用途毎に分けることが考えられる。
【００１２】
しかしながら、プールを用途毎に複数に分けた場合、複数のホスト装置からのデータが複数のプールに分散してしまうため、プールの使用効率が良くない。
【００１３】
また、プールを用途毎に複数に分けた場合、仮想ＶＯＬには、その仮想ＶＯＬの用途に対応したプールのみから物理ページが割り当てられる。そのため、或る用途のプールにＩ／Ｏが集中して突発的にそのプールの空き容量が減少した場合、他の用途のプールの空き容量が十分あっても、当該プールの空き容量が枯渇してしまうおそれがある。当該プールの空き容量が枯渇すると、そのプールの用途に対応した業務（例えば、仮想ＶＯＬに対するＩ／Ｏ）が停止してしまう。
【００１４】
本発明の目的は、プールの使用効率が低下せず、且つ、プールの空き容量が枯渇しても業務が停止しないようにすることにある。
【課題を解決するための手段】
【００１５】
複数の仮想ボリュームと、複数の仮想ボリュームに関連付けられた複数のプールがある。各仮想ボリュームは、Thin Provisioningが適用された仮想的な論理ボリュームであり、複数の仮想領域で構成される。各プールは、前記複数の物理記憶デバイスに基づく複数の物理領域で構成された記憶領域である。複数のプールのうちの少なくとも１つのプールに、複数の仮想ボリュームのうちの２以上の仮想ボリュームが関連付けられる。各仮想ボリュームに、複数のプールのうちの２以上のプールが関連付けられる。各仮想ボリュームについて、関連付けられている２以上のプールに優先順位がある。記憶制御装置は、ライトコマンド及びライト対象データをホスト装置から受信し、そのライトコマンドから特定されるライト先の仮想領域が未割当ての仮想領域であれば、そのライトコマンドから特定されるライト先の仮想ボリュームに関連付けられている２以上のプールの優先順位を基に、それら２以上のプールから１つのプールを選択する。記憶制御装置は、選択したプール内の未割当ての物理領域をライト先の仮想領域に割り当て、割り当てた物理領域に、ライト対象データを書き込む。
【００１６】
記憶制御装置は、ストレージ装置が有するコントローラであっても良いし、ストレージ装置とホスト装置との間の通信を中継する装置（例えば、サーバ装置、或いは、インテリジェントなスイッチ装置）であっても良い。
【発明の効果】
【００１７】
本発明によれば、プールの使用効率が低下せず、且つ、プールの空き容量が枯渇しても業務が停止しないようにすることができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の一実施例における計算機システムの構成例を示す図である。
【図２】ストレージ装置の詳細な構成例を示す図である。
【図３】複数の仮想ボリュームと複数のプールとの関係の一例を示す概念図である。
【図４】１つのプールを構成する複数のプールＶＯＬと、それら複数のプールＶＯＬとＲＡＩＤグループとの関係の一例を示す概念図である。
【図５】仮想ＶＯＬとその仮想ＶＯＬに関連付けられたプールとの関係の一例を示す図である。
【図６】メモリ内のプログラム及び情報を示す図である。
【図７】仮想ＶＯＬ構成管理テーブルの構成例を示す図である。
【図８】プール構成管理テーブルの構成例を示す図である。
【図９】プールＶＯＬ構成管理テーブルの構成例を示す図である。
【図１０】ＲＡＩＤグループ構成管理テーブルの構成例を示す図である。
【図１１】仮想ＶＯＬマップ情報テーブルの構成例を示す図である。
【図１２】プールマップ情報テーブルの構成例を示す図である。
【図１３】ライト処理手順を示すフローチャートである。
【図１４】空きプール検索処理手順を示すフローチャートである。
【図１５】配置最適化処理手順を示すフローチャートである。
【図１６】カレントプール変更処理手順を示すフローチャートである。
【図１７】図１１に示した仮想ＶＯＬマップ情報テーブル２２８００に従って、仮想ページと物理ページとの対応関係を具体的に示した図である。
【図１８】図１２に示したプールマップ情報テーブル２２９００に従って、各プールの構成を具体的に示した図である。
【図１９】ホスト装置（用途）の重要度に基づいてプールの優先順位を決定する方法を説明するための図である。
【発明を実施するための形態】
【００１９】
以下、本発明の一実施例を説明する。なお、以下の説明では、「ｘｘｘテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造（例えば、キュー）で表現されていてもよい。データ構造に依存しないことを示すために「ｘｘｘテーブル」を「ｘｘｘ情報」と呼ぶことができる。
【００２０】
また、以下の説明では、種々の対象の識別情報として、番号が使用されるが、他種の識別情報（例えば、英字、数字、或いは他の符号、又は、それらの組合せ）も採用可能である。
【００２１】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェース装置（例えば通信ポート）を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、ストレージ装置のコントローラが行う処理としても良い。また、プロセッサは、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。コンピュータプログラムは、プログラムソースから各計算機にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【００２２】
また、本実施例で言う「用途」は、例えば、以下の（Ａ）及び（Ｂ）、
（Ａ）ホスト装置で実行される一つ以上のアプリケーションプログラム、
（Ｂ）（ｂ１）当該プログラムの設定情報、（ｂ２）当該プログラムが処理対象とするデータ、（ｂ３）当該プログラムが受信する処理要求の内容、及び（ｂ４）当該プログラムが処理要求を受信する頻度、のうちの少なくとも１つ、
によって定められる、ホスト装置が行う一連のオペレーションである。
【００２３】
図１は、本発明の一実施例における計算機システムの構成例を示す。
【００２４】
計算機システムにおいて、ストレージ装置２００００と、ホスト装置１００００が、ネットワーク３００００によって接続される。ホスト装置１００００は、例えば、サーバ、ワークステーション、メインフレームなどの１以上の物理的なコンピュータ、或いは、物理的なコンピュータが有するハードウェア資源（例えば、プロセッサ、メモリ）が割り当てられた１以上の仮想的なコンピュータである。ネットワーク３００００は、例えば、ＳＡＮ（Storage  Area  Network）、ＬＡＮ（Local  Area  Network）などである。
【００２５】
図２は、ストレージ装置２００００の詳細な構成例を示す。
【００２６】
ストレージ装置２００００は、コントローラ１０と、コントローラ１０に接続されたストレージユニット２３０００とを有する。
【００２７】
コントローラ１０は、例えば、下記の要素、
（＊）ネットワーク３００００を介してホスト装置１００００に接続するためのインタフェース装置（ホスト装置Ｉ／Ｆ）２５０００、
（＊）ストレージユニット２３０００内のハードディスクドライブ（以下、ＨＤＤ）２４０００に接続されるインタフェース装置（ＨＤＤ  Ｉ／Ｆ）１１、
（＊）ストレージ装置２００００内の制御を行うプロセッサ２１０００、
（＊）プロセッサ２１０００が使用するメモリ２２０００、
を有する。これらの要素は、すべて内部バス等で接続される。
【００２８】
ストレージユニット２３０００は、データ記憶媒体が格納されるユニットであり、具体的には、複数のＨＤＤ２４０００を有する。複数のＨＤＤ２４０００は、複数のＲＡＩＤグループ（図示せず）の構成要素で良い。各ＲＡＩＤグループは、２以上のＨＤＤで構成されており、所定のＲＡＩＤレベルで、データを記憶する。
【００２９】
ＨＤＤ２４０００は、例えばＦＣ（Fibre  Channel）ディスクドライブ、ＳＡＳ（Serial  Attached  SCSI）ディスクドライブ、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）ディスクドライブなどである。
【００３０】
本実施例では、データ記憶媒体として、ＨＤＤ２４０００を用いているが、フラッシュメモリドライブ等の他のデータ記憶媒体を用いてもよい。また、ストレージ装置２００００に接続された外部のストレージ装置が、ストレージユニット２３０００の全部又は一部であってよい。
【００３１】
図３は、複数の仮想ＶＯＬ２６０００と複数のプール２７０００との対応関係の一例を示す概念図である。なお、以下の説明では、論理ボリュームを「ＶＯＬ」と略す。また、以下の説明では、同種の複数の要素を、要素の識別番号を用いて区別することがある。例えば、複数の要素Ａを区別する場合、「Ａ＃ｘ」と記載することがある。「Ａ＃ｘ」は、識別番号がｘの要素Ａであることを意味する。“ｘ”は、０以上の整数である。
【００３２】
各仮想ＶＯＬ２６０００は、Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇが適用された仮想的な論理ボリュームであり、複数の仮想ページで構成されている。仮想ページは、仮想的な記憶領域であり、例えば、アドレス範囲である。アドレスは、例えば、ＬＢＡ（Logical Block Address）である。
【００３３】
一般的に、各プール２７０００は、複数の物理ページ（物理的な記憶領域）で構成される。本実施例では、各プール２７０００は、１以上のプールＶＯＬ２８０００で構成され、各プールＶＯＬ２８０００が、２以上の物理ページで構成されている。すなわち、各プール２７０００は、複数の物理ページより構成される物理ページ群である。各プールＶＯＬ２８０００は、ストレージユニット２３０００に基づくＶＯＬ（実体的なＶＯＬ）である。
【００３４】
複数のプール２７０００のうちの少なくとも１つのプール２７０００に、複数の仮想ＶＯＬ２６０００のうちの１以上の仮想ＶＯＬ２６０００が関連付けられる。
【００３５】
一方、各仮想ＶＯＬ２６０００には、複数のプール２７０００のうちの１以上のプール２７０００が関連付けられる。少なくとも１つの仮想ＶＯＬには、２以上のプールが関連付けられる。そして、各仮想ＶＯＬ２６０００について、関連付けられているプールには、優先順位がある。優先順位は、高い方から順に、「プライマリ」、「セカンダリ」、「サード」、…、となる。
【００３６】
プールの優先順位は、絶対的な順位ではなく、関連付けられる仮想ＶＯＬによって異なることがある。すなわち、２以上の仮想ＶＯＬが関連付けられるプールの優先順位は、その関連付けられている仮想ＶＯＬによって異なることがある。具体的には、例えば、図３に示すように、仮想ＶＯＬ＃０について、プール＃１の優先順位はサードであるが、仮想ＶＯＬ＃１について、プール＃１の優先順位はプライマリである。
【００３７】
以下、優先順位がｋであるプールを「ｋプール」と言うことがある。具体的には、例えば、優先順位がプライマリのプールを「プライマリプール」と言い、優先順位がセカンダリのプールを「セカンダリプール」と言い、優先順位がサードのプールを「サードプール」と言うことがある。例えば、仮想ＶＯＬ＃０については、プール＃０がプライマリプールであり、プール＃２がセカンダリプールであり、プール＃１がサードプールである。
【００３８】
各仮想ＶＯＬ２６０００について、関連付けられている２以上のプールのうちのいずれか１つが、カレントプールである。「カレントプール」は、物理ページの現在の割当て元である。仮想ＶＯＬ２６０００内の仮想ページには、その仮想ＶＯＬ２６０００にとってのカレントプールから、物理ページが割り当てられる。
【００３９】
各仮想ＶＯＬ２６０００について、カレントプールは、最初、その仮想ＶＯＬ２６０００について優先順位の最も高いプール（つまりプライマリプール）である。従って、最初、例えば、仮想ＶＯＬ＃０のカレントプールは、プール＃０であり、仮想ＶＯＬ＃Ｎのカレントプールは、プール＃Ｎである。
【００４０】
各仮想ＶＯＬ２６０００について、カレントプールの空き容量が枯渇した場合、そのカレントプールより優先順位が１つ低いプールが、カレントプールとなる。従って、例えば、仮想ＶＯＬ＃０について言えば、カレントプールは、プール＃０（プライマリプール）からプール＃２（セカンダリプール）に変わり、その後、プール＃２（セカンダリプール）からプール＃１（サードプール）に変わる。つまり、各仮想ＶＯＬについて、カレントプールは、プールの優先順位に基づいて変わる。
【００４１】
図３の説明によれば、プールは、用途毎に分けられておらず、複数の仮想ＶＯＬが関連付けられる。このため、プールの使用効率の低下を避けることができる。
【００４２】
また、図３の説明によれば、仮想ＶＯＬ内の仮想ページに物理ページを割り当てる必要がある場合、その仮想ＶＯＬにとってのカレントプールの空き容量が枯渇していても（空き物理ページ数がゼロであっても）、その仮想ＶＯＬに関連付けられている別のプールがカレントプールとされ、その別のプールから物理ページが割り当てられる。このため、プールの空き容量が枯渇しても業務が停止しないようにすることができる。
【００４３】
なお、仮想ＶＯＬ２６０００とプール２７０００とを関連付ける際や、各仮想ＶＯＬについてプールの優先順位を決定する際に、ホスト装置１００００（用途）の重要度を参酌することができる。その具体例は、例えば、下記の通りである。仮想ＶＯＬをプールに関連付けること、及び／又は、各仮想ＶＯＬについてプールの優先順位を決定することは、人間（例えば管理者）が行っても良いし、コントローラ１０が行っても良い。
【００４４】
（具体例１）重要度が高い（例えば重要度が最も高い）ホスト装置からアクセスされる（Ｉ／Ｏが行われる）仮想ＶＯＬ２６０００に関連付けられるプライマリプールは、その仮想ＶＯＬ２６０００の専用のプールとするため、他の仮想ＶＯＬ２６０００に関連付けないこともできる。具体的には、例えば、メモリ２２０００が、ホスト装置毎に重要度とアクセス先の仮想ＶＯＬの識別番号とを有するホスト管理テーブル（図示せず）を記憶して良い。コントローラ１０は、ホスト管理テーブルを基に、どの重要度のホスト装置がどの仮想ＶＯＬにアクセスするかを特定し、特定された仮想ＶＯＬに関連付けられたプライマリプールには、他の仮想ＶＯＬを関連付けないよう制御することができる。図３の例によれば、プール＃０が、仮想ＶＯＬ＃０以外の仮想ＶＯＬに関連付けられていないため、仮想ＶＯＬ＃０の専用のプールである。
【００４５】
（具体例２）図１９に示すように、各仮想ＶＯＬについて、まず、関連付けられる２以上のプールのうちの１つのプールの優先順位がプライマリとされる。その後、ホスト装置の重要度を基に、各仮想ＶＯＬについて、プライマリ以外の１以上の優先順位が決定される。具体的には、各仮想ＶＯＬについて、プライマリプール以外のプールの優先順位は、そのプールがプライマリプールとして関連付けられている他の仮想ＶＯＬにアクセスするホスト装置の重要度が低いほど、高い。図１９の例によれば、仮想ＶＯＬ＃０はプール＃０〜＃３に関連付けられており、プライマリプール＃０以外のプール＃１〜＃３の優先順位は、例えば、コントローラ１０によって、前述のホスト管理テーブルを基に、以下のように決定される。なお、以下の説明では、重要度は、「高」、「中」、「低」の３段階であるが、重要度は、３段階未満であっても３段階より多くても良い。また、以下の説明では、重要度が「高」に分類されるホスト装置（用途）を「高ホスト装置」と言い、重要度が「中」に分類されるホスト装置を「中ホスト装置」と言い、重要度が「低」に分類されるホスト装置を「低ホスト装置」と言う。
（＊）コントローラ１０が、低ホスト装置からアクセスされる仮想ＶＯＬ＃２を特定し、且つ、その仮想ＶＯＬ＃２に関連付けられているプール＃１を特定する。コントローラ１０は、仮想ＶＯＬ＃０について、プール＃１の優先順位を、セカンダリに決定する。
（＊）コントローラ１０が、中ホスト装置からアクセスされる仮想ＶＯＬ＃１を特定し、且つ、その仮想ＶＯＬ＃１に関連付けられているプール＃２及び＃３を特定する。コントローラ１０は、ホスト装置の重要度が同一である２以上のプール（＃２及び＃３）のそれぞれの優先順位を、それら２以上のプール（＃２及び＃３）の属性を基に決定する。その属性は、例えば、プールのアクセス性能（データの入出力の速度）又はそれに影響する属性（例えば、プールの基になっているＨＤＤの種類）であっても良い。具体的には、例えば、アクセス性能のより優れているプールがより高い優先順位とされて良い。図１９の例によれば、プール＃２が、ＳＡＳ  ＨＤＤに基づいていて、プール＃３が、ＳＡＳ  ＨＤＤよりアクセス性能の低いＳＡＴＡ  ＨＤＤに基づいている。このため、プール＃３の優先順位がフォースとされ、プール＃２の優先順位が、プール＃３の優先順位より高いサードとされる。
【００４６】
具体例２によれば、仮想ＶＯＬ＃０について、低ホスト装置からアクセスされる仮想ＶＯＬに関連付けられているプール＃１の優先順位の方が、中ホスト装置からアクセスされる仮想ＶＯＬに関連付けられているプール＃２の優先順位よりも、高くされる。その理由は、重要度が低いホスト装置からアクセスされる仮想ＶＯＬに関連付けられているプールの空き容量が枯渇することは、重要度が高いホスト装置からアクセスされる仮想ＶＯＬに関連付けられているプールの空き容量が枯渇することに比べて、影響は小さいからである。
【００４７】
図４は、１つのプール２７０００を構成する複数のプールＶＯＬ２８０００と、それら複数のプールＶＯＬ２８０００とＲＡＩＤグループ２９０００との関係の一例を示す概念図である。
【００４８】
１つ以上のＲＡＩＤグループ２９０００を基に、１つ以上のＶＯＬが作成される。つまり、１つのＶＯＬは、１つのＲＡＩＤグループを基に作成されても良いし、複数のＲＡＩＤグループを基に作成されても良い。また、１つのＲＡＩＤグループを基に、複数のＶＯＬが作成されても良い。
【００４９】
例えば、図４において、１つのプール２７０００が、４つのプールＶＯＬ＃０〜＃３で構成されている。１つのＲＡＩＤグループ＃０を基に、１つのプールＶＯＬ＃０が作成されている。また、１つのＲＡＩＤグループ＃１を基に、２つのプールＶＯＬ＃１及び＃２が作成されている。また、２つのＲＡＩＤグループ＃２及び＃３を基に、１つのプールＶＯＬ＃３が作成されている。プールＶＯＬ＃３は、例えば、ＲＡＩＤグループ＃２を基に作成されたＶＯＬとＲＡＩＤグループ＃３を基に作成されたＶＯＬとが連結されたＶＯＬ（拡張論理ＶＯＬ）で良い。
【００５０】
図５は、仮想ＶＯＬ２６０００とその仮想ＶＯＬ２６０００に関連付けられたプール２７０００との関係の一例を示す図である。
【００５１】
１つの仮想ＶＯＬ２６０００に対して、プール＃０（プライマリプール），プール＃１（サードプール），プール＃２（セカンダリプール）の合計３つのプールが関連付けられている。
【００５２】
仮想ＶＯＬ２６０００は、初めに仮想ＶＯＬ容量（仮想ＶＯＬの記憶容量）が定義された時点では、物理ページが割り当てられていない。ホスト装置１００００から仮想ＶＯＬ２６０００へのデータの書き込みを契機に、書込み先の未割当ての仮想ページに、３つのプール２７０００のうちのカレントプールから、物理ページが割り当てられる。
【００５３】
すなわち、「ページ」とは、記憶領域の割り当てを行う際の最小単位であり、仮想ＶＯＬ２６０００内の書込み先の仮想ページに対して、プール２７０００内の物理ページが動的に割り当てられる。ここで、仮想ＶＯＬ２６０００における割り当て済みの仮想ページ（物理ページが割り当てられている仮想ページ）の総和を容量に変換した数値が、「仮想ＶＯＬ使用容量」である。
【００５４】
仮想ＶＯＬ２６０００に関連付けられているプール２７０００のうち、優先順位の高いプールから優先的にカレントプールとされる。このため、初め、プライマリプール＃０が、カレントプールであり、プライマリプール＃０の空き容量が枯渇した場合、セカンダリプール＃２が、カレントプールとされる。その後、セカンダリプール＃２の空き容量が枯渇した場合、サードプール＃１が、カレントプールとされる。
【００５５】
しかしながら、前述の環境において、プライマリプール＃０の空き容量が枯渇した場合、仮想ＶＯＬ＃０に無制限にセカンダリプール＃２及び／又はサードプール＃１から物理ページが割り当てられるとすると、セカンダリプール＃２又はサードプール＃１をプライマリプールとする他の仮想ＶＯＬ（その仮想ＶＯＬを利用するホスト装置）に影響を与えることになる。
【００５６】
そこで、本実施例では、「判定基準値」がプール毎に付与される。カレントプールがプライマリプール以外のプールであって、そのプールの使用率がそのプールの判定基準値以上の場合、そのプールから仮想ＶＯＬに物理ページが割り当てられない。つまり、プライマリプール以外のプールから仮想ＶＯＬへの物理ページの割り当てに制限がかけられる。そのプールをプライマリプールとしている他の仮想ＶＯＬに割り当てるための物理ページを確保しておくためである。この詳細な方法については、後に図８を参照して詳しく説明する。なお、プールの使用率とは、プール容量に対するプールの使用容量の割合である。プールの使用容量とは、そのプールにおける、仮想ＶＯＬに割り当てられている物理ページの総容量である。
【００５７】
図６は、メモリ２２０００内のプログラム及び情報を示す。
【００５８】
メモリ２２０００は、下記のコンピュータプログラム及び情報、
（＊）ホスト装置１００００からのＩ／Ｏ要求（書込み要求、読出し要求）を処理するためのＩ／Ｏ処理プログラム２２１００、
（＊）カレントプールの空き容量が枯渇している場合に空き容量を有するプールを検索する空きプール検索処理プログラム２２２００、
（＊）空き容量が枯渇したプライマリプールの空き容量を増加させた後に、プライマリプール以外のプール内のデータをプライマリプールに戻すための配置最適化処理プログラム２２３００、
（＊）カレントプールを変更するカレントプール変更処理プログラム２２３５０、
（＊）各仮想ＶＯＬに関する情報を有する仮想ＶＯＬ構成管理テーブル２２４００、
（＊）各プールに関する情報を有するプール構成管理テーブル２２５００、
（＊）各プールＶＯＬに関する情報を有するプールＶＯＬ構成管理テーブル２２６００、
（＊）各ＲＡＩＤグループに関する情報を有するＲＡＩＤグループ構成管理テーブル２２７００、
（＊）仮想ページと物理ページとの対応関係を表す情報を有する仮想ＶＯＬマップ情報テーブル２２８００、
（＊）各物理ページのステータス（割当て済みか否か）に関する情報を有するプールマップ情報テーブル２２９００、
を記憶する。但し、プールＶＯＬ構成管理テーブル２２６００、ＲＡＩＤグループ構成管理テーブル２２７００については、前記の各プログラムでは直接利用されないで良い。
【００５９】
図７は、仮想ＶＯＬ構成管理テーブル２２４００の構成を示す。
【００６０】
仮想ＶＯＬ構成管理テーブル２２４００は、仮想ボリューム毎に、下記の情報、
（＊）仮想ボリュームの識別番号である仮想ＶＯＬ番号２２４１０、
（＊）仮想ボリュームの容量を表す値である仮想ＶＯＬ容量２２４２０、
（＊）仮想ボリュームの使用容量を表す値である仮想ＶＯＬ使用容量２２４３０、
（＊）仮想ボリュームに関連付けられているプールの数を表す値である関連付けプール数２２４４０、
（＊）仮想ボリュームについて現在採用されているプール優先順位を表す値であるカレントプール２２４５０、
（＊）仮想ボリュームに関連付けられているプールとその優先順位を表すプール番号２２４６０、
を有する。
【００６１】
仮想ボリュームの「使用容量」とは、前述したように、物理ページが割り当てられている仮想ページの総和を容量に変換した数値、すなわち、物理ページが割り当てられている仮想ページの総容量である。
【００６２】
関連付けプール数２２４４０は、プール番号２２４６０に登録されているプールの合計数（例えばＮ／Ａ以外の合計数）を表す。
【００６３】
プール番号２２４６０は、ｑ個のカラムで構成されている（ｑは１以上の整数）。各カラムは、優先順位ｑを表す値である「Ｐｑ」と（ＰｑのＰは「Priority」の略）、Ｐｑに対応するプールの識別番号とを有する。例えば、Ｐ１、Ｐ２及びＰ３は、それぞれ、プライマリプール、セカンダリプール及びサードプールを示す。各仮想ＶＯＬには、最大ｑ個のプールを関連付けることができる。仮想ＶＯＬに関連付けられるプールの数がｑ未満の場合、少なくとも最下位の優先順位に対応したカラムには、プールが関連付けられていないことを表す値（例えばＮ／Ａ）が登録される。
【００６４】
図７の例によれば、仮想ＶＯＬ＃０について、下記のこと、
（＊）関連付けられているプールの数が３（プライマリプール、セカンダリプール、サードプール）であること、
（＊）仮想ＶＯＬ＃０の容量が１０００ＧＢであること、
（＊）仮想ＶＯＬ＃０の使用容量が６２５ＧＢであること、
（＊）プライマリプールがプール＃０であり（Ｐ１が「０」）、セカンダリプールがプール＃２であり（Ｐ２が「２」）、サードプールがプール＃１（Ｐ３が「１」）であること、
（＊）カレントプールが、セカンダリプールであること（カレントプール２２４５０が「Ｐ２」）、
が分かる。
【００６５】
図８は、プール構成管理テーブル２２５００の構成を示す。
【００６６】
プール構成管理テーブル２２５００は、プール毎に、下記情報、
（＊）プールの識別番号であるプール番号２２５１０、
（＊）プール容量を表す値であるプール容量２２５２０、
（＊）プールの空き容量を表す値であるプール空き容量２２５３０、
（＊）プールの使用率を表す値であるプール使用率２２５４０、
（＊）プライマリプール以外のプールの使用率と比較される閾値（判定基準値）である判定基準値２２５５０、
（＊）プールを構成するプールＶＯＬ２８０００の識別番号であるプールＶＯＬ番号２２５６０、
を有する。
【００６７】
「プール容量２２５２０」は、プールの容量であるが、具体的には、プールを構成するプールＶＯＬの容量の総和から特定の領域（例えば、特定の情報が格納される管理領域のような、ホスト装置からのデータが格納されない領域）の容量が減算された値である。
【００６８】
「プールの空き容量２２５３０」は、プールにおける未割り当ての物理ページ（空き物理ページ）の総和を容量に変換した数値である。
【００６９】
判定基準値２２５００は、０％から１００％の任意の値で良い。ここで、０％は、例えばＮ／Ａなど、０％に相当する別の値で表されてもよい。判定基準値２２５４０が「０％」であるプールが、プライマリプール以外のプールであれば、そのプールが空き容量を有していても、そのプールから物理ページが割り当てられない。一方、判定基準値２２５４０が「１００％」であるプールが、プライマリプール以外のプールであっても、そのプールが空き容量を有してさえいれば、そのプールから物理ページが割り当てられる。
【００７０】
判定基準値２２５５０は、例えば、それに対応するプールがプライマリプールとして関連付けられている仮想ＶＯＬにアクセスするホスト装置（用途）の重要度に応じて決定されて良い。具体的には、例えば、下記のように決定されて良い。以下の説明では、重要度が「高」に分類されるホスト装置（業務）を「高ホスト装置」と言い、重要度が「中」に分類されるホスト装置（業務）を「中ホスト装置」と言い、重要度が「低」に分類されるホスト装置（業務）を「低ホスト装置」と言う。
（＊）高ホスト装置からアクセスされる仮想ＶＯＬのプライマリプール（この段落において「プールＸ」と言う）は、仮想ＶＯＬに専用のプールとして利用されることが好ましい。換言すれば、中ホスト装置又は低ホスト装置からアクセスされる仮想ＶＯＬにプールＸから物理ページが割り当てられることは好ましくない。このため、プールＸの判定基準値２２５５０は、「０％」とされる。これにより、中ホスト装置又は低ホスト装置からアクセスされる仮想ＶＯＬには、プールＸから物理ページが割り当てられず、プールＸ内の物理ページは、高ホスト装置からアクセスされる仮想ＶＯＬにのみ割り当てられる。
（＊）低ホスト装置からアクセスされる仮想ＶＯＬのプライマリプール（この段落において「プールＹ」と言う）は、その仮想ＶＯＬに専用のプールとする必要がない。換言すれば、高ホスト装置及び中ホスト装置からアクセスされる仮想ＶＯＬにプールＹから物理ページが無制限に割り当てられて良い。このため、プールＹの判定基準値２２５５０は、「１００％」とされる。これにより、高ホスト装置又は中ホスト装置からアクセスされる仮想ＶＯLに、プール容量が枯渇するまで、プールＹから無制限に物理ページが割り当てられる。
（＊）中ホスト装置からアクセスされる仮想ＶＯＬのプライマリプール（この段落において「プールＺ」と言う）の容量のうち、将来の或る時点までに中ホスト装置が最低限使用することが予想される容量以外の容量については、高ホスト装置又は低ホスト装置からのデータの格納に使用されても良い。つまり、プールＺの判定基準値２２５５０は、将来のある時点までに予想されるプール使用容量を基に、決定されて良い。例えば、プールＺの容量が５００ＧＢで、プールＺのプール使用率が６０％(使用容量＝３００ＧＢ)であり、１年後に４００ＧＢまで中ホスト装置によって消費されることが予想されるケースにおいては、プールＺの判定基準値２２５５０は、「８０％」とされる。これにより、プールＺのプール使用率２２５４０が８０％を超えた場合には、高ホスト装置又は低ホスト装置からアクセスされる仮想ＶＯＬに物理ページが割り当てられない。その後は、プールＺの使用率が８０％未満にならない限り、プールＺからは、中ホスト装置からアクセスされる仮想ＶＯＬにのみ物理ページが割り当てられる。これにより、高ホスト装置又は低ホスト装置からアクセスされる仮想ＶＯＬにプールＺから物理ページが割り当てられる場合でも、中ホスト装置への影響を低減することができる。
【００７１】
なお、第１のホスト装置からアクセスされる仮想ＶＯＬに関連付けられるプライマリプール（以下、この段落において「プールＪ」）の判定基準値に関わらず、以下の制御が行われて良い。すなわち、プールＪからは、第２のホスト装置（第１のホスト装置の重要度より高い重要度のホスト装置）からアクセスされる仮想ＶＯＬに物理ページが割当て可能であって、第３のホスト装置（第１のホスト装置の重要度より低い重要度のホスト装置）からアクセスされる仮想ＶＯＬに物理ページが割当て不可能とされて良い。これにより、第１のホスト装置より重要度が低い第３のホスト装置からのデータがプールＪに書き込まれたせいで第１のホスト装置からのデータをプールＪに書き込めないことを回避することができる。
【００７２】
上記のような観点を基に判定基準値を決定することは、人間（例えば管理者）が行っても良いし、コントローラ１０が行っても良い。後者の場合、コントローラ１０は、前述したホスト管理テーブル（どの仮想ＶＯＬがどの重要度に分類されているホスト装置からアクセスされるかを表す情報）を基に、各プールの判定基準値を決定することができる。
【００７３】
図９は、プールＶＯＬ構成管理テーブル２２６００の構成を示す。
【００７４】
プールＶＯＬ構成管理テーブル２２６００は、プールＶＯＬ毎に、下記情報、
（＊）プールＶＯＬの識別番号であるプールＶＯＬ番号２２６１０、
（＊）プールＶＯＬの容量を表すプールＶＯＬ容量２２６２０、
（＊）プールＶＯＬの基になっているＲＡＩＤグループの識別番号であるＲＧ番号２２６３０、
を有する。
【００７５】
図９の例によれば、プールＶＯＬ＃０について、下記のこと、
（＊）プールＶＯＬ＃０の容量が２５０ＧＢであること、
（＊）プールＶＯＬ＃０がＲＡＩＤグループ＃０に基づいていること、
が分かる。
【００７６】
図１０は、ＲＡＩＤグループ構成管理テーブル２２７００の構成を示す。
【００７７】
ＲＡＩＤグループ構成管理テーブル２２７００は、ＲＡＩＤグループ毎に、下記情報、
（＊）ＲＡＩＤグループの識別番号であるＲＧ番号２２７１０、
（＊）ＲＡＩＤグループの容量（ＶＯＬとして利用可能な容量）を示す値であるＲＧ容量２２７２０、
（＊）ＲＡＩＤグループのＲＡＩＤレベルを示すＲＡＩＤレベル２２７３０、
（＊）ＲＡＩＤグループを構成しているＨＤＤ２４０００の識別番号であるＨＤＤ番号２２７４０、
（＊）ＲＡＩＤグループを構成している各ＨＤＤ２４０００の容量を示す値であるＨＤＤ容量２２７５０、
を有する。
【００７８】
図１０の例によれば、ＲＡＩＤグループ＃０について、下記のこと、
（＊）ＲＡＩＤグループ＃０のＲＡＩＤレベルが「１＋０」であること、
（＊）ＲＡＩＤグループ＃０を構成するＨＤＤが４つであり、各ＨＤＤのＨＤＤ番号が「０」、「１」、「２」及び「３」であること、
（＊）ＲＡＩＤグループ＃０を構成する各ＨＤＤの容量が１２５ＧＢであること、
（＊）ＲＡＩＤグループ＃０を構成するＨＤＤの総容量は、５００ＧＢ（１２５ＧＢ（ＨＤＤ容量）×４（ＨＤＤ数））であるが、ＲＡＩＤレベルが「１＋０」であるため、ＶＯＬとして利用可能な容量が、２５０ＧＢ（５００ＧＢの半分）であること、
が分かる。
【００７９】
図１１は、仮想ＶＯＬマップ情報テーブル２２８００の構成を示す。
【００８０】
仮想ＶＯＬマップ情報テーブル２２８００は、仮想ページ毎に、下記情報、
（＊）仮想ページを有する仮想ＶＯＬの識別番号である仮想ＶＯＬ番号２２８１０、
（＊）仮想ページを有する仮想ＶＯＬにおける、仮想ページの識別番号、である仮想ＶＯＬ内ページ番号２２８２０、
（＊）仮想ページを有する仮想ＶＯＬにおける、仮想ページのアドレス範囲、を示す仮想ＶＯＬアドレス２２８３０、
（＊）仮想ページに割り当てられている物理ページを有するプールの識別番号であるプール番号２２８４０、
（＊）仮想ページに割り当てられている物理ページの、その物理ページを有するプール内での識別番号、を示すプール内ページ番号２２８５０、
を有する。
【００８１】
プール番号２２８４０（プール内ページ番号２２８５０）は、仮想ページに物理ページが割り当てられていない場合、割り当てられている物理ページがないことを意味する値（例えばＮ／Ａ）を示す。
【００８２】
図１１に示す仮想ＶＯＬマップ情報テーブル２２８００によれば、図１７に示す対応関係となる。すなわち、例えば、仮想ＶＯＬ＃０内の仮想ページ＃０（アドレス範囲：０−９９９）には、プール＃０内の物理ページ＃０が割り当てられていることが分かる。また、例えば、仮想ページ＃４（アドレス範囲：４０００−４９９９）には、プール＃２内の物理ページ＃１が割り当てられていることが分かる。また、例えば、プール＃１からは仮想ＶＯＬ＃０に物理ページが１つも割り当てられていないことも分かる。
【００８３】
図１２は、プールマップ情報テーブル２２９００の構成を示す。
【００８４】
プールマップ情報テーブル２２９００は、物理ページ毎に、下記情報、
（＊）物理ページを有するプールの識別番号であるプール番号２２９１０、
（＊）物理ページを有するプール内での、物理ページの識別番号、であるプール内ページ番号２２９２０、
（＊）物理ページを有するプールＶＯＬの識別番号であるプールＶＯＬ番号２２９３０、
（＊）物理ページを有するプールＶＯＬでの、物理ページのアドレス範囲、を示すプールＶＯＬアドレス２２９４０、
（＊）物理プールが仮想ＶＯＬへ割り当てられているかどうかを示す仮想ＶＯＬ割当有無２２９５０、
を有する。
【００８５】
図１２に示すプールマップ情報テーブル２２９００によれば、図１８に示す構成となる。すなわち、例えば、プール＃０内の物理ページ＃０は、プールＶＯＬ＃０のアドレス範囲：０−９９９における領域であり、プール＃２内の物理ページ＃０は、プールＶＯＬ＃４のアドレス範囲：０−９９９における領域であることが分かる。
【００８６】
次に、図１３〜図１６に示されるフローチャートを参照して、本実施例の処理手順について説明する。
【００８７】
図１３は、Ｉ／Ｏ処理プログラム２２１００により実行されるライト処理手順のフローチャートを示す。
【００８８】
ステップ２２１０１では、コントローラ１０（ホスト装置Ｉ／Ｆ２５０００）が、ライトコマンド及びライト対象データをホスト装置から受信する。ライトコマンドは、例えば、ライト先のＶＯＬの識別番号（例えばＬＵＮ（Logical Unit Number））と、ライト先の領域のアドレス（例えばＬＢＡ（Logical Block Address））とを含んだライト先情報を有する。
【００８９】
ステップ２２１０２では、Ｉ／Ｏ処理プログラム２２１００が、受信したライトコマンドが有するライト先情報を基に、ライト先の仮想ＶＯＬ及びライト先の仮想ページを特定する。
【００９０】
ステップ２２１０３では、プロセッサ２１０００が、仮想ＶＯＬマップ情報テーブル２２８００を基に、ステップ２２１０２で特定した仮想ページが割当て済みの仮想ページあるか否かを判断する。その仮想ページに「Ｎ／Ａ」ではないプール番号２２８４０及びプール内ページ番号２２８５０が対応付けられていれば、ライト先の仮想ページは割当て済みの仮想ページである。この判断の結果が肯定的の場合（ステップ２２１０３：Ｙｅｓ）、ステップ２２１０４が行われる。一方、この判断の結果が否定的の場合（ステップ２２１０３：Ｎｏ）、すなわち、ライト先の仮想ページが未割当ての仮想ページの場合、ステップ２２１０５が行われる。
【００９１】
ステップ２２１０４では、プロセッサ２１０００が、ライト先の仮想ページに割り当てられている物理ページに、ライト対象データを書き込み、ホスト装置１００００に実行結果（ライト成功）を返す。なお、前述のステップ２２１０１で、プロセッサ２１０００が、受信したライト対象データをメモリ２２０００（キャッシュメモリ領域）に書き込んで良く、そのときに、ライト成功という実行結果をホスト装置に返しても良い。
【００９２】
ステップ２２１０５では、プロセッサ２１０００が、仮想ＶＯＬ構成管理テーブル２２４００を参照し、ライト先の仮想ＶＯＬに対応したカレントプール２２４５０及びプール番号２２４６０から、ライト先の仮想ＶＯＬのカレントプールと、ライト先仮想ＶＯＬについての、カレントプールの優先順位とを、特定する。
【００９３】
ステップ２２１０６では、プロセッサ２１０００が、プールマップ情報テーブル２２９００を基に、ステップ２２１０５で特定したカレントプール２７０００に空き物理ページがあるかどうかを確認する。
【００９４】
そして、カレントプールに空き物理ページが存在する場合（ステップ２２１０７：Ｙｅｓ）、ステップ２２１０８が行われる。カレントプールに空き物理ページが存在しない場合（ステップ２２１０７：Ｎｏ）、ステップ２２１０９が行われる。
【００９５】
ステップ２２１０８では、プロセッサ２１０００が、ライト先の仮想ＶＯＬ（ライト先の仮想ページ）に、カレントプール内の空き物理ページを割り当てる。その後ステップ２２１０４が行われる。
【００９６】
ステップ２２１０９では、カレントプールに空き物理ページが存在しないので、プロセッサ２１０００が、空きプール検索処理プログラム２２２００を実行する（詳しくは、図１４のフローチャート参照）。ライト先の仮想ＶＯＬに関連付けられている他の１以上のプールから空きプール（空き物理ページを有するプール）を探すためである。その後、ステップ２２１１０が行われる。
【００９７】
ステップ２２１１０では、プロセッサ２１０００が、空きプール検索処理プログラム２２２００の実行結果をもとに、ライト先の仮想ＶＯＬについて、カレントプール以外の１以上のプールに空きプールが存在するか否かを判断する。
【００９８】
空きプールが存在する場合（ステップ２２１１０：Ｙｅｓ）、ステップ２２１０８が行われる。すなわち、Ｉ／Ｏ処理プログラム２２１００が、空きプール（変更後のカレントプール）からライト先の仮想ページに物理ページを割り当てる。
【００９９】
空きプールが存在しない場合（ステップ２２１１０：Ｎｏ）、ステップ２２１１１が行われる。すなわち、プロセッサ２１０００が、ホスト装置１００００にエラーを返す。
【０１００】
図１４は、空きプール検索処理プログラム２２２００により実行される空きプール検索処理手順のフローチャートを示す。これは、図１３のステップ２２１０９の詳細である。
【０１０１】
ステップ２２２０１では、プロセッサ２１０００が、仮想ＶＯＬ構成管理テーブル２２４００を参照し、関連付けプール数２２４４０とカレントプール２２４５０を確認する。
【０１０２】
ステップ２２２０２では、プロセッサ２１０００が、ステップ２２２０１で確認した関連付けプール数２２４４０とカレントプール２２４５０の数値部分とを比較し、それらが互いに一致しているか否かを判断する。それらが一致しているということは、ライト先の仮想ＶＯＬに割り当てられているプールに、ステップ２２２０３以降の処理を必要とするプールが１つも無いことを意味する。一致している場合（ステップ２２２０２：Ｙｅｓ）、ステップ２２２０９が行われる。一致していない場合（ステップ２２２０２：Ｎｏ）、ステップ２２２０３が行われる。
【０１０３】
ステップ２２２０３では、プロセッサ２１０００が、ライト先の仮想ＶＯＬに対応したカレントプール２２４５０が表す優先順位を１つ下げる（優先順位Ｐｑのｑに１を加算する）。これにより、そのカレントプール２２４５０が更新される。プロセッサ２１０００は、ライト先の仮想ＶＯＬに対応したプール番号２２４６０における、更新後のカレントプール２２４５０に対応したプール（つまり、新たにカレントプールとされたプール）２７０００を特定する。
【０１０４】
ステップ２２２０４では、プロセッサ２１０００が、プール構成管理テーブル２２５００を参照し、ステップ２２２０３で特定したプール２７０００に対応するプール使用率２２５４０と判定基準値２２５５０とを確認する。
【０１０５】
ステップ２２２０５では、プロセッサ２１０００が、ステップ２２２０４で確認したプール使用率２２５４０と判定基準値２２５５０とを比較し、プール使用率２２５４０が判定基準値２２５５０を超えているか否かを判断する。超えている場合（ステップ２２２０５：Ｙｅｓ）、ステップ２２２０２が再度行われる。つまり、プロセッサ２１０００は、ステップ２２２０３で特定したプールに空き物理ページがあるとしても、そのプールから空き物理ページをライト先の仮想ページに割り当てない。一方、超えていない場合（ステップ２２２０５：Ｎｏ）、ステップ２２２０６が行われる。
【０１０６】
ステップ２２２０６では、プロセッサ２１０００が、プールマップ情報テーブル２２９００を参照し、ステップ２２２０３で特定したプール２７０００に空き物理ページがあるか否かを判断する。
【０１０７】
空き物理ページが存在する場合（ステップ２２２０７：Ｙｅｓ）、ステップ２２２０８が行われる。一方、空き物理ページが存在しない場合（ステップ２２２０７：Ｎｏ）、ステップ２２２０２が行われる。
【０１０８】
ステップ２２２０８では、プロセッサ２１０００が、ライト先の仮想ＶＯＬ２６０００について空きプールが存在することを、処理結果として、実行元（Ｉ／Ｏ処理プログラム２２１００）に返す。
【０１０９】
ステップ２２２０９では、プロセッサ２１０００が、空きプールが存在しないことを、処理結果として、実行元に返す。
【０１１０】
図１５は、配置最適化処理プログラム２２３００により実行される配置最適化処理手順のフローチャートを示す。この処理手順は、例えば、定期的に開始される。
【０１１１】
配置最適化処理プログラム２２３００は、各仮想ＶＯＬについて、プライマリプール以外のプール２７０００内の物理ページ（コピー元ページ）から、プライマリプール内の空き物理ページ（コピー先ページ）に、データをコピーする（つまりデータを再配置する）。そして、そのプログラム２２３００は、コピーページが割り当てられている仮想ページに、コピー元ページに代えてコピー先ページを割り当てるよう、仮想ＶＯＬマップ情報テーブル２２８００を更新する。
【０１１２】
配置最適化処理プログラム２２３００は、各仮想ＶＯＬについて、プライマリプールの空き容量を増やす処理を行う。空き容量を増やす処理としては、例えば、プライマリプールにプールＶＯＬ２８０００を追加することによりプライマリプールの容量を拡張すること、又は、プライマリプールについてゼロデータ削除を行うことがある。ゼロデータ削除とは、割当て済みの物理ページのうち、ゼロデータ（全てのビットの値が“０”であるデータ）を記憶している物理ページを仮想ＶＯＬから解放することである。解放された物理ページは、空き物理ページとなるので、プールの空き容量が増える。
【０１１３】
プライマリプールの空き容量が枯渇している状態では、プライマリプールに空きの物理ページが無いので、プライマリプール以外のプール内の物理ページからプライマリプール内の物理ページへのデータのコピーは行われない。
【０１１４】
ステップ２２３０１では、プロセッサ２１０００が、仮想ＶＯＬ構成管理テーブル２２４００を参照し、仮想ＶＯＬ番号２２４１０がＸ（初期値：０）のプライマリプール（Ｐ１）のプール番号２２４６０を確認する。つまり、プロセッサ２１０００は、仮想ＶＯＬ＃Ｘに対応したプライマリプールを特定する。
【０１１５】
ステップ２２３０２では、プロセッサ２１０００が、仮想ＶＯＬマップ情報テーブル２２８００を参照し、仮想ＶＯＬ番号２２４１０がＸの仮想ＶＯＬ２６０００内の仮想ページに対応するプール番号２２８４０を確認する。つまり、プロセッサ２１０００は、仮想ＶＯＬ＃Ｘに割り当てられている物理ページを有するプールを特定する。
【０１１６】
ステップ２２３０３では、プロセッサ２１０００が、ステップ２２３０１で確認したプール番号２２４６０（プライマリプール）と、ステップ２２３０２で確認したプール番号２２８４０とが一致しているか否かを判断する。つまり、プロセッサ２１０００は、ステップ２２３０１で特定したプールと、ステップ２２３０２で特定したプールが同じであるか否かを判断する。
【０１１７】
一致している場合（ステップ２２３０３：Ｙｅｓ）、ステップ２２３０７が行われる。一致していない場合（ステップ２２３０３：Ｎｏ）、ステップ２２３０４が行われる。
【０１１８】
ステップ２２３０４では、プロセッサ２１０００が、プールマップ情報テーブル２２９００を参照し、プライマリプールから空き物理ページを探す。ここで、参照先を、プール構成管理テーブル２２５００とし、プロセッサ２１０００は、プール空き容量２２５３０を確認してもよい。以降は、プールマップ情報テーブル２２９００を参照した場合の処理について説明する。
【０１１９】
プライマリプールに空き物理ページが存在する場合（ステップ２２３０５：Ｙｅｓ）、ステップ２２３０６が行われる。空き物理ページが存在しない場合（ステップ２２３０５：Ｎｏ）、ステップ２２３０７が行われる。
【０１２０】
ステップ２２３０６では、プロセッサ２１０００が、仮想ＶＯＬ＃Ｘについて、プライマリプール以外のプール内の物理ページに存在しているデータを、プライマリプール内の空き物理ページにコピーする。コピー完了後に、プロセッサ２１０００が、仮想ＶＯＬマップ情報テーブル２２８００のコピー元ページのプール番号２２８４０と、プール内ページ番号２２８５０とを、コピー先ページ（プライマリプールのページ）のプール番号２２８４０とプール内ページ番号２２８５０に変更する。これにより、コピー元ページは、空き物理ページとされる。なお、この時点で、コピー元ページにゼロデータ（全てのビットの値が“０”であるデータ）を書き込むようにして良い（コピー元ページの初期化）。
【０１２１】
ステップ２２３０７では、プロセッサ２１０００が、仮想ＶＯＬマップ情報テーブル２２８００の仮想ＶＯＬ内ページ番号を参照し、処理対象の仮想ページが、仮想ＶＯＬ＃Ｘの最終ページであるか否かを判断する。最終ページである場合（ステップ２２３０７：Ｙｅｓ）、ステップ２２３０８が行われる。最終ページ以外の場合（ステップ２２３０７：Ｎｏ）、ステップ２２３０２が再度行われる。
【０１２２】
ステップ２２３０８では、プロセッサ２１０００が、Ｘの値に１を加算して、仮想ＶＯＬ番号２２４１０がＸ＋１の仮想ＶＯＬ（仮想ＶＯＬ＃Ｘ（Ｘ＝（Ｘ＋１））を確認する。ステップ２２３０８では、プロセッサ２１０００が、仮想ＶＯＬ構成管理テーブル２２４００の仮想ＶＯＬ番号２２４１０を参照し、仮想ＶＯＬ番号２２４１０がＸ＋１の仮想ＶＯＬが存在するかを判断する。ここで、参照先は、仮想ＶＯＬマップ情報テーブル２２８００の仮想ＶＯＬ番号２２８１０でもよい。以降は、仮想ＶＯＬ構成管理テーブル２２４００を参照した場合の処理について説明する。
【０１２３】
仮想ＶＯＬ番号２２４１０がＸ＋１の仮想ＶＯＬが存在する場合（ステップ２２３０９：Ｙｅｓ）、ステップ２２３０１が行われる。存在しない場合（ステップ２２３０９：Ｎｏ）、ステップ２２３１０が行われる。
【０１２４】
ステップ２２３１０では、プロセッサ２１０００が、カレントプール変更処理プログラム２２３５０を実行する（具体的には、図１６のフローチャートを参照）。つまり、各仮想ＶＯＬについて、カレントプールより優先順位の高いプールに空き物理ページがある場合、カレントプールは、その優先順位の高いプールに変更される。
【０１２５】
図１６は、カレントプール変更処理プログラム２２３５０により実行されるカレントプール変更処理手順のフローチャートを示す。
【０１２６】
カレントプール変更処理プログラム２２３５０は、カレントプールを、より優先順位の高いプール（例えば、サードプールの上位プールはプライマリプール或いはセカンダリプール）に変更する処理を行う。
【０１２７】
カレントプール変更処理プログラム２２３５０は、例えば、プライマリプールの空き容量が増えた場合に実行されても良いし、配置最適化処理手順の中で実行されても良い。
【０１２８】
ステップ２２３５１では、プロセッサ２１０００が、仮想ＶＯＬ構成管理テーブル２２４００を参照し、仮想ＶＯＬ番号２２４１０がＸ（初期値：０）のカレントプール２２４５０を確認する。
【０１２９】
ステップ２２３５２では、プロセッサ２１０００が、ステップ２２３５１で確認したカレントプール２２４５０がＰ１であるか（カレントプールがプライマリプールであるか）否かを判断する。プライマリプールである場合（ステップ２２３５２：Ｙｅｓ）、ステップ２２３５７が行われる。プライマリプール以外の場合（ステップ２２３５２：Ｎｏ）、ステップ２２３５３が行われる。
【０１３０】
ステップ２２３５３では、プロセッサ２１０００が、仮想ＶＯＬ構成管理テーブル２２４００を参照して、仮想ＶＯＬ＃Ｘについて、優先順位がカレントプールより高い１以上のプール＃Ｙを特定する。
【０１３１】
ステップ２２３５４では、プロセッサ２１０００が、プール構成管理テーブル２２５００を参照し、ステップ２２３５３で特定した１以上のプール＃Ｙのプール空き容量２２５３０を確認する。ここで、参照先をプールマップ情報テーブル２２９００とし、仮想ＶＯＬ割当有無２２９５０が確認されてもよい。以降は、前記プール構成管理テーブル２２５００を参照した場合の処理について説明する。
【０１３２】
ステップ２２３５５では、プロセッサ２１０００が、ステップ２２３５４で特定した１以上のプール＃Ｙの空き容量２２５３０が０ＧＢか否かを判断する。０ＧＢの場合（ステップ２２３５５：Ｙｅｓ）、ステップ２２３５７が行われる。０ＧＢ以外の場合（ステップ２２３５５：Ｎｏ）、ステップ２２３５６が行われる。
【０１３３】
ステップ２２３５６では、プロセッサ２１０００が、仮想ＶＯＬ構成管理テーブル２２４００を参照し、仮想ＶＯＬ番号２２４１０がＸのカレントプール２２４５０を、プール空き容量２２５３０が０ＧＢ以外の１以上のプール＃Ｙのうち、優先順位が最も高いプールの優先順位に更新する。
【０１３４】
ステップ２２３５７では、プロセッサ２１０００が、Ｘの値に１を加算する。
【０１３５】
ステップ２２３５８では、プロセッサ２１０００が、仮想ＶＯＬ構成管理テーブル２２４００の仮想ＶＯＬ番号２２４１０を参照し、仮想ＶＯＬ番号２２４１０がＸ＋１の仮想ＶＯＬが存在するか否かを判断する。ここで、参照先は、仮想ＶＯＬマップ情報テーブル２２８００の仮想ＶＯＬ番号２２８１０でもよい。以降は、前記仮想ＶＯＬ構成管理テーブル２２４００を参照した場合の処理について説明する。
【０１３６】
仮想ＶＯＬ番号２２４１０がＸ＋１の仮想ＶＯＬが存在する場合（ステップ２２３５８：Ｙｅｓ）、ステップ２２３５１が再度行われる。存在しない場合（ステップ２２３５８：Ｎｏ）、カレントプール変更処理が終了する。
【０１３７】
以上、本発明の一実施例で説明したが、本発明は上述した実施例に限らず他の様々な形態に適用可能である。
【符号の説明】
【０１３８】
１０…コントローラ、１１…ＨＤＤ  Ｉ／Ｆ、１００００…ホスト装置、２００００…ストレージ装置、２１０００…プロセッサ、２２０００…メモリ、２２１００…Ｉ／Ｏ処理プログラム、２２２００…空きプール検索処理プログラム、２２３００…配置最適化処理プログラム、２２３５０…カレントプール変更処理プログラム、２２４００…仮想ＶＯＬ構成管理テーブル、２２５００…プール構成管理テーブル、２２６００…プールＶＯＬ構成管理テーブル、２２７００…ＲＡＩＤグループ構成管理テーブル、２２８００…仮想ＶＯＬマップ情報テーブル、２２９００…プールマップ情報テーブル、２３０００…ストレージユニット、２４０００…ハードディスクドライブ（ＨＤＤ）、２５０００…ホスト装置Ｉ／Ｆ、２６０００…仮想ＶＯＬ、２７０００…プール、２８０００…プールＶＯＬ、２９０００…ＲＡＩＤグループ、３００００…ネットワーク
【図１】
2011242840.tif 000003
【図２】
2011242840.tif 000004
【図３】
2011242840.tif 000005
【図４】
2011242840.tif 000006
【図５】
2011242840.tif 000007
【図６】
2011242840.tif 000008
【図７】
2011242840.tif 000009
【図８】
2011242840.tif 000010
【図９】
2011242840.tif 000011
【図１０】
2011242840.tif 000012
【図１１】
2011242840.tif 000013
【図１２】
2011242840.tif 000014
【図１３】
2011242840.tif 000015
【図１４】
2011242840.tif 000016
【図１５】
2011242840.tif 000017
【図１６】
2011242840.tif 000018
【図１７】
2011242840.tif 000019
【図１８】
2011242840.tif 000020
【図１９】
2011242840.tif 000021