(57)【特許請求の範囲】
【請求項１】
アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するためのコンピュータ・プログラム・プロダクトであって、前記コンピュータ・プログラム・プロダクトが、処理回路によって読み取り可能で、方法を実行するために前記処理回路によって実行するための命令を保管する有形記憶媒体を含み、前記方法が、
サンプル・ポイント・アドレス・アレイから複数のサンプル・ポイント・アドレスを読み取ることと、
プロセッサにより、前記複数のサンプル・ポイント・アドレスを前記プロセッサ上で実行中の命令ストリームからの命令に関連するアドレスと比較することと、
前記複数のサンプル・ポイント・アドレスのうちの１つと一致する前記アドレスに関連する前記命令の実行時にサンプル・ポイントを認識することであって、ランタイム・インスツルメンテーション情報が前記サンプル・ポイントから入手されることと、
前記ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファに報告グループとして保管すること
を含む、コンピュータ・プログラム・プロダクト。
【請求項２】
前記命令に関連する前記アドレスが、アドレス・タイプに基づいて、前記命令のアドレスおよび前記命令のオペランドのアドレスのうちの１つである、請求項１記載のコンピュータ・プログラム・プロダクト。
【請求項３】
ランタイム・インスツルメンテーション・コントロール・ロード（ＬＲＩＣ）命令の実行に基づいて、ランタイム・インスツルメンテーション・コントロールを初期設定することであって、前記ＬＲＩＣ命令がサンプリング・モードおよびサンプル・ポイント・アドレス（ＳＰＡ）コントロールを確立すること
をさらに含む、請求項１記載のコンピュータ・プログラム・プロダクト。
【請求項４】
前記ＬＲＩＣ命令の実行に基づいて、前記ランタイム・インスツルメンテーション・コントロールを初期設定することが、命令アドレスおよび命令のオペランドのアドレスのうちの１つとしてサンプル・ポイント・アドレス・タイプを確立することをさらに含む、請求項３記載のコンピュータ・プログラム・プロダクト。
【請求項５】
前記サンプル・ポイント・アドレスを含むランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ロード（ＲＩＬＳＰＡ）命令をフェッチすることと、
前記プロセッサにより前記ＲＩＬＳＰＡ命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレスを前記サンプル・ポイント・アドレス・アレイに保管することと、
前記保管に基づいて前記プロセッサ内の条件コードを更新すること
を含む、請求項１記載のコンピュータ・プログラム・プロダクト。
【請求項６】
前記サンプル・ポイント・アドレスを前記サンプル・ポイント・アドレス・アレイに保管する前に動的アドレス変換状態に基づいて前記サンプル・ポイント・アドレスについてアドレス変換を実行すること
をさらに含む、請求項５記載のコンピュータ・プログラム・プロダクト。
【請求項７】
記憶アドレスを含むランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ストア（ＲＩＳＳＰＡ）命令をフェッチすることと、
前記プロセッサにより前記ＲＩＳＳＰＡ命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレス・アレイから前記サンプル・ポイント・アドレスを読み取ることと、
前記サンプル・ポイント・アドレスを前記記憶アドレスによって識別された位置に保管すること
を含む、請求項１記載のコンピュータ・プログラム・プロダクト。
【請求項８】
ランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・クリア（ＲＩＣＳＰＡ）命令をフェッチすることと、
前記プロセッサにより前記ＲＩＣＳＰＡ命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレス・アレイ内の前記サンプル・ポイント・アドレスをクリアすることと、
前記クリアに基づいて前記プロセッサ内の条件コードを更新すること
を含む、請求項１記載のコンピュータ・プログラム・プロダクト。
【請求項９】
アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するためのコンピュータで実行される方法であって、前記方法が、
サンプル・ポイント・アドレス・アレイから複数のサンプル・ポイント・アドレスを読み取ることと、
プロセッサにより、前記複数のサンプル・ポイント・アドレスを前記プロセッサ上で実行中の命令ストリームからの命令に関連するアドレスと比較することと、
前記複数のサンプル・ポイント・アドレスのうちの１つと一致する前記アドレスに関連する前記命令の実行時にサンプル・ポイントを認識することであって、ランタイム・インスツルメンテーション情報が前記サンプル・ポイントから入手されることと、
前記ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファに報告グループとして保管すること
を含む、方法。
【請求項１０】
前記命令に関連する前記アドレスが、アドレス・タイプに基づいて、前記命令のアドレスおよび前記命令のオペランドのアドレスのうちの１つである、請求項９記載の方法。
【請求項１１】
ランタイム・インスツルメンテーション・コントロール・ロード（ＬＲＩＣ）命令の実行に基づいて、ランタイム・インスツルメンテーション・コントロールを初期設定することであって、前記ＬＲＩＣ命令がサンプリング・モードおよびサンプル・ポイント・アドレス（ＳＰＡ）コントロールを確立すること
をさらに含む、請求項９記載の方法。
【請求項１２】
前記ＬＲＩＣ命令の実行に基づいて、前記ランタイム・インスツルメンテーション・コントロールを初期設定することが、命令アドレスおよび命令のオペランドのアドレスのうちの１つとしてサンプル・ポイント・アドレス・タイプを確立することをさらに含む、請求項１１記載の方法。
【請求項１３】
前記サンプル・ポイント・アドレスを含むランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ロード（ＲＩＬＳＰＡ）命令をフェッチすることと、
前記プロセッサにより前記ＲＩＬＳＰＡ命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレスを前記サンプル・ポイント・アドレス・アレイに保管することと、
前記保管に基づいて前記プロセッサ内の条件コードを更新すること
を含む、請求項９記載の方法。
【請求項１４】
前記サンプル・ポイント・アドレスを前記サンプル・ポイント・アドレス・アレイに保管する前に動的アドレス変換状態に基づいて前記サンプル・ポイント・アドレスについてアドレス変換を実行すること
をさらに含む、請求項１３記載の方法。
【請求項１５】
記憶アドレスを含むランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ストア（ＲＩＳＳＰＡ）命令をフェッチすることと、
前記プロセッサにより前記ＲＩＳＳＰＡ命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレス・アレイから前記サンプル・ポイント・アドレスを読み取ることと、
前記サンプル・ポイント・アドレスを前記記憶アドレスによって識別された位置に保管すること
を含む、請求項９記載の方法。
【請求項１６】
ランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・クリア（ＲＩＣＳＰＡ）命令をフェッチすることと、
前記プロセッサにより前記ＲＩＣＳＰＡ命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレス・アレイ内の前記サンプル・ポイント・アドレスをクリアすることと、
前記クリアに基づいて前記プロセッサ内の条件コードを更新すること
を含む、請求項９記載の方法。
【請求項１７】
アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するためのシステムであって、前記システムが、
メモリと、
ランタイム・インスツルメンテーション・モジュールを有するプロセッサとを含み、前記ランタイム・インスツルメンテーション・モジュールが方法を実行するように構成され、前記方法が、
サンプル・ポイント・アドレス・アレイから複数のサンプル・ポイント・アドレスを読み取ることと、
前記プロセッサにより、前記複数のサンプル・ポイント・アドレスを前記プロセッサ上で実行中の命令ストリームからの命令に関連するアドレスと比較することと、
前記複数のサンプル・ポイント・アドレスのうちの１つと一致する前記アドレスに関連する前記命令の実行時にサンプル・ポイントを認識することであって、ランタイム・インスツルメンテーション情報が前記サンプル・ポイントから入手されることと、
前記ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファに報告グループとして保管すること
を含む、システム。
【請求項１８】
前記サンプル・ポイント・アドレスを含むランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ロード（ＲＩＬＳＰＡ）命令をフェッチすることと、
前記プロセッサにより前記ＲＩＬＳＰＡ命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレスを前記サンプル・ポイント・アドレス・アレイに保管することと、
前記保管に基づいて前記プロセッサ内の条件コードを更新すること
を含む、請求項１７記載のシステム。
【請求項１９】
記憶アドレスを含むランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ストア（ＲＩＳＳＰＡ）命令をフェッチすることと、
前記プロセッサにより前記ＲＩＳＳＰＡ命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレス・アレイから前記サンプル・ポイント・アドレスを読み取ることと、
前記サンプル・ポイント・アドレスを前記記憶アドレスによって識別された位置に保管すること
を含む、請求項１７記載のシステム。
【請求項２０】
ランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・クリア（ＲＩＣＳＰＡ）命令をフェッチすることと、
前記プロセッサにより前記ＲＩＣＳＰＡ命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレス・アレイ内の前記サンプル・ポイント・アドレスをクリアすることと、
前記クリアに基づいて前記プロセッサ内の条件コードを更新すること
を含む、請求項１７記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピューティング環境内の処理に関し、より具体的には、ランタイム・インスツルメンテーション（run-time instrumentation）を使用して、それぞれが１つのサンプル・ポイントを構成する１つまたは複数のサンプル命令の位置をアドレスにより指定することに関する。
【背景技術】
【０００２】
コンピュータ・プロセッサは、ますます複雑になっている分岐予測および命令キャッシング・ロジックを使用してプログラムまたは命令ストリームを実行する。これらのプロセスは、命令スループット、したがって、処理性能を高めるために導入されたものである。性能を改善するためのロジックの導入は、特定のソフトウェア・アプリケーションがコンピュータ・プロセッサ上でどのように実行されるかを確実に予測するのを困難にしている。ソフトウェア開発プロセス中に、機能性と性能とのバランスが取られる場合が多い。ソフトウェアは、そのソフトウェアを実行している基礎となるハードウェアから１つまたは複数の抽象化レベルで実行される。ハードウェアが仮想化されると、追加の抽象化層が導入される。性能を高めるロジックの導入ならびに様々な抽象化層により、プログラムが実行されているときにハードウェア・レベルで実際に何が行われているかを完全に理解することは困難である。この情報がない場合、ソフトウェア開発者は、ソフトウェア・アプリケーションを最適化するために、実行持続期間、メモリ使用率、スレッド数など、より抽象的な方法を使用する。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】２０１０年８月発行の「ＩＢＭ（Ｒ）  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」という資料番号ＳＡ２２−７８３２−０８の第９版
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ハードウェア固有情報が使用可能である場合、それは典型的に事後に開発者に提供されるものであり、高レベルで集約されて提供されるか、あるいは他のプログラムのアクティビティおよびオペレーティング・システムが散在しているか、またはその両方になり、ソフトウェア・アプリケーションの効率および正確さに影響を及ぼしている可能性のある問題を識別するのを困難にしている。
【課題を解決するための手段】
【０００５】
諸実施形態は、アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するための方法、システム、およびコンピュータ・プログラム・プロダクト（computer program product）を含む。このコンピュータ・プログラム・プロダクトは、処理回路によって読み取り可能で、方法を実行するために処理回路によって実行するための命令を保管する有形記憶媒体を含む。この方法は、サンプル・ポイント・アドレス・アレイから複数のサンプル・ポイント・アドレスを読み取ることと、プロセッサにより、その複数のサンプル・ポイント・アドレスをプロセッサ上で実行中の命令ストリームからの命令に関連するアドレスと比較することを含む。この方法は、複数のサンプル・ポイント・アドレスのうちの１つと一致するアドレスに関連する命令の実行時にサンプル・ポイントを認識することをさらに含む。ランタイム・インスツルメンテーション情報はサンプル・ポイントから入手される。また、この方法は、ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファに報告グループ（reporting group）として保管することも含む。
【０００６】
アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するための方法は、サンプル・ポイント・アドレス・アレイから複数のサンプル・ポイント・アドレスを読み取ることと、プロセッサにより、その複数のサンプル・ポイント・アドレスをプロセッサ上で実行中の命令ストリームからの命令に関連するアドレスと比較することを含む。この方法は、複数のサンプル・ポイント・アドレスのうちの１つと一致するアドレスに関連する命令の実行時にサンプル・ポイントを認識することをさらに含む。ランタイム・インスツルメンテーション情報はサンプル・ポイントから入手される。また、この方法は、ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファに報告グループとして保管することも含む。
【０００７】
アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するためのシステムは、メモリと、ランタイム・インスツルメンテーション・モジュールを備えたプロセッサとを含む。ランタイム・インスツルメンテーション・モジュールは、方法を実行するように構成される。この方法は、サンプル・ポイント・アドレス・アレイから複数のサンプル・ポイント・アドレスを読み取ることと、プロセッサにより、その複数のサンプル・ポイント・アドレスをプロセッサ上で実行中の命令ストリームからの命令に関連するアドレスと比較することを含む。この方法は、複数のサンプル・ポイント・アドレスのうちの１つと一致するアドレスに関連する命令の実行時にサンプル・ポイントを認識することをさらに含む。ランタイム・インスツルメンテーション情報はサンプル・ポイントから入手される。また、この方法は、ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファに報告グループとして保管することも含む。
【０００８】
追加の特徴および利点は本発明の技法により実現される。本発明のその他の実施形態および態様は、本明細書に詳細に記載され、請求されている本発明の一部と見なされる。利点および特徴とともに本発明をより適切に理解するために、以下の説明および図面を参照されたい。
【０００９】
本発明と見なされる主題は、本明細書の末尾にある特許請求の範囲に詳細に指摘され、明確に請求されている。本発明の上記その他の特徴および利点は、添付図面に併せて記載されている以下の詳細な説明から明らかである。
【図面の簡単な説明】
【００１０】
【図１】一実施形態におけるホスト・コンピュータ・システムの一例を描写する図である。
【図２】一実施形態におけるエミュレーション・ホスト・コンピュータ・システムの一例を描写する図である。
【図３】一実施形態におけるコンピュータ・システムの一例を描写する図である。
【図４】一実施形態におけるコンピュータ・ネットワークの一例を描写する図である。
【図５】一実施形態におけるコンピュータ・システムの諸要素を描写する図である。
【図６】一実施形態におけるコンピュータ・システムの詳細な諸要素を描写する図である。
【図７】一実施形態におけるコンピュータ・システムの詳細な諸要素を描写する図である。
【図８】一実施形態におけるコンピュータ・システムの詳細な諸要素を描写する図である。
【図９】一実施形態によるプロセッサのランタイム・インスツルメンテーションのためのシステムの概略図である。
【図１０】一実施形態において特権状態によって設定可能なコントロールを含むランタイム・インスツルメンテーション・コントロール（run-time-instrumentation controls）制御ブロック（ＲＩＣＣＢ）の一部分を描写する図である。
【図１１】一実施形態において半特権ビット（Ｋ）が１に設定されたときのＲＩＣＣＢ制御ブロックの一部分を描写する図である。
【図１２】一実施形態による報告グループを描写する図である。
【図１３】一実施形態によりアドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するためのプロセス・フローを描写する図である。
【図１４】一実施形態によるコンピュータ・プログラム・プロダクトを示す図である。
【発明を実施するための形態】
【００１１】
本発明の一実施形態は、ランタイム・インスツルメンテーションを使用して、アドレスによるイベントの間接サンプリングを可能にするものである。ランタイム・インスツルメンテーションは、実験室内またはオフライン解析用だけでなく、プロセッサ（ＣＰＵ）上のプログラム制御下でプログラム・ランタイム中にカスタマ環境でも使用できる機構である。１つのプログラムを実行するためにフェッチされ実行される一連の命令は命令ストリームと呼ぶことができる。データ収集のフレキシビリティを高めるために、構成可能な間隔に基づいてイベントを収集することができる。ＣＰＵコントロールは、プログラムによって設定可能であり、ランタイム・インスツルメンテーションを管理する。ランタイム・インスツルメンテーションは、通常、定期的サンプリングを基礎としてイベントを報告するが、インスツルメント命令ストリーム（instrumented instruction stream）内の追加の関心ポイント（pointof interest）はランタイム・インスツルメンテーション・ネクスト（run-timeinstrumentation next）（ＲＩＮＥＸＴ）命令の使用によって指示することができる。定期的サンプリング間隔は、命令カウントまたはサイクル・カウントのいずれかによって決定される。インスツルメント命令ストリーム内の特定の情報は、その後の解析が行われるときに非常に有用である可能性がある。１回のインスツルメンテーション・ラン中にインスツルメント命令ストリーム内の特定の命令に関連する追加の指示サンプル・ポイントを作成できることは、解析後に使用可能な重大情報の量を実質的に増加する可能性がある。
【００１２】
ランタイム・インスツルメンテーション・ネクスト（ＲＩＮＥＸＴ）命令は、インスツルメント・プログラム（instrumented program）が次の順次命令（next sequentialinstruction）（ＮＳＩ）の実行完了時にサンプル・ポイントを指定できるように定義されている。一定間隔サンプリングに加えて、この指示サンプリングにより、余分な非常に集中したサンプル・ポイントについて報告することができる。ＲＩＮＥＸＴ命令は、それがサンプル命令としてＮＳＩを指定できるようにするために、インスツルメント命令ストリーム内に挿入される。ＲＩＮＥＸＴを挿入するには、その命令をプログラム変更または再コンパイルとして挿入しなければならない可能性がある。一実施形態では、サンプル・ポイント・アドレス（ＳＰＡ）モードを実現するために他のサンプリング・モードが定義される。ＳＰＡモードは、インスツルメント命令ストリーム内の１つまたは複数のサンプル・ポイントをアドレスにより間接的に識別する。ランタイム・インスツルメンテーション構成プロセスの一部としてサンプル・ポイントに関するアドレスを間接的に識別することは、モニター中のプログラムを変更せずに精密なサンプル・ポイントをターゲットにするためにプログラムのインスツルメンテーションをサポートすることができる。それぞれのサンプル・ポイントは、一定間隔サンプル、指示サンプル・ポイント、または間接サンプル・ポイントのいずれであっても、結果的に、収集バッファから最近収集されたデータならびにそのサンプル・ポイントでの命令の実行に関連するデータを含む、複数レコード報告グループが保管されることになる。
【００１３】
図１は、一実施形態におけるホスト・コンピュータ・システム５０の代表的なコンポーネントを描写している。その他のコンポーネント配置もコンピュータ・システムで使用することができる。代表的なホスト・コンピュータ・システム５０は、主記憶装置（コンピュータ・メモリ）２と通信状態にある１つまたは複数のプロセッサ１ならびに記憶装置１１への入出力インターフェースと他のコンピュータまたはＳＡＮなどと通信するためのネットワーク１０を含む。プロセッサ１は、設計済み命令セットおよび設計済み機能性を有するアーキテクチャに適合している。プロセッサ１は、プログラム・アドレス（仮想アドレス）をメモリ内の実アドレスに変換するための動的アドレス変換（ＤＡＴ）３を有することができる。ＤＡＴ３は典型的に、後でコンピュータ・メモリ２のブロックにアクセスする際にアドレス変換の遅延を必要としないように、変換をキャッシュするための変換索引バッファ（ＴＬＢ）７を含む。典型的に、キャッシュ９はコンピュータ・メモリ２とプロセッサ１との間で使用される。キャッシュ９は、２つ以上のＣＰＵにとって使用可能な大きいキャッシュと、この大きいキャッシュとそれぞれのＣＰＵとの間のより小さく高速（低レベル）の複数キャッシュとを有する階層型にすることができる。いくつかの実施形態では、この低レベル・キャッシュは、命令フェッチおよびデータ・アクセスのために別々の低レベル・キャッシュを提供するように分割される。一実施形態では、命令は、キャッシュ９を介して命令フェッチ・ユニット４によってコンピュータ・メモリ２からフェッチされる。命令は、命令デコード・ユニット６でデコードされ、命令実行ユニット８に（いくつかの実施形態では他の命令とともに）ディスパッチされる。典型的に、いくつかの命令実行ユニット８、たとえば、算術実行ユニット、浮動小数点実行ユニット、および分岐命令実行ユニットが使用される。命令は、命令実行ユニット８によって実行され、必要に応じて命令指定のレジスタまたはコンピュータ・メモリ２からオペランドにアクセスする。オペランドがコンピュータ・メモリ２からアクセス（ロードまたはストア）される場合、ロード・ストア・ユニット５は、典型的に、実行中の命令の制御下でアクセスを処理する。命令は、ハードウェア回路であるいは内部マイクロコード（ファームウェア）でまたはその両方の組み合わせによって実行することができる。
【００１４】
図２には、エミュレートされたホスト・コンピュータ・システム２１が提供されており、これは、図１のホスト・コンピュータ・システム５０など、ホスト・アーキテクチャのホスト・コンピュータ・システムをエミュレートするものである。エミュレートされたホスト・コンピュータ・システム２１では、ホスト・プロセッサ（ＣＰＵ）１は、エミュレートされたホスト・プロセッサ（または仮想ホスト・プロセッサ）２９であり、ホスト・コンピュータ・システム５０のプロセッサ１のものとは異なるネイティブ命令セット・アーキテクチャを有するネイティブ・プロセッサ２７を含む。エミュレートされたホスト・コンピュータ・システム２１は、ネイティブ・プロセッサ２７にとってアクセス可能なメモリ２２を有する。一実施形態では、メモリ２２は、コンピュータ・メモリ２の部分とエミュレーション・ルーチン・メモリ２３の部分にパーティション化される。コンピュータ・メモリ２は、ホスト・コンピュータ・アーキテクチャによりエミュレートされたホスト・コンピュータ・システム２１のプログラムにとって使用可能なものである。ネイティブ・プロセッサ２７は、エミュレートされたプロセッサ２９のもの以外のアーキテクチャの設計済み命令セットのネイティブ命令であって、エミュレーション・ルーチン・メモリ２３から入手されるネイティブ命令を実行し、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを決定するためにアクセスされたホスト命令（複数も可）をデコードすることができるシーケンスおよびアクセス／デコード・ルーチンで入手される１つまたは複数の命令を使用することによって、コンピュータ・メモリ２内のプログラムから実行のためにホスト命令にアクセスすることができる。ホスト・コンピュータ・システム５０のアーキテクチャについて定義されるその他の機構は、たとえば、汎用レジスタ、制御レジスタ、動的アドレス変換および入出力（Ｉ／Ｏ）サブシステム・サポート、ならびにプロセッサ・キャッシュなどの機構を含む、設計済み機構ルーチンによってエミュレートすることができる。また、エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を改善するためにネイティブ・プロセッサ２７内で使用可能な機能（汎用レジスタおよび仮想アドレスの動的変換など）も利用することができる。ホスト・コンピュータ・システム５０の機能をエミュレートする際にネイティブ・プロセッサ２７を支援するために、特殊ハードウェアおよびオフロード・エンジンが提供される場合もある。
【００１５】
メインフレームでは、多くの場合、コンパイラ・アプリケーションにより、プログラマによって、通常、現在は、「Ｃ」プログラマによって、設計済み機械命令が使用される。記憶媒体に保管されているこれらの命令は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  ＩＢＭサーバにおいてまたは代わってその他のアーキテクチャを実行するマシンにおいてネイティブに実行することができる。これらは、既存のおよび将来のＩＢＭメインフレーム・サーバ内でならびにＩＢＭのその他のマシン（たとえば、ｐＳｅｒｉｅｓ（Ｒ）サーバおよびｘＳｅｒｉｅｓ（Ｒ）サーバ）上でエミュレートすることができる。また、これらは、ＩＢＭ（Ｒ）、Ｉｎｔｅｌ（Ｒ）、ＡＭＤ（ＴＭ）、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ、その他によって製造されたハードウェアを使用する多様なマシン上でＬｉｎｕｘを実行するマシンにおいて実行することができる。Ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づくそのハードウェア上での実行の他に、Ｌｉｎｕｘは、Ｈｅｒｃｕｌｅｓ、ＵＭＸ、Fundamental Software, Inc.（ＦＳＩ）、またはPlatformSolutions, Inc.（ＰＳＩ）によりエミュレーションを使用するマシンでも使用することができ、一般にその実行はエミュレーション・モードで行われる。エミュレーション・モードでは、エミュレートされたプロセッサのアーキテクチャをエミュレートするために、エミュレーション・ソフトウェアがネイティブ・プロセッサによって実行される。
【００１６】
エミュレートされたホスト・コンピュータ・システム２１のコンポーネントのうちの１つまたは複数については、２０１０年８月発行の「ＩＢＭ（Ｒ）  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」という資料番号ＳＡ２２−７８３２−０８の第９版にさらに記載されている。ＩＢＭは、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ社の登録商標である。本明細書で使用するその他の名称は、インターナショナル・ビジネス・マシーンズ社またはその他の企業の登録商標、商標、または製品名である可能性がある。
【００１７】
ネイティブ・プロセッサ２７は、典型的に、エミュレートされたプロセッサのエミュレーションを実行するために、ファームウェアまたはネイティブ・オペレーティング・システムのいずれか一方を含む、エミュレーション・ルーチン・メモリ２３に保管されているエミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令をフェッチして実行する責任がある。エミュレーション・ソフトウェアは、命令境界を追跡するためにエミュレートされたプログラム・カウンタを維持する。エミュレーション・ソフトウェアは、ネイティブ・プロセッサ２７による実行のために、一度に１つまたは複数のエミュレートされた機械命令をフェッチし、その１つまたは複数のエミュレートされた機械命令を対応するネイティブ機械命令のグループに変換することができる。これらの変換された命令は、より高速の変換を達成できるようにキャッシュすることができる。エミュレーション・ソフトウェアは、オペレーティング・システムならびにエミュレートされたプロセッサのために作成されたアプリケーションが正しく動作することを保証するために、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ・ルールを維持する。さらに、エミュレーション・ソフトウェアは、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、たとえば、セグメント・テーブルおよびページ・テーブルを含む動的アドレス変換機能、割り込みメカニズム、コンテキスト・スイッチ・メカニズム、時刻（ＴＯＤ）機構、ならびに入出力サブシステムへの設計済みインターフェースを含むがこれらに限定されない、エミュレートされたプロセッサ・アーキテクチャによって識別されたリソースを提供し、エミュレートされたプロセッサ２９上で実行されるように設計されたオペレーティング・システムまたはアプリケーション・プログラムがエミュレーション・ソフトウェアを有するネイティブ・プロセッサ２７上で実行できるようになっている。
【００１８】
エミュレート中の特定の命令はデコードされ、個々の命令の機能を実行するためのサブルーチンが呼び出される。エミュレートされたプロセッサ２９の機能をエミュレートするエミュレーション・ソフトウェア機能は、たとえば、「Ｃ」サブルーチンまたはドライバで実現されるか、あるいは好ましい実施形態の説明を理解した後に当技術分野の技能の範囲内に入るように特定のハードウェアに関するドライバを提供する何らかの他の方法で実現される。
【００１９】
一実施形態では、本発明は、ソフトウェア（時には、ライセンスを受けた内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどとも呼ばれ、いずれも本発明と一貫したものであると思われる）によって実施することができる。図１を参照すると、本発明を実施するソフトウェア・プログラム・コードは、長期記憶媒体、ＣＤ−ＲＯＭドライブ、磁気テープ・ドライブ、またはハード・ディスクなどの記憶装置１１から、ホスト・コンピュータ・システム５０のＣＰＵ（中央演算処理装置）１としても知られるプロセッサによってアクセスされる。ソフトウェア・プログラム・コードは、ディスケット、ハード・ディスク、またはＣＤ−ＲＯＭなど、データ処理システムで使用するための様々な既知の媒体のいずれかで実施することができる。このコードは、このような媒体上で配布される場合もあれば、他のコンピュータ・システムのユーザによる使用のためにこのような他のコンピュータ・システムへのネットワーク１０により１つのコンピュータ・システムのコンピュータ・メモリ２または記憶装置からユーザに配信される場合もある。
【００２０】
代わって、プログラム・コードは、コンピュータ・メモリ２に読み込まれ、プロセッサ・バス（図示せず）を使用してプロセッサ１によってアクセスすることができる。このようなプログラム・コードは、様々なコンピュータ・コンポーネントの機能および対話を制御するオペレーティング・システムと、１つまたは複数のアプリケーション・プログラムとを含む。プログラム・コードは、通常、記憶装置１１などの高密度媒体からコンピュータ・メモリ２にページングされ、そこでプロセッサ１による処理のために使用可能になる。メモリ内あるいは物理的媒体上にソフトウェア・プログラム・コードを記録するかあるいはネットワークを介してソフトウェア・コードを配信するかまたはその両方を行うための技法および方法は、周知のものであり、本明細書ではこれ以上述べないものとする。プログラム・コードは、作成されて、有形媒体（電子メモリ・モジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープなどを含むがこれらに限定されない）上に保管されると、「コンピュータ・プログラム・プロダクト」と呼ばれる場合が多い。コンピュータ・プログラム・プロダクト媒体は、典型的に、好ましくはコンピュータ・システム内の処理回路による実行のためにその処理回路によって読み取り可能である。
【００２１】
図３は、本発明を実践することができる代表的なワークステーションまたはサーバ・ハードウェア・システムを示している。図３のシステム１００は、任意選択の周辺装置を含む、パーソナル・コンピュータ、ワークステーション、またはサーバなどの代表的なベース・コンピュータ・システム１０１を含む。ベース・コンピュータ・システム１０１は、１つまたは複数のプロセッサ１０６と、既知の技法により１つまたは複数のプロセッサ１０６とベース・コンピュータ・システム１０１のその他のコンポーネントとの間を接続し、それらの間の通信を可能にするために使用されるバス（図示せず）とを含む。このバスは、プロセッサ１０６をメモリ１０５および長期記憶媒体１０７に接続し、この記憶媒体は、たとえば、ハード・ディスク（たとえば、磁気媒体、ＣＤ、ＤＶＤ、およびフラッシュ・メモリのうちのいずれかを含む）または磁気テープ・ドライブを含むことができる。また、ベース・コンピュータ・システム１０１はユーザ・インターフェース・アダプタも含むことができ、このアダプタは、１つまたは複数のプロセッサ１０６をバスを介して、キーボード１０４、マウス１０３、プリンタ／スキャナ１１０、あるいはその他のインターフェース・デバイスまたはそれらの組み合わせなどに接続するものであり、このインターフェース・デバイスは、タッチ・センシティブ・スクリーン、デジタル化入力パッドなど、任意のユーザ・インターフェース・デバイスにすることができる。また、このバスは、１つまたは複数のプロセッサをディスプレイ・アダプタを介して、ＬＣＤスクリーンまたはモニターなどの表示装置１０２にも接続する。
【００２２】
ベース・コンピュータ・システム１０１は、ネットワーク１０９との通信１０８が可能なネットワーク・アダプタにより、その他のコンピュータまたは複数コンピュータのネットワークと通信することができる。ネットワーク・アダプタの例は、通信チャネル、トークン・リング、イーサネット、またはモデムである。代わって、ベース・コンピュータ・システム１０１は、セルラー・デジタル・パケット・データ（ＣＤＰＤ）カードなどのワイヤレス・インターフェースを使用して通信することができる。ベース・コンピュータ・システム１０１は、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）内のこのようなその他のコンピュータに関連付けられる場合もあれば、ベース・コンピュータ・システム１０１は、他のコンピュータなどを含むクライアント／サーバ配置内のクライアントである場合もある。
【００２３】
図４は、本発明を実践することができるデータ処理ネットワーク２００を示している。データ処理ネットワーク２００は、無線ネットワークおよび有線ネットワークなどの複数の個別ネットワークを含むことができ、そのそれぞれは、複数の個別ワークステーション２０１、２０２、２０３、２０４、あるいは図３のベース・コンピュータ・システム１０１、またはその両方を含むことができる。さらに、当業者であれば分かるように、１つまたは複数のＬＡＮを含むことができ、１つのＬＡＮはホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含むことができる。
【００２４】
プログラミング・コード１１１は、メモリ１０５に読み込まれ、プロセッサ・バスを使用してプロセッサ１０６によってアクセスすることができる。このようなプログラミング・コードは、様々なコンピュータ・コンポーネントの機能および対話を制御するオペレーティング・システムと、１つまたは複数のアプリケーション・プログラム１１２とを含む。プログラム・コードは、通常、長期記憶媒体１０７から高速メモリ１０５にページングされ、そこでプロセッサ１０６による処理のために使用可能になる。メモリ内あるいは物理的媒体上にソフトウェア・プログラミング・コードを記録するかあるいはネットワークを介してソフトウェア・コードを配信するかまたはその両方を行うための技法および方法は、周知のものであり、本明細書ではこれ以上述べないものとする。プログラム・コードは、作成されて、有形媒体（電子メモリ・モジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープなどを含むがこれらに限定されない）上に保管されると、「コンピュータ・プログラム・プロダクト」と呼ばれる場合が多い。コンピュータ・プログラム・プロダクト媒体は、典型的に、好ましくはコンピュータ・システム内の処理回路による実行のためにその処理回路によって読み取り可能である。
【００２５】
プロセッサにとって最も容易に使用可能なキャッシュ（通常、プロセッサの他のキャッシュより高速で小型である）は最低レベル（Ｌ１またはレベル１）のキャッシュであり、主記憶装置（メイン・メモリ）は最高レベルのキャッシュ（３つのレベルがある場合はＬ３）である。最低レベルのキャッシュは、実行すべき機械命令を保持する命令キャッシュ（Ｉキャッシュ）とデータ・オペランドを保持するデータ・キャッシュ（Ｄキャッシュ）とに分割される場合が多い。
【００２６】
さらに図４を参照すると、ネットワークは、ゲートウェイ・コンピュータ（クライアント・サーバ）２０６またはアプリケーション・サーバ（リモート・サーバ）２０８などのメインフレーム・コンピュータまたはサーバを含むこともでき、これはデータ・リポジトリにアクセスすることができ、ワークステーション２０５から直接アクセスすることもできる。ゲートウェイ・コンピュータ２０６は、それぞれのネットワーク２０７への入口点として機能する。ゲートウェイは、あるネットワーキング・プロトコルを他のネットワーキング・プロトコルに接続するときに必要である。ゲートウェイ・コンピュータ２０６は、好ましくは、通信リンクにより他のネットワーク（たとえば、インターネット２０７）に結合することができる。また、ゲートウェイ・コンピュータ２０６は、通信リンクを使用して１つまたは複数のワークステーション１０１、２０１、２０２、２０３、および２０４に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ社から入手可能なＩＢＭ  ｅＳｅｒｖｅｒ（ＴＭ）  ｚＳｅｒｉｅｓ（Ｒ）  ｚ９（Ｒ）サーバを使用して実現することができる。
【００２７】
一実施形態では、本発明を実施するソフトウェア・プログラミング・コードは、図３の長期記憶媒体１０７などの長期記憶媒体から、ベース・コンピュータ・システム１０１のプロセッサ１０６によってアクセスされる。ソフトウェア・プログラミング・コードは、ディスケット、ハード・ディスク、またはＣＤ−ＲＯＭなど、データ処理システムで使用するための様々な既知の媒体のいずれかで実施することができる。このコードは、このような媒体上で配布される場合もあれば、他のコンピュータ・システムのユーザによる使用のためにこのような他のコンピュータ・システムへのネットワークにより１つのコンピュータ・システムのメモリまたは記憶装置からユーザ２１０および２１１に配信される場合もある。
【００２８】
図５を参照すると、プロセッサ１０６について、模範的なプロセッサ実施形態が描写されている。プロセッサ１０６の性能を改善するために、１つまたは複数レベルのキャッシュ３０３を使用して、メモリ・ブロックをバッファに入れる。キャッシュ３０３は、使用される可能性のあるメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、６４、１２８、または２５６バイトのメモリ・データである。一実施形態では、データをキャッシュするためではなく命令をキャッシュするために個別のキャッシュが使用される。キャッシュ・コヒーレンス（メモリおよびキャッシュ内のライン・コピーの同期化）は、当技術分野で周知の様々な「スヌープ」アルゴリズムによって提供される場合が多い。プロセッサ・システムのメモリ１０５などの主記憶装置はキャッシュと呼ばれる場合が多い。４つのレベルのキャッシュ３０３を有するプロセッサ・システムでは、メモリ１０５は、典型的に、より高速であり、コンピュータ・システムにとって使用可能な不揮発性記憶装置（ＤＡＳＤ、磁気テープなど）の一部分を保持するだけであるので、時にはレベル５（Ｌ５）のキャッシュと呼ばれる。メモリ１０５は、オペレーティング・システムによってメモリ１０５内外にページングされたデータのページを「キャッシュ」する。
【００２９】
プログラム・カウンタ（命令カウンタ）３１１は、実行すべき現行命令のアドレスを追跡する。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅプロセッサ内のプログラム・カウンタは、６４ビットであり、前のアドレス指定制限をサポートするために３１または２４ビットに切り捨てることができる。プログラム・カウンタは、典型的に、コンテキスト・スイッチング中に持続するようにコンピュータのプログラム状況ワード（ＰＳＷ）で実施される。したがって、プログラム・カウンタ値を有する進行中のプログラムは、たとえば、オペレーティング・システムによって割り込むことができる（すなわち、プログラム環境からオペレーティング・システム環境への現行コンテキスト・スイッチ）。プログラムのＰＳＷは、プログラムがアクティブではない間、プログラム・カウンタ値を維持し、オペレーティング・システムが実行中の間、オペレーティング・システムのプログラム・カウンタ（ＰＳＷ内）が使用される。一実施形態では、プログラム・カウンタは現行命令のバイト数に等しい量だけ増分される。縮小命令セット・コンピューティング（ＲＩＳＣ）命令は典型的に固定長であり、複雑命令セット・コンピューティング（ＣＩＳＣ）命令は典型的に可変長である。ＩＢＭ  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの命令は、２、４、または６バイトの長さを有するＣＩＳＣ命令である。プログラム・カウンタ３１１は、たとえば、コンテスト・スイッチ動作または分岐命令の分岐実行動作（branch taken operation）のいずれかによって変更される。コンテキスト・スイッチ動作では、現行プログラム・カウンタ値は、実行中のプログラムに関する他の状態情報（条件コードなど）とともにＰＳＷに保存され、実行すべき新しいプログラム・モジュールの命令を指し示す新しいプログラム・カウンタ値がロードされる。分岐実行動作は、分岐命令の結果をプログラム・カウンタ３１１にロードすることによりプログラム内で決定またはループを行うことをプログラムが許可するために実行される。
【００３０】
一実施形態では、命令フェッチ・ユニット３０５は、プロセッサ１０６のために命令をフェッチするために使用される。命令フェッチ・ユニット３０５は、「次の順次命令」、分岐実行命令のターゲット命令、またはコンテキスト・スイッチに続くプログラムの第１の命令のいずれかをフェッチする。一実施形態では、命令フェッチ・ユニット３０５は、プリフェッチされた命令が使用される見込みに基づいて命令を投機的にプリフェッチするためのプリフェッチ技法を使用する。たとえば、命令フェッチ・ユニット３０５は、次の順次命令とその後の順次命令の追加バイトとを含む、１６バイト分の命令をフェッチすることができる。
【００３１】
次に、フェッチされた命令はプロセッサ１０６によって実行される。一実施形態では、フェッチされた命令（複数も可）は、命令フェッチ・ユニット３０５のデコード／ディスパッチ・ユニット３０６に渡される。デコード／ディスパッチ・ユニット３０６は、命令（複数も可）をデコードし、デコードされた命令（複数も可）に関する情報を適切な実行ユニット３０７、３０８、あるいは３１０、またはこれらの組み合わせに転送する。実行ユニット３０７は、命令フェッチ・ユニット３０５からデコードされた算術命令に関する情報を受け取り、命令の演算コード（命令コード）に応じてオペランドについて算術演算を実行する。オペランドは、メモリ１０５、設計済みレジスタ３０９、または実行中の命令の即値フィールドのいずれかから実行ユニット３０７に提供される。実行の結果は、保管される場合、メモリ１０５、設計済みレジスタ３０９、またはその他のマシン・ハードウェア（制御レジスタ、ＰＳＷレジスタなど）のいずれかに保管される。
【００３２】
プロセッサ１０６は、典型的に、命令の機能を実行するための１つまたは複数の実行ユニット３０７、３０８、および３１０を有する。図６を参照すると、実行ユニット３０７は、インターフェース・ロジック４０７により、設計済みレジスタ３０９、デコード／ディスパッチ・ユニット３０６、ロード／ストア・ユニット３１０、およびその他のプロセッサ・ユニット４０１と通信することができる。実行ユニット３０７は、算術論理演算装置（ＡＬＵ）４０２が操作する情報を保持するためにいくつかのレジスタ回路４０３、４０４、および４０５を使用することができる。ＡＬＵ４０２は、加算、減算、乗算、および除算などの算術演算、ならびに論理積、論理和、および排他的論理和（ＸＯＲ）などの論理関数、循環および桁送りを実行する。一実施形態では、ＡＬＵは、設計に依存する特殊演算をサポートする。その他の回路は、たとえば、条件コードおよびリカバリ・サポート・ロジックを含む、その他の設計済み機構４０８を提供することができる。典型的に、ＡＬＵ演算の結果は出力レジスタ回路４０６に保持され、そのレジスタ回路はその結果を様々なその他の処理機能に転送することができる。その他の実施形態には、多くのプロセッサ・ユニット配置が存在し、この説明は、一実施形態の代表的な理解を提供するためのものである。
【００３３】
たとえば、ＡＤＤ命令は、算術論理演算機能を有する実行ユニット３０７で実行され、たとえば、浮動小数点命令は、特殊浮動小数点機能を有する浮動小数点実行ユニット（図示せず）で実行されることになる。好ましくは、実行ユニットは、命令によって識別されたオペランドについて命令コードで定義された関数を実行することにより、そのオペランドについて操作する。たとえば、ＡＤＤ命令は、その命令のレジスタ・フィールドによって識別された２つの設計済みレジスタ３０９内で見つかったオペランドについて実行ユニット３０７によって実行することができる。
【００３４】
実行ユニット３０７は、２つのオペランドについて算術加算を実行し、その結果を第３のオペランドに保管し、そこで第３のオペランドは第３のレジスタまたは２つのソース・レジスタのうちの１つになる可能性がある。実行ユニット３０７は、好ましくは、桁送り、循環、論理積、論理和、およびＸＯＲなどの様々な論理関数、ならびに加算、減算、乗算、除算のうちのいずれかを含む様々な代数関数を実行できる算術論理演算装置（ＡＬＵ）４０２を使用する。いくつかのＡＬＵ４０２はスカラ演算用に設計され、いくつかのＡＬＵは浮動小数点用に設計されている。諸実施形態では、データは、アーキテクチャ次第で、ビッグ・エンディアン（最下位のバイトが最上位バイト・アドレスにある場合）またはリトル・エンディアン（最下位のバイトが最下位バイト・アドレスにある場合）になる可能性がある。ＩＢＭ  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅはビッグ・エンディアンである。符号付きフィールドは、アーキテクチャ次第で、符号と絶対値、１の補数、または２の補数になる可能性がある。２の補数の負の値または正の値のいずれか一方はＡＬＵ内で加算のみを必要とするので、ＡＬＵは減算機能を設計する必要がないという点で、２の補数は有利である。数値は一般に省略表現で記載され、１２ビット・フィールドは４０９６バイト・ブロックのアドレスを定義するものであり、一般に、たとえば、４Ｋバイト（キロバイト）ブロックとして記載される。
【００３５】
図７を参照すると、分岐命令を実行するための分岐命令情報は、典型的に、分岐ユニット３０８に送られ、その分岐ユニットは分岐履歴テーブル４３２などの分岐予測アルゴリズムを使用して、その他の条件付き操作が完了する前に分岐の結果を予測する。現行分岐命令のターゲットは、条件付き操作が完了する前にフェッチされ、投機的に実行される。条件付き操作が完了すると、投機的に実行された分岐命令が、その条件付き操作の条件および投機された結果に基づいて、完了するかまたは廃棄される。典型的な分岐命令は、条件コードをテストし、条件コードが分岐命令の分岐要件を満たす場合にターゲット・アドレスに分岐することができ、ターゲット・アドレスは、たとえば、命令のレジスタ・フィールドまたは即値フィールド内で見つかった１を含むいくつかの数値に基づいて計算することができる。一実施形態では、分岐ユニット３０８は、複数の入力レジスタ回路４２７、４２８、および４２９と１つの出力レジスタ回路４３０とを有するＡＬＵ４２６を使用することができる。分岐ユニット３０８は、たとえば、汎用レジスタ、デコード／ディスパッチ・ユニット３０６、またはその他の回路４２５と通信することができる。
【００３６】
命令グループの実行は、たとえば、オペレーティング・システムによって開始されたコンテキスト・スイッチ、コンテキスト・スイッチを引き起こすプログラム例外またはエラー、コンテキスト・スイッチを引き起こす入出力割り込み信号、または（マルチスレッド環境において）複数のプログラムのマルチスレッディング・アクティビティを含む、様々な理由で割り込むことができる。一実施形態では、コンテキスト・スイッチ・アクションは、現在実行中のプログラムに関する状態情報を保存し、次に、呼び出し中の他のプログラムに関する状態情報をロードする。状態情報は、たとえば、ハードウェア・レジスタまたはメモリ内に保存することができる。状態情報は、実行すべき次の命令を指し示すプログラム・カウンタ値、条件コード、メモリ変換情報、および設計済みレジスタの内容を含む。コンテキスト・スイッチ・アクティビティは、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、またはファームウェア・コード（マイクロコード、ピココード、またはライセンスを受けた内部コード（ＬＩＣ））を単独でまたは組み合わせて実行することができる。
【００３７】
プロセッサは、命令で定義された方法に応じてオペランドにアクセスする。この命令は、命令の一部分の値を使用して即値オペランドを提供することができ、汎用レジスタまたは特殊目的レジスタ（たとえば、浮動小数点レジスタ）のいずれかを明示的に指し示す１つまたは複数のレジスタ・フィールドを提供することができる。この命令は、命令コード・フィールドによってオペランドとして識別された暗黙レジスタを使用することができる。この命令は、オペランド用のメモリ位置を使用することができる。オペランドのメモリ位置は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの長変位機構によって例証されているように、レジスタ、即値フィールド、またはレジスタと即値フィールドの組み合わせによって提供することができ、この命令は、メモリ内のオペランドのアドレスを提供するためにまとめて加算される基底レジスタ、指標レジスタ、および即値フィールド（変位フィールド）を定義する。本明細書における位置は、他の指示がない限り、メイン・メモリ（主記憶装置）内の位置を示している。
【００３８】
図８を参照すると、プロセッサはロード／ストア・ユニット３１０を使用して記憶装置にアクセスする。ロード／ストア・ユニット３１０は、キャッシュ／メモリ・インターフェースを介してメモリ内のターゲット・オペランドのアドレスを入手し、そのオペランドを設計済みレジスタ３０９または他のメモリ位置にロードすることによってロード操作を実行する場合もあれば、メモリ内のターゲット・オペランドのアドレスを入手し、設計済みレジスタ３０９または他のメモリ位置から入手したデータをメモリ内のターゲット・オペランド位置に保管することによってストア操作を実行する場合もある。ロード／ストア・ユニット３１０は、投機的である可能性があり、命令シーケンスに対して順不同の順番でメモリにアクセスすることができるが、ロード／ストア・ユニット３１０は命令が順序正しく実行されたという外観をプログラムに対して維持する。ロード／ストア・ユニット３１０は、設計済みレジスタ３０９、デコード／ディスパッチ・ユニット３０６、キャッシュ／メモリ・インターフェースまたはその他の要素４５５と通信することができ、記憶アドレスを計算し、操作を正しい順序に保持するためのパイプライン順序づけを提供するために、様々なレジスタ回路、ＡＬＵ４５８、および制御ロジック４６３を含む。いくつかの操作は順不同になる可能性があるが、ロード／ストア・ユニットは、当技術分野で周知のように、順不同の操作が順序正しく行われたようにプログラムには見えるようにするための機能を提供する。
【００３９】
好ましくは、アプリケーション・プログラムが「見る」アドレスは仮想アドレスと呼ばれる場合が多い。仮想アドレスは、時には、「論理アドレス」および「実効アドレス」と呼ばれる。このような仮想アドレスは、オフセット値で仮想アドレスに接頭辞を付けること、１つまたは複数の変換テーブルを介して仮想アドレスを変換すること、変換テーブルが少なくとも１つのセグメント・テーブルとページ・テーブルとを単独でまたは組み合わせて含むこと、好ましくは、セグメント・テーブルがページ・テーブルを指し示す項目を有することを含むがこれらに限定されない、図５のＤＡＴ３１２などの様々なＤＡＴ技術の１つによって物理的メモリ位置にリダイレクトされるという点で仮想である。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅでは、リージョン・ファースト・テーブル、リージョン・セカンド・テーブル、リージョン・サード・テーブル、セグメント・テーブル、および任意選択のページ・テーブルを含む、変換階層が提供される。アドレス変換の性能は、仮想アドレスを関連の物理的メモリ位置にマッピングする項目を含む変換索引バッファ（ＴＬＢ）を使用することによって改善される場合が多い。この項目は、ＤＡＴ３１２が変換テーブルを使用して仮想アドレスを変換するときに作成される。仮想アドレスのその後の使用では、低速順次変換テーブル・アクセスではなく、高速ＴＬＢの項目を使用することができる。ＴＬＢの内容は、最長未使用時間（ＬＲＵ）を含む、様々な置換アルゴリズムによって管理することができる。
【００４０】
プロセッサ１０６がマルチプロセッサ・システムのプロセッサである場合、それぞれのプロセッサは、入出力、キャッシュ、ＴＬＢ、およびメモリなどの共用リソースを一貫性のためにインターロックされた状態に保持する責任を負っている。一実施形態では、キャッシュ・コヒーレンスを維持する際に「スヌープ」技術が使用される。スヌープ環境では、それぞれのキャッシュ・ラインには、共用を容易にするために、共用状態、排他状態、変更状態、無効状態などのうちのいずれか１つであるというマークを付けることができる。
【００４１】
図５の入出力ユニット３０４は、たとえば、テープ、ディスク、プリンタ、ディスプレイ、およびネットワークを含む周辺装置に接続するための手段をプロセッサ１０６に提供する。入出力ユニット３０４は、ソフトウェア・ドライバによってコンピュータ・プログラムに提示される場合が多い。ＩＢＭによるｚ／Ｓｅｒｉｅｓなどのメインフレームでは、チャネル・アダプタおよびオープン・システム・アダプタは、オペレーティング・システムと周辺装置との間の通信を提供する、メインフレームの入出力ユニットである。
【００４２】
インスツルメンテーション・データは、プロセッサ１０６の動作に関するデータである。一実施形態では、インスツルメンテーション・データおよびその他のシステム・レベル・メトリクスへのアクセスは、制限されているかまたは使用不能である可能性がある。コンピュータ・プロセッサは、特権状態（privileged state）（またはスーパバイザ状態）および下位特権状態（lesser-privilegedstate）（または問題状態）の下で動作する。特権状態では、プログラムは特権操作を介してすべてのシステム・リソースにアクセスする（たとえば、すべての制御レジスタおよびスーパバイザ・メモリ空間にアクセスする）ことができる。また、特権状態は、特権モードまたはスーパバイザ・モードとも呼ばれる。コンピュータ・プロセッサ上で実行されているオペレーティング・システムは特権状態で動作している可能性がある。下位特権状態は、システム・リソースへのアクセスが限定されている非特権状態（non-privileged state）である。たとえば、下位特権状態で実行されているアプリケーション・プログラムは、制御レジスタへのアクセスが限られているかまたはまったくアクセスできない可能性があり、オペレーティング・システムによってアプリケーション・プログラムに割り当てられたユーザ・メモリ空間のみにアクセスすることができる。下位特権状態は、典型的に、オペレーティング・システムの制御下で実行されるアプリケーション・プログラムに割り当てられ、いかなる特権操作も下位特権状態で実行することはできない。また、下位特権状態は、問題状態、問題モード、またはユーザ・モードとしても知られている。
【００４３】
下位特権状態で実行中のプログラムにとって書き込みアクセス不能であって、このように制限されたリソースの１つは、プログラム状況ワード（ＰＳＷ）である。ＰＳＷは、実行すべき次の命令のプログラム・カウンタと、分岐命令によって使用可能な条件コード・フィールドと、インスツルメンテーションが使用可能であるかまたは使用不可であるかを示すためのインスツルメンテーション制御フィールドと、命令の順序付けを制御し、プログラムに割り当てられた特権状態を含むコンピュータ・プロセッサの状態を判断するために使用されるその他の情報とを含むことができる。マルチスレッド処理環境では、複数のプログラムが使用可能なコンピュータ・プロセッサのキャパシティを共用するかまたはタイム・スライシングする。プログラムのそれぞれは、関連のＰＳＷ、プログラムに割り当てられた主記憶装置にアクセスするためのアドレス変換テーブルの起点アドレス、１組の汎用レジスタ現行値、制御レジスタ、浮動小数点レジスタなどを含む、コンテキスト情報を有する。現在アクティブであるかまたは制御中のＰＳＷは現ＰＳＷと呼ばれる。これは、現在実行中のプログラムを管理する。コンピュータ・プロセッサは、例外条件および外部刺激に応答してコンピュータ・プロセッサが迅速に他のプログラムにコンテキスト・スイッチできるようにする割り込み機能を有する。割り込みが行われると、コンピュータ・プロセッサは、その特定のクラスの割り込みについて、旧ＰＳＷ位置と呼ばれる割り当て記憶位置に現ＰＳＷを入れる。コンピュータ・プロセッサは第２の割り当て記憶位置から新ＰＳＷをフェッチする。この新しいコンテキストは実行すべき次のプログラムを決定する。一実施形態では、これらの記憶位置はコンピュータ・プロセッサにとってアクセス可能なメモリ位置内に位置する。コンピュータ・プロセッサが割り込みの処理を終了すると、割り込みを処理するプログラムは、旧ＰＳＷを含む古いコンテキストをリロードし、もう一度それを現ＰＳＷにすることができ、その結果、割り込まれたプログラムは続行することができる。
【００４４】
ＰＳＷのフィールドは、明示的に（たとえば、命令実行がＰＳＷビットの一部を読み取る場合）または暗黙的に（たとえば、命令フェッチ、オペランド・フェッチ、アドレス生成計算、アドレス生成ソースなどにおいて）のいずれかで参照することができる。明示参照は一般に実行時に行われ、暗黙参照は一般に命令実行中のパイプラインの種々のステージ（すなわち、命令フェッチ、命令デコード、実行時、および完了時）で行われる。ＰＳＷ内の個々のフィールドは、互いに独立して参照または更新することができる。
【００４５】
一実施形態では、コンテキストを操作することにより、オペレーティング・システムは、コンピュータ・プロセッサによるランタイム・インスツルメンテーションを使用可能にすることを含む、コンピュータ処理リソースを制御する。ランタイム・インスツルメンテーションは、オペレーティング・システムの実行中に、ならびにオペレーティング・システムによって実行される任意のソフトウェア・アプリケーションにより、使用可能または使用不可にすることができる。ランタイム・インスツルメンテーションの使用可能／使用不可状態は、プログラムに関連するＰＳＷ内にコンテキスト情報として保存される。
【００４６】
ランタイム・インスツルメンテーション（ＲＩ）機構は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅを実現するモデルで取り入れることができる。ＲＩ機構がインストールされ使用可能になると、データは、プログラム実行中にＣＰＵ内の１つまたは複数の収集バッファに収集され、その後、プログラム・バッファに報告される。保管されたそれぞれの情報単位は報告グループと呼ばれる。１つの報告グループの内容は複数のレコードで構成され、そのレコードの内容はプログラム実行中にＣＰＵによって認識されたイベントを表している。
【００４７】
ランタイム・インスツルメンテーション機構が構成にインストールされると、ＰＳＷフィールド（ＲＩビット）はランタイム・インスツルメンテーションを使用可能にする。ランタイム・インスツルメンテーション・コントロールの妥当性は、ＲＩビットをオンにする能力を決定するが、ＲＩが１である場合、ＣＰＵコントロールは有効であり、ランタイム・インスツルメンテーションは使用可能になる。ランタイム・インスツルメンテーション機構は、ランタイム・インスツルメンテーション・コントロール・ロード、ランタイム・インスツルメンテーション・コントロール変更、ランタイム・インスツルメンテーション放出、ランタイム・インスツルメンテーション・ネクスト、ランタイム・インスツルメンテーション・オフ、ランタイム・インスツルメンテーション・オン、ランタイム・インスツルメンテーション・コントロール・ストア、およびランタイム・インスツルメンテーション・コントロール・テストという命令を含むことができる。
【００４８】
ランタイム・インスツルメンテーション・コントロール・ロード（ＬＲＩＣ）命令は、ランタイム・インスツルメンテーションを管理するランタイム・インスツルメンテーション・コントロールを初期設定するものである。ランタイム・インスツルメンテーション・コントロール変更（ＭＲＩＣ）命令は、ＬＲＩＣによって当初確立されたランタイム・インスツルメンテーション・コントロールのすべてまたはサブセットを変更するものである。ランタイム・インスツルメンテーション放出（ＲＩＥＭＩＴ）命令は、収集バッファにそれを保管することにより、汎用レジスタの値を収集するものである。ランタイム・インスツルメンテーション・ネクスト（ＲＩＮＥＸＴ）命令は、ＲＩＮＥＸＴ後に次の順次命令（ＮＳＩ）の指示サンプリングを実行するものである。ランタイム・インスツルメンテーション・オフ（ＲＩＯＦＦ）命令は、ランタイム・インスツルメンテーションを使用不可にするものである。ランタイム・インスツルメンテーション・オン（ＲＩＯＮ）命令は、ランタイム・インスツルメンテーションを使用可能にするものである。ランタイム・インスツルメンテーション・コントロール・ストア（ＳＴＲＩＣ）命令は、ランタイム・インスツルメンテーション・コントロールの現行値を指定の記憶位置に入れるものである。ランタイム・インスツルメンテーション・コントロール・テスト（ＴＲＩＣ）命令は、ランタイム・インスツルメンテーション・コントロールを検査するものである。有効である場合、コントロール変更インジケータ（controls-altered indicator）の状態が設定される。
【００４９】
ランタイム・インスツルメンテーション機構は、測定アラート外部割り込みを保留にするための能力を含む。ランタイム・インスツルメンテーションによって収集され、プログラム・バッファに報告される情報の一部は、モデルに依存するものであり、したがって、定義されていない。ランタイム・インスツルメンテーション機構によって提供されるサンプルおよびデータは、性能特性の統計的推定のためのものであり、実質的に正確なものであり、反復可能ではない可能性がある。たとえば、サンプリング・モードにかかわらず、例外を引き起こしたかまたは特定のシステム内部アクティビティに関連するサンプル命令の結果、報告グループの保管が行われるかどうか、ならびに、保管された場合にランタイム・インスツルメンテーション・データに含まれるモデル依存データが影響を受けるかどうかは予測不能である。
【００５０】
収集バッファは、１組のレコードを取り込むために使用され、そのレコードの内容はプログラム実行中にプロセッサによって認識されたイベントについて報告するものである。例としては、１つまたは複数の実行分岐（taken branch）の実行、トランザクション実行アボート・イベント、命令フェッチ・キャッシュ・ミス、データ・フェッチまたはストア・キャッシュ・ミス、ＲＩＥＭＩＴ命令のオペランドなどがある。ＲＩＥＭＩＴ命令の実行は、収集バッファにそれを保管することにより、汎用レジスタの値を収集する。追加のデータは、命令データ・バッファなどのその他のバッファに収集するかあるいは保管するかまたはその両方を行うことができる。
【００５１】
報告は報告コントロールの対象となる。サンプル命令が識別されると、それぞれの報告コントロールは対応する条件のチェックを使用可能にする。対応する条件が存在する場合、報告グループが形成され保管される。いかなる報告コントロールも使用可能ではないかまたは使用可能になっている報告コントロールについて対応する条件が存在しない場合、報告グループは保管されない。サンプル命令について報告されたデータは、命令データ・バッファおよびその他のモデル依存ソースから取得され、その後、報告グループの１つまたは複数のレコードの内容を作成するために使用され、このようなレコードの１つは命令レコードである。
【００５２】
報告グループ・ストアに取り込むことができるレコード・タイプとしては、フィラー、エクストラ、開始、タイムスタンプ、命令、放出、ＴＸアボート、呼び出し、戻り、および転送を含む。フィラー・レコード（filler record）は、収集バッファ内の有効なレコードの数が現行報告グループ・サイズの報告グループをいっぱいにするには不十分であるときに報告グループ内で使用される。エクストラ・レコード（extra record）は、報告グループのエクストラ・セクション内で使用することができる。開始レコード（begin record）は、第１の報告グループの第１のレコードである。タイムスタンプ・レコード（timestamp record）は、第１の報告グループ以外のすべての報告グループのレコード０として保管される。命令レコード（instruction record）は、ある報告グループがその報告グループの最後のレコードとしてサンプル命令について保管されるときに作成される。放出レコード（emit record）は、ＲＩＥＭＩＴの正常実行によって作成される。トランザクション実行（ＴＸ）モード・アボート・レコード（transaction-execution mode abort record）は、暗黙アボートまたはトランザクション・アボート命令の実行のいずれかによって作成される。呼び出しレコード（call record）は、呼び出しタイプの分岐命令としてカテゴリ化された分岐命令の実行によって作成される。戻りレコード（return record）は、戻り命令としてカテゴリ化された戻りタイプの分岐命令の実行によって作成される。転送レコード（transfer record）は、特定の条件コード基準を満たす分岐命令の実行によって作成される。
【００５３】
図９は、一実施形態において実現することができるプロセッサのランタイム・インスツルメンテーションのためのシステムの概略図である。一実施形態では、システム５００は図１のプロセッサ１０６などの中央演算処理装置（ＣＰＵ）を含む。一実施形態では、プロセッサ１０６はシングル・プロセッサである。代替一実施形態では、プロセッサ１０６はマルチコア・プロセッサの単一処理コアである。一実施形態では、プロセッサ１０６は可変速度で動作することができる。
【００５４】
一実施形態では、プロセッサ１０６はレジスタ５１０をさらに含む。レジスタ５１０は、プロセッサ１０６によって使用するためのデータ・ワードを保管することができるハードウェア・レジスタである。レジスタ５１０は、プロセッサ１０６によってアクセス可能なデータ・ビットを保管するための１つまたは複数のラッチを含む。レジスタ５１０は、たとえば、汎用レジスタおよび制御レジスタを含むことができる。プロセッサ１０６は、レジスタ５１０と通信状態にあるインスツルメンテーション・モジュール５０６をさらに含む。インスツルメンテーション・モジュール５０６は、プロセッサ１０６のインスツルメンテーションを制御する処理回路である。インスツルメンテーション・モジュール５０６は、１つまたは複数の実行分岐の実行パス、トランザクション実行アボート・イベント、様々なランタイム・オペランド、タイムスタンプ情報などのインスツルメンテーション・データをプロセッサ１０６から直接収集するように構成される。インスツルメンテーション・モジュール５０６は、プロセッサ１０６からインスツルメンテーション・データを収集し、収集バッファ５０８にインスツルメンテーション・データを保管する。一実施形態では、収集バッファ５０８は、インスツルメンテーション・モジュール５０６から受け取ったデータを収集するサーキュラ・バッファであり、サーキュラ・バッファは、いっぱいになると、新しいデータで最も古いデータを上書きする。
【００５５】
プロセッサ１０６は、１つまたは複数のオペレーティング・システム５１６と１つまたは複数のアプリケーション５１８とを実行する。１つまたは複数のオペレーティング・システム５１６と１つまたは複数のアプリケーション５１８は、ハード・ディスク、ＣＤ／ＲＯＭ、フラッシュ・メモリなどの記憶装置５２０に保管され、現在実行中のオペレーティング・システムあるいはアプリケーションまたはその両方の１つまたは複数のアクティブ部分を保管するために予約されたメイン・メモリ５１４内のランタイム・メモリ５０４のエリアにロードされ、そのアクティブ部分はページと呼ばれ、必要に応じて記憶装置５２０からランタイム・メモリ５０４にロードされる。一実施形態では、それぞれのオペレーティング・システムは、ハイパバイザ（図示せず）によって管理され、プロセッサ１０６によって実行される仮想計算機として実行される。
【００５６】
一実施形態では、プロセッサ１０６は、メイン・メモリ５１４から現在実行中のオペレーティング・システムまたはアプリケーションについてメイン・メモリ５１４内のＰＳＷデータ５１２からＰＳＷ５１２をレジスタ５１０にロードし、たとえば、レジスタ５１０内に１つまたは複数のプロセッサ設定を設定する。一実施形態では、レジスタ５１０内のＰＳＷは、インスツルメンテーション・モジュール５０６を使用可能にし制御するための１つまたは複数のビットを含む。
【００５７】
１つまたは複数のアプリケーション５１８は、特定のオペレーティング・システム上で実行されるようにコンパイルされたソフトウェア・アプリケーション、インタープリタ（たとえば、Ｊａｖａ（ＴＭ））上で実行される解釈済みコード、またはオペレーティング・システム・サポート・スレッド（たとえば、プロセス管理、デーモンなど）を含む。１つまたは複数のオペレーティング・システム５１６あるいは１つまたは複数のアプリケーション５１８またはその両方のそれぞれは、インスツルメンテーション・データの収集を開始または停止するようインスツルメンテーション・モジュール５０６をトリガするための命令を実行することができる。
【００５８】
一実施形態では、１つまたは複数のアプリケーション５１８のうちの１つは、サンプル命令であると判断された命令を実行し、それにより、サンプル命令の実行完了時にサンプル・ポイントを作成し、次に、インスツルメンテーション・モジュール５０６により、アプリケーションが収集したデータを収集バッファ５０８からアプリケーションにとってアクセス可能なメイン・メモリ５１４内のプログラム・バッファ５２２に移動する。メイン・メモリ５１４は、当技術分野で既知の任意のアドレス指定可能なメモリにすることができる。一実施形態では、メイン・メモリ５１４は、時にはキャッシュと呼ばれる高速アクセス・バッファ記憶装置を含むことができる。それぞれのＣＰＵは関連のキャッシュを有することができる。追加の一実施形態では、メイン・メモリ５１４はダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）である。さらに他の一実施形態では、メイン・メモリは、アプリケーションによってアクセス可能なコンピュータ・ハード・ディスクまたはフラッシュ・メモリなどの記憶装置である。
【００５９】
ランタイム・インスツルメンテーション・コントロールを構成するために、プロセッサ１０６はランタイム・インスツルメンテーション・コントロール・ロード（ＬＲＩＣ）命令をサポートする。本明細書でさらに説明する特定のＬＲＩＣフィールド以外に、その他の機能性をサポートするために追加のフィールドを定義できることが理解されるであろう。ＬＲＩＣ命令は、ランタイム・インスツルメンテーションをロードし、最初にこれを構成するために使用することができ、図９のインスツルメンテーション・モジュール５０６によってサポートされる。一実施形態では、インスツルメンテーション・モジュール５０６は、ランタイム・インスツルメンテーション・モジュール５０６とも呼ばれ、ランタイム・インスツルメンテーション・コントロールおよび報告コントロールを実現する。ランタイム・インスツルメンテーション・コントロールの現行状態は、ランタイム・コントロール・ストア（ＳＴＲＩＣ）命令を使用して図９のレジスタ５１０からメイン・メモリ５１４に保管することができる。本明細書では、ランタイム・インスツルメンテーション・コントロールの対応する値の状態に言及するために、ＬＲＩＣ命令のオペランドとしてロード可能な制御ブロックの様々なフィールドの定義も使用される。
【００６０】
図１０は、一実施形態において特権状態によって設定可能なコントロールを含むランタイム・インスツルメンテーション・コントロール制御ブロック（ＲＩＣＣＢ）の一部分を描写している。制御ブロックの一部分６００は、図１０に関連して記載されているもの以外の追加の値を含むことができる。制御ブロックの一部分６００に対する変更は、ＬＲＩＣ命令によって実行することができる。
【００６１】
制御ブロックのこの部分は妥当性ビット６０２（Ｖビット）を含む。プロセッサ内のランタイム・インスツルメンテーション・コントロールは以前ＬＲＩＣ命令によって設定されているので、妥当性ビット６０２はその設定の妥当性を示すものである。
【００６２】
制御ブロックは、下位特権状態プログラムがＭＲＩＣ命令を実行することが許可されているかどうかを判断するために使用されるＳビット６０４も含む。Ｋビット６０６は、下位特権状態プログラムが、起点アドレスおよびランタイム・インスツルメンテーション・コントロールの限界アドレスなどのランタイム・インスツルメンテーション・コントロールに関して半特権状態（semi-privileged state）で実行することが許可されているかどうかを示す。Ｈビット６０８は、アドレス・コントロール（すなわち、起点アドレス、限界アドレス、および現行アドレス）が１次仮想アドレス空間またはホーム仮想アドレス空間を参照するかどうかを判断する。０ビット６１０は、無視され、０として扱われる。
【００６３】
下位特権状態サンプル報告制御ビット６１２（Ｐｓビット）は下位特権状態プログラムに併せて使用される。下位特権状態にあって、ランタイム・インスツルメンテーション・コントロール内のＰｓビット６１２が０である場合、ランタイム・インスツルメンテーション・コントロールの報告コントロールは、ランタイム・インスツルメンテーションが使用可能であるときに無視され、したがって、報告グループを保管させない。下位特権状態にあって、ランタイム・インスツルメンテーション・コントロール内のＰｓビット６１２が１である場合、報告コントロールは、チェックされ、その定義済み機能に応じて使用される。
【００６４】
スーパバイザ状態サンプル報告制御ビット６１４（Ｑｓビット）はスーパバイザ状態プログラムに併せて使用される。スーパバイザ状態にあって、ランタイム・インスツルメンテーション・コントロール内のＱｓビット６１４が０である場合、ランタイム・インスツルメンテーション・コントロールの報告コントロールは、ランタイム・インスツルメンテーションが使用可能であるときに無視され、したがって、報告グループを保管させない。スーパバイザ状態にあって、ランタイム・インスツルメンテーション・コントロール内のＱｓビット６１４が１である場合、報告コントロールは、チェックされ、その定義済み機能に応じて使用される。
【００６５】
下位特権状態収集バッファ制御ビット６１６（Ｐｃビット）は図９の収集バッファ５０８に対する更新を制御する。下位特権状態にあって、ランタイム・インスツルメンテーション・コントロール内のＰｃビット６１６が０である場合、ランタイム・インスツルメンテーション・コントロールの収集バッファ・コントロールは、ランタイム・インスツルメンテーションが使用可能であるときに無視され、収集バッファ５０８の更新は防止される。下位特権状態にあって、ランタイム・インスツルメンテーション・コントロール内のＰｃビット６１６が１である場合、収集バッファ・コントロールは、チェックされ、その定義済み機能に応じて使用される。
【００６６】
スーパバイザ状態収集バッファ制御ビット６１８（Ｑｃビット）は収集バッファ５０８に対する更新を制御する。スーパバイザ状態にあって、ランタイム・インスツルメンテーション・コントロール内のＱｃビット６１８が０である場合、ランタイム・インスツルメンテーション・コントロールの収集バッファ・コントロールは、ランタイム・インスツルメンテーションが使用可能であるときに無視され、収集バッファ５０８の更新は防止される。スーパバイザ状態にあって、ランタイム・インスツルメンテーション・コントロール内のＱｃビット６１８が１である場合、指示された収集バッファ・コントロールは、チェックされ、その定義済み機能に応じて使用される。
【００６７】
Ｇビット６２０は、休止割り込みとも呼ばれるランタイム・インスツルメンテーション休止割り込みの保留コントロールである。Ｇビット６２０が０である場合、休止割り込みは保留にならない。Ｇビット６２０が１である場合、休止割り込みは保留になる。プログラム・バッファ５２２内の第１の報告グループが書き込まれると、Ｇビット６２０は０に設定される。すなわち、ランタイム・インスツルメンテーション・プログラム・バッファ起点アドレス（ＲＯＡ）７０２が図１１のランタイム・インスツルメンテーション・プログラム・バッファ現行アドレス（ＲＣＡ）７０６と等しい場合、Ｇビット６２０は０に設定される。プログラム・バッファ５２２内に第１の報告グループ以外のものを保管しようという試みが行われると、Ｇビット６２０は、ランタイム・インスツルメンテーション休止条件が存在しない場合に０に設定され、報告グループは保管される。プログラム・バッファ５２２内に第１の報告グループ以外のものを保管しようという試みが行われると、Ｇビット６２０は、ランタイム・インスツルメンテーション休止条件が存在する場合に１に設定され、報告グループは保管されない。
【００６８】
Ｕビット６２２は、バッファ・フル割り込み（buffer-fullinterruption）および休止割り込みに関する使用可能化コントロールである。Ｕビット６２２が０である場合、割り込み要求の生成は使用不可になり、保留である場合、保留のままになる。
【００６９】
Ｌビット６２４はバッファ・フル割り込みの保留コントロールである。Ｌビット６２４が０である場合、バッファ・フル割り込みは保留にならない。Ｌビット６２４が１である場合、バッファ・フル割り込みは保留になる。
【００７０】
キー・フィールド６２６は、その値が報告グループのストアに関する記憶保護キーとして使用される、４ビットの符号なし整数である。報告グループのストアは、記憶キーが記憶アクセスに関する要求に関連するアクセス・キーと一致する場合にのみ許可され、フェッチは、記憶キーがアクセス・キーと一致する場合または記憶キーのフェッチ保護ビットが０である場合に許可される。記憶キーの４つのアクセス制御ビットがアクセス・キーと等しい場合またはアクセス・キーが０である場合にキー同士が一致する。
【００７１】
図１１は、ＭＲＩＣが半特権モードで実行することが許可されている（すなわち、Ｋビットが１である）場合のＲＩＣＣＢ制御ブロックの一部分を描写している。制御ブロック７００は、ランタイム・インスツルメンテーション・コントロールの初期設定のためのＬＲＩＣ命令のオペランドにすることもできる。制御ブロック７００は、図１１に関連して記載されているもの以外の追加の値を含むことができる。一実施形態では、ＭＲＩＣ命令オペランドのうち、他の指定が行われていないセクションは、下位特権状態プログラムによってアクセス不能である。半特権モードが許可されると、ランタイム・インスツルメンテーション・プログラム・バッファ起点アドレス（ＲＯＡ）７０２およびランタイム・インスツルメンテーション・プログラム・バッファ限界アドレス（ＲＬＡ）７０４は下位特権状態プログラムによってＭＲＩＣ命令とともに設定される。ＲＯＡ７０２は、図９のプログラム・バッファ５２２の最初のバイトの位置である。ＲＬＡ７０４は、プログラム・バッファ５２２の最後のバイトの位置を示している。
【００７２】
一実施形態では、ランタイム・インスツルメンテーション・プログラム・バッファ現行アドレス（ＲＣＡ）７０６は、ＭＲＩＣ命令によって更新することができる。ＲＣＡ７０６は、保管すべき次の報告グループのプログラム・バッファ５２２内の位置である。ＲＣＡ７０６は、報告グループ・サイズ・フィールド７４４（ＲＧＳフィールド）を検査し、プログラム・バッファ５２２のアドレスを形成するために使用される有効ビット位置の数に影響を及ぼす。６４ビットのＲＣＡ７０６は、ワード０、ワード１のビット位置０〜２６−ＲＧＳ、および右に付加されたＲＧＳ＋５つの２進０である。これは、プログラム・バッファ５２２に保管されるその後の報告グループの、図９のプログラム・バッファ５２２内の開始位置である。報告グループは、インスツルメンテーション・モジュール５０６によって作成され、その後、プログラム・バッファ５２２に保管される情報単位である。一実施形態では、ＲＣＡ７０６によって指定されたＲＧＳフィールド７４４がランタイム・インスツルメンテーション・コントロールの現行報告グループ・サイズと等しくない（すなわち、ＲＣＡ７０６がＲＧＳフィールド７４４を変更することになる）場合、ＲＣＡ７０６はＲＯＡ７０２に設定される。
【００７３】
残存サンプル間隔カウント・フィールド７４２（ＲＳＩＣフィールド）は、ＭＲＩＣ命令を使用して下位特権プログラムによって更新することができる。ＲＳＩＣフィールド７４２は、残存サンプル間隔カウントを示す６４ビットの符号なし整数を含む。ランタイム・インスツルメンテーション・コントロール内のＲＳＩＣフィールド７４２の値が０であるかまたはスケーリング・ファクタ・フィールド７４０（ＳＦフィールド）内の値と等しく、ランタイム・インスツルメンテーションが使用可能である場合、次のサンプル間隔は、サンプリング・モード７０８（Ｍ）およびＳＦフィールド７４０の値に基づいて完全間隔になる。ＲＳＩＣフィールド７４２が非ゼロであり、ＳＦフィールド７４０より小さく、ランタイム・インスツルメンテーションが使用可能である場合、次のサンプル間隔は部分間隔になる。ＲＳＩＣフィールド７４２が非ゼロであり、ＳＦフィールド７４０の値より大きく、ランタイム・インスツルメンテーションが使用可能である場合、次のサンプル間隔は延長間隔になる。延長間隔が切れると、次の間隔はＳＦフィールド７４０の値に基づくものになる。ＲＳＩＣフィールド７４２が非ゼロ値に設定されると、そのフィールドは、ＳＦフィールド７４０も対象となる同じモデル依存最大限界の対象となる。ＲＳＩＣフィールド７４２の元の値が０である場合、サンプリング・モードは、ＲＳＩＣフィールド７４２がＬＲＩＣおよびＭＲＩＣ命令の実行中にＳＦフィールド７４０内の値に設定されるかどうかあるいはランタイム・インスツルメンテーションが使用可能になるまでそれが０を示し続けるかどうかを規定することになる。
【００７４】
ＳＦフィールド７４０は、その値がユニットのスケーリング・ファクタ・カウントである、６４ビットの符号なし整数を含む。ユニットの寸法はモード・フィールド７０８（Ｍフィールド）から決定される。ＲＳＩＣフィールド７４２内の値が０である場合、ＳＦフィールド７４０は、０まで減分されるＲＳＩＣフィールド７４２の初期値を提供し、０の時点で現行命令はサンプル命令として認識され、間隔カウントはＳＦフィールド７４０の値からリフレッシュされる。ＳＦフィールド７４０の有効値は１〜２６４−１の範囲内である。０が指定された場合、値１が想定される。しかし、それぞれのモデルはＳＦフィールド７４０の最小値と最大値の両方を有することができる。また、最小値と最大値はモード・フィールド７０８に基づいて異なる可能性もある。最小値より小さい値が指定された場合、モデル依存最小値がロードされる。最大値より大きい値が指定された場合、モデル依存最大値がロードされる。
【００７５】
ＤＣ制御フィールド７３６は、その値がデータ・フェッチまたはストア・キャッシュ・ミスに関連するキャッシュレイテンシ・レベルを指定する、４ビットの符号なし整数である。すなわち、サンプル命令ではデータ・アクセス・キャッシュ・ミスが発生している。他のランタイム・インスツルメンテーション・コントロールによって禁止されない限り、そのデータ・アクセスが数値的にＤＣ制御フィールド７３６の値によって指定されたレベルより高いかまたはそれに等しいキャッシュレイテンシ・レベルでミスを認識したサンプル命令を表す報告グループを保管しようという試みが行われる。データ・アクセスに関するキャッシュ構造およびキャッシュレイテンシ・レベルはモデルに依存する。複数のオペランドまたは長いオペランドを含む命令の場合、オペランド・アクセスが行われる場合、どのオペランド・アクセスが報告コントロールに使用されるかはモデルに依存する。モデル依存挙動は、ＤＣ制御フィールド７３６の値を無視する可能性があり、したがって、報告グループを保管するための理由としてそれを使用しない可能性がある。
【００７６】
ＩＣフィールド７３４は、その値が命令フェッチ・キャッシュ・ミスに関連するキャッシュレイテンシ・レベルを指定する、４ビットの符号なし整数である。すなわち、サンプル命令のフェッチでは命令フェッチ・キャッシュ・ミスが発生している。ＩＣフィールド７３４とＤＣ制御フィールド７３６の両方について、キャッシュレイテンシ・レベルは、特定のキャッシュ・レベル・アクセスが監視プロセッサからどのくらい離れているかを抽象化したものである。レイテンシ・レベルは、プロセッサと主記憶装置との間のネストされたキャッシュ・レベルの量と、このようなキャッシュ・レベルが複数のプロセッサ間で共用される方法との組み合わせによって決まる。より大きいレイテンシ・レベルは一般に、より時間のかかるアクセスに対応する。ＩＣフィールド７３４およびＤＣ制御フィールド７３６内の値は、０を基点とするキャッシュレイテンシ・レベルの識別であると考えることができる。たとえば、０という値はＬ１キャッシュ（すなわち、プロセッサに最も近いキャッシュ）に対応する。したがって、１という値は次の層のキャッシュであり、これはＬ２キャッシュとして知られ、マシンによってはＬ１．５キャッシュとしても知られている可能性がある。２〜１５という値は、メイン・メモリ自体は含まないが、メイン・メモリに到達するまでの追加のキャッシュレイテンシ層の論理的進行を指定する。一般に、キャッシュ構造は１５層もの深さにはならない。したがって、ＩＣフィールド７３４およびＤＣ制御フィールド７３６内の１５という値は特殊ケースとして解釈され、命令フェッチまたはデータ・アクセスに関するキャッシュ・ミスは、それぞれ、キャッシュレイテンシ・レベルにかかわらず、報告グループのストアを生成するために認識されないことを意味する。他のランタイム・インスツルメンテーション・コントロールによって禁止されない限り、そのフェッチが数値的にＩＣフィールド７３４の値によって指定されたレベルより高いかまたはそれに等しいキャッシュレイテンシ・レベルでミスを認識したサンプル命令を表す報告グループを保管しようという試みが行われる。命令フェッチに関するキャッシュ構造およびキャッシュレイテンシ・レベルはモデルに依存する。モデル依存挙動は、ＩＣ制御フィールド７３４の値を無視する可能性があり、したがって、報告グループを保管するための理由としてそれを使用しない可能性がある。
【００７７】
キャッシュレイテンシ・レベル・オーバライド報告制御ビット７３２（Ｆビット）は非分岐命令および分岐予測コントロールに関するものである。ランタイム・インスツルメンテーション・コントロール内のＦビット７３２が０である場合、ランタイム・インスツルメンテーション・コントロールのキャッシュ報告コントロール（ＩＣフィールド７３４およびＤＣ制御フィールド７３６）は、チェックされ、その定義済み機能に応じて使用される。ランタイム・インスツルメンテーション・コントロールの分岐予測コントロール（ＢＰｘｎ７２２、ＢＰｘｔ７２４、ＢＰｔｉ７２６、およびＢＰｎｉ７２８ビット）は、チェックされ、その定義済み機能に応じて使用される。Ｆビット７３２が１である場合、これらの同じコントロールは無視され、他のコントロールによって禁止されない限り、報告グループは保管される。
【００７８】
データキャッシュミス制御ビット７３０（Ｄビット）は、報告グループを保管すべきかどうかを示す。Ｄビット７３０が１である場合、サンプル命令に関するモデル依存データを含む報告グループのエクストラ・セクションにエクストラ・タイプ・レコードが入る場合もあれば、入らない場合もある。
【００７９】
ＭＲＩＣ命令は、分岐予測（ＢＰ）報告コントロール（ＢＰｘｎ７２２、ＢＰｘｔ７２４、ＢＰｔｉ７２６、およびＢＰｎｉ７２８）を含む。ランタイム・インスツルメンテーション・コントロール内のＢＰ報告制御ビットが０である場合、対応する条件はチェックされない。ＢＰ報告制御ビットが１であり、対応する分岐予測条件が存在する場合、報告グループは保管される。
【００８０】
ＢＰｘｎビット７２２は、１である場合、分岐予測情報のチェックを使用可能にする。したがって、サンプル分岐が実行されると間違って予測されたが、実行されなかった場合、報告グループは保管される。
【００８１】
ＢＰｘｔビット７２４は、１である場合、分岐予測情報のチェックを使用可能にする。したがって、サンプル分岐が実行されないと間違って予測されたが、実行された場合、報告グループは保管される。
【００８２】
ＢＰｔｉビット７２６は、１である場合、分岐予測情報のチェックを使用可能にする。したがって、サンプル分岐が実行されると正しく予測されて実行されたが、分岐ターゲットが間違って予測された場合、報告グループは保管される。
【００８３】
ＢＰｎｉビット７２８は、１である場合、分岐予測情報のチェックを使用可能にする。したがって、サンプル分岐が実行されないと正しく予測されて実行されなかったが、分岐ターゲットが間違って予測された場合、報告グループは保管される。
【００８４】
トランザクション実行モード・レコード・ビット７２０（Ｘビット）の使用可能化コントロールは、トランザクション実行モード・アボート・レコードの収集を制御する。ランタイム・インスツルメンテーション・コントロール内のＸビット７２０が０である場合、トランザクション実行モード・アボート・レコードは収集されない。Ｘビット７２０が１である場合、トランザクション実行モード・アボート・レコードは収集され、図９の収集バッファ５０８に入る。モデルにトランザクション実行機構がインストールされていない場合、Ｘビット７２０は無視される。
【００８５】
ＲＩＥＭＩＴ命令制御ビット７１８（Ｅビット）はＲＩＥＭＩＴ命令の実行を制御する。ランタイム・インスツルメンテーション・コントロール内のＥビット７１８が０であるかまたはランタイム・インスツルメンテーションが使用可能であるときに無視され、０として扱われる場合、ＲＩＥＭＩＴはノーオペレーションを実行する。Ｅビット７１８が１であり、その他の点で無視されない場合、ＲＩＥＭＩＴはその定義済み機能を実行することが可能になる。
【００８６】
Ｊビット７４６は、０である場合、マスク値にかかわらず、条件付き分岐（ＢＣ）命令がその他タイプの分岐カテゴリに入ることを指定する。Ｊビット７４６が１である場合、１５というマスクを指定するＢＣ命令は戻りタイプの分岐カテゴリに入る。ＢＣ命令が１〜１４というマスクを指定する場合、これはＪビット７４６による影響を受けず、必ずその他タイプの分岐カテゴリに入る。戻りタイプの分岐カテゴリにある場合、Ｒビット７１６は図９の収集バッファ５０８への含有を制御する。その他タイプの分岐カテゴリにある場合、Ｂビット７４８は収集バッファ５０８への含有を制御する。また、その他タイプの分岐カテゴリは、転送タイプの分岐カテゴリとして示すこともできる。
【００８７】
命令アドレス・コード・ビット７１４（Ｃビット）は呼び出しタイプの分岐の使用可能化を制御する。ランタイム・インスツルメンテーション・コントロール内のＣビット７１４が１であり、その命令が呼び出しタイプの分岐である場合、収集バッファ５０８が更新される。呼び出しタイプと戻りタイプの両方の分岐のモデル依存検出が組み合わされる場合、Ｃビット７１４は両方のタイプについて機能し、Ｒビット７１６は効果的ではない。
【００８８】
Ｒビット７１６は、戻りタイプの分岐の使用可能化コントロールである。ランタイム・インスツルメンテーション・コントロール内のＲビット７１６が１であり、その命令が戻りタイプの分岐である場合、収集バッファ５０８が更新される。
【００８９】
Ｂビット７４８は、呼び出しタイプおよび戻りタイプの分岐以外の分岐の使用可能化コントロールである。ランタイム・インスツルメンテーション・コントロール内のＢビット７４８が１であり、その命令がランタイム・インスツルメンテーションによって認識されたその他タイプの分岐である場合、収集バッファ５０８が更新される。
【００９０】
最大アドレス超過ビット７１２（ＭＡＥビット）は、１に設定された場合、命令アドレス・コード（Ｃフィールド）が１に設定されている１つまたは複数の報告グループが保管されたことを示す。ＭＡＥビット７１２が１に設定されると、ランタイム・インスツルメンテーションの実行を継続しても、その設定を０に戻さない。ＭＡＥビット７１２を０として指定するＬＲＩＣ命令またはＭＲＩＣ命令の実行は、ＭＡＥビット７１２を０に設定することになる。
【００９１】
ランタイム・インスツルメンテーション・ネクスト（ＲＩＮＥＸＴ）制御ビット７１０（Ｎビット）は、ランタイム・インスツルメンテーション・ネクスト命令の使用可能化を制御し、これはサンプル命令の実行を制御する。ランタイム・インスツルメンテーション・コントロール内のＮビット７１０が０であるかまたは無視され、０として扱われる場合、ＲＩＮＥＸＴはノーオペレーションを実行する。Ｎビット７１０が１であり、その他の点で無視されない場合、ＲＩＮＥＸＴはその定義済み機能を実行することが可能になる。
【００９２】
モード・フィールド７０８（Ｍフィールド）は、ランタイム・インスツルメンテーション・コントロール内のその値がランタイム・インスツルメンテーション・コントロールに関するサンプリング・モードを指定する、４ビットの符号なし整数である。サポートされるサンプリング・モードは、ＣＰＵサイクルのカウントあるいは命令のカウントに基づくサンプリングを含むか、サンプル命令に応答してサンプリングするよう指示されるか、もしくは１つまたは複数のサンプル・ポイントを間接的に指定する可能性がある。
【００９３】
報告グループ・サイズ・フィールド７４４（ＲＧＳ）は、その値が報告グループのレコード数（ＲＲＧ）を指定する、３ビットの符号なし整数である。報告グループ内のレコード数は、開始／タイムスタンプ・レコードおよび命令最終レコードを含む２つのレコードから、２５６個のレコードまで、変化する可能性がある。一実施形態では、上限はモデルに依存する可能性がある。報告グループ内に入れられる１６バイトのレコードの数は２（ＲＧＳ＋１）である。
【００９４】
１次ＣＰＵ能力（primary-CPU capability）抑制制御ビット７３８（Ｙビット）および２次ＣＰＵ能力（secondary-CPU capability）抑制制御ビット７３９（Ｚビット）はひとまとめにして抑制制御と呼ばれる。報告グループの保管の抑制は、保管しようという試みが実行されないことを意味する。構成内のすべてのＣＰＵのＣＰＵ能力が同じである場合、抑制制御は効果的ではなく、いなかる抑制も行われない。ある構成において、あるＣＰＵのＣＰＵ能力が他のＣＰＵの能力とは異なる場合、抑制制御は有効であり、少なくとも１つのＣＰＵはＣＰＵ能力または１次ＣＰＵ能力で動作していると言われ、少なくとも１つの他のＣＰＵは２次ＣＰＵ能力で動作していると言われる。１次および２次ＣＰＵ能力は異なる動作速度である。Ｙビット７３８およびＺビット７３９がどちらも０である場合、抑制は行われない。Ｙビット７３８が０であり、Ｚビット７３９が１である場合、ＣＰＵ、たとえば、プロセッサ１０６が２次ＣＰＵ能力で動作している場合に抑制が行われる。Ｙビット７３８が１であり、Ｚビット７３９が０である場合、ＣＰＵ、たとえば、プロセッサ１０６が１次ＣＰＵ能力で動作している場合に抑制が行われる。Ｙビット７３８およびＺビット７３９がどちらも１である場合、抑制が行われる。
【００９５】
サンプル・ポイント・アドレス（ＳＰＡ）フィールド７５０はＳＰＡコントロールである。ＳＰＡフィールド７５０は、指示サンプリングおよび間隔ベースのサンプリングのうちの１つまたは複数と組み合わせて追加のサンプリング・モードとしてアドレスによる間接サンプリングを可能にするために使用することができる。複数の同時サンプリング・モードをサポートしていない実施形態では、ＳＰＡフィールド７５０を省略することができる。
【００９６】
サンプル・ポイント・アドレス・タイプ（ＳＰＡＴ）フィールド７５２はＳＰＡタイプ・コントロールである。ＳＰＡＴフィールド７５２は、サンプル・ポイント・アドレス・アレイ５２４内のアドレスをある命令の命令アドレスと比較しなければならないかまたはある命令のオペランドのアドレスと比較しなければならないかを制御するためにＳＰＡフィールド７５０に併せて使用することができる。ＳＰＡフィールド７５０は、複合型ＳＰＡ制御フィールドを形成するためにＳＰＡＴフィールド７５２と組み合わせることができる。代替一実施形態では、サンプル・ポイント・アドレス・アレイ５２４内に保管されたそれぞれのアドレスは、個別に割り当て可能なサンプル・ポイント・アドレス・タイプを有することができる。
【００９７】
図１１の上記のフィールドおよびビットは、フィールドの配置および命名の一例であり、明瞭にするために本明細書に提供されている。その他の諸実施形態では、これらのフィールドのサブセットのみが使用されるか、任意の順序または位置でフィールドが使用されるか、あるいは異なる名前でフィールドで示されるか、またはこれらの組み合わせになる可能性があることが理解されるであろう。
【００９８】
ランタイム・インスツルメンテーションがインストールされ使用可能になると、いくつかのイベントおよびデータを収集バッファ５０８に取り込むことができる。収集バッファ５０８は、その内容がプログラム実行中にプロセッサ１０６によって認識されたイベントについて報告する、１組のレコードを取り込むために使用される。例としては、１つまたは複数の実行分岐の実行、トランザクション実行アボート・イベント、キャッシュ・ミス、およびランタイム・インスツルメンテーション放出命令のオペランドなどである。ＩＣおよびＤＣ制御フィールド７３４および７３６は、命令またはデータ・プリフェッチ挙動を改善するために何らかの修正アクションを講じることについてそのプログラムが関心があると思われるレベルを設定する。ＲＩＥＭＩＴ命令の実行は、それを収集バッファ５０８に保管することにより汎用レジスタの値を収集する。ランタイム・インスツルメンテーション命令レコードを構築するためにモデル依存サンプル命令データを収集するために使用される命令データ・バッファ（ＩＤＢ）（描写せず）などのその他のバッファに追加のデータを収集するかあるいは保管するかまたはその両方を行うことができる。
【００９９】
収集されたランタイム・インスツルメンテーション情報はサンプリング・ベースで報告される。命令ストリームからの命令はサンプリングされる。サンプリングされた命令はサンプル命令と呼ばれる。サンプル命令を決定するためのいくつかのモードは、ランタイム・インスツルメンテーションが使用可能であるときに以下のように定義される。サイクル・カウント・モードでは、いずれにしても現行間隔に関するカウントを提供するために使用されるＳＦ７４０またはＲＳＩＣ７４２のいずれかに指定されたＣＰＵサイクルの数がカウントである。このカウントは、サンプリング・モードに関連するイベントに応答して調整される。たとえば、このカウントは、プロセッサ１０６が動作状態にあるときに減分される可能性がある。このカウントが０などのしきい値まで減分されると、現行命令はサンプル命令として認識され、カウントはＳＦ７４０の値に再初期設定され、次のサイクルから減分され始める。サンプル命令の実行が完了すると、適切であれば、報告が行われる。
【０１００】
命令カウント・モードでは、いずれにしても現行間隔に関するカウントを提供するために使用されるＳＦ７４０またはＲＳＩＣ７４２のいずれかにカウントが指定される。単一動作単位で構成される命令の場合、このカウントは、カウントを調整するために使用されるイベントとして命令の完了時に減分される。命令は、このカウントが０などのしきい値まで減分されるとサンプル命令になる。複数動作単位で構成される命令の場合、このカウントは以下の方法の１つで減分することができる。
ａ．割り込み可能命令の場合、部分完了までのすべての動作単位は、そのカウントが減分される１つのカウント単位を表す。
ｂ．割り込み可能命令の場合、最新の部分完了以降、最終完了までのすべての動作単位は、そのカウントが減分される１つのカウント単位を表す。
ｃ．命令のパラメータによって指定された処理のＣＰＵ決定部分を実行した後に完了する命令の場合、その完了はそのカウントが減分される１つのカウント単位を表す。
ｄ．上記のａ〜ｃのカテゴリには入っていないが、複数動作単位を実行した後に完了する命令の場合、最後の動作単位の完了は、そのカウントが減分される１つのカウント単位を表す。
命令は、その命令の任意のカウント単位についてそのカウントが０まで減分されるとサンプル命令になる。０などのしきい値に到達すると、カウントはＳＦ７４０の値に再初期設定され、上記のａ〜ｄに記載されているようにカウントダウンし始める。カウント・モードのすべてのケースでは、サンプル命令の最後の動作単位が完了した後に、適切であれば、報告が行われる。
【０１０１】
指示サンプリング・モードでは、Ｎビット７１０が１であり、ＲＩＮＥＸＴ命令が正常に実行されると、指示サンプリングが行われる。サンプル命令は、ＲＩＮＥＸＴ命令後の次の順次命令（ＮＳＩ）である。次の順次命令が実行タイプの命令である場合、サンプル命令は実行タイプの命令のターゲット命令になる。指示サンプリングは、サイクル・カウントまたは命令カウント・モードにあるときに行うことができる。カウント・サンプリングは、指示サンプリングならびにその結果行われるアクションのいずれかに併せて継続し、その他の影響を受けることはないが、カウント・サンプリングから決定されたサンプル命令が指示サンプリングによって決定された命令と同じである場合に、２つの報告グループが保管されないことを除く。
【０１０２】
間接サンプリングは、ランタイム・インスツルメンテーション命令セットの拡張によりプロセッサ１０６によってサポートすることができる。ランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ロード（ＲＩＬＳＰＡ）命令は、サンプル・ポイント・アドレスおよびアドレス・タイプの値を図９のサンプル・ポイント・アドレス・アレイ５２４にロードするために使用することができる。サンプル・ポイント・アドレス・アレイ５２４はレジスタ５１０の一部にすることができる。サンプル・ポイント・アドレス・アレイ５２４内のサンプル・ポイント・アドレスおよびアドレス・タイプは、インスツルメント命令ストリーム内の１つまたは複数のサンプル・ポイントをアドレスおよびアドレス・タイプにより間接的に識別するものである。サンプル・ポイント・アドレス・アレイ５２４内の値は、ランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ストア（ＲＩＳＳＰＡ）命令を使用して、読み取り、他の位置に保管することができる。ランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・クリア（ＲＩＣＳＰＡ）命令は、サンプル・ポイント・アドレス・アレイ５２４内の値をクリアするために使用することができる。マルチプロセッシングかつマルチタスクの環境でＲＩＳＳＰＡ、ＲＩＬＳＰＡ、およびＲＩＣＳＰＡ命令を使用すると、インスツルメント・プログラムのディスパッチおよびアンディスパッチと一貫して１組のサンプル・ポイント・アドレスを保存し復元することができる。スーパバイザ・プログラムは、インスツルメント問題プログラムによって確立されたサンプル・ポイント・アドレスをすべて把握できるわけではないので、ＲＩＣＳＰＡは、スーパバイザ・プログラムによってインスツルメント問題プログラムを終了させるときに、ハウスキーピング・クリーンアップを単純化することができる。
【０１０３】
サンプリング・モードが何であっても、サンプル命令がＲＩＮＥＸＴ命令の実行によって識別されると、報告グループが保管される。しかし、ランタイム・インスツルメンテーション・コントロールＹ７３８、Ｚ７３９、Ｑｓ６１４、およびＰｓ６１２は引き続き効果的である。
【０１０４】
サイクル・カウントおよび命令カウント・サンプリングはそれぞれ、内部システム・イベントおよび例外条件に基づいて、何らかの量の変動性の対象となる概算間隔を決定する。ランタイム・インスツルメンテーションが使用不可から使用可能に遷移すると、カウントダウンが始まる。ＲＩＮＥＸＴの完了とＮＳＩとの間に挟まれる可能性のある任意のイベント次第で、指示サンプリングはより少ない量の変動性の対象となる。同様に、特定のアドレスが定義されるので、間接サンプリングによって変動性が小さくなる。
【０１０５】
サンプリングは、モードにかかわらず、サンプル命令を識別する。サンプル命令が識別されると、サンプル命令の実行完了時に収集が停止し、報告が始まる。その後、報告を管理する様々な報告コントロールが適用される。報告グループのストアが保留になると、収集が再開する。
【０１０６】
トランザクション実行モードではない場合、報告グループのストアは、サンプル命令の実行完了時に保留になる。トランザクション実行モードである場合、サンプル命令の実行完了時に、報告グループのストアは、トランザクションが終了するまで遅延され、その後、保留になる。報告グループのストアが遅延されるかまたは保留である場合、１）プログラム割り込み、２）緊急マシンチェック割り込み、３）再始動割り込み、および４）スーパバイザコール割り込みのうちのいずれかが認識された場合に、それをパージすることができる。
【０１０７】
保留入出力割り込み、外部割り込み、および抑制可能なマシンチェック割り込みはいずれも、報告グループが保管されるかまたは報告グループを保管すべきではないとランタイム・インスツルメンテーション・コントロールが判断するまで、保留のままになる。
【０１０８】
それぞれのモードは、異なる１組の報告コントロールを可能にする場合もあれば、可能にしない場合もある。サンプリング・モードが命令カウントまたはサイクル・カウントのいずれかであるが、指示サンプリングあるいは間接サンプリングまたはその両方も使用される場合、複数のサンプリング方法によって同じサンプル命令が識別される可能性がある。これが発生し、使用すべき報告コントロールがサンプリング・モードに応じて異なる場合、指示サンプリングあるいは間接サンプリングまたはその両方に関連する報告コントロールが適用される。
【０１０９】
非同期かつ求められていないシステム・イベントが発生する可能性があるので、特定の命令をサンプリングするための精密な間隔決定は、一般に、実行可能ではない。その代わりに、ＲＩＮＥＸＴ命令または間接サンプリングを使用して、より綿密にサンプル命令を指定することができる。
【０１１０】
サイクル・カウント・モードまたは命令カウント・モードにある場合、ＲＩＮＥＸＴ命令またはサンプル・ポイント・アドレスは、命令カウントまたはサイクル・カウント・サンプリングから識別されたサンプル命令に接近しすぎている可能性がある。関連の報告グループの内容は、サンプル命令のサイクル・カウントまたは命令カウント識別が適用された場合と同様ではなく、サンプル命令がＲＩＮＥＸＴ命令のＮＳＩとしてまたはサンプル・ポイント・アドレスで識別された場合と同様である。
【０１１１】
以下の例外条件のいずれか１つまたは複数を満たす場合、ＲＩＮＥＸＴの実行はノーオペレーションとして実行される可能性がある。
１．ランタイム・インスツルメンテーション・コントロールが有効ではない。
２．問題状態において、現行ランタイム・インスツルメンテーション・コントロールのＰｓ６１２が０であり、問題状態報告が許可されないことを示している。
３．スーパバイザ状態において、現行ランタイム・インスツルメンテーション・コントロールのＱｓ６１４が０であり、スーパバイザ状態報告が許可されないことを示している。
４．現行ランタイム・インスツルメンテーション・コントロールのＮビット７１０が０であり、ＲＩＮＥＸＴ命令自体が許可されないことを示している。
５．保管が抑制される。
６．現ＰＳＷ内のあるフィールドが、ランタイム・インスツルメンテーションが使用不可であることを示している。
７．モデル依存しきい値を超える恐れがある。一定の期間内にＲＩＮＥＸＴが発行された回数がモデル依存限界を超えている。
８．プログラム・バッファ・フル条件が存在する。
９．ランタイム・インスツルメンテーション休止条件が存在する。
１０．次の順次命令が解釈実行開始命令である。
１１．次の順次命令がスーパバイザコール命令である。
【０１１２】
前に述べたように、プログラム実行中にランタイム・インスツルメンテーションが使用可能になると、ランタイム・インスツルメンテーション・データはプロセッサ１０６内の収集バッファ５０８に収集される。一実施形態では、収集バッファ５０８は、収集された最新のレコードを保存するために使用される、プロセッサ１０６の内部バッファである。サンプル・トリガ・ポイントが検出されると、レコードは、プログラム・バッファ５２２に書き込まれる報告グループの一部として、収集バッファ５０８からプログラム・バッファ５２２にコピーされる。一実施形態では、レコードは非破壊方式で収集バッファ５０８からコピーされる。
【０１１３】
収集バッファ５０８は、プロセッサ内に位置し、一実施形態では、命令アドレスおよび所与のイベントに関するイベント・メタデータを保管するためのレジスタ対のアレイとして実現されるので、「ハードウェア収集バッファ」と呼ばれる場合もある。イベントの一例は、レジスタ対が分岐の命令アドレスを保持する可能性のある実行分岐であり、メタデータは分岐のターゲットならびに分岐の履歴挙動に関する情報を保持することができる。一実施形態では、命令ストリーム内でイベントが発生すると、レジスタ対は順序付けられ、順次更新される。カウンタは、アレイ内で最も最近更新された項目の指標を示すように維持される。一実施形態では、収集バッファ５０８はサーキュラ・バッファであり、収集バッファ５０８がいっぱいになると、次のイベントがアレイ内の最初の項目を上書きし、アレイのレジスタ対の順次更新はその後のイベントで再始動する。このため、アレイＣＢ［０］〜ＣＢ［Ｎ−１］ならびに最近更新された指標を示すカウンタｉを想定すると、取り込まれたイベントのトレースは、ＣＢ［ｉ］，ＣＢ［ｉ−１］．．．ＣＢ［１］，ＣＢ［０］，ＣＢ［Ｎ−１］，ＣＢ［Ｎ−２］．．．ＣＢ［ｉ＋１］というシーケンスによって表されることになる。他の実施形態では、バッファ内の最も古い項目を指し示すヘッド・ポインタと、バッファ内の最も新しい項目を指し示すトレール／現行ポインタという２つのポインタが使用される。
【０１１４】
任意の所与の実行ポイントにおけるプロセッサ１０６の状態を表すイベントは、収集バッファ５０８に順次取り込まれる。収集バッファ５０８は、その内容がプログラム実行中にプロセッサ１０６によって認識されたイベントについて報告する、１組のレコードを取り込むために使用される（たとえば、１つまたは複数の実行分岐の実行、トランザクション実行アボート・イベント、ＲＩＥＭＩＴ命令のオペランドなど）。一実施形態では、認識されたイベントは図１１に示されているＲＩＣＣＢの内容に依存する。示されている収集バッファ５０８の実施形態内の項目は、イベント命令アドレスおよびその他の関連イベント・メタデータを含む。イベント・メタデータの例としては、分岐の履歴挙動に関する何らかの情報を含む、実行分岐の命令アドレスとそのターゲット、ＲＩＥＭＩＴ命令の命令アドレスとそれぞれのレジスタ値、ならびにトランザクション・アボート命令のアドレスとそれぞれのトランザクション・リカバリ入口点を含むが、これらに限定されない。
【０１１５】
収集バッファ５０８の一実施形態は、最高３２個の項目（すなわち、３２個のイベントに関する情報）を保管し、それぞれの命令アドレスは６４ビット（たとえば、ビット０：６３）によって指定され、イベント・メタデータは６４ビット（たとえば、ビット６４：１２７）によって指定される。収集バッファのサイズ（ＲＣＢ）はモデル依存カウントであり、レコード数を表す。一実施形態では、収集バッファ５０８のバイト・サイズは１６バイトのレコード・サイズの倍数である。収集バッファのサイズ（ＲＣＢ）は、モデルの最大報告グループのカウント（ＲＲＧ）と収集バッファから取得されない報告グループ内のレコードのカウント（ＲＮＣ）との差より大きいかまたはそれと等しいレコード数である。したがって、一実施形態では、収集バッファのサイズは以下のように表される。
ＲＣＢ≧（ＲＲＧ−ＲＮＣ）
【０１１６】
一実施形態では、収集バッファ５０８および命令データ・バッファ（１つが使用される場合）の内容は、（１）割り込み、（２）ランタイム・インスツルメンテーション機構をオンにしオフにするＰＳＷビット（たとえば、ビット２４）が１から０に変化する場合、（３）ランタイム・インスツルメンテーション機構がトランザクション実行モードにあるときにサンプル命令が識別された場合というイベントによって、パージされるかまたはその他の影響を受ける（この場合、収集データ・バッファ５０８および命令データ・バッファのさらなる更新は停止し、トランザクションが終了したときに再開し、その時点で報告グループのストアが保留になり、収集バッファ５０８および命令データ・バッファがパージされる）。
【０１１７】
図２に示されているエミュレートされたホスト・コンピュータ・システムなどの一実施形態では、収集バッファ５０８はレジスタあるいはメモリまたはその両方を使用して実現される。この実施形態では、任意選択の命令データ・バッファが存在する場合、それもレジスタあるいはメモリまたはその両方を使用して実現される。
【０１１８】
諸実施形態では、追加の機能は、データ収集に影響を及ぼすことができ、前述の定期的命令カウントまたはサイクル・カウント・サンプリングを実質的に妨害せずに、追加のデータ収集ポイントを提供するものと見なすことができる。これらはＲＩＥＭＩＴ命令の実行を含み、この命令は、それを収集バッファ５０８に保管することにより汎用レジスタの値を収集する。加えて、前述のランタイム・インスツルメンテーション・コントロール内のデータ収集制御ビットは、収集されるデータのタイプをカスタマイズするために使用することができる（たとえば、Ｅ、Ｃ、Ｒ、およびＢ制御ビット）。このように、収集されるデータのタイプはプログラム可能である。
【０１１９】
一実施形態では、命令データ・バッファは、ランタイム・インスツルメンテーション命令レコードを構築するために使用されるモデル依存サンプル命令データを収集するように実現される。命令データ・バッファは、命令がサンプル命令として識別されたときに使用可能になることを見越して命令からデータを収集する。一実施形態では、命令データ・バッファは、サンプル・ポイントとしてトリガになると思われる命令に関する情報が保存されるプロセッサ内のハードウェア・バッファ／記憶位置であり、その情報はログアウト・プロセス中に収集バッファ５０８からのデータとともに書き出すことができる。収集バッファ５０８と同様に、これは、命令アドレスと、その命令に関連するメタデータとを含む。命令データ・バッファ内のメタデータは、マシンに依存する場合が多く、キャッシュ・ミス関連情報および分岐予測関連情報を含むことができるが、これらに限定されない。
【０１２０】
諸実施形態によれば、収集されるその他のデータは、収集バッファ５０８からのものではなく、命令データ・バッファからのものでもない可能性がある。例としては、（１）報告グループの第１のレコード、すなわち、タイムスタンプまたは開始レコード、ならびに（２）すべての報告グループについて作成される可能性があり、したがって、収集バッファ５０８に保管されない可能性がある追加のタイプのレコードであって、存在する場合、報告グループのエクストラ・セクションまたはマシン依存セクションに入れられる可能性のある追加のタイプのレコードの一部を形成するために使用されるデータを含む。これらのレコードは本明細書では「システム情報レコード」と呼ばれる。
【０１２１】
図１２は、サンプル・ポイントでプログラム・バッファ５２２に保管される報告グループ８００の高レベルの例を描写している。レコード内の報告グループのサイズはＲＲＧによって表され、２（ＲＧＳ＋１）に等しく、ここでＲＧＳは指数としての報告グループ・サイズである。収集バッファ５０８以外の位置からコピーされるモデル依存数のレコード（ＲＮＣ）は、報告グループで使用されるときに非破壊的にコピーされる場合もあれば、コピーされない場合もある。図１２の例では、ＲＲＧ＝８、ＲＧＳ＝２、およびＲＮＣ＝４である。図１２に示されている報告グループ８００の例は、ヘッダ・セクション８０２と、本体セクション８０４と、エクストラ・レコード・セクション８０６と、フッタ・セクション８０８とを含む。
【０１２２】
ヘッダ・セクション８０２は、状況情報、追跡情報、あるいはタイミング情報、またはこれらの組み合わせを保持するための開始レコードまたはタイムスタンプ・レコードを含むことができる。開始レコードは、プログラム・バッファに保管される第１の報告レコードについてヘッダ・セクション８０２に保管される（すなわち、ＲＣＡ７０６がＲＯＡ７０２と等しい場合）。一実施形態では、開始レコードは、「０２」というレコード・タイプ・フィールドと、現在プログラム・バッファにいくつの報告グループが保管されているかを示すための報告グループ数（ＮＲＧ）フィールドと、報告グループのサイズを示すためのＲＧＳフィールドと、プログラム・バッファ５２２がいっぱいであるかどうかを示すための停止（Ｓ）フィールドと、ランタイム・インスツルメンテーションが休止されているかどうかを示すための休止（Ｈ）フィールドと、開始レコードが書き込まれた時期を示すための時刻（ＴＯＤ）機構フィールドとを含む。一実施形態では、開始レコードのフィールドの少なくともサブセットはＲＩ制御ブロック（たとえば、ＲＩＣＣＢ）から得られる。タイムスタンプ・レコードの一実施形態は、「０３」というレコード・タイプを有し、レコードが保管された時期を示すためのＴＯＤ機構フィールドを含む。一実施形態では、タイムスタンプ・レコードは、第１の報告グループ以外のそれぞれの報告グループについてヘッダ・セクション８０２に保管される。
【０１２３】
報告グループの本体セクション８０４は、収集バッファ５０８からサンプリングされたイベントおよび情報に関する様々なレコードを含むことができる。イベントおよび情報は、たとえば、放出命令、トランザクション実行アボート、呼び出し、戻り、分岐、およびフィラーによって取り込まれた状態情報を表すことができる。
【０１２４】
一実施形態では、ＲＩＥＭＩＴ命令が正常に実行されると、放出レコードが作成され、収集バッファ５０８に保管される。放出レコードの一実施形態は、「１０」というレコード・タイプ・フィールドと、現ＰＳＷの命令アドレス・ビット位置が放出レコードでどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレス指定モード（たとえば、６４、３１、または２４ビット）次第で変化し、ＲＩＥＭＩＴが実行タイプの命令のターゲットであった場合にＲＩＥＭＩＴ命令または実行タイプの命令の命令アドレスを含む命令アドレス・フィールドと、ＲＩＥＭＩＴ命令によって指定された汎用レジスタからのデータを保管するための放出データ・フィールドとを含む。
【０１２５】
一実施形態では、暗黙アボートまたはトランザクション・アボート命令の実行のいずれかにより、トランザクション実行モード・アボート・レコードが作成され、収集バッファ５０８に保管される。アボート・レコードの一実施形態は、「１１」というレコード・タイプ・フィールドと、現ＰＳＷの命令アドレス・ビット位置がトランザクション実行アボート・レコードでどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレス指定モード（たとえば、６４、３１、または２４ビット）次第で変化し、アボートされた命令が実行タイプの命令のターゲットであった場合にアボートされた命令または実行タイプの命令の命令アドレスを含む命令アドレス・フィールドと、アボートに関連する任意のモデル依存データに関するフィールドとを含む。
【０１２６】
一実施形態では、Ｒ２フィールドが非ゼロの場合のＢＲＡＮＣＨ  ＡＮＤ  ＳＡＶＥ  （ＢＡＳＲ）、ＢＲＡＮＣＨ  ＡＮＤ  ＳＡＶＥ  （ＢＡＳ）、ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＡＮＤ  ＳＡＶＥ  ＬＯＮＧ、ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＡＮＤ  ＳＡＶＥ、Ｒ２フィールドが非ゼロの場合のＢＲＡＮＣＨ  ＡＮＤ  ＬＩＮＫ  （ＢＡＬＲ）、ＢＲＡＮＣＨ  ＡＮＤ  ＬＩＮＫ  （ＢＡＬ）、およびＲ２フィールドが非ゼロの場合のＢＲＡＮＣＨ  ＡＮＤ  ＳＡＶＥ  ＡＮＤ  ＳＥＴ  ＭＯＤＥなどの呼び出しタイプの分岐命令の実行により、呼び出しレコードが作成される。呼び出しレコードの一実施形態は、「１２」というレコード・タイプ・フィールドと、現ＰＳＷの命令アドレス・ビット位置が呼び出しレコードでどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレス指定モード（たとえば、６４、３１、または２４ビット）次第で変化し、分岐命令が実行タイプの命令のターゲットであった場合に分岐命令または実行タイプの命令の命令アドレスを含む命令アドレス・フィールドと、分岐が正しく予測されたかどうかを示すための良性（well behaved）フィールドと、分岐ターゲット・アドレス（「呼び出された位置」とも呼ばれる）を含むターゲット・アドレス・フィールドとを含む。
【０１２７】
戻りレコードおよび転送レコードは、呼び出しレコードと同じフォーマットを有することができる。一実施形態では、戻りレコードは、「１３」というレコード・タイプ・フィールドを有し、Ｒ２フィールドが非ゼロであり、マスクが１５である場合のＢＲＡＮＣＨ  ＯＮ  ＣＯＮＤＩＴＩＯＮ  （ＢＣＲ）などの戻りタイプの分岐命令の実行によって作成される。戻りレコードの場合、命令アドレス・フィールドは、分岐が実行タイプの命令のターゲットである場合に分岐命令または実行タイプの命令のアドレスを含み、ターゲット・アドレス・フィールドは戻り位置を含む。
【０１２８】
一実施形態では、転送レコードは、「１４」というレコード・タイプ・フィールドを有し、ａ．Ｒ２フィールドが非ゼロであり、マスクが１〜１４の範囲内である場合のＢＲＡＮＣＨ  ＯＮ  ＣＯＮＤＩＴＩＯＮ  （ＢＣＲ）、ｂ．Ｊビットが０であるかまたはマスクが１〜１４の範囲内である場合のＢＲＡＮＣＨ  ＯＮ  ＣＯＮＤＩＴＩＯＮ  （ＢＣ）、ｃ．ＢＲＡＮＣＨ  ＯＮ  ＣＯＵＮＴ  （ＢＣＴ，ＢＣＴＲ，ＢＣＴＧ，ＢＣＴＧＲ）、ｄ．ＢＲＡＮＣＨ  ＯＮ  ＩＮＤＥＸ  ＨＩＧＨ  （ＢＸＨ，ＢＸＨＧ）、ｅ．ＢＲＡＮＣＨ  ＯＮ  ＩＮＤＥＸ  ＬＯＷ  ＯＲ  ＥＱＵＡＬ  （ＢＸＬＥ，ＢＸＬＥＧ）、ｆ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＣＯＮＤＩＴＩＯＮ  （ＢＲＣ）、ｇ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＣＯＮＤＩＴＩＯＮ  ＬＯＮＧ  （ＢＲＣＬ）、ｈ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＣＯＵＮＴ  （ＢＲＣＴ，ＢＲＣＴＧ）、ｉ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＣＯＵＮＴ  ＨＩＧＨ  （ＢＲＣＴＨ）、ｊ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＩＮＤＥＸ  ＨＩＧＨ  （ＢＲＸＨ，ＢＲＸＨＧ）、ｋ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＩＮＤＥＸ  ＬＯＷ  ＯＲ  ＥＱＵＡＬ  （ＢＲＸＬＥ，ＢＲＸＬＧ）、ｌ．ＣＯＭＰＡＲＥ  ＡＮＤ  ＢＲＡＮＣＨ  （ＣＲＢ，ＣＧＲＢ）、ｍ．ＣＯＭＰＡＲＥ  ＡＮＤ  ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  （ＣＲＪ，ＣＧＲＪ）、ｎ．ＣＯＭＰＡＲＥ  ＩＭＭＥＤＩＡＴＥ  ＡＮＤ  ＢＲＡＮＣＨ  （ＣＩＢ，ＣＧＩＢ）、ｏ．ＣＯＭＰＡＲＥ  ＩＭＭＥＤＩＡＴＥ  ＡＮＤ  ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  （ＣＩＪ，ＣＧＩＪ）、ｐ．ＣＯＭＰＡＲＥ  ＬＯＧＩＣＡＬ  ＡＮＤ  ＢＲＡＮＣＨ  （ＣＬＲＢ，ＣＬＧＲＢ）、ｑ．ＣＯＭＰＡＲＥ  ＬＯＧＩＣＡＬ  ＡＮＤ  ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  （ＣＬＲＪ，ＣＬＧＲＪ）、ｒ．ＣＯＭＰＡＲＥ  ＬＯＧＩＣＡＬ  ＩＭＭＥＤＩＡＴＥ  ＡＮＤ  ＢＲＡＮＣＨ  （ＣＬＩＢ，ＣＬＧＩＢ）、およびｓ．ＣＯＭＰＡＲＥ  ＬＯＧＩＣＡＬ  ＩＭＭＥＤＩＡＴＥ  ＡＮＤ  ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  （ＣＬＩＪ，ＣＬＧＩＪ）などの戻りタイプの分岐命令の実行により作成される。転送レコードは、分岐が実行されたときに作成される。転送レコードの場合、命令アドレス・フィールドは、分岐が実行タイプの命令のターゲットである場合に分岐命令または実行タイプの命令のアドレスを含み、ターゲット・アドレス・フィールドは戻り位置を含む。
【０１２９】
フィラー・レコードは、収集バッファ５０８内の有効なレコードの数が現行ＲＧＳの報告グループをいっぱいにするには不十分であるときに報告グループ内で使用される。フィラー・レコードの一実施形態は、そのレコードがフィラー・レコードであり、残りのバイトが未定義であることを示すために「００」というレコード・タイプ・フィールドを含む。
【０１３０】
エクストラ・レコード・セクション８０６は、存在する場合、モデル依存レコードを含むことができる。一実施形態では、エクストラ・レコードのフォーマットはフィラー・レコードと同様であるが、そのレコードがエクストラ・レコードであり、エクストラ・レコードの残りのバイトがモデル依存データを含む可能性のあることを示すためにレコード・タイプが「０１」に設定されることを除く。
【０１３１】
フッタ・セクション８０８は、サンプル命令の実行に関する情報を含む命令レコードを含むことができる。命令レコードは、報告グループがサンプル命令について保管されたときに作成される。命令レコードの一実施形態は、「０４」というレコード・タイプ・フィールドと、現ＰＳＷの命令アドレス・ビット位置が命令レコードでどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレス指定モード（たとえば、６４、３１、または２４ビット）次第で変化し、サンプル命令が実行タイプの命令のターゲットであった場合にサンプル命令または実行タイプの命令の命令アドレスを含む命令アドレス・フィールドと、命令データ・バッファ（ＩＤＢ）から収集された任意のモデル依存データを含む命令データ・バッファ（ＩＤＢ）フィールドとを含む。
【０１３２】
図１３は、アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現することができるプロセス・フロー９００を描写している。このプロセス・フロー９００は、プロセッサ１０６によって実現することができる。代わって、プロセス・フロー９００は、図２のエミュレートされたプロセッサ２９によって実現することもできる。説明を容易にするため、本明細書ではプロセッサ１０６に関連してプロセス・フロー９００について説明する。
【０１３３】
最初に、図９のランタイム・インスツルメンテーション・モジュール５０６およびレジスタ５１０は、ＬＲＩＣ命令を使用してアドレスによる間接サンプリングをサポートし、前に述べたように図１０および図１１の制御ブロック６００および７００をロードするように初期設定することができる。ＲＩＬＳＰＡ命令は、サンプル・ポイント・アドレス・アレイ５２４の内容を構成することができる。プロセッサ１０６はＲＩＬＳＰＡ命令およびサンプル・ポイント・アドレスをフェッチする。ＲＩＬＳＰＡ命令を実行すると、プロセッサ１０６はサンプル・ポイント・アドレスをサンプル・ポイント・アドレス・アレイ５２４に保管し、その保管に応答してプロセッサ１０６内の条件コードを更新する。条件コードは、ＰＳＷ内にあり、サンプル・ポイント・アドレス・アレイ５２４に正常にロードされた値の数、サンプル・ポイント・アドレス・アレイ５２４がいっぱいであるかどうか、サンプル・ポイント・アドレス・アレイ５２４内で次に使用可能な位置の指標値、あるいはサンプル・ポイント・アドレス・アレイ５２４内の項目のアクティブ／休眠状況、またはこれらの組み合わせなどの状況を示すためのフィードバックを提供することができる。また、プロセッサ１０６は、プロセッサ１０６によってサポートされるアドレスおよび命令フォーマット次第で、サンプル・ポイント・アドレスをサンプル・ポイント・アドレス・アレイ５２４に保管する前に、ＤＡＴ３１２に関連する動的アドレス変換状態に基づいてサンプル・ポイント・アドレスについてアドレス変換を実行することもできる。
【０１３４】
間接サンプリングがインストールされ使用可能になると、プロセッサ１０６は、命令ストリームを処理しながら、サンプル・ポイント・アドレス・アレイ５２４からサンプル・ポイント・アドレスを読み取ることができる。ランタイム・インスツルメンテーション・コントロールがインストールされ使用可能になると、イベントおよびデータなどのランタイム・インスツルメンテーション情報は収集バッファ５０８に収集することができる。定期的に、指示通りに、またはアドレスにより間接的に、ランタイム・インスツルメンテーション・プログラム・バッファ５２２とも呼ばれるプログラム・バッファ５２２への報告グループの保管をトリガするサンプル命令に到達する。
【０１３５】
ブロック９０２では、プロセッサ１０６は、サンプル・ポイント・アドレス・アレイ５２４からサンプル・ポイント・アドレスを読み取る。ブロック９０４では、プロセッサ１０６は、そのサンプル・ポイント・アドレスをプロセッサ１０６上で実行中の命令ストリームからの命令に関連するアドレスと比較する。この命令ストリームは、ランタイム・メモリ５０４からの問題状態プログラムまたはスーパバイザ状態プログラムである可能性がある。
【０１３６】
ブロック９０６では、アドレス一致が発生した場合、プロセスはブロック９０８に進む。そうではなく、いかなるアドレス一致も識別されなかった場合、プロセスはブロック９０４に戻る。サンプル・ポイント・アドレス・アレイ５２４内のサンプル・ポイント・アドレスを順次または同時に比較して、サンプル・ポイントを認識することができる。サンプル・ポイント・アドレス・アレイ５２４がサンプル・ポイント・アドレス・アレイ５２４全体における同時比較をサポートする内容アドレス・メモリである場合、同時または並列アドレス比較を実現することができる。サンプル・ポイント・アドレス・アレイ５２４内のすべてのサンプル・ポイント・アドレスが比較された場合、命令ストリーム内の次の命令に関連するアドレスを分析することができる。
【０１３７】
ブロック９０８では、サンプル・ポイント・アドレスのうちの１つと一致するアドレスに関連する命令の実行時にサンプル・ポイントが認識される。その命令に関連するアドレスは、アドレス・タイプに基づくとともに、プロセッサ１０６によってサポートされる構成または方法ならびにＳＰＡＴ７５２などの構成設定次第で、その命令のアドレス（すなわち、命令アドレス）またはその命令のオペランドのアドレス（すなわち、その命令によって参照されるアドレス）のいずれかである可能性がある。ランタイム・インスツルメンテーション情報はサンプル・ポイントから入手される。
【０１３８】
ブロック９１０では、プロセッサ１０６は、ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファ５２２に報告グループとして保管する。システム情報および収集バッファ５０８からのランタイム・インスツルメンテーション情報からのレコードの組み合わせをマージして、図１２の報告グループ８００などの報告グループをランタイム・インスツルメンテーション・プログラム・バッファ５２２に保管することができる。
【０１３９】
コンテキスト・スイッチなどにおいて、サンプル・ポイント・アドレス・アレイ５２４の内容に対する変更を行う必要がある場合、ＲＩＳＳＰＡ命令を発行することができる。プロセッサ１０６は、サンプル・ポイント・アドレス・アレイ５２４の内容を保管するのに十分な容量を有する位置を指し示す記憶アドレスを含むＲＩＳＳＰＡ命令をフェッチする。プロセッサ１０６は、ＲＩＳＳＰＡ命令を実行し、サンプル・ポイント・アドレス・アレイ５２４からサンプル・ポイント・アドレスを読み取り、記憶アドレスによって識別された位置にサンプル・ポイント・アドレスを保管する。この情報は、インスツルメント命令ストリームのソフトウェア・スレッドがもう一度アクティブになったときに、後でコンテキストを復元するために使用することができる。
【０１４０】
コンテキスト・スイッチの前に、サンプル・ポイント・アドレス・アレイ５２４をクリアするためにＲＩＣＳＰＡを発行することができる。プロセッサ１０６はＲＩＣＳＰＡ命令をフェッチし、それを実行して、サンプル・ポイント・アドレス・アレイ５２４をクリアし、プロセッサ１０６内の任意の関連条件コードを更新する。サンプル・ポイント・アドレス・アレイ５２４をクリアすることは、積極的にサンプル・ポイント・アドレス・アレイ５２４の値を０、すなわち、ヌルにリセットすることを含むか、またはその他の方法でその値を休眠状態にすることができる。その後、前に保管されたサンプル・ポイント・アドレスの値は、ＲＩＬＳＰＡ命令を使用してサンプル・ポイント・アドレス・アレイ５２４に復元することができる。
【０１４１】
上述のように、諸実施形態は、コンピュータで実行されるプロセスと、これらのプロセスを実践するための装置の形で実施することができる。一実施形態は、コンピュータ可読／使用可能媒体１００２上の図１４に描写されているコンピュータ・プログラム・プロダクト１０００を含むことができ、コンピュータ・プログラム・コード・ロジック１００４は装置（article of manufacture）として有形媒体に実施された命令を含む。コンピュータ可読／使用可能媒体１００２のための模範的な装置としては、フレキシブル・ディスケット、ＣＤ−ＲＯＭ、ハード・ディスク、ユニバーサル・シリアル・バス（ＵＳＢ）フラッシュ・ドライブ、または任意のその他のコンピュータ可読記憶媒体を含むことができ、コンピュータ・プログラム・コード・ロジック１００４がコンピュータにロードされ、コンピュータによって実行されると、そのコンピュータは本発明を実践するための装置になる。諸実施形態は、たとえば、記憶媒体に保管されるか、コンピュータにロードされるかあるいはコンピュータによって実行されるかまたはその両方であるか、電気的配線またはケーブル配線、光ファイバ、あるいは電磁放射など、何らかの伝送媒体によって伝送されるかにかかわらず、コンピュータ・プログラム・コード・ロジック１００４を含み、コンピュータ・プログラム・コード・ロジック１００４がコンピュータにロードされ、コンピュータによって実行されると、そのコンピュータは本発明を実践するための装置になる。汎用マイクロプロセッサ上に実現されると、コンピュータ・プログラム・コード・ロジック１００４の複数セグメントは、特定の論理回路を作成するようにマイクロプロセッサを構成する。
【０１４２】
技術的効果および恩恵としては、ランタイム・インスツルメンテーションを使用して取り込まれたイベントに関するアドレスによる間接サンプリングを含む。プロセッサにおいてアドレスによる間接サンプリングをサポートすることにより、インスツルメント・プログラムは１つまたは複数の特定のサンプル・ポイント・アドレスに基づいて１つまたは複数のサンプル・ポイントを指定することができる。これは、サイクル・カウントおよび命令カウント・ベースのサンプリングより精密なサンプリングを可能にするものである。１つまたは複数のサンプル・ポイント・アドレスを指定することにより、ＲＩＮＥＸＴなどの指示サンプル命令をインスツルメント命令ストリームに直接挿入せずに特定のサンプル・ポイントを確立することができる。サンプル・ポイント・アドレス・アレイをロードし、保管し、クリアするための設計済み命令は、コンテキスト・スイッチングを可能にし、スーパバイザ・プログラムによる管理を単純化することができる。また、アドレスによる間接サンプリングのためのサポートは、エミュレーション・ルーチンを使用してエミュレートされたプロセッサまたは仮想プロセッサに含めることができる。
【０１４３】
本明細書で使用する用語は、特定の実施形態のみを記述するためのものであって、本発明を限定するためのものではない。本明細書で使用する「ａ」、「ａｎ」、および「ｔｈｅ」という単数形は、文脈が明らかにそうではない場合を示さない限り、複数形も含むためのものである。「ｃｏｍｐｒｉｓｅｓ」あるいは「ｃｏｍｐｒｉｓｉｎｇ」またはその両方の用語は、本明細書で使用する場合、所定の特徴、整数、ステップ、動作、要素、あるいはコンポーネント、またはこれらの組み合わせの存在を指定するが、１つまたは複数のその他の特徴、整数、ステップ、動作、要素、コンポーネント、あるいはそのグループ、またはこれらの組み合わせの存在または追加を排除しないことがさらに理解されるであろう。
【０１４４】
以下の特許請求の範囲内のすべての手段またはステップならびに機能要素に対応する構造、材料、行為、およびそれと同等のものは、具体的に請求されている他の請求要素と組み合わせてその機能を実行するための任意の構造、材料、または行為を含むためのものである。本発明の説明は、例示および解説のために提示されたものであるが、網羅するためまたは開示された形式に本発明を限定するためのものではない。多くの変更および変形は、本発明の範囲および精神を逸脱せずに当業者にとって明白なものになる。この実施形態は、本発明の原理および実用的な適用例を最も良く説明するため、ならびにその他の当業者が企図された特定の用途に適した様々な変更を含む様々な実施形態について本発明を理解できるようにするために、選択され記載されたものである。
【０１４５】
当業者によって認識されるように、本発明の諸態様は、システム、方法、またはコンピュータ・プログラム・プロダクトとして実施することができる。したがって、本発明の諸態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、またはソフトウェアとハードウェアの諸態様を組み合わせる実施形態の形を取ることができ、いずれも本明細書では一般に「回路」、「モジュール」、または「システム」と呼ぶことができる。さらに、本発明の諸態様は、そこにコンピュータ可読プログラム・コードが実施されている１つまたは複数のコンピュータ可読媒体に実施されたコンピュータ・プログラム・プロダクトの形を取ることができる。
【０１４６】
１つまたは複数のコンピュータ可読媒体の任意の組み合わせを使用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体にすることができる。コンピュータ可読記憶媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、またはデバイス、あるいは上記のものの任意の適切な組み合わせにすることができるが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例（非網羅的リスト）としては、１つまたは複数のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光学記憶装置、磁気記憶装置、あるいは上記のものの任意の適切な組み合わせを含むであろう。本明細書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを収容または保管することができる任意の有形媒体にすることができる。
【０１４７】
コンピュータ可読信号媒体は、たとえば、ベースバンド内でまたは搬送波の一部として、そこに実施されたコンピュータ可読プログラム・コードを含む伝搬データ信号を含むことができる。このような伝搬信号は、電磁、光、またはそれらの任意の適切な組み合わせを含むがこれらに限定されない様々な形のうちのいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではなく、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを通信、伝搬、または輸送することができる任意のコンピュータ可読媒体にすることができる。
【０１４８】
コンピュータ可読媒体上に実施されたプログラム・コードは、無線、有線、光ファイバ・ケーブル、ＲＦなど、あるいは上記のものの任意の適切な組み合わせを含むがこれらに限定されない任意の適切な媒体を使用して伝送することができる。
【０１４９】
本発明の諸態様に関する動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語ならびに「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つまたは複数のプログラミング言語の任意の組み合わせで作成することができる。プログラム・コードは、完全にユーザのコンピュータ上で、一部分はユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、一部分はユーザのコンピュータ上でしかも一部分はリモート・コンピュータ上で、あるいは完全にリモート・コンピュータまたはサーバ上で実行することができる。後者のシナリオでは、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してリモート・コンピュータがユーザのコンピュータに接続される場合もあれば、（たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに接続が行われる場合もある。
【０１５０】
本発明の諸態様は、本発明の諸実施形態による方法、装置（システム）、およびコンピュータ・プログラム・プロダクトの流れ図あるいは概略図またはその両方に関連して上述されている。流れ図あるいはブロック図またはその両方の各ブロックおよび流れ図あるいはブロック図またはその両方内の複数ブロックの組み合わせは、コンピュータ・プログラム命令によって実現可能であることが理解されるであろう。これらのコンピュータ・プログラム命令は、汎用コンピュータ、特殊目的コンピュータ、またはその他のプログラマブル・データ処理装置のプロセッサに提供し、コンピュータまたはその他のプログラマブル・データ処理装置のプロセッサにより実行された命令が流れ図あるいはブロック図またはその両方の１つまたは複数のブロックに指定された機能／行為を実現するための手段を作成するようなマシンを生産することができる。
【０１５１】
また、これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に保管された命令が流れ図あるいはブロック図またはその両方の１つまたは複数のブロックに指定された機能／行為を実現する命令を含む装置を生産するような特定の方法で機能するよう、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイスに指示することができるコンピュータ可読媒体に保管することもできる。
【０１５２】
また、コンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上にロードし、コンピュータまたはその他のプログラマブル装置上で実行された命令が流れ図あるいはブロック図またはその両方の１つまたは複数のブロックに指定された機能／行為を実現するためのプロセスを提供するようなコンピュータで実行されるプロセスを生産するように、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上で一連の動作ステップを実行させることもできる。
【０１５３】
上述のように、諸実施形態は、コンピュータで実行されるプロセスと、これらのプロセスを実践するための装置の形で実施することができる。諸実施形態では、本発明は、１つまたは複数のネットワーク要素によって実行されるコンピュータ・プログラム・コードに実施される。諸実施形態は、コンピュータ使用可能媒体上のコンピュータ・プログラム・プロダクトを含み、コンピュータ・プログラム・コード・ロジックは装置として有形媒体に実施された命令を含む。コンピュータ使用可能媒体のための模範的な装置としては、フレキシブル・ディスケット、ＣＤ−ＲＯＭ、ハード・ディスク、ユニバーサル・シリアル・バス（ＵＳＢ）フラッシュ・ドライブ、または任意のその他のコンピュータ可読記憶媒体を含むことができ、コンピュータ・プログラム・コード・ロジックがコンピュータにロードされ、コンピュータによって実行されると、そのコンピュータは本発明を実践するための装置になる。諸実施形態は、たとえば、記憶媒体に保管されるか、コンピュータにロードされるかあるいはコンピュータによって実行されるかまたはその両方であるか、電気的配線またはケーブル配線、光ファイバ、あるいは電磁放射など、何らかの伝送媒体によって伝送されるかにかかわらず、コンピュータ・プログラム・コード・ロジックを含み、コンピュータ・プログラム・コード・ロジックがコンピュータにロードされ、コンピュータによって実行されると、そのコンピュータは本発明を実践するための装置になる。汎用マイクロプロセッサ上に実現されると、コンピュータ・プログラム・コード・ロジックの複数セグメントは、特定の論理回路を作成するようにマイクロプロセッサを構成する。
【０１５４】
図面内の流れ図およびブロック図は、本発明の様々な諸実施形態によるシステム、方法、およびコンピュータ・プログラム・プロダクトについて可能な実現例のアーキテクチャ、機能、および動作を例示している。この点に関しては、流れ図またはブロック図内の各ブロックは、指定の論理機能（複数も可）を実現するための１つまたは複数の実行可能命令を含む、コードのモジュール、セグメント、または一部分を表すことができる。また、いくつかの代替実現例では、ブロック内に示された機能は図面内に示された順序から外れて行われる可能性があることに留意されたい。たとえば、連続して示されている２つのブロックは、関係する機能次第で、実際にはほぼ同時に実行される場合もあれば、時には逆の順序で実行される場合もある。また、ブロック図あるいは流れ図またはその両方の各ブロックおよびブロック図あるいは流れ図またはその両方内の複数ブロックの組み合わせは、指定の機能または行為を実行する特殊目的ハードウェアベースのシステムあるいは特殊目的ハードウェアとコンピュータ命令との組み合わせによって実現可能であることも留意されるであろう。
【図１】
0006034393.tif 000002
【図２】
0006034393.tif 000003
【図３】
0006034393.tif 000004
【図４】
0006034393.tif 000005
【図５】
0006034393.tif 000006
【図６】
0006034393.tif 000007
【図７】
0006034393.tif 000008
【図８】
0006034393.tif 000009
【図９】
0006034393.tif 000010
【図１０】
0006034393.tif 000011
【図１１】
0006034393.tif 000012
【図１２】
0006034393.tif 000013
【図１３】
0006034393.tif 000014
【図１４】
0006034393.tif 000015