(57)【要約】【課題】複数の特権モードを持つプロセッサにおいて、イベントの発生をカウントするカウンタがオーバフローしたとき、その動作中の特権レベルに応じた割込みハンドラを直接得ることが可能な性能モニタリング方式を提供すること。【解決手段】このため、本発明の性能モニタリング方式では、複数の特権モードを持つプロセッサＣＰＵにおいて、プロセッサ内部のイベント及び外部とのやり取りのイベントをカウントするカウンタ手段１−０と、このカウンタ手段１−０のオーバフロー時のプロセッサＣＰＵの特権レベル毎にプロセッサに対して割込み先を指示した指示手段１−２を設け、特権レベル毎に割込先を制御可能とするものである。【選択図】        図２
2004318538.tif 000002
【特許請求の範囲】
【請求項１】
複数の特権モードを持つプロセッサにおいて、
プロセッサ内部のイベント及び外部とのやり取りのイベントをカウントするカウンタ手段と、
特権レベル毎に割込み先を指示した指示手段を設け、
前記カウンタ手段のオーバフロー時のプロセッサの特権レベル毎にプロセッサに対して割込み先を制御可能とした性能モニタリング方式。
【請求項２】
請求項１において、前記カウンタ手段のオーバフロー時に、プロセッサの特権レベル毎に割込み先位置、割込みレベル、割込みマスクを指定可能としたことを特徴とする性能モニタリング方式。
【請求項３】
請求項１または請求項２において、プロセッサの異なった特権モードに複数のソフトウェアを動作させ、各特権レベル毎のソフトウェアが前記イベントをカウントするカウント手段のオーバフロー割込みを直接得ることを可能とした性能モニタリング方式。
【請求項４】
請求項３において、プロセッサの特権レベル毎に複数のソフトウェアを動作させ、同一特権レベル内のイベントカウンタ手段のオーバフロー割込みハンドラを同一の論理アドレスに配置することにより、複数ソフトウェアのプロファイリングを平行して行うことを可能とする性能モニタリング方式。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】本発明は、プロセッサが持つ複数の特権レベルを利用して動作するソフトウェアの動作状態を正確に効率よく分析するための性能モニタリング方式に係り、特にソフトウェアで実現する仮想マシン環境において、各階層のプログラムの挙動分析やプログラムの問題点をチェックし改善するチューニングに対応できるものに関する。
【０００２】
【従来の技術】現在のプロセッサの多くは、プロセッサ内部のイベントおよび外部とのやり取りのイベントをカウントする性能モニタリング・カウンタを有している。
【０００３】
例えばインテル社のペンティアムプロセッサでは複数本のカウンタを持ち、クロック数、実行命令数、あるいはキャッシュミス数などの多数のイベントの中から選択してカウントできるように構成されている（例えば、非特許文献１参照）。
【０００４】
これによりプログラムのどの部分が多く使用されていたか等の動作の解析を行うことができる。
【０００５】
またインターナショナル・ビジネス・マシン社のパワーＰＣプロセッサでも、同様に構成されており、多数のイベントの中から選択してカウントすることができる。
【０００６】
これらのプロセッサの中には、カウンタがオーバフローした際に、特定のあるいは指定したベクタに割込みを発生させる機能を有するものがある。
【０００７】
この機能を利用して、特定のイベントが発生したアドレスをサンプリングすることにより、プログラム中のどこの部分で該当イベントが多く発生しているかを解析することができる。
【０００８】
そしてこの手法を用いることにより、オペレーティング・システムやアプリケーション・プログラムの挙動分析やボトルネック解析等のチューニングを行うことができる。なおこのような動作を行う市販ソフトウェアとしてはインテル社のＶＴｕｎｅなどが存在する。
【０００９】
【非特許文献１】
インテル社発行「ＩＡ−３２  インテルアーキテクチャ  ソフトウェアデベロッパァズマニアル第３巻：システムプログラミングガイド」
（ＩＡ−３２Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ  Ｖｏｌｕｍｅ３：  Ｓｙｓｔｅｍ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｇｕｉｄｅ
ＣＨＡＰＴＥＲ１５  Ｄｅｂｕｇｇｉｎｇ  ａｎｄ  Ｐｅｒｆｏｒｍａｎｃｅ
Ｍｏｎｉｔｏｒｉｎｇ
特に「１５、８ＰＥＲＦＯＲＭＡＮＣＥ  ＭＯＮＩＴＯＲＩＮＧ  ＯＶＥＲＶＩＥＷ」以降の部分参照。）
Ｉｎｔｅｌ社Ｗｅｂサイト（ｈｔｔｐ：／／ｗｗｗ．ｉｎｔｅｌ．ｃｏｍ）
【００１０】
【発明が解決しようとする課題】従来の性能モニタリング方式では、図６に示す如く、ハードウェア１、仮想マシンモニタ２、オペレーティングシステム（以下ＯＳという）ＯＳ１、ＯＳ２・・・、アプリケーション・プログラム（以下アプリという）ａ１、ａ２、ａ３、ａ４・・・等で仮想マシン環境において、仮想マシンモニタ２にオーバフロー収集手段１０を設け、前記イベントの発生をカウントするカウンタのオーバフローを検出していた。
【００１１】
なお特権レベルは、ハードウェアを構成するプロセッサの機能の制限状態を示すものであって数値の低いもの程高く、特権レベル０の仮想マシンモニタ２では、ハードウェアのすべてのリソースを使用することができ、特権レベル２の低い部分では、特権レベルの高い部分に比して直接使用可能なリソース部分がかなり制限されている。
【００１２】
このように、従来の技術では、前記イベントの発生をカウントするカウンタがオーバフローした際に、発生させることのできる割込み先が１つに固定されていた。またプロセッサの動作状況に応じて、つまり特権レベルに応じて割込み先を変えるといった機能がなかった。
【００１３】
このためプロセッサの異なった特権モードに複数のソフトウェアを動作させるような場合、それぞれの階層で動作するソフトウェアに直接割込みを発生させることができず、一度根本となる部分つまり全体を制御している仮想マシンモニタ２の部分で割込みを受け、それぞれの階層に対して通知を行って、プログラムの動作を特徴づけるデータを収集するプロファイリングに必要な各階層の動作状態を把握するための情報収集を行うため、このオーバヘッドの発生と前記情報収集の間にプログラムが動作して正確さが失われたり、細部にずれが生じて分析が不充分になったり、オーバヘッドや測定の歪みが生じていた。
【００１４】
特に、図６に示すような仮想マシン環境において、一般的に仮想マシンモニタ２で割込み処理を行わせるため、その上で動作するＯＳが直接割込みを受けることができず、仮想マシンモニタ上で動作するＯＳやアプリのチューニングつまりプログラムの問題点を正確に把握してこれを改善することが難しかった。
【００１５】
したがって本発明の目的は、このカウンタのオーバフローが発生したときに低オーバヘッドでプロファイリングが可能な性能モニタリング方式を提供することである。
【００１６】
【課題を解決するための手段】本発明は、プロセッサの動作状況に応じてイベントカウンタのオーバフロー割込み先を動的に変える機能およびこの機能を利用した性能モニタリング方式を提供するものである。
【００１７】
プロセッサが動作する複数の特権レベル毎に個別に割込み先登録レジスタを持ち、プロセッサが現在動作している特権レベルに応じて割込み先を変更する。またこの機能を利用し、各特権レベル毎に動作する複数のソフトウェアにイベントカウンタのオーバフロー割込み処理手段を持たせ、各階層で必要な情報を採取する。
【００１８】
これにより、プロセッサの異なった特権モードに複数のソフトウェアを動作させるような場合、特にソフトウェアで実現する仮想マシン環境において、仮想マシンモニタ、およびその上で動作する各オペレーティングシステムが同時平行に低オーバヘッドでプロファイリングを行うことが可能となる。
【００１９】
本発明の原理図を図１に示す。図１において、１はハードウェア、２は仮想マシンモニタ、２０は仮想マシンモニタに設けたイベントカウンタのオーバフロー割込み処理手段、２１はＯＳ１に設けたイベントカウンタのオーバフロー割込み処理手段、２２はＯＳ２に設けたイベントカウンタのオーバフロー割込み処理手段、２３はアプリａ１に設けたイベントカウンタのオーバフロー割込み処理手段、２４はアプリａ２に設けたイベントカウンタのオーバフロー割込み処理手段、２５、２６はそれぞれアプリａ３、ａ４に設けたイベントカウンタのオーバフロー割込み処理手段を示す。これら割込み処理手段２３、２４の一方、割込み処理手段２５、２６の一方は省略することもできる。そして仮想マシンモニタの特権レベルは「０」であり、ＯＳ１、ＯＳ２の特権レベルは「１」であり、アプリａ１〜ａ４の特権レベルは「２」である。
【００２０】
ＯＳ１、ＯＳ２は仮想マシンモニタ２により選択制御され、またアプリａ１、ａ２はＯＳ１により選択制御され、アプリａ３、ａ４はＯＳ２により選択制御される。
【００２１】
本発明における前記目的は下記（１）〜（４）により達成することができる。
【００２２】
（１）複数の特権モードを持つプロセッサにおいて、プロセッサ内部のイベント及び外部とのやり取りのイベントをカウントするカウンタ手段と、特権レベル毎に割込み先を指示した指示手段を設け、前記カウンタ手段のオーバフロー時のプロセッサの特権レベル毎にプロセッサに対して割込み先を制御可能とした性能モニタリング方式。
【００２３】
（２）前記（１）において、前記カウンタ手段のオーバフロー時に、プロセッサの特権レベル毎に割込み先位置、割込みレベル、割込みマスクを指定可能としたことを特徴とする性能モニタリング方式。
【００２４】
（３）前記（１）または（２）において、プロセッサの異なった特権モードに複数のソフトウェアを動作させ、各特権レベル毎のソフトウェアが前記イベントをカウントするカウント手段のオーバフロー割込みを直接得ることを可能とした性能モニタリング方式。
【００２５】
（４）前記（３）において、プロセッサの特権レベル毎に複数のソフトウェアを動作させ、同一特権レベル内のイベントカウンタ手段のオーバフロー割込みハンドラを同一の論理アドレスに配置することにより、複数ソフトウェアのプロファイリングを平行して行うことを可能とする性能モニタリング方式。
【００２６】
これにより下記の作用効果を奏することができる。
【００２７】
（１）イベント計測用のカウンタがオーバフローしたとき、プロセッサの特権レベル毎に割込み制御するように構成したので、特権レベルに応じて個別に割込み先に割込むことができ、直ちに必要なデータを収集できるので、時間的なずれのない、正確な挙動分析やボトルネック解析を行うことができる。
【００２８】
（２）特権レベル毎に割込み先位置、割込みレベル、割込みマスクを指定できるので、性能解析に不必要と思われる部分をマスクするなど、更に細かい制御をすることができる。
【００２９】
（３）プロセッサの異なった特権モードに複数のソフトウェアを動作させ、前記カウンタのオーバフロー割込みに対する適切な割込みハンドラを直接呼出すことが可能になるので、オーバヘッドがなく、正確な挙動分析、ボトルネック解析などのチューニングを行うことができる。
【００３０】
（４）プロセッサの特権レベル毎に複数のソフトウェアを動作させ、同一特権レベル内のイベントカウンタ手段のオーバフロー割込みハンドラを同一の論理アドレスに配置したので、例えばＯＳが切替ったときでもベクターテーブルを書き替える必要がないので、オーバヘッドを少なく、ＯＳやアプリのプロファイリングを平行して行うことが可能となる。
【００３１】
【発明の実施の形態】本発明の一実施の形態を図２にもとづき説明する。図２において、１−０はイベント・カウンタ、１−１は特権レベルチェック手段、１−２はベクタ・テーブル・レジスタであり、ハードウェア１内のプロセッサＣＰＵに有するものである。プロセッサＣＰＵはメモリＭ内に保持されている命令１、命令２、命令３・・・等で構成されるプログラムを実行するものである。
【００３２】
イベントカウンタ１−０は、このプログラムの実行に際し、あらかじめ定められたモニタリング・イベント例えばキャッシュミスが発生したときインクリメントされるものであり、このイベントカウンタ１−０のカウント値があらかじめ定められた値を越えたときつまりカウンタオーバフローが発生したとき、これをプロセッサが有する特権レベルチェック手段１−１に通知して、そのときのモニタリングイベントを発生させた命令の特権レベルをチェックし、ベクタ・テーブル・レジスタ１−２から一致する特権レベルの区分に設定された割込み処理を割込み処理部に割込み発生を通知して行わせる。
【００３３】
ベクタ・テーブル・レジスタ１−２には、特権レベル０、１、２毎に、この割込み処理のために実行すべき割込みハンドラアドレスが記入されており、これを実行することにより、どのイベント（例えばキャッシュミス、実行命令数、クロック数等）が、どのアドレスの命令で、何時カウントオーバフローが発生したかを示す情報等が基本的に収集される。
【００３４】
イベントカウンタ１−０は、キャッシュミス、クロック数、実行命令数等のイベント毎に設けるが、複数のイベント間で共通のイベントカウンタを設け、複数のイベント間でまとめてカウントアップしてもよい。
【００３５】
このようにして命令１、２、３・・・を順次実行中にイベントカウンタ１−０がオーバフローした場合、イベントを発生させた命令の特権レベルをチェックし、一致する特権レベルのベクタ・テーブル・レジスタ１−２に設定された割込み処理を行う。なお図２において命令１、２、３・・・の左側の数字１００、１１０、１２０・・・はその命令の記入されたメモリアドレスを示す。このようにして性能モニタリング・カウンタであるイベントカウンタのオーバフロー割込みに対し、適切な割込みハンドラを直接呼出すことが可能になる。
【００３６】
本発明の第２の実施の形態を図３にもとづき説明する。
【００３７】
第２の実施の形態では、イベントを計測するイベントカウンタの割込み機能を制御するものであり、このため、図３に示す如く、特権レベル数（この例では３レベル）に応じたベクタ・テーブル・レジスタ１−２−０を用意し、各々のベクタ・テーブル・レジスタ１−２−０にはマスク・ビット、割込みレベル、割込み番号を設定可能とする。
【００３８】
マスク・ビットは割込みを有効にするか否かを示すものであり、例えば「０」で有効を示し、「１」で無効を示す。
【００３９】
割込みレベルは同時に割込みが発生したときその優先度を示すもので、例えば「０」が最優先を示し、「１」が次の優先度を示す。図３の例では特権レベル０と１のイベントカウンタが同時にオーバフローしたとき、特権レベル０の方が優先処理されることを示す。
【００４０】
割込み番号は、割込み時に参照する割込み・ベクタ・テーブル１−３の番号を示す。この割込み番号はイベントカウンタのオーバフロー時に収集したい情報の種類に応じて任意に割当てることができる。図３の例では、特権レベル０のイベントカウンタがオーバフローした場合、割込み・ベクタ・テーブル１−３の割込み番号３で示す割込み３ハンドラアドレスの割込みハンドラにもとづく割込み処理が行われ、特権レベル１のイベントカウンタがオーバフローした場合、割込み番号２で示す割込み２ハンドラアドレスの割込みハンドラにもとづく割込み処理が行われ、特権レベル２のイベントカウンタがオーバフローした場合、割込み番号１で示す割込み１ハンドラアドレスの割込みハンドラにもとづく割込み処理が行われる。
【００４１】
このように、イベントカウンタがオーバフローした場合、かつイベントを発生させた命令の特権レベルに応じたベクタ・テーブル・レジスタ１−２−０のマスク・ビットが有効に設定されていた場合は、割込み番号に相当する割込みベクタテーブルを参照して割込を発生させる。
【００４２】
このようにして、特定の特権レベルの情報収集を重点的に行うことが可能になるなど、きめ細かな制御ができる。
【００４３】
本発明の第３の実施の形態を図４、図７を参照して説明する。
【００４４】
図７は従来の、ソフトウェアで実現する仮想マシン環境における割込み処理動作図を示し、図４は本発明の第３の実施の形態を示す。
【００４５】
従来では、図７におけるメモリＭの割込みベクタ・テーブルＩＴ内のすべての割込みハンドラアドレスには、通常割込み処理ルーチンである仮想マシンモニタ内にある割込みハンドラが登録されている。
【００４６】
したがってイベントカウンタＣＮＴのオーバフロー割込みが発生すると、そのイベントの特権レベルが０でも１でもこれにかかわらず、まず仮想マシンモニタ内の割込みハンドラＶＩＨが呼出され、その後に、その時点で仮想マシンモニタ上で動作しているＯＳ、例えばＯＳ１の割込みベクタ・テーブルＴ１  に登録されている、あらかじめ決められた、例えば「割込み１」の割込みハンドラが呼び出され、割込み処理が行われる。
【００４７】
これでは、前述の如く、仮想マシンモニタ内の割込みハンドラを経由して特権レベルに応じた割込みハンドラを呼出するため、オーバヘッドや測定のひずみが生じていた。
【００４８】
これを改善するため、図４に示すこの実施の形態では、イベントカウンタＩＣでオーバフロー割込みが発生すると、そのときの特権レベルをチェックし、割込みレベルに応じてベクタ・テーブル・レジスタ１−０を参照する。ベクタ・テーブル・レジスタ１−０には、オーバフローによる割込みが発生した時に参照されるメモリＭ中の割込みベクタ・テーブル内に各特権レベルで動作しているソフトウェアの割込みハンドラのアドレスを登録しておく。
【００４９】
これにより、例えば特権レベル１のＯＳ１が動作しているときにイベントカウンタがオーバフローしたとき、ベクタ・テーブル・レジスタ１−０の特権１の区分を参照することにより、直ちに特権１用の割込みハンドラ「割込み１」を呼出すことが可能となり、仮想マシンモニタの割込みハンドラを経由することなく、直接に各特権レベルに応じた割込みハンドラを呼出すことができる。
【００５０】
これにより図４に示す如く、プロセッサの異なった特権モードに複数のソフトウェア、例えば仮想マシンモニタ、ＯＳ１、ＯＳ２、アプリａ１、ａ２、ａ３、ａ４を同時に動作させている場合でも、適切な割込みハンドラを直接呼出すことができる。
【００５１】
本発明の第４の実施の形態を図５を参照して説明する。
【００５２】
割込みベクタテーブル内に、各特権レベルで動作しているソフトウェアの割込みハンドラを登録した場合でも、同一特権レベル内に複数のソフトウェアが動作していた場合、例えばＯＳ１とＯＳ２が動作していた場合、ソフトウェアを切換える毎に割込みベクタテーブル内のハンドラアドレスを変更する必要がある。
【００５３】
これを改善するため、第４の実施の形態では、同一特権レベル内のソフトウェア、例えばＯＳ１およびＯＳ２のイベントカウンタのオーバフロー割込みハンドラを、図５に示す如く同一の論理アドレスに配置する。
【００５４】
ＯＳ１とＯＳ２の領域は、図５の物理メモリ、論理メモリに示すように、論理アドレスが同じでも全く別であり、その内容も別である。異なる物理アドレスをたまたま同じ論理アドレスにマップしておく。実際にはＯＳ１とＯＳ２のイベントカウンタの割込みハンドラの内容は別のものである。
【００５５】
このようにイベントカウンタのオーバフロー割込みハンドラアドレスを同一の論理アドレスに配置することにより、特権レベル間だけでなく、同一特権レベル内でのソフトウェアの切換えにおいても、該当処理を行う割込みハンドラを直接呼出すことが可能になる。
【００５６】
以上説明のように、本発明によればプロセッサの異なった特権モードに複数のソフトウェアを動作させるような場合、また同一特権モードで複数のソフトウェアを同時に動作させるような場合に、性能モニタリング・カウンタのオーバフロー割込みに対して適切な割込みハンドラを直接呼出すことが可能となる。
【００５７】
これによりソフトウェアで実現する仮想マシン環境において、仮想マシン・モニタおよびその上で動作する各オペレーティングシステムおよびアプリケーションのプロファイリングを同時平行に低オーバヘッドで行うことができ、挙動分析やボトルネック解析等チューニングを効率良く正確に行うことが可能となる。
【００５８】
【発明の効果】本発明により下記の効果を奏することができる。
【００５９】
（１）イベント計測用のカウンタがオーバフローしたとき、プロセッサの特権レベル毎に割込み制御するように構成したので、特権レベルに応じて個別に割込み先に割込むことができ、直ちに必要なデータを収集できるので、時間的なずれのない、正確な挙動分析やボトルネック解析を行うことができる。
【００６０】
（２）特権レベル毎に割込み先位置、割込みレベル、割込みマスクを指定できるので、性能解析に不必要と思われる部分をマスクするなど、更に細かい制御をすることができる。
【００６１】
（３）プロセッサの異なった特権モードに複数のソフトウェアを動作させ、前記カウンタのオーバフロー割込みに対する適切な割込みハンドラを直接呼出すことが可能になるので、オーバヘッドがなく、正確な挙動分析、ボトルネック解析などのチューニングを行うことができる。
【００６２】
（４）プロセッサの特権レベル毎に複数のソフトウェアを動作させ、同一特権レベル内のイベントカウンタ手段のオーバフロー割込みハンドラを同一の論理アドレスに配置したので、例えばＯＳが切替ったときでもベクターテーブルを書き替える必要がないので、オーバヘッドを少なく、ＯＳやアプリのプロファイリングを平行して行うことが可能となる。
【図面の簡単な説明】
【図１】本発明の原理図である。
【図２】本発明の一実施の形態を示す。
【図３】本発明の第２の実施の形態を示す。
【図４】本発明の第３の実施の形態を示す。
【図５】本発明の第４の実施の形態を示す。
【図６】従来例を示す。
【図７】仮想マシン環境における割込処理動作図を示す。
【符号の説明】
１  ハードウェア
２  仮想マシンモニタ
【図１】
2004318538.tif 000003
【図２】
2004318538.tif 000004
【図３】
2004318538.tif 000005
【図４】
2004318538.tif 000006
【図５】
2004318538.tif 000007
【図６】
2004318538.tif 000008
【図７】
2004318538.tif 000009