(57)【要約】【課題】  プロセッサ上でランタイム・インストルメンテーション・ファシリティを実行すること。【解決手段】  本発明は、ランタイム・インストルメンテーション・ファシリティの実行をイネーブル及びディスエーブルにすることに関する。プロセッサにより、低特権状態でのプロセッサによる実行のための命令がフェッチされると、プロセッサにより、ランタイム・インストルメンテーション・ファシリティが低特権状態での命令の実行を許可すること及びランタイム・インストルメンテーション・ファシリティと関連した制御が有効であると判断される。命令がＲＩＯＦＦ命令のとき、ランタイム・インストルメンテーション・ファシリティがディスエーブルにされる。命令がＲＩＯＮ命令のとき、ランタイム・インストルメンテーション・ファシリティがイネーブルにされる。【選択図】      図１６
2015510154.tif 000002
【特許請求の範囲】
【請求項１】
処理回路に可読であり、且つ、前記処理回路が実行するための命令を格納する有形ストレージ媒体を含む、プロセッサ上でランタイム・インストルメンテーション・ファシリティの実行をイネーブル及びディスエーブルにするためのコンピュータ・プログラム製品であって、
プロセッサにより、低特権状態での前記プロセッサによる実行のための命令をフェッチすることであって、前記命令は、ｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｆｆ（ＲＩＯＦＦ）命令及びｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｎ（ＲＩＯＮ）の一方である、フェッチすることと、
前記プロセッサにより、前記ランタイム・インストルメンテーション・ファシリティが前記低特権状態での前記命令の実行を許可する、及び、前記ランタイム・インストルメンテーション・ファシリティと関連した制御が有効であると判断することに基づいて、前記命令を実行することと、
を含む方法を実行し、、前記実行することは、
前記命令が前記ＲＩＯＦＦ命令であることに基づいて、前記ランタイム・インストルメンテーション・ファシリティをディスエーブルにすることであって、前記ディスエーブルにすることは、前記プロセッサにより前記ランタイム・インストルメンテーション・データをキャプチャすべきではないことを示すように前記プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む、ディスエーブルにすること、及び
前記命令が前記ＲＩＯＮ命令であることに基づいて、前記ランタイム・インストルメンテーション・ファシリティをイネーブルにすることであって、前記イネーブルにすることは、前記プロセッサにより前記ランタイム・インストルメンテーション・データをキャプチャすべきであることを示すように前記プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む、イネーブルにすること、
のいずれか一方を含む、コンピュータ・プログラム製品。
【請求項２】
前記方法は、
前記プロセッサにより、特権状態で実行されているプログラムにより、以前にある値に設定された問題状態実行制御ビットを含むランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）をフェッチすることをさらに含み、前記ランタイム・インストルメンテーション・ファシリティが前記低特権状態での前記命令の実行を許可すると判断することは、前記問題状態実行制御ビットの前記値に基づいている、請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
前記方法は、
前記プロセッサにより、特権状態で実行されているプログラムによって以前にある値に設定された妥当性ビットを含むランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）をフェッチすることをさらに含み、前記ランタイム・インストルメンテーション・ファシリティと関連した制御は有効であると判断することは、前記妥当性ビットの前記値に基づいている、請求項１に記載のコンピュータ・プログラム製品。
【請求項４】
前記方法は、
前記イネーブルにすることに基づいて、
前記プロセッサにより、前記プロセッサ上で実行されているアプリケーション・プログラムの命令の命令ストリームに基づいて前記ランタイム・インストルメンテーション・データをキャプチャすることであって、前記キャプチャすることは、前記ランタイム・インストルメンテーション・データを前記プロセッサの収集バッファ内に格納することを含む、キャプチャすることと、
前記プロセッサにより、ランタイム・インストルメンテーションのサンプル・ポイント・トリガを検出することと、
前記ランタイム・インストルメンテーション・サンプル・ポイント・トリガを検出することに基づいて、前記収集バッファのコンテンツを報告グループとしてプログラム・バッファ内にコピーすることであって、前記プログラム・バッファは、前記アプリケーション・プログラムによりアクセス可能なアドレス空間の主ストレージ内に配置される、コピーすることと、
をさらに含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項５】
前記方法は、
前記収集バッファにおいて、命令アドレス及び前記命令ストリームの前記実行中に検出されたイベントに対応するメタデータをキャプチャすること、
をさらに含む、請求項４に記載のコンピュータ・プログラム製品。
【請求項６】
前記報告グループは、前記収集バッファのコンテンツ及びシステム情報記録を含む、所定の数の１つ又は複数のインストルメンテーション記録を含む、請求項４に記載のコンピュータ・プログラム製品。
【請求項７】
前記コピーすることは、前記プログラム・バッファの現在アドレスで開始して前記報告グループを前記プログラム・バッファ内にコピーすることを含み、前記プログラム・バッファは、前記プログラム・バッファ内の最後のバイトのアドレス及び前記プログラム・バッファ内の前記現在アドレスも指定する命令によりアクセス可能な制御ブロックによって指定されるプログラム・バッファ起点アドレスに格納される、請求項４に記載のコンピュータ・プログラム製品。
【請求項８】
前記方法は、
前記ディスエーブルにすることに基づいて、残りの同じ間隔カウント（ＲＳＩＣ）フィールドを保存することと、
前記プロセッサにより、ＲＩＯＮ命令をフェッチすることと、
前記ＲＳＩＣフィールドを復元することと、
をさらに含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項９】
プロセッサ上でランタイム・インストルメンテーション・ファシリティの実行をイネーブル及びディスエーブルにするための方法であって、前記方法は、
プロセッサにより、低特権状態での前記プロセッサによる実行のための命令をフェッチすることであって、前記命令は、ｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｆｆ（ＲＩＯＦＦ）命令及びｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｎ（ＲＩＯＮ）の一方である、フェッチすることと、
前記プロセッサにより、前記ランタイム・インストルメンテーション・ファシリティが前記低特権状態での前記命令の実行を許可する、及び、前記ランタイム・インストルメンテーション・ファシリティと関連した制御が有効であると判断することに基づいて、前記命令を実行することと、
を含み、前記実行することは、
前記命令が前記ＲＩＯＦＦ命令であることに基づいて、前記ランタイム・インストルメンテーション・ファシリティをディスエーブルにすることであって、前記ディスエーブルにすることは、前記プロセッサにより前記ランタイム・インストルメンテーション・データをキャプチャすべきではないことを示すように前記プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む、ディスエーブルにすること、及び
前記命令が前記ＲＩＯＮ命令であることに基づいて、前記ランタイム・インストルメンテーション・ファシリティをイネーブルにすることであって、前記イネーブルにすることは、前記プロセッサにより前記ランタイム・インストルメンテーション・データをキャプチャすべきであることを示すように前記プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む、イネーブルにすること、
のいずれか一方を含む、方法。
【請求項１０】
前記プロセッサにより、特権状態で実行されているプログラムにより、以前にある値に設定された問題状態実行制御ビットを含むランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）をフェッチすることをさらに含み、前記ランタイム・インストルメンテーション・ファシリティが前記低特権状態での前記命令の実行を許可すると判断することは、前記問題状態実行制御ビットの前記値に基づいている、請求項９に記載の方法。
【請求項１１】
前記プロセッサにより、特権状態で実行されているプログラムによって以前にある値に設定された妥当性ビットを含むランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）をフェッチすることをさらに含み、前記ランタイム・インストルメンテーション・ファシリティと関連した制御は有効であると判断することは、前記妥当性ビットの前記値に基づいている、請求項９に記載の方法。
【請求項１２】
前記イネーブルにすることに基づいて、
前記プロセッサにより、前記プロセッサ上で実行されているアプリケーション・プログラムの命令の命令ストリームに基づいて前記ランタイム・インストルメンテーション・データをキャプチャすることであって、前記キャプチャすることは、前記ランタイム・インストルメンテーション・データを前記プロセッサの収集バッファ内に格納することを含む、キャプチャすることと、
前記プロセッサにより、ランタイム・インストルメンテーションのサンプル・ポイント・トリガを検出することと、
前記ランタイム・インストルメンテーション・サンプル・ポイント・トリガを検出することに基づいて、前記収集バッファのコンテンツを報告グループとしてプログラム・バッファ内にコピーすることであって、前記プログラム・バッファは、前記アプリケーション・プログラムによりアクセス可能なアドレス空間の主ストレージ内に配置される、コピーすることと、
をさらに含む、請求項９に記載の方法。
【請求項１３】
前記収集バッファにおいて、命令アドレス及び前記命令ストリームの前記実行中に検出されたイベントに対応するメタデータをキャプチャすること、
をさらに含む、請求項１２に記載の方法。
【請求項１４】
前記報告グループは、前記収集バッファのコンテンツ及びシステム情報記録を含む、所定の数の１つ又は複数のインストルメンテーション記録を含む、請求項１２に記載の方法。
【請求項１５】
前記コピーすることは、前記プログラム・バッファの現在アドレスで開始して前記報告グループを前記プログラム・バッファ内にコピーすることを含み、前記プログラム・バッファは、前記プログラム・バッファ内の最後のバイトのアドレス及び前記プログラム・バッファ内の前記現在アドレスも指定する命令によりアクセス可能な制御ブロックによって指定されるプログラム・バッファ起点アドレスに格納される、請求項１２に記載の方法。
【請求項１６】
前記ディスエーブルにすることに基づいて、残りの同じ間隔カウント（ＲＳＩＣ）フィールドを保存することと、
前記プロセッサにより、ＲＩＯＮ命令をフェッチすることと、
前記ＲＳＩＣフィールドを復元することと、
をさらに含む、請求項９に記載の方法。
【請求項１７】
プロセッサ上でランタイム・インストルメンテーション・ファシリティの実行をイネーブル及びディスエーブルにするためのシステムであって、前記システムは、
プロセッサを含み、且つ、方法を実施するように構成され、前記方法は、
プロセッサにより、低特権状態での前記プロセッサによる実行のための命令をフェッチすることであって、前記命令は、ｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｆｆ（ＲＩＯＦＦ）命令及びｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｎ（ＲＩＯＮ）の一方である、フェッチすることと、
前記プロセッサにより、前記ランタイム・インストルメンテーション・ファシリティが前記低特権状態での前記命令の実行を許可する、及び、前記ランタイム・インストルメンテーション・ファシリティと関連した制御が有効であると判断することに基づいて、前記命令を実行することと、
を含み、前記実行することは、
前記命令が前記ＲＩＯＦＦ命令であることに基づいて、前記ランタイム・インストルメンテーション・ファシリティをディスエーブルにすることであって、前記ディスエーブルにすることは、前記プロセッサにより前記ランタイム・インストルメンテーション・データをキャプチャすべきではないことを示すように前記プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む、ディスエーブルにすること、及び
前記命令が前記ＲＩＯＮ命令であることに基づいて、前記ランタイム・インストルメンテーション・ファシリティをイネーブルにすることであって、前記イネーブルにすることは、前記プロセッサにより前記ランタイム・インストルメンテーション・データをキャプチャすべきであることを示すように前記プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む、イネーブルにすること、
のいずれか一方を含む、システム。
【請求項１８】
前記方法は、
前記プロセッサにより、特権状態で実行されているプログラムにより、以前にある値に設定された問題状態実行制御ビットを含むランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）をフェッチすることをさらに含み、前記ランタイム・インストルメンテーション・ファシリティが前記低特権状態での前記命令の実行を許可すると判断することは、前記問題状態実行制御ビットの前記値に基づいている、請求項１７に記載のシステム。
【請求項１９】
前記方法は、
前記プロセッサにより、特権状態で実行されているプログラムによってある値に以前に設定された妥当性ビットを含むランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）をフェッチすることをさらに含み、前記ランタイム・インストルメンテーション・ファシリティと関連した制御は有効であることを判断することは、前記妥当性ビットの前記値に基づいている、請求項１７に記載のシステム。
【請求項２０】
前記方法は、
前記イネーブルにすることに基づいて、
前記プロセッサにより、前記プロセッサ上で実行されているアプリケーション・プログラムの命令の命令ストリームに基づいて前記ランタイム・インストルメンテーション・データをキャプチャすることであって、前記キャプチャすることは、前記ランタイム・インストルメンテーション・データを前記プロセッサの収集バッファ内に格納することを含む、キャプチャすることと、
前記プロセッサにより、ランタイム・インストルメンテーションのサンプル・ポイント・トリガを検出することと、
前記ランタイム・インストルメンテーション・サンプル・ポイント・トリガを検出することに基づいて、前記収集バッファのコンテンツを報告グループとしてプログラム・バッファ内にコピーすることであって、前記プログラム・バッファは、前記アプリケーション・プログラムによりアクセス可能なアドレス空間の主ストレージ内に配置される、コピーすることと、
をさらに含む、請求項１７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピューティング環境内の処理に関し、より具体的には、低特権状態（lesser-privileged state）からランタイム・インストルメンテーション・ファシリティ（run-time-instrumentation facility）の動作を制御することに関する。
【背景技術】
【０００２】
コンピュータ・プロセッサは、ますます複雑化する分岐予測及び命令キャッシング論理を用いて、トランザクションを実行する。これらのプロセスは、命令スループット、従って処理性能を高めるために導入されてきた。性能を向上させるための論理の導入は、特定のソフトウェア・アプリケーションがコンピュータ・プロセッサ上でどのように実行されるかを確実に予測することが困難になる。ソフトウェア開発プロセスの際、多くの場合、機能と性能との間はバランスされている。ソフトウェアは、そのソフトウェアを実行している基礎をなすハードウェアから１又は複数の抽象化レベルで実行される。ハードウェアが仮想化されるとき、付加的な抽象化層が導入される。性能向上論理及び種々の抽象化層が導入されると、プログラムが実行されているときにハードウェア・レベルで何が実際に行われているかを完全に理解することは困難である。この情報がない場合、ソフトウェア開発者は、ソフトウェア・アプリケーションを最適化するために、実行期間、メモリの使用、スレッド数等、より抽象的な方法を使用する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
ハードウェア特有の情報が利用可能であるとき、この情報は、典型的には、事後に開発者に与えられ、且つ、高レベルで、及び／又は他のプログラムの活動及びオペレーティング・システムが散りばめられて集合体として提供され、そのため、ソフトウェア・アプリケーションの効率及び精度に影響を及ぼし得る問題の識別が困難になる。
【課題を解決するための手段】
【０００４】
実施形態は、プロセッサ上でランタイム・インストルメンテーション・ファシリティの実行をイネーブル及びディスエーブルにするためのコンピュータ・プログラム製品、方法及びシステムを含む。低特権状態でのプロセッサによる実行のための命令が、プロセッサによりフェッチされる。プロセッサにより、ランタイム・インストルメンテーション・ファシリティが、低特権状態での命令の実行を許可する、及び、ランタイム・インストルメンテーション・ファシリティと関連した制御が有効であると判断される。命令がｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｆｆ（ＲＩＯＦＦ）命令であることに基づいて、ランタイム・インストルメンテーション・ファシリティがディスエーブルにされる。ディスエーブルにすることは、プロセッサによりランタイム・インストルメンテーション・データをキャプチャすべきではないことを示すように、プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む。命令がｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｎ（ＲＩＯＮ）命令であることに基づいて、ランタイム・インストルメンテーション・ファシリティがイネーブルにされる。イネーブルにすることは、プロセッサによりランタイム・インストルメンテーション・データをキャプチャすべきであることを示すように、プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む。
【０００５】
本発明の技術を通じて、付加的な特徴及び利点が実現される。本発明の他の実施形態及び側面は、本明細書において詳細に説明され、特許請求される本発明の一部と見なされる。利点及び特徴に関して本発明をより良好に理解するために、説明及び図面を参照されたい。
【０００６】
本発明と見なされる対象は、明細書の結論であるところの本明細書の最後にある特許請求の範囲において具体的に示され、明確に特許請求されている。本発明の上記及び他の特徴、並びに利点は、添付図面と関連して用いられる以下の詳細な説明から明らかである。
【図面の簡単な説明】
【０００７】
【図１】１つの実施形態における例示的なホスト・コンピュータ・システムを示す図である。
【図２】１つの実施形態における例示的なエミュレーション・ホスト・コンピュータ・システムを示す図である。
【図３】１つの実施形態における例示的なコンピュータ・システムを示す図である。
【図４】１つの実施形態における例示的なコンピュータ・ネットワークを示す図である。
【図５】１つの実施形態におけるコンピュータ・システムの要素を示す図である。
【図６】１つの実施形態におけるコンピュータ・システムの詳細な要素を示す。
【図７】１つの実施形態におけるコンピュータ・システムの詳細な要素を示す。
【図８】１つの実施形態におけるコンピュータ・システムの詳細な要素を示す。
【図９】１つの実施形態による、プロセッサのランタイム・インストルメンテーションのためのシステムの概略図を示す。
【図１０】１つの実施形態における、特権状態（privileged state）により設定可能な制御を含むランタイム・インストルメンテーション制御制御ブロック（ＲＩＣＣＢ）の一部を示す。
【図１１】１つの実施形態における、準特権（semi-privileged）ビット（Ｋ）が１に設定されるときのＲＩＣＣＢ制御ブロックの一部を示す。
【図１２】１つの実施形態による収集バッファ（collection buffer）を示す。
【図１３】１つの実施形態による報告グループ（reporting group）を示す。
【図１４】１つの実施形態による、ランタイム・インストルメンテーション・ファシリティを実施するためのプロセス・フローを示す。
【図１５】１つの実施形態による、ｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｏｆｆ（ＲＩＯＦＦ）命令を示す。
【図１６】１つの実施形態による、ＲＩＯＦＦ命令のプロセス・フローを示す。
【図１７】１つの実施形態による、ｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｏｎ（ＲＩＯＮ）命令を示す。
【図１８】１つの実施形態によるＲＩＯＮ命令のプロセス・フローを示す。
【図１９】１つの実施形態によるコンピュータ・プログラム製品を示す。
【発明を実施するための形態】
【０００８】
ランタイム・インストルメンテーション・ファシリティは、プロセッサが、ハードウェア・イベント・データを、ローリング履歴バッファ（rolling history buffer）内に収集し、履歴バッファをサンプリングし、履歴バッファからのデータを、アプリケーションがアクセス可能なストレージに格納することを可能にする。実行経路内に関心のない可能性がある要素が存在し得るので、一般的に、サンプリングをアプリケーションの実行トレースのサブセットに制限することが望ましい。例えば、ランタイム・インストルメンテーション・ファシリティにより収集されたデータが、コンパイラによりコンパイルされたプログラムを強化するために用いられる場合、ランタイム環境及びオペレーティング・システム・サービスに関連したデータは、有用でないことがある（例えば、コンパイラは、ランタイム環境又はオペレーティング・システム・サービスに影響を及ぼす能力を有することができないため）。さらに、サンプリングされる実行経路の範囲を制限することにより、ランタイム・インストルメンテーション・ファシリティは、収集されたインストルメンテーション・データを管理し、バッファに入れ、低減しなければならないコストを減らすことができ、これにより、インストルメンテーション機構のオーバーヘッドが最小限に保持される。本明細書で説明される実施形態により、アプリケーションからの命令に基づいて、ランタイム・インストルメンテーションをオフ（ディスエーブル）にすること及びオン（イネーブル）にすることが可能になる。
【０００９】
本明細書で実施形態において説明されるように、ｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｏｎ（ＲＩＯＮ：ランタイム・インストルメンテーション・オン）命令と呼ばれる第１の命令は、サンプリングされる実行経路のサブトレースのための開始点を指定する。本明細書でも説明されるように、ｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｏｆｆ（ＲＩＯＦＦ：ランタイム・インストルメンテーション・オフ）命令と呼ばれる第２の命令は、サンプリングされる実行経路のサブトレースのための終点を指定する。これらの命令は、コンパイルされたコードと、ランタイム環境との間に移行点において、命令ストリームに挿入することができる。さらに、コンパイラにより、ＲＩＯＮ命令及びＲＩＯＦＦ命令を命令ストリームに挿入し、サンプリング機構の焦点をコンパイルされたコードの特定の領域に合わせることができる。
【００１０】
実施形態によると、プログラム状況ワード（program status word、ＰＳＷ）内のビットが、ランタイム・インストルメンテーション・ファシリティの状態を示すために使用される。ＰＳＷ内のビットは、現在の実行点が、実行トレースのサンプリング間隔の内側にあるか（即ち、ランタイム・インストルメンテーション・ファシリティがオンにされ、データを収集する）、又はサンプリング間隔の外側にあるか（即ち、ランタイム・インストルメンテーション・ファシリティがオフにされ、データを収集しない）を示す。コンテキスト・スイッチにわたってＰＳＷが保存され復元されるので、実行スレッドのディスパッチにわたってサンプリング機構の状態が維持される。
【００１１】
本発明の実施形態は、管理されるランタイムのための、ハードウェア・ベースのランタイム・インストルメンテーションン・ファシリティである。本明細書で用いられる場合、用語「管理されるランタイム」とは、状態をカプセル封入し、プログラム又はアプリケーションを実行するのに用いられるリソースを管理する環境を指す（例えば、Ｊａｖａ（登録商標）仮想マシン、又は「ＪＶＭ」オペレーティング・システム、ミドルウェア等）。ランタイム・インストルメンテーション・ファシリティの実施形態は、プログラムが、中央演算処理ユニット（ＣＰＵ）データを含む、プログラム実行についての情報を収集することを可能にする。収集された情報により、マネジャー・ランタイム環境が、情報を収集するプロセッサについての洞察を取得することが可能になる。ランタイム・インストルメンテーション・ファシリティの実施形態は、収集バッファ内にイベントのシーケンス（例えば、成立した分岐、レジスタ値等）を収集するためのハードウェア・ファシリティを含む。収集バッファ（又は、最新の記録を含む収集バッファのサブセット）は、これらに限定されるものではないが、命令ストリームに挿入される命令の形のソフトウェアの指示、実行される命令の間隔が完了する、最後のサンプルの期間満了からの所定の経過時間、及び／又はデータ若しくは命令キャッシュミスのような所定のハードウェア・イベントが観察されるといった、サンプル・トリガ・イベントのプログラム可能なセット時に、アプリケーションのアドレス空間（例えば、ＪＶＭのアドレス空間）のプログラム・バッファ内にコピーされる。
【００１２】
動的コンパイラは、本明細書で説明されるハードウェア・ベースのランタイム・インストルメンテーション・ファシリティによって収集されるような、ランタイム情報を利用すして、オンライン式フィードバック指向最適化（feedback directed optimization）を実行する。例えば、重要な実行経路、プロファイル値、及び好ましい分岐方向についての情報を、動的コンパイラにより使用して、コードを特殊化又はバージョン化し、インライン化を指示し、実行経路の順序を変え、分岐の直線化といった最適化を実施することができる。本明細書で説明される実施形態により生成されるデータは、データ再編成のような最適化の他の形態のために用いることもできる。
【００１３】
図１は、１つの実施形態におけるホスト・コンピュータ・システム５０の代表的なコンポーネントを示す。コンピュータ・システムにおいて、コンポーネントの他の構成を用いることもできる。代表的なホスト・コンピュータ・システム５０は、主ストア（コンピュータ・メモリ）２と通信する１つ又は複数のプロセッサ１、並びにストレージ・デバイス１１及び他のコンピュータ又はＳＡＮ等と通信するためのネットワーク１０へのＩ／Ｏインターフェースを含む。プロセッサ１は、アーキテクチャ化された（architected）命令セット及びアーキテクチャ化された機能を有するアーキテクチャに準拠している。プロセッサ１は、プログラム・アドレス（仮想アドレス）をメモリの実アドレスに変換するための動的アドレス変換（dynamic address translation、ＤＡＴ）３を有することができる。ＤＡＴ３は、典型的には、変換をキャッシュに入れるための変換ルックアサイド・バッファ（translation lookaside buffer、ＴＬＢ）７を含むので、コンピュータ・メモリ２のブロックへの後のアクセスでは、アドレス変換の遅延を要しない。典型的には、キャッシュ９が、コンピュータ・メモリ２と、プロセッサ１との間に用いられる。キャッシュ９は、１つより多いＣＰＵが利用可能な大型キャッシュと、大型キャッシュと、各ＣＰＵとの間のより小型でより高速な（下位レベルの）キャッシュとを有する階層とすることができる。幾つかの実施形態においては、下位レベル・キャッシュが分割されて、命令のフェッチ及びデータ・アクセスのための別個の下位レベル・キャッシュを与える。１つの実施形態において、命令は、キャッシュ９を介して、命令フェッチ・ユニット４により、コンピュータ・メモリ２からフェッチされる。命令は、命令デコード・ユニット６においてデコードされ、命令実行ユニット８にディスパッチされる（幾つかの実施形態においては、他の命令を用いて）。典型的には、例えば、算術演算実行ユニット、浮動小数点実行ユニット、及び分岐命令実行ユニットなどの幾つかの命令実行ユニット８が用いられる。命令は、命令実行ユニット８により実行され、必要に応じて、命令が指定したレジスタ又はコンピュータ・メモリ２からオペランドにアクセスする。コンピュータ・メモリ２からオペランドにアクセスする（オペランドをロード又はストア（格納）する）場合、典型的には、実行される命令の制御下で、ロード・ストア・ユニット５がアクセスを処理する。命令は、ハードウェア回路又は内部のマイクロコード（ファームウェア）において、又はその両方の組み合わせによって実行することができる。
【００１４】
図２において、図１のホスト・コンピュータ・システム５０などのホスト・アーキテクチャのホスト・コンピュータ・システムをエミュレートする、エミュレートされたホスト・コンピュータ・システム２１が提供される。エミュレートされたホスト・コンピュータ・システム２１において、ホスト・プロセッサ（ＣＰＵ）１は、エミュレートされたホスト・プロセッサ（又は仮想ホスト・プロセッサ）２９であり、ホスト・コンピュータ・システム５０のプロセッサ１のものとは異なるネイティブ命令セット・アーキテクチャを有するネイティブ・プロセッサ２７を含む。エミュレートされたホスト・コンピュータ・システム２１は、ネイティブ・プロセッサ２７がアクセス可能なメモリ２２を有する。１つの実施形態において、メモリ２２は、コンピュータ・メモリ２の部分と、エミュレーション・ルーチン・メモリ２３の部分とに区分化される。コンピュータ・メモリ２は、ホスト・コンピュータ・アーキテクチャに従って、エミュレートされたホスト・コンピュータ・システム２１のプログラムに利用可能である。ネイティブ・プロセッサ２７は、エミュレートされたプロセッサ２９のもの以外のアーキテクチャのアーキテクチャ化命令セットのネイティブ命令及びエミュレーション・ルーチン・メモリ２３から取得された命令を実行し、且つ、アクセスされたホスト命令をデコードして、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを判断することができるシーケンス及びアクセス／デコード・ルーチンにおいて取得される１つ又は複数の命令を用いて、コンピュータ・メモリ２内のプログラムによる実行のためにホスト命令にアクセスすることができる。ホスト・コンピュータ・システム５０のアーキテクチャのために定められた、例えば、汎用レジスタ、制御レジスタ、動的アドレス変換、及びＩ／Ｏサブシステムのサポート、並びにプロセッサ・キャッシュといったファシリティを含む他のファシリティを、アーキテクチャ化ファシリティ・ルーチンによってエミュレートすることができる。エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を高めるために、（汎用レジスタ、及び仮想アドレスの動的変換などの）ネイティブ・プロセッサ２７において利用可能な機能を利用することもできる。専用ハードウェア及びオフロード・エンジンを設けて、ホスト・コンピュータ・システム５０の機能をエミュレートする際にネイティブ・プロセッサ２７を補助することもできる。
【００１５】
メインフレームにおいて、アーキテクチャ化されたマシン命令は、通常、プログラマによって、多くの場合コンパイラ・アプリケーションを介して、今日では「Ｃ」プログラマによって用いられる。ストレージ媒体内に格納されたこれらの命令は、ｚ／アーキテクチャのＩＢＭ（登録商標）サーバにおいて、又は代替的に他のアーキテクチャを実行するマシンにおいて、ネイティブに実行することができる。これらの命令は、既存及び将来のＩＢＭ（登録商標）メインフレーム・サーバにおいて、及び、ＩＢＭ（登録商標）の他のマシン（例えば、ｐＳｅｒｉｅｓ（登録商標）サーバ及びｘＳｅｉｒｅｓ（登録商標）サーバ）上で、エミュレートすることができる。これらの命令は、ＩＢＭ（登録商標）、Ｉｎｔｅｌ（登録商標）、ＡＭＤ（商標）、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓその他によって製造されたハードウェアを用いて種々のマシン上でＬｉｎｕｘ（登録商標）を実行しているマシンにおいて実行することができる。Ｚ／アーキテクチャ（登録商標）下でそのハードウェア上で実行することに加えて、Ｌｉｎｕｘ（登録商標）を用いること、並びに、一般に実行がエミュレーション・モードにある、Ｈｅｒｃｕｌｅｓ、ＵＭＸ、又はＦｕｎｄａｍｅｎｔａｌ  Ｓｏｆｔｗａｒｅ，Ｉｎｃ．（ＦＳＩ）、又はＰｌａｔｆｏｒｍ  Ｓｏｌｕｔｉｏｎｓ，Ｉｎｃ．（ＰＳＩ）によるエミュレーションを用いるマシンを使用することもできる。エミュレーション・モードにおいては、ネイティブ・プロセッサは、エミュレートされたプロセッサのアーキテクチャをエミュレートするために、エミュレーション・ソフトウェアを実行する。。
【００１６】
エミュレートされたホスト・コンピュータ・システム２１のコンポーネントの１つ又は複数は、「ＩＢＭ（登録商標）  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」、出版番号ＳＡ２２−７８３２−０８、第９版、２０１０年８月」に記載されており、その全体は、引用により本明細書に含まれる。ＩＢＭは、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で使用される他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーション又は他の会社の登録商標、商標、又は製品名であり得る。
【００１７】
ネイティブ・プロセッサ２７は、典型的に、エミュレートされたプロセッサのエミュレーションを実行するためにファームウェア又はネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ルーチン・メモリ２３内に格納されたエミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令のフェッチと実行を担当する。エミュレーション・ソフトウェアは、エミュレートされたプログラム・カウンタを維持し、命令境界を常時監視している。エミュレーション・ソフトウェアは、一度に１つ又は複数のエミュレートされたマシン命令をフェッチし、ネイティブ・プロセッサ２７により実行するために、１つ又は複数のエミュレートされたマシン命令を、対応するネイティブ・マシン命令のグループに変換することができる。これらの変換された命令をキャッシュに入れて、より高速の変換を達成することができる。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持して、オペレーティング・システム及びエミュレートされたプロセッサのために書かれたアプリケーションが正確に動作することを保証する。さらに、エミュレーション・ソフトウェアは、これらに限られるものではないが、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブル及びページ・テーブルを含む動的アドレス変換機能、割り込み機構、コンテキスト・スイッチ機構、時刻（Time of Day、ＴＯＤ）クロック、及びＩ／Ｏサブシステムへのアーキテクチャ化インターフェースを含む、エミュレートされたプロセッサのアーキテクチャによって識別されるリソースを提供し、エミュレートされたプロセッサ２９上で実行するように設計されたオペレーティング・システム又はアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ２７上で実行できるようにする。
【００１８】
エミュレートされる特定の命令がデコードされ、個々の命令の機能を実施するためのサブルーチンが呼び出される。エミュレートされたプロセッサ１の機能をエミュレートするエミュレーション・ソフトウェアの機能は、例えば、「Ｃ」サブルーチン若しくはドライバ又は好ましい実施形態の説明を理解した後で当技術の範囲内にある特定のハードウェアのためのドライバを提供するための他の何らかの方法で実装される。
【００１９】
１つの実施形態において、本発明は、ソフトウェア（ライセンス内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれる場合もあるが、そのいずれも本発明の１つ又は複数の態様と整合性がある）により実施することができる。図１を参照すると、本発明を具体化するソフトウェア・プログラム・コードには、ホスト・コンピュータ・システム５０のＣＰＵ（中央演算処理ユニット）１としても知られるプロセッサにより、長期ストレージ媒体、ＣＤ−ＲＯＭドライブ、テープドライブ、又はハードドライブなどのストレージ・デバイス１１からアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はＣＤ−ＲＯＭなどの、データ処理システムと共に使用するための種々の周知の媒体のいずれかの上で具体化することができる。コードは、こうした媒体上に分散させてもよく、又はコンピュータ・メモリ２からユーザに分散させてもよく、又は、こうした他のシステムのユーザが使用するために、ネットワーク１０上の１つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【００２０】
代替的に、コンピュータ・メモリ２においてプログラム・コードを具体化し、プロセッサ・バス（図示せず）を用いて、プロセッサ１によりプログラム・コードにアクセスすることができる。上述したプログラム・コードは、種々のコンピュータ・コンポーネントの機能及び相互作用を制御するオペレーティング・システムと、１つ又は複数のアプリケーション・プログラムとを含む。プログラム・コードは、通常、ストレージ・デバイス１１などの高密度媒体からコンピュータ・メモリ２にページングされ、そこでプロセッサ１による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び／又は、ネットワークを介してソフトウェア・コードを分散させる技術及び方法は周知であり、本明細書ではこれ以上論じない。プログラム・コードは、作成され、有形の媒体（これらに限定されるものではないが、電子メモリ・モジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープ等を含む）上に格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【００２１】
図３は、本発明を実施することができる代表的なワークステーション又はサーバ・ハードウェア・システムを示す。図３のシステム１００は、随意的な周辺機器を含む、パーソナル・コンピュータ、ワークステーション、又はサーバなどの代表的なベース・コンピュータ・システム１０１を含む。ベース・コンピュータ・システム１０１は、１つ又は複数のプロセッサ１０６と、周知の技術に従って１つ又は複数のプロセッサ１０６と、ベース・コンピュータ・システム１０１の他のコンポーネントとを接続し、これらの間の通信を可能にするために用いられるバス（図示せず）とを含む。バスは、プロセッサ１０６を、、メモリ１０５及びハードドライブ（例えば、磁気媒体、ＣＤ、ＤＶＤ、及びフラッシュ・メモリのいずれかを含む）又はテープドライブを含むことができる長期ストレージ１０７に接続する。ベース・コンピュータ・システム１０１はまた、バスを介して、１つ又は複数のプロセッサ１０６を、キーボード１０４、マウス１０３、プリンタ／スキャナ１１０、及び／又はタッチ・センシティブ・スクリーン、デジタル化された入力パッド等のいずれかのユーザ・インターフェース機器とすることができる他のインターフェース機器といった、１つ又は複数のインターフェース機器に接続する、ユーザ・インターフェース・アダプタを含むこともできる。バスはまた、ディスプレイ・アダプタを介して、１つ又は複数のプロセッサを、ＬＣＤスクリーン又はモニタなどのディスプレイ装置１０２にも接続する。
【００２２】
ベース・コンピュータ・システム１０１は、ネットワーク１０９と通信する１０８ことができるネットワーク・アダプタを介して、他のコンピュータ又はコンピュータのネットワークと通信することができる。例示的なネットワーク・アダプタは、通信チャネル、トークン・リング、イーサネット（登録商標）、又はモデムである。或いは、ベース・コンピュータ・システム１０１は、セルラー・デジタル・パケット・データ（ＣＤＰＤ）カードなどの無線インターフェースを用いて通信することができる。ベース・コンピュータ・システム１０１は、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）内の上述した他のコンピュータと関連付けることができ、又は、別のコンピュータ等とのクライアント／サーバ構成におけるクライアントとすることができる。
【００２３】
図４は、本発明を実施することができるデータ処理ネットワーク２００を示す。データ処理ネットワーク２００は、各々が複数の個々のワークステーション２０１、２０２、２０３、２０４、及び／又は図３のベース・コンピュータ・システム１０１を含むことができる、無線ネットワーク及び有線ネットワークのような複数の個々のネットワークを含むことができる。さらに、当業者であれば理解するように、１つ又は複数のＬＡＮを含ませることができ、ＬＡＮは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含むことができる。
【００２４】
プログラミング・コード１１１をメモリ１０５において具体化し、プロセッサ・バスを用いてプロセッサ１０６により、このプログラミング・コード１１１にアクセスすることができる。こうしたプログラミング・コードは、種々のコンピュータ・コンポーネントの機能及び相互作用を制御するオペレーティング・システムと、１つ又は複数のアプリケーション・プログラム１１２とを含む。プログラム・コードは、通常、長期ストレージ１０７から高速メモリ１０５にページングされ、そこでプロセッサ１０６による処理のために利用可能になる。ソフトウェア・プログラミング・コードをメモリ内、物理媒体上で具体化し、及び／又は、ネットワークを介してソフトウェア・コードを分散させる技術及び方法は周知であり、本明細書ではこれ以上論じない。プログラム・コードは、有形の媒体（これらに限定されるものではないが、電子メモリ・モジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープ等を含む）上に作成され格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【００２５】
プロセッサが最も容易に利用できるキャッシュ（通常、プロセッサの他のキャッシュよりも高速で小さい）は、最下位（Ｌ１又はレベル１）のキャッシュであり、主ストア（主メモリ）は、最上位レベルのキャッシュ（３つのレベルがある場合にはＬ３）である。最下位レベルのキャッシュは、実行されるマシン命令を保持する命令キャッシュ（Ｉ−キャッシュ）と、データ・オペランドを保持するデータ・キャッシュ（Ｄ−キャッシュ）とに分割されることが多い。
【００２６】
引き続き図４を参照すると、ネットワークはまた、ゲートウェイ・コンピュータ（クライアント・サーバ）２０６、又は（データ・リポジトリにアクセスすることができ、且つ、ワークステーション２０５から直接アクセスすることもできる）アプリケーシ・サーバ（遠隔サーバ）２０８などの、メインフレーム・コンピュータ又はサーバを含むこともできる。ゲートウェイ・コンピュータ２０６は、各々のネットワーク２０７へのエントリ・ポイントとして働く。ゲートウェイは、１つのネットワーキング・プロトコルを別のものに接続するときに必要とされる。ゲートウェイ・コンピュータ２０６は、通信リンクによって、別のネットワーク（例えば、インターネット２０７）に結合できることが好ましい。ゲートウェイ・コンピュータ２０６はまた、通信リンクを用いて、１つ又は複数のワークステーション１０１、２０１、２０２、２０３及び２０４に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なＩＢＭ（登録商標）  ｅＳｅｒｖｅｒ（登録商標）、  ｚＳｅｒｉｅｓ（登録商標）ｚ９（登録商標）サーバを用いて実装することができる。
【００２７】
１つの実施形態において、本発明を具体化するソフトウェア・プログラミング・コードには、図３の長期ストレージ１０７などの長期ストレージ媒体から、ベース・コンピュータ・システム１０１のプロセッサ１０６によりアクセスされる。ソフトウェア・プログラミング・コードは、ディスケット、ハードドライブ、又はＣＤ−ＲＯＭといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、そのような媒体上で分散させても、又はメモリからユーザ２１０及び２１１に分散させてもよく、又はこうした他のシステムのユーザが用いるために、ネットワーク上で１つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【００２８】
図５を参照すると、プロセッサ１０６に関する例示的なプロセッサ実施形態が示される。メモリ・ブロックをバッファに入れてプロセッサ１０６の性能を向上させるために、１つ又は複数のレベルのキャッシュ３０３が用いられる。キャッシュ３０３は、使用される可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、６４バイト、１２８バイト、又は２５６バイトのメモリ・データである。１つの実施形態において、命令をキャッシュに入れるために、データをキャッシュに入れるのとは別個のキャッシュが用いられる。キャッシュ・コヒーレンス（メモリ及びキャッシュ内のラインのコピーの同期）は、多くの場合、当技術分野において周知の種々の「スヌープ（snoop）」アルゴリズムによって与えられる。プロセッサ・システムのメモリ１０５などの主ストレージは、キャッシュと呼ばれることが多い。４つのレベルのキャッシュ３０３を有するプロセッサ・システムにおいて、メモリ１０５は、典型的にはより高速であり、且つ、コンピュータ・システムが利用できる不揮発性ストレージ（ＤＡＳＤ、テープ等）の一部だけを保持するので、レベル５（Ｌ５）のキャッシュと呼ばれることがある。メモリ１０５は、オペレーティング・システムによってメモリ１０５との間でページングされるデータのページを「キャッシュする」。
【００２９】
プログラム・カウンタ（命令カウンタ）３１１は、実行される現在の命令（current instruction）のアドレスを常時監視している。ｚ／アーキテクチャプロセッサのプログラム・カウンタは６４ビットであり、従来のアドレッシング制限をサポートするために、３１ビット又は２４ビットに切り捨てされ得る。プログラム・カウンタは、典型的には、コンテキスト・スイッチの際に持続するように、コンピュータのプログラム状況ワード（ＰＳＷ）内で具体化される。従って、例えばオペレーティング・システムにより、プログラム・カウンタ値を有する進行中のプログラムに割り込みをかけることが可能である（即ち、プログラム環境からオペレーティング・システム環境への現在のコンテキスト・スイッチ）。プログラムがアクティブでない間、プログラムのＰＳＷはプログラム・カウンタ値を維持し、オペレーティング・システムが実行されている間、オペレーティング・システムの（ＰＳＷ内の）プログラム・カウンタが用いられる。１つの実施形態において、プログラム・カウンタは、現在の命令のバイト数に等しい量だけインクリメントされる。Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｉｎｇ（ＲＩＳＣ）命令は、典型的には固定長であり、Ｃｏｍｐｌｅｘ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｉｎｇ（ＣＩＳＣ）命令は、典型的には可変長である。ＩＢＭ（登録商標）  ｚ／アーキテクチャの命令は、２バイト、４バイト、又は６バイトの長さを有するＣＩＳＣ命令である。例えば、コンテキスト・スイッチ操作又は分岐命令の分岐成立（Branch taken）操作により、プログラム・カウンタ３１１が変更される。コンテキスト・スイッチ操作において、現行のプログラム・カウンタ値は、実行されるプログラムについての他の状態情報（条件コードなど）と共にＰＳＷ内に保存され、新しいプログラム・カウンタ値がロードされ、実行される新しいプログラム・モジュールの命令を指し示す。分岐成立操作を行い、分岐命令の結果をプログラム・カウンタ３１１にロードすることにより、プログラムが判断を下すこと又はプログラム内でループすることを可能にする。
【００３０】
１つの実施形態において、プロセッサ１０６の代わりに命令をフェッチするために、命令フェッチ・ユニット３０５が用いられる。命令フェッチ・ユニット３０５は、「次の順次命令（next sequential instruction）」、分岐成立命令のターゲット命令、又はコンテキスト・スイッチの後のプログラムの最初の命令のいずれかをフェッチする。１つの実施形態において、命令フェッチ・ユニット３０５は、プリフェッチされた命令を用いることができる可能性に基づいて、命令を投機的にプリフェッチするためのプリフェッチ技術を用いる。例えば、命令フェッチ・ユニット３０５は、次の順次命令を含む１６バイトの命令と、付加的なバイトの更なる順次命令とをフェッチすることができる。
【００３１】
次に、フェッチされた命令が、プロセッサ１０６により実行される。１つの実施形態において、フェッチされた命令は、命令フェッチ・ユニット３０５のデコード／ディスパッチ・ユニット３０６に渡される。デコード／ディスパッチ・ユニット３０６は、命令をデコードし、デコードされた命令についての情報を適切な実行ユニット３０７、３０８、及び／又は３１０に転送する。実行ユニット３０７は、命令フェッチ・ユニット３０５から、デコードされた算術命令についての情報を受け取り、命令の操作コード（オペコード）に従ってオペランドに関する算術演算を行う。オペランドは、メモリ１０５、アーキテクチャ化レジスタ３０９、又は実行されている命令の即値フィールドのいずれかから、実行ユニット３０７に与えられる。実行の結果は、格納される場合には、メモリ１０５、アーキテクチャ化レジスタ３０９、又は他のマシン・ハードウェア（制御レジスタ、ＰＳＷレジスタ等のような）内に格納される。
【００３２】
プロセッサ１０６は、典型的には、命令の機能を実行するための１つ又は複数の実行ユニット３０７、３０８、及び３１０を有する。図６を参照すると、実行ユニット３０７は、インターフェース論理４０７を介して、アーキテクチャ化レジスタ３０９、デコード／ディスパッチ・ユニット３０６、ロード・ストア・ユニット３１０、及びその他のプロセッサ・ユニット４０１と通信することができる。実行ユニット３０７は、幾つかのレジスタ回路４０３、４０４、及び４０５を用いて、算術論理演算ユニット（ＡＬＵ）４０２が演算対象とする情報を保持することができる。ＡＬＵ４０２は、加算（ａｄｄ）、減算（ｓｕｂｔｒａｃｔ）、乗算（ｍｕｌｔｉｐｌｙ）及び除算（ｄｉｖｉｄｅ）などの算術演算、並びに、論理積（ａｎｄ）、論理和（ｏｒ）及び排他的論理和（ＸＯＲ）、ローテート（ｒｏｔａｔｅ）及びシフト（ｓｈｉｆｔ）などの論理関数を実行する。１つの実施形態において、ＡＬＵは、設計に依存する専用の演算をサポートする。他の回路は、例えば条件コード及び復元サポート論理を含む、他のアーキテクチャ化ファシリティ４０８を提供することができる。典型的には、ＡＬＵ演算の結果は、出力レジスタ回路４０６内に保持され、この出力レジスタ回路４０６が、結果を種々の他の処理機能に転送することができる。他の実施形態においては、多数のプロセッサ・ユニットの構成が存在し、本説明は、一実施形態の代表的な理解を与えることのみを意図している。
【００３３】
例えばＡＤＤ命令は、算術及び論理機能を有する実行ユニット３０７で実行され、一方、例えば浮動小数点命令は、特化された浮動小数点能力を有する浮動小数点実行ユニット（図示せず）で実行される。実行ユニットは、オペランドに対して操作コードが定めた関数を実行することにより、命令が特定したオペランドに対して動作することが好ましい。例えば、ＡＤＤ命令は、命令のレジスタ・フィールドによって特定された２つのアーキテクチャ化レジスタ３０９内に見出されるオペランドに対して、実行ユニット３０７により実行することができる。
【００３４】
実行ユニット３０７は、２つのオペランドに対して算術加算を実行し、結果を第３のオペランドに格納し、ここで第３のオペランドは、第３のレジスタであっても又は２つのソース・レジスタの一方であってもよい。実行ユニット３０７は、シフト、ローテート、論理積、論理和及び排他的論理和のような種々の論理関数、並びに、加算、減算、乗算、除算のいずれかを含む、種々の代数関数を実行することができる算術論理演算ユニット（ＡＬＵ）４０２を用いることが好ましい。スカラー演算のために設計されたＡＬＵ４０２もあり、浮動小数点のために設計されたＡＬＵ４０２もある。実施形態において、データは、アーキテクチャに応じて、ビッグエンディアン（最下位バイトが最も高いバイト・アドレスである）、又はリトルエンディアン（最下位バイトが最も低いバイト・アドレスである）とすることができる。ＩＢＭ（登録商標）  ｚ／アーキテクチャは、ビッグエンディアンである。符号付きフィールドは、アーキテクチャに応じて、符号及び大きさ、１の補数、又は２の補数とすることができる。２の補数における負の値又は正の値は、ＡＬＵ内で加法しか必要としないため、ＡＬＵが減算能力を設計する必要がないという点で、２の補数は有利である。数値は、通常、省略表現で記述され、１２ビット・フィールドは、４，０９６バイトブロックのアドレスを定め、通常、例えば４Ｋバイト（キロバイト）ブロックとして記述される。
【００３５】
図７を参照すると、分岐命令を実行するための分岐命令情報が、典型的には、分岐ユニット３０８に送られ、この分岐ユニット３０８は、分岐履歴テーブル４３２のような分岐予測アルゴリズムを用いて、他の条件付き演算が完了する前に分岐の結果を予測する。条件付き演算が完了する前に、現在の分岐命令のターゲットがフェッチされ、投機的に実行される。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件及び投機された結果に基づいて、完了されるか又は破棄される。典型的な分岐命令は、条件コードを試験し、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐することができ、ターゲット・アドレスは、例えば、命令のレジスタ・フィールド又は即値フィールド内に見出されるものを含む幾つかの数に基づいて計算することができる。１つの実施形態において、分岐ユニット３０８は、複数の入力レジスタ回路４２７、４２８及び４２９と、出力レジスタ回路４３０とを有するＡＬＵ４２６を用いることができる。分岐ユニット３０８は、例えば、汎用レジスタ、デコード／ディスパッチ・ユニット３０６、又は他の回路４２５と通信することができる。
【００３６】
例えば、オペレーティング・システムによって開始されるコンテキスト・スイッチ、コンテキスト・スイッチを発生させるプログラム例外又はエラー、コンテキスト・スイッチを発生させるＩ／Ｏ割り込み信号、又は（マルチスレッド環境における）複数のプログラムのマルチスレッド活動を含む様々な理由により、命令のグループの実行に割り込みがかけられることがある。１つの実施形態において、コンテキスト・スイッチ動作により、現在実行中のプログラムについての状態情報が保存され、次いで、起動される別のプログラムについての状態情報がロードされる。状態情報は、例えば、ハードウェア・レジスタ又はメモリ内に保存することができる。状態情報は、実行される次の命令を指し示すプログラム・カウンタ値、条件コード、メモリ変換情報、及びアーキテクチャ化レジスタのコンテンツを含む。コンテキスト・スイッチ活動は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、又はファームウェア・コード（マイクロコード、ピココード、又はライセンス内部コード（ＬＩＣ））により単独で又はその組み合わせで実施することができる。
【００３７】
プロセッサは、命令により定義された方法に従ってオペランドにアクセスする。命令は、命令の一部の値を用いて即値オペランドを与え、汎用レジスタ又は専用レジスタ（例えば、浮動小数点レジスタ）のいずれかを明示的に指し示す１つ又は複数のレジスタ・フィールドを与えることができる。命令は、操作コード・フィールドによって、オペランドとして識別されるインプライド・レジスタ（implied register）を用いることができる。命令は、オペランドのためのメモリ位置を用いることができる。ｚ／アーキテクチャの長変位ファシリティ（long displacement facility）により例示されるように、オペランドのメモリ位置を、レジスタ、即値フィールド、又はレジスタと即値フィールドの組み合わせによって与えることができ、命令は、基底レジスタ、インデックス・レジスタ、及び即値フィールド（変位フィールド）を定め、これらが、互いに加算されてメモリ内のオペランドのアドレスをもたらす。ここでの位置（location）は、典型的には、特に断りのない限り、主メモリ（主ストレージ）内の記憶位置を意味する。
【００３８】
図８を参照すると、プロセッサは、ロード／ストア・ユニット３１０を用いて、ストレージにアクセスする。ロード／ストア・ユニット３１０は、キャッシュ・メモリ・インターフェースを通じてメモリ内のターゲット・オペランドのアドレスを取得し、オペランドをアーキテクチャ化レジスタ３０９若しくは別のメモリ位置にロードすることによって、ロード操作を行うことができ、又は、メモリ内のターゲット・オペランドのアドレスを取得し、アーキテクチャ化レジスタ３０９若しくは別のメモリ位置から取得したデータをメモリ内のターゲット・オペランドの記憶位置に格納することによって、ストア操作を行うことができる。ロード／ストア・ユニット３１０は、投機的なものであってもよく、命令シーケンスに対してアウト・オブ・オーダー式の順序でメモリにアクセスすることができるが、プログラムに対して、命令がイン・オーダー式に実行されたという外観を維持する。ロード／ストア・ユニット３１０は、アーキテクチャ化レジスタ３０９、デコード／ディスパッチ・ユニット３０６、キャッシュ／メモリ・インターフェース若しくは他の要素４５５と通信することができ、ストレージ・アドレスを計算し、且つ、パイプライン処理を順に行って操作をイン・オーダー式に保持するための、種々のレジスタ回路、ＡＬＵ４５８、及び制御論理４６３を含む。一部の動作は、アウト・オブ・オーダー式とすることができるが、ロード／ストア・ユニットは、アウト・オブ・オーダー式動作が、プログラムに対して、当技術分野において周知のようなイン・オーダー式に実行されたように見えるようにする機能を提供する。
【００３９】
好ましくは、アプリケーション・プログラムが「見ている」アドレスは、仮想アドレスと呼ばれることが多い。仮想アドレスは、「論理アドレス」及び「実効アドレス」と呼ばれることもある。これらの仮想アドレスは、これらに限定されるものではないが、仮想アドレスをオフセット値にプリフィックス付加すること、１つ又は複数の変換テーブルを介して仮想アドレスを変換することを含む、図５のＤＡＴ３１２のような種々のＤＡＴ技術の１つによって、物理的メモリ位置にリダイレクトされるという点で仮想のものであり、変換テーブルは、少なくともセグメント・テーブル及びページ・テーブルを単独で又は組み合わせて含み、セグメント・テーブルは、ページ・テーブルを指し示すエントリを有することが好ましい。ｚ／アーキテクチャにおいては、領域第１テーブル、領域第２テーブル、領域第３テーブル、セグメント・テーブル、及び随意的なページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、仮想アドレスを関連した物理的メモリ位置にマッピングするエントリを含む変換ルックアサイド・バッファ（ＴＬＢ）を用いることにより改善されることが多い。ＤＡＴ３１２が変換テーブルを用いて仮想アドレスを変換したときに、エントリが作成される。次いで、後に仮想アドレスを用いることで、低速の順次変換テーブル・アクセスではなく、高速のＴＬＢのエントリを用いることがきる。ＴＬＢのコンテンツは、最長時間未使用（Least Recently Used、ＬＲＵ）を含む種々の置換アルゴリズムによって管理することができる。
【００４０】
プロセッサ１０６がマルチプロセッサ・システムのプロセッサである場合には、各プロセッサは、コヒーレンシのために、Ｉ／Ｏ、キャッシュ、ＴＬＢ、及びメモリといった共有リソースをインターロック状態に保持する責任を負う。１つの実施形態において、キャッシュ・コヒーレンシを保持する際に、「スヌープ」技術が用いられる。スヌープ環境においては、共有を容易にするために、各キャッシュ・ラインを、共有状態、排他的状態、変更状態、無効状態等のいずれか１つの状態にあるものとしてマーク付けすることができる。
【００４１】
図５のＩ／Ｏユニット３０４は、プロセッサ１０６に、例えば、テープ、ディスク、プリンタ、ディスプレイ、及びネットワークを含む周辺機器に取り付けるための手段を与える。Ｉ／Ｏユニット３０４は、ソフトウェア・ドライバによってコンピュータ・プログラムに提示されることが多い。ＩＢＭ（登録商標）  ｚ／Ｓｅｒｉｅｓのようなメインフレームにおいては、チャネル・アダプタ及びオープン・システム・アダプタが、オペレーティング・システムと周辺機器との間に通信をもたらすメインフレームのＩ／Ｏユニットである。
【００４２】
インストルメンテーション・データは、プロセッサ１０６の動作に関連したデータである。１つの実施形態において、インストルメンテーション・データ及び他のシステム・レベル・メトリックへのアクセスが制限されていること又は利用できないことがある。コンピュータ・プロセッサは、特権状態（即ち、スーパーバイザ状態）、及び低特権状態（即ち、問題状態）の下で動作する。特権状態において、プログラムは、特権操作を介して、全てのシステム・リソースにアクセスする（例えば、全ての制御レジスタ及びスーパーバイザ・メモリ空間にアクセスする）ことができる。特権状態は、特権モード又はスーパーバイザ・モードとも呼ばれる。コンピュータ・プロセッサ上で実行されているオペレーティング・システムは、特権状態で動作し得る。低特権状態は、システム・リソースへのアクセスが制限されている非特権状態（non-privileged state）である。例えば、低特権状態で実行されているアプリケーション・プログラムは、制御レジスタへのアクセスが制限されるか又は制御レジスタにアクセスできないことがあり、且つ、オペレーティング・システムにより、アプリケーション・プログラムに割り当てられたユーザ・メモリ空間にしかアクセスすることができない。低特権状態は、典型的には、オペレーティング・システムの制御下で実行されるアプリケーション・プログラムに割り当てられ、特権操作を低特権状態で実施することはできない。低特権状態は、問題状態、問題モード、又はユーザ・モードとしても知られる。
【００４３】
低特権状態で実行されているプログラムに書き込み・アクセス可能でない１つのこうした制限されたリソースが、プログラム状況ワード（ＰＳＷ）である。ＰＳＷは、実行される次の命令のプログラム・カウンタと、分岐命令により使用可能な条件コード・フィールドと、インストルメンテーションがイネーブルにされているか又はディスエーブルにされているかを示すためのインストルメンテーション制御フィールドと、命令の順序を制御し、プログラムに割り当てられた特権状態を含むコンピュータ・プロセッサの状態を判断するために用いられる他の情報とを含むことができる。マルチスレッド処理環境においては、複数のプログラムが、利用可能なコンピュータ・プロセッサの容量を共有するか、又はタイムスライスする。プログラムの各々は、関連したＰＳＷ、プログラムに割り当てられた主ストレージにアクセスするためのアドレス変換テーブルの起点アドレス（origin address）、汎用レジスタの現在値のセット、制御レジスタ、浮動小数点レジスタ等を含む、コンテキスト情報を有する。現在アクティブな又は制御を行っているＰＳＷは、現（current）ＰＳＷと呼ばれる。この現ＰＳＷは、現在実行されているプログラムを制御する。コンピュータ・プロセッサは、割り込み能力を有し、この割り込み能力により、例外条件及び外部からの刺激に応答して、コンピュータ・プロセッサが、別のプログラムにより迅速にコンテキストを切り替えることが可能になる。割り込みが発生すると、コンピュータ・プロセッサは、現ＰＳＷを、特定のクラスの割り込みのための、旧（old）ＰＳＷ位置と呼ばれる割り当てられたストレージ位置に入れる。コンピュータ・プロセッサは、第２の割り当てられたストレージ位置から、新(new）ＰＳＷをフェッチする。この新しいコンテキストにより、実行される次のプログラムが判断される。１つの実施形態において、これらのストレージ位置は、コンピュータ・プロセッサがアクセス可能なメモリ位置に配置される。コンピュータ・プロセッサが割り込み処理を終了すると、割り込みを処理するプログラムは、旧ＰＳＷを含む旧コンテキストを再ロードし、これを再び現ＰＳＷとすることができ、これにより、割り込みを受けたプログラムが続行できるようになる。
【００４４】
ＰＳＷのフィールドは、明示的に（例えば、命令の実行がＰＳＷビットの一部を読み出す場合）、又は暗黙的に（例えば、命令フェッチ、オペランド・フェッチ、アドレス生成計算、アドレス生成ソース等の際に）参照することができる。明示的な参照は、一般に、実行時に実施されるのに対して、暗黙的な参照は、一般に、命令実行中のパイプラインの異なる段階（即ち、命令フェッチ、命令デコード、実行時、及び完了時）に実施される。ＰＳＷ内の個々のフィールドは、互いに独立して参照又は更新することができる。
【００４５】
１つの実施形態において、コンテキストを操作することにより、オペレーティング・システムは、コンピュータ・プロセッサによりランタイム・インストルメンテーションをイネーブルにすることを含む、コンピュータ処理リソースの制御を行う。ランタイム・インストルメンテーションは、オペレーティング・システムの実行の間又はオペレーティング・システムにより実行されるいずれかのソフトウェア・アプリケーションにより、イネーブル又はディスエーブルすることができる。ランタイム・インストルメンテーションのイネーブル／ディスエーブル状態は、プログラムと関連したＰＳＷ内に、コンテキスト情報として保存される。
【００４６】
ランタイム・インストルメンテーション（ＲＩ）ファシリティは、ｚ／アーキテクチャを実装するモデル上に組み込むことができる。ＲＩファシリティがインストールされ、イネーブルにされると、プログラム実行中、データが、ＣＰＵの１つ又は複数の収集バッファ内に収集され、次いで、プログラム・バッファに報告される。格納された情報の各単位は、報告グループと呼ばれる。報告グループのコンテンツは、プログラム実行中、そのコンテンツがＣＰＵにより認識されたイベントを表す複数の記録から成る。
【００４７】
ランタイム・インストルメンテーション・ファシリティが構成内にインストールされている場合、ＰＳＷフィールド（ＲＩビット）がランタイム・インストルメンテーションをイネーブルにする。ランタイム・インストルメンテーション制御の妥当性が、ＲＩビットをオンにする能力を決定し、ＲＩが１のとき、ＣＰＵ制御は有効であり、ランタイム・インストルメンテーションがイネーブルにされる。ランタイム・インストルメンテーション・ファシリティは、以下の命令：ｌｏａｄ  ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｃｏｎｔｒｏｌｓ、ｍｏｄｉｆｙ  ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｃｏｎｔｒｏｌｓ、ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｅｍｉｔ、ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｎｅｘｔ、ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｏｆｆ、ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｏｎ、ｓｔｏｒｅ  ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｃｏｎｔｒｏｌｓ、及びｔｅｓｔ  ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｃｏｎｔｒｏｌｓを含むことができる。
【００４８】
ｌｏａｄ  ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｃｏｎｔｒｏｌｓ（ＬＲＩＣ）命令は、ランタイム・インストルメンテーションを制御するランタイム・インストルメンテーション制御を初期化する。ｍｏｄｉｆｙ  ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｃｏｎｔｒｏｌｓ（ＭＲＩＣ）命令は、もともとＬＲＩＣによって確立されたランタイム・インストルメンテーション制御の全て又はサブセットを変更する。ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｅｍｉｔ（ＲＩＥＭＩＴ）命令は、汎用レジスタの値を収集バッファ内に格納することにより、これを収集する。ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｎｅｘｔ（ＲＩＮＥＸＴ）命令は、ＲＩＮＥＸＴの後の次の順次命令（ＮＳＩ）の指向サンプリング（directed sampling）を実施する。ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｏｆｆ（ＲＩＯＦＦ）命令は、ランタイム・インストルメンテーションをディスエーブルにする。ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｏｎ（ＲＩＯＮ）命令は、ランタイム・インストルメンテーションをイネーブルにする。ｓｔｏｒｅ  ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｃｏｎｔｒｏｌｓ（ＳＴＲＩＣ）命令は、ランタイム・インストルメンテーション制御の現在の値を指定されたストレージ位置に入れる。ｔｅｓｔ  ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｃｏｎｔｒｏｌｓ（ＴＲＩＣ）命令は、ランタイム・インストルメンテーション制御を検査する。正当な場合、制御変更インジケータの状態が設定される。
【００４９】
ランタイム・インストルメンテーション・ファシリティは、測定警報外部割り込みを保留する能力を含む。ランタイム・インストルメンテーションによって収集され、プログラム・バッファに報告される情報の一部はモデル依存であり、従って、定義されない。ランタイム・インストルメンテーション・ファシリティにより与えられるサンプル及びデータは、性能特性の統計的推定を目的としており、実質的に正確であり、繰り返されない場合もある。。例えば、サンプリング・モードに関係なく、例外を発生させた、又は特定のシステムの内部活動と関連付けられたサンプル命令が報告グループのストアをもたらすかどうか、そして、ストアされる場合、ランタイム・インストルメンテーション・データ内に含まれるモデル依存データが影響されるかどうかは、予測不可能である。
【００５０】
収集バッファは、プログラム実行中、そのコンテンツがプロセッサにより認識されたイベントについて報告する記録のセットをキャプチャするために用いられる。例として、１又は複数の成立した分岐の実行、トランザクション実行アボートイベント、命令フェッチ・キャッシュミス、データフェッチ又はストア・キャッシュミス、及びＲＩＥＭＩＴ命令のオペランドが挙げられる。ＲＩＥＭＩＴ命令の実行は、汎用レジスタの値を収集バッファ内に格納することにより、これを収集する。付加的なデータを収集すること、及び／又は命令データ・バッファなどの他のバッファに格納することが可能である。
【００５１】
報告は、報告制御が適用される。。サンプル命令が識別されると、各々の報告制御は、対応する条件のチェックをイネーブルにする。対応する条件が存在する場合、報告グループが形成され、格納される。報告制御がイネーブルにされないか、又はイネーブルにされた報告制御に関して対応する条件が存在しない場合、報告グループは格納されない。サンプル命令について報告されたデータは、命令データ・バッファ及び他のモデル依存ソースから取得され、その後このデータを用いて報告グループの１つ又は複数の記録のコンテンツを作成するために使用され、１つの上述した記録が命令の記録となる。
【００５２】
報告グループ・ストアにキャプチャすることができる記録タイプには：フィラー（filler）、追加（extra）、開始、タイムスタンプ、命令、発行（emit）、ＴＸアボート、呼び出し（call）、リターン（return）、及び転送（transfer）が含まれる。フィラー記録は、収集バッファ内の有正当記録の数が現在の報告グループ・サイズの報告グループを満たすのに十分でない場合に、報告グループにおいて使用される。追加記録は、報告グループの追加セクションにおいて使用することができる。開始記録は、第１の報告グループの最初の記録である。タイムスタンプ記録は、第１の報告グループ以外のあらゆる報告グループの記録０として格納される。命令記録は、サンプル命令に関して報告グループが格納されるときに、報告グループの最後の記録として作成される。発行記録は、ＲＩＥＭＩＴの実行の成功により作成される。トランザクション実行（ＴＸ）モード・アボート記録は、暗黙的アボート、又は、トランザクション・アボート命令の実行によって作成される。呼び出し記録は、呼び出しタイプ分岐命令として分類される分岐命令の実行によって作成される。リターン記録は、リターン・タイプ命令として分類されるリターン・タイプ分岐命令の実行によって作成される。転送記録は、特定の条件コード基準を満たす分岐命令の実行によって作成される。
【００５３】
図９は、１つの実施形態において実装することができるプロセッサのランタイム・インストルメンテーションのためのシステムの概略図を示す。１つの実施形態において、システム５００は、図３のプロセッサ１０６などの中央演算処理ユニット（ＣＰＵ）を含む。１つの実施形態において、プロセッサ１０６は、シングル・プロセッサである。代替的な実施形態において、プロセッサ１０６は、マルチコア・プロセッサの単一の処理コアである。１つの実施形態において、プロセッサ１０６は、様々な速度で動作し得る。
【００５４】
１つの実施形態において、プロセッサ１０６は、レジスタ５１０をさらに含む。レジスタ５１０は、プロセッサ１０６により使用するためのデータのワード（word）を格納することができるハードウェア・レジスタである。レジスタ５１０は、プロセッサ１０６によりアクセスが可能なデータ・ビットを格納するための１又は複数のラッチを含む。レジスタ５１０は、例えば、汎用レジスタ及び制御レジスタを含むことができる。プロセッサ１０６は、レジスタ５１０と通信するインストルメンテーション・モジュール５０６をさらに含む。インストルメンテーション・モジュール５０６は、プロセッサ１０６のインストルメンテーションを制御する処理回路である。インストルメンテーション・モジュール５０６は、１つ又は複数の成立した分岐の実行経路、トランザクション実行アボート・イベント、種々のランタイム・オペランド、タイムスタンプ情報等といったインストルメンテーション・データを、プロセッサ１０６から直接収集するように構成される。インストルメンテーション・モジュール５０６は、プロセッサ１０６からインストルメンテーション・データを収集し、そのインストルメンテーション・データを収集バッファ５０８に格納する。１つの実施形態において、収集バッファ５０８は、インストルメンテーション・モジュール５０６から受け取ったデータを収集する循環バッファ（circular buffer）であり、循環バッファが満たされると、この循環バッファは、最も古いデータを新しいデータで上書きする。
【００５５】
プロセッサ１０６は、１つ又は複数のオペレーティング・システム５１６及び１つ又は複数のアプリケーション５１８を実行する。１つ又は複数のオペレーティング・システム５１６及び１つ又は複数のアプリケーション５１８は、ハードドライブ、ＣＤ／ＲＯＭ、フラッシュ・メモリ等のようなストレージ５２０内に格納され、必要に応じてストレージ５２０から、ページと呼ばれ、必要に応じてストレージ５２０からランタイム・メモリ５０４へとロードされる現在実行されているオペレーティング・システム及び／又はアプリケーションの１つ又は複数のアクティブな部分を格納するために予約された主メモリ５１４のランタイム・メモリ５０４領域にロードされる。１つの実施形態において、オペレーティング・システムの各々は、ハイパーバイザ（図示せず）によって管理され、且つ、プロセッサ１０６により実行される仮想マシンとして実行される。
【００５６】
１つの実施形態において、プロセッサ１０６は、主メモリ５１４から、現在実行されているオペレーティング・システム又はアプリケーションに関する主メモリ５１４内のＰＳＷデータからのＰＳＷをレジスタ５１０にロードし、例えばレジスタ５１０において、１つ又は複数のプロセッサ１０６の設定を設定する。１つの実施形態において、レジスタ５１０内のＰＳＷは、インストルメンテーション・モジュール５０６をイネーブルにし、制御するための１又は複数のビットを含む。
【００５７】
１つ又は複数のアプリケーション５１８は、特定のオペレーティング・システム上で実行されるようにコンパイルされたソフトウェア・アプリケーション、インタープリタ（例えば、Ｊａｖａ（登録商標））上で実行される解釈済みコード、又はオペレーティング・システム・サポート・スレッド（例えば、プロセス管理、デーモン等）を含む。１つ又は複数のオペレーティング・システム５１６、及び／又は、１つ又は複数のアプリケーション５１８の各々は、インストルメンテーション・モジュール５０６をトリガして、インストルメンテーション・データの収集を開始又は停止するための命令を実行することができる。
【００５８】
１つの実施形態において、１つ又は複数のアプリケーション５１８の１つは、サンプル命令であると判断された命令を実行してサンプル命令の実行の完了時にサンプル・ポイントを作成し、インストルメンテーション・モジュール５０６が、収集バッファ５０８からのアプリケーションの収集データを、アプリケーションがアクセス可能な主メモリ５１４内のプログラム・バッファ５２２に移動される。主メモリ５１４は、当技術分野において周知の任意のアドレス指定可能メモリとすることができる。１つの実施形態において、主メモリ５１４は、キャッシュと呼ばれることもある、高速アクセス・バッファ・ストレージを含むことができる。各ＣＰＵは、関連したキャッシュを有することができる。付加的な実施形態において、主メモリ５１４は、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）である。さらに別の実施形態において、主メモリは、コンピュータのハードドライブ、又はアプリケーションによりアクセス可能なフラッシュ・メモリなどのストレージ・デバイスである。
【００５９】
ランタイム・インストルメンテーション制御を構成するために、プロセッサ１０６は、ｌｏａｄ  ｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｃｏｎｔｒｏｌｓ（ＬＲＩＣ）命令をサポートする。本明細書でさらに説明される特定のＬＲＩＣフィールドを超えて、他の機能をサポートするために、付加的なフィールドを定めることができることが理解されるであろう。ＬＲＩＣ命令は、ランタイム・インストルメンテーションをロードし、最初に構成するために使用することができ、且つ、図９のインストルメンテーション・・モジュール５０６によりサポートされる。１つの実施形態において、ランタイム・インストルメンテーション・モジュール５０６とも呼ばれるインストルメンテーション・モジュール５０６は、ランタイム・インストルメンテーション制御及び報告制御を実施する。ランタイム・インストルメンテーション制御の現在の状態は、ｓｔｏｒｅ  ｒｕｎ−ｔｉｍｅ  ｃｏｎｔｒｏｌｓ（ＳＴＲＩＣ）命令を用いて、図９のレジスタ５１０から主メモリ５１４に格納することができる。本明細書において、ＬＲＩＣ命令のオペランドとしてロード可能な制御ブロックの種々のフィールドの定義は、ランタイム・インストルメンテーション制御の対応する値の状態を参照するためにも用いられる。
【００６０】
図１０は、１つの実施形態における、特権状態により設定可能な制御を含むランタイム・インストルメンテーション制御制御ブロック（ＲＩＣＣＢ）の一部を示す。制御ブロック部分６００は、図１０を参照して説明されるもの以外の付加的な値を含むことができる。ＬＲＩＣ命令により、制御ブロック部分６００に対する変更を実施することができる。
【００６１】
制御ブロック部分は、妥当性ビット６０２（Ｖビット）を含む。妥当性ビット６０２は、以前にＬＲＩＣ命令により設定されているので、プロセッサにおけるランタイム・インストルメンテーション制御のセットの妥当性を示す。
【００６２】
制御ブロックはまた、低特権状態プログラムがＭＲＩＣ命令の実行を許可するかどうかを判断するために使用されるＳビット６０４も含む。Ｋビット６０６は、低特権状態プログラムが、ランタイム・インストルメンテーション制御の起点アドレス及び制限アドレスなどのランタイム・インストルメンテーション制御に関して、準特権状態での実行が許可されるかどうかを示す。Ｈビット６０８は、アドレス制御（即ち、起点アドレス、制限アドレス、及び現在のアドレス）が一次仮想アドレス空間を参照するか又はホーム仮想アドレス空間を参照するかを判断する。Ｏビット６１０は無視され、０として扱われる。
【００６３】
低特権状態サンプル報告制御ビット６１２（Ｐｓビット）は、低特権状態プログラムと併せて使用される。低特権状態において、ランタイム・インストルメンテーション制御内のＰｓビット６１２がゼロである場合、ランタイム・インストルメンテーションがイネーブルにされているときには、ランタイム・インストルメンテーション制御の報告制御は無視され、従って、報告グループは格納されない。低特権状態にあり、ランタイム・インストルメンテーション制御のＰｓビット６１２が１である場合、報告制御がチェックされ、その定められた機能に従って使用される。
【００６４】
スーパーバイザ状態サンプル報告制御ビット６１４（Ｑｓビット）は、スーパーバイザ状態プログラムと併せて使用される。スーパーバイザ状態において、ランタイム・インストルメンテーション制御のＱｓビット６１４がゼロである場合、ランタイム・インストルメンテーションがイネーブルにされているとき、ランタイム・インストルメンテーション制御の報告制御は無視され、従って、報告グループは格納されない。スーパーバイザ状態において、ランタイム・インストルメンテーション制御のＱｓビット６１４が１である場合、報告制御がチェックされ、その定められた機能に従って使用される。
【００６５】
低特権状態収集バッファ制御ビット６１６（Ｐｃビット）は、図９の収集バッファ５０８に対する更新を制御する。低特権状態において、ランタイム・インストルメンテーション制御のＰｃビット６１６がゼロである場合、ランタイム・インストルメンテーションがイネーブルにされているとき、ランタイム・インストルメンテーション制御の収集バッファ制御は無視され、収集バッファ５０８の更新が防止される。低特権状態において、ランタイム・インストルメンテーション制御のＰｃビット６１６が１である場合、収集バッファ制御がチェックされ、その定められた機能に従って使用される。
【００６６】
スーパーバイザ状態収集バッファ制御ビット６１８（Ｑｃビット）は、収集バッファ５０８に対する更新を制御する。スーパーバイザ状態において、ランタイム・インストルメンテーション制御内のＱｃビット６１８がゼロである場合、ランタイム・インストルメンテーションがイネーブルにされているときには、ランタイム・インストルメンテーション制御の収集バッファ制御は無視され、収集バッファ５０８の更新は防止される。スーパーバイザ状態において、ランタイム・インストルメンテーション制御内のＱｃビット６１８が１である場合、収集バッファ制御がチェックされ、その定められた機能に従って使用される。
【００６７】
Ｇビット６２０は、割り込み停止（halted interruption）とも呼ばれるランタイム・インストルメンテーションの割り込み停止の保留制御である。Ｇビット６２０がゼロである場合、割り込み停止は保留中でない。Ｇビット６２０が１である場合、割り込み停止は保留中である。プログラム・バッファ５２２内の第１の報告グループが書き込まれると、Ｇビット６２０はゼロに設定される。つまり、ランタイム・インストルメンテーション・プログラム・バッファ起点アドレス（ＲＯＡ）７０２が、図１１のランタイム・インストルメンテーション・プログラム・バッファ現在アドレス（ＲＣＡ）７０６に等しい場合、Ｇビット６２０はゼロに設定される。プログラム・バッファ５２２内の第１の報告グループ以外のストアが試行されたとき、ランタイム・インストルメンテーション停止条件が存在しない場合には、Ｇビット６２０がゼロに設定され、報告グループが格納される。プログラム・バッファ５２２内の第１の報告グループ以外のストアが試行されたとき、ランタイム・インストルメンテーション停止条件が存在する場合には、Ｇビット６２０が１に設定され、報告グループは格納されない。
【００６８】
Ｕビット６２２は、バッファ・フル割り込み（buffer-full interruption）及び割り込み停止に対するイネーブルメント制御である。Ｕビット６２２がゼロであるとき、割り込み要求の生成がディスエーブルにされ、保留中の場合は、保留中のままである。
【００６９】
Ｌビット６２４は、バッファ・フル割り込みの保留制御である。Ｌビット６２４がゼロである場合、バッファ・フル割り込みは保留中でない。Ｌビット６２４が１である場合、バッファ・フル割り込みは保留中である。
【００７０】
キー・フィールド９２６は、その値が報告グループのストアのためのストレージ保護キーとして使用される、４ビットの符号なし整数である。ストレージ・キーがストレージ・アクセス要求と関連したアクセス・キーと一致する場合にのみ、報告グループのストアが許可され、フェッチは、ストレージ・キーがアクセス・キーと一致する場合又はストレージ・キーのフェッチ保護ビットがゼロである場合のみ許可される。ストレージ・キーの４つのアクセス制御ビットがアクセス・キーと等しい場合、又はアクセス・キーがゼロである場合、キーが一致する。
【００７１】
図１１は、ＭＲＩＣが準特権モードでの実行が許可される（即ち、Ｋビットが１である）場合のＲＩＣＣＢ制御ブロックの一部を示す。制御ブロック７００は、ランタイム・インストルメンテーション制御の初期化のためのＬＲＩＣ命令のオペランドとすることもできる。制御ブロック７００は、図１１を参照して説明されるもの以外の付加的な値を含むことができる。１つの実施形態において、低特権状態プログラムにより、他の指定がないＭＲＩＣ命令オペランドのセクションにアクセスすることはできない。準特権モードが許可される場合、ランタイム・インストルメンテーション起点アドレス（ＲＯＡ）７０２及びランタイム・インストルメンテーション・プログラム・バッファ制限アドレス（ＲＬＡ）７０４は、低特権状態プログラムにより、ＭＲＩＣ命令を用いて設定される。ＲＯＡ７０２は、図９のプログラム・バッファ５２２の最初のバイトの位置である。ＲＬＡ７０４は、プログラム・バッファ５２２の最後のバイトの位置を示す。
【００７２】
１つの実施形態において、ランタイム・インストルメンテーション・プログラム・バッファ現在アドレス（ＲＣＡ）７０６は、ＭＲＩＣ命令により更新することができる。ＲＣＡ７０６は、ストアされる次の報告グループのプログラム・バッファ５２２の位置である。ＲＣＡ７０６は、報告グループ・サイズ・フィールド７４４（ＲＧＳフィールド）を検査し、プログラム・バッファ５２２のアドレスの形成に使用する有効ビット数の位置に影響を与える。６４ビットＲＣＡ７０６は、ワード０、ワード１の２６−ＲＧＳのビット位置０、及びＲＧＳの右に付加する５つの２進数ゼロである。これが、プログラム・バッファ５２２内に格納されることになる後続の報告グループの、図９のプログラム・バッファ５２２における開始位置である。報告グループは、インストルメンテーション・モジュール５０６により作成され、後にプログラム・バッファ５２２内に格納される情報の単位である。１つの実施形態において、ＲＣＡ７０６により指定されるＲＧＳフィールド７４４は、ランタイム・インストルメンテーション制御の現在の報告グループ・サイズと等しくない（即ち、ＲＣＡ７０６がＲＧＳフィールド７４４を変更する）場合、ＲＣＡ７０６は、ＲＯＡ７０２に設定される。
【００７３】
残りのサンプル間隔カウント・フィールド７４２（ＲＳＩＣフィールド）は、ＭＲＩＣ命令を用いて低特権プログラムにより更新することができる。ＲＳＩＣフィールド７４２は、残りのサンプル間隔カウントを示す、６４ビットの符号なし整数を含む。ランタイム・インストルメンテーション制御内のＲＳＩＣフィールド７４２の値がゼロであるか又はスケーリング・ファクタ・フィールド７４０（ＳＦフィールド）内の値に等しく、且つ、ランタイム・インストルメンテーションがイネーブルにされている場合、次のサンプル間隔は、サンプリング・モード７０８（Ｍ）及びＳＦフィールド７４０の値に基づいた全間隔（full interval）である。ＲＳＩＣフィールド７４２が非ゼロであり、ＳＦフィールド７４０を下回り、且つ、ランタイム・インストルメンテーションがイネーブルにされている場合、次のサンプル間隔は、部分的な間隔である。ＲＳＩＣフィールド７４２が非ゼロであり、ＳＦフィールド７４０の値を上回り、且つ、ランタイム・インストルメンテーションがイネーブルにされている場合、次のサンプル間隔は延長した間隔である。延長した間隔が期間満了すると、次の間隔は、ＳＦフィールド７４０の値に基づく。ＲＳＩＣフィールド７４２が非ゼロの値に設定されると、このＲＳＩＣフィールド７４２は、ＳＦフィールド７４０も対象となる同じモデル依存の最大限度が適用される。。ＲＳＩＣフィールド７４２のオリジナル値がゼロである場合、ＬＲＩＣ命令及びＭＲＩＣ命令の実行中、サンプリング・モードは、ＲＳＩＣフィールド７４２がＳＦフィールド７４０内の値に設定されるか否か、又は、ランタイム・インストルメンテーションがイネーブルにされるまで、ＲＳＩＣフィールド７４２が引き続きゼロとして表示されるか否かを示す。
【００７４】
ＳＦフィールド７４０は、その値がスケーリング・ファクタのカウント単位である、６４ビットの符号なし整数を含む。単位の大きさは、モード・フィールド７０８（Ｍフィールド）から判断される。ＲＳＩＣフィールド７４２内の値がゼロである場合、ＳＦフィールド７４０は、現在の命令がサンプル命令として認識される、ゼロまでデクリメントされるＲＳＩＣフィールド７４２の初期値を与え、間隔カウントは、ＳＦフィールド７４０の値からリフレッシュされる。ＳＦフィールド７４０の有効値は、１から２６４−１までの範囲内にある。ゼロが指定される場合、１の値が推定される。しかしながら、各モデルはＳＦフィールド７４０の最小値及び最大値の両方を有し得る。最小値及び最大値はまた、モード・フィールド７０８に基づいて異なり得る。最小値を下回る値が指定される場合、モデル依存の最小値がロードされる。最大値を上回る値が指定される場合、モデル依存の最大値がロードされる。
【００７５】
ＤＣ制御フィールド７３６は、その値がデータフェッチ又はストアのキャッシュミスと関連したキャッシュ待ち時間（cash-latency）レベルを指し示す、４ビットの符号なし整数である。つまり、サンプル命令がデータ・アクセス・キャッシュ・ミスに遭遇した。別のランタイム・インストルメンテーション制御により禁止されない限り、ＤＣ制御フィールド７３６の値により指し示されるレベルを数値的に上回るか又はこれに等しいキャッシュ待ち時間レベルとなることでミスと認識されるデータ・アクセスを含むサンプル命令を表す報告グループの格納が試みられる。。データ・アクセスに関するキャッシュ構造及びキャッシュ待ち時間レベルは、モデル依存である。複数の又は長いオペランドを用いる命令については、もしあれば、どのオペランド・アクセスが報告制御に用いられるかは、モデル依存である。モデル依存の挙動は、ＤＣ制御フィールド７３６の値を無視することがあり、従って、この値は、報告グループのストアのために使用しない。
【００７６】
ＩＣフィールド７３４は、その値が命令フェッチのキャッシュミスと関連したキャッシュ待ち時間レベルを指し示す、４ビットの符号なし整数である。つまり、サンプル命令のフェッチが命令フェッチ・キャッシュミスに遭遇した。ＩＣフィールド７３４及びＤＣ制御フィールド７３６の両方について、キャッシュ待ち時間レベルは、観察しているプロセッサから特定のキャッシュ・レベル・アクセスまでの距離の抽象化である。待ち時間レベルは、プロセッサと、主ストレージとの間のネスト化されたキャッシュ・レベルの量と、上述したキャッシュ・レベルが複数のプロセッサ間でどのように共有されるかの組み合わせに依存する。より大きい待ち時間レベルは、一般に、より時間のかかるアクセスに対応する。ＩＣフィールド７３４及びＤＣ制御フィールド７３６内の値は、キャッシュ待ち時間レベルのゼロ起点を示すもの考えることができる。例えば、ゼロの値は、Ｌ１キャッシュ（即ち、プロセッサに最も近いキャッシュ）に対応する。従って、１の値は、Ｌ２キャッシュ、又は、幾つかのマシンにおいてはＬ１．５キャッシュとして知られ得る次のキャッシュ層である。２−１５の値は、主メモリに到達するまでの付加的なキャッシュ待ち時間層の論理的進行を示すが、主メモリ自体は含まない。一般に、キャッシュ構造は、１５の層の深さには至らない。従って、ＩＣフィールド７３４及びＤＣ制御フィールド７３６内の１５の値は、特別な場合と解釈され、命令フェッチ又はデータ・アクセスにおけるキャッシュミスは、それぞれ、キャッシュ待ち時間レベルに関係なく、報告グループのストア目的では認識されないことを意味する。別のランタイム・インストルメンテーション制御により禁止されない限り、そのフェッチにより、ＩＣフィールド１０３４の値により指し示されるレベルを数値的に上回るか、又はこれに等しいキャッシュ待ち時間レベルでミスが認識されたサンプル命令を表す報告グループのストアが試みられる。命令フェッチに関するキャッシュ構造及びキャッシュ待ち時間レベルは、モデル依存である。モデル依存の挙動は、ＩＣフィールド７３４の値を無視することがあり、従って、この値を、報告グループのストアのために使用しない。
【００７７】
キャッシュ待ち時間レベル・オーバーライド報告制御ビット７３２（Ｆビット）は、非分岐命令及び非分岐予測制御のためのものである。ランタイム・インストルメンテーション制御内のＦビット７３２がゼロである場合、ランタイム・インストルメンテーション制御のキャッシュ報告制御（ＩＣフィールド７３４及びＤＣ制御フィールド７３６）がチェックされ、その定められた機能に従って使用される。ランタイム・インストルメンテーション制御の分岐予測制御（ＢＰｘｎビット７２２、ＢＰｘｔビット７２４、ＢＰｔｉビット７２６、及びＢＰｎｉビット７２８）がチェックされ、その定められた機能に従って使用される。Ｆビット７３２が１である場合、別の制御によって禁止されない限り、これらの同じ制御が無視され、報告グループが格納される。
【００７８】
データ・キャッシュミス制御ビット７３０（Ｄビット）は、報告グループを格納するかどうかを示す。Ｄビット７３０が１である場合、追加タイプ記録を、サンプル命令についてのモデル依存データを含む報告グループの追加セクションに入れても良いし、又は入れなくても良い。
【００７９】
ＭＲＩＣ命令は、分岐予測（ＢＰ）報告制御（ＢＰｘｎ７２２、ＢＰｘｔ７２４、ＢＰｔｉ７２６、及びＢＰｎｉ７２８）を含む。ランタイム・インストルメンテーション制御内のＢＰ報告制御ビットがゼロである場合、対応する条件はチェックされない。ＢＰ報告制御ビットが１であり、対応する分岐予測条件が存在する場合、報告グループが格納される。
【００８０】
ＢＰｘｎビット７２２は、１であるとき、分岐予測情報のチェックをイネーブルにする。従って、サンプル分岐が成立すると誤って予測されたが成立しなかった場合、報告グループが格納される。
【００８１】
ＢＰｘｔビット７２４は、１であるとき、分岐予測情報のチェックをイネーブルにする。従って、サンプル分岐が成立しないと誤って予測されたが成立した場合、報告グループが格納される。
【００８２】
ＢＰｔｉビット７２６は、１であるとき、分岐予測情報のチェックをイネーブルにする。従って、サンプル分岐が成立すると正しく予測され、分岐が成立したが、分岐ターゲットが誤って予測された場合、報告グループが格納される。
【００８３】
ＢＰｎｉビット７２８は、１である場合、分岐予測情報のチェックをイネーブルにする。従って、サンプル分岐が成立しないと正しく予測され、分岐が成立せず、且つ、分岐ターゲットが誤って予測された場合、報告グループが格納される。
【００８４】
トランザクション実行モード記録ビット７２０（Ｘビット）のイネーブルメント制御は、トランザクション実行モード・アボート記録の収集を制御する。ランタイム・インストルメンテーション制御内のＸビット７２０がゼロであるとき、トランザクション実行モード・アボート記録は収集されない。Ｘビット１０２０が１であるとき、トランザクション実行モード・アボート記録が収集され、図９の収集バッファ５０８に入れられる。モデルにトランザクション実行ファシリティがインストールされていない場合、Ｘビット７２０は無視される。
【００８５】
ＲＩＥＭＩＴ命令制御ビット７１８（Ｅビット）は、ＲＩＥＭＩＴ命令の実行を制御する。ランタイム・インストルメンテーションがイネーブルにされるとき、ランタイム・インストルメンテーション制御内のＥビット７１８がゼロであるか、又は無視されてゼロとして扱われる場合、ＲＩＥＭＩＴは、操作を実行しない。Ｅビット７１８が１であり、他の形で無視されない場合、ＲＩＥＭＩＴはイネーブルにされ、その定められた機能を実行する。
【００８６】
Ｊビット７４６は、ゼロである場合、ｂｒａｎｃｈ  ｏｎ  ｃｏｎｄｉｔｉｏｎ（ＢＣ）命令が、マスク値に関係なく他のタイプの分岐カテゴリ内にあることを指定する。Ｊビット７４６が１である場合、１５のマスクを指定するＢＣ命令は、リターン・タイプ分岐カテゴリ内にある。ＢＣ命令が１−１４のマスクを指定する場合、ＢＣ命令はＪビット１０４６に影響を受けず、常にその他のタイプの分岐カテゴリ内にある。リターン・タイプ分岐カテゴリ内にある場合、Ｒビット１０１６は、図９の収集バッファ５０８への包含を制御する。他のタイプの分岐カテゴリ内にある場合、Ｂビット７４８が収集バッファ５０８への取り込みを制御する。他のタイプの分岐カテゴリは、転送タイプ分岐カテゴリとして示すこともできる。
【００８７】
命令アドレス・コード・ビット７１４（Ｃビット）は、呼び出しタイプ分岐のイネーブルメントを制御する。ランタイム・インストルメンテーション制御内のＣビット７１４が１であり、命令が呼び出しタイプ分岐である場合、収集バッファ５０８が更新される。呼び出しタイプ分岐とリターン・タイプ分岐の両方のモデル依存検出が組み合わされる場合、Ｃビット７１４は両方のタイプに対して動作し、Ｒビット８１６は有効でない。
【００８８】
Ｒビット７１６は、リターン・タイプ分岐のイネーブルメント制御である。ランタイム・インストルメンテーション制御内のＲビット７１６が１であり、命令がリターン・タイプ分岐である場合、収集バッファ５０８が更新される。
【００８９】
Ｂビット７４８は、呼び出しタイプ分岐及びリターン・タイプ分岐以外の分岐のイネーブルメント制御である。ランタイム・インストルメンテーション制御内のＢビット７４８が１であり、命令が、ランタイム・インストルメンテーションにより認識される他のタイプの分岐である場合、収集バッファ５０８が更新される。
【００９０】
最大アドレス超過ビット７１２（ＭＡＥビット）は、１に設定された場合、１に設定された命令アドレス・コード（Ｃフィールド）を有する１つ又は複数の報告グループが格納されたことを示す。ひとたびＭＡＥビット７１２が１に設定されると、引き続きランタイム・インストルメンテーションの実行は、ＭＡＥビット７１２をゼロに戻すことはない。ＭＡＥビット７１２は、ＭＡＥビット７１２をゼロとして指定するＬＲＩＣ命令又はＭＲＩＣ命令の実行によりゼロに設定される。
【００９１】
ランタイム・インストルメンテーション・ネクスト（ＲＩＮＥＸＴ）制御ビット７１０（Ｎビット）は、サンプル命令の実行を制御する、ｒｕｎ−ｔｉｍｅ−ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｎｅｘｔ命令のイネーブルメントを制御する。ランタイム・インストルメンテーション制御内のＮビット７１０がゼロであるか、又は無視されてゼロとして扱われる場合、ＲＩＮＥＸＴは、操作を実行しない。Ｎビット７１０が１であり、他の形で無視されない場合、ＲＩＮＥＸＴがイネーブルにされ、その定められた機能を実行する。
【００９２】
モード・フィールド７０８（Ｍフィールド）は、ランタイム・インストルメンテーション制御内のその値が、ランタイム・インストルメンテーション制御に関するサンプリング・モードを指定する、４ビットの符号なし整数である。サポートされるサンプリング・モードは、ＣＰＵサイクルのカウント、命令のカウントに基づくサンプリングを含むことができ、又は、ＲＩＮＥＸＴなどのサンプル命令に応答してサンプルに指向され得る。
【００９３】
報告グループ・サイズ・フィールド７４４（ＲＧＳ）は、その値が報告グループの記録（ＲＲＧ）の数を指定する、３ビットの符号なし整数である。報告グループ内の記録の数は、開始／タイムスタンプ記録及び命令の最後の記録を含む２つの記録から、最大２５６の記録まで変化し得る。１つの実施形態において、上限は、モデル依存であり得る。報告グループ内に入れられる１６バイト記録の数は、２（ＲＧＳ＋１）である。
【００９４】
一次ＣＰＵ能力抑止制御ビット７３８（Ｙビット）及び二次ＣＰＵ能力抑止制御ビット７３９（Ｚビット）は、まとめて抑止制御（suppression control）と呼ばれる。報告グループのストアの抑止とは、ストアが実施されないよう試みることを意味する。構成内の全てのＣＰＵのＣＰＵ能力が同じであるとき、抑止制御は有効でなく、抑止は行われない。構成において、あるＣＰＵのＣＰＵ能力が別のＣＰＵの能力と異なる場合、抑止制御は有効であり、少なくとも１つのＣＰＵがＣＰＵ能力又は一次ＣＰＵ能力で動作していると言われ、一方、少なくとも１つの他のＣＰＵが二次ＣＰＵ能力で動作していると言われる。一次ＣＰＵ能力と二次ＣＰＵ能力は、異なる動作速度である。Ｙビット７３８及びＺビット７３９の両方がゼロであるとき、抑止は行われない。Ｙビット７３８がゼロであり、Ｚビット７３９が１であるとき、例えばプロセッサ１０６などのＣＰＵが二次ＣＰＵ能力で動作している場合、抑止が行われる。Ｙビット７３８が１であり、Ｚビット７３９がゼロであるとき、例えばプロセッサ１０６などのＣＰＵが一次ＣＰＵ能力で動作している場合、抑止が行われる。Ｙビット７３８及びＺビット７３９の両方とも１である場合、抑止が行われる。
【００９５】
図１１の上記のフィールド及びビットは、フィールドの配置及び呼称の一例であり、明確にするために本明細書で与えられている。他の実施形態において、フィールドのサブセットだけを使用してもよいこと、及び、フィールドはいずれの順序又は位置としてもよく、及び／又は、異なる名称で表し得ることが理解されるであろう。
【００９６】
ランタイム・インストルメンテーションがインストールされ、イネーブルにされると、多数のイベント及びデータを、収集バッファ５０８内にキャプチャすることができる。収集バッファ５０８は、そのコンテンツが、プログラム実行中にプログラム１０６により認識されたイベントについて報告する、記録のセットをキャプチャするために用いられる。例として、１又は複数の成立した分岐の実行、トランザクション実行アボート・イベント、キャッシュミス、及びｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｅｍｉｔ命令のオペランドが挙げられる。ＩＣ制御フィールド７３４及びＤＣ制御フィールド７３６は、プログラムが、命令又はデータ・プリフェッチ動作を改善するために何らかの是正アクションを取ることに関連するレベルを設定する。ＲＩＥＭＩＴ命令の実行は、汎用レジスタの値を収集バッファ５０８内に格納することにより、これを収集する。付加的なデータを収集し、及び／又はモデル依存サンプル命令データの収集に用いられる命令データ・バッファ（ＩＤＢ）（図示せず）などの他のバッファに格納し、ランタイム・インストルメンテーション命令記録を構築することができる。
【００９７】
収集されたランタイム・インストルメンテーション情報は、サンプリング・ベースで報告される。命令ストリームからの命令がサンプリングされる。サンプリングされた命令は、サンプル命令と呼ばれる。サンプル命令を判断するためのモードの数は、ランタイム・インストルメンテーションがイネーブルにされたとき、以下のように定められる。サイクス・カウント・モードにおいて、カウントは、ＳＦ７４０又はＲＳＩＣ７４２のいずれかで指定されたＣＰＵサイクルの数であり、どちらが用いられても、現在の間隔のカウントをもたらす。カウントは、サンプリング・モードと関連したイベントに応答して調整される。例えば、プロセッサ１０６が動作状態であるとき、カウントをデクリメントすることができる。カウントが、ゼロなどの閾値までデクリメントされると、現在の命令はサンプル命令として認識され、カウントはＳＦ７４０値に再初期化され、次のサイクルにおいてデクリメントされ始める。サンプル命令の実行が終了すると、適切な場合に、報告が行われる。
【００９８】
命令カウント・モードでは、カウントは、ＳＦ７４０又はＲＳＩＣ７４２のいずれかにおいて指定され、どちらが用いられても、現在の間隔のカウントをもたらす。単一の操作単位から成る命令については、カウントを調整するために用いられるイベントとして、命令の完了時にカウントがデクリメントされる。カウントがゼロなどの閾値にデクリメントされたとき、命令はサンプル命令である。複数の操作単位から成る命令については、以下の方法の１つでカウントをデクリメントすることができる。：
ａ．割り込み可能命令については、部分的完了を通じた全ての操作単位が、カウントをデクリメントする１つのカウント単位を表す。
ｂ．割り込み可能命令については、最終的完了を通じた最新の部分的完了以後の全ての操作単位が、カウントをデクリメントする１つのカウント単位を表す。
ｃ．命令のパラメータにより指定される処理のＣＰＵ決定の小部分を実施した後に完了する命令については、完了が、カウントをデクリメントする１つのカウント単位を表す。
ｄ．複数の操作単位を実施した後に完了するが、上のカテゴリａ−ｃに入らない命令については、最後の操作単位の完了が、カウントをデクリメントする１つのカウント単位を表す。
命令の何れかのカウント単位についてカウントがゼロにデクリメントされるとき、命令はサンプル命令である。ゼロなどの閾値に達すると、カウントはＳＦ７４０に再初期化され、上のａ−ｄで説明されるようなカウント・ダウンを始める。カウント・モードの全ての場合において、報告は、適切な場合、サンプル命令の最後の操作単位の完了後に行われる。
【００９９】
指向サンプリング・モードにおいて、Ｎビット７１０が１であり、ＲＩＮＥＸＴ命令が正常に実行されたとき、指向サンプリングが行われる。サンプル命令は、ＲＩＮＥＸＴ命令後の次の順次命令（ＮＳＩ）である。次の順次命令が実行タイプ命令である場合、サンプル命令は、実行タイプ命令のターゲット命令である、指向サンプリングは、サイクル・カウント・モード又は命令カウント・モードにあるときに行われる。カウント・サンプリングは、指向サンプリング及びその結果のアクションのいずれかと併せて継続し、カウント・サンプリングから決定されたサンプル命令が試行サンプリングによって決定された同じ命令である場合には２つの報告グループが格納されないことを除いて、他の点で影響を受けない。
【０１００】
どんなサンプリング・モードでも、サンプル命令がＲＩＥＮＸＴ命令の実行によって識別される場合、報告グループが格納される。しかしながら、ランタイム・インストルメンテーション制御Ｙ７３８、Ｚ７３９、Ｑｓ６１４及びＰｓ６１２は、引き続き有効である。
【０１０１】
サイクル・カウント・サンプリング及び命令カウント・サンプリングは、それぞれ、内部システム・イベント及び例外条件に基づいた変動量をもたらす適切な間隔を判断する。カウント・ダウンは、ランタイム・インストルメンテーションがディスエーブルからイネーブルに移行したときに始まる。指向サンプリングは、ＲＩＮＥＸＴの完了とＮＳＩの間に挿入され得るあらゆるイベントに応じて、変動量がより少ない。割り込みは、もはやＮＳＩばかりではなく、ＮＳＩであると考えられたものを生じさせることができることを指摘する。
【０１０２】
サンプリングは、モードに関係なく、サンプル命令を識別する。ひとたびサンプル命令が識別されると、サンプル命令の実行の完了時に収集が停止し、報告が始まる。報告を制御する種々の報告制御が、次いで適用される。報告グループのストアが保留中にされたときに収集が再開する。
【０１０３】
トランザクション実行モードにないとき、サンプル命令の実行の完了時に、報告グループのストアは保留中になる。トランザクション実行モードにあるとき、サンプル命令の実行の完了時に、報告グループのストアは、トランザクションが終了するまで遅らせられ、次いで保留中になる。報告グループのストアが遅らせられたとき又は保留中のとき、以下の：１）プログラム割り込み、２）緊急マシン・チェック割り込み、３）再起動割り込み、及び４）スーパーバイザ・コール割り込み、のいずれかが認識される場合、報告グループをパージすることができる。
【０１０４】
いずれの保留中のＩ／Ｏ割り込み、外部割り込み、及び抑止できるマシン・チェック割り込みも、報告グループが格納されるか、又は報告グループが格納されないとランタイム・インストルメンテーション制御が判断するまで、保留中のままである。
【０１０５】
各モードが、異なる報告制御のセットを可能にすることも又はしないこともある。サンプリング・モードは、命令カウント又はサイクル・カウントのいずれかであるが、指向サンプリングも使用され、複数のサンプリング方法により同じサンプル命令を識別することも可能である、このことが起こり、使用される報告制御がサンプリング・モードに応じて異なる場合、指向サンプリングと関連した報告制御が適用される。
【０１０６】
発生し得る非同期型及び非要求型システム・イベントのために、特定の命令をサンプリングすることを意図した間隔の正確な判断は、通常、実現可能でない。代わりに、ＲＩＮＥＸＴ命令を用いて、サンプル命令をより詳細に指定することができる。
【０１０７】
サイクル・カウント・モード又は命令カウント・モードにあるとき、命令カウント又はサイクル・カウント・サンプリングから識別されたサンプル命令に接近しすぎた状態で、ＲＩＮＥＸＴ命令を発行することができる。関連した報告グループのコンテンツは、サンプル命令がＲＩＮＥＸＴ命令のＮＳＩとして識別されたかのようであり、且つ、サンプル命令のサイクル・カウント又は命令カウント識別が適用されなかったかのようである。
【０１０８】
ＲＩＮＥＸＴの実行は、以下の例外条件のいずれか１つ又は複数が満たされた場合、ノーオペレーション（non-operation）として実行することができる。：即ち、
１．ランタイム・インストルメンテーション制御が有効でない。
２．問題状態において、現在のランタイム・インストルメンテーション制御のＰｓ６１２がゼロであり、問題状態の報告が許容されないことを示す。
３．スーパーバイザ状態において、現在のランタイム・インストルメンテーション制御のＱｓ６１４がゼロであり、スーパーバイザ状態の報告が許容されないことを示す。
４．現在のランタイム・インストルメンテーション制御のＮビット７１０がゼロであり、ＲＩＮＥＸＴ命令自体が許容されないことを示す。
５．ストレージが抑止される。
６．現ＰＳＷ内のフィールドが、ランタイム・インストルメンテーションがディスエーブルにされていることを示す。
７．モデル依存の閾値を超過する。ある期間にＲＩＮＥＸＴが発行された回数が、モデル依存の限界を超過した。
８．プログラム・バッファ・フル条件が存在する。
９．ランタイム・インストルメンテーション停止条件が存在する。
１０．次の順次命令がｓｔａｒｔ  ｉｎｔｅｒｐｒｅｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ（解釈実行開始）命令である。
１１．次の順次命令がｓｕｐｅｒｖｉｏｓｒ  ｃａｌｌ（スーパーバイザ呼び出し）命令である。
【０１０９】
図１２を参照すると、収集バッファ５０８の１つの実施形態が、一般的に示される。前述のように、プログラム実行中にランタイム・インストルメンテーションがイネーブルにされると、ランタイム・インストルメンテーション・データが、プロセッサ１０６内に収集される。１つの実施形態において、データがプロセッサ１０６内に収集される場所は、収集バッファ５０８であり、随意的には命令データ・バッファである。１つの実施形態において、収集バッファ５０８は、収集された最新の記録を保存するために使用されるプロセッサ１０６の内部バッファである。サンプル・トリガ・ポイントが検出されると、記録は、プログラム・バッファ５２２に書き込まれた報告グループの一部として、収集バッファ５０８からプログラム・バッファ５２２にコピーされる。１つの実施形態において、記録は、収集バッファ５０８から非破壊的方法でコピーされる。
【０１１０】
収集バッファ５０８は、これがプロセッサ内に配置され、且つ、１つの実施形態においては、命令アドレス８０２及び所定のイベントのイベント・メタデータ８０４を格納するためのレジスタ対のアレイとして実装されるので、「ハードウェア収集バッファ」と呼ぶことができる。１つの実施形態において、命令データ・バッファは、レジスタ対のアレイによっても実装される。イベントの一例は、分岐の成立であり、そこでレジスタ対は分岐の命令アドレスを保持することができ、メタデータは分岐のターゲット並びに分岐の挙動履歴（historic behavior）に関する情報を保持することができる。１つの実施形態においては、レジスタ対が順序付けられ、命令ストリーム内でイベントが発生したときに連続的に更新される。カウンタは、アレイ内の最後に更新されたエントリのインデックスを示すように維持される。１つの実施形態において、収集バッファ５０８は循環バッファであり、収集バッファ５０８が一杯になると、次のイベントがアレイ内の最初のエントリを上書きし、後続のイベントにおいて、アレイのレジスタ対の連続的更新が再開する。従って、アレイＣＢ［０］乃至ＣＢ［Ｎ−１］及び最新の更新インデックスを示すカウンタｉを仮定すると、キャプチャされたイベントのトレースは、シーケンスＣＢ［ｉ］、ＣＢ［ｉ−１］．．．ＣＢ［１］、ＣＢ［０］、ＣＢ［Ｎ−１］、ＣＢ［Ｎ−２］．．．ＣＢ［ｉ＋１］で表される。別の実施形態においては、バッファ内の最も古いエントリを指し示すヘッド・ポインタ、及び、バッファ内の最も新しいエントリを指し示すテール／現在ポインタの２つのポインタが使用される。
【０１１１】
任意の所定の実行点でのプロセッサ１０６の状態を表すイベントが、収集バッファ５０８内に連続的にキャプチャされる。収集バッファ５０８は、そのコンテンツが、プログラム実行中にプロセッサ１０６により認識されるイベント（例えば、１つ又は複数の成立した分岐の実行、トランザクション実行アボート・イベント、ＲＩＥＭＩＴ命令のオペランド等）に関して報告する記録のセットをキャプチャするために使用される。１つの実施形態において、認識されるイベントは、図１１に示されるＲＩＣＣＢのコンテンツによって決まる。図１２に示される収集バッファ５０８の実施形態におけるエントリは、イベント命令アドレス８０２と、他の関連するイベント・メタデータ８０４とを含む。イベント・メタデータ８０４の例として、これらに限定されるものではないが、成立した分岐の命令アドレス及びその分岐の挙動履歴についての何らかの情報を含むそのターゲット；ＲＩＥＭＩＴ命令の命令アドレス及びそれぞれのレジスタ値；並びに、トランザクション・アボート命令のアドレス及びそれぞれのトランザクション復元エントリ・ポイントが挙げられる。
【０１１２】
図１２に示される収集バッファ５０８の実施形態は、最大３２個までのエントリ（即ち、３２のイベントについての情報）を格納することができ、各命令アドレス８０２は６４のビット（例えば、ビット０：６３）により指定され、イベント・メタデータ８０４は６４ビット（例えば、ビット６４：１２７）により指定される。収集バッファのサイズ（ＲＣＢ）は、記録の数を表すモデル依存のカウントである。図１２に示される収集バッファ５０８の実施形態において、収集バッファのバイト・サイズは、１６バイトの記録サイズの倍数である。１つの実施形態において、収集バッファのサイズは、モデルの最大報告グループのカウント（ＲＲＧ）と、収集バッファから取得されない報告グループの記録のカウント（ＲＮＣ）との間の差を上回るか又はこれに等しい記録の数である。従って、１つの実施形態において、収集バッファのサイズは、
【数１】
2015510154.tif 000003
のように表される。
【０１１３】
１つの実施形態において、収集バッファ５０８及び命令データ・バッファのコンテンツは（一方が使用される場合）、以下のイベントによって、パージされる又は他の形で影響を受ける。：即ち（１）割り込み、（２）ランタイム・インストルメンテーション・ファシリティをオン又はオフにするＰＳＷビット（例えば、ビット２４）の１からゼロへの変更、及び（３）ランタイム・インストルメンテーション・ファシリティがトランザクション実行モードであるときにサンプル命令が識別された場合（この場合、収集バッファ５０８及び命令データ・バッファの更なる更新は停止し、トランザクション終了時に再開し、この時点では、報告グループのストアは保留中であり、収集バッファ５０８及び命令データ・バッファはパージされる）。
【０１１４】
図２に示されるエミュレートされたホスト・コンピュータ・システムのような１つの実施形態において、収集バッファ５０８は、レジスタ及び／又はメモリを用いて実装される。この実施形態において、随意的な命令データ・バッファもまた、存在する場合には、レジスタ及び／又はメモリを用いて実装される。
【０１１５】
実施形態において、付加的な能力は、データ収集に影響を与えることがあり、且つ、前述した規則的な命令カウント又はサイクル・カウントのサンプリングを実質的に妨げずに、付加的なデータ収集ポイントをもたらすと考えることができる。これらには、収集バッファ５０８内に汎用レジスタの値を格納することにより、その値を収集するＲＩＥＭＩＴ命令の実行が含まれる。さらに、前述したランタイム・インストルメンテーション制御内のデータ収集制御ビットを用いて、収集したデータのタイプをカスタマイズすることができる（例えば、Ｅ、Ｃ、Ｒ及びＢ制御ビット）。このように、収集したデータ・タイプは、プログラム可能である。
【０１１６】
１つの実施形態において、ランタイム・インストルメンテーション命令の記録を構築するために使用されるモデル依存のサンプル命令データを収集するために、命令データ・バッファが実装される。命令データ・バッファは、命令がサンプル命令として識別されたときに利用可能になると予期して、命令からデータを収集する。１つの実施形態において、命令データ・バッファは、サンプル・ポイントとしてトリガになる命令についての情報が保存される、プログラム内のハードウェア・バッファ／ストレージ位置であるので、ログアウト・プロセス中、情報を収集バッファ５０８からデータと共に書き出すことができる。収集バッファ５０８と同様に、命令データ・バッファは、命令アドレス、及びその命令と関連したメタデータを含む。命令データ・バッファ内のメタデータは、多くの場合、マシンに依存し、これらに限定されるものではないが、キャッシュミス関連情報、及び分岐予測関連情報を含むことができる。
【０１１７】
実施形態によれば、収集される他のデータは、収集バッファ５０８からのものでないことも、又は命令データ・バッファからのものでないこともある。例として、以下の部分：：即ち、（１）報告グループの最初の記録：タイムスタンプ又は開始記録、及び（２）あらゆる報告グループに関して作成することができ、従って、収集バッファ５０８内に格納することができる付加的なタイプの記録を形成すために使用されるデータが挙げられ、これらの記録は、存在する場合、報告グループの追加又はマシン依存セクションに入れることができる。これらの記録は、本明細書では「システム情報記録」と呼ばれる。
【０１１８】
図１３は、サンプル点においてプログラム・バッファ５２２に格納された報告グループ９００の高レベルの例を示す。記録内の報告グループのサイズは、２（ＲＧＳ＋１）に等しいＲＲＧで表され、ここで、ＲＧＳは、指数としての報告グループ・サイズである。収集バッファ５０８以外の位置からコピーされた記録のモデル依存数（ＲＮＣ）は、報告グループで使用されるとき、非破壊的にコピーされても又はされなくてもよい。図１３の例において、ＲＲＧ＝８、ＲＧＳ＝２、及びＲＮＣ＝４である。図１３に示される例示的な報告グループ９００は、ヘッダ・セクション９０２、本体セクション９０４、追加記録セクション９０６、及びフッタ・セクション９０８を含む。
【０１１９】
ヘッダ・セクション９０２は、状態情報、追跡情報、及び／又はタイミング情報を保持するための開始記録又はタイムスタンプ記録を含むことができる。開始記録は、プログラム・バッファに格納された第１の報告グループに関するヘッダ・セクション９０２内に格納される（即ち、ＲＣＡ７０６がＲＯＡ７０２に等しいとき）。１つの実施形態において、開始記録は、「０２」の記録タイプ・フィールドと、現在幾つの報告グループがプログラム・バッファに格納されているかを示すための報告グループ数（ＮＲＧ）フィールドと、報告グループのサイズを示すためのＲＧＳフィールドと、プログラム・バッファ５２２が一杯であるかどうかを示すための停止（Ｓ：stopped）フィールドと、ランタイム・インストルメンテーションが停止されたかどうかを示すための停止（Ｈ：halted）フィールドと、いつ開始記録が書き込まれたかを示すための時刻（ＴＯＤ）クロック・フィールドとを含む。１つの実施形態において、開始記録内のフィールドの少なくとも１つのサブセットが、ＲＩ制御ブロック（例えば、ＲＩＣＣＢ）から調達される。タイムスタンプ記録の１つの実施形態は、「０３」の記録タイプを有し、その記録がいつ格納されたかを示すためのＴＯＤクロック・フィールドを含む。１つの実施形態において、タイムスタンプ記録は、第１の報告グループ以外の報告グループの各々についてのヘッダ・セクション９０２内に格納される。
【０１２０】
報告グループの本体セクション９０４は、収集バッファ５０８からサンプリングされたイベント及び情報に関する種々の記録を含むことができる。イベント及び情報は、例えば、発行命令、トランザクション実行アボート、呼び出し、リターン、分岐、及びフィラーによってキャプチャされた状態情報を表すことができる。
【０１２１】
１つの実施形態において、発行記録は、ＲＩＥＭＩＴ命令の正常な実行時に作成され、収集バッファ５０８に格納される。発行記録の１つの実施形態は、「１０」の記録タイプ・フィールドと、発行記録において、現ＰＳＷの命令アドレス・ビット位置がどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレッシング・モード（例えば、６４ビット、３１ビット、又は２４ビット）に応じて変わり、且つ、ＲＩＥＭＩＴ命令のアドレス、若しくはＲＩＥＭＩＴが実行タイプ命令のターゲットであった場合には実行タイプ命令の命令アドレスを含む命令アドレス・フィールドと、ＲＩＥＭＩＴ命令により指定される汎用レジスタからのデータを格納するための発行データ・フィールドとを含む。
【０１２２】
１つの実施形態において、トランザクション実行アボート記録が、暗黙的アボートにより、又はトランザクション・アボート命令の実行により作成され、収集バッファ５０８に格納される。アボート記録の１つの実施形態は、「１１」の記録タイプ・フィールドと、トランザクション実行アボート記録において現ＰＳＷの命令アドレス・ビット位置がどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレッシング・モード（例えば、６４ビット、３１ビット、又は２４ビット）に応じて変わり、且つ、アボートされる命令のアドレス、若しくはアボートされる命令が実行タイプ命令のターゲットであった場合には実行タイプ命令の命令アドレスを含む命令アドレス・フィールドと、アボートと関連したいずれかのモデル依存データに関するフィールドとを含む。
【０１２３】
１つの実施形態において、呼び出し記録は、Ｒ２フィールドが非ゼロであるときのＢＲＡＮＣＨ  ＡＮＤ  ＳＡＶＥ（ＢＡＳＲ）、ＢＲＡＮＣＨ  ＡＮＤ  ＳＡＶＥ（ＢＡＳ）、ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＡＮＤ  ＳＡＶＥ  ＬＯＮＧ、ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＡＮＤ  ＳＡＶＥ、Ｒ２フィールドが非ゼロであるときのＢＲＡＮＣＨ  ＡＮＤ  ＬＩＮＫ（ＢＡＬＲ）、ＢＲＡＮＣＨ  ＡＮＤ  ＬＩＮＫ（ＢＡＬ）、及びＲ２フィールドが非ゼロであるときのＢＲＡＮＣＨ  ＡＮＤ  ＳＡＶＥ  ＡＮＤ  ＳＥＴ  ＭＯＤＥなどの呼び出しタイプ分岐命令の実行によって作成される。呼び出し記録の１つの実施形態は、「１２」の記録タイプ・フィールドと、呼び出し記録において現ＰＳＷの命令アドレス・ビット位置がどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレッシング・モード（例えば、６４ビット、３１ビット、又は２４ビット）に応じて変わり、且つ、分岐命令のアドレス、若しくは分岐命令が実行タイプ命令のターゲットであった場合には実行タイプ命令の命令アドレスを含む命令アドレス・フィールドと、分岐が正しく予測されたかどうかを示すための正常動作（well-behaved）フィールドと、分岐ターゲット・アドレス（「呼び出された位置」とも呼ばれる）を含むターゲット・アドレス・フィールドとを含む。
【０１２４】
リターン記録及び転送記録は、呼び出し記録と同じフォーマットを有することができる。１つの実施形態において、リターン記録は、「１３」の記録タイプ・フィールドを有し、Ｒ２フィールドが非ゼロであり、マスクが１５であるときのＢＲＡＮＣＨ  ＯＮ  ＣＯＮＤＩＴＩＯＮ（ＢＣＲ）などのリターン・タイプ分岐命令の実行によって作成される。リターン記録に関して、命令アドレス・フィールドは、分岐命令のアドレス、又は分岐が実行タイプ命令のターゲットである場合には実行タイプ命令のアドレスを含み、ターゲット・アドレス・フィールドはリターン位置を含む。
【０１２５】
１つの実施形態において、転送記録は、「１４」の記録タイプ・フィールドを有し、ａ．Ｒ２フィールドが非ゼロであり、且つ、マスクが１−１４の範囲内にあるときのＢＲＡＮＣＨ  ＯＮ  ＣＯＮＤＩＴＩＯＮ（ＢＣＲ）；ｂ．Ｊビットがゼロであるか又はマスクが１−１４の範囲内にあるときのＢＲＡＮＣＨ  ＯＮ  ＣＯＮＤＩＴＩＯＮ（ＢＣ）；ｃ．ＢＲＡＮＣＨ  ＯＮ  ＣＯＵＮＴ（ＢＣＴ、ＢＣＴＲ、ＢＣＴＧ、ＢＣＴＧＲ）；ｄ．ＢＲＡＮＣＨ  ＯＮ  ＩＮＤＥＸ  ＨＩＧＨ（ＢＸＨ、ＢＸＨＧ）；ｅ．ＢＲＡＮＣＨ  ＯＮ  ＩＮＤＥＸ  ＬＯＷ  ＯＲ  ＥＱＵＡＬ（ＢＸＬＥ，ＢＸＬＥＧ）；ｆ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＣＯＮＤＩＴＩＯＮ（ＢＲＣ）；ｇ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＣＯＮＤＩＴＩＯＮ  ＬＯＮＧ（ＢＲＣＬ）；ｈ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＣＯＵＮＴ（ＢＲＣＴ，ＢＲＣＴＧ）；ｉ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＣＯＵＮＴ  ＨＩＧＨ（ＢＲＣＴＨ）；ｊ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＩＮＤＥＸ  ＨＩＧＨ（ＢＲＸＨ、ＢＲＸＨＧ）；ｋ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＩＮＤＥＸ  ＬＯＷ  ＯＲ  ＥＱＵＡＬ（ＢＲＸＬＥ、ＢＲＸＬＧ）；ｌ．ＣＯＭＰＡＲＥ  ＡＮＤ  ＢＲＡＮＣＨ（ＣＲＢ、ＣＧＲＢ）；ｍ．ＣＯＭＰＡＲＥ  ＡＮＤ  ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ（ＣＲＪ、ＣＧＲＪ）；ｎ．ＣＯＭＰＡＲＥ  ＩＭＭＥＤＩＡＴＥ  ＡＮＤ  ＢＲＡＮＣＨ（ＣＩＢ、ＣＧＩＢ）；ｏ．ＣＯＭＰＡＲＥ  ＩＭＭＥＤＩＡＴＥ  ＡＮＤ  ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ（ＣＩＪ、ＣＧＩＪ）；ｐ．ＣＯＭＰＡＲＥ  ＬＯＧＩＣＡＬ  ＡＮＤ  ＢＲＡＮＣＨ（ＣＬＲＢ、ＣＬＧＲＢ）；ｑ．ＣＯＭＰＡＲＥ  ＬＯＧＩＣＡＬ  ＡＮＤ  ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ（ＣＬＲＪ，ＣＬＧＲＪ）；ｒ．ＣＯＭＰＡＲＥ  ＬＯＧＩＣＡＬ  ＩＭＭＥＤＩＡＴＥ  ＡＮＤ  ＢＲＡＮＣＨ（ＣＬＩＢ、ＣＬＧＩＢ）；及びｓ．ＣＯＭＰＡＲＥ  ＬＯＧＩＣＡＬ  ＩＭＭＥＤＩＡＴＥ  ＡＮＤ  ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ（ＣＬＩＪ、ＣＬＧＩＪ）のようなリターン・タイプ分岐命令の実行により作成される。転送記録は、分岐が成立したときに作成される。転送記録に関して、命令アドレス・フィールドは、分岐命令のアドレス、又は分岐が実行タイプ命令のターゲットである場合には実行タイプ命令のアドレスを含み、ターゲット・アドレス・フィールドはリターン位置を含む。
【０１２６】
フィラー記録は、収集バッファ５０８内の有効な記録の数が、現在のＲＧＳの報告グループを満たすのに十分でない場合に、報告グループにおいて使用される。フィラー記録の１つの実施形態は、記録がフィラー記録であることを示すための「００」の記録タイプ・フィールドを含み、残りのバイトは定義されない。
【０１２７】
追加記録セクション９０６は、存在する場合、モデル依存の記録を含むことができる。１つの実施形態において、追加記録のフォーマットは、記録が追加記録であることを示すうように、記録タイプが「０１」に設定され、追加記録の残りのバイトはモデル依存データを含むことができる点を除いて、フィラー記録に類似している。
【０１２８】
フッタ・セクション９０８は、サンプル命令の実行についての情報を含む命令記録を含むことができる。命令記録は、サンプル命令に関して報告グループが格納されたときに作成される。命令記録の１つの実施形態は、「０４」の記録タイプ・フィールド「０４」と、命令記録において、現ＰＳＷの命令アドレス・ビット位置がどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレッシング・モード（例えば、６４ビット、３１ビット、又は２４ビット）に応じて変わり、且つ、サンプル命令のアドレス、又はサンプル命令が実行タイプ命令のターゲットであった場合には実行タイプ命令の命令アドレスを含む命令アドレス・フィールドと、ＩＤＢから収集されたいずれかのモデル依存データを含む命令データ・バッファ（ＩＤＢ）フィールドとを含む。
【０１２９】
前述のように、ランタイム・インストルメンテーション機能は、実験室環境において又はオフライン分析のために使用できるだけでなく、ランタイム・プログラム内の稼働(live）ソフトウェア環境においても及びプログラム制御下でも使用できる新しいファシリティである。最初に、特権状態は、ランタイム・インストルメンテーションを管理するために、プロセッサ１０６の制御を設定することができる。１つの実施形態において、制御のセットは、もともと低特権状態によるｌｏａｄ  ｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ（ＬＲＩＣ）命令の正常実行（successful execution）によって、もともとロードされている。ランタイム・インストルメンテーション・ファシリティの柔軟性は、低特権状態からランタイム・インストルメンテーション・ファシリティをオン及びオフにする能力を与えることにより強化される。このように、ランタイム・インストルメンテーション・ファシリティにより収集されたデータを、特定の命令のターゲットにすることができる。
【０１３０】
実施形態によると、低特権状態で実行されているアプリケーションにより、ＲＩＯＦＦ命令及びＲＩＯＮ命令の両方を実行することができる。ＲＩＯＦＦ命令の実行が正常に完了した場合、ＲＩＯＦＦ命令が正常に完了したときにランタイム・インストルメンテーションがディスエーブルにされ、さもなければ、ＲＩＯＦＦ命令が失敗した場合、ＲＩＯＦＦ命令は、ランタイム・インストルメンテーション・ファシリティの状態（例えば、イネーブル又はディスエーブル）に影響を与えない。同様に、ＲＩＯＮ命令の実行が正常に完了した場合、ＲＩＯＮ命令の実行が正常に完了したときにランタイム・インストルメンテーションがイネーブルにされ、さもなければ、ＲＩＯＮ命令の実行が失敗した場合、ＲＩＯＮ命令は、ランタイム・インストルメンテーション・ファシリティの状態（例えば、イネーブル又はディスエーブル）に影響を与えない。
【０１３１】
図１５は、１つの実施形態によるＲＩＯＦＦ命令を示す。図１５に示されるように、ＲＩＯＦＦ命令は、操作コード１１０２及び１１０４（この特定の場合は「オペコード」又は「分割オペコード（split opcode）」とも呼ばれる）。オペコード１１０２及び１１０４は、図９のプロセッサ１０６のようなプロセッサに対してＲＩＯＦＦ命令を識別する。図１５は、ＲＩＯＦＦ命令の一実施形態を示し、当業者であれば、他の実施形態において、ＲＩＯＦＦ命を異なるようにフォーマットすることができ、及び／又は、異なるオペランド及びオペコードを含み得ることを理解するであろう。
【０１３２】
図１６は、１つの実施形態によるＲＩＯＦＦ命令のプロセス・フローを示す。１つの実施形態において、図１６のプロセス・フローは、図９のインストルメンテーション・モジュール５０６により実行される。ブロック１２０２において、低特権状態プログラム（例えば、問題状態で実行されているアプリケーション５１８）により発行されたＲＩＯＦＦ命令がフェッチされる（例えば、命令ストリームから）。１つの実施形態において、ＰＳＷのビットを検査して（例えば、ビット１５）、プロセッサがスーパーバイザ状態で実行されているか又は低特権状態（「問題状態」とも呼ばれる）で実行されているかを判断する。ブロック１２０４において、ＲＩＯＦＦ命令の実行が許可されるかどうかが判断される。ＲＩＣＣＢ内のランタイム・インストルメンテーションのＳビット（ＬＲＩＣによってのみ制御される）は、低特権状態プログラムがＲＩＯＦＦ命令を実行することが許可されるかどうかを判断する。１つの実施形態において、現在のランタイム・インストルメンテーション制御内の（例えば、ＲＩＣＣＢ内の）ランタイム・インストルメンテーションＳビットが１に設定された場合、低特権状態プログラムがＲＩＯＦＦ命令を実行することが許可される、処理はブロック１２０８に続く。或いは、Ｓビットが０に設定された場合、低特権状態プログラムがＲＩＯＦＦ命令を実行することは許可されず、処理はブロック１２０６に続く。ブロック１２０６において、ＲＩＯＦＦ命令は、以前の設定を変更せず、ランタイム制御及びＰＳＷは、その以前の値のままである。１つの実施形態では、ブロック１２０６において、低特権状態の実行がイネーブルにされていないことを示すように、条件コードが２に設定される。
【０１３３】
ブロック１２０８において、現在のランタイム・インストルメンテーション制御（例えば、ＲＩＣＣＢ内の）の妥当性ビット（Ｖビットとも呼ばれる）が１に設定されるかどうかが判断される。妥当性ビットは、以前にＬＲＩＣ命令によって設定されたので、プロセッサにおけるランタイム・インストルメンテーション制御のセットの妥当性を示す。現在のランタイム・インストルメンテーション制御が有効でない（即ち、以前のＬＲＩＣ命令が無効であった）場合、処理はブロック１２１０に続く。１つの実施形態では、ブロック１２１０において、現在のランタイム・インストルメンテーション制御が有効でないことを示すように、条件コードが３に設定される。
【０１３４】
妥当性ビットが１に設定され、ランタイム・インストルメンテーション制御が有効であることを示す場合、処理はブロック１２１２に続き、そこで現在のランタイムＲＳＩＣを抑止し、後のＲＩＯＮ命令を予期して値を保存する。処理はブロック１２１４に続き、そこで、ＰＳＷ内のＲＩビット（例えば、ビット２４）がゼロに設定される。１つの実施形態において、ＰＳＷのビット２４が既にゼロである場合、ＲＩＯＦＦの実行は完了し、条件コードがゼロに設定される。１つの実施形態において、ＰＳＷのビット２４の現在の値を判断するために、ＥＸＴＲＡＣＴ  ＰＳＷ命令が実行される。
【０１３５】
図１７は、１つの実施形態によるＲＩＯＮ命令を示す。図１７に示されるように、ＲＩＯＮ命令１３００は、操作コード１３０２及び１３０４を含む（この特定の場合は「オペコード」又は「分割オペコード（split opcode）」とも呼ばれる）。オペコード１３０２及び１３０４は、図９のプロセッサ１０６のようなプロセッサに対してＲＩＯＮ命令を識別する。図１７は、ＲＩＯＮ命令の一実施形態を示し、当業者であれば、他の実施形態において、ＲＩＯＦＦ命を異なるようにフォーマットすることができ、及び／又は、異なるオペランド及びオペコードを含み得ることを理解するであろう。
【０１３６】
図１８は、１つの実施形態によるＲＩＯＮ命令のプロセス・フローを示す。１つの実施形態において、図１８のプロセス・フローは、図９のインストルメンテーション・モジュール５０６により実行される。ブロック１４０２において、低特権状態プログラム（例えば、問題状態で実行されているアプリケーション５１８）により発行されたＲＩＯＮ命令がフェッチされる（例えば、命令ストリームから）。１つの実施形態において、ＰＳＷのビットを検査して（例えば、ビット１５）、プロセッサがスーパーバイザ状態で実行されているか又は低特権状態（「問題状態」とも呼ばれる）で実行されているかを判断する。ブロック１４０４において、ＲＩＯＮ命令の実行が許可されるかどうかが判断される。ランタイム・インストルメンテーションのＳビット（ＬＲＩＣによってのみ制御される）は、低特権状態プログラムがＲＩＯＮ命令を実行することが許可されるかどうかを判断する。１つの実施形態において、現在のランタイム・インストルメンテーション制御内の（例えば、ＲＩＣＣＢ内の）ランタイム・インストルメンテーションＳビットが１に設定された場合、低特権状態プログラムがＲＩＯＮ命令を実行することが許可される、処理はブロック１４０８に続く。或いは、Ｓビットが０に設定された場合、低特権状態プログラムＲＩＯＮ命令を実行することは許可されず、処理はブロック１４０６に続く。１つの実施形態では、ブロック１４０６において、ＲＩＯＮ命令は、前の設定を変更せず、ランタイム制御及びＰＳＷは、その前の値のままである。１つの実施形態では、ブロック１４０６において、低特権状態の実行がイネーブルにされていないことを示すように、条件コードが２に設定される。
【０１３７】
ブロック１４０８において、現在のランタイム・インストルメンテーション制御（例えば、ＲＩＣＣＢ内の）の妥当性ビット（Ｖビットとも呼ばれる）が１に設定されるかどうかが判断される。妥当性ビットは、以前にＬＲＩＣ命令によって設定されたので、プロセッサにおけるランタイム・インストルメンテーション制御の設定の妥当性を示す。現在のランタイム・インストルメンテーション制御が有効でない（即ち、以前のＬＲＩＣ命令が無効であった）場合、処理はブロック１４１０に続く。１つの実施形態では、ブロック１４１０において、現在のランタイム・インストルメンテーション制御が有効でないことを示すように、条件コードが３に設定される。
【０１３８】
妥当性ビットが１に設定され、ランタイム・インストルメンテーション制御が有効であることを示す場合、処理はブロック１４１２に続き、そこで収集バッファのコンテンツ、及び、存在する場合は命令データ・バッファがパージされる。１つの実施形態において、ブロック１４１２において、ＰＳＷ内のＲＩビットが既にゼロに設定されている場合にのみ、バッファがパージされる。処理はブロック１４１４に続き、そこでＰＳＷ内のＲＩビット（例えば、ビット２４）が１に設定される。１つの実施形態において、ＰＳＷのビット２４が既に１である場合、ＲＩＯＮ命令の実行は完了し、条件コードがゼロに設定される。１つの実施形態において、ＰＳＷのビット２４の現在の値を判断するために、ＥＸＴＲＡＣＴ  ＰＳＷ命令が実行される。
【０１３９】
１つの実施形態において、ランタイム・インストルメンテーション・ファシリティがサンプリング・モード０又は１で実行されている場合（例えばＲＣＣＢにより決定されるように）、非ゼロのＲＳＩＣを用いて、間隔の残りを続ける。ＲＳＩＣがゼロである場合、新しいサンプリング間隔がスケーリング・ファクタの値に初期化され、ＲＩＣＣＢ内のＡビットが１に設定される。
【０１４０】
上述のように、実施形態は、コンピュータ実装プロセス及びそれらのプロセスを実施するための装置の形で具体化することができる。実施形態は、製造物品として有形媒体内に具体化された命令を含むコンピュータ・プログラム・コード論理１５０４を有するコンピュータ可読／使用可能媒体１５０２上の、図１９に示されるようなコンピュータ・プログラム製品１５００を含むことができる。コンピュータ可読／使用可能媒体１５０２に関する例示的な製造物品は、フロッピィ・ディスケット、ＣＤ−ＲＯＭ、ハードドライブ、ユニバーサル・シリアル・バス（ＵＳＢ）フラッシュ・ドライブ、又は他のいずれかのコンピュータ可読ストレージ媒体を含むことができ、ここで、コンピュータ・プログラム・コード論理１５０４がコンピュータにロードされ、コンピュータにより実行されると、コンピュータは、本発明を実施するための装置となる。実施形態は、例えば、ストレージ媒体内に格納される、コンピュータにロードされる及び／又はコンピュータによって実行される、又は電気配線若しくはケーブルにより光ファイバを通じて又は電磁放射を介してといった何らかの伝送媒体上で伝送される、コンピュータ・プログラム・コード論理１５０４を含み、ここで、コンピュータ・プログラム・コード論理１５０４がコンピュータにロードされ、コンピュータにより実行されると、コンピュータは、本発明を実施するための装置となる。汎用マイクロプロセッサ上に実装される場合、コンピュータ・プログラム・コード論理１５０４のセグメントは、特定の論理回路を作成するようにマイクロプロセッサを構成する。
【０１４１】
技術的効果及び利点として、ランタイム・インストルメンテーション・ファシリティによるサンプリングを、アプリケーションの実行トレースのサブセットに制限する能力が挙げられる。これにより、インストルメンテーションから設定されたより焦点が当てられたデータがもたらされ得る。さらに、サンプリングを実行トレースのサブセットに制限することによって、インストルメンテーション・データを管理し、バッファに入れ、低減させなければならない費用が低減される。
【０１４２】
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「１つの（ａ）」、「１つの（ａｎ）」及び「その（ｔｈｅ）」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む（ｃｏｍｐｒｉｓｅ）」及び／又は「含んでいる（ｃｏｍｐｒｉｓｉｎｇ）」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び／又はコンポーネントの存在を指定するが、１つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び／又はそれらのグループの存在又は追加を排除するものではないこともさらに理解されるであろう。
【０１４３】
下記の特許請求の範囲におけるすべての機能付き手段（ミーンズ・プラス・ファンクション）又は機能付き工程（ステップ・プラス・ファンクション）の対応する構造、部材、動作、及び均等物は、もしあれば、その機能を、明確に請求されている他の特許請求された要素と組み合わせて実行するための、あらゆる構造、部材、又は動作を含むことが意図されている。本発明の説明は、例証及び説明のために提示されたものであり、網羅的であること又は本発明を開示された形態に限定することを意図したものではない。当業者には、本発明の範囲から逸脱しない多くの修正及び変形が明らかとなるであろう。実施形態は、本発明の原理及び実際の適用を最も良く説明し、その他の当業者が企図される特定の使用に適した種々の修正を伴う種々の実施形態について本発明を理解できるように、選択され、説明された。
【０１４４】
当業者により認識されるように、本発明の態様は、システム、方法、又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、これらは全て、本明細書において、一般的に「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本発明の態様は、コンピュータ可読プログラム・コードが組み込まれた、１つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形を取ることができる。
【０１４５】
１つ又は複数のコンピュータ可読媒体の任意の組み合わせを利用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、これらに限定されるものではないが、例えば、電子的、磁気的、光学的、電磁気的、赤外線、若しくは半導体のシステム、装置、若しくはデバイス、又は上記のものの任意の組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例（非網羅的なリスト）には、以下のもの、即ち、１つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能なプログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、光記憶装置、磁気記憶装置、又は上記のものの任意の適切な組み合わせが含まれる。本文書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって、又はそれらとの関連で使用するためのプログラムを収容又は格納することができる任意の有形媒体とすることができる。
【０１４６】
コンピュータ可読信号媒体は、コンピュータ可読プログラム・コードが、例えばベースバンド内に又は搬送波の一部として内部に具体化された伝搬データ信号を含むことができる。このような伝搬信号は、これらに限定されるものではないが、電磁気、光、又はそれらの任意の適切な組み合わせを含む種々の形態のいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、且つ、命令実行システム、装置若しくはデバイスによって、又はこれらとの関連で使用するためのプログラムを通信し、伝搬し、又は搬送することができる任意のコンピュータ可読媒体とすることができる。
【０１４７】
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限定されるものではないが、無線、有線、光ファイバ・ケーブル、ＲＦ等、又は上記のもののいずれかの適切な組み合わせを含む、いずれかの適切な媒体を用いて伝送することができる。
【０１４８】
本発明の態様の動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（登録商標）、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋等のようなオブジェクト指向型プログラミング言語、及び「Ｃ」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、１つ又は複数のプログラミング言語のいずれかの組み合わせで記述することができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立したソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。後者のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は、外部コンピュータへの接続がなされる場合もある（例えば、インターネット・サービス・プロバイダを用いるインターネットを通じて）。
【０１４９】
本発明の態様は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して以下で説明される。フローチャート図及び／又はＤ−２ブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装することができることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサにより実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装するための手段を生成するようにすることができる。
【０１５０】
これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスに特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装する命令を含む製品を製造するようにすることもできる。
【０１５１】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、そのコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で、コンピュータ実装プロセスを生成するための一連の動作ステップを実施させて、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装するためのプロセスを提供するようにすることもできる。
【０１５２】
上述のように、実施形態は、コンピュータ実装プロセス及びそれらのプロセスを実施するための装置の形で具体化することができる。実施形態において、本発明は、１つ又は複数のネットワーク要素により実行されるコンピュータ・プログラム・コードにおいて具体化される。実施形態は、製造物品として有形媒体内に具体化された、命令を含むコンピュータ・プログラム・コード論理を有するコンピュータ使用可能媒体上のコンピュータ・プログラム製品を含む。コンピュータ使用可能媒体に関する例示的な製造物品は、フロッピィ・ディスケット、ＣＤ−ＲＯＭ、ハードドライブ、ユニバーサル・シリアル・バス（ＵＳＢ）フラッシュ・ドライブ、又は他のいずれかのコンピュータ可読ストレージ媒体を含むことができ、ここで、コンピュータ・プログラム・コード論理がコンピュータにロードされ、コンピュータにより実行されると、コンピュータは、本発明を実施するための装置となる。実施形態は、例えば、ストレージ媒体内に格納される、コンピュータにロードされる及び／又はコンピュータによって実行される、又は電気配線若しくはケーブルにより、光ファイバを通じて、又は電磁放射を介してといった何らかの伝送媒体上で伝送される、コンピュータ・プログラム・コード論理を含み、ここで、コンピュータ・プログラム・コード論理がコンピュータにロードされ、コンピュータにより実行されると、コンピュータは、本発明を実施するための装置となる。汎用マイクロプロセッサ上に実装される場合、コンピュータ・プログラム・コード論理のセグメントは、特定の論理回路を作成するようにマイクロプロセッサを構成する。
【０１５３】
図面内のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含むモジュール、セグメント、又はコードの部分を表すことができる。幾つかの代替的な実装において、ブロック内に記載された機能は、図面内に記載された順序とは異なる順序で行われ得ることにも留意すべきである。例えば、連続して示された２つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、ときにはブロックが逆順に実行されることもある。また、ブロック図及び／又はフローチャート図の各ブロック、並びにブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェア・ベースのシステムによって、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装できることにも留意されたい。
【符号の説明】
【０１５４】
１、１０６：プロセッサ
２、２２、１０５：メモリ
１１：ストレージ・デバイス
５０：ホスト・コンピュータ・システム
１００、５００：システム
１１１：プログラミング・コード
１１２：アプリケーション・プログラム
２００：データ処理ネットワーク
３０３：キャッシュ
３０４：Ｉ／Ｏユニット
３０５：命令フェッチ・ユニット
３０６：デコード／ディスパッチ・ユニット
３０７：実行ユニット
３０８：分岐ユニット
３０９：アーキテクチャ化レジスタ
３１０：ロード・ストア・ユニット
３１１：プログラム・カウンタ
５０４：ランタイム・メモリ
５０６：インストルメンテーション・モジュール
５０８：収集バッファ
５１０：レジスタ
５１２：ＰＳＷデータ
５１４：主メモリ
５１６：オペレーティング・システム
５１８：アプリケーション
５２０：ストレージ
５２２：プログラム・バッファ
９００：報告グループ
９０２：ヘッダ・セクション
９０４：本体セクション
９０６：追加記録セクション
９０８：フッタ・セクション
１５００：コンピュータ・プログラム製品
１５０２：コンピュータ可読／使用可能媒体
１５０４：コンピュータ・プログラム・コード論理
【図１】
2015510154.tif 000004
【図２】
2015510154.tif 000005
【図３】
2015510154.tif 000006
【図４】
2015510154.tif 000007
【図５】
2015510154.tif 000008
【図６】
2015510154.tif 000009
【図７】
2015510154.tif 000010
【図８】
2015510154.tif 000011
【図９】
2015510154.tif 000012
【図１０】
2015510154.tif 000013
【図１１】
2015510154.tif 000014
【図１２】
2015510154.tif 000015
【図１３】
2015510154.tif 000016
【図１４】
2015510154.tif 000017
【図１５】
2015510154.tif 000018
【図１６】
2015510154.tif 000019
【図１７】
2015510154.tif 000020
【図１８】
2015510154.tif 000021
【図１９】
2015510154.tif 000022
【手続補正書】
【提出日】平成26年10月20日(2014.10.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
処理回路に可読であり、且つ、方法を実施するために前記処理回路が実行する命令を格納する有形ストレージ媒体を含む、プロセッサ上でランタイム・インストルメンテーション・ファシリティの実行をイネーブル及びディスエーブルにするためのコンピュータ・プログラムであって、前記プログラムは、前記プロセッサが、
プロセッサにより、低特権状態での前記プロセッサによる実行のための命令をフェッチすることであって、前記命令は、ｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｆｆ（ＲＩＯＦＦ）命令及びｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｎ（ＲＩＯＮ）の一方である、フェッチすることと、
前記プロセッサにより、前記ランタイム・インストルメンテーション・ファシリティが前記低特権状態での前記命令の実行を許可する、及び、前記ランタイム・インストルメンテーション・ファシリティと関連した制御が有効であると判断することに基づいて、前記命令を実行することと、
を実行し、前記命令を実行することは、
前記命令が前記ＲＩＯＦＦ命令であることに基づいて、前記ランタイム・インストルメンテーション・ファシリティをディスエーブルにすることであって、前記ディスエーブルにすることは、前記プロセッサにより前記ランタイム・インストルメンテーション・データをキャプチャすべきではないことを示すように前記プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む、ディスエーブルにすること、及び
前記命令が前記ＲＩＯＮ命令であることに基づいて、前記ランタイム・インストルメンテーション・ファシリティをイネーブルにすることであって、前記イネーブルにすることは、前記プロセッサにより前記ランタイム・インストルメンテーション・データをキャプチャすべきであることを示すように前記プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む、イネーブルにすること、
のいずれか一方を含む、コンピュータ・プログラム。
【請求項２】
前記プログラムは、
前記プロセッサにより、特権状態で実行されているプログラムにより、以前にある値に設定された問題状態実行制御ビットを含むランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）をフェッチすることをさらに含み、前記ランタイム・インストルメンテーション・ファシリティが前記低特権状態での前記命令の実行を許可すると判断することは、前記問題状態実行制御ビットの前記値に基づいている、請求項１に記載のコンピュータ・プログラム。
【請求項３】
前記プログラムは、
前記プロセッサにより、特権状態で実行されているプログラムによって以前にある値に設定された妥当性ビットを含むランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）をフェッチすることをさらに含み、前記ランタイム・インストルメンテーション・ファシリティと関連した制御は有効であると判断することは、前記妥当性ビットの前記値に基づいている、請求項１に記載のコンピュータ・プログラム。
【請求項４】
前記プログラムは、
前記イネーブルにすることに基づいて、
前記プロセッサにより、前記プロセッサ上で実行されているアプリケーション・プログラムの命令の命令ストリームに基づいて前記ランタイム・インストルメンテーション・データをキャプチャすることであって、前記キャプチャすることは、前記ランタイム・インストルメンテーション・データを前記プロセッサの収集バッファ内に格納することを含む、キャプチャすることと、
前記プロセッサにより、ランタイム・インストルメンテーションのサンプル・ポイント・トリガを検出することと、
前記ランタイム・インストルメンテーション・サンプル・ポイント・トリガを検出することに基づいて、前記収集バッファのコンテンツを報告グループとしてプログラム・バッファ内にコピーすることであって、前記プログラム・バッファは、前記アプリケーション・プログラムによりアクセス可能なアドレス空間の主ストレージ内に配置される、コピーすることと、
をさらに含む、請求項１に記載のコンピュータ・プログラム。
【請求項５】
前記プログラムは、
前記収集バッファにおいて、命令アドレス及び前記命令ストリームの前記実行中に検出されたイベントに対応するメタデータをキャプチャすること、
をさらに含む、請求項４に記載のコンピュータ・プログラム。
【請求項６】
前記報告グループは、前記収集バッファのコンテンツ及びシステム情報記録を含む、所定の数の１つ又は複数のインストルメンテーション記録を含む、請求項４に記載のコンピュータ・プログラム。
【請求項７】
前記コピーすることは、前記プログラム・バッファの現在アドレスで開始して前記報告グループを前記プログラム・バッファ内にコピーすることを含み、前記プログラム・バッファは、前記プログラム・バッファ内の最後のバイトのアドレス及び前記プログラム・バッファ内の前記現在アドレスも指定する命令によりアクセス可能な制御ブロックによって指定されるプログラム・バッファ起点アドレスに格納される、請求項４に記載のコンピュータ・プログラム。
【請求項８】
前記プログラムは、
前記ディスエーブルにすることに基づいて、残りの同じ間隔カウント（ＲＳＩＣ）フィールドを保存することと、
前記プロセッサにより、ＲＩＯＮ命令をフェッチすることと、
前記ＲＳＩＣフィールドを復元することと、
をさらに含む、請求項１に記載のコンピュータ・プログラム。
【請求項９】
プロセッサ上でランタイム・インストルメンテーション・ファシリティの実行をイネーブル及びディスエーブルにするための方法であって、前記方法は、プロセッサが、
プロセッサにより、低特権状態での前記プロセッサによる実行のための命令をフェッチすることであって、前記命令は、ｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｆｆ（ＲＩＯＦＦ）命令及びｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｎ（ＲＩＯＮ）の一方である、フェッチすることと、
前記プロセッサにより、前記ランタイム・インストルメンテーション・ファシリティが前記低特権状態での前記命令の実行を許可する、及び、前記ランタイム・インストルメンテーション・ファシリティと関連した制御が有効であると判断することに基づいて、前記命令を実行することと、
を実行し、前記命令を実行することは、
前記命令が前記ＲＩＯＦＦ命令であることに基づいて、前記ランタイム・インストルメンテーション・ファシリティをディスエーブルにすることであって、前記ディスエーブルにすることは、前記プロセッサにより前記ランタイム・インストルメンテーション・データをキャプチャすべきではないことを示すように前記プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む、ディスエーブルにすること、及び
前記命令が前記ＲＩＯＮ命令であることに基づいて、前記ランタイム・インストルメンテーション・ファシリティをイネーブルにすることであって、前記イネーブルにすることは、前記プロセッサにより前記ランタイム・インストルメンテーション・データをキャプチャすべきであることを示すように前記プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む、イネーブルにすること、
のいずれか一方を含む、方法。
【請求項１０】
前記プロセッサにより、特権状態で実行されているプログラムにより、以前にある値に設定された問題状態実行制御ビットを含むランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）をフェッチすることをさらに含み、前記ランタイム・インストルメンテーション・ファシリティが前記低特権状態での前記命令の実行を許可すると判断することは、前記問題状態実行制御ビットの前記値に基づいている、請求項９に記載の方法。
【請求項１１】
前記プロセッサにより、特権状態で実行されているプログラムによって以前にある値に設定された妥当性ビットを含むランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）をフェッチすることをさらに含み、前記ランタイム・インストルメンテーション・ファシリティと関連した制御は有効であると判断することは、前記妥当性ビットの前記値に基づいている、請求項９に記載の方法。
【請求項１２】
前記イネーブルにすることに基づいて、
前記プロセッサにより、前記プロセッサ上で実行されているアプリケーション・プログラムの命令の命令ストリームに基づいて前記ランタイム・インストルメンテーション・データをキャプチャすることであって、前記キャプチャすることは、前記ランタイム・インストルメンテーション・データを前記プロセッサの収集バッファ内に格納することを含む、キャプチャすることと、
前記プロセッサにより、ランタイム・インストルメンテーションのサンプル・ポイント・トリガを検出することと、
前記ランタイム・インストルメンテーション・サンプル・ポイント・トリガを検出することに基づいて、前記収集バッファのコンテンツを報告グループとしてプログラム・バッファ内にコピーすることであって、前記プログラム・バッファは、前記アプリケーション・プログラムによりアクセス可能なアドレス空間の主ストレージ内に配置される、コピーすることと、
をさらに含む、請求項９に記載の方法。
【請求項１３】
前記コピーすることは、前記プログラム・バッファの現在アドレスで開始して前記報告グループを前記プログラム・バッファ内にコピーすることを含み、前記プログラム・バッファは、前記プログラム・バッファ内の最後のバイトのアドレス及び前記プログラム・バッファ内の前記現在アドレスも指定する命令によりアクセス可能な制御ブロックによって指定されるプログラム・バッファ起点アドレスに格納される、請求項１２に記載の方法。
【請求項１４】
プロセッサ上でランタイム・インストルメンテーション・ファシリティの実行をイネーブル及びディスエーブルにするためのシステムであって、前記システムは、
プロセッサにより、低特権状態での前記プロセッサによる実行のための命令をフェッチする手段であって、前記命令は、ｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｆｆ（ＲＩＯＦＦ）命令及びｒｕｎ−ｔｉｍｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  ｆａｃｉｌｉｔｙ  ｏｎ（ＲＩＯＮ）の一方である、フェッチする手段と、
前記プロセッサにより、前記ランタイム・インストルメンテーション・ファシリティが前記低特権状態での前記命令の実行を許可する、及び、前記ランタイム・インストルメンテーション・ファシリティと関連した制御が有効であると判断することに基づいて、前記命令を実行する手段と、
を含み、前記命令を実行する手段は、
前記命令が前記ＲＩＯＦＦ命令であることに基づいて、前記ランタイム・インストルメンテーション・ファシリティをディスエーブルにする手段であって、前記ディスエーブルにすることは、前記プロセッサにより前記ランタイム・インストルメンテーション・データをキャプチャすべきではないことを示すように前記プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む、ディスエーブルにする手段、及び
前記命令が前記ＲＩＯＮ命令であることに基づいて、前記ランタイム・インストルメンテーション・ファシリティをイネーブルにする手段であって、前記イネーブルにすることは、前記プロセッサにより前記ランタイム・インストルメンテーション・データをキャプチャすべきであることを示すように前記プロセッサのプログラム状況語（ＰＳＷ）内のビットを更新することを含む、イネーブルにする手段と、
のいずれか一方を含む、システム。
【請求項１５】
前記システムは、
前記プロセッサにより、特権状態で実行されているプログラムにより、以前にある値に設定された問題状態実行制御ビットを含むランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）をフェッチする手段をさらに含み、前記ランタイム・インストルメンテーション・ファシリティが前記低特権状態での前記命令の実行を許可すると判断することは、前記問題状態実行制御ビットの前記値に基づいている、請求項１４に記載のシステム。
【国際調査報告】
2015510154.tif 000023
2015510154.tif 000024