(57)【特許請求の範囲】
【請求項１】
関数を含む、命令からなるモニタ対象のプログラム性能を測定するシステムであって、
ユーザ・レベル・モニタリング・プログラム、および、関数の呼び出し回数と実行される命令数をカウントするファシリティを含むカーネルを備えたオペレーティング・システムを記憶するための記憶機構、および、プロセッサを備え、
前記プロセッサは、
（ｉ）前記モニタの対象プログラムと前記ユーザ・レベル・モニタリング・プログラムを実行するためのプログラム実行ユニット、
（ｉｉ）前記ファシリティを実行するファシリティ・インボーカであって、
前記ファシリティは、ユーザによってモニタ対象として選択された前記関数に挿入されたブレークポイント割り込みを生成するオペコードによるブレークポイントを検出後、その関数用にユーザが要求した性能基準を判断し、前記性能基準が関数の呼び出し回数のカウントの場合は、前記関数の呼び出し回数をカウントし、前記性能基準が実行される命令数のカウントの場合は、シングル・ステッピング・モードで前記実行される命令数のカウントを行うことを含む、
ファシリティ・インボーカ、
（ｉｉｉ）前記カウントを、前記ユーザ・レベル・モニタリング・プログラムに報告するカウント・レポータ
を備えたことを特徴とするシステム。
【請求項２】
ユーザ・レベル・モニタリング・プログラム、および、関数の呼び出し回数と実行される命令数をカウントするファシリティを含むカーネルを備えたオペレーティング・システムを記憶するための記憶機構と、プロセッサとを有するコンピュータシステム内で、関数を含む、命令からなるモニタ対象のプログラム性能を測定する方法であって、
前記プロセッサが、前記ファシリティを実行するステップであって、
前記ファシリティは、
ユーザによってモニタ対象として選択された前記関数に挿入されたブレークポイント割り込みを生成するオペコードによるブレークポイントを検出するステップと、
前記関数用にユーザが要求した性能基準を判断するステップと、
前記性能基準が関数の呼び出し回数のカウントの場合は、前記関数の呼び出し回数をカウントするステップと、
前記性能基準が実行される命令数のカウントの場合は、シングル・ステッピング・モードで前記実行される命令数をカウントするステップを含む、
前記ファシリティを実行するステップと、
前記プロセッサが、前記ユーザ・レベル・モニタリング・プログラムに前記カウントを報告するステップ
を含むことを特徴とする方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
この発明は、データ処理システムに関し、具体的には、データ処理システム上で実行されるプログラムの性能（パフォーマンス）をモニタ（モニタリング）する方法およびシステムに関する。
【０００２】
【従来の技術】
データ処理システムで実行されるプログラムの性能（パフォーマンス）をモニタするための様々な統計的手法が、これまでに開発されてきている。最も著名な手法の一つとして、プログラムの各関数の実行時間をモニタするものがある。このアプローチによると、多くの場合に、関数の処理時間の計測に使用されるクロックの周期が大きすぎるために、処理時間が各関数にどのように分配されているかの正確な状況を把握できない点に難点がある。プログラムの性能をモニタするもう一つの統計的手法として、命令をカウントするものがある。命令をカウントする手法は、一般に、アプリケーション・プログラムのようなユーザ・レベルのプログラム（システム・レベルのプログラムに対するものとして）の性能をモニタするのに限定されている。
【０００３】
【発明が解決しようとする課題】
これまでに、これらの手法を、オペレーティング・システムのカーネルの性能をモニタするのに適用することはできなかった。このような制限により、プログラマが、プログラムの性能を向上させるために統計的手法を利用できないことが多かった。
【０００４】
【課題を解決するための手段】
命令を実行するプロセッサ、ならびにオペレーティング・システムおよびユーザ・レベルのモニタリング・プログラムを記憶するための記憶機構を備えているデータ処理システムにおいて、この発明による方法が実行される。プロセッサは、ユーザ・レベルおよびシステム・レベルの命令を実行する。データ処理システムは、分散システムであってもよい。
【０００５】
この方法において、ファシリティが、プログラムの性能をモニタするために、オペレーティング・システムのカーネルに備えられる。例えば、このファシリティは、プロセッサによって実行される命令をカウントするものであってもよいし、コードの一部がプログラムの実行中に呼び出された回数をカウントするものであってもよい。また、ファシリティは、各関数で実行される命令数を示す関数によって分類された多くの個別のカウントを提供するものであってもよい。プログラムのコードの一部が、プロセッサによって実行される。このとき、オペレーティング・システムのカーネルにあるファシリティは、システムの性能をモニタするために使用される。
【０００６】
使用されるファシリティのタイプは、そのファシリティによってカウントされる値を決定する。カウントは、ユーザ・レベル・モニタリング・プログラムに報告される。例えば、ファシリティは、プログラムのコードの一部を実行したときの命令数をカウントするものであってもよいし、プログラムのコードの一部が呼び出される回数をカウントするものであってもよい。また、ファシリティは、第１の関数がプログラムの実行中に呼び出されるときに、関数において実行される命令を備えた関数によって分類された個別のカウントを提供するものであってもよい。
【０００７】
プログラムは、ユーザ・レベル・プログラムであってよいし、オペレーティング・システムのカーネルの一部であってもよい。
【０００８】
【実施例】
この発明の好ましい実施例は、プログラムの性能をモニタ（モニタリング）するファシリティを、オペレーティング・システムのカーネルに備えている。このファシリティは、多くのオプションをユーザに提供する。第１に、このファシリティにより、ユーザは、ある関数が呼び出されるごとに、その関数によって実行される命令数をカウントすることができる。第２に、このファシリティにより、ユーザは、ある特定の関数への呼び出し回数および頻度を、その関数において実行される命令をカウントすることなく、カウントすることができる。第３に、このファシリティにより、ユーザは、初期関数の呼び出しの結果、呼び出される各関数において実行される命令数をカウントすることができる。このファシリティは、オペレーティング・システムのカーネルに設けられるので、アプリケーション・プログラムのようなユーザ・レベル・プログラムの性能をモニタすることに使用できるだけでなく、カーネルの性能およびオペレーティング・システムの他の部分の性能をモニタすることに使用することもできる。ファシリティをオペレーティング・システムのカーネルに設けることにより、モニタの速度を向上させることもでき、モニタの対象となるプログラムに変更を加えることなく、性能のモニタを行う簡単なアプローチを提供することができる。
【０００９】
図１に示すように、この実施例を、分散システム10において実現することができる。この発明を、単一のプロセッサ・システムにおいて実行できることも理解できるであろう。この分散システム10は、ネットワーク14を介して通信を行う多くのコンピュータ・システム12を含んでいる。各コンピュータ・システム12は、実行しているプログラムのトレースを同時に行うことができる。ネットワーク14は、ローカル・エリア・ネットワーク（ＬＡＮ）やワイド・エリア・ネットワークを含む多くの異なるタイプのネットワークのいずれであってもよい。この技術分野の専門家ならば、分散システム10が、図１に示すものとは異なる個数のコンピュータ・システムを含むこともできることを容易に理解するであろう。この分散システムにおいては、４台のコンピュータ・システムが示されているにすぎない。
【００１０】
図２は、コンピュータ・システム12の一つに含まれる構成要素を詳細に示すブロック図である。各コンピュータ・システムが、このシステム構成を有する必要は必ずしもなく、ここでは、このシステム構成が、単に示されているにすぎない。コンピュータ・システム12は、中央処理装置（ＣＰＵ）13およびメモリ16を備えている。ＣＰＵ13は、複数のレジスタ17を備えている。レジスタ17には、ＦＬＡＧレジスタおよびＳＳ（Stack Segment ：スタック・セグメント）レジスタが含まれている。これらのレジスタについては、後に詳述する。メモリ16は、ワシントンのレドモンドにあるマイクロソフト社（Microsoft Corporation ）により販売されている、マイクロソフトＮＴオペレーティング・システムのような分散オペレーティング・システム28のコピーを保持している。この実施例においては、各コンピュータ・システム12が、オペレーティング・システムのコピーを保持し、実行する。オペレーティング・システム28は、カーネル30を含んでいる。カーネル30には、性能をモニタすることをサポートするコード部32がある。コード部32については、後に詳述する。メモリ16には、ＣＰＵ13によって実行される少なくとも一つのアプリケーション・プログラム26も記憶されている。しかし、このアプリケーション・プログラム26は、メモリ16に記憶されている必要は必ずしもない。
【００１１】
また、コンピュータ・システム12は、多くの周辺装置を備えている。これらの周辺装置には、補助記憶装置（例えば、磁気ディスク・ドライブ）18、キーボード20、ビデオ・ディスプレイ22およびマウス24が含まれる。
【００１２】
図３は、コード部32を詳細に示すブロック図である。ＡＰＩは、ブレークポイント・ファシリティ34を含んでいる。このブレークポイント・ファシリティ34は、ＣＰＵ13で実行されるプログラム内のブレークポイントの生成をサポートする。また、コード部32は、シングル・ステップの割込みを制御するシングル・ステップ割込ハンドラ36を含んでいる。ブレークポイント・ファシリティ34およびシングル・ステップ割込ハンドラ36によって提供される機能を説明するために、まず、ブレークポイントとは何か、シングル・ステップ割込みとは何かを知ることが有益である。
【００１３】
シングル・ステップ割込みとは、プログラムを１ステップごとに処理（シングル・ステッピング）するときに使用される割込みをである。シングル・ステッピングは、ＣＰＵ13の一つの処理モードであり、管理プログラムの制御の下、一時に一つの命令を実行するモードである。シングル・ステッピングにより、デバッガまたは性能モニタは、プログラムをゆっくりと実行することができ、プログラムの実行を注意深くモニタすることができる。ここでは、シングル・ステップ割込ハンドラ36は、モニタされているプログラムが一時に一つの命令を実行する管理プログラムである。一般に、一つの命令が実行されると、単一のステップ割込みが発生し、プロセッサの制御が管理プログラムに切り換えられる。80X86 （80186 、80286 等）マイクロプロセッサのような多くのマイクロプロセッサは、マイクロプロセッサをシングル・ステッピング・モードに切り換える便利な機構を備えている。80X86 マイクロプロセッサには、シングル・ステップ・トラップ・フラグが、ＦＬＡＧレジスタ（図２）に備えられている。このシングル・ステップ・トラップ・フラグの値が１の場合には、マイクロプロセッサは、シングル・ステップ・モードを実行し、一方、シングル・ステップ・トラップ・フラグの値が０の場合には、マイクロプロセッサは、シングル・ステップ・モードを実行しない。
【００１４】
ブレークポイントとは、プログラムの自由な実行をブレークするために使用され、プログラムのデバッグおよびプログラムの性能のモニタに有効なブレークポイント割込みである。シングル・ステップ・モードにおいては、プログラムがゆっくりと実行されるので、プログラムを全て実行することは難しい。多くの場合に、プログラムの大部分は既にデバッグまたはチューンされており、わずかな部分にのみ、詳細な試験が必要とされる。ブレークポイント割込みは、このような状況において特に適している。ブレークポイント割込みは、プログラム中に特別のオペコード（演算コード：opcode）を挿入することにより、発生する。このオペコードは、実行時に、ブレークポイント割込みを発生させる。ブレークポイント割込みが発生すると、制御は、ブレークポイント・ファシリティ34に渡される。ブレークポイント・ファシリティ34は、さらに必要となる処理を行うこともある。この実施例におけるブレークポイントおよびシングル・ステップ割込みの機能については、以下に述べる図４および図５の説明において詳述する。
【００１５】
ブレークポイント・ファシリティ34およびシングル・ステップ・ハンドラ36に加えて、コード部32は、文脈スイッチに関係したコード38を含んでいる。このコード38は、文脈スイッチ用のフックを備え、文脈スイッチを検査して、新しい文脈をシングル・ステップとすべきかどうかを決定するハンドラを含んでいる。新しい文脈がシングル・ステップとされるならば、このハンドラは、シングル・ステッピングを確実に発生させる。
【００１６】
コード部32は、カウンタ値40も含んでいる。上述したように、この実施例では、ユーザは、関数において実行される命令数、関数がプログラム内で呼び出される回数および初期関数を呼び出した結果として呼び出される各関数用に実行される命令数をモニタすることができる。これらの各カウントは、個別のカウンタに記憶され、そのカウンタの値が、コード部32のデータ・エリアのカウンタ値40として保持される。
【００１７】
図４は、この実施例においてプログラムまたはプログラムの一部の性能をモニタするために実行される処理の流れを示すフローチャートである。まず、ユーザは、性能基準（性能メトリック）を選択する（ステップ42）。続いて、ダイアログ・ボックスのメニューのようなユーザ・インタフェースが、ユーザが使用しているコンピュータ・システム12（図１）のビデオ・ディスプレイ22（図２）に表示される。ユーザは、このユーザ・インタフェースを使用することにより、所望の性能基準を選択することができる。上述したように、この実施例において求められる多くの異なる性能基準がある。また、ユーザは、プログラム中のどの関数をモニタするかを選択する（ステップ44）。性能基準が選択され、モニタされる関数が選択されると、ブレークポイント割込みを生成するオペコードがモニタされる関数のそれぞれに挿入され、プログラムまたはプログラムの一部が実行される（ステップ46）。適切なカウンタ値40が、プログラムの実行に伴い計算される。プログラムの実行に伴い、カウンタ値40は、ビデオ・ディスプレイ22に表示される（ステップ48）。プログラムまたはプログラムの一部の実行が終了すると、ユーザは、プログラムを適切にチューニング（チューン）するための指標となる性能データを検討することができる（ステップ50）。性能データをどのようにプログラムのチューニングに使用するかは、収集されたデータのタイプに依存する。この技術の専門家には、プログラムを適切にチューニングするための性能基準データを使用方法が分かるであろう。
【００１８】
図５は、関数ごとに行われるブレークポイントの挿入およびプログラムの実行（すなわち、図４のステップ46）の詳細を示すフローチャートである。上述したように、ブレークポイントのオペコードが、モニタされる各関数の最初の命令として置かれる（ステップ52）。続いて、システムは、関数の実行を開始する（ステップ54）。ブレーク・ポイントは、関数の最初の命令として置かれているので、カーネルは、ブレークポイントを発見し（ステップ56）、ユーザがその関数用に要求した性能基準がどれかを決定する（ステップ58）。要求された性能基準が関数の呼び出し回数のカウントだけならば、その関数の呼び出し回数を示すために、カウンタ値40（図３）のうちの、その関数の呼び出し回数をカウントするカウンタの値がインクリメントされる（ステップ60）。このカウンタがインクリメントされると、その関数は、再スタートし、フルスピードで実行を再開する。
【００１９】
この実施例において実行される処理について説明する前に、ユーザが、実行される命令数をモニタしたいときに、「スレッド」および「スタック」を紹介しておくことが有益である。一つのスレッドは、他のスレッドと独立に、かつ、同時に実行できる仕事の単位である。オペレーティング・システム28は、マルチスレッド・システムである。この技術分野の専門家ならば、必ずしもマルチスレッド・システムで実行される必要がないことを理解するであろう。また、シングル・プロセスおよびマルチプロセシング・システムで実行することもできる。マルチスレッド・オペレーティング・システムは、複数のスレッドを同時に実行することができる。スタックとは、後入れ先出し（ラスト・イン・ファースト・アウト（Last-In-First-Out ：LIFO））のデータ構造を持つものであり、スレッド用のデータおよびレジスタ情報を記憶するために使用される。各スレッドは、そのスレッド専用のスタック・セグメント（Stack Segment ：ＳＳ）部を有する。ＳＳレジスタ（図２）は、実行されているプログラムのスレッドのスタックを記憶するメモリのセグメントをポイントする。各スレッドは、そのスタック（すなわち、そのスレッド専用のスタック・セグメント部）の先頭をポイントする、そのスレッドに関連したスタック・ポインタ（Stack Pointer ：ＳＰ）の値を有する。この技術分野の専門家ならば、スタックを使用しない環境においても、この発明を実行できることを理解するであろう。
【００２０】
図５に戻って、ステップ58において、ユーザが、関数の呼び出し回数のカウントではなく、実行される命令数のカウントを望んでいると判定されると、現在実行中のスレッドのスタック・ポインタがメモリ16に記憶される（ステップ64）。ＦＬＡＧレジスタ（図２）のシングル・ステップ・トラップ・フラグは、ＣＰＵ13がシングル・ステッピング・モードになるようにセットされる（ステップ66）。シングル・ステッピング・モードでは、命令が実行されるごとに、現在実行されている関数の命令数を追跡するカウンタ値が、インクリメントされる（ステップ68）。これらの命令は、スレッドがモニタされている関数を抜け出すか、スレッドが終了するまで、カウントされる。スレッドがそれ自身をスケジュールしないと、カウントしている命令は中断されるかも知れないが、スレッドが再びスケジュールされた後は、命令のカウントが再開される。
【００２１】
この発明について実施例を参照しながら説明したが、この技術分野の専門家ならば、特許請求の範囲において定められるこの発明から逸脱することなく、様々な変更や具体化を行うことができる。
【図面の簡単な説明】
【図１】この発明の好ましい実施例を実行する分散システムの構成を示すブロック図である。
【図２】図１に示すコンピュータ・システムの構成を詳細に示すブロック図である。
【図３】図２におけるＡＰＩを詳細に示すブロック図である。
【図４】この発明の好ましい実施例におけるプログラムの性能のモニタおよびプログラムをチューニングの処理の流れを、ユーザの操作に基づいて示すフローチャートである。
【図５】この発明の好ましい実施例においてモニタが行われるときに、ブレークポイントがどのように挿入されるか、およびプログラムがどのように実行されるかを詳細に示すフローチャートである。
【符号の説明】
10  分散システム
12  コンピュータ・システム
13  ＣＰＵ
14  ネットワーク
16  メモリ
18  補助記憶装置
20  キーボード
22  ビデオ・ディスプレイ
26  アプリケーション・プログラム
28  オペレーティング・システム
30  カーネル
32  コード部
【図１】
0004034363.tif 000002
【図２】
0004034363.tif 000003
【図３】
0004034363.tif 000004
【図４】
0004034363.tif 000005
【図５】
0004034363.tif 000006