幾つかの実施例を、図面を参照して説明する。なお、以下に説明する実施例は特許請求の範囲にかかる発明を限定するものではなく、また実施例で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
なお、以後の説明では「aaaテーブル」等の表現にて本発明の情報を説明する場合があるが、これら情報は、テーブル等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「aaaテーブル」等について「aaa情報」と呼ぶことがある。
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)及び/又は通信インターフェース装置(例えばポート)を用いながら行うため、処理の主語がプロセッサとされても良い。プログラムを主語として説明された処理は、プロセッサを含むコントローラーが行う処理としても良い。また、コントローラーは、プロセッサそれ自体であっても良いし、プロセッサに代えて又は加えて、プロセッサが行う処理の一部又は全部を行うハードウエア回路を含んでも良い。コンピュータプログラムは、プログラムソースから装置にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ、又は、計算機が読み取り可能な記憶メディアであっても良い。
まず、実施例1に係る計算機システムについて説明する。
図1は、実施例1に係る計算機システムの一例の構成図である。
計算機システムは、例えば、ホスト計算機1000と、複数のストレージ装置(実ストレージ装置)2000と、外部管理サーバ3000とを有する。外部管理サーバ3000と、ストレージ装置2000とは、ストレージネットワーク7000を介して接続されている。また、外部管理サーバ3000、ホスト計算機1000、及びストレージ装置2000は、ストレージネットワーク5000を介して接続されている。
複数のストレージ装置2000は、バックエンドストレージネットワーク6000を介して相互に接続されている。各ストレージ装置2000は、他のストレージ装置2000に、バックエンドストレージネットワーク6000を介してSCSIコマンドを転送することができる。なお、バックエンドストレージネットワーク6000とストレージネットワーク5000とは同一のネットワークであっても良い。
計算機システムにおいては、複数のストレージ装置2000により、DKCプール4000を構成している。このDKCプール4000は、ホスト計算機1000からのSCSIコマンドの送信可能範囲である。
DKCプール4000は、複数のストレージ装置2000に跨る1以上のRPU(RESOURCE PARTITIONING UNIT)2900を含む。ここで、RPUが、テナントが使用するオブジェクトの概念の一例であり、RPUに割り当てられたリソースが、テナントが使用可能でありテナントに割り当てられたリソースの一例である。RPU2900は、複数のストレージ装置2000の複数のリソースにより構成される。RPU2900は、ホスト計算機1000及び外部管理サーバ3000に仮想的なストレージ装置(仮想ストレージ装置又はVDKCと呼称する)として提供される。ここでは仮想ストレージ装置はテナントの一例であり、ホスト計算機に対してストレージ装置として提供されるテナントである。一方でテナントと表記する場合には、ホスト計算機にストレージ装置として提供される必要はなく、また、テナントに割り当てるリソース群は必ずしもストレージを構成するに十分なリソース構成でなくてもよい。本実施例では仮想ストレージ装置について説明するが、本リソース管理技術は仮想ストレージに限定されるものではなくテナントであれば適用可能な発明である。また、DKCプール4000において、複数のRPU2900を構成するようにしても良い。また、複数のRPU2900により、1つの仮想ストレージ装置を構成しても良い。
外部管理サーバ3000は、管理者からの指示に従って各種処理を実行する。ここで、管理者としては、例えば、1つの仮想ストレージ装置に対する管理操作の権限のみを有している管理者(VDKC管理者)8000や、DKCプール4000を構成するすべてのストレージ装置2000に対する管理操作の権限を有している管理者(DKCPOOL管理者)8500がいる。
図2は、実施例1に係る計算機システムの他の例の構成図である。
計算機システムは、ホスト計算機1000と一つのストレージ装置(実ストレージ装置)2000とを含む。ホスト計算機1000とストレージ装置2000とは、ストレージネットワーク5000を介して接続される。
外部管理サーバ3000は、管理者(ユーザ)8000、8500が、ストレージ装置2000にアクセスする際に利用される。外部管理サーバ3000は、管理者8000、8500からの指示に従って管理コマンドをストレージ装置2000に送信する。また、外部管理サーバ3000は、仮想ストレージ装置(RPU2900)に実リソースを割り当てる処理を制御する。なお、外部管理サーバ3000の少なくとも一部の処理を、いずれかのストレージ装置2000の内部管理サーバ2600が実行するようにしても良い。
ストレージ装置2000は、内部管理サーバ2600を有する。内部管理サーバ2600は、ネットワーク7000を介して、外部管理サーバ3000から管理コマンドを受信し、その管理コマンドを内部制御コマンドに変換して、ストレージ装置2000内の他の要素に転送する。また、内部管理サーバ2600は、外部管理サーバ3000からのアクセス制御を行う。
ストレージ装置2000は、複数のリソース(実リソース)を含み、1以上のRPU2900を有する。図2の例では、RPU2900には、仮想ストレージ装置を構成するリソースを含むRPU2900(RPU#01、RPU#02)と、仮想ストレージ装置に割り当てられていないリソースを含むRPU2900(RPU#00)とがある。図2の例では、1つのRPUが1つの仮想ストレージ装置を構成している。各リソースには、ストレージ装置2000内でリソースを識別可能な実リソース識別子が付与されている。
RPU2900に含まれるリソース(実リソース)としては、例えば、ポート2810、ボリューム2800、パリティグループ2820等がある。パリティグループ2820は、RAID(Redundant Arrays of Independent Disks)グループであり、RAIDを構成する複数のドライブのグループである。ボリューム2800は、例えば、論理デバイス(LDEV)である。ボリューム2800は、例えば、1つのパリティグループを構成する記憶領域の一部の記憶領域に対応する。なお、後述するMPPK(Micro Processor PacKage)2200、CMPK(Cache Memory PacKage)2300等の他の種類のリソースをRPU2900に含めても良い。
図2の例では、RPU#01(RPU ID=01のRPU2900)は、VSA#1111の仮想ストレージ装置を構成し、RPU#02(RPU ID=02のRPU2900)は、VSA#1212の仮想ストレージ装置を構成している。RPU#01及びRPU#02に割り当てられている各リソースには、仮想ストレージ装置のリソースとして、仮想リソース識別子(VID)2326Dが付与されている。なお、RPU#00(RPU ID=00のRPU2900)に含まれている仮想ストレージ装置に未割り当てのリソースに対して、仮想リソース識別子は付与されていない。
本実施例に係る計算機システムでは、初期状態において、全てのリソース(本例では、ポート2810、ボリューム2800、パリティグループ2820)がRPU#00に含まれており、その後に、RPU#01、RPU#02が作成される際にRPU#00から各RPUに割り当てるリソースが移動される。なお、ボリューム2800は、RPU#01、RPU#02において新たに作成可能である。
計算機システムでは、各仮想ストレージ装置に対して個別のネームスペースが定義されている。各ネームスペースは独立しているため、仮想ストレージ装置内において、他の仮想ストレージ装置及びストレージ装置2000で使用されているリソース識別子(仮想リソース識別子及び実リソース識別子)を考慮することなく、仮想ストレージ装置内で一意である仮想リソース識別子を自由にRPU2900内のリソースに割り当てることができる。
図3は、実施例1に係るストレージ装置の構成図である。
ストレージ装置2000は、1以上のFEPK(FrontEnd PacKage)2100、1以上のMPPK2200、1以上のCMPK2300、1以上のBEPK(BackEnd PacKage)2400、記憶デバイスの一例としての1以上のHDD(ハードディスクドライブ)2700、内部ネットワーク2500、及び内部管理サーバ2600を含む。なお、図3では、FEPK2100、MPPK2200、CMPK2300、及びBEPK2400等のパッケージについては、そのパッケージ内の一部の構成要素のみを図示しており、図示した構成要素以外の構成要素が含まれていても良い。
内部ネットワーク2500は、FEPK2100、MPPK2200、CMPK2300、BEPK2400、及び管理サーバ2600は、内部ネットワーク2500を介して接続されている。これにより、MPPK2200の各MP(Micro Processor)2210は、内部ネットワーク2500を介して、FEPK2100、CMPK2300、BEPK2400、及び管理サーバ2600と通信することができる。
FEPK2100は、ホスト計算機1000と通信するためのインタフェースデバイスである。FEPK2100は、複数のホストI/F2110を有する。ホストI/F2110は、ネットワーク5000を介してホスト計算機1000のHBA(Host Bus Adapter)と接続し、ホスト計算機1000との間の通信におけるプロトコル制御を行う。例えば、1つのホストI/F2110は、1つのポートに対応する。なお、ホストI/F2110が複数のポートを有していても良い。
BEPK2400は、HDD2700と通信するためのインタフェースデバイスである。BEPK2400は、複数のディスクI/F2410を有する。ディスクI/F2410は、例えば、ケーブルを介してHDD2700と接続されるとともに、内部ネットワーク2500と接続される。ディスクI/F2410は、内部ネットワーク2500側とHDD2700との間におけるリード又はライト対象のデータの受け渡しを仲介する。
CMPK2300は、データキャッシュ用メモリ2310と、制御情報用メモリ2320とを有する。データキャッシュ用メモリ2310と、制御情報用メモリ2320とは、不揮発性メモリ、又は、揮発メモリ、例えば、DRAM(Dynamic Random Access Memory)である。
データキャッシュ用メモリ2310は、HDD2700へライトするライト対象のデータを一時的に格納(キャッシュ)し、又はHDD2700からリードしたリード対象のデータを一時的に格納(キャッシュ)する。制御情報用メモリ2320は、ストレージ装置2000における処理に必要なプログラムや情報を格納する。制御情報用メモリ2320が格納しているプログラムや情報については後述する。
MPPK2200は、複数のMP2210と、ローカルメモリ(LM)2220と、バス2230とを有する。MP2210と、LM2220とは、バス2230を介して接続されている。LM2220は、制御情報用メモリ2320に格納されている制御情報の一部を格納する。
内部管理サーバ2600は、計算機であり、制御情報用メモリ2320からLM2220にロードされ、MP2210により実行されている制御プログラムへ、外部管理サーバ3000からの各種情報(例えば、管理者による各種指示等)を伝達する。内部管理サーバ2600は、キーボード、スイッチ、ポインティングデバイス、マイクロフォンなどの入力デバイス(図示せず)と、ディスプレイやスピーカなどの出力デバイスとを有していても良い。
図4は、実施例1に係る制御情報用メモリの構成図である。
制御情報用メモリ2320は、ストレージ装置制御プログラム2321、RPU管理プログラム2322、リソースID管理プログラム2323、及びユーザアカウント管理プログラム2324を格納している。
ストレージ装置制御プログラム2321は、ホスト計算機1000から受け取ったリード要求及びライト要求に対応する処理を実行する。また、ストレージ装置制御プログラム2321は、ストレージ装置2000内における様々の制御処理を行う。
RPU管理プログラム2322は、ストレージ装置2000内のRPUの管理処理を行う。リソースID管理プログラム2323は、ストレージ装置2000のリソースに付与されている実リソース識別子及び仮想リソース識別子を管理する処理を行う。ユーザアカウント管理プログラム2324は、ユーザ認証の処理、ストレージ装置2000のユーザアカウントの管理処理(例えば、各ユーザのアクセス権限の情報の管理処理)を実行する。
制御情報用メモリ2320は、RPU管理テーブル2325、リソースID管理テーブル2326、ユーザアカウント管理テーブル2327、ストレージ装置モデルリスト2328、物理リソース上限テーブル2330、仮想リソース上限テーブル2331、及び物理リソーステーブル2332を格納する。なお、各テーブルの詳細は後述する。
図5は、実施例1に係る外部管理サーバの構成図である。
外部管理サーバ3000は、例えば、パーソナルコンピュータ、ワークステーション、またはメインフレームなどの計算機により構成され、プロセッサ3100、メモリ3200、入力デバイス3700、出力デバイス3600、及びI/F3800を有する。プロセッサ3100、メモリ3200、入力デバイス3700、及び出力デバイス3600及びI/F3800は、内部バスを介して接続されている。
入力デバイス3700は、例えば、キーボード、スイッチやポインティングデバイス等により構成され、ユーザからの入力を受け付ける。出力デバイス3600は、ディスプレイやスピーカ等により構成され、ユーザに対して各種情報を出力する。I/F3800は、ストレージ装置2000との間の通信を行うインタフェースデバイスである。
プロセッサ3100は、外部管理サーバ3000全体を統括制御する。プロセッサ3100は、メモリ3200に格納されたプログラムを実行することにより各種処理を実行する。メモリ3200は、ストレージ管理プログラム3210、リソース割当決定プログラム3220、及び上限値計算プログラム3230を格納する。各プログラムによる処理の詳細は、後述する。また、メモリ3200は、仮想リソースプール物理リソース対応テーブル3240、管理側物理リソース上限テーブル3250、管理側仮想リソース上限テーブル3260、性能下限テーブル3265、ライセンス管理テーブル3270、管理側物理リソーステーブル3280、管理側リソースID管理テーブル3290、タスク管理テーブル3295、性能履歴テーブル3297、及び構成管理テーブル3298を格納する。
管理側物理リソース上限テーブル3250は、各ストレージ装置2000の物理リソース上限テーブル2330を集約したテーブルである。なお、管理側物理リソース上限テーブル3250は、1つのテーブルとして構成しても良く、各ストレージ装置2000の物理リソース上限テーブル2330を有する構成としても良い。
管理側仮想リソース上限テーブル3260は、各ストレージ装置2000の仮想リソース上限テーブル2331を集約したテーブルである。なお、管理側仮想リソース上限テーブル3260は、1つのテーブルとして構成しても良く、各ストレージ装置2000の仮想リソース上限テーブル2331を有する構成としても良い。
管理側物理リソーステーブル3280は、各ストレージ装置2000の物理リソーステーブル2332を集約したテーブルである。なお、管理側物理リソーステーブル3280は、1つのテーブルとして構成しても良く、各ストレージ装置2000の物理リソーステーブル2332を有する構成としても良い。
管理側リソースID管理テーブル3290は、各ストレージ装置2000のリソースID管理テーブル2326を集約したテーブルである。なお、管理側リソースID管理テーブル3290は、1つのテーブルとして構成しても良く、各ストレージ装置2000のリソースID管理テーブル2326を有する構成としても良い。なお、他のテーブルの詳細は、後述する。
図6は、実施例1に係るユーザアカウント管理テーブルの構成図である。
ユーザアカウント管理テーブル2327は、ユーザID欄2327A、RPU ID欄2327B、権限欄2327C、及びパスワード欄2327Dを有するエントリを格納する。
ユーザID欄2327Aには、管理者のユーザIDが格納される。RPU ID欄2327Bには、ユーザIDに対応する管理者に割り当てられているRPUのID(RPU ID)が格納される。なお、管理者に対して全てのRPUが割り当てられている場合には、RPU ID欄2327Bには、「RPU#FF」が設定される。
権限欄2327Cには、ユーザIDに対応する管理者に対して与えられている操作権限の種別が格納される。
操作権限の種別が「STORAGE ADMIN」である場合には、ユーザIDに対応する管理者は、割り当てられているRPU(仮想ストレージ装置)内において、全ての操作を行うことができる。例えば、この権限を有するユーザは、ボリュームの作成及び削除やコピーペアの制御等を行うことができる。一方、この権限を有するユーザは、RPUの作成、RPUの物理リソースの変更(追加・削除)など、RPUの物理リソースを制御すること、仮想ストレージ装置の仕様を変更することはできない。ここで、RPUの物理リソースは、ポート及びパリティグループである。
操作権限の種別が「MODIFY VIRTUAL STORAGE」である場合には、ユーザIDに対応する管理者は、仮想ストレージ装置の作成及び変更を行うことができる。この権限を有するユーザは、新たにRPUを作成し、RPUの物理リソースを変更し(リソース割り当て)、新たに仮想ストレージ装置を定義してRPUを割り当て、仮想ストレージ装置の仕様を変更することができる。RPUの物理リソースの変更は、RPU間の物理リソースの移動を意味する。したがって、一つのRPUの物理リソースを変更するためには、ユーザが、他のRPUに対する「MODIFY VIRTUAL STORAGE」の権限も有することが必要である。なお、操作権限の種類及びその内容は、図6に示す例に限られず、これらと異なる権限が定義されていても良い。
パスワード欄2327Dには、ユーザIDに対応する管理者のパスワードが格納される。
図6に示すユーザアカウント管理テーブル2327によると、例えば、「VDKC1.ADMIN」の管理者(例えば図1における管理者8000)は、PDKC1.RPU#01、PDKC2.RPU#01、PDKC3.RPU#01に対して、「STORAGE ADMIN」の権限を有していることがわかる。また、「DKCPOOL.ADMIN」の管理者(例えば図1における管理者8500)は、全てのRPU(RPU#FF)に対して、「STORAGE ADMIN」と「MODIFY VIRTUAL STORAGE」との操作権限を有している。
ユーザアカウント管理プログラム2324は、外部管理サーバ3000からの指示に従って、ユーザアカウント管理テーブル2327においてユーザアカウントを登録する。具体的には、内部管理サーバ2600が、外部管理サーバ3000から、ユーザアカウントの追加、変更、削除等の指示を登録内容の情報と共に受信し、それらを起動したユーザアカウント管理プログラム2324に転送する。ユーザアカウント管理プログラム2324は、転送された指示に従って、ユーザアカウント管理テーブル2327を更新する。
上述のように、内部管理サーバ2600は、ユーザアカウント管理テーブル2327の情報に従って、ユーザからのアクセスを制御する。例えば、内部管理サーバ2600は、外部管理サーバ3000から、ログインを行うためのユーザID及びパスワードを受信し、それをユーザアカウント管理プログラム2324に転送する。
ユーザアカウント管理プログラム2324は、ユーザID及びパスワードをユーザアカウント管理テーブル2327の情報と比較して、ユーザIDが、ユーザアカウント管理テーブル2327に登録されているか確認する。ユーザIDが登録されている場合、ユーザアカウント管理プログラム2324は、ユーザが登録されている旨の認証結果とこのユーザIDのユーザの権限情報を内部管理サーバ2600に送信する。ユーザIDが登録されていない場合、ユーザアカウント管理プログラム2324は、ユーザが登録されていない旨の認証結果を内部管理サーバ2600に送信する。
ログインを試みているユーザが登録されていない場合、内部管理サーバ2600は、ログインエラーを外部管理サーバ3000に返す。一方、ユーザが登録されている場合、内部管理サーバ2600は、その後の外部管理サーバ3000からのこのユーザによる管理コマンドを、このユーザの操作権限内において処理する。具体的には、内部管理サーバ2600は、ユーザの管理操作範囲を、このユーザに割り当てられているRPU内のリソースに限定し、さらに実行できる操作を割り当てられた権限内で許される操作に限定する。
例えば、内部管理サーバ2600は、ユーザによる、割り当てられていないRPUの仮想ストレージ装置におけるボリューム操作(ボリューム作成や削除、ペア形成等)の要求を拒否する。また、内部管理サーバ2600は、「MODIFY VIRTUAL STORAGE」権限を有していないユーザからの仮想ストレージ装置の作成要求やリソース移動(リソース割り当て)の要求を拒否する。
図7は、実施例1に係るRPU管理テーブルの構成図である。
RPU管理テーブル2325は、RPU ID欄2325A、ベンダ欄2325B、モデル欄2325C、シリアル番号(S/N)欄2325D、管理ポートIPアドレス欄2325E、及び状態欄2325Fを有するエントリを格納する。RPU管理テーブル2325においては、欄の値に「0」が設定されている場合には、値が割り当てられていないことを意味する。
RPU ID欄2325Aには、ストレージ装置2000内でRPUを一意に特定可能な識別子(RPU ID)が格納される。ベンダ欄2325B、モデル欄2325C、及びS/N欄2325Dには、それぞれ、RPUが表現する(RPUが割り当てられている)仮想ストレージ装置の仮想ベンダ名(ベンダの仮想識別子)、仮想モデル名(モデルの仮想識別子)、仮想シリアル番号が格納される。
これら仮想ベンダ名、仮想モデル名、及び仮想シリアル番号の組が、ストレージ装置2000内で一意である、仮想ストレージ装置を特定する仮想識別子に相当する。なお、ベンダ欄2325B、モデル欄2325C、又はシリアル番号欄2325Dに「DEFAULT」が設定されている場合には、対応する欄には、ストレージ装置2000の実値が割り当てられていることを意味する。
管理ポートIPアドレス欄2325Eには、RPU管理用に定義されている内部管理サーバ2600へアクセスするためのIPアドレス(アクセスIPアドレス)が格納される。例えば、一つの物理ポートにおいて、アクセスIPアドレスがマスカレードされ、各仮想ストレージ装置に一つのアクセスIPアドレスが割り当てられている。
状態欄2325Fには、RPUの状態を示す値(RPUステータス)が格納される。RPUステータスが「アクティブ」の場合には、エントリに対応するRPUが仮想ストレージ装置を表現中、すなわち、この仮想ストレージ装置が動作中であることを示す。この場合には、ストレージ装置2000は、ホスト計算機1000と外部管理サーバ3000からの識別子応答要求に対して、仮想識別子(仮想ストレージ装置の仮想識別子と仮想リソース識別子とを含む)を応答する。
RPUステータスが「非アクティブ」の場合には、エントリに対応するRPUが仮想ストレージ装置を表現しておらず、すなわち、この仮想ストレージ装置は動作していないことを示す。この場合、ストレージ装置2000は、ホスト計算機1000と外部管理サーバ3000からの識別子応答要求に対して、このRPUの仮想識別子を応答しない。
図8は、実施例1に係るリソースID管理テーブルの構成図である。
リソースID管理テーブル2326は、実リソースID欄2326A、種別欄2326B、RPU ID欄2326C、及び仮想リソースID欄2326Dを有するエントリを格納する。
実リソースID欄2326Aには、ストレージ装置2000に対して定義されているネームスペースにおいて、各リソースをストレージ装置2000内で一意に特定可能な識別子(実リソース識別子)が格納される。
種別欄2326Bには、エントリに対応するリソースの種別が格納される。本実施例においては、リソースの種別としては、PORT(ポート)、VOLUME(ボリューム)、PARITY GROUP(パリティグループ)がある。なお、種別欄2326Bにこれ以外の種別が登録されてもよい。
RPU ID欄2326Cには、エントリに対応するリソースが所属するRPUの識別子(RPU ID)が格納される。本実施例においては、全てのリソースがいずれかのRPUに属しているので、RPU ID欄2326Cには、いずれかのRPU IDが格納されている。
仮想リソースID欄2326Dには、エントリに対応するリソースに対応する仮想リソース識別子が格納される。仮想リソース識別子は、RPUに対して定義されているネームスペースにおいてリソースを一意に特定可能な識別子である。仮想識別子(ID)は、仮想ストレージ装置の仮想識別子(ID)又はリソースに付与される仮想リソース識別子(ID)を示す。仮想リソースID欄2326Dに「NULL」が設定されている場合には、エントリに対応するリソースに、仮想リソース識別子が付与されていないことを示す。
各RPUにおいて仮想リソース識別子を付与するために、それぞれにネームスペースが定義される。そのため、各RPU(仮想ストレージ装置)において、他のRPUの仮想リソース識別子及び実ストレージ装置2000において付与される実リソース識別子と独立して、各リソースに対して仮想リソース識別子を付与することができる。これにより、各RPUにおいて自由に仮想リソース識別子を付与でき、実ストレージ装置2000において複数の仮想ストレージ装置を提供するための管理を容易化することができる。
RPU IDは、ストレージ装置2000において一意であり、RPU IDと仮想リソース識別子との組で構成される識別子は、実リソース識別子と同様に、ストレージ装置2000においてリソースを一意に特定可能である。同様に、RPUが表現する仮想ストレージ装置の仮想ベンダID、仮想モデル名、及び仮想シリアル番号の組で構成される仮想識別子と、仮想リソース識別子とにより、ストレージ装置2000においてリソースを一意に特定可能である。
リソースID管理プログラム2323は、リソースID管理テーブル2326を管理する。リソースがRPU間で移動され、仮想リソース識別子が付与されるようなリソース構成に変更があると、リソースID管理プログラム2323は、その変更に応じてリソースID管理テーブル2326を更新する。
図9は、実施例1に係るストレージ装置モデルリストの構成図である。
ストレージ装置モデルリスト2328は、ベンダID欄2328Aと、モデル欄2328Bとを有するエントリを格納する。
ベンダID欄2328Aには、表現可能なベンダのベンダIDが格納される。モデル欄2328Bには、ベンダID欄2328AのベンダIDのベンダにより提供される仮想ストレージ装置のモデルのモデル名が格納される。
管理者は、ストレージ装置モデルリスト2328のエントリから、一つのエントリを選択し、ストレージ装置2000において作成する仮想ストレージ装置に対して、ベンダ名とモデル名とを付与することができる。RPUは、ストレージ装置モデルリスト2328に登録されているベンダ名とモデル名との組合せを有する仮想ストレージ装置を表現可能である。
リソースID管理プログラム2323は、ストレージ装置モデルリスト2328を管理する。例えば、リソースID管理プログラム2323は、外部管理サーバ3000から受信した指示に従って、ストレージ装置モデルリスト2328を更新する。
図10は、実施例1に係る物理リソース上限テーブルの構成図である。
物理リソース上限テーブル2330は、種別欄2330Aと、上限値欄2330Bとを有するエントリを格納する。
種別欄2330Aには、物理リソースの種別が格納される。上限値欄2330Bには、物理ストレージ装置2000におけるエントリの種別欄2330Aの物理リソースの種別に対応する物理リソースに関する上限値(第1情報の一例)が格納される。ここで、上限値2330Aに設定される上限値としては、物理リソースの種別によって設定される値の種類が異なっても良く、例えば、物理リソースの個数、性能値、又は容量の上限値であっても良い。例えば、上限値2330Aには、物理リソースの種別がボリュームの場合には、作成可能なボリュームの個数の上限値が設定され、物理リソースの種別がPORTの場合には、PORTの数の上限値が設定され、物理リソースの種別がストレージプールの場合には、ストレージプールの容量の上限値が設定されても良い。
図11は、実施例1に係る仮想リソース上限テーブルの構成図である。
仮想リソース上限テーブル2331は、RPU ID欄2331A、種別欄2331B、及び上限値欄2331Cを有するエントリを格納する。
RPU ID欄2331Aには、RPU IDが格納される。種別欄2331Bには、仮想リソースの種別が格納される。仮想リソースの種別は、物理リソースの種別と同様である。上限値欄2331Cには、RPU IDのRPUにおけるエントリの種別欄2331Bの種別の仮想リソースに関する上限値が格納される。なお、仮想リソースには、物理リソースが割り当てられることとなるので、この仮想リソースの上限値は、物理リソースの上限値に対応し、第2情報の一例である。ここで、上限値2331Cに設定される上限値としては、仮想リソースの種別によって設定される値の種類が異なっても良く、例えば、仮想リソースの個数、性能値、又は容量の上限値であっても良い。例えば、上限値2331Cには、仮想リソースの種別がボリュームの場合には、作成可能なボリュームの個数の上限値が設定され、仮想リソースの種別がPORTの場合には、PORTの数の上限値が設定され、仮想リソースの種別がストレージプールの場合には、ストレージプールの容量の上限値が設定されても良い。
図12は、実施例1に係る物理リソーステーブルの構成図である。
物理リソーステーブル2332は、リソース種別欄2332A、実リソースID欄2332B、及びスペック欄2332Cを有するエントリを格納する。
リソース種別欄2332Aには、リソースの種別が格納される。実リソースID欄2332Bには、エントリのリソース種別欄2332Aのリソースの種別に対応する実リソースの識別子(実リソースID)が格納される。スペック欄2332Cには、エントリの実リソースID欄2332Bの実リソースに関するスペックが格納される。スペック欄2332Cに格納されるスペックとしては、例えば、リソース種別がボリュームの場合には、ボリュームのサイズであり、リソース種別がパリティグループの場合には、パリティグループのサイズであり、リソース種別がポートの場合には、通信速度である。
図13は、実施例1に係る仮想リソースプール物理リソース対応テーブルの構成図である。
仮想リソースプール物理リソース対応テーブル3240は、RPUに属するリソースプールを管理するテーブルであり、RPU ID欄3240A、リソースプールID欄3240B、リソース種別欄3240C、PDKC ID欄3240D、及び実リソースID欄3240Eを有するエントリを格納する。
RPU ID欄3240Aには、RPU IDが格納される。リソースプールID欄3240Bには、RPU ID欄3240AのRPU IDのRPU(仮想ストレージ装置)におけるリソース種別毎のリソースが属するリソースプールの識別子(リソースプールID)が格納される。リソース種別欄3240Cには、エントリのリソースプールID欄3240BのリソースプールIDのリソースプールに属するリソースの種別が格納される。PDKC ID欄3240Dには、エントリのRPU IDのRPUを構成するストレージ装置(PDKC)2000の識別子(PDKC ID)が格納される。実リソースID欄3240Eには、エントリに対応するリソースプールに属する実リソースの実リソースIDが格納される。
図14は、実施例1に係るタスク管理テーブルの構成図である。
タスク管理テーブル3295は、タスクID欄3295A、実行ユーザID欄3295B、処理名欄3295C、対象装置欄3295D、対象リソースプールID欄3295E、対象リソースID欄3295F、スペック欄3295G、実行予定(済)時間欄3295H、及び実行状況欄3295Iを有するエントリを格納する。
タスクID欄3295Aには、タスクを識別する識別子(タスクID)が格納される。実行ユーザID欄3295Bには、エントリのタスクID欄3295AのタスクIDのタスクを実行させるユーザの識別子(実行ユーザID)が格納される。処理名欄3295Cには、エントリのタスクID欄3295AのタスクIDのタスクで実行する操作内容の処理名が格納される。対象装置3295Dには、エントリのタスクID欄3295AのタスクIDのタスクで操作を実行する対象のRPUのRPU IDが格納される。
対象リソースプールID欄3295Eには、エントリのタスクID欄3295AのタスクIDのタスクで操作を実行する対象のリソースプールの識別子(リソースプールID)が格納される。対象リソースID欄3295Fには、エントリのタスクID欄3295AのタスクIDのタスクで操作を実行する対象のリソースの識別子(リソースID)が格納される。スペック欄3295Gには、エントリのタスクID欄3295AのタスクIDのタスクで操作するリソースに対する操作量が格納される。実行予定(済)時間欄3295Hには、エントリのタスクID欄3295AのタスクIDのタスクを実行する予定の時間又は、タスクの実行が済んだ時間が格納される。実行状況欄3295Iには、エントリのタスクID欄3295AのタスクIDのタスクの実行状況が格納される。実行状況欄3295Iに格納される実行状況としては、例えば、タスクが完了したことを示す「完了」、タスクの実行中であることを示す「実行中」、タスクがまだ実行されていないことを示す「未実行」がある。
図15は、実施例1に係るライセンス管理テーブルの構成図である。
ライセンス管理テーブル3270は、RPU ID欄3270A及びライセンス料欄3270Bを有するエントリを格納する。RPU ID欄3270Aには、RPU IDが格納される。ライセンス料欄3270Bには、エントリのRPU ID欄3270AのRPU IDのRPUに対するライセンス料が格納される。なお、ライセンス料に代えて、ライセンス料を支払うことにより得られるRPUの容量などの情報としても良い。
図16は、実施例1に係る性能履歴テーブルの構成図である。
性能履歴テーブル3297は、物理リソースの性能値の情報を管理するテーブルであり、PDKC ID欄3297A、実リソースID欄3297B、種別欄3297C、時間欄3297D、及び性能値欄3297Eを有するエントリを格納する。
PDKC ID欄3297Aには、PDKCのPDKC IDが格納される。実リソースID欄3297Bには、実リソースの実リソースIDが格納される。種別欄3297Cには、エントリの実リソースID欄3297BのリソースIDに対応する実リソースの種別が格納される。時間欄3297Dには、性能値欄3297Eの性能値を測定した時間が格納される。性能値欄3297Eには、エントリの実リソースID欄3297Bの実リソースIDに対応する実リソースの時間欄3297Dの時間における性能値が格納される。
図17は、実施例1に係る構成管理テーブルの構成図である。
構成管理テーブル3298は、RPU ID欄3298A、仮想PORTリソースID欄3298B、WWN欄3298C、仮想HostGroup欄3298D、仮想VOLリソースID欄3298E、及びLUN欄3298Fを有するエントリを格納する。
RPU ID欄3298Aには、RPUのRPU IDが格納される。仮想PORTリソースID欄3298Bには、仮想ポートのリソースID(仮想PORTリソースID)が格納される。WWN欄3298Cには、仮想PORTリソースID欄3298BのリソースIDに対応する仮想ポートのWWN(World Wide Name)が格納される。仮想HostGroup欄3298Dには、仮想ホストグループの識別子が格納される。仮想VOLリソースID欄3298Eには、仮想ボリュームのリソースIDが格納される。LUN欄3298Fには、エントリの仮想VOLリソースID欄3298EのリソースIDに対応する仮想ボリュームのLUN(Logical Unit Number)が格納される。
図18は、実施例1に係る性能下限テーブルの構成図である。
性能下限テーブル3265は、RPU ID欄3265A、仮想リソースID欄3265B、及び性能要件欄3265Cを有するエントリを格納する。
RPU ID欄3265Aには、RPUのRPU IDが格納される。仮想リソースID欄3265Bには、エントリのRPU ID欄3265Aに対応するRPUにおける仮想リソースのリソースID(仮想リソースID)が格納される。性能要件欄3265Cには、エントリのRPU ID欄3265AのRPU IDのRPUにおける仮想リソースID欄3265BのリソースIDの仮想リソースに対する性能要件、すなわち、必要とされる性能の下限値が格納される。性能要件としては、例えば、仮想リソースがボリュームである場合には、ボリュームに対して要求されるIOPS(Input Output Per Second)の下限値が格納される。なお、図18に示す性能下限テーブル3265では、ボリュームに対する性能要件を管理する例を示しているが、Port、ストレージ装置、又はアプリケーションに対する性能要件を管理するようにしても良い。
次に、第1実施例に係る計算機システムにおける処理動作について説明する。
まず、VDKC上限値設定処理について説明する。VDKC上限値設定処理は、例えば、計算機システムにVDKCを新たに設定した後等に外部管理サーバ3000により実行される。VDKC上限値設定処理としては、例えば、VDKCに対するライセンス料の情報に基づいて、VDKCにおける仮想リソースに関する上限値を設定するVDKC上限値設定処理(図19参照)や、VDKCに割当て済みのPool容量に基づいて、VDKCにおける他の仮想リソースに関する上限値を設定するVDKC上限値設定処理(図20参照)がある。
図19は、実施例1に係るVDKC上限値設定処理の第1の例のフローチャートである。
図19に示すVDKC上限値設定処理は、VDKCに対するライセンス料の情報に基づいて、VDKCにおける仮想リソースに関する上限値を作成して設定する処理である。
外部管理サーバ3000の上限値計算プログラム3230は、ライセンス管理テーブル3270を参照し、各VDKC(RPU)に対応するライセンス料の情報を取得する(ステップF1001)。
次いで、上限値計算プログラム3230は、各VDKCのライセンス料の比率に基づいて、各PDKCにおける各VDKCの各リソースに対する上限値を計算する(ステップF1002)。例えば、各PDKCに、RPU#01と、RPU#02とが存在し、これらのライセンス料の比率が2:1である場合には、各仮想リソースの上限値について、RPU#01に対するリソースの上限値と、RPU#02に対するリソースの上限値との比がライセンス料の比率となるように計算する。より具体的には、各PDKCにおける各VDKCのPool容量の上限値については、各PDKCのPool容量合計を、RPU#01に対するリソースの上限値と、RPU#02に対するリソースの上限値との比がライセンス料の比率となるように計算する。
なお、全ての種類の仮想リソースに対して、各VDKCのリソースの上限値の比が、ライセンス料の比率となるようにしても良く、また、仮想リソースの一部の種類の上限値については、ライセンス料の比率によらず、一定としても良い。より具体的には、例えば、各VDKCのボリュームのサイズの上限値について一定とし、ボリュームの数の上限値をライセンス料の比率としても良く、また、各VDKCのボリュームのサイズの上限値についてライセンス料の比率とし、ボリュームの数の上限値を一定としても良い。また、各VDKCのリソースの上限値の比をライセンス料の比率とせずに、ライセンス料の比率に基づいて算出される比率としても良い。
次いで、上限値計算プログラム3230は、計算した各リソースの上限値を管理側仮想リソース上限値テーブル3260の各リソースに対応するエントリに設定する(ステップF1003)。
次いで、ストレージ管理プログラム3210が内部管理サーバ2600のストレージ制御プログラム2321と通信し、仮想リソース上限テーブル2331の各リソースに対応する上限値を更新する(ステップF1004)。これにより、各ストレージ装置2000の仮想リソース上限テーブル2331に、算出されたリソースの上限値が設定されることとなる。
図20は、実施例1に係るVDKC上限値設定処理の第2の例のフローチャートである。
図20に示すVDKC上限値設定処理は、VDKCに割当て済みのPool容量に基づいて、VDKCにおける他の仮想リソースに関する上限値を作成して設定する処理である。
外部管理サーバ3000の上限値計算プログラム3230は、管理側リソースID管理テーブル3290及び管理側物理リソース管理テーブル3280を参照して、各VDKC(RPU)に割当て済みのPDKC毎のPool容量の合計(Pool容量合計)を算出する(ステップF1005)。具体的には、管理側リソースID管理テーブル3290を参照することにより、各VDKCに対して各PDKCにより割り当てられているPoolの実リソースIDを特定し、その実リソースIDを用いて管理者側物理リソース管理テーブル3280を参照することにより、実リソースIDに対応するPool容量を特定し、このPool容量をPDKC毎に、各VDKCの容量別に合計する。
次いで、上限値計算プログラム3230は、各PDKCのPool容量合計と、各PDKCにおける各VDKCに割り当て済みのPool容量合計との比率とに基づいて、各PDKCにおける各VDKCの各リソースに対する上限値を計算する(ステップF1006)。例えば、或るPDKCに、RPU#01と、RPU#02とが存在し、このPDKCにおける各RPUのPool容量合計の比率が2:1である場合には、このPDKCにおける各仮想リソースの上限値について、RPU#01に対するリソースの上限値と、RPU#02に対するリソースの上限値との比が各RPUのPool容量合計の比率となるように計算する。
なお、全ての種類の仮想リソースに対して、各VDKCのリソースの上限値の比が、各PDKCにおける各RPUのPool容量合計の比率となるようにしても良く、また、仮想リソースの一部の種類の上限値については、各RPUのPool容量合計の比率によらず、一定としても良い。より具体的には、例えば、各VDKCのボリュームのサイズの上限値について一定とし、ボリュームの数の上限値を各RPUのPool容量合計の比率としても良く、また、各VDKCのボリュームのサイズの上限値について各RPUのPool容量合計の比率とし、ボリュームの数の上限値を一定としても良い。また、各VDKCのリソースの上限値の比を各PDKCにおける各RPUのPool容量合計の比率とせずに、各PDKCにおける各RPUのPool容量合計の比率に基づいて算出される比率としても良い。
次いで、上限値計算プログラム3230は、計算した各リソースの上限値を管理側仮想リソース上限値テーブル3260の各リソースに対応するエントリに設定する(ステップF1007)。
次いで、ストレージ管理プログラム3210がストレージ制御プログラム2321と通信し、仮想リソース上限テーブル2331の各リソースに対応する上限値を更新する(ステップF1008)。これにより、各ストレージ装置2000の仮想リソース上限テーブル2331に、算出されたリソースの上限値が設定されることとなる。
次に、平準化設定処理について説明する。平準化設定処理は、仮想リソースをRPUに対して割り当てる処理であり、VDKC上限値設定処理が終了した後に実行される。
図21は、実施例1に係る平準化設定処理のフローチャートである。
外部管理サーバ3000のストレージ管理プログラム3210は、管理者からVDKCに対する構成変更指示を受け付けると(ステップF1300)、変更対象選択処理(図22及び図23参照)の実行を開始する(ステップF1400)。この変更対象選択処理が実行されると、リソースの変更を行う対象のPDKCが選択される。ここで、構成変更指示には、例えば、仮想リソースを変更する対象のVDKCを特定する情報や、変更する対象の仮想リソースを特定する情報が含まれている。
次いで、リソース割当決定プログラム3220が設定変更処理(図24及び図25参照)の実行をRPU管理プログラム2322に対して指示する(ステップF1500)。この際、リソース割当決定プログラム3220は、変更対象選択処理による処理結果(例えば、割当対象のRPUのRPU ID、割当対象のリソースのリソースID、そのリソースに対する仮想リソースID等)をRPU管理プログラム2322に送信する。この設定変更処理により、VDKCに対する構成変更が行われる。なお、設定変更処理が終了した後、VDKCに対する構成変更の結果が外部管理サーバ3000を介して管理者に通知される。
図22は、実施例1に係る変更対象選択処理の第1のフローチャートである。図23は、実施例1に係る変更対象選択処理の第2のフローチャートである。なお、図22のフローチャートの記号Aと、図23のフローチャートの記号Aとは、フローチャートが繋がっていることを示している。
変更対象選択処理は、図21の平準化設定処理のステップF1400の処理に対応する。なお、図22及び図23では、VDKCに対してPortを追加する変更を行う場合における変更対象選択処理を説明する。
ストレージ管理プログラム3210は、DKCPOOL管理者から指定された、Port追加対象のVDKCと、必要なPortのスペック(例えば、Portの通信速度)とを受け付ける(ステップF1401)。なお、Port追加対象のVDKCと、必要なPortのスペックとは、ステップF1300の構成変更指示に含まれている。
次いで、リソース割当決定プログラム3220は、管理側仮想リソース上限テーブル3260を参照し、ストレージ管理プログラム3210が受け付けたPortのスペックを満たすために必要なPort数が、VDKCの割当て可能なPort数の上限値を超えているか否かを判定する(ステップF1402)。この結果、受け付けたPortのスペックを満たすために必要なPortの数が、VDKCの割当て可能なPort数の上限値を超えている場合(ステップF1402:YES)には、リソース割当決定プログラム3220は、エラーを返して処理を終了する(ステップF1403)。
一方、受け付けたPortのスペックを満たすために必要なPort数が、VDKCの割当て可能なPort数の上限値を超えていない場合(ステップF1402:NO)には、リソース割当決定プログラム3220は、対象のVDKCに対してリソースを割り当てている各PDKCに関して、管理側仮想リソース上限テーブル3260を参照して、割当て可能なPort数の上限値を計算するとともに、管理側リソースID管理テーブル3290を参照し、現在の割当て済みPort数を計算する(ステップF1404)。
次いで、リソース割当決定プログラム3220は、タスク管理テーブル3295を参照し、同一のPDKCを共有する他のVDKCに対する処理(タスク)の履歴、未実行タスクをチェックする(ステップF1405)。具体的には、リソース割当決定プログラム3220は、各PDKCについて、同一のPDKCを共有する他のVDKCに対するタスクにおいて割り当てられたPort数と、未実行タスクにより割り当てる予定のPort数とを把握する。
次いで、リソース割当決定プログラム3220は、他のタスクにより割り当てられているPort数及び割り当てられる予定のPort数についても考慮にいれて、割当可能なPort数の上限値に達することなく、受け付けたスペックを満足するPort数を有するPDKCが存在するか否かを判定する(ステップF1406)。
この結果、このようなPDKCが存在しない場合(ステップF1406:NO)には、リソース割当決定プログラム3220は、エラーを返して処理を終了する(ステップF1407)。
一方、このようなPDKCが存在する場合(ステップF1406:YES)には、リソース割当決定プログラム3220は、PDKC毎の、全VDKCに割り当てているPort/全VDKCに割り当てているLUの比率(R1)、全PDKCについてのPort/LUの比率(R1)の平均値(A1)、及びPDKC毎の、平均値(A1)とPort/LUの比率(R1)との差(D1)を計算する(ステップF1451)。ここで、D1が小さいほど、そのPDKCにおける、Port/LUの比率(R1)が大きい、すなわち、Portの処理に余裕があることを示している。したがって、D1に基づいて、Portを割り当てるPDKCを選択するようにすると、各PDKCから割当てられるPortにおける負荷を平準化することができる。
次いで、リソース割当決定プログラム3220は、対象のVDKCに割り当てられているPDKC毎の対象のVDKCに割り当てているPort/対象のVDKCに割り当てられているLUの比率(R2)、全PDKCについてのPort/LUの比率(R2)の平均値(A2)、PDKC毎の、平均値(A2)とPort/LUの比率(R2)との差(D2)を計算する(ステップF1452)。ここで、D2が小さいほど、対象のVDKCについて、そのPDKCにおけるPort/LU(R2)の比率が大きい、すなわち、対象のVDKCについてみると、そのPDKCのPortの処理に余裕があることを示している。したがって、D2に基づいて、Portを割り当てるPDKCを選択するようにすると、各PDKCから割当てられるPortにおける、対象のVDKCについての負荷を平準化することができる。
次いで、リソース割当決定プログラム3220は、PDKC毎に、D1+D2を計算する(ステップF1453)。
次いで、リソース割当決定プログラム3220は、D1+D2の値が最小となるPDKCを、VDKCに対してPortを割当対象のPDKCとして選択し(ステップF1454)、その選択したPDKCから割当対象のPortを選択し、そのPortに対して割り当てる仮想リソースIDを決定し、処理を終了する。この処理により、D1+D2が最小となるPDKC、すなわち、Portの処理に余裕があるとともに、対象のVDKCについてのPortの処理に余裕があるPDKCを適切に選択することができる。これにより、各PDKC間のPortの負荷を平準化することができるとともに、対象のVDKCにおける各PDKC間のPortの負荷を平準化することができる。
図24は、実施例1に係る設定変更処理の第1のフローチャートである。図25は、実施例1に係る設定変更処理の第2のフローチャートである。なお、図24のフローチャートの記号Bと、図25のフローチャートの記号Bとは、フローチャートが繋がっていることを示している。設定変更処理は、図21の平準化設定処理のステップF1500の処理に対応する。
RPU管理プログラム2322は、変更対象選択処理による処理結果から、割当対象のリソースの実リソースIDと、割当対象のRPUのRPU IDとを取得する(ステップF1501)。ここで、このフローチャートの処理の説明においては、割当対象のリソースの実リソースIDを「S」、割当対象のRPUのRPU IDを「T」で示す。
次に、RPU管理プログラム2322は、リソースID管理テーブル2326において、実リソースID欄2326Aの値が「S」であるエントリを検索し、このエントリの仮想リソースID欄2326Dに仮想リソースIDが登録されているか否かを判定する(ステップF1502)。
この結果、エントリの仮想リソースID欄2326Dに仮想リソースIDが登録されている場合(ステップF1502:YES)には、実リソースID「S」のリソースに仮想リソースIDが既に付与されていることを示しており、RPU管理プログラム2322は、内部管理サーバ2600又はストレージ装置制御プログラム2321を介して、管理者に対してエラーメッセージを返し(ステップF1504)、処理をステップF1506に進める。
一方、エントリの仮想リソースID欄2326Dに仮想リソースIDが登録されていない場合(ステップF1502:NO)には、実リソースID「S」のリソースに仮想リソースIDが未付与であることを示しており、RPU管理プログラム2322は、リソースID管理テーブル2326の実リソースID欄2326Aの値が「S」であるエントリにおいて、RPU ID欄2326Cの値を「T」に設定し(ステップF1503)、処理をステップF1506に進める。
ステップF1506では、RPU管理プログラム2322は、変更対象選択処理による処理結果から、仮想リソースIDを付与するリソースの実リソースIDと、仮想リソースIDとを取得する。ここで、以降のステップの説明においては、仮想リソースIDを割当対象のリソースの実リソースIDを「P」、割り当てる仮想リソースIDを「V」で示す。
RPU管理プログラム2322は、リソースID管理テーブル2326を参照し、取得した実リソースID「P」のエントリを特定し、このエントリのRPU ID欄2326Cから実リソースが属するRPUのRPU IDを取得する。RPU管理プログラム2322は、取得したRPU IDと、取得した仮想リソースID「V」との組が、リソースID管理テーブル2326に登録済みであるか否かを判定する(ステップF1507)。具体的には、RPU管理プログラム2322は、RPU IDと、仮想リソースIDとの組が、いずれかのエントリのRPU ID欄2326C、及び仮想リソースID欄2326Dの値の組と一致するか否かを判定する。
この結果、RPU IDと、仮想リソースIDとの組が登録済みである場合(ステップF1507:YES)には、RPU管理プログラム2322は、指定された仮想リソースIDが既に存在していることを示すエラーメッセージを、内部管理サーバ2600又はストレージ装置制御プログラム2321を介して、要求者に返し(ステップF1509)、設定変更処理を終了する。これにより、VDKCにおいて同一仮想リソースIDが重複することを避けることができる。
一方、RPU IDと、仮想リソースIDとの組が未登録である場合(ステップF1507:NO)には、RPU管理プログラム2322は、リソースID管理テーブル2326の実リソースID欄2326Aの値が「P」であるエントリにおいて、仮想リソースID欄2326Dに仮想リソースID「V」を格納し(ステップF1508)、設定変更処理を終了する。これにより、割当対象の実リソースを、VDKC内で仮想リソースIDによって特定することができるようになる。
次に、実施例2に係る計算機システムについて説明する。
実施例2に係る計算機システムは、RPUに既に割り当てられているPoolからリソースとしてLUを割り当てる処理を行う。実施例2に係る計算機システムの構成は、基本的には、実施例1に係る計算機システムの構成と同様である。以下、実施例1に係る計算機システムと違う点を中心に説明する。
次に、実施例2に係る計算機システムの処理動作について説明する。
図26は、実施例2に係る仮想リソースプール物理リソース対応テーブル作成処理のフローチャートである。
仮想リソースプール物理リソース対応テーブル作成処理は、後述する平準化設定処理の前に実施される。
まず、リソース割当決定プログラム3220が設定変更処理(図24及び図25と同様な処理)の実行を開始する(ステップF2100)。なお、実施例2に係る設定変更処理においては、ステップF1501及びF1506では、割当対象のリソースの実リソースIDと、割当対象のRPUのRPU IDと、仮想リソースIDとを、外部管理サーバ3000から送信されるDKCPOOL管理者による構成変更指示から取得する。
次いで、ストレージ管理プログラム3210がテーブル作成詳細処理(図28参照)の実行を開始し(ステップF2200)、テーブル作成詳細処理の終了後に仮想リソースプール物理リソース対応テーブル作成処理を終了する。
図28は、実施例2に係るテーブル作成詳細処理のフローチャートである。
テーブル作成詳細処理は、図26のステップF2200の処理に対応する。
ストレージ管理プログラム3210は、仮想リソースプール物理リソース対応テーブル3240を参照し、追加されたリソースのリソース種別が、リソースを追加されたVDKCにおいて新規であるか否かを調べ(ステップF2201)、VDKCに追加されたリソースのリソース種別が新規であるか否かを判定する(ステップS2202)。
この結果、リソース種別が新規である場合(ステップF2202:YES)には、ストレージ管理プログラム3210は、このリソース用の新規の仮想リソースプールを作成し(ステップF2203)、処理をステップF2204に進める。具体的には、ストレージ管理プログラム3210は、新規の仮想リソースプールの仮想リソースプールIDを決定する。一方、リソース種別が新規でない場合(ステップF2202:NO)には、ストレージ管理プログラム3210は、処理をステップF2204に進める。
ステップF2204では、ストレージ管理プログラム3210は、追加されたリソースを、そのリソースのリソース種別に対応する仮想リソースプールの要素として、仮想リソースプール物理リソース対応テーブル3240に追加する。具体的には、ストレージ管理プログラム3210は、仮想リソースプール物理リソース対応テーブル3240に、追加されたリソースの実リソースID、そのリソースが属するPDKCのPDKC ID、そのリソースのリソース種別、そのリソース種別のリソースが属する仮想リソースプールのリソースプールID、及びそのリソースが追加されたRPUのRPU IDを含むエントリを追加する。
次に、実施例2に係る平準化設定処理について説明する。
図27は、実施例2に係る平準化設定処理のフローチャートである。
外部管理サーバ3000のストレージ管理プログラム3210は、管理者からVDKCに対する構成変更指示を受け付けると(ステップF2300)、変更対象選択処理(図29乃至図31参照)の実行を開始する(ステップF2400)。この変更対象選択処理が実行されると、リソースの変更を行う対象のPDKC及びPoolが選択される。ここで、構成変更指示には、例えば、LUを作成する構成変更指示であれば、LUを追加する対象のVDKCを特定する情報や、追加するLUの数を特定する情報が含まれている。
次いで、リソース割当決定プログラム3220が設定変更処理(図32参照)の実行を開始する(ステップF2500)。この設定変更処理により、VDKCに対する構成変更が行われる。なお、設定変更処理が終了した後、VDKCに対する構成変更の結果が管理者に通知される。
図29は、実施例2に係る変更対象選択処理の第1のフローチャートである。図30は、実施例2に係る変更対象選択処理の第2のフローチャートである。図31は、実施例2に係る変更対象選択処理の第3のフローチャートである。なお、図29のフローチャートの記号Cと、図30のフローチャートの記号Cとは、フローチャートが繋がっていることを示している。また、図29のフローチャートの記号Dと、図31のフローチャートの記号Dとは、フローチャートが繋がっていることを示している。
変更対象選択処理は、図27の平準化設定処理のステップF2400の処理に対応する。なお、図29乃至図31では、VDKCに対してLUを作成する場合における変更対象選択処理を説明する。
ストレージ管理プログラム3210は、VDKC管理者からLUを作成するVDKCのPoolと、作成するLUのサイズ及び数を受け付ける(ステップF2401)。
次いで、リソース割当決定プログラム3220は、ストレージ管理プログラム3210が作成指示を受け付けたLUの総容量が、指定されたVDKCで作成可能なボリュームの容量の上限値を超えているか否かを判定する(ステップF2402)。この結果、ストレージ管理プログラム3210が受け付けたLUの総容量が、VDKCで作成可能なボリュームの容量の上限値を超えている場合(ステップF2402:YES)には、リソース割当決定プログラム3220は、エラーを返して処理を終了する(ステップF2403)。
一方、ストレージ管理プログラム3210が受け付けたLUの総容量が、指定されたVDKCで作成可能なボリュームの容量の上限値を超えていない場合(ステップF2402:NO)には、リソース割当決定プログラム3220は、対象のVDKCに対してリソースを割り当てている各PDKCに関して、管理側物理リソース上限テーブル3250と、管理側物理リソーステーブル3280とを参照して、作成可能なLUの容量の上限値と、現在の作成済みのLUの容量と、空きPool容量とを計算する(ステップF2404)。
次いで、リソース割当決定プログラム3220は、タスク管理テーブル3295を参照し、同一のPDKCを共有する他のVDKCに対する処理(タスク)の履歴、未実行タスクをチェックする(ステップF2405)。具体的には、リソース割当決定プログラム3220は、各PDKCについて、同一のPDKCを共有する他のVDKCに対するタスクにおいて割り当てられたLUの数と、未実行タスクにより割り当てる予定のLUの数とを把握する。
次いで、リソース割当決定プログラム3220は、他のタスクにより割り当てられているLUの数及び割り当てられる予定のLUの数についても考慮にいれて、作成可能なLUの総容量の上限値に達していないPDKCが存在するか否かを判定する(ステップF2406)。
この結果、このようなPDKCが存在しない場合(ステップF2406:NO)には、リソース割当決定プログラム3220は、処理を図31のステップS2461に進める。
一方、このようなPDKCが存在する場合(ステップF2406:YES)には、リソース割当決定プログラム3220は、PDKC毎の全VDKCに割り当てているLUの容量(R1)、全PDKCについてのLUの容量(R1)の平均値(A1)、PDKC毎の、平均値(A1)とLUの容量(R1)との差(D1)を計算する(ステップF2451)。ここで、D1が大きいほど、そのPDKCにおいて割り当てられているLUの容量が小さいことを示している。したがって、D1に基づいて、LUを割り当てるPDKCを選択するようにすると、各PDKC間で割り当てるLUの容量を平準化することができる。
次いで、リソース割当決定プログラム3220は、対象のVDKCに割り当てられているPDKC毎のVDKCに割り当てているLUの容量(R2)、全PDKCについての、対象のVDKCのLUの容量(R2)の平均値(A2)、PDKC毎の、平均値(A2)とLUの容量(R2)との差(D2)を計算する(ステップF2452)。ここで、D2が大きいほど、そのPDKCにおける、対象のVDKCについてのLUの容量が小さいことを示している。したがって、D2に基づいて、LUを割り当てるPDKCを選択するようにすると、各PDKC間で、対象のVDKCについてのLUの容量を平準化することができる。
次いで、リソース割当決定プログラム3220は、PDKC毎に、D1+D2を計算する(ステップF2453)。
次いで、リソース割当決定プログラム3220は、D1+D2の値が最小となるPDKCを、LUを作成する対象のPDKCとして選択し、そのPDKCの中のPoolの1つを、LUを作成する対象のPoolとして選択し(ステップF2454)、処理を終了する。
一方、ステップF2461では、リソース割当決定プログラム3220は、作成予定のLUの個数(N個)を複数(M個:Mは、N以下の数)のグループに分割する(ステップF2461)。次いで、リソース割当決定プログラム3220は、グループの1つを処理対象として、ステップF2451〜F2455の処理を実行する(ステップF2462)。
次いで、リソース割当決定プログラム3220は、ステップF2461で分割した全てのグループに対してステップF2462の処理を実行したか否かを判定し(ステップF2463)、全てのグループに対して処理を実行していない場合(ステップF2463:NO)には、処理をステップF2462に進めて、未処理のグループに対する処理を実行する一方、全てのグループに対して処理を実行した場合(ステップF2463:YES)には、変更対象選択処理を終了する。ステップF2461〜F2463の処理によると、LUのグループ毎に、LUを作成する対象のPDKC及びPoolが選択される。上記処理によると、作成するLUを割り当てるPDKC及びPoolを適切に選択することができる。
図32は、実施例2に係る設定変更処理のフローチャートである。
設定変更処理は、図27の平準化設定処理のステップF2500の処理に対応する。
ストレージ管理プログラム3210は、変更対象選択処理で選択したPDKCのPoolと、作成するLUの数から設定処理を確定し、タスク管理テーブル3295へ設定処理に対応するタスクを登録する(ステップF2501)。次いで、ストレージ管理プログラム3210は、タスクの内容を、LUを作成する対象の各PDKCに通知し、タスクに対応する設定処理を実行させる(ステップF2502)。これにより、各PDKCにおいて、選択されたPoolに、指定された数のLUが作成されることとなる。
次に、実施例3に係る計算機システムについて説明する。
実施例3に係る計算機システムは、計算機システムにおけるストレージ装置のスケールアウト時においてリソースの割り当ての処理を行う。実施例3に係る計算機システムの構成は、基本的には、実施例1に係る計算機システムの構成と同様である。以下、実施例1に係る計算機システムと違う点を中心に説明する。
次に、実施例3に係る計算機システムの処理動作について説明する。
図33は、実施例3に係るVDKC下限値設定処理のフローチャートである。
VDKC下限値設定処理は、ユーザが決定したSLA(Service Level
Agreement)保証の範囲である目標性能に基づいて、VDKCにおける仮想リソースに関する下限値を作成し、設定する処理である。
外部管理サーバ3000の上限値計算プログラム3230は、ユーザからVOL毎もしくはストレージ装置単位での目標性能値を受け付ける(ステップF3001)。次いで、ストレージ管理プログラム3210は、性能下限テーブル3265に受け付けた目標性能値を設定し(ステップF3002)、処理を終了する。
図34は、実施例3に係る平準化設定処理のフローチャートである。
平準化設定処理は、ストレージ装置が計算機システムに新規に追加された後に実行される。
ストレージ管理プログラム3210は、RPU作成処理(図35参照)を実行する(ステップF3300)。このRPU作成処理によると、新規に追加されたストレージ装置2000にRPUが作成される。
次いで、ストレージ管理プログラム3210は、RPUに割り当てるリソースを決定するリソース決定割当処理を実行する(ステップF3400)。リソース決定割当処理としては、追加したリソースのみを処理対象とするリソース決定割当処理(図36参照)と、既存のリソースについても処理対象とするリソース決定割当処理(図37及び図38参照)とがある。
図35は、実施例3に係るRPU作成処理のフローチャートである。
RPU作成処理は、図34の平準化設定処理のステップF3300の処理に対応する。
ストレージ管理プログラム3210は、全ストレージ装置2000のRPU管理プログラム2322と通信して、RPU管理テーブル2325に設定されている既存の仮想ストレージ装置のRPU ID、ベンダ、モデル、及びS/Nを取得する(ステップF3301)。
次いで、ストレージ管理プログラム3210は、新規に追加したストレージ装置2000のRPU管理プログラム2322と通信し、ステップS3301で取得したRPU ID、ベンダ、モデル、及びS/Nを、RPU管理テーブル2325に登録させる(ステップF3302)。
RPU管理プログラム2322は、RPU管理テーブル2325の登録したRPUに対応するエントリの状態欄2325Fをアクティブに設定する(ステップF3303)。この後、ストレージ管理プログラム3210は、RPU作成処理を終了する。
図36は、実施例3に係るリソース決定割当処理の第1の例のフローチャートである。
このリソース決定割当処理は、図34の平準化設定処理のステップF3400の処理に対応し、追加したストレージ装置のリソースのみを処理対象とする処理である。
ストレージ管理プログラム3210は、新たに追加されたストレージ装置2000に具備されているPortの情報を取得する(ステップF3401)。次いで、ストレージ管理プログラム3210は、性能下限テーブル3265を参照して各VDKCの平均性能要件(A)を計算し、性能履歴テーブル3297を参照してVDKCの現在の平均性能値(C)を計算し、平均性能要件(A)と、平均性能値(C)との差分(A−C)を計算し、差分(A−C)が小さい順にVDKCに対して点数S1(0、1、2・・・の順)を設定する(ステップF3402)。ここで、差分(A−C)が負であれば、VDKCに対する性能要件を超えており、性能に余裕がないことを示しており、差分(A−C)が正であれば、VDKCに対する性能要件を超えておらず、性能に余裕があることを示している。このため、差分(A−C)の小さい順に点数S1を設定することにより、差分(A−C)が小さい、すなわち、性能に余裕がないVDKCに対して少ない点数が設定されることとなる。
次いで、ストレージ管理プログラム3210は、性能履歴テーブル3297を参照して、単位期間(例えば、1日等)の性能増加の傾きが大きい順にVDKCに対して点数S2(0、1、2・・・の順)を設定する(ステップF3403)。ここで、性能増加の傾きが大きいVDKCは、今後必要となる性能が増加する可能性が高いことを示している。このため、性能増加の傾きが大きい順にVDKCに対して点数S2を設定することにより、今後性能に余裕がなくなる可能性の高いVDKCに対して少ない点数が設定されることとなる。
次いで、ストレージ管理プログラム3210は、各VDKC毎にS1+S2を計算し、S1+S2の値が小さい順にVDKCをランク付けする(ステップF3404)。ここで、S1+S2の値が小さいほど、性能に余裕がない、且つ性能に余裕がなくなる可能性が高いVDKCであることを意味しており、このようなVDKCから順にランク付けされることとなる。
次いで、ストレージ管理プログラム3210は、追加されたPDKCのPortについて、Portのハードウエアのスペックがよい順に、ステップF3404のランク付けに基づいて、割り当てるVDKCを決定する(ステップF3405)。ここで、割り当て先の決定方法としては、Portを1つずつ、ランクに従った順番で各VDKCに振り分けるように決定しても良いし、S1+S2の比率に基づいて、各VDKCにPortを振り分けるように決定しても良い。なお、VDKCに割り当てられたPort数が、このVDKCに割り当て可能なPortの上限値に達した場合には、このVDKCには、これ以上のPortが割り当てられないようにしている。
次いで、ストレージ管理プログラム3210は、図21のステップF1500の処理と同様な処理をRPU管理プログラム2322に実行させることにより、各VDKCに対してPortを割り当て(ステップF3406)、処理を終了する。この処理によると、追加したストレージ装置のリソースを適切に割り当てることができる。
図37は、実施例3に係るリソース決定割当処理の第2の例の第1のフローチャートである。図38は、実施例3に係るリソース決定割当処理の第2の例の第2のフローチャートである。なお、図37のフローチャートの記号Eと、図38のフローチャートの記号Eとは、フローチャートが繋がっていることを示している。
このリソース決定割当処理は、図34の平準化設定処理のステップF3400の処理に対応し、全ストレージ装置2000のリソースを処理対象とする処理である。
ストレージ管理プログラム3210は、全ストレージ装置2000に具備されているPortの情報を取得する(ステップF3407)。次いで、ストレージ管理プログラム3210は、性能下限テーブル3265を参照して各VDKCの平均性能要件(A)を算出し、性能履歴テーブル3297を参照して各VDKCの現在の平均性能値(C)を計算し、各VDKCの平均性能要件(A)と、平均性能値(C)との差分(A−C)を計算し、差分(A−C)が小さい順にVDKCに対して点数S1(0、1、2・・・の順)を設定する(ステップF3408)。
次いで、ストレージ管理プログラム3210は、性能履歴テーブル3297を参照して、単位期間の性能増加の傾きが大きい順にVDKCに対して点数S2(0、1、2・・・の順)を設定する(ステップF3409)。
次いで、ストレージ管理プログラム3210は、VDKC毎にS1+S2を計算し、S1+S2の値が小さい順にVDKCをランク付けする(ステップF3410)。
次いで、ストレージ管理プログラム3210は、全PDKCのPortについて、Portのハードウエアのスペックがよい順に、ステップF3410のランク付けに基づいて、割り当てるVDKCを決定する(ステップF3411)。ここで、割り当て先の決定方法としては、Portを1つずつ、ランクに従った順番で各VDKCに振り分けるように決定しても良いし、S1+S2の比率に基づいて、各VDKCにPortを振り分けるように決定しても良い。なお、VDKCに割り当てられたPort数が、このVDKCに割り当て可能なPortの上限値に達した場合には、このVDKCには、これ以上のPortが割り当てられないようにしている。
次いで、ストレージ管理プログラム3210は、VDKCを跨ったリソース(ここでは、Port)の移動があるか否かを判定する(ステップF3413)。
この結果、VDKCを跨ったリソースの移動がない場合(ステップF3413:NO)には、ストレージ管理プログラム3210は、RPU管理プログラム2322によりステップF1500と同様な処理を実行させて、追加するPortをVDKCに割り当て(ステップF3421)、処理を終了する。
一方、VDKCを跨ったリソースの移動がある場合(ステップF3413:YES)には、ストレージ管理プログラム3210は、更に、VDKCへ割り当て予定の未割当てリソースがあるか否かを判定する(ステップS3414)。この結果、VDKCへ割り当て予定の未割当てリソースがない場合(ステップS3414:NO)には、ストレージ管理プログラム3210は、エラーを返して処理を終了する(ステップF3415)。
一方、VDKCへ割り当て予定の未割当てリソースがある場合(ステップS3414:YES)には、ストレージ管理プログラム3210は、RPU管理プログラム2322によりステップF1500と同様な処理を実行させて、VDKCを変更する予定のPortが割り当てられるVDKCに対して割り当て予定の未割当てのポートを割り当てる(ステップF3416)。
次いで、ストレージ管理プログラム3210は、構成管理テーブル3298を参照して、新たに割り当てたPortに対して、変更予定のPortに割り当てられている仮想ポート番号を割り当てる(ステップF3417)。
次いで、ストレージ管理プログラム3210は、変更予定のPortに設定されているパスを、新たに割り当てたPortのパスに切り替えて、新たに割り当てたPortをメインパスとする(ステップF3418)。このように、新たに割り当てられたPortに対して、変更予定のPortの仮想ポート番号が設定されるので、ホスト1000からVOLに対してアクセスするためのSCSI Inquiry ID(仮想装置ID、仮想ポート番号、及び仮想VOL番号を含む)が送信された場合であっても、支障なく処理することができる。このため、変更予定のPortについて、ストレージ装置2000を停止することなく、他のVDKCに割り当てることができるようになる。
次いで、ストレージ管理プログラム3210は、変更予定のPortを変更先のVDKCに対して割り当てる(ステップF3419)。具体的には、例えば、ストレージ管理プログラム3210は、リソースID管理テーブル2326から、変更予定のPortの仮想リソースIDを削除(例えば、変更予定のPortの仮想リソースIDを“null”に更新)し、その後、ステップF1500と同様に、変更先VDKCに変更予定のPortの情報を設定することをRPU管理プログラム2322に対して指示する。
次いで、ストレージ管理プログラム3210は、全てのVDKCに対して変更対象のPortの変更設定が完了したか否かを判定し(ステップF3420)、全てのVDKCに対して変更対象のPortの変更設定が完了していない場合(ステップF3420:NO)には、処理をステップF3417に進める。一方、全てのVDKCに対して変更対象のPortの変更設定が完了している場合(ステップF3420:YES)には、ストレージ管理プログラム3210は、処理を終了する。これにより、追加したストレージ装置のリソースだけでなく、全ストレージ装置2000のリソースを対象に、リソースの割当ての変更を行うことができる。
次に、実施例4に係る計算機システムについて説明する。
実施例4に係る計算機システムは、RPUに既に割り当てられているPoolからリソースとしてSS(スナップショット)のVOLを割り当てる処理を行う。SSのVOLは、同一のストレージ装置2000に集約しておくことが好ましいので、実施例4に係る計算機システムは、SSのVOLをできるだけ同一のストレージ装置2000に集約されるように割り当てる。実施例4に係る計算機システムの構成は、基本的には、実施例2に係る計算機システムの構成と同様である。以下、実施例2に係る計算機システムと違う点を中心に説明する。
実施例4に係る計算機システムによるリソースを集約するように設定するリソース集約設定処理は、実施例2に係る図27に示す平準化設定処理において、変更対象選択処理(ステップF2400)に代えて、図39乃至図41に示すリソース集約時の変更対象選択処理を実行し、構成変更処理(ステップF2500)に代えて、図42に示す設定変更処理を実行するようにしたものである。
図39は、実施例4に係るリソース集約時の変更対象選択処理の第1のフローチャートである。図40は、実施例4に係るリソース集約時の変更対象選択処理の第2のフローチャートである。図41は、実施例4に係るリソース集約時の変更対象選択処理の第3のフローチャートである。なお、図39のフローチャートの記号Fと、図40のフローチャートの記号Fとは、フローチャートが繋がっていることを示している。また、図39のフローチャートの記号Gと、図41のフローチャートの記号Gとは、フローチャートが繋がっていることを示している。
ストレージ管理プログラム3210は、VDKC管理者からSSのVOLを作成するVDKCのR−Poolと、SSの基になるプライマリーボリューム(P−VOL)と、作成するSSの数との指定を受け付ける(ステップF4001)。
次いで、リソース割当決定プログラム3220は、ストレージ管理プログラム3210が作成指示を受け付けたSS数に対応するボリューム数が、指定されたVDKCで作成可能なボリューム数の上限値を超えているか否かを判定する(ステップF4002)。この結果、ストレージ管理プログラム3210が受け付けたボリューム数が、VDKCで作成可能なボリューム数の上限値を超えている場合(ステップF4002:YES)には、リソース割当決定プログラム3220は、エラーを返して処理を終了する(ステップF4003)。
一方、ストレージ管理プログラム3210が受け付けたVOL数が、指定されたVDKCで作成可能なボリューム数の上限値を超えていない場合(ステップF4002:NO)には、リソース割当決定プログラム3220は、対象のVDKCに対してリソースを割り当てている各PDKCに関して、管理側仮想リソース上限テーブル3250と、管理側物理リソーステーブル3280とを参照して、作成可能なVOL数の上限値と、現在の作成済みのVOL数とを計算する(ステップF4004)。
次いで、リソース割当決定プログラム3220は、タスク管理テーブル3295を参照し、同一のPDKCを共有する他のVDKCに対する処理(タスク)の履歴、未実行タスクをチェックする(ステップF4005)。具体的には、リソース割当決定プログラム3220は、各PDKCについて、同一のPDKCを共有する他のVDKCに対するタスクにおいて割り当てられたVOL数と、未実行タスクにより割り当てる予定のVOL数とを把握する。
次いで、リソース割当決定プログラム3220は、他のタスクにより割り当てられているVOL数及び割り当てられる予定のVOL数についても考慮にいれて、作成可能なVOL数の上限値に達していないPDKCが存在するか否かを判定する(ステップF4006)。
この結果、このようなPDKCが存在しない場合(ステップF4006:NO)には、リソース割当決定プログラム3220は、処理を図41のステップS4061に進める。
一方、このようなPDKCが存在する場合(ステップF4006:YES)には、リソース割当決定プログラム3220は、指定されたP−VOLを保持するPDKCが存在するか否かを判定する(ステップF4051)。
この結果、P−VOLを保持するPDKCが存在する場合(ステップF4051:YES)には、リソース割当決定プログラム3220は、このPDKCにおける、このPDKC内部のPoolを変更対象として選択し(ステップF4052)、処理を終了する。
一方、P−VOLを保持するPDKCが存在しない場合(ステップF4051:NO)には、リソース割当決定プログラム3220は、PDKC毎の全VDKCに割り当てているVOL数(R1)、全PDKCについてのVOL数(R1)の平均値(A1)、PDKC毎の、平均値(A1)とVOL数(R1)との差(D1)を計算する(ステップF4053)。ここで、D1が大きいほど、そのPDKCにおいて割り当てられているVOL数が少ないことを示している。したがって、D1に基づいて、VOLを割り当てるPDKCを選択するようにすると、各PDKC間で割り当てるVOL数を平準化することができる。
次いで、リソース割当決定プログラム3220は、対象のVDKCに割り当てられているPDKC毎の対象のVDKCに割り当てているVOL数(R2)、全PDKCについての、対象のVDKCのVOL数(R2)の平均値(A2)、PDKC毎の、平均値(A2)とVOL数(R2)との差(D2)を計算する(ステップF4054)。ここで、D2が大きいほど、そのPDKCにおける、対象のVDKCについてのVOL数が少ないことを示している。したがって、D2に基づいて、VOLを割り当てるPDKCを選択するようにすると、各PDKC間で、対象のVDKCについてのVOL数を平準化することができる。
次いで、リソース割当決定プログラム3220は、PDKC毎に、D1+D2を計算する(ステップF4055)。
次いで、リソース割当決定プログラム3220は、D1+D2の値が最大となるPDKCを、VOLを作成する対象のPDKCとして選択し、そのPDKCの中のPoolの1つを、VOLを作成する対象のPoolとして選択し(ステップF4056)、処理を終了する。これにより、全てのSSのVOLを集約して格納することのできる1つのPDKCのPoolを決定することができる。
一方、ステップF4061では、リソース割当決定プログラム3220は、作成予定のSSの個数(N個)を複数(M個:Mは、初期値が2である)のグループに分割する(ステップF4061)。次いで、リソース割当決定プログラム3220は、各グループを処理対象として、ステップF4051〜F4056の処理を実行する(ステップF4062)。
次いで、リソース割当決定プログラム3220は、ステップF4062の処理により、ステップF4061で分割した全てのグループに対してVOLを作成するPDKCと、Poolとが決定したか否かを判定し(ステップF4063)、全てのグループに対して決定できなかった場合(ステップF4063:NO)には、Mに1を加算させ(ステップF4064)、処理をステップF4061に進める。一方、全てのグループに対して決定できた場合(ステップF4063:YES)には、リソース割当決定プログラム3220は、処理を終了する。
このステップF4061〜F4064の処理によると、できるだけ少ない数のPDKCにSSに対応するVOLを集約することができるようなPDKC及びPoolの組が選択される。
図42は、実施例4に係る設定変更処理のフローチャートである。
ストレージ管理プログラム3210は、リソース集約時の変更対象選択処理で選択された変更対象のPDKCが、指定されたP−VOLが存在するPDKCであるか否かを判定する(ステップF4071)。
この結果、変更対象のPDKCが、指定されたP−VOLが存在するPDKCである場合(ステップF4071:YES)には、ストレージ管理プログラム3210は、このPDKCのPoolにSSのVOLを作成可能な空き容量があるか否かを判定する(ステップF4072)。
この結果、このPDKCのPoolにSSのVOLを作成可能な空き容量がない場合(ステップF4072:NO)には、ストレージ管理プログラム3210は、このPDKCに対して新たにPoolを作成して、VOLを作成するPoolとして選択し、VDKCに割り当て(ステップF4073)、処理をステップF4075に進める。一方、このPDKCのPoolにSSのVOLを作成可能な空き容量がある場合(ステップF4072:YES)には、ストレージ管理プログラム3210は、このPDKC内の最も空き容量の多いPoolを、VOLを作成するPoolとして選択し(ステップF4074)、処理をステップF4075に進める。
一方、変更対象のPDKCが、指定されたP−VOLが存在するPDKCでない場合(ステップF4071:NO)には、ストレージ管理プログラム3210は、このPDKCのPoolにSSのVOLを作成可能な空き容量があるか否かを判定する(ステップF4076)。
この結果、このPDKCのPoolにSSのVOLを作成可能な空き容量がない場合(ステップF4076:NO)には、ストレージ管理プログラム3210は、このPDKCに対して新たにPoolを作成して、VOLを作成するPoolとして選択し、VDKCに割り当て(ステップF4077)、処理をステップF4079に進める。一方、このPDKCのPoolにSSのVOLを作成可能な空き容量がある場合(ステップF4076:YES)には、ストレージ管理プログラム3210は、このPDKC内の最も空き容量の多いPoolを、VOLを作成するPoolとして選択し(ステップF4078)、処理をステップF4079に進める。
ステップF4079では、ストレージ管理プログラム3210は、(a)P−VOLをこのPDKCに移行し、移行したP−VOLを選択したPoolと関連付ける、(b)P−VOLをこのPDKCに外部接続でつなげ、選択したPoolと関連づける、(c)P−VOLをこのPDKCにコピーして選択したPoolと関連付ける、のいずれかの処理を実行する。(a)(b)及び(c)のいずれかの処理を実行することで、変更対象のPDKCでSSのV−VOLを作成することが可能となる。その後、ストレージ管理プログラム3210は、処理をステップF4075に進める。
ステップF4075では、ストレージ管理プログラム3210は、SSの仮想VOL(V−VOL)を生成する。
次いで、ストレージ管理プログラム3210は、選択されたPDKCのPoolと、作成すべきSSの数とから設定処理(SS作成)を確定し、タスク管理テーブル3295へ設定処理に対応するタスクを登録する(ステップF4080)。次いで、ストレージ管理プログラム3210は、タスクの内容を、VOLを作成する対象のPDKCに通知し、タスクに対応する設定処理を実行させる(ステップF4081)。次いで、ストレージ管理プログラム3210は、作成したSSの仮想VOLをVDKCに割り当て(ステップF4082)、処理を終了する。これにより、PDKCにおいて、選択されたPoolに、指定された数のSSのV−VOLが作成されることとなる。
次に、実施例5に係る計算機システムについて説明する。
実施例5に係る計算機システムは、計算機システムにおいて、新たなライセンスが追加され、新たなVDKCを追加する際におけるリソースの割り当ての処理を行う。実施例5に係る計算機システムの構成は、基本的には、実施例1に係る計算機システムの構成と同様である。以下、実施例1に係る計算機システムと違う点を中心に説明する。
図43は、実施例5に係るVDKCの上限値設定処理のフローチャートである。
ストレージ管理プログラム3210は、VDKC管理者またはDKCPOOL管理者から、新たに追加するVDKCのRPU ID、ベンダ、モデル、シリアル番号、及びライセンス情報の指定を受け付ける(ステップF5001)。
次いで、ストレージ管理プログラム3210は、指定された、RPU ID、ベンダ、モデル、及びシリアル番号を、全ストレージ装置2000のRPU管理プログラム2322へ送信し、これら情報に基づいて、RPU管理テーブル2325を更新させる(ステップF5002)。次いで、上限値計算プログラム3320が、指定されたライセンス情報をライセンス管理テーブル3270に設定する(ステップF5003)。
次いで、上限値計算プログラム3230は、各VDKCのライセンス料の比率に基づいて、各PDKCにおける各VDKCの各リソースに対する上限値を計算する(ステップF5004)。
次いで、上限値計算プログラム3230は、計算した上限値が既存のリソース数(又は容量、性能)を下回るか否かを判定する(ステップF5005)。この結果、計算した上限値が既存のリソース数を下回る場合(ステップF5005:YES)には、上限値計算プログラム3230は、既存のリソース数(又は、容量、性能)と計算した上限値との差分値を保存し(ステップF5006)、処理をステップF5007に進める。一方、計算した上限値が既存のリソース数を下回らない場合(ステップF5005:NO)には、上限値計算プログラム3230は、処理をステップF5007に進める。
ステップF5007では、上限値計算プログラム3230は、全てのVDKCのリソースに対する上限値を計算したか否かを判定する。この結果、全てのVDKCのリソースに対する上限値を計算していない場合(ステップF5007:NO)には、上限値計算プログラム3230は、処理をステップF5004に進めて、未処理のVDKCを処理対象に処理を実行する一方、全てのVDKCのリソースに対する上限値を計算した場合(ステップF5007:YES)には、処理をステップF5008に進める。
ステップF5008では、上限値計算プログラム3230は、差分値の合計(差分合計値)が0であるか否かを判定する。この結果、差分合計値が0でない場合(ステップF5008:NO)には、上限値計算プログラム3230は、差分のなかったVDKC(新しく分配予定の上限を既存割当リソース数(量)が下回っていないVDKC)に関して、リソース上限値から差分合計値を除いた後、再分配を行う計算(ステップF5004からの処理)を実行する(ステップF5010)。具体的には、例えば、上限値計算プログラム3230は、各種リソース上限値について、リソース上限値(仮想リソース上限値)の合計値(A)から、差分のあった1個以上のVDKCに割当済みリソース数合計(B)を減算し、減算後の値(A−B)に関して、差分のなかったVDKCと追加するVDKCのライセンス比率に応じて再分配計算を実施する。減算後の値(A−B)が、分配可能なリソース上限数である。また、VDKCが残り1個になるまで差分がなくならない場合は、エラーが出されても良い。つまり、新しい基準で上限が割り当てられるケースにおいて、既に割当済リソースがその上限を超えている場合は、そのVDKCの上限値は変更されず、残りのVDKCの中で、上限を超えているVDKCのリソースを除いた値で、再分配が実施される。
一方、差分合計値が0である場合(ステップF5008:YES)には、ストレージ管理プログラム3210が、ストレージ制御プログラム2321と通信して、仮想リソース上限テーブル2331を更新し(ステップF5009)、処理を終了する。
以上説明したように、実施例5に係る計算機システムによると、新たなライセンスが追加され、新たなVDKCを追加する際において、適切にリソースの割り当てを行うことができる。
以上、幾つかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、実施例1乃至実施例5の少なくともいずれか2つの実施例に係る計算機システムを組み合わせた計算機システムを構成するようにしても良い。また、例えば、実リソース及び実ストレージ装置はそれぞれ物理リソース及び物理ストレージ装置と呼ばれてもよい。