JP5512041B2 - データ処理システムのトレース時のキー割り当て - Google Patents

データ処理システムのトレース時のキー割り当て Download PDF

Info

Publication number
JP5512041B2
JP5512041B2 JP2013515964A JP2013515964A JP5512041B2 JP 5512041 B2 JP5512041 B2 JP 5512041B2 JP 2013515964 A JP2013515964 A JP 2013515964A JP 2013515964 A JP2013515964 A JP 2013515964A JP 5512041 B2 JP5512041 B2 JP 5512041B2
Authority
JP
Japan
Prior art keywords
trace
index value
data
unit
index
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
JP2013515964A
Other languages
English (en)
Other versions
JP2013533546A (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 JP2013533546A publication Critical patent/JP2013533546A/ja
Application granted granted Critical
Publication of JP5512041B2 publication Critical patent/JP5512041B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • 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/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution

Landscapes

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

Description

本発明は、データ処理ユニットのアクティビティの監視、具体的には、データ処理ユニットのそれらの処理アクティビティを示すトレースデータのアイテムの生成に関連する。
現代のデータ処理装置(マイクロプロセッサ等)の複雑性は、そのようなデータ処理装置の動作のプログラミングおよびデバッギングが、複雑で時間を要する作業であることを意味する。したがって、処理アクティビティを実行する際のデータ処理装置の動作を監視することができるようにデータ処理装置を正確に構成することを目指すことが、それらの動作が所望される通りに実行されていることを検証するために、および、問題が生じたときのトラブルシューティングのために、プログラマーにとって極めて有用である。
データ処理装置の処理アクティビティを監視するこの要望は、現代のデータ処理装置が、典型的にはシステムオンチップ(SoC)等の非常に小規模のデバイスとして構成されることの知識とバランスが保たれなければならない。そのようなデバイスにおけるスペースの制約が、その構造において極めて重要な因子であることは周知であり、したがって、そのようなデバイスに監視コンポーネントを追加する機会は非常に限られている。同様に、SoCの周囲のピンも高価であり、外部分析のためにSoCからエクスポートされ得る診断データの量を制限している。
これらの理由から、そのようなデータ処理装置に関連付けられたトレースユニットを提供することが知られており、トレースユニットは、データ処理装置の処理アクティビティを監視し、それらの処理アクティビティを示すトレースデータアイテムのシーケンスを生成するように構成される。特に、転送されなければならないデータの帯域幅を低減するために、冗長である任意の情報を削除し、現在の分析目的に厳密に必要なデータのみを含む、高圧縮された形態でトレースデータのアイテムを提供することが知られておいる。米国特許第7,707,394号は、命令トレースの間に生成されるデータストリームのサイズを低減するためのいくつかの技術を記載している。
データ処理装置のアクティビティのトレースに関連した問題は、データ処理装置が投機的命令実行を行うことができる場合、特に顕著である。投機的命令実行は、例えば待機中のパイプライン段階を回避することにより、より速い動作を提供する機会を有することから、この技術を提供することが知られている。しかしながら、投機が解消されるまで(すなわち、所与の命令が実際に確定されるかどうかが知られるまで)、トレースユニットはデータ処理装置の動作を決定的に示すトレースデータのストリームを提供することができないため、投機的命令実行は、トレースユニットに困難を提示する。1つの可能性は、投機が解消されるまで、トレースユニットが、生成するトレースデータをバッファリングすることであるが、この技術に必要なバッファスペースは、プロセッサの投機深度が大きい場合、不要に大きくなり得る。また、代替の技術は、投機的にトレースデータを生成し、次いで、対応する命令が誤って投機されたことが後に判明した場合、トレースデータのあるアイテムをキャンセルすることである。例えば、Nexusプロトコル(「The Nexus 5001 Forum - Standard for a Global Embedded Processor Debug Interface」, IEEE−ISTO 5001 − 2003, 23 December 2003)は、特定数のトレースデータアイテムのキャンセルをサポートしている。
しかしながら、データ処理装置が、キャンセルされるべき命令(またはより典型的には命令のグループ)をトレースユニットに具体的に示す場合であっても、それらのキャンセルされた命令に対応するトレースデータのアイテムを識別することは、単純ではない。いくつかの命令のみがプログラムフローの変化をもたらし得るため、命令のグループは投機実行の典型であり、したがって、グループが仮に実行される場合、命令のグループが識別され得、次いでグループ全体が実行される。
選択された命令のトレースデータを生成するのみであるというトレース技術に関する特定の困難が生じるが、その理由は、(例えば)データ処理装置が、最も最近の命令の2つのグループがキャンセルされるべきであることを示す場合、トレースユニットは、命令のグループと生成されるトレースデータのアイテムの数との間にそのような直接的な相関がないために、下流側の分析ユニットに、トレースデータの2つのアイテムがキャンセルするべきであることを単に示すことができないことから、この技術がトレースデータの対応するキャンセルアイテムの生成を困難とし得るためである。
後にトレースデータの特定のアイテムを識別する上での困難に関連した別の問題は、データ転送に関連して生じる。ロードまたは記憶動作は、完了するまでに多くのサイクルを要し得ることから、(例えば)ロード命令が実行され、トレースデータの対応するアイテムが生成される場合、要求されたデータ値がメモリから検索された時までに、データ値が関連付けられるべき、いくつものサイクル前に生成されたそのトレースデータの対応するアイテムを識別することは困難である。プロセッサが、プログラム順とは無関係に命令を実行することができる、またはデータを転送することができる場合、トレースユニットは、どのデータ値がどのデータアドレスに属するのかを識別するすべがない可能性がある。
アウトオブオーダー(out−of−order)プロセッサのトレースに関するいくつかの背景的な技術情報は、「The PD Trace Interface and Trace Control Block Specification」, 4 July 2005(http://www.mips.com/products/product−materials/processor/mips−architecture/から入手可能である)およびARM ETMv3 architecture (http://infocenter.arm.comから入手可能である)に見出すことができる。
したがって、トレースユニットが上述の問題に対応することができるようにする、トレースデータのアイテムを生成するための改善された技術を提供することが望ましい。
第1の態様から見れば、本発明は、データ処理ユニットの処理アクティビティを示すトレースデータのアイテムを生成するように構成されるトレースユニットであって、インデックス値を、トレースユニットにより生成されたトレースデータのアイテムの少なくともサブセットに関連付けるように構成される、トレースインデックスユニットを備え、前記トレースインデックスユニットは、所定のシーケンスのインデックス値の1つとして前記インデックス値を生成するように構成され、前記所定のシーケンスにおけるn+1番目のインデックス値は、前記所定のシーケンスにおけるn番目のインデックス値のみから決定され得る、トレースユニットを提供する。
本発明の技術によれば、トレースユニットは、インデックス値を、トレースユニットにより生成されたトレースデータのアイテムの少なくともサブセットに関連付けるように構成される、トレースインデックスユニットを備える。特に、インデックス値は、所定のシーケンスにおけるn+1番目のインデックス値が、所定のシーケンスにおけるn番目のインデックス値のみから決定され得るように、所定のシーケンスのインデックス値に従ってトレースインデックスユニットにより生成される。トレースデータのアイテムの生成に関して、これらのインデックス値の、トレースデータのアイテムの少なくともいくつかとの関連付けは、後にトレースデータの特定のアイテムへの参照が可能となるように、トレースユニットが、生成するトレースデータのアイテムの少なくともいくつかを「タグ化」することができることから有利である。これは、例えば、後に、誤った投機のためにトレースデータの特定のアイテムをキャンセルすることが求められる場合に、特に有益となり得る。代替として、これは、データ値を、完了するまでに長時間を要し得るデータ転送命令のために生成されたトレースデータのアイテムと関連付けることが求められる場合に、有益となり得る。このようにしてトレースデータのアイテムをインデックス化することにより、後にトレースデータの特定のアイテムを参照することができる。また、所定のシーケンスにおけるn番目のインデックス値のみから、所定のシーケンスにおけるn+1番目のインデックス値を決定することができることにより、インデックス化の多くを暗示することができ、また一般に明示的にトレースされる必要がない。したがって、トレースユニット内の貴重なスペースを節約することができ、トレースデータ帯域幅を大幅に節約することができる。
所定のシーケンスのインデックス値を提供するいくつかの手法が可能であるが、一実施形態において、前記トレースユニットは、カウンタを備え、前記カウンタは、前記所定のシーケンスのインデックス値を提供するように構成される。カウンタは、トレースユニットのハードウェアに比較的容易に実装することができ、カウンタにより生成された所定のシーケンス(典型的には増分するシーケンス)のインデックス値は、有利に容易に管理される。
トレースユニットがトレースデータのいくつかのアイテムに関連付けるインデックス値を利用し得る様々な手法があるが、実施形態において、前記トレースユニットは、少なくとも1つの前記インデックス値を記憶するように構成されるインデックス記憶ユニットを備える。後のトレースユニットの動作が、記憶された値を参照し、ひいてはそれに関連したトレースデータのアイテムを参照し得るように、インデックス記憶ユニットの提供により、トレースユニットは、少なくとも1つのインデックス値の記録を維持することができる。
いくつかの実施形態において、トレースユニットは、2つのインデックス値の間の差を記憶するように構成されるインデックス記憶ユニットを備える。これは、有利にコンパクトな記憶メカニズムを提供し、これにより、例えば、一連のインデックス値が記憶され得る。このインデックス記憶ユニットは、一実施形態において、FIFOデバイスであってもよい。FIFOデバイスは、値のシーケンスが記憶され得る単純な構造を示す。
トレースユニットが監視するように構成されるデータ処理ユニットは、いくつかの形態をとり得るが、一実施形態において、前記データ処理ユニットの前記処理アクティビティは、投機的命令実行を備え、前記少なくとも1つのインデックス値は、少なくとも1つの投機的に実行された命令に関連付けられる。投機的に実行された命令が、後にデータ処理ユニットによって誤って投機されたことが示される場合、トレースユニットは、この事実をトレースデータの受信側に知らせる必要があり得るため、命令の投機的実行は、困難を有するトレースユニットを提示し得る。投機的に実行された命令に関連付けられたインデックス値を記憶し得るインデックス記憶ユニットを有することにより、トレースユニットには、トレースデータの対応するアイテムを生成してからある時間経過した後であっても、その投機的命令への参照を維持することができる機構が提供される。
いくつかの実施形態において、前記インデックス記憶ユニットは、前記少なくとも1つの投機的に実行された命令が確定されるかまたはキャンセルされるまで、前記少なくとも1つのインデックス値を記憶するように構成される。したがって、その場合、インデックス記憶ユニットは、投機的に実行された命令の最終結果、すなわち、その命令が正確に投機的に実行された(および「確定」される)か、または誤って投機されたか(および「キャンセル」される)が知られるまで、その投機的に実行された命令に対応するインデックス値を維持する。対応するインデックス値をインデックス記憶ユニットに記憶させることにより、トレースユニットは、後にその命令を、ひいてはそれに関連して生成された任意のトレースデータを参照することができる。
命令の投機的実行は、個々の命令の投機的実行を含み得るが、いくつかの実施形態において、前記投機的に実行された命令は、命令のグループの一部を形成し、前記命令のグループの第1の命令の投機的実行は、前記命令のグループの全ての命令の投機的実行を必要とする。
いくつかの命令(例えば分岐)はシーケンシャルな命令の実行からの可能な偏差をもたらし、他の命令(例えばADD命令)は、それらに先行する命令が実行された場合確かに実行されるため、グループにおける命令の投機的な実行は実践的である。この理由から、投機的命令実行を行うように構成されるデータ処理ユニットは、典型的には、そのような分割できないグループを形成することが知られている命令のグループを投機的に実行する。
いくつかの実施形態において、前記インデックス記憶ユニットは、前記命令のグループにおける第1の命令に関連付けられた第1のインデックス値を記憶するように構成される第1のインデックス記憶ユニットを備える。投機的に実行された命令のグループに対応するトレースデータを生成する上で、その命令のグループにおける第1の命令に関連付けられた第1のインデックス値を記憶することは、それによって命令のグループの開始が定義されるため、有利である。
第1のインデックス記憶ユニットは、単一のエントリのみを記憶してもよいが、実施形態において、前記第1のインデックス記憶ユニットは、第1の複数のエントリを備え、前記命令のグループを示す指標に基づいて、前記第1のインデックス値を記憶するように構成される。その結果、第1のインデックス記憶ユニットは、命令のグループへの後の参照により、対応する第1のインデックス値が第1のインデックス記憶ユニットから検索され得ることが可能となるように、その命令のグループを示す指標に対応するエントリに第1のインデックス値を記憶することができる。
データ処理ユニットが、命令のいくつかのグループを投機的に実行し得ることを考慮すると、トレースユニットがそれらのグループのそれぞれに対応するインデックス値を追跡することができれば有利であり、したがって、一実施形態において、前記第1の複数のエントリのいくつかは、前記データ処理ユニットにより投機的に実行されてもよい、少なくとも命令の最大数のグループに対応する。
当然ながら、投機的命令実行は時折不正確であり、いくつかの実施形態において、前記トレースユニットは、前記データ処理ユニットからのキャンセル指示を受信するように構成され、前記キャンセル指示は、投機的に実行された命令の選択されたグループがキャンセルされたことを示し、前記トレースユニットは、前記命令の選択されたグループを示すトレースデータのキャンセルアイテムを生成するように構成される。したがって、データ処理ユニットが、命令の選択されたグループがキャンセルされるべきであることを示す場合、トレースユニットは、トレースデータの対応するキャンセルアイテムを生成することにより、この情報をそのトレースデータの受信側に伝達するように構成される。
特に、一実施形態において、前記トレースユニットは、前記キャンセル指示の受信後、前記第1のインデックス記憶ユニットに記憶され、前記命令の選択されたグループに関連付けられた第1のインデックス値に基づいて、前記トレースデータのキャンセルアイテムを生成するように構成される。第1のインデックス記憶ユニットに記憶された第1のインデックス値は、命令のグループにおける第1の命令に関連付けられ、したがって、この第1のインデックス値への参照により、トレースユニットは、その命令の選択されたグループのキャンセルに起因してキャンセルされるべきトレースデータの第1のアイテムの指示を提供することができる。このトレースデータの第1のアイテムは、キャンセルされるいくつかのアイテムの第1のアイテムであってもよく、または、キャンセルされるトレースデータの1つの特定のアイテムであってもよい。
いくつかの実施形態において、トレースユニットは、前記所定のシーケンスのインデックス値を提供するように構成されるカウンタを備え、前記トレースユニットは、さらに前記カウンタの現在のカウンタ値に基づいて、前記トレースデータのキャンセルアイテムを生成するように構成される。トレースユニットは、カウンタを使用してインデックス値のシーケンスを生成するように構成されるため、カウンタの現在のカウンタ値への参照は、トレースデータの最も最近のアイテムへの参照を提供する。したがって、第1のインデックス値および現在のカウンタ値の両方に基づいてトレースデータのキャンセルアイテムを生成することにより、トレースユニットは、そのトレースデータの受信側に、トレースデータアイテムのシーケンスのどこでキャンセルを開始すべきか、およびどこで終了すべきかを示すことができる。
いくつかの実施形態において、前記インデックス記憶ユニットは、前記命令のグループにおける最後の命令に関連付けられた最後のインデックス値を記憶するように構成される最後のインデックス記憶ユニットを備える。投機的に実行された命令のグループに対応するトレースデータを生成する上で、その命令のグループにおける最後の命令に関連付けられた最後のインデックス値を記憶することは、それによって命令のグループの終了が定義されるため、有利である。
最後のインデックス記憶ユニットは、単一のエントリのみを記憶してもよいが、実施形態において、前記最後のインデックス記憶ユニットは、第2の複数のエントリを含み、前記命令のグループを示す指標に基づいて、前記最後のインデックス値を記憶するように構成される。その結果、最後のインデックス記憶ユニットは、命令のグループに対する後の参照により、対応する最後のインデックス値が第2のインデックス記憶ユニットから検索され得ることが可能となるように、その命令のグループを示す指標に対応するエントリに最後のインデックス値を記憶することができる。
データ処理ユニットが、命令のいくつかのグループを投機的に実行し得ることを考慮すると、トレースユニットがそれらのグループのそれぞれに対応するインデックス値を追跡することができれば有利であり、したがって、一実施形態において、前記第2の複数のエントリのいくつかは、前記データ処理ユニットにより投機的に実行されてもよい、少なくとも命令の最大数のグループに対応する。
投機的命令実行は、プログラムフローが(統計的に言って)正確に予測され得る多くの状況が存在するため実装される。命令の投機的実行が正確であることが決定的に知られると、その命令は「確定」され、いくつかの実施形態において、前記トレースユニットは、前記データ処理ユニットからの確定指示を受信するように構成され、前記確定指示は、投機的に実行された命令の選択されたグループが確定されたことを示し、前記トレースユニットは、前記命令の選択されたグループを示すトレースデータの確定アイテムを生成するように構成される。したがって、データ処理ユニットが、命令の選択されたグループが確定されることを示す場合、トレースユニットは、トレースデータの対応する確定アイテムを生成することにより、この情報をそのトレースデータの受信側に伝達するように構成される。
特に、一実施形態において、前記トレースユニットは、前記確定指示の受信後、前記最後のインデックス記憶ユニットに記憶され、前記命令の選択されたグループに関連付けられた最後のインデックス値に基づいて、前記トレースデータの確定アイテムを生成するように構成される。最後のインデックス記憶ユニットに記憶された最後のインデックス値は、命令のグループにおける最後の命令に関連付けられ、したがって、この最後のインデックス値への参照により、トレースユニットは、その命令の選択されたグループの確定に起因して確かに正しいトレースデータの最後のアイテムの指示を提供することができる。このトレースデータの最後のアイテムは、確定するいくつかのアイテムの終了ポイントを提供してもよく、または確定する特定のアイテムであってもよい。
いくつかの実施形態において、トレースユニットは、前記所定のシーケンスのインデックス値を提供するように構成されるカウンタと、未確定記憶ユニットとを備え、前記トレースユニットは、前記トレースの確定アイテムを生成する際に、前記未確定記憶ユニットに前記カウンタの現在のカウンタ値を記憶するように構成される。したがって、命令のグループが確定される瞬間に、トレースユニットは、未確定命令が開始するポイントを示す現在のカウンタ値の記録を作成することができる。
いくつかの実施形態において、トレースユニットは、前記未確定記憶ユニットに記憶された値に基づいて、前記トレースの確定アイテムを生成するように構成される。未確定記憶ユニットは、トレースの確定アイテムが最後に生成された瞬間からの現在のカウンタ値を記憶するため、未確定記憶ユニットに記憶された値の両方に基づいてトレースデータの確定アイテムを生成することにより、トレースユニットは、そのトレースデータの受信側に、トレースデータアイテムのシーケンスのどこで確定を開始すべきか、およびどこで終了すべきかを示すことができる。
いくつかの実施形態において、前記インデックス記憶ユニットは、前記命令のグループにおける第1の命令に関連付けられた第1のインデックス値を記憶するように構成される第1のインデックス記憶ユニットを備え、前記インデックス記憶ユニットは、前記命令のグループにおける最後の命令に関連付けられた最後のインデックス値を記憶するように構成される最後のインデックス記憶ユニットを備え、前記最後のインデックス値は、前記第1のインデックス値に関連した形式で記憶される。
命令のグループにおける命令の数に対する制約は、一方でその命令のグループにおける第1の命令と最後の命令との間の命令の数に対し制約を課すが、最後にインデックス化された値を、第1のインデックス値に関連した形式で、例えばそれに対するオフセットとして記憶することにより、有利な記憶効率を得ることができることを意味し得る。この関連した形式は、いくつかの形態をとり得ることが認識されるが、一実施形態において、前記第1のインデックス値に関連した前記形式は、2ビットデータ形式である。代替の実施形態は、関心のあるグループにおける命令の数に依存して、1ビットデータ形式または2ビットを超えるデータ形式を使用し得る。
いくつかの実施形態において、トレースユニットは、投機深度カウンタを備え、前記投機深度カウンタは、前記データ処理ユニットにより実行されている命令の現在の投機深度を示すように構成される。投機深度カウンタの提供により、トレースユニットは、投機的に実行され、したがってキャンセルまたは確定される必要があり得る命令の数を追跡することができる。したがって、この投機深度カウンタは、投機的に実行された命令が確定される、またはキャンセルされる場合に減少され得る。
いくつかの実施形態において、トレースユニットは、保留確定カウンタを備え、前記保留確定カウンタは、出力が保留されているトレースデータの確定アイテムの現在の数を示すように構成される。したがって、トレースユニットは、トレースデータの確定アイテムを、それが生じた際にすぐに出力する必要はないが、そのようないくつかの保留アイテムを追跡することができる。これは、さらに、トレース帯域幅の望ましい低減に有益である。
いくつかの実施形態において、トレースユニットは、前記トレースデータの確定アイテムが生成されることなく前記確定指示が受信される場合、前記保留確定カウンタを増分させるように構成される。したがって、保留確定の数の現在高が維持され得るため、保留確定カウンタは、トレースデータが生成されなければならない周波数を低減し、確定指示がデータ処理ユニットから受信されるがトレースデータの確定アイテムは生成されない場合、保留確定カウンタを増分させる。
いくつかの実施形態において、トレースユニットは、前記投機深度カウンタが所定の値に達する場合、前記保留確定カウンタを減少させるように構成される。例えば、投機深度カウンタがデータ処理ユニットの既知の最大投機深度に達する場合、最も古い投機的に実行された命令の確定が生じなければならないことが推察され得る。
いくつかの実施形態において、前記投機深度カウンタが所定の値に達する場合、トレースデータのさらなるアイテムの生成は、前記トレースユニットが前記データ処理ユニットからさらなる確定指示を受信したことを暗示する。例えば、投機深度カウンタがデータ処理ユニットの既知の最大投機深度に達する場合、さらなるトレースデータのアイテムが受信されると、最も古い投機的に実行された命令の確定が、トレースデータの受信側により推察され得る。トレースデータの受信側は、典型的には、この推察を有効化するために、データ処理ユニットの投機深度も追跡するように構成される。
いくつかの実施形態において、トレースユニットは、所定のイベントに応答して、前記所定のシーケンスの値の前記インデックス値を、所定の値にリセットするように構成される。例えば、さらなるトレースデータのアイテムを同じインデックス値に関連付けることが望ましくなり得るが、これは、インデックスシーケンスをリセットすることにより簡単に達成され得る。
いくつかの実施形態において、トレースユニットは、前記所定のシーケンスの値を、ループするシーケンスの値として生成するように構成される。これは、エンドレスのシーケンスを生成するための便利な機構を提供する。
トレースユニットは、複数の様式で構成され得るが、一実施形態において、前記トレースユニットは、前記データ処理ユニットが応答する命令の少なくとも1つの種類に対して、トレースデータのアイテムを生成しないように構成される。特定の命令は、生成されたトレースデータの受信側にとって、他の命令よりも関心がある可能性があり、したがって、ある特定の種類の命令を、関心がないトレースデータから削除することにより貴重なトレース帯域幅を節約することができる。
いくつかの実施形態において、前記インデックス記憶ユニットは、選択的に飛行中指標を記憶するように構成され、前記飛行中指標は、前記所定のシーケンスのインデックス値の記憶されたインデックス値が現在使用されていることを示す。所定のシーケンスのインデックス値は、インデックス値の再使用があいまいさなしに生じ得るように選択され得るが、ある特定のインデックス値が長期間特定のトレースアイテムに関連付けられたままである場合が存在し得る。飛行中指標は、どのインデックス値がこの様式で取り扱われるべきかを識別する機構を提供する。
いくつかの実施形態において、前記トレースユニットは、次のインデックス値を生成する際に、前記飛行中指標を参照し、前記飛行中指標が、前記次のインデックス値がまだ使用中であることを示す場合、前記次のインデックス値の代わりに代替インデックス値を記憶するように構成される。代替インデックス値を記憶することは、まだ使用中のインデックス値を再使用することを回避する。
データ処理ユニットの処理アクティビティは変動し得るが、一実施形態において、前記データ処理ユニットの前記処理アクティビティは、データアドレスを使用した記憶されたデータ値への参照を含み、前記インデックス値は、前記少なくとも1つのデータアドレスに関連付けられたデータアドレスインデックス値である。データアドレスを使用した記憶されたデータ値への参照は、命令がトレースユニットによりトレースされている時間スケールと比較して、相当な時間を要し得る。例えば、命令が、データ処理ユニットに、メモリからデータ値をそのデータアドレスを参照してロードさせる場合、そのデータ値は、いくつものクロックサイクル後まで、データ処理ユニットに返されない可能性がある。この状況では、そのローディング命令に関連した、トレースユニットにより生成されたトレースデータのアイテムは、データ値がデータ処理ユニットに返されるずっと前に生成されていた可能性がある。そのようなシナリオにおいて、データアドレスインデックス値の使用は、記憶されたデータ値を参照するデータアドレスに関連したトレースデータの特定のアイテムが、後に、例えばその参照プロセスが完了した時に識別され得る機構を提供するため、有利である。
いくつかの実施形態において、前記記憶されたデータ値への前記参照は、前記記憶されたデータ値をロードすることを含み、他の実施形態において、前記記憶されたデータ値への前記参照は、前記記憶されたデータ値を記憶することを含む。データ値のローディングおよび記憶は両方とも、上述の長い期間を必要とし得るメモリへのアクセスを必要とする。
いくつかの実施形態において、前記トレースユニットは、前記データアドレスインデックス値を、データアドレスインデックス値記憶テーブルに記憶するように構成される。データアドレスインデックス値記憶テーブルの提供により、データトレースユニットは、後に参照が必要となるまで、例えばそれに関連付けられたロードまたは記憶動作が完了した時に、データアドレスインデックス値を記憶することができる。
上述のように、その動作が完了するのに相当な時間を要し得る、トレースデータの生成されたアイテムが関連付けられ得るある特定の命令が存在する。したがって、そのような命令は、トレースされると、その命令が完了されたとみなされ得る前に生じなければならないさらなるイベントを有さない、他の命令から区別され得る。そのようなイベントが完了するのを待っている状態は、「飛行中」として知られ、いくつかの実施形態において、前記トレースユニットは、選択的に飛行中指標を記憶するように構成され、前記飛行中指標は、前記データアドレスインデックス値に関連付けられた前記記憶されたデータ値への参照がまだ完了しておらず、前記データアドレスインデックス値が飛行中であることを示す。このようにして飛行中指標を記憶するようにトレースユニットを構成することは、トレースユニットが、まだ完了していない動作に関連付けられたそれらのデータアドレスインデックス値を追跡することができる機構を提供する。
そのような実施形態において、トレースユニットは、次のデータアドレスインデックス値を生成する際に、記憶された飛行中指標を参照し、前記記憶された飛行中指標が、前記次のデータアドレスインデックス値がまだ飛行中であることを示す場合、前記次のデータアドレスインデックス値の代わりに代替データアドレスインデックス値を記憶するように構成されてもよい。
トレースユニットは、スペースの制約のために、典型的には、生成することができる有限および制限された範囲のデータアドレスインデックス値を有する。したがって、完了するのに長時間を要する命令に遭遇した場合、その命令に関連付けられたデータアドレスインデックス値の使用は、トレースユニットが、それに利用可能なデータアドレスインデックス値のフルセットを通してサイクルする場合よりも長期間必要とされ得る。したがって、トレースユニットは、まだ飛行中である、すなわちまだ再使用されるべきではないデータアドレスインデックス値に遭遇し得、この状況では、トレースユニットは、単に、所定のシーケンスにおける次のデータアドレスインデックス値を使用しないが、その代わりに代替データアドレスインデックス値を記憶するように構成される。このようにして、データアドレスインデックス値の制限された有限のセットがトレースユニットにより一般に使用され得るが、データアドレスインデックス値がそれらのデータアドレスインデックス値の自然のサイクルよりも長期間使用されることが必要とされる時折の状況にも対応することができる。
代替データアドレスインデックス値は、いくつかの形態をとり得るが、一実施形態において、前記代替データアドレスインデックス値は、データ処理ユニットインデックス値を含み、前記データ処理ユニットインデックス値は、前記データアドレスを参照するために前記データ処理ユニットにより使用される。データ処理ユニット自体は、典型的には、(プロセッササイクル期間において)行われているデータアドレスへの参照と返されているデータ値との間に大幅な遅延が存在する場合であっても、データ値をデータアドレスに関連付けることができるように、そのようなデータアドレスを参照するために使用するインデックスシステムも有する。この状況では、対応するデータ処理ユニットインデックス値(時折「コアキー」と呼ばれる)が、代替データアドレスインデックス値としてトレースユニットにより使用され得る。しかしながら、代替データアドレスインデックス値に使用されるのは「コアキー」自体である必要はなく(「特殊キー」)、一実施形態において、前記代替データアドレスインデックス値は、データ処理ユニットインデックス値との1対1対応を有し、前記データ処理ユニットインデックス値は、前記データアドレスを参照するために前記データ処理ユニットにより使用される。
飛行中指標がトレースユニットにより記憶される場合、いくつかの実施形態において、飛行中指標は、前記データアドレスインデックス値に関連して記憶されるが、他の実施形態において、前記飛行中指標は、前記データ処理ユニットインデックス値に関連して記憶される。
トレースユニットが代替データアドレスインデックス値を利用する場合、いくつかの実施形態において、前記トレースユニットは、前記代替データアドレスインデックス値を示すトレースデータのアイテムを生成するように構成される。トレースユニットにより生成された所定のシーケンスのインデックス値は、トレースデータの所与のアイテムのインデックスがトレースデータのその前のアイテムのインデックス値から推察されることを可能とするが、代替データアドレスインデックス値が使用される場合、これは該当しない。その場合、トレースデータの受信側がこの「ワンオフ」の特殊インデックス値を決定し得るように、トレースユニットは、代替データアドレスインデックス値を示すトレースデータのアイテムを生成することが有利となり得る。
代替データアドレスインデックス値およびデータアドレスインデックス値は、異なるプロトコルに従って符号化され得るが、一実施形態において、前記代替データアドレスインデックス値および前記次のデータアドレスインデックス値は、符号化プロトコルを共有する。例えば、プロトコル内の所定の範囲は、データアドレスインデックス値のために確保され得、一方残りは代替データアドレスインデックス値のために確保される。
いくつかの実施形態において、前記トレースユニットは、命令の初期グループおよび命令の後続グループに関連した前記データ処理ユニットからのマージ指示を受信するように構成され、前記命令の初期グループが実行される場合に前記命令の後続グループが実行されること、ひいては前記命令の初期グループおよび前記命令の後続グループが命令のマージされたグループであることが決定される場合、前記データ処理ユニットは前記マージ指示を発行し、前記トレースユニットは、前記マージ指示に基づいて、前記命令のマージされたグループに関連付けられた前記インデックス記憶ユニットにおける少なくとも1つのマージされたインデックス値を修正するように構成される。
投機的実行のための命令のグループを取り扱うデータ処理ユニットにおいて、グループを構成するものの定義は、典型的には、分岐命令等の命令により決定され、その分岐がどの手法で解消されるかは未知である。しかしながら、そのような分岐がとる方向が予め解消されることが可能であり、例えば、「等しい場合に分岐」命令が依存する値が決定され、この値がその分岐命令が実行される前に変化しないことが知られている場合、可能である。そのような命令が命令の2つのグループ間の境界を定義する場合、この状況では、第1の実行に続いて第2の実行が行われる必要があるため、命令の2つのグループはマージされ得る。データ処理ユニットがそのようなマージ指示を発行する場合、トレースユニットは、今は1つとなった命令の2つのグループに関連付けられたインデックス記憶ユニットに記憶されたインデックス値を修正し得る。例えば、第1および最後のインデックス値が、以前に命令の第1および第2のグループに関連したインデックス記憶ユニットに記憶された場合、これらの命令の2つのグループがマージされる際、インデックス記憶ユニットにおける値は、命令の単一のグループを示すように修正され得、第1のインデックス値は第1のグループから取り出され、最後のインデックス値は第2のグループから取り出される。
いくつかの実施形態において、前記トレースユニットは、トレースデータのマージアイテムを生成するように構成され、前記トレースデータのマージアイテムは、前記命令の初期グループおよび前記命令の後続グループがマージされたことを示す。この状況では、トレースユニットは、トレースデータの受信側に、命令の2つのグループがマージされ、命令の単一のグループとして取り扱われたことを示すために、トレースデータのマージアイテムを生成するように構成され得る。
第2の態様から見れば、本発明は、データ処理ユニットの処理アクティビティを示すトレースデータのアイテムを生成するように構成されるトレースユニットであって、インデックス値を、トレースユニットにより生成されたトレースデータのアイテムの少なくともサブセットに関連付けるためのトレースインデックス手段を備え、前記トレースインデックス手段は、所定のシーケンスのインデックス値の1つとして前記インデックス値を生成するように構成され、前記所定のシーケンスにおけるn+1番目のインデックス値は、前記所定のシーケンスにおけるn番目のインデックス値のみから決定され得る、トレースユニットを提供する。
第3の態様から見れば、本発明は、データ処理ユニットの処理アクティビティを示すトレースデータのアイテムを生成する方法であって、前記トレースデータのアイテムを生成するステップと、インデックス値を、生成されたトレースデータのアイテムの少なくともサブセットに関連付けるステップと、所定のシーケンスのインデックス値の1つとして前記インデックス値を生成するステップと、を含み、n+1番目のインデックス値は、前記所定のシーケンスにおけるn番目のインデックス値のみから決定され得る方法を提供する。
例示のみを目的として、添付の図面に示されるような本発明の実施形態を参照しながら、本発明をさらに説明する。
一実施形態によるデータ処理ユニットおよび関連付けられたトレースユニットを示す概略図である。 図1のトレースユニットをより詳細に示す概略図である。 一実施形態によるトレースユニットがとる一連のステップを示す図である。 図1のトレースユニットの代替構成を示す概略図である。 一実施形態によるシーケンシャルキーおよび特殊キーの使用を示す図である。 一実施形態によるインデックス記憶ユニットを示す概略図である。 一実施形態によるインデックス記憶ユニットを示す概略図である。 一実施形態によるトレースユニットがとる一連のステップを示す図である。 12個のシーケンシャルキーおよび4個の特殊キーに分割された16個のキーのプロトコルスペースを示す図である。
図1は、本発明によるトレースユニットを含むデータ処理システムを概略的に示す。データ処理システムは、プロセッサコア100(データ処理ユニット)と、プロセッサコア100の処理アクティビティを監視し、コアの処理アクティビティを示すトレースデータのアイテムを(トレースストリームとして)生成するように構成される、トレースユニット110とを備える。プロセッサコア100は、フェッチユニット120および実行ユニット130を備える。フェッチユニット120は、メモリ(図示せず)から命令をフェッチし、実行のためにそれらを実行ユニット130に渡す。具体的には、プロセッサコア100は、投機的でアウトオブオーダー(out−of−order)プロセッサであり、したがってフェッチユニット120は、必要であると予測される(ただし保証されない)、実行ユニット130に対する命令をフェッチするように構成される。実行ユニット130は、これらの命令を投機的に実行し、後に、その投機的に実行された命令が実際に実行されるべきか否かが知られた場合に、それらをキャンセルまたは確定する。
トレースユニット110は、命令の投機的実行を含むプロセッサコア100の処理アクティビティを示すトレースデータのアイテムを生成するように構成される。原理的に、トレースユニット110が、投機的に実行された命令に関連して生成されたトレースデータのアイテムをバッファリングし、次いで投機が解消したら単にそれらを出力トレースストリームとしてリリースすることは可能であるが、これには、トレースユニット110内の貴重な記憶スペースが必要であり、好ましくはこれが回避される。代わりに、図1に示される実施形態において、トレースユニット110はまた、トレースデータを投機的に生成するように、すなわち、投機的に実行された命令を示すトレースデータのアイテムを生成し、次いで、投機が正しいか否かが知られたら、トレースデータのそれらのアイテムをキャンセル/確定するように構成される。これを行うために、トレースユニット110には、さらに、トレースインデックスユニット140が提供される。インデックスユニット140は、インデックス値を、トレースユニット110により生成されたトレースデータのアイテムの少なくともサブセットに関連付けるように構成される。具体的には、インデックスユニット140は、インデックス値を所定のシーケンスのインデックス値として生成するように構成され、n+1番目のインデックス値は、所定のシーケンスにおけるn番目のインデックス値から決定され得る。示された実施形態において、この機能性は、図2を参照してさらに説明されるように、インデックスユニット140におけるカウンタにより提供される。
図2は、図1に示されるトレースユニット110をより詳細に概略的に示す。トレースユニット110は、トレースユニット110の全体的な動作を制御するトレース制御ユニット200を備える。トレースユニット110は、さらに、トレースユニット110が、生成するトレースデータのアイテム(のいくつか)に関連付けることができる、所定のシーケンスのインデックス値を提供する、カウンタ210を備える。トレースユニット110はまた、カウンタ210により生成されたインデックス値が記憶され得るインデックス記憶ユニット220を備える。インデックス記憶ユニット220は、第1のインデックス記憶ユニット230および最後のインデックス記憶ユニット240を備える。投機的に実行された命令のグループにおける第1の命令に対して、トレースユニット110は、カウンタ210からの現在のカウンタ値を、グループ番号によりインデックス化された第1のインデックス記憶ユニット内に記憶するように構成される。逆に、新しいグループが開始される場合、現在のカウンタ値は、最後のインデックス記憶ユニット240に記憶される。
示された実施形態において、インデックス記憶ユニット220は、命令のグループに関してプロセッサの最大投機深度に対応するのに十分なエントリを有する。プロセッサの最大投機深度は、インデックス記憶ユニットが保持する必要があるエントリの最大数を表すが、これは、その深度を超えると、プロセッサは、命令のグループを確定またはキャンセルし、これによりインデックス記憶ユニット内のエントリが解消されなければならないためである。また、示された実施形態において、プロセッサにより投機的に実行された命令の各グループは、最大で1つの分岐命令および1つのロード(または記憶)命令を有することができる。他の全ての命令は、これらの命令の指示を含むトレースストリームから推察され得るため、命令のグループ当たり最大2つの命令トレースアイテムが生成される。さらに、これにより、インデックス記憶ユニット220における所与のエントリに対して、最後のインデックス記憶ユニット240における値は、第1のインデックス記憶ユニット230における値とは最大2カウント異なってもよいことになる。したがって、最後のインデックス値を第1のインデックス値からの2ビットオフセット(すなわち、+0、+1または+2)として記憶することにより、貴重な記憶スペースが節約される。トレースユニットは、さらに、最も古い未確定記憶ユニット250を備えるが、その機能については後に説明する。点線の四角252および254を含むトレースユニット110の変形例についても、後に説明する。
トレースユニット110により実行される一連のステップが、図3に概略的に示される。フローは、プロセッサコア100からの新たなイベントを待つステップ300から開始し、このフロー自体はイベントが受信されるまでステップ300をループする。新たなイベントが受信されると(すなわち、次の命令がコアにより実行されると)、フローはステップ310に進み、イベントが命令の新たなグループの一部であるかどうかが決定される。イベントが命令の新たなグループの一部である場合、フローはステップ320に進み、インデックス記憶ユニット220(「テーブル」)の第1のインデックス記憶ユニット230におけるエントリが、新しいグループ番号Kに対応するエントリにおいて、現在のカウンタ値で更新される。次に、ステップ330において、このイベントが「関心があり」かつトレースされるかどうかが決定される。「関心がある」命令は、分岐、ロードおよび記憶命令である(上述のように、これらは命令のグループのトレースに関して重要な命令であるため)。命令は、トレースユニットにより現在フィルタリングにより除去されていない場合、トレースされる。イベント(すなわち命令)が、関心がありかつトレースされる場合、フローはステップ340に進み、カウンタ210が増分され、ステップ350において、イベントがトレースユニット110のトレースストリームに出力される。ステップ360において、グループKに対応する最後のインデックス記憶ユニット240のエントリが、カウンタ210の現在値で更新される。次いで、フローは、ステップ300に戻る。
ここで、トレースユニット110の動作、具体的にはインデックス記憶ユニット(「追跡テーブル」としても知られる)220の動作を、以下の表1を参照して説明する。表1は、プロセッサコア100が命令A、BおよびCのグループを投機的に実行し、その後グループBがキャンセルされるべきであり、グループAが確定されるべきであることを示す状況において、カウンタ値、最も古い未確定値、および追跡テーブルがトレースユニット110において更新される様式を示す。
グループAは、「関心があり」現在トレースされているロード(LDR)命令から開始する。したがって、グループAに対応する第1のインデックスユニット230のエントリ(「A.first」)は、現在のカウンタ値0を記憶し、次いでカウンタが1に増分される。最後に、グループAに対応する最後のインデックスユニット240のエントリ(「A.last」)は、現在のカウンタ値1を記憶する。グループAにおける次の命令は、「関心がある」でもなく追跡もされない移動命令(MOV)である。グループAの最後の命令は、「関心があり」かつ追跡される、等しい場合分岐(BEQ)命令であるため、カウンタは2に増分される。次いで、グループAに対応する最後のインデックスユニット240のエントリ(「A.last」)は、現在のカウンタ値2で更新される。実際には、各命令に対する最終ステップは、常に、現在のグループに対応する最後のインデックスユニット240のエントリが、現在のカウンタ値で更新されることであることに留意されたい。当然ながら、これは、カウンタがその命令に対し更新された場合に限り、任意の影響を有する。このようにして「最後の」値を更新することは、表1に示される残りの命令に対しては明示的に説明されない。
グループBは、「関心がある」でもなく追跡もされないADD命令から開始するが、新しいグループにおける第1の命令として、現在のカウンタ値2を、第1のインデックス値記憶ユニットの対応するエントリに記憶させる(すなわち、B.first=2)。グループBにおける第2の命令は、同様に「関心がある」でもなく追跡もされないSUB命令であるが、いかなる値も更新しない。
グループCは、「関心があり」かつ追跡される記憶(STR)命令から開始し、したがって、現在のカウンタ値が、第1のインデックス記憶ユニットのエントリのC.firstに記憶され、次いでカウンタが3に増分される。グループCの第2の命令は、同じく「関心があり」かつ追跡される、等しくない場合分岐(BNE)命令であるため、カウンタは4に更新される。
次に、プロセッサコア100は、グループBの投機的実行が不正確であり、したがってグループBおよびCがキャンセルされるべきであることを示す。それに応答して、トレースユニット110(トレース制御ユニット200により制御される)は、現在4であるカウンタ210の現在のカウント値、および第1のインデックス記憶ユニット230の対応するエントリ(すなわちB.first)に記憶された2の値を参照する。したがって、トレースユニット110は、トレースデータの2つのアイテムがキャンセルされるべきであることを決定し(4−2)、この事実を示すトレースデータのアイテムを生成する。次いで、カウンタ210は、2にリセットされる(以前は4であり、2つのアイテムがキャンセルされたため)。
次に、プロセッサコア100は、命令グループAの投機的実行が正しいことが決定されたため、この命令のグループが確定されるべきであることを示す。それに応答して、トレースユニット110(トレース制御ユニット200の制御下)は、最も古い未確定記憶ユニット250に記憶された値(現在0)、およびこのグループに対応する最後のインデックス記憶ユニット240におけるエントリ(すなわちA.last)に記憶された2の値を参照する。したがって、トレースユニット110は、トレースデータの2つのアイテムが確定されるべきであることを決定し(2−0)、この事実を示すトレースデータのアイテムを生成する。次いで、最も古い未確定記憶ユニット250に記憶された値は、このグループに対して読み出された「最後の」値、すなわちこの例では2にリセットされる。
表1を参照して説明される実施形態において、キャンセルおよび確定は、イベントの数を参照することにより実行され、生成されたトレースデータのアイテムは、キャンセルまたは確定されるべきイベントの数を示すことが留意される。代替の実施形態において、トレースユニットは、イベント数を参照して、トレースのキャンセル/確定アイテムを生成することができる。この場合、トレースのキャンセルアイテムに対しては、イベント数は、「第1の」値、すなわち、第1のインデックス値記憶ユニットの対応するエントリから取り出され、トレースの確定アイテムに対しては、イベント数は、「最後の」値、すなわち、最後のインデックス値記憶ユニットにおける対応するエントリから取り出される。ここで、イベント数による確定およびキャンセルは、必要とするハードウェアがより少ないと考えることができるが(減算が必要でないため)、いくつかのイベントによりキャンセル/確定を示す場合、これは、多くの場合、一般に先行ゼロを有するため、圧縮され得ることに留意されたい。「イベントの数」または「イベント数」により確定するかキャンセルするかの選択は、システム要件、すなわち、トレースユニットにおけるより少ないハードウェアまたはトレースストリームにおけるより少ない帯域幅がより重要であるとみなされるか否かに依存して決定され得る。
Figure 0005512041

ここで、以下の表2を参照してさらなる例を説明するが、トレースユニットは、さらに、例において、記憶(STR)命令をトレースしないことにより与えられる、生成されたトレースをフィルタリングする。表2に示されるグループAおよびBに対する値は、表1に示される値と同じである。しかしながら、グループCの第1の命令に対して、STR命令はトレースされず、したがって、カウントは増分されない。しがたって、グループCにおけるBNE命令(トレースされる)に遭遇した場合のみ、カウントは3に増分される。
したがって、プロセッサコアが「Bのキャンセル」メッセージを発行すると、トレースユニット110は、現在のカウントが3、B.firstが2であり(表1の例の場合のように)、したがって、トレースの1つのアイテムのみ(3−2)がキャンセルされるべきであると決定する。同様に、カウントは、1だけ(2の値に)減少される。プロセッサコアが「Aの確定」メッセージを発行すると、表1の場合のように、最も古い未確定カウントが0、A.last=2であり、したがって、トレースの2つのアイテムが確定される。次いで、最も古い未確定カウントは、2に更新される。
Figure 0005512041

表1および2を参照して説明された命令の各グループは、グループとして投機的に実行され、次いでグループとして確定またはキャンセルされる異なるグループとして残ってもよいが、いくつかの実施形態において、命令の2つのグループは、実行後に互いにマージされてもよい。
Figure 0005512041

表3は、そのような状況において、インデックス記憶ユニット(「追跡テーブル」)220における値における値がどのように使用されるかを示す。この例において、グループBにおけるBNE命令は、グループAにおけるLDR命令の前に解消される。この状況では、プロセッサコア100はこの事実を示し、トレースユニットにグループBをグループAにマージするように命令する。これは、B.lastの値をA.lastにコピーすることによりなされる。換言すれば、グループAに対応するトレース値のセットは、1だけ増加する(BNE命令のトレースアイテムは今、グループAの開始を形成するLDR命令の成功裏の実行に必然的に従うトレースアイテムのセットの一部を形成するため)。このマージが実行されたら、グループラベルBは、次いで再使用が可能であり、グループCの後の命令の次のグループのラベルとして使用される。この新たなグループB(MOVおよびBLTが実行される)において、BLTのみがトレースされる。
より単純な実施形態において、インデックス記憶ユニットは、FIFOユニットとして配設され得る。これは、図4に概略的に示され、トレースユニット110は、FIFO260の形態のトレースインデックスユニットを備える。この単純化された配設の1つの利点は、インデックス記憶ユニット260の各エントリに記憶される完全なインデックス値を必要としないことである。
グループは、トレースユニット110により受信されると、FIFO260の最後に追加される。次いで、グループが確定されると、グループはFIFOの正面から削除され、グループがキャンセルされると、グループはFIFOの最後から取り出される。FIFO内の各エントリは、そのグループにおける関心のある命令の数を示す小さな識別子を含む。最大2つの関心のある命令が任意のグループにあってもよい示された例において、識別子は、0、1または2を示す2ビットフィールドである。各エントリがFIFOから取り出されると(確定またはキャンセル時)、確定またはキャンセルするトレースイベントの数は、単純に、FIFO内のエントリの識別子により表現される数である。複数のグループが確定またはキャンセルされると、識別子は、削除されたFIFOエントリから加えられる。
ここで、図2にさらに示されるトレースユニット110の構成の変形例(点線の四角)を説明する。所与の時点において、まだ確定またはキャンセルされていない投機的トレースデータのいくつかのアイテムが存在する。この数は、ゼロからプロセッサの最大投機深度までの範囲内にある。また、通常は確定トレースデータをすぐに出力する必要はないことに留意されたい。確定カウント出力がプロセッサにより生成されたものを超えない限り、確定を遅延させる、確定カウントを加えることによって確定を結合する、または確定を分割することが可能である。
これらの因子は、確定がトレースストリームに明示的に出力されるのではなくむしろ暗示されるシステムを形成するために使用することができ、これによりトレース効率がさらに改善される。すぐに出力される代わりに、まだ出力されていない確定カウントの総数を示す合計が(「まだ出力されていない確定」記憶ユニット252に)維持される。投機的トレースデータアイテムの現在数の第2のカウントが(「投機深度」記憶ユニット254に)維持される。トレースデータアイテムが出力される場合、投機深度は1だけ増分される。確定カウントが出力される場合、投機深度は、確定数だけ減少される。キャンセルカウントが出力される場合、投機深度は、キャンセル数だけ減少される。
より多くのトレースデータが出力されると、投機深度は、最大投機深度に達する。これが生じた場合、カウント=1の確定が暗示される。同時に、投機深度が1だけ減少される。総確定カウントもまた1だけ減少される。
トレースユニットが、トレースデータの生成を停止するように命令された場合、トレースユニットは、以下を行うように構成され得る。
1)現在の未出力の総確定カウントを出力し、任意の後続の確定カウントがすぐに出力される、または、
2)全てのトレースデータが確定またはキャンセルされるのを待ち、次いで総確定カウントを出力する。
また、本発明の技術は、特にデータ値およびデータアドレスに関して、アウトオブオーダー(out−of−order)プロセッサへの具体的な適用性が見出される。アウトオブオーダー(out−of−order)プロセッサにおけるトレースデータ(命令とは対照的に)は、アウトオブオーダー(out−of−order)プロセッサが、異なる順番でデータアドレスに対してデータ値を生成または受信するという追加的な複雑性に対処しなければならない。本発明により提供されるトレースデータのアイテムのインデックス化は、データ値がそのデータアドレスと一致することを可能にする。しかしながら、トレースデータ値およびアドレスに関するさらなる困難は、その親命令に関してデータアドレスがどれほど遅くなり得るかに対して制限が課される可能性があるものの、これはその親データアドレスに関するデータ値には現実的ではないということである。例えば、読み出しは、完了するのに数百サイクルを要する可能性があり、その時に、任意の数の命令が実行されている可能性がある(これらの命令がいずれも読み出し値を必要としない限り)。
本発明の技術によれば、トレースユニットにおけるトレースインデックスユニットは、データアドレスが参照され得るように、インデックス値をそれらのデータアドレスに関連付ける。図5において、これらのインデックス値は、より低い数のラインにおいて、「データアドレスキー」である。これらのキーは一般にシーケンシャルであること、さらに、キーは、7の値に達した後0に戻ることが分かる。一般に、関連付けられたデータ値は、キーの後すぐに利用可能であり、したがって、データキーのシーケンスが戻った際に、キーは競合なしに再使用され得る。しかしながら、データ転送が完了するのに長時間を要する場合、トレースキーが解除される前にそれを再使用する可能性がある。これは、図5において、対応するデータ値が異常に長い時間受信されていないデータアドレスキー番号1により示される。したがって、データアドレスキー1が、図5において2回目に使用されるべきである時までに、それはまだ「飛行中」であり、したがって使用することができない。代わりに、トレースユニットは、シーケンシャルキー1の代わりに特殊キー(キーA)を使用するように構成される。この実施形態において、この特殊キーAは、実際には、プロセッサ100が、データ値が返されるのを待っている間このデータアドレスを追跡するために使用するコアキーである。他の実施形態において、特殊キーは、そのアルファベットがコアキーとの1対1対応を有する限り、異なる「アルファベット」から導出することができる。図5はまた、いくつかのシーケンシャルキーは、プロセッサにより明示的に無効化されている場合、対応するデータ値を有さなくてもよいことを示している(例えば、シーケンシャルキー3の第1のインスタンス)。コアキーが使用される様式に関するコア内の規則により(コアキーもまた一意的に使用されなければならない)特殊キーは飛行中再使用することができないため、特殊キーが飛行中であるかどうかをチェックする必要はないことに留意されたい。
図6は、データアドレスキーがコアキーにより参照されるキー追跡テーブルの一実施形態を概略的に示す。ここで、コアキーβは、シーケンシャルキーD1、D2およびD3が帰属する3つのデータアドレスをインデックス化するためにプロセッサコアにより使用される。次のデータアドレスは、コアキーβにより使用され、トレースユニットは、次のシーケンシャルキー、すなわちD4がコアキーαによりまだ使用されていること識別し、したがって、コアキーβ自体を現在のデータアドレス用のインデックスキーとして使用する。トレースユニットは、シーケンシャルインデックスキーD4に関連したフラグセットが、D4がまだ飛行中であることを示す、関連付けられた飛行中記憶ユニットを参照することにより、シーケンシャルキーD4がまだ飛行中であることを識別する。
代替の実施形態を図7に示すが、飛行中指標がコアキーにより記憶されている。この配設は、シーケンシャルキー(D1、D2等)が使用される場合、キー追跡テーブルにおいて完全連想検索が実行されることを必要とする。そのシーケンシャルキーに対する一致が見つかり、対応するコアキーフラグが設定された場合、シーケンシャルキーが飛行中であることが決定される。
図8は、一実施形態におけるトレースユニットにより行われる一連のステップを概略的に示す。フローは、トレースユニットが新しいデータアドレスおよび関連付けられたコアキーをプロセッサコアから受信するステップ400から開始する。次いで、ステップ410において、トレースユニットは、次のシーケンシャルキーを計算し、ステップ420において、そのキーがキー追跡テーブルにおいて現在「飛行中」であるかが決定される。飛行中でない場合、フローはステップ430に進み、当該次のシーケンシャルキーがキー追跡テーブルに追加され、フローはステップ400に戻る。しかしながら、ステップ420において、次のシーケンシャルキーが現在飛行中であることが決定された場合、その代わりにステップ440において特殊キーがキー追跡テーブルに追加され、ステップ450において、その特殊キーの値がトレースストリームに出力される。次いで、フローは、ステップ400に戻る。次のシーケンシャルキーの代わりに特殊キーが使用された場合、一般に、ステップ410の次の反復において当該次のシーケンシャルキーをすぐにリトライしないことが好ましいことに留意されたいが、これは、1回の反復において使用中であることが判明した場合、次の反復においてもまだ使用中である可能性が高いためである。
一般に、利用可能なシーケンシャルキーが多い程、特殊キーが必要とされる可能性は低いことが認識される。任意の数のシーケンシャルキーがあってもよいが、Nから3Nの範囲(N個のコアキーが存在する)が一般に適当である。シーケンシャルキーはデータアドレスとともに出力される必要はないことに留意されたいが、これは、その値が予測可能であり、トレースユニットにより生成される所定のシーケンスのインデックス値の1つであるためである。
さらに、シーケンシャルキーおよび特殊キーは、完全に別個のプロトコル符号化を使用し得るが、いくつかの実施形態において、重複が存在しない限り、同じプロトコル符号化が使用されてもよいことに留意されたい。例えば、0〜15の値の範囲において、シーケンシャルキーは0〜11の値を使用することができ、特殊キーは12〜15の値を使用することができる。トレースデータの受信側は、当然ながら、どの規則が使用されているかを知る必要がある。図9は、12個のシーケンシャルキーおよび4個の特殊キーに分割された16個のキー(0〜15)のプロトコルスペースを示す。
本明細書において特定の実施形態を説明したが、本発明はこれに限定されず、本発明の範囲内で多くの修正および追加が行われてもよいことが認識される。例えば、本発明の範囲から逸脱せずに、独立請求項の特徴に対し、後続の従属請求項の特徴の様々な組み合わせがなされてもよい。

