(57)【特許請求の範囲】
【請求項１】
仮想マシンを生成可能な情報処理装置上で仮想マシンを起動する際に、前記起動する仮想マシンに割り当てられるメモリ量から前記情報処理装置のメモリの空きメモリ量を減じた第１の不足するメモリ量と、前記起動する仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶部に記憶し、
前記起動処理時間は、前記第１の不足するメモリ量を起動済みの他の仮想マシンに割り当てていたメモリ領域から開放して前記起動する仮想マシンに割り当てることに要する時間を含み、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記新たな仮想マシンに割り当てるメモリ量から前記空きメモリ量を減じた第２の不足するメモリ量と一致する前記第１の不足するメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定すること、
を含む処理をコンピュータに実行させる起動制御プログラム。
【請求項２】
前記記憶することは、前記第１の不足するメモリ量に加えて、前記起動する仮想マシンの起動後のメモリの第１のオーバコミットの程度も、前記起動処理時間と関連付けて記憶部に記憶することを有し、
前記決定する処理において、前記第２の不足するメモリ量と一致する前記第１の不足するメモリ量に関連付けられた前記起動処理時間のうち、さらに、前記新たな仮想マシンの起動後のメモリの第２のオーバコミットの程度と一致する前記第１のオーバコミットの程度に関連付けられる前記起動処理時に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定する、請求項１に記載の起動制御プログラム。
【請求項３】
前記第１のオーバコミットの程度及び前記第２のオーバコミットの程度は、
複数の仮想マシンに割り当てたメモリ総量の、前記情報処理装置が実装するメモリ総量に対する比率である、オーバコミット率である、請求項２に記載の起動制御プログラム。
【請求項４】
前記第１のオーバコミットの程度及び前記第２のオーバコミットの程度は、
複数の仮想マシンに割り当てたメモリ総量から、前記情報処理装置が実装するメモリ総量を減じたメモリ量である、請求項２に記載の起動制御プログラム。
【請求項５】
前記決定する処理は、前記起動処理実績データ内に前記第２の不足するメモリ量と一致する前記第１の不足するメモリ量が存在しない場合、前記第２の不足するメモリ量に対応する予め見積もりした見積もり遅延時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定し、前記予め見積もりした見積もり遅延時間は、前記起動する仮想マシンとは異なる他の仮想マシンでの遅延時間から予め見積もりした遅延時間である、請求項１に記載の起動制御プログラム。
【請求項６】
前記新たな仮想マシンを起動する際に前記起動済みの他の仮想マシンに割り当てていたメモリ領域を開放して前記新たな仮想マシンに割り当てるメモリ量がゼロの場合、前記新たな仮想マシンの起動処理を開始するタイミングを、前記所定の起動タイミングのまま変更しない、請求項１に記載の起動制御プログラム。
【請求項７】
仮想マシンを生成可能な情報処理装置上で仮想マシンを起動する際に、前記起動する仮想マシンに割り当てられるメモリ量から前記情報処理装置のメモリの空きメモリ量を減じた第１の不足するメモリ量と、前記起動する仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶部に記憶し、
前記起動処理時間は、前記第１の不足するメモリ量を起動済みの他の仮想マシンに割り当てていたメモリ領域から開放して前記起動する仮想マシンに割り当てることに要する時間を含み、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記新たな仮想マシンに割り当てるメモリ量から前記空きメモリ量を減じた第２の不足するメモリ量と一致する前記第１の不足するメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定すること、
をコンピュータが実行する起動制御方法。
【請求項８】
仮想マシンを生成可能な情報処理装置上で仮想マシンを起動する際に、前記起動する仮想マシンに割り当てられるメモリ量から前記情報処理装置のメモリの空きメモリ量を減じた第１の不足するメモリ量と、前記起動する仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶する記憶部と、
前記起動処理時間は、前記第１の不足するメモリ量を起動済みの他の仮想マシンに割り当てていたメモリ領域から開放して前記起動する仮想マシンに割り当てることに要する時間を含み、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記新たな仮想マシンに割り当てるメモリ量から前記空きメモリ量を減じた第２の不足するメモリ量と一致する前記第１の不足するメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定する起動タイミング決定部と、
を有する起動制御装置。
【請求項９】
仮想マシンを生成可能な情報処理装置上で仮想マシンを起動する際に、前記起動する仮想マシンの起動の為に起動済みの他の仮想マシンに割り当てていたメモリ領域を開放して前記起動する仮想マシンに割り当てた第１の不足するメモリ量と、前記起動する仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶部に記憶すること、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記新たな仮想マシンの起動の為に起動済みの他の仮想マシンに割り当てていたメモリ領域を開放して前記新たな仮想マシンに割り当てる第２の不足するメモリ量と一致する前記第１の不足するメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定すること、
を含む処理をコンピュータに実行させる起動制御プログラム。
【請求項１０】
仮想マシンを生成可能な情報処理装置上で仮想マシンを起動する際に、前記起動する仮想マシンの起動の為に起動済みの他の仮想マシンに割り当てていたメモリ領域を開放して前記起動する仮想マシンに割り当てた第１の不足するメモリ量と、前記起動する仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶部に記憶すること、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記新たな仮想マシンの起動の為に起動済みの他の仮想マシンに割り当てていたメモリ領域を開放して前記新たな仮想マシンに割り当てる第２の不足するメモリ量と一致する前記第１の不足するメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定すること、
をコンピュータが実行する起動制御方法。
【請求項１１】
仮想マシンを生成可能な情報処理装置上で仮想マシンを起動する際に、前記起動する仮想マシンの起動の為に起動済みの他の仮想マシンに割り当てていたメモリ領域を開放して前記起動する仮想マシンに割り当てた第１の不足するメモリ量と、前記起動する仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶する記憶部と、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記新たな仮想マシンの起動の為に起動済みの他の仮想マシンに割り当てていたメモリ領域を開放して前記新たな仮想マシンに割り当てる第２の不足するメモリ量と一致する前記第１の不足するメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定する起動タイミング決定部と、
を有する起動制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，起動制御プログラム、起動制御方法及び起動制御装置に関する。
【背景技術】
【０００２】
クラウドコンピューティングは、データセンタ内の物理マシン（情報処理装置）上に仮想化基盤（以下ハイパーバイザ）により複数の仮想マシンを配備し、配備された仮想マシンでサービスシステムを構築する。そして、サービスシステムを利用する利用者の端末装置は、ネットワークを介して仮想マシンにアクセスしサービスシステムを利用する。利用者は、自前で物理マシンを調達せずに、物理マシン上に必要な仮想マシンを配備することで所望のサービスシステムを構築する。
【０００３】
クラウドコンピューティングでは、物理マシン上に特定の仮想マシンを集約するなどにより、物理マシンであるハードウエアを効率的に利用することができ、省エネ、省資源化を図ることができる。
【０００４】
例えば、ハイパーバイザは、CPU資源を複数の仮想マシンで共用させ、またCPUを使用していない仮想マシンからCPUを必要とする仮想マシンにCPUの割当を変更するなどを行う。
【０００５】
また、メモリ資源についても、ハイパーバイザは、メモリ内の不要不急のデータを外部のストレージ装置に移動するなどしてメモリを解放し、メモリを必要とする仮想マシンに割当を変更する制御を行う。
【０００６】
近年、ハイパーバイザは、物理マシンが実装するメモリ容量以上のメモリを仮想マシンに割り当てるメモリオーバコミット状態に制御することが可能になってきている。例えば、ハイパーバイザがメモリ容量以内でメモリを仮想マシンに割り当てる場合、メモリ使用率は比較的高いが、CPU使用率が低くなることがある。したがって、物理マシンの効率化の観点から、メモリオーバコミット状態で仮想マシンにメモリを割り当てることが求められている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平７−２８６５７号公報
【特許文献２】特開２０１３−８３２２号公報
【特許文献３】特開２０１３−１５２５１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
一方、クラウドコンピューティングを利用するクラウドシステムにおいて、予め決められたスケジュールにしたがって、仮想マシンの起動と停止を自動的に制御することが行われる。このような自動起動制御スケジュール管理においては、各仮想マシンがスケジュール通りの時刻に起動及び停止されることが必要である。
【０００９】
しかしながら、前述のメモリオーバコミット状態を許容してできるだけ多くの仮想マシンを配備する状況下で、自動起動制御スケジュール管理により仮想マシンを起動すると、その起動処理時間がメモリ不足により長くなり、スケジュール通りに起動処理が完了しないリスクがある。特に、複数の仮想マシンの起動予定時刻が短時間の間に集中すると、特に深刻な事態に陥るリスクがある。
【００１０】
そこで，第１の側面では，仮想マシンの起動処理の完了と起動スケジュールとのずれを抑止する起動制御プログラム、起動制御方法及び起動制御装置を提供することにある。
【課題を解決するための手段】
【００１１】
実施の形態の第１の態様では，仮想マシンを生成可能な情報処理装置上で仮想マシンが起動される際の、前記情報処理装置上に起動済みの仮想マシンに割り当てられたメモリ量と起動する仮想マシンに割り当てられるメモリ量の和に基づく第１のメモリ量と、前記起動する仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶部に記憶し、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記情報処理装置上に起動済みの仮想マシンに割り当てられたメモリ量と前記新たに起動する仮想マシンに割り当てられるメモリ量の和に基づく第２のメモリ量と相関を有する前記第１のメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定すること、を有する処理をコンピュータに実行させる起動制御プログラムである。
【発明の効果】
【００１２】
第１の側面によれば，仮想マシンの起動処理の完了と起動スケジュールとのずれを抑止することができる。
【図面の簡単な説明】
【００１３】
【図１】本実施の形態におけるクラウドコンピューティングによるクラウドシステムを示す図である。
【図２】物理マシン群１内の一つの物理マシンPM1の構成を示す図である。
【図３】管理用物理マシン内の物理マシンPM0の構成を示す図である。
【図４】ハイパーバイザHV1によるメモリ制御の一例を示す図である。
【図５】仮想マシンの起動処理の概略を示す図である。
【図６】上記の第１の起動制御による起動制御機構４＿１（起動制御プログラムBC_PR）による仮想マシンの自動起動制御の処理を示すフローチャート図である。
【図７】第２の起動制御による起動制御機構４＿１（起動制御プログラムBC_PR）による仮想マシンの自動起動制御の処理を示すフローチャート図である。
【図８】図７の起動時刻チューニングプログラムS20の詳細な処理を示すフローチャート図である。
【図９】起動処理イベントログの一例を示す図である。
【図１０】物理マシンPM1に実装されているサービスクオリティコーディネータ（SOC：Service Quality Coordinator、プログラム）が採取したデータ例である。
【図１１】物理マシンの実装されているメモリ総量のデータ例を示す図である。
【図１２】自動起動制御スケジュールの一例を示す図である。
【図１３】仮想マシンに割り当てられる（または割当予定の）メモリ量の例を示す図である。
【図１４】起動処理時間実績データログの例を示す図である。
【図１５】見積もり遅延時間の一例を示す図である。
【図１６】起動制御処理の具体例を示す図である。
【図１７】起動制御処理の具体例を示す図である。
【発明を実施するための形態】
【００１４】
図１は、本実施の形態におけるクラウドコンピューティングによるクラウドシステムを示す図である。クラウドシステムは、情報処理装置である複数の物理マシンを有する物理マシン群１と、物理マシン群１を管理するシステムが構築される管理用物理マシン２とを有する。
【００１５】
物理マシン群１内のある物理マシンPM1には、ハイパーバイザHV1の仮想化機能により、複数の仮想マシンVMが起動され生成または配備される。図１の例では、３つの仮想マシンVM1〜VM3が起動済みであり、１つの仮想マシンVM4が新たに起動されようとし、２つの仮想マシンVM5,VM6は停止中である。物理マシン群１内の各物理マシンPM1上に生成された仮想マシンVM1〜VM3により種々のサービスシステムが構築される。そして、各サービスシステムを利用する利用者の端末装置５＿１〜５＿３は、第１のネットワークNET1を介してサービスシステムを構築する仮想マシンVM1〜VM3にアクセスし、それぞれのサービスシステムを利用する。
【００１６】
一方、管理用物理マシン２の物理マシンPM0には、ハイパーバイザHV0の仮想化機能により、管理者ポータルサイト３を構成する仮想マシンVM_aと、物理マシン群１内の複数の仮想マシンを運用管理する管理サーバ４を構成する仮想マシンVM_bとが起動され稼働中である。
【００１７】
クラウドシステムの管理者の端末装置６は、第２のネットワークNET2を介して管理者ポータルサイト３にアクセスし、仮想マシンの登録、仮想マシンの起動（ブート）、停止（シャットダウン）などの要求、仮想マシンの自動起動スケジュールの設定などを行う。
【００１８】
一方、管理サーバ４は、管理者の端末装置６からの要求に基づいて、仮想マシンの起動や停止を、物理マシン群１のハイパーバイザHV1に実行させる。また、管理サーバ４は、物理マシン群１の各種ステータス情報をハイパーバイザHV1などから入手し、管理者による運用管理のために提供する。
【００１９】
さらに、管理サーバ４は、管理者により設定された自動起動スケジュールに基づいて、物理マシン群１上に仮想マシンVMを起動する起動制御を行う起動制御機構４＿１を有する。この起動制御機構４＿１は、起動予定の仮想マシンの起動処理時間を予測し、自動起動スケジュールの起動タイミングで起動処理を完了できるように、起動処理開始タイミング（起動時刻または起動予定時刻）を調整する。詳細は、後で詳述する。
【００２０】
図２は、物理マシン群１内の一つの物理マシンPM1の構成を示す図である。物理マシンPM1は、通常のコンピュータ（情報処理装置）と同様に、CPU(Central Processing Unit)１０と、メインメモリであるメモリ１２と、ネットワークNETに接続されるネットワークインターフェース装置（Network Interface Card）１６と、ハードディスクのような大容量の記憶装置であるストレージ１８と、それらを接続するバス１９とを有する。ストレージ１８は、入出力装置１４を介してバス１９に接続される。
【００２１】
ストレージ１８内には、ハイパーバイザHV1と、各仮想マシンVMのゲストOS(Operating System)G_OSとが記憶される。ハイパーバイザHV1とゲストOS G_OSは、メモリ１２内に展開され、CPU１０により実行される。また、ストレージ１８には、各仮想マシンが実行するアプリケーションプログラム（図示せず）が記憶される。
【００２２】
さらに、ストレージ１８には、メモリ１２内の例えば最近使われていないまたは使用頻度が低いデータをコピーしてスワップアウトされたスワップファイルSW_Fが記憶される。
【００２３】
このスワップファイルは、簡単に説明すると次のとおりである。すなわち、ハイパーバイザHV1は、メモリ管理の一つとして、起動済みの仮想マシンに割り当てているメモリ領域のうち、最近使われていないまたは使用頻度が低いなどのメモリ領域のデータを外部ストレージ１８内のスワップファイルSW_Fにコピーする。そして、ハイパーバイザは、そのメモリ領域を仮想マシンへの割当から解放し、新たにメモリ領域を要求している仮想マシンに割り当てるスワップ処理を行う。このスワップ処理を行うことで、ハイパーバイザHV1は、実装されているメモリ１２の総容量を超えて、仮想マシンにメモリ領域を割り当てることができる。また、ハイパーバイザHV1は、起動済みの仮想マシンに割り当てているメモリ領域のうち、最近使われていないなどのメモリ領域のデータを圧縮して空き領域を確保し、新たにメモリ領域を要求している仮想マシンに割り当てることなども行う。
【００２４】
ハイパーバイザHV1は、仮想マシンの構成を定義する情報に基づいて、起動した仮想マシンにCPU１０またはCPU内のコアを割り当て、要求されているメモリ量をメモリから割り当て、要求されているストレージ容量をストレージ１８から割り当て、そして、要求されているネットワークの帯域を割り当てる。これらのうち、ハイパーバイザは、仮想マシンへのメモリの割り当てをメモリ管理機能により維持する。
【００２５】
例えば、図２の物理マシンPM1上には、仮想マシンVM2, VM3, VM1, VM4が起動済みであると仮定する。そのため、ハイパーバイザHV1は、４つの仮想マシンVM1〜VM4にそれぞれメモリ１２内のメモリ領域MEM_VM1〜MEM_VM4を割り当てる。そして、ハイパーバイザHV1は、仮想マシンVM1〜VM4に、実装されているメモリ１２の総容量を越えてメモリ領域を割り当てることもできる。このような実装メモリ量を超えてメモリを割り当てるメモリオーバコミットメント状態では、ハイパーバイザはそのメモリ管理機能により、メモリ内のデータの一部を圧縮し、またはメモリ内のデータをストレージ１８内のスワップファイルSW_Fにコピーする。したがって、メモリオーバコミットメントの程度が高くなるほど、ハイパーバイザはそのメモリ管理処理でより忙しい状況に陥る。
【００２６】
図３は、管理用物理マシン内の物理マシンPM0の構成を示す図である。物理マシンPM0は、図２の物理マシンPM1と同様に、CPU２０と、メインメモリであるメモリ２２と、ネットワークNETに接続されるネットワークインターフェース装置２６と、ストレージ２８と、ストレージ２８の入出力装置２４と、それらを接続するバス２９とを有する。
【００２７】
ストレージ２８には、ハイパーバイザHV0と、各仮想マシンVMのゲストOS G_OSとが記憶される。さらに、ストレージ２８には、物理マシン群１に生成される仮想マシンVMを管理する管理プログラムA_PRと、起動制御機構４＿１を実現する起動制御プログラムBC_PRとが記憶される。これらのソフトウエアは、メモリ２２に展開され、CPU２０により実行される。
【００２８】
［メモリオーバコミットメントとメモリ管理］
図１に示されるクラウドシステムでは、ハイパーバイザHV1は、物理マシンPM1上に多数の仮想マシンVMを起動し、仮想マシンVMの稼働を制御する。そして、ハイパーバイザHV1が、仮想マシンVMにメモリの総容量以内でしかメモリ領域を割り当てないで仮想マシンVMを起動及び稼働させる場合、CPU資源はあまり活用されないことが判明した。例えば、物理マシンPM1内のメモリ使用率が８０％を越えていても、CPU使用率は２０％未満になる場合がある。これは、起動済みの仮想マシンVMが全てアクティブ状態である場合はむしろまれであり、通常、多くの仮想マシンVMがアイドル状態にあるからである。
【００２９】
そこで、本実施の形態において、ハイパーバイザHV1は、複数の仮想マシンVMにメモリの総容量を超えてメモリ領域を割り当てるメモリオーバコミットメント状態で仮想マシンを制御することを許容する。そのようにメモリの割り当てを行うことで、CPUの使用率を上げることができ、ハードウエアの効率的な活用ができる。そして、メモリオーバコミットメント状態を可能にするために、ハイパーバイザHV1は、以下に示すメモリ制御を実行する。
【００３０】
図４は、ハイパーバイザHV1によるメモリ制御の一例を示す図である。ハイパーバイザは、メモリ領域の割り当て要求が発生すると（S1のYES）、空きメモリ量が要求されたメモリ量以上である場合（S2のYES）、空きメモリ領域を要求元に割り当てる（S4）。しかし、空きメモリ量が要求されたメモリ量未満の場合（S2のNO）、ハイパーバイザは、要求されているメモリ量から空きメモリ量を減じたメモリ量を、他の仮想マシンに割り当て中のメモリ領域から奪う処理（または取得する処理。以下同様。）を実行する（S3）。メモリ領域の割り当てを要求するのは、例えば起動済みの仮想マシンや、仮想マシンを起動する際の起動プログラムなどである。
【００３１】
上記の他の仮想マシンに割り当て中のメモリ領域から奪うメモリ量は、メモリ割当要求に応えるのに不足するメモリ量である。そして、この不足するメモリ量を他の仮想マシンに割り当てているメモリから奪う処理は、ハイパーバイザのメモリ管理の処理の一つであり、具体的には、前述の最近使用されていないなどのデータを圧縮してメモリ領域を開放する処理や、最近使用されていないなどのデータをストレージ１８内のスワップファイルにコピーしてメモリ領域を開放する処理などである。
【００３２】
このように、ハイパーバイザHV1は、メモリオーバコミットメント状態で、新たな仮想マシンが起動する際にメモリの割り当てが要求される場合に、上記の不足するメモリ量を他の仮想マシンに割り当て中のメモリ領域から奪う処理S3を実行する。また、ハイパーバイザHV1は、メモリオーバコミットメント状態で、起動済みの仮想マシンがアイドル状態からアクティブ状態に復帰しメモリへアクセスする際などでも同様の不足するメモリ量を奪う処理を行う。
【００３３】
［仮想マシンの起動処理］
図５は、仮想マシンの起動処理の概略を示す図である。仮想マシンの起動処理は、ハイパーバイザHV1による仮想マシンのメモリ領域の割り当て（S6）と、割り当てられたメモリ領域内へのゲストOSのロード（S8）と、ゲストOSによる起動処理（S9）を有する。新たな仮想マシンを起動開始するにあたり、ハイパーバイザHV1はまず起動対象の仮想マシンにメモリ領域の割り当てを実行する（S6）。この割り当て処理は、図４のハイパーバイザによるメモリ制御で説明した要求メモリ量を要求元に割り当てる処理である。
【００３４】
したがって、メモリ内の空きメモリ量が要求メモリ量以上あれば、ハイパーバイザは、メモリ領域の割り当て処理を短時間で完了する。しかし、メモリ内の空きメモリ量が要求メモリ量未満の場合は、ハイパーバイザは不足するメモリ量を、起動済みの他の仮想マシンに割り当て中のメモリ領域から奪う処理（図４のS3）を実行する。この不足するメモリ容量を他の仮想マシンから奪う処理に要する時間は、不足するメモリ量のサイズや、ストレージ１８のアクセス頻度（例えばIOインターフェース装置１４の利用頻度）や、更にハイパーバイザのビジー状態などに応じて、ばらつきがある。
【００３５】
図５において、メモリ領域の割り当てが完了すると（S7のYES）、ハイパーバイザHV1は、割り当てたメモリ領域にストレージ１８内のゲストOSをロードし、起動制御をゲストOSに渡す（S8）。その後、CPUがメモリにロードされたゲストOSにアクセスしてゲストOSが起動し、仮想マシンの起動に必要な初期化処理などを含む起動処理を実行する（S9）。
【００３６】
上記のとおり、仮想マシンの起動処理時間BT（Boot Time）は、仮想マシンへのメモリ領域の割り当てに要する時間BT2と、ゲストOSをメモリ領域にロードし（S8）、ゲストOSが仮想マシンの起動処理を完了するまでの時間BT1との合計時間（BT=BT1+BT2）である。そして、メモリ領域割当時間BT2は、メモリオーバコミットメント状態か否かで異なる。
【００３７】
つまり、メモリオーバコミットメント状態でなければ、ハイパーバイザは空きメモリ領域から要求されたメモリ量を割り当てるだけであり、メモリ領域割当時間BT2は非常に短くほとんどゼロといえる。しかし、メモリオーバコミットメント状態の場合、ハイパーバイザは、他の仮想マシンに割り当て中のメモリから不足分のメモリ量を奪うための処理を行うので、メモリ領域割当時間BT2は長くなる。
【００３８】
さらに、メモリオーバコミットメント状態でのメモリ領域割当時間BT2は、新たに起動する仮想マシンにメモリを割り当てるのに不足するメモリ量（他の仮想マシンの割り当て中メモリから奪うメモリ量）の大きさに応じて変動する（不足メモリ量が大きい程長い）。また、メモリ領域割当時間BT2は、メモリオーバコミットメントの程度に応じても長くなる（程度が高いほど長い）。メモリオーバコミットメントの程度が高いと、ハイパーバイザはメモリ管理処理で多忙を極めているからである。また、それ以外の様々な要因、例えばスワップアウト処理時におけるストレージのアクセス頻度や、サービスシステムへのアクセス頻度などによっても異なる。
【００３９】
メモリオーバコミットメント状態の程度は、例えば、仮想マシンへのメモリ割り当て総量を実装メモリ総量で除算したメモリオーバコミットメント率である。または、仮想マシンへのメモリ割り当て総量から実装メモリ総量で減算した超過メモリ量である。メモリオーバコミットメント率や超過メモリ量が大きくなると、ハイパーバイザによる不足するメモリ量を他の仮想マシンから奪う処理に時間がかかることが予想される。
【００４０】
したがって、ハイパーバイザHV1によるメモリオーバコミットメント状態を許容してCPU使用率を高める制御を行うと、自動起動制御スケジュールにしたがって仮想マシンを起動する時の起動処理時間BT（=BT1+BT2）のうち、メモリ割当時間BT2は、第１に、不足するメモリ量に依存して変動する（不足するメモリ量が多いほど長い）。さらに、メモリ割当時間BT2は、不足するメモリ量に加えて、メモリオーバコミットメント状態の程度に応じても変動する（程度が高いほど長い）。このメモリ割当時間BT2による起動処理の遅延時間は、複数の仮想マシンが集中した時間帯に起動するようスケジュールが設定された場合には更に長くなる。そのため、メモリオーバコミットメント状態を許容すると、自動起動制御スケジュールに設定された起動タイミングに仮想マシンの起動処理が完了せず大幅に遅延することが予想される。
【００４１】
［起動制御プログラムによる起動制御］
本実施の形態における管理サーバ４の起動制御機構４＿１（起動制御プログラムBC_PR）は、自動起動制御スケジュールに設定されている各仮想マシンの起動時刻（または起動予定時刻）を、起動予定時刻での予測遅延時間分早めるよう調整する。起動予定時刻での予想起動遅延時間は、前述のとおり、主にメモリ割当時間TB2の変動により変動する。または、起動時刻を起動予定時刻での予測起動処理時間分早めるように調整してもよい。但し、起動処理時間TB(=TB1+TB2)のうち、時間TB1はメモリオーバコミットメント状態に依存せずほぼ一定の短い時間であるので、自動起動制御スケジュールは、この時間TB1を想定して設定される場合が多い。したがって、前述のように起動時刻を予測遅延時間分早める調整でもよい。
【００４２】
そこで、第１の起動制御では、管理制御プログラムBC_PRは、起動予定時刻において予測される起動マシンへのメモリ割り当てる際に不足するメモリ量（他の仮想マシンに割当中のメモリから奪うメモリ量）に基づいて、メモリ割当時間TB2による遅延時間を予測し、起動予定時刻を予測起動処理時間TB（＝TB1+TB2）（または予測遅延時間TB2）だけ早めるように調整する。さらに、管理制御プログラムは、メモリ割当時間TB2による遅延時間を、不足するメモリ量に加えて、メモリオーバコミットメントの程度にも基づいて予測し、起動予定時刻をその分早めるように調整するのが望ましい。
【００４３】
第１の起動制御では、予め見積もったメモリ割当時間TB2による遅延時間から予測される不足メモリ量に基づいて遅延時間を見積もる。このような遅延時間の予測処理は、仮想マシンの起動実績データが未だ蓄積されてない場合、または参照する起動実績データが存在しない場合に適用するのが望ましい。
【００４４】
一方、第２の起動制御では、管理制御プログラムは、仮想マシンを起動するたびに、不足するメモリ量と、メモリオーバコミットメントの程度と、起動処理時間TBとを関連付けて起動処理時間実績データログとして記憶する。そして、起動予定時刻を調整する際に、調整対象の仮想マシンの実績データログのうち、予測される不足するメモリ量と相関する（一致または近似する）実績データログの起動処理時間TBを抽出し、起動予定時刻を起動処理時間TBに基づいて早めるように調整する。さらに、管理制御プログラムは、予測される不足するメモリ量と相関する実績データログのうち、予測されるメモリオーバコミットメントの程度と相関する実績データログの起動処理時間TBを抽出し、起動予定時刻を起動処理時間TBに基づいて調整するのが望ましい。
【００４５】
上記のように、第２の起動制御では、十分な起動処理時間実績データが蓄積されている場合に、調整対象の仮想マシンの実績データログのうち、不足するメモリ量と相関性のある実績データの起動処理時間を抽出して、起動予定時刻を調整する。但し、不足するメモリ量と相関性のある実績データが存在しない場合は、第１の起動制御と同様に、予め見積もったメモリ割当時間TB2による遅延時間から予測される不足メモリ量に基づいて遅延時間を見積もる。
【００４６】
尚、実績データログ内に調整対象の仮想マシンの実績データがない場合は、異なる仮想マシンであっても不足するメモリ量が相関性がある実績データの起動処理時間を抽出して、起動予定時刻を調整するようにしてもよい。物理マシンが同じであれば、主として不足するメモリ量に依存して起動遅延時間が異なるからである。
【００４７】
なお、新たに仮想マシンを起動際に不足するメモリ量（他の仮想マシンに割り当てられたメモリから奪うメモリ量）は、既に起動した仮想マシンに割り当てたメモリ量と新たに起動しようとする仮想マシンに割り当てるメモリ量の総和と密接な関係または対応する関係にある。たとえば、調整対象の仮想マシンが起動する物理マシンの実装メモリ総量は同じである。したがって、起動済みVMと調整対象VMの割当メモリ量の総量は、実績データのスワップアウトメモリ量と予測されるスワップアウトメモリ量が既知であれば、新たに起動する調整対象の仮想マシンの起動時に予測される不足するメモリ量と一対一になる。但し、空きメモリ量は共にゼロと仮定する。したがって、割当メモリ量の総量は、新たに起動する調整対象の仮想マシンにとって不足するメモリ量と対応する値である。さらに、物理マシンの実装メモリ総量は同じであるので、割当メモリ量の総量は、起動後のメモリオーバコミットメントの程度に対応する値でもある。
【００４８】
したがって、上記の第１、第２の起動制御において、不足するメモリ量（他の仮想メモリに割り当てたメモリから奪うメモリ量）に代えて、既に起動済み仮想マシンに割り当てたメモリ量と新たに起動する仮想マシンに割り当てるメモリ量の総量を実績データログに記憶し、起動時刻の調整時に、予測割当メモリ総量と相関する実績データログの起動処理時間を参照して起動時刻の調整を行うようにしても良い。
【００４９】
［第１の起動制御］
図６は、上記の第１の起動制御による起動制御機構４＿１（起動制御プログラムBC_PR）による仮想マシンの自動起動制御の処理を示すフローチャート図である。前提として、クラウドシステムを運用する運用管理者などにより自動起動制御スケジュールが設定される（S10）。
【００５０】
図１２は、自動起動制御スケジュールの一例を示す図である。図１２のテーブルTBL4は、自動起動制御スケジュールの一例を示す。この例では、図１の物理マシンPM1上に仮想マシンVM1, VM2, VM3, VM4を起動するタイミングと停止するタイミングとが設定される。例えば、スケジュール番号001,002では、物理マシンPM1上に仮想マシンVM1が、１週間の月〜金の時刻08:00に起動（Action ON）し、時刻22:30に停止（Action OFF）するよう設定されている。他の仮想マシンVM2, MV3, MV4も同様である。したがって、この例では、月〜金の時刻07:30に仮想マシンVM2が、時刻07:40に仮想マシンVM3がそれぞれ起動し、その後、時刻08:00に仮想マシンVM1が、時刻08:10に仮想マシンVM4がそれぞれ起動するよう設定されている。
【００５１】
次に、起動制御プログラムは、起動時刻調整タイミングになると（S11のYES）、起動時刻チューニングプログラムを呼び出す（S12）。起動時刻調整タイミングは、例えば、管理者が仮想マシンの自動起動制御スケジュールを設定したタイミング、その設定を変更したタイミングであり、さらに、仮想マシンの起動処理と停止処理のイベントが発生したタイミングである。これらのタイミングで、新たな仮想マシンを起動する時にメモリ割当のために不足するメモリ量と、メモリオーバコミットメント状態の程度が変動し、それに応じて、予測される不足するメモリ量とメモリオーバコミットメント状態の程度が変動するため、起動予定時刻の再調整が必要になる。
【００５２】
そして、起動制御プログラムは、起動時刻（起動予定時刻）のタイミングになると（S13のYES）、起動制御運転を実行して、ハイパーバイザに仮想マシンの起動処理を行うよう指示する（S14）。
【００５３】
一方、起動時刻チューニングプログラムS20は、上記の呼び出しS12に応答して、起動予定時刻で予測される起動処理時間の遅延時間(TB2)を見積もり、起動予定時刻を遅延時間だけ早めて調整し、調整後の起動予定時刻を起動制御プログラムに回答する。
【００５４】
具体的には、起動時刻チューニングプログラムは、自動起動制御スケジュール内のVM毎に起動予定時刻で不足するメモリ量（他の仮想マシンから奪うメモリ量）を予測する（S23）。不足するメモリ量は、前述のとおり、新たに起動する仮想マシンの割当メモリ量から空きメモリ量を減じたメモリ量である。
【００５５】
そして、VM毎に、不足するメモリ量に応じて起動遅延時間(TB2)を見積もり計算により予測し、予測起動処理時間の起動遅延時間を取得する（S24）。
【００５６】
図１５は、見積もり遅延時間の一例を示す図である。このテーブルTLB7は、不足するメモリ量（他のVMから奪うメモリ量）に対応する見積もり遅延時間DTを有する。このデータは、例えば、類似するクラウドコンピューティングでの平均値などから設定される。
【００５７】
図１５のテーブルTBL7を参照して、不足するメモリ量が４GBの場合は、ハイパーバイザは、予測される起動遅延時間DTを、不足するメモリ量の比率に基づいて以下のように見積もる。
DT＝（４GB÷８GB）×DT_8
または、不足するメモリ量が１２GBの場合は、予測される起動遅延時間DTは、以下のように補間演算により見積もる。
DT＝DT_8＋（DT_16−DT_8）×（12GB−8GB）／（16GB−8GB）
そして、起動時刻チューニングプログラムは、VM毎に、自動起動制御スケジュールの起動予定時刻を、上記の見積もり計算で取得した起動遅延時間だけ早めて調整し、調整後の起動予定時刻を起動制御プログラムに応答する（S25）。
【００５８】
上記の見積もりは、望ましくは、さらに、メモリオーバコミットの程度を予測しておき（S23）、不足するメモリ量に加えてメモリオーバコミットの程度に応じて起動遅延時間を計算する（S24）。例えば、メモリオーバコミットの程度が高いほど、起動遅延時間が長くなるように予測する。
【００５９】
最後に、起動制御プログラムは、起動時刻のタイミングになると（S13）、調整された起動予定時刻に仮想マシンの起動処理を開始するよう、ハイパーバイザHV1に要求し、起動処理を行わせる（S14）。
【００６０】
［第２の起動制御］
図７は、第２の起動制御による起動制御機構４＿１（起動制御プログラムBC_PR）による仮想マシンの自動起動制御の処理を示すフローチャート図である。まず、クラウドシステムを運用する運用管理者などにより自動起動制御スケジュールが設定される（S10）。そして、起動時刻調整タイミングになると（S11）、起動制御プログラムは、起動時刻チューニングプログラムをコールし、起動予定時刻（起動時刻）の調整を依頼する（S12）。起動時刻調整タイミングは、図６と同様である。
【００６１】
一方、起動時刻チューニングプログラムは、仮想マシンの起動イベントが発生するたびに、起動処理イベントログから起動処理時間を収集し、その仮想マシンが起動する際の、不足するメモリ量（他の仮想マシンから奪うメモリ量）と、望ましくはメモリオーバコミットの程度とを算出し、それらを収集した起動処理時間と関連付けて起動処理時間実績データログに追加する（S21）。起動処理時間実績データログは、例えば、物理マシンPM1のストレージ１８内に記憶される。この実績データをログとして記憶することは、第１の起動制御と異なる。
【００６２】
起動時刻チューニングプログラムは、起動する仮想マシン毎の起動処理時間実績データを、ハイパーバイザから入手するデータに基づいて算出する。算出方法は後述するとおりである。
【００６３】
次に、起動時刻チューニングプログラムは、起動制御プログラムからコールされると、自動起動制御スケジュール内のVM毎に起動予定時刻で不足するメモリ量（他の仮想マシンから奪うメモリ量）を予測する（S23）。また、望ましくは、VM毎にメモリオーバコミットの程度を予測する。不足するメモリ量は、新たな仮想マシンへの割当メモリ量（割当予定メモリ量）を空きメモリ量で減じた量である。不足するメモリ量は、割当メモリ総量から実装メモリ総量と予測スワップアウトメモリ量とを減じても算出できる。また、メモリオーバコミットの程度は、割当メモリ総量を実装メモリ総量で除算したメモリオーバコミット率または割当メモリ総量から実装メモリ総量で減じたメモリオーバコミットのオーバ量である。
【００６４】
次に、起動時刻チューニングプログラムは、調整対象の仮想マシンに関する起動処理時間実績データログから、不足するメモリ量と相関する不足するメモリ量に関連付けられた起動処理時間を取得する（S24＿B）。また、望ましくは、起動処理時間実績データログから、不足するメモリ量と相関する不足するメモリ量が複数ある場合は、更にメモリオーバコミットの程度と相関するメモリオーバコミットの程度に関連付けられた起動処理時間を取得する。
【００６５】
起動時刻チューニングプログラムは、起動処理時間実績データログから、不足するメモリ量と相関する不足するメモリ量の実績データを抽出できない場合（S24_CのNO）、図６のS24と同様に、不足するメモリ量に応じて起動遅延時間(TB2)を見積もり計算により予測し、予測起動処理時間の遅延時間を取得する（S24_D）。
【００６６】
そして、起動時刻チューニングプログラムは、VM毎に、起動予定時刻を起動処理時間の遅延時間だけ早めて、調整された起動予定時刻を生成し、起動制御プログラムに回答する（S25）。工程S24_Bで実績データから起動処理時間を抽出した場合は、取得した起動処理時間から、不足するメモリ量がゼロの実績データの起動処理時間の平均値を減じることで遅延時間を算出する。不足するメモリ量がゼロの実績データの起動処理時間は、遅延時間BT2がほとんどゼロだからである。
【００６７】
最後に、起動制御プログラムは、起動時刻のタイミングになると（S13）、調整された起動予定時刻に仮想マシンの起動処理を開始するよう、ハイパーバイザHV1に要求し、起動処理を行わせる（S14）。
【００６８】
［第２の起動制御の具体例］
次に、具体例を示しながら、上記の第２の起動制御処理（図７）について説明する。
【００６９】
図１６、図１７は、起動制御処理の具体例を示す図である。図１６では、物理マシンPM1上に既に仮想マシンVM2、VM3が起動済みで稼働中の状態で、新たに仮想メモリVM1が起動予定の例を示す。図１７では、更に、物理マシンPM1上に既に仮想マシンVM2, VM3, VM1が起動済みで稼働中の状態で、新たに仮想メモリVM1が起動予定の例を示す。
【００７０】
以下の具体例では、最初に、起動処理時間実績データログが十分に収集されていない状況で図１６，図１７のように仮想マシンVM1、VM4が起動予定の場合の起動時刻の調整を説明する。次に、起動処理時間実績データログが十分に収集された状況で図１６，図１７のように仮想マシンVM1、VM4が起動予定の場合の起動時刻の調整を説明する。
【００７１】
図８は、図７の起動時刻チューニングプログラムS20の詳細な処理を示すフローチャート図である。図８のフローチャート図には、各処理での演算式や参照するテーブルなどが示されている。したがって、以下の具体例の説明で、図８を適宜参照することで各処理が容易に理解できる。
【００７２】
［起動処理時間実績データログが未だ十分に収集されていない状況（収集されつつある状況）での図１６，図１７のように仮想マシンVM1、VM4が起動予定の場合での起動時刻の調整］
図１２は、自動起動制御スケジュールの例を示す図である。このテーブルTBL4については、前述したとおりである。
【００７３】
図９は、起動処理イベントログの一例を示す図である。図１２の自動起動制御スケジュールによれば、物理マシンPM1上に、仮想マシンVM2, VM3, VM1, VM4が時刻07:30, 07:40, 08:00, 08:10に起動される予定である。そして、図９の起動処理イベントログには、図１２のスケジュールにしたがって仮想マシンVM2, VM3, VM1, VM4が起動した場合の起動処理イベントが、起動処理時間BTと共に記憶されているものとする。起動時刻チューニングプログラムは、この起動処理時間の実績データを、ハイパーバイザから取得する。
【００７４】
図１０は、物理マシンPM1に実装されているサービスクオリティコーディネータ（SOC：Service Quality Coordinator、プログラム）が採取したデータ例である。このテーブルTLB2には、起動時刻と物理マシンのID PM_idと、空きメモリ量とスワップアウトメモリ量の実績データが含まれる。スワップアウトメモリ量とは、ハイパーバイザのメモリ管理処理により、メモリ内のデータをストレージのスワップファイルに退避してメモリ領域を確保したメモリ量である。
【００７５】
図１１は、物理マシンの実装されているメモリ総量のデータ例を示す図である。このテーブルTLB3には、各物理マシンIDに対応して実装されるメモリ総量が含まれる。この情報は、ハイパーバイザから取得できる。
【００７６】
図１３は、仮想マシンに割り当てられる（または割当予定の）メモリ量の例を示す図である。このテーブルTBL5は、物理マシンのIDと、仮想マシンのIDと割当メモリ量が示されている。この仮想マシンに割り当てるメモリ量の情報は仮想マシンの構成データに含まれ、ハイパーバイザから取得することができる。
【００７７】
そこで、起動時刻チューニングプログラムは、仮想マシンVM2, VM3, VM1, VM4が起動する前の所定の調整タイミングで、図１０のSOCの採取データTLB2と、図１１の実装メモリ総量TBL3と、図１３の仮想マシンの割当メモリ量TBL5を参照して、起動予定の仮想マシンが起動する際にメモリの割当のために不足するメモリ量（他の仮想マシンから奪うメモリ量）と、オーバコミット率を、以下の式により予測する(図７、８のS23)。
不足するメモリ量＝割当メモリ量−（起動前の）空きメモリ量
オーバコミット率＝割当メモリ総量（起動後）÷実装メモリ総量
そして、起動時刻チューニングプログラムは、予測した不足するメモリ量と、オーバコミット率とから、起動処理時間の遅延時間BT2を見積もりにより予測し、自動起動プログラムに回答する（図７、８のS24_D）。
【００７８】
次に、起動時刻チューニングプログラムは、仮想マシンVM2, VM3, VM1, VM4が起動する毎に、図９の起動処理イベントログTBL1と、図１０のSOCの採取データTLB2と、図１１の実装メモリ総量TBL3と、図１３の仮想マシンの割当メモリ量TBL5を参照して、起動した仮想マシンの不足するメモリ量（他の仮想マシンから奪うメモリ量）と、オーバコミット率を、以下の式により算出し、起動処理時間実績データログに記憶する(図７、８のS21)。
不足するメモリ量＝割当メモリ量−（起動前の）空きメモリ量
オーバコミット率＝割当メモリ総量（起動後）÷実装メモリ総量
以下、具体例で説明する。
【００７９】
［仮想マシンVM2の起動］
最初に、仮想マシンVM2が起動される前の起動時刻の調整（図７、８のS22〜S25）について説明する。起動時刻チューニングプログラムは、自動起動制御スケジュールTBL4を入手する（図８のS22）。そして、未だ実績データが蓄積されていない状態であるので、起動時刻チューニングプログラムは、見積もり計算によりVM2の起動予定時刻での遅延時間を予測する（図７のS24_D）。
【００８０】
図１０のSOCが採取したデータTBL2のデータ000によれば、空きメモリ量が３２GBであり、仮想マシンVM2に割当予定のメモリ量は１２GBであるので、仮想マシンVM2が起動される際に予測される不足するメモリ量は０である（図７、８のS23）。したがって、ハイパーバイザは起動に際して仮想マシンへのメモリ割当のために不足するメモリ量を他の仮想マシンから奪う処理をする必要がない。その結果、起動時刻チューニングプログラムは、VM2の起動予定時刻を調整する必要はない（図７、８のS24_D）。
【００８１】
次に、仮想マシンVM2が起動すると、起動時刻チューニングプログラムは、仮想マシンVM2の起動処理時間の起動処理イベントログTBL1をハイパーバイザから取得し、不足するメモリ量とメモリオーバコミットメントの程度を算出し、それらを起動処理時間BTと関連付けて起動処理時間実績データログに蓄積する（S21）。
【００８２】
具体例には、図１６において最初に物理マシンPM1上に仮想マシンVM2が起動するとき、物理マシンPM1の実装メモリ総量は３２GBであり（図１１のTBL3参照）、起動後の空きメモリ量が２０GBでスワップアウトメモリ量が０であるので（図１０のTBL2参照）、
起動後の割当メモリ総量は
実メモリ総量（３２GB）−起動後の空きメモリ量（２０GB）＋スワップアウトメモリ量（０GB）＝１２GB
起動後のオーバコミット率は
割当メモリ総量（１２GB）÷実装メモリ総量（３２GB）＝１２／３２＝３７．５％
VM2の起動に際して不足するメモリ量は、図１０のテーブルTBL2においてVM2の起動前はどの仮想マシンも起動されておらず空きメモリ量が３２GBであるので、
割当メモリ量（１２GB）−起動前の空きメモリ量（３２GB）＝０
図１４は、起動処理時間実績データログの例を示す図である。このテーブルTLB6には、実績No.＝００１に、物理マシンPM1上に仮想マシンVM2の起動されたときの、上記の不足するメモリ量（０GB）とオーバコミット率(12/32)とが、起動処理時間BTと関連付けて記憶される（図７，８のS21）。
【００８３】
なお、仮想マシンVM2への割当メモリ量は、テーブルTBL2の空きメモリ量の差分（３２GB−２０GB＝１２GB）から取得可能である。
【００８４】
［仮想マシンVM3の起動］
最初に、仮想マシンVM3が起動される前の起動時刻の調整時は、未だ実績データが蓄積されていない状態であるので、起動時刻チューニングプログラムは、見積もり計算によりVM3の起動予定時刻での遅延時間を予測する（図７のS24_D）。
【００８５】
図１０のSOCが採取したデータTBL2のデータ001によれば、空きメモリ量が２０GBであり、仮想マシンVM3に割当予定のメモリ量は１６GBであるので、仮想マシンVM3が起動される際に予測される不足するメモリ量は０である（図７、８のS23）。つまり、ハイパーバイザは起動に際して仮想マシンへのメモリ割当のために不足するメモリ量を他の仮想マシンから奪う処理をする必要がない。したがって、起動時刻チューニングプログラムは、VM3の起動予定時刻を調整する必要はない（図７、８のS24_D）。
【００８６】
次に、仮想マシンVM3が起動すると、起動時刻チューニングプログラムは、仮想マシンVM3の起動処理時間の起動処理イベントログTBL1をハイパーバイザから取得し、不足するメモリ量とメモリオーバコミットメントの程度を算出し、それらを起動処理時間BTと関連付けて起動処理時間実績データログに蓄積する（S21）。
【００８７】
具体的に、物理マシンPM1上に仮想マシンVM3が起動したときは、同様に次のように計算される。
割当メモリ総量は
実メモリ総量（３２GB）−空きメモリ量（起動後）（４GB）＋スワップアウトメモリ量（０GB）＝２８GB
オーバコミット率は
割当メモリ総量（２８GB）÷実装メモリ総量（３２GB）＝２８／３２＝８７．５％
不足するメモリ量は
割当メモリ量（１６GB）−空きメモリ量（起動前）（２０GB）＝０
図１４の実績No.=002に、物理マシンPM1上に仮想マシンVM3が起動されたときの、上記の不足するメモリ量（０GB）とオーバコミット率(28/32)とが、起動処理時間BTと関連付けて記憶される（図７，８のS21）。
【００８８】
なお、仮想マシンVM3への割当メモリ量は、テーブルTBL2の空きメモリ量の差分（２０GB−４GB＝１６GB）から取得可能である。
【００８９】
［仮想マシンVM1の起動］
まず、仮想マシンVM1が起動される前の起動時刻の調整について説明する（図７、８のS22〜S25）。未だ実績データが蓄積されていない状態であるので、起動時刻チューニングプログラムは、見積もりによりVM1の起動予定時刻での遅延時間を予測する（図７、８のS24_D）。
【００９０】
仮想マシンVM1が起動される前の段階では、起動時刻チューニングプログラムは、予測される不足するメモリ量とメモリオーバコミットメントの程度を、以下のとおり算出する（図７、８のS２３）。
不足するメモリ量は
割当メモリ量（２８GB）−空きメモリ量（起動前）（４GB）＝２４GB
割当メモリ総量は
実メモリ総量（３２GB）−空きメモリ量（起動後）（０GB）＋スワップアウトメモリ量（２４GB）＝５６GB
オーバコミット率は
割当メモリ総量（５６GB）÷実装メモリ総量（３２GB）＝５６／３２＝１７５％
起動時刻チューニングプログラムは、上記の不足するメモリ量２４GBに基づいて、図１５の見積もり遅延時間DTから、起動処理時間の遅延時間を予測する（図７、８のS24_D）。図１５の見積もり遅延時間には、不足するメモリ量が２４GBの場合の遅延時間DT_24が登録されているので、この遅延時間DT_24を予測遅延時間とする。もし、不足するメモリ量が２４GBの遅延時間DT_24がテーブルTBL7にない場合は、不足するメモリ量が１６GBの遅延時間DT_16に基づいて、以下のように予測する。
予測遅延時間TD_24＝（DT_16÷１６GB）×２４GB
そして、起動時刻チューニングプログラムは、仮想マシンVM1の起動予定時刻8:00を、予測遅延時間だけ早めて調整後の起動予定時刻を計算し、起動制御プログラムに回答する（図７、８のS25）。それに基づいて、起動制御プログラムは、仮想マシンVM1を調整後の起動予定時刻8:00-TD_24に起動開始する。
【００９１】
図１６に示されるとおり、物理マシンPM1のメモリ１２には、既に仮想マシンVM2,VM3へメモリ割当領域MEM_VM2, MEM_VM3が割当済みであり、空きメモリ量はわずか４GBである。そのため、ハイパーバイザは、仮想マシンVM2, VM3から不足するメモリ量２４GBを奪い、仮想マシンVM1の起動処理を可能にする。
【００９２】
次に、図１６において、物理マシンPM1上に仮想マシンVM1が起動したとき、起動時刻チューニングプログラムは、不足メモリ量とメモリオーバコミットの程度を取得し起動処理時間実績データログ記憶する(図７、８のS21)。前述と同様に、不足するメモリ量とメモリオーバコミットメントの程度を次のように計算する。
割当メモリ総量は
実メモリ総量（３２GB）−空きメモリ量（起動後）（０GB）＋スワップアウトメモリ量（２４GB）＝５６GB
オーバコミット率は
割当メモリ総量（５６GB）÷実装メモリ総量（３２GB）＝５６／３２＝１７５％
不足するメモリ量は
割当メモリ量（２８GB）−空きメモリ量（起動前）（４GB）＝２４GB
図１４の実績No.=003に、物理マシンPM1上に仮想マシンVM1が起動されたときの、上記の不足するメモリ量(24GB)とオーバコミット率(56/32)とが、起動処理時間BTと関連付けて記憶される（図７，８のS21）。
【００９３】
［仮想マシンVM4の起動］
まず、仮想マシンVM4が起動される前の起動時刻の調整について説明する（図７、８のS22〜S25）。未だ実績データが蓄積されていない状態であるので、起動時刻チューニングプログラムは、見積もりによりVM4の起動予定時刻での遅延時間を予測する（図７、８のS24_D）。
【００９４】
仮想マシンVM1が起動される前の段階では、起動時刻チューニングプログラムは、予測される不足するメモリ量とメモリオーバコミットメントの程度を、以下のとおり算出する（図７、８のS２３）。
不足するメモリ量は
割当メモリ量（１２GB）−空きメモリ量（起動前）（０GB）＝１２GB
割当メモリ総量（起動後）は
実メモリ総量（３２GB）−空きメモリ量（起動後）（０GB）＋スワップアウトメモリ量（３６GB）＝６８GB
オーバコミット率（起動後）は
割当メモリ総量（６８GB）÷実装メモリ総量（３２GB）＝６８／３２＝２１２．５％
起動時刻チューニングプログラムは、上記の不足するメモリ量２４GBに基づいて、図１５の見積もり遅延時間DTから、起動処理時間の遅延時間を予測する（図７、８のS24_D）。図１５の見積もり遅延時間には、不足するメモリ量が８GBと１６GBの場合の遅延時間DT_8, DT_16が登録されているので、以下のように予測することができる。
予測遅延時間TD_12＝（DT_8＋DT_16）÷２
そして、起動時刻チューニングプログラムは、仮想マシンVM1の起動予定時刻8:10を、予測遅延時間TD_12だけ早めて調整後の起動予定時刻を計算し、起動制御プログラムに回答する（S25）。それに基づいて、起動制御プログラムは、仮想マシンVM1を調整後の起動予定時刻8:10-TD_12に起動開始する。
【００９５】
次に、図１７において、物理マシンPM1上に仮想マシンVM4が起動したとき、起動時刻チューニングプログラムは、不足メモリ量とメモリオーバコミットの程度を取得し起動処理時間実績データログ記憶する(図７、８のS21)。前述と同様に、不足するメモリ量とメモリオーバコミットメントの程度を次のように計算する。
割当メモリ総量（起動後）は
実メモリ総量（３２GB）−空きメモリ量（起動後）（０GB）＋スワップアウトメモリ量（３６GB）＝６８GB
オーバコミット率（起動後）は
割当メモリ総量（６８GB）÷実装メモリ総量（３２GB）＝６８／３２＝２１２．５％
不足するメモリ量は
割当メモリ量（１２GB）−空きメモリ量（起動前）（０GB）＝１２GB
図１４の実績No.=004に、物理マシンPM1上に仮想マシンVM4が起動されたときの、上記の不足するメモリ量とオーバコミット率とが、起動処理時間BTと関連付けて記憶される（図７，８のS21）。
【００９６】
［起動処理時間実績データログが十分収集された状況で図１６，図１７のように仮想マシンVM1、VM4が起動予定の場合での起動予定時刻の調整］
次に、既に前述の仮想マシンVM1〜VM4の起動処理が行われ、図１４の起動処理時間実績データログが蓄積された状態で、再び図１６のように仮想マシンVM1が起動予定の場合と、図１７のように仮想マシンVM4が起動予定の場合の起動予定時刻の調整について説明する。
【００９７】
［VM1の起動］
起動時刻チューニングプログラムは、自動起動制御スケジュールTBL4を入手する（図８のS22）。それによれば、仮想マシンVM１の起動予定時刻では、既に、仮想マシンVM2,VM3が起動済みである。そこで、起動時刻チューニングプログラムは、仮想マシンVM1の起動予定時刻での予測不足メモリ量と予測オーバコミットの程度を算出する（図７、８のS23）。この算出は、前述の仮想マシンVM1が起動したときと同じであり、次のとおりである。
予測不足メモリ量＝割当メモリ量（２８GB）−予測空きメモリ量（４GB）＝２４GB
予測オーバコミット率＝割当予定メモリ総量（５６GB）÷実装メモリ総量（３２GB）＝56/32＝１７５％
そこで、起動時刻チューニングプログラムは、図１４の起動処理時間実績データログTBL6を検索し、予測した不足メモリ量（２４GB）と相関する不足メモリ量と関連付けられた起動処理時間BT003（実績No.003）を抽出する（図７、８のS24_B）。もし、予測不足メモリ量（２４GB）と相関するログが複数ある場合は、メモリコミットメントの程度（メモリコミットメント率または量）が相関するログの起動処理時間を抽出する。そして、抽出した起動処理時間BT003から、実績データログ内の予測不足メモリ量＝０のログの起動処理時間の平均値を減算して、予測遅延時間DTを算出する（図７、８のS25）。
【００９８】
仮想マシンVM1の起動予定の際には、既に、仮想マシンVM1が起動したときの実績データが十セデータログTBL6に蓄積されているので、起動時刻チューニングプログラムは、その実績データの起動処理時間を参照して、予測遅延時間を取得する。
【００９９】
その後、仮想マシンVM1が起動された時、不足メモリ量とメモリオーバコミットの程度を取得し実績データログに記憶する。
【０１００】
[VM4の起動]
次に、自動起動制御スケジュールTBL4によれば、仮想マシンVM4の起動予定時刻では、既に、仮想マシンVM2,VM3,VM1が起動済みである。そこで、起動時刻チューニングプログラムは、仮想マシンVM4の起動予定時刻での予測不足メモリ量と予測オーバコミットの程度を次のとおり算出する（図８のS23）。
予測不足メモリ量＝割当メモリ量（１２GB）−予測空きメモリ量（０GB）＝１２GB
予測オーバコミット率＝割当予定メモリ総量（６８GB）÷実装メモリ総量（３２GB）＝68/32＝２１２．５％
そこで、起動時刻チューニングプログラムは、図１４の起動処理時間実績データログを検索し、予測した不足メモリ量（１２GB）と相関する不足メモリ量と関連付けられた起動処理時間BT004（実績No.004）を抽出する（図７、８のS24_B）。もし、この予測不足メモリ量と相関するログが複数ある場合は、メモリコミットメントの程度（メモリコミットメント率または量）が相関するログの起動処理時間を抽出する。そして、抽出した起動処理時間BT004から、実績データログ内の予測不足メモリ量＝０のログの起動処理時間の平均値を減算して、予測遅延時間DTを算出する（図８のS24,25）。
【０１０１】
仮想マシンVM4の起動予定の際にも、既に、仮想マシンVM4が起動したときの実績データが十セデータログTBL6に蓄積されているので、起動時刻チューニングプログラムは、その実績データの起動処理時間を参照して、予測遅延時間を取得する。
【０１０２】
その後、仮想マシンVM4が起動された時、不足メモリ量とメモリオーバコミットの程度を取得し実績データログに記憶する。
【０１０３】
［第１、第２の起動制御の変形例］
複数の仮想マシンの調整された起動時刻が短時間の間に集中する場合、それぞれの調整起動時刻が起動処理時間の間重ならないように、調整起動時刻を再調整するのが好ましい。複数の仮想マシンの起動処理が重なると、必ずしも実績データログと同じ起動処理時間の遅延時間になるとは限らないからである。
【０１０４】
または、所定の短時間の間に起動時刻が集中する複数の仮想マシンを一つの仮想マシンにまとめて、実績データログの記録と、起動時刻の調整を行ってもよい。たとえば、前述の例では、仮想マシンVM1,VM4は08:00と08:10と短時間の間に集中している。この場合は、仮想マシンVM1+VM4と見なして、不足するメモリ量の総和と、メモリオーバコミットの程度とを両仮想マシンの起動処理時間と関連付けて実績データログに記録し、起動時刻の調整タイミングでは、その実績データログを参照して、両仮想マシンの起動時刻を調整する。
【０１０５】
［起動処理時間実績データを利用するメリット］
上記の実施の形態の第２の起動制御では、起動処理時間実績データを蓄積し、実績データから起動処理時間の遅延時間を参照して起動予定時刻を調整する。実績データを利用するメリットは次のとおりである。
【０１０６】
仮想マシンの起動処理時間の遅延時間BT2は、起動時に不足するメモリ量（他のVMから奪うメモリ量）が多ければより長くなる傾向がある。なぜなら、不足するメモリ量が多くなればハイパーバイザが他のVMから奪う処理時間が長くなるからである。ただし、メモリオーバコミット率や量が高ければ、ハイパーバイザがメモリ制御で忙しくなるので遅延時間BT2はより長くなる傾向がある。さらに、ハイパーバイザがスワップアウトにより不足するメモリ量を確保する処理では、外部ストレージへのアクセス頻度に依存して処理時間が変動する。起動済み仮想マシンからのアクセス回数が多ければ新たに起動する仮想マシンのためのスワップアウト処理に時間がかかるからである。また、起動済み仮想マシンによるサービスシステムが多忙か否かによっても、CPUの処理量が変動し、遅延時間が変動する場合がある。
【０１０７】
したがって、実験により図１５のように予め不足するメモリ量に依存して遅延時間を見積もっていても、実際に稼働している物理マシンや外部ストレージやIO制御装置、そしてサービスシステムなどの様々な要因によって、起動処理時間の遅延時間BT2が変動する。そのような理由から、実績データを蓄積しておき、起動時の状況が相関する実績データの起動処理時間から遅延時間BT2を予測するのが望ましい。
【０１０８】
但し、起動予定時刻を調整する場合に、起動時刻チューニングプログラムが、不足するメモリ量に応じて予測遅延時間を計算で見積もり、起動予定時刻を予測遅延時間だけ早めるようにしても、起動処理が完了する時刻が予定起動時刻に近づくという一定の効果は期待できる。
【０１０９】
以上のとおり、本実施の形態によれば、仮想マシンの自動起動制御処理のスケジュールの精度を高めることができ、スケジュール通りに仮想マシンの起動処理を完了することができる。
【０１１０】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１１１】
（付記１）
仮想マシンを生成可能な情報処理装置上で仮想マシンが起動される際の、前記情報処理装置上に起動済みの仮想マシンに割り当てられたメモリ量と起動する仮想マシンに割り当てられるメモリ量の和に基づく第１のメモリ量と、前記起動する仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶部に記憶し、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記情報処理装置上に起動済みの仮想マシンに割り当てられたメモリ量と前記新たに起動する仮想マシンに割り当てられるメモリ量の和に基づく第２のメモリ量と相関を有する前記第１のメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定すること、
を含む処理をコンピュータに実行させる起動制御プログラム。
【０１１２】
（付記２）
前記第１のメモリ量は、前記起動する仮想マシンの起動の為に起動済みの他の仮想マシンから取得するメモリ量であり、
前記第２のメモリ量は、前記新たな仮想マシンの起動の為に起動済みの他の仮想マシンから取得するメモリ量である、付記１に記載の起動制御プログラム。
【０１１３】
（付記３）
前記記憶することは、前記第１のメモリ量に加えて、前記起動する仮想マシンの起動後のメモリの第１のオーバコミットの程度も、前記起動処理時間と関連付けて記憶部に記憶することを有し、
前記決定する処理において、前記第２のメモリ量と相関を有する前記第１のメモリ量に関連付けられた前記起動処理時間のうち、さらに、前記新たな仮想マシンの起動後のメモリの第２のオーバコミットの程度と相関を有する前記第１のオーバコミットの程度に関連付けられる前記起動処理時に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定する、付記１または２に記載の起動制御プログラム。
【０１１４】
（付記４）
前記第１のオーバコミットの程度及び前記第２のオーバコミットの程度は、
複数の仮想マシンに割り当てたメモリ総量の、前記情報処理装置が実装するメモリ総量に対する比率である、オーバコミット率である、付記３に記載の起動制御プログラム。
【０１１５】
（付記５）
前記第１のオーバコミットの程度及び前記第２のオーバコミットの程度は、
複数の仮想マシンに割り当てたメモリ総量から、前記情報処理装置が実装するメモリ総量を減じたメモリ量である、付記３に記載の起動制御プログラム。
【０１１６】
（付記６）
前記決定する処理は、前記起動処理実績データ内に前記第２のメモリ量と相関を有する前記第１のメモリ量が存在しない場合、前記新たな仮想マシンを起動する際に前記他の仮想マシンから取得する第３のメモリ量に対応する見積もり遅延時間から、前記第２のメモリ量と前記第３のメモリ量との比率に応じて前記新たな仮想マシンの起動処理の見積もり遅延時間を決定し、前記決定した見積もり遅延時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定する、付記１に記載の起動制御プログラム。
【０１１７】
（付記７）
前記決定する処理は、前記起動タイミングより前記起動処理時間に含まれる遅延時間だけ前の時刻に前記起動処理を開始するタイミングを決定する、付記１に記載の起動制御プログラム。
【０１１８】
（付記８）
前記決定する処理は、前記起動タイミングを規定した起動制御スケジュールが変更された後と、前記情報処理装置で仮想マシンの起動処理及び停止処理が行われた後に、行われる、付記１に記載の起動制御プログラム。
【０１１９】
（付記９）
前記新たに仮想マシンを起動する際に前記起動済みの他の仮想マシンから取得するメモリ量がゼロの場合、前記新たな仮想マシンの起動処理を開始するタイミングを、前記所定の起動タイミングのまま変更しない、付記２に記載の起動制御プログラム。
【０１２０】
（付記１０）
仮想マシンを生成可能な情報処理装置上で仮想マシンが起動される際の、前記情報処理装置上に起動済みの仮想マシンに割り当てられたメモリ量と起動する仮想マシンに割り当てられるメモリ量の和に基づく第１のメモリ量と、前記起動する仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶部に記憶し、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記情報処理装置上に起動済みの仮想マシンに割り当てられたメモリ量と前記新たに起動する仮想マシンに割り当てられるメモリ量の和に基づく第２のメモリ量と相関を有する前記第１のメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定すること、
をコンピュータが実行する起動制御方法。
【０１２１】
（付記１１）
仮想マシンを生成可能な情報処理装置上で仮想マシンが起動される際の、前記情報処理装置上に起動済みの仮想マシンに割り当てられたメモリ量と起動する仮想マシンに割り当てられるメモリ量の和に基づく第１のメモリ量と、前記起動する仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶する記憶部と、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記情報処理装置上に起動済みの仮想マシンに割り当てられたメモリ量と前記新たに起動する仮想マシンに割り当てられるメモリ量の和に基づく第２のメモリ量と相関を有する前記第１のメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定する起動タイミング決定部と、
を有する起動制御装置。
【０１２２】
（付記１２）
仮想マシンを生成可能な情報処理装置上で仮想マシンが起動される際の、前記仮想マシンの起動の為に起動済みの他の仮想マシンから取得する第１のメモリ量と、起動する前記仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶部に記憶すること、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記新たな仮想マシンの起動の為に起動済みの他の仮想マシンから取得する第２のメモリ量と相関を有する前記第１のメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定すること、
を含む処理をコンピュータに実行させる起動制御プログラム。
【０１２３】
（付記１３）
仮想マシンを生成可能な情報処理装置上で仮想マシンが起動される際の、前記仮想マシンの起動の為に起動済みの他の仮想マシンから取得する第１のメモリ量と、起動する前記仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶部に記憶すること、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記新たな仮想マシンの起動の為に起動済みの他の仮想マシンから取得する第２のメモリ量と相関を有する前記第１のメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定すること、
をコンピュータが実行する起動制御方法。
【０１２４】
（付記１４）
仮想マシンを生成可能な情報処理装置上で仮想マシンが起動される際の、前記仮想マシンの起動の為に起動済みの他の仮想マシンから取得する第１のメモリ量と、起動する前記仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶する記憶部と、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記新たな仮想マシンの起動の為に起動済みの他の仮想マシンから取得する第２のメモリ量と相関を有する前記第１のメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定する起動タイミング決定部と、
を有する起動制御装置。
【０１２５】
（付記１５）
仮想マシンを生成可能な情報処理装置上で仮想マシンが起動される際の、前記仮想マシンの起動の為に起動済みの他の仮想マシンから取得する第１のメモリ量と、起動する前記仮想マシンの起動に要した起動処理時間と、を関連付けた起動処理実績データを記憶部に記憶すること、
新たな仮想マシンを所定の起動タイミングで起動する際に、前記新たな仮想マシンの起動の為に起動済みの他の仮想マシンから取得する第２のメモリ量と相関を有する前記第１のメモリ量に関連付けられた前記起動処理時間に基づいて、前記新たな仮想マシンの起動処理を開始するタイミングを決定すること、
を有する処理をコンピュータに実行させる起動制御プログラム。
【符号の説明】
【０１２６】
PM：物理マシン、情報処理装置
VM：仮想マシン
HV：ハイパーバイザ、仮想化基盤ソフトウエア
G_OS：ゲストOS
A_PR：管理プログラム
BC_PR：起動制御プログラム、ブートコントロールプログラム
S20：起動時刻チューニングプログラム
１０、２０：CPU
１２、２２：メモリ、RAM
１４、２４：I/O、I/Oスイッチ
１８、２８：ストレージ、補助記憶装置、HDD
TBL1：起動処理イベントログ
TBL2：仮想メモリ割当総量のデータの例
TBL3：実装メモリ総量のデータの例
TBL4：自動起動制御スケジュールの例
TBL5：VM割当（または割当予定）メモリ量の例
TBL6：起動処理時間データログの例
TBL7：見積もり遅延時間の例
【図１】
0006589417.tif 000002
【図２】
0006589417.tif 000003
【図３】
0006589417.tif 000004
【図４】
0006589417.tif 000005
【図５】
0006589417.tif 000006
【図６】
0006589417.tif 000007
【図７】
0006589417.tif 000008
【図８】
0006589417.tif 000009
【図９】
0006589417.tif 000010
【図１０】
0006589417.tif 000011
【図１１】
0006589417.tif 000012
【図１２】
0006589417.tif 000013
【図１３】
0006589417.tif 000014
【図１４】
0006589417.tif 000015
【図１５】
0006589417.tif 000016
【図１６】
0006589417.tif 000017
【図１７】
0006589417.tif 000018