以下、図面を参照しながら本発明の実施形態について説明する。
図1に、本実施形態に係る高可用システムの概略構成例を示す。
図1に示されるように、本実施形態の高可用システムは、2台のサーバ計算機1,2を含む。
第1のサーバ計算機1は、プロセッサ11、メモリ12、物理デバイスである通信装置(NIC(Network Interface Card))13、物理デバイスであるストレージ(Disk)14、その他のデバイス(物理デバイス)15,16を備えている。なお、図1で示したデバイスは一例であり、デバイスの種類や数は任意である。プロセッサ11内には、パフォーマンスカウンタとして使用可能なカウンタ111が存在する。
同様に、第2のサーバ計算機2は、プロセッサ21、メモリ22、物理デバイスである通信装置23、物理デバイスであるストレージ(Disk)24、その他のデバイス(物理デバイス)25,26を備えている。なお、図1で示した物理デバイスは一例であり、デバイスの種類や数は任意である。プロセッサ21内には、パフォーマンスカウンタとして使用可能なカウンタ211が存在する。
サーバ計算機1とサーバ計算機2は、所定のネットワーク8を介して、通信可能である。
サーバ計算機1(2)において、メモリ12(22)には、仮想計算機(仮想マシン(VM)とも呼ばれる。)内で動作するプログラムのソフトウェアと、データが格納されるメモリ領域150(250)があり、また、ハイパーバイザ(HV)のプログラムと、データが格納されるメモリ領域100(200)がある。
なお、仮想計算機内では、オペレーティングシステム(OS)やアプリケーションプログラム(AP)を動作させることができる。ハイパーバイザ(HV)は、サーバ計算機への入力情報を、仮想計算機(VM)に対する入力に変換する、などの処理を行う。
プロセッサ11は、ハイパーバイザに係るメモリ領域100に格納されたプログラムを読み出して実行し、また、仮想計算機に係るメモリ領域150内のプログラムを読み出して実行する。同様に、プロセッサ21は、ハイパーバイザに係るメモリ領域200に格納されたプログラムを読み出して実行し、また、仮想計算機に係るメモリ領域250内のプログラムを読み出して実行する。
プロセッサ(11,21)は、複数の特権レベルを持つ。ハイパーバイザのプログラムは、該複数の特権レベルのうち最も高い特権レベルで動作し、仮想計算機のプログラムは、該ハイパーバイザの動作する特権レベルに比較して、より低い特権レベルで動作する。仮想計算機のプログラムには、OSとアプリケーションプログラムとが含まれる。仮想計算機のOSは、アプリケーションプログラムに比較して、より高い特権レベルで動作する。
仮想計算機のプログラムが、その実行中に、最も高い特権レベルを必要とする処理を行う場合には、該仮想計算機からハイパーバイザを呼び出し、呼び出したハイパーバイザに、その処理を依頼する。なお、ハイパーバイザの呼び出し方は、プロセッサに仮想化支援機構が搭載されている場合と、それが搭載されていない場合とで、異なる。仮想計算機のOSの処理で特権命令違反を発生させることができる場合には、その特権命令違反をトリガとして、ハイパーバイザが呼び出される。仮想化支援機構が搭載されていない場合には、予め、仮想計算機のOSのコードに、ハイパーバイザ呼び出しのコードが挿入される。あるいは、プログラムがメモリに読み込まれてから実行されるまでの間の適当なタイミングで、コードが走査され、ハイパーバイザ呼び出しのコードが挿入される。本実施形態は、仮想化支援機構の有無を問わない。
以下では、図1の高可用システムにおいて、サーバ計算機1上で動作する仮想計算機をメインとし、サーバ計算機2上で動作する仮想計算機をクローンとして、説明する。
図2に、メイン側となるサーバ計算機1における、ハイパーバイザの機能ブロックの構成例を示す。
図2において、1はメイン側となるサーバ計算機、13は物理デバイスであるNIC、14は物理デバイスであるストレージ(Disk)、15,16は任意の物理デバイス、100はメイン側のハイパーバイザ、150はメイン側の仮想計算機をそれぞれ表している。
なお、図2において、152は、高可用システムには関与しない、他の仮想計算機である。他の仮想計算機の数は、任意である(なお、他の仮想計算機が存在しない場合があっても構わない)。
また、メイン側ハイパーバイザ100において、101は物理デバイス管理部、102は配送先決定部、103は仮想デバイス管理部、104は同期情報送信部、105はカウンタ制御部、106は仮想計算機(VM)実行状態保存部、107は中断情報収集部、108はハイパーバイザサービス実行部、109は復帰情報収集部をそれぞれ表している。
また、仮想デバイス管理部103中の133、137、140はそれぞれNIC、タイマー(Timer)、ストレージ(Disk)の仮想デバイスを表している。
なお、図2で示した物理デバイスや仮想デバイスは一例であり、物理デバイスや仮想デバイスの種類や数は任意である。
メイン側ハイパーバイザ100内の各部の概要は、次の通りである。
物理デバイス管理部101は、物理デバイスを管理する。
配送先決定部102は、物理デバイスの状態とその変化(イベント)の配送先を決定する。
仮想デバイス管理部103は、仮想デバイスを管理する。
同期情報送信部104は、同期情報を送信する。
カウンタ制御部105は、パフォーマンスカウンタの制御を行う。パフォーマンスカウンタとしては、プロセッサ11内のカウンタ111を使用することができる。
VM実行状態保存部106は、仮想計算機(VM)の実行状態を保存する。
中断情報収集部107は、メイン側仮想計算機150の処理の中断時に、必要な処理を行う。
ハイパーバイザサービス実行部108は、本来のハイパーバイザサービスを実行する。
復帰情報収集部109は、メイン側仮想計算機150の処理の復帰時に、必要な処理を行う。
図3に、クローン側となるサーバ計算機2における、ハイパーバイザの機能ブロックの構成例を示す。
図3において、2はクローン側となる計算機、23は物理デバイスであるNIC、24は物理デバイスであるストレージ(Disk)、25,26は任意の物理デバイス、200はクローン側のハイパーバイザ、250はクローン側の仮想計算機をそれぞれ表している。
なお、図3において、252は、高可用システムには関与しない、他の仮想計算機である。他の仮想計算機の数は、任意である(なお、他の仮想計算機が存在しない場合があっても構わない)。
また、クローン側ハイパーバイザ200において、201は物理デバイス管理部、202は配送先決定部、203は仮想デバイス管理部、204は同期情報受信部、205はカウンタ制御部、206はVM実行状態保存部、207は中断状態比較部、208はハイパーバイザサービス実行部、209は復帰状態設定部、210はブレークポイント設定部、212は割り込み情報判定部、213はI/Oバッファ保存部をそれぞれ表している。
また、仮想デバイス管理部203中の233、237、240はそれぞれNIC、タイマー(Timer)、ストレージ(Disk)の仮想デバイスを表している。
なお、図3で示した物理デバイスや仮想デバイスは一例であり、物理デバイスや仮想デバイスの種類や数は任意である。
クローン側ハイパーバイザ200内の各部の概要は、次の通りである。
物理デバイス管理部201は、物理デバイスを管理する。
配送先決定部202は、物理デバイスの状態とその変化(イベント)の配送先を決定する。
仮想デバイス管理部203は、仮想デバイスを管理する。
同期情報受信部204は、同期情報を受信する。
割り込み情報判定部212は、クローン側仮想計算機250の処理の中断時に発生した割り込みが、待ち合わせ対象のものであるかどうかを判定する。
I/Oバッファ保存部213は、待ち合わせまたは保留の割り込みの情報を、一時保存する。
カウンタ制御部205は、パフォーマンスカウンタの制御を行う。パフォーマンスカウンタとしては、プロセッサ21内のカウンタ211を使用することができる。
VM実行状態保存部206は、仮想計算機(VM)の実行状態を保存する。
中断状態比較部207は、クローン側仮想計算機250の処理の中断時に、必要な処理を行う。
ハイパーバイザサービス実行部208は、本来のハイパーバイザサービスを実行する。
復帰状態設定部209は、クローン側仮想計算機250の処理への復帰時に、必要な処理を行う。
ブレークポイント設定部210は、ブレークポイントを設定する。
なお、サーバ計算機1とサーバ計算機2が、それぞれ、メイン側となる構成ための構成(図2)とクローン側となるための構成(図3)を兼ね備え、サーバ計算機1とサーバ計算機2とが、適宜、メインとクローンの役割を交替できるようにしても良い。
以下、図2と図3に示したハイパーバイザの構成・動作を中心に説明する。
メイン側となるサーバ計算機1において、メイン側ハイパーバイザ100は、該サーバ計算機1に接続された物理デバイス(NIC13、Disk14、その他の物理デバイス15,16等)を管理する。また、メイン側ハイパーバイザ100は、仮想計算機(メイン側仮想計算機150、高可用システムには関与しない仮想計算機152)に対して、仮想デバイス(NIC133,タイマー137,ストレージ140等)を提供する。これにより、メイン側仮想計算機150からは、それら仮想デバイスが、あたかも物理デバイスであるかのように、認識される。
クローン側となるサーバ計算機1において、クローン側ハイパーバイザ200は、該サーバ計算機2に接続された物理デバイス(NIC23、Disk24、その他の物理デバイス25,26等)を管理する。また、クローン側ハイパーバイザ200は、仮想計算機(メイン側仮想計算機250、高可用システムには関与しない仮想計算機252)に対して、仮想デバイス(NIC233,タイマー237,ストレージ240等)を提供する。これにより、クローン側仮想計算機250からは、それら仮想デバイスが、あたかも物理デバイスであるかのように、認識される。
なお、ハイパーバイザの実施形態の一つとして、ハイパーバイザの機能の一部を、管理ドメインと呼ばれる特別な仮想計算機に持たせてもよい。
メイン側ハイパーバイザ100は、メイン側サーバ計算機1に接続された物理デバイスの状態に係る情報のうちで、メイン側サーバ計算機1におけるそれぞれの仮想計算機から読める情報と、それらから読めない情報とを、分別する。この分別は、配送先決定部102により行われる。そして、配送先決定部102は、それぞれの仮想計算機から読める情報のみを、それぞれの仮想計算機に対応した仮想デバイスの状態に反映(コピーなど)させる。例えば、メイン側サーバ計算機1のコンソールが、メイン側仮想計算機150に割り当てられている場合においては、キーボード入力の情報が、メイン側仮想計算機150に対応する仮想デバイスの状態に反映されが、一方、該コンソールが、メイン側仮想計算機150に割り当てられていない場合において、該キーボード入力の情報は、メイン側仮想計算機150に対応する仮想デバイスの状態には反映されない。
本実施形態では、メイン側となる計算機1上で稼働するメイン側仮想計算機150の入力のコピーを、クローン側計算機2に伝え、クローン側仮想計算機250に対しても、メイン側仮想計算機150と同一の入力を与えることにより、メイン側仮想計算機150とクローン側仮想計算機250とが同一の挙動を示すよう制御する。その際、メイン側仮想ストレージデバイス140の状態と、クローン側仮想ストレージデバイス240の状態とを一致させながら、メイン側仮想計算機150とクローン側仮想計算機250とが同一の挙動を示すように制御する。
ここで、本実施形態の制御の基本的な考え方について説明する。
図4〜図6は、仮想計算機の処理に対する割り込みのタイミングに関する制御について説明するための図である。図4は、仮想計算機の処理の実行中に、割り込みが発生した場合について、ハイパーバイザ呼び出し又は例外が発生した場合と比較しつつ、説明するための図である。図5は、I/O完了割り込みの待ち合わせに関する制御について説明するための図である。図6は、I/O完了割り込みの保留・待ち合わせに関する制御について説明するための図である。
なお、図4〜図6において、上半部がメイン側サーバ計算機1に係るタイミングチャートを示し、下半分がクローン側サーバ計算機2に係るタイミングチャートを示す。また、図4中、HV1はメイン側ハイパーバイザ、HV2はクローン側ハイパーバイザ、VM1はメイン側仮想計算機、VM2はクローン側仮想計算機をそれぞれ表す。また、図4中、D1はメイン側デバイス(例えば、メイン側ストレージ)、D2はクローン側デバイス(例えば、クローン側ストレージ)をそれぞれ表す。また、図5,6中、S1はメイン側ストレージ、S2はクローン側ストレージをそれぞれ表す。
(A)事象発生のタイミングの一致
一般的に、ハイパーバイザは、仮想計算機の処理の実行中に、「ハイパーバイザ呼び出し」、「例外」、「割り込み」などの事象(イベント)が発生して、該仮想計算機の処理が中断すると、その中断した要因に応じたサービスを実行した後、次に実行すべき仮想計算機を選定して、その仮想計算機に処理を渡す。なお、本実施形態では、ハイパーバイザサービス実行部108,208が、その役割を担当する。
メイン側仮想計算機150とクローン側仮想計算機250とが同一の挙動を示すようにするためには、メイン側仮想計算機150に関して発生した、(1)ハイパーバイザ呼び出し、(2)例外発生、(3)割り込みの発生、などの事象について、(a)発生した順序、及び、(b)発生したタイミングが、メイン側仮想計算機150と同一になるように、クローン側仮想計算機250に対して制御を施す必要がある。
特に、タイミングについては、メイン側仮想計算機150とクローン側仮想計算機250それぞれで実行中の命令列における同一の場所(プログラムカウンタ)で、当該事象が発生するように制御しないと、当該事象が発生した後の両仮想計算機の実行状態の一致が図れなくなる。
以下、各事象発生のタイミングについて説明する。
(1)ハイパーバイザ呼び出し
メイン側仮想計算機150とクローン側仮想計算機250の初期状態が同じであれば、プログラム中のハイパーバイザ呼び出しの発生位置は、決定的に確定している。よって、ハイパーバイザ呼び出しについては、図4のように、同じ遷移状態になる。
(2)例外
メイン側仮想計算機150とクローン側仮想計算機250の初期状態が同じであれば、仮想計算機の処理中に発生する例外(ページのアクセス権例外やゼロ除算例外など)の発生位置は、決定的に確定している。よって、例外については、図4のように、同じ遷移状態になる。
なお、ハイパーバイザの実行状態の違いにより発生する例外については、メイン側仮想計算機150またはクローン側仮想計算機250の実行状態には影響は与えないものと考え、ここでは対象外とする。具体的には、例えば、アクセスしようとしたメモリ領域(ページ)がハイパーバイザによって実ページに配置されていないために、ページ例外が発生したとしても、それは仮想計算機から見た場合は隠蔽されるものなので、仮想計算機の実行状態には影響を与えないと考えられる。
(3)割り込み
たとえメイン側仮想計算機150の初期状態とクローン側仮想計算機250の初期状態とが同じであっても、仮想計算機に対する割り込みに関しては、割り込みが起こるタイミングは決定的ではない。よって、割り込みについては、図4のように、異なる遷移状態になる。
なお、発生した割り込みが、ハイパーバイザに対するものである場合や、高可用システムに関与しない仮想計算機に対するものである場合には、その割り込みはメイン側仮想計算機150またはクローン側仮想計算機250に対して隠蔽されるものなので、メイン側仮想計算機150またはクローン側仮想計算機250の実行状態には影響は与えないものと考え、ここでは対象外とする。
上記から分かるように、事象発生のタイミングを明示的に制御する必要があるのは、割り込みである。以下、割り込み発生のタイミングを合わせる基本的な考え方について説明する。
かりに、メイン側仮想計算機150とクローン側仮想計算機250とを並行して同時に動作させた場合では、どのような方法を採っても割り込みのタイミングを合わせることは不可能である。
(1)メイン側で割り込みを検知し、それと同じ割り込みをクローン側で再現する方法を考える。この場合、メイン側で検知し、その情報をメイン側からクローン側に送り、クローン側でその割り込みを再現する処理を行っている間に、クローン側に再現すべきタイミングを過ぎてしまう。
(2)メイン側の仮想計算機に対する割り込み処理とクローン側の仮想計算機に対する割り込み処理をそれぞれ独立して行えば、上記(1)の遅延は発生しない。しかし、そもそも割り込みが起こるタイミングは決定的ではないため、メイン側で割り込みが発生したタイミングでクローン側に割り込みが発生する保証はない。
このように、メイン側仮想計算機150とクローン側仮想計算機250とを並行して同時に動作させた場合では、割り込みのタイミングを合わせることは不可能である。
そこで、本実施形態では、図5,6に示すように、メイン側仮想計算機150を先行して実行し、それより少し遅延してクローン側仮想計算機250を実行する。
(1)メイン側
メイン側仮想計算機150で、基準になる時点(例えば、前回の仮想計算機への復帰の時点)から割り込みが発生するまでに実行した命令数(実行命令数)を、計測する。
(2)クローン側
上記(1)で計測した実行命令数の箇所で、クローン側仮想計算機250にブレークポイントを設定する。
これにより、メイン側仮想計算機150で起きた割り込みのタイミングを、クローン側仮想計算機250に再現することができる。なお、ハイパーバイザ呼び出しや例外に関しては、プログラム中のハイパーバイザ呼び出しや例外の発生位置は決定的に確定しているため、前述したようなブレークポイントを設定しなくても問題ない。
(B)ストレージI/O完了割り込みの待ち合わせ処理と保留処理
ここで、メイン側ストレージデバイス(14,140)の状態と、クローン側ストレージデバイス(24,240)の状態とを一致させるためには、メイン側仮想計算機150がメイン側仮想ストレージデバイス140に対して発行したI/O要求と同じものを、クローン側仮想ストレージデバイス240に対してクローン側仮想計算機250に発行させる必要がある。なお、I/O要求が発行されるまでにメイン側仮想計算機150とクローン側仮想計算機250が同一の挙動を示していたのであれば、同じI/O要求が発行されるはずである。
さて、メイン側仮想ストレージデバイス140と、クローン側仮想ストレージデバイス240とに対してそれぞれI/O要求が発行されると、メイン側仮想ストレージデバイス140とクローン側仮想ストレージデバイス240との双方からそれぞれI/O完了割り込みが発生することになる。この割り込みが起こるタイミングは非決定的であるため、メイン側に発生したタイミングで、クローン側にI/O完了割り込みの情報を入力するためには、
(1)メイン側仮想ストレージ140からI/O完了割り込み発生したという情報を、メイン側から受信する。
(2)クローン側仮想ストレージ240から、I/O完了割り込みが発生する。
の両方が揃うまで、待ち合わせをしなければ、クローン側に与える割り込みのタイミングを一致させるための条件を整えることができない。
また、ストレージに対して2つ連続でI/O要求を発行したとしても、発行した順番通りにI/O完了割り込みが発生するとは限らない。例えば、要求A・要求Bの順番でI/O要求を発行しても、応答B・応答Aの順番でI/O完了割り込みが発生する可能性がある。このため、上記(2)のクローン側仮想ストレージ240からのI/O完了割り込み発生の待ち合わせの際、直近の待ち合わせ対象でなかったI/O完了割り込みが発生した場合は、その割り込みを、後に発生するであろう待ち合わせのときまで保留しておく必要がある。
なお、クローン側仮想ストレージ240からのI/O完了割り込みを捕捉するまで、I/O完了割り込みにより中断されるまでの処理(例えば図5の実効命令N1の部分の処理)を待たせる方法(第1の方法)と、(ストレージI/O完了割り込みに対応する)割り込みハンドラ呼び出しを待たせる方法(第2の方法)とが可能である。
具体的には、例えば、ストレージI/O完了割り込みに関しては、
(1)メイン側ハイパーバイザ100
メイン側仮想計算機150に対する割り込み発生のタイミングを調べ、クローン側ハイパーバイザ200にその情報を送信する。
(2)クローン側ハイパーバイザ200
(a)上記(1)の情報と、上記(1)の情報(直近の待ち合わせ対象)に応じたクローン側ストレージ24からのI/O完了割り込み発生を待ち合わせする。
(b)クローン側ストレージ24から、上記(1)の情報(直近の待ち合わせ対象)でないI/O完了割り込みが発生した場合は、その割り込みを、後に発生するであろう待ち合わせのときまで、保留しておく。
(c)待ち合わせが完了したら、上記(1)の情報に従って、クローン側ハイパーバイザ200において、クローン側仮想計算機250に対して同一のタイミングで割り込みが発生するように、ブレークポイントを設定して、クローン側仮想計算機250に実行制御を移す。
ことにより、ストレージI/O完了割り込み入力の一致を図ることができる。
なお、ストレージI/O完了割り込みに対応する割り込みハンドラ呼び出しだけ待たせる場合には、ストレージI/O完了割り込みにより中断されるまでの処理(例えば図5の実効命令N1の部分の処理)については、待ち合わせをせずに、ブレークポイントを用いて同一のタイミングで発生させ、続く、割り込みハンドラ呼び出しについて、I/O完了割り込み発生を待ち合わせする。
上述した(A)の制御と(B)の制御とを組み合わせることで、メイン側仮想ストレージデバイス140の状態と、クローン側仮想ストレージデバイス240の状態とを一致させながら、メイン側仮想計算機150とクローン側仮想計算機250とが同一の挙動を示すように制御することができる。
図5は、メイン側仮想計算機150においてI/O要求が発生し、メイン側仮想ストレージ140からのI/O完了割り込みが発生し、また、クローン側仮想計算機250においてI/O要求が発生し、クローン側仮想ストレージ240からのI/O完了割り込みが発生した場合を例示している。この場合、まず、メイン側ハイパーバイザ100において、割り込みに対して実行命令数N1が計測され、メイン側ハイパーバイザ100からクローン側ハイパーバイザ200へ実行命令数N1が伝えられ、クローン側ハイパーバイザ200は、ブレークポイントにより割り込みを再現する。メイン側ハイパーバイザ100において、割り込みに対して実行命令数N2が計測され、メイン側ハイパーバイザ100からクローン側ハイパーバイザ200へ実行命令数N2が伝えられる。クローン側ハイパーバイザ200は、実行命令数N2を受信し、かつ、クローン側仮想ストレージ240からの割り込み発生を待ち合わせて、次の実行を開始する。なお、図5では、実行命令数N1の実行を行った後に、クローン側仮想ストレージ240からの割り込み発生を待ち合わせ、仮想計算機に復帰して、実行命令数N2の実行を行うようにする方法(第2の方法)であったが、その代わりに、実行命令数N1の実行をせずに、クローン側仮想ストレージ240からの割り込み発生を待ち合わせ、仮想計算機に復帰して、実行命令数N1の実行を行うようにする方法(第1の方法)も可能である。
図6は、メイン側仮想計算機150においてI/O要求が、I/O要求A・I/O要求Bの順番で発生し、メイン側仮想ストレージ140からのI/O完了割り込みが、割り込みA・割り込みBの順で発生し、一方、クローン側仮想計算機250においてI/O要求が、メイン側と同じく、I/O要求A・I/O要求Bの順番で発生し、メイン側仮想ストレージ140からのI/O完了割り込みが、メイン側とは逆に、割り込みB・割り込みAの順で発生した場合を例示している。この場合、クローン側ハイパーバイザ200は、先に発生した割り込みBを一旦保留し、割り込みAが発生した後に、割り込みBが発生したものとして扱う。なお、図6では、実行命令数N2の実行を行った後に、クローン側仮想ストレージ240からの割り込みA発生を待ち合わせ、仮想計算機に復帰して、実行命令数N3の実行を行うようにする方法(第2の方法)であったが、その代わりに、実行命令数N2の実行をせずに、クローン側仮想ストレージ240からの割り込みA発生を待ち合わせ、仮想計算機に復帰して、実行命令数N2の実行を行うようにする方法(第1の方法)も可能である。
以下、前述した基本的な考え方に基づき、処理の概要をまとめる。
メイン側仮想計算機150とクローン側仮想計算機250とが同一の挙動を示すようにするためには、メイン側仮想計算機150の実行から少し遅らせてクローン側仮想計算機250を実行し、メイン側サーバ計算機1上で稼動するメイン側仮想計算機150への入力情報のコピーを、クローン側サーバ計算機2に伝え、メイン側仮想計算機150への入力と同じタイミングで、クローン側仮想計算機250に対してメイン側仮想計算機150に対する入力情報と同一の入力情報を与えることにより実現できる。
さらに、メイン側仮想ストレージデバイス140の状態と、クローン側仮想ストレージデバイス240の状態を一致させるためには、メイン側仮想計算機150がメイン側仮想ストレージデバイス140に対して発行したI/O要求と同じものを、クローン側仮想ストレージデバイス240に対してクローン側仮想計算機250に発行させるように制御する。なお、I/O要求が発行されるまでにメイン側仮想計算機150とクローン側仮想計算機250が同一の挙動を示していたのであれば、同じI/O要求が発行されるはずである。
ここで、メイン側仮想ストレージデバイス140と、クローン側仮想ストレージデバイス240とに対してI/O要求を発行すると、メイン側仮想ストレージデバイス140とクローン側仮想ストレージデバイス240との双方からI/O完了割り込みが発生することになる。しかし、この割り込みのタイミングはメイン側とクローン側とで一致するとは限らず、また、I/O要求を発行した順番どおりにI/O完了割り込みが発生するとは限らない。
そこで、ストレージI/O完了割り込みに関しては、クローン側ハイパーバイザ200において、
(a)メイン側から送られてきた同期情報と、その情報(直近の待ち合わせ対象)に応じたクローン側ストレージからのI/O完了割り込み発生を待ち合わせする。
(b)クローン側ストレージから、メイン側から送られてきた同期情報(直近の待ち合わせ対象)でないI/O完了割り込みが発生した場合は、その割り込みを、後に発生するであろう待ち合わせのときまで保留しておく。
(c)待ち合わせが完了したら、メイン側から送られてきた同期情報に従って、クローン側ハイパーバイザ200において、クローン側仮想計算機250に対して同一のタイミングで割り込みが発生するように、ブレークポイントを設定して、クローン側仮想計算機250に実行制御を移すことにより、ストレージI/O完了割り込み入力の一致を図ることができる。
なお、I/O完了割り込みからの仮想計算機への復帰(割り込みのハンドラ呼び出し)だけ、上記待ち合わせを行う方法も可能である。
以下に、図2と図3で示した各機能ブロックの処理を中心にして、上述した処理の詳細を説明する。
本実施形態では、図2のメイン側サーバ計算機1において、メイン側仮想計算機150を先に実行しておく。メイン側仮想計算機150からメイン側ハイパーバイザ100に制御が移る際に、VM実行状態保存部106にてメイン側仮想計算機150の実行状態を保存した後に、中断情報収集部107が仮想計算機の処理の中断要因を調査し、中断要因に応じた同期情報(情報の内容については後述)を収集する。中断要因が割り込みだった場合は、カウンタ制御部105により、メイン側仮想計算機150における割り込み発生のタイミング(具体的には、基準になる時点(例えば、前回の仮想計算機への復帰の時点)からの実行命令数)を調べ、同期情報に加える。同期情報送信部104は、収集された同期情報をクローン側ハイパーバイザ200へ送信する。なお、中断要因の特定が、後述するハイパーバイザサービス実行部108によるサービス実行や、メイン側仮想計算機150の復帰直前まで特定できない場合、復帰に関する同期情報を送信する直前までに、中断要因を特定して同期情報を送信しても良い。
続いて、ハイパーバイザサービス実行部108が、メイン側仮想計算機150の実行中断要因に応じたサービスを実行し、次に実行すべき仮想計算機を選定して、処理を渡す。ここで、次に実行する仮想計算機としてメイン側仮想計算機150を選定した場合に、復帰情報収集部109が、メイン側仮想計算機150を復帰させる際の状態を調査し、復帰時の状態に応じた同期情報(情報の内容については後述)を収集する。同期情報送信部104は、収集された同期情報をクローン側ハイパーバイザ200へ送信する。復帰要因が割り込み処理だった場合は、配送先決定部102がメイン側仮想計算機150の仮想デバイスの状態に入力情報を反映させるとともに、入力情報を同期情報送信部104がクローン側ハイパーバイザ200へ送信する。
一般的に、仮想計算機は複数の仮想デバイスを持っている。従って、入力情報には、反映すべき対象の仮想デバイスを特定するための識別情報と、その仮想デバイスに反映する情報とが含まれる。また、ストレージ読み込み要求に対する読み込みデータ入力などの、要求に応じた入力の場合は、どの要求に対応する入力かを識別する情報が含まれる。
図3のクローン側サーバ計算機2では、同期情報受信部204が受信した前回のメイン側仮想計算機150の復帰の状態の情報を基に、復帰状態設定部209が、クローン側仮想計算機250の復帰状態の準備を行う(詳細な処理内容は後述)。また、次の中断要因が割り込みだった場合は、ブレークポイント設定部210が、メイン側仮想計算機150と同一のタイミングで割り込みが発生するようにブレークポイントを設定して、クローン側仮想計算機250に制御を移す。これにより、クローン側仮想計算機250の状態遷移がメイン側仮想計算機150の状態遷移と同じになる。なお、中断要因がハイパーバイザ呼び出しや例外の場合は、ブレークポイントの設定をせずとも、同じ状態遷移になる。
なお、本実施形態では、メイン側仮想計算機150とクローン側仮想計算機250において、割り込みタイミングを合わせるためのカウンタの制御を、カウンタ制御部105とカウンタ制御部205のそれぞれにて行う。また、このカウンタの値に従って、ブレークポイント設定部210により、ブレークポイントの設定を行う。
クローン側仮想計算機250に制御が移り、やがてクローン側仮想計算機250の処理が中断されると、中断状態比較部207は、クローン側仮想計算機250が指定された要因および位置で処理を中断されているかを判断する。ここで、中断要因がハイパーバイザ呼び出しであった場合で、仮想ストレージに対するI/O要求であった場合は、メイン側仮想ストレージデバイス140の状態と、クローン側仮想ストレージデバイス240の状態とを一致させるために、メイン側仮想計算機150がメイン側仮想ストレージデバイス140に対して発行したI/O要求と同じものを、ハイパーバイザサービス実行部208において、クローン側仮想ストレージデバイス240に対して発行させる。なお、I/O要求が発行されるまでにメイン側仮想計算機150とクローン側仮想計算機250とが同一の挙動を示していたのであれば、同じI/O要求が発行されるはずである。
ここで、クローン側仮想ストレージデバイス240に対してI/O要求を発行すると、クローン側仮想ストレージデバイス240からもI/O完了割り込みが発生することになる。しかし、クローン側に与える入力(ここでは割り込み)のタイミングは、メイン側から送られてきた同期情報に指定されたタイミングでなければ、メイン側仮想計算機150とクローン側仮想計算機250とが同一の挙動を示すようにはならないため、メイン側からの同期(割り込み)情報と、その同期情報(直近の待ち合わせ対象)に応じたクローン側からの同期(割り込み)情報とが揃うまで、待ち合わせを行う必要がある。また、クローン側仮想ストレージデバイス240から、メイン側から送られてきた同期情報(直近の待ち合わせ対象)でないI/O完了割り込みが発生した場合は、その割り込みを、後に発生するであろう待ち合わせのときまで保留しておく必要がある。
このため、割り込み情報判定部212は、クローン側仮想ストレージデバイス240からのI/O完了割り込みであった場合は、割り込み情報を同期情報受信部204に受け渡す。これにより、復帰状態設定部209において、クローン側仮想計算機250の復帰状態の準備を行う際には、復帰要因が仮想ストレージデバイスからのI/O完了割り込みであった場合は、メイン側からの同期情報とクローン側からの同期情報とが揃うまでの待ち合わせおよび保留が実現できる。
また、メイン側仮想計算機150とクローン側仮想計算機250とが同一の挙動を示すように制御するためには、入力情報をクローン側仮想デバイスの状態に反映させるのは、メイン側からの割り込み同期情報とクローン側からの割り込み同期情報との2つの同期情報が揃ってから、復帰状態設定部209が行わなければでなければならないため、入力情報がクローン側仮想デバイスからのI/O完了割り込みにより上書きされるのを防がなければならない。このため、クローン側仮想ストレージデバイス240に対するI/O要求は、I/O要求対象のメモリ領域をI/Oバッファ保存部213に複製し、複製したメモリ領域に対して行う。
なお、上述の同期情報や入力情報の実際のデータ伝達経路は、図1におけるサーバ計算機1が持つNIC1、サーバ計算機1と2をつなぐネットワーク、サーバ計算機2が持つNIC2を通ることになる。また、同期情報や入力情報をやり取りするために、同期情報送信部104と同期情報受信部204には、それぞれ、通信相手を特定するための情報(例えば、IPアドレスやポート番号などの通信相手の計算機のネットワークアドレス)が管理されている。また、例えば、ハイパーバイザが複数の仮想計算機を管理している場合は、どの仮想計算機が該当するかを識別する情報(ID)も、通信相手を特定するための情報に含まれる。なお、通信相手を特定するための情報は、仮想計算機の起動前に手動で設定するようにしてもよいし、別のモジュールが自動的に設定するようにしてもよい。
さて、同期情報送信部104と同期情報受信部204がやり取りする情報の詳細を説明する。同期情報送信部104は、メイン側サーバ計算機1において以下の事象が起きるたびに、その情報を同期情報受信部204に送信する。
(A)メイン側仮想計算機150が発行したハイパーバイザ呼び出し
(B)上記(A)に対応するメイン側ハイパーバイザ100の応答
(C)例外の捕捉
(D)上記(C)に対応するメイン側仮想計算機150における例外ハンドラ呼び出し
(E)割り込みの捕捉
(F)上記(F)に対応するメイン側仮想計算機150における割り込みハンドラ呼び出し
これらのうち、(A)(C)(E)が中断要因であり、(B)(D)(F)が復帰要因である。
まず、メイン側となるサーバ計算機1におけるメイン側ハイパーバイザ100の各事象に対する処理について説明する。
(A)ハイパーバイザ呼び出しは、メイン側仮想計算機150の実行中断要因であるが、メイン側仮想計算機150が決定的に起こす事象でるため、事象の発生のタイミングの情報は必要ではなく、事象の発生の情報のみをクローン側ハイパーバイザ200に伝達すればよい。また、ハイパーバイザ呼び出しは仮想計算機が外部に対して起こす出力であるため、送信する同期情報には、「ハイパーバイザ呼び出しの種類」と「引数の情報」が含まれればよい。さらに、「退避されたレジスタの内容」等を送ってもよい。なお、ハイパーバイザが、メイン側仮想計算機150以外の仮想計算機を複数管理している場合には、メイン側仮想計算機150が起こすハイパーバイザ呼び出しのみが対象であり、その他の仮想計算機が起こすハイパーバイザ呼び出しは対象ではない。
(B)ハイパーバイザ呼び出しに対するメイン側ハイパーバイザ100の応答の場合には、応答の内容がメイン側仮想計算機150の入力となるため、応答の内容をクローン側ハイパーバイザ200に伝達すればよい。送信する同期情報には、「ハイパーバイザ呼び出しの応答情報」と「応答経路の情報」が含まれればよい。応答の内容には、ハイパーバイザと仮想計算機の間のインタフェースの設計によりさまざまな情報(例えば、プロセッサのレジスタ、スタック、ハイパーバイザと仮想計算機が共有するメモリ空間、ハイパーバイザと仮想計算機の間でイベントを伝達する機構におけるイベント識別子など)が含まれる。
(C)例外の発生は、メイン側仮想計算機150の実行中断要因であるが、メイン側仮想計算機150が決定的に起こす事象であるため、事象の発生のタイミングの情報は必要ではなく、事象の発生の情報のみをクローン側ハイパーバイザ200に伝達すればよい。また、例外は仮想計算機が外部に対して起こす出力であるため、送信する同期情報には、「例外の内容」が含まれればよい。なお、メイン側仮想計算機150の実行中に発生する例外であっても、ハイパーバイザによって仮想化されたことに起因するもので、例外がメイン側仮想計算機150の実行から隠蔽されるものについては、対象にならない。例えば、ハイパーバイザによってメモリ割り当てが解除されたメモリ領域に対するメモリアクセスによって起こるページ例外が、これに当たる。このような例外が発生するタイミングや、そもそも発生するか否かは、ハイパーバイザの実行状態によって決まるため、クローン側で発生する保証がない。従って、このような例外は対象外である。また、ハイパーバイザが、メイン側仮想計算機150以外の仮想計算機を複数管理している場合には、メイン側仮想計算機150が起こす例外のみが対象であり、その他の仮想計算機が起こす例外は、対象ではない。
(D)例外に対応するメイン側仮想計算機150の例外ハンドラ呼び出しの場合には、ハイパーバイザとして、その例外に対する特別な処理が不要な場合と、特別な処理が必要な場合とがある。特別な処理が不要な場合は、例外ハンドラの呼び出しをクローン側ハイパーバイザ200に伝えればよい。送信する同期情報には、「例外ハンドラ呼び出しの実行を示す情報」が含まれればよい。一方、特別な処理が必要な場合は、その処理内容をクローン側ハイパーバイザ200に伝えればよい。
(E)割り込みの発生は、メイン側仮想計算機150の実行中断要因であるが、非決定的な事象である。また、メイン側サーバ計算機1に発生する割り込みは、それに対応する処理の担い手が、メイン側ハイパーバイザ100自身である場合と、メイン側仮想計算機150である場合と、メイン側仮想計算機150以外の仮想計算機の場合とがある。このうち、「メイン側仮想計算機150が処理する割り込み」以外の割り込みに関しては、メイン側仮想計算機150の実行から隠蔽されるため、クローン側ハイパーバイザ200に伝達する必要はない。メイン側ハイパーバイザ100は、「メイン側仮想計算機150が処理する割り込み(メイン側仮想計算機150の割り込みハンドラを呼ぶ必要のある事象)」の情報のみを、クローン側ハイパーバイザ200に伝達すればよい。メイン側仮想計算機150が処理する割り込みには、I/O機器のハードウェアにより発生される割り込み以外にも、例えば、ハイパーバイザや他の仮想計算機が、メイン側仮想計算機150に事象を伝達するために発生させるソフトウェア割り込みがある。例えば、Xenにおけるドメイン間割り込みなどがこれに該当する。
さらに、クローン側仮想計算機250側で、同じ処理過程で割り込みによる処理の中断と割り込みハンドラ呼び出しを実現するために、割り込み位置の情報(つまり、メイン側仮想計算機150の割り込みが発生した場所を特定するための情報)として、プログラムカウンタの値や、パフォーマンスカウンタによる実行命令数の情報を収集し、クローン側ハイパーバイザ200に伝達する。
以上から、送信する同期情報には、「割り込みハンドラが起動されるメイン側仮想計算機150の識別情報(ID)」と「割り込み情報(ベクタ番号)」と「割り込み位置の情報」が含まれていればよい。
(F)上記(E)で捕捉した、メイン側仮想計算機150が処理する割り込みのハンドラ呼び出しは、ハンドラ呼び出しの内容がメイン側仮想計算機150の入力となるため、ハンドラ呼び出しに関する情報(割り込み処理に係るデータ内容やベクタ番号、また、ストレージ読み込み要求に対する読み込みデータ入力などの、要求に応じた入力の場合は、どの要求に対応する入力かを識別する情報など)をクローン側ハイパーバイザ200に伝達すればよい。
次に、上記した情報を送られる、クローン側となる計算機2におけるクローン側ハイパーバイザ200の各事象に対する処理について説明する。
クローン側ハイパーバイザ200は、メイン側ハイパーバイザ100から送られてくる同期情報を待ち行列に格納し、待ち行列の先頭の同期情報から順次処理していく。以下に、待ち行列に格納された同期情報に対する処理について説明する。
(A)同期情報がハイパーバイザ呼び出しの場合は、クローン側仮想計算機250においても決定的に起こる事象である。従って、クローン側仮想計算機250に制御を移し、当該ハイパーバイザ呼び出しが発行されるのを待ち、ハイパーバイザ呼び出しが発行されたら、同期情報に記録されているハイパーバイザ呼び出しと同一のものであるかを確認するだけでよい。確認が取れたら、同期情報を待ち行列から削除する。
なお、このハイパーバイザ呼び出しに対する応答は、同期情報に含まれる「(B)ハイパーバイザ呼び出しに対する応答」の内容でクローン側仮想計算機250に対して入力するので、クローン側ハイパーバイザ200内での独自の対応は行わない。ただし、ハイパーバイザ呼び出しが仮想ストレージに対するI/O要求であった場合は、クローン側仮想ストレージ240の状態をメイン側仮想ストレージ140の状態と一致させるために、クローン側仮想ストレージ240に対してI/Oを発行する。この際、クローン側仮想ストレージデバイス240に対するI/O要求は、I/O要求対象のメモリ領域をI/Oバッファ保存部213に複製し、複製したメモリ領域に対して行う。また、I/Oを発行するのは、発行されたハイパーバイザ呼び出しが同期情報に記録されているハイパーバイザ呼び出しと同一のものであるかを確認した後の時点でも、下記(B)の時点でもどちらでもよい。
(B)同期情報がハイパーバイザ呼び出しに対するメイン側ハイパーバイザ100の応答の場合は、メイン側ハイパーバイザ100の応答内容を、そのまま、クローン側仮想計算機250へ返す準備をする。具体的には、同期情報に含まれている応答経路に、応答内容を格納する。ハイパーバイザ呼び出しが仮想ストレージに対するI/O要求であった場合は、上記(A)で発行したI/Oの応答内容と、同期情報に含まれている応答内容とが一致していることを確認し、応答内容を格納する。このとき、格納する応答内容は、上記(A)で発行したI/Oの応答内容でも、同期情報に含まれている応答内容でもどちらでもよい。また、I/Oを発行するのは、上記(A)の時点でも、応答内容をクローン側仮想計算機250へ返す準備をする時点でもどちらでもよい。
なお、同期情報の「(B)ハイパーバイザ呼び出しに対する応答」だけでは、次のメイン側仮想計算機150の実行中断要因が判別できないため、ここでは、すぐにクローン側仮想計算機250には制御を渡さず、この同期情報を待ち行列から削除するだけで、次の同期情報の処理へ進む。
(C)同期情報が例外の捕捉の場合は、クローン側仮想計算機250においても決定的に起こる事象である。従って、クローン側仮想計算機250に制御を移し、当該例外が発生するのを待ち、例外が発生したら、同期情報に記録されている例外と同一のものであるかを確認するだけでよい。確認が取れたら、同期情報を待ち行列から削除する。
なお、この例外に対応する例外ハンドラ呼び出しは、同期情報に含まれる「(D)例外に対応する例外ハンドラ呼び出し」の内容でクローン側仮想計算機250に対して入力するので、クローン側ハイパーバイザ200内での独自の対応は行わない。
(D)同期情報が例外ハンドラ呼び出しの場合、例外ハンドラ呼び出しの準備をする。具体的には、ハイパーバイザとしてその例外に対する特別な処理が不要な場合は、次にクローン側仮想計算機250へ制御が移ったときに、例外ハンドラが呼び出されるように、同期情報に含まれる「例外ハンドラ呼び出しの実行を示す情報」に従って準備する。ハイパーバイザとしてその例外に対する特別な処理が必要な場合は、同期情報に含まれる処理内容に従って、クローン側ハイパーバイザ200で処理を行い、次にクローン側仮想計算機250へ制御が移ったときの準備を整える。
なお、同期情報の「(D)例外に対応する例外ハンドラ呼び出し」だけでは、次のメイン側仮想計算機150の実行中断要因が判別できないため、こでは、すぐにクローン側仮想計算機250には制御を渡さず、この同期情報を待ち行列から削除するだけで、次の同期情報の処理へ進む。
(E)同期情報が割り込み発生の場合、同期情報に含まれる割り込み位置の情報を参照して、擬似割り込みを発生させる場所を決定する。次に、プロセッサの持つブレークポイント機能や、一定命令数実行後に割り込みを発生させるパフォーマンスカウンタ機能などの機能を用いて、擬似割り込みポイントまでの命令数を設定するなどの処置を講じてから、クローン側仮想計算機250に制御を渡し、擬似割り込み地点で発生する例外の発生などを待つ。割り込みの種類が、仮想ストレージからのI/O完了割り込みであった場合には、擬似割り込みを発生させる場所を決定する処理を、同期情報の「(E)割り込み発生」と「クローン側仮想ストレージからのI/O完了割り込み」の2つの同期情報とが揃うまで待ち合わせをする。
(F)同期情報が割り込みハンドラ呼び出しの場合、割り込みハンドラ呼び出しの準備をする。具体的には、次にクローン側仮想計算機250へ制御が移ったときに、割り込みハンドラが呼び出されるように、同期情報に含まれる「割り込みハンドラ呼び出しに関する情報」に従って準備する。割り込みの種類が、仮想ストレージからのI/O完了割り込みであった場合には、割り込みハンドラ呼び出しの準備に必要な情報として、I/Oバッファのデータの内容をクローン側仮想ストレージ240に反映させる。
なお、同期情報の「(D)割り込みハンドラ呼び出し」だけでは、次のメイン側仮想計算機150の実行中断要因が判別できないため、こでは、すぐにクローン側仮想計算機250には制御を渡さず、この同期情報を待ち行列から削除するだけで、次の同期情報の処理へ進む。
以上の一連の処理をメイン側ハイパーバイザ100とクローン側ハイパーバイザ200がそれぞれ協調して行うことにより、メイン側仮想ストレージ140の内容とクローン側仮想ストレージ240の内容を一致させながら、メイン側仮想計算機150とクローン側仮想計算機250への入力が完全に一致し、実行状態の同期を実現できる。
なお、本実施形態では、同期情報送信部104と同期情報受信部204をハイパーバイザ内にあるとしたが、ネットワーク通信に必要な通信プロトコル処理など、仮想計算機側が持つ機能を活用するために、メイン側仮想計算機150やクローン側仮想計算機250や高可用システムには関与しない仮想計算機とは異なる、特別な仮想計算機(管理ドメイン)を、メイン側サーバ計算機1とクローン側サーバ計算機2上にそれぞれ配備し、同期情報送信部104と同期情報受信部204の機能の一部をそれぞれ持たせる構成も可能である。
次に、メイン側となるサーバ計算機1におけるハイパーバイザであるメイン側ハイパーバイザ100の動作手順について説明する。
図7に、メイン側ハイパーバイザ100の動作手順の一例を示す。
なお、図7において、HV2はクローン側ハイパーバイザ200、VM1はメイン側仮想計算機150、VM2はクローン側仮想計算機250をそれぞれ表す。
なお、図7中、点線で囲った部分は、VM1に関与しない割り込みや例外に対応する部分である。
メイン側ハイパーバイザ100において、管理プログラム等からのメイン側仮想計算機150生成要求を受けると、ハイパーバイザサービス実行部108は、メイン側仮想計算機150を生成する(ステップS101)。メイン側仮想計算機150の生成を、クローン側ハイパーバイザ200に通知する(ステップS102)。
カウンタ制御部105は、パフォーマンスカウンタ(以下、カウンタと呼ぶ)を初期化し、実行命令数のカウントを開始し、メイン側仮想計算機150を起動する(ステップS103)。ここで、一旦、メイン側仮想計算機150内の処理に移る(ステップS104)。そして、メイン側仮想計算機150内の処理中に、ハイパーバイザ呼び出し、例外、割り込みが発生すると、メイン側ハイパーバイザ100に処理が戻る。
ハイパーバイザ呼び出し、例外、割り込みが発生して、メイン側ハイパーバイザ100に処理が戻ると、カウンタ制御部105は、カウンタを停止し、その値を退避する(ステップS105)。
次に、中断情報収集部107は、メイン側仮想計算機150の処理が中断した要因を調査する(ステップS106)。
遷移要因(中断要因)がハイパーバイザ呼び出しであった場合は、同期情報送信部104は、呼び出しに関する同期情報を、クローン側ハイパーバイザ200の同期情報受信部204へ送信する(ステップS107)。そして、ハイパーバイザサービス実行部108がハイパーバイザ呼び出しに応じたハイパーバイザ内部の処理を行う(ステップS108)。
遷移要因が例外である場合は、中断情報収集部107は、その例外がハイパーバイザによって仮想化されたことに起因するもので、例外がメイン側仮想計算機150の実行から隠蔽されるものであるかを判断する(ステップS109)。例外がメイン側仮想計算機150の実行から隠蔽されるものの一例としては、例えば、ハイパーバイザによってメモリ割り当てが解除されたメモリ領域に対するメモリアクセスによって起こるページ例外が、これに当たる。その例外がメイン側仮想マシンに関与するものであった場合は、ハイパーバイザ呼び出しのときと同様に、例外に関する同期情報を、クローン側ハイパーバイザ200の同期情報受信部204へ送信し(ステップS110)、ハイパーバイザサービス実行部108がその例外に応じたハイパーバイザ内部の処理を行う(ステップS108)。例外がメイン側仮想計算機150の実行から隠蔽されるものの場合は、同期情報は送信せずに、そのままハイパーバイザサービス実行部108が、その例外の処理を行う(ステップS108)。
遷移要因が割り込みである場合は、例外のときと同様に、中断情報収集部107は、メイン側仮想計算機150に配送される割り込みであるかを判断する(ステップS111)。割り込みがメイン側仮想計算機150に配送される割り込みであるならば、割り込みに関する同期情報を、クローン側ハイパーバイザ200の同期情報受信部204へ送信し(ステップS112)、ハイパーバイザサービス実行部108がその割り込みに応じたハイパーバイザ内部の処理を行う(ステップS108)。割り込みがメイン側仮想計算機150に配送されないものの場合は、同期情報は送信せずに、そのままハイパーバイザサービス実行部108が、その割り込みの処理を行う(ステップS108)。
ステップS108の次に、ハイパーバイザサービス実行部108は、次に制御を移す仮想計算機を決定する(ステップS113)。起動する仮想計算機が、メイン側仮想計算機150かどうかを判断し(ステップS114)、他の仮想計算機であった場合は、一旦、その、他の仮想計算機内の処理を行い(ステップS115)、その後、ステップS108のハイパーバイザ内の処理に戻る。ステップS114にて、起動する仮想計算機がメイン側仮想計算機150であった場合は、ステップS116以降の処理を行う。
ステップS114において、起動する仮想計算機が、メイン側仮想計算機150である場合に、メイン側ハイパーバイザ100において、復帰情報収集部109が、メイン側仮想計算機150を復帰させる際の状態を調査する(ステップS116)。
復帰時の状態が、ハイパーバイザ呼び出しからの復帰である場合は、同期情報送信部104は、クローン側ハイパーバイザ200の同期情報受信部204へ、ハイパーバイザ呼び出しの応答内容を送信し(ステップS117)、ハイパーバイザ呼び出しの応答内容をメイン側仮想計算機150に返す準備を行い(ステップS118)、カウンタをクリアしてカウントを開始し(ステップS119)、ハイパーバイザサービス実行部108が、メイン側仮想計算機150を復帰する(ステップS120)。以降は、ステップS104からの繰り返しである。
復帰時の状態が、例外である場合、復帰情報収集部109は、その例外がハイパーバイザによって仮想化されたことに起因するもので、例外がメイン側仮想計算機150の実行から隠蔽されるものであるかを判断する(ステップS121)。その例外がメイン側仮想マシンに関与するものであった場合は、ハイパーバイザ呼び出しからの復帰のときと同様に、例外ハンドラ呼び出しに関する同期情報を、クローン側ハイパーバイザ200の同期情報受信部204へ送信し(ステップS122)、メイン側仮想計算機150の例外ハンドラ呼び出しの準備を整え(ステップS123)、カウンタをクリアしてカウントを開始し(ステップS119)、ハイパーバイザサービス実行部108が、メイン側仮想計算機150を復帰する(ステップS120)。以降は、ステップS104からの繰り返しである。例外がメイン側仮想計算機150の実行から隠蔽されるものの場合は、同期情報は送信せずに、カウンタ制御部105にて退避されていたカウンタを復帰し、カウントを開始し(ステップS124)、ハイパーバイザサービス実行部108が、メイン側仮想計算機150を復帰する(ステップS120)。以降は、ステップS104からの繰り返しである。
復帰時の状態が、割り込みである場合、例外のときと同様に、復帰情報収集部109は、メイン側仮想計算機150に配送される割り込みであるかを判断する(ステップS125)。割り込みがメイン側仮想計算機150に配送される割り込みであるならば、割り込みハンドラ呼び出しに関する同期情報を、クローン側ハイパーバイザ200の同期情報受信部204へ送信し(ステップS126)、メイン側仮想計算機150の割り込みハンドラ呼び出しの準備を整え(ステップS127)、カウンタをクリアしてカウントを開始し(ステップS119)、ハイパーバイザサービス実行部108が、メイン側仮想計算機150を復帰する(ステップS120)。以降は、ステップS104からの繰り返しである。割り込みがメイン側仮想計算機150に配送されないものの場合は、同期情報は送信せずに、カウンタ制御部105にて退避されていたカウンタを復帰し、カウントを開始し(ステップS124)、ハイパーバイザサービス実行部108が、メイン側仮想計算機150を復帰する(ステップS120)。以降は、ステップS104からの繰り返しである。
次に、クローン側となるサーバ計算機2におけるハイパーバイザであるクローン側ハイパーバイザ200の動作手順について説明する。
図8A及び図8Bに、クローン側ハイパーバイザ200の動作手順の一例を示す。
なお、図8A及び図8Bにおいて、HV1はメイン側ハイパーバイザ100、VM1はメイン側仮想計算機150、VM2はクローン側仮想計算機250をそれぞれ表す。
また、メイン側ハイパーバイザ100から受信した同期情報は、同期情報バッファ(待ち行列)に格納されるものとする。
なお、図8A及び図8Bは、クローン側仮想ストレージからのI/O完了割り込みを捕捉するまで、割り込みハンドラ呼び出しを待たせる第2の方法について例示しているが、第1の方法も可能である。
クローン側ハイパーバイザ200において、ハイパーバイザサービス実行部208は、メイン側ハイパーバイザ100から、メイン側仮想計算機150の生成通知を受信すると(ステップS201)、クローン側仮想計算機250を生成する(ステップS202)。
次に、復帰状態設定部209は、同期情報バッファの先頭の復帰状態を取り出して検査する(ステップS203,S204)。
復帰時の状態が、ハイパーバイザ呼び出しからの復帰である場合、復帰状態設定部209は、ハイパーバイザ呼び出しの応答要求を準備し(ステップS205)、ステップS206に進む。
復帰時の状態が、例外である場合、例外ハンドラ呼び出しを準備し(ステップS207)、ステップS206に進む。
復帰時の状態が、割り込みからの復帰である場合、割り込みの種類がストレージからのI/O完了割り込みのときは(ステップS208)、クローン側仮想ストレージ240からのI/O完了割り込みが揃うまで待ち合わせ(ステップS209)、読み込み要求であった場合は、I/Oバッファ保存部213に保存されている読み込みデータを準備し(ステップS210)、同期情報に含まれるベクタ情報を参照し、ステップS210で準備した読み込みデータを含め、割り込みハンドラ呼び出しを準備し(ステップS211)、ステップS206に進む。なお、ステップS210において、ストレージ書き込み要求に対するI/O完了割り込みの場合でも、I/Oバッファ保存部213に保存している書き込みデータを準備しても今後の動作には影響を与えないため、処理記述の簡便化のために書き込み要求に対するI/O完了割り込みの場合でも、ステップS210の処理を行ってもかまわない。割り込みの種類がストレージからのI/O完了割り込みでなかったときは(ステップS208)、待ち合わせは行わず、同期情報に含まれるベクタ情報を参照し、割り込みハンドラ呼び出しを準備し(ステップS211)、ステップS206に進む。
次に、ステップS206で、中断状態比較部207は、同期情報バッファの先頭の中断状態を取り出して検査する(ステップS206,S212)。
中断情報が割り込みである場合、ブレークポイント設定部210は、メイン側の割り込み発生位置で停止するようにブレークポイントを設定し(ステップS213)、カウントを開始して、クローン側仮想計算機250に制御を移す(ステップS214)。中断情報がハイパーバイザ呼び出しや例外である場合は、ブレークポイントは設定せずに、クローン側仮想計算機250に制御を移す(ステップS214)。
ここで、一旦、クローン側仮想計算機250内の処理に移る(ステップS215)。そして、クローン側仮想計算機250の処理が中断されると、クローン側ハイパーバイザ200に処理が戻る。
クローン側ハイパーバイザ200に処理が戻ると、カウンタを停止し(ステップS216)、中断状態比較部207にて、クローン側仮想計算機250の中断状態と、同期情報バッファの先頭の中断状態情報とを比較する(ステップS217,S218)。ここで、クローン側仮想計算機250に対するストレージI/O完了割り込み(ステップS219)と、クローン側仮想計算機250に関与しない割り込みや例外(ステップS221)が発生した場合も、その中断は所望の停止位置ではないといえる。
比較の結果、所望の停止位置でない場合、カウンタを再開して(ステップS223)、クローン側仮想計算機250内の処理に戻る(ステップS215)。ここで、クローン側仮想計算機250に対するストレージI/O完了割り込み(ステップS219)だった場合は、割り込み情報を同期バッファに送る(ステップS220)。直近の待ち合わせ対象のI/O完了割り込みだったときは、ステップS209での待ち合わせを解除し、直近の待ち合わせ対象のI/O完了割り込みでなかったときは、I/Oバッファ保存部213に割り込み情報を保存し、割り込みを保留する。また、クローン側仮想計算機250に関与しない割り込みや例外(ステップS221)だった場合は、その割り込みや例外に応じたハイパーバイザサービス処理を行い(ステップS222)、クローン側仮想計算機250のカウンタを再開して(ステップS223)、クローン側仮想計算機250内の処理に戻る(ステップS215)。
比較の結果、所望の停止位置である場合、クローン側ハイパーバイザ200内部の処理に移る(ステップS226)。クローン側ハイパーバイザ200内部の処理は、ハイパーバイザサービス実行部208が行う。ここで、中断状態がハイパーバイザ呼び出しで、かつ、ストレージI/O要求であった場合は(ステップS224)、I/O対象データをI/Oバッファ保存部213に複写し、I/O要求を発行する(ステップS225)。
さて、ステップS226の次に、ハイパーバイザサービス実行部208は、制御を移す仮想計算機を決定する(ステップS227)。
起動する仮想計算機が、クローン側仮想計算機250ではなく、他の仮想計算機であった場合(ステップS228)、一旦その仮想計算機内の処理を行い(29)、やがてその仮想計算機内の処理が中断され、ステップS226のクローン側ハイパーバイザ200内の処理に戻る。以降は、ステップS227からの繰り返しである。ここで、仮想計算機の中断要因が、クローン側仮想計算機250に対するストレージI/O完了割り込みだった場合は(ステップS230)、ステップS220と同様に、割り込み情報を同期バッファに送る(ステップS231)。直近の待ち合わせ対象のI/O完了割り込みだったときは、ステップS209での待ち合わせを解除し、直近の待ち合わせ対象のI/O完了割り込みでなかったときは、I/Oバッファ保存部213に割り込み情報を保存し、割り込みを保留する。そして、ステップS226のクローン側ハイパーバイザ200内の処理に戻る。以降は、ステップS227からの繰り返しである。
起動する仮想計算機が、クローン側仮想計算機250である場合(ステップS228)、ステップS203に戻り、これまでの処理を繰り返す。
以下では、ストレージへの書き込みの処理とストレージからの読み込みの処理について、処理の流れに沿って説明する。
最初に、ストレージへの書き込みI/O要求発行の処理について説明する。
図9,10に、ストレージへの書き込みI/O要求発行の処理の概要を示す。
図9は、書き込み要求発行の場合を例示している。なお、図9において、メイン側ハイパーバイザ100からクローン側ハイパーバイザ200へ書き込みデータを送っても良いし、その代わりにデータのハッシュ値等を送っても良いし、それらを送らなくても良い。また、クローン側仮想ストレージ240へ書き込むデータとしては、クローン側仮想計算機250からのデータと、メイン側ハイパーバイザ100からからのデータとのいずれも用いても良い(ただし、メイン側からクローン側へデータを送らない場合には、クローン側仮想計算機250からのデータを用いることになる)。
図10は、応答値入力の場合を例示している。なお、図10において、クローン側仮想計算機250へのハイパーバイザ呼び出しの応答値入力には、クローン側ハイパーバイザ200が得た応答値と、メイン側ハイパーバイザ100からの応答値とのいずれを用いても良い。
さて、まず、メイン側仮想計算機150から書き込み要求のハイパーバイザ呼び出しが行われる。メイン側ハイパーバイザ100は、メイン側仮想ストレージ140に対して書き込みI/O要求を発行するとともに、同期情報として、書き込み要求情報をクローン側ハイパーバイザ200に送信する。クローン側ハイパーバイザ200は、クローン側仮想計算機250の処理が、書き込み要求ハイパーバイザ呼び出しで中断したことを確認し、クローン側仮想計算機250が発行した書き込み要求情報を基に、クローン側仮想ストレージ240に対して書き込みI/O要求を発行する。また、クローン側ハイパーバイザ200は、メイン側ハイパーバイザ100からハイパーバイザ呼び出しに対する応答値入力の同期情報を受け取り、クローン側仮想計算機250に、クローン側仮想ストレージ240に対して発行した書き込みI/O要求の応答値を入力する。
ここで、クローン側仮想計算機250が発行した書き込み要求情報を基に、クローン側仮想ストレージ240に対して書き込みI/O要求を発行するため、メイン側ハイパーバイザ100から送られてくる同期情報に書き込みデータ自体を含めなくてもよい。
また、メイン側仮想計算機150の実行状態の遷移と、クローン側仮想計算機250の実行状態の遷移とが同じであれば、メイン側仮想計算機150からの書き込み要求ハイパーバイザ呼び出しの情報と、クローン側仮想計算機250からの書き込み要求ハイパーバイザ呼び出しの情報とは、同じになるはずである。したがって、クローン側ハイパーバイザ200が発行する書き込みI/O要求の内容(書き込みデータ)は、メイン側ハイパーバイザ100から送られてくる同期情報に含まれるものを使ってもよい。
また、メイン側仮想計算機150の実行状態の遷移と、クローン側仮想計算機250の実行状態の遷移とが同じであることを検証するために、同期情報に含まれる書き込みデータの内容と、クローン側仮想計算機250から発行された書き込みI/O要求の情報に含まれる書き込みデータの内容とを、ハッシュ値等を計算することで照合してもよい。書き込みデータを照合する場合、書き込みデータ自体を同期情報に含めず、ハッシュ値等の計算をメイン側ハイパーバイザ100で行い、ハッシュ値等のみを同期情報に含めてもよい。
また、メイン側仮想計算機150の実行状態の遷移及びストレージの状態と、クローン側仮想計算機250の実行状態の遷移及びストレージの状態とが同じであれば、ハイパーバイザ呼び出しに対する応答値は、同じになるはずである。したがって、図8AのステップS205における、クローン側仮想計算機250に対するストレージI/O要求のハイパーバイザ呼び出しに対する応答には、メイン側ハイパーバイザ100から送られてくる同期情報に含まれる応答値を入力してもよい。
また、メイン側仮想計算機150の実行状態の遷移と、クローン側仮想計算機250の実行状態の遷移とが同じであることを検証するために、メイン側ハイパーバイザ100から送られてくる同期情報に含まれるハイパーバイザ呼び出しに対する応答の情報と、クローン側仮想ストレージ240に書き込みI/Oを発行した際の応答の情報とを照合してもよい。
次いで、ストレージからの書き込みI/O完了割り込みの処理について説明する。
図11に、ストレージからの書き込みI/O完了割り込みの処理の概要を示す。なお、図11において、クローン側仮想計算機250への割り込みハンドラ呼び出しでは、クローン側ハイパーバイザ200が得た割り込み情報と、メイン側ハイパーバイザ100からの割り込み情報とのいずれを用いても良い。
さて、メイン側仮想ストレージ140とクローン側仮想ストレージ240との双方に書き込みI/O要求を発行するため、メイン側仮想ストレージ140とクローン側仮想ストレージ240との双方からI/O完了割り込みが発生する。メイン側仮想計算機150への割り込みハンドラ呼び出しのタイミングで、クローン側仮想計算機250への割り込みハンドラを呼ぶためには、メイン側ハイパーバイザ100から送られてくる同期情報(割り込み情報)と、クローン側仮想ストレージ240からのI/O完了割り込み情報とが揃うまで待ち合わせをし、(同期情報に含まれる)メイン側仮想計算機150に起こった割り込みのタイミングで、クローン側仮想計算機250に対して割り込み情報を入力する必要がある。
ここで、メイン側仮想計算機150の実行状態の遷移及びストレージの状態と、クローン側仮想計算機250の実行状態の遷移及びストレージの状態とが同じであれば、I/O完了割り込みの情報は、同じになるはずである。したがって、クローン側仮想計算機250に入力する割り込みハンドラ呼び出しに関する情報は、メイン側ハイパーバイザ100から送られてくる同期情報に含まれるものを使ってもよい。
また、メイン側仮想計算機150の実行状態の遷移と、クローン側仮想計算機250の実行状態の遷移とが同じであることを検証するために、同期情報に含まれる割り込み情報とクローン側仮想ストレージ240からの割り込み情報とを照合してもよい。
次いで、ストレージからの読み込みI/O要求発行の処理について説明する。
図12,13に、ストレージからの読み込みI/O要求発行の処理の概要を示す。
図12は、読み込み要求発行の場合を例示している。なお、図12においては、クローン側仮想ストレージ240に対して、I/O要求を発行しても良いし、発行しなくても良い。
図13は、応答値入力の場合を例示している。なお、図13においては、クローン側仮想計算機250へのハイパーバイザ呼び出しの応答値入力には、クローン側ハイパーバイザ200が得た応答値と、メイン側ハイパーバイザ100からの応答値とのいずれを用いても良い(ただし、図12でI/O要求を発行しない場合には、メイン側ハイパーバイザ100からの応答値を用いることになる)。
さて、まず、メイン側仮想計算機150から読み込み要求のハイパーバイザ呼び出しが行われる。メイン側ハイパーバイザ100はストレージに対して読み込みI/O要求を発行するとともに、同期情報として、読み込み要求情報をクローン側ハイパーバイザ200に送信する。クローン側ハイパーバイザ200は、クローン側仮想計算機250の処理が読み込み要求ハイパーバイザ呼び出しで中断したことを確認し、クローン側仮想計算機250が発行した読み込み要求情報を基に、クローン側仮想ストレージ240に対して読み込みI/O要求を発行する。また、クローン側ハイパーバイザ200は、メイン側ハイパーバイザ100からハイパーバイザ呼び出しに対する応答値入力の同期情報を受け取り、クローン側仮想計算機250に、クローン側仮想ストレージ240に対して発行した読み込みI/O要求の応答値を入力する。
ここで、メイン側仮想計算機150の実行状態の遷移と、クローン側仮想計算機250の実行状態の遷移とが同じであることを検証するために、同期情報に含まれる読み込み要求情報と、クローン側仮想計算機250から発行された読み込み要求の情報とを照合してもよい。
また、読み込み要求は、クローン側仮想ストレージ240に対して発行しなくても、ストレージの内容に影響を与えない。したがって、クローン側仮想ストレージ240に対して読み込み要求を発行せず、図8AのステップS209とステップS210において、クローン側仮想計算機250に入力する割り込みハンドラ呼び出しに必要な情報は、同期情報に含まれる情報のものを使用してもよい。
また、メイン側仮想計算機150の実行状態の遷移及びストレージの状態と、クローン側仮想計算機250の実行状態の遷移及びストレージの状態とが同じであれば、ハイパーバイザ呼び出しに対する応答値は、同じになるはずである。したがって、図8AのステップS205における、クローン側仮想計算機250に対するストレージI/O要求のハイパーバイザ呼び出しに対する応答には、メイン側ハイパーバイザ100から送られてくる同期情報に含まれる応答値を入力してもよい。
また、メイン側仮想計算機150の実行状態の遷移と、クローン側仮想計算機250の実行状態の遷移とが同じであることを検証するために、メイン側ハイパーバイザ100から送られてくる同期情報に含まれるハイパーバイザ呼び出しに対する応答の情報と、クローン側仮想ストレージ240に読み込みI/Oを発行した際の応答の情報とを照合してもよい。
次いで、ストレージからの読み込みI/O完了割り込みの処理について説明する。
図14,15に、ストレージからの読み込みI/O完了割り込みの処理の概要を示す。
図14は、図12においてクローン側仮想ストレージ240に読み込みI/O要求を発行する場合を例示している。なお、図14において、メイン側ハイパーバイザ100からクローン側ハイパーバイザ200へ読み込みデータを送っても良いし、その代わりにデータのハッシュ値等を送っても良いし、それらを送らなくても良い。また、クローン側仮想計算機250への割り込みハンドラ呼び出しでは、クローン側ハイパーバイザ200が得た割り込み情報と、メイン側ハイパーバイザ100からの割り込み情報とのいずれを用いても良く、また、クローン側ハイパーバイザ200が得た読み込みデータと、メイン側ハイパーバイザ100からの読み込みデータとのいずれを用いても良い(ただし、メイン側からクローン側へデータを送らない場合には、クローン側ハイパーバイザ200が得た割り込み情報を用いることになる)。
図15は、図12においてクローン側仮想ストレージ240に読み込みI/O要求を発行しない場合を例示している。なお、図15では、メイン側ハイパーバイザ100からクローン側ハイパーバイザ200へ読み込みデータを送る必要がある。また、クローン側仮想計算機250への割り込みハンドラ呼び出しでは、メイン側ハイパーバイザ100からの割り込み情報・読み込みデータを用いる。なお、I/O完了割り込みは起こらないので、I/O完了割り込み発生の待ち合わせは不要である。
さて、メイン側仮想ストレージ140とクローン側仮想ストレージ240との双方に読み込みI/O要求を発行するため、メイン側仮想ストレージ140とクローン側仮想ストレージ240との双方からI/O完了割り込みが発生する。メイン側仮想計算機150への割り込みハンドラ呼び出しのタイミングで、クローン側仮想計算機250への割り込みハンドラを呼ぶためには、メイン側ハイパーバイザ100から送られてくる同期情報(割り込み情報)と、クローン側仮想ストレージ240からのI/O完了割り込み情報とが揃うまで待ち合わせをし、(同期情報に含まれる)メイン側仮想計算機150に起こった割り込みのタイミングでクローン側仮想計算機250に対して割り込み情報を入力する必要がある。
ここで、メイン側仮想計算機150の実行状態の遷移及びストレージの状態と、クローン側仮想計算機250の実行状態の遷移及びストレージの状態とが同じであれば、ストレージからの読み込みデータは、同じになるはずである。したがって、クローン側仮想計算機250に入力する読み込みデータは、メイン側ハイパーバイザ100から送られてくる同期情報に含まれるものを使ってもよい。
また、メイン側仮想計算機150の実行状態の遷移と、クローン側仮想計算機250の実行状態の遷移とが同じであることを検証するために、同期情報に含まれる読み込みデータの内容と、クローン側仮想ストレージ240から発生した読み込みI/O完了割り込み情報に含まれる読み込みデータの内容とを、ハッシュ値等を計算することで照合してもよい。照合する場合、読み込みデータ自体を同期情報に含めず、ハッシュ値等の計算をメイン側ハイパーバイザ100で行い、ハッシュ値等のみを同期情報に含めてもよい。
また、読み込み要求は、クローン側仮想ストレージ240に対して発行しなくても、ストレージの内容に影響を与えない。したがって、クローン側仮想計算機250に入力する割り込みハンドラ呼び出しに必要な情報は同期情報に含まれる情報のものを使用し、図8BのステップS225において、クローン側仮想ストレージ240に対して読み込み要求を発行しなくてもよい。この場合、クローン側仮想ストレージ240からのI/O完了割り込みは発生しないので、クローン側仮想ストレージ240からのI/O完了割り込みの待ち合わせ処理は行う必要はない。
また、メイン側仮想計算機150の実行状態の遷移及びストレージの状態と、クローン側仮想計算機250の実行状態の遷移及びストレージの状態とが同じであれば、I/O完了割り込みの情報は、同じになるはずである。したがって、クローン側仮想計算機250に入力する割り込みハンドラ呼び出しに関する情報は、メイン側ハイパーバイザ100から送られてくる同期情報に含まれるものを使ってもよい。
また、メイン側仮想計算機150の実行状態の遷移と、クローン側仮想計算機250の実行状態の遷移とが同じであることを検証するために、同期情報に含まれる割り込み情報とクローン側仮想ストレージ240からの割り込み情報とを照合してもよい。
以上のように本実施形態によれば、独立した2台の計算機上で稼動する仮想計算機の実行状態が同一になるとともに、ストレージの内容が同一になり、二重化が達成される。このため、メイン側仮想計算機の稼動する計算機またはストレージが、故障等により停止した場合でも、クローン側仮想計算機が同じ処理を継続でき、これによって、故障を隠蔽することができる。このように、本実施形態により、仮想計算機とストレージの可用性を向上させることができる。
なお、以上の各機能は、ソフトウェアとして記述し適当な機構をもったコンピュータに処理させても実現可能である。
また、本実施形態は、コンピュータに所定の手順を実行させるための、あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるためのプログラムとして実施することもできる。加えて該プログラムを記録したコンピュータ読取り可能な記録媒体として実施することもできる。
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
1,2…サーバ計算機、11,21…プロセッサ、12,22…メモリ、13,23…通信装置、14,24…ストレージ、15,16,25,26…デバイス、100…メイン側ハイパーバイザ、101,201…物理デバイス管理部、102,202…配送先決定部、103,203…仮想デバイス管理部、104…同期情報送信部、105,205…カウンタ制御部、106,206…仮想計算機実行状態保存部、107…中断情報収集部、108,208…ハイパーバイザサービス実行部、109…復帰情報収集部、111,211…カウンタ、133,233…仮想デバイス(NIC)、137,237…仮想デバイス(タイマー)、140,240…仮想デバイス(ストレージ)、150…メイン側仮想計算機、152,252…他の仮想計算機、200…クローン側ハイパーバイザ、204…同期情報受信部、207…中断状態比較部、209…復帰状態設定部、210…ブレークポイント設定部、212…割り込み情報判定部、213…I/Oバッファ保存部、250…クローン側仮想計算機