(57)【要約】      （修正有）【課題】精度よくリソースを保証することができる動的リソース割当て装置、方法、及びプログラムを提供する。【解決手段】動的リソース割当て装置は、使用量算出部１３と、スパイク検出部１５と、割当量算出部１７と、割当量設定部１８と、を備える。使用量算出部１３は、仮想マシンによるリソースの変動周期を分割したタイムスロット毎の、リソースの実際の使用量である確定使用量を算出する。スパイク検出部１５は、確定使用量のスパイクを検出する。割当量算出部１８は、ｉ番目のタイムスロットにおける過去の確定使用量と、ｉ番目の前後所定の範囲に含まれるタイムスロットにおける過去のスパイクの検出結果と、に基づいてｉ番目のタイムスロットに割当てるリソースの割当量を算出する。割当量設定部１８は、仮想マシンを制御する仮想マシンモニタに、割当量を設定する。【選択図】図１
2016091109.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシンによるリソースの変動周期を分割したタイムスロット毎の、前記リソースの実際の使用量である確定使用量を算出する使用量算出部と、
前記確定使用量のスパイクを検出するスパイク検出部と、
ｉ番目の前記タイムスロットにおける過去の前記確定使用量と、前記ｉ番目の前後所定の範囲に含まれる前記タイムスロットにおける過去の前記スパイクの検出結果と、に基づいて前記ｉ番目の前記タイムスロットに割当てる前記リソースの割当量を算出する割当量算出部と、
前記仮想マシンを制御する仮想マシンモニタに、前記割当量を設定する割当量設定部と、
を備えるリソース割当て装置。
【請求項２】
前記割当量算出部は、前記ｉ番目の前後所定の範囲に含まれる前記タイムスロットにおいて前記スパイクが過去に検出された場合、前記スパイクが検出された前記タイムスロットにおける前記確定使用量に基づいて、前記ｉ番目の前記タイムスロットに割当てる前記割当量を算出する
請求項１に記載のリソース割当て装置。
【請求項３】
前記確定使用量算出部は、前記仮想マシンモニタから取得した前記使用量と、前記使用量の取得時刻と、に基づいて前記確定使用量を算出する
請求項１又は請求項２に記載のリソース割当て装置。
【請求項４】
前記設定部は、前記仮想マシンモニタに設定した前記割当量と、前記割当量の設定時刻と、に基づいて前記タイムスロット毎に割当てられた実際の前記割当量である確定割当量を算出する
請求項１乃至請求項３のいずれか１項に記載のリソース割当て装置。
【請求項５】
前記スロット毎の前記確定使用量と前記確定割当量とに基づいて、前記リソースの保証の成功率を算出する成功率算出部を更に備える
請求項１乃至請求項４のいずれか１項に記載のリソース割当て装置。
【請求項６】
前記タイムスロットの時間幅は、１ミリ秒以上１０ミリ秒以下である
請求項１乃至請求項５のいずれか１項に記載のリソース割当て装置。
【請求項７】
前記リソースは、ＣＰＵ、メモリ、ストレージ、ハードディスク、及びネットワークのいずれか１つである
請求項１乃至請求項６のいずれか１項に記載のリソース割当て装置。
【請求項８】
前記ｉ番目の前後所定の範囲に含まれる前記タイムスロットは、（ｉ＋１）番目の前記タイムスロット及び（ｉ−１）番目の前記タイムスロットの少なくとも一方である
請求項１乃至請求項７のいずれか１項に記載のリソース割り当て装置。
【請求項９】
仮想マシンによるタイムスロット毎のリソースの実際の使用量である確定使用量を算出する工程と、
前記確定使用量のスパイクを検出する工程と、
ｉ番目の前記タイムスロットにおける過去の前記確定使用量と、前記ｉ番目の前後所定の範囲に含まれる前記タイムスロットにおける過去の前記スパイクの検出結果と、に基づいて前記ｉ番目の前記タイムスロットに割当てる前記リソースの割当量を算出する工程と、
前記仮想マシンを制御する仮想マシンモニタに、前記割当量を設定する工程と、
を備えるリソース割当て方法。
【請求項１０】
仮想マシンによるタイムスロット毎のリソースの実際の使用量である確定使用量を算出する工程と、
前記確定使用量のスパイクを検出する工程と、
ｉ番目の前記タイムスロットにおける過去の前記確定使用量と、前記ｉ番目の前後所定の範囲に含まれる前記タイムスロットにおける過去の前記スパイクの検出結果と、に基づいて前記ｉ番目の前記タイムスロットに割当てる前記リソースの割当量を算出する工程と、
前記仮想マシンを制御する仮想マシンモニタに、前記割当量を設定する工程と、
をコンピュータに実行させるリソース割当てプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、リソース割当て装置、方法、及びプログラムに関する。
【背景技術】
【０００２】
従来、仮想マシンモニタ（以下、「ＶＭＭ」という）と呼ばれるソフトウェア技術が利用されている。ＶＭＭを利用することで、１台のコンピュータ上で、複数の仮想マシン（以下、「ＶＭ」という）を動作させることができる。
【０００３】
ＶＭＭは、例えば、ＶＭ１に１ＧＢのメモリを割当て、ＶＭ２に２ＧＢのメモリを割当てる、というように、個々のＶＭにリソースを割当てる機能を有する。また、ＶＭＭは、個々のＶＭに割当てるリソースを動的に、すなわち、ＶＭを停止させることなく、変更することができる。
【０００４】
このＶＭＭの機能を利用すれば、ＶＭが必要とする量のリソースをＶＭに割当てることができる。ＶＭが必要とするリソースは、時間的に変動する。ＶＭが必要とするリソースの変動にあわせてリソースを割当てることにより、コンピュータのリソースを有効に活用することができる。このような処理を行う技術を、動的リソース割当て技術と呼ぶ。
【０００５】
動的リソース割当て技術では、ＶＭが必要とするリソースを保証することが重要である。リソース保証とは、ＶＭが必要とするリソースよりも多くのリソースを割当てることをいう。リソースを保証できない場合、ＶＭの動作が乱れることがある。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】“PRESS: PRedictive Elastic ReSource Scaling for cloud systems”, Network and Service Management (CNSM), 2010 International Conference on
【発明の概要】
【発明が解決しようとする課題】
【０００７】
精度よくリソースを保証することができるリソース割当て装置、方法、及びプログラムを提供する。
【課題を解決するための手段】
【０００８】
一実施形態に係るリソース割当て装置は、使用量算出部と、スパイク検出部と、割当量算出部と、割当量設定部と、を備える。使用量算出部は、仮想マシンによるリソースの変動周期を分割したタイムスロット毎の、リソースの実際の使用量である確定使用量を算出する。スパイク検出部は、確定使用量のスパイクを検出する。割当量算出部は、ｉ番目のタイムスロットにおける過去の確定使用量と、ｉ番目の前後所定の範囲に含まれるタイムスロットにおける過去のスパイクの検出結果と、に基づいてｉ番目のタイムスロットに割当てるリソースの割当量を算出する。割当量設定部は、仮想マシンを制御する仮想マシンモニタに、割当量を設定する。
【図面の簡単な説明】
【０００９】
【図１】一実施形態に係るリソース割当て装置の機能構成を示すブロック図。
【図２】ＶＭによるリソースの使用量の一例を示す図。
【図３】確定使用量の算出方法を説明する図。
【図４】確定使用量の算出方法を説明する図。
【図５】確定使用量の算出方法を説明する図。
【図６】使用量記憶部に記憶された確定使用量の一例を示す図。
【図７】スパイク記憶部に記憶されたスパイクの検出結果の一例を示す図。
【図８】確定割当量の算出方法を説明する図。
【図９】図１のリソース割当て装置のハードウェア構成を示すブロック図。
【図１０】図１のリソース割当て装置の動作を示すフローチャート。
【図１１】使用量記憶部に記憶された確定使用量の一例を示す図。
【図１２】リソース保証の成功率のシミュレーション結果を示す図。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態について図面を参照して説明する。
【００１１】
一実施形態に係るリソース割当て装置１０（以下、「装置１０」という）は、ＶＭによるリソースの使用量に基づいて、リソースの割当量を算出し、算出した割当量をＶＭＭに設定する。リソースには、ＣＰＵ、メモリ、ストレージ、ハードディスク、及びネットワークなどが含まれる。ＶＭＭは、設定された割当量をＶＭに割当てる。
【００１２】
以下では、装置１０が１つのＶＭＭに対して１つの割当量を設定する場合について説明する。しかしながら、装置１０は、複数のＶＭＭに対して割当量を設定してもよいし、１つのＶＭＭが制御する複数のＶＭの割当量をそれぞれ設定してもよいし、複数種類のリソースの割当量をそれぞれ設定してもよい。
【００１３】
まず、装置１０の機能構成について、図１〜図８を参照して説明する。図１は、装置１０の機能構成を示すブロック図である。図１に示すように、装置１０は、ＶＭＭ情報記憶部１１と、アプリ情報記憶部１２と、使用量算出部１３と、使用量記憶部１４と、スパイク検出部１５と、スパイク記憶部１６と、割当量算出部１７と、割当量設定部１８と、成功率算出部１９と、を備える。
【００１４】
ＶＭＭ情報記憶部１１は、ＶＭＭ情報を記憶する。ＶＭＭ情報とは、装置１０が割当量を設定する対象となるＶＭＭに関する情報である。ＶＭＭ情報には、ＶＭＭの種類、及び通信用のＩＰアドレスやポート番号などが含まれる。
【００１５】
アプリ情報記憶部１２は、アプリ情報を記憶する。アプリ情報とは、ＶＭ上で動作しているアプリケーションに関する情報である。アプリ情報には、アプリケーションが動作しているＶＭの識別子、アプリケーションの動作周期、及びアプリケーションが要求する動作精度などが含まれる。ここでいう動作精度とは、処理時間のずれの許容範囲のことである。
【００１６】
使用量算出部１３は、確定使用量ｆＵを算出する。確定使用量ｆＵとは、各タイムスロットにおける、ＶＭによるリソースの実際の使用量である。ここで、タイムスロットについて説明する。
【００１７】
装置１０は、割当量を算出する対象として、図２に示すように、リソースの使用量が周期的に変化するＶＭを想定している。図２において、縦軸はリソースの使用量であり、横軸は時刻である。このようなリソースの使用量の周期性は、ＶＭ上で動作するアプリケーションの動作周期に依存する。装置１０は、このような周期性に着目して、リソースの使用量が変化する周期Ｐを、所定の時間幅ｄを有する複数のタイムスロットに分割し、タイムスロット毎にリソースの割当量を算出する。
【００１８】
上述の周期Ｐは、アプリケーションの動作周期に応じて予め設定されてもよいし、高速フーリエ変換（ＦＦＴ）などを利用した周波数分析手法を用いて導出されてもよい。また、周期Ｐに含まれる各タイムスロットの時間幅ｄは、アプリケーションが要求する動作精度より短い任意の時間とすることができる。
【００１９】
例えば、アプリケーションの動作精度が１０ミリ秒の場合、タイムスロットの時間幅ｄは、１０ミリ秒より短い任意の時間に設定することができる。ＶＭ上で複数のアプリケーションが動作している場合には、各タイムスロットの時間幅ｄは、動作精度が最も高いアプリケーションの動作精度より短い時間に設定すればよい。なお、動作精度が高いとは、処理時間のずれの許容範囲が狭いことをいう。
【００２０】
以下では、周期Ｐは、Ｎ個のタイムスロットに分割されているものとする（Ｐ＝Ｎ×ｄ）。また、各タイムスロットには、番号ｉ，ｊが割当てられるものとする。
【００２１】
番号ｉ（０≦ｉ≦Ｎ−１）は、割当てられたタイムスロットが各周期Ｐにおいて何番目のスロットであるかを示す。したがって、あるタイムスロットと、そのＸ周期後のタイムスロットと、は同一の番号ｉを割当てられる。以下では、番号ｉを割当てられたタイムスロットを、タイムスロットＳｌｏ＿ｉと称する。
【００２２】
これに対して、番号ｊは、各タイムスロットに一意に割当てられる番号であり、割当てられたタイムスロットが全タイムスロットの中で何番目のタイムスロットであるかを示す。以下では、番号ｊを割当てられたタイムスロットを、タイムスロットｓｌｏ＿ｊと称する。また、ｊ＝Ｎ×ｘ＋ｉ（ｘは０以上の任意の整数）であるものとする。
【００２３】
使用量算出部１３は、確定使用量ｆＵを算出するために、所定のタイミングで、ＶＭによるリソースの使用量を取得する。使用量は、ＶＭＭやＶＭから取得することができる。使用量算出部１３による使用量の取得間隔は、アプリケーションの動作精度より短いのが好ましく、例えば、タイムスロットの時間幅ｄである。
【００２４】
使用量算出部１３は、使用量の取得時刻Ｔ（ｉ）と、取得した使用量Ｕ（Ｔ（ｉ））と、に基づいて確定使用量ｆＵを算出する。取得時刻Ｔ（ｉ）は、各周期におけるｉ番目の取得時刻であり、使用量Ｕ（Ｔ（ｉ））は時刻Ｔ（ｉ）に取得した使用量である。
【００２５】
ここで、図３〜図５は、確定使用量ｆＵの算出方法を説明する図である。図３〜図５において、縦軸はリソースの使用量、横軸は時刻である。
【００２６】
使用量算出部１３は、時刻Ｔ（ｉ＋１）において使用量Ｕ（Ｔ（ｉ＋１））を取得すると、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））を算出する。Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））は、時刻Ｔ（ｉ）から時刻Ｔ（ｉ＋１）までの間の使用量である。
【００２７】
使用量Ｕ（Ｔ（ｉ＋１））が、使用量の積算値である場合、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））＝Ｕ（Ｔ（ｉ＋１））−Ｕ（Ｔ（ｉ））となる。また、使用量Ｕ（Ｔ（ｉ＋１））が、時刻Ｔ（ｉ）から時刻Ｔ（ｉ＋１）までの間の使用量である場合、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））＝Ｕ（Ｔ（ｉ＋１））となる。使用量Ｕ（Ｔ（ｉ））が積算値であるか否かは、リソースの種類によって決まる。例えば、リソースがＣＰＵである場合、ＣＰＵの使用量であるＣＰＵ時間は、積算値として取得される。
【００２８】
なお、使用量算出部１３は、時刻Ｔ（０）において使用量Ｕ（Ｔ（０））を取得すると、使用量Ｕ（Ｔ（Ｎ−１），Ｔ（０））を算出する。Ｕ（Ｔ（Ｎ−１），Ｔ（０））は、前の周期の時刻Ｔ（Ｎ−１）から現在の周期の時刻Ｔ（０）までの間のリソース使用量である。
【００２９】
図３に示すように、時刻Ｔ（ｉ）がタイムスロットＳｌｏ＿ｉの開始時刻と一致している（時刻Ｔ（ｉ）がタイムスロットＳｌｏ＿ｉ−１の終了時刻と一致している）場合、タイムスロットＳｌｏ＿ｉの確定使用量ｆＵ（ｉ）は、ｆＵ（ｉ）＝Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））となる。
【００３０】
一方、図４に示すように、時刻Ｔ（ｉ）とタイムスロットＳｌｏ＿ｉの開始時刻とがずれている（時刻Ｔ（ｉ）とタイムスロットＳｌｏ＿ｉ−１の終了時刻とがずれている）場合、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））と確定使用量ｆＵ（ｉ）との間にはずれが生じる。すなわち、ｆＵ（ｉ）＝Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））とはならない。装置１０やＶＭＭを一般的なコンピュータや汎用ＯＳにより構成した場合、数十マイクロ秒〜数ミリ秒の処理タイミングのずれが生じ得る。このような場合には、使用量算出部１３は、例えば、以下の方法により確定使用量ｆＵ（ｉ）を算出する。
【００３１】
まず、使用量算出部１３は、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））を算出する。Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））の算出方法は上述の通りである。次に、使用量算出部１３は、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））をタイムスロット毎に分解し、各タイムスロットＳｌｏ＿ｉの部分使用量ｆｕ（ｉ）を算出する。部分使用量ｆｕ（ｉ）とは、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））のうち、タイムスロットＳｌｏ＿ｉに実際に使用された使用量である。使用量算出部１３は、タイムスロットＳｌｏ＿ｉの部分使用量ｆｕ（ｉ）を合計することにより、確定使用量ｆＵ（ｉ）を算出する。
【００３２】
例えば、使用量算出部１３は、図４の時刻Ｔ（２）において使用量Ｕ（Ｔ（２））を取得した後、Ｕ（Ｔ（１），Ｔ（２））を算出し、Ｕ（Ｔ（１），Ｔ（２））をタイムスロットＳｌｏ＿０，１，２に分解し、部分使用量ｆｕ（０），ｆｕ（１），ｆｕ（２）を算出する。部分使用量ｆｕ（２）は、Ｕ（Ｔ（１），Ｔ（２））の斜線部分の面積である。
【００３３】
次に、使用量算出部１３は、時刻Ｔ（３）において使用量Ｕ（Ｔ（３））を取得した後、Ｕ（Ｔ（２），Ｔ（３））を算出し、Ｕ（Ｔ（２），Ｔ（３））をタイムスロットＳｌｏ＿２，３に分割し、部分使用量ｆｕ（２），（３）を算出する。部分使用量ｆｕ（２）は、Ｕ（Ｔ（２），Ｔ（３））の斜線部分の面積である。
【００３４】
そして、使用量算出部１３は、算出した２つの部分使用量ｆｕ（２）を合計し、タイムスロットＳｌｏ＿２の確定使用量ｆＵ（２）を算出する。
【００３５】
図５は、部分使用量ｆｕの算出方法を詳細に説明する図である。図５を参照して、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））から部分使用量ｆｕを算出する方法について説明する。まず、使用量算出部１３は、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））をタイムスロット毎に分解するために、時刻Ｔ（ｉ）が含まれるタイムスロットの通し番号ｊと、時刻Ｔ（ｉ＋１）が含まれるタイムスロットの通し番号ｊ′と、を取得する。
【００３６】
上述のように、各タイムスロットに通し番号が予め割当てられている場合には、各タイムスロットの開始時刻及び終了時刻を参照することにより、通し番号ｊ，ｊ′を取得することができる。
【００３７】
各タイムスロットに通し番号が予め割当てられていない場合には、以下の方法により通し番号ｊ，ｊ′を算出してもよい。
【００３８】
ｊ＝Ｔ（ｉ）÷ｄ
ｊ′＝Ｔ（ｉ＋１）÷ｄ
ただし、時刻はエポック秒（ＵＴＣの１９７０年１月１日００時００分００秒からの経過秒）とする。また、余りは切り捨てる。
【００３９】
ｊ＝ｊ′の場合、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））は、タイムスロットｓｌｏ＿ｊに全て含まれる。この場合、使用量算出部１３は、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））を、タイムスロットｓｌｏ＿ｊの部分使用量ｆｕ（ｊ）として、使用量記憶部１４に一時的に記憶させる。
【００４０】
これに対して、ｊ＜ｊ′の場合、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））は、図５に示すように、複数のタイムスロットにまたがっている。すなわち、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））は、複数のタイムスロットの部分使用量を含む。
【００４１】
この場合、使用量算出部１３は、Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））をタイムスロット毎に分割し、以下のように各タイムスロットの部分使用量ｆｕを算出し、使用量記憶部１４に一時的に記憶させる。
ｆｕ（ｊ）＝Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））×（Ｔｅｊ−Ｔ（ｉ））÷（Ｔ（ｉ＋１）−Ｔ（ｉ））
ｆｕ（ｊ）′＝Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））×（Ｔ（ｉ＋１）−Ｔｓｊ′）÷（Ｔ（ｉ＋１）−Ｔ（ｉ））
ｆｕ（ｋ）（ｊ＜ｋ＜ｊ′）＝Ｕ（Ｔ（ｉ），Ｔ（ｉ＋１））×ｄ÷（Ｔ（ｉ＋１）−Ｔ（ｉ））
【００４２】
上記の式において、Ｔｅｊはタイムスロットｓｌｏ＿ｊの終了時刻、Ｔｓｊ′はタイムスロットｓｌｏ＿ｊ′の開始時刻である。また、ｋは、ｊより大きくｊ′より小さい任意の通し番号であり、ｆｕ（ｋ）は、タイムスロットｓｌｏ＿ｊとタイムスロットｓｌｏ＿ｊ′との間の任意のタイムスロットｓｌｏ＿ｋの部分使用量である。例えば、図５の場合、ｋ＝ｊ＋１＝ｊ′−１である。
【００４３】
ｊ＜ｊ′の場合、使用量算出部１３は、使用量記憶部１４に記憶された部分使用量を合計することにより、タイムスロットｓｌｏ＿ｊ′−１までの各タイムスロットのうち、確定使用量が算出されていないタイムスロットの確定使用量ｆＵを算出する。
【００４４】
ここで、図６は、使用量記憶部１４に記憶された確定使用量ｆＵの一例を示す図である。図６の左側は、図４の時刻Ｔ（２）において算出された確定使用量ｆＵを示す。図６の右側は、図４の時刻Ｔ（３）において算出された確定使用量ｆＵを示す。図６において、Ｎ＝１００（ｉ＝０〜９９）である。
【００４５】
図６に示すように、時刻Ｔ（２）において、使用量記憶部１４には、タイムスロットＳｌｏ＿１（ｓｌｏ＿１０１）までの確定使用量が記憶され、タイムスロットＳｌｏ＿２（ｓｌｏ＿１０２）の部分使用量（ｆｕ（１０２）＝２０）が一時的に記憶されている。
【００４６】
図４を参照すると、時刻Ｔ（２）はタイムスロットＳｌｏ＿２（ｓｌｏ＿１０２）に含まれ、時刻Ｔ（３）はタイムスロットＳｌｏ＿３（ｓｌｏ＿１０３）に含まれる。したがって、時刻Ｔ（３）において、ｊ＝１０２、ｊ′＝１０３（ｊ＜ｊ′）となるから、使用量算出部１３は、タイムスロットｓｌｏ＿１０２の部分使用量（＝４０）を算出し、使用量記憶部１４に一時的に記憶させる（図示省略）。そして、使用量算出部１３は、使用量記憶部１４に記憶されたタイムスロットｓｌｏ＿１０２の部分使用量を合計（２０＋４０）し、確定使用量（＝６０）を算出する。また、使用量算出部１３は、タイムスロットｓｌｏ＿１０３の部分使用量（＝２０）を算出し、使用量記憶部１４に一時的に記憶させる。
【００４７】
なお、図６において、使用量はスカラー値であるが、使用量にはリソースの種類に応じた単位が付されてもよい。例えば、リソースがＣＰＵの場合、単位は時間やインストラクション数である。リソースがメモリの場合、単位はキロバイト（ＫＢ）やメガバイトＭＢである。リソースがネットワークの場合、単位はＫＢ／秒やＭＢ／秒である。リソースがディスクの場合、単位はＫＢやＭＢ、ＫＢ／秒やＭＢ／秒である。本実施形態において、リソースの使用量の単位は、リソースの種類に応じて任意に選択することができる。
【００４８】
以上説明した確定使用量の算出方法によれば、使用量算出部１３による使用量の取得タイミングと各タイムスロットの開始時刻とがずれた場合であっても、各タイムスロットの確定使用量を算出することができる。
【００４９】
スパイク検出部１５は、使用量記憶部１４に記憶された各タイムスロットの確定使用量を参照して、スパイクを検出する。スパイクとは、図２に示すような、リソースの使用量の急増のことである。
【００５０】
スパイク検出部１５は、例えば、タイムスロットＳｌｏ＿ｉからタイムスロットＳｌｏ＿ｉ＋１までの確定使用量の増加量が所定の閾値ｓ１より大きい場合（ｆＵ（ｉ＋１）−ｆＵ（ｉ）＞ｓ１）、タイムスロットＳｌｏ＿（ｉ＋１）にスパイクが発生したと判定する。
【００５１】
また、スパイク検出部１５は、タイムスロットＳｌｏ＿ｉからタイムスロットＳｌｏ＿ｉ＋１までの確定使用量の増加率が所定の閾値ｓ２より大きい場合（ｆＵ（ｉ＋１）÷ｆＵ（ｉ）＞ｓ２）、タイムスロットＳｌｏ＿ｉ＋１にスパイクが発生したと判定してもよい。
【００５２】
さらに、スパイク検出部１５は、ｆＵ（ｉ＋１）−ｆＵ（ｉ）＞ｓ１、かつ、ｆＵ（ｉ＋１）÷ｆＵ（ｉ）＞ｓ２、かつ、タイムスロットＳｌｏ＿ｉ＋１の確定使用量が過去の確定使用量の平均値Ｅ（ｆＵ）より大きい場合（ｆＵ（ｉ＋１）＞Ｅ（ｆＵ））、タイムスロットＳｌｏ＿ｉ＋１にスパイクが発生したと判定してもよい。平均値Ｅ（ｆＵ）は、過去の全てのタイムスロットの確定使用量の平均値であってもよいし、直近の任意の数のタイムスロットの確定使用量の平均値であってもよい。
【００５３】
スパイク検出部１５によるスパイクの検出間隔は、アプリケーションの動作精度より短いのが好ましく、例えば、タイムスロットの時間幅ｄである。スパイク検出部１５は、例えば、時刻Ｔ（ｉ）において、確定使用量や部分使用量が算出された後、確定使用量が算出されたタイムスロットに対して、スパイクの検出を行う。
【００５４】
スパイク検出部１５によるスパイクの検出結果は、スパイク記憶部１６に記憶される。スパイク記憶部１６は、スパイクの検出結果として、スパイクが検出されたタイムスロットの通し番号ｊや確定使用量ｆＵを記憶する。
【００５５】
図７は、スパイク記憶部１６に記憶されたスパイクの検出結果の一例を示す図である。図７において、スパイク記憶部１６は、スパイクの検出されたタイムスロットの通し番号ｊと、スパイクが検出されたタイムスロットの確定使用量ｆＵと、確定使用量ｆＵの増加率Ｒ（（ｆＵ（ｉ＋１）÷ｆＵ（ｉ−１））×１００）と、を記憶している。増加率Ｒ（％）は、後述するリソースの割当量の算出に用いることができる。
【００５６】
割当量算出部１７は、各タイムスロットに割当てるリソースの割当量を算出する。割当量算出部１７による割当量の算出間隔は、アプリケーションの動作精度より短いのが好ましく、例えば、タイムスロットの時間幅ｄである。割当量算出部１７は、例えば、時刻Ｔ（ｉ）において、タイムスロットＳｌｏ＿ｉ＋１に割当てる割当量Ａ（ｉ＋１）を算出する。以下、割当量の算出方法について説明する。
【００５７】
割当量算出部１７は、時刻Ｔ（ｉ）において、時刻Ｔ（ｉ）が含まれるタイムスロットの通し番号ｊを取得する。通し番号ｊの取得方法は上述の通りである。
【００５８】
次に、割当量算出部１７は、使用量記憶部１４から、タイムスロット群ｉ＋１の確定使用量ｆＵ（ｉ＋１）を取得する。タイムスロット群ｉ＋１とは、過去の複数のタイムスロットＳｌｏ＿ｉ＋１の集合である。タイムスロット群ｉ＋１には、通し番号ｉ＋１−Ｎ，ｉ＋１−２Ｎ，ｉ＋１−３Ｎ，・・・，ｉ＋１−ｍＮ（ｍは任意の整数）を割当てられたｍ個のタイムスロットが含まれる。したがって、割当量算出部１７は、ｍ個の確定使用量ｆＵ（ｉ＋１）を取得する。
【００５９】
上述の通り、周期Ｐに含まれるタイムスロットの数Ｎは、予め設定されていてもよいし、Ｐ÷ｄ（余りは切り捨てる）により算出されてもよい。また、タイムスロット群ｉ＋１に含まれるタイムスロットの通し番号の集合を通し番号群ｉ＋１と称する。
【００６０】
本実施形態では、割当量の設定対象として、リソースの使用量が周期的に変化するＶＭを想定している。リソースの使用量が周期的に変化する場合、割当量算出部１７が割当量Ａ（ｉ＋１）を算出するタイムスロットＳｌｏ＿ｉ＋１と、過去のタイムスロットＳｌｏ＿ｉ＋１と、のリソースの使用量は同程度になることが予想される。
【００６１】
そこで、まず、割当量算出部１７は、タイムスロット群ｉ＋１のｍ個の確定使用量ｆＵ（ｉ＋１）に基づいて、仮割当量Ａ（ｉ＋１）′を算出する。仮割当量Ａ（ｉ＋１）′は、過去の確定使用量ｆＵ（ｉ＋１）に基づいて算出される仮の割当量である。
【００６２】
割当量算出部１７は、例えば、ｍ個の確定使用量ｆＵ（ｉ＋１）の最大値を仮割当量Ａ（ｉ＋１）′とする。
Ａ（ｉ＋１）′＝ｍａｘ（ｍ個のｆＵ（ｉ＋１））
【００６３】
また、割当量算出部１７は、ｍ個の確定使用量ｆＵ（ｉ＋１）の平均値よりも所定の閾値ｓ３だけ大きい値を、仮割当量Ａ（ｉ＋１）′として算出してもよい。
Ａ（ｉ＋１）′＝ａｖｅｒａｇｅ（ｍ個のｆＵ（ｉ＋１））＋ｓ３
【００６４】
また、割当量算出部１７は、ｍ個の確定使用量ｆＵ（ｉ＋１）の最大値に対する余裕が閾値ｓ４％となるように、仮割当量Ａ（ｉ＋１）′を算出してもよい。
Ａ（ｉ＋１）′＝ｍａｘ（ｍ個のｆＵ（ｉ＋１））÷（１−（ｓ４÷１００））
ただし、０＜ｓ４＜１００
【００６５】
また、割当量算出部１７は、リソース保証の成功率ｐ％を考慮して、仮割当量Ａ（ｉ＋１）′を算出してもよい。
Ａ（ｉ＋１）′＝ｍａｘ（ｍ個のｆＵ（ｉ＋１））÷ｐ
ただし、０＜ｐ＜１００
成功率ｐの算出方法については後述する。
【００６６】
また、割当量算出部１７は、タイムスロット群ｉ＋１におけるリソース保証の成功率ｐ′を考慮して仮割当量Ａ（ｉ＋１）′を算出してもよい。
Ａ（ｉ＋１）′＝ｍａｘ（ｍ個のｆＵ（ｉ＋１））÷ｐ′
ただし、０＜ｐ′＜１００
成功率ｐ′の算出方法については後述する。
【００６７】
割当量算出部１７は、仮割当量Ａ（ｉ＋１）′を算出した後、タイムスロットＳｌｏ＿ｉ＋１の前後所定範囲に含まれるタイムスロットにおける過去のスパイクの検出結果に基づいて、仮割当量Ａ（ｉ＋１）′を修正し、割当量Ａ（ｉ＋１）を算出する。
【００６８】
割当量Ａ（ｉ）を算出するためにスパイクの検出結果を利用するタイムスロットは、タイムスロットＳｌｏ＿ｉ±ｗ（ｗは０以上の自然数）の中から、１つ又は複数任意に選択することができる。例えば、割当量算出部１７は、タイムスロットＳｌｏ＿ｉ−１，ｉ＋１における過去のスパイクの検出結果を利用してもよいし、タイムスロットＳｌｏ＿ｉ−２，ｉ＋２における過去のスパイクの検出結果を利用してもよい。以下では、割当量算出部１７は、割当量Ａ（ｉ）を算出するために、タイムスロットＳｌｏ＿ｉ−１，ｉ＋１、すなわち、タイムスロットＳｌｏ＿ｉの前後のタイムスロットにおける過去のスパイク検出結果を用いるものとする。
【００６９】
まず、割当量算出部１７は、スパイク記憶部１６を参照して、タイムスロット群ｉ及びタイムスロット群ｉ＋２において、スパイクが検出されたか否か確認する。例えば、通し番号群ｉ＋１に含まれる通し番号が５，１０，１５である場合、割当量算出部１７は、通し番号４，６，９，１１，１４，１６を割当てられたタイムスロットにおけるスパイクの検出結果を確認する。
【００７０】
タイムスロット群ｉ及びタイムスロット群ｉ＋２の少なくとも一方において、スパイクが検出されていなかった場合、仮割当量Ａ（ｉ＋１）′が割当量Ａ（ｉ＋１）となる（Ａ（ｉ＋１）′＝Ａ（ｉ＋１））。
【００７１】
一方、タイムスロット群ｉ及びタイムスロット群ｉ＋２の少なくとも一方において、スパイクが検出されていた場合、割当量算出部１７は、仮割当量Ａ（ｉ＋１）′より大きくなるように割当量Ａ（ｉ＋１）を算出する。
【００７２】
割当量算出部１７は、例えば、仮割当量Ａ（ｉ＋１）′を修正量α（＞０）により修正して、割当量Ａ（ｉ＋１）を算出する（Ａ（ｉ＋１）＝Ａ（ｉ＋１）′＋α）。修正量αは、予め設定されていてもよいし、割当量算出部１７により算出されてもよい。
【００７３】
割当量算出部１７は、例えば、割当量Ａ（ｉ＋１）が、スパイクが検出されたタイムスロットにおける確定使用量（以下、「スパイク使用量」という）と等しくなるように修正量αを算出する。
α＝スパイク使用量−Ａ（ｉ＋１）′
【００７４】
また、割当量算出部１７は、スパイク使用量のｅ％を修正量αとして算出してもよい。
α＝スパイク使用量×ｅ÷１００
ただし、０＜ｅ＜１００
【００７５】
また、割当量算出部１７は、リソース保証の成功率ｐ％を考慮して修正量αを算出してもよい。
α＝（スパイク使用量−Ａ（ｉ＋１）′）×（１−ｐ）
ただし、０＜ｐ＜１００
成功率ｐの算出方法については後述する。
【００７６】
また、割当量算出部１７は、スパイクが検出されたタイムスロットにおける確定使用量の増加率Ｒ％を考慮して修正量αを算出してもよい。
α＝スパイク使用量×Ｒ÷１００
ただし、０＜Ｒ＜１００
【００７７】
なお、割当量算出部１７は、仮割当量Ａ（ｉ＋１）′を修正係数β（＞１）により修正して、割当量Ａ（ｉ＋１）を算出してもよい（Ａ（ｉ＋１）＝Ａ（ｉ＋１）′×β）。修正係数βは、予め設定されていてもよいし、割当量算出部１７により算出されてもよい。
【００７８】
また、割当量算出部１７は、タイムスロット群ｉ又はタイムスロット群ｉ＋２の一方のスパイクの検出結果のみを参照して、仮割当量Ａ（ｉ＋１）′を修正してもよい。
【００７９】
このように割当量Ａ（ｉ＋１）を算出することにより、過去にスパイクが発生したタイムスロットの前後のタイムスロットに割当てるリソースの割当量を増加させることができる。
【００８０】
割当量設定部１８は、割当量算出部１７が算出した割当量Ａ（ｉ＋１）をＶＭＭに設定する。割当量設定部１８による割当量Ａ（ｉ＋１）の設定間隔は、アプリケーションの動作精度より短いのが好ましく、例えば、タイムスロットの時間幅ｄである。割当量設定部１８は、例えば、時刻Ｔ（ｉ＋１）に割当量Ａ（ｉ＋１）を設定する。
【００８１】
また、割当量設定部１８は、割当量Ａ（ｉ＋１）を設定する際、必要に応じて単位の変換を行う。例えば、割当量算出部１７が算出する割当量Ａ（ｉ＋１）がＣＰＵ時間であり、ＶＭＭが要求する割当量がＣＰＵ使用率である場合、割当量Ａ（ｉ＋１）をそのままＶＭＭに設定することはできない。このような場合には、割当量設定部１８は、ＣＰＵ時間をＣＰＵ使用率に変換する処理を行う。
【００８２】
さらに、割当量設定部１８は、時刻Ｔ（ｉ＋１）に割当量Ａ（ｉ＋１）を設定した後、確定割当量ｆＡを算出する。確定割当量ｆＡとは、ＶＭに割当てられたタイムスロット毎のリソースの実際の割当量である。確定割当量ｆＡは、後述するリソース保証の成功率の算出に利用される。確定割当量ｆＡの算出方法は、確定使用量と同様である。
【００８３】
すなわち、時刻Ｔ（ｉ）とタイムスロットＳｌｏ＿ｉの開始時刻とが一致している場合、確定割当量ｆＡ（ｉ）は割当量Ａ（ｉ）となる。
【００８４】
一方、時刻Ｔ（ｉ）とタイムスロットＳｌｏ＿ｉの開始時刻とがずれている場合、割当量設定部１８は、割当量Ａ（ｉ）をタイムスロット毎に分割し、タイムスロット毎の部分割当量ｆａを算出する。その後、部分割当量ｆａをタイムスロット毎に合計し、各タイムスロットの確定割当量ｆＡを算出する。
【００８５】
図８は、部分割当量ｆａの算出方法を詳細に説明する図である。割当量設定部１８は、時刻Ｔ（ｉ＋１）において割当量Ａ（ｉ＋１）を設定した後、前回設定した割当量Ａ（ｉ）をタイムスロット毎に分解するために、時刻Ｔ（ｉ）が含まれるタイムスロットの通し番号ｊと、時刻Ｔ（ｉ＋１）が含まれるタイムスロットの通し番号ｊ′と、を取得する。通し番号ｊ，ｊ′の取得方法は上述の通りである。
【００８６】
ｊ＝ｊ′の場合、割当量Ａ（ｉ）は、タイムスロットｓｌｏ＿ｊに全て含まれる。この場合、割当量設定部１８は、割当量Ａ（ｉ）を、タイムスロットｓｌｏ＿ｊの部分使用量ｆａ（ｊ）として、使用量記憶部１４に一時的に記憶させる。
【００８７】
これに対して、ｊ＜ｊ′の場合、割当量Ａ（ｉ）は、図８に示すように、複数のタイムスロットに跨がっている。すなわち、割当量Ａ（ｉ）は、複数のタイムスロットの部分割当量ｆａを含む。
【００８８】
この場合、割当量設定部１８は、割当量Ａ（ｉ）をタイムスロット毎に分割し、以下のように各タイムスロットの部分使用量ｆａを算出し、使用量記憶部１４に一時的に記憶させる。
ｆａ（ｊ）＝Ａ（ｉ）×（Ｔｅｊ−Ｔ（ｉ））÷（Ｔ（ｉ＋１）−Ｔ（ｉ））
ｆａ（ｊ′）＝Ａ（ｉ）×（Ｔ（ｉ＋１）−Ｔｓｊ′）÷（Ｔ（ｉ＋１）−Ｔ（ｉ））
ｆａ（ｋ）（ｊ＜ｋ＜ｊ′）＝Ａ（ｉ）×ｄ÷（Ｔ（ｉ＋１）−Ｔ（ｉ））
【００８９】
ｊ＜ｊ′の場合、割当量設定部１８は、使用量記憶部１４に記憶された部分割当量を合計することにより、タイムスロットｓｌｏ＿ｊ′−１までの各タイムスロットのうち、確定割当量が算出されていないタイムスロットの確定割当量ｆＡを算出する。割当量設定部１８により算出された確定割当量ｆＡは、使用量記憶部１４に記憶される。
【００９０】
成功率算出部１９は、リソース保証の成功率を算出する。成功率算出部１９は、例えば、新たな確定使用量ｆＵ及び確定割当量ｆＡが使用量記憶部１４に記憶されるたびに成功率を算出してもよいし、割当量算出部１７からの要求に応じて成功率を算出してもよい。
【００９１】
まず、成功率算出部１９は、使用量記憶部１４を参照して、複数のタイムスロットの確定使用量ｆＵ及び確定割当量ｆＡを取得する。この際、成功率算出部１９は、使用量記憶部１４に記憶された過去の全ての確定使用量ｆＵ及び確定割当量ｆＡを取得してもよいし、直近の任意の数のタイムスロットの確定使用量ｆＵ及び確定割当量ｆＡを取得してもよい。
【００９２】
次に、成功率算出部１９は、各タイムスロットにおいてリソース保証が成功したか否か判定する。成功率算出部１９は、例えば、確定割当量ｆＡ（ｉ）が確定使用量ｆＵ（ｉ）以上の場合（ｆＡ（ｉ）≧ｆＵ（ｉ））、タイムスロットＳｌｏ＿ｉのリソース保証が成功したと判定する。
【００９３】
また、成功率算出部１９は、確定割当量ｆＡ（ｉ）が確定使用量ｆＵ（ｉ）より所定の閾値ｓ５以上大きい場合（ｆＡ（ｉ）≧ｆＵ（ｉ）＋ｓ５）、タイムスロットＳｌｏ＿ｉのリソース保証が成功したと判定してもよい。
【００９４】
さらに、成功率算出部１９は、確定割当量ｆＡ（ｉ）の確定使用量ｆＵ（ｉ）に対する余裕が所定の閾値ｓ６％以上の場合（ｆＡ（ｉ）×（１００−ｓ６）÷１００≧ｆＵ（ｉ））、タイムスロットＳｌｏ＿ｉのリソース保証が成功したと判定してもよい。
【００９５】
成功率算出部１９により判定された各タイムスロットにおけるリソース保障の成否は、使用量記憶部１４に記憶される。
【００９６】
成功率算出部１９は、各タイムスロットにおいて保障が成功したか否か判定した後、保証の成功率ｐを以下の式で算出する。
ｐ＝成功と判定したタイムスロットの数÷判定した全てのタイムスロットの数
【００９７】
また、成功率算出部１９は、特定のタイムスロット群におけるリソース保障の成功率ｐ′を算出してもよい。成功率算出部１９は、例えば、使用量記憶部１４からタイムスロット群ｉ＋１の確定使用量ｆＵ（ｉ＋１）及び確定割当量ｆＡ（ｉ＋１）を取得し、上述の方法により成功率を算出することにより、タイムスロット群ｉ＋１の成功率ｐ′を算出することができる。
【００９８】
成功率算出部１９により算出された成功率ｐ，ｐ′は、上述の通り、割当量の算出に用いることができる。
【００９９】
次に、本実施形態に係る装置１０のハードウェア構成について、図９を参照して説明する。本実施形態に係る装置１０は、図９に示すように、コンピュータ１００により構成される。コンピュータ１００は、ＣＰＵ（中央演算装置）１０１と、入力装置１０２と、表示装置１０３と、通信装置１０４と、記憶装置１０５と、とを備え、これらはバス１０６により相互に接続されている。
【０１００】
ＣＰＵ１０１は、コンピュータ１００の制御装置及び演算装置である。ＣＰＵ１０１は、コンピュータ１００のＯＳ（オペレーティングシステム）や、リソース割当てプログラムなどを実行し、コンピュータ１００を構成する各装置を制御する。リソース割当てプログラムとは、コンピュータ１００に、装置１０の上述の各機能構成を実現させるプログラムである。ＣＰＵ１０１がリソース割当てプログラムを実行することにより、コンピュータ１００が装置１０として機能する。
【０１０１】
入力装置１０２は、コンピュータ１００に情報を入力するための装置である。入力装置１０２は、例えば、キーボード、マウス、及びタッチパネルであるが、これに限られない。ユーザは、入力装置１０２を用いることにより、ＶＭＭ情報やアプリ情報などの情報を入力することができる。
【０１０２】
表示装置１０３は、画像や映像を表示するための装置である。表示装置１０３は、例えば、ＬＣＤ（液晶ディスプレイ）、ＣＲＴ（ブラウン管）、及びＰＤＰ（プラズマディスプレイ）であるが、これに限られない。ＶＭＭ情報、アプリ情報、確定使用量、確定割当量、スパイク検出結果、及びリソース保証の成否などの情報は、表示装置１０３により表示することができる。
【０１０３】
通信装置１０４は、コンピュータ１００が外部装置と無線又は有線で通信するための装置である。通信装置１０４は、例えば、モデム、ハブ、及びルータであるが、これに限られない。ＶＭＭ情報やアプリ情報などの情報は、通信装置１０４を介して外部装置から入力されてもよい。
【０１０４】
記憶装置１０５は、コンピュータ１００のＯＳや、リソース割当てプログラム、リソース割当てプログラムの実行に必要なデータ、及びリソース割当てプログラムの実行により生成されたデータなどを記憶する記憶媒体である。記憶装置１０５には、主記憶装置と外部記憶装置とが含まれる。
【０１０５】
主記憶装置は、例えば、ＲＡＭ、ＤＲＡＭ、ＳＲＡＭであるが、これに限られない。また、外部記憶装置は、ハードディスク、光ディスク、フラッシュメモリ、及び磁気テープであるが、これに限られない。ＶＭＭ情報記憶部１１、アプリ情報記憶部１２、使用量記憶部１４、及びスパイク記憶部１６は、記憶装置１０５により構成される。
【０１０６】
なお、コンピュータ１００は、ＣＰＵ１０１、入力装置１０２、表示装置１０３、通信装置１０４、及び記憶装置１０５を、１つ又は複数備えてもよいし、プリンタやスキャナなどの周辺機器と接続されていてもよい。
【０１０７】
また、装置１０は、単一のコンピュータ１００により構成されてもよいし、相互に接続された複数のコンピュータ１００からなるシステムとして構成されてもよい。
【０１０８】
さらに、リソース割当てプログラムは、コンピュータ１００の記憶装置１０５に予め記憶されていてもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶されていてもよいし、インターネット上にアップロードされていてもよい。いずれの場合も、リソース割当てプログラムをコンピュータ１００にインストールして実行することにより、装置１０を構成することができる。
【０１０９】
またさらに、リソース割当てプログラムとＶＭＭとは、同一のコンピュータ１００により実行されてもよいし、相互に接続された別個のコンピュータ１００により実行されてもよい。
【０１１０】
次に、装置１０の動作について、図１０〜図１１を参照して説明する。図１０は、時刻Ｔ（ｉ）における装置１０の動作を示すフローチャートである。以下の説明において、ステップＳ１及びステップＳ４は、時刻Ｔ（ｉ）になると開始されるものとするが、ステップＳ１及びステップＳ４の開始のタイミングは異なってもよい。
【０１１１】
時刻Ｔ（ｉ）になると、ステップＳ１において、使用量算出部１３は、ＶＭＭから使用量Ｕ（Ｔ（ｉ））を取得する。
【０１１２】
ステップＳ２において、使用量算出部１３は、タイムスロットＳｌｏ＿ｉ−１における確定使用量ｆＵ（ｉ−１）を算出する。確定使用量ｆＵ（ｉ−１）の算出方法は上述の通りである。使用量算出部１３により算出された確定使用量ｆＵ（ｉ−１）は、使用量記憶部１４に記憶される。
【０１１３】
ステップＳ３において、スパイク検出部１５は、タイムスロットＳｌｏ＿ｉ−２の確定使用量ｆＵ（ｉ−２）と、タイムスロットＳｌｏ＿ｉ−１の確定使用量ｆＵ（ｉ−１）と、を使用量記憶部１４から取得し、タイムスロットＳｌｏ＿ｉ−１にスパイクが発生していたか判定する。スパイクの検出方法は上述の通りである。スパイク検出部１５によるスパイクの検出結果は、スパイク記憶部１６に記憶される。
【０１１４】
一方、時刻Ｔ（ｉ）になると、ステップＳ４において、割当量設定部１８は、ＶＭＭに割当量Ａ（ｉ）を設定する。ＶＭＭは、設定された割当量Ａ（ｉ）をＶＭに割当てる。
【０１１５】
ステップＳ５において、割当量設定部１８は、タイムスロットＳｌｏ＿ｉ−１における確定割当量ｆＡ（ｉ−１）を算出する。確定割当量ｆＡ（ｉ−１）の算出方法は上述の通りである。割当量設定部１８により算出された確定割当量ｆＡ（ｉ−１）は、使用量記憶部１４に記憶される。
【０１１６】
ステップＳ６において、割当量算出部１７は、使用量記憶部１４からタイムスロット群ｉ＋１のｍ個の確定使用量ｆＵ（ｉ＋１）を取得する。
【０１１７】
ステップＳ７において、割当量算出部１７は、取得したｍ個の確定使用量ｆＵ（ｉ＋１）から、仮割当量Ａ（ｉ＋１）′を算出する。仮割当量Ａ（ｉ＋１）′の算出方法は上述の通りである。
【０１１８】
ステップＳ８において、割当量算出部１７は、スパイク記憶部１６から、タイムスロット群ｉ及びタイムスロット群ｉ＋２におけるスパイクの検出結果を取得する。
【０１１９】
ステップＳ９において、割当量算出部１７は、仮割当量Ａ（ｉ＋１）′と、取得したスパイクの検出結果と、に基づいて割当量Ａ（ｉ＋１）を算出する。割当量Ａ（ｉ＋１）の算出方法は上述の通りである。
【０１２０】
また、ステップＳ２及びステップＳ５において、確定使用量ｆＵ（ｉ−１）及び確定割当量ｆＡ（ｉ−１）がそれぞれ算出された後、ステップＳ１０において、成功率算出部１９は、タイムスロットＳｌｏ＿ｉ−１におけるリソース保証の成否を判定する。リソース保証の成否の判定方法は上述の通りである。判定結果は使用量記憶部１４に記憶される。
【０１２１】
ステップＳ３，Ｓ９，Ｓ１０の後、装置１０は、時刻Ｔ（ｉ＋１）まで待機する。
【０１２２】
図１１は、時刻Ｔ（３）における上記の処理が終了した後の使用量記憶部１４の一例を示す図である。時刻Ｔ（３）の処理により、使用量記憶部１４には、タイムスロットＳｌｏ＿２の確定使用量ｆＵ（２）、確定割当量ｆＡ（２）、及びリソース保証の成否が記憶される。
【０１２３】
以上説明した通り、本実施形態に係る装置１０によれば、過去にスパイクが発生したタイムスロットの前後のタイムスロットに割当てるリソースの割当量を増加させることができる。したがって、スパイクが発生するタイムスロットが前後にずれた場合であっても、リソースの不足を抑制し、リソース保証の成功率を向上させ、精度よくリソースを保証することができる。
【０１２４】
また、過去にスパイクが発生したタイムスロットの前後のタイムスロットの割当量を選択的に増加させることができるため、割当量の増加を抑制することができる。
【０１２５】
本実施形態に係る装置１０は、動作精度が高いアプリケーションを実行するＶＭのリソース割当て処理に用いるのが好ましい。理由を以下で説明する。なお、動作精度が高いアプリケーションは、例えば、ソフトウェアの動作状態や、空調設備などの機械の動作状態を監視するアプリケーションであるが、これに限られない。また、動作精度が高いとは、動作精度が１ミリ秒以上１０００ミリ秒以下であることをいう。
【０１２６】
従来のリソース割当て方法として、リソースの使用量が変化する周期を複数のタイムスロットに分割し、各タイムスロットＳｌｏ＿ｉに、過去のタイムスロットＳｌｏ＿ｉにおけるリソースの使用量の平均値や最大値を割当てる方法が提案されている。
【０１２７】
このような従来技術では、リソース割当て処理の対象として、ＷＥＢサーバのような、動作精度が数秒〜数分程度のアプリケーションを実行するＶＭを想定している。ＷＥＢサーバでは、リソースが不足すると応答が遅れるが、応答が数ミリ秒遅れたとしても深刻な問題は発生しない。
【０１２８】
しかしながら、上記の従来技術では、動作精度が高いアプリケーションを実行するＶＭにリソースを適切に割当てることは困難であった。
【０１２９】
動作精度の高いアプリケーションは、図２に示すように、スパイクが発生しやすい上、タイムスロットの時間幅がミリ秒オーダーとなる。このため、一般的なコンピュータや汎用ＯＳにおいて生じる数十マイクロ秒〜数ミリ秒の処理タイミングのずれにより、スパイクが発生するタイムスロットがずれやすい。また、動作精度の高いアプリケーションは、スパイク発生時には大量のリソースを使用するが、平常時には少量のリソースしか使用しない傾向がある。
【０１３０】
このようなアプリケーションを実行するＶＭに従来技術を適用した場合、過去にスパイクが発生したタイムスロットには、スパイク使用量に応じた割当量が設定されるが、それ以外のタイムスロットには、平常時の使用量に応じた少量の割当量が設定される。
【０１３１】
このため、スパイクが発生するタイムスロットがずれると、少量の割当量が設定されたタイムスロットでスパイクが発生することになり、リソースが不足して処理が遅延する。動作精度の高いアプリケーションでは、数ミリ秒の処理の遅れにより、動作に大幅な乱れが生じる恐れがある。
【０１３２】
従来技術により、動作精度の高いアプリケーションのリソースを保証する方法として、全てのタイムスロットに、スパイク使用量に応じた割当量を設定する方法が考えられる。しかしながら、この方法では、リソースの使用量が少ない平常時にも大量のリソースが割当てられることになり、余計なリソースの割当てが発生してしまう。
【０１３３】
これに対して、本実施形態に係る装置１０によれば、スパイクの発生するタイムスロットが前後のタイムスロットにずれた場合であっても、リソースを精度よく保証できるため、動作精度が高いアプリケーションを実行するＶＭに、適切に割当量を設定することができる。
【０１３４】
図１２は、本実施形態に係る装置１０及び従来技術によるリソース保証の成功率のシミュレーション結果である。図１２において、リソースはＣＰＵであり、実線が装置１０による成功率、破線が従来技術による成功率を示している。図１２より、動作精度がミリ秒オーダーの場合、装置１０は、従来技術に比べて、高い成功率を示すことがわかる。
【０１３５】
なお、本発明は上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素を適宜組み合わせることによって種々の発明を形成できる。また例えば、各実施形態に示される全構成要素からいくつかの構成要素を削除した構成も考えられる。さらに、異なる実施形態に記載した構成要素を適宜組み合わせてもよい。
【符号の説明】
【０１３６】
１０：リソース割当て装置、１１：ＶＭＭ情報記憶部、１２：アプリ情報記憶部、１３：使用量算出部、１４：使用量記憶部、１５：スパイク検出部、１６：スパイク記憶部、１７：割当量算出部、１８：割当量設定部、１９：成功率算出部、１００：コンピュータ、１０１：ＣＰＵ、１０２：入力装置、１０３：表示装置、１０４：通信装置、１０５：記憶装置、１０６：バス
【図１】
2016091109.tif 000003
【図２】
2016091109.tif 000004
【図３】
2016091109.tif 000005
【図４】
2016091109.tif 000006
【図５】
2016091109.tif 000007
【図６】
2016091109.tif 000008
【図７】
2016091109.tif 000009
【図８】
2016091109.tif 000010
【図９】
2016091109.tif 000011
【図１０】
2016091109.tif 000012
【図１１】
2016091109.tif 000013
【図１２】
2016091109.tif 000014