Claims (14)

  1. データ処理ユニットの処理アクティビティを示すトレースデータのアイテムを生成するように構成されるトレースユニットであって、
    インデックス値を、前記トレースユニットにより生成された前記トレースデータのアイテムの少なくともサブセットに関連付けるように構成される、トレースインデックスユニットを備え、
    前記トレースインデックスユニットは、所定のシーケンスのインデックス値の1つとして前記インデックス値を生成するように構成され、
    前記所定のシーケンスにおけるn+1番目のインデックス値は、前記所定のシーケンスにおけるn番目のインデックス値のみから決定され得るものであり、
    前記トレースユニットは、少なくとも1つの前記インデックス値を記憶するように構成される、インデックス記憶ユニットを備え、
    前記インデックス記憶ユニットは、選択的に飛行中指標を記憶するように構成され、前記飛行中指標は、前記所定のシーケンスのインデックス値の記憶されたインデックス値が現在使用されていることを示し、前記トレースユニットは、次のインデックス値を生成する際に、前記飛行中指標を参照し、前記飛行中指標が、前記次のインデックス値がまだ使用中であることを示す場合、前記次のインデックス値の代わりに代替インデックス値を記憶するように構成される前記トレースユニット。
  2. 前記データ処理ユニットの前記処理アクティビティは、データアドレスを使用した記憶されたデータ値への参照を含み、前記インデックス値は、前記少なくとも1つのデータアドレスに関連付けられたデータアドレスインデックス値である、請求項1に記載のトレースユニット。
  3. 前記記憶されたデータ値への前記参照は、前記記憶されたデータ値のローディングを含む、請求項に記載のトレースユニット。
  4. 前記記憶されたデータ値への前記参照は、前記記憶されたデータ値を記憶することを含む、請求項に記載のトレースユニット。
  5. 前記トレースユニットは、データアドレスインデックス値記憶テーブルに前記データアドレスインデックス値を記憶するように構成される、請求項に記載のトレースユニット。
  6. 前記トレースユニットは、選択的に飛行中指標を記憶するように構成され、前記飛行中指標は、前記データアドレスインデックス値に関連付けられた前記記憶されたデータ値への参照がまだ完了しておらず、前記データアドレスインデックス値が飛行中であることを示す、請求項に記載のトレースユニット。
  7. 前記トレースユニットは、次のデータアドレスインデックス値を生成する際に、記憶された飛行中指標を参照し、前記記憶された飛行中指標が、前記次のデータアドレスインデックス値がまだ飛行中であることを示す場合、前記次のデータアドレスインデックス値の代わりに代替データアドレスインデックス値を記憶するように構成される、請求項6に記載のトレースユニット。
  8. 前記代替データアドレスインデックス値は、データ処理ユニットインデックス値を含み、前記データ処理ユニットインデックス値は、前記データアドレスを参照するために前記データ処理ユニットにより使用される、請求項に記載のトレースユニット。
  9. 前記代替データアドレスインデックス値は、データ処理ユニットインデックス値との1対1対応を有し、前記データ処理ユニットインデックス値は、前記データアドレスを参照するために前記データ処理ユニットにより使用される、請求項に記載のトレースユニット。
  10. 前記飛行中指標は、前記データアドレスインデックス値に関連して記憶される、請求項に記載のトレースユニット。
  11. 前記飛行中指標は、前記データ処理ユニットインデックス値に関連して記憶される、請求項に記載のトレースユニット。
  12. 前記トレースユニットは、前記代替データアドレスインデックス値を示すトレースデータのアイテムを生成するように構成される、請求項に記載のトレースユニット。
  13. 前記代替データアドレスインデックス値および前記データアドレスインデックス値は、符号化プロトコルを共有する、請求項に記載のトレースユニット。
  14. データ処理ユニットの処理アクティビティを示すトレースデータのアイテムを生成する方法であって、
    前記トレースデータのアイテムを生成するステップと、
    インデックス値を、生成されたトレースデータのアイテムの少なくともサブセットに関連付けるステップと、
    所定のシーケンスのインデックス値の1つとして前記インデックス値を生成するステップと、を含み、
    前記所定のシーケンスにおけるn+1番目のインデックス値は、前記所定のシーケンスにおけるn番目のインデックス値のみから決定され得るものであり、
    前記方法は更に、少なくとも1つの前記インデックス値をインデックス記憶ユニットに記憶することを含み、
    前記インデックス記憶ユニットは、選択的に飛行中指標を記憶するように構成され、前記飛行中指標は、前記所定のシーケンスのインデックス値の記憶されたインデックス値が現在使用されていることを示し、
    前記方法は、次のインデックス値を生成する際に、前記飛行中指標を参照し、前記飛行中指標が、前記次のインデックス値がまだ使用中であることを示す場合、前記次のインデックス値の代わりに代替インデックス値を記憶することを含む、前記方法
