以下、本発明の実施の形態につき図面を参照して説明する。
図1は本発明の一実施形態に係る仮想計算機システム(VMシステム)の構成を示すブロック図である。図1に示す仮想計算機システムは、物理計算機1を用いて実現される。物理計算機(実計算機)1は、仮想計算機の実行環境を提供するハードウェア(HW)10を備えている。HW10は、CPU(実CPU)11、I/O(入出力)装置(実I/O装置)12及びメモリ(実メモリ)13を含む。
物理計算機1のHW10上では、仮想計算機マネージャ(Virtual Machine Manager:VMM)20が動作する。VMM20は、仮想計算機システムの管理を行い、仮想計算機が動作する環境(仮想計算機実行環境)を構築する。更に具体的に述べるならば、VMM20は、物理計算機1のHW10を構成するCPU11、I/O12及びメモリ13のような物理資源(ハードウェアリソース)を制御すると共に当該物理資源の時間的、領域的な配分を管理することにより、複数の仮想計算機、例えば3台の仮想計算機(VM)30-1,30-2,30-3が動作する仮想計算機実行環境を提供する。VM30-1,30-2,30-3は何れも、VMM20が、物理計算機1のCPU11、I/O12及びメモリ13を、時間的、領域的に図示せぬ仮想CPU、仮想I/O及び(VM30-1,30-2,30-3の)メモリとして割り当てることにより構築される。
VM30-1,30-2,30-3上では、それぞれゲストOS31-1(OS#1),31-2(OS#2),31-3(OS#3)が動作する。更に具体的に述べるならば、ゲストOS31-1〜31-3は、それぞれVM30-1〜30-3にロードされて、当該VM30-1〜30-3内の仮想CPUによって実行される。ゲストOS31-1〜31-3には、それぞれゲストOS番号1〜3が割り当てられている。
VMM20は、ゲストOS間通信管理部21、ゲストOS実行管理部22、割り込み管理部23及びゲストOSコンテキスト管理部24を含む。
ゲストOS間通信管理部21は、ゲストOS31-1〜31-3間の通信を管理すると共にその通信のための機能(送信手続き及び受信手続き等の通信手段)を提供するモジュールである。本実施形態においてゲストOS間の通信手段は、送信元(送信側)のゲストOSからのデータパケットを送信先(受信側)のゲストOSの受信バッファにコピーすることによって情報の受け渡しを行うものであるとするが、これに限らない。例えば通信手段が、送信ゲストOSと受信側ゲストOSとで共有されるメモリ空間を介して情報の受け渡しを行うものであっても構わない。また、ゲストOS間の通信手段が複数存在する場合、ゲストOS間通信管理部21が通信手段の種類に応じて複数存在しても構わない。
ゲストOS間通信管理部21は、ゲストOSに対してゲストOS間の通信手段として、ゲストOS間通信インタフェース(ゲストOS間通信IF)を提供する。図1の例では、ゲストOS31-1,31-2に対し、ゲストOS間通信管理部21(VMM20内のゲストOS間通信管理部21)によってそれぞれゲストOS間通信IF210が提供されている状態が示されている。ゲストOS31-1,31-2は、それぞれゲストOS間通信IF210を使用して、他のゲストOSへのデータ送信、或いは他のゲストOSから受信したデータの取得を、VMM20に対して要求する。ここで、ゲストOS31-3に対してゲストOS間通信IF210が提供されるならば、当該ゲストOS31-3もゲストOS31-1,31-2と同様にデータ送信或いはデータ取得をVMM20に対して要求することができる。
ゲストOS間通信管理部21は、ゲストOS間通信監視部211を含む。ゲストOS間通信監視部211は、ゲストOS間通信管理部21によって送信側のゲストOS31-i(i=1,2,3)及び受信側のゲストOS31-j(j=1,2,3、但しj≠i)にそれぞれ提供されるゲストOS間通信IF210を用いてのゲストOS間通信の状況を監視する。ゲストOS間通信監視部211は、この監視の結果に基づき、受信側のゲストOS31-jにおける後述する受信処理に必要なCPU追加割当時間として用いられるCPU時間(CPU実行時間)を決定する。
ゲストOS実行管理部22はゲストOS31-1〜31-3の実行を管理する。ゲストOS実行管理部22は、ゲストOSスケジューラ221、CPU時間割当テーブル222及びディスパッチャ223を含む。
ゲストOSスケジューラ221は、各ゲストOS31-1〜31-3に対して、いつ、どれだけの期間CPU11を仮想CPUとして割り当てるか、つまり、どれだけのCPU時間(CPU実行時間)を割り当てるかを管理するモジュールである。
CPU時間割当テーブル222は、各ゲストOS31-1〜31-3をディスパッチするためのスケジュール(の情報)を保持するデータテーブルである。更に具体的に述べるならば、CPU時間割当テーブル222は、CPU時間を各ゲストOS31-1〜31-3にいつの時点でどれだけ割り当てるかの予定(スケジュール)を表すデータテーブルである。CPU時間割当テーブル222によって表される(保持される)スケジュール(の情報)は動的に変更可能である。図1では、CPU時間割当テーブル222はVMM20のゲストOS実行管理部22に含まれているが、物理的には例えばメモリ13に格納して用いられる。
図2はCPU時間割当テーブル222の示すスケジュール例を示す。図2に示すスケジュールでは、現在から24ms先の時点までのCPU時間割り当て予定が設定されている。ここでは、24msが2ms毎に12分割されて、CPU時間が3個のゲストOS31-1〜31-3に2ms(のフレーム)単位でラウンドロビンで割り当てられる予定であることが示されている。12分割された各枠内の数字はゲストOS番号を表している。CPU時間割当テーブル222は、ゲストOSスケジューラ221によって更新される。ここではCPU時間割当テーブル222は、実際にゲストOSのコンテキストスイッチ(他のゲストOSへのディスパッチ)が発生したタイミングで更新される。
ディスパッチャ223は、現在CPU11を使って実行しているゲストOSをCPU時間割当テーブル221に基づいて他のゲストOSに切り替えるためのモジュールである。即ちディスパッチャ223は、CPU時間割当テーブル222の示すCPU時間割り当ての順番(図2の例では左端から右端に向かう順番)に従ってゲストOSのディスパッチを行う。なお、図2に示されるCPU時間割当テーブル222のようなフレーム単位のスケジュール表に基づくスケジューリングに代えて、プライオリティキューを使ったスケジューリングを適用することも可能である。
割り込み管理部23は、ゲストOSへの割り込みを管理する。ゲストOSへの割り込みの1つに、受信割り込みがある。受信割り込みは、送信側ゲストOS31-iから受信側ゲストOS31-jへの通信(ゲストOS間通信)に伴う送信データの受信を当該ゲストOS31-jに通知するための割り込みである。
ゲストOSコンテキスト管理部24は、ゲストOS31-1〜31-3を実行する際に必要な情報の集合であるゲストOSコンテキスト241-1〜241-3を生成する。図1では、ゲストOSコンテキスト241-1〜241-3はVMM20のゲストOSコンテキスト管理部24に含まれているが、物理的には例えばメモリ13によって提供されるメモリ領域に格納して用いられる。
図3はゲストOSコンテキスト241-i(i=1,2,3)のデータ構造例を示す。ゲストOSコンテキスト241-iは、ゲストOS固有データ242、割り込み要因レジスタ243及びCPU追加割当時間情報244を含む。
ゲストOS固有データ242は、ゲストOS切り替え時のCPUレジスタ状態を含む情報である。
割り込み要因レジスタ243は、ゲストOS31-iに割り込みが発生した場合に、その割り込みの要因を識別するためのビットの群から構成される割り込み要因保持管理手段である。割り込み要因レジスタ243はゲストOS通信受信ビットを含む。ゲストOS通信受信ビットは、ゲストOS31-iへの割り込みが、ゲストOS間通信による送信データの受信を当該ゲストOS31-iに通知するための割り込み、つまり受信割り込みであることを示す特定ビットである。このゲストOS通信受信ビットは、ゲストOS間通信による送信データがゲストOS31-iで受信された際(本実施形態では、ゲストOS31-iの受信バッファにコピーされた際)にONされる。割り込み要因レジスタ243は、例えば、物理計算機1のHW10に含まれている物理レジスタをゲストOS31-iが動作するVM30-iの実行環境(仮想計算機実行環境)にマップすることによって実現されるものとする。しかし、割り込み要因レジスタ243が、VMM20によって作成される仮想レジスタであっても構わない。
CPU追加割当時間情報244は、ゲストOS31-iが他のゲストOSからの通信を受信した場合に、当該ゲストOS31-iに追加で割り当てられるCPU時間(CPU追加割当時間)の値を表す変数である。CPU追加割当時間情報244には、ゲストOS間通信の受信側でのデータ受信に伴う処理(受信処理)に必要なCPU時間(CPU実行時間)を示す値が用いられる。本実施形態ではCPU追加割当時間情報244として、4msの値が設定されているものとする。但し、CPU追加割当時間情報244は、後述するCPU追加割当時間設定部240によって動的に変更される。CPU追加割当時間情報244はゲストOS31-iから参照される必要のない変数である。なお、ゲストOS間通信の手段が複数存在する場合、それぞれの手段に対応した変数(CPU追加割当時間情報244)が設定される構成であっても良い。
再び図1を参照すると、ゲストOSコンテキスト管理部24はCPU追加割当時間設定部240を含む。CPU追加割当時間設定部240は、ゲストOS間通信管理部21内のゲストOS間通信監視部211によるゲストOS間通信の状況の監視結果に基づき、受信側のゲストOS31-j(j=1,2,3)における受信処理に必要なCPU時間(CPU実行時間)をCPU追加割当時間として決定する。CPU追加割当時間設定部240は、ゲストOSコンテキスト241-jに含まれているCPU追加割当時間情報244を、決定されたCPU追加割当時間の値に設定変更する。
このように、ゲストOS間通信の状況に応じて、受信側のゲストOS31-jにおける受信処理に必要なCPU時間がCPU追加割当時間として動的に設定される構成とすることにより、システム全体の処理が効率よく進められるようになる。
なお、各ゲストOSコンテキスト241-jに含まれるCPU追加割当時間情報244を、ゲストOS31-j毎のCPU追加割当時間の設定値が保存された設定ファイルを用いて、例えばシステム起動時にCPU追加割当時間設定部240が設定する構成とすることも可能である。ここで、HW10に含まれているI/O12がハードディスクドライブのようなディスクドライブであるとする。この場合、上述の設定ファイルをユーザの操作により予め作成してディスクドライブ(I/O12)に格納しておき、システム起動時に、CPU追加割当時間設定部240が当該設定ファイルを当該ディスクドライブから読み込んで、当該設定ファイルに基づいて各ゲストOSコンテキスト241-jに含まれるCPU追加割当時間情報244を設定すれば良い。
このように、ユーザの操作により予め作成された設定ファイルに基づき、各ゲストOSコンテキスト241-jに含まれるCPU追加割当時間情報244を設定する手法を適用しても、当該ユーザが各ゲストOS31-jの処理内容を熟知している場合は、各ゲストOS31-jに対して適切なCPU追加割当時間を設定することが可能となるため、システム全体の処理が効率よく進められる。
また、CPU追加割当時間情報244として有効なCPU追加割当時間の値が与えられているか否かによって、ゲストOS31-jに対する受信割り込み発生に伴う割り込み処理の直後に当該ゲストOS31-jに対して追加のCPU時間(CPU追加割当時間)を付与するか否かを決定することも可能である。
次に、図1の仮想計算機システムにおける動作の概要について説明する。
まず、あるゲストOS31-jが他のゲストOS(送信側ゲストOS)31-iからのゲストOS間通信の送信データをVMM20を介して受け取ったものとする。このような場合、VMM20内の割り込み管理部23は、送信側ゲストOS31-iからの送信データの受信をゲストOS31-j(つまり受信側ゲストOS31-j)に通知するために当該受信側ゲストOS31-jへの割り込み(受信割り込み)を発生する。
多くの通信形態では、受信側ゲストOS31-jは、データ受信後に受信データ(例えばパケットデータ)の解析やアクナレッジ(ACK)の返信のような受信に伴う処理(受信処理)を行う必要がある。一般にゲストOSは仮想計算機実行環境でない通常の計算機環境で動作するものをベースにしている場合が多い。このようなゲストOSは、割り込み処理と受信処理とを別々に実装していることが多い。そのため従来技術では、受信側ゲストOS31-jによる受信処理の大部分は、データを受信した直後ではなくて、割り込み解除後に行われるのが一般的である。
図4は、CPU時間割当テーブル222によって表されるゲストOS31-1〜32-3を対象とするスケジュール(CPU時間割り当てスケジュール)の問題を説明するための図である。図4において、時点t0は現在時点であり、時点t0から24ms先の時点tnまでの時間24msは、2ms毎に12分割されて管理される。図4の例では、時点t0から、CPU時間が3個のゲストOS31-1〜31-3に2ms単位でゲストOS31-2→ゲストOS31-3→ゲストOS31-1→ゲストOS31-2…のようにラウンドロビンで割り当てられることが予定されている。
さて、時点t0でゲストOS31-2にCPU11が割り当てられた結果、当該ゲストOS31-2の実行が開始されたものとする。そして、時点t0から例えば1msが経過した時点t1で、ゲストOS(送信側ゲストOS)31-2がゲストOS(受信側ゲストOS)31-1に対してVMM20を経由して通信を行ったものとする。
この場合VMM20の割り込み管理部23は、受信側ゲストOS31-1に固有のゲストOSコンテキスト241-1に含まれている割り込み要因レジスタ243のゲストOS間通信受信ビットをONにする。
またVMM20のゲストOS実行管理部22に含まれているディスパッチャ223は、従来技術であれば、受信側ゲストOS31-1が割り込み状態であることを確認して当該ゲストOS31-1の割り込みハンドラ(図示せず)に一時的にディスパッチする。ゲストOS31-1の割り込みハンドラは、当該ゲストOS31-1に固有のゲストOSコンテキスト241-1に含まれている割り込み要因レジスタ243のゲストOS間通信受信ビットのON状態に基づき割り込み要因を確認し、当該受信ビットをOFFする割り込み処理を行う。そしてゲストOS31-1の割り込みハンドラは割り込み処理後、早い段階(実際の受信処理を行う前に)で割り込み解除をVMM20に通知する。
従来技術では、VMM20のディスパッチャ223はゲストOS31-1から割り込み解除の通知を受けた場合、当該ゲストOS31-1に一時的に割り当てていたCPU11をCPU時間割当テーブル222の示すスケジュールの通りにゲストOS31-2に返却する。これによりゲストOS31-2が再びディスパッチされる。ここで、ゲストOS31-1がゲストOS31-2からの送信データの受信処理に例えば4msの時間が必要であるものとする。この場合、従来技術でば、ゲストOS31-1が受信処理を終了するのは、当該ゲストOS31-1に2msのCPU時間が2回割り当てられて、その2回目のCPU時間が経過した時点t2である。この時点t2は、図4からも明らかなように、時点t0(つまりCPU時間割当テーブル222の示すスケジュールの開始時点)から10ms経過した時点である。
さて、送信側ゲストOS31-2が、受信側ゲストOS31-1に送信したデータに対する当該ゲストOS31-1の受信処理の後に当該ゲストOS31-1から返されるACKを待って、自身の処理を再開することがある。ところが従来技術では、受信側ゲストOS31-1の受信処理が終了するのは時点t0から10msが経過した時点t2である。時点t0から時点t2までの間に、送信側ゲストOS31-2にはCPU11が2ms単位で(つまり2msのCPU時間が)2度割り当てられる。
従来技術では、送信側ゲストOS31-2に2度割り当てられるCPU時間内に、受信側ゲストOS31-1からACKが返されない。このため送信側ゲストOS31-2は、2度割り当てられるCPU時間において処理を再開できず、CPU時間の無駄が生じる。このことから本発明者は、ゲストOS間通信が行われる場合に、受信側ゲストOSでの受信処理は迅速に行われた方が有利であることを認識するに至った。
そこで本実施形態では、受信側ゲストOS31-1へのゲストOS間通信の割り込みが発生する場合、当該割り込みに対応する割り込み処理の終了に伴う割り込み解除後も当該ゲストOS31-1に追加でCPU時間が割り当てられるように、VMM20のゲストOSスケジューラ221によってCPU時間割当テーブル222が変更される。
図5は、変更後のCPU時間割当テーブル222によって表されるスケジュールの例を示す。図5の例では、時点t1で受信側ゲストOS31-1への受信割り込みが発生し、その時点t1から受信処理に必要な4msが経過する時点t3までの期間、当該ゲストOS31-1にCPU時間(CPU追加割当時間)が割り当てられる。この結果、CPU時間割当テーブル222の示すスケジュールの開始時点t0から5ms経過した時点t3までの間に、受信側ゲストOS31-1は受信処理を完了させることができる。
このように本実施形態においては、受信側ゲストOS31-1に固有のゲストOSコンテキスト241-1に含まれているCPU追加割当時間情報244に基づいてCPU時間割当テーブル222を変更することにより、図5に示されるようにCPU時間割り当てのスケジュールを変更するようにしている。これにより、CPU時間割当テーブル222を変更せずに、図4で示されるような、元のCPU時間割当テーブル222の示すスケジュールの通りに受信側ゲストOS31-1をディスパッチする場合に比べて、当該ゲストOS31-1の受信処理を早く完了させることができる。この結果、送信側ゲストOS31-2の処理も、早く進めさせることができる。
次に、上述のような、受信側のゲストOSの受信処理を早く完了させるためのスケジュール調整処理の手順について、図6のフローチャートを参照して説明する。
まず、送信側ゲストOS31-2が、受信側ゲストOS31-1との間のゲストOS間通信のために、VMM20に対してゲストOS間通信IF210の呼び出しを行ったものとする。本実施形態において、このゲストOS間通信IF210の呼び出しは、送信側ゲストOS31-2からVMM20に対してゲストOS間通信IFコール命令を発行することにより実現される。
VMM20のゲストOS間通信管理部21は送信側ゲストOS31-2からのゲストOS間通信IFの呼び出しを受けて、当該ゲストOS31-2及び受信側となるゲストOS31-1の各々に対して、それぞれゲストOS間通信IF210を提供する(ステップS1)。これにより送信側ゲストOS31-2は、ゲストOS間通信IF210を用いて、VMM20を介して受信側ゲストOS31-1(の受信バッファ)にデータを送信することができる。
するとVMM20の割り込み管理部23は、受信側ゲストOS31-1に固有のゲストOSコンテキスト241-1に含まれている割り込み要因レジスタ243のゲストOS間通信受信ビットをONにする(ステップS2)。
さて、VMM20のゲストOSスケジューラ221は、受信側ゲストOS31-1への何らかの割り込みの要因が発生すると、ディスパッチャ223が受信側ゲストOS31-1への割り込み発生に伴う当該ゲストOS31-1のディスパッチを発生させる直前に、ステップS11を実行する。このステップS11においてゲストOSスケジューラ221は、受信側ゲストOS31-1に固有のゲストOSコンテキスト241-1に含まれている割り込み要因レジスタ243のゲストOS通信受信ビットがON状態にあるかを判定する。つまりステップS11においてゲストOSスケジューラ221は、受信側ゲストOS31-1への割り込みの要因が、受信割り込みによる通知が必要な、当該受信側ゲストOS31-1でのゲストOS間通信の受信であるかを判定する。なお、受信側ゲストOS31-1への割り込み(受信割り込み)がいつ発生するかはシステムの実装に依存し、上記ステップS2の直後である必要はない。
もし、受信割り込みビットがON状態にあり、したがって受信側ゲストOS31-1への割り込みの要因がゲストOS間通信の受信であるならば(ステップS11)、ゲストOSスケジューラ221はステップS12を実行する。このステップS12においてゲストOSスケジューラ221は、受信側ゲストOS31-1に固有のゲストOSコンテキスト241-1に含まれているCPU追加割当時間情報244が有効なCPU追加割当時間の値を示しているかを判定する。
もし、CPU追加割当時間情報244が有効なCPU追加割当時間の値を示しているならば(ステップS12)、ゲストOSスケジューラ221は、そのCPU追加割当時間の値に基づいて、上述のようなCPU時間割当テーブル222の変更を行う(ステップS13)。ここでは、受信側ゲストOS31-1への割り込み(受信割り込み)発生に伴う割り込み処理の直後に、CPU追加割当時間情報244の示すCPU時間(CPU追加割当時間)が当該ゲストOS31-1に割り当てられるように、CPU時間割当テーブル222が変更(更新)される。なお、CPU時間割当テーブル222の示すスケジュールの範囲内で受信側ゲストOS31-1に割り当てられるCPU追加割当時間がまかなえない場合は、更に先のスケジュールを作成することで解決できる。
ゲストOSスケジューラ221によってCPU時間割当テーブル222が変更されると(ステップS13)、割り込み管理部23は受信側ゲストOS31-1への割り込み(受信割り込み)を発生する(ステップS14)。
一方、受信割り込みビットがON状態になく、したがって受信側ゲストOS31-1への割り込みの要因がゲストOS間通信の受信でないならば(ステップS11)、ステップS12及びS13をスキップして、当該要因に対応する受信側ゲストOS31-1への割り込み(受信割り込みとは異なる割り込み)が発生される(ステップS14)。また、ステップS12において、CPU追加割当時間情報244が有効なCPU追加割当時間の値を示していないと判定されたならば、ステップS13をスキップして、受信側ゲストOS31-1への割り込み(受信割り込み)が発生される(ステップS14)。
次に上記実施形態で適用される、ゲストOS31-jに固有のCPU追加割当時間情報244、即ちゲストOS31-jにおける受信処理に必要なCPU時間(CPU追加割当時間)の値を、常に最適な値に動的に変更することによってシステムの通信を最適化するための処理手順について説明する。
システムの通信は、ゲストOS31-i及びゲストOS31-jが定常的に1対1で交互に通信を行う第1のタイプの通信と、複数のゲストOS31-1〜31-3が頻繁に通信を行う第2のタイプの通信に大別される。そこで、第1のタイプの通信が行われる状況でのシステムの最適化と、第2のタイプの通信が行われる状況でのシステムの最適化とについて、順次説明する。
<第1のタイプの通信が行われる状況でのシステムの最適化>
まず、第1のタイプの通信が行われる状況でシステムを最適化するための処理手順について、図7のフローチャートを参照して説明する。
VM30-1〜30-3上で動作するゲストOS31-1〜31-3が第1のタイプの通信(定常的な1対1交互の通信)を行っている状況では、当該ゲストOS31-1〜31-3への受信割り込みが定常的に発生する。ゲストOS31-j(j=1,2,3)は、当該ゲストOS31-jへの受信割り込みが発生すると、割り込み処理の直後に前述の受信処理を実行する。ゲストOSコンテキスト管理部24内のCPU追加割当時間設定部240は、ゲストOS31-jに追加で割り当てられるCPU時間(CPU追加割当時間)が最適値となるように、当該CPU追加割当時間の設定値(CPU追加割当時間情報244)を図7のフローチャートに従う手順で調整する。この調整は、ゲストOS間通信管理部21内のゲストOS間通信監視部211と連携することによって次のように行われる。
まず、ゲストOS間通信監視部211は、ゲストOS間の通信を監視することにより、定常的に1対1で通信(第1のタイプの通信)を行っているゲストOSを検知する(ステップS21)。このように、定常的に1対1で通信を行っているゲストOSを検知するには、例えばゲストOS間通信監視部211がゲストOS31-1〜31-3からのゲストOS間通信IF210の呼び出しのログを採取すれば良い。ここでは、ゲストOS間通信IF210の呼び出しのログから、例えばゲストOS31-iとゲストOS31-jとが交互にゲストOS間通信IF210を呼び出している回数が予め定められた閾値を超えていると判定できるならば、ゲストOS間通信監視部211は当該ゲストOS31-iとゲストOS31-jとを定常的に1対1で通信(第1のタイプの通信)を行っているゲストOSであると検知できる。
CPU追加割当時間設定部240は、ゲストOS31-iとゲストOS31-jとが定常的に1対1で通信(第1のタイプの通信)を行っているゲストOSであるとゲストOS間通信監視部211によって検知されると(ステップS21)、例えばゲストOS31-i及び31-jの双方にそれぞれ固有のCPU追加割当時間情報244を変更して、CPU追加割当時間を現在の例えば2倍に設定する(ステップS22)。
この状態でゲストOS間通信監視部211は、ゲストOS31-i及び31-jの間の通信の状況、例えば通信スループットを観測する(ステップS23)。そしてゲストOS間通信監視部211は、通信スループットが改善したか否かを判定する(ステップS24)。本実施形態では通信スループットとして、一定時間当たりの通信回数が用いられる。
もし、スループットが改善したとゲストOS間通信監視部211によって判定されたならば(ステップS24)、CPU追加割当時間設定部240は、ゲストOS31-i及び31-j各々のCPU追加割当時間を更に2倍に設定する(ステップS25a)。逆に、スループットが劣化したとゲストOS間通信監視部211によって判定されたならば(ステップS24)、CPU追加割当時間設定部240は、ゲストOS31-i及び31-j各々のCPU追加割当時間を現在の値の半分に設定し直す(ステップS25b)。
いずれの場合においても、ゲストOS間通信監視部211は、先のステップS23,S24と同様に、通信状況(スループット)の観測及び判定(ステップS26a,S27aまたはステップS26b,S27b)を行う。
もし、ステップS27aでスループットが改善したと判定された場合、CPU追加割当時間設定部240は再びステップS25aを実行して、CPU追加割当時間を更に2倍に設定する。するとゲストOS間通信監視部211は通信状況(スループット)の観測及び判定(ステップS26a,S27a)を再び実行する。これに対し、ステップS27aでスループットが劣化したと判定された場合、CPU追加割当時間設定部240はCPU追加割当時間を現在の値の半分に設定し直す(ステップS28a)。CPU追加割当時間設定部240は、ステップS28aで設定された最新のCPU追加割当時間値が最適値であるとして、処理を終了する。
一方、ステップS27bでスループットが改善したと判定された場合、CPU追加割当時間設定部240は再びステップS25bを実行して、CPU追加割当時間を現在の値の半分に設定し直す。するとゲストOS間通信監視部211は通信状況(スループット)の観測及び判定(ステップS26b,S27b)を再び実行する。これに対し、ステップS27bでスループットが劣化したと判定された場合、CPU追加割当時間設定部240はCPU追加割当時間を現在の2倍に設定する(ステップS28b)。CPU追加割当時間設定部240は、ステップS28bで設定された最新のCPU追加割当時間値が最適値であるとして、処理を終了する。
なお、CPU追加割当時間の調整範囲に制約を設け、CPU追加割当時間が制御可能な範囲を当該調整範囲として設定し、この範囲を超えないようにCPU追加割当時間を調整することも可能である。
上記実施形態では、第1のタイプの通信を行っているゲストOS31-i及び31-jの双方のCPU追加割当時間が最適値に変更される。しかし、ゲストOS31-i及び31-jの一方、例えば主として応答を返す側(受信側)のゲストOSのCPU追加割当時間のみが最適値に変更される構成であっても構わない。この構成では、ゲストOS間通信監視部211は、上記通信状況の観測結果に基づき、ゲストOS31-i及び31-jの一方が応答を返す側となる割合が予め定められた閾値を超えているかを調べることによって、当該一方が主として受信側ゲストOSであるかを判定すれば良い。
<第2のタイプの通信が行われる状況でのシステムの最適化>
ゲストOS31-1〜31-3が第2のタイプの通信を行っている状況(頻繁に通信を行っている状況)では、頻繁に受信割り込みによるディスパッチが発生する。このような状況では、ディスパッチそれ自体にかかるオーバヘッドの影響によってシステム性能の低下を引き起こす可能性がある。例えば、サーバクライアントモデルの通信は第2のタイプの通信に相当し、このような通信がゲストOS上のアプリケーションで行われているような場合、個々の通信は独立である。
したがって受信側ゲストOSへの受信割り込みに伴う割り込み処理の直後に受信処理を行わなくてもシステム全体の動作に矛盾は生じないことが多い。この場合、受信量がある程度溜まってから受信側ゲストOSに受信処理をまとめて実行させたほうが、ディスパッチの回数が減ってスループットが改善する可能性がある。
以下、第2のタイプの通信が行われる状況でシステムを最適化するための処理手順について、図8のフローチャートを参照して説明する。
ゲストOS間通信監視部211は、ゲストOS間の通信を監視することにより、通信量が多いために受信割り込みの回数が多くなったこと、つまりゲストOS間で頻繁に通信(第2のタイプの通信)が行われていることを検知する(ステップS31)。このような通信を検知するには、例えばゲストOS間通信監視部211がゲストOS31-1〜31-3からのゲストOS間通信IF210の呼び出しのログを採取すれば良い。ここでは、ゲストOS間通信IF210の呼び出しのログから、一定時間当たりの受信割り込みの回数が予め定められた閾値を超えていると判定できるならば、ゲストOS間通信監視部211はゲストOS31-1〜31-3の間で頻繁に通信(第2のタイプの通信)が行われていると検知できる。ここでは、ゲストOS31-1がサーバとして動作し、ゲストOS31-2及び31-3がクライアントとして動作しているものとする。つまり、ゲストOS31-2及び31-3が送信側、ゲストOS31-1が受信側として、それぞれ動作している
CPU追加割当時間設定部240は、ゲストOS31-1〜31-3の間の頻繁な通信(第2のタイプの通信)がゲストOS間通信監視部211によって検知されると(ステップS31)、ステップS32を実行する。このステップS32においてCPU追加割当時間設定部240は、受信側ゲストOS31-1への受信割り込みを発生させるために必要な受信量の閾値(受信量閾値)を例えば現在の値の2倍に設定すると共に、当該ゲストOS31-1に固有のCPU追加割当時間情報244を変更して、CPU追加割当時間を現在の例えば2倍に設定する。つまりCPU追加割当時間設定部240は、ゲストOS31-1の受信量閾値及びCPU追加割当時間を、いずれも現在の値の2倍に設定する。
この状態でゲストOS間通信監視部211は、ゲストOS31-1とゲストOS31-2及び31-3の間の通信の状況、例えば通信スループットを観測する(ステップS33)。そしてゲストOS間通信監視部211は、通信スループットが改善したか否かを判定する(ステップS34)。本実施形態では通信スループットとして、前述したように一定時間当たりの通信回数が用いられる。
もし、スループットが改善したとゲストOS間通信監視部211によって判定されたならば(ステップS34)、CPU追加割当時間設定部240は、ゲストOS31-1の受信量閾値及びCPU追加割当時間を、いずれも現在の値の2倍に設定する(ステップS35a)。逆に、スループットが劣化したとゲストOS間通信監視部211によって判定されたならば(ステップS34)、CPU追加割当時間設定部240は、ゲストOS31-1の受信量閾値及びCPU追加割当時間を、いずれも現在の値の半分に設定し直す(ステップS35b)。
いずれの場合においても、ゲストOS間通信監視部211は、先のステップS32,S33と同様に、通信状況(スループット)の観測及び判定(ステップS36a,S37aまたはステップS36b,S37b)を行う。
もし、ステップS37aでスループットが改善したと判定された場合、CPU追加割当時間設定部240は再びステップS35aを実行して、ゲストOS31-1の受信量閾値及びCPU追加割当時間を更に2倍に設定する。するとゲストOS間通信監視部211は通信状況(スループット)の観測及び判定(ステップS36a,S37a)を再び実行する。これに対し、ステップS37aでスループットが劣化したと判定された場合、CPU追加割当時間設定部240はゲストOS31-1の受信量閾値及びCPU追加割当時間を現在の値の半分に設定し直す(ステップS38a)。CPU追加割当時間設定部240は、ステップS38aで設定された最新の受信量閾値及びCPU追加割当時間値が最適値であるとして、処理を終了する。
一方、ステップS37bでスループットが改善したと判定された場合、CPU追加割当時間設定部240は再びステップS35bを実行して、ゲストOS31-1の受信量閾値及びCPU追加割当時間を現在の値の半分に設定し直す。するとゲストOS間通信監視部211は通信状況(スループット)の観測及び判定(ステップS36b,S37b)を再び実行する。これに対し、ステップS37bでスループットが劣化したと判定された場合、CPU追加割当時間設定部240はゲストOS31-1の受信量閾値及びCPU追加割当時間を現在の2倍に設定する(ステップS38b)。CPU追加割当時間設定部240は、ステップS38bで設定された最新の受信量閾値及びCPU追加割当時間値が最適値であるとして、処理を終了する。
なお、CPU追加割当時間に関しては、調整範囲に制約を設け、CPU追加割当時間が制御可能な範囲を当該調整範囲として設定し、この範囲を超えないようにCPU追加割当時間を調整することも可能である。
[第1の変形例]
次に、上記実施形態の第1の変形例について説明する。
上記実施形態では、ゲストOS間通信の受信側ゲストOS31-jに追加で割り当てられるCPU時間(つまりCPU追加割当時間)がVMM20側で動的に調整される。しかし、ゲストOS間通信の送信側ゲストOS31-iが、受信側ゲストOS31-jでのデータ受信に伴う受信処理に必要な時間(CPU時間)を予測して当該受信側ゲストOS31-jのCPU追加割当時間を調整することも可能である。このような調整手法は、受信側ゲストOS31-jの受信処理に必要なCPU時間量が送信側ゲストOS31-iからの通信の内容に依存する場合に最適であり、より精度の高い時間指定が期待できる。
第1の変形例の特徴は、受信側ゲストOS31-jの臨時のCPU追加割当時間を送信側ゲストOS31-iが指定することにある。以下、送信側ゲストOS31-iによる受信側ゲストOS31-jの臨時のCPU追加割当時間指定及び当該指定に基づくスケジュール調整の手順について、図9のフローチャートを参照して説明する。
ゲストOS間通信の送信側のゲストOS31-iは、受信側ゲストOS31-jとのゲストOS間通信のためにVMM20に対してゲストOS間通信IF210を呼ぶ際には、当該受信側ゲストOS31-jに対して行おうとしている通信の内容から当該受信側ゲストOS31-jでの受信処理に要する時間を予測する。送信側のゲストOS31-iは、予測された時間を受信側ゲストOS31-jに割り当てられるべきCPU時間(CPU追加割当時間)として、例えばゲストOS間通信IFコール命令の引数により指定し、当該コール命令をVMM20に対して発行することで、ゲストOS間通信IF210を呼ぶ。
するとVMM20のゲストOS間通信管理部21は、送信側のゲストOS31-2及び受信側ゲストOS31-1の各々に対して、それぞれゲストOS間通信IF210を提供する(ステップS41)。割り込み管理部23は、受信側ゲストOS31-1に固有のゲストOSコンテキスト241-1に含まれている割り込み要因レジスタ243のゲストOS間通信受信ビットをONにする(ステップS42)。このステップS42において、CPU追加割当時間設定部240は、送信側のゲストOS31-2から指定されたCPU時間の値を受信側ゲストOS31-1の臨時のCPU追加割当時間の値として設定する。ここでは、指定された臨時のCPU追加割当時間の値が、受信側ゲストOS31-1に固有のゲストOSコンテキスト241-1の一部として設定される。しかし、臨時のCPU追加割当時間の値が、ゲストOSコンテキスト241-1とは別に受信側ゲストOS31-1に対応付けて用意されるロケーション(物理的にはメモリ13内の特定の領域)に設定される構成であっても構わない。
その後、VMM20のゲストOSスケジューラ221は、ディスパッチャ224が受信側ゲストOS31-1への割り込み発生に伴う当該ゲストOS31-1のディスパッチを発生させる直前に、当該ゲストOS31-1に固有のゲストOSコンテキスト241-1に含まれている割り込み要因レジスタ243のゲストOS通信受信ビットがON状態にあるかを判定する(ステップS51)。
もし、受信割り込みビットがON状態にある場合、つまり受信側ゲストOS31-1への割り込みの要因がゲストOS間通信の受信である場合(ステップS51)、ゲストOSスケジューラ221はステップS52を実行する。このステップS52においてゲストOSスケジューラ221は、受信側ゲストOS31-1に固有のゲストOSコンテキスト241-1に設定されている臨時のCPU追加割当時間の値が有効な値であるかを判定する。
もし、臨時のCPU追加割当時間の値が有効な値であるならば(ステップS52)、ゲストOSスケジューラ221は、当該臨時のCPU追加割当時間の値に基づき、上記実施形態のステップS13と同様に、CPU時間割当テーブル222の変更を行う(ステップS54)。ここでは、受信側ゲストOS31-1への受信割り込み発生に伴う割り込み処理の直後に、上記ステップS13と異なって(CPU追加割当時間情報244の示すCPU時間ではなくて)、臨時のCPU追加割当時間が当該ゲストOS31-1に割り当てられるように、CPU時間割当テーブル222が変更される。
これに対し、臨時のCPU追加割当時間の値が有効な値でないならば(ステップS52)、ゲストOSスケジューラ221は、上記実施形態のステップS12と同様に、受信側ゲストOS31-1に固有のゲストOSコンテキスト241-1に含まれているCPU追加割当時間情報244が有効なCPU追加割当時間の値を示しているかを判定する(ステップS53)。
もし、CPU追加割当時間情報244が有効なCPU追加割当時間の値を示しているならば(ステップS53)、ゲストOSスケジューラ221は、そのCPU追加割当時間の値に基づいて、上記実施形態のステップS13と同様にCPU時間割当テーブル222の変更を行う(ステップS54)。
ゲストOSスケジューラ221はCPU時間割当テーブル222を変更すると、CPU追加割当時間設定部240によりゲストOSコンテキスト241-1からCPU追加割当時間の設定値を削除させる(ステップS55)。CPU追加割当時間設定部240は、ゲストOSコンテキスト241-1にCPU追加割当時間の値が設定されているならば、その設定値を削除する。すると割り込み管理部23は、受信側ゲストOS31-1への割り込み(受信割り込み)を発生する(ステップS56)。
一方、受信割り込みビットがON状態にないならば(ステップS51)、CPU時間割当テーブル222が変更されることなくステップS56が実行されて、受信側ゲストOS31-1への割り込み(受信割り込みとは異なる割り込み)が発生される。また、ステップS53において、CPU追加割当時間情報244が有効なCPU追加割当時間の値を示していないと判定された場合にも、CPU時間割当テーブル222が変更されることなくステップS56が実行されて、受信側ゲストOS31-1への割り込み(受信割り込み)が発生される。
[第2の変形例]
次に、上記実施形態の第2の変形例について説明する。
上記実施形態では、受信側ゲストOSの受信割り込み処理の後に行われる受信処理のために、当該受信側ゲストOSに追加でCPU時間(CPU追加割当時間)が割り当てられる。このため、不当にCPU時間を奪われる他のゲストOSが存在する可能性がある。
図5の例では、時点t0から1msが経過した時点t1で、ゲストOS31-1に追加でCPU時間(CPU追加割当時間)が割り当てられた結果、ゲストOS31-2及びゲストOS31-3に割り当てられるべきCPU時間が当該ゲストOS31-2及びゲストOS31-3から奪われている。このような場合、CPU時間を奪われたゲストOS31-2及びゲストOS31-3のうちのゲストOS31-3は、ゲストOS31-1(追加でCPU時間が割り当てられたゲストOS31-1)とゲストOS31-2との間で行われるゲストOS間通信とは無関係であるのに、当該ゲストOS31-3の性能が低下する可能性がある。このような性能低下は、特にゲストOS31-3がリアルタイム性を要求される処理を行っている場合に問題となる。
第2の変形例の特徴は、追加でCPU時間が割り当てられるゲストOSを第1のゲストOS、CPU時間を奪われるゲストOSを第2のゲストOSと呼ぶものとすると、第2のゲストOSから奪われるCPU時間を、第1のゲストOSに割り当てられる予定のCPU時間で埋め合わせることにある。この埋め合わせは、第2のゲストOSから奪われるCPU時間を、当該奪われるCPU時間の割り当てが予定されていた時間帯(割り当て予定時間帯)に最も近い時間帯に第1のゲストOSに割り当てられる予定のCPU時間と交換することにより実現される。
以下、第2のゲストOSから奪われるCPU時間を第1のゲストOSに割り当てられる予定のCPU時間と交換することによって実現されるスケジュール調整の手順について、図10のフローチャートを参照して説明する。
今、送信側ゲストOS31-2からの通信に伴う送信データが受信側ゲストOS31-1で受信され、当該受信側ゲストOS31-1に受信割り込みが発生したものとする。この場合、スケジュールの変更の必要が発生する。
するとゲストOSスケジューラ221は、受信側ゲストOS31-1での割り込み処理後に行われる受信処理に必要なCPU割当時間が現在受信側ゲストOS31-1用に設定されているCPU追加割当時間では不足しているかを判定する(ステップS61)。ここで、受信側ゲストOS31-1での割り込み処理後の受信処理に必要なCPU割当時間の値は、ゲストOSコンテキスト241-1に含まれているCPU追加割当時間情報244によって示される。また、ステップS61が最初に実行される段階では、受信側ゲストOS31-1用に設定されているCPU追加割当時間の時間帯は存在しない。
もし、受信側ゲストOS31-1での割り込み処理後の受信処理に必要なCPU割当時間が不足しているならば、ゲストOSスケジューラ221はステップS62の処理を実行する。このステップS62においてゲストOSスケジューラ221は、CPU時間割当テーブル222を参照することにより、受信側ゲストOS31-1用のCPU追加割当時間の時間帯外で、最も近い将来に受信側ゲストOS31-1に割り当てられる予定の時間帯となるCPU時間(ディスパッチ予定時間)を探す。
次にゲストOSスケジューラ221は、現在受信側ゲストOS31-1用に設定されているCPU追加割当時間の時間帯の直後に他のゲストOSに割り当てられるように予定されているCPU時間を、ステップS62で探し求められた、受信側ゲストOS31-1に割り当てられる予定のCPU時間とを入れ替える(ステップS63)。つまり、ゲストOSスケジューラ221は、CPU追加割当時間の時間帯の直後に他のゲストOSに割り当てられるように予定されているCPU時間を受信側ゲストOS31-1用のCPU追加割当時間に追加し、ステップS62で探し求められた、受信側ゲストOS31-1に割り当てられる予定のCPU時間を当該他のゲストOS用に変更する操作を、CPU時間割当テーブル222上で行う。ステップS63が最初に実行される段階では、受信側ゲストOS31-1用に設定されているCPU追加割当時間の時間帯は存在しない。この場合、CPU追加割当時間の時間帯の直後に他のゲストOSに割り当てられるように予定されているCPU時間の時間帯は、送信側ゲストOS31-2が受信側ゲストOS31-1に対して通信を行った時点が属するCPU時間の時間帯であり、送信側ゲストOS31-2用のCPU時間の時間帯である。
ゲストOSスケジューラ221は、上述のステップS62及びS63を、受信側ゲストOS31-1に追加で割り当てられるCPU時間(CPU追加割当時間)が不足しなくなるまで(ステップS61)、繰り返す。
図11は、図10のフローチャートの示す手順に従ってゲストOS31-1〜32-3を対象とするスケジュールが調整された際の調整前後のスケジュールの例を示す。図11の例では、時点t10においてゲストOS31-2に2msのCPU時間が割り当てられる。このCPU時間割り当ての直後にゲストOS31-2がゲストOS31-1への通信を行ったものとする。
割り込み管理部23は、この時点(t10の時点)で受信側ゲストOS31-1へのゲストOS間通信の受信割り込みを発生する。するとゲストOSスケジューラ221によって、CPU時間割当テーブル222の示すスケジュールの調整が行われる。この調整では、図11(a)において矢印111で示されるように、時点t10に送信側ゲストOS31-2に割り当てられる予定の(割り当てられた)時点t10から時点t11(=t10+2ms)までの時間帯の2msのCPU時間と、時点t12に受信側ゲストOS31-1に割り当てられる予定の時点t12(=t10+4ms)から時点t13(=t10+6ms)までの時間帯の2msのCPU時間との入れ替えが行われる。同様に、図11(a)において矢印112で示されるように、時点t11(=t10+2ms)にゲストOS31-3に割り当てられる予定の時点t11(=t10+2ms)から時点t12(=t10+4ms)までの時間帯の2msのCPU時間と、時点t14(=t10+10ms)に受信側ゲストOS31-1に割り当てられる予定の時点t14(=t10+10ms)から時点t15(=t10+12ms)までの時間帯の2msのCPU時間との入れ替えが行われる。
これにより、図11(b)に示されるように、時点t10での受信割り込み直後に、時点t10から時点t12までの、本来ゲストOS31-2及び31-3に順に割り当てられる予定の4msのCPU時間が、受信側ゲストOS31-1に割り当てられる。これとは逆に、本来受信側ゲストOS31-1に割り当てられる予定の、時点t12から時点t13までの2msのCPU時間及び時点t14から時点t15までの2msのCPU時間が、図11(b)に示されるように、それぞれゲストOS31-2及び31-3に割り当てられる。
このように、図11の例では、時点t11での受信割り込み直後に、受信側ゲストOS31-1に、当該ゲストOS31-1での受信処理に必要な(ゲストOSコンテキスト241-1に含まれているCPU追加割当時間情報244の示す)値のCPU時間が割り当てられるように、CPU時間割当テーブル222の示すスケジュールが変更される。また、スケジュールされた範囲内において、ゲストOS31-1〜31-3の各々に割り当てられるCPU時間量は均等に保たれる。
上記第2の変形例では、説明の簡略化のために、ゲストOS31-1〜31-3に本来割り当てられる予定のCPU時間単位で交換が行われることを前提としている。しかし、受信割り込みは、実行中のゲストOSに割り当てられているCPU時間の途中で発生することが一般的である。また、各ゲストOSに割り当てられるCPU時間も、ゲストOS毎に異なることも考えられる。このような場合、ゲストOSスケジューラ221は、各ゲストOSに割り当てられる予定のCPU時間を必要な時間量(例えばゲストOSスケジューラ221が管理する最小時間単位)に分割してスケジュールの調整をすれば良い。なお、スケジュールの範囲内で受信側ゲストOSに割り当てられるCPU時間がまかなえない場合は、更に先のスケジュールを作成することで解決できる。
[第3の変形例]
次に、上記実施形態の第3の変形例について説明する。第3の変形例の特徴は、受信側ゲストOSへの受信割り込み時に当該ゲストOSに追加で割り当てられるCPU時間を、送信側ゲストOSに割り当てられる予定のCPU時間でまかなうことにある。このように第3の変形例では、受信側ゲストOSの受信割り込み処理の後に行われる受信処理用に、送信側ゲストOSに割り当てられる予定のCPU時間を譲渡する手法が適用される。この手法は、例えば、送信側ゲストOSの処理の進行に受信側ゲストOSの応答が必要な場合の通信モデルに適用できる。また、この手法は、受信側ゲストOS(CPU時間が追加で割り当てられる受信側ゲストOS)が関係するゲストOS間通信とは無関係のゲストOSに対するCPU時間の割り当てに影響を与えない。
以下、送信側ゲストOSに割り当てられる予定のCPU時間を受信側ゲストOSの受信処理用に譲渡することによって実現されるスケジュール調整の手順について、図12のフローチャートを参照して説明する。
今、ゲストOS31-1がゲストOS(送信側ゲストOS)31-2からの通信の送信データを受信し、そのゲストOS(受信側ゲストOS)31-1に受信割り込みが発生したものとする。この場合、第2の変形例と同様にスケジュールの変更の必要が発生する。
するとゲストOSスケジューラ221は、CPU時間割当テーブル222を参照して、受信割り込み時点における当該CPU時間割当テーブル222の示すスケジュール上の位置(つまり現在のスケジュール位置)を確認する(ステップS71)。次にゲストOSスケジューラ221は、受信割り込み時点から最も最近に確認されたスケジュール位置までに受信側ゲストOS31-1に割り当てられる予定のCPU時間(CPU割当予定時間)の合計量が、当該ゲストOS31-1に固有のCPU追加割当時間情報244の示す値(つまりゲストOS31-1の受信処理に必要な時間)以上であるかを判定する(ステップS72)。
もし、上述のCPU割当予定時間の合計量が、ゲストOS31-1の受信処理に必要な時間に満たないならば(ステップS72)、ゲストOSスケジューラ221は、最も最近に確認されたスケジュール位置が送信側ゲストOS31-2にCPU時間が割り当てられるディスパッチ予定位置であるかを判定する(ステップS73)。もし、このステップS73での判定がYESであるならば、ゲストOSスケジューラ221は、CPU時間割当テーブル222の示す該当する送信側ゲストOS31-2用のスケジュール位置(ここでは現在のスケジュール位置)を受信側ゲストOS31-1(へのディスパッチ予定)用に変更する(ステップS74)。つまりCPU時間割当テーブル222は、本来送信側ゲストOS31-2に割り当てられるべき2msのCPU時間を、受信側ゲストOS31-1に譲渡させる。この変更(譲渡)により、受信割り込み時点から最も最近に確認されたスケジュール位置までにおける受信側ゲストOS31-1へのCPU割当予定時間の合計量が2msだけ増加する。
ゲストOSスケジューラ221は、ステップS74を実行するとステップS75に進む。これに対し、ステップS73での判定がNOであるならば、ゲストOSスケジューラ221は、ステップS74をスキップしてステップS75に進む。なお、ステップS73での判定がNOであっても、最も最近に確認されたスケジュール位置が受信側ゲストOS31-1にCPU時間が割り当てられるディスパッチ予定位置であるならば、受信割り込み時点から最も最近に確認されたスケジュール位置までにおける受信側ゲストOS31-1へのCPU割当予定時間の合計量は2msだけ増加する。
ステップS75においてゲストOSスケジューラ221は、CPU時間割当テーブル222の次のスケジュール位置を確認する。するとゲストOSスケジューラ221は、ステップS71で現在のスケジュール位置が確認された場合と同様に、ステップS72以降の処理を行う。
即ちゲストOSスケジューラ221は、上述のような受信側ゲストOS31-1へのCPU割当予定時間の合計量が、当該ゲストOS31-1の受信処理に必要な時間に対して依然として不足しているかを判定する(ステップS72)。
もし、上述のような受信側ゲストOS31-1へのCPU割当予定時間の合計量が不足しているならば(ステップS72)、ゲストOSスケジューラ221は、最も最近に確認されたスケジュール位置、つまりステップS75で確認された次のスケジュール位置が、送信側ゲストOS31-2にCPU時間が割り当てられるスケジュール位置であるかを判定する(ステップS73)。もし、ステップS73の判定がYESであるならば、ゲストOSスケジューラ221は、ステップS75で確認された次のスケジュール位置を受信側ゲストOS31-1用に変更する(ステップS74)。そして、再びステップS75及びS72が行われる。これに対してステップS73の判定がNOであるならば、ステップS74をスキップして、再びステップS75及びS72が行われる。
やがて、上述のような受信側ゲストOS31-1へのCPU割当予定時間の合計量が、当該ゲストOS31-1の受信処理に必要な時間以上となったならば(ステップS72)、ゲストOSスケジューラ221は図12のフローチャートに従うスケジュール調整処理を終了する。
このように本実施形態においては、CPU時間割当テーブル222に基づき、受信割り込み発生時点以降にCPU時間が割り当てられる予定(ディスパッチ予定)のゲストOSを順に調べ、送信側ゲストOS31-2用に割り当てられる予定のCPU時間を受信側ゲストOS31-1用に変更する処理を、受信割り込み発生時点以降に当該ゲストOS31-1に割り当てられることになるCPU時間(CPU割当予定時間)の合計が4msを超えるまで繰り返す。
図13は、図12のフローチャートの示す手順に従ってゲストOS31-1〜32-3のうちのゲストOS31-1及び31-2を対象とするスケジュールが調整された際の調整前後のスケジュールの例を示す。
今、図13(a)における時点t20、即ちゲストOS31-2へのCPU時間の割り当て時点t20の直後に、当該ゲストOS31-2からゲストOS31-1への通信を行ったものとする。VMM20の割り込み管理部23は時点t20で受信側ゲストOS31-1へのゲストOS間通信の受信割り込みを発生する。するとゲストOSスケジューラ221によって、CPU時間割当テーブル222の示すスケジュールの調整が次のように行われる。
まず、割り込み時点(現時点)t20直後、時点t21までの2msのCPU時間(つまり現在のスケジュール位置のCPU時間)が割り当てられるゲストOS31-2は、送信側ゲストOSである。この場合、時点t20から時点t21までの2msのCPU時間は、矢印130で示されるように、送信側ゲストOS31-2用から受信側ゲストOS31-1用に変更される。
次の時点t21から時点t22までの2msのCPU時間はゲストOS31-3用に予定されている。このゲストOS31-3は、ゲストOS31-2とゲストOS31-1との間のゲストOS間通信とは無関係である。このため、ゲストOS31-3用に予定されているCPU時間に関してはスケジュール調整は行われない。
次の時点t22から時点t23までの2msのCPU時間は、もともと受信側ゲストOS31-1用に予定されている。したがって、時点t22から時点t23までの対応するスケジュール位置における2msのCPU時間を含めて、割り込み時点(現時点)t20から6msが経過する当該時点t23までに受信側ゲストOS31-1に割り当てられる予定のCPU時間の合計は、当該受信側ゲストOS31-1での割り込み処理直後の受信処理に必要な4msを充足する。この場合、スケジュールの調整は終了する。
第3の変形例によるスケジュール調整では、受信側ゲストOS31-1に追加で割り当てられるCPU時間は連続にはならない。しかし、受信側ゲストOS31-1との間でゲストOS間通信を行う送信側ゲストOS31-2よりも先に、当該受信側ゲストOS31-1にCPU時間が割り当てられるので一般には問題にならない。
上記第3の変形例では、第2の変形例と同様に、説明の簡略化のために、ゲストOS31-1〜31-3に本来割り当てられる予定のCPU時間単位で譲渡(割り当て予定先のゲストOSの変更)が行われることを前提としている。しかし、受信割り込みは、実行中のゲストOSに割り当てられているCPU時間の途中で発生することが一般的である。また、各ゲストOSに割り当てられるCPU時間も、ゲストOS毎に異なることも考えられる。このような場合、ゲストOSスケジューラ221は、各ゲストOSに割り当てられる予定のCPU時間を必要な時間量(例えばゲストOSスケジューラ221が管理する最小時間単位)に分割してスケジュールの調整をすれば良い。
なお、本発明は、上記実施形態またはその変形例そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態またはその変形例に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を形成できる。例えば、実施形態またはその変形例に示される全構成要素から幾つかの構成要素を削除してもよい。
1…物理計算機、10…ハードウェア(HW)、11…CPU(実CPU)、20…仮想計算機マネージャ(VMM)、21…ゲストOS間通信管理部、22…ゲストOS実行管理部、23…割り込み管理部、24…ゲストOSコンテキスト管理部、210…ゲストOS間通信IF、211…ゲストOS間通信監視部、221…ゲストOSスケジューラ、222…CPU時間割当テーブル、223…ディスパッチャ、240…CPU追加割当時間設定部、241-1〜241-3…ゲストOSコンテキスト、242…ゲストOS固有データ、243…割り込み要因レジスタ、244…CPU追加割当時間情報。