(57)【要約】本発明は、仮想的な論理領域に記憶容量を動的に提供する複数の実論理領域に対して、記憶容量の均等化が迅速、かつ確実に実行される計算機システムを提供することを目的とする。  本発明は、上位装置からのアクセスに対して、仮想ボリュームに記憶領域を動的に割り当てる運用を実行している過程で、プールにプールボリュームを追加した際に、記憶領域を複数のプールボリューム間で移動させて、記憶容量のバランスを維持するようにした計算機システムである。
2010122679.tif 000002
【特許請求の範囲】
【請求項１】
記憶領域を有する記憶デバイスと、
上位装置からのアクセスが許容される仮想論理領域と、
前記記憶領域を有する複数の実論理領域と、
前記仮想論理領域に対する前記実論理記憶領域からの前記記憶領域の割り当てを制御するコントローラと、を備え、
前記コントローラは、
複数の実論理領域をグループとして前記仮想領域に割り当て、
前記上位装置から前記仮想論理領域にアクセスがあることに応じて、前記仮想論理領域に、前記グループに属する実論理領域から、基準となる容量を持った記憶単位を順次割り当て、
前記グループに前記実論理領域が追加された際、前記グループに属する複数の実論理領域間で記憶容量が均等になるように、前記記憶単位の割り当てを前記グループ内の複数の実論理領域間で変更する、
処理を実行する計算機システム。
【請求項２】
前記コントローラは、フリーキューに未割当の記憶単位を接続し、前記記憶単位を前記仮想ボリュームに割り当てる場合は、当該記憶単位を前記フリーキューから解放して、解放した記憶単位を前記仮想ボリュームに割り当て、
前記フリーキューは、プールボリューム毎に複数設定されており、
複数のフリーキューを選択する順序が登録されたメモリを備え、
前記コントローラは、前記複数のフリーキューに前記順序にしたがってアクセスし、前記アクセスしたフリーキューに接続された未割当の前記記憶単位を前記フリーキューから解放し、解放した記憶単位を仮想ボリュームに割り当て、
第１の実論理領域と、第２の実論理領域と、前記第１の実論理領域に属する第１の記憶単位と、前記第２の実論理領域に属する第２の記憶単位と、を備え、
前記コントローラは、前記第２の記憶単位を前記第２の実論理領域に対して割り当てられた前記フリーキューから解放して、前記第２の記憶単位をデータ移行先として管理する特殊キューに接続し、前記第１の記憶単位のデータを前記第２の記憶単位にコピーし、前記第１の記憶単位の仮想ボリュームに対する割り当てを解放し、前記第２の記憶単位を前記仮想ボリュームに割り当て、前記第１の記憶単位を前記第１の実論理記憶領域に対するフリーキューに接続し、前記第１の記憶単位が割り当てられる、前記仮想ボリュームの領域に、前記上位装置からのアクセスがあり、前記第１と第２の実記憶領域と前記仮想ボリューム間で前記第１及び第２の記憶単位の割り当ての変更を中断する際前記第２の記憶単位を前記特殊キューから解放する、請求項１記載の計算機システム。
【請求項３】
前記コントローラは、前記複数の実論理領域の容量比を勘案し、前記複数の実論理領域の間で、前記記憶単位の割り当て比が均等になるように、前記記憶単位の割り当てを変更する請求項１記載の計算機システム。
【請求項４】
前記コントローラは、前記複数の実論理記憶領域のうち、前記記憶単位の割り当て比が多い第１の実記憶領域に対して、前記記憶単位の前記仮想ボリュームに対する割り当てを解放し、その割り当てを前記第１の実記憶領域より前記記憶単位の割り当て比が少ない第２の実記憶領域の前記記憶単位に設定する、請求項３記載の計算機システム。
【請求項５】
前記コントローラは、前記第１の実論理領域の前記仮想ボリュームに対する割り当てが解放された記憶単位の属性を未割り当てに変更する、請求項４記載の計算機システム。
【請求項６】
前記コントローラは、前記記憶単位が割り当てられる、前記仮想ボリュームの領域に、前記上位装置からのアクセスがあった場合、前記複数の実記憶領域間で前記記憶単位の割り当ての変更を中断する、請求項１記載の計算機システム。
【請求項７】
前記コントローラは、
フリーキューに未割当の記憶単位を接続し、
前記記憶単位を前記仮想ボリュームに割り当てる場合は、当該記憶単位を前記フリーキューから解放して、解放した記憶単位を仮想ボリュームに割り当てる、
請求項１記載の計算機システム。
【請求項８】
前記フリーキューは、プールボリューム毎に複数設定されている、請求項７記載の計算機システム。
【請求項９】
複数のフリーキューを選択する順序が登録されたメモリを備え、
前記コントローラは、前記複数のフリーキューに前記順序にしたがってアクセスし、前記アクセスしたフリーキューに接続された未割当の前記記憶単位を前記フリーキューから解放し、解放した記憶単位を仮想ボリュームに割り当てる、請求項８記載の計算機システム。
【請求項１０】
第１の実論理領域と、
第２の実論理領域と、
前記第１の実論理領域に属する第１の記憶単位と、
前記第２の実論理領域に属する第２の記憶単位と、
を備え、
前記コントローラは、前記第２の記憶単位を前記第２の実論理領域に対して割り当てられた前記フリーキューから解放して、前記第２の記憶単位をデータ移行先として管理する特殊キューに接続し、
前記第１の記憶単位のデータを前記第２の記憶単位にコピーし、
前記第１の記憶単位の仮想ボリュームに対する割り当てを解放し、
前記第２の記憶単位を前記仮想ボリュームに割り当て、
前記第１の記憶単位を前記第１の実論理記憶領域に対するフリーキューに接続する、
処理を実行する、請求項８記載の計算機システム。
【請求項１１】
前記コントローラは、前記第１の記憶単位が割り当てられる、前記仮想ボリュームの領域に、前記上位装置からのアクセスがあり、前記第１と第２の実記憶領域と前記仮想ボリューム間で前記第１及び第２の記憶単位の割り当ての変更を中断する際前記第２の記憶単位を前記特殊キューから解放する、請求項１０記載の計算機システム。
【請求項１２】
上位装置からのアクセスに対して、仮想ボリュームに記憶領域を動的に割り当てる運用を実行している過程で、プールにプールボリュームを追加した際に、記憶領域を複数のプールボリューム間で移動させて、記憶容量のバランスを維持するようにした計算機システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムに係わり、特に、ホスト装置に対して動的に記憶容量を割り当てる計算機システムに関するものである。
【背景技術】
【０００２】
従来から、ホスト装置に対して大規模なデータストレージサービスを提供する計算機システムが存在する。このシステムは、ホスト装置と、ホスト装置が接続するストレージ装置と、ストレージ装置の管理装置と、を備えたものとして知られている。
ストレージ装置は、複数のハードディスクをＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ／Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）方式で管理する。そして、多数のハードディスクが有する物理的な記憶領域を論理化し、これを論理ボリュームとしてホスト装置に提供する。ホスト装置は論理ボリュームにアクセスしてデータのリード・ライトを要求する。
この種の論理化技術の一つにシン・プロビジョニングと称されるものがある。ストレージ装置は、物理的な記憶領域を有さない仮想的なボリュームをホスト装置に対して設定する。ホスト装置が仮想的なボリュームにライトアクセスにすることに合わせて、ストレージ装置は、仮想ボリュームに対して記憶領域を順次割り当てていく。
したがって、この技術は、論理ボリュームに対して当初から大容量な記憶領域を割り当てる方式に比べて、ストレージ資源を有効に活用できる点で効果的である。この技術は、特願２００３−１５９１５号公報、及び、特開２００６−３３８３４１号公報に記載されている。
仮想ボリュームに記憶領域を提供するための手段は、それぞれ実の記憶領域が割り当てられた複数の論理ボリュームをプールと呼ばれる論理グループに纏めたものから構成される。複数の論理ボリュームはそれぞれプールボリュームと呼ばれる。仮想ボリュームにホスト装置からライトアクセスがあると、仮想ボリュームのアクセス先に、プールボリュームの対応領域の記憶領域を割り当てる。
ストレージ装置は、仮想ボリュームに対するホスト装置からのアクセス領域を、プールボリュームに記憶容量が割り当てられた領域に対応させることにより、ホスト装置からのライトデータを保存することができる。
ストレージ装置は、複数のプールボリュームへの記憶領域の割り当てが均等になるようにするが、長い時間を経過してゆく過程で、この均等が崩れてくる問題がある。そこで、特開２００８−２３４１５８号は、複数のプールボリューム間で記憶領域を移動させて、記憶領域の容量が複数のプールボリュームについて均等になることを開示している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特願２００３−０１５９１５号公報
【特許文献２】特開２００６−３３８３４１号公報
【特許文献３】特開２００８−２３４１５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特開２００８−２３４１５８号は、外部操作によって、記憶領域を移動させることを開示しているものの、複数のプールボリュームについて、記憶容量の均等化が迅速、かつ確実に実行されることまでを提案するものではなかった。
そこで、この発明は、仮想的な論理領域に記憶容量を動的に提供する複数の実論理領域に対して、記憶容量の均等化が迅速、かつ確実に実行される計算機システムおよびその制御方法を提供することを目的とするものである。
【課題を解決するための手段】
【０００５】
この目的を達成するために、本発明は、上位装置からのアクセスに対して、仮想ボリュームに記憶領域を動的に割り当てる運用を実行している過程で、プールにプールボリュームを追加した際に、記憶領域を複数のプールボリューム間で移動させて、記憶容量のバランスを維持するようにした計算機システム及びその制御方法であることを特徴とするものである。
【発明の効果】
【０００６】
本発明によれば、仮想的な論理領域に記憶容量を動的に提供する複数の実論理領域に対して、記憶容量の均等化が迅速、かつ確実に実行される計算機システム及びその制御方法を提供することができる。
【図面の簡単な説明】
【０００７】
図１は、本発明に係わる計算機システムの実施形態を示すハードウエアブロック図である。
図２は、図１に示した計算機ステムにおいて、ストレージ装置が行う記憶領域の動的割り当ての動作を示す機能ブロック図である。
図３は、ストレージ装置のメモリブロック図である。
図４は、ＶＤＥＶ管理情報を説明するブロック図である。
図５は、ＬＤＥＶ管理情報を説明するブロック図である。
図６は、アドレス管理テーブルを説明するブロック図である。
図７は、ＰＯＯＬ管理情報のブロック図である。
図８は、ＶＶＯＬ−ＤＩＲ及びＰＳＣＢのブロック図である。
図９は、ターゲットデバイスと、ＬＤＥＶと、ＰＤＥＶとのマッピングの関係を示すブロック図である。
図１０に、仮想ボリュームとプールボリュームとの間で、均等に、ページが割り当てられている様子を示すブロック図である。
図１１は、その時のフリーキューの構造を示すブロック図である。
図１２は、プール追加されたプールボリュームにページの割り当てが集中している様子を示すブロック図である。
図１３、その時のフリーキューの構造を示すブロック図である。
図１４は、ページリバランス前での仮想ボリューム及びプールボリュームのブロック図である。
図１５は、ページリバランス後での仮想ボリューム及びプールボリュームのブロック図である。
図１６は、複数のプールボリューム間で、プールボリュームの容量比を勘案してリバランスを行う様子を示す、仮想ボリューム及びプールボリュームのブロック図である。
図１７Ａはプールを管理するテーブルであり、図１７Ｂはプールボリュームを管理するテーブルであり、図１７Ｃは、フリーキュー単位を管理するテーブルである。
図１８は、ホスト装置から仮想ボリュームへのライトアクセスに対して、プールに属するプールボリュームから仮想ボリュームにページを割り当てる順序を示したブロック図である
図１９は、この割り当て順序を管理するテーブルである。
図２０は、ストレージ装置がプールボリュームをプールに追加する際にリバランの処理を行うことを説明するフローチャートである。
図２１はリバンラスを示すフローチャートートである。
図２２は、複数のプールボリューム間でマイグレーションされるページ数の算出の処理を示すフローチャートである。
図２３は、算出されたページ数とページの移動の様子を示す、仮想ボリュームとプールボリュームとのブロック図である。
図２４は、図２３に示すページの移動形態を実現するための管理テーブルである。
図２５は、マイグレーション処理の詳細を示すフローチャートである。
図２６は、マイグレーション処理のさらに詳細な内容を示すフローチャートである。
図２７はマイグレーション処理を行うキャッシュメモリのブロック図である。
図２８は、ページマイグレーションに対してホスト装置からＩ／Ｏ処理を優先させることを説明するフローチャートである。
図２９は、キュー構造の再設定の過程を示すブロック図である。
図３１は、キュー構造の再設定を説明する第１のフローチャートである。
図３２は、キュー構造の再設定を説明する第２のフローチャートである。
図３３は、複数のプールボリューム間でページマイグレーションが行われている様子を説明するブロック図であり、図３４の前提となるものである。
図３４はページのマイグレーションを実現するフリーキュー処理を説明するブロック図である。
図３５は、図３６の前提となるブロック図である。
図３６は、マイグレーションの中断が発生した場合でのフリーキュー処理を説明するブロック図である。
図３７Ａ〜図３７Ｆはマイグレーションの進捗管理画面であって、ページの使用状況をプールボリューム毎に集計した画面である。
図３８Ａ〜図３８Ｂはページ数を仮想ボリューム単位で集計した画面である。
【発明を実施するための形態】
【０００８】
次に本発明の実施形態について説明する。図１は、本発明に係わる計算機システムの第１の例を示すハードウエアブロック図である。計算機システムは、ホスト計算機１０と、管理装置２０と、これらが接続するストレージ装置３０と、を備えている。ストレージ装置は、ストレージシステム、あるいはストレージサブシステムとも呼ばれている。
ホスト計算機１０は、ストレージ装置３０の論理的な記憶資源にアクセスする。管理装置２０は、ストレージ装置３０の記憶領域の構成を管理する。ストレージ装置３０は、物理デバイス３４に設定された記憶領域にデータを格納する。
ホスト計算機１０は、入力手段１１０、出力手段１２０、ＣＰＵ１３０、メモリ１４０、ディスクアダプタ１５０、ネットワークアダプタ１６０及びディスクドライブ１７０を備える。入力手段１１０は、ホスト計算機１０を操作する管理者等から入力を受け付ける手段である。入力手段１１０は、例えば、キーボードで構成される。出力手段１２０は、ホスト計算機１０の状態や設定項目を表示する手段である。出力手段１２０は、例えばディスプレイ装置で構成される。
ＣＰＵ１３０は、ディスクドライブ１７０に格納されているプログラムをメモリ１４０に読み込んで、そのプログラムに規定された処理を実行する。メモリ１４０は、例えばＲＡＭ等で構成され、プログラムやデータ等を格納する。
ディスクアダプタ１５０は、ストレージ装置３０とストレージネットワーク５０を介して接続し、ストレージ装置３０にデータを送受信する。ストレージネットワーク５０は、データ転送に適したプロトコル（例えば、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）で構成される。
ネットワークアダプタ１６０は、ストレージシステム管理装置２０又はストレージ装置３０と管理ネットワーク４０を介してデータを送受信する。管理ネットワーク４０は、例えばＥｔｈｅｒｎｅｔで構成される。
ディスクドライブ１７０は、例えばハードディスク装置で構成され、データやプログラムを格納する。
管理装置２０は、入力手段２１０、出力手段２２０、ＣＰＵ２３０、メモリ２４０、ネットワークアダプタ２５０及びディスクドライブ２６０を備える。
入力手段２１０は、管理装置２０を操作する管理者等の入力を受け付ける手段である。入力手段２１０は、例えばキーボードで構成される。出力手段２２０は、管理装置２０の状態や設定項目を表示する手段である。出力手段２２０は、例えばディスプレイ装置で構成される。
ＣＰＵ２３０は、ディスクドライブ２６０に格納されている管理プログラムをメモリ２４０に読み込んで、そのプログラムに基づくストレージ装置に対する管理処理を実行する。メモリ２４０は、例えばＲＡＭ等で構成され、プログラムやデータ等を格納する。
ネットワークアダプタ２５０は、ホスト計算機１０又はストレージ装置３０と管理ネットワーク４０を介してデータを送受信する。
ディスクドライブ２６０は、例えばハードディスク装置で構成され、データやプログラムを格納する。
ストレージ装置３０は、コントローラ３１、ストレージキャッシュメモリ３２、共有メモリ３３、物理デバイス（ＰＤＥＶ）３４、電源スイッチ３５及び電源３６を備える。  コントローラ３１は、ＰＤＥＶ３４に構成された記憶領域へのデータの格納を制御する。  ストレージキャッシュメモリ３２は、ＰＤＥＶ３４に読み書きされるデータを一時的に格納する。共有メモリ３３は、コントローラ３１やＰＤＥＶ３４の構成情報を格納する。ＰＤＥＶ３４は、複数のディスク装置によって構成される。電源３６は、ストレージ装置３０の各部に電力を供給する。電源スイッチ３５は、電源３６からの電力の供給をＯＮ／ＯＦＦするスイッチである。ディスク装置（記憶デバイス）は、例えばハードディスクドライブで構成され、主としてユーザデータを格納する。記憶デバイスとしては、フラッシュメモリなどの半導体メモリからなるドライブでもよい。
コントローラ３１は、ホストアダプタ３１０、ネットワークアダプタ３２０、不揮発性メモリ３３０、電源制御部３４０、メモリ３５０、プロセッサ３６０、ストレージアダプタ３７０及び共有メモリアダプタ３８０によって構成される。
ホストアダプタ３１０は、ストレージネットワーク５０を介してホスト計算機１０との間でデータを送受信する。ネットワークアダプタ３２０は、管理ネットワーク４０を介してホスト計算機１０又は管理装置２０との間でデータを送受信する。
不揮発性メモリ３３０は、ハードディスクやフラッシュメモリで構成され、コントローラ３１で動作するプログラムや構成情報等を格納する。電源制御部３４０は、電源３６から供給される電力を制御する。
メモリ３５０は、例えばＲＡＭ等で構成され、プログラムやデータ等を格納する。プロセッサ３６０は、不揮発性メモリ３３０に格納されているプログラムをメモリ３５０に読み込んで、そのプログラムに規定された処理を実行する。
ストレージアダプタ３７０は、ＰＤＥＶ３４及びストレージキャッシュメモリ３２との間でデータを送受信する。共有メモリアダプタ３８０は、共有メモリ３３との間でデータを送受信する。
図２は、図１に示した計算機ステムにおいて、ストレージ装置３０が行う記憶領域の動的割り当ての動作を示す機能ブロック図である。ＰＤＥＶ３４からＲＡＩＤ構成によってＲＡＩＤグループが構成される。このＲＡＩＤグループから仮想デバイス（ＶＤＥＶ）４００が構成される（Ｓ１０１）。ＶＤＥＶ４００は記憶領域である複数の論理デバイス（ＬＤＥＶ）５００に分割されている。ＰＤＥＶ３４から構成されたＶＤＥＶを、「第１種ＶＤＥＶ」と呼ぶ。この第１種ＶＤＥＶに含まれるＬＤＥＶを、「第１種ＬＤＥＶ」と呼ぶ。
ホスト計算機１０は、ストレージ装置３０のボリューム（論理領域）にアクセスする。ホスト計算機１０から見えるボリュームを「ターゲットデバイス」と呼ぶ。ターゲットデバイス７００は、第１種ＬＤＥＶ５００を含むボリュームにホスト計算機１０へのパスを定義して設定される（Ｓ１０２）。
ストレージ装置３０の外部に接続されている外部物理デバイス６００をＰＤＥＶ３４と同様に扱うこともできる。すなわち、ＲＡＩＤ構成によって複数の外部物理デバイス（ＥＤＥＶ）６００から複数の第１種ＶＤＥＶ４００が構成される（Ｓ１０３）。第１種ＶＤＥＶ４００は一つ以上の記憶領域である第１種ＬＤＥＶ５００に分割されている。この第１種ＬＤＥＶ５００にホスト計算機１０へのパスを設定して、ターゲットデバイス７００が設定される（Ｓ１０４）。
また、ストレージ装置３０において、第２種ＶＤＥＶ４０１を設定できる。第２種ＶＤＥＶとは、ＰＤＥＶ３４によって構成される第１種ＶＤＥＶとは異なり、アドレスと領域を持っているがＰＤＥＶ３４に対応する領域は持っていない仮想的なデバイスである。第２種ＶＤＥＶに対応するキャッシュメモリの領域の設定は可能である。この第２種ＶＤＥＶ４０１には、一つ以上のＬＤＥＶを構成する。このＬＤＥＶを２種ＬＤＥＶ５０１と呼ぶ。
この第２種ＬＤＥＶ５０１にホスト計算機１０へのパスを設定して、ターゲットデバイス７０１が設定される（Ｓ１１０）。このターゲットデバイスが仮想ボリュームに対応する。
第２種ＶＤＥＶ及び第２種ＬＤＥＶは、物理的な記憶領域がＰＤＥＶから割り当てられていない（記憶領域を持っていない）。これをホスト計算機１０が使用するためには、第２種ＬＤＥＶを、ストレージプール（あるいは単に“プール”という。）６０に関連付ける必要がある。
ストレージプール６０は、第１種ＬＤＥＶ５００の一つまたは複数を、ストレージプールの属性で纏めたグループである。第１種ＬＤＥＶ５００は、ストレージプールに割り当てられている（Ｓ１１２）。第１種ＬＤＥＶがプールボリュームである。
このストレージプールに設定された第１種ＬＤＥＶ５００を第２種ＬＤＥＶ５０１に、アドレスを用いて、関連付けを行う（Ｓ１１１）。この関連付けを、“マッピング”あるいは、“割り当て”という。
これによって、ホスト計算機１０が、仮想ボリュームに対してライト・リードアクセスが可能となる。また、第１種ＬＤＥＶと第２種ＬＤＥＶとのマッピングを変更することで、仮想ボリュームの記憶領域を変更できる。
図３は、ストレージ装置３０のメモリ３５０ブロック図である。メモリ３５０には、プロセッサ３６０によって読み込まれて実行される各種プログラムや、ＬＤＥＶの設定に関する構成情報３５１及びストレージプールの設定に関するプール情報３５２が格納される。
コマンド制御プログラム３５０１は、ホスト計算機１０又は管理装置２０からのコマンドを解釈し、そのコマンドに規定された処理を実行する。構成制御プログラム３５０３は、ストレージ装置３０の構成を制御する。ディスクＩ／Ｏプログラム３５０５は、ＰＤＥＶ３４へのアクセスを制御する。プール制御プログラム３５０７は、ストレージプールを設定する。
構成情報３５１は、ストレージ装置３０のＶＤＥＶ及びＬＤＥＶに関する設定を格納する。プール情報３５２は、ストレージプールに関する設定を格納する。
構成情報３５１は、アドレス管理テーブル３５１１、ＬＤＥＶ管理情報３５１２、ＶＤＥＶ管理情報３５１４を含む。
アドレス管理テーブル３５１１は、ターゲットデバイスとＬＤＥＶとＶＤＥＶと物理デバイスとのアドレスのマッピング情報を格納する。アドレス管理テーブル３５１１は、ターゲットデバイス−ＬＤＥＶマッピング情報３５１１１、ＬＤＥＶ−ＶＤＥＶマッピング情報３５１１２及びＶＤＥＶ−ＰＤＥＶマッピング情報３５１１３を含む。ＬＤＥＶ管理情報３５１２は、ＬＤＥＶに関する情報を格納する。ＶＤＥＶ管理情報３５１４は、仮想論理ボリュームに関する情報を格納する。
プール情報３５２は、ＰＯＯＬ管理情報３５２１、ＰＯＯＬ−ＶＯＬ管理情報３５２２、ＶＶＯＬ−ＤＩＲ３５２３、ＰＳＣＢ３５２４を含む。ＰＯＯＬ管理情報３５２１は、ストレージプールの設定を格納する。ＰＯＯＬ−ＶＯＬ管理情報３５２２は、ストレージプールのボリュームの情報を格納する。ＶＶＯＬ−ＤＩＲ３５２３は、ストレージプールのＬＤＥＶのアドレスの割り当てを格納する。ＰＳＣＢ情報は、ストレージプールのＬＤＥＶのアドレスの情報を格納する。
さらに、メモリ３５０は、ストレージプールに属する複数のＬＤＥＶ（プールボリューム）５００にＰＤＥＶから記憶領域を均等に割り当てるための割り当て処理プログラム３５０８と、複数のプールボリューム間で記憶領域を移動させて、複数のプールボリュームの記憶容量を均等化させるためのリバランス処理プログラム３５０９と、を有している。
さらに、メモリ３５０は、リバランスを実行するか否かをプール毎、あるいは仮想ボリューム毎に設定できるフラグ情報を備えている。
図４は、ＶＤＥＶ管理情報の説明図である。ＶＤＥＶ管理情報は、ＶＤＥＶ固有情報３５１４１から構成される。ＶＤＥＶ固有情報３５１４１は、ＶＤＥＶ番号（ＶＤＥＶ＃）３５１４２、エミュレーションタイプ３５１４３、総サイズ３５１４４、残サイズ３５１４５、デバイス属性３５１４６、デバイス状態３５１４７、設定ＬＤＥＶ数３５１４８、ＬＤＥＶ番号３５１４９、先頭ＶＤＥＶ−ＳＬＯＴ＃３５１５０及び終了ＶＤＥＶ−ＳＬＯＴ＃３５１５１で構成される。
ＶＤＥＶ＃３５１４２は、ＶＤＥＶの識別子である。エミュレーションタイプ３５１４３はＶＤＥＶのエミュレーションタイプの識別子である。総サイズ３５１４４は、ＶＤＥＶに設定されている総サイズである。残サイズ３５１４５はＶＤＥＶの未使用の領域のサイズである。
デバイス属性３５１４６は、ＶＤＥＶに定義されている属性の識別子である。そのＶＤＥＶが第１種ＶＤＥＶである場合には第１種ＶＤＥＶを示す識別子が格納され、そのＶＤＥＶが第２種ＶＤＥＶであり、仮想ボリュームに設定されている場合には第２種ＶＤＥＶを示す識別子が格納される。
デバイス状態３５１４７は、ＶＤＥＶの状態を示す識別子である。ＶＤＥＶの状態は、正常、閉塞、障害閉塞等がある。閉塞は、パンク閉塞など、障害の発生意外の要因によって閉塞されていることを示す。障害閉塞は、デバイスの何れかに障害が発生しておりそのために閉塞されていることを示す。
設定ＬＤＥＶ数３５１４８は、ＶＤＥＶに設定されているＬＤＥＶの総数である。ＬＤＥＶ番号３５１４９はＶＤＥＶに設定されているＬＤＥＶの番号が格納される。先頭ＶＤＥＶ−ＳＬＯＴ＃３５１５０は、設定されているＬＤＥＶの物理的な先頭のスロット番号の識別子である。
終了ＶＤＥＶ−ＳＬＯＴ＃３５１５１は、設定されているＬＤＥＶの物理的な最終のスロット番号である。このＬＤＥＶ番号３５１４９、先頭ＶＤＥＶ−ＳＬＯＴ＃３５１５０及び終了ＶＤＥＶ−ＳＬＯＴ＃３５１５１は、ＬＤＥＶ数と同じ数だけＬＤＥＶ番号毎に設定される。
図５は、ＬＤＥＶ管理情報の説明図である。ＬＤＥＶ管理情報は、ＶＤＥＶ固有情報３５１２１から構成される。ＬＤＥＶ固有情報３５１２１は、ＬＤＥＶ番号（ＬＤＥＶ＃）３５１２２、エミュレーションタイプ３５１２３、サイズ３５１２４、先頭スロット番号３５１２５、終了スロット番号３５１２６、パス定義情報３５１２７、デバイス属性３５１２８、デバイス状態３５１２９、プログラム使用状況３５１３００及びＰＯＯＬ−ＩＤ３５１３０１で構成される。
ＬＤＥＶ＃３５１２２は、ＬＤＥＶの識別子である。エミュレーションタイプ３５１２３はＬＤＥＶのエミュレーションタイプの識別子である。サイズ３５１２４は、ＬＤＥＶに設定されている総サイズである。
先頭スロット番号３５１２５は設定されたＬＤＥＶの先頭のスロット番号の識別子である。終了スロット番号３５１２６は設定されたＬＤＥＶの最終のスロット番号である。パス定義情報３５１２７は、ホスト計算機１０に定義されたパスの識別子である。
デバイス属性３５１２８は、ＬＤＥＶの属性の識別子である。ＬＤＥＶが第１種ＬＤＥＶである場合には第１種ＬＤＥＶを示す識別子が格納され、ＬＤＥＶが第２種ＬＤＥＶである場合には第２種ＬＤＥＶを示す識別子が格納される。また、ＬＤＥＶがストレージプールに設定されている場合は、プール属性を示す識別子が格納される。
デバイス状態３５１２９は、そのＬＤＥＶが所属するＶＤＥＶの状態を示す識別子である。ＶＤＥＶの状態は、正常、閉塞、障害閉塞等がある。閉塞は、パンク閉塞など、障害の発生意外の要因によって閉塞されていることを示す。障害閉塞は、デバイスの何れかに障害が発生しておりそのために閉塞されていることを示す。
プログラム使用状況３５１３００は、ＬＤＥＶが何れかのプログラムによって処理中である場合に、そのプログラムの識別子が格納される。ＰＯＯＬ−ＩＤ３５１３０１は、ＬＤＥＶがストレージプールに設定されている場合に、その識別子が格納される。
図６は、アドレス管理テーブルの説明図である。アドレス管理テーブル３５１１は、ターゲットデバイスとＬＤＥＶとＶＤＥＶと物理デバイスとのアドレスのマッピング情報を格納する。アドレス管理テーブル３５１１は、ターゲットデバイス−ＬＤＥＶマッピング情報３５１１１、ＬＤＥＶ−ＶＤＥＶマッピング情報３５１１２及びＶＤＥＶ−ＰＤＥＶマッピング情報３５１１３を含む。
ターゲットデバイス−ＬＤＥＶマッピング情報３５１１１は、ターゲットデバイスのアドレスとＬＤＥＶのアドレスとの対応が格納される。ＬＤＥＶ−ＶＤＥＶマッピング情報３５１１２は、ＬＤＥＶのアドレスとＶＤＥＶのアドレスが格納される。
ＶＤＥＶ−ＰＤＥＶマッピング情報３５１１３は、ＶＤＥＶのアドレスとそのＲＡＩＤグループ番号（又はパリティグループ）とＰＤＥＶのアドレスか格納される。
ストレージ装置３０は、このアドレス管理テーブルを参照することによって、ターゲットデバイスのアドレスがどのＬＤＥＶのどのアドレスに対応するかを知ることができる。また、ＬＤＥＶのアドレスがどのＶＤＥＶのどのアドレスに対応するかを知ることができる。また、ＶＤＥＶのアドレスがどのＲＡＩＤグループに属しており、どのＰＤＥＶのどのアドレスに対応するかを知ることができる。
図７は、ＰＯＯＬ管理情報の説明図である。ＰＯＯＬ管理情報３５２１は、ＰＯＯＬ固有情報３５２１１から構成される。ＰＯＯＬ固有情報３５２１１は、ＰＯＯＬ−ＩＤ３５２１２、属性／用途３５２１３、エミュレーションタイプ３５２１４、容量３５２１５、空き容量３５２１６、閾値３５２１７、状態３５２１８、ＰＯＯＬ−ＶＯＬ数３５２１９、ＰＯＯＬ−ＶＯＬデバイス番号リスト３５２２０、ＰＯＯＬを利用しているデバイス数３５２２１及びＰＯＯＬを利用しているデバイス番号３５２２２で構成される。
ＰＯＯＬ−ＩＤ３５２１２は、ＰＯＯＬの識別子である。属性／用途３５２１３は、そのストレージプールの属性及び用途を示す識別子である。用途は、例えばスナップショットやＳＹＳ領域など、運用形態の用途である。
エミュレーションタイプ３５２１４はストレージプールのエミュレーションタイプの識別子である。容量３５２１５は、ストレージプールの総容量である、空き容量３５２１６はストレージプールの未使用の領域のサイズである。
閾値３５２１７は、ストレージプールが許容する最大のデータ格納容量である。状態３５２１８は、ストレージプールの現在の状態である。例えば、定義中、拡張中、有効等である。ＰＯＯＬ−ＶＯＬ数３５２１９は、ストレージプールとして設定されているＬＤＥＶの総数である。
ＰＯＯＬ−ＶＯＬデバイス番号リスト３５２２０はストレージプールとして設定されているＬＤＥＶ番号の一覧である。ＰＯＯＬを利用しているデバイス数３５２２１は、ストレージプールのＬＤＥＶが関連付けられている第２種ＬＤＥＶの数である。ＰＯＯＬを利用しているデバイス番号３５２２２は、ストレージプールのＬＤＥＶが関連付けられている第２種ＬＤＥＶ番号の一覧である。
図８は、ＶＶＯＬ−ＤＩＲ３５２３及びＰＳＣＢ３５２４の説明図である。ＶＶＯＬ−ＤＩＲ３５２３は、仮想ボリュームの記憶領域である第２種ＬＤＥＶの構成の情報である。ＰＳＣＢ（ＰＯＯＬ  Ｓｌｏｔ  Ｃｏｎｔｒｏｌ  Ｂｒｏｃｋ）３５２４は、ストレージプールに設定された第１種ＬＤＥＶの構成の情報である。
前述のように、ストレージ装置３０は、ＰＤＥＶ３４からＲＡＩＤ構成によって第１種ＶＤＥＶを構成する。この第１種ＶＤＥＶを、記憶領域である第１種ＬＤＥＶに分割する。第１種ＬＤＥＶがストレージプールに設定される。このストレージプールに設定された第１種ＬＤＥＶによって構成されるボリュームをＰＯＯＬ−ＶＯＬ９００とする。
また、ストレージ装置３０は、仮想ボリューム（ＶＶＯＬ）を設定し、第２種ＶＤＥＶを構成する。この第２種ＶＤＥＶを記憶領域である第２種ＬＤＥＶに分割する。
ストレージ装置３０は、ＶＶＯＬ８００の第２種ＬＤＥＶを、ＰＯＯＬ−ＶＯＬ９００の第１種ＬＤＥＶに割り当てる。これによって、ホスト計算機１０がアクセスする仮想ボリュームの記憶領域が、物理デバイスであるＰＤＥＶ３４から構成された第１種ＬＤＥＶに設定される。
ＶＶＯＬの構成は、ＶＶＯＬ−ＤＩＲ３５２３に格納される。ＶＶＯＬ−ＤＩＲ３５２３は、ＬＤＥＶ番号（ＬＤＥＶ＃）３５２３１及びエントリ３５２３２によって構成される。
ＬＤＥＶ番号（ＬＤＥＶ＃）３５２３１は第２種ＬＤＥＶの識別子である。エントリ３５２３２は、第２種ＬＤＥＶの構成情報である。このエントリ３５２３２は、第２種ＬＤＥＶアドレス３５２３３及びＰＳＣＢポインタ３５２３４から構成される。
第２種ＬＤＥＶアドレス３５２３３は、ＶＶＯＬの第２種ＬＤＥＶのアドレスが格納される。
ＰＳＣＢポインタ３５２３４は、第２種ＬＤＥＶがＰＯＯＬ−ＶＯＬ９００の第１種ＬＤＥＶに割り当てられている場合に、その第１種ＬＤＥＶの領域のポインタが格納される。なお、初期状態では第２種ＬＤＥＶは第１種ＬＤＥＶに割り当てられていないので、ＰＳＣＢポインタ３５２３４には「ＮＵＬＬ」が格納される。
ＰＳＣＢ（ＰＯＯＬ  Ｓｌｏｔ  Ｃｏｎｔｒｏｌ  Ｂｒｏｃｋ）３５２４は、ストレージプールに設定されている第１種ＬＤＥＶの情報である。このＰＳＣＢ３５２４は、ストレージプールに設定されている第１種ＬＤＥＶのスロット毎に設定される。
ＰＳＣＢ３５２４は、ＬＤＥＶ番号（ＬＤＥＶ＃）３５２４１、ＰＯＯＬ−ＶＯＬアドレス３５２４２、ＰＳＣＢ前方ポインタ３５２４３及びＰＳＣＢ後方ポインタ３５２４４から構成される。
ＬＤＥＶ番号（ＬＤＥＶ＃）３５２４１は、ＰＯＯＬ−ＶＯＬでの第１種ＬＤＥＶの識別子である。ＰＯＯＬ−ＶＯＬアドレス３５２４２は、ＰＯＯＬ−ＶＯＬ９００における第１種ＬＤＥＶのアドレスである。
ＰＳＣＢ前方ポインタ３５２４３及びＰＳＣＢ後方ポインタ３５２４４は、ＰＯＯＬ−ＶＯＬ９００内の第１種ＬＤＥＶの前後のスロットの識別子である。
また、ＰＯＯＬ−ＶＯＬ９００の領域のうち、未使用の領域は、その先頭がフリーＰＳＣＢキュー３５２４０で示される。フリーＰＳＣＢキュー３５２４０は、次のスロットを示すＰＳＣＢ３５２４へのポインタを含む。
ストレージ装置３０は、フリーＰＳＣＢキュー３５２４０に示されたポインタを参照して、次のＰＳＣＢ３５２４を得る。さらに、次のＰＳＣＢ３５２４のＰＳＣＢ後方ポインタ３５２４５を参照して、段階的にＰＳＣＢ３５２４を辿る。そして、その未使用の領域の最終のスロットに対応するＰＳＣＢ３５２４を得る。
この最後のＰＳＣＢ３５２４のＰＳＣＢ後方ポインタ３５２４４はフリーＰＳＣＢキュー３５２４０である。ストレージ装置３０は、フリーＰＳＣＢキュー３５２４０を辿り、ＰＳＣＢ３５２４のポインタによって連結された集合によって、ストレージプールのＰＯＯＬ−ＶＯＬ９００の未使用の領域を知ることができる。
ストレージ装置３０は、ストレージプールに設定された第１種ＬＤＥＶに対応するＰＳＣＢ３５２４を設定する。具体的には、ストレージプールに設定された第１種ＬＤＥＶの各スロットに対応するＰＳＣＢ３５２４を設定し、さらにフリーＰＳＣＢキュー３５２４０を設定する。初期状態ではストレージプールは全て未使用であるため、フリーＰＳＣＢキュー３５２４０によって連結される集合は、ストレージプールに設定された第１種ＬＤＥＶの全ての領域に対応する。
そして、ストレージ装置３０は、このストレージプールの領域を使用する場合に、必要なスロット分のＰＳＣＢ３５２４を第２種ＬＤＥＶであるＶＶＯＬ−ＤＩＲ３５２３に割り当てることで、当該領域が使用可能となる。複数のスロットの集号がページに相当する。ページは複数のＰＳＣＢから特定される。ホスト装置からＶＶＯＬ８００へのアクセス、ＶＶＯＬ８００のアクセス領域に対するＰＯＯＬ−ＶＯＬからの記憶領域の割り当てはページ単位で実行される。
具体的には、ストレージ装置３０は、フリーＰＳＣＢキュー３５２４０を参照する。そして、第２種ＬＤＥＶに割り当てる必要な領域分（ページ）のＰＳＣＢ３５２４を取得する。この取得したＰＳＣＢ３５２４を、それぞれＶＶＯＬ−ＤＩＲ３５２３のエントリに割り当てる。すなわち、ＶＶＯＬ−ＤＩＲ３５２３の各エントリのＰＳＣＢポインタ３５２３４に、対応するＰＳＣＢ３５２４を示すポインタを格納する。
なお、割り当て済みのＰＳＣＢ３５２４は、フリーＰＳＣＢキュー３５２４０の連結から外す。
これによって、第２種ＬＤＥＶの各ページ（スロット）が、ＶＶＯＬ−ＤＩＲ３５２３の各エントリのＰＳＣＢポインタ３５２３４で示されるＰＳＣＢ３４２４に割り当てられる。ＰＳＣＢ３５２４は第１種ＬＤＥＶのスロットに対応しているので、結果として、第２種ＬＤＥＶが第１種ＬＤＥＶに割り当てられ、ホスト計算機１０のアクセス対象である仮想ボリュームが物理デバイスとして使用可能となる。
図９は、ターゲットデバイスとＬＤＥＶ及びＰＤＥＶとの説明図である。ホスト計算機１０は、ストレージ装置３０に設定されたターゲットデバイス７００をアクセスする。ターゲットデバイス７００の記憶領域は、第１種ＬＤＥＶ５００である。
第１種ＬＤＥＶ５００は、物理ボリュームからＲＡＩＤ構成によって構成された第１種ＶＤＥＶ４００の領域である。第１種ＶＤＥＶ４００が一つ以上の第１種ＬＤＥＶ５００に分割されている。
また、ホスト計算機１０は、ストレージ装置３０に設定された仮想ボリュームをターゲットデバイス７０１としてアクセスする。このターゲットデバイス７０１の仮想的な記憶領域は第２種ＬＤＥＶ５０１である。第２種ＬＤＥＶ５０１は、ストレージプールとして設定されている第１種ＬＤＥＶ５００に関連付けられている。
ホスト計算機１０が、仮想ボリュームであるターゲットデバイス７０１にアクセスする。この仮想ボリュームの記憶領域は第２種ＬＤＥＶ５０１である。ストレージ装置３０は、第２種ＬＤＥＶ５０１へのアクセスを受け付けると、第２種ＬＤＥＶ５０１に関連付けられている第１種ＬＤＥＶ５００をアクセス先に変換する。
図１０に、仮想ボリューム（第２種ＬＤＥＶ）と複数のプールボリューム（第１種ＬＤＥＶ）との間で、均等に、アクセス対象及び記憶領域の単位としてのページが割り当てられている様子を示す。
図１０において、仮想ボリューム（ＨＤＰ−Ｖｏｌ）＃０と仮想ボリューム＃１とに対するホスト計算機からのアクセスに対しては、プロセッサ（ＭＰ）＃０がプールボリューム（Ｐｏｏｌ−Ｖｏｌ）＃０〜＃２からページを仮想ボリューム＃０、＃１へ割り当てる。
仮想ボリューム＃２と仮想ボリューム＃３とに対するホスト計算機からのアクセスに対しては、プロセッサ＃１がプールボリューム＃０〜＃２からページを仮想ボリューム＃２、＃３へ割り当てる。
ホスト計算機からのアクセスは、仮想ボリューム＃０〜＃３に対して、ＷＲ１〜ＷＲ５のように、順番に実行される。ＭＰ＃０は、仮想ボリューム＃０のホスト計算機からアクセスされたページ（ＷＲ１）に、プールボリューム＃０のページ（ＷＲ１）を割り当て、仮想ボリューム＃１のホスト計算機からアクセスされたページ（ＷＲ２）に、プールボリューム＃１のページ（ＷＲ２）を割り当てる。
次いで、ＭＰ＃１は、仮想ボリューム＃２のホスト計算機からアクセスされたページ（ＷＲ３）に、プールボリューム＃０のページ（ＷＲ３）を割り当て、仮想ボリューム＃３のホスト計算機からアクセスされたページ（ＷＲ４）に、プールボリューム＃１のページ（ＷＲ４）を割り当てる。
次いで、ＭＰ＃０は、仮想ボリューム＃０のホスト計算機からアクセスされたページ（ＷＲ５）に、プールボリューム＃０のページ（ＷＲ５）を割り当てる。
この割り当ては、既述の図８のキュー構造によって実現される。図１１は、従来のフリーキュー構造の一例である。各プールボリュームの未割り当てページのアドレス（ｆｒｅｅＭ−Ｎ：Ｍはプールボリューム♯Ｍに属すること示す。ＮはプールボリュームＭのＮ番目の未割り当てページであることを示す。）はフリーキューに（０）〜（１）に順番に接続されている。各ＭＰはフリーキュー（０）〜（１）に順番にアクセスして、プールボリュームの未割り当て領域を仮想ボリュームに割り当てていく。
ＭＰ＃０は、フリーキュー（０）にアクセスする。フリーキュー（０）には、先ず、ｆｒｅｅ０−１が接続されているので、プールボリューム＃０の未割り当てページの１番目のものを仮想ボリューム＃０のページＷＲ１に割り当てる。この未割り当てページは割り当て済み（使用済み）のページ（ＷＲ１）となる。
次いで、ＭＰ＃０は、フリーキュー（１）にアクセスする。フリーキュー（１）には、最初に、ｆｒｅｅ１−２が接続されているので、プールボリューム＃１の未割り当てページの２番目のものを仮想ボリューム＃１のページＷＲ２に割り当てる。この未割り当てページは割り当て済み（使用済み）のページ（ＷＲ２）となる。
次いで、ＭＰ＃１は、フリーキュー（０）にアクセスする。フリーキュー（０）のｆｒｅｅ０−１は割り当てに使用されたので、次のｆｒｅｅ０−４を選択し、これを仮想ボリュームのページＷＲ３に割り当てる。割り当てに使用されたページはフリーキューからリリースされる。
次いで、ＭＰ＃１は、フリーキュー（１）にアクセスする。フリーキュー（１）のｆｒｅｅ１−２は割り当てに使用されたので、次のｆｒｅｅ１−５を選択し、これを仮想ボリュームのページＷＲ４に割り当てる。
次いで、ＭＰ＃０は、フリーキュー（２）にアクセスする。フリーキュー（２）は最初にｆｒｅｅ２−３に接続されているので、プールボリューム＃２の３番目の未割り当てページを仮想ボリューム＃０のページＷＲ５に割り当てる。
図１１に示すように、複数のプールボリュームに対して割り当てページが均等に存在するように、フリーキューに繋がるフリー領域が属するプールボリュームが、フリーキュー毎に一つずつずれる様になっている。また、ホスト計算機からのアクセスに対するページの割り当て順序、
フリーキュー＃０→＃１→＃２→＃０→＃１・・・・・・・
は、ページ割り当て順序管理テーブルとして、メモリ３５０に格納されている。プロセッサはこの順序テーブルを常時参照して、ページの割り当てを行う。プロセッサは、仮想ボリュームに割り当てられたページに、ホスト装置からのライトデータを格納する。
図１２は、プールに属するプールボリューム＃０から＃２の未割り当てページが減少した際に、プールボリューム＃３を追加した様子を示している。図１３は、追加したプールボリュームの空き領域を管理するキュー構造を示している。プールボリューム＃３が新たにプールに追加されたため、各フリーキューにはプールボリューム＃３の空き領域が数多く接続している。
図１０の形態では、複数のプロセッサを設けて、ホスト計算機からのアクセス処理の負荷を分散させるため、各プロセッサには異なる仮想ボリュームを割り当てている。仮想ボリュームに対するホスト計算機からのアクセスは複数の仮想ボリューム間で均等にはならないため、長期間経過すると、複数のプールボリュームにおける使用済みページの割合のバランスが崩れてくる。
また、図１３の形態では、フリー領域が多く存在するプールボリューム＃３にプロセッサからのアクセスが集中するため、ホスト計算機からのＩ／Ｏに対する処理性能が低下するおそれがある。
そこで、図１４〜図１５に示すように、プロセッサは、プールに追加したプールボリュームに、既存のプールボリュームから、割り当て済みページを移動（マイグレーション）させて、割り当てページの割合が既存のプールボリュームと追加したプールボリュームとの間で均等になるようにしている。
図１４は、この処理の状態を示し、図１５はこの処理の後の状態を示している。図１４において、１４００はページの割り当てが実行された使用済み領域であり、１４０２は未使用領域である。図１５に示すように、プールボリューム＃０の使用済みページの一部のページのデータが、追加されたプールボリューム＃２の未使用ページにコピーされ（Ｓ１４０４）、さらに、プールボリューム♯１の使用済みページの一部のページのデータが、プールボリューム＃２の未使用ページにコピーされる（Ｓ１４０６）。
そして、プロセッサは、仮想ボリューム＃０からプールボリューム＃１への割り当て（Ｓ１００）をプールボリューム＃２に変更し（Ｓ１０４）、仮想ボリューム＃２からプールボリューム＃０への割り当て（Ｓ１０２）をプールボリューム＃２に変更する（Ｓ１０６）。この一連の過程をページの移動（マイグレーション）という。
図１４から図１５の過程は、使用済みの複数のページが複数のプールボリューム間で再配置されて均等にされたこと、すなわち、ページのリバランスが達成されたことを示している。ページをプール内の複数のボリュームで均等に行うのは、均等割り当てプログラム３５０８を実施するプロセッサである。プロセッサはリバランスプログラム３５０９を実施してリバラン処理を行う。
これらの処理の結果、複数のプールボリューム全体に対するページの割り当てが均等になるため、複数のプールボリュームそれぞれに対するＩ／Ｏのレートが同程度になり、ホスト装置からのアクセスに対するストレージ装置の処理性能がプールボリュームの追加後も良好に維持される。
なお、移動元ページのデータの更新日時に応じて、更新日時が最近のものであるほど、移動先ページにマイグレーションする際には、ハードディスクのより外周部に移動元ページのデータがコピーされる。
複数のプールボリューム間で割り当てページを均等にする上で、プールボリュームの容量を勘案することは重要である。すなわち、複数のプールボリューム間で、全ページ数（割り当て可能な全ページ数：プールボリュームの容量に相当する。）中割り当てに使用されたページの割合（ページ使用率）を均等にすることが重要である。ページ数の代わりに記憶容量で計算しても同じことである。
図１６はそのことを示すブロック図である。符号１３００は、各ボリュームに割り当てられているページの全容量であり、１３０２は、ボリューム間でマイグレーションされるページの容量である。プールボリュームの容量比は、プールボリューム＃０：＃１：＃２が１：３：２である。
したがって、ページの使用率が同じ割合になるように、プールボリューム＃１および＃３からプールボリューム＃２にそれぞれページがマイグレーションされる。
図１７Ａはプールを管理するテーブルであり、図１７Ｂはプールボリュームを管理するテーブルである。これらのテーブルは、プール情報３５２（図３）の一部として、メモリ３５０に記録されている。これらのテーブルは管理情報から作成される。ストレージシステムのリバランス処理プログラム３５０９は、これらテーブルを参照して、図１５で説明したリバンランス処理系を構築する。
図１７Ｃは、フリーキュー単位を管理するテーブルである。仮想ボリュームのアクセス領域に対する未使用ページの割り当ては、既述のように、フリーキューによって管理される。フリーキューはプールボリューム毎に設定されている。フリーキューにはプールボリュームの複数の未使用ページがＦＩＦＯ構造で接続されている。未使用ページが仮想ボリュームへ割り当てられる際は、未使用ページが順番にフリーキューから解放されて、仮想ボリュームからのマッピング、データコピー先として処理される。
このテーブルは、フリーキューの識別番号（＃）と、フリーキューが空き領域を管理する対象となるプールボリューム＃と、フリーキューに連結するフリー領域の個数と、フリーキューが所属するプール＃からなる。このテーブルも、プール情報の一環としてメモリ３５０に記録されている。
図１８は、ホスト装置から仮想ボリュームへのライトアクセスに対して、プールに属するプールボリュームから仮想ボリュームにページを割り当てる順序を示した説明図である。ここでの説明は、記憶容量の比が２：３：２である複数のプールボリュームを持ったプールを前提としている。
仮想ボリュームのページをプールボリュームに均等に割り当てるためには、プールボリュームに追加されたボリュームを含めて、ボリュームに対してページの割り当て順序を定めることが必要である。この割り当て順序は、管理情報としてメモリに登録されている（図１９参照）。
割り当て処理プログラム３５０８は、この管理情報を参照して、複数あるフリーキューの中から目的のフリーキューのアドレスを算出して、フリーキューに繋がる未使用ページのアドレス（ポインタ情報：ＰＳＣＢ）を取得し、ここに仮想アドレスのページに対して送られた、ホスト装置からのライトデータを格納する。
これを可能にするために、フリーキューのアドレスとプールボリュームの識別情報とは１：１に対応している。例えば、フリーキュー＃０はプールボリューム＃０のフリー領域を管理しており、フリーキュー＃１はプールボリューム＃１のフリー領域を管理しており、フリーキュー＃２はプールボリューム＃２のフリー領域を管理している。
図１８は、プールボリューム＃０に連続して２回ページを割り当て、次いで、プールボリューム＃１に連続して３回ページを割り当て、さらに、プールボリューム＃２に連続して２回ページを割り当て、以後これを繰り返すことを示している。
図１９は、この割り当て順序を管理するテーブルであり、図１８に示す割り当ての方式が登録されている。このテーブルもプール情報としてメモリに記録されている。割り当て処理プログラム３５０８は、この管理テーブルを参照して、プールボリュームに対するページの割り当ての順次制御処理を管理する。
このプログラムは、ソフトウエアカウンタを備え、どのプールボリュームまでページを割り当てたか否かを管理する。カウンタはページの割り当ての都度インクリメントされることから、カウンタの位置によって、現在のページ割当て対象となっているプールボリュームが分かる。図１９は、カウンタがプールボリューム＃１（フリーキュー＃１）のところにあることを示している。
ストレージ装置のリバランス処理プログラム３５０９は、図２０に示す様に、ページの再配置を実行することの契機として、プールボリュームをプールに追加することを検出する。
図２０において、ストレージ装置装置のリバランス処理プログラム３５０９は、プールの空き容量を一定時間監視する（Ｓ３３００１，Ｓ３３００２）。プール全体の使用量（割り当てに使用された全ページの容量）が閾値を越えたか否かを判定する（Ｓ３３００３）。
閾値を越えると、管理装置２０又は保守端末は、プールに新たにプールボリュームを追加する処理を行う。ストレージ装置は、図５乃至図７に示す管理情報をプールボリュームの追加に合わせて更新する（Ｓ３３００４）。その後、リバランス処理に移行する（Ｓ３３０２０）。
リバンランス処理の詳細を、図２１に基づいて説明する。リバランス処理プログラムが、リバランスの対象となったプールについてリバランスの可否を判定する（Ｓ７００７）。この判定は、図３のプール情報３５２を参照して行われる。
リバアンスの対象となったプールがリバランスできないと判定されるのは、例えば、次の場合である。
プール状態：プールが閉塞
プール内のボリューム数が所定（８）以上
プールボリューム状態：フォーマット中
縮退中
閉塞
仮想ボリューム：閉塞
その他、ストレージ装置のハードウエア資源（プロセッサ、共有メモリ、キャッシュメモリ、ＰＤＥＶ）の障害時にも、障害の程度に応じて、リバランスができないと判定される。
また、プロセッサが、リバランスの対象となったプールにリバランスＯＦＦフラグが設定されている場合には、リバランスができないと判定する。リバランスＯＮ／ＯＦＦ設定情報はプール毎、仮想ボリューム毎に設定できる。
リバランスが可能と判定されると、リバランス処理プログラムは前処理を行う（Ｓ７０１０）。たとえば、ページマイグレーション（ページの割り当ての変更あるいは移動）移動元のプールボリュームと移動先のプールボリュームとを決定する、ページマイグレーションの処理が適用されるプールボリュームの選択順序を決定する、ページマイグレーション後のプールボリュームの容量をシミュレートするなどである。
次いで、リバランス処理プログラムは、プール内でマイグレーションすべきページ数を算出する（Ｓ７０１１）。その後、ページのマイグレーション処理を行う（Ｓ７０１２）。このとき、後述するが、マイグレーションの際に、複数のプールボリュームに存在する固定パターン（例えば、ページの全てのデータ“０”のもの）を破棄して、プールボリュームの容量を縮小するための処理を同時に行う。
ページマイグレーションの際、リバランス処理プログラムは、リバランス処理の中断条件の発生の有無を判定する。例えば、リバランスの対象となったページにホスト計算機からＩ／Ｏがあった場合には、リバランスを中断する。リバランスの中断の要因がなくなった後リバランス処理を再開してもよい。
次いで、リバランス処理プログラムは、ページマイグレーションの進捗を管理する（Ｓ７０１３）。この管理によって、リバランス処理プログラムは、リバランスの進捗状況を管理ユーザに対して見せることができる。
図２２は、図２１のマイグレーションするページ数の算出（Ｓ７０１１）の詳細を示すフローチャートである。ここでのページ数の算出の方式は、複数のプールボリューム間でバランスされたページ数を理想のページとし、これと現在使用されているページ数の差を埋めるようにすることである。リバランス処理プログラムは、ＨＤＰ  ＶＯＬ（仮想ボリューム）に割り当てられている各プールボリュームでのページの使用量を検索する。
図２２の説明において、次のことを前提とする。
ＨＤＰ  ＶＯＬ＃ｉのプール使用量全体（プールに属する全てのボリュームにおいて割り当てられている（使用されている）ページの総数）：Ａ［ｉ］
ＨＤＰ  ＶＯＬ＃ｉのプールボリューム＃ｊ使用量全体（使用するページの総数）：Ｂ［ｉ］［ｊ］
プールボリュームの＃ｊの容量（総ページ数）：Ｃ［ｊ］
プール全体の容量（総ページ数）：Ｄ
追加プールＶＯＬ全体の容量（総ページ数）：Ｅ
まず、リバランス処理プログラムは、プールボリューム追加前に、ＨＤＰ  ＶＯＬ［ｉ］に割り当てられているプールＶＯＬ［ｊ］が使用してページ数を算出し、これをＢ［ｉ］［ｊ］に格納する（Ｓ１９００）。Ｂ［ｉ］［ｊ］はメモリ３５０のワーク領域に設定されている。
次いで、プールボリュームをプールに追加後に、ＨＤＰ  ＶＯＬ［ｉ］がプールボリューム［ｊ］を使用すべきページ数を次のようにして求める（Ｓ１９０２）。
ＨＤＰ  ＶＯＬ＃ｉのプール使用量全体×プールボリューム［ｊ］の理想の使用率
＝  Ａ［ｉ］×Ｃ［ｊ］／（Ｄ＋Ｅ）
プールボリュームの理想の使用率とは、プールボリュームに格納可能な総ページ数に対する、プールボリュームに割り当てられたページ数の割合であって、複数のプールボリューム間で均等にページが割り当てられていることを前提とした値である。
プールボリュームボリューム［ｊ］について移動が関係するページ数は、プールボリューム追加前と追加後の差であって、次のとおりである（Ｓ１９０４）。
ページ数＝  Ｂ［ｉ］［ｊ］−Ａ［ｉ］×Ｃ［ｊ］／（Ｄ＋Ｅ）
上記計算値がプラス（＋）の値の場合は、プールボリューム［ｊ］は移動元ボリュームとなり、計算値がマイナス（−）の値の場合は、プールボリューム［ｊ］は移動先ボリュームとなる。
リバランス処理プログラムは、移動ページ数を算出したら、プール番号毎に、移動ページ数、プールボリュームが移動元か移動元か移動先かを専用のテーブルに登録する。
図２３は、図２２の処理によって算出されたページ数とページの移動の様子を示すブロック図である。ページの移動は、一つのストレージプールグループに属する複数のプールボリュームと、これに対応する複数の仮想ボリュームと、において、各仮想ボリュームについてページの移動を算出した結果に基づく。プールボリュームのシンボルの中の数値は、プールボリュームにおいて割り当てに使用されているページ数を示している。
図２３に示す様に、仮想ボリューム＃０について、複数のプールボリューム間でページの移動はない。仮想ボリューム＃１、＃２について、図２３に示す矢印の方向で、矢印の上に示してある数のページがマイグレーションされる。リバランス処理プログラムは、プール単位でページの移動を行う。すなわち、図２３に示す全てのページ移動を行う。なお、仮想ボリューム単位でページの移動を行ってもよい。たとえば、仮想ボリューム＃１について、複数のプールボリューム間でページの移動を行い、仮想ボリューム＃２については、ページの移動を実行しないようにしてもよい。
図２４は、図２３に示すページの移動形態を実現するための管理テーブルである。この管理テーブルはメモリ３５０の所定領域に格納される。管理テーブルは仮想ボリューム毎に存在し、図２２のステップＳ１９０６の処理に基づいて作成される。仮想ボリューム毎で各プールボリュームが移動元となるかあるいは移動先となるかが登録されており、移動元のプールボリュームから移動先のプールボリュームについて移動されるページ数が移動元及び移動先のプールボリュームにそれぞれ登録されている。
リバランス処理プログラムは、Ｓ７０１１（図２１）の処理でこのテーブルを作成・登録し、Ｓ７０１２でこのテーブルを参照してマイグレーションを実行する。
図２５は、図２１のマイグレーション処理（Ｓ７０１２）の詳細を示すフローチャートである。この処理は、複数の仮想ボリュームが存在する場合は、各仮想ボリュームについて行われる。
リバランス処理プログラムは、仮想ボリュームの中から、関連ページを検出する。移動対象となるのはプールボリュームのページであるが、アドレス管理テーブル３５１１を参照することにより、移動対象となるページに対応する関連ページを仮想ボリュームの全ページの中から特定することができる。
リバランス処理プログラムは、仮想ボリューム中の先頭から全ページのそれぞれについて、関連ページであるか否かの判定を行う。どのページまでチェックしたかを管理するためにソフトウエアカウンタを用いる。ページのチェックが進む都度、カウンタをインクリメントする。そこで、リバランス処理プログラムは、カウンタの初期化を行う（Ｓ２３００）。
次いで、リバランス処理プログラムは、仮想ボリューム中のページを先頭ページから選択する（Ｓ２３０２）。次いで、選択したページにプールボリュームの移動対象ページが割り当てられているか否かを判定する（Ｓ２３０４）。
リバランス処理プログラムは、この判定を肯定すると、アドレス管理テーブル３５１１に基づいて移動対象ページが属するプールボリュームの識別情報を検出する（Ｓ２３０６）。
次いで、図２４のテーブルを参照して、プールボリュームが移動元か移動先かを判定する（Ｓ２３０６）。リバランス処理プログラムは、プールボリュームが移動先である場合には、移動元プールボリュームからページ移動するための空き領域を移動先プールボリュームに確保する（Ｓ２３１０）。
ページが移動されるプールボリュームとしては、割り当てバランスが低いものが選択されるが、複数のプールボリュームが移動先として競合した場合には、追加されたプールボリューム、次いで、移動先となる上での優先度が高いプールボリュームから順に選択される。移動先優先度テーブルには、各プールボリュームについて移動先となる優先度が登録されている。
リバランス処理プログラムは、移動先プールボリューム、移動元プールボリューム、移動対象ページ数を決めると、ページの移動のスケジュールを決定し、これをメモリ３５０のマイグレーション実行ジョブに登録する（Ｓ２１２）。このスケジュールは、例えば複数のページの移動を伴う場合、どのような順番でページの移動を行うかを決めるためのものである。このスケジュールは、Ｓ２３０２にて順次選択されたページがある都度、新たな移動先ボリュームなどが決定される都度更新登録される。
次いで、リバランス処理プログラムは、カウンタのカウント値をインクリメントし（Ｓ２３１６）、Ｓ２３０２にて選択していないページが未だ存在するか否かを判定する（Ｓ２３１８）。未検討のページが存在する場合にはステップＳ２３０２にリターンし、さらに、ページが存在しない場合にはＳ２３１２において順次更新されたスケジュールにしたがって、マイグレーションが実行される（Ｓ２３２０）。なお、マイグレーション処理（Ｓ２３２０）をＳ２３１２の後に実行するようにしてもよい。
図２６は、図２５のマイグレーション処理（Ｓ２３２０）を示すものである。ストレージアダプタ３７０は、リバランス処理プログラムにしたがって、移動元プールボリュームから移動元ページの全データをスロット単位で、キャッシュメモリ３２にステージジングする（Ｓ２４００）。
図２７にこの様子が示されている。プールボリューム＃１は移動元であり、プールボリューム＃２は移動先である。Ｓ２６００は、移動元ページがキャッシュメモリの第１の領域３２Ａにステージングされる様子を示している。符号２６０１はスロットである。ステージングはスロット単位で実行される。符号２６０１Ａは移動元ページであり、符号２６０１Ｂは移動先ページである。
ストレージアダプタ３７０内のＤＲＲ回路（Ｄａｔａ  Ｒｅｃｏｖｅｒ  ａｎｄ  Ｒｅｃｏｎｓｔｒｕｃｔ回路）は、スロット単位で移動元ページ２６０１Ａのデータをチェックし、データが“０”か否かをチェックする（図２６：Ｓ２４０２−Ｓ２４０４、図２７：Ｓ２６０２）。
この判定は、移動元ページのデータが固定パターンの一つ（全データが“０”）であるか否かを判定するためのものである。データが固定パターンの場合にはページのマイグレーションは行わず仮想ボリュームの移動対象ページに対するマッピングを、固定パターンデータを格納している専用領域に変更する。
ＤＲＲが“１”の存在を検出すると、ステップ２４１４に移行して、キャッシュメモリ内メモリコントローラは、移動元ページデータを、第１領域３２Ａから第２領域３２Ｂへ、キャッシュメモリ間コピーを行う（図２６：Ｓ２４１４、図２７：Ｓ２６０４）。そして、ストレージアダプタ３７０は、移動元キャッシュメモリ３２Ａをクリアする（図２７：Ｓ２４１６）する。
次いで、第２領域３２Ｂのデータを移動先プールボリューム＃２の移動先ページ２６０１Ｂにデステージ（図２７：Ｓ２６０６）、移動元ページ２６０１Ａを未使用ページに変更し、さらに、仮想ボリュームのページに対する割り当てを移動元ページから移動先ページに変更するなどのマイグレーション処理を行う（図２６：Ｓ２４１８）。
ＤＲＲが判定しているスロットのデータが“０”の場合は、ストレージアダプタ３７０は、スロット単位の全データのチェックが終了したか否かを判定し（Ｓ２４０６）、これを否定判定する場合には、ステップＳ２４０２に戻り、同一スロットの他のデータにつて、“０”か否かをチェックする。スロットの全部のデータについてチェックが終わると、ステップＳ２４１０に移行し、移動元ページに残りのスロットがあるか否かをチェックして、これを肯定判定する場合には、次のスロットについて既述のチェックを行う。
ページに属する全てのスロットについて判定が終わると、ステップＳ２４１２に移行して、全データが“０”からなる移動元ページは、マイグレーションが必要でないとして、未使用ページに変更する。
ストレージ装置が図２６に示す処理を実行することにより、ページを再配置する際、固定パターンデータを持つページを使用済みの管理から解放して、固定パターンデータが重複して仮想ボリュームに割り当てられることを解消し、ひいては、ホスト装置は、プールボリュームの記憶領域を効率よく利用することができるようになる。
図２６で説明するマイグレーションの過程で、移動元のページに対して、ホスト計算機からＩ／Ｏまたはストレージ装置内コピーＩ／Ｏが発行されると、ストレージ装置は、Ｉ／Ｏ処理の方を優先させてページマイグレーションを中止する。
すなわち、図２８に示す様に、仮想ボリュームにリード又はライトＩ／Ｏが供給されると、プロセッサは、移動元ページに対する論理アドレスが含まれているか否かをチェックする（Ｓ２５００）。
移動元ページに対する論理アドレスが含まれていることは、仮想ボリュームと移動元ページとの間のパスが切断されてなく、ページマイグレーション処理は終了していないことを意味するため、プロセッサは、移動元ページのデータが格納されている、キャッシュメモリの第２の領域（図２７の３２Ｂ）のデータをクリアし、さらに移動先ページに対してクリア処理を行う（Ｓ２５０４）。
ここでのクリア処理とは、仮想ボリュームにマッピングされている場合には、マッピング管理情報を削除することであり、また、移動先ページが使用ページとして管理されているのであれば、その管理情報を削除することである。
次いで、プロセッサは、Ｓ２５０６において、図２６のマイグレーション処理をスキップする（終了する）。なお、リードＩ／Ｏの場合は、これの処理が終了するまで、マイグレーション処理を一時停止し、その後再開するようにしてもよい。
図２７で説明したように、キャッシュメモリ３２は、第１領域（移動元用のキャッシュ領域）３２Ａと、第２領域（移動先用のキャッシュ領域）３２Ｂとがあり、両者の差分が無くなるまで、第２領域から移動元ページのデータが移動先ページ２６０１Ｂにコピーされないため、移動元ページにＩ／Ｏが入ったタイミングでページの移動処理を中止することができる。
フリーキューの構造が、図１１に示す方式のものでは、１つのフリーキューに複数のプールボリュームの空きページ情報（ＰＳＣＢ）が接続されていた。これでは仮想ボリュームにページを割り当てる際に、プロセッサは、仮想ボリュームにどのプールボリュームの空きページが割り当たるか区別がつかなかった。
リバランス処理では、割り当て済みのページの割合が多いプールボリュームからこれが少ないプールボリュームに割り当て済みページを移動するものであるから、移動先のページがどのプールボリュームに属するかを区別する必要がある。そこで、プロセッサは、フリーキューの構造をフリーキュー一つに対して一つのプールボリュームが割り当たった構造に変更する必要がある。
図２９はキュー構造が変更される過程を示すブロック図である。プロセッサは、フリーキュー＃０に繋がる未使用領域の情報をフリーキュー＃０から開放して、ワークキュー２７００の＃１に繋げる（（１）→（２））。フリーキュー＃０をプールボリューム＃１に対応するように、フリーキューを構築する（（３））。プールボリューム＃１に属するフリー領域（１−１，１−２）の情報をワークキュー＃１から開放してフリーキュー＃０に接続する（（３））。
図３０に、ワークキューの構造を示す。フリーキューにつながる空きページの情報のリンクをフリーキューから解放して、ワークキューに接続することにより、キュー構造の組み換えの最中に、フリーキューにホスト計算機からのＩ／Ｏが提供されないようにしている。
次いで、プロセッサは、未使用ページの情報をフリーキュー＃１から開放してワークキュー＃２に接続する（（４））。フリーキュー＃１をプールボリューム＃２に対応させる。次いで、プールボリューム＃１に属する未使用の領域（１−３，１−４）をワークキュー＃２から開放してフリーキュー＃０に接続する（（４）→（５））。
次いで、プロセッサは、未使用ページの情報をフリーキュー＃２から開放してワークキュー＃３に接続する。フリーキュー＃２をプールボリューム＃３に対応させる。次いで、ワークキュー＃２からプールボリューム＃１に属する未使用の領域（１−５，１−６）をワークキュー＃３から開放してフリーキュー＃０に接続する。
以上の結果、プールボリューム＃１にフリーキュー＃０が割り当てられ、プールボリューム＃１には、全てプールボリューム１の空きページ情報（１−１〜１−６）が接続されることなる。
また、ワークキュー＃１の最初に接続された、プールボリューム＃２の空きページ情報をワークキュー＃１から開放し、プールボリューム＃２に接続する。同様な処理を、ワークキュー＃２、次いでワークキュー＃３について実行する。この結果、プールボリューム＃２に割り当てられたフリーキュー＃１にプールボリューム＃２の空きページ情報が接続される。
さらに、ワークキュー＃１の最初に接続されたプールボリューム＃３の空きページ情報をワークキュー＃１から開放し、プールボリューム＃３に接続する。同様な処理を、ワークキュー＃２、次いでワークキュー＃３について実行する。この結果、プールボリューム＃３に割り当てられたフリーキュー＃２にプールボリューム＃３の空きページ情報が接続される。
図３１はフリーキュー構造を変換するためのフローチャートである。プロセッサは、キュー構造を変換するに際して、フリーキューにホストＩ／Ｏが要求されるとフリーキューをロックして、キュー構造の変換をＩ／Ｏ処理が終わるまで待機させる。
プロセッサは，Ｉ／Ｏ対象のフリーキューがロック中か否かをチェックする（２９００）。ロック中であることを判定すると、Ｉ／Ｏ対象となる次のフリーキューがあるか否かを判定し（２９０２）、これを肯定する場合には、次のフリーキューを参照し（２９０４）、ステップ２９００に戻る。
選択したフリーキューがロック中でない場合には、これをロックしてフリーキューを確保し（２９０６，２９０８）、フリーキューから未使用ページをＩ／Ｏに割り当てる。この後、フリーキューのロックを解放する（２９１０）。
ステップ２９０２において、次のフリーキューがない場合には、ロックビジーをホストＩ／Ｏに通知する（２９１２）。
図３２キュー構造の変換を実施するためのフローチャートである。プロセッサはワークキューへ移動させる対象のフリーキューがロック中であるか否かをチェックし、ロック中である場合には、フリーキューに対するＩ／Ｏ処理を終了するまで（３００２）、ステップ３０００の処理を繰り返す。
ロックがない場合には、対象フリーキューをロックして（３００４）、これをワークキューに接続する（３００６）。次いで、ワークキューから空きページ情報を他のフリーキューに接続し直す際には、接続先フリーキューがロック中であるか否かをチェックする（３００８）。ロック中である場合には接続先フリーキューに対するＩ／Ｏ処理が終了するまで待機する（３０１０）。
ロックない場合には、接続先フリーキューをロックし（３０１２）、これにワークキューから開放された空ページ情報（ＰＳＣＢ）を接続し（３０１４）、対象キュー及び接続先キューのロックを解放する（３０１６）。
次いで、ワークキューから他のフリーキューへ接続し直す次の接続先キューがあるか否か判定し（３０１８）、これを肯定するとステップ３００８に戻り、これを肯定すると、キュー構造の変換処理を終了する。
次に、図２６のＳ２４１８のページマイグレーション処理をフリーキューに関連して説明する。この説明のために、図３３に示すマイグレーションを前提にする。すなわち、プールボリューム＃０のページ＃１０００のデータが、プールボリューム＃３のページ＃２０００にコピーされ、仮想ボリューム（ＨＤＰ  Ｖｏｌ＃０）の前者のページ対するマッピングを後者のページのマッピングに変更される過程を、図３４を用いて説明する。
リバランス処理プログラム３５０９は、移動中キューを確保し、これをフリーキュー＃３に接続し、次いで、プールボリューム＃３に割り当てられているフリーキュー＃３に接続するフリー領域の中から、移動先ページとなる対象領域３３０２を選択し、このポインタ情報（Ｐｏｏｌ−Ｖｏｌ＃３、＃２０００）３３０３を移動中キュー（キュー＃０）３３００の最後に接続する（Ｓ３３００）。移動先ページとなる領域を、フリーキューとは別キューで管理するのは、移動先ページとなる領域が仮想ボリュームに割り当てられないようにするためである。
コピージョブからページデータのマイグレーションが正常に終了したとの通知をリバランス処理プログラムが受けると、ＶＶＯＬ  ＤＩＲにあるページ（プールボリューム＃０、ページ＃１０００）へのマッピング３３０６の情報である、ポインタ情報３３０４をクリアして、これを、移動先ページのアドレス（Ｐｏｏｌ−Ｖｏｌ＃３、＃２０００）へのポインタ情報に変更し（Ｓ３３０２）、移動元ページのアドレスをフリーキュー＃のキュー構造の適切な位置に挿入する。さらに、移動先ページを移動中キューから解放する。
図３５に示す様に、移動元ページから移動先ページへのデータマイグレーションの過程が、ホスト装置からのＩ／Ｏなどによって、これが中断（３４００）されると、図３６に示す様に、リバランス処理プログラムは、移動中キューを確保し、移動先キューに対して設定されたポインタ情報３３０４をクリアし、変更前の情報に戻す。
さらに、移動先となるページ３３０３がもともと存在していたプールボリュームのフリーキュー＃３を確保し、このふりキューに対して移動先ページ３３０３がフリー領域として挿入される位置を検索する。
リバランス処理プログラムは、移動中キュー３３００をフリーキュー（Ｑｕｅｕｅ＃３）に接続し、移動先ページ３３０３を移動中キュー３３００から解放し、さらに、移動先ページをフリーキュー（Ｑｕｅｕｅ＃３）に接続する。
以上のように、ストレージ装置はフリーキューとは別キューである、移動中キューを利用することにより、ページの再配置を可能にするとともに、ページ再配置に競合するホストＩ／Ｏなどの要因がストレージ装置に加わっても、Ｉ／Ｏの処理を優先させることができる。
図３７Ａ〜図３７Ｆはマイグレーションの進捗管理画面であって、管理ユーザに提供されるものである。既述の移動ページの計算に結果に基づいてページの移動の進捗を示したものである。図３７Ａ〜図３７Ｆは移動前でのページの使用状況をプールボリューム毎に集計した画面である。図３７Ａはページの移動前、図３７Ｆはページの移動後である。画面の中の数字はページ数を示す。
図３８Ａはページ移動前のページ数を仮想ボリューム単位で集計した画面である。図３８Ｂはページ移動後のページ数を仮想ボリューム単位で集計した画面である。
したがって、管理ユーザには、管理画面を通して、マイグレーションの進捗状況が提示される。
既述の実施形態では、ページリバランス契機の判定、リバランス実施の可否をストレージ装置が行ったが、これを管理装置が行うようにしもよい。前者の場合は、ストレージ装置が本発明の計算機システムになり、後者の場合は、管理装置とストレージ装置との組み合わせが計算機システムになる。
また、既述の実施形態では、ページマイグレーションの際に移動ページ数を計算することとして説明したが、管理ユーザが移動ページ数を都度入力するようにしてもよい。
【図１】
2010122679.tif 000003
【図２】
2010122679.tif 000004
【図３】
2010122679.tif 000005
【図４】
2010122679.tif 000006
【図５】
2010122679.tif 000007
【図６】
2010122679.tif 000008
【図７】
2010122679.tif 000009
【図８】
2010122679.tif 000010
【図９】
2010122679.tif 000011
【図１０】
2010122679.tif 000012
【図１１】
2010122679.tif 000013
【図１２】
2010122679.tif 000014
【図１３】
2010122679.tif 000015
【図１４】
2010122679.tif 000016
【図１５】
2010122679.tif 000017
【図１６】
2010122679.tif 000018
【図１７Ａ】
2010122679.tif 000019
【図１７Ｂ】
2010122679.tif 000020
【図１７Ｃ】
2010122679.tif 000021
【図１８】
2010122679.tif 000022
【図１９】
2010122679.tif 000023
【図２０】
2010122679.tif 000024
【図２１】
2010122679.tif 000025
【図２２】
2010122679.tif 000026
【図２３】
2010122679.tif 000027
【図２４】
2010122679.tif 000028
【図２５】
2010122679.tif 000029
【図２６】
2010122679.tif 000030
【図２７】
2010122679.tif 000031
【図２８】
2010122679.tif 000032
【図２９】
2010122679.tif 000033
【図３０】
2010122679.tif 000034
【図３１】
2010122679.tif 000035
【図３２】
2010122679.tif 000036
【図３３】
2010122679.tif 000037
【図３４】
2010122679.tif 000038
【図３５】
2010122679.tif 000039
【図３６】
2010122679.tif 000040
【図３７Ａ】
2010122679.tif 000041
【図３７Ｂ】
2010122679.tif 000042
【図３７Ｃ】
2010122679.tif 000043
【図３７Ｄ】
2010122679.tif 000044
【図３７Ｅ】
2010122679.tif 000045
【図３７Ｆ】
2010122679.tif 000046
【図３８Ａ】
2010122679.tif 000047
【図３８Ｂ】
2010122679.tif 000048
【国際調査報告】
2010122679.tif 000049
2010122679.tif 000050
2010122679.tif 000051
2010122679.tif 000052
2010122679.tif 000053
2010122679.tif 000054
2010122679.tif 000055