(57)【要約】【課題】仮想マシンモニタ（VMM）上で複数の仮想マシン（VM）が連係動作し、VM間が共有メモリで結合するシステムで、人間の操作やVM間の非同期イベント及びOSが原因の障害調査のため、障害発生VMのみ再生し障害再現させ、障害原因調査を可能とする。【解決手段】障害発生VMを再現操作ツールでVM実行管理表に設定し、設定VMを一斉スナップショット通知手段で実行中であれば一時停止してスナップショット記録部に、その時点までの実行内容を記録し、VM入出力記録手段がVMの仮想ハードウェア（HW）の入出力アクセスをイベント記録部に記録し、一斉スナップショット通知手段はスナップショット記録の完了後、再現操作手段の操作で記録VM内容を再現し、入出力再現手段はVMの再現実行中に仮想HWに発生した入出力アクセスをイベント記録部の内容と照合し、合致するものを再現する。【選択図】図１
2014032498.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシンモニタ（VMM）上で複数の仮想マシン（VM）が稼動し、VM間で共有されるVM間共有メモリを備えた分散システムをデバッグする際に用いる障害再現方式において、
再現操作ツールと一斉スナップショット通知手段とVM入出力記録手段と、VM入出力再現手段とVMメモリダンプ手段とを備え、
上記再現操作ツールは障害の発生したVMをVM実行管理表に対象VMとして設定し、
上記一斉スナップショット通知手段はVM実行管理表に設定された対象VMに対し、対象VMが実行中であれば、その実行を一時停止し、その時点までの実行内容をスナップショット記録部に記録し、
上記再現操作ツールは上記一斉スナップショット通知手段よりスナップショット完了通知を受け取り、上記VM実行管理表の対象VMに対し、再現モード実行を設定し、
上記一斉スナップショット通知手段は上記VM実行管理表に再現モード実行が設定されたVMをスナップショット記録部の記録により再現し、
上記VMメモリダンプ手段は上記スナップショットの記録動作時に対象VMの主記憶と上記VM間共有メモリの記録を共有メモリダンプ部にダンプし、
上記VM入出力記録手段は、VMの仮想ハードウェア（HW）に入出力アクセスであるイベントが発生した場合、上記スナップショットの記録動作時にそのイベントをイベント記録部に記録し、
上記VM入出力再現手段は、スナップショット記録部の記録を再現実行中に、仮想HWで発生したイベントをイベントフィルタで抽出し、抽出したイベントを上記イベント記録部のイベントと照合し、合致した場合にイベント記録部に記録されたイベントを再現することを特徴とする計算機の障害再現方式。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、独立して動作する複数の計算機が相互に連携するシステムにおいて計算機で発生した障害を再現する方式に関するものである。
【背景技術】
【０００２】
独立して動作する複数の計算機が相互に連携するシステムにおいてプログラムのデバッグを行うには、計算機間の連係動作があるため、障害の発生した計算機だけでなく正常に動作する計算機も同時に実行しなければならない。このとき、各計算機が単独で行う処理等により動作タイミングが変わってしまい、障害に至る一連の動作を完全に再現することは困難である。そのようなシステムでプログラムの不具合調査を行うためには、システムに障害が発生したときに確実に障害を再現するための障害再現方式が必要となる。
【０００３】
独立して動作する複数の計算機の全ての処理内容を、計算機間を跨いで正確に記録し再現する事は困難である。そこで、従来の障害再現方式では、計算機に入出力されるメッセージのみを記録し、障害を再現する実行時は同一の発生順序でメッセージを入力することにより、調査対象の計算機だけで障害を発生させる手法が、例えば、特開2000−268005号公報（特許文献１）で提案されている。また、別の方法として、メッセージ交換や共有リソースアクセスを行ったタイミングを記録し、障害を再現する実行時に記録したタイミングに合わせてプログラムを動作させることにより、障害を発生させる方法も、例えば、特開平8−171498号公報（特許文献２）に提案されている。
【０００４】
一方、計算機の高速化に伴い、１台の計算機上で複数の仮想マシン(VM: Virtual Machine)を同時に実行させる技術が、例えば、宮本久仁男、大島孝子、平初、長谷川猛著「Xen徹底入門」翔泳社(非特許文献１)に開示されている。各VMは実在するネットワークアダプタをソフトウェアでエミュレーションした仮想ネットワークを通じて相互に連携することができる。また、各VMは仮想マシンモニタ(VMM: Virtual Machine Monitor)に管理されており、実行中の状態を保ったまま実行を一次中断してVMMの持つ二次記憶に保存(スナップショット)しておき、後で中断した時点から再実行する機能を利用することができる。
このような技術を組み合わせれば、複数の計算機が相互にメッセージ交換して連携するシステムであれば、障害が発生する直前にスナップショットを保存し、障害発生までの処理を繰り返し実行する障害再現方式を、１台の計算機上で実現し得ることができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開2000−268005号公報
【特許文献２】特開平8−171498号公報
【非特許文献】
【０００６】
【非特許文献１】宮本久仁男、大島孝子、平初、長谷川猛著「Xen徹底入門」翔泳社、2007年12月19日
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来の計算機の障害再現方式は計算機間で交換されるメッセージを用いて障害の再現を行うものであるため、障害の要因として人間の手動操作のようにシステムと非同期に発生するイベントが絡む場合は、システムの動作と人間の動作のタイミングがずれることにより確実に障害が再現するとは限らないという問題があった。
【０００８】
また、VM技術を用いた計算機上で従来の障害再現方式を実現しようとした場合、各VMが仮想ネットワークを介さずに直接相互に参照できるVM間共有メモリを持つシステムでは、各VMが非同期に共有メモリを更新するため、VM間で交換されるメッセージを正確に再現したとしても、共有メモリの更新が行われず、障害を再現できない問題があった。
さらに、デバッガなどで共有メモリの内容を調査しようとしても、障害の原因となった値と異なる値が取得されてしまう等の問題があった。
また、VM技術を用いた計算機上で障害の再現実行を行う際に、例えば特許文献２のように全てのVMを実行させた場合は、障害の再現実行に必要なリソース量や実行時間及び手間が多くなり効率的にデバッグすることができないという問題があった。
【０００９】
また、従来の障害再現方式は障害再現方式のプログラムが正しく動作することが前提であるため、計算機を制御する基本ソフトウェア(OS: Operating system, オペレーティングシステム)やドライバに障害が発生する場合は、障害を再現させることができても、再現後に調査不可能になるという問題があった。
また、従来の障害再現方式は分散システムを構成する各計算機のOSが異なる場合は、各OS用に再現方式を実装しなければならず、開発工数が大きいという問題があった。
【００１０】
この発明は上記のような問題点を解決するためになされたもので、VMM上で複数のVMが連係動作し、VM間が共有メモリで結合されているシステムにおいて、人間による操作やVM間の非同期なイベント及びOSが原因に含まれる障害を調査するために、障害の発生したVMのみを再生するだけで障害を再現させると共に、ツールを利用してメモリの内容などを確認しながら障害原因の調査を効率的に行う仕組み（技術）を分散システムのOSに関わりなく動作可能な形で提供することを目的としている。
【課題を解決するための手段】
【００１１】
この発明の計算機の障害再現方式は、
仮想マシンモニタ（VMM）上で複数の仮想マシン（VM）が稼動し、VM間で共有されるVM間共有メモリを備えた分散システムをデバッグする際に用いる計算機の障害再現方式において、
再現操作ツールと一斉スナップショット通知手段とVM入出力記録手段とVM入出力再現手段とVMメモリダンプ手段とを備え、
上記再現操作ツールは障害の発生したVMをVM実行管理表に対象VMとして設定し、
上記一斉スナップショット通知手段はVM実行管理表に設定された対象VMに対し、対象VMが実行中であれば、その実行を一時停止し、その時点までの実行内容をスナップショット記録部に記録し、
上記再現操作ツールは上記一斉スナップショット通知手段よりスナップショット完了通知を受け取り、上記VM実行管理表の対象VMに対し、再現モード実行を設定し、
上記一斉スナップショット通知手段は上記VM実行管理表に再現モード実行が設定されたVMをスナップショット記録部の記録により再現し、
上記VMメモリダンプ手段は上記スナップショットの記録動作時に対象VMの主記憶と上記VM間共有メモリの記録を共有メモリダンプ部にダンプし、
上記VM入出力記録手段は、VMの仮想ハードウェア（HW）に入出力アクセスであるイベントが発生した場合、上記スナップショットの記録動作時にそのイベントをイベント記録部に記録し、
上記VM入出力再現手段は、スナップショット記録部の記録を再現実行中に、仮想HWで発生したイベントをイベントフィルタで抽出し、抽出したイベントを上記イベント記録部のイベントと照合し、合致した場合にイベント記録部に記録されたイベントを再現する。
【発明の効果】
【００１２】
この発明の計算機の障害再現方式によれば、
VM入出力記録手段でVMの仮想HWにおける入出力アクセスをイベント記録部に記録し、VM入出力再現手段で再現するようにしたので、VM間通信だけでなく、人間によるキーボード・マウスの操作やVM間共有メモリの読み書きといった、仮想HWを通じて入出力される全てのイベントを再現することができ、障害を再現させることができる。
また、分散システムをVM上で実行していることにより、VMのOSやデバイスドライバに障害の要因があっても、VMMには影響が無いため、VMメモリダンプ手段を用いて障害に至るまでの任意のタイミングで共有メモリに記録されたVMの主記憶をダンプし調査を行うことができる。また、VM上で動作するOSごとに合わせた作りこみが不要となり実装工数が少なくなる効果を得ることができる。
また、実行VM管理表とイベント記録部とイベントフィルターを利用して実行対象のVMのみ実行しても障害を再現できるようにしているため、障害の発生しないVMを実行する必要がなくなり効率的に障害を再現することができる。
また、スナップショット記録部やイベント記録部の記録からVMに対する入出力を再現することができるようにしているので、それらの記録を別の計算機にコピーし、別の計算機のVMM上で実行しても障害を再現することができる。これにより複数の人間が複数の計算機で同時に調査を行うことや、実際に障害が発生した計算機よりも低性能で低コストの計算機を使用しても障害を調査することができる。
【図面の簡単な説明】
【００１３】
【図１】この発明の計算機の障害再現方式を示すシステム構成図である。
【図２】スナップショット記録時の動作の遷移図である。
【図３】障害を記録する際の動作の遷移図である。
【図４】イベント記録の構成例を示す図である。
【図５】障害再現実行時の動作の遷移図である。
【発明を実施するための形態】
【００１４】
実施の形態１．
図１はこの発明の計算機の障害再現方式を示すシステム構成図である。
図１において、VM101a,101b,101cはデバッグ対象の分散システム103を構成する分散システムモジュール103a,103b,103cが動作するVMである。VM101a,101b,101c上ではVMを制御するOS102a,102b,102cが動作している。分散システム103は103a,103b,103cのモジュールに分かれて各VM101a,101b,101c上で動作している。各VM101a〜101cは実際の計算機上で動作するソフトウェアである仮想マシンモニタ(VMM)105がエミュレートしている仮想的な計算機である。VMM105は仮想的なハードウェア(仮想HW)104a,104b,104cをエミュレートしており、VM101a,101b,101cに対する入出力は、仮想HW104a,104b,104cを操作することで行われる。
【００１５】
VMM105にはVM101a,101b,101c間でメッセージ通信を行うためのVM間通信路106がある。また、VMM105は各VM101a,101b,101cの実行状態を二次記憶装置108にあるスナップショット記録部109a,109b,109cに記録し、記録した時点から実行を再開するスナップショット手段107を備えている。スナップショット記録部109a,109b,109cはVM101a,101b,101cに対応して設けられ、VM101a,101b,101cの実行状態が対応するスナップショット記録部109a,109b,109cにそれぞれ記録される。また、VMM105はVM間共有メモリ110を備えており、各VM101a,101b,101cは任意のタイミングでVM間共有メモリ110の任意の場所を読み書きする。
【００１６】
この発明は上記構成の分散システム103を効率的に障害調査するためになされたもので、以下の構成要素を追加することで所定の目的を達成する。一斉スナップショット通知手段111はVMM105上で動作する複数のVM101a〜101cを同時に操作し、スナップショットの記録及び記録されたスナップショットからの再実行を指示する手段である。VM入出力記録手段112は各VM101a〜101cの仮想HW104a〜104cを監視し、発生した入出力を二次記憶装置108にあるイベント記録部120に記録する手段である。共有メモリダンプ部121はスナップショット記録時のVM間共有メモリ110をメモリダンプした内容を記録する二次記憶装置108にある記録領域である。VM入出力再現手段113は不具合調査のため障害の再現実行時に使用するもので、イベント記録部120の記録内容に従って仮想HW104（仮想HW104a〜104cを総称し仮想HW104と表す場合もある）を操作する。実行VM管理表114は障害の再現実行時に実際に動作させるVMの組合せを示す表である。イベントフィルター115は実行VM管理表114を元に、イベント記録部120に記録されているイベントから障害の再現実行対象のVMに関するイベントのみを抽出する手段である。再現操作ツール130はユーザがこれらの手段を使用するために使用するプログラムである。VMメモリダンプ手段116は、計算機に備えられた主記憶部に記憶されたVM101（VM101a〜101cを総称しVM101と表す場合もある）の持つ仮想主記憶の内容を二次記憶装置108に出力する手段である。
【００１７】
次に動作について説明する。
図２はスナップショット記録時の動作の遷移図である。ユーザは再現操作ツール130を使用し、スナップショット対象のVM（即ち、障害の再現実行対象のVM）を実行VM管理表114に書き込む(S101)。また、実行VM管理表114に対象VMのスナップショット開始を書き込み(S102)、スナップショットを開始し、スナップショット完了を待つ(S103)。一斉スナップショット通知手段111はVM管理表114で指示されている全てのVM101の動作を一時停止させ(S111)、その後に順次スナップショット手段107により対応するスナップショット記録部109（スナップショット記録部109a〜109cを総称しスナップショット記録部109と表す場合もある）へVM管理表114で指示されている全てのVM101のスナップショット記録の作成を行う(S112,S121)。一斉スナップショット通知手段111によるVM管理表114で指示されている全てのVM101がスナップショット記録の作成を完了したら、VMメモリダンプ手段116はVM間共有メモリ110の内容を共有メモリダンプ部121にダンプする(S113)。ステップS112とステップS113が操作が完了したら、一斉スナップショット通知手段111はスナップショット完了をイベント記録部120に書き込み(S114)、スナップショット完了を再現操作ツール130に通知する(S115)。
【００１８】
図３は障害を記録する際の動作の遷移図である。再現操作ツール130は記録対象のVM101を実行VM管理表114に書き込む(S201)。次に、再現操作ツール130は記録モードによる実行フラグを実行VM管理表114に書き込む(S202)。一斉スナップショット通知手段111は実行VM管理表114に記載されているVM101が実行中か否かをチェックし(S211)、実行中のVM101があればその実行を終了させる(S212)。次に一斉スナップショット通知手段111は実行VM管理表114に記載されたVM101を順次、対応するスナップショット記録部109にロードする(S213)。ロードが完了したら実行VM管理表114に記載された各VM101を実行状態にする(S214)。
【００１９】
VM101の仮想HW104（仮想HW104a〜104cを総称し仮想HW104と表す場合もある）に入出力アクセスが発生した場合、VM入出力記録手段112が動作する。VM入出力記録手段112は実行VM管理表114の実行モードフラグをチェックしており(S221)、記録モードで実行中に設定されていた場合はイベント記録部120の排他を取得し(S222,S224)、発生したイベントをイベント記録部120に記録する。記録する内容は図４に示されるようにスナップショット復元後の経過時間、操作を行ったVMのID、仮想HW104においてアクセスされた仮想レジスタの種別とアドレス、入出力の方向と入出力された値である。
【００２０】
さらに、入出力がVM間通信路106であれば通信パケットの送信先を解析し、送信先VMのIDも記録する。
さらに、入出力がVM間共有メモリ110であれば操作した領域を共有メモリの先頭からのオフセットで記録する。ユーザは障害が発生したら再現操作ツール130を操作し実行VM管理表114を操作し記録モード実行設定を解除する(S203)。このとき、一斉スナップショット通知手段111は実行中のVMを一時停止状態にし(S215)、VM101の動作や入出力記録の操作を止める。VM101の動作が停止したらイベント記録部120に記録終了を書き込む(S204)。
【００２１】
図５は障害再現実行時の動作の遷移図である。再現操作ツール130は実行VM管理表114に障害の再現実行で使用したいVM101を指定し(S301)、再現モード実行を設定する(S302)。一斉スナップショット通知手段111は再現モード実行対象のVM101が実行中か否かを判定し(S311)、実行中だった場合は対象のVM101の実行を終了する(S312)。その後に実行VM管理表114で指定されたVM101のロードと実行を行う(S313,S314)。VM入出力再現手段113は再現モード実行中の場合のみ動作し(S321)、VM101ごとにイベントフィルター115を使用して該当のVM101で発生したイベントをイベント記録部120から抽出する(S322)。
【００２２】
さらにVM入出力再現手段113は、再現実行時に仮想HW104で発生したイベントとそのイベントの発生したイベント間の相対時間とによりイベント記録部120に記録されたイベントの記録と照合し(S323)、合致する場合は仮想HW104を操作してイベント記録部120に記録された入出力の内容を再現する(S324)。また、デバッグ時に再現操作ツール130が実行VM管理表114に再現モード一時停止の設定を書き込むと(S303)、一斉スナップショット通知手段111は実行VM管理表114で指定された全VM101を一時停止状態にする(S315)。この状態でデバッグ時に再現操作ツール130がVM101の主記憶のダンプを指示すると(S304)、VMメモリダンプ手段116が動作する。VMメモリダンプ手段116はVM101が実行中か否かを判定し(S331)、実行中であればエラーを出力する(S333)。一時停止中であれば、計算機に備えられた主記憶部に記憶されているその時点のVM101の主記憶と共有メモリ110の内容を共有メモリダンプ部121にダンプする(S331),(S332)。ダンプした結果はデバッガ等を利用して分析することができる。
【００２３】
以上のように、VM101の仮想HW104における入出力をVMM105のVM入出力記録手段112を使用して記録し、VM入出力再現手段113を使用して再現するようにしたので、VM間通信だけでなく、人間によるキーボード・マウスの操作やVM間共有メモリの読み書きといった、仮想HW104を通じて入出力される全てのイベントを再現することができ、全自動で障害を再現させることができる。
また、分散システムをVM101上で実行していることにより、VM101のOSやデバイスドライバに障害の要因があっても、VMM105には影響が無いため、VMメモリダンプ手段116を用いて障害に至るまでの任意のタイミングでVM101の主記憶をダンプし調査を行うことができる。また、VM101上で動作するOSごとに合わせた作りこみが不要となり実装工数が少なくなる効果を得ることができる。
【００２４】
また、実行VM管理表114とイベント記録部120とイベントフィルター115を利用して実行対象のVMのみ実行しても障害を再現できるようにしているため、障害の発生しないVMを実行する必要がなくなり効率的に障害を再現することができる。
また、スナップショット記録部109やイベント記録部120の記録からVMに対する入出力を再現することができるようにしているので、それらの記録を別の計算機にコピーし、別の計算機のVMM上で実行しても障害を再現することができる。これにより複数の人間が複数の計算機で同時に調査を行うことや、実際に障害が発生した計算機よりも低性能で低コストの計算機を使用しても障害を調査することができる。
【００２５】
この実施の形態において、スナップショット記録部109やイベント記録部120は二次記憶装置108上だけでなく計算機に備えられた主記憶上にあってもよい。VM間通信路106やVM間共有メモリ110は複数存在してもよい。
また、再現操作ツール130はステップS103によるスナップショットの完了を待つだけでなく、スナップショットの完了を待たずに完了通知を受け取るコールバックを登録する形態であってもよい。また、一斉スナップショット通知手段111は、スナップショット完了後即座に、全てのVMを実行状態に復元する動作をする形態であってもよい。VM間共有メモリ110をダンプする操作(S113)はVMをダンプする操作(S112)の前であっても良い。VM間共有メモリ110を使用しないシステムであればVM間共有メモリ110を共有メモリダンプ部121にダンプする操作(S113)は存在しなくてもよい。
【産業上の利用可能性】
【００２６】
この発明による計算機の障害再現方式は、独立して動作する複数の計算機が相互に連携するシステムのデバッグを行うに際し利用可能である。
【符号の説明】
【００２７】
101,101a,101b,101c；VM、102；OS、103,103a,103b,103c；分散システム、104a,1034,104c；仮想HW、105；VMM、107；スナップショット手段、108；二次記憶装置、109,109a,109b,109c；スナップショット記録部、110；VM間共有メモリ、111；一斉スナップショット通知手段、112；VM入出力記録手段、113；VM入出力再現手段、114；実行VM管理表、115；イベントフィルター、116；VMメモリダンプ手段、120；イベント記録部、121；共有メモリダンプ部、130；再現操作ツール。
【図１】
2014032498.tif 000003
【図２】
2014032498.tif 000004
【図３】
2014032498.tif 000005
【図４】
2014032498.tif 000006
【図５】
2014032498.tif 000007