JP2013515964A 2010-06-21 2011-05-24 データ処理システムのトレース時のキー割り当て Active JP5512041B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1010350.5 2010-06-21
GB1010350.5A GB2481384B (en) 2010-06-21 2010-06-21 Key allocation when tracing data processing systems
PCT/GB2011/050979 WO2011161429A2 (en) 2010-06-21 2011-05-24 Key allocation when tracing data processing systems

Publications (2)

Publication Number Publication Date
JP2013533546A JP2013533546A (ja) 2013-08-22
JP5512041B2 true JP5512041B2 (ja) 2014-06-04

Family

ID=42582702

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013515964A Active JP5512041B2 (ja) 2010-06-21 2011-05-24 データ処理システムのトレース時のキー割り当て

Country Status (10)

Country Link
US (1) US8707106B2 (ja)
EP (1) EP2583179B1 (ja)
JP (1) JP5512041B2 (ja)
KR (1) KR101708170B1 (ja)
CN (1) CN102947804B (ja)
GB (1) GB2481384B (ja)
IL (1) IL222736A (ja)
MY (1) MY156921A (ja)
TW (1) TWI517035B (ja)
WO (1) WO2011161429A2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8713204B2 (en) * 2011-12-27 2014-04-29 Apple Inc. High-performance AHCI interface
US9183147B2 (en) * 2012-08-20 2015-11-10 Apple Inc. Programmable resources to track multiple buses
US9626119B2 (en) * 2014-11-14 2017-04-18 Intel Corporation Using counters and a table to protect data in a storage device
US10061583B2 (en) * 2014-12-24 2018-08-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US9934126B1 (en) * 2017-03-08 2018-04-03 Microsoft Technology Licensing, Llc Indexing a trace by insertion of reverse lookup data structures
US9934127B1 (en) 2017-03-08 2018-04-03 Microsoft Technology Licensing, Llc Indexing a trace by insertion of key frames for replay responsiveness
US10185645B2 (en) 2017-03-08 2019-01-22 Microsoft Technology Licensing, Llc Resource lifetime analysis using a time-travel trace
US10282274B2 (en) 2017-06-14 2019-05-07 Microsoft Technology Licensing, Llc Presenting differences between code entity invocations
GB2570466B (en) 2018-01-25 2020-03-04 Advanced Risc Mach Ltd Commit window move element
US11061807B2 (en) * 2018-12-28 2021-07-13 Intel Corporation Trace management during aborted speculative operations
CN112579169B (zh) * 2019-09-27 2024-04-09 阿里巴巴集团控股有限公司 处理器追踪流的生成方法及装置

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4905204A (en) * 1988-09-06 1990-02-27 Exxon Production Research Company Method of weighting a trace stack from a plurality of input traces
JPH06282468A (ja) * 1993-03-30 1994-10-07 Toshiba Corp 情報処理装置
US5724566A (en) * 1994-01-11 1998-03-03 Texas Instruments Incorporated Pipelined data processing including interrupts
JP2001147837A (ja) * 1999-11-18 2001-05-29 Fujitsu Ltd プログラムトレース装置及び記憶媒体
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
GB2367650B (en) * 2000-10-04 2004-10-27 Advanced Risc Mach Ltd Single instruction multiple data processing
US7093236B2 (en) * 2001-02-01 2006-08-15 Arm Limited Tracing out-of-order data
US7168066B1 (en) * 2001-04-30 2007-01-23 Mips Technologies, Inc. Tracing out-of order load data
US7225434B2 (en) * 2003-09-25 2007-05-29 Intel Corporation Method to collect address trace of instructions executed
US7194731B1 (en) * 2003-11-14 2007-03-20 Sun Microsystems, Inc. Method and apparatus for speculative tracing
US7219207B2 (en) * 2003-12-03 2007-05-15 Intel Corporation Reconfigurable trace cache
US7987393B2 (en) * 2005-05-16 2011-07-26 Texas Instruments Incorporated Determining operating context of an executed instruction
US7802149B2 (en) * 2005-05-16 2010-09-21 Texas Intruments Incorporated Navigating trace data
US7603589B2 (en) * 2005-05-16 2009-10-13 Texas Instruments Incorporated Method and system for debugging a software program
US7886271B2 (en) * 2005-05-16 2011-02-08 Texas Instruments Incorporated Embedding event information in the timing stream
US7707394B2 (en) 2006-05-30 2010-04-27 Arm Limited Reducing the size of a data stream produced during instruction tracing
US7757068B2 (en) * 2007-01-16 2010-07-13 Oracle America, Inc. Method and apparatus for measuring performance during speculative execution
TWI384397B (zh) * 2007-04-18 2013-02-01 Mediatek Inc 資料位址追蹤方法及資料位址追蹤裝置、資料追蹤方法及資料追蹤裝置
US8091073B2 (en) * 2007-06-05 2012-01-03 International Business Machines Corporation Scaling instruction intervals to identify collection points for representative instruction traces

Also Published As

Publication number Publication date
KR20130123355A (ko) 2013-11-12
GB2481384B (en) 2018-10-10
CN102947804A (zh) 2013-02-27
US20110314264A1 (en) 2011-12-22
IL222736A0 (en) 2012-12-31
WO2011161429A3 (en) 2012-02-16
TW201203109A (en) 2012-01-16
IL222736A (en) 2015-10-29
EP2583179A2 (en) 2013-04-24
US8707106B2 (en) 2014-04-22
CN102947804B (zh) 2016-02-10
GB2481384A (en) 2011-12-28
WO2011161429A2 (en) 2011-12-29
JP2013533546A (ja) 2013-08-22
KR101708170B1 (ko) 2017-02-20
TWI517035B (zh) 2016-01-11
EP2583179B1 (en) 2017-03-22
GB201010350D0 (en) 2010-08-04
MY156921A (en) 2016-04-15

Similar Documents

Publication Publication Date Title
JP5512041B2 (ja) データ処理システムのトレース時のキー割り当て
JP5604373B2 (ja) 推測的に実行される命令のトレーシング
JP5865920B2 (ja) データ処理装置のトレース
US11379234B2 (en) Store-to-load forwarding
US6754856B2 (en) Memory access debug facility
US20170060579A1 (en) Device and processing architecture for instruction memory efficiency
US9652248B2 (en) Load queue entry reuse for operand store compare history table update
US9003225B2 (en) Confirming store-to-load forwards
US7966478B2 (en) Limiting entries in load reorder queue searched for snoop check to between snoop peril and tail pointers
CN105074656B (zh) 管理并发谓词表达式的方法和装置
US9354888B2 (en) Performing predecode-time optimized instructions in conjunction with predecode time optimized instruction sequence caching
CN106406822A (zh) 具有改进的别名队列和存储冲突检测的处理器
US11269647B2 (en) Finish status reporting for a simultaneous multithreading processor using an instruction completion table
TWI820005B (zh) 用於產生及處理指示由處理電路系統所進行之指令執行的追蹤流的裝置及方法
JP2019521436A (ja) 処理回路による命令実行を示すトレースストリームの生成及び処理を行う装置及び方法
CN110221862A (zh) 指令执行方法及指令执行装置
US7844859B2 (en) Method and apparatus for instruction trace registers
US20010025237A1 (en) Computer system with debug facility
US10713057B2 (en) Mechanism to stop completions using stop codes in an instruction completion table
CN117806706A (zh) 存储顺序违例处理方法、装置、电子设备及介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130530

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140227

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140325

R150 Certificate of patent or registration of utility model

Ref document number: 5512041

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250