(57)【要約】  実領域のステータスとして、（１）初期化済みであり仮想領域に割当て可能であることを意味する第１ステータス、（２）仮想領域に割り当てられていることを意味する第２ステータス、及び、（３）仮想領域に割当て不可能であり所定データの書込みである初期化がされることを意味する第３ステータスがある。記憶制御装置は、プールに関連付けられる１以上の仮想ボリュームの総容量である仮想ボリューム総容量を、第３ステータスの実ページをプールが有するか否かを基に、そのプールの容量以下に制限する。
2011135617.tif 000002
【特許請求の範囲】
【請求項１】
物理記憶デバイス群と、
ホストと前記物理記憶デバイス群とに接続されたコントローラと
を有し、
Thin Provisioningが適用された仮想的な論理ボリュームであり複数の仮想領域で構成された仮想ボリュームがあり、
前記物理記憶デバイス群に基づくプールがあり、前記プールは、複数の実領域で構成され、
前記実領域のステータスとして、（１）初期化済みであり仮想領域に割当て可能であることを意味する第１ステータス、（２）仮想領域に割り当てられていることを意味する第２ステータス、及び、（３）仮想領域に割当て不可能であり所定データの書込みである初期化がされることを意味する第３ステータスがあり、
前記コントローラは、下記の処理を行うようになっており、
（ａ）前記ホストから前記仮想ボリューム内の未割当ての仮想領域に対するライトコマンドを受信し、前記仮想ボリュームが関連付けられているプールから、前記第１ステータスの実領域を割り当て、その実領域のステータスを前記第２のステータスに変更し、
（ｂ）前記仮想領域に割り当てられている実領域のステータスを、前記第３ステータスに変更し、
（ｃ）前記第３ステータスの実領域を初期化し、その初期化が終了した場合に、その実領域のステータスを、前記第１ステータスに変更し、
前記コントローラが、前記プールに関連付けられる１以上の仮想ボリュームの総容量である仮想ボリューム総容量を、前記第３ステータスの実領域を前記プールが有するか否かを基に、前記プールの容量以下に制限する、
ストレージ装置。
【請求項２】
請求項１記載のストレージ装置であって、
（ｆ）前記コントローラは、仮想ボリューム総容量が増える増加処理の要求である増加要求を受信し、
（ｇ）前記コントローラは、下記（ｐ）の値が下記（ｑ）の値以上か否かを判断し、
（ｐ）前記プールの容量と、前記プール内の第３ステータスの実領域の総容量との差、
（ｑ）仮想ボリューム総容量の増加分の容量と、仮想ボリューム総容量との和、
（ｈ）前記コントローラは、前記（ｇ）の判断の結果が肯定的の場合、前記増加処理を実行する、
ストレージ装置。
【請求項３】
請求項２記載のストレージ装置であって、
前記コントローラが、１つの第３ステータスの実領域を初期化し、且つ、その実領域のステータスを第１ステータスに変更することで、前記プールから第３ステータスの実領域が１つ減り、
（ｉ）前記コントローラは、前記（ｇ）の判断の結果が否定的の場合、前記（ｐ）の値が前記（ｑ）の値以上になるぐらいに、前記プールから前記第３ステータスの実領域が減るまで、待ち、その後、前記増加処理を実行する、
ストレージ装置。
【請求項４】
請求項３記載のストレージ装置であって、
前記物理記憶デバイス群に基づく複数のプールがあり、
前記コントローラは、前記（ｉ）において、前記プール内の第３ステータスの実領域を初期化することを、前記複数のプールのうちの別のプール内の第３ステータスの実領域を初期化することよりも優先する、
ストレージ装置。
【請求項５】
請求項４記載のストレージ装置であって、
前記コントローラは、スリープ時間周期で、前記プール内の１つの第３ステータスの実領域を初期化し、
前記（ｉ）の前、前記スリープ時間は、第１の時間であり、
前記コントローラは、前記（ｉ）において、前記スリープ時間を、前記第１の時間より短い第２の時間に変更する、
ストレージ装置。
【請求項６】
請求項５記載のストレージ装置であって、
前記増加処理は、新たに仮想ボリュームを前記プールに関連付ける処理、又は、前記プールに関連付けられている仮想ボリュームの容量を拡張する処理である、
ストレージ装置。
【請求項７】
請求項２記載のストレージ装置であって、
（ｊ）前記コントローラは、前記（ｇ）の判断の結果が否定的の場合、前記増加処理を実行しない、
ストレージ装置。
【請求項８】
請求項１記載のストレージ装置であって、
（ｔ）前記コントローラは、仮想ボリューム総容量が増える増加処理の要求である増加要求を受信し、
（ｕ）前記コントローラは、前記プールの容量が、仮想ボリューム総容量の増加分の容量と仮想ボリューム総容量との和以上か否かを判断し、
（ｖ）前記コントローラは、前記（ｕ）の判断の結果が肯定的の場合、前記プールが第３ステータスの実領域を有するか否かを判断し、
（ｗ）前記コントローラは、前記（ｖ）の判断の結果が否定的の場合、前記増加処理を実行する、
ストレージ装置。
【請求項９】
請求項８記載のストレージ装置であって、
（ｘ）前記コントローラは、前記（ｖ）の判断の結果が肯定的の場合、前記増加処理を実行しない、
ストレージ装置。
【請求項１０】
請求項１記載のストレージ装置であって、
前記コントローラは、管理情報を記憶する記憶資源と、コンピュータプログラムを実行するプロセッサとを有し、
前記管理情報は、前記仮想ボリュームの容量を表す情報と、前記プールに関連付けられている仮想ボリュームを表す情報と、前記プールの容量を表す情報と、前記プール内の各実ページのステータスを表す情報とを含み、
前記プロセッサは、前記コンピュータプログラムを起動した場合、その起動が初めてか否かを判断し、その判断の結果が肯定的の場合、前記管理情報を基に、前記プールに関連付けられている仮想ボリュームの総容量を算出し、算出された仮想ボリューム総容量を表す情報を、前記管理情報に含める、
ストレージ装置。
【請求項１１】
請求項１記載のストレージ装置であって、
前記物理記憶デバイス群に基づく複数のプールがあり、
第１のモードと、第２のモードがあり、
前記第１のモードがＯＮの場合、前記複数のプールの全てが、仮想ボリューム総容量がプール容量以下に制限され、
前記第２のモードがＯＮの場合、前記複数のプールのうち所定の条件を満たすプールだけが、仮想ボリューム総容量がプール容量以下に制限され、
前記第１のモードと前記第２のモードの両方がＯＮの場合、前記第１のモードが優先される、
ストレージ装置。
【請求項１２】
請求項１記載のストレージ装置であって、
第１及び第２のプールがあり、
第１及び第２の仮想ボリュームがあり、
前記第１のプールは、仮想ボリューム総容量がプール容量以下に制限されるプールであり、
前記第２のプールは、仮想ボリューム総容量がプール容量以下に制限されないプールであり、
前記第１の仮想ボリュームが、前記第１のプールに関連付けられており、
前記第２の仮想ボリュームが、前記第２のプールに関連付けられており、
（Ａ）前記コントローラが、前記第２のプールから前記第２の仮想ボリュームに割り当てられている全ての実ページのステータスを、第３ステータスに変更し、
（Ｂ）前記コントローラが、前記第１のプールから前記第１の仮想ボリュームに割り当てられている全ての実ページ内のデータを、前記第１の仮想ボリュームから前記第２の仮想ボリュームにコピーすることを、前記第２のプール内の第３ステータスの実ページが初期化され、且つ、その実ページのステータスが第１ステータスに変わるまで、待つ、
ストレージ装置。
【請求項１３】
請求項１記載のストレージ装置であって、
前記コントローラが、前記プール内の第３ステータスの実ページの総容量を算出し、算出された総容量を表示するための情報を出力する、
ストレージ装置。
【請求項１４】
プールに関連付けられる仮想ボリュームの総容量を制限する方法であって、
前記プールは、物理記憶デバイス群に基づく複数の実領域で構成されており、
前記仮想ボリュームは、Thin Provisioningが適用された仮想的な論理ボリュームであり、複数の仮想領域で構成されており、
前記実領域のステータスとして、（１）初期化済みであり仮想領域に割当て可能であることを意味する第１ステータス、（２）仮想領域に割り当てられていることを意味する第２ステータス、及び、（３）仮想領域に割当て不可能であり所定データの書込みである初期化がされることを意味する第３ステータスがあり、
前記実領域のステータスは、下記のように遷移し、
（ａ）ホストから前記仮想ボリューム内の未割当ての仮想領域に対するライトの際に、前記仮想ボリュームが関連付けられているプールから、前記第１ステータスの実領域が割り当てられ、その実領域のステータスが、前記第２のステータスに変更され、
（ｂ）前記仮想領域に割り当てられている実領域のステータスが、前記第３ステータスに変更され、
（ｃ）前記第３ステータスの実領域が初期化され、その初期化が終了した場合に、その実領域のステータスが、前記第１ステータスに変更され、
前記方法が、前記プールに関連付けられる１以上の仮想ボリュームの総容量である仮想ボリューム総容量を、前記第３ステータスの実領域を前記プールが有するか否かを基に、前記プールの容量以下に制限する、
方法。
【請求項１５】
ホストに対する通信インタフェース装置と、
前記通信インタフェース装置に接続されたプロセッサと
を有し、
Thin Provisioningが適用された仮想的な論理ボリュームであり複数の仮想領域で構成された仮想ボリュームがあり、
物理記憶デバイス群に基づくプールがあり、前記プールは、複数の実領域で構成され、
前記実領域のステータスとして、（１）初期化済みであり仮想領域に割当て可能であることを意味する第１ステータス、（２）仮想領域に割り当てられていることを意味する第２ステータス、及び、（３）仮想領域に割当て不可能であり所定データの書込みである初期化がされることを意味する第３ステータスがあり、
前記プロセッサは、下記の処理を行うようになっており、
（ａ）前記ホストから前記仮想ボリューム内の未割当ての仮想領域に対するライトコマンドを受信し、前記仮想ボリュームが関連付けられているプールから、前記第１ステータスの実領域を割り当て、その実領域のステータスを前記第２のステータスに変更し、
（ｂ）前記仮想領域に割り当てられている実領域のステータスを、前記第３ステータスに変更し、
（ｃ）前記第３ステータスの実領域を初期化し、その初期化が終了した場合に、その実領域のステータスを、前記第１ステータスに変更し、
前記プロセッサが、前記プールに関連付けられる１以上の仮想ボリュームの総容量である仮想ボリューム総容量を、前記第３ステータスの実領域を前記プールが有するか否かを基に、前記プールの容量以下に制限する、
記憶制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Thin Provisioningに従う記憶制御に関する。
【背景技術】
【０００２】
Thin Provisioning（Dynamic Provisioningとも呼ばれる）が適用されたストレージ装置が知られている。そのストレージ装置は、一般に、複数の仮想ページで構成された仮想的な論理ボリューム（以下、仮想ボリューム）を提供し、複数の実ページで構成されたプールを有する。ストレージ装置は、未割当ての仮想ページに対するデータの書込みの場合に、書込み先の仮想ページに実ページをプールから割当て、割り当てた実ページに、書込み対象のデータを書き込む。仮想ページは、仮想的な記憶領域であり、実ページは、実体的な記憶領域である。【０００３】
この種のストレージ装置に関する技術として、例えば、特許文献１及び２に開示の技術が知られている。【０００４】
特許文献１によれば、実ページの数がゼロであるならば、物理的な記憶デバイスが追加され、その物理的な記憶デバイスを基に論理的なディスクが新たに生成される。その論理的なディスクが分割されることにより、割当て可能な実ページが新たに生成される。【０００５】
特許文献２によれば、ストレージ装置は、ホストから書込みコマンドを受信した場合に、割当て可能な実ページが無い場合、failがホストに返される。つまり、書込みの失敗となる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許第７０３２０９３号明細書
【特許文献２】米国特許第６８２３４４２号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
仮想ボリューム（ＶＶＯＬ）の容量は、プールの容量と無関係に決定される。一般に、１以上の仮想ボリュームの総容量は、１以上のプールの総容量よりも大きい。【０００８】
そして、未割当ての仮想ページに対する書込みの際に、割当て可能な実ページ（フリーの実ページ）がプールに無ければ、書込みの失敗となる。【０００９】
それを回避するための方法として、プール内のフリーの実ページの数を監視し、その数が所定数未満になった場合に、プールの容量を拡張する方法が考えられる。【００１０】
しかし、プールの容量の拡張が間に合わないケースがあり得る。そのケースとしては、フリーの実ページの数が所定数未満になった直後に未割当ての仮想ページに対する書込みが頻繁に行われるようなケースが考えられる。プールの容量の拡張が間に合わない場合には、書込みの失敗を回避することはできないと考えられる。【００１１】
そこで、本発明の目的は、割当て可能な実ページが不足しないようにすることにある。
【課題を解決するための手段】
【００１２】
実ページのステータスとして、（１）初期化済みであり仮想ページに割当て可能であることを意味する第１ステータス、（２）仮想ページに割り当てられていることを意味する第２ステータス、及び、（３）仮想ページに割当て不可能であり所定データの書込みである初期化がされることを意味する第３ステータスがある。【００１３】
記憶制御装置は、ホスト（例えば、物理的又は仮想的な計算機）から仮想ボリューム内の未割当ての仮想ページに対するライトコマンドを受信し、その仮想ボリュームが関連付けられているプールから、第１ステータスの実ページを割り当て、その実ページのステータスを第２のステータスに変更する。【００１４】
また、記憶制御装置は、仮想ページに割り当てられている実ページのステータスを、或るタイミングで、第３ステータスに変更する。【００１５】
また、記憶制御装置は、第３ステータスの実ページを初期化し、その初期化が終了した場合に、その実ページのステータスを、第１ステータスに変更する。【００１６】
記憶制御装置は、プールに関連付けられる１以上の仮想ボリュームの総容量である仮想ボリューム総容量を、第３ステータスの実ページをプールが有するか否かを基に、そのプールの容量以下に制限する。【００１７】
記憶制御装置は、ストレージ装置が有するコントローラであっても良いし、ストレージ装置とホストとの間の通信を中継する装置（例えば、サーバ装置、或いは、インテリジェントなスイッチ装置）であっても良い。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施例１に係る概要を示す。
【図２】実ページのステータス及びそのステータスの遷移の流れを示す。
【図３】本発明の実施例１に係るストレージ装置の構成を示す。
【図４】ストレージ装置１０１における各種記憶領域の関係を示す。
【図５】図５Ａは、制御プログラム５５１を示す。図５Ｂは、共有メモリ（ＳＭ）３０９が記憶する管理情報を示す。
【図６】管理情報内の各種情報の関係を示す。
【図７】図７Ａは、ＶＯＬ管理テーブル５０１を示す。図７Ｂは、マッピングテーブル５０３を示す。
【図８】図８Ａは、フリーキュー５０５を示す。図８Ｂは、削除キュー５０９を示す。
【図９】図９Ａは、ページ情報７０１を示す。図９Ｂは、プール管理テーブル５０４を示す。
【図１０】制御プログラム５５１の起動時の処理の流れを示す。
【図１１】ＶＶＯＬ総容量算出の流れを示す。
【図１２】図１２Ａは、ＶＶＯＬ一覧１２１１を示す。図１２Ｂは、プール一覧１２２１を示す。
【図１３】ＶＶＯＬ関連付けの流れを示す。
【図１４】ＶＶＯＬ容量チェックの流れを示す。
【図１５】ゼロ書きチェックの流れを示す。
【図１６】ＶＶＯＬ関連付け解除の流れを示す。
【図１７】ゼロ書き処理の流れを示す。
【図１８】削除容量の算出の流れを示す。
【図１９】プール一覧１９０１を示す。
【図２０】ＶＶＯＬ容量の拡張の流れを示す。
【図２１】対象プールの実ページ数５０４３と対象プールのゼロ書きページ数との差と、対象プールの仮想ページ総数５０４７と拡張容量分の仮想ページ数との和との比較を示す。
【図２２】図２２Ａは、本発明の実施例２で行われる処理を示す。図２２Ｂは、本発明の実施例３で行われる処理を示す。
【図２３】本発明の実施例４で行われる処理の流れを示す。
【図２４】本発明の実施例５に係るゼロ書き処理の流れを示す。
【図２５】図２５Ａは、本発明の実施例６に係るＶＶＯＬ間コピーの前の状況の一例を示す。図２５Ｂは、セカンダリのＶＶＯＬに割り当てられている実ページのステータスを変更した後にＶＶＯＬ間コピーを行うことを示す。図２５Ｃは、ＶＶＯＬ間コピー完了後の状況を示す。
【図２６】ティア管理テーブル５０６を示す。
【発明を実施するための形態】
【００１９】
以下、図面を参照して、本発明の幾つかの実施例を説明する。
【００２０】
なお、以下の説明では、「ｘｘｘテーブル」或いは「ｘｘｘリスト」の表現にて各種情報を説明することがあるが、各種情報は、テーブル及びリスト以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ｘｘｘテーブル」及び「ｘｘｘリスト」を「ｘｘｘ情報」と呼ぶことができる。
【００２１】
また、以下の説明では、種々の対象の識別情報として、番号が使用されるが、番号以外種類の識別情報（例えば、英字や符号を含んだ識別子）も採用可能である。
【００２２】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central Processing Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェース装置（例えば通信ポート）を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、ストレージ装置或いは記憶制御装置が行う処理としても良い。また、プロセッサは、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。コンピュータプログラムは、プログラムソースから各計算機にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【００２３】
また、以下の説明では、論理ボリュームを「ＶＯＬ」と記載し、仮想的な論理ボリュームを「ＶＶＯＬ」と記載することがある。
【００２４】
また、以下の説明では、番号がｘｘである対象Ｐを表す場合、「Ｐ＃ｘｘ」と表現することがある。例えば、ＶＯＬ番号が０１のＶＶＯＬを、「ＶＶＯＬ＃０１」と表現することがある。
【００２５】
また、以下の説明では、仮想ページと実ページは、同じ容量（サイズ）であり、それ故、１個の仮想ページに１個の実ページが割り当てられる。しかし、それに限らず、１個の仮想ページに複数の実ページが割り当てられても良いし、複数の仮想ページに１個の実ページが割り当てられても良い。
【００２６】
また、以下の説明では、仮想ページの容量（サイズ）と実ページの容量は、固定であるが、可変であっても良い。
【実施例１】
【００２７】
図１は、本発明の実施例１に係る概要を示す。【００２８】
ストレージ装置が、プール１１３に関連付け可能なＶＶＯＬ１１１の総容量を、プール１１３の容量以下に制限する。以下、幾つかの例を説明する。なお、図１の説明において、プール＃０１の容量は、１００ＧＢ（ギガバイト）であるとする。また、以下の説明では、プール１１３に関連付けられている１以上のＶＶＯＬの総容量を、そのプール１１３について、「ＶＶＯＬ総容量」と言う。【００２９】
（Ａ）管理者が、ストレージ装置に、５０ＧＢのＶＶＯＬ＃０１をプール＃０１に関連付けることを要求したとする。この場合、ストレージ装置は、その要求に応答して、ＶＶＯＬ＃０１をプール＃０１に関連付ける。なぜなら、ＶＶＯＬ＃０１の容量（５０ＧＢ）は、プール＃０１の容量（１００ＧＢ）以下のためである。【００３０】
（Ｂ）（Ａ）の次に、管理者が、ストレージ装置に、４０ＧＢのＶＶＯＬ＃０２をプール＃０１に関連付けることを要求したとする。この場合、ストレージ装置は、その要求に応答して、ＶＶＯＬ＃０２もプール＃０１に関連付ける。なぜなら、ＶＶＯＬ総容量（９０ＧＢ（５０ＧＢ＋４０ＧＢ））は、プール＃０１の容量（１００ＧＢ）以下のためである。【００３１】
（Ｃ）（Ｂ）の次に、管理者が、ストレージ装置に、３０ＧＢのＶＶＯＬ＃０３をプール＃０１に関連付けることを要求したとする。しかし、この場合、ストレージ装置は、その要求を断る（すなわち、ＶＶＯＬ＃０３をプール＃０１に関連付けない）。なぜなら、ＶＶＯＬ総容量（１２０ＧＢ（５０ＧＢ＋４０ＧＢ＋３０ＧＢ））は、プール＃０１の容量（１００ＧＢ）を越えてしまうためである。【００３２】
（Ｄ）（Ｂ）の次に、管理者が、ストレージ装置に、ＶＶＯＬ＃０１の容量を５０ＧＢから６０ＧＢに拡張することを要求したとする。この場合、ストレージ装置は、その要求に応答して、ＶＶＯＬ＃０１の容量を５０ＧＢから６０ＧＢに拡張する。なぜなら、ＶＶＯＬ＃０１の容量拡張後のＶＶＯＬ総容量（１００ＧＢ（６０ＧＢ＋４０ＧＢ））は、プール＃０１の容量（１００ＧＢ）以下のためである。【００３３】
（Ｅ）（Ｂ）の次に、管理者が、ストレージ装置に、ＶＶＯＬ＃０２の容量を４０ＧＢから８０ＧＢに拡張することを要求したとする。しかし、この場合、ストレージ装置は、その要求を断る（すなわち、ＶＶＯＬ＃０２の容量を４０ＧＢから８０ＧＢに拡張しない）。なぜなら、ＶＶＯＬ＃０２の容量拡張後のＶＶＯＬ総容量（１３０ＧＢ（５０ＧＢ＋８０ＧＢ））は、プール＃０１の容量（１００ＧＢ）を越えてしまうためである。【００３４】
上述の通り、ストレージ装置は、プール１１３に関連付け可能なＶＶＯＬ１１１の総容量を、プール１１３の容量以下に制限する。その際、ストレージ装置は、プール１１３を構成する実ページのステータスを考慮する。本実施例では、実ページのステータスは、「フリー」、「割当て済み」、及び「ゼロ書き中」のいずれかである。【００３５】
図２は、実ページのステータス及びそのステータスの遷移の流れを示す。【００３６】
「フリー」は、実ページが仮想ページに割り当てられておらず、且つ、その実ページを仮想ページに割当て可能であることを意味する。フリーの実ページ内の全てのビットの値は、“０”である。つまり、フリーの実ページは、初期化（ゼロ書き）済みの実ページである。【００３７】
「割当て済み」は、実ページがいずれかの仮想ページに既に割り当てられており、それ故、その実ページが割当て不可能であることを意味する。【００３８】
「ゼロ書き中」は、実ページ内の全ビットの値が“０”とされるべき（例えば、実ページの先頭から末端にかけてビット値“０”が書き込まれている最中）であることを意味する。ゼロ書き中の実ページは、仮想ページに割り当てられておらず、且つ、割当て不可能である。【００３９】
実ページのステータスの変化の流れは、例えば、下記の通りである。【００４０】
矢印２０１に示すように、ストレージ装置は、未割当ての仮想ページに対する書込みのために、未割当ての仮想ページにフリーの実ページ＃１を割り当てる。この場合、ストレージ装置は、実ページ＃１のステータスを、「フリー」から「割当て済み」に遷移させる。その実ページ＃１の全部又は一部に、書込み対象のデータが書き込まれる。図２によれば、書込み対象のデータは、４ビットのデータであり、且つ、４つのビット値は全て“１”である。【００４１】
矢印２０２に示すように、ストレージ装置が、実ページ＃１のステータスを、「割当て済み」から「ゼロ書き中」に遷移させる。その遷移は、実ページ＃１内のデータが不要であることに該当する所定のイベント（例えば、実ページ＃１が割り当てられている仮想ページを含んだＶＶＯＬのプール＃０１に対する関連付けが解除されたこと）を契機に、行われる。【００４２】
ストレージ装置は、実ページ＃１のステータスを「ゼロ書き中」に遷移させた場合、実ページ＃１に対してゼロ書きを行い、それにより、実ページ＃内の全ビット値を“０”に更新する。具体的には、ストレージ装置は、実ページ＃１の全域に、ビット値“０”を書き込んでも良いし、実ページ＃１内のビット値“１”のみを“０”に更新しても良い。（図２によれば、実ページ＃１に“０”が書き込まれている途中である）。ゼロ書きの開始タイミングは、ステータスが「ゼロ書き中」に遷移した直後であっても良いし、ステータスが「ゼロ書き中」に遷移した後の任意のタイミングであっても良い。【００４３】
「ゼロ書き中」の実ページ＃１内の全ビットの値が“０”になったら、ストレージ装置は、矢印２０３に示すように、実ページ＃１のステータスを、「ゼロ書き中」から「フリー」に遷移させる。実ページ＃１が割当て可能となったためである。なお、以下の説明では、全ビットの値が“０”の実ページを、「ゼロページ」と言う。【００４４】
矢印２０１、２０２及び２０３に示した遷移の流れの他に、矢印２１１に示す遷移も可能である。すなわち、ストレージ装置は、定期的に又は不定期的に、「割当て済み」のゼロページを探す。ストレージ装置は、「割当て済み」のゼロページ＃２を見つけた場合、矢印２１１に示すように、ゼロページ＃２のステータスを、「割当て済み」から、「ゼロ書き中」に遷移させることなく、「フリー」に遷移させる。なぜなら、実ページ＃２は既にゼロページであるため、ゼロ書きを行う必要が無いからである。【００４５】
以上が、実ページのステータス及びそのステータスの遷移の流れである。なお、本実施例では、「未割当ての仮想ページ」は、実ページが割り当てられていない仮想ページであるが、それに限らず、実質的に実ページが割り当てられていない仮想ページ、例えば、所定のデータが書き込まれている所定の実ページ（例えば、所定のゼロページ）が割り当てられている仮想ページであっても良い。その所定の実ページは、複数の未割当ての仮想ページに共通であって良い。未割当ての仮想ページに対する書込みの場合、その仮想ページに、所定の実ページに代えて、フリーの実ページが割り当てられて良い。【００４６】
図２の説明によれば、「フリー」の実ページ及び「割当て済み」の実ページは、ＶＶＯＬ１１１に貢献する。なぜなら、「フリー」の実ページは、ＶＶＯＬ１１１内の未割当て仮想ページに割当て可能であるし、「割当て済み」の実ページは、その実ページの割当先の仮想ページに対するデータ（ホスト装置が利用するデータ）を記憶しているからである。【００４７】
しかし、「ゼロ書き中」の実ページは、ＶＶＯＬ１１１に貢献しない。なぜなら、ＶＶＯＬ１１１内の未割当て仮想ページに割当て不可能であるからである。【００４８】
そこで、ストレージ装置は、プール１１３内の実ページのステータスが「ゼロ書き中」か否かを基に、プール１１３に関連付け可能なＶＶＯＬ１１１の総容量をプール１１３の容量以下に制限する。【００４９】
以下、本実施例を詳細に説明する。【００５０】
図３は、本発明の実施例１に係るストレージ装置の構成を示す。【００５１】
通信ネットワーク３６１に、１以上のホスト３５１と、ストレージ装置１０１とが接続されている。【００５２】
ホスト３５１は、物理的又は仮想的な装置（例えば計算機）である。ホスト３５１は、アクセス先情報を有するアクセスコマンドを送信する。アクセスコマンドは、ライトコマンド又はリードコマンドである。アクセス先情報は、アクセス先を表す情報、例えば、アクセス先のＶＶＯＬ１１１に関連付けられている識別情報（例えばＬＵＮ（Logical Unit Number））と、アクセス先の仮想ページのアドレス範囲に属するアドレス（例えばＬＢＡ（Logical Block Address））とを含む。【００５３】
ストレージ装置１０１は、物理記憶デバイス群と、コントローラ１３１と、ＳＶＰ（Service Processor）３１１とを有する。【００５４】
物理記憶デバイス群は、複数の物理記憶デバイス（以下、ＰＤＥＶ）３７１（例えば、ＨＤＤ（Hard Disk Drive）、又は、フラッシュメモリデバイス（例えばＳＳＤ（Solid State Drive））の集合である。ＰＤＥＶ群は、１以上のＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループ３７５を有する。ＲＡＩＤグループ３７５は、２以上のＰＤＥＶ３７１で構成されており、所定のＲＡＩＤレベルでデータを記憶する。プール１１３は、１以上のＲＡＩＤグループ３７５の記憶空間に基づいている。プール１１３は、例えば、１以上の実ボリューム（１以上のＲＡＩＤグループ３７５に基づく実体的な論理ボリューム）の集合であって、プール１１３内の各実ボリュームが、２以上の実ページ１９１に分割されて良い。【００５５】
コントローラ１３１は、ホスト３５１との通信インタフェースと、ＰＤＥＶ３７１との通信インタフェースと、メモリと、それらに接続されたプロセッサとを有する。具体的には、例えば、コントローラ１３１は、ＣＨＡ３０１と、ＤＫＡ３０３と、キャッシュメモリ（以下、ＣＭ）３０７と、共有メモリ（以下、ＳＭ）３０９と、スイッチ装置（以下、ＳＷ）３０５とを有する。これらの要素の数は１以上である。【００５６】
ＣＨＡ３０１は、ホスト３５１との通信インタフェース装置である。ＣＨＡ３０１は、ポート３０２と、ＭＰ（Micro Processor）２０とを有する。これらの要素の数は１以上である。ＭＰ２０は、ホスト３５１からのコマンドを処理する。例えば、ＭＰ２０は、ホスト３５１からポート３０２を介して受信したライトコマンドに応答して、ライト対象のデータをＣＭ３０７に書き込む。【００５７】
ＤＫＡ３０３は、ＰＤＥＶ３７１との通信インタフェース装置である。ＤＫＡ３０３は、１以上のＭＰ（Micro Processor）３０を有する。ＭＰ３０は、ＰＤＥＶ３７１に対するデータの入出力を制御する。例えば、ＭＰ３０は、ＣＭ３０７に記憶されているライト対象のデータを、そのデータのライト先の実ページに基づくＲＡＩＤグループ３７５に書き込む。【００５８】
ＣＭ３０７は、複数のＭＰ２０及び３０に共有のメモリであり、ＰＤＥＶ群に入出力されるデータを一時的に記憶する。【００５９】
ＳＭ３０９は、複数のＭＰ２０及び３０に共有のメモリであり、管理情報を記憶する。ＣＭ３０７とＳＭ３０９は、別々のメモリでなく、一体であっても良い。つまり、１つのメモリが、ＣＭとして使用される領域と、ＳＭとして使用される領域とを有して良い。【００６０】
ＳＷ３０５に、ＣＨＡ３０１、ＤＫＡ３０３、ＣＭ３０７及びＳＭ３０９が接続されている。ＳＷ３０５は、例えばクロスバススイッチであり、それらの要素間の接続を切り替える。ＳＷ３０５以外の接続部（例えばバス）で、ＣＨＡ３０１、ＤＫＡ３０３、ＣＭ３０７及びＳＭ３０９が互いに接続されても良い。【００６１】
ＳＶＰ３１１は、ストレージ装置１０１の保守又は管理に使用される１以上のコンピュータ（管理コンピュータ）であり、例えばＬＡＮ（Local Area Network）を通じて、各ＭＰ２０及び３０に接続されている。ＳＶＰ３１１は、ストレージ装置１０１の外にあっても良い。また、ＳＶＰ３１１は、入出力コンソール（例えば、入力装置と表示装置）と、制御コンソール（例えば、マザーボードのような制御基板）とで構成されて良い。両方のコンソールがストレージ装置１０１内にあっても良いし、制御コンソールがストレージ装置１０１内にあって入出力コンソールがストレージ装置１０１から離れた場所にあっても良い。【００６２】
図４は、ストレージ装置１０１における各種記憶領域の関係を示す。【００６３】
図４に示すように、下位から上位にかけて、１以上のＲＧ（ＲＡＩＤグループ）３７５、１以上のプール１１３、１以上のＶＶＯＬ１１１が管理される。【００６４】
１つのＲＧ３７５は、同一種類のＰＤＥＶで構成されている。ＰＤＥＶ種類は、例えば、性能で定義される。性能とは、例えば、ＰＤＥＶに対するデータのアクセス速度、又は、レスポンスタイム（ＰＤＥＶがコマンドを受けてから応答を返すまでの時間長）である。例えば、ＲＧ＃００は、複数のＳＳＤで構成されており、ＲＧ＃０１は、複数のＨＤＤ−ＳＡＳ（Serial Attached SCSI）で構成されており、ＲＧ＃０２は、複数のＨＤＤ−ＳＡＴＡ（Serial ATA）で構成されている。なお、１つのＲＧを構成する複数のＰＤＥＶの容量は、例えば同じである。【００６５】
プール１１３は、実ページ２３１の集合である。具体的には、例えば、プール１１３は、１以上の実ボリューム（ＲＶＯＬ）２０５で構成されており、各ＲＶＯＬ２０５が、１以上の実ページ２３１で構成されている。以下、プール１１３を構成するＲＶＯＬを、「プールＶＯＬ」と言う。【００６６】
１つのプール１１３を構成する実ページ２３１が階層化されている。すなわち、１つのプール１１３に、複数のティア４４１が存在する。ティア４４１は、例えば、ＲＶＯＬの種類毎に存在する。例えば、図４によれば、ＲＶＯＬの種類として３種類あるため、ティア４４１の数も３つである。このため、１つのティア４４１には、そのティアに対応した種類のＲＶＯＬ２０５が属することになる。具体的には、例えば、ティア＃００は、ＳＳＤという種類であり、ＳＳＤで構成されたＲＧ３７５に基づくＲＶＯＬが属する。ティア＃０１は、ＨＤＤ−ＳＡＳという種類であり、ＨＤＤ−ＳＡＳで構成されたＲＧ３７５に基づくＲＶＯＬが属する。ティア＃０３は、ＨＤＤ−ＳＡＴＡという種類であり、ＨＤＤ−ＳＡＴＡで構成されたＲＧ３７５に基づくＲＶＯＬが属する。なお、ティア４４１は、必ずしも、厳密にＲＶＯＬ種類毎に設けられる必要も無く、同一のティア４４１に、類似の種類のＲＧに基づく複数のＲＶＯＬ２０５が属しても良い。【００６７】
図４に示すプール１１３の構成は、一例であり、プール１１３は、図４に示すようなマルチティア構成でなくても良い。すなわち、例えば、プール１１３は、同種のプールＶＯＬのみで構成されていても良い。【００６８】
本実施例では、前述したように、コントローラ１３１が、プール１１３に関連付け可能なＶＶＯＬ１１１の総容量を、プール１１３の容量以下に制限する。ＶＶＯＬ総容量がプール１１３の容量以下とされても、アクセスの負荷を分散することが期待できる。なぜなら、プール１１３は複数のＲＧに基づく実ページ群であり、それ故、１つのＶＶＯＬに対するアクセスが集中しても、それらのアクセスが、別々のＲＧに基づく複数の実ページに分散されることが期待されるからである。【００６９】
図４に示したような構成において、仮想ページに対する書込み又は読出しの制御や、プール１１３内のデータの再配置の制御や、ＶＶＯＬ１１１のプール１１３に対する割当ての制御や、ＶＶＯＬ１１３の容量拡張の制御が行われる。これらの制御は、例えば、図５Ａに示す制御プログラム（コンピュータプログラム）５５１がプロセッサ（例えばＭＰ２０）で実行されることにより、行われる。コントローラ１３１は、例えば、コントローラ１３１内の記憶資源（例えば、ＳＭ３０９、又は、ＣＨＡ３０１内のメモリ（図示せず））に記憶され、その記憶資源から読み出され、実行される。制御プログラム５５１が実行されることにより行われる処理は、コントローラ１３１が行う処理である。【００７０】
図５Ｂは、ＳＭ３０９が記憶する管理情報を示す。管理情報の一部が、ＣＨＡ３０１内のメモリ（図示せず）、及び／又は、ＤＫＡ３０３内のメモリ（図示せず）に記憶されても良い。【００７１】
管理情報は、例えば、ＶＯＬ管理テーブル５０１、マッピングテーブル５０３、プール管理テーブル５０４、ティア管理テーブル５０６、フリーキュー５０５、削除キュー５０９及びページ情報７０１を含む。【００７２】
ＶＯＬ管理テーブル５０１は、ストレージ装置１０１が有する全てのＶＯＬ（論理ボリューム）に関する情報を有する。【００７３】
マッピングテーブル５０３は、ＶＶＯＬ毎に存在する。マッピングテーブル５０３は、仮想ページと実ページとの対応関係を表す。具体的には、例えば、マッピングテーブル５０３には、実ページが割り当てられている仮想ページに、その実ページのページ情報７０１が関連付けられている。【００７４】
フリーキュー５０５は、プールＶＯＬ毎に存在する。フリーキュー５０５は、「フリー」の実ページに対応したページ情報７０１の列である。【００７５】
削除キュー５０９は、プール１１３毎に存在する。削除キュー５０９は、プール１１３に対する割当てが解除されたＶＶＯＬに対応するマッピングテーブル５０３の列である。【００７６】
ページ情報７０１は、実ページ毎に存在する。ページ情報７０１は、実ページに関する情報を有する。【００７７】
制御プログラム５５１は、図６に示す流れで、実ページを特定する。
（Ａ）制御プログラム５５１は、ＶＯＬ管理テーブル５０１を基に、対象のＶＶＯＬに対応したマッピングテーブル５０３を特定する。
（Ｂ１）（Ａ）で特定されたマッピングテーブル５０３が、削除キュー５０９に関連付けられておらず、且つ、そのテーブル５０３に、対象の仮想ページに割り当てられている実ページのページ情報７０１が関連付けられている場合、制御プログラム５５１は、そのページ情報７０１を特定する。制御プログラム５５１は、そのページ情報７０１に対応する実ページが、「割当て済み」の実ページ、具体的には、対象の仮想ページに割り当てられている実ページである。
（Ｂ２）（Ａ）で特定されたマッピングテーブル５０３が、削除キュー５０９に関連付けられておらず、且つ、対象の仮想ページが未割当ての仮想ページの場合、制御プログラム５５１は、フリーキュー５０５に関連付けられているページ情報７０１を特定する。そのページ情報７０１に対応する実ページが、「フリー」の実ページである。
（Ｂ３）（Ａ）で特定されたマッピングテーブル５０３が、削除キュー５０９に関連付けられている場合、制御プログラム５５１は、そのマッピングテーブル５０３に関連付けられているページ情報７０１を特定する。そのページ情報７０１に対応する実ページが、「ゼロ書き中」の実ページである。【００７８】
以下、管理情報が有する各種情報を詳細に説明する。なお、以下の説明では、「フリー」の実ページを「フリーページ」と言い、「ゼロ書き中」の実ページを、「ゼロ書きページ」と言い、「割当て済み」の実ページを「割当て済みページ」と言うことがある。【００７９】
図７Ａは、ＶＯＬ管理テーブル５０１を示す。【００８０】
ＶＯＬ管理テーブル５０１は、ＶＯＬ毎に、下記の情報、
（＊）ＶＯＬの識別番号であるＶＯＬ番号５０１１、
（＊）ＶＯＬの種別を表すＶＯＬ種別５０１２、
（＊）プール１１３に関連付けられているか否かを表す関連付けフラグ５０１３、
（＊）ＶＯＬの容量を表す容量５０１４、
（＊）関連付けられているプールの識別番号であるプール番号５０１５、
（＊）参照すべきテーブルの識別情報を表すポインタ５０１６、
を有する。【００８１】
ＶＯＬの種別としては、例えば、「仮想」、「プール」及び「通常」がある。「仮想」は、ＶＯＬがＶＶＯＬであることを意味する。「プール」は、ＶＯＬがプールＶＯＬ（ホスト３５１に認識されないＶＯＬ）であることを意味する。「通常」は、ＶＯＬがプールＶＯＬではなくホストに認識されるＲＶＯＬ（実ボリューム）であることを意味する。【００８２】
関連付けフラグ５０１３について、「ＯＮ」が、ＶＶＯＬ１１１がプール１１３に関連付けられていることを意味し、「ＯＦＦ」が、ＶＶＯＬ１１１がプール１１３に関連付けられていないことを意味する。ＶＶＯＬ以外のＶＯＬに対応する関連付けフラグ５０１３は、無効な値（例えば「ＮＵＬＬ」）である。【００８３】
プール１１３に関連付けられているＶＶＯＬ１１１に対応するポインタ５０１６は、有効な値、例えば、そのＶＶＯＬ１１１に対応するマッピングテーブル５０３の識別情報である。【００８４】
図７Ｂは、マッピングテーブル５０３を示す。【００８５】
マッピングテーブル５０３は、そのテーブル５０３に対応するＶＶＯＬ１１１が有する仮想ページ毎に、下記の情報、
（＊）仮想ページの識別番号である仮想ページ番号５０３１、
（＊）仮想ページに割り当てられている実ページに対応したページ情報７０１の識別情報であるポインタ５０３２、
を有する。【００８６】
図８Ａは、フリーキュー５０５を示す。【００８７】
フリーキュー５０５は、前述したように、プールＶＯＬ毎に存在する。フリーキュー５０５は、例えば、先頭のページ情報７０１の識別情報を表すポインタを有する。そして、ページ情報７０１が、次のページ情報７０１の識別情報を表すポインタ（図９Ａ参照）を有する。これにより、フリーキュー５０５に関連付けられているページ情報７０１の順序がわかる。【００８８】
図８Ｂは、削除キュー５０９を示す。【００８９】
削除キュー５０９は、前述したように、プール１１３毎に存在する。削除キュー５０９には、マッピングテーブル５０３が関連付けられる。削除キュー５０９は、例えば、先頭のマッピングテーブル５０３の識別情報を表すポインタを有する。また、マッピングテーブル５０３には、図示しないが、次のマッピングテーブル５０３の識別情報を表すポインタが設定される。これにより、削除キュー５０９に関連付けられているマッピングテーブル５０３の順序がわかる。【００９０】
また、マッピングテーブル５０３には、図７Ｂに示したように、そのテーブル５０３に対応したＶＶＯＬ１１１に割り当てられている実ページに対応したページ情報７０１が関連付けられている。削除キュー５０９に関連付けられているマッピングテーブル５０３に関連付けられているページ情報７０１に対応した実ページが、ゼロ書きページである。【００９１】
図９Ａは、ページ情報７０１を示す。【００９２】
ページ情報７０１は、そのページ情報７０１に対応する実ページ（以下、図９Ａの説明において「対象実ページ」と言う）について、以下の情報、
（＊）そのページ情報７０１の次のページ情報７０１の識別情報である次ポインタ７０１１、
（＊）対象実ページの場所を表すプールＶＯＬアドレス（例えば、プールＶＯＬのＶＯＬ番号と、そのプールＶＯＬにおけるＬＢＡとを含んだアドレス）７０１２、
（＊）対象実ページの割当先の仮想ページの場所を表すＶＶＯＬアドレス（例えば、割当先の仮想ページを含んだＶＶＯＬのＶＯＬ番号と、そのＶＶＯＬにおけるＬＢＡとを含んだアドレス）７０１３、
（＊）対象実ページのステータスを表すステータス７０１４、
を有する。ページ情報７０１が、対象実ページが属するティアの番号を有していても良い。【００９３】
図９Ｂは、プール管理テーブル５０４を示す。【００９４】
プール管理テーブル５０４は、プール１１３毎に、下記の情報、
（＊）プール１１３の識別番号であるプール番号５０４１、
（＊）プール１１３を構成するプールＶＯＬの数であるプールＶＯＬ数５０４２、
（＊）プール１１３を構成する実ページの数である実ページ数５０４３、
（＊）プール１１３を構成する実ページのうちのフリーページの数であるフリーページ数５０４４、
（＊）プール１１３の使用率（プール１１３を構成する実ページの総数に対する割当て済み実ページの数の割合）と比較される閾値である閾値５０４５、
（＊）プール１１３に関連付けられているＶＶＯＬの数であるＶＶＯＬ数５０４６、
（＊）プール１１３に関連付けられている１以上のＶＶＯＬを構成する仮想ページの数である仮想ページ総数５０４７、
を有する。テーブル５０４は、プール１１３の容量を表す値を有しても良い。【００９５】
図２６は、ティア管理テーブル５０６を示す。【００９６】
ティア管理テーブル５０６は、各プールについて、ティア毎に、下記の情報、
（＊）ティアを有するプールの識別番号であるプール番号５０６１、
（＊）ティアの番号であるティア番号５０６２、
（＊）ティアに属するプールＶＯＬの基になっているＰＤＥＶの種類を表す情報であるＰＤＥＶ種類５０６３、
（＊）ティアに属する実ページに対応したページ情報へのポインタであるページ情報ポインタ５０６４、
を有する。このテーブル５０６から、どのプールのどのティアに属する実ページに対応したページ情報７０１を特定することができる。【００９７】
本実施例では、制御プログラム５５１は、以下の処理を行うことができる。【００９８】
＜ライト処理＞
（ａ１）制御プログラム５５１が、ライトコマンドをホスト３５１から受信する。
（ａ２）制御プログラム５５１が、受信したライトコマンドが有するアクセス先情報を基に、ライト先ＶＶＯＬとライト先仮想ページとを特定する。
（ａ３）制御プログラム５５１が、ライトコマンドに従うライト対象のデータをＣＭ３０７に書き込む（制御プログラム５５１は、この段階で、ホスト３５１にライト完了を応答して良い）。
（ａ４）制御プログラム５５１が、（ａ２）で特定されたライト先ＶＶＯＬに対応するマッピングテーブル５０３を基に、上記（Ｗ２）で特定されたライト先仮想ページが未割当ての仮想ページか否かを判断する。
（ａ５）上記（ａ４）の判断の結果が肯定的であれば、制御プログラム５５１が、ライト先仮想ページに割り当てられている実ページ（ライト先仮想ページに関連付けられているページ情報７０１に対応した実ページ）に、ＣＭ３０７内のライト対象のデータを書き込む。
（ａ６）上記（ａ４）の判断の結果が否定的であれば、制御プログラム５５１が、フリーキュー５０５からフリーページを特定する。ここで、制御プログラム５５１は、なるべく上位のティアに対応したフリーキュー５０５からフリーページを特定して良い。
（ａ７）制御プログラム５５１が、上記（ａ６）で特定したフリーページをライト先仮想ページに対応付ける。具体的には、例えば、制御プログラム５５１は、マッピングテーブル５０３における、ライト先仮想ページに対応したポインタ５０３２として、上記（ａ６）で特定したフリーページに対応するページ情報７０１の識別情報を書き込む。また、制御プログラム５５１が、特定したフリーページに対応するページ情報７０１をフリーキュー５０５から外す。また、制御プログラム５５１が、そのページ情報７０１を更新する（例えば、次ポインタ７０１１として無効値（例えば「ＮＵＬＬ」）を書込み、ステータス７０１４を「フリー」から「割当て済み」に更新する）。
（ａ８）制御プログラム５５１は、上記（ａ６）で特定したページに、ＣＭ３０７内のライト対象のデータを書き込む（制御プログラム５５１は、この段階で、ホスト３５１にライト完了を応答して良い）。
（ａ９）制御プログラム５５１は、は、上記（ａ５）又は（ａ８）において、ライト先仮想ページに対応したアクセス負荷情報及び／又は最終アクセス時刻を更新して良い。アクセス負荷情報は、仮想ページに対するアクセスの負荷（例えば、アクセス頻度（単位時間当りのアクセス回数）、或いは、データ転送速度（単位時間当たりに入出力されるデータの量））を表す値である。アクセス負荷情報は、仮想ページ毎に存在する情報であり、例えば、マッピングテーブル５０３に含まれていても良い。【００９９】
＜リード処理＞
（ｂ１）制御プログラム５５１は、リードコマンドをホスト３５１から受信する。
（ｂ２）制御プログラム５５１は、リードコマンドが有するアクセス先情報を基に、リード元ＶＶＯＬとリード元仮想ページを特定する。
（ｂ３）制御プログラム５５１が、リード対象のデータがＣＭ３０７に残っているか否かを判断する。
（ｂ４）上記（ｂ３）の判断の結果が肯定的の場合、制御プログラム５５１は、ＣＭ３０７内のリード対象データを、ホスト３５１に送信する。この場合、制御プログラム５５１は、リード元仮想ページに対応したアクセス負荷情報及び／又は最終アクセス時刻を更新してもしなくても良い。
（ｂ５）上記（ｂ３）の判断の結果が否定的の場合、制御プログラム５５１は、マッピングテーブル５０３を基に、上記（ｂ２）で特定されたリード元仮想ページが未割当ての仮想ページか否かを判断する。
（ｂ６）上記（ｂ５）の判断の結果が否定的であれば、制御プログラム５５１は、所定のデータ（例えばエラー）をホスト３５１に送信する。
（ｂ７）上記（ｂ５）の判断の結果が肯定的であれば、制御プログラム５５１は、リード元仮想ページに割り当てられている実ページからデータを読み出し、そのデータをＣＭ３０７に書き込む。そして、制御プログラム５５１は、ＣＭ３０７内のそのデータをホスト３５１に送信する。
（ｂ８）制御プログラム５５１は、上記（ｂ６）において、リード元仮想ページに対応したアクセス負荷情報及び／又は最終アクセス時刻を更新して良い。【０１００】
＜データの再配置処理に関する処理＞。【０１０１】
制御プログラム５５１は、割当て済みの仮想ページ（実ページが割り当てられている仮想ページ）に対応したアクセス負荷又は最終アクセス時刻を基に、再配置処理を実行するか否かを判断する。【０１０２】
例えば、制御プログラム５５１は、或る仮想ページ（以下、この段落において、「対象仮想ページ」と言う）に対応したアクセス負荷が、対象仮想ページに割り当てられている実ページを有するティアに対応したアクセス負荷範囲に属している場合、再配置処理を行わないと判断し、そうではない場合、再配置処理を行うと判断する。再配置処理では、制御プログラム５５１は、対象仮想ページに割り当てられている実ページ内のデータを、対象ページのアクセス負荷が属するアクセス負荷範囲に対応したティア内のフリーページにマイグレーションする。そして、制御プログラム５５１は、対象仮想ページに、マイグレーション元の実ページに代えて、マイグレーション先の実ページを割り当てる。【０１０３】
また、例えば、制御プログラム５５１は、或る仮想ページに対応した最終アクセス時刻から一定時間を経過している場合、再配置処理を行う判断し、そうではない場合、再配置処理を行わないと判断する。再配置処理では、制御プログラム５５１は、対象仮想ページに割り当てられている実ページ内のデータを、その実ページを有するティアよりも下位のティア内のフリーページにマイグレーションする。そして、制御プログラム５５１は、対象仮想ページに、マイグレーション元の実ページに代えて、マイグレーション先の実ページを割り当てる。【０１０４】
＜制御プログラム５５１の起動時の処理＞。【０１０５】
図１０は、制御プログラム５５１の起動時の処理の流れを示す。【０１０６】
制御プログラム５５１は、制御プログラムの更新後（例えばバージョンアップ後）に初めて起動したか否かを判断する（Ｓ１００１）。具体的には、例えば、起動済みが設定されていない場合、制御プログラム５５１は、初めて起動したと判断し、起動済みが設定されている場合、初めての起動ではないと判断する。【０１０７】
Ｓ１００１の判断の結果が肯定的の場合（Ｓ１００１：ＹＥＳ）、制御プログラム５５１は、更新前の制御プログラム（ＶＶＯＬ総容量をプール１１３の容量以下に制限する機能を有していないプログラム）が実行されていた時点にあった情報を基に、ＶＶＯＬ総容量をプール１１３の容量以下に制限するために必要な情報を準備する。具体的には、制御プログラム５５１は、ＶＶＯＬ総容量算出（図１１参照）を行う（Ｓ１００２）。【０１０８】
その後、制御プログラム５５１は、例えば起動済みを設定し（Ｓ１００３）、終了する。これにより、制御プログラム５５１の２回目以降の起動では、Ｓ１００１の判断の結果が否定的となる。【０１０９】
＜ＶＶＯＬ総容量算出＞。【０１１０】
図１１は、ＶＶＯＬ総容量算出の流れを示す。【０１１１】
制御プログラム５５１は、ＶＶＯＬ毎に、Ｓ１１０１を行う（ループ（Ａ））。以下、ループ（Ａ）における処理を、１つのＶＶＯＬ（図１１の説明において、「対象ＶＶＯＬ」と言う）を例に採り、説明する。【０１１２】
Ｓ１１０１で、制御プログラム５５１は、ＶＯＬ管理テーブル５０１を基に、対象ＶＶＯＬがいずれかのプール１１３に関連付けられているか否かを判断する。【０１１３】
この判断の結果が肯定的の場合（Ｓ１１０１：ＹＥＳ）、制御プログラム５５１は、対象ＶＶＯＬの容量を基に、対象ＶＶＯＬが関連付けられているプール（図１１の説明において、「対象プール」と言う）１１３について、ＶＶＯＬ総容量を更新する。具体的には、制御プログラム５５１は、以下の処理を行う。
（Ｓ１１０２）制御プログラム５５１は、対象ＶＶＯＬに対応したＶＶＯＬ容量５０１４から、対象ＶＶＯＬの容量を取得する。
（Ｓ１１０３）制御プログラム５５１は、対象ＶＶＯＬに対応したプール番号５０１５から、対象ＶＶＯＬが関連付けられているプールの識別番号（プール番号）を取得する。
（Ｓ１１０４）制御プログラム５５１は、Ｓ１１０２で取得した、対象ＶＶＯＬの容量を、仮想ページ数に変換する。対象ＶＶＯＬの容量を仮想ページの容量で除算することにより得られた値が、対象ＶＶＯＬの仮想ページ数である。
（Ｓ１１０５）制御プログラム５５１は、Ｓ１１０４で得られた仮想ページ数を、対象プール（Ｓ１１０３で取得されたプール番号）に対応する仮想ページ総数５０４７に加算する。【０１１４】
つまり、ＶＶＯＬ総容量算出では、更新後の制御プログラム５５１によって、仮想ページ総数５０４７が作成される（更新される）。【０１１５】
Ｓ１１０１の判断の結果が否定的の場合（Ｓ１１０１：ＮＯ）、制御プログラム５５１は、対象ＶＶＯＬについて、Ｓ１１０２乃至Ｓ１１０５を行わない。【０１１６】
全てのＶＶＯＬについて、Ｓ１１０１（Ｓ１１０１の判断の結果が肯定的の場合、Ｓ１１０２乃至Ｓ１１０５）が行われた場合、ループ（Ａ）が終了する。【０１１７】
ＶＶＯＬ総容量算出の完了が、ＶＶＯＬ総容量をプール１１３の容量以下に制限するために必要な情報の準備の完了である。【０１１８】
なお、制御プログラム５５１は、Ｓ１１０５を行った都度に、更新後の仮想ページ総数５０４７が対象プールの実ページ数５０４３（対象プールの容量）以下であるか否かを判断しても良い。その判断の結果が否定的であれば、制御プログラム５５１は、警告を出力して良い（例えば、ＳＶＰ３１１に警告を出力して良い）。【０１１９】
また、例えば、制御プログラム５５１は、図１１のループ（Ａ）が終了した後、更新後の仮想ページ総数５０４７が実ページ数５０４３を超えているプール（この段落で「第１のプール」と言う）があるか否かを判断しても良い。その判断の結果が肯定的であれば、制御プログラム５５１は、第１のプールに関連付けられている１以上のＶＶＯＬ内のデータを、更新後の仮想ページ総数５０４７が実ページ数５０４３より小さいプール（この段落で「第２のプール」と言う）にマイグレーションして良い。第１のプールについて、仮想ページ総数５０４７を実ページ数５０４３以下にするためである。具体的には、例えば、下記のＶＶＯＬマイグレーション処理が行なわれても良い。
（ｄ１）制御プログラム５５１は、第１のプールに関連付けられている１つのＶＶＯＬ（ここの説明において、「選択ＶＶＯＬ」と言う）を選択する。
（ｄ２）制御プログラム５５１は、選択ＶＶＯＬの仮想ページ数が仮想ページ総数５０４７に加算されても仮想ページ総数５０４７が実ページ数５０４３以下となる第２のプールを探す。そのような第２のプールが見つからなければ、ＶＶＯＬマイグレーション処理が終了する。
（ｄ３）制御プログラム５５１は、（ｄ２）で第２のプールが見つかれば、選択ＶＶＯＬが有するデータを、第１のプールから、実ページ単位で、見つかった第２のプールにマイグレーションする。
（ｄ４）制御プログラム５５１は、選択ＶＶＯＬの第１のプールに対する関連付けを解除し、選択ＶＶＯＬを第２のプールに関連付ける。具体的には、以下の処理が行われる。
（ｄ４１）制御プログラム５５１は、第１のプールの仮想ページ総数５０４７から、選択ＶＶＯＬの仮想ページ数を減算し、且つ、第１のプールのＶＶＯＬ数５０４６から、１を減算する。
（ｄ４２）制御プログラム５５１は、選択ＶＶＯＬに対応したプール番号５０１５を、第１のプールの識別番号から第２のプールの識別番号に変更する。
（ｄ４３）制御プログラム５５１は、第２のプールの仮想ページ総数５０４７に、選択ＶＶＯＬの仮想ページ数を加算し、且つ、第２のプールのＶＶＯＬ数５０４６に、１を加算する。【０１２０】
＜関連付け対象のＶＶＯＬ、又は、関連付けの解除対象のＶＶＯＬ、の指定＞。【０１２１】
管理者は、ＳＶＰ３１１を用いて、プール１１３に関連付けられていない１以上のＶＶＯＬのうちの管理者所望のＶＶＯＬを、１以上のプール１１３のうちの所望のプール１１３に関連付けたり、関連付けを解除したりすることができる。【０１２２】
例えば、ＳＶＰ３１１が、制御プログラム５５１から、ＶＯＬ管理テーブル５０１が有する情報を受信し、その情報を基に、図１２Ａに示すＶＶＯＬ一覧１２１１を表示する。ＶＶＯＬ一覧１２１１は、ＶＶＯＬ毎の情報（ＶＶＯＬ番号（ＶＶＯＬのＶＯＬ番号）、関連付けフラグ、容量、プール番号）を有する。ＳＶＰ３１１は、管理者所望のＶＶＯＬの指定を受け付ける。管理者所望のＶＶＯＬが、関連付けフラグ「ＯＦＦ」のＶＶＯＬであれば、関連付けを行うか否かを管理者に問い合わせる。管理者所望のＶＶＯＬが、関連付けフラグ「ＯＮ」のＶＶＯＬであれば、関連付けを解除するか否かを管理者に問い合わせる。【０１２３】
ＳＶＰ３１１は、関連付けフラグ「ＯＦＦ」のＶＶＯＬについて関連付けを行うことを管理者から受けた場合、ＳＶＰ３１１が、制御プログラム５５１から、プール管理テーブル５０４が有する情報を受信し、その情報を基に、図１２Ｂに示すプール一覧１２２１を表示する。プール一覧１２２１は、プール毎の情報（プール番号、プール容量（例えば、実ページ数５０４３を基に算出された値）、使用容量（例えば、実ページ数５０４３とフリーページ数５０４４とを基に算出された値）、閾値）を有する。ＳＶＰ３１１は、管理者所望のプールの指定を受け付ける。【０１２４】
＜ＶＶＯＬ関連付け＞。【０１２５】
図１３は、ＶＶＯＬ関連付けの流れを示す。この処理は、例えば、制御プログラム５５１が、ＶＶＯＬ一覧１２１１（図１２Ａ参照）及びプール一覧１２２１（図１２Ｂ参照）を通じて、ＶＶＯＬの関連付けを管理者から指示された場合に、行われる。【０１２６】
制御プログラム５５１が、管理者から指定されたプール（図１３及び図１４の説明において「対象プール」と言う）の識別番号（プール番号）を、ＳＶＰ３１１から取得する（Ｓ１３０１）。【０１２７】
また、制御プログラム５５１は、管理者から指定されたＶＶＯＬ（図１３及び図１４の説明において「対象ＶＶＯＬ」と言う）の識別番号（ＶＶＯＬ番号）を、ＳＶＰ３１１から取得し、そのＶＶＯＬ番号に対応した容量５０１４から、対象ＶＶＯＬの容量を取得する（Ｓ１３０２）。そして、制御プログラム５５１は、Ｓ１３０２で取得したＶＶＯＬ容量を仮想ページ数に変換する（Ｓ１３０３）。【０１２８】
また、制御プログラム５５１は、Ｓ１３０１で取得したプール番号に対応した仮想ページ総数５０４７（対象プールの仮想ページ総数５０４７）から、仮想ページの総数を取得する（Ｓ１３０４）。【０１２９】
制御プログラム５５１は、Ｓ１３０３での変換後の仮想ページ数（対象ＶＶＯＬの仮想ページ数）と、Ｓ１３０４で取得した仮想ページ総数（対象プールの仮想ページ総数）とを基に、ＶＶＯＬ容量チェック（図１４参照）を行う（Ｓ１３０５）。【０１３０】
ＶＶＯＬ容量チェックの戻り値が、「正常」を意味する場合（Ｓ１３０６：ＹＥＳ）、制御プログラム５５１は、対象ＶＶＯＬを対象プールに関連付ける（Ｓ１３０７）。具体的には、以下の処理が行われる。
（＊）制御プログラム５５１は、対象プールの仮想ページ総数５０４７に、対象ＶＶＯＬの仮想ページ数を加算する。
（＊）制御プログラム５５１は、対象プールのＶＶＯＬ数５０４６に、１を加算する。
（＊）制御プログラム５５１は、対象ＶＶＯＬのプール番号５０１５を、対象プールの識別番号に更新する。【０１３１】
ＶＶＯＬ容量チェックの戻り値が、「異常」を意味する場合（Ｓ１３０６：ＮＯ）、制御プログラム５５１は、Ｓ１３０７をスキップし、ＶＶＯＬ関連付けを終了する。【０１３２】
＜ＶＶＯＬ容量チェック＞。【０１３３】
図１４は、ＶＶＯＬ容量チェックの流れを示す。【０１３４】
制御プログラム５５１は、オプション＃１がＯＮか否かを判断する（Ｓ１４０１）。「オプション＃１」は、ＶＶＯＬ総容量をプール１１３の容量以下に制限することを、ストレージ装置１０１に存在する全てのプール１１３について行うモードである。【０１３５】
Ｓ１４０１の判断の結果が肯定的の場合（Ｓ１４０１：ＹＥＳ）、以下の処理が行われる。
（＊）制御プログラム５５１は、対象ＶＶＯＬの仮想ページ数と対象プールの仮想ページ総数との和が、対象プールの実ページ数５０４３以下か否かを判断する（Ｓ１４０４）。
（＊）Ｓ１４０４の判断の結果が否定的であれば、対象ＶＶＯＬの仮想ページ数と対象プールの仮想ページ総数との和が、対象プールの実ページ数５０４３を越えてしまうということである。この場合、制御プログラム５５１は、「異常」を意味する戻り値を出力する（Ｓ１４０７）。この結果、図１３に示したように、Ｓ１３０７（対象ＶＶＯＬの対象プールに対する関連付け）は行われない。
（＊）Ｓ１４０４の判断の結果が肯定的であれば、対象ＶＶＯＬの仮想ページ数と対象プールの仮想ページ総数との和が、対象プールの実ページ数５０４３を越えないということである。この場合、制御プログラム５５１は、ゼロ書きチェック（図１５参照）を行う（Ｓ１４０５）。つまり、制御プログラム５５１は、対象プールにゼロ書きページが存在するか否かを調べる。
（＊）Ｓ１４０５の結果、対象プールにゼロ書きページが無ければ（Ｓ１４０６：ＮＯ）、制御プログラム５５１は、「正常」を意味する戻り値を出力する（Ｓ１４０８）。なぜなら、対象ＶＶＯＬの仮想ページ数と対象プールの仮想ページ総数との和が、対象プールの実ページ数５０４３を越えておらず、且つ、対象プールがゼロ書きページ（ＶＶＯＬへの割当てが不可能な実ページ）を有していないが故に、対象プールが、対象ＶＶＯＬの仮想ページ数以上のフリーページを有するからである。Ｓ１４０８の結果、図１３に示したように、Ｓ１３０７（対象ＶＶＯＬの対象プールに対する関連付け）が行われる。
（＊）Ｓ１４０５の結果、対象プールにゼロ書きページがあれば（Ｓ１４０６：ＹＥＳ）、制御プログラム５５１は、「異常」を意味する戻り値を出力する（Ｓ１４０７）。なぜなら、対象ＶＶＯＬの仮想ページ数と対象プールの仮想ページ総数との和が、対象プールの実ページ数５０４３を越えていなくても、対象プールがゼロ書きページを有しているが故に、対象プールが、対象ＶＶＯＬの仮想ページ数以上のフリーページを有していない可能性があるからである。【０１３６】
Ｓ１４０１の判断の結果が否定的の場合（Ｓ１４０１：ＮＯ）、制御プログラム５５１は、オプション＃２がＯＮか否かを判断する（Ｓ１４０２）。「オプション＃２」は、ＶＶＯＬ総容量をプール１１３の容量以下に制限することを、ストレージ装置１０１に存在するプール１１３のうちの管理者所望のプール１１３についてのみ行うモードである。【０１３７】
Ｓ１４０２の判断の結果が否定的の場合（Ｓ１４０２：ＮＯ）、制御プログラム５５１は、「正常」を意味する戻り値を出力する（Ｓ１４０８）。なぜなら、オプション＃１及びオプション＃２のいずれもＯＦＦになっており、それ故、対象プールについて、ＶＶＯＬ総容量を対象プールの容量以下に制限する必要が無いからである。【０１３８】
Ｓ１４０２の判断の結果が肯定的の場合（Ｓ１４０２：ＹＥＳ）、制御プログラム５５１は、対象プールが、ＶＶＯＬ総容量をプール容量以下に制限する必要のあるプールか否かを判断する（Ｓ１４０３）。ここでは、例えば、対象プールの閾値５０４５が、有効な値、又は、第１の値以上であれば、Ｓ１４０３の判断の結果が肯定的となり、対象プールの閾値５０４５が、無効な値（例えば「ＮＵＬＬ」）、又は、第２の値未満（第２の値は第１の値以下）であれば、Ｓ１４０３の判断の結果が否定的となる。【０１３９】
Ｓ１４０３の判断の結果が否定的の場合（Ｓ１４０３：ＮＯ）、制御プログラム５５１は、「正常」を意味する戻り値を出力する（Ｓ１４０８）。なぜなら、対象プールについて、ＶＶＯＬ総容量を対象プールの容量以下に制限する必要が無いからである。【０１４０】
Ｓ１４０３の判断の結果が肯定的の場合（Ｓ１４０３：ＹＥＳ）、制御プログラム５５１は、前述したＳ１４０４以降を行う。なぜなら、対象プールについて、ＶＶＯＬ総容量を対象プールの容量以下に制限する必要があるからである。【０１４１】
以上のＶＶＯＬ容量チェックの流れによれば、オプション＃１とオプション＃２の両方がＯＮの場合、オプション＃１が優先されるが、それに代えて、オプション＃２が優先されても良い。【０１４２】
＜ゼロ書きチェック＞。【０１４３】
図１５は、ゼロ書きチェックの流れを示す。【０１４４】
制御プログラム５５１は、対象プールの識別番号（プール番号）を取得する（Ｓ１５０１）。ここで言う「対象プール」は、図１３及び図１４の説明における対象プールであることもあれば、図２０の説明における容量拡張の対象のＶＶＯＬに関連付けられているプールであることもある。【０１４５】
制御プログラム５５１は、対象プールに対応した削除キュー（図１５の説明において「対象削除キュー」と言う）５０９にマッピングテーブル５０３が関連付けられているか否かを判断する（Ｓ１５０２）。【０１４６】
Ｓ１５０２の判断の結果が肯定的の場合（Ｓ１５０２：ＹＥＳ）、制御プログラム５５１は、Ｓ１５０３を行う。具体的には、以下の処理が行われる。
（ｅ１）制御プログラム５５１は、対象削除キュー５０９に関連付けられている１つのマッピングテーブル（例えば先頭のマッピングテーブル）５０３を選択する。
（ｅ２）制御プログラム５５１は、（ｅ１）で選択したマッピングテーブル５０３に関連付けられているページ情報７０１の数を、ゼロ書きページ数に加算する。
（ｅ３）制御プログラム５５１は、対象削除キュー５０９から、最近の（ｅ１）で選択したマッピングテーブル５０３を除去する。【０１４７】
制御プログラム５５１は、Ｓ１５０３でマッピングテーブル５０３を対象削除キュー５０９から除去した後、再び、Ｓ１５０２を行う。【０１４８】
Ｓ１５０２の判断の結果が否定的の場合（Ｓ１５０２：ＮＯ）、制御プログラム５５１は、ゼロ書きページ数がゼロか否かを判断する（Ｓ１５０４）。【０１４９】
Ｓ１５０４の判断の結果が肯定的であれば（Ｓ１５０４：ＹＥＳ）、制御プログラム５５１は、ゼロ書きページ無しという判断結果を出力する（Ｓ１５０５）。【０１５０】
Ｓ１５０４の判断の結果が否定的であれば（Ｓ１５０４：ＮＯ）、制御プログラム５５１は、ゼロ書きページ有りという判断結果を出力する（Ｓ１５０６）。【０１５１】
＜ＶＶＯＬ関連付け解除＞【０１５２】
図１６は、ＶＶＯＬ関連付け解除の流れを示す。この処理は、例えば、制御プログラム５５１が、ＶＶＯＬ一覧１２１１（図１２Ａ参照）を通じて、ＶＶＯＬの関連付けの解除を管理者から指示された場合に、行われる。【０１５３】
制御プログラム５５１が、管理者から指定されたＶＶＯＬ（図１６の説明において「対象ＶＶＯＬ」と言う）のＶＯＬ番号（ＶＶＯＬ番号）を取得する（Ｓ１６０１）。【０１５４】
制御プログラム５５１が、Ｓ１６０１で取得したＶＶＯＬ番号を有する、ＶＯＬ管理テーブル５０１における行を特定する（Ｓ１６０２）。【０１５５】
制御プログラム５５１が、その行におけるポインタ５０１６を特定する（Ｓ１６０３）。【０１５６】
制御プログラム５５１が、特定したポインタ５０１６をクリアする（Ｓ１６０４）。例えば、制御プログラム５５１が、そのポインタ５０１６を、無効値（例えば「ＮＵＬＬ」）に更新する。【０１５７】
制御プログラム５５１が、クリア前のポインタ５０１６が表すマッピングテーブル（対象ＶＶＯＬに対応したマッピングテーブル）５０３を、対象ＶＶＯＬが関連付けられていたプールに対応する削除キュー５０９に関連付ける（Ｓ１６０５）。【０１５８】
＜ゼロ書き処理＞。【０１５９】
制御プログラム５５１は、プール毎に、ゼロ書き処理を行う。ゼロ書き処理では、制御プログラム５５１は、そのプールに対応した削除キュー５０９に関連付けられている実ページ（正確には、削除キュー５０９に関連付けられているマッピングテーブル５０３に関連付いているページ情報７０１に対応した実ページ）に、ビット値“０”を書き込む。ゼロ書き処理の開始のタイミングは、実ページのステータスが「ゼロ書き中」になった以降における任意のタイミングで良い。具体的には、例えば、下記が考えられる。
（＊）制御プログラム５５１が、実ページのステータスを「ゼロ書き中」にしたら直ちに、その実ページに対するゼロ書きを行う。
（＊）制御プログラム５５１が、定期的に又は不定的に、削除キュー５０９に関連付けられている実ページがあるか否かを判断し、その判断の結果が肯定的であれば、その実ページに対してゼロ書きを行う。
（＊）制御プログラム５５１が、ＶＶＯＬ内の仮想ページに対する書込みの際に、そのＶＶＯＬが関連付けられているプールにフリーページが無い場合、そのプール内のゼロ書き実ページに対してゼロ書きを行う（ゼロ書きが済んだ実ページが、フリーページとして、書込み先の仮想ページに割り当てられて良い）。【０１６０】
図１７は、ゼロ書き処理の流れを示す。【０１６１】
制御プログラム５５１が、ゼロ書き処理の対象のプールの識別番号（プール番号）を取得する（Ｓ１７０１）。【０１６２】
制御プログラム５５１が、取得したプール番号に対応する削除キュー（図１７の説明において「対象削除キュー」と言う）５０９が有するポインタが表す情報、又は、最近のＳ１７０４でのマッピングテーブル５０３が有するポインタが表す情報を取得する（Ｓ１７０２）。【０１６３】
制御プログラム５５１は、Ｓ１７０２で取得した情報がＮＵＬＬであれば（Ｓ１７０３：ＹＥＳ）、この処理を終了する。なぜなら、対象削除キューにマッピングテーブル５０３が関連付けられていないからである。【０１６４】
制御プログラム５５１は、Ｓ１７０２で取得した情報がマッピングテーブル５０３を表していれば（Ｓ１７０３：ＮＯ）、そのマッピングテーブル５０３に対応するＶＶＯＬの先頭の仮想ページから最終の仮想ページにかけて、ポインタ５０３２がページ情報７０１の識別情報を表す仮想ページ毎に、以下の処理を行う。
（Ｓ１７０４）制御プログラム５５１は、仮想ページのポインタ５０３２を基に、ページ情報７０１を取得する。
（Ｓ１７０５）制御プログラム５５１は、取得したページ情報７０１に対応する実ページ内の全ビットの値が“０”になるよう、１以上のビット値“０”を書き込む。
（Ｓ１７０６）制御プログラム５５１は、Ｓ１７０５を行ってからスリープ時間待つ。
（Ｓ１７０７）制御プログラム５５１は、最終の仮想ページまでチェックしていなければ（Ｓ１７０７：ＮＯ）、ページ情報７０１が関連付けられている別の仮想ページについてＳ１７０４を行い、最終の仮想ページまでチェックしていれば（Ｓ１７０７：ＹＥＳ）、Ｓ１７０２を行う。【０１６５】
図１７に示した流れによれば、スリープ時間の長さを調節することで、ゼロ書き処理の速度を調整することができる。【０１６６】
例えば、ホスト３５１からのアクセス先の実ページの基になっているＲＧ（ＲＡＩＤグループ）と、ビット値“０”の書込み先の実ページの基になっているＲＧとが同じ場合、そのＲＧを構成するＰＤＥＶの負荷が高くなり、それ故、ホスト３５１からのアクセスに悪影響がある。そこで、通常、制御プログラム５５１は、通常、スリープ時間を第１の時間長とする。その後、制御プログラム５５１は、プール内のフリーページの数が所定値以下（所定値は０以上の整数）であれば、そのプールに対応したスリープ時間を、第１の時間長よりも短い第２の時間長に変更する。【０１６７】
＜削除容量の算出＞。【０１６８】
制御プログラム５５１は、プール毎に、削除容量を算出し、算出された削除容量をＳＶＰ３１１に表示することができる。「削除容量」は、ゼロ書きページ数と実ページの容量との積である。【０１６９】
図１８は、削除容量の算出の流れを示す。【０１７０】
制御プログラム５５１は、削除キュー５０９毎に、Ｓ１８０１及びＳ１８０２を行い（ループ（Ａ））、削除キュー５０９に関連付けられているマッピングテーブル毎に、Ｓ１８０１を行う（ループ（Ｂ））。
（Ｓ１８０１）制御プログラム５５１は、削除キュー５０９に関連付けられているマッピングテーブル５０３に関連付いたページ情報７０１の数を把握し、その数を、ゼロ書きページ数に加算する。
（Ｓ１８０２）制御プログラム５５１は、１つの削除キュー５０９（１つのプール）に対応したゼロ書きページ数を、削除容量に変換する。【０１７１】
制御プログラム５５１は、プール毎の削除容量を、例えば図１９に示すように、プール一覧１９０１に含めて表示する（Ｓ１８０３）。【０１７２】
＜ＶＶＯＬ容量の拡張＞。【０１７３】
図２０は、ＶＶＯＬ容量の拡張の流れを示す。【０１７４】
制御プログラム５５１は、ＳＶＰ３１１からのＶＶＯＬ拡張要求に応答して、管理者所望のＶＶＯＬ（図２０の説明において「対象ＶＶＯＬ」と言う）の容量を拡張することができる。ＶＶＯＬ拡張要求は、例えば、対象ＶＶＯＬの識別番号、対象ＶＶＯＬの容量に追加する容量（拡張容量）を表す情報を有する。【０１７５】
図２０によれば、図１４のＳ１４０１〜Ｓ１４０６と同様の処理が行われる（Ｓ２００１〜Ｓ２００６）。【０１７６】
Ｓ２００６の結果、対象ＶＶＯＬが関連付けられているプール（図２０の説明において「対象プール」と言う）にゼロ書きページがあれば（Ｓ２００６：ＹＥＳ）、制御プログラム５５１は、対象ＶＶＯＬの容量拡張が可能か否かを判断する（Ｓ２００７）。具体的には、制御プログラム５５１は、対象プールの実ページ数とゼロ書きページ数との差が容量拡張後の仮想ページ総数以上か否かを判断する。より具体的には、制御プログラム５５１は、下記の（Ｐ）の値が下記の（Ｑ）の値以上か否かを判断する（図２１参照）。
（Ｐ）対象プールの実ページ数５０４３から対象プールのゼロ書きページ数（対象プールに対応した削除キュー５０９に関連付けられているページ情報７０１の総数）を減算した値、
（Ｑ）対象プールの仮想ページ総数５０４７に拡張容量分の仮想ページ数（増加する仮想ページ数）を加算した値。【０１７７】
Ｓ２００７の判断の結果が否定的であれば（Ｓ２００７：ＮＯ）、制御プログラム５５１は、対象ＶＶＯＬの容量の拡張を行わない（Ｓ２００８）。例えば、制御プログラム５５１は、エラーをＳＶＰ３１１に通知する。【０１７８】
Ｓ２００７の判断の結果が肯定的であれば（Ｓ２００７：ＹＥＳ）、制御プログラム５５１は、上述のＶＶＯＬ拡張要求に従って、対象ＶＶＯＬの容量を拡張する（Ｓ２００９）。【０１７９】
なお、Ｓ２００６：ＹＥＳの場合、制御プログラム５５１は、Ｓ２００７の判断を行うことなく、Ｓ２００８を行っても良い。【０１８０】
以上が、実施例１の説明である。【０１８１】
実施例１によれば、プールから関連付けが解除されたＶＶＯＬに割り当てられていた実ページが、やがて、ゼロ書きページとなる。【０１８２】
そして、実施例１によれば、更新後のＶＶＯＬ総容量がプールの容量以下であっても、そのプールにゼロ書きページがある場合には、ＶＶＯＬの関連付けが非実行（キャンセル）とされる。これにより、ＶＶＯＬをプールに関連付けた後に、書込み先の未割当ての仮想ページに割り当てるためのフリーページがそのプールで不足するということが生じないようにすることができる。【０１８３】
また、実施例１によれば、プールに関連付けられているＶＶＯＬの容量を拡張すると、容量拡張後のＶＶＯＬ総容量が、そのプールの実質容量（プールの容量と１以上のゼロ書きページの総容量との差）を超えてしまう場合には、ＶＶＯＬの容量拡張が非実行（キャンセル）とされる。これにより、ＶＶＯＬの容量を拡張した後に、書込み先の未割当ての仮想ページに割り当てるためのフリーページがプールで不足するということが生じないようにすることができる。
【実施例２】
【０１８４】
以下、本発明の実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略或いは簡略する。【０１８５】
実施例２では、制御プログラム５５１が、ＶＶＯＬ関連付け後のＶＶＯＬ総容量がプールの容量以下の場合、そのプールにゼロ書きページがあっても、ＶＶＯＬ関連付け後のＶＶＯＬ総容量がそのプールの実質容量（プールの容量と１以上のゼロ書きページの総容量との差）を超えていなければ、ＶＶＯＬをプールに関連付ける。【０１８６】
具体的には、図２２Ａに示すように、Ｓ１４０６：ＹＥＳの場合、制御プログラム５５１は、下記の（Ｘ）の値が下記の（Ｙ）の値を越えているか否かを判断する（Ｓ２２０１）。
（Ｘ）対象プールの仮想ページ総数５０４７と対象ＶＶＯＬ（関連付け対象のＶＶＯＬ）の仮想ページ数との和、
（Ｙ）対象プールの実ページ数５０４３から対象プールのゼロ書きページ数（対象プールに対応した削除キュー５０９に関連付けられているページ情報７０１の総数）を減算した値。【０１８７】
Ｓ２２０１の判断の結果が肯定的の場合（Ｓ２２０１：ＹＥＳ）、制御プログラム５５１は、「異常」を意味する戻り値を出力する（Ｓ１４０７）。【０１８８】
Ｓ２２０１の判断の結果が否定的の場合（Ｓ２２０１：ＮＯ）、制御プログラム５５１は、「正常」を意味する戻り値を出力する（Ｓ１４０８）。【０１８９】
実施例２によれば、書込み先の未割当ての仮想ページに割り当てるためのフリーページがプールで不足するということが生じないようにすることを実現しつつ、ＶＶＯＬをプールに関連付けられる可能性を高めることができる。
【実施例３】
【０１９０】
本発明の実施例３では、制御プログラム５５１は、下記（ｋ）のケースにおいて、ＶＶＯＬ総容量の更新（ＶＶＯＬの関連付け、又は、ＶＶＯＬの容量拡張）を非実行（キャンセル）とするのではなく、図２２ＢのＳ２２１１を行った後に、Ｓ１４０８（「正常」を表す戻り値の出力）、又は、Ｓ２００９（ＶＶＯＬの容量拡張）を行う。
（ｋ）更新後のＶＶＯＬ総容量（ＶＶＯＬ関連付け後のＶＶＯＬ総容量、又は、ＶＶＯＬの容量拡張後のＶＶＯＬ総容量）がプールの容量以下であり、且つ、そのプールにゼロ書きページがある、又は、更新後のＶＶＯＬ総容量がそのプールの実質容量（プールの容量と１以上のゼロ書きページの総容量との差）を超えてしまう。【０１９１】
Ｓ２２１１で、制御プログラム５５１は、下記の（ａ）又は（ｂ）を行う。
（ａ）制御プログラム５５１は、ゼロ書き処理が終わるまで待つ。具体的には、例えば、制御プログラム５５１は、プールの実質容量（プール容量と１以上のゼロ書きページの総容量との差）が更新後のＶＶＯＬ総容量以上になるぐらいに、プールからゼロ書きページが減るまで（プール内のゼロ書きページのステータスが「フリー」に遷移するまで）、待つ。制御プログラム５５１は、そのプール内のゼロ書きページの数がゼロになるまで、待っても良い。
（ｂ）制御プログラム５５１は、対象ＶＶＯＬ（関連付け対象のＶＶＯＬ、又は、容量が拡張されるＶＶＯＬ）を、第１のプール（ＶＶＯＬの関連付け先のプール、又は、容量が拡張されるＶＶＯＬが関連付けられているプール）に代えて、第２のプールに関連付ける。その第２のプールは、下記の条件（ｖ）及び（ｗ）を満たすプールである。
（ｖ）更新後のＶＶＯＬ総容量（プールのＶＶＯＬ総容量と、関連付け対象のＶＶＯＬの容量、又は、拡張される容量との和）が、プールの容量以下である。
（ｗ）ゼロ書きページが無い、又は、更新後のＶＶＯＬ総容量がプールの実質容量（プールの容量と１以上のゼロ書きページの総容量との差）以下である。【０１９２】
実施例３によれば、書込み先の未割当ての仮想ページに割り当てるためのフリーページがプールで不足するということが生じないようにすることを実現しつつ、ＶＶＯＬの関連付け、又は、ＶＶＯＬの容量拡張を行える可能性を高めることができる。
【実施例４】
【０１９３】
本発明の実施例４では、制御プログラム５５１は、実施例３で述べたケース（ｋ）においても、ＶＶＯＬ総容量の更新（ＶＶＯＬの関連付け、又は、ＶＶＯＬの容量拡張）を非実行（キャンセル）とするのではなく、図２３のＳ２３０１を行った後に、Ｓ１４０８（「正常」を表す戻り値の出力）、又は、Ｓ２００９（ＶＶＯＬの容量拡張）を行う。【０１９４】
Ｓ２３０１で、制御プログラム５５１は、ゼロ書き処理が終わるまで待ち、且つ、ＶＶＯＬの総容量が更新されるプール（ＶＶＯＬの関連付け先のプール、又は、容量が拡張されるＶＶＯＬが関連付けられているプール、以下、実施例４の説明において「対象プール」と言う）についてのゼロ書き処理（図１７参照）を、他のプールについてのゼロ書き処理よりも優先して行う。また、制御プログラム５５１は、Ｓ２３０１で、対象プールについてのゼロ書き処理における、スリープ時間を、最短にして良い。【０１９５】
実施例４によれば、書込み先の未割当ての仮想ページに割り当てるためのフリーページがプールで不足するということが生じないようにすることを実現しつつ、ＶＶＯＬの関連付け、又は、ＶＶＯＬの容量拡張を迅速に行える可能性を高めることができる。
【実施例５】
【０１９６】
本発明の実施例５では、プールに対するゼロ書き処理において、制御プログラム５５１は、上位のティアほど、優先的に、ゼロ書きページに対するゼロ書き（ビット値“０”の書込み）を行う。具体的には、本実施例では、制御プログラム５５１は、図１７に示したゼロ書き処理に代えて、図２４に示すゼロ書き処理を行う。【０１９７】
すなわち、制御プログラム５５１が、ゼロ書き処理の対象のプール（図２５の説明において「対象プール」と言う）のうち、最上位のティアを選択する（Ｓ２４０１）。【０１９８】
制御プログラム５５１は、選択されたティアにゼロ書きページがあるか否かを判断する（Ｓ２４０２）。具体的には、例えば、制御プログラム５５１は、ティア管理テーブル５０６を基に、選択されたティアに属するページ情報７０１を特定し、特定したページ情報７０１毎に、ページ情報７０１に対応する実ページがゼロ書きページであるか否かを判断する。【０１９９】
Ｓ２４０２の判断の結果が肯定的であれば（Ｓ２４０２：ＹＥＳ）、制御プログラム５５１は、選択されたティア内の全てのゼロ書きページ内の全ビットの値を“０”に更新する（Ｓ２４０３）。【０２００】
Ｓ２４０３の後、又は、Ｓ２４０２の判断の結果が否定的の場合（Ｓ２４０２：ＮＯ）、制御プログラム５５１は、対象プールに未選択のティアがあれば（Ｓ２４０４：ＮＯ）、最近選択したティアの次に上位のティアを選択し（Ｓ２４０４）、Ｓ２４０２を行う。一方、対象プールに未選択のティアがなければ、つまり、最下位のティアまで選択済みであれば（Ｓ２４０４：ＹＥＳ）、制御プログラム５５１は、対象プールに対するゼロ書き処理を終了する。【０２０１】
実施例５によれば、上位のティア（つまり性能の高いティア）から優先的にフリーページを増やしていくことができる。これは、例えば、初期割当て用のティア（未選択の仮想ページに初めに割り当てられる実ページのソースとなるティア）が、最上位のティアである場合に、特に有効である。【０２０２】
なお、実施例５では、制御プログラム５５１は、上位のティアほど優先的にゼロ書きを行うことに代えて、初期割当て用のティア内のゼロ書きページに対して、他のティア内のゼロ書きページよりも優先的に、ゼロ書きを行っても良い。
【実施例６】
【０２０３】
本発明の実施例６では、制御プログラム５５１は、プライマリのＶＶＯＬ（以下、ＰＶＯＬ）からセカンダリのＶＶＯＬ（以下、ＳＶＯＬ）にデータをコピー（レプリケーション又はマイグレーション）するが、その際に、ＳＶＯＬに割り当てられている実ページをフリーページとすることがある。なぜなら、ＳＶＯＬが関連付けられているプールからフリーページが不足してしまう可能性を無くすためである。【０２０４】
以下、図２５Ａ〜図２５Ｃを参照して、実施例６を詳細に説明する。【０２０５】
図２５Ａに示すように、ＰＶＯＬ１１１Ｐがプール１１３Ｐに関連付けられており、ＳＶＯＬ１１１Ｓがプール１１３Ｓに関連付けられている。プール１１３Ｐ及び１１３Ｓは、異なるプールである。なぜなら、ＰＶＯＬ１１１Ｐ内のデータを記憶しているＲＧ（ＲＡＩＤグループ）に障害が発生してもデータが無くならないようにするためである。【０２０６】
また、ＳＶＯＬ１１１Ｓの容量は、ＰＶＯＬ１１１Ｐの容量以上である。【０２０７】
図２５Ａに示すように、ＰＶＯＬ１１１Ｐにプール１１３Ｐ内の２つの実ページが割り当てられており、ＳＶＯＬ１１１Ｓにプール１１３Ｓ内の３つの実ページが割り当てられているとする。【０２０８】
ここで、プール１１３Ｓが、ＶＶＯＬ総容量を制限する対象のプールでない場合、ＰＶＯＬ１１１Ｐ内の２ページ分のデータがＳＶＯＬ１１１Ｓにコピーされると、プール１１３Ｓでフリーページが不足してしまう可能性がある。具体的には、例えば、図２５Ａに示した状況において、プール１１３Ｓにフリーページが無い場合、ＳＶＯＬ１１１Ｓに新たに実ページを割り当てることはできない。【０２０９】
そこで、図２５Ｂに示すように、制御プログラム５５１は、ＰＶＯＬ１１１Ｐ内の全てのデータをＳＶＯＬ１１３Ｓにコピーする前に、ＳＶＯＬ１１３Ｓに割り当てられている全ての実ページをフリーページとすることがある。具体的には、例えば、制御プログラム５５１は、以下の処理（ｆ１）〜（ｆ４）を行う。
（ｆ１）制御プログラム５５１は、ＰＶＯＬ１１１Ｐに対応したマッピングテーブル５０３と、ＳＶＯＬ１１１Ｓに対応したマッピングテーブル５０３と、プール管理テーブル５０４とを基に、ＰＶＯＬ１１１Ｐに割り当てられている実ページの数以上のフリーページがプール１１３Ｓにあるか否かを判断する。
（ｆ２）（ｆ１）の判断の結果が肯定的の場合、制御プログラム５５１は、ＳＶＯＬ１１１Ｓに割り当てられている全ての実ページをゼロ書きページとし、且つ、ＰＶＯＬ１１１Ｐ内の全てのデータをＳＶＯＬ１１１Ｓにコピーする。その際、ＳＶＯＬ１１１Ｓには、コピーの進捗に応じて、適宜にプール１１３Ｓからフリーページが割り当てられるが、フリーページが不足することはない。
（ｆ３）（ｆ２）の判断の結果が否定的の場合、制御プログラム５５１は、以下の処理を行う、
（ｆ３−１）制御プログラム５５１は、ＳＶＯＬ１１１Ｓに割り当てられている全ての実ページをゼロ書きページとする。
（ｆ３−２）制御プログラム５５１は、ＰＶＯＬ１１１ＰからＳＶＯＬ１１１Ｓへのデータのコピーを、少なくとも、ＰＶＯＬ１１１Ｐに割り当てられている実ページの数と同数のフリーページがプール１１３Ｓにできるまで、待つ。
（ｆ３−３）（ｆ３−２）の間、制御プログラム５５１は、プール１１３Ｓ内のゼロ書きページにゼロ書きを行うことで、そのゼロ書きページをフリーページに変える。つまり、制御プログラム５５１は、プール１１３Ｓにフリーページを増やす。その際、制御プログラム５５１は、スリープ時間（或るゼロ書きページに対するゼロ書きを行ってから次にゼロ書きページに対するゼロ書きを行うまでの時間長）を最短にして良い。
（ｆ４）（ｆ３−３）により、ＰＶＯＬ１１１Ｐに割り当てられている実ページの数以上のフリーページがプール１１３Ｓにできた場合、制御プログラム５５１は、（ｆ３−２）を終了し、ＰＶＯＬ１１１ＰからＳＶＯＬ１１１Ｓへのデータのコピーを行う。【０２１０】
ＰＶＯＬ１１１ＰからＳＶＯＬ１１１Ｓへのデータのコピーが終了した場合、図２５Ｃに示すように、ＳＶＯＬ１１１Ｓに、ＰＶＯＬ１１１Ｐに割り当てられていた実ページの数と同数の実ページがプール１１３Ｓから割り当てられていることになる。なお、ＰＶＯＬ１１１ＰからＳＶＯＬ１１１Ｓへのデータのコピーがマイグレーションの場合、制御プログラム５５１は、ＰＶＯＬ１１１Ｐに割り当てられた全ての実ページを、ゼロ書きページに変更して良い。【０２１１】
以上、本発明の幾つかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、実施例１乃至６のうちの２以上の実施例が組み合わされても良い。【０２１２】
例えば、図２０のＳ２００７、及び／又は、図２２ＡのＳ２２０１では、比較される容量は、ページ数で表れた容量であるが、それに代えて、メガバイト或いはギガバイトといった他種の単位で表現された容量でも良い。【０２１３】
また、例えば、コントローラ１３１の構成は、図３に示した構成に限られない。例えば、ＣＨＡ及びＤＫＡが有するＭＰ（マイクロプロセッサ）を有することに代えて、ＣＨＡ及びＤＫＡとは別のモジュール（プロセッサモジュール）がＭＰを有しても良い。
【符号の説明】
【０２１４】
１０１…ストレージ装置
【図１】
2011135617.tif 000003
【図２】
2011135617.tif 000004
【図３】
2011135617.tif 000005
【図４】
2011135617.tif 000006
【図５】
2011135617.tif 000007
【図６】
2011135617.tif 000008
【図７】
2011135617.tif 000009
【図８】
2011135617.tif 000010
【図９】
2011135617.tif 000011
【図１０】
2011135617.tif 000012
【図１１】
2011135617.tif 000013
【図１２】
2011135617.tif 000014
【図１３】
2011135617.tif 000015
【図１４】
2011135617.tif 000016
【図１５】
2011135617.tif 000017
【図１６】
2011135617.tif 000018
【図１７】
2011135617.tif 000019
【図１８】
2011135617.tif 000020
【図１９】
2011135617.tif 000021
【図２０】
2011135617.tif 000022
【図２１】
2011135617.tif 000023
【図２２】
2011135617.tif 000024
【図２３】
2011135617.tif 000025
【図２４】
2011135617.tif 000026
【図２５】
2011135617.tif 000027
【図２６】
2011135617.tif 000028
【国際調査報告】
2011135617.tif 000029
2011135617.tif 000030