次に、本発明の実施形態について説明する。図1は、本発明に係わる計算機システムの第1の例を示すハードウエアブロック図である。計算機システムは、ホスト計算機10と、管理装置20と、これらが接続するストレージ装置30と、を備えている。ストレージ装置30は、ストレージシステム、あるいはストレージサブシステムとも呼ばれている。
ホスト計算機10は、ストレージ装置30の論理的な記憶資源にアクセスする。管理装置20は、ストレージ装置30の記憶領域の構成を管理する。ストレージ装置30は、物理デバイス34に設定された記憶領域にデータを格納する。
ホスト計算機10は、入力手段(装置)110、出力手段(装置)120、CPU130、メモリ140、ディスクアダプタ150、ネットワークアダプタ160、及び、ディスクドライブ170を備える。
入力手段110は、ホスト計算機10を操作する管理者等から入力を受け付ける手段である。入力手段110は、例えば、キーボードで構成される。出力手段120は、ホスト計算機10の状態や設定項目を表示する手段である。出力手段120は、例えばディスプレイ装置で構成される。
CPU130(コントローラ)は、ディスクドライブ170に格納されているプログラムをメモリ140に読み込んで、そのプログラムに規定された処理を実行する。メモリ140は、例えば、RAM等で構成され、プログラムやデータ等を格納する。
ディスクアダプタ150は、ストレージ装置30とストレージエリアネットワーク50を介して接続し、ストレージ装置30にデータを送受信する。ストレージエリアネットワーク50は、データ転送に適したプロトコル(例えば、Fibre Channel)によって、データ転送を実現する。
ネットワークアダプタ160は、管理装置20又はストレージ装置30と管理ネットワーク40を介してデータを送受信する。管理ネットワーク40は、例えば、Ethernet(登録商標)で構成される。ディスクドライブ170は、例えばハードディスク装置で構成され、データやプログラムを格納する。
管理装置20は、入力手段210、出力手段220、CPU230、メモリ240、ネットワークアダプタ250、及び、ディスクドライブ260を備える。
入力装置210は、管理装置20を操作する管理者等の入力を受け付ける手段で、例えばキーボードで構成される。出力装置220は、管理装置20の状態や設定項目を表示する手段で、例えば、ディスプレイ装置で構成される。
CPU230は、ディスクドライブ260に格納されている管理プログラムをメモリ240に読み込んで、そのプログラムに基づいて、ストレージ装置30に対する管理処理を実行する。メモリ240は、例えば、RAM等で構成され、プログラムやデータ等を格納する。
ネットワークアダプタ250は、ホスト計算機10又はストレージ装置30と管理ネットワーク40を介してデータを送受信する。ディスクドライブ260は、例えばハードディスク装置で構成され、データやプログラムを格納する。
ストレージ装置30は、コントローラ31、ストレージキャッシュメモリ32、共有メモリ33、物理デバイス(PDEV)34、電源スイッチ35、及び、電源36を備える。
コントローラ31は、PDEV34に構成された記憶領域へのデータの格納を制御する。
ストレージキャッシュメモリ32は、PDEV34に読み書きされるデータを一時的に格納する。共有メモリ33は、コントローラ31やPDEV34の構成情報を格納する。
PDEV34は、複数のディスク装置によって構成される。電源36は、ストレージ装置30の各部に電力を供給する。
電源スイッチ35は、電源36からの電力の供給をON/OFFするスイッチである。ディスク装置(記憶デバイス)は、例えばハードディスクドライブで構成され、主としてユーザデータを格納する。記憶デバイスとしては、フラッシュメモリなどの半導体メモリからなるドライブでもよい。
コントローラ31は、少なくとも、プロセッサ360を備えるものであり、この実施形態では、さらに、ホストアダプタ310、ネットワークアダプタ320、不揮発性メモリ330、電源制御部340、メモリ350、ストレージアダプタ370、及び、共有メモリアダプタ380を備える。
ホストアダプタ310は、ストレージネットワーク50を介してホスト計算機10との間でデータを送受信する。ネットワークアダプタ320は、管理ネットワーク40を介してホスト計算機10、又は、管理装置20との間でデータを送受信する。
不揮発性メモリ330は、ハードディスクやフラッシュメモリで構成され、コントローラ31で動作するプログラムや構成情報等を格納する。電源制御部340は、電源36から供給される電力を制御する。
メモリ350は、例えばRAM等で構成され、プログラムやデータ等を格納する。プロセッサ360は、不揮発性メモリ330に格納されているプログラムをメモリ350に読み込んで、そのプログラムに規定された処理を実行する。
ストレージアダプタ370は、PDEV34、及び、ストレージキャッシュメモリ32との間でデータを送受信する。共有メモリアダプタ380は、共有メモリ33との間でデータを送受信する。
図2は、計算機システムの第2の形態を示すハードウエアブロック図である。本実施形態の計算機システムは、一つ以上のホスト計算機10、管理サーバ20、第1のストレージ装置30A、及び、第2のストレージ装置30Bを備えている。
第1のストレージ装置30Aは、第1のネットワーク121を介してホスト計算機10に接続される。第2のストレージ装置30Bは、第2のネットワーク123を介して第1のストレー装置30Aに接続されている。
一つ以上のホスト計算機10、管理サーバ20、第1のストレージ装置30A、及び、第2のストレージ装置30Bは、第3のネットワーク108を介して相互に接続されている。
第1のネットワーク121、第2のネットワーク123、及び、第3のネットワーク108は、いかなる種類のネットワークであってもよい。例えば、第1のネットワーク121及び第2のネットワーク123はSANである。第3のネットワーク108はLANである。
第1のストレージ装置30Aは、コントローラと記憶デバイス群34とを備える。コントローラは、例えば、複数のフロントエンドインターフェース127と、複数のバックエンドインターフェース137と、第1の内部ネットワーク156と、一以上のキャッシュメモリ32と、一以上の制御メモリ350と、一以上の制御プロセッサ360とを備える。
フロントエンドインターフェース127は、ストレージ装置30Aにネットワーク121を介して接続されたホスト計算機10又は第2のストレージ装置30Bと通信するためのインターフェース回路である。従って、ストレージ装置30Aは、少なくとも二つのフロントエンドインターフェース127を備え、それらのうち一つは第1のネットワーク121に接続され、別の一つは第2のネットワーク123に接続される。
フロントエンドインターフェース127は、例えば、第1のネットワーク121又は第2のネットワーク123に接続されるポート129と、メモリ131と、ローカルルータ(以下、「LR」と略記する。)133と、を備える。LR133に、ポート129及びメモリ131が接続される。
LR133は、ポート129を介して受けたデータを任意の制御プロセッサ360で処理するために振り分ける。具体的には、例えば、制御プロセッサ360が、或るアドレスを指定するI/Oコマンドをその制御プロセッサ360に実行させるようにLR133を設定する。その設定に従って、LR133が、I/Oコマンド及びデータを振り分ける。
バックエンドインターフェース137も複数設けられている。バックエンドインターフェース137は、PDEV34と通信するためのインターフェース回路である。バックエンドインターフェース137は、例えば、PDEV34に接続されるディスクインターフェース141と、メモリ135と、LR139と、を備える。LR139には、ディスクインターフェース141及びメモリ135が接続される。
第1の内部ネットワーク156は、例えば、スイッチ(例えば、クロスバスイッチ)或いはバスで構成される。第1の内部ネットワーク156に、複数のフロントエンドインターフェース127、複数のバックエンドインターフェース137、一以上のキャッシュメモリ32、一以上の制御メモリ350、及び、一以上の制御プロセッサ360が接続されている。これらの要素間の通信は、第1の内部ネットワーク156を介して行われる。
コントローラの構成要素であるフロントエンドインターフェース127、バックエンドインターフェース137、キャッシュメモリ32、制御メモリ350、及び、制御プロセッサ360に、第2の内部ネットワーク(例えば、LAN)155が接続され、その第2の内部ネットワーク155に、保守管理端末153が接続されている。
保守管理端末153は、第3のネットワーク108にも接続されており、ストレージシステムを保守、又は、管理する計算機である。ストレージ装置30Aの保守員は、例えば、保守管理端末153(又は、その保守管理端末153と通信可能な管理装置20)を操作して、制御メモリ350に記憶される種々の情報を定義することができる。
第2のストレージ装置30Bは、コントローラ165、及び、PDEV163を備える。コントローラ165は、例えば、ネットワークアダプタ162と、ホストアダプタ164と、キャッシュメモリ172と、制御メモリ171と、プロセッサ167と、ストレージアダプタ169と、を備える。
ネットワークアダプタ162は、第3のネットワーク108に接続され、管理サーバ20と通信するインターフェースである。ホストアダプタ164は、第2のネットワーク123に接続され、第1のストレージ装置30Aと通信するインターフェースである。
ホストアダプタ164は、例えば、第1のストレージ装置30Aのフロントエンドインターフェース127と同様のものであってもよい。
制御メモリ171は、種々のコンピュータプログラム、及び、情報を記憶するメモリである。
キャッシュメモリ172は、第1のストレージ装置125からのI/Oコマンドに従って読み出される又は書き込まれるデータを一時記憶するメモリである。
プロセッサ167は、制御メモリ171に記憶されている種々のコンピュータプログラムを実行する。少なくとも、プロセッサ167は、第1のストレージ装置30AからのI/Oコマンドに従って、キャッシュメモリ172、及び、PDEV163に対するデータの書き込み及び読み出しを制御する。
PDEV163は、物理記憶デバイスであり、例えば、第1のストレージ装置30AのPDEV34と同様のものであってもよい。あるいは、PDEVは、テープ記憶媒体であってもよい。
本実施形態の第1のストレージ装置30Aは、いわゆる外部接続機能を備える。第2のストレージ装置30Bは、この機能によって第1のストレージ装置30Aに外部接続されている。ここで、外部接続について説明する。
既に説明したように、第1のストレージ装置30Aは、一つ又は複数の論理ボリュームをホスト計算機10に提供する。各論理ボリュームは、ホスト計算機10によって一つの記憶デバイスと認識される。例えば、第1のストレージ装置30Aが提供する論理ボリュームが、第1のストレージ装置30A内のPDEV34に対応付けられてもよい。その場合、第1のストレージ装置30Aは、論理ボリュームへのライトコマンドを受信すると、その論理ボリュームに対応付けられたPDEV34にデータを格納する。このような論理ボリュームは、以下の説明において、通常ボリューム、とも記載される。
あるいは、第1のストレージ装置30Aが提供する論理ボリュームは、第2のストレージ装置30B内のPDEV163に対応付けられてもよい。この場合、第1のストレージ装置30Aは、論理ボリュームへのライトコマンドを受信すると、その論理ボリュームに対応付けられたPDEV163にデータを書き込むためのライトコマンドを生成し、生成したライトコマンドを第2のストレージ装置30Bに送信する。
第2のストレージ装置30Bは、第1のストレージ装置30Aから受信したライトコマンドに従って、データをPDEV163に格納する。
このように、第1のストレージ装置30Aが提供する論理ボリュームに格納されるデータを、実際には第1のストレージ装置30Aの外部に接続された第2のストレージ装置30Bに格納する機能が、外部接続機能と呼ばれている。
第1のストレージ装置30Aは、ストレージ制御処理を確立するクラスタ1251を複数備える。各クラスタは内部ネットワーク156を有し、複数のクラスタの内部ネットワーク156がクラスタ間のネットワーク1561によって接続される。
したがって、一つのクラスタの制御プロセッサ360は他のクラスタにアクセスすること、例えば、他のクラスタのキャッシュメモリ32のデータをリード・ライトすることができる。複数のクラスタ間のネットワーク1561は、パス、スイッチによって構成される。
図3は、図2に示すストレージ装置の複数のクラスタを備える構成を説明するためのハードウエアブロック図である。第1のクラスタ1251aが、第1の仮想ボリューム(VOL#0)に対するアクセス処理を制御し、第2のクラスタ1251bが第2の仮想ボリューム(VOL#1)に対するアクセス処理を制御する。
図3に示すプール30000は、複数のクラスタ間をまたがって形成されてもよい。しかし、ネットワーク1561の機器構成によっては、当該ネットワーク1561を経由すると転送速度が下がり、性能が落ちる場合がある。そこで、これを避けるために、システムは、仮想ボリューム(VOL#0)にプールボリュームを割り当てる際、ネットワーク1561を経由しないプールボリュームを選択する。
そこで、ストレージ装置30は、プールを、モジュール単位で管理する。プールボリュームグループ#0(30002),#1(30004), #2(30006)がその管理の例である。
ストレージ装置30が、クラスタ1251aに設定された仮想ボリューム#0にページを割り当てるときは、プールグループ#0(30002)のプールボリュームを選択する(S30000)。
ストレージ装置30は、プールグループの容量を、複数のTier単位毎に管理する。後述のとおり、システム容量プールの管理も同様である。仮に、プールグループ#0(30002)の容量が枯渇した、或いは、枯渇しそうであることを想定した場合、ストレージ装置30は、容量に余裕のあるプールグループ#1(30004)のプールボリュームをプールグループ#0(30002)に追加する。ここで、プールの全体容量に対して空き容量の割合が予め決めた値より小さい時のように、空き容量の割合が多いことが、余裕があることになる。
プールグループ#2(30006)のように、プールモジュールをまたがった設定も可能である。
図4は、ストレージ装置30が行う記憶領域の動的割り当ての動作を示す機能ブロック図である。PDEV34からRAID構成によってRAIDグループが構成されている。このRAIDグループからVDEV400が構成されている(S101)。
VDEV400は記憶領域である複数の論理デバイス(LDEV)500に分割されている。PDEV34から構成されたVDEVを、「第1種VDEV」と呼ぶ。この第1種VDEVに含まれるLDEVを、「第1種LDEV」と呼ぶ。
ホスト計算機10Aは、ストレージ装置30のホストアクセス用論理ユニットアクセスする。ホスト計算機10から見えるアクセス相性を「ターゲットデバイス」と呼ぶ。ターゲットデバイス700は、第1種LDEV500を含むボリュームへのホスト計算機10Aからのパスの定義を伴って設定されている(S102)。
ストレージ装置30は、外部から接続されている外部物理デバイス600をPDEV34と同様に扱うこともできる。すなわち、RAID構成によって、複数の外部物理デバイス(EDEV)600から複数の第1種VDEV400aが構成される(S103)。第1種VDEV400aは、一つ以上の記憶領域である第1種LDEV500aに分割されている。この第1種LDEV500aにホスト計算機10へのパスを設定して、ターゲットデバイス700が設定される(S104)。
また、ストレージ装置30は、第2種VDEV401を設定する。第2種VDEVとは、PDEV34によって構成される第1種VDEV400とは異なり、アドレス領域を持っているがPDEV34に対応する領域は持っていない仮想的なデバイスである。
第2種VDEV401に対応するキャッシュメモリの領域を設定することは可能である。この第2種VDEV401には、一つ以上のLDEVがある。このLDEVを2種LDEV501と呼ぶ。
この第2種LDEV501にホスト計算機10Bへのパスを設定して、ターゲットデバイス701が設定される(S110)。このターゲットデバイス701がホスト計算機10のアクセス対象である。ターゲットデバイス701は第2種LDEV501に割当てられている。ターゲットデバイス、及び/又は、第2種LDEVが、シン・プロビジョニングに於ける、容量が仮想化された仮想ボリュームに相当する。
第2種VDEV401、及び、第2種LDEV501には共に、物理的な記憶領域がPDEVから割り当てられていない、すなわち、これらの記憶容量は仮想化されているため、第1種VDEV400、第1種LDEV500とは異なるものである。この仮想領域を、ホスト計算機10Bが使用できるようにするためには、第2種LDEV501に、実の記憶領域を備えるプール60を関連付ける必要がある。この関連付けを、図5Aを用いて後述する。
プール60は、第1種LDEV500の一つまたは複数を、一つ又は複数の属性で纏めたグループである。第1種LDEV500は、プール60に割り当てられている(S112)。第1種LDEV500がプールボリュームに対応する。
プールに設定された第1種LDEV500を第2種LDEV501に、アドレスを用いて、割当てを行う(S111)。したがって、ターゲットデバイス700の記憶領域は、第1種LDEV500になるが、ターゲットデバイス701の記憶領域は第2種LDEV501になる。
ストレージ装置30が、ターゲットデバイス701を介して、第2種LDEV501へのアクセスを受け付けると、第2種LDEV501に対応する第1種LDEV500をアクセス先とする。
ホスト計算機10A,10Bからのライトデータは、第1種LDEV500に格納される。第1種VDEV400と第2種VDEV401同士はアドレスに基づいて対応する。したがって、ホストからのライトデータはPDEV34に格納される。
図5Aは、仮想ボリューム411−416とプールボリューム421との対応関係を含むストレージ装置30のブロック図である。符号42A及び符号42Bはそれぞれ既述のプールである。各プールには複数のプールボリューム421が存在する。符号421Aはプールボリュームのページである。
ページとは、ホストからのリード・ライトアクセスを処理するための規定容量からなる記憶領域の単位である。ライトデータは一つ又は複数のページに格納される。あるいは、ライトアクセスにページの割り当てを1回行い、数回のライトアクセスに係るライトデータを同じページ内に格納し、続くライトデータが一つのページに格納できなければ、このライトデータに係るライトアクセスに新たなページの割り当てを行うこともある。
符号411Aは仮想ボリューム411の仮想ページである。仮想ページはプールボリューム421のページとは異なり、実の記憶領域を伴わない仮想的な記憶容量の単位である。ホストからのリード・ライトは、仮想ボリュームの仮想ページ単位で処理される。ホストからのライトが仮想ボリュームに実行されると、仮想ボリュームの仮想ページにプールボリュームの実ページが、ライトアクセスに合わせて、あるいはライトアクセスの都度割当てられる。
符号4112は仮想ボリュームの仮想ページとプールボリュームの仮想ページとの対応関係を示すためのラインである。ストレージ装置30は、仮想ボリュームと、プール及びプールボリュームとの間に対応関係を設定し、仮想ボリュームには、対応関係にあるプールのプールボリュームからページが割当てられる。
本発明に係るストレージ装置30の特徴は、仮想ボリュームに対する容量提供用プール(図4:60)を階層化した点にある。すなわち、容量提供用プールは複数の階層を有し、例えば、図5Aは、二つの階層を示している。仮想ボリューム411側(フロントエンド側)の階層のプールを「容量仮想化プール」と呼び、PDEV側(バックエンド側)の階層のプールを「システム容量プール」と呼ぶ。符号42A及び42Bはそれぞれ容量仮想化プールであり、符号44はシステム容量プールである。
容量仮想化プール42A,42Bは、その名の通り、プールの容量が仮想化されたものである。これは、ストレージ装置30が、プールの容量を、プールの状態に応じて、ホスト計算機10側に意識させることなく、増減できるようにするためである。
なお、既述の従来技術においては、プール容量が枯渇すると、ストレージ装置は、ユーザ、管理者に、シン・プロビジョニングの実行上の警告表示を行い、プールへのプールボリュームの追加作業を求めていた。
これに対して、本発明に係るストレージ装置は、容量仮想化プールの状態に応じて、システム容量プール44から、プールボリューム4411を、容量仮想化プール42に自動的に追加し、追加されたプールボリュームをシステム容量プール44の管理から削除する。
システム容量プールのプールボリューム4411は、どの容量仮想化プールにも属することが無いように管理され、特定の容量仮想化プールに追加されると、特定の容量仮想化プールに属するという特性に変更される。
ストレージ装置30は、プールボリュームを予め定義して、これをシステム容量プール44に設定しておく。システム容量プール44は少なくとも一つのプールボリューム4411を有する。
ストレージ装置30は、容量仮想化プール42の実容量が不足すると、ユーザや管理者の操作を必要とすることなく、システム容量プール44からプールボリューム4411を容量仮想化プール42に追加する。
一方、容量仮想化プール42の実容量に過剰が生じると、ストレージ装置30は、容量仮想化プール42からプールボリューム421を削除して、システム容量プール44に、削除されたプールボリュームを回収する。
図5A,5Bにおいて、プールボリュームが容量仮想化プール42A,42Bとシステム容量プール44との間で追加削除できることを図面上明示するために、一部のプールボリューム421,4411を破線で記した。
プールボリュームが、容量仮想化プール42とシステム容量プール44のどちらに属するかは、テーブルによって管理されている。
なお、ユーザは、管理マネージャプログラムが動作している計算機(ホスト計算機10)、管理サーバ20、保守管理端末153の少なくとも一つを用いて、システム容量プール44や容量仮想化プール42の作成をストレージ装置30に要求する。
図5Bに示すように、ストレージ装置30は、プールボリュームを、主として、プールボリュームの供給元であるストレージデバイスの特性に基づく階層に分けて管理する。この階層の区別は、例えば、Tier1、Tier2、Tier3からなり、容量仮想化プール42A,42B、システム容量プール44も階層毎のグループに分けられる。
Tier1の階層に属するメディアは、オンラインストレージとして分類されるものであり、例えば、高速応答性、高信頼性を持ったSSD、SAS、ファイバチャネルHDDである。
Tier2の階層に属するメディアは、ニアラインストレージとして分類されるものであり、例えば、SATAハードディスク、ATAハードディスクである。
Tier3の階層に属するストレージデバイスは、オフラインストレージとして分類されるものであり、例えば、低価格、大容量のテープデバイスである。これらは一例であり、後述のとおり、ストレージデバイスを、既述の分類とは異なる分類に基づいて階層に分類することもできる。
ストレージ装置30は、システム容量プール44から容量仮想化プール42にプールボリュームを追加する場合には、同一階層のグループの間でプールボリュームの追加の処理を実行する。容量仮想化プール42からプールボリュームを削除して、システム容量プール44に回収する場合も同様である。
なお、後述のとおり、ストレージ装置30は、複数の容量仮想化プールの間で、システム容量プールを介することなく、プールボリュームの出し入れを実行してもよい。また、ストレージ装置30は、システム容量プール44の上位階層から容量仮想化プール42の下位階層にプールボリュームを移動することは可能である。
ストレージ装置30は、複数の容量仮想化プール42に対するプールボリュームの供給を統一的に管理するために、システム容量プール44を一元的に設定する。なお、システム容量プール44がストレージ装置30に複数存在することを妨げない。
ストレージ装置は、複数の仮想ボリュームに対する動的な記憶領域の割当てを柔軟に実行するために、プール42を複数設定し、かつ、プール42の記憶容量を仮想化することによって、システム容量プール44との間のプールボリュームの出入りを可能にし、ホスト計算機10からの仮想ボリュームへのアクセスを制限することがないようにしながら、容量仮想化プール42の実の空き容量の変動に迅速に対応することにした。
ストレージ装置30の諸機能のうちの第1機能は、容量仮想化プール42のプールボリュームのページを仮想ボリュームに割当てるものである。その第2機能は、システム容量プール44から容量仮想化プール42にプールボリュームを追加したり、容量仮想化プール42からシステム容量プール44にプールボリュームを回収したりするものである。
第2機能は、容量仮想化プールの実容量のうちの未使用容量に基づいて、プールボリュー ムの追加、回収を行う。第1機能は、容量仮想化プールの未使用容量がどの程度であるかにかかわらず、プールボリュームのページの仮想ボリュームへの割当てを常時継続する。なお、第1機能、及び、第2機能という表記は、便宜上のものである。これら機能は、後述する管理・制御プログラムによって達成される。
図5Bのように、ストレージ装置が、容量仮想化プール42A,42Bを階層化して管理している形態では、システム容量プール44においても、プールボリュームを階層毎に管理する必要がある。
容量仮想化プールの階層は、シン・プロビジョニングの開始前、その開始後に設定されるものであってもよい。仮想ボリュームに、特定の階層のプールボリュームを対応させるほか、複数の階層のプールボリュームを対応させることを妨げるものではない。
ストレージ装置は、仮想ボリューム411等に、ページ単位で、所望の階層の記憶領域を割当てることが可能である。例えば、ストレージ装置が、仮想ボリュームに対するIO頻度を監視し、その頻度の高いボリュームには、オンライデータ或いは重要データが記憶されると判定し、当該ページへのリードアクセスを早くするため、高速高性能のメディアの階層に属するプールボリュームからページを割当てる。仮想ボリュームとプールボリュームとのマッピングテーブルには階層の情報が含まれる。
ストレージ装置30は、仮想ボリュームにページを割当てる際、最上位の階層のプールボリュームからページを割当てようとする。一方、当該プールボリュームに対するIO負荷、プールボリュームの残容量の如何によっては、下位の階層のプールボリュームからページを割当てるようにしてもよい。
ストレージ装置は、所定の期間、仮想ボリュームに割当てられたページ対するIO負荷をモニタリングし、IO負荷が特定のプールボリュームに偏ったものであることを判定すると、容量仮想化プールの同一階層内の他のプールボリュームのページに対して、或いは、異なる階層内の他のプールボリュームのページに対して、ページデータのマイグレーションを実行する。
システム容量プール44に設定される論理的記憶領域は未使用のものである。例えば、パスが設定されているボリュームや、ユーザデータが格納されているボリュームやコピー対象となっているボリュームは、システム容量プールにプールされるべきプールボリュームとしては適当ではない。
図6は、容量仮想化プール42A,42Bと、システム容量プール44との間のプールボリュームの移動を示したブロック図である。符号1723は、第1種VDEV500,500aから、プールボリュームを、管理者の操作に基づいて、システム容量プール44に追加ことを示している。
符号1713は、プールボリューム4411を、システム容量プール44から容量仮想化プール42Aに追加することを示している。符号1711は、容量仮想化プール42Aからプールボリューム421をシステム容量プールに回収することを示している。
符号1721は、システム容量プール44からではなく、ユーザ又は管理者の操作によって、プールボリュームを容量仮想化プール42Aに追加することを示している。
符号1719は、容量仮想化プール42Aから、プールボリュームを容量仮想化プール42Bに移動することを示している。符号1719aはその逆を示す。この移動は、システム容量プール44を介さないことも可能である。
このようなプールボリュームの移動は管理テーブルにおいて、プールボリュームとプールとの対応関係を変更することによって管理されている。
容量仮想化プール42Aとシステム容量プール44とをそれぞれ、複数のTierによって階層化した形態での、プールボリュームの移動を図7に基づいて用いて説明する。容量仮想化プール42Aには、Tier1からTier3までの階層のグループが存在する。容量仮想化プール42Bも同様である。
符号1804は、システム容量プール44のTier3の階層から容量仮想化プール42AのTier3の階層にプールボリュームを追加することを示している。符号1802はその反対である。
符号1803は、システム容量プール44のTier1の階層から容量仮想化プール42Bにプールボリュームが追加されることを示している。符号1801はその逆である。
容量仮想化プール42Aへのプールボリュームの追加(図6の1721:システム容量プール44からではなく、ユーザ又は管理者の操作による。)は、プールボリュームが持つ階層に応じて、容量仮想化プール42Aの特定の階層に対して行われる。システム容量プールへのプールボリュームの追加も図6の1723と同様である。
容量仮想化プールに対する既述のプールボリュームの拡張、縮小処理の実行契機としては次のものがある。先ず、容量仮想化プールの容量監視機能は、容量仮想化プールの性能情報を入手、分析し、容量仮想化プールに性能の低下が発生した契機で、プールボリュームの自動拡張縮小機能に、システム容量プールから容量仮想化プールへのプールボリュームの追加を指示する。
一方、プールボリュームの自動拡張縮小機能は、容量仮想化プールの性能に余裕が出た契機で、容量仮想化プールからシステム容量プールにプールボリュームを回収する。
その他の契機としては、ストレージ装置がホスト計算機からのライトを受けた際、複数種類のメディア間でデータのマイグレーションを行う契機、スケジュールで定めたタイミングが発生した契機、又は、仮想ボリュームが作成された契機、コピー系の処理によって、ページが消費された契機、又は、ホスト計算機、管理サーバ、又は、保守端末を利用したユーザや管理者からの指示をストレージ装置が受けた契機と、がある。
一方、システム容量プールの拡張/縮小の契機としては、スケジュールで定めたタイミングが発生した契機や容量仮想化プールの拡張/縮小が実行された契機と、がある。
容量仮想化プールの性能としては、容量仮想化プールの使用済み実容量の程度、容量仮想化プールの空き容量の程度、又は、容量仮想化プールに対するIO頻度やIO負荷がある。
容量仮想化プールの有効実容量の適否を判定するための一つの形態としては、一つ又は複数の閾値を用いるものがある。有効実容量とは、仮想ボリュームに未割当ての記憶容量、すなわち、空の実容量である。
閾値は、容量仮想化プールが作成された時もしくはその後に、管理サーバ20やストレージ装置の管理機器153を使ってユーザや保守員によって設定又は更新可能なものである。閾値は、容量仮想化プール管理情報テーブルに、ストレージ装置30の構成制御プログラムによって設定或いは更新登録される。
閾値としては、例えば、次のように3つの閾値がある。1つめの閾値は、容量仮想化プールの有効実容量に関する閾値である。この閾値は、容量仮想化プールの有効実容量が基準より少なくなった時点で、管理装置20や保守管理端末153に、ユーザや保守員に容量に余裕が無い旨の警告を出させるために使用されてもよい。
二つの目の閾値は、“オーバプロビジョニング閾値”と称するものである。ストレージ装置は、容量仮想化プールの実総容量と、容量仮想化プールをデータの格納先として使用する、複数の仮想ボリュームの使用済総容量とを比較し、後者が前者の規定割合を上回る場合に、運用上容量仮想化プールの枯渇を引き起こすおそれがあると判定する。
容量仮想化プールの総実容量(使用済実容量を含む総実容量)について定められる閾値が、“オーバプロビジョニング閾値”である。容量仮想化プールの実容量×オーバプロビジョニング閾値>容量仮想化プールを使う全仮想ボリュームの使用総容量、となるようにする。
例えば、オーバプロビジョニング閾値が90%の場合、容量仮想化プールの総実容量が1TB とすると、そのプールを使う全仮想ボリュームの使用総容量が、1TB×90%以下の場合、ストレージ装置は、容量仮想化プール容量の拡張を実施せず、それを超えると、容量仮想化プールの容量拡張処理を実施する。
オーバプロビジョニング閾値に対して、ユーザは、容量仮想化プールの自動容量拡張処理の優先度を設定でき、優先度が「高」に設定されると、ストレージ装置は、オーバプロビジョニング閾値を満足しなくても、シン・プロビジョニングを停止せず、容量仮想化プールの自動拡張を行いながら、シン・プロビジョニングを継続する。
3つ目の閾値は、容量仮想化プールの使用済みの実容量の下限に関する閾値である。容量仮想化プールの利用率が低い場合、容量仮想化プールは必要以上に記憶容量を占有している。このような状況は記憶資源の浪費につながるため、容量仮想化プールに下限の閾値を定義し、容量仮想化プールの利用率、利用済み総容量などが下限値を下回ると、ストレージ装置は、容量仮想化プールからプールボリュームや容量を回収する。
ストレージ装置は、回収したプールボリュームや容量をシステム容量プールに関連づけることによって、回収したプールボリュームを容量仮想化プールへ次に割当てることに備える。
ストレージ装置は、閾値に基づいて、容量仮想化プールに対するプールボリュームの自動追加、自動回収の制御を実行する。
図8Aは、容量仮想化プール42に、閾値1(上限値)と閾値2(下限値)とを設定していることを示している。容量仮想化プール42の使用済み実容量4200Bが上限閾値以上であると、ストレージ装置は、容量仮想化プールの有効実容量4200Cが不足していると判定し、一方、容量仮想化プールの使用済み実容量が下限値以下であると、容量仮想化プール42の有効実容量に余裕或いは過剰があると判定する。
閾値1の例として、容量仮想化プールの使用済み実容量が容量仮想化プールの全体容量に対して90パーセントであり、閾値2の例として、これが80パーセントである。
図8Bに示すように、容量仮想化プール42が階層化されている場合には、ストレージ装置は各階層について閾値に基づく処理を行う。この図では、SSDの階層とSATAの階層では使用済み実実容量は閾値2より下であるため、これらの階層では有効実容量に余裕があり、SASの有効実容量は、閾値1と閾値2との間にあるため、適切なレベルになっている。
プールボリュームの追加、削除は階層毎に実行される。閾値は各階層で異なってもよい。
容量仮想化プールの使用率が下限の閾値を下回る場合、ストレージ装置又は管理装置は、ユーザによるQoSLANE(Quality of Service)の設定の有無を確認し、その設定があれば、その条件を満たすようにして、プールボリュームをシステム容量プールに戻す。
QoSLANEの設定がなく、システム容量プールが階層管理されているものであれば、ストレージ装置は、プールボリュームが属する階層と同一の階層になるように、プールボリュームを容量仮想化プールからシステム容量プールに回収する。
システム容量プールが階層管理されていない場合には、ストレージ装置は、プールボリュームを、システム容量プールの任意の階層に回収する。
なお、プールボリュームを容量仮想化プールからシステム容量プールに戻す際、プールボリュームの割当て済みページデータは、容量仮想化プールに残す他のプールボリュームに移動し、データ移動元ページと仮想ボリュームとのマッピングを開放し、データ移動先ページに仮想ボリュームのアドレスとのマッピングを設定する。
容量仮想化プール42に、システム容量プール44からプールボリュームが追加されると、図9Aに示すように、容量仮想化プールの有効実容量4200Cのサイズが増える。この際、図9Aのように、ストレージ装置は、閾値1と閾値2の値、両者の幅を変えてもよい。
一方、反対に、容量仮想化プール42からシステム容量プールにプールボリュームが回収される場合には、図9Bのように、有効実容量4200Cのサイズが減少する。この際、ストレージ装置は、閾値1と閾値2の値、両者の幅を変えてもよい。
管理サーバ20又は保守端末153は、容量仮想化プール42の容量に対する規定割合をデフォルト閾値としてGUIを介してユーザ・管理者に提示することができる。ユーザ等はこのデフォルト値を採用してもよいし、或いは、他の閾値をGUIに入力してもよい。
容量仮想化プール42が複数の階層に管理されている場合には、この処理は階層毎に実施されてもよい。ユーザが各階層に入力した閾値が容量仮想化プールに統一的に設定された閾値と一致しない場合には、GUIはユーザ等に警告表示を行う。
次に、プールのこのような構成を前提として、計算機システムの詳細について説明する。図10は、ストレージ装置のメモリ350のブロック図である。
メモリ350には、プロセッサ360によって読み込まれて実行される各種プログラムや、論理ボリュームの設定に関する構成情報351、及び、プールの設定に関するプール情報352が格納されている。以後、単に、プール、と表記する場合、プールは容量仮想化プールとシステム容量プールの両方を包含するものとする。
コマンド制御プログラム3501は、ホスト計算機10、又は、管理装置20からのコマンドを解釈し、そのコマンドに規定された処理を実行する。構成制御プログラム3503はストレージ装置30の構成の設定、更新等の処理を実現する。
ディスクI/Oプログラム3505は、PDEV34へのアクセスを制御する。プール制御プログラム3507は、プールの設定に関する各種処理を実行する。
構成情報351は、VDEV、LDEV、階層、RAIDグループなどストレージ装置の環境設定に必要な情報である。構成情報351は、アドレス管理テーブル3511、LDEV管理情報3512、VDEV管理情報3514、Tier管理情報3513、そして、RAIDグループ管理情報3515と、を備えている。
アドレス管理テーブル3511は、ターゲットデバイスとLDEVとVDEVと物理デバイスとのアドレスのマッピング情報35111、ターゲットデバイス−LDEVマッピング情報35111、そして、LDEV−VDEVマッピング情報35112、及び、VDEV−PDEVマッピング情報35113を格納している。アドレス管理テーブル3511の詳細は後述される。
LDEV管理情報3512は、LDEVに関する管理情報を含む。VDEV管理情報3514は、VDEVに関する管理情報を有する。Tier管理情報3513は、容量仮想化プール、システム容量プールに定義された階層の管理情報を含む。
さらに、RAIDグループ情報3515は、複数のPDEV34からなるRAIDグループのRAIDレベルなどRAIDの管理情報を有している。
プール情報352は、プールに関する設定を格納する。プール情報352は、容量仮想化プール管理情報3521、プールボリューム管理情報3522、VVOL(仮想ボリューム)−DIR3523、PSCB3524、容量仮想化プールTier管理情報3527、システム容量プール管理情報3525と、を含んでいる。
容量仮想化プール管理情報3521は、容量仮想化プールの設定に関する管理情報である。プールボリューム管理情報3522は、容量仮想化プール42及びシステム容量プール44のプールボリュームに関する管理情報である。
VVOL−DIR3523は、容量仮想化プールのLDEV(プールボリューム)の仮想ボリュームに対する割り当てに係る情報である。PSCB3524情報は、容量仮想化プールのLDEVのアドレスの情報である。
階層管理情報3257は、容量仮想化プールに設定される階層の管理情報である。これはプール毎に設定されている。システム容量プール管理情報3525は、システム容量プールに設定される階層の管理情報である。
さらに、メモリ350は、第1種VDEV400,400a、或いは、第1種LDEV500,500aのシステム容量プールへの追加、容量仮想化プールの性能要件に基づいて、システム容量プールと容量仮想化プールとの間でのプールボリュームの追加及びその回収、複数の容量仮想化プール間でのプールボリュームの移動を管理する自動容量拡張/縮小プログラム3509を有する。
なお、既述の閾値はこの性能要件の一例である。その他、性能要件として、IO頻度がある。
そして、階層毎のプールボリューム管理プログラム3508は、システム容量プール、及び、容量仮想化プールが階層化されている場合、階層毎にプールボリューム数やその他の特性を管理する。プールが階層化されていない場合には、システム容量プール全体のプールボリューム数、容量仮想化プール毎の全体のプールボリュームの数や特性を管理する。
容量仮想化プールのプールボリュームからページを仮想ボリュームにホスト装置からのアクセスに基づいて動的に割当てる処理は、コマンド制御プログラム3501によって達成される。
なお、ストレージ装置30は、複数のプールボリューム500間で、仮想ボリュームに対するページの割当てを均等化する。この均等化処理は、PCT/JP2009/058533号に記載されている。本出願人は、PCT/JP2009/058533号の全ての記載事項をこの明細書にインコーポレートする。
図11は、VDEV管理情報3514のテーブルである。VDEV管理情報は、VDEV固有情報35141から構成される。
VDEV固有情報35141は、VDEV番号(VDEV#)35142、エミュレーションタイプ35143、総サイズ35144、残サイズ35145、デバイス属性35146、デバイス状態35147、設定LDEV数35148、LDEV番号35149、先頭VDEV−SLOT#35150及び終了VDEV−SLOT#35151で構成される。
VDEV#35142は、VDEVの識別子である。エミュレーションタイプ35143はVDEVのエミュレーションタイプの識別子である。総サイズ35144は、VDEVに設定されている総サイズである。残サイズ35145はVDEVの未使用の領域のサイズである。
デバイス属性35146は、VDEVに定義されている属性の識別子である。そのVDEVが第1種VDEVである場合には第1種VDEVを示す識別子が格納され、そのVDEVが第2種VDEVであり、仮想ボリュームに設定されている場合には第2種VDEVを示す識別子が格納される。
デバイス状態35147は、VDEVの状態を示す識別子である。VDEVの状態は、正常、閉塞、障害閉塞等がある。閉塞は、パンク閉塞など、障害の発生意外の要因によって閉塞されていることを示す。障害閉塞は、デバイスの何れかに障害が発生しておりそのために閉塞されていることを示す。
設定LDEV数35148は、VDEVに設定されているLDEVの総数である。LDEV番号35149はVDEVに設定されているLDEVの番号が格納される。先頭LDEV−SLOT#35150は、設定されているLDEVの物理的な先頭のスロット番号の識別子である。
終了LDEV−SLOT#35151は、設定されているLDEVの物理的な最終のスロット番号である。このLDEV番号35149、先頭LDEV−SLOT#35150及び終了LDEV−SLOT#35151は、LDEV数と同じ数だけLDEV番号毎に設定される。
図12は、LDEV(ボリューム)の管理情報のテーブルである。LDEV管理情報は、LDEV固有情報35121から構成される。LDEV固有情報35121は、LDEV番号(LDEV#)35122、エミュレーションタイプ35123、サイズ35124、先頭スロット番号35125、終了スロット番号35126、パス定義情報35127、デバイス属性35128、デバイス状態35129、プログラム使用状況351300及びPOOL−ID351301で構成される。
LDEV#35122は、LDEVの識別子である。
エミュレーションタイプ35123は、LDEVのエミュレーションタイプの識別子である。
サイズ35124は、LDEVに設定されている総サイズである。LDEVが仮想ボリュームである場合には、サイズは仮想化されたものになる。
先頭スロット番号35125は、設定されたLDEVの先頭のスロット番号の識別子である。
終了スロット番号35126は、設定されたLDEVの最終のスロット番号である。
パス定義情報35127は、ホスト計算機10に定義されたパスの識別子である。
デバイス属性35128は、LDEVの属性の識別子である。LDEVが第1種LDEVである場合には第1種LDEVを示す識別子が格納され、LDEVが第2種LDEVである場合には第2種LDEVを示す識別子が格納される。また、LDEVがプールに設定されている場合は、プール属性を示す識別子が格納される。
デバイス状態35129は、そのLDEVが所属するVDEVの状態を示す識別子である。VDEVの状態は、正常、閉塞、障害閉塞等がある。閉塞は、パンク閉塞など、障害の発生以外の要因によって閉塞されていることを示す。障害閉塞は、デバイスの何れかに障害が発生しておりそのために閉塞されていることを示す。
プログラム使用状況351300は、LDEVが何れかのプログラムによって処理中である場合に、そのプログラムの識別子が格納される。POOL−ID351301は、LDEVがプールに設定されている場合に、その識別子が格納される。
階層番号351302には、論理ボリュームの供給元であるPDEVが対応する階層の管理番号が格納される。階層化に伴う管理に、ストレージ装置は、この管理番号を参照する。仮想ボリュームのテーブルに階層管理番号351302が設定されている場合には、仮想ボリュームにはこの階層のプールボリュームからページが割当てられる。
VDEV管理テーブル(図11)、LDEV管理テーブル(図12)は、構成制御プログラム3503に基づき、ユーザ又は管理者からの操作によって設定又は更新される。以後の管理テーブルも同様である。
階層番号は、記憶デバイス(メディア)に対応したものとなる。図13Aはメディアの管理情報のテーブルであり、図13Bは、階層の管理情報のテーブルである。
これら管理情報は、階層管理情報3513の具体的管理情報としてメモリ350に格納されている。メディア管理情報テーブルは、メディアがストレージ装置に増設された際に構成制御プログラム3503によって作成される。
メディア種別35132は、メディアの種類である。例えば、ディスクであれば、SSD、FC(Fiber Channel)、SAS(Serial Attached SCSI)、SATA(Serial ATA)等である。ストレージ装置は、メディアの種類を階層番号35133毎で分類、管理するために、その階層を構成する情報をメディア管理情報テーブルに登録する。
応答時間35134は、データのリードやライト指示に対してのメディアからの応答時間を示す。この時間が短いメディア程、処理性能が一般的に高い。
Sequential Data Rate35135は、メディアのデータ転送能力である。メディアが単位時間あたりに転送できるデータ量のことであり、一般的に、この値が大きいほど、データの転送能力が高いメディアである。
RAIDレベル35136は、階層を構成するRAIDのレベル、例えば、RAID1やRAID5、RAID6等である。図13Aは、階層管理情報の一例であり、他の情報を排除するものではない。
階層番号35133とメディアの種別との対応が、階層管理情報テーブル(図13B)に示されている。図13Bはメディアを階層番号に対応させるための分類の一例である。このメディアの分類はメディアの性能に基づいたものとなっている。
すなわち、ストレージの性能に影響を与える要素である応答時間35134やSequential Data Rate35135、RAIDレベルを基に、メディアと階層番号とが対応付けられる。図13Bは、メディアを6種類の階層に分類する例を示している。
ストレージ装置は、階層を後から拡張することもできる。例えば、新たなメディアが追加された場合である。階層の分類は管理者やユーザによって実行されるか、あるいは、ストレージシステムによって一意に決定されてもよい。
なお、メディアの分類の他の形態として、性能に加えてビットコストの観点を加える手法もある。
ストレージ装置は、容量仮想化プール、システム容量プール、及び、仮想ボリュームに階層を設定するに際して、図13A、図13Bで示されたテーブルを参照する。
階層の分類は相対的であることを妨げない。例えば、計算機システムに存在する最良のデバイスを階層0に設定し、他のデバイスを下位の階層に分類する。
図14は、図10において、概略を説明したアドレス管理テーブル3511を詳細に説明するものである。
アドレス管理テーブル3511は、ターゲットデバイスとLDEVとVDEVと物理デバイスとのアドレスのマッピング情報を格納するものである。
アドレス管理テーブル3511は、ターゲットデバイス−LDEVマッピング情報35111、LDEV−VDEVマッピング情報35112、及びVDEV−PDEVマッピング情報35113を有する。
ターゲットデバイス−LDEVマッピング情報35111は、ターゲットデバイスのアドレスとLDEVのアドレスとの対応の情報を有する。
LDEV−VDEVマッピング情報35112は、LDEVのアドレスとVDEVのアドレスの情報を有する。
VDEV−PDEVマッピング情報35113は、VDEVのアドレスとそのRAIDグループ番号(又は、パリティグループ)とPDEVのアドレスの情報を有する。
ストレージ装置は、このアドレス管理テーブルを参照することによって、ターゲットデバイス700,701のアドレスがどのLDEVのどのアドレスに対応するかを知ることができる。また、LDEVのアドレスがどのVDEVのどのアドレスに対応するかを知ることができる。
また、VDEVのアドレスがどのRAIDグループに属しており、どのPDEVのどのアドレスに対応するかを知ることができる。
図15は、容量仮想化プールの管理情報のテーブルである。
プール管理情報3521は、プール固有情報35211を有する。
プール固有情報35211は、POOL−ID35212、属性/用途35213、エミュレーションタイプ35214、容量35215、空き容量35216、閾値35217、状態35218、プールボリューム数35219、プールボリュームデバイス番号リスト35220、プールを利用しているデバイス数35221及びプールを利用しているデバイス番号35222を有している。
POOL−ID35212は、プールの識別子である。
属性/用途35213は、容量仮想化プールの属性及び用途を示す識別子である。属性は、後述のPSCB3524の連結の形態である。用途は、例えば、シン・プロビジュニング、スナップショット、リモートコピーなど、プール運用形態の用途である。
エミュレーションタイプ35214はプールのエミュレーションタイプの識別子である。
容量35215は、容量仮想化プールの実容量である。
なお、図15の管理テーブルに、ホスト計算機に対して仮想化された容量(仮想容量)が登録されてもよい。
空き容量35216は、容量仮想化プールの未使用の実容量である。容量仮想化プールの総実容量、又は、使用済み実容量、或いはこれらの一つ又は複数の組み合わせがテーブルに登録されてもよい。
閾値35217は、容量仮想化プールに対するプールボリュームの追加、容量仮想化プールからのプールボリュームの回収を実行するための特性値である。
状態35218は、プールの現在の状態である。例えば、定義中、拡張中、有効等である。
プールボリューム数35219は、プールとして設定されているLDEVの総数である。
プールボリュームデバイス番号リスト35220はプールとして設定されているLDEV番号の一覧である。
プールを利用しているデバイス数35221は、容量仮想化プールに属するプールボリュームの数である。プールを利用しているデバイス番号35222は、容量仮想化プールに属するプールボリュームのIDの一覧である。
プールにある階層のリスト35223は、容量仮想化プールに設定されている階層情報のリストの一覧である。階層情報のリスト35271については後述する。階層情報のリスト35271は、容量仮想化プール内階層管理情報3527の一例である。
図16は、RAIDグループ情報3515の一例のテーブル35151である。この情報は、RAIDグループ番号35152を構成するHDD種別情報を管理するためのものである。
メディア種別35153は、SSDやSASなどのメディアの種類を示す情報である。
回転数35154は、メディアの回転数を示す。
RAIDレベル35155はRAIDグループを構成する場合での、例えば、RAID1,RAID5などの情報である。
図17は、階層化された容量仮想化プール、又は、階層化されたシステム容量プールの階層管理のための理情報35271の一例のテーブル35271である。このテーブルの特徴は、容量仮想化プールの管理情報(図15)、又は、後述のシステム容量プールの管理情報(図18)に階層の情報(Tier#:35273)を追加した点である。
情報テーブル35271は、プールID35272、階層番号35273、エミュレーションタイプ35274、容量35275、空き容量35276、閾値35277、状態35278、プールボリューム数35279、プールボリュームデバイス番号リスト35280、プールを利用しているデバイス数35281及びプールを利用しているデバイス番号35282と、階層に属するプールボリュームのリスト35283と、から構成される。
これらの各情報について、容量仮想化プールの管理情報テーブル(図15)、又は、システム容量プールの管理情報テーブル(図18)と異なる部分を説明する。
階層番号35273は、プールに設定された階層の識別情報である(参考:図13A,13B)。プール内に複数の階層が設定されている場合には、階層毎に図17のテーブルが設定される。
容量35275は、各階層(Tier#:35273)の総実容量である。
空き容量35276はその階層の未使用領域のサイズである。
閾値35277は、階層毎に設定可能である。
状態35278は、階層の現在の状態であり、例えば、定義中、拡張中、有効等である。
プールボリューム数35219、プールボリュームデバイス番号リスト35220、プールを利用しているデバイス数35221、プールを利用しているデバイス番号35222のそれぞれは、既述した内容のものであり、階層毎に設定される。
階層に属するプールボリュームリスト35283には、各階層に所属するプールボリュームのリスト35221(図12)が含まれる。
なお、図3のように、複数のクラスタ間に容量仮想プールが跨る場合には、管理テーブル(図15、図17)にはクラスタを区別する情報が付加され、テーブル内の情報はクラスタ毎に管理される。
図18は、システム容量プールの管理情報3525のテーブル35251である。システム容量プール管理情報テーブル35251は、プールID35252、属性/用途35253、エミュレーションタイプ35254、容量35255、空き容量35256、閾値35257、状態35258、プールボリューム数35259、使用するプールIDリスト35260、階層リスト35261とから構成されている。
プールID35252は、システム容量プールの識別子である。
属性/用途35253は、プールの属性及び用途を示す識別子であり、具体的にはプールがシステム容量プールであることを示すものとなる。
エミュレーションタイプ35254は、システム容量プールのエミュレーションタイプの識別子である。
容量35255は、システム容量プールの総容量である。総容量とはシステム容量プール設定された全プールボリュームの合計の容量である。
空き容量35256は、システム容量プールの未使用の領域のサイズである。
閾値35257は、システム容量プールに対する制限値であって、既述したものとほぼ同様である。例えば、システム容量プールの使用済み容量が閾値を超えるとストレージ装置に記憶デバイスを増設する必要がある。
状態35258は、システム容量プールの現在の状態である。例えば、定義中、拡張中、有効等である。
プールボリューム数35259は、システム容量プールとして設定されているLDEV(未使用プールボリューム)の総数である。
使用するプールIDリスト35260は、システム容量プールに対応付けられた容量仮想化プールのIDの一覧である。通常は、ストレージ装置内の複数の容量仮想化プールの全てが登録される。
階層リスト35261は、システム容量プールに設定されている階層のテーブル35271の一覧である。
なお、既述のテーブルで、階層が設定されていない場合には、階層情報にはNULLが登録される。
図15乃至図18の各テーブルは、構成制御プログラム3503によって設定・更新される。階層の定義は、プールが稼働中でも可能である。
なお、ストレージ装置は、システム容量プールを、シン・プロビジョニングの他、ストレージ制御における他のコピー系機能である、スナップショット、リモートコピーに適用し、これらコピー系機能に必要なコピー先ボリュームを確保するために用いてもよい。
図19は、VVOL−DIR3523及びPSCB3524を説明するためのブロック図である。
VVOL−DIR3523は、仮想ボリュームの仮想領域を構成するための第2種LDEVの構成情報である。
PSCB(Pool Slot Control Brock)3524は、容量仮想化プール42に設定された第1種LDEVの構成の情報である。
既述のように、ストレージ装置30は、PDEV34からRAID構成によって第1種VDEV400を構成する。この第1種VDEV400を、記憶領域である第1種LDEV500に分割する。
第1種LDEVが容量仮想化プール42に設定される。この容量仮想化プール42に設定された第1種LDEVがプールボリューム900である。
また、ストレージ装置は、仮想ボリューム(VVOL)701を設定し、さらに、第2種VDEV401を構成する。この第2種VDEVを仮想ボリュームの仮想的な記憶領域としての第2種LDEV(VVOL800)に分割する。
ストレージ装置は、仮想ボリューム701である第2種LDEV501を、プールボリュームである第1種LDEV500に割り当てる。これによって、ホスト計算機10がアクセスする仮想ボリュームの記憶領域が、物理デバイスであるPDEV34から構成された第1種LDEVに対応することになる。
仮想ボリュームの構成は、VVOL−DIR3523に格納される。VVOL−DIR3523は、LDEV番号(LDEV#)35231及びエントリ35232によって構成される。
LDEV番号(LDEV#)35231は第2種LDEVの識別子である。
エントリ35232は、第2種LDEVの構成情報である。このエントリ35232は、第2種LDEVアドレス35233、PSCBポインタ35234、及び、階層番号35235から構成される。
PSCBポインタ35234には、第2種LDEVがプールボリューム900の第1種LDEVに割り当てられる場合に、その第1種LDEVの領域のポインタが格納される。なお、初期状態では第2種LDEVは第1種LDEVに割り当てられていないので、PSCBポインタ35234には「NULL」が格納される。
PSCB3524は、容量仮想化プール42に設定されている第1種LDEVの情報である。このPSCB3524は、容量仮想化プール42に設定されている第1種LDEVのスロット毎に設定される。
PSCB3524は、LDEV番号(LDEV#)35241、プールボリュームアドレス35242、PSCB前方ポインタ35243及びPSCB後方ポインタ35244から構成される。
LDEV番号(LDEV#)35241は、プールボリュームでの第1種LDEVの識別子である。プールボリュームアドレス35242は、プールボリューム900における第1種LDEVのアドレスである。
PSCB前方ポインタ35243及びPSCB後方ポインタ35244は、プールボリューム900内の第1種LDEVの前後のスロットの識別子である。
また、プールボリューム900の領域のうち、未使用の領域は、その先頭がフリーPSCBキュー35240で示される。フリーPSCBキュー35240は、次のスロットを示すPSCB3524へのポインタを含む。
ストレージ装置30は、フリーPSCBキュー35240に示されたポインタを参照して、次のPSCB3524を得る。さらに、次のPSCB3524のPSCB後方ポインタ35245を参照して、段階的にPSCB3524を辿る。そして、その未使用の領域の最終のスロットに対応するPSCB3524を得る。この最後のPSCB3524のPSCB後方ポインタ35244はフリーPSCBキュー35240である。
ストレージ装置は、フリーPSCBキュー35240を辿り、PSCB3524のポインタによって連結された集合によって、システム容量プールのプールボリューム900の未使用の領域を知ることができる。
ストレージ装置は、容量仮想化プール42に設定された第1種LDEVに対応するPSCB3524を設定する。具体的には、容量仮想化プール42に設定された第1種LDEVの各スロットに対応するPSCB3524を設定し、さらにフリーPSCBキュー35240を設定する。初期状態では、容量仮想化プール42は全て未使用であるため、フリーPSCBキュー35240によって連結される集合は、容量仮想化プールに設定された第1種LDEVの全ての領域に対応する。
そして、ストレージ装置30は、この容量仮想化プールの領域を使用する場合に、必要なスロット分のPSCB3524を第2種LDEVであるVVOL−DIR3523に割り当てることで、当該領域が使用可能となる。
一つスロット、又は、複数のスロットの集号がページに相当する。ページは、一つ又は複数のPSCBから特定される。ホスト装置から仮想ボリューム800へのアクセス、仮想ボリューム800のアクセス領域に対するプールボリュームからの記憶領域の割り当てはページ単位で実行される。
具体的には、ストレージ装置は、フリーPSCBキュー35240を参照する。そして、第2種LDEVに割り当てる必要な領域分(ページ)のPSCB3524を取得する。この取得したPSCB3524を、それぞれVVOL−DIR3523のエントリに割り当てる。すなわち、VVOL−DIR3523の各エントリのPSCBポインタ35234に、対応するPSCB3524を示すポインタを格納する。なお、割り当て済みのPSCB3524は、フリーPSCBキュー35240の連結から外される。
これによって、第2種LDEVの各ページ(スロット)が、VVOL−DIR3523の各エントリのPSCBポインタ35234で示されるPSCB3424に割り当てられる。
PSCB3524は第1種LDEVのスロットに対応しているので、結果として、第2種LDEVが第1種LDEVに割り当てられ、ホスト計算機10のアクセス対象である仮想ボリュームが物理デバイスとして使用可能となる。
図19では、容量仮想化プールは階層化管理がされていないので、階層番号35235は空白となる。
コマンド制御プログラム3501は、ホスト計算機10からライト要求を受けた仮想ボリュームのアドレスに基づいてVVOL‐DIRテーブルを辿り、VVOL−DIR3523のエントリにPSCBが割り当たっているか否かをチェックする。
PSCBが割り当たっている場合には、コマンド制御プログラム3501は、既に存在するPSCBにライトデータを上書きする。
PSCBが割り当たっていない場合には、フリーキューに接続するPSCBを選択して、これをVVOL−DIR3523のエントリ35232に割当てる。
ページ単位の情報として、さらに、ページの状態の検証から得られた情報がある。例えば、ページへのアクセス頻度に対する定期的なモニタの結果得られた情報である。
また、プールボリュームに格納されたデータには、容量仮想化プールのページごとに情報を付して、どの仮想ボリュームのどのアドレスにデータが割当てられているかを検索できる情報が含まれてもよい。
ストレージ装置30は、システム容量プール44をページ単位で管理する必要がない。システム容量プール44から容量仮想化プール42へのプールボリュームの追加の処理の際に、PSCBに基づく管理形態を採用する。
なお、ストレージ装置30は、システム容量プールから容量仮想化プールへ追加するプールボリュームをフリーキューに接続して管理することもよい。
図20は、容量仮想化プール42に、階層が設定された場合のブロック図を示している。
ストレージ装置30は、階層ごとでフリーPSCBを管理する。階層として、Tier0とTier1を例示した。仮想化容量プールも同じ階層毎に管理されている。
1つの第2種LDEV35231に複数の階層(Tier,Tier1)からページ単位で領域が割り当てられている。ストレージ装置30は、ページ単位の情報をPSCB単位の情報として管理する。階層番号35235は、PSCBが属する階層の番号である。
コマンド制御プログラム3501は、VVOL−DIR3523のエントリにPSCBが割り当たっていない場合には、目的の階層の番号に割当てられたフリーキューに接続するPSCBを選択して、これをVVOL−DIR3523のエントリ35232に割当てる。
仮想ボリュームにどのTierからのページから割当てるかについて、例えば、レスポンスが速いと期待される高性能なTierから、まず、最初にページが割り当てられる方法がある。
仮想ボリューム毎に、初期に割り当てるTier番号を、ホスト計算機又はストレージ装置が設定してもよい。
容量仮想化プールに対して、仮想ボリュームに、高性能なTierから、又は、低性能なTierから、ページを割当てるように設定してもよい。ストレージ装置は、ホスト計算機からのIO負荷をモニタリングして適切なTierへデータを再配置してもよい。
容量仮想化プールが複数存在する場合、全ての容量仮想化プールが階層化されていても、一部の容量仮想化プールが階層化され、残りが階層化されていなくてもよい。なお、階層化されていないプールとは、通常、単一Tierのプールボリュームから構成されている。
システム容量プールからプールボリュームが追加される対象としてシン・プロビジョニング用のプール「容量仮想化プール」について説明したが、これに代わるものとして、先に略説したように、スナップショットボリュームを有するスナップショットプール、リモートコピーのジャーナルボリュームを有するジャーナルプールがある。
スナップショットプールにおける閾値には、スナップショットに利用されていないスナップショットボリュームの総数、又は、未利用の総容量がある。スナップショットでは、バックアップ量が多くなると、容量が足りなくなるため、ストレージ装置はシステム容量プールからスナップショットプールにスナップショットボリュームを追加する。
一方、バックアップ容量が少ない場合は、スナップショットプールの容量が過大であるため、ストレージ装置は、スナップショットプール(容量仮想化プールに対応)からシステム容量プールへスナップショットボリュームを戻す処理を実行する。
ジャーナルプールにおける閾値にはリモートコピーの帯域がある。リモートコピーにおける、コピー元ボリュームとコピー先ボリュームとの間の転送帯域が狭くなった場合、ストレージ装置は、システム容量プールからジャーナルプールにジャーナルボリュームを追加して帯域を確保する。
また、ストレージ装置は、帯域が広く、リモートコピーの能力に余裕が出ている場合には、帯域を狭くして、コストダウンを図るために、ジャーナルボリュームを、ジャーナルプール(容量仮想化プールに対応)からシステム容量プールに戻す。
ストレージ装置は、第1種LDEVをシステム容量プール44に設定すると、LDEV管理テーブル(図12)のプールID351301にシステム容量プールのIDを登録する。
ストレージ装置は、システム容量プール44からプールボリュームを容量仮想化プール42に追加するとLDEV管理テーブル(図12)のプールID351301に目的の容量仮想化プールのIDを登録する。
ストレージ装置は、容量仮想化プールに追加すべき容量を、容量仮想化プールでの容量の消費動向から決定したり、或いは、システム容量プールから容量仮想化プールへのプールボリュームの過去の追加の傾向から決定する。
容量仮想化プールへ追加するプールボリュームの数は、想定追加容量をプールボリュームの基準容量で除算することによって算出される。
次に、容量仮想化プールの容量拡張動作について説明する。これは、自動容量拡張縮小プログラム3509によって実行される。同プログラムは、仮想ボリュームに対するページの割当て処理の過程、ストレージ装置内のコピー機能、例えば、ミラーリング、差分スナップショットにおいて、副ボリュームへの書き込み処理に対応したページ割当て処理の過程、そして、周期的なシステム監視処理の過程において、呼び出される。
コマンド処理プログラム3501が仮想ボリュームにライト処理を実行した際に、自動容量拡張縮小プログラムによってなされる、容量仮想化プールの容量拡張処理の詳細を図21に示すフローチャートに基づいて説明する。このフローチャートは容量仮想化プールの容量変更のために、二つの閾値を用いる。
第1の閾値は上限値であって、同プールの使用容量がこの閾値を超えると、自動容量拡張/縮小プログラム3509は、容量仮想化プール42の容量を拡張する。
第2の閾値は参照値であって、使用量がこの閾値を越えると、プログラムは、容量仮想化プールの監視のために使用容量の監視記録を開始する。なお、第1の閾値及び第2の閾値は、容量仮想化プールの全体容量に対する相対比であり、使用容量もプールの全体容量に対する相対比である。
S24001において、自動容量拡張/縮小プログラム3509は、容量仮想化プールの使用容量と第1の閾値とを比較する。この比較の結果、前者が後者以上であると判定すると、容量仮想化プールの有効実容量が不足していると判断して、システム容量プール44から容量仮想化プール42に追加される容量を決定する(S24009)。
次いで、S24003において、全容量仮想化プールの使用容量の合計が、第1の閾値と比較される。このステップにおける、第1の閾値は、S24001の第1の閾値と同じ値であっても無くてもよいが、S24003における第1の閾値は、全容量仮想化プールの合計容量に対する合計使用量の上限の割合である。
この判断の結果、合計使用量が閾値未満である場合、S24004は、ストレージ装置に存在する複数の容量仮想化プールにおいて、容量に余裕があるとして、他の容量仮想化プールから、ホスト装置からのライト処理が適用される容量仮想化プールへ、プールボリュームを追加する。
一方、S24003の判定で、合計使用量が閾値以上である場合には、プログラム3509は、容量仮想化プールの容量が不足しており、システム容量プール44から容量仮想化プール42へプールボリュームを補う必要があるとして、S24010においてシステム容量プールに、容量仮想化プールに追加可能なプールボリュームが存在するか否かを判定する。この判定を否定する場合には、ユーザに容量仮想化プールの容量を拡張できないこと、即ち、ユーザや管理者にメディアをストレージ装置に増設することを求める(S24011)。
一方、自動容量拡張縮小プログラム3509が、S24010の判定を肯定すると、ライト処理対象となった容量仮想化プールにシステム容量プールからプールボリュームを追加する(S24005)。
S24001において、プログラム3509が、容量仮想化プールの使用容量が第1の閾値未満であると判定すると、使用容量と第2の閾値とを比較する(S24002)。前者が後者以下である場合に、容量仮想化プールに容量の不足はないとして処理を終了する。但し、この場合、容量仮想化プールに容量の過剰があるため、プールボリュームが容量仮想化プールから削減される。
前者が後者より大きいと、今回のライト処理によってこのことが初めて生じた否かを判定する(S24007)。プログラムがこの判定を肯定すると、容量仮想化プールの容量不足に備えるため、ライト対象となった容量仮想化プールに対する監視処理を開始する(S24008)。
監視処理とは、容量仮想化プールの容量と、容量をチェックした日時の記憶である。監視プログラムが定期的に容量仮想化プールの監視処理を継続する。なお、S24003はシステム容量プールの容量に余裕があるか否かの判定に変更されてもよい。
次に、図22は、自動容量拡張/縮小プログラム3509が定期的に実行する、容量仮想化プールの自動容量拡張処理のフローチャートである。
S24210は、容量仮想化プールの使用容量とその容量が判定された日時の記録をメモリの処理領域から読み出す。
S24220は、容量仮想化プールの過去の容量消費速度などの運用傾向などに基づいて、有効実容量が不足する日時を算出する。容量の消費速度は、定期チェックのタイミングで取得した、容量仮想化プールの容量(使用済み容量、又は、空き容量)を比較することによって算出可能である。
S24230は、次回の容量仮想化プールの容量チェックの予定日時と算出された日時を比較し、予定日時が算出された日時以前である場合、フローチャートを終了する。予定日時が算出された日時以降である場合には、S24240は、システム容量プールに十分なプールボリュームがあるか否かを判定する。
否定判定がなされると、S24260は、容量仮想化プールの容量拡張が不可であると判定し、フローチャートを終了する。肯定判定がなされると、S24250は、容量拡張処理を実行する。
なお、システム容量プールの容量が不足している場合、ストレージ装置がシステム容量プールに存在する容量分を容量仮想化プールに追加し、管理装置20は、容量が枯渇したシステム容量プールのID、容量が枯渇したシステム容量プールを有するストレージ装置の識別情報をユーザ、管理者に報知するようにしてもよい。
図23は、容量仮想化プールの自動容量拡張処理の他のフローチャートである。コマンド制御プログラム3501は、管理者側装置から仮想ボリューム作成コマンドを受けると、プール制御プログラム3507を呼び出す。
プール制御プログラム3507は、管理者から指定されたIDが付与された容量仮想化プールにオーバプロビジョニング閾値(図15の35217)が設定されているか否かをチェックする(S24310)。
プール制御プログラム3507が、閾値が設定されていないと判定すると、プール制御プログラム3507は、管理者から作成が指示された仮想ボリュームを、管理者が指示したIDが与えられた容量仮想化プールに定義するために、容量仮想化プールの管理情報(図15)に定義された仮想化ボリュームの情報を、作成対象の仮想ボリュームに対して設定する。
さらに、構成制御プログラム3503を呼び出すと、構成制御プログラムは、アドレス管理テーブル3511の各マッピング情報に、作成した仮想ボリュームの情報を設定する。すなわち、S24310Aは、仮想ボリュームの定義、設定処理を行う。
次いで、S24310Bは、容量仮想化プールの管理情報(図15)を更新し、S24310Cは、管理者に仮想ボリュームの作成を完了した通知を行う。
プール制御プログラム3507が、オーバプロビジョニング閾値が設定されていると判定すると、ストレージ装置に実装済みの仮想化ボリュームと管理者からの要求によって作成される仮想ボリュームとの合計の使用総容量を算出し(S24320)、次いで、当該総仮想容量と、容量仮想化プールの実容量とオーバプロビジョニング閾値との乗算値とを比較し、前者が後者を超過しているか否かをチェックする(S24330)。
プール制御プログラム3507が、前者が後者を超過していないと判定すると、S24320A〜S24320Cを実行する。
一方、プール制御プログラム3507が、超過していると判定すると、超過分を、プールボリュームを容量仮想化プールに追加することによって、補うか否かを判定するために、管理サーバ20等から優先度情報がストレージ装置に送信されている否かをチェックし、さらに、この優先度情報が「高」であるか否かをチェックする(S24340)。
優先度が「高」である場合、プール制御プログラム3507が自動容量拡張/縮小プログラム3509を呼び出して、これに、S24350以降での容量仮想化プールの自動拡張処理を実行させる。
S24350は、容量仮想化プールにおいて不足する実容量分を算出或いは予測し(S24350)、次いで、S24360は、システム容量プールに設けられた閾値を参照するなどして、システム容量プールの空き容量にこの実容量分を賄うに足る実容量があるか否かを判定する。
どの程度容量仮想化プールを拡張するかの設計例として、予め値を決めて、仮想ボリュームの仮想容量の合計が容量プールの実容量の90%以下になるように、容量仮想化プールへプールボリュームを増設する、ことがある。
S24360がこれを否定判定すると、S24360Aは、仮想ボリュームの作成が不可能であることを仮想ボリューム作成依頼元に警告或いは通知する。
なお、ストレージ装置が仮想ボリュームの作成が不可能であることの通知を発する形態に代えて、容量に余裕のある容量仮想化プールから容量を回収し、或いは、ストレージ装置30に外接するストレージを検索し、その容量を使って、容量仮想化プールの容量拡張処理を自動継続するようにしてもよい。このことは、図23に示すフローチャートに係る処理ばかりでなく、他のフローチャートに係る処理にも適用可能である。
S24360が肯定判定をすると、S24370は、システム容量プールから対象容量仮想化プールにプールボリュームを追加し、S24380、S24390、S24400は、仮想ボリュームの作成処理を行う。
一方、S24340が、優先度を「高」でないと判定すると、S24340Aは、オーバプロビジョニング違反として、仮想ボリュームの作成ができないことを管理ユーザに通知する。
図24は容量仮想化プールの容量自動縮小処理について説明するフローチャートである。容量仮想化プールの容量自動拡張処理及び容量自動縮小処理の適用について、容量仮想化プールに対するIO頻度、IO負荷が閾値として採用されてもよい。S24500の閾値3は、容量仮想化プールに対するIO負荷に基づく制限値である。
コマンド制御プログラム3501は、容量仮想化プールに対するIO負荷と閾値3とを比較し(S24500)、前者が後者以上であれば、容量仮想化プール42の容量を縮小すべきではないとして処理を終了する。
一方、前者が後者を下回っている場合には、容量を縮小する余地があるとして、自動容量拡張/縮小プログラム3509を呼び出す。
S24502は、容量仮想化プールの使用済み容量と閾値2とを比較する。閾値2は容量仮想化プールの使用済み容量の下限を規定するものであり、容量仮想化プールの使用済み容量がこの閾値以上である場合には、容量仮想化プールの容量に過剰はなくその容量を縮小する余地はないとして、S24502は、フローチャートを終了する。
S24502が肯定判定を行うと、S24504は容量仮想化プールのプールボリュームを削除して、システム容量プールに削除したボリュームを追加する。なお、図24のフローチャートを実行する契機は、図21乃至図23の少なくとも一つの契機と同じである。
図25は容量仮想化プールの自動拡張処理の他の例に係るフローチャートである。このフローチャートは図21の変形例であって、容量仮想化プールが階層化されており、自動容量の拡張処理が容量仮想化プールの階層毎に実行される点が異なる。
このフローチャートにおいて、図21に示された各処理に対応する部分に、同一の符号を付している。図25の符号S24001とS24002の処理においては、階層毎に閾値が検討される。図25のフローチャートには、図21のS24003とS24004に相当する処理は含まれていない。
図26は、システム容量プールに対するプールボリュームの自動追加/自動削除のフローチャートである。自動容量拡張/変更プログラム309は、システム容量プールの現存容量(複数の未使用プールボリュームの合計容量)と下限閾値(閾値1)と比較する(S26001)。前者が後者以上と判定すると、システム容量プールの容量と上限の閾値(閾値2)とを比較する(S26005)。前者が上限閾値以下であると判定すると、システム容量プールの容量には不足も過剰もないとしてフローチャートを終了する。
S26005が、システム容量プールの容量が閾値2を上回っていると判定すると、S26006は、システム容量プールの容量に過剰があるとして、システム容量プールから未使用のプールボリュームを削除する。
このように、システム容量プールの容量を縮小する場合には、記憶ドライブを減設することが基本となる。自動容量拡張/変更プログラム309は、撤去するHDDディスクを決定し、ストレージ装置側でシステム容量プールの容量を自動減少させるのか、管理ユーザによる手動減少に委ねるのかを、事前の設定或いは管理ユーザからの入力情報に基づいて決定する。
前者が選択された場合には、自動容量拡張/変更プログラム309は、撤去すべきHDDに作成されたプールボリュームを管理テーブルから削除する。次いで、管理ユーザへ撤去すべきHDD情報を通知する。この通知を受けたユーザはHDDを撤去する。
一方、後者が選択された場合には、ユーザは、プールボリュームを管理テーブルから削除する処理を行い、その後、撤去すべきHDDを認知して、その撤去を実行する。
自動容量拡張/変更プログラム309が、S26001について、システム容量プールの容量が閾値1未満であると判定すると、システム容量プールの容量が不足しているため、システム容量プールにプールボリュームをPDEVから追加する。
自動容量拡張/変更プログラム3509は、システム容量プールの容量の不足を検出すると、ユーザ又は管理者にメディアの増設要求を送信する。ユーザ又は管理者は、PDEVからVDEV及びLDEVを設定し、LDEVをプールボリュームとしてシステム容量プールに設定する。
次いで、S26003は、システム容量プール管理テーブル(図18)を参照して、システム容量プールに追加されるプールボリュームが、システム容量プールに存在する階層に分類されるメディアからのものかを判定し、この判定を肯定するとフローチャートを終了する。
一方、S26002が前記判定を否定すると、新たなメディアと既存の階層に分類されたメディアとについて階層の見直し行い、見直した階層をシステム容量プールテーブル(図18)に追加して、フローチャートを収容する。
図26で説明した処理は、定期的なタイミングで実行される。その他、容量仮想化プールの自動容量拡張/縮小が発生した際に実行されてもよい。システム容量プールに階層の設定が無い場合には、S26003,26004は省略される。
図27は複数の容量仮想化プール間での自動容量変更処理を達成するフローチャートである。容量仮想化プールAはプールボリュームの移行先であり、容量仮想化プールBはプールボリュームの移行元である。
このフローチャートは自動容量拡張/縮小プログラム3509によって実行される。S33001は、容量仮想化プールAと容量仮想化プールBとの優先度を比較し、容量仮想化プールAが容量仮想化プールBより優先度高いか否かを判定する。
S33001がこの判定を否定すると、S33008は、他の容量仮想化プールBの存在の有無を選択し、他の容量仮想化プールBがストレージ装置に存在しないと判定すると、フローチャートを終了する。
一方、これを否定判定すると、次のステップに移動して、S33009は次の容量仮想化プールBを選択して、S33001にリターンする。
S33001が肯定判定を行うと、S33002は容量仮想化プールAの使用済み容量と閾値(上限)とを比較する。S33002がこの判定を否定すると、S33008に移動する。一方、S33002が肯定判定を実施すると、S33003は、容量仮想化プールBの使用済み容量と閾値(下限)とを比較し、これを否定判定するとS33008に移動する。
S33003が肯定判定を実施することは、容量仮想化プールAの有効実容量が不足し、容量仮想化プールBの有効実容量に余裕があるということであるため、容量仮想化プールBから容量仮想化プールAにプールボリュームが追加できるということである。そこで、S33004は、容量仮想化プールBから削除して、システム容量プールに回収すべきプールボリュームを選択する。
構造制御プログラム3503は、容量仮想化プールBのテーブル(図15)にプールボリュームを削除する更新を適用し、次いで、システム容量プールテーブル(図18)に容量仮想化プールBからのプールボリュームを追加する更新を適用する。
次いで、自動容量拡張/縮小プログラム3509は、システム容量プールのテーブルを参照して、容量仮想化プールAに追加するプールボリュームをシステム容量プールから選択する(S33006)。次いで、S33007は、システム容量プールテーブルと容量仮想化プールAのテーブルを更新してフローチャートの処理を終了する。
図28のフローチャートは図27の変形例であり、容量仮想化プールが階層化されており、プールボリュームの追加、削除は同じ階層同士の間で行われる。S33003A(図27のS33003)のみが図27のフローチャートと異なる。
図28のフローチャートのステップのうち、図27のフローチャートのステップに対応するステップに同一の符号を付す。
容量仮想化プールBから容量仮想化プールAに追加すべきプールボリュームは両方のプールで同じ階層から選択される。したがって、容量仮想化プールBの使用容量が閾値(下限値)より低く、容量仮想化プールBの容量に余裕があるか否かの判断(S33003A)は、S33002において、容量仮想化プールAの有効実容量が不足していると判定された階層に対して行われる。
コマンド制御プログラム3501が、容量仮想化プールのプールボリュームのページを仮想ボリュームのアクセス領域に割当てる際、どの階層のプールボリュームを選択するかという処理について説明する。
仮想ボリュームに対する、単位時間当たりのIO数(IO頻度)に応じて階層が定まる。すなわち、IO頻度が大きいほど上位の階層のプールボリュームが選択される。削除するプールボリュームを選択する際(図24:S24504、図26:S26006、図28:S33004)での選択基準の例には、データ割り当て(使用量)が少ないプールボリュームであることや、モジュールにまたがっていないプールボリュームであることがある。
前者は、データ移動負荷が少なくて済み、後者は、図3において既述したように、システムの負荷を低減するためである。 同様に、容量仮想化プールへ追加するプールボリュームをシステム容量プールから選択する選択基準も、モジュールまたがらないようにすることが好ましい。
図29Aには、上位から順にSSD、SAS、SATAの各階層が容量仮想化プール42に設定されていることを示している。そして、図29Aには、各階層が、どの程度の単位時間当たりのIO数(IO頻度)の範囲をカバーしデータ格納を行うかが示されている。
図29Aでは、SSDの階層において、使用済み容量が閾値(1)に接近しており、SSDの階層がひっ迫傾向にあることを示している。これは、ホスト計算機10からのIO頻度が高い傾向にあるためである。
この場合、SSDの階層の使用済み容量が閾値(1)を超えやすくなり、その際、自動容量拡張/縮小プログラム3509は、システム容量プールのSSDの階層から、プールボリュームを容量仮想化プールのSSDの階層に追加することになるが、これではビットコストが高いSSDの消費に繋がる。
そこで、管理者は、図29Bに示すように、SASが対応するIO頻度のレンジを拡大し、一方、SSDに割当てられるIO頻度のレンジを縮小して、SSDの階層における容量の消費傾向を縮小し,SASの階層における容量の消費傾向を拡大するようにした。この結果、高ビットコストのメディアの容量消費を抑制することができる。
次に、図37のブロック図を利用して、ユーザ・管理者が計算機システムにシン・プロビジョニング機能(HDP機能)3900を設定する際の処理について説明する。
ユーザ・管理者が、容量仮想化プールを計算機システムに作成又は設定する際、階層管理を容量仮想化プールに適用する第1機能を容量仮想化プールに適用することのオン・オフを設定することが可能である。
ユーザ・管理者が、容量仮想化プールを設定する入力の際に、当該オンの入力を行うと(S1000)、階層化管理機能が付加された容量仮想化プール3902が作成される。容量仮想化プール3904の運用を開始した後、あるいはその作成後でもこの入力は可能である。このオンの入力の形態には、個別の容量仮想化プールに対するもの(S1002)、全ての容量仮想化プール、すなわち、システム全体に対するもの(S1004)がある。
前者の入力によって、ストレージ装置30は、階層管理が適用されない容量仮想化プールを階層化管理が適用されない容量仮想化プールに変更し、その結果両方のタイプの容量仮想化プール群3904が設定又は作成され、後者の入力によって、システムに存在する、複数の容量仮想化プールがそれぞれ階層管理型容量仮想化プール(S3906)に変更される。
そして、ユーザ・管理者は、ストレージ装置が自動的に容量仮想化プールの容量を拡張又は縮小する第2機能のオン・オフを設定することができる。
容量仮想化プールの設定時、ユーザ等が、少なくとも一つの容量仮想化プールに対する第1機能のオンに続いて第2機能をオンすると、階層管理が適用されるシステム容量プールが作成、設定される(S1006→3908、S1008→3910)。
全ての容量仮想化プールに対して第1機能がオフである場合、続いて、第2機能をオンすると階層化管理が適用されないシステム容量プールが設定される(S1010→3912)。
ユーザが、容量仮想化プールとシステム容量プールの設定後に、少なくとも一つの容量仮想化プールについて第1機能をオンすると、ストレージ装置は、システム容量プールが階層管理状態にない時にはこれを階層化管理状態に変換する。
ストレージ装置に階層管理型容量仮想化プールと非階層型容量仮想化プールとが混在する 形態に対して、第2機能がオンされると、ストレージ装置は、階層管理型システム容量プールを作成する際、非階層型容量仮想化プールを自動的に階層型容量仮想化プール3914へ変換する。
なお、階層型容量仮想化プールへ変換は、システム容量プールが複数あり、非階層型容量仮想化プールと階層型容量仮想化プールで、対応するシステム容量プールが区別されていれば、不要である。
非階層型容量仮想化プールと階層型容量仮想化プールが同じシステム容量プールを共用する場合、容量仮想化プールでも階層の管理が必要である。
図30は、シン・プロビジョニングのシステムの構成と入力手段300との関係を示すブロック図である。
入力手段は、ホスト計算機10、管理サーバ、又は、保守管理端末153によって構成される。
システム容量プール44と、容量仮想化プール42A、又は容量仮想化プール42Bと、の間の破線は、同一階層同士の対応関係を示している。そして、容量仮想化プール42A,42Bと仮想ボリューム411,412との間の破線は、仮想ボリュームが使用する階層と容量仮想化プールの階層との対応関係を示している。
そして、符号1610は入力手段による仮想ボリュームをストレージ装置に設定する入力を示し、符号1611は容量仮想化プールの設定のための入力を示し、符号1612はシステム容量プールの設定のための入力を示す。
図31は、仮想ボリュームの作成の手順を示すフローチャートである。このフローチャートは、図30の符号1610の入力情報がストレージ装置に送信されることによって、ストレージ装置の構成制御プログラム3501によって実行される。
この入力情報には、仮想ボリュームの番号、仮想ボリュームに使用される容量仮想化プールのプール番号、仮想ボリュームに使用されるメディアの種類、プール容量の自動拡張・縮小の可否、仮想ボリュームの仮想容量がある。
入力はGUIを介して実行される。さらに、ターゲットポート、LUN、ホストモード、LUNセキュリティも必要に応じて入力可能情報に含まれる。
メディアの種類は、ユーザが性能要件やコスト要件を指定することによって設定可能である。性能要件やコスト要件入力がホスト計算機10等になされると、ホスト計算機10のプログラムが、入力情報からレスポンス性能(ms)、スループット(IOPS,MBPS)やビットコストを算出して、ストレージ制御処理に最適なメディアの種類を判定する。
また、ユーザはサービスレベルを指定することによってメディアの種類を決定することができる。例えば、「レスポンス性能重視」を選択すると、GUIのプログラムは、仮想ボリュームが利用すべきメディアとしてSSD又はSASが最適であると判定する。
ホスト計算機などは、ユーザ毎に、仮想ボリュームにプールを新たに作成して割り当てることの権能の有無を判定する。例えば、特定ユーザには仮想ボリュームに既存のプールの他、新規プールを割当てることができる。また、ある特定ユーザは、容量仮想化プールに階層を設定することができる。
図31のフローチャートにおいて、構成制御プログラム3503が、ホスト計算機などから仮想ボリューム作成コマンドを受信すると、仮想ボリュームの定義及び設定処理を開始する(S16100)。
構成制御プログラム3503は、仮想ボリューム作成コマンド1610で指定された容量仮想化プールのIDが、メモリ350内の容量仮想化プール管理テーブル(図15)に存在するか否かを判定する(S16110)。
これを肯定判定すると、容量仮想化プールの容量が不足しているか否かを判定する(S16190)。この判定は、容量仮想化プールの未利用容量或いは使用済み容量と容量仮想化プールに設定された閾値とに基づいて実行される。
容量仮想化プールの容量が不足していない場合、構成制御プログラムは、仮想ボリュームとコマンドで選択された容量仮想化プールプールとを関連付けて仮想ボリュームの作成処理を終了する(S16260)。
なお、仮想ボリューム作成コマンド1610に「使用するメディアの種別」の指定が含まれている場合、構成制御プログラム3503は、S16260の前に、指定されたメディアがストレージ装置30に存在するか否かの判断を行い、この判断を肯定するとS16260へ進み、否定すると、ユーザに仮想ボリュームの作成が失敗した旨の通知を行う。このことは後述のフローチャートに係る処理でも同様である。
この際、自動容量拡張縮小機能がオンされていれば、仮想ボリューム用プールは容量仮想化プールとして設定され、同機能がオンされていないと仮想ボリューム用プールは従前のプールとして設定される。
仮想ボリュームと仮想ボリューム用プールとの対応関係は、管理テーブルに登録されることによって達成される。
一方、構成制御プログラム3503が、容量仮想化プールの未利用容量を不足していると判定すると(S16190)、容量仮想化プールに自動拡張機能縮小機能がオンされているか否かをチェックし(S16120)、これにオンが設定されていないと、ストレージ装置は、仮想ボリューム用プールにプールボリュームを補うことができず、その結果、仮想ボリューム用プールの容量が不足する可能性が高いと判定し、次いで、ユーザに仮想ボリュームの作成不可、プールの新規作成不可を通知する(S16240)。
S16200がオンの設定を判定すると、S16210は、S16100によって指定されたメディアに基づくプールボリュームがシステム容量プール内に存在するか否かを判定する。
S16210が肯定を判定すると、S16220は、システム容量プールから容量仮想化プールにプールボリュームを追加して、追加したボリュームを容量仮想化プール管理テーブル(図15)に登録する。次いで、S16230は、仮想ボリュームと容量仮想化プールとを対応付けて仮想ボリューム作成処理を終了する。
S16210が否定を判定すると、S16240は、S16100で指定されたメディアがストレージシステムに内に存在せず、したがって、仮想ボリュームの作成ができないことをユーザに通知する。
S16110が、指定のプールがストレージ装置に存在しないと判定すると、S16120は、仮想ボリューム用プールの容量の自動拡張・縮小機能のオン・オフをチェックする。構成制御プログラム3503は、階層化管理機能及び自動容量変更機能のオン・オフを専用フラグによって管理する。
自動容量変更機能がオフの場合には、S16180はS16250と同様に処理を終了する。一方、当該機能のオンが判定されると、S16130は、S16100によって、指定されたメディアに基づくプールボリュームがシステム容量プールに存在するか否かを判定し(S16130)、これを否定判定するとS16240と同様にして処理を終了する。
S16130が肯定を判定すると、自動容量拡張・縮小機能が設定された新規な容量仮想化プールを設定する(S16140)。さらに、構成制御プログラムは、システム容量プールから容量仮想化プールにプールボリュームを追加する(S16150)。システム容量プールから容量仮想化プールに追加されるプールボリュームは、複数のプールボリュームの中から優先度に応じて順次決定される。
次いで、構成制御プログラムは仮想ボリュームと新規容量仮想化プールとを対応させて(S16160)、仮想ボリュームの作成処理を終了する。
図32に、仮想ボリューム作成処理の第2の例に係るフローチャートを示す。図31のフローチャートと異なる点は、ユーザが仮想ボリュームに階層を設定することができる点である。既述のS016110の判定が「ない」の場合は、図31と同じ処理が実行される。この判定が「ある」の場合が、図32に示すとおりであり、図31のものとは異なる。
S16100において指定されたプールに仮想ボリュームに必要な階層があるか否かを構成制御プログラム3503が判定する(S16300)。この判定を「ある」と判定した場合の処理は、既述のS16190以降のものと同じである。
S16300が「ない」と判定すると、S16310は、自動容量拡張・縮小機能のオン・オフを判定する。これを「オフ」と判定すると、S16360は、仮想ボリューム用プールの作成不可、仮想ボリューム作成不可をユーザに通知して処理を終了する。
S16310が「オン」と判定すると、S16320は、S16100において指定されたメディアを起源とするプールボリュームがシステム容量プールに存在するか否かを判定し、これを否定判定すると、S16350は、指定されたメディアを仮想ボリュームに対応させることができないとユーザに通知して処理を終了する。
一方、S16320が肯定の判定を行うと、S16330は、容量仮想化プールに新たに階層を設定し、S16340はシステム容量プールの階層から容量仮想化プールの新規階層へプールボリュームを追加してS16300にリターンする。構成制御プログラム3503は、容量仮想化プールに不足する階層がなくなるまで、S16300以降の処理を継続する。
図33は、仮想ボリュームの生成処理の第3の例に係るフローチャートである。このフローチャートの特徴は、仮想ボリューム用プールとして既存のものを利用するか新規に設定するかの選択をユーザ等に可能にさせる点である。
なお、新規に容量仮想化プールを作成することをユーザ等が選択する場合、ユーザ等は、容量仮想化プールのプールID、容量やメディアの種類の設定、閾値等の設定を新規容量仮想化プールに対して実行することになる。
構成制御プログラム3503は、S16100において指定したメディアの階層を有する容量仮想化プールが既に存在するか否かを判定する(S16130)。S16130がこの判定を否定すると、S16170は既存の容量仮想化プールを使用するか否かを判定する。S16170がユーザからの入力に基づいて、仮想ボリュームに対するアクセス処理に、既存の容量仮想化プールを使用すると判定すると、S16200は、既存の複数の容量仮想化プールから目的の容量仮想化プールを選択する。
S16210は、システム容量プールから、S16100において指定したメディアからなる階層のプールボリュームを選択して、これをS16200にて選択した容量仮想化プールへ追加する。追加される容量、プールボリューム数は、予め決められている。
次いで、S16160は、仮想ボリュームと選択した容量仮想化プールとの対応関係をボリューム及びプールの管理テーブルに登録して、処理を終了する。
一方、S16170が、既存の容量仮想化プールを使用しないと判定すると、S16180は新規な容量仮想化プールを管理テーブルに設定し、S16210の処理に移行する。
S16130が「肯定」を判定すると、既存の容量仮想化プールを利用するか否かを選択し、S16140が否定を選択するとS16180に移行する。肯定を選択すると、S16150は、S16100において指定したメディアからなる階層を持った容量仮想化プールを既存の容量仮想化プールから選択し、S16160に移行して処理を終了する。
次に、容量仮想化プールの新規作成処理を図34A−図34Dのフローチャートに基づいて説明する。先ず、管理者は、管理サーバ20に容量仮想化プールの識別子であるプールID、閾値、用途、第1種LDEVの数、及び、各LDEVの番号を、GUIを介して指定する(S41110)。
管理サーバ20の管理プログラムは、入力情報を含んだ容量仮想化プールの作成コマンドを生成し、当該コマンドをストレージ装置30に送信する。ストレージ装置のコマンド制御プログラム3501が前記作成コマンド受領する(S41130)。
コマンド制御プログラム3501は、受信したコマンドの内容を確認し、コマンドの内容が無効であるようなものであれば、このコマンドの受信を拒否する(S41140)。さらに、コマンド制御プログラムは、受信したコマンドが容量仮想化プールの設定処理のためのものであると判定すると、プール制御プログラム3507に受信したコマンドを渡す。プール制御プログラム3507は受け取ったコマンドに基づいて、容量仮想化プールの設定・作成処理を実行する(S41150)。
続いて、プール制御プログラム3507は、図34Bのフローチャートに移行する。プール制御プログラム3507は、指示コマンドに含まれるプールIDが有効であるか、かつ、これが未定義であるかを確認する(S41180)。
次に、プール制御プログラム3507は、容量仮想化プール管理情報3521(図15)から、コマンドによって指示された容量仮想化プールIDのプール固有情報を取得し、プールの状態をプール未定義からプール定義中に設定する(S41190)。
次に、プール制御プログラム3507は、コマンドで指示されたLDEV番号が使用可能であるか否かを確認する(S41210)。具体的には、指示コマンドに係るLDEV番号が閉塞している又はフォーマット中である場合は、当該LDEVは使用不可であるため、コマンドを許否する(S41210)。
コマンドで指示されたLDEVが既に使用中である場合、例えば、LDEVがパス定義済みである場合、コピー機能等によって使用中である場合又はコピー先として予約中に設定されている場合では、LDEVの使用は不可であるためプール制御プログラム3507はコマンドを拒否する(S41220)。
次に、プール制御プログラム3507は、コマンドに指定された情報に基づいて、プール固有情報(図15の管理テーブル)に、容量、空き容量、閾値、プール−ボリューム数を設定する(S41230)。
次に、プール制御プログラム3507は、コマンドで指示されたプールに階層管理機能(図37:(Tier管理機能))がオンされているか否かを判定する(S41240)。この判定が肯定されると、プール制御プログラム3507は、コマンドで指示されたLDEV(プールボリューム)の数分、S41260−S41320の処理がループされたか否かを判定する(S41250)。
この判定を否定すると、プール制御プログラム3507は、コマンドで指定された複数のLDEVの中から一つのLDEVを選択し、選択したLDEVをプールボリュームデバイス番号リスト(図15:35220)へ登録する(S41260)。
次いで、プール制御プログラム3507は、プールボリュームに対応する階層情報エリアに管理情報を、コマンドで指示されたプールに設定したか否かを判定する(S41270)。
この判定が否定されると、プール制御プログラム3507は、容量仮想化プールの階層を管理する管理情報のテーブル35271を作成し、これを容量仮想化プール管理テーブルの階層リスト(35223)に登録する(S41280)。
次いで、プール制御プログラム3507は、階層管理テーブル35271(図17)にアクセスして、そのプールボリュームリスト35283にLDEV番号IDを登録する(S41290)。
次いで、プール制御プログラム3507は、容量仮想化プールに設定した第1種LDEVにPSCBを割当てる(S41300)。そして、PSCBを階層毎のフリーキューに接続する(S41310)。
以上によって、プール制御プログラム3507が第1種LEDVを容量仮想化プールに設定すると、構成制御プログラム3503は、LDEV管理情報3512を設定する。具体的には、コマンドで指定されたLDEV番号のLDEV管理情報3512(図12)のデバイス属性35128に容量仮想化プールであることを示す識別子(プールボリューム属性)を設定し、プールIDにプールボリュームが所属するプールIDを登録する(S41320)。
次いで、構成制御プログラム3503はプール制御プログラム3507に制御権を渡し、プール制御プログラム3507はS41250にリターンして全てのLDEVに対する処理が終了したと判定すると、構成制御プログラム3503に制御権を渡す。構成制御プログラム3503は、図34Cに示すように、プール管理情報3512のプール−IDの状態を「プール定義中」から「プール有効」に設定する(S41340)。
そして、図34Dに示すように、コマンド制御プログラム3501は、管理サーバ20に、コマンドが成功した旨の応答を送信する(S41160)。そして、管理サーバ20の管理プログラムは、ストレージ装置からの応答を受信すると(S41170)、一連の処理を終了する。
図34BのS41240において、階層管理機能がオフと判定されると、プール制御プログラム3507は、S41270−41290の処理を省略し、S41250、S41260,S41300,S41310,S41320を実施する。但し、Tier管理情報は存在しないために、S41310において、フリーPSCBキューはTier毎に存在しない。
容量仮想化プールの生成時に、図34A乃至図34Dのフローチャートは、PDEVからLDEVを容量仮想化プールに設定することとしたが、システム容量プール44のプールボリュームを容量仮想化プール42に割当てるようにしてもよいし、その両方でもよい。
また、図34A乃至図34Dは管理サーバ20からのユーザ指示に基づいてプールを生成することを説明したが、管理サーバに代えてホスト計算機又は保守端末からのユーザ指示に基づいて容量仮想化プールを生成するものでもよい。
なお、ユーザからの入力情報に、容量仮想化プール作成する場合に使用されるべきメディアの種別が含まれていた場合、ストレージ装置30は、指定されたメディアが存在するか否かをまず判定し、存在する場合は図34A−34Dに係る容量仮想化プールの新規設定処理を行う。指定されたメディアが存在しない場合は、指定のメディアがシステム内に無いことをユーザへ通知する。
図34A乃至図34Dを容量仮想化プールの生成の処理として説明したが、図34A乃至図34Dのフローチャートを、システム容量プールを生成する場合に適用することができる。
管理情報としては、容量仮想化プール管理情報3521に代えて、システム容量プール管理情報3525が利用される。システム容量プール44にはプールボリュームが追加されるだけの処理になるため、プール制御プログラム3507は、システム容量プールの作成を、容量仮想化プールのように、PSCBのキュー形態(S41300,S41310)を利用した方式では実行しない。
一方、プール制御プログラム3507は、容量仮想化プールへシステム容量プールからプールボリュームを追加されると、その段階でプールボリュームのPSCBを作成する。
次に、システム容量プールから容量仮想化プールへプールボリュームを自動追加する処理を図38に基づいて説明する。図38は、プール制御プログラム3507が実施するフローチャートである。
プール制御プログラム3507は、容量仮想化プールの容量追加処理を開始すべき契機を検出すると、フローチャートを開始する。この契機には、管理サーバ20が生成したコマンドをストレージ装置30が受信する契機、管理サーバ20からのコマンドによることなく、ストレージ装置30が容量仮想化プールの容量拡張のコマンドを内部的に発生させた契機とがある。
前者の形態では、管理サーバ20はストレージ装置30の状態を定期的チェックして、容量仮想化プール42の容量不足を検出すると、容量仮想化プールの容量を拡張するコマンドをストレージ装置30に対して送信する。後者の形態では、自動容量拡張/縮小プログラム3509が容量仮想化プールの容量監視処理を行う。
プール制御プログラム3507は、プールボリュームを追加すべき容量仮想化プールのIDを判定し、当該IDをキーにして、容量仮想化プール管理情報テーブル3521をチェックする。プール制御プログラム3507が、容量仮想化プール管理情報テーブルを参照して、IDが有効であり、かつプール状態35218が「未定義」であることを確認すると(S5000)、次いで、プール状態を「拡張中」に設定する(S5002)。
システム容量プール管理情報テーブル(図18)を参照して、未使用プールボリュームの中から、容量仮想化プールに追加されるべき、一つ又は複数のプールボリュームを選択する(S5004)。
なお、容量仮想化プールの容量に階層管理が適用されている場合には、プール制御プログラム3507は、システム容量プール管理情報テーブルの階層リスト35271を参照し、容量仮想化プールにおいて容量が不足している階層と同一階層に分類されるプールボリュームを選択する。
次いで、プール制御プログラム3507は、プール制御プログラムは、システム容量プールID、容量仮想化プールID、システム容量プールから容量仮想化プールに追加されるプールボリューム番号(LDEV#)を、Tier番号を指定する(S5006)。
次に、プール制御プログラム3507は、コマンドで指示されたプールに階層管理機能がオンされているか否かを判定する(S5007)。この判定が肯定されると、プール制御プログラム3507は、S5002で選択されたLDEV(プールボリューム)の数分、S5010〜S5020の処理がループされる(S5008)。
プール制御プログラム3507は、未処理のLDEVを選択し、選択したLDEVの番号を、システム容量プール管理情報3525(図18)のLDEVリストから削除する。即ち、システムプールのIDとTier番号とが同一のTier管理情報テーブル3513(図17)を参照して、S5010に係る未処理LDEVの番号を削除する(S5012)。
プール制御プログラム3507は、システム容量プール管理情報から削除されたLDEVをプールボリュームデバイス番号リスト(図15:35220)へ登録する(S5014)。
次いで、プール制御プログラム3507は、階層管理テーブル35271(図17)にアクセスして、そのプールボリュームリスト35283に、容量仮想化プールに追加されるLDEVの番号を登録する(S5016)。
なお、容量仮想化プール制御情報テーブルへの更新も、既述した、システム容量プールに対する処理(S5010,S5012)と同様である。ストレージ装置は、容量仮想化プールへの登録時に、登録しようとするプールボリュームが所属するTierが、容量仮想化プールに存在しない場合は、容量仮想化プール管理情報テーブルにTier管理情報35271を追加する。
次いで、プール制御プログラム3507は、容量仮想化プールに設定したLDEVにPSCBを割当てる(S5018)。そして、PSCBを階層毎のフリーキューに接続する(S5020)。
以上によって、プール制御プログラム3507がプールボリューム(第1種LEDV)を容量仮想化プール42に追加した時点で、図34Bと同様に、プールボリュームをPSCBで管理する。
次いで、プール制御プログラム3507はS5008にリターンして全ての未処理のLDEVに対する処理が終了したと判定すると、容量仮想化プールへのプールボリュームの追加によって生じた、容量、プールボリューム数など変更を容量仮想化プールへ登録する(S5022)。
構成制御プログラム3053は、容量仮想化プール管理情報(図15)の状態35218を「拡張中」から「プール有効」に変更する(S5024)。
コマンド制御プログラム3501は、状態が「プール有効」でないプールボリュームに対して、シン・プロビジョニングを適用しない。
プールボリュームが容量仮想化プールに追加された契機で、コマンド制御プログラム3501は、容量仮想化プールに追加されたプールボリュームを含む、複数のプールボリューム間で既述したページリバランス処理を実行する。
S5007において、階層管理機能がオフと判定されると、プール制御プログラム3507は、S5008、S5010、S5014、S5018、S5020を実施する(S5026)。
次に、容量仮想化プールのプールボリュームを削除してシステム容量プールに戻す場合の処理を図38と対比して説明する。プール制御プログラム3507は、容量仮想化プールの容量と閾値とを比較して、容量仮想化プールに容量の過剰を判定すると、削除すべきボリュームを決定する。このボリュームとしては既述のとおり、例えば、割当てページ数が少ないプールボリューム、或いは、空き容量が少ない階層に属するプールボリュームである。
IO制御プログラム3501は、選択されたプールボリュームの割当てページのデータを他のプールボリュームに移動し、仮想ボリュームとページとの割り当てを変更する。この際、コマンド制御プログラムは、既述のリバランス処理を実施する。
次いで、プール制御プログラムは、削除すべきプールボリュームの情報を、容量仮想化プール管理情報、LDEV管理情報、そして、容量仮想化容量プールが階層化されているのであれば、Tier管理情報の夫々から削除する。
この際、プール制御プログラムは、削除すべきプールボリュームに対して設定したPSCBを解除し、さらに、未使用PSCBをフリーキューから解放する。
次いで、プール制御プログラムは、削除したプールボリュームの管理情報を、システム容量プール管理情報、LDEV管理情報、そして、容量仮想化プールが階層化されているのであれば、Tier管理情報の夫々に追加する。
なお、プール制御プログラムが、容量仮想化プールからプールボリュームをシステム容量プールに回収する際、プールボリュームに対して設定されたPSCBを解除することなく維持してもよい。
また、容量仮想化プールへのプールボリュームの追加には、システム容量プールを経由する場合と、しない場合がある。
次に、ホスト計算機からストレージ装置に対するリード処理を図面に基づいて説明する。
図35は、リード処理を説明するフローチャートである。ホスト計算機10がコマンドを発行すると(S14100)、ストレージ装置125はコマンドを受け付ける(S14102)。ストレージ装置のコマンド制御プログラム3501はコマンドを解析し(S14104)、リード要求に含まれるアドレスを参照する(S14106)。
コマンド制御プログラムは、参照したアドレスに基づいて、アクセス対象ボリュームが実ボリュームか否かを判定する(S214106)。
リード対象アドレスが実ボリュームのアドレスと判定すると、コマンド制御プログラムは、LU―LDEV−VDEVアドレス変換を行い(14110)、リード対象アドレスのデータがキャッシュメモリ上にあるか否かを判別する(S14112)。
リード対象アドレスのデータがキャッシュ上にあれば、コマンド制御プログラムは、キャッシュ上のデータをホスト計算機に転送し(S14122)、ホスト計算機に完了を報告する(S14142)。
リード対象アドレスのデータがキャッシュ上に無ければ、コマンド制御プログラムは、VDEV―PDEV/外部LUアドレス変換を行い(S14114)、リード対象データが格納されているメディアのアドレスを算出(S14116)し、メディアアクセスプログラムを起動する。
メディアアクセスプログラムは、算出したメディアのアドレスからデータを読み出して、キャッシュに格納し(S14118)、コマンド制御プログラムにキャッシュに格納したことを通知する(S14120)。コマンド制御プログラムはメディアアクセスプログラムからの通知を受領すると、キャッシュ上のデータをホストに転送する(S14122)。
リード対象アドレスが仮想ボリュームのアドレスの場合、コマンド制御プログラムは、LU―LDEV−VDEVアドレス変換を行い(S14126)、リード対象アドレスのデータがキャッシュ上にあるか否かを判別する(S14128)。リード対象アドレスのデータがキャッシュ上にあれば、キャッシュ上のデータをホストに転送する(S14122)。
リード対象アドレスのデータがキャッシュ上に無ければ、コマンド制御プログラムは、仮想―プールアドレス変換機能によって(S14130)、仮想ボリュームのVDEV空間のアドレスから、容量仮想化プールのVDEV空間のアドレスへ変換する。
このとき、一度もデータをライトされていない領域へのデータリード要求である場合(S14132)は、デフォルトの値(例えば、オール「0」)を返すためのVDEV空間(0データ領域)のアドレスが算出される(S14136)。
そうでなければ、初めてデータを書き込む際に仮想ボリュームにデータ書込用として割り当てられた領域か、さもなければ、プールの負荷分散や利用率向上、障害回復のために、先のデータ書込用などの領域からデータを移動した領域のVDEVアドレスが算出される(S14134)。
コマンド制御プログラムは、更に、VDEV―PDEV/外部LUアドレス変換を行い、リード対象データが格納されているメディアのアドレスを算出する(S14136)。算出したメディアのアドレスからデータを読み出して、仮想ボリュームの空間のアドレス用に確保したキャッシュメモリに格納する(S14138)。
次に、ライト処理を図36のフローチャートに基づいて説明する。ストレージ装置125が、ライトコマンドを受領すると(S14140、S14142)、コマンド制御プログラムは、ライト要求のアドレスを参照する(S14144)。
アドレスが、実ボリュームのものであるか、仮想ボリュームのものであるかを問わずLU―LDEV−VDEVアドレス変換を行い(S14146)、ライト対象アドレスがキャッシュメモリに確保されているか否かを判別する(S14148)。
ライト対象アドレスに対してキャッシュメモリが確保されていなければ、コマンド制御プログラムは、ホストから転送されるデータを格納するためのキャッシュメモリ領域を確保する(14150)。次いで、コマンド制御プログラムは、データ受領準備ができたことをホストに報告する(S14152)。
コマンド制御プログラムが、ホスト計算機から転送データを受領すると(S14154)、データを確保したキャッシュメモリに格納し(S14156)、ホスト装置にライト完了報告を送信する(S14158)。
ライト要求アドレスが、実ボリュームのアドレスの場合は(S14160)、コマンド制御プログラムは、VDEV―PDEV/外部LUアドレス変換(S14162)を行い、ライト対象データを格納するメディアのアドレスを算出し(S14164)、キャッシュメモリに格納したデータを、メディアアドレスに対して書き込む(S14166)。
ライト要求アドレスが、仮想ボリュームの場合(S14160)、コマンド制御プログラムは、仮想ボリュームアドレス―容量仮想化プールアドレスの変換機能によって、VVOL−DIRテーブルを参照して、仮想ボリュームのVDEV空間のアドレスを容量仮想化プールのVDEV空間のアドレスへ変換する(S14168)。
ライトが、一度もデータをライトされていない領域へのライト要求である場合は(S14170)、コマンド制御プログラムは、デフォルトの値(例えば、オール「0」)を返すためのVDEV空間(0データ領域)のアドレスを算出し(S14172)、このアドレスと仮想ボリュームアドレスとの割当てを解消する。
次いで、コマンド制御プログラムが、仮想ボリュームのアドレスに対応するデータを格納するための容量仮想化プールの空き領域を動的に割当てる(S14174)。この際、コマンド制御プログラムは、割当て領域を空き領域管理対象外とし、空き容量を減算する(S14176)。
このとき、コマンド制御プログラムは、容量仮想化プールの空き容量の閾値チェックを行う。コマンド制御プログラムは、容量仮想化プールの容量に不足又は過剰を判定すると、自動容量拡張縮小プログムを起動する。
また、前記動的な空き領域割当てされた容量仮想化プールのアドレスが、仮想ボリュームに対するライト対象VDEV空間のアドレスに対応する容量仮想化プールのVDEV空間のアドレスとして算出する。
なお、後述する請求の範囲に記載された本発明において、各モジュールは、既述の一つ又は複数のプログラムによって達成される、ソフトウエアモジュールであるが、その一部又は全部が、専用のハードウエアモジュールによって達成されるものであってもよい。