JP2015513374A - アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するためのコンピュータ・プログラム・プロダクト、方法、およびシステム(アドレスによるランタイム・インスツルメンテーション間接サンプリング) - Google Patents
アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するためのコンピュータ・プログラム・プロダクト、方法、およびシステム(アドレスによるランタイム・インスツルメンテーション間接サンプリング) Download PDFInfo
- Publication number
- JP2015513374A JP2015513374A JP2014540248A JP2014540248A JP2015513374A JP 2015513374 A JP2015513374 A JP 2015513374A JP 2014540248 A JP2014540248 A JP 2014540248A JP 2014540248 A JP2014540248 A JP 2014540248A JP 2015513374 A JP2015513374 A JP 2015513374A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- address
- sample point
- processor
- runtime instrumentation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 65
- 238000005070 sampling Methods 0.000 title claims abstract description 65
- 238000004590 computer program Methods 0.000 title claims description 42
- 238000012545 processing Methods 0.000 claims description 30
- 238000013519 translation Methods 0.000 claims description 22
- 239000000523 sample Substances 0.000 description 155
- 239000000872 buffer Substances 0.000 description 90
- 230000006870 function Effects 0.000 description 33
- 230000001419 dependent effect Effects 0.000 description 26
- 230000007246 mechanism Effects 0.000 description 19
- 230000008569 process Effects 0.000 description 19
- 230000014616 translation Effects 0.000 description 18
- 238000010586 diagram Methods 0.000 description 15
- 230000001629 suppression Effects 0.000 description 10
- 238000007667 floating Methods 0.000 description 8
- 238000012546 transfer Methods 0.000 description 8
- 230000009471 action Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 7
- 239000000945 filler Substances 0.000 description 7
- 230000006399 behavior Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- 230000007774 longterm Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 238000013480 data collection Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 239000013307 optical fiber Substances 0.000 description 3
- 230000036961 partial effect Effects 0.000 description 3
- 230000000737 periodic effect Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 206010000210 abortion Diseases 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 230000005670 electromagnetic radiation Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 101100496104 Mus musculus Clec2d gene Proteins 0.000 description 1
- 101100274534 Rattus norvegicus Clec2d11 gene Proteins 0.000 description 1
- 238000012884 algebraic function Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 239000012468 concentrated sample Substances 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001066 destructive effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 229920000638 styrene acrylonitrile Polymers 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/348—Circuit details, i.e. tracer hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/86—Event-based monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/87—Monitoring of transactions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
【課題】 アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現することを提供する。【解決手段】 本発明の一態様は、アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するための方法を含む。この方法は、サンプル・ポイント・アドレス・アレイから複数のサンプル・ポイント・アドレスを読み取ることと、プロセッサにより、その複数のサンプル・ポイント・アドレスをプロセッサ上で実行中の命令ストリームからの命令に関連するアドレスと比較することを含む。この方法は、複数のサンプル・ポイント・アドレスのうちの1つと一致するアドレスに関連する命令の実行時にサンプル・ポイントを認識することをさらに含む。ランタイム・インスツルメンテーション情報はサンプル・ポイントから入手される。また、この方法は、ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファに報告グループとして保管することも含む。【選択図】 図13
Description
本発明は、一般に、コンピューティング環境内の処理に関し、より具体的には、ランタイム・インスツルメンテーション(run-time instrumentation)を使用して、それぞれが1つのサンプル・ポイントを構成する1つまたは複数のサンプル命令の位置をアドレスにより指定することに関する。
コンピュータ・プロセッサは、ますます複雑になっている分岐予測および命令キャッシング・ロジックを使用してプログラムまたは命令ストリームを実行する。これらのプロセスは、命令スループット、したがって、処理性能を高めるために導入されたものである。性能を改善するためのロジックの導入は、特定のソフトウェア・アプリケーションがコンピュータ・プロセッサ上でどのように実行されるかを確実に予測するのを困難にしている。ソフトウェア開発プロセス中に、機能性と性能とのバランスが取られる場合が多い。ソフトウェアは、そのソフトウェアを実行している基礎となるハードウェアから1つまたは複数の抽象化レベルで実行される。ハードウェアが仮想化されると、追加の抽象化層が導入される。性能を高めるロジックの導入ならびに様々な抽象化層により、プログラムが実行されているときにハードウェア・レベルで実際に何が行われているかを完全に理解することは困難である。この情報がない場合、ソフトウェア開発者は、ソフトウェア・アプリケーションを最適化するために、実行持続期間、メモリ使用率、スレッド数など、より抽象的な方法を使用する。
2010年8月発行の「IBM(R) z/Architecture Principles of Operation」という資料番号SA22−7832−08の第9版
ハードウェア固有情報が使用可能である場合、それは典型的に事後に開発者に提供されるものであり、高レベルで集約されて提供されるか、あるいは他のプログラムのアクティビティおよびオペレーティング・システムが散在しているか、またはその両方になり、ソフトウェア・アプリケーションの効率および正確さに影響を及ぼしている可能性のある問題を識別するのを困難にしている。
諸実施形態は、アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するための方法、システム、およびコンピュータ・プログラム・プロダクト(computer program product)を含む。このコンピュータ・プログラム・プロダクトは、処理回路によって読み取り可能で、方法を実行するために処理回路によって実行するための命令を保管する有形記憶媒体を含む。この方法は、サンプル・ポイント・アドレス・アレイから複数のサンプル・ポイント・アドレスを読み取ることと、プロセッサにより、その複数のサンプル・ポイント・アドレスをプロセッサ上で実行中の命令ストリームからの命令に関連するアドレスと比較することを含む。この方法は、複数のサンプル・ポイント・アドレスのうちの1つと一致するアドレスに関連する命令の実行時にサンプル・ポイントを認識することをさらに含む。ランタイム・インスツルメンテーション情報はサンプル・ポイントから入手される。また、この方法は、ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファに報告グループ(reporting group)として保管することも含む。
アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するための方法は、サンプル・ポイント・アドレス・アレイから複数のサンプル・ポイント・アドレスを読み取ることと、プロセッサにより、その複数のサンプル・ポイント・アドレスをプロセッサ上で実行中の命令ストリームからの命令に関連するアドレスと比較することを含む。この方法は、複数のサンプル・ポイント・アドレスのうちの1つと一致するアドレスに関連する命令の実行時にサンプル・ポイントを認識することをさらに含む。ランタイム・インスツルメンテーション情報はサンプル・ポイントから入手される。また、この方法は、ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファに報告グループとして保管することも含む。
アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するためのシステムは、メモリと、ランタイム・インスツルメンテーション・モジュールを備えたプロセッサとを含む。ランタイム・インスツルメンテーション・モジュールは、方法を実行するように構成される。この方法は、サンプル・ポイント・アドレス・アレイから複数のサンプル・ポイント・アドレスを読み取ることと、プロセッサにより、その複数のサンプル・ポイント・アドレスをプロセッサ上で実行中の命令ストリームからの命令に関連するアドレスと比較することを含む。この方法は、複数のサンプル・ポイント・アドレスのうちの1つと一致するアドレスに関連する命令の実行時にサンプル・ポイントを認識することをさらに含む。ランタイム・インスツルメンテーション情報はサンプル・ポイントから入手される。また、この方法は、ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファに報告グループとして保管することも含む。
追加の特徴および利点は本発明の技法により実現される。本発明のその他の実施形態および態様は、本明細書に詳細に記載され、請求されている本発明の一部と見なされる。利点および特徴とともに本発明をより適切に理解するために、以下の説明および図面を参照されたい。
本発明と見なされる主題は、本明細書の末尾にある特許請求の範囲に詳細に指摘され、明確に請求されている。本発明の上記その他の特徴および利点は、添付図面に併せて記載されている以下の詳細な説明から明らかである。
本発明の一実施形態は、ランタイム・インスツルメンテーションを使用して、アドレスによるイベントの間接サンプリングを可能にするものである。ランタイム・インスツルメンテーションは、実験室内またはオフライン解析用だけでなく、プロセッサ(CPU)上のプログラム制御下でプログラム・ランタイム中にカスタマ環境でも使用できる機構である。1つのプログラムを実行するためにフェッチされ実行される一連の命令は命令ストリームと呼ぶことができる。データ収集のフレキシビリティを高めるために、構成可能な間隔に基づいてイベントを収集することができる。CPUコントロールは、プログラムによって設定可能であり、ランタイム・インスツルメンテーションを管理する。ランタイム・インスツルメンテーションは、通常、定期的サンプリングを基礎としてイベントを報告するが、インスツルメント命令ストリーム(instrumented instruction stream)内の追加の関心ポイント(pointof interest)はランタイム・インスツルメンテーション・ネクスト(run-timeinstrumentation next)(RINEXT)命令の使用によって指示することができる。定期的サンプリング間隔は、命令カウントまたはサイクル・カウントのいずれかによって決定される。インスツルメント命令ストリーム内の特定の情報は、その後の解析が行われるときに非常に有用である可能性がある。1回のインスツルメンテーション・ラン中にインスツルメント命令ストリーム内の特定の命令に関連する追加の指示サンプル・ポイントを作成できることは、解析後に使用可能な重大情報の量を実質的に増加する可能性がある。
ランタイム・インスツルメンテーション・ネクスト(RINEXT)命令は、インスツルメント・プログラム(instrumented program)が次の順次命令(next sequentialinstruction)(NSI)の実行完了時にサンプル・ポイントを指定できるように定義されている。一定間隔サンプリングに加えて、この指示サンプリングにより、余分な非常に集中したサンプル・ポイントについて報告することができる。RINEXT命令は、それがサンプル命令としてNSIを指定できるようにするために、インスツルメント命令ストリーム内に挿入される。RINEXTを挿入するには、その命令をプログラム変更または再コンパイルとして挿入しなければならない可能性がある。一実施形態では、サンプル・ポイント・アドレス(SPA)モードを実現するために他のサンプリング・モードが定義される。SPAモードは、インスツルメント命令ストリーム内の1つまたは複数のサンプル・ポイントをアドレスにより間接的に識別する。ランタイム・インスツルメンテーション構成プロセスの一部としてサンプル・ポイントに関するアドレスを間接的に識別することは、モニター中のプログラムを変更せずに精密なサンプル・ポイントをターゲットにするためにプログラムのインスツルメンテーションをサポートすることができる。それぞれのサンプル・ポイントは、一定間隔サンプル、指示サンプル・ポイント、または間接サンプル・ポイントのいずれであっても、結果的に、収集バッファから最近収集されたデータならびにそのサンプル・ポイントでの命令の実行に関連するデータを含む、複数レコード報告グループが保管されることになる。
図1は、一実施形態におけるホスト・コンピュータ・システム50の代表的なコンポーネントを描写している。その他のコンポーネント配置もコンピュータ・システムで使用することができる。代表的なホスト・コンピュータ・システム50は、主記憶装置(コンピュータ・メモリ)2と通信状態にある1つまたは複数のプロセッサ1ならびに記憶装置11への入出力インターフェースと他のコンピュータまたはSANなどと通信するためのネットワーク10を含む。プロセッサ1は、設計済み命令セットおよび設計済み機能性を有するアーキテクチャに適合している。プロセッサ1は、プログラム・アドレス(仮想アドレス)をメモリ内の実アドレスに変換するための動的アドレス変換(DAT)3を有することができる。DAT3は典型的に、後でコンピュータ・メモリ2のブロックにアクセスする際にアドレス変換の遅延を必要としないように、変換をキャッシュするための変換索引バッファ(TLB)7を含む。典型的に、キャッシュ9はコンピュータ・メモリ2とプロセッサ1との間で使用される。キャッシュ9は、2つ以上のCPUにとって使用可能な大きいキャッシュと、この大きいキャッシュとそれぞれのCPUとの間のより小さく高速(低レベル)の複数キャッシュとを有する階層型にすることができる。いくつかの実施形態では、この低レベル・キャッシュは、命令フェッチおよびデータ・アクセスのために別々の低レベル・キャッシュを提供するように分割される。一実施形態では、命令は、キャッシュ9を介して命令フェッチ・ユニット4によってコンピュータ・メモリ2からフェッチされる。命令は、命令デコード・ユニット6でデコードされ、命令実行ユニット8に(いくつかの実施形態では他の命令とともに)ディスパッチされる。典型的に、いくつかの命令実行ユニット8、たとえば、算術実行ユニット、浮動小数点実行ユニット、および分岐命令実行ユニットが使用される。命令は、命令実行ユニット8によって実行され、必要に応じて命令指定のレジスタまたはコンピュータ・メモリ2からオペランドにアクセスする。オペランドがコンピュータ・メモリ2からアクセス(ロードまたはストア)される場合、ロード・ストア・ユニット5は、典型的に、実行中の命令の制御下でアクセスを処理する。命令は、ハードウェア回路であるいは内部マイクロコード(ファームウェア)でまたはその両方の組み合わせによって実行することができる。
図2には、エミュレートされたホスト・コンピュータ・システム21が提供されており、これは、図1のホスト・コンピュータ・システム50など、ホスト・アーキテクチャのホスト・コンピュータ・システムをエミュレートするものである。エミュレートされたホスト・コンピュータ・システム21では、ホスト・プロセッサ(CPU)1は、エミュレートされたホスト・プロセッサ(または仮想ホスト・プロセッサ)29であり、ホスト・コンピュータ・システム50のプロセッサ1のものとは異なるネイティブ命令セット・アーキテクチャを有するネイティブ・プロセッサ27を含む。エミュレートされたホスト・コンピュータ・システム21は、ネイティブ・プロセッサ27にとってアクセス可能なメモリ22を有する。一実施形態では、メモリ22は、コンピュータ・メモリ2の部分とエミュレーション・ルーチン・メモリ23の部分にパーティション化される。コンピュータ・メモリ2は、ホスト・コンピュータ・アーキテクチャによりエミュレートされたホスト・コンピュータ・システム21のプログラムにとって使用可能なものである。ネイティブ・プロセッサ27は、エミュレートされたプロセッサ29のもの以外のアーキテクチャの設計済み命令セットのネイティブ命令であって、エミュレーション・ルーチン・メモリ23から入手されるネイティブ命令を実行し、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを決定するためにアクセスされたホスト命令(複数も可)をデコードすることができるシーケンスおよびアクセス/デコード・ルーチンで入手される1つまたは複数の命令を使用することによって、コンピュータ・メモリ2内のプログラムから実行のためにホスト命令にアクセスすることができる。ホスト・コンピュータ・システム50のアーキテクチャについて定義されるその他の機構は、たとえば、汎用レジスタ、制御レジスタ、動的アドレス変換および入出力(I/O)サブシステム・サポート、ならびにプロセッサ・キャッシュなどの機構を含む、設計済み機構ルーチンによってエミュレートすることができる。また、エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を改善するためにネイティブ・プロセッサ27内で使用可能な機能(汎用レジスタおよび仮想アドレスの動的変換など)も利用することができる。ホスト・コンピュータ・システム50の機能をエミュレートする際にネイティブ・プロセッサ27を支援するために、特殊ハードウェアおよびオフロード・エンジンが提供される場合もある。
メインフレームでは、多くの場合、コンパイラ・アプリケーションにより、プログラマによって、通常、現在は、「C」プログラマによって、設計済み機械命令が使用される。記憶媒体に保管されているこれらの命令は、z/Architecture IBMサーバにおいてまたは代わってその他のアーキテクチャを実行するマシンにおいてネイティブに実行することができる。これらは、既存のおよび将来のIBMメインフレーム・サーバ内でならびにIBMのその他のマシン(たとえば、pSeries(R)サーバおよびxSeries(R)サーバ)上でエミュレートすることができる。また、これらは、IBM(R)、Intel(R)、AMD(TM)、Sun Microsystems、その他によって製造されたハードウェアを使用する多様なマシン上でLinuxを実行するマシンにおいて実行することができる。Z/Architecture(R)に基づくそのハードウェア上での実行の他に、Linuxは、Hercules、UMX、Fundamental Software, Inc.(FSI)、またはPlatformSolutions, Inc.(PSI)によりエミュレーションを使用するマシンでも使用することができ、一般にその実行はエミュレーション・モードで行われる。エミュレーション・モードでは、エミュレートされたプロセッサのアーキテクチャをエミュレートするために、エミュレーション・ソフトウェアがネイティブ・プロセッサによって実行される。
エミュレートされたホスト・コンピュータ・システム21のコンポーネントのうちの1つまたは複数については、2010年8月発行の「IBM(R) z/Architecture Principles of Operation」という資料番号SA22−7832−08の第9版にさらに記載されている。IBMは、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ社の登録商標である。本明細書で使用するその他の名称は、インターナショナル・ビジネス・マシーンズ社またはその他の企業の登録商標、商標、または製品名である可能性がある。
ネイティブ・プロセッサ27は、典型的に、エミュレートされたプロセッサのエミュレーションを実行するために、ファームウェアまたはネイティブ・オペレーティング・システムのいずれか一方を含む、エミュレーション・ルーチン・メモリ23に保管されているエミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令をフェッチして実行する責任がある。エミュレーション・ソフトウェアは、命令境界を追跡するためにエミュレートされたプログラム・カウンタを維持する。エミュレーション・ソフトウェアは、ネイティブ・プロセッサ27による実行のために、一度に1つまたは複数のエミュレートされた機械命令をフェッチし、その1つまたは複数のエミュレートされた機械命令を対応するネイティブ機械命令のグループに変換することができる。これらの変換された命令は、より高速の変換を達成できるようにキャッシュすることができる。エミュレーション・ソフトウェアは、オペレーティング・システムならびにエミュレートされたプロセッサのために作成されたアプリケーションが正しく動作することを保証するために、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ・ルールを維持する。さらに、エミュレーション・ソフトウェアは、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、たとえば、セグメント・テーブルおよびページ・テーブルを含む動的アドレス変換機能、割り込みメカニズム、コンテキスト・スイッチ・メカニズム、時刻(TOD)機構、ならびに入出力サブシステムへの設計済みインターフェースを含むがこれらに限定されない、エミュレートされたプロセッサ・アーキテクチャによって識別されたリソースを提供し、エミュレートされたプロセッサ29上で実行されるように設計されたオペレーティング・システムまたはアプリケーション・プログラムがエミュレーション・ソフトウェアを有するネイティブ・プロセッサ27上で実行できるようになっている。
エミュレート中の特定の命令はデコードされ、個々の命令の機能を実行するためのサブルーチンが呼び出される。エミュレートされたプロセッサ29の機能をエミュレートするエミュレーション・ソフトウェア機能は、たとえば、「C」サブルーチンまたはドライバで実現されるか、あるいは好ましい実施形態の説明を理解した後に当技術分野の技能の範囲内に入るように特定のハードウェアに関するドライバを提供する何らかの他の方法で実現される。
一実施形態では、本発明は、ソフトウェア(時には、ライセンスを受けた内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどとも呼ばれ、いずれも本発明と一貫したものであると思われる)によって実施することができる。図1を参照すると、本発明を実施するソフトウェア・プログラム・コードは、長期記憶媒体、CD−ROMドライブ、磁気テープ・ドライブ、またはハード・ディスクなどの記憶装置11から、ホスト・コンピュータ・システム50のCPU(中央演算処理装置)1としても知られるプロセッサによってアクセスされる。ソフトウェア・プログラム・コードは、ディスケット、ハード・ディスク、またはCD−ROMなど、データ処理システムで使用するための様々な既知の媒体のいずれかで実施することができる。このコードは、このような媒体上で配布される場合もあれば、他のコンピュータ・システムのユーザによる使用のためにこのような他のコンピュータ・システムへのネットワーク10により1つのコンピュータ・システムのコンピュータ・メモリ2または記憶装置からユーザに配信される場合もある。
代わって、プログラム・コードは、コンピュータ・メモリ2に読み込まれ、プロセッサ・バス(図示せず)を使用してプロセッサ1によってアクセスすることができる。このようなプログラム・コードは、様々なコンピュータ・コンポーネントの機能および対話を制御するオペレーティング・システムと、1つまたは複数のアプリケーション・プログラムとを含む。プログラム・コードは、通常、記憶装置11などの高密度媒体からコンピュータ・メモリ2にページングされ、そこでプロセッサ1による処理のために使用可能になる。メモリ内あるいは物理的媒体上にソフトウェア・プログラム・コードを記録するかあるいはネットワークを介してソフトウェア・コードを配信するかまたはその両方を行うための技法および方法は、周知のものであり、本明細書ではこれ以上述べないものとする。プログラム・コードは、作成されて、有形媒体(電子メモリ・モジュール(RAM)、フラッシュ・メモリ、コンパクト・ディスク(CD)、DVD、磁気テープなどを含むがこれらに限定されない)上に保管されると、「コンピュータ・プログラム・プロダクト」と呼ばれる場合が多い。コンピュータ・プログラム・プロダクト媒体は、典型的に、好ましくはコンピュータ・システム内の処理回路による実行のためにその処理回路によって読み取り可能である。
図3は、本発明を実践することができる代表的なワークステーションまたはサーバ・ハードウェア・システムを示している。図3のシステム100は、任意選択の周辺装置を含む、パーソナル・コンピュータ、ワークステーション、またはサーバなどの代表的なベース・コンピュータ・システム101を含む。ベース・コンピュータ・システム101は、1つまたは複数のプロセッサ106と、既知の技法により1つまたは複数のプロセッサ106とベース・コンピュータ・システム101のその他のコンポーネントとの間を接続し、それらの間の通信を可能にするために使用されるバス(図示せず)とを含む。このバスは、プロセッサ106をメモリ105および長期記憶媒体107に接続し、この記憶媒体は、たとえば、ハード・ディスク(たとえば、磁気媒体、CD、DVD、およびフラッシュ・メモリのうちのいずれかを含む)または磁気テープ・ドライブを含むことができる。また、ベース・コンピュータ・システム101はユーザ・インターフェース・アダプタも含むことができ、このアダプタは、1つまたは複数のプロセッサ106をバスを介して、キーボード104、マウス103、プリンタ/スキャナ110、あるいはその他のインターフェース・デバイスまたはそれらの組み合わせなどに接続するものであり、このインターフェース・デバイスは、タッチ・センシティブ・スクリーン、デジタル化入力パッドなど、任意のユーザ・インターフェース・デバイスにすることができる。また、このバスは、1つまたは複数のプロセッサをディスプレイ・アダプタを介して、LCDスクリーンまたはモニターなどの表示装置102にも接続する。
ベース・コンピュータ・システム101は、ネットワーク109との通信108が可能なネットワーク・アダプタにより、その他のコンピュータまたは複数コンピュータのネットワークと通信することができる。ネットワーク・アダプタの例は、通信チャネル、トークン・リング、イーサネット、またはモデムである。代わって、ベース・コンピュータ・システム101は、セルラー・デジタル・パケット・データ(CDPD)カードなどのワイヤレス・インターフェースを使用して通信することができる。ベース・コンピュータ・システム101は、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)内のこのようなその他のコンピュータに関連付けられる場合もあれば、ベース・コンピュータ・システム101は、他のコンピュータなどを含むクライアント/サーバ配置内のクライアントである場合もある。
図4は、本発明を実践することができるデータ処理ネットワーク200を示している。データ処理ネットワーク200は、無線ネットワークおよび有線ネットワークなどの複数の個別ネットワークを含むことができ、そのそれぞれは、複数の個別ワークステーション201、202、203、204、あるいは図3のベース・コンピュータ・システム101、またはその両方を含むことができる。さらに、当業者であれば分かるように、1つまたは複数のLANを含むことができ、1つのLANはホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含むことができる。
プログラミング・コード111は、メモリ105に読み込まれ、プロセッサ・バスを使用してプロセッサ106によってアクセスすることができる。このようなプログラミング・コードは、様々なコンピュータ・コンポーネントの機能および対話を制御するオペレーティング・システムと、1つまたは複数のアプリケーション・プログラム112とを含む。プログラム・コードは、通常、長期記憶媒体107から高速メモリ105にページングされ、そこでプロセッサ106による処理のために使用可能になる。メモリ内あるいは物理的媒体上にソフトウェア・プログラミング・コードを記録するかあるいはネットワークを介してソフトウェア・コードを配信するかまたはその両方を行うための技法および方法は、周知のものであり、本明細書ではこれ以上述べないものとする。プログラム・コードは、作成されて、有形媒体(電子メモリ・モジュール(RAM)、フラッシュ・メモリ、コンパクト・ディスク(CD)、DVD、磁気テープなどを含むがこれらに限定されない)上に保管されると、「コンピュータ・プログラム・プロダクト」と呼ばれる場合が多い。コンピュータ・プログラム・プロダクト媒体は、典型的に、好ましくはコンピュータ・システム内の処理回路による実行のためにその処理回路によって読み取り可能である。
プロセッサにとって最も容易に使用可能なキャッシュ(通常、プロセッサの他のキャッシュより高速で小型である)は最低レベル(L1またはレベル1)のキャッシュであり、主記憶装置(メイン・メモリ)は最高レベルのキャッシュ(3つのレベルがある場合はL3)である。最低レベルのキャッシュは、実行すべき機械命令を保持する命令キャッシュ(Iキャッシュ)とデータ・オペランドを保持するデータ・キャッシュ(Dキャッシュ)とに分割される場合が多い。
さらに図4を参照すると、ネットワークは、ゲートウェイ・コンピュータ(クライアント・サーバ)206またはアプリケーション・サーバ(リモート・サーバ)208などのメインフレーム・コンピュータまたはサーバを含むこともでき、これはデータ・リポジトリにアクセスすることができ、ワークステーション205から直接アクセスすることもできる。ゲートウェイ・コンピュータ206は、それぞれのネットワーク207への入口点として機能する。ゲートウェイは、あるネットワーキング・プロトコルを他のネットワーキング・プロトコルに接続するときに必要である。ゲートウェイ・コンピュータ206は、好ましくは、通信リンクにより他のネットワーク(たとえば、インターネット207)に結合することができる。また、ゲートウェイ・コンピュータ206は、通信リンクを使用して1つまたは複数のワークステーション101、201、202、203、および204に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ社から入手可能なIBM eServer(TM) zSeries(R) z9(R)サーバを使用して実現することができる。
一実施形態では、本発明を実施するソフトウェア・プログラミング・コードは、図3の長期記憶媒体107などの長期記憶媒体から、ベース・コンピュータ・システム101のプロセッサ106によってアクセスされる。ソフトウェア・プログラミング・コードは、ディスケット、ハード・ディスク、またはCD−ROMなど、データ処理システムで使用するための様々な既知の媒体のいずれかで実施することができる。このコードは、このような媒体上で配布される場合もあれば、他のコンピュータ・システムのユーザによる使用のためにこのような他のコンピュータ・システムへのネットワークにより1つのコンピュータ・システムのメモリまたは記憶装置からユーザ210および211に配信される場合もある。
図5を参照すると、プロセッサ106について、模範的なプロセッサ実施形態が描写されている。プロセッサ106の性能を改善するために、1つまたは複数レベルのキャッシュ303を使用して、メモリ・ブロックをバッファに入れる。キャッシュ303は、使用される可能性のあるメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、64、128、または256バイトのメモリ・データである。一実施形態では、データをキャッシュするためではなく命令をキャッシュするために個別のキャッシュが使用される。キャッシュ・コヒーレンス(メモリおよびキャッシュ内のライン・コピーの同期化)は、当技術分野で周知の様々な「スヌープ」アルゴリズムによって提供される場合が多い。プロセッサ・システムのメモリ105などの主記憶装置はキャッシュと呼ばれる場合が多い。4つのレベルのキャッシュ303を有するプロセッサ・システムでは、メモリ105は、典型的に、より高速であり、コンピュータ・システムにとって使用可能な不揮発性記憶装置(DASD、磁気テープなど)の一部分を保持するだけであるので、時にはレベル5(L5)のキャッシュと呼ばれる。メモリ105は、オペレーティング・システムによってメモリ105内外にページングされたデータのページを「キャッシュ」する。
プログラム・カウンタ(命令カウンタ)311は、実行すべき現行命令のアドレスを追跡する。z/Architectureプロセッサ内のプログラム・カウンタは、64ビットであり、前のアドレス指定制限をサポートするために31または24ビットに切り捨てることができる。プログラム・カウンタは、典型的に、コンテキスト・スイッチング中に持続するようにコンピュータのプログラム状況ワード(PSW)で実施される。したがって、プログラム・カウンタ値を有する進行中のプログラムは、たとえば、オペレーティング・システムによって割り込むことができる(すなわち、プログラム環境からオペレーティング・システム環境への現行コンテキスト・スイッチ)。プログラムのPSWは、プログラムがアクティブではない間、プログラム・カウンタ値を維持し、オペレーティング・システムが実行中の間、オペレーティング・システムのプログラム・カウンタ(PSW内)が使用される。一実施形態では、プログラム・カウンタは現行命令のバイト数に等しい量だけ増分される。縮小命令セット・コンピューティング(RISC)命令は典型的に固定長であり、複雑命令セット・コンピューティング(CISC)命令は典型的に可変長である。IBM z/Architectureの命令は、2、4、または6バイトの長さを有するCISC命令である。プログラム・カウンタ311は、たとえば、コンテスト・スイッチ動作または分岐命令の分岐実行動作(branch taken operation)のいずれかによって変更される。コンテキスト・スイッチ動作では、現行プログラム・カウンタ値は、実行中のプログラムに関する他の状態情報(条件コードなど)とともにPSWに保存され、実行すべき新しいプログラム・モジュールの命令を指し示す新しいプログラム・カウンタ値がロードされる。分岐実行動作は、分岐命令の結果をプログラム・カウンタ311にロードすることによりプログラム内で決定またはループを行うことをプログラムが許可するために実行される。
一実施形態では、命令フェッチ・ユニット305は、プロセッサ106のために命令をフェッチするために使用される。命令フェッチ・ユニット305は、「次の順次命令」、分岐実行命令のターゲット命令、またはコンテキスト・スイッチに続くプログラムの第1の命令のいずれかをフェッチする。一実施形態では、命令フェッチ・ユニット305は、プリフェッチされた命令が使用される見込みに基づいて命令を投機的にプリフェッチするためのプリフェッチ技法を使用する。たとえば、命令フェッチ・ユニット305は、次の順次命令とその後の順次命令の追加バイトとを含む、16バイト分の命令をフェッチすることができる。
次に、フェッチされた命令はプロセッサ106によって実行される。一実施形態では、フェッチされた命令(複数も可)は、命令フェッチ・ユニット305のデコード/ディスパッチ・ユニット306に渡される。デコード/ディスパッチ・ユニット306は、命令(複数も可)をデコードし、デコードされた命令(複数も可)に関する情報を適切な実行ユニット307、308、あるいは310、またはこれらの組み合わせに転送する。実行ユニット307は、命令フェッチ・ユニット305からデコードされた算術命令に関する情報を受け取り、命令の演算コード(命令コード)に応じてオペランドについて算術演算を実行する。オペランドは、メモリ105、設計済みレジスタ309、または実行中の命令の即値フィールドのいずれかから実行ユニット307に提供される。実行の結果は、保管される場合、メモリ105、設計済みレジスタ309、またはその他のマシン・ハードウェア(制御レジスタ、PSWレジスタなど)のいずれかに保管される。
プロセッサ106は、典型的に、命令の機能を実行するための1つまたは複数の実行ユニット307、308、および310を有する。図6を参照すると、実行ユニット307は、インターフェース・ロジック407により、設計済みレジスタ309、デコード/ディスパッチ・ユニット306、ロード/ストア・ユニット310、およびその他のプロセッサ・ユニット401と通信することができる。実行ユニット307は、算術論理演算装置(ALU)402が操作する情報を保持するためにいくつかのレジスタ回路403、404、および405を使用することができる。ALU402は、加算、減算、乗算、および除算などの算術演算、ならびに論理積、論理和、および排他的論理和(XOR)などの論理関数、循環および桁送りを実行する。一実施形態では、ALUは、設計に依存する特殊演算をサポートする。その他の回路は、たとえば、条件コードおよびリカバリ・サポート・ロジックを含む、その他の設計済み機構408を提供することができる。典型的に、ALU演算の結果は出力レジスタ回路406に保持され、そのレジスタ回路はその結果を様々なその他の処理機能に転送することができる。その他の実施形態には、多くのプロセッサ・ユニット配置が存在し、この説明は、一実施形態の代表的な理解を提供するためのものである。
たとえば、ADD命令は、算術論理演算機能を有する実行ユニット307で実行され、たとえば、浮動小数点命令は、特殊浮動小数点機能を有する浮動小数点実行ユニット(図示せず)で実行されることになる。好ましくは、実行ユニットは、命令によって識別されたオペランドについて命令コードで定義された関数を実行することにより、そのオペランドについて操作する。たとえば、ADD命令は、その命令のレジスタ・フィールドによって識別された2つの設計済みレジスタ309内で見つかったオペランドについて実行ユニット307によって実行することができる。
実行ユニット307は、2つのオペランドについて算術加算を実行し、その結果を第3のオペランドに保管し、そこで第3のオペランドは第3のレジスタまたは2つのソース・レジスタのうちの1つになる可能性がある。実行ユニット307は、好ましくは、桁送り、循環、論理積、論理和、およびXORなどの様々な論理関数、ならびに加算、減算、乗算、除算のうちのいずれかを含む様々な代数関数を実行できる算術論理演算装置(ALU)402を使用する。いくつかのALU402はスカラ演算用に設計され、いくつかのALUは浮動小数点用に設計されている。諸実施形態では、データは、アーキテクチャ次第で、ビッグ・エンディアン(最下位のバイトが最上位バイト・アドレスにある場合)またはリトル・エンディアン(最下位のバイトが最下位バイト・アドレスにある場合)になる可能性がある。IBM z/Architectureはビッグ・エンディアンである。符号付きフィールドは、アーキテクチャ次第で、符号と絶対値、1の補数、または2の補数になる可能性がある。2の補数の負の値または正の値のいずれか一方はALU内で加算のみを必要とするので、ALUは減算機能を設計する必要がないという点で、2の補数は有利である。数値は一般に省略表現で記載され、12ビット・フィールドは4096バイト・ブロックのアドレスを定義するものであり、一般に、たとえば、4Kバイト(キロバイト)ブロックとして記載される。
図7を参照すると、分岐命令を実行するための分岐命令情報は、典型的に、分岐ユニット308に送られ、その分岐ユニットは分岐履歴テーブル432などの分岐予測アルゴリズムを使用して、その他の条件付き操作が完了する前に分岐の結果を予測する。現行分岐命令のターゲットは、条件付き操作が完了する前にフェッチされ、投機的に実行される。条件付き操作が完了すると、投機的に実行された分岐命令が、その条件付き操作の条件および投機された結果に基づいて、完了するかまたは廃棄される。典型的な分岐命令は、条件コードをテストし、条件コードが分岐命令の分岐要件を満たす場合にターゲット・アドレスに分岐することができ、ターゲット・アドレスは、たとえば、命令のレジスタ・フィールドまたは即値フィールド内で見つかった1を含むいくつかの数値に基づいて計算することができる。一実施形態では、分岐ユニット308は、複数の入力レジスタ回路427、428、および429と1つの出力レジスタ回路430とを有するALU426を使用することができる。分岐ユニット308は、たとえば、汎用レジスタ、デコード/ディスパッチ・ユニット306、またはその他の回路425と通信することができる。
命令グループの実行は、たとえば、オペレーティング・システムによって開始されたコンテキスト・スイッチ、コンテキスト・スイッチを引き起こすプログラム例外またはエラー、コンテキスト・スイッチを引き起こす入出力割り込み信号、または(マルチスレッド環境において)複数のプログラムのマルチスレッディング・アクティビティを含む、様々な理由で割り込むことができる。一実施形態では、コンテキスト・スイッチ・アクションは、現在実行中のプログラムに関する状態情報を保存し、次に、呼び出し中の他のプログラムに関する状態情報をロードする。状態情報は、たとえば、ハードウェア・レジスタまたはメモリ内に保存することができる。状態情報は、実行すべき次の命令を指し示すプログラム・カウンタ値、条件コード、メモリ変換情報、および設計済みレジスタの内容を含む。コンテキスト・スイッチ・アクティビティは、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、またはファームウェア・コード(マイクロコード、ピココード、またはライセンスを受けた内部コード(LIC))を単独でまたは組み合わせて実行することができる。
プロセッサは、命令で定義された方法に応じてオペランドにアクセスする。この命令は、命令の一部分の値を使用して即値オペランドを提供することができ、汎用レジスタまたは特殊目的レジスタ(たとえば、浮動小数点レジスタ)のいずれかを明示的に指し示す1つまたは複数のレジスタ・フィールドを提供することができる。この命令は、命令コード・フィールドによってオペランドとして識別された暗黙レジスタを使用することができる。この命令は、オペランド用のメモリ位置を使用することができる。オペランドのメモリ位置は、z/Architectureの長変位機構によって例証されているように、レジスタ、即値フィールド、またはレジスタと即値フィールドの組み合わせによって提供することができ、この命令は、メモリ内のオペランドのアドレスを提供するためにまとめて加算される基底レジスタ、指標レジスタ、および即値フィールド(変位フィールド)を定義する。本明細書における位置は、他の指示がない限り、メイン・メモリ(主記憶装置)内の位置を示している。
図8を参照すると、プロセッサはロード/ストア・ユニット310を使用して記憶装置にアクセスする。ロード/ストア・ユニット310は、キャッシュ/メモリ・インターフェースを介してメモリ内のターゲット・オペランドのアドレスを入手し、そのオペランドを設計済みレジスタ309または他のメモリ位置にロードすることによってロード操作を実行する場合もあれば、メモリ内のターゲット・オペランドのアドレスを入手し、設計済みレジスタ309または他のメモリ位置から入手したデータをメモリ内のターゲット・オペランド位置に保管することによってストア操作を実行する場合もある。ロード/ストア・ユニット310は、投機的である可能性があり、命令シーケンスに対して順不同の順番でメモリにアクセスすることができるが、ロード/ストア・ユニット310は命令が順序正しく実行されたという外観をプログラムに対して維持する。ロード/ストア・ユニット310は、設計済みレジスタ309、デコード/ディスパッチ・ユニット306、キャッシュ/メモリ・インターフェースまたはその他の要素455と通信することができ、記憶アドレスを計算し、操作を正しい順序に保持するためのパイプライン順序づけを提供するために、様々なレジスタ回路、ALU458、および制御ロジック463を含む。いくつかの操作は順不同になる可能性があるが、ロード/ストア・ユニットは、当技術分野で周知のように、順不同の操作が順序正しく行われたようにプログラムには見えるようにするための機能を提供する。
好ましくは、アプリケーション・プログラムが「見る」アドレスは仮想アドレスと呼ばれる場合が多い。仮想アドレスは、時には、「論理アドレス」および「実効アドレス」と呼ばれる。このような仮想アドレスは、オフセット値で仮想アドレスに接頭辞を付けること、1つまたは複数の変換テーブルを介して仮想アドレスを変換すること、変換テーブルが少なくとも1つのセグメント・テーブルとページ・テーブルとを単独でまたは組み合わせて含むこと、好ましくは、セグメント・テーブルがページ・テーブルを指し示す項目を有することを含むがこれらに限定されない、図5のDAT312などの様々なDAT技術の1つによって物理的メモリ位置にリダイレクトされるという点で仮想である。z/Architectureでは、リージョン・ファースト・テーブル、リージョン・セカンド・テーブル、リージョン・サード・テーブル、セグメント・テーブル、および任意選択のページ・テーブルを含む、変換階層が提供される。アドレス変換の性能は、仮想アドレスを関連の物理的メモリ位置にマッピングする項目を含む変換索引バッファ(TLB)を使用することによって改善される場合が多い。この項目は、DAT312が変換テーブルを使用して仮想アドレスを変換するときに作成される。仮想アドレスのその後の使用では、低速順次変換テーブル・アクセスではなく、高速TLBの項目を使用することができる。TLBの内容は、最長未使用時間(LRU)を含む、様々な置換アルゴリズムによって管理することができる。
プロセッサ106がマルチプロセッサ・システムのプロセッサである場合、それぞれのプロセッサは、入出力、キャッシュ、TLB、およびメモリなどの共用リソースを一貫性のためにインターロックされた状態に保持する責任を負っている。一実施形態では、キャッシュ・コヒーレンスを維持する際に「スヌープ」技術が使用される。スヌープ環境では、それぞれのキャッシュ・ラインには、共用を容易にするために、共用状態、排他状態、変更状態、無効状態などのうちのいずれか1つであるというマークを付けることができる。
図5の入出力ユニット304は、たとえば、テープ、ディスク、プリンタ、ディスプレイ、およびネットワークを含む周辺装置に接続するための手段をプロセッサ106に提供する。入出力ユニット304は、ソフトウェア・ドライバによってコンピュータ・プログラムに提示される場合が多い。IBMによるz/Seriesなどのメインフレームでは、チャネル・アダプタおよびオープン・システム・アダプタは、オペレーティング・システムと周辺装置との間の通信を提供する、メインフレームの入出力ユニットである。
インスツルメンテーション・データは、プロセッサ106の動作に関するデータである。一実施形態では、インスツルメンテーション・データおよびその他のシステム・レベル・メトリクスへのアクセスは、制限されているかまたは使用不能である可能性がある。コンピュータ・プロセッサは、特権状態(privileged state)(またはスーパバイザ状態)および下位特権状態(lesser-privilegedstate)(または問題状態)の下で動作する。特権状態では、プログラムは特権操作を介してすべてのシステム・リソースにアクセスする(たとえば、すべての制御レジスタおよびスーパバイザ・メモリ空間にアクセスする)ことができる。また、特権状態は、特権モードまたはスーパバイザ・モードとも呼ばれる。コンピュータ・プロセッサ上で実行されているオペレーティング・システムは特権状態で動作している可能性がある。下位特権状態は、システム・リソースへのアクセスが限定されている非特権状態(non-privileged state)である。たとえば、下位特権状態で実行されているアプリケーション・プログラムは、制御レジスタへのアクセスが限られているかまたはまったくアクセスできない可能性があり、オペレーティング・システムによってアプリケーション・プログラムに割り当てられたユーザ・メモリ空間のみにアクセスすることができる。下位特権状態は、典型的に、オペレーティング・システムの制御下で実行されるアプリケーション・プログラムに割り当てられ、いかなる特権操作も下位特権状態で実行することはできない。また、下位特権状態は、問題状態、問題モード、またはユーザ・モードとしても知られている。
下位特権状態で実行中のプログラムにとって書き込みアクセス不能であって、このように制限されたリソースの1つは、プログラム状況ワード(PSW)である。PSWは、実行すべき次の命令のプログラム・カウンタと、分岐命令によって使用可能な条件コード・フィールドと、インスツルメンテーションが使用可能であるかまたは使用不可であるかを示すためのインスツルメンテーション制御フィールドと、命令の順序付けを制御し、プログラムに割り当てられた特権状態を含むコンピュータ・プロセッサの状態を判断するために使用されるその他の情報とを含むことができる。マルチスレッド処理環境では、複数のプログラムが使用可能なコンピュータ・プロセッサのキャパシティを共用するかまたはタイム・スライシングする。プログラムのそれぞれは、関連のPSW、プログラムに割り当てられた主記憶装置にアクセスするためのアドレス変換テーブルの起点アドレス、1組の汎用レジスタ現行値、制御レジスタ、浮動小数点レジスタなどを含む、コンテキスト情報を有する。現在アクティブであるかまたは制御中のPSWは現PSWと呼ばれる。これは、現在実行中のプログラムを管理する。コンピュータ・プロセッサは、例外条件および外部刺激に応答してコンピュータ・プロセッサが迅速に他のプログラムにコンテキスト・スイッチできるようにする割り込み機能を有する。割り込みが行われると、コンピュータ・プロセッサは、その特定のクラスの割り込みについて、旧PSW位置と呼ばれる割り当て記憶位置に現PSWを入れる。コンピュータ・プロセッサは第2の割り当て記憶位置から新PSWをフェッチする。この新しいコンテキストは実行すべき次のプログラムを決定する。一実施形態では、これらの記憶位置はコンピュータ・プロセッサにとってアクセス可能なメモリ位置内に位置する。コンピュータ・プロセッサが割り込みの処理を終了すると、割り込みを処理するプログラムは、旧PSWを含む古いコンテキストをリロードし、もう一度それを現PSWにすることができ、その結果、割り込まれたプログラムは続行することができる。
PSWのフィールドは、明示的に(たとえば、命令実行がPSWビットの一部を読み取る場合)または暗黙的に(たとえば、命令フェッチ、オペランド・フェッチ、アドレス生成計算、アドレス生成ソースなどにおいて)のいずれかで参照することができる。明示参照は一般に実行時に行われ、暗黙参照は一般に命令実行中のパイプラインの種々のステージ(すなわち、命令フェッチ、命令デコード、実行時、および完了時)で行われる。PSW内の個々のフィールドは、互いに独立して参照または更新することができる。
一実施形態では、コンテキストを操作することにより、オペレーティング・システムは、コンピュータ・プロセッサによるランタイム・インスツルメンテーションを使用可能にすることを含む、コンピュータ処理リソースを制御する。ランタイム・インスツルメンテーションは、オペレーティング・システムの実行中に、ならびにオペレーティング・システムによって実行される任意のソフトウェア・アプリケーションにより、使用可能または使用不可にすることができる。ランタイム・インスツルメンテーションの使用可能/使用不可状態は、プログラムに関連するPSW内にコンテキスト情報として保存される。
ランタイム・インスツルメンテーション(RI)機構は、z/Architectureを実現するモデルで取り入れることができる。RI機構がインストールされ使用可能になると、データは、プログラム実行中にCPU内の1つまたは複数の収集バッファに収集され、その後、プログラム・バッファに報告される。保管されたそれぞれの情報単位は報告グループと呼ばれる。1つの報告グループの内容は複数のレコードで構成され、そのレコードの内容はプログラム実行中にCPUによって認識されたイベントを表している。
ランタイム・インスツルメンテーション機構が構成にインストールされると、PSWフィールド(RIビット)はランタイム・インスツルメンテーションを使用可能にする。ランタイム・インスツルメンテーション・コントロールの妥当性は、RIビットをオンにする能力を決定するが、RIが1である場合、CPUコントロールは有効であり、ランタイム・インスツルメンテーションは使用可能になる。ランタイム・インスツルメンテーション機構は、ランタイム・インスツルメンテーション・コントロール・ロード、ランタイム・インスツルメンテーション・コントロール変更、ランタイム・インスツルメンテーション放出、ランタイム・インスツルメンテーション・ネクスト、ランタイム・インスツルメンテーション・オフ、ランタイム・インスツルメンテーション・オン、ランタイム・インスツルメンテーション・コントロール・ストア、およびランタイム・インスツルメンテーション・コントロール・テストという命令を含むことができる。
ランタイム・インスツルメンテーション・コントロール・ロード(LRIC)命令は、ランタイム・インスツルメンテーションを管理するランタイム・インスツルメンテーション・コントロールを初期設定するものである。ランタイム・インスツルメンテーション・コントロール変更(MRIC)命令は、LRICによって当初確立されたランタイム・インスツルメンテーション・コントロールのすべてまたはサブセットを変更するものである。ランタイム・インスツルメンテーション放出(RIEMIT)命令は、収集バッファにそれを保管することにより、汎用レジスタの値を収集するものである。ランタイム・インスツルメンテーション・ネクスト(RINEXT)命令は、RINEXT後に次の順次命令(NSI)の指示サンプリングを実行するものである。ランタイム・インスツルメンテーション・オフ(RIOFF)命令は、ランタイム・インスツルメンテーションを使用不可にするものである。ランタイム・インスツルメンテーション・オン(RION)命令は、ランタイム・インスツルメンテーションを使用可能にするものである。ランタイム・インスツルメンテーション・コントロール・ストア(STRIC)命令は、ランタイム・インスツルメンテーション・コントロールの現行値を指定の記憶位置に入れるものである。ランタイム・インスツルメンテーション・コントロール・テスト(TRIC)命令は、ランタイム・インスツルメンテーション・コントロールを検査するものである。有効である場合、コントロール変更インジケータ(controls-altered indicator)の状態が設定される。
ランタイム・インスツルメンテーション機構は、測定アラート外部割り込みを保留にするための能力を含む。ランタイム・インスツルメンテーションによって収集され、プログラム・バッファに報告される情報の一部は、モデルに依存するものであり、したがって、定義されていない。ランタイム・インスツルメンテーション機構によって提供されるサンプルおよびデータは、性能特性の統計的推定のためのものであり、実質的に正確なものであり、反復可能ではない可能性がある。たとえば、サンプリング・モードにかかわらず、例外を引き起こしたかまたは特定のシステム内部アクティビティに関連するサンプル命令の結果、報告グループの保管が行われるかどうか、ならびに、保管された場合にランタイム・インスツルメンテーション・データに含まれるモデル依存データが影響を受けるかどうかは予測不能である。
収集バッファは、1組のレコードを取り込むために使用され、そのレコードの内容はプログラム実行中にプロセッサによって認識されたイベントについて報告するものである。例としては、1つまたは複数の実行分岐(taken branch)の実行、トランザクション実行アボート・イベント、命令フェッチ・キャッシュ・ミス、データ・フェッチまたはストア・キャッシュ・ミス、RIEMIT命令のオペランドなどがある。RIEMIT命令の実行は、収集バッファにそれを保管することにより、汎用レジスタの値を収集する。追加のデータは、命令データ・バッファなどのその他のバッファに収集するかあるいは保管するかまたはその両方を行うことができる。
報告は報告コントロールの対象となる。サンプル命令が識別されると、それぞれの報告コントロールは対応する条件のチェックを使用可能にする。対応する条件が存在する場合、報告グループが形成され保管される。いかなる報告コントロールも使用可能ではないかまたは使用可能になっている報告コントロールについて対応する条件が存在しない場合、報告グループは保管されない。サンプル命令について報告されたデータは、命令データ・バッファおよびその他のモデル依存ソースから取得され、その後、報告グループの1つまたは複数のレコードの内容を作成するために使用され、このようなレコードの1つは命令レコードである。
報告グループ・ストアに取り込むことができるレコード・タイプとしては、フィラー、エクストラ、開始、タイムスタンプ、命令、放出、TXアボート、呼び出し、戻り、および転送を含む。フィラー・レコード(filler record)は、収集バッファ内の有効なレコードの数が現行報告グループ・サイズの報告グループをいっぱいにするには不十分であるときに報告グループ内で使用される。エクストラ・レコード(extra record)は、報告グループのエクストラ・セクション内で使用することができる。開始レコード(begin record)は、第1の報告グループの第1のレコードである。タイムスタンプ・レコード(timestamp record)は、第1の報告グループ以外のすべての報告グループのレコード0として保管される。命令レコード(instruction record)は、ある報告グループがその報告グループの最後のレコードとしてサンプル命令について保管されるときに作成される。放出レコード(emit record)は、RIEMITの正常実行によって作成される。トランザクション実行(TX)モード・アボート・レコード(transaction-execution mode abort record)は、暗黙アボートまたはトランザクション・アボート命令の実行のいずれかによって作成される。呼び出しレコード(call record)は、呼び出しタイプの分岐命令としてカテゴリ化された分岐命令の実行によって作成される。戻りレコード(return record)は、戻り命令としてカテゴリ化された戻りタイプの分岐命令の実行によって作成される。転送レコード(transfer record)は、特定の条件コード基準を満たす分岐命令の実行によって作成される。
図9は、一実施形態において実現することができるプロセッサのランタイム・インスツルメンテーションのためのシステムの概略図である。一実施形態では、システム500は図1のプロセッサ106などの中央演算処理装置(CPU)を含む。一実施形態では、プロセッサ106はシングル・プロセッサである。代替一実施形態では、プロセッサ106はマルチコア・プロセッサの単一処理コアである。一実施形態では、プロセッサ106は可変速度で動作することができる。
一実施形態では、プロセッサ106はレジスタ510をさらに含む。レジスタ510は、プロセッサ106によって使用するためのデータ・ワードを保管することができるハードウェア・レジスタである。レジスタ510は、プロセッサ106によってアクセス可能なデータ・ビットを保管するための1つまたは複数のラッチを含む。レジスタ510は、たとえば、汎用レジスタおよび制御レジスタを含むことができる。プロセッサ106は、レジスタ510と通信状態にあるインスツルメンテーション・モジュール506をさらに含む。インスツルメンテーション・モジュール506は、プロセッサ106のインスツルメンテーションを制御する処理回路である。インスツルメンテーション・モジュール506は、1つまたは複数の実行分岐の実行パス、トランザクション実行アボート・イベント、様々なランタイム・オペランド、タイムスタンプ情報などのインスツルメンテーション・データをプロセッサ106から直接収集するように構成される。インスツルメンテーション・モジュール506は、プロセッサ106からインスツルメンテーション・データを収集し、収集バッファ508にインスツルメンテーション・データを保管する。一実施形態では、収集バッファ508は、インスツルメンテーション・モジュール506から受け取ったデータを収集するサーキュラ・バッファであり、サーキュラ・バッファは、いっぱいになると、新しいデータで最も古いデータを上書きする。
プロセッサ106は、1つまたは複数のオペレーティング・システム516と1つまたは複数のアプリケーション518とを実行する。1つまたは複数のオペレーティング・システム516と1つまたは複数のアプリケーション518は、ハード・ディスク、CD/ROM、フラッシュ・メモリなどの記憶装置520に保管され、現在実行中のオペレーティング・システムあるいはアプリケーションまたはその両方の1つまたは複数のアクティブ部分を保管するために予約されたメイン・メモリ514内のランタイム・メモリ504のエリアにロードされ、そのアクティブ部分はページと呼ばれ、必要に応じて記憶装置520からランタイム・メモリ504にロードされる。一実施形態では、それぞれのオペレーティング・システムは、ハイパバイザ(図示せず)によって管理され、プロセッサ106によって実行される仮想計算機として実行される。
一実施形態では、プロセッサ106は、メイン・メモリ514から現在実行中のオペレーティング・システムまたはアプリケーションについてメイン・メモリ514内のPSWデータ512からPSW512をレジスタ510にロードし、たとえば、レジスタ510内に1つまたは複数のプロセッサ設定を設定する。一実施形態では、レジスタ510内のPSWは、インスツルメンテーション・モジュール506を使用可能にし制御するための1つまたは複数のビットを含む。
1つまたは複数のアプリケーション518は、特定のオペレーティング・システム上で実行されるようにコンパイルされたソフトウェア・アプリケーション、インタープリタ(たとえば、Java(TM))上で実行される解釈済みコード、またはオペレーティング・システム・サポート・スレッド(たとえば、プロセス管理、デーモンなど)を含む。1つまたは複数のオペレーティング・システム516あるいは1つまたは複数のアプリケーション518またはその両方のそれぞれは、インスツルメンテーション・データの収集を開始または停止するようインスツルメンテーション・モジュール506をトリガするための命令を実行することができる。
一実施形態では、1つまたは複数のアプリケーション518のうちの1つは、サンプル命令であると判断された命令を実行し、それにより、サンプル命令の実行完了時にサンプル・ポイントを作成し、次に、インスツルメンテーション・モジュール506により、アプリケーションが収集したデータを収集バッファ508からアプリケーションにとってアクセス可能なメイン・メモリ514内のプログラム・バッファ522に移動する。メイン・メモリ514は、当技術分野で既知の任意のアドレス指定可能なメモリにすることができる。一実施形態では、メイン・メモリ514は、時にはキャッシュと呼ばれる高速アクセス・バッファ記憶装置を含むことができる。それぞれのCPUは関連のキャッシュを有することができる。追加の一実施形態では、メイン・メモリ514はダイナミック・ランダム・アクセス・メモリ(DRAM)である。さらに他の一実施形態では、メイン・メモリは、アプリケーションによってアクセス可能なコンピュータ・ハード・ディスクまたはフラッシュ・メモリなどの記憶装置である。
ランタイム・インスツルメンテーション・コントロールを構成するために、プロセッサ106はランタイム・インスツルメンテーション・コントロール・ロード(LRIC)命令をサポートする。本明細書でさらに説明する特定のLRICフィールド以外に、その他の機能性をサポートするために追加のフィールドを定義できることが理解されるであろう。LRIC命令は、ランタイム・インスツルメンテーションをロードし、最初にこれを構成するために使用することができ、図9のインスツルメンテーション・モジュール506によってサポートされる。一実施形態では、インスツルメンテーション・モジュール506は、ランタイム・インスツルメンテーション・モジュール506とも呼ばれ、ランタイム・インスツルメンテーション・コントロールおよび報告コントロールを実現する。ランタイム・インスツルメンテーション・コントロールの現行状態は、ランタイム・コントロール・ストア(STRIC)命令を使用して図9のレジスタ510からメイン・メモリ514に保管することができる。本明細書では、ランタイム・インスツルメンテーション・コントロールの対応する値の状態に言及するために、LRIC命令のオペランドとしてロード可能な制御ブロックの様々なフィールドの定義も使用される。
図10は、一実施形態において特権状態によって設定可能なコントロールを含むランタイム・インスツルメンテーション・コントロール制御ブロック(RICCB)の一部分を描写している。制御ブロックの一部分600は、図10に関連して記載されているもの以外の追加の値を含むことができる。制御ブロックの一部分600に対する変更は、LRIC命令によって実行することができる。
制御ブロックのこの部分は妥当性ビット602(Vビット)を含む。プロセッサ内のランタイム・インスツルメンテーション・コントロールは以前LRIC命令によって設定されているので、妥当性ビット602はその設定の妥当性を示すものである。
制御ブロックは、下位特権状態プログラムがMRIC命令を実行することが許可されているかどうかを判断するために使用されるSビット604も含む。Kビット606は、下位特権状態プログラムが、起点アドレスおよびランタイム・インスツルメンテーション・コントロールの限界アドレスなどのランタイム・インスツルメンテーション・コントロールに関して半特権状態(semi-privileged state)で実行することが許可されているかどうかを示す。Hビット608は、アドレス・コントロール(すなわち、起点アドレス、限界アドレス、および現行アドレス)が1次仮想アドレス空間またはホーム仮想アドレス空間を参照するかどうかを判断する。0ビット610は、無視され、0として扱われる。
下位特権状態サンプル報告制御ビット612(Psビット)は下位特権状態プログラムに併せて使用される。下位特権状態にあって、ランタイム・インスツルメンテーション・コントロール内のPsビット612が0である場合、ランタイム・インスツルメンテーション・コントロールの報告コントロールは、ランタイム・インスツルメンテーションが使用可能であるときに無視され、したがって、報告グループを保管させない。下位特権状態にあって、ランタイム・インスツルメンテーション・コントロール内のPsビット612が1である場合、報告コントロールは、チェックされ、その定義済み機能に応じて使用される。
スーパバイザ状態サンプル報告制御ビット614(Qsビット)はスーパバイザ状態プログラムに併せて使用される。スーパバイザ状態にあって、ランタイム・インスツルメンテーション・コントロール内のQsビット614が0である場合、ランタイム・インスツルメンテーション・コントロールの報告コントロールは、ランタイム・インスツルメンテーションが使用可能であるときに無視され、したがって、報告グループを保管させない。スーパバイザ状態にあって、ランタイム・インスツルメンテーション・コントロール内のQsビット614が1である場合、報告コントロールは、チェックされ、その定義済み機能に応じて使用される。
下位特権状態収集バッファ制御ビット616(Pcビット)は図9の収集バッファ508に対する更新を制御する。下位特権状態にあって、ランタイム・インスツルメンテーション・コントロール内のPcビット616が0である場合、ランタイム・インスツルメンテーション・コントロールの収集バッファ・コントロールは、ランタイム・インスツルメンテーションが使用可能であるときに無視され、収集バッファ508の更新は防止される。下位特権状態にあって、ランタイム・インスツルメンテーション・コントロール内のPcビット616が1である場合、収集バッファ・コントロールは、チェックされ、その定義済み機能に応じて使用される。
スーパバイザ状態収集バッファ制御ビット618(Qcビット)は収集バッファ508に対する更新を制御する。スーパバイザ状態にあって、ランタイム・インスツルメンテーション・コントロール内のQcビット618が0である場合、ランタイム・インスツルメンテーション・コントロールの収集バッファ・コントロールは、ランタイム・インスツルメンテーションが使用可能であるときに無視され、収集バッファ508の更新は防止される。スーパバイザ状態にあって、ランタイム・インスツルメンテーション・コントロール内のQcビット618が1である場合、指示された収集バッファ・コントロールは、チェックされ、その定義済み機能に応じて使用される。
Gビット620は、休止割り込みとも呼ばれるランタイム・インスツルメンテーション休止割り込みの保留コントロールである。Gビット620が0である場合、休止割り込みは保留にならない。Gビット620が1である場合、休止割り込みは保留になる。プログラム・バッファ522内の第1の報告グループが書き込まれると、Gビット620は0に設定される。すなわち、ランタイム・インスツルメンテーション・プログラム・バッファ起点アドレス(ROA)702が図11のランタイム・インスツルメンテーション・プログラム・バッファ現行アドレス(RCA)706と等しい場合、Gビット620は0に設定される。プログラム・バッファ522内に第1の報告グループ以外のものを保管しようという試みが行われると、Gビット620は、ランタイム・インスツルメンテーション休止条件が存在しない場合に0に設定され、報告グループは保管される。プログラム・バッファ522内に第1の報告グループ以外のものを保管しようという試みが行われると、Gビット620は、ランタイム・インスツルメンテーション休止条件が存在する場合に1に設定され、報告グループは保管されない。
Uビット622は、バッファ・フル割り込み(buffer-fullinterruption)および休止割り込みに関する使用可能化コントロールである。Uビット622が0である場合、割り込み要求の生成は使用不可になり、保留である場合、保留のままになる。
Lビット624はバッファ・フル割り込みの保留コントロールである。Lビット624が0である場合、バッファ・フル割り込みは保留にならない。Lビット624が1である場合、バッファ・フル割り込みは保留になる。
キー・フィールド626は、その値が報告グループのストアに関する記憶保護キーとして使用される、4ビットの符号なし整数である。報告グループのストアは、記憶キーが記憶アクセスに関する要求に関連するアクセス・キーと一致する場合にのみ許可され、フェッチは、記憶キーがアクセス・キーと一致する場合または記憶キーのフェッチ保護ビットが0である場合に許可される。記憶キーの4つのアクセス制御ビットがアクセス・キーと等しい場合またはアクセス・キーが0である場合にキー同士が一致する。
図11は、MRICが半特権モードで実行することが許可されている(すなわち、Kビットが1である)場合のRICCB制御ブロックの一部分を描写している。制御ブロック700は、ランタイム・インスツルメンテーション・コントロールの初期設定のためのLRIC命令のオペランドにすることもできる。制御ブロック700は、図11に関連して記載されているもの以外の追加の値を含むことができる。一実施形態では、MRIC命令オペランドのうち、他の指定が行われていないセクションは、下位特権状態プログラムによってアクセス不能である。半特権モードが許可されると、ランタイム・インスツルメンテーション・プログラム・バッファ起点アドレス(ROA)702およびランタイム・インスツルメンテーション・プログラム・バッファ限界アドレス(RLA)704は下位特権状態プログラムによってMRIC命令とともに設定される。ROA702は、図9のプログラム・バッファ522の最初のバイトの位置である。RLA704は、プログラム・バッファ522の最後のバイトの位置を示している。
一実施形態では、ランタイム・インスツルメンテーション・プログラム・バッファ現行アドレス(RCA)706は、MRIC命令によって更新することができる。RCA706は、保管すべき次の報告グループのプログラム・バッファ522内の位置である。RCA706は、報告グループ・サイズ・フィールド744(RGSフィールド)を検査し、プログラム・バッファ522のアドレスを形成するために使用される有効ビット位置の数に影響を及ぼす。64ビットのRCA706は、ワード0、ワード1のビット位置0〜26−RGS、および右に付加されたRGS+5つの2進0である。これは、プログラム・バッファ522に保管されるその後の報告グループの、図9のプログラム・バッファ522内の開始位置である。報告グループは、インスツルメンテーション・モジュール506によって作成され、その後、プログラム・バッファ522に保管される情報単位である。一実施形態では、RCA706によって指定されたRGSフィールド744がランタイム・インスツルメンテーション・コントロールの現行報告グループ・サイズと等しくない(すなわち、RCA706がRGSフィールド744を変更することになる)場合、RCA706はROA702に設定される。
残存サンプル間隔カウント・フィールド742(RSICフィールド)は、MRIC命令を使用して下位特権プログラムによって更新することができる。RSICフィールド742は、残存サンプル間隔カウントを示す64ビットの符号なし整数を含む。ランタイム・インスツルメンテーション・コントロール内のRSICフィールド742の値が0であるかまたはスケーリング・ファクタ・フィールド740(SFフィールド)内の値と等しく、ランタイム・インスツルメンテーションが使用可能である場合、次のサンプル間隔は、サンプリング・モード708(M)およびSFフィールド740の値に基づいて完全間隔になる。RSICフィールド742が非ゼロであり、SFフィールド740より小さく、ランタイム・インスツルメンテーションが使用可能である場合、次のサンプル間隔は部分間隔になる。RSICフィールド742が非ゼロであり、SFフィールド740の値より大きく、ランタイム・インスツルメンテーションが使用可能である場合、次のサンプル間隔は延長間隔になる。延長間隔が切れると、次の間隔はSFフィールド740の値に基づくものになる。RSICフィールド742が非ゼロ値に設定されると、そのフィールドは、SFフィールド740も対象となる同じモデル依存最大限界の対象となる。RSICフィールド742の元の値が0である場合、サンプリング・モードは、RSICフィールド742がLRICおよびMRIC命令の実行中にSFフィールド740内の値に設定されるかどうかあるいはランタイム・インスツルメンテーションが使用可能になるまでそれが0を示し続けるかどうかを規定することになる。
SFフィールド740は、その値がユニットのスケーリング・ファクタ・カウントである、64ビットの符号なし整数を含む。ユニットの寸法はモード・フィールド708(Mフィールド)から決定される。RSICフィールド742内の値が0である場合、SFフィールド740は、0まで減分されるRSICフィールド742の初期値を提供し、0の時点で現行命令はサンプル命令として認識され、間隔カウントはSFフィールド740の値からリフレッシュされる。SFフィールド740の有効値は1〜264−1の範囲内である。0が指定された場合、値1が想定される。しかし、それぞれのモデルはSFフィールド740の最小値と最大値の両方を有することができる。また、最小値と最大値はモード・フィールド708に基づいて異なる可能性もある。最小値より小さい値が指定された場合、モデル依存最小値がロードされる。最大値より大きい値が指定された場合、モデル依存最大値がロードされる。
DC制御フィールド736は、その値がデータ・フェッチまたはストア・キャッシュ・ミスに関連するキャッシュレイテンシ・レベルを指定する、4ビットの符号なし整数である。すなわち、サンプル命令ではデータ・アクセス・キャッシュ・ミスが発生している。他のランタイム・インスツルメンテーション・コントロールによって禁止されない限り、そのデータ・アクセスが数値的にDC制御フィールド736の値によって指定されたレベルより高いかまたはそれに等しいキャッシュレイテンシ・レベルでミスを認識したサンプル命令を表す報告グループを保管しようという試みが行われる。データ・アクセスに関するキャッシュ構造およびキャッシュレイテンシ・レベルはモデルに依存する。複数のオペランドまたは長いオペランドを含む命令の場合、オペランド・アクセスが行われる場合、どのオペランド・アクセスが報告コントロールに使用されるかはモデルに依存する。モデル依存挙動は、DC制御フィールド736の値を無視する可能性があり、したがって、報告グループを保管するための理由としてそれを使用しない可能性がある。
ICフィールド734は、その値が命令フェッチ・キャッシュ・ミスに関連するキャッシュレイテンシ・レベルを指定する、4ビットの符号なし整数である。すなわち、サンプル命令のフェッチでは命令フェッチ・キャッシュ・ミスが発生している。ICフィールド734とDC制御フィールド736の両方について、キャッシュレイテンシ・レベルは、特定のキャッシュ・レベル・アクセスが監視プロセッサからどのくらい離れているかを抽象化したものである。レイテンシ・レベルは、プロセッサと主記憶装置との間のネストされたキャッシュ・レベルの量と、このようなキャッシュ・レベルが複数のプロセッサ間で共用される方法との組み合わせによって決まる。より大きいレイテンシ・レベルは一般に、より時間のかかるアクセスに対応する。ICフィールド734およびDC制御フィールド736内の値は、0を基点とするキャッシュレイテンシ・レベルの識別であると考えることができる。たとえば、0という値はL1キャッシュ(すなわち、プロセッサに最も近いキャッシュ)に対応する。したがって、1という値は次の層のキャッシュであり、これはL2キャッシュとして知られ、マシンによってはL1.5キャッシュとしても知られている可能性がある。2〜15という値は、メイン・メモリ自体は含まないが、メイン・メモリに到達するまでの追加のキャッシュレイテンシ層の論理的進行を指定する。一般に、キャッシュ構造は15層もの深さにはならない。したがって、ICフィールド734およびDC制御フィールド736内の15という値は特殊ケースとして解釈され、命令フェッチまたはデータ・アクセスに関するキャッシュ・ミスは、それぞれ、キャッシュレイテンシ・レベルにかかわらず、報告グループのストアを生成するために認識されないことを意味する。他のランタイム・インスツルメンテーション・コントロールによって禁止されない限り、そのフェッチが数値的にICフィールド734の値によって指定されたレベルより高いかまたはそれに等しいキャッシュレイテンシ・レベルでミスを認識したサンプル命令を表す報告グループを保管しようという試みが行われる。命令フェッチに関するキャッシュ構造およびキャッシュレイテンシ・レベルはモデルに依存する。モデル依存挙動は、IC制御フィールド734の値を無視する可能性があり、したがって、報告グループを保管するための理由としてそれを使用しない可能性がある。
キャッシュレイテンシ・レベル・オーバライド報告制御ビット732(Fビット)は非分岐命令および分岐予測コントロールに関するものである。ランタイム・インスツルメンテーション・コントロール内のFビット732が0である場合、ランタイム・インスツルメンテーション・コントロールのキャッシュ報告コントロール(ICフィールド734およびDC制御フィールド736)は、チェックされ、その定義済み機能に応じて使用される。ランタイム・インスツルメンテーション・コントロールの分岐予測コントロール(BPxn722、BPxt724、BPti726、およびBPni728ビット)は、チェックされ、その定義済み機能に応じて使用される。Fビット732が1である場合、これらの同じコントロールは無視され、他のコントロールによって禁止されない限り、報告グループは保管される。
データキャッシュミス制御ビット730(Dビット)は、報告グループを保管すべきかどうかを示す。Dビット730が1である場合、サンプル命令に関するモデル依存データを含む報告グループのエクストラ・セクションにエクストラ・タイプ・レコードが入る場合もあれば、入らない場合もある。
MRIC命令は、分岐予測(BP)報告コントロール(BPxn722、BPxt724、BPti726、およびBPni728)を含む。ランタイム・インスツルメンテーション・コントロール内のBP報告制御ビットが0である場合、対応する条件はチェックされない。BP報告制御ビットが1であり、対応する分岐予測条件が存在する場合、報告グループは保管される。
BPxnビット722は、1である場合、分岐予測情報のチェックを使用可能にする。したがって、サンプル分岐が実行されると間違って予測されたが、実行されなかった場合、報告グループは保管される。
BPxtビット724は、1である場合、分岐予測情報のチェックを使用可能にする。したがって、サンプル分岐が実行されないと間違って予測されたが、実行された場合、報告グループは保管される。
BPtiビット726は、1である場合、分岐予測情報のチェックを使用可能にする。したがって、サンプル分岐が実行されると正しく予測されて実行されたが、分岐ターゲットが間違って予測された場合、報告グループは保管される。
BPniビット728は、1である場合、分岐予測情報のチェックを使用可能にする。したがって、サンプル分岐が実行されないと正しく予測されて実行されなかったが、分岐ターゲットが間違って予測された場合、報告グループは保管される。
トランザクション実行モード・レコード・ビット720(Xビット)の使用可能化コントロールは、トランザクション実行モード・アボート・レコードの収集を制御する。ランタイム・インスツルメンテーション・コントロール内のXビット720が0である場合、トランザクション実行モード・アボート・レコードは収集されない。Xビット720が1である場合、トランザクション実行モード・アボート・レコードは収集され、図9の収集バッファ508に入る。モデルにトランザクション実行機構がインストールされていない場合、Xビット720は無視される。
RIEMIT命令制御ビット718(Eビット)はRIEMIT命令の実行を制御する。ランタイム・インスツルメンテーション・コントロール内のEビット718が0であるかまたはランタイム・インスツルメンテーションが使用可能であるときに無視され、0として扱われる場合、RIEMITはノーオペレーションを実行する。Eビット718が1であり、その他の点で無視されない場合、RIEMITはその定義済み機能を実行することが可能になる。
Jビット746は、0である場合、マスク値にかかわらず、条件付き分岐(BC)命令がその他タイプの分岐カテゴリに入ることを指定する。Jビット746が1である場合、15というマスクを指定するBC命令は戻りタイプの分岐カテゴリに入る。BC命令が1〜14というマスクを指定する場合、これはJビット746による影響を受けず、必ずその他タイプの分岐カテゴリに入る。戻りタイプの分岐カテゴリにある場合、Rビット716は図9の収集バッファ508への含有を制御する。その他タイプの分岐カテゴリにある場合、Bビット748は収集バッファ508への含有を制御する。また、その他タイプの分岐カテゴリは、転送タイプの分岐カテゴリとして示すこともできる。
命令アドレス・コード・ビット714(Cビット)は呼び出しタイプの分岐の使用可能化を制御する。ランタイム・インスツルメンテーション・コントロール内のCビット714が1であり、その命令が呼び出しタイプの分岐である場合、収集バッファ508が更新される。呼び出しタイプと戻りタイプの両方の分岐のモデル依存検出が組み合わされる場合、Cビット714は両方のタイプについて機能し、Rビット716は効果的ではない。
Rビット716は、戻りタイプの分岐の使用可能化コントロールである。ランタイム・インスツルメンテーション・コントロール内のRビット716が1であり、その命令が戻りタイプの分岐である場合、収集バッファ508が更新される。
Bビット748は、呼び出しタイプおよび戻りタイプの分岐以外の分岐の使用可能化コントロールである。ランタイム・インスツルメンテーション・コントロール内のBビット748が1であり、その命令がランタイム・インスツルメンテーションによって認識されたその他タイプの分岐である場合、収集バッファ508が更新される。
最大アドレス超過ビット712(MAEビット)は、1に設定された場合、命令アドレス・コード(Cフィールド)が1に設定されている1つまたは複数の報告グループが保管されたことを示す。MAEビット712が1に設定されると、ランタイム・インスツルメンテーションの実行を継続しても、その設定を0に戻さない。MAEビット712を0として指定するLRIC命令またはMRIC命令の実行は、MAEビット712を0に設定することになる。
ランタイム・インスツルメンテーション・ネクスト(RINEXT)制御ビット710(Nビット)は、ランタイム・インスツルメンテーション・ネクスト命令の使用可能化を制御し、これはサンプル命令の実行を制御する。ランタイム・インスツルメンテーション・コントロール内のNビット710が0であるかまたは無視され、0として扱われる場合、RINEXTはノーオペレーションを実行する。Nビット710が1であり、その他の点で無視されない場合、RINEXTはその定義済み機能を実行することが可能になる。
モード・フィールド708(Mフィールド)は、ランタイム・インスツルメンテーション・コントロール内のその値がランタイム・インスツルメンテーション・コントロールに関するサンプリング・モードを指定する、4ビットの符号なし整数である。サポートされるサンプリング・モードは、CPUサイクルのカウントあるいは命令のカウントに基づくサンプリングを含むか、サンプル命令に応答してサンプリングするよう指示されるか、もしくは1つまたは複数のサンプル・ポイントを間接的に指定する可能性がある。
報告グループ・サイズ・フィールド744(RGS)は、その値が報告グループのレコード数(RRG)を指定する、3ビットの符号なし整数である。報告グループ内のレコード数は、開始/タイムスタンプ・レコードおよび命令最終レコードを含む2つのレコードから、256個のレコードまで、変化する可能性がある。一実施形態では、上限はモデルに依存する可能性がある。報告グループ内に入れられる16バイトのレコードの数は2(RGS+1)である。
1次CPU能力(primary-CPU capability)抑制制御ビット738(Yビット)および2次CPU能力(secondary-CPU capability)抑制制御ビット739(Zビット)はひとまとめにして抑制制御と呼ばれる。報告グループの保管の抑制は、保管しようという試みが実行されないことを意味する。構成内のすべてのCPUのCPU能力が同じである場合、抑制制御は効果的ではなく、いなかる抑制も行われない。ある構成において、あるCPUのCPU能力が他のCPUの能力とは異なる場合、抑制制御は有効であり、少なくとも1つのCPUはCPU能力または1次CPU能力で動作していると言われ、少なくとも1つの他のCPUは2次CPU能力で動作していると言われる。1次および2次CPU能力は異なる動作速度である。Yビット738およびZビット739がどちらも0である場合、抑制は行われない。Yビット738が0であり、Zビット739が1である場合、CPU、たとえば、プロセッサ106が2次CPU能力で動作している場合に抑制が行われる。Yビット738が1であり、Zビット739が0である場合、CPU、たとえば、プロセッサ106が1次CPU能力で動作している場合に抑制が行われる。Yビット738およびZビット739がどちらも1である場合、抑制が行われる。
サンプル・ポイント・アドレス(SPA)フィールド750はSPAコントロールである。SPAフィールド750は、指示サンプリングおよび間隔ベースのサンプリングのうちの1つまたは複数と組み合わせて追加のサンプリング・モードとしてアドレスによる間接サンプリングを可能にするために使用することができる。複数の同時サンプリング・モードをサポートしていない実施形態では、SPAフィールド750を省略することができる。
サンプル・ポイント・アドレス・タイプ(SPAT)フィールド752はSPAタイプ・コントロールである。SPATフィールド752は、サンプル・ポイント・アドレス・アレイ524内のアドレスをある命令の命令アドレスと比較しなければならないかまたはある命令のオペランドのアドレスと比較しなければならないかを制御するためにSPAフィールド750に併せて使用することができる。SPAフィールド750は、複合型SPA制御フィールドを形成するためにSPATフィールド752と組み合わせることができる。代替一実施形態では、サンプル・ポイント・アドレス・アレイ524内に保管されたそれぞれのアドレスは、個別に割り当て可能なサンプル・ポイント・アドレス・タイプを有することができる。
図11の上記のフィールドおよびビットは、フィールドの配置および命名の一例であり、明瞭にするために本明細書に提供されている。その他の諸実施形態では、これらのフィールドのサブセットのみが使用されるか、任意の順序または位置でフィールドが使用されるか、あるいは異なる名前でフィールドで示されるか、またはこれらの組み合わせになる可能性があることが理解されるであろう。
ランタイム・インスツルメンテーションがインストールされ使用可能になると、いくつかのイベントおよびデータを収集バッファ508に取り込むことができる。収集バッファ508は、その内容がプログラム実行中にプロセッサ106によって認識されたイベントについて報告する、1組のレコードを取り込むために使用される。例としては、1つまたは複数の実行分岐の実行、トランザクション実行アボート・イベント、キャッシュ・ミス、およびランタイム・インスツルメンテーション放出命令のオペランドなどである。ICおよびDC制御フィールド734および736は、命令またはデータ・プリフェッチ挙動を改善するために何らかの修正アクションを講じることについてそのプログラムが関心があると思われるレベルを設定する。RIEMIT命令の実行は、それを収集バッファ508に保管することにより汎用レジスタの値を収集する。ランタイム・インスツルメンテーション命令レコードを構築するためにモデル依存サンプル命令データを収集するために使用される命令データ・バッファ(IDB)(描写せず)などのその他のバッファに追加のデータを収集するかあるいは保管するかまたはその両方を行うことができる。
収集されたランタイム・インスツルメンテーション情報はサンプリング・ベースで報告される。命令ストリームからの命令はサンプリングされる。サンプリングされた命令はサンプル命令と呼ばれる。サンプル命令を決定するためのいくつかのモードは、ランタイム・インスツルメンテーションが使用可能であるときに以下のように定義される。サイクル・カウント・モードでは、いずれにしても現行間隔に関するカウントを提供するために使用されるSF740またはRSIC742のいずれかに指定されたCPUサイクルの数がカウントである。このカウントは、サンプリング・モードに関連するイベントに応答して調整される。たとえば、このカウントは、プロセッサ106が動作状態にあるときに減分される可能性がある。このカウントが0などのしきい値まで減分されると、現行命令はサンプル命令として認識され、カウントはSF740の値に再初期設定され、次のサイクルから減分され始める。サンプル命令の実行が完了すると、適切であれば、報告が行われる。
命令カウント・モードでは、いずれにしても現行間隔に関するカウントを提供するために使用されるSF740またはRSIC742のいずれかにカウントが指定される。単一動作単位で構成される命令の場合、このカウントは、カウントを調整するために使用されるイベントとして命令の完了時に減分される。命令は、このカウントが0などのしきい値まで減分されるとサンプル命令になる。複数動作単位で構成される命令の場合、このカウントは以下の方法の1つで減分することができる。
a.割り込み可能命令の場合、部分完了までのすべての動作単位は、そのカウントが減分される1つのカウント単位を表す。
b.割り込み可能命令の場合、最新の部分完了以降、最終完了までのすべての動作単位は、そのカウントが減分される1つのカウント単位を表す。
c.命令のパラメータによって指定された処理のCPU決定部分を実行した後に完了する命令の場合、その完了はそのカウントが減分される1つのカウント単位を表す。
d.上記のa〜cのカテゴリには入っていないが、複数動作単位を実行した後に完了する命令の場合、最後の動作単位の完了は、そのカウントが減分される1つのカウント単位を表す。
命令は、その命令の任意のカウント単位についてそのカウントが0まで減分されるとサンプル命令になる。0などのしきい値に到達すると、カウントはSF740の値に再初期設定され、上記のa〜dに記載されているようにカウントダウンし始める。カウント・モードのすべてのケースでは、サンプル命令の最後の動作単位が完了した後に、適切であれば、報告が行われる。
a.割り込み可能命令の場合、部分完了までのすべての動作単位は、そのカウントが減分される1つのカウント単位を表す。
b.割り込み可能命令の場合、最新の部分完了以降、最終完了までのすべての動作単位は、そのカウントが減分される1つのカウント単位を表す。
c.命令のパラメータによって指定された処理のCPU決定部分を実行した後に完了する命令の場合、その完了はそのカウントが減分される1つのカウント単位を表す。
d.上記のa〜cのカテゴリには入っていないが、複数動作単位を実行した後に完了する命令の場合、最後の動作単位の完了は、そのカウントが減分される1つのカウント単位を表す。
命令は、その命令の任意のカウント単位についてそのカウントが0まで減分されるとサンプル命令になる。0などのしきい値に到達すると、カウントはSF740の値に再初期設定され、上記のa〜dに記載されているようにカウントダウンし始める。カウント・モードのすべてのケースでは、サンプル命令の最後の動作単位が完了した後に、適切であれば、報告が行われる。
指示サンプリング・モードでは、Nビット710が1であり、RINEXT命令が正常に実行されると、指示サンプリングが行われる。サンプル命令は、RINEXT命令後の次の順次命令(NSI)である。次の順次命令が実行タイプの命令である場合、サンプル命令は実行タイプの命令のターゲット命令になる。指示サンプリングは、サイクル・カウントまたは命令カウント・モードにあるときに行うことができる。カウント・サンプリングは、指示サンプリングならびにその結果行われるアクションのいずれかに併せて継続し、その他の影響を受けることはないが、カウント・サンプリングから決定されたサンプル命令が指示サンプリングによって決定された命令と同じである場合に、2つの報告グループが保管されないことを除く。
間接サンプリングは、ランタイム・インスツルメンテーション命令セットの拡張によりプロセッサ106によってサポートすることができる。ランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ロード(RILSPA)命令は、サンプル・ポイント・アドレスおよびアドレス・タイプの値を図9のサンプル・ポイント・アドレス・アレイ524にロードするために使用することができる。サンプル・ポイント・アドレス・アレイ524はレジスタ510の一部にすることができる。サンプル・ポイント・アドレス・アレイ524内のサンプル・ポイント・アドレスおよびアドレス・タイプは、インスツルメント命令ストリーム内の1つまたは複数のサンプル・ポイントをアドレスおよびアドレス・タイプにより間接的に識別するものである。サンプル・ポイント・アドレス・アレイ524内の値は、ランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ストア(RISSPA)命令を使用して、読み取り、他の位置に保管することができる。ランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・クリア(RICSPA)命令は、サンプル・ポイント・アドレス・アレイ524内の値をクリアするために使用することができる。マルチプロセッシングかつマルチタスクの環境でRISSPA、RILSPA、およびRICSPA命令を使用すると、インスツルメント・プログラムのディスパッチおよびアンディスパッチと一貫して1組のサンプル・ポイント・アドレスを保存し復元することができる。スーパバイザ・プログラムは、インスツルメント問題プログラムによって確立されたサンプル・ポイント・アドレスをすべて把握できるわけではないので、RICSPAは、スーパバイザ・プログラムによってインスツルメント問題プログラムを終了させるときに、ハウスキーピング・クリーンアップを単純化することができる。
サンプリング・モードが何であっても、サンプル命令がRINEXT命令の実行によって識別されると、報告グループが保管される。しかし、ランタイム・インスツルメンテーション・コントロールY738、Z739、Qs614、およびPs612は引き続き効果的である。
サイクル・カウントおよび命令カウント・サンプリングはそれぞれ、内部システム・イベントおよび例外条件に基づいて、何らかの量の変動性の対象となる概算間隔を決定する。ランタイム・インスツルメンテーションが使用不可から使用可能に遷移すると、カウントダウンが始まる。RINEXTの完了とNSIとの間に挟まれる可能性のある任意のイベント次第で、指示サンプリングはより少ない量の変動性の対象となる。同様に、特定のアドレスが定義されるので、間接サンプリングによって変動性が小さくなる。
サンプリングは、モードにかかわらず、サンプル命令を識別する。サンプル命令が識別されると、サンプル命令の実行完了時に収集が停止し、報告が始まる。その後、報告を管理する様々な報告コントロールが適用される。報告グループのストアが保留になると、収集が再開する。
トランザクション実行モードではない場合、報告グループのストアは、サンプル命令の実行完了時に保留になる。トランザクション実行モードである場合、サンプル命令の実行完了時に、報告グループのストアは、トランザクションが終了するまで遅延され、その後、保留になる。報告グループのストアが遅延されるかまたは保留である場合、1)プログラム割り込み、2)緊急マシンチェック割り込み、3)再始動割り込み、および4)スーパバイザコール割り込みのうちのいずれかが認識された場合に、それをパージすることができる。
保留入出力割り込み、外部割り込み、および抑制可能なマシンチェック割り込みはいずれも、報告グループが保管されるかまたは報告グループを保管すべきではないとランタイム・インスツルメンテーション・コントロールが判断するまで、保留のままになる。
それぞれのモードは、異なる1組の報告コントロールを可能にする場合もあれば、可能にしない場合もある。サンプリング・モードが命令カウントまたはサイクル・カウントのいずれかであるが、指示サンプリングあるいは間接サンプリングまたはその両方も使用される場合、複数のサンプリング方法によって同じサンプル命令が識別される可能性がある。これが発生し、使用すべき報告コントロールがサンプリング・モードに応じて異なる場合、指示サンプリングあるいは間接サンプリングまたはその両方に関連する報告コントロールが適用される。
非同期かつ求められていないシステム・イベントが発生する可能性があるので、特定の命令をサンプリングするための精密な間隔決定は、一般に、実行可能ではない。その代わりに、RINEXT命令または間接サンプリングを使用して、より綿密にサンプル命令を指定することができる。
サイクル・カウント・モードまたは命令カウント・モードにある場合、RINEXT命令またはサンプル・ポイント・アドレスは、命令カウントまたはサイクル・カウント・サンプリングから識別されたサンプル命令に接近しすぎている可能性がある。関連の報告グループの内容は、サンプル命令のサイクル・カウントまたは命令カウント識別が適用された場合と同様ではなく、サンプル命令がRINEXT命令のNSIとしてまたはサンプル・ポイント・アドレスで識別された場合と同様である。
以下の例外条件のいずれか1つまたは複数を満たす場合、RINEXTの実行はノーオペレーションとして実行される可能性がある。
1.ランタイム・インスツルメンテーション・コントロールが有効ではない。
2.問題状態において、現行ランタイム・インスツルメンテーション・コントロールのPs612が0であり、問題状態報告が許可されないことを示している。
3.スーパバイザ状態において、現行ランタイム・インスツルメンテーション・コントロールのQs614が0であり、スーパバイザ状態報告が許可されないことを示している。
4.現行ランタイム・インスツルメンテーション・コントロールのNビット710が0であり、RINEXT命令自体が許可されないことを示している。
5.保管が抑制される。
6.現PSW内のあるフィールドが、ランタイム・インスツルメンテーションが使用不可であることを示している。
7.モデル依存しきい値を超える恐れがある。一定の期間内にRINEXTが発行された回数がモデル依存限界を超えている。
8.プログラム・バッファ・フル条件が存在する。
9.ランタイム・インスツルメンテーション休止条件が存在する。
10.次の順次命令が解釈実行開始命令である。
11.次の順次命令がスーパバイザコール命令である。
1.ランタイム・インスツルメンテーション・コントロールが有効ではない。
2.問題状態において、現行ランタイム・インスツルメンテーション・コントロールのPs612が0であり、問題状態報告が許可されないことを示している。
3.スーパバイザ状態において、現行ランタイム・インスツルメンテーション・コントロールのQs614が0であり、スーパバイザ状態報告が許可されないことを示している。
4.現行ランタイム・インスツルメンテーション・コントロールのNビット710が0であり、RINEXT命令自体が許可されないことを示している。
5.保管が抑制される。
6.現PSW内のあるフィールドが、ランタイム・インスツルメンテーションが使用不可であることを示している。
7.モデル依存しきい値を超える恐れがある。一定の期間内にRINEXTが発行された回数がモデル依存限界を超えている。
8.プログラム・バッファ・フル条件が存在する。
9.ランタイム・インスツルメンテーション休止条件が存在する。
10.次の順次命令が解釈実行開始命令である。
11.次の順次命令がスーパバイザコール命令である。
前に述べたように、プログラム実行中にランタイム・インスツルメンテーションが使用可能になると、ランタイム・インスツルメンテーション・データはプロセッサ106内の収集バッファ508に収集される。一実施形態では、収集バッファ508は、収集された最新のレコードを保存するために使用される、プロセッサ106の内部バッファである。サンプル・トリガ・ポイントが検出されると、レコードは、プログラム・バッファ522に書き込まれる報告グループの一部として、収集バッファ508からプログラム・バッファ522にコピーされる。一実施形態では、レコードは非破壊方式で収集バッファ508からコピーされる。
収集バッファ508は、プロセッサ内に位置し、一実施形態では、命令アドレスおよび所与のイベントに関するイベント・メタデータを保管するためのレジスタ対のアレイとして実現されるので、「ハードウェア収集バッファ」と呼ばれる場合もある。イベントの一例は、レジスタ対が分岐の命令アドレスを保持する可能性のある実行分岐であり、メタデータは分岐のターゲットならびに分岐の履歴挙動に関する情報を保持することができる。一実施形態では、命令ストリーム内でイベントが発生すると、レジスタ対は順序付けられ、順次更新される。カウンタは、アレイ内で最も最近更新された項目の指標を示すように維持される。一実施形態では、収集バッファ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つのポインタが使用される。
任意の所与の実行ポイントにおけるプロセッサ106の状態を表すイベントは、収集バッファ508に順次取り込まれる。収集バッファ508は、その内容がプログラム実行中にプロセッサ106によって認識されたイベントについて報告する、1組のレコードを取り込むために使用される(たとえば、1つまたは複数の実行分岐の実行、トランザクション実行アボート・イベント、RIEMIT命令のオペランドなど)。一実施形態では、認識されたイベントは図11に示されているRICCBの内容に依存する。示されている収集バッファ508の実施形態内の項目は、イベント命令アドレスおよびその他の関連イベント・メタデータを含む。イベント・メタデータの例としては、分岐の履歴挙動に関する何らかの情報を含む、実行分岐の命令アドレスとそのターゲット、RIEMIT命令の命令アドレスとそれぞれのレジスタ値、ならびにトランザクション・アボート命令のアドレスとそれぞれのトランザクション・リカバリ入口点を含むが、これらに限定されない。
収集バッファ508の一実施形態は、最高32個の項目(すなわち、32個のイベントに関する情報)を保管し、それぞれの命令アドレスは64ビット(たとえば、ビット0:63)によって指定され、イベント・メタデータは64ビット(たとえば、ビット64:127)によって指定される。収集バッファのサイズ(RCB)はモデル依存カウントであり、レコード数を表す。一実施形態では、収集バッファ508のバイト・サイズは16バイトのレコード・サイズの倍数である。収集バッファのサイズ(RCB)は、モデルの最大報告グループのカウント(RRG)と収集バッファから取得されない報告グループ内のレコードのカウント(RNC)との差より大きいかまたはそれと等しいレコード数である。したがって、一実施形態では、収集バッファのサイズは以下のように表される。
RCB≧(RRG−RNC)
RCB≧(RRG−RNC)
一実施形態では、収集バッファ508および命令データ・バッファ(1つが使用される場合)の内容は、(1)割り込み、(2)ランタイム・インスツルメンテーション機構をオンにしオフにするPSWビット(たとえば、ビット24)が1から0に変化する場合、(3)ランタイム・インスツルメンテーション機構がトランザクション実行モードにあるときにサンプル命令が識別された場合というイベントによって、パージされるかまたはその他の影響を受ける(この場合、収集データ・バッファ508および命令データ・バッファのさらなる更新は停止し、トランザクションが終了したときに再開し、その時点で報告グループのストアが保留になり、収集バッファ508および命令データ・バッファがパージされる)。
図2に示されているエミュレートされたホスト・コンピュータ・システムなどの一実施形態では、収集バッファ508はレジスタあるいはメモリまたはその両方を使用して実現される。この実施形態では、任意選択の命令データ・バッファが存在する場合、それもレジスタあるいはメモリまたはその両方を使用して実現される。
諸実施形態では、追加の機能は、データ収集に影響を及ぼすことができ、前述の定期的命令カウントまたはサイクル・カウント・サンプリングを実質的に妨害せずに、追加のデータ収集ポイントを提供するものと見なすことができる。これらはRIEMIT命令の実行を含み、この命令は、それを収集バッファ508に保管することにより汎用レジスタの値を収集する。加えて、前述のランタイム・インスツルメンテーション・コントロール内のデータ収集制御ビットは、収集されるデータのタイプをカスタマイズするために使用することができる(たとえば、E、C、R、およびB制御ビット)。このように、収集されるデータのタイプはプログラム可能である。
一実施形態では、命令データ・バッファは、ランタイム・インスツルメンテーション命令レコードを構築するために使用されるモデル依存サンプル命令データを収集するように実現される。命令データ・バッファは、命令がサンプル命令として識別されたときに使用可能になることを見越して命令からデータを収集する。一実施形態では、命令データ・バッファは、サンプル・ポイントとしてトリガになると思われる命令に関する情報が保存されるプロセッサ内のハードウェア・バッファ/記憶位置であり、その情報はログアウト・プロセス中に収集バッファ508からのデータとともに書き出すことができる。収集バッファ508と同様に、これは、命令アドレスと、その命令に関連するメタデータとを含む。命令データ・バッファ内のメタデータは、マシンに依存する場合が多く、キャッシュ・ミス関連情報および分岐予測関連情報を含むことができるが、これらに限定されない。
諸実施形態によれば、収集されるその他のデータは、収集バッファ508からのものではなく、命令データ・バッファからのものでもない可能性がある。例としては、(1)報告グループの第1のレコード、すなわち、タイムスタンプまたは開始レコード、ならびに(2)すべての報告グループについて作成される可能性があり、したがって、収集バッファ508に保管されない可能性がある追加のタイプのレコードであって、存在する場合、報告グループのエクストラ・セクションまたはマシン依存セクションに入れられる可能性のある追加のタイプのレコードの一部を形成するために使用されるデータを含む。これらのレコードは本明細書では「システム情報レコード」と呼ばれる。
図12は、サンプル・ポイントでプログラム・バッファ522に保管される報告グループ800の高レベルの例を描写している。レコード内の報告グループのサイズはRRGによって表され、2(RGS+1)に等しく、ここでRGSは指数としての報告グループ・サイズである。収集バッファ508以外の位置からコピーされるモデル依存数のレコード(RNC)は、報告グループで使用されるときに非破壊的にコピーされる場合もあれば、コピーされない場合もある。図12の例では、RRG=8、RGS=2、およびRNC=4である。図12に示されている報告グループ800の例は、ヘッダ・セクション802と、本体セクション804と、エクストラ・レコード・セクション806と、フッタ・セクション808とを含む。
ヘッダ・セクション802は、状況情報、追跡情報、あるいはタイミング情報、またはこれらの組み合わせを保持するための開始レコードまたはタイムスタンプ・レコードを含むことができる。開始レコードは、プログラム・バッファに保管される第1の報告レコードについてヘッダ・セクション802に保管される(すなわち、RCA706がROA702と等しい場合)。一実施形態では、開始レコードは、「02」というレコード・タイプ・フィールドと、現在プログラム・バッファにいくつの報告グループが保管されているかを示すための報告グループ数(NRG)フィールドと、報告グループのサイズを示すためのRGSフィールドと、プログラム・バッファ522がいっぱいであるかどうかを示すための停止(S)フィールドと、ランタイム・インスツルメンテーションが休止されているかどうかを示すための休止(H)フィールドと、開始レコードが書き込まれた時期を示すための時刻(TOD)機構フィールドとを含む。一実施形態では、開始レコードのフィールドの少なくともサブセットはRI制御ブロック(たとえば、RICCB)から得られる。タイムスタンプ・レコードの一実施形態は、「03」というレコード・タイプを有し、レコードが保管された時期を示すためのTOD機構フィールドを含む。一実施形態では、タイムスタンプ・レコードは、第1の報告グループ以外のそれぞれの報告グループについてヘッダ・セクション802に保管される。
報告グループの本体セクション804は、収集バッファ508からサンプリングされたイベントおよび情報に関する様々なレコードを含むことができる。イベントおよび情報は、たとえば、放出命令、トランザクション実行アボート、呼び出し、戻り、分岐、およびフィラーによって取り込まれた状態情報を表すことができる。
一実施形態では、RIEMIT命令が正常に実行されると、放出レコードが作成され、収集バッファ508に保管される。放出レコードの一実施形態は、「10」というレコード・タイプ・フィールドと、現PSWの命令アドレス・ビット位置が放出レコードでどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレス指定モード(たとえば、64、31、または24ビット)次第で変化し、RIEMITが実行タイプの命令のターゲットであった場合にRIEMIT命令または実行タイプの命令の命令アドレスを含む命令アドレス・フィールドと、RIEMIT命令によって指定された汎用レジスタからのデータを保管するための放出データ・フィールドとを含む。
一実施形態では、暗黙アボートまたはトランザクション・アボート命令の実行のいずれかにより、トランザクション実行モード・アボート・レコードが作成され、収集バッファ508に保管される。アボート・レコードの一実施形態は、「11」というレコード・タイプ・フィールドと、現PSWの命令アドレス・ビット位置がトランザクション実行アボート・レコードでどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレス指定モード(たとえば、64、31、または24ビット)次第で変化し、アボートされた命令が実行タイプの命令のターゲットであった場合にアボートされた命令または実行タイプの命令の命令アドレスを含む命令アドレス・フィールドと、アボートに関連する任意のモデル依存データに関するフィールドとを含む。
一実施形態では、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などの呼び出しタイプの分岐命令の実行により、呼び出しレコードが作成される。呼び出しレコードの一実施形態は、「12」というレコード・タイプ・フィールドと、現PSWの命令アドレス・ビット位置が呼び出しレコードでどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレス指定モード(たとえば、64、31、または24ビット)次第で変化し、分岐命令が実行タイプの命令のターゲットであった場合に分岐命令または実行タイプの命令の命令アドレスを含む命令アドレス・フィールドと、分岐が正しく予測されたかどうかを示すための良性(well behaved)フィールドと、分岐ターゲット・アドレス(「呼び出された位置」とも呼ばれる)を含むターゲット・アドレス・フィールドとを含む。
戻りレコードおよび転送レコードは、呼び出しレコードと同じフォーマットを有することができる。一実施形態では、戻りレコードは、「13」というレコード・タイプ・フィールドを有し、R2フィールドが非ゼロであり、マスクが15である場合のBRANCH ON CONDITION (BCR)などの戻りタイプの分岐命令の実行によって作成される。戻りレコードの場合、命令アドレス・フィールドは、分岐が実行タイプの命令のターゲットである場合に分岐命令または実行タイプの命令のアドレスを含み、ターゲット・アドレス・フィールドは戻り位置を含む。
一実施形態では、転送レコードは、「14」というレコード・タイプ・フィールドを有し、a.R2フィールドが非ゼロであり、マスクが1〜14の範囲内である場合のBRANCH ON CONDITION (BCR)、b.Jビットが0であるかまたはマスクが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)などの戻りタイプの分岐命令の実行により作成される。転送レコードは、分岐が実行されたときに作成される。転送レコードの場合、命令アドレス・フィールドは、分岐が実行タイプの命令のターゲットである場合に分岐命令または実行タイプの命令のアドレスを含み、ターゲット・アドレス・フィールドは戻り位置を含む。
フィラー・レコードは、収集バッファ508内の有効なレコードの数が現行RGSの報告グループをいっぱいにするには不十分であるときに報告グループ内で使用される。フィラー・レコードの一実施形態は、そのレコードがフィラー・レコードであり、残りのバイトが未定義であることを示すために「00」というレコード・タイプ・フィールドを含む。
エクストラ・レコード・セクション806は、存在する場合、モデル依存レコードを含むことができる。一実施形態では、エクストラ・レコードのフォーマットはフィラー・レコードと同様であるが、そのレコードがエクストラ・レコードであり、エクストラ・レコードの残りのバイトがモデル依存データを含む可能性のあることを示すためにレコード・タイプが「01」に設定されることを除く。
フッタ・セクション808は、サンプル命令の実行に関する情報を含む命令レコードを含むことができる。命令レコードは、報告グループがサンプル命令について保管されたときに作成される。命令レコードの一実施形態は、「04」というレコード・タイプ・フィールドと、現PSWの命令アドレス・ビット位置が命令レコードでどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレス指定モード(たとえば、64、31、または24ビット)次第で変化し、サンプル命令が実行タイプの命令のターゲットであった場合にサンプル命令または実行タイプの命令の命令アドレスを含む命令アドレス・フィールドと、命令データ・バッファ(IDB)から収集された任意のモデル依存データを含む命令データ・バッファ(IDB)フィールドとを含む。
図13は、アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現することができるプロセス・フロー900を描写している。このプロセス・フロー900は、プロセッサ106によって実現することができる。代わって、プロセス・フロー900は、図2のエミュレートされたプロセッサ29によって実現することもできる。説明を容易にするため、本明細書ではプロセッサ106に関連してプロセス・フロー900について説明する。
最初に、図9のランタイム・インスツルメンテーション・モジュール506およびレジスタ510は、LRIC命令を使用してアドレスによる間接サンプリングをサポートし、前に述べたように図10および図11の制御ブロック600および700をロードするように初期設定することができる。RILSPA命令は、サンプル・ポイント・アドレス・アレイ524の内容を構成することができる。プロセッサ106はRILSPA命令およびサンプル・ポイント・アドレスをフェッチする。RILSPA命令を実行すると、プロセッサ106はサンプル・ポイント・アドレスをサンプル・ポイント・アドレス・アレイ524に保管し、その保管に応答してプロセッサ106内の条件コードを更新する。条件コードは、PSW内にあり、サンプル・ポイント・アドレス・アレイ524に正常にロードされた値の数、サンプル・ポイント・アドレス・アレイ524がいっぱいであるかどうか、サンプル・ポイント・アドレス・アレイ524内で次に使用可能な位置の指標値、あるいはサンプル・ポイント・アドレス・アレイ524内の項目のアクティブ/休眠状況、またはこれらの組み合わせなどの状況を示すためのフィードバックを提供することができる。また、プロセッサ106は、プロセッサ106によってサポートされるアドレスおよび命令フォーマット次第で、サンプル・ポイント・アドレスをサンプル・ポイント・アドレス・アレイ524に保管する前に、DAT312に関連する動的アドレス変換状態に基づいてサンプル・ポイント・アドレスについてアドレス変換を実行することもできる。
間接サンプリングがインストールされ使用可能になると、プロセッサ106は、命令ストリームを処理しながら、サンプル・ポイント・アドレス・アレイ524からサンプル・ポイント・アドレスを読み取ることができる。ランタイム・インスツルメンテーション・コントロールがインストールされ使用可能になると、イベントおよびデータなどのランタイム・インスツルメンテーション情報は収集バッファ508に収集することができる。定期的に、指示通りに、またはアドレスにより間接的に、ランタイム・インスツルメンテーション・プログラム・バッファ522とも呼ばれるプログラム・バッファ522への報告グループの保管をトリガするサンプル命令に到達する。
ブロック902では、プロセッサ106は、サンプル・ポイント・アドレス・アレイ524からサンプル・ポイント・アドレスを読み取る。ブロック904では、プロセッサ106は、そのサンプル・ポイント・アドレスをプロセッサ106上で実行中の命令ストリームからの命令に関連するアドレスと比較する。この命令ストリームは、ランタイム・メモリ504からの問題状態プログラムまたはスーパバイザ状態プログラムである可能性がある。
ブロック906では、アドレス一致が発生した場合、プロセスはブロック908に進む。そうではなく、いかなるアドレス一致も識別されなかった場合、プロセスはブロック904に戻る。サンプル・ポイント・アドレス・アレイ524内のサンプル・ポイント・アドレスを順次または同時に比較して、サンプル・ポイントを認識することができる。サンプル・ポイント・アドレス・アレイ524がサンプル・ポイント・アドレス・アレイ524全体における同時比較をサポートする内容アドレス・メモリである場合、同時または並列アドレス比較を実現することができる。サンプル・ポイント・アドレス・アレイ524内のすべてのサンプル・ポイント・アドレスが比較された場合、命令ストリーム内の次の命令に関連するアドレスを分析することができる。
ブロック908では、サンプル・ポイント・アドレスのうちの1つと一致するアドレスに関連する命令の実行時にサンプル・ポイントが認識される。その命令に関連するアドレスは、アドレス・タイプに基づくとともに、プロセッサ106によってサポートされる構成または方法ならびにSPAT752などの構成設定次第で、その命令のアドレス(すなわち、命令アドレス)またはその命令のオペランドのアドレス(すなわち、その命令によって参照されるアドレス)のいずれかである可能性がある。ランタイム・インスツルメンテーション情報はサンプル・ポイントから入手される。
ブロック910では、プロセッサ106は、ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファ522に報告グループとして保管する。システム情報および収集バッファ508からのランタイム・インスツルメンテーション情報からのレコードの組み合わせをマージして、図12の報告グループ800などの報告グループをランタイム・インスツルメンテーション・プログラム・バッファ522に保管することができる。
コンテキスト・スイッチなどにおいて、サンプル・ポイント・アドレス・アレイ524の内容に対する変更を行う必要がある場合、RISSPA命令を発行することができる。プロセッサ106は、サンプル・ポイント・アドレス・アレイ524の内容を保管するのに十分な容量を有する位置を指し示す記憶アドレスを含むRISSPA命令をフェッチする。プロセッサ106は、RISSPA命令を実行し、サンプル・ポイント・アドレス・アレイ524からサンプル・ポイント・アドレスを読み取り、記憶アドレスによって識別された位置にサンプル・ポイント・アドレスを保管する。この情報は、インスツルメント命令ストリームのソフトウェア・スレッドがもう一度アクティブになったときに、後でコンテキストを復元するために使用することができる。
コンテキスト・スイッチの前に、サンプル・ポイント・アドレス・アレイ524をクリアするためにRICSPAを発行することができる。プロセッサ106はRICSPA命令をフェッチし、それを実行して、サンプル・ポイント・アドレス・アレイ524をクリアし、プロセッサ106内の任意の関連条件コードを更新する。サンプル・ポイント・アドレス・アレイ524をクリアすることは、積極的にサンプル・ポイント・アドレス・アレイ524の値を0、すなわち、ヌルにリセットすることを含むか、またはその他の方法でその値を休眠状態にすることができる。その後、前に保管されたサンプル・ポイント・アドレスの値は、RILSPA命令を使用してサンプル・ポイント・アドレス・アレイ524に復元することができる。
上述のように、諸実施形態は、コンピュータで実行されるプロセスと、これらのプロセスを実践するための装置の形で実施することができる。一実施形態は、コンピュータ可読/使用可能媒体1002上の図14に描写されているコンピュータ・プログラム・プロダクト1000を含むことができ、コンピュータ・プログラム・コード・ロジック1004は装置(article of manufacture)として有形媒体に実施された命令を含む。コンピュータ可読/使用可能媒体1002のための模範的な装置としては、フレキシブル・ディスケット、CD−ROM、ハード・ディスク、ユニバーサル・シリアル・バス(USB)フラッシュ・ドライブ、または任意のその他のコンピュータ可読記憶媒体を含むことができ、コンピュータ・プログラム・コード・ロジック1004がコンピュータにロードされ、コンピュータによって実行されると、そのコンピュータは本発明を実践するための装置になる。諸実施形態は、たとえば、記憶媒体に保管されるか、コンピュータにロードされるかあるいはコンピュータによって実行されるかまたはその両方であるか、電気的配線またはケーブル配線、光ファイバ、あるいは電磁放射など、何らかの伝送媒体によって伝送されるかにかかわらず、コンピュータ・プログラム・コード・ロジック1004を含み、コンピュータ・プログラム・コード・ロジック1004がコンピュータにロードされ、コンピュータによって実行されると、そのコンピュータは本発明を実践するための装置になる。汎用マイクロプロセッサ上に実現されると、コンピュータ・プログラム・コード・ロジック1004の複数セグメントは、特定の論理回路を作成するようにマイクロプロセッサを構成する。
技術的効果および恩恵としては、ランタイム・インスツルメンテーションを使用して取り込まれたイベントに関するアドレスによる間接サンプリングを含む。プロセッサにおいてアドレスによる間接サンプリングをサポートすることにより、インスツルメント・プログラムは1つまたは複数の特定のサンプル・ポイント・アドレスに基づいて1つまたは複数のサンプル・ポイントを指定することができる。これは、サイクル・カウントおよび命令カウント・ベースのサンプリングより精密なサンプリングを可能にするものである。1つまたは複数のサンプル・ポイント・アドレスを指定することにより、RINEXTなどの指示サンプル命令をインスツルメント命令ストリームに直接挿入せずに特定のサンプル・ポイントを確立することができる。サンプル・ポイント・アドレス・アレイをロードし、保管し、クリアするための設計済み命令は、コンテキスト・スイッチングを可能にし、スーパバイザ・プログラムによる管理を単純化することができる。また、アドレスによる間接サンプリングのためのサポートは、エミュレーション・ルーチンを使用してエミュレートされたプロセッサまたは仮想プロセッサに含めることができる。
本明細書で使用する用語は、特定の実施形態のみを記述するためのものであって、本発明を限定するためのものではない。本明細書で使用する「a」、「an」、および「the」という単数形は、文脈が明らかにそうではない場合を示さない限り、複数形も含むためのものである。「comprises」あるいは「comprising」またはその両方の用語は、本明細書で使用する場合、所定の特徴、整数、ステップ、動作、要素、あるいはコンポーネント、またはこれらの組み合わせの存在を指定するが、1つまたは複数のその他の特徴、整数、ステップ、動作、要素、コンポーネント、あるいはそのグループ、またはこれらの組み合わせの存在または追加を排除しないことがさらに理解されるであろう。
以下の特許請求の範囲内のすべての手段またはステップならびに機能要素に対応する構造、材料、行為、およびそれと同等のものは、具体的に請求されている他の請求要素と組み合わせてその機能を実行するための任意の構造、材料、または行為を含むためのものである。本発明の説明は、例示および解説のために提示されたものであるが、網羅するためまたは開示された形式に本発明を限定するためのものではない。多くの変更および変形は、本発明の範囲および精神を逸脱せずに当業者にとって明白なものになる。この実施形態は、本発明の原理および実用的な適用例を最も良く説明するため、ならびにその他の当業者が企図された特定の用途に適した様々な変更を含む様々な実施形態について本発明を理解できるようにするために、選択され記載されたものである。
当業者によって認識されるように、本発明の諸態様は、システム、方法、またはコンピュータ・プログラム・プロダクトとして実施することができる。したがって、本発明の諸態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、またはソフトウェアとハードウェアの諸態様を組み合わせる実施形態の形を取ることができ、いずれも本明細書では一般に「回路」、「モジュール」、または「システム」と呼ぶことができる。さらに、本発明の諸態様は、そこにコンピュータ可読プログラム・コードが実施されている1つまたは複数のコンピュータ可読媒体に実施されたコンピュータ・プログラム・プロダクトの形を取ることができる。
1つまたは複数のコンピュータ可読媒体の任意の組み合わせを使用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体にすることができる。コンピュータ可読記憶媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、またはデバイス、あるいは上記のものの任意の適切な組み合わせにすることができるが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例(非網羅的リスト)としては、1つまたは複数のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラム可能読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM)、光学記憶装置、磁気記憶装置、あるいは上記のものの任意の適切な組み合わせを含むであろう。本明細書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを収容または保管することができる任意の有形媒体にすることができる。
コンピュータ可読信号媒体は、たとえば、ベースバンド内でまたは搬送波の一部として、そこに実施されたコンピュータ可読プログラム・コードを含む伝搬データ信号を含むことができる。このような伝搬信号は、電磁、光、またはそれらの任意の適切な組み合わせを含むがこれらに限定されない様々な形のうちのいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではなく、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを通信、伝搬、または輸送することができる任意のコンピュータ可読媒体にすることができる。
コンピュータ可読媒体上に実施されたプログラム・コードは、無線、有線、光ファイバ・ケーブル、RFなど、あるいは上記のものの任意の適切な組み合わせを含むがこれらに限定されない任意の適切な媒体を使用して伝送することができる。
本発明の諸態様に関する動作を実行するためのコンピュータ・プログラム・コードは、Java、Smalltalk、C++などのオブジェクト指向プログラミング言語ならびに「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組み合わせで作成することができる。プログラム・コードは、完全にユーザのコンピュータ上で、一部分はユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、一部分はユーザのコンピュータ上でしかも一部分はリモート・コンピュータ上で、あるいは完全にリモート・コンピュータまたはサーバ上で実行することができる。後者のシナリオでは、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)を含む任意のタイプのネットワークを介してリモート・コンピュータがユーザのコンピュータに接続される場合もあれば、(たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに接続が行われる場合もある。
本発明の諸態様は、本発明の諸実施形態による方法、装置(システム)、およびコンピュータ・プログラム・プロダクトの流れ図あるいは概略図またはその両方に関連して上述されている。流れ図あるいはブロック図またはその両方の各ブロックおよび流れ図あるいはブロック図またはその両方内の複数ブロックの組み合わせは、コンピュータ・プログラム命令によって実現可能であることが理解されるであろう。これらのコンピュータ・プログラム命令は、汎用コンピュータ、特殊目的コンピュータ、またはその他のプログラマブル・データ処理装置のプロセッサに提供し、コンピュータまたはその他のプログラマブル・データ処理装置のプロセッサにより実行された命令が流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/行為を実現するための手段を作成するようなマシンを生産することができる。
また、これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に保管された命令が流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/行為を実現する命令を含む装置を生産するような特定の方法で機能するよう、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイスに指示することができるコンピュータ可読媒体に保管することもできる。
また、コンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上にロードし、コンピュータまたはその他のプログラマブル装置上で実行された命令が流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/行為を実現するためのプロセスを提供するようなコンピュータで実行されるプロセスを生産するように、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上で一連の動作ステップを実行させることもできる。
上述のように、諸実施形態は、コンピュータで実行されるプロセスと、これらのプロセスを実践するための装置の形で実施することができる。諸実施形態では、本発明は、1つまたは複数のネットワーク要素によって実行されるコンピュータ・プログラム・コードに実施される。諸実施形態は、コンピュータ使用可能媒体上のコンピュータ・プログラム・プロダクトを含み、コンピュータ・プログラム・コード・ロジックは装置として有形媒体に実施された命令を含む。コンピュータ使用可能媒体のための模範的な装置としては、フレキシブル・ディスケット、CD−ROM、ハード・ディスク、ユニバーサル・シリアル・バス(USB)フラッシュ・ドライブ、または任意のその他のコンピュータ可読記憶媒体を含むことができ、コンピュータ・プログラム・コード・ロジックがコンピュータにロードされ、コンピュータによって実行されると、そのコンピュータは本発明を実践するための装置になる。諸実施形態は、たとえば、記憶媒体に保管されるか、コンピュータにロードされるかあるいはコンピュータによって実行されるかまたはその両方であるか、電気的配線またはケーブル配線、光ファイバ、あるいは電磁放射など、何らかの伝送媒体によって伝送されるかにかかわらず、コンピュータ・プログラム・コード・ロジックを含み、コンピュータ・プログラム・コード・ロジックがコンピュータにロードされ、コンピュータによって実行されると、そのコンピュータは本発明を実践するための装置になる。汎用マイクロプロセッサ上に実現されると、コンピュータ・プログラム・コード・ロジックの複数セグメントは、特定の論理回路を作成するようにマイクロプロセッサを構成する。
図面内の流れ図およびブロック図は、本発明の様々な諸実施形態によるシステム、方法、およびコンピュータ・プログラム・プロダクトについて可能な実現例のアーキテクチャ、機能、および動作を例示している。この点に関しては、流れ図またはブロック図内の各ブロックは、指定の論理機能(複数も可)を実現するための1つまたは複数の実行可能命令を含む、コードのモジュール、セグメント、または一部分を表すことができる。また、いくつかの代替実現例では、ブロック内に示された機能は図面内に示された順序から外れて行われる可能性があることに留意されたい。たとえば、連続して示されている2つのブロックは、関係する機能次第で、実際にはほぼ同時に実行される場合もあれば、時には逆の順序で実行される場合もある。また、ブロック図あるいは流れ図またはその両方の各ブロックおよびブロック図あるいは流れ図またはその両方内の複数ブロックの組み合わせは、指定の機能または行為を実行する特殊目的ハードウェアベースのシステムあるいは特殊目的ハードウェアとコンピュータ命令との組み合わせによって実現可能であることも留意されるであろう。
Claims (20)
- アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するためのコンピュータ・プログラム・プロダクトであって、前記コンピュータ・プログラム・プロダクトが、処理回路によって読み取り可能で、方法を実行するために前記処理回路によって実行するための命令を保管する有形記憶媒体を含み、前記方法が、
サンプル・ポイント・アドレス・アレイから複数のサンプル・ポイント・アドレスを読み取ることと、
プロセッサにより、前記複数のサンプル・ポイント・アドレスを前記プロセッサ上で実行中の命令ストリームからの命令に関連するアドレスと比較することと、
前記複数のサンプル・ポイント・アドレスのうちの1つと一致する前記アドレスに関連する前記命令の実行時にサンプル・ポイントを認識することであって、ランタイム・インスツルメンテーション情報が前記サンプル・ポイントから入手されることと、
前記ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファに報告グループとして保管すること
を含む、コンピュータ・プログラム・プロダクト。 - 前記命令に関連する前記アドレスが、アドレス・タイプに基づいて、前記命令のアドレスおよび前記命令のオペランドのアドレスのうちの1つである、請求項1記載のコンピュータ・プログラム・プロダクト。
- ランタイム・インスツルメンテーション・コントロール・ロード(LRIC)命令の実行に基づいて、ランタイム・インスツルメンテーション・コントロールを初期設定することであって、前記LRIC命令がサンプリング・モードおよびサンプル・ポイント・アドレス(SPA)コントロールを確立すること
をさらに含む、請求項1記載のコンピュータ・プログラム・プロダクト。 - 前記LRIC命令の実行に基づいて、前記ランタイム・インスツルメンテーション・コントロールを初期設定することが、命令アドレスおよび命令のオペランドのアドレスのうちの1つとしてサンプル・ポイント・アドレス・タイプを確立することをさらに含む、請求項3記載のコンピュータ・プログラム・プロダクト。
- 前記サンプル・ポイント・アドレスを含むランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ロード(RILSPA)命令をフェッチすることと、
前記プロセッサにより前記RILSPA命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレスを前記サンプル・ポイント・アドレス・アレイに保管することと、
前記保管に基づいて前記プロセッサ内の条件コードを更新すること
を含む、請求項1記載のコンピュータ・プログラム・プロダクト。 - 前記サンプル・ポイント・アドレスを前記サンプル・ポイント・アドレス・アレイに保管する前に動的アドレス変換状態に基づいて前記サンプル・ポイント・アドレスについてアドレス変換を実行すること
をさらに含む、請求項5記載のコンピュータ・プログラム・プロダクト。 - 記憶アドレスを含むランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ストア(RISSPA)命令をフェッチすることと、
前記プロセッサにより前記RISSPA命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレス・アレイから前記サンプル・ポイント・アドレスを読み取ることと、
前記サンプル・ポイント・アドレスを前記記憶アドレスによって識別された位置に保管すること
を含む、請求項1記載のコンピュータ・プログラム・プロダクト。 - ランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・クリア(RICSPA)命令をフェッチすることと、
前記プロセッサにより前記RICSPA命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレス・アレイ内の前記サンプル・ポイント・アドレスをクリアすることと、
前記クリアに基づいて前記プロセッサ内の条件コードを更新すること
を含む、請求項1記載のコンピュータ・プログラム・プロダクト。 - アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するためのコンピュータで実行される方法であって、前記方法が、
サンプル・ポイント・アドレス・アレイから複数のサンプル・ポイント・アドレスを読み取ることと、
プロセッサにより、前記複数のサンプル・ポイント・アドレスを前記プロセッサ上で実行中の命令ストリームからの命令に関連するアドレスと比較することと、
前記複数のサンプル・ポイント・アドレスのうちの1つと一致する前記アドレスに関連する前記命令の実行時にサンプル・ポイントを認識することであって、ランタイム・インスツルメンテーション情報が前記サンプル・ポイントから入手されることと、
前記ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファに報告グループとして保管すること
を含む、方法。 - 前記命令に関連する前記アドレスが、アドレス・タイプに基づいて、前記命令のアドレスおよび前記命令のオペランドのアドレスのうちの1つである、請求項9記載の方法。
- ランタイム・インスツルメンテーション・コントロール・ロード(LRIC)命令の実行に基づいて、ランタイム・インスツルメンテーション・コントロールを初期設定することであって、前記LRIC命令がサンプリング・モードおよびサンプル・ポイント・アドレス(SPA)コントロールを確立すること
をさらに含む、請求項9記載の方法。 - 前記LRIC命令の実行に基づいて、前記ランタイム・インスツルメンテーション・コントロールを初期設定することが、命令アドレスおよび命令のオペランドのアドレスのうちの1つとしてサンプル・ポイント・アドレス・タイプを確立することをさらに含む、請求項11記載の方法。
- 前記サンプル・ポイント・アドレスを含むランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ロード(RILSPA)命令をフェッチすることと、
前記プロセッサにより前記RILSPA命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレスを前記サンプル・ポイント・アドレス・アレイに保管することと、
前記保管に基づいて前記プロセッサ内の条件コードを更新すること
を含む、請求項9記載の方法。 - 前記サンプル・ポイント・アドレスを前記サンプル・ポイント・アドレス・アレイに保管する前に動的アドレス変換状態に基づいて前記サンプル・ポイント・アドレスについてアドレス変換を実行すること
をさらに含む、請求項13記載の方法。 - 記憶アドレスを含むランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ストア(RISSPA)命令をフェッチすることと、
前記プロセッサにより前記RISSPA命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレス・アレイから前記サンプル・ポイント・アドレスを読み取ることと、
前記サンプル・ポイント・アドレスを前記記憶アドレスによって識別された位置に保管すること
を含む、請求項9記載の方法。 - ランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・クリア(RICSPA)命令をフェッチすることと、
前記プロセッサにより前記RICSPA命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレス・アレイ内の前記サンプル・ポイント・アドレスをクリアすることと、
前記クリアに基づいて前記プロセッサ内の条件コードを更新すること
を含む、請求項9記載の方法。 - アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するためのシステムであって、前記システムが、
メモリと、
ランタイム・インスツルメンテーション・モジュールを有するプロセッサとを含み、前記ランタイム・インスツルメンテーション・モジュールが方法を実行するように構成され、前記方法が、
サンプル・ポイント・アドレス・アレイから複数のサンプル・ポイント・アドレスを読み取ることと、
前記プロセッサにより、前記複数のサンプル・ポイント・アドレスを前記プロセッサ上で実行中の命令ストリームからの命令に関連するアドレスと比較することと、
前記複数のサンプル・ポイント・アドレスのうちの1つと一致する前記アドレスに関連する前記命令の実行時にサンプル・ポイントを認識することであって、ランタイム・インスツルメンテーション情報が前記サンプル・ポイントから入手されることと、
前記ランタイム・インスツルメンテーション情報をランタイム・インスツルメンテーション・プログラム・バッファに報告グループとして保管すること
を含む、システム。 - 前記サンプル・ポイント・アドレスを含むランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ロード(RILSPA)命令をフェッチすることと、
前記プロセッサにより前記RILSPA命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレスを前記サンプル・ポイント・アドレス・アレイに保管することと、
前記保管に基づいて前記プロセッサ内の条件コードを更新すること
を含む、請求項17記載のシステム。 - 記憶アドレスを含むランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・ストア(RISSPA)命令をフェッチすることと、
前記プロセッサにより前記RISSPA命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレス・アレイから前記サンプル・ポイント・アドレスを読み取ることと、
前記サンプル・ポイント・アドレスを前記記憶アドレスによって識別された位置に保管すること
を含む、請求項17記載のシステム。 - ランタイム・インスツルメンテーション・サンプル・ポイント・アドレス・クリア(RICSPA)命令をフェッチすることと、
前記プロセッサにより前記RICSPA命令を実行することをさらに含み、前記実行が、
前記サンプル・ポイント・アドレス・アレイ内の前記サンプル・ポイント・アドレスをクリアすることと、
前記クリアに基づいて前記プロセッサ内の条件コードを更新すること
を含む、請求項17記載のシステム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/422,550 US9405541B2 (en) | 2012-03-16 | 2012-03-16 | Run-time instrumentation indirect sampling by address |
US13/422,550 | 2012-03-16 | ||
PCT/JP2013/001016 WO2013136681A1 (en) | 2012-03-16 | 2013-02-22 | Run-time instrumentation indirect sampling by address |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2015513374A true JP2015513374A (ja) | 2015-05-11 |
JP6034393B2 JP6034393B2 (ja) | 2016-11-30 |
Family
ID=49158808
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014540248A Active JP6034393B2 (ja) | 2012-03-16 | 2013-02-22 | アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するためのコンピュータ・プログラム・プロダクト、方法、およびシステム(アドレスによるランタイム・インスツルメンテーション間接サンプリング) |
Country Status (5)
Country | Link |
---|---|
US (2) | US9405541B2 (ja) |
EP (1) | EP2810170B1 (ja) |
JP (1) | JP6034393B2 (ja) |
CN (1) | CN104169886B (ja) |
WO (1) | WO2013136681A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019526108A (ja) * | 2016-06-29 | 2019-09-12 | エイアールエム リミテッド | 診断データキャプチャ |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9916161B2 (en) | 2015-06-25 | 2018-03-13 | Intel Corporation | Instruction and logic for tracking fetch performance bottlenecks |
WO2017049312A1 (en) | 2015-09-18 | 2017-03-23 | Microvention, Inc. | Releasable delivery system |
CN109684624B (zh) * | 2017-10-18 | 2023-12-08 | 北京京东尚科信息技术有限公司 | 一种自动识别订单地址路区的方法和装置 |
CN110580220B (zh) * | 2019-08-12 | 2023-05-23 | 百富计算机技术(深圳)有限公司 | 测量代码段执行时间的方法及终端设备 |
US11947445B2 (en) * | 2022-02-18 | 2024-04-02 | Mckinsey & Company, Inc. | Adjustment of operating parameters of arranged software assets |
US20230401135A1 (en) * | 2022-06-10 | 2023-12-14 | Microsoft Technology Licensing, Llc | Employing sampled register values to infer memory accesses by an application |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030005423A1 (en) * | 2001-06-28 | 2003-01-02 | Dong-Yuan Chen | Hardware assisted dynamic optimization of program execution |
JP2004062858A (ja) * | 2002-07-29 | 2004-02-26 | Arm Ltd | データ処理装置内のアプリケーション・コードのコンパイル |
US20080222382A1 (en) * | 2007-03-05 | 2008-09-11 | Freescale Semiconductor, Inc. | Performance monitoring device and method thereof |
JP2010020767A (ja) * | 2008-07-09 | 2010-01-28 | Arm Ltd | データ処理装置の監視およびその監視データの集計 |
US20110173588A1 (en) * | 2010-01-08 | 2011-07-14 | International Business Machines Corporation | Hardware support for software controlled fast multiplexing of performance counters |
Family Cites Families (135)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4821178A (en) | 1986-08-15 | 1989-04-11 | International Business Machines Corporation | Internal performance monitoring by event sampling |
JPS6421546A (en) | 1987-07-16 | 1989-01-24 | Nec Corp | Device for collecting program execution history |
JPH03217949A (ja) | 1990-01-23 | 1991-09-25 | Hitachi Ltd | 計算機システム |
US5151981A (en) | 1990-07-13 | 1992-09-29 | International Business Machines Corporation | Instruction sampling instrumentation |
US5341500A (en) * | 1991-04-02 | 1994-08-23 | Motorola, Inc. | Data processor with combined static and dynamic masking of operand for breakpoint operation |
JP2505950B2 (ja) | 1991-05-13 | 1996-06-12 | インターナショナル・ビジネス・マシーンズ・コーポレイション | ハ―ドウェア支援ブレ―クポイント・システム |
US5491793A (en) | 1992-07-31 | 1996-02-13 | Fujitsu Limited | Debug support in a processor chip |
JPH07281930A (ja) | 1994-04-08 | 1995-10-27 | Nec Corp | 情報処理装置動作測定解析システム |
EP0689141A3 (en) | 1994-06-20 | 1997-10-15 | At & T Corp | Disruption-based hardware support for system performance profiling |
US5555432A (en) | 1994-08-19 | 1996-09-10 | Intel Corporation | Circuit and method for scheduling instructions by predicting future availability of resources required for execution |
EP0729609A1 (en) | 1994-09-19 | 1996-09-04 | Koninklijke Philips Electronics N.V. | A microcontroller system for performing operations of multiple microcontrollers |
US5675817A (en) | 1994-12-05 | 1997-10-07 | Motorola, Inc. | Language translating pager and method therefor |
US5553293A (en) | 1994-12-09 | 1996-09-03 | International Business Machines Corporation | Interprocessor interrupt processing system |
US5964893A (en) | 1995-08-30 | 1999-10-12 | Motorola, Inc. | Data processing system for performing a trace function and method therefor |
US5737516A (en) | 1995-08-30 | 1998-04-07 | Motorola, Inc. | Data processing system for performing a debug function and method therefor |
US5675768A (en) | 1996-02-01 | 1997-10-07 | Unisys Corporation | Store software instrumentation package instruction |
US6314558B1 (en) * | 1996-08-27 | 2001-11-06 | Compuware Corporation | Byte code instrumentation |
US5987249A (en) | 1996-08-27 | 1999-11-16 | Numega Technologies | IR code instrumentation |
US5796939A (en) | 1997-03-10 | 1998-08-18 | Digital Equipment Corporation | High frequency sampling of processor performance counters |
US6631518B1 (en) | 1997-03-19 | 2003-10-07 | International Business Machines Corporation | Generating and utilizing organized profile information |
US5960198A (en) | 1997-03-19 | 1999-09-28 | International Business Machines Corporation | Software profiler with runtime control to enable and disable instrumented executable |
US5978902A (en) | 1997-04-08 | 1999-11-02 | Advanced Micro Devices, Inc. | Debug interface including operating system access of a serial/parallel debug port |
US6094729A (en) | 1997-04-08 | 2000-07-25 | Advanced Micro Devices, Inc. | Debug interface including a compact trace record storage |
US5944841A (en) | 1997-04-15 | 1999-08-31 | Advanced Micro Devices, Inc. | Microprocessor with built-in instruction tracing capability |
US6154818A (en) | 1997-11-20 | 2000-11-28 | Advanced Micro Devices, Inc. | System and method of controlling access to privilege partitioned address space for a model specific register file |
US6163840A (en) | 1997-11-26 | 2000-12-19 | Compaq Computer Corporation | Method and apparatus for sampling multiple potentially concurrent instructions in a processor pipeline |
US6374367B1 (en) | 1997-11-26 | 2002-04-16 | Compaq Computer Corporation | Apparatus and method for monitoring a computer system to guide optimization |
US6077312A (en) | 1998-05-06 | 2000-06-20 | International Business Machines Corporation | Apparatus, program product and method of debugging utilizing a context sensitive breakpoint |
US6216237B1 (en) | 1998-06-19 | 2001-04-10 | Lucent Technologies Inc. | Distributed indirect software instrumentation |
US6161196A (en) * | 1998-06-19 | 2000-12-12 | Lucent Technologies Inc. | Fault tolerance via N-modular software redundancy using indirect instrumentation |
US6145123A (en) * | 1998-07-01 | 2000-11-07 | Advanced Micro Devices, Inc. | Trace on/off with breakpoint register |
US6158049A (en) | 1998-08-11 | 2000-12-05 | Compaq Computer Corporation | User transparent mechanism for profile feedback optimization |
US6243836B1 (en) | 1998-08-17 | 2001-06-05 | Lucent Technologies, Inc. | Apparatus and method for circular buffering on an on-chip discontinuity trace |
US6230313B1 (en) | 1998-12-23 | 2001-05-08 | Cray Inc. | Parallelism performance analysis based on execution trace information |
US6978462B1 (en) | 1999-01-28 | 2005-12-20 | Ati International Srl | Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled |
US7013456B1 (en) | 1999-01-28 | 2006-03-14 | Ati International Srl | Profiling execution of computer programs |
US20020046305A1 (en) | 1999-02-17 | 2002-04-18 | Babaian Boris A. | Method for effective binary translation between different instruction sets using emulated supervisor flag and multiple page tables |
US6378125B1 (en) | 1999-02-22 | 2002-04-23 | International Business Machines Corporation | Debugger thread identification points |
US7137105B2 (en) | 1999-05-12 | 2006-11-14 | Wind River Systems, Inc. | Dynamic software code instrumentation method and system |
US6321329B1 (en) | 1999-05-19 | 2001-11-20 | Arm Limited | Executing debug instructions |
US6519766B1 (en) | 1999-06-15 | 2003-02-11 | Isogon Corporation | Computer program profiler |
JP2001051874A (ja) | 1999-08-12 | 2001-02-23 | Hitachi Ltd | マイクロコンピュータ |
US6918065B1 (en) | 1999-10-01 | 2005-07-12 | Hitachi, Ltd. | Method for compressing and decompressing trace information |
US6539500B1 (en) | 1999-10-28 | 2003-03-25 | International Business Machines Corporation | System and method for tracing |
US6574727B1 (en) | 1999-11-04 | 2003-06-03 | International Business Machines Corporation | Method and apparatus for instruction sampling for performance monitoring and debug |
US6634020B1 (en) | 2000-03-24 | 2003-10-14 | International Business Machines Corporation | Uninitialized memory watch |
US7735072B1 (en) | 2000-08-11 | 2010-06-08 | International Business Machines Corporation | Method and apparatus for profiling computer program execution |
US7103877B1 (en) | 2000-11-01 | 2006-09-05 | International Business Machines Corporation | System and method for characterizing program behavior by sampling at selected program points |
US6961927B1 (en) | 2000-11-27 | 2005-11-01 | Microsoft Corporation | Lossless, context-free compression system and method |
US8312435B2 (en) | 2000-12-26 | 2012-11-13 | Identify Software Ltd. (IL) | System and method for conditional tracing of computer programs |
US6769054B1 (en) | 2001-02-26 | 2004-07-27 | Emc Corporation | System and method for preparation of workload data for replaying in a data storage environment |
JP2002252163A (ja) | 2001-02-27 | 2002-09-06 | Toshiba Corp | 画像表示装置の製造方法および製造装置 |
US6918110B2 (en) * | 2001-04-11 | 2005-07-12 | Hewlett-Packard Development Company, L.P. | Dynamic instrumentation of an executable program by means of causing a breakpoint at the entry point of a function and providing instrumentation code |
JP2002342114A (ja) | 2001-05-21 | 2002-11-29 | Fujitsu Ltd | トレースデータ採取可能なプロセッサ |
US7047521B2 (en) * | 2001-06-07 | 2006-05-16 | Lynoxworks, Inc. | Dynamic instrumentation event trace system and methods |
US7181600B1 (en) | 2001-08-02 | 2007-02-20 | Mips Technologies, Inc. | Read-only access to CPO registers |
US7080289B2 (en) | 2001-10-10 | 2006-07-18 | Arm Limited | Tracing multiple data access instructions |
GB0125628D0 (en) | 2001-10-25 | 2001-12-19 | Ibm | Computer system with watchpoint support |
US20030145309A1 (en) | 2002-01-18 | 2003-07-31 | Rajendra Inamdar | Probe description language |
US7134115B2 (en) | 2002-02-07 | 2006-11-07 | Matsushita Electric Industrial Co., Ltd. | Apparatus, method, and program for breakpoint setting |
US6877114B2 (en) | 2002-02-14 | 2005-04-05 | Delphi Technologies, Inc. | On-chip instrumentation |
US20040139304A1 (en) * | 2003-01-09 | 2004-07-15 | International Business Machines Corporation | High speed virtual instruction execution mechanism |
US8141052B2 (en) | 2003-05-09 | 2012-03-20 | Microsoft Corporation | Instrumenting software for enhanced diagnosability |
US7185320B2 (en) | 2003-06-27 | 2007-02-27 | Hewlett-Packard Development Company, L.P. | System and method for processing breakpoint events in a child process generated by a parent process |
US7152186B2 (en) | 2003-08-04 | 2006-12-19 | Arm Limited | Cross-triggering of processing devices |
US20050120337A1 (en) * | 2003-12-01 | 2005-06-02 | Serrano Mauricio J. | Memory trace buffer |
US7500152B2 (en) | 2003-12-05 | 2009-03-03 | Freescale Semiconductor, Inc. | Apparatus and method for time ordering events in a system having multiple time domains |
US7206916B2 (en) | 2004-03-08 | 2007-04-17 | Sun Microsystems, Inc. | Partial address compares stored in translation lookaside buffer |
US20050228631A1 (en) | 2004-04-07 | 2005-10-13 | Maly John W | Model specific register operations |
US20090150890A1 (en) | 2007-12-10 | 2009-06-11 | Yourst Matt T | Strand-based computing hardware and dynamically optimizing strandware for a high performance microprocessor system |
US20060184832A1 (en) * | 2005-02-11 | 2006-08-17 | International Business Machines Corporation | Method and apparatus for achieving high cycle/trace compression depth by adding width |
US9152531B2 (en) | 2005-02-18 | 2015-10-06 | Green Hills Sofware, Inc. | Post-compile instrumentation of object code for generating execution trace data |
US7478219B2 (en) | 2005-04-14 | 2009-01-13 | International Business Machines Corporation | Retrieving event data for logical partitions |
US7650595B2 (en) | 2005-04-29 | 2010-01-19 | Microsoft Corporation | Sound transaction-based reduction without cycle detection |
US7661094B2 (en) * | 2005-05-10 | 2010-02-09 | Alcatel-Lucent Usa Inc. | Real-time software diagnostic tracing |
US7720670B2 (en) | 2005-05-16 | 2010-05-18 | Texas Instruments Incorporated | Saving resources by deducing the total prediction events |
US7886198B2 (en) | 2005-05-16 | 2011-02-08 | Texas Instruments Incorporated | Method and system of identifying overlays used by a program |
US8527958B2 (en) | 2005-05-16 | 2013-09-03 | Texas Instruments Incorporated | Profiling operating context and tracing program on a target processor |
US7603589B2 (en) | 2005-05-16 | 2009-10-13 | Texas Instruments Incorporated | Method and system for debugging a software program |
US8694970B2 (en) | 2005-06-02 | 2014-04-08 | Seagate Technology Llc | Unified debug system with multiple user-configurable trace volumes and trace buffers |
US7716335B2 (en) | 2005-06-27 | 2010-05-11 | Oracle America, Inc. | System and method for automated workload characterization of an application server |
US7239980B2 (en) | 2005-08-30 | 2007-07-03 | International Business Machines Corporation | Method and apparatus for adaptive tracing with different processor frequencies |
US8301868B2 (en) | 2005-09-23 | 2012-10-30 | Intel Corporation | System to profile and optimize user software in a managed run-time environment |
US20070079294A1 (en) | 2005-09-30 | 2007-04-05 | Robert Knight | Profiling using a user-level control mechanism |
US20070079177A1 (en) | 2005-09-30 | 2007-04-05 | Charles Spirakis | Process monitoring and diagnosis apparatus, systems, and methods |
US20070143755A1 (en) | 2005-12-16 | 2007-06-21 | Intel Corporation | Speculative execution past a barrier |
US20070186056A1 (en) | 2006-02-07 | 2007-08-09 | Bratin Saha | Hardware acceleration for a software transactional memory system |
CN101021800A (zh) | 2006-02-16 | 2007-08-22 | Sap股份公司 | 虚拟机监控 |
GB0604991D0 (en) | 2006-03-11 | 2006-04-19 | Slam Games Ltd | Instrumentation for real-time performance profiling |
US7814466B2 (en) | 2006-05-05 | 2010-10-12 | International Business Machines Corporation | Method and apparatus for graphically marking instructions for instrumentation with hardware assistance |
US20070261032A1 (en) | 2006-05-05 | 2007-11-08 | Chen Wen-Tzer T | Method and apparatus for hardware assisted profiling of code |
US20070260849A1 (en) | 2006-05-05 | 2007-11-08 | Chen Wen-Tzer T | Method and apparatus for executing instrumentation code using a target processor |
US8245199B2 (en) | 2006-05-05 | 2012-08-14 | International Business Machines Corporation | Selectively marking and executing instrumentation code |
WO2007145903A2 (en) | 2006-06-05 | 2007-12-21 | Acumem Ab | System for and method of capturing application characteristics data from a computer system and modeling target system |
US8307346B2 (en) | 2006-06-09 | 2012-11-06 | Oracle America, Inc. | Atomic groups for debugging |
US7895569B2 (en) | 2006-08-30 | 2011-02-22 | Research In Motion Limited | System and method for implementing software breakpoints in an interpreter |
CN100401267C (zh) | 2006-09-01 | 2008-07-09 | 上海大学 | 微处理器的片上动态跟踪方法 |
CN100547562C (zh) | 2006-10-18 | 2009-10-07 | 国际商业机器公司 | 自动生成可再现运行时问题的单元测试用例的方法和系统 |
US7992136B2 (en) | 2006-10-18 | 2011-08-02 | International Business Machines Corporation | Method and apparatus for automatic application profiling |
US8627335B2 (en) | 2006-11-13 | 2014-01-07 | Oracle America, Inc. | Method and apparatus for data space profiling of applications across a network |
WO2008069715A1 (en) | 2006-12-06 | 2008-06-12 | Telefonaktiebolaget Lm Ericsson (Publ) | Load balanced profiling |
US7783867B2 (en) | 2007-02-01 | 2010-08-24 | International Business Machines Corporation | Controlling instruction execution in a processing environment |
US7743279B2 (en) | 2007-04-06 | 2010-06-22 | Apple Inc. | Program counter (PC) trace |
WO2008122746A1 (en) | 2007-04-10 | 2008-10-16 | Cambridge Consultants Limited | Data processing apparatus |
US20090037887A1 (en) | 2007-07-30 | 2009-02-05 | Chavan Shasank K | Compiler-inserted predicated tracing |
US8127296B2 (en) | 2007-09-06 | 2012-02-28 | Dell Products L.P. | Virtual machine migration between processors having VM migration registers controlled by firmware to modify the reporting of common processor feature sets to support the migration |
US8453121B2 (en) | 2007-10-25 | 2013-05-28 | International Business Machines Corporation | Managing the tracing of the execution of a computer program |
US7962314B2 (en) | 2007-12-18 | 2011-06-14 | Global Foundries Inc. | Mechanism for profiling program software running on a processor |
US8141053B2 (en) | 2008-01-04 | 2012-03-20 | International Business Machines Corporation | Call stack sampling using a virtual machine |
US8090933B2 (en) | 2008-02-12 | 2012-01-03 | International Business Machines Corporation | Methods computer program products and systems for unifying program event recording for branches and stores in the same dataflow |
US7870438B2 (en) | 2008-02-15 | 2011-01-11 | International Business Machines Corporation | Method, system and computer program product for sampling computer system performance data |
US8312253B2 (en) | 2008-02-22 | 2012-11-13 | Freescale Semiconductor, Inc. | Data processor device having trace capabilities and method |
US7904460B2 (en) | 2008-04-23 | 2011-03-08 | Microsoft Corporation | Determining computer information from processor properties |
US8572577B2 (en) | 2008-06-20 | 2013-10-29 | International Business Machines Corporation | Monitoring changes to data within a critical section of a threaded program |
US9449314B2 (en) | 2008-10-02 | 2016-09-20 | International Business Machines Corporation | Virtualization of a central processing unit measurement facility |
US8307345B2 (en) | 2008-11-04 | 2012-11-06 | Ca, Inc. | Intelligent engine for dynamic and rule based instrumentation of software |
US8478948B2 (en) | 2008-12-04 | 2013-07-02 | Oracle America, Inc. | Method and system for efficient tracing and profiling of memory accesses during program execution |
US8527734B2 (en) | 2009-01-23 | 2013-09-03 | International Business Machines Corporation | Administering registered virtual addresses in a hybrid computing environment including maintaining a watch list of currently registered virtual addresses by an operating system |
JP5326708B2 (ja) | 2009-03-18 | 2013-10-30 | 富士通株式会社 | 演算処理装置および演算処理装置の制御方法 |
US8694962B2 (en) | 2009-04-30 | 2014-04-08 | International Business Machines Corporation | Aspect-oriented parallel programming language extensions |
JP5411587B2 (ja) | 2009-06-09 | 2014-02-12 | トヨタ自動車株式会社 | マルチスレッド実行装置、マルチスレッド実行方法 |
US8650562B2 (en) | 2009-06-12 | 2014-02-11 | International Business Machines Corporation | Method and apparatus for scalable monitoring of virtual machine environments combining base virtual machine and single monitoring agent for measuring common characteristics and individual virtual machines measuring individualized characteristics |
US8316194B2 (en) | 2009-12-15 | 2012-11-20 | Intel Corporation | Mechanisms to accelerate transactions using buffered stores |
US9092253B2 (en) | 2009-12-15 | 2015-07-28 | Microsoft Technology Licensing, Llc | Instrumentation of hardware assisted transactional memory system |
KR20110070468A (ko) | 2009-12-18 | 2011-06-24 | 삼성전자주식회사 | 인스트루먼테이션 실행 장치 및 방법 |
US8301849B2 (en) | 2009-12-23 | 2012-10-30 | Intel Corporation | Transactional memory in out-of-order processors with XABORT having immediate argument |
US8453124B2 (en) | 2009-12-23 | 2013-05-28 | International Business Machines Corporation | Collecting computer processor instrumentation data |
US8473925B2 (en) | 2010-05-11 | 2013-06-25 | Ca, Inc. | Conditional dynamic instrumentation of software in a specified transaction context |
US8566800B2 (en) | 2010-05-11 | 2013-10-22 | Ca, Inc. | Detection of method calls to streamline diagnosis of custom code through dynamic instrumentation |
US8782612B2 (en) | 2010-05-11 | 2014-07-15 | Ca, Inc. | Failsafe mechanism for dynamic instrumentation of software using callbacks |
US8966450B2 (en) | 2010-06-01 | 2015-02-24 | Red Hat, Inc. | Facilitating the execution of web applications in the cloud |
GB2481385B (en) | 2010-06-21 | 2018-08-15 | Advanced Risc Mach Ltd | Tracing speculatively executed instructions |
US20120167057A1 (en) | 2010-12-22 | 2012-06-28 | Microsoft Corporation | Dynamic instrumentation of software code |
US9430275B2 (en) | 2011-06-03 | 2016-08-30 | Oracle International Corporation | Synchronization between concurrent notifier and waiter transactions using transaction condition variables |
US8707314B2 (en) | 2011-12-16 | 2014-04-22 | Advanced Micro Devices, Inc. | Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations |
-
2012
- 2012-03-16 US US13/422,550 patent/US9405541B2/en active Active
-
2013
- 2013-02-22 JP JP2014540248A patent/JP6034393B2/ja active Active
- 2013-02-22 EP EP13760760.2A patent/EP2810170B1/en active Active
- 2013-02-22 CN CN201380014600.7A patent/CN104169886B/zh active Active
- 2013-02-22 WO PCT/JP2013/001016 patent/WO2013136681A1/en active Application Filing
- 2013-03-07 US US13/788,368 patent/US9405543B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030005423A1 (en) * | 2001-06-28 | 2003-01-02 | Dong-Yuan Chen | Hardware assisted dynamic optimization of program execution |
JP2004062858A (ja) * | 2002-07-29 | 2004-02-26 | Arm Ltd | データ処理装置内のアプリケーション・コードのコンパイル |
US20080222382A1 (en) * | 2007-03-05 | 2008-09-11 | Freescale Semiconductor, Inc. | Performance monitoring device and method thereof |
JP2010020767A (ja) * | 2008-07-09 | 2010-01-28 | Arm Ltd | データ処理装置の監視およびその監視データの集計 |
US20110173588A1 (en) * | 2010-01-08 | 2011-07-14 | International Business Machines Corporation | Hardware support for software controlled fast multiplexing of performance counters |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019526108A (ja) * | 2016-06-29 | 2019-09-12 | エイアールエム リミテッド | 診断データキャプチャ |
JP7049275B2 (ja) | 2016-06-29 | 2022-04-06 | アーム・リミテッド | 診断データキャプチャ |
Also Published As
Publication number | Publication date |
---|---|
EP2810170A1 (en) | 2014-12-10 |
CN104169886B (zh) | 2016-08-17 |
JP6034393B2 (ja) | 2016-11-30 |
US20130246774A1 (en) | 2013-09-19 |
EP2810170A4 (en) | 2015-04-29 |
US9405543B2 (en) | 2016-08-02 |
WO2013136681A1 (en) | 2013-09-19 |
US20130246754A1 (en) | 2013-09-19 |
CN104169886A (zh) | 2014-11-26 |
US9405541B2 (en) | 2016-08-02 |
EP2810170B1 (en) | 2017-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6058020B2 (ja) | トランザクション実行モードでのランタイム・インスツルメンテーション・サンプリングを実現するためのコンピュータ・プログラム・プロダクト、方法、およびシステム(トランザクション実行モードでのランタイム・インスツルメンテーション・サンプリング) | |
JP6095682B2 (ja) | プログラム・イベント記録イベントのランタイム計装イベントへの変換 | |
JP6099060B2 (ja) | 低特権状態からのランタイム・インストルメンテーション・ファシリティの動作の制御 | |
JP6058012B2 (ja) | ランタイム・インスツルメンテーションを使用してプロセッサのプロセッサ特性情報をモニターするためのコンピュータ・プログラム・プロダクト、方法、およびシステム(プロセッサ特性のランタイム・インスツルメンテーション・モニタリング) | |
JP6138142B2 (ja) | 被管理ランタイムのためのハードウェア・ベース・ランタイム計装機構 | |
JP6195572B2 (ja) | ランタイム計装制御の状況の決定のためのコンピュータ・プログラム、方法、およびシステム | |
AU2013233826B2 (en) | Run-time instrumentation reporting | |
JP6153533B2 (ja) | ランタイム・インストルメンテーション指向サンプリング | |
JP6153534B2 (ja) | 命令オペレーション・コードによるランタイム計装間接サンプリング | |
JP6034393B2 (ja) | アドレスによるランタイム・インスツルメンテーション間接サンプリングを実現するためのコンピュータ・プログラム・プロダクト、方法、およびシステム(アドレスによるランタイム・インスツルメンテーション間接サンプリング) | |
JP6058015B2 (ja) | ランタイム・インスツルメンテーション放出(riemit)命令を実行するためのコンピュータ・プログラム・プロダクト、方法、およびコンピュータ・システム(ランタイム・インスツルメンテーション・コントロール放出命令) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20160209 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20161004 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20161027 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6034393 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |