(58)【調査した分野】(Int.Cl.,DB名)
前記報告グループは、前記収集バッファのコンテンツ及びシステム情報記録を含む、所定の数の1つ又は複数のインストルメンテーション記録を含む、請求項4に記載のコンピュータ・プログラム。
前記コピーすることは、前記プログラム・バッファの現在アドレスで開始して前記報告グループを前記プログラム・バッファ内にコピーすることを含み、前記プログラム・バッファは、前記プログラム・バッファ内の最後のバイトのアドレス及び前記プログラム・バッファ内の前記現在アドレスも指定する命令によりアクセス可能な制御ブロックによって指定されるプログラム・バッファ起点アドレスに格納される、請求項4に記載のコンピュータ・プログラム。
前記プロセッサにより、特権状態で実行されているプログラムにより、以前にある値に設定された問題状態実行制御ビットを含むランタイム・インストルメンテーション制御ブロック(RICCB)をフェッチすることをさらに含み、前記ランタイム・インストルメンテーション・ファシリティが前記低特権状態での前記命令の実行を許可すると判断することは、前記問題状態実行制御ビットの前記値に基づいている、請求項9に記載の方法。
前記プロセッサにより、特権状態で実行されているプログラムによって以前にある値に設定された妥当性ビットを含むランタイム・インストルメンテーション制御ブロック(RICCB)をフェッチすることをさらに含み、前記ランタイム・インストルメンテーション・ファシリティと関連した制御は有効であると判断することは、前記妥当性ビットの前記値に基づいている、請求項9に記載の方法。
前記コピーすることは、前記プログラム・バッファの現在アドレスで開始して前記報告グループを前記プログラム・バッファ内にコピーすることを含み、前記プログラム・バッファは、前記プログラム・バッファ内の最後のバイトのアドレス及び前記プログラム・バッファ内の前記現在アドレスも指定する命令によりアクセス可能な制御ブロックによって指定されるプログラム・バッファ起点アドレスに格納される、請求項12に記載の方法。
【発明を実施するための形態】
【0008】
ランタイム・インストルメンテーション・ファシリティは、プロセッサが、ハードウェア・イベント・データを、ローリング履歴バッファ(rolling history buffer)内に収集し、履歴バッファをサンプリングし、履歴バッファからのデータを、アプリケーションがアクセス可能なストレージに格納することを可能にする。実行経路内に関心のない可能性がある要素が存在し得るので、一般的に、サンプリングをアプリケーションの実行トレースのサブセットに制限することが望ましい。例えば、ランタイム・インストルメンテーション・ファシリティにより収集されたデータが、コンパイラによりコンパイルされたプログラムを強化するために用いられる場合、ランタイム環境及びオペレーティング・システム・サービスに関連したデータは、有用でないことがある(例えば、コンパイラは、ランタイム環境又はオペレーティング・システム・サービスに影響を及ぼす能力を有することができないため)。さらに、サンプリングされる実行経路の範囲を制限することにより、ランタイム・インストルメンテーション・ファシリティは、収集されたインストルメンテーション・データを管理し、バッファに入れ、低減しなければならないコストを減らすことができ、これにより、インストルメンテーション機構のオーバーヘッドが最小限に保持される。本明細書で説明される実施形態により、アプリケーションからの命令に基づいて、ランタイム・インストルメンテーションをオフ(ディスエーブル)にすること及びオン(イネーブル)にすることが可能になる。
【0009】
本明細書で実施形態において説明されるように、run−time instrumentation on(RION:ランタイム・インストルメンテーション・オン)命令と呼ばれる第1の命令は、サンプリングされる実行経路のサブトレースのための開始点を指定する。本明細書でも説明されるように、run−time instrumentation off(RIOFF:ランタイム・インストルメンテーション・オフ)命令と呼ばれる第2の命令は、サンプリングされる実行経路のサブトレースのための終点を指定する。これらの命令は、コンパイルされたコードと、ランタイム環境との間に移行点において、命令ストリームに挿入することができる。さらに、コンパイラにより、RION命令及びRIOFF命令を命令ストリームに挿入し、サンプリング機構の焦点をコンパイルされたコードの特定の領域に合わせることができる。
【0010】
実施形態によると、プログラム状況ワード(program status word、PSW)内のビットが、ランタイム・インストルメンテーション・ファシリティの状態を示すために使用される。PSW内のビットは、現在の実行点が、実行トレースのサンプリング間隔の内側にあるか(即ち、ランタイム・インストルメンテーション・ファシリティがオンにされ、データを収集する)、又はサンプリング間隔の外側にあるか(即ち、ランタイム・インストルメンテーション・ファシリティがオフにされ、データを収集しない)を示す。コンテキスト・スイッチにわたってPSWが保存され復元されるので、実行スレッドのディスパッチにわたってサンプリング機構の状態が維持される。
【0011】
本発明の実施形態は、管理されるランタイムのための、ハードウェア・ベースのランタイム・インストルメンテーションン・ファシリティである。本明細書で用いられる場合、用語「管理されるランタイム」とは、状態をカプセル封入し、プログラム又はアプリケーションを実行するのに用いられるリソースを管理する環境を指す(例えば、Java(登録商標)仮想マシン、又は「JVM」オペレーティング・システム、ミドルウェア等)。ランタイム・インストルメンテーション・ファシリティの実施形態は、プログラムが、中央演算処理ユニット(CPU)データを含む、プログラム実行についての情報を収集することを可能にする。収集された情報により、マネジャー・ランタイム環境が、情報を収集するプロセッサについての洞察を取得することが可能になる。ランタイム・インストルメンテーション・ファシリティの実施形態は、収集バッファ内にイベントのシーケンス(例えば、成立した分岐、レジスタ値等)を収集するためのハードウェア・ファシリティを含む。収集バッファ(又は、最新の記録を含む収集バッファのサブセット)は、これらに限定されるものではないが、命令ストリームに挿入される命令の形のソフトウェアの指示、実行される命令の間隔が完了する、最後のサンプルの期間満了からの所定の経過時間、及び/又はデータ若しくは命令キャッシュミスのような所定のハードウェア・イベントが観察されるといった、サンプル・トリガ・イベントのプログラム可能なセット時に、アプリケーションのアドレス空間(例えば、JVMのアドレス空間)のプログラム・バッファ内にコピーされる。
【0012】
動的コンパイラは、本明細書で説明されるハードウェア・ベースのランタイム・インストルメンテーション・ファシリティによって収集されるような、ランタイム情報を利用すして、オンライン式フィードバック指向最適化(feedback directed optimization)を実行する。例えば、重要な実行経路、プロファイル値、及び好ましい分岐方向についての情報を、動的コンパイラにより使用して、コードを特殊化又はバージョン化し、インライン化を指示し、実行経路の順序を変え、分岐の直線化といった最適化を実施することができる。本明細書で説明される実施形態により生成されるデータは、データ再編成のような最適化の他の形態のために用いることもできる。
【0013】
図1は、1つの実施形態におけるホスト・コンピュータ・システム50の代表的なコンポーネントを示す。コンピュータ・システムにおいて、コンポーネントの他の構成を用いることもできる。代表的なホスト・コンピュータ・システム50は、主ストア(コンピュータ・メモリ)2と通信する1つ又は複数のプロセッサ1、並びにストレージ・デバイス11及び他のコンピュータ又はSAN等と通信するためのネットワーク10へのI/Oインターフェースを含む。プロセッサ1は、アーキテクチャ化された(architected)命令セット及びアーキテクチャ化された機能を有するアーキテクチャに準拠している。プロセッサ1は、プログラム・アドレス(仮想アドレス)をメモリの実アドレスに変換するための動的アドレス変換(dynamic address translation、DAT)3を有することができる。DAT3は、典型的には、変換をキャッシュに入れるための変換ルックアサイド・バッファ(translation lookaside buffer、TLB)7を含むので、コンピュータ・メモリ2のブロックへの後のアクセスでは、アドレス変換の遅延を要しない。典型的には、キャッシュ9が、コンピュータ・メモリ2と、プロセッサ1との間に用いられる。キャッシュ9は、1つより多いCPUが利用可能な大型キャッシュと、大型キャッシュと、各CPUとの間のより小型でより高速な(下位レベルの)キャッシュとを有する階層とすることができる。幾つかの実施形態においては、下位レベル・キャッシュが分割されて、命令のフェッチ及びデータ・アクセスのための別個の下位レベル・キャッシュを与える。1つの実施形態において、命令は、キャッシュ9を介して、命令フェッチ・ユニット4により、コンピュータ・メモリ2からフェッチされる。命令は、命令デコード・ユニット6においてデコードされ、命令実行ユニット8にディスパッチされる(幾つかの実施形態においては、他の命令を用いて)。典型的には、例えば、算術演算実行ユニット、浮動小数点実行ユニット、及び分岐命令実行ユニットなどの幾つかの命令実行ユニット8が用いられる。命令は、命令実行ユニット8により実行され、必要に応じて、命令が指定したレジスタ又はコンピュータ・メモリ2からオペランドにアクセスする。コンピュータ・メモリ2からオペランドにアクセスする(オペランドをロード又はストア(格納)する)場合、典型的には、実行される命令の制御下で、ロード・ストア・ユニット5がアクセスを処理する。命令は、ハードウェア回路又は内部のマイクロコード(ファームウェア)において、又はその両方の組み合わせによって実行することができる。
【0014】
図2において、
図1のホスト・コンピュータ・システム50などのホスト・アーキテクチャのホスト・コンピュータ・システムをエミュレートする、エミュレートされたホスト・コンピュータ・システム21が提供される。エミュレートされたホスト・コンピュータ・システム21において、ホスト・プロセッサ(CPU)1は、エミュレートされたホスト・プロセッサ(又は仮想ホスト・プロセッサ)29であり、ホスト・コンピュータ・システム50のプロセッサ1のものとは異なるネイティブ命令セット・アーキテクチャを有するネイティブ・プロセッサ27を含む。エミュレートされたホスト・コンピュータ・システム21は、ネイティブ・プロセッサ27がアクセス可能なメモリ22を有する。1つの実施形態において、メモリ22は、コンピュータ・メモリ2の部分と、エミュレーション・ルーチン・メモリ23の部分とに区分化される。コンピュータ・メモリ2は、ホスト・コンピュータ・アーキテクチャに従って、エミュレートされたホスト・コンピュータ・システム21のプログラムに利用可能である。ネイティブ・プロセッサ27は、エミュレートされたプロセッサ29のもの以外のアーキテクチャのアーキテクチャ化命令セットのネイティブ命令及びエミュレーション・ルーチン・メモリ23から取得された命令を実行し、且つ、アクセスされたホスト命令をデコードして、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを判断することができるシーケンス及びアクセス/デコード・ルーチンにおいて取得される1つ又は複数の命令を用いて、コンピュータ・メモリ2内のプログラムによる実行のためにホスト命令にアクセスすることができる。ホスト・コンピュータ・システム50のアーキテクチャのために定められた、例えば、汎用レジスタ、制御レジスタ、動的アドレス変換、及びI/Oサブシステムのサポート、並びにプロセッサ・キャッシュといったファシリティを含む他のファシリティを、アーキテクチャ化ファシリティ・ルーチンによってエミュレートすることができる。エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を高めるために、(汎用レジスタ、及び仮想アドレスの動的変換などの)ネイティブ・プロセッサ27において利用可能な機能を利用することもできる。専用ハードウェア及びオフロード・エンジンを設けて、ホスト・コンピュータ・システム50の機能をエミュレートする際にネイティブ・プロセッサ27を補助することもできる。
【0015】
メインフレームにおいて、アーキテクチャ化されたマシン命令は、通常、プログラマによって、多くの場合コンパイラ・アプリケーションを介して、今日では「C」プログラマによって用いられる。ストレージ媒体内に格納されたこれらの命令は、z/アーキテクチャのIBM(登録商標)サーバにおいて、又は代替的に他のアーキテクチャを実行するマシンにおいて、ネイティブに実行することができる。これらの命令は、既存及び将来のIBM(登録商標)メインフレーム・サーバにおいて、及び、IBM(登録商標)の他のマシン(例えば、pSeries(登録商標)サーバ及びxSeires(登録商標)サーバ)上で、エミュレートすることができる。これらの命令は、IBM(登録商標)、Intel(登録商標)、AMD(商標)、Sun Microsystemsその他によって製造されたハードウェアを用いて種々のマシン上でLinux(登録商標)を実行しているマシンにおいて実行することができる。Z/アーキテクチャ(登録商標)下でそのハードウェア上で実行することに加えて、Linux(登録商標)を用いること、並びに、一般に実行がエミュレーション・モードにある、Hercules、UMX、又はFundamental Software,Inc.(FSI)、又はPlatform Solutions,Inc.(PSI)によるエミュレーションを用いるマシンを使用することもできる。エミュレーション・モードにおいては、ネイティブ・プロセッサは、エミュレートされたプロセッサのアーキテクチャをエミュレートするために、エミュレーション・ソフトウェアを実行する。。
【0016】
エミュレートされたホスト・コンピュータ・システム21のコンポーネントの1つ又は複数は、「IBM(登録商標) z/Architecture Principles of Operation」、出版番号SA22−7832−08、第9版、2010年8月」に記載されており、その全体は、引用により本明細書に含まれる。IBMは、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で使用される他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーション又は他の会社の登録商標、商標、又は製品名であり得る。
【0017】
ネイティブ・プロセッサ27は、典型的に、エミュレートされたプロセッサのエミュレーションを実行するためにファームウェア又はネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ルーチン・メモリ23内に格納されたエミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令のフェッチと実行を担当する。エミュレーション・ソフトウェアは、エミュレートされたプログラム・カウンタを維持し、命令境界を常時監視している。エミュレーション・ソフトウェアは、一度に1つ又は複数のエミュレートされたマシン命令をフェッチし、ネイティブ・プロセッサ27により実行するために、1つ又は複数のエミュレートされたマシン命令を、対応するネイティブ・マシン命令のグループに変換することができる。これらの変換された命令をキャッシュに入れて、より高速の変換を達成することができる。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持して、オペレーティング・システム及びエミュレートされたプロセッサのために書かれたアプリケーションが正確に動作することを保証する。さらに、エミュレーション・ソフトウェアは、これらに限られるものではないが、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブル及びページ・テーブルを含む動的アドレス変換機能、割り込み機構、コンテキスト・スイッチ機構、時刻(Time of Day、TOD)クロック、及びI/Oサブシステムへのアーキテクチャ化インターフェースを含む、エミュレートされたプロセッサのアーキテクチャによって識別されるリソースを提供し、エミュレートされたプロセッサ29上で実行するように設計されたオペレーティング・システム又はアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ27上で実行できるようにする。
【0018】
エミュレートされる特定の命令がデコードされ、個々の命令の機能を実施するためのサブルーチンが呼び出される。エミュレートされたプロセッサ1の機能をエミュレートするエミュレーション・ソフトウェアの機能は、例えば、「C」サブルーチン若しくはドライバ又は好ましい実施形態の説明を理解した後で当技術の範囲内にある特定のハードウェアのためのドライバを提供するための他の何らかの方法で実装される。
【0019】
1つの実施形態において、本発明は、ソフトウェア(ライセンス内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれる場合もあるが、そのいずれも本発明の1つ又は複数の態様と整合性がある)により実施することができる。
図1を参照すると、本発明を具体化するソフトウェア・プログラム・コードには、ホスト・コンピュータ・システム50のCPU(中央演算処理ユニット)1としても知られるプロセッサにより、長期ストレージ媒体、CD−ROMドライブ、テープドライブ、又はハードドライブなどのストレージ・デバイス11からアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMなどの、データ処理システムと共に使用するための種々の周知の媒体のいずれかの上で具体化することができる。コードは、こうした媒体上に分散させてもよく、又はコンピュータ・メモリ2からユーザに分散させてもよく、又は、こうした他のシステムのユーザが使用するために、ネットワーク10上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【0020】
代替的に、コンピュータ・メモリ2においてプログラム・コードを具体化し、プロセッサ・バス(図示せず)を用いて、プロセッサ1によりプログラム・コードにアクセスすることができる。上述したプログラム・コードは、種々のコンピュータ・コンポーネントの機能及び相互作用を制御するオペレーティング・システムと、1つ又は複数のアプリケーション・プログラムとを含む。プログラム・コードは、通常、ストレージ・デバイス11などの高密度媒体からコンピュータ・メモリ2にページングされ、そこでプロセッサ1による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを分散させる技術及び方法は周知であり、本明細書ではこれ以上論じない。プログラム・コードは、作成され、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュ・メモリ、コンパクト・ディスク(CD)、DVD、磁気テープ等を含む)上に格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【0021】
図3は、本発明を実施することができる代表的なワークステーション又はサーバ・ハードウェア・システムを示す。
図3のシステム100は、随意的な周辺機器を含む、パーソナル・コンピュータ、ワークステーション、又はサーバなどの代表的なベース・コンピュータ・システム101を含む。ベース・コンピュータ・システム101は、1つ又は複数のプロセッサ106と、周知の技術に従って1つ又は複数のプロセッサ106と、ベース・コンピュータ・システム101の他のコンポーネントとを接続し、これらの間の通信を可能にするために用いられるバス(図示せず)とを含む。バスは、プロセッサ106を、、メモリ105及びハードドライブ(例えば、磁気媒体、CD、DVD、及びフラッシュ・メモリのいずれかを含む)又はテープドライブを含むことができる長期ストレージ107に接続する。ベース・コンピュータ・システム101はまた、バスを介して、1つ又は複数のプロセッサ106を、キーボード104、マウス103、プリンタ/スキャナ110、及び/又はタッチ・センシティブ・スクリーン、デジタル化された入力パッド等のいずれかのユーザ・インターフェース機器とすることができる他のインターフェース機器といった、1つ又は複数のインターフェース機器に接続する、ユーザ・インターフェース・アダプタを含むこともできる。バスはまた、ディスプレイ・アダプタを介して、1つ又は複数のプロセッサを、LCDスクリーン又はモニタなどのディスプレイ装置102にも接続する。
【0022】
ベース・コンピュータ・システム101は、ネットワーク109と通信する108ことができるネットワーク・アダプタを介して、他のコンピュータ又はコンピュータのネットワークと通信することができる。例示的なネットワーク・アダプタは、通信チャネル、トークン・リング、イーサネット(登録商標)、又はモデムである。或いは、ベース・コンピュータ・システム101は、セルラー・デジタル・パケット・データ(CDPD)カードなどの無線インターフェースを用いて通信することができる。ベース・コンピュータ・システム101は、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)内の上述した他のコンピュータと関連付けることができ、又は、別のコンピュータ等とのクライアント/サーバ構成におけるクライアントとすることができる。
【0023】
図4は、本発明を実施することができるデータ処理ネットワーク200を示す。データ処理ネットワーク200は、各々が複数の個々のワークステーション201、202、203、204、及び/又は
図3のベース・コンピュータ・システム101を含むことができる、無線ネットワーク及び有線ネットワークのような複数の個々のネットワークを含むことができる。さらに、当業者であれば理解するように、1つ又は複数のLANを含ませることができ、LANは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含むことができる。
【0024】
プログラミング・コード111をメモリ105において具体化し、プロセッサ・バスを用いてプロセッサ106により、このプログラミング・コード111にアクセスすることができる。こうしたプログラミング・コードは、種々のコンピュータ・コンポーネントの機能及び相互作用を制御するオペレーティング・システムと、1つ又は複数のアプリケーション・プログラム112とを含む。プログラム・コードは、通常、長期ストレージ107から高速メモリ105にページングされ、そこでプロセッサ106による処理のために利用可能になる。ソフトウェア・プログラミング・コードをメモリ内、物理媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを分散させる技術及び方法は周知であり、本明細書ではこれ以上論じない。プログラム・コードは、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュ・メモリ、コンパクト・ディスク(CD)、DVD、磁気テープ等を含む)上に作成され格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【0025】
プロセッサが最も容易に利用できるキャッシュ(通常、プロセッサの他のキャッシュよりも高速で小さい)は、最下位(L1又はレベル1)のキャッシュであり、主ストア(主メモリ)は、最上位レベルのキャッシュ(3つのレベルがある場合にはL3)である。最下位レベルのキャッシュは、実行されるマシン命令を保持する命令キャッシュ(I−キャッシュ)と、データ・オペランドを保持するデータ・キャッシュ(D−キャッシュ)とに分割されることが多い。
【0026】
引き続き
図4を参照すると、ネットワークはまた、ゲートウェイ・コンピュータ(クライアント・サーバ)206、又は(データ・リポジトリにアクセスすることができ、且つ、ワークステーション205から直接アクセスすることもできる)アプリケーシ・サーバ(遠隔サーバ)208などの、メインフレーム・コンピュータ又はサーバを含むこともできる。ゲートウェイ・コンピュータ206は、各々のネットワーク207へのエントリ・ポイントとして働く。ゲートウェイは、1つのネットワーキング・プロトコルを別のものに接続するときに必要とされる。ゲートウェイ・コンピュータ206は、通信リンクによって、別のネットワーク(例えば、インターネット207)に結合できることが好ましい。ゲートウェイ・コンピュータ206はまた、通信リンクを用いて、1つ又は複数のワークステーション101、201、202、203及び204に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なIBM(登録商標) eServer(登録商標)、 zSeries(登録商標)z9(登録商標)サーバを用いて実装することができる。
【0027】
1つの実施形態において、本発明を具体化するソフトウェア・プログラミング・コードには、
図3の長期ストレージ107などの長期ストレージ媒体から、ベース・コンピュータ・システム101のプロセッサ106によりアクセスされる。ソフトウェア・プログラミング・コードは、ディスケット、ハードドライブ、又はCD−ROMといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、そのような媒体上で分散させても、又はメモリからユーザ210及び211に分散させてもよく、又はこうした他のシステムのユーザが用いるために、ネットワーク上で1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【0028】
図5を参照すると、プロセッサ106に関する例示的なプロセッサ実施形態が示される。メモリ・ブロックをバッファに入れてプロセッサ106の性能を向上させるために、1つ又は複数のレベルのキャッシュ303が用いられる。キャッシュ303は、使用される可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、64バイト、128バイト、又は256バイトのメモリ・データである。1つの実施形態において、命令をキャッシュに入れるために、データをキャッシュに入れるのとは別個のキャッシュが用いられる。キャッシュ・コヒーレンス(メモリ及びキャッシュ内のラインのコピーの同期)は、多くの場合、当技術分野において周知の種々の「スヌープ(snoop)」アルゴリズムによって与えられる。プロセッサ・システムのメモリ105などの主ストレージは、キャッシュと呼ばれることが多い。4つのレベルのキャッシュ303を有するプロセッサ・システムにおいて、メモリ105は、典型的にはより高速であり、且つ、コンピュータ・システムが利用できる不揮発性ストレージ(DASD、テープ等)の一部だけを保持するので、レベル5(L5)のキャッシュと呼ばれることがある。メモリ105は、オペレーティング・システムによってメモリ105との間でページングされるデータのページを「キャッシュする」。
【0029】
プログラム・カウンタ(命令カウンタ)311は、実行される現在の命令(current instruction)のアドレスを常時監視している。z/アーキテクチャプロセッサのプログラム・カウンタは64ビットであり、従来のアドレッシング制限をサポートするために、31ビット又は24ビットに切り捨てされ得る。プログラム・カウンタは、典型的には、コンテキスト・スイッチの際に持続するように、コンピュータのプログラム状況ワード(PSW)内で具体化される。従って、例えばオペレーティング・システムにより、プログラム・カウンタ値を有する進行中のプログラムに割り込みをかけることが可能である(即ち、プログラム環境からオペレーティング・システム環境への現在のコンテキスト・スイッチ)。プログラムがアクティブでない間、プログラムのPSWはプログラム・カウンタ値を維持し、オペレーティング・システムが実行されている間、オペレーティング・システムの(PSW内の)プログラム・カウンタが用いられる。1つの実施形態において、プログラム・カウンタは、現在の命令のバイト数に等しい量だけインクリメントされる。Reduced Instruction Set Computing(RISC)命令は、典型的には固定長であり、Complex Instruction Set Computing(CISC)命令は、典型的には可変長である。IBM(登録商標) z/アーキテクチャの命令は、2バイト、4バイト、又は6バイトの長さを有するCISC命令である。例えば、コンテキスト・スイッチ操作又は分岐命令の分岐成立(Branch taken)操作により、プログラム・カウンタ311が変更される。コンテキスト・スイッチ操作において、現行のプログラム・カウンタ値は、実行されるプログラムについての他の状態情報(条件コードなど)と共にPSW内に保存され、新しいプログラム・カウンタ値がロードされ、実行される新しいプログラム・モジュールの命令を指し示す。分岐成立操作を行い、分岐命令の結果をプログラム・カウンタ311にロードすることにより、プログラムが判断を下すこと又はプログラム内でループすることを可能にする。
【0030】
1つの実施形態において、プロセッサ106の代わりに命令をフェッチするために、命令フェッチ・ユニット305が用いられる。命令フェッチ・ユニット305は、「次の順次命令(next sequential instruction)」、分岐成立命令のターゲット命令、又はコンテキスト・スイッチの後のプログラムの最初の命令のいずれかをフェッチする。1つの実施形態において、命令フェッチ・ユニット305は、プリフェッチされた命令を用いることができる可能性に基づいて、命令を投機的にプリフェッチするためのプリフェッチ技術を用いる。例えば、命令フェッチ・ユニット305は、次の順次命令を含む16バイトの命令と、付加的なバイトの更なる順次命令とをフェッチすることができる。
【0031】
次に、フェッチされた命令が、プロセッサ106により実行される。1つの実施形態において、フェッチされた命令は、命令フェッチ・ユニット305のデコード/ディスパッチ・ユニット306に渡される。デコード/ディスパッチ・ユニット306は、命令をデコードし、デコードされた命令についての情報を適切な実行ユニット307、308、及び/又は310に転送する。実行ユニット307は、命令フェッチ・ユニット305から、デコードされた算術命令についての情報を受け取り、命令の操作コード(オペコード)に従ってオペランドに関する算術演算を行う。オペランドは、メモリ105、アーキテクチャ化レジスタ309、又は実行されている命令の即値フィールドのいずれかから、実行ユニット307に与えられる。実行の結果は、格納される場合には、メモリ105、アーキテクチャ化レジスタ309、又は他のマシン・ハードウェア(制御レジスタ、PSWレジスタ等のような)内に格納される。
【0032】
プロセッサ106は、典型的には、命令の機能を実行するための1つ又は複数の実行ユニット307、308、及び310を有する。
図6を参照すると、実行ユニット307は、インターフェース論理407を介して、アーキテクチャ化レジスタ309、デコード/ディスパッチ・ユニット306、ロード・ストア・ユニット310、及びその他のプロセッサ・ユニット401と通信することができる。実行ユニット307は、幾つかのレジスタ回路403、404、及び405を用いて、算術論理演算ユニット(ALU)402が演算対象とする情報を保持することができる。ALU402は、加算(add)、減算(subtract)、乗算(multiply)及び除算(divide)などの算術演算、並びに、論理積(and)、論理和(or)及び排他的論理和(XOR)、ローテート(rotate)及びシフト(shift)などの論理関数を実行する。1つの実施形態において、ALUは、設計に依存する専用の演算をサポートする。他の回路は、例えば条件コード及び復元サポート論理を含む、他のアーキテクチャ化ファシリティ408を提供することができる。典型的には、ALU演算の結果は、出力レジスタ回路406内に保持され、この出力レジスタ回路406が、結果を種々の他の処理機能に転送することができる。他の実施形態においては、多数のプロセッサ・ユニットの構成が存在し、本説明は、一実施形態の代表的な理解を与えることのみを意図している。
【0033】
例えばADD命令は、算術及び論理機能を有する実行ユニット307で実行され、一方、例えば浮動小数点命令は、特化された浮動小数点能力を有する浮動小数点実行ユニット(図示せず)で実行される。実行ユニットは、オペランドに対して操作コードが定めた関数を実行することにより、命令が特定したオペランドに対して動作することが好ましい。例えば、ADD命令は、命令のレジスタ・フィールドによって特定された2つのアーキテクチャ化レジスタ309内に見出されるオペランドに対して、実行ユニット307により実行することができる。
【0034】
実行ユニット307は、2つのオペランドに対して算術加算を実行し、結果を第3のオペランドに格納し、ここで第3のオペランドは、第3のレジスタであっても又は2つのソース・レジスタの一方であってもよい。実行ユニット307は、シフト、ローテート、論理積、論理和及び排他的論理和のような種々の論理関数、並びに、加算、減算、乗算、除算のいずれかを含む、種々の代数関数を実行することができる算術論理演算ユニット(ALU)402を用いることが好ましい。スカラー演算のために設計されたALU402もあり、浮動小数点のために設計されたALU402もある。実施形態において、データは、アーキテクチャに応じて、ビッグエンディアン(最下位バイトが最も高いバイト・アドレスである)、又はリトルエンディアン(最下位バイトが最も低いバイト・アドレスである)とすることができる。IBM(登録商標) z/アーキテクチャは、ビッグエンディアンである。符号付きフィールドは、アーキテクチャに応じて、符号及び大きさ、1の補数、又は2の補数とすることができる。2の補数における負の値又は正の値は、ALU内で加法しか必要としないため、ALUが減算能力を設計する必要がないという点で、2の補数は有利である。数値は、通常、省略表現で記述され、12ビット・フィールドは、4,096バイトブロックのアドレスを定め、通常、例えば4Kバイト(キロバイト)ブロックとして記述される。
【0035】
図7を参照すると、分岐命令を実行するための分岐命令情報が、典型的には、分岐ユニット308に送られ、この分岐ユニット308は、分岐履歴テーブル432のような分岐予測アルゴリズムを用いて、他の条件付き演算が完了する前に分岐の結果を予測する。条件付き演算が完了する前に、現在の分岐命令のターゲットがフェッチされ、投機的に実行される。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件及び投機された結果に基づいて、完了されるか又は破棄される。典型的な分岐命令は、条件コードを試験し、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐することができ、ターゲット・アドレスは、例えば、命令のレジスタ・フィールド又は即値フィールド内に見出されるものを含む幾つかの数に基づいて計算することができる。1つの実施形態において、分岐ユニット308は、複数の入力レジスタ回路427、428及び429と、出力レジスタ回路430とを有するALU426を用いることができる。分岐ユニット308は、例えば、汎用レジスタ、デコード/ディスパッチ・ユニット306、又は他の回路425と通信することができる。
【0036】
例えば、オペレーティング・システムによって開始されるコンテキスト・スイッチ、コンテキスト・スイッチを発生させるプログラム例外又はエラー、コンテキスト・スイッチを発生させるI/O割り込み信号、又は(マルチスレッド環境における)複数のプログラムのマルチスレッド活動を含む様々な理由により、命令のグループの実行に割り込みがかけられることがある。1つの実施形態において、コンテキスト・スイッチ動作により、現在実行中のプログラムについての状態情報が保存され、次いで、起動される別のプログラムについての状態情報がロードされる。状態情報は、例えば、ハードウェア・レジスタ又はメモリ内に保存することができる。状態情報は、実行される次の命令を指し示すプログラム・カウンタ値、条件コード、メモリ変換情報、及びアーキテクチャ化レジスタのコンテンツを含む。コンテキスト・スイッチ活動は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、又はファームウェア・コード(マイクロコード、ピココード、又はライセンス内部コード(LIC))により単独で又はその組み合わせで実施することができる。
【0037】
プロセッサは、命令により定義された方法に従ってオペランドにアクセスする。命令は、命令の一部の値を用いて即値オペランドを与え、汎用レジスタ又は専用レジスタ(例えば、浮動小数点レジスタ)のいずれかを明示的に指し示す1つ又は複数のレジスタ・フィールドを与えることができる。命令は、操作コード・フィールドによって、オペランドとして識別されるインプライド・レジスタ(implied register)を用いることができる。命令は、オペランドのためのメモリ位置を用いることができる。z/アーキテクチャの長変位ファシリティ(long displacement facility)により例示されるように、オペランドのメモリ位置を、レジスタ、即値フィールド、又はレジスタと即値フィールドの組み合わせによって与えることができ、命令は、基底レジスタ、インデックス・レジスタ、及び即値フィールド(変位フィールド)を定め、これらが、互いに加算されてメモリ内のオペランドのアドレスをもたらす。ここでの位置(location)は、典型的には、特に断りのない限り、主メモリ(主ストレージ)内の記憶位置を意味する。
【0038】
図8を参照すると、プロセッサは、ロード/ストア・ユニット310を用いて、ストレージにアクセスする。ロード/ストア・ユニット310は、キャッシュ・メモリ・インターフェースを通じてメモリ内のターゲット・オペランドのアドレスを取得し、オペランドをアーキテクチャ化レジスタ309若しくは別のメモリ位置にロードすることによって、ロード操作を行うことができ、又は、メモリ内のターゲット・オペランドのアドレスを取得し、アーキテクチャ化レジスタ309若しくは別のメモリ位置から取得したデータをメモリ内のターゲット・オペランドの記憶位置に格納することによって、ストア操作を行うことができる。ロード/ストア・ユニット310は、投機的なものであってもよく、命令シーケンスに対してアウト・オブ・オーダー式の順序でメモリにアクセスすることができるが、プログラムに対して、命令がイン・オーダー式に実行されたという外観を維持する。ロード/ストア・ユニット310は、アーキテクチャ化レジスタ309、デコード/ディスパッチ・ユニット306、キャッシュ/メモリ・インターフェース若しくは他の要素455と通信することができ、ストレージ・アドレスを計算し、且つ、パイプライン処理を順に行って操作をイン・オーダー式に保持するための、種々のレジスタ回路、ALU458、及び制御論理463を含む。一部の動作は、アウト・オブ・オーダー式とすることができるが、ロード/ストア・ユニットは、アウト・オブ・オーダー式動作が、プログラムに対して、当技術分野において周知のようなイン・オーダー式に実行されたように見えるようにする機能を提供する。
【0039】
好ましくは、アプリケーション・プログラムが「見ている」アドレスは、仮想アドレスと呼ばれることが多い。仮想アドレスは、「論理アドレス」及び「実効アドレス」と呼ばれることもある。これらの仮想アドレスは、これらに限定されるものではないが、仮想アドレスをオフセット値にプリフィックス付加すること、1つ又は複数の変換テーブルを介して仮想アドレスを変換することを含む、
図5のDAT312のような種々のDAT技術の1つによって、物理的メモリ位置にリダイレクトされるという点で仮想のものであり、変換テーブルは、少なくともセグメント・テーブル及びページ・テーブルを単独で又は組み合わせて含み、セグメント・テーブルは、ページ・テーブルを指し示すエントリを有することが好ましい。z/アーキテクチャにおいては、領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、及び随意的なページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、仮想アドレスを関連した物理的メモリ位置にマッピングするエントリを含む変換ルックアサイド・バッファ(TLB)を用いることにより改善されることが多い。DAT312が変換テーブルを用いて仮想アドレスを変換したときに、エントリが作成される。次いで、後に仮想アドレスを用いることで、低速の順次変換テーブル・アクセスではなく、高速のTLBのエントリを用いることがきる。TLBのコンテンツは、最長時間未使用(Least Recently Used、LRU)を含む種々の置換アルゴリズムによって管理することができる。
【0040】
プロセッサ106がマルチプロセッサ・システムのプロセッサである場合には、各プロセッサは、コヒーレンシのために、I/O、キャッシュ、TLB、及びメモリといった共有リソースをインターロック状態に保持する責任を負う。1つの実施形態において、キャッシュ・コヒーレンシを保持する際に、「スヌープ」技術が用いられる。スヌープ環境においては、共有を容易にするために、各キャッシュ・ラインを、共有状態、排他的状態、変更状態、無効状態等のいずれか1つの状態にあるものとしてマーク付けすることができる。
【0041】
図5のI/Oユニット304は、プロセッサ106に、例えば、テープ、ディスク、プリンタ、ディスプレイ、及びネットワークを含む周辺機器に取り付けるための手段を与える。I/Oユニット304は、ソフトウェア・ドライバによってコンピュータ・プログラムに提示されることが多い。IBM(登録商標) z/Seriesのようなメインフレームにおいては、チャネル・アダプタ及びオープン・システム・アダプタが、オペレーティング・システムと周辺機器との間に通信をもたらすメインフレームのI/Oユニットである。
【0042】
インストルメンテーション・データは、プロセッサ106の動作に関連したデータである。1つの実施形態において、インストルメンテーション・データ及び他のシステム・レベル・メトリックへのアクセスが制限されていること又は利用できないことがある。コンピュータ・プロセッサは、特権状態(即ち、スーパーバイザ状態)、及び低特権状態(即ち、問題状態)の下で動作する。特権状態において、プログラムは、特権操作を介して、全てのシステム・リソースにアクセスする(例えば、全ての制御レジスタ及びスーパーバイザ・メモリ空間にアクセスする)ことができる。特権状態は、特権モード又はスーパーバイザ・モードとも呼ばれる。コンピュータ・プロセッサ上で実行されているオペレーティング・システムは、特権状態で動作し得る。低特権状態は、システム・リソースへのアクセスが制限されている非特権状態(non-privileged state)である。例えば、低特権状態で実行されているアプリケーション・プログラムは、制御レジスタへのアクセスが制限されるか又は制御レジスタにアクセスできないことがあり、且つ、オペレーティング・システムにより、アプリケーション・プログラムに割り当てられたユーザ・メモリ空間にしかアクセスすることができない。低特権状態は、典型的には、オペレーティング・システムの制御下で実行されるアプリケーション・プログラムに割り当てられ、特権操作を低特権状態で実施することはできない。低特権状態は、問題状態、問題モード、又はユーザ・モードとしても知られる。
【0043】
低特権状態で実行されているプログラムに書き込み・アクセス可能でない1つのこうした制限されたリソースが、プログラム状況ワード(PSW)である。PSWは、実行される次の命令のプログラム・カウンタと、分岐命令により使用可能な条件コード・フィールドと、インストルメンテーションがイネーブルにされているか又はディスエーブルにされているかを示すためのインストルメンテーション制御フィールドと、命令の順序を制御し、プログラムに割り当てられた特権状態を含むコンピュータ・プロセッサの状態を判断するために用いられる他の情報とを含むことができる。マルチスレッド処理環境においては、複数のプログラムが、利用可能なコンピュータ・プロセッサの容量を共有するか、又はタイムスライスする。プログラムの各々は、関連したPSW、プログラムに割り当てられた主ストレージにアクセスするためのアドレス変換テーブルの起点アドレス(origin address)、汎用レジスタの現在値のセット、制御レジスタ、浮動小数点レジスタ等を含む、コンテキスト情報を有する。現在アクティブな又は制御を行っているPSWは、現(current)PSWと呼ばれる。この現PSWは、現在実行されているプログラムを制御する。コンピュータ・プロセッサは、割り込み能力を有し、この割り込み能力により、例外条件及び外部からの刺激に応答して、コンピュータ・プロセッサが、別のプログラムにより迅速にコンテキストを切り替えることが可能になる。割り込みが発生すると、コンピュータ・プロセッサは、現PSWを、特定のクラスの割り込みのための、旧(old)PSW位置と呼ばれる割り当てられたストレージ位置に入れる。コンピュータ・プロセッサは、第2の割り当てられたストレージ位置から、新(new)PSWをフェッチする。この新しいコンテキストにより、実行される次のプログラムが判断される。1つの実施形態において、これらのストレージ位置は、コンピュータ・プロセッサがアクセス可能なメモリ位置に配置される。コンピュータ・プロセッサが割り込み処理を終了すると、割り込みを処理するプログラムは、旧PSWを含む旧コンテキストを再ロードし、これを再び現PSWとすることができ、これにより、割り込みを受けたプログラムが続行できるようになる。
【0044】
PSWのフィールドは、明示的に(例えば、命令の実行がPSWビットの一部を読み出す場合)、又は暗黙的に(例えば、命令フェッチ、オペランド・フェッチ、アドレス生成計算、アドレス生成ソース等の際に)参照することができる。明示的な参照は、一般に、実行時に実施されるのに対して、暗黙的な参照は、一般に、命令実行中のパイプラインの異なる段階(即ち、命令フェッチ、命令デコード、実行時、及び完了時)に実施される。PSW内の個々のフィールドは、互いに独立して参照又は更新することができる。
【0045】
1つの実施形態において、コンテキストを操作することにより、オペレーティング・システムは、コンピュータ・プロセッサによりランタイム・インストルメンテーションをイネーブルにすることを含む、コンピュータ処理リソースの制御を行う。ランタイム・インストルメンテーションは、オペレーティング・システムの実行の間又はオペレーティング・システムにより実行されるいずれかのソフトウェア・アプリケーションにより、イネーブル又はディスエーブルすることができる。ランタイム・インストルメンテーションのイネーブル/ディスエーブル状態は、プログラムと関連したPSW内に、コンテキスト情報として保存される。
【0046】
ランタイム・インストルメンテーション(RI)ファシリティは、z/アーキテクチャを実装するモデル上に組み込むことができる。RIファシリティがインストールされ、イネーブルにされると、プログラム実行中、データが、CPUの1つ又は複数の収集バッファ内に収集され、次いで、プログラム・バッファに報告される。格納された情報の各単位は、報告グループと呼ばれる。報告グループのコンテンツは、プログラム実行中、そのコンテンツがCPUにより認識されたイベントを表す複数の記録から成る。
【0047】
ランタイム・インストルメンテーション・ファシリティが構成内にインストールされている場合、PSWフィールド(RIビット)がランタイム・インストルメンテーションをイネーブルにする。ランタイム・インストルメンテーション制御の妥当性が、RIビットをオンにする能力を決定し、RIが1のとき、CPU制御は有効であり、ランタイム・インストルメンテーションがイネーブルにされる。ランタイム・インストルメンテーション・ファシリティは、以下の命令:load run−time−instrumentation controls、modify run−time−instrumentation controls、run−time−instrumentation emit、run−time−instrumentation next、run−time−instrumentation off、run−time−instrumentation on、store run−time−instrumentation controls、及びtest run−time−instrumentation controlsを含むことができる。
【0048】
load run−time−instrumentation controls(LRIC)命令は、ランタイム・インストルメンテーションを制御するランタイム・インストルメンテーション制御を初期化する。modify run−time−instrumentation controls(MRIC)命令は、もともとLRICによって確立されたランタイム・インストルメンテーション制御の全て又はサブセットを変更する。run−time−instrumentation emit(RIEMIT)命令は、汎用レジスタの値を収集バッファ内に格納することにより、これを収集する。run−time−instrumentation next(RINEXT)命令は、RINEXTの後の次の順次命令(NSI)の指向サンプリング(directed sampling)を実施する。run−time−instrumentation off(RIOFF)命令は、ランタイム・インストルメンテーションをディスエーブルにする。run−time−instrumentation on(RION)命令は、ランタイム・インストルメンテーションをイネーブルにする。store run−time−instrumentation controls(STRIC)命令は、ランタイム・インストルメンテーション制御の現在の値を指定されたストレージ位置に入れる。test run−time−instrumentation controls(TRIC)命令は、ランタイム・インストルメンテーション制御を検査する。正当な場合、制御変更インジケータの状態が設定される。
【0049】
ランタイム・インストルメンテーション・ファシリティは、測定警報外部割り込みを保留する能力を含む。ランタイム・インストルメンテーションによって収集され、プログラム・バッファに報告される情報の一部はモデル依存であり、従って、定義されない。ランタイム・インストルメンテーション・ファシリティにより与えられるサンプル及びデータは、性能特性の統計的推定を目的としており、実質的に正確であり、繰り返されない場合もある。。例えば、サンプリング・モードに関係なく、例外を発生させた、又は特定のシステムの内部活動と関連付けられたサンプル命令が報告グループのストアをもたらすかどうか、そして、ストアされる場合、ランタイム・インストルメンテーション・データ内に含まれるモデル依存データが影響されるかどうかは、予測不可能である。
【0050】
収集バッファは、プログラム実行中、そのコンテンツがプロセッサにより認識されたイベントについて報告する記録のセットをキャプチャするために用いられる。例として、1又は複数の成立した分岐の実行、トランザクション実行アボートイベント、命令フェッチ・キャッシュミス、データフェッチ又はストア・キャッシュミス、及びRIEMIT命令のオペランドが挙げられる。RIEMIT命令の実行は、汎用レジスタの値を収集バッファ内に格納することにより、これを収集する。付加的なデータを収集すること、及び/又は命令データ・バッファなどの他のバッファに格納することが可能である。
【0051】
報告は、報告制御が適用される。。サンプル命令が識別されると、各々の報告制御は、対応する条件のチェックをイネーブルにする。対応する条件が存在する場合、報告グループが形成され、格納される。報告制御がイネーブルにされないか、又はイネーブルにされた報告制御に関して対応する条件が存在しない場合、報告グループは格納されない。サンプル命令について報告されたデータは、命令データ・バッファ及び他のモデル依存ソースから取得され、その後このデータを用いて報告グループの1つ又は複数の記録のコンテンツを作成するために使用され、1つの上述した記録が命令の記録となる。
【0052】
報告グループ・ストアにキャプチャすることができる記録タイプには:フィラー(filler)、追加(extra)、開始、タイムスタンプ、命令、発行(emit)、TXアボート、呼び出し(call)、リターン(return)、及び転送(transfer)が含まれる。フィラー記録は、収集バッファ内の有正当記録の数が現在の報告グループ・サイズの報告グループを満たすのに十分でない場合に、報告グループにおいて使用される。追加記録は、報告グループの追加セクションにおいて使用することができる。開始記録は、第1の報告グループの最初の記録である。タイムスタンプ記録は、第1の報告グループ以外のあらゆる報告グループの記録0として格納される。命令記録は、サンプル命令に関して報告グループが格納されるときに、報告グループの最後の記録として作成される。発行記録は、RIEMITの実行の成功により作成される。トランザクション実行(TX)モード・アボート記録は、暗黙的アボート、又は、トランザクション・アボート命令の実行によって作成される。呼び出し記録は、呼び出しタイプ分岐命令として分類される分岐命令の実行によって作成される。リターン記録は、リターン・タイプ命令として分類されるリターン・タイプ分岐命令の実行によって作成される。転送記録は、特定の条件コード基準を満たす分岐命令の実行によって作成される。
【0053】
図9は、1つの実施形態において実装することができるプロセッサのランタイム・インストルメンテーションのためのシステムの概略図を示す。1つの実施形態において、システム500は、
図3のプロセッサ106などの中央演算処理ユニット(CPU)を含む。1つの実施形態において、プロセッサ106は、シングル・プロセッサである。代替的な実施形態において、プロセッサ106は、マルチコア・プロセッサの単一の処理コアである。1つの実施形態において、プロセッサ106は、様々な速度で動作し得る。
【0054】
1つの実施形態において、プロセッサ106は、レジスタ510をさらに含む。レジスタ510は、プロセッサ106により使用するためのデータのワード(word)を格納することができるハードウェア・レジスタである。レジスタ510は、プロセッサ106によりアクセスが可能なデータ・ビットを格納するための1又は複数のラッチを含む。レジスタ510は、例えば、汎用レジスタ及び制御レジスタを含むことができる。プロセッサ106は、レジスタ510と通信するインストルメンテーション・モジュール506をさらに含む。インストルメンテーション・モジュール506は、プロセッサ106のインストルメンテーションを制御する処理回路である。インストルメンテーション・モジュール506は、1つ又は複数の成立した分岐の実行経路、トランザクション実行アボート・イベント、種々のランタイム・オペランド、タイムスタンプ情報等といったインストルメンテーション・データを、プロセッサ106から直接収集するように構成される。インストルメンテーション・モジュール506は、プロセッサ106からインストルメンテーション・データを収集し、そのインストルメンテーション・データを収集バッファ508に格納する。1つの実施形態において、収集バッファ508は、インストルメンテーション・モジュール506から受け取ったデータを収集する循環バッファ(circular buffer)であり、循環バッファが満たされると、この循環バッファは、最も古いデータを新しいデータで上書きする。
【0055】
プロセッサ106は、1つ又は複数のオペレーティング・システム516及び1つ又は複数のアプリケーション518を実行する。1つ又は複数のオペレーティング・システム516及び1つ又は複数のアプリケーション518は、ハードドライブ、CD/ROM、フラッシュ・メモリ等のようなストレージ520内に格納され、必要に応じてストレージ520から、ページと呼ばれ、必要に応じてストレージ520からランタイム・メモリ504へとロードされる現在実行されているオペレーティング・システム及び/又はアプリケーションの1つ又は複数のアクティブな部分を格納するために予約された主メモリ514のランタイム・メモリ504領域にロードされる。1つの実施形態において、オペレーティング・システムの各々は、ハイパーバイザ(図示せず)によって管理され、且つ、プロセッサ106により実行される仮想マシンとして実行される。
【0056】
1つの実施形態において、プロセッサ106は、主メモリ514から、現在実行されているオペレーティング・システム又はアプリケーションに関する主メモリ514内のPSWデータからのPSWをレジスタ510にロードし、例えばレジスタ510において、1つ又は複数のプロセッサ106の設定を設定する。1つの実施形態において、レジスタ510内のPSWは、インストルメンテーション・モジュール506をイネーブルにし、制御するための1又は複数のビットを含む。
【0057】
1つ又は複数のアプリケーション518は、特定のオペレーティング・システム上で実行されるようにコンパイルされたソフトウェア・アプリケーション、インタープリタ(例えば、Java(登録商標))上で実行される解釈済みコード、又はオペレーティング・システム・サポート・スレッド(例えば、プロセス管理、デーモン等)を含む。1つ又は複数のオペレーティング・システム516、及び/又は、1つ又は複数のアプリケーション518の各々は、インストルメンテーション・モジュール506をトリガして、インストルメンテーション・データの収集を開始又は停止するための命令を実行することができる。
【0058】
1つの実施形態において、1つ又は複数のアプリケーション518の1つは、サンプル命令であると判断された命令を実行してサンプル命令の実行の完了時にサンプル・ポイントを作成し、インストルメンテーション・モジュール506が、収集バッファ508からのアプリケーションの収集データを、アプリケーションがアクセス可能な主メモリ514内のプログラム・バッファ522に移動される。主メモリ514は、当技術分野において周知の任意のアドレス指定可能メモリとすることができる。1つの実施形態において、主メモリ514は、キャッシュと呼ばれることもある、高速アクセス・バッファ・ストレージを含むことができる。各CPUは、関連したキャッシュを有することができる。付加的な実施形態において、主メモリ514は、ダイナミック・ランダム・アクセス・メモリ(DRAM)である。さらに別の実施形態において、主メモリは、コンピュータのハードドライブ、又はアプリケーションによりアクセス可能なフラッシュ・メモリなどのストレージ・デバイスである。
【0059】
ランタイム・インストルメンテーション制御を構成するために、プロセッサ106は、load run−time instrumentation controls(LRIC)命令をサポートする。本明細書でさらに説明される特定のLRICフィールドを超えて、他の機能をサポートするために、付加的なフィールドを定めることができることが理解されるであろう。LRIC命令は、ランタイム・インストルメンテーションをロードし、最初に構成するために使用することができ、且つ、
図9のインストルメンテーション・・モジュール506によりサポートされる。1つの実施形態において、ランタイム・インストルメンテーション・モジュール506とも呼ばれるインストルメンテーション・モジュール506は、ランタイム・インストルメンテーション制御及び報告制御を実施する。ランタイム・インストルメンテーション制御の現在の状態は、store run−time controls(STRIC)命令を用いて、
図9のレジスタ510から主メモリ514に格納することができる。本明細書において、LRIC命令のオペランドとしてロード可能な制御ブロックの種々のフィールドの定義は、ランタイム・インストルメンテーション制御の対応する値の状態を参照するためにも用いられる。
【0060】
図10は、1つの実施形態における、特権状態により設定可能な制御を含むランタイム・インストルメンテーション制御制御ブロック(RICCB)の一部を示す。制御ブロック部分600は、
図10を参照して説明されるもの以外の付加的な値を含むことができる。LRIC命令により、制御ブロック部分600に対する変更を実施することができる。
【0061】
制御ブロック部分は、妥当性ビット602(Vビット)を含む。妥当性ビット602は、以前にLRIC命令により設定されているので、プロセッサにおけるランタイム・インストルメンテーション制御のセットの妥当性を示す。
【0062】
制御ブロックはまた、低特権状態プログラムがMRIC命令の実行を許可するかどうかを判断するために使用されるSビット604も含む。Kビット606は、低特権状態プログラムが、ランタイム・インストルメンテーション制御の起点アドレス及び制限アドレスなどのランタイム・インストルメンテーション制御に関して、準特権状態での実行が許可されるかどうかを示す。Hビット608は、アドレス制御(即ち、起点アドレス、制限アドレス、及び現在のアドレス)が一次仮想アドレス空間を参照するか又はホーム仮想アドレス空間を参照するかを判断する。Oビット610は無視され、0として扱われる。
【0063】
低特権状態サンプル報告制御ビット612(Psビット)は、低特権状態プログラムと併せて使用される。低特権状態において、ランタイム・インストルメンテーション制御内のPsビット612がゼロである場合、ランタイム・インストルメンテーションがイネーブルにされているときには、ランタイム・インストルメンテーション制御の報告制御は無視され、従って、報告グループは格納されない。低特権状態にあり、ランタイム・インストルメンテーション制御のPsビット612が1である場合、報告制御がチェックされ、その定められた機能に従って使用される。
【0064】
スーパーバイザ状態サンプル報告制御ビット614(Qsビット)は、スーパーバイザ状態プログラムと併せて使用される。スーパーバイザ状態において、ランタイム・インストルメンテーション制御のQsビット614がゼロである場合、ランタイム・インストルメンテーションがイネーブルにされているとき、ランタイム・インストルメンテーション制御の報告制御は無視され、従って、報告グループは格納されない。スーパーバイザ状態において、ランタイム・インストルメンテーション制御のQsビット614が1である場合、報告制御がチェックされ、その定められた機能に従って使用される。
【0065】
低特権状態収集バッファ制御ビット616(Pcビット)は、
図9の収集バッファ508に対する更新を制御する。低特権状態において、ランタイム・インストルメンテーション制御のPcビット616がゼロである場合、ランタイム・インストルメンテーションがイネーブルにされているとき、ランタイム・インストルメンテーション制御の収集バッファ制御は無視され、収集バッファ508の更新が防止される。低特権状態において、ランタイム・インストルメンテーション制御のPcビット616が1である場合、収集バッファ制御がチェックされ、その定められた機能に従って使用される。
【0066】
スーパーバイザ状態収集バッファ制御ビット618(Qcビット)は、収集バッファ508に対する更新を制御する。スーパーバイザ状態において、ランタイム・インストルメンテーション制御内のQcビット618がゼロである場合、ランタイム・インストルメンテーションがイネーブルにされているときには、ランタイム・インストルメンテーション制御の収集バッファ制御は無視され、収集バッファ508の更新は防止される。スーパーバイザ状態において、ランタイム・インストルメンテーション制御内のQcビット618が1である場合、収集バッファ制御がチェックされ、その定められた機能に従って使用される。
【0067】
Gビット620は、割り込み停止(halted interruption)とも呼ばれるランタイム・インストルメンテーションの割り込み停止の保留制御である。Gビット620がゼロである場合、割り込み停止は保留中でない。Gビット620が1である場合、割り込み停止は保留中である。プログラム・バッファ522内の第1の報告グループが書き込まれると、Gビット620はゼロに設定される。つまり、ランタイム・インストルメンテーション・プログラム・バッファ起点アドレス(ROA)702が、
図11のランタイム・インストルメンテーション・プログラム・バッファ現在アドレス(RCA)706に等しい場合、Gビット620はゼロに設定される。プログラム・バッファ522内の第1の報告グループ以外のストアが試行されたとき、ランタイム・インストルメンテーション停止条件が存在しない場合には、Gビット620がゼロに設定され、報告グループが格納される。プログラム・バッファ522内の第1の報告グループ以外のストアが試行されたとき、ランタイム・インストルメンテーション停止条件が存在する場合には、Gビット620が1に設定され、報告グループは格納されない。
【0068】
Uビット622は、バッファ・フル割り込み(buffer-full interruption)及び割り込み停止に対するイネーブルメント制御である。Uビット622がゼロであるとき、割り込み要求の生成がディスエーブルにされ、保留中の場合は、保留中のままである。
【0069】
Lビット624は、バッファ・フル割り込みの保留制御である。Lビット624がゼロである場合、バッファ・フル割り込みは保留中でない。Lビット624が1である場合、バッファ・フル割り込みは保留中である。
【0070】
キー・フィールド926は、その値が報告グループのストアのためのストレージ保護キーとして使用される、4ビットの符号なし整数である。ストレージ・キーがストレージ・アクセス要求と関連したアクセス・キーと一致する場合にのみ、報告グループのストアが許可され、フェッチは、ストレージ・キーがアクセス・キーと一致する場合又はストレージ・キーのフェッチ保護ビットがゼロである場合のみ許可される。ストレージ・キーの4つのアクセス制御ビットがアクセス・キーと等しい場合、又はアクセス・キーがゼロである場合、キーが一致する。
【0071】
図11は、MRICが準特権モードでの実行が許可される(即ち、Kビットが1である)場合のRICCB制御ブロックの一部を示す。制御ブロック700は、ランタイム・インストルメンテーション制御の初期化のためのLRIC命令のオペランドとすることもできる。制御ブロック700は、
図11を参照して説明されるもの以外の付加的な値を含むことができる。1つの実施形態において、低特権状態プログラムにより、他の指定がないMRIC命令オペランドのセクションにアクセスすることはできない。準特権モードが許可される場合、ランタイム・インストルメンテーション起点アドレス(ROA)702及びランタイム・インストルメンテーション・プログラム・バッファ制限アドレス(RLA)704は、低特権状態プログラムにより、MRIC命令を用いて設定される。ROA702は、
図9のプログラム・バッファ522の最初のバイトの位置である。RLA704は、プログラム・バッファ522の最後のバイトの位置を示す。
【0072】
1つの実施形態において、ランタイム・インストルメンテーション・プログラム・バッファ現在アドレス(RCA)706は、MRIC命令により更新することができる。RCA706は、ストアされる次の報告グループのプログラム・バッファ522の位置である。RCA706は、報告グループ・サイズ・フィールド744(RGSフィールド)を検査し、プログラム・バッファ522のアドレスの形成に使用する有効ビット数の位置に影響を与える。64ビットRCA706は、ワード0、ワード1の26−RGSのビット位置0、及びRGSの右に付加する5つの2進数ゼロである。これが、プログラム・バッファ522内に格納されることになる後続の報告グループの、
図9のプログラム・バッファ522における開始位置である。報告グループは、インストルメンテーション・モジュール506により作成され、後にプログラム・バッファ522内に格納される情報の単位である。1つの実施形態において、RCA706により指定されるRGSフィールド744は、ランタイム・インストルメンテーション制御の現在の報告グループ・サイズと等しくない(即ち、RCA706がRGSフィールド744を変更する)場合、RCA706は、ROA702に設定される。
【0073】
残りのサンプル間隔カウント・フィールド742(RSICフィールド)は、MRIC命令を用いて低特権プログラムにより更新することができる。RSICフィールド742は、残りのサンプル間隔カウントを示す、64ビットの符号なし整数を含む。ランタイム・インストルメンテーション制御内のRSICフィールド742の値がゼロであるか又はスケーリング・ファクタ・フィールド740(SFフィールド)内の値に等しく、且つ、ランタイム・インストルメンテーションがイネーブルにされている場合、次のサンプル間隔は、サンプリング・モード708(M)及びSFフィールド740の値に基づいた全間隔(full interval)である。RSICフィールド742が非ゼロであり、SFフィールド740を下回り、且つ、ランタイム・インストルメンテーションがイネーブルにされている場合、次のサンプル間隔は、部分的な間隔である。RSICフィールド742が非ゼロであり、SFフィールド740の値を上回り、且つ、ランタイム・インストルメンテーションがイネーブルにされている場合、次のサンプル間隔は延長した間隔である。延長した間隔が期間満了すると、次の間隔は、SFフィールド740の値に基づく。RSICフィールド742が非ゼロの値に設定されると、このRSICフィールド742は、SFフィールド740も対象となる同じモデル依存の最大限度が適用される。。RSICフィールド742のオリジナル値がゼロである場合、LRIC命令及びMRIC命令の実行中、サンプリング・モードは、RSICフィールド742がSFフィールド740内の値に設定されるか否か、又は、ランタイム・インストルメンテーションがイネーブルにされるまで、RSICフィールド742が引き続きゼロとして表示されるか否かを示す。
【0074】
SFフィールド740は、その値がスケーリング・ファクタのカウント単位である、64ビットの符号なし整数を含む。単位の大きさは、モード・フィールド708(Mフィールド)から判断される。RSICフィールド742内の値がゼロである場合、SFフィールド740は、現在の命令がサンプル命令として認識される、ゼロまでデクリメントされるRSICフィールド742の初期値を与え、間隔カウントは、SFフィールド740の値からリフレッシュされる。SFフィールド740の有効値は、1から2
64−1までの範囲内にある。ゼロが指定される場合、1の値が推定される。しかしながら、各モデルはSFフィールド740の最小値及び最大値の両方を有し得る。最小値及び最大値はまた、モード・フィールド708に基づいて異なり得る。最小値を下回る値が指定される場合、モデル依存の最小値がロードされる。最大値を上回る値が指定される場合、モデル依存の最大値がロードされる。
【0075】
DC制御フィールド736は、その値がデータフェッチ又はストアのキャッシュミスと関連したキャッシュ待ち時間(cash-latency)レベルを指し示す、4ビットの符号なし整数である。つまり、サンプル命令がデータ・アクセス・キャッシュ・ミスに遭遇した。別のランタイム・インストルメンテーション制御により禁止されない限り、DC制御フィールド736の値により指し示されるレベルを数値的に上回るか又はこれに等しいキャッシュ待ち時間レベルとなることでミスと認識されるデータ・アクセスを含むサンプル命令を表す報告グループの格納が試みられる。。データ・アクセスに関するキャッシュ構造及びキャッシュ待ち時間レベルは、モデル依存である。複数の又は長いオペランドを用いる命令については、もしあれば、どのオペランド・アクセスが報告制御に用いられるかは、モデル依存である。モデル依存の挙動は、DC制御フィールド736の値を無視することがあり、従って、この値は、報告グループのストアのために使用しない。
【0076】
ICフィールド734は、その値が命令フェッチのキャッシュミスと関連したキャッシュ待ち時間レベルを指し示す、4ビットの符号なし整数である。つまり、サンプル命令のフェッチが命令フェッチ・キャッシュミスに遭遇した。ICフィールド734及びDC制御フィールド736の両方について、キャッシュ待ち時間レベルは、観察しているプロセッサから特定のキャッシュ・レベル・アクセスまでの距離の抽象化である。待ち時間レベルは、プロセッサと、主ストレージとの間のネスト化されたキャッシュ・レベルの量と、上述したキャッシュ・レベルが複数のプロセッサ間でどのように共有されるかの組み合わせに依存する。より大きい待ち時間レベルは、一般に、より時間のかかるアクセスに対応する。ICフィールド734及びDC制御フィールド736内の値は、キャッシュ待ち時間レベルのゼロ起点を示すもの考えることができる。例えば、ゼロの値は、L1キャッシュ(即ち、プロセッサに最も近いキャッシュ)に対応する。従って、1の値は、L2キャッシュ、又は、幾つかのマシンにおいてはL1.5キャッシュとして知られ得る次のキャッシュ層である。2−15の値は、主メモリに到達するまでの付加的なキャッシュ待ち時間層の論理的進行を示すが、主メモリ自体は含まない。一般に、キャッシュ構造は、15の層の深さには至らない。従って、ICフィールド734及びDC制御フィールド736内の15の値は、特別な場合と解釈され、命令フェッチ又はデータ・アクセスにおけるキャッシュミスは、それぞれ、キャッシュ待ち時間レベルに関係なく、報告グループのストア目的では認識されないことを意味する。別のランタイム・インストルメンテーション制御により禁止されない限り、そのフェッチにより、ICフィールド1034の値により指し示されるレベルを数値的に上回るか、又はこれに等しいキャッシュ待ち時間レベルでミスが認識されたサンプル命令を表す報告グループのストアが試みられる。命令フェッチに関するキャッシュ構造及びキャッシュ待ち時間レベルは、モデル依存である。モデル依存の挙動は、ICフィールド734の値を無視することがあり、従って、この値を、報告グループのストアのために使用しない。
【0077】
キャッシュ待ち時間レベル・オーバーライド報告制御ビット732(Fビット)は、非分岐命令及び非分岐予測制御のためのものである。ランタイム・インストルメンテーション制御内のFビット732がゼロである場合、ランタイム・インストルメンテーション制御のキャッシュ報告制御(ICフィールド734及びDC制御フィールド736)がチェックされ、その定められた機能に従って使用される。ランタイム・インストルメンテーション制御の分岐予測制御(BPxnビット722、BPxtビット724、BPtiビット726、及びBPniビット728)がチェックされ、その定められた機能に従って使用される。Fビット732が1である場合、別の制御によって禁止されない限り、これらの同じ制御が無視され、報告グループが格納される。
【0078】
データ・キャッシュミス制御ビット730(Dビット)は、報告グループを格納するかどうかを示す。Dビット730が1である場合、追加タイプ記録を、サンプル命令についてのモデル依存データを含む報告グループの追加セクションに入れても良いし、又は入れなくても良い。
【0079】
MRIC命令は、分岐予測(BP)報告制御(BPxn722、BPxt724、BPti726、及びBPni728)を含む。ランタイム・インストルメンテーション制御内のBP報告制御ビットがゼロである場合、対応する条件はチェックされない。BP報告制御ビットが1であり、対応する分岐予測条件が存在する場合、報告グループが格納される。
【0080】
BPxnビット722は、1であるとき、分岐予測情報のチェックをイネーブルにする。従って、サンプル分岐が成立すると誤って予測されたが成立しなかった場合、報告グループが格納される。
【0081】
BPxtビット724は、1であるとき、分岐予測情報のチェックをイネーブルにする。従って、サンプル分岐が成立しないと誤って予測されたが成立した場合、報告グループが格納される。
【0082】
BPtiビット726は、1であるとき、分岐予測情報のチェックをイネーブルにする。従って、サンプル分岐が成立すると正しく予測され、分岐が成立したが、分岐ターゲットが誤って予測された場合、報告グループが格納される。
【0083】
BPniビット728は、1である場合、分岐予測情報のチェックをイネーブルにする。従って、サンプル分岐が成立しないと正しく予測され、分岐が成立せず、且つ、分岐ターゲットが誤って予測された場合、報告グループが格納される。
【0084】
トランザクション実行モード記録ビット720(Xビット)のイネーブルメント制御は、トランザクション実行モード・アボート記録の収集を制御する。ランタイム・インストルメンテーション制御内のXビット720がゼロであるとき、トランザクション実行モード・アボート記録は収集されない。Xビット1020が1であるとき、トランザクション実行モード・アボート記録が収集され、
図9の収集バッファ508に入れられる。モデルにトランザクション実行ファシリティがインストールされていない場合、Xビット720は無視される。
【0085】
RIEMIT命令制御ビット718(Eビット)は、RIEMIT命令の実行を制御する。ランタイム・インストルメンテーションがイネーブルにされるとき、ランタイム・インストルメンテーション制御内のEビット718がゼロであるか、又は無視されてゼロとして扱われる場合、RIEMITは、操作を実行しない。Eビット718が1であり、他の形で無視されない場合、RIEMITはイネーブルにされ、その定められた機能を実行する。
【0086】
Jビット746は、ゼロである場合、branch on condition(BC)命令が、マスク値に関係なく他のタイプの分岐カテゴリ内にあることを指定する。Jビット746が1である場合、15のマスクを指定するBC命令は、リターン・タイプ分岐カテゴリ内にある。BC命令が1−14のマスクを指定する場合、BC命令はJビット1046に影響を受けず、常にその他のタイプの分岐カテゴリ内にある。リターン・タイプ分岐カテゴリ内にある場合、Rビット1016は、
図9の収集バッファ508への包含を制御する。他のタイプの分岐カテゴリ内にある場合、Bビット748が収集バッファ508への取り込みを制御する。他のタイプの分岐カテゴリは、転送タイプ分岐カテゴリとして示すこともできる。
【0087】
命令アドレス・コード・ビット714(Cビット)は、呼び出しタイプ分岐のイネーブルメントを制御する。ランタイム・インストルメンテーション制御内のCビット714が1であり、命令が呼び出しタイプ分岐である場合、収集バッファ508が更新される。呼び出しタイプ分岐とリターン・タイプ分岐の両方のモデル依存検出が組み合わされる場合、Cビット714は両方のタイプに対して動作し、Rビット816は有効でない。
【0088】
Rビット716は、リターン・タイプ分岐のイネーブルメント制御である。ランタイム・インストルメンテーション制御内のRビット716が1であり、命令がリターン・タイプ分岐である場合、収集バッファ508が更新される。
【0089】
Bビット748は、呼び出しタイプ分岐及びリターン・タイプ分岐以外の分岐のイネーブルメント制御である。ランタイム・インストルメンテーション制御内のBビット748が1であり、命令が、ランタイム・インストルメンテーションにより認識される他のタイプの分岐である場合、収集バッファ508が更新される。
【0090】
最大アドレス超過ビット712(MAEビット)は、1に設定された場合、1に設定された命令アドレス・コード(Cフィールド)を有する1つ又は複数の報告グループが格納されたことを示す。ひとたびMAEビット712が1に設定されると、引き続きランタイム・インストルメンテーションの実行は、MAEビット712をゼロに戻すことはない。MAEビット712は、MAEビット712をゼロとして指定するLRIC命令又はMRIC命令の実行によりゼロに設定される。
【0091】
ランタイム・インストルメンテーション・ネクスト(RINEXT)制御ビット710(Nビット)は、サンプル命令の実行を制御する、run−time−instrumentation next命令のイネーブルメントを制御する。ランタイム・インストルメンテーション制御内のNビット710がゼロであるか、又は無視されてゼロとして扱われる場合、RINEXTは、操作を実行しない。Nビット710が1であり、他の形で無視されない場合、RINEXTがイネーブルにされ、その定められた機能を実行する。
【0092】
モード・フィールド708(Mフィールド)は、ランタイム・インストルメンテーション制御内のその値が、ランタイム・インストルメンテーション制御に関するサンプリング・モードを指定する、4ビットの符号なし整数である。サポートされるサンプリング・モードは、CPUサイクルのカウント、命令のカウントに基づくサンプリングを含むことができ、又は、RINEXTなどのサンプル命令に応答してサンプルに指向され得る。
【0093】
報告グループ・サイズ・フィールド744(RGS)は、その値が報告グループの記録(RRG)の数を指定する、3ビットの符号なし整数である。報告グループ内の記録の数は、開始/タイムスタンプ記録及び命令の最後の記録を含む2つの記録から、最大256の記録まで変化し得る。1つの実施形態において、上限は、モデル依存であり得る。報告グループ内に入れられる16バイト記録の数は、2
(RGS+1)である。
【0094】
一次CPU能力抑止制御ビット738(Yビット)及び二次CPU能力抑止制御ビット739(Zビット)は、まとめて抑止制御(suppression control)と呼ばれる。報告グループのストアの抑止とは、ストアが実施されないよう試みることを意味する。構成内の全てのCPUのCPU能力が同じであるとき、抑止制御は有効でなく、抑止は行われない。構成において、あるCPUのCPU能力が別のCPUの能力と異なる場合、抑止制御は有効であり、少なくとも1つのCPUがCPU能力又は一次CPU能力で動作していると言われ、一方、少なくとも1つの他のCPUが二次CPU能力で動作していると言われる。一次CPU能力と二次CPU能力は、異なる動作速度である。Yビット738及びZビット739の両方がゼロであるとき、抑止は行われない。Yビット738がゼロであり、Zビット739が1であるとき、例えばプロセッサ106などのCPUが二次CPU能力で動作している場合、抑止が行われる。Yビット738が1であり、Zビット739がゼロであるとき、例えばプロセッサ106などのCPUが一次CPU能力で動作している場合、抑止が行われる。Yビット738及びZビット739の両方とも1である場合、抑止が行われる。
【0095】
図11の上記のフィールド及びビットは、フィールドの配置及び呼称の一例であり、明確にするために本明細書で与えられている。他の実施形態において、フィールドのサブセットだけを使用してもよいこと、及び、フィールドはいずれの順序又は位置としてもよく、及び/又は、異なる名称で表し得ることが理解されるであろう。
【0096】
ランタイム・インストルメンテーションがインストールされ、イネーブルにされると、多数のイベント及びデータを、収集バッファ508内にキャプチャすることができる。収集バッファ508は、そのコンテンツが、プログラム実行中にプログラム106により認識されたイベントについて報告する、記録のセットをキャプチャするために用いられる。例として、1又は複数の成立した分岐の実行、トランザクション実行アボート・イベント、キャッシュミス、及びrun−time instrumentation emit命令のオペランドが挙げられる。IC制御フィールド734及びDC制御フィールド736は、プログラムが、命令又はデータ・プリフェッチ動作を改善するために何らかの是正アクションを取ることに関連するレベルを設定する。RIEMIT命令の実行は、汎用レジスタの値を収集バッファ508内に格納することにより、これを収集する。付加的なデータを収集し、及び/又はモデル依存サンプル命令データの収集に用いられる命令データ・バッファ(IDB)(図示せず)などの他のバッファに格納し、ランタイム・インストルメンテーション命令記録を構築することができる。
【0097】
収集されたランタイム・インストルメンテーション情報は、サンプリング・ベースで報告される。命令ストリームからの命令がサンプリングされる。サンプリングされた命令は、サンプル命令と呼ばれる。サンプル命令を判断するためのモードの数は、ランタイム・インストルメンテーションがイネーブルにされたとき、以下のように定められる。サイクス・カウント・モードにおいて、カウントは、SF740又はRSIC742のいずれかで指定されたCPUサイクルの数であり、どちらが用いられても、現在の間隔のカウントをもたらす。カウントは、サンプリング・モードと関連したイベントに応答して調整される。例えば、プロセッサ106が動作状態であるとき、カウントをデクリメントすることができる。カウントが、ゼロなどの閾値までデクリメントされると、現在の命令はサンプル命令として認識され、カウントはSF740値に再初期化され、次のサイクルにおいてデクリメントされ始める。サンプル命令の実行が終了すると、適切な場合に、報告が行われる。
【0098】
命令カウント・モードでは、カウントは、SF740又はRSIC742のいずれかにおいて指定され、どちらが用いられても、現在の間隔のカウントをもたらす。単一の操作単位から成る命令については、カウントを調整するために用いられるイベントとして、命令の完了時にカウントがデクリメントされる。カウントがゼロなどの閾値にデクリメントされたとき、命令はサンプル命令である。複数の操作単位から成る命令については、以下の方法の1つでカウントをデクリメントすることができる。:
a.割り込み可能命令については、部分的完了を通じた全ての操作単位が、カウントをデクリメントする1つのカウント単位を表す。
b.割り込み可能命令については、最終的完了を通じた最新の部分的完了以後の全ての操作単位が、カウントをデクリメントする1つのカウント単位を表す。
c.命令のパラメータにより指定される処理のCPU決定の小部分を実施した後に完了する命令については、完了が、カウントをデクリメントする1つのカウント単位を表す。
d.複数の操作単位を実施した後に完了するが、上のカテゴリa−cに入らない命令については、最後の操作単位の完了が、カウントをデクリメントする1つのカウント単位を表す。
命令の何れかのカウント単位についてカウントがゼロにデクリメントされるとき、命令はサンプル命令である。ゼロなどの閾値に達すると、カウントはSF740に再初期化され、上のa−dで説明されるようなカウント・ダウンを始める。カウント・モードの全ての場合において、報告は、適切な場合、サンプル命令の最後の操作単位の完了後に行われる。
【0099】
指向サンプリング・モードにおいて、Nビット710が1であり、RINEXT命令が正常に実行されたとき、指向サンプリングが行われる。サンプル命令は、RINEXT命令後の次の順次命令(NSI)である。次の順次命令が実行タイプ命令である場合、サンプル命令は、実行タイプ命令のターゲット命令である、指向サンプリングは、サイクル・カウント・モード又は命令カウント・モードにあるときに行われる。カウント・サンプリングは、指向サンプリング及びその結果のアクションのいずれかと併せて継続し、カウント・サンプリングから決定されたサンプル命令が試行サンプリングによって決定された同じ命令である場合には2つの報告グループが格納されないことを除いて、他の点で影響を受けない。
【0100】
どんなサンプリング・モードでも、サンプル命令がRIENXT命令の実行によって識別される場合、報告グループが格納される。しかしながら、ランタイム・インストルメンテーション制御Y738、Z739、Qs614及びPs612は、引き続き有効である。
【0101】
サイクル・カウント・サンプリング及び命令カウント・サンプリングは、それぞれ、内部システム・イベント及び例外条件に基づいた変動量をもたらす適切な間隔を判断する。カウント・ダウンは、ランタイム・インストルメンテーションがディスエーブルからイネーブルに移行したときに始まる。指向サンプリングは、RINEXTの完了とNSIの間に挿入され得るあらゆるイベントに応じて、変動量がより少ない。割り込みは、もはやNSIばかりではなく、NSIであると考えられたものを生じさせることができることを指摘する。
【0102】
サンプリングは、モードに関係なく、サンプル命令を識別する。ひとたびサンプル命令が識別されると、サンプル命令の実行の完了時に収集が停止し、報告が始まる。報告を制御する種々の報告制御が、次いで適用される。報告グループのストアが保留中にされたときに収集が再開する。
【0103】
トランザクション実行モードにないとき、サンプル命令の実行の完了時に、報告グループのストアは保留中になる。トランザクション実行モードにあるとき、サンプル命令の実行の完了時に、報告グループのストアは、トランザクションが終了するまで遅らせられ、次いで保留中になる。報告グループのストアが遅らせられたとき又は保留中のとき、以下の:1)プログラム割り込み、2)緊急マシン・チェック割り込み、3)再起動割り込み、及び4)スーパーバイザ・コール割り込み、のいずれかが認識される場合、報告グループをパージすることができる。
【0104】
いずれの保留中のI/O割り込み、外部割り込み、及び抑止できるマシン・チェック割り込みも、報告グループが格納されるか、又は報告グループが格納されないとランタイム・インストルメンテーション制御が判断するまで、保留中のままである。
【0105】
各モードが、異なる報告制御のセットを可能にすることも又はしないこともある。サンプリング・モードは、命令カウント又はサイクル・カウントのいずれかであるが、指向サンプリングも使用され、複数のサンプリング方法により同じサンプル命令を識別することも可能である、このことが起こり、使用される報告制御がサンプリング・モードに応じて異なる場合、指向サンプリングと関連した報告制御が適用される。
【0106】
発生し得る非同期型及び非要求型システム・イベントのために、特定の命令をサンプリングすることを意図した間隔の正確な判断は、通常、実現可能でない。代わりに、RINEXT命令を用いて、サンプル命令をより詳細に指定することができる。
【0107】
サイクル・カウント・モード又は命令カウント・モードにあるとき、命令カウント又はサイクル・カウント・サンプリングから識別されたサンプル命令に接近しすぎた状態で、RINEXT命令を発行することができる。関連した報告グループのコンテンツは、サンプル命令がRINEXT命令のNSIとして識別されたかのようであり、且つ、サンプル命令のサイクル・カウント又は命令カウント識別が適用されなかったかのようである。
【0108】
RINEXTの実行は、以下の例外条件のいずれか1つ又は複数が満たされた場合、ノーオペレーション(non-operation)として実行することができる。:即ち、
1.ランタイム・インストルメンテーション制御が有効でない。
2.問題状態において、現在のランタイム・インストルメンテーション制御のPs612がゼロであり、問題状態の報告が許容されないことを示す。
3.スーパーバイザ状態において、現在のランタイム・インストルメンテーション制御のQs614がゼロであり、スーパーバイザ状態の報告が許容されないことを示す。
4.現在のランタイム・インストルメンテーション制御のNビット710がゼロであり、RINEXT命令自体が許容されないことを示す。
5.ストレージが抑止される。
6.現PSW内のフィールドが、ランタイム・インストルメンテーションがディスエーブルにされていることを示す。
7.モデル依存の閾値を超過する。ある期間にRINEXTが発行された回数が、モデル依存の限界を超過した。
8.プログラム・バッファ・フル条件が存在する。
9.ランタイム・インストルメンテーション停止条件が存在する。
10.次の順次命令がstart interpretive execution(解釈実行開始)命令である。
11.次の順次命令がsuperviosr call(スーパーバイザ呼び出し)命令である。
【0109】
図12を参照すると、収集バッファ508の1つの実施形態が、一般的に示される。前述のように、プログラム実行中にランタイム・インストルメンテーションがイネーブルにされると、ランタイム・インストルメンテーション・データが、プロセッサ106内に収集される。1つの実施形態において、データがプロセッサ106内に収集される場所は、収集バッファ508であり、随意的には命令データ・バッファである。1つの実施形態において、収集バッファ508は、収集された最新の記録を保存するために使用されるプロセッサ106の内部バッファである。サンプル・トリガ・ポイントが検出されると、記録は、プログラム・バッファ522に書き込まれた報告グループの一部として、収集バッファ508からプログラム・バッファ522にコピーされる。1つの実施形態において、記録は、収集バッファ508から非破壊的方法でコピーされる。
【0110】
収集バッファ508は、これがプロセッサ内に配置され、且つ、1つの実施形態においては、命令アドレス802及び所定のイベントのイベント・メタデータ804を格納するためのレジスタ対のアレイとして実装されるので、「ハードウェア収集バッファ」と呼ぶことができる。1つの実施形態において、命令データ・バッファは、レジスタ対のアレイによっても実装される。イベントの一例は、分岐の成立であり、そこでレジスタ対は分岐の命令アドレスを保持することができ、メタデータは分岐のターゲット並びに分岐の挙動履歴(historic behavior)に関する情報を保持することができる。1つの実施形態においては、レジスタ対が順序付けられ、命令ストリーム内でイベントが発生したときに連続的に更新される。カウンタは、アレイ内の最後に更新されたエントリのインデックスを示すように維持される。1つの実施形態において、収集バッファ508は循環バッファであり、収集バッファ508が一杯になると、次のイベントがアレイ内の最初のエントリを上書きし、後続のイベントにおいて、アレイのレジスタ対の連続的更新が再開する。従って、アレイCB[0]乃至CB[N−1]及び最新の更新インデックスを示すカウンタiを仮定すると、キャプチャされたイベントのトレースは、シーケンスCB[i]、CB[i−1]...CB[1]、CB[0]、CB[N−1]、CB[N−2]...CB[i+1]で表される。別の実施形態においては、バッファ内の最も古いエントリを指し示すヘッド・ポインタ、及び、バッファ内の最も新しいエントリを指し示すテール/現在ポインタの2つのポインタが使用される。
【0111】
任意の所定の実行点でのプロセッサ106の状態を表すイベントが、収集バッファ508内に連続的にキャプチャされる。収集バッファ508は、そのコンテンツが、プログラム実行中にプロセッサ106により認識されるイベント(例えば、1つ又は複数の成立した分岐の実行、トランザクション実行アボート・イベント、RIEMIT命令のオペランド等)に関して報告する記録のセットをキャプチャするために使用される。1つの実施形態において、認識されるイベントは、
図11に示されるRICCBのコンテンツによって決まる。
図12に示される収集バッファ508の実施形態におけるエントリは、イベント命令アドレス802と、他の関連するイベント・メタデータ804とを含む。イベント・メタデータ804の例として、これらに限定されるものではないが、成立した分岐の命令アドレス及びその分岐の挙動履歴についての何らかの情報を含むそのターゲット;RIEMIT命令の命令アドレス及びそれぞれのレジスタ値;並びに、トランザクション・アボート命令のアドレス及びそれぞれのトランザクション復元エントリ・ポイントが挙げられる。
【0112】
図12に示される収集バッファ508の実施形態は、最大32個までのエントリ(即ち、32のイベントについての情報)を格納することができ、各命令アドレス802は64のビット(例えば、ビット0:63)により指定され、イベント・メタデータ804は64ビット(例えば、ビット64:127)により指定される。収集バッファのサイズ(R
CB)は、記録の数を表すモデル依存のカウントである。
図12に示される収集バッファ508の実施形態において、収集バッファのバイト・サイズは、16バイトの記録サイズの倍数である。1つの実施形態において、収集バッファのサイズは、モデルの最大報告グループのカウント(R
RG)と、収集バッファから取得されない報告グループの記録のカウント(R
NC)との間の差を上回るか又はこれに等しい記録の数である。従って、1つの実施形態において、収集バッファのサイズは、
【数1】
のように表される。
【0113】
1つの実施形態において、収集バッファ508及び命令データ・バッファのコンテンツは(一方が使用される場合)、以下のイベントによって、パージされる又は他の形で影響を受ける。:即ち(1)割り込み、(2)ランタイム・インストルメンテーション・ファシリティをオン又はオフにするPSWビット(例えば、ビット24)の1からゼロへの変更、及び(3)ランタイム・インストルメンテーション・ファシリティがトランザクション実行モードであるときにサンプル命令が識別された場合(この場合、収集バッファ508及び命令データ・バッファの更なる更新は停止し、トランザクション終了時に再開し、この時点では、報告グループのストアは保留中であり、収集バッファ508及び命令データ・バッファはパージされる)。
【0114】
図2に示されるエミュレートされたホスト・コンピュータ・システムのような1つの実施形態において、収集バッファ508は、レジスタ及び/又はメモリを用いて実装される。この実施形態において、随意的な命令データ・バッファもまた、存在する場合には、レジスタ及び/又はメモリを用いて実装される。
【0115】
実施形態において、付加的な能力は、データ収集に影響を与えることがあり、且つ、前述した規則的な命令カウント又はサイクル・カウントのサンプリングを実質的に妨げずに、付加的なデータ収集ポイントをもたらすと考えることができる。これらには、収集バッファ508内に汎用レジスタの値を格納することにより、その値を収集するRIEMIT命令の実行が含まれる。さらに、前述したランタイム・インストルメンテーション制御内のデータ収集制御ビットを用いて、収集したデータのタイプをカスタマイズすることができる(例えば、E、C、R及びB制御ビット)。このように、収集したデータ・タイプは、プログラム可能である。
【0116】
1つの実施形態において、ランタイム・インストルメンテーション命令の記録を構築するために使用されるモデル依存のサンプル命令データを収集するために、命令データ・バッファが実装される。命令データ・バッファは、命令がサンプル命令として識別されたときに利用可能になると予期して、命令からデータを収集する。1つの実施形態において、命令データ・バッファは、サンプル・ポイントとしてトリガになる命令についての情報が保存される、プログラム内のハードウェア・バッファ/ストレージ位置であるので、ログアウト・プロセス中、情報を収集バッファ508からデータと共に書き出すことができる。収集バッファ508と同様に、命令データ・バッファは、命令アドレス、及びその命令と関連したメタデータを含む。命令データ・バッファ内のメタデータは、多くの場合、マシンに依存し、これらに限定されるものではないが、キャッシュミス関連情報、及び分岐予測関連情報を含むことができる。
【0117】
実施形態によれば、収集される他のデータは、収集バッファ508からのものでないことも、又は命令データ・バッファからのものでないこともある。例として、以下の部分::即ち、(1)報告グループの最初の記録:タイムスタンプ又は開始記録、及び(2)あらゆる報告グループに関して作成することができ、従って、収集バッファ508内に格納することができる付加的なタイプの記録を形成すために使用されるデータが挙げられ、これらの記録は、存在する場合、報告グループの追加又はマシン依存セクションに入れることができる。これらの記録は、本明細書では「システム情報記録」と呼ばれる。
【0118】
図13は、サンプル点においてプログラム・バッファ522に格納された報告グループ900の高レベルの例を示す。記録内の報告グループのサイズは、2
(RGS+1)に等しいR
RGで表され、ここで、RGSは、指数としての報告グループ・サイズである。収集バッファ508以外の位置からコピーされた記録のモデル依存数(R
NC)は、報告グループで使用されるとき、非破壊的にコピーされても又はされなくてもよい。
図13の例において、R
RG=8、R
GS=2、及びR
NC=4である。
図13に示される例示的な報告グループ900は、ヘッダ・セクション902、本体セクション904、追加記録セクション906、及びフッタ・セクション908を含む。
【0119】
ヘッダ・セクション902は、状態情報、追跡情報、及び/又はタイミング情報を保持するための開始記録又はタイムスタンプ記録を含むことができる。開始記録は、プログラム・バッファに格納された第1の報告グループに関するヘッダ・セクション902内に格納される(即ち、RCA706がROA702に等しいとき)。1つの実施形態において、開始記録は、「02」の記録タイプ・フィールドと、現在幾つの報告グループがプログラム・バッファに格納されているかを示すための報告グループ数(NRG)フィールドと、報告グループのサイズを示すためのRGSフィールドと、プログラム・バッファ522が一杯であるかどうかを示すための停止(S:stopped)フィールドと、ランタイム・インストルメンテーションが停止されたかどうかを示すための停止(H:halted)フィールドと、いつ開始記録が書き込まれたかを示すための時刻(TOD)クロック・フィールドとを含む。1つの実施形態において、開始記録内のフィールドの少なくとも1つのサブセットが、RI制御ブロック(例えば、RICCB)から調達される。タイムスタンプ記録の1つの実施形態は、「03」の記録タイプを有し、その記録がいつ格納されたかを示すためのTODクロック・フィールドを含む。1つの実施形態において、タイムスタンプ記録は、第1の報告グループ以外の報告グループの各々についてのヘッダ・セクション902内に格納される。
【0120】
報告グループの本体セクション904は、収集バッファ508からサンプリングされたイベント及び情報に関する種々の記録を含むことができる。イベント及び情報は、例えば、発行命令、トランザクション実行アボート、呼び出し、リターン、分岐、及びフィラーによってキャプチャされた状態情報を表すことができる。
【0121】
1つの実施形態において、発行記録は、RIEMIT命令の正常な実行時に作成され、収集バッファ508に格納される。発行記録の1つの実施形態は、「10」の記録タイプ・フィールドと、発行記録において、現PSWの命令アドレス・ビット位置がどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレッシング・モード(例えば、64ビット、31ビット、又は24ビット)に応じて変わり、且つ、RIEMIT命令のアドレス、若しくはRIEMITが実行タイプ命令のターゲットであった場合には実行タイプ命令の命令アドレスを含む命令アドレス・フィールドと、RIEMIT命令により指定される汎用レジスタからのデータを格納するための発行データ・フィールドとを含む。
【0122】
1つの実施形態において、トランザクション実行アボート記録が、暗黙的アボートにより、又はトランザクション・アボート命令の実行により作成され、収集バッファ508に格納される。アボート記録の1つの実施形態は、「11」の記録タイプ・フィールドと、トランザクション実行アボート記録において現PSWの命令アドレス・ビット位置がどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレッシング・モード(例えば、64ビット、31ビット、又は24ビット)に応じて変わり、且つ、アボートされる命令のアドレス、若しくはアボートされる命令が実行タイプ命令のターゲットであった場合には実行タイプ命令の命令アドレスを含む命令アドレス・フィールドと、アボートと関連したいずれかのモデル依存データに関するフィールドとを含む。
【0123】
1つの実施形態において、呼び出し記録は、R2フィールドが非ゼロであるときのBRANCH AND SAVE(BASR)、BRANCH AND SAVE(BAS)、BRANCH RELATIVE AND SAVE LONG、BRANCH RELATIVE AND SAVE、R2フィールドが非ゼロであるときのBRANCH AND LINK(BALR)、BRANCH AND LINK(BAL)、及びR2フィールドが非ゼロであるときのBRANCH AND SAVE AND SET MODEなどの呼び出しタイプ分岐命令の実行によって作成される。呼び出し記録の1つの実施形態は、「12」の記録タイプ・フィールドと、呼び出し記録において現PSWの命令アドレス・ビット位置がどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレッシング・モード(例えば、64ビット、31ビット、又は24ビット)に応じて変わり、且つ、分岐命令のアドレス、若しくは分岐命令が実行タイプ命令のターゲットであった場合には実行タイプ命令の命令アドレスを含む命令アドレス・フィールドと、分岐が正しく予測されたかどうかを示すための正常動作(well-behaved)フィールドと、分岐ターゲット・アドレス(「呼び出された位置」とも呼ばれる)を含むターゲット・アドレス・フィールドとを含む。
【0124】
リターン記録及び転送記録は、呼び出し記録と同じフォーマットを有することができる。1つの実施形態において、リターン記録は、「13」の記録タイプ・フィールドを有し、R2フィールドが非ゼロであり、マスクが15であるときのBRANCH ON CONDITION(BCR)などのリターン・タイプ分岐命令の実行によって作成される。リターン記録に関して、命令アドレス・フィールドは、分岐命令のアドレス、又は分岐が実行タイプ命令のターゲットである場合には実行タイプ命令のアドレスを含み、ターゲット・アドレス・フィールドはリターン位置を含む。
【0125】
1つの実施形態において、転送記録は、「14」の記録タイプ・フィールドを有し、a.R2フィールドが非ゼロであり、且つ、マスクが1−14の範囲内にあるときのBRANCH ON CONDITION(BCR);b.Jビットがゼロであるか又はマスクが1−14の範囲内にあるときのBRANCH ON CONDITION(BC);c.BRANCH ON COUNT(BCT、BCTR、BCTG、BCTGR);d.BRANCH ON INDEX HIGH(BXH、BXHG);e.BRANCH ON INDEX LOW OR EQUAL(BXLE,BXLEG);f.BRANCH RELATIVE ON CONDITION(BRC);g.BRANCH RELATIVE ON CONDITION LONG(BRCL);h.BRANCH RELATIVE ON COUNT(BRCT,BRCTG);i.BRANCH RELATIVE ON COUNT HIGH(BRCTH);j.BRANCH RELATIVE ON INDEX HIGH(BRXH、BRXHG);k.BRANCH RELATIVE ON INDEX LOW OR EQUAL(BRXLE、BRXLG);l.COMPARE AND BRANCH(CRB、CGRB);m.COMPARE AND BRANCH RELATIVE(CRJ、CGRJ);n.COMPARE IMMEDIATE AND BRANCH(CIB、CGIB);o.COMPARE IMMEDIATE AND BRANCH RELATIVE(CIJ、CGIJ);p.COMPARE LOGICAL AND BRANCH(CLRB、CLGRB);q.COMPARE LOGICAL AND BRANCH RELATIVE(CLRJ,CLGRJ);r.COMPARE LOGICAL IMMEDIATE AND BRANCH(CLIB、CLGIB);及びs.COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE(CLIJ、CLGIJ)のようなリターン・タイプ分岐命令の実行により作成される。転送記録は、分岐が成立したときに作成される。転送記録に関して、命令アドレス・フィールドは、分岐命令のアドレス、又は分岐が実行タイプ命令のターゲットである場合には実行タイプ命令のアドレスを含み、ターゲット・アドレス・フィールドはリターン位置を含む。
【0126】
フィラー記録は、収集バッファ508内の有効な記録の数が、現在のRGSの報告グループを満たすのに十分でない場合に、報告グループにおいて使用される。フィラー記録の1つの実施形態は、記録がフィラー記録であることを示すための「00」の記録タイプ・フィールドを含み、残りのバイトは定義されない。
【0127】
追加記録セクション906は、存在する場合、モデル依存の記録を含むことができる。1つの実施形態において、追加記録のフォーマットは、記録が追加記録であることを示すうように、記録タイプが「01」に設定され、追加記録の残りのバイトはモデル依存データを含むことができる点を除いて、フィラー記録に類似している。
【0128】
フッタ・セクション908は、サンプル命令の実行についての情報を含む命令記録を含むことができる。命令記録は、サンプル命令に関して報告グループが格納されたときに作成される。命令記録の1つの実施形態は、「04」の記録タイプ・フィールド「04」と、命令記録において、現PSWの命令アドレス・ビット位置がどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレッシング・モード(例えば、64ビット、31ビット、又は24ビット)に応じて変わり、且つ、サンプル命令のアドレス、又はサンプル命令が実行タイプ命令のターゲットであった場合には実行タイプ命令の命令アドレスを含む命令アドレス・フィールドと、IDBから収集されたいずれかのモデル依存データを含む命令データ・バッファ(IDB)フィールドとを含む。
【0129】
前述のように、ランタイム・インストルメンテーション機能は、実験室環境において又はオフライン分析のために使用できるだけでなく、ランタイム・プログラム内の稼働(live)ソフトウェア環境においても及びプログラム制御下でも使用できる新しいファシリティである。最初に、特権状態は、ランタイム・インストルメンテーションを管理するために、プロセッサ106の制御を設定することができる。1つの実施形態において、制御のセットは、もともと低特権状態によるload run−time instrumentation(LRIC)命令の正常実行(successful execution)によって、もともとロードされている。ランタイム・インストルメンテーション・ファシリティの柔軟性は、低特権状態からランタイム・インストルメンテーション・ファシリティをオン及びオフにする能力を与えることにより強化される。このように、ランタイム・インストルメンテーション・ファシリティにより収集されたデータを、特定の命令のターゲットにすることができる。
【0130】
実施形態によると、低特権状態で実行されているアプリケーションにより、RIOFF命令及びRION命令の両方を実行することができる。RIOFF命令の実行が正常に完了した場合、RIOFF命令が正常に完了したときにランタイム・インストルメンテーションがディスエーブルにされ、さもなければ、RIOFF命令が失敗した場合、RIOFF命令は、ランタイム・インストルメンテーション・ファシリティの状態(例えば、イネーブル又はディスエーブル)に影響を与えない。同様に、RION命令の実行が正常に完了した場合、RION命令の実行が正常に完了したときにランタイム・インストルメンテーションがイネーブルにされ、さもなければ、RION命令の実行が失敗した場合、RION命令は、ランタイム・インストルメンテーション・ファシリティの状態(例えば、イネーブル又はディスエーブル)に影響を与えない。
【0131】
図15は、1つの実施形態によるRIOFF命令を示す。
図15に示されるように、RIOFF命令は、操作コード1102及び1104(この特定の場合は「オペコード」又は「分割オペコード(split opcode)」とも呼ばれる)。オペコード1102及び1104は、
図9のプロセッサ106のようなプロセッサに対してRIOFF命令を識別する。
図15は、RIOFF命令の一実施形態を示し、当業者であれば、他の実施形態において、RIOFF命を異なるようにフォーマットすることができ、及び/又は、異なるオペランド及びオペコードを含み得ることを理解するであろう。
【0132】
図16は、1つの実施形態によるRIOFF命令のプロセス・フローを示す。1つの実施形態において、
図16のプロセス・フローは、
図9のインストルメンテーション・モジュール506により実行される。ブロック1202において、低特権状態プログラム(例えば、問題状態で実行されているアプリケーション518)により発行されたRIOFF命令がフェッチされる(例えば、命令ストリームから)。1つの実施形態において、PSWのビットを検査して(例えば、ビット15)、プロセッサがスーパーバイザ状態で実行されているか又は低特権状態(「問題状態」とも呼ばれる)で実行されているかを判断する。ブロック1204において、RIOFF命令の実行が許可されるかどうかが判断される。RICCB内のランタイム・インストルメンテーションのSビット(LRICによってのみ制御される)は、低特権状態プログラムがRIOFF命令を実行することが許可されるかどうかを判断する。1つの実施形態において、現在のランタイム・インストルメンテーション制御内の(例えば、RICCB内の)ランタイム・インストルメンテーションSビットが1に設定された場合、低特権状態プログラムがRIOFF命令を実行することが許可される、処理はブロック1208に続く。或いは、Sビットが0に設定された場合、低特権状態プログラムがRIOFF命令を実行することは許可されず、処理はブロック1206に続く。ブロック1206において、RIOFF命令は、以前の設定を変更せず、ランタイム制御及びPSWは、その以前の値のままである。1つの実施形態では、ブロック1206において、低特権状態の実行がイネーブルにされていないことを示すように、条件コードが2に設定される。
【0133】
ブロック1208において、現在のランタイム・インストルメンテーション制御(例えば、RICCB内の)の妥当性ビット(Vビットとも呼ばれる)が1に設定されるかどうかが判断される。妥当性ビットは、以前にLRIC命令によって設定されたので、プロセッサにおけるランタイム・インストルメンテーション制御のセットの妥当性を示す。現在のランタイム・インストルメンテーション制御が有効でない(即ち、以前のLRIC命令が無効であった)場合、処理はブロック1210に続く。1つの実施形態では、ブロック1210において、現在のランタイム・インストルメンテーション制御が有効でないことを示すように、条件コードが3に設定される。
【0134】
妥当性ビットが1に設定され、ランタイム・インストルメンテーション制御が有効であることを示す場合、処理はブロック1212に続き、そこで現在のランタイムRSICを抑止し、後のRION命令を予期して値を保存する。処理はブロック1214に続き、そこで、PSW内のRIビット(例えば、ビット24)がゼロに設定される。1つの実施形態において、PSWのビット24が既にゼロである場合、RIOFFの実行は完了し、条件コードがゼロに設定される。1つの実施形態において、PSWのビット24の現在の値を判断するために、EXTRACT PSW命令が実行される。
【0135】
図17は、1つの実施形態によるRION命令を示す。
図17に示されるように、RION命令1300は、操作コード1302及び1304を含む(この特定の場合は「オペコード」又は「分割オペコード(split opcode)」とも呼ばれる)。オペコード1302及び1304は、
図9のプロセッサ106のようなプロセッサに対してRION命令を識別する。
図17は、RION命令の一実施形態を示し、当業者であれば、他の実施形態において、RIOFF命を異なるようにフォーマットすることができ、及び/又は、異なるオペランド及びオペコードを含み得ることを理解するであろう。
【0136】
図18は、1つの実施形態によるRION命令のプロセス・フローを示す。1つの実施形態において、
図18のプロセス・フローは、
図9のインストルメンテーション・モジュール506により実行される。ブロック1402において、低特権状態プログラム(例えば、問題状態で実行されているアプリケーション518)により発行されたRION命令がフェッチされる(例えば、命令ストリームから)。1つの実施形態において、PSWのビットを検査して(例えば、ビット15)、プロセッサがスーパーバイザ状態で実行されているか又は低特権状態(「問題状態」とも呼ばれる)で実行されているかを判断する。ブロック1404において、RION命令の実行が許可されるかどうかが判断される。ランタイム・インストルメンテーションのSビット(LRICによってのみ制御される)は、低特権状態プログラムがRION命令を実行することが許可されるかどうかを判断する。1つの実施形態において、現在のランタイム・インストルメンテーション制御内の(例えば、RICCB内の)ランタイム・インストルメンテーションSビットが1に設定された場合、低特権状態プログラムがRION命令を実行することが許可される、処理はブロック1408に続く。或いは、Sビットが0に設定された場合、低特権状態プログラムRION命令を実行することは許可されず、処理はブロック1406に続く。1つの実施形態では、ブロック1406において、RION命令は、前の設定を変更せず、ランタイム制御及びPSWは、その前の値のままである。1つの実施形態では、ブロック1406において、低特権状態の実行がイネーブルにされていないことを示すように、条件コードが2に設定される。
【0137】
ブロック1408において、現在のランタイム・インストルメンテーション制御(例えば、RICCB内の)の妥当性ビット(Vビットとも呼ばれる)が1に設定されるかどうかが判断される。妥当性ビットは、以前にLRIC命令によって設定されたので、プロセッサにおけるランタイム・インストルメンテーション制御の設定の妥当性を示す。現在のランタイム・インストルメンテーション制御が有効でない(即ち、以前のLRIC命令が無効であった)場合、処理はブロック1410に続く。1つの実施形態では、ブロック1410において、現在のランタイム・インストルメンテーション制御が有効でないことを示すように、条件コードが3に設定される。
【0138】
妥当性ビットが1に設定され、ランタイム・インストルメンテーション制御が有効であることを示す場合、処理はブロック1412に続き、そこで収集バッファのコンテンツ、及び、存在する場合は命令データ・バッファがパージされる。1つの実施形態において、ブロック1412において、PSW内のRIビットが既にゼロに設定されている場合にのみ、バッファがパージされる。処理はブロック1414に続き、そこでPSW内のRIビット(例えば、ビット24)が1に設定される。1つの実施形態において、PSWのビット24が既に1である場合、RION命令の実行は完了し、条件コードがゼロに設定される。1つの実施形態において、PSWのビット24の現在の値を判断するために、EXTRACT PSW命令が実行される。
【0139】
1つの実施形態において、ランタイム・インストルメンテーション・ファシリティがサンプリング・モード0又は1で実行されている場合(例えばRCCBにより決定されるように)、非ゼロのRSICを用いて、間隔の残りを続ける。RSICがゼロである場合、新しいサンプリング間隔がスケーリング・ファクタの値に初期化され、RICCB内のAビットが1に設定される。
【0140】
上述のように、実施形態は、コンピュータ実装プロセス及びそれらのプロセスを実施するための装置の形で具体化することができる。実施形態は、製造物品として有形媒体内に具体化された命令を含むコンピュータ・プログラム・コード論理1504を有するコンピュータ可読/使用可能媒体1502上の、
図19に示されるようなコンピュータ・プログラム製品1500を含むことができる。コンピュータ可読/使用可能媒体1502に関する例示的な製造物品は、フロッピィ・ディスケット、CD−ROM、ハードドライブ、ユニバーサル・シリアル・バス(USB)フラッシュ・ドライブ、又は他のいずれかのコンピュータ可読ストレージ媒体を含むことができ、ここで、コンピュータ・プログラム・コード論理1504がコンピュータにロードされ、コンピュータにより実行されると、コンピュータは、本発明を実施するための装置となる。実施形態は、例えば、ストレージ媒体内に格納される、コンピュータにロードされる及び/又はコンピュータによって実行される、又は電気配線若しくはケーブルにより光ファイバを通じて又は電磁放射を介してといった何らかの伝送媒体上で伝送される、コンピュータ・プログラム・コード論理1504を含み、ここで、コンピュータ・プログラム・コード論理1504がコンピュータにロードされ、コンピュータにより実行されると、コンピュータは、本発明を実施するための装置となる。汎用マイクロプロセッサ上に実装される場合、コンピュータ・プログラム・コード論理1504のセグメントは、特定の論理回路を作成するようにマイクロプロセッサを構成する。
【0141】
技術的効果及び利点として、ランタイム・インストルメンテーション・ファシリティによるサンプリングを、アプリケーションの実行トレースのサブセットに制限する能力が挙げられる。これにより、インストルメンテーションから設定されたより焦点が当てられたデータがもたらされ得る。さらに、サンプリングを実行トレースのサブセットに制限することによって、インストルメンテーション・データを管理し、バッファに入れ、低減させなければならない費用が低減される。
【0142】
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「1つの(a)」、「1つの(an)」及び「その(the)」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む(comprise)」及び/又は「含んでいる(comprising)」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び/又はコンポーネントの存在を指定するが、1つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び/又はそれらのグループの存在又は追加を排除するものではないこともさらに理解されるであろう。
【0143】
下記の特許請求の範囲におけるすべての機能付き手段(ミーンズ・プラス・ファンクション)又は機能付き工程(ステップ・プラス・ファンクション)の対応する構造、部材、動作、及び均等物は、もしあれば、その機能を、明確に請求されている他の特許請求された要素と組み合わせて実行するための、あらゆる構造、部材、又は動作を含むことが意図されている。本発明の説明は、例証及び説明のために提示されたものであり、網羅的であること又は本発明を開示された形態に限定することを意図したものではない。当業者には、本発明の範囲から逸脱しない多くの修正及び変形が明らかとなるであろう。実施形態は、本発明の原理及び実際の適用を最も良く説明し、その他の当業者が企図される特定の使用に適した種々の修正を伴う種々の実施形態について本発明を理解できるように、選択され、説明された。
【0144】
当業者により認識されるように、本発明の態様は、システム、方法、又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、これらは全て、本明細書において、一般的に「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本発明の態様は、コンピュータ可読プログラム・コードが組み込まれた、1つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形を取ることができる。
【0145】
1つ又は複数のコンピュータ可読媒体の任意の組み合わせを利用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、これらに限定されるものではないが、例えば、電子的、磁気的、光学的、電磁気的、赤外線、若しくは半導体のシステム、装置、若しくはデバイス、又は上記のものの任意の組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例(非網羅的なリスト)には、以下のもの、即ち、1つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM又はフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM)、光記憶装置、磁気記憶装置、又は上記のものの任意の適切な組み合わせが含まれる。本文書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって、又はそれらとの関連で使用するためのプログラムを収容又は格納することができる任意の有形媒体とすることができる。
【0146】
コンピュータ可読信号媒体は、コンピュータ可読プログラム・コードが、例えばベースバンド内に又は搬送波の一部として内部に具体化された伝搬データ信号を含むことができる。このような伝搬信号は、これらに限定されるものではないが、電磁気、光、又はそれらの任意の適切な組み合わせを含む種々の形態のいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、且つ、命令実行システム、装置若しくはデバイスによって、又はこれらとの関連で使用するためのプログラムを通信し、伝搬し、又は搬送することができる任意のコンピュータ可読媒体とすることができる。
【0147】
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限定されるものではないが、無線、有線、光ファイバ・ケーブル、RF等、又は上記のもののいずれかの適切な組み合わせを含む、いずれかの適切な媒体を用いて伝送することができる。
【0148】
本発明の態様の動作を実行するためのコンピュータ・プログラム・コードは、Java(登録商標)、Smalltalk、C++等のようなオブジェクト指向型プログラミング言語、及び「C」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、1つ又は複数のプログラミング言語のいずれかの組み合わせで記述することができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立したソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。後者のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は、外部コンピュータへの接続がなされる場合もある(例えば、インターネット・サービス・プロバイダを用いるインターネットを通じて)。
【0149】
本発明の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して以下で説明される。フローチャート図及び/又はD−2ブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装することができることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサにより実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装するための手段を生成するようにすることができる。
【0150】
これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスに特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにすることもできる。
【0151】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、そのコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で、コンピュータ実装プロセスを生成するための一連の動作ステップを実施させて、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装するためのプロセスを提供するようにすることもできる。
【0152】
上述のように、実施形態は、コンピュータ実装プロセス及びそれらのプロセスを実施するための装置の形で具体化することができる。実施形態において、本発明は、1つ又は複数のネットワーク要素により実行されるコンピュータ・プログラム・コードにおいて具体化される。実施形態は、製造物品として有形媒体内に具体化された、命令を含むコンピュータ・プログラム・コード論理を有するコンピュータ使用可能媒体上のコンピュータ・プログラム製品を含む。コンピュータ使用可能媒体に関する例示的な製造物品は、フロッピィ・ディスケット、CD−ROM、ハードドライブ、ユニバーサル・シリアル・バス(USB)フラッシュ・ドライブ、又は他のいずれかのコンピュータ可読ストレージ媒体を含むことができ、ここで、コンピュータ・プログラム・コード論理がコンピュータにロードされ、コンピュータにより実行されると、コンピュータは、本発明を実施するための装置となる。実施形態は、例えば、ストレージ媒体内に格納される、コンピュータにロードされる及び/又はコンピュータによって実行される、又は電気配線若しくはケーブルにより、光ファイバを通じて、又は電磁放射を介してといった何らかの伝送媒体上で伝送される、コンピュータ・プログラム・コード論理を含み、ここで、コンピュータ・プログラム・コード論理がコンピュータにロードされ、コンピュータにより実行されると、コンピュータは、本発明を実施するための装置となる。汎用マイクロプロセッサ上に実装される場合、コンピュータ・プログラム・コード論理のセグメントは、特定の論理回路を作成するようにマイクロプロセッサを構成する。
【0153】
図面内のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含むモジュール、セグメント、又はコードの部分を表すことができる。幾つかの代替的な実装において、ブロック内に記載された機能は、図面内に記載された順序とは異なる順序で行われ得ることにも留意すべきである。例えば、連続して示された2つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、ときにはブロックが逆順に実行されることもある。また、ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェア・ベースのシステムによって、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装できることにも留意されたい。