JP2021528780A - 予約タグ・フィールド・ビットを使用するキャッシュ・ベースのブレークポイント・トレース/リプレイ(trace replay breakpoint) - Google Patents

予約タグ・フィールド・ビットを使用するキャッシュ・ベースのブレークポイント・トレース/リプレイ(trace replay breakpoint) Download PDF

Info

Publication number
JP2021528780A
JP2021528780A JP2020572938A JP2020572938A JP2021528780A JP 2021528780 A JP2021528780 A JP 2021528780A JP 2020572938 A JP2020572938 A JP 2020572938A JP 2020572938 A JP2020572938 A JP 2020572938A JP 2021528780 A JP2021528780 A JP 2021528780A
Authority
JP
Japan
Prior art keywords
cache
address
memory
cache line
breakpoint
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
Application number
JP2020572938A
Other languages
English (en)
Other versions
JP7348919B2 (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 JP2021528780A publication Critical patent/JP2021528780A/ja
Application granted granted Critical
Publication of JP7348919B2 publication Critical patent/JP7348919B2/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
    • 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/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3037Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0833Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0837Cache consistency protocols with software control, e.g. non-cacheable data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/327Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for interrupts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]
    • G06F2212/684TLB miss handling
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/328Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for runtime instruction patching

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

キャッシュを通じてブレークポイント検出を実行する方法は、メモリー・アクセスの発生を検出するステップと、キャッシュのいずれかのキャッシュ・ラインが、メモリー・アクセスと関連するアドレスと一致するか否か識別するステップとを含む。キャッシュ・ラインが、メモリー・アクセスと関連するアドレスと一致するとき、ブレークポイントに遭遇しなかったことになる。メモリー・アクセスと関連するアドレスと一致するキャッシュ・ラインがないとき、実施形態は、1つ以上のフラグ・ビットが無視されれば、いずれかのキャッシュ・ラインが、メモリー・アクセスと関連するアドレスと一致するか否か識別する。1つ以上のフラグ・ビットが無視されれば、キャッシュ・ラインが、メモリー・アクセスと関連するアドレスと一致するとき、実施形態は、ブレークポイントに遭遇したか否かについてチェックを実行する。一致しないとき、実施形態はキャッシュ・ミスを処理する。
【選択図】図6

Description

