(57)【要約】【課題】繰返し命令の追跡を可能にする方法およびシステムを提供すること。【解決手段】繰返し命令がプロセッサ内部で実行される。繰返し命令の最後の実行中にセットされた繰返し命令フラグの検出に応答して、プロセッサ内部で割込みが開始される。プロセッサは、割込み中に、追跡プログラムまたは外部ハードウェアが、プロセッサ内部の記憶装置から繰返し命令用の実行カウントを読み出すことを可能にする。【選択図】図８
2004199685.tif 000002
【特許請求の範囲】
【請求項１】
繰返し命令の追跡を可能にする方法であって、
プロセッサ内部で繰返し命令を実行すること、
前記繰返し命令の最後の実行中にセットされた繰返し命令フラグの検出に応答して、前記プロセッサ内部で割込みを開始すること、および
前記割込み中に、前記プロセッサ内部の記憶装置からの前記繰返し命令用の実行カウントの読出しを可能にすることを含む方法。
【請求項２】
前記繰返し命令の最初の実行の検出に応答して、前記プロセッサ内部の繰返しカウント・レジスタと前記プロセッサによってアクセス可能な命令情報バッファとのうちの少なくとも１つを備える前記記憶装置に、前記繰返し命令用の最初のカウント値をコピーすることをさらに含む、請求項１に記載の繰返し命令の追跡を可能にする方法。
【請求項３】
前記繰返し命令フラグが、割込みを起こすためにセットされる繰返しイネーブル・フラグと、オーバフロー、トレース・フック命令、および性能監視カウンタのオーバフローによってセットされるバッファ満杯フラグとのうちの少なくとも１つである、請求項１に記載の繰返し命令の追跡を可能にする方法。
【請求項４】
前記繰返し命令用の実行カウントの読出しを可能にすることが、
前記実行カウントを保持する、前記プロセッサ内部のＣＸレジスタと、前記実行カウントを保持する、前記プロセッサ内部の繰返しカウント・レジスタと、前記実行カウントおよび第１の実行カウントを保持する前記繰返しカウント・レジスタと第２の実行カウントを保持する前記ＣＸレジスタの差を保持する、前記プロセッサを介してアクセス可能な命令情報バッファとのうちの少なくとも１つを備える前記記憶装置からの読出しを追跡プログラムが行うことを可能にすることをさらに含む、請求項１に記載の繰返し命令の追跡を可能にする方法。
【請求項５】
前記プロセッサ内部の記憶装置として働く性能監視カウンタ中の前記実行カウントを追跡すること、および
前記性能監視カウンタからの前記実行カウントの読出しを可能にすることをさらに含む、請求項１に記載の繰返し命令の追跡を可能にする方法。
【請求項６】
複数の繰返し命令の実行カウントを追跡した後でのみ、前記割込みを開始することをさらに含む、請求項５に記載の繰返し命令の追跡を可能にする方法。
【請求項７】
割込みの検出に応答して、追跡プログラムが前記記憶装置からの繰返し命令の実行カウントおよび実行されたアドレスを固定バッファに読み出すことを可能にすること、および
前記実行カウントを実行ファイル中の特定の繰返し命令にマッピングするために、前記実行されたアドレスと、前記実行されたアドレスに格納された前記実行ファイルの命令とのマッチングを制御することをさらに含む、請求項１に記載の繰返し命令の追跡を可能にする方法。
【請求項８】
繰返し命令の追跡を可能にするシステムであって、
追跡プログラムによって追跡可能なプロセッサと、
前記プロセッサ内部で繰返し命令を実行する手段と、
前記繰返し命令の最後の実行中にセットされた繰返し命令フラグの検出に応答して、前記プロセッサ内部で割込みを開始する手段と、
前記割込み中に、前記プロセッサ内部の記憶装置からの前記繰返し命令用の実行カウントの読出しを可能にする手段とを備えるシステム。
【請求項９】
前記繰返し命令の最初の実行の検出に応答して、前記プロセッサ内部の繰返しカウント・レジスタと前記プロセッサによってアクセス可能な命令情報バッファとのうちの少なくとも１つを備える前記記憶装置に、前記繰返し命令用の最初のカウント値をコピーする手段をさらに備える、請求項８に記載の繰返し命令の追跡を可能にするシステム。
【請求項１０】
前記繰返し命令フラグが、割込みを起こすためにセットされる繰返しイネーブル・フラグと、オーバフロー、トレース・フック命令、および性能監視カウンタのオーバフローによってセットされるバッファ満杯フラグとのうちの少なくとも１つである、請求項８に記載の繰返し命令の追跡を可能にするシステム。
【請求項１１】
前記繰返し命令用の実行カウントの読出しを可能にする手段が、
前記実行カウントを保持する、前記プロセッサ内部のＣＸレジスタと、前記実行カウントを保持する、前記プロセッサ内部の繰返しカウント・レジスタと、前記実行カウントおよび第１の実行カウントを保持する前記繰返しカウント・レジスタと第２の実行カウントを保持する前記ＣＸレジスタの差を保持する、前記プロセッサを介してアクセス可能な命令情報バッファとのうちの少なくとも１つを備える前記記憶装置からの読出しを追跡プログラムが行うことを可能にする手段をさらに備える、請求項８に記載の繰返し命令の追跡を可能にするシステム。
【請求項１２】
前記プロセッサ内部の記憶装置として働く性能監視カウンタ中の前記実行カウントを追跡する手段と、
前記性能監視カウンタからの前記実行カウントの読出しを可能にする手段とをさらに備える、請求項８に記載の繰返し命令の追跡を可能にするシステム。
【請求項１３】
複数の繰返し命令の実行カウントを追跡した後でのみ、前記割込みを開始する手段をさらに備える、請求項１２に記載の繰返し命令の追跡を可能にするシステム。
【請求項１４】
割込みの検出に応答して、追跡プログラムが前記記憶装置からの繰返し命令の実行カウントおよび実行されたアドレスを固定バッファに読み出すことを可能にする手段と、
前記実行カウントを実行ファイル中の特定の繰返し命令にマッピングするために、前記実行されたアドレスと、前記実行されたアドレスに格納された前記実行ファイルの命令とのマッチングを制御する手段とをさらに備える、請求項８に記載の繰返し命令の追跡を可能にするシステム。
【請求項１５】
繰返し命令の追跡を制御する方法であって、
プロセッサ内で割込みを起こすように第１の順次繰返し命令を変更すること、
前記プロセッサ内での前記割込みの検出に応答して、前記繰返し命令を追跡し、前記繰返し命令を割込みから戻るように変更すること、および
前記第１の順次繰返し命令を渡す分岐割込みの検出に応答して、前記繰返し命令を復元し、次の順次繰返し命令を割込みを起こすように変更することを含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全般的にはマイクロプロセッサに関し、詳細には、マイクロプロセッサの命令ストリームの追跡（trace）に関する。より詳細には、本発明は、繰返し命令の実行を評価するための、マイクロプロセッサのカウント・レジスタの追跡に関する。
【背景技術】
【０００２】
データ処理システムの性能またはデータ処理システム内部で実行されるアプリケーションの解析において、実行の流れおよびシステム資源の使用を理解することが有益である。命令トレースは、アプリケーション・プログラムまたはシステム・プログラムの実行中にプロセッサによって実行される命令のリストを含むことができる。命令トレースは、性能モデルを作成するために、また、システム動作の一部分を統計的に監視するために解析される。トレース解析の多くの対象のうちには、命令タイプや他のフィールドの動的な使用、アドレス変換パターンならびにメモリ参照パターン、分岐動作ならびに基本ブロック・サイズがある。抽出された統計は、トレースを集める対象となったアーキテクチャ、実装、システム・ソフトウェア、およびアプリケーション・プログラムの特定の組合せを反映し、したがって、これらすべての構成要素の開発者による設計の決定の手引きとして使用することができる。
【０００３】
具体的には、トレースは、様々なレベルの情報を含むことができる。たとえば、アドレス・トレースは、命令およびオペランドへのアクセスに使用されるメモリ・アドレスのシーケンスを含む。命令トレースは、メモリ・アドレスのシーケンスに加え、命令のオペレーション・コードおよびレジスタ指定子を含む。
【０００４】
従来の追跡ツールは、トレースを取得するために、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組合せを使用することができる。ハードウェア側では、多くのプロセッサが、追跡を可能にするモードを含む。現在のプロセッサの焦点となっているのは、選択された分岐命令の検出時に割込みを起こし、選択された分岐命令を追跡する、分岐追跡機能である。どの分岐命令が最も頻繁に選択され、どの分岐が最も頻繁に例外となるかということに関する情報を集めることは、有益な情報である。
【０００５】
追跡ツールでは分岐および例外の追跡が焦点とされているが、他のタイプの命令の実行におけるトレースを集めることが有利であろう。具体的には、繰返しストリング命令など、繰返し命令の実行を監視することが有利であろう。たとえば、命令が要求された回数だけ繰り返されたか、または割込みが繰返しサイクルを停止したかを監視することが有利であろう。繰返し命令を追跡することによって、繰返し命令が実行される速度を監視することができる。
【０００６】
したがって、繰返し命令がソフトウェアの性能に与える影響を判断するために、繰返し命令を監視し検査するハードウェアおよびソフトウェアの追跡ツールを実現することが有利であろう。さらに、繰返し命令および分岐命令の両方を追跡することが有利であろう。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
したがって、上記のことに鑑みて、本発明の目的は、改良されたマイクロプロセッサ機能を提供することである。
【０００８】
本発明の別の目的は、マイクロプロセッサの命令ストリームを追跡する方法、システムおよびプログラムを提供することである。
【０００９】
本発明のさらに別の目的は、繰返し命令の実行を評価するために、マイクロプロセッサの命令ストリームを追跡する方法、システムおよびプログラムを提供することである。
【課題を解決するための手段】
【００１０】
本発明の一態様によると、繰返し命令は、プロセッサ内部で実行される。繰返し命令の最後の実行中にセットされた繰返し命令フラグの検出に応答して、プロセッサ内部で割込みが開始される。プロセッサは、割込み中に、追跡プログラムまたは外部ハードウェアが、プロセッサ内部の記憶装置から繰返し命令用の実行カウントを読み出すことを可能にする。
【００１１】
一実施形態によると、初めて繰返し命令が実行されるとき、ＣＸレジスタ値がプロセッサ内部の繰返しカウント・レジスタにコピーされる。繰返し命令の最後の実行が検出されたとき、割込みが生成される。プロセッサは、追跡プログラムが、ＣＸレジスタの値と繰返しカウント・レジスタの値との差を読み出して、繰返し命令が実行された実際の回数を判定することを可能にする。
【００１２】
別の実施形態によると、複数の繰返し命令の実行回数を格納するために、繰返し命令情報バッファがプロセッサ内部で使用可能である。あるいは、プロセッサが、バッファに入れられた、プロセッサ外部のメモリ位置をポイントすることもできる。初めて繰返し命令が実行されるとき、ＣＸレジスタ値がプロセッサ内部の繰返しカウント・レジスタにコピーされる。繰返し命令の最後の実行が検出されたとき、プロセッサは、現在のＣＸレジスタ値と繰返しカウント・レジスタの値との差を、繰返し命令情報バッファにコピーし、したがって、繰返し命令が実行された実際の回数が格納される。命令情報バッファが満杯になると、割込みがトリガされる。プロセッサは、追跡プログラムが命令情報バッファを読み出すことを可能にする。
【００１３】
さらに別の実施形態によると、プロセッサは、カウンタ・レジスタを有する性能モニタを含む。カウンタ・レジスタは、繰返し発生カウンタを含む。第１の選択肢によると、繰返し発生カウンタは、オーバフローの１つ手前にプログラムされて、繰返し命令の発生をカウントするように設定される。繰返し命令の発生を検出すると、カウンタは増加してオーバフローし、割込みをトリガする。第２の選択肢によると、繰返し発生カウンタは、繰返し命令の最後の実行の発生をカウントするように設定され、最後の実行が起こると、カウンタは増加してオーバフローし、割込みをトリガする。もう１つの繰返し実行カウンタは、繰返し命令を検出すると、繰返し命令の各実行のカウントを開始する。したがって、割込みがトリガされると、プロセッサは、繰返し命令が実行された実際の回数をカウントした繰返し実行カウンタを追跡プログラムが読み出すことを可能にする。
【００１４】
さらに別の実施形態によると、第１の順次繰返し命令が、プロセッサ内で割込みを起こすように、追跡プログラムによって変更される。プロセッサ内での割込みの検出に応答して、繰返し命令が実行された実際の回数を含む記憶装置にアクセスすることによって繰返し命令が追跡される。次いで、繰返し命令は、割込みから戻るように変更される。あるいは、第１の順次繰返し命令を渡す分岐割込みの検出に応答して、繰返し命令が復元され、次の順次繰返し命令が、実行されると割込みを起こすように変更される。
【００１５】
本発明のすべての目的、特徴、および利点は、以下の詳細な説明で明らかになるであろう。
【００１６】
本発明の特徴と考えられる新規な特徴を、添付の特許請求の範囲に記す。ただし、本発明自体、ならびに好ましい使用方法、さらにその目的および利点も、以下の例示的な実施形態の詳細な説明を参照し、添付の図面を併せ読むことによって、最もよく理解されるであろう。
【発明を実施するための最良の形態】
【００１７】
ここで図面に移ると、図１は、本発明を実施することができる、コンピュータ・システムの一実施形態を示す。コンピュータ・システム１０は、バス２２またはコンピュータ・システム１０内部で情報を通信する他の通信装置と、バス２２に結合された、情報を処理するプロセッサ１２など少なくとも１つの処理装置とを含む。バス２２は、好ましくは、待ち時間の短い経路および待ち時間の長い経路を含み、これらの経路は、ブリッジによって接続され、複数のバス・コントローラによってコンピュータ・システム１０内部で制御される。
【００１８】
プロセッサ１２は、ＩＢＭのＰｏｗｅｒＰＣ（商標）などの汎用プロセッサでよく、このようなプロセッサは、通常動作中に、オペレーティング・システム、およびランダム・アクセス・メモリ（ＲＡＭ）１４などの動的記憶装置ならびに読出し専用メモリ（ＲＯＭ）１６などの静的記憶装置に格納されたアプリケーション・ソフトウェアの制御下でデータを処理する。オペレーティング・システムは、好ましくは、グラフィカル・ユーザ・インタフェース（ＧＵＩ）をユーザに提供する。好ましい実施形態では、アプリケーション・ソフトウェアは機械実行可能な命令を含み、この命令は、プロセッサ１２で実行されると、図８、９、１２、１４、１５、１６のフロー図に示す動作、および本明細書で説明する他の動作を実施する。あるいは、本発明のステップは、ステップを実施する配線論理を含む特定のハードウェア構成要素によって実施しても、プログラムされたコンピュータ構成要素と特注のハードウェア構成要素のどの組合せによって実施してもよい。
【００１９】
本発明は、コンピュータ・プログラム製品として提供することができ、こうしたコンピュータ・プログラム製品は、コンピュータ・システム１０を、本発明による処理を実施するようにプログラムするのに使用される機械実行可能な命令を格納した機械可読媒体に組み込まれる。本明細書で使用する「機械可読媒体」という用語は、実行のためにプロセッサ１２またはコンピュータ・システム１０の他の構成要素に命令を提供することに関与するどの媒体も含む。このような媒体は、不揮発性媒体、揮発性媒体、伝送媒体など多くの形をとり得るが、それだけに限定されるものではない。不揮発性媒体の一般的な形には、たとえば、フロッピー（Ｒ）・ディスク、フレキシブル・ディスク、ハード・ディスク、磁気テープまたは他の磁気媒体、コンパクト・ディスクＲＯＭ（ＣＤ−ＲＯＭ）または他の光学媒体、パンチ・カードまたは穿孔パターンを有する他の物理媒体、プログラム可能ＲＯＭ（ＰＲＯＭ）、消去可能ＰＲＯＭ（ＥＰＲＯＭ）、電気的ＥＰＲＯＭ（ＥＥＰＲＯＭ）、フラッシュ・メモリ、他のメモリ・チップまたはカートリッジ、あるいはコンピュータ・システム１０が読み取ることができ、命令の格納に適した他のどのような媒体も含まれる。本実施形態では、不揮発性媒体の一例は大容量記憶装置１８である。揮発性媒体には、ＲＡＭ１４などの動的メモリがある。伝送媒体には、バス２２を備えるワイアを含めて、同軸ケーブル、銅線または光ファイバがある。伝送媒体は、電波通信または赤外線データ通信の間に生成されるような、音響波または光波の形をとることもできる。
【００２０】
さらに、本発明はコンピュータ・プログラム製品としてダウンロードすることもでき、こうしたコンピュータ・プログラム製品において、プログラム命令は、搬送波または他の伝播媒体で実施されるデータ信号を使って、バス２２に結合された通信インタフェース３２へのネットワーク・リンク３４（たとえば、モデム接続またはネットワーク接続）を介してサーバ３９などの遠隔コンピュータから要求側のコンピュータ・システム１０に転送することができる。通信インタフェース３２は、ネットワーク・リンク３４に結合される双方向データ通信を提供し、ネットワーク・リンクは、たとえば、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）に、または図１に示すように、直接、インターネット・サービス・プロバイダ（ＩＳＰ）３７に接続することができる。具体的には、ネットワーク・リンク３４は、１つまたは複数のネットワークに、有線または無線あるいはその両方のネットワーク通信を提供することができる。
【００２１】
ＩＳＰ３７は、インターネット３８または他のネットワークを介してデータ通信サービスを提供する。インターネット３８は、互いに通信するために伝送制御プロトコル（ＴＣＰ）やインターネット・プロトコル（ＩＰ）など特定のプロトコルを使用するネットワークおよびゲートウェイの、世界規模の集合体を指すことができる。ＩＳＰ３７およびインターネット３８はいずれも、デジタル・データ・ストリームを搬送する電気信号、電磁信号、または光信号を使用する。コンピュータ・システム１０との間でデジタル・データを搬送する、様々なネットワークを介する信号、およびネットワーク・リンク３４上にあり通信インタフェース３２を介する信号は、情報を移送する搬送波の例示的な形である。
【００２２】
さらに、バス２２に結合された入出力（Ｉ／Ｏ）コントローラ１１に接続される複数の周辺装置を、コンピュータ・システム１０に追加することができる。たとえば、マイクロホンや他の音声または唇動作取込み装置を介して音声入力を制御するために、また、スピーカや他の音声投射装置を介して音声出力を制御するために、音声入出力装置２８がＩ／Ｏコントローラ１１に接続される。ディスプレイ２４も、視覚的、触覚的、または他のグラフィカルな表示形式を提供するために、Ｉ／Ｏコントローラ１１に接続される。キーボード２６、およびマウス、トラックボール、カーソル方向キーなどのカーソル制御装置３０が、コンピュータ・システム１０へのユーザ入力用インタフェースとして、Ｉ／Ｏコントローラ１１に結合される。本発明の代替実施形態では、さらなる入出力周辺装置を追加することができる。
【００２３】
図１は、プロセッサが機能することができるコンピューティング環境の例を意図したものであり、アーキテクチャ上の限定を意図したものではない。本発明は、いくつかの異なるオペレーティング・システムの下で、様々なコンピューティング・システムや電子装置など、様々なシステムにおいて実行することができる。本発明の一実施形態では、コンピューティング・システムは、ノート型コンピュータ、パームトップ・コンピュータ、携帯情報端末（ＰＤＡ）、電話などの可搬型コンピューティング・システム、または電話サービス、拡張電話サービス、メッセージング・サービス、情報サービスを提供する通信機能をやはり組み込むことができる他の電子コンピューティング・システムである。ただし、コンピューティング・システムは、たとえば、デスクトップ・コンピュータ、ネットワーク・コンピュータ、中型（midrange）コンピュータ、サーバ・システム、メインフレーム・コンピュータでもよい。したがって、通常、本発明は、コンピュータ・システムがアクセス可能な記憶装置のデータ操作などの計算タスクを実施するコンピュータ・システムにおいて実行される。さらに、コンピュータ・システムは、少なくとも１つの出力装置と少なくとも１つの入力装置を含むことができる。
【００２４】
ここで図２を参照すると、図１に示すコンピュータ・システムなどの計算機システム内部で使用することができる、プロセッサおよびメモリ・サブシステム内の一般的な構造のブロック図が示してある。階層メモリ１１０は、プロセッサ１２によってアクセス可能なメモリ階層のタイプの例を示す。この例において、階層メモリ１１０は、レベル２キャッシュ１１２、ＲＡＭ１４、不揮発性メモリ１１６を備える。レベル２キャッシュ１１２は、当技術分野で公知のやり方でＲＡＭ１４に格納することができるデータおよび命令用の高速アクセス・キャッシュを提供する。多くのタイプのキャッシュ・アーキテクチャを実装できることが理解されよう。ＲＡＭ１４は、データおよび命令用のメイン・メモリ記憶装置を提供する。また、ＲＡＭ１４は、図１に示す大容量記憶装置１８などの不揮発性メモリ１１６に格納されたデータおよび命令用のキャッシュを提供することもできる。
【００２５】
プロセッサ１２は、単一のサイクルにおいて複数の命令を実行することが可能な、パイプライン式のプロセッサである。他のタイプのプロセッサも実装できることが理解されよう。データ処理システムの動作中、命令およびデータは、階層メモリ１１０に格納される。データおよび命令は、バス２２によって、階層メモリからプロセッサに転送することができる。バス２２は、共通データ経路または独立データ経路を含むことができる。いずれの場合でも、プロセッサ１２は、プロセッサ１２の内部で、命令キャッシュ１２２およびデータ・キャッシュ１２４に関連する別々の命令転送経路およびデータ転送経路を提供することができる。命令キャッシュ１２２は、プロセッサ内での実行のためにキャッシュされた命令を含む。一部の命令は、データ・キャッシュ１２４を介して、階層メモリ１１０に、またはそこからデータを転送することができる。他の命令は、汎用データ・レジスタ１２６にロード済みのデータに作用することができる。汎用データ・レジスタ１２６は、通常、累算レジスタ（ＡＸ）、基本レジスタ（ＢＸ）、カウント・レジスタ（ＣＸ）、データ・レジスタ（ＤＸ）など、複数のレジスタを含む。図には、本発明の実装に関係する、カウント・レジスタ（ＣＸ）１３９を特に示してある。さらに、一部の命令は、汎用制御レジスタ１２８に関連して、制御動作を実施することができる。
【００２６】
命令取出しユニット１３０は、必要に応じて、命令キャッシュ１２２から命令を検索し、命令キャッシュは、必要に応じて、階層メモリ１１０から命令を検索する。命令復号ユニット１３２は、命令を復号して、命令タイプ、発信レジスタ、宛先レジスタなど、命令に関する基本情報を判定する。
【００２７】
この例では、プロセッサ１２は順不同実行のプロセッサである。他の実行タイプのプロセッサも実装できることが理解されよう。順序付けユニット１３４は、復号された情報を使用して、実行のために命令をスケジューリングする。完了ユニット１３６は、命令を追跡するために、スケジューリングされた命令に関する情報を格納し検索するためのデータおよび制御構造を有することができる。実行ユニット１３８によって命令が実行されると、実行中の命令および実行された命令に関する情報が完了ユニット１３６に集められる。実行ユニット１３８は、複数の実行サブユニットを使用することができる。命令が完了すると、完了ユニット１３６が、命令の実行結果を反映させる（commit）。すなわち、命令の宛先レジスタが後続の命令にとって使用可能となるか、または宛先レジスタの値が様々な制御フラグの使用によって有効と指示される。後続の命令は、そのソース・データが使用可能になるとすぐに、適切な実行サブユニットに発行することができる。
【００２８】
さらに、この例では、プロセッサ１２を、投機的実行プロセッサとして示してある。一般に、分岐タイプの命令がその命令の流れを条件付きでまたは無条件に変えるまで、命令は順次取り出されて完了される。命令復号ユニット１３２が条件付き分岐動作を認識した後、順序付けユニット１３４は、条件の結果を判定するためのデータがまだ利用不可能であると認識することもある。この場合、命令取出しユニット１３０は、分岐予測ユニット１４０にある１つまたは複数の分岐予測機構を使用して、条件の結果を予測することができる。次いで、条件の結果を判定することができるまで、制御が投機的に変更される。プロセッサの能力に応じて、複数の予測経路をとることができ、不必要な分岐は実行パイプラインから消去される。
【００２９】
具体的には、この例では、命令復号ユニット１３２が繰返し命令動作を認識すると、順序付けユニット１３４が実行のためにその命令をスケジューリングする。繰返し命令動作は、通常、「ＲＥＰ」接頭部で始まる命令によって識別される。命令が繰り返される回数「ｎ」は、ＣＸレジスタ１３９にロードされる。本発明では、ＣＸレジスタ１３９は、繰返し命令が実行される度に減分されるカウント・レジスタである。したがって、実行ユニット１３８は、命令を「ｎ」回、すなわち各実行ごとにＣＸレジスタ１３９を減分して、条件が満たされるまで繰り返す。本発明は、指定された値まで、繰返し命令の実行が起こる度に増分されるＣＸレジスタでも実装できることに留意されたい。さらに、本発明は、繰返し命令の実行が起こると、指定された値まで減分されるＣＸレジスタでも実装することができる。
【００３０】
割込み制御ユニット１４２は、命令処理中に起こるイベントを制御し、このイベントが起こると、ソフトウェアまたは外部ハードウェアによって提供することができる割込み処理ルーチンに実行フロー制御が渡される。割込み時点でのプロセッサの状態が、一定量、プロセッサによって自動的に保存される。割込み処理の完了後、保存されたプロセッサ状態を復元するために、割込みからの戻り（ＲＦＩ）を実行することができ、同時に、プロセッサ１２は、割込み命令の実行を続けることができる。割込み制御ユニット１４２は、割込みの処理を助ける様々なデータ・レジスタおよび制御レジスタを備えることができる。
【００３１】
命令が実行されるとき、キャッシュ・アクセスや変換索引バッファ（ＴＬＢ）ミスなどのイベントがプロセッサで起こる。性能モニタ１４４はこうしたイベントを監視して、命令を処理した結果として起こるイベントのカウントを累算する。性能モニタ１４４は、命令の実行およびデータの格納に関する情報を提供するための、ソフトウェア・アクセス可能な機構である。すなわち、そのカウンタ・レジスタおよび制御レジスタは、ソフトウェアの制御下でその目的のための特別な命令を介して読み出すことも書き込むこともできる。性能モニタ１４４は、複数の性能監視カウンタ（ＰＭＣ）、あるいは１つまたは複数の制御レジスタ１４８の制御下でイベントをカウントする複数のカウンタ・レジスタ１４６を含む。制御レジスタは、通常、イベント／信号の選択および累算を可能にするビット・フィールドに区分される。イベントの許容可能な組合せを選択することにより、複数のカウンタが並行して動作するようになる。すなわち、性能モニタは、命令パイプラインの諸段階での性能を監視する機構として使用することができる。
【００３２】
図２のハードウェアはシステムの実装によって変わり得ることが、当業者には理解されよう。図示した例は、本発明に関するアーキテクチャ上の限定を意図するものではない。
【００３３】
ここで図３を参照すると、本発明の方法、システム、およびプログラムによる、コンピュータ・システム内部のソフトウェア構成要素を示し、ソフトウェアの機能層の間の論理関係を示すブロック図が示してある。コンピューティング・システムのハードウェアは、レベル５０にある。オペレーティング・システムのレベル５２にあるカーネルは、ハードウェアへのインタフェースとして働く、コアとなる１組の機能を提供する。Ｉ／Ｏ機能およびドライバはレベル５４にあり、メモリ管理機能およびメモリ関連機能はレベル５６にある。レベル５８にあるユーザ・アプリケーションおよび他のプログラムは、全般的なデータ処理を実施するために、他の層にある機能にアクセスする。レベル５２、５４、５６は、全体として、特定の装置のオペレーティング・システムとみなすことができる。オペレーティング・システムが拡張可能であるとすると、ユーザ・アプリケーションに必要な様々な追加機能をサポートするために、システムに追加された新しい装置のサポートのためのデバイス・ドライバなどのソフトウェア・ドライバをオペレーティング・システムに追加することができる。
【００３４】
本発明は、様々なハードウェア・プラットフォームおよび様々なソフトウェア環境で実装することができる。単一のコンピューティング・システム内部で、複数のオペレーティング・システムを実行することができる。
【００３５】
ここで図４を参照すると、本発明の方法、システム、およびプログラムによる、追跡機構によって解析されるデータ処理システム内のソフトウェア構成要素間の関係を示すブロック図が示してある。追跡プログラム１５０は、アプリケーション・プログラム１５１の解析に使用される割込み処理ルーチンを含む。追跡プログラム１５０は、解析されているデータ処理システム上の割込みのサブセットを処理するように構成することができる。たとえば、選択分岐トラップまたは繰返し命令割込みから割込みが起こると、追跡プログラム１５０は、様々な追跡機能、プロファイリング機能、またはデバッグ機能を機能的に実施することができる。以下では、追跡、プロファイリング、デバッグという用語は、互いに交換可能に使用する。さらに、追跡プログラム１５０は、フックの実行が起こったとき、データを記録するのに使用することができる。フックとは、アプリケーションのプロセスの特定の場所にある、専用のコードである。トレース・フックは、通常、デバッグ、性能解析、または機能の強化の目的で挿入される。
【００３６】
通常、追跡プログラム１５０は、様々なタイプの情報のトレース・データを生成し、このトレース・データは、実行または割込みを処理する間、入出力が必要とされないように、固定されたトレース・データ・バッファに書き込まれる。その後、固定されたトレース・データ・バッファに書き込まれたデータは、後処理のためにデータ・ファイルに書き込まれる。本発明では、追跡プログラム１５０は、繰返し命令、ならびに選択された分岐命令、システム性能に影響を与える他のタイプの命令の実行のトレース・データを生成する。
【００３７】
追跡プログラム１５０およびアプリケーション・プログラム１５１はどちらも、システム・レベルの呼出し、ユーティリティ、デバイス・ドライバを備えかつサポートするカーネル１５２を使用する。実装形態によっては、追跡プログラム１５０は、アプリケーション・レベルの優先度をもつレベル５８で実行されるモジュールと、信頼できるシステム・レベルの優先度をもつレベル５２で実行される他のモジュールとを有することができる。具体的には、追跡プログラム１５０、あるいは例外または割込みを処理可能な他のドライバは、信頼できるコードによって（特権状態で）処理される。
【００３８】
本発明の命令追跡機能は、カーネル、カーネル・ドライバ、オペレーティング・システム・モジュール、追跡プロセス、追跡プログラムなど、様々な状況で使用できることに留意されたい。これ以降、「追跡プログラム」と「追跡ソフトウェア」という用語は、一般的なカーネル機能、およびアプリケーション・プログラムによって生成される処理と区別するために使用する。
【００３９】
ここで図５を参照すると、本発明の方法、システム、およびプログラムによる、追跡プログラムの典型的な諸フェーズを示す、高レベルの論理フロー図が示してある。最初に、初期化段階１５５で、追跡が開始される時点でのコンピュータ・システムの状態を取り込む。このトレース初期化データは、存在するすべてのスレッド、ロードされたすべてのクラス、およびロードされたクラスのためのすべてのメソッドを識別するトレース記録を含むことができる。続いて生成されるトレース・データは、スレッド切換え、割込み、クラスのロードおよびアップロード、ＪＩＴコンパイラでコンパイルされたメソッドを含むことができる。トレース出力内部に、いつ起動情報がすべて書き込まれたかを示す特別な記録を書き込むことができる。次に、プロファイリング・フェーズ１５６で、記録を追跡し、その記録をトレース・バッファまたはトレース・ファイルに書き込む。メモリ制約条件に従って、生成されたトレース出力は、アナライザが特定のプログラムをプロファイリングまたはデバッグするのに必要なだけ、できるだけ長く、できるだけ詳細にすることができる。
【００４０】
最後に、後処理フェーズ１５７で、後処理のために、バッファに集められたデータをファイルに送る。後処理中、各トレース記録は、トレース記録内部の情報のタイプに従って処理される。すべてのトレース記録が処理された後、情報は通常、レポートの形で出力するためにフォーマットされる。トレース出力はサーバに送られ、サーバは、計算機システムにおける処理からのトレース出力を解析する。もちろん、利用可能な資源または他の考慮事項によっては、後処理は、計算機システム上で実施しても、追跡が行われている間に実施してもよい。
【００４１】
具体的には、追跡の初期化中、ロードされたすべてのコードについて、アドレス、実行ファイル（たとえばアプリケーション）名、および他の適切な情報が識別される。次いで、追跡プログラムは、追跡するアドレスを実行ファイルにマッピングし、それによって、アドレスをコード内部の命令またはコード用の記号情報にマッピングすることが可能になる。コードが動的にロードされるとき、この情報も識別される。具体的には、コードが、後処理中にディスクから読み出すことができる実行ファイル（またはディスクから読み出される記号情報）の一部ではない場合、そのコードのロードされたアドレスおよび長さが、後続の後処理のためにコードを取り込むのに使用される。この機能は、Ｊａｖａ（Ｒ）仮想マシン・プロファイリング・インタフェース（ＪＶＭＰＩ）を使用して、多くのＪａｖａ（Ｒ）プロファイラによってサポートされる。
【００４２】
初期化フェーズ中にアドレス、実行ファイル名、および他の適切な情報が識別されるので、次のプロファイリング・フェーズ中には、実行されるコードの処理およびアドレスを記録するだけでよい。初期化フェーズ中に識別された情報、およびプロファイリング・フェーズ中に記録された処理およびアドレスに基づき、後処理フェーズでは、記号マッピングを使用して、実行されている関数およびメソッドの名前を識別し、どのコードが実行されたかを判定する。
【００４３】
ここで図６を参照すると、本発明の方法、システム、およびプログラムによる、繰返し命令に関する実行情報を明らかにするのに使用することができる、プロセッサ内部の繰返し命令レジスタを示すブロック図が示してある。図に示すように、プロセッサ１８０は、プロセッサ１２と類似しており、特殊な繰返しカウント・レジスタ１８２を含む。繰返しカウント・レジスタ１８２は、繰返し命令のスケジューリングされた繰返し回数を示すＣＸの値のコピーを含む。繰返しカウント・レジスタ１８２は、適切であれば、プロセッサ１８０内部の様々なユニット内部に物理的に配置することができる。さらに、繰返しカウント・レジスタ１８２は、ＣＸレジスタとして実装することもできる。繰返しカウント・レジスタ１８２は、専用レジスタである必要はないことに留意されたい。すなわち、プロセッサ１８０は、最も最近に実行された命令のコピーを、汎用レジスタ、性能監視レジスタ、あるいは実装されたプロセッサ・アーキテクチャ用に構成でき、またはそのアーキテクチャに適した他のレジスタに引き渡すことができる。さらに、繰返しカウント・レジスタは、選択分岐命令の分岐先および分岐元のアドレスも格納するために共用できることに留意されたい。
【００４４】
ここで図７を参照すると、本発明の方法、システム、およびプログラムによる、繰返し命令の追跡が可能なプロセッサを示すブロック図が示してある。図に示すように、プロセッサ１９０は、図２で説明したように、割込み制御ユニット１９２を含む。割込み制御ユニットは、繰返しカウント・レジスタ１８２を含む。さらに、割込み制御ユニット１９２は、制御レジスタ１９６を含む。制御レジスタ１９６は、モード、条件、またはプロセッサ内部の他のいくつかのタイプの動作状態を示す必要に応じてセットまたはクリアされる、１つまたは複数のビットを使用することができる。「フラグ」という用語は、一般に、１ビットのフィールドを示すのに使用される。この例では割込み制御ユニット１９２内部の構造として示したが、制御レジスタ１９６は、プロセッサ内部の複数の位置にあってよい。
【００４５】
制御レジスタ１９６は、繰返しイネーブル（ＲＥ）フラグ１９８を含む。ＲＥフラグ１９８は、ソフトウェアで指定可能なフラグであり、繰返し命令が検出されたときに割込みをトリガする。図４および５に示した追跡プログラム、より詳細には繰返し割込みハンドラ２００は、繰返し命令が検出されたときまたは繰返し命令が実行を完了したときにプロセッサを停止するように、ＲＥフラグ１９８をセットすることができる。
【００４６】
さらに、制御レジスタ１９６は、単一ステップ・イネーブル（ＳＳＥ）フラグ１９９を含む。ＳＳＥフラグ１９９も、ソフトウェアで指定可能なフラグであり、セットされると、命令の実行が成功した後に単一ステップのトラップを起こさせる。さらに、制御レジスタ１９６は、選択分岐イネーブル（ＴＢＥ）フラグ１９７を含み、このフラグは、セットされると、分岐タイプの命令がうまく完了したときに選択分岐トラップを起こさせる。制御レジスタ１９６内部では他のフラグも必要になり得ることが理解されよう。たとえば、制御レジスタ１９６は、割込みイネーブル（ＩＥ）フラグなどのフラグも含むことができ、このフラグは、割込みが処理されるかどうか、すなわち外部割込みによってプロセッサが制御を外部割込みハンドラに移すかどうかを示す。さらに、繰返し命令ハンドラおよび分岐選択割込みハンドラは、割込みの前にどのタイプの命令が起こったかを検出してそのタイプの命令の機能を実施する、単一ハンドラとして機能し得ることに留意されたい。
【００４７】
第１の選択肢では、ＲＥフラグ１９８がセットされて繰返し命令が検出されると、割込み制御ユニット１９２が割込みを生成する（トラップ・モード）。追跡プログラム、すなわち繰返し割込みハンドラ２００が、繰返し命令が実行されるよう設定された回数を示すＣＸレジスタなどのマシンの状態情報を集める。さらに、繰返し割込みハンドラ２００は、繰返し命令の実行をＣＸレジスタで示される回数だけ繰り返して追跡するように、ＲＥフラグ１９８をセットすることができる。
【００４８】
第２の選択肢では、ＲＥフラグ１９８がセットされて繰返し命令が検出されると、割込み制御ユニット１９２は、繰返し命令の最後の実行までプロセッサに割り込まない。ただし、繰返し命令が初めて実行されるとき、ＣＸレジスタは繰返しカウント・レジスタ１８２にコピーされる。繰返し命令の最後の実行が検出されるとき、割込み制御ユニット１９２は割込みを生成する。繰返し命令ハンドラは、ＣＸレジスタの値と繰返しカウント・レジスタの値の差を読み出す。
【００４９】
第２の選択肢は、繰返し命令が起こった場合にそれだけを追跡するという利点をもたらす。さらに、一部の繰返し命令は条件付きである。こうした命令を使用するには、条件が検出されるまで命令を何度も繰り返すことができるように、ＣＸレジスタを最も高い値に設定することが必要となり得る。条件付き繰返し命令の場合、繰返し命令を最後の実行の後で追跡することにより、より正確なトレースが提供される。
【００５０】
ここで図８を参照すると、プロセッサ内部での繰返しイネーブル・フラグの使用のための、処理およびプログラムを示す高レベルの論理フロー図が示してある。図に示すように、処理はブロック２１０で始まり、その後ブロック２１２に進む。ブロック２１２で、命令を実行する。次に、ブロック２１６で、ＲＥフラグがセットされているかどうか判定する。ＲＥフラグがセットされていない場合、処理は終わる。ＲＥフラグがセットされている場合、処理はブロック２１４に移る。ブロック２１４で、実行される命令が繰返し命令の最初の実行であるかどうか判定する。命令が繰返し命令の最初の実行ではない場合、処理は終わる。命令が繰返し命令の最初の実行である場合、処理はブロック２１８に移る。ブロック２１８で、繰返しカウント・レジスタにＣＸレジスタの値を書き込む。次に、ブロック２２０で、トレース割込みを生成し、処理は終わる。命令を実行した後、命令が繰返し命令ではない場合は、命令が選択分岐命令であるか他のタイプの特殊な命令であるかが判定される可能性があることに留意されたい。命令が選択分岐命令であってＴＢＥフラグがセットされていれば、処理は選択分岐命令を追跡するための割込みトレースを生成する。
【００５１】
ここで図９を参照すると、完了した繰返し命令を追跡するために、プロセッサ内部で繰返しイネーブル・フラグを使用するための、処理およびプログラムを示す高レベルの論理フロー図が示してある。図に示すように、処理はブロック２３０で始まり、その後ブロック２３２に進む。ブロック２３２で、命令を実行する。次に、ブロック２４０で、ＲＥフラグがセットされているかどうか判定する。ＲＥフラグがセットされていない場合、処理は終わる。ＲＥフラグがセットされている場合、処理はブロック２３４に移る。ブロック２３４で、実行された命令が繰返し命令であるかどうか判定する。命令が繰返し命令ではない場合、処理は終わる。命令が繰返し命令の場合、処理はブロック２３６に移る。ブロック２３６で、命令が繰返し命令の最初の実行であるかどうか判定する。命令が最初の実行の場合、処理はブロック２４２に移る。ブロック２４２で、繰返しカウント・レジスタにＣＸレジスタの値を書き込み、処理はブロック２３２に戻る。
【００５２】
ブロック２３６に戻ると、命令が最初の実行ではない場合、最後の実行であるかどうか判定するために、処理はブロック２３８に移る。最後の実行ではない場合、処理はブロック２３２に移り、最後の実行である場合、処理はブロック２４４に移る。ブロック２４４で、トレース割込みを生成し、処理は終わる。追跡プログラムは、好ましくは、繰返し命令が実行された実際の回数を記録するために、繰返しカウント・レジスタの値とＣＸレジスタの値の差を読み出す。
【００５３】
ここで図１０を参照すると、本発明の方法、システム、およびプログラムによる、繰返し命令の追跡および格納が可能なプロセッサを示すブロック図が示してある。図に示すように、プロセッサ２５０は、図７に示す繰返しカウント・レジスタ１８２および制御レジスタ１９６を有する割込み制御ユニット２５２を含む。さらに、割込み制御ユニット２５２は、１つの繰返し命令だけではなく複数の繰返し命令のカウントを格納する、繰返し命令情報バッファ２５９を含む。命令情報バッファ２５９は、１組の専用レジスタでもよく、既存のレジスタに組み込んでもよい。重要なのは、命令情報バッファ２５９が追跡プログラムによって読み出しできることである。命令情報バッファ２５９は繰返し命令のＣＸ値、ならびに選択分岐命令の分岐元および分岐先アドレスの書込みに共用できることに留意されたい。たとえば、命令バッファ中の項目２５３は、繰返し命令および選択分岐命令の情報を含む。繰返し命令と選択分岐命令の項目は、マスキング、またはバッファ中のデータを区別するために使用可能な他の技術によって区別することができる。
【００５４】
プロセッサは、ＣＸレジスタ値のコピーを命令情報バッファ２５９に置く。ＲＥフラグ１９８およびＴＢＥフラグ１９７は、命令情報バッファ２５９の使用を認めるのに使用することができる。ＲＥフラグがセットされている場合、プロセッサは、（繰返し命令のカウントを示す）ＣＸレジスタ値を繰返し命令情報バッファに格納すべきである。さらに、ＴＢＥフラグ１９７がセットされている場合、プロセッサは、選択分岐命令の分岐元および分岐先アドレスを格納すべきである。この例では、命令情報バッファ２５９は循環方式で充填される。先頭ポインタ２５８および終端ポインタ２５６は、命令情報バッファ２５９の最初および最後の項目をポイントするのに使用される。
【００５５】
第１の選択肢では、ＲＥフラグ１９８がセットされているときに最初の繰返し命令が検出されると、ＣＸレジスタの値が命令情報バッファ２５９にコピーされる。命令情報バッファ２５９は、次いで、少なくとも１度繰り返される各繰返し命令に対して期待されるカウントを含む。
【００５６】
第２の選択肢では、ＲＥフラグ１９８がセットされているときに繰返し命令の最初の実行が検出されると、ＣＸレジスタ値を繰返しカウント・レジスタ１８２にコピーすることができる。次いで、繰返し命令の最後の実行が検出されると、プロセッサは、繰返しカウント・レジスタ１８２の元のＣＸレジスタ値と最後の命令を実行した後のＣＸレジスタ値との差をコピーし、したがって、繰返し命令が実行された実際の回数が命令情報バッファ２５９に格納される。
【００５７】
バッファのオーバフローを防止するために、ＲＥ満杯フラグ２５４が、命令情報バッファ２５９に関連付けられる。命令情報バッファ２５９が満杯になると、ＲＥ満杯フラグ２５４がセットされて割込みを生成する。あるいは、他のタイプのフラグで割込みを起こすこともできる。たとえば、選択分岐命令に応答してＴＢＥフラグ１９７がセットされている場合、命令情報バッファ２５９を空にするための割込みを開始することができる。
【００５８】
割込みに応答して、命令情報バッファ２５９を空にしようと試みて、繰返し割込みハンドラ２００などの追跡プログラムが、プロセッサ２５０によって呼び出される。繰返し割込みハンドラ２００は、命令情報バッファ２５９を空にして、その内容を別のメモリ位置に移すよう制御する。バッファ内の情報の移動が終わると、繰返し割込みハンドラ２００は、制御をプロセッサ２５０に戻すために割込みからの戻り（ＲＦＩ）を送り、この時点で、プロセッサ２５０は先頭ポインタ２５８および終端ポインタ２５６をリセットする。
【００５９】
ここで図１１を参照すると、本発明の方法、システム、およびプログラムによる、繰返し命令を追跡してプロセッサの外部にあるメモリに格納することが可能なプロセッサを示すブロック図が示してある。プロセッサ２６０は、命令情報バッファの代わりに繰返し命令情報バッファ・ポインタ２６９を使用する点を除いて、プロセッサ２５０と同様である。プロセッサ２６０内部のバッファのサイズは、プロセッサ２６０外部のメモリで使用可能な記憶領域と比較すると、限られている。したがって、繰返し命令バッファ・ポインタ２６９は、命令情報バッファがある、プロセッサ外部のメモリ中の位置をポイントする。命令情報バッファは選択分岐命令の格納にも使用できることに留意されたい。さらに、別々の選択分岐命令情報バッファを指す別々の選択分岐命令情報バッファ・ポインタを実装できることに留意されたい。
【００６０】
プロセッサは、適切であれば、ＣＸレジスタ値のコピーを、繰返し命令バッファ・ポインタ２６９によってポイントされる命令情報バッファに書き込む。あるいは、プロセッサは、ＣＸレジスタ値と繰返しカウント・レジスタ１８２に格納された値との差を、繰返し命令バッファ・ポインタ２６９によってポイントされる命令情報バッファに書き込む。命令情報バッファ（ＩＢ）のサイズは、ＩＢサイズ・レジスタ２６８に保持される。次の未使用項目オフセット・バッファ・インディケータは、ネクスト・レジスタ２６６に保持される。満杯フラグ２６４は、繰返し命令情報バッファが満杯になるとセットされて、繰返し割込みハンドラ２００が命令情報バッファのトレース・バッファ位置への格納を制御するための、割込み呼出しを起こす。
【００６１】
ここで図１２を参照すると、バッファ内の繰返し命令カウントを追跡するために、繰返しイネーブル・フラグを使用する処理およびプログラムを示す高レベルの論理フロー図が示してある。図に示すように、処理はブロック２７０で始まり、その後ブロック２７２に進む。ブロック２７２で、命令を実行する。次に、ブロック２７６で、ＲＥフラグがセットされているかどうか判定する。ＲＥフラグがセットされている場合、処理はブロック２７４に移り、セットされていない場合、処理はブロック２８６に移る。ブロック２７４で、実行された命令が繰返し命令の最初の実行であるかどうか判定する。実行された命令が繰返し命令の最初の実行である場合、処理はブロック２７８に移り、最初の実行ではない場合、処理は終わる。ブロック２７８で、命令情報バッファにＣＸレジスタ・カウントのコピーを書き込む。あるいは、ＣＸレジスタ・カウントのコピーを、繰返し命令情報バッファ・ポインタによってポイントされる命令情報バッファに書き込んでもよい。あるいは、繰返し命令の最初の実行が検出されるとき、ＣＸレジスタの値を繰返しカウント・レジスタに格納してもよい。次いで、繰返し命令の最後の実行が検出されるとき、繰返しカウント・レジスタに格納されたＣＸレジスタの値とＣＸレジスタの現在の値の差が命令情報バッファに格納される。
【００６２】
次に、ブロック２８０で、命令情報バッファが満杯かどうか判定する。命令情報バッファが満杯ではない場合、終端ポインタが増分されて処理は終わり、満杯の場合、処理はブロック２８２に移る。ブロック２８２で、満杯フラグをセットする。次に、ブロック２８４で、トレース割込みを生成し、処理は終わる。
【００６３】
処理の開始ステップに戻ると、ブロック２８６で、ＴＢＥフラグがセットされているかどうか判定する。ＴＢＥフラグがセットされている場合、処理はブロック２８５に移り、セットされていない場合、処理は終わる。ブロック２８５で、分岐が選択されたかどうか判定する。分岐が選択されていない場合、処理は終わる。分岐が選択されている場合、処理はブロック２８７に移る。ブロック２８７で、選択分岐記録のマークがつけられた命令情報バッファに分岐元および分岐先アドレスをコピーし、処理はブロック２８０に移る。
【００６４】
ここで図１３を参照すると、本発明の方法、システム、およびプログラムによる、繰返し命令の追跡を制御することが可能なプロセッサを示すブロック図が示してある。図に示すように、プロセッサ２９０は、通常プロセッサ内部にある他の構成要素に加えて、性能モニタ２９２を含む。性能モニタ２９２は、カウンタ・レジスタ２９４および制御レジスタ１９６を含む。
【００６５】
カウンタ・レジスタ２９４は、繰返し発生カウンタ２９６を含む。一選択肢によると、繰返し発生カウンタ２９６は、繰返し命令の発生をカウントするように設定される。カウンタは、オーバフローの１つ手前にプログラムされる。繰返し命令の発生を検出すると、カウンタは増加してオーバフローし、割込みをトリガする。割込みによって、繰返し割込みハンドラがＣＸレジスタの値などの命令ストリームを追跡するために呼び出される。ＣＸレジスタの値は、繰返し命令の実行がスケジューリングされている回数を示す。
【００６６】
さらに、カウンタ・レジスタ２９４は、繰返し実行カウンタ２９８を含む。第２の選択肢によると、繰返し発生カウンタ２９６は、繰返し命令の発生の完了をカウントするように設定される。繰返し実行カウンタ２９８は、１つの繰返し命令が実際に実行される回数をカウントするように設定される。最初の繰返し命令を検出すると、繰返し実行カウンタ２９８は、繰返し命令の実行回数のカウントを開始する。繰返し命令の完了を検出すると、繰返し発生カウンタ２９６は１だけ増分されてオーバフローを起こし、それによって割込みがトリガされる。割込みによって、繰返し割込みハンドラ２００が呼び出され、繰返し実行カウンタ２９８の値が読み出される。具体的には、繰返し実行カウンタ２９８から読み出される値は、繰返し命令が実際に実行された回数である。カウンタ・レジスタ２９４は、割込みが生成される前に複数の繰返し命令の実行回数をカウントすることができる、追加のカウンタを含み得ることに留意されたい。
【００６７】
ここで図１４を参照すると、性能監視カウンタを使用して、繰返し命令を追跡するために、割込みを制御する処理およびプログラムを示す高レベルの論理フロー図が示してある。図に示すように、処理はブロック３００で始まり、その後ブロック３０２に進む。ブロック３０２で、実行された命令を検出する。次に、ブロック３０６で、ＲＥフラグがセットされているかどうか判定する。ＲＥフラグがセットされている場合、処理はブロック３０４に移り、セットされていない場合、処理は終わる。ブロック３０４で、実行された命令が繰返し命令の最初の実行であるかどうか判定する。実行された命令が繰返し命令の最初の実行の場合、処理はブロック３０８に移り、最初の実行ではない場合、処理は終わる。ブロック３０８で、繰返し発生カウンタを増分させる。次に、ブロック３１０で、繰返し発生カウンタがオーバフローしたかどうか判定する。繰返し発生カウンタがオーバフローした場合、処理はブロック３１２に移り、オーバフローしない場合、処理は終わる。ブロック３１２で、トレース割込みを生成し、処理は終わる。
【００６８】
ここで図１５を参照すると、複数の性能監視カウンタを介して、繰返し命令を追跡するために、割込みを制御する処理およびプログラムを示す高レベルの論理フロー図が示してある。図に示すように、処理はブロック３２０で始まり、その後ブロック３２２に進む。ブロック３２２で、実行された命令を検出する。ブロック３２６で、ＲＥフラグがセットされているかどうか判定する。ＲＥフラグがセットされている場合、処理はブロック３２４に移り、セットされていない場合、処理は終わる。次に、ブロック３２４で、実行された命令が繰返し命令の最初の実行であるかどうか判定する。実行された命令が繰返し命令の最初の実行の場合、処理はブロック３２８に移り、最初の実行ではない場合、処理は終わる。ブロック３２８で、繰返し実行カウンタを増分させる。次に、ブロック３３０で、実行された命令を検出する。続いて、ブロック３３２で、実行された命令が繰返し命令の最後の実行であるかどうか判定する。実行された命令が繰返し命令の最後の実行である場合、処理はブロック３３４に移り、最後の実行ではない場合、オーバライドな割込み命令が検出されない限り処理はブロック３２８に移る。ブロック３３４で、繰返し実行カウンタを増分させる。次に、ブロック３３６で、繰返し発生カウンタを増分させる。ブロック３３８で、繰返し発生カウンタがオーバフローしたかどうか判定する。繰返し発生カウンタがオーバフローした場合、処理はブロック３４０に移り、オーバフローしていない場合、処理は終わる。ブロック３４０で、トレース割込みを生成し、処理は終わる。
【００６９】
ここで図１６を参照すると、アプリケーション中で、一度に１つの繰返し命令にトレース・フックを挿入する処理およびプログラムを示す高レベルの論理フロー図が示してある。処理およびプログラムは、繰返し割込みハンドラなどの追跡プログラムによって実施することができる。処理は、有利には、一度に１つの繰返し命令に割込みフックを挿入する。図に示すように、処理はブロック３５０で始まり、その後ブロック３５１に進む。ブロック３５１で、最初の順次繰返し命令について、（割込みを引き起こす）例外に対処するようにオペレーション・コードを変更する。次に、ブロック３５２で、変更された繰返し命令をプログラムが渡すようにさせる選択分岐割込みが検出されたかどうか判定する。変更された繰返し命令を渡す選択分岐命令が検出された場合、処理はブロック３５４に移る。ブロック３５４で、直前の変更された繰返し命令のオペレーション・コードを復元する。次に、ブロック３５６で、次の順次繰返し命令のオペレーション・コードを、割込みを起こすように変更し、処理はブロック３５２に戻る。
【００７０】
ブロック３５２に戻ると、選択分岐割込みが検出されない場合、処理はブロック３５８に移る。ブロック３５８で、変更された繰返し命令に対するトラップが検出されたかどうか判定する。トラップが検出されない場合、ブロック３６４で、処理は、アプリケーションの最後に到達したかどうか判定し、アプリケーションの最後に到達していない場合、ブロック３５２に戻る。トラップが検出された場合、処理は、ブロック３６０に移って、ＣＸレジスタ、および命令ストリームの他の部分をトレース・バッファに読み出す。次に、ブロック３６２で、割込みからの戻りを引き起こすために繰返し命令のオペレーション・コードを復元し、処理はブロック３５６に移る。
【００７１】
本発明を、完全に機能するデータ処理システムの状況で説明したことに留意されたい。本発明の処理は、コンピュータ可読な命令媒体など様々な形で配布できること、および、本発明が、配布の実行に実際に使用される信号伝達媒体のタイプに関わらず、等しく適用されることが当業者には理解されよう。コンピュータ可読媒体の例として、フロッピー（Ｒ）・ディスク、ハード・ディスク・ドライブ、ＲＡＭ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなどの記録可能なタイプの媒体や、デジタルおよびアナログ通信リンク、無線周波数伝送や光波伝送といった伝送形体を使用した有線または無線通信リンクなどの伝送タイプの媒体がある。コンピュータ可読媒体は、あるデータ処理システムで実際に使用する場合に復号される、符号化されたフォーマットの形をとることができる。
【００７２】
本発明を、好ましい実施形態に関して具体的に示し説明したが、本発明の精神および範囲から逸脱することなく、本発明の形式および細部に様々な変更を加えることができることが当業者には理解されよう。
【００７３】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００７４】
（１）繰返し命令の追跡を可能にする方法であって、
プロセッサ内部で繰返し命令を実行すること、
前記繰返し命令の最後の実行中にセットされた繰返し命令フラグの検出に応答して、前記プロセッサ内部で割込みを開始すること、および
前記割込み中に、前記プロセッサ内部の記憶装置からの前記繰返し命令用の実行カウントの読出しを可能にすることを含む方法。
（２）前記繰返し命令の最初の実行の検出に応答して、前記プロセッサ内部の繰返しカウント・レジスタと前記プロセッサによってアクセス可能な命令情報バッファとのうちの少なくとも１つを備える前記記憶装置に、前記繰返し命令用の最初のカウント値をコピーすることをさらに含む、上記（１）に記載の繰返し命令の追跡を可能にする方法。
（３）前記繰返し命令フラグが、割込みを起こすためにセットされる繰返しイネーブル・フラグと、オーバフロー、トレース・フック命令、および性能監視カウンタのオーバフローによってセットされるバッファ満杯フラグとのうちの少なくとも１つである、上記（１）に記載の繰返し命令の追跡を可能にする方法。
（４）前記繰返し命令用の実行カウントの読出しを可能にすることが、
前記実行カウントを保持する、前記プロセッサ内部のＣＸレジスタと、前記実行カウントを保持する、前記プロセッサ内部の繰返しカウント・レジスタと、前記実行カウントおよび第１の実行カウントを保持する前記繰返しカウント・レジスタと第２の実行カウントを保持する前記ＣＸレジスタの差を保持する、前記プロセッサを介してアクセス可能な命令情報バッファとのうちの少なくとも１つを備える前記記憶装置からの読出しを追跡プログラムが行うことを可能にすることをさらに含む、上記（１）に記載の繰返し命令の追跡を可能にする方法。
（５）前記プロセッサ内部の記憶装置として働く性能監視カウンタ中の前記実行カウントを追跡すること、および
前記性能監視カウンタからの前記実行カウントの読出しを可能にすることをさらに含む、上記（１）に記載の繰返し命令の追跡を可能にする方法。
（６）複数の繰返し命令の実行カウントを追跡した後でのみ、前記割込みを開始することをさらに含む、上記（５）に記載の繰返し命令の追跡を可能にする方法。
（７）割込みの検出に応答して、追跡プログラムが前記記憶装置からの繰返し命令の実行カウントおよび実行されたアドレスを固定バッファに読み出すことを可能にすること、および
前記実行カウントを実行ファイル中の特定の繰返し命令にマッピングするために、前記実行されたアドレスと、前記実行されたアドレスに格納された前記実行ファイルの命令とのマッチングを制御することをさらに含む、上記（１）に記載の繰返し命令の追跡を可能にする方法。
（８）繰返し命令の追跡を可能にするシステムであって、
追跡プログラムによって追跡可能なプロセッサと、
前記プロセッサ内部で繰返し命令を実行する手段と、
前記繰返し命令の最後の実行中にセットされた繰返し命令フラグの検出に応答して、前記プロセッサ内部で割込みを開始する手段と、
前記割込み中に、前記プロセッサ内部の記憶装置からの前記繰返し命令用の実行カウントの読出しを可能にする手段とを備えるシステム。
（９）前記繰返し命令の最初の実行の検出に応答して、前記プロセッサ内部の繰返しカウント・レジスタと前記プロセッサによってアクセス可能な命令情報バッファとのうちの少なくとも１つを備える前記記憶装置に、前記繰返し命令用の最初のカウント値をコピーする手段をさらに備える、上記（８）に記載の繰返し命令の追跡を可能にするシステム。
（１０）前記繰返し命令フラグが、割込みを起こすためにセットされる繰返しイネーブル・フラグと、オーバフロー、トレース・フック命令、および性能監視カウンタのオーバフローによってセットされるバッファ満杯フラグとのうちの少なくとも１つである、上記（８）に記載の繰返し命令の追跡を可能にするシステム。
（１１）前記繰返し命令用の実行カウントの読出しを可能にする手段が、
前記実行カウントを保持する、前記プロセッサ内部のＣＸレジスタと、前記実行カウントを保持する、前記プロセッサ内部の繰返しカウント・レジスタと、前記実行カウントおよび第１の実行カウントを保持する前記繰返しカウント・レジスタと第２の実行カウントを保持する前記ＣＸレジスタの差を保持する、前記プロセッサを介してアクセス可能な命令情報バッファとのうちの少なくとも１つを備える前記記憶装置からの読出しを追跡プログラムが行うことを可能にする手段をさらに備える、上記（８）に記載の繰返し命令の追跡を可能にするシステム。
（１２）前記プロセッサ内部の記憶装置として働く性能監視カウンタ中の前記実行カウントを追跡する手段と、
前記性能監視カウンタからの前記実行カウントの読出しを可能にする手段とをさらに備える、上記（８）に記載の繰返し命令の追跡を可能にするシステム。
（１３）複数の繰返し命令の実行カウントを追跡した後でのみ、前記割込みを開始する手段をさらに備える、上記（１２）に記載の繰返し命令の追跡を可能にするシステム。
（１４）割込みの検出に応答して、追跡プログラムが前記記憶装置からの繰返し命令の実行カウントおよび実行されたアドレスを固定バッファに読み出すことを可能にする手段と、
前記実行カウントを実行ファイル中の特定の繰返し命令にマッピングするために、前記実行されたアドレスと、前記実行されたアドレスに格納された前記実行ファイルの命令とのマッチングを制御する手段とをさらに備える、上記（８）に記載の繰返し命令の追跡を可能にするシステム。
（１５）繰返し命令の追跡を制御する方法であって、
プロセッサ内で割込みを起こすように第１の順次繰返し命令を変更すること、
前記プロセッサ内での前記割込みの検出に応答して、前記繰返し命令を追跡し、前記繰返し命令を割込みから戻るように変更すること、および
前記第１の順次繰返し命令を渡す分岐割込みの検出に応答して、前記繰返し命令を復元し、次の順次繰返し命令を割込みを起こすように変更することを含む方法。
【図面の簡単な説明】
【００７５】
【図１】本発明を実施することができる、コンピュータ・システムの一実施形態を示すブロック図である。
【図２】図１に示すコンピュータ・システムなどのコンピューティング・システム内部で使用することができる、プロセッサおよびメモリ・サブシステム内の一般的な構造を示すブロック図である。
【図３】本発明の方法、システム、およびプログラムによる、コンピュータ・システム内部のソフトウェア構成要素を示し、ソフトウェアの機能層の間の論理関係を示すブロック図である。
【図４】本発明の方法、システム、およびプログラムによる、追跡機構によって解析されるデータ処理システム内のソフトウェア構成要素間の関係を示すブロック図である。
【図５】本発明の方法、システム、およびプログラムによる、追跡プログラムの一般的なフェーズを示す、高レベルの論理フロー図である。
【図６】本発明の方法、システム、およびプログラムによる、繰返し命令に関する実行情報を明らかにするのに使用することができる、プロセッサ内部の繰返し命令レジスタを示すブロック図である。
【図７】本発明の方法、システム、およびプログラムによる、繰返し命令の追跡が可能なプロセッサを示すブロック図である。
【図８】プロセッサ内部で繰返しイネーブル・フラグを使用するための、処理およびプログラムを示す高レベルの論理フロー図である。
【図９】完了した繰返し命令を追跡するために、プロセッサ内部で繰返しイネーブル・フラグを使用するための、処理およびプログラムを示す高レベルの論理フロー図である。
【図１０】本発明の方法、システム、およびプログラムによる、繰返し命令を追跡し格納することが可能なプロセッサを示すブロック図である。
【図１１】本発明の方法、システム、およびプログラムによる、繰返し命令を追跡してプロセッサの外部にあるメモリに格納することが可能なプロセッサを示すブロック図である。
【図１２】バッファ内の繰返し命令カウントを追跡するために、繰返しイネーブル・フラグを使用する処理およびプログラムを示す高レベルの論理フロー図である。
【図１３】本発明の方法、システム、およびプログラムによる、繰返し命令の追跡を制御することが可能なプロセッサを示すブロック図である。
【図１４】性能監視カウンタを使用して、繰返し命令を追跡するために、割込みを制御する処理およびプログラムを示す高レベルの論理フロー図である。
【図１５】複数の性能監視カウンタを介して繰返し命令を追跡するために割込みを制御する処理およびプログラムを示す高レベルの論理フロー図である。
【図１６】アプリケーション中で一度に１つの繰返し命令にトレース・フックを挿入する処理およびプログラムを示す高レベルの論理フロー図である。
【符号の説明】
【００７６】
１０  コンピュータ・システム
１１  入出力（Ｉ／Ｏ）コントローラ
１２  プロセッサ
１４  ランダム・アクセス・メモリ（ＲＡＭ）
１６  読出し専用メモリ（ＲＯＭ）
１８  大容量記憶装置
２２  バス
２４  ディスプレイ
２６  キーボード
２８  音声入出力装置
３０  カーソル制御装置
３２  通信インタフェース
３４  ネットワーク・リンク
３７  インターネット・サービス・プロバイダ（ＩＳＰ）
３８  インターネット
３９  サーバ
１１０  階層メモリ
１１２  レベル２キャッシュ
１１６  不揮発性メモリ
１２２  命令キャッシュ
１２４  データ・キャッシュ
１２６  汎用データ・レジスタ
１２８  汎用制御レジスタ
１３０  命令取出しユニット
１３２  命令復号ユニット
１３４  順序付けユニット
１３６  完了ユニット
１３８  実行ユニット
１３９  カウント・レジスタ（ＣＸ）、ＣＸレジスタ
１４０  分岐予測ユニット
１４２  割込み制御ユニット
１４４  性能モニタ
１４６  カウンタ・レジスタ
１４８  制御レジスタ
１５０  追跡プログラム
１５１  アプリケーション・プログラム
１５２  カーネル
１８０  プロセッサ
１８２  繰返しカウント・レジスタ
１９０  プロセッサ
１９２  割込み制御ユニット
１９６  制御レジスタ
１９７  選択分岐イネーブル（ＴＢＥ）フラグ
１９８  繰返しイネーブル（ＲＥ）フラグ
１９９  単一ステップ・イネーブル（ＳＳＥ）フラグ
２００  繰返し割込みハンドラ
２５０  プロセッサ
２５２  割込み制御ユニット
２５４  ＲＥ満杯フラグ
２５６  終端ポインタ
２５８  先頭ポインタ
２５９  繰返し命令情報バッファ、命令情報バッファ
２６０  プロセッサ
２６４  満杯フラグ
２６６  ネクスト・レジスタ
２６８  ＩＢサイズ・レジスタ
２６９  繰返し命令情報バッファ・ポインタ、繰返し命令バッファ・ポインタ
２９０  プロセッサ
２９２  性能モニタ
２９４  カウンタ・レジスタ
２９６  繰返し発生カウンタ
２９８  繰返し実行カウンタ
【図１】
2004199685.tif 000003
【図２】
2004199685.tif 000004
【図３】
2004199685.tif 000005
【図４】
2004199685.tif 000006
【図５】
2004199685.tif 000007
【図６】
2004199685.tif 000008
【図７】
2004199685.tif 000009
【図８】
2004199685.tif 000010
【図９】
2004199685.tif 000011
【図１０】
2004199685.tif 000012
【図１１】
2004199685.tif 000013
【図１２】
2004199685.tif 000014
【図１３】
2004199685.tif 000015
【図１４】
2004199685.tif 000016
【図１５】
2004199685.tif 000017
【図１６】
2004199685.tif 000018