(57)【特許請求の範囲】
【請求項１】
仮想マシンを実行する実行装置と、
前記実行装置の実行する仮想マシンの実行用データを記憶する記憶装置と、
前記実行装置を制御する制御装置と、
を具備するコンピュータシステムであって、
前記実行装置は、
仮想マシンの実行用データを記憶する第１記憶部と、
仮想マシンの実行要求を受けると、当該実行要求で要求された仮想マシンの実行用データを前記第１記憶部が記憶しているか否かを判定するデータ有無判定部と、
前記第１記憶部の記憶する前記実行要求で要求された仮想マシンの実行用データを用いて当該実行要求で要求された仮想マシンを実行する仮想マシン実行部と、
を具備し、
前記記憶装置は、
仮想マシンの実行用データを記憶する第２記憶部と、
前記データ有無判定部が、前記実行要求で要求された仮想マシンの実行用データを前記第１記憶部が記憶していないと判定すると、当該実行要求で要求された仮想マシンの実行用データを前記第２記憶部から取得して前記第１記憶部に記憶させるデータ転送部と、
を具備し、
前記制御装置は、
仮想マシン毎に、当該仮想マシンの第１使用時間と、当該仮想マシンの実行用データを生成するために実行用データをコピーされたコピー元の仮想マシンの第２使用時間とに基づいて、当該仮想マシンの実行用データを前記第１記憶部に記憶させる優先順位を、前記第１使用時間と前記第２使用時間の和が大きいほど優先順位が高くなるように決定する優先順位決定部と、
前記優先順位決定部の決定する前記優先順位に従って、前記優先順位が高い順に仮想マシンを選択し、選択した仮想マシンの実行用データを前記第１記憶部に記憶させるデータ登録部と、
を具備することを特徴とするコンピュータシステム。
【請求項２】
前記実行装置は、仮想マシンのユーザに応じてグループ分けされており、
前記制御装置は、
前記データ登録部は、前記実行装置のグループ毎に、前記優先順位決定部の決定する前記優先順位に従って、当該グループに属する実行装置の前記第１記憶部に、前記仮想マシンの実行用データを記憶させる
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記制御装置は、仮想マシンの使用履歴を記憶する使用履歴記憶部と、
コピー元の仮想マシンの実行用データをコピーして仮想マシンの実行用データが生成された場合に、前記コピー元の仮想マシンの使用終了時期を示す情報またはそれ以後の時期を示す情報を、実行用データが生成された仮想マシンの前記使用履歴における使用終了時刻の項目に書き込む制御部と、を具備し、
前記優先順位決定部は、前記使用履歴に基づいて、前記優先順位を、前記使用終了時期の項目に書き込まれた情報が示す時期が遅いほど優先順位が高くなるように決定することを特徴とする請求項１または請求項２に記載のコンピュータシステム。
【請求項４】
仮想マシンの実行用データを記憶する第１記憶部を具備して仮想マシンを実行する実行装置と、
前記実行装置の実行する仮想マシンの実行用データを記憶する第２記憶部を具備する記憶装置と、
前記実行装置を制御する制御装置と、
を具備するコンピュータシステムの仮想マシンデータ配置方法であって、
前記実行装置のデータ有無判定部が、仮想マシンの実行要求を受けると、当該実行要求で要求された仮想マシンの実行用データを前記第１記憶部が記憶しているか否かを判定するデータ有無判定ステップと、
前記実行装置の仮想マシン実行部が、前記第１記憶部の記憶する前記実行要求で要求された仮想マシンの実行用データを用いて当該実行要求で要求された仮想マシンを実行する仮想マシン実行ステップと、
前記記憶装置のデータ転送部が、前記データ有無判定ステップにて、前記実行要求で要求された仮想マシンの実行用データを前記第１記憶部が記憶していないと判定すると、当該実行要求で要求された仮想マシンの実行用データを前記第２記憶部から取得して前記第１記憶部に記憶させるデータ転送ステップと、
前記制御装置の優先順位決定部が、仮想マシン毎に、当該仮想マシンの第１使用時間と、当該仮想マシンの実行用データを生成するために実行用データをコピーされたコピー元の仮想マシンの第２使用時間とに基づいて、当該仮想マシンの実行用データを前記第１記憶部に記憶させる優先順位を、前記第１使用時間と前記第２使用時間の和が大きいほど優先順位が高くなるように決定する優先順位決定ステップと、
前記制御装置のデータ登録部が、前記優先順位決定ステップにて決定する前記優先順位に従って、前記優先順位が高い順に仮想マシンを選択し、選択した仮想マシンの実行用データを前記第１記憶部に記憶させるデータ登録ステップと、
を具備することを特徴とする仮想マシンデータ配置方法。
【請求項５】
仮想マシンの実行用データを記憶する第１記憶部を具備して仮想マシンを実行する実行装置と、
前記実行装置の実行する仮想マシンの実行用データを記憶する第２記憶部を具備する記憶装置と、
前記実行装置を制御する制御装置と、
を具備するコンピュータシステムに、
前記実行装置のデータ有無判定部が、仮想マシンの実行要求を受けると、実行要求で要求された仮想マシンの実行用データを前記第１記憶部が記憶しているか否かを判定するデータ有無判定ステップと、
前記実行装置の仮想マシン実行部が、前記第１記憶部の記憶する前記実行要求で要求された仮想マシンの実行用データを用いて当該実行要求で要求された仮想マシンを実行する仮想マシン実行ステップと、
前記記憶装置のデータ転送部が、前記データ有無判定ステップにて、前記実行要求で要求された仮想マシンの実行用データを前記第１記憶部が記憶していないと判定すると、当該実行要求で要求された仮想マシンの実行用データを前記第２記憶部から取得して前記第１記憶部に記憶させるデータ転送ステップと、
前記制御装置の優先順位決定部が、仮想マシン毎に、当該仮想マシンの第１使用時間と、当該仮想マシンの実行用データを生成するために実行用データをコピーされたコピー元の仮想マシンの第２使用時間とに基づいて、当該仮想マシンの実行用データを前記第１記憶部に記憶させる優先順位を、前記第１使用時間と前記第２使用時間の和が大きいほど優先順位が高くなるように決定する優先順位決定ステップと、
前記制御装置のデータ登録部が、前記優先順位決定ステップにて決定する前記優先順位に従って、前記優先順位が高い順に仮想マシンを選択し、選択した仮想マシンの実行用データを前記第１記憶部に記憶させるデータ登録ステップと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置の記憶する仮想マシンの実行用データをコンピュータが読み出して実行するコンピュータシステム、当該コンピュータシステムの仮想マシンデータ配置方法およびプログラムに関する。
【背景技術】
【０００２】
仮想マシンを実行する方法の１つに、記憶装置の記憶する仮想マシンの実行用データをコンピュータが取得して（例えば読み出して）実行する方法があり、この方法に関連して幾つかの技術が提案されている。
例えば、記憶装置が複数の仮想マシンの実行用データを記憶している場合に、幾つかの仮想マシンの実行用データをコンピュータが予め取得しておくことで、仮想マシン実行時に仮想マシンの実行用データをコンピュータが記憶装置から取得する処理を不要として、仮想マシン起動に要する時間を短縮する技術が知られている。
【０００３】
また、特許文献１に記載の仮想マシン配置装置は、各仮想マシンの仮想マシンワークロードＩＤ毎に、排他したい仮想マシンワークロードＩＤ及び排他優先度を含む条件式情報を記憶する仮想マシンワークロード情報ＤＢを備え、配置テーブルへの配置処理の途中で、最大物理マシン台数を超えた場合には、仮想マシンワークロード情報ＤＢ内の条件式情報のうち、排他優先度が最も低い条件式情報を削除し、削除の後、配置テーブル及び配置決定用テーブルを初期化して配置処理を再実行する。これにより、物理マシンの台数が制限されている場合でも仮想マシンを排他的に配置できるとされている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−２８３２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述した、幾つかの仮想マシンの実行用データをコンピュータが予め取得しておく方法によれば、コンピュータが、既にデータを取得している仮想マシンを実行する場合は、仮想マシン起動に要する時間を短縮できる。しかしながら、コンピュータが、データを取得していない仮想マシンを実行する場合は、仮想マシン実行時に仮想マシンの実行用データをコンピュータが記憶装置から取得する処理が必要となり、仮想マシン起動に時間を要してしまう。
【０００６】
そこで、仮想マシン起動に要する時間を短縮するために、実行される可能性の高い仮想マシンの実行用データを予めコンピュータが予め取得しておくようにすることが課題となる。しかし、特許文献１には、実行される可能性の高い仮想マシンの実行用データを予めコンピュータが取得しておく技術は開示されていない。
【０００７】
本発明は、このような事情を考慮してなされたものであり、その目的は、実行される可能性の高い仮想マシンの実行用データを予めコンピュータが取得しておくことのできるコンピュータシステム、仮想マシンデータ配置方法およびプログラムを提供することにある。
【課題を解決するための手段】
【０００８】
この発明は上述した課題を解決するためになされたもので、本発明の一態様によるコンピュータシステムは、仮想マシンを実行する実行装置と、前記実行装置の実行する仮想マシンの実行用データを記憶する記憶装置と、前記実行装置を制御する制御装置と、を具備するコンピュータシステムであって、前記実行装置は、仮想マシンの実行用データを記憶する第１記憶部と、仮想マシンの実行要求を受けると、当該実行要求で要求された仮想マシンの実行用データを前記第１記憶部が記憶しているか否かを判定するデータ有無判定部と、前記第１記憶部の記憶する前記実行要求で要求された仮想マシンの実行用データを用いて当該実行要求で要求された仮想マシンを実行する仮想マシン実行部と、を具備し、前記記憶装置は、仮想マシンの実行用データを記憶する第２記憶部と、前記データ有無判定部が、前記実行要求で要求された仮想マシンの実行用データを前記第１記憶部が記憶していないと判定すると、当該実行要求で要求された仮想マシンの実行用データを前記第２記憶部から取得して前記第１記憶部に記憶させるデータ転送部と、を具備し、前記制御装置は、仮想マシン毎に、当該仮想マシンの第１使用時間と、当該仮想マシンの実行用データを生成するために実行用データをコピーされたコピー元の仮想マシンの第２使用時間とに基づいて、当該仮想マシンの実行用データを前記第１記憶部に記憶させる優先順位を、前記第１使用時間と前記第２使用時間の和が大きいほど優先順位が高くなるように決定する優先順位決定部と、前記優先順位決定部の決定する前記優先順位に従って、前記優先順位が高い順に仮想マシンを選択し、選択した仮想マシンの実行用データを前記第１記憶部に記憶させるデータ登録部と、を具備することを特徴とする。
【０００９】
また、本発明の一態様によるコンピュータシステムは、上述のコンピュータシステムであって、前記実行装置は、仮想マシンのユーザに応じてグループ分けされており、前記制御装置は、前記データ登録部は、前記実行装置のグループ毎に、前記優先順位決定部の決定する前記優先順位に従って、当該グループに属する実行装置の前記第１記憶部に、前記仮想マシンの実行用データを記憶させることを特徴とする。
【００１０】
また、本発明の一態様によるコンピュータシステムは、上述のコンピュータシステムであって、前記制御装置は、仮想マシンの使用履歴を記憶する使用履歴記憶部と、コピー元の仮想マシンの実行用データをコピーして仮想マシンの実行用データが生成された場合に、前記コピー元の仮想マシンの使用終了時期を示す情報またはそれ以後の時期を示す情報を、実行用データが生成された仮想マシンの前記使用履歴における使用終了時刻の項目に書き込む制御部と、を具備し、前記優先順位決定部は、前記使用履歴に基づいて、前記優先順位を、前記使用終了時期の項目に書き込まれた情報が示す時期が遅いほど優先順位が高くなるように決定することを特徴とする。
【００１２】
また、本発明の一態様による仮想マシンデータ配置方法は、仮想マシンの実行用データを記憶する第１記憶部を具備して仮想マシンを実行する実行装置と、前記実行装置の実行する仮想マシンの実行用データを記憶する第２記憶部を具備する記憶装置と、前記実行装置を制御する制御装置と、を具備するコンピュータシステムの仮想マシンデータ配置方法であって、前記実行装置のデータ有無判定部が、仮想マシンの実行要求を受けると、当該実行要求で要求された仮想マシンの実行用データを前記第１記憶部が記憶しているか否かを判定するデータ有無判定ステップと、前記実行装置の仮想マシン実行部が、前記第１記憶部の記憶する前記実行要求で要求された仮想マシンの実行用データを用いて当該実行要求で要求された仮想マシンを実行する仮想マシン実行ステップと、前記記憶装置のデータ転送部が、前記データ有無判定ステップにて、前記実行要求で要求された仮想マシンの実行用データを前記第１記憶部が記憶していないと判定すると、当該実行要求で要求された仮想マシンの実行用データを前記第２記憶部から取得して前記第１記憶部に記憶させるデータ転送ステップと、前記制御装置の優先順位決定部が、仮想マシン毎に、当該仮想マシンの第１使用時間と、当該仮想マシンの実行用データを生成するために実行用データをコピーされたコピー元の仮想マシンの第２使用時間とに基づいて、当該仮想マシンの実行用データを前記第１記憶部に記憶させる優先順位を、前記第１使用時間と前記第２使用時間の和が大きいほど優先順位が高くなるように決定する優先順位決定ステップと、前記制御装置のデータ登録部が、前記優先順位決定ステップにて決定する前記優先順位に従って、前記優先順位が高い順に仮想マシンを選択し、選択した仮想マシンの実行用データを前記第１記憶部に記憶させるデータ登録ステップと、を具備することを特徴とする。
【００１３】
また、本発明の一態様によるプログラムは、仮想マシンの実行用データを記憶する第１記憶部を具備して仮想マシンを実行する実行装置と、前記実行装置の実行する仮想マシンの実行用データを記憶する第２記憶部を具備する記憶装置と、前記実行装置を制御する制御装置と、を具備するコンピュータシステムに、前記実行装置のデータ有無判定部が、仮想マシンの実行要求を受けると、実行要求で要求された仮想マシンの実行用データを前記第１記憶部が記憶しているか否かを判定するデータ有無判定ステップと、前記実行装置の仮想マシン実行部が、前記第１記憶部の記憶する前記実行要求で要求された仮想マシンの実行用データを用いて当該実行要求で要求された仮想マシンを実行する仮想マシン実行ステップと、前記記憶装置のデータ転送部が、前記データ有無判定ステップにて、前記実行要求で要求された仮想マシンの実行用データを前記第１記憶部が記憶していないと判定すると、当該実行要求で要求された仮想マシンの実行用データを前記第２記憶部から取得して前記第１記憶部に記憶させるデータ転送ステップと、前記制御装置の優先順位決定部が、仮想マシン毎に、当該仮想マシンの第１使用時間と、当該仮想マシンの実行用データを生成するために実行用データをコピーされたコピー元の仮想マシンの第２使用時間とに基づいて、当該仮想マシンの実行用データを前記第１記憶部に記憶させる優先順位を、前記第１使用時間と前記第２使用時間の和が大きいほど優先順位が高くなるように決定する優先順位決定ステップと、前記制御装置のデータ登録部が、前記優先順位決定ステップにて決定する前記優先順位に従って、前記優先順位が高い順に仮想マシンを選択し、選択した仮想マシンの実行用データを前記第１記憶部に記憶させるデータ登録ステップと、を実行させるためのプログラムである。
【発明の効果】
【００１４】
この発明によれば、実行される可能性の高い仮想マシンの実行用データを予めコンピュータが取得しておくようにできる。
【図面の簡単な説明】
【００１５】
【図１】本発明の一実施形態におけるコンピュータシステムの概略構成を示す構成図である。
【図２】同実施形態におけるノードコントローラ装置の概略構成を示す構成図である。
【図３】同実施形態におけるクラウドコントローラ装置の概略構成を示す構成図である。
【図４】同実施形態における記憶部の記憶する、仮想マシンの使用履歴情報の例を示す説明図である。
【図５】同実施形態における記憶部の記憶する、ＶＭテーブルの例を示す説明図である。
【図６】同実施形態におけるストレージサーバ装置が実行用データを記憶する仮想マシンの、派生関係の例を示す説明図である。
【図７】同実施形態における記憶部の記憶する、ユーザ別使用時間情報の例を示す図である。
【図８】同実施形態における記憶部の記憶する、ユーザグループ分類情報の例を示す説明図である。
【図９】同実施形態における記憶部の記憶する、ＮＣグループ分類情報の例を示す説明図である。
【図１０】同実施形態における記憶部の記憶する、グループ対応情報の例を示す説明図である。
【図１１】同実施形態において、起動する仮想マシンの実行用データがＶＭキャッシュ１３１（図２）に格納されていない場合に、コンピュータシステムが仮想マシンを起動する処理手順の例を示すシーケンス図である。
【図１２】同実施形態において、起動する仮想マシンの実行用データがＶＭキャッシュ（図２）に格納されている場合に、コンピュータシステムが仮想マシンを起動する処理手順の例を示すシーケンス図である。
【図１３】同実施形態において、コンピュータシステムが新たに仮想マシンを生成する際の処理手順の例を示すシーケンス図である。
【図１４】同実施形態において、コンピュータシステムがＶＭキャッシュを更新する処理手順の例を示すシーケンス図である。
【図１５】同実施形態において、新たに生成された仮想マシンに対する仮想マシン識別情報をＶＭ制御部が決定する処理手順を示すフローチャートである。
【図１６】同実施形態において、コンピュータシステムがＶＭキャッシュを更新する処理手を示すシーケンス図である。
【図１７】同実施形態において優先順位決定部が決定する各仮想マシンの優先順位の例を示す説明図である。
【図１８】同実施形態において、優先順位決定部が、ユーザ別使用時間情報を更新する処理手順を示すフローチャートである。
【図１９】同実施形態において優先順位決定部が行う、使用時間に対する重み付けの例を示す説明図である。
【図２０】同実施形態において、優先順位決定部が、使用時間に対する重み付けを行う処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、図面を参照して、本発明の一実施形態について説明する。
図１は、本発明の一実施形態におけるコンピュータシステム１の概略構成を示す構成図である。
同図において、コンピュータシステム１は、ノードコントローラ装置（Node Controller；ＮＣ）１００−１〜１００−５と、ストレージ管理装置（Storage Controller；ＳＣ）２００と、ストレージサーバ装置３００と、クラウドコントローラ装置（Cloud Controller；ＣＬＣ）４００と、ユーザ端末装置５００と、ネットワーク（Network）９００とを具備する。また、ノードコントローラ装置１００−１〜１００−５と、ストレージ管理装置２００と、ストレージサーバ装置３００と、クラウドコントローラ装置４００と、ユーザ端末装置５００とは、ネットワーク９００に接続されている。
【００１７】
コンピュータシステム１は、例えば、一企業の内部において仮想マシン環境を提供するために構築されたプライベートクラウドシステムであり、ユーザ端末装置５００から送信されるユーザの要求に応じて仮想マシンを生成し実行する。
【００１８】
ノードコントローラ装置１００−１〜１００−５の各々は、本発明における実行装置の一例であり、ストレージサーバ装置３００の記憶している仮想マシン（Virtual Machine；ＶＭ）の実行用データ（仮想マシンを実行するために用いられるデータ。例えば仮想マシンイメージ）を取得して、仮想マシンを実行する。また、ノードコントローラ装置１００−１〜１００−５の各々は、ストレージサーバ装置３００の記憶している仮想マシンの実行用データを予め（仮想マシン実行要求を受ける前に）取得しておくことで、仮想マシン実行時に仮想マシン起動に要する時間の短縮を図る。ノードコントローラ装置１００−１〜１００−５の各々は、例えばコンピュータで構成される。
なお、以下では、ノードコントローラ装置１００−１〜１００−５をまとめて「ノードコントローラ装置１００」と称する。
【００１９】
ストレージサーバ装置３００は、本発明における記憶装置の具備する第２記憶部一例であり、ノードコントローラ装置１００の実行する仮想マシンの実行用データを複数記憶している。ストレージサーバ装置３００は、例えばＮＡＳ（Network Attached Storage、ネットワーク接続型ストレージ）で構成される。
ストレージ管理装置２００は、本発明における記憶装置の具備するデータ転送部の一例であり、ストレージサーバ装置３００から仮想マシンの実行用データを取得してノードコントローラ装置１００に送信することで、ノードコントローラ装置１００に仮想マシンの実行用データを取得させる。ストレージ管理装置２００は、例えばコンピュータで構成される。
【００２０】
クラウドコントローラ装置４００は、本発明における制御装置の一例であり、ノードコントローラ装置１００や、ストレージ管理装置２００や、ストレージサーバ装置３００を制御する。特に、クラウドコントローラ装置４００は、ストレージサーバ装置３００の記憶する仮想マシンの実行用データに対して、ノードコントローラ装置１００が予め取得する際の優先順位を付すことによって、仮想マシン実行要求を受けた際に、当該仮想マシンの実行用データをノードコントローラ装置１００が既に取得している率（ヒット率）の向上を図る。クラウドコントローラ装置４００は、例えばコンピュータで構成される。
【００２１】
ユーザ端末装置５００は、ユーザの操作入力を受け付け、受け付けた操作入力に応じて、仮想マシン実行要求などユーザの要求をクラウドコントローラ装置４００に送信する。ユーザ端末装置５００は、例えばコンピュータで構成される。
ネットワーク９００は、例えばＬＡＮ（Local Area Network）などの通信ネットワークであり、ノードコントローラ装置１００と、ストレージ管理装置２００と、ストレージサーバ装置３００と、クラウドコントローラ装置４００と、ユーザ端末装置５００との間の通信を媒介する。
【００２２】
なお、コンピュータシステム１の構成は図１に示すものに限らず、仮想マシンの実行用データを記憶するストレージサーバ装置３００と、ストレージサーバ装置３００の記憶する仮想マシンの実行用データを予め取得しておき、また、仮想マシン実行要求を受けて仮想マシンを実行するノードコントローラ装置１００と、ストレージサーバ装置３００の記憶する仮想マシンの実行用データに対して、ノードコントローラ装置１００が予め取得する際の優先順位を付すクラウドコントローラ装置４００とを具備する様々な構成とすることができる。
【００２３】
例えば、コンピュータシステム１の具備するノードコントローラ装置１００の数は、同図に示す５つに限らず、１つ以上であればよい。
また、ストレージ管理装置２００が、クラウドコントローラ装置４００の制御に従ってノードコントローラ装置１００を制御する階層構造としてもよい。この場合、コンピュータシステム１が、ストレージ管理装置２００を複数具備し、ストレージ管理装置２００の各々が幾つかのノードコントローラ装置１００とクラスタを構成するようにして、複数のストレージ管理装置２００が、ノードコントローラ装置１００の制御を分担するようにしてもよい。
【００２４】
また、コンピュータシステム１の具備するストレージサーバ装置３００の数は１つであってもよい。あるいは、コンピュータシステム１が、複数のストレージサーバ装置３００を具備し、これら複数のストレージサーバ装置３００が、仮想マシンの実行用データを分散して記憶するようにしてもよい。あるいは、コンピュータシステム１が、複数のストレージサーバ装置３００を具備し、これら複数のストレージサーバ装置３００がマスタ・スレーブに構成されるなど、仮想マシンの実行用データを冗長に記憶するようにしてデータの保全性を確保するようにしてもよい。
【００２５】
また、コンピュータシステム１の具備するユーザ端末装置５００の数は、同図に示す２つに限らず、１つ以上であればよい。
また、ユーザ端末装置５００と、クラウドコントローラ装置４００とはインターネット（Internet）で接続され、ノードコントローラ装置１００と、ストレージ管理装置２００と、ストレージサーバ装置３００と、クラウドコントローラ装置４００とはＬＡＮで接続されているなど、ネットワーク９００が複数のネットワークで構成されるようにしてもよい。
【００２６】
図２は、ノードコントローラ装置１００−１の概略構成を示す構成図である。同図において、ノードコントローラ装置１００−１は、通信部１１０と、処理部１２０と、記憶部１３０とを具備する。処理部１２０は、仮想マシン実行部１２１と、データ有無判定部１２２とを具備する。記憶部１３０は、ＶＭキャッシュ１３１を具備する。
【００２７】
通信部１１０は、ネットワーク９００（図１）に接続しており、ネットワーク９００を介してストレージ管理装置２００やクラウドコントローラ装置４００と通信を行う。
処理部１２０は、例えば、ノードコントローラ装置１００−１の具備するＣＰＵ（Central Processing Unit、中央処理装置）が、ノードコントローラ装置１００−１の具備する記憶デバイスからプログラムを読み出して実行することによって構成され、ノードコントローラ装置１００−１の各部を制御する。
【００２８】
仮想マシン実行部１２１は、通信部１１０が、仮想マシン実行要求を受信すると、当該仮想マシン実行要求の示す仮想マシン（すなわち実行すべき仮想マシン）のデータを記憶部１３０から読み出し、当該仮想マシンを実行する。
また、仮想マシン実行部１２１は、本発明における使用履歴記録部の一例であり、仮想マシンの使用履歴を、記憶部４３０に記憶させる。
【００２９】
データ有無判定部１２２は、通信部１１０が、仮想マシン実行要求を受信すると、当該仮想マシン実行要求の示す、実行すべき仮想マシンの実行用データを、記憶部１３０が記憶しているか否かを判定し、判定結果を、通信部１１０を介してクラウドコントローラ装置４００に送信する。
このデータ有無判定部１２２の判定結果は、ストレージサーバ装置３００の記憶する実行すべき仮想マシンの実行用データをノードコントローラ装置１００に送信するか否かの判定に用いられる。具体的には、ノードコントローラ装置１００のいずれも、実行すべき仮想マシンの実行用データを記憶していない場合、ストレージ管理装置２００が、当該実行すべき仮想マシンの実行用データを取得して、ノードコントローラ装置１００のいずれかに送信する。これによって、実行用データを受信したノードコントローラ装置１００は、当該仮想マシンを実行可能となる。
【００３０】
記憶部１３０は、本発明における第１記憶部の一例であり、例えば、ノードコントローラ装置１００−１の具備する記憶デバイスで構成され、各種データを記憶する。特に、記憶部１３０は、ノードコントローラ装置１００−１の具備するＣＰＵが実行するプログラムや、仮想マシンの実行用データを記憶する。
【００３１】
ＶＭキャッシュ１３１は、記憶部１３０の有する記憶領域のうちの所定の容量分で構成される。そして、ＶＭキャッシュ１３１は、ノードコントローラ装置１００−１が予め取得する、仮想マシンの実行用データを記憶する。ＶＭキャッシュ１３１が仮想マシンの実行用データを記憶しておくことで、ノードコントローラ装置１００−１が当該仮想マシンを実行する際に、仮想マシンの実行用データをストレージサーバ装置３００から取得する必要が無くなり、仮想マシンの起動に要する時間を短縮し得る。
【００３２】
ノードコントローラ装置１００−２〜１００−５も、ノードコントローラ装置１００−１について説明したのと同様の構成および機能を有しており、説明を省略する。なお、ノードコントローラ装置１００−１〜１００−５の演算速度や記憶容量などの処理能力は、全て同様であってもよいし、異なっていてもよい。
【００３３】
図３は、クラウドコントローラ装置４００の概略構成を示す構成図である。同図において、クラウドコントローラ装置４００は、通信部４１０と、処理部４２０と、記憶部４３０とを具備する。処理部４２０は、優先順位決定部４２１と、データ登録部４２２と、ＶＭ制御部４２３とを具備する。
【００３４】
通信部４１０は、ネットワーク９００（図１）に接続しており、ネットワーク９００を介してノードコントローラ装置１００やストレージ管理装置２００やユーザ端末装置５００と通信を行う。
処理部４２０は、例えば、クラウドコントローラ装置４００の具備するＣＰＵ（Central Processing Unit、中央処理装置）が、クラウドコントローラ装置４００の具備する記憶デバイスからプログラムを読み出して実行することによって構成され、クラウドコントローラ装置４００の各部の制御、ならびに、ノードコントローラ装置１００や、ストレージ管理装置２００や、ストレージサーバ装置３００の制御を行う。
【００３５】
優先順位決定部４２１は、ストレージサーバ装置３００の記憶する仮想マシンの実行用データをノードコントローラ装置１００が予め記憶しておく際の優先順位を決定する。優先順位決定部４２１が優先順位を決定する方法については後述する。
データ登録部４２２は、優先順位決定部４２１の決定した優先順位に従って、ノードコントローラ装置１００に仮想マシンの実行用データを予め記憶させる。
【００３６】
ＶＭ制御部４２３は、通信部４１０の受信するユーザからの要求に従って、仮想マシンの生成やカスタマイズを行い、また、ノードコントローラ装置１００に仮想マシンを実行させるなど、仮想マシンに対する制御を行う。
記憶部４３０は、例えば、クラウドコントローラ装置４００の具備する記憶デバイスで構成され、各種データを記憶する。特に、記憶部４３０は、クラウドコントローラ装置４００の具備するＣＰＵが実行するプログラムや、優先順位決定部４２１が上述した優先順位を決定する基となるデータを記憶する。
【００３７】
次に、図４〜図１０を参照して、記憶部４３０（図３）の記憶する各種データについて説明する。
図４は、記憶部４３０の記憶する、仮想マシンの使用履歴情報（以下、単に「使用履歴情報」と称する）の例を示す説明図である。記憶部４３０は、使用履歴情報を表形式のデータとして記憶し、各行のデータが、仮想マシン１回の実行（すなわち、仮想マシンを起動してからシャットダウンするまで）のデータに該当する。
【００３８】
また、各行のデータは、通し番号（ＩＤ；Identifier）と、ユーザ識別情報（ＵＩＤ；User Identifier）と、仮想マシン識別情報（ＶＭＩＤ；Virtual Machine Identifier）と、使用開始日情報と、使用終了日情報と、使用時間情報とを含む。
通し番号は、使用履歴情報の行毎に付されており、使用開始日の早い行（図４において上の行）ほど小さい番号が付されている。
【００３９】
ユーザ識別情報は、ユーザを一意に識別する情報である。使用履歴情報には、仮想マシンの実行を要求したユーザのユーザ識別情報が格納されている。
仮想マシン識別情報は、仮想マシンを一意に識別する情報である。使用履歴情報には、実行された仮想マシンの仮想マシン識別情報が格納されている。
【００４０】
使用開始日情報は、仮想マシンの使用を開始した日、すなわち仮想マシンを起動した日を示す。また、使用終了日情報は、仮想マシンの使用を終了した日、すなわち仮想マシンをシャットダウンした日を示す。
使用時間情報は、仮想マシンの使用を開始してから終了するまでの時間を示す。
【００４１】
この使用履歴情報は、優先順位決定部４２１が上述した優先順位を決定する際に用いられる情報を示している。具体的には、優先順位決定部４２１は、仮想マシン識別番号に基づいて使用時間の重み付けを行い、重み付けされた使用時間の長い仮想マシンほど優先順位を高く設定し、また、使用終了日が遅い（最近の）仮想マシンほど優先順位を高く設定する。
【００４２】
図５は、記憶部４３０の記憶する、ＶＭテーブルの例を示す説明図である。記憶部４３０は、ＶＭテーブルを表形式のデータとして記憶し、各行のデータが仮想マシン１台分のデータに該当する。
また、各行のデータは、仮想マシン識別情報とマシン名とを含む。
【００４３】
仮想マシン識別情報は、仮想マシンを識別する情報であると共に、次図で説明するように、仮想マシンの派生関係を示す情報である。
また、マシン名は、仮想マシンを識別する情報である点において仮想マシン識別情報と同様であるが、ユーザがマシン名を設定する点で、仮想マシンの派生関係に基づいてＶＭ制御部４２３が生成する仮想マシン識別番号と異なる。
【００４４】
このＶＭテーブルは、クラウドコントローラ装置４００が仮想マシンのマシン名と仮想マシン識別情報との対応付けを行うために用いられる。例えば、ユーザがマシン名で仮想マシンを特定して当該仮想マシンの実行を要求すると、クラウドコントローラ装置４００（ＶＭ制御部４２３）は、ＶＭテーブルを用いて当該仮想マシンの仮想マシン識別情報を取得して、図４で説明した使用履歴情報を生成する。
【００４５】
図６は、ストレージサーバ装置３００が実行用データを記憶する仮想マシンの、派生関係の例を示す説明図である。同図において、ノードｎ１１〜ｎ１５は、各々１つの仮想マシンを示し、図では当該仮想マシンの仮想マシン識別番号およびマシン名が示されている。
ｒｏｏｔの子の階層に示されるノードｎ１１およびｎ１２は、それぞれ、コピー元の仮想マシン無しに生成された仮想マシンを示す。
【００４６】
一方、ノードｎ１１の子として示されるノードｎ１３およびｎ１４は、それぞれ、ノードｎ１１に示される仮想マシンをコピーして生成された仮想マシンを示す。また、ノードｎ１３の子として示されるノードｎ１５は、ノードｎ１３に示される仮想マシンをコピーして生成された仮想マシンを示す。
【００４７】
このように、仮想マシンの派生関係は、樹形図の親と子の関係にて示される。そして、この仮想マシンの派生関係は、仮想マシン識別番号にも示されている。
すなわち、ノードｎ１３の仮想マシンの識別番号「１−１」は、コピー元であるノードｎ１１の仮想マシンの識別番号「１」に、枝番号「１」を付加した番号となっている。同様に、ノードｎ１４の仮想マシンの識別番号「１−２」は、コピー元であるノードｎ１１の仮想マシンの識別番号「１」に、枝番号「２」を付加した番号となっている。また、ノードｎ１５の仮想マシンの識別番号「１−１−１」は、コピー元であるノードｎ１３の仮想マシンの識別番号「１−１」に、枝番号「１」を付加した番号となっている。
【００４８】
図７は、記憶部４３０の記憶する、ユーザ別使用時間情報の例を示す図である。記憶部４３０は、ユーザ別使用時間情報を表形式のデータとして記憶し、各行のデータが、ユーザ１人分のデータに該当する。
また、各行のデータは、ユーザ識別情報と、ユーザグループ識別情報（ＵＧＩＤ；User Group Identifier）と、使用時間合計情報と、使用時間詳細情報とを含む。
【００４９】
ユーザ識別情報は、上述のように、ユーザを一意に識別する情報である。
ユーザグループ識別情報は、ユーザの属するグループ（ユーザグループ）を一意に識別する情報である。ユーザとユーザグループとの対応関係については次図で説明する。
使用時間合計情報は、何れかの仮想マシンを使用した合計時間をユーザ毎に示す。
使用時間詳細情報は、仮想マシンの使用時間をより詳細に示す情報であり、ユーザ毎、かつ、仮想マシン毎に、仮想マシン識別情報と、当該仮想マシンを使用した合計時間と、当該仮想マシンを最後に使用した際の使用終了日（以下では、「使用終了日（最終）」と称する）とを示す。
【００５０】
このユーザ別使用時間情報は、優先順位決定部４２１が、上述した使用履歴情報に基づいて生成する情報であり、優先順位決定部４２１が上述した優先順位を決定する際に用いられる情報を示している。優先順位決定部４２１は、優先順位を決定する際の前処理として、ユーザ別使用時間情報を生成する。
【００５１】
図８は、記憶部４３０の記憶する、ユーザグループ分類情報の例を示す説明図である。記憶部４３０は、ユーザグループ分類情報を表形式のデータとして記憶している。そして、各行には、ユーザグループ識別情報と、ユーザ識別情報とが含まれており、同一の行に含まれるユーザグループ識別情報とユーザ識別情報とが対応付けられている。
【００５２】
例えば各ユーザの所属する部署など、ユーザの属するグループが予め（優先順位決定部４２１が、上述した優先順位を決定する前に）決まっており、記憶部４３０は、各ユーザの属するグループを、ユーザグループ識別情報とユーザ識別情報との対応付けとして予め記憶している。
【００５３】
図９は、記憶部４３０の記憶する、ＮＣグループ分類情報の例を示す説明図である。記憶部４３０は、ＮＣグループ分類情報を表形式のデータとして記憶している。そして、各行には、ノードコントローラグループ識別情報（ＮＣＧＩＤ；Node Controller Group Identifier）と、ノードコントローラ識別情報（ＮＣＩＤ；Node Controller Identifier）とが含まれており、同一の行に含まれるノードコントローラグループ識別情報とノードコントローラ識別情報とが対応付けられている。
【００５４】
次図で説明するように、ユーザグループ毎に特定のノードコントローラ装置１００が割り当てられており、各ユーザグループに割り当てられるノードコントローラ装置１００のグループが、ＮＣグループ分類情報にて示されている。記憶部４３０は、このＮＣグループ分類情報を予め（優先順位決定部４２１が、上述した優先順位を決定する前に）記憶している。
なお、以下では、ノードコントローラ識別情報「１」〜「５」は、それぞれノードコントローラ装置１００−１〜１００−５を示す。
【００５５】
図１０は、記憶部４３０の記憶する、グループ対応情報の例を示す説明図である。記憶部４３０は、グループ対応情報を表形式のデータとして記憶している。そして、各行には、ユーザグループ識別情報と、ノードコントローラグループ識別情報とが含まれており、同一の行に含まれるユーザグループ識別情報とノードコントローラグループ識別情報とが対応付けられている。
【００５６】
このグループ対応情報と、上述したＮＣグループ分類情報とによって、各ユーザグループに割り当てられているノードコントローラ装置１００が示されている。
ユーザグループ毎に使用可能なノードコントローラ装置１００を特定しておくことで、各ユーザグループに対して使用可能なノードグループを確保できる。すなわち、あるユーザが仮想マシンを実行したいときに、他のユーザグループのユーザが仮想マシンを実行しているためにいずれのノードコントローラ装置１００においても充分な資源を確保できず仮想マシンを実行できない事態を回避できる。
【００５７】
次に、図１１〜図１９を参照してコンピュータシステム１の動作について説明する。
図１１は、起動する仮想マシンの実行用データがＶＭキャッシュ１３１（図２）に格納されていない場合に、コンピュータシステム１が仮想マシンを起動する処理手順の例を示すシーケンス図である。
同図では、ユーザ１が仮想マシンＶＭ１（以下では、仮想マシン識別情報が「１」の仮想マシンを、「仮想マシンＶＭ１」と称する。他の仮想マシンについても同様）の起動を要求する場合の例を示しており、ユーザ端末装置５００としてはユーザ１の用いるユーザ端末装置５００が示されている。他の仮想マシンに対する処理や、他のユーザ端末装置５００において仮想マシンの起動要求が行われる場合の処理も、以下と同様である。また、コンピュータシステム１の具備するストレージ管理装置２００およびストレージサーバ装置３００をまとめて「ＳＣ」にて示されている。また、ノードコントローラ装置１００−１、１００−２、・・・、１００−５が、それぞれ「ＮＣ１」、「ＮＣ２」、・・・、「ＮＣ５」にて示されている。図１２〜図１４においても同様である。
【００５８】
まず、ユーザ端末装置５００は、仮想マシンＶＭ１の起動を要求する操作入力を受け付けると、当該操作入力に従って、仮想マシンＶＭ１の起動要求をクラウドコントローラ装置４００に送信する（シーケンスＳ１０１）。
【００５９】
クラウドコントローラ装置４００において通信部４１０は、仮想マシンＶＭ１の起動要求を受信すると、当該起動要求を処理部４２０に出力する。そして、処理部４２０においてＶＭ制御部４２３は、当該起動要求に従って、使用履歴情報にデータを挿入する（シーケンスＳ１０２）。具体的には、ＶＭ制御部４２３は、使用履歴情報に最下行を追加し、追加した行に、通し番号と、仮想マシンの起動を要求したユーザを示すユーザ識別情報と、起動する仮想マシンを識別する仮想マシン識別情報と、使用開始日とを書き込む。
【００６０】
例えば、使用履歴情報が図４の状態にある場合、ＶＭ制御部４２３は、同図に示す使用履歴情報の下に１行追加する。そして、ＶＭ制御部４２３は、追加した行に、通し番号「８」と、仮想マシンの起動を要求したユーザを示すユーザ識別情報「１」と、起動する仮想マシンＶＭ１を識別する仮想マシン識別情報「１」とを書き込む。また、ＶＭ制御部４２３は、使用開始日として、例えば現在の日付（シーケンスＳ１０２の処理を実行している日の日付）を書き込む。
一方、使用終了日と使用時間との欄は空欄としておく。なお、これらの欄に対しては、仮想マシンを切断（仮想マシンの実行を終了、すなわちシャットダウン）する際に、ＶＭ制御部４２３がデータを書き込む。
【００６１】
次に、ＶＭ制御部４２３は、上述したＮＣグループ分類情報を検索して、仮想マシンの起動を要求したユーザの属するユーザグループを特定する（シーケンスＳ１０３）。
例えば、ＶＭ制御部４２３は、仮想マシンの起動を要求したユーザを示すユーザ識別情報「１」をキーとしてＮＣグループ分類情報を検索し、当該ユーザの属するユーザユーザグループを示すユーザグループ識別情報「１」を取得する。このユーザグループ識別情報によって、仮想マシンの起動を要求したユーザの属するユーザグループが特定されている。
【００６２】
次に、ＶＭ制御部４２３は、上述したグループ対応情報およびＮＣグループ分類情報を用いて、仮想マシンの起動を要求したユーザの属するユーザグループに割り当てられたノードコントローラ装置１００を特定する（シーケンスＳ１０４）。
例えば、ＶＭ制御部４２３は、シーケンスＳ１０３で取得したユーザグループ識別情報「１」をキーとしてグループ対応情報を検索し、当該ユーザグループ識別情報に対応付けられたＮＣグループ識別情報「Ａ」を取得する。さらに、ＶＭ制御部４２３は、取得したＮＣグループ識別情報「Ａ」をキーとしてＮＣグループ分類情報を検索し、当該ＮＣグループ識別情報に対応付けられたノードコントローラ識別情報「１」、「２」および「３」を取得する。このノードコントローラ識別情報によって、仮想マシンの起動を要求したユーザの属するユーザグループに割り当てられたノードコントローラ装置１００が特定されている。
【００６３】
次に、ＶＭ制御部４２３は、通信部４１０を介して、シーケンスＳ１０４で特定したノードコントローラ装置１００に対して、起動する仮想マシンＶＭ１の実行用データをＶＭキャッシュ１３１に既に記憶しているか否かの問合せを送信する（シーケンスＳ１１１）。
ここでは、いずれのノードコントローラ装置１００も仮想マシンＶＭ１の実行用データを記憶していない。そこで、問合せを受信したノードコントローラ装置１００の各々は、シーケンスＳ１１１で送信された問合せに対して、当該実行用データを記憶していない旨の回答を、クラウドコントローラ装置４００に送信する。なお、いずれかのノードコントローラ装置１００が仮想マシンＶＭ１の実行用データを記憶している場合は、当該ノードコントローラ装置１００が、実行用データを記憶している旨の回答を、クラウドコントローラ装置４００に送信し、クラウドコントローラ装置４００は、当該ノードコントローラ装置１００に対して、仮想マシンＶＭ１の起動を要求する（シーケンスＳ１１２）。
【００６４】
クラウドコントローラ装置４００において通信部４１０は、シーケンスＳ１１２でノードコントローラ装置１００の各々から送信された回答を受信すると、当該回答を処理部４２０に出力する。そして、処理部４２０においてＶＭ制御部４２３は、当該回答を取得すると、起動する仮想マシンＶＭ１の実行用データを、シーケンスＳ１０４で特定したノードコントローラ装置１００のいずれかにコピーするよう要求するコピー要求を、通信部４１０を介してストレージ管理装置２００に送信する（シーケンスＳ１２１）。
【００６５】
このコピー要求を受信したストレージ管理装置２００は、シーケンスＳ１０４で特定したノードコントローラ装置１００のいずれか１つを選択する。図１１の例では、ストレージ管理装置２００はノードコントローラ装置１００−１を選択している。
そして、ストレージ管理装置２００は、起動する仮想マシンＶＭ１の実行用データをストレージサーバ装置３００から取得して、選択したノードコントローラ装置１００に送信（転送）し、ノードコントローラ装置１００は、当該実行用データを記憶部１３０に記憶する（シーケンスＳ１２２）。
【００６６】
ここで、ストレージ管理装置２００がノードコントローラ装置１００を選択する方法としては様々なものを用いることができる。例えば、ストレージ管理装置２００が、各ノードコントローラ装置１００における記憶容量の使用状況を把握しておき、仮想マシンＶＭ１の実行用データを格納（記憶）可能なノードコントローラ装置１００の中から、ラウンドロビン方式でいずれかのノードコントローラ装置１００を選択するようにしてもよい。あるいは、ストレージ管理装置２００が、さらに各ノードコントローラ装置１００のＣＰＵ使用率状況を把握しておき、仮想マシンＶＭ１の実行用データを格納可能なノードコントローラ装置１００の中から、ＣＰＵ使用率が最も小さいものを選択するなど、ラウンドロビン以外の方法で選択するようにしてもよい。
【００６７】
シーケンスＳ１２２における実行用データの送信を完了すると、ストレージ管理装置２００は、選択したノードコントローラを示すノードコントローラ識別情報をクラウドコントローラ装置４００に送信することによって、選択したノードコントローラ装置１００を通知する（シーケンスＳ１２３）。
クラウドコントローラ装置４００において通信部４１０は、ストレージ管理装置２００から送信されたノードコントローラ識別情報を受信すると、当該ノードコントローラ識別情報を処理部４２０に出力する。処理部４２０においてＶＭ制御部４２３は、ストレージ管理装置２００から送信されたノードコントローラ識別情報を取得すると、仮想マシンＶＭ１の起動要求を、通信部４１０を介して、当該ノードコントローラ識別情報の示すノードコントローラ装置１００に送信する（シーケンスＳ１３１）。
【００６８】
仮想マシンＶＭ１の起動要求の送信先のノードコントローラ装置１００（図１１の例ではノードコントローラ装置１００−１）において、通信部１１０は、仮想マシンＶＭ１の起動要求を受信すると、当該起動要求を処理部１２０に出力する。そして処理部１２０において仮想マシン実行部１２１は、記憶部１３０から仮想マシンＶＭ１の実行用データを読み出して、仮想マシンＶＭＩを起動する（シーケンスＳ１３２）。
【００６９】
図１２は、起動する仮想マシンの実行用データがＶＭキャッシュ（図２）に格納されている場合に、コンピュータシステム１が仮想マシンを起動する処理手順の例を示すシーケンス図である。
同図において、シーケンスＳ２０１〜Ｓ２１１は、図１１のシーケンスＳ１０１〜Ｓ１１１と同様である。
【００７０】
また、ここでは、ノードコントローラ装置１００−１が、仮想マシンＶＭ１の実行用データをＶＭキャッシュ１３１に記憶しており、シーケンスＳ２１１で送信された問合せに対して、当該実行用データを記憶している旨の回答を、クラウドコントローラ装置４００に送信する。一方、ノードコントローラ装置１００−２および１００−３は、仮想マシンＶＭ１の実行用データを記憶しておらず、図１１のシーケンスＳ１１２の場合と同様に、実行用データを記憶していない旨の回答を、クラウドコントローラ装置４００に送信する（シーケンスＳ２１２）。
シーケンスＳ２２１〜Ｓ２２２は、図１１のシーケンスＳ１３１〜Ｓ１３２と同様である。
【００７１】
図１２の例では、ストレージサーバ装置３００の記憶する仮想マシンの実行用データをノードコントローラ装置１００にコピーする処理（図１１のシーケンスＳ１２１〜Ｓ１２３）が不要となっている。このように、ノードコントローラ装置１００が仮想マシンの実行用データを予め記憶している場合は、仮想マシンを起動する際の処理が比較的少なくて済み、仮想マシン起動に要する時間を短縮することができる。
【００７２】
図１３は、コンピュータシステム１が新たに仮想マシンを生成する際の処理手順の例を示すシーケンス図である。同図は、仮想マシンＶＭ１（仮想マシン識別情報「１」）を実行している状態で、この仮想マシンＶＭ１から派生する仮想マシンＶＭ１−１（仮想マシン識別情報「１−１」）を生成する際の処理手順を示している。
【００７３】
まず、ユーザ端末装置５００は、仮想マシンの生成を要求する操作入力を受け付けると、当該操作入力に従って、仮想マシンの生成要求をクラウドコントローラ装置４００に送信し、クラウドコントローラ装置４００は、当該生成要求をノードコントローラ装置１００に送信（転送）する（シーケンスＳ３０１）。
ここでは、仮想マシンＶＭ１の実行用データをコピーしてカスタマイズすることによって、仮想マシンＶＭ１−１を生成する。このため、クラウドコントローラ装置４００は、仮想マシンＶＭ１を実行しているノードコントローラ装置１００−１に対して、仮想マシンの生成要求を送信している。
【００７４】
ノードコントローラ装置１００−１において、通信部１１０は、仮想マシンの生成要求を受信すると、当該生成要求を処理部１２０に出力する。処理部１２０において仮想マシン実行部１２１は、仮想マシンの生成要求を取得すると、当該生成要求に従って、仮想マシンＶＭ１の実行用データをコピーしてカスタマイズすることによって、新たな仮想マシン（新たな仮想マシンの実行用データ）を生成する（シーケンスＳ３０２）。
【００７５】
その後、生成した仮想マシンの保存を要求する操作入力を受け付けると、当該操作入力に従って、仮想マシンの保存要求をクラウドコントローラ装置４００に送信する。クラウドコントローラ装置４００は、当該保存要求をストレージ管理装置２００に送信（転送）し、ストレージ管理装置２００は、当該保存要求をノードコントローラ装置１００に送信（転送）する（シーケンスＳ３１１）。ここでは、ストレージ管理装置２００は、仮想マシンを生成したノードコントローラ装置１００−１に保存要求を送信する。
【００７６】
ノードコントローラ装置１００−１において、通信部１１０は、仮想マシンの保存要求を受信すると、当該保存要求を処理部１２０に出力する。処理部１２０において仮想マシン実行部１２１は、仮想マシンの保存要求を取得すると、当該保存要求に従って、シーケンスＳ３０２で生成した仮想マシンの実行用データを、通信部１１０を介してストレージ管理装置２００に送信する。ストレージ管理装置２００は、当該実行用データをストレージサーバ装置３００に送信（転送）して、ストレージサーバ装置３００に当該実行用データ要求を保存（記憶）させる。（シーケンスＳ３１２）。
【００７７】
そして、ストレージ管理装置２００は、ストレージサーバ装置３００が実行用データの保存を完了すると、保存完了通知をクラウドコントローラ装置４００に送信する（シーケンスＳ３１３）。
クラウドコントローラ装置４００において通信部４１０は、保存完了通知を受信すると、当該保存完了通知を処理部４２０に出力する。そして、処理部４２０においてＶＭ制御部４２３は、当該保存完了通知を取得すると、シーケンスＳ３０２で生成された仮想マシンを示す仮想マシン識別情報を、派生元の仮想マシン（実行用データのコピー元の仮想マシン）の識別情報に基づいて決定する（シーケンスＳ３２１）。ここでは、ＶＭ制御部４２３は、仮想マシン識別情報「１−１」に決定する。なお、ＶＭ制御部４２３が仮想マシン識別情報を生成する処理手順については後述する。
【００７８】
次に、ＶＭ制御部４２３は、ＶＭテーブルに新たな行を挿入し、挿入した行に、シーケンスＳ３２１で決定した仮想マシン識別情報と、ユーザの決定するマシン名とを対応付けて書き込む（シーケンスＳ３２２）。
また、ＶＭ制御部４２３は、シーケンスＳ３２１で決定した仮想マシンの情報を、使用履歴情報に保存する（シーケンスＳ３２３）。具体的には、ＶＭ制御部４２３は、使用履歴情報に最下行を追加し、追加した行に、通し番号と、仮想マシンの起動を要求したユーザを示すユーザ識別情報と、起動する仮想マシンを識別する仮想マシン識別情報とを書き込む。
一方、使用開始日と使用終了日と使用時間との欄は空欄としておく。
【００７９】
その後、ユーザ端末装置５００は、実行中の仮想マシンＶＭ１の切断を要求する操作入力を受け付けると、当該操作入力に従って、仮想マシンの切断要求をクラウドコントローラ装置４００に送信し、クラウドコントローラ装置４００は、当該切断要求をノードコントローラ装置１００に送信（転送）する（シーケンスＳ３３１）。ここでは、クラウドコントローラ装置４００は、仮想マシンＶＭ１を実行中のノードコントローラ装置１００−１に、当該切断要求を送信する。
【００８０】
ノードコントローラ装置１００−１において、通信部１１０は、仮想マシンＶＭ１の切断要求を受信すると、当該切断要求を処理部１２０に出力する。処理部１２０において仮想マシン実行部１２１は、仮想マシンＶＭ１の切断要求を取得すると、当該切断要求に従って、仮想マシンＶＭ１を切断（シャットダウン）する（シーケンスＳ３３２）。
【００８１】
そして、仮想マシン実行部１２１は、仮想マシンＶＭ１の切断を完了すると、ＶＭ１の切断完了を通知する切断完了通知を、通信部１１０を介してクラウドコントローラ装置４００に送信する（シーケンスＳ３３３）。
クラウドコントローラ装置４００において通信部４１０は、切断完了通知を受信すると、当該切断完了通知をＶＭ制御部４２３出力する。そして、ＶＭ制御部４２３は、当該切断完了通知に基づいて、使用履歴情報を更新する（シーケンスＳ３４１）。
【００８２】
具体的には、ＶＭ制御部４２３は、使用履歴情報を検索して仮想マシンＶＭ１の使用履歴を示す行のうち、使用終了日が空欄となっている行を検出する。そして、ＶＭ制御部４２３は、検出した行の使用終了日の欄に、例えば現在の日付（シーケンスＳ１３４１の処理を実行している日の日付）を書き込む。また、ＶＭ制御部４２３は、検出した行の使用時間の欄に、仮想マシンＶＭ１の使用時間を書き込む。ＶＭ１の使用時間としては、例えば、図１１のシーケンスＳＳ１３１や図１２のシーケンスＳ１３２のようにクラウドコントローラ装置４００がノードコントローラ装置１００に対して仮想マシンの起動要求を送信してから、シーケンスＳ３４１において切断完了通知を取得するまでの時間を書き込む。
【００８３】
さらに、ＶＭ制御部４２３は、使用履歴情報を検索して、切断した仮想マシンから派生した仮想マシンの使用履歴を示す行（ここでは、切断した仮想マシンの識別情報「１」から派生したことを示す仮想マシン識別情報「１−１」が書き込まれている行）、かつ、使用開始日が空欄となっている行を検出する。そして、ＶＭ制御部４２３は、検出した行の使用開始日の欄と使用終了日の欄とに現在の日付を書き込み、また、使用時間の欄に０（使用無し）を書き込む。使用時間の欄に０を書き込むのは、仮想マシンＶＭ１−１は、まだ生成されたのみで起動されておらず、従って使用されていないからである。
【００８４】
このように、ＶＭ制御部４２３が、新たに生成された仮想マシンの情報を使用履歴情報に挿入することで、後述する優先順位の決定において、この新たに生成された仮想マシンに優先順位を付することができる。ユーザは、この仮想マシンを使用する目的で生成しており、従って、この仮想マシンは実行される可能性が高いと考えられる。
従って、新たに生成された仮想マシンに高い優先順位を付して、ノードコントローラ装置１００のＶＭキャッシュ１３１が当該仮想マシンの実行用データを予め記憶しておくことで、実行される可能性の高い仮想マシンの実行用データを予めノードコントローラ装置１００が取得しておくようにできる。
【００８５】
なお、シーケンスＳ３４１において、ＶＭ制御部４２３が、使用履歴情報に新たに生成された派生先の仮想マシン（上記の例では仮想マシンＶＭ１−１）の情報を書き込む際に、派生元の仮想マシンよりも優先順位が高くなる内容の情報を書き込むようにしてもよい。新たに生成された派生先の仮想マシンは、派生元の仮想マシンをカスタマイズして生成されたものであり、バージョンアップが進んでいる点で、ユーザ使用する可能性が高いと考えられる。従って、派生先の仮想マシンの優先順位を高くすることで、実行される可能性の高い仮想マシンの実行用データを予めノードコントローラ装置１００が取得しておくようにできる。
【００８６】
ここで、派生先の仮想マシンの優先順位が高くなるようにする方法としては、様々なものを用いることができる。例えば、ＶＭ制御部４２３が、派生先の仮想マシンの使用終了日として、派生元の仮想マシンの使用終了日よりも遅い日付（例えば、派生元の仮想マシンの使用終了日より１日後の日付）を書き込むようにしてもよいし、あるいは、使用履歴情報に使用終了時刻欄を設けておき、ＶＭ制御部４２３が、派生先の仮想マシンの使用終了時刻として、派生元の仮想マシンの使用終了時刻よりも遅い時刻（例えば、派生先の仮想マシンの使用終了時刻より１秒後の時刻）を書き込むようにしてもよい。
【００８７】
あるいは、ＶＭテーブルに、優先順位を高くする仮想マシンを示すフラグを設けてユーザが設定可能とすることで、派生先の仮想マシンなど特定の仮想マシンの優先順位を高くできるようにしてもよい。
【００８８】
図１４は、コンピュータシステム１がＶＭキャッシュ１３１（図２）を更新する処理手順の例を示すシーケンス図である。コンピュータシステム１は、例えばユーザが当該コンピュータシステム１を使用しない深夜に、バッチ処理によってＶＭキャッシュ１３１の更新を行う。
【００８９】
まず、優先順位決定部４２１（図３）は、記憶部４３０の記憶する使用履歴情報に基づいて、ユーザ別使用時間情報を更新する（シーケンスＳ４０１）。
具体的には、優先順位決定部４２１は、図４で説明した使用履歴情報の使用時間をユーザ毎（ユーザ識別情報毎）に累計して、図７で説明したユーザ別使用時間情報の使用時間合計欄に書き込む。また、優先順位決定部４２１は、ユーザ毎、かつ、仮想マシン毎に、仮想マシン識別情報と、当該仮想マシンを最後に使用した際の使用終了日とを読出し、また、当該仮想マシンを使用した合計時間を算出する。そして、優先順位決定部４２１は、これらの情報を、使用時間詳細情報欄に書き込む。
【００９０】
次に、優先順位決定部４２１は、シーケンスＳ４０１で更新したユーザ別使用時間情報に基づいて、ストレージサーバ装置３００の記憶する仮想マシンの実行用データをノードコントローラ装置１００が予め記憶しておく際の優先順位を、ＮＣグループ毎に決定する（シーケンスＳ４０２）。この優先順位の決定方法については後述する。
【００９１】
そして、優先順位決定部４２１は、シーケンスＳ４０２で決定した優先順位に基づいて、ストレージサーバ装置３００の記憶する仮想マシンの実行用データをノードコントローラ装置１００のＶＭキャッシュ１３１に記憶させるよう指示するキャッシュ指示を生成し、生成したキャッシュ指示を、通信部４１０を介してストレージ管理装置２００に送信する（シーケンスＳ４０３）。
【００９２】
そして、ストレージ管理装置２００は、優先順位決定部４２１から送信されるキャッシュ指示に基づいて、ストレージサーバ装置３００から仮想マシンの実行用データを読み出してノードコントローラ装置１００の送信し、ノードコントローラ装置１００のＶＭキャッシュ１３１に記憶させる（シーケンスＳ４０４）。これによって、ノードコントローラ装置１００のキャッシュの記憶するデータが更新される。
【００９３】
図１５は、新たに生成された仮想マシンに対する仮想マシン識別情報をＶＭ制御部４２３（図３）が決定する処理手順を示すフローチャートである。ＶＭ制御部４２３は、図１２のシーケンスＳ３２１で説明したように、新たに生成された仮想マシンの実行用データのストレージサーバ装置３００への保存を完了したことを通知する保存完了通知を取得すると、同図の処理を開始する。
【００９４】
同図の処理において、ＶＭ制御部４２３は、まず、新たに生成された仮想マシンの派生元の仮想マシン（実行用データのコピー元の仮想マシン）の識別情報を取得する（ステップＳ５０１）。
例えば、仮想マシンを生成した仮想マシン実行部１２１（図２）が、派生元の仮想マシンを示す仮想マシン識別情報を、通信部１１０を介してクラウドコントローラ装置４００に送信する。そして、ＶＭ制御部４２３は、当該仮想マシン識別情報を取得する。あるいは、ＶＭ制御部４２３は、図１２のシーケンスＳ３０１で説明したように、ユーザ端末装置５００から送信されるＶＭ生成要求から、派生元の仮想マシンを示す仮想マシン識別情報を読み出すことによって、当該仮想マシン識別情報を取得するようにしてもよい。
【００９５】
次に、ＶＭ制御部４２３は、ステップＳ１０１で取得した仮想マシン識別情報に枝番号「１」を付加する（ステップＳ５０２）。例えば、ＶＭ制御部４２３は、ステップＳ５０１において仮想マシン識別情報「１」を取得すると、枝番号「１」を付加して、仮の仮想マシン識別情報「１−１」を生成する。
なお、派生元の仮想マシンが無い場合、すなわち、他の仮想マシンの実行用データをコピーせずに新たな仮想マシンの実行用データを生成した場合は、仮の仮想マシン識別情報を「１」とし、これを枝番号として扱う。
【００９６】
そして、ＶＭ制御部４２３は、図５で説明したＶＭテーブルを検索して、枝番号を付加した仮の仮想マシン識別情報が使用済みか否かを判定する（ステップＳ５０３）。
使用済みであると判定した場合（ステップＳ５０３：ＹＥＳ）、ＶＭ制御部４２３は、仮の仮想マシン識別情報の枝番号に１を加算する（ステップＳ５１１）。例えば、仮の仮想マシン識別情報「１−１」の枝番号に１を加算して、仮の仮想マシン識別情報を「１−２」とする。
その後、ステップＳ５０３に戻る。
【００９７】
一方、ステップＳ５０３において、仮の仮想マシン識別情報が使用済みでないと判定した場合（ステップＳ５０３：ＮＯ）、ＶＭ制御部４２３は、当該仮の仮想マシン識別情報を、新たに生成された仮想マシンを示す仮想マシン識別情報に決定する（ステップＳ５２１）。
その後、同図の処理を終了する。
【００９８】
このように、ＶＭ制御部４２３が、派生元の仮想マシンの識別情報に枝番号を付加して新たに生成された仮想マシンの識別情報を生成することで、図６で説明したように、仮想マシンの派生関係を仮想マシン識別情報にて示すことができる。
【００９９】
図１６は、コンピュータシステム１がＶＭキャッシュ１３１（図２）を更新する処理手を示すシーケンス図である。図１４で説明したように、コンピュータシステム１は、例えばユーザが当該コンピュータシステム１を使用しない深夜に、バッチ処理によってＶＭキャッシュ１３１の更新を行う。
まず、優先順位決定部４２１（図３）は、記憶部４３０の記憶する使用履歴情報に基づいて、ユーザ別使用時間情報を更新する（ステップＳ６０１）。この処理の詳細については後述する。
【０１００】
次に、優先順位決定部４２１は、ＮＣグループ毎に処理を行うループＬ６０１を開始する（ステップＳ６１１）。さらに、優先順位決定部４２１は、ループＬ６０１において処理対象となっているＮＣグループに割り当てられているユーザグループのユーザ毎に処理を行うループＬ６０２を開始する（ステップＳ６２１）。
そして、優先順位決定部４２１は、ユーザ別使用時間情報からループＬ６０２において処理対象となっているユーザの情報を読み出し、ユーザ毎かつ仮想マシン毎の使用時間に対する重み付けを行う（ステップＳ６２２）。この処理の詳細については後述する。
【０１０１】
次に、優先順位決定部４２１は、重み付けされた使用時間に基づいて、当該重み付けされた使用時間が長いほど優先順位が高くなるように、各仮想マシンに対する優先度を決定する（ステップＳ６２３）。
例えば、仮想マシンＶＭ１、ＶＭ１−１、ＶＭ１−２、ＶＭ１−１−１、ＶＭ２の、重み付けされた使用時間がそれぞれ３０分、１時間４５分、１時間１５分、３時間４５分、２時間であった場合、この重み付けされた使用時間の長い順に、仮想マシンＶＭ１−１−１、ＶＭ２、ＶＭ１−１、ＶＭ１−２、ＶＭ１に、それぞれ優先度１、２、３、４、５を付す。ここでの優先度は、その値が小さいほど、実行用データをノードコントローラ装置１００が予め記憶しておく際の優先順位を高くすることを示している。
【０１０２】
次に、優先順位決定部４２１は、ステップＳ６２２でユーザ別使用時間情報から読み出した、ループＬ６０２において処理対象となっているユーザの情報に基づいて、使用終了日（最終）が遅い仮想マシンほど優先順位が高くなるように、各仮想マシンに対する優先度を決定す（ステップＳ６２４）。
例えば、図７のユーザ識別情報「１」の行に示されるように、仮想マシンＶＭ１、ＶＭ１−１、ＶＭ１−２、ＶＭ１−１−１、ＶＭ２の、使用終了日（最終）がそれぞれ２０１０年０２月０２日、２０１０年０１月０１日、２０１０年０５月０５日、２０１０年０６月０６日、２０１０年０７月０７日であった場合、この使用終了日（最終）の遅い順に、仮想マシンＶＭ２、ＶＭ１−１−１、ＶＭ１−２、ＶＭ１、ＶＭ１−１に、それぞれ優先度１、２、３、４、５を付す。
【０１０３】
そして、優先順位決定部４２１は、ステップＳ６２３で算出した優先度と、ステップＳ６２４で算出した優先度とに基づいて、ループＬ６０２において処理対象となっているユーザに関する各仮想マシンの優先度を算出する（ステップＳ６２５）。
例えば、ステップＳ６２３において、仮想マシンＶＭ１−１−１、ＶＭ２、ＶＭ１−１、ＶＭ１−２、ＶＭ１に、それぞれ優先度１、２、３、４、５を付し、ステップＳ６２４において、仮想マシンＶＭ２、ＶＭ１−１−１、ＶＭ１−２、ＶＭ１、ＶＭ１−１に、それぞれ優先度１、２、３、４、５を付した場合、仮想マシン毎に優先度を合計して、仮想マシンＶＭ１−１−１、ＶＭ２、ＶＭ１−２、ＶＭ１−１、ＶＭ１の優先度を、それぞれ３、３、７、８、９とする。
【０１０４】
そして、優先順位決定部４２１は、ループＬ６０２における全てのユーザ、すなわち、ループＬ６０１において処理対象となっているＮＣグループに割り当てられているユーザグループの全てのユーザに対して、ループＬ６０２の処理を行ったか否かを判定する（ステップＳ６２６）。未処理のユーザが残っていると判定した場合は、ステップＳ６２１に戻り、残りのユーザに対してループＬ６０２の処理を行う。
【０１０５】
一方、ステップＳ６２６において、全てのユーザに対してループＬ６０２の処理を行ったと判定した場合、優先順位決定部４２１は、ループＬ６０１において処理対象となっているＮＣグループに割り当てられているユーザグループ毎に処理を行うループＬ６０３を開始する（ステップＳ６３１）。
【０１０６】
そして、優先順位決定部４２１は、ループＬ６０３において処理対象となっているユーザグループの各ユーザの優先度を算出する（ステップＳ６３２）。
例えば、図７に示すように、ユーザグループ１（グループ識別情報が「１」のユーザグループ。以下同様）において、ユーザ１（ユーザ識別情報が「１」のユーザ。以下同様）の使用時間合計が７時間であり、ユーザ２の使用時間合計が３６時間である場合、優先順位決定部４２１は、使用時間合計の長い順に、ユーザ２、ユーザ１の優先度をそれぞれ１、２とする。一方、ユーザグループ２に属するユーザがユーザ３のみである場合は、ユーザ３の使用時間合計にかかわらず、ユーザ３の優先度を１とする。
【０１０７】
そして、優先順位決定部４２１は、ループＬ６０３における全てのユーザグループ、すなわち、ループＬ６０１において処理対象となっているＮＣグループに割り当てられている全てのユーザグループに対して、ループＬ６０３の処理を行ったか否かを判定する（ステップＳ６３３）。未処理のユーザグループが残っていると判定した場合は、ステップＳ６３１に戻り、残りのユーザグループに対してループＬ６０３の処理を行う。
【０１０８】
一方、ステップＳ６３３において、全てのユーザグループに対してループＬ６０３の処理を行ったと判定した場合、優先順位決定部４２１は、各仮想マシンの優先順位を決定する（ステップＳ６４１）。
【０１０９】
ここで、図１７は、優先順位決定部４２１が決定する各仮想マシンの優先順位の例を示す説明図である。
同図では、ステップＳ６２５において、ユーザ２について、仮想マシンＶＭ２、ＶＭ１の優先度をそれぞれ２、４と算出し、また、ユーザ１について、仮想マシンＶＭ１−１−１、ＶＭ２、ＶＭ１−２、ＶＭ１−１、ＶＭ１の優先度をそれぞれ３、３、７、８、９と算出し、また、ステップＳ６３２において、ユーザ２、ユーザ１の優先度をそれぞれ１、２と算出した場合の例が示されている。
【０１１０】
ここで、優先順位決定部４２１は、いずれかのユーザについて優先度の値が小さい仮想マシンの優先順位を高くする。そして、複数の仮想マシンの優先度が同じ値となった場合は、優先度の値の小さいユーザの側の仮想マシンの優先順位を高くする。
【０１１１】
図１７の例では、ユーザ２について仮想マシンＶＭ２の優先度が「２」となっており最小である。そこで、優先順位決定部４２１は、この仮想マシンＶＭ２の優先順位を１（第１位）とする。
次に優先度が小さいのは、ユーザ１についての仮想マシンＶＭ１−１−１の優先度「３」であり、優先順位決定部４２１は、この仮想マシンＶＭ１−１−１の優先順位を２とする。
以下同様にして、優先順位決定部４２１は、仮想マシンの優先順位を、仮想マシンＶＭ２、ＶＭ１−１−１、ＶＭ１、ＶＭ１−２、ＶＭ１−１の順に決定する。
【０１１２】
そして、優先順位決定部４２１は、決定した優先順位に従って、各ノードコントローラ装置１００のＶＭキャッシュ１３１を更新する（ステップＳ６４２）。
例えば、図８に示すように、図１７のユーザ１およびユーザ２対して、ユーザグループ識別情報「１」が対応付けられており、また、図１０に示すように、このユーザグループ識別情報「１」とＮＣグループ識別情報「Ａ」とが対応付けられており、さらに、図９に示すように、このＮＣグループ識別情報「Ａ」に、ノードコントローラ装置１００−１、１００−２および１００−３が対応付けられている場合、優先順位決定部４２１は、ノードコントローラ装置１００−１、１００−２および１００−３の具備するＶＭキャッシュ１３１の容量の範囲内で、上記の仮想マシンＶＭ２、ＶＭ１−１−１、ＶＭ１、ＶＭ１−２、ＶＭ１−１の順で、仮想マシンの実行用データを記憶させる。
【０１１３】
その後、優先順位決定部４２１は、ＮＣグループ分類情報に示される全てのＮＣグループについて、ループＬ６０１の処理を行ったか否かを判定する（ステップＳ６４３）。未処理のＮＣグループが残っていると判定した場合は、ステップＳ６１１に戻り、残りのＮＣグループに対してループＬ６０１の処理を行う。
一方、ステップＳ６４３において、全てのＮＣグループに対してループＬ６０１の処理を行ったと判定した場合、同図の処理を終了する。
【０１１４】
図１８は、優先順位決定部４２１（図３）が、ユーザ別使用時間情報を更新する処理手順を示すフローチャートである。優先順位決定部４２１は、図１６のステップＳ６０１において、同図の処理を行う。
同図の処理において、優先順位決定部４２１は、まず、ユーザグループ分類情報に示されるユーザＩＤ毎、すなわちユーザ毎に処理を行うループＬ７０１を開始する（ステップＳ７０１）。さらに、優先順位決定部４２１は、ＶＭテーブルに示される仮想マシンＩＤ毎、すなわち仮想マシン毎に処理を行うループＬ７０２を開始する（ステップＳ７０２）。
【０１１５】
次に、優先順位決定部４２１は、ループＬ７０１で処理対象となっているユーザＩＤ、および、ループＬ７０２で処理対象となっている仮想マシンＩＤをキーとして使用履歴情報を検索して、該当するユーザが該当する仮想マシンを最後に使用した際の使用終了日を取得する（ステップＳ７１２）。
【０１１６】
また、優先順位決定部４２１は、ループＬ７０１で処理対象となっているユーザＩＤ、および、ループＬ７０２で処理対象となっている仮想マシンＩＤをキーとして使用履歴情報を検索して、該当するユーザが該当する仮想マシンを使用した使用時間を取得し、取得した使用時間を合計して、ユーザ毎かつ仮想マシン毎の累積使用時間を算出する（ステップＳ７１３）。
【０１１７】
そして、優先順位決定部４２１は、ＶＭテーブルに示される全ての仮想マシンＩＤについて、ループＬ７０２の処理を行ったか否かを判定する（ステップＳ７１４）。未処理の仮想マシンＩＤが残っていると判定した場合は、ステップＳ７１１に戻り、残りの仮想マシンＩＤに対してループＬ７０２の処理を行う。
【０１１８】
一方、ステップＳ７１４において、全ての仮想マシンＩＤに対してループＬ７０２の処理を行ったと判定した場合、優先順位決定部４２１は、ステップＳ７１３で算出したユーザ毎かつ仮想マシン毎の累積使用時間を合計して、ユーザ毎の仮想マシンの使用時間合計を算出する（ステップＳ７２１）。
【０１１９】
そして、優先順位決定部４２１は、ステップＳ７１２で取得した使用終了日（最終）や、ステップＳ７１３で算出した累積使用時間や、ステップＳ７２１で算出した使用時間合計に基づいて、ユーザ別使用時間情報の、ループＬ７０１で処理対象となっているユーザＩＤの行を更新する（ステップＳ７２２）。
例えば、使用履歴情報が図４に示す内容の場合、優先順位決定部４２１は、ユーザ別使用時間情報の各行を図７に示す内容のように更新する。
【０１２０】
そして、優先順位決定部４２１は、ユーザグループ分類情報に示される全てのユーザＩＤについて、ループＬ７０１の処理を行ったか否かを判定する（ステップＳ７２３）。未処理のユーザＩＤが残っていると判定した場合は、ステップＳ７０１に戻り、残りのユーザＩＤに対してループＬ７０１の処理を行う。
一方、ステップＳ７２３において、全てのユーザＩＤに対してループＬ７０１の処理を行ったと判定した場合、同図の処理を終了する。
【０１２１】
次に、図１６のステップＳ６２２において優先順位決定部４２１（図３）が行う、使用時間に対する重み付けについて説明する。
図１９は、優先順位決定部４２１が行う、使用時間に対する重み付けの例を示す説明図である。
同図において、四角の各々は仮想マシンの情報を示しており、上段は当該仮想マシンの仮想マシン識別情報を、下段は当該仮想マシンの使用時間および重み付けされた使用時間を示している。
【０１２２】
まず、派生元の仮想マシンの無い仮想マシンＶＭ１およびＶＭ２に対しては、優先順位決定部４２１は、使用時間をそのまま重み付けされた使用時間としている。
一方、仮想マシンＶＭ１から仮想マシンＶＭ１−１およびＶＭ１−２が派生しているように、１つの仮想マシンから複数の仮想マシンが派生している場合、優先順位決定部４２１は、派生元の仮想マシンの重み付けされた使用時間を、派生先の仮想マシンの数で除算し、得られた商を派生先の各仮想マシンの使用時間に加える重み付けを行っている。
【０１２３】
図１９の例では、優先順位決定部４２１は、派生元の仮想マシンＶＭ１の重み付けされた使用時間「０：３０」（３０分）を、派生先の仮想マシンの数「２」で除算して、商「０：１５」（１５分）を得る。そして、優先順位決定部４２１は、派生先の仮想マシンＶＭ１−１の使用時間「１：３０」（１時間３０分）に、算出した１５分を加えて、仮想マシンＶＭ１−１の重み付けされた使用時間を「１：４５」（１時間４５分）としている。同様に、優先順位決定部４２１は、派生先の仮想マシンＶＭの使用時間「１：００」（１時間）に対して、重み付けされた使用時間を「１：１５」（１時間１５分）としている。
【０１２４】
また、仮想マシンＶＭ１−１から仮想マシンＶＭ１−１−１が派生しているように、１つの仮想マシンから１つの仮想マシンが派生している場合、優先順位決定部４２１は、派生元の仮想マシンの重み付けされた使用時間を派生先の仮想マシンの使用時間に加える重み付けを行っている。
【０１２５】
図１９の例では、優先順位決定部４２１は、派生元の仮想マシンＶＭ１−１の重み付けされた使用時間「１：４５」（１時間４５分）を、派生先の仮想マシンＶＭ１−１−１−の使用時間「２：００」（２時間）に加えて、仮想マシンＶＭ１−１−１の重み付けされた使用時間を「３：４５」（３時間４５分）としている。
【０１２６】
以上のように、優先順位決定部４２１が、派生先の仮想マシンの使用時間を長くする重み付けを行うことで、図１６のステップＳ６２３において、派生先の仮想マシン、すなわち新たにカスタマイズされた仮想マシンの優先度の値を小さくする。これによって、ステップＳ６４２において、新たにカスタマイズされた仮想マシンがＶＭキャッシュ１３１に記憶される優先順位を高くすることができる。
【０１２７】
ここで、新たにカスタマイズされた仮想マシンは、カスタマイズのバージョンが進んでいる点で、ユーザが使用する可能性が高いと考えられる。従って、優先順位決定部４２１が、派生先の仮想マシンの使用時間を長くする重み付けを行うことで、実行される可能性の高い仮想マシンの実行用データを予めノードコントローラ装置１００が取得しておくようにできる。
【０１２８】
なお、優先順位決定部４２１が行う重み付けは、上述した派生元の仮想マシンの重み付けされた使用時間を派生先の仮想マシンの数で除算するものに限らず、派生先の仮想マシンの使用時間を長くする様々な重み付けを用いることができる。例えば、優先順位決定部４２１が、派生元の仮想マシンの重み付けされた使用時間を、派生先の仮想マシンの使用時間に応じて分配して、派生先の仮想マシンの使用時間に加えるようにしてもよい。
この場合、派生先の仮想マシンが複数あるときに、使用時間の長い仮想マシン、すなわち、ユーザによってよく使用されている点で、さらに使用される可能性の高い仮想マシンの使用時間を、より長くすることができる。
【０１２９】
あるいは、優先順位決定部４２１が、派生元の仮想マシンの重み付けされた使用時間を、そのまま派生先の各仮想マシンの使用時間に加えるようにしてもよい。
この場合、派生先の仮想マシンの数が多くても、派生先の仮想マシンの使用時間をより長くできる。上述したように、派生先の仮想マシンは、カスタマイズのバージョンが進んでいる点で、ユーザが使用する可能性が高いと考えられる。従って、実行される可能性の高い仮想マシンの実行用データを予めノードコントローラ装置１００が取得しておくようにできる。
【０１３０】
図２０は、優先順位決定部４２１（図３）が、使用時間に対する重み付けを行う処理手順を示すフローチャートである。優先順位決定部４２１は、図１６のステップＳ６２２において、同図の処理を行う。
【０１３１】
同図の処理において、優先順位決定部４２１は、まず、ユーザ別使用時間情報から処理対象の行を読み出し、読み出した行に含まれる仮想マシン識別情報の最大階層数を取得する（ステップＳ８０１）。
例えば、図１９に示す例において、優先順位決定部４２１は、ｒｏｏｔの階層数を「０」として、仮想マシンＶＭ１−１−１の階層数「３」を最大階層数として取得する。
【０１３２】
次に、優先順位決定部４２１は、第１階層の仮想マシン、すなわち派生元の無い仮想マシンについては、その使用時間をそのまま重み付けされた使用時間とする（ステップＳ８０２）。
例えば、図１９で説明したように、優先順位決定部４２１は、第１階層の仮想マシンＶＭ１およびＶＭ２に対しては、使用時間をそのまま重み付けされた使用時間としている。
【０１３３】
次に、優先順位決定部４２１は、第２階層からステップＳ８０１で取得した最大階層までの各階層について、階層数の小さい順に処理を行うループＬ８０１を開始する（ステップＳ８１１）。
そして、優先順位決定部４２１は、ループＬ８０１で処理対象となっている階層数の仮想マシン識別情報を、派生元毎に分類する（ステップＳ８１２）。
例えば、図１９に示す例において、階層数２の仮想マシン識別情報「１−１」と「１−２」とは、同一の仮想マシン識別情報「１」から派生している。そこで、優先順位決定部４２１は、仮想マシン識別情報「１−１」と「１−２」とを、同じグループに分類する。
【０１３４】
次に、優先順位決定部４２１は、ステップＳ８１２で分類した分類したグループ毎、すなわち派生元毎に処理を行うループＬ８０２を開始する（ステップＳ８２１）。
そして、優先順位決定部４２１は、派生元の仮想マシンの重み付けされた使用時間に基づいて、派生先の仮想マシンの使用時間に加算する使用時間（重み）を算出する（ステップＳ８２２）。
例えば、図１９で説明したように、優先順位決定部４２１は、派生元の仮想マシンＶＭ１の重み付けされた使用時間「０：３０」（３０分）を、派生先の仮想マシンの数「２」で除算して、商「０：１５」（１５分）を得る。
【０１３５】
そして、優先順位決定部４２１は、算出した重みを派生先の各仮想マシンの使用時間に加算する（ステップＳ８２３）。
例えば、図１９で説明したように、優先順位決定部４２１は、派生先の仮想マシンＶＭ１−１の使用時間「１：３０」（１時間３０分）に、算出した１５分を加えて、仮想マシンＶＭ１−１の重み付けされた使用時間を「１：４５」（１時間４５分）とする。同様に、優先順位決定部４２１は、派生先の仮想マシンＶＭの使用時間「１：００」（１時間）に対して、重み付けされた使用時間を「１：１５」（１時間１５分）とする。
【０１３６】
そして、優先順位決定部４２１は、ループＬ８０２における全てのグループに対して、当該ループＬ８０２の処理を行ったか否かを判定する（ステップＳ８２４）。未処理のグループが残っていると判定した場合は、ステップＳ８２１に戻り、残りのグループに対してループＬ８０２の処理を行う。
【０１３７】
一方、ステップＳ８２４において、全てのグループに対してループＬ８０２の処理を行ったと判定した場合、優先順位決定部４２１は、ループＬ８０１における全ての階層数に対して、当該ループＬ８０１の処理を行ったか否かを判定する（ステップＳ８３１）。未処理の階層数が残っていると判定した場合は、ステップＳ８１１に戻り、残りの階層数に対してループＬ８０１の処理を行う。
一方、ステップＳ８３１において、全ての階層数に対してループＬ８０１の処理を行ったと判定した場合、同図の処理を終了する。
【０１３８】
以上のように、優先順位決定部４２１は、仮想マシンの実行用データをＶＭキャッシュ１３１が記憶する優先順位を決定する際に、派生先の仮想マシンに対して、派生元の仮想マシンの使用時間を反映させ、使用時間の長い仮想マシンの実行用データを優先的にＶＭキャッシュ１３１に記憶させるようにする。これにより、カスタマイズのバージョンが進んでいる派生先の仮想マシンの実行用データを優先的にＶＭキャッシュ１３１に記憶させることができる。
このカスタマイズのバージョンが進んでいる仮想マシンは、ユーザが使用する可能性が高いと考えられる。上記のように、優先順位決定部４２１が、派生元の仮想マシンの使用時間を反映させ、派生先の仮想マシンの使用時間を長くする重み付けを行うことで、実行される可能性の高い仮想マシンの実行用データを予めノードコントローラ装置１００（ＶＭキャッシュ１３１）が取得しておくようにできる。
【０１３９】
また、ノードコントローラ装置１００は、ユーザに応じてグループ分けされており、グループ毎に、仮想マシンの実行用データをＶＭキャッシュ１３１が記憶する。
このように、ユーザに応じて使用可能なノードコントローラ装置１００を特定しておくことで、各ユーザグループに対して使用可能なノードグループを確保できる。すなわち、あるユーザが仮想マシンを実行したいときに、他のユーザグループのユーザが仮想マシンを実行しているためにいずれのノードコントローラ装置１００においても充分な資源を確保できず仮想マシンを実行できない事態を回避できる。
【０１４０】
また、仮想マシン実行部１２１（図２）は、新たに生成された派生先の仮想マシンが未使用の場合にも、使用履歴情報を更新する（情報を書き込む）際に、新たに生成された派生先の仮想マシンについても、使用終了日等の情報を書き込む。これによって、優先順位決定部４２１が、仮想マシンの実行用データをＶＭキャッシュ１３１が記憶する優先順位を決定する際に、派生先の仮想マシンの優先順位を高くすることができる。
【０１４１】
また、仮想マシン実行部１２１は、使用履歴情報を更新する際に、新たに生成された派生先仮想マシンの使用終了日を派生元の仮想マシンの使用終了日よりも遅い日付にするなど、仮想マシンの優先順位を派生元の仮想マシンの優先順位よりも高くする内容の情報を書き込む。これによって、優先順位決定部４２１が、仮想マシンの実行用データをＶＭキャッシュ１３１が記憶する優先順位を決定する際に、派生先の仮想マシンの優先順位をさらに高くすることができる。
【０１４２】
なお、コンピュータシステム１の全部または一部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより各部の処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。
また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、コンパクトディスク等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含むものとする。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【０１４３】
以上、この発明の実施形態を図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【０１４４】
１  コンピュータシステム
１００、１００−１〜１００−５  ノードコントローラ装置
１１０  通信部
１２０  処理部
１２１  仮想マシン実行部
１２２  データ有無判定部
１３０  記憶部
１３１  ＶＭキャッシュ
２００  ストレージ管理装置
３００  ストレージサーバ装置
４００  クラウドコントローラ装置
４１０  通信部
４２０  処理部
４２１  優先順位決定部
４２２  データ登録部
４２３  ＶＭ制御部
４３０  記憶部
５００  ユーザ端末装置
９００  ネットワーク
【図１】
0005566342.tif 000002
【図２】
0005566342.tif 000003
【図３】
0005566342.tif 000004
【図４】
0005566342.tif 000005
【図５】
0005566342.tif 000006
【図６】
0005566342.tif 000007
【図７】
0005566342.tif 000008
【図８】
0005566342.tif 000009
【図９】
0005566342.tif 000010
【図１０】
0005566342.tif 000011
【図１１】
0005566342.tif 000012
【図１２】
0005566342.tif 000013
【図１３】
0005566342.tif 000014
【図１４】
0005566342.tif 000015
【図１５】
0005566342.tif 000016
【図１６】
0005566342.tif 000017
【図１７】
0005566342.tif 000018
【図１８】
0005566342.tif 000019
【図１９】
0005566342.tif 000020
【図２０】
0005566342.tif 000021