(57)【特許請求の範囲】
【請求項１】
コンピュータに、
前記コンピュータで動作する仮想マシン上の実行待ち中であるプロセスを示す待ち行列を監視し、プロセス毎に前記待ち行列を１段進むための平均時間を算出し、
現在の前記待ち行列の長さと前記待ち行列の末尾にあるプロセスに対応する前記平均時間とから最大待ち時間の推定値を算出し、
前記推定値を含むプロセス情報を、前記コンピュータが有する記憶部の中の、前記仮想マシンを管理する管理ソフトウェアから参照可能な記憶領域に書き込む、
処理を実行させる実行情報通知プログラム。
【請求項２】
前記プロセス情報の書き込みは、前記仮想マシン上で実行されるオペレーティングシステムでプロセスのスケジューリングが行われたときに実行される、
請求項１記載の実行情報通知プログラム。
【請求項３】
前記コンピュータが有するプロセッサ内のカウンタを監視する処理を更に実行させ、
前記プロセス情報の書き込みは、前記カウンタの値の変化に応じて実行される、
請求項１記載の実行情報通知プログラム。
【請求項４】
前記記憶領域は、前記管理ソフトウェアによって前記記憶部に確保され、前記管理ソフトウェアから前記仮想マシンに対して指定される、
請求項１乃至３の何れか一項に記載の実行情報通知プログラム。
【請求項５】
記憶部と、仮想マシンを動作させる演算部とを有し、
前記演算部は、前記仮想マシン上の実行待ち中であるプロセスを示す待ち行列を監視し、プロセス毎に前記待ち行列を１段進むための平均時間を算出し、現在の前記待ち行列の長さと前記待ち行列の末尾にあるプロセスに対応する前記平均時間とから最大待ち時間の推定値を算出し、前記推定値を含むプロセス情報を、前記記憶部の中の前記仮想マシンを管理する管理ソフトウェアから参照可能な記憶領域に書き込む、
情報処理装置。
【請求項６】
記憶部と、
仮想マシンを動作させる第１の演算部と、
前記仮想マシンを管理する管理ソフトウェアを実行する第２の演算部とを有し、
前記第１の演算部は、前記仮想マシン上の実行待ち中であるプロセスを示す待ち行列を監視し、プロセス毎に前記待ち行列を１段進むための平均時間を算出し、現在の前記待ち行列の長さと前記待ち行列の末尾にあるプロセスに対応する前記平均時間とから最大待ち時間の推定値を算出し、前記推定値を含むプロセス情報を、前記記憶部の中の前記管理ソフトウェアから参照可能な記憶領域に書き込み、
前記第２の演算部は、前記記憶領域を監視し、前記記憶領域から前記プロセス情報が検出された場合、前記プロセス情報に基づいて前記仮想マシンにリソースを割り当てる、
情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は実行情報通知プログラム、情報処理装置および情報処理システムに関する。
【背景技術】
【０００２】
現在、物理的なコンピュータ（物理マシンと言うことがある）上で、複数の仮想的なコンピュータ（仮想マシン（ＶＭ：Virtual Machine）と言うことがある）を動作させる、仮想化技術が利用されている。ある情報処理と他の情報処理とを異なる仮想マシンに実行させることで、それらの情報処理を干渉しないように明確に分離することができる。よって、ユーザ毎に仮想マシンを用意することで、複数の仮想マシンを同じ物理マシンに配置しても、それら複数のユーザの情報処理を分離することが容易となる。
【０００３】
物理マシンでは、仮想マシンを管理する管理ソフトウェアが実行されている。管理ソフトウェアには、仮想マシンモニタ（ＶＭＭ：Virtual Machine Monitor）、ハイパーバイザ、管理オペレーティングシステム（ＯＳ：Operating System）などと呼ばれるものが含まれる。管理ソフトウェアは、物理マシンが有するＣＰＵ（Central Processing Unit）コアやＲＡＭ（Random Access Memory）領域などの物理的・ハードウェア的なリソースを、その物理マシンに配置された仮想マシンに対して割り当てる。各仮想マシンでは、他の仮想マシンとは独立にユーザ用のＯＳ（ゲストＯＳやユーザＯＳと言うことがある）が実行される。各仮想マシンのＯＳは、管理ソフトウェアから割り当てられたリソースの範囲内で、そのＯＳ上で起動されたプロセスのスケジューリングを行う。
【０００４】
リソース割り当てに関して、動的に仮想マシンにリソースを割り当てる仮想マシンシステムが提案されている。提案の仮想マシンシステムでは、複数の仮想マシンそれぞれが管理ソフトウェアにリソース要求を送信する。管理ソフトウェアは、複数の仮想マシンからのリソース要求に基づいて最適化演算を行い、各仮想マシンにリソースを割り当てる。管理ソフトウェアは、割り当て結果を示すリソース供給情報を各仮想マシンに送信する。複数の仮想マシンと管理ソフトウェアの間で、リソース要求およびリソース供給情報を継続的に交換することで、各仮想マシンへの動的なリソース割り当てが実現される。
【０００５】
なお、複数のコアを含むプロセッサ（マルチコアプロセッサ）を有するデータ処理システムが提案されている。提案のデータ処理システムでは、ＯＳまたはハイパーバイザが、あるスレッドの実行特徴を学習してスレッド性能データを生成する。当該スレッドが再び実行される場合、ＯＳはスレッド性能データに基づいて、複数のコアのうち最も効率的に実行できると予測されるコアを当該スレッドに割り当てる。
【０００６】
また、性能の異なる複数のコアを有する異種処理システムが提案されている。提案の異種処理システムでは、ハイパーバイザが、コアを仮想化して仮想コアを定義し、ＯＳに対して仮想コアを割り当てる。ハイパーバイザは、仮想コア上でのスレッドの実行を要求するスケジューリング要求をＯＳから受信すると、当該スレッドを実行するコアを選択し、選択したコアについてスレッドのスケジューリングを行う。これにより、ハイパーバイザを通じて、コア間の性能の違いをＯＳから隠蔽することができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】国際公開第２００８／１３２９２４号
【特許文献２】特開２００９−１５１７７４号公報
【特許文献３】国際公開第２０１２／１７０７４６号
【発明の概要】
【発明が解決しようとする課題】
【０００８】
管理ソフトウェアは、仮想マシンの負荷に応じて当該仮想マシンへのリソースの割り当てを動的に変更することがある。動的なリソース割り当てを実現するには、管理ソフトウェアは、仮想マシンの負荷に関する情報を仮想マシンから継続的に取得することになる。しかし、管理ソフトウェアと仮想マシンの間の通信が効率的でなくそのオーバヘッドが大きいと、仮想マシンの負荷が変化してからリソースの割り当てが変化するまでの遅延が大きくなり、仮想マシンの需要を十分に満たせなくなるという問題がある。
【０００９】
例えば、管理ソフトウェアと仮想マシンの間の通信の方法として、「割り込み」を用いる方法が考えられる。しかしながら、「割り込み」を用いると、割り込まれた側のＣＰＵリソースは、割り込みハンドラを起動して割り込み直前の処理状態を退避するなどの事前処理を行い、その後に負荷調査などの本来の処理を行うルーチンを呼び出すことになる。このため、割り込みハンドラのオーバヘッドが大きく通信の遅延が大きくなってしまう。その結果、仮想マシンの負荷が急激に高くなっても、その仮想マシンの割り当てリソース量がしばらくは増えず、高負荷の状態が続いてしまうおそれがある。
【００１０】
１つの側面では、本発明は、仮想マシンへのリソースの割り当てを迅速に変更できるようにする実行情報通知プログラム、情報処理装置および情報処理システムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの態様では、コンピュータに以下の処理を実行させる実行情報通知プログラムが提供される。コンピュータで動作する仮想マシン上の実行待ち中であるプロセスを検出する。検出されたプロセスに応じたプロセス情報を、コンピュータが有する記憶部の中の、仮想マシンを管理する管理ソフトウェアから参照可能な記憶領域に書き込む。
【００１２】
また、１つの態様では、記憶部と演算部とを有する情報処理装置が提供される。
また、１つの態様では、記憶部と、仮想マシンを動作させる第１の演算部と、仮想マシンを管理する管理ソフトウェアを実行する第２の演算部とを有する情報処理システムが提供される。第１の演算部は、仮想マシン上の実行待ち中であるプロセスを検出し、検出されたプロセスに応じたプロセス情報を、記憶部の中の管理ソフトウェアから参照可能な記憶領域に書き込む。第２の演算部は、記憶領域を監視し、記憶領域からプロセス情報が検出された場合、プロセス情報に基づいて仮想マシンにリソースを割り当てる。
【発明の効果】
【００１３】
１つの側面では、仮想マシンへのリソースの割り当てを迅速に変更できるようになる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態の情報処理装置を示す図である。
【図２】情報処理装置のハードウェア例を示すブロック図である。
【図３】仮想化アーキテクチャの例を示すブロック図である。
【図４】ＣＰＵリソースの割り当て例を示す図である。
【図５】リソース割り当ての第１のフロー例を示すシーケンス図である。
【図６】リソース割り当ての第２のフロー例を示すシーケンス図である。
【図７】プロセス情報の通知方法の例を示す図である。
【図８】情報処理装置の第１の機能例を示すブロック図である。
【図９】時間推定テーブルの例を示す図である。
【図１０】プロセス情報テーブルの例を示す図である。
【図１１】スケジューラの手順例を示すフローチャートである。
【図１２】リソース割り当て部の手順例を示すフローチャートである。
【図１３】情報処理装置の第２の機能例を示すブロック図である。
【図１４】情報処理装置の第３の機能例を示すブロック図である。
【図１５】プロセス監視部の手順例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理装置を示す図である。
【００１６】
第１の実施の形態の情報処理装置１０は、仮想化技術を用いて１または２以上の仮想マシンを動作させることができるコンピュータ（物理マシン）である。情報処理装置１０は、記憶部１１および演算部１２，１３を有する。ただし、演算部１２と演算部１３とが、ネットワークで接続された異なる筐体または異なる物理マシンに属していてもよい。その場合、情報処理装置１０を情報処理システムと言うこともできる。
【００１７】
記憶部１１は、演算部１２，１３からアクセスされる共有の記憶装置（例えば、共有メモリ）である。記憶部１１は、演算部１２，１３が実行するプログラムや当該プログラムによって使用されるデータを記憶する。記憶部１１は、例えば、ＲＡＭなどの揮発性の半導体メモリである。ただし、記憶部１１は、フラッシュメモリやＨＤＤ（Hard Disk Drive）などの不揮発性の記憶装置であってもよい。
【００１８】
演算部１２（第１の演算部）は、仮想マシン１４を動作させる。演算部１３（第２の演算部）は、仮想マシン１４を管理する管理ソフトウェア１５を実行する。ただし、仮想マシン１４と管理ソフトウェア１５とが同一の演算部上で実行されてもよい。演算部１２，１３それぞれは、例えば、ＣＰＵ、２以上のＣＰＵの集合、ＣＰＵコア、２以上のＣＰＵコアの集合などである。演算部１２，１３は、ＣＰＵリソースと言うこともできる。演算部１２，１３は、記憶部１１に記憶されたプログラムを実行する。ただし、演算部１２，１３は、ＤＳＰ（Digital Signal Processor）などの他の種類のプロセッサを含んでもよく、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と言うこともある。
【００１９】
仮想マシン１４は、ＯＳを実行する。情報処理装置１０で他の仮想マシンが動作していても、仮想マシン１４は、他の仮想マシンとは独立にＯＳを実行する。これにより、仮想マシン間で情報処理を明確に分離することができる。仮想マシン１４に対しては、管理ソフトウェア１５によって演算部１２が割り当てられている。仮想マシン１４のＯＳは、割り当てられた演算部１２のリソースに基づいて、当該ＯＳ上で起動されたプロセスのスケジューリングを行う。ＯＳ上で起動されるプロセスには、アプリケーションソフトウェアのプロセスやデバイスドライバのプロセスなどが含まれる。
【００２０】
プロセスのスケジューリングに関して、仮想マシン１４のＯＳは、実行待ちのプロセスを並べた待ち行列を管理する。仮想マシン１４のＯＳは、所定のスケジューリングアルゴリズムに従い、待ち行列に含まれるプロセスの中から次に実行するプロセスを決定する。例えば、ＦＩＦＯ（First In First Out）方式では、実行中のプロセスが終了する毎に、待ち行列の先頭から次のプロセスが抽出されて開始される。また、プリエンプティブ方式では、所定の割り当て時間が経過すると実行中のプロセスが中断されて待ち行列の末尾に戻され、待ち行列の先頭から次のプロセスが抽出されて開始される。図１の例では、仮想マシン１４の待ち行列にプロセスＰ１，Ｐ２，Ｐ３が含まれている。
【００２１】
管理ソフトウェア１５は、情報処理装置１０が有する物理的・ハードウェア的なリソースの一部を仮想マシン１４に割り当てる。現在、仮想マシン１４には演算部１２が割り当てられている。また、管理ソフトウェア１５は、仮想マシン１４の負荷に応じて、仮想マシン１４に割り当てるリソースを動的に変更する。例えば、管理ソフトウェア１５は、仮想マシン１４の負荷が高くなると仮想マシン１４に割り当てるリソースを増やし、仮想マシン１４の負荷が低くなると仮想マシン１４に割り当てるリソースを減らす。ただし、情報処理装置１０で他の仮想マシンが動作している場合、管理ソフトウェア１５は、他の仮想マシンの負荷も考慮して仮想マシン１４に割り当てるリソースを決定してもよい。
【００２２】
ここで、管理ソフトウェア１５が仮想マシン１４の負荷を把握できるように、次のような手順で通信が行われる。演算部１２は、仮想マシン１４上の実行待ちのプロセス（例えば、プロセスＰ１，Ｐ２，Ｐ３）を検出する。実行待ちのプロセスは、例えば、仮想マシン１４のＯＳが有する情報を参照することで検出できる。演算部１２は、検出されたプロセスに応じたプロセス情報１６を、記憶部１１の中の記憶領域１１ａに書き込む。記憶領域１１ａは、管理ソフトウェア１５から参照可能な領域であり、例えば、管理ソフトウェア１５によって記憶部１１上に確保されたものである。記憶領域１１ａの場所は、予め管理ソフトウェア１５から仮想マシン１４に通知されてもよい。
【００２３】
プロセス情報１６は、検出された実行待ちのプロセスの数を含んでもよい。例えば、待ち行列にプロセスＰ１，Ｐ２，Ｐ３が含まれている場合、実行待ちのプロセスは３個である。また、プロセス情報１６は、検出されたプロセスが実行されるまでの待ち時間（実行待ちのプロセスが複数ある場合は、例えば、最大の待ち時間）の推定値を含んでもよい。例えば、実行待ちのプロセスの数と待ち行列の末尾にあるプロセスの過去の実行状況から、末尾のプロセスが開始されるまでの待ち時間が推定される。演算部１２は、例えば、実行待ちのプロセスの検出およびプロセス情報１６の書き込みを、仮想マシン１４のＯＳによってプロセスのスケジューリングが行われる毎に実行する。
【００２４】
演算部１３は、記憶部１１の記憶領域１１ａを監視する。例えば、演算部１３は、ポーリング方式によって定期的に記憶領域１１ａにアクセスする。演算部１３は、記憶領域１１ａからプロセス情報１６が検出された場合、検出されたプロセス情報１６に基づいて仮想マシン１４に割り当てるリソースを変更する。情報処理装置１０で他の仮想マシンが動作している場合、演算部１３は、次のような方法によって、プロセス情報１６が何れの仮想マシンに対応するものであるか特定してもよい。例えば、演算部１３は、仮想マシン毎に記憶部１１に記憶領域を確保しておく。これにより、記憶領域１１ａに記憶されたプロセス情報１６は、仮想マシン１４に対応するものと判断できる。また、例えば、演算部１２がプロセス情報１６に仮想マシン１４の識別情報を付加しておく。
【００２５】
第１の実施の形態の情報処理装置１０によれば、仮想マシン１４上の実行待ちのプロセスが検出され、管理ソフトウェア１５から参照可能な記憶領域１１ａに、実行待ちのプロセスに関するプロセス情報１６が書き込まれる。管理ソフトウェア１５によって記憶領域１１ａが監視され、記憶領域１１ａからプロセス情報１６が検出されると、プロセス情報１６に基づいて仮想マシン１４のリソースの割り当てが変更される。これにより、仮想マシン１４と管理ソフトウェア１５との間の通信を効率化でき、仮想マシン１４の負荷に応じて迅速に仮想マシン１４にリソースを割り当てることが可能となる。
【００２６】
例えば、管理ソフトウェア１５が「割り込み」を用いて仮想マシン１４の負荷情報を取得しようとすると、本来の処理の前に割り込みハンドラが起動され、通信のオーバヘッドが大きくなってしまう。このため、仮想マシン１４の負荷が変化してからその変化がリソース割り当てに反映されるまでの遅延が大きくなってしまう。これに対し、第１の実施の形態の方法によれば、割り込みを用いる方法と比べて通信のオーバヘッドが小さく、仮想マシン１４の負荷の変化を管理ソフトウェア１５が迅速に把握できる。その結果、仮想マシン１４の負荷が急増したときに仮想マシン１４のリソースを迅速に増やすことができるなど、負荷の変化に迅速に対応することが可能となる。
【００２７】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、情報処理装置のハードウェア例を示すブロック図である。
【００２８】
第２の実施の形態の情報処理装置１００は、複数の仮想マシンを動作させることができる。情報処理装置１００は、端末装置、クライアント装置、クライアントコンピュータなどと呼ばれるものであってもよい。また、情報処理装置１００は、サーバ装置、サーバコンピュータ、ホストコンピュータなどと呼ばれるものであってもよい。情報処理装置１００は、ＣＰＵ１０１，１０２、タイマ１０３、ＲＡＭ１０４、ＨＤＤ１０５、画像信号処理部１０６、入力信号処理部１０７、媒体リーダ１０８および通信インタフェース１０９を有する。これらのユニットはバス１１０に接続されている。
【００２９】
ＣＰＵ１０１，１０２は、プログラムを実行するプロセッサパッケージである。ＣＰＵ１０１，１０２は、ＨＤＤ１０５に格納されたプログラムやデータの少なくとも一部をＲＡＭ１０４にロードし、プログラムを実行する。ＣＰＵ１０１は、コア１０１ａ，１０１ｂ，１０１ｃ，１０１ｄを有する。ＣＰＵ１０２は、コア１０２ａ，１０２ｂ，１０２ｃ，１０２ｄを有する。コア１０１ａ，１０１ｂ，１０１ｃ，１０１ｄ，１０２ａ，１０２ｂ，１０２ｃ，１０２ｄは、並列にプログラムの命令を実行できる。なお、１つのＣＰＵまたは１つのコアを「プロセッサ」と言うことがある。また、２以上のＣＰＵの集合または２以上のコアの集合を、「マルチプロセッサ」や「プロセッサ」と言うことがある。
【００３０】
タイマ１０３は、指定された時間が経過したときにその旨を通知するハードウェアである。タイマ１０３は、何れかのコアから指定時間を含むタイマ要求を受け付けると、指定時間からのカウントダウン（または、ゼロからのカウントアップ）を開始する。残り時間がゼロになる（または、カウンタが指定時間と一致する）と、タイマ１０３は、タイマ要求を発行したコアに対してタイマ割り込み信号を送信する。なお、各ＣＰＵまたは各コアの中に、タイマ１０３に相当するハードウェアが搭載されていてもよい。
【００３１】
ＲＡＭ１０４は、コア１０１ａ，１０１ｂ，１０１ｃ，１０１ｄ，１０２ａ，１０２ｂ，１０２ｃ，１０２ｄから使用される共有メモリである。ＲＡＭ１０４は、プログラムやデータを一時的に記憶する。なお、情報処理装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えていてもよい。
【００３２】
ＨＤＤ１０５は、ＯＳ、デバイスドライバ、アプリケーションソフトウェアなどの各種のソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、情報処理装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００３３】
画像信号処理部１０６は、コア１０１ａ，１０１ｂ，１０１ｃ，１０１ｄ，１０２ａ，１０２ｂ，１０２ｃ，１０２ｄからの指示に従って、情報処理装置１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００３４】
入力信号処理部１０７は、情報処理装置１００に接続された入力デバイス１１２から入力信号を取得し、何れかのコアに出力する。入力デバイス１１２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、情報処理装置１００に、複数の種類の入力デバイスが接続されてもよい。
【００３５】
媒体リーダ１０８は、記録媒体１１３に記録されたプログラムやデータを読み取る駆動装置である。記録媒体１１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０８は、例えば、記録媒体１１３から読み取ったプログラムやデータをＲＡＭ１０４またはＨＤＤ１０５に格納する。
【００３６】
通信インタフェース１０９は、ネットワーク１１４に接続され、ネットワーク１１４を介して他の情報処理装置と通信するインタフェースである。通信インタフェース１０９は、ケーブルでスイッチやルータなどの通信装置と接続される有線通信インタフェースでもよいし、無線基地局と接続される無線通信インタフェースでもよい。
【００３７】
なお、情報処理装置１００は、媒体リーダ１０８を備えていなくてもよい。また、ユーザが操作する端末装置からネットワーク１１４経由で情報処理装置１００を制御できる場合、情報処理装置１００は、画像信号処理部１０６や入力信号処理部１０７を備えていなくてもよい。また、ディスプレイ１１１や入力デバイス１１２が、情報処理装置１００の筐体と一体に形成されていてもよい。なお、ＲＡＭ１０４は、第１の実施の形態の記憶部１１の一例である。コア１０１ａは、第１の実施の形態の演算部１２の一例である。コア１０２ａは、第２の実施の形態の演算部１３の一例である。
【００３８】
図３は、仮想化アーキテクチャの例を示すブロック図である。
情報処理装置１００は、仮想マシン１２０，１３０および仮想マシンモニタ１４０を有する。仮想マシン１２０，１３０は、仮想化技術を用いて実現される仮想的なコンピュータである。仮想マシンモニタ１４０は、仮想マシン１２０，１３０を管理する。仮想マシンモニタ１４０は、ハイパーバイザと呼ばれることもある。仮想マシンモニタ１４０は、例えば、１または２以上のコアで実行されるプログラムを用いて実装される。なお、仮想マシン１２０は、第１の実施の形態の仮想マシン１４の一例である。仮想マシンモニタ１４０は、第１の実施の形態の管理ソフトウェア１５の一例である。
【００３９】
仮想マシンモニタ１４０は、情報処理装置１００が有する物理的・ハードウェア的なリソースを、仮想マシン１２０，１３０に割り当てる。仮想マシン１２０，１３０に割り当てられるリソースには、ＣＰＵ１０１，１０２の演算能力であるＣＰＵリソースと、ＲＡＭ１０４の記憶領域であるＲＡＭリソースが含まれる。また、仮想マシン１２０，１３０に割り当てられるリソースには、ＨＤＤ１０５の記憶領域であるＨＤＤリソースや、通信インタフェース１０９の帯域である通信リソースなどが含まれることがある。第２の実施の形態では、リソースとして主にＣＰＵリソースを想定する。また、仮想マシン１２０，１３０には、原則としてコア単位でＣＰＵリソースが割り当てられるとする。ただし、１つのコアの演算時間を分割して異なる仮想マシンに割り当てることも可能である。
【００４０】
仮想マシン１２０は、プロセス１２１ａ，１２１ｂ，１２１ｃおよびオペレーティングシステム１２２を有する。プロセス１２１ａ，１２１ｂ，１２１ｃは、オペレーティングシステム１２２上で起動された、処理の実行単位である。プロセス１２１ａ，１２１ｂ，１２１ｃでは、例えば、アプリケーションプログラムに従って処理が実行される。
【００４１】
オペレーティングシステム１２２は、仮想マシン１２０を制御する。オペレーティングシステム１２２は、仮想マシンモニタ１４０から割り当てられたリソースのみを、情報処理装置１００が有するリソースと認識する。そして、オペレーティングシステム１２２は、割り当てられたリソースを用いてプロセス１２１ａ，１２１ｂ，１２１ｃが時分割で実行されるように、プロセス１２１ａ，１２１ｂ，１２１ｃをスケジューリングする。
【００４２】
オペレーティングシステム１２２は、プロセス１２１ａ，１２１ｂ，１２１ｃを待ち行列に入れて管理する。オペレーティングシステム１２２は、実行中のプロセスが中断または終了する毎に、実行待ちのプロセスの中から優先順位の高いプロセスを選択して開始させる。プロセスのスケジューリングには、ＦＩＦＯ方式やプリエンプティブ方式などの所定のスケジューリングアルゴリズムが用いられる。ＦＩＦＯ方式の場合、オペレーティングシステム１２２は、実行中のプロセスが終了するのを待ち、終了すると待ち行列の先頭から実行待ちのプロセスを１つ抽出して開始させる。プリエンプティブ方式の場合、オペレーティングシステム１２２は、所定の割り当て時間が経過すると、実行中のプロセスを中断させて待ち行列の末尾に戻す。そして、オペレーティングシステム１２２は、待ち行列の先頭から実行待ちのプロセスを１つ抽出して開始させる。
【００４３】
仮想マシン１３０は、プロセス１３１ａ，１３１ｂ，１３１ｃおよびオペレーティングシステム１３２を有する。仮想マシン１２０と仮想マシン１３０とは、仮想マシンモニタ１４０から異なるリソースが割り当てられることで、情報処理が互いに干渉しないように明確に分離される。よって、仮想マシン１２０，１３０は、異なるユーザによって起動されたものであってもよい。プロセス１３１ａ，１３１ｂ，１３１ｃは、仮想マシン１２０のプロセス１２１ａ，１２１ｂ，１２１ｃに対応する。オペレーティングシステム１３２は、仮想マシン１２０のオペレーティングシステム１２２に対応する。
【００４４】
図４は、ＣＰＵリソースの割り当て例を示す図である。
仮想マシン１２０，１３０にはそれぞれ、ＣＰＵリソースとして１または２以上のコアが割り当てられる。また、仮想マシンモニタ１４０は、少なくとも１つのコアを使用する。例えば、仮想マシン１２０には、ＣＰＵ１０１のコア１０１ａ，１０１ｂが割り当てられる。仮想マシン１３０には、ＣＰＵ１０１のコア１０１ｃ，１０１ｄが割り当てられる。仮想マシンモニタ１４０は、ＣＰＵ１０２のコア１０２ａを使用する。
【００４５】
ここで、仮想マシンモニタ１４０は、仮想マシン１２０，１３０の負荷を監視し、負荷に応じて動的に仮想マシン１２０，１３０へのリソースの割り当てを変更することができる。仮想マシン１２０，１３０の負荷を示す指標としては、後述するように、実行待ちのプロセスの数や、待ち行列の末尾にあるプロセスが開始されるまでの待ち時間の推定値（推定最大待ち時間）などを用いることができる。実行待ちのプロセス数や推定最大待ち時間が大きいほど、その仮想マシンの負荷が大きいと判断される。
【００４６】
仮想マシンモニタ１４０は、複数の仮想マシンの間の相対的な負荷の大きさに基づいて、各仮想マシンに割り当てるリソースを決定する。特に、仮想マシンモニタ１４０は、相対的に負荷が大きい仮想マシンのＣＰＵリソースを増やし、相対的に負荷が小さい仮想マシンのＣＰＵリソースを減らす。例えば、仮想マシン１２０の負荷が大きくなり、仮想マシン１３０の負荷が小さくなったとする。すると、例えば、仮想マシンモニタ１４０は、仮想マシン１２０にコア１０１ａ，１０１ｂ，１０１ｃを割り当て、仮想マシン１２０が使用するコアの数を増やす。また、仮想マシンモニタ１４０は、仮想マシン１３０にコア１０１ｄを割り当て、仮想マシン１３０が使用するコアの数を減らす。
【００４７】
次に、仮想マシンモニタ１４０が仮想マシン１２０，１３０の負荷を監視する方法について説明する。以下では、仮想マシンモニタ１４０が割り込みを用いて定期的に仮想マシン１２０，１３０から負荷情報を収集する第１の方法と、仮想マシン１２０，１３０がＲＡＭ１０４の所定の記憶領域にプロセス情報を直接書き込む第２の方法を説明する。
【００４８】
図５は、リソース割り当ての第１のフロー例を示すシーケンス図である。
第１の方法では、負荷情報を収集する周期がタイマ１０３に設定される。タイマ１０３は、設定された時間が経過すると、仮想マシンモニタ１４０に対してタイマ割り込みを発行する（Ｓ１０）。仮想マシンモニタ１４０では、タイマ割り込みを受け付けると、タイマ割り込みに対応する割り込みハンドラが実行される（Ｓ１１）。割り込みハンドラは、割り込みの種類毎に用意されるプログラムモジュールである。割り込みハンドラによって、割り込み直前のコア１０２ａの状態がＲＡＭ１０４に退避され、所望のプログラムモジュールが呼び出される。すなわち、コア１０２ａでコンテキストスイッチが発生する。
【００４９】
コンテキストスイッチが完了すると、仮想マシンモニタ１４０は、仮想マシン１２０に対して負荷情報要求を送信する（Ｓ１２）。負荷情報要求は、仮想マシン１２０に対する割り込みとして実現される。仮想マシン１２０では、負荷情報要求が送信されると、割り込みハンドラが実行される（Ｓ１３）。割り込みハンドラによって、割り込み直前のコア１０１ａなどのコアの状態がＲＡＭ１０４に退避され、所望のプログラムモジュールが呼び出される。すなわち、コア１０１ａなどでコンテキストスイッチが発生する。
【００５０】
コンテキストスイッチが完了すると、仮想マシン１２０は、仮想マシン１２０の現在の負荷を確認し、現在の負荷を示す負荷情報を仮想マシンモニタ１４０に送信する（Ｓ１４）。負荷情報の送信は、仮想マシンモニタ１４０に対する割り込みとして実現される。仮想マシンモニタ１４０では、負荷情報が送信されると、割り込みハンドラが実行される（Ｓ１５）。そして、仮想マシンモニタ１４０は、仮想マシン１２０から取得した負荷情報に基づいて、仮想マシン１２０，１３０へのリソースの割り当てを再計算し、仮想マシン１２０，１３０にリソースを割り当てる（Ｓ１６）。このとき、仮想マシン１３０の負荷は、前回から変化していないものとして取り扱う。その後、仮想マシンモニタ１４０は、負荷情報を収集する周期をタイマ１０３に設定する（Ｓ１７）。
【００５１】
同様に、タイマ１０３は、設定された時間が経過すると、仮想マシンモニタ１４０に対してタイマ割り込みを発行する（Ｓ１８）。仮想マシンモニタ１４０では、タイマ割り込みに対応する割り込みハンドラが実行される（Ｓ１９）。そして、仮想マシンモニタ１４０は、仮想マシン１３０に対して負荷情報要求を送信する（Ｓ２０）。仮想マシン１３０では、負荷情報要求が送信されると、割り込みハンドラが実行される（Ｓ２１）。そして、仮想マシン１３０は、仮想マシン１３０の現在の負荷を確認し、現在の負荷を示す負荷情報を仮想マシンモニタ１４０に送信する（Ｓ２２）。
【００５２】
仮想マシンモニタ１４０では、負荷情報が送信されると、割り込みハンドラが実行される（Ｓ２３）。そして、仮想マシンモニタ１４０は、仮想マシン１３０から取得した負荷情報に基づいて、仮想マシン１２０，１３０へのリソースの割り当てを再計算し、仮想マシン１２０，１３０にリソースを割り当てる（Ｓ２４）。このとき、仮想マシン１２０の負荷は、前回から変化していないものとして取り扱う。その後、仮想マシンモニタ１４０は、負荷情報を収集する周期をタイマ１０３に設定する（Ｓ２５）。
【００５３】
なお、上記では複数の仮想マシンの負荷情報を間隔を空けて取得し、１つの仮想マシンの負荷情報を取得する毎にリソースの割り当てを再計算している。これに対して、１回に複数の仮想マシンから負荷情報を取得し、複数の仮想マシンの負荷情報に基づいてリソースの割り当てを再計算してもよい。その場合、例えば、仮想マシンモニタ１４０は、上記のステップＳ１２に続けて仮想マシン１３０に負荷情報要求を送信する。
【００５４】
しかし、図５に示した第１の方法では、負荷の確認やリソース割り当てなどの本来の処理と比べて割り込みハンドラの処理時間が長くなるおそれがあり、仮想マシン１２０，１３０と仮想マシンモニタ１４０の間の通信のオーバヘッドが大きいという問題がある。例えば、割り込みハンドラによるコンテキストスイッチには、１マイクロ秒〜１０マイクロ秒程度の時間を要することがある。一方、負荷の確認などの本来の処理は、０．１マイクロ秒〜１マイクロ秒程度の時間で済む可能性がある。
【００５５】
このため、仮想マシン１２０，１３０の負荷が変化してからリソースの割り当てが更新されるまでの遅延が大きくなり、仮想マシン１２０，１３０におけるリソースの需要に迅速に対応できない可能性がある。そこで、第２の実施の形態では、仮想マシン１２０，１３０の負荷を監視する方法として、次の第２の方法を採用することにする。
【００５６】
図６は、リソース割り当ての第２のフロー例を示すシーケンス図である。
第２の方法では、仮想マシンモニタ１４０は、後述するように、ＲＡＭ１０４に共有領域を確保しておく。共有領域は、仮想マシン１２０に対応付けた領域と仮想マシン１３０に対応付けた領域とを含む。仮想マシンモニタ１４０は、共有領域を所定周期（例えば、１ナノ秒〜１０ナノ秒程度の周期）でポーリングして監視する（Ｓ３０）。例えば、仮想マシンモニタ１４０は、１回のポーリング処理で、共有領域内の複数の領域を順にアクセスし、少なくとも１つの領域にプロセス情報が記憶されていたか判断する。少なくとも１つの領域でプロセス情報が検出されるまで、周期的にポーリングが行われる。
【００５７】
共有領域のポーリングは、例えば、仮想マシンモニタ１４０がポーリング用のスレッドを起動し、他のスレッドと並行して実行することで実現できる。ポーリング用のスレッドは、例えば、共有領域からの読み出しを行い、プロセス情報が検出されなければ一定時間スリープして、再び共有領域からの読み出しを行うことを繰り返す。このような繰り返しはループを含むプログラムとして実装でき、タイマ割り込みを使用しなくてもよい。
【００５８】
仮想マシン１２０では、オペレーティングシステム１２２がプロセスのスケジューリングを行う（Ｓ３１）。スケジューリングの契機は、スケジューリングアルゴリズムに依存する。例えば、オペレーティングシステム１２２は、実行中のプロセスが終了したとき、または、実行中のプロセスがプリエンプションによって中断したとき、スケジューリングを行う。スケジューリングによって、プロセスの待ち行列が更新される。仮想マシン１２０は、更新された待ち行列を参照してプロセス情報を生成し、共有領域内の仮想マシン１２０に対応付けられた領域にプロセス情報を書き込む（Ｓ３２）。プロセス情報は、実行待ちのプロセス数および推定最大待ち時間の少なくとも一方を含む。
【００５９】
仮想マシンモニタ１４０は、共有領域内の仮想マシン１２０に対応付けた領域からプロセス情報が検出されると、プロセス情報を当該領域からＲＡＭ１０４の他の領域に移して当該領域を空にする。そして、仮想マシンモニタ１４０は、仮想マシン１２０のプロセス情報に基づいて、仮想マシン１２０，１３０にリソースを割り当てる（Ｓ３３）。このとき、仮想マシン１３０の実行待ち状況は、前回から変化していないものとして取り扱う。例えば、仮想マシンモニタ１４０は、仮想マシン１２０の実行待ちのプロセス数や推定最大待ち時間が増加した場合、仮想マシン１２０に割り当てるＣＰＵリソースを増やす。
【００６０】
仮想マシン１３０では、オペレーティングシステム１３２がプロセスのスケジューリングを行う（Ｓ３４）。例えば、オペレーティングシステム１３２は、仮想マシン１３０において実行中のプロセスが終了したとき、または、実行中のプロセスがプリエンプションによって中断したとき、スケジューリングを行う。仮想マシン１３０は、仮想マシン１３０の待ち行列を参照してプロセス情報を生成し、共有領域内の仮想マシン１３０に対応付けられた領域にプロセス情報を書き込む（Ｓ３５）。プロセス情報は、仮想マシン１３０の実行待ちのプロセス数および推定最大待ち時間の少なくとも一方を含む。
【００６１】
仮想マシンモニタ１４０は、共有領域内の仮想マシン１３０に対応付けた領域からプロセス情報が検出されると、プロセス情報を当該領域からＲＡＭ１０４の他の領域に移して当該領域を空にする。そして、仮想マシンモニタ１４０は、仮想マシン１３０のプロセス情報に基づいて、仮想マシン１２０，１３０にリソースを割り当てる（Ｓ３６）。このとき、仮想マシン１２０の実行待ち状況は、前回から変化していないものとして取り扱う。
【００６２】
その後、仮想マシン１２０では、オペレーティングシステム１２２がプロセスのスケジューリングを行う（Ｓ３７）。仮想マシン１２０は、待ち行列を参照してプロセス情報を生成し、共有領域内の仮想マシン１２０に対応付けられた領域にプロセス情報を書き込む（Ｓ３８）。仮想マシンモニタ１４０は、共有領域内の仮想マシン１２０に対応付けた領域からプロセス情報が検出されると、プロセス情報を当該領域からＲＡＭ１０４の他の領域に移して当該領域を空にする。仮想マシンモニタ１４０は、仮想マシン１２０のプロセス情報に基づいて、仮想マシン１２０，１３０にリソースを割り当てる（Ｓ３９）。
【００６３】
なお、仮想マシンモニタ１４０が共有領域をポーリングする周期は、仮想マシン１２０，１３０それぞれがスケジューリングを行う頻度に比べて十分に短いものとする。この場合、仮想マシンモニタ１４０は１回のポーリングでは高々１つの仮想マシンからのプロセス情報を検出するという仮定をおくことができ、１回のポーリングで２以上の仮想マシンからのプロセス情報を検出することは想定しなくてもよい。
【００６４】
図７は、プロセス情報の通知方法の例を示す図である。
上記の通り、仮想マシンモニタ１４０は、ＲＡＭ１０４に共有領域１５０を確保する。共有領域１５０は、例えば、仮想マシンモニタ１４０が起動して仮想化が開始されるときに確保される。共有領域１５０は、仮想マシン１２０に対応する領域１５１と、仮想マシン１３０に対応する領域１５２とを含む。仮想マシンモニタ１４０は、仮想マシン１２０に領域１５１のアドレスを通知する。領域１５１のアドレスは、例えば、仮想マシン１２０が起動したときに仮想マシン１２０に通知される。また、仮想マシンモニタ１４０は、仮想マシン１３０に領域１５２のアドレスを通知する。領域１５２のアドレスは、例えば、仮想マシン１３０が起動したときに仮想マシン１３０に通知される。
【００６５】
仮想マシン１２０は、プロセスのスケジューリングを行う毎にプロセス情報１５３を生成し、仮想マシンモニタ１４０から指定された領域１５１にプロセス情報１５３を書き込む。プロセス情報１５３は、例えば、実行待ちのプロセス数と推定最大待ち時間を含む。同様に、仮想マシン１３０は、プロセスのスケジューリングを行う毎にプロセス情報を生成し、仮想マシンモニタ１４０から指定された領域１５２にプロセス情報を書き込む。仮想マシンモニタ１４０は、領域１５１，１５２を所定周期でポーリングする。
【００６６】
領域１５１からプロセス情報１５３が読み出されると、仮想マシンモニタ１４０は、プロセス情報１５３を生成した仮想マシンが、領域１５１に対応付けられた仮想マシン１２０であると判断する。そして、仮想マシンモニタ１４０は、仮想マシン１２０の識別情報とプロセス情報１５３とを対応付けて、共有領域１５０とは異なるＲＡＭ１０４の領域に保存し、仮想マシン１２０，１３０に割り当てるリソースを再計算する。なお、プロセス情報１５３は、第１の実施の形態のプロセス情報１６の一例である。
【００６７】
同様に、領域１５２からプロセス情報が読み出されると、仮想マシンモニタ１４０は、そのプロセス情報を生成した仮想マシンが、領域１５２に対応付けられた仮想マシン１３０であると判断する。そして、仮想マシンモニタ１４０は、仮想マシン１３０の識別情報と読み出したプロセス情報とを対応付けて、共有領域１５０とは異なるＲＡＭ１０４の領域に保存し、仮想マシン１２０，１３０に割り当てるリソースを再計算する。
【００６８】
次に、情報処理装置１００が有する動的なリソース割り当ての機能について説明する。
図８は、情報処理装置の第１の機能例を示すブロック図である。
仮想マシン１２０は、上記の通り、オペレーティングシステム１２２を有する。オペレーティングシステム１２２は、待ち行列記憶部１２３、パラメータ記憶部１２４およびスケジューラ１２５を有する。待ち行列記憶部１２３およびパラメータ記憶部１２４は、例えば、ＲＡＭ１０４に確保された記憶領域として実現することができる。スケジューラ１２５は、例えば、コア１０１ａなどのコアが実行するプログラムモジュールとして実現することができる。仮想マシン１３０のオペレーティングシステム１３２も、オペレーティングシステム１２２と同様のモジュール構成によって実現できる。
【００６９】
待ち行列記憶部１２３は、オペレーティングシステム１２２上で起動されたプロセスのうち実行待ちのプロセスを示す情報（例えば、プロセスＩＤ）を記憶する。実行待ちのプロセスは、例えば、実行の優先順位が高い順に並べられている。「優先順位」の意味は、スケジューリングアルゴリズムに依存する。例えば、ＦＩＦＯ方式の場合、先に起動されたプロセスほど優先順位が高く、待ち行列の前方に格納されることになる。
【００７０】
パラメータ記憶部１２４は、最大待ち時間の推定に用いるパラメータの値を記憶する。後述するように、パラメータには、各プロセスが待ち行列の中を１つ進む（優先順位が１つ繰り上がる）のに要する時間の平均が含まれる。パラメータの値は、ユーザによって定義され、または、予めユーザによって測定されて、パラメータ記憶部１２４に記憶されていてもよい。また、パラメータの値は、スケジューラ１２５がプロセスの実行状況を監視することで、動的・継続的に算出して更新するようにしてもよい。
【００７１】
スケジューラ１２５は、オペレーティングシステム１２２上で起動されたプロセスのスケジューリングを行い、待ち行列記憶部１２３に記憶された待ち行列の情報を更新する。例えば、スケジューラ１２５は、実行中のプロセスが中断または終了すると、待ち行列の先頭から優先順位が最も高いプロセスを抽出する。また、実行していたプロセスが終了せずに中断した場合、スケジューラ１２５は、中断したプロセスを待ち行列の末尾に戻す。そして、スケジューラ１２５は、コア１０１ａなどのコアにコンテキストスイッチを発生させ、待ち行列から抽出したプロセスの実行を開始させる。
【００７２】
また、スケジューラ１２５は、スケジューリングが行われる毎にプロセス情報１５３を生成する。このとき、スケジューラ１２５は、待ち行列記憶部１２３に記憶された更新後の待ち行列の情報を参照して、実行待ちのプロセス数をカウントする。また、スケジューラ１２５は、更新後の待ち行列の情報と、パラメータ記憶部１２４に記憶されたパラメータの値を参照して、待ち行列の末尾のプロセスが開始されるまでの待ち時間（推定最大待ち時間）を推定する。そして、スケジューラ１２５は、プロセス数と推定最大待ち時間とを含むプロセス情報１５３を生成し、共有領域１５０の中の仮想マシンモニタ１４０から予め指定された領域１５１にプロセス情報１５３を書き込む。ただし、プロセス情報１５３は、プロセス数と推定最大待ち時間の何れか一方のみ含んでいてもよい。
【００７３】
仮想マシンモニタ１４０は、収集情報記憶部１４１およびリソース割り当て部１４２を有する。収集情報記憶部１４１は、例えば、ＲＡＭ１０４に確保された記憶領域として実現することができる。リソース割り当て部１４２は、例えば、コア１０２ａが実行するプログラムモジュールとして実現することができる。
【００７４】
収集情報記憶部１４１は、複数の仮想マシンそれぞれから取得されたプロセス情報を記憶する。収集情報記憶部１４１には、仮想マシン毎に最新のプロセス情報（当該仮想マシンから最後に取得されたプロセス情報）が記憶されていればよい。
【００７５】
リソース割り当て部１４２は、共有領域１５０を周期的にポーリングする。リソース割り当て部１４２は、１回のポーリングで、共有領域１５０に含まれる全ての仮想マシン分の領域にアクセスしてデータを読み出す。リソース割り当て部１４２は、何れかの領域のデータからプロセス情報が検出されると、その領域に基づいてプロセス情報を生成した仮想マシンを判定する。そして、リソース割り当て部１４２は、読み出したプロセス情報を、判定した仮想マシンの識別情報と対応付けて収集情報記憶部１４１に格納する。
【００７６】
リソース割り当て部１４２は、１つの仮想マシンのプロセス情報が更新される毎に、収集情報記憶部１４１に記憶された全ての仮想マシンのプロセス情報を参照して、各仮想マシンに割り当てるリソースを決定する。例えば、リソース割り当て部１４２は、各仮想マシンのプロセス数および推定最大待ち時間の少なくとも一方に基づいて、仮想マシン１２０の相対的な負荷の大きさを判定する。リソース割り当て部１４２は、相対的な負荷の大きさに基づいて、仮想マシン１２０に割り当てるリソースの量を決定する。割り当てリソース量が増加する場合、リソース割り当て部１４２は、仮想マシン１２０に追加のリソースを割り当てる。割り当てリソース量が減少する場合、リソース割り当て部１４２は、仮想マシン１２０に割り当てていたリソースの一部を解放する。
【００７７】
共有領域１５０は、仮想マシンモニタ１４０によって確保されたＲＡＭ１０４の記憶領域である。共有領域１５０は、複数の仮想マシンに対応する複数の領域を含む。仮想マシンモニタ１４０は、領域のアドレスと仮想マシンとの対応関係の情報を保持しておく。共有領域１５０は、仮想マシンモニタ１４０によって管理され、仮想マシンモニタ１４０からアクセスできる。ただし、共有領域１５０は、仮想マシン１２０，１３０からもアクセスすることができる。仮想マシン１２０，１３０がアクセスできる領域のアドレスは、仮想マシンモニタ１４０から仮想マシン１２０，１３０に通知される。
【００７８】
図９は、時間推定テーブルの例を示す図である。
時間推定テーブル１２６は、パラメータ記憶部１２４に記憶されている。時間推定テーブル１２６は、プロセスＩＤおよび平均時間の項目を有する。プロセスＩＤは、プロセスに付与された識別情報である。同じプログラムから起動されるプロセスには、起動タイミングに依存せずに同じプロセスＩＤが付与される。よって、あるプロセスと、過去に起動された同様の振る舞いをするプロセスとの間の実質的な同一性を、プロセスＩＤから判断することができる。平均時間の項目には、プロセスＩＤの異なるプロセス毎に、当該プロセスが待ち行列を１段階進むのに要する時間の平均値が登録される。
【００７９】
プロセス情報１５３に含まれる推定最大待ち時間は、待ち行列の長さ（実行待ちのプロセス数）と、待ち行列の末尾のプロセスに対応する平均時間とから算出できる。例えば、スケジューラ１２５は、待ち行列の長さと待ち行列の末尾のプロセスに対応する平均時間との積を、推定最大待ち時間として算出する。一例として、仮想マシン１２０の待ち行列の長さが「３」であり、待ち行列の末尾のプロセスのプロセスＩＤが「Ｐ０２」であるとする。すると、図９の例の場合、推定最大待ち時間はＴ２×３マイクロ秒になる。
【００８０】
図１０は、プロセス情報テーブルの例を示す図である。
プロセス情報テーブル１４３は、収集情報記憶部１４１に記憶されている。プロセス情報テーブル１４３は、仮想マシンＩＤ、プロセス数および推定最大待ち時間の項目を有する。仮想マシンＩＤは、仮想マシン１２０，１３０を含む複数の仮想マシンそれぞれに付与された識別情報である。ある仮想マシンの仮想マシンＩＤは、例えば、その仮想マシンが最初に生成されたときに決定される。プロセス数の項目には、各仮想マシンの実行待ちのプロセスの数が登録される。推定最大待ち時間の項目には、各仮想マシンについて待ち行列の末尾にあるプロセスが開始されるまでの待ち時間の推定値が登録される。
【００８１】
プロセス情報テーブル１４３には、情報処理装置１００で起動される仮想マシン１２０，１３０それぞれについて、仮想マシンＩＤとプロセス数と推定最大待ち時間が登録される。例えば、仮想マシン１２０の仮想マシンＩＤが「ＶＭ００」、仮想マシン１２０の待ち行列の長さが「Ｃ０」、その待ち行列の末尾にあるプロセスのプロセスＩＤが「Ｐ０２」であるとする。すると、仮想マシン１２０について、「ＶＭ００」と「Ｃ０」と「Ｔ２×Ｃ０」とが対応付けられて、プロセス情報テーブル１４３に登録される。
【００８２】
また、仮想マシン１３０の仮想マシンＩＤが「ＶＭ０１」、仮想マシン１３０の待ち行列の長さが「Ｃ１」、その待ち行列の末尾にあるプロセスのプロセスＩＤが「Ｐ０１」であるとする。すると、仮想マシン１３０について、「ＶＭ０１」と「Ｃ１」と「Ｔ１×Ｃ１」とが対応付けられて、プロセス情報テーブル１４３に登録される。なお、プロセス数と推定最大待ち時間については、何れか一方のみ登録されていてもよい。
【００８３】
次に、情報処理装置１００が実行する処理の手順について説明する。
図１１は、スケジューラの手順例を示すフローチャートである。
ここでは、仮想マシン１２０のスケジューラ１２５の処理手順を説明する。他の仮想マシンのスケジューラも、スケジューラ１２５と同様の処理を行う。
【００８４】
（Ｓ４０）スケジューラ１２５は、仮想マシンモニタ１４０から共有領域１５０の通知を受け付ける。共有領域１５０の通知には、共有領域１５０に含まれる複数の領域のうち、仮想マシン１２０に対応付けられた領域１５１のアドレスが含まれる。
【００８５】
（Ｓ４１）スケジューラ１２５は、オペレーティングシステム１２２を終了させる終了イベントが発生したか判断する。終了イベントとしては、例えば、ユーザがオペレーティングシステム１２２に対してシャットダウン命令を入力したことなどが挙げられる。終了イベントが発生した場合はスケジューラ１２５の処理が終了し、終了イベントが発生していない場合はステップＳ４２に処理が進む。
【００８６】
（Ｓ４２）スケジューラ１２５は、実行中のプロセスが終了したか判断する。また、スケジューラ１２５は、実行中のプロセスがプリエンプションによって中断したか判断する。プロセスの中断または終了が発生した場合はステップＳ４３に処理が進み、中断や終了が発生していない場合はステップＳ４１に処理が進む。
【００８７】
（Ｓ４３）スケジューラ１２５は、実行されていたプロセスが中断した場合には、中断したプロセスを待ち行列の末尾に追加する。そして、スケジューラ１２５は、待ち行列に含まれる実行待ちのプロセスをスケジューリングする。例えば、スケジューラ１２５は、待ち行列の先頭からプロセスを１つ抽出し、次に実行するプロセスに決定する。スケジューラ１２５は、待ち行列記憶部１２３に記憶された待ち行列の情報を更新する。
【００８８】
（Ｓ４４）スケジューラ１２５は、待ち行列記憶部１２３に記憶された待ち行列の情報を参照して、待ち行列の長さ、すなわち、実行待ちのプロセス数を算出する。
（Ｓ４５）スケジューラ１２５は、待ち行列記憶部１２３に記憶された待ち行列の情報と、パラメータ記憶部１２４に記憶された時間推定テーブル１２６とを参照して、推定最大待ち時間を算出する。例えば、スケジューラ１２５は、時間推定テーブル１２６から待ち行列の末尾のプロセスに対応する平均時間を検索し、検索された平均時間とステップＳ４４のプロセス数との積を推定最大待ち時間として算出する。
【００８９】
（Ｓ４６）スケジューラ１２５は、ステップＳ４４で算出したプロセス数とステップＳ４５で算出した推定最大待ち時間とを含むプロセス情報１５３を生成する。そして、スケジューラ１２５は、ステップＳ４０で仮想マシンモニタ１４０から通知された共有領域１５０内の領域１５１に、生成したプロセス情報１５３を書き込む。
【００９０】
（Ｓ４７）スケジューラ１２５は、ステップＳ４３で決定したプロセスを開始させる。すなわち、スケジューラ１２５は、コア１０１ａなどのコアにコンテキストスイッチを発生させ、抽出したプロセスを実行させる。そして、ステップＳ４１に処理が進む。
【００９１】
図１２は、リソース割り当て部の手順例を示すフローチャートである。
（Ｓ５０）リソース割り当て部１４２は、ＲＡＭ１０４に共有領域１５０を確保する。また、リソース割り当て部１４２は、情報処理装置１００で起動される仮想マシン１２０，１３０に対して、共有領域１５０の中の領域１５１，１５２を対応付ける。
【００９２】
（Ｓ５１）リソース割り当て部１４２は、仮想マシン１２０が起動すると、仮想マシン１２０に対して共有領域１５０の通知を発信する。仮想マシン１２０への通知には領域１５１のアドレスが含まれる。また、リソース割り当て部１４２は、仮想マシン１３０が起動すると、仮想マシン１３０に対して共有領域１５０の通知を発信する。仮想マシン１３０への通知には領域１５２のアドレスが含まれる。
【００９３】
（Ｓ５２）リソース割り当て部１４２は、仮想マシンモニタ１４０を終了させる終了イベントが発生したか判断する。終了イベントとしては、例えば、管理者が情報処理装置１００の電源をＯＦＦにする停止命令を入力したことや、管理者が仮想マシンモニタ１４０に対して仮想環境を終了させるためにシャットダウン命令を入力したことなどが挙げられる。終了イベントが発生した場合はリソース割り当て部１４２の処理が終了し、終了イベントが発生していない場合はステップＳ５３に処理が進む。
【００９４】
（Ｓ５３）リソース割り当て部１４２は、所定時間待つ。所定時間は、ポーリングの周期を意味し、例えば、予め１ナノ秒〜１０ナノ秒程度に設定されている。
（Ｓ５４）リソース割り当て部１４２は、共有領域１５０をポーリングする。ポーリングでは、リソース割り当て部１４２は、仮想マシン１２０に対応する領域１５１および仮想マシン１３０に対応する領域１５２を含む複数の領域を順にアクセスする。
【００９５】
（Ｓ５５）リソース割り当て部１４２は、共有領域１５０内の何れかの領域においてプロセス情報が検出されたか判断する。プロセス情報が検出された場合はステップＳ５６に処理が進み、プロセス情報が検出されなかった場合はステップＳ５２に処理が進む。
【００９６】
（Ｓ５６）リソース割り当て部１４２は、プロセス情報を検出した領域から、当該プロセス情報を書き込んだ仮想マシンを特定する。例えば、リソース割り当て部１４２は、領域１５１でプロセス情報を検出した場合、当該プロセス情報は仮想マシン１２０のものと判断する。また、リソース割り当て部１４２は、領域１５２でプロセス情報を検出した場合、当該プロセス情報は仮想マシン１３０のものと判断する。
【００９７】
（Ｓ５７）リソース割り当て部１４２は、ステップＳ５５で検出したプロセス情報に基づいて、収集情報記憶部１４１に記憶されたプロセス情報テーブル１４３を更新する。すなわち、リソース割り当て部１４２は、ステップＳ５６で特定した仮想マシンの仮想マシンＩＤと対応付けて、検出したプロセス情報に含まれるプロセス数および推定最大待ち時間をプロセス情報テーブル１４３に登録する。プロセス数と推定最大待ち時間は、仮想マシン毎に最新のものを保持すればよいため上書き保存される。
【００９８】
（Ｓ５８）リソース割り当て部１４２は、プロセス情報テーブル１４３に登録された仮想マシン１２０，１３０のプロセス数および推定最大待ち時間に基づいて、仮想マシン１２０，１３０へのリソース配分を決定する。ただし、リソース割り当て部１４２は、プロセス数と推定最大待ち時間の一方のみを参照するようにしてもよい。例えば、リソース割り当て部１４２は、プロセス数や推定最大待ち時間から、仮想マシン１２０，１３０それぞれの相対的な負荷の大きさを判定する。リソース割り当て部１４２は、相対的に負荷が大きい仮想マシンには、ＣＰＵリソースとして多くのコアを割り当てるようにする。
【００９９】
（Ｓ５９）リソース割り当て部１４２は、ステップＳ５８で決定したリソース配分に従って、仮想マシン１２０，１３０にリソースを割り当てる。割り当てるリソースには、ＣＰＵリソースが含まれる。また、割り当てるリソースに、ＲＡＭリソースなどの他のリソースが含まれてもよい。そして、ステップＳ５２に処理が進む。
【０１００】
第２の実施の形態の情報処理装置１００によれば、仮想マシン１２０のオペレーティングシステム１２２でスケジューリングが行われる毎に、実行待ちのプロセス数や推定最大待ち時間などを示すプロセス情報が、仮想マシン１２０によって共有領域１５０に書き込まれる。また、仮想マシン１３０のオペレーティングシステム１３２でスケジューリングが行われる毎に、実行待ちのプロセス数や推定最大待ち時間などを示すプロセス情報が、仮想マシン１３０によって共有領域１５０に書き込まれる。一方、共有領域１５０は仮想マシンモニタ１４０によってポーリングされており、共有領域１５０からプロセス情報が検出されると、仮想マシン１２０，１３０のリソース割り当てが変更される。
【０１０１】
これにより、「割り込み」を用いて仮想マシン１２０，１３０と仮想マシンモニタ１４０とが通信する場合と比べて、割り込みハンドラのオーバヘッドを削減できる。また、仮想マシン１２０，１３０から仮想マシンモニタ１４０に対してプロセス情報がプッシュされるため、仮想マシンモニタ１４０からプロセス情報を要求する場合と比べて、要求に相当する往路の通信を削減できる。よって、仮想マシン１２０，１３０と仮想マシンモニタ１４０との間の通信が効率化され、仮想マシン１２０，１３０の負荷の変化に応じて迅速に仮想マシン１２０，１３０のリソース割り当てを変更することが可能となる。
【０１０２】
また、第２の実施の形態では、プロセス情報はスケジューリング毎に共有領域１５０に書き込まれ、共有領域１５０はスケジューリングの間隔と比べて十分に短い周期でポーリングされる。よって、仮想マシン１２０，１３０の負荷が変化してからリソース割り当てが変更されるまでの遅延を十分に短縮することができる。
【０１０３】
［第３の実施の形態］
次に、第３の実施の形態を説明する。第２の実施の形態との違いを中心に説明し、第２の実施の形態と同様の事項については説明を省略することがある。第２の実施の形態では、オペレーティングシステム１２２の中のスケジューラ１２５の機能を拡張することで、スケジューリング毎に共有領域１５０にプロセス情報１５３が書き込まれるようにした。これに対し、第３の実施の形態では、オペレーティングシステム自体を改変せずに、スケジューリング毎に共有領域１５０にプロセス情報１５３が書き込まれるようにする。
【０１０４】
図１３は、情報処理装置の第２の機能例を示すブロック図である。
第３の実施の形態の情報処理装置１００ａは、仮想マシンモニタ１４０、共有領域１５０、および、仮想マシン１６０を含む複数の仮想マシンを有する。仮想マシン１６０は、オペレーティングシステム１６１および拡張スケジューリング部１６２を有する。他の仮想マシンも、仮想マシン１６０と同様のモジュール構成によって実現できる。
【０１０５】
オペレーティングシステム１６１は、プロセス情報１５３を出力する機能をもたない通常のオペレーティングシステムである。拡張スケジューリング部１６２は、オペレーティングシステム１６１に外付けされるソフトウェアモジュールである。拡張スケジューリング部１６２は、オペレーティングシステム１６１からは１つの大きなプロセスに見える。拡張スケジューリング部１６２上では、アプリケーションプログラムからスレッドが起動される。拡張スケジューリング部１６２は、これらのスレッドをスケジューリングする。
【０１０６】
すなわち、第２の実施の形態のプロセス１２１ａ，１２１ｂ，１２１ｃは、拡張スケジューリング部１６２によってスケジューリングされるスレッドに対応する。オペレーティングシステム１６１内のスケジューラが拡張スケジューリング部１６２の実行を制御し、拡張スケジューリング部１６２が実際にアプリケーションプログラムの実行を制御する。これにより、オペレーティングシステム１６１内のスケジューラを改変せずに、オペレーティングシステム１６１とは異なるスケジューリング機能を実装することができる。
【０１０７】
拡張スケジューリング部１６２は、待ち行列記憶部１６３、パラメータ記憶部１６４およびスケジューラ１６５を有する。待ち行列記憶部１６３とパラメータ記憶部１６４は、第２の実施の形態の待ち行列記憶部１２３とパラメータ記憶部１２４に相当する。
【０１０８】
スケジューラ１６５は、オペレーティングシステム１６１上でアプリケーションプログラムからプロセスが起動される代わりに、拡張スケジューリング部１６２上でアプリケーションプログラムからスレッドを起動する。スケジューラ１６５は、それらスレッドのスケジューリングを行い、待ち行列記憶部１６３に記憶された待ち行列の情報を更新する。例えば、スケジューラ１６５は、コア１０１ａなどのコアがもつレジスタに格納される命令アドレスを書き換えることで、擬似的にコンテキストスイッチを発生させる。
【０１０９】
また、スケジューラ１６５は、スレッドのスケジューリングが行われる毎にプロセス情報１５３を生成する。このとき、スケジューラ１６５は、待ち行列記憶部１６３に記憶された更新後の待ち行列の情報を参照して、実行待ちのプロセス数をカウントする。また、スケジューラ１６５は、更新後の待ち行列の情報と、パラメータ記憶部１６４に記憶されたパラメータの値を参照して、待ち行列の末尾のスレッドが開始されるまでの待ち時間（推定最大待ち時間）を推定する。そして、スケジューラ１６５は、プロセス数と推定最大待ち時間とを含むプロセス情報１５３を生成し、共有領域１５０の中の仮想マシンモニタ１４０から予め指定された領域１５１にプロセス情報１５３を書き込む。
【０１１０】
第３の実施の形態の情報処理装置１００ａによれば、第２の実施の形態と同様の効果が得られる。更に、第３の実施の形態では、オペレーティングシステム１６１内のスケジューラを改変しなくても、スケジューリング毎にプロセス情報１５３が共有領域１５０に書き込まれるようにすることができる。よって、実装の負担が軽減される。
【０１１１】
［第４の実施の形態］
次に、第４の実施の形態を説明する。第２の実施の形態との違いを中心に説明し、第２の実施の形態と同様の事項については説明を省略することがある。第４の実施の形態では、第３の実施の形態と同様に、オペレーティングシステム自体を改変せずに、スケジューリング毎に共有領域１５０にプロセス情報１５３が書き込まれるようにする。
【０１１２】
図１４は、情報処理装置の第３の機能例を示すブロック図である。
第４の実施の形態の情報処理装置１００ｂは、仮想マシンモニタ１４０、共有領域１５０、および、仮想マシン１７０を含む複数の仮想マシンを有する。仮想マシン１７０は、オペレーティングシステム１７１およびデバイスドライバ１７４を有する。他の仮想マシンも、仮想マシン１７０と同様のモジュール構成によって実現できる。
【０１１３】
オペレーティングシステム１７１は、プロセス情報１５３を出力する機能をもたない通常のオペレーティングシステムである。オペレーティングシステム１７１は、待ち行列記憶部１７２およびスケジューラ１７３を有する。待ち行列記憶部１７２は、第２の実施の形態の待ち行列記憶部１２３に相当する。スケジューラ１７３は、オペレーティングシステム１７１上で起動されたプロセスのスケジューリングを行い、待ち行列記憶部１７２に記憶された待ち行列の情報を更新する。スケジューラ１７３は、コア１０１ａなどのコアにコンテキストスイッチを発生させ、実行されるプロセスを切り替える。
【０１１４】
デバイスドライバ１７４は、ＣＰＵ１０１，１０２にアクセスすることができる。デバイスドライバ１７４は、ＣＰＵ１０１，１０２用のドライバプログラムに基づいて、オペレーティングシステム１７１上で起動される。デバイスドライバ１７４は、パラメータ記憶部１７５およびプロセス監視部１７６を有する。パラメータ記憶部１７５は、第２の実施の形態のパラメータ記憶部１２４に相当する。プロセス監視部１７６は、例えば、コア１０１ａなどのコアが実行するプログラムモジュールとして実装できる。
【０１１５】
プロセス監視部１７６は、継続的に、仮想マシン１７０に割り当てられたコアから所定のレジスタの値を読み出す。読み出す値は、そのコアで発生したコンテキストスイッチの回数を示すものであり、ＰＭＣ（Performance Monitoring Counter）と言うことがある。ＰＭＣの値は、データ処理に用いる汎用レジスタとは異なる特殊レジスタに格納されている。コアは、コンテキストスイッチが発生する毎にＰＭＣをカウントアップする。
【０１１６】
プロセス監視部１７６は、コアから読み出したＰＭＣの値が変化したか判断する。ＰＭＣの値が変化したことは、当該コアでコンテキストスイッチが発生したことを示すため、スケジューラ１７３でプロセスのスケジューリングが行われたことを意味する。よって、プロセス監視部１７６は、ＰＭＣの値が変化する毎に、プロセス情報１５３を生成して共有領域１５０に書き込む。これにより、スケジューラ１７３を改変しなくても、スケジューリング毎にプロセス情報１５３を共有領域１５０に書き込むことができる。
【０１１７】
ＰＭＣの値が変化すると、プロセス監視部１７６は、オペレーティングシステム１７１から、待ち行列記憶部１７２に記憶された待ち行列の情報を取得する。プロセス監視部１７６は、取得した待ち行列の情報に基づいて、実行待ちのプロセス数をカウントする。また、プロセス監視部１７６は、取得した待ち行列の情報とパラメータ記憶部１７５に記憶されたパラメータの値とに基づいて、推定最大待ち時間を算出する。そして、プロセス監視部１７６は、プロセス数と推定最大待ち時間とを含むプロセス情報１５３を生成する。
【０１１８】
図１５は、プロセス監視部の手順例を示すフローチャートである。
（Ｓ６０）プロセス監視部１７６は、仮想マシンモニタ１４０から共有領域１５０の通知を受け付ける。共有領域１５０の通知には、共有領域１５０に含まれる複数の領域のうち、仮想マシン１７０に対応付けられた領域１５１のアドレスが含まれる。
【０１１９】
（Ｓ６１）プロセス監視部１７６は、デバイスドライバ１７４を終了させる終了イベントが発生したか判断する。終了イベントとしては、例えば、ユーザがオペレーティングシステム１７１に対してシャットダウン命令を入力したことなどが挙げられる。終了イベントが発生した場合はプロセス監視部１７６の処理が終了し、終了イベントが発生していない場合はステップＳ６２に処理が進む。
【０１２０】
（Ｓ６２）プロセス監視部１７６は、仮想マシン１７０に割り当てられたコアから、コンテキストスイッチの発生回数をカウントするカウンタの値を読み出す。
（Ｓ６３）プロセス監視部１７６は、ステップＳ６２で読み出したカウンタの値が、前回読み出したときから変化したか判断する。カウンタの値が変化した場合はステップＳ６４に処理が進み、変化していない場合はステップＳ６１に処理が進む。
【０１２１】
（Ｓ６４）プロセス監視部１７６は、オペレーティングシステム１７１から、待ち行列記憶部１７２に記憶されている待ち行列の情報を取得する。
（Ｓ６５）プロセス監視部１７６は、ステップＳ６４で取得した待ち行列の情報に基づいて、待ち行列の長さ、すなわち、実行待ちのプロセス数を算出する。
【０１２２】
（Ｓ６６）プロセス監視部１７６は、ステップＳ６４で取得した待ち行列の情報と、パラメータ記憶部１７５に記憶された時間推定テーブル１２６とに基づいて、推定最大待ち時間を算出する。例えば、プロセス監視部１７６は、時間推定テーブル１２６から待ち行列の末尾のプロセスに対応する平均時間を検索し、検索された平均時間とステップＳ６５のプロセス数との積を推定最大待ち時間として算出する。
【０１２３】
（Ｓ６７）プロセス監視部１７６は、ステップＳ６５で算出したプロセス数とステップＳ６６で算出した推定最大待ち時間とを含むプロセス情報１５３を生成する。そして、プロセス監視部１７６は、ステップＳ６０で仮想マシンモニタ１４０から通知された共有領域１５０内の領域１５１に、生成したプロセス情報１５３を書き込む。その後、プロセス監視部１７６の処理がステップＳ６１に進む。
【０１２４】
第４の実施の形態の情報処理装置１００ｂによれば、第２の実施の形態と同様の効果が得られる。更に、第４の実施の形態では、オペレーティングシステム１７１のスケジューラ１７３を改変しなくても、スケジューリング毎にプロセス情報１５３が共有領域１５０に書き込まれるようにすることができる。また、第３の実施の形態のスケジューラ１６５のようなスケジューリング機能を独自に実装しなくてもよく、オペレーティングシステム１７１がもつスケジューラ１７３を利用できる。よって、実装の負担が軽減される。
【０１２５】
なお、前述のように、第１の実施の形態の情報処理は、情報処理装置１０にプログラムを実行させることで実現できる。第２の実施の形態の情報処理は、情報処理装置１００にプログラムを実行させることで実現できる。第３の実施の形態の情報処理は、情報処理装置１００ａにプログラムを実行させることで実現できる。第４の実施の形態の情報処理は、情報処理装置１００ｂにプログラムを実行させることで実現できる。
【０１２６】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体１１３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からＨＤＤなどの他の記録媒体（例えば、ＨＤＤ１０５）にプログラムをコピーしてから実行してもよい。
【符号の説明】
【０１２７】
１０  情報処理装置
１１  記憶部
１１ａ  記憶領域
１２，１３  演算部
１４  仮想マシン
１５  管理ソフトウェア
１６  プロセス情報
【図１】
0006447217.tif 000002
【図２】
0006447217.tif 000003
【図３】
0006447217.tif 000004
【図４】
0006447217.tif 000005
【図５】
0006447217.tif 000006
【図６】
0006447217.tif 000007
【図７】
0006447217.tif 000008
【図８】
0006447217.tif 000009
【図９】
0006447217.tif 000010
【図１０】
0006447217.tif 000011
【図１１】
0006447217.tif 000012
【図１２】
0006447217.tif 000013
【図１３】
0006447217.tif 000014
【図１４】
0006447217.tif 000015
【図１５】
0006447217.tif 000016