説明

ゲストOSデバッグ支援方法及び仮想計算機マネージャ

【課題】ゲストOSに対する従来にはない優れたデバッグ環境を実現し、より効果的にデバッグが行えるように支援できるようにする。
【解決手段】VMM(仮想計算機マネージャ)は、第1のゲストOSが動作する第1の仮想計算機実行環境とは異なる第2の仮想計算機実行環境を構築する(S2)。VMMは、第1のゲストOSを、当該第1のゲストOSの実行状態及び当該第1のゲストOSが使用するメモリの状態を含めて、第2の仮想計算機実行環境にコピーすることにより、第1のゲストOSのコピーである第2のゲストOSを第2の仮想計算機実行環境に生成する(S3)。このときVMMは、第2の仮想計算機実行環境に生成された第2のゲストOSを停止状態にして当該第2のゲストOSの状態を保存する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、仮想計算機システムで実行されるゲストOSのデバッグを支援するのに好適なゲストOSデバッグ支援方法及び仮想計算機マネージャに関する。
【背景技術】
【0002】
近年、パーソナルコンピュータ等の計算機システムにおいて、仮想計算機(Virtual Machine)システム(以下、VMシステムと称する)を実現するためのアプリケーション(アプリケーションプログラム)が利用されるようになってきている。このようなアプリケーションは、VM(Virtual Machine)アプリケーションと呼ばれる。
【0003】
さて、計算機システム(実計算機システム)は、一般に、実プロセッサ、各種I/O装置(入出力装置)及びメモリ(図示せず)等のハードウェア(HW)で構成されている。この計算機システムのハードウェア構成上では、ホストOSと呼ばれるOSが動作する。ホストOS上では各種アプリケーションが実行される。このアプリケーションの1つが上記VMアプリケーションである。このVMアプリケーションの実行により、VMシステムを管理する仮想計算機マネージャ(Virtual Machine Manager、以下、VMMと称する)が実現される。VMMは、仮想プロセッサ、仮想I/O装置及び仮想メモリ装置を含む仮想HWを実現する。VMMは、これらの仮想プロセッサ、仮想I/O装置及び仮想メモリ装置をエミュレートして、仮想計算機実行環境を実現する。この仮想計算機実行環境では、ゲストOSと呼ばれるOSが動作する。
【0004】
このように、VMMは一般的な計算機システム内で、仮想的な計算機実行環境(仮想計算機実行環境)を構築して、その中でゲストOSを実行することができる。ここでは、VMMは、OS上で動作する1つのアプリケーション(VMアプリケーション)として実装される。この他に、VMMが、計算機システムの実HW上にVMM機構(HWとしての仮想計算機支援機構)として実装された構成も知られている。このVM機構も、実プロセッサや実I/O装置を仮想化して各ゲストOSに機能として提供する。VM機構の上には、仮想計算機実行環境が当該VM機構により構築される。
【0005】
上述したVMシステムにおいて、ゲストOSは、計算機の実HWの上で動作するかの如く振舞うのが普通である。その結果、ゲストOSに問題があれば当該ゲストOSはパニック(クラッシュ)してしまう。このように、ゲストOSがパニック(クラッシュ)してしまうと、つまりゲストOSに障害が発生すると、従来のVMシステムでは、当該ゲストOSが停止する。この場合、VMMは、障害が発生したゲストOSの停止時の稼動状態、つまりゲストOSの実行イメージを、外部記憶装置にダンプとしてセーブするのが一般的である(例えば、特許文献1参照)。この特許文献1では、外部記憶装置に保存された実行イメージを利用して、障害が発生したゲストOSが提供していたサービスの実行を、待機状態にある別のゲストOSが引き継ぐことが提案されている。
【特許文献1】特開平9−288590号公報(段落0012、段落0021乃至0030)
【発明の開示】
【発明が解決しようとする課題】
【0006】
上記したように、従来のVMシステム(仮想計算機システム)で運用されるゲストOSに何らかの障害が発生して当該ゲストOSが停止した場合、その時点における当該ゲストOSの実行イメージがダンプとして外部記憶装置にセーブされるのが一般的である。そこで、この外部記憶装置にセーブされたダンプを利用して、ゲストOSのデバッグを行うことが考えられる。また、ゲストOSの障害を模擬して、ゲストOSを意図的に停止させ、その時点における当該ゲストOSの実行イメージをダンプとして外部記憶装置にセーブすることにより、ゲストOSのデバッグを行うことも考えられる。
【0007】
しかし、いずれも停止状態にあるゲストOSの静的なデバッグであり、有効なデバッグとはなり得ない。しかも、ゲストOSを停止させて、当該ゲストOSが提供するサービスを待機状態にある他のゲストOSに引き継がせる場合、その引き継ぎにそれなりの時間がかかるのが一般的であり、(短期間であっても)サービスが中断するため好ましくない。
【0008】
本発明は上記事情を考慮してなされたものでその目的は、ゲストOSに対する従来にはない優れたデバッグ環境を実現し、より効果的にデバッグが行えるように支援できる、ゲストOSデバッグ支援方法及び仮想計算機マネージャを提供することにある。
【課題を解決するための手段】
【0009】
本発明の1つの観点によれば、仮想計算機マネージャ(VMM)によって提供される仮想計算機実行環境で動作するゲストOSのデバッグを支援するゲストOSデバッグ支援方法が提供される。この方法は、第1のゲストOSが動作する第1の仮想計算機実行環境とは異なる第2の仮想計算機実行環境を上記仮想計算機マネージャが構築するステップと、上記仮想計算機マネージャが、上記第1のゲストOSを、当該第1のゲストOSの実行状態及び当該第1のゲストOSが使用するメモリの状態を含めて、上記第2の仮想計算機実行環境にコピーすることにより、上記第1のゲストOSのコピーである第2のゲストOSを上記第2の仮想計算機実行環境に生成するステップと、上記第2の仮想計算機実行環境に生成された第2のゲストOSを停止状態にして当該第2のゲストOSの状態を保存するステップとを備えることを特徴とする。
【0010】
このような構成においては、第1の仮想計算機実行環境で動作する第1のゲストOSが、当該第1のゲストOSの実行状態及び当該第1のゲストOSが使用するメモリの状態を含めて、仮想計算機マネージャによって第2の仮想計算機実行環境にコピーされる。これにより、第1のゲストOSのコピーである第2のゲストOSが、第2の仮想計算機実行環境に生成される。この第2の仮想計算機実行環境に生成された第2のゲストOSは、仮想計算機マネージャによって停止状態にされる。これにより、第1のゲストOSのコピー時の状態が、第2のゲストOSの状態として保存される。
【0011】
このように上記の構成においては、仮想計算機マネージャの機能を利用して、第1のゲストOSのコピー時の状態が、第2のゲストOSの状態として保存されることから、この第2のゲストOSをデバッグ対象とすることで、第1のゲストOSのデバッグのための環境(デバッグ環境)を、当該第1のゲストOSを止めることなく実現できる。
【0012】
ここで、第2のゲストOS(第1のゲストOSのコピー)を生成する前に、第1のゲストOSを実行されない状態にするならば、その時点の第1のゲストOSの状態を第2のゲストOSとして確実に保存できる。また、第2のゲストOSの生成後に、第1のゲストOSを実行可能な状態にするならば、当該第1のゲストOS自身がデバッガにより当該第1のゲストOSのコピー時の状態をデバッグ(解析)することができる。勿論、動作状態にある、第1のゲストOS以外のゲストOSが、第1のゲストOSのコピー時の状態をデバッグ(解析)することも可能である。
【0013】
ここで、第2のゲストOS(第1のゲストOSのコピー)の生成が、第1のゲストOSからの要求を受けて仮想計算機マネージャによって行われる構成とすることも、仮想計算機マネージャによって自律的に行われる構成とすることも可能である。また、第2のゲストOS(第1のゲストOSのコピー)の生成を仮想計算機マネージャが自律的に行うには、当該仮想計算機マネージャが第1のゲストOSを監視し、当該第1のゲストOSの異常を検出すると良い。即ち、仮想計算機マネージャが第1のゲストOSの異常を検出した際に、第2のゲストOS(第1のゲストOSのコピー)を生成すると良い。
【0014】
また、第2のゲストOS(第1のゲストOSのコピー)の生成を、第1のゲストOSの異常が検出されるまでの期間、予め定められた時間間隔で、第1のゲストOSのコピー先となる第2の仮想計算機実行環境を、一定数の第2の仮想計算機実行環境の範囲内で切り替えながら実行する構成とすることも可能である。この構成においては、常時複数世代の第1のゲストOSの状態を保存できることから、当該第1のゲストOSで異常が発生した際には、その異常発生直前の複数世代の第1のゲストOSの状態をデバッグ(解析)対象とすることにより、異常(問題)発生時点の状態だけでなく、時間を遡って原因を追求することが可能となる。これは従来のデバッガ(デバッグ環境)では得られない利点であり、ユーザはこの環境を利用することで、効果的に問題の原因を追求することが可能になる。
【発明の効果】
【0015】
本発明によれば、仮想計算機実行環境(第1の仮想計算機実行環境)で動作しているゲストOS(第1のゲストOS)の状態を、仮想計算機マネージャ(VMM)の支援のもとで、もう一つの新たな仮想計算機実行環境(第2の仮想計算機実行環境)上のゲストOS(第2のゲストOS)として保存することができるため、その保存されたゲストOS(第2のゲストOS)をデバッグ(解析)対象とすることが可能なデバッグ環境を、元のゲストOS(第1のゲストOS)を止める(つまりサービスも止める)ことなく実現できる。また、ダンプのための外部記憶装置が使えない状況であっても、新たに第2の仮想計算機実行環境を構築し、そこに第1のゲストOSのコピーを保存することにより、ダンプを取る代わりにすることができ、問題解析の重要な手がかりにすることができる。また、問題発生前数世代のゲストOSの状態を保存した仮想計算機実行環境を残すことにより、問題発生時点の状態だけでなく、時間を遡って原因を追求することが可能となる。
【発明を実施するための最良の形態】
【0016】
以下、本発明の一実施形態につき図面を参照して説明する。
図1は本発明の一実施形態に係る仮想計算機システムを実現する計算機システム1の構成を示すブロック図である。計算機システム1は、実計算機を構成するハードウェア(HW)10を備えている。HW10は、周知のように、実プロセッサ11、各種I/O装置(入出力装置)12及びメモリ(図示せず)を含む。HW10上では、ホストOSと呼ばれるOS20が動作する。OS(ホストOS)20上では仮想計算機アプリケーション(VMアプリケーション)30を含む各種のアプリケーションが実行される。
【0017】
VMアプリケーション30の実行により、仮想計算機マネージャ(Virtual Machine Manager、以下、VMMと称する)31が実現される。VMM31は、仮想計算機システム(VMシステム)の環境(仮想計算機実行環境)を構築する。図1では、2つの仮想計算機実行環境32-1(VM#1),32-2(VM#2)が構築されている例が示されている。仮想計算機実行環境32-i(i=1,2)は、仮想HW環境(仮想HW装置)33-i及びゲストOS実行環境34-iからなる。仮想HW環境33-iは、仮想プロセッサ331-i、仮想I/O装置332-i及び仮想メモリ装置(図示せず)を含む。VMM31は、論理的に、この仮想HW環境33-i内の仮想プロセッサ331-i、仮想I/O装置332-i及び仮想メモリ装置をエミュレートして、仮想計算機実行環境32-i(VM#i)を実現する。VMM31は、仮想計算機実行環境32-i(VM#i)内のゲストOS実行環境34-iに、当該ゲストOS実行環境34-iで動作するOSをゲストOS340-i(#i)としてロードする。VMM31は、仮想HW環境34-iに含まれる仮想メモリ装置にゲストOS340-i(#i)のコードを展開し、その実行コードを仮想プロセッサ331-iのエミュレートという形で実行する。これによりVMM31は、ゲストOS340-i(#i)の処理を進める。ゲストOS340-i(#i)からのI/O要求は、VMM31が仮想I/O装置332-iのエミュレートを行うことにより処理する。ゲストOS340-i(#i)は、自身の状態のコピー(複製)をVMM31に要求するコピー要求機能を有する。VMM31は、ゲストOS340-i(#i)からのコピー要求に応じて、当該ゲストOS340-i(#i)のコピーを生成するゲストOSコピー機能を有する。
【0018】
次に、本実施形態におけるゲストOSのデバッグを支援するためのコピー処理について、図2の動作の概要を示す図及び図3のフローチャートを参照して説明する。
まず、図2に示すように、仮想計算機実行環境32-1(VM#1)上でゲストOS340-1(#1)が稼動しているものとする。同時に、仮想計算機実行環境32-2(VM#2)上でゲストOS340-2(#2)が稼動しているものとする。ゲストOS#1(340-1),#2(340-2)は、自身の状態のコピー(複製)をVMM31に要求するコピー要求部341を備えている。VMM31は、ゲストOS#i(340-i)のコピー要求部341からのコピー要求に応じて、当該ゲストOS#iのコピー(ゲストOS#1’)を生成するゲストOSコピー部311を備えている。ゲストOSコピー部311は、ゲストOS起動/停止部311aを含む。ゲストOS起動/停止部311aは、ゲストOS#iを実行されない状態(停止状態)に設定する機能と、実行されない状態(停止状態)にあるゲストOS#iを実行可能な状態に設定する機能を有する。なお、ゲストOS起動/停止部311aがゲストOSコピー部311から独立して設けられる構成とすることも可能である。
【0019】
さて、VM#1,#2上でゲストOS#1,#2がそれぞれ稼動している状態で、ゲストOS#1のコピー要求部341からVMM31に対して、図2において矢印21で示されるように、当該ゲストOS#1自身の状態のコピー(複製)を依頼するコピー要求が送られたものとする。
【0020】
このように、ゲストOS#1のコピー要求部341からコピー要求が送出されるのは、例えば次の2つのケース
(1) ゲストOS#1自身が、内部に異常な状態を感知した結果、自身のその時点での状態を解析する必要が生じた場合
(2) UNIX(登録商標)系のOSのように、OS内部に矛盾が発生してパニックと呼ばれる状態になって、処理を続けることができなくなったために、実行状態を保存(ダンプ)し後の解析に備える必要が生じた場合
である。
【0021】
例えば、汎用的なOSでは、内部で異常を検出したときには、“assert()”という関数が呼ばれる(ケース(1)の場合)。この関数は、例えば、OSにデバッガがつながっている場合には、当該デバッガに制御を移し、該当するOSの状況を解析することを可能とする。なお、デバッガが使えない場合に、以下で説明する関数“panic()”が呼び出される実装もある。
【0022】
一方、OS内部で矛盾が生じ、処理を続けられないときには、“panic()”という関数が呼ばれる(ケース(2)の場合)。この関数は、重大なエラーの発生をユーザに通知するために、エラーを端末に表示することを可能とする。この関数は、メモリのダンプを外部記憶装置に記録することも可能とする。その後、システムの停止、或いはOSのリブートを可能とする。
【0023】
本実施形態においてゲストOS#1のコピー要求部341は、上述したケース(1)または(2)に該当する状態になった場合に、VMM31に対してコピー要求を送出することができる。ここでは、ゲストOS#1がケース(1)に該当する状態になった結果、当該ゲストOS#1のコピー要求部341からVMM31に対してコピー要求が送出されたものとする。VMM31はコピー要求を受け取ると、図3のフローチャートに示される処理を、次のように行う。
【0024】
まずVMM31のゲストOSコピー部311は、ゲストOS起動/停止部311aを用いて、コピー要求元のゲストOS#1を実行されない状態(停止状態)にして、当該ゲストOS#1の内部状態が変化しないようにする(ステップS1)。次にゲストOSコピー部311は、仮想計算機実行環境構築機能により、仮想計算機システム内に、新たに仮想計算機実行環境32-3(VM#3)を構築する(ステップS2)。この仮想計算機実行環境構築機能を持つ手段(仮想計算機実行環境構築部)を、ゲストOSコピー部311から独立させることも可能である。
【0025】
次にゲストOSコピー部311は、新たな仮想計算機実行環境32-3(VM#3)に、実行されない状態(停止状態)にあるコピー要求元ゲストOS#1の状態(ゲストOS#1の実行状態及びゲストOS#1が使用する全てのメモリの状態)をコピーする(ステップS3)。即ちゲストOSコピー部311は、図2において矢印22で示されるように、仮想計算機実行環境32-3(VM#3)を構築して、当該実行環境32-3(VM#3)にゲストOS#1(340-1)の状態をコピーする。これにより仮想計算機実行環境32-3(VM#3)に、コピー要求元ゲストOS#1(340-1)と全く同一の構造を持つゲストOS#1’(340-3)が生成される。
【0026】
VMM31のゲストOSコピー部311は、上記ステップS3においてコピーを行うと、即ちゲストOS#1のコピーであるゲストOS#1’を生成すると、ゲストOS起動/停止部311aを用いて当該ゲストOS#1’を停止状態にする。ゲストOSコピー部311は、ステップS3を実行すると、ゲストOS起動/停止部311aを用いて、コピー要求元ゲストOS#1を実行可能状態にして、処理を終了する(ステップS4)。
【0027】
このように本実施形態では、ゲストOS#1からVMM31へのコピー要求に応じ、当該VMM31のゲストOSコピー部311によって、ゲストOS#1と全く同一の構造を持つゲストOS#1’が仮想計算機実行環境32-3(VM#1)に生成され、且つ当該ゲストOS#1’が停止した状態に設定される。このゲストOS#1’は、メモリデータや実行状態がコピー要求元のゲストOS#1がコピーを要求したときと全く同じ状態にある。したがって、このゲストOS#1’を解析することにより、その瞬間のゲストOS#1の状態を詳しく調べることができる。
【0028】
さて本実施形態では、ゲストOS#1はコピー時だけ一時的に実行されない状態に設定されるものの、コピーが終了すると実行可能状態にされる。したがってゲストOS#1は、コピー終了後直ちに処理を再開できる。このため、本実施形態においては、ゲストOS#1は、例えばサービスを続けながら、解析したい状況が発生した瞬間にVMM31に対してコピー要求を送出することで、当該ゲストOS#1のコピーであるゲストOS#1'をVMM31によって構築させて、その瞬間の当該ゲストOS#1の状態を保存させ、その後の任意の時点でゲストOS#1'を解析(デバッグ)することができる。この場合、ゲストOS#1を停止せずに、決定的瞬間をデバッグできる。このゲストOS#1'を対象とするデバッグは、図2において矢印23で示されるように、ゲストOS#1自身が行うことも、ゲストOS#1以外のゲストOS、例えば図2において矢印24で示されるように、ゲストOS#2が行うことも可能である。ここで、ゲストOS#1'はゲストOS#1のコピーである。したがって本実施形態においては、解析したい瞬間のゲストOS#1の状態を、当該ゲストOS#1の動作を止めることなく解析することができる。
【0029】
なお、ゲストOS#1からVMM31へのコピー要求が、上記ケース(2)に該当する状態で送出された場合にも、図3のフローチャートに示す手順で、仮想計算機実行環境32-3が生成されて、当該環境32-3にゲストOS#1のパニックを発生した際の状態がゲストOS#1’として保存される。この場合でも、このゲストOS#1'をゲストOS#2からデバッグすることが可能となる。また、コピー終了後にゲストOS#1をリブートするならば、そのリブート後のゲストOS#1からゲストOS#1'をデバッグすることも可能である。本実施形態では、例えば、組み込み用途のシステムで、大きな容量の外部デバイスが接続されておらずダンプが残せないときなどでも、メモリを使用してパニック時の状態をゲストOS#1'として保存でき、その後の任意の時点で当該ゲストOS#1'を解析することで、等価的にゲストOS#1を解析することができる。
【0030】
上記実施形態では、ゲストOS#1からコピー要求が送出された場合を想定している。しかし、ゲストOS#2のような、ゲストOS#1以外のゲストOSからコピー要求が送出された場合にも、同様の動作が行われることは勿論である。
【0031】
[第1の変形例]
上記実施形態では、ゲストOS#1が上記ケース(1)または(2)に該当する状態となった場合に、当該ゲストOS#1からVMM31に送出されるコピー要求に応じて、VMM31によるコピー処理が実行される。しかし、上記の状態を、VMM31自身が検出して、当該VMM31が自律的にコピー処理を行う構成とすることも可能である。
【0032】
そこで、ゲストOS#1からコピー要求が送出されなくても、当該ゲストOS#1の異常時にVMM31が自律的にコピー処理を行うことを可能とした、上記実施形態の第1の変形例について、図面を参照して説明する。
【0033】
図4は、動作の概要を示す、図2に対応する図である。図4において、図2と等価な要素には同一符号を付してある。図4に示すように、VMM31には、任意のゲストOS#i(340-i)が正常に稼動しているか否かを監視するためのゲストOS応答監視部312が追加されている。一方、ゲストOS#1(340-1),#2(340-2)には、コピー要求部341(図2参照)に代えて、それぞれ応答部342が設けられている。
【0034】
応答部342はVMM31に対して、一定期間内に少なくとも1回応答を通知するように構成されている。ゲストOS応答監視部312は、各ゲストOS#iの応答部342からの応答を監視し、一定期間内に少なくとも1回応答が通知される場合に、「ゲストOS#iが正常に動作している」ことを認識する。応答部342は、例えば、VMM31を呼び出すための特別なVMMコールを、ゲストOS#iが一定時間内にコールすることにより実現される。この特別なVMMコールは、例えばゲストOS#iがVMM31のサービスを利用するために用意された、VMM31によって提供される、当該ゲストOS#iが使用可能なインタフェースである。この他に、VMM31とゲストOS#iとの共有変数(ゲストOS#iとVMM31の両者が参照できるメモリ領域)を設けて、ゲストOS#iの応答部342がその値を一定周期でインクリメントなどして変化させるようにしても良い。この場合、VMM31のゲストOS応答監視部312は、共有変数の値の変化によりVMM31が「ゲストOS#iの応答」であると判断し、共有変数の値が一定時間以上更新されなかった場合にゲストOS#iの異常と判断することができる。
【0035】
次に、第1の変形例におけるゲストOSのデバッグを支援するためのコピー処理について、図4に加えて図5のフローチャートを参照して説明する。
VMM31のゲストOS応答監視部312は、監視対象のゲストOS、例えばゲストOS#1及び#2の応答部342から、一定期間内に応答があるかを監視する(ステップS11)。もし、一定期間内に応答がなかったゲストOS#iを検出したならば、VMM31のゲストOS応答監視部312は、当該ゲストOS#iの異常を判断する。ここでは、ゲストOS#1が異常であると判断されたものとする。この場合、ゲストOS応答監視部312からゲストOSコピー部311に、図4において矢印41で示されるように、ゲストOS#1の異常を通知する。
【0036】
するとゲストOSコピー部311は、上記ステップS1と同様に、ゲストOS起動/停止部311aを用いて、ゲストOS#1を実行されない状態(停止状態)にする(ステップS12)。次にゲストOSコピー部311は、上記ステップS2と同様に、仮想計算機システム内に、新たに仮想計算機実行環境VM#3を構築する(ステップS13)。そしてゲストOSコピー部311は、上記ステップS3と同様に、仮想計算機実行環境VM#3に、停止状態にあるゲストOS#1の状態をコピーする(ステップS14)。即ちゲストOSコピー部311は、図4において矢印42で示されるように、仮想計算機実行環境32-3(VM#3)を構築して、当該実行環境32-3(VM#3)にゲストOS#1の状態をコピーする。ステップS14において、ゲストOSコピー部311内のゲストOS起動/停止部311aは、ゲストOS#1のコピー、即ちゲストOS#1’を停止状態にする。ゲストOS起動/停止部311aは、ゲストOS#1のコピー(ゲストOS#1’)を停止状態にすると、図4において矢印43で示されるように、ゲストOS#1(つまりゲストOS応答監視部312によって異常が判断されたゲストOS#1)を強制的にリブートする(ステップS15)。
【0037】
このように第1の変形例によれば、ゲストOS#1内部の問題などにより、当該ゲストOS#1がハングして当該ゲストOS#1の応答部342からVMM31に対して一定期間内に応答を通知できなくなった異常発生時に、VMM31のゲストOS応答監視部312により、その異常状態が検出される。そして、そのゲストOS#1の状態が、VMM31のゲストOSコピー部311によって新しく構築されたVM#3にゲストOS#1のコピー(ゲストOS#1’)として複製され保存される。一方、ゲストOS#1はVMM31によって強制的にリブートされる。これによりゲストOS#1は、リブート後には再びサービス等の必要な処理を再開することができる。またゲストOS#1は、保存されたゲストOS#1の複製を対象として、その状態で、デバッガ或いは専用のツールで解析することができる。つまりゲストOS#1は、当該ゲストOS#1のサービスを継続したまま、当該ゲストOS#1の問題解析を行うことができる。また、この第1の変形例においても、上記実施形態と同様に、ダンプを残す仕組みがないシステムにおいて、問題が発生した状態をゲストOS#1のコピーとしてメモリ上に保存したまま、問題を起こした当該ゲストOS#1をリブートすることがきる。つまり、ゲストOS#1のサービスの継続と同時に、問題解析のための情報を残すことができる。なお、解析は、図4において矢印44で示されるように、リブート後のゲストOS#1自身が行うことも、ゲストOS#1以外のOS、例えば図4において矢印45で示されるように、ゲストOS#2が行うことも可能である。
【0038】
上記第1の変形例では、ゲストOS#1の異常が検出された場合を想定している。しかし、ゲストOS#2のような、ゲストOS#1以外のゲストOSの異常が検出された場合にも、同様の動作が行われることは勿論である。
【0039】
[第2の変形例]
上記実施形態の第1の変形例では、ゲストOS#iの応答部342からの応答をVMM31のゲストOS応答監視部312が監視し、その監視結果から当該ゲストOS#iの異常が検出された場合に、VMM31のゲストOSコピー部311がゲストOS#iのコピーを生成する構成を適用している。しかし、ゲストOS#iの状態に無関係に、ゲストOS#iのコピーを一定期間毎に時系列順に生成し、最新の一定数のコピーを保存する構成とすることも可能である。
【0040】
そこで、ゲストOS#iのコピーを一定期間毎に生成して、最新の一定数のコピーを仮想計算機実行環境に保存するようにした、上記実施形態の第2の変形例について、図面を参照して説明する。
【0041】
図6は、動作の概要を示す、図2に対応する図である。図6において、図2と等価な要素には同一符号を付してある。図6には、ゲストOS340-1(ゲストOS#1)のコピーである、3つのゲストOS340-4,340-5及び340-6として、ゲストOS#1(k−1)、ゲストOS#1(k)及びゲストOS#1(k+1)が、VMM31のゲストOSコピー部311によって生成されている状態が示されている。ここで、k−1,k,k+1(kは1以上の整数)はコピーの世代を表している。つまり、図6は、矢印61,62及び63で示されるように、時点t(k−1),t(k)及びt(k+1)の順に、ゲストOS#1のコピーである、3つのゲストOS#1(k−1)、ゲストOS#1(k)及びゲストOS#1(k+1)が生成されている状態を示す。
【0042】
ゲストOS#1のコピーの保存に利用可能なメモリ等のシステムのリソースには限りがある。このため、システムに許される、保存可能なゲストOS#1のコピーの数には制限がある。図6の例では、保存可能なゲストOS#1のコピーは3つである。したがって、次の時点t(k+2)では、その時点で最も古いコピーであるゲストOS#1(k−1)が削除され、代わりにゲストOS#1(k+2)が作成される。
【0043】
なお、図6では、ゲストOS#1のコピーである、3つのゲストOS#1(k−1)、ゲストOS#1(k)及びゲストOS#1(k+1)が生成される仮想計算機実行環境と、ゲストOS#2は省略されている。
【0044】
次に、第2の変形例におけるゲストOSのコピーについて、図6に加えて図7のフローチャートを参照して説明する。ここでは、説明を簡略化するために、コピー対象がゲストOS#1のみであるものとする。
【0045】
VMM31のゲストOSコピー部311は、一定期間毎に、コピー対象となるゲストOS#1が異常であるかを判定する(ステップS21,S22)。このゲストOS#1が異常であるかを判定する方法については後述する。もし、ゲストOS#1が異常でなければ、ゲストOSコピー部311はゲストOS#1のコピーが既に3世代分メモリに保存されているか判定する(ステップS23)。もし、ゲストOS#1のコピーが未だ3世代分保存されていないならば、ゲストOSコピー部311は、上記実施形態におけるステップS1乃至S3と同様のステップS25乃至S27により、ゲストOS#1を実行されない状態(停止状態)にした後、当該ゲストOS#1のコピーを仮想計算機実行環境に生成して、当該コピーを停止状態にする。そしてゲストOSコピー部311は、ゲストOS#1を実行可能な状態にする(ステップS28)。
【0046】
ゲストOSコピー部311は、ゲストOS#1のコピーが既に3世代分保存されるまでは(ステップS23)、当該ゲストOS#1が異常とならない限り(ステップS22)、一定期間毎に(ステップS21)、上記ステップS25乃至28を繰り返す。そして、図6に示すように、ゲストOS#1のコピーが、ゲストOS#1(k−1)、ゲストOS#1(k)及びゲストOS#1(k+1)の3世代分生成されてメモリに保存されたものとする。この状態で、ゲストOS#1の次のコピーであるゲストOS#1(k+2)を生成する必要がある場合、ゲストOSコピー部311はまず、その時点で最も古いゲストOS#1(k−1)を削除する(ステップS24)。しかる後に、ゲストOSコピー部311は、上記ステップS25乃至S27により、ゲストOS#1の最新のコピーであるゲストOS#1(k+2)を生成する。
【0047】
このようにして、ゲストOS#1が正常である限り(ステップS22)、当該ゲストOS#1についての最新の3つの世代のコピーが常に残される。ここで、ゲストOS#1の処理がパニック等の異常発生により停止する場合を考える。ゲストOSコピー部311は、このゲストOS#1の異常発生を検出する必要がある。ゲストOSコピー部311がゲストOS#1の異常を検出する方法として、例えば次のような方法、即ち
(1) ゲストOS#1が異常発生時に特別なVMMコールを呼び出して、VMM31に異常発生を通知する方法
(2) 上記第1の変形例で適用された、(ゲストOS#1内の応答部342と、VMM31内のゲストOS応答監視部312とを用いて)ゲストOS#1の異常を判断する方法
が適用可能である。
【0048】
ゲストOSコピー部311は、ゲストOS#1の異常を検出すると(ステップS22)、それ以降新たなゲストOS#1のコピーを作らないようにする。その結果、ゲストOS#1の異常が検出された時点において既に保存されている当該ゲストOS#1の3世代のコピーを使って、当該ゲストOS#1を解析することができる。もし、ゲストOS#1(k+1)が生成されて保存された後に、ゲストOS#1の異常が検出されたものとすると、当該ゲストOS#1に異常が発生する直前の時点t(k−1),t(k)及びt(k+1)における当該ゲストOS#1の状態が、それぞれゲストOS#1(k−1)、ゲストOS#1(k)及びゲストOS#1(k+1)に保存されている。ユーザは、これらゲストOS#1の3つのコピーに対して、デバッガ或いはアナライザを用いて、上記第1の変形例と同様にして、ゲストOS#1、またはゲストOS#2のようなゲストOS#1以外のゲストOSにより、当該ゲストOS#1の問題の解析を行うことができる。一度に保存できるゲストOSのコピーの数が多いほど、問題発生時から時間的により遡った時点での状態を観測することができるため、いつの時点で何が起こったのかを知る手がかりが得られる可能性がある。これは従来のデバッグ手法にはなかった利点である。
【0049】
また、デバッガ(のステップ実行等)により、保存されているゲストOS#1の状態を進めることで、何が起こるか再現することも可能である。その場合、例えばゲストOS#1(k+1)から問題発生までの間の様子を調べるためには、予めゲストOS#1(k+1)のコピーを新たに作り、その新しいコピーのゲストOS#1(k+1)の状態を進めるようにすると良い。このようにすると、何回でもゲストOS#1(k+1)の時点のコンテクストから解析を進めることが可能になる。
【0050】
[第3の変形例]
次に、ゲストOS#1のコピーを時系列順に生成して一定数を保存するだけでなく、ゲストOS毎のI/O(入出力)の履歴をも保存するようにした、上記実施形態の第3の変形例について図面を参照して説明する。
【0051】
図8は、動作の概要を示す、図6に対応する図である。図8において、図6と等価な要素には同一符号を付してある。図8には、ゲストOS#1のコピーである3つのゲストOS#1(k−1)、ゲストOS#1(k)及びゲストOS#1(k+1)が生成されている状態に加えて、VMM31内に、I/O履歴バッファ313と、当該I/O履歴バッファ313のコピーである3つのI/O履歴バッファ313(k−1),313(k),313(k+1)が存在する状態が示されている。なお、図8においても、上記図6と同様に、ゲストOS#1(k−1)、ゲストOS#1(k)及びゲストOS#1(k+1)が生成される仮想計算機実行環境と、ゲストOS#2は省略されている。
【0052】
I/O履歴バッファ313は、ゲストOS#1における一定期間毎のI/Oの履歴(I/O履歴)を記録するのに用いられる。ここでは、図7において、矢印71で示されるように、ゲストOS#1のI/O事象が発生すると、つまりVMM31がゲストOS#1のI/Oのために仮想I/O装置332-1のエミュレートを行うと、当該仮想I/O装置332-1により、図7において矢印72で示されるように、ゲストOS#1のI/O履歴(ログ)がI/O履歴バッファ313に記録される。I/O履歴バッファ313はメモリ上に配置される。つまり、I/O履歴は、メモリ上のデータ列として記録される。
【0053】
I/O履歴バッファ313には、例えば以下のフォーマット(ログレコード)
「I/O事象発生時刻、I/Oデバイスの種類、事象の種類、入出力データ」
で、I/Oのログが記録される。「事象の種類」は、「割り込み発生」、「DMA開始/完了」を含む。本実施形態では、データ入出力を伴うI/O事象が発生した場合、可能な限り、そのデータも記録される。ここでは、一定サイズ以下の入出力データは記録される。I/O履歴バッファ313には、上述のログレコードが、時系列順に記録される。
【0054】
ゲストOSコピー部311は、上記第2の変形例と同様の手順で、時点t(k−1),t(k)及びt(k+1)で、図7において矢印73-1,73-2及び73-3に示すように、ゲストOS#1のコピーであるゲストOS#1(k−1)、ゲストOS#1(k)及びゲストOS#1(k+1)を順に生成する際には、図7において矢印74-1,74-2及び74-3に示すように、I/O履歴バッファ313のコピーである、I/O履歴バッファ313(k−1),313(k)及び313(k+1)を併せて生成する。ここで、I/O履歴バッファ313は、当該I/O履歴バッファ313のコピーが生成される都度、クリアされる。したがって、例えばI/O履歴バッファ313(k)には、時点t(k−1)、つまりゲストOS#1(k−1)の生成時から、時点t(k)、つまりゲストOS#1(k)の生成時までに発生したゲストOS#1のI/Oの履歴が記録される。同様に、I/O履歴バッファ313(k+1)には、時点t(k)、つまりゲストOS#1(k)の生成時から、時点t(k+1)、つまりゲストOS#1(k+1)の生成時までに発生したゲストOS#1のI/Oの履歴が記録される。I/O履歴バッファ313,313(k−1),313(k)及び313(k+1)は、ゲストOS、例えばゲストOS#1のデバッガからVMM31に問い合わせることにより、ユーザが参照することが可能なようになっている。
【0055】
次に、ゲストOS#1のコピーに加えて、I/O履歴バッファ313のコピーを利用して行われる、当該ゲストOS#1のデバッグについて説明する。例えばドライバにバグが存在する場合、I/O処理に伴って状態が異常となる虞がある。今、図7において矢印75で示すように、ゲストOS#1(k−1)及びゲストOS#1(k)(つまりゲストOS#1の2つのコピーイメージ(k−1)及び(k))をゲストOS#1のデバッガで解析したところ、ゲストOS#1(k)には、既にバグの影響が確認できたとする。またゲストOS#1(k−1)には、まだバグの影響が見えなかったとする。この場合、ゲストOS#1(k−1)及びゲストOS#1(k)の間、つまりゲストOS#1の2つのコピーイメージ(k−1)及び(k)間でバグの発生があったと考えられる。
【0056】
そこで、ゲストOS#1のコピーイメージ(k−1)と(k)との間に発生したI/O事象を知りたくなる場合がある。この場合、図7において矢印76で示すように、I/O履歴バッファ313(k)をゲストOS#1のデバッガで参照することにより、どのようなI/O事象が発生したか確認することができる。つまり、I/O履歴バッファ313(k)をゲストOS#1の解析のための情報とすることができる。
【0057】
更に、ゲストOS#1のデバッガが、ゲストOS#1(k−1)の状態から、例えばステップ実行によって徐々に処理を進めて、状態の変化を調べるならば、バグ発生の瞬間を観察することができるかも知れない。但し、そのためには、I/Oを含めて、ゲストOS(k−1)の生成時よりゲストOS#1(k)の生成時までの間に発生したゲストOS#1に関係する全ての事象を再現できなければならない。プロセッサの処理に関しては、VMM31が提供する仮想プロセッサ331-1が命令列を実行するだけなので処理の再現の点では問題ない。これに対し、I/Oに関しては、仮想I/O装置332-1がI/O事象を発生させる必要がある。
【0058】
そこで、第3の変形例では、仮想I/O装置332-1は、I/O履歴バッファを参照することにより、そこに記録されたI/O事象を、当該I/O事象がI/O履歴バッフに記録された時刻に再現するように構成されている。このようにすると、I/Oを含めてゲストOS#1の状態の再現が可能になり、より詳しくゲストOS#1の状態を再現することが可能になる。
【0059】
例えば、ゲストOS#1(k−1)をデバッグ対象にして、その状態を進めながらゲストOS#1の状態変化を調べる際には、図7において矢印77で示されるように、仮想I/O装置332-1がI/O履歴バッファ313(k)を参照して、ゲストOS#1の処理再現時に忠実にI/O事象も再現するようにする。I/O履歴バッファ313(k)を参照する理由は、当該I/O履歴バッファ313(k)には、ゲストOS#1(k−1)の生成時から次のゲストOS#1(k)の生成時までの間に発生したゲストOS#1のI/Oの履歴が記録されているためである。
このように第3の変形例においては、I/Oを含めて異常発生までの状況を再現できるようにすることで、問題の解析を一層容易にすることができる。
【0060】
上記実施形態では、VMM31が、OS20上で動作する1つのアプリケーション(VMアプリケーション)として実装される場合を想定している。しかし本発明は、VMM(仮想計算機マネージャ)が、計算機システムの実HW上にVMM機構として実装される場合にも、同様に適用可能である。
【0061】
なお、本発明は、上記実施形態及びその変形例そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態及びその変形例に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態またはその変形例に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態(変形例)に亘る構成要素を適宜組み合せてもよい。
【図面の簡単な説明】
【0062】
【図1】本発明の一実施形態に係る仮想計算機システムを実現する計算機システム1の構成を示すブロック図。
【図2】同実施形態におけるゲストOSのデバッグを支援するためのコピー処理の概要を示す図。
【図3】同実施形態におけるコピー処理の手順を示すフローチャート。
【図4】同実施形態の第1の変形例におけるコピー処理の概要を示す図。
【図5】同第1の変形例におけるコピー処理の手順を示すフローチャート。
【図6】同実施形態の第2の変形例におけるコピー処理の概要を示す図。
【図7】同第2の変形例におけるコピー処理の手順を示すフローチャート。
【図8】同実施形態の第3の変形例におけるコピー処理の概要を示す図。
【符号の説明】
【0063】
1…計算機システム、30…VMアプリケーション、31…VMM(仮想計算機マネージャ)、32-1,32-2,32-3…仮想計算機実行環境、33-1,33-2…仮想HW(ハードウェア)環境、311…ゲストOSコピー部、311a…ゲストOS起動/停止部、312…ゲストOS応答監視部、313…I/O履歴バッファ、313(k−1),313(k),313(k+1)…I/O履歴バッファ(I/O履歴バッファ313のコピー),332-1,332-2…仮想I/O装置、340-1,340-2…ゲストOS、340-3,340-4,340-5,340-6…ゲストOS(ゲストOS#1のコピー)、341…コピー要求部、342…応答部。

【特許請求の範囲】
【請求項1】
仮想計算機マネージャによって提供される仮想計算機実行環境で動作するゲストOSのデバッグを支援するゲストOSデバッグ支援方法であって、
第1のゲストOSが動作する第1の仮想計算機実行環境とは異なる第2の仮想計算機実行環境を前記仮想計算機マネージャが構築するステップと、
前記仮想計算機マネージャが、前記第1のゲストOSを、当該第1のゲストOSの実行状態及び当該第1のゲストOSが使用するメモリの状態を含めて、前記第2の仮想計算機実行環境にコピーすることにより、前記第1のゲストOSのコピーである第2のゲストOSを前記第2の仮想計算機実行環境に生成するステップと、
前記第2の仮想計算機実行環境に生成された前記第2のゲストOSを停止状態にして当該第2のゲストOSの状態を保存するステップと
を具備することを特徴とするゲストOSデバッグ支援方法。
【請求項2】
前記第1のゲストOSのコピーである前記第2のゲストOSを生成する前に、前記仮想計算機マネージャが前記第1のゲストOSを実行されない状態にするステップを更に具備することを特徴とする請求項1記載のゲストOSデバッグ支援方法。
【請求項3】
前記第2のゲストOSを生成した後に、前記仮想計算機マネージャが前記第1のゲストOSを実行可能状態にするステップを更に具備し、
前記第2のゲストOSを生成するステップが前記第1のゲストOSからの要求に応じて実行されることを特徴とする請求項2記載のゲストOSデバッグ支援方法。
【請求項4】
前記第2のゲストOSを生成した後に、前記仮想計算機マネージャが前記第1のゲストOSをリブートするステップを更に具備し、
前記第2のゲストOSを生成するステップが前記第1のゲストOSの異常発生に伴う当該第1のゲストOSからの要求に応じて実行されることを特徴とする請求項2記載のゲストOSデバッグ支援方法。
【請求項5】
前記第1のゲストOSの異常を前記仮想計算機マネージャが検出するステップと、
前記第2のゲストOSを生成した後に、前記仮想計算機マネージャが前記第1のゲストOSを強制的にリブートするステップとを更に具備し、
前記第2のゲストOSを生成するステップが前記第1のゲストOSの異常検出に応じて実行されることを特徴とする請求項2記載のゲストOSデバッグ支援方法。
【請求項6】
前記第2のゲストOSを生成した後に、前記仮想計算機マネージャが前記第1のゲストOSを実行可能状態にするステップと、
前記実行可能状態にされた前記第1のゲストOS、または前記第1の仮想計算機実行環境とは異なる別の仮想計算機実行環境で動作中の別のゲストOSが、停止状態にある前記第2のゲストOSをデバッグするステップと
を更に具備することを特徴とする請求項2記載のゲストOSデバッグ支援方法。
【請求項7】
前記第2のゲストOSを生成した後に、前記仮想計算機マネージャが前記第1のゲストOSを実行可能状態にするステップと、
前記第1のゲストOSの異常を前記仮想計算機マネージャが検出するステップとを更に具備し、
前記第2のゲストOSを生成するステップが、前記第1のゲストOSの異常が検出されるまでの期間、予め定められた時間間隔で、前記第1のゲストOSのコピー先となる前記第2の仮想計算機実行環境を、一定数の第2の仮想計算機実行環境の範囲内で切り替えながら実行される
ことを特徴とする請求項2記載のゲストOSデバッグ支援方法。
【請求項8】
前記第2の仮想計算機実行環境に生成された、前記第1のゲストOSのコピーである前記第2のゲストOSから、そのコピーである第3のゲストOSをデバッグ対象として生成するステップを更に具備することを特徴とする請求項7記載のゲストOSデバッグ支援方法。
【請求項9】
前記第2のゲストOSの生成時点から次の前記第2のゲストOSの生成時点までの間に発生した前記第1のゲストOSの入出力処理の履歴を仮想入出力装置によって入出力履歴バッファに記録するステップと、
前記第1のゲストOSのコピーである前記第2のゲストOSが生成される際に、その時点における入出力履歴バッファのコピーを採取して保存するステップと
を更に具備することを特徴とする請求項7記載のゲストOSデバッグ支援方法。
【請求項10】
前記入出力履歴バッファのコピーに記録されている前記第1のゲストOSの入出力の履歴に基づき、前記第1のゲストOSの入出力発生の事象を再現するステップを更に具備することを特徴とする請求項9記載のゲストOSデバッグ支援方法。
【請求項11】
ゲストOSが動作する仮想計算機実行環境を構築する仮想計算機マネージャにおいて、
第1の仮想計算機実行環境で動作する第1のゲストOSのコピー先となる、前記第1の仮想計算機実行環境とは異なる第2の仮想計算機実行環境を構築する仮想計算機実行環境構築手段と、
前記第1のゲストOSを、当該第1のゲストOSの実行状態及び当該第1のゲストOSが使用するメモリの状態を含めて、前記第2の仮想計算機実行環境にコピーすることにより、前記第1のゲストOSのコピーである第2のゲストOSを前記第2の仮想計算機実行環境に生成するゲストOSコピー手段と、
前記ゲストOSコピー手段によって前記第2の仮想計算機実行環境に生成された前記第2のゲストOSを停止状態にして当該第2のゲストOSの状態を保存するゲストOS停止手段と
を具備することを特徴とする仮想計算機マネージャ。
【請求項12】
前記ゲストOS停止手段は、前記ゲストOSコピー手段により前記第1のゲストOSのコピーである前記第2のゲストOSが生成される前に、前記第1のゲストOSを実行されない状態にし、
前記仮想計算機マネージャは、前記ゲストOSコピー手段により前記第2のゲストOSが生成された後に前記第1のゲストOSを実行可能状態にするゲストOS起動手段を更に具備する
ことを特徴とする請求項11記載の仮想計算機マネージャ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2006−39763(P2006−39763A)
【公開日】平成18年2月9日(2006.2.9)
【国際特許分類】
【出願番号】特願2004−216198(P2004−216198)
【出願日】平成16年7月23日(2004.7.23)
【出願人】(000003078)株式会社東芝 (54,554)
【出願人】(301063496)東芝ソリューション株式会社 (1,478)
【Fターム(参考)】