JP7334163B2 - 上位レベルキャッシュへの要求によるキャッシュへのインフラックスのログ記録 - Google Patents

上位レベルキャッシュへの要求によるキャッシュへのインフラックスのログ記録 Download PDF

Info

Publication number
JP7334163B2
JP7334163B2 JP2020537480A JP2020537480A JP7334163B2 JP 7334163 B2 JP7334163 B2 JP 7334163B2 JP 2020537480 A JP2020537480 A JP 2020537480A JP 2020537480 A JP2020537480 A JP 2020537480A JP 7334163 B2 JP7334163 B2 JP 7334163B2
Authority
JP
Japan
Prior art keywords
cache
logging
line
cache line
logged
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
JP2020537480A
Other languages
English (en)
Other versions
JPWO2019164730A5 (ja
JP2021515287A (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
Priority claimed from US15/904,072 external-priority patent/US10496537B2/en
Application filed by マイクロソフト テクノロジー ライセンシング,エルエルシー filed Critical マイクロソフト テクノロジー ライセンシング,エルエルシー
Publication of JP2021515287A publication Critical patent/JP2021515287A/ja
Publication of JPWO2019164730A5 publication Critical patent/JPWO2019164730A5/ja
Application granted granted Critical
Publication of JP7334163B2 publication Critical patent/JP7334163B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3476Data logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • 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/0808Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
    • 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/3024Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3065Monitoring arrangements determined by the means or processing involved in reporting the monitored data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/885Monitoring specific for caches

Landscapes

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

Description

ソフトウェアアプリケーションの開発中にコードを書く際に、開発者はコードを「デバッグ」してランタイムエラー及び他のソースコードエラーを見つけるのに通常かなりの量の時間を費やす。その際に、開発者はソースコードのバグを再現して特定するためにいくつかの取り組み、例えば、異なる入力に基づいたプログラムの挙動を観察する、(変数値を表示するため、実行の分岐を追跡するため、などで)デバッグ用のコードを挿入する、一時的にコードの一部を除去する、などを行うことがある。ランタイムエラーを見つけ出してコードのバグを特定することは、アプリケーションの開発時間のかなりの部分を占めることがある。
多くの種類のデバッグ用アプリケーション(「デバッガ」)がコードのデバッグプロセスで開発者を支援するために開発されてきた。これらのツールは開発者にコンピュータコードの実行をトレースし、視覚化し、変更する能力を提供する。デバッガは、数ある中でも例えば、コード命令の実行を視覚化すること、コード実行中の様々な時間におけるコードの変数値を提示すること、開発者がコード実行経路を変更できるようにすること、並びに/又は、開発者が着目するコード要素に対して(実行中にリードを行うとコードの実行を停止させる)「ブレークポイント」及び/若しくは「ウォッチポイント」を設定できるようにすることができる。
新しく出現した形態のデバッグ用アプリケーションでは、「タイムトラベル」デバッグ、「リバース」デバッグ、又はデバッグ「履歴」が可能となる。「タイムトラベル」デバッグにより、プログラム(例えばスレッドなどの実行可能なエンティティ)の実行が、トレースアプリケーションにより1つ又は複数のトレースファイルへと記録/トレースされる。そして、こうしたトレースファイルを使って、順方向分析及び逆方向分析のためにプログラムの実行を後で再生できる。例えば、「タイムトラベル」デバッガにより、開発者は(従来のデバッガのように)順方向のブレークポイント/ウォッチポイント、及び逆方向のブレークポイント/ウォッチポイントを設定できる。
トレースファイルの記録時には、いくつかの検討事項が考慮されうる。最も顕著なものでは、記録されるトレースデータのロバストネスとプログラムをトレースすることにより発生するオーバーヘッドの間にトレードオフが内在することである。このトレードオフは、主にトレースファイルのファイルサイズ及びトレースされたプログラムの実行時の性能への影響として現れる。さらに、トレースはハードウェアによる支援を受けて(又は完全にソフトウェアで)遂行されうるため、ハードウェア設計及び他のハードウェアコストの検討事項が存在することもある。
本明細書に記載の実施形態は、プロセッサによるハードウェア的支援を使って、ビットアキュレートな「タイムトラベル」トレース記録を作成する仕組みを対象としている。この仕組みは、複数の処理ユニットでの実行結果を2つ以上の階層又は層のプロセッサキャッシュを使ってトレースすることに基づいている。一つの仕組みでは、トレースされた処理ユニットによる活動に基づいて内側又は「下位層(lower layer)」のプロセッサキャッシュへのインフラックス(influx)が検出された場合(すなわちキャッシュミス)に、1つ又は複数の外側又は「上位層(upper layer)」の共有プロセッサキャッシュを確認してそのインフラックスのデータが別のトレースされた処理ユニットの為に既にログに記録されているかを判定するように、プロセッサのハードウェア及び/又はマイクロコードを変更する。別の仕組みでは、1つ又は複数のキャッシュ層が、下位キャッシュ層からログ記録要求を受信し、ログに記録されたキャッシュラインについての知識を使って下位キャッシュ層へのインフラックスが(仮にあったとして)どのようにログに記録されるべきかを判断するように構成されるように、プロセッサのハードウェア及び/又はマイクロコードを変更する。どちらか一方の仕組みによって、以前のログエントリを参照してインフラックスをログ記録できるようになる可能性があり、それぞれの仕組みはレベルNのキャッシュまで拡張することもできる。どちらか一方の仕組みを使ってトレースファイルを記録することにはわずかなプロセッサ変更が必要となることがあり、従来のトレース記録手法と比べた場合に、トレース記録の性能への影響及びトレースファイルのファイルサイズの両方について数桁分を低減させることができる。
第1実施形態は、複数の処理ユニット、複数のレベルNキャッシュ、及びレベル(N+i)キャッシュを備えるコンピュータデバイスを対象としている。レベル(N+i)キャッシュは複数のレベルNキャッシュのうちの2つ以上と関連付けられており、複数のレベルNキャッシュに対するバッキングストアとして構成される。この実施形態では、コンピュータデバイスは、複数のレベルNキャッシュのうちの第1レベルNキャッシュへのインフラックスを検出するようにコンピュータデバイスを構成する制御論理を含み、この実施形態ではインフラックスはあるメモリロケーションに記憶されるデータを含む。また、制御論理は、レベル(N+i)キャッシュを確認してこのメモリロケーションのデータが第2処理ユニットの為に以前ログに記録されているかを判定するようにコンピュータデバイスを構成する。また、制御論理は、この確認に基づいて(i)第2処理ユニットの為に以前ログに記録されたログデータを参照して(すなわち、そのメモリロケーションのデータが第2処理ユニットの為に以前ログに記録されている場合)、そのメモリロケーションのデータを第1処理ユニットの為にログに記録する、又は(ii)そのメモリロケーションのデータを第1処理ユニットの為に値でログに記録する(すなわち、そのメモリロケーションのデータが第2処理ユニットの為に以前ログに記録されていない場合)、の一方を実行するようにコンピュータデバイスを構成する。
第2実施形態は、複数の処理ユニット及び複数のキャッシュ層に配列された複数のキャッシュを備えるコンピュータデバイスを対象としている。複数のキャッシュは、第1キャッシュ層の中に複数の第1キャッシュ、及び第2キャッシュ層の中に1つ又は複数の第2キャッシュを含む。第2キャッシュ層の中の特定の第2キャッシュは、少なくとも第1キャッシュ層の中の特定の第1キャッシュに対するバッキングストアとして機能する。この実施形態では、コンピュータデバイスは、特定の第1キャッシュから特定のメモリアドレスを参照するログ記録要求を受信するように少なくとも特定の第2キャッシュを構成する制御論理を含む。要求に基づいて、この特定の第2キャッシュは、メモリアドレスに対応するキャッシュラインがこの特定の第2キャッシュに存在するかどうかを判定する。特定の第2キャッシュにそのキャッシュラインが存在しない場合、第2キャッシュは、(i)ログ記録に関与し、少なくとも特定の第2キャッシュに対するバッキングストアとして機能する第3キャッシュが存在しない場合はそのキャッシュラインをログに記録する、又は(ii)第3キャッシュが存在する場合は要求を第3キャッシュへ転送する、のどちらかを行う。
キャッシュラインが特定の第2キャッシュに存在する場合、第2キャッシュは、(i)キャッシュラインがログに記録されるべきではないとこの特定の第2キャッシュが判定している場合、若しくはログに記録されるべきであるとこの特定の第2キャッシュにより判定されているが特定の第2キャッシュのキャッシュラインに記憶された現在の値を第1キャッシュが認識していないと特定の第2キャッシュが判定した場合に、キャッシュラインをログに記録する、又は(ii)キャッシュラインがログに記録されるべきであるとこの特定の第2キャッシュにより判定されていて特定の第2キャッシュのキャッシュラインに記憶された現在の値を第1キャッシュが認識していると判定される場合にキャッシュラインをログに記録する必要はないと判定する、のいずれかを行う。
本明細書に記載の実施形態のいずれも、コンピュータデバイス(例えばマイクロプロセッサなど)により実行される方法、及び/又はハードウェア記憶装置上に記憶されて方法を実行するために実行可能であるコンピュータ実行可能命令(例えばプロセッサのマイクロコード)として実装することもできる。
この概要は、「発明を実施するための形態」において以下でさらに説明される概念から選択したものを簡略化した形で紹介するために設けられている。この概要は、特許請求されている主題の重要な特徴又は本質的な特徴を特定することを意図しておらず、特許請求されている主題の範囲の決定を支援するために使用されることも意図していない。
本発明の、上で列挙された利点及び特徴並びに他の利点及び特徴を得ることができる方法を説明するため、上記で簡潔に記載した本発明を添付の図面で示されるその特定の実施形態を参照してより詳細に説明する。これらの図面は本発明の典型的な実施形態を示しているに過ぎず、それゆえその範囲を制限していると考えられるべきではないことを理解した上で、添付の図面を使用して、本発明を更なる特異性及び詳細とともに説明する。
複数の処理ユニットでの実行の「ビットアキュレート」なトレースの記録を2つ以上の階層又は層のプロセッサキャッシュを使って容易にする例示のコンピューティング環境を示す。 多層キャッシュを備えるコンピューティング環境の例を示す。 キャッシュの例を示す。 1つ又は複数の上位レベルのキャッシュの知識に基づいて以前のログデータを参照して下位レベルのキャッシュへのインフラックスを記録することに基づく、例示のトレース記録方法のフローチャートを示す。 各キャッシュラインが1つ又は複数の追加のアカウンティングビットを含む共有キャッシュの例を示す。 従来のキャッシュラインへ適用されるアカウンティングビットを格納する、1つ又は複数の予約されたキャッシュラインを含む共有キャッシュの例を示す。 システムメモリとキャッシュの間のセットアソシアティブマッピングの例を示す。 下位キャッシュ層によるログ記録要求に基づき、下位キャッシュ層がインフラックスをどのようにログに記録すべきかを上位キャッシュ層が判断する例示の方法のフローチャートを示す。 処理ユニットがログ記録が有効化された状態からログ記録が無効化された状態へ遷移する際にキャッシュラインのログ記録状態を管理する例示の方法のフローチャートを示す。 ログ記録が無効化された処理ユニットが書き込みを行うために親キャッシュから独占的にキャッシュラインを受領する際にキャッシュラインのログ記録状態を管理する例示の方法のフローチャートを示す。 処理ユニットが「所有された」キャッシュコヒーレンシプロトコル状態で利用したキャッシュラインへ書き込む際にキャッシュラインのログ記録状態を管理する例示の方法のフローチャートを示す。
本明細書に記載の実施形態は、プロセッサによるハードウェア的支援を使って、ビットアキュレートな「タイムトラベル」トレース記録を作成する仕組みを対象としている。この仕組みは、複数の処理ユニットでの実行結果を2つ以上の階層又は層のプロセッサキャッシュを使ってトレースすることに基づいている。一つの仕組みでは、トレースされた処理ユニットによる活動に基づいて内側又は「下位層」のプロセッサキャッシュへのインフラックス(すなわちキャッシュミス)が検出された場合に、1つ又は複数の外側又は「上位層」の共有プロセッサキャッシュを確認してそのインフラックスのデータが別のトレースされた処理ユニットの為に既にログに記録されているかを判定するように、プロセッサのハードウェア及び/又はマイクロコードを変更する。別の仕組みでは、1つ又は複数のキャッシュ層が、下位キャッシュ層からログ記録要求を受信し、ログに記録されたキャッシュラインについての知識を使って、下位キャッシュ層へのインフラックスが(仮にあったとして)どのようにログに記録されるべきかを判断するように構成されるように、プロセッサのハードウェア及び/又はマイクロコードを変更する。どちらか一方の仕組みによって、以前のログエントリを参照してインフラックスをログ記録できるようになる可能性があり、それぞれの仕組みはレベルNのキャッシュまで拡張することもできる。どちらか一方の仕組みを使ってトレースファイルを記録することにはわずかなプロセッサ変更が必要となることがあり、従来のトレース記録手法と比べた場合にトレース記録の性能への影響及びトレースファイルのファイルサイズの両方について数桁分を低減させることができる。
図1は、複数の処理ユニットでの実行の「ビットアキュレート」なトレースの記録を2つ以上の階層又は層のプロセッサキャッシュを使って容易にする例示のコンピューティング環境100を示す。示されているように、実施形態は例えば1つ若しくは複数のプロセッサ102、システムメモリ103、1つ若しくは複数のデータストア104、及び/又は入力/出力ハードウェア105などのコンピュータハードウェアを備える専用又は汎用のコンピュータシステム101を含みうる、又は利用しうる。
本発明の範囲内の実施形態は、コンピュータ実行可能命令及び/又はデータ構造を運ぶ、又は記憶する、物理的なコンピュータ可読媒体及び他のコンピュータ可読媒体を含む。そのようなコンピュータ可読媒体は、コンピュータシステム101によりアクセス可能な任意の利用可能な媒体とすることができる。コンピュータ実行可能命令及び/又はデータ構造を記憶するコンピュータ可読媒体は、コンピュータ記憶装置である。コンピュータ実行可能命令及び/又はデータ構造を運ぶコンピュータ可読媒体は、伝送媒体である。したがって、制限ではなく例として、本発明の実施形態は2つ以上の明確に異なる種類のコンピュータ可読媒体、すなわち、コンピュータ記憶装置及び伝送媒体を含みうる。
コンピュータ記憶装置は、コンピュータ実行可能命令及び/又はデータ構造を記憶する物理的ハードウェアデバイスである。コンピュータ記憶装置には、RAM、ROM、EEPROM、半導体ドライブ(「SSD」)、フラッシュメモリ、相変化メモリ(「PCM」)、光ディスク記憶装置、磁気ディスク記憶装置若しくは他の磁気記憶装置、又は、コンピュータ実行可能命令又はデータ構造の形態のプログラムコードを記憶するのに使用可能でコンピュータシステム101によりアクセス及び実行されて本発明の開示されている機能性を実現できる任意のハードウェアデバイスなどの、様々なコンピュータハードウェアが含まれる。したがって、コンピュータ記憶装置には、例えば後述されるように、示されているシステムメモリ103、コンピュータ実行可能命令及び/又はデータ構造を記憶可能である、示されているデータストア104、又はプロセッサ上の記憶装置などの他の記憶装置を含みうる。
伝送媒体には、コンピュータ実行可能命令又はデータ構造の形態のプログラムコードを運ぶのに使用可能でコンピュータシステム101によりアクセス可能なネットワーク及び/又はデータリンクを含むことができる。「ネットワーク」は、コンピュータシステム並びに/又はモジュール及び/若しくは他の電子デバイスの間の電子データの輸送を可能とする1つ又は複数のデータリンクと定義される。情報がネットワーク又は別の通信接続(有線、無線、又は有線若しくは無線の組み合わせのいずれか一つ)を介してコンピュータシステムへ転送される、又は提供される場合、コンピュータシステムはこの接続を伝送媒体とみなすことができる。上記の組み合わせもまた、コンピュータ可読媒体の範囲内に含められるべきである。例えば、入力/出力ハードウェア105は、コンピュータ実行可能命令又はデータ構造の形態のプログラムコードを運ぶのに使用可能なネットワーク及び/又はデータリンクを接続するハードウェア(例えばネットワークインタフェース(例えば「NIC」))を含みうる。
さらに、様々なコンピュータシステムコンポーネントへ到達すると、コンピュータ実行可能命令又はデータ構造の形態のプログラムコードは、自動的に伝送媒体からコンピュータ記憶装置へ(又は逆も同様)転送することができる。例えば、ネットワーク又はデータリンクを介して受信したコンピュータ実行可能命令又はデータ構造は、NIC(例えば入力/出力ハードウェア105)内のRAMにバッファすることができて、最終的にはシステムメモリ103及び/又はコンピュータシステム101にあるより揮発性の低いコンピュータ記憶装置(例えばデータストア104)へ転送することができる。したがって、伝送媒体も同様に(あるいは主に)利用するコンピュータシステムコンポーネントには、コンピュータ記憶装置を含むことができると理解されたい。
コンピュータ実行可能命令は、例えばプロセッサ102で実行された場合にコンピュータシステム101に特定の機能又は機能群を実行させる命令及びデータを含む。コンピュータ実行可能命令は、例えばバイナリや、アセンブリ言語などの中間フォーマット命令、あるいはソースコードでありうる。
本発明は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、携帯機器、マルチプロセッサシステム、マイクロプロセッサベースの家電製品若しくはプログラム可能な家電製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、携帯電話、PDA、タブレット、ポケットベル、ルータ、スイッチ、及び同種のものを含む多くの種類のコンピュータシステム構成を有するネットワークコンピューティング環境において実践されうることを当業者は理解するであろう。また、本発明は、ネットワークを介して(有線データリンク、無線データリンク、又は有線データリンクと無線データリンクの組み合わせのいずれか一つにより)つながっているローカルのコンピュータシステムとリモートのコンピュータシステムの両方がタスクを実行する分散システム環境でも実践されうる。それゆえ、分散システム環境において、コンピュータシステムは構成要素である複数のコンピュータシステムを含みうる。分散システム環境では、プログラムモジュールはローカルの記憶装置及びリモートの記憶装置の両方に置かれることがある。
本発明はクラウドコンピューティング環境においても実践されうることを当業者は理解するであろう。クラウドコンピューティング環境は分散させることができるが、これは必要ではない。クラウドコンピューティング環境は、分散される場合、一組織内で国際的に分散されている、及び/又はコンポーネントが多数の組織にわたって所有されていることがある。本明細書及び以下の請求の範囲において、「クラウドコンピューティング」は、構成可能なコンピューティングリソース(例えば、ネットワーク、サーバ、ストレージ、アプリケーション、及びサービス)の共用プールへのオンデマンドでのネットワークアクセスを可能とするためのモデルとして定義される。「クラウドコンピューティング」の定義は、適切に配置された場合にそのようなモデルから得ることができる他の数々の利点のいずれかに限定されるものではない。
クラウドコンピューティングモデルは、オンデマンドセルフサービス(on-demand self-service)、幅広いネットワークアクセス(broad network access)、リソースの共用(resource pooling)、スピーディな拡張性(rapid elasticity)、サービスが計測可能であること(measured service)、などの様々な特徴から構成されうる。また、クラウドコンピューティングモデルは、例えばソフトウェア・アズ・ア・サービス(「SaaS」)、プラットフォーム・アズ・ア・サービス(「PaaS」)、及びインフラストラクチャ・アズ・ア・サービス(「IaaS」)などの様々なサービスモデルの形態で提供されうる。クラウドコンピューティングモデルは、プライベートクラウド、コミュニティクラウド、ハイブリッドクラウドなどの異なる実装モデルを使って配置することもできる。
クラウドコンピューティング環境などの一部の実施形態は、それぞれが1つ又は複数の仮想マシンを実行可能な1つ又は複数のホストを含むシステムを含みうる。稼働している間、仮想マシンは使用可能なコンピューティングシステムをエミュレートして、オペレーティングシステムと、おそらく1つ又は複数の他のアプリケーションもサポートする。一部の実施形態では、各ホストは仮想マシンの視点から抽象化された物理リソースを使って仮想マシン用の仮想リソースをエミュレートするハイパーバイザを備える。また、ハイパーバイザは仮想マシン間に適切な分離を提供する。したがって、任意の所与の仮想マシンの観点では、仮想マシンは物理リソースの外観(例えば仮想リソース)だけとインタラクションを行っているにも関わらず、ハイパーバイザは仮想マシンが物理的リソースとインタラクションを行っているという錯覚をもたらす。処理能力、メモリ、ディスク空き容量、ネットワーク帯域、媒体駆動装置などを含む物理リソースの例。
図1は、プロセッサ102の内部ハードウェアコンポーネントの簡略化された表現を含む。示されるように、各プロセッサ102は複数の処理ユニット102aを備える。各処理ユニットは、物理的(すなわち、物理プロセッサコア)、及び/又は論理的(すなわち、ハイパースレッディングをサポートする物理コアによりもたらされる、物理コアで2つ以上のアプリケーションスレッドが実行される論理コア)でありうる。したがって、例えば、一部の実施形態ではプロセッサ102が単一の物理処理ユニット(コア)のみを備えることがあるが、プロセッサ102はその単一の物理処理ユニットによりもたらされる2つ以上の論理処理ユニット102aを備えることもできる。
各処理ユニット102aは、アプリケーション(例えば、トレーサ104a、デバッガ104b、オペレーティングカーネル104c、アプリケーション104dなど)により規定される、予め規定されたプロセッサ命令セットアーキテクチャ(ISA)から選択されたプロセッサ命令を実行する。各プロセッサ102の特定のISAは、プロセッサの製造者及びプロセッサのモデルに基づいて異なる。共通のISAとして、INTEL, INC.のIA-64及びIA-32アーキテクチャ、ADVANCED MICRO DEVICES, INC.のAMD64アーキテクチャ、及びARM HOLDINGS, PLCの種々のAdvanced RISC Machine(「ARM」)アーキテクチャが挙げられるが、数多くの他のISAが存在し、本発明で使用可能である。概して、「命令」は、外部から見える(すなわち、プロセッサの外部にある)プロセッサで実行可能なコードの最小単位である。
各処理ユニット102aは1つ又は複数のプロセッサキャッシュ102bからプロセッサ命令を取得し、キャッシュ102b内のデータに基づいて、及び/若しくはレジスタ102d内のデータに基づいて、並びに/又は入力データなしで、プロセッサ命令を実行する。概して、各キャッシュ102bは、システムメモリ103及び/又はキャッシュ102bの中の別のキャッシュなどのバッキングストアの一部の、プロセッサ上のコピーを記憶する、小さな容量の(すなわち、典型的なシステムメモリ103の容量と比較して小さい)ランダムアクセスメモリである。例えば、アプリケーションコード103aを実行する場合、1つ又は複数のキャッシュ102bはアプリケーションランタイムデータ103bの一部を含む。処理ユニット102aが特定のキャッシュ102bにまだ記憶されていないデータを要求した場合は「キャッシュミス」が発生し、当該データがシステムメモリ103又は別のキャッシュからフェッチされ、キャッシュ102bからいくらかの他のデータを「追い出す」可能性がある。
しばしば、プロセッサキャッシュ102bは、第1層(L1)、第2層(L2)、第3層(L3)などの別々の階層、層、又はレベルに分けられる。プロセッサの実装によっては、階層はプロセッサ102自体の一部(例えばL1やL2)とすることができて、及び/又はプロセッサ102から分離する(例えばL3)ことができる。したがって、図1のキャッシュ102bはこれらの層のうちの1つ(L1)を含むことがあり、又はこれらの層を複数(例えばL1及びL2、そしてさらにL3)含むことがある。こうした概念をさらに理解するため、図2Aは例示の環境200を示し、多層キャッシュを明示している。図2Aには、2つのプロセッサ201a及び201b(例えば、それぞれが図1の異なるプロセッサ102に対応する)と、システムメモリ202(例えば、図1のシステムメモリ103に対応する)がある。例示の環境200では、各プロセッサ201は4つの物理処理ユニット(すなわち、プロセッサ201aに対するユニットA1~A4及びプロセッサ210bに対するユニットB1~B4)を備える。
また、例示の環境200は各処理ユニット201の中に3層のキャッシュ階層を含む。環境200は配置例の一つに過ぎず、本明細書における実施形態が機能しうるキャッシュ階層を限定するものではない。環境200では、最も下位の層、又は最も内側の層で、各処理ユニットが専用のL1キャッシュ(例えば、プロセッサ201aの中のユニットA1に対するL1キャッシュ「L1-A1」、プロセッサ201aの中のユニットA2に対するL1キャッシュ「L1-A2」、など)と関連付けられている。層を一つ上に上がると、各処理ユニット201は2つのL2キャッシュ(例えば、プロセッサ201aの中のL1キャッシュ、L1-A1及びL1-A2に対するバッキングストアとして機能するL2キャッシュ「L2-A1」、プロセッサ201aの中のL1キャッシュ、L1-A3及びL1-A4に対するバッキングストアとして機能するL2キャッシュ「L1-A2」、など)を備える。そして、最も上位の層、又は最も外側の層で、各処理ユニット201は単一のL3キャッシュ(例えば、プロセッサ201aの中のL2キャッシュ、L2-A1及びL2-A2に対するバッキングストアとして機能するL3キャッシュ「L3-A」、プロセッサ201bの中のL2キャッシュ、L2-B1及びL2-B2に対するバッキングストアとして機能するL3キャッシュ「L3-B」)を備える。示されるように、システムメモリ202はL3キャッシュ、L3-A及びL3-Bに対するバッキングストアとして機能する。
図2Aに明示されているように、多数のキャッシュ層が使用される場合、処理ユニット102aは典型的には最下位層(L1)と直接インタラクションを行う。ほとんどの場合、データは層の間を流れる(例えば、読み出しではL3キャッシュはシステムメモリ103とインタラクションを行い、データをL2キャッシュへ供給し、同様にL2キャッシュはデータをL1キャッシュへ供給する)。処理ユニット102aが書き込みを行う場合、キャッシュは協調して、影響されるデータを保持し、処理ユニット102aの間で共有されていたキャッシュがそのデータをもはや保持しないようにする。この協調は、CCPを使って行われる。
したがって、環境200におけるキャッシュは、「共有」キャッシュとみなすことができる。例えば、各L2キャッシュ及び各L3キャッシュは、所与のプロセッサ201の中の多数の処理ユニットのために機能し、したがって処理ユニットにより共有されている。また、所与のプロセッサ201の中のL1キャッシュも、それぞれが単一の処理ユニットに対応しているものの、個々のL1キャッシュは整合性を確保するため(すなわち、キャッシュされたメモリロケーションのそれぞれがすべてのL1キャッシュにわたって一貫しているとみなされるように)互いに(すなわちCCPを介して)協調しうるので、集合的に共有されていると考えることができる。同様に、各プロセッサ201の中のL2キャッシュは、CCPを介して協調することができる。さらに、プロセッサ201がハイパースレッディングをサポートしていれば、個々のL1キャッシュはそれぞれ、2つ以上の論理処理ユニットにより共有されているとみなすことができて、したがって個々のレベルにおいても「共有」されている。
典型的には、各キャッシュは複数の「キャッシュライン」を含む。各キャッシュラインはそのバッキングストア(例えば、システムメモリ202又は上位層のキャッシュ)から一塊のメモリを格納する。例えば、図2Bは複数のキャッシュライン206を含むキャッシュ203の少なくとも一部の例を示し、キャッシュライン206のそれぞれはアドレス部204と値部205を含む。各キャッシュライン206のアドレス部204は、キャッシュラインが対応するシステムメモリ202内のアドレスを記憶するように構成され、値部205は当初はシステムメモリ202から受信した値を記憶する。値部205は処理ユニットにより変更することができて、最終的にはバッキングストアへ追い出すことができる。省略記号で示されるように、キャッシュ203は多数のキャッシュラインを含むことができる。例えば、現代のインテル製64ビットプロセッサは、個々が512本以上のキャッシュラインを含むL1キャッシュを含みうる。そのようなキャッシュにおいて、各キャッシュラインは6バイト(48ビット)から8バイト(64ビット)のメモリアドレスを参照して64バイト(512ビット)の値を記憶するのに通常使うことができる。図2Aに視覚的に示されているように、キャッシュサイズは典型的にはそれぞれの層と共に大きくなる(すなわち、L2キャッシュは通常はL1キャッシュより大きく、L3キャッシュは通常はL2キャッシュより大きい、など)。
各キャッシュライン206のアドレス部204に記憶されたアドレスは、システムメモリ202の中の実際のメモリアドレスなどの物理アドレスでありうる。あるいは、アドレス部204に記憶されたアドレスは、(例えばオペレーションシステムが管理するページテーブルを使って)物理アドレスへマッピングして抽象化されたアドレスである仮想アドレスでありうる。そのような抽象化は、例えばプロセッサ102で実行されている異なるプロセスの間で、ユーザーモードプロセスとオペレーティングシステムカーネル104bと関連付けられたカーネルモードプロセスの間での隔離を含むメモリの隔離を容易にするのに使うことができる。仮想アドレスが使用される場合、プロセッサ102はトランスレーションルックアサイドバッファ(TLB)102f(通常はメモリ管理ユニット(MMU)の一部)を含むことができて、TLB102fは物理アドレスと仮想アドレスの間の最近使用されたメモリアドレスマッピングを維持する。
キャッシュ102bは、コードキャッシュ部及びデータキャッシュ部も含みうる。アプリケーションコード103aを実行した場合、キャッシュ102bのコード部はアプリケーションコード103aに格納されたプロセッサ命令の少なくとも一部を記憶することができて、キャッシュ102bのデータ部はアプリケーションランタイムデータ103bのデータ構造の少なくとも一部を記憶することができる。さらに、キャッシュは包括的又は排他的とすることができて、あるいは包括的な振る舞い及び排他的な振る舞いの両方を含みうる。例えば、包括的キャッシュでは、L3層は典型的にはその下にあるL2層の中のデータのスーパーセットを記憶し、L2層はその下にあるL1層のスーパーセットを記憶する。排他的キャッシュでは、層は別々となっていることがあり、例えばL1キャッシュが必要なデータがL3キャッシュに存在する場合に、これらのキャッシュがデータやアドレス、及び同種のものなどの情報を交換することがある。
図1に戻ると、各プロセッサ102は、プロセッサ102の動作を制御し、プロセッサ102により実行中のアプリケーションへさらされるプロセッサISAとプロセッサのハードウェアの間のインタプリタとして通常機能する制御論理(すなわち実行可能命令)を含むマイクロコード102cも含む。マイクロコード102は、典型的にはROMやEEPROMなどのプロセッサ上の記憶装置として具現化される。
レジスタ102dは、プロセッサ102のISAに基づき規定され、プロセッサ命令により読み出し、及び/又は書き込みが行われるハードウェアベースの格納先である。例えば、レジスタ102dは通常、キャッシュ102bからフェッチされた値を命令で使用するために記憶する、命令を実行した結果を記憶する、及び/又は、命令を実行した副作用(例えば、変化する値の符号、ゼロへ達する値、桁上げの発生、など)のいくつかのような状況又は状態やプロセッサのサイクル数などを記憶するために使用される。したがって、一部のレジスタ102dは、実行中のプロセッサ命令により生じた何らかの状態変化を示唆するために使用される「フラグ」を含みうる。また、一部の実施形態ではプロセッサ102は制御レジスタを備えることがあり、このレジスタはプロセッサの動作の異なる側面を制御するのに使用される。図1はレジスタ102dを一つの箱として示しているが、各処理ユニット102aは、典型的にはその処理ユニットに特有の1つ又は複数の対応するレジスタ102dの組を備えることが理解されるであろう。
一部の実施形態では、プロセッサ102は1つ又は複数のバッファ102eを含みうる。本明細書で後述されるように、バッファ102eはトレースデータの一時的な格納先として使うことができる。したがって、例えば、プロセッサ102はトレースデータの一部をバッファ102eに記憶して、このデータを適切な時期、例えば利用可能なメモリバス帯域幅及び/又は空いているプロセッササイクルがある場合などにトレースデータストア104eへ掃き出すことができる。
上で示唆したように、プロセッサは1つ又は複数のCCPに従ってキャッシュ102bに対して作用する。概して、CCPは、様々な処理ユニット102aがデータを様々なキャッシュ102bから読み出し/キャッシュ102bへ書き込みする際に様々なキャッシュ102bの間でデータ間の整合性が維持される方法、及び、様々な処理ユニット102aがキャッシュ102bの中の所与のロケーションから常に有効なデータを読み出すのを保証する方法を規定する。CCPはプロセッサ102のISAにより規定されるメモリのモデルに関連し、メモリのモデルを有効化する。
共通CCPの例として、MSIプロトコル(すなわち、変更状態、共有状態、及び無効状態)、MESIプロトコル(すなわち、変更状態、排他状態、共有状態、及び無効状態)、及びMOESIプロトコル(すなわち、変更状態、所有状態、排他状態、共有状態、及び無効状態)が挙げられる。これらのプロトコルのそれぞれは、キャッシュ102bの中の個々のロケーション(例えばライン)の状態を規定する。「変更」状態のキャッシュのロケーションにはキャッシュ102bの中で変更されたデータが含まれ、それゆえバッキングストア(例えばシステムメモリ103又は別のキャッシュ)の中の対応するデータとの整合性がない可能性がある。「変更」状態を有するロケーションがキャッシュ102bから追い出される場合、共通CCPはキャッシュにそのデータがバッキングストアへ書き戻されること、又は別のキャッシュがその責任を引き継ぐことを保証するように要求する。「共有」状態のキャッシュのロケーションは、バッキングストアの中のデータから変更されていない、リードオンリーの状態で存在する、処理ユニット102aにより共有されるデータを含む。キャッシュ102bは、このデータをバッキングストアへ書き込むことなく、追い出すことができる。「無効」状態のキャッシュのロケーションには有効なデータはなんら含まれず、空の状態であるとみなすことができて、キャッシュミスのデータを記憶するのに使うことができる。「排他」状態のキャッシュのロケーションはバッキングストアと一致するデータを含み、単一の処理ユニット102aのみによって使用される。このキャッシュのロケーションは、いつでも(すなわち、読み出し要求に応じて)「共有」状態へと変更しうる、又は書き込みの際に「変更」状態へと変更しうる。「所有」状態のキャッシュのロケーションは2つ以上の処理ユニット102aによって共有されているが、処理ユニットのうちの一つが変更を行う排他的権利を有する。その処理が変更を行う場合、他の処理ユニットはCCPの実装に基づいて自分のキャッシュを無効化する、又は更新する必要がある可能性があるため、他の処理ユニットに通知することがある。
データストア104は、アプリケーションプログラムを表すコンピュータ実行可能命令、例えばトレーサ104a、デバッガ104b、オペレーティングシステムカーネル104c、アプリケーション104d(例えばトレーサ104aによってトレースされる対象であるアプリケーション)を記憶することができる。これらのプログラムが(例えばプロセッサ102を使って)実行される場合、システムメモリ103はランタイムデータ構造、コンピュータ実行可能命令などの対応するランタイムデータを記憶することができる。したがって、図1はシステムメモリ103を(例えば、それぞれがアプリケーション104gに対応する)アプリケーションコード103a及びアプリケーションランタイムデータ103bを含んでいるものとして示している。データストア104はさらに、1つ又は複数のトレースデータストア104eの中に記憶されるトレースデータなどのデータ構造を記憶することができる。省略記号104fで示されるように、データストア104は他のコンピュータ実行可能命令及び/又はデータ構造も記憶することができる。
トレーサ104aは、1つ又は複数のエンティティ、例えばアプリケーション104d又はカーネル104cの1つ又は複数のスレッドの実行のビットアキュレートなトレースの記録、及びトレースデータのトレースデータストア104eへの記憶に使うことができる。一部の実施形態ではトレーサ104aはスタンドアローンのアプリケーションであり、他の実施形態ではトレーサ104aはカーネル104c、ハイパーバイザ、クラウドファブリックなどの別のソフトウェアコンポーネントへ組み込まれる。トレースデータストア104eがデータストア104の一部であるものとして示されているが、トレースデータストア104eは少なくとも部分的にシステムメモリ103の中、キャッシュ102bの中、バッファ102eの中、又は何らかの他の記憶装置にあるものとして具現化できる。
既に述べたように、トレーサ104aは1つ又は複数のエンティティの実行のビットアキュレートなトレースを記録する。本明細書で使用される場合、「ビットアキュレートな」トレースは、1つ又は複数の処理ユニット102aで以前実行されたコードを再生できるようにするのに充分なデータを含むトレースであり、再生時にはトレース中と実質的に同一の方法でコードが実行される。トレーサ104aがビットアキュレートなトレースを記録するのに使用しうる様々な手法があるが、それぞれに(例えばトレースのオーバーヘッド、トレースファイルのファイルサイズ、必要となるプロセッサへの変更の量などの点で)様々な利益と欠点がある。そのようなデータを記録するための一部の特定の実施形態は、図3~9に関連して後述される。
トレーサ104aにより使用される記録の手法に関わらず、トレーサ104aはトレースデータを1つ又は複数のトレースデータストア104eへ記録することができる。例として、トレースデータストア104eは、1つ若しくは複数のトレースファイル、システムメモリ103の1つ若しくは複数の領域、プロセッサキャッシュ102bの1つ若しくは複数の領域(例えばL2キャッシュ又はL3キャッシュ)、プロセッサ102の中のバッファ102d、又はこれらの任意の組み合わせ若しくは多数を含みうる。トレースデータストア104eは1つ又は複数のトレースデータストリームを含むこともできる。一部の実施形態では、例えば多数のエンティティ(例えばプロセスやスレッドなど)をそれぞれトレースして、別々のトレースファイル又は所与のトレースファイル内のトレースデータストリームとすることもできる。あるいは、各エンティティに対応するデータパケットを、当該エンティティに対応するものとして識別されるようにタグ付けすることもできる。多数の関連するエンティティ(例えば同一プロセスの複数のスレッド)がトレースされている場合、各エンティティに対するトレースデータを別々にトレースすることもできる(これによりトレースデータを個別に再生できる)が、それらのエンティティにわたって順序付け可能な任意のイベント(例えば、共有メモリへのアクセス)を個々のトレースにわたってグローバルな連続番号(例えば単調にインクリメントされる数字)で識別することができる。トレースデータストア104eは、トレースデータストリームを柔軟に管理、変更、及び/又は作成するために構成することができる。例えば、既存のトレースデータストリームの変更には既存のトレースファイルの変更、既存のファイル内のトレースデータの一部の置き換え、及び/又は変更を含む新しトレースファイルの作成が含まれうる。
一部の実装では、トレーサ104aは、トレースデータがトレース中に絶えず増えるように、トレースデータストリームに連続的にアペンドしていくことができる。しかし、他の実装では、トレースデータストリームを1つ又は複数のリングバッファとして実装することもできる。そのような実装では、最も古いトレースデータは、新しいトレースデータがトレースデータストア104eへ追加される際にデータストリームから取り除かれる。それゆえ、トレースデータストリームがバッファとして実装される場合、トレースデータストリームはトレースされたプロセスで一番最近に実行された連続したトレースを含む。リングバッファを使用することで、トレーサ104aが生産システムにおいてもトレースを「常に行っている(always on)」ようにすることができる。一部の実装では、トレースは事実上いつでも、1つ又は複数の制御レジスタの中で1つ又は複数のビットを設定又は消去することなどによって、有効化及び無効化できる。それゆえ、リングバッファへトレースするのか、過去のトレースデータストリームへアペンドするのかに関わらず、トレースデータは処理ユニット102aのうちの1つ又は複数に対してトレースが有効化された複数の期間の間の欠落部も含みうる。
デバッガ104bは、ユーザがトレースデータ(又はその派生物)に対してデバッグ活動を行うのを支援するため、トレーサ104aにより生成されてトレースデータストア104eへ入れられたトレースデータを消費する(例えば、再生する)のに使うことができる。例えば、デバッガ104bは1つ又は複数のデバッグ用インタフェース(例えばユーザインタフェース及び/又はアプリケーションプログラミングインタフェース)を提示し、アプリケーション104dの1つ又は複数の部分の以前の実行を再生して、逆方向ブレークポイント/ウォッチポイントを含むブレークポイント/ウォッチポイントを設定して、トレースデータに対するクエリ/検索などが行えるようにすることもできる。
トレーサ104aに戻ると、本明細書の実施形態では、トレーサ104aはプロセッサ102のキャッシュ102bを利用して、アプリケーション104d及び/又はオペレーティングシステムカーネル104cの実行のビットアキュレートなトレースを効率的に記録する。こうした実施形態は、プロセッサ102(キャッシュ102bを含む)が準閉鎖系又は疑似閉鎖系を形成するという本発明者による観察に基づいている。例えば、あるプロセスのデータ(すなわち、コードデータ及びランタイムアプリケーションデータ)の一部がキャッシュ102bへロードされると、プロセッサ102は、入力がなくても準閉鎖系又は疑似閉鎖系として短期間は独力で動作することができる。具体的には、キャッシュ102bにデータがロードされると、処理ユニット102aのうちの1つ又は複数が、キャッシュ102bのデータ部に記憶されたランタイムデータ及びレジスタ102dを使って、キャッシュ102bのコード部にある命令を実行する。
処理ユニット102aが情報のインフラックスをいくらか必要とする場合(例えば、処理ユニット102aが実行する命令により、キャッシュ102bにまだないコード又はランタイムデータへのアクセスが行われる、又は行われうるために)、「キャッシュミス」が発生し、当該情報がシステムメモリ103からキャッシュ102bへ持ち込まれる。例えば、実行される命令がアプリケーションランタイムデータ103b内のメモリアドレスにおいてメモリ操作を行う際にデータキャッシュミスが発生すると、そのメモリアドレスからのデータがキャッシュ102bのデータ部のキャッシュラインのうちの一つへと持ち込まれる。同様に、命令によりシステムメモリ103に記憶されたメモリアドレスアプリケーションコード103aにおいてメモリ操作が行われる際にコードキャッシュミスが発生すると、そのメモリアドレスのコードがキャッシュ102bのコード部のキャッシュラインのうちの一つへと持ち込まれる。そして処理ユニット102aはキャッシュ102bの中の新しい情報を使って、(例えば、別のキャッシュミス又はキャッシュされていない読み出しのために)また新しい情報がキャッシュ102bへと持ち込まれるまで実行を継続する。
また、本発明者は、アプリケーションの実行のビットアキュレートな表現を記録するために、処理ユニットがアプリケーションのスレッドを実行する際にトレーサ104aは充分なデータを記録してキャッシュ102bへの情報のインフラックスを再現できることに気づいた。例えば、こうしたインフラックスを記録する一手法は、処理ユニットごとに、最も内側のキャッシュ層(例えばL1)において機能する。この手法は、トレースされている各処理ユニットに対して、当該処理ユニットのL1キャッシュに関連するすべてのキャッシュミス及びキャッシュされていない読み出し(すなわち、ハードウェアコンポーネント及びキャッシュ不能メモリからの読み出し)を、(例えば、実行される命令の数又は何か他の計数器を使って)各データが処理ユニットのL1キャッシュへ持ち込まれる実行中の時間と共に記録することを含みうる。複数の処理ユニットにわたって順序付けできるイベント(例えば、共有メモリへのアクセス)がある場合は、これらのイベントは、(例えば、データストリームにわたって単調にインクリメントされる数(MIN)(又はデクリメントされる数)を使って)結果として生じるデータストリームにわたってログ記録することができる。
しかし、L1キャッシュ層はそれぞれが(例えば、図2Aに示されるような)異なる物理処理ユニットに関連付けられた多数の別々のL1キャッシュを含みうるため、このように記録することで重複データが記録されて、「完全に忠実な」トレースに厳密に必要なものより多くのデータが記録されることがある。例えば、多数の物理処理ユニットが同一のメモリロケーションから読み出しを行う場合(これはマルチスレッドのアプリケーションでは頻繁に起こりうる)、この手法では同一のメモリロケーションに対するキャッシュミスと多数の物理処理ユニットのそれぞれに対するデータをログに記録することができる。特筆すべきことに、本明細書で使用される場合、「完全に忠実な」トレースとは、トレースされたエンティティの完全な再生ができるようにするのに充分な情報を含む任意のトレースであるが、特定の「完全に忠実な」トレースは、実際には代替のトレース手法を使って記録されうるものよりも少ない、同一の情報を包含するデータを含みうる。
トレースファイルのファイルサイズをさらに小さくするため、本発明者は、上位層のキャッシュのうちの1つ又は複数を利用して、この重複データの少なくとも一部の記録を回避する、改良された記録手法を開発した。それどころか、この改良された手法では、以前ログに記録されたデータを参照してログに記録する、又は多くの状況でログへの記録を完全に回避することができる。
1つ又は複数の上位キャッシュ層の知識をプロセッサが確認することに基づく下位キャッシュ層でのキャッシュミスのログ記録
第1実施形態では、プロセッサは第1処理ユニットによる活動(特定のメモリアドレスからの読み出しなど)に基づいて内側の、又は「下位層」のプロセッサキャッシュ(例えばL1)へのインフラックス(すなわちキャッシュミス)を検出し、1つ又は複数の外側の、又は「上位層」の共有プロセッサキャッシュを確認して、同一データ(すなわち、同一のメモリアドレス及び第1処理ユニットにより読み出されたのと同じ値)のインフラックスがトレースされた第2処理ユニットの為に既にログに記録されているかを判定する。既にログに記録されている場合、可能であればプロセッサは第2処理ユニットによる以前のインフラックスを参照して、第1処理によりこの最近のインフラックスをログに記録することができる。
これらの実施形態を理解するため、ほとんどの環境では、上位層のキャッシュはその下にある下位層のキャッシュよりも大きく、しばしば多数の下位層のキャッシュに対するバッキングストアとなっていることに留意されたい。例えば、図2Aの例示の環境では、各L2キャッシュは2つのL1キャッシュに対するバッキングストアであり、各L3キャッシュは2つのL2キャッシュ(そして、さらに言うと4つのL1キャッシュ)に対するバッキングストアである。したがって、上位層のキャッシュは、多数の下位層のキャッシュに関する知識を保持することができる(例えば図2Aでは、L2キャッシュL1-A1はL1キャッシュ、L1-A1及びL1-A2に関する知識を保持することができて、L2キャッシュL1-A2はL1キャッシュ、L1-A3及びL1-A4に関する知識を保持することができて、L3キャッシュL3-AはL2キャッシュ、L2-A1及びL2-A1、並びにL1キャッシュ、L1-A1、L1-A2、L1-A3、及びL1-A4に関する知識を保持することができる)。1つ又は複数の上位キャッシュ層の知識を利用することで、本明細書の実施形態は、別の処理ユニットの為に既にログに記録されているインフラックスを参照して、多くの機会で一つの処理ユニットにより引き起こされたインフラックスをログに記録することができる。
この第1実施形態に従い、図3は、1つ又は複数の上位レベルのキャッシュの知識に基づいて以前のログデータを参照して下位レベルのキャッシュへのインフラックスを記録することに基づく、例示のトレース記録方法300を示す。図3は、図1及び図2の文脈で説明される。
具体的には、図3は、複数の処理ユニット、複数のレベルNキャッシュ、及び複数のレベルNキャッシュのうちの2つ以上と関連付けられ、複数のレベルNキャッシュに対するバッキングストアとして構成されるレベル(N+i)キャッシュを備えるプロセッサ102又は201aなどの環境において機能する。方法300(及び請求項)において、N及びiは正の整数、すなわちN≧1であり、そのためNは1、2、3などと等しく、i≧1であり、そのためiは1、2、3などと等しい。例えば、図2Aのプロセッサ201aを参照すると、プロセッサは複数の処理ユニットA1、A2などを備える。また、プロセッサ201aは複数のレベルNキャッシュ、L1-A1、L1-A2など(すなわち、Nは1と等しい)も備える。また、プロセッサ201aは、複数のレベルNキャッシュのうちの2つ以上と関連付けられ、複数のレベルNキャッシュに対するバッキングストアとして構成されるレベル(N+i)キャッシュを備える。例えば、プロセッサ201aは、レベルNキャッシュ、L1-A1やL1-A2などに対するバッキングストアであるレベル(N+i)キャッシュL2-A1(すなわち、Nは1と等しく、iは1と等しい)を備える。別の例では、プロセッサ201aは、レベルNキャッシュ、L1-A1やL1-A2などに対するバッキングストアであるレベル(N+i)キャッシュL3-A(すなわち、Nは1と等しく、iは2と等しい)を備える。プロセッサ102/201aは、マイクロコード102cなどの制御論理及び/又は回路論理に基づいて、方法300を動作させる。
示されるように、方法300は、第1処理ユニットでの実行中にレベルNキャッシュへのインフラックスを検出する活動301を含む。一部の実施形態では、活動301は、メモリロケーションに記憶されるデータを含む、複数のレベルNキャッシュのうちの第1レベルNキャッシュへのインフラックスを検出することを含む。例えば、処理ユニットA1による、(例えば、アプリケーション104cの第1スレッドの正常な実行又は投機的実行に起因する)システムメモリ202に対して要求されたメモリアクセスなどの活動に基づいてキャッシュミスがキャッシュL1-A1(すなわち、Nは1と等しい)で発生することがある。それゆえ、キャッシュL1-A1のラインは、要求されたメモリロケーションの当時の最新の値を含む、データのインフラックスを取得する。キャッシュの属性(例えば、どのような上位レベルの層が存在するか、キャッシュアーキテクチャが包括的と排他的のいずれであるか、など)及び現在のキャッシュ状態に応じて、インフラックスをシステムメモリ202又は上位レベルのキャッシュ(例えば、L2-A1及び/又はL3-A)から供給することができる。
また、方法300は、レベル(N+i)キャッシュを確認することでインフラックスのデータが第2処理ユニットでの実行に基づいて既にログに記録されているかを判定する活動302も含む。一部の実施形態では、活動302は、第1レベルNキャッシュへのインフラックスの検出に基づいてレベル(N+i)キャッシュを確認し、メモリロケーションのデータが第2処理ユニットの為に以前ログに記録されているかどうかを判定することを含む。例えば、レベル(N+i)キャッシュがレベル(N+1)キャッシュを含むように、iが1と等しい場合、プロセッサ201はL2-A1(キャッシュL1-A2及び処理ユニットA2の知識を有する)などのL2キャッシュを確認することができる。この確認は、メモリロケーションのデータが処理ユニットA2の為に以前ログに記録されていたかどうかを判定するのに使うことができる。このデータは、例えばキャッシュL1-A2においてキャッシュミスを引き起こした、処理ユニットA2でのアプリケーション104cの第2スレッドの以前の実行に基づいて、以前ログに記録されていることがある。別の例では、レベル(N+i)キャッシュがレベル(N+2)キャッシュを含むように、iが2と等しい場合、プロセッサ201はキャッシュL3-A(プロセッサ201の中のすべての他のキャッシュの知識を有する)などのL2キャッシュを確認することができる。この確認は、(例えば、キャッシュL1-A2、L1-A3、及び/又はL1-A4においてキャッシュミスを引き起こした、処理ユニットA2~A4のうちの1つ又は複数でのアプリケーション104cの1つ又は複数のスレッドの以前の実行に基づいて)メモリロケーションのデータが処理ユニットA2~A4のいずれかの為に以前ログに記録されていたかどうかを判定するのに使うことができる。なお、2番目の例では、L2キャッシュは確認時に飛ばされることがある。
示されるように、活動302は、iの値をその都度インクリメントして任意の回数繰り返すこともできる。典型的にはiは都度1だけインクリメントされるが、1より大きい正の整数だけiをインクリメントする実施形態もありうる。iをインクリメントしながら活動302を繰り返す効果は、多数の上位レベルのキャッシュを確認するためである。例えば、i=1であれば、活動302が最初に行われる際にプロセッサ201はL2キャッシュ層(例えば、L2-A1及び/又はL2-A2)を確認することができる。L2キャッシュにおいて、該当するメモリロケーションに関する知識が不充分であることがわかった場合、プロセッサ201はi=2として活動302を繰り返すことで、L3キャッシュ層(例えばL3-A)を確認することができる。これは、コンピューティング環境が提供するキャッシュのレベルの数だけ繰り返すこともできる。iが1より大きい値だけインクリメントされる場合、1つ又は複数のキャッシュ層がその過程で飛ばされることがある。このようにすることは、排他的キャッシュを提供するアーキテクチャ、又は包括的/排他的が混合された挙動を示すキャッシュを提供するアーキテクチャにおける多数のキャッシュレベルを確認するのに有益であることが理解されるであろう。これは、こうしたアーキテクチャでは外側のキャッシュ層が内側のキャッシュ層のデータの完全なスーパーセットを含むという保証がされないことがあるからである。
上述したことを考慮すると、プロセッサ102又は201aなどの、iが1と等しく、レベル(N+i)キャッシュがレベル(N+1)キャッシュを含み、プロセッサがレベル(N+1)キャッシュに対するバッキングストアとして構成されるレベル(N+2)キャッシュも備える環境において、方法300は機能できることが理解されるであろう。これらの環境では、レベル(N+1)キャッシュを確認してメモリロケーションのデータが第2処理ユニットの為に以前ログに記録されているかどうかを判定すること(すなわち活動302)は、レベル(N+1)キャッシュにそのメモリロケーションに対応するキャッシュラインがないと判定することを含むことができる。さらに、レベル(N+2)キャッシュを確認してそのメモリロケーションのデータが第2処理ユニットの為に以前ログに記録されているかどうかを判定すること。
示されるように、活動302の結果に基づき、方法は、データが既にログに記録されている場合は参照によりインフラックスをログに記録する活動303を含み、データがまだログに記録されていない場合はインフラックスを値でログに記録する活動304を含む。
一部の実施形態では、活動303は、メモリロケーションのデータが第2処理ユニットの為に以前ログに記録されている場合に、第2処理ユニットの為に以前ログに記録されたログデータを参照して第1処理ユニットの為にそのメモリロケーションのデータをログに記録することを含む。上記の例に続いて、例えば、レベル(N+1)キャッシュL2-A1の確認、及び/又はレベル(N+2)キャッシュL3-Aの確認によって、データ/メモリロケーションが処理ユニットA2の為に(キャッシュL1-A2へのインフラックスに基づいて)既にログに記録されていたと判定される場合、プロセッサ201aはキャッシュL1-A1へのインフラックスを、処理ユニットA2に対して作成されたログエントリを参照して処理ユニットA1の為にログに記録することができる。参照によるログ記録がどのように遂行されうるかの例は後述される。
活動302の別の結果を検討すると、一部の実施形態では、活動304は、メモリロケーションのデータが第2処理ユニットの為に以前ログに記録されていない場合にそのメモリロケーションのデータを第1処理ユニットの為に値でログに記録することを含む。例えば、レベル(N+1)キャッシュL2-A1の確認、及び/又はレベル(N+2)キャッシュL3-Aの確認によって、データ/メモリロケーションが別の処理ユニットの為にまだログに記録されていないと判定される場合、プロセッサ201aはキャッシュL1-A1へのインフラックスを、処理ユニットA1の為に値でログに記録することができる。値でログに記録することには、例えば、処理ユニットA1に対するデータパケットにおけるメモリアドレス及びメモリの値をログに記録することを含みうる。なお、値でログに記録することには、実際のログ記録を遂行するのに必要なビット数を減少させるために任意の数の圧縮手法を含みうる。
図1に関連して説明されたように、プロセッサ102はトレースデータを一時的に記憶するのに使用可能なバッファ102eを備えうる。したがって、方法300において、異なる種類のデータをログに「記録する」ことには、プロセッサ102がそのようなデータをバッファ102eへ記憶することも含むことができる。さらに、又はあるいは、プロセッサ102がそのようなデータをトレーサ104aへ伝えること、そのようなデータをトレースデータストア104eへ書き込むこと、及び/又はデータがバッファ102d内で利用可能であるとトレーサ104aに通知することも含むことができる。一部の実施形態では、バッファ102dはキャッシュ102bの1つ又は複数の予約部を含むこともできる。したがって、活動304/304においてバッファ102eを使ってメモリロケーションのデータを参照又は値のどちらかにより第1処理ユニットの為にログに記録することには、プロセッササイクル、メモリロケーション、バス帯域幅などのリソースの利用可能性に基づいてログ記録を遅延させることを含むこともできる。バッファ102dがキャッシュ102bの1つ又は複数の予約部を含む実施形態では、遅延ログ記録(遅延ロギング)は、(レベルNキャッシュ及び/又はレベル(N+i)キャッシュの中の)キャッシュラインを、遅延ログ記録を目的としてメモリロケーションのデータを保持するために、追い出すのではなく無効化することを含むこともできる。
方法300の説明では、下位層のキャッシュに関する「知識」を有する上位層のキャッシュについて言及した。上位層のキャッシュが下位レベルのキャッシュに関して保持する特定の形態の「知識」は異なることがあり、以下に例を続ける。
基本的に、この「知識」は下位レベルのキャッシュの中のキャッシュラインに対応する上位レベルのキャッシュの中のキャッシュライン(すなわち、同一のメモリロケーション及びメモリデータに対応するキャッシュライン)の存在に過ぎないことがある。上述したように、包括的キャッシュでは、上位層はその下の層にあるデータのスーパーセットを記憶する。例えば、図2Aのキャッシュが包括的であるとする。この場合、処理ユニットA2の活動によってロケーションがシステムメモリ202からキャッシュL1-A2へインポートされると、同一のメモリロケーションがキャッシュL2-A1及びL3-Aにもキャッシュされる。処理ユニットA2の活動がトレースされている場合、実施形態によってメモリロケーション及びその値が処理ユニットA2の為にログに記録されることがある。その後、処理ユニットA1の活動によって同一のロケーションがシステムメモリ202からキャッシュL1-A1へインポートされ、そのロケーションがいまだに同一のデータを記憶している場合は、そのデータは、キャッシュL2-A1が既にそのデータを保有しているため、キャッシュL2-A1から供給される。この場合でも、先の手法により、このデータがキャッシュL2-A1へのインフラックスであることに基づいて処理ユニットA1のためにログに記録することができる。しかし、本明細書の実施形態では、代わりにメモリロケーション及びその値が既にキャッシュL2-A1に存在し、したがって既にキャッシュL1-A2に存在すると認識することができる。処理ユニットA2はログに記録されているため、実施形態では、メモリロケーション及びその値が処理ユニットA2の為に既にログに記録されていているであろうと認識することができて、そのため処理ユニットA2の為に以前記録されたログデータを参照して、処理ユニットA1のこの新しい活動をログに記録することができる。
上位層のキャッシュによる、より精巧な形態の「知識」も可能である。例えば、実施形態では1つ又は複数のキャッシュ層の中のキャッシュラインを、追加の「アカウンティング」(又はログ記録)ビットであってアカウンティングビットが実装されたキャッシュラインのそれぞれに対してそのキャッシュラインが(潜在的にはキャッシュラインをログに記録した処理ユニットの素性と共に)ログに記録されているかどうかをプロセッサ102が識別できるようにするアカウンティングビットで拡張することができる。この概念の理解のため、図4Aは図2Bの共有キャッシュ203と類似した共有キャッシュの例400Aを示し、キャッシュライン404のそれぞれは1つ又は複数の追加のアカウンティングビット401を含む。したがって、各キャッシュライン404は、アカウンティングビット401、並びに従来のアドレスビット402及び値ビット403を含む。
あるいは、図4Bは、メモリアドレス402及び値403を記憶する従来のキャッシュライン405と、従来のキャッシュライン405へ適用されるアカウンティングビットを格納するための1つ又は複数の予約されたキャッシュライン406とを含む共有キャッシュ400bの例を示す。予約されたキャッシュライン406のビットは、それぞれが従来のキャッシュライン405のうちの異なる一つに対応する、異なるグループのアカウンティングビットへ割り当てられる。
図4Bの例の変形では、予約されたキャッシュライン406はセットアソシアティブキャッシュ(以降でより詳細に記述される)の各インデックスにおいて1つ(又は複数)のウェイとして予約することもできる。例えば、8ウェイ・セットアソシアティブキャッシュでは、セット内の1つのウェイはそのセット内の他の7つのウェイに適用されるアカウンティングビット用に予約することもできる。これにより、予約されたキャッシュラインの実装の複雑性を減らすことができて、所与のセット内のすべてのウェイが典型的にはほとんどのプロセッサで並列に読み出されるため、予約されたキャッシュラインへのアクセスを速くすることができる。
アカウンティングビットが実際にどのように格納されるかに関わらず、各キャッシュラインのアカウンティングビット401は、プロセッサ102により使用されてキャッシュライン内の現在の値が処理ユニットの為にログに記録されたかどうか(あるいは、ログ記録に関与する処理ユニットにより消費されたかどうか)を示すフラグ(すなわち、オン又はオフ)として機能する1つ又は複数のビットを含むこともできる。したがって、活動302における確認には、キャッシュラインがログ記録に関与する処理ユニットによりログに記録されているかを判定するのにこのフラグを使うことを含むことができる。
あるいは、各キャッシュラインのアカウンティングビット401は複数ビットを含むこともできる。複数ビットはいくつかのウェイで使用することもできる。本明細書で「ユニットビット」と呼ばれる一手法を使うことで、各キャッシュラインのアカウンティングビット401は、プロセッサ102の処理ユニット102aの個数(例えば、プロセッサ102がハイパースレッディングをサポートする場合は論理処理ユニットの個数、又はハイパースレッディングがサポートされない場合は物理処理ユニットの個数)と等しい数のユニットビットを含むことができる。これらのユニットビットは、どの1つ又は複数の特定の処理ユニットがキャッシュライン(もしあれば)をログに記録したかをプロセッサ102が追跡するのに使うことができる。したがって、例えば2つの処理ユニット102aによって共有されるキャッシュは、2つのユニットビットを各キャッシュラインと関連付けることができる。
本明細書で「インデックスビット」と呼ばれる、複数のアカウンティングビット401を使用する別の手法では、各キャッシュラインのアカウンティングビット401は、コンピュータシステム101のプロセッサ102のログ記録に関与する処理ユニット102aのそれぞれに対するインデックスを表すのに充分な数のインデックスを、潜在的に「予約された」値(例えば、-1)と共に含むことができる。例えば、プロセッサ102が128個の処理ユニット102aを含む場合、これらの処理ユニットは、キャッシュラインあたり7つのインデックスビットだけを使って、インデックス値(例えば、0~127)で識別することができる。一部の実施形態では、一つのインデックス値はキャッシュラインをログに記録したプロセッサがないことを示す(例えば、「無効」)ために予約されている。したがって、これは、7つのインデックスビット127個の処理ユニット102aに加えて予約された値を実際に表すことができることを意味する。例えば、二進数値0000000~1111110はインデックスのロケーション0~126(10進数)に対応することがあり、二進数値1111111(例えば、10進数では解釈に応じて-1又は127)は、対応するキャッシュラインをログに記録したプロセッサがないことを示す「無効」に対応することがあるが、この表記法は実装によっては異なることがある。したがって、ユニットビットは、プロセッサ102がキャッシュラインがログに記録されているか(例えば、-1以外の値)を示すのに使うことができて、キャッシュラインをログに記録した特定の処理ユニット(例えば、一番最近にそのキャッシュラインを消費した処理ユニット)に対するインデックスとして使うことができる。複数のアカウンティングビット401の使用に関するこの第2の手法は、キャッシュ102bにおいてわずかなオーバーヘッドで多数の処理ユニットをサポートできるという利点があり、第1の手法よりも粒度が劣る(すなわち、一度にたった一つの処理ユニットのみが識別される)という欠点がある。
上述したことを考慮すると、活動302において、レベル(N+i)キャッシュを確認してメモリロケーションのデータが第2処理ユニットの為に以前ログに記録されているかを判定することが、そのメモリロケーションに対応するレベル(N+i)キャッシュの中のキャッシュラインが1つ又は複数のアカウンティングビットの組を有しているかを判定することも含むことができることが理解されるであろう。
キャッシュラインがログに記録されているかどうかを判定するのに使用可能な別の仕組みは、セットアソシアティブキャッシュ及びウェイのロックを利用することである。プロセッサのキャッシュ102bは通常、システムメモリ103より(しばしば数桁の差で)はるかに小さいため、システムメモリ103内には通常、キャッシュ102bの所与の層の中のラインよりもはるかに多くのメモリロケーションがある。それゆえ、一部のプロセッサではシステムメモリの多数のメモリロケーションを1つ又は複数のキャッシュ層の中のラインへマッピングするための仕組みを規定している。プロセッサは通常、2つの一般的手法、すなわち、ダイレクトマッピング方式とアソシアティブ(又はセットアソシアティブ)マッピング方式のうちの1つを採用する。ダイレクトマッピング方式を使うことで、システムメモリ103内の異なるメモリロケーションがキャッシュ層の中のただ一つのラインへマッピングされ、それぞれのメモリロケーションをその層の中の特定のラインへキャッシュすることができる。
一方、セットアソシアティブマッピング方式を使うことで、システムメモリ103内の異なるロケーションをキャッシュ層の中の多数のラインのうちの1つへキャッシュすることができる。図5は、システムメモリとキャッシュの間のセットアソシアティブマッピング方式の例500を示す。ここで、キャッシュ層502のキャッシュライン504は、それぞれ2つのキャッシュラインの異なるセットへと論理的に分割され、2つのキャッシュライン504a及び504b(インデックス0として識別される)の第1セットと、2つのキャッシュライン504c及び504d(インデックス1として識別される)の第2セットを含む。セット内の各キャッシュラインは異なる「ウェイ」として識別されて、キャッシュライン504aはインデックス0、ウェイ0で識別され、キャッシュライン504bはインデックス0、ウェイ1で識別される。さらに示されているように、メモリロケーション503a、503c、503e、503g(メモリインデックス0、2、4、6)はインデックス0へマッピングされる。それゆえ、システムメモリ内のこれらのロケーションのそれぞれは、インデックス0のセット内の任意のキャッシュライン(すなわち、キャッシュライン504a及び504b)へキャッシュすることができる。示されているマッピングの特定のパターンは例証及び概念的な説明だけを目的としており、メモリインデックスをキャッシュラインへマッピングしうるただ一つの方法と解釈されるべきではない。
セットアソシアティブキャッシュは通常、Nウェイ・セットアソシアティブキャッシュと呼ばれ、Nは各セット内の「ウェイ」の個数である。したがって、図5のキャッシュ500は、2ウェイ・セットアソシアティブキャッシュと呼ばれるであろう。プロセッサは通常、Nウェイ・キャッシュを実装しており、Nは2の累乗(例えば、2、4、8など)であり、4及び8のN値が通常選ばれる(ただし、本明細書の実施形態はいかなる特定のN値又はN値のサブセットにも限定されない)。特筆すべきことに、1ウェイ・セットアソシアティブキャッシュは、各セットがたった一つのキャッシュラインを含むため、通常ダイレクトマッピングされたキャッシュに相当する。さらに、Nがキャッシュの中のラインの個数に等しい場合、キャッシュの中のすべてのラインを含む単一のセットが含まれるため、フルアソシアティブキャッシュと呼ばれる。フルアソシアティブキャッシュでは、任意のメモリロケーションをキャッシュの中の任意のラインへキャッシュすることができる。
図5は、一般的原理を示すためにシステムメモリ及びキャッシュの略図を表していることに留意されたい。例えば、図5では個々のメモリロケーションをキャッシュラインへマッピングしているが、キャッシュの中の各ラインは、システムメモリ内の多数のアドレス可能なロケーションに関するデータを記憶しうることが理解されるであろう。したがって、図5では、システムメモリ(501)内のそれぞれのロケーション(503a~503h)は実際に複数のアドレス可能なメモリロケーションを表しうる。さらに、システムメモリ501内の実際の物理アドレスとキャッシュ502の中のラインの間でマッピングを行うことができて、又は、マッピングに仮想アドレスの中間層を使うことができる。
セットアソシアティブキャッシュは、キャッシュラインがウェイのロックを使ってログに記録されているかどうかを判定するのに使うことができる。ウェイのロックにより、キャッシュの中の1つ又は複数のウェイが何らかの目的でロック又は予約される。具体的には、本明細書の実施形態は、ウェイのロックを利用してトレースされている処理ユニット用に1つ又は複数のウェイを予約し、ロック/予約されたウェイがそのユニットの実行に関連するキャッシュミスを記憶するために独占的に使用される。したがって、図5を再び参照すると、「ウェイ0」がトレースされた処理ユニット用にロックされた場合、キャッシュライン504a及び504c(すなわち、インデックス0、ウェイ0及びインデックス1、ウェイ0)はそのユニットの実行に関連するキャッシュミスのために独占的に使用され、残りのキャッシュラインはすべての他のキャッシュミスのために使用されることになる。したがって、特定のキャッシュラインがログに記録されているかどうかを判定するには、プロセッサ102は、「N+1」キャッシュ層に格納されるキャッシュラインがトレースされた処理ユニット用に予約されたウェイの一部であるかどうかを判定するだけでよい。
上述したことを考慮すると、活動302において、レベル(N+i)キャッシュを確認してメモリロケーションのデータが第2処理ユニットの為に以前ログに記録されているかを判定することが、そのメモリロケーションに対応するレベル(N+i)キャッシュの中のキャッシュラインがログ記録された処理ユニットに対応するウェイに格納されているかを判定することも含むことができることが理解されるであろう。
既に説明されたように、キャッシュはCCPに従って動作し、CCPは処理ユニットがキャッシュデータから読み出し、及びキャッシュデータへ書き込みを行う際に様々なキャッシュの間で整合性を維持する方法、及び処理ユニットがキャッシュの中の所与のロケーションから常に有効なデータを読み出すのを確実にする方法を規定する。それゆえ、キャッシュを動作させるのに関連して、プロセッサ102はCCP状態データを維持、記憶する。異なるプロセッサ及び/又は異なるCCPがキャッシュコヒーレンシの状態を追跡し、そのキャッシュコヒーレンシのデータをトレーサ104aへ提供する粒度は、異なることがある。一方で、例えば、一部のプロセッサ/CCPはキャッシュラインごとのキャッシュコヒーレンシ及び処理ユニットごとのキャッシュコヒーレンシを追跡する。それゆえ、これらのプロセッサ/CCPは各キャッシュラインの状態を、各処理ユニットに関連するため、追跡する。これは、単一のキャッシュラインはその状態に関する情報を、各処理ユニット102aに関連するために有していることを意味する。他のプロセッサ/CCPは粒度で劣り、キャッシュコヒーレンシの追跡はキャッシュラインのレベルのみを行う(そして処理ユニットごとのキャッシュコヒーレンシの情報を欠いている)。反対に、プロセッサの製造者は、ただ一つのプロセッサが一度にラインを独占的に(排他的に、変更されて、など)所有できるため、キャッシュコヒーレンシの追跡を効率のためにキャッシュラインのレベルのみで行うことを選ぶことがある。中程度の粒度の例として、プロセッサ/CCPはキャッシュラインごとのキャッシュコヒーレンシ及び現在のキャッシュラインの状態を有する処理ユニットに対するインデックス(例えば、4つの処理ユニットのプロセッサに対して0、1、2、3)を追跡することがある。
所与のプロセッサでCCP状態データが維持される粒度に関わらず、このCCP状態データはレベル(N+i)キャッシュがキャッシュされたデータに関して持っている「知識」に含まれうる。具体的には、レベル(N+i)キャッシュの中の所与のキャッシュラインに関連付けられたCCP状態データは、そのキャッシュラインが処理ユニットのうちの1つによりログに記録されているかを判定するのに使うことができる。例えば、CCP状態データが、特定の処理ユニットが「共有」状態で所与のキャッシュラインを利用したことを示している場合、このデータは同様に、そのキャッシュラインからの読み出しをその処理ユニットがログに記録したことを判定するのに使うことができる。したがって、活動302において、レベル(N+i)キャッシュを確認してメモリロケーションのデータが第2処理ユニットの為に以前ログに記録されているかを判定することが、そのメモリロケーションに対応するレベル(N+i)キャッシュの中のキャッシュラインがそのキャッシュラインがログに記録されていることを判定するのに使うことができる関連するCCP状態データを有しているかを判定することも含むことができることが理解されるであろう。
活動303において、データのインフラックスは以前ログに記録されたデータ(典型的には、現在のインフラックスを引き起こしたものとは異なる処理ユニットによりログに記録されたデータ)を参照してログに記録することができる。参照によりログに記録することは、様々な方法のうちの1つ又は複数(それらの組み合わせを含む)を使って遂行することができる。
第1の方法では、以前ログに記録されたメモリアドレスを参照してログに記録する。例えば、図2Aの処理ユニットA2が特定のメモリアドレス(すなわち、システムメモリ202)を表すデータ及びそのメモリアドレスに記憶される特定のデータをログに記録したとする。その後、その特定のメモリアドレス/特定のデータが処理ユニットA1に対するインフラックスである場合、処理ユニットA1は、(i)特定のメモリアドレス、及び(ii)処理ユニットA2を識別するログエントリを記憶することもできる。ここで、処理ユニットA1はそのメモリアドレスに記憶される実際のデータ(これはかなりのサイズでありうる)を再度ログに記録するのを回避した。また、第1の方法の変形の一部においては、処理ユニットA1及びA2用のデータストリームにわたってインクリメントされる系列からのMINなどの順序付けデータを記憶することもできる。このMINは、このインフラックスを処理ユニットA2での1つ又は複数のイベント(例えば、同一の系列からのMINに関連付けられているもの)に対して処理ユニットA1により後で順序付けするのに使うことができる。したがって、活動303において、第2処理ユニットの為に以前ログに記録されたログデータを参照してメモリロケーションのデータを第1処理ユニットの為にログに記録することは、そのメモリロケーションのアドレスをログに記録すること、又はそのメモリロケーションのアドレス及びMINなどの順序付けデータをログに記録することの1つ又は複数を含むこともできる。
第2の方法では、データを記憶するキャッシュラインの以前の所有者を参照してログに記録する。例えば、図2Aの処理ユニットA2がデータの第1インフラックスをログに記録したとする。また、第1インフラックスによりデータがレベル(N+i)キャッシュ(例えばL2-A1)のキャッシュラインにキャッシュされて、処理ユニットA2がキャッシュラインの所有者であると識別されたとする。その後に処理ユニットA1が同一データの第2インフラックスを引き起こした場合は、処理ユニットA1はレベル(N+i)キャッシュの中のこのキャッシュラインの所有者になることもできる。そして、処理ユニットA1はキャッシュラインの以前の所有者(すなわち、処理ユニットA2)を特定するログエントリを記憶することもできて、この結果、後でデータを得るためにA2のログエントリを使うことができる。これは、参照によりログに記録することが、キャッシュラインの以前の所有者と共にキャッシュラインの素性を記録することを含みうるということを意味する(例えば、潜在的にメモリアドレス及びメモリの値を記録するのを回避する)。したがって、活動303において、第2処理ユニットの為に以前ログに記録されたログデータを参照してメモリロケーションのデータを第1処理ユニットの為にログに記録することは、そのメモリロケーションに対応するキャッシュラインの以前の所有者として第2処理ユニットをログに記録することを含むこともできる。
第3の方法では、CCPデータを参照してログに記録する。例えば、既に述べたように、CCPは、異なる処理ユニットが読み出し及び書き込みを行うためにキャッシュラインを利用する際に、各キャッシュラインに関するキャッシュコヒーレンシ状態を記憶することができる。このデータの粒度はプロセッサの実装によって異なることがあるが、例えば、キャッシュラインが各処理ユニットに関連するため各キャッシュラインに関するキャッシュコヒーレンシ状態を追跡すること、現在のキャッシュライン状態を所有する処理ユニットに対するインデックス(例えば、0、1、2、3など)と共に各キャッシュラインのキャッシュコヒーレンシ状態を追跡すること、などもできる。第3の方法では利用可能なCCPデータを利用して、どの処理ユニットがキャッシュラインのキャッシュコヒーレンシ状態を以前所有したかを追跡し、このキャッシュコヒーレンシ状態をどの処理ユニットがキャッシュラインの値をログに記録したかを特定するのに使うことができる。これは、参照によりログに記録することが、キャッシュラインに対するCCPデータを記録することを含みうるということを意味する(例えば、この場合も潜在的にメモリアドレス及びメモリの値を記録するのを回避する)。したがって、活動303において、第2処理ユニットの為に以前ログに記録されたログデータを参照してメモリロケーションのデータを第1処理ユニットの為にログに記録することは、第2処理ユニットを参照してCCPデータをログに記録することを含むこともできる。
第4の方法では、キャッシュのウェイを参照してログに記録する。既に述べたように、セットアソシアティブキャッシュは、キャッシュラインがウェイのロックを使ってログに記録されているかどうかを判定するのに使うことができる。例えば、ウェイのロックが処理ユニットP2のために1つ又は複数のウェイを予約するのに使用され、P2がデータの第1インフラックスをログに記録するとする。また、第1インフラックスによって、レベル(N+i)キャッシュ(例えば、キャッシュL2-A1)が第1インフラックスのデータをそのウェイに関連付けられたキャッシュラインに記憶する。別の処理ユニット(例えばP1)が同一データの第2インフラックスを有している場合、レベル(N+i)キャッシュの中にこのキャッシュラインが存在していることが、P2がこのデータをすでにログに記録したことを示す。実施形態では、キャッシュラインが格納されているウェイの記録に基づきP2のログデータへの参照をログに記録することができて、この場合も潜在的にメモリアドレス及びメモリの値をログに記録するのを回避できる。また、この実施形態は、P1とP2の間でイベントを順序付けするために順序付け情報(例えばMIN)を記録するのに関連して使うことができる。したがって、活動303において、第2処理ユニットの為に以前ログに記録されたログデータを参照してメモリロケーションのデータを第1処理ユニットの為にログに記録することは、キャッシュのウェイへの参照をログに記録すること、又はキャッシュのウェイへの参照及び順序付けデータをログに記録することの1つ又は複数を含むこともできる。
第2処理ユニットによる以前のインフラックスに基づいて第1処理ユニットに対するインフラックスをログに記録することに加え、実施形態は、単一の処理ユニットによる同一データのインフラックスが多数ある場合にログ記録を削減する(及び、さらに削除する)ための最適化も含む。例えば、図2Aを参照すると、処理ユニットA1はレベルNキャッシュ(例えば、L1-A1キャッシュ)において、あるメモリロケーションの特定のデータに対するキャッシュミスを引き起こすこともできる。これに応答して、キャッシュ階層はこのデータをL1-A1キャッシュへ、また潜在的にレベル(N+i)キャッシュ(例えば、L2-A1キャッシュ及び/又はL3-Aキャッシュ)へもインポートすることができる。さらに、インフラックスは処理ユニットA1のために値でログに記録することができる。その後、このデータをL1-A1キャッシュから追い出すこともできる。こうすることで、典型的なキャッシュ環境ではデータをL2-A1キャッシュ及び/又はL3-Aキャッシュからも積極的に追い出すことができる。しかし、実施形態では、L2-A1キャッシュ及び/又はL3-Aキャッシュで追い出しを行うのではなく、これらのレベル(N+i)キャッシュのうちの1つ又は複数の中の適切なキャッシュラインを保持することもできる。したがって、方法300は、メモリロケーションに対応する第1レベルNキャッシュの中の第1キャッシュラインを追い出す一方で、そのメモリロケーションに対応するレベル(N+i)キャッシュの中の第2キャッシュラインを保持することを含むことができる。
その後、処理ユニットA1がL1-A1キャッシュにおいて同一データに対して次のキャッシュミスを引き起こした場合、レベル(N+i)キャッシュ(例えば、L2-A1キャッシュ及び/又はL3-Aキャッシュ)の中の保持されたキャッシュラインを、このデータが処理ユニットA1の為に既にログに記録されていることを判定するのに使うことができる。したがって、一部の実施形態では、この後続のキャッシュミスは処理ユニットA1による以前のログエントリを参照してログに記録される。他の実施形態では、処理ユニットA1が既にデータをそのトレース内に持っているため、この後続のキャッシュミスに対しするログエントリは完全に省略することもできる。したがって、方法300は、第1レベルNキャッシュへの後続のインフラックスの検出に基づいて、メモリロケーションに記憶されたデータも含む後続のインフラックスを、第2キャッシュラインの存在に基づき、参照によりログに記録することを含むことができる。さらに、又はあるいは、方法300は、(i)第1処理ユニットでの追加のコード実行に基づいて、第1レベルNキャッシュへのメモリロケーションに記憶されたデータも含む後続のインフラックスを検出すること、及び(ii)第1レベルNキャッシュへの後続のインフラックスの検出に基づき、また少なくとも第2キャッシュラインの存在に基づき、後続のインフラックスはログに記録する必要がないと判定することを含むことができる。
プロセッサによる1つ又は複数の上位キャッシュ層の確認に基づいて下位キャッシュ層でログ記録を行うというこの第1実施形態は、図3の方法300を実現するプロセッサ制御論理(例えば、回路及び/又はマイクロコード)として実現することもできるということが理解されるであろう。それゆえ、この実施形態を実現するプロセッサ102は、下位層(例えばL1)のキャッシュへのインフラックスを検出するプロセッサ制御論理を含むこともできて、方法300で概説したように、(潜在的に徐々に)1つ又は複数の上位層のキャッシュを確認してインフラックスを参照によりログに記録することができるか、又はさらに、そもそもインフラックスをログに記録する必要があるかを判定することもできる。
下位キャッシュ層が上位キャッシュ層へログ記録要求を送信することに基づく下位キャッシュ層でのキャッシュミスのログ記録
第2実施形態では、プロセッサは第1処理ユニットによる活動(特定のメモリアドレスからの読み出しなど)に基づいて下位層のプロセッサキャッシュ(例えばL1)へのインフラックス(すなわち、キャッシュミス)を検出し、この下位層のプロセッサキャッシュは、上位層のキャッシュがインフラックスをログに記録することを要求する、及び/又はインフラックスをどのようにログに記録すべきかを上位層のキャッシュが下位層に通知することを要求する。そして、上位層のキャッシュは、インフラックスをログに記録する必要があるか、及びどのように記録すべきか(例えば、値で、又は参照により)、及び/又はインフラックスをどのようにログに記録すべきか、を判断するのに不可欠な知識を欠いている場合に、さらに別の上位層のキャッシュ(存在する場合)へ要求を渡す。これがレベルNキャッシュまで続くことがある。
この第2実施形態を実現するプロセッサ102は、すべての上位層のキャッシュ又は少なくともログ記録プロセスに関与するすべての上位層のキャッシュに共通の(又は少なくとも非常に類似した)制御論理を実装することで、潜在的にこのようにすることもできる。一部の実装では、第2実施形態を実現するのに必要な制御論理は、第1実施形態を実現するのに必要な制御論理ほど大規模ではないことがあるが、上位レベルのキャッシュの知識を活用して下位レベルのキャッシュでのインフラックスをログに記録することに由来する同じ利点の多く(又はすべて)を提供する。さらに、ほとんどのプロセッサでは、複数のキャッシュレベルが互いの間でCCPメッセージを既に渡しているため、第2実施形態を実現するのに必要な制御論理は、潜在的に既存の制御論理に対する拡張として実装されうる。
第2実施形態に従い、図6は、下位キャッシュ層によるログ記録要求に基づき、下位キャッシュ層がどのようにインフラックスにログインするかを上位キャッシュ層が判断する例示の方法600のフローチャートを示す。方法300と同様に、方法600は複数の処理ユニット(例えば、2つ以上の処理ユニットA1~A4)及び複数のキャッシュ層に配列される複数のキャッシュを備えるプロセッサ201aを示している図2Aの例示の環境などのマイクロプロセッサ環境で実行することができる。これらのキャッシュは、第1キャッシュ層の中に複数の第1キャッシュ(例えば、キャッシュ、L1-A1~L1-A4のうちの2つ以上)、及び第2キャッシュ層の中に1つ又は複数の第2キャッシュ(例えば、キャッシュL2-A1、L2-A2のうちの1つ又は複数、又はキャッシュL3A)を含むことができる。これらのキャッシュは、少なくとも第1キャッシュ層の中の特定の第1キャッシュ(例えばL1-A1)に対するバッキングストアとして機能する第2キャッシュ層の中の特定の第2キャッシュ(例えば、キャッシュL2-A1又はキャッシュL3-A)を含むことができる。簡単にするため、方法600では、特定の第1キャッシュを「第1キャッシュ」、特定の第2キャッシュを「第2キャッシュ」と呼ぶ。マイクロプロセッサ環境は、この方法を実行するための制御論理(例えば、マイクロコード102c及び/又は回路)を含むことができる。一部の実施形態では、そのような制御論理は1つ又は複数の上位キャッシュ層(例えば、図2Aのキャッシュ層L2及び/又はL3)に実装される。
方法600は上で導入された第2キャッシュで実行され、第2キャッシュはログ記録に関与し、第2キャッシュが内側のキャッシュ層からログ記録要求を受信する活動601で始まる。一部の実施形態では、活動601は、第2キャッシュが第1キャッシュから特定のメモリアドレスを参照するログ記録要求を受信することも含みうる。例えば、L2キャッシュ層の中のキャッシュL2-A1(又は、方法600がL3キャッシュ層で実行されている場合はキャッシュL3-A)は、L1キャッシュ層の中のキャッシュL1-A1からのログ記録要求を受信することもありうる。このログ記録要求は、第1キャッシュL1-A1へのデータのインフラックスを引き起こす(例えばシステムメモリ202内の)特定のメモリアドレスに対する読み出しといった、処理ユニットA1による活動に基づくこともある。図2Aの環境では、このインフラックス内のデータはキャッシュL2-A2、キャッシュL3-A、又はシステムメモリ202から供給されうる。
この要求に基づいて、方法600は活動602へ進み、メモリアドレスに対するキャッシュラインがこのキャッシュ層に存在するかを第2キャッシュが判定する。一部の実施形態では、活動602は、この要求に基づいてメモリアドレスに対応するキャッシュラインが第2キャッシュに存在するかどうかを判定することを含むこともできる。例えば、この要求を受信したことに基づき、L2キャッシュ層の中のキャッシュL2-A1(又は、方法600がL3キャッシュ層で実行されている場合はキャッシュL3-A)は、ログ記録要求にある特定のメモリアドレスをキャッシュするキャッシュラインを含んでいるかを判定することもできる。そのようなキャッシュラインは、キャッシュ階層が包括的キャッシュを含む場合(例えば、第2キャッシュがその下のキャッシュにあるデータのスーパーセットを第1キャッシュ層に記憶する場合)は通常は存在するが、キャッシュ階層が排他的である場合、又は何らかの排他的な振る舞いを示す場合は当てはまらないことがあるということが理解されるであろう。
活動602から分岐「いいえ」(すなわち、キャッシュラインが特定の第2キャッシュに存在しない場合)を進むと、方法600は、第2キャッシュがログ記録を行う最も外側のキャッシュ層であるかを判定することもできる活動603に達する。後述されるように、活動603の結果に基づいて、方法600は第2キャッシュが、(i)ログ記録に関与し、少なくとも第2キャッシュに対するバッキングストアとして機能する(例えば、第3キャッシュ層の中の)第3キャッシュが存在しない(すなわち、活動608への経路を進む)場合にキャッシュラインをログに記録する、又は(ii)第3キャッシュが存在する(すなわち、活動606への経路を進む)場合に第3キャッシュへ要求を転送する、のいずれかを行うことを含むこともできる。
例えば、第2キャッシュがキャッシュL2-A1である場合、活動603において、第2キャッシュはキャッシュL3-Aが存在してログ記録に関与しているか(したがってL2-A1がログ記録を行う最も外側のキャッシュ層ではない)を判定することもできる。キャッシュL3-Aが存在する場合は、一部の実装では、このキャッシュは、プロセッサの現在の構成によっては、ある瞬間にはログ記録に関与することができて、別の瞬間ではログ記録に関与できないということが理解されるであろう。別の例では、第2キャッシュがキャッシュL3-Aである場合、活動603において、第2キャッシュは外側のキャッシュ層が存在せず、したがって第2キャッシュがログ記録を行う最も外側のキャッシュ層であると判定することもできる。なお、ログ記録を行うキャッシュ層の間にはログ記録を行わないキャッシュ層が介在しうる。例えば、活動603がキャッシュL2-A1により実行されていて、何らかのL4キャッシュ層が存在する場合、L3キャッシュ層はログ記録を行わないものでありえて、L4キャッシュ層はログ記録を行うものでありうる。
活動603での決定が、第2キャッシュがログ記録を行う外側のキャッシュ層ではない(すなわち、活動603からの分岐「いいえ」)、である場合、方法600は活動606へと進み、第2キャッシュはログ記録を行う次のキャッシュ層へログ記録要求を転送する。そして、方法600はその層のキャッシュで繰り返される。例えば、第2キャッシュがキャッシュL2-A1である場合、第2キャッシュはキャッシュL3-Aへ要求を転送することができて、キャッシュL3-Aは方法600を繰り返すことができる。これは、ログ記録を行うキャッシュレベルが存在するだけ拡張することができる。一部の実装では、活動606に達した場合は、ログ記録を行う次のキャッシュ層へログ記録要求を転送するのではなく、第2キャッシュ層は、ログ記録を行う次のキャッシュ層へログ記録要求を直接送信するように指示する1つ又は複数の応答メッセージを第1キャッシュへ送信することがある。
一方で、活動603での決定が、第2キャッシュがログ記録を行う最も外側のキャッシュ層である(すなわち、活動603からの分岐「はい」)、である場合、方法600は活動608へと進み、第2キャッシュはインフラックスをログに記録する。後述されるように、活動608でのログ記録は(特定の状況に応じて)値で、又は参照により行うこともできて、活動608での実際のログ記録は現在のキャッシュ層、及び/又は下位キャッシュ層で行うこともできる。
なお、活動603の決定ブロックの破線で示されるように、活動603は方法600が行われるコンピューティング環境によっては自由選択の活動でありうる。例えば、キャッシュ階層がログ記録に関与する(及び方法600を実行する)上位キャッシュ層を一つだけ含む場合、このキャッシュ層は常に、ログ記録を行う「最も外側の」キャッシュ層となる。こうした環境では活動603は必要ではないこともある。さらに、ログ記録を行うキャッシュ層が多数ある場合でも、ログ記録を行う最も外側のキャッシュ層は、自身が最も外側の層であるという生まれつきの知識を有していることがある。それゆえ、これらのいずれの場合でも、活動602における決定「いいえ」は、単純に活動608へと進むことがある。
活動602へ戻り、分岐「はい」を進むと(すなわち、キャッシュラインが第2キャッシュに存在する場合)、方法600は活動604へ達し、キャッシュラインがログに記録されているかを第2キャッシュが判定する。この判定には、キャッシュラインが第2キャッシュによりログに記録されたかどうか、又はキャッシュラインが何らかの他のキャッシュによりログに記録されたかどうか及び第2キャッシュがこのログ記録を認識しているかどうかを判定することを含むこともできる。キャッシュラインがログに記録されていること(及び、どの処理ユニットによって記録されえたか)を第2キャッシュが判定する方法は、第1キャッシュがログ記録を行う実施形態(例えば、図4A、図4B、図5に関連して説明された実施形態を含む)に関連して説明された仕組みのいずれかを頼りにすることができる。例えば、第2キャッシュは図4A、図4Bに関連して説明されたアカウンティングビット(すなわち、フラグビット、ユニットビット、及び/又はインデックスビット)を格納することもできて、第2キャッシュは図5に関連して説明されたウェイのロックを利用することもできて、及び/又は第2キャッシュはCCPデータを記憶し、CCPデータを頼りにすることもできる。
後述されるように、キャッシュラインがログに記録されるべきではないと第2キャッシュにより判定された場合、方法600は、第2キャッシュがログ記録を行う次のキャッシュ層へ要求を転送する(すなわち、活動606への経路を進む)こと、及び/又は第2キャッシュがキャッシュラインをログに記録する(すなわち、活動608への経路を進む)ことを含むこともできる。一方で、キャッシュラインがログに記録されるべきであると第2キャッシュにより判定された場合、方法600は、第1キャッシュがこのキャッシュのキャッシュラインに記憶された現在の値を認識していないと第2キャッシュが判定した場合に第2キャッシュがキャッシュラインをログに記録すること(すなわち、活動608への経路を進む)、又は、要求しているプロセッサが第2キャッシュのキャッシュラインに記憶された現在の値を認識していると判定された場合にキャッシュラインはログに記録される必要はないと第2キャッシュが判定すること(すなわち、活動609への経路を進む)、を含むこともできる。
例えば、活動604での決定が、キャッシュラインがログに記録されるべきではないと第2キャッシュにより判定された、である場合(すなわち、活動604からの分岐「いいえ」)、第2キャッシュは活動608でインフラックスをログに記録することもできて、さらにログ記録を行う外側のキャッシュ層に、そのようなものがある場合、発生するログ記録について通知することがある(すなわち、活動607)。活動607が行われる場合、キャッシュラインがログに記録されるべきではないと特定の第2キャッシュが判定している場合に活動608でキャッシュラインをログに記録することには、第3キャッシュ層が存在すると判定すること、及びキャッシュラインが特定の第2キャッシュにより値でログに記録されていると第3キャッシュに通知することを含むこともできる。なお、方法600では、活動607及び608は、並行して行われることも含み、互いに対して任意の順番で実行することができる。なお、活動607によって、方法600がログ記録を行う次のキャッシュ層で行われることもありうる。
あるいは、活動604での決定が、キャッシュラインがログに記録されるべきではないと第2キャッシュにより判定された、である場合、第2キャッシュは、活動603で第2キャッシュがログ記録を行う最も外側のキャッシュ層であるかを判定し、その結果に基づき、活動606でログ記録を行う次のキャッシュ層へ要求を転送するか、活動608でインフラックスをログに記録するか、のいずれかを行うことができることを図6は示している。本質的には、これらの代替の経路は、活動604での決定「いいえ」である場合に第2キャッシュが(i)インフラックスをログに記録して、ログ記録を行う次のキャッシュ層がある場合はそのキャッシュ層に通知する(すなわち、次の層は後で使用するためにログ記録イベントを認識している)、及び/又は(ii)インフラックスが参照によりログに記録されている、又はインフラックスはそもそもログに記録されていない、ということにつながりうる知識をログ記録を行う次の層(又はさらに上位の層)が含む可能性があるため、ログ記録を行う次の層へ要求を転送する、ことができるということを伝えている。
活動604へ戻ると、キャッシュラインがログに記録されている(すなわち、活動604からの分岐「はい」)ことを第2キャッシュが認識している場合、活動605で第2キャッシュは、ログ記録要求の原因となった処理ユニットがキャッシュラインに現在の値を保持しているかを判定する。第2キャッシュが、第1キャッシュが現在保有するものよりも新しい、要求されたメモリアドレスに対する値を持っていることがあるということが理解されるであろう。例えば、第1キャッシュがキャッシュL1-A1で、第2キャッシュがL2-A1である場合、処理ユニットA1が(例えば処理ユニットA2による活動のために)活動601でのログ記録要求につながった読み出しを実行した時点でL1-A1が保持していたものよりも新しい、特定のメモリアドレスに対する値をキャッシュL2-A2が持っていることもありうる。第1キャッシュが第2キャッシュのキャッシュラインにおける現在の値を保持していることが確実にわかっている場合(すなわち、活動605からの分岐「はい」)、第2キャッシュは活動609で何もログに記録しないことを選択することもできる(すなわち、現在の値が既にログに記録されているため)。一方で、第1キャッシュが第2キャッシュのキャッシュラインにおける現在の値を保持しているか確実にはわかっていない場合(すなわち、活動605からの分岐「いいえ」)、第2キャッシュは活動608でインフラックスをログに記録することもできて、さらにログ記録を行う外側のキャッシュ層に、そのようなものがある場合、発生するログ記録について通知することがある(すなわち、活動607)。この場合も、活動607及び608は、並行して行われることも含み、互いに対して任意の順番で実行することができる。
既に述べたように、活動608でインフラックスをログに記録することは、特定の状況に応じて、値で、又は参照により行うことができる。概して、インフラックスは、インフラックスの値がトレースに基づいて特定できない場合に(例えば、再生中のプロセッサの活動、又は以前ログに記録されたキャッシュラインのいずれかによって)値でログに記録される。インフラックスは、インフラックスの値がログに記録されたプロセッサの活動を再生することで得られる場合、又はインフラックスの値が以前ログに記録されたキャッシュラインに記憶されている場合に、参照によりログに記録することもできる。特筆すべきことに、インフラックスを参照によりログに記録することが規則に則っている可能性がある状況においても、そのインフラックスを値でログに記録することはなお規則に則っている。値でログに記録することを、例えばトレース中の処理時間を節約する、より簡単に再生されるトレースを作成する、などのために決定してもよい。したがって、活動608は、特定のメモリアドレスの値を直接ログに記録すること、及び/又は特定のメモリアドレスに対する以前のログエントリへの参照をログに記録することに基づいてキャッシュラインをログに記録することを含むこともできるということが理解されるであろう。
方法600においてログ記録を参照により行いうる一つの状況は、活動605を経由して活動608へ至った場合である(すなわち、第2キャッシュは値がログに記録されることを知っているが、要求しているプロセッサが現在の値を保持していることは確実にはわかっていない)。活動608でのログ記録は、第2キャッシュにより既にログに記録されたことがわかっている値を参照して、第1キャッシュに対して実行することもできる。例えば、キャッシュL1-A2が現在の値をログに記録しているかもしれず、キャッシュL2-A1はこのことを認識しているので、L1-A2によるログ記録を参照して、キャッシュL1-A1に対するインフラックスをログに記録することができる。
こうした場合に、他の手段を使ってコードを再生することで値を復旧できる場合に何もログに記録しないことも理解できる。例えば、処理ユニットA1による現在のインフラックスが処理ユニットA2による以前の活動に関連して既にログに記録されていることがあるので、活動608において、A2のログを参照して現在のインフラックスをログに記録することも可能である。しかし、方法600がこの時点ではA1に対して何かをログに記録することを控えている場合は、トレースはなおも正しい可能性がある。これにより、他の処理ユニットのトレースにおいて以前ログに記録された値を再生中に特定する必要があるというトレードオフとともに、トレースのサイズが削減される。
以前ログに記録された値を再生中に特定するというタスクは、ログに記録された異なる処理ユニットの間で少なくとも部分的にイベントの順序を再現できるということに依存している。以前のログに記録された値を特定するのを支援するためにトレースに含まれうるいくつかのものがある。例えば、キャッシュの追い出しをログに記録することは、A1による読み出しを遂行するのに必要な値がキャッシュA1-L1で入手できない(すなわち、追い出されたため)と再生時に判定することを助ける。したがって、この値は他の処理ユニットに対するトレースの中で検索することができる。別の例では、CCPデータをログに記録することも、A1による読み出しを遂行するのに必要な値がキャッシュA1-L1で入手できない、又はキャッシュA1-L1に存在しない、のいずれかであると再生時に判定することを助ける。したがって、この値は他の処理ユニットに対するトレースの中で検索することができる。なお、CCPデータは、現在の値をどこで探すべきかを潜在的に示しうる。別の例では、キャッシュの配置の知識は、必要なログエントリを特定するのを助けることができる。例えば、処理ユニットA1及びA2が同一のL2キャッシュ(すなわち、L2-A1)を共有していることは既知であることがある。それゆえ、まず必要なログエントリを求めてA2のトレースを探索するのは、例えばA3及びA4を求めてトレースを探索するのと対照的に、理解できるであろう。
ログ記録を参照により行いうる別の状況は、方法600が現在のキャッシュ層で実行されている場合に下位キャッシュ層が活動607で現在のキャッシュ層へ通知を送信することに基づいて活動608へ至った場合である。下位キャッシュ層はインフラックスを(値で、又は参照により)ログに記録しているであろうから、現在のキャッシュ層は下位キャッシュ層のログを参照してログ記録を行うことができる。
既に述べたように、活動608でのログ記録は現在のキャッシュ層又は下位キャッシュ層で行うこともできる。例えば、一部の実装では、第2キャッシュ層は、活動608に達した際に自らログ記録を実行するのではなく、インフラックスがログに記録されるべきであることと、どのように記録されるべきかを(すなわち、値で、又は参照により、そして参照による場合は基準ログエントリの場所を参照することで)第1キャッシュへ指示する1つ又は複数の応答メッセージを第1キャッシュへ返送することもできる。また、応答メッセージは第1キャッシュにアカウンティングビットの設定方法やCCPデータの保存方法などを指示することもできる。同様に、活動609で、第2キャッシュ層は、ログ記録が必要ないことを通知する応答メッセージを第1キャッシュへ送信することもできる。元のログ記録要求がログ記録を行う2つ以上のキャッシュ層へと伝搬していた場合、その応答メッセージがそれらの層へ逆に伝搬される、又は元の要求者へ直接返信されることがある。上述したことを考慮すると、活動608は、第1キャッシュへ特定のメモリアドレスの値を直接ログに記録するよう指示すること、又は第1キャッシュへ特定のメモリアドレスに対する以前のログエントリへの参照をログに記録するよう指示することに基づいてキャッシュラインをログに記録することを含むこともできるということが理解されるであろう。
ログ記録がどのように行われるかに関わらず、活動608は、第2キャッシュ層がログ記録を行う適切なアカウンティングビット(例えば、フラグビット、ユニットビット、又はインデックスビット)を設定すること、又はインフラックスがログに記録されたという事実を記録するために任意の適切なCCPメッセージを保存すること、を含むことができる。それゆえ、活動608でキャッシュラインをログに記録することは、特定の第2キャッシュの中でキャッシュラインに(例えば、キャッシュラインに関連付けられたアカウンティングビットを必要に応じて設定することで)ログに記録されているという印を付けることを含むことができるということが理解されるであろう。
一部の実施形態では、活動608でのログ記録には、第2キャッシュがキャッシュラインをログに記録したこと、そして場合によってはどのようにキャッシュラインをログに記録したかを1つ又は複数の下位キャッシュ層へ積極的に通知することを含むこともできる。例えば、キャッシュL2-A1が活動608でログ記録を行った場合、キャッシュL2-A1はキャッシュL1-A2からL1-A4(すなわち、ログ記録要求を出したもの以外のL1キャッシュ)のうちの1つ又は複数へ1つ又は複数のメッセージを送信してキャッシュL2-A1がキャッシュラインをログに記録したことをそれらのキャッシュに通知することもできる。この情報は、キャッシュL2-A1がキャッシュラインを値でログに記録したか、又は参照によりログに記録したかを含むことがある。キャッシュラインが参照によりログに記録される場合、キャッシュL2-A1は、元のログデータがどこに存在するかに関する情報を送信することすらできる。これに応じて、キャッシュ(例えば、L1-A2からL1-A4のうちの1つ又は複数)は、キャッシュL2-A1がどのようにキャッシュラインをログに記録したかを潜在的に含む、キャッシュL2-A1がキャッシュラインをログに記録したという事実を記録した情報を記憶することができる。この情報は、例えばこれらのL1キャッシュの中の追加のアカウンティングビットに記憶することもできる。こうして、これらのL1キャッシュのうちの一つがキャッシュラインをログに記録する必要があると後で判定を行う場合に、これらのL1キャッシュはキャッシュラインが既にログに記録されていることを前もって知ることができて、ログ記録要求を上位層のキャッシュへ送信すること、又はどのようにログ記録を行うかという質問を上位層のキャッシュへ送信することを回避できる。
特筆すべきことに、第1実施形態に関連して上述した、バッファ102(e)、及び/又は遅延ログ記録を遂行するためのキャッシュ102bの特化部分を使用するための手法のいずれもこの第2実施形態に適用可能である。それゆえ、活動608でキャッシュラインをログに記録することは、バッファ102e及び/又はキャッシュ102bの一部などのトレースバッファ内でキャッシュラインをログに記録することを含むこともできるということが理解されるであろう。
方法600ではログ記録を行う上位キャッシュ層で行われる活動に焦点を合わせてきたが、図7~9は、下位キャッシュ層(例えば、元のログ記録要求を出したL1キャッシュ層)で行いうるいくつかの例示の方法論を示す。具体的には、方法600では、キャッシュラインのログ記録状態を設定してキャッシュラインの値がログに記録されていることを示すことを含む、ログ記録を行うこと(例えば、キャッシュラインに関連付けられたアカウンティングビットを設定すること、CCPデータを記憶すること、など)に焦点を合わせていたが、これらの方法論は、このキャッシュラインの値がもはやログに記録されていない場合に、ログ記録状態を後で消去することに関する。
キャッシュは、処理ユニットに対してログ記録が有効化されている間にその処理ユニットがそのキャッシュを使ってメモリの読み出しを行ったために、ログ記録状態が設定されたキャッシュラインを含むことがある。また、キャッシュは、ログ記録状態がキャッシュラインに既に設定されているキャッシュラインを上位レベルのキャッシュから受領することがある。上述したように、キャッシュラインがログに記録されていることを上位レベルのキャッシュが積極的にキャッシュラインに通知したためにキャッシュラインのログ記録状態が設定されていることもある。キャッシュラインのログ記録状態は、処理ユニットに対してログ記録が無効化されている間にその処理ユニットがそのキャッシュラインへの書き込みを行う場合に、通常消去される。
まず、図7は、処理ユニットがログ記録が有効化された状態からログ記録が無効化された状態へ遷移する際にキャッシュラインのログ記録状態を管理する例示の方法700のフローチャートを示す。方法600のように、方法700は図2Aの例示の環境のようなマイクロプロセッサ環境で実行することができる。概して、方法700は処理ユニット(例えばA1)がログ記録を有効化されて動作した後に機能し、ログに記録された1つ又は複数のキャッシュラインを今では含むキャッシュ(例えばL1-A1)を使用する。ログに記録されたこれらのキャッシュラインのうちの一つに処理ユニットが書き込みを行う場合、方法700はこの処理ユニットに対するログ記録が現在有効化されているか、無効化されているかに応じて、このログ記録状態を保持又は消去する。
方法700は活動701で始まり、ログに記録されたという印を付けられたキャッシュラインへの書き込みを検出する。一部の実施形態では、活動701は設定されたログ記録状態を有する第1キャッシュの中のキャッシュラインへの書き込みを検出することも含むことができる。例えば、第1キャッシュはキャッシュL1-A1でありうる。このキャッシュは、処理ユニットA1によるメモリの読み出しに基づいて、(例えば必要に応じてキャッシュラインのアカウンティングビットが設定されることで)ログに記録されたという印を以前付けられたキャッシュラインを有することがある。例えば、このキャッシュラインは、方法600に関連して上述した特定のメモリアドレスに対応することもある。
次に、方法700は活動702を含み、ログ記録が有効化されているかが判定される。この文脈では、活動702は、第1キャッシュに関連付けられた処理ユニットでログ記録が有効化されている場合は、地雷を除去する。一部の実施形態では、活動702は、書き込みの検出に基づいて、特定の処理ユニットに対してログ記録が有効化されているかどうかを判定することを含むこともできる。例えば、キャッシュL1-A1に対する制御論理は、処理ユニットA1でログ記録が有効化されているかを判定できる。ログ記録が有効化されている場合(すなわち、活動702からの分岐「はい」)、キャッシュラインのログ記録状態を活動703で保持することができる。したがって、一部の実施形態では、活動703は、少なくとも特定の処理ユニットに対するログ記録が有効化されていることに基づいて、キャッシュラインのログ記録状態を保持することも含むことができる。
あるいは、ログ記録が無効効化されている場合(すなわち、活動702からの分岐「いいえ」)、キャッシュラインのログ記録状態を活動704で消去することができる。したがって、一部の実施形態では、活動は、少なくとも特定の処理ユニットに対するログ記録が無効化されていることに基づいて、キャッシュラインのログ記録状態を消去することも含むことができる。例えば、キャッシュL1-A1は、必要に応じてキャッシュラインのアカウンティングビットを消去することもできる。
示されるように、ログ記録状態を消去することに加えて、方法700はログ記録を行う次のキャッシュ層に通知することを含む。一部の実施形態では、活動705は、少なくとも特定の処理ユニットに対するログ記録が無効化されていることに基づいて、キャッシュラインのログ記録状態が消去されるべきであると1つ又は複数の第2キャッシュのうちの少なくとも一つに通知することも含むことができる。例えば、第2キャッシュのうちの一つはキャッシュL2-A1でありえて、それゆえ、キャッシュL1-A1はキャッシュL2-A1に、キャッシュラインのコピーのログ記録状態を消去するように通知することもできる。活動704及び705は、並行して行われることも含み、互いに対して任意の順番で実行することができることに留意されたい。
図6には示されていないが、これに応じて方法600は、特定の第2キャッシュがメモリアドレスにも対応する第1キャッシュの中の別のキャッシュラインが第1キャッシュの中でログに記録されていないという印を付けられていることを示すメッセージを第1キャッシュから受信することを含むこともできる。また、方法600は、このメッセージに基づいて、特定の第2キャッシュの中でキャッシュラインにログに記録されていないという印を付けることを含むこともできる。
図8は、ログ記録が無効化された処理ユニットが書き込みを行うために親キャッシュから独占的にキャッシュラインを受領する際にキャッシュラインのログ記録状態を管理する例示の方法800のフローチャートを示す。方法600及び700のように、方法800は図2Aの例示の環境のようなマイクロプロセッサ環境で実行することができる。概して、方法800は、処理ユニット(例えばA1)がログ記録を有効化されて動作している際に機能し、その親キャッシュ(例えばL2-A1及び/又はL3-A)がログ記録状態が設定されているキャッシュラインを含むキャッシュ(例えばL1-A1)を使用し、キャッシュは親キャッシュのキャッシュラインを書き込みに利用する。
方法800は活動801で始まり、ログ記録が無効化された状態で、書き込みを行うためにキャッシュは上位キャッシュにキャッシュラインを要求する。例えば、処理ユニットA1からの特定のメモリアドレスへの書き込み要求に基づいて、キャッシュミスがキャッシュL1-A1で起こりうる。その結果、キャッシュL1-A1はキャッシュL2-A1又はキャッシュL3-Aに適切なキャッシュラインのコピーを要求することができる。
一部の状況では、キャッシュL1-A1はログ記録状態が消去されたキャッシュラインを受領することがある。それゆえ、方法800は、このキャッシュが上位キャッシュからログ記録状態が消去されたキャッシュラインを独占的に受領する、活動802を含むことができる。ログ記録状態は受領したキャッシュラインで消去されていることがあり、例えばこれは、(i)上位キャッシュで設定されなかった、又は(ii)処理ユニットA1でログ記録が無効化されたことを上位キャッシュが認識して、キャッシュL1-A1にキャッシュラインを供給する際に上位キャッシュがログ記録状態を消去した、ためである。例えば、方法600は、書き込みを行うためにキャッシュラインを要求するメッセージを第1キャッシュから受信することと、少なくとも第1キャッシュに対してログ記録が無効化されていることに基づいてログに記録されていないという印を付けられているキャッシュラインを第1キャッシュへ送信すること、を含むこともできる。
他の状況では、キャッシュL1-A1はログ記録状態が設定されたキャッシュラインを受領することがある。それゆえ、方法800は、このキャッシュが上位キャッシュからログ記録状態が設定されたキャッシュラインを独占的に受領する、活動803を含むことができる。ログ記録状態は、例えば、上位キャッシュで設定されたために受領したキャッシュラインで設定されていることがある。
次に、方法800は、ログ記録がなおも無効化された状態でキャッシュがキャッシュラインへ書き込みを行う、活動804を含むことができる。例えば、キャッシュL1-A1は、処理ユニットA1からの元々の書き込み要求を適切な値をキャッシュラインへ書き込むことで完了することができる。次に、方法800は、キャッシュラインのログ記録状態が消去される活動805と、上位キャッシュがキャッシュラインのログ記録状態を消去するように通知される活動806を含むことができる。活動805は活動804と別に示されているが、キャッシュラインのログ記録状態を消去することは活動804で書き込みを行うことの必然的な一部でありうることに留意されたい。例えば、ログ記録が無効化された状態では、いかなる書き込みも、書き込み先のキャッシュラインに対するログ記録状態が消去されることにつながりうる。それゆえ、活動804と活動805の間の矢印は破線を使って示され、活動804が実際には自由選択でありうることを示している。活動806は、方法700に関連して上述した活動705と同様に動作することができる。
方法700の活動705と同様に、活動806が行われる場合、これに応じて方法600は、特定の第2キャッシュがメモリアドレスにも対応する第1キャッシュの中の別のキャッシュラインが第1キャッシュの中でログに記録されていないという印を付けられていることを示すメッセージを第1キャッシュから受信することを含むこともできる。また、方法600は、このメッセージに基づいて、特定の第2キャッシュの中でキャッシュラインにログに記録されていないという印を付けることを含むこともできる。
図9は、処理ユニットが「所有された」CCP状態で利用したキャッシュラインへ書き込む際にキャッシュラインのログ記録状態を管理する例示の方法900のフローチャートを示す。方法600~800のように、方法900は図2Aの例示の環境のようなマイクロプロセッサ環境で実行することができる。概して、方法900は、ある処理ユニットがキャッシュラインを書き込みに利用する期間内に他の処理ユニットがキャッシュラインの現在の値を要求することができる状態をCCPが提供する際に機能する。その一例は、上で導入された、MOESI CCPの「所有された」状態である。
方法900は活動901で始まり、ログ記録が無効化された状態で、キャッシュが所有された状態のキャッシュラインを変更する。例えば、処理ユニットA1はキャッシュL1-A1の中の「所有された」状態のキャッシュラインを利用した可能性がある。この間に、処理ユニットA1はそのキャッシュラインへの書き込みを行いうる。図8に関連して述べたように、キャッシュラインのログ記録状態を消去することは、ログ記録が無効化されている場合に書き込みを行うことの必然的な一部でありうる。それゆえ、方法900は、一部の実装では特別な活動が存在することがあるが、ログ記録状態を消去する特別な活動を表しているわけではない。
活動901に基づいて、方法900は、キャッシュラインのログ記録状態が他のキャッシュでも消去されるべきであると伝えるために1つ(又は複数)の活動を行うことができることを示している。活動902において、要求に基づき、キャッシュはキャッシュラインのログ記録状態を消去するように兄弟キャッシュに通知する。例えば、キャッシュL1-A1の中の所有されたキャッシュラインへ書き込みが行われた後に、キャッシュL1-A1はキャッシュL2-A2などの兄弟キャッシュからキャッシュラインの現在の値を求める要求(例えばCCPメッセージ)を受信することがある。この要求の結果、キャッシュL1-A1はキャッシュL2-A2に、対応するキャッシュライン内のログ記録状態を、もし設定されている場合は、消去すべきであると通知することができる。この通知は、キャッシュL1-A1の中のキャッシュラインの現在の値を伝えるCCPメッセージと共に、又は別のメッセージの一部として送信することもできる。
活動903において、キャッシュラインを変更することに基づき、キャッシュはキャッシュラインのログ記録状態を消去するように1つ又は複数の兄弟キャッシュに通知する。例えば、キャッシュL1-A1の中の所有されたキャッシュラインへ書き込みが行われた後に、キャッシュL1-A1は自身の兄弟キャッシュ(例えばL1-A2からL1A4)へ、そのキャッシュラインのログ記録状態を(このキャッシュラインがそれらの兄弟キャッシュに存在してログ記録状態が設定されている場合に)それらの兄弟キャッシュが消去すべきであると知らせるために通知をブロードキャスト送信することができる。したがって、活動902がログ記録状態を消去するように兄弟キャッシュに相対的に通知するのに対して、活動903は兄弟キャッシュに積極的に通知する。
活動904において、キャッシュラインを変更することに基づき、キャッシュはキャッシュラインのログ記録状態を消去するように上位キャッシュ層に通知する。例えば、キャッシュL1-A1の中の所有されたキャッシュラインへ書き込みが行われた後に、キャッシュL1-A1はキャッシュL2-A1及び/又はL3-Aなどの自身の親キャッシュへ、そのキャッシュラインのログ記録状態を(このキャッシュラインがそれらの親キャッシュに存在してログ記録状態が設定されている場合に)それらの親キャッシュが消去すべきであると知らせるために通知をブロードキャスト送信することができる。したがって、活動903と同様に、活動904は、ここでは兄弟キャッシュではなく親キャッシュへ積極的に通知する。
特筆すべきことに、一部の実装では活動902~904のうちの2つ以上を行うことがある。例えば、一実装では、書き込みが行われる場合に上位キャッシュに積極的に通知する(すなわち活動904)が、兄弟キャッシュへは受動的に通知する(すなわち活動902)のみのことがある。別の例では、一実装では、積極的に上位キャッシュ(すなわち活動904)及び兄弟キャッシュ(すなわち活動903)の両方に通知することがある。
さらに、方法700の活動705及び方法800の活動806と同様に、活動903が行われる場合、これに応じて方法600は、メモリアドレスにも対応する第1キャッシュの中の別のキャッシュラインが第1キャッシュの中でログに記録されていないという印を付けられていることを示すメッセージを特定の第2キャッシュが第1キャッシュから受信することを含むこともできる。また、方法600は、このメッセージに基づいて、特定の第2キャッシュの中でキャッシュラインにログに記録されていないという印を付けることを含むこともできる。
上位層(例えばL2、L3など)のキャッシュの知識に基づいて下位層(例えばL1)のキャッシュへのインフラックスをログに記録することは、場合によっては参照によりログ記録ができるようにしてログ記録を控えることを上回る、いくつかの利点を提供することができる。例えば、下位層は、キャッシュミスのデータが実際に処理ユニットにより消費された場合だけ、ログ記録プロセスを開始する。これにより、例えば、投機的実行に起因するキャッシュミスをログに記録するのを回避できる。さらに、下位層は、キャッシュの活動を引き起こした命令を取り下げるのと同時にログ記録を行うことができる。これにより、トレースでより精度の高いタイミングを捉えることができる。そして、下位層をログに記録する場合、ログ記録は、希望する場合は物理メモリアドレス指定ではなく仮想メモリアドレス指定に基づくことができる。特筆すべきことに、仮想メモリアドレス指定に基づいてログ記録を行う場合、複数の仮想アドレスが同一の物理アドレスへマップされる状況がありうる。こうした状況では、キャッシュは、異なる仮想アドレスを使った同一の物理アドレスへのアクセスがキャッシュミスではないと振る舞うことがある。このようなことが起こると、トレーサ104aはTLB102fからのデータをログに記録することがある。一部の実装では、仮想アドレス又は物理アドレスは、追加の識別子(例えば、仮想プロセッサID、メモリアドレスに対するセキュリティ設定など)によりさらに区別されることがある。こうした実装のうちの少なくとも一部では、キャッシュは、異なる追加の識別子を持つ(例えば、より高い、より低い、又は異なるセキュリティレベルを有する)同一のアドレスへのアクセスがキャッシュミスであると振る舞うことがある。
したがって、本明細書の実施形態は、複数の処理ユニットでの実行結果を2つ以上の階層又は層のプロセッサキャッシュを使ってトレースすることに基づいて、ビットアキュレートな「タイムトラベル」トレース記録を記録するための異なる実施形態を提供する。こうした方法でトレースファイルを記録するにはわずかなプロセッサ変更が必要となることがあり、従来のトレース記録手法と比べた場合に、トレース記録の性能への影響及びトレースファイルのファイルサイズの両方について数桁分を低減させることができる。
本発明は、本発明の趣旨又はその本質的な特徴から逸脱することなく、他の特定の形態で具現化できる。記載された実施形態は、あらゆる点で例示的に過ぎず、制限的ではないと考えられるべきである。それゆえ、本発明の範囲は、明細書本文ではなく添付の請求の範囲により示される。請求項の均等物の意味及び範囲に属するすべての変更は、本発明の範囲に包含されるものとする。

Claims (20)

  1. 複数の処理ユニットと、
    複数のキャッシュ層に配列された複数のキャッシュであって、第1キャッシュ層の中に複数の第1キャッシュ、及び第2キャッシュ層の中に1つ又は複数の第2キャッシュを含み、前記第2キャッシュ層の中の特定の第2キャッシュが少なくとも前記第1キャッシュ層の中の特定の第1キャッシュに対するバッキングストアとして機能する、複数のキャッシュと、
    制御論理であって、
    前記特定の第1キャッシュから特定のメモリアドレスを参照するログ記録要求を受信することと、
    前記要求に基づいて、前記メモリアドレスに対応するキャッシュラインが前記特定の第2キャッシュに存在するかどうかを判定することと、
    前記特定の第2キャッシュに前記キャッシュラインが存在しない場合に、
    ログ記録に関与し、少なくとも前記特定の第2キャッシュに対するバッキングストアとして機能する第3キャッシュが存在しない場合は前記キャッシュラインをログに記録する、若しくは
    前記第3キャッシュが存在する場合は前記第3キャッシュへ前記要求を転送する、
    のうちの一つを実行する、又は
    前記特定の第2キャッシュに前記キャッシュラインが存在する場合に、
    前記キャッシュラインが(i)ログに記録されるべきではないと前記特定の第2キャッシュが判定している場合、若しくは(ii)ログに記録されるべきであると前記特定の第2キャッシュにより判定されているが前記特定の第2キャッシュのキャッシュラインに記憶された現在の値を前記特定の第1キャッシュが認識していないと前記特定の第2キャッシュが判定した場合に、前記キャッシュラインをログに記録する、若しくは
    (i)前記キャッシュラインがログに記録されるべきであると前記特定の第2キャッシュにより判定されていて、(ii)前記特定の第2キャッシュの前記キャッシュラインに記憶された現在の値を前記第1キャッシュが認識していると判定される場合に、前記キャッシュラインをログに記録する必要はないと判定する、
    のうちの少なくとも一つを実行することと、
    を少なくとも実行するように少なくとも前記特定の第2キャッシュを構成する制御論理と、
    を備える、マイクロプロセッサ。
  2. 前記キャッシュラインをログに記録することは、トレースバッファ内で前記キャッシュラインをログに記録することと、
    前記特定の第2キャッシュの中で前記キャッシュラインにログに記録されているという印を付けることと、
    を含む、請求項1に記載のマイクロプロセッサ。
  3. 前記キャッシュラインをログに記録することは、
    前記第1キャッシュへ前記特定のメモリアドレスの値を直接ログに記録するよう指示すること、又は
    前記第1キャッシュへ前記特定のメモリアドレスに対する以前のログエントリへの参照をログに記録するよう指示すること、
    のうちの一つを含む、請求項1に記載のマイクロプロセッサ。
  4. 前記キャッシュラインがログに記録されるべきではないと前記特定の第2キャッシュが判定している場合に前記キャッシュラインをログに記録することは、
    前記第3キャッシュ層が存在すると判定することと、
    前記キャッシュラインが前記特定の第2キャッシュにより値でログに記録されていると前記第3キャッシュに通知することと、
    を含む、請求項1に記載のマイクロプロセッサ。
  5. 前記第1キャッシュ層はL1キャッシュ層を備え、前記第2キャッシュ層はL2キャッシュ層又はL3キャッシュ層を備える、請求項1に記載のマイクロプロセッサ。
  6. 前記制御論理は、
    前記メモリアドレスにも対応する前記第1キャッシュの中の別のキャッシュラインが前記第1キャッシュの中でログに記録されていないという印を付けられていることを示すメッセージを前記第1キャッシュから受信することと、
    前記メッセージに基づいて、前記特定の第2キャッシュの中で前記キャッシュラインにログに記録されていないという印を付けることと、
    も行うように少なくとも前記特定の第2キャッシュを構成する、請求項1に記載のマイクロプロセッサ。
  7. 前記第1キャッシュに対応する処理ユニットにより、前記処理ユニットに対するログ記録が無効化されている間に前記他のキャッシュラインに書き込みが行われることに基づいて、前記他のキャッシュラインが前記第1キャッシュの中でログに記録されていないという印を付けられる、請求項6に記載のマイクロプロセッサ。
  8. 前記制御論理は、
    書き込みを行うために前記キャッシュラインを要求するメッセージを前記第1キャッシュから受信することと、
    少なくとも前記第1キャッシュに対してログ記録が無効化されていることに基づいてログに記録されていないという印を付けられている前記キャッシュラインを前記第1キャッシュへ送信することと、
    も行うように少なくとも前記特定の第2キャッシュを構成する、請求項1に記載のマイクロプロセッサ。
  9. 下位キャッシュ層によるログ記録要求に基づいて、前記下位キャッシュ層がインフラックスをどのようにログに記録するべきかを上位キャッシュ層が判定する方法であって、前記方法は、(i)複数の処理ユニットと、(ii)複数のキャッシュ層に配列された複数のキャッシュであって、第1キャッシュ層の中に複数の第1キャッシュ、及び第2キャッシュ層の中に1つ又は複数の第2キャッシュを含み、前記第2キャッシュ層の中の特定の第2キャッシュが少なくとも前記第1キャッシュ層の中の特定の第1キャッシュに対するバッキングストアとして機能する複数のキャッシュ、とを含むコンピュータデバイスで実装され、
    前記特定の第1キャッシュから特定のメモリアドレスを参照するログ記録要求を受信することと、
    前記要求に基づいて、前記メモリアドレスに対応するキャッシュラインが前記特定の第2キャッシュに存在するかどうかを判定することと、
    前記特定の第2キャッシュに前記キャッシュラインが存在しない場合に、
    ログ記録に関与し、少なくとも前記特定の第2キャッシュに対するバッキングストアとして機能する第3キャッシュが存在しない場合は前記キャッシュラインをログに記録する、若しくは
    前記第3キャッシュが存在する場合は前記第3キャッシュへ前記要求を転送する、
    のうちの一つを実行する、又は
    前記特定の第2キャッシュに前記キャッシュラインが存在する場合に、
    前記キャッシュラインが(i)ログに記録されるべきではないと前記特定の第2キャッシュが判定している場合、若しくは(ii)ログに記録されるべきであると前記特定の第2キャッシュにより判定されているが前記特定の第2キャッシュのキャッシュラインに記憶された現在の値を前記特定の第1キャッシュが認識していないと前記特定の第2キャッシュが判定した場合に、前記キャッシュラインをログに記録する、若しくは
    (i)前記キャッシュラインがログに記録されるべきであると前記特定の第2キャッシュにより判定されていて、(ii)前記特定の第2キャッシュの前記キャッシュラインに記憶された現在の値を前記第1キャッシュが認識していると判定される場合に、前記キャッシュラインをログに記録する必要はないと判定する、
    のうちの少なくとも一つを実行することと、
    を含む、方法。
  10. 前記キャッシュラインをログに記録することは、
    トレースバッファ内で前記キャッシュラインをログに記録することと、
    前記特定の第2キャッシュの中で前記キャッシュラインにログに記録されているという印を付けることと、
    を含む、請求項9に記載の方法。
  11. 前記キャッシュラインをログに記録することは、
    前記第1キャッシュへ前記特定のメモリアドレスの値を直接ログに記録するよう指示すること、又は
    前記第1キャッシュへ前記特定のメモリアドレスに対する以前のログエントリへの参照をログに記録するよう指示すること、
    のうちの一つを含む、請求項9に記載の方法。
  12. 前記キャッシュラインがログに記録されるべきではないと前記特定の第2キャッシュが判定している場合に前記キャッシュラインをログに記録することは、
    前記第3キャッシュが存在すると判定することと、
    前記第3キャッシュの知識に基づき、前記キャッシュラインを参照によりログに記録することと、
    を含む、請求項9に記載の方法。
  13. 前記キャッシュラインがログに記録されるべきではないと前記特定の第2キャッシュが判定している場合に前記キャッシュラインをログに記録することは、
    前記第3キャッシュ層が存在すると判定することと、
    前記キャッシュラインが前記特定の第2キャッシュにより値でログに記録されていると前記第3キャッシュに通知することと、
    を含む、請求項9に記載の方法。
  14. 前記第1キャッシュ層はL1キャッシュ層を備え、前記第2キャッシュ層はL2キャッシュ層又はL3キャッシュ層を備える、請求項9に記載の方法。
  15. 制御論理は、
    前記メモリアドレスにも対応する前記第1キャッシュの中の別のキャッシュラインが前記第1キャッシュの中でログに記録されていないという印を付けられていることを示すメッセージを前記第1キャッシュから受信することと、
    前記メッセージに基づいて、前記特定の第2キャッシュの中で前記キャッシュラインにログに記録されていないという印を付けることと、
    を行うように、少なくとも前記特定の第2キャッシュを構成する、請求項9に記載の方法。
  16. 前記第1キャッシュに対応する処理ユニットにより、前記処理ユニットに対するログ記録が無効化されている間に前記他のキャッシュラインに書き込みが行われることに基づいて、前記他のキャッシュラインが前記第1キャッシュの中でログに記録されていないという印を付けられる、請求項15に記載の方法。
  17. 制御論理は、書き込みを行うために前記キャッシュラインを要求するメッセージを前記第1キャッシュから受信することと、少なくとも前記第1キャッシュに対してログ記録が無効化されていることに基づいてログに記録されていないという印を付けられている前記キャッシュラインを前記第1キャッシュへ送信することと、を行うように少なくとも前記特定の第2キャッシュを構成する、請求項9に記載の方法。
  18. 複数の処理ユニットと、
    複数のキャッシュ層に配列された複数のキャッシュであって、第1キャッシュ層の中に複数の第1キャッシュ、及び第2キャッシュ層の中に1つ又は複数の第2キャッシュを含み、前記第2キャッシュ層が、前記複数の処理ユニットのうちの特定の処理ユニットに対応する前記第1キャッシュ層の中の少なくとも特定の第1キャッシュに対するバッキングストアとして機能する、複数のキャッシュと、
    制御論理であって、
    設定されたログ記録状態を有する前記第1キャッシュの中のキャッシュラインへの書き込みを検出することと、
    前記書き込みを検出することに基づいて、前記特定の処理ユニットについてログ記録が有効化されているか否かを判定することと、
    前記特定の処理ユニットについてログ記録が無効化されていることに少なくとも基づいて、前記キャッシュラインについてログ記録状態を消去し、かつ前記1つ又は複数の第2キャッシュの少なくとも1つに、前記キャッシュラインについてそのログ記録状態が消去されるべきことを通知し、又は前記特定の処理ユニットについてログ記録が有効化されていることに少なくとも基づいて、前記キャッシュラインについてログ記録状態を保持すること、
    を少なくとも実行するように少なくとも前記特定の第1キャッシュを構成する制御論理と、
    を備える、マイクロプロセッサ。
  19. 前記特定の処理ユニットは、所有された状態のキャッシュラインを有し、前記制御論理は、前記複数の第1キャッシュの少なくとも一つに前記キャッシュラインについてそのログ記録状態が消去されるべきことを通知するように、少なくとも前記特定の第1キャッシュを構成する、請求項18に記載のマイクロプロセッサ。
  20. 前記特定の第1のキャッシュは、前記複数の第1キャッシュの少なくとも一つから受信した要求に基づいて、前記複数の第1キャッシュの少なくとも一つに前記キャッシュラインについてそのログ記録状態が消去されるべきことを通知する、請求項18に記載のマイクロプロセッサ。
JP2020537480A 2018-02-23 2019-02-14 上位レベルキャッシュへの要求によるキャッシュへのインフラックスのログ記録 Active JP7334163B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/904,072 2018-02-23
US15/904,072 US10496537B2 (en) 2018-02-23 2018-02-23 Trace recording by logging influxes to a lower-layer cache based on entries in an upper-layer cache
US15/947,699 2018-04-06
US15/947,699 US10642737B2 (en) 2018-02-23 2018-04-06 Logging cache influxes by request to a higher-level cache
PCT/US2019/017912 WO2019164730A1 (en) 2018-02-23 2019-02-14 Logging cache influxes by request to a higher-level cache

Publications (3)

Publication Number Publication Date
JP2021515287A JP2021515287A (ja) 2021-06-17
JPWO2019164730A5 JPWO2019164730A5 (ja) 2022-02-14
JP7334163B2 true JP7334163B2 (ja) 2023-08-28

Family

ID=65576730

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020537480A Active JP7334163B2 (ja) 2018-02-23 2019-02-14 上位レベルキャッシュへの要求によるキャッシュへのインフラックスのログ記録

Country Status (16)

Country Link
US (1) US10642737B2 (ja)
EP (1) EP3756099B1 (ja)
JP (1) JP7334163B2 (ja)
KR (1) KR102661543B1 (ja)
CN (1) CN111742301A (ja)
AU (1) AU2019223807B2 (ja)
BR (1) BR112020014668A2 (ja)
CA (1) CA3088558A1 (ja)
ES (1) ES2943508T3 (ja)
IL (1) IL276650B2 (ja)
MX (1) MX2020008661A (ja)
PH (1) PH12020551310A1 (ja)
RU (1) RU2764173C1 (ja)
SG (1) SG11202007566WA (ja)
WO (1) WO2019164730A1 (ja)
ZA (1) ZA202004082B (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10031834B2 (en) 2016-08-31 2018-07-24 Microsoft Technology Licensing, Llc Cache-based tracing for time travel debugging and analysis
US11042469B2 (en) 2017-08-28 2021-06-22 Microsoft Technology Licensing, Llc Logging trace data for program code execution at an instruction level
US10496537B2 (en) 2018-02-23 2019-12-03 Microsoft Technology Licensing, Llc Trace recording by logging influxes to a lower-layer cache based on entries in an upper-layer cache
WO2021061220A1 (en) * 2019-09-24 2021-04-01 Microsoft Technology Licensing, Llc Logging trace data for program code execution at an instruction level
KR20210079637A (ko) * 2019-12-20 2021-06-30 에스케이하이닉스 주식회사 데이터 저장 장치 및 그 동작 방법
US11561896B2 (en) 2021-02-22 2023-01-24 Microsoft Technology Licensing, Llc Cache-based trace logging using tags in an upper-level cache
WO2022177697A1 (en) * 2021-02-22 2022-08-25 Microsoft Technology Licensing, Llc Cache-based trace logging using tags in an upper-level cache
US20220269615A1 (en) * 2021-02-22 2022-08-25 Microsoft Technology Licensing, Llc Cache-based trace logging using tags in system memory
US20220269614A1 (en) * 2021-02-22 2022-08-25 Microsoft Technology Licensing, Llc Treating main memory as a collection of tagged cache lines for trace logging
LU102709B1 (en) * 2021-03-26 2022-09-26 Microsoft Technology Licensing Llc Memory address compression within an execution trace
LU102708B1 (en) * 2021-03-26 2022-09-26 Microsoft Technology Licensing Llc Physical memory address omission or obfuscation within an execution trace
LU500061B1 (en) * 2021-04-20 2022-10-20 Microsoft Technology Licensing Llc Processor support for using cache way- locking to simultaneously record plural execution contexts into independent execution traces
LU500060B1 (en) * 2021-04-20 2022-10-20 Microsoft Technology Licensing Llc Processor support for using memory page markings as logging cues to simultaneously record plural execution contexts into independent execution traces

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002207613A (ja) 2001-01-12 2002-07-26 Fujitsu Ltd 履歴採取装置及び履歴採取方法
JP2008204101A (ja) 2007-02-19 2008-09-04 Nec Computertechno Ltd バスインタフェースアダプタ、データ転送方法、データ転送システム及び情報処理装置
JP2014191622A (ja) 2013-03-27 2014-10-06 Fujitsu Ltd 処理装置

Family Cites Families (89)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4598364A (en) 1983-06-29 1986-07-01 International Business Machines Corporation Efficient trace method adaptable to multiprocessors
AU3776793A (en) 1992-02-27 1993-09-13 Intel Corporation Dynamic flow instruction cache memory
US5666514A (en) * 1994-07-01 1997-09-09 Board Of Trustees Of The Leland Stanford Junior University Cache memory containing extra status bits to indicate memory regions where logging of data should occur
US5905855A (en) 1997-02-28 1999-05-18 Transmeta Corporation Method and apparatus for correcting errors in computer systems
US6167536A (en) 1997-04-08 2000-12-26 Advanced Micro Devices, Inc. Trace cache for a microprocessor-based device
US6009270A (en) 1997-04-08 1999-12-28 Advanced Micro Devices, Inc. Trace synchronization in a processor
US6094729A (en) 1997-04-08 2000-07-25 Advanced Micro Devices, Inc. Debug interface including a compact trace record storage
US5944841A (en) 1997-04-15 1999-08-31 Advanced Micro Devices, Inc. Microprocessor with built-in instruction tracing capability
US6101524A (en) 1997-10-23 2000-08-08 International Business Machines Corporation Deterministic replay of multithreaded applications
US6553564B1 (en) 1997-12-12 2003-04-22 International Business Machines Corporation Process and system for merging trace data for primarily interpreted methods
US6351844B1 (en) 1998-11-05 2002-02-26 Hewlett-Packard Company Method for selecting active code traces for translation in a caching dynamic translator
US6823473B2 (en) 2000-04-19 2004-11-23 Hewlett-Packard Development Company, L.P. Simultaneous and redundantly threaded processor uncached load address comparator and data value replication circuit
US6854108B1 (en) 2000-05-11 2005-02-08 International Business Machines Corporation Method and apparatus for deterministic replay of java multithreaded programs on multiprocessors
US7448025B2 (en) 2000-12-29 2008-11-04 Intel Corporation Qualification of event detection by thread ID and thread privilege level
US6634011B1 (en) 2001-02-15 2003-10-14 Silicon Graphics, Inc. Method and apparatus for recording program execution in a microprocessor based integrated circuit
US20020144101A1 (en) 2001-03-30 2002-10-03 Hong Wang Caching DAG traces
US7178133B1 (en) 2001-04-30 2007-02-13 Mips Technologies, Inc. Trace control based on a characteristic of a processor's operating state
US7185234B1 (en) 2001-04-30 2007-02-27 Mips Technologies, Inc. Trace control from hardware and software
US7181728B1 (en) 2001-04-30 2007-02-20 Mips Technologies, Inc. User controlled trace records
US20030079205A1 (en) 2001-10-22 2003-04-24 Takeshi Miyao System and method for managing operating systems
US7051239B2 (en) 2001-12-28 2006-05-23 Hewlett-Packard Development Company, L.P. Method and apparatus for efficiently implementing trace and/or logic analysis mechanisms on a processor chip
US7089400B1 (en) 2002-08-29 2006-08-08 Advanced Micro Devices, Inc. Data speculation based on stack-relative addressing patterns
US7073026B2 (en) * 2002-11-26 2006-07-04 Advanced Micro Devices, Inc. Microprocessor including cache memory supporting multiple accesses per cycle
US20040117690A1 (en) 2002-12-13 2004-06-17 Andersson Anders J. Method and apparatus for using a hardware disk controller for storing processor execution trace information on a storage device
US20040153635A1 (en) 2002-12-30 2004-08-05 Kaushik Shivnandan D. Privileged-based qualification of branch trace store data
US7526757B2 (en) 2004-01-14 2009-04-28 International Business Machines Corporation Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US20050223364A1 (en) 2004-03-30 2005-10-06 Peri Ramesh V Method and apparatus to compact trace in a trace buffer
US8010337B2 (en) 2004-09-22 2011-08-30 Microsoft Corporation Predicting database system performance
US7447946B2 (en) 2004-11-05 2008-11-04 Arm Limited Storage of trace data within a data processing apparatus
JP4114879B2 (ja) 2005-01-21 2008-07-09 インターナショナル・ビジネス・マシーンズ・コーポレーション トレース情報収集システム、トレース情報収集方法、及びトレース情報収集プログラム
US7640539B2 (en) 2005-04-12 2009-12-29 International Business Machines Corporation Instruction profiling using multiple metrics
US8301868B2 (en) 2005-09-23 2012-10-30 Intel Corporation System to profile and optimize user software in a managed run-time environment
US7877630B1 (en) 2005-09-28 2011-01-25 Oracle America, Inc. Trace based rollback of a speculatively updated cache
US7984281B2 (en) 2005-10-18 2011-07-19 Qualcomm Incorporated Shared interrupt controller for a multi-threaded processor
US9268666B2 (en) 2005-10-21 2016-02-23 Undo Ltd. System and method for debugging of computer programs
US7620938B2 (en) 2005-10-31 2009-11-17 Microsoft Corporation Compressed program recording
US20070106827A1 (en) 2005-11-08 2007-05-10 Boatright Bryan D Centralized interrupt controller
US7461209B2 (en) 2005-12-06 2008-12-02 International Business Machines Corporation Transient cache storage with discard function for disposable data
US20070150881A1 (en) 2005-12-22 2007-06-28 Motorola, Inc. Method and system for run-time cache logging
US20070220361A1 (en) 2006-02-03 2007-09-20 International Business Machines Corporation Method and apparatus for guaranteeing memory bandwidth for trace data
US7958497B1 (en) 2006-06-07 2011-06-07 Replay Solutions, Inc. State synchronization in recording and replaying computer programs
US7676632B2 (en) 2006-07-18 2010-03-09 Via Technologies, Inc. Partial cache way locking
US7472218B2 (en) 2006-09-08 2008-12-30 International Business Machines Corporation Assisted trace facility to improve CPU cache performance
US20080114964A1 (en) 2006-11-14 2008-05-15 Davis Gordon T Apparatus and Method for Cache Maintenance
US20080250207A1 (en) 2006-11-14 2008-10-09 Davis Gordon T Design structure for cache maintenance
US8370806B2 (en) 2006-11-15 2013-02-05 Qualcomm Incorporated Non-intrusive, thread-selective, debugging method and system for a multi-thread digital signal processor
US7685409B2 (en) * 2007-02-21 2010-03-23 Qualcomm Incorporated On-demand multi-thread multimedia processor
US8261130B2 (en) 2007-03-02 2012-09-04 Infineon Technologies Ag Program code trace signature
US8484516B2 (en) 2007-04-11 2013-07-09 Qualcomm Incorporated Inter-thread trace alignment method and system for a multi-threaded processor
US20090037886A1 (en) 2007-07-30 2009-02-05 Mips Technologies, Inc. Apparatus and method for evaluating a free-running trace stream
CN101446909B (zh) 2007-11-30 2011-12-28 国际商业机器公司 用于管理任务事件的方法和系统
US8078807B2 (en) 2007-12-27 2011-12-13 Intel Corporation Accelerating software lookups by using buffered or ephemeral stores
US8413122B2 (en) 2009-02-12 2013-04-02 International Business Machines Corporation System and method for demonstrating the correctness of an execution trace in concurrent processing environments
US8402318B2 (en) 2009-03-24 2013-03-19 The Trustees Of Columbia University In The City Of New York Systems and methods for recording and replaying application execution
US8589629B2 (en) 2009-03-27 2013-11-19 Advanced Micro Devices, Inc. Method for way allocation and way locking in a cache
US8140903B2 (en) 2009-04-16 2012-03-20 International Business Machines Corporation Hardware process trace facility
US8423965B2 (en) 2009-06-23 2013-04-16 Microsoft Corporation Tracing of data flow
JP2011013867A (ja) 2009-06-30 2011-01-20 Panasonic Corp データ処理装置、性能評価解析システム
US8719796B2 (en) 2010-01-26 2014-05-06 The Board Of Trustees Of The University Of Illinois Parametric trace slicing
US8468501B2 (en) 2010-04-21 2013-06-18 International Business Machines Corporation Partial recording of a computer program execution for replay
US9015441B2 (en) 2010-04-30 2015-04-21 Microsoft Technology Licensing, Llc Memory usage scanning
US8499200B2 (en) 2010-05-24 2013-07-30 Ncr Corporation Managing code-tracing data
US20120042212A1 (en) 2010-08-10 2012-02-16 Gilbert Laurenti Mixed Mode Processor Tracing
US9645913B2 (en) 2011-08-03 2017-05-09 Daniel Geist Method and apparatus for debugging programs
US20130055033A1 (en) 2011-08-22 2013-02-28 International Business Machines Corporation Hardware-assisted program trace collection with selectable call-signature capture
EP2761472B1 (en) * 2011-09-30 2020-04-01 Intel Corporation Memory channel that supports near memory and far memory access
US8584110B2 (en) 2011-09-30 2013-11-12 International Business Machines Corporation Execution trace truncation
US8612650B1 (en) 2012-03-13 2013-12-17 Western Digital Technologies, Inc. Virtual extension of buffer to reduce buffer overflow during tracing
US9058415B1 (en) 2013-03-15 2015-06-16 Google Inc. Counting events using hardware performance counters and annotated instructions
US9304863B2 (en) 2013-03-15 2016-04-05 International Business Machines Corporation Transactions for checkpointing and reverse execution
US9619404B2 (en) * 2013-04-16 2017-04-11 International Business Machines Corporation Backup cache with immediate availability
US9189360B2 (en) 2013-06-15 2015-11-17 Intel Corporation Processor that records tracing data in non contiguous system memory slices
US9734080B2 (en) * 2013-08-08 2017-08-15 Nxp Usa, Inc. Cache organization and method
US9086974B2 (en) 2013-09-26 2015-07-21 International Business Machines Corporation Centralized management of high-contention cache lines in multi-processor computing environments
US9965320B2 (en) * 2013-12-27 2018-05-08 Intel Corporation Processor with transactional capability and logging circuitry to report transactional operations
US9785568B2 (en) 2014-05-19 2017-10-10 Empire Technology Development Llc Cache lookup bypass in multi-level cache systems
US9535815B2 (en) 2014-06-04 2017-01-03 Nvidia Corporation System, method, and computer program product for collecting execution statistics for graphics processing unit workloads
US9300320B2 (en) 2014-06-27 2016-03-29 Qualcomm Incorporated System and method for dictionary-based cache-line level code compression for on-chip memories using gradual bit removal
US9875173B2 (en) 2014-06-30 2018-01-23 Microsoft Technology Licensing, Llc Time travel debugging in managed runtime
US9361228B2 (en) 2014-08-05 2016-06-07 Qualcomm Incorporated Cache line compaction of compressed data segments
US10210168B2 (en) * 2015-02-23 2019-02-19 International Business Machines Corporation Managing data in storage according to a log structure
US9588870B2 (en) 2015-04-06 2017-03-07 Microsoft Technology Licensing, Llc Time travel debugging for browser components
EP3338192A1 (en) 2015-08-18 2018-06-27 Telefonaktiebolaget LM Ericsson (PUBL) Method for observing software execution, debug host and debug target
US9767237B2 (en) 2015-11-13 2017-09-19 Mentor Graphics Corporation Target capture and replay in emulation
US9569338B1 (en) 2015-12-02 2017-02-14 International Business Machines Corporation Fingerprint-initiated trace extraction
US10031834B2 (en) 2016-08-31 2018-07-24 Microsoft Technology Licensing, Llc Cache-based tracing for time travel debugging and analysis
US10031833B2 (en) 2016-08-31 2018-07-24 Microsoft Technology Licensing, Llc Cache-based tracing for time travel debugging and analysis
JP7202293B2 (ja) 2016-10-11 2023-01-11 グリーン ヒルズ ソフトウェア,エルエルシー 垂直統合インストルメント化およびトレース再構成のためのシステム、方法およびデバイス
US10496537B2 (en) 2018-02-23 2019-12-03 Microsoft Technology Licensing, Llc Trace recording by logging influxes to a lower-layer cache based on entries in an upper-layer cache

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002207613A (ja) 2001-01-12 2002-07-26 Fujitsu Ltd 履歴採取装置及び履歴採取方法
JP2008204101A (ja) 2007-02-19 2008-09-04 Nec Computertechno Ltd バスインタフェースアダプタ、データ転送方法、データ転送システム及び情報処理装置
JP2014191622A (ja) 2013-03-27 2014-10-06 Fujitsu Ltd 処理装置

Also Published As

Publication number Publication date
US20190266086A1 (en) 2019-08-29
EP3756099A1 (en) 2020-12-30
ES2943508T3 (es) 2023-06-13
KR20200123188A (ko) 2020-10-28
IL276650B2 (en) 2023-09-01
EP3756099B1 (en) 2023-03-29
PH12020551310A1 (en) 2021-09-06
SG11202007566WA (en) 2020-09-29
AU2019223807A1 (en) 2020-07-23
IL276650A (en) 2020-09-30
MX2020008661A (es) 2020-09-22
CA3088558A1 (en) 2019-08-29
AU2019223807B2 (en) 2024-02-15
WO2019164730A1 (en) 2019-08-29
KR102661543B1 (ko) 2024-04-26
ZA202004082B (en) 2021-09-29
RU2764173C1 (ru) 2022-01-13
JP2021515287A (ja) 2021-06-17
US10642737B2 (en) 2020-05-05
CN111742301A (zh) 2020-10-02
BR112020014668A2 (pt) 2020-12-01
IL276650B1 (en) 2023-05-01

Similar Documents

Publication Publication Date Title
JP7334163B2 (ja) 上位レベルキャッシュへの要求によるキャッシュへのインフラックスのログ記録
JP7152474B2 (ja) キャッシュコヒーレンスプロトコルデータを用いたキャッシュベーストレース記録
JP7221979B2 (ja) 上位層キャッシュ内のエントリに基づいて下位層キャッシュへの流入をログすることによるトレース記録
US11126536B2 (en) Facilitating recording a trace file of code execution using index bits in a processor cache
US10324851B2 (en) Facilitating recording a trace file of code execution using way-locking in a set-associative processor cache
US10558572B2 (en) Decoupling trace data streams using cache coherence protocol data
US10860485B2 (en) Leveraging existing logic paths during bit-accurate processor tracing
US11989137B2 (en) Logging cache line lifetime hints when recording bit-accurate trace
RU2773437C2 (ru) Запись трассировки посредством регистрации входящих потоков в кэш нижнего уровня на основе элементов в кэше верхнего уровня
US20240184688A1 (en) Processor support for using memory page markings as logging cues to simultaneously record plural execution contexts into independent execution traces

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220202

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220202

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230131

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230208

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230502

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230816

R150 Certificate of patent or registration of utility model

Ref document number: 7334163

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150