JP2023048101A - メモリ支援インライン暗号化/復号 - Google Patents

メモリ支援インライン暗号化/復号 Download PDF

Info

Publication number
JP2023048101A
JP2023048101A JP2022108033A JP2022108033A JP2023048101A JP 2023048101 A JP2023048101 A JP 2023048101A JP 2022108033 A JP2022108033 A JP 2022108033A JP 2022108033 A JP2022108033 A JP 2022108033A JP 2023048101 A JP2023048101 A JP 2023048101A
Authority
JP
Japan
Prior art keywords
data structure
encryption
lba
address
gppa
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.)
Pending
Application number
JP2022108033A
Other languages
English (en)
Inventor
スナー アヴィシェイ
Snir Avishay
チャイ ジヴ
Chai Ziv
チャブラ シッダールタ
Chhabra Siddhartha
デワン プラシャント
Prashant Dewan
パテル バイジュ
Baiju Patel
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2023048101A publication Critical patent/JP2023048101A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0637Modes of operation, e.g. cipher block chaining [CBC], electronic codebook [ECB] or Galois/counter mode [GCM]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • 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/0877Cache access modes
    • G06F12/0882Page mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Storage Device Security (AREA)

Abstract

【課題】メモリ支援暗号化/復号のための方法、装置及びシステムを提供する。【解決手段】コンピューティングデバイスは、暗号化/復号エンジンにキー、データ及び微調整を提供するための暗号化データ構造エンジンを含む。暗号化データ構造エンジンは、アドレスを使用して暗号化データ構造ルックアップデータ構造エントリからインデックス値を読み出す。エントリは、インデックス値及びゲストページ物理アドレス(GPPA)を含み、インデックス値に基づいて、暗号化データ構造からエントリを取得する。エントリは、論理ブロックアドレス(LBA)ベース、キー識別子及び一連のGPPAのうち少なくとも1つのGPPAを含む。一連のGPPAにおける暗号化データ構造ルックアップデータ構造エントリからGPPAの位置を使用してLBAを生成し、キー識別子に基づいてキーを取得する。暗号化エンジンは、キー及びLBAを使用してデータを暗号化する。【選択図】図6

Description

不揮発性メモリエクスプレス(NVMe)デバイスは、保存中のデータを(すなわち、永続的に)格納し、このデータはセキュリティのために暗号化されなければならない。システムオンチップ(「SOC」)で暗号化を実行するために、SOCで暗号化を担当する暗号化(本明細書では「暗号(crypto)」と互換的に称される)コントローラは、データが格納されているNVMeデバイスのLBA(論理ブロックアドレス)を含むNVMeデバイスに関する複数の情報を必要とする。本明細書のいくつかの実施形態はNVMeを参照して説明されているが、実施形態はNVMeに限定されず、他のタイプの不揮発性メモリが使用されてもよい。
本開示による様々な実施形態が、以下の図面に関連して説明される。
開示された実施形態を実施するためのコンピューティングデバイスの例示的な実施形態を概略的に示す。
本開示の一例による、例示的なシステムトポロジを概略的に示す。
本開示の実施形態による、ライン速度でのメモリアクセスのための1つまたは複数のシステムアーキテクチャを示す。 本開示の実施形態による、ライン速度でのメモリアクセスのための1つまたは複数のシステムアーキテクチャを示す。
NVMe SSDにデータを書き込むための例示的なインライン暗号化を示す。
NVMeの外部のメモリモジュールにデータを書き込むための例示的なインライン復号プロセスを示す。
単一のキーIdが使用される本開示の1つまたは複数の例によるキールックアップテーブルを示す。
暗号化データ構造ルックアップデータ構造および暗号化データ構造の使用の実施形態を示す。
DRAM支援インライン暗号化または復号を実行するために暗号コントローラまたは暗号化データ構造エンジンによって実行される方法の実施形態を示す。
例示的なシステムの実施形態を示す。
複数のコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックスを有することができるプロセッサの実施形態のブロック図を示す。
本発明の実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
本発明の実施形態によるプロセッサに含まれる、インオーダアーキテクチャコアの例示的な実施形態、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
図10Bの実行ユニット回路などの、実行ユニット回路の実施形態を示す。
いくつかの実施形態によるレジスタアーキテクチャのブロック図である。
命令フォーマットの実施形態を示す。
アドレシングフィールドの実施形態を示す。
第1のプレフィクスの実施形態を示す。
第1のプレフィクス1301(A)のR、X、およびBフィールドがどのように使用されるかの実施形態を示す。 第1のプレフィクス1301(A)のR、X、およびBフィールドがどのように使用されるかの実施形態を示す。 第1のプレフィクス1301(A)のR、X、およびBフィールドがどのように使用されるかの実施形態を示す。 第1のプレフィクス1301(A)のR、X、およびBフィールドがどのように使用されるかの実施形態を示す。
第2のプレフィクスの実施形態を示す。 第2のプレフィクスの実施形態を示す。
第3のプレフィクスの実施形態を示す。
本発明の実施形態による、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図を示す。
本開示は、メモリ支援暗号化/復号のための方法、装置、システム、および非一時的コンピュータ可読記憶媒体に関する。
以下の説明では、様々な実施形態の完全な理解を提供するために、多数の具体的な詳細が記載される。しかしながら、特定の詳細なしで様々な実施形態を実施することができる。他の例では、特定の実施形態を不明瞭にしないように、周知の方法、手順、構成要素、および回路は詳細に説明されていない。さらに、実施形態の様々な態様は、統合半導体回路(「ハードウェア」)、1つまたは複数のプログラムに編成されたコンピュータ可読命令(「ソフトウェア」)、またはハードウェアとソフトウェアとの何らかの組み合わせなどの様々な手段を使用して実行されてもよい。本開示の目的のために、「論理」への言及は、ハードウェア(論理回路、またはより一般的には回路(circuitry)もしくは回路(circuit)など)、ソフトウェア、ファームウェア、またはそれらの何らかの組み合わせのいずれかを意味するものとする。
様々な実施形態では、NVMeデバイスに関する情報は、DMA(Direct Memory Access)経路内のホスト(または本明細書では互換的に「ホストドライバ」と称される)または暗号コントローラに通信されなくてもよい。言い換えれば、ドライブがDMA動作を実行するとき、この情報をホストに送信しなくてもよい。パーソナルコンピュータで使用されるほとんどのNVMeドライブは、PCIe(周辺構成要素インタフェースエクスプレス(例えば、PCI-SIG(PCI Special Interest Group)によって維持および開発されているように)プロトコル)を使用しなければならず、PCIeプロトコルヘッダは、ドライブが追加情報を送信するための容易なメカニズムを提供しない。これは、NVMeを使用するインライン暗号化の問題を非常に扱いにくくする。本明細書で説明するように、インライン暗号化は、データがドライブからDRAMに、またはその逆に読み書きされているときに暗号化および復号が行われていることを意味する。これは、NVMeコントローラがデータをメモリに書き込み、次いで何らかの他のエージェントがメモリから平文データを読み出し、それを暗号化してメモリに書き戻すか、またはメモリから暗号文を読み出し、それを復号してメモリに平文を書き込む、索引暗号化とは対照的である。その結果、ドライブは、暗号化のための情報を提供しなくてもよい。
いくつかの以前の実装形態では、ソフトウェアは、着信トランザクションのための微調整をリアルタイムで生成するためにトランザクションおよび論理ブロックアドレス(LBA)のテーブルを維持しなければならない。メモリ待ち時間を短縮するために、微調整入力はローカルSRAM(シリコン内部の処理エンジンに対してローカル)に格納される。これは、少数の保留中のDMAトランザクションに対して機能するが、保留中のDMAトランザクションの数が増加するにつれて、すぐに困難になる。SRAMの使用はスケーラブルではなく、必要とされるSRAMの量が増加するにつれて、解決策のコストが増加する。
図1は、開示された実施形態を実施するためのコンピューティングデバイスの例示的な実施形態を概略的に示す。図1において、コンピューティングデバイス100は、コンピューティングデバイス100の様々なハードウェアおよび/またはソフトウェア構成要素を単一チップ上に統合するSOCなどの集積回路(「IC」)をホストするコンピュータプラットフォームを備える。示されるように、1つまたは複数の例では、コンピューティングデバイス100は、(これらに限定されないが)グラフィックス処理ユニット114(「GPU」または単に「グラフィックスプロセッサ」)、グラフィックスドライバ116(「GPUドライバ」、「グラフィックスドライバロジック」、「ドライバロジック」、ユーザモードドライバ(UMD)、UMD、ユーザモードドライバフレームワーク(UMDF)、UMDF、または単に「ドライバ」とも称される)、中央処理装置112(「CPU」または単に「アプリケーションプロセッサ」)、メモリ108、ネットワークデバイス、ドライバなどの任意の数および種類のハードウェアおよび/またはソフトウェア構成要素、ならびにタッチスクリーン、タッチパネル、タッチパッド、仮想または通常のキーボード、仮想または通常のマウス、ポート、コネクタなどの入力/出力(I/O)ソース104を含むことができる。コンピューティングデバイス100は、コンピューティングデバイス100のハードウェアおよび/または物理リソースとユーザとの間のインタフェースとして機能するオペレーティングシステム(OS)106を含むことができる。SOC100は、任意に、NVM150と通信することができる。不揮発性メモリ150は、高速記憶媒体にアクセスするためのプロトコルである不揮発性メモリエクスプレスを使用してアクセスすることができる。NVMeは、本明細書では、不揮発性メモリ(例えば、SSD)およびその通信プロトコルの両方を参照するために使用される。
図1は例示的な実施形態を示し、開示された原理から逸脱することなく追加の構成要素が含まれ得ることに留意されたい。例えば、実施形態は、マザーボードを使用してインターコネクトされた1つまたは複数のマイクロチップまたは集積回路、ハードワイヤードロジック、メモリデバイスによって格納され、マイクロプロセッサによって実行されるソフトウェア、ファームウェア、特定用途向け集積回路(ASIC)、および/またはフィールドプログラマブルゲートアレイ(FPGA)のいずれかまたは組み合わせとして実装されてもよい。用語「ロジック」、「モジュール」、「構成要素」、「エンジン」、および「メカニズム」は、例として、ファームウェアなどのソフトウェアもしくはハードウェアおよび/またはそれらの組み合わせを含むことができる。追加の実施形態は、マザーボード、特定用途向け集積回路(ASIC)、および/またはフィールドプログラマブルゲートアレイ(FPGA)を使用してインターコネクトされた1つまたは複数のメモリチップ、コントローラ、CPU(中央処理装置)、マイクロチップ、または集積回路を使用して実装されてもよい。用語「ロジック」は、例として、ソフトウェアもしくはハードウェアおよび/またはソフトウェアとハードウェアとの組み合わせを含むことができる。
図2は、本開示の一例による、例示的なシステムトポロジを概略的に示す。図2のCPU210は、いくつかの例では、PCIeコントローラ212を含む。いくつかの例では、PCIeコントローラ212は暗号化エンジン214を含むが、これは全ての実施形態に当てはまるわけではない。PCIeコントローラ212は、従来、NVMeなどの高速構成要素を接続するためのインタフェース規格を規定している。示されるように、PCIeコントローラ212は、インバウンド通信およびアウトバウンド通信を暗号化/復号するための暗号化エンジン214を含む。CPU210は、PCIeコントローラ212を介して周辺構成要素(すなわち、NVMeドライブ250)と通信する。NVMeコントローラ252は、NVMeドライバへのポータルとして機能し、インバウンド/アウトバウンド通信を暗号化/復号するための追加の構成要素(図示せず)を含むことができる。CPU210とNVMe250との間の通信は、インライン通信と見なされる。
NVMeドライブのインライン暗号化は、NVMeドライバに固有の課題をもたらす。図2の例示的な実施形態では、課題は、NVMeドライブ250がドライバ自体にNVMeコントローラ252を含むことである。その結果、SOC202内のインライン暗号化エンジン214は、どのパケットを暗号化/復号しなければならないか、およびそれらの暗号化に必要なキー/微調整マテリアルを決定するために必要なメタデータを欠いている。
従来の記憶デバイス暗号化方法論には、微調整を使用するAES-XTS規格が含まれる。そのような方法論では、微調整は論理ブロックアドレス(LBA)を使用して生成され、課題は、ホストが直接メモリアクセス(DMA)経路内のドライブからブロックアドレスを受信しないことである。LBAは、内部のドライブによって管理される。第2の課題は、ドライブに向かうコマンドは、ドライブによって解析され実行されなければならないため、暗号化することができないことである。結果として、SOC(すなわち、暗号化エンジン214)におけるインライン暗号化は、パケットを解析し、どれがデータパケットであり、どれがコマンドパッケージであるかを把握するメカニズムを必要とする。
後で詳細に説明するように、メモリ201は、暗号化データ構造ルックアップデータ構造230によってインデックス付けされた暗号化データ構造232を格納するためのものである。暗号化データ構造232は、AES-XTS用の微調整として用いるLBAの生成に用いる情報を格納するためのものである。
データの暗号化および復号は、SOC内で実現される。図3Aおよび図3Bは、本開示の実施形態による、ライン速度でのメモリアクセスのためのシステムアーキテクチャを示す。
具体的には、図3Aは、メモリ360からの読み出しおよびデバイス302への書き込みに使用される、ライン速度でのメモリ読み出しプロセスのためのシステムアーキテクチャを示す。図3Aを参照すると、NVMeドライブ302は、図1および図2のNVMeドライブ150または250に対応することができる。一例では、NVMeドライブ302は、メモリ読み出し動作393によって示されるように、メモリ360上の書き込み動作301を処理するソリッドステートドライブ(SSD)を備える。メモリ360は、図1および図2のメモリ108または201に対応することができる。メモリ360は、例えば、ダイナミックランダムアクセスメモリ(DRAM)を含むことができる。
従来のSSDは、シリコンで製造されるインターコネクトされたフラッシュメモリチップの基板にデータを読み書きする。NVMe SSDは、その速度のために人気が高まっている。NVMe SSDは、PCIeバスネットワーク(図示せず)を介して取り付けられた不揮発性記憶媒体にアクセスするために、NVMeホストコントローラホストコントローラインタフェース仕様(NVMHCIS)(図示せず)を使用する。
再び図3Aを参照すると、NVMeドライブ302は、データを取得するためにメモリ360への直接メモリアクセス(DMA)を必要とし得る。このため、NVMeドライブ302は、SOC320に対してDMA読み出し要求310を発行する。SOC320は、図1および図2のコンピューティングデバイス/SOC100またはSOC202に対応することができる。DMA読み出し要求310は暗号化されていなくてもよい。
SOC320は、NVMeドライブ302とメモリ360との間に介在する。メモリ360は、ダイナミックランダムアクセスメモリ(DRAM)を含むことができる。SOC320は、暗号化コントローラ(暗号コントローラ)322、ハードウェアキーエンジン324、および入力/出力メモリ管理ユニット(IOMMU)328と共に示されている。ハードウェアキーエンジンは、(ソフトウェアによってプログラムされた)CPU ISA340から、またはセキュリティコントローラからそのキーを受信する。
暗号コントローラ322は、1つまたは複数のプロセッサ回路および構成要素を含むことができる。1つまたは複数の例では、暗号コントローラ322は、SOC320のPCIeコントローラ212に実装される。例えば、暗号コントローラ322は、図2に示す暗号化エンジン214を実装するか、またはその一部とすることができる。1つまたは複数の例では、暗号コントローラ322は、暗号メモリ回路および/またはルックアップテーブルに格納された命令に従ってデータを暗号化または復号するように構成された暗号化/復号エンジン325を含む。暗号コントローラ322は、任意に、キールックアップテーブル(KLT)326も含むことができる。KLT326は、以下でさらに説明するように、様々なルックアップテーブルを格納するために使用されるメモリ回路である。
暗号コントローラ322は、任意に、暗号コントローラ322のプロセッサ回路と通信する1つまたは複数の静的ランダムアクセスメモリ(SRAM)回路を備えることができるメモリを含むことができる。メモリ回路327は、暗号コントローラ322内の1つまたは複数のプロセッサ回路(図示せず)に複数の所望のタスクを実行させるための1つまたは複数の命令を格納することができる。タスクは、例えば、データを暗号化または復号するために必要な暗号化情報の受信および格納、データおよび/またはキーテーブルの形成、ならびに暗号化または復号されたデータをSOC320の外部の構成要素と通信することを含む。形成されると、そのようなテーブルは、キールックアップテーブル(KLT)326、暗号化データ構造232、および/または暗号化データ構造ルックアップデータ構造230に格納され得る。
簡単にするために、以下の例示的な実施形態は、適用可能な場合には暗号化/復号エンジン325およびメモリ327を含むように一般的に暗号コントローラ322を参照する。
暗号コントローラ322はまた、DMA対応I/Oバスを外部メモリ360に接続する入力/出力メモリ管理ユニット(IOMMU)328を含む。1つまたは複数の例では、IOMMUはSOC320内にあるが、暗号コントローラ322内にはない。暗号コントローラは、IOMMUとメモリ360との間にある。
ソフトウェア340は、CPU命令セットアーキテクチャ(ISA)342を介してSOC320とインタフェースする。ISA342は、ソフトウェア340とSOC320との間のインタフェースとして機能する。1つまたは複数の例では、ソフトウェア340は、複数の暗号化キーをサポートする。ソフトウェア340は、キーをプログラムすることができる。4つのタイプのキー:(1)生成されたハードウェア、(2)ラップされたハードウェア、(3)平文キー、および(4)暗号化なしの「キー」があり得る。セキュリティコントローラ341は、ソフトウェア340に帰属する機能を実装するための1つまたは複数のプロセッサ(回路またはロジック)を備えるようにソフトウェア340の一部として示されている。
別の実施形態では、ソフトウェア340は、キーラップ構成344を利用することができる。キーラップ構成は、暗号化キーマテリアルをカプセル化(暗号化)するように設計された対称暗号化アルゴリズムのクラスである。キーラップアルゴリズムは、信頼できない記憶装置に格納されている間、またはキーが信頼できない通信ネットワークを介して送信されるときにキーを保護することを意図している。ここで、通信はSOC320の外部にあるので、キーラップ/ハンドル構成を任意に使用することができる。
例示的な実装形態中、NVMeドライバ(例えば、SSD)302は、SOC320に読み出し要求310を送信する。読み出し要求310は暗号化されていなくてもよい。任意の実施形態では、読み出し要求310の一部は暗号化されてもよい。読み出し要求310は、暗号化データ構造232を使用して(暗号化エンジン214などの)暗号コントローラ322が要求されたデータの1つまたは複数の暗号化を識別することを可能にする、暗号化データ構造ルックアップデータ構造230インデックスを含む。NVMeドライブ302とSOC320との間のPCIeリンクを使用するとき、読み出し要求310は、読み出し要求のためのPCIeトランザクションレイヤパケット(TLP)フォーマットに準拠することができ、TLPヘッダは、暗号コントローラ322による要求されたデータの暗号化を容易にするために、230および232を使用してLBA微調整を生成する際に使用することができる。読み出し要求310が暗号化されていない場合、暗号コントローラ322は関与せず、SOC320は読み出し要求330を、IOMMU328を介してメモリ360に中継する。要求に応答して、メモリ360は、IOMMU328を介してSOC320に読み出し応答332を送信する。
暗号コントローラ322は、開示された実施形態に従って、読み出し応答332において要求されたデータを受信し、要求されたデータを暗号化する。特定の実施形態では、応答は1つまたは複数のデータパケットを含む。データパケットは、一般に、ヘッダ部分およびペイロード部分を含むことができる。パケットのペイロード部分は、暗号化され得るデータを含む。要求されたデータは、暗号化キーを使用して暗号化される。暗号化キーは、ソフトウェア340によって提供され得る。上述したように、エンドポイントとのSOC通信は、例えば、本明細書の一例に従って説明するように、PCIeエンドポイントがTLPパケットに最大4つの32ビットヘッダを付加することを可能にするPCIeプロトコルによって管理され得る。PCIeエンドポイントは、これらのヘッダ内の任意の追加データを送信する選択肢を有する。ヘッダは、NVMeコントローラ304によって追加されてもよい。
別の実施形態では、読み出し要求310(および本明細書で後述する書き込み要求370)のヘッダ内のアドレスビットのいくつかは、インデックスを示すために使用されてもよい。PCIeコンテキストでは、アドレスビットはTLPヘッダに含まれてもよい。読み出し要求310および書き込み要求370は、64ビットのアドレス情報を有することができるDMA要求であってもよい。アドレス情報は、物理アドレス、ゲスト物理アドレス、またはIO仮想アドレスの3つの情報のうちの1つであり得る。利用可能なアドレスビットの数は、エントリ当たり8バイト(すなわち、32Kバイトテーブル)を有する4Kエントリのテーブルにインデックスを付けるために使用され得る。
暗号コントローラ322は、このヘッダ情報を解析して除去し、インデックスを使用して暗号化データ構造ルックアップデータ構造230内のエントリを検索し、その検索からの情報を使用して、暗号化データ構造232を使用してベースLBAから実際のLBAを計算する。
1つまたは複数の例では、暗号コントローラ322は、暗号化のためにメモリ360から読み出された要求されたデータを選択する。例示的な実施態様では、この選択は、1つまたは複数のNVMeドライブを識別するために使用されるバスデバイス機能(BDF)に基づく。ソフトウェア340(オペレーティングシステム(OS)、ソフトウェアアプリケーション、ホストドライバなどのうちの1つまたは複数を含むことができる)は、暗号コントローラ322(図示せず)へのソフトウェアインタフェースを使用してNVMeドライブ302のBDFを提供することができる。NVMeドライブ302に格納するためにメモリ360から読み出されたデータは、読み出しデータをNVMeドライブに渡す前に、暗号コントローラ322によって暗号化される。NVMeドライブ302から発する暗号化されたデータは、別のデバイス、例えば、メモリ360に渡す前に、暗号コントローラ322によって復号される。いくつかの実施形態では、他のデバイスから発するデータは、暗号コントローラによって暗号化/復号されなくてもよい。
要求された読み出しデータは、コマンドストリームを使用してホスト(例えば、ソフトウェア340)によって要求されたデータを指す。コマンドストリームは、ソフトウェア340によって構成され、NVMeドライブ302に送信され、その後、NVMeドライブ302は、読み出し応答332において提供される(DMAセッション中の)TLPプレフィクスにおいてそれを送り返す。SOC320はメモリからデータを読み出し、暗号コントローラはデータを暗号化し、暗号化されたデータ312はNVMeドライブ302に通信される。NVMeコントローラ304は、暗号化されたデータを受信し、SSDフラッシュメモリ303に格納する。次に、暗号化されたデータ312は、SSD書き込み動作301によって示されるように、NVMeドライブ302に書き込まれる。暗号化はSOC320で行われるため、暗号化動作全体はインラインDMA速度で行われ、SOC320の外部の構成要素に起因する遅延は発生しない。
図3Bは、ライン速度でのメモリ書き込みプロセスのためのシステムアーキテクチャを示す。図3Bにおいて、NVMeドライブ302は、メモリ360にデータを書き込むことを意図している。プロセスは、NVMeドライブ302が書き込み要求370を発行することから始まる。書き込み要求370は、矢印370のハッチングによって示されるように暗号化されたデータを含むことができる。したがって、NVMe302に格納されたデータが既に暗号化されているものである1つまたは複数の例では、NVMeコントローラ304は、書き込み要求370で送信されるペイロードデータを暗号化することができる。
SOC320は、NVMeコントローラ304から暗号化された書き込み要求370を受信する。書き込み要求370は、NVMeドライブ302のSSDフラッシュメモリ303からの暗号化されたデータを含む。暗号コントローラ322でのデータの復号を容易にするために、書き込み要求370は、キーテーブルインデックスと、任意にLBAへのオフセットとをさらに含む。読み出し要求310に関連して前述したように、NVMeドライブ302とSOC320との間のPCIeリンクを使用する場合、書き込み要求370は、書き込み要求のためのPCIe TLPフォーマットに準拠することができ、TLPヘッダは、キーテーブルインデックスおよびLBAへのオフセットを示すために使用することができる。暗号コントローラ322は、ソフトウェア340からのキー情報、KLT326からのキールックアップテーブル、暗号化データ構造232、暗号化データ構造ルックアップデータ構造230、およびハードウェアキーエンジン324からのハードコードされた暗号キーのうちの1つまたは複数を使用して、書き込み要求370から暗号化されたデータを復号する。次に、書き込み要求370の復号されたデータは、矢印372によって示されるようにメモリ360に送信される。次に、メモリ360は、割り当てられたメモリスロットにデータを書き込む。1つまたは複数の例では、データを書き込むためのメモリ360内のメモリ位置を示すアドレスは、書き込み要求370のヘッダ内に示すことができる。この例では、キーエンジン324が図3Aおよび図3Bに示されており、SOC320の一部である。キーエンジン324は、暗号コントローラ322内に実装されてもよい。
図4Aは、NVMe SSDにデータを書き込むための例示的なインライン暗号化を示す。図3Aに関連して説明するように、NVMe(SSD)は、読み出し要求310を発行する。これは、図4Aの動作401として示されている。読み出し要求310は、NVMeドライブ302(例えば、コントローラ304)からSOC320に送信されるDMA要求である。動作402において、SOC320は、読み出し要求310を受信し、読み出し要求330を外部メモリ360に送信して、メモリ360から読み出されるべきデータを要求する。動作406において、外部メモリ360は、要求されたデータを含む読み出し応答332で読み出し要求330に応答する。動作408において、(暗号化されていない)データを含む読み出し応答332がSOC320において受信される。動作410において、SOCの暗号コントローラ322(図示せず)は、暗号化されたデータ312をNVMeドライブ302に送信する前に、ハードウェアキー、キーインデックス、および他の暗号化キー情報を使用してデータを暗号化する。読み出し要求310は、SOCの暗号コントローラ322がメモリ360からの要求されたデータの暗号化のために暗号化キーおよび任意に暗号化パラメータを選択することを可能にするために、キーテーブルインデックスおよび任意にLBAのオフセットを含む暗号化情報を含むことができる。SOC320もNVMeドライブ302も、NVMeドライブ302のフラッシュメモリに格納されるべきデータを復号することができないことに留意されたい。むしろ、データは暗号化されたデータとして格納される。
図4Bは、NVMeの外部のメモリモジュールにデータを書き込むための例示的なインライン復号プロセスを示す。図3Bに関連して説明するように、動作422では、NVMe(SSD)は、書き込み要求370をSOCに発行する。1つまたは複数の例では、暗号化されたデータを含み得る書き込み要求370は、NVMeコントローラ(304、図3B)によって暗号化される。書き込み要求370は、SOC320に送信される。動作426において、SOC320は、SOC320の暗号コントローラ322において書き込み要求370内の暗号化されたデータを復号する。次に、書き込み要求370からの復号されたデータは、動作428に示されるように、書き込み要求372内のメモリに送信される。動作430において、メモリ360は、復号されたデータを受信し、適切なメモリスロットに書き込む。
図5は、単一のキーIdが使用される本開示の1つまたは複数の例によるキールックアップテーブルを示す。図5では、NVMeドライブ510は、NVMeコントローラ512と共に示されている。図3Aおよび図3Bを参照して説明するように、暗号コントローラ530は、トランザクショナルデータを暗号化/復号する暗号コントローラ322に対応することができる。PCIeインタフェース520は、暗号コントローラ530とNVMeドライブ510との間のインタフェースを表す。図5の暗号コントローラ530は、例えば、データの暗号化および復号のために暗号化規格AES-XTS-256を使用することができる。矢印515によって示されるように、メモリ360に対するDMA(64ビット)読み出しまたは書き込みアクセスのための物理アドレスを示すアドレスデータ540が、NVMeドライブ515によって開始される。1つまたは複数の例では、アドレスデータ540は、読み出しまたは書き込みされるデータのキールックアップインデックス542、LBAオフセット544、および物理アドレス546を含む。アドレスデータ540は、PCIeインタフェース520を介して暗号コントローラ530を備えるSOCに提供される読み出し要求または書き込み要求に含まれる。アドレスデータ540は、暗号コントローラ530(また、322、図3A、図3B)によって、データを暗号化/復号するための追加情報を取得するために使用される。KLT550は、SOC320(図3A、図3BのKLT326参照)に格納されてもよい。データ540内のキールックアップインデックス542は、KLT550から(データを暗号化するために使用される)キーID、LBA、およびファイル情報データを取得するために、暗号コントローラ530(また、322、図3A、図3B)によって使用され得る。KLT550のキーIDは、データの暗号化/復号のためのキーを提供することができる(キーテーブル560を参照)。ファイル情報データは、暗号化/復号のための微調整を生成するための追加情報を提供することができる。
説明したように、例示的なインライン暗号エンジンは、NVMeドライブのDMA経路上のデータを暗号化および復号する。この暗号化および復号は、SOC内で実現される。いくつかの実施形態では、暗号化はAES-XTS256規格を使用する。AES-XTS256の固有の属性は、AESラウンドを使用した暗号化または復号に第1のキーが使用され、微調整の生成に第2のキーが使用される、2つの256ビットキーを使用することである。
微調整は、同じキーを使用して暗号化された2つの平文が同じ暗号文をもたらす既知の平文攻撃から保護する。このような攻撃から保護するために、第2のキーでノンスを暗号化することによって生成される微調整が従来使用されている。生成された微調整は、同じキーで暗号化された2つの平文であっても異なる微調整により異なる暗号文をもたらすように、その後、暗号化の平文と暗号文とをXORするために使用される。
上述するように、インライン暗号化は、データがドライブからDRAMに、またはその逆に読み書きされているときに暗号化および復号が行われていることを意味する。これは、NVMeコントローラがデータをメモリに書き込み、次いで何らかの他のエージェントがメモリから平文データを読み出し、それを暗号化してメモリに書き戻すか、またはメモリから暗号文を読み出し、それを復号してメモリに平文を書き込む、索引暗号化とは対照的である。その結果、ドライブは、暗号化のための情報を提供しなくてもよい。
この問題を処理するために、テーブルベースの手法を使用し、ホストソフトウェアがテーブルを設定することを可能にすることができ、その後、暗号コントローラはテーブルを検索することができる。このオプションは実現可能であるが、高速ルックアップが必要であるため、暗号コントローラが階層テーブルを探索または解析することは現実的ではない。テーブルへのインデックスが必要であり、そのインデックスはトランザクションでマッピングされる必要がある。これは、トランザクション内でインデックスを送信するという問題につながる。この問題は、未使用のアドレスビットを使用して解決することができる。しかしながら、特に大量のデータをアドレシングするために全てのアドレスビットを使用する必要があるクラウドサービスプロバイダのデータセンターにおいて、全てのそれらのアドレスビットを必要とするプラットフォームにアドレスビットを使用せずにこの問題を解決する必要もある。
いくつかの実施形態では、PCIeエンドポイントは、例えば、上記の図3A、図3Bに関連して、例えば、説明したように、これらのヘッダ内で追加のデータを送信する選択肢を有する。PCIeヘッダは、以下に詳述するようにインデックスを送信するために使用することができる。暗号コントローラは、このヘッダ情報を解析して除去し、インデックスを使用してレコード/エントリを検索して、ベースLBAから実際のLBAを計算する。これにより、様々な実施形態は、1つまたは複数の例では、64Kの保留中のエントリ(16ビットを使用)および20ビット(すなわち、1M*4K)または4ギガバイトの保留中の入力/出力(I/OまたはIO)トランザクションのオフセットのインデックスをサポートすることができる。実装形態に応じて、テーブル/インデックスサイズはこの例よりも大きくすることができる。
さらに、そのような実施形態は、アドレスビットを再使用する必要がないため、スケーラビリティを提供することができる。また、アドレスビットを増やすためにシステムに追加のワイヤ/ピンを設ける必要がなく、実装コストおよび必要なフットプリントを抑えることができる。したがって、いくつかの実施形態は、実装に応じてより多くのビットを送信するための修正を可能にすることによって、さらなる柔軟性を提供する。
このため、いくつかの実施形態は、1つまたは複数のPCIe拡張を使用してNVMeドライブ上でインライン暗号化を実施する技術に関する。一例では、キーテーブルへのインデックスがホスト(例えば、ホストソフトウェア304)からNVMeドライブに提供され、次に、NVMeドライブは、DMA(またはPCIeのような他のメモリアクセス)要求における暗号化/復号に使用されるキーのキーテーブルインデックスを、オフセット値、例えば、PCIe TLP(トランザクションレイヤパケット)プレフィクスと共に通信する。
一般に、NVMeコマンドは、コマンドコードおよびパラメータを含む。図5は、1つまたは複数の例で使用され得る、読み出し動作または書き込み動作に関連するNVMeコマンドのサンプル情報を示す。オペコードまたは演算コード502は、コマンドが読み出しコマンドであるか書き込みコマンドであるかを示し、PRP(物理領域ページ)エントリ(またはページ)504は、ゲスト物理アドレスを実際のデータに提供する。図示のように、NVMeコマンドでは、コマンドと共にソフトウェアによって送信される32ビットタグ(一例では最大)に対して32ビットを予約することができる。ソフトウェア340は、タグ506に32ビットインデックス(および必要に応じて他の情報)を入力し、コマンドの残りは同じままである。本明細書のいくつかの実施形態は32ビットタグを参照して説明されているが、システム能力に応じて他のサイズタグも使用されてもよい。いくつかの実施形態では、NVMeコマンドは、TLPのデータとしてのPCIeトランザクションレイヤパケット(TLP)の一部である。
図6は、暗号化データ構造ルックアップデータ構造および暗号化データ構造の使用の実施形態を示す。特に、これは、いくつかの実施形態では、暗号化データ構造ルックアップデータ構造232および暗号化データ構造230を示す。
暗号化データ構造ルックアップデータ構造232は、1つまたは複数のエントリを含む。各エントリは、ラインインデックス607(ビット63:52として示す)、ゲストページ物理アドレス(GPPA)609(ビット51:12として示す)、および場合によっては未使用のビット(ビット11:0として示す)を含む。ラインインデックス607は、暗号化データ構造230内の特定のエントリへのポインタの少なくとも一部を提供する。
暗号化データ構造230は、エントリごとに、ベースLBA、キーID、および1つまたは複数のGPPAを格納する。キーIDは、キー記憶装置601内のキー603を指し示す。キー記憶装置601は、ダイ上、隔離メモリ内などにあってもよい。典型的には、暗号化データ構造230は、暗号コントローラ322によってのみ読み出し可能であり、ソフトウェアによって書き込み可能であるように、メモリ201内の隔離メモリ内にある。これは、範囲レジスタまたはIOMMUのいずれかを使用してこのように構成することができる。このメモリはBIOSによって割り当てられ、OSによって書き込まれる。
暗号化データ構造エンジン610において、オーケストレータ616(例えば、ファームウェアルーチン、有限状態機械など)の案内下で、GPA605を有するTLPおよび/またはNVMeコマンドを受信すると、TLPハンドラ611に、GPA605からのインデックスビットを使用して暗号化データ構造ルックアップデータ構造232にアクセスさせる。例えば、図5のPRPエントリ1によって提供されるGPAである。エントリは、GPA605によって提供される上位ビットによってインデックス付けされる。これらのGPA605ビットは、暗号化データ構造ルックアップデータ構造232にライン(またはエントリ)インデックスを提供するので、インデックスビット(INDEX_BITS)と呼ばれる。この説明図において、GPA605のビット63:52はINDEX_BITSであることに留意されたい。
ラインインデックス607は、アクセス回路614を使用して暗号化データ構造230内の特定のエントリ(ライン)にアクセスするために使用される。この例では、第2のエントリはラインインデックス値に基づいてアクセスされる。暗号化データ構造ルックアップデータ構造232内のラインには、GPPA1のGPPA値が含まれていることに留意されたい。そのラインは返され、ベースLBA、キーID、およびGPPAを含む。
キーIDは、キー記憶装置601内のキー603にアクセスするために用いられる。暗号化データ構造230およびベースLBAのライン内のGPPA1の位置は、アクセスされたキーを使用してTLP600からデータ616を暗号化するために暗号化/復号エンジン325によって微調整615として使用されるLBAの生成に使用され得る。暗号化されたデータはその後、記憶装置620に送信される。
この説明図において、インデックス空間に12ビットあり、暗号化データ構造ルックアップデータ構造232内の4Kエントリにつながる。これは、16Mエントリにつながる24ビット(0-11)に拡張することができる。ハードウェアの読み出し粒度に応じて、暗号化データ構造230内のエントリのサイズ(LINE_SIZE)を増減することができる。また、暗号化データ構造230のサイズは、(アドレス内のインデックスに加えて、またはアドレス内のインデックスの代わりに)TLPヘッダ内に追加のインデックスビットを追加することによって増加させることができる。その結果、暗号化データ構造230のサイズは、アーキテクチャ上無制限であり、システム内で利用可能なメモリの量によってのみ制限される。例えば、アーキテクチャが128Bメモリ読み出しをサポートする場合、LINE_SIZEは128バイトに増加し得る。8バイトは、ラインに対応付けられたキーを識別するためのKEY_IDと、BASE_LBAに対する残りの点とを含むヘッダに使用される。
いくつかの実施形態では、LINE_SIZE、インデックスビット数、BLOCK_SIZE、および暗号化データ構造ルックアップデータ構造232のサイズのうちの1つまたは複数は構成可能である。例えば、いくつかの実施形態では、PCONFIG命令は、プラットフォーム機能を構成するためのソフトウェアによって呼び出される。PCONFIGは複数のリーフをサポートし、リーフ関数は1つまたは複数のレジスタに適切なリーフ値を設定することによって呼び出される。リーフは、ホストソフトウェアがこれらのパラメータを構成することを可能にする。さらに、このリーフは、リング0からのみアクセス可能であり、VMEXIT制御を有する。これにより、必要に応じてVMMが全てのVMを構成できるようになる。
この手法の利点は、高価なSRAMに依存せず、それによって解決策をスケーラブルにし、実装コストを低減できることである。さらに、この解決策は、高い保留中のDMA転送要件を有するサーバ、およびそのような要件が低いIOTデバイスにスケールすることができる。
図7は、DRAM支援インライン暗号化または復号を実行するために暗号コントローラ322または暗号化データ構造エンジン610によって実行される方法の実施形態を示す。701において、TLPが受信される。TLPは、暗号化するためのデータ、PRP GPAなどを含む。
703において、TLPのGPAを使用して暗号化データ構造ルックアップデータ構造エントリからインデックス値が読み出される。図6に関して、暗号化データ構造ルックアップデータ構造232は、暗号化データ構造230のインデックス値を取得するためにアクセスされる。
いくつかの実施形態では、705において、暗号化または復号が使用されるべきかどうかの判定が行われる。例えば、オーケストレータ616がこの決定を行ってもよい。いくつかの実施形態では、インデックスビットが全て0である場合、暗号化/復号は使用されない。暗号化/復号が使用されない場合、TLPからのデータは暗号化/復号されず、ストレージ、デバイス(例えば、CPUコアなど)などに送信される。
暗号化/復号が使用される場合、インデックス値は、707において暗号化データ構造(例えば、暗号化データ構造230)の特定のエントリを取得するために使用される。エントリは返され、ベースLBA、キーID、および1つまたは複数のGPPAを含む。
LBA値は、709において、暗号化データ構造のアクセスされた特定のエントリ内のGPPA位置を使用して計算される。使用するGPPA位置は、インデックス付けされた暗号化データ構造ルックアップデータ構造エントリで識別されたGPPA値である。
いくつかの実施形態では、ブロックサイズが4KBである場合、GPPA位置にブロックサイズを乗算して中間結果を生成し、LBA値は、ベースLBAに追加されたその中間結果である。4KBは例示的なものであり、ブロックサイズはいくつかの例では構成可能であることに留意されたい。いくつかの実施形態では、ブロックサイズが512bである場合、GPPA位置にブロックサイズ*8を乗算して中間結果を生成する。オフセットは、TLPのGPAを取得し、0XFFFFとAND処理し、次にその結果を7だけシフトする(例えば、GPA&0xFFFF)>>7ことによって計算される。LBAはオフセットに512を乗算し、中間結果を加算する(例えば、(中間結果)+(オフセット*512))。
キーIDは、713においてキーを取得するために使用され、AES_XTS暗号化または復号は、715においてキーおよび計算されたLBA値を微調整入力として使用してTLPのデータに対して実行される。
暗号化または復号されたデータは、717において転送される。
[例示的なコンピュータアーキテクチャ]
例示的なコンピュータアーキテクチャを以下に詳細に説明する。ラップトップ、デスクトップ、およびハンドヘルドPC、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、ならびに様々な他の電子デバイスのための、当技術分野において既知の他のシステム設計および構成も好適である。一般に、本明細書に開示されるプロセッサおよび/または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが概して好適である。
図8は、例示的なシステムの実施形態を示す。マルチプロセッサシステム800は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト850を介して結合された第1のプロセッサ870および第2のプロセッサ880を含む複数のプロセッサを含む。いくつかの実施形態では、第1のプロセッサ870および第2のプロセッサ880は同種である。いくつかの実施形態では、第1のプロセッサ870および第2のプロセッサ880は異種である。
プロセッサ870および880は、それぞれが統合メモリコントローラ(IMC)ユニット回路872および882を含んで示されている。プロセッサ870はまた、そのインターコネクトコントローラユニットの一部として、ポイントツーポイント(P-P)インタフェース876および878を含む。同様に、第2のプロセッサ880は、P-Pインタフェース886および888を含む。プロセッサ870、880は、P-Pインタフェース回路878、888を使用してポイントツーポイント(P-P)インターコネクト850を介して情報を交換することができる。IMCの872および882は、プロセッサ870、880をそれぞれのメモリ、すなわち、メモリ832およびメモリ834に結合し、これらは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。
プロセッサ870、880は各々、ポイントツーポイントインタフェース回路876、894、886、898を使用して個々のP-Pインターコネクト852、854を介してチップセット890と情報を交換することができる。チップセット890は、任意に、高性能インタフェース892を介してコプロセッサ838と情報を交換することができる。いくつかの実施形態では、コプロセッサ838は、例えば、高スループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどの専用プロセッサである。
プロセッサが低電力モードに置かれると、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るように、共有キャッシュ(図示せず)は、プロセッサ870、880のいずれかの中、または両方のプロセッサの外部に含まれ得、さらにP-Pインターコネクトを介して複数のプロセッサに接続される。
チップセット890は、インタフェース896を介して第1のインターコネクト816に結合することができる。いくつかの実施形態では、第1のインターコネクト816は、周辺構成要素インターコネクト(PCI)のインターコネクト、またはPCI Expressインターコネクトもしくは別のI/Oインターコネクトなどのインターコネクトであり得る。いくつかの実施形態では、インターコネクトのうちの1つはプロセッサ870、880、および/またはコプロセッサ838に関連する電力管理操作を実行する、回路、ソフトウェア、および/またはファームウェアを含み得る電力制御ユニット(PCU)817に結合される。PCU817は、制御情報を電圧レギュレータに提供して、電圧レギュレータに適切な調節電圧を生成させる。PCU817はまた、生成された動作電圧を制御するために制御情報を提供する。様々な実施形態では、PCU817は、ハードウェアベースの電力管理を実行するために、様々な電力管理ロジックユニット(回路)を含み得る。そのような電力管理は、完全にプロセッサにより制御されてもよく(例えば、様々なプロセッサハードウェアによって制御され、かつ、ワークロードおよび/または電力、熱、または他のプロセッサ制約によってトリガされ得る)、および/または、電力管理は、外部ソース(プラットフォームまたは電力管理ソースまたはシステムソフトウェアなど)に応答して実行されてよい。
PCU817は、プロセッサ870および/またはプロセッサ880とは別個のロジックとして存在するものとして示されている。他の場合では、PCU817は、プロセッサ870または880のコア(図示せず)のうちの所与の1つまたは複数上で実行し得る。いくつかの場合では、場合によってはPCU817は、Pコードと称される、それ自体の専用電力管理コードを実行するように構成されたマイクロコントローラ(専用もしくは汎用)または他の制御ロジックとして実装されてもよい。さらに他の実施形態では、PCU817によって実行される電力管理操作は、プロセッサの外部にある別個の電力管理集積回路(PMIC)または別の構成要素などによって、外部でプロセッサに実装されてもよい。さらに他の実施形態では、PCU817によって実行される電力管理操作は、BIOSまたは他のシステムソフトウェア内で実装されてもよい。
様々なI/Oデバイス814は、第1のインターコネクト816を第2のインターコネクト820に結合するインターコネクト(バス)ブリッジ818と共に、第1のインターコネクト816に結合されてもよい。いくつかの実施形態では、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータもしくはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ(FPGA)、または任意の他のプロセッサなどの1つまたは複数の追加のプロセッサ815が第1のインターコネクト816に結合される。いくつかの実施形態では、第2のインターコネクト820は、低ピンカウント(LPC)インターコネクトであり得る。例えば、キーボードおよび/またはマウス822、通信デバイス827、ならびに記憶ユニット回路828を含む様々なデバイスが第2のインターコネクト820に結合され得る。記憶ユニット回路828は、いくつかの実施形態では、命令/コードおよびデータ830を含むことができるディスクドライブまたは他の大容量記憶デバイスであってもよい。さらに、オーディオI/O824が第2のインターコネクト820に結合され得る。上に説明されるポイントツーポイントアーキテクチャ以外のアーキテクチャが可能であることに留意されたい。例えば、ポイントツーポイントアーキテクチャの代わりに、マルチプロセッサシステム800などのシステムは、マルチドロップインターコネクトまたは他のそのようなアーキテクチャを実装し得る。
[例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ]
プロセッサコアは、異なる態様で、異なる目的のために、異なるプロセッサにおいて実装され得る。例えば、そのようなコアの実装は、1)汎用コンピューティングを意図する汎用インオーダコア、2)汎用コンピューティングを意図する高性能汎用アウトオブオーダコア、3)主にグラフィックおよび/またはサイエンティフィック(スループット)コンピューティングを意図する専用コアを含み得る。異なるプロセッサの実装は、1)汎用コンピューティングを意図する1つまたは複数の汎用インオーダコア、および/または汎用コンピューティングを意図する1つまたは複数の汎用アウトオブオーダコアを含むCPU、ならびに2)主にグラフィックおよび/またはサイエンティフィック(スループット)を意図する1つまたは複数の専用コアを含むコプロセッサを含み得る。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、異なるコンピュータシステムアーキテクチャは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同一のパッケージにおける別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、場合によっては統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジックなどの専用ロジック、または専用コアと称される)、および4)説明されたCPU(場合によっては、アプリケーションコアもしくはアプリケーションプロセッサと称される)と同じダイ上に、上述のコプロセッサ、および追加の機能性を含み得るシステムオンチップを含み得る。例示的なコアアーキテクチャが次に説明され、例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
図9は、複数のコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックスを有することができるプロセッサ900の実施形態のブロック図を示す。実線のボックスは、単一のコア902Aと、システムエージェント910と、1つまたは複数のインターコネクトコントローラユニット回路916のセットとを有するプロセッサ900を示す一方、任意選択的な点線のボックスの追加は、複数のコア902(A)~(N)と、システムエージェントユニット回路910における1つまたは複数の統合メモリコントローラユニット回路914のセットと、専用ロジック908と、1つまたは複数のインターコネクトコントローラユニット回路916のセットとを有する代替的なプロセッサ900を示す。プロセッサ900は、図8のプロセッサ870もしくは880、またはコプロセッサ838もしくは815のうちの1つであってもよいことに留意されたい。
したがって、プロセッサ900の異なる実装は、1)統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジックである専用ロジック908(図示しないが、1つまたは複数のコアを含んでよい)と、1つまたは複数の汎用コアであるコア902(A)~(N)(例えば、汎用インオーダコア、汎用アウトオブオーダコア、または2つの組み合わせ)とを有するCPU、2)グラフィックおよび/またはサイエンティフィック(スループット)を主に意図する多数の専用コアであるコア902(A)~(N)を有するコプロセッサ、ならびに3)多数の汎用インオーダコアであるコア902(A)~(N)を有するコプロセッサを含んでよい。したがって、プロセッサ900は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット回路)、高スループット多集積コア(MIC)コプロセッサ(30以上のコアを含む)、組み込みプロセッサなどの、汎用プロセッサ、コプロセッサ、または専用プロセッサであってよい。プロセッサは、1つまたは複数のチップ上に実装され得る。プロセッサ900は、例えば、BiCMOS、CMOS、またはNMOSなどのいくつかのプロセス技術のいずれかを使用して、1つまたは複数の基板の一部であってもよく、および/または1つまたは複数の基板上に実装されてもよい。
メモリ階層は、コア902(A)~(N)内のキャッシュユニット回路904(A)~(N)、1つまたは複数の共有キャッシュユニット回路906のセット、および、統合メモリコントローラユニット回路914のセットに結合された外部メモリ(図示せず)の1つまたは複数のレベルを含む。1つまたは複数の共有キャッシュユニット回路906のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)などの1つまたは複数の中間レベルキャッシュ、またはラストレベルキャッシュ(LLC)などの他のレベルのキャッシュ、および/またはそれらの組み合わせを含んでよい。いくつかの実施形態では、リングベースのインターコネクトネットワーク回路912が、専用ロジック908(例えば、統合グラフィックスロジック)、共有キャッシュユニット回路906のセット、およびシステムエージェントユニット回路910をインターコネクトする一方、代替的な実施形態は、そのようなユニットをインターコネクトするために任意の数の周知技術を使用する。いくつかの実施形態では、1つまたは複数の共有キャッシュユニット回路906とコア902(A)~(N)との間でコヒーレンシが保持される。
いくつかの実施形態では、コア902(A)~(N)のうちの1つまたは複数は、マルチスレッディングすることが可能である。システムエージェントユニット回路910は、これらの902(A)~(N)を調整および動作させる構成要素を含む。システムエージェントユニット回路910は、例えば、電力制御ユニット(PCU)回路および/またはディスプレイユニット回路(図示せず)を含んでよい。PCUは、コア902(A)~(N)および/または専用ロジック908(例えば、統合グラフィックスロジック)の電力状態を調節するのに必要なロジックおよび構成要素であってもよく、または含んでもよい。ディスプレイユニット回路は、1つまたは複数の外部接続されたディスプレイを駆動するためのものである。
コア902(A)~(N)は、アーキテクチャ命令セットに関して同種であっても異種であってもよい。すなわち、コア902(A)~(N)のうちの2つ以上が同じ命令セットを実行することができる一方で、他のコアはその命令セットのサブセットまたは異なる命令セットのみを実行することができる。
[例示的なコアアーキテクチャ]
[インオーダおよびアウトオブオーダコアのブロック図]
図10Aは、本発明の実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図10Bは、本発明の実施形態によるプロセッサに含まれる、インオーダアーキテクチャコアの例示的な実施形態、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図10A~図10Bにおける実線のボックスは、インオーダパイプラインおよびインオーダコアを示す一方、任意選択的な点線のボックスの追加は、レジスタリネーミング用のアウトオブオーダ発行/実行パイプラインとコアとを示す。インオーダの態様がアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様が説明される。
図10Aにおいて、プロセッサパイプライン1000は、フェッチステージ1002、任意選択のレングスデコードステージ1004、デコードステージ1006、任意選択の割り当てステージ1008、任意選択のリネーミングステージ1010、スケジューリング(ディスパッチまたは発行としてもまた知られる)ステージ1012、任意選択のレジスタ読み出し/メモリ読み出しステージ1014、実行ステージ1016、ライトバック/メモリ書き込みステージ1018、任意選択の例外処理ステージ1022、および任意選択のコミットステージ1024を含む。それらのプロセッサパイプラインステージのそれぞれにおいて1つまたは複数の演算が実行されてよい。例えば、フェッチステージ1002の間に、1つまたは複数の命令が命令メモリからフェッチされ、デコードステージ1006の間に、1つまたは複数のフェッチされた命令はデコードされ得、転送されたレジスタポートを使用したアドレス(例えば、ロードストアユニット(LSU)アドレス)が生成され得、分岐転送(例えば、即時オフセットまたはリンクレジスタ(LR))が実行され得る。1つまたは複数の例では、デコードステージ1006およびレジスタ読み出し/メモリ読み出しステージ1014は、1つのパイプラインステージに組み合わされ得る。1つまたは複数の例では、実行ステージ1016の間に、デコードされた命令が実行され得、アドバンスドマイクロコントローラバス(AHB)インタフェースへのLSUアドレス/データのパイプライン処理が実行され得、乗算および加算の演算が実行され得、分岐結果を用いた算術演算が実行され得るなどである。
例として、例示的なレジスタリネーミング用のアウトオブオーダ発行/実行コアアーキテクチャは、次のようにパイプライン1000を実装してよい。1)命令フェッチ1038が、フェッチおよびレングスデコードステージ1002および1004を実行する。2)デコードユニット回路1040が、デコードステージ1006を実行する。3)リネーミング/割り当てユニット回路1052が、割り当てステージ1008およびリネーミングステージ1010を実行する。4)スケジューラユニット回路1056が、スケジュールステージ1012を実行する。5)物理レジスタファイルユニット回路1058およびメモリユニット回路1070が、レジスタ読み出し/メモリ読み出しステージ1014を実行し、実行クラスタ1060が、実行ステージ1016を実行する。6)メモリユニット回路1070および物理レジスタファイルユニット回路1058が、ライトバック/メモリ書き込みステージ1018を実行する。7)様々なユニット(ユニット回路)が、例外処理ステージ1022に関与してよい。8)リタイアメントユニット回路1054および物理レジスタファイルユニット回路1058が、コミットステージ1024を実行する。
図10Bは、実行エンジンユニット回路1050に結合されたフロントエンドユニット回路1030を含むプロセッサコア1090を示し、両方がメモリユニット回路1070に結合されている。コア1090は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってもよい。さらに別の選択肢として、コア1090は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、グラフィックスコアなどの専用コアであってよい。
フロントエンドユニット回路1030は、命令キャッシュユニット回路1034に結合された分岐予測ユニット回路1032を含み得、命令キャッシュユニット回路1034は、命令変換索引バッファ(TLB)1036に結合され、TLB1036は、命令フェッチユニット回路1038に結合され、命令フェッチユニット回路1038は、デコードユニット回路1040に結合される。1つまたは複数の例では、命令キャッシュユニット回路1034は、フロントエンドユニット回路1030よりもむしろ、メモリユニット回路1070に含まれる。デコードユニット回路1040(またはデコーダ)は、命令をデコードし、元の命令からデコード、もしくは別様にそれらを反映する、もしくはそれらから導出される、1つまたは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成してよい。デコードユニット回路1040はさらに、アドレス生成ユニット回路(AGU、図示せず)を含み得る。1つまたは複数の例では、AGUは、転送されたレジスタポートを使用してLSUアドレスを生成し、さらに、分岐転送(例えば、即時オフセット分岐転送、LRレジスタ分岐転送など)を実行し得る。デコードユニット回路1040は、様々な異なるメカニズムを使用して実装されてもよい。好適なメカニズムの例には、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)などが含まれるが、それらに限定されない。1つまたは複数の例では、コア1090は、特定のマクロ命令のマイクロコードを(例えば、デコードユニット回路1040内に、またはそうでなければフロントエンドユニット回路1030内に)格納するマイクロコードROM(図示せず)または他の媒体を含む。1つまたは複数の例では、デコードユニット回路1040は、プロセッサパイプライン1000のデコードまたは他のステージの間に生成された、デコードされた演算、マイクロタグ、またはマイクロ演算を保持/キャッシュするためのマイクロ演算(micro-op)または演算キャッシュ(図示せず)を含む。デコードユニット回路1040は、実行エンジンユニット回路1050において、リネーミング/割り当てユニット回路1052と結合されてよい。
実行エンジン回路1050は、リタイアメントユニット回路1054および1つまたは複数のスケジューラ回路1056のセットに結合されたリネーミング/割り当てユニット回路1052を含む。スケジューラ回路1056は、複数のリザベーションステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。いくつかの実施形態では、スケジューラ回路1056は、算術ロジックユニット(ALU)スケジューラ/スケジューリング回路、ALUキュー、算術生成ユニット(AGU)スケジューラ/スケジューリング回路、AGUキューなどを含むことができる。スケジューラ回路1056は、物理レジスタファイル回路1058に結合される。物理レジスタファイル回路1058のそれぞれは、1つまたは複数の物理レジスタファイルを表し、それらの異なるものは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)などの、1つまたは複数の異なるデータタイプを格納する。1つまたは複数の例では、物理レジスタファイルユニット回路1058は、ベクトルレジスタユニット回路、ライトマスクレジスタユニット回路、およびスカラレジスタユニット回路を含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、汎用レジスタなどを提供し得る。物理レジスタファイルユニット回路1058は、リタイアメントユニット回路1054(リタイアキューまたはリタイアメントキューとしてもまた知られる)とオーバーラップしており、(例えば、リオーダバッファ(ROB)およびリタイアメントレジスタファイルを使用する、将来のファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用する、レジスタマップおよびレジスタのプールを使用するなど)レジスタリネーミングおよびアウトオブオーダ実行が実装され得る様々なやり方を示す。リタイアメントユニット回路1054および物理レジスタファイル回路1058は、実行クラスタ1060に結合される。実行クラスタ1060は、1つまたは複数の実行ユニット回路1062のセットおよび1つまたは複数のメモリアクセス回路1064のセットを含む。実行ユニット回路1062は、様々な算術、ロジック、浮動小数点、または他のタイプの演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)について実行してよい。いくつかの実施形態は、特定の機能または機能のセットに専用の多くの実行ユニットまたは実行ユニット回路を含み得る一方、他の実施形態は、1つのみの実行ユニット回路、または全ての機能を全て実行する複数の実行ユニット/実行ユニット回路を含み得る。特定の実施形態は、特定のタイプのデータ/演算に対する別個のパイプラインを形成するので(例えば、それら自体のスケジューラ回路、物理レジスタファイルユニット回路、および/または実行クラスタをそれぞれ有するスカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインであり、別個のメモリアクセスパイプラインの場合、特定の実施形態は、このパイプラインの実行クラスタのみがメモリアクセスユニット回路1064を有するように実装される)、スケジューラ回路1056、物理レジスタファイルユニット回路1058、および実行クラスタ1060は、場合によっては複数あるように示される。別個のパイプラインが使用される場合、これらのパイプラインのうちの1つまたは複数はアウトオブオーダ発行/実行であってよく、残りはインオーダであってよいこともまた理解されたい。
いくつかの実施形態では、実行エンジンユニット回路1050は、アドバンスドマイクロコントローラバス(AHB)インタフェース(図示せず)、アドレスフェーズおよびライトバック、データフェーズロード、ストア、および分岐へのロードストアユニット(LSU)アドレス/データのパイプライン処理を実行し得る。
メモリアクセス回路1064のセットは、メモリユニット回路1070に結合され、メモリユニット回路1070は、レベル2(L2)キャッシュ回路1076に結合されたデータキャッシュ回路1074に結合されたデータTLBユニット回路1072を含む。1つの例示的な実施形態では、メモリアクセスユニット回路1064は、ロードユニット回路、ストアアドレスユニット回路、およびストアデータユニット回路を含み得、これらのそれぞれは、メモリユニット回路1070内のデータTLB回路1072に結合される。命令キャッシュ回路1034は、さらに、メモリユニット回路1070内のレベル2(L2)キャッシュユニット回路1076に結合される。1つまたは複数の例では、命令キャッシュ1034およびデータキャッシュ1074は、L2キャッシュユニット回路1076、レベル3(L3)キャッシュユニット回路(図示せず)、および/またはメインメモリ内の単一命令およびデータキャッシュ(図示せず)に組み合わされる。L2キャッシュユニット回路1076は、1つまたは複数の他のレベルのキャッシュ、および最終的にはメインメモリに結合される。
コア1090は、本明細書において説明される命令を含む、1つまたは複数の命令セット(例えば、x86命令セット(より新しいバージョンを追加された、いくつかの拡張を伴う)、MIPS命令セット、ARM命令セット(NEONなどの任意選択の追加拡張を伴う)をサポートし得る。1つまたは複数の例では、コア1090は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションにより使用される演算がパックドデータを使用して実行されることを可能にする。
[例示的な実行ユニット回路]
図11は、図10Bの実行ユニット回路1062などの、実行ユニット回路の実施形態を示す。示されるように、実行ユニット回路1062は、1つもしくは複数のALU回路1101、ベクトル/SIMDユニット回路1103、ロード/ストアユニット回路1105、および/または分岐/ジャンプユニット回路1107を含んでもよい。ALU回路1101は、算術演算および/またはブール演算を実行する。ベクトル/SIMDユニット回路1103は、(SIMD/ベクトルレジスタなどの)パックドデータに対してベクトル/SIMD演算を実行する。ロード/ストアユニット回路1105は、データをメモリからレジスタにロードする、またはレジスタからメモリに格納するためのロードおよびストア命令を実行する。ロード/ストアユニット回路1105はまた、アドレスを生成し得る。分岐/ジャンプユニット回路1107は、命令に依存して、メモリアドレスへの分岐またはジャンプを生じさせる。浮動小数点ユニット(FPU)回路1109は、浮動小数点演算を実行する。実行ユニット回路1062の幅は、実施形態に依存して変化し、16ビットから1,024ビットまでの範囲をとり得る。いくつかの実施形態では、2つ以上のより小さい実行ユニットが論理的に組み合わされて、より大きい実行ユニットを形成する(例えば、2つの128ビット実行ユニットが論理的に組み合わされて、256ビット実行ユニットを形成する)。
[例示的なレジスタアーキテクチャ]
図12は、いくつかの実施形態によるレジスタアーキテクチャ1200のブロック図である。示されるように、幅が128ビットから1,024ビットまで変化するベクトル/SIMDレジスタ1210がある。いくつかの実施形態では、ベクトル/SIMDレジスタ1210は物理的に512ビットであり、マッピングに依存して、より下位のビットのいくつかのみが使用される。例えば、いくつかの実施形態では、ベクトル/SIMDレジスタ1210は512ビットであるZMMレジスタであり、下位256ビットはYMMレジスタに使用され、下位128ビットはXMMレジスタに使用される。したがって、レジスタのオーバーレイがある。いくつかの実施形態では、ベクトル長フィールドは、最大長、および1つまたは複数の他のより短い長さのうちから選択され、そのような各々のより短い長さは、先述の長さの半分の長さである。スカラ演算は、ZMM/YMM/XMMレジスタ内の最下位のデータ要素位置で実行される演算であり、より上位のデータ要素位置は、実施形態に依存して、命令の前のそれらと同じ状態のままにされるか、またはゼロにされるかのいずれかである。
いくつかの実施形態では、レジスタアーキテクチャ1200はライトマスク/プレジケートレジスタ1215を含む。例えば、いくつかの実施形態では、それぞれ16ビット、32ビット、64ビット、または128ビットのサイズの、8つのライトマスク/プレジケートレジスタ(場合によって、k0からk7と呼ばれる)がある。ライトマスク/プレジケートレジスタ1215は、マージ(例えば、任意の演算の実行の間に、デスティネーションにおける要素の任意のセットが更新から保護されることを可能にする)、および/またはゼロ化(例えば、ゼロ化ベクトルマスクは、任意の演算の実行の間に、デスティネーションにおける要素の任意のセットがゼロにされることを可能にする)を可能にし得る。いくつかの実施形態では、所与のライトマスク/プレジケートレジスタ1215の各データ要素位置は、デスティネーションのデータ要素位置に対応する。他の実施形態では、ライトマスク/プレジケートレジスタ1215はスケーラブルであり、所与のベクトル要素に関する設定された数のイネーブルなビットからなる(例えば、64ビットのベクトル要素ごとに8のイネーブルなビット)。
レジスタアーキテクチャ1200は、複数の汎用レジスタ1225を含む。これらのレジスタは、16ビット、32ビット、64ビットなどであってよく、スカラ演算に使用されてよい。いくつかの実施形態では、これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8からR15の名称で参照される。
いくつかの実施形態では、レジスタアーキテクチャ1200は、64ビットパックド整数データに対して演算を実行するために、ならびに、MMXとXMMレジスタとの間で実行されるいくつかの演算のためのオペランドを保持するために、x87命令セット拡張またはMMXレジスタを使用して32/64/80ビット浮動小数点データ上でのスカラ浮動小数点演算に使用されるスカラ浮動小数点レジスタ1245を含む。
1つまたは複数のフラグレジスタ1240(例えば、EFLAGS、RFLAGSなど)が、算術演算、比較演算、およびシステム動作に関するステータスおよび制御情報を格納する。例えば、1つまたは複数のフラグレジスタ1240は、キャリー、パリティ、補助キャリー、ゼロ、符号、およびオーバーフローなどの、条件コード情報を格納してよい。いくつかの実施形態では、1つまたは複数のフラグレジスタ1240は、プログラムステータスおよび制御レジスタと呼ばれる。
セグメントレジスタ1220は、メモリへのアクセスに使用するためのセグメントポイントを含む。いくつかの実施形態では、これらのレジスタは、CS、DS、SS、ES、FS、およびGSの名称で参照される。
機械固有レジスタ(MSR)1235は、プロセッサ性能についての制御および報告を行う。大部分のMSR1235は、システムに関する機能を処理するが、アプリケーションプログラムにアクセスすることができない。機械チェックレジスタ1260は、ハードウェアエラーの際に検出および報告するために使用される制御、ステータス、およびエラー報告MSRからなる。
1つまたは複数の命令ポインタレジスタ1230は命令ポインタ値を格納する。制御レジスタ1255(例えば、CR0~CR4)は、プロセッサの動作モード(例えば、プロセッサ870、880、838、815、および/または900)および現在実行中のタスクの特性を決定する。デバッグレジスタ1250は、プロセッサまたはコアのデバッグ動作のモニタリングを制御し、可能とする。
メモリ管理レジスタ1265は、保護されたモードメモリ管理に使用されるデータ構造の位置を指定する。これらのレジスタは、GDTR、IDRT、タスクレジスタ、およびLDTRレジスタを含んでもよい。
本発明の代替の実施形態は、より広いまたはより狭いレジスタを使用することができる。さらに、本発明の代替的な実施形態は、より多い、より少ない、または異なるレジスタファイルおよびレジスタを使用してもよい。
[命令セット]
命令セットアーキテクチャ(ISA)は、1つまたは複数の命令フォーマットを含み得る。所与の命令フォーマットは、とりわけ、実行されるべき演算(例えば、オペコード)およびその演算が実行されるべきオペランドを指定する様々なフィールド(例えば、ビットの数、ビットの位置)、ならびに/または他のデータフィールド(例えば、マスク)を定義してよい。いくつかの命令フォーマットは、さらに、命令テンプレート(またはサブフォーマット)の定義を介して分解される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義され(含まれるフィールドは通常同じ順序であるが、含まれるフィールドがより少ないため少なくともいくつかは異なるビット位置を有する)、および/または所与のフィールドが異なって解釈されるように定義されてもよい。したがって、ISAの各命令は、所与の命令フォーマット(および定義されている場合、その命令フォーマットの命令テンプレートのうちの所与の1つ)を使用して表現され、演算およびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコード、ならびに当該オペコードを指定するオペコードフィールドおよびオペランド(ソース1/デスティネーション、およびソース2)を選択するオペランドフィールドを含む命令フォーマットを有し、命令ストリームにおけるこのADD命令が生じることにより、特定オペランドを選択するオペランドフィールドに具体的な内容を有する。
[例示的な命令フォーマット]
本明細書に説明される命令の実施形態は、異なるフォーマットで具現化され得る。さらに、例示的なシステム、アーキテクチャ、およびパイプラインが以下で詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されてもよいが、詳述されたものに限定されるものではない。
図13は、命令フォーマットの実施形態を示す。示されるように、命令は、1つまたは複数のプレフィクス1301、オペコード1303、アドレシング情報1305(例えば、レジスタ識別子、メモリアドレシング情報など)、変位値1307、および/または即値1309のための1つまたは複数のフィールドを含むが、それらに限定されるものではない、複数の構成要素を含んでよい。いくつかの命令は、フォーマットのフィールドのいくつかまたは全てを利用するが、他のものは、オペコード1303のフィールドを使用するのみであってよいことに留意されたい。いくつかの実施形態では、示される順序は、それらのフィールドがエンコードされるべき順序であるが、しかしながら、他の実施形態では、それらのフィールドは、異なる順序で、組み合わされて、などでエンコードされてもよいことが理解されるべきである。
プレフィクスフィールド1301は、使用される場合、命令を修正する。いくつかの例では、1つまたは複数のプレフィクスが、ストリング命令(例えば、0xF0、0xF2、0xF3など)を反復するために、セクションオーバーライド(例えば、0x2E、0x36、0x3E、0x26、0x64、0x65、0x2E、0x3Eなど)を提供するために、バスロック動作を実行するように、ならびに/または、オペランド(例えば、0x66)およびアドレスサイズ(例えば、0x67)を変更するために使用される。特定の命令は、必須のプレフィクス(例えば、0x66、0xF2、0xF3など)を必要とする。これらのプレフィクスの特定のものは、「レガシ(legacy)」プレフィクスと見なされてよい。他のプレフィクスは、その1つまたは複数の例が本明細書に詳述されており、特定のレジスタを指定することなどの、さらなる能力を示すか、および/またはそれを提供する。他のプレフィクスは通常、「レガシ」プレフィクスに続く。
オペコードフィールド1303は、命令のデコードの際に実行されるべき演算を、少なくとも部分的に定義するために使用される。いくつかの実施形態では、オペコードフィールド1303においてエンコードされるプライマリオペコードは、1、2、または3バイトの長さである。他の実施形態では、プライマリオペコードは異なる長さであってよい。追加の3ビットオペコードフィールドが、場合によって、別のフィールドにおいてエンコードされる。
アドレシングフィールド1305は、メモリまたは1つまたは複数のレジスタ内の位置などの、命令の1つまたは複数のオペランドをアドレシングするように使用される。図14は、アドレシングフィールド1305の実施形態を示す。この説明図において、任意選択のModR/Mバイト1402および任意選択のスケール、インデックス、ベース(SIB)バイト1404が示される。ModR/Mバイト1402およびSIBバイト1404は、最大2つのオペランドの命令をエンコードするために使用され、そのそれぞれは、直接レジスタまたは有効メモリアドレスである。それらのフィールドのそれぞれは任意選択的であり、全ての命令がそれらのフィールドのうちの1つまたは複数を含むとは限らないことに留意されたい。MOD R/Mバイト1402は、MODフィールド1442、レジスタフィールド1444、およびR/Mフィールド1446を含む。
MODフィールド1442の内容は、メモリアクセスモードおよび非メモリアクセスモードを区別する。いくつかの実施形態では、MODフィールド1442がb11の値を有する場合、レジスタ直接アドレシングモードが利用され、そうでなければ、レジスタ間接アドレシングが使用される。
レジスタフィールド1444は、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードし得、またはオペコード拡張をエンコードし得、任意の命令オペランドをエンコードするためには使用され得ない。レジスタインデックスフィールド1444の内容は、直接またはアドレス生成を介して、(レジスタ内またはメモリ内のいずれかにある)ソースまたはデスティネーションオペランドの位置を指定する。いくつかの実施形態では、レジスタフィールド1444は、より大きいアドレシングを可能にするために、プレフィクス(例えば、プレフィクス1301)からの追加ビットで補足される。
R/Mフィールド1446は、メモリアドレスを参照する命令オペランドをエンコードするために使用されてよく、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードするために使用されてよい。R/Mフィールド1446は、いくつかの実施形態ではアドレシングモードを規定するために、MODフィールド1442と組み合わされてよいことに留意されたい。
SIBバイト1404は、アドレスの生成に使用される、スケールフィールド1452、インデックスフィールド1454、およびベースフィールド1456を含む。スケールフィールド1452は、スケーリング係数を示す。インデックスフィールド1454は、使用するインデックスレジスタを指定する。いくつかの実施形態では、インデックスフィールド1454は、より大きいアドレシングを可能にするために、プレフィクス(例えば、プレフィクス1301)からの追加ビットで補足される。ベースフィールド1456は、使用するベースレジスタを指定する。いくつかの実施形態では、ベースフィールド1456は、より大きいアドレシングを可能にするために、プレフィクス(例えば、プレフィクス1301)からの追加ビットで補足される。実際には、スケールフィールド1452の内容は、メモリアドレス生成のためのインデックスフィールド1454の内容のスケーリングを可能とする(例えば、2スケール*インデックス+ベースを使用するアドレス生成)。
いくつかのアドレシング形式は、変位値を利用してメモリアドレスを生成する。例えば、メモリアドレスは、2スケール*インデックス+ベース+変位、インデックス*スケール+変位、r/m+変位、命令ポインタ(RIP/EIP)+変位、レジスタ+変位などに従って生成されてよい。変位は、1バイト、2バイト、4バイトなどの値であってよい。いくつかの実施形態では、変位フィールド1307はこの値を提供する。さらに、いくつかの実施形態では、変位係数の使用は、変位値が、ベクトル長、bビットの値、および命令の入力要素サイズに基づいて決定されるスケーリング係数Nと組み合わせてdisp8を乗算することによって計算される圧縮変位スキームを示すアドレシングフィールド1305のMODフィールドでエンコードされる。変位フィールド1307には、変位値が格納される。
いくつかの実施形態では、即値フィールド1309が命令の即値を指定する。即値は1バイト値、2バイト値、4バイト値などとしてエンコードされてよい。
図15は、第1のプレフィクス1301(A)の実施形態を示す。いくつかの実施形態では、第1のプレフィクス1301(A)はREXプレフィクスの一例である。このプレフィクスを使用する命令は、汎用レジスタ、64ビットパックドデータレジスタ(例えば、単一命令多重データ(SIMD)レジスタ、もしくはベクトルレジスタ)、ならびに/または、制御レジスタおよびデバッグレジスタ(例えば、CR8-CR15およびDR8-DR15)を指定し得る。
第1のプレフィクス1301(A)を使用する命令は、以下のフォーマットに依存して、3ビットフィールドを使用して最大3つのレジスタを指定し得る。1)Mod R/Mバイト1402のregフィールド1444およびR/Mフィールド1446を使用する。2)regフィールド1444およびベースフィールド1456およびインデックスフィールド1454を使用することを含む、SIBバイト1404と共にMod R/Mバイト1402を使用する。または、3)オペコードのレジスタフィールドを使用する。
第1のプレフィクス1301(A)において、ビット位置7:4は0100としてセットされる。ビット位置3(W)は、オペランドサイズを決定するために使用され得るが、オペランド幅を決定するのみでなくてもよい。したがって、W=0の場合、オペランドサイズはコードセグメント記述子(CS.D)によって決定され、W=1の場合、オペランドサイズは64ビットである。
MOD R/M regフィールド1444およびMOD R/M R/Mフィールド1446は、単独ではそれぞれ8のレジスタのみアドレシング可能であるが、別のビットの追加が、16(2)のレジスタがアドレシングされることを可能にすることに留意されたい。
第1のプレフィクス1301(A)において、ビット位置2(R)は、MOD R/M regフィールド1444の拡張であってよく、そのフィールドが汎用レジスタ、64ビットパックドデータレジスタ(例えば、SSEレジスタ)、または制御もしくはデバッグレジスタをエンコードする場合、ModR/M regフィールド1444を修正するために使用されてよい。Rは、Mod R/Mバイト1402が他のレジスタを指定するか、拡張オペコードを定義する場合には、無視される。
ビット位置1(X)Xビットは、SIBバイトインデックスフィールド1454を修正してよい。
ビット位置B(B)Bは、Mod R/M R/Mフィールド1446またはSIBバイトベースフィールド1456のベースを修正してよく、または、汎用レジスタ(例えば、汎用レジスタ1225)へのアクセスに使用されるオペコードレジスタフィールドを修正してよい。
図16A~図16Dは、第1のプレフィクス1301(A)のR、X、およびBフィールドがどのように使用されるかの実施形態を示す。図16Aは、SIBバイト14 04がメモリアドレシングに使用されない場合、MOD R/Mバイト1402のregフィールド1444およびR/Mフィールド1446を拡張するために使用される第1のプレフィクス1301(A)からのRおよびBを示す。図16Bは、SIBバイト14 04が使用されない場合(レジスタ-レジスタアドレシング)、MOD R/Mバイト1402のregフィールド1444およびR/Mフィールド1446を拡張するために使用される第1のプレフィクス1301(A)からのRおよびBを示す。図16Cは、SIBバイト14 04がメモリアドレシングに使用される場合、MOD R/Mバイト1402のregフィールド1444およびインデックスフィールド1454およびベースフィールド1456を拡張するために使用される第1のプレフィクス1301(A)からのR、X、およびBを示す。図16Dは、レジスタがオペコード1303においてエンコードされる場合、MOD R/Mバイト1402のregフィールド1444を拡張するために使用される第1のプレフィクス1301(A)からのBを示す。
図17A~図17Bは、第2のプレフィクス1301(B)の実施形態を示す。いくつかの実施形態では、第2のプレフィクス1301(B)はVEXプレフィクスの一例である。第2のプレフィクス1301(B)のエンコードは、命令が2より多いオペランドを有することを可能にし、SIMDベクトルレジスタ(例えば、ベクトル/SIMDレジスタ1210)が、64ビットよりも長くなる(例えば、128ビットおよび256ビット)ことを可能にする。第2のプレフィクス1301(B)の使用は、3オペランド(またはより多い)構文を提供する。例えば、以前の2オペランド命令は、ソースオペランドを上書きするA=A+Bなどの演算を実行した。第2のプレフィクス1301(B)の使用は、オペランドが、A=B+Cなどの非破壊演算を実行することを可能にする。
いくつかの実施形態では、第2のプレフィクス1301(B)には、2バイト形式と3バイト形式の2つの形式がある。2バイトの第2のプレフィクス1301(B)は、主に128ビット、スカラ、およびいくつかの256ビット命令に使用され、3バイトの第2のプレフィクス1301(B)は、第1のプレフィクス1301(A)のコンパクトな代替および3バイトオペコード命令を提供する。
図17Aは、2バイト形式の第2のプレフィクス1301(B)の実施形態を示す。一例では、フォーマットフィールド1701(バイト0 1703)は値C5Hを含む。一例では、バイト1 1705はビット[7]において「R」値を含む。この値は、第1のプレフィクス1301(A)の同じ値の補数である。ビット[2]はベクトルの長さ(L)を規定するために使用される(0の値はスカラまたは128ビットベクトルであり、1の値は256ビットベクトルである)。ビット[1:0]は、いくつかのレガシプレフィクスと外延性同等のオペコードを提供する(例えば、00=プレフィクスなし、01=66H、10=F3H、および11=F2H)。vvvvとして示されるビット[6:3]は、以下のように使用され得る。1)反転(1の補数)形式で指定され、2以上のソースオペランドを有する命令に有効である、第1のソースレジスタオペランドをエンコードする。2)特定のベクトルシフトのために1の補数形式で指定される、デスティネーションレジスタオペランドをエンコードする。または、3)いかなるオペランドもエンコードせず、フィールドはリザーブされ、1111bなどの特定の値を含むべきである。
このプレフィクスを使用する命令は、Mod R/M R/Mフィールド1446を使用して、メモリアドレスを参照する命令オペランドをエンコードしてよく、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードしてよい。
このプレフィクスを使用する命令は、Mod R/M regフィールド1444を使用して、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードしてよく、オペコード拡張として扱われてよく、いずれの命令オペランドをエンコードするために使用されなくてよい。
4つのオペランドをサポートする命令構文、vvvvに関して、Mod R/M R/Mフィールド1446およびMod R/M regフィールド1444は、4つのオペランドのうちの3つをエンコードする。即値1309のビット[7:4]は、次に、第3のソースレジスタオペランドをエンコードするために使用される。
図17Bは、3バイト形式の第2のプレフィクス1301(B)の実施形態を示す。一例では、フォーマットフィールド1711(バイト0 1713)は値C4Hを含む。バイト1 1715は、ビット[7:5]において、第1のプレフィクス1301(A)の同じ値の補数である、「R」、「X」、および「B」を含む。バイト1 1715のビット[4:0](mmmmmとして示される)は、必要に応じて、1つまたは複数の示唆されるリーディング(leading)オペコードバイトをエンコードする内容を含む。例えば、00001は0FHリーディングオペコードを示唆し、00010は0F38Hリーディングオペコードを示唆し、00011はリーディング0F3AHオペコードを示唆する、などである。
バイト2 1717のビット[7]は、プロモート可能なオペランドサイズを決定することを補助することを含め、第1のプレフィクス1301(A)のWと同様に使用される。ビット[2]はベクトルの長さ(L)を規定するために使用される(0の値はスカラまたは128ビットベクトルであり、1の値は256ビットベクトルである)。ビット[1:0]は、いくつかのレガシプレフィクスと外延性同等のオペコードを提供する(例えば、00=プレフィクスなし、01=66H、10=F3H、および11=F2H)。vvvvとして示されるビット[6:3]は、以下のように使用され得る。1)反転(1の補数)形式で指定され、2以上のソースオペランドを有する命令に有効である、第1のソースレジスタオペランドをエンコードする。2)特定のベクトルシフトのために1の補数形式で指定される、デスティネーションレジスタオペランドをエンコードする。または、3)いかなるオペランドもエンコードせず、フィールドはリザーブされ、1111bなどの特定の値を含むべきである。
このプレフィクスを使用する命令は、Mod R/M R/Mフィールド1446を使用して、メモリアドレスを参照する命令オペランドをエンコードしてよく、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードしてよい。
このプレフィクスを使用する命令は、Mod R/M regフィールド1444を使用して、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードしてよく、オペコード拡張として扱われてよく、いずれの命令オペランドをエンコードするために使用されなくてよい。
4つのオペランドをサポートする命令構文、vvvvに関して、Mod R/M R/Mフィールド1446およびMod R/M regフィールド1444は、4つのオペランドのうちの3つをエンコードする。即値1309のビット[7:4]は、次に、第3のソースレジスタオペランドをエンコードするために使用される。
図18は、第3のプレフィクス1301(C)の実施形態を示す。いくつかの実施形態では、第1のプレフィクス1301(A)はEVEXプレフィクスの一例である。第3のプレフィクス1301(C)は4バイトプレフィクスである。
第3のプレフィクス1301(C)は、64ビットモードにおいて32のベクトルレジスタ(例えば、128ビット、256ビット、および512ビットレジスタ)をエンコードし得る。いくつかの実施形態では、ライトマスク/オペマスク(図12などの前の図におけるレジスタの説明を参照)またはプレディケーションを利用する命令が、このプレフィクスを利用する。オペマスクレジスタは、条件処理または選択制御を可能にする。そのソース/デスティネーションオペランドがオペマスクレジスタであり、オペマスクレジスタの内容を単一の値として扱うオペマスク命令は第2のプレフィクス1301(B)を使用してエンコードされる。
第3のプレフィクス1301(C)は、命令クラスに特有の機能をエンコードし得る(例えば、「ロード+op」セマンティクスを有するパックド命令が、埋め込み型ブロードキャスト機能をサポート可能であり、丸めセマンティクスを有する浮動小数点命令が、静的丸め機能をサポート可能であり、非丸め演算セマンティクスを有する浮動小数点命令が、「全例外抑制」機能をサポート可能である、などである)。
第3のプレフィクス1301(C)の第1のバイトは、一例では62Hの値を有する、フォーマットフィールド1811である。後続のバイトはペイロードバイト1815~1819と称され、1つまたは複数のフィールド(本明細書に詳述される)の形式において特定の機能を提供するP[23:0]の24ビット値を集合的に形成する。
いくつかの実施形態では、ペイロードバイト1819のP[1:0]は、下位の2つのmmmmmビットと同一である。P[3:2]は、いくつかの実施形態ではリザーブされている。ビットP[4](R')は、P[7]およびModR/M regフィールド1444と組み合わされた場合、上位の16のベクトルレジスタセットへのアクセスを可能にする。P[6]はまた、SIBタイプアドレシングが必要とされない場合、上位の16のベクトルレジスタへのアクセスを提供し得る。P[7:5]は、ベクトルレジスタ、汎用レジスタ、メモリアドレシングのためのオペランド指定修正ビットであるR、XおよびBからなり、ModR/Mレジスタフィールド1444およびModR/M R/Mフィールド1446と組み合わされた場合、下位の8つのレジスタを超えて次のセットの8つのレジスタへのアクセスを可能にする。P[9:8]は、いくつかのレガシプレフィクスと外延性同等のオペコードを提供する(例えば、00=プレフィクスなし、01=66H、10=F3H、および11=F2H)。P[10]は、いくつかの実施形態では、固定値1である。vvvvとして示されるP[14:11]は、以下のために使用され得る。1)反転(1の補数)形式で指定され、2以上のソースオペランドを有する命令に有効である、第1のソースレジスタオペランドをエンコードする。2)特定のベクトルシフトのために1の補数形式で指定される、デスティネーションレジスタオペランドをエンコードする。または、3)いかなるオペランドもエンコードせず、フィールドはリザーブされ、1111bなどの特定の値を含むべきである。
P[15]は、第1のプレフィクス1301(A)および第2のプレフィクス1311(B)のWと同様であり、オペコード拡張ビットまたはオペランドサイズプロモーションとして機能し得る。
P[18:16]は、オペマスク(ライトマスク)レジスタ(例えば、ライトマスク/プレジケートレジスタ1215)におけるレジスタのインデックスを指定する。本発明の1つまたは複数の例では、特定の値aaa=000は、特定の命令のために非オペマスクが使用されることを示唆する、特別な挙動を有する(これは、全ての1に対するハードワイヤされたオペマスクの使用、またはマスキングハードウェアをバイパスするハードウェアの使用を含む、様々な態様で実装され得る)。マージする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(基本演算および拡張演算により指定された)任意の演算の実行の間に更新から保護されることを可能にし、他の1つまたは複数の例では、対応するマスクビットが0を有するデスティネーションの各要素の古い値を維持する。対照的に、ゼロ化する場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが、(基本演算および拡張演算において指定された)任意の演算の実行の間にゼロにされることを可能にし、1つまたは複数の例では、対応するマスクビットが0値を有する場合、デスティネーションの要素は0に設定される。この機能のサブセットは、実行されている演算のベクトル長(すなわち、修正される要素の、最初の要素から最後の要素までの範囲)を制御する能力であるが、しかしながら、修正される要素が連続している必要はない。したがって、オペマスクフィールドは、ロード、ストア、演算、論理などを含む部分ベクトル演算を可能とする。オペマスクフィールドの内容が、使用されるオペマスクを含む多くのオペマスクレジスタのうちの1つを選択する(およびしたがって、オペマスクフィールドの内容が、実行される当該マスキングを間接的に識別する)本発明の実施形態が説明されているが、代替的な実施形態は、これに代えて、または追加して、マスク書き込みフィールドの内容が、実行されるマスキングを直接に指定することを可能にする。
P[19]は、P[19]を使用して上位の16のベクトルレジスタにアクセス可能な非破壊ソース構文内の第2のソースベクトルレジスタをエンコードするために、P[14:11]と組み合わされ得る。P[20]は、異なるクラスの命令にわたって異なり、ベクトル長さ/丸め制御指定フィールド(P[22:21])の意味に影響を与え得る、複数の機能をエンコードする。P[23]は、マージ処理・ライトマスク処理のためのサポート(例えば、0にセットされた場合)、または、ゼロ化およびマージ処理・ライトマスク処理のためのサポート(例えば、1にセットされた場合)を示す。
第3のプレフィクス1301(C)を使用した命令におけるレジスタのエンコードの例示的な実施形態が以下の表に詳述される。
Figure 2023048101000002
Figure 2023048101000003
Figure 2023048101000004
プログラムコードは、本明細書で説明される機能を実行し、出力情報を生成するために、入力命令に適用されてよい。出力情報は、1つまたは複数の出力デバイスに既知の様式で適用されてよい。この適用の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するために、高級手続き型またはオブジェクト指向型プログラミング言語において実装されてよい。プログラムコードはまた、所望の場合、アセンブリ言語または機械言語で実装されてもよい。実際には、本明細書で説明されたメカニズムは、いかなる特定のプログラミング言語にも範囲が限定されるものではない。いずれの場合でも、言語は、コンパイル型言語またはインタープリタ型言語であってよい。
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装手法の組み合わせで実装されてもよい。本発明の実施形態は、少なくとも1つのプロセッサと、(揮発性および不揮発性メモリおよび/または格納要素を含む)ストレージシステムと、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを備えるプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
少なくとも1つまたは複数の例の1つまたは複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された代表的な命令により実装され得、命令は、機械により読み出されると、当該機械に本明細書で説明される技術を実行させるためのロジックを生成させる。「IPコア」として知られるそのような表現は、有形の機械可読媒体に格納され、ロジックまたはプロセッサを実際に作成する製造機械にロードするために、様々な顧客または製造設備に供給されてもよい。
そのような機械可読記憶媒体は、限定するものではないが、機械またはデバイスにより製造または形成される、非一時的で有形な構造の物品を含み得、これには、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD-ROM)、書き換え可能コンパクトディスク(CD-RW)、および光磁気ディスクなどの他のタイプのディスクを含む記憶媒体、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)などの半導体デバイス、磁気もしくは光カード、または電子命令を格納するのに好適な他のタイプの媒体が含まれる。
したがって、本発明の実施形態はまた、本明細書に説明される構造体、回路、装置、プロセッサ、および/またはシステム機能を定義するハードウェア記述言語(HDL)などの命令を含むか、または設計データを含む非一時的有形機械可読媒体も含む。そのような実施形態も、プログラム製品と称され得る。
[エミュレーション(バイナリ変換、コードモーフィングなどを含む)]
いくつかの場合では、ソース命令セットからターゲット命令セットへと命令を変換するために、命令コンバータ使用され得る。例えば、命令コンバータは、命令を、コアによって処理されるべき1つまたは複数の他の命令へと変換し(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)、モーフィングし、エミュレートし、または別様に変換することができる。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装されてもよい。命令コンバータは、オンプロセッサ、オフプロセッサ、または一部がオンプロセッサで一部がオフプロセッサであってよい。
図19は、本発明の実施形態による、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図を示す。示された実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替的には、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてもよい。図19は、高級言語1902におけるプログラムが、第1のISAコンパイラ1904を使用してコンパイルされて、少なくとも1つの第1の命令セットコアを有するプロセッサ1916によりネイティブに実行され得る第1のISAバイナリコード1906を生成し得ることを示す。少なくとも1つの第1のISA命令セットコアを有するプロセッサ1916は、少なくとも1つの第1のISA命令セットコアを有するプロセッサと実質的に同じ結果を実現するために、(1)第1のISA命令セットコアの命令セットの実質的部分、または(2)少なくとも1つの第1のISA命令セットコアを有するIntel(登録商標)プロセッサ上で実行することを目標とされたアプリケーションもしくは他のソフトウェアのオブジェクトコードのバージョンを互換的に実行する、または別様に処理することにより、少なくとも1つの第1のISA命令セットコアを有するIntelプロセッサと実質的に同じ機能を実行できる任意のプロセッサを表す。第1のISAコンパイラ1904は、追加のリンケージ処理を用いてまたは用いないで、少なくとも1つの第1のISA命令セットコアを有するプロセッサ1916上で実行され得る第1のISAバイナリコード1906(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図19は、高級言語1902におけるプログラムが、第1のISA命令セットコアなしのプロセッサ1914によってネイティブに実行され得る代替的な命令セットバイナリコード1910を生成するために、代替的な命令セットコンパイラ1908を使用してコンパイルされ得ることを示す。命令コンバータ1912は、第1のISAバイナリコード1906を、第1のISA命令セットコアなしのプロセッサ1914によってネイティブに実行され得るコードに変換するために使用される。この変換済みコードは、これを可能にする命令コンバータを作成することは困難であるため、代替の命令セットバイナリコード1910と同じである可能性は低いが、しかしながら、変換済みコードは一般的な演算を実現し、代替的な命令セットからの命令で構成される。したがって、命令コンバータ1912は、エミュレーション、シミュレーション、または任意の他のプロセスを通じて、第1のISA命令セットプロセッサもしくはコアを有さない、プロセッサまたは他の電子デバイスが第1のISAバイナリコード1906を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
「1つまたは複数の例」、「一例」、「例示的な実施形態」などへの言及は、説明された当該実施形態が、特定の特徴、構造、または特性を含み得ることを示すが、全ての実施形態が、必ずしも当該特定の特徴、構造、または特性を含まなくてもよい。さらに、そのような語句は、必ずしも同じ実施形態に言及するわけではない。さらに、ある一例に関連して特定の特徴、構造または特性が説明されている場合、明示の説明の有無に関わらず、他の実施形態に関連して、そのような特徴、構造または特性に影響が及ぶことは、当業者の知識の範囲内であると考えられる。
例としては、以下が挙げられるが、これらに限定されない。
1.データを暗号化または復号するための暗号化/復号エンジンと、
暗号化/復号エンジンにキー、データ、および微調整を提供するための暗号化データ構造エンジンと、を備え、暗号化データ構造エンジンは、
アドレスを使用して暗号化データ構造ルックアップデータ構造エントリからインデックス値を読み出し、エントリはインデックス値およびゲストページ物理アドレス(GPPA)を含み、
インデックス値に基づいて、暗号化データ構造からエントリを取得し、エントリは、論理ブロックアドレス(LBA)ベース、キー識別子、および一連のGPPAのうちの少なくとも1つのGPPAを含み、
一連のGPPAにおける暗号化データ構造ルックアップデータ構造エントリからGPPAの位置を使用してLBAを生成し、
キー識別子に基づいてキーを取得し、暗号化/復号エンジンは、取得されたキー、および生成されたLBAを使用してデータを暗号化または復号するためのものである、
装置。
2.アドレスはゲスト物理アドレスである、例1に記載の装置。
3.ゲスト物理アドレスはトランスポート層パケットの一部である、例2に記載の装置。
4.GPPA位置にブロックサイズを乗算して中間結果を生成し、LBA値は、LBAベースに追加されたその中間結果である、例1~3のいずれかに記載の装置。
5.ブロックサイズが512bである場合、GPPA位置にブロックサイズ*8を乗算して中間結果を生成し、アドレスを取り、0XFFFFとAND処理し、次いで7だけシフトすることによってオフセットを計算し、LBAは、オフセットに512を乗算して、中間結果を追加したものである、例1~3のいずれかに記載の装置。
6.暗号化はAES_XTSである、例1~5のいずれかに記載の装置。
7.復号はAES_XTSである、例1~5のいずれかに記載の装置。
8.暗号化データ構造を格納するためのダイナミックランダムアクセスメモリと、
データを暗号化するための暗号化エンジンと、
暗号化/復号エンジンにキー、データ、および微調整を提供するための暗号化データ構造エンジンと、を備え、暗号化データ構造エンジンは、
アドレスを使用して暗号化データ構造ルックアップデータ構造エントリからインデックス値を読み出し、エントリはインデックス値およびゲストページ物理アドレス(GPPA)を含み、
インデックス値に基づいて、暗号化データ構造からエントリを取得し、エントリは、論理ブロックアドレス(LBA)ベース、キー識別子、および一連のGPPAのうちの少なくとも1つのGPPAを含み、
一連のGPPAにおける暗号化データ構造ルックアップデータ構造エントリからGPPAの位置を使用してLBAを生成し、
キー識別子に基づいてキーを取得し、暗号化エンジンは、取得されたキー、および生成されたLBAを使用してデータを暗号化するためのものである、
システム。
9.アドレスはゲスト物理アドレスである、例8に記載のシステム。
10.ゲスト物理アドレスはトランスポート層パケットの一部である、例9に記載の装置。
11.ブロックサイズが4KBである場合、GPPA位置にブロックサイズを乗算して中間結果を生成し、LBA値は、LBAベースに追加されたその中間結果である、例8~10のいずれかに記載のシステム。
12.ブロックサイズが512bである場合、GPPA位置にブロックサイズ*8を乗算して中間結果を生成し、アドレスを取り、0XFFFFとAND処理し、次いで7だけシフトすることによってオフセットを計算し、LBAは、オフセットに512を乗算して、中間結果を追加したものである、例8~10のいずれかに記載のシステム。
13.暗号化はAES_XTSである、例8~12のいずれかに記載のシステム。
14.アドレスを使用して暗号化データ構造ルックアップデータ構造エントリからインデックス値を読み出し、エントリはインデックス値およびゲストページ物理アドレス(GPPA)を含み、
インデックス値に基づいて、暗号化データ構造からエントリを取得し、エントリは、論理ブロックアドレス(LBA)ベース、キー識別子、および一連のGPPAのうちの少なくとも1つのGPPAを含み、
一連のGPPAにおける暗号化データ構造ルックアップデータ構造エントリからGPPAの位置を使用してLBAを生成し、
キー識別子に基づいてキーを取得し、暗号化/復号エンジンは、取得されたキー、および生成されたLBAを使用してデータを暗号化または復号し、
データを暗号化または復号することと、
を含む、方法。
15.アドレスはゲスト物理アドレスである、例14に記載の方法。
16.ゲスト物理アドレスはトランスポート層パケットの一部である、例15に記載の方法。
17.GPPA位置にブロックサイズを乗算して中間結果を生成し、LBA値は、LBAベースに追加されたその中間結果である、例14~16のいずれかに記載の方法。
18.ブロックサイズが512bである場合、GPPA位置にブロックサイズ*8を乗算して中間結果を生成し、アドレスを取り、0XFFFFとAND処理し、次いで7だけシフトすることによってオフセットを計算し、LBAは、オフセットに512を乗算して、中間結果を追加したものである、例14~16のいずれかに記載の方法。
19.暗号化はAES_XTSである、例14~18のいずれかに記載の方法。
20.復号はAES_XTSである、例14~18のいずれかに記載の方法。
さらに、上で説明された様々な実施形態において、別途具体的に記載されなければ、語句「A、B、またはCのうちの少なくとも1つ」などの選言的文言は、A、BまたはCのいずれか、またはそれらの任意の組み合わせ(例えば、A、B、および/またはC)を意味すると理解されるよう意図される。したがって、選言的文言は、所与の実施形態がそれぞれ存在するためにAのうちの少なくとも1つ、Bのうちの少なくとも1つ、またはCのうちの少なくとも1つを必要とすることを意味するようには意図されておらず、また意味するように理解されるべきでもない。
したがって、明細書および図面は、限定的意味ではなく、むしろ例示的意味に関するとされるべきである。しかしながら、様々な修正および変更が、請求項に記載されたように開示のより広い趣旨および範囲から逸脱することなくこれらになされてよいことは明らかであろう。
[他の考えられる項目]
(項目1)
データを暗号化または復号するための暗号化/復号エンジンと、
前記暗号化/復号エンジンにキー、データ、および微調整を提供するための暗号化データ構造エンジンと、を備え、前記暗号化データ構造エンジンは、
アドレスを使用して暗号化データ構造ルックアップデータ構造エントリからインデックス値を読み出し、前記エントリはインデックス値およびゲストページ物理アドレス(GPPA)を含み、
前記インデックス値に基づいて、暗号化データ構造からエントリを取得し、前記エントリは、論理ブロックアドレス(LBA)ベース、キー識別子、および一連のGPPAのうちの少なくとも1つのGPPAを含み、
前記一連のGPPAにおける前記暗号化データ構造ルックアップデータ構造エントリから前記GPPAの位置を使用してLBAを生成し、
前記キー識別子に基づいてキーを取得し、前記暗号化/復号エンジンは、前記取得されたキー、および前記生成されたLBAを使用してデータを暗号化または復号するためのものである、
装置。
(項目2)
前記アドレスはゲスト物理アドレスである、項目1に記載の装置。
(項目3)
前記ゲスト物理アドレスはトランスポート層パケットの一部である、項目2に記載の装置。
(項目4)
前記GPPA位置にブロックサイズを乗算して中間結果を生成し、前記LBA値は、前記LBAベースに追加されたその中間結果である、項目1に記載の装置。
(項目5)
前記ブロックサイズが512bである場合、前記GPPA位置に前記ブロックサイズ*8を乗算して中間結果を生成し、前記アドレスを取り、0XFFFFとAND処理し、次いで7だけシフトすることによってオフセットを計算し、前記LBAは、前記オフセットに512を乗算して、前記中間結果を追加したものである、項目1に記載の装置。
(項目6)
前記暗号化はAES_XTSである、項目1に記載の装置。
(項目7)
前記復号はAES_XTSである、項目1に記載の装置。
(項目8)
暗号化データ構造を格納するためのダイナミックランダムアクセスメモリと、
データを暗号化するための暗号化エンジンと、
前記暗号化/復号エンジンにキー、データ、および微調整を提供するための暗号化データ構造エンジンと、を備え、前記暗号化データ構造エンジンは、
アドレスを使用して暗号化データ構造ルックアップデータ構造エントリからインデックス値を読み出し、前記エントリはインデックス値およびゲストページ物理アドレス(GPPA)を含み、
前記インデックス値に基づいて、前記暗号化データ構造からエントリを取得し、前記エントリは、論理ブロックアドレス(LBA)ベース、キー識別子、および一連のGPPAのうちの少なくとも1つのGPPAを含み、
前記一連のGPPAにおける前記暗号化データ構造ルックアップデータ構造エントリから前記GPPAの位置を使用してLBAを生成し、
前記キー識別子に基づいてキーを取得し、前記暗号化エンジンは、前記取得されたキー、および前記生成されたLBAを使用してデータを暗号化するためのものである、
システム。
(項目9)
前記アドレスはゲスト物理アドレスである、項目8に記載のシステム。
(項目10)
前記ゲスト物理アドレスはトランスポート層パケットの一部である、項目9に記載の装置。
(項目11)
前記ブロックサイズが4KBである場合、前記GPPA位置に前記ブロックサイズを乗算して中間結果を生成し、前記LBA値は、前記LBAベースに追加されたその中間結果である、項目8に記載のシステム。
(項目12)
前記ブロックサイズが512bである場合、前記GPPA位置に前記ブロックサイズ*8を乗算して中間結果を生成し、前記アドレスを取り、0XFFFFとAND処理し、次いで7だけシフトすることによってオフセットを計算し、前記LBAは、前記オフセットに512を乗算して、前記中間結果を追加したものである、項目8に記載のシステム。
(項目13)
前記暗号化はAES_XTSである、項目8に記載のシステム。
(項目14)
アドレスを使用して暗号化データ構造ルックアップデータ構造エントリからインデックス値を読み出し、前記エントリはインデックス値およびゲストページ物理アドレス(GPPA)を含み、
前記インデックス値に基づいて、暗号化データ構造からエントリを取得し、前記エントリは、論理ブロックアドレス(LBA)ベース、キー識別子、および一連のGPPAのうちの少なくとも1つのGPPAを含み、
前記一連のGPPAにおける前記暗号化データ構造ルックアップデータ構造エントリから前記GPPAの位置を使用してLBAを生成し、
前記キー識別子に基づいてキーを取得し、前記暗号化/復号エンジンは、前記取得されたキー、および前記生成されたLBAを使用してデータを暗号化または復号し、
前記データを暗号化または復号することと、
を含む、方法。
(項目15)
前記アドレスはゲスト物理アドレスである、項目14に記載の方法。
(項目16)
前記ゲスト物理アドレスはトランスポート層パケットの一部である、項目15に記載の方法。
(項目17)
前記GPPA位置にブロックサイズを乗算して中間結果を生成し、前記LBA値は、前記LBAベースに追加されたその中間結果である、項目14に記載の方法。
(項目18)
前記ブロックサイズが512bである場合、前記GPPA位置に前記ブロックサイズ*8を乗算して中間結果を生成し、前記アドレスを取り、0XFFFFとAND処理し、次いで7だけシフトすることによってオフセットを計算し、前記LBAは、前記オフセットに512を乗算して、前記中間結果を追加したものである、項目14に記載の方法。
(項目19)
前記暗号化はAES_XTSである、項目14に記載の方法。
(項目20)
前記復号はAES_XTSである、項目14に記載の方法。

Claims (20)

  1. データを暗号化または復号するための暗号化/復号エンジン手段と、
    前記暗号化/復号エンジンにキー、データ、および微調整を提供するための暗号化データ構造エンジン手段であって、前記暗号化データ構造エンジン手段は、
    アドレスを使用して暗号化データ構造ルックアップデータ構造エントリからインデックス値を読み出すことであって、前記暗号化データ構造ルックアップデータ構造エントリはインデックス値およびゲストページ物理アドレス(GPPA)を含む、読み出すことと、
    前記インデックス値に基づいて、暗号化データ構造からエントリを取得することであって、前記エントリは、論理ブロックアドレス(LBA)ベース、キー識別子、および一連のGPPAのうちの少なくとも1つのGPPAを含む、取得することと、
    前記一連のGPPAにおける前記暗号化データ構造ルックアップデータ構造エントリから前記GPPAの位置を使用してLBAを生成することと、
    前記キー識別子に基づいてキーを取得することであって、前記暗号化/復号エンジンは、取得された前記キー、および生成された前記LBAを使用してデータを暗号化または復号するためのものである、取得することと
    を実行するためのものである、暗号化データ構造エンジン手段と
    を備える装置。
  2. 前記アドレスはゲスト物理アドレスである、請求項1に記載の装置。
  3. 前記ゲスト物理アドレスはトランスポート層パケットの一部である、請求項2に記載の装置。
  4. 前記GPPAの位置にブロックサイズを乗算して中間結果を生成し、前記LBAの値は、前記LBAのベースに追加されたその中間結果である、請求項1または2に記載の装置。
  5. ブロックサイズが512bである場合、前記GPPAの位置に前記ブロックサイズに8を乗算したものを乗算して中間結果を生成し、前記アドレスを取り、0XFFFFとAND処理し、次いで7だけシフトすることによってオフセットを計算し、前記LBAは、前記オフセットに512を乗算して、前記中間結果を追加したものである、請求項1~3のいずれか一項に記載の装置。
  6. 前記暗号化はAES_XTSである、請求項1~3のいずれか一項に記載の装置。
  7. 前記復号はAES_XTSである、請求項1~3のいずれか一項に記載の装置。
  8. 暗号化データ構造を格納するためのダイナミックランダムアクセスメモリと、
    データを暗号化するための暗号化エンジン手段と、
    前記暗号化/復号エンジンにキー、データ、および微調整を提供するための暗号化データ構造エンジン手段であって、前記暗号化データ構造エンジン手段は、
    アドレスを使用して暗号化データ構造ルックアップデータ構造エントリからインデックス値を読み出すことであって、前記暗号化データ構造ルックアップデータ構造エントリはインデックス値およびゲストページ物理アドレス(GPPA)を含む、読み出すことと、
    前記インデックス値に基づいて、前記暗号化データ構造からエントリを取得することであって、前記エントリは、論理ブロックアドレス(LBA)ベース、キー識別子、および一連のGPPAのうちの少なくとも1つのGPPAを含む、取得することと、
    前記一連のGPPAにおける前記暗号化データ構造ルックアップデータ構造エントリから前記GPPAの位置を使用してLBAを生成することと、
    前記キー識別子に基づいてキーを取得することであって、前記暗号化エンジン手段は、取得された前記キー、および生成された前記LBAを使用してデータを暗号化するためのものである、取得することと
    を実行するためのものである、暗号化データ構造エンジン手段と
    を備えるシステム。
  9. 前記アドレスはゲスト物理アドレスである、請求項8に記載のシステム。
  10. 前記ゲスト物理アドレスはトランスポート層パケットの一部である、請求項9に記載のシステム。
  11. ブロックサイズが4KBである場合、前記GPPAの位置に前記ブロックサイズを乗算して中間結果を生成し、前記LBAの値は、前記LBAのベースに追加されたその中間結果である、請求項8~10のいずれか一項に記載のシステム。
  12. ブロックサイズが512bである場合、前記GPPAの位置に前記ブロックサイズに8を乗算したものを乗算して中間結果を生成し、前記アドレスを取り、0XFFFFとAND処理し、次いで7だけシフトすることによってオフセットを計算し、前記LBAは、前記オフセットに512を乗算して、前記中間結果を追加したものである、請求項8~10のいずれか一項に記載のシステム。
  13. 前記暗号化はAES_XTSである、請求項8~10のいずれか一項に記載のシステム。
  14. アドレスを使用して暗号化データ構造ルックアップデータ構造エントリからインデックス値を読み出す段階であって、前記暗号化データ構造ルックアップデータ構造エントリはインデックス値およびゲストページ物理アドレス(GPPA)を含む、読み出す段階と、
    前記インデックス値に基づいて、暗号化データ構造からエントリを取得する段階であって、前記エントリは、論理ブロックアドレス(LBA)ベース、キー識別子、および一連のGPPAのうちの少なくとも1つのGPPAを含む、取得する段階と、
    前記一連のGPPAにおける前記暗号化データ構造ルックアップデータ構造エントリから前記GPPAの位置を使用してLBAを生成する段階と、
    前記キー識別子に基づいてキーを取得する段階であって、前記暗号化/復号エンジンは、取得された前記キー、および生成された前記LBAを使用してデータを暗号化または復号する、取得する段階と、
    前記データを暗号化または復号する段階と、
    を備える方法。
  15. 前記アドレスはゲスト物理アドレスである、請求項14に記載の方法。
  16. 前記ゲスト物理アドレスはトランスポート層パケットの一部である、請求項15に記載の方法。
  17. 前記GPPAの位置にブロックサイズを乗算して中間結果を生成し、前記LBAの値は、前記LBAのベースに追加されたその中間結果である、請求項14~16のいずれか一項に記載の方法。
  18. ブロックサイズが512bである場合、前記GPPAの位置に前記ブロックサイズに8を乗算したものを乗算して中間結果を生成し、前記アドレスを取り、0XFFFFとAND処理し、次いで7だけシフトすることによってオフセットを計算し、前記LBAは、前記オフセットに512を乗算して、前記中間結果を追加したものである、請求項14~16のいずれか一項に記載の方法。
  19. 前記暗号化はAES_XTSである、請求項14~16のいずれか一項に記載の方法。
  20. 前記復号はAES_XTSである、請求項14~16のいずれか一項に記載の方法。
JP2022108033A 2021-09-25 2022-07-04 メモリ支援インライン暗号化/復号 Pending JP2023048101A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/485,370 2021-09-25
US17/485,370 US20230094171A1 (en) 2021-09-25 2021-09-25 Memory assisted incline encryption/decryption

Publications (1)

Publication Number Publication Date
JP2023048101A true JP2023048101A (ja) 2023-04-06

Family

ID=82608676

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022108033A Pending JP2023048101A (ja) 2021-09-25 2022-07-04 メモリ支援インライン暗号化/復号

Country Status (4)

Country Link
US (1) US20230094171A1 (ja)
EP (1) EP4156594A1 (ja)
JP (1) JP2023048101A (ja)
CN (1) CN115879176A (ja)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9405919B2 (en) * 2014-03-11 2016-08-02 Qualcomm Incorporated Dynamic encryption keys for use with XTS encryption systems employing reduced-round ciphers
US10657071B2 (en) * 2017-09-25 2020-05-19 Intel Corporation System, apparatus and method for page granular, software controlled multiple key memory encryption
US10684945B2 (en) * 2018-03-29 2020-06-16 Intel Corporation System, apparatus and method for providing key identifier information in a non-canonical address space

Also Published As

Publication number Publication date
EP4156594A1 (en) 2023-03-29
US20230094171A1 (en) 2023-03-30
CN115879176A (zh) 2023-03-31

Similar Documents

Publication Publication Date Title
JP6344614B2 (ja) セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および論理
US9983873B2 (en) Systems, apparatuses, and methods for performing mask bit compression
EP3843322A1 (en) Method and apparatus for multi-key total memory encryption based on dynamic key derivation
US9600285B2 (en) Packed data operation mask concatenation processors, methods, systems and instructions
KR20170120096A (ko) 보안 인클레이브들의 프로세스들을 포크하고 보안 인클레이브 페이지 캐시에서 자식 인클레이브들을 확립하기 위한 명령어들 및 로직
US20220198027A1 (en) Storage encryption using converged cryptographic engine
US11874776B2 (en) Cryptographic protection of memory attached over interconnects
WO2013095575A1 (en) Broadcast operation on mask register
US11954047B2 (en) Circuitry and methods for spatially unique and location independent persistent memory encryption
US11436342B2 (en) TDX islands with self-contained scope enabling TDX KeyID scaling
EP4109312A1 (en) Circuitry and methods for supporting encrypted remote direct memory access (erdma) for live migration of a virtual machine
EP4020288A1 (en) Low overhead memory integrity with error correction capabilities
EP4202698A1 (en) Circuitry and methods for implementing input/output extensions for trust domains
EP4156005A1 (en) System, apparatus and method for direct peripheral access of secure storage
NL2031072B1 (en) Apparatus and method to implement shared virtual memory in a trusted zone
EP4020882A1 (en) Isa support for programming hardware over untrusted links
US20230040226A1 (en) Method and apparatus for dynamically adjusting pipeline depth to improve execution latency
EP4156594A1 (en) Memory assisted incline encryption/decryption
US9330020B2 (en) System, apparatus, and method for transparent page level instruction translation
CN114647858A (zh) 使用聚合密码引擎的存储加密
US20240054080A1 (en) Speculating object-granular key identifiers for memory safety
US20230205685A1 (en) Read all zeros or random data upon a first read from volatile memory
US20220308998A1 (en) Apparatus and method to reduce bandwidth and latency overheads of probabilistic caches
TW202326427A (zh) 用來實行可信賴執行環境安全管理器之電路系統及方法