次に、本発明の実施形態を添付図面に従って説明する。図1は、計算機システムの第1の実施形態を示すハードウエアブロック図である。このシステムは、計算機1と、計算機1に直結される直結ストレージ2と、外部ストレージ3と、管理者が直結ストレージ2及び外部ストレージ3を管理するための管理端末(或いは管理計算機)4と、そして、計算機1と外部ストレージ3と管理端末4とを相互に接続するネットワーク5と、を備えている。計算機1とこれに直結するストレージ2によって各サイトでのストレージシステムが構成されることになる。
計算機1、外部ストレージ3、及び、管理端末4は、ネットワーク5に、銅ケーブルや光ファイバケーブル等の通信線22を介して接続している。計算機1と直結ストレージ2とは、銅ケーブルや光ファイバケーブル等の通信線23によって接続されている。
計算機1のストレージ制御プログラム(後述)は、VMが、直結ストレージ2、及び、外部ストレージ3の論理化された記憶領域にアクセスするための、論理ボリューム(LU:Logical Unit)を設定している。後述のとおり、この論理ボリュームは容量が仮想化されたもの、すなわち、実容量を有しない仮想的なボリュームである。この仮想ボリュームには、例えば、シン・プロビジョニング(Thin Provisioning)によって、直結ストレージ2又は外部ストレージ3からストレージリソースが割当てられる。
直結ストレージ2は、Tire0に相当するものであって、例えば、SSD (Solid State Disk)のように、高速、高性能、高信頼性の記憶媒体を1つ以上備えたものを備えている。もっとも、直結ストレージ2がTire1に相当するものでることを妨げるものではない。
外部ストレージ3はTire2に相当するものであって、SASやSATAのハードディスクドライブのように、低速ではあるものの低コストの記憶媒体を1つ以上備えている。もっとも、直結ストレージ2がTire0である場合に、外部ストレージをTire1であってもよい。直結ストレージ2、及び、外部ストレージ3は、RAIDによって構成されていることが好ましいが、これに限るものではない。
ネットワーク5は有線でも無線でもかまわない。ネットワーク5が無線の場合、通信線22は不要である。また、ネットワーク5はEthernet、IP(Internet Protocol)ネットワーク、FC(Fibre Channel)ネットワーク、或いは、その他のネットワークでもよい。さらに、管理端末4、計算機1及び、外部ストレージ3を相互に接続する管理ネットワークがネットワーク5とは別であってもよい。
図2は、計算機1のハードウエアブロック図である。計算機1は、演算装置(CPU)11、揮発性の主メモリ12、計算機1と通信線22とを接続するネットワークインタフェース(NW IF)13、例えば、HDDなどの不揮発性の記憶装置14、計算機1と通信線23とを接続するデバイスインタフェース(デバイスIF)15、そして、CPU11と、主メモリ12とNW IF13と、HDD14と、デバイスIF15とを相互接続するバス等の通信線21と、を備えている。
HDD14は、プログラムや情報テーブルを記憶しており、CPU11は、プログラム、情報テーブルをHDD14から主メモリ12にマウントして、プログラムの実行やテーブルの参照等を行う。図2は、主メモリ12に格納されたプログラム及びテーブルを示している。
ストレージを制御するためのストレージ制御プログラム38は、階層制御プログラム31、分散制御プログラム32、内部I/O制御プログラム33、外部I/O制御プログラム34、管理端末通信プログラム35から構成されている。主メモリ12は、さらに、OSを含むアプリケーションプログラム36とVM制御プログラムから構成される。
従来、ストレージ制御プログラム38は、直結ストレージ2や外部ストレージ3において実行されていたが、計算機1は、ストレージ制御プログラム38を、アプリケーションプログラム36と共に自身の演算装置11によって実行するため、計算機1に直結された直結ストレージ2と、ネットワーク5を介して接続された外部ストレージ3との間で階層ストレージ管理(Hierarchical Storage Management)を可能にした。
以下、アプリケーションプログラム36、VM制御プログラム37、及びストレージ制御プログラム38の動作概要を説明する。各計算機のCPU11は、VM制御プログラム37を実行することによって、仮想的な計算機であるVMを計算機に1つ以上設定できる。そして、CPU11は、VM制御プログラム37に基づき、VMを実行主体として、アプリケーションプログラム36を実行する。VM制御プログラム37は、計算機の制御リソースを仮想化しているために、VMを複数の計算機の間で移動させることができる。
VM制御プログラム37は、VMに既述の仮想ボリュームを提供する。この仮想ボリュームを後述のように、仮想LUと呼ぶ。CPU11がアプリケーションプログラム36に基づき仮想LUにアクセスしてこれにデータを書き込む際、CPU11は、VM制御プログラム37に基づき、データ及びそのデータのアドレスを主メモリ12に退避し、その後、CPU11は、ストレージ制御プログラム38に基づき、そのデータを主メモリ12から、仮想LUに対応された、直結ストレージ2、又は、外部ストレージ3へ転送する。
一方、CPU11がアプリケーションプログラム36に基づき、仮想LUからデータを読み込む時、CPU11はVM制御プログラム37に基づき、そのデータのアドレスを主メモリ12に退避し、その後、CPU11はストレージ制御プログラム38に基づき、そのアドレスのデータを直結ストレージ2、又は外部ストレージ3から主メモリ12に転送する。
HDD14には、VMテーブル41、仮想LUテーブル42、外部ストレージテーブル43、マッピングテーブルマッピングテーブル44、直結ストレージページテーブル45、外部ストレージページテーブル46、そして、移行先決定テーブル47等の各種管理テーブルが格納されている。各テーブルの詳細は後述する。
図3は、管理端末4のハードウエアブロック図を示す。管理端末4は、CPU11、主メモリ12、NW IF13、HDD14、マウスやキーボード等の入力装置16、ディスプレイ等の出力装置17、及び、通信線21を備えている。
HDD14には、画面制御プログラム51、VM移動プログラム52、計算機通信プログラム53及び外部ストレージ通信プログラム54等のプログラムが格納される。また、HDD14には、計算機テーブル61、VMテーブル62、外部ストレージテーブル63及び状態テーブル44等のテーブルが格納されている。
CPU11は、これらのプログラムをHDD14Aから主メモリ21に複製して実行する。CPU11はさらにテーブルをHDD14Aから主メモリ21に複製して参照する。また、主メモリ21のテーブルは、CPU11により書き換えられ、そして、HDD14に複製される。
以後の説明において、ハードウエアの構成要素を示す符号について、VMの移動元計算機が有する構成要素の符号には[a]を付し、VMの移動先計算機の構成要素の符号には[b]を付し、管理端末の構成要素の符号には[c]を付すことによってお互いを区別することとする。例えば、CPU11aはVMの移動元計算機のものであり、CPU11bはVMの移動先計算機のものであり、CPU11cは管理端末のものである。
次に、複数の計算機間でのVMの移動と、VMの移動に伴う仮想LUの移動、及びデータの移動の動作について説明する。図4Aは複数の計算機間をVMが移動する前の状態を示す計算機システムのブロック図である。IDがSV1である計算機は、IDがDS1である直結ストレージに接続している。計算機SV1には、IDがVM1のVMが動作している。また、計算機SV1はIDがVL1である仮想LUを設定しており、VM1は仮想LU(VL1)にアクセスする。仮想LU(VL1)は、1つ以上のページからなる。ページとは、LUを構成する記憶領域の単位である。仮想ボリュームのページが記憶資源を有するのではなく、仮想LUのページにはストレージのLUのページが割り当てられる。仮想LUのページを仮想ページと呼ぶ。これに対して、ストレージのLUは記憶資源を有しているために、これを実LUと呼び、実LUのページを実ページと呼ぶ。
仮想LU(LV1)は、少なくとも、IDがVP11、VP12及びVP13である3つの仮想ページを有している。計算機SV1に直接接続した直結ストレージDS1は、IDがRL1である実LUを有し、これを計算機SV1に提供する。実LU(RL1)は、少なくとも、IDがRP11及びRP12である2つの実ページを有している。実ページRP11は仮想ページVP11に割当てられており、実ページRP12は仮想ページVP12に割当てられている。
IDがES1である外部ストレージ3は、ネットワーク5を介して計算機SV1にIDがRL3である実LUを提供する。実LU(RL3)は、少なくとも、IDがRP31及びRP32である実ページを有する。仮想ページVP11及び仮想ページVP12は、仮想VP13と比較して、VM1からのアクセス頻度が高いとする。そのため、仮想ページVP11及び仮想ページVP12に対するライトデータは、高速・高性能である直結ストレージDS1の実ページRP11及び実ページRP12にそれぞれ格納される。また、仮想ページVP13に対するライトデータは、低速・低性能である外部ストレージES1の実LU(RL3)の実ページRP31に格納される。
IDがSV2である計算機には、IDがDS2であるストレージが直接接続されている。計算機SV2では、IDがVM2であるVMが動作している。VM2は、IDがVL2である仮想LUにアクセスする。仮想LU(VL2)は、少なくとも、IDがVP21である仮想ページを有している。直結ストレージDS2は、計算機SV1に、IDがRL2である実LUを提供する。実LU(RL2)は、少なくとも、IDがRP21である実ページを有している。仮想ページVP21に対するデータは、実ページRP21に格納されている。これは、仮想ページVP21に実ページRP21が割り当てられからである。仮想ページVP21のアクセス頻度は、仮想ページVP12、及び、仮想ページVP13よりは高いが、仮想ページVP11より低いとする。
外部ストレージES1は、さらに、IDがRL4である実LUを有している。実LU(RL4)は、少なくとも、IDがRP41である実ページを有している。実ページRP41はまだどの仮想ページにも割り当てられていない。
図4Bは、複数の計算機間でVMが移動された後の計算機システムのブロック図である。管理者は、管理端末4を介して、計算機SV1から計算機SV2へ、VM1を移動すると、その移動に伴い、仮想LU(VL1)と、仮想LUの仮想ページVP11、VP12、及び、VP13が、計算機SV1から計算機SV2へ移動する。したがって、VMが移動する前、計算機SV1に存在していた、VMがVMに割当られたデータにアクセスするための管理・制御情報がVMの移動先である計算機SV2で再現できることになる。VMが移動直後、仮想ページと実ページとの対応関係はVMの移動前と同じである。
これに対して、図5Aは、移動先計算機において、デステージが行われた後の計算機システムのブロック図を示す。デステージとは、直結ストレージ2内の実ページのデータが外部ストレージ3の実ページへ移行されることである。VM1が計算機SV1から計算機SV2に移動して、VM1が仮想LU(VL1)の仮想ページにアクセスしようとすると、VM1は仮想計算機SV2からネットワーク5を経由し、さらに、計算機SV1から直結ストレージDS1の実ページにアクセスしなければならず、レイテンシが増大する。特に、アクセス頻度が高い仮想ページ(VP11)ほどこの傾向が大きくなる。このレイテンシを避けるためには、仮想LU(VL1)の仮想ページ、特に、VM1〜のアクセス頻度が高い仮想ページVP11のデータは計算機SV2の直結ストレージDS2の実ページにあることがよい。
そこで、管理端末4は、仮想ページVP11のために、直結ストレージDS2に空きページを作る必要から、仮想ページVP11よりアクセス頻度の低い仮想ページVP21に割り当てられた実ページRP21のデータを、直結ストレージDS2から外部ストレージES1の実LU(RL4)の未使用ページであるRP41にデステージする。そして、管理端末4は、先ず、仮想ページVP21に実ページRP41を再割り当てし、仮想ページVP21の実ページRP21に対する割り当てを解除する。
図5Bは、直結ストレージDS1の実ページRP11のデータが直結ストレージDS2の実ページRP21に直接移行された後の計算機システムのブロック図である。デステージにより、直結ストレージDS2に「空き」ページ(実ページRP21)が生成されたため、管理端末4は、VM1が使用する直結ストレージDS1内の実ページのうち、アクセス頻度の高い実ページRP11のデータを直結ストレージDS2内の実ページRP21へ移行する。そして、管理端末4は、仮想ページVP11と実ページRP11の割当を解除し、次いで、仮想ページVP11を直結ストレージDS2の実ページRP21に再割り当てする。
図6は、移動元計算機SV1においてデステージが行われた後の状態に係る計算機システムのブロック図を示す。計算機DS1には、計算機DS2に移動したVM1がアクセスする仮想ページVP12に割り当てられた実ページRP12がまだ存在している。この実ページは、計算機SV1に存在する他のVMがアクセスする仮想ページのために空ける方が好ましい。そこで、実ページRP12のデータが、外部ストレージES1内の空き実ページRP32にデステージされる。そして、管理端末4は仮想ページVP12に実ページRP32を再割り当てし、仮想ページVP12を実ページRP12の割り当てから解放する。
なお、移動するVM1がアクセスする全ての仮想ページのアクセス頻度が、移動先計算機上で動作するVMがアクセスする仮想ページのアクセス頻度より低い場合、直結ストレージ間でのデータ移行、及び、移動先計算機におけるデステージは実行されない。アクセス頻度の高い仮想ページには、より高速のストレージである、直結ストレージを割当てるようにするためである。また、直結ストレージ間でのデータ移行は、移動先計算機におけるデステージの後に実行されるが、移動元計算機におけるデステージは、直結ストレージ間でのデータ移行より前に実行されてもよい。
既述の実施形態では、VM毎に仮想LUが存在することを前提としたが、複数のVMが一つ又は複数の仮想LUを共有するようにしてもよい。その場合、CPU11a,11bは、どのVMが仮想LUのどの領域を使用するかを、VM制御プログラム37からストレージ制御プログラム38へ、特別なAPIを介して受け渡す必要がある。このようなAPIの例として、VMWare社の「vStorage API」がある。そのために、図36に示すように、仮想LUテーブル42にはエントリ424が追加され、エントリ424には、VMが使用する領域の範囲を示す情報、例えば、先頭アドレスと最後尾アドレスのペアが格納される。
次に、図7から図10までを用いて、既述の管理テーブルの構造を説明する。これらのテーブルは配列構造を持ち、1つ以上のレコードを格納する。ただし、データ構造が配列構造に限定されるものではない。
図7Aは、VMの管理・制御情報を規定するVMテーブル41(図2)のデータ構造の例を示すものである。VMテーブル41は、計算機1において動作するVMの数分のレコードを有する。本テーブルのレコードは、VMのIDが格納されるエントリ411、VMに割り当てられたWWNが格納されるエントリ412、VMがアクセスする外部ストレージのIDとそのLUNがそれぞれ格納されるエントリ413とエントリ414とから構成される。VMに割当てられたWWNを仮想WWNと呼ぶ。VMテーブル41aは計算機SV1のVMに対してのものであり、VMテーブル41bは計算機SV2に対するものである。以後、テーブルを示す符号の末尾が「a」は、VM移動元計算機SV1のテーブルであることを示し、テーブルを示す符号の末尾が「b」は、VM移動元計算機SV2のテーブルであることを示す。a,bの区別がない場合は、管理端末のテーブルであるか、移動元計算機及び移動先計算機に共通のものであることを示す。
図7Bは、仮想LUの管理・制御情報を規定する仮想LUテーブル42のデータ構造の例を示す。このテーブルは、計算機1に設定されたVMの数分のレコードを有する。このテーブルのレコードには、VMがアクセスする仮想LUのLUNが格納されるエントリ421、仮想LUに設定されたWWNが格納されるエントリ422、及び、仮想LUの仮想容量が格納されるエントリ423から構成される。仮想LUテーブル42a及び仮想LUテーブル42bは、それぞれ、計算機SV1及び計算機SV2の仮想LUテーブルである。
図7Cは、外部ストレージ3の特性を示す外部ストレージテーブルのデータ構造を示す一例である。このテーブルは、外部ストレージの数分のレコードを有する。このテーブルのレコードには、外部ストレージ3のIDが格納されるエントリ431、及び、外部ストレージ3のWWNが格納されるエントリ432がある。計算機SV1及び計算機SV2は、同じ内容の外部ストレージテーブル43を備えている。
図8Aは、VMから仮想LUへのアクセスを直結ストレージ2、又は、外部ストレージ3に対するアクセスする変換するための管理・制御情報を規定したマッピングテーブルマッピングテーブル44のデータ構造の例を示す。このテーブルは、計算機1がアクセスする仮想LUを構成する仮想ページ数分のレコードを有する。
このテーブルのレコードには、仮想ページを含む仮想LUのLUNが格納されるエントリ441と、仮想ページのIDが格納されるエントリ442と、VMから仮想ページにアクセスされた頻度が格納されるエントリ443と、仮想ページのデータが実際に格納されるストレージのIDが格納されるエントリ444と、データが実際に格納される実LUのLUNが格納されるエントリ445と、データが実際に格納される実ページのIDが格納されるエントリ446とがある。マッピングテーブルマッピングテーブル44a及びマッピングテーブルマッピングテーブル44bは、それぞれ計算機SV1及び計算機SV2のテーブルである。
図8Bは直結ストレージの管理・制御情報を規定した直結ストレージページテーブル45のデータ構造の例である。このテーブルは、直結ストレージ2を構成する実ページ数分のレコードを有する。このテーブルのレコードには、直結ストレージのIDが格納されるエントリ451と、実LUのLUNが格納されるエントリ452と、実ページのIDが格納されるエントリ453と、実ページの状態が格納されるエントリ454とが存在する。実ページの状態には、未割当を表す[Not Assigned]、実ページが仮想ページに対して割当済みを表す[Assigned]、及び、割当ての予約がされていることを示す[Reserved]がある。直結ストレージページテーブル45a及び45bは、それぞれ計算機SV1及び計算機SV2のテーブルである。
図9は、外部ストレージの実ページの管理・制御情報を規定する、外部ストレージページテーブル46(図2)のデータ構造の例である。このテーブルは、計算機1がアクセスする外部ストレージ3の実LUを構成する実ページ数分のレコードを有する。このテーブルのレコードには、レコードに対応する実ページを含む外部ストレージ3のIDが格納されるエントリ461と、実ページを含む実LUのLUNが格納されるエントリ462と、実ページのIDが格納されるエントリ463、及び、実ページの状態が格納されるエントリ464とがある。実ページの状態には、未割当を表す[Not Assigned]、及び、割当済みを表す[Assigned]がある。外部ストレージページテーブル46a及び46bは、それぞれ計算機SV1及び計算機SV2のテーブルである。移行先決定テーブル47の説明は図21Aにおいて後述する。
図10Aは、計算機の管理・制御情報を規定する、管理装置4の計算機テーブル61(図3)のデータ構造の例を示す。このテーブルは、計算機システムに存在する計算機の数分のレコードを有する。テーブルのレコードには、計算機1のIDが格納されるエントリ611と、計算機1のIPアドレスが格納されるエントリ612と、計算機のWWNが格納されるエントリ613とがある。
図10Bは、VMの管理・制御情報を規定する、管理装置4のVMテーブル62(図3)のデータ構造の例である。このテーブルは、システム内のVMの数分のレコードを有する。テーブルの各レコードは、当該レコードに対応するVMのIDが格納されるエントリ621、及び、VMが動作する計算機1のIDが格納されるエントリ622とから構成される。
図10Cは、外部ストレージの管理・制御情報を規定する、管理端末4の外部ストレージテーブル63(図3)のデータ構造の例を示す。このテーブルは、外部ストレージ3数分のレコードを有する。テーブルのレコードは、外部ストレージ3のIDが格納されるエントリ631、外部ストレージ3のIPアドレスが格納されるエントリ632、及び、外部ストレージのWWNが格納されるエントリ633と、がある。状態テーブル64の説明は図21Bにおいて後述する。
図11と図12とを用いて、管理端末4のCPU11が、画面制御プログラム51に基づいて出力装置17に表示するグラフィカルユーザインタフェース(GUI)を説明する。さらに、計算機1の主メモリ12a.12bや管理端末4の主メモリ12cに格納されるテーブルの初期化処理の動作を説明する。
図11Aは、計算機システムに計算機を追加するための画面1100の例を示す。管理者は、計算機1を新たにネットワーク5に接続するたびにこの画面を利用する。この画面は、追加される計算機1のIDが入力される領域1101、計算機1のIPアドレスが入力される領域1102、計算機1にアクセスするためのWWNが入力される領域1103、計算機1に直結される直結ストレージ2のIDが入力される領域1104、直結ストレージ2に作成される実LUのLUNが入力される領域1105、実LUの容量が入力される領域1106、管理者が計算機1を追加するためのボタン1107、及び管理者が計算機1の追加を取りやめるためのボタン1108とから構成される。
管理者がボタン1107をクリックすると、管理端末4のCPU11cは、画面制御プログラム51に基づき、領域1101、領域1102、及び領域1103に入力されたデータを用いて新しいレコードを計算機テーブル61(図10A)に追加する。
また、管理端末4のCPU11cは、計算機通信プログラム53に基づき、領域1101に入力されたIDを持つ計算機1に対して、直結ストレーにLUを作成するU作成要求を送信する。この要求の送信先IPアドレスは領域1102に入力されたIPアドレスである。この要求には、領域1104、領域1105、及び領域1106に入力されたデータが含まれる。なお、直結ストレージが管理ネットワークに接続されている場合には、この作成要求を直結ストレージに直に送ってもよい。
計算機1がこの要求を受信すると、計算機1のCPU11は、管理端末通信プログラム35に基づき、この要求に含まれるデータを取り出す。次に、計算機1のCPU11は、内部I/O制御プログラム33に基づき、領域1104に入力されたIDを持つ直結ストレージ2に、領域1105に入力されたLUNと領域1106に入力された容量を持つ実LUを作成する。
次に、計算機1のCPU11は、内部I/O制御プログラム33に基づき、1つ以上のレコードを直結ストレージページテーブル45(図8B)に追加する。レコードの数は、領域1106に入力されたデータ、すなわち、作成された直結ストレージ2の実LUの容量をページのサイズで割った数である。各レコードのエントリ451には、領域1104に入力されたデータ、すなわち、直結ストレージ2のIDを、エントリ452には領域1105、すなわち、作成された実LUのLUNを、エントリ453には、レコードに対応するページのIDを、エントリ454には未割当を表す値、例えば、「Not Assigned」がそれぞれ格納される。ページのIDは、自動的に採番される。そして、計算機1のCPU11は、管理端末通信プログラム35に基づき、管理端末4へ直結ストレージ内にLUを作成した旨の応答を送信する。管理端末4がこの応答を受信すると、管理端末4のCPU11は、画面制御プログラム51に基づき、画面1100を消去する。
図11Bは、外部ストレージ追加画面1110の例を示す。この画面は、追加される外部ストレージ3のIDが入力される領域1111、外部ストレージ3のIPアドレスが入力される領域1112、外部ストレージ3にアクセスするためのWWNが入力される領域1113、管理者が外部ストレージ3を追加するためのボタン1114、及び、管理者が外部ストレージ3の追加を取りやめるためのボタン1115を有している。
管理者がボタン1114をクリックすると、管理端末4のCPU11cは、画面制御プログラム51に基づき、領域1111、領域1112、及び、領域1113に入力されたデータを用いて新しいレコードを外部ストレージテーブル63(図10C)に追加する。
また、管理端末4のCPU11cは、計算機通信プログラム53に基づき、計算機テーブル61(図10A)に登録されている全ての計算機1に対して、外部ストレージ追加要求を送信する。この要求には、領域1111及び領域1113に入力されたデータが含まれる。
計算機1がこの要求を受信すると、計算機1のCPU11は、管理端末通信プログラム
35に基づき、この要求に含まれるデータを取り出す。次に、計算機1のCPU11は、外部I/O制御プログラム34に基づき、1つのレコードを外部ストレージテーブル43(図7C)に追加する。追加されるレコードのエントリ431には領域1111に入力されたデータ、すなわち、外部ストレージ3のIDが、エントリ432には領域1113に入力されたデータ、すなわち、外部ストレージ3のWWNがそれぞれ格納される。そして、計算機1のCPU11は、管理端末通信プログラム35に基づき、管理端末4へ外部ストレージ追加応答を送信する。管理端末4が全ての計算機1から外部ストレージ追加応答を受信すると、管理端末4のCPU11cは、画面制御プログラム51に基づき、画面1110を消去する。
図12は、VMを計算機に追加するために、管理装置4の設定画面1200の例を示す。画面は、VMを追加する計算機1を選択する領域1201、VMのIDを入力する領域1202、VMが利用する仮想WWNを入力する領域1203、VMがアクセスする仮想LUのLUNを入力する領域1204、仮想LUの仮想容量を入力する領域1205、VMがアクセスする外部ストレージ3のIDを選択する領域1206、VMがアクセスする外部ストレージ3内の実LUのLUNを入力する領域1207、実LUの容量を入力する領域1208、管理者がVMを追加するためのボタン1209、及び管理者がVMの追加を取りやめるためのボタン1210を有している。
管理者がボタン1209をクリックすると、管理端末4のCPU11cは、画面制御プログラム51に基づき、領域1201、及び、領域1102に入力されたデータを用いて新しいレコードをVMテーブル62(図10B)に追加する。
また、管理端末4のCPU11cは、外部ストレージ通信プログラム54に基づき、領域1206で選択されたIDを持つ外部ストレージ3に対して、領域1207に入力されたLUNと領域1208に入力された容量を持つ実LUの作成要求を送信する。管理端末4がこの要求に対応する応答を外部ストレージ3から受信すると、管理端末4のCPU11は、計算機通信プログラム53に基づき、領域1201で選択されたIDを持つ計算機1に対して、VM追加準備要求を送信する。この要求には、領域1202、領域1203、領域1204、領域1205、領域1206、領域1207及び領域1208に入力或いは選択されたデータが含まれる。
計算機1がこの要求を受信すると、計算機1のCPU11は、管理端末通信プログラム35に基づき、この要求に含まれるデータを取り出す。次に、計算機1のCPU11は、外部I/O制御プログラム34に基づき、1つ以上のレコードを外部ストレージページテーブル46(図9)に追加する。
追加するレコードの数は、領域1208に入力されたデータ、すなわち、作成された外部ストレージ3の実LUの容量を実ページのサイズで割った数である。追加したレコードのエントリ461には領域1206で選択されたデータ、すなわち外部ストレージ3のID、エントリ462には領域1207で入力されたデータ、すなわち、作成された実LUのLUN、エントリ463には実LUのLUNに対応するページのID、エントリ464には未割当を表す値、例えば「Not Assigned」がそれぞれ格納される。ページのIDは、自動的に採番される。
次に、計算機1のCPU11は、外部I/O制御プログラム34に基づき、1つのレコードをVMテーブル41(図7A)に追加する。追加されたレコードのエントリ411に領域1202に入力されたデータ、すなわち、追加されるVMのIDを、エントリ412に領域1203に入力されたデータ、すなわち、追加されるVMが利用する仮想WWNを、エントリ413には領域1206で選択されたデータ、すなわち追加されるVMがアクセスする外部ストレージ3のIDを、エントリ414には領域1207に入力されたデータ、すなわち、追加されるVMがアクセスする外部ストレージ3内の実LUのLUNをそれぞれ格納する。
次に、計算機1のCPU11は、内部I/O制御プログラム33に基づき、1つのレコードを仮想LUテーブル42(図7B)に追加する。追加するレコードのエントリ421に、領域1204に入力したデータ、すなわち、追加するVMに提供される仮想LUのLUNを、エントリ422に、領域1203に入力したデータ、すなわち、追加するVMが利用する仮想WWNを、エントリ423に、領域1205に入力したデータ、すなわち、前記仮想LUの仮想容量をそれぞれ格納する。
次に、計算機1のCPU11は、内部I/O制御プログラム33に基づき、1つ以上のレコードをマッピングテーブルマッピングテーブル44(図8A)に追加する。追加されるレコードの数は、領域1205に入力したデータ、すなわち、仮想LUの仮想容量をページのサイズで割った数である。追加する各レコードのエントリ441には領域1204に入力したデータ、すなわち、仮想LUのLUNを、エントリ442にはレコードに対応するページのIDを、エントリ443には未だアクセスしていない事を表すデータ、すなわち、「0」を、エントリ444、エントリ445、及びエントリ446にはまだ仮想ページに実ページが割り当てられていない事を表すデータ、例えば「N/A」をそれぞれ格納する。ページのIDは、自動的に採番される。そして、計算機1のCPU11は、管理端末通信プログラム35に基づき、管理端末4へVMの追加の準備が完了した旨の応答を送信する。
管理端末4がこの応答を受信すると、管理端末4のCPU11は、計算機通信プログラム53に基づき、領域1201で選択されたIDを持つ計算機1に対して、VMを追加する要求を送信する。この要求には、領域1202、領域1203及び領域1204に入力されたデータが含まれる。計算機1がこの要求を受信すると、計算機1のCPU11は、管理端末通信プログラム35を実行して、この要求に含まれるデータを取り出す。次に、計算機1のCPU11は、VM制御プログラム37に基づき、領域1202に入力されたIDを持つVMを作成する。このVMは、領域1203に入力された仮想WWNを用いて、領域1204に入力されたLUNを持つ仮想LUにアクセスする。そして、計算機1のCPU11は、管理端末通信プログラム35に基づき、管理端末4へVMを追加した旨の応答を送信する。
管理端末4が計算機1からVM追加応答を受信すると、管理端末4のCPU11cは、画面制御プログラム51に基づき、画面1200を消去する。
図13から図19までを用いて、計算機1の動作を説明する。図13は、計算機1のCPU11が内部I/O制御プログラム33に基づいて、内部ライト処理を実行するフローチャートの例を示す。この処理は、計算機1のVMがアプリケーションプログラム36を実行して仮想LUへのデータの書き込みが発生した場合に開始される。
まず、計算機1のCPU11は、書き込まれるデータのアドレスからそのデータに対応する仮想ページを特定する。そして、CPU11は、マッピングテーブルマッピングテーブル44(図8A)を参照して、その仮想ページに実ページが既に割り当てられているかを調べる(S1301)。もし、まだ割り当てられていない場合、CPU11は、図14において後述するページ割当処理を実行する(S1302)。既に割り当てられている場合、CPU11は、マッピングテーブルマッピングテーブル44を参照して、割り当てられた実ページが直結ストレージ2の実ページか否かを調べる(S1303)。
この判定結果が直結ストレージ2の実ページである場合、CPU11は、直結ストレージ2の実ページに対してデータをライトする(S1304)。直結ストレージ2の実ページではない場合、CPU11は、マッピングテーブルマッピングテーブル44を参照して、割り当てられた実ページが外部ストレージ3の実ページか否かを調べる(S1305)。外部ストレージ3の実ページの場合、CPU11は、外部ストレージ3へデータをライトするする(S1306)。
外部ストレージ3の実ページではない場合、CPU11は、他の計算機1へデータをライトする(S1307)。S1304、S1306或いはS1307が完了後、CPU11は、マッピングテーブル44のS1301で特定された仮想ページに対応するレコードのアクセス頻度(443)を更新し(S1308)、本処理を終了する。
なお、CPUは、仮想ページを直結ストレージへ割当てるべきか外部ストレージへ割当てるべきかの区別を、マッピングテーブル44の、実ページに対応するレコードのストレージID444を見て、当該実ページが直結ストレージの実ページか外部ストレージの実ページかを判定することに基づいて実行する。
図14は、計算機1のCPU11が、内部I/O制御プログラム33に基づいて実行するページ割当処理のフローチャート例を示す。まず、CPU11は、直結ストレージページテーブル45を参照して、まだ割り当てられていない実ページを選択する(S1401)。
CPU11は、この選択が出来たか否かで処理を分岐する(S1402)。選択出来なかった場合、図15で詳しく説明する階層間データ緊急移行処理を実行し(S1403)、本処理を終了する。選択出来た場合、CPU11は、直結ストレージページテーブル45(図8B)の、選択された実ページに対応するレコードを更新する(S1404)。すなわち、レコードのエントリ454を、割当済みを表すデータ例えば[Assigned]に変更する。
次に、CPU11は、マッピングテーブル44のS1301で特定された仮想ページに対応するレコードを更新する(S1405)。すなわち、レコードのエントリ443を最新のアクセス頻度の値に、エントリ444を直結ストレージ2のIDに、エントリ445を直結ストレージ2に作成された実LUのLUNに、エントリ446をS1401で選択された実ページのIDにそれぞれ変更する。最後に、CPU11は、S1401で選択された実ページにデータをライトする(S1406)。
図15は、計算機1のCPU11が、階層制御プログラム31に基づいて、ストレージの階層間でデータを緊急に移行する処理のフローチャートの一例である。まず、CPU11は、マッピングテーブル44を参照し、直結ストレージ2の割り当て済み実ページのうち、最もアクセス頻度の低い実ページを選択し(S1501)、その実ページのデータをリードする(S1502)。
次に、CPU11は、外部ストレージページテーブル46(図9)を参照し、まだ割り当てられていない実ページを選択する(S1503)。CPU11は、この選択が出来たか否かで処理を分岐する(S1504)。選択出来なかった場合、直結ストレージ2にも外部ストレージ3にも空き容量がないため、CPU11は、エラーの発生を管理者に通知する(S1509)。この通知は、例えば、電子メールやイベントログで行われる。
選択が出来た場合、CPU11は、S1502でリードされたデータを、S1503で選択された実ページにライトし(S1505)、S1501で選択された実ページのデータを初期化する(S1506)。この初期化は、例えば、CPU11が、実ページの全ての記憶領域に0を書き込むことで行われる。
CPU11は、マッピングテーブル44(図8A)及び、外部ストレージページテーブル46(図9)を更新する(S1508)。すなわち、マッピングテーブル44のレコードのうち、S1501で選択された実ページが割り当てられている仮想ページに対応するレコードのエントリ444を外部ストレージ3のIDに、エントリ445を外部ストレージ3の実LUのLUNに、エントリ446をS1503で選択された実ページのIDにそれぞれ変更する。
また、マッピングテーブル44のレコードのうち、S1301で特定された仮想ページに対応するレコードのエントリ443を最新のアクセス頻度の値に、エントリ444を直結ストレージ2のIDに、エントリ445を直結ストレージ2に作成された実LUのLUNに、エントリ446をS1501で選択された仮想ページに割り当てられていた直結ストレージ2の実ページのIDにそれぞれ変更する。
計算機1のCPUは、外部ストレージページテーブル46(図9)の、S1503で選択された実ページに対応するレコードのエントリ464を、割当済みを表すデータにそれぞれ変更する。最後に、CPU11が、S1501で選択された実ページへデータをライトして(S1507)、本処理を終了する。
図16は、計算機1のCPU11が内部I/O制御プログラム33に基づいて実行する内部リード処理のフローチャートの一例である。本処理は、計算機1のVMがアプリケーションプログラム36に基づいて仮想LUからデータを読み込む時に実行される。
まず、CPU11は、読み込まれるデータのアドレスからそのデータに対応する仮想ページを特定する。そして、CPU11は、マッピングテーブル44(図8A)を参照して、その仮想ページに実ページが既に割り当てられているかを調べる(S1601)。割り当てられていない場合、CPU11は、0データを主メモリ12に送信して(S1602)、処理を終了する。
既に割り当てられている場合、CPU11は、マッピングテーブル44を参照して、割り当てられた実ページが直結ストレージ2の実ページか否かを調べる(S1603)。直結ストレージ2の実ページの場合、CPU11は、直結ストレージ2の実ページからデータをリードする(S1604)。
直結ストレージ2の実ページではない場合、CPU11は、マッピングテーブル44を参照して、割り当てられた実ページが外部ストレージ3の実ページか否かを調べる(S1605)。外部ストレージ3の実ページの場合、CPU11は、外部ストレージ3からデータをリードする(S1606)。
外部ストレージ3の実ページではない場合、CPU11は、他の計算機1からデータをリードする(S1607)。S1604、S1606或いはS1607が完了後、CPU11は、マッピングテーブル44のS1601で特定された仮想ページに対応するレコードのエントリ443(アクセス頻度)を更新する(S1608)。
最後に、CPU11は、リードされたデータを主メモリ12に送信し(S1609)、処理を終了する。その後、CPU11がアプリケーションプログラム36に基づいて、主メモリ21に転送されたデータを読み出し、アプリケーションプログラムの様々な処理を実行する。なお、アクセス頻度に代わる特性としては、データの重要性、データの作成日付などがある。
図17Aは、計算機1のCPU11が外部I/O制御プログラム34に基づいて実行する外部ライト処理のフローチャートの一例である。この処理は、計算機1が他の計算機1のVMから書き込み要求を受領した時に実行される。
まず、CPU11は、書き込まれるデータのアドレスからそのデータに対応する仮想ページを特定する。そして、CPU11は、マッピングテーブル44を参照して、その仮想ページに直結ストレージ2の実ページが既に割り当てられているかを調べる(S1701)。仮想ページに直結ストレージの実ページが割り当てられていない場合、CPU11は、直結ストレージに他の計算機から受信したデータを書き込めないためにエラーを管理者に通知して(S1702)、この処理を終了する。一方、既に割り当てられている場合、CPU11は、S1701で特定された実ページにデータをライトして(S1703)、この処理を終了する。
図17Bは、計算機1のCPU11が外部I/O制御プログラム34に基づいて実行する外部リード処理のフローチャート例を示す。この処理は、計算機1が他の計算機1のVMから読み込み要求を受領した時に実行される。まず、CPU11は、読み込まれるべきデータのアドレスからそのデータに対応する仮想ページを特定する。
そして、CPU11は、マッピングテーブル44(図8A)を参照して、その仮想ページに直結ストレージ2の実ページが既に割り当てられているかを調べる(S1711)。まだ、割り当てがない場合、CPU11は、0データを他の計算機1へ送信し(S1712)、この処理を終了する。既に割り当てがあった場合、CPU11は、S1711で特定された実ページからデータをリードし(S1713)、そのデータを他の計算機1へ送信し(S1714)、この処理を終了する。
図18は、計算機1のCPU11が、階層制御プログラム31に基づいて、ストレージの階層間でデータを移行する処理の第1の形態に係るフローチャートである。本処理は、直結ストレージ2の空き容量、或いは、空き実ページを増やす目的で、CPU11が、直結ストレージ2に格納された比較的アクセス頻度の低いデータを外部ストレージ3へ移行する処理である。本処理は、予め決められた、或いは、管理者により入力された時間間隔で実行される。或いは、本処理は、直結ストレージ2の空きページ数が予め決められた、或いは、管理者により入力された閾値を下回った時に実行されてもよい。
まず、計算機1のCPU11は、直結ストレージページテーブル45(図8B)を参照し、直結ストレージ2の1つの実ページを選択する(S1801)。
次に、CPU11は、マッピングテーブル44(図8A)を参照し、S1801で選択された実ページが割り当てられた仮想ページのアクセス頻度が、予め決められた、或いは、管理者により入力された閾値より低いか否かを調べる(S1802)。アクセス頻度が所定のものより高い、CPU11は、S1808にジャンプする。一方、アクセス頻度が低い場合、CPU11は、外部ストレージページテーブル46を参照し、まだ割り当てられていない実ページを選択する(S1803)。
CPU11は、この選択が出来たか否かで処理を分岐する(S1804)。外部ストレージ3に空き容量がないため、選択が失敗した場合、CPU11はこの処理を終了する。選択が成功すると、CPU11は、S1801で選択された、直結ストレージの実ページのデータをReadし、そのデータをS1803で選択された、外部ストレージの実ページへWriteする(S1805)。さらに、CPU11は、S1801で選択された、直結ストレージの実ページのデータを初期化する(S1806)。
次いで、CPU11は、マッピングテーブル44(図8A)、直結ストレージページテーブル45(図8B)、及び、外部ストレージページテーブル46(図9)を更新する(S1807)。すなわち、マッピングテーブル44のレコードのうち、S1801で選択された実ページが割り当てられた仮想ページに対応するレコードのエントリ444を外部ストレージ3のIDに、エントリ445を外部ストレージ3の実LUのLUNに、エントリ446をS1803で選択された実ページのIDにそれぞれ変更する。また、直結ストレージページテーブル45の、S1801で選択された実ページに対応するレコードのエントリ454を、未割当を表すデータに変更する。さらに、外部ストレージページテーブル46の、S1803で選択された実ページに対応するレコードのエントリ464を、割当済を表すデータに変更する。CPU11は、S1801からS1807までの処理を、直結ストレージ2の全ての実ページに対して繰り返す(S1808)。
図19は、計算機1のCPU11が階層制御プログラム31に基づいて実行するストレージ階層間でデータを移行する処理の第2の形態に係るフローチャートである。本処理は、外部ストレージ3に格納された比較的アクセス頻度の高いデータに対する,VMからのアクセス性能を高める目的で、CPU11が、外部ストレージ3に格納された比較的アクセス頻度の高いデータを直結ストレージ2へ移行する。
本処理は、図18の階層間データ移行処理の直後に実行される。或いは、本処理は、予め決められた、また、管理者により入力された時間間隔で実行されても良い。また、本処理は、外部ストレージ3の空きページ数が予め決められた、或いは、管理者により入力された閾値を下回った時に実行されてもよい。
まず、CPU11は、外部ストレージページテーブル46(図9)を参照し、外部ストレージ3の1つの実ページを選択する(S1901)。次に、CPU11は、マッピングテーブル44(図8A)を参照し、S1901で選択された実ページが割り当てられた仮想ページのアクセス頻度が、予め決められた、或いは、管理者により入力された閾値より高いか否かを調べる(S1902)。
アクセス頻度が低い場合、CPU11は、S1908の処理にジャンプする。アクセス頻度が高い場合、CPU11は、直結ストレージページテーブル45を参照し、まだ、割り当てられていない実ページを選択する(S1903)。CPU11は、この選択が出来たか否かで処理を分岐する(S1904)。
直結ストレージ2に空き容量がないため、この選択が失敗すると、CPU11は、本処理を終了する。選択が成功すると、CPU11は、S1901で選択した、外部ストレージの実ページのデータをリードし、そのデータをS1903で選択した、直結ストレージの実ページへライトする(S1905)。
次に、CPU11は、S1901で選択された実ページのデータを初期化する(S1906)。さらに、CPU11は、マッピングテーブル44、直結ストレージページテーブル45、及び、外部ストレージページテーブル46を更新する(S1907)。すなわち、マッピングテーブル44のレコードのうち、S1901で選択された実ページが割り当てられた仮想ページに対応するレコードのエントリ444を直結ストレージ2のIDに、エントリ445を直結ストレージ2の実LUのLUNに、エントリ446をS1903で選択された実ページのIDにそれぞれ変更する。
また、直結ストレージページテーブル45の、S1903で選択された実ページに対応するレコードのエントリ454を、割当済を表すデータに変更する。さらに、外部ストレージページテーブル46の、S1901で選択された実ページに対応するレコードのエントリ464を、未割当を表すデータに変更する。CPU11は、S1901からS1907までの処理を、外部ストレージ3の実LUのうち、計算機1が使用する全ての実LUの全ての実ページに対して繰り返す(S1908)。
以下に、VMが移動する際の計算機システムの動作を説明する。図21Bは、VMの状態に関するテーブル64のデータ構造の例である。本テーブルは、移動中のVMの数分のレコードを有する。本テーブルの各レコードは、移動中のVMのIDが格納されるエントリ641、VMに関係するデータの状態が格納されるエントリ642から構成される。
図22Aは、管理端末4のCPU11cが、画面制御プログラム51に基づいて出力装置17に表示するVM移動画面2200の画面の例である。管理者は、VMを計算機間で移動させる時、このGUIを利用する。この画面は、VMの移動元の計算機1のIDを選択する領域2201、移動させるVMのIDを選択する領域2202、VMの移動先の計算機1のIDを選択する領域2203、管理者がVMを移動させるためのボタン2204、及び、管理者がVMの移動を取りやめるためのボタン2205から構成される。
管理者がボタン2204をクリックすると、管理端末4のCPU11cは、VM移動プログラム52に基づき、領域2202で選択されたVMに対応する、状態テーブル64のエントリ642を、VM移動中を表すステイタス、例えば、「VM移動中」に更新する。図4Aは、管理者がボタン2204を操作する前(VMが移動する前)での計算機システムの状態を示している。
図22Bは、管理端末4の状態表示画面2210の画面例を示す。本画面は、移動されるVMのIDが表示される領域2211、VMがアクセスするデータの状態が表示される領域2212、及び、VMの移動を途中で取り消すためのボタン2213から構成される。管理端末4のCPU11cは、状態テーブル64を更新した後、画面制御プログラム51に基づいて出力装置17に本画面を表示する。領域2212にはVM移動中を表すメッセージ、例えば、「VM移動中」が表示される。
図20は、VMが複数の計算機間を移動する過程での、計算機システムにおける通信シーケンスについてのタイムチャートの例である。図20は、図4A〜図6に対応するものである。すなわち、VM1は、計算機SV1から計算機SV2に移動し、それに伴い、ストレージ間でのデータ移動処理我実行される。VMの移動元となる計算機1を移動元計算機、VMの移動先となる計算機1を移動先計算機という。移動元計算機はSV1であり、移動先計算機はSV2である。
管理端末4のCPU11cは、状態表示画面2210(図22B)を表示した後、計算機通信プログラム53に基づき、領域2201で選択された移動元計算機(SV1)へVM移動要求2001を送信する。この要求には、領域2202で選択されたデータ、すなわち、移動するVMのID、及び、領域2203で選択されたデータ、すなわち、移動先計算機のIDが含まれる。また、この要求には、移動先計算機SV2のIPアドレス(図10A)も含まれる。
移動元計算機SV1がVM移動要求2001を受信すると、移動元計算機SV1のCPU11aは、管理端末通信プログラム35に基づき、この要求からデータを取り出す。次に、CPU11aは、分散制御プログラム32に基づき、仮想LUを計算機SV1から計算機SV2に移動するための要求2002を、移動先計算機SV2に送信する。
この要求には、VMテーブル41a(図7A)のレコードのうち、移動されるVM(VM1)に対応するレコードのデータ(仮想WWNが[00000001]、外部ストレージIDが[ES1]、そのLUNが[RL3])が含まれる。また、この要求には、仮想LUテーブル42a(図7B)のレコードのうち、VMに提供される仮想LUに対応するレコードのデータが含まれる。さらに、この要求には、マッピングテーブル44a(図8A)のレコードのうち、仮想LUに対応するレコードのデータが含まれる。さらにまた、この要求には、外部ストレージページテーブル46a(図9)のレコードのうち、VMが利用する実LUに対応するレコードのデータが含まれる。
移動先計算機(SV2)が仮想LU移動要求2002を受信すると、移動先計算機(SV2)のCPU11bは、分散制御プログラム32に基づき、この要求からデータを取り出し、取り出されたデータに基づき、VMテーブル41b(図7A)、仮想LUテーブル42b(図7b)、マッピングテーブル44b(図8A)及び外部ストレージテーブル46b(図9)を更新する。
そこで、この更新後の、計算機SV2のテーブルのデータ構造の例を説明する。VMテーブル41b(図23A)にはレコード4101が、仮想LUテーブル42b(図23B)にはレコード4201が、マッピングテーブル44b(図23C)には3つのレコード4401が、外部ストレージページテーブル46b(図23D)には2つのレコード4601がそれぞれ追加される。
次に、VMの移動先計算機(SV2)のCPU11bは、分散制御プログラム32に基づき、移行先決定テーブル47を作成する。移行先決定テーブルとは、VMの移動に伴い、ストレージ間でのデータの移行先をVMが移動された計算機が決定するために活用されるテーブルである。図21Aは、移行先決定テーブル47のデータ構造例を示す。本テーブルは、計算機1で動作するVMに提供される仮想LUのLUNが格納されるエントリ471、仮想LUに対応する仮想ページのIDが格納されるエントリ472、仮想ページのアクセス頻度が格納されるエントリ473、移行元のストレージのIDが格納されるエントリ474、移行先のストレージのIDが格納されるエントリ475から構成される。この移行先決定テーブル47の作成処理を、図27に基づいて説明する。
図27は、移動先計算機のCPU11bが分散制御プログラム32に基づいて実行する移行先ストレージを決定する処理のフローチャートの一例である。まず、CPU11bは、マッピングテーブル44b(図8A)から実ページが割り当てられている仮想ページに対応するレコードをアクセス頻度の高い順に取り出す。
次に、CPU11bは、取り出されたレコードのデータに基づき移行先決定テーブル47(図21A)にレコードを追加する。追加されるレコードのエントリ471には取り出されたレコードのエントリ441のデータが、エントリ472には取り出されたレコードのエントリ442のデータが、エントリ473には取り出されたレコードのエントリ443のデータが、エントリ474には取り出されたレコードのエントリ444のデータが、エントリ475には未決定を表すデータ、例えば「TBD」がそれぞれ格納される。以上の処理を、マッピングテーブル44bの、実ページが割り当てられている仮想ページに対応する全てのレコードに対して実行する(S2701)。
次に、CPU11bは、移行先決定テーブル47の、直結ストレージDS2の実LUのページ数分のレコードをアクセス頻度の高い順に選択する(S2702)。そして、CPU11bは、それらのレコードのエントリ475移動先計算機SV2の直結ストレージ2のID(DS2)を格納する(S2703)。最後に、CPU11bは、残りのレコードのエントリ475に外部ストレージ3のIDを格納する(S2704)。これは、VMの移動によってDS2の実ページの消費を抑制するという配慮のためである。
なお、変形例として、たとえば、DS2のRP21をRP41にマイグレーションすることなくそのままにし、RP11にDS2の空の実ページを割当てることも考えられる。
移動先計算機(SV2)のCPU11bは、このように移行先決定テーブル47(図21A)を作成した後、仮想LU移動要求に対する応答2003を移動元計算機(SV1)に送信する。 移動元計算機(SV1)が仮想LU移動応答2003を受信すると、移動元計算機(SV1)のCPU11aは、VM制御プログラム37に基づき、移動先計算機(SV2)に対して、VM移動要求2004を送信する。
移動先計算機(SV2)がVM移動要求2004を受信すると、移動先計算機(SV2)のCPU11aは、仮想LU移動要求2002に含まれている情報を利用して、VM制御プログラム37に基づき、移動されたVMを作成し、VM移動の応答2005を移動元計算機(SV1)に送信する。
移動元計算機(SV1)がVM移動応答2005を受信すると、移動元計算機SV1のCPU11aは、移動されたVMを停止し、VMを削除する処理を行う。CPU11aは、分散制御プログラム32に基づき、VMテーブル41a、仮想LUテーブル42a、マッピングテーブル44a、及び外部ストレージページテーブル46aを更新する。すなわち、CPU11aはこれらのテーブルのレコードのうち、移動先計算機SV2に送信したレコードを削除する。そして、CPU11aは、管理端末通信プログラム35に基づき、管理端末4にVM移動の応答2006を送信する。図4Bは、この時点でのシステムを示している。
次いで、移動されたVMのデータの状態は、VM移動中から移動先計算機SV2におけるデステージ中に遷移する。従って、管理端末4のCPU11cは、VM移動プログラム52に基づき、状態テーブル(図21B)のエントリ642を移動先計算機におけるデステージ中を表すデータ、例えば、「移動先計算機におけるデステージ中」に変更し、そして、画面制御プログラム51に基づき、領域2202(図22A)を移動先計算機SV2におけるデステージ中を表すメッセージ、例えば、「移動先計算機におけるデステージ中」に変更する。その後、管理端末4のCPU11cは、計算機通信プログラム53に基づいて、移動先計算機SV2に移動先計算機デステージ要求2007を送信する。
移動先計算機SV2が移動先計算機デステージ要求2007を受信すると、移動先計算機SV2のCPU11bは、分散制御プログラム32に基づき、デステージ処理1を実行する。デステージ処理1とは、移動先計算機SV2の直結ストレージDS2から外部ストレージES1へのデステージ処理のことである。
図28は、デステージ処理1のフローチャートの例を示す。まず、移動先計算機SV2のCPU11bは、移行先決定テーブル47(図21A)を参照し、移行元ストレージが移動先計算機SV2の直結ストレージDS2であり、かつ、移行先ストレージが外部ストレージES1である仮想ページを1つ選択する(S2801)。
次に、CPU11bは、外部ストレージページテーブル46b(図9)を参照し、外部ストレージ3の未割当の実ページを選択する(S2802)。CPU11bは、この選択が出来たか否かによって、処理を分岐する(S2803)。選択が出来なかった場合、CPU11bは、エラーが発生したことを管理者に通知する(S2804)。選択が出来た場合、CPU11bは、S2801で選択された仮想ページに割り当てられた、直結ストレージDS2の実ページのデータをリードし、S2802で選択された、外部ストレージの実ページへライトする(S2805)。次に、CPU11bは、S2801で選択された実ページのデータを初期化する(S2806)。
そして、CPU11bは、マッピングテーブル44b(図8A)、直結ストレージページテーブル45b(図8B)、及び、外部ストレージページテーブル46b(図9)を更新する(S2807)。すなわち、マッピングテーブル44bのレコードのうち、S2801で選択された仮想ページに対応するレコードのエントリ444を外部ストレージ3のIDに、エントリ445を外部ストレージES1の実LUのLUNに、エントリ446をS2802で選択された実ページのIDにそれぞれ変更する。
また、直結ストレージページテーブル45bの、S2801で選択された、仮想ページに割り当てられた実ページに対応するレコードのエントリ454を、予約済を表すデータ、例えば、「Reserved」に変更する。さらに、外部ストレージページテーブル46bの、S2802で選択された実ページに対応するレコードのエントリ464を、割当済を表すデータに変更する。
移動先計算機SV2のCPU11bは、S2801からS2807までの処理を、移行元ストレージが移動先計算機の直結ストレージ2であり、かつ移行先ストレージが外部ストレージ3である全ての実ページに対して繰り返す(S2808)。
図24に、デステージ処理1が完了した後の、テーブルのデータ構造例を示す。マッピングテーブル44b(図24A)のレコード4402が、直結ストレージページテーブル45b(図24B)のレコード4502が、外部ストレージページテーブル46b(図24C)のレコード4602が、それぞれ変更される。移動先計算機(SV2)のCPU11は、デステージ処理1を完了すると、移動先計算機デステージ応答2008を管理端末4へ送信する。図5Cは、この時点での計算機システムを示している。
次に、移動されたVMに関係するデータの状態は、移動先計算機におけるデステージ中から直結ストレージ間移行中に遷移する。従って、管理端末4のCPU11cは、VM移動プログラム52に基づき状態テーブル(図21B)のエントリ642を、直結ストレージ間移行中を表すデータ、例えば、「直結ストレージ間移行中」に変更し、また、画面制御プログラム51に基づき領域2202を、直結ストレージ間移行中を表すメッセージ、例えば、「直結ストレージ間移行中」に変更する。その後、管理端末4のCPU11cは、計算機通信プログラム53に基づいて、移動先計算機SV2に直結ストレージ間移行要求2009を送信する。
移動先計算機SV2が直結ストレージ間移行要求2009を受信すると、移動先計算機SV2のCPU11bは、分散制御プログラム32に基づき、直結ストレージ間でのデータ移行処理を実行する。図29は、直結ストレージ間移行処理のフローチャートの例を示す。まず、移動先計算機SV2のCPU11bは、移行先決定テーブル47(図21A)を参照し、移行元ストレージが移動元計算機SV1の直結ストレージDS1であり、かつ移行先ストレージが移動先計算機SV2の直結ストレージDS2である仮想ページを1つ選択する(S2901)。この結果、仮想ページVP11が線なくされる。
次に、CPU11bは、直結ストレージページテーブル45b(図8B)を参照し、直結ストレージDS2の予約済ページを選択する(S2902)。この予約は、図28のステップs2807で行われている。予約済みページの選択に代えて、未割当の実ページを選択することでもよい。CPU11bは、この選択が出来たか否かによって、処理を分岐する(S2903)。選択が出来なかった場合、CPU11bは、エラーが発生したことを管理者に通知する(S2904)。
選択が出来た場合、CPU11bは、S2901で選択された仮想ページに割り当てられた、移行元ストレージDS1の実ページのデータをリードし、S2902で選択された、移行先ストレージDS2の実ページへライトする(S2905)。CPU11bは、S2901で選択された仮想ページに割り当てられた、移行元ストレージDS1の実ページについて、データの初期化と割り当て解放を移動元計算機SV1に要求する(S2906)。この要求に対応する応答を移行元計算機SV1のCPU11aから受信すると、CPU11bは、マッピングテーブル44b(図8A)及び直結ストレージページテーブル45b(図8B)を更新する(S2907)。
すなわち、マッピングテーブル44bのレコードのうち、S2901で選択された仮想ページに対応するレコードのエントリ444を直結ストレージDS2のIDに、エントリ445を直結ストレージDS2の実LUのLUNに、エントリ446をS2902で選択された実ページのIDにそれぞれ変更する。
また、直結ストレージページテーブル45bの、S2902で選択された実ページに対応するレコードのエントリ454を、割当済を表すデータに変更する。CPU11bは、S2901からS2907までの処理を、移行元ストレージが移動元計算機SV1の直結ストレージDS1であり、かつ、移行先ストレージが移動先計算機SV2の直結ストレージDS2である全ての実ページに対して繰り返す(S2908)。
図25に、直結ストレージ間移行処理が完了した後の、テーブルのデータ構造例を示す。マッピングテーブル44bのレコード4403が、移動元計算機の直結ストレージのページテーブル45aのレコード4503aが、移動先計算機の直結ストレージのページテーブル45bのレコード4503bが、それぞれ変更される。
移動先計算機SV2のCPU11bは、直結ストレージ間移行処理を完了すると、直結ストレージ間移行応答2010を管理端末4へ送信する。図5Aは、この時点でのシステムを示している。
ここで、移動されたVMのデータの状態は、直結ストレージ間移行中から移動元計算機におけるデステージ中に遷移する。従って、管理端末4のCPU11cは、VM移動プログラム52に基づき、状態テーブル64(図21B)のエントリ642を移動元計算機におけるデステージ中を表すデータ、例えば、「移動元計算機におけるデステージ中」に変更し、また、画面制御プログラム51に基づき領域2202を移動元計算機におけるデステージ中を表すメッセージ、例えば、「移動元計算機におけるデステージ中」に変更する。その後、管理端末4のCPU11は、計算機通信プログラム53に基づいて、移動先計算機(SV2)に移動元計算機デステージ要求2011を送信する。
移動先計算機SV2が移動元計算機デステージ要求2011を受信すると、移動先計算機SV2のCPU11bは、分散制御プログラム32に基づき、デステージ処理2を実行する。デステージ処理2とは、移動元計算機の直結ストレージ2から外部ストレージ3へのデステージ処理のことである。
図30は、デステージ処理2のフローチャートの例を示す。まず、移動先計算機CPU11bは、移行先決定テーブル47(図21)を参照し、移行元ストレージが移動元計算機SV1の直結ストレージDS1であり、かつ、移行先ストレージが外部ストレージES1である仮想ページを1つ選択する(S3001)。
次に、CPU11bは、外部ストレージページテーブル46b(図9)を参照し、外部ストレージ3の未割当の実ページを選択する(S3002)。CPU11bは、この選択が出来たか否かによって、処理を分岐する(S3003)。
選択が出来なかった場合、CPU11bは、エラーが発生したことを管理者に通知する(S3004)。選択が出来た場合、CPU11bは、S3001で選択された仮想ページに割り当てられた、直結ストレージDS1の実ページのデータをリードし、S3002で選択された、外部ストレージES1の実ページへライトする(S3005)。
次に、CPU11bは、S3001で選択された仮想ページに割り当てられた実ページについて、データの初期化と割り当ての解放を移動元計算機SV1に要求する(S3006)。この要求に対応する応答を受信すると、CPU11bは、マッピングテーブル44b(図26A)、及び、外部ストレージページテーブル46b(図26c)を更新する(S3007)。
すなわち、マッピングテーブル44bのレコードのうち、S3001で選択された仮想ページに対応するレコードのエントリ444を外部ストレージ3のIDに、エントリ445を外部ストレージ3の実LUのLUNに、エントリ446をS3002で選択された実ページのIDにそれぞれ変更する。
また、外部ストレージページテーブル46bの、S3002で選択された実ページに対応するレコードのエントリ454を、割当済を表すデータに変更する。CPU11bは、S3001からS3007までの処理を、移行元ストレージDS1が移動元計算機SV1の直結ストレージであり、かつ、移行先ストレージが外部ストレージES1である全ての実ページに対して繰り返す(S3008)。
次に、デステージ処理2(図30)が完了した後の、テーブルデータの構造例を説明する。移動先計算機SV2のマッピングテーブル44b(図26A)のレコード4404が、移動元計算機SV1の直結ストレージページテーブル45a(図26B)のレコード4504が、移動先計算機SV2の外部ストレージページテーブル46b(図26C)のレコード4604が、それぞれ変更される。なお、上記のS3005の説明では、移動先計算機SV2が、移動元計算機SV1から、直結ストレージDS1のデータをリードし、外部ストレージES1へデータ移行を行う、としたが、移動先計算機SV2が、移動元計算機SV1に対して直結ストレージDS1から外部ストレージES1へのデータ移行を指示してもよい。なお、移動元計算機デステージ要求2011が移動元計算機に送られことを妨げない。
移動先計算機SV2のCPU11bは、デステージ処理2を完了すると、移動元計算機デステージ応答2012を管理端末4へ送信し、移行先決定テーブル47(図21A)のデータをクリアする。図6は、この時点での計算機システムの状態を示している。
最後に、管理端末4が移動元計算機デステージ応答2012を受信すると、管理端末4のCPU11cは、VM移動プログラム52に基づき、VMテーブル62(図10B)を変更する。すなわち、VMテーブル62の移動対象となったVMに該当するレコードのエントリ632を、移動先計算機1のID(SV1)に変更する。
なお、VM移動の理由が、例えば計画的な保守の場合、管理者は、VMを移動先計算に移動した後、移動元計算機に再移動する可能性が高い。この場合、そのVMのデータを移動元計算機の直結ストレージ2に残しておき、かつデステージ処理2を実行しないようにすると、移動時のデータ移行に要する時間を短縮でき、かつ再移動時のデータ移行を不要化できる。本明細書では、このような動作モードを「高速再移動モード」と呼ぶ。この場合、VM移動画面2200に、管理者が高速再移動モードでの動作を指示するためのチェックボックスが追加される。
また、図29で説明された直結ストレージ間移行処理のS2906にて、CPU11bは、S2901で選択された仮想ページに割り当てられた、移動先計算機の実ページを暫定的に利用不可とする事を移動元計算機に要求する。そして、S2907にて、CPU11bは、マッピングテーブル44bのレコードのうち、S2901で選択された仮想ページに対応するレコードを更新する前に、そのレコードの内容を主メモリ21bに退避する。そのレコードの内容は、例えば、マッピングテーブル44b(図8B)に追加されたエントリ447に退避されてもよい。そして、VMが移動元計算機に再移動する時、エントリ447に退避された内容に従って、S2901で選択された仮想ページと、その仮想ページに元々割り当てられていた実ページ(移動元計算機の直結ストレージ2内の実ページ)との対応関係を回復する。
以上説明したように、既述の実施形態に係る計算機システムによれば、VMが、第1のストレージシステムから第2のストレージシステムに移動された際、移動先のストレージシステムは、自身のVMのデータも含めて、移動元ストレージシステムのVMのデータを移動先ストレージシステムの階層化された記憶領域に格納するため、VMが複数の計算機間を移動しても、複数の計算機に対するストレージの階層化制御の品質を維持し、計算機システムにおけるデータ管理を向上させることができる。
次に、本発明の第2の実施形態について、図31及び図32を用いて、第1の実施形態と相違する部分に限って説明する。第2の実施形態では、計算機システムの共有ストレージに外部ストレージES2が増設された時(図31)、計算機SV1又は計算機SV2のCPU11が、ストレージ制御プログラム38に基づいて、以前から存在していた外部ストレージ3のデータを増設された外部ストレージ3へ移行することで、性能及び容量を拡張する。
まず、図31を用いて、本実施形態におけるシステムの動作例を説明する。計算機SV1にはVM1が動作している。VM1は仮想LU(VL1)へアクセスする。仮想LU(VL1)は、少なくとも、VP11、VP12、及びVP13から構成される。直結ストレージDS1は計算機SV1に直結されており、計算機SV1に実LU(RL1)を提供する。実LU(RL1)は、少なくとも、実ページRP11から構成される。外部ストレージES1は、ネットワーク5を介して計算機SV1に実LU(RL3)を提供する。実LU(RL3)は、少なくとも、実ページRP31及びRP32から構成される。仮想ページVP11には実ページRP11が、仮想ページVP12には実ページRP31が、仮想ページVP13には実ページRP32がそれぞれ割り当てられている。
他方、計算機SV2ではVM2が動作する。VM2は仮想LU(VL2)へアクセスする。仮想LU(VL2)は、少なくとも、花王ページVP21及びVP22から構成される。直結ストレージDS2は計算機SV2に直結されており、計算機SV2に実LU(RL2)を提供する。実LU(RL2)は、少なくとも、実ページRP21から構成される。外部ストレージES1は、ネットワーク5を介して計算機SV2に実LU(RL4)を提供する。実LU(RL4)は、少なくとも実ページRP41から構成される。仮想ページVP21には実ページRP41が、仮想ページVP22には実ページRP21がそれぞれ割り当てられている。
管理者が、IDがES2である外部ストレージ3をネットワーク5に接続したものとする。外部ストレージES2は、ネットワーク5を介して計算機SV1にIDがRL5である実LUを提供する。実LU(RL5)は、少なくとも、IDがRP51である実ページ)から構成される。実LU(RL3)の空き容量が少なくなった、或いは、実LU(RL3)へのアクセス頻度が高く外部ストレージES1の性能が低下したといった理由により、実LU(RL3)を構成する実ページであるRP32のデータが実ページRP51に移行される。この移行を、外部ストレージ間移行という。そして、仮想ページVP13には、実ページRP51が再割り当てされて、仮想ページVP13に対する実ページRP32の割り当ては解除される。
図32は、計算機SV1のCPU11aが分散制御プログラム32に基づいて実行する外部ストレージ間でのデータ移行処理を実行するフローチャートの例である。本処理は、管理者が外部ストレージ追加画面1110を用いて、2つ目以降の外部ストレージES1をシステムに追加した時に実行される。まず、CPU11aは、追加された外部ストレージES2にLUの作成を要求し、外部ストレージページテーブル46a(図9)にレコードを追加する(S3201)。
次に、CPU11は、既に存在していた外部ストレージES1の実LUのうち、追加された外部ストレージES2へデータ移行する実LUを選択する(S3202)。次に、CPU11aは、S3202で選択された実LUを構成する実ページのうち、データ移行する実ページを選択する(S3203)。CPU11aは、S3201で作成された実LUの実ページのうち、未割当の実ページを選択する(S3204)。CPU11aは、S3203で選択された実ページのデータをReadし、S3204で選択された実ページへWriteし(S3205)、S3203で選択された実ページのデータを初期化する。そして、CPU11aは、マッピングテーブル44a及び外部ストレージページテーブル46aを更新する(S3206)。CPU11aは、S3203からS3206までの処理を全ページに対して実行する(S3207)。さらに、CPU11aは、S3201からS3207までの処理を全ての実LUに対して実行する(S3208)。
次に、本発明の第3の実施形態について、図33を用いて、第1の実施形態と相違する部分について説明する。第3の実施形態では、高速だが高価な記憶媒体を備えるストレージが計算機1に直結されるのではなく、計算機1に内蔵されることを特徴としている。
図33は、計算機1の変形例を示すブロック図である。計算機1は、CPU11、主メモリ12、NW IF13、HDD14、内部ストレージ6及びバス等の通信線21から構成される。内部ストレージ3は、計算機1に内蔵されている以外は第1の実施形態の直結ストレージ2と同様である。
次に、本発明の第4の実施形態について、図34及び図35を用いて、第1一の実施形態と相違する部分について説明する。第4の実施形態では、第1の実施例において、計算機が実行するとして説明したプログラムを直結ストレージ2のCPU11が実行する。
図34は、本実施形態のシステムの構成例を示す。このシステムの構成要素は第1の実施形態と同じであるが、直結ストレージ2が通信線22によってネットワーク5と接続される点のみ、第1の実施形態と異なる。
図35は、本実施形態の計算機1及び直結ストレージ22の構成例を示す。計算機1のCPU11は、アプリケーションプログラム36、及び、VM制御プログラム37を実行する。そして、CPU11がアプリケーションプログラム36に基づき仮想LUにデータを書き込む時、CPU11はVM制御プログラム37に基づき、そのデータの書き込み要求を直結ストレージ2へ送信する。他方、CPU11がアプリケーションプログラム36に基づき仮想LUからデータを読み込む時、CPU11はVM制御プログラム37に基づき、そのデータの読み込み要求を直結ストレージ2へ送信する。
直結ストレージ2は、CPU11、主メモリ12、NW IF13、デバイスIF15、通信線21及び1つ以上の不揮発性メモリ18から構成される。不揮発性メモリは、例えば、フラッシュメモリ、PRAM(Phase change RAM)、SSDであってもよい。直結ストレージ2のCPU11は、ストレージ制御プログラム38を実行する。また、直結ストレージ2の主メモリ12は、VMテーブル41、仮想LUテーブル42、外部ストレージテーブル43、マッピングテーブル44、直結ストレージページテーブル45、外部ストレージページテーブル46及び移行先決定テーブル47等のテーブルが格納される。
直結ストレージ2のCPU11は、ストレージ制御プログラム38に基づき、第1の実施形態において計算機1のCPU11が実行した各種処理を実行する。