JP5604373B2 - 推測的に実行される命令のトレーシング - Google Patents

推測的に実行される命令のトレーシング Download PDF

Info

Publication number
JP5604373B2
JP5604373B2 JP2011136189A JP2011136189A JP5604373B2 JP 5604373 B2 JP5604373 B2 JP 5604373B2 JP 2011136189 A JP2011136189 A JP 2011136189A JP 2011136189 A JP2011136189 A JP 2011136189A JP 5604373 B2 JP5604373 B2 JP 5604373B2
Authority
JP
Japan
Prior art keywords
trace
group
instruction
value
traced
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.)
Active
Application number
JP2011136189A
Other languages
English (en)
Other versions
JP2012003771A (ja
Inventor
ポール・アンソニー・ギルカーソン
ジョン・マイケル・ホーリー
Original Assignee
アーム・リミテッド
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by アーム・リミテッド filed Critical アーム・リミテッド
Publication of JP2012003771A publication Critical patent/JP2012003771A/ja
Application granted granted Critical
Publication of JP5604373B2 publication Critical patent/JP5604373B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording 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/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording 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/3466Performance evaluation by tracing or monitoring
    • G06F11/3476Data logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording 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/3466Performance evaluation by tracing or monitoring
    • G06F11/348Circuit details, i.e. tracer hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording 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/3466Performance evaluation by tracing or monitoring
    • G06F11/3471Address tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明の分野はデータ処理に関し、より具体的にはデータ処理操作を監視する診断機構に関する。
処理回路によって行われる処理を追跡することが望ましい状況は数多くある。例えば、データ処理システムの開発中にはかかる情報が有用となる。トレーシングツールはかかる作業に役立つツールの一例である。
データ処理システムの活動をトレースすることで、システム内のステップごとの活動を表すデータを含むトレースストリームを生成すれば、システム開発に大いに役立つ。かかるトレーシングツールは、監視の対象となるチップ上に存在する組み込みトレースマクロセル(ETM、ARM Limited、ケンブリッジの商標)等、プログラムの流れをトレースするにあたって様々な手段を使用する。
処理システムのステップごとの全活動を監視すると、収集、伝送、蓄積するべきデータの量は途方もなく多くなる。そこで、この情報量を減らすため様々な方法が考案されてきた。例えば分岐や読み込み/蓄積命令等、一部の命令だけをトレースし、その他の「トレース無効」命令はこれらの「トレース有効」命令のトレースと命令ストリームの情報から推断することで、トレースデータの生成量を減らす。トレース無効とみなされる実行部分についてはトレースデータが生成されないようトレースのオン及びオフを切り替える機能を設けることで、トレースストリームのさらなる削減が可能である。米国特許第7,707,394号には命令の一部のみトレースする機能が記載されている。
殆どのプロセッサ命令セットアーキテクチャは、処理速度を高めるため命令を推測的に実行する機能を含んでいる。例えば、分岐が処理されるときのデータ処理システムの状態を条件とし、条件が真であるならば実行し目的地へ分岐し、条件が偽であるならば実行せず次の順次命令を継続する分岐命令は、何らかの形で実行するものと予測できるため、後続の命令は、条件が真又は偽であるかが分かる前に実行できる。予測を誤った場合は推測的に実行された命令をキャンセルし、分岐以前の状態にプロセッサを戻す必要がある。
推測的に実行される命令をトレースする場合、トレースストリーム出力を実際にコミットされる命令に整合させることは必ずしも容易ではない。
第1の態様から見て、本発明は、少なくとも1つの命令ストリームを実行する少なくとも1つのプロセッサの処理活動を指示するトレースデータ項目を生成するトレースユニットを提供し、前記少なくとも1つの命令ストリームは複数の命令グループを備え、前記少なくとも1つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記トレースユニットは、現在のトレース制御データによって制御され前記少なくとも1つのプロセッサの挙動を監視するトレース回路と、前記実行される命令グループのうち該当する命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するデータストアと、を備え、前記トレース回路は、前記命令グループの実行の検出に応じて前記トレース制御データを前記データストアに蓄積するよう構成され、前記トレース回路は、前記推測的に実行された少なくとも1つの命令グループをキャンセルする前記少なくとも1つのプロセッサを検出することに反応し、前記データストアに蓄積された前記トレース制御データの少なくとも一部を取り出し、且つ前記取り出されたトレース制御データにより前記トレース回路を制御する。
本発明では、推測的命令を実行するデータ処理装置をトレースすると、推測的に実行された命令が後ほどキャンセルされた場合に、トレースデータ出力を理解することが困難になる場合があると認識する。本発明は、実行される各命令グループにつきトレース制御データをデータストアに蓄積することでこの問題に対処するものであり、こうすることで推測的に実行された命令がキャンセルされる場合には、以前に使われていたトレース制御データの値をデータストアから取り出すことができる。従って、当時現行であったトレース制御データを復元することができる。
一部の実施形態において、前記トレースユニットはさらに、前記トレース回路を制御するため前記現在のトレース制御データを蓄積する蓄積回路を備え、前記トレース回路は、前記推測的に実行された少なくとも1つの命令グループをキャンセルする前記少なくとも1つのプロセッサを検出することに応じ、前記取り出されたトレース制御データを前記蓄積回路に蓄積する。
トレース制御データはトレース回路の制御に用いる論理状態でよいが、一部の実施形態ではこれが蓄積回路に蓄積される。
一部の実施形態において、前記トレース制御データは、前記該当する命令グループを識別する識別子とともに、前記データストアに蓄積される。
蓄積されるトレース制御データは、何らかの方法で該当する命令グループに関係づける必要がある。これは識別子により関係づけることができるほか、蓄積形式等の他の形式で関係づけることもできる。
一部の実施形態において、前記トレース回路は、前記キャンセルされた命令グループの前記データストアに蓄積された前記トレース制御データの前記少なくとも一部を取り出すよう構成される。
トレース回路を正常に機能させるには、命令グループがキャンセルされた場合に、キャンセルされた命令グループの開始時に現行であったトレース制御データを復元しなければならない。一部の実施形態では、グループの開始時に現行であったトレース制御データが当該グループのデータストアに蓄積されるため、これが取り出される。別の実施形態では、グループの実行終了時に現行であったトレース制御データが当該グループのため蓄積される。この場合は、キャンセルされたグループの直前のグループのトレース制御データが取り出されることになる。
一部の実施形態において、前記グループは命令グループを備え、前記グループ内の最初の命令が実行されると、前記グループ内の前記命令の全てが実行する。
命令は数通りの方法でグループ分けできる。一部の実施形態ではグループが単一の命令からなるが、この場合はトレース制御データを蓄積するデータストアが大きくなる。命令は、グループ内の最初の命令が実行される場合にグループ全体が実行されるようグループ分けするべきである。換言すると、グループ内で例外が発生することはなく、命令はグループ全体としてキャンセル及びコミットされる。推測的に実行される命令は、その結末が分かったときに、すなわち推測が正しかったか否かが分かったときに、コミット又はキャンセルされ、正しい場合にはコミットされ、正しくない場合にはキャンセルされる。
一部の実施形態において、前記トレース制御データはスティッキー値を備え、前記トレース回路は所定値を有する前記スティッキー値に反応し、trace enable信号がenabled値を有するか否かにかかわらず、後に実行されるトレース有効命令のトレース値を出力する。トレース有効命令はトレースデータ項目の出力をトリガする命令である。
トレースされる推測実行命令のキャンセルにともなう問題として、トレースがトレース有効命令のトレースエレメントだけを出力し、後続命令のトレースから他の命令は実行済みと示唆する場合、命令グループはキャンセルされることがあり、trace enableはオン又はオフに異なる時点で切り替えられることがあるため、もしも命令グループの最後の命令がトレース有効命令ではなく、次の命令がトレースされる前にtrace enableがオフに切り替わると、トレースデータを診断する診断装置には、このトレース無効命令が実行済みであることが分からない。この問題は、トレース制御データ内のスティッキー値の使用により対処される。
トレース回路は、トレースデータ項目の出力をトリガするトレース有効命令ではない前記命令グループの1命令グループにおける最終命令の実行を検出することに反応し、後続命令グループを制御するため前記トレース制御データにて前記スティッキー値を設定し、且つ後続命令グループの前記データストアに前記スティッキー値を蓄積する。
つまり、グループ内の最終命令がトレースエレメントを出力しないトレース無効命令なら、後続グループのためスティッキー値が設定される。従って、後続のトレース有効命令が実行されると、トレースがイネーブルされようがされまいが、トレースエレメントは出力される。トレースエレメントが出力されると、蓄積回路に蓄積されたスティッキー値はリセットされる。このスティッキー値により、トレースデータを解析する診断装置は、トレース無効命令が実際に実行したことを認識する。推測的に実行された命令グループがキャンセルされると、キャンセルされた命令に適用されていたスティッキー値が蓄積回路に戻される。後続命令グループのためスティッキー値が蓄積されているため、このグループがキャンセルされる場合にはスティッキー値が更新され、次のトレース有効命令ではトレースエレメントが出力されるため、先行グループにおける最終トレース無効命令の実行は示唆できる。
一部の実施形態において、前記トレース制御データはprevious traced値を備え、前記トレース回路は、先行グループの最終命令が実行されるときに前記trace enable信号の値を前記後続グループの前記previous−traced値として蓄積するよう構成され、前記トレース回路は、推測的に実行された命令グループをキャンセルする前記プロセッサと、イネーブルされる前記trace enable値と、前記キャンセルされたグループとの関連で蓄積され設定される前記previous−traced値とに反応し、前記トレースがオンであることを指示するトレースエレメントを出力する。
推測的に実行された命令のキャンセルにともなうさらなる問題として、命令グループのときにトレースがオンになってこの命令グループが後ほどキャンセルされると、トレースがオンであることを伝えるため出力された指示は失われる。previous−traced値は、キャンセルされた命令に鑑みtrace on信号の出力を指示するため使用される。previous−traced値の簡素な設定方法では、先行グループの最終命令のtrace enable値を後続グループのprevious traced値として蓄積する。こうすることで、その命令グループの実行が完了したときにトレースがイネーブルだったか否かを簡単に指示できる。
一部の実施形態において、前記トレース制御データはinitial−traced値を備え、前記initial−traced値は、命令グループの最初の命令の実行でトレースがイネーブルされることに応じて設定され、前記トレース回路は、命令グループをキャンセルする前記プロセッサと、前記命令グループでクリアになる前記initial−traced値と、前記命令グループで設定される前記previous−tracedとを検出することに応じ、前記キャンセル後に実行された前記命令の実行アドレスを指示する状態エレメントを出力する。
推測的グループの実行中にトレースがイネーブルされ、その後このグループがキャンセルされる場合にはさらなる問題が生じる。トレースがイネーブルされると実行アドレスを指示する状態トレースエレメントが出力され、診断装置はトレースが再びイネーブルされたことを理解できる。これらの命令が後ほどキャンセルされると、診断装置は、キャンセルされた命令のため出力された実行アドレスから実行が進行していると考え、問題が生じる。initial−traced値の使用は、さらなる実行命令アドレスを指示するさらなる状態エレメントの出力をトリガすることにより、この問題の回避に役立つ。つまり、グループのキャンセルに応じ、キャンセルされたグループのinitial−tracedがクリアで、同グループのprevious tracedが設定されると、さらなる状態エレメントが出力される。previous tracedが設定される場合は、先行グループの、この場合はキャンセルされたグループの前のグループの、最終命令が実行されたときに、トレースがイネーブルされていたことを意味し、initial−tracedがクリアの場合は、キャンセルされたグループの最初の命令が実行されたときにトレースがイネーブルされなかったことを意味する。キャンセルされたグループの実行中にはトレースがイネーブルされ状態エレメントが出力されたかもしれない。そこで、追加の状態エレメントが出力される。
一部の実施形態において、前記トレース制御データはtraced interesting値を備え、前記traced interesting値は、グループのトレースエレメントが出力されることに応じて設定され、且つグループのトレースエレメントが出力されない場合にクリアになる。
本発明の実施形態で使用できるさらなるトレース制御値はtraced interesting値である。これは、グループのトレースエレメントが出力される場合とグループのトレースエレメントが出力されない場合を指示するため使用される。これを使用することにより、コミットされたグループがトレースされなかった場合を判断でき、トレース出力のコミットカウント値はこのグループがトレースされたと示唆しない。これは後述するカウンタ折り返しの場合にも使用できる。
一部の実施形態において、前記トレース制御データは前記グループのtrace start/stop値を備え、前記trace start/stop値はtrace enableが設定されるか否かに影響し、前記trace start/stop値は、前記少なくとも1つのプロセッサの所定挙動の検出に応じて設定される。
トレースがイネーブルされるか否かは特定のプロセッサ状態によって制御される。一部の実施形態では、これらの状態によって制御されようがされまいが、start/stop値によりtrace enableをオン又はオフにできる。従来のプロセッサはこの制御値を使用している。ただしこの場合、本発明の実施形態はグループの値を蓄積するため、そのグループが後ほどキャンセルされる場合には、値を適切な値に戻すことができる。
一部の実施形態において、前記トレース制御データはtrace multiple値を備え、前記値が設定される場合は前記グループがトレースエレメントを生成する2つのトレース有効命令を備えていることを指示し、前記値が設定されない場合は前記グループが1個又は0個のトレース有効命令を備えていることを意味する。
命令グループは2つ以下のトレース有効命令に制限されることがある。この場合はトレース制御データにtrace multiple値を含めることで、グループに2つのトレース有効命令があるか否かを指示できる。後ほど明らかになるように、こうすることでより少ない値を使用しグループのトレースを実行できる。
別の実施形態で、前記trace multiple値は、前記グループ内のトレース有効命令数を指示する値を備える。
別の実施形態ではtrace multiple値を数ビットとし、グループ内にあるトレース有効命令数を指示する。こうすることでグループ内に1、2、3、又は4つのトレース有効命令があるかどうかを2ビット値で指示でき、2つのトレースキー(最初値と最後値を指示)を蓄積するより効率的である。
一部の実施形態において、前記トレースユニットは、インデックス値を生成し、且つ前記命令グループの各々に割り振られた前記インデックス値を蓄積するよう構成され、前記インデックス値は、トレースエレメントが生成されるたびに更新される。
生成されるトレースエレメントを追跡する一方法ではインデックス値を設け、これを各命令グループに割り振り、トレースエレメントが生成されるたびに更新する。このようなインデックスから提供される情報は圧縮が容易であり、トレースデータを解析する診断装置によって理解される。
一部の実施形態において、前記トレースユニットは、前記インデックス値を生成するカウンタを備え、前記トレース回路は、前記グループの実行開始時の前記カウンタ値を指示する最初カウンタ値と、前記グループの実行終了時の前記カウンタ値を指示する最後カウンタ値とのうち、少なくとも一方を、各命令グループの前記データストアに蓄積する。
インデックス値によりトレース情報にインデックスを付ける方法はいくつかあるが、一部の実施形態ではカウンタを備える。カウンタはインデックス機能を提供する簡素な方法であるほか、容易に圧縮できるインデックスを提供する。一部の実施形態ではグループの最初カウンタ値と最後カウンタ値の両方が蓄積されるが、別の実施形態では、いずれか一方のみが蓄積される。命令がキャンセル又はコミットされるときには、グループの実行開始時のカウンタ値とグループの実行終了時のカウンタ値を使用することで、出力されたトレースエレメントのうち、キャンセルされた命令とコミットされた命令に関係するトレースエレメントがどれなのかを正確に判断することができる。いずれか一方だけが蓄積される場合でも、グループ内のトレース有効命令数が2に制限され、且つグループのmultiple traced値が蓄積される場合には、キャンセルされた命令とコミットされた命令に関係するトレースエレメントを判断できる。この場合、最初値及び最後値の他方は推定できる。これの利点として、カウンタ値が多ビットとなるのに対し、multiple traced値は単一ビットである。
一部の実施形態において、前記トレース回路は、推測的に実行された選択命令グループがキャンセルされたことを指示するキャンセル指示を前記データ処理装置から受信し、前記キャンセルされた選択命令グループを指示するキャンセルトレース項目を生成し、且つ前記現在カウンタ値と、前記キャンセルされたグループの実行開始時の前記カウンタ値との差に関する情報を、前記キャンセルトレース項目に含めるよう構成される。
命令グループがキャンセルされる場合には、トレースエレメントを解析する診断装置でこれを推定できることが重要であり、さもないと診断装置は実行されたストリームを正しく解析できなくなる。カウンタ値を使ってトレースエレメントにインデックスを付ければ、ストリームの中で出力されたトレースエレメントのうち、キャンセルされたエレメントがいくつあるかを指示するキャンセルトレース項目を提供することにより、診断装置に対しキャンセルを指示できる。
一部の実施形態において、前記トレース回路は、前記traced−interesting値を頼りに前記差に関する前記情報を判断するよう構成される。
キャンセルされたグループにトレースされなかった命令があった場合は、キャンセルされた命令グループ数に関する出力情報で、キャンセルされたグループがトレースエレメントを出力しなかったことを示唆してはならない。traced interesting値は、これが示唆されないよう出力値を修正するため使用される。
一部の実施形態において、前記トレースユニットは、推測的に実行された選択命令グループがコミットされたことを伝える前記データ処理装置からのコミット指示の受信に反応し、前記選択グループを指示するコミットトレース項目を生成し、且つ前記現在カウンタ値と前記選択グループの前記最後カウンタ値との差に関する情報を含める。
キャンセルと同様、命令グループのインデックスはどの命令がコミットされたかを指示するため使用できる。コミットされた命令を指示するため出力される値を計算するときにはtraced interestingも役立つ。トレースされた命令がないグループがある場合、コミット信号は、出力されたトレースエレメントの一部がこれらのグループに属することを示唆しない。
本発明の第2の態様は、命令ストリームを実行するデータ処理装置と、前記データ処理装置を監視する本発明の第1の態様によるトレースユニットと、を備えるデータ処理ユニットを提供する。
本発明の第3の態様は、少なくとも1つの命令ストリームを実行する少なくとも1つのプロセッサの処理活動を指示するトレースデータ項目を生成する方法を提供し、前記少なくとも1つの命令ストリームは複数の命令グループを備え、前記少なくとも1つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記方法は、現在のトレース制御データにより制御されるトレース回路を使用し前記少なくとも1つのプロセッサの挙動を監視するステップと、前記実行される命令グループの1命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するステップと、前記推測的に実行された少なくとも1つの命令グループをキャンセルする前記少なくとも1つのプロセッサを検出することに応じ、前記キャンセルされる推測実行命令の直前に実行された前記命令グループの前記データストアに蓄積された前記トレース制御データの少なくとも一部を取り出すステップと、前記取り出されたトレース制御データにより前記トレース回路を制御するステップと、を備える。
本発明の第4の態様は、少なくとも1つの命令ストリームを実行する少なくとも1つのプロセッサの処理活動を指示するトレースデータ項目を生成するトレース手段を提供し、前記少なくとも1つの命令ストリームは複数の命令グループを備え、前記少なくとも1つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記トレース手段は、現在のトレース制御データにより制御される前記少なくとも1つのプロセッサの挙動を監視するトレース監視手段と、前記実行される命令グループのうち該当する命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するデータ蓄積手段と、を備え、前記トレース監視手段は、前記命令グループの実行の検出に応じ、前記トレース制御データの前記少なくとも一部を前記データ蓄積手段に蓄積し、前記トレース監視手段は、前記推測的に実行された少なくとも1つの命令グループをキャンセルする前記少なくとも1つのプロセッサに反応し、前記キャンセルされた推測実行命令の前に実行された前記命令グループの前記データ蓄積手段に蓄積された前記トレース制御データの少なくとも一部を取り出し、且つ前記取り出されたトレース制御データにより前記トレース監視手段を制御する。
本発明の上記及び他の目的、特徴、及び利点は、以降の例証的実施形態の詳細な説明を添付の図面とともに読むことにより明白となるであろう。
データ処理装置と、データ処理装置によるプログラム実行を解析する診断装置と、を有するシステムを示す図である。 本発明の一実施形態によるトレースユニットを有するデータ処理装置を示す図である。 本発明によるトレースユニットの一実施形態を示す図である。 trace start/stop値の設定を概略的に示す図である。 グループ内の命令の例、実行、及びトレーシングを示す図である。 グループ内の命令の例、実行、及びトレーシングを示す図である。 グループ内の命令の例、実行、及びトレーシングを示す図である。 グループ内の命令の例、実行、及びトレーシングを示す図である。 グループ内の命令の例、実行、及びトレーシングを示す図である。 グループ内の命令の例、実行、及びトレーシングを示す図である。 本発明の別の実施形態によるトレースユニットを示す図である。 命令の実行に応じトレース制御値がどのように設定されるかを示す流れ図を示す図である。 命令の実行に応じトレース制御値がどのように設定されるかを示す流れ図を示す図である。 命令の実行に応じトレース制御値がどのように設定されるかを示す流れ図を示す図である。 命令グループの実行中にトレース制御値がどのように変化するかを示す図である。 本発明の一実施形態によるデータをトレースする方法を示す図である。
図1に見られるシステムは、命令ストリームを部分的に推測的に実行するデータ処理装置5と、命令の実行を監視し且つトレースストリーム42を生成するトレースユニット40とを含み、トレースストリーム42は出力52を通じて診断装置140へ出力される。診断装置140は診断ロジック142を有し、診断ロジック142はソフトウェアプログラムの形をとってよい。診断ロジック142はプロセッサ10によって実行されるプログラムに関連してトレースストリームを解析し、トレースストリームはデータストアに蓄積される。診断ロジック144はデータ処理装置5によるプログラム実行に関する情報を出力し、出力された情報は故障の診断に役立てられる。
本発明の一実施形態によるトレースユニット40を含むデータ処理装置5を図2に示す。データ処理装置5はプロセッサコア10(データ処理ユニット)と、プロセッサコア10の処理活動を監視し、且つコアの処理活動を示すトレースデータ項目を生成するよう構成されたトレースユニット40とを備え、トレースデータ項目は出力52にてトレースストリームとして出力される。
プロセッサコア10はフェッチユニット20と実行ユニット25とを備える。フェッチユニット20はメモリ(図示せず)から命令をフェッチし、これらの命令は実行ユニット25へ引き渡され、実行ユニット25にて実行される。プロセッサコア10は推測型プロセッサであるため、フェッチユニット20は実行ユニット25向けの命令をフェッチするよう構成され、命令は要求により分岐予測ユニット30によって予測される(ただし保証されない)。実行ユニット25はこれらの命令を推測的に実行し、後ほど推測が正しいか否かが判明した時点で命令をキャンセルするかコミットする。
トレースユニット40は、推測的命令実行を含むプロセッサコア10の処理活動を示すトレースエレメントを生成し、且つそれらを出力52にてトレースデータストリームとして出力するよう構成される。トレースユニット40が推測的に実行される命令との関連で生成されるトレースデータ項目をバッファし、推測が解決した時点でそれらを出力トレースストリームに放出することは原理上可能ではあるが、それにはトレースユニット40内にかなりの蓄積空間が必要となり、面積的に高くつく。
そこで図2に示す実施形態のトレースユニット40は、推測的に実行される命令と非推測的に実行される命令の両方についてトレースデータを生成し、且つ推測が正しいか否かが分かった時点でキャンセル信号かコミット信号を生成するよう構成されている。こうしてトレースデータを解析する診断装置はトレースデータを理解することができる。
図3ではトレースユニット40がより詳細に示されている。トレースユニット40は、プロセッサコアから信号を受信するトレース回路50を有する。トレースユニットは信号を監視し、トレースエレメントを適宜生成し、トレースストリームの形でトレースエレメントを出力し、トレースストリームは診断装置へ送信される。トレースユニット40はまたtrace enable信号を受信し、これによりトレース回路の中でtrace enableビットが設定される。trace enableはトレースエレメントが出力されるか否かを制御する。
この実施形態のトレースユニット40は、トレース制御データを蓄積するレジスタ60を有し、トレース制御データはtrace enable値とともにトレース回路50の動作を制御する。尚、一部の実施形態においてはこれらの値がレジスタに蓄積されず、データは検出される信号値のみとなる。さらに、これらの制御値は多くの実施形態において2つのとりうる値を有し、一般的には単一ビットとして表される。トレースユニットはまた、データストア65を有し、データストア65は、推測的に実行されまだコミット又はキャンセルされていない命令に関するトレース制御データ等、トレース情報を蓄積する。この情報により、命令が実行前の値までキャンセルされる場合にはレジスタ60が更新されるほか、命令グループのキャンセルやコミットに関する情報がトレースストリームに出力される。その結果、診断装置には十分な情報が送信され、診断装置は、トレースストリームの項目のうち、キャンセルされた命令に関係する項目がどれなのかを判断できる。トレース回路は、どの命令がキャンセル又はコミットされたかを指示するトレース信号を出力するほか、プロセッサの処理活動を指示するトレース項目を出力する。こうして診断装置はトレースストリームを理解でき、トレースされた命令のうちキャンセル又はコミットされた命令がいくつあるかを認識できる。
トレース回路を正常に動作させるには、推測的実行のときに変化したトレース制御値を不正推測実行以前の値にリセットすることが重要となる。
推測的実行を効率よく管理するため、命令は命令グループとして管理される。これは、命令がまとめてコミットされキャンセルされる不可分の命令ブロックにグループ分けされ、グループの中で例外が発生しない場合に可能である。
トレース回路は命令をトレースするときにこれらのグループを使用し、トレース有効命令が実行されトレースエレメントが出力されるたびにトレースキーを使ってカウントする。グループの実行が始まるときと終わるときのトレースキー値は最初値及び最後値と呼ばれ、データストア65に蓄積される。こうすることで、命令がグループとしてコミット及びキャンセルされるにつれ、グループの始まりと終わりを判断できる。命令ストリームにおける処理位置を診断装置が正確に判断できるようにするため、トレースキーが時折出力されることもある。通常は、トレース有効命令が実行されたことを示すトレースエレメントと、キャンセルもしくはコミットされた命令数を示すカウント値を出力すれば、これを判断できる。
これよりトレースキーがどのように生成され蓄積されるかを詳しく説明する。トレースユニット40にはトレースインデックスユニット70が設けられる。インデックスユニット70は、トレースユニット50によって生成されるトレースデータ項目の少なくとも一部にインデックス値かトレースキーを割り振るよう構成される。具体的に、インデックスユニット70は所定のインデックス値シーケンスとしてインデックス値を生成するよう構成され、所定のシーケンスの中でn+1番目のインデックス値はn番目のインデックス値から決定される。図示された実施形態においては、インデックスユニット70内のカウンタ72によってこの機能が提供される。
トレースユニット50は所定のインデックス値シーケンスを提供するカウンタ72を備え、トレースユニット40は生成するトレースデータ項目(の一部)にこれを割り振ることができる。トレースユニット40はまた、カウンタ72によって生成されたインデックス値を蓄積できるデータストア65を備える。データストア65は、推測的に実行される各グループの最初カウンタ値と最後カウンタ値を、当該グループのさらなるトレース制御値とともに、蓄積する。推測的に実行される命令グループ内の最初の命令の場合、トレースユニット40は、カウンタ72からの現在カウンタ値をデータストア65の最初インデックス蓄積ユニット(グループ番号によりインデックスが付く)に蓄積するよう構成される。逆に、新たなグループがスタートするときには、データストア65の最後インデックス蓄積ユニットに現在カウンタ値が蓄積される。
図示された実施形態で、データストア65は命令グループの点でプロセッサの最大推測デプス(depth)に対応する十分なエントリを有する。プロセッサの最大推測デプスはデータストア65で保持しなければならない最大エントリ数であり、このデプスを超えるとプロセッサは命令グループをコミットもしくはキャンセルしなければならず、インデックス蓄積ユニット内のエントリは空になる。
oldest uncommitted値を蓄積するデータストアもある。この値は、特定のグループをコミットする信号に応じ、診断ツールに対し実際にコミットされる命令がどれなのかを出力するため使用される。
グループの実行中にtrace enableの値が切り替わる場合は特に、推測的実行中の命令追跡は容易ではない。この実行を首尾よく追跡できるようにするには、最初カウンタ値と最後カウント値に対しさらなる情報が必要となるため、データストア65はさらなる値を蓄積する。
トレース回路を制御する現在のトレース制御データを蓄積するレジスタ60は、previous traced値と、スティッキービットと、initial traced値と、traced interesting値とを蓄積する。previous traced値は先行グループの最終命令のtrace enable値であり、スティッキービットは、先行命令がトレースデータを出力しない場合に設定され、出力する場合にクリアされる。先行グループの最終命令が実行されたときのスティッキービットの値は後続グループのスティッキービットとしてデータストア65に蓄積されるが、レジスタ60内のその値は命令が実行されるにつれ更新され、更新された値は当該グループのデータストア65に蓄積されない。initial traced値はグループ内の最初の命令のtrace enableであり、traced interestingはトレースされた命令がグループにあることを指示する。これらの値から診断装置は、例えば2つのグループがコミットされたことをトレース回路が指示し、特にこれらのグループの一方でトレースがイネーブルされず実際にトレースされなかった場合に、これがトレースエレメント出力にどのように関係しているかを判断できる。以降の図に関し、これらの値がどのように更新され使用されるかを説明する。
データストア65はグループのtrace start/stop値も蓄積する。これはグループ内の最初の命令より前のstart/stopビットの値である。開始遷移の後、停止状態でトレースがディスエーブルされる場合、すなわちtrace enableが0になる場合、trace−enableは停止遷移まで他のソースに依存する。
開始条件は、例えばサブルーチン内の最初の命令のアドレスでよく、停止条件はサブルーチン内の最後の命令のアドレスでよい。こうすることで、このサブルーチン内の命令だけがトレースされる。
キャンセル後に開始/停止挙動の整合をとるには、start/stop値をデータストアに蓄積し、キャンセル時に蓄積済みの値まで逆戻りする必要がある。推測的に実行される命令だけでなく構造的に実行される命令により開始/停止挙動を定義するためである。
新たなグループがスタートすると、グループ内の最初の命令が処理される前のstart/stop値が、グループに対応するデータストア内の行に蓄積される。
グループがキャンセルされると、キャンセルされた命令に対応するデータストア内の行からstart/stopビットが取り出される。
図4は、start/stopビットがどのように設定され、トレースがイネーブルされるか否かの決定にどのように使われるかを概略的に示すものである。命令アドレスが受信されると照合が行われ、命令アドレスがトレースユニットの構成時に定められた範囲内にあるか否かを確認する。範囲内にあるなら、start/stopビットが設定される。同様に照合が行われ、命令アドレスがトレースユニットの構成時に定められた停止アドレス範囲内にあるか否かを確認する。範囲内にあるなら、start/stopビットはクリアされる。
実行され、トレースされ、コミットされる命令グループA、B、C、及びDの例を図5に示す。この場合のトレース出力はEアトムであり、キーは出力されないが命令のたびに更新され、その一部は図3のデータストア65に蓄積される。
この例ではグループAが実行される。グループAは分岐命令を含んでいるため、トレースがイネーブルされるとトレースエレメントEが出力され、図3のカウンタ72の値であるkey 1がこの命令に割り振られ、グループAとして蓄積される。そしてカウンタは増加する。次に実行される命令はグループBの中にある。これは新たなグループであるため、グループBの分岐命令には現在のトレースキー値key 2が割り振られる。グループBは分岐を含んでおり、トレースは引き続きイネーブルされるため、別のトレースエレメントが出力され、カウンタ72はkey 3に増加する。次の命令は新たなグループの中にあり、これも分岐であり、トレースは引き続きイネーブルになっているためさらなるトレースエレメントが出力され、トレースキー3がこの命令に割り振られ、カウンタ72は増加する。
次に実行される命令はグループDの中にある。この命令はトレース無効命令である。トレース回路はトレースエレメントを生成しないよう構成されるため、トレースエレメントは出力されず、キーは増加しない。次に分岐命令があり、これはトレースエレメントを生成し、トレースキーの現在値4がこれに割り振られ、カウンタは増加する。次に、グループCがコミットされたことを伝えるコミット信号をトレース回路50がプロセッサから受信すると、グループCと、これに先立つグループA及びBは推測でなくなる。トレース出力を解析している診断ツールにこれを伝達する必要があるため、トレース出力にはコミット信号が加えられる。このコミット信号ではコミットされたグループを正確に指示する必要がある。それには、コミットされたグループのキー値から、蓄積(図3のストア80)された中で最も古い以前のコミットのキー値を引いたものを出力する。この場合は先行グループにコミットされたものがないため、出力される値は、グループCの最終命令に割り振られたキー値key 3−0となり、key 3信号が出力される。診断装置はこれからグループA、B、及びCの命令がコミット済みであると判断できる。
そのグループで蓄積された最後のキー値key 3はoldest committedストアに蓄積される。
尚、この実施形態では図3のデータストア65に見られるように各グループにつき最初カウンタ値と最後カウンタ値を蓄積するのではなく、データストア65には単一のキー値が蓄積される。これはグループ内の最終命令に割り振られるキー値である。
図6に示す例は図5に似ているが、一部の命令の実行中にはトレースがディスエーブルされる。図6ではグループCの実行とグループDの半分でトレースがディスエーブルされる。この場合はグループAの実行によってトレースエレメントの出力がトリガされ、カウンタ72の現在値であるトレースkey 1がグループAのキー値として蓄積され、カウンタ72は増加する。次にグループBに入ると現在のカウンタ値2がグループBとして蓄積され、グループB内の分岐命令の実行によりトレースエレメントの出力とキー値3への増加がトリガされる。次にトレース出力がディスエーブルされ、分岐Cが実行されてもトレースエレメントの出力はトリガされない。従って、カウンタキーの現在値3がグループCとして蓄積されるが、トレースエレメントが出力されないため、値は増加しない。次に新たなグループDに入り、最初の命令はトレース無効命令であり、いずれにせよトレースはディスエーブルされるので、トレースエレメントは出力されず、カウンタは増加しない。次にトレースがイネーブルされ、実行される次のトレース有効命令はグループD内の分岐であるため、トレースエレメントは出力され、このグループとして現在のキー値3が蓄積され、カウンタは4に増加する。
トレース回路は、グループCがコミットされたことを伝える信号を受信する。これを指示する信号をトレース出力ストリームで送信する必要がある。ただしグループCはトレースされていない。
この問題に対処するためトレース制御データでtraced interesting値が使用される。この値は、命令グループにトレースされるトレース有効命令がある場合に設定され、トレースされる命令がない場合にクリアになる。つまり、トレースされる命令がなければ設定されない。従ってグループCの場合はこれがクリアになる。これはグループがコミット又はキャンセルされる場合に使用される。この場合、グループCはコミットされ、そのtraced interesting値はクリアである。グループCで蓄積されたキー値は3であり、traced interestingビットはクリアであるため、コミットは、蓄積されたキー値−oldest uncommitted値(この場合は0)−1、すなわち2となるよう計算される。従ってcommit 2信号が送信され、診断装置は、前の2つのトレースエレメントがコミット済みのグループに属すると推定できる。すなわち、グループA及びBがコミットされていると推定できる。もしもコミット値から1を引かなければcommit 3信号が出力され、トレース出力を解析する診断ツールは、分岐Dを含め最初の3つのトレース済み命令がコミット済みと想定することになる。これは誤りである。もしもtraced−interestingが設定されたなら、キー値から1は引かれないが、この場合は分岐Cがトレースされたことになる。
次にoldest uncommitted値はkey 3に設定される。
traced−interesting値は、推測がプロセッサの推測デプスに達し、カウンタが折り返した場合にも使用できる。この場合、コミット又はキャンセルするキーは最も古い以前のコミットと同じ値になることがある。これは計算コミット値0を提供する。さもないとコミットされるのが0なのか、あるいは最大推測デプスNなのか分からない。これは最終グループのtraced−interestingビットから推定でき、これが設定されるなら値はゼロではなくNに違いなく、これがクリアなら値はNではなくゼロに違いない。
一部の実施形態ではデータストア65が命令グループの最初カウンタ値と最後カウンタ値を蓄積する。これらの値を使用することにより、推測的命令のキャンセル及びコミットに応じキャンセル又はコミットする必要があるトレースストリームの値を判断することができる。以下、これを説明する。
図3に見られる実施形態等、一部の実施形態では、最初カウンタ値と最後カウンタ値が各グループのデータストア65に蓄積される。カウンタ72は所定のインデックス値シーケンスを提供し、トレースユニット40は生成するトレースデータ項目(の一部)にこれを割り振ることができる。推測的に実行される命令グループ内の最初の命令の場合、トレースユニット40は、カウンタ72からの現在カウンタ値を当該グループの最初値として蓄積するよう構成され、逆に、新たなグループがスタートするときには、当該グループの最後値として現在カウンタ値が蓄積される。
データストア65は、命令グループの点でプロセッサの最大推測デプスに対応する十分なエントリを有するよう構成される。プロセッサの最大推測デプスはインデックス蓄積ユニットで保持しなければならない最大エントリ数であり、このデプスを超えるとプロセッサは命令グループをコミットもしくはキャンセルしなければならず、インデックス蓄積ユニット内のエントリは空になる。
これより下の表1を参照しながら最初値と最後値の使用を説明する。
表1は、プロセッサコア100が命令グループA、B、及びCを推測的に実行した後、グループBのキャンセルとグループAのコミットを指示する状況で、トレースユニット110でカウンタ値と、oldest uncommitted値と、追跡テーブルがどのように更新されるかを示している。
グループAはload(LDR)命令から始まり、これは「interesting」であり、現在トレースされている。グループAに対応する最初インデックスユニット230のエントリ(「A.first」)には現在カウンタ値0が蓄積され、カウンタは1に増加する。最後に、グループAに対応する最後インデックスユニット240のエントリ(「A.last」)に現在カウンタ値1が蓄積される。グループAの次の命令はmove命令(MOV)であり、これは「interesting」ではなく、トレースされない。グループAの最後の命令はbranch−if−equal(BEQ)命令であり、これは「interesting」でありトレースされため、カウンタは2に増加する。そして、グループAに対応する最後インデックスユニット240のエントリ(「A.last」)が現在カウンタ値2により更新される。尚、各命令の最終ステップでは常に現在のグループに対応する最後インデックスユニット240のエントリが現在カウンタ値により更新される。勿論、これが何らかの効果をもたらすのは、その命令でカウンタが更新されている場合に限る。表1の残りの命令では、この「最後」値の更新を明確に説明しない。
グループBはADD命令から始まり、これは「interesting」ではなくトレースされないが、新たなグループの最初の命令であるため最初インデックス値蓄積ユニットのエントリには現在カウンタ値2が蓄積される(B.first=2)。グループBの2番目の命令はSUB命令であり、これも同様に「interesting」ではなくトレースされず、値を更新しない。
グループCはstore(STR)命令から始まり、これは「interesting」でありトレースされるため、最初インデックス蓄積ユニットのC.firstエントリには現在カウンタ値が蓄積され、カウンタは3に増加する。グループCの2番目の命令はbranch−if−not−equal(BNE)命令であり、これも「interesting」でありトレースされるため、カウンタは4に更新される。
次にプロセッサコア100は、グループBの推測的実行が不適正であるためグループB及びCのキャンセルを指示する。これに応じ、トレースユニット110(トレース制御ユニット200により制御)はカウンタ210の現在カウント値4と、最初インデックス蓄積ユニット230のエントリ(B.first)に蓄積された値2を参照する。トレースユニット110は2つのトレースデータ項目をキャンセルすべきと判断し(4−2)、これを指示するトレースデータ項目を生成する。カウンタ210は2にリセットされる(4から2項目キャンセルのため)。
次にプロセッサコア100は、命令グループAの推測的実行が適正であったと判断し、命令グループAのコミットを指示する。これに応じ、トレースユニット110(トレース制御ユニット200の制御下)は、oldest uncommitted蓄積ユニット250に蓄積された値(現在0)と、このグループに対応する最後インデックス蓄積ユニット240のエントリ(A.last)2を参照する。トレースユニット110は2つのトレースデータ項目をコミットすべきと判断し(2−0)、これを指示するトレースデータ項目を生成する。oldest uncommitted蓄積ユニット250に蓄積された値は、このグループで読み取られた「最後」の値に、この例では2に、リセットされる。
尚、表1を参照しながら説明する実施形態では、イベント数の参照によりキャンセルとコミットが行われ、生成されるトレースデータ項目はキャンセル又はコミットされるイベント数を指示する。別の実施形態では、トレースユニットはイベント番号の参照によりキャンセル/コミットトレース項目を生成できる。この場合、キャンセルトレース項目の場合は「最初」値から、すなわち最初インデックス値蓄積ユニットの該当するエントリから、イベント番号が取られ、コミットトレース項目の場合は「最後」値から、すなわち最後インデックス値蓄積ユニットの該当するエントリから、イベント番号が取られる。イベント番号によるコミット及びキャンセルではハードウェアを削減できるように思われるが(減算が不要のため)、イベント数によりキャンセル/コミットを指示する場合は通常ならば先行ゼロがあるため、大抵は圧縮できる。「イベント数」によりコミット/キャンセルにするか、それとも「イベント番号」によりコミット/キャンセルするかの選択は、システム要求に応じて判断できる。すなわち、トレースユニットのハードウェア削減とトレースストリームにおける帯域幅削減のうち、どちらを重視するかによって判断できる。
Figure 0005604373
これより下の表2を参照しながらさらなる例を説明する。この例のトレースユニットは、store(STR)命令をトレースしないことにより生成されるトレースをさらに選別する。表2におけるグループA及びBの値は表1の値と同じである。ただしグループCの最初の命令でSTR命令はトレースされないため、カウントは増加しない。このためカウントは、グループCでBNE命令(トレースされる)に遭遇したときに3に増加する。
プロセッサコアが「cancel B」メッセージを発行すると、トレースユニット110は、現在カウントが3、B.firstが2(表1の例と同様)であるため、ただ1つのトレース項目をキャンセルすべきと判断する(3−2)。同様に、カウントは1減少する(値2まで減少)。表1のようにプロセッサコアが「commit A」メッセージを発行すると、oldest uncommittedカウントは0、A.last=2であるため、2つのトレース項目がコミットされる。そしてoldest uncommittedカウントは2に更新される。
Figure 0005604373
制御レジスタ60におけるprevious−traced制御値の使用を図7に示す。ここでは、トレースがオフだったときに実行された命令がキャンセルされたためtrace on信号の出力を不要につき禁止する。previous−traced値は、先行グループの最終命令が実行されたときのtrace enable値である。従って図7の例でグループBのprevious−traced値はクリアになっている。グループBでトレースがイネーブルされると、trace on信号が分岐BのトレースエレメントEとともに出力されるほか、トレースがオンになったときのコアによるプログラム実行位置を指示する状態エレメント2000(図示せず)が出力される。グループCが実行されるときにはトレースが再びオフになる。その後グループCはキャンセルされ、グループDが実行される。グループCがキャンセルされたため、グループDに先行するグループはグループBとなり、このグループのトレースはイネーブルされていたため、グループDのprevious−traced値は設定される。trace enableは遷移しているが、トレース回路はprevious−tracedの設定を受けてtrace−on信号の出力を禁止する。もしもグループCがキャンセルされなかったなら、グループDでprevious−tracedは設定され、trace enable信号の遷移を受けてtrace on信号が生成されることになる。
trace enableが値を変える別の例を図8に示す。この場合、グループAは分岐であり、トレースはイネーブルされ、トレースエレメントは出力され、initial−tracedは、グループ内の最初の命令のtrace enable値であるため、設定される。次にトレースはイネーブルされず、グループBの実行が始まる。グループBの最初の命令でトレースはイネーブルされないためグループBのinitial−tracedはクリアになり、グループAの最終命令でトレースはイネーブルされているためprevious−tracedは設定される。グループBの2番目の命令でトレースはイネーブルされ、これはグループの中間であるため、これを受けてtrace on信号は常に出力され、トレースがオンになるときのプロセッサの実行位置を指示する状態3004が出力される。その後、グループBの次の命令が実行され、トレースエレメントが出力される。そしてグループBのキャンセルを指示するキャンセル信号をコアから受信する。グループBで出力されたトレースエレメントは1つであるため、キャンセルは1である。
トレース回路はキャンセルされたグループBのinitial−traced値と、現在蓄積されているprevious−tracedをチェックする。もしもinitial−tracedがクリアでprevious−tracedが設定されているなら、キャンセルされたグループの実行中にtrace enableが値を変化させ、状態エレメントが出力されたことになる。これらの値に応じて新たな状態エレメントが出力される。
この場合、次に実行される命令はグループCのトレース無効命令であり、グループBで蓄積されたinitial traced値とグループCで蓄積されたprevious traced値に応じ状態エレメント4000が出力される。診断装置は、トレースがアドレス3004ではなくアドレス4000からのものであることを知る。
要約すると、キャンセルされたグループに対応する表の同一行から取り出されるprevious_tracedが1でinitial_tracedが0ならforce−state−outputは出力される。図8ではグループBがキャンセルされる。グループBの前の命令はトレースされるが、グループBの最初の命令はトレースされないため、previous_traced=1、initial_traced=0となる。キャンセル後の最初のグループでprevious_traced値は1であるため、第2のtrace−onは出力されない。
previous_tracedとinitial_tracedには4通りの値がある。
Figure 0005604373
図9に見られる推測的命令をトレースするときに生じるもうひとつの問題には、本発明の実施形態により対処する。前述したように、トレース無効命令の実行はトレース有効命令の実行をトレースすることによって示唆できるため、トレース無効命令はトレースせず、トレース有効命令に指定された命令だけをトレースすることによってトレースデータの生成量は減らすことができる。トレース有効命令は分岐、読み込み、蓄積等であり、トレース無効命令は算術命令等の他の命令である。ただし、トレースをイネーブル又はディスエーブルする機能と併せてこの種のトレーシングを使用すると、トレースがオフになった場合に後続のトレース有効命令がトレースされないため、トレース無効命令の実行を示唆できなくなる。この問題に対処するにはトレース制御データのスティッキー値を使用する。実行されるグループの最後の命令がトレースエレメントの出力をトリガするトレース有効命令でない場合には、後続グループのためスティッキー値が設定される。このスティッキー値は後続グループのデータストアに蓄積されるほか、トレースを制御する図3の制御レジスタ60の中で設定される。スティッキー値はトレースエレメントが出力されるまでトレース制御レジスタ60の中で維持され、トレースエレメントが出力されるとリセットされる。つまり、トレースがイネーブルされトレース有効命令に遭遇するとトレースエレメントが出力され、制御レジスタではスティッキー値がリセットされる。診断装置は、トレースエレメントが出力されなかった先行グループの最後のトレース無効命令が実際に実行されたと判断できる。
図9では、グループBのトレース無効命令の実行を受けてグループCのためスティッキー値が設定される。グループCの分岐が実行されるときにtrace enableはオフだが、スティッキー値が設定されているため、トレースエレメントは出力される。こうすることで、診断ツールはグループBのNOPが実行されたことを示唆できる。トレースエレメントが出力された後には制御レジスタ60でスティッキー値がリセットされるが、グループCのデータストアに蓄積されたスティッキー値は引き続き設定される。
図10に見られる同様の例では、推測的に実行された命令の一部がキャンセルされる。この場合、グループAではトレースがイネーブルされ、トレースエレメントが出力される。グループBでトレースはイネーブルされるが、トレース無効命令であるため、トレースエレメントは出力されない。ただしスティッキー値は設定される。次にグループCが実行され、トレースはイネーブルされないがスティッキー値が設定されているため、分岐によりトレースアトムの出力がトリガされる。次に図3の制御レジスタ60でスティッキー値がリセットされるが、データストア65では引き続きグループCに設定されている。次にグループDが実行され、トレースは再びイネーブルされ、トレースアトムが出力される。先行グループでスティッキー値が設定されたため「trace−on」出力はない。
次にコアからcancel group Cが受信され、前の2つのアトムのキャンセルを指示するためcancel 2が出力される。グループCをキャンセルするときには、グループBで蓄積されたトレース制御値の一部が制御レジスタに読み込まれる。グループBで蓄積されたスティッキー値は設定されており、これが制御レジスタに読み込まれ、例外が生じる。制御レジスタではスティッキー値が設定されているため、trace enableがローでも例外はトレースされる。
図11に見られるトレースユニット40は図3のそれに似ているが、レジスタ60とデータストア65にはmultiple−tracedというトレース制御値が追加されている。この実施形態ではグループ内のトレース有効命令が2つまでとなるよう装置が構成され、グループに含まれるトレース有効命令が2つならmultiple tracedが設定され、グループのトレース有効命令が1つかトレース有効命令がなければ(traced_interestingから判断)multiple tracedはクリアになる。こうすることで、最初のキー値か実施形態によっては最後のキー値だけをデータストア65に蓄積すればよく、残りはmultiple traced値が設定されるか否かによって判断できる。従って、多ビットのカウント値を蓄積するのではなく単一ビットを蓄積することで残りのキーを指示できる。
別の実施形態ではmultiple−traced値を数ビット幅とし、グループ内の合計トレース有効命令数を蓄積する。この場合はこの値を使ってカウンタを更新できる。この値は多ビット幅だが、最初カウント値と最後カウント値を指示する2つのトレースキーを蓄積するよりは効率的である。さらに別の実施形態ではこれを多ビット幅とし、グループ内の合計トレース有効命令数−1を蓄積する。トレース有効命令が1つかゼロかはtraced_interesting値から判断する。
尚、トレース制御値はグループごとに設定され、新たなグループに遭遇するとデータストア65に蓄積される。ただしtraced−interestingはグループ内の各命令につき適宜更新され、当該グループにとっての最終的な値が蓄積される。当該グループのデータストア65には制御レジスタ60にある最初のスティッキー値が蓄積されるが、これはグループの実行にともない更新されることがあり、更新された値はデータストアに蓄積されない。
図12a乃至12cは、種々のトレース制御値がどのように更新されるかを説明する流れ図である。
スティッキービットがどのように設定されクリアされるかを図12aに示す。まずは、新たなグループが受信されたか否かを判断し、受信された場合は現在のスティッキービットがデータストア65に蓄積される。次に、新たなグループが受信されようがされまいが、命令がトレース有効命令か否かを判断し、トレース有効命令ならスティッキービットはクリアされ、トレース有効命令でなければトレースがイネーブルされるか否かを判断し、イネーブルされるならスティッキービットが設定される。次に、トレース有効命令があるならスティッキービットはクリアされ、命令がトレース有効命令でなくトレースがイネーブルされるならスティッキービットは設定される。
previous−tracedがどのように設定されるかを図12bに示す。新たなグループがスタートするとprevious−tracedの現在値がデータストア65に蓄積される。次に、トレースがイネーブルされるか否かを判断し、イネーブルされるならprevious−tracedが設定され、イネーブルされないならスティッキービットが設定されているか否かを判断し、設定されているならprevious−tracedが設定され、設定されていなければprevious−tracedはクリアされる。
グループがキャンセルされた場合に新規状態の出力をいつ強制するかを判断するため、initial_tracedがどのように更新され使用されるかを図12cに示す。グループの実行が始まるとスティッキービットが設定されているか否かを判断する。スティッキービットが設定されている場合は、トレースがイネーブルされようがされまいが、キャンセルされたグループのprevious_traced値とinitial_traced値を検討する必要がある。
スティッキービットが設定されていない場合はトレースがイネーブルされるか否かを判断する。イネーブルされないならinitial_tracedはクリアされ(これはグループの最初の命令のtrace_enable値)、イネーブルされるなら、これがキャンセル後の最初の命令であるか否かを判断する。キャンセル後の最初の命令なら、キャンセルされたグループのprevious_traced値とinitial_traced値を検討する。
キャンセルされたグループでprevious_tracedが設定されている場合は、キャンセルされたグループの前のグループの最終命令が実行されたときにトレースがイネーブルされていたことを意味し、initial_tracedがクリアの場合は、キャンセルされたグループの最初の命令が実行されたときにトレースがイネーブルされていなかったことを意味する。キャンセルされたグループの実行中にはトレースがイネーブルされ、状態エレメントが出力されたかもしれない。これが検出されるとforce new stateが発生する。グループがキャンセルされ、trace_enableが0から1に遷移し状態が出力されたと判断される場合には新規状態が出力され、トレース診断ツールはプログラムの実行位置を判断することができる。
この場合、そのグループの最初の命令でトレースがイネーブルされていないとinitial−tracedはクリアされる(initial_tracedがクリアならトレースはイネーブルされていなかったことを意味し、キャンセルされたグループの以前の値にリセットされる)。キャンセルされたグループでinitial_tracedが設定されているなら、このグループの最初の命令でトレースはイネーブルされているため、initial−tracedは設定される。
命令がキャンセル後の最初の命令でないか、あるいはprevious_tracedが設定されていなければ、グループの最初の命令でトレースはイネーブルされinitial_tracedでこれを反映するためinitial_tracedは設定される。
次に新たなグループがスタートすると、そのグループのinitial_tracedが蓄積される。
命令実行の例と、カウンタキー値とトレース制御値がどのように変化するかを図13に示す。実行される最初の命令はグループAの中にあり、アドレス1000を持ち、分岐命令である。トレースはイネーブルされ、トレースエレメントは出力され、現在のカウンタ値key 1がこの命令のトレースキーとして蓄積される。この時点でスティッキー値は0であり、initial traceは1に設定されている。load storeはなく、multiple trace命令はなく、previous traced値はまだなく、oldest committed命令は0に設定されている。
次に実行される命令はグループBの中にあり、トレース無効命令である。トレースは引き続きイネーブルされ、カウンタは2に増加したためこのグループについてはkey 2が蓄積され、トレース無効命令の実行によりスティッキー値が設定される。先行グループの最後の命令が実行したときにトレースはイネーブルされていたためprevious traced値は1に設定され、このグループの最初の命令が実行したときにトレースはイネーブルされていたためinitial tracedは1に設定される。
次に実行される命令はグループCにある。これもトレース無効命令であり、トレースはイネーブルされない。カウンタ値は増加しないため、グループCのこの命令にはkey 2が割り振られ、スティッキー値は設定され続ける。
次に実行される命令は分岐であり、trace enableは引き続きオフである。ただしスティッキー値が設定されているので、3000で命令が実行されたことをトレースストリームを解析する診断装置に指示するため、トレースアトムが出力される。この命令についてはカウンタ値key 2が蓄積され、カウンタは増加する。このトレースアトムの出力に応じてスティッキー値はリセットされる。
次に実行されるグループはグループDであり、トレースはイネーブルされ、分岐命令であるためトレースエレメントが出力される。カウンタ値はkey 3であるためkey 3が蓄積され、この命令に割り振られる。スティッキー値は引き続き0であり、グループCの最終命令が実行したときにトレースはイネーブルされていなかったためprevious tracedは0であり、グループDの最初の命令が実行したときにトレースはイネーブルされていたためinitial tracedは1である。
次にトレース回路は、グループCまで命令をキャンセルすることを指示する信号を受信する。グループCで蓄積されたキーはkey 2であり、oldest committedは0だから、2−0、すなわち2のキャンセル信号がトレースストリームにて診断装置へ送信され、カウンタは2減少する。グループCに関係するデータストアの値からトレースを制御する制御状態が復元される。
次に受信される命令はグループEにあり、分岐であり、トレースはイネーブルされるためトレースエレメントが出力され、キーは増加し、この命令についてはkey 2が蓄積される。previous tracedとinitial traceはいずれも1に設定され、このグループにはさらなるトレース有効命令loadがあるため、multiple traceは1に設定される。load及びstore命令のアドレスを出力する必要があることを指示するためtrace load storeも1に設定される。この場合はトレースがイネーブルされないためアドレスは出力されない。
次の命令はグループFの中にあり、トレース無効命令である。このときtrace enableがオンになるため、trace onと状態出力が出力される。カウンタは増加せず、トレース無効命令であるためスティッキー値は設定されない。
グループFの次の命令は分岐であるためトレースエレメントは出力される。スティッキー値はリセットされ、カウンタは4に増加する。
次に、グループBをコミットする指示をコアから受信する。グループBで蓄積されたキー値はkey 2であるので、通常ならばoldest committed値が0であるためcommit 2信号が出力される。ただし、グループBのtraced interestingは0でグループBがトレースされなかったことを指示しているため、グループAの分岐命令が実行済みであることを指示するcommit 1が出力される。
次のグループはグループGである。カウンタは引き続き増加し、これはトレース有効命令でありトレースはイネーブルされるため、アトムは出力される。カウンタがコミット信号の影響を受けないことに注意されたい。
本発明の一実施形態による方法を説明する流れ図を図14に示す。
命令グループの形に配列された命令ストリームを処理するプロセッサの挙動は、トレース制御回路によって監視される。蓄積回路にはトレース回路を制御するため現在のトレース制御データが蓄積され、グループが実行されると、実行されたグループのトレース制御データの少なくとも一部がグループを識別する識別子とともにデータストアに蓄積される。次に、推測的に実行された命令グループをプロセッサがキャンセルしたか否かを判断する。これはプロセッサを監視するトレース制御回路によって判断される。命令がキャンセルされた場合は、キャンセルされた命令の直前の命令グループのトレース制御データが取り出され、これが蓄積回路に蓄積されることにより、トレース回路は適切なトレース制御データによって制御される。命令がキャンセルされていなければ、トレース回路はトレース制御データの制御下でプロセッサの監視を続ける。
ここでは添付の図面を参照しながら本発明の例証的実施形態を説明してきたが、本発明はこれらの実施形態に限定されず、添付の請求項によって定められる本発明の範囲と精神から逸脱することなく当業者により様々な変更及び修正を行えることを理解されたい。
50 トレース回路
60 レジスタ
65 データストア
70 トレースインデックスユニット
72 カウンタ
80 ストア

Claims (25)

  1. 少なくとも1つの命令ストリームを実行する少なくとも1つのプロセッサの処理活動を示すトレースデータ項目を生成するトレースユニットであって、前記少なくとも1つの命令ストリームは複数の命令グループを備え、前記少なくとも1つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記トレースユニットは、
    現在のトレース制御データによって制御され前記少なくとも1つのプロセッサの挙動を監視するトレース回路と、
    前記実行される命令グループのうち該当する命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するデータストアと、を備え、
    前記トレース回路は、前記命令グループの実行の検出に応じて前記トレース制御データを前記データストアに蓄積するよう構成され、
    前記トレース回路は、前記推測的に実行された少なくとも1つの命令グループを前記少なくとも1つのプロセッサがキャンセルしたことを検出することに反応し、前記データストアに蓄積された前記トレース制御データの少なくとも一部を取り出し、且つ前記取り出されたトレース制御データにより前記トレース回路を制御することを特徴とするトレースユニット。
  2. 前記トレースユニットはさらに、前記トレース回路を制御するため前記現在のトレース制御データを蓄積する蓄積回路を備え、前記トレース回路は、前記推測的に実行された少なくとも1つの命令グループをキャンセルする前記少なくとも1つのプロセッサを検出することに応じ、前記取り出されたトレース制御データを前記蓄積回路に蓄積することを特徴とする請求項1に記載のトレースユニット。
  3. 前記トレース制御データは、前記該当する命令グループを識別する識別子とともに、前記データストアに蓄積されることを特徴とする請求項1に記載のトレースユニット。
  4. 前記トレース回路は、前記キャンセルされた命令グループの前記データストアに蓄積された前記トレース制御データの前記少なくとも一部を取り出すよう構成されることを特徴とする請求項1に記載のトレースユニット。
  5. 前記命令グループは、前記グループ内の最初の命令が実行されると前記グループ内の前記命令の全てが実行するようグループ分けされた命令を備えることを特徴とする請求項1に記載のトレースユニット。
  6. 前記トレースユニットは、アサートされたtrace enable信号に反応し前記トレース回路による前記少なくとも1つのプロセッサの前記挙動の監視を可能にし、且つアサートされていない前記trace enable信号に反応し前記トレース回路による前記挙動の監視を禁止することを特徴とする請求項1に記載のトレースユニット。
  7. 前記トレース制御データはスティッキー値を備え、前記トレース回路は所定値を有する前記スティッキー値に反応し、trace enable信号がenabled値を有するか否かにかかわらず、後に実行されるトレース有効命令のトレース値を出力し、且つ前記スティッキー値をリセットし、トレース有効命令はトレースデータ項目の出力をトリガする命令であることを特徴とする請求項6に記載のトレースユニット。
  8. 前記トレース回路は、トレースデータ項目の出力をトリガするトレース有効命令ではない命令の実行を検出することに反応し、前記トレース制御データにて前記スティッキー値を設定することを特徴とする請求項7に記載のトレースユニット。
  9. 前記トレース回路は、トレースデータ項目の出力をトリガするトレース有効命令ではない前記命令グループの1命令グループにおける最終命令の実行を検出することに反応し、前記トレース制御データにて前記スティッキー値を設定し、且つ前記設定されたスティッキー値を前記後続命令グループの前記データストアに蓄積することを特徴とする請求項8に記載のトレースユニット。
  10. 前記トレース制御データはprevious−traced値を備え、前記トレース回路は、先行グループの最終命令が実行されるときにトレースがイネーブルされていないことを検出することに反応し、前記後続命令グループのため前記previous−traced値を設定し、前記トレース回路は、推測的に実行された命令グループをキャンセルする前記プロセッサと、前記キャンセルされたグループとの関連で蓄積され設定される前記previous−traced値とに反応し、前記トレースがオンになることを指示するトレースエレメントを出力することを特徴とする請求項1に記載のトレースユニット。
  11. 前記トレース制御データはinitial−traced値を備え、前記トレース回路は、命令グループの実行中に命令アドレスを指示するトレース状態エレメントの出力に反応し、前記グループの前記initial−traced値を設定し、前記トレース回路は、前記initial−traced値が設定された命令グループをキャンセルする前記プロセッサを検出することに応じ、前記キャンセル後に実行された前記命令の命令アドレスを指示するさらなる状態エレメントを出力することを特徴とする請求項1に記載のトレースユニット。
  12. 前記トレース制御データはtraced−interesting値を備え、前記traced−interesting値は、グループのトレースエレメントが出力されることに応じて設定され、且つグループのトレースエレメントが出力されない場合にクリアになることを特徴とする請求項1に記載のトレースユニット。
  13. 前記トレース制御データはtrace multiple値を備え、前記値が設定される場合は前記グループがトレースエレメントを生成する複数のトレース有効命令を備えていることを意味し、前記値が設定されない場合は前記グループが1個又はゼロ個のトレース有効命令を備えていることを意味することを特徴とする請求項1に記載のトレースユニット。
  14. 前記トレース制御データはtrace multiple値を備え、前記値は、トレースエレメントを生成する前記グループ内のトレース有効命令数を指示することを特徴とする請求項1に記載のトレースユニット。
  15. 前記トレースユニットは、インデックス値を生成し、且つ前記命令グループの各々に割り振られた前記インデックス値を蓄積するよう構成され、前記インデックス値はトレースエレメントが生成されるたびに更新されることを特徴とする請求項1に記載のトレースユニット。
  16. 前記トレースユニットは前記インデックス値を生成するカウンタを備え、前記トレース回路は、前記グループの実行開始時の前記カウンタ値を指示する最初カウンタ値と、前記グループの実行終了時の前記カウンタ値を指示する最後カウンタ値とのうち、少なくとも一方を、各命令グループの前記データストアに蓄積することを特徴とする請求項15に記載のトレースユニット。
  17. 前記トレースユニットは前記インデックス値を生成するカウンタを備え、前記トレース回路は、前記グループの実行開始時の前記カウンタ値を指示する最初カウンタ値と、前記グループの実行終了時の前記カウンタ値を指示する最後カウンタ値とを、各命令グループの前記データストアに蓄積することを特徴とする請求項15に記載のトレースユニット。
  18. 前記トレース回路は、推測的に実行された選択命令グループがキャンセルされたことを指示するキャンセル指示を前記データ処理装置から受信し、前記キャンセルされた選択命令グループを指示するキャンセルトレース項目を生成し、且つ前記現在カウンタ値と、前記キャンセルされたグループの実行開始時の前記カウンタ値との差に関する情報を、前記キャンセルトレース項目に含めるよう構成されることを特徴とする請求項17に記載のトレースユニット。
  19. 前記トレース制御データはtraced−interesting値を備え、前記traced−interesting値は、グループのトレースエレメントが出力されることに応じて設定され、且つグループのトレースエレメントが出力されない場合にクリアになり、前記トレース回路は、前記traced−interesting値を頼りに前記差に関する前記情報を判断するよう構成されることを特徴とする請求項18に記載のトレースユニット。
  20. 前記トレースユニットは、推測的に実行された選択命令グループがコミットされたことを伝える前記データ処理装置からのコミット指示の受信に反応し、前記選択グループを指示するコミットトレース項目を生成し、且つ前記現在カウンタ値と前記選択グループの前記最後カウンタ値との差に関する情報を含むようにすることを特徴とする請求項16に記載のトレースユニット。
  21. 前記トレース制御データはtraced−interesting値を備え、前記traced−interesting値は、グループのトレースエレメントが出力されることに応じて設定され、且つグループのトレースエレメントが出力されない場合にクリアになり、前記トレース回路は、前記traced−interesting値を頼りに前記差に関する前記情報を判断するよう構成されることを特徴とする請求項20に記載のトレースユニット。
  22. 前記トレース制御データは前記グループのtrace start/stop値を備え、前記trace start/stop値はtrace enableが設定されるか否かに影響し、前記trace start/stop値は前記少なくとも1つのプロセッサの検出される所定挙動に応じて設定されることを特徴とする請求項1に記載のトレースユニット。
  23. 命令ストリームを実行するデータ処理装置と、前記データ処理装置を監視する請求項1に記載のトレースユニットと、を備えることを特徴とするデータ処理ユニット。
  24. 少なくとも1つの命令ストリームを実行する少なくとも1つのプロセッサの処理活動を示すトレースデータ項目を生成する方法であって、前記少なくとも1つの命令ストリームは複数の命令グループを備え、前記少なくとも1つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記方法は、
    現在のトレース制御データにより制御されるトレース回路を使用し前記少なくとも1つのプロセッサの挙動を監視するステップと、
    前記実行される命令グループの1命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するステップと、
    前記推測的に実行された少なくとも1つの命令グループを前記少なくとも1つのプロセッサがキャンセルしたことを検出することに応じ、前記キャンセルされる推測実行命令の直前に実行された前記命令グループのデータストアに蓄積された前記トレース制御データの少なくとも一部を取り出すステップと、前記取り出されたトレース制御データにより前記トレース回路を制御するステップと、を備えることを特徴とする方法。
  25. 少なくとも1つの命令ストリームを実行する少なくとも1つのプロセッサの処理活動を示すトレースデータ項目を生成するトレース装置であって、前記少なくとも1つの命令ストリームは複数の命令グループを備え、前記少なくとも1つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記トレース装置は、
    現在のトレース制御データにより制御される前記少なくとも1つのプロセッサの挙動を監視するトレース監視手段と、
    前記実行される命令グループのうち該当する命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するデータ蓄積手段と、を備え、
    前記トレース監視手段は、前記命令グループの実行の検出に応じ、前記トレース制御データの前記少なくとも一部を前記データ蓄積手段に蓄積し、
    前記トレース監視手段は、前記推測的に実行された少なくとも1つの命令グループを前記少なくとも1つのプロセッサがキャンセルしたことを検出することに反応し、前記キャンセルされた推測実行命令の前に実行された前記命令グループの前記データ蓄積手段に蓄積された前記トレース制御データの少なくとも一部を取り出し、且つ前記取り出されたトレース制御データにより前記トレース監視手段を制御することを特徴とするトレース装置
JP2011136189A 2010-06-21 2011-06-20 推測的に実行される命令のトレーシング Active JP5604373B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1010356.2A GB2481385B (en) 2010-06-21 2010-06-21 Tracing speculatively executed instructions
GB1010356.2 2010-06-21

Publications (2)

Publication Number Publication Date
JP2012003771A JP2012003771A (ja) 2012-01-05
JP5604373B2 true JP5604373B2 (ja) 2014-10-08

Family

ID=42582707

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011136189A Active JP5604373B2 (ja) 2010-06-21 2011-06-20 推測的に実行される命令のトレーシング

Country Status (4)

Country Link
US (2) US8769344B2 (ja)
JP (1) JP5604373B2 (ja)
CN (1) CN102289405B (ja)
GB (1) GB2481385B (ja)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2481385B (en) * 2010-06-21 2018-08-15 Advanced Risc Mach Ltd Tracing speculatively executed instructions
US8799719B2 (en) 2011-05-19 2014-08-05 International Business Machines Corporation On demand tracing of application code execution
WO2013101214A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Optional logging of debug activities in a real time instruction tracing log
US9158660B2 (en) 2012-03-16 2015-10-13 International Business Machines Corporation Controlling operation of a run-time instrumentation facility
US9454462B2 (en) 2012-03-16 2016-09-27 International Business Machines Corporation Run-time instrumentation monitoring for processor characteristic changes
US9430238B2 (en) 2012-03-16 2016-08-30 International Business Machines Corporation Run-time-instrumentation controls emit instruction
US9442824B2 (en) 2012-03-16 2016-09-13 International Business Machines Corporation Transformation of a program-event-recording event into a run-time instrumentation event
US9367316B2 (en) 2012-03-16 2016-06-14 International Business Machines Corporation Run-time instrumentation indirect sampling by instruction operation code
US9471315B2 (en) 2012-03-16 2016-10-18 International Business Machines Corporation Run-time instrumentation reporting
US9465716B2 (en) 2012-03-16 2016-10-11 International Business Machines Corporation Run-time instrumentation directed sampling
US9280447B2 (en) 2012-03-16 2016-03-08 International Business Machines Corporation Modifying run-time-instrumentation controls from a lesser-privileged state
US9405541B2 (en) 2012-03-16 2016-08-02 International Business Machines Corporation Run-time instrumentation indirect sampling by address
US9483268B2 (en) 2012-03-16 2016-11-01 International Business Machines Corporation Hardware based run-time instrumentation facility for managed run-times
US9411591B2 (en) 2012-03-16 2016-08-09 International Business Machines Corporation Run-time instrumentation sampling in transactional-execution mode
US9250902B2 (en) 2012-03-16 2016-02-02 International Business Machines Corporation Determining the status of run-time-instrumentation controls
US9880842B2 (en) * 2013-03-15 2018-01-30 Intel Corporation Using control flow data structures to direct and track instruction execution
RU2635044C2 (ru) * 2013-06-27 2017-11-08 Интел Корпорейшн Режим слежения в устройстве обработки в системах трассировки команд
JP6122749B2 (ja) * 2013-09-30 2017-04-26 ルネサスエレクトロニクス株式会社 コンピュータシステム
US9626119B2 (en) * 2014-11-14 2017-04-18 Intel Corporation Using counters and a table to protect data in a storage device
US9910475B2 (en) 2014-12-23 2018-03-06 Intel Corporation Processor core power event tracing
US10061583B2 (en) * 2014-12-24 2018-08-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
GB2534923B (en) * 2015-02-06 2022-03-09 Advanced Risc Mach Ltd Trace data capture device and method, system, diagnostic method and apparatus and computer program
US9542290B1 (en) 2016-01-29 2017-01-10 International Business Machines Corporation Replicating test case data into a cache with non-naturally aligned data boundaries
US10169180B2 (en) 2016-05-11 2019-01-01 International Business Machines Corporation Replicating test code and test data into a cache with non-naturally aligned data boundaries
GB2551747B (en) * 2016-06-29 2019-04-10 Advanced Risc Mach Ltd Diagnostic data capture
US10055320B2 (en) 2016-07-12 2018-08-21 International Business Machines Corporation Replicating test case data into a cache and cache inhibited memory
GB2553582B (en) 2016-09-13 2020-07-08 Advanced Risc Mach Ltd An apparatus and method for generating and processing a trace stream indicative of instruction execution by processing circuitry
US10223225B2 (en) 2016-11-07 2019-03-05 International Business Machines Corporation Testing speculative instruction execution with test cases placed in memory segments with non-naturally aligned data boundaries
US10261878B2 (en) 2017-03-14 2019-04-16 International Business Machines Corporation Stress testing a processor memory with a link stack
US10365987B2 (en) 2017-03-29 2019-07-30 Google Llc Synchronous hardware event collection
US9875167B1 (en) 2017-03-29 2018-01-23 Google Inc. Distributed hardware tracing
GB2570466B (en) * 2018-01-25 2020-03-04 Advanced Risc Mach Ltd Commit window move element
US10956157B1 (en) 2018-03-06 2021-03-23 Advanced Micro Devices, Inc. Taint protection during speculative execution
US10936402B2 (en) 2018-11-26 2021-03-02 International Business Machines Corporation Speculative data processing and recovery
US11526780B2 (en) * 2019-08-05 2022-12-13 Microsoft Technology Licensing, Llc Converting nonnative skills for conversational computing interfaces
US11463443B2 (en) 2019-09-19 2022-10-04 Bank Of America Corporation Real-time management of access controls

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0404068A3 (en) * 1989-06-20 1991-12-27 Fujitsu Limited Branch instruction executing device
JP2563708B2 (ja) 1990-11-29 1996-12-18 株式会社東芝 マイクロプロセッサ装置およびそれを用いたエミュレータ装置
US5564028A (en) * 1994-01-11 1996-10-08 Texas Instruments Incorporated Pipelined data processing including instruction trace
US5802272A (en) * 1994-12-19 1998-09-01 Digital Equipment Corporation Method and apparatus for tracing unpredictable execution flows in a trace buffer of a high-speed computer system
US6094729A (en) * 1997-04-08 2000-07-25 Advanced Micro Devices, Inc. Debug interface including a compact trace record storage
US6021488A (en) * 1997-09-23 2000-02-01 International Business Machines Corp. Data processing system having an apparatus for tracking a status of an out-of-order operation and method thereof
US7137105B2 (en) * 1999-05-12 2006-11-14 Wind River Systems, Inc. Dynamic software code instrumentation method and system
US7058928B2 (en) * 1999-12-23 2006-06-06 Identify Software Ltd. System and method for conditional tracing of computer programs
US6681321B1 (en) * 2000-04-20 2004-01-20 International Business Machines Corporation Method system and apparatus for instruction execution tracing with out of order processors
US8069336B2 (en) 2003-12-03 2011-11-29 Globalfoundries Inc. Transitioning from instruction cache to trace cache on label boundaries
FR2864655B1 (fr) * 2003-12-31 2006-03-24 Trusted Logic Procede de controle d'integrite de programmes par verification d'empreintes de traces d'execution
US7228457B2 (en) * 2004-03-16 2007-06-05 Arm Limited Performing diagnostic operations upon a data processing apparatus with power down support
US7283619B2 (en) * 2004-06-15 2007-10-16 Cisco Technology, Inc. System and method for end-to-end communications tracing
US7707394B2 (en) * 2006-05-30 2010-04-27 Arm Limited Reducing the size of a data stream produced during instruction tracing
US7487340B2 (en) 2006-06-08 2009-02-03 International Business Machines Corporation Local and global branch prediction information storage
US20080155339A1 (en) * 2006-10-25 2008-06-26 Gary S Lowe Automated tracing
US7757068B2 (en) * 2007-01-16 2010-07-13 Oracle America, Inc. Method and apparatus for measuring performance during speculative execution
GB2459652B (en) 2008-04-28 2010-09-22 Imagination Tech Ltd Controlling instruction scheduling based on the space in a trace buffer
GB2478328B (en) * 2010-03-03 2015-07-01 Advanced Risc Mach Ltd Method, apparatus and trace module for generating timestamps
GB2481385B (en) * 2010-06-21 2018-08-15 Advanced Risc Mach Ltd Tracing speculatively executed instructions

Also Published As

Publication number Publication date
GB2481385B (en) 2018-08-15
GB201010356D0 (en) 2010-08-04
CN102289405B (zh) 2016-11-23
US8769344B2 (en) 2014-07-01
US20140195786A1 (en) 2014-07-10
CN102289405A (zh) 2011-12-21
US9639361B2 (en) 2017-05-02
US20110314342A1 (en) 2011-12-22
JP2012003771A (ja) 2012-01-05
GB2481385A (en) 2011-12-28

Similar Documents

Publication Publication Date Title
JP5604373B2 (ja) 推測的に実行される命令のトレーシング
KR100388947B1 (ko) 실행 파이프라인 외부에 복수의 프로그램 카운터 및트레이스 버퍼를 구비한 프로세서
JP5914521B2 (ja) 処理装置、トレースユニット、および診断装置
KR100388952B1 (ko) 비순서적 멀티스레드 실행을 수행하는 적재 및 저장명령어를 배열하기 위한 시스템
KR100382126B1 (ko) 오예측 이후에 재실행될 수 있는 명령어를 홀드하기 위한 파이프라인 외부의 트레이스 버퍼
TWI517035B (zh) 當追蹤資料處理系統時的關鍵配置
TW201439904A (zh) 在提前執行中管理潛在無效結果
JP4903149B2 (ja) コンピュータシステム上でコンピュータプログラムを処理する方法
US7519510B2 (en) Derivative performance counter mechanism
CN108694094B (zh) 用于处理存储器访问操作的装置和方法
KR20030019451A (ko) 추측실행의 비순차적 프로세서에서 정확한 예외를전송하는 메카니즘
US20170199778A1 (en) Lazy runahead operation for a microprocessor
US9514046B1 (en) Dynamic detection and software correction of incorrect lock and atomic update hint bits
US20140164738A1 (en) Instruction categorization for runahead operation
EP3765963B1 (en) Tracing branch instructions
JP2008513899A (ja) コンピュータシステム上でコンピュータプログラムを処理する方法
US6910120B2 (en) Speculative counting of performance events with rewind counter
US9921953B2 (en) Dynamic detection and correction of incorrect lock and atomic update hint bits
US9858172B2 (en) Apparatus and method for controlling debugging of program instructions including a transaction
JP7153731B2 (ja) コミット・ウィンドウ移動要素

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130904

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140425

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140507

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140702

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: 20140728

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140825

R150 Certificate of patent or registration of utility model

Ref document number: 5604373

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250