(57)【要約】  第１のオペレーティングシステム（ＯＳ）の不具合の原因を解明するためのスナップショットを第１のＯＳの処理を継続したまま取得する。物理レジスタを有する処理装置を備えた情報処理装置において、第１のＯＳが用いる第１の情報を前記物理レジスタに保持するとともに、処理装置が、物理レジスタに保持する情報をモニタプログラムが用いてる第２の情報から第１のＯＳが用いる第１の情報に変更するとともに、前記処理装置が、前記物理レジスタに保持された前記第１の情報を参照する。
2009147738.tif 000002
【特許請求の範囲】
【請求項１】
物理レジスタを有する処理装置を備えた情報処理装置において、
第１の情報を有し、前記第１の情報を前記物理レジスタに保持するとともに、アプリケーションプログラムを動作させる第１のオペレーティングシステムと、
第２の情報を有し、前記第２の情報を前記物理レジスタに保持するとともに、前記第１のオペレーティングシステムが前記処理装置に対して発行する命令の制御を行い、前記物理レジスタが有する情報を参照するモニタプログラムと、
を前記処理装置が、それぞれ切り替えながら実行するとともに、
前記処理装置が、前記モニタプログラムを実行している場合に、前記物理レジスタに保持する情報を前記第２の情報から前記第１の情報に変更するとともに、前記処理装置が、前記物理レジスタに保持された前記第１の情報を参照することを特徴とする情報処理装置。
【請求項２】
前記処理装置はさらに、
第３の情報を有し、前記第３の情報を前記物理レジスタに保持するとともに、前記第１のオペレーティングシステムの制御を行う第２のオペレーティングシステムに切り替えて実行することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記情報処理装置はさらに、
入出力装置を有するとともに、
前記処理装置はさらに、
第４の情報を有し、前記第４の情報を前記物理レジスタに保持するとともに、前記第１のオペレーティングシステムからの入出力要求を、前記入出力装置に対して発行する第３のオペレーティングシステムに切り替えて実行させることを特徴とする請求項１記載の情報処置装置。
【請求項４】
前記処理装置が参照する前記第１の情報は、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムに含まれる関数に関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムのプログラムの動作状況に関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムにおいて、動作中のプログラムが有する構造体に関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムが出力するメッセージに関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムが使用している前記記憶装置に関する情報、
のいずれかであることを特徴とする請求項１記載の情報処理装置。
【請求項５】
物理レジスタを有する処理装置を備えた情報処理装置の制御方法において、
第１のオペレーティングシステムが用いる第１の情報を前記物理レジスタに保持するとともに、前記処理装置が、アプリケーションプログラムを動作させる前記第１のオペレーティングシステムを実行するステップと、
モニタプログラムが用いる第２の情報を前記物理レジスタに保持するとともに、前記処理装置が、前記第１及び第２のオペレーティングシステムが前記処理装置に対して発行する命令の制御を行い、前記物理レジスタが有する情報を参照するモニタプログラムを実行するステップと、
前記処理装置が、前記モニタプログラムを実行する場合に、前記物理レジスタに保持する情報を前記第２の情報から前記第１の情報に変更するとともに、前記処理装置が、前記物理レジスタに保持された前記第１の情報を参照するステップを有することを特徴とする制御方法。
【請求項６】
前記制御方法はさらに、
第２のオペレーティングシステムが用いる第３の情報を前記物理レジスタに保持するとともに、前記処理装置が、前記第１のオペレーティングシステムの制御を行う前記第２のオペレーティングシステムを実行するステップを有することを特徴とする請求項５記載の制御方法。
【請求項７】
前記情報処理装置はさらに、
入出力装置を有するとともに、
前記制御方法はさらに、
前記処理装置が、第３のオペレーティングシステムが用いる第４の情報を前記物理レジスタに保持するとともに、前記第１のオペレーティングシステムからの入出力要求を、前記入出力装置に対して発行する第３のオペレーティングシステムに切り替えて実行するステップを有することを特徴とする請求項５記載の制御方法。
【請求項８】
前記処理装置が参照する前記第１の情報は、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムに含まれる関数に関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムのプログラムの動作状況に関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムにおいて、動作中のプログラムが有する構造体に関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムが出力するメッセージに関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムが使用している前記記憶装置に関する情報、
のいずれかであることを特徴とする請求項５記載の制御方法。
【請求項９】
物理レジスタを有する処理装置を備えた情報処理装置のモニタプログラムにおいて、
前記処理装置に、第１のオペレーティングシステムが用いる第１の情報を前記物理レジスタに保持するとともに、前記処理装置が、アプリケーションプログラムを動作させる前記第１のオペレーティングシステムを実行させるステップと、
前記処理装置に、前記物理レジスタに保持する情報を前記第２の情報から前記第１の情報に変更するとともに、前記処理装置が、前記物理レジスタに保持された前記第１の情報を参照させるステップを有することを特徴とするモニタプログラム。
【請求項１０】
前記モニタプログラムはさらに、
前記処理装置に、第２のオペレーティングシステムが用いる第３の情報を前記物理レジスタに保持させるとともに、前記第１のオペレーティングシステムの制御を行う前記第２のオペレーティングシステムを実行させるステップを有することを特徴とする請求項９記載のモニタプログラム。
【請求項１１】
前記情報処理装置はさらに、
入出力装置を有するとともに、
前記モニタプログラムはさらに、
前記処理装置に、第３のオペレーティングシステムが用いる第４の情報を前記物理レジスタに保持させるとともに、前記第１のオペレーティングシステムからの入出力要求を、前記入出力装置に対して発行する第３のオペレーティングシステムに切り替えて実行させるステップを有することを特徴とする請求項９記載のモニタプログラム。
【請求項１２】
前記処理装置が参照する前記第１の情報は、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムに含まれる関数に関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムのプログラムの動作状況に関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムにおいて、動作中のプログラムが有する構造体に関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムが出力するメッセージに関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムが使用している前記記憶装置に関する情報、
のいずれかであることを特徴とする請求項９記載のモニタプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置における不具合の原因を検出する技術に関する。
【背景技術】
【０００２】
従来、情報処理装置おいて、ハードウェア資源や並行するアプリケーションプログラムの動作状況によっては、不都合が生じることがあった。【０００３】
この不都合としては、例えば、アプリケーションの動作に時間が掛かったり、レスポンスが低下したりといったスローダウンが、比較的発生し易い。【０００４】
スローダウンに陥る原因としては、以下のケースが多く見られる。
１．メモリやＩ／Ｏ等のハードウェア資源の取得に競合が発生し、資源待ち状態になった場合。
２．複数アプリケーション間でのロック競合が発生し、ロック獲得に時間を要し、処理が進まない場合。【０００５】
スローダウンが発生すると、レスポンスの悪化等の現象が現れるため、発生したことは容易に判断可能であるが、発生原因はプログラムの動作に依拠するので、現れた現象から単純に判断することはできない。【０００６】
このため、原因を究明し対処を行うためには、ダンプの採取や動作のトレースといった手法が採られる。【０００７】
ダンプを採取する手法では、情報処理装置がスローダウンとなっている状態でメモリの内容やレジスタの内容のダンプを採取し、その内容から動作しているプログラムと処理を推測し、スローダウンの原因を特定する。【０００８】
また、プログラムの動作をトレースする手法では、フライトレコーダーに代表されるツールで、プログラムの動作中に関数へのパラメタや関数からの戻り値、エラー条件などのトレースデータを採取し、この採取したトレースデータを解析することでプログラムの動作を解明する。【０００９】
例えば、下記の文献に開示される技術がある。
【特許文献１】特開２００２−３２２４４号公報
【特許文献２】特開平０４−１８３４号公報
【特許文献３】特開２０００−２５９４３５号公報
【非特許文献１】ＩＢＭ、iSeries Information Center、フライトレコーダー、インターネット、〈http://publib.boulder.ibm.com/html/as400/v5r1/ic2962/index.htm?info/rzahw/rzahwflyco.htm〉、検索日2008.03.18
【発明の開示】
【発明が解決しようとする課題】
【００１０】
上記ダンプを採取する手法では、ある一時点の状態を採取できるだけであり、採取のタイミングによっては原因の究明に至らないこともある。例えば、ロック競合の発生と解消が断続的に繰り返されている場合、全体的なスローダウンが生じていても、瞬間的にはロック競合が解消しており、ダンプを採取した時にもし競合が解消していたら原因を究明できない。【００１１】
また、ダンプを採取するためには、メモリやレジスタの内容が書き換わらないように、スローダウンが生じた時点で情報処理装置を完全に停止させなければならない。即ち、業務を停止させなければならず、不利益が大きい。特に、スローダウンしつつも業務を続けているシステムを停止することとなり、ダメージを広げてしまう。【００１２】
更に、容量が数ＴＢのメモリのダンプを磁気記録媒体へ出力する作業は、数時間かかるため、安易にダンプの取得を繰り返せるものではない。【００１３】
また、上記プログラムの動作をトレースする手法では、トレースデータを採取すること自体がオーバヘッドとなり、スローダウンに拍車をかけてしまう可能性が高い。【００１４】
逆に、トレースデータを採取する動作が追加されることで、プログラムの動作タイミングが変化して、スローダウンが起きなくなり、原因の究明ができなくなる可能性もある。【００１５】
さらに、トレース機能自体のソフトウェア障害（バグ）により、業務が正常にできなくなる可能性がある。【００１６】
そこで、モニタプログラムが第１のＯＳの情報を参照することにより、不具合の原因究明のための情報を取得する技術を提供する。
【課題を解決するための手段】
【００１７】
上記課題を解決するため、本件の情報処理装置は、
物理レジスタを有する処理装置を備え、
第１の情報を有し、前記第１の情報を前記物理レジスタに保持するとともに、アプリケーションプログラムを動作させる第１のオペレーティングシステムと、
第２の情報を有し、前記第２の情報を前記物理レジスタに保持するとともに、前記第１のオペレーティングシステムが前記処理装置に対して発行する命令の制御を行い、前記物理レジスタが有する情報を参照するモニタプログラムと、
を前記処理装置が、それぞれ切り替えながら実行するとともに、
前記処理装置が、前記モニタプログラムを実行している場合に、前記物理レジスタに保持する情報を前記第２の情報から前記第１の情報に変更するとともに、前記処理装置が、前記物理レジスタに保持された前記第１の情報を参照する。
【発明の効果】
【００１８】
本件で開示の物又は方法によれば、第１のオペレーティングシステム（ＯＳ）の不具合の原因を解明するためのスナップショットを第1のＯＳの処理を継続したまま取得する技術を提供できる。
【図面の簡単な説明】
【００１９】
【図１】実施例に係る情報処理装置の概略図
【図２】情報処理装置のハードウェア構成図
【図３】物理メモリに割り当てられた領域の説明図
【図４】実施例のディスパッチの説明図
【図５】ディスパッチ時にスナップショットを取得するフローを示す図
【図６】スナップショット採取の処理を示す図
【図７】スナップショットの例を示す図
【図８】スナップショットの取得元である物理レジスタの構成を示す図
【図９】スナップショットの取得元である物理メモリの構成を示す図
【図１０】スナップショットの格納及びレポートの説明図
【図１１】ドライバＯＳとしても動作可能なホストＯＳを用いた例を示す図
【図１２】ホストＯＳ内蔵型のハイパーバイザを用いた例を示す図
【図１３】レポートを作成するタイミングを通知する例を示す図
【図１４】スローダウンが発生した場合の具体例を示す図
【図１５】スナップショットの例を示す図
【図１６】スナップショットの例を示す図
【図１７】レポートの処理の説明図
【図１８】レポート条件に該当した箇所をまとめた情報の例を示す図
【図１９】レポート条件に該当した箇所をまとめた情報の例を示す図
【発明を実施するための最良の形態】
【００２０】
図１は、本実施例に係る情報処理装置の概略図である。図１に示すように、本例の情報処理装置１０は、ホストＯＳがハイパーバイザを介して複数のゲストＯＳを動作させる仮想計算機（ＶＭ：Virtual Machine）システムとして動作する。【００２１】
図２は、情報処理装置１０のハードウェア構成図である。図２に示すように、情報処理装置１０は、処理装置（例えばＣＰＵ：central processing unit）１１や、メインメモリ１２、入出力インタフェース１３を備えたコンピュータである。【００２２】
入出力インタフェース１３には、演算処理の為のデータやソフトウェアを記憶した記憶装置（ハードディスク）１４、他のコンピュータとの通信を制御する通信制御部（ＣＣＵ：Communication Control Unit）１５、コンソール（ＣＯＮ）１６が接続されている。また、コンソール１６は、オペレータによる入力操作を行う操作部（キーボード等）や表示出力を行う表示部を有している。【００２３】
情報処理装置１０は、ＣＰＵ１１が記憶装置（記録媒体）１４から読み出したプログラムに従って処理を行う。即ち、ホストＯＳ（第２のＯＳ）、ドライバＯＳ（第３のＯＳ）、ハイパーバイザ（モニタプログラム）、ゲストＯＳ（第１のＯＳ）、フロントエンドドライバ、バックエンドドライバ等のプログラムが、後述の処理を情報処理装置に実行させることで、仮想計算機（ＶＭシステム）を実現させている。【００２４】
ホストＯＳは、ＶＭシステム（情報処理装置１０）の起動が開始されると自動で起動され、ドメイン０として動作する。ホストＯＳは、ドライバドメインやゲストドメインなどを含めたＶＭシステム全体の操作、管理を行うためのＯＳである。なお、ホストＯＳは、ドライバＯＳとしても動作可能である。【００２５】
ハイパーバイザは、各ＯＳのディスパッチや、各ＯＳが実行する特権命令のエミュレーション、ＣＰＵ１１に関するハードウェア制御等を行う。なお、ハイパーバイザがホストＯＳを含んでも良い。【００２６】
ドライバＯＳは、記憶装置１４や通信制御部１５、コンソール１６等のＩ／Ｏ装置を制御する。ＶＭシステムにおいては、複数のゲストＯＳがそれぞれＩ／Ｏ装置を有しているのではなく、各ゲストＯＳの入出力をドライバＯＳに依頼し、ドライバＯＳが代行することで各ゲストＯＳの入出力制御を仮想化している。【００２７】
具体的には、図１に示すように各ゲストＯＳが入力或は出力の制御（Ｉ／Ｏ制御）のため、Ｉ／Ｏ装置に対して情報を送信すると、ＦＥ（Front end）ドライバがハイパーバイザに伝達し、ドライバＯＳがバックエンドドライバを介して前記情報をハイパーバイザから受信する。ドライバＯＳは、この受信した情報を実ドライバによりＩ／Ｏ装置に送り、実際にＩ／Ｏ制御を行う。【００２８】
反対に、Ｉ／Ｏ装置から実ドライバを介して情報を受信した場合、ドライバＯＳは、バックエンドドライバを介して該情報をハイパーバイザに伝達し、ゲストＯＳがフロントエンドドライバを介して前記情報をハイパーバイザから受信する。【００２９】
ドライバＯＳは、ホストＯＳ上やゲストＯＳ上でも動作可能である。なお、ゲストＯＳ上でドライバＯＳを動作させた場合に、そのＯＳがドライバＯＳとなる。【００３０】
ゲストＯＳは、ハイパーバイザを介して割り当てられたハードウェア資源を用いて仮想的に情報処理装置の機能を実現する。即ち、各ゲストＯＳは、通常の情報処理装置にインストールされているＯＳと同じであり、複数のゲストＯＳがそれぞれ複数の情報処理装置の機能（ドメインＵ）を実現する。【００３１】
《物理メモリの割り当てに関して》
物理メモリ１２は、図３に示すように、ホストＯＳや、ドライバＯＳ、ゲストＯＳに対して、それぞれ領域が割り当てられている。ハイパーバイザは、各ＯＳが夫々の領域にアクセスするように各ＯＳのメモリアクセスを制御する。例えば、ゲストＯＳが或るアドレスにアクセスする場合、ハイパーバイザが該ゲストＯＳ上のアドレスを当該ゲストＯＳに割り当てられたメモリ１２上のアドレスに変換することで、各ゲストＯＳのメモリアクセスを制御する。【００３２】
ハイパーバイザは、ハイパーバイザ用に割り当てられたメモリ領域を用いて動作するがその他のメモリ領域に関してもアクセスすることができる。ホストＯＳ、ドライバＯＳもハイパーバイザから許可を受けることにより他のＯＳに割り当てられたメモリ領域にアクセスすることが出来る。仮想計算機のメモリ割り当て方法は、幾つか在るが本例の情報処理装置はメモリの割り当て手法が限定されるものではなく、どのようなメモリの割り当て手法であっても利用可能である。【００３３】
《ゲストのディスパッチ》
ハイパーバイザは、ＣＰＵ内部のタイマや外部の物理デバイスからの割込みを契機にディスパッチャを起動する。即ち、ＣＰＵ１１がディスパッチャ（切替部）として機能する。【００３４】
ディスパッチャは、所定のタイミングでドメインの切り替え、即ち、ＣＰＵに割り当てるゲストＯＳの変更を行う。【００３５】
なお、仮想計算機のディスパッチャの実装手法は、幾つか在るが、本例の情報処理装置はディスパッチャの実装手法が限定されるものでは無く、どのような実装手法であっても利用可能である。【００３６】
図４は、本実施例のディスパッチの説明図である。【００３７】
ディスパッチャは、ＯＳを動作させ(ステップ１、以下Ｓ１のようにも略記する）、割り込みがあがった場合（Ｓ２）、ハイパーバイザに制御を戻す（Ｓ３）。【００３８】
ディスパッチャは、ＯＳが動作していた際のＣＰＵ１１内のレジスタの情報をメモリ１２のハイパーバイザが管理する領域に保存する（Ｓ４）。即ち、ゲストＯＳがレジスタに保持させていた第１の情報、ホストＯＳがレジスタに保持させていた第３の情報、或はドライバＯＳがレジスタに保持させていた第４の情報をメモリに退避させる。また、ハイパーバイザが用いる第２の情報をメモリ１２から読み出してＣＰＵ１１の物理レジスタに保持させる。【００３９】
そして、ディスパッチャは、ゲストＯＳの割り当てを変更（ディスパッチ）すべきタイミングか否かを判定する（Ｓ５）。【００４０】
ここでディスパッチャは、ディスパッチすべきタイミングであれば該ディスパッチすべきＯＳを選択し（Ｓ６）、当該ＯＳのレジスタの情報をメモリ１２から読み出してＣＰＵ１１に反映させ（Ｓ７）、ステップ１に戻って当該ＯＳを動作させる。なお、ステップ５でディスパッチすべきタイミングでなければ、ディスパッチせずにステップ１に戻る。【００４１】
《スナップショットの採取》
上述のように本例の情報処理装置１０は、ハイパーバイザ（仮想計算機モニタ）が物理ＣＰＵをゲストＯＳにある時間間隔で配分することで、ＣＰＵの仮想化を行っている。一定時間（例えば、１０ミリ秒）経過すると、必ずハイパーバイザに制御が戻り、その時点でハイパーバイザはゲストＯＳのレジスタやメモリの内容を参照することができる。【００４２】
そこで、ハイパーバイザは、デバッガを起動してＣＰＵ１１をスナップ取得部として機能させ、ゲストＯＳの状態（レジスタやメモリ内の情報）をスナップショットとして採取し、記録することでスローダウンの原因調査のための情報を取得する。【００４３】
スナップショットを採取する場合、図４に示したディスパッチの処理において、ゲストＯＳからハイパーバイザに制御が戻った時にスナップショット採取の処理（Ｓ２０）を追加して、図５のように変更する。【００４４】
図６は、図５のスナップショット採取の処理（Ｓ２０）の説明図である。【００４５】
ハイパーバイザは、制御が戻る直前に動作していたＯＳ、即ちステップＳ１で動作させたＯＳがスナップショット対象のゲストＯＳか否かを判定する（Ｓ２１）。【００４６】
対象のゲストＯＳであれば（Ｓ２１ Yes）、所定のスナップショット採取間隔に達したか否かを判定する（Ｓ２２）。例えば、１０ミリ秒毎のディスパッチの度にスナップショットを取得したのでは情報量が膨大となるため、適切な採取間隔を設定しておく。本例では５秒間隔で取得する。【００４７】
スナップショット採取間隔に達した場合（Ｓ２２ Yes）、ハイパーバイザは、ゲストＯＳのメモリを仮想アドレスで参照できるように、ハイパーバイザのレジスタを変更する（Ｓ２３）。【００４８】
また、ハイパーバイザは、デバッガを起動して（Ｓ２４）、ゲストＯＳの情報を採取できるように準備する。【００４９】
デバッガは、ゲストＯＳの状態（第１の情報）をスナップショットとして取得し（Ｓ２５）、メモリ１２に記憶させる（Ｓ２６）。【００５０】
そして、ハイパーバイザ或はホストＯＳは、前記スナップショットについてレポートする（Ｓ２７）。【００５１】
前記スナップショットは、例えば図７に示すように、ドメイン、レジスタ、バックトレース、ｐｓ、タスク、ｉｒｑ、ログ、仮想メモリといった項目の情報を採取する。【００５２】
スナップショットの各項目は、以下の情報を示す。【００５３】
ドメイン：スナップショットの対象ゲスト名、ｖｃｐｕ数、メモリ量
レジスタ：対象のゲストＯＳが実行されているＣＰＵのレジスタ内に保持された情報
バックトレース：レジスタの内容から関数の呼び出し関係（呼び出した処理の履歴）や、パラメタを遡って採取するデータ
プロセス（ｐｓ）：プロセスの動作状況のデータ
タスク：現在動作しているタスクのタスク管理用構造体
割り込み（ｉｒｑ）：ハードウェアおよびソフトウェア割込み情報
ログ：ＯＳから出力されたメッセージのログ
仮想メモリ（ｖｍ）：レジスタから特定した現在動作中のプロセスが使用しているメモリ情報【００５４】
《スナップショットの参照先》
スナップショットは、ＣＰＵ１１内の物理レジスタを参照して第１の情報を取得する。なお、ディスパッチ時にＣＰＵ１１内のレジスタからメモリ１２へ移された第１の情報をメモリ１２から読み出すことで、間接的にレジスタを参照しても良い。即ち、本例のデバッガは、ＣＰＵ１１内の物理レジスタや、図３に示すメモリ１２のうちゲストＯＳに割り当てられた領域及びハイパーバイザが管理するメモリ領域のうち当該ゲストＯＳの情報を格納した部分からスナップショットを取得する。【００５５】
図８は、スナップショットの取得元である物理レジスタの構成を示す図である。
図８に示すように、ＣＰＵ１１の物理レジスタは、一般レジスタ、制御レジスタ、分岐レジスタ、アプリケーションレジスタを備えている。デバッガは、この物理レジスタからバックトレース情報の一部と、割り込み（ｉｒｑ）情報の一部を取得する。【００５６】
また、図９は、スナップショットの取得元である物理メモリの構成を示す図である。【００５７】
図９に示すように、メモリ１２は、ハイパーバイザやホストＯＳ、ゲストＯＳ用の領域を夫々有している。デバッガは、前記ハイパーバイザやホストＯＳの領域からドメイン情報や割り込み情報の一部を取得する。【００５８】
更に、デバッガは、メモリ１２上のゲストＯＳの領域から、ログ、タスク、プロセス、バックトレース情報の一部、割り込み情報の一部を取得する。【００５９】
《スナップショット取得後の処理》
次にスナップショット取得後の処理（例えば格納及びレポート）について示す。該処理は、ホストＯＳ、ドライバＯＳ、ハイパーバイザが独立しているか兼用されているかといった構成によって異なる。【００６０】
図１０は、ホストＯＳ、ドライバＯＳ、ハイパーバイザが独立している場合の例を示す。【００６１】
ハイパーバイザは、デバッガを起動してスナップショットを取得すると（図６，Ｓ２５）、取得したスナップショットをホストＯＳとハイパーバイザの共有メモリまたはハイパーバイザ内のメモリに保存（格納）して、ホストＯＳに通知する。【００６２】
該通知を受けたホストＯＳはレポート用プログラムを起動してスナップショットを出力する処理を行う。即ち、ＣＰＵ１１はレポート用プログラムに従ってレポート部として機能する。【００６３】
レポート部は、前記メモリに蓄積されたスナップショットをレポートとして単に出力しても良いし、スナップショットを解析して解析結果をレポートとして出力しても良い。なお、出力に際してホストＯＳは、作成したレポートをドライバＯＳへ転送する。【００６４】
そしてドライバＯＳは、実Ｉ／Ｏドライバを使用して前記レポートをローカルディスクへ書き出す、表示部に表示する、ネットワークを経由して別のコンピュータへ転送するといった出力処理を行う。【００６５】
また、図１１は、ドライバＯＳとしても動作可能なホストＯＳを用いた例を示している。この場合、ホストＯＳのレポート部は、前記メモリに蓄積されたスナップショットに基づいてレポートを作成し、実Ｉ／Ｏドライバを使用してレポートを出力するまでの処理を行う。【００６６】
更に、図１２は、ホストＯＳ内蔵型のハイパーバイザを用いた例を示している。この場合、スナップショットを取得し、レポートプログラムを起動して分析及び出力までのすべての操作をハイパーバイザ内で行う。【００６７】
《スナップショットを複数回取る方法の例》
図６に示すように、ゲストＯＳからハイパーバイザに制御が戻った際、デバッガが起動され、スナップショットを取得する。このときデバッガは、あらかじめＮ回分のデータが保存できるように用意された物理メモリにスナップショットを保存する。【００６８】
この複数蓄積したスナップショットからレポートを作成する契機となるようにホストＯＳまたはハイパーバイザに通知する手法は幾つか考えられる。例えば、図１３は、保存用物理メモリを使い切った場合に通知する例を示す。【００６９】
図１３の物理メモリ１２は、Ｎ回分のスナップショットが保存可能な保存用領域が設定されている。デバッガは、スナップショットを取得する度に、１回目、２回目、３回目・・・のように保存用領域に順次保存してゆき、Ｎ回目の保存を行ったときにホストＯＳ或はハイパーバイザに通知する。【００７０】
この通知を受けたホストＯＳ或はハイパーバイザは、レポートプログラムを起動して、スナップショットの解析及びレポートの作成を行う。【００７１】
《スローダウンが発生した場合の具体例》
図１４は、スローダウンが発生した場合の具体例を示す図である。【００７２】
図１４では、プロセスＡ，Ｂの下記の動作を時間軸上に示している。
（１）プロセスＡがメモリの大量獲得と解放を繰り返している。図１４においてＡ１，Ａ３がメモリの大量獲得、Ａ２がメモリの大量解放を示す。
（２）プロセスＢは、あるタイミングでメモリを獲得する動作を行う。図１４ではＢ１とＢ３でメモリを獲得しようとしている。
（３）プロセスＢは、メモリが獲得できない場合、メモリが獲得できるまでＣＰＵを使うビジーウェイトをする。図１４では、Ｂ１でメモリの獲得に失敗し、Ｂ２でメモリが獲得できるまでビジーウェイトとしている。
（４）プロセスＢがビジーウェイトしていると、プロセスＡによるメモリの解放動作が遅れるためプロセスＡ，Ｂともに遅滞し、スローダウンが生じる。【００７３】
図１４において、プロセスＢの動作Ｂ１からＢ２までの期間Ｒ１と、動作Ｂ３以降の期間Ｒ３でスローダウンが生じている。即ち、プロセスＡがメモリを大量に解放して（Ａ２）、プロセスＢがメモリを獲得（Ｂ２）してから、プロセスＡが再びメモリを大量に獲得（Ａ３）してプロセスＢがメモリ獲得に失敗するＢ３までの期間Ｒ２はビジーウェイトが解消する。【００７４】
図１４の状況で、従来のようにシステムを停止してダンプ採取を行う場合、期間Ｒ１でダンプを採取できればスローダウン中であるが、期間Ｒ２でダンプを採取した場合、ビジーウェイトは解消されているためダンプから問題を解析することが困難である。【００７５】
これに対し本例では、設定されたタイミングで複数回にわたりスナップショットを取得するため、不具合（性能劣化）が発生しているタイミングでスナップショットを取得できる可能性が高くなる。【００７６】
図１５，１６は、上図１４で２回目に取得したスナップショットの例を示す。【００７７】
図１５，１６のスナップショットより以下のことが容易にわかる。
−  システム全体でメモリの使用量が大きい（vm情報）
−  ＣＰＵを占有しているプロセスがある。（ps情報）
従って、メモリの獲得待ちのためにスローダウンが発生していることが推定できる。また、ＣＰＵを占有しているプロセスを停止させるといった対応を行うことができる。【００７８】
また、不具合が長いループ処理の中で生じていた場合、例えば図１４の動作Ａ１〜Ａ３の間隔が長い場合、不具合の原因となる他のプロセスの動作Ｂ１〜Ｂ３との時間的隔たりが大きくなる。このため、従来技術のメモリダンプのように1回だけのメモリ情報では、各プロセスの動作Ａ１〜Ａ３，Ｂ１〜Ｂ３の因果関係が把握できず、システムが正常に動作しているように見えるため障害箇所の特定が非常に困難である。【００７９】
しかし、本実施例では所定の時間間隔で複数回のスナップショットを採取するため、時間的に隔たった動作であっても把握でき、長いループ処理を行っていることを容易に判断できる。【００８０】
各タイミングで採取したスナップショットデータを解析しレポートを送るかどうかを判断するレポート条件の例を以下に示す。
−  メッセージログの中に”warning”、”error”などの文字列がある。
−  Ｎ回のps情報の中でＭ回以上CPU使用率の高いプロセスがある。
−  Ｎ回のtask情報の中でＭ回以上メモリ使用率の高いプロセスがある。
−  Ｎ回のバックトレース情報の中でＭ回以上同じバックトレースである。
−  Ｎ回のvm情報の中でＭ回以上システム全体のメモリ使用量が高い。
−  Ｎ回のレジスタ情報の中でＭ回以上同じ内容がある。【００８１】
図１７は、図６のレポートの処理の説明を示す。【００８２】
デバッガは、所定回数のスナップショットが取得されたか否かを判定し（Ｓ３１）、所定回数(Ｎ回）のスナップショットが取得済みであれば（Ｓ３１ Ｙｅｓ）、レポート部に通知する（Ｓ３２）。【００８３】
レポート部は、Ｎ回分のスナップショットを統計処理し（Ｓ３３）、該スナップショットが所定の前記レポート条件に適合しているか否かを判定する（Ｓ３４）。【００８４】
前記スナップショットがレポート条件に適合している場合（Ｓ３４ Ｙｅｓ）、レポート部は、適合している部分の情報を抽出し、前記Ｎ回分のスナップショットに付加してレポートを作成する（Ｓ３５）。【００８５】
そしてレポート部は、作成したレポートを出力する（Ｓ３６）。例えばドライバＯＳとホストＯＳが分かれている構成であれば、レポート部はレポートをドライバＯＳに渡し、ドライバＯＳが実ドライバを用いてストレージやディスプレイ、他のコンピュータ等に出力する。【００８６】
図１８，１９は、レポート条件に該当した箇所をまとめた情報の例を示す。【００８７】
図１８，１９に示すように、レジスタの項目では、Ｎ回のスナップショットでＭ回同じレジスタ情報であった場合にレジスタの内容をr1=0x00ab0010 r2=0x00cd0123・・・のように抽出する。・・
バックとレースの項目では、Ｎ回のスナップショットでＭ回同じレジスタ情報であったときのバックトレース情報をrequest_memory()->alloc_memory()->wait_loop ()のように抽出する。【００８８】
プロセス（ps）の項目では、Ｎ回のスナップショットでＭ回ＣＰＵ、メモリ使用率が高かったプロセスのプロセス名と、メモリ使用率とＣＰＵ使用率のリストをプロセスＡ：30%：5%、プロセスＢ：7%：90%…のように抽出する。【００８９】
タスクの項目では、Ｎ回のスナップショットでＭ回ＣＰＵ、メモリ使用率が高かったプロセスのタスク構造体をstructure task {  task_name = “プロセスＡ”  uptime = 12345 (プロセスの動作時間)  memory = 268435456(使用メモリ)  task_list = next_task (プロセスB)}structure task {  task_name = “プロセスＢ”  uptime = 67891234(プロセスの動作時間)  memory = 3145728(使用メモリ)  task_list = next_task (プロセスC)}…のように抽出する。【００９０】
割り込み（irq）の項目では、Ｎ回採取した中での割込み情報と割込み回数をexternal(timer) :2software(signal):4・・・・のように抽出する。【００９１】
ログ（log）の項目では、レポート採取条件に該当したメッセージをapplication job1 errorapplication job7 warning・・・・のように抽出する。【００９２】
仮想メモリ（vm）の項目では、Ｎ回のスナップショットでの時系列の仮想メモリ情報をstructure memory[1回目] {total_memory = 1073741824（システム全体のメモリ量）free_memory = 16384(空メモリ量)}structure memory[2回目] {total_memory = 108681824（システム全体のメモリ量）free_memory = 965076384 (空メモリ量)}のように抽出する。【００９３】
本実施例のレポートの例ではプロセスＡ，Ｂに問題があることがps情報、task情報から明らかであり、バックトレース情報およびレジスタ情報からメモリ獲得待ちの関数が何度も呼ばれていることがわかる。【００９４】
また、vm情報からメモリリソースの獲得待ちであることを確定することが容易である。【００９５】
このように本実施例では、スナップショットに基づいて、不具合の要因を容易に解決することができる。【００９６】
特に、本実施例によれば、スナップショットを複数回採取するため、スローダウンに陥っているタイミングでスナップショットを採取できる確率が非常に高い。【００９７】
ゲストＯＳを動作させたままスナップショットを採取しているので、業務を停止する必要がない。また、採取したスナップショットから原因が特定できた後は、原因となっているアプリケーションを停止するなどの対処が可能であり、スローダウン自体を運用したまま解決できるメリットがある。【００９８】
更に、ゲストＯＳがスナップショットを採取するのではなく、ゲストＯＳのディスパッチ時にハイパーバイザがスナップショットを採取するため、ゲストＯＳのオーバヘッドとならない。即ち、スナップショットを採取しながらゲストＯＳは通常どおり動作できるので、遂行すべき業務への影響が無い。【００９９】
デバッガによるスナップショットの採取が、ゲストＯＳとは別に動作するため、ゲストＯＳの動作タイミングには変化がなく、スローダウンの再現性に影響を与えない。【０１００】
また、ゲストＯＳ内のプログラムを変更しないため、トレース機能のソフトウェア障害（バグ）が発生することがなく、信頼性が高い。
【図１】
2009147738.tif 000003
【図２】
2009147738.tif 000004
【図３】
2009147738.tif 000005
【図４】
2009147738.tif 000006
【図５】
2009147738.tif 000007
【図６】
2009147738.tif 000008
【図７】
2009147738.tif 000009
【図８】
2009147738.tif 000010
【図９】
2009147738.tif 000011
【図１０】
2009147738.tif 000012
【図１１】
2009147738.tif 000013
【図１２】
2009147738.tif 000014
【図１３】
2009147738.tif 000015
【図１４】
2009147738.tif 000016
【図１５】
2009147738.tif 000017
【図１６】
2009147738.tif 000018
【図１７】
2009147738.tif 000019
【図１８】
2009147738.tif 000020
【図１９】
2009147738.tif 000021
【手続補正書】
【提出日】平成22年9月13日(2010.9.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
物理レジスタを有する処理装置を備えた情報処理装置において、
第１の情報を有し、前記第１の情報を前記物理レジスタに保持するとともに、アプリケーションプログラムを動作させる第１のオペレーティングシステムと、
第２の情報を有し、前記第２の情報を前記物理レジスタに保持するとともに、前記第１のオペレーティングシステムが前記処理装置に対して発行する命令の制御を行い、前記物理レジスタが有する情報を参照するモニタプログラムと、
を前記処理装置が、それぞれ切り替えながら実行するとともに、
前記処理装置が、前記モニタプログラムを実行している場合に、前記物理レジスタに保持する第１の情報をスナップショットとして取得して、記憶領域に記憶させることを特徴とする情報処理装置。
【請求項２】
前記処理装置はさらに、
第３の情報を有し、前記第３の情報を前記物理レジスタに保持するとともに、前記第１のオペレーティングシステムの制御を行う第２のオペレーティングシステムに切り替えて実行することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記情報処理装置はさらに、
入出力装置を有するとともに、
前記処理装置はさらに、
第４の情報を有し、前記第４の情報を前記物理レジスタに保持するとともに、前記第１のオペレーティングシステムからの入出力要求を、前記入出力装置に対して発行する第３のオペレーティングシステムに切り替えて実行させることを特徴とする請求項１記載の情報処置装置。
【請求項４】
前記処理装置が参照する前記第１の情報は、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムに含まれる関数に関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムのプログラムの動作状況に関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムにおいて、
動作中のプログラムが有する構造体に関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムが出力するメッセージに関する情報、
前記第１のオペレーティングシステム又は前記アプリケーションプログラムが使用している前記記憶装置に関する情報、
のいずれかであることを特徴とする請求項１記載の情報処理装置。
【請求項５】
物理レジスタを有する処理装置を備えた情報処理装置の制御方法において、
第１のオペレーティングシステムが用いる第１の情報を前記物理レジスタに保持するとともに、前記処理装置が、アプリケーションプログラムを動作させる前記第１のオペレーティングシステムを実行するステップと、
モニタプログラムが用いる第２の情報を前記物理レジスタに保持するとともに、前記処理装置が、前記第１及び第２のオペレーティングシステムが前記処理装置に対して発行する命令の制御を行い、前記物理レジスタが有する情報を参照するモニタプログラムを実行するステップと、
前記処理装置が、前記モニタプログラムを実行する場合に、前記物理レジスタに保持する第１の情報をスナップショットとして取得して、記憶領域に記憶させるステップを有することを特徴とする制御方法。
【請求項６】
前記制御方法はさらに、
第２のオペレーティングシステムが用いる第３の情報を前記物理レジスタに保持するとともに、前記処理装置が、前記第１のオペレーティングシステムの制御を行う前記第２のオペレーティングシステムを実行するステップを有することを特徴とする請求項５記載の制御方法。
【請求項７】
物理レジスタを有する処理装置を備えた情報処理装置のモニタプログラムにおいて、
前記処理装置に、第１のオペレーティングシステムが用いる第１の情報を前記物理レジスタに保持するとともに、前記処理装置が、アプリケーションプログラムを動作させる前記第１のオペレーティングシステムを実行させるステップと、
前記処理装置に、前記物理レジスタに保持する第１の情報をスナップショットとして取得して、記憶領域に記憶させるステップを有することを特徴とするモニタプログラム。
【請求項８】
前記モニタプログラムはさらに、
前記処理装置に、第２のオペレーティングシステムが用いる第３の情報を前記物理レジスタに保持させるとともに、前記第１のオペレーティングシステムの制御を行う前記第２のオペレーティングシステムを実行させるステップを有することを特徴とする請求項７記載のモニタプログラム。
【請求項９】
前記処理装置は、前記第１のオペレーティングシステムから前記モニタプログラムに切り替える際に、前記物理レジスタに保持する第１の情報を記憶領域にコピーし、前記モニタプログラムを実行している場合に、前記物理レジスタに保持する第１の情報又は前記記憶領域へコピーした第１の情報をスナップショットとして取得して、記憶領域に記憶させることを特徴とする請求項１記載の情報処理装置。
【国際調査報告】
2009147738.tif 000022
2009147738.tif 000023
2009147738.tif 000024
2009147738.tif 000025