(57)【要約】  コヒーレンシ制御回路１０は、要求マスタ・デバイス４から受信された安全投機的読取りトランザクションの処理をサポートする。安全投機的読取りトランザクションは、安全投機的読取りトランザクションに応答した、他のキャッシュ１２中のターゲット・データに関連付けられたコヒーレンシ状態の変更を禁止しながら、ターゲット・データが要求マスタ・デバイス４の要求キャッシュ１１に戻されることを要求するタイプである。応答して、少なくとも、ターゲット・データが、第２のマスタ・デバイスに関連付けられた第２のキャッシュ中にキャッシュされたとき、コヒーレンシ制御回路１０と第２のキャッシュ１２とのうちの少なくとも１つは、ターゲット・データを第２のキャッシュ内で同じコヒーレンシ状態に維持しながら、安全投機的読取り応答を戻すように構成される。このことは、投機的サイドチャネル攻撃を軽減することを助ける。
2021520545.tif 000002
【特許請求の範囲】
【請求項１】
関連付けられたキャッシュを有する複数のマスタ・デバイスと、
所与のキャッシュ中のデータの各アイテムに複数のコヒーレンシ状態のうちの１つを割り当てるコヒーレンシ・プロトコルに基づいて、前記関連付けられたキャッシュ間のコヒーレンシを管理するためのコヒーレンシ制御回路と
を備えるシステムであって、
前記コヒーレンシ制御回路が、要求マスタ・デバイスから受信された安全投機的読取りトランザクションの処理をサポートするように構成され、前記安全投機的読取りトランザクションは、前記安全投機的読取りトランザクションに応答した、他のマスタ・デバイスのキャッシュ中のターゲット・データに関連付けられたコヒーレンシ状態の変更を禁止しながら、前記ターゲット・データが前記要求マスタ・デバイスに戻されることを要求するタイプの安全投機的読取りトランザクションであり、
前記安全投機的読取りトランザクションに応答して、少なくとも、前記ターゲット・データが第２のマスタ・デバイスに関連付けられた第２のキャッシュ中にキャッシュされたとき、前記コヒーレンシ制御回路と前記第２のキャッシュとのうちの少なくとも１つが、前記ターゲット・データを前記第２のキャッシュ内で同じコヒーレンシ状態に維持しながら、安全投機的読取り応答を戻すように構成された、システム。
【請求項２】
前記安全投機的読取りトランザクションに応答して、前記要求キャッシュ中の前記ターゲット・データのキャッシングが、前記第２のキャッシュ中の前記ターゲット・データの前記コヒーレンシ状態を変更することなしに許可されないであろう、コヒーレンシ状態で前記ターゲット・データが前記第２のキャッシュ中にキャッシュされたとき、前記安全投機的読取り応答は、前記安全投機的読取りトランザクションをトリガする投機的読取り動作が非投機的であると決定されるまで、前記ターゲット・データが前記第２のキャッシュによって与えられ得ないことを示すデータなし応答を備える、請求項１に記載のシステム。
【請求項３】
前記データなし応答の受信に応答して、前記要求マスタ・デバイスは、前記投機的読取り動作が非投機的であると決定されたとき、前記コヒーレンシ制御回路にさらなるトランザクションを発行するように構成され、前記さらなるトランザクションは、他のキャッシュ中の前記ターゲット・データに関連付けられたコヒーレンシ状態の変更を許可しながら、前記ターゲット・データが前記要求キャッシュに戻されることを要求するタイプのトランザクションである、請求項２に記載のシステム。
【請求項４】
前記安全投機的読取りトランザクションに応答して、前記要求キャッシュ中の前記ターゲット・データのキャッシングが、前記第２のキャッシュ中の前記ターゲット・データの前記コヒーレンシ状態を変更することなしに許可されないであろう、コヒーレンシ状態で前記ターゲット・データが前記第２のキャッシュ中にキャッシュされたとき、前記安全投機的読取り応答が、前記要求キャッシュに前記ターゲット・データを与えるキャッシュ不能読取り応答を備え、前記キャッシュ不能読取り応答は、前記要求キャッシュが前記ターゲット・データをキャッシュすることを禁止する、請求項１に記載のシステム。
【請求項５】
前記キャッシュ不能読取り応答に応答して、前記要求マスタ・デバイスは、投機的読取り動作が投機的なままである間、前記投機的読取り動作に関連付けられたデータをバッファするための非コヒーレント投機的バッファに前記ターゲット・データを割り振るように構成された、請求項４に記載のシステム。
【請求項６】
前記安全投機的読取りトランザクションをトリガした前記投機的読取り動作が非投機的であると決定されたことに応答して、前記要求マスタ・デバイスが、前記非コヒーレント投機的バッファ中の前記ターゲット・データの非コヒーレント・バージョンを前記ターゲット・データのコヒーレント・バージョンにアップグレードすることを要求するために、前記コヒーレンシ制御回路にコヒーレント・アップグレード要求を発行するように構成された、請求項５に記載のシステム。
【請求項７】
前記ターゲット・データが前記キャッシュ不能読取り応答によって与えられた以後の前記ターゲット・データに対する変更が間違った実行を引き起こすであろうことを決定したことに応答して、前記要求マスタ・デバイスが、前記キャッシュ不能読取り応答によって与えられた前記ターゲット・データに基づいて投機的に実行される後続の動作をキャンセルするように構成された、請求項５及び６のいずれか一項に記載のシステム。
【請求項８】
前記安全投機的読取りトランザクションに応答して、前記安全投機的読取り応答が、前記第２のキャッシュ中の前記ターゲット・データの前記コヒーレンシ状態にかかわらず、前記キャッシュ不能読取り応答を備える、請求項４から７までのいずれか一項に記載のシステム。
【請求項９】
前記安全投機的読取りトランザクションに応答して、前記要求キャッシュ中の前記ターゲット・データのキャッシングが、前記第２のキャッシュ中の前記ターゲット・データの前記コヒーレンシ状態を変更することなしに前記コヒーレンシ・プロトコルによって許可されるであろう、コヒーレンシ状態で前記ターゲット・データが前記第２のキャッシュ中にキャッシュされたとき、前記安全投機的読取り応答が、前記ターゲット・データを与えるキャッシュ可能読取り応答を備え、前記キャッシュ可能読取り応答は、前記要求キャッシュが前記ターゲット・データをキャッシュすることを許可する、請求項１から７までのいずれか一項に記載のシステム。
【請求項１０】
前記安全投機的読取りトランザクションに応答して、前記ターゲット・データが、前記コヒーレンシ・プロトコルに従って管理される前記他のキャッシュにないとき、前記コヒーレンシ制御回路が、前記複数のマスタ・デバイス間で共有される上位レベル・キャッシュ又はメモリから前記ターゲット・データを取得するように構成された、請求項１から９までのいずれか一項に記載のシステム。
【請求項１１】
複数のリクエスタのうちの１つによる要求に応じたアクセスのための、前記複数のマスタ・デバイス間で共有される上位レベル・キャッシュを備え、各リクエスタが、所与のマスタ・デバイスか、又は所与のマスタ・デバイス上で実行される所与のプロセスを備え、
割振りリクエスタによって前記上位レベル・キャッシュに投機的に割り振られたデータを読み取るための要求に応答して、前記データの割振りをトリガする動作が投機的なままである間、前記上位レベル・キャッシュは、前記要求が前記割振りリクエスタ以外のリクエスタによってトリガされたとき、前記データが前記上位レベル・キャッシュ中にキャッシュされていないことを示すミス応答を戻すように構成された、請求項１から１０までのいずれか一項に記載のシステム。
【請求項１２】
前記上位レベル・キャッシュが、非投機的に割り振られたデータを記憶するための主キャッシュ領域とは別個の投機的キャッシュ領域に前記投機的に割り振られたデータを記憶し、前記データの割振りをトリガする前記動作が前記割振りリクエスタによって非投機的であると決定されたという指示に応答して、前記投機的に割り振られたデータを前記主キャッシュ領域に転送するように構成された、請求項１１に記載のシステム。
【請求項１３】
前記上位レベル・キャッシュが、前記上位レベル・キャッシュ中にキャッシュされたデータの各ピースに関連付けられたメタデータを記憶するように構成され、前記メタデータは、前記データが投機的なままであるかどうか、及び前記データが投機的なままである場合、どのリクエスタが前記割振りリクエスタであるかを示す、請求項１１に記載のシステム。
【請求項１４】
関連付けられたキャッシュを有するマスタ・デバイスと通信するための複数のインターフェースと、
所与のキャッシュ中のデータの各アイテムに複数のコヒーレンシ状態のうちの１つを割り当てるコヒーレンシ・プロトコルに基づいて、前記関連付けられたキャッシュ間のコヒーレンシを管理するためのコヒーレンシ制御回路と
を備える相互接続であって、
前記コヒーレンシ制御回路が、要求マスタ・デバイスから受信された安全投機的読取りトランザクションの処理をサポートするように構成され、前記安全投機的読取りトランザクションは、前記安全投機的読取りトランザクションに応答した、他のマスタ・デバイスのキャッシュ中のターゲット・データに関連付けられたコヒーレンシ状態の変更を禁止しながら、前記ターゲット・データが前記要求マスタ・デバイスに戻されることを要求するタイプの安全投機的読取りトランザクションであり、
前記安全投機的読取りトランザクションに応答して、少なくとも、前記ターゲット・データが第２のマスタ・デバイスに関連付けられた第２のキャッシュ中にキャッシュされたとき、前記コヒーレンシ制御回路が、前記ターゲット・データを前記第２のキャッシュ内で同じコヒーレンシ状態に維持しながら、安全投機的読取り応答を戻すか、又は前記安全投機的読取り応答を戻すように前記第２のキャッシュに要求するように構成された、相互接続。
【請求項１５】
データ・アクセス動作の投機的実行が可能な処理回路と、
所与のキャッシュ中のデータの各アイテムに複数のコヒーレンシ状態のうちの１つを割り当てるコヒーレンシ・プロトコルに基づいて、前記マスタ・デバイスのキャッシュと少なくとも１つの他のキャッシュとの間のコヒーレンシを管理するために相互接続にトランザクションを発行するためのインターフェース回路と
を備える、マスタ・デバイスであって、
前記処理回路が、前記マスタ・デバイスの前記キャッシュにないターゲット・データを要求するための読取り動作を投機的に実行したことに応答して、前記インターフェース回路は、安全投機的読取りトランザクションに応答した、前記少なくとも１つの他のキャッシュ中の前記ターゲット・データに関連付けられたコヒーレンシ状態の変更を禁止しながら、前記ターゲット・データが前記マスタ・デバイスに戻されることを要求するタイプの前記安全投機的読取りトランザクションを前記相互接続に発行するように構成された、マスタ・デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法はデータ処理の分野に関する。
【背景技術】
【０００２】
データ処理装置は、命令のための入力オペランドが正しいかどうか、又は命令がそもそも実行される必要があるかどうかが分かる前に命令が実行される、命令の投機的（speculative）実行をサポートし得る。たとえば、処理装置は、分岐の実際の結果がどうなるべきかが分かる前に、後続の命令が投機的にフェッチされ、復号され、実行され得るように、分岐命令の結果を予測するための分岐予測器を有し得る。また、いくつかのシステムは、後続の命令がより速く処理されることを可能にするために、実際の値がメモリから実際に戻される前に、メモリからロードされる値が予測される、ロード投機（speculation）をサポートし得る。他の形態の投機も可能である。
【発明の概要】
【課題を解決するための手段】
【０００３】
少なくともいくつかの実例は、
関連付けられたキャッシュを有する複数のマスタ・デバイスと、
所与のキャッシュ中のデータの各アイテムに複数のコヒーレンシ状態のうちの１つを割り当てるコヒーレンシ・プロトコルに基づいて、関連付けられたキャッシュ間のコヒーレンシを管理するためのコヒーレンシ制御回路と
を備えるシステムであって、
コヒーレンシ制御回路が、要求マスタ・デバイスから受信された安全投機的読取り（safe-speculative-read）トランザクションの処理をサポートするように構成され、安全投機的読取りトランザクションは、安全投機的読取りトランザクションに応答した、他のキャッシュ中のターゲット・データに関連付けられたコヒーレンシ状態の変更を禁止しながら、ターゲット・データが要求マスタ・デバイスの要求キャッシュに戻されることを要求するタイプの安全投機的読取りトランザクションであり、
安全投機的読取りトランザクションに応答して、少なくとも、ターゲット・データが第２のマスタ・デバイスに関連付けられた第２のキャッシュ中にキャッシュされたとき、コヒーレンシ制御回路と第２のキャッシュとのうちの少なくとも１つが、ターゲット・データを第２のキャッシュ内で同じコヒーレンシ状態に維持しながら、安全投機的読取り応答を戻すように構成された、システムを提供する。
【０００４】
少なくともいくつかの実例は、
関連付けられたキャッシュを有するマスタ・デバイスと通信するための複数のインターフェースと、
所与のキャッシュ中のデータの各アイテムに複数のコヒーレンシ状態のうちの１つを割り当てるコヒーレンシ・プロトコルに基づいて、関連付けられたキャッシュ間のコヒーレンシを管理するためのコヒーレンシ制御回路と
を備える相互接続であって、
コヒーレンシ制御回路が、要求マスタ・デバイスから受信された安全投機的読取りトランザクションの処理をサポートするように構成され、安全投機的読取りトランザクションは、安全投機的読取りトランザクションに応答した、他のマスタ・デバイスのキャッシュ中のターゲット・データに関連付けられたコヒーレンシ状態の変更を禁止しながら、ターゲット・データが要求マスタ・デバイスに戻されることを要求するタイプの安全投機的読取りトランザクションであり、
安全投機的読取りトランザクションに応答して、少なくとも、ターゲット・データが第２のマスタ・デバイスに関連付けられた第２のキャッシュ中にキャッシュされたとき、コヒーレンシ制御回路が、ターゲット・データを第２のキャッシュ内で同じコヒーレンシ状態に維持しながら、安全投機的読取り応答を戻すか、又は安全投機的読取り応答を戻すように第２のキャッシュに要求するように構成された、相互接続を提供する。
【０００５】
少なくともいくつかの実例は、
データ・アクセス動作の投機的実行が可能な処理回路と、
所与のキャッシュ中のデータの各アイテムに複数のコヒーレンシ状態のうちの１つを割り当てるコヒーレンシ・プロトコルに基づいて、マスタ・デバイスのキャッシュと少なくとも１つの他のキャッシュとの間のコヒーレンシを管理するために相互接続にトランザクションを発行するためのインターフェース回路と
を備えるマスタ・デバイスであって、
処理回路が、マスタ・デバイスのキャッシュにないターゲット・データを要求するための読取り動作を投機的に実行したことに応答して、インターフェース回路は、安全投機的読取りトランザクションに応答した、前記少なくとも１つの他のキャッシュ中のターゲット・データに関連付けられたコヒーレンシ状態の変更を禁止しながら、ターゲット・データがマスタ・デバイスに戻されることを要求するタイプの安全投機的読取りトランザクションを相互接続に発行するように構成された、マスタ・デバイスを提供する。
【０００６】
本技法のさらなる態様、特徴及び利点は、添付の図面とともに読まれるべき実例の以下の説明から明らかになろう。
【図面の簡単な説明】
【０００７】
【図１】マスタ・デバイス間のコヒーレンシを管理するためのいくつかのマスタ・デバイスと１つの相互接続とを有するシステムの実例を概略的に示す図である。
【図２Ａ】他のキャッシュ中のコヒーレンシ状態の変更を許可しながら、要求キャッシュへのターゲット・データの戻しを要求する読取りトランザクションのタイプの処理を示す図である。
【図２Ｂ】他のキャッシュ中のコヒーレンシ状態の変更を許可しながら、要求キャッシュへのターゲット・データの戻しを要求する読取りトランザクションのタイプの処理を示す図である。
【図３】別のキャッシュ中のコヒーレンシ状態の変更に基づいて、機密データに関する情報を導出し得る潜在的なセキュリティ攻撃の実例を示す図である。
【図４Ａ】トランザクションをトリガした読取り動作が投機的なままである間、トランザクションが別のキャッシュ中のコヒーレンシ状態変更をトリガしないことを保証する安全投機的読取りトランザクションの処理を示す図である。
【図４Ｂ】トランザクションをトリガした読取り動作が投機的なままである間、トランザクションが別のキャッシュ中のコヒーレンシ状態変更をトリガしないことを保証する安全投機的読取りトランザクションの処理を示す図である。
【図４Ｃ】トランザクションをトリガした読取り動作が投機的なままである間、トランザクションが別のキャッシュ中のコヒーレンシ状態変更をトリガしないことを保証する安全投機的読取りトランザクションの処理を示す図である。
【図５】安全投機的読取りトランザクションが、要求マスタのキャッシュ中のキャッシングを許可しないコヒーレンシ状態のデータにヒットしたときのケースを処理するための図４Ｃの第１の代替を示す図である。
【図６】図４Ｃに示されたケースを処理することの第２の代替を示す図である。
【図７】複数のリクエスタによって割り振られたデータをキャッシュするための共有キャッシュの実例を示す図である。
【図８】データを割り振ったロード動作に関連付けられた投機の決定（resolution）時の投機的エントリの非投機的エントリへの昇格を示す方法である。
【図９】所与のリクエスタによってトリガされた読取り要求に応答した共有キャッシュのルック・アップを示す流れ図を示す図である。
【図１０】決定済みの正しいメモリ・アクセスのアドレスに基づいてデータ・プリフェッチャをトレーニングする実例を示す図である。
【図１１】データ・プリフェッチャが投機的メモリ・アクセスのアドレスに基づいてトレーニングされ、プリフェッチ・データがキャッシュの投機的領域に最初に割り振られた実例を示す図である。
【発明を実施するための形態】
【０００８】
データ処理装置は、何らかの機密情報が、データ処理システム上で動作するいくつかのプロセスにとってアクセス可能であるが、他のプロセスによってアクセスされ得ないことを保証するためのセキュリティ機構を有し得る。たとえば、プロセスは所与の特権レベルを割り振られ得、あるデータは、ある特権レベル又はより高い特権レベルを有するプロセッサのみにとってアクセス可能であり得る。所望のメモリ・アクセス許可を執行するために、メモリ保護技法が使用され得る。
【０００９】
最近、不正なアクセスから機密データを保護するそのようなセキュリティ対策は、原則として、多くの現代のプロセッサ中に存在する投機的実行とキャッシングとの組合せを活用するセキュリティ攻撃によって回避され得ることが認識されている。そのような攻撃は、投機的に実行された命令のアーキテクチャ効果がキャンセルされた後でさえ、投機的に実行された命令の効果がキャッシュ中で持続し得るという性質を活用する。攻撃のいくつかの変形態では、攻撃者は、機密性の高い情報が推論されることを可能にし得る何らかの情報を与えるために、機密性の高い情報へのアクセスを有しない特権が低いコードが、どのアドレスがより特権が高いコードによってキャッシュに割り振られたか又はキャッシュからエビクト（evict）されたかをプローブするために（キャッシュされたアドレスについてのアクセス時間を測定する）キャッシュ・タイミング・サイドチャネルを使用することができるように、より特権が高いコードをだまして、特権が高いコードにその機密性の高い情報に依存するメモリ・アドレスのパターンにアクセスさせるように設計された命令の正しくないシーケンスを投機的に実行させるために、分岐予測器又は他の投機機構をトレーニングし得る。同じマスタ・デバイス上で実行される投機的読取り動作によって引き起こされるキャッシュ割振りの変更に関するサイドチャネル情報をさらすことからマスタ・デバイス自体のキャッシュを保護するためのいくつかの機構（たとえば、キャッシュ中の投機的データと非投機的データとを区分すること）が利用可能である。
【００１０】
しかしながら、発明者らは、投機的に実行される読取りの影響を受け得るのは、マスタ自体のキャッシュ中のキャッシュ割振りの変更だけでないことに気付いた。関連付けられたキャッシュを有する２つ又はそれ以上のマスタ・デバイスと、所与のキャッシュ中のデータの各アイテムにいくつかのコヒーレンシ状態のうちの１つを割り当てるコヒーレンシ・プロトコルに基づいて、関連付けられたキャッシュ間のコヒーレンシを管理するためのコヒーレンシ制御回路とを備えるシステムでは、読取り動作が、あるマスタ・デバイスによって投機的に実行されたとき、そのような読取りが、第２のマスタのキャッシュ中にキャッシュされたデータに関連付けられたコヒーレンシ状態の変更をトリガし得ることも可能である。第２のマスタのキャッシュにおけるコヒーレンシ状態のこの変更は、要求マスタにおける元の投機的読取り動作が、その後、誤投機によりキャンセルされた場合でも、持続し得る。第２のマスタのキャッシュにおけるコヒーレンシ状態のその変更が、いずれかのデータを、第２のマスタのキャッシュからエビクトさせるか、又は第２のマスタのキャッシュに新たに割り振らせるものでない場合でも、コヒーレンシ状態の変更は、第２のマスタ・デバイスのキャッシュ中の読取り要求又は書込み要求をサービスするためにかかる時間の差を依然として生じ得る。第２のキャッシュにおけるアクセス時間のそのような差は、元の投機的読取りを開始した要求マスタ・デバイスによってどのアドレスがアクセスされたかに関する情報を推論するために、攻撃者によってプローブされ得る。このことは、機密データへのアクセスを有しないが、第２のマスタのキャッシュにおいてコヒーレンシ状態が変化したデータへのアクセスを有するプロセスが、要求マスタ・デバイスによって要求されたアドレスを導出するために使用された機密データのプロパティを推論するために使用され得る情報を得ることを可能にし得る。
【００１１】
以下で説明する技法では、コヒーレンシ制御回路は、安全投機的読取りトランザクションに応答した、他のマスタ・デバイスのキャッシュ中のターゲット・データに関連付けられたコヒーレンシ状態の変更を禁止しながら、ターゲット・データが要求マスタ・デバイスに戻されることを要求するタイプである、要求マスタ・デバイスから受信された安全投機的読取りトランザクションの処理をサポートし得る。安全投機的読取りトランザクションに応答して、少なくとも、ターゲット・データが第２のマスタ・デバイスに関連付けられた第２のキャッシュ中にキャッシュされたとき、コヒーレンシ制御回路と第２のキャッシュとのうちの少なくとも１つは、ターゲット・データを第２のキャッシュ内で同じコヒーレンシ状態に維持しながら、安全投機的読取り応答を戻し得る。
【００１２】
したがって、どんな応答が戻されても、安全投機的読取りトランザクションが別のマスタ・デバイスのキャッシュ中のコヒーレンシ状態の変更をトリガしないことを保証するように、要求マスタ・デバイスが発行することができる読取りトランザクションのタイプを定義することによって、このことは、上記で説明したタイプの攻撃を軽減することができる。読取りが投機的に実行されると、これらの読取りは、別の形態のトランザクションとは対照的に、第２のマスタのキャッシュにおいてコヒーレンシ状態の変更が行われず、したがって、このことが、第２のキャッシュ中に割り振られたデータを検査することに基づいて、要求マスタ・デバイスによってどのアドレスが要求されたかに関する情報を導出する機会をなくすように、安全投機的読取りトランザクションをトリガすることができる。
【００１３】
通常、要求マスタ・デバイスは、データのあるアイテムが戻されることを要求するコヒーレンシ・トランザクションを発行するであろうし、ターゲット・データは、他のキャッシュ中のデータに関連付けられたコヒーレンシ状態にかかわらず、（トランザクションのタイプに基づいて指定される）あるコヒーレンシ状態で戻されるべきであることが予想されるであろうことから、この手法は普通でない。そのような従来のトランザクションは、ターゲット・データが要求マスタに戻され、要求マスタのキャッシュ中にキャッシュされ得ることを保証するために必要とされるコヒーレンシ状態の変更を、他のキャッシュがトリガすべきであることを必要とするだろう。対照的に、安全投機的読取りトランザクションを用いると、他のマスタ・デバイスのキャッシュにおけるコヒーレンシ状態の変更がないことを保証することが優先であり、このことが可能であることを保証する応答が戻されるが、ターゲット・データが要求マスタ・デバイスに実際に戻され得るか否か、及び／又はどんなコヒーレンシ状態でデータが戻されるかは随意的なままにされ得る。ターゲット・データを戻すことが可能であるかどうかは、ターゲット・データが別のマスタのキャッシュ中にキャッシュされる場合、どんなコヒーレンシ状態がターゲット・データに関連付けられるかに依存し得る。したがって、要求マスタ・デバイスにおいて既知のコヒーレンシ状態を戻し、第２のキャッシュにおいてコヒーレンシ状態の必要とされる変更を執行するのではなく、安全投機的読取りトランザクションは、第２のキャッシュにおけるコヒーレンシ状態が同じままであることを保証するが、要求マスタ・デバイスにおける異なる結果につながり得る。
【００１４】
異なる実装形態は異なる方法で安全投機的読取りトランザクションに応答し得る。
【００１５】
１つの実例では、安全投機的読取りトランザクションに応答して、第２のキャッシュ中のターゲット・データのコヒーレンシ状態を変更することなしに要求キャッシュ中のターゲット・データのキャッシングを許可しないであろう、コヒーレンシ状態でターゲット・データが第２のキャッシュ中にキャッシュされたとき、コヒーレンシ制御回路又は第２のキャッシュは、安全投機的読取りトランザクションをトリガした投機的読取り動作が非投機的であると決定されるまで、ターゲット・データが第２のキャッシュによって与えられ得ないことを示すデータなし応答（no-data response）を戻し得る。この手法を用いると、第２のキャッシュ中のターゲット・データの現在のコヒーレンシ状態が、要求キャッシュ中のターゲット・データをキャッシュすることにも適応することができない場合、要求マスタ・デバイスのキャッシュにターゲット・データを与えることが現在可能でないことを示す応答が与えられ、したがって、この場合、要求マスタは、安全投機的読取りトランザクションに応答してターゲット・データを受信しない。
【００１６】
この実装形態を用いると、要求マスタ・デバイスがデータなし応答を受信した場合、要求マスタ・デバイスは、安全投機的読取りトランザクションをトリガした投機的読取り動作が正しく投機されたことが決定されるまで待機し得、次いで、他のキャッシュ中のターゲット・データに関連付けられたコヒーレンシ状態の変更を許可しながら、ターゲット・データが要求キャッシュに戻されることを要求するタイプである、さらなるトランザクションをコヒーレンシ制御回路に発行し得る。この時点で、元の読取りはもはや投機的でなく、したがって、間違って投機された読取り動作によって引き起こされたキャッシュ状態の変更に基づくセキュリティ攻撃はもはや危険でないであろう（元の投機が正しくなかった場合、投機に基づく継続された処理は、さらなるトランザクションが発行されないようにキャンセルされるであろう）ことから、他のキャッシュ中のコヒーレンシ状態の変更は安全であり得る。
【００１７】
代替手法では、第２のキャッシュ中のターゲット・データの現在のコヒーレンシ状態が要求キャッシュ中のターゲット・データのキャッシングを許可しないであろうときにターゲット・データが与えられ得ないという指示を戻す代わりに、安全投機的読取り応答は、要求マスタ・デバイスにターゲット・データを与えるが、要求キャッシュがターゲット・データをキャッシュすることを禁止する、キャッシュ不能読取り応答を代わりに備え得る。このことは、投機的に実行された読取り動作が、その特定の動作の結果として第２のキャッシュから戻されたターゲット・データを使用することを可能にすることができるが、次いで、この戻されたデータは、第２のキャッシュ中のコヒーレンシ状態の変更を与えることを必要とすることを回避するために、キャッシュされることなしに廃棄され得る。この場合も、このことは、攻撃者が、間違って投機された読取り動作によってトリガされたコヒーレンシ状態の変更から導出されたサイドチャネル情報に基づいて機密データに関する情報を得る機会を妨げる。
【００１８】
いくつかの実装形態では、キャッシュ不能読取り応答は、ターゲット・データが、コヒーレンシ・プロトコルに準拠するコヒーレント様式で要求マスタ・デバイス中にキャッシュされることを禁止し得るが、要求マスタ・デバイスは、投機的読取り動作が投機的なままである間、投機的読取り動作に関連付けられたデータをバッファするための非コヒーレントな投機的バッファを依然として有し得、キャッシュ不能読取り応答に応答して、戻されたターゲット・データは投機的バッファに割り振られ得る。このことは、元の投機的読取りの後に実行されるさらなる命令が、必要な場合、戻されたターゲット・データを使用して継続することを可能にし得る。しかしながら、第２のキャッシュ中のコヒーレンシ状態の変更をトリガすることを必要とすることを回避するために、投機的バッファ中のデータと第２のキャッシュ中のデータとの間でコヒーレンシは維持されないであろう。
【００１９】
データがコヒーレンシ方式の制御外でそのような投機的バッファ中に保持される場合、安全投機的読取りトランザクションをトリガした投機的読取り動作が正しく投機されたことが決定されると、要求マスタ・デバイスは、投機的バッファ中のターゲット・データの非コヒーレント・バージョンをターゲット・データのコヒーレント・バージョンにアップグレードすることを要求するために、コヒーレンシ制御回路にコヒーレント・アップグレード要求を発行し得る。たとえば、コヒーレント・アップグレード要求は、ターゲット・データの最新バージョンが（たとえば、他のマスタのキャッシュにおけるコヒーレンシ状態の変更をトリガすることを許容されるコヒーレンシ変更許可（coherency-change-permitting）トランザクションを使用して）要求マスタ・デバイスに戻されることの要求であり得る。ターゲット・データが第２のマスタ・デバイスのキャッシュ中に依然としてキャッシュされる場合、ターゲット・データは第２のキャッシュから戻され得るか、又は代替的に、投機的読取り動作が決定されたときまでに、第２のキャッシュはもはやデータを保持していないことがあり、データは別のロケーションからフェッチされる必要があり得る。投機的読取り動作が決定されると、ターゲット・データを再フェッチするための要求を発行することによって、このことは、マスタ・デバイスが潜在的に古い情報を使用し続けないように、他のロケーションにおいて保持されるターゲット・データの後続の変更がマスタ・デバイスにとって利用可能にされることを可能にする。再フェッチされたデータが戻されると、要求マスタ・デバイスは、次いで、このデータを、投機的バッファにではなく、要求マスタ・デバイスの要求キャッシュに割り振り、投機的バッファ・エントリをキャンセルし得る。代替的に、コヒーレント・アップグレード要求は、キャッシュ不能応答が受信された以後、データが変更されたかどうかの指示の要求であり得る。たとえば、コヒーレンシ制御回路及び／又は第２のキャッシュは、キャッシュ不能応答が与えられた以後、ターゲット・データに対する書込みが行われたかどうかを追跡し、書込みが行われた場合、投機的バッファ・エントリをキャンセルすることと最新のデータを再フェッチすることとをトリガするように要求マスタ・デバイスに通知し得る。
【００２０】
非コヒーレント投機的バッファにターゲット・データを割り振った後、ターゲット・データがキャッシュ不能読取り応答によって与えられた以後のターゲット・データに対する変更が間違った実行を引き起こすであろうことを決定したことに応答して、要求マスタ・デバイスは、キャッシュ不能読取り応答によって与えられたターゲット・データに基づいて投機的に実行される後続の動作をキャンセルし得る。このことは、間違った結果を防止するために、（他のキャッシュ・ロケーション中のターゲット・データに対する変更の後に更新されなかった）ターゲット・データの潜在的にインコヒーレントなコピーを使用した後続の動作がキャンセルされることを保証する。ターゲット・データに対する変更が間違った実行を引き起こすであろうかどうかの検出は、たとえば、投機的読取りトランザクションをトリガした命令が、ターゲット・データを読み取ること若しくは書き込む他の命令、又はバリア命令に対して並べ替えられたかどうかを決定することを含み得る。
【００２１】
したがって、コヒーレンシ・プロトコルは、キャッシュ不能読取り応答が要求マスタ・デバイスのキャッシュ内でコヒーレント様式で戻しデータをキャッシュすることを禁止することを必要とし得るとはいえ、マイクロアーキテクチャ・レベルでは、このデータをコヒーレンシ方式の保護外でバッファすることが可能であるが、この場合、したがって、データが非投機的になったとき、要求マスタ・デバイスのキャッシュにデータのコヒーレント・バージョンを割り振る前に、データが投機的バッファに割り振られた以後、データに対する後続の変更が行われたかどうかを検査するための機構（たとえば、後の投機的動作がインコヒーレントなデータを潜在的に使用していたことがあり得るかどうかを検査するために、データを再フェッチし、前にフェッチされた値と比較すること）が与えられ得る。
【００２２】
上記で説明したように、安全投機的読取りトランザクションがキャッシュ不能読取り応答をトリガする実装形態では、場合によっては、安全投機的読取り応答は、第２のキャッシュ中のターゲット・データのコヒーレンシ状態にかかわらず、キャッシュ不能読取り応答を常に備え得る。この場合、ターゲット・データが第２のキャッシュ中でミスし、さらなるキャッシュ又はメイン・メモリからフェッチされなければならない場合か、又はターゲット・データがコヒーレント様式で要求マスタ・デバイスの要求キャッシュ中にもキャッシュされることを許可したであろう、コヒーレンシ状態でターゲット・データが第２のキャッシュ中に保持される場合でも、要求キャッシュ中のコヒーレントなキャッシングを禁止するために、キャッシュ不能読取り応答が依然として戻され得る。このことは、どんな特定のコヒーレンシ状態が第２のキャッシュ中のターゲット・データに関連付けられたかにかかわらず、同じ応答が要求マスタ・デバイスに戻されることを意味し、そのことは実装することがより簡単であり得る。
【００２３】
代替的に、要求キャッシュ中のターゲット・データのキャッシングが、第２のキャッシュ中のターゲット・データにおけるコヒーレンシ状態を変更することなしに許可されないであろう、コヒーレンシ状態でターゲット・データが第２のキャッシュ中にキャッシュされたときのケースでは、キャッシュ不能読取り応答が戻され得る。しかしながら、安全投機的読取りトランザクションに応答して、要求キャッシュ中のターゲット・データのキャッシングが、第２のキャッシュ中のコヒーレンシ状態を変更することなしにコヒーレンシ・プロトコルによって許可されるであろう、コヒーレンシ状態でターゲット・データが第２のキャッシュ中にキャッシュされる場合、このケースでは、安全投機的読取り応答は、ターゲット・データを与え、要求マスタ・デバイスの要求キャッシュがコヒーレント様式でターゲット・データをキャッシュすることを許可する、キャッシュ可能読取り応答を代わりに備え得る。この手法は、第２のキャッシュ中のコヒーレンシ状態に応じて異なる応答を生じ得るが、そのことは、コヒーレンシ状態が要求キャッシュにおけるキャッシングを許可するとき、投機的読取りの後の命令がコヒーレンシ方式に準拠しながらデータを使用し続けることができるように、データが要求マスタ・デバイスにおいてコヒーレントに保持され得るので、潜在的にパフォーマンスを改善し、投機が決定されると、コヒーレンシを検査するための予防手段の必要がなくなることを意味する。
【００２４】
同様に、要求マスタのキャッシュ中のキャッシングを許可しない状態で、ターゲット・データが第２のキャッシュ中にキャッシュされるとき、データなし応答が戻される実施例では、要求キャッシュ中のキャッシングを許可するコヒーレンシ状態で、ターゲット・データがキャッシュされるとき、キャッシュ可能読取り応答が戻され得る。
【００２５】
安全投機的読取りトランザクション及び対応する安全投機的読取り応答の上記の実例のすべてについて、ターゲット・データが、コヒーレンシ・プロトコルに従って管理される他のキャッシュにないとき、コヒーレンシ制御回路は、複数のマスタ・デバイス間で共有される上位レベル・キャッシュ又はメモリからターゲット・データを取得し得る。すなわち、安全投機的読取りトランザクションは、上位レベル・キャッシュ又はメモリからターゲット・データを取得するためにラインフィル（linefill）動作を開始し、安全投機的読取りトランザクションをトリガした投機的動作が決定されるのを待つ必要なしに、ターゲット・データを所与のキャッシュに割り振ることができる。このことは、（代わりに標準読取りトランザクションが使用されたが、他のキャッシュ中でコヒーレンシ状態変更がトリガされないことを保証するために、読取りに関連付けられた投機が決定され、読取りが正しく投機されたことが確実に分かったときまで、読取りトランザクションの発行が遅延された、代替技法と比較して）安全投機的読取りトランザクションを実装することの利点である。読取りが正しいと決定されるときまでトランザクションがまったく発行されなかったならば、どのキャッシュも現在ターゲット・データを保持していない場合、投機が決定されるまで、ラインフィル要求は延期されなければならないであろう。ラインフィル動作は、一般に、キャッシュからデータにアクセスすることよりもはるかに遅いので、ラインフィル要求を遅延させることはパフォーマンスのかなりの低減を引き起こし得る。対照的に、安全投機的読取りトランザクションを用いると、別のキャッシュからターゲット・データを取得することは、まだ決定されていない投機的アクセスの結果として、コヒーレンシ状態が他のキャッシュにおいて変化しないことを保証するために遅延される必要が時々あり得るが、上位レベル・キャッシュ又はメイン・メモリに対する最も長いレイテンシ動作は、それでも安全投機的読取りトランザクションを使用して早く開始され得る。このことは、パフォーマンスを改善することを助ける。
【００２６】
安全投機的読取りトランザクションは、サポートされる読取りトランザクションの唯一のタイプであるとは限らないことが諒解されよう。要求マスタ・デバイスは、少なくとも潜在的に機密性が高いと考えられるデータに対する投機的読取り動作を実行するとき、安全投機的読取りトランザクションを使用する傾向があり得る。しかしながら、機密性が高くないことが分かっているデータに対する非投機的読取り動作又は投機的読取り動作において使用するために、他のタイプの読取りトランザクションが実装され得る。そのような他のタイプの読取りトランザクションは、別のマスタ・デバイスのキャッシュ中のコヒーレンシ状態の変更を許可しながら、ターゲット・データを戻し得る。一方、いくつかの実装形態について、すべての読取り（投機的又は非投機的）が安全投機的読取りトランザクションをトリガし得る。このことは、特に、すべてではないが、たいていの読取りが投機的に実行され、データが機密性の高いものであると考えられるか否かが安全に決定されることができないシステムにおいて、より効率的であり得る。したがって、一般に、安全投機的読取りトランザクションのためのサポートの提供は、サイドチャネル攻撃の危険から保護するために有用であり得るが、正確に、どの読取り動作が安全投機的読取りトランザクション又は別のタイプの読取りトランザクションをトリガするかは、実装形態ごとに変動し得る。
【００２７】
特定のマスタ・デバイスに関連付けられたキャッシュと同様に、システムは、マスタ・デバイス間で共有される１つ又は複数の共有キャッシュをも含み得る。共有キャッシュは、各要求が所与のマスタ・デバイスか、又は所与のマスタ・デバイス上で実行される所与のプロセスのいずれかを備える、いくつかのリクエスタのうちの１つによって要求に応じてアクセスされ得る。場合によっては、同じマスタ・デバイス上の異なるプロセスが別個のリクエスタとして識別され得る。そのような共有キャッシュは、この場合も、投機サイドチャネル攻撃のための潜在的な機会を生じ得る。パフォーマンスを改善するために、あるリクエスタは、異なるリクエスタによって割り振られたデータが非投機的に割り振られた後に、そのデータにアクセスすることができることが望ましいことがある。しかしながら、投機的に割り振られたデータについては、あるリクエスタが、別のリクエスタによって投機的に割り振られたデータが投機的なままである間、そのデータにアクセスし得る場合、このことは、攻撃者が、機密情報へのアクセスを有するあるリクエスタを、データをキャッシュに割り振るように制御して、間違って投機された読取りを、機密情報に依存するアドレスまでフォローすることを可能にし得、次いで、別のリクエスタが、どのアドレスが割り振られたかを共有キャッシュ・アクセス・タイミング情報から決定し、したがって、機密に関する情報を導出することが可能であろう。このことは望ましくないであろう。
【００２８】
この問題に対処するための技法は、データを共有キャッシュのために投機的に割り振らせる割振りリクエスタが追跡されるように、共有キャッシュを動作させることであり得る。割振りリクエスタによって共有キャッシュに投機的に割り振られたデータを読み取るための要求に応答して、データの割振りをトリガする動作が投機的なままである間、共有キャッシュは、要求が割振りリクエスタ以外のリクエスタによってトリガされたとき、データが共有キャッシュ中にキャッシュされていないことを示すミス応答を戻し得る。したがって、割振りリクエスタ自体は、投機的に割り振られたデータにヒットし得、したがって、この情報を共有キャッシュ中にキャッシュすることに関連付けられた性能利得から利益を得ることができるが、他のリクエスタは、任意の投機が決定され、データが正しく割り振られたことが決められるまで、データをまだ参照することができない。このことは、攻撃者が共有キャッシュ中の間違った投機的割振りについてのサイドチャネル情報を獲得することを可能にすることを回避する。
【００２９】
言い換えれば、割振りリクエスタによって共有キャッシュに投機的に割り振られたターゲット・データを読み取るための所与のリクエスタによる要求に応答して、データの投機的割振りをトリガする動作が投機的なままである間、共有キャッシュは、所与のリクエスタが割振りリクエスタであるとき、ターゲット・データを与えるヒット応答を戻し、所与のリクエスタが割振りリクエスタ以外のリクエスタであるとき、データが上位レベル・キャッシュにないことを示すミス応答を戻し得る。
【００３０】
異なるリクエスタによって割り振られた投機的データにヒットしたときにミス応答を戻すケースにおいて、キャッシュに投機的に割り振られたデータがダーティ（dirty）である場合、キャッシュはまた、ミス応答を戻す前に、又はミス応答を戻すことと並行して、ダーティなデータを上位レベル・キャッシュ又はメモリにライトバック（write back）し得る。
【００３１】
上位レベル・キャッシュ又はメモリは、対応する投機的動作が間違って予測されたことが決定された場合に投機的データが識別され、廃棄され得るように、投機的データと非投機的データとを区別するための機構を有し得る。共有キャッシュはまた、データが上位レベル・キャッシュ又はメモリから共有キャッシュに投機的にフェッチされた場合、投機が間違っていたことがわかった場合にデータを上位レベル・キャッシュ又はメモリにライトバックする必要がないように、データがクリーンな（clean）状態で取得されることを保証し得る。
【００３２】
共有キャッシュは異なる方法で実装され得る。１つの実例では、共有キャッシュは、投機的キャッシュ領域と、別個の主キャッシュ領域とを有し得る。投機的に割り振られたデータは投機的キャッシュ領域中に記憶され得るが、非投機的に割り振られたデータは主キャッシュ領域中に記憶され得る。投機的に割り振られたデータは、データの割振りをトリガした動作が割振りリクエスタによって非投機的であると決定されたという指示に応答して、主キャッシュ領域に転送され得る。場合によっては、投機的に割り振られたデータの非投機的主キャッシュ領域への昇格をトリガするために、各投機的動作の決定が共有キャッシュに個々にシグナリングされ得るが、このことは共有キャッシュとの大量の通信を生じ得る。各キャッシュ・エントリを、投機的に実行される動作の特定のグループに関連付け、次いで、グループ中の動作の各々が正しく決定されると、このことが、そのグループ中の動作に関連付けられたエントリの投機的キャッシュ領域から主キャッシュ領域への転送をトリガし得ることは、より効率的であり得る。
【００３３】
別の実例では、共有キャッシュ中の単一の投機的キャッシュ領域がすべてのリクエスタの間で共有され得る。この場合、投機的キャッシュ領域の各エントリは、所与のリクエスタからの要求がヒットとして処理されるべきか又はミスとして処理されるべきかが制御され得るように、どのリクエスタが割振りリクエスタであったかを識別するメタデータをさらに指定し得る。代替的に、いくつかの異なる別個の投機的キャッシュ領域が所与のリクエスタにそれぞれ対応して与えられ得、この場合、所与のリクエスタからの要求は、特定のリクエスタに専用である投機的キャッシュ領域中でのみヒットし得る。
【００３４】
代替的に、投機的データと非投機的データの両方が共有キャッシュの同じ領域内でキャッシュされ得る。この場合、共有キャッシュは、データが投機的なままであるかどうかを示し、データが投機的なままである場合、どのリクエスタが割振りリクエスタであるかを示す、共有キャッシュ中のデータの各アイテムに関連付けられたメタデータを記憶し得る。この場合、所与の動作又は動作のグループが正しく投機されているという決定は、したがって、データが今非投機的であることを示すために、その動作又は動作のグループによって割り振られたアイテムに関連付けられたメタデータの更新をトリガし得る。
【００３５】
どのエントリが各リクエスタに関係するかを区別するためにメタデータが使用される場合、投機的データを記憶するために所与のリクエスタに割り振られ得るエントリの最大数、又はキャッシュ・エントリの競合があまり起こらないほど十分大きくなるように選定される共有領域のサイジングを制限するために、区分方式が依然として適用され得る。このことは、さもなければタイミング情報を漏洩する危険にさらし得る、あるリクエスタが別のリクエスタの投機的データをエビクトする可能性を低減するために有用であり得る。
【００３６】
第１のリクエスタが共有キャッシュに投機的データを割り振り得たにもかかわらず、第２のリクエスタが共有キャッシュ中のキャッシュ・ミスを認知し得る場合、いくつかの実装形態は、第２のリクエスタが同じアドレスのための第２のエントリをも割り振ることを可能にし得る。この場合、投機が決定されたとき、別個のエントリが、コヒーレンスを維持しながら単一のエントリに融合（coalesce）され得るように、第１のリクエスタに関連付けられたエントリと第２のリクエスタに関連付けられたエントリの一方又は両方に何らかの追加の追跡情報が割り当てられ得る。代替的に、他の実装形態は、所与のエントリが投機の決定時に投機的から非投機的に昇格されるとき、同じアドレスのための追加の投機的エントリが無効にされることを必要とすることによって、共有キャッシュ中の同じアドレスのための別個のエントリの処理の複雑さを低減し得る。
【００３７】
攻撃者らが投機的サイドチャネルに基づいて活用し得る別の領域は、処理回路によって前に実行されたデータ・アクセス動作のアドレスに基づいて予測されるプリフェッチ・アドレスに基づいて、データをキャッシュに投機的にプリフェッチするためのデータ・プリフェッチャの存在であり得る。たとえば、データ・プリフェッチャは、たとえば、アドレスが所与のストライド・パターン（stride pattern）（連続アドレス間の一定のオフセットをもつアドレスのシーケンス）を用いて実行されているかどうかを検出するために、前にアクセスされたアドレスの監視に基づいてプリフェッチ・アドレスを予測するための回路を有し得る。攻撃者は、たとえば、ストライドがそこから開始したベース・アドレス、又は連続アドレス間のオフセットが機密の一部に依存する場合、実行されるストライド・パターンが機密情報に何らかの形で依存するように、所与のプロセッサの動作を制御することが可能であり得る。したがって、投機的に実行された命令のアドレスに関してトレーニングされたデータ・プリフェッチャは、ベース・アドレス又はデータ・ストライド中で暴露することによって情報を漏洩し得る。
【００３８】
以下で説明する１つの技法では、キャッシュとデータ・プリフェッチャとを有するシステムは、キャッシュ及びデータ・プリフェッチャが、投機的に実行されたデータ・アクセス動作の、前にアクセスされたアドレスに基づいて予測されたプリフェッチ・アドレスに基づいて、データ・プリフェッチャによって投機的にプリフェッチされたデータが、キャッシュからの非投機的データのエビクションをトリガすることを禁止するように制御され得る。このことは異なる方法で達成され得る。
【００３９】
１つの実例では、データ・プリフェッチャは、もっぱら、処理回路によって正しく投機されたことがすでに決定されたデータ・アクセス動作に関連付けられた、前にアクセスされたアドレスに基づいて、プリフェッチ・アドレスを予測し得る。まだ投機的であり、間違っていることがあるアドレスに基づいてではなく、決定されたデータ・アクセス動作の正しく計算されたアドレスのみに基づいてデータ・プリフェッチャをトレーニングすることによって、このことは、間違ってアクセスされたアドレスが将来のプリフェッチ予測に影響を及ぼさないので、データ・プリフェッチャが情報を漏洩する危険が低減されることを意味する。
【００４０】
代替手法は、主キャッシュ領域と投機的キャッシュ領域とを備えるキャッシュを与えることであり得る。キャッシュは、この場合、データ・プリフェッチャによってプリフェッチされたデータを投機的キャッシュ領域に割り振るように構成され得、データの所与のアイテムのためのプリフェッチ・アドレスの予測が正しかったことが決定されると、次いで、キャッシュは、データのその所与のアイテムを主キャッシュ領域に転送し得る。この手法を用いて、まだ決定されていない投機的メモリ・アクセスのアドレスに基づいてデータ・プリフェッチャをトレーニングすることが可能であるが、投機的アクセスが正しいことが分かるまで、投機的アクセスに基づいて主キャッシュ領域を汚染することを回避することによって、このことは、攻撃者が、主キャッシュ領域のコンテンツの分析に基づいて、どのデータ・アドレスがプリフェッチされたかに関する情報を得ることができないように、非投機的データが投機的にプリフェッチされたデータによってエビクトされることを妨げる。プロセッサが、投機的データが割り振られた、同じ動作状態のままである間、投機的キャッシュ領域のコンテンツは、さらなるデータ・アクセス動作にとってアクセス可能であり得る。しかしながら、投機的キャッシュ領域に割り振られたデータは、たとえば、より特権が高いコードから攻撃者のより特権が低いコードへの遷移が、正しかったことがまだ確認されていない、前に投機的にプリフェッチされたデータをアクセス不可能にするように、イベント（たとえば、イベントは、例外、特権レベルの変更、セキュリティ・モードの変更などであり得る）より前にアクセス可能であったある何らかのデータへのアクセスを有しないであろうコードへの遷移を潜在的に示し得る、状態の変更を表すそのイベントに応答して廃棄され得る。
【００４１】
したがって、これらの手法のうちのどれがプリフェッチャのために取られるかにかかわらず、正しかったことがまだ分かっていない投機的に実行されたデータ・アクセス動作の、前にアクセスされたアドレスに基づいて予測されたアドレスからデータをプリフェッチすることの結果として、キャッシュから非投機的データをエビクトするオプションがなくなることによって、このことは、上記で説明したタイプの投機サイドチャネル攻撃の範囲を縮小する。
【００４２】
図１は、いくつかのマスタ・デバイス４、６と、マスタ・デバイスと他のキャッシュとの間のコヒーレンシを管理するための相互接続１０とを含む、データ処理システム２（たとえば、集積回路又はシステムオンチップ）の実例を概略的に示す。この実例では、マスタ・デバイスは、汎用処理を実行するための中央処理ユニット（ＣＰＵ）４と、グラフィックス処理を実行するためのグラフィックス処理ユニット（ＧＰＵ）６とを含む。ＣＰＵ及びＧＰＵはキャッシュ１１、１２を含む。いくつかのマスタは、２つ以上のキャッシュ、たとえば、特定のコア９に関連付けられたレベル１キャッシュと、コア間で共有されるレベル２キャッシュとを有し得る（簡明のために、マスタ当たり単一のキャッシュが図１に示されている）。マスタ・デバイス４、６の各々は、コヒーレント相互接続と対話するためのコヒーレンシ・インターフェース１６、２２を有する。たとえば、コヒーレンシ・インターフェース１６、２２は、関連があるマスタからのキャッシュ・アクセスに応答して、必要とされるコヒーレンシ・プロトコル・トランザクションを生成することと、適切な応答とコヒーレンシ状態の変更とを用いて相互接続１０からのスヌープ要求に応答することとを担当し得る。これは、いくつかのマスタ・デバイスの単なる１つの実例であり、たとえば、ネットワークを介したデータ送信及び受信を制御するためのネットワーク・インターフェース・コントローラ、スクリーン上のデータの表示を制御するためのディスプレイ・コントローラ、又はメモリと周辺デバイスとの間のデータの転送を制御するためのＤＭＡ（ダイレクト・メモリ・アクセス）コントローラなど、他のタイプのマスタも与えられ得ることが諒解されよう。使用され得るコヒーレンシ・プロトコルの実例は、英国、ケンブリッジのＡｒｍ（登録商標）社によって提供されるＡＭＢＡ（登録商標）４ＡＣＥコヒーレンシ・プロトコル及びＡＭＢＡ（登録商標）５ＣＨＩコヒーレンシ・プロトコルであるが、本明細書で説明した技法は他のコヒーレンシ・プロトコルにも適用され得ることが諒解されよう。
【００４３】
コヒーレント相互接続１０は、それぞれのマスタ・デバイス４、６のコヒーレンシ・インターフェース１６、２２と通信するためのいくつかのスレーブ・インターフェース２４と、メモリ３３、又はマスタ・デバイス上で実行される動作に対する暗号サポートを与えるための暗号ユニット３４などのスレーブ・デバイスと通信するためのいくつかのマスタ・インターフェース２６とを備える。この文脈では、スレーブ・インターフェース２４は、使用されているバス・プロトコル（上記で説明したＡＭＢＡ（登録商標）プロトコルなど）において（トランザクションを開始するのではなくトランザクションに応答する）スレーブとして働くインターフェースである。したがって、マスタ・デバイス４、６と通信するインターフェース２４は、マスタ・デバイス４、６における対応するマスタ・インターフェース１６、２２によって開始されたトランザクションに応答するので、インターフェース２４はスレーブ・インターフェースである。同様に、マスタ・インターフェース２６は、バス・プロトコルにおけるマスタとして働き、対応するスレーブ・インターフェースが応答するトランザクションを開始することを担当するインターフェースである。したがって、スレーブ・デバイス３３、３４と通信する、相互接続１０のインターフェース２６はマスタ・インターフェースである。図１に示されていないが、いくつかのデバイスは、マスタ・ポートとスレーブ・ポートの両方を介して相互接続１０と通信し得る。コヒーレント相互接続１０は、マスタ・デバイス間で共有されるシステム・キャッシュ３０を備え得る。システム・キャッシュ３０は、対応するデータがメイン・メモリ３３からフェッチされなければならない場合よりも、データに対する速いアクセスを与える。
【００４４】
図１に示されているように、コヒーレント相互接続１０は、特定のマスタ・デバイス４、６においてどのデータ・アドレスがキャッシュされるかを追跡するためのスヌープ・フィルタ４０を含み得る。スヌープ・フィルタ４０は、コヒーレント相互接続１０が、データが特定のマスタにおいてキャッシュされていないときを決定することを可能にすることによって、スヌープ・トラフィックを低減するために使用され得る。スヌープ・フィルタ４０は必須でなく、いくつかの実施例では、各マスタにおいてキャッシュされたデータを追跡することを試みない相互接続１０を与え得る。この場合、あるマスタ４、６が、他のマスタと共有され得るデータに対する読取りトランザクション又は書込みトランザクションを発行したとき、コヒーレント相互接続１０は、同じアドレスからのデータのキャッシュされたコピーを有し得る各他のマスタに発行されるようにスヌープ・トランザクションをトリガし、必要に応じて、それらの他のマスタにおけるコヒーレンシ状態の変更、及び／又はデータのより最新のバージョンをもつ要求マスタに対する応答を管理し得る。しかしながら、多くのマスタがある場合、すべてのキャッシュされたマスタにスヌープをブロードキャストするこの手法は複雑であり、大量のコヒーレンシ・トラフィックがシステム２内で交換されることになり得る。
【００４５】
どのアドレスがそれぞれのマスタにおいてキャッシュされるかを少なくとも部分的に追跡することができるスヌープ・フィルタ４０を与えることによって、このことは、スヌープ・トラフィックの量を低減することを助けることができる。場合によっては、スヌープ・フィルタ４０は、コヒーレント相互接続１０が、どのデータがどこにキャッシュされるかを厳密に決定することができるように、各マスタのキャッシュ中に記憶されたデータを正確に追跡し得る。したがって、潜在的に共有可能なデータを対象とするトランザクションが開始マスタから受信されたとき、相互接続１０は、スヌープ・フィルタ４０のコンテンツから、どの他のマスタが同じアドレスからのデータをキャッシュしているかを決定し、スヌープ・フィルタ中に示されているそれらのマスタにスヌープ・トランザクションを送るので、データを現在記憶していない他のマスタにスヌープを送る必要を回避することができる。
【００４６】
しかしながら、他のスヌープ・フィルタはキャッシュのコンテンツを正確に追跡しないことがある。たとえば、スヌープ・フィルタ４０がフォールス・ネガティブを回避することを保証し、キャッシュ１１、１２中に存在するデータがスヌープ・フィルタ中に、存在するものとしてログされることを保証するフィルタ方式が使用され得るが、そのフィルタ方式は何らかのフォールス・ポジティブを許すので、時々、スヌープ・フィルタ４０は、そのデータが所与のマスタ中にキャッシュされていることを示し得るが、実際には、マスタはすでにデータを無効にしている。何らかの不正確さを許容するこの手法は、マスタのキャッシュ１１、１２からのすべての無効化がスヌープ・フィルタにおいて反映される必要があるとは限らないことを意味するので、スヌープ・フィルタを更新することのオーバーヘッドを低減することができる。
【００４７】
場合によっては、システム・キャッシュ３０とスヌープ・フィルタ４０とが組み合わせられ得る。たとえば、システム・キャッシュ３０が、マスタのキャッシュ１１、１２のいずれかによってキャッシュされたすべてのアドレスをキャッシュするインクルーシブ（inclusive）キャッシュとして働く場合、各キャッシュ・エントリは、コヒーレント相互接続１０が、マスタをスヌープする必要なしに、データがシステム・キャッシュ３０から特定のマスタにおいてキャッシュされているかどうかを決定することができるように、どのキャッシュがどのアドレスをキャッシュしたかを識別する追加のメタデータを指定し得る。
【００４８】
図２は、コヒーレンシ変更許可読取りトランザクションを処理する実例を示す。これは、他のキャッシュにおけるコヒーレンシ状態の変更によって機密情報を暴露しないことが保証されることができず、したがって、いくつかの投機的読取り動作に応答して使用されることが安全でないことがあるタイプの読取りトランザクションである。読取りトランザクションは、ターゲット・アドレスを指定し、そのアドレスに関連付けられたターゲット・データを、要求を発行した要求マスタ４、６に戻す。以下の実例では、要求を発行した要求マスタがＣＰＵ４であり、要求に基づいてスヌープされる第２のマスタがＧＰＵ６であることが仮定されているが、このことは逆になり得ることが諒解されよう。
【００４９】
図２Ａは、読取りトランザクションが第２のマスタ６の第２のキャッシュ１２中でヒットを生じる実例を示す。したがって、要求マスタ４がコヒーレンシ変更許可読取りトランザクションを発行したとき、相互接続１０は第２のマスタ６にスヌープ要求を発行する。応答して、第２のマスタは、第２のマスタのキャッシュ中のターゲット・アドレスをルック・アップし、第２のマスタがターゲット・データを有効な状態に保持していることを決定する。第２のマスタのキャッシュ中のターゲット・データの現在のコヒーレンシ状態が、ターゲット・データが要求マスタ４のキャッシュ１１中に同時にキャッシュされることを許可しないであろう場合、第２のマスタのキャッシュは、第２のキャッシュ１２中のターゲット・データのコヒーレンシ状態を、要求マスタにおいてキャッシュされているデータに一致する状態に変更する。
【００５０】
たとえば、コヒーレンシ・プロトコルは、所与のキャッシュについて、各キャッシュ・ラインのための以下のコヒーレンシ状態のうちの１つを定義し得る。
・修正（Modified）（キャッシュは、キャッシュ・ラインの唯一の有効なコピーを保持しており、データを修正した）。
・排他（Exclusive）（キャッシュは、キャッシュ・ラインの唯一の有効なコピーを有し、データはクリーンである）。
・共有（Shared）（キャッシュは、キャッシュ・ラインの有効なコピーを保持しているが、このキャッシュは、データを修正する権限を有さず、他のキャッシュも有効なコピーを保持していることもあり、保持していないこともある）。
・所有（Owned）（キャッシュは、ダーティである、キャッシュ・ラインの有効なコピーを保持しており、したがって、このキャッシュは、キャッシュ・ラインがエビクトされた場合、データをメモリにライトバックする必要があり、他のキャッシュも有効なコピーを保持していることもあり、保持していないこともある）。
・無効（Invalid）（キャッシュは、各キャッシュ・ラインの有効なコピーを保持していない）。
たとえば、スヌープされたターゲット・データのコヒーレンシ状態が排他又は修正であった場合、要求マスタにおいてデータをキャッシュするために、このことは、第２のマスタのキャッシュ１２中のコヒーレンシ状態の共有又は所有への格下げを必要とし得る。読取りトランザクションによってトリガされる特定のコヒーレンシ状態遷移は、使用されている特定のコヒーレンシ・プロトコルに依存し得る（上記で説明したＭＯＥＳＩプロトコルは単なる１つの実例であることが諒解されよう）。いかなる場合も、第２のマスタ６のキャッシュ１２中でスヌープされたデータのコヒーレンシ状態にかかわらず、データは相互接続１０を介して要求マスタ４に戻され、次いで、要求マスタは、戻されたデータを要求マスタのキャッシュ１１中にキャッシュする。
【００５１】
図２Ｂは、要求が第２のマスタのキャッシュ１２中でミスした（及びコヒーレント相互接続によって管理される他のマスタのキャッシュにおいてもミスした）ときのコヒーレンシ変更許可読取りトランザクションに対する応答を示す。この場合、第２のマスタ６が相互接続１０によってスヌープされたとき、第２のマスタは、さらなるキャッシュ又はメイン・メモリ３３に対するラインフィル要求を発行するようにコヒーレンシ制御回路（相互接続）１０をトリガする、データが第２のマスタ６のキャッシュ１２中に存在しなかったことを示すミス指示を戻す。場合によっては、スヌープ・フィルタ４０が、データが第２のマスタのキャッシュ中に存在しないことを示す場合、第２のマスタ６を実際にスヌープし、ミス指示を受信する必要がないことがあり、代わりに、相互接続１０は、要求マスタ４から受信された読取りトランザクションに応答して、ラインフィル要求を直接トリガすることができる。
【００５２】
したがって、読取りトランザクションが、相互接続１０によって管理されるすべての他のキャッシュ中でミスした場合、ラインフィル要求は、さらなるキャッシュ（たとえば、ダウンストリーム相互接続又はメモリ・コントローラ中のシステム・キャッシュ）から、又はメモリ３３からデータをフェッチするようにトリガされる。ラインフィル要求は、データがマスタのキャッシュのうちの１つにおいて利用可能であった場合よりも、サービスするために長くかかり得る。最終的に、さらなるキャッシュ又はメモリはデータを相互接続に戻し、次いで、データは要求マスタ４に与えられ、要求マスタのキャッシュ１１中にキャッシュされる。
【００５３】
したがって、要求がマスタのキャッシュ中でヒットするか、ミスするかにかかわらず、コヒーレンシ変更許可読取りを用いて、要求マスタ４は、データを常に取得し、そのデータを要求マスタ４自体のキャッシュ中にキャッシュする。必要な場合、要求マスタがデータをキャッシュすることを許可するように、他のマスタのキャッシュにおいてコヒーレンシ状態の変更がトリガされ得る。図２Ａ及び図２Ｂに示された読取りトランザクションの実例は、サポートされ得る読取りトランザクションの１つのタイプにすぎず、コヒーレント相互接続１０は、図２Ａ及び図２Ｂに示されたものと異なる様式で処理され得るが、第２のマスタのキャッシュ１２におけるコヒーレンシ状態の変更に潜在的につながり得る、他のタイプの読取りトランザクションをもサポートし得ることが諒解されよう。
【００５４】
ＣＰＵ４若しくはＧＰＵ６又は他のマスタは、メモリからデータを読み取るための読取り動作をトリガすることができる命令を含む、命令の投機的実行をサポートし得る。信頼されたアプリケーション中で実行された投機的ロードは、キャッシュ・タイミング・サイドチャネルを使用して信頼されないアプリケーションにデータを漏洩することができる。そのようなサイドチャネル攻撃の１つの実例は「Ｓｐｅｃｔｒｅ」攻撃において記載された。攻撃は、以下の（又は同様の）コード・シーケンスを使用する。
【数１】
2021520545.tif 000003
ＣＰＵが「ｉｆ」条件を誤投機した（誤投機を誘導するための機構は分岐予測器の悪意のあるトレーニング、及び／又はアウト・オブ・バウンズ（out of bounds）アレイ・インデックスの供給を含む）場合、ＣＰＵはメモリからの第１の値、及び潜在的に第２の値を投機的にフェッチする。第２のアクセスによって使用されるキャッシュ・セットはデータ依存性であり、簡単なタイミング・サイドチャネルを使用して検出され得るので、キャッシュ・サイドチャネルを使用することによって、機密の値を推論することが可能である。そのようなサイドチャネルは、ローカルキャッシュ階層をプローブすることによって、又は投機的アクセスに関連付けられたコヒーレンス効果をプローブすることによって活用され得る。
【００５５】
機密の値は第１のアレイの境界の外側に常駐するので、機密の値を抽出することを試みるとき、上記の実例における条件は常に偽であり、すなわち、アクセスは決して非投機的にならない。投機的状態が非投機的状態に影響を及ぼすことを決して許容されない場合、上記のタイミング・サイドチャネルは無効になるであろう。キャッシュについて、投機的ロードは、キャッシュ・ラインの投機的／非投機的状態とは無関係にキャッシュ・ラインをインストールし、エビクトすること、特に、投機的ラインによって非投機的ラインに測定可能に影響を与えることによって、非投機的状態に影響を及ぼすことができる。そのような分離を達成するための１つの方法は、以下の特性をもつ。
・投機的アクセスは、キャッシュの分離された部分にインストールされるべきであり、他のマスタから非投機的キャッシュ・ライン又は投機的キャッシュ・ラインをエビクトするか、又はそれらのキャッシュ・ラインの状態に可視的に（タイミングによって）影響を及ぼすことを可能にされるべきでない。
・ロードがリタイア（retire）する（又はより早く非投機的になる）と、投機的キャッシュ・ラインが非投機的キャッシュ・ラインに昇格される。
・ハードウェア・プリフェッチャは、投機的アクセスとして処理されるか、又はサイドチャネルを回避するために、投機的アクセスではなく昇格に関してトレーニングすべきである。
たとえば、シングルコア中のキャッシュのために、投機的データに専用の、主キャッシュ領域とは別個の投機的領域が追加され得る。投機的領域中のキャッシュ・ラインは、ロードがスカッシュ（squash）された場合にロードがリタイアし、無効にされたとき、非投機的キャッシュ・ラインに昇格される。昇格すると、投機的キャッシュ・ラインは、必要とされる場合、非投機的キャッシュ・ラインをエビクトし、そのラインは無効にされる。キャッシュの投機的領域は、（前に説明したロードをスカッシュすることから生じる）コンテキスト・スイッチ／システム・コール又は投機バリア上でクリアされ得る。コアはまた、そうするように構成された場合、誤投機された分岐をロールバック（roll back）するときに投機的ラインをクリアし得る（このことは、信頼されないコードからアプリケーションを保護する、より厳密な保証を与える）。
【００５６】
しかしながら、攻撃者らにとって有用なサイドチャネル情報も、別のマスタ上の投機的読取り動作によってトリガされた、あるマスタのキャッシュ中のコヒーレンシの変更によって漏洩され得る。すなわち、攻撃者は、図２Ａに示されているように、読取りトランザクションによってトリガされ得る、第２のマスタ６中のコヒーレンシ状態の変更をプローブするためにキャッシュ・タイミング・サイドチャネルを使用することができるので、図２Ａ及び図２Ｂに示されたタイプの読取りトランザクションはそのような機密情報を漏洩し得る。図３は、上記で説明したように、コヒーレンシを管理するためのコヒーレント相互接続を有するシステム中の第１のマスタ、たとえばＣＰＵ４、及び第２のマスタ、たとえばＧＰＵ６上で実行される処理を制御することができる攻撃者によって、そのような攻撃がどのように行われ得るかの実例を示す。
【００５７】
図３に示されているように、ステップ５０において、攻撃者は、攻撃者にとってアクセス可能であるデータのアレイを第２のマスタ６のキャッシュ１２に割り振るように、第２のマスタ６を制御する。第２のマスタのキャッシュに割り振られたアレイは、機密情報を含んでいる何らかのアレイである必要はなく、機密に基づく変更の検出を可能にするために第２のマスタのキャッシュに割り振られているに過ぎない。
【００５８】
ステップ５２において、攻撃者は、第１のマスタ４上で実行している脆弱なソフトウェアを、機密情報を読み取るように誘導する。脆弱なソフトウェアは、たとえば、攻撃者自身にとって直接アクセス可能でない機密へのアクセスを有する、より特権が高いソフトウェアであり得る。たとえば、攻撃者は、脆弱なソフトウェアをだまして、境界検査動作が決定されるのを待っている間に機密を読み取らせるために、分岐予測器状態の悪意のあるトレーニングを使用するか、又は脆弱なソフトウェアにアウトオブバウンズ・アレイ・インデックスを供給し得る。このことは、脆弱なソフトウェアが他のデータにアクセスしているべきであるときに、脆弱なソフトウェアに機密にアクセスさせることができる。攻撃者が脆弱なソフトウェアに機密を読み取らせ得るいくつかの方法があることが諒解されよう。
【００５９】
ステップ５４において、攻撃者は、機密に（又は機密のビットのサブセットに）基づいてインデックスを計算するように脆弱なソフトウェアを誘導し得、ステップ５６において、脆弱なソフトウェアは、ステップ５４において計算されたインデックスに基づいて選択されたアレイの読取り要素を用いて、ステップ５０において第２のマスタのキャッシュに前に割り振られたアレイを読み取らせられる。ステップ５６における読取りは、図２Ａに示されているように、読取りトランザクションがコヒーレント相互接続１０に発行され、したがって、スヌープ要求が第２のマスタ６に発行されるようにトリガし得る。ステップ５８において、スヌープ要求は、次いで、第２のマスタのキャッシュ１２中のターゲット・データ（アレイのインデックス付けされた要素）のコヒーレンシ状態の変更をトリガし得る。
【００６０】
ステップ６０において、攻撃者は、次いで、どの要素が第１のマスタによってアクセスされたかを推定するために、第２のマスタのキャッシュ１２中の前に割り振られたアレイの異なる要素へのアクセスのためのキャッシュ・アクセス・タイミングを測定することができる。たとえば、第２のマスタ６がデータの有効なコピーを保持している唯一のマスタである排他状態で、アレイが前に割り振られ、第１のマスタ４からの読取りトランザクションが、次いで、データを修正するための許可が必要とされる非排他状態に、インデックス付けされた要素を遷移させる場合、インデックス付けされた要素に対する書込みアクセスは、アレイの他の要素に対するアクセスよりも遅くサービスされ得る。そのような攻撃における単一の試みが、第１のマスタ４によってアクセスされた正確なインデックスを識別するために十分でなかった場合でも、このことは、アクセスされたインデックスを推論するための統計的方法を使用するために数回繰り返され得る。したがって、ステップ６２において、第２のマスタのキャッシュ中のキャッシュ・アクセス・タイミングから、機密に関する何らかの情報が推論され得る。
【００６１】
ステップ５２〜ステップ５６における投機的動作が正しく実行されたかどうかがまだ分かっていないとしても、これらの動作は、別のマスタのキャッシュ中のコヒーレンシ状態の変更をトリガすることを可能にされるので、この形態の攻撃は可能である。実際には、攻撃者がステップ５２〜ステップ５６を実行するようにマスタ１を制御することが可能であろう方法は、マスタ１がマスタ１の動作を一時的に実行するが、次いで、これらの動作が間違っていたことをその後検出し、これらの動作のアーキテクチャ効果をリワインド（rewind）するような、間違った投機に依拠するであろう。とはいえ、これらの動作によりマスタ２のキャッシュ中のコヒーレンシ状態の変更があった場合、投機的に実行された動作のアーキテクチャ効果がマスタ１においてキャンセルされたときでも、この効果は持続するだろう。
【００６２】
図４Ａ〜図４Ｃは、投機的読取り動作が、読取りトランザクションが他のキャッシュにおける要求されたデータのコヒーレンシ状態の変更をトリガすることができないことを保証するように、要求マスタによって使用され得る安全投機的読取りトランザクション（コヒーレンシ変更禁止トランザクション）を示す。図４Ａは、第２のマスタのキャッシュ１２中のコヒーレンシ状態を変更することなしに、要求マスタ４の要求キャッシュ１１中のデータのキャッシングを許可するであろう、コヒーレンシ状態でターゲット・データが第２のマスタ６のキャッシュ１２中にキャッシュされるケースにおける安全投機的読取りトランザクションの処理を示す。たとえば、このことは、ＭＯＥＳＩプロトコルの共有又は所有状態で保持されているデータに対するヒットであり得るが、他のプロトコルでは、異なる状態が他のマスタ中のキャッシングを許可することが考えられ得ることが諒解されよう。第２のマスタのキャッシュ１２中のターゲット・データのコヒーレンシ状態が要求マスタ中のキャッシングを許可するとき、安全投機的読取りトランザクションに対する応答は、第２のマスタ６が、スヌープされたデータを相互接続１０を介して要求マスタ４に戻し、次いで、データが要求マスタのキャッシュ中にキャッシュされる、図２Ａに示された応答と同じであり得る。第２のマスタ６におけるターゲット・データのコヒーレンシ状態は、この場合、同じままであり、したがって、投機に基づいて攻撃者によってプローブされるべきコヒーレンシ状態の変更はない。
【００６３】
安全投機的読取りトランザクションが、第２のマスタのキャッシュ１２中、及びコヒーレンシが相互接続１０によって維持されているすべての他のキャッシュ中でミスになったとき、このことは図２Ｂに示されたものと同様に処理される。したがって、図４Ｂは図２Ｂとまったく同じである。図４Ａ及び図４Ｂでは、第２のマスタ６に発行されるタイプのスヌープ要求７０は、同様に要求マスタのキャッシュ中のデータのキャッシングを許可するコヒーレンシ状態でデータが保持される場合のみ、第２のマスタがデータを戻すことができることを第２のマスタに示すための、図２Ａ及び図２Ｂに示されたスヌープ要求とは異なるタイプのスヌープ要求であることに留意されたい。
【００６４】
図４Ｃに示されているように、第２のマスタ６におけるコヒーレンシ状態の変更なしに、要求マスタのキャッシュ中のデータのキャッシングを許可しない、コヒーレンシ状態でデータが保持されるときに、安全投機的読取りトランザクションが第２のマスタ６のキャッシュ中のヒットをトリガする場合、このケースでは、データは戻されず、代わりに第２のマスタ６はＨｉｔＮｏＤａｔａ応答７２を戻す。ＨｉｔＮｏＤａｔａ応答は、データが第２のマスタ６中に存在したが、データは要求マスタ４に現在与えられることができないことを要求マスタ４に示す。したがって、データは要求マスタ４に戻されない。要求マスタ４におけるターゲット・データのキャッシングがないので、第２のマスタのキャッシュにおいて保持されているデータのコヒーレンシ状態を変更する必要はない。図４Ａ、図４Ｂ及び図４Ｃに示された３つのケースの各々において、第２のマスタ４におけるコヒーレンシ状態を同じに保つことによって、このことは、攻撃者が、投機的動作によってトリガされたコヒーレンシ状態の変更からサイドチャネル情報を獲得する機会を回避する。
【００６５】
要求マスタ４がＨｉｔＮｏＤａｔａ応答７２を受信すると、次いで、要求マスタ４は、図４Ｃのステップ７４において、安全投機的読取りトランザクションをトリガした投機的読取り動作が非投機的であることが決定され、正しく予測されるのを待つ。この時点で、要求マスタ４は、次いで、（たとえば、図２Ａ及び図２Ｂに示されたタイプの読取りであり得、これは、次いで、必要な場合、第２のマスタ６におけるコヒーレンシ状態の潜在的な更新を含めて、図２Ａに示されたものと同様に処理される）さらなる読取りトランザクション７６を発行する。さらなるトランザクションは、ターゲット・データを第２のマスタ６から要求マスタ４に戻させ、要求マスタ４のキャッシュ１１中にキャッシュさせる。この時点で、読取り動作はもはや投機的でないので、第２のマスタ６において保持されているデータのコヒーレンシ状態を更新することは安全である。
【００６６】
したがって、攻撃者が、要求マスタ４をだまして、要求マスタ４によって実行されることがコードの作成者によって意図されなかった、データへのアクセスを要求させるために、間違った投機を使用した場合、この読取り動作は、誤投機されたことが決定され、キャンセルされるので、さらなる読取りトランザクション７６は決してトリガされないであろう。さらなる読取りトランザクション７６が発行されたとき、この時点までに、ターゲット・データがすでに第２のマスタ６のキャッシュから無効にされている可能性があり、したがって、時々、さらなる読取りトランザクション７６に対する応答は、代わりに、第２のマスタ６のキャッシュからデータを戻す代わりに、さらなる読取りトランザクション７６がミスになり、さらなるキャッシュ３０又はメモリ３３に対するラインフィル要求を生じる、図２Ｂに示されている応答になり得ることに留意されたい。
【００６７】
図４Ａ〜図４Ｃに示された安全投機的読取りトランザクションを使用することの代替手法は、図２Ａ及び図２Ｂに示されているように、コヒーレンシ変更許可読取りトランザクションのみをサポートするが、要求マスタ４における所与の読取り動作が正しく投機されたことが決定されるまで、このトランザクションを発行することを遅延させることであろう。しかしながら、このケースでは、他のマスタのキャッシュ中のミスの場合、さらなるキャッシュ３０又はメモリ３３に発行されたラインフィル要求は、投機が決定されるまで遅延されなければならないであろうし、ラインフィル要求は、一般に、別のマスタのキャッシュからデータを取得するためにかかる時間よりもはるかに大きいレイテンシを伴うので、そのことは長い遅延をトリガし得る。対照的に、トランザクションによってトリガされる、他のマスタにおけるコヒーレンシ状態の変更がないことを保証する、図４Ａ〜図４Ｃに示されているような安全投機的読取りトランザクションをサポートすることによって、このことは、投機が決定されることを待つことなしにラインフィル要求がトリガされ得るので、ラインフィル要求が、図４Ｂに示されているミスのケースにおいてより早くトリガされることを可能にする。したがって、そのような安全投機的読取りトランザクションのサポートは、上記で説明したタイプの攻撃を軽減しながら、パフォーマンスを改善することを助けることができる。
【００６８】
図５は、図４Ｃに示された状況を処理することの代替手法を示す。ミスのケース、及び要求マスタ中のキャッシングを許可する、ターゲット・データのコヒーレンシ状態をもつ第２のキャッシュ中で安全投機的読取りトランザクションがヒットしたときのケースは、それぞれ、図４Ｂ及び図４Ａに示されたものと同様に処理され得る。しかしながら、トランザクションが第２のキャッシュ中でヒットしたが、第２のキャッシュにおけるコヒーレンシ状態の変更なしに要求マスタ中のキャッシングを許可しない、コヒーレンシ状態でデータが保持されるときのケースにおいて、図５では、ＨｉｔＮｏＤａｔａ応答７２を戻す代わりに、第２のマスタ６からターゲット・データを与えるが、ターゲット・データがコヒーレント様式で要求マスタによってキャッシュされることができないことを示す、キャッシュ不能読取り応答８０が戻され得る。したがって、データが要求マスタにおいてキャッシュされないので、第２のマスタ６のキャッシュ１２中の対応するデータのコヒーレンシ状態を変更する必要がなく、したがって、この場合も、このことは、読取り動作が誤投機されたことが決定された後に持続し得る、他のキャッシュ中のコヒーレンシ状態の変更をトリガするために、間違った投機的読取り動作が使用されることを妨げる。キャッシュ不能読取り応答８０に応答して、図５のステップ８２において、要求マスタ４は、次いで、投機的読取り動作の結果として戻しデータを使用するので、そのデータを使用する後続の動作は投機的に継続することができる。しかしながら、投機的読取り動作の結果としてデータを使用した場合、戻しデータは、要求マスタ４の要求キャッシュ１１中にその戻しデータをキャッシュすることなしに廃棄される。このことは、後続の読取り動作が同じアドレスに対するメモリ・アクセスをトリガした場合、このことが、データを要求するために相互接続１０に発行されるべきトランザクションをもう１度トリガするであろうことを意味する。すなわち、キャッシュ不能読取り応答８０に応答して、要求マスタ４は、戻しデータを要求マスタ４の内部レジスタには書き込み得るが、要求マスタ４のキャッシュには書き込まない。
【００６９】
いくつかの実装形態では、安全投機的読取りトランザクションは、第２のキャッシュ１２におけるコヒーレンシ状態が要求マスタのキャッシュ１１におけるキャッシングを許可しないとき、図５に示されたキャッシュ不能読取り応答８０を戻し得るが、コヒーレンシ状態が要求マスタのキャッシュ１１におけるキャッシングを許可する場合、図４Ａに示された挙動をトリガし得るか、又は要求が第２のキャッシュ１２中でミスしたとき、図４Ｂの挙動をトリガし得る。
【００７０】
代替的に、他の実装形態は、要求が第２のキャッシュ１２中でヒットし、コヒーレンシ状態が要求キャッシュ１１中のターゲット・データのキャッシングを許可するとき、図５に示されたシナリオにおいてだけでなく、図４Ａに示されたシナリオにおいても、キャッシュ不能読取り応答８０を戻し得る。すなわち、このケースでは、データは要求キャッシュ１１中にキャッシュされ得るが、第２のキャッシュ１２中にキャッシュされたデータのコヒーレンシ状態にかかわらず、要求が第２のキャッシュ１２中でヒットしたときに、安全投機的読取りトランザクションがキャッシュ不能読取り応答を常に戻すならば、ハードウェア実装形態はより簡単になり得る。
【００７１】
図６は図４Ｃ及び図５の代替を示す。図６では、安全投機的読取りトランザクションが第２のマスタ６のキャッシュ中のヒットをトリガし、コヒーレンシ状態が第２のマスタ６において変更されない限り、要求マスタ４のキャッシュ中の同時のキャッシングを許可しない、コヒーレンシ状態でデータが第２のマスタ６のキャッシュ中に保持されるとき、この場合も、キャッシュ不能読取りトランザクション８０が要求マスタに戻される。しかしながら、図１に示されているように、要求マスタ４は、要求マスタ４の主キャッシュ１２と別個に、投機的結果をバッファするために使用され得る投機的バッファ９０を有し得る。投機的バッファ９０は、コヒーレント相互接続１０によって管理されるコヒーレンシ方式外であり得、したがって、投機的バッファ９０中の値は、システム中の他の場所に記憶された対応するデータとコヒーレントなままであることが保証され得ない。したがって、キャッシュ不能読取り応答８０は、要求マスタ４がコヒーレンシ方式に従ってキャッシュ１１内にデータをキャッシュすることができないことを必要とするが、要求マスタ４は戻しデータを非コヒーレントな投機的バッファ９０内で依然として記憶し得る。したがって、図５中のステップ８２において投機的読取り動作の結果として使用するために、戻されたデータをレジスタに書き込むことと同様に、図６に示された手法を用いて、データはまた、ステップ８４において非コヒーレントな投機的バッファ９０に記憶される。このことは、同じアドレスに対する後続の読取り要求が投機的バッファ９０中の投機的データにヒットし得るので、それらの後続の読取り要求はより速く処理され得ることを意味する。
【００７２】
しかしながら、この手法を用いると、要求マスタ４は、元の安全投機的読取りトランザクションをトリガした投機的読取り動作が決定されると、データが依然としてコヒーレントであるかを検査するための他のステップを行う必要があり得る。ステップ１００において、要求マスタ４は、投機的読取り動作が正しかったことが決定されたことを決め得る。このときまでに、第２のマスタ６又はシステム内の他のロケーションにおけるターゲット・データの変更があり得、したがって、継続的なコヒーレンシを保証し、古い値で要求マスタ４のキャッシュ１１を汚染することを回避するために、ステップ１０２において、要求マスタ４は、投機的バッファ９０中のデータの非コヒーレント・コピーを、要求マスタ４の主キャッシュ１１に割り振られ得るコヒーレント・コピーにアップグレードするための要求を発行し得る。たとえば、コヒーレント・アップグレード要求は、戻されたとき、次いで、ステップ１０６において、要求マスタのキャッシュ中にキャッシュされ得る、ターゲット・データの最新バージョンを（たとえば、図２Ａ及び図２Ｂに示された形態の読取りトランザクションを使用して）再フェッチするための要求であり得る。代替的に、相互接続１０及び第２のマスタ６のうちの１つが、安全投機的読取りトランザクションによってトリガされたスヌープが発行された以後、ターゲット・データに対する書込みが行われたかどうかを追跡する場合、コヒーレント・アップグレード要求は、データ値が変化し得たかどうかを検証するための要求であり得る。いずれにせよ、コヒーレント・アップグレード要求１０４に対する応答を受信すると、要求マスタ４は、データが投機的バッファ中にキャッシュされた以後、データの変更があり得たかどうかを（元のデータ値を再フェッチされたデータ値と比較することによって、又は書込みが行われたかどうかを示す応答１０４を検査することによって）検査することができ、データの変更があり得た場合、投機的バッファ９０から投機的データを廃棄し、そのデータを使用した後続の動作は間違ったインコヒーレント値に基づき得るので、これらの後続の動作をキャンセルすることができる。要求マスタ４が、投機的にバッファされたデータに基づく後続の動作の実行が正しかったことを確認した場合、そのような動作の結果は維持され得、投機的にバッファされたデータは主キャッシュ１１に割り振られ得る。コヒーレント相互接続１０の制御外のバッファに対する非コヒーレント・アクセスの後のコヒーレンシを保証するために取られる特定の手法は、特定のシステム及び使用されている特定のコヒーレンシ・プロトコルの必要に応じた実装形態選定であり得る。たとえば、既存のメモリ・ディスアンビギュエーション（disambiguation）技法は、投機的に実行された読取りの決定時のコヒーレンシを検査するために使用され得る。
【００７３】
一般に、上記の実例に示された安全投機的読取りトランザクションは、読取りのターゲット・アドレスが正しいかどうか、又は読取りがそもそも必要ですらあったかどうかが分かる前に、投機的動作によってトリガされた読取り動作のために使用され得る。しかしながら、場合によっては、安全投機的読取りトランザクションはすべての読取り要求のために使用され得、たとえば、いくつかのマスタでは、すべてではないがたいていの読取りが投機的に行われ得るので、読取りトランザクションの安全な形態を常に使用することが最も簡単であり得る。
【００７４】
しかしながら、他のシステムでは、時々、上記で説明した形態の攻撃の危険が低減されていることを決定することが可能であり得、その場合、投機的要求のためであっても（たとえば、サイドチャネル攻撃に対する何らかの他の軽減対策が取られていれば）コヒーレンシ変更許可形態の読取りトランザクションを使用することが好適であると考えられ得る。この場合に読取りトランザクションのコヒーレンシ変更許可形態を使用することは、場合によっては、第２のマスタから戻されたデータをより早くキャッシュすることによってパフォーマンスを改善し得る。とはいえ、投機的読取りトランザクションの安全な形態のためのサポートを与えることによって、このことは、他の軽減対策を採用する必要を回避し、セキュリティを保証する。
【００７５】
図７は、複数のリクエスタ間で共有される共有キャッシュ３０の実例を示す。実例は、複数のマスタ４、６によってアクセスされ得るか、又は同じマスタ４上で動作する異なるソフトウェア・プロセスによって個々にアクセスされ得る、システム・キャッシュ３０である。図７の実例では、共有キャッシュ３０は、投機的領域１２０と、主キャッシュ領域１２２とを含む。投機的領域１２０は、投機的に割り振られたデータが投機的なままである（すなわち、投機的に割り振られたデータを割り振らせた対応する動作が正しかったことがまだ決定されていない）間、投機的に割り振られたデータのためにもっぱら使用される。主領域１２２は、以後正しかったことが決定された動作に関連付けられた非投機的データのためにもっぱら使用される。投機的領域中のエントリは、データのアドレスの一部を示すアドレス・タグ１３２、データを共有キャッシュ３０に割り振らせた割振りリクエスタ１３４の指示、及びどのロード動作又はロード動作のグループがデータを投機的に割り振らせたかの指示を与えるロード識別子又はロード・グループ識別子１３６と一緒に、データ１３０を記憶する。このことは、共有キャッシュ３０が、データを割り振らせたロード（又はロードのグループ）がすべて正しく実行されたことが決定されると、データが投機的領域１２０から主領域１２２に昇格され得るときを追跡することを可能にする。対照的に、主領域１２２中のデータは、タグ１３２及びデータ１３０を記憶し得るが、割振り要求１３４又はロードＩＤ若しくはグループＩＤ１３６に関する情報を与える必要はない。図７に示されているように、主領域はまた、特定のデータ・エントリに関連付けられたメタデータ１４０の他の形態を指定し得る。このメタデータはまた、投機的領域中のエントリについて示し得るが、このことは、簡明のために図７に示されていない。図７は、別個の投機的キャッシュ領域１２０及び主キャッシュ領域１２２を示すが、他の実施例では、これらは単一の領域に結合され得、各エントリに関連付けられた追加のメタデータが、エントリが投機的であると考えられるか又は非投機的であると考えられるかをマークし得る。
【００７６】
図８は、投機的エントリが主領域に昇格され得るときを決定するための共有キャッシュによる処理を示す流れ図を示す。ステップ１５０において、共有キャッシュは、特定のロード識別子Ｘに関連付けられたロード動作、又は特定のグループ識別子Ｘに関連付けられたロードのグループが正しく投機されたことが決定されたという指示を受信する。応答して、ステップ１５２において、共有キャッシュは、ロードＩＤ又はグループＩＤ１３６として識別子Ｘを指定する投機的キャッシュ・ラインを投機的から非投機的に昇格させる。投機的から非投機的への昇格は、投機的領域１２０のエントリから主領域１２２のエントリへのデータの物理的転送によって、又は投機的エントリが今非投機的であることを示すために共有キャッシュ領域中のメタデータを更新することによって達成され得る。
【００７７】
図８は、投機的ロードが正しかったことが決定されたとき、どのエントリが非投機的に昇格され得るかを識別するためにロード識別子又はロード・グループ識別子を使用する実例を示すが、他の実装形態は、対応するロード動作が正しかったことが決定されたとき、どのエントリが昇格され得るかを識別するためにキャッシュ・エントリのアドレスを使用し得る。
【００７８】
図９は、特定のリクエスタＸによる、所与のターゲット・アドレス＃Ａのためのデータについての投機的読取り要求の処理を示す流れ図を示す。リクエスタＸは、特定のマスタ・デバイス４、６、又はマスタ・デバイス上で動作する個々のプロセスであり得る。要求は、図９のステップ１６０において共有キャッシュによって受信される。ステップ１６２において、共有キャッシュ３０は、要求がキャッシュ中でミスしたかどうか、すなわち、アドレス＃Ａに関連付けられた投機的領域１２０中にも主領域１２２中にもエントリがないかどうかを決定する。ミスがあった場合、ステップ１６４において、ミス応答が戻される。たとえば、このことは、下位レベル・キャッシュ又はメモリからのデータのフェッチング及び／又は（割振りをトリガした読取り要求が投機的である場合、投機的エントリとして割り振られるであろう）アドレス＃Ａに関連付けられた新しいエントリの割振りをトリガし得る。
【００７９】
ミスがなかった場合、ステップ１６５において、要求が非投機的エントリ（主領域１２２中のエントリ、又は非投機的であることがメタデータによって示されている共有領域中のエントリのいずれか）にヒットしたかどうかが決定される。ヒットした場合、ステップ１６６において、リクエスタＸによるアクセスのためのデータを与えるために、ヒット応答が戻される。ヒット応答は、どのリクエスタがデータを割り振らせたかにかかわらず、非投機的エントリのために戻されるであろう。したがって、非投機的エントリは、（システムによって定義された他のメモリ・アクセス制御型許可を受けて）任意のリクエスタによってヒットされ得る。ステップ１６８において、読取り要求が、リクエスタＸによって割り振られた投機的エントリにヒットしたことが決定された場合、この場合も、このことはヒットとして処理され、ステップ１６６において、ヒット応答が戻される。
【００８０】
一方、ステップ１７０において、投機的読取り要求が、リクエスタＸ以外のリクエスタによって割り振られた投機的エントリにヒットしたことが決定された場合、ステップ１７２において、データがダーティである（上位レベル・キャッシュ又はメモリ中のデータに対して修正されている）かどうかが決定される。データがダーティである場合、ステップ１７４において、データは上位レベル・キャッシュ又はメモリにライトバックされる。データがクリーンである場合、ステップ１７４は省略され得る。いずれにせよ、ステップ１６４において、ミス応答が戻される。したがって、共有キャッシュに割り振られたデータが投機的なままである間、データを割り振ったリクエスタのみがそのデータを参照することができ、他のリクエスタはそのデータにアクセスすることができない。また、投機的データは、共有キャッシュ中の非投機的データのエビクションを引き起こすように割り振られることができないので、このことは、投機的エントリを割り振ったリクエスタ以外のリクエスタは、投機的に割り振られたエントリの効果にまったく気づいていないことを意味する。このことは、キャッシュ・タイミング・サイドチャネルが投機的割振りをプローブする機会をなくし、したがって、攻撃者が、機密データに関する情報を漏洩させるために、間違って投機されたメモリ・アクセス及びキャッシュ・タイミング・サイドチャネルを使用することを可能にすることを妨げる。
【００８１】
図１に示されているように、マスタ・デバイスのうちの１つ、この実例ではＣＰＵ４は、対応するメモリ・アクセス命令がマスタ４のプロセッサ・コアによって実際に実行される前に、メモリ・アクセスの将来のアクセス・パターンを予測し、将来に必要とされることが予測されるアドレスのデータをキャッシュ１１にプリフェッチするためのデータ・プリフェッチャ２００を有し得る。たとえば、プリフェッチャ２００は、アクセスされるアドレスが一定の間隔で分離されたアドレスのシーケンスである、いくつかのストライド・パターンを検出し得る。ストライド・パターンが検出されると、次いで、プリフェッチャ２００は、プロセッサ・コアが、ストライド・パターンに一致するアドレスをもつデータ・アクセス命令をもはや実行していないことが検出されるまで、検出されたストライド・オフセットの間隔でアドレスに関連付けられたキャッシュ１１にデータをフェッチし続け得る。このことはパフォーマンスを改善することができる。
【００８２】
プリフェッチャ２００によってトリガされたデータ・アクセスはロード投機の形態として見られ得るので、上記で説明したコヒーレンシ・サイドチャネルを呼び出すことを回避するために、プリフェッチャは、上記で説明したように、コヒーレント相互接続からデータを取得するために安全投機的読取りトランザクションを使用するタイプのデータ・アクセスをトリガし得る。
【００８３】
しかしながら、プリフェッチャ２００によってトリガされたデータ・アクセスが、他のマスタ中のコヒーレンシ状態キャッシュにおける変更をトリガしない場合でも、それらのデータ・アクセスは、プリフェッチャ２００を有する同じマスタ４内のキャッシュ１１中の割振りの変更を依然として引き起こし得る。特に、プリフェッチャ２００が、機密情報に依存する何らかの情報に基づいて投機的に予測されたアドレスからデータをプリフェッチするように攻撃者によって制御され得る場合、キャッシュ１１への割振りの対応する変更は、機密に関する情報を漏洩させるために、タイミング・サイドチャネルを使用してプローブされ得る。たとえば、上記に示されているコード実例では、第２のデータ・アクセスは、機密に依存するストライドを使用する明確なパターンをもつメモリ・ロケーションに対するアクセスのストリームを用いて交換され得る。したがって、そのようなストリームは、データ・ストライド、したがって機密を暴露することによって情報を漏洩し得るハードウェア・プリフェッチャ・アクティビティをトリガし得る。他の実例では、機密は、アクセスのシーケンスのベース・アドレスを導出するために使用され得、したがって、プリフェッチャはベース・アドレスに関する情報を暴露し得る。この問題は、一般的なハードウェア・データ・プリフェッチャ２００が、発行されたメモリ・アクセスが投機的に実行されるか非投機的に実行されるかにかかわらず、通常、それらのアクセスのアドレスに基づいて予測回路をトレーニングするであろうということによって、及びハードウェア・プリフェッチャ２００によってフェッチされたデータがキャッシュ１１から非投機的データをエビクトすることは通常許容できるので、引き起こされる。
【００８４】
したがって、正しかったか間違っていたかが決定されていなかった、投機的にアクセスされたトランザクションの、前にアクセスされたアドレスに基づいてアドレスが予測された、プリフェッチされたデータのための場所を空けるために非投機的データをキャッシュ１１からエビクトすることを禁止されるハードウェア・プリフェッチャ２００を与えることによって、攻撃者がプリフェッチャ・アクティビティから情報を導出するための手段がなくされ得る。図１０及び図１１は、これを実装するための２つの代替技法を示す。
【００８５】
図１０は、データ・プリフェッチャが、正しく実行されたことがすでに決定された、前に実行されたメモリ・アクセスのアドレスに基づいてトレーニングされるプリフェッチ・アドレス予測回路２０２を有する、第１の実例を示す。したがって、プリフェッチ要求生成回路２０４は、コヒーレント相互接続１０からのデータを要求するために、プリフェッチ・アドレス予測回路２０２によって予測されたアドレスに基づいてプリフェッチ要求を生成し得る。コヒーレント相互接続１０が要求されたデータを戻すと、次いで、このデータはキャッシュ１１中にキャッシュされ得、前に割り振られた非投機的データをキャッシュからエビクトすることを可能にされ得る。この場合、攻撃者が、機密情報に依存するアドレスに対する不適切なメモリ・アクセスをトリガするために使用し得る、間違って投機されたメモリ・アクセスは、プリフェッチ・アドレス予測回路２０２のトレーニングのために使用されないので、予測されたプリフェッチ・アドレスに基づいてキャッシュ１１中のキャッシュ割振りのパターンを変更することに関連する危険はない。プリフェッチされたデータを非投機的データと同じ様式でキャッシュに割り振ることは安全であるので、最長時間未使用方式（least recently used）など、任意の従来のキャッシュ割振りポリシーが使用され得る。したがって、プリフェッチ・アドレス予測回路２０２のトレーニングからの、間違って投機されたアドレスの排除は、攻撃を軽減する。
【００８６】
図１１は、データ・プリフェッチャ２００を介した攻撃の危険を低減するための代替手法を示す。この場合、プリフェッチャ２００のプリフェッチ・アドレス予測回路２０２は、投機的に実行されたメモリ・アクセスが正しかったのか間違っていたのかが分かる前に、そのアクセスのアドレスに基づいてトレーニングされる。しかしながら、予測されたアドレスからプリフェッチされたデータがメモリ・システムから戻されると、次いで、プリフェッチ・データは、非投機的データをキャッシュするために使用される主キャッシュ領域２１２とは別個に維持される、キャッシュ１２の投機的領域２１０に最初に割り振られる。したがって、プリフェッチングによって引き起こされた割振りは、主キャッシュ領域２１２からの非投機的データのエビクションを生じることはできない。プロセッサ４の特権レベルの変更があったか、又は投機バリア命令が実行された場合、投機的領域２１０は、特権が低いプロセスが間違って投機された場合に、その特権が低いプロセスが、プリフェッチされたデータに対するアクセスを得ることができないことを保証するためにフラッシュ（flush）されるので、高特権状態の間にアクセスされた情報の、低特権状態で実行されるソフトウェアへの漏洩の可能性が低減され得る。投機的領域２１０はまた、プロセッサ・コアによって実行されたロード／ストア命令によってトリガされた投機的にロードされたデータ、並びにプリフェッチャ２００によってプリフェッチされたデータを記憶するために使用され得ることに留意されたい。
【００８７】
投機的領域２１０中のデータは、プリフェッチャ予測（又は投機のための基礎として使用される他の予測）が正しかったことが決定されたとき、主領域２１２に昇格され得る。したがって、（攻撃者が、潜在的に間違って投機された結果に対するアクセスを得ることができる危険が今あり得ることを示すイベントが発生したときにフラッシュされ得る）専用の投機的領域２１０を使用することによって、このことは、正しかったことが決定された非投機的結果のための主領域２１２を保存する。このことは、データ・プリフェッチャ２００が、機密に依存するアドレスをもつキャッシュ１１にデータをロードするために、間違って投機されたメモリ・アクセスのアドレスに基づいてトレーニングされ得る場合でも、機密へのアクセスを有しない攻撃者は、主領域２１２中のキャッシュ・アクセス時間をプローブすることによって、アドレスのプリフェッチされたパターンに関する情報へのアクセスを得ることができないことを意味する。
【００８８】
さらなる例示的な配置は以下の条項に記載されている。
（１）
複数のマスタ・デバイスと、
複数のリクエスタのうちの１つによる要求に応じたアクセスのための、マスタ・デバイス間で共有される共有キャッシュであって、各リクエスタが、所与のマスタ・デバイスか、又は所与のマスタ・デバイス上で実行される所与のプロセスを備える、共有キャッシュと
を備え、
割振りリクエスタによって共有キャッシュに投機的に割り振られたターゲット・データを読み取るための所与のリクエスタによる要求に応答して、データの投機的割振りをトリガする動作が投機的なままである間、共有キャッシュは、
所与のリクエスタが割振りリクエスタであるとき、ターゲット・データを与えるヒット応答を戻すことと、
所与のリクエスタが割振りリクエスタ以外のリクエスタであるとき、データが上位レベル・キャッシュにないことを示すミス応答を戻すことと
を行うように構成された、装置。
【００８９】
（２）
データ・アクセス動作の投機的実行が可能な処理回路と、
データ・アクセス動作に応答して、取得されたデータをキャッシュするためのキャッシュと、
処理回路によって実行されたデータ・アクセス動作の、前にアクセスされたアドレスに基づいて予測されたプリフェッチ・アドレスに関連付けられたキャッシュにデータを投機的にプリフェッチするためのデータ・プリフェッチャと
を備え、
キャッシュ及びデータ・プリフェッチャは、投機的に実行されたデータ・アクセス動作の、前にアクセスされたアドレスに基づいて予測されたプリフェッチ・アドレスに基づいてデータ・プリフェッチャによって投機的にプリフェッチされたデータが、非投機的であることがすでに決定されたデータ・アクセス動作に関連付けられたキャッシュ中に記憶された非投機的データのエビクションをトリガすることを禁止するように構成された、装置。
【００９０】
（３）
データ・プリフェッチャが、もっぱら、処理回路によって非投機的であることがすでに決定されたデータ・アクセス動作に関連付けられた、前にアクセスされたアドレスに基づいて、プリフェッチ・アドレスを予測するように構成された、条項（２）に記載の装置。
【００９１】
（４）キャッシュが、主キャッシュ領域と投機的キャッシュ領域とを備え、キャッシュは、データ・プリフェッチャによってプリフェッチされたデータを投機的キャッシュ領域に割り振ることと、投機的キャッシュ領域に割り振られたデータの所与のアイテムのためのプリフェッチ・アドレスの予測が正しかったという決定に応答して、データの所与のアイテムを主キャッシュ領域に転送することと
を行うように構成された、条項（２）に記載の装置。
【００９２】
本出願では、「…ように構成された」という文言は、装置の要素が、定義された動作を実行することが可能な構成を有することを意味するために使用される。この文脈では、「構成」は、ハードウェア又はソフトウェアの相互接続の配置又は様式を意味する。たとえば、装置は、定義された動作を与える専用のハードウェアを有し得るか、又はプロセッサ若しくは他の処理デバイスは、機能を実行するようにプログラムされ得る。「ように構成された」は、装置要素が、定義された動作を与えるために何らかの方法で変更される必要があることを暗示しない。
【００９３】
添付の図面を参照しながら、本発明の例示的な実施例について本明細書で詳細に説明したが、本発明はそれらの正確な実施例に限定されないこと、及び添付の特許請求の範囲によって定義されているように、本発明の範囲及び趣旨から逸脱することなく、様々な変更及び改変がその中で当業者によって実施され得ることを理解されたい。
【図１】
2021520545.tif 000004
【図２Ａ】
2021520545.tif 000005
【図２Ｂ】
2021520545.tif 000006
【図３】
2021520545.tif 000007
【図４Ａ】
2021520545.tif 000008
【図４Ｂ】
2021520545.tif 000009
【図４Ｃ】
2021520545.tif 000010
【図５】
2021520545.tif 000011
【図６】
2021520545.tif 000012
【図７】
2021520545.tif 000013
【図８】
2021520545.tif 000014
【図９】
2021520545.tif 000015
【図１０】
2021520545.tif 000016
【図１１】
2021520545.tif 000017
【国際調査報告】
2021520545.tif 000018
2021520545.tif 000019
2021520545.tif 000020