(57)【要約】【課題】メモリダンプの採取の負担を軽減することが可能な情報処理装置を提供する。【解決手段】ゲストドライバ１２１は、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４に割り当てられた仮想バス２１に割り込みを発生させることにより、ホストＯＳ１１に障害の発生を通知する。ホストＯＳ１１は、割込みが発生した仮想バス２１の仮想化ＩＤに基づいて仮想化ＩＤ／プロセス一覧１１７からプロセス識別情報を求め、プロセス識別情報に基づいて仮想マシン／プロセス一覧１１８から障害が発生したゲストＯＳ１２が動作する仮想マシン１２４を求め、そのメモリ１２３の内容を、保存状態格納領域１１４に採取する。【選択図】図２
2015132979.tif 000002
【特許請求の範囲】
【請求項１】
複数の仮想マシンが動作する情報処理装置であって、
前記複数の仮想マシンを制御する仮想マシン制御部と前記複数の仮想マシンそれぞれとを結ぶ複数の仮想バスを識別する複数の仮想バス識別情報と、前記複数の仮想マシンにそれぞれ対応した前記仮想マシン制御部のプロセスを識別する複数のプロセス識別情報との対応関係である第１対応情報を記憶する第１の記憶手段と、
前記複数のプロセス識別情報と、前記複数の仮想マシンを識別する複数の仮想マシン識別情報との対応関係である第２対応情報を記憶する第２の記憶手段と、
前記複数の仮想マシンに含まれる第１の仮想マシンで動作する第１のＯＳより前記第１の仮想マシンに対応する第１の仮想バスに前記第１のＯＳの障害に対応した割り込みがあった場合に、前記第１対応情報および前記第２対応情報に基づき第１の仮想マシンを特定し、前記第１の仮想マシン上で動作する前記第１のＯＳが使用するメモリ領域の内容を保存する保存手段とを含む
ことを特徴とする情報処理装置。
【請求項２】
前記複数の仮想バスは、前記情報処理装置の物理装置を仮想化して前記複数の仮想マシンを構成するハイパーバイザに含まれ、前記ハイパーバイザにより、前記複数の仮想マシンの各々に割り当てられ、前記仮想バス識別情報を与えられる
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記保存手段は、前記第１の仮想マシンから前記第１のゲストＯＳに障害が発生した場合において前記第１の仮想マシンに割り当てられた仮想バスに割り込みを発生させることにより障害の発生を通知された場合に、割り込みが発生した仮想バスの仮想化識別情報に基づいて前記第１の記憶手段から前記第１のゲストＯＳが動作する仮想マシンに対応する前記仮想マシン制御部のプロセスの前記プロセス識別情報を求め、求めた前記プロセス識別情報に基づいて前記第２の記憶手段から前記第１のゲストＯＳが動作する仮想マシンの前記マシン識別情報を求め、求めた前記マシン識別情報を有する仮想マシンで動作する前記第１のＯＳが使用するメモリ領域の内容を、前記メモリ領域と異なる記憶装置に保存する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記保存手段は、前記仮想マシン制御部である第２のＯＳに設けられたホストドライバと、前記第２のＯＳのサービスプログラムであるダンプ採取サービス部とを含み、
前記ホストドライバは、前記第１の仮想マシンから障害の発生を通知された場合に、前記割り込みが発生した仮想バスの仮想バス識別情報に基づいて前記第１の記憶手段から前記第１のＯＳが動作する仮想マシンに対応する前記仮想マシン制御部のプロセスの前記プロセス識別情報を求め、
前記ダンプ採取サービス部は、求めた前記プロセス識別情報に基づいて前記第２の記憶手段から前記第１のＯＳが動作する仮想マシンの前記マシン識別情報を求め、求めた前記マシン識別情報を有する仮想マシンの前記メモリ領域の内容を、前記記憶装置に保存する
ことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記情報処理装置は、
更に、前記複数の仮想マシンに対応する前記仮想マシン制御部の複数のプロセスを識別するプロセス識別情報を格納する仮想デバイスを含み、
前記複数の仮想マシンの各々は、前記仮想デバイスに格納された前記プロセス識別情報を前記仮想マシン制御部に送り、
前記保存手段は、前記複数の仮想マシンの各々から受け取った前記プロセス識別情報を用いて、前記第１の記憶手段に、複数の前記仮想バス識別情報と複数の前記プロセス識別情報との対応関係である前記第１対応情報を記憶し、前記第２の記憶手段に、複数の前記プロセス識別情報と複数の前記マシン識別情報との対応関係である前記第２対応情報を記憶する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項６】
前記保存手段は、前記複数の仮想マシンのそれぞれに対応する前記仮想マシン制御部のプロセスの各々についての前記プロセス識別情報を、前記複数の仮想マシンの各々に送り、
前記複数の仮想マシンの各々は、前記仮想マシン制御部から受け取った前記プロセス識別情報を、前記仮想デバイスに格納する
ことを特徴とする請求項５に記載の情報処理装置。
【請求項７】
複数の仮想マシンが動作する情報処理装置の制御方法であって、
前記複数の仮想マシンを制御する仮想マシン制御部が、前記仮想マシン制御部と前記複数の仮想マシンそれぞれとを結ぶ複数の仮想バスを識別する複数の仮想バス識別情報と、前記複数の仮想マシンにそれぞれ対応した前記仮想マシン制御部のプロセスを識別する複数のプロセス識別情報との対応関係である第１対応情報を、第１の記憶手段に記憶し、
前記仮想マシン制御部が、前記複数のプロセス識別情報と、前記複数の仮想マシンを識別する複数の仮想マシン識別情報との対応関係である第２対応情報を、第２の記憶手段に記憶し、
前記仮想マシン制御部が、前記複数の仮想マシンに含まれる第１の仮想マシンで動作する第１のＯＳより前記第１の仮想マシンに対応する第１の仮想バスに前記第１のＯＳの障害に対応した割り込みがあった場合に、前記第１対応情報および前記第２対応情報に基づき第１の仮想マシンを特定し、前記第１の仮想マシン上で動作する前記第１のＯＳが使用するメモリ領域の内容を保存する
ことを特徴とする情報処理装置の制御方法。
【請求項８】
複数の仮想マシンが動作する情報処理装置の制御プログラムであって、
前記制御プログラムは、コンピュータに、
前記複数の仮想マシンを制御する仮想マシン制御部が、前記仮想マシン制御部と前記複数の仮想マシンそれぞれとを結ぶ複数の仮想バスを識別する複数の仮想バス識別情報と、前記複数の仮想マシンにそれぞれ対応した前記仮想マシン制御部のプロセスを識別する複数のプロセス識別情報との対応関係である第１対応情報を、第１の記憶手段に記憶する処理と、
前記仮想マシン制御部が、前記複数のプロセス識別情報と、前記複数の仮想マシンを識別する複数の仮想マシン識別情報との対応関係である第２対応情報を、第２の記憶手段に記憶する処理と、
前記仮想マシン制御部が、前記複数の仮想マシンに含まれる第１の仮想マシンで動作する第１のＯＳより前記第１の仮想マシンに対応する第１の仮想バスに前記第１のＯＳの障害に対応した割り込みがあった場合に、前記第１対応情報および前記第２対応情報に基づき第１の仮想マシンを特定し、前記第１の仮想マシン上で動作する前記第１のＯＳが使用するメモリ領域の内容を保存する処理とを実行させる
ことを特徴とする制御プログラム。
【請求項９】
複数の仮想マシンが動作する情報処理装置の制御プログラムを記録するコンピュータ読み取り可能な記録媒体であって、
前記制御プログラムは、コンピュータに、
前記複数の仮想マシンを制御する仮想マシン制御部が、前記仮想マシン制御部と前記複数の仮想マシンそれぞれとを結ぶ複数の仮想バスを識別する複数の仮想バス識別情報と、前記複数の仮想マシンにそれぞれ対応した前記仮想マシン制御部のプロセスを識別する複数のプロセス識別情報との対応関係である第１対応情報を、第１の記憶手段に記憶する処理と、
前記仮想マシン制御部が、前記複数のプロセス識別情報と、前記複数の仮想マシンを識別する複数の仮想マシン識別情報との対応関係である第２対応情報を、第２の記憶手段に記憶する処理と、
前記仮想マシン制御部が、前記複数の仮想マシンに含まれる第１の仮想マシンで動作する第１のＯＳより前記第１の仮想マシンに対応する第１の仮想バスに前記第１のＯＳの障害に対応した割り込みがあった場合に、前記第１対応情報および前記第２対応情報に基づき第１の仮想マシンを特定し、前記第１の仮想マシン上で動作する前記第１のＯＳが使用するメモリ領域の内容を保存する処理とを実行させる
ことを特徴とする記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及びその制御方法、制御プログラム並びに記録媒体に関する。
【背景技術】
【０００２】
複数の仮想マシンが動作する情報処理システムにおいては、例えば、仮想計算機（仮想マシン）はホストＯＳ（オペレーティングシステム）のプロセスとして実行され、仮想マシン上でゲストＯＳ上が動作する。ゲストＯＳにおいてクラッシュが発生して処理が停止する等した場合、メモリの内容とログ情報とを取得して、クラッシュの原因が調査される。
【０００３】
例えば、仮想計算機システムにおいて、ホスト仮想計算機が、ゲスト仮想計算機についてのシステム情報を退避する退避位置であって、ホスト仮想計算機が使用するログ部における退避位置を予め定めるゲスト格納定義を備え、仮想計算機モニタが、ゲスト仮想計算機を監視して、ゲスト仮想計算機に発生した障害を検出するパニック監視管理部と、パニック監視管理部によりゲスト仮想計算機における障害が検出された場合、ゲスト格納定義に基づいて、退避位置からシステム情報を採取するログ採取部とを備えることが提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−０８６１８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
例えば、ゲスト仮想マシンのメモリが２ＧＢの容量を持つ場合、メモリダンプを採取して格納するためには、磁気ディスク装置のような記憶装置における記憶領域（以下、ディスク領域）として、２ＧＢを各々の仮想マシンに予め割り当てておく必要がある。従って、例えば１０個の仮想マシンが存在する場合、１０個の仮想マシンの全てについてメモリダンプを採取するとすれば、２０ＧＢのディスク領域が必要となる。
【０００６】
しかし、情報処理システムで使用される記憶装置は高価である。従って、発生が予測できないゲストＯＳのクラッシュに備えて、大量のディスク領域を獲得しておくことは、メモリダンプ採取の負担（コスト）の観点からは好ましくない。そこで、メモリダンプの採取のためのディスク領域を減らしてしまうと、実際にクラッシュが発生しても、メモリダンプが採取されない場合があり、結果的に原因調査が長期化する。
【０００７】
本発明は、一側面によれば、メモリダンプの採取の負担を軽減することが可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
情報処理装置は、一側面によれば、複数の仮想マシンが動作する情報処理装置であって、第１の記憶手段と、第２の記憶手段と、保存手段とを含む。第１の記憶手段は、前記複数の仮想マシンを制御する仮想マシン制御部と前記複数の仮想マシンそれぞれとを結ぶ複数の仮想バスを識別する複数の仮想バス識別情報と、前記複数の仮想マシンにそれぞれ対応した前記仮想マシン制御部のプロセスを識別する複数のプロセス識別情報との対応関係である第１対応情報を記憶する。第２の記憶手段は、前記複数のプロセス識別情報と、前記複数の仮想マシンを識別する複数の仮想マシン識別情報との対応関係である第２対応情報を記憶する。保存手段は、前記複数の仮想マシンに含まれる第１の仮想マシンで動作する第１のＯＳより前記第１の仮想マシンに対応する第１の仮想バスに前記第１のＯＳの障害に対応した割り込みがあった場合に、前記第１対応情報および前記第２対応情報に基づき第１の仮想マシンを特定し、前記第１の仮想マシン上で動作する前記第１のＯＳが使用するメモリ領域の内容を保存する。
【発明の効果】
【０００９】
情報処理装置は、一側面によれば、メモリダンプの採取の負担を軽減することができる。
【図面の簡単な説明】
【００１０】
【図１】情報処理システムの構成の一例を示す図である。
【図２】情報処理システムの構成の一例を示す図である
【図３】情報処理システムの説明図である。
【図４】情報処理システムの説明図である。
【図５】識別情報作成処理フローである。
【図６】識別情報作成処理フローである。
【図７】識別情報作成処理フローである。
【図８】識別情報作成処理フローである。
【図９】ダンプ採取処理フローである。
【図１０】ダンプ採取処理フローである。
【図１１】ダンプ採取処理フローである。
【発明を実施するための形態】
【００１１】
図１は、情報処理システムの構成の一例を示す図である。
【００１２】
複数の仮想マシンが動作するシステム（情報処理システム）は、複数のＯＳ（オペレーティングシステム）１、ハイパーバイザ２、ハードウェア３を備える情報処理装置、換言すれば、物理計算機である。複数のＯＳ１は、例えば、１個のホストＯＳ１１と、複数のゲストＯＳ１２とを含む。ホストＯＳ１１は、例えば、図２を参照して後述する仮想ＣＰＵ１１９上で動作する。ゲストＯＳ１２は、例えば、図２を参照して後述する仮想マシン１２４上で動作する。
【００１３】
ハードウェア３は、物理装置、例えば、物理ＣＰＵと、物理メモリと、物理Ｉ／Ｏ装置、換言すれば、物理入出力装置とを含む。物理メモリは主記憶装置（主メモリ）であり、物理Ｉ／Ｏ装置は例えば磁気ディスク装置のような周辺記憶装置である。
【００１４】
ハイパーバイザ２は、ハードウェア３に含まれる物理的なＣＰＵ、物理的なメモリ、物理的なＩ／Ｏ装置等の物理装置を仮想化する。そして、ハイパーバイザ２は、仮想化された物理装置、換言すれば、仮想装置に対する要求を物理装置に転送し、また、物理装置からの応答を仮想装置に転送する。これにより、ハイパーバイザ２は仮想マシン１２４を構成する。
【００１５】
図２は、情報処理システムの構成の一例を示す図である。なお、図２においては、情報処理システムは複数の仮想マシン１２４及び複数のゲストＯＳ１２を含むが、１個の仮想マシン１２４及び１個のゲストＯＳ１２のみを示す。
【００１６】
情報処理システムは、１個のホストＯＳ１１と、複数の仮想マシン１２４とを含む。ホストＯＳ１１は、仮想マシン制御部であり、複数の仮想マシン１２４を制御する。各々の仮想マシン１２４上では、ゲストＯＳ１２が動作する。
【００１７】
ホストＯＳ１１は、仮想ＣＰＵ１１９上で動作し、ダンプ採取ツール１１１と、ダンプ採取サービス部１１２と、ホストドライバ１１３と、保存状態格納領域１１４と、ダンプ格納領域１１５とを含む。図１の例では、ダンプ採取ツール１１１が、ダンプ採取サービス部１１２と、ホストドライバ１１３とを含む。ダンプ採取ツール１１１は、ダンプ採取サービス部１１２及びホストドライバ１１３とは別に設けるようにしてもよい。ゲストＯＳ１２は、仮想マシン１２４上で動作し、ゲストドライバ１２１を含む。仮想マシン１２４は、仮想デバイス１２２と、メモリ１２３と、仮想ＣＰＵ１２５とを含む。ハイパーバイザ２は、仮想バス２１を含む。
【００１８】
ホストＯＳ１１は、オペレーティングシステム又は制御プログラムであり、ハイパーバイザ２を呼び出して、仮想マシン１２４に仮想化されたＣＰＵ、メモリ、Ｉ／Ｏ装置等の資源を配分する。ホストＯＳ１１は、仮想マシン１２４の実行を制御する仮想マシン制御部である。ホストＯＳ１１は、例えば、ホストマシン上で動作する。
【００１９】
ホストマシンは、例えば、ハイパーバイザ２上に１個だけ存在する特権的な仮想マシンである。ホストマシンである特権的な仮想マシンは、他の仮想マシン１２４、換言すれば、ゲストＯＳ１２が動作する仮想マシン１２４と異なり、直接、物理装置にアクセスすることができる。従って、ホストマシンである特権的な仮想マシンは、ゲストＯＳ１２が動作する仮想マシン１２４とは、動作が全く異なる。
【００２０】
また、ホストマシンは、例えば、物理マシンそれ自体であってもよい。また、ホストＯＳ１１、換言すれば、仮想マシン１２４の実行を制御する仮想マシン制御部は、仮想マシン上で動作する必要はなく、ハイパーバイザ２上で動作する制御プログラムや、仮想ＣＰＵ１１９上ではなく物理ＣＰＵ上で動作する制御プログラムであってもよい。
【００２１】
以上から、図２においては、仮想マシン制御部であるホストＯＳ１１が動作するホストマシンの図示を省略している。一方、仮想マシン制御部であるホストＯＳ１１が、ハイパーバイザ２により仮想化される仮想ＣＰＵ１１９上で動作しているように図示しているが、ホストＯＳ１１は、前述したように、仮想ＣＰＵ１１９ではなく、直接、物理ＣＰＵ上で動作しても、又は、物理ＣＰＵに対応する論理ＣＰＵ上で動作してもよい。
【００２２】
仮想マシン１２４は、ホストＯＳ１１によって割り当てられた仮想装置、換言すれば、ゲストマシンとして構成される。仮想マシン１２４は、ホストＯＳ１１上のプロセス、具体的には、子プロセスとして実行される。仮想マシン１２４上でゲストＯＳ１２が動作する。なお、仮想マシン１２４上にゲストＯＳ１２が存在しなくてもよい。
【００２３】
ゲストＯＳ１２は、動作している仮想マシン１２４上、換言すれば、仮想ＣＰＵ１２５及び仮想化されたメモリ１２３上で動作し、仮想化されたＩ／Ｏ装置、例えば仮想デバイス１２２にアクセスすることができる。ゲストＯＳ１２は、ホストＯＳ１１又はハイパーバイザ２を経由して、仮想装置に対するアクセスを物理装置に転送し、アクセスの結果を物理装置から返信される。
【００２４】
ゲストＯＳ１２において、ゲストドライバ１２１は、ホストＯＳ１１に障害の発生を通知する通知手段であり、複数のゲストＯＳ１２の各々に設けられる。ゲストドライバ１２１は、自己の属するゲストＯＳ１２、換言すれば、対応するゲストＯＳ１２に障害が発生した場合に、ホストＯＳ１１に、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４に割り当てられた仮想バス２１に割り込みを発生することにより、障害の発生を通知する。換言すれば、仮想マシン１２４は、その上で動作するゲストＯＳ１２に障害が発生した場合に、自己に割り当てられた仮想バス２１に割り込みを発生することにより、障害の発生を通知する。ゲストドライバ１２１は、複数のゲストＯＳ１２の各々に設けられる。ゲストドライバ１２１は、例えば、カーネルドライバであり、ゲストＯＳ１２に設けられる。
【００２５】
具体的には、ゲストドライバ１２１は、ゲストＯＳ１２のパニック出口としてゲストＯＳ１２に登録される。例えば、ゲストドライバ１２１は、ゲストＯＳ１２の起動時に呼び出されて、ゲストＯＳ１２の予め定められた位置、具体的にはパニック出口に組み込まれる。そして、ゲストドライバ１２１は、ゲストＯＳ１２にクラッシュが発生した場合に、ゲストＯＳ１２から呼び出され、仮想マシンとハードウェアとの間を結ぶ仮想バス２１に割り込みを発生させる。
【００２６】
仮想デバイス１２２は、複数の仮想マシン１２４の各々に設けられる記憶装置である。仮想デバイス１２２は、自己が接続された仮想マシン１２４がホストＯＳ１１のプロセスとして実行される場合における当該プロセスを識別するプロセス識別情報を格納する。換言すれば、仮想デバイス１２２は、自己が接続された仮想マシン１２４に対応した、仮想マシン制御部であるホストＯＳ１１のプロセスを識別するプロセス識別情報を格納する。
【００２７】
プロセス識別情報は、例えば、ホストＯＳ１１のダンプ採取サービス部１１２により、仮想デバイス１２２に書き込まれる。プロセス識別情報の書込みは、例えば、仮想マシン１２４の生成時に実行される。これは、プロセス識別情報が仮想マシン１２４に対応して定まるためである。
【００２８】
実際には、仮想デバイス１２２としては、例えば、ＤＶＤ（Ｄｉｊｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）装置が用いられる。例えば、仮想デバイス１２２は、仮想マシン１２４に動的に組み込まれる。換言すれば、仮想デバイス１２２は、仮想マシン１２４に動的に組み込むことができる記憶装置であればよい。これにより、仮想マシン１２４の生成に応じて、生成される仮想マシン１２４に対応するプロセスのプロセス識別情報を仮想デバイス１２２に書き込み、生成される仮想マシン１２４で動作するゲストＯＳ１２のゲストドライバ１２１にプロセス識別情報を通知することができる。
【００２９】
例えば、プロセス識別情報を書き込んだ仮想ＤＶＤが作成され、また、仮想化されたＤＶＤ読み込み装置が作成される。仮想ＤＶＤが挿入された仮想ＤＶＤ読み込み装置が、仮想デバイス１２２として、起動される仮想マシン１２４に接続される。
【００３０】
仮想デバイス１２２は、ＤＶＤ装置に限られず、他の種々の記憶装置を利用することができる。例えば、仮想マシン１２４の定義に追加することができるデバイス又はリソースであって、プロセス化された仮想マシン１２４の仮想デバイス１２２に対してデータを書き込むことができ、かつ、仮想デバイス１２２からゲストドライバ１２１がデータを読み出すことができるデバイスであればよい。
【００３１】
メモリ１２３は、ハードウェア３に含まれる主メモリの一部である。メモリ１２３は、仮想化されて複数の仮想マシン１２４の各々に含まれ、ゲストＯＳ１２が使用するメモリ領域である。
【００３２】
ハイパーバイザ２において、仮想バス２１は、複数の仮想マシン１２４の各々と物理ＣＰＵとの間を、例えば論理的に結ぶ仮想的な割り込み信号線である。ゲストＯＳ１２は、障害が発生すると、自己が動作している仮想マシン１２４の仮想ＣＰＵに、実行不可能な命令を実行させる。これにより、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４における実行例外が発生するので、最終的に、物理ＣＰＵが仮想バス２１への割り込みを捕捉することになる。従って、仮想バス２１は、ゲストＯＳ１２を実行中の仮想マシン１２４から物理ＣＰＵへの割り込みを発生することになる。一方、前述したように、ホストＯＳ１１は、特権的な仮想マシン又は物理マシンであるホストマシン上で動作するので、物理ＣＰＵにより捕捉された仮想バス２１への割り込みを処理する。結果として、仮想バス２１は、複数の仮想マシン１２４の各々とホストＯＳ１１との間を論理的に結ぶことになる。換言すれば、複数の仮想バス２１は、仮想マシン制御部と複数の仮想マシンそれぞれとを結ぶ。複数の仮想バス２１は、ハイパーバイザ２により、複数の仮想マシン１２４の各々に１対１に割り当てられ、仮想バス識別情報を与えられる。仮想バス２１への割り込みは、物理ＣＰＵへの物理的な割り込み信号線への割り込み、換言すれば、ハードウェア割り込みと同一の優先度、換言すれば、最優先の割り込みとされる。
【００３３】
仮想マシン制御部であるホストＯＳ１１は、ゲストＯＳ１２に障害が発生した場合に、後述する第１対応情報および第２対応情報に基づいて、ゲストＯＳ１２が使用するメモリ１２３の内容を保存する。
【００３４】
例えば、複数の仮想マシン１２４に含まれるある仮想マシン１２４で動作するゲストＯＳ１２に障害が発生したとする。障害が発生したゲストＯＳ１２が動作する仮想マシン１２４を、第１の仮想マシン１２４ということとする。
【００３５】
複数の仮想マシン１２４の各々は、対応するゲストＯＳ１２に障害が発生した場合に、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４、換言すれば、第１の仮想マシン１２４に割り当てられた仮想バス２１に割り込みを発生させることにより、仮想マシン制御部であるホストＯＳ１１に障害の発生を通知する。
【００３６】
ホストＯＳ１１は、複数の仮想マシン１２４に含まれる第１の仮想マシン１２４で動作するゲストＯＳ１２より、第１の仮想マシン１２４に対応する第１の仮想バス２１に、ゲストＯＳ１２の障害に対応した割り込みがあった場合に、第１対応情報および第２対応情報に基づき第１の仮想マシン１２４を特定し、特定した第１の仮想マシン１２４上で動作するゲストＯＳ１２が使用するメモリ１２３の内容を保存する。第１対応情報は、後述するように、複数の仮想バスを識別する複数の仮想バス識別情報と、複数の仮想マシンにそれぞれ対応した仮想マシン制御部のプロセスを識別する複数のプロセス識別情報との対応関係である。第２対応情報は、後述するように、複数のプロセス識別情報と、複数の仮想マシンを識別する複数の仮想マシン識別情報との対応関係である。
【００３７】
実際には、ホストＯＳ１１において、ダンプ採取ツール１１１が、メモリダンプの保存手段であり、ゲストＯＳ１２のクラッシュ時に、ゲストＯＳ１２のクラッシュ時におけるゲストＯＳ１２が使用するメモリ１２３の内容の保存を行う。メモリダンプは、保存されたメモリ１２３の内容を、予め定められたフォーマットに変換したものである。保存されたメモリ１２３の内容は、メモリダンプに変換可能であり、ダンプ採取ツール１１１によりメモリダンプに変換される。従って、メモリダンプ処理は、情報処理システムのホストＯＳ１１により実行される。
【００３８】
例えば、ダンプ採取ツール１１１は、ホストＯＳ１１に設けられる。ダンプ採取ツール１１１は、通知手段であるゲストドライバ１２１から障害の発生を通知された場合に、割り込みが発生した仮想バス２１の仮想バス識別情報、例えば仮想化ＩＤに基づいて、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４に対応するプロセスのプロセス識別情報を求める。複数の仮想マシン１２４の各々に対応するプロセスは、仮想マシン制御部であるホストＯＳ１１のプロセスである。
【００３９】
更に、ダンプ採取ツール１１１は、求めたプロセス識別情報に基づいて、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４、具体的には、仮想マシン１２４の仮想マシン名を求める。更に、ダンプ採取ツール１１１は、求めた障害が発生したゲストＯＳ１２が動作する仮想マシン１２４のメモリ１２３の内容を、記憶装置に保存する。換言すれば、求めた障害が発生したゲストＯＳが使用するメモリ１２３の内容が、記憶装置に採取される。記憶装置は、例えば、ホストＯＳ１１がアクセス可能であり、メモリ１２３とは異なる記憶装置である。
【００４０】
具体的には、ダンプ採取ツール１１１は、ゲストドライバ１２１から障害の発生を通知された場合に、割り込みが発生した仮想バス２１の仮想化ＩＤに基づいて、第１の記憶手段である仮想化ＩＤ／プロセス一覧１１７から、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４に対応するプロセスのプロセス識別情報を求める。更に、ダンプ採取ツール１１１は、求めたプロセス識別情報に基づいて、第２の記憶手段である仮想マシン／プロセス一覧１１８から、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４、具体的には、仮想マシン１２４の仮想マシン名を求める。仮想化ＩＤ／プロセス一覧１１７及び仮想マシン／プロセス一覧１１８については後述する。仮想化ＩＤ／プロセス一覧１１７と仮想マシン／プロセス一覧１１８とを合せて仮想マシン一覧ということがある。
【００４１】
実際には、ダンプ採取ツール１１１において、ホストドライバ１１３は、ゲストＯＳ１２からのクラッシュの通知を検出して、ダンプ採取サービス部１１２にゲストＯＳ１２のクラッシュを通知する。ゲストＯＳ１２からのクラッシュの通知は、後述するように、仮想マシンとハードウェアとの間を論理的に結ぶ仮想バス２１への割り込みを捕捉することにより検出される。ホストドライバ１１３は、例えば、カーネルドライバであり、ホストＯＳ１１に設けられる。
【００４２】
具体的には、ホストドライバ１１３は、通知手段であるゲストドライバ１２１から障害の発生を通知された場合に、ゲストドライバ１２１からの割り込みが発生した仮想バス２１の仮想化ＩＤに基づいて、仮想化ＩＤ／プロセス一覧１１７から、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４に対応するプロセスのプロセス識別情報を求める。ホストドライバ１１３は、求めたプロセスをダンプ採取サービス部１１２に通知する。
【００４３】
また、ダンプ採取ツール１１１において、ダンプ採取サービス部１１２は、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４を特定して、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４が使用するメモリ１２３の内容を保存する。ダンプ採取サービス部１１２は、ホストＯＳ１１が提供するサービスプログラムである。
【００４４】
具体的には、ダンプ採取サービス部１１２は、ホストドライバ１１３が求めたプロセス識別情報に基づいて、仮想マシン／プロセス一覧１１８から、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４、具体的には、仮想マシン１２４の仮想マシン名を求める。そして、ダンプ採取サービス部１１２は、求めた仮想マシン名を有する仮想マシン１２４のメモリ１２３、換言すれば、障害が発生したゲストＯＳ１２が使用するメモリ１２３の内容を、記憶装置に採取する。ゲストＯＳ１２が使用するメモリ１２３は、ゲストＯＳ１２が動作する仮想マシン１２４に含まれるメモリである。
【００４５】
例えば、ダンプ採取サービス部１１２は、障害が発生したゲストＯＳ１２が使用するメモリ１２３にアクセスして、障害発生時におけるメモリ１２３の内容をコピーして、保存状態格納領域１１４に保存する。そして、ダンプ採取サービス部１１２は、保存状態格納領域１１４に保存したメモリ１２３の内容を読みだしてダンプファイルに変換し、ダンプ格納領域１１５に格納する。
【００４６】
また、ダンプ採取サービス部１１２は、仮想マシン１２４の停止手段であって、通知手段であるゲストドライバ１２１によって障害の発生を通知された場合に、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４を停止させる。また、ダンプ採取サービス部１１２は、仮想マシン１２４の再開手段であって、停止させた仮想マシン１２４を再開又は再起動させる。実際には、ダンプ採取サービス部１１２は、仮想マシン１２４の停止や再開を、ハイパーバイザ２に依頼する。ハイパーバイザ２は、ダンプ採取サービス部１１２から仮想マシン１２４の停止や再開の依頼を受けると、これに応じて、仮想マシン１２４を停止し再開する。
【００４７】
図２の例では、ダンプ採取ツール１１１がダンプ採取サービス部１１２とホストドライバ１１３とを含むが、ダンプ採取ツール１１１を、ダンプ採取サービス部１１２及びホストドライバ１１３と別個に設けるようにしてもよい。
【００４８】
例えば、ダンプ採取サービス部１１２はホストＯＳ１１のサービスプログラムであり、ホストドライバ１１３はホストＯＳ１１のカーネルドライバであり、ダンプ採取ツール１１１は、例えばホストＯＳ１１上で動作するアプリケーションとして設けられる。これにより、利用者は、ホストＯＳ１１の改変によることなく、メモリ１２３の内容を取得しメモリダンプを実行することができる。
【００４９】
保存状態格納領域１１４は、ハードウェア３に含まれる磁気ディスク装置のような記憶装置の領域である。磁気ディスク装置のような記憶装置は、ホストＯＳ１１がアクセス可能であり、メモリ１２３とは異なる記憶装置である。保存状態格納領域１１４は、１個の領域であり、複数の仮想マシン１２４に共通である。
【００５０】
ダンプ格納領域１１５は、ハードウェア３に含まれる磁気ディスク装置のような記憶装置の領域である。磁気ディスク装置のような記憶装置は、ホストＯＳ１１がアクセス可能であり、メモリ１２３とは異なる記憶装置である。ダンプ格納領域１１５は、１個の領域であり、複数の仮想マシン１２４に共通である。
【００５１】
図３は、情報処理システムの説明図である。図３は、ホストＯＳ１１の実行する処理と、ゲストＯＳ１２の実行する処理とを表す。具体的には、図３は、ゲストＯＳ１２のゲストドライバ１２１が実行する処理と、ホストＯＳ１１のホストドライバ１１３及びダンプ採取サービス部１１２が実行する処理とを表す。なお、図３においては、１個のゲストＯＳ１２のみを示す。
【００５２】
ダンプ採取サービス部１１２は、ダンプ採取サービスの初期処理において、ゲスト制御処理の前処理を実行する。ゲスト制御処理の前処理は、仮想マシン１２４の仮想デバイス１２２にプロセス識別情報を書き込む処理である。書き込まれるプロセス識別情報は、指定された仮想マシン１２４に対応するホストＯＳ１１のプロセスを示す。仮想マシン１２４に対応するプロセスは、仮想マシン１２４毎に定められる。
【００５３】
仮想マシン管理サービス部１１６は、複数の仮想マシン１２４を管理するＶＭＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ）であり、仮想マシン１２４の開始、停止、削除、再開等の処理を行う。仮想マシン管理サービス部１１６は、ダンプ採取サービス部１１２からプロセス識別情報の書き込みを依頼されると、指定された仮想マシン１２４の仮想デバイス１２２へ、プロセス識別情報を書き込む。
【００５４】
例えば、ダンプ採取サービス部１１２は、情報処理システムの仮想マシン管理サービス部１１６を呼び出す。呼び出された仮想マシン管理サービス部１１６は、例えば仮想化されたＤＶＤ装置のような仮想デバイス１２２を用意して、ホストマシンに接続する。ホストマシン上で動作するホストＯＳ１１のダンプ採取サービス部１１２は、用意された仮想ＤＶＤ装置内の書込み可能なＤＶＤに、プロセス識別情報を書き込む。この後、仮想マシン管理サービス部１１６は、仮想ＤＶＤ装置をホストマシンから切断して、ゲストマシンに接続する。接続されるゲストマシンは、そのゲストマシンに対応するホストＯＳ１１のプロセスであって、書き込まれるプロセス識別情報を有するプロセスに対応する。
【００５５】
ゲストＯＳ１２のゲストドライバ１２１は、ゲストドライバ１２１の初期処理として、プロセス識別取得処理を実行する。プロセス識別取得処理は、仮想デバイス１２２からプロセス識別情報を取得する処理である。これにより、仮想マシン１２４に対応するプロセスを外部から識別する情報が取得される。
【００５６】
初期処理の後、ゲストドライバ１２１は、クラッシュ検知処理を開始、換言すれば、ゲストＯＳ１２のパニック出口として登録される。クラッシュ検知処理は、クラッシュ発生時に、ゲストＯＳ１２から呼び出される処理である。この呼び出しのために、ゲストドライバ１２１は、ゲストＯＳ１２のパニック出口として登録される。クラッシュの検知は、実際には、ゲストＯＳ１２自体が種々の手段により実行する。従って、ゲストＯＳ１２は、自己のクラッシュを検知すると、自己のパニック出口として登録されたゲストドライバ１２１を呼び出す。
【００５７】
また、ゲストドライバ１２１は、クラッシュ通知処理を実行する。クラッシュ通知処理は、クラッシュの発生時に、換言すれば、ゲストＯＳ１２から呼び出された場合に、ゲストＯＳ１２が動作する仮想マシン１２４と、仮想マシン制御部であるホストＯＳ１１との間を論理的に結ぶ仮想バス２１に割り込みを発生する処理である。クラッシュ通知処理は、例えば、クラッシュ検知処理に続いて実行される。
【００５８】
仮想バス２１への割り込みは、ゲストドライバ１２１が動作する仮想マシン１２４に割り当てられた仮想バス２１に発生する。仮想バス２１は、例えば、ハイパーバイザ２により、仮想マシン１２４の開始時に、仮想マシン１２４毎に割り当てられる。従って、ゲストＯＳ１２のクラッシュは、個々のゲストＯＳ１２が動作している仮想マシン１２４に割り当てられた仮想バス２１により、ホストドライバ１１３に通知される。
【００５９】
また、ゲストドライバ１２１は、ダンプ出力抑止処理を実行する。ダンプ抑止処理は、クラッシュ発生時に、換言すれば、ゲストＯＳ１２から呼び出された場合に、ゲストＯＳ１２によるメモリ１２３のダンプ採取を抑止する処理である。ダンプ出力抑止処理は、例えば、クラッシュ通知処理に続いて又はクラッシュ通知処理と並行して実行される。
【００６０】
ゲストＯＳ１２は、通常、ゲストＯＳ１２のメモリ１２３のメモリダンプを採取する機能であるダンプ採取機能を含むので、ゲストＯＳ１２のクラッシュ時に、メモリダンプが採取されてしまう。そこで、ゲストドライバ１２１は、クラッシュ発生時に、ゲストＯＳ１２によるメモリ１２３のダンプ採取を抑止する。
【００６１】
一方、ホストＯＳ１１のホストドライバ１１３は、割り込み捕捉処理を実行する。割り込み捕捉処理は、ゲストドライバ１２１による仮想バス２１への割り込みを捕捉する処理である。換言すれば、割り込み捕捉処理は、ゲストドライバ１２１からのクラッシュ通知を受信する受信処理である。ゲストドライバ１２１からのクラッシュ通知のための割り込みの優先度は最優先である。そこで、ホストドライバ１１３は、割り込み捕捉処理を繰り返し実行する。割り込み捕捉処理は、例えば、最初のゲストＯＳ１２の開始の後に実行される。
【００６２】
また、ホストドライバ１１３は、クラッシュ判定処理を開始、換言すれば、ホストＯＳ１１の予め定められた位置に登録する。クラッシュ判定処理は、クラッシュ判定時に、ホストＯＳ１１から呼び出される処理である。この呼び出しのために、ホストドライバ１１３は、ホストＯＳ１１の予め定められた位置に登録される。クラッシュ判定処理は、仮想バス２１への全ての割り込みを調べて、ゲストＯＳ１２のクラッシュを通知する割り込みと、それ以外の割り込みとを判別する処理である。クラッシュ判定処理は、例えば、割り込み捕捉処理に続いて実行される。
【００６３】
また、ホストドライバ１１３は、プロセス識別情報解決処理を実行する。プロセス識別情報解決処理は、クラッシュが発生したゲストＯＳ１２がどの仮想マシン１２４に対応するプロセスで動作しているかを解決する処理、換言すれば、クラッシュが発生したゲストＯＳ１２が動作する仮想マシン１２４に対応するプロセスのプロセス識別情報を求める処理である。プロセス識別情報解決処理は、例えば、割り込みがゲストＯＳ１２のクラッシュを通知する割り込みであると判別された場合に、クラッシュ判定処理に続いて実行される。
【００６４】
また、ホストドライバ１１３は、クラッシュ発生通知処理を実行する。クラッシュ発生通知処理は、ゲストＯＳ１２にクラッシュが発生したことを、ダンプ採取サービス部１１２に通知する処理である。クラッシュ発生通知処理は、例えば、割り込みがゲストＯＳ１２のクラッシュを通知する割り込みであると判定された場合に、プロセス識別情報解決処理に続いて実行される。クラッシュ発生通知処理において、プロセス識別情報解決処理により求められた、クラッシュが発生したゲストＯＳ１２が動作するプロセスのプロセス識別情報が、ダンプ採取サービス部１１２に通知される。
【００６５】
一方、ホストＯＳ１１のダンプ採取サービス部１１２は、メモリ内容保存処理、換言すれば、メモリ状態保存処理を実行する。メモリ状態保存処理は、クラッシュが発生したゲストＯＳ１２が使用するメモリ１２３の内容を保存する処理である。ゲストＯＳ１２が使用するメモリ１２３は、ゲストＯＳ１２が動作する仮想マシン１２４に含まれる仮想化されたメモリ、換言すれば、仮想メモリである。メモリ状態保存処理は、例えば、ダンプ採取サービス部１１２がゲストＯＳ１２にクラッシュが発生した通知をホストドライバ１１３から受け取った場合に実行される。
【００６６】
メモリ状態保存処理により、クラッシュが発生したゲストＯＳ１２が使用するメモリ１２３の内容がコピーされて、予め定められた記憶領域、換言すれば、保存状態格納領域１１４に格納される。保存状態格納領域１１４は、例えば、ダンプ採取ツール１１１により予め定められる。例えば、利用者は、ホストＯＳ１１上で動作するダンプ採取ツール１１１に端末からアクセスして、保存状態格納領域１１４を予め定めることができる。
【００６７】
メモリ状態保存処理は、メモリ１２３の内容をコピーして保存状態格納領域１１４に格納するのみであるので、ダンプファイルの作成と比べて短時間で処理を終了することができる。また、メモリ状態保存処理が終了すると、ダンプファイルの作成を待たずに、クラッシュが発生したゲストＯＳ１２が動作する仮想マシン１２４を停止し、再開することができる。
【００６８】
メモリ内容保存処理の後、ダンプ採取サービス部１１２は、メモリ内容保存処理の後処理として、ダンプ変換処理を実行する。ダンプ変換処理は、保存状態格納領域１１４に格納したメモリ１２３の内容を、予め定められたフォーマットのダンプファイルに変換して保存する処理である。ダンプ変換処理は、メモリ状態保存処理の実行の後において、ゲスト制御処理の実行の後に又はゲスト制御処理の実行と並行して、ゲスト制御処理の実行の障害とならないタイミングで実行される。
【００６９】
ダンプ変換処理により、保存状態格納領域１１４に格納したメモリ１２３の内容がダンプファイルに変換されて、予め定められた記憶領域、換言すれば、ダンプ格納領域１１５に格納される。ダンプ格納領域１１５は、例えば、ダンプ採取ツール１１１により予め定められる。例えば、利用者は、ホストＯＳ１１上で動作するダンプ採取ツール１１１に端末からアクセスして、ダンプ格納領域１１５を予め定めることができる。
【００７０】
ダンプ変換処理は、例えば、ゲスト制御処理の実行の障害とならないタイミングで実行される。換言すれば、ゲスト制御処理がダンプ変換処理に優先して実行される。これにより、メモリ状態保存処理の終了の後に、ゲスト制御処理を実行することができる。
【００７１】
また、ダンプ採取サービス部１１２は、ゲスト制御処理を実行する。ゲスト制御処理は、クラッシュが発生したゲストＯＳ１２を実行中の仮想マシン１２４の状態を制御する処理である。例えば、ダンプ採取サービス部１１２は、情報処理システムの仮想マシン管理サービス部１１６を呼び出し、呼び出した仮想マシン管理サービス部１１６に、指定したゲストＯＳ１２が使用する仮想デバイス１２２の制御を依頼する。従って、ゲスト制御処理は、実際には、仮想マシン管理サービス部１１６により実行される。
【００７２】
ゲスト制御処理は、ダンプ採取サービス部１１２がゲストＯＳ１２にクラッシュが発生した通知を受け取った場合に、メモリ状態保存処理に続いて、ダンプ変換処理に優先して実行される。ゲスト制御処理により、ゲストＯＳ１２が動作する仮想マシン１２４の状態は、そのままの状態とされるか、停止や再開の状態とされる。
【００７３】
なお、図３において説明した処理は、各々、ゲストドライバ１２１、ホストドライバ１１３又はダンプ採取サービス部１１２のルーチン又はサブルーチンとして実現するようにしてもよい。
【００７４】
図４は、情報処理システムの説明図である。
【００７５】
図４において、例えば、仮想マシン１２４Ｂ、換言すれば、仮想マシンＢは、プロセスＹとして実行され、仮想マシン１２４Ｂ上でゲストＯＳ１２Ｂが動作する。仮想マシン１２４Ｂには、仮想ＣＰＵ１２５Ｂ、換言すれば、仮想ＣＰＵ−１が割り当てられている。仮想マシン１２４Ｂに対応するゲストＯＳ１２及びゲストドライバ１２１を、各々、ゲストＯＳ１２Ｂ及びゲストドライバ１２１Ｂと表す。仮想マシンＡ及び仮想マシンＣについても同様である。図４においては、仮想マシンＢにおいて、クラッシュが発生するものとする。
【００７６】
前述したように、ホストＯＳ１１が複数のゲストＯＳ１２についてのメモリダンプを実行するためには、ホストＯＳ１１が、クラッシュしたゲストＯＳ１２がどの仮想マシン１２４で動作中であるのかを知る必要がある。
【００７７】
ここで、情報処理システムにおいて、仮想マシン１２４は情報処理システム又はホストＯＳ１１におけるプロセスとして存在する。このため、仮想マシン１２４のメモリ１２３の内容は、仮想マシン１２４の外部からも取得可能である。従って、クラッシュが発生した際のメモリ１２３の内容も仮想マシン１２４の外部から採取でき、メモリダンプを生成することができる。
【００７８】
しかし、ゲストＯＳ１２から見える仮想マシン１２４は１個だけであり、一方、情報処理システム上には複数の仮想マシン１２４が存在する。例えば、ホストＯＳ１１から見た場合に、１個の仮想マシン１２４は１つのプロセスであり、その上でゲストＯＳ１２が動作する。情報処理システムから見た仮想マシン１２４は、情報処理システムが管理する１セットの仮想ハードウェア（ＣＯＰ、メモリ、ストレージ、ネットワークデバイス等）の集合である。そして、情報処理システムにおいて、仮想ハードウェアは、仮想マシン１２４上のホストＯＳ１１及びゲストＯＳ１２と厳密に分離されている。このため、例えば、ゲストＯＳ１２は、そのゲストＯＳ１２自身がどの仮想マシン１２４上で動作するかを知ることはできない。
【００７９】
以上から、ゲストＯＳ１２のクラッシュの発生を通知する場合、ゲストＯＳ１２の動作する仮想マシン１２４を情報処理システム上で識別可能な情報を、合わせて通知することができる必要がある。
【００８０】
そこで、ダンプ採取サービス部１１２、ホストドライバ１１３、ゲストドライバ１２１が設けられる。ダンプ採取サービス部１１２は、仮想マシン１２４のプロセスを識別する情報、換言すれば、プロセス識別情報を持つ。ホストドライバ１１３は、仮想化システムの仮想バス２１上で仮想ハードウェアを識別する情報、換言すれば、仮想化ＩＤを持つ。ゲストドライバ１２１は、それ自体は、プロセス識別情報及び仮想化ＩＤを持たない。
【００８１】
そして、図４に示すように、例えば、ホストドライバ１１３に、仮想化ＩＤ／プロセス一覧１１７が設けられる。仮想化ＩＤ／プロセス一覧１１７は、第１の記憶手段であり、ホストＯＳ１１に設けられ、複数の仮想バス識別情報と複数のプロセス識別情報との対応関係である第１対応情報を記憶する。仮想バス識別情報は、複数の仮想マシン１２４の各々に割り当てられた複数の仮想バス２１を識別する識別情報であり、一意に定まる。プロセス識別情報は、複数の仮想マシン１２４の各々に対応するホストＯＳ１１のプロセスを識別する識別情報であり、一意に定まる。従って、プロセス識別情報は、複数の仮想マシン１２４にそれぞれ対応した仮想マシン制御部のプロセスを識別する。仮想バス識別情報は、例えば、仮想化ＩＤであり、ハイパーバイザ２において複数の仮想バス２１を識別する情報である。
【００８２】
また、図４に示すように、例えば、ダンプ採取サービス部１１２に、仮想マシン／プロセス一覧１１８が設けられる。仮想マシン／プロセス一覧１１８は、第２の記憶手段であり、ホストＯＳ１１に設けられ、複数のプロセス識別情報と複数のマシン識別情報との対応関係である第２対応情報を記憶する。マシン識別情報は、複数の仮想マシン１２４を識別する識別情報である。マシン識別情報は、例えば、仮想マシン１２４の仮想マシン名であり、一意に定まる。
【００８３】
最初に、ホストＯＳ１１が複数のゲストＯＳ１２についてのメモリダンプを実行するために、以下のような前処理が実行される。
【００８４】
ホストＯＳ１１のダンプ採取サービス部１１２は、仮想マシン１２４に対応するプロセスのプロセス識別情報を、複数の仮想マシン１２４の各々に送る。複数の仮想マシン１２４の各々は、ホストＯＳ１１から受け取ったプロセス識別情報を、仮想デバイス１２２に格納する。
【００８５】
複数の仮想マシン１２４の各々のゲストドライバ１２１は、仮想デバイス１２２に格納されたプロセス識別情報を、ホストＯＳ１１のホストドライバ１１３に送る。
【００８６】
ホストＯＳ１１のホストドライバ１１３は、複数の仮想マシン１２４の各々から受け取ったプロセス識別情報を用いて、仮想化ＩＤ／プロセス一覧１１７に、複数の仮想マシン１２４の各々に割り当てられた複数の仮想バス２１を識別する仮想バス識別情報、換言すれば、仮想化ＩＤと、複数の仮想マシン１２４であるプロセスを識別するプロセス識別情報との対応関係である第１対応情報を記憶する。更に、ホストＯＳ１１のダンプ採取サービス部１１２は、仮想マシン／プロセス一覧１１８に、複数の仮想マシン１２４であるプロセスを識別するプロセス識別情報と、複数の仮想マシン１２４の各々の識別情報、換言すれば、仮想マシン名との対応関係である第１対応情報を記憶する。
【００８７】
次に、情報処理システムの運用において、ホストＯＳ１１が、複数のゲストＯＳ１２についてのメモリダンプが、以下のように実行される。
【００８８】
ゲストドライバ１２１は、ゲストＯＳ１２のクラッシュ発生を通知するため、予めそのゲストＯＳ１２に割り当てられた仮想化ＩＤの仮想バス２１に、割り込みを発生させる。換言すれば、ゲストドライバ１２１は、障害が発生したゲストＯＳ１２が動作する仮想マシン１２４に割り当てられた仮想バス２１に割り込みを発生することにより、ホストＯＳ１１に障害の発生を通知する。
【００８９】
具体的には、ゲストドライバ１２１は、自己が動作している仮想マシン１２４の仮想ＣＰＵ１２５に、実行不可能な命令を実行させる。これにより、ゲストドライバ１２１が動作している仮想マシン１２４に割り当てられた仮想バス２１に割り込みが発生する。
【００９０】
ホストドライバ１１３は、割り込みの発生した仮想バス２１から、クラッシュが発生したゲストＯＳ１２が動作する仮想マシン１２４に割り当てられた仮想バス２１の仮想化ＩＤを判定する。換言すれば、ホストドライバ１１３は、ゲストドライバ１２１により仮想バス２１に発生させられた割り込みを捕捉することにより、ゲストドライバ１２１から障害の発生を通知される。
【００９１】
ホストドライバ１１３は、判定した仮想化ＩＤに基づいて仮想化ＩＤ／プロセス一覧１１７を参照して、クラッシュが発生したゲストＯＳ１２が動作する仮想マシン１２４に割り当てられた仮想バス２１の仮想化ＩＤに基づいて、仮想マシン１２４に対応するプロセスのプロセス識別情報を求める。
【００９２】
ダンプ採取サービス部１１２は、求めたプロセス識別情報に基づいて仮想マシン／プロセス一覧１１８を参照して、メモリダンプを採取する対象の仮想マシン１２４を識別する。これにより、クラッシュが発生したゲストＯＳ１２が動作する仮想マシン１２４の使用するメモリ１２３の内容を保存状態格納領域１１４に保存し、ダンプファイルの形式に変換して、ダンプ格納領域１１５に格納することができる。
【００９３】
以下、ホストＯＳ１１が複数のゲストＯＳ１２についてのメモリダンプを実行するための処理について説明する。
【００９４】
ホストドライバ１１３は、ホストＯＳ１１のカーネルドライバであるので仮想バス２１への割り込みにおける仮想化ＩＤを知ることができるが、プロセス識別情報は知ることができない。仮想化ＩＤを知ることができるのは、ホストドライバ１１３のみである。ダンプ採取サービス部１１２は、プロセス識別情報は知ることができるが、仮想マシン１２４ではないので仮想化ＩＤにアクセスすることはできない。仮想マシン１２４は、仮想マシン１２４を表すプロセス、換言すれば、仮想マシン１２４に対応するプロセスとは区別されるので、プロセス識別情報は知ることができない。ゲストＯＳ１２は、プロセス識別情報も仮想化ＩＤも知ることはできない。
【００９５】
そこで、ダンプ採取サービス部１１２が、プロセス識別情報を、例えば、仮想マシン１２４の生成時に、仮想マシン１２４の仮想デバイス１２２に書き込む。仮想マシン１２４上で動作するゲストＯＳ１２のゲストドライバ１２１は、仮想デバイス１２２のプロセス識別情報を、仮想デバイス１２２から読み出してホストドライバ１１３に渡す。これに応じて、ホストドライバ１１３は、仮想化ＩＤ／プロセス一覧１１７を作成する。また、ホストドライバ１１３は、プロセス識別情報を、ダンプ採取サービス部１１２に渡す。これに応じて、ダンプ採取サービス部１１２は、仮想マシン／プロセス一覧１１８を作成する。この結果、仮想マシン１２４に１対１に割り当てられかつ一意に定まる仮想化ＩＤを有する仮想バス２１への割り込みが発生すると、ホストドライバ１１３が対応するプロセス識別情報を求めることができ、ダンプ採取サービス部１１２が対応する仮想マシン名、換言すれば、仮想マシン１２４、具体的には、仮想マシン１２４の仮想マシン名を求めることができる。
【００９６】
最初に、仮想マシン／プロセス一覧１１８の作成について説明する。
【００９７】
ダンプ採取サービス部１１２は、仮想マシン管理サービス部１１６に接続して、仮想マシン／プロセス一覧１１８を作成する。仮想マシン／プロセス一覧１１８は、仮想マシン１２４の情報として、仮想マシン名と、仮想マシン１２４の状態（実行中、停止中、削除）と、仮想マシン１２４に対応するプロセスのプロセス識別情報とを含む。
【００９８】
仮想マシン名と、仮想マシン１２４の状態は、例えば、仮想マシン／プロセス一覧１１８の作成時又は作成に先立って、ダンプ採取サービス部１１２により、仮想マシン１２４を管理する仮想マシン管理サービス部１１６から取得される。
【００９９】
仮想マシン１２４に対応するプロセスのプロセス識別情報は、実行中の仮想マシン１２４について与えられる一意な情報であり、仮想マシン１２４の定義とは独立に、実行中の仮想マシン１２４に対応するプロセスを識別する情報である。従って、プロセス識別情報は、例えば、ダンプ採取サービス部１１２により、仮想マシン管理サービス部１１６から取得した実行中の仮想マシン１２４の各々について定められる。また、プロセス識別情報を仮想マシン定義とは独立に定めることにより、１つの仮想マシン定義から複数の仮想マシン１２４を同時にプロセス化する場合にも対応することができる。
【０１００】
ダンプ採取サービス部１１２は、仮想マシン／プロセス一覧１１８を作成すると、仮想マシン状態の監視を開始し、仮想マシン１２４のクラッシュの監視を開始する。ダンプ採取サービス部１１２は、予め定められた時間間隔で、仮想マシン管理サービス部１１６から仮想マシン状態を取得して、仮想マシン状態の変更に応じて、仮想マシン／プロセス一覧１１８を更新する。そして、新たに開始された仮想マシン１２４がある場合には、新たに開始された仮想マシン１２４について、新しいプロセス識別情報を作成し、その仮想マシン１２４に接続されている仮想デバイス１２２に書き込む。
【０１０１】
仮想マシン管理サービス部１１６は、仮想マシン／プロセス一覧１１８を更新すると、ホストドライバ１１３に仮想マシン状態の変更を通知する。この通知は、状態変更の種別（追加、削除、実行中→停止、停止中→実行）と、仮想マシン１２４に対応するプロセスのプロセス識別情報とを含む。
【０１０２】
次に、仮想化ＩＤ／プロセス一覧１１７の作成について説明する。
【０１０３】
ホストドライバ１１３は、ゲストＯＳ１２からの割り込みを受付け、また、ダンプ採取サービス部１１２からの要求を受付ける。例えば、ホストドライバ１１３は、ダンプ採取サービス部１１２からの要求の処理において、仮想化ＩＤ／プロセス一覧１１７の作成と更新を行う。前述したように、ホストドライバ１１３は、ハイパーバイザ２を介してのみ仮想マシン１２４にアクセスできるので仮想化ＩＤにはアクセスできるが、一方、仮想マシン１２４に対応するプロセスのプロセス識別情報にはアクセスできない。そこで、ダンプ採取サービス部１１２が仮想マシン１２４の仮想デバイス１２２に書き込んだプロセス識別情報を、ゲストドライバ１２１を介して読み込み、仮想化ＩＤとプロセス識別情報とを対応付ける仮想化ＩＤ／プロセス一覧１１７を作成する。
【０１０４】
仮想化ＩＤは、例えば、仮想化ＩＤ／プロセス一覧１１７の作成時又は作成に先立って、ホストドライバ１１３により、仮想バス２１を管理するハイパーバイザ２から取得される。
【０１０５】
ホストドライバ１１３は、ダンプ採取サービス部１１２からＩＯ要求を受け付ける。受け付けるＩＯ要求には、クラッシュの監視開始、仮想マシン１２４の状態変更（ＶＭ開始、ＶＭ停止、ＶＭ削除）、クラッシュの監視終了の種別がある。
【０１０６】
ホストドライバ１１３は、最初にクラッシュの監視開始の要求を受け取り、仮想化ＩＤ／プロセス一覧１１７の作成を開始する。具体的には、ホストドライバ１１３は、ハイパーバイザ２から仮想化ＩＤを取得し、仮想化ＩＤで識別される仮想マシン１２４がゲストドライバ１２１を持つ場合に、その仮想マシン１２４に対してクラッシュ監視の開始を通知し、応答として、ゲストドライバ１２１からその仮想マシン１２４に対応するプロセスのプロセス識別情報を受け取る。仮想化ＩＤに対応するプロセス識別情報が得られた仮想マシン１２４は、クラッシュの監視対象であるため、仮想化ＩＤ／プロセス一覧１１７に追加される。
【０１０７】
なお、ゲストＯＳ１２からの割り込みの受付は初期処理の後に直ちに開始されるが、実際にゲストＯＳ１２からの割り込みが行われるのは、そのゲストＯＳ１２のゲストドライバ１２１の確認が完了し、ゲストＯＳ１２の情報が仮想化ＩＤ／プロセス一覧１１７への追加が行われてからである。
【０１０８】
ホストドライバ１１３は、クラッシュの監視開始後、仮想マシン１２４の状態変更の要求を受け取る。ホストドライバ１１３は、仮想マシン１２４の状態変更の内容に応じて、仮想化ＩＤ／プロセス一覧１１７を更新する。この際、変更要求に含まれるプロセス識別情報をキーとして仮想化ＩＤ／プロセス一覧１１７が更新される。
【０１０９】
ホストドライバ１１３は、ダンプ採取サービス部１１２の停止にともない、クラッシュ監視停止の要求を受け取る。この要求を受け取ったなら、仮想化ＩＤ／プロセス一覧１１７の全ての情報を破棄する。
【０１１０】
次に、ゲストドライバ１２１からホストドライバ１１３へのプロセス識別情報の引渡しについて説明する。
【０１１１】
ゲストドライバ１２１は、ホストドライバ１１３からのクラッシュの監視開始の通知を受け取って、これを契機として仮想デバイス１２２にアクセスし、自己が動作する仮想マシン１２４に対応するプロセスのプロセス識別情報を取得する。ゲストドライバ１２１は、取得したプロセス識別情報をホストドライバ１１３に送る。プロセス識別情報は、仮想マシン１２４の開始に当って、ダンプ採取サービス部１１２が一意に設定する値であるため、この処理はゲストドライバ１２１の初期化後に一回だけ実行されれば十分である。
【０１１２】
この際、例えば、ゲストドライバ１２１は、プロセス識別情報を予め定められたアドレスに設定する。予め定められたアドレスは、例えば、ホストＯＳ１１の使用する物理メモリである。ホストドライバ１１３は、ハイパーバイザ２によりゲストＯＳ１２上のアドレスをホストＯＳ１１の物理メモリ上のアドレスに変換して、直接参照する。これは、アドレス変換による直接参照である。
【０１１３】
なお、ゲストドライバ１２１が、取得したプロセス識別情報を、ハイパーバイザ２の持つ仮想マシン１２４の間の通信機能を使用して、ホストドライバ１１３に送るようにしてもよい。これは、ドライバ間の通信による間接参照である。
【０１１４】
次に、情報処理システムの運用における、ホストＯＳ１１による、複数のゲストＯＳ１２についてのメモリダンプについて説明する。
【０１１５】
ゲストドライバ１２１Ｂは、ゲストＯＳ１２Ｂのクラッシュの監視開始の通知をホストドライバ１１３から受け取り、プロセス識別情報をホストドライバ１１３に返す。そして、ゲストドライバ１２１Ｂは、ゲストＯＳ１２Ｂのパニック出口にゲストドライバ１２１Ｂを登録する。
【０１１６】
ゲストＯＳ１２ＢがゲストＯＳ１２Ｂにおけるクラッシュの発生を検出すると、ゲストＯＳ１２Ｂのパニック出口として登録されているゲストドライバ１２１Ｂが呼び出される。呼び出されたゲストドライバ１２１Ｂは、ホストドライバ１１３に、クラッシュの通知を送る。具体的には、ゲストドライバ１２１Ｂは、対応するゲストＯＳ１２Ｂが動作している仮想マシン１２４に割り当てられた仮想バス２１に割り込みを発生させる。仮想バス２１には仮想化ＩＤが与えられている。
【０１１７】
ホストＯＳ１１のホストドライバ１１３は、ゲストドライバ１２１Ｂからのクラッシュの通知を受け取り、割り込みの発生した仮想バス２１に基づいて、クラッシュが発生したゲストＯＳ１２が動作する仮想マシン１２４に割り当てられた仮想バス２１の仮想化ＩＤ「ＩＤ２」を特定する。そして、ホストドライバ１１３は、受け取ったクラッシュの通知の仮想化ＩＤ「ＩＤ２」をキーとして用いて、仮想化ＩＤ／プロセス一覧１１７を検索して、クラッシュが発生したゲストＯＳ１２が動作する仮想マシン１２４に対応するプロセスのプロセス識別情報である「プロセスＹ」を得る。
【０１１８】
ホストドライバ１１３は、ダンプ採取サービス部１１２へクラッシュ発生を通知し、この際、プロセス識別情報「プロセスＹ」も通知する。
【０１１９】
ダンプ採取サービス部１１２は、ホストドライバ１１３に、仮想マシン１２４のクラッシュの監視の開始を指示する。この際、応答として、ホストドライバ１１３から、ダンプ採取サービス部１１２に、クラッシュ発生を通知する際に使用するインタフェース情報が送られる。
【０１２０】
ダンプ採取サービス部１１２は、ホストドライバ１１３から前述のインタフェース情報に従うクラッシュの発生通知を受け取り、受け取ったクラッシュの発生通知に含まれるプロセス識別情報「プロセスＹ」を取り出す。そして、ダンプ採取サービス部１１２は、取り出したプロセス識別情報「プロセスＹ」をキーとして用いて、仮想マシン／プロセス一覧１１８を検索して、クラッシュが発生したゲストＯＳ１２が動作する仮想マシン１２４の仮想マシン名である「仮想マシンＢ」を得る。これにより、クラッシュが発生した仮想マシンＢと、クラッシュが発生した仮想マシンＢが動作するプロセスＹが特定される。
【０１２１】
ダンプ採取サービス部１１２は、仮想マシンＢを特定すると、特定した仮想マシンＢに対するダンプ採取処理を実行する。例えば、ダンプ採取サービス部１１２は、クラッシュが発生した仮想マシンＢのプロセスＹが使用するメモリ１２３の障害発生時におけるメモリ１２３の内容をコピーして、保存状態格納領域１１４に保存する。そして、ダンプ採取サービス部１１２は、保存状態格納領域１１４に保存したメモリ１２３の内容を読みだしてダンプファイルに変換し、ダンプ格納領域１１５に格納する。
【０１２２】
また、ダンプ採取サービス部１１２は、仮想マシン管理サービス部１１６に、仮想マシンＢの停止と再起動を依頼する。
【０１２３】
なお、仮想マシン１２４の停止又は再開に応じて仮想化ＩＤ／プロセス一覧１１７を更新するために、仮想マシン１２４の状態を監視する監視処理が実行される。この監視処理は、例えば、仮想マシン管理サービス部１１６により実行され、仮想マシン管理サービス部１１６から、仮想マシン１２４の状態が切り替わる度に、ホストドライバ１１３に仮想マシン１２４の状態の切り替わりを通知されることにより、仮想化ＩＤ／プロセス一覧１１７を更新する。
【０１２４】
以上のように、本発明によれば、ホストＯＳ１１がゲストＯＳ１２のメモリ１２３のメモリダンプを採取することができる。これにより、採取したダンプファイルの保存先をホストＯＳ１１側に集約しているので、複数のゲストＯＳ１２の間でディスク領域を共用することができる。また、ゲストＯＳ１２が備えるダンプ採取機能を使用しないので、ゲストＯＳ１２が動作する仮想マシン１２４の各々に、ダンプ採取のためのリソースを割り当てる必要を無くすことができる。
【０１２５】
例えば、前述したように、２ＧＢの容量を持つメモリ１２３を使用するゲストＯＳ１１が１０個存在する場合において、１０個の仮想マシン１２４の全てについてメモリダンプを採取するとしても、２０ＧＢのディスク領域は必要ではなく、予備のディスク領域を考慮したとしても、例えば４ＧＢのディスク領域を用意するだけでよい。なお、採取したメモリダンプは、次のメモリダンプの採取に障害のない時間で、例えば、ファイルとして出力すればよい。
【０１２６】
従って、情報処理システムで使用される高価な記憶装置を、発生が予測できないゲストＯＳのクラッシュに備えて大量に獲得しておく必要をなくして、メモリダンプ採取の負担（コスト）を低減することができる。また、メモリダンプの採取のためのディスク領域を減らしても、実際のクラッシュの発生時に確実にメモリダンプが採取することができ、結果的に原因調査の期間を短縮化することができる。
【０１２７】
一方、採取したダンプファイルの保存先をホストＯＳ１１側に集約しているので、メモリダンプに関して、情報処理システムの構成を単純化することができる。これにより、１台のハードウェア上に複数の仮想マシン１２４をより容易に実装することができる。
【０１２８】
また、本発明によれば、ホストドライバ１１３及びゲストドライバ１２１を設ける必要はあるが、メモリダンプ採取のための種々の設定を個々のゲストＯＳ１２に対して行う必要を無くすことができる。
【０１２９】
また、本発明によれば、ゲストＯＳ１２のメモリ１２３の内容の保存処理と、保存したメモリ１２３の内容のダンプファイルへの変換処理とは、異なるタイミングで、換言すれば、独立したタイミングで行うことができる。また、メモリ１２３の内容の保存処理は、メモリ１２３のコピーであるので高速で終了することができる。従って、ゲストＯＳ１２のクラッシュ発生時に、メモリ１２３の内容の保存処理のみを終了した時点でメモリダンプ採取が完了する前に、ゲストＯＳ１２の停止処理及び再開処理を実行することができる。これにより、通常のメモリダンプ採取によるよりも、仮想マシン１２４のダウンタイムを大幅に縮小することができる。
【０１３０】
また、本発明によれば、ゲストＯＳ１２のパニック出口や仮想バス２１等の通常のＯＳやハイパーバイザ２が備える機能を用いて実現することができる。これにより、ＯＳレベルでは、ホストドライバ１１３及びゲストドライバ１２１を追加するのみでよく、ゲストＯＳ１１やハイパーバイザ２を大きく変更する必要を無くすことができる。また、これにより、各々のゲストＯＳ１２のメモリダンプ採取の機能が適切に構成又は設定されていないため、クラッシュの発生時にダンプが採取されなかったり、十分な情報を取得できなかったりすることを防止することができる。
【０１３１】
図５及び図６は、一体となって識別情報作成処理フローであり、ホストＯＳのダンプ採取サービス部における処理を示す。
【０１３２】
ホストＯＳ１１のダンプ採取サービス部１１２は、ダンプ採取サービス部１１２の初期化処理を実行する（ステップＳ１１）。これにより、ダンプ採取サービス部１１２は、予め定められた初期状態に復帰する。
【０１３３】
初期化処理の後、ダンプ採取サービス部１１２は、仮想マシン１２４を識別するために用いられる、仮想マシン１２４に対応するプロセス識別情報の作成処理を開始し、仮想マシン１２４を予め定められた順に、例えば仮想マシン名の順に処理対象として、処理対象とした仮想マシン１２４の状態を判定する（ステップＳ１２）。
【０１３４】
仮想マシン１２４の状態が実行中である場合に、ダンプ採取サービス部１１２は、実行中の仮想マシン１２４に対応するプロセスに対して、プロセス識別情報を作成して割り当てる（ステップＳ１３）。そして、ダンプ採取サービス部１１２は、割り当てたプロセス識別情報を、プロセスに対応する仮想マシン１２４の仮想デバイス１２２に書き込む（ステップＳ１４）。そして、ダンプ採取サービス部１１２は、実行中の仮想マシン１２４について、仮想マシン一覧である仮想マシン／プロセス一覧１１８に追加する（ステップＳ１５）。
【０１３５】
この後、ダンプ採取サービス部１１２は、全ての仮想マシン１２４について、仮想マシン／プロセス一覧１１８への追加を終了したか否かを調べる（ステップＳ１６）。全ての仮想マシン１２４について、仮想マシン／プロセス一覧１１８への追加を終了していない場合に、ダンプ採取サービス部１１２は、次の処理対象についてステップＳ１２を繰り返す。
【０１３６】
全ての仮想マシン１２４について、仮想マシン／プロセス一覧１１８への追加を終了した場合に、ダンプ採取サービス部１１２は、仮想マシン状態の監視を開始し（ステップＳ１７）、また、ゲストＯＳ１２のクラッシュの監視を開始する（ステップＳ１８）。ステップＳ１７において、ダンプ採取サービス部１１２は、仮想マシン状態の監視の開始を、ホストドライバ１１３に通知する。
【０１３７】
この後、ダンプ採取サービス部１１２は、ゲストＯＳ１２のクラッシュの通知を待つクラッシュ待ちの処理に入る（ステップＳ１９）。
【０１３８】
一方、ダンプ採取サービス部１１２は、ステップＳ１８の後、仮想マシン状態監視処理を開始する。仮想マシン状態監視処理は、仮想マシン１２４の状態を監視する状態監視スレッドにおいて実行される。状態監視スレッドは、例えば、ダンプ採取サービス部１１２により生成され、状態監視スレッド実行部により実行される。
【０１３９】
ステップＳ１８の後、状態監視スレッド実行部は、予め定められた時間間隔で、仮想マシン管理サービス部１１６から仮想マシン１２４の状態を示す情報である仮想マシン状態を取得する（ステップＳ１１０）。
【０１４０】
状態監視スレッド実行部は、仮想マシン状態を取得した場合に、取得した仮想マシン状態において仮想マシン状態に変更があるか否かを調べる（ステップＳ１１１）。そして、状態監視スレッド実行部は、仮想マシン状態に変更がある場合に、仮想マシン状態の変更の内容を判定する（ステップＳ１１２）。
【０１４１】
マシン状態の変更の内容が新たな仮想マシン１２４の開始である場合に、状態監視スレッド実行部は、新たに開始される仮想マシン１２４に対応するプロセスに対して、プロセス識別情報を作成して割り当てる（ステップＳ１１３）。そして、状態監視スレッド実行部は、割り当てたプロセス識別情報を、割り当てられたプロセスに対応する仮想マシン１２４の仮想デバイス１２２に書き込む（ステップＳ１１４）。そして、状態監視スレッド実行部は、新たに開始される仮想マシン１２４について、仮想マシン一覧である仮想マシン／プロセス一覧１１８に追加する（ステップＳ１１５）。これにより、仮想マシン１２４に生じた仮想マシン状態の変更に応じて、仮想マシン／プロセス一覧１１８が更新される。
【０１４２】
この後、状態監視スレッド実行部は、ダンプ採取サービス部１１２に、仮想マシン状態を変更したことを通知する（ステップＳ１１６）。
【０１４３】
ステップＳ１１２において、マシン状態の変更の内容が仮想マシン１２４の停止である場合に、状態監視スレッド実行部は、停止される仮想マシン１２４について、仮想マシン／プロセス一覧１１８において、マシン状態を更新する（ステップＳ１１７）。これにより、仮想マシン１２４に生じた仮想マシン状態の変更に応じて、仮想マシン／プロセス一覧１１８が更新される。この後、状態監視スレッド実行部は、ステップＳ１１６を実行する。
【０１４４】
ステップＳ１１２において、マシン状態の変更の内容が仮想マシン１２４の削除である場合に、状態監視スレッド実行部は、削除される仮想マシン１２４について、仮想マシン／プロセス一覧１１８から削除する（ステップＳ１１８）。これにより、仮想マシン１２４に生じた仮想マシン状態の変更に応じて、仮想マシン／プロセス一覧１１８が更新される。この後、状態監視スレッド実行部は、ステップＳ１１６を実行する。
【０１４５】
この後、状態監視スレッド実行部は、予め定められた時間が経過するまで待機し（ステップＳ１１９）、その後、ステップＳ１１０を繰り返す。
【０１４６】
一方、ステップＳ１１１において、仮想マシン状態に変更がない場合に、状態監視スレッド実行部は、ステップＳ１１９を実行する。
【０１４７】
図７は、識別情報作成処理フローであり、ホストＯＳ１１のホストドライバ１１３における処理を示す。
【０１４８】
ホストＯＳ１１のホストドライバ１１３は、ホストドライバ１１３の初期化処理を実行する（ステップＳ２１）。これにより、ホストドライバ１１３は、予め定められた初期状態に復帰する。
【０１４９】
初期化処理の後、ホストドライバ１１３は、ゲストＯＳ１２からの仮想バス２１を介しての割り込みの受付を開始する（ステップＳ２２）。ゲストＯＳ１２からの割り込みの受付は、初期化処理の後、直ちに開始される。しかし、実際にゲストＯＳ１２からの割り込みが発生するのは、ゲストＯＳ１２が、下記のように、仮想化ＩＤ／プロセス一覧１１７へ追加された後である。
【０１５０】
この後、ホストドライバ１１３は、ダンプ採取サービス部１１２からの種々の要求の受付を開始する（ステップＳ２３）。ダンプ採取サービス部１１２からの要求の受付の処理において、以下のように、仮想化ＩＤ／プロセス一覧１１７の作成及び更新が実行される。
【０１５１】
ステップＳ２２の後、ホストドライバ１１３は、ゲストＯＳ１２のクラッシュの通知である仮想バス２１への割り込みを待つ処理、換言すれば、クラッシュ発生待ちの処理に入る（ステップＳ２４）。
【０１５２】
ステップＳ２３の後、ホストドライバ１１３は、サービス要求の処理を開始し、ダンプ採取サービス部１１２からのＩＯ要求を受け付ける（ステップＳ２５）。そして、ホストドライバ１１３は、ダンプ採取サービス部１１２からのＩＯ要求を受け付けると、受け付けたＩＯ要求の種別や変更内容を判定する（ステップＳ２６）。
【０１５３】
ステップＳ２６において受け付けたＩＯ要求が仮想マシン１２４の停止、仮想マシン１２４の削除である場合には、ホストドライバ１１３は、停止や削除の対象である仮想マシン１２４に対応するプロセスのプロセス識別情報を用いて仮想化ＩＤ／プロセス一覧１１７を参照して、停止や削除の対象である仮想マシン１２４が仮想マシン一覧の仮想化ＩＤ／プロセス一覧１１７に追加されているか否かを調べる（ステップＳ２７）。そして、ホストドライバ１１３は、停止や削除の対象である仮想マシン１２４が仮想化ＩＤ／プロセス一覧１１７に追加されている場合には（ステップＳ２７、Ｙｅｓ）、停止や削除の対象である仮想マシン１２４を、仮想化ＩＤ／プロセス一覧１１７から削除する（ステップＳ２８）。
【０１５４】
なお、ホストドライバ１１３は、停止や削除の対象である仮想マシン１２４が仮想化ＩＤ／プロセス一覧１１７に追加されていない場合には（ステップＳ２７、Ｎｏ）、停止や削除の対象である仮想マシン１２４についての処理を行わない。
【０１５５】
ステップＳ２６において受け付けたＩＯ要求が仮想マシン１２４のクラッシュの監視開始、仮想マシン１２４の開始である場合には、ホストドライバ１１３は、仮想化ＩＤ／プロセス一覧１１７の作成更新処理を開始する。最初に、ホストドライバ１１３は、ハイパーバイザ２に接続して、全てのゲストＯＳ１２が動作する仮想マシン１２４に割り当てられた仮想バス２１の仮想化ＩＤを取得して列挙する（ステップＳ２９）。
【０１５６】
この後、ホストドライバ１１３は、予め定められた順に、例えば仮想化ＩＤの昇順に、１個の仮想化ＩＤを処理対象として、仮想化ＩＤで識別される仮想マシン１２４がゲストドライバ１２１を含んでおり仮想化ＩＤ／プロセス一覧１１７に追加されているか否かを調べる（ステップＳ２１０）。処理対象である仮想マシン１２４が仮想化ＩＤ／プロセス一覧１１７に追加されている場合には（ステップＳ２１０、Ｙｅｓ）、ホストドライバ１１３は、次の処理対象である仮想マシン１２４についてステップＳ２９を繰り返す。
【０１５７】
処理対象である仮想マシン１２４が仮想化ＩＤ／プロセス一覧１１７に追加されていない場合には（ステップＳ２１０、Ｎｏ）、ホストドライバ１１３は、処理対象である仮想マシン１２４に対してクラッシュ監視の開始を通知し（ステップＳ２１１）、この通知に対する応答として、処理対象である仮想マシン１２４からそのプロセス識別情報を取得する（ステップＳ２１２）。そして、ホストドライバ１１３は、処理対象である仮想マシン１２４について、取得した仮想化ＩＤと、これに対応するプロセス識別情報とを、仮想化ＩＤ／プロセス一覧１１７に追加し（ステップＳ２１３）、全ての仮想化ＩＤについての処理を終了するまでステップＳ２９を繰り返す。これにより、仮想化ＩＤとこれに対応するプロセス識別情報とが取得できた仮想マシン１２４が、仮想化ＩＤ／プロセス一覧１１７に登録され、クラッシュの監視対象とされる。
【０１５８】
ステップＳ２６において受け付けたＩＯ要求が仮想マシン１２４のクラッシュの監視停止である場合には、ホストドライバ１１３は、仮想化ＩＤ／プロセス一覧１１７の全ての仮想マシン１２４についての情報を破棄する（ステップＳ２１４）。
【０１５９】
図８は、識別情報作成処理フローであり、ゲストＯＳ１２のゲストドライバ１２１における処理を示す。
【０１６０】
ゲストドライバ１２１は、ゲストドライバ１２１の初期化処理を実行する（ステップＳ３１）。これにより、ゲストドライバ１２１は、予め定められた初期状態に復帰する。
【０１６１】
初期化処理の後、ゲストドライバ１２１は、ホストドライバ１１３からのクラッシュの監視開始の通知の待ち状態となる（ステップＳ３２）。
【０１６２】
この後、待ち状態のゲストドライバ１２１は、ホストドライバ１１３からのクラッシュの監視開始の通知を受信する（ステップＳ３３）。そして、クラッシュの監視開始の通知の受信を契機として、ゲストドライバ１２１は、対応するゲストＯＳ１２が使用する仮想デバイス１２２にアクセスして、仮想デバイス１２２から自己の動作する仮想マシン１２４に対応するプロセスのプロセス識別情報を読み出して取得する（ステップＳ３４）。
【０１６３】
この後、ゲストドライバ１２１は、仮想デバイス１２２から取得したプロセス識別情報を、ホストドライバ１１３に通知する（ステップＳ３５）。そして、ゲストドライバ１２１は、ゲストＯＳ１２のパニック出口にゲストドライバ１２１を登録する（ステップＳ３６）。ゲストドライバ１２１の登録は、例えば、クラッシュ発生時にゲストＯＳ１２のパニック出口から呼び出される関数を登録することにより行われる。この後、ゲストドライバ１２１は、ゲストＯＳ１２の終了待ち又はクラッシュの発生待ち処理を実行する（ステップＳ３７）。
【０１６４】
図９は、ダンプ採取処理フローであり、ゲストＯＳ１２のゲストドライバ１２１における処理を示す。
【０１６５】
ゲストドライバ１２１は、ゲストドライバ１２１の初期化処理及び仮想マシン識別情報作成処理の後（ステップＳ４１）、ＯＳ状態監視スレッドとクラッシュ待ちスレッドとを生成する。ＯＳ状態監視スレッドは、ＯＳ状態監視スレッド実行部により実行される。クライアント待ちスレッドは、クライアント待ちスレッド実行部により実行される。ＯＳ状態監視スレッドとクライアント待ちスレッドとは、並行して実行される。なお、ステップＳ４１の処理は、図８に示す処理である。
【０１６６】
ゲストドライバ１２１、換言すれば、ＯＳ状態監視スレッド実行部は、ステップＳ４１の後、情報処理システムにおけるイベント待ちの状態となる（ステップＳ４２）。即ち、ゲストドライバ１２１は、クラッシュの監視開始の通知をホストドライバ１１３から受け取って、プロセス識別情報をホストドライバ１１３に返信し、ゲストＯＳ１２のパニック出口にゲストドライバ１２１を登録した後に、イベント待ちの状態になる。
【０１６７】
この後、ＯＳ状態監視スレッド実行部は、イベントが発生すると、発生したイベントがゲストＯＳ１２の終了というイベントであるか否かを調べる（ステップＳ４３）。発生したイベントがゲストＯＳ１２の終了というイベントでない場合には（ステップＳ４３、Ｎｏ）、ＯＳ状態監視スレッド実行部は、ステップＳ４２を繰り返す。
【０１６８】
発生したイベントがゲストＯＳ１２の終了というイベントである場合には（ステップＳ４３、Ｙｅｓ）、ＯＳ状態監視スレッド実行部は、ゲストＯＳ１２のパニック出口へのゲストドライバ１２１の登録を解除して、ゲストＯＳ１２自体を終了させる（ステップＳ４４）。
【０１６９】
一方、ゲストドライバ１２１、換言すれば、クラッシュ待ちスレッド実行部は、ゲストＯＳ１２が自己におけるクラッシュの発生を検出すると、ゲストＯＳ１２のパニック出口に登録されているゲストドライバ１２１を呼び出す（ステップＳ４５）。
【０１７０】
呼び出されたゲストドライバ１２１は、仮想バス２１を介してホストＯＳ１１に割り込むことにより、ホストドライバ１１３へ、ゲストＯＳ１２におけるクラッシュの発生を通知する（ステップＳ４６）。
【０１７１】
そして、ゲストドライバ１２１は、ステップＳ４６に続いて、又は、ステップＳ４６と並行して、ゲストＯＳ１２によるメモリダンプの出力を抑止する処理ルーチンを呼び出して、メモリダンプの出力を抑止させる（ステップＳ４７）。この処理ルーチンは、仮想マシン１２４の外部からゲストＯＳ１２の使用するメモリ１２３の内容を保存するまで、仮想マシン１２４のメモリ１２３の内容が変更されないようにする無限ループである。
【０１７２】
図１０は、ダンプ採取処理フローであり、ホストＯＳ１１のホストドライバ１１３における処理を示す。
【０１７３】
ホストドライバ１１３は、ホストドライバ１１３の初期化処理及び仮想マシン識別情報作成処理の後（ステップＳ５１）、ＯＳ状態監視スレッドと割り込み待ちスレッドとを生成する。ＯＳ状態監視スレッドは、ＯＳ状態監視スレッド実行部により実行される。割り込み待ちスレッドは、割り込み待ちスレッド実行部により実行される。ＯＳ状態監視スレッドと割り込み待ちスレッドとは、並行して実行される。なお、ステップＳ５１の処理は、図７に示す処理である。
【０１７４】
割り込み待ちスレッドの生成により、ホストドライバ１１３は、ゲストＯＳ１２のゲストドライバ１２１からの割り込みの受け付けが可能となる。ホストドライバ１１３は、ダンプ採取サービス部１１２からクラッシュの監視開始の要求を受け取って、クラッシュ監視対象の仮想化ＩＤ／プロセス一覧１１７を作成した後に、実際のクラッシュの監視を開始する。換言すれば、ホストドライバ１１３は、情報処理システムにおけるイベント待ち、及び、割り込み待ちの状態となる。
【０１７５】
ホストドライバ１１３、換言すれば、ＯＳ状態監視スレッド実行部は、ステップＳ５１の後、情報処理システムにおけるイベント待ちの状態となる（ステップＳ５２）。
【０１７６】
この後、ＯＳ状態監視スレッド実行部は、イベントが発生すると、発生したイベントがホストＯＳ１１の終了というイベントであるか否かを調べる（ステップＳ５３）。発生したイベントがホストＯＳ１１の終了というイベントでない場合には（ステップＳ５３、Ｎｏ）、ＯＳ状態監視スレッド実行部は、ステップＳ５２を繰り返す。
【０１７７】
発生したイベントがホストＯＳ１１の終了というイベントである場合には（ステップＳ５３、Ｙｅｓ）、ＯＳ状態監視スレッド実行部は、割り込み待ちスレッドを解除し（ステップＳ５４）、仮想マシン一覧の仮想化ＩＤ／プロセス一覧１１７を破棄して（ステップＳ５５）、処理を終了する。
【０１７８】
一方、ホストドライバ１１３、換言すれば、割り込み待ちスレッド実行部は、情報処理システムからの割り込みの待ち状態となる（ステップＳ５６）。
【０１７９】
割り込み待ちスレッド実行部は、ゲストＯＳ１２におけるクラッシュの発生に応じてゲストドライバ１２１により仮想バス２１を介してホストＯＳ１１に割り込みが発生すると、発生した割り込みを捕捉する（ステップＳ５７）。そして、割り込み待ちスレッドは、仮想化ＩＤのような割り込みに付随する情報を参照することにより、割り込みがゲストＯＳ１２のクラッシュを契機として発生したものか否かを判定する（ステップＳ５８）。
【０１８０】
割り込みがゲストＯＳ１２のクラッシュを契機として発生したものでない場合には、ホストＯＳ１１で発生したイベントを契機として発生した割り込みであるので、割り込み待ちスレッド実行部は、捕捉した割り込みを、ホストＯＳ１１用の割り込み待ちスレッドに転送した後（ステップＳ５９）、ステップＳ５６を繰り返す。割り込み待ちスレッドがゲストＯＳ１２のクラッシュに起因する割り込みを処理するスレッドであるのに対して、ホストＯＳ１１用の割り込み待ちスレッド実行部はホストＯＳ１１に起因する割り込みを処理するスレッドである。
【０１８１】
割り込みがゲストＯＳ１２のクラッシュを契機として発生した場合には、割り込み待ちスレッド実行部は、仮想化ＩＤに基づいて、プロセス識別情報を解決する（ステップＳ５１０）。具体的には、割り込み待ちスレッド実行部は、割り込みの発生した仮想バス２１に基づいて、クラッシュが発生したゲストＯＳ１２が動作する仮想マシン１２４に割り当てられた仮想バス２１の仮想化ＩＤを特定する。そして、特定した仮想化ＩＤをキーとして用いて仮想化ＩＤ／プロセス一覧１１７を参照することにより、クラッシュが発生したゲストＯＳ１２が動作する仮想マシン１２４に対応するプロセスのプロセス識別情報を得る。これにより、クラッシュが発生したゲストＯＳ１２が動作する仮想マシン１２４に対応する、ホストＯＳ１１のプロセスを特定することができる。
【０１８２】
この後、割り込み待ちスレッド実行部は、特定した仮想マシン１２４をダンプ採取サービス部１１２に通知して（ステップＳ５１１）、ステップＳ５６を繰り返す。この通知は、クラッシュが発生したゲストＯＳ１２が動作する仮想マシン１２４に対応するプロセスのプロセス識別情報を含む。
【０１８３】
図１１は、ダンプ採取処理フローであり、ホストＯＳ１１のダンプ採取サービス部１１２における処理を示す。
【０１８４】
ダンプ採取サービス部１１２は、ダンプ採取サービス部１１２の初期化処理及び仮想マシン識別情報作成処理の後（ステップＳ６１）、ＯＳ状態監視スレッドとクラッシュイベント待ちスレッドとを生成する。ＯＳ状態監視スレッドは、ＯＳ状態監視スレッド実行部により実行される。クラッシュイベント待ちスレッドは、クラッシュイベント待ちスレッド実行部により実行される。ＯＳ状態監視スレッドとクラッシュイベント待ちスレッドとは、並行して実行される。なお、ステップＳ６１の処理は、図５及び図６に示す処理である。
【０１８５】
ダンプ採取サービス部１１２、換言すれば、ＯＳ状態監視スレッド実行部は、ステップＳ６１の後、情報処理システムにおけるイベント待ちの状態となる（ステップＳ６２）。
【０１８６】
この後、ＯＳ状態監視スレッド実行部は、イベントが発生すると、発生したイベントがホストＯＳ１１の終了というイベントであるか否かを調べる（ステップＳ６３）。発生したイベントがホストＯＳ１１の終了というイベントでない場合には（ステップＳ６３、Ｎｏ）、ＯＳ状態監視スレッド実行部は、ステップＳ６２を繰り返す。
【０１８７】
発生したイベントがホストＯＳ１１の終了というイベントである場合には（ステップＳ６３、Ｙｅｓ）、ＯＳ状態監視スレッド実行部は、クラッシュイベント待ちスレッドによるクラッシュイベントの受信を停止し（ステップＳ６４）、ホストドライバ１１３にクラッシュ監視の停止を指示し（ステップＳ６５）、仮想マシン一覧の仮想マシン／プロセス一覧１１８を破棄して（ステップＳ６６）、処理を終了する。
【０１８８】
一方、ダンプ採取サービス部１１２、換言すれば、クラッシュイベント待ちスレッド実行部は、情報処理システムのイベント待ち状態となる（ステップＳ６７）。
【０１８９】
クラッシュイベント待ちスレッド実行部は、ホストドライバ１１３からのクラッシュの発生通知を受信すると、クラッシュの発生通知に基づいて、クラッシュが発生したゲストＯＳ１２が動作する仮想マシン１２４を特定する。クラッシュの発生通知に基づくのは、仮想マシン１２４及びゲストＯＳ１２は、その仮想マシン１２４がどのプロセスとして実行されているか知ることができないためである。そして、割り込み待ちスレッド実行部は、仮想マシン１２４を特定すると、特定した仮想マシン１２４に対応して、ダンプ採取スレッドを起動する（ステップＳ６８）。ダンプ採取スレッドは、仮想マシン１２４毎に起動される。従って、複数のダンプ採取スレッドが起動される場合がある。ダンプ採取スレッドは、ダンプ採取スレッド実行部により実行される。メモリダンプ処理はある程度時間のかかる処理であるため、ダンプ採取サービス部１１２の処理と、クラッシュイベント待ちスレッドの処理とは、非同期に実行される。
【０１９０】
クラッシュイベント待ちスレッド実行部は、ダンプ採取スレッドを起動した後、ステップＳ６７のイベント待ち状態に戻る。
【０１９１】
起動されたダンプ採取スレッド実行部は、クラッシュが発生したゲストＯＳ１２が使用するメモリ１２３の内容を、一時ファイルとして保存状態格納領域１１４に保存する（ステップＳ６９）。そして、ダンプ採取スレッド実行部は、ダンプ変換処理を実行するダンプ変換スレッドを起動する（ステップＳ６１０）。
【０１９２】
この後、ダンプ採取スレッド実行部は、仮想マシン管理サービス部１１６に、仮想マシン１２４の停止と再起動を依頼する（ステップＳ６１１）。
【０１９３】
一方、起動されたダンプ変換スレッド実行部は、保存状態格納領域１１４に保存されたメモリ１２３の内容の一時ファイルを、ダンプファイルの形式に変換して、ダンプ格納領域１１５に格納する（ステップＳ６１２）。
【０１９４】
以上、本発明を実施例に基づいて説明したが、本発明は、その主旨の範囲内において種々の変形が可能である。
【０１９５】
例えば、ゲストＯＳ１２からホストＯＳ１１へのクラッシュの通知に、仮想バス２１以外を用いるようにしても良い。この場合、クラッシュの通知が、ハードウェア割り込みと同等の優先度で捕捉されるようにすればよい。また、クラッシュの通知において、仮想化ＩＤ以外の識別情報を用いるようにしても良い。
【０１９６】
また、ゲストＯＳ１２のクラッシュのみでなく、ホストＯＳ１１のクラッシュを検出して、同様の手段により、仮想マシン制御部であるホストＯＳ１１が使用するメモリのダンプファイルを取得するようにしてもよい。
【０１９７】
また、ゲストＯＳ１２が動作する仮想マシン１２４が、仮想デバイス１２２以外の手段により、プロセス識別情報を保持するようにしてもよい。
【０１９８】
また、ホストドライバ１１３とダンプ採取サービス部１１２とを一体に形成するようにしてもよい。この場合、仮想化ＩＤ／プロセス一覧１１７と仮想マシン／プロセス一覧１１８とを一体に形成するようにしてもよい。
【０１９９】
また、ホストＯＳ１１が、仮想化ＩＤ／プロセス一覧１１７と仮想マシン／プロセス一覧１１８と備えるようにしてもよい。また、ホストＯＳ１１が、仮想化ＩＤ／プロセス一覧１１７と仮想マシン／プロセス一覧１１８とを一体に形成した一覧を備え、ホストドライバ１１３及びダンプ採取サービス部１１２からの要求に応じて必要な情報を提供するようにしてもよい。
【符号の説明】
【０２００】
１    仮想マシン
２    ハイパーバイザ
３    ハードウェア
１１  ホストＯＳ
１２  ゲストＯＳ
２１  仮想バス
１１１    ダンプ採取ツール
１１２    ダンプ採取サービス部
１１３    ホストドライバ
１１４    保存状態格納領域
１１５    ダンプ格納領域
１１６    仮想マシン管理サービス部
１１７    仮想化ＩＤ／プロセス一覧
１１８    仮想マシン／プロセス一覧
１２１    ゲストドライバ
１２２    仮想デバイス
１２３    メモリ
１２４    仮想マシン
１２５    仮想ＣＰＵ
【図１】
2015132979.tif 000003
【図２】
2015132979.tif 000004
【図３】
2015132979.tif 000005
【図４】
2015132979.tif 000006
【図５】
2015132979.tif 000007
【図６】
2015132979.tif 000008
【図７】
2015132979.tif 000009
【図８】
2015132979.tif 000010
【図９】
2015132979.tif 000011
【図１０】
2015132979.tif 000012
【図１１】
2015132979.tif 000013