(57)【要約】【課題】仮想計算機から仮想計算機モニタに制御権が戻る場合に、仮想計算機で実行される命令のログ情報を取得する命令ログ取得プログラムを提供する。【解決手段】仮想計算機モニタ１において、ログ情報を取得すべき命令を指定する判定情報が判定情報保持部１１５に保持される。仮想計算機から仮想計算機モニタ１に複数の実ＣＰＵの制御権が戻る場合に、仮想計算機が最後に実行した命令の命令アドレスに基づいて定まる範囲の命令アドレスの命令が取得される。取得された命令が判定情報で指定された命令である場合、その命令の命令アドレスとその命令が取得された回数である取得回数とを含むログ情報が、ログ情報保持部１１６に記録される。【選択図】図２
2009223841.tif 000002
【特許請求の範囲】
【請求項１】
複数の実ＣＰＵと、各々が前記複数の実ＣＰＵ上で動作するプログラムからなる複数の仮想計算機と、前記複数の仮想計算機の制御を行う仮想計算機モニタとを備える仮想計算機システムにおける、前記仮想計算機モニタを実現するプログラムであって、
前記仮想計算機システムであるコンピュータに、
ログ情報を取得すべき命令を指定する判定情報を、判定情報保持部に保持するステップと、
前記複数の仮想計算機から前記仮想計算機モニタに前記複数の実ＣＰＵの制御権が戻る場合に、前記複数の仮想計算機が最後に実行した命令の命令アドレスに基づいて定まる範囲の命令アドレスの命令を取得するステップと、
前記取得された命令が前記保持された判定情報で指定された命令であるか否かを判定するステップと、
前記取得された命令が前記指定された命令である場合、当該命令の命令アドレスと前記取得ステップにおいて当該命令が取得された回数である取得回数とを含むログ情報を、ログ情報保持部に記録するステップとを実行させる
ことを特徴とする命令ログ取得プログラム。
【請求項２】
前記コンピュータに、更に、
前記記録されたログ情報を解析してレポートを作成し、作成されたレポートを出力するステップを実行させる
ことを特徴とする請求項１に記載の命令ログ取得プログラム。
【請求項３】
前記記録ステップにおいて、前記仮想計算機システムが備えるデバッガが、前記取得された命令が前記指定された命令である場合、当該取得された命令について、命令の呼び出しに関する情報を取得して記録する
ことを特徴とする請求項１に記載の命令ログ取得プログラム。
【請求項４】
複数の実ＣＰＵと、各々が前記複数の実ＣＰＵ上で動作するプログラムからなる複数の仮想計算機と、前記複数の仮想計算機の制御を行う仮想計算機モニタとを備える仮想計算機システムにおいて、
前記仮想計算機モニタが、
ログ情報を取得すべき命令を指定する情報である判定情報を保持する判定情報保持部と、
ログ情報を記録するログ情報保持部と、
前記複数の仮想計算機から前記仮想計算機モニタに前記複数の実ＣＰＵの制御権が戻る場合に、前記複数の仮想計算機が最後に実行した命令の命令アドレスに基づいて定まる範囲の命令アドレスの命令を取得する命令取得部と、
前記命令取得部により取得された命令が前記判定情報保持部に保持された判定情報で指定された命令であるか否かを判定する命令判定部と、
前記命令判定部により取得された命令が前記判定情報で指定された命令である場合、当該命令の命令アドレスと前記取得ステップにおいて当該命令が取得された回数である取得回数とを含むログ情報を、前記ログ情報保持部に記録するログ記録部とを備える
ことを特徴とする仮想計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令ログ取得プログラム及び仮想計算機システムに関し、特に、仮想計算機から仮想計算機モニタに制御権が戻る場合に、仮想計算機で実行される予め指定された命令のログ情報を取得する命令ログ取得プログラム及び仮想計算機システムに関する。
【背景技術】
【０００２】
例えば、対称型マルチプロセッシング（ＳＭＰ：Symmetric Multi Processing）においては、複数の実ＣＰＵ（マルチＣＰＵ）が資源を共有する。即ち、ＳＭＰにおいて動作するＯＳカーネル、及び、ＯＳカーネル上で動作する一般のプログラムは、マルチＣＰＵにおける動作を１つずつ順番に実行するようにしながら（シリアライズしながら）、目的の処理を行う。シリアライズ処理は、ＳＭＰのマルチＣＰＵの各々から参照及び更新可能なメモリにマルチＣＰＵの各々がロックワードを獲得することにより、実現されている。
【０００３】
なお、スレッドによるロックについての要求を記録し、競合するスレッドの数を示すカウント値を記録する技術が提案されている（特許文献１参照）。
【特許文献１】特表２００５−５２７８７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
図９は、本発明の背景となったシリアライズ処理の一例を説明する図である。特に、図９（Ａ）はロックワードへの制御権の書き込みを示し、図９（Ｂ）はロックワードを利用したシリアライズ処理について示す。
【０００５】
図９（Ｂ）において、例えば、ＣＰＵ＃０が、メモリ上のロックワード（領域）を参照し（ステップＳ１００）、ロックワードが空きか否かを調べる（ステップＳ１０１）。空きでない場合、ステップＳ１００以下を繰り返す。空きである場合、ＣＰＵ＃０が、図９（Ａ）に示すように、メモリコンペア＆ストア命令の実行によりロックワードへ制御権の書き込みを行う（ステップＳ１０２）。メモリコンペア＆ストア命令は、１命令でデータのコンペアと書き込みを不可分に行う処理である。この後、ＣＰＵ＃０が、シリアライズを目的とする処理を行う（ステップＳ１０３）。シリアライズを目的とする（シリアライズすべき）処理とは、アプリケーションから見て同じ資源にアクセスする処理、例えばデータベースの更新などの処理である。ＣＰＵ＃０が、シリアライズを目的とする処理の終了後、先にロックワードに書き込んだ制御権をクリアすることにより、ロック状態（排他の状態）を解除する（ステップＳ１０４）。即ち、シリアライズを解除する。
【０００６】
このように、マルチＣＰＵの各々は、ロックワードに制御権を書き込むことにより、他のＣＰＵと処理が同時実行されないように、動作（処理）を１つずつ順番に実行する。即ち、シリアライズする。例えば、先にＣＰＵ＃０がロックワードに制御権を書き込むと、ＣＰＵ＃１は、ロックの解除待ち（以下、単にロック待ち）の状態となる。これにより、ＣＰＵ＃１は、ＣＰＵ＃０がロックワードの制御権を解放するまで、ロックワードに制御権を書き込むことができず、処理を実行することができない。
【０００７】
しかし、本発明者の検討によれば、図９に示すシリアライズ処理には、以下のような問題がある。
【０００８】
即ち、あるＣＰＵ（例えば、ＣＰＵ＃０）がシリアライズを長い時間取得すると、他のＣＰＵ（例えば、ＣＰＵ＃１）において長時間のロック待ち（又は、シリアライズ待ち）が発生し、仮想計算機システムの処理性能が全体として低下する。特に、ステップＳ１０３のシリアライズを目的とする処理に長時間を要すると、他のＣＰＵのロック待ちによるオーバヘッドが発生し、仮想計算機システムの処理性能が全体として低下する。
【０００９】
また、ＯＳカーネル上で動作する一般プログラムがＯＳカーネルをシステムコールした場合、設計時には予想されなかったシリアライズ処理が開始されることがある。この場合、システムコールに長時間を要し、仮想計算機システムの処理性能が全体として低下する。ＯＳカーネル上で動作する一般のプログラムは、基本的にＯＳカーネルがどのような動作をするか知らない。従って、一般のプログラムのシステムコールによって、あるＣＰＵ（例えば、ＣＰＵ＃０）上で実行されるＯＳカーネルによる他のＣＰＵ（例えば、ＣＰＵ＃１）の排他の状態が発生することがある。
【００１０】
更に、これらのシリアライズ処理による仮想計算機システムの性能低下の問題は、プログラムの開発時には、殆ど検出されない。これは、開発時の試験における負荷が低いなどの要因による。このため、実際にＳＭＰを動作させた場合に始めて検出される場合が多く、影響が大きい。
【００１１】
このような問題に対処するためには、仮想計算機システムの性能向上のためのプログラム修正を行う必要がある。このプログラム修正のためには、本発明者の検討によれば、シリアライズ処理によるロック解除待ちの状況を把握するために、シリアライズ処理を発生させる原因を検出することができれば便利である。
【００１２】
また、シリアライズ処理以外でも、重い（長時間を要する）処理を発生させる命令は、仮想計算機システムの処理性能を低下させる原因となる。そのため、本発明者の検討によれば、シリアライズ処理以外の処理であって仮想計算機システムの処理性能を低下させる原因となる処理を検出することができれば便利である。
【００１３】
本発明は、仮想計算機から仮想計算機モニタに制御権が戻る場合に、仮想計算機で実行される予め指定された命令のログ情報を取得する命令ログ取得プログラムを提供することを目的とする。
【００１４】
また、本発明は、仮想計算機から仮想計算機モニタに制御権が戻る場合に、仮想計算機で実行される予め指定された命令のログ情報を取得する仮想計算機システムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
このプログラムは、複数の実ＣＰＵと、各々が前記複数の実ＣＰＵ上で動作するプログラムからなる複数の仮想計算機と、前記複数の仮想計算機の制御を行う仮想計算機モニタとを備える仮想計算機システムにおける、前記仮想計算機モニタを実現する命令ログ取得プログラムである。このプログラムは、前記仮想計算機システムであるコンピュータに、ログ情報を取得すべき命令を指定する判定情報を、判定情報保持部に保持するステップと、前記複数の仮想計算機から前記仮想計算機モニタに前記複数の実ＣＰＵの制御権が戻る場合に、前記複数の仮想計算機が最後に実行した命令の命令アドレスに基づいて定まる範囲の命令アドレスの命令を取得するステップと、前記取得された命令が前記保持された判定情報で指定された命令であるか否かを判定するステップと、前記取得された命令が前記指定された命令である場合、当該命令の命令アドレスと前記取得ステップにおいて当該命令が取得された回数である取得回数とを含むログ情報を、ログ情報保持部に記録するステップとを実行させる。
【００１６】
好ましくは、このプログラムの一実施態様によれば、このプログラムは、前記コンピュータに、更に、前記記録されたログ情報を解析してレポートを作成し、作成されたレポートを出力するステップを実行させる。
【００１７】
好ましくは、このプログラムの一実施態様によれば、前記記録ステップにおいて、前記仮想計算機システムが備えるデバッガが、前記取得された命令が前記指定された命令である場合、当該取得された命令について、命令の呼び出しに関する情報を取得して記録する。
【００１８】
この仮想計算機システムは、複数の実ＣＰＵと、各々が前記複数の実ＣＰＵ上で動作するプログラムからなる複数の仮想計算機と、前記複数の仮想計算機の制御を行う仮想計算機モニタとを備える。前記仮想計算機モニタが、判定情報保持部と、ログ情報保持部と、命令取得部と、命令判定部と、ログ記録部とを備える。判定情報保持部は、ログ情報を取得すべき命令を指定する情報である判定情報を保持する。ログ情報保持部は、ログ情報を記録する。命令取得部は、前記複数の仮想計算機から前記仮想計算機モニタに前記複数の実ＣＰＵの制御権が戻る場合に、前記複数の仮想計算機が最後に実行した命令の命令アドレスに基づいて定まる範囲の命令アドレスの命令を取得する。命令判定部は、前記命令取得部により取得された命令が前記判定情報保持部に保持された判定情報で指定された命令であるか否かを判定する。ログ記録部は、前記命令判定部により取得された命令が前記判定情報で指定された命令である場合、当該命令の命令アドレスと前記取得ステップにおいて当該命令が取得された回数である取得回数とを含むログ情報を、前記ログ情報保持部に記録する。
【発明の効果】
【００１９】
この命令ログ取得プログラム及び仮想計算機システムによれば、仮想計算機から仮想計算機モニタに実ＣＰＵの制御権が戻る場合に、仮想計算機が最後に実行した命令に応じて定まる範囲の命令が取得され、この取得された命令が指定された命令である場合、当該命令の命令アドレスと取得回数とを含むログ情報が記録される。
【００２０】
これにより、指定された命令のログ情報を取得して、これに基づいて仮想計算機システム上での指定された命令の実行状況を把握することができる。この結果、仮想計算機システムの処理性能を低下させる要因を検出することができ、これにより、仮想計算機システムの性能向上のためのプログラム修正を容易に行うことができる。
【００２１】
例えば、ログ情報を取得すべき命令としてロック待ちを発生させるシリアライズ命令を指定すれば、シリアライズ命令のログ情報を取得することができるので、ロック待ちの状況が把握でき、仮想計算機システムの性能向上のためのプログラム修正を容易に行うことができる。
【００２２】
従って、取得したログ情報に基づいて、仮想計算機システムの処理性能が低下した原因が、例えば、長時間のロック待ち、又は、ＯＳカーネルのシステムコールに起因する予想されないシリアライズ処理の開始であることを、把握することができる。また、当該原因が、例えば、プログラムの開発時には検出されなかったシリアライズ処理であることを、把握することができる。このように、シリアライズ処理を発生させる原因を検出することができるので、前記性能向上のためのプログラム修正を容易に行うことができる。
【００２３】
また、例えば、ログ情報を取得すべき命令としてシリアライズ命令以外の命令を指定すれば、当該命令のログ情報を取得することができるので、長時間を要する処理を発生させる命令を把握することができるので、仮想計算機システムの性能向上のためのプログラム修正を容易に行うことができる。
【００２４】
この命令ログ取得プログラムの一実施態様によれば、記録されたログ情報を解析して作成されたレポートが出力される。これにより、取得回数の多い順にシリアライズ命令を並べたレポートを出力することができ、これに基づいて、より適切なプログラム修正を行うことができる。
【００２５】
この命令ログ取得プログラムの一実施態様によれば、デバッガが、取得された命令が指定された命令である場合、その命令に関連して、命令の呼び出しに関する情報を記録する。これにより、指定された命令（例えば、シリアライズ命令）に至るまでの命令の呼び出しに関する情報をログ情報として取得することができるので、これに基づいて、例えばロック待ちが発生する状況等をより詳細に把握することができ、より適切なプログラム修正を行うことができる。
【発明を実施するための最良の形態】
【００２６】
図１は、この例の仮想計算機システムの構成を示す図である。仮想計算機システムは、仮想計算機モニタ（ＶＭＭ：Virtual Machine Monitor 又はHypervisor）１、ハードウェア２、複数の仮想計算機（ＶＭ：Virtual Machine ）３からなる。ハードウェア２上で仮想計算機モニタ１及び仮想計算機３が動作する。ハードウェア２は、図示しないが、複数の実ＣＰＵ（物理ＣＰＵ）を備える。
【００２７】
仮想計算機システムは、複数の仮想計算機３からなる。即ち、ホストＯＳ（オペレーティングシステム）３１、ドライバＯＳ３２、ゲストＯＳ３３が、各々、仮想計算機（又は仮想ＣＰＵ）３である。各々の仮想計算機３は、各々のＯＳ３１〜３３がハードウェア２の１個の実ＣＰＵの制御権（使用権）を獲得して当該実ＣＰＵ上で実行されることにより実現される。仮想計算機モニタ１も同様にして実現される。
【００２８】
仮想計算機モニタ１は、この仮想計算機システムの全体を制御する。仮想計算機モニタ１は、各々のＯＳ（即ち、仮想計算機）３１、３２、３３のディスパッチ、各々のＯＳ３１、３２、３３が実行する特権命令のエミュレーション、実ＣＰＵ等のハードウェア２の制御等を行う。
【００２９】
ホストＯＳ３１は、１個設けられ、仮想計算機（ドメイン）として動作し、仮想計算機システム全体の管理を行う。ホストＯＳ３１は、仮想計算機システムのブート時に起動され、ドライバＯＳ３２やゲストＯＳ３３の制御（起動及び停止等を含む全ての制御）を行う。ホストＯＳ３１は、同時に、ドライバＯＳ３２としても動作可能である。ホストＯＳ３１は、表示装置等のコンソール４１を備える。
【００３０】
ドライバＯＳ３２は、実（又は物理）入出力装置（Ｉ／Ｏ装置）４２、４３を制御するＯＳである。実Ｉ／Ｏ装置４２、４３は、複数の種類、例えば磁気ディスク装置４２、ネットワーク４３等からなる。ドライバＯＳ３２は、複数の種類の実Ｉ／Ｏ装置４２、４３毎に、設けられる。実Ｉ／Ｏ装置４２、４３の制御はドライバＯＳ３２が実行する。ドライバＯＳ３２は、ホストＯＳ３１上やゲストＯＳ３３上でも動作可能である。ドライバＯＳ３２がゲストＯＳ３３上で動作する場合、そのゲストＯＳ３３は、見かけ上ドライバＯＳ３２となる。
【００３１】
ゲストＯＳ３３は、実Ｉ／Ｏ装置４２、４３を持たないＯＳである。ゲストＯＳ３３は、通常の（いわゆる）ＯＳと考えてよい。例えば、アプリケーションプログラムは、いずれかのゲストＯＳ３３上で動作する。ゲストＯＳ３３は、ドライバＯＳ３２に対してＩ／Ｏ命令の実行を依頼することにより、そのＩ／Ｏ命令の実行が可能となる。
【００３２】
図２は、図１の仮想計算機システムにおける仮想計算機モニタ１の構成の一例を示す図である。
【００３３】
仮想計算機モニタ１は、仮想計算機システム上で実行される予め指定された命令のログ情報を取得する解析処理部１１を備える。この例では、解析処理部１１は、シリアライズ命令のログ情報を取得する。即ち、この例では、シリアライズ命令が予め指定された命令である。シリアライズ命令は、例えばメモリコンペア＆ストア命令など、シリアライズ処理を発生させる命令である。シリアライズ命令は、多くの場合、ロック待ちを発生させ、これによる仮想計算機システムの性能低下の原因となる。
【００３４】
解析処理部１１は、ロック待ちによる性能低下要因となるシリアライズ命令のログ情報を取得する。このために、後述するように、解析処理部１１は、仮想計算機システムにおける実ＣＰＵの制御権の割当処理を利用する。この割当処理は、仮想計算機モニタ１により実行される。
【００３５】
解析処理部１１は、仮想計算機システムのハードウェア２が備えるＣＰＵ、メモリ、ハードディスク等とプログラムとにより実現され、ログ取得処理部１１１、シリアライズ命令判定情報保持部（以下、判定情報保持部）１１５、シリアライズ発生ログ情報保持部（以下、ログ情報保持部）１１６、レポート出力部１１７を備える。
【００３６】
ログ取得処理部１１１は、仮想計算機システムで実行される予め指定された命令のログ情報を取得する。この例では、前述のように、ログ取得処理部１１１は、シリアライズ命令のログ情報を取得する。このために、ログ取得処理部１１１は、命令取得処理部１１２、シリアライズ命令判定処理部（以下、判定処理部）１１３、ログ記録処理部１１４を備える。
【００３７】
命令取得処理部１１２は、仮想計算機３（３１、３２又は３３）から仮想計算機モニタ１に実ＣＰＵの制御権が戻る場合にこれをトリガとして（以下、単に制御権が戻る場合と言う）、当該仮想計算機３が最後に（即ち、当該制御権が戻る直前に）実行した命令の命令アドレスに基づいて定まる範囲の命令アドレス（以下、所定の命令アドレスと言う）の命令を取得する。このために、命令取得処理部１１２は、仮想計算機モニタ１から、仮想計算機３から実ＣＰＵの制御権が仮想計算機モニタ１に戻ったことを通知される。
【００３８】
所定の命令アドレスの命令は、当該仮想計算機３が最後に実行した命令と、これを基準としてその前後の各々ｎ個の命令アドレスの命令とからなる。この例では、ｎ＝１０とされ、合計２１個の命令が所得される。命令取得処理部１１２は、取得した命令を取得用メモリ（図示せず）に格納し、当該格納したことを判定処理部１１３に通知する。
【００３９】
仮想計算機モニタ１は、仮想計算機システム上で実行されるプログラム（命令列）をデバッグするデバッガ１２を備える。この例では、デバッガ１２は、解析処理部１１により取得された命令が前記指定された命令である場合、当該取得された命令について、命令の呼び出しに関する情報を取得して記録する。
【００４０】
図３は、仮想計算機システムにおける実ＣＰＵの制御権の割当について説明する図である。
【００４１】
仮想計算機モニタ１及び仮想計算機３は、前述のように、複数の物理（実）ＣＰＵ上で動作する。仮想計算機モニタ１は、各々の実ＣＰＵ（の制御権）を複数の仮想計算機３のいずれかに択一的に割り当てる（シリアライズする）ことにより、ＣＰＵを仮想化する。また、仮想計算機モニタ１は、予め定められた複数の処理により、複数の仮想計算機３に割り当てた実ＣＰＵの制御権を取り戻す。
【００４２】
即ち、仮想計算機モニタ１は、実ＣＰＵの制御権を仮想計算機３に割り当てる際に、制御権の割当毎にディスパッチタイマを設定する。これにより、仮想計算機３が実ＣＰＵを使用していても、ディスパッチタイマに設定された時間が経過した後、必ず仮想計算機モニタ１に制御権が戻るようにする。また、仮想計算機モニタ１は、制御権を割り当てられた仮想計算機３がアイドル状態となったか否かを監視する。仮想計算機３がアイドル状態となった場合、仮想計算機モニタ１は、当該ディスパッチタイマによる時間経過を待たずに、強制的に当該仮想計算機３から制御権を取り戻して他の仮想計算機３に当該制御権を割り当てる。
【００４３】
これにより、実ＣＰＵの制御権が仮想計算機３に割り当てられた仮想計算機３が動作した後には、仮想計算機モニタ１に必ず制御権が戻る。仮想計算機モニタ１は、制御権が取り戻された仮想計算機３が最後に実行した命令（最後の命令）のアドレス、レジスタの内容を、当該仮想計算機３の次回の動作に備えて退避する。
【００４４】
図３において、説明の簡単化のために、１個の実ＣＰＵが２個のゲストＯＳ３３に択一的に配分されるとする。ここで、２個のゲストＯＳ３３は、ゲストＯＳ＃１及びゲストＯＳ＃２として区別される。
【００４５】
例えば、タイミングｔ１で、ゲストＯＳ＃１から仮想計算機モニタ１に制御権が戻る。このとき、ゲストＯＳ＃１が最後に実行した命令のアドレス、レジスタの内容が退避用メモリ（図示せず）に退避される。次に、ゲストＯＳ＃１に制御権が割り当てられるのは、タイミングｔ２である。このときに、前記退避された命令のアドレス、レジスタの内容が復元される。
【００４６】
仮想計算機モニタ１に制御権が戻ることにより、仮想計算機モニタ１は、退避用メモリを参照することにより、仮想計算機３（この例では、ゲストＯＳ＃１及び＃２）が最後に実行した命令を把握できる。そこで、例えばゲストＯＳ＃１から仮想計算機モニタ１に制御権が戻ったタイミングｔ１で、仮想計算機モニタ１は、退避用メモリを参照して、ゲストＯＳ＃１が直前に実行した命令のアドレス（命令アドレス）を求め、当該命令アドレスに基づいて所定の命令アドレスの命令（例えば、２１個の命令）を取得する（ゲストＯＳ＃２についても同様である）。
【００４７】
判定処理部１１３は、命令取得処理部１１２からの取得の通知を受けると、取得用メモリを参照して、当該取得された命令が予め指定された命令であるか否かを判定する。予め指定された命令は、前述のように、シリアライズ命令である。この判定は、判定情報保持部１１５に保持された判定情報（以下、判定情報）に従って行う。
【００４８】
判定情報保持部１１５は、ログ情報を取得すべき命令を指定する情報である判定情報を保持する。この例では、判定情報は、前述のように、シリアライズ命令の取得を指定する。判定情報は、判定情報保持部１１５の備えるシリアライズ命令判定テーブル（以下、判定テーブル）１３０に、ログ情報の取得に先立って、予め設定される。
【００４９】
図４は、判定テーブル１３０の一例を示す。判定テーブル１３０は、判定情報がテーブル形式で表現されたものであり、命令コード（Instruction-code）毎に、シリアライズ命令判定フラグ（Serialize-Instruction-flag、以下、単にフラグ）を持つ。
【００５０】
命令コードは、命令の識別コードであり、一意に定まる。フラグは、対応する命令がログ情報を取得すべき命令（この例では、シリアライズ命令）であるか否かを示す情報である。シリアライズ命令は、そのフラグが“ｙｅｓ”とされる。シリアライズ命令以外の命令は、そのフラグが“ｎｏ”とされる。
【００５１】
判定処理部１１３は、命令取得処理部１１２により取得された（取得用メモリに格納された）命令について、その命令コードをキーとして判定テーブル１３０を参照し、そのフラグが“ｙｅｓ”となっているか否かを調べ、“ｙｅｓ”となっている命令をシリアライズ命令であると判定する。
【００５２】
ログ記録処理部１１４は、取得された命令が指定された命令である場合、当該指定された命令のログを記録する。この例では、ログ記録処理部１１４は、当該命令がシリアライズ命令であることを判定処理部１１３から通知されると、取得された命令においてシリアライズ命令と判定された命令のログ情報を取得して、これをログ情報保持部１１６にシリアライズ発生ログ情報として記録する。
【００５３】
ログ情報保持部１１６は、ログ記録処理部１１４により取得されたログ情報を保持する。この例では、ログ情報保持部１１６は、取得されたシリアライズ命令のログ情報であるシリアライズ発生ログ情報１４０を、保持する。
【００５４】
図５は、シリアライズ発生ログ情報１４０の一例を示す図である。シリアライズ発生ログ情報１４０は、テーブル形式で表現され、命令アドレス（Instruction-address ）毎に、シリアライズカウンタ（Serialize-counter ）と、動作関数（Function）とを持つ。
【００５５】
命令アドレスは、取得されたシリアライズ命令のアドレスであり、一意に定まる。シリアライズカウンタは、その命令アドレスのシリアライズ命令がログ情報として取得された回数を示す値である。
【００５６】
動作関数は、命令の呼び出しに関する情報である。この例では、前述のように、取得されたシリアライズ命令の呼び出し関係を示す情報である。例えば、命令アドレス0x00101000についての図５に示す動作関数は、取得されたシリアライズ命令は命令lock-a()であり、命令lock-a()は関数zzz に含まれる（又は、関数zzz が呼び出した）命令であり、関数zzz は関数yyy() が呼び出した関数であり、関数yyy() は関数xxx() が呼び出した関数であることを示す。これにより、シリアライズ命令lock-a()は、関数zzz 及び関数yyy() を介して、関数xxx() に呼び出されることが判る。即ち、当該シリアライズ命令の呼び出しの経路が判る。
【００５７】
このような命令の呼び出しに関する情報は、仮想計算機モニタ１の備えるデバッガ１２により、得ることができる。デバッガ１２は、周知のように、例えば、実行されたプログラム即ち命令列をデバッグのために解析する。これにより、デバッガ１２は、当該取得された命令の命令アドレス及びこれを呼び出した命令の命令アドレスを逆に辿って、当該取得された命令に至る命令の経路を得ることができる。デバッガ１２は、処理対象の（取得された）命令がシリアライズ命令である場合、当該シリアライズ命令について、前述のような当該シリアライズ命令の呼び出しに関する情報を取得し、これを解析処理部１１に送ってログ情報保持部１１６に当該シリアライズ命令（当該命令アドレス）についてのシリアライズ発生ログ情報１４０として記録させる。
【００５８】
また、ログ記録処理部１１４は、シリアライズ命令であると判定された命令の命令アドレスを取得した場合に、シリアライズ発生ログ情報１４０を参照する。取得された命令アドレスがシリアライズ発生ログ情報１４０に存在する場合、ログ記録処理部１１４は、シリアライズ発生ログ情報１４０における当該命令アドレスのシリアライズカウンタの値を＋１だけインクリメントする。一方、取得された命令アドレスがシリアライズ発生ログ情報１４０に存在しない場合、ログ記録処理部１１４は、シリアライズ発生ログ情報１４０に当該命令アドレスを格納し、当該命令アドレスのシリアライズカウンタを＋１だけインクリメントする。従って、同一の命令アドレスの命令が同一の経路で呼び出された場合、その各々のログ情報を取得するのではなく、その回数のみが記録される。これにより、シリアライズ発生ログ情報１４０のサイズを小さくすることができる。
【００５９】
なお、デバッガ１２により、その命令アドレスに関する命令の呼び出しに関する情報を取得し、取得された命令の呼び出しに関する情報をその命令アドレスの動作関数として、シリアライズ発生ログ情報１４０に記録するようにしてもよい。
【００６０】
レポート出力部１１７は、ログ取得処理部１１１によるログ情報の取得の完了の後、ログ情報を解析し、そのレポート１５０を作成して出力する。この例では、前述のように、シリアライズ発生ログ情報１４０に基づいてレポート１５０を作成し、これを表示装置や印刷装置、外部記憶装置などの外部装置（図示省略）に出力する。
【００６１】
図６は、レポート１５０の一例を示す図である。レポート１５０は、シリアライズ発生ログ情報１４０に基づいて、例えばシリアライズカウンタの値が大きい順にログ情報を並べることにより作成される。
【００６２】
レポート１５０からは、例えば以下のことが判る。第１に、ggg() →hhh() →iii() →lock-b()の呼び出し関係により実行されるシリアライズ命令lock-b()が多いことが判る。第２に、シリアライズ命令lock-a()については、aaa() →bbb() →ccc() →lock-a()とxxx() →yyy() →zzz() →lock-a()の２つの呼び出しの経路があることが判る。第３に、当該２つの呼び出しの経路において、aaa() →bbb() →ccc() →lock-a()の呼び出し関係の方がログ情報の取得回数が多いことが判る。
【００６３】
以上から、ロック待ちの状況を把握することができ、より状況に適した仮想計算機システムの性能向上のためのプログラム修正を行うことができる。即ち、シリアライズ命令lock-b()について、プログラム修正すべきこと及びその効果が大きいであろうことが判る。また、シリアライズ命令lock-a()については、aaa() →bbb() →ccc() →lock-a()の呼び出し経路により実行されるものが、よりシリアライズ処理の発生の原因となっていることが判る。
【００６４】
図７は、ログ取得処理部１１１が実行するログ取得処理フローである。この処理フローは、ゲストＯＳ３３から仮想計算機モニタ１に制御権が戻ったことをトリガとし、ゲストＯＳ３３上でロック獲得処理が実行されるか否かをシリアライズ命令の有無により判断し、シリアライズ命令がある場合、そのログ情報を取得する処理の一例である。
【００６５】
ログ取得処理部１１１において、命令取得処理部１１２は、ゲストＯＳ３３から仮想計算機モニタ１に制御権が戻ったことを仮想計算機モニタ１から通知されると（ステップＳ１０）、退避用メモリを参照して、当該ゲストＯＳ３３が最後に実行した命令の命令アドレスを求め、これに基づいて、所定の命令アドレスの命令（例えば、２１個の命令）を取得して（ステップＳ１１）、これらを取得用メモリに格納する。
【００６６】
判定処理部１１３は、当該所定の命令アドレスの命令の取得を命令取得処理部１１２から通知されると、取得された所定の命令アドレスの命令（取得用メモリに格納された命令）から、例えば先頭から順に命令を１つ選択し（ステップＳ１２）、当該命令がシリアライズ命令であるか否かを、判定テーブル１３０の判定情報により判定する（ステップＳ１３）。
【００６７】
当該命令がシリアライズ命令である場合、当該判定結果を判定処理部１１３から通知されると、ログ記録処理部１１４は、当該命令アドレスについてのログ情報が取得済み（ログ済み）であるか否かを判定する（ステップＳ１４）。当該命令アドレスについてログ済みでない場合、ログ記録処理部１１４は、当該命令アドレスについてのログ情報を取得し、当該命令アドレスのシリアライズカウンタの値を０（初期値）にセットする（ステップＳ１５）。一方、当該命令アドレスについてログ済みである場合、ログ記録処理部１１４は、ステップＳ１５を省略する。この後、ログ記録処理部１１４は、そのシリアライズカウンタを＋１だけインクリメントする（ステップＳ１６）。
【００６８】
ステップＳ１３において当該命令がシリアライズ命令でない場合、判定処理部１１３は、当該命令についてのステップＳ１４〜Ｓ１６の処理を省略して、取得された所定の命令アドレスの命令の全てについて処理が終了したか否かを調べる（ステップＳ１７）。全てについて終了していない場合、ステップＳ１２以下が繰り返される。全てについて終了した場合、処理を終了する。
【００６９】
なお、ステップＳ１４において当該命令アドレスについてログ済みでない場合、ステップＳ１５において、デバッガ１２によりその命令に関する命令の呼び出しに関する情報を取得し、当該命令アドレスの動作関数の情報としてシリアライズ発生ログ情報に記録するようにしても良い。
【００７０】
図８は、レポート出力部１１７が実行するレポート処理フローである。この処理フローは、シリアライズ発生ログ情報１４０に基づいて、どの関数が問題となっているかをレポートする処理の一例である。この例は、図６のレポート１５０を出力する場合の一例を示す。
【００７１】
レポート出力部１１７は、ログ情報保持部１１６からシリアライズ発生ログ情報１４０を取得し（ステップＳ２０）、レポート１５０に未出力のログ情報の中から、シリアライズカウンタの値が最大のログ情報を選択し、その動作関数とシリアライズカウンタの値とをレポートに出力する（ステップＳ２１）。この後、レポート出力部１１７は、シリアライズ発生ログ情報１４０における全てのログ情報をレポート１５０に出力したか否かを調べ（ステップＳ２２）、全てのログ情報を出力していない場合、ステップＳ２１以下を繰り返す。全てのログ情報を出力した場合、作成されたレポート１５０を、表示装置や印刷装置、外部記憶装置などの外部装置に出力する（ステップＳ２３）。
【００７２】
以上説明した解析処理部１１による処理は、コンピュータとソフトウェアプログラムとによって実現することができ、そのプログラムをコンピュータ読み取り可能な記録媒体に記録するようにしても良く、また、ネットワークを通して提供するようにしても良い。
【００７３】
以上、本発明の実施の形態について説明したが、本発明は以上に述べた実施の形態に限られるものではない。
【００７４】
例えば、以上に述べた実施の形態では、ゲストＯＳ３３から仮想計算機モニタ１に実ＣＰＵの制御権が戻った場合にこれをトリガとしてログ情報の取得を行っているが、ゲストＯＳ３３以外の仮想計算機３（即ち、ホストＯＳ３１及びドライバＯＳ３２）から仮想計算機モニタ１に制御権が戻ったことをトリガとして、ログ情報を取得するようにしてもよい。
【００７５】
また、以上に述べた実施の形態では、シリアライズ命令のログ情報を取得しているが、仮想計算機システムで実行されるシリアライズ命令以外の命令のログ情報を取得するようにしてもよい。即ち、判定テーブル１３０に格納された判定情報において、シリアライズ命令以外の命令を、ログ情報を取得すべき命令として指定するようにしても良い。これにより、シリアライズ命令以外の命令について、そのログ情報を取得することができる。この結果、長時間を要する処理を発生させ、仮想計算機システムの処理性能を低下させる原因となる命令を検出することができる。
【産業上の利用可能性】
【００７６】
以上、説明したように、命令ログ取得プログラム及び仮想計算機システムにおいて、指定された命令のログ情報に基づいて当該指定された命令の実行状況を把握することができる。例えば、ログ情報を取得すべき命令としてロック待ちを発生させるシリアライズ命令を指定すれば、シリアライズ処理を発生させる原因を検出することができる。また、例えば、シリアライズ命令以外の命令を指定すれば、長時間を要する処理を発生させる命令を把握することができる。この結果、仮想計算機システムの処理性能を低下させる要因を検出し、性能向上のためのプログラム修正を容易に行うことができる。
【図面の簡単な説明】
【００７７】
【図１】仮想計算機システムの一例を説明する図である。
【図２】本実施の形態による仮想計算機モニタの構成例を示す図である。
【図３】仮想計算機システムにおける実ＣＰＵでの動作を説明する図である。
【図４】シリアライズ命令判定テーブルの一例を示す図である。
【図５】シリアライズ発生ログデータの一例を示す図である。
【図６】レポートの一例を示す図である。
【図７】ログ取得処理部が実行するログ取得処理フローである。
【図８】レポート出力部が実行するレポート処理フローである。
【図９】本発明の背景となったシリアライズ処理の一例を説明する図である。
【符号の説明】
【００７８】
１  仮想計算機モニタ
２  ハードウェア
３  仮想計算機
１１  解析処理部
１２  デバッガ
３１  ホストＯＳ
３２  ドライバＯＳ
３３  ゲストＯＳ
１１１  ログ取得処理部
１１２  命令取得処理部
１１３  シリアライズ命令判定処理部（判定処理部）
１１４  ログ記録処理部
１１５  シリアライズ命令判定情報保持部（判定情報保持部）
１１６  シリアライズ発生ログ情報保持部（ログ情報保持部）
１１７  レポート出力部
【図１】
2009223841.tif 000003
【図２】
2009223841.tif 000004
【図３】
2009223841.tif 000005
【図４】
2009223841.tif 000006
【図５】
2009223841.tif 000007
【図６】
2009223841.tif 000008
【図７】
2009223841.tif 000009
【図８】
2009223841.tif 000010
【図９】
2009223841.tif 000011