[0001] ソフトウェア・アプリケーションの開発中にコードを書くとき、開発者は、コードにおけるランタイム・エラーを発見するために、コードを「デバッグする」のに大量の時間を費やすのが一般的である。このようにするとき、開発者は、ソース・コード・バグを再現し(reproduce)位置を突き止めるために、異なる入力に基づいてプログラムの挙動を観察する、デバッギング・コードを挿入する(例えば、変数値を印刷するため、実行の分岐を追跡する(track)ため等)、一時的にコード部分を除去する等というような、様々な手法を採用することができる。コード・バグの位置を正確に特定するために、ランタイム・エラーを追跡して探し出す(track down)と、アプリケーション開発時間の大部分を占める可能性がある。
[0002] コード・デバッギング・プロセスで開発者を補助するために、多くの種類のデバッギング・アプリケーション(「デバッガー」)が開発されている。これらのツールは、コンピューター・コードの実行をトレースし(trace)、可視化し、変更する機能(ability)を開発者に提供する。例えば、デバッガーは、とりわけ、コード命令の実行を可視化することができ、コード実行中の種々の時点において変数値を提示することができ、開発者がコード実行パスを変更することを可能にすることができ、および/または開発者が対象のコード・エレメント上に「ブレークポイント」および/または「ウォッチポイント」を設定することを可能にする(実行中にこれらのポイントに達すると、コードの実行を保留させる)ことができる。一般に、「ブレークポイント」とは、実行可能コードの指定された部分(例えば、コードのライン、変数定義、関数定義等)を格納するメモリー位置を意味し、一方「ウォッチポイント」とは、データーを格納するメモリー位置(例えば、変数、定数、データー構造等の値を格納するメモリー位置を意味する)。本明細書では、簡略化のために、「ブレークポイント」という用語の使用は、ブレークポイントおよびウォッチポイント双方を指すこととする。
[0003] 新たに出現したデバッギング・アプリケーションの形態は、「タイム・トラベル」(time travel)、「リバース」(reverse)、または「ヒストリック」(historic)デバッギングを可能にし、ソフトウェアおよび/またはハードウェアをトレースして1つ以上のトレース・ファイルに入れることによって、プログラムの実行を記録/トレースする。トレース・ファイルは、順方向および逆方向分析のために、後にプログラムの実行をリプレイする(replay)際に使用することができる。例えば、「タイム・トラベル」デバッガーは、開発者が順方向ブレークポイント(従来のデバッガーと同様)およびリバース・ブレークポイントを設定することを可能にすることができる。
[0004] 「タイム・トラベル」デバッガーを実装するときの課題の1つに、トレース・ファイルのリプレイ中に対象のメモリー・アドレス(例えば、ブレークポイントに対応する)にいつ遭遇したかを、柔軟性があり効率的な仕方で、どのようにして検出するかが含まれる。リプレイ中に対象のメモリー・アドレスを追跡するために探求されたメカニズムの1つは、プロセッサー実装ハードウェア・ブレークポイントを使用することである。ハードウェア・ブレークポイントの使用は、効率的であるが、同時に監視することができるメモリー・アドレスの数が厳しく制限されるという欠点がある。例えば、INTEL.x86アーキテクチャは、監視するメモリー・アドレスを格納するために、僅かに4つのデバッグ・レジスター(即ち、DR0〜DR3)を提供するに過ぎない。また、ハードウェア・ブレークポイントの使用は、本質的に、デバッガーの実装を特定のサポート対象ハードウェアに拘束する(例えば、x86デバッグ・レジスターを頼ることによって)という欠点もある。
[0005] 探求された他のメカニズムは、ソフトウェア・ブレークポイントを使用することであり、この場合、トレースされる各動作がメモリーにアクセスする場合(例えば、データーを格納するメモリーに対するリードまたはライト、あるいはプログラム・コードを格納するメモリーからの実行のためのリード/フェッチ)、そのアクセスが対象のメモリー・アドレスに宛てられたものか否かチェックする余分なコード命令が追加される(instrumented with)。しかしながら、そのメモリー・アドレスが実際にブレークポイントに対応するか否かには関係なく、インスツルメンテーション(instrumentation)には、メモリー・アクセス毎に、ブレークポイントの出現(occurrence)に対するチェックを行わせるという重大な欠点がある。多くの環境において、追加されたコード命令を実行すると、メモリー・アクセス毎に数十から数百の余分なプロセッサー・サイクルが使用され、リプレイの遂行に対して、人間のユーザにもわかるような重大な悪影響が出る。
[0006] 以上の課題に取り組むための本発明者による以前の解決策は、ブレークポイント検出の一部として、キャッシュの使用を通じて行われた(例えば、ハードウェアまたはエミュレートされたプロセッサーのキャッシュ、あるいは何らかの他のキャッシュ・メモリー構造)。これらの解決策は、インスツルメンテーションと比較して、ブレークポイント・チェックを実行するために必要とされるプロセッサー・サイクルの回数を大幅に抑制し(limit)、2017年1月13日に出願され、“EFFICIENT BREAKPOINT DETECTIONS VIA CACHES”(キャッシュによる効率的なブレークポイントの検出)と題する米国特許出願第15/405,849号に記載されている。
[0007] これらの解決策は、あらゆるメモリー・アクセスに対してブレークポイント・チェックを実行するのではなく、キャッシュ・ミスが発生する原因となるメモリー・アクセスだけにブレークポイント・チェックを限定するために、キャッシュを使用する。これらの解決策は、キャッシュに基づかないブレークポイント検出解決策よりも著しい性能向上を提供し、事実上無制限のブレークポイント数に対応することができる。これらは、キャッシュ・ラインが、ブレークポイントに対応するメモリー・アドレスと重なり合う場合、これを退去させ(evict)、次いでブレークポイントに遭遇したか否か判定するために、キャッシュ・ミス毎に、プロセッサーに「1つずつ実行させる」(single stepping)ことを伴う。ブレークポイント検出のためのインスツルメンテーションよりは進んでいるが、これらの解決策は、キャッシュ・ミスが発生したときに(キャッシュ・ミスと関連してブレークポイントがヒットしなかった場合であっても)、実行性能に深刻な影響を及ぼし、ブレークポイント検出のためのキャッシュの使用がない場合よりも頻繁にキャッシュ・ミスを発生させる(即ち、監視対象メモリー・アドレスと重なり合うキャッシュ・ラインを予防的に(proactively)退去させるからである)。
[0008] 本明細書において説明する少なくともいくつかの実施形態は、監視対象になっているメモリー・アドレスと重なり合うキャッシュ・ラインを退去させるのを回避しつつ、従来のキャッシュ・ベースのブレークポイント検出技法の利点を維持するようにして、キャッシュ・ベースのブレークポイント検出を発展させる。具体的には、これらの実施形態は、監視対象メモリー・アドレスと重なり合うキャッシュ・ラインを退去させるのではなく、キャッシュ・ラインが監視対象メモリー・アドレスと重なり合うことを知らせるために、キャッシュ・ラインのタグ・フィールド(または同様のメカニズム)における1つ以上の「予約」(またそうでなければ未使用の)ビットを利用する。このようにすることにより、発生するキャッシュ・ミスの回数が減少するだけでなく、その後のメモリー・アクセスがキャッシュ・ラインを伴うときに(即ち、キャッシュ・ミスの間だけとは対照的に)、効率的なブレークポイント・チェックを実行することを可能にする。具体的には、キャッシュ・ミスにより後続のメモリー・アクセスにおいてキャッシュ・ラインを再インポートすることを必要とすることなく、キャッシュ・ラインのタグ・フィールドに設定された予約ビットを有するいずれのキャッシュ・ラインにヒットしたときでも、効率的なブレークポイント・チェックを実行することができる。このように、本明細書における実施形態は、ブレークポイント検出を目的としたキャッシュ・ラインの退去を回避し、既存のキャッシュ・ラインのために新たな効率的なブレークポイント検出メカニズムを追加する。これら双方によって、デバッガーがトレース・リプレイ中にブレークポイントを検出するために発生するオーバーヘッドを大幅に低減することができる。
[0009] ある実施形態では、ブレークポイント検出のためにキャッシュを構成(configuring)するステップは、監視しようとするメモリー・アドレスを識別し、次いでこのメモリー・アドレスと重なり合うキャッシュ・ラインが既にキャッシュの中に存在するか否か判定するステップを含む。存在する場合、この実施形態は、キャッシュ・ラインのタグ・フィールド内にフラグを設定するステップを含む。そうでない場合、この実施形態は、キャッシュ・ミスを処理し、新たにインポートされたキャッシュ・ラインのタグ・フィールド内にフラグを設定することができ、あるいは単に終了してもよい。
[0010] 他の実施形態では、キャッシュを通じてブレークポイント検出を実行するステップは、メモリー・アクセスの発生を検出し、次いでキャッシュのいずれかのキャッシュ・ラインが、このメモリー・アクセスと関連するアドレスと一致するか否か識別するステップを含む。あるキャッシュ・ラインがこのメモリー・アクセスと関連するアドレスと一致するとき、この実施形態は、ブレークポイントに遭遇しなかったと判定するステップを含む。このメモリー・アクセスと関連するアドレスと一致するキャッシュ・ラインがないとき、この実施形態は、1つ以上のフラグ・ビットが無視されれば、いずれかのキャッシュ・ラインが、このメモリー・アクセスと関連するアドレスと一致するか否か識別するステップを含む。1つ以上のフラグ・ビットが無視されれば、あるキャッシュ・ラインがこのメモリー・アクセスと関連するアドレスと一致するとき、この実施形態は、ブレークポイントに遭遇したか否かについてチェックを実行するステップを含む。それ以外の場合、この実施形態は、キャッシュ・ミスを処理しながら、潜在的にブレークポイント・チェックを実行するステップ、および/または新たにインポートされたキャッシュ・ラインのタグ・フィールド内にフラグを設定するステップを含む。
[0011] この摘要は、詳細な説明において以下で更に説明する概念から選択したものを簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴または必須の特徴を識別することを意図するのではなく、特許請求する主題の範囲を判定するときに補助として使用されることを意図するのでもない。
[0012] 以上で記載した本発明の利点および特徴、ならびに他の利点および特徴を取得できる方法を説明するために、添付図面に示す特定実施形態を参照することによって、以上で端的に説明した本発明について、更に具体的な説明を行う。これらの図面は、本発明の典型的な実施形態のみを図示するに過ぎず、したがってその範囲を限定するように解釈してはならないことを理解の上で、添付図面の使用を通じて、更に具体的にそして詳細に、本発明について説明する(described and explained)。図面において、
図1は、予約タグ・ビット・フィールドを使用して、キャッシュ・ベースのブレークポイント・トレース/リプレイを容易にするコンピューティング環境の一例を示す。 図2は、キャッシュの動作の一例を示す。 図3Aは、64バイト・メモリー・アラインメントを使用するメモリー・アドレスの一例を示す。 図3Bは、32バイト・メモリー・アラインメントを使用するメモリー・アドレスの一例を示す。 図3Cは、メモリー・アライメントのために常にゼロとなる省略ビットに基づいて、実際のメモリー・アドレスを表すために必要とされるよりも少ないタグ・ビットの使用の一例を示す。 図4は、予約タグ・フィールド・ビットを使用するキャッシュ・ベース・ブレークポイントの動作の一例を示す。 図5は、ブレークポイント検出のためにキャッシュを構成する方法例のフロー・チャートを示す。 図6は、キャッシュを通じてブレークポイント検出を実行する方法例のフロー・チャートを示す。 図7は、命令退出時(instruction retire time)にブレークポイント検出を実行する方法例のフロー・チャートを示す。
[0022] 本明細書において説明する少なくともいくつかの実施形態は、監視対象になっているメモリー・アドレスと重なり合うキャッシュ・ラインを退去させるのを回避しつつ、従来のキャッシュ・ベースのブレークポイント検出技法の利点を維持するようにして、キャッシュ・ベースのブレークポイント検出を発展させる。具体的には、これらの実施形態は、監視対象メモリー・アドレスと重なり合うキャッシュ・ラインを退去させるのではなく、キャッシュ・ラインが監視対象メモリー・アドレスと重なり合うことを知らせるために、キャッシュ・ラインのタグ・フィールド(または同様のメカニズム)における1つ以上の「予約」(またそうでなければ未使用の)ビットを利用する。このようにすることにより、発生するキャッシュ・ミスの回数が減少するだけでなく、その後のメモリー・アクセスがキャッシュ・ラインを伴うときに(即ち、キャッシュ・ミスの間だけとは対照的に)、効率的なブレークポイント・チェックを実行することを可能にする。具体的には、キャッシュ・ミスにより後続のメモリー・アクセスにおいてキャッシュ・ラインを再インポートすることを必要とすることなく、キャッシュ・ラインのタグ・フィールドに設定された予約ビットを有するいずれのキャッシュ・ラインにヒットしたときでも、効率的なブレークポイント・チェックを実行することができる。このように、本明細書における実施形態は、ブレークポイント検出を目的としたキャッシュ・ラインの退去を回避し、既存のキャッシュ・ラインのために新たな効率的なブレークポイント検出メカニズムを追加する。これら双方によって、デバッガーがトレース・リプレイ中にブレークポイントを検出するために発生するオーバーヘッドを大幅に低減することができる。
[0023] 最初に、図1は、予約タグ・フィールド・ビットを使用して、キャッシュ・ベースのブレークポイント・トレース・リプレイを容易にするコンピューティング環境の一例100を示す。図示のように、実施形態は、特殊目的または汎用コンピューター・システム101を備えるまたは利用することができる。コンピューター・システム101は、例えば、1つ以上のプロセッサー102、システム・メモリー103、1つ以上のデーター・ストア104、および/または入力/出力ハードウェア105のような、コンピューター・ハードウェアを含む。ある実施形態では、コンピューター・システム101およびその中にあるコンポーネントが、仮想環境を構成することもできる。
[0024] 本発明の範囲内に該当する実施形態は、コンピューター実行可能命令および/またはデーター構造を搬送あるいは格納するための物理的および他のコンピューター読み取り可能媒体を含む。このようなコンピューター読み取り可能媒体は、コンピューター・システム101によってアクセスすることができる任意の利用可能な媒体とすることが可能である。コンピューター実行可能命令および/またはデーター構造を格納するコンピューター読み取り可能媒体は、コンピューター記憶デバイスである。コンピューター実行可能命令および/またはデーター構造を搬送するコンピューター読み取り可能媒体は、伝送媒体である。つまり、一例として、そして限定ではなく、本発明の実施形態は、少なくとも2つの全く異なる種類のコンピューター読み取り可能媒体、即ち、コンピューター記憶媒体および伝送媒体を含むことができる。
[0025] コンピューター記憶媒体は、コンピューター実行可能命令および/またはデーター構造を格納する物理および有形ハードウェア・デバイスである。コンピューター記憶デバイスは、RAM、ROM、EEPROM、ソリッド・ステート・デバイス(「SSD」)、フラッシュ・メモリー、相変化メモリー(「PCM」)、光ディスク・ストレージ、磁気ディスク・ストレージまたは他の磁気記憶デバイス、あるいはコンピューター実行可能命令またはデーター構造の形態でプログラム・コードを格納するために使用することができ、更に開示する本発明の機能を実装するためにコンピューター・システム101によってアクセスおよび実行することができる、任意の他のハードウェア・デバイス(1つまたは複数)というような、種々のコンピューター・ハードウェアを含む。したがって、例えば、コンピューター記憶デバイスは、以下で論ずるように、図示するシステム・メモリー103、コンピューター実行可能命令および/またはデーター構造を格納することができる、図示するデーター・ストア104、またはプロセッサー搭載ストレージのような、他のストレージを含むこともできる。
[0026] 伝送媒体は、ネットワークおよび/またはデーター・リンクを含むことができる。これらは、プログラム・コードをコンピューター実行可能命令またはデーター構造の形態で搬送するために使用することができ、コンピューター・システム101によってアクセスすることができる。「ネットワーク」とは、コンピューター・システムおよび/またはモジュールおよび/または他の電子デバイス間における電子データーの輸送を可能にする1つ以上のデーター・リンクとして定義される。ネットワークまたは他の通信接続(ハードワイヤ接続、ワイヤレス、あるいはハードワイヤ接続またはワイヤレスの組み合わせのいずれか)を通じてコンピューター・システムに情報を転送または提供するとき、コンピューター・システムはこの接続を伝送媒体と見なすことができる。以上のものの組み合わせも、コンピューター読み取り可能媒体の範囲に含まれてしかるべきである。例えば、入力/出力ハードウェア105は、コンピューター実行可能命令またはデーター構造の形態でプログラム・コードを搬送するために使用することができるネットワークおよび/またはデーター・リンクを接続するネットワーキング・ハードウェア(例えば、ハードワイヤ接続されたネットワーク・インターフェース・モジュールまたはワイヤレスのネットワーク・インターフェース・モジュール)を含んでもよい。
[0027] 更に、種々のコンピューター・システム・コンポーネントに到達すると、コンピューター実行可能命令またはデーター構造の形態であるプログラム・コードを自動的に伝送媒体からコンピューター記憶デバイスに(またはその逆に)転送することができる。例えば、ネットワークまたはデーター・リンクを通じて受信されたコンピューター実行可能命令またはデーター構造を、ネットワーキング・ハードウェア内にあるRAMにバッファし、次いで最終的にコンピューター・システム101におけるシステム・メモリー103および/またはそれよりも揮発性が低いコンピューター記憶デバイス(例えば、データー・ストア104)に転送することができる。したがって、伝送媒体も利用するコンピューター・システム・コンポーネントに(または主に利用するコンピューター・システム・コンポーネントにさえも)、コンピューター記憶デバイスを含むことができることは理解されてしかるべきである。
[0028] コンピューター実行可能命令は、例えば、プロセッサー(1つまたは複数)102において実行されると、コンピューター・システム101に特定の機能または機能の集合体を実行させる命令およびデーターを含む。コンピューター実行可能命令は、例えば、バイナリー、アセンブリー言語のような中間フォーマット命令、またはソース・コードであってもよい。
[0029] 尚、本発明は、多くの種類のコンピューター・システム構成を有するネットワーク・コンピューティング環境においても実施できることは、当業者には認められよう。コンピューター・システム構成には、パーソナル・コンピューター、デスクトップ・コンピューター、ラップトップ・コンピューター、メッセージ・プロセッサー、ハンドヘルド・デバイス、マルチプロセッサー・システム、マイクロプロセッサー・ベースのまたはプログラマブル・コンシューマー電子機器、ネットワークPC、ミニコンピューター、メインフレーム・コンピューター、移動体電話機、PDA、タブレット、ページャ、ルーター、スイッチ等が含まれる。また、本発明は分散型システム環境においても実施することができる。分散型システム環境では、ローカルおよびリモート・コンピューター・システムが、ネットワークを通じて(ハードワイヤ接続データー・リンク、ワイヤレス・データー・リンク、またはハードワイヤ接続およびワイヤレス・データー・リンクの組み合わせによって)リンクされ、双方がタスクを実行する。したがって、分散型システム環境では、コンピューター・システムが複数の要素コンピューター・システムを含んでもよい。分散型システム環境では、プログラム・モジュールは、ローカルおよびリモート双方のメモリー記憶デバイスに配置されてもよい。
[0030] 図示のように、データー・ストア104は、例えば、デバッガー104a、オペレーティング・システム・カーネル104b、およびアプリケーション104cのようなアプリケーション・コードを表すコンピューター実行可能命令および/またはデーター構造を格納することができる。また、データー・ストア104は、1つ以上のトレース・ファイル(1つまたは複数)104dのような、他の型のデーターも格納することができる。アプリケーション・コードが実行しているとき(例えば、プロセッサー(1つまたは複数)102を使用して)、システム・メモリー103は、ランタイム・データー構造、コンピューター実行可能命令等のような、対応するランタイム・データーを格納することができる。したがって、図1は、システム・メモリー103を、アプリケーション・コード103aおよびアプリケーション・ランタイム・データー103bを含むものとして示す。トレース・ファイル(1つまたは複数)104dは、データー・ストア104に格納されているように図示されているが、これらはシステム・メモリー103内にまたは何らかの他の記憶デバイス(例えば、プロセッサー(1つまたは複数)102内にあるバッファ(1つまたは複数)102e)において排他的にまたは一時的に記録されてもよい。
[0031] デバッガー104aは、プロセッサー(1つまたは複数)102における実行をトレースし、および/またはトレース・ファイル(1つまたは複数)104dに記録されたトレースをリプレイすることができる。例えば、デバッガー104aは、アプリケーション104cの実行をトレースし、その結果得られたトレース・データー(例えば、レジスター値、メモリー値等)をトレース・ファイル(1つまたは複数)104dに格納するのでもよい。加えて、または代わりに、デバッガー104aは、プロセッサー(1つまたは複数)102におけるアプリケーション104cのコードを実行しつつ、そのコードに、トレース・ファイル(1つまたは複数)104dからのトレース・データー(traced data)(例えば、レジスター値、メモリー値等)をしかるべき時点において供給することによって、トレースされたアプリケーション104cの実行をトレース・ファイル(1つまたは複数)104dからリプレイすることもできる。簡潔さのために、この記録およびリプレイ機能は1つのボックス(即ち、デバッガー104a)として図示されているが、この機能を異なるアプリケーションまたはコンポーネントに分離できることは認められよう。
[0032] 例えば、トレース・レコーダーがデバッガー104aの一部であることもでき、あるいは単体アプリケーションであること、またはオペレーティング・システム・カーネル104b、ハイパーバイザー等のような、他のソフトウェア・コンポーネントに統合することもできる。また、トレース・レコーダーが全く異なるコンピューター・システムに存在してもよい。つまり、トレース・ファイル(1つまたは複数)104dは、他のコンピューター・システムから読み出され(originate)、デバッガー104によるリプレイのために、コンピューター・システム101に転送することができる(例えば、入力/出力ハードウェア105を使用して)。一般に、トレース・レコーダーは、プロセッサー(1つまたは複数)102または何らかの他のコンピューター・システムにおけるアプリケーション104cの1つ以上のコード部分の実行を記録しつつ、トレース・データー(例えば、コード命令によって読み出されたメモリー値、コード命令によって供給されたレジスター値等)をトレース・ファイル(1つまたは複数)104dに格納する。次いで、トレース・リプレイ・コンポーネントは、プロセッサー(1つまたは複数)102においてコード部分(1つまたは複数)を再実行しつつ、このコードがトレース時に実行されたのと実質的に同様に、このコードを実行することができるように、トレース・ファイル(1つまたは複数)104dからのトレース・データーをこのコードに供給するができる。
[0033] また、図1は、プロセッサー(1つまたは複数)102の内部ハードウェア・コンポーネントの簡略化された表現も含む。プロセッサー102は、中央処理ユニット(CPU)と呼ばれることも多い。図示のように、各プロセッサー102は複数の処理ユニット102aを含む。各処理ユニットは、物理的(即ち、物理プロセッサー・コア)および/または論理的(即ち、ハイパースレッディングをサポートする物理コアによって提示される論理コアであって、1つよりも多いアプリケーション・スレッドが同時に物理コアにおいて実行する)であってもよい。したがって、例えば、プロセッサー102は、ある実施形態では1つの物理処理ユニット(コア)しか含まなくても、その1つの物理処理ユニットによって設けられる(presented)2つ以上の処理ユニット102aを含むことができる。
[0034] 各処理ユニット102aは、アプリケーションによって定められるプロセッサー命令を実行し、この命令は、予め定められたプロセッサー命令セット・アーキテクチャの中から選択される。各プロセッサー102の特定の命令セット・アーキテクチャは、プロセッサーの製造業者およびプロセッサー・モデルによって様々である。共通の命令セット・アーキテクチャには、INTEL,INC.,からのIA−64およびIA−32アーキテクチャ、ADVANCED MICRO DEVICES,INC.,からのAMD64アーキテクチャ、およびARM HOLDINGS,PLCからの種々の高度RISCマシン(「ARM」)アーキテクチャが含まれるが、多数の他の命令セット・アーキテクチャが存在し、本発明によって使用することができる。一般に、「命令」とはプロセッサーによって実行可能な、外部から見ることができる(即ち、プロセッサーの外部にある)コードの最も小さい単位である。
[0035] 各処理ユニット102aは、プロセッサー命令を1つ以上のプロセッサー・キャッシュ(1つまたは複数)102bから取得し、キャッシュ(1つまたは複数)102bにおけるデーターに基づいて、レジスター102c(即ち、プロセッサー(1つまたは複数)102の命令セット・アーキテクチャに基づいて定められる、ハードウェア・ベースの記憶位置)におけるデーターに基づいて、および/または入力データーを使用せずに、プロセッサー命令を実行する。一般に、キャッシュ(1つまたは複数)102bは、少量のランダム・アクセス・メモリー(即ち、典型的なシステム・メモリー103の量と比較すると少量)を含み、システム・メモリー103の内複数の部分のプロセッサー上コピー(on-processor copies)を格納する。例えば、アプリケーション104cを実行するとき、キャッシュ(1つまたは複数)102bは、ランタイム・アプリケーション・コード103aの部分集合を、キャッシュ(1つまたは複数)102bのコード・キャッシュ・セクションに格納し、他のランタイム・アプリケーション・データー103b(例えば、変数、データー構造等)をキャッシュ(1つまたは複数)102bのデーター・キャッシュ・セクションに格納する。処理ユニット(1つまたは複数)102aが、未だキャッシュ(1つまたは複数)102bに格納されていないデーターを必要とする場合、「キャッシュ・ミス」が発生し、データーはシステム・メモリー103からフェッチされる(潜在的に、キャッシュ(1つまたは複数)102bから何らかの他のデーターを退去させる)。
[0036] プロセッサー(1つまたは複数)102の動作の多くは、ハード・コード化ロジック(即ち、回路)で定められるが、プロセッサー(1つまたは複数)102の動作の一部は、プロセッサーのマイクロコード102dによって定めることができる。一般に、マイクロコード102dは、プロセッサー上メモリー(例えば、コンピューター記憶媒体)に格納された命令を含む。これらの命令は、プロセッサー(1つまたは複数)102の動作を指令するために、プロセッサー(1つまたは複数)102によって実行可能である。あるプロセッサーでは、マイクロコード102dを製造後に再度プログラミングできるように、マイクロコード102dを再プログラム可能にしてもよい。加えて、プロセッサー(1つまたは複数)102は、予約された(またそうでなければ未使用の)タグ・フィールド・ビットを使用する他のハードウェアを含んでもよく、このハードウェアは、キャッシュ・ベースのブレークポイント・トレース/リプレイの1つ以上の実施態様によって使用可能であればよい。この他のハードウェアは、バッファ(1つまたは複数)102および変換ルックアサイド・バッファ(TLB:translation lookaside buffer)102fを含み、これらの実施態様の説明と関連付けて、後に論ずる。
[0037] 本明細書における実施形態によれば、デバッガー104aは、定められたブレークポイントにメモリー・アクセスがいつ遭遇するか検出するために、キャッシュを利用する。ソフトウェアで実装される場合、このキャッシュは、システム・メモリー103に格納されたキャッシュのような、メモリー内キャッシュ(in-memory cache)とすることができる。ソフトウェアで実装される場合、このキャッシュは、キャッシュ(1つまたは複数)102bの内の1つ以上のような、ハードウェア・キャッシュとすることができる。これらの概念を図示するために、前付として、図2は、1つ以上の実施形態によるキャッシュ201の動作の一例200を示す。
[0038] 具体的には、図2は、各々複数のフィールド(即ち、図示する列)を含む複数のキャッシュ・ライン(即ち、図示する行)として、キャッシュ201を表す。楕円によって示されるように、キャッシュ201は多数のキャッシュ・ラインを格納することができ、図示する5つに限定されるのではない。図示のように、各キャッシュ・ラインは、少なくともタグ202とデーター・ブロック203とを含むことができる(しかし、追加の列も可能である(could be possible))。本明細書および請求項において使用する場合、タグ202は、対象の(subject)メモリー・アドレスに対するキャッシュ・ライン一致を識別するために使用可能な、任意のキャッシュ・ライン・メタデーター(非アドレス・データーを含む)を含むことができる。キャッシュ201の個々の構成は、プロセッサー・アーキテクチャおよびメモリー・モデルに応じて様々に変わる可能性があるが、図示する例では、各キャッシュ・ラインは64バイト・タグ202と32バイト・データー・ブロック203とを含む。一般に、タグ202は、少なくともメモリー・アドレス(例えば、システム・メモリー103における物理アドレス)を格納し、一方データー・ブロック203はそのメモリー・アドレスに対する現在値を格納する。
[0039] プロセッサー(1つまたは複数)102における実行中に、特定のメモリー・アドレスに対してキャッシュ・ミスが発生したとき、そのメモリー・アドレス(そして、随意に、追加のメタデーターも)をキャッシュ201における特定のキャッシュ・ラインのタグ202に入力し、システム・メモリー103においてそのメモリー・アドレスに格納されている値(または何らかの他のキャッシュにおいてそのメモリー・アドレスに格納されている値)を、そのキャッシュ・ラインのデーター・ブロック203に入力する。この値は、プログラムの実行中に変化することもあり、キャッシュ・ラインを退去させるとき、更新された値をシステム・メモリー103(または何らかの他のキャッシュ)に戻す(push back)。図2において、キャッシュ201は、5つのメモリー・アドレス例(例えば、0x040、0x100、0x1A0、0x120、および0x200)と、対応するメモリー値とを示す。
[0040] 注記することとして、1つのキャッシュ・ラインが複数のメモリー・アドレスを「保存する」(cover)こともできる。例示すると、キャッシュ201において、各キャッシュ・ラインは、タグ202に格納されているアドレスにおいて開始する32バイトのデーターを格納する。しかしながら、プロセッサー・アーキテクチャおよびメモリー・モデルが、32バイト毎よりも高い粒度でメモリー・アドレスを指定することを許容する場合もある。例えば、この例に限って、プロセッサー・アーキテクチャおよびメモリー・モデルが、8バイトの粒度でメモリー・アドレスを指定することを許容すると仮定する。これが意味するのは、キャッシュ201における各キャッシュ・ラインは実際に4つのアドレス可能なメモリー・アドレス(各々8バイト値に対応する)を保存するということである。これを例示するために、図2は、キャッシュ201の最初のキャッシュ・ラインをこれらの4つのセグメントに細分する表204を含む。表204に示すように、そしてビッグ−エンディアン・アーキテクチャを想定すると、このキャッシュ・ラインは、実際に、8バイト値0xFAを格納するメモリー・アドレス0x40(十進数の64)、8バイトデーター0xABを格納するメモリー・アドレス0x48(十進数の72)、8バイト値0xDFを格納するメモリー・アドレス0x50(十進数の80)、および8バイト値0x21を格納するメモリー・アドレス0x58(十進数の88)を「保存する」。
[0041] 端的に述べたように、本明細書における実施形態は、キャッシュ・ラインのタグ・フィールドにおける1つ以上の「予約」アドレス・ビットまたそうでなければ未使用のアドレス・ビットをフラグとして利用して、キャッシュ・ラインが監視対象のメモリー・アドレスと重なり合うか否か示す。以下で更に詳しく説明するが、これらのビットは、メモリー・アラインメント(即ち、結果的に予約された「下位」ビットが得られる)、またはキャッシュにおいて物理的に利用可能なビットよりも少ないビットをメモリー・アドレシングに使用するプロセッサー(即ち、結果的に予約された「上位」ビットが得られる)の一方または双方に基づいて、予約できる場合または使用されない場合がある。以下の説明を考慮すると認められるように、ビットをフラグとして使用するために「予約する」または未使用でいることができるのは、(a)キャッシュ内にアドレスが存在するか否か一意に解明するために、そのビットが使用されないとき、そして(b)そのビットが、第1のキャッシュ・ライン・チェックがキャッシュにおける不一致(non-match)を示した後に、判定を行うために利用可能であるとき、および/またはアドレスがキャッシュに存在するか否か判定を行うために利用可能であるときである。
[0042] 最初に、図3Aおよび図3Bは、メモリー・アラインメントによる予約ビットの例を示す。尚、多くのメモリーはきめ細かくアドレス可能である(例えば、先の単純な例では8ビット刻みでというような細かさであるが、実際のプロセッサーはもっときめ細かいメモリー・アクセスを許容することもある)が、キャッシュは、32または64バイト毎というような、もっと荒いレベルでしかキャッシュ・ライン・タグがアドレスすることを許容しない場合もあることは認められよう。したがって、キャッシュは、32または64バイト境界において「メモリー上の位置を揃える」(memory aligned)と表現されることが多い。このようなメモリー・アラインメントは、キャッシュおよびメモリー・バスの実装(即ち、物理ハードウェア・レイアウト)を簡略化することができ、メモリー・アクセス速度を高くすることができる。メモリー・アラインメントの副作用は、キャッシュ・ラインのタグ・フィールドに格納されているアドレスが常に特定数のゼロである「下位」ビットを有することである。あるCPUの実施態様では、これらの常にゼロである下位ビットは、実際にはタグ・フィールドに格納されない。あるCPUの実施態様では、これらの常にゼロである下位ビットは、メモリー・アドレスがキャッシュ・ライン内に存在するか否か検索するときに、チェックされない。これらのビットの正確な数は、メモリー・アラインメントに使用されるバイト数に基づいて、変化する。図3Aは、64バイト・メモリー・アラインメントを使用するメモリー・アドレスの例300aを示し、一方図3Bは、32バイト・メモリー・アラインメントを使用するメモリー・アドレスの例300bを示す。
[0043] 具体的に、図3Aは、16進、二進、および十進形態で、アドレス0から開始してアドレス512まで64バイト刻みで進む、9通りのメモリー・アドレス例を示す表301を含む。二進表現において太字で示すように、64バイト(即ち、2)メモリー・アラインメントを使用するとき、アドレスの最下位6ビットは常にゼロである。一方、図3Bは、16進、二進、および十進形態で、同様にアドレス0から開始しアドレス512まで32バイト刻みで進む、17通りのメモリー・アドレス例を示す表302を含む。二進表現において太字で示すように、32バイト(即ち、25)メモリー・アライメントを使用するとき、アドレスの最下位5ビットは常にゼロである。いずれの場合でも、これらの下位ビットは、メモリー・アラインメントによってこれらが常にゼロであることから、「予約された」ものとして扱うことができる。
[0044] 先に述べたように、所与のプロセッサーが、このプロセッサーのアーキテクチャが理論的にサポートするよりも少ないビットを、メモリー・アドレシングに使用することもできる。例えば、CPUアーキテクチャが64ビットのアドレシングおよびポインターをサポートできるのであっても(そして、このようなものを仮想メモリー・アドレスと共に使用できるのであっても)、このCPUはキャッシュにおけるメモリー・アドレスに64ビットよりも少ないビットを利用してもよい。一例として、キャッシュの各タグにおいて物理的に64ビットが利用可能である場合、最新のINTEL製CPUは、実際には、これらのビットの内48ビットまたは56ビットだけをメモリー・アドレスに使用する場合があり、その結果、上位16または8ビットが(それぞれ)、プロセッサーによってアドレシングのために使用されないことになる。他の例として、最大128GB(即ち、237)の物理メモリーをサポートし、物理メモリー・アドレスに基づいて64バイト(即ち、2)アラインメントのキャッシュを有するCPUについては、キャッシュ・タグは、物理メモリー・アドレスで開始する、可能な各キャッシュ・ラインを一意に識別するためには、少なくとも31ビット(即ち、37−6)を必要とする。
[0045] 一般に、キャッシュ・タグに使用されるビット数は、プロセッサーの実装を簡略化するために行われる設計判断事項である。キャッシュの実施態様に拠っては、キャッシュ・タグに実際に割り当てられるが、メモリー・アドレスを一意に識別するためにキャッシュ実装設計によって必要とされない余分な上位ビットはいずれも、常にゼロであるとして扱うこともでき、またはこれらは完全に無視することもできる。これら上位ビットは、その数には関係なく、プロセッサーの実際のメモリー・アドレシング特性のために「予約されたもの」として扱うこともできる。
[0046] 図3Cは、メモリー・アラインメントによって常にゼロとなる省略ビットに基づいて、実際のメモリー・アドレスを表すために必要とされるよりも少ないタグ・ビットを使用する例300cを示す。具体的には、図3Cは、最大128GBの物理メモリーをサポートし、そのキャッシュ・ラインにおいて64バイト・データー・ブロックを使用するCPUにおいて使用されることが可能なタグ・ビットを示す。先の論述において実証したように、128GBのメモリーにおいて各アドレスを一意に識別するためには37ビットが必要とされ、これら37ビットの下位6ビットは、64バイト・アラインメントのメモリー・アドレスを表すときに、ゼロとなることが保証される。図3Cにおいて、これは、アドレス303によって表される。アドレス303は、最上位ビットをビット36としてカウントし、最下位ビットをビット0としてカウントするとき、ビット36からビット6までの31ビット(xで示す)が、キャッシュ・ライン・アドレスにおける「有意な」ビットであり、一方ビット5からビット0までの6ビット(zで示す)は、キャッシュ・ライン・アドレスにおいてゼロであることが保証されることを示す。したがって、キャッシュの実装は、これらの下位6ビット(即ち、ビット5〜0)を全く含まないように選択されればよい。
[0047] 図3Cにおいて、アドレス304および305は、各々、キャッシュ・ライン・アドレスの同じ二進表現を示す。アドレス304において示すように、このキャッシュ・ライン・アドレスの「有意な」31ビットだけを考慮すると、これらのビットは16進で0xC1として表すことができる。しかしながら、アドレス305において示すように、このキャッシュ・ライン・アドレスの全てのビットを考慮すると、このアドレスは16進で0x3040として表される。表306は、その最初のラインに、キャッシュ・ライン・アドレスの37ビット全体(即ち、0x3040)ではなく、キャッシュ・ラインのタグがこれら「有意な」31ビット(即ち、0xC1)だけを格納できることを示す。また、表306は、キャッシュ・ライン・アドレスの他のいくつかの16進表現も、それらの対応する「有意ビット」と共に示す。
[0048] 図3のキャッシュ301、および丁度説明したばかりのアドレス・ビット予約という観点から、図4は、予約タグ・フィールド・ビットを使用する、キャッシュ・ベースのブレークポイントの動作の一例400を示す。最初に、例400は、図2のキャッシュ201に対応するキャッシュ例401aを含む。注記すべきこととして、キャッシュ201のタグ202における値は16進で表現されていたが、キャッシュ401aのタグ402内における値が二進で表現されていることを除いて、キャッシュ401a内に示される各値は、キャッシュ201に示す値と同一である。図4においても、ビッグ−エンディアン・アーキテクチャを想定する。
[0049] また、例400はキャッシュ401bも含む。キャッシュ401bは、2つのブレークポイントが、ブレークポイントを有するアドレスを含む集合体(collection)404aに追加された後における、後の時点でのキャッシュ401aの状態を表す。集合体404aにおいて示すように、これらのブレークポイントは、アドレス0x048および0x120を含み、これらは双方とも、キャッシュ401b内に既にあるデーターに対応する。例えば、図2と関連付けて論じたように、アドレス0x048は、アドレス0x040において開始する32バイトを格納する第1キャッシュ・ラインによって保存され、アドレス0x120は第4キャッシュ・ラインによって保存される。これらのブレークポイントの追加によって、キャッシュ401bにおいて、第1キャッシュ・ラインに予約された下位ビット405が1に設定されている。このビットは、キャッシュ・ラインが、ブレークポイントを有するメモリー・アドレスを保存することを示すフラグとして役割を果たす。同様に、キャッシュ401bにおいて、第4キャッシュ・ラインにおいて予約された下位ビット406は1に設定されている。何故なら、そのアドレス(0x120)も集合体404aに入っているからである。各アドレスにおける最下位ビットがこの例ではフラグとして使用されているが、実施態様では、任意の予約ビットをフラグとして使用できることは認められよう。
[0050] 図5は、ブレークポイント検出のためにキャッシュを構成する方法500のフロー・チャート500を示す。この方法は、例えば、キャッシュ401bにおいてフラグ・ビット405および406を設定するために使用することができる。方法500は、例えば、デバッガー104aによって(例えば、ソフトウェアの実施態様において)実行することができ、またはプロセッサー(1つまたは複数)102によって(例えば、ハードウェアの実施態様において)実行することもできる。
[0051] 方法500はステップ501において開始し、ここで、ブレークポイントを設定する要求がある。ステップ501は、監視しようとするメモリー・アドレスを識別する動作を含むことができる。例えば、デバッガー104aにおけるユーザ入力に基づいて、ブレークポイントを設定するために、コード・エレメントに対応するアドレスを識別することができ、またはウォッチポイントを設定するために、データー・エレメントに対応するアドレスを識別することができる。図4の状況では、例えば、アドレス0x048または0x012を、監視すべきメモリー・アドレスとして識別することができる。
[0052] 方法500はステップ502に進み、ここで、識別されたアドレスを監視集合体(即ち、監視対象アドレスの集合体)に追加する。例えば、アドレス0x048および/または0x120を集合体404aに追加することができる。
[0053] 次いで、方法500はステップ503に進み、ここで、識別されたアドレスについて、重なり合うキャッシュ・ライン(1つまたは複数)が存在するか否か判定する。言い方を変えると、ステップ503は、少なくとも監視すべきメモリー・アドレスの識別に基づいて、メモリー・アドレスと重なり合うキャッシュ・ラインが、キャッシュ内に既に存在するか否か判定する動作を含むことができる。先に論じたように、このようなキャッシュ・ラインはアドレス0x048および0x120に対して存在する。したがって、これらのアドレスの各々について方法500を実行するとき、方法500はステップ504に進み、ここで、これらのキャッシュ・ラインのフラグ・ビットを、各キャッシュ・ラインのタグ・フィールドにおいて設定する(即ち、キャッシュ401bにおいて反映されるように)。既存のキャッシュ・ラインが存在しない場合、方法500は506において終了し、フラグ・ビットを全く設定しない(図示の通り)。しかしながら、ステップ505において示すように、随意に、識別されたアドレスにおいてキャッシュ・ミスを処理し、新たにインポートされたキャッシュ・ラインのタグにおいてフラグを設定することができる。
[0054] 例えば、新たなアドレス0x1E0をブレークポイントとして追加する要求があると仮定する。アドレス0x1E0上で方法500を実行すると、ステップ502においてこのアドレスを集合体に追加する(即ち、集合体404bに示す通り)。次いで、ステップ503において、アドレス0x1E0について、重なり合うキャッシュ・ラインが存在しないと判定する。方法500は、単に506において終了することができるが、ステップ505において、方法500はアドレス0x1E0についてキャッシュ・ミスを実行し、インポートされたキャッシュ・ライン上にフラグを設定することもできる。ステップ505の実行は、キャッシュ401cにおいて反映され、第5キャッシュ・ライン(アドレス0x200に対応する)が退去させられ、アドレス0x1E0に対応する新たなキャッシュ・ラインと置き換えられ、フラグ407がこのキャッシュ・ラインのタグに設定される。
[0055] 方法500がキャッシュ・ラインのタグ・フィールドにフラグ・ビットを設定したとき、これらのフラグ・ビットは、1つ以上のプロセッサーによってアクセス可能なアドレス空間全体をアドレスするために必要とされるビットよりも多いビットを含むタグ・フィールドに基づいて予約することができ、および/またはメモリー・アラインメントに基づいて予約することもできる。
[0056] この時点ではブレークポイント・フラグが設定されている(configured) キャッシュ401bおよび401cと関連付けて、そして集合体404aおよび404bと関連付けて、図6は、ブレークポイント検出をキャッシュを通じて実行する方法例600のフロー・チャートを示す。方法600は、例えば、デバッガー104aによって実行することができ(例えば、ソフトウェアの実施態様において)、またはプロセッサー(1つまたは複数)102によって実行することもできる(例えば、ハードウェアの実施態様において)。
[0057] 方法600はステップ601において開始し、ここで、メモリー・アクセスの発生が検出される。これは、指定されたメモリー・アドレスに対する任意のメモリー・アクセス動作とすることができるが、更に具体的に、メモリー・アドレスに対するリード動作またはライト動作とすることができる。メモリー・アクセスが検出された後、方法600はステップ602に進み、ここで、このメモリー・アクセスに対してキャッシュ・エントリーの一致があったか否か判定する。別の言い方をすると、ステップ602は、少なくともメモリー・アクセスの発生を検出したことに基づいて、キャッシュのいずれかのキャッシュ・ラインが、このメモリー・アクセスと関連するアドレスと一致したか否か識別する動作を含むことができる。
[0058] 例えば、メモリー・アクセスがアドレス0x100に対してであり、このアドレス0x100はキャッシュ401b/401cの第2ラインに対応すると仮定する。ここで、この第2キャッシュ・ラインのタグ(即ち、0b0001 0000 0000、または0x100)は、メモリー・アクセスのアドレス(即ち、0x100)と一致するであろう。一致があるので、方法600はステップ603に進み、ここで、ブレークポイントがヒットしなかったと判定する。言い換えると、ステップ603は、キャッシュ・ラインがメモリー・アクセスのアドレスと一致したとき、ブレークポイントに遭遇しなかったと判定する動作を含むことができる。
[0059] 第2の例において、代わりに、メモリー・アクセスがアドレス0x120に対してであり、このアドレス0x120が、先に論じたように、キャッシュ401b/401cの第4ラインに格納されていると仮定する。しかしながら、アドレス0x120が実際にキャッシュ401b/401c内にキャッシュされていても、要求されたメモリー・アドレスはキャッシュ401b/401cのいずれのタグとも一致しない。これは、第2キャッシュ・ラインにおけるフラグ・ビットの設定が、そのキャッシュ・ラインのタグの値を0x121に変化させたため、0x120でなくなったからである。
[0060] この第2の例では、アドレス0x120に対する一致がないので、方法600はステップ604に進み、ここで、フラグ・ビット(1つまたは複数)が無視されれば、一致があるか否か判定する。言い方を変えると、ステップ604は、キャッシュ・ラインがメモリー・アクセスのアドレスと一致しないとき、1つ以上のフラグ・ビットが無視されれば、いずれかのキャッシュ・ラインが、メモリー・アクセスと関連するアドレスと一致するか否か識別する動作を含むことができる。例えば、キャッシュ401b/401cの各タグにおけるフラグ・ビットがゼロであると仮定してもよく、またそうでなければフラグ・ビットをマスクしてもよく、こうすれば一致を求めるチェックを繰り返すことができる。この場合、第2キャッシュ・ラインのタグは、ここでは、フラグ・ビット(1つまたは複数)が無視されれば、0x120であると仮定され、すると、これはメモリー・アクセスと関連するアドレスと一致する。
[0061] この場合一致があるので、方法600はステップ605に進み、ここで、ブレークポイントのヒットがあるかチェックする。言い方を変えると、ステップ605は、1つ以上のフラグ・ビットが無視されれば、キャッシュ・ラインがメモリー・アクセスのアドレスと一致するとき、ブレークポイントに遭遇したか否かについてのチェックを実行する動作を含むことができる。ここで、ブレークポイント・ヒットについてのチェックは、アクセスされたメモリー・アドレス(保存されるあらゆるメモリー・アドレスを含む)を、集合体404a/404bに列挙されているアドレスと比較する動作を含むことができる。このように、方法600は、監視集合体からのいずれかのアドレスが、キャッシュ・ラインによって保存される複数のメモリー・アドレスと重なり合うか否か判定する動作を含むことができる。アドレス0x120は集合体404a/404bに含まれるので、ブレークポイントはヒットしたことになる。
[0062] 第3の例において、メモリー・アクセスがアドレス0x048に対してであると仮定する。このアドレスにおけるデーターは、キャッシュ401b/401cの第1ラインに存在し、タグにおいてアドレス0x040を有する(例えば、図2の表204に関連いて論じたように)。キャッシュ401b/401cの32バイト・メモリー・アラインメントにより、この第2の例では、本来アクセスされるアドレスは0x048であるのに、ステップ602は、メモリー・アクセス「と関連する」アドレスとして、アドレス0x040を使用する。第2の例と同様に、アドレス0x040は実際にキャッシュ401b内にキャッシュされているが、要求されたメモリー・アドレスは、キャッシュ401b/401cのいずれのタグとも一致しない。これは、第1キャッシュ・ラインにおけるフラグ・ビットの設定が、そのキャッシュ・ラインのタグの値を0x041に変化させたため、0x040ではなくなったからである。
[0063] この第3の例では、アドレス0x040に対する一致はないので、方法600はステップ604に進み、ここで、フラグ・ビット(1つまたは複数)が無視されれば、一致があるか否か判定する。この場合、第2キャッシュ・ラインのタグは、ここでは、フラグ・ビット(1つまたは複数)が無視されると、0x040となると仮定され、メモリー・アクセスと関連するアドレスと一致する。この場合ステップ604において一致があるので、方法600はステップ605に進み、ここで、ブレークポイントのヒットについてチェックする。この場合も、ブレークポイントのヒットについてチェックする動作は、アクセスされたメモリー・アドレス(保存されるあらゆるメモリー・アドレスを含む)を集合体404a/404bに列挙されているアドレスと比較する動作を含むことができる。アドレス0x040は集合体404a/404b内にないので、保存されたアドレス0x048は。0x048は本来アクセスされるアドレスであったので、ブレークポイントはヒットしたことになる。
[0064] 第4の例において、メモリー・アクセスがアドレス0x1E0に対してであり、そして方法600がキャッシュ401bおよび集合体404bに対して実行されると仮定する(即ち、方法500が、ステップ505を実行せずに、506において終了した状況)。ここでは、方法600はステップ604に進み(make it to)、ここでは、フラグ・ビット(1つまたは複数)が無視されても、一致はない。したがって、方法600はステップ606においてキャッシュ・ミスを処理する動作を進める(即ち、キャッシュ・ラインをキャッシュにインポートする)。言い方を変えると、ステップ606は、1つ以上のフラグ・ビットが無視されても、キャッシュ・ラインが、メモリー・アクセスと関連するアドレスと一致しないとき、キャッシュ・ミスを処理する動作を含むことができる。
[0065] キャッシュ・ミスを処理することと関連して、方法600はステップ607を実行してもよい。ステップ607は、「ブレークポイント・キャッシュ・ライン・チェック(例えば、キャッシュ・ミスの処理に基づいてキャッシュにインポートされたキャッシュ・ラインが、監視集合体からのいずれかのアドレスと重なり合うか否か判定する)を実行する動作、および/または新たにインポートしたキャッシュ・ライン上にフラグを設定する動作を含む。ステップ607の結果、キャッシュ401cにおいて、第5キャッシュ・ラインが0x1E0に対応し、設定されたフラグ407を有することができる。ブレークポイント・キャッシュ・ライン・チェックを実行するとき、ステップ607は、アクセスされたメモリー・アドレス(保存されるあらゆるメモリー・アドレスを含む)を、集合体404bに列挙されているアドレスと比較し、ブレークポイントに遭遇したことを確認する(identify)ことができる。ブレークポイント・キャッシュ・ライン・チェックを実行するとき、ステップ607は、どのアドレスが監視集合体内にあるか判定する。実施態様は、常に、アドレス集合体全体をチェックしてもよく、または対応するキャッシュ・ラインが既にキャッシュの中にある場合、集合体においてアドレスをチェックするのを回避する、ハードウェアおよび/またはソフトウェア最適化を含んでもよい。例えば、ソフトウェアが2つの集合体(例えば、一方は監視リスト全てを含み、他方はキャッシュの中にないアドレスのみを含む)を使用して、このような最適化を実施することもでき、またはハードウェアが、集合体においてフラグを使用して、このような最適化を実施することもできる(例えば、アドレス毎のフラグであり、そのアドレスがキャッシュの中にあるか否か示すために使用される)。
[0066] この第4の例を考慮すると、ステップ505が方法500において省略されても、そしてブレークポイント集合体におけるアドレスを保存するキャッシュ・ラインが、そのフラグが設定された後に、退去させられても、方法600によってブレークポイントを検出できることが認められよう。したがって、実施態様は、潜在的に不要なキャッシュ・ミスを処理することを回避するために、方法500においてステップ505を省略する選択をしてもよい。
[0067] 注記すべきこととして、以上の例では1つのフラグ・ビットだけを使用したが(即ち、キャッシュ・ラインが、監視対象アドレスの集合体の中にあるアドレスと重なり合うか否か知らせるため)、ある実施態様では、追加の機能を提供するために複数のフラグ・ビットを使用することもできる。例えば、ブレークポイント・ヒットをトリガするメモリー・アクセス動作の種類を指定するために、1つ以上の予約ビットを使用することもできる。したがって、例えば、キャッシュ・ラインに対応するブレークポイントが、ブレーク・オン・ライト(break on write)か、ブレーク・オン・リード(break on read)か、ブレーク・オン・アクセス(break on access)か等を通知するために、追加の予約ビットを使用することもできる。次いで、ブレークポイント・キャッシュ・ライン・チェックを実行する上記のステップ(即ち、ステップ605および607)はいずれも、これらの追加予約ビットを使用して、そのメモリー・アクセスの種類が、ブレークポイント・ヒットをトリガするか否か判定することができる。加えて、フラグを設定する上記のステップ(例えば、ステップ504および607)はいずれも、キャッシュ・ラインのタグ・フィールドにおいてブレークポイントの種類を示す1つ以上のフラグを設定する動作を含むことができ、ブレークポイントの種類は、ブレーク・オン・ライト、ブレーク・オン・リード、またはブレーク・オン・アクセスを含むことができる。
[0068] ある実施態様では、各タグにおいてどのビットを予約ビットとして使用できるかについての判断は、コンピューター・システム101の物理ハードウェア特性に基づいて、システムのブート時に行われる。例えば、メモリー・アラインメントに基づいて下位ビットを使用する場合、予約することができるビット数は、キャッシュ(1つまたは複数)102bの物理特性に基づいて(例えば、これらが32バイトまたは64バイト・メモリー・アドレス・アラインメントのどちらを使用するか)、識別することができる。他の実施形態では、実際にアドレシングに使用されるアドレス・ビットの数に基づいて上位ビットを使用する場合、実施形態は、組み込まれた物理システム・メモリー103の量を判定してもよい。プロセッサー(1つまたは複数)102は物理的に、組み込まれているメモリーよりも多くのメモリーをアドレスすることはできないが、キャッシュ・レイヤにおいて少なくともそのCPUの最大メモリー量をサポートするように設計されているので、組み込まれている物理メモリーをアドレスするために必要なビット数に基づいて、ある数の上位ビットを予約することができる。この結果、物理メモリーのアドレシングのためにプロセッサーによってデフォルトで利用されるアドレス・ビットの数(例えば、先に論じたような48または56)に単に頼るよりも多くの上位ビットを利用可能にすることができる。したがって、方法500および600では、利用可能な物理メモリーの量に基づいて、ブート時にフラグ・ビットを予約できることが認められよう。尚、予約ビットは、必ずしもブレークポイント検出の目的のみに使用されなくてもよいことを注記しておく。むしろ、これらは、実例をあげると、デバッガー104aによって使用されるキャッシュ・ベースのトレーシング・メカニズムの一部として使用されてもよい。あるCPU上では、以下の条件の内少なくとも1つが真になればよい。(a)常時ゼロの下位ビットがキャッシュ・タグに格納されていない。(b)常時ゼロの下位ビットが、キャッシュ・エントリー一致比較(cache entry match comparison)の目的には利用可能でない。(c)物理メモリーのアドレシングのためにプロセッサーによってデフォルトで利用されないアドレス・ビットがキャッシュ・タグ内に格納されていない。(d)物理メモリーのアドレシングのためにプロセッサーによってデフォルトで利用されないアドレス・ビットが、キャッシュ・エントリー一致比較の目的には利用可能でない。以上の4つの条件全てが真であるCPU上であっても、CPUが閾値よりも少ないメモリーを使用するように構成される場合(例えば、CPUがアドレスするように設計された最大物理メモリーの1/2または1/4未満)、キャッシュ・エントリー一致比較の目的で利用可能であり、タグの中に格納されている少なくとも1つのビットが、タグとして使用するために利用可能になる。この閾値は、CPUのために組み込まれたメモリー量によって検出することができ、BIOSが、CPUに露出されるメモリーを、組み込まれた量未満に制限することによって検出することもでき、または最大使用メモリーを示すようにCPUに指示を与えることによって(指示を与えなければ、もっと多くのメモリーがCPUに利用可能であっても)検出することもできる。
[0069] 監視対象メモリー・アドレスの集合体(例えば、集合体404aおよび404b)について全体的な説明を行った。ソフトウェアの実施態様では、システム・メモリー103における種々のデーター構造に集合体を格納することができるが、ハードウェアの実施態様では、プロセッサー(1つまたは複数)102自体に集合体を格納すること、または既存のメモリー・アクセス・メカニズムによって集合体を露出させることによる利点が得られる。例えば、あるプロセッサーは、ディレクトリーを使用するキャッシュ・コヒーレンシー・プロトコル(CCP:cache coherency protocol)を実装する。これらのプロセッサーでは、このような集合体をCCPのディレクトリーに格納してもよい。あるいは、あるプロセッサーの実施態様では、これらの集合体を格納するために使用することができるプロセッサー上バッファ(on-processor buffer)(例えば、バッファ(1つまたは複数)102e)を含むこともできる。例えば、あるハードウェア・ベースのトレーシング・メカニズムが、プロセッサー上バッファを含むのでもよく、トレース・ファイル(1つまたは複数)104dに書き込む前に、トレース・データーをプロセッサー上バッファに一時的に格納することができる。また、ある実施態様では、このようなバッファを使用して、これらのアドレス集合体を格納することもできる。ある実施態様では、キャッシュ(1つまたは複数)102bの一部を、このようなバッファに使用することさえも可能である。以上のことを考慮すると、方法500および600において、監視対象アドレスの集合体は、CCPディレクトリーまたは任意の他のプロセッサー上バッファ102eのような、プロセッサー上メモリーに格納できることが認められよう。
[0070] 他の実施態様では、アドレス集合体データーにアクセスするために、プロセッサー(1つまたは複数)102のTLB102fを利用することができる。当業者には認められるであろうが、TLBは、一般に、プロセッサーのメモリー管理ユニットの一部であり、一般に、仮想メモリー・アドレス(例えば、プロセッサー(1つまたは複数)102において実行するプロセスから見た場合の仮想メモリー・アドレス)とシステム・メモリー103における物理メモリー・アドレス(例えば、プロセッサー(1つまたは複数)102によって実際に使用され、キャッシュ(1つまたは複数)102bによって含まれる物理メモリー・アドレス)との間における最新の変換を格納する。プロセッサー(1つまたは複数)102が、TLBエントリーを欠く物理メモリー・アドレスにアクセスすると、ページ・テーブル・ミス(page table miss)が発生し、該当する仮想−物理マッピングを突き止めるために、システム・メモリー103における1つ以上のページ・テーブルにアクセスさせる。実施態様は、アドレス集合体をシステム・メモリー103に格納し、各ページ・テーブル・エントリーにおいて、ページ・テーブルにおけるいずれかのメモリー・アドレスがアドレス集合体に含まれるか否か示すことができる。このように、ページ・テーブル・エントリー(TLB102fにキャッシュされている)を使用して、アドレス集合体が、所与のメモリー・アクセスに対して関連するエントリーを含むか否か判断することができる。このように、方法600では、ブレークポイントに遭遇したか否かについてのチェックを実行する動作は、TLBを参照して、メモリー・アドレスに対応するページ・テーブルが、いずれかの監視対象メモリー・アドレスを含むか否か判定する動作を含むことができる。次いで、メモリー・アドレスに対応するページ・テーブルが監視対象メモリー・アドレスを含むとき、方法600は、監視集合体からのいずれかのアドレスが、キャッシュ・ラインによって保存される複数のメモリー・アドレスと重なり合うか否か判定する動作を含むことができる。
[0071] マルチレベル・ページ・テーブルを使用する場合、以上のデーターはリーフにのみ格納されればよく、これによって実行時間が一定になる。あるいは、以上のデーターを上位レベルのページ・テーブルのみに格納することもでき(例えば、少なくとも1つの下位レベルのページ・テーブルがアドレス集合体の中にあるアドレスを含むことを示す)、リーフのみに格納するよりも素早く実行することができるが、偽陽性の増加を招く可能性がある(即ち、アクセスされたアドレスが実際に集合体にない状況におけるアドレス集合体の検索)。したがって、方法500のステップ502は、ページ・テーブルまたはチャイルド・ページ・テーブルの1つ以上が監視対象メモリー・アドレスを含むことを示すために、ページ・テーブルにページ・テーブル・エントリーを構成する動作を含むことができる。
[0072] ある実施態様では、プロセッサーのデバッグ・レジスター(例えば、INTELアーキテクチャにおけるDR0〜DR3)のような、既存のハードウェア・ベースのブレークポイント検出メカニズムと相互動作してもよい。これらの実施態様は、既存のソフトウェア(例えば、プロセッサーのデバッグ・レジスターを使用するソフトウェア)との互換性を維持しつつ、キャッシュ・ベースのブレークポイント検出(例えば、低い検出オーバーヘッドで、事実上無制限のブレークポイント数)の利点が得られる。当業者には認められるであろうが、多くのプロセッサー・アーキテクチャは高速「比較」ハードウェアを含む。高速「比較」ハードウェアは、退出命令(retiring instruction)によってアクセスされたメモリー・アドレスを、対応するデバッグ・レジスターに入れられているメモリー・アドレスと比較する。一致がある場合、ブレークポイントのヒットをデバッギング・ソフトウェアに通知することができる(例えば、レジスター、割り込み等によって)。実施態様は、この同じプロセスを使用して、いつブレークポイント・ヒットが検出されたか、キャッシュを通じて通知することもできる。例えば、一旦キャッシュ・ベースのブレークポイントが検出されたなら、実施態様は、そのブレークポイントのメモリー・アドレスをしかるべきレジスター(例えば、INTELアーキテクチャにおけるDR0〜DR3)に挿入することができ、既存のメカニズムを使用してブレークポイントの出現を通知することができる(例えば、レジスター、割り込み等によって)。したがって、ソフトウェアは、従前からのメカニズムを通じて、ブレークポイントの通知を受け取るが、利用可能なデバッグ・レジスターの数に基づいて監視することができるブレークポイントの数は制限されない。あるいは、ある実施態様では、対応するデバッグ・レジスター(存在しないかもしれない)の設定を取り込み、キャッシュ・ベースのブレークポイント検出によってデバッグ・レジスター機能を完全に実装してもよい。
[0073] ある実施態様では、あるアドレスがキャッシュ内に一致がないと判定したことに応答するのではなく(例えば、方法600のステップ604)、命令退出時にフラグ・ビットをチェックする。例えば、図7は、命令退出時にブレークポイント検出を実行する方法例700のフロー・チャートを示す。方法700はステップ701において開始し、ここで、命令がメモリー・アドレスにアクセスする。例えば、プロセッサー(1つまたは複数)102におけるアプリケーション104cの実行中に、トレース・ファイル(1つまたは複数)104dに基づいて、処理ユニット102aは、メモリー・アドレスにアクセスするアプリケーション104cの命令を実行することができる。
[0074] このメモリー・アクセスに基づいて、方法700はステップ702に進み、ここで、フラグ・ビット(1つまたは複数)が無視されれば、このメモリー・アドレスに対してキャッシュ・エントリー一致があるか否かチェックする。例えば、プロセッサー(1つまたは複数)102は、キャッシュ(1つまたは複数)102bをチェックして、フラグ(1つまたは複数)が設定されていないと仮定して(例えば、ゼロであると仮定して)、メモリー・アクセスに対するキャッシュ・ライン一致があるか否か判定することができる。図7には示さないが、プロセッサー(1つまたは複数)102は、702におけるチェックの結果に応じて、既にキャッシュ(1つまたは複数)102bの中にあるキャッシュ・ライン・データーを読み出す(即ち、一致があった場合)、またはキャッシュ・ミスを処理して、しかるべきキャッシュ・ライン・データーのキャッシュ(1つまたは複数)102bへの流入(influx)を発生させる(即ち、一致がなかった場合)というような、異なる動作を起こすことができる。しかるべきキャッシュ・ライン・データーが既にキャッシュ(1つまたは複数)102bの中にあったか否かには関係なく、またキャッシュ・ミスが処理されたか否かにも関係なく、プロセッサー(1つまたは複数)102は、キャッシュ・ライン・データーに基づいて、命令の実行を開始することができる(例えば、その命令に対応するマイクロ動作の実行を開始することによって)。
[0075] ステップ703に示すように、方法700は、フラグ・ビットを格納するステップを含んでもよい。例えば、ステップ702において一致があった場合、プロセッサー(1つまたは複数)102は、フラグ・ビットを(セットされていても、されていなくても関係なく)キャッシュ・ライン・タグからレジスターに、マイクロ動作の一部として、または命令退出時にアクセス可能な任意の他の位置に、格納してもよい。ステップ702において一致がなかった場合、プロセッサー(1つまたは複数)102は、キャッシュ・ミスを処理する一部として、キャッシュ・ライン・タグ上でフラグ・ビット状態を設定してもよい。次いで、プロセッサー(1つまたは複数)102は、このフラグ・ビットを(セットされていても、されていなくても関係なく)キャッシュ・ライン・タグからレジスターに、マイクロ動作の一部として、または命令退出時にアクセス可能な任意の他の位置に、格納してもよい。
[0076] 後に、命令退出時間中に、ステップ704は、フラグ・ビットがキャッシュ・ライン上で設定されたか否か判定する。例えば、プロセッサー(1つまたは複数)102は、キャッシュ・ライン上のフラグ・ビットにアクセスして、設定されたか否か判定してもよく、またはステップ703において退避された位置から(実行された場合)フラグ・ビットにアクセスしてもよい。ステップ704の成果に基づいて、方法700はステップ706において終了することができ(即ち、フラグ・ビットが設定されなかった場合)、またはステップ705においてデバッグ・ブレークポイントを処理することができる(即ち、フラグ・ビットが設定された場合)。ステップ705においてデバッグ・ブレークポイントを処理する動作は、前述のように、デバッグ・レジスターの状態を設定する動作を含むことができる。
[0077] 注記すべきこととして、当業者には認められるであろうが、キャッシュ(1つまたは複数)102bは、一般に、マルチレベル・キャッシュを含み、例えば、L1レイヤ、これを支持する(back)L2レイヤ、次いでこれを支持することができるL3レイヤ(等)を有する。このようなマルチレベル・キャッシュでは、レイヤ間でキャッシュ・ラインが移動するに連れて、フラグ・ビットの状態がキャッシュ・ラインと共に移動することができる。したがって、例えば、キャッシュ401bがL1キャッシュを表し、第1キャッシュ・ラインがL2キャッシュに移動された場合、フラグ405の状態は、L2キャッシュの中にあるキャッシュ・ラインのインスタンスにおいて、設定されたままでいることができる。あるいは、フラグ・ビットのみをキャッシュ・レベルの部分集合において(例えば、L1レベルにおいてのみ)使用してもよい。
[0078] ある実施形態では、キャッシュされており外からは見えないデーター(即ち、キャッシュされているメモリー位置の範囲を超えるデーター)の型も更に考慮することができる。例えば、あるプロセッサーは、デコードされたプロセッサー命令のキャッシュ(即ち、それらの対応するマイクロコード)を保持することができる。これらの状況では、命令がデコードされると、プロセッサーは、ブレークポイントを検出するために、その命令が未だコード・キャッシュ内にあることを確認する(そしてフラグ・ビットをチェックする)ことができる。あるいは、ブレークポイントがヒットするかもしれないという事実を含むようにマイクロコード・シーケンスを変更し、キャッシュに問い合わせる必要性を回避してもよい。
[0079] したがって、少なくともいくつかの実施形態では、監視されているメモリー・アドレスと重なり合うキャッシュ・ラインを退去させることを回避するように、キャッシュ・ベースのブレークポイント検出を進ませ、少なくともいくつかの実施形態では、監視しているメモリー・アドレスと重なり合うキャッシュ・ラインに対してキャッシュ流入イベントを回避するように、キャッシュ・ベースのブレークポイント検出を進ませる。具体的には、監視対象メモリー・アドレスと重なり合うキャッシュ・ラインを退去させるのではなく、これらの実施形態は、キャッシュ・ラインが監視対象メモリー・アドレスと重なり合うことを知らせるために、キャッシュ・ラインのタグ・フィールドにおける1つ以上の「予約」アドレス・ビットまたは現在未使用のアドレス・ビットを利用する。このようにすることによって、発生するキャッシュ・ミスおよび/またはキャッシュ流入の回数を減らすだけでなく、そのキャッシュ・ラインを伴う後続のメモリー・アクセスがあるときに(即ち、キャッシュ・ミスの間だけとは対照的に)、効率的なブレークポイント・キャッシュ・ライン・チェックを実行することを可能にする。具体的には、キャッシュ・ミスにより後続のメモリー・アクセス時にキャッシュ・ライン(キャッシュ流入)を再インポートすることを必要とする代わりに、キャッシュ・ラインのタグ・フィールド内に予約ビットが設定されているいずれかのキャッシュ・ライン上でヒットがあるときに、効率的なブレークポイント・キャッシュ・ライン・チェックを実行することができる。このように、本明細書における実施形態は、ブレークポイント検出を目的としたキャッシュ・ラインの退去を回避し、既存のキャッシュ・ラインのために新たな効率的なブレークポイント検出メカニズムを追加する。これらは双方共、トレース・リプレイ中にブレークポイントを検出するためにデバッガーによって発生するオーバーヘッドを大幅に低減することができる。
[0080] 従来のキャッシュ・ベースのブレークポイント検出解決策に対するこれらの利点の効果(operations)は、図4に照らして観察することができる。例えば、キャッシュ401aおよび401bならびに集合体404aを参照すると、0x120における8バイト値にブレーク・オン・アクセスを設定するとき、従来の解決策であれば、タグ0x120における第4キャッシュ・ラインをキャッシュ401aから退去させるであろう。本実施形態は、しかしながら、そのようにするのを回避し、代わりに、フラグ・ビット406を設定するようにキャッシュ・ラインのタグを変更し、その結果、キャッシュ401bの中にタグ0x121ができる。
[0081] 次に、実行中のコード命令がアドレス0x128にアクセスすると仮定する。このアドレスは、集合体404aの中にないが、0x120にアドレスされたキャッシュ・ラインによって「保存される」。従来の解決策であれば、アドレス0x120にブレークポイントを設定するときに、第4ラインを退去させたはずなので、このアクセスの結果、キャッシュ・ミスおよびキャッシュ流入が生じ、その後、命令が退出した後に、キャッシュの退去が行われる。しかしながら、本実施形態では、ブレークポイントを設定するときに、キャッシュ・ラインを保持する。このように、フラグ406の設定による初期のアドレス・ミスがあるが、キャッシュ・ラインは、設定されたフラグによって、後に発見される(即ち、ステップ604)。したがって、本実施形態では、キャッシュ流入を全く実行する必要なく、命令が退出することができる。
[0082] 最後に、他の実行中のコード命令が、集合体404aの中にあるアドレス0x120にアクセスすると仮定する。この場合も、従来の解決策であれば、他のキャッシュ・ミスおよびキャッシュ流入が生じる結果となるであろう。しかしながら、本実施形態は、この場合も、フラグ406の設定により初期アドレス・ミスを発生するが、キャッシュ・ラインは、設定されたフラグによって、後に発見される(即ち、ステップ604)。したがって、本実施形態では、この場合も、キャッシュ流入を全く実行する必要なく、命令が退出することができる。
[0083] 以上、構造的特徴および/または方法論的ステップに特定的な文言で主題について説明したが、添付する特許請求の範囲において定められる主題は、必ずしも以上で説明した特徴やステップにも、以上で説明したステップの順序にも限定されるのではないことは理解されよう。逆に、以上で説明した具体的な特徴およびステップは、特許請求の範囲を実現する形態例として開示したまでである。
[0084] 本発明は、その主旨や本質的な特徴から逸脱することなく、他の特定的な形態で具体化されてもよい。説明した実施形態は、あらゆる観点において、限定ではなく例示として見なされるものとする。したがって、本発明の範囲は、以上の説明ではなく、添付する請求項によって示される。特許請求の範囲の意味および均等の範囲に該当する全ての変更は、それらの範囲に包含されるものとする。

Claims (15)

  1. 1つ以上のプロセッサーを含むコンピューター・システムに実装され、キャッシュを通じてブレークポイント検出を実行する方法であって、
    メモリー・アクセスの発生を検出するステップと、
    少なくとも前記メモリー・アクセスの発生を検出したことに基づいて、前記キャッシュのいずれかのキャッシュ・ラインが、前記メモリー・アクセスと関連するアドレスと一致するか否か識別し、キャッシュ・ラインが前記メモリー・アクセスと関連するアドレスと一致した場合、ブレークポイントに遭遇しなかったと判定するステップ、または、
    前記メモリー・アクセスと関連するアドレスと一致するキャッシュ・ラインがないとき、1つ以上のフラグ・ビットが無視されれば、いずれかのキャッシュ・ラインが、前記メモリー・アクセスと関連するアドレスと一致するか否か識別するステップと、および
    前記1つ以上のフラグ・ビットが無視されれば、キャッシュ・ラインが、前記メモリー・アクセスと関連するアドレスと一致するとき、ブレークポイントに遭遇したか否かについてのチェックを実行するステップ、または、
    前記1つ以上のフラグ・ビットが無視されても、前記メモリー・アクセスと関連するアドレスと一致するキャッシュ・ラインがないとき、キャッシュ・ミスを処理するステップと、
    を含む、方法。
  2. 請求項1に記載の方法であって、更に、前記1つ以上のフラグ・ビットが無視されても、前記メモリー・アクセスと関連するアドレスと一致するキャッシュ・ラインがないとき、前記キャッシュ・ミスを処理することに基づいて、前記キャッシュにインポートされたキャッシュ・ラインが、監視集合体からのいずれかのアドレスと重なり合うか否か判定するステップを含む、方法。
  3. 請求項2に記載の方法であって、更に、前記キャッシュにインポートされたキャッシュ・ラインが、監視集合体からのアドレスと重なり合うとき、前記キャッシュ・ライン上にフラグ・ビットを設定するステップを含む、方法。
  4. 請求項1に記載の方法において、ブレークポイントに遭遇したかについて前記チェックを実行するステップが、前記監視集合体からのいずれかのアドレスが、前記キャッシュ・ラインによって保存される複数のメモリー・アドレスと重なり合うか否か判定するステップを含む、方法。
  5. 請求項4に記載の方法において、前記監視集合体がシステム・メモリーに格納される、方法。
  6. 請求項4に記載の方法において、前記監視集合体がプロセッサー・メモリーに格納される、方法。
  7. 請求項6に記載の方法において、前記プロセッサー・メモリーが、キャッシュ・コヒーレンス・プロトコル・ディレクトリーを含む、方法。
  8. 請求項1に記載の方法において、ブレークポイントに遭遇したかについて前記チェックを実行するステップが、トランスレーション・ルックアサイド・バッファを参照して、前記メモリー・アドレスに対応するページ・テーブルが、いずれかの監視対象メモリー・アドレスを含んでいるか否か判定するステップを含む、方法。
  9. 請求項8に記載の方法であって、更に、前記メモリー・アドレスに対応する前記ページ・テーブルが、監視対象メモリー・アドレスを含んでいるとき、監視集合体からのいずれかのアドレスが、前記キャッシュ・ラインによって保存される複数のメモリー・アドレスと重なり合うか否か判定するステップを含む、方法。
  10. 請求項1に記載の方法において、ブレークポイントに遭遇したかについて前記チェックを実行するステップが、前記キャッシュ・ラインのアドレスを、ハードウェア・デバッグ・レジスターに入れるステップを含む、方法。
  11. コンピューター・システムであって、
    1つ以上のプロセッサーと、
    前記1つ以上のプロセッサーを、キャッシュを通じてブレークポイント検出を実行するように構成する、コンピューター実行可能命令が格納されている1つ以上のコンピューター読み取り可能媒体と、
    を備え、前記ブレークポイント検出が、少なくとも、
    メモリー・アクセスの発生を検出するステップと、
    少なくとも前記メモリー・アクセスの発生を検出したことに基づいて、前記キャッシュのいずれかのキャッシュ・ラインが、前記メモリー・アクセスと関連するアドレスと一致するか否か識別するステップと、
    キャッシュ・ラインが前記メモリー・アクセスと関連するアドレスと一致した場合、ブレークポイントに遭遇しなかったと判定するステップ、または、前記メモリー・アクセスと関連するアドレスと一致するキャッシュ・ラインがないとき、1つ以上のフラグ・ビットが無視されれば、いずれかのキャッシュ・ラインが、前記メモリー・アクセスと関連するアドレスと一致するか否か識別するステップと、
    前記1つ以上のフラグ・ビットが無視されれば、キャッシュ・ラインが、前記メモリー・アクセスと関連するアドレスと一致するとき、ブレークポイントに遭遇したか否かについてのチェックを実行するステップ、または前記1つ以上のフラグ・ビットが無視されても、前記メモリー・アクセスと関連するアドレスと一致するキャッシュ・ラインがないとき、キャッシュ・ミスを処理するステップと、
    を含む、コンピューター・システム。
  12. 請求項11に記載のコンピューター・システムにおいて、前記1つ以上のプロセッサーが、前記コンピューター読み取り可能媒体と前記キャッシュとを備え、前記コンピューター実行可能命令が、プロセッサー・マイクロコードを含む、コンピューター・システム。
  13. 請求項11に記載のコンピューター・システムにおいて、前記コンピューター実行可能命令が、前記1つ以上のフラグ・ビットが無視されても、前記メモリー・アクセスと関連するアドレスと一致するキャッシュ・ラインがないとき、前記キャッシュ・ミスを処理することに基づいて、前記キャッシュにインポートされたキャッシュ・ラインが、監視集合体からのいずれかのアドレスと重なり合うか否か判定するように、前記1つ以上のプロセッサーを構成する、コンピューター・システム。
  14. 請求項11に記載のコンピューター・システムにおいて、ブレークポイントに遭遇したか否かについてのチェックを実行するステップが、監視集合体からのいずれかのアドレスが、前記キャッシュ・ラインによって保存される複数のメモリー・アドレスと重なり合うか否か判定するステップを含む、コンピューター・システム。
  15. 請求項14に記載のコンピューター・システムにおいて、前記監視集合体が、プロセッサー・メモリーに格納される、コンピューター・システム。
JP2020572938A 2018-06-27 2019-06-18 予約タグ・フィールド・ビットを使用するキャッシュ・ベースのブレークポイント・トレース/リプレイ(trace replay breakpoint) Active JP7348919B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/020,636 US10740220B2 (en) 2018-06-27 2018-06-27 Cache-based trace replay breakpoints using reserved tag field bits
US16/020,636 2018-06-27
PCT/US2019/037571 WO2020005625A1 (en) 2018-06-27 2019-06-18 Cache-based trace replay breakpoints using reserved tag field bits

Publications (2)

Publication Number Publication Date
JP2021528780A true JP2021528780A (ja) 2021-10-21
JP7348919B2 JP7348919B2 (ja) 2023-09-21

Family

ID=67138136

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020572938A Active JP7348919B2 (ja) 2018-06-27 2019-06-18 予約タグ・フィールド・ビットを使用するキャッシュ・ベースのブレークポイント・トレース/リプレイ(trace replay breakpoint)

Country Status (16)

Country Link
US (1) US10740220B2 (ja)
EP (1) EP3814907B1 (ja)
JP (1) JP7348919B2 (ja)
KR (1) KR20210021464A (ja)
CN (1) CN112368684A (ja)
AU (1) AU2019294141B2 (ja)
BR (1) BR112020023084A2 (ja)
CA (1) CA3102624A1 (ja)
ES (1) ES2909580T3 (ja)
IL (1) IL279640B2 (ja)
MX (1) MX2020013596A (ja)
PH (1) PH12020552243A1 (ja)
RU (1) RU2769785C1 (ja)
SG (1) SG11202012406QA (ja)
WO (1) WO2020005625A1 (ja)
ZA (1) ZA202006888B (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10268558B2 (en) 2017-01-13 2019-04-23 Microsoft Technology Licensing, Llc Efficient breakpoint detection via caches
US11860782B2 (en) * 2019-08-13 2024-01-02 Neuroblade Ltd. Compensating for DRAM activation penalties
US11086791B2 (en) * 2019-08-29 2021-08-10 Micron Technology, Inc. Methods for supporting mismatched transaction granularities
US11307857B2 (en) 2019-12-05 2022-04-19 Marvell Asia Pte, Ltd. Dynamic designation of instructions as sensitive for constraining multithreaded execution
US11263015B1 (en) * 2019-12-05 2022-03-01 Marvell Asia Pte, Ltd. Microarchitectural sensitive tag flow
US11372647B2 (en) 2019-12-05 2022-06-28 Marvell Asia Pte, Ltd. Pipelines for secure multithread execution
US11714676B2 (en) * 2020-01-03 2023-08-01 International Business Machines Corporation Software-directed value profiling with hardware-based guarded storage facility

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62179033A (ja) * 1986-01-24 1987-08-06 インテル・コ−ポレ−シヨン 集積回路マイクロプロセツサ
JPH05113906A (ja) * 1991-10-22 1993-05-07 Fujitsu Ltd デバツグ支援装置
JPH05204709A (ja) * 1992-01-24 1993-08-13 Mitsubishi Electric Corp プロセッサ
JPH1139153A (ja) * 1997-07-15 1999-02-12 Matsushita Electric Ind Co Ltd プログラムがromに記録されているマイコンシステムにおけるメンテナンス方法、そのマイコンシステムに用いられる中央処理装置、キャッシュシステム、及びマイコンシステムの応用装置
JP2004272939A (ja) * 1994-09-09 2004-09-30 Renesas Technology Corp 1チップデータプロセッサ
JP2007257441A (ja) * 2006-03-24 2007-10-04 Fujitsu Ltd プロセッサおよびプロセッサ制御方法
JP2014182562A (ja) * 2013-03-19 2014-09-29 Toshiba Corp 情報処理装置およびデバッグ方法

Family Cites Families (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5535318A (en) 1992-04-30 1996-07-09 Ricoh Company, Ltd. Debugging system for a hierarchically structured page description language
US5664159A (en) * 1994-03-08 1997-09-02 Exponential Technology, Inc. Method for emulating multiple debug breakpoints by page partitioning using a single breakpoint register
CA2211505C (en) 1997-07-25 2002-02-05 Ibm Canada Limited-Ibm Canada Limitee Setting instance breakpoints in object oriented computer programs
US6106572A (en) 1998-03-25 2000-08-22 Origins Software Company Forward and reverse hierarchical page level debugger
US6237135B1 (en) 1998-06-18 2001-05-22 Borland Software Corporation Development system with visual design tools for creating and maintaining Java Beans components
US6134710A (en) 1998-06-26 2000-10-17 International Business Machines Corp. Adaptive method and system to minimize the effect of long cache misses
US6182208B1 (en) 1998-08-14 2001-01-30 Lucent Technologies, Inc. System for debugging (N) break points by dividing a computer program to (n+1) regions each contains no break point and using two registers to define the start and end addresses of each region
US6795962B1 (en) 1999-12-30 2004-09-21 Microsoft Corporation Machine independent debugger
US6738868B2 (en) * 2000-06-10 2004-05-18 Hewlett-Packard Development Company, L.P. System for minimizing directory information in scalable multiprocessor systems with logically independent input/output nodes
US7000225B2 (en) 2000-12-07 2006-02-14 International Business Machines Corporation Method for inserting global breakpoints
US7047519B2 (en) 2001-09-26 2006-05-16 International Business Machines Corporation Dynamic setting of breakpoint count attributes
US7644394B2 (en) 2001-11-30 2010-01-05 International Business Machines Corporation Object-oriented creation breakpoints
US7296259B2 (en) * 2002-09-11 2007-11-13 Agere Systems Inc. Processor system with cache-based software breakpoints
US7269825B1 (en) 2002-12-27 2007-09-11 Unisys Corporation Method and system for relative address translation
US7650592B2 (en) 2003-03-01 2010-01-19 Bea Systems, Inc. Systems and methods for multi-view debugging environment
US7272826B2 (en) 2003-05-08 2007-09-18 International Business Machines Corporation Hierarchical breakpoint groups
US7249225B1 (en) 2003-10-31 2007-07-24 Sun Microsystems, Inc Method and apparatus for supporting read-only objects within an object-addressed memory hierarchy
US7694278B2 (en) 2004-07-09 2010-04-06 Microsoft Corporation Data cube script development and debugging systems and methodologies
US7634761B2 (en) 2004-10-29 2009-12-15 Microsoft Corporation Breakpoint logging and constraint mechanisms for parallel computing systems
US7447942B2 (en) * 2005-07-19 2008-11-04 Microsoft Corporation Fast data breakpoint emulation
US20070168736A1 (en) 2005-12-19 2007-07-19 Ottavi Robert P Breakpoint groups
US8352713B2 (en) * 2006-08-09 2013-01-08 Qualcomm Incorporated Debug circuit comparing processor instruction set operating mode
US7840849B2 (en) 2006-12-21 2010-11-23 Novell, Inc. Methods and apparatus for debugging software including divisions of an execution history of a debuggee program
US8612720B2 (en) 2007-02-09 2013-12-17 Edgewater Computer Systems, Inc. System and method for implementing data breakpoints
US8095861B2 (en) 2007-09-28 2012-01-10 International Business Machines Corporation Cache function overloading
US8336032B2 (en) 2007-12-05 2012-12-18 International Business Machines Corporation Implementing enhanced template debug
US9032374B2 (en) 2008-04-03 2015-05-12 International Business Machines Corporation Metadata-integrated debugger
US8423965B2 (en) 2009-06-23 2013-04-16 Microsoft Corporation Tracing of data flow
US8539209B2 (en) * 2009-08-24 2013-09-17 Via Technologies, Inc. Microprocessor that performs a two-pass breakpoint check for a cache line-crossing load/store operation
JP2011070256A (ja) 2009-09-24 2011-04-07 Toshiba Corp デバッガおよびプログラム
US8745597B2 (en) 2009-11-25 2014-06-03 International Business Machines Corporation Providing programming support to debuggers
US20110154111A1 (en) 2009-12-23 2011-06-23 International Business Machines Corporation Memory Based Hardware Breakpoints
CN101777021B (zh) * 2010-01-21 2012-07-04 龙芯中科技术有限公司 微处理器中精确数据断点的实现装置及其方法
US8578340B1 (en) 2010-09-24 2013-11-05 Ca, Inc. Recording and replaying computer program execution with recorded execution event breakpoints
US9552206B2 (en) 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry
US8832659B2 (en) 2010-12-06 2014-09-09 University Of Washington Through Its Center For Commercialization Systems and methods for finding concurrency errors
US8656359B2 (en) 2011-03-25 2014-02-18 Sap Ag Debugging data mappings
US8566537B2 (en) * 2011-03-29 2013-10-22 Intel Corporation Method and apparatus to facilitate shared pointers in a heterogeneous platform
US8522213B2 (en) 2011-05-12 2013-08-27 International Business Machines Corporation Debugger and debugging methods using breakpoints conditioned on the static identity of data
US9880842B2 (en) * 2013-03-15 2018-01-30 Intel Corporation Using control flow data structures to direct and track instruction execution
CN104346274B (zh) 2013-07-29 2017-06-06 国际商业机器公司 程序调试器及一种程序的调试方法
US9021444B2 (en) 2013-08-19 2015-04-28 Concurix Corporation Combined performance tracer and snapshot debugging system
US9292444B2 (en) 2013-09-26 2016-03-22 International Business Machines Corporation Multi-granular cache management in multi-processor computing environments
US9176821B2 (en) * 2013-10-30 2015-11-03 Freescale Semiconductor, Inc. Watchpoint support system for functional simulator
US9436603B1 (en) 2014-02-27 2016-09-06 Amazon Technologies, Inc. Detection and mitigation of timing side-channel attacks
US9875173B2 (en) 2014-06-30 2018-01-23 Microsoft Technology Licensing, Llc Time travel debugging in managed runtime
US9588870B2 (en) 2015-04-06 2017-03-07 Microsoft Technology Licensing, Llc Time travel debugging for browser components
US9996448B2 (en) 2016-02-25 2018-06-12 Red Hat Israel Ltd Breakpoint insertion into kernel pages
US10152425B2 (en) 2016-06-13 2018-12-11 Advanced Micro Devices, Inc. Cache entry replacement based on availability of entries at another cache
US10310977B2 (en) 2016-10-20 2019-06-04 Microsoft Technology Licensing, Llc Facilitating recording a trace file of code execution using a processor cache
US10268558B2 (en) 2017-01-13 2019-04-23 Microsoft Technology Licensing, Llc Efficient breakpoint detection via caches
US10169196B2 (en) 2017-03-20 2019-01-01 Microsoft Technology Licensing, Llc Enabling breakpoints on entire data structures

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62179033A (ja) * 1986-01-24 1987-08-06 インテル・コ−ポレ−シヨン 集積回路マイクロプロセツサ
JPH05113906A (ja) * 1991-10-22 1993-05-07 Fujitsu Ltd デバツグ支援装置
JPH05204709A (ja) * 1992-01-24 1993-08-13 Mitsubishi Electric Corp プロセッサ
JP2004272939A (ja) * 1994-09-09 2004-09-30 Renesas Technology Corp 1チップデータプロセッサ
JPH1139153A (ja) * 1997-07-15 1999-02-12 Matsushita Electric Ind Co Ltd プログラムがromに記録されているマイコンシステムにおけるメンテナンス方法、そのマイコンシステムに用いられる中央処理装置、キャッシュシステム、及びマイコンシステムの応用装置
JP2007257441A (ja) * 2006-03-24 2007-10-04 Fujitsu Ltd プロセッサおよびプロセッサ制御方法
JP2014182562A (ja) * 2013-03-19 2014-09-29 Toshiba Corp 情報処理装置およびデバッグ方法

Also Published As

Publication number Publication date
WO2020005625A1 (en) 2020-01-02
JP7348919B2 (ja) 2023-09-21
BR112020023084A2 (pt) 2021-02-02
US20200004662A1 (en) 2020-01-02
IL279640A (en) 2021-03-01
RU2769785C1 (ru) 2022-04-06
SG11202012406QA (en) 2021-01-28
AU2019294141B2 (en) 2023-10-26
US10740220B2 (en) 2020-08-11
EP3814907B1 (en) 2022-02-16
IL279640B2 (en) 2024-06-01
KR20210021464A (ko) 2021-02-26
CA3102624A1 (en) 2020-01-02
EP3814907A1 (en) 2021-05-05
AU2019294141A1 (en) 2020-11-26
ZA202006888B (en) 2022-01-26
MX2020013596A (es) 2021-03-09
CN112368684A (zh) 2021-02-12
IL279640B1 (en) 2024-02-01
ES2909580T3 (es) 2022-05-09
PH12020552243A1 (en) 2021-06-28

Similar Documents

Publication Publication Date Title
JP7348919B2 (ja) 予約タグ・フィールド・ビットを使用するキャッシュ・ベースのブレークポイント・トレース/リプレイ(trace replay breakpoint)
KR102645481B1 (ko) 상위 계층 캐시의 항목을 기반으로 하위 계층 캐시로의 유입을 로깅함으로써 트레이스 기록
KR102661543B1 (ko) 요청에 의해 캐시 유입을 상위 레벨 캐시로 로깅
US20220138084A1 (en) Recording a trace of code execution using reference bits in a processor cache
US11126536B2 (en) Facilitating recording a trace file of code execution using index bits in a processor cache
US10599541B2 (en) Efficient breakpoint detection via caches
US8473921B2 (en) Debugging mechanisms in a cache-based memory isolation system
US20110154111A1 (en) Memory Based Hardware Breakpoints
CN110431536B (zh) 实现整个数据结构上的断点
US12130725B2 (en) Memory page markings as logging cues for processor-based execution tracing
US20230342282A1 (en) Memory page markings as logging cues for processor-based execution tracing
JP6058015B2 (ja) ランタイム・インスツルメンテーション放出(riemit)命令を実行するためのコンピュータ・プログラム・プロダクト、方法、およびコンピュータ・システム(ランタイム・インスツルメンテーション・コントロール放出命令)

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220606

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230519

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230524

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230802

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230908

R150 Certificate of patent or registration of utility model

Ref document number: 7348919

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150