JP2023094536A - 信頼ドメインのための入/出力拡張を実装するための回路および方法 - Google Patents

信頼ドメインのための入/出力拡張を実装するための回路および方法 Download PDF

Info

Publication number
JP2023094536A
JP2023094536A JP2022166581A JP2022166581A JP2023094536A JP 2023094536 A JP2023094536 A JP 2023094536A JP 2022166581 A JP2022166581 A JP 2022166581A JP 2022166581 A JP2022166581 A JP 2022166581A JP 2023094536 A JP2023094536 A JP 2023094536A
Authority
JP
Japan
Prior art keywords
iommu
trust domain
memory
field
trusted
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
JP2022166581A
Other languages
English (en)
Inventor
バサク アブヒシェク
Basak Abhishek
シャンボグエ ヴェドヴヤス
Shanbhogue Vedvyas
サンカラン ラジェシュ
Sankaran Rajesh
ヴァクハルワラ ルピン
Vakharwala Rupin
ワイ. カカイヤ ウトカルシュ
Y Kakaiya Utkarsh
ゲイスラー エリック
Geisler Eric
サヒータ ラヴィ
Sahita Ravi
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 JP2023094536A publication Critical patent/JP2023094536A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • 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
    • G06F12/1441Protection 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 for a range
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8061Details on data memory access
    • G06F15/8069Details on data memory access using a cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8076Details on data register access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45587Isolation or security of virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Storage Device Security (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】信頼ドメインのための入/出力拡張を実装するための装置、方法及びシステムを提供する。【解決手段】コンピュータシステムは、ハードウェアプロセッサと入/出力メモリ管理ユニット(IOMMU)回路を備える。ハードウェアプロセッサは、保護メモリの領域を有する各々の信頼ドメインとして1つまたは複数のハードウェア分離された仮想マシンを管理する信頼ドメインマネージャを備えるハードウェアプロセッサコアを含む。IOMMU回路は、ハードウェアプロセッサコアと入/出力デバイスとの間に結合され、入/出力デバイスからの信頼ドメインの保護メモリのダイレクトメモリアクセスに対する要求に対して、入/出力デバイスが信頼ドメインの信頼されるコンピューティングベース内にあることを示すように要求のフィールドが設定されていることに応じて、ダイレクトメモリアクセスを可能にする。【選択図】図1

Description

本開示は、一般にエレクトロニクスに関し、より具体的には、本開示の例は、信頼ドメインのための入/出力拡張を実装するための回路に関するものである。
プロセッサ、またはプロセッサのセットは、命令セット、例えば、命令セットアーキテクチャ(ISA)からの命令を実行する。命令セットは、プログラミングに関連するコンピュータアーキテクチャの一部であり、一般にネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込みと例外処理、および外部入出力(IO)を含む。本明細書において、命令という用語は、マクロ命令、例えば、実行のためにプロセッサに提供される命令、または、マイクロ命令、例えば、プロセッサのデコーダがマクロ命令をデコードした結果得られる命令を指してよいことに留意されたい。
本開示は、添付図面の図において限定ではなく例として示され、図面中、同様の参照符号は、同様の要素を示す。
本開示の例による、信頼ドメインマネージャ、メモリ、入/出力メモリ管理ユニット(IOMMU)、および入/出力(IO)デバイスを有する複数のコアを含むコンピュータシステムのブロック図を示す。
本開示の例による、IOデバイスに結合されたホストのブロック図を示す。
本開示の例による、IOトランスレーション・ルックアサイド・バッファ(IO TLB)を有するIOMMUのブロック図を示す。
本開示の例による、図3BのIOMMUのための変換テーブルおよび信頼される変換テーブルのブロック図を示す。
本開示の例による、IOMMUを含む非コヒーレントからコヒーレントへのブリッジのブロック図を示す。
本開示の例による、IOMMUレジスタのテーブルである。
本開示の例による、信頼されるルートテーブルアドレスレジスタの例示フォーマットである。
本開示の例による、信頼される無効化キューヘッドレジスタの例示フォーマットである。
本開示の例による、信頼される無効化キューテイルレジスタの例示フォーマットである。
本開示の例による、信頼される無効化キューアドレスレジスタの例示フォーマットである。
本開示の例による、信頼ドメイン(例えば、信頼ドメイン拡張(TDX))モードレジスタの例示フォーマットである。
本開示の例による、信頼ドメインIO機能列挙を有する拡張機能レジスタの例示フォーマットである。
本開示の例による、拡張コマンドステータスレジスタの例示フォーマットである。
本開示の例による、拡張コマンド機能レジスタの例示フォーマットである。
本開示の例による、拡張コマンドレジスタの例示フォーマットである。
本開示の例による、拡張コマンド応答レジスタの例示フォーマットである。
本開示の例による、処理セット信頼ドメイン(例えば、信頼ドメイン拡張(TDX))モードビットの例示フォーマットである。
本開示の例による、例示エラーレポートの例示フォーマットである。
本開示の例による、例示エラーレポートの例示フォーマットである。
本開示の例による、第1レベルページテーブル(FLPT)ウォーク中のフォルトに対する例示エラーレポートの例示フォーマットである。
本開示の例による、第2レベルページテーブル(SLPT)ウォーク中のフォルトに対する例示エラーレポートの例示フォーマットである。
本開示の例による、変換構造のテーブルである。
本開示の例による、入/出力デバイスからの信頼ドメインの保護メモリのダイレクトメモリアクセスの要求を処理する方法の動作を示すフロー図である。
本開示の例による、汎用ベクトル向け命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図である。
本開示の例による、汎用ベクトル向け命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。
本開示の例による、図23Aおよび23Bの汎用ベクトル向け命令フォーマットのためのフィールドを示すブロック図である。
本開示の一例による、フルオペコードフィールドを構成する、図24Aの特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
本開示の一例による、レジスタインデックスフィールドを構成する、図24Aの特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
本開示の一例による、拡張演算フィールド2350を構成する、図24Aの特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
本開示の一例による、レジスタアーキテクチャのブロック図である。
本開示の例による、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
本開示の例による、インオーダアーキテクチャコアの例示的な例と、プロセッサに含まれるべき例示的なレジスタリネーミングアウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
本開示の例による、オンダイインターコネクトネットワークへのその接続およびレベル2(L2)キャッシュのそのローカルサブセットを伴う、単一のプロセッサコアのブロック図である。
本開示の例による、図27Aのプロセッサコアの一部の拡大図である。
本開示の例による、1つより多くのコアを有し得、統合メモリコントローラを有し得、統合グラフィックを有し得るプロセッサのブロック図である。
本開示の一例による、システムのブロック図である。
本開示の例による、より具体的な例示的なシステムのブロック図である。
本開示の例による、第2のより具体的な例示的なシステムのブロック図を示す。
本開示の例による、システムオンチップ(SoC)のブロック図を示す。
本開示の例による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。
以下の説明では、多数の具体的な詳細が記載されている。しかしながら、本開示の例は、それらの具体的な詳細なしで実施することができることが理解される。他の例では、この説明の理解を曖昧にしないように、周知の回路、構造、および技術は詳細に示されていない。
本明細書における「一例」、「例」、「複数の例」などへの言及は、説明された例が特定の機能、構造、または特性を含み得るが、すべての例が必ずしも特定の機能、構造、または特性を含み得ないことを示す。さらに、そのような語句は、必ずしも同じ例を参照するわけではない。さらに、ある例に関連して特定の機能、構造または特性が説明されている場合、明示の説明の有無に関わらず、他の例に関連して、そのような特徴、構造または特性に影響が及ぶことは、当業者の知識の範囲内であると考えられる。
(例えば、ハードウェア)プロセッサ(例えば、1つまたは複数のコアを有する)は、命令(例えば、命令のスレッド)を実行して、データに対し処理、例えば、算術的、論理的または他の機能を実行してよい。例えば、ソフトウェアは、演算を要求し得、ハードウェアプロセッサ(例えば、そのコアまたは複数のコア)は、要求に応答して演算を実行し得る。特定の演算は、例えば、データの格納および/または読み出し(例えば、ロード)のために1つまたは複数のメモリ位置にアクセスすることを含む。システムは、例えばシステムオンチップ(SoC)の複数のソケットの各ソケットにコアの適切なサブセットを例えば有する、複数のコアを含んでよい。各コア(例えば、各プロセッサ又は各ソケット)は、データストレージ(例えば、メモリ)にアクセスしてよい。メモリは、揮発性メモリ(例えば、ダイナミックランダムアクセスメモリ(DRAM))、又は、(例えば任意のシステムストレージとは別の、限定されないが、ハードディスクドライブなどとは別の、)(例えば、バイトアドレス可能な)持続性(例えば、不揮発性)メモリ(例えば、不揮発性RAM)を含んみ得る。持続性メモリの一例は、例えばペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)規格に従ってアクセス可能な、デュアルインラインメモリモジュール(DIMM)(例えば、不揮発性DIMM)(例えば、インテル(登録商標)Optane(商標)メモリ)である。
計算の特定の例では、仮想マシン(VM)(例えば、ゲスト)は、コンピュータシステムのエミュレーションである。特定の例では、VMは、特定のコンピュータアーキテクチャに基づき、基礎となる物理的コンピュータシステムの機能を提供する。それらの実装には、専用ハードウェア、ファームウェア、ソフトウェア、またはその組み合わせを含み得る。特定の例では、仮想マシンモニタ(VMM)(ハイパーバイザとしても知られる)は、実行された場合、VMインスタンスの作成、管理、および統制を可能にし、物理ホストマシン上で仮想環境の動作を管理するソフトウェアプログラムである。VMMは、仮想環境と特定の例における実装の背後にある主要なソフトウェアである。特定の例においてホストマシン(例えば、プロセッサ)の上にインストールされる場合、VMMは、例えば、それぞれが別個のオペレーティングシステム(OS)及びアプリケーションを有するVMの作成を容易にする。VMMは、必要な計算、メモリ、ストレージ、及び他の入/出力(IO)リソース、限定されないが入/出力メモリ管理ユニット(IOMMU)(例えばIOMMU回路)などを割り当てることによって、それらのVMのバックエンド動作を管理し得る。VMMは、単一のホストマシン上にインストールされるか、または異なる相互接続されたホストにわたって分散されたVMの動作全体、状態、および利用可能性を管理するための集中型インタフェースを提供し得る。
しかし、仮想マシンにとってVMMおよび/または他の仮想マシン(複数可)からの情報のセキュリティ(例えば、機密性)を維持することが好ましい場合がある。特定のプロセッサ(例えば、プロセッサを含むシステムオンチップ(SoC))は、それらのハードウェアを利用して、仮想マシンを分離し、例えばそれぞれが「信頼ドメイン」と称される。特定のプロセッサは、信頼ドメインを実装するための命令セットアーキテクチャ(ISA)(例えば、ISA拡張)をサポートする。例えば、信頼ドメイン(TD)と称されるハードウェア分離された仮想マシン(VM)を展開するためにアーキテクチャ要素を利用するIntel(登録商標)信頼ドメイン拡張(Intel(登録商標) TDX)である。
特定の例では、ハードウェアプロセッサ及びそのISA(例えば、その信頼ドメインマネージャ)は、VMM(例えば、ハイパーバイザ)および/または(例えば、ホストプラットフォーム上の)他の非TDソフトウェアからTD VMを分離する。特定の例では、ハードウェアプロセッサ及びそのISA(例えば、その信頼ドメインマネージャ)は、信頼ドメインを広範囲なソフトウェア攻撃から保護するのを助け、信頼ドメインの信頼されるコンピューティングベース(TCB)を減らすことによって機密コンピューティングを強化するために、信頼ドメインを実装する。特定の例では、ハードウェアプロセッサ及びそのISA(例えば、その信頼ドメインマネージャ)は、データセキュリティ及び保護に関するクラウドテナントの制御を強化する。特定の例では、ハードウェアプロセッサとそのISA(例えば、その信頼ドメインマネージャ)は、信頼ドメイン(例えば、信頼される仮想マシン)を実装し、テナントデータを敵対者にさらすことなく管理されたクラウドサービスを提供するクラウドサービスプロバイダ(CSP)の能力を高める。
特定の例では、ハードウェアプロセッサおよびそのISA(例えば、その信頼ドメインマネージャ)は、デバイス入/出力(IO)をもサポートする。例えば、デバイス入/出力(IO)(例えば、TDX-IO)を有する信頼ドメイン拡張(TDX)をサポートするISA(例えば、Intel(登録商標) TDX2.0)を有する。特定の例では、デバイス入/出力(IO)(例えば、TDX-IO)をサポートするハードウェアプロセッサおよびそのISA(例えば、その信頼ドメインマネージャ)は、特定の(例えば、唯一の)TDに対するデバイスの物理機能(PF)および/または仮想機能(VF)の使用(例えば、割当)を可能にする。
特定の信頼ドメイン(TD)は、ホスト環境から分離された機密コンピューティングワークロードをホストするために使用される。特定の信頼ドメイン技術(例えば、TDX 1.0)アーキテクチャは、TD(例えば、中央処理装置(CPU))コンテキストおよびメモリのホスト環境からの分離を可能にするが、TDプライベートメモリへの信頼されるIO(例えば、ダイレクトメモリアクセス(DMA)またはメモリマップドI/O(MMIO))をサポートせず、例えば、信頼ドメインはIOデバイス(例えば、ストレージ、ネットワークなど)に送信されるデータを保護するためのソフトウェアメカニズムを使用することになり、例えば、すべてのIOデータは準仮想化インタフェースを使用してTD共有メモリ内のバウンスバッファを介して送信されるため、高いオーバーヘッドをもたらす。しかし、特定の例では、これは、スケーラブルIO仮想化(IOV)、共有仮想メモリ、直接IO割り当て、ならびに、アクセラレータ、フィールドプログラマブルゲートアレイ(FPGA)および/またはグラフィックス処理ユニット(GPU)への計算オフロード(それらに限定されないが)などの、いくつかのIOモデルの使用を除外するものである。したがって、IOの観点から、特定の信頼ドメイン技術(例えば、TDX 1.0)は、1)保護がエンドツーエンド暗号化(例えば、ハードウェア(H/W)またはソフトウェア(S/W)スタックベース)の機能を有するデバイスに対して拡張されることができるのみであり、最先端のIO仮想化/プログラミングモデルをサポートしないため、機能(例えば、セキュリティ)の制限に悪影響を受ける、および、2)バウンスバッファ(およびソフトウェアベースの暗号化)のためのコピーには、特にIOデバイス(例えば、アクセラレータ)の増加した速度/帯域幅とともに、大きな性能オーバーヘッドが発生するため、性能の制限に悪影響を受ける。
特定の信頼ドメイン技術(例えば、デバイス入/出力(IO)(例えば、TDX-IO)を有する信頼ドメイン拡張(TDX))は、TDと対応するIO(例えば、TDX-IO)教化されたデバイス間の直接的な信頼されるIOを可能にするハードウェア、ファームウェア、および/またはソフトウェア拡張を定義し、したがって、上記の制限を克服する。特定の例では、システムオンチップ(SoC)上のIOMMU(例えば、そのVT-dエンジン)は、それらの(例えば、TDの信頼されるコンピューティングベース(TCB)内の)デバイス(複数可)と1つまたは複数のTDのプライベートメモリとの間の信頼されるダイレクトメモリアクセス(信頼されるDMA)を可能にする重要なハードウェアであり、上記の制限を克服する。
本明細書における特定の例は、TDX-IOを可能にするためのVT-d/IOMMU拡張に関する。本明細書の特定の例は、プロセッサおよび/またはそのISAに対するTDX-IO IOMMU(例えば、直接I/O(VT-d)のための仮想化技術)拡張に関する。本明細書の特定の例は、IOMMU(例えば、回路)を、(i)イニシエータ(SAI)保護された(例えば、信頼されるファームウェアまたはTDXモジュールおよび/またはSEAMのみへ制御されたアクセス)アーキテクチャレジスタセットの新しいセキュリティ属性、(ii)TDのTCB内のデバイス(複数可)(例えば、TD割り当てデバイス)からTDプライベートメモリへの信頼されるDMAウォークを有効にするための信頼されるルートテーブルポインタ、信頼される無効化を可能にしそれによりページおよび/またはIOリソースの再割り当てをセキュアにするための信頼される無効化キュー(例えば、および、そのベースアドレス、先頭および末尾のためのレジスタ(複数可))、および/または、(iii)IOMMUを信頼ドメイン(例えば、tdx_mode)動作に、および、信頼ドメイン動作からセキュアに移行するための制御(例えば、TDX_MODE)レジスタを有するように拡張する。特定の例では、メモリアクセスリクエスト(例えば、信頼ドメインのプライベートメモリへのIOデバイスによる要求)中のビット(例えば、入力されるペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)規格の整合性およびデータ暗号化(IDE)トランザクション層パケット(TLP)プレフィックス)内の信頼される「ide_t」ビット)は、(i)DMA要求(例えば、トランザクション)が信頼されるIOコンテキストから発生されたかを意味する、および/または、(ii)(例えば、ルートポインタから)信頼されない(例えば、VMM)維持される(例えば、VT-d)変換テーブルをウォークするか、または、(例えば、信頼されるルートポインタから)信頼される(例えば、TDM)(例えば、TDXモジュール)維持される(例えば、VT-d)変換テーブルをウォークするかを選択するために使用される。特定の例では、変換テーブルは、物理アドレスへの仮想アドレスのマップを含む。
特定の例では、VMMは、信頼ドメインまたは複数の信頼ドメインのための「信頼される」変換テーブル(複数可)にアクセスすることを信頼されず(例えば、(例えば、ゲスト)信頼ドメイン(例えば、物理)アドレスの、ホスト(例えば、物理)アドレスへのマッピングが信頼されない)、代わりに、信頼ドメインマネージャが、信頼ドメインまたは複数の信頼ドメインのための変換テーブルを管理することになる。特定の例では、IOMMUは、例えば、IOデバイスによる信頼されるアクセス(複数可)のみが可能であることを保証する、例えば、IOデバイスが信頼ドメイン(または複数の信頼ドメイン)の信頼されるコンピューティングベースにあることを保証するように、「信頼される」変換テーブルへのアクセスを制限する。
特定の例では、IOMMUは、ウォークを実行するための変換ルックアサイドバッファ(IOTLB)などを含む。特定の例では、IOTLBおよび/またはそれぞれのIOMMU(例えば、無効化)キャッシュは、信頼されるマッピングと信頼されない(例えば、VT-d)マッピングとの間で分離するためにタグ付けされる。特定の例では、メモリへの異なるトランザクション(例えば、I/OデバイスまたはIOMMU自体から発生される)に対して、IOMMUは、TDプライベートメモリへのアドレスを選択的に可能にするために使用するコマンドを生成すし、例えば、これは、信頼されないVMM/オペレーティングシステム(OS)VT-dテーブル/IOMMUプログラミングおよび/または悪意のあるデバイスからの様々なセキュリティ脅威をキャッチする。
特定の例では、IOMMU拡張は、TDX-IOを可能にし、したがって、それらは特にクラウド内のIOデバイスおよびアクセラレータを有するヘテロジニアスコンピューティングの増大とともに(例えば、(例えば、すべての)直接、高性能IOモデルもサポートされている)クラウド空間における機密コンピューティングを可能にするため、SoC(例えばコンピュータの)(例えばプロセッサ)自体の機能に対する改善である。
特定の例では、IOMMU拡張は、対応するIOMMUにおけるアクセス制御レジスタセット、2つの(例えば、「信頼される」及び「信頼されない」)ルートポインタ、2つの(例えば、「信頼される」および「信頼されない」)無効化キュー、IOMMUキャッシュ(例えば、変換テーブルキャッシュ(複数可))における「信頼される」タグ、および/または、信頼される/信頼されないDMAウォークのための新しいフォルト、のうちの1つまたは複数を含む。特定の例では、それらはアーキテクチャ変更であり、対応するIOMMU仕様書に文書化もされている。特定の例では、それらのアーキテクチャ変更は、システムメモリへの、および/または、システムメモリからの、信頼されるトランザクションのDMAパスをモニタすることによって参照されることができる。
本明細書の機能は、例えば、AMD(登録商標) Secure Encrypted Virtualization(例えば、SEV/SEV-ES/SEV-SNP)またはARM(登録商標) Realm Management Extension(RME)に対するIOデバイス用のコンピューティングソリューションとして、他の機密コンピューティング技術に追加し得ることが理解されるべきである。
図1にここで目を向けると、例示システム・アーキテクチャが示されている。図1は、本開示の例による、信頼ドメインマネージャ101-0~101-N、メモリ108(例えば、プロセッサおよび/またはコアメモリとは別のシステムメモリ)、入/出力メモリ管理ユニット(IOMMU)120(例えば、回路)と、入/出力(IO)デバイス106を有する102-0~102-N(例えば、Nは1より大きい任意の正の整数であるが、シングルコアの例も利用され得る)を含むコンピュータシステム100のブロック図を示す。
特定の例では、各コアは、レジスタのセット、例えば、コア102-0のレジスタ103-0、コア102-Nのレジスタ103-Nなど、を含む(例えば、または論理的に含む)。レジスタ103は、例えば、各コア(例えば、または物理コアの複数の論理コアの各論理コア)に対するデータレジスタおよび/または制御レジスタであり得る。
特定の例では、IOデバイス106は、1つまたは複数のアクセラレータ(例えば、アクセラレータ回路106-0~106-N(例えば、Nは1より大きい任意の正の整数であるが、単一のアクセラレータ回路の例も利用され得る))を含む。
デバイス106の図1に示された例はアクセラレータであるが、他のデバイス(例えば、非アクセラレータデバイス)が本明細書に開示された例を利用できることは理解されるべきである。示された例では、(例えば、各)アクセラレータ回路106-0~106-Nは、圧縮解除動作を実行する圧縮解除器回路124、圧縮動作を実行する圧縮器回路128、および、例えば、メモリ108および/またはコアの内部メモリ(例えば、キャッシュ)に接続するダイレクトメモリアクセス(DMA)回路122を含む。一例では、圧縮器回路128は、アクセラレータ回路106-0~106-Nのうちの2つまたはそれより多くによって(例えば、動的に)共有される。特定の例では、特定のアクセラレータ回路(例えば、アクセラレータ回路106-0)に割り当てられたジョブのデータは、DMA回路122によって、例えば一次および/または二次入力として、ストリームインされる。マルチプレクサ126および132は、特定の演算のためのデータを送るために利用され得る。任意選択で、(例えば、構造化クエリ言語(SQL))フィルタエンジン130が、例えば、入力データ、例えば圧縮解除器回路124から出力される圧縮解除データに対して、(例えば、二次データ入力で入力された検索用語に対して)フィルタリングクエリを実行するために含まれ得る。デバイス106は、例えば、複数のアクセラレータ回路106-0~106-Nによって共有される、ローカルメモリ134を含み得る。コンピュータシステム100は、ハードドライブ、例えば、図30のストレージユニット3028に結合し得る。
メモリ108は、オペレーティングシステム(OS)および/または仮想マシンモニタコード110、ユーザ(例えば、プログラム)コード112、非信頼ドメインメモリ114(例えば、ページ)、信頼ドメインメモリ116(例えば、ページ)、非圧縮データ(例えば、ページ)、圧縮データ(例えば、ページ)、またはそれらの任意の組み合わせを含み得る。計算の特定の例では、仮想マシン(VM)は、コンピュータシステムのエミュレーションである。特定の例では、VMは、特定のコンピュータアーキテクチャに基づき、基礎となる物理的コンピュータシステムの機能を提供する。それらの実装には、専用ハードウェア、ファームウェア、ソフトウェア、またはその組み合わせを含み得る。特定の例では、仮想マシンモニタ(VMM)(ハイパーバイザとしても知られる)は、実行された場合、VMインスタンスの作成、管理、および統制を可能にし、物理ホストマシン上で仮想環境の動作を管理するソフトウェアプログラムである。VMMは、仮想環境と特定の例における実装の背後にある主要なソフトウェアである。特定の例においてホストマシン(例えば、プロセッサ)の上にインストールされる場合、VMMは、例えば、それぞれが別個のオペレーティングシステム(OS)及びアプリケーションを有するVMの作成を容易にする。VMMは、必要な計算、メモリ、ストレージ、及び他の入/出力(IO)リソース、限定されないが入/出力メモリ管理ユニット(IOMMU)などを割り当てることによって、それらのVMのバックエンド動作を管理し得る。VMMは、単一のホストマシン上にインストールされるか、または異なる相互接続されたホストにわたって分散されたVMの動作全体、状態、および利用可能性を管理するための集中型インタフェースを提供し得る。
メモリ108は、コアおよび/またはデバイス106とは別のメモリであり得る。メモリ108は、DRAMであり得る。圧縮データは、第1のメモリデバイス(例えば、ファーメモリ)に格納され得、および/または非圧縮データは、別の(例えば、ニアメモリとしての)第2のメモリデバイスに格納され得る。
デバイス106、コア(複数可)102-0~102-N、メモリ108などの間の通信を可能にするために、カップリング(例えば、入/出力(IO)ファブリックインタフェース104)が含まれ得る。
特定の例では、ハードウェア初期化マネージャ(非一時的)ストレージ118は、ハードウェア初期化マネージャファームウェア(例えば、またはソフトウェア)を格納する。一例では、ハードウェア初期化マネージャ(非一時的)ストレージ118は、基本入/出力システム(BIOS)ファームウェアを格納する。別の例では、ハードウェア初期化マネージャ(非一時的)ストレージ118は、統合拡張ファームウェアインタフェース(UEFI)ファームウェアを格納する。特定の例では(例えば、プロセッサの電源オンまたは再起動によってトリガされる)、コンピュータシステム100(例えば、コア102-0)は、ハードウェア初期化マネージャ(非一時的)ストレージ118に格納されたハードウェア初期化マネージャファームウェア(例えば、またはソフトウェア)を実行して、動作のためにシステム100を初期化し、例えば、オペレーティングシステム(OS)の実行を開始し、および/またはシステム100の(例えば、ハードウェア)コンポーネントを初期化してテストする。
特定の例では、コンピュータシステム100は、例えば、1つまたは複数のコア102-0~102-NとIOファブリックインタフェース104との間に結合された入/出力メモリ管理ユニット(IOMMU)120(例えば、回路)を含む。特定の例では、IOファブリックインタフェースは、ペリフェラルコンポーネントインタフェースエクスプレス(PCIe)インタフェースまたはコンピュートエクスプレスリンク(CXL)インタフェースである。特定の例では、IOMMU120は、例えば、仮想アドレスから物理アドレスへのアドレス変換を提供する。特定の例では、IOMMU120は、1つまたは複数のレジスタ121、例えば、データレジスタおよび/または制御レジスタ(例えば、図3A~10を参照して説明されるレジスタ)を含む。特定のレジスタの例示フォーマットは、以下で説明される。
デバイス106は、描かれたコンポーネントのいずれかを含み得る。例えば、アクセラレータ回路106-0~106-Nの1つまたは複数のインスタンスを有する。特定の例では、ジョブ(例えば、そのジョブのための対応する記述子)がデバイス106に提出され、デバイスは1つまたは複数の(例えば、圧縮解除または圧縮)演算を実行する。特定の例では、デバイス106は、ローカルメモリ134を含む。特定の例では、デバイス106はTEE IO可能なデバイスであり、例えばホスト(例えば、コア102-0~102-Nのうちの1つまたは複数を含むプロセッサ)がTEE可能ホストである。特定の例では、TEE可能ホストは、TEEセキュリティマネージャを実装する。
特定の例では、信頼される実行環境(TEE)セキュリティマネージャ(例えば、信頼ドメインマネージャ101によって実装される)は、メモリ、プロセッサ、および他のリソースを信頼ドメイン(例えば、信頼される仮想マシン)に割り当てるためにVMMにインタフェースを提供する、(ii)セキュリティメカニズムおよびアクセス制御(例えば、IOMMU変換テーブルなど)を実装して、信頼ドメイン(例えば、信頼される仮想マシン)のデータおよびホストにおける実行状態の機密および整合性を、信頼ドメイン(例えば、信頼される仮想マシン)の信頼されるコンピューティングベースにないエンティティから、保護する、(iii)信頼ドメイン(例えば、信頼される仮想マシン)によって使用される信頼されるデバイスインタフェース(TDI)のセキュリティ状態を管理するプロトコルを使用する、(iv)ホスト用のIDE暗号化鍵を確立/管理し、必要に応じて鍵更新をスケジューリングする。TSMは、IDE暗号化鍵をホストルートポートにプログラムし、DSMと通信して、デバイス内に整合性およびデータ暗号化(IDE)暗号化鍵、(v)もしくは、それらの任意の単一または組み合わせを構成する。
特定の例では、デバイスセキュリティマネージャ(DSM)136は、(i)デバイス識別情報の認証および測定報告をサポートすること、(ii)デバイス内のIDE暗号化鍵を構成すること(例えば、TSMが初期構成およびその後の鍵更新のための鍵をDSMに提供すること)、(iii)TDI構成のロック、TDI構成の報告、信頼ドメイン(例えば、信頼される仮想マシン)へのTDIのアタッチおよびデタッチに関するデバイスインタフェース管理を提供すること、(iv)信頼ドメイン(例えば、信頼される仮想マシン)のTCBにないエンティティから信頼ドメイン(例えば、信頼される仮想マシン)提供データを分離するためのアクセス制御およびセキュリティメカニズムを実装すること、(v)またはその任意の単一または組み合わせをする。
特定の例では、規格は、仮想マシンモニタ(VMM)(例えば、そのVM)、TSM(例えば、信頼ドメインマネージャ101)、およびデバイスセキュリティマネージャ(DSM)136の相互作用フローを定義する。
特定の例では、IOMMU120および信頼ドメインマネージャ(複数可)101は、IOデバイス(複数可)106と信頼ドメインメモリ116(例えば、単一の信頼ドメインのみのための領域および/または複数の信頼ドメインによって共有される別の領域)の間(例えば、~へ、および/または、~から)で(例えば、直接に)ダイレクトメモリアクセスを可能にするように協力する。
デバイスとTDとの間の信頼関係を確立するべく、特定のTDX-IOアーキテクチャは、TDおよび/または信頼ドメインマネージャ(例えば、回路および/またはコード)(例えば、信頼される実行環境(TEE)セキュリティマネージャ(TSM))が、デバイスと信頼ドメインマネージャとの間にセキュア通信セッションを形成することを必要とする(例えば、信頼ドメインマネージャによってデバイスまたはデバイスの機能(複数可)のサブセットを特定の信頼ドメインが使用することを可能にするため)。デバイスとTDとの間の信頼関係を確立するべく、特定のTDX-IOアーキテクチャは、TDおよび/または信頼ドメインマネージャ(例えば、回路および/またはコード)(例えば、信頼される実行環境(TEE)セキュリティマネージャ(TSM))が、(i)デバイスを認証する(例えば、およびデバイス測定を収集する)ために分散管理タスクフォース(DMTF)のセキュアプロトコルおよびデータモデル(SPDM)規格を使用する、および、(ii)ペリフェラルコンポーネントインターコネクトスペシャルインタレストグループ(PCI-SIG)の信頼されるデバイスインタフェースセキュリティプロトコル(TDISP)規格を使用する(例えば、デバイスの機能(複数可)を管理するためにデバイスセキュリティマネージャ(DSM)と通信するため)、ことを必要とする。
特定の例では、SPDMメッセージングプロトコルは、SPDMメッセージ交換で概説されるメッセージ交換を行うために2つのエンドポイント間の要求-応答メッセージングモデルを定義し、例えば、各SPDM要求メッセージは、SPDM仕様で定義されるようにSPDM応答メッセージで応答されなければならない。特定の例では、エンドポイントの(例えば、デバイスの)「測定」は、ファームウェア/ソフトウェアまたは構成データの要素の暗号ハッシュ値を計算し、デジタル署名の使用を通じて暗号ハッシュ値をエンドポイントの識別情報に結びつける処理を表す。これにより、認証イニシエータがエンドポイントで実行されているファームウェア/ソフトウェアまたは構成の識別と測定を確立することを可能にする。
特定の例では、TDのセキュリティポリシーの実施を助けるために、安全調停モード(SEAM)と呼ばれるプロセッサの新たなモードが、(例えば、製造者が提供する)デジタル方式で署名されたが暗号化されていないセキュリティ-サービス・モジュールをホストするために導入される。特定の例では、信頼ドメインマネージャ(TDM)101は、SEAM-RANGEレジスタ(SEAMRR)によって識別される予約された、メモリ空間においてホストされる。特定の例では、プロセッサは、SEAM-MEMORYレンジ内で実行するソフトウェアにのみSEAM-MEMORYレンジへのアクセスを可能にし、すべての他のソフトウェアアクセスおよびデバイスからこのメモリ範囲へのダイレクトメモリアクセス(DMA)はアボートされる。特定の例では、SEAMモジュールは、システム管理モード(SMM)メモリまたは(例えば、インテル(登録商標)ソフトウェアガード拡張(SGX))保護メモリを含む、プラットフォーム内の他の保護メモリ領域に対するいかなるメモリ-アクセス権限も有さない。
図2は、本開示の例による(例えば、システム200を形成する)、IOデバイス106(例えば、TDX-IO可能なデバイス)に結合されたホスト202(例えば、図1のプロセッサコア102の1つまたは複数)のブロック図を示す。特定の例では、ホスト202は、信頼ドメインのTDX-IOプロビジョニングエージェント(TPA)204、および信頼ドメイン「1」206-1および信頼ドメイン「2」206-2として示される複数の信頼ドメインを実装するが、任意の単一または複数の信頼ドメインが実装され得る。特定の例では、ホスト202は、信頼ドメインを管理するための信頼ドメインマネージャ101を含む(例えば、垂直破線は、信頼ドメイン、例えば、ホストOS110A、VMM110B、およびBIOSなど118、のそれらの間の分離を示す)。特定の例では、仮想マシンモニタ110Bは、1つまたは複数の仮想マシンを管理(例えば、生成)し、例えば、信頼ドメインマネージャ101が、第1の信頼ドメインとしての第1の仮想マシンを第2の(または複数の)仮想マシンおよび第2の(または複数の)信頼ドメイン(複数可)から分離する。特定の例では、ホスト202は、IOデバイス106との、例えば、その(例えば、PCIe)エンドポイント210(例えば、鍵(シンボリックに示される)も有する)との、安全な通信を可能にするために鍵(シンボリックに示される)を有する(例えば、PCIe)ルートポート208を含む。特定の例では、信頼ドメインマネージャ101およびデバイスセキュリティマネージャ136はまた、例えばそれぞれメモリ保護鍵およびセキュアセッション鍵を表す、鍵を有する。
特定の例では、ホスト202は、カップリング104を介して、例えばセキュアリンク104A(例えば、PCIe/コンピュートエクスプレスリンク(CXL)規格に従ったリンク)を介して、デバイス216に結合される。
特定の例では、ホスト202は、トランスポートレベル(例えば、SPDM)仕様および/またはアプリケーションレベル(例えば、TDISP)仕様に従って、デバイス216に結合される。特定の例では、デバイス106は、デバイスシークレット(複数可)、例えば、デバイス証明書212、セッション鍵、デバイス「測定」値などを有するデバイスセキュリティマネージャ(DSM)136を含む。特定の例では、デバイス106は、1つまたは複数の物理機能(複数可)を実装する。
特定の例では、デバイス106は、デバイス側の第1のデバイスインタフェース(I/F)214と、1つまたは複数の第2のデバイスインタフェース(複数可)216とを含む。特定の例では、デバイス106は、それらのインタフェース間のイントラコンテキスト分離をサポートする。
特定の例では、デバイス106(例えば、シングルルート入/出力仮想化(SR-IOV)規格に従う)は、複数の仮想マシン(例えば、信頼ドメイン)により共有される。特定の例では、物理機能は、データをデバイスの内外に移動する機能を有するのに対し、データフローをサポートする仮想機能(例えば、第1の仮想機能および第2の仮想機能、例えば、仮想機能は軽量(例えば、PCI Express(PCIe)である)の機能は、構成リソースの制限されたセットをも有する。
特定の例では、IOデバイス106は、IOMMU120の制御下で信頼ドメイン(例えば、信頼ドメイン206-1または信頼ドメイン206-2)のプライベートメモリへのダイレクトメモリアクセスリクエストを実行する。
特定の例では、信頼ドメインは、プライベートメモリ(例えば、図1の信頼ドメインメモリ116内)と共有メモリ(例えば、図1の非信頼ドメインメモリ114および/または信頼ドメインメモリ116内)の両方を有する。特定の例では、DMAは、保護メモリ(例えば、信頼ドメインのプライベートメモリおよび共有メモリ)を対象とする。
異なるアーキテクチャコンポーネントに対するIOMMU120の例示の拡張および変更について、後述される。
図3Aは、本開示の例による、IOトランスレーション・ルックアサイド・バッファ302(IO TLB)を有するIOMMU120のブロック図を示す。描かれたIO TLB302は、例えば、PCIeコントローラ318(例えば、IDEエンコーダ/デコーダ320を含む)からの、メモリアクセス(例えば、読み出しおよび/または書き込み)リクエスト(例えば、IOデバイス106からの)に対する入力を含む。
特定の例では、IO TLB 302は、デバイス(例えば、エンドポイント)からの(例えば、仮想)アドレスの入力に対するIO TLB(例えば、マッピングのそのキャッシュ)でのヒットに対して、対応するホスト(例えば、物理)アドレスを出力し、および/または(例えば、仮想)アドレスの入力に対するIO TLB(例えば、そのマッピングのキャッシュ)におけるミスに対して、メモリ内で(例えば、ページ)ウォークを実行し、デバイスからのアドレスのその入力に対する対応するホスト(例えば、物理)アドレスを決定する。
しかし、その要求が対応する信頼ドメインの信頼されるコンピューティングベースから(またはそのため)でない限り、IOデバイス106が保護されたプライベートメモリ(例えば、図1の信頼ドメインメモリ116および/またはそのプライベートメモリのための対応するデータを有する任意のデータ構造(例えば、IOTLBのためのマッピングおよび/または変換テーブル)、レジスタなど)にアクセスすることを許可させないことが好ましい場合がある。特定の例では、VMM110B(または、OSまたは信頼ドメインの一部ではない他のコンポーネント)が、プライベートメモリだけでなく、そのプライベートメモリ(例えば、図1の信頼ドメインメモリ116)に対して対応するデータを有する任意のデータ構造(例えば、IOTLBのためのマッピングおよび/または変換テーブル)、レジスタなどにアクセスしないよう保つことが好ましい。
特定の例では、保護されたプライベートメモリ(例えば、本明細書で説明されるように「ide_t」(例えば、=1)でマークされる)に対する要求は、「信頼されない」変換テーブル322(例えば、非信頼ドメインメモリ114内またはIOMMU120内)(例えば、VMM110Bによって管理される)のセットとは別個のものである、信頼される変換テーブル324(例えば、保護メモリ116内またはIOMMU120内にも格納される)(例えば、信頼ドメインマネージャ101(例えば、TDX-モジュール)によって管理される)のセットに送信される。特定の例では、IOMMU120は、各デバイスについて(例えば、信頼される)変換テーブルを維持する。
特定の例では、別々の「信頼されない」変換テーブル322および信頼される変換テーブル324の使用は、1つまたは複数のレジスタの別個のセットが、例えば、「信頼されない」変換テーブル322の信頼されないルートテーブルのベースアドレスに対するポインタを格納する「信頼されない」ルートテーブルアドレスレジスタ312、および、信頼される変換テーブル324(例えば、ルートテーブルは、複数のルートエントリを格納し、各ルートエントリは、IOデバイスのためのコンテキストテーブルを参照するためのコンテキストテーブルポインタを含む)の信頼されるルートテーブルのベースアドレスに対するポインタを格納する信頼されるルートテーブルアドレスレジスタ(T_RTADDR_REG)316、のそれぞれについて利用されることを意味する。
特定の例では、非プライベートメモリ(例えば、本明細書で説明されるように「ide_t」でマークされていない(例えば、=0))に対する要求は、非プライベート変換テーブル322(例えば、非信頼ドメインメモリ114に格納されている)のセットに送信される。
特定の例では、IOMMU120は、無効化キューのためのレジスタのセットを含む。特定の例では、VMM110B(または、OSまたは信頼ドメインの一部ではない他のコンポーネント)が、プライベートメモリを無効化するだけでなく、そのプライベートメモリ(例えば、図1の信頼ドメインメモリ116内)を無効化するための対応するデータを有する任意のデータ構造、レジスタなどを読み出さないよう保つことが好ましい。特定の例では、IOMMU120は、信頼されるIOMMUレジスタ310A~310Cおよび316と信頼される変換テーブル324へのアクセスを、信頼ドメインマネージャ101以外の何れもしないよう保つ。
特定の例では、異なる信頼ドメインは、1つまたは複数の対応する信頼される変換テーブル324、例えば、および、IOMMUレジスタ310A~310Cおよび/または対応するIOMMUレジスタ310A~310Cに対する対応する値、を通じてマップされる。
特定の例では、本明細書で説明されるような保護されたプライベートメモリ116(例えば、そのページ)の無効化のための要求(例えば、コマンド)は、例えば、信頼される無効化キュー306に(信頼ドメインマネージャ101(例えば、TDX-モジュール)によって)送信される。特定の例では、(例えば、TDX-IOのための)信頼される無効化キューテイルレジスタ(T_IQT_REG)310Aは、信頼される無効化キュー306の末尾(例えば、最後の有効な)エントリのインジケーションを格納し、(例えば、TDX-IOのための)信頼される無効化キューヘッドレジスタ(T_IQH_REG)310Bは、先頭(例えば、信頼される無効化キュー306の最初の有効な)エントリのインジケーションを格納し、例えば、信頼ドメインマネージャ101(例えば、のみ)によってアクセス可能なそれらのレジスタおよび/またはIOMMU120内のそれらのレジスタとともに、(例えば、TDX-IOのための)信頼される無効化キューアドレスレジスタ(T_IQA_REG)310Cは、信頼される無効化キュー306のベースアドレス(例えば、およびサイズ)のインジケーションを格納する。
特定の例では、本明細書で説明されるような非プライベートメモリ114(例えば、そのページ)の無効化のための要求(例えば、コマンド)は、例えば、信頼されない無効化キュー304に(仮想マシンモニタ110Bによって)送信される。特定の例では、(例えば、TDX-IOのためでない)「信頼されない」無効化キューテイルレジスタ(IQT_REG)308Aは、「信頼されない」無効化キュー304の末尾(例えば、最後の有効な)エントリのインジケーションを格納し、(例えば、TDX-IOのためのでない)「信頼されない」無効化キューヘッドレジスタ(IQH_REG)308Bは、「信頼されない」無効化キュー304の先頭(例えば、最初の有効な)エントリのインジケーションを格納し、例えば、VMM110B(例えば、のみ)によってアクセス可能なそれらのレジスタおよび/またはIOMMU120内のそれらのレジスタとともに、(例えば、TDX-IOのためでない)「信頼されない」無効化キューアドレスレジスタ(IQA_REG)310Cは、信頼されない無効化キュー304のベースアドレス(例えば、およびサイズ)のインジケーションを格納する。
特定の例では、無効化要求は、サービスされ、例えば、対応するレジスタ(複数可)が更新され、例えば、したがって先頭及び末尾ポインタを更新する。特定の例では、無効化要求は、(i)第1の仮想マシン(例えば、または信頼ドメイン)からメモリ(例えば、ページ)を取り出して、別の仮想マシン(例えば、または信頼ドメイン)に与えること(例えば、そのメモリから第1の仮想マシンのデータをクリアした後)、(ii)仮想マシン(例えば、信頼ドメイン)を削除すること、および/または(iii)グローバルリセット要求に応じることである。
特定の例では、レジスタは、IOMMU120をTDM(例えば、TDX)モード内にセットするため、例えば、レジスタ310A~310C、レジスタ316、および/または信頼されるテーブル324(例えば、「ide_t」または「tビットタグ」がセットされている場合)を使用するため、の制御レジスタ(TDX_MODE)314A(例えば、IOMMU120内)を含む。特定の例では、レジスタは、IOMMU120にコマンド、例えば、TDX-modeを有効/無効にするコマンドなどを送信(例えば、格納)するためのコマンドレジスタ(ECMD_REG)314B(例えば、IOMMU120内)を含む。特定の例では、レジスタは、IOMMU120に対するグローバルコマンド、例えば、グローバルリセットを実行する(例えば、メモリ内のすべてのブロック(例えば、ページ)をクリアする)コマンド、を格納するためのグローバルコマンドレジスタ(GCMD_REG)314C(例えば、IOMMU120内)を含む。
特定の例では、信頼ドメインマネージャ101(例えば、TDX-モジュール)は、信頼されるIOMMUレジスタ310A~310Cおよび316と信頼される変換テーブル324とを管理する。
特定の例では、VMM110B 101は、他のIOMMUレジスタ308A~308Cおよび312と他の変換テーブル322を管理する。
図3Bは、本開示の例による、図3BのIOMMUのための変換テーブル322および信頼される変換テーブル324のブロック図を示す。特定の例では、ページウォークを実行する階層は、図3Bに示すように、例えば、仮想アドレス(例えば、信頼ドメインのためのゲスト物理アドレス)の入力に対して対応する物理アドレスを出力する。特定の例では、信頼される変換テーブル324は、信頼ドメインのプライベートメモリ用のセキュア拡張ページテーブル(secEPT)326(例えば、TDキー(例えば、TD KeyID)ごと)、および/または、(i)複数の信頼ドメイン間(例えば、しかし共有EPTがTD KeyIDを提供できない)でおよび/または(ii)仮想マシンモニタ110Bと共有される保護メモリのための共有拡張ページテーブル(sharedEPT)328を含む。
特定のI/Oメモリコントローラ(例えば、IOMMU120)(例えば、参照として後述するスケーラブルモードにおいて)は、DMA要求における仮想アドレス(VA)を用いて(例えば、処理アドレス空間識別子(PASID)プレフィックスありまたはなしで)IOデバイスがメモリにアクセスすることを可能にする。特定の例では、I/Oメモリコントローラ(例えば、IOMMU)は、変換テーブルにおいて構成されたPASIDを使用して、またはDMA要求で受信されたPASIDを用いて、VAを対応する物理アドレス(PA)に変換する。
特定の例では、I/Oメモリコントローラ(例えば、IOMMU 120)は、ページテーブルウォークが成功した後、内蔵IOTLB(例えば、仮想アドレスから物理アドレスへのマッピングを格納する内部のデータストレージ)に変換をプッシュする。特定の例では、変換テーブル322(例えば、IOMMU120および/またはIOTLB302に格納される)は、本開示の例によるDMAリマッピング構造(例えば、ルートテーブルで開始する)を含む。描かれた(スケーラブル)ルートテーブルは、そのエントリが次にPASIDテーブルを指すPASIDディレクトリを指す(上位または下位スケーラブル)コンテキストテーブルにおけるデバイス(例えば、機能)のエントリを指すバスエントリ(例えば、0から255)を含み、PASIDテーブルはそのエントリが第1レベルページテーブル(FLPT)ポインタおよび/または第2レベルページテーブル(SLPT)ポインタを含む値を含む。
特定の例では、信頼される変換テーブル324(例えば、IOMMU120および/またはIOTLB302に格納される)は、本開示の例によるDMAリマッピング構造(例えば、ルートテーブルで開始する)を含む。描かれた(スケーラブル)ルートテーブルは、そのエントリが次にPASIDテーブルを指すPASIDディレクトリを指す(例えば、下位または上位スケーラブル)コンテキストテーブルにおけるデバイス(例えば、機能)のエントリを指すバスエントリ(例えば、0-255)を含み、PASIDテーブルは、そのエントリが(例えば、TDキー(例えば、TD KeyID)を用いて保護されたメモリをマッピングする)セキュア拡張ページテーブル(secEPT)326、または、secEPTと(例えば、TDのプライベートおよび共有メモリをマッピングする)共有拡張ページテーブル(sharedEPT)328との組み合わせへのポインタを含む値を含む。
特定の例では、アドレス変換ハードウェア(例えば、IOMMU120)に現れる各インバウンド要求は、要求を発信するデバイスを識別することを必要とする。I/Oトランザクションの発信元を識別する(例えば、16ビット)属性は、ソースIDと称され得る。特定の例では、PCI Express(PCIe)デバイスの場合、ソースIDは、PCI Expressトランザクション層ヘッダの要求者識別子であり、特定の例では、例えば、そのPCIバス番号/デバイス番号/ファンクション番号から構成されるデバイスの要求者識別子は、設定ソフトウェアによって割り当てられ、要求を開始したハードウェア機能を一意に識別する。
図4は、本開示の例による、IOMMU120を含む非コヒーレントからコヒーレントへのブリッジ400のブロック図を示す。特定の例では、非コヒーレントからコヒーレントへのブリッジ400は、例えば、(例えば、マルチキートータルメモリ暗号化(MKTME))キーフィルタ404を含む、(例えば、IOデバイス106からメモリにアクセスする要求を受信するための)インバウンドトランザクションキャッシュ(ITC)402を含む。
特定の例では、プロセッサ(例えば、SoC)のMKTME機能は、ソフトウェアがメモリ暗号化のために1つまたは複数の別個の鍵を用いることを可能にし、例えば、TDXと共に用いられる場合、各信頼ドメインによって用いられるメモリに対して別個の鍵を介して機密性を提供する。特定の例では、非コヒーレントからコヒーレントへのブリッジ400は、インバウンドリクエストプロセッサ(IRP)408(例えば、メモリに接続するため)を含み、例えば、サービスのためにIOデバイス106からメモリに要求を送信し、および/または要求に対してメモリから戻る応答(例えば、マッピング)を受信する(例えば、(例えば、MKTME)キーフィルタ410を含む)。特定の例では、非コヒーレントからコヒーレントへのブリッジ400は、(例えば、要求に対する応答をIOデバイス106に送信するために)アウトバウンドトランザクションキャッシュ(OTC)406を含む。
[インタフェースレベル変更]
[一次インタフェース]
特定の例では、IOMMU120は、デバイスから新たな入力(例えば、受信したTLP(例えば、制御パケットではない)のIDEプレフィックスにおけるTビットの状態として「ide_t」、例えばTビットは、セットされる場合、信頼ドメイン内から発信されたTLPを示す)を取得する。特定の例では、IDEプレフィックスなしで受信したTLPの場合、この入力は0である。特定の例では、IOMMU120は、最終の適用可能出力における物理アドレスが信頼ドメイン(例えば、TDX)KeyID(kid)を有することができるかどうかを示す出力(「allow_tdx_kid」)を生成する。
[二次インタフェース]
特定の例では、PCIe TLPで送信されるTビットの設定をシグナリングするために、IOMMU120は、HIOP(例えば、そのOTC406)によってオンチップシステムファブリック(OSF)エージェント(例えば、IRP408)に転送される信号ide_tを出力する。特定の例では、IOMMU120は、メッセージが信頼される無効化キュー(例えば、図3Aの信頼される無効化キュー306)からの記述子に応答して生成された場合にide_tを1に設定し、「通常の」無効化キュー(例えば、図3Aの無効化キュー304)からの記述子に応答して生成されたメッセージにはide_tを0に設定する。
特定の例では、二次インタフェースは、メッセージシグナルド割り込み(MSI)書き込み、例えば、特殊なメモリ範囲への書き込みを生成するためにも使用され、それらの書き込みに対するallow_tdx_kidは0であると仮定される。
特定の例では、二次インタフェースは、無効化ウェイト記述子の「ステータスアドレス」フィールドによって指定されたアドレスに、無効化ウェイト記述子の「ステータスデータ」フィールドを取得した値を格納するための書き込みを生成するためにも用いられる。特定の例では、それらの書き込みのためのallow_tdx_kidは、無効化ウェイト記述子がどの無効化キュー(通常または信頼される)から処理されたかにかかわらず、常に0である。
[メモリインタフェース]
特定の例では、メモリサブシステムへのアクセスの物理アドレスがTDM(例えば、TDX)KeyIDを有することができるかどうかを示すために、allow_tdx_kidと呼ばれる新たな信号(値)が、このインタフェースに追加される。
特定の例では、メモリインタフェースは、(i)通常および信頼される変換テーブルから生じるページウォークの一部として変換テーブルエントリへのフェッチのために、(ii)第1および第2レベルページング構造においてアドレス/データ(A/D)ビット更新をアトミックに実行するために、(iii)posted割り込み記述子(PID)に対するアトミックな更新を実行するために、(iv)通常および信頼される無効化キューから無効化記述子へのフェッチのために、および/または、(v)ページ要求キューへの書き込みのために、IOMMU120によって用いられる。
特定の例では、1つまたは複数のレジスタが、本明細書の開示を実装するために用いられる。例えば、(例えば、制御)値を1つまたは複数のレジスタに格納する命令をデコードおよび実行することによって、である。
図5は、本開示の例による、IOMMU(例えば、およびVT-d)レジスタ500のテーブルである。図5において、信頼ドメインのための入/出力拡張を実装するために用いられる特定のアーキテクチャレジスタは太字で示され、マイクロアーキテクチャレベルレジスタの追加は下線で描かれる。特定の例では、レジスタのアクセスポリシーグループは、例えば、演算のTDX_MODEにある場合、セキュリティのために変更される。特定の例では、IOMMUは、信頼されるルートテーブルアドレスレジスタ(T_RTADDR_REG)316、信頼される無効化キューテイルレジスタ(T_IQT_REG)310A(例えば、TDX-IO用)、信頼される無効化キューヘッドレジスタ(T_IQH_REG)310B(例えば、TDX-IO用)、信頼される無効化キューアドレスレジスタ(T_IQA_REG)310C(例えば、TDX-IO用)、IOMMU120をTDM(例えば、TDX)モードに設定する(またはそれから外す)ためのレジスタ(TDX_MODE_REG)314A、および/またはIOMMUにコマンドを発信するため(例えば、TDXモードに配置するまたはそれから外すため)のインタフェースとしてのコマンドレジスタ(ECMD_REG)314Bを含む。特定の例では、「標準」コマンド、レジスタなどは、信頼ドメインのために用いられない、例えば、信頼ドメインのための入/出力拡張を実装するために用いられない、コマンド、レジスタなどを指す。
図6は、例えば、信頼されるルートテーブル(例えば、図3Bの信頼される変換テーブル324の信頼される拡張ルートテーブル)へのベースアドレスを格納するための、本開示の例による信頼されるルートテーブルアドレスレジスタ316の例示フォーマットである。
図7は、例えば、信頼される無効化キュー(例えば、図3Aの信頼される無効化キュー306)の先頭(例えば、複数の要素の先頭要素)のインジケーションを格納するための、本開示の例による信頼される無効化キューヘッドレジスタ310Bの例示フォーマットである。
図8は、例えば、信頼される無効化キュー(例えば、図3Aの信頼される無効化キュー306)の末尾(例えば、複数の要素の末尾要素)のインジケーションを格納するための、本開示の例による信頼される無効化キューテイルレジスタ310Aの例示フォーマットである。
図9は、例えば、信頼される無効化キュー(例えば、図3Aの信頼される無効化キュー306)のベースアドレス(例えば、およびサイズ)のインジケーションを格納するための、本開示の例による信頼される無効化キューアドレスレジスタ310Cの例示フォーマットである。
図10は、例えば、IOMMUが信頼ドメインモード(例えば、TDX-mode)であるかどうかを制御する(例えば、コマンド)値を格納する、本開示の例による信頼ドメイン(例えば、信頼ドメイン拡張(TDX))モードレジスタ314Aの例示フォーマットである。
図11は、本開示の例による信頼ドメインIO機能列挙を有する(例えば、プロセッサおよび/またはIOMMU内のレジスタの1つとしての)拡張機能レジスタ1100の例示フォーマットであり、例えば、列挙要求に応答して、ハードウェアが信頼ドメイン拡張-入/出力(IO)サポート(例えば、TDX-IO)機能をサポートしているか(例えば、かつ、それらのレジスタが予約されている(例えば、無効である)かどうか)を示す値(複数可)を格納することである。
特定の例では、ECAP_REG.TDXIO1100が0の場合にレジスタ(例えば、信頼されるIOMMUレジスタ310A~310Cおよび316)が予約されてゼロ値(RsvdZ)を格納することを実装が保証できなければ、それらのレジスタの書き込み(適用可能であれば)がIOMMU動作の観点から実際上ノーオペレーション(No-Ops)であることが保証されるべきである。
特定の例では、次のすべての条件/依存性が満たされる場合にのみ、ECAP_REG.TDXIOは1である。(i)ECAP_REG.TDXIOのデフォルト・ハードウェア・リセットが1であること、(ii)ECAP_REG.SMTS=1(スケーラブルモード・サポートの存在)であること、(iii)有効ホスト・アドレス幅(例えば、最大物理プラットフォーム・アドレス(MAX_PA)でのハードウェア自律幅(HAW)デフィーチャ包含後)が52ビットであること、(iv)TDX-IOデフィーチャ(下記参照)がオフであること。特定の例では、TDX-IO機能は、(例えば、プロセッサおよび/またはIOMMUのレジスタの1つとしての)機能デフィーチャレジスタのビット(例えば、TDX-IOのビット3)を用いて完全にデフィーチャされることが可能である。
特定の例では、レジスタのセットは、適切な成功/失敗およびそれにより障害報告を伴う、例えば、TDX-IOのSET_TDX_MODEコマンドをサポートするための以下のように拡張を伴う、IOMMUへのコマンド送信(例えば、「拡張コマンド」と呼ばれる)のために用いられる。
図12は、例えば、IOMMUが拡張コマンドレジスタ(ECMD_REG)314Bを介して発行されたコマンドに関する状態(複数可)を報告するための、本開示の例による(例えば、プロセッサおよび/またはIOMMU内のレジスタの1つとしての)拡張コマンドステータスレジスタ1200の例示フォーマットである。
図13は、本開示の例による、例えば、列挙要求に応じて、ハードウェアが(例えば、SET_TDX_MODEを)サポートするかどうかを示す値(複数可)を拡張コマンドレジスタ(ECMD_REG)314Bを通じて格納する、(例えば、プロセッサおよび/またはIOMMU内のレジスタの1つとしての)拡張コマンド機能レジスタ1300の例示フォーマットである。
図14は、例えば、IOMMUが信頼ドメインモード(例えば、TDX-mode)のために実行する演算(複数可)、例えば、IOMMUをTDX-IOモードに(または、TDX-IOモードを外すよう)設定すること、を制御する(例えば、コマンド)値を格納する、本開示の例による拡張コマンドレジスタ314Bの例示フォーマットである。
図15は、例えば、進行中であるか完了したコマンド、例えば、IOMMUが拡張コマンドレジスタ(ECMD_REG)314Bを介して発行されたコマンドに関する応答を報告するための、本開示の例による(例えば、プロセッサおよび/またはIOMMU内のレジスタの1つとしての)拡張コマンド応答レジスタ1500の例示フォーマットである。
[VTベースアドレスレジスタ(VTBAR)内のレジスタ(例えば、SEAM_OS_Wポリシーグループレジスタ)の配置]
特定の例では、レジスタは、保護メモリイネーブルレジスタ(PMEN)、保護ローメモリベースレジスタ(PLMBASE)、保護ローメモリリミットレジスタ(PLMLIMIT)、保護ハイメモリベースレジスタ(PHMBASE)、及び保護ハイメモリリミットレジスタ(PHMLIMIT)を含む。特定の例では、PMENは、設定された場合、PLMBASE、PLMLIMT、PHMBASE、PHMLIMITレジスタを介するDMA保護メモリ領域のセットアップを可能にする。
特定の例では、PMEN、PLMBASE、PLMLIMIT、PHMBASE、およびPHMLIMITレジスタは、HIOPでシャドウされ、例えば、HIOPは、IOMMUのIOMMU SAIポリシーグループレジスタもシャドウする。特定の例では、IOMMU SAIポリシーグループレジスタは、IOMMU VTBARのオフセット0xF10に位置する。
特定の例では、TDX-IOは、それらのレジスタを(例えば、SEAM_OS_Wポリシーグループによってカバーされる)保護レジスタにする。
特定の例では、HIOPシャドウロジックに新たなポリシーグループを追加する必要があることを避け、HIOPシャドウロジックが(例えば、0xF10とは)異なるオフセットを用いる必要があることを避けるために、IOMMUは読み出しアクセス制御(RAC)、書き込みアクセス制御(WAC)、制御ポリシー(CP)のSEAM_OS_Wポリシーグループレジスタを、特定のオフセット(例えば、それぞれオフセット0xF10、0xF18、および0xF20)で位置付けする。
[グローバルコマンドレジスタ-処理セットルートテーブルポインタ(SRTP)ビット]
特定の例では、グローバルコマンドレジスタ(GCMD_REG)314Cを介してセットルートテーブルポインタ(SRTP)ビットを設定することは、非IO VT-d仕様定義から変化しない、例えば、レガシルートポインタを内部コピーにラッチ(例えば、内部/外部ドレイン、グローバル無効化などを伴う)し、予想外のレジスタ値などから他の好ましくない影響が生じないようにする。
特定の例では、TDXモードの場合、信頼ドメインマネージャ(例えば、TDX-モジュール)は、GCMD_REG(SEAMに制御される書き込みアクセス)およびにRTADDR_REGのオーナシップ取り、信頼ドメインマネージャ(例えば、TDX-モジュール)が、例えば、VMMによってプログラムされるRTADDR_REGがスケーラブルモードまたはアボートのいずれかに設定される変換モードを持つことを保証するようにする。
[拡張コマンド(ECMD)追加-「SET_TDX_MODE」コマンドのサポート]
特定の例では、拡張コマンド(ECMD)レジスタ(例えば、図3A~3Bの拡張コマンドレジスタ(ECMD_REG)314B)は、適用可能なエラー/互換性チェックに基づくS/Wへの対応する応答(例えば、成功/失敗)フィードバックとともにIOMMU120への新たなVT-dコマンド発信インタフェースである。これは、コマンドがエラーチェックにかかわらず常に実行され、最終的にデータパス動作における障害/フォルト検出を呼び出す他のIOMMU状態に対する好ましくない影響を含む他のレジスタベースのコマンド(例えば、GCMDを介するSRTP)と比較して、H/WとS/Wの間のよりきれいな契約である。特定の例では、ソフトウェアは、IOMMUによる誤動作/互換性のないコマンド処理について更新される。
特定の例では、(例えば、IOMMUのための様々な性能監視(Perfmon)コマンドに対するアーキテクチャサポートを伴い)、ECMDは、IOMMU上でTDXモードを有効化/無効化するための新たなコマンド「Set TDX Mode」(例えば、アーキテクチャ的)をサポートする。特定の例では、フロー(例えば、SRTP、セット・インタラプト・リマップ・テーブル・ポインタ(SIRTP)など)がECMDに転送される。特定の例では、ECMDレジスタ(コマンドを発信するために用いられる)は、SEAM_OS_Wポリシーグループに配置される。特定の例では、ECMDに加えて、GCMD、保護メモリ範囲(PMR)関連レジスタ、およびRTADDRがSEAM_OS_Wポリシーグループに配置される。
図16は、本開示の例による、処理セット信頼ドメイン(例えば、信頼ドメイン拡張(TDX))モードビット1600の例示フォーマットである。
特定の例では、IOMMUにおけるECMD_REG.CMD=SET_TDX_MODEコマンド処理(例えば、すべての関連する動作を伴う)は、以下の疑似コード(ここで//はコメント/注釈の前にある)のようになる。
IF ERESP.IP = 1
GOTO END // NOP if any ECMD op is ongoing.
ERESP.IP = 1 TM = TDX_MODE_REG.TM
T_TTM = T_RTADDR.TTM
TTM = RTADDR.TTM
If any GCMD command (SRTP, SIRTP, SFL, WBF) or PMR Enabling flow in progress in IOMMU.
ERESP.SC = OTHER_COMMAND_ACTIVE
ERESP.IP = 0
GOTO END
IF ECMD_CAP0_REG.STDXS == 0 // If SET_TDX_MODE not supported
ERESP.SC = UNSUPPORTED COMMAND
ERESP.IP = 0
GOTO END
// If request is to set TDX mode, then command fails if
// a) Trusted and untrusted TTMs are not equal
// b) Both TTMs are not in Scalable mode and in Abort DMA mode
IF ((TM == 1) & (TTM != T_TTM || TTM == LEGACY || TTM === EXTENDED )
ERESP.SC = SET TDX MODE CMD FAIL
ERESP.IP = 0
GOTO END
// Success Path
Block i/p primary interface and flush pipeline to make IOMMU empty.
Globally invalidate TLB, caches.
Latch register below values:
HARDWARE_T_RTADDR.RTA = T_RTADDR.RTA
HARDWARE_RTADDR.RTA = RTADDR.RTA
HARDWARE_T_RTADDR.TTM = T_TTM
HARDWARE_RTADDR.TTM = TTM
HARDWARE_TDX_MODE.L = TDX_MODE_REG.L
HARDWARE_TDX_MODE.TM = TM
Perform interface unblock and External Drain for GO and wait for Ack.
// Update state of TM in ESTS0_REG.TM
ESTS0_REG.TM = HARDWARE_TDX_MODE.TM
ERESP.SC = SUCCESS
ERESP.IP = 0
END:
特定の例では、ECMD_CAP0.STDXSはECAP_REG.TDXIOが1であることに依存する/条件とされ、例えば、TDX-IO機能がないと、Set TDX Modeコマンドのサポートはない。特定の例では、TDX-IOについて、信頼ドメインマネージャ(例えば、TDXモジュール)は、(例えば、信頼されるDMA要求変換に対する任意のテレメトリベースの攻撃を防止するために、)例えば、すべてのカウンタが無効になり、すべての構成、フィルタ、フリーズおよびオーバーフローステータスレジスタがそれらのデフォルト値に設定される結果となるECMDコマンド「RESET_PERFORMANCE_COUNTER_CONFIGURATION」を介して、TDX_MODEに移行するためのIOMMU初期化段階の一部として、パフォーマンスカウンタの構成もリセットする。
無効化キュー処理
特定の例では、TDX-IO機能をサポートするために、IOMMUは、2セットの無効化キュー(IQ)、例えば、SEAM_OS_W PGにおける、それにより演算のTDX_MODEにおけるSEAM制御における、例えば、VMMによって維持される非信頼ドメイン(例えば、「通常」)IQ(例えば、図3Aの無効化キュー304)およびアーキテクチャ上の信頼される無効化キュー(TIQ)(例えば、図3Aの信頼される無効化キュー306)を持つ。
特定の例では、TIQについて、別個のベースアドレス、先頭及び末尾ポインタがアーキテクチャ的に存在するが、関連する障害報告のためのIQ関連レジスタの1セットのみが存在する。
特定の例では、ECAP_REG.TDXIOが1である場合、IOMMUは、INT_TDX_MODE_REG.TM値とは独立して、信頼されるおよび信頼されない無効化キューの間でラウンドロビンし、例えば、ECAP_REG.TDXIOが0であれば、IOMMUは既存の信頼されないIQからのみのフェッチをデフォルトとする。
TDX-IO機能を有する特定の例では、一度にフェッチされ処理される1つのアクティブIQ(信頼されないまたは信頼される)があり、関連するフォルトがある場合、それは記録され、IQフォルト関連レジスタに従ったアクションが取られるであろう。特定の例では、MSIはVMM/ホストOSによって処理されるため、セキュリティは障害報告には関連しない。特定の例では、保留中のフォルトは、それがソフトウェアによって処理されるまで、すべてのIQ/TIQ関連処理を停止させるだろう。
特定の例では、ECAP_REG.TDXIO=1の場合のIOMMU動作は、以下のように要約されることができる。
IQA_HAS_ENTRIES = (IQH_REG != IQT_REG)
T_IQA_HAS_ENTRIES = (T_IQH_REG != T_IQT_REG)
IF ECAP_REG.TDXIO && IQA_HAS_ENTRIES && (LAST_PROCESSED_QUEUE == T_IQ || ~T_IQA_HAS_ENTRIES)
IQ_DESC_BASE = IQA_REG.IQA
IQ_OFFSET = IQH_REG.QH
IQ_DW = IQA.DW
LAST_PROCESSED_QUEUE = IQ
ELIF ECAP_REG.TDXIO && T_IQA_HAS_ENTRIES && (LAST_PROCESSED_QUEUE == IQ || ~IQA_HAS_ENTRIES)
IQ_DESC_BASE = T_IQA_REG.IQA
IQ_OFFSET = T_IQH_REG.QH
IQ_DW = T_IQA.DW
LAST_PROCESSED_QUEUE = T_IQ
ENDIF
DESC_WIDTH = IQ_DW ? 256b : 128b
Load descriptor of DESC_WIDTH from offset IQ_OFFSET in IQ at IQ_DESC_BASE
特定の例では、ハードウェアを簡略化するために、TDXモードにかかわらずラウンドロビン動作が維持される。特定の例では、ECAP_REG.TDXIO=1の場合、TDXモード=0であれば、TDX-モジュールが期待する動作/要件に従って信頼されるIQは常に空になり、したがって、適用可能であれば、最初のIF条件のみが満たされることになるだろう。信頼される変換ウォークのためのIOMMUサポート
以下、ide_t=1で入力されるリクエストのための信頼される変換/ウォークをサポートするための、特定のIOMMUにおけるアーキテクチャレベルの変更について説明する。
[キャッシュ/TLB拡張]
IOTLB
特定の例では、IOTLBは、新たなタグビット「Trusted」で拡張される。特定の例では、IOTLBが埋められる場合、このタグビットは、(ECAP_REG.TDXIO & INT_TDX_MODE_REG.TM & ide_t)に設定される。特定の例では、IOTLBが検索される場合、トランザクションの(ECAP_REG.TDXIO & INT_TDX_MODE_REG.TM & ide_t)は、Trustedビットと比較されて一致を検出する。特定の例では、IOTLBタグのパリティ生成および/または検証は、Trustedビットを含む。特定の例では、同じ挙動は、IOTLBパイプラインにおいて同様に、(例えば、マイクロアーキテクチャレベルでの)変換タイプキャッシュ(TTC)の読み出しおよび/または照合にも適用される。
[PASIDテーブルエントリキャッシュ]
特定の例では、PASIDテーブルエントリキャッシュ(PTC)は、新たなタグビット-Trustedで拡張される。特定の例では、PTCが埋められる場合、このタグビットは、(ECAP_REG.TDXIO & INT_TDX_MODE_REG.TM & ide_t)に設定される。特定の例では、PTCが検索される場合、トランザクションの(ECAP_REG.TDXIO & INT_TDX_MODE_REG.TM & ide_t)は、Trustedビットと比較されて一致を検出する。特定の例では、PTCタグのパリティ生成および検証は、Trustedビットを含むべきである。
[コンテキストエントリキャッシュ]
特定の例では、コンテキストエントリキャッシュ(CTC)は、新たなタグビット-Trustedで拡張される。特定の例では、CTCが埋められる場合、このタグビットは、(ECAP_REG.TDXIO & INT_TDX_MODE_REG.TM & ide_t)に設定される。特定の例では、CTCが検索される場合、トランザクションの(ECAP_REG.TDXIO & INT_TDX_MODE_REG.TM & ide_t)は、TDXビットと比較されて一致を検出する。特定の例では、CTCタグのパリティ生成および検証は、Trustedビットを含むべきである。特定の例では、タグ/ルックアップアレイがCTCと共有される場合、これは同様にTTCに論理的に拡張する。
[ルートテーブル選択]
特定の例において、IOTLBミスにおいて(例えば、マッピングがIOTLBにないので、変換テーブルからウォークが実行される)、IOMMUが演算を実行するためにルートテーブルにアクセスする場合、IOMMUは、関連する入力される要求の(ECAP_REG.TDXIO & INT_TDX_MODE_REG.TM & ide_t)に基づいて、HARDWARE_RTADDR_REGおよびHARDWARE_T_RTADDR_REGの間で選択する。特定の例では、TDXモードの場合、変換のために受信された要求がide_t==1であれば、HARDWARE_T_RTADDR_REGが選択され、その他の場合、すべての他のケースにおいてHARDWARE_RTADDR_REGが選択される。
RTADDR = (ECAP_REG.TDXIO & INT_TDX_MODE_REG.TM & ide_t)? HARDWARE_T_RTADDR_REG.RTA : HARDWARE_RTADDR_REG.RTA
[TDX-IOの信頼される変換のための新たなVT-dフォルト及び関連するチェック]
特定の例では、URはサポートされていない要求、CAはコンプリータのアボート、IRは割り込みリマッピング、NAは適用不可である。
特定の例では、(例えば、PASIDあり、または、なしで)リマッピングハードウェアが変換要求を正常に処理できなければ、データなしの変換完了が返され、例えば、リマッピングハードウェアがこのエンドポイントからの変換要求をサポートしないように構成されていれば完了時にUR(Unsupported Request)のステータスコードで返され、および/または、リマッピングハードウェアが変換要求を処理した場合にエラーが発生すれば、CA(Completer Abort)のステータスコードが返される。
[PASIDテーブルエントリウォーク-ドメインIDパーティショニング及びPGTT値の実施]
特定の例では、TDX_MODEにおいて、ドメインIDは、TD VMと非TD VMとの間でパーティショニングされる。特定の例では、非TD VMはドメインIDのビットLが0に設定されたドメインIDを使用し、TD VMはドメインIDのビットLが1に設定されたドメインIDを使用する。特定の例では、LはECAP.NDフィールドによって列挙される有効ドメインID幅の最上位ビット(MSB)である。特定の例では、ECAP.NDは(例えば、16ビット幅の)ドメインIDを列挙し(例えば、デフィーチャの責任を負わない)、したがって、LビットはそのMSB(例えば、ビット15-0のビット15)になる。特定の例では、TDXモードにおいて、ページウォークが信頼されない要求(例えば、ide_t=0の要求)に対して実行されている場合、ドメインIDビットLが1に設定されているPASIDテーブルエントリが発見されれば、それはターミナルフォルトとして扱われ、そのようなPASIDテーブルエントリは、キャッシュされない。特定の例では、これは、VMMが、信頼されないなデバイスを持つTDに割り当てられたPASIDおよびTDに割り当てられたドメインIDを悪意をもって再利用して、ドメインID、(例えば、レベル1キャッシュに対する)PASIDおよびアドレスによって検索されるレベル1/2ページング構造エントリのキャッシュヒットをトリガすることを、防止する。特定の例では、ドメインIDパーティショニングが行われるので、FL及びSLレベルキャッシュのセットに対して別個の「Trusted」ビットタグは必要ない。特定の例では、TDX-IOセキュリティのために、以下のフォルトチェックが用いられる。フォルトチェック→"ECAP_REG.TDXIO & INT_TDX_MODE.TM & ~ide_t & Domain-id[L]"であり、かつ、1であれば、TDX_MODEにおけるPASIDテーブルエントリにおいてビットLが信頼されないウォーク用に予約されているため、ターミナルフォルトを生じさせる。特定の例では、このターミナルフォルトに対するエラー報告は、予約ビットに対するエラー報告と同様である。
図17は、本開示の例による、例示エラーレポート1700の例示フォーマットである。特定の例では、特定の(例えば、VT-d)フォルトは、他のフォルトとは異なるカテゴリに格納され、例えば、SPTフォルト(例えば、その条件コード)は、スケーラブルモードPASIDテーブル(SPT)エントリで検出されるフォルト(例えば、図3Bに示される信頼される変換テーブル324内のスケーラブルモードPASIDテーブル)であり、SCTフォルト(例えば、その条件コード)は、スケーラブルモードコンテキストテーブル(SCT)エントリ(例えば、図3Bに示される信頼される変換テーブル324内のスケーラブルモード(例えば、下位)コンテキストテーブル)内で検出されるフォルトである。特定の例では、条件コードSPT.7の優先順位は、SPT.3の直後であり、SPT.4の前である。
特定の例では、以下のフォルトチェックがTDX-IOセキュリティに用いられる:
ECAP_REG.TDXIOが1の場合、TDXモードがイネーブルであり、ウォークがide_t=1であれば、PASID粒変換タイプ(PGTT)は、ある値、または、例えば010b(例えば第2レベルのみ)または011b(例えばネスト)の値である(例えば、必要がある)、それらの値(例えばそれら2つの値)のうちの1つでなければ、ターミナルフォルトを生じさせる。
図18は、本開示の例による、例示エラーレポート1800の例示フォーマットである。特定の例では、条件コードSPT.8の優先順位は、SPT.4.4の直後であり、SPT.5の前である。特定の例では、このフォルトは、動作の高堅牢性、tdx_modeの信頼される要求に対して言及されたもの以外のPGTT値でウォークする可能性を防止するために導入される(例えば、TDXモジュールの期待される動作は、信頼されるPASIDテーブルエントリにおいて第2レベルまたは入れ子としてPGTTを設定することである)。
[TDXモードにおけるページウォーク]
特定の例では、リマッピングハードウェアは、リマッピングハードウェアによってサポートされる最大DMA仮想アドレス可能性を示すフィールドのインジケーションを含む。特定の例では、最大ゲストアドレス幅(MGAW)は、(N+1)として計算され、ここでNは、このフィールドで報告される値である。例えば、48ビットMGAWをサポートするハードウェア実装は、このフィールドに47(101111b)の値を報告する。特定の例では、このフィールドの値がXであれば、2^(x+1)-1より上のアドレスへの未変換及び変換されたDMA要求は、常にハードウェアによってブロックされ、許可されたデバイスからの2^(x+1)-1より上のアドレスへの変換要求は、R=W=0でヌル変換完了データエントリを戻す。
特定の例では、特定のDMA要求に対するゲストアドレス可能性は、このフィールドを通して報告されたものと対応するページテーブル構造の調整済みゲストアドレス幅の最小値に制限され、例えば、ハードウェアによってサポートされる調整済みゲストアドレス幅はSAGAWフィールドを通して報告される。
特定の例では、実装は、プラットフォームの物理的アドレス可能性(例えば、ホストアドレス幅)に少なくとも等しいMGAWをサポートする。
特定の例では、リマッピングハードウェアは、例えば、ハードウェア実装によってサポートされる(例えば、4KB)ベースページサイズに対するページテーブルウォークのレベルを表す、(例えば、5ビットフィールド)サポートされる調整済みゲストアドレス幅(SAWAG)のインジケーションを含む。特定の例では、これらのビットのいずれかが1の値であることは、対応する調整済みゲストアドレス幅がサポートされることを示し、例えば、このフィールド内の様々なビット位置に対応する調整済みゲストアドレス幅は、以下の通りである。
0:30ビットAGAW(2レベルページテーブル)
1:39ビットAGAW(3レベルページテーブル)
2:48ビットAGAW(4レベルページテーブル)
3:57ビットAGAW(5レベルページテーブル)
4:64ビットAGAW(6レベルページテーブル)
特定の例では、ソフトウェアは、ページテーブルをセットアップするために用いられる調整済みゲストアドレス幅が、このフィールドで報告されるサポートされたゲストアドレス幅のうちの1つであることを保証する。
[SHAREDビット]
特定の例では、TDについて、最上位ビットが1に設定されたゲスト物理アドレス(GPA)は共有GPAと呼ばれ、最上位ビットが0に設定されたものはプライベートGPAである。特定の例では、SHAREDビットは以下のように評価される。 S_BIT = (PASIDTE.AW == `011b) ? 51 : 47 SHARED = ECAP_REG.TDXIO & INT_TDX_MODE_REG.TM & ide_t & GPA[S_BIT]
特定の例では、S_BIT計算は、SAGAWおよびMGAWを含む必要はない。なぜなら、別のVT-dチェックがあり、AWおよびSAGAWが互いに適合しなければ、および/または、入力GPA幅がMGAWおよびAWによって可能なものよりも大きければフォルトを発生させるだろうからである。特定の例では、期待されるS/W動作は、TDX-モジュールが、TDXモード=1に設定する前に、複数(例えば4および/または5)レベルEPTをサポートするために、機能(CAP)レジスタからSAGAWおよびMGAWを検証するであろうことである。
第1レベルページテーブル(FLPT)ウォーク中のフォルト
特定の例では、存在(P)フィールドが設定された第1レベルページングエントリ(例えば、FL-PML5E、FL-PML4E、PSビット0のFL-PDPE、PSビット0のFL-PDE)においてSHARDビットが1であることは、ターミナルフォルトとして扱われる。特定の例では、データの読み出しと書き込みにおいて、PSが1に設定されている場合、FL-PDPEは共有ビット1を持つことができる。すなわち、PSが1に設定されている場合、FL-PDEはSHARDビット1を持つことができ、1GBページをマッピングする、すなわち、FL-PTEはSHARDビット1を持つことができ、2MBページをマッピングする。特定の例では、命令フェッチについて、ページサイズ(PS)が1に設定されたFL-PDPEにおいてSHARDビットが1に設定されている場合、1GBページをマッピングし、または、PSが1に設定されたFL-PDEでは2MBページをマッピングし、FL-PTEでは、ターミナルフォルトを生じるさせる。特定の例では、このフォルトチェックは、TDがFLPTページング構造をプライベートGPAにのみ配置することができ、データ読み出し/書き込みは共有メモリに対して行うことができるが、命令フェッチはできないことを強制する。特定の例では、フォルトはターミナルフォルトであり、(例えば、リーフおよび非リーフの両方のページング構造について)セットフォルトログ(SFL)SFL.11としてシグナリングされる。
o フォルトログポインタを設定/更新するためにフォルトログポインタを設定/更新する。特定の例では、TDXモードがイネーブルにされない場合、または、ウォークがide_t==0のトランザクションのためである場合、共有(SHARED)は常に0に評価されるだろう。
図19は、本開示の例による、第1レベルページテーブル(FLPT)ウォーク中のフォルトに対する例示エラーレポート1900の例示フォーマットである。特定の例では、スケーラブルモード第1レベル(SFL)SFL.11の優先順位は、SFL.3の直後である。特定の例では、このフォルトは、不正なTD動作を捕捉するために、例えば、コア側アクセスを回避するために、導入される。
[第2レベルページテーブル(SLPT)ウォーク中のフォルト]
特定の例では、SLPTウォークは、ウォークが共有(SHARED)を1に設定したGPAで開始された場合、すべての第2レベル(SL)ページング構造エントリ(例えば、ルートSLページング構造エントリおよび変換の最終アドレスを除く)がTDプライベートKeyIDを持たない(例えば、持ってはならない)ことを要求する。特定の例では、このフォルトチェックは、VMMがSLページング構造エントリまたはTDプライベートメモリにマッピングされるSLページングからの最終変換を見つけることを防止する。特定の例では、TDX_MODE_REG.Lは、TDX KeyIDをエンコードするために予約されるHAW-1で開始する物理アドレスビットの数を示す。例えば、HAWが46でLが6である場合、ビット45:40は、もし物理アドレスにおいて設定されていれば、物理アドレスがプライベートキーIDを持つことを示す。特定の例では、これは以下のように評価される。
KM = 0
FOR K = 0; K < L; K++
KM[HAW-1-K] = 1
ENDFOR
IF ( SHARED == 1 &&
((SL-PML5E[51:40] & KM && slpt_walk_state == PROCESS_PML5E) ||
((SL-PML4E[51:40] & KM && slpt_walk_state == PROCESS_PML4E) ||
((SL-PDPE[51:40] & KM && slpt_walk_state == PROCESS_PDPE) ||
(SL-PDE[51:40] & KM && slpt_walk_state == PROCESS_PDE) ||
(SL-PTE[51:40] & KM && slpt_walk_state == PROCESS_PTE)) THEN SSL.7 fault
図20は、本開示の例による、第2レベルページテーブル(SLPT)ウォーク中のフォルトに対する例示エラーレポート2000の例示フォーマットである。特定の例では、スケーラブルモード第2レベル(SSL)SSL.7の優先順位は、SSL.3の直後である。特定の例では、このフォルトは、TDX-IOセキュリティを実現するために導入される。
[ALLOW_TDX_KID GENERATION]
特定の例では、IOMMUは、HIOP内のKeyIDフィルタ(例えば、図4のキーフィルタ404および/またはキーフィルタ410)に依存して、IOMMUがメモリ要求にTDX KeyIDを有することを許可しない限り、TDX KeyIDでのその変換構造をアクセスするIOMMU自体からのアクセス、または、デバイスからのメモリ要求をアボートする。特定の例では、これは、IOMMUからHIOPへのallow_tdx_kidと呼ばれるロジック信号によって実現される。特定の例では、物理的に、allow_tdx_kidは、例えば、マイクロアーキテクチャの概念として、異なるインタフェースで、例えば、一次出力のresp_allow_tdx_kid、メモリインタフェースのmem_allow_tdx_kid、および、二次インタフェースの対応する追加で、複数の物理信号インスタンス化として実装される。
特定の例では、allow_tdx_kid値は、アクセスが以下のようにTDX KeyIDを持つことができるかどうかを示すために、以下のようにIOMMUによってドライブされる。
1.IOMMUは、TDX-IOMMUアーキテクチャにおいてプライベートメモリへにはなり得ないメモリ要求に対してallow_tdx_kidを0に設定する。これは、以下のメモリ要求を含む。
・割り込みリマップテーブルエントリ
・Posted割り込み記述子
・ページリクエストキューエントリ
・レガシモードルートエントリ
・レガシモードのコンテキストエントリ
・割り込みアドレス範囲-0xFEEx_xxxx-への書き込み(割り込み書込を生成したデバイスについて、例えば、割り込みリマッピングが有効、無効またはバイパスのいずれであっても、これらのallow_tdx_kidが0であるのに対して)
・IOMMU自体によって生じた割り込み書き込み(フォルトイベント、ページ要求イベント、無効化イベントなどと同様に)
・無効化ウェイト記述子処理における状態書き込み(記述子が処理されたキューにかかわらず)
2.TDX_MODEが1であり、変換がide_t==1の要求である場合、IOMMU変換構造は常にプライベートメモリに存在する。これらの要求に対してallow_tdx_kidは、TDX_MODE & ide_tに設定される。これは、以下の構造へのメモリ要求を含む。
・スケーラブルモードルートエントリ
・スケーラブルモードコンテキストエントリ
・スケーラブルモードPASIDディレクトリエントリ
・スケーラブルモードPASIDテーブルエントリ
・第1レベルページング構造エントリ
3.IOMMU変換構造は、ウォークに関連付けられたSHAREDビット(ide_t=1およびTDX_MODE=1の場合)に基づいて、プライベートまたは共有メモリ内にあることができる。ここで、allow_tdx_kidは、フォルトチェック(SSL.7)がIOMMU SLページウォーカで共有SL構造におけるプライベートkeyIDを検出するために用いられるので、TDX_MODE&ide_tとして設定される(例えば、これを捕捉するためにHIOP keyIDフィルタに依存しない。allow_tdx_kid=1は、プライベートまたは共有keyIDを許可する)
・第2レベルのページング構造エントリ
4.信頼される無効化キューは常にプライベートメモリ内にある。したがって、IOMMUは、TDX_MODEにおける以下のアクセスに対して、allow_tdx_kidを1にドライブする:
・信頼される無効化キューエントリ
図21は、本開示の例による、変換構造2100のテーブルである。
[信頼ドメインマネージャ(例えば、TDX-モジュール)の制約および要件]
特定の例では、VMMは、例えば、TDX-モジュールの機能を呼び出すことによって、IOMMUの範囲内でTDX-IO可能デバイス(複数可)を検出した場合、IOMMUの制御を信頼ドメインマネージャ(例えば、TDX-モジュール)に渡す。以下のセクションでは、プログラミングシーケンスの例と、TDXモジュールが遵守する(例えば、必要がある)制約を指定する。
1.IOMMUをTDXモードに配置
2.SEAM_OS_WのレジスタのVMMプログラミング
3.信頼される変換テーブルの構成
4.IOMMUのためのTDXモードのクリア
[IOMMUをTDXモードに配置]
1.SEAM_OS_WポリシーグループからBOOT_BIOS、POST_BOOTおよびSMM SAIを削除する。例えば、SEAM_OS_WポリシーグループレジスタをSEAM SAIに制限させる。
2.次のいずれかのエラーが検出された場合、失敗する。
a.ECAP_REG.TDXIOが0 - TDX-IO機能がサポートされていない。
b.CAP_REG.SAGAW[10]が0 - 4レベルページテーブルがサポートされていない。
c.CAP_REG.SAGAW[11]が0であり、CPU EPTが5レベルページテーブルをサポートする - CPUが5レベルページテーブルをサポートする場合、IOMMUも5レベルページテーブルをサポートする(例えば、必要がある)。
d.CAP_REG.SAGAW[11]が1であり、CAP_REG.MGAWが52ビットでない場合
e.CAP_REG.SAGAW[10]が1であり、CAP_REG.MGAWが48ビットより小さい場合
f.ERESP_REG.IPが1である場合 - 拡張コマンドが進行中である。
g.ESTS0_REG.TMSが1 - IOMMUが既にTDXモードにある。
h.GSTS_REG.TESが0 - IOMMU変換はイネーブルにされない。
i.GSTS_REG.QIESが0 - キューされた無効化はイネーブルにされない。
j.PMEN_REG.EPMまたはPMEN_REG.PRSが0でない - 保護メモリ範囲は無効である(例えば、必要がある)。
k.ECAP_REG.TDXIOが0 - TDXモードがサポートされていない。
l.RTADDR_REG.TTMがスケーラブルモードでない(例えば、01bでない)。
3.T_RTADDR_REGを、信頼される変換テーブルルートページのアドレスおよび変換テーブルモードで構成する。例えば、ルートテーブルアドレスは挿入されたTDX KeyIDを持つ(例えば、必要がある)、および/または、TTMがスケーラブルモード(例えば、01b)に設定される(例えば、必要がある)。
4.T_IQA_REGを信頼される無効化キューベースページアドレスで構成する。例えば、このアドレスは挿入されたTDX KeyIDを持つ(例えば、必要がある)、および/または、T_IQA_REGが256ビット記述子幅で構成される(例えば、必要がある)。
5.T_IQT_REGをT_IQH_REGの値に初期化する。例えば、末尾を先頭に等しくして、空のキューを示させる。
6.TDX_MODE_REG.LをIA32_TME_ACTIVATE MSRからのTDX_RESERVED_KEYID_BITSフィールドの値で構成し、TDX_MODE_REG.TMを1にセットする。
7.ECMD_REG.CMD = SET_TDX_MODEを書き込む。
8.コマンド完了、すなわち、ERSP_REG.IPが0になるのを待機する。この段階はVMMによって行われることができることに留意すること。
9.ESTS0_REG.TMSを読み出し、それが1であることをチェックすることにより、TDXモードがイネーブルであったことを検証する。
10.ECMD_REG.CMD=RESET_PERFMON_COUNTER_CONFIGURATIONを書き込む。11.コマンド完了、すなわち、ERSP_REG.IPが0になるのを待機する。この段階はVMMによって行われることに留意すること。このシーケンスが完了すると、特定の例では、TDXモードがイネーブルされ、ルートおよび信頼されるルートアドレスレジスタがIOMMUハードウェアにラッチされる。特定の例では、TDX_MODE_REG.Lは、TDXモードがイネーブル化されると、変更されない(例えば、必要がある)。例えば、Lを変更することは、IOMMUで未定義の動作をもたらし、TDXセキュリティに影響する可能性がある。
[VMMからのSEAM_OS_Wレジスタアクセス]
特定の例では、TDXモードがイネーブルの場合、SEAM_OS_WレジスタはVMMによって書き込み可能ではなく、例えば、VMMには、必要に応じて以下のレジスタをプログラムするアプリケーションプログラミングインタフェース(API)機能が提供される。
RTADDR_REG - 以下の制限を強制する。
○ VMMによって提供されるアドレス値は、TDX KeyIDを持っていない。
○ VMMによって提供されるTTM値はスケーラブルモードである(例えば、必要がある)。
GCMD_REG - 以下の制限を強制する。
○ キュー無効化を無効にできない。
○ Translation Enableを0に設定することはできない。
[信頼される変換テーブルの構成]
1.CAP_REG.NDを読み出し、IOMMUがサポートするドメインを決定する。サポートされるドメインIDのMSBは、Lビットである。例えば、ドメインID幅が16ビットであれば、Lビットは15ビットである。この構成は、IOMMUをTDXモードに配置する一部として、読み出されキャッシュされることが可能である。
2.信頼される変換テーブルのコンテキストエントリを構成する場合は以下の制限を遵守すること。
DTE - Device TLB Enable - 0 - GNR IOMMUはセキュアATSをサポートしない。
PRE - Page Request Enable - 0 - GNR IOMMUはセキュアページ要求をサポートしない。
3.PASIDテーブルエントリを信頼される変換テーブルに構成する場合、以下の制限を遵守すること。
DIDフィールドのLビットを1に設定する。
アドレス幅(AW)を010b(4レベル)または011(5レベル)のいずれかに設定する。
PGTTを010bに設定する(第2レベル変換のみ)。
4.信頼されるPASIDテーブルエントリに構成されるSLPTについて以下の制限を遵守すること。
・TDに割り当てられたHKIDをセキュアEPTエントリに格納する(例えば、図3BのTD secEPT)。これらは、CPU PMHによっては消費されないが、IOMMUによって消費される。
・VMMが、プライベートEPT PML4(例えば、4レベルEPTがイネーブルされている場合)またはEPT PML5(例えば、5レベルEPTがイネーブルされている場合)を、次のレベルの共有EPTページング構造(例えば、図3BのTD sharedEPT)に構成することを可能にする。VMMから提供されたアドレスがTDX KeyIDを持っていないことを確認する。
5.TDがPASIDまたはデバイスインタフェースを受け付けた場合のみ、信頼される変換テーブルのPASIDテーブルエントリを存在させる。
[TDXモードのクリア]
特定の例では、VMMは、IOMMU TDXモードがクリアされることを要求し得、例えば、TDXモジュールは以下の順序に従う。
1.以下の条件が検出された場合フェイルする。
a.ESTS0_REG.TMSが0 - IOMMUがTDXモードでない。
b.T_IQH_REGがT_IQT_REGと等しくない - 無効化が進行中である。
c.信頼される変換テーブルに有効なマッピングがある。
d.ERESP_REG.IPが1 - 進行中の拡張コマンドがある。
2.次の信頼されるレジスタを0、すなわちそれらのリセットされたデフォルト値に設定する。
a.T_RTADDR_REG
b.T_IQA_REG
c.TDX_MODE_REG - LとTMの両方が0に設定される。
3.ECMD_REG.CMD=SET_TDX_MODEに設定する。
4.BOOT_BIOS、POST_BOOTおよびSMM SAIを、SEAM_OS_Wポリシーグループに追加する。
5.コマンド完了、例えば、ERSP_REG.IPが0になること、を待機する。この段階はVMMによって行われることに留意すること。特定の例では、このシーケンスの完了時にTDXモードが無効にされる。
図22は、本開示の例による、入/出力デバイスからの信頼ドメインの保護メモリのダイレクトメモリアクセスの要求を処理する方法の動作2200を示すフロー図である。動作2200(または本明細書に記載される他の処理、または変形、および/またはそれらの組み合わせ)のいくつかまたはすべては、本明細書で実装される信頼ドメインマネージャおよび/またはIOMMU、および/または実行可能命令で構成される1つまたは複数のコンピュータシステムの制御下で実行され、ハードウェアまたはそれらの組み合わせによって1つまたは複数のプロセッサ上で集合的に実行するコード(例えば、実行可能命令、1つまたは複数のコンピュータプログラム、または1つまたは複数のアプリケーション)として実装される。コードは、例えば、1つまたは複数のプロセッサによって実行可能な命令を備えるコンピュータプログラムの形で、コンピュータ可読記憶媒体に格納される。コンピュータ可読記憶媒体は、非一時的なものである。いくつかの例では、動作2200の1つまたは複数の(または、すべて)は、他の図のIOMMU120(例えば、および/または信頼ドメインマネージャ101)によって実行される。
動作2200は、ブロック2202において、ハードウェアプロセッサコアの信頼ドメインマネージャによって、保護メモリの領域を有する各々の信頼ドメインとして、1つまたは複数のハードウェア分離仮想マシンを管理することを含む。動作2200は、ブロック2204において、入/出力デバイスから、ハードウェアプロセッサコアと入/出力デバイスとの間に結合された入/出力メモリ管理ユニット(IOMMU)回路に、信頼ドメインの保護メモリのダイレクトメモリアクセスに対する要求を送信することをさらに含む。動作2200は、ブロック2206において、入/出力デバイスが信頼ドメインの信頼されるコンピューティングベースにあることを示すように設定されている要求内のフィールドに応じて、IOMMU回路によって、ダイレクトメモリアクセスを可能にすることをさらに含む。
特定の例では、(例えば、IOMMU内の)(例えば、TDX-IO)レジスタは、例えば、本開示の例によるレジスタ命令を処理するための方法に従って、命令によって読み出される、および/または書き込まれる。プロセッサ(例えば、またはプロセッサコア)は、例えば、ソフトウェアから命令を実行する要求を受信することに応答して、方法の動作を実行し得る。動作は、(例えば、コマンドニーモニックに対応する命令オペコードを有する)命令のフェッチ、デコードされた命令への命令のデコード、命令に関連するデータの取得、(任意選択で)デコードされた命令の実行のスケジューリング、レジスタを設定、したがってTDX-IOコマンドの機能を制御するためにデコードされた命令の実行、および、実行された命令の結果のコミットを行うことによる、「TDX-IO」命令の処理、を含み得る。
上記で使用され得る例示的なアーキテクチャ、システムなどを以下で詳細に説明する。アクセラレータのためのジョブのエンキューを生じさせ得る例示的な命令フォーマットを以下に詳述する。
開示される技術の少なくともいくつかの例は、以下の例を参照して説明することができる。
例1.
保護メモリの領域を有する各々の信頼ドメインとして1つまたは複数のハードウェア分離された仮想マシンを管理する信頼ドメインマネージャを備えるハードウェアプロセッサコアと、
前記ハードウェアプロセッサコアと入/出力デバイスとの間に結合された入/出力メモリ管理ユニット(IOMMU)回路であって、前記IOMMU回路は、前記入/出力デバイスからの信頼ドメインの保護メモリのダイレクトメモリアクセスに対する要求に対して、前記入/出力デバイスが前記信頼ドメインの信頼されるコンピューティングベース内にあることを示すように前記要求のフィールドが設定されていることに応じて、前記ダイレクトメモリアクセスを可能にする、IOMMU回路と
を備える装置。
例2.
前記要求の前記フィールドは、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)規格に従ったプレフィックスの1つまたは複数のビットのセットである
例1に記載の装置。
例3.
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路は、前記信頼ドメインの前記保護メモリの物理アドレスが前記信頼ドメインの秘密鍵を持つことが可能であるというインジケーションを生成する
例1に記載の装置。
例4.
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路は、前記信頼ドメインの前記保護メモリの物理アドレスが、前記信頼ドメインの共有鍵および前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタを持つことが可能であるというインジケーションを生成する
例1に記載の装置。
例5.
前記要求の前記フィールドが設定されることに応じて、前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの信頼されるデータ構造にアクセスする
例1に記載の装置。
例6.
前記要求の前記フィールドが設定されていないことに応じて、前記IOMMU回路は、前記仮想マシンモニタによって管理される仮想アドレスから物理アドレスへのマッピングのデータ構造にアクセスし、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの前記信頼されるデータ構造にアクセスしない
例5に記載の装置。
例7.
前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタではなく前記信頼ドメインマネージャは、前記信頼ドメインの前記保護メモリの1つまたは複数のブロックの無効化のインジケーションを信頼される無効化キューに格納させることが許可される
例1に記載の装置。
例8.
前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによってアクセス可能である信頼されるルートテーブルポインタレジスタを備える
例1に記載の装置。
例9.
ハードウェアプロセッサコアの信頼ドメインマネージャによって、保護メモリの領域を有する各々の信頼ドメインとして1つまたは複数のハードウェア分離された仮想マシンを管理する段階と、
入/出力デバイスから、前記ハードウェアプロセッサコアと前記入/出力デバイスとの間に結合された入/出力メモリ管理ユニット(IOMMU)回路に、信頼ドメインの保護メモリのダイレクトメモリアクセスの要求を送信する段階と、
前記IOMMU回路によって、前記入/出力デバイスが前記信頼ドメインの信頼されるコンピューティングベース内にあることを示すように前記要求のフィールドが設定されていることに応じて、前記ダイレクトメモリアクセスを可能にする段階と
備える方法。
例10.
前記要求の前記フィールドは、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)規格に従ったプレフィックスの1つまたは複数のビットのセットである
例9に記載の方法。
例11.
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路が、前記信頼ドメインの前記保護メモリの物理アドレスが前記信頼ドメインの秘密鍵を持つことが可能であるというインジケーションを生成する段階
をさらに備える例9に記載の方法。
例12.
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路が、前記信頼ドメインの前記保護メモリの物理アドレスが、前記信頼ドメインの共有鍵および仮想マシンモニタを持つことが可能であるというインジケーションを生成する段階
をさらに備える例9に記載の方法。
例13.
前記要求の前記フィールドが設定されることに応じて、前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの信頼されるデータ構造にアクセスする段階
をさらに備える例9に記載の方法。
例14.
前記要求の前記フィールドが設定されていないことに応じて、前記IOMMU回路が、前記仮想マシンモニタによって管理される仮想アドレスから物理アドレスへのマッピングのデータ構造にアクセスし、前記入/出力変換ルックアサイドバッファが、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの前記信頼されるデータ構造にアクセスしない段階
をさらに備える例13に記載の方法。
例15.
前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタではなく前記信頼ドメインマネージャに、前記信頼ドメインの前記保護メモリの1つまたは複数のブロックの無効化のインジケーションを、信頼される無効化キューに格納することを許可する段階
をさらに備える例9に記載の方法。
例16.
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路の信頼されるルートテーブルポインタレジスタにアクセスし、前記要求の前記フィールドが設定されていないことに応じて、前記IOMMU回路の前記信頼されるルートテーブルポインタレジスタにアクセスしない段階
をさらに備える例9に記載の方法。
例17.
保護メモリの領域を有する各々の信頼ドメインとして1つまたは複数のハードウェア分離された仮想マシンを管理する信頼ドメインマネージャを備えるハードウェアプロセッサコアと、
前記ハードウェアプロセッサコアに結合された入/出力デバイスと、
前記ハードウェアプロセッサコアと前記入/出力デバイスとの間に結合された入/出力メモリ管理ユニット(IOMMU)回路であって、前記IOMMU回路は、前記入/出力デバイスからの信頼ドメインの保護メモリのダイレクトメモリアクセスに対する要求に対して、前記入/出力デバイスが前記信頼ドメインの信頼されるコンピューティングベース内にあることを示すように前記要求のフィールドが設定されていることに応じて、前記ダイレクトメモリアクセスを可能にする、IOMMU回路と
を備えるシステム。
例18.
前記要求の前記フィールドは、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)規格に従ったプレフィックスの1つまたは複数のビットのセットである
例17に記載のシステム。
例19.
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路は、前記信頼ドメインの前記保護メモリの物理アドレスが前記信頼ドメインの秘密鍵を持つことが可能であるというインジケーションを生成する
例17に記載のシステム。
例20.
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路は、前記信頼ドメインの前記保護メモリの物理アドレスが、前記信頼ドメインの共有鍵および仮想マシンモニタを持つことが可能であるというインジケーションを生成する
例17に記載のシステム。
例21.
前記要求の前記フィールドが設定されることに応じて、前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの信頼されるデータ構造にアクセスする
例17に記載のシステム。
例22.
前記要求の前記フィールドが設定されていないことに応じて、前記IOMMU回路は、前記仮想マシンモニタによって管理される仮想アドレスから物理アドレスへのマッピングのデータ構造にアクセスし、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの前記信頼されるデータ構造にアクセスしない
例21に記載のシステム。
例23.
前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタではなく前記信頼ドメインマネージャは、前記信頼ドメインの前記保護メモリの1つまたは複数のブロックの無効化のインジケーションを信頼される無効化キューに格納させることが許可される
例17に記載のシステム。
例24.
前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによってアクセス可能である信頼されるルートテーブルポインタレジスタを備える
例17に記載のシステム。
さらに別の例では、装置は、ハードウェアプロセッサによって実行された場合、ハードウェアプロセッサに本明細書で開示される任意の方法を実行させるコードを格納するデータストレージデバイスを備える。装置は、詳細な説明に記載されたものと同じであってよい。方法は、詳細な説明に記載されたものと同じであってよい。
命令セットは、1つまたは複数の命令フォーマットを含んでよい。所与の命令フォーマットは、とりわけ、実行されるオペレーション(例えば、オペコード)および当該オペレーションが実行されるオペランドおよび/または他のデータフィールド(例えば、マスク)を指定する様々なフィールド(例えば、ビットの数、ビットの位置)を定義してよい。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義によってさらに分類される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてよく(含まれるフィールドは、典型的には同じ順序であるが、少なくともいくつかは、含まれるフィールドが少ないので、異なるビット位置を有する)、および/または、異なって解釈される特定のフィールドを有するように定義されてよい。したがって、ISAの各命令は、所与の命令フォーマット(および、定義されている場合には、当該命令フォーマットの命令テンプレートのうちの所与の1つ)を用いて表され、オペレーションおよびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコード、ならびにそのオペコードを指定するオペコードフィールドおよびオペランド(ソース1/デスティネーションおよびソース2)を選択するオペランドフィールドを含む命令フォーマットを有し、命令ストリーム内でこのADD命令が発生すると、特定のオペランドを選択するオペランドフィールド内に特定の内容が含まれる。Advanced Vector Extensions(AVX)(AVX1およびAVX2)と称され、ベクトル拡張(VEX)コーディングスキームを使用するSIMD拡張のセットが、リリースおよび/または公開されている(例えば、インテル(登録商標)64およびIA-32アーキテクチャソフトウェア開発者マニュアル、2018年11月を参照、および、インテル(登録商標)アーキテクチャ命令セット拡張プログラミングリファレンス、2018年10月を参照のこと)。
[例示的な命令フォーマット]
本明細書に記載される命令の例は、異なるフォーマットで具現化され得る。さらに、例示的なシステム、アーキテクチャおよびパイプラインを以下で詳述される。命令の例は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されてもよいが、詳述されたものに限定されない。
[汎用ベクトル向け命令フォーマット]
ベクトル向け命令フォーマットとは、ベクトル命令に適した命令フォーマットのことである(例えば、ベクトル演算に特有の特定のフィールドが存在する)。ベクトルおよびスカラ演算の両方がベクトル向け命令フォーマットによりサポートされる例が説明されるが、代替例は、ベクトル向け命令フォーマットによるベクトル演算のみを用いる。
図23A~23Bは、本開示の例による汎用ベクトル向け命令フォーマットおよびそれらの命令テンプレートを示すブロック図である。図23Aは、本開示の例による汎用ベクトル向け命令フォーマットおよびその複数のクラスA命令テンプレートを示すブロック図であり、図23Bは、本開示の例による汎用ベクトル向け命令フォーマットおよびその複数のクラスB命令テンプレートを示すブロック図である。具体的には、汎用ベクトル向け命令フォーマット2300には、クラスA命令およびクラスB命令テンプレートが定義され、その両方が非メモリアクセス2305の命令テンプレートおよびメモリアクセス2320の命令テンプレートを含む。ベクトル向け命令フォーマットの文脈における汎用という用語は、いずれの特定の命令セットにも結び付けられていない命令フォーマットを指す。
本開示の例では、ベクトル向け命令フォーマットが、32ビット(4バイト)または64ビット(8バイト)データ要素幅(またはサイズ)を有する以下の64バイトのベクトルオペランド長(またはサイズ)(したがって、64バイトのベクトルは、16個のダブルワードサイズの要素または代替的に8クワッドワードサイズの要素のいずれかから構成される)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する32バイトのベクトルオペランド長(またはサイズ)、および、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する16バイトのベクトルオペランド長(またはサイズ)をサポートすることが説明され、代替例は、より多い、より少ないまたは異なるデータ要素幅(例えば、128ビット(16バイト)のデータ要素幅)を有する、より多い、より少ないおよび/または異なるベクトルオペランドサイズ(例えば、256バイトのベクトルオペランド)をサポートしてよい。
図23AにおけるクラスA命令テンプレートは、1)非メモリアクセス2305の命令テンプレート中に示される非メモリアクセス、フルラウンド制御タイプ演算2310命令テンプレート、および非メモリアクセス、データ変換タイプ演算2315の命令テンプレート、ならびに2)メモリアクセス2320の命令テンプレート中に示されるメモリアクセス、一時的2325の命令テンプレート、およびメモリアクセス、非一時的2330の命令テンプレートを含む。図23BのクラスB命令テンプレートは、1)非メモリアクセス2305の命令テンプレート中に示される非メモリアクセス、ライトマスク制御、部分ラウンド制御型オペレーション2312の命令テンプレート、および非メモリアクセス、ライトマスク制御、VSIZE型オペレーション2317の命令テンプレート、ならびに2)メモリアクセス2320の命令テンプレート中に示されるメモリアクセス、ライトマスク制御2327の命令テンプレートを含む。
汎用ベクトル向け命令フォーマット2300は、以下に列挙される以下のフィールドを図23A~23B中に示される順序で含む。
フォーマットフィールド2340:このフィールド内の特定の値(命令フォーマット識別子値)は、ベクトル向け命令フォーマット、したがって命令ストリーム内のベクトル向け命令フォーマット内の命令の発生を一意に識別する。そのため、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットには不要であるという意味において任意選択である。
ベース演算フィールド2342:その内容は異なるベース演算を区別する。
レジスタインデックスフィールド2344:その内容は、直接またはアドレス生成を通じて、レジスタ内またはメモリ内にあっても、ソースおよびデスティネーションオペランドの位置を指定する。それらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)のレジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一例では、Nは最大3つのソースおよび1つのデスティネーションレジスタであり得るが、代替例は、より多いかまたは少ないソースおよびデスティネーションレジスタをサポートしてもよい(例えば、最大2つのソースをサポートし、それらのソースのうちの1つがデスティネーションとしても機能してもよく、最大3つのソースをサポートして、それらのソースのうちの1つがデスティネーションとしても機能してもよく、最大2つのソースおよび1つのデスティネーションをサポートしてもよい)。
修飾子フィールド2346:その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットの命令の発生を、メモリアクセスを指定しない命令と区別する、すなわち、非メモリアクセス2305命令テンプレートとメモリアクセス2320命令テンプレートとを区別する。メモリアクセス演算は、メモリ階層に対して読み出しおよび/または書き込みを行う(場合によっては、レジスタ内の値を使用してソースアドレスおよび/またはデスティネーションアドレスを指定する)が、非メモリアクセス演算はこれを行わない(例えば、ソースおよびデスティネーションはレジスタである)。一例では、このフィールドは、メモリアドレス計算を実行する3つの異なる態様の間でも選択するが、代替例は、より多い、少ない、または異なる態様のメモリアドレス計算を実行する方法をサポートし得る。
拡張演算フィールド2350:その内容は、ベース演算に加えて、様々な異なる演算のうちのどの1つの演算が実行されるべきかを区別する。このフィールドはコンテキスト固有である。本開示の一例において、このフィールドは、クラスフィールド2368、アルファフィールド2352、およびベータフィールド2354に分割される。拡張演算フィールド2350は、共通の演算グループが、2個、3個または4個の命令の代わりに、単一の命令の中で実行されることを可能にする。
スケールフィールド2360:その内容は、メモリアドレス生成のために(例えば、2scale×インデックス+ベースを使用するアドレス生成のために)インデックスフィールドの内容のスケーリングを可能にする。
変位フィールド2362A:その内容は、メモリアドレス生成の一部として(例えば、2scale×インデックス+ベース+変位を使用するアドレス生成用に)使用される。
変位係数フィールド2362B(変位係数フィールド2362Bの真上の変位フィールド2362Aの並置は、一方または他方が使用されることを示すことに留意されたい):その内容は、アドレス生成の一部として使用され、それは、メモリアクセスのサイズ(N)によってスケーリングされるべき変位係数を指定する。Nは、(例えば、2scale×インデックス+ベース+スケーリングされた変位を使用するアドレス生成用の)メモリアクセスにおけるバイト数である。冗長下位ビットは無視され、したがって、実効アドレスの計算に使用されるべき最終変位を生成するために、変位係数フィールドの内容はメモリオペランドの合計サイズ(N)と乗算される。Nの値は、(本明細書において後述される)フルオペコードフィールド2374およびデータ操作フィールド2354Cに基づいて、ランタイムにプロセッサハードウェアによって決定される。変位フィールド2362Aおよび変位係数フィールド2362Bは、それらが非メモリアクセス2305の命令テンプレートには用いられない、および/または、異なる例がそれら2つのうちの1つのみを実装してよい、またはいずれも実装しなくてよいという意味において任意選択である。
データ要素幅フィールド2364:その内容は、(いくつかの例ではすべての命令に、他の例においてはいくつかの命令のみに)いくつかのデータ要素幅のうちのどの1つのデータ要素幅が使用されるべきかを区別する。このフィールドは、1つのデータ要素幅のみがサポートされる場合、および/またはオペコードの何らかの態様を使用してデータ要素幅がサポートされる場合には必要とされないという意味で、任意選択的である。
ライトマスクフィールド2370:その内容は、データ要素位置ベースで、デスティネーションベクトルオペランド内のそのデータ要素位置がベース演算および追加演算の結果を反映するか否かを制御する。クラスA命令テンプレートがマージ処理-ライトマスク処理をサポートするが、クラスB命令テンプレートはマージ処理およびゼロライトマスク処理の両方をサポートする。マージングする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベース演算および追加演算により指定された)任意の演算の実行中に更新から保護されることを可能にする。他の一例では、対応するマスクビットが0であるデスティネーションの各要素の古い値を保持する。対照的に、ゼロ化する場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベース演算および追加演算により指定された)任意の演算の実行中にゼロ化されることを可能にする。一例において、対応するマスクビットが0値を有する場合、デスティネーションの要素は、0に設定される。この機能のサブセットは、実行されるオペレーションのベクトル長(すなわち、変更される要素のうち、最初から最後の1つまでのスパン)を制御する能力である。しかしながら、変更される要素が連続している必要はない。したがって、ライトマスクフィールド2370は、ロード、ストア、算術、ロジックなどを含む、部分ベクトル演算を可能にする。ライトマスクフィールド2370の内容が用いられるライトマスクを含むいくつかのライトマスクレジスタのうちの1つを選択する(したがって、ライトマスクフィールド2370の内容は、実行対象のそのマスク処理を間接的に識別する)本開示の例が説明されるが、代替例では、代わりにまたは追加的に、マスクライトフィールド2370の内容が実行されるマスク処理を直接指定することを可能にする。
即値フィールド2372:その内容は即値の指定を可能にする。このフィールドは、即値をサポートしない汎用ベクトル向けフォーマットの実装において存在しなく、即値を用いない命令中に存在しないという意味で任意選択である。
クラスフィールド2368:その内容は異なるクラスの命令を区別する。図23A~23Bに関連して、このフィールドの内容は、クラスAおよびクラスB命令との間で選択する。図23A~23Bでは、特定の値がフィールド内に存在することを示すために、角丸四角形が使用されている(例えば、それぞれ図23A~23Bにおけるクラスフィールド2368のクラスA 2368AおよびクラスB 2368B)。
[クラスAの命令テンプレート]
クラスAの非メモリアクセス2305の命令テンプレートの場合、アルファフィールド2352はRSフィールド2352Aとして解釈され、その内容は、異なる拡張オペレーションタイプのうちどれが実行されるべきかを区別し(例えば、ラウンド2352A.1およびデータ変換2352A.2が非メモリアクセス、ラウンドタイプオペレーション2310および非メモリアクセス、データ変換タイプ演算2315命令テンプレートに対してそれぞれ指定される)、ベータフィールド2354は、指定されたタイプの演算のどれが実行されるべきかを区別する。非メモリアクセス2305の命令テンプレートには、スケールフィールド2360、変位フィールド2362A、および変位スケールフィールド2362Bは存在しない。
[非メモリアクセス命令テンプレート―フルラウンド制御タイプ演算]
非メモリアクセスフルラウンド制御タイプ演算2310命令テンプレートでは、ベータフィールド2354はラウンド制御フィールド2354Aとして解釈され、その内容は静的なラウンディングを提供する。説明される本開示の例において、ラウンド制御フィールド2354Aは、全浮動小数点例外抑制(SAE)フィールド2356およびラウンド演算制御フィールド2358を含み、代替例では、それらの概念の両方を同じフィールドにエンコードすることをサポートしてもよく、または、それらの概念/フィールドの一方または他方のみを有してよい(例えば、ラウンド演算制御フィールド2358のみを有してよい)。
SAEフィールド2356:その内容は、例外イベント報告を無効化すべきか否かを区別する。SAEフィールド2356の内容が、抑制が有効化されたことを示す場合、所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない。
ラウンド演算制御フィールド2358:その内容は、ラウンディング演算グループのうちどの1つを実行すべきかを区別する(例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め)。したがって、ラウンド演算制御フィールド2358は、命令ベースでラウンドモードを変更することを可能にする。プロセッサがラウンドモードを指定するための制御レジスタを含む本開示の一例において、ラウンド演算制御フィールド2350の内容は、そのレジスタ値を上書きする。
[非メモリアクセス命令テンプレート―データ変換タイプ演算]
非メモリアクセスデータ変換タイプ演算2315命令テンプレートでは、ベータフィールド2354はデータ変換フィールド2354Bとして解釈され、その内容は、いくつかのデータ変換のうちどの1つが実行されるべきかを区別する(例えば、データ変換なし、スウィズル、ブロードキャスト)。
クラスAのメモリアクセス2320命令テンプレートの場合、アルファフィールド2352はエビクションヒントフィールド2352Bとして解釈され、その内容は、エビクションヒントのうちどれが使用されるべきかを区別し(図23Aでは、メモリアクセス、一時的2325命令テンプレートおよびメモリアクセス、非一時的2330命令テンプレートのために一時的2352B.1および非一時的2352B.2がそれぞれ指定される)、他方でベータフィールド2354はデータ操作フィールド2354Cとして解釈され、その内容は、いくつかのデータ操作オペレーション(プリミティブとしても知られる)のうちどの1つが実行されるべきかを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)。メモリアクセス2320命令テンプレートは、スケールフィールド2360、および任意選択で、変位フィールド2362Aまたは変位スケールフィールド2362Bを含む。
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、実際に転送される要素を、ライトマスクとして選択されたベクトルマスクの内容によって指示して、データ要素単位の形式でメモリとの間でデータを転送する。
[メモリアクセス命令テンプレート一時的]
一時的データとは、キャッシュによる利益を得るのに十分早く再利用される可能性が高いデータである。しかしながらこれはヒントであり、異なるプロセッサが、ヒント全体を無視することを含む異なる態様でこれを実装してよい。
[メモリアクセス命令テンプレート―非一時的]
非一時的データとは、レベル1キャッシュでのキャッシュの利益を受けるのに十分早く再利用される可能性が低いデータであり、エビクションのために優先権が与えられるべきである。しかしながらこれはヒントであり、異なるプロセッサが、ヒント全体を無視することを含む異なる態様でこれを実装してよい。
[クラスBの命令テンプレート]
クラスBの命令テンプレートの場合、アルファフィールド2352はライトマスク制御(Z)フィールド2352Cとして解釈され、その内容は、ライトマスクフィールド2370によって制御されたライトマスク処理がマージングであるべきかゼロ化であるべきか区別する。
クラスBの非メモリアクセス2305の命令テンプレートの場合、ベータフィールド2354の一部はRLフィールド2357Aとして解釈され、その内容は、異なる拡張オペレーションタイプのうちどれが実行されるべきかを区別し(例えば、ラウンド2357A.1およびベクトル長(VSIZE)2357A.2は、非メモリアクセス、ライトマスク制御、部分ラウンド制御型オペレーション2312命令テンプレートおよび非メモリアクセス、ライトマスク制御、VSIZE型オペレーション2317命令テンプレートに対してそれぞれ指定される)、ベータフィールド2354の残りは、指定されたタイプの演算のどれが実行されるべきかを区別する。非メモリアクセス2305の命令テンプレートには、スケールフィールド2360、変位フィールド2362A、および変位スケールフィールド2362Bは存在しない。
非メモリアクセス、ライトマスク制御、部分ラウンド制御型オペレーション2310命令テンプレートでは、ベータフィールド2354の残りはラウンド演算フィールド2359Aとして解釈され、例外イベント報告は無効化される(所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない)。
ラウンド演算制御フィールド2359A:ラウンド演算制御フィールド2358と同様に、その内容は、ラウンディング演算グループのうちどの1つを実行すべきかを区別する(例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め)。したがって、ラウンド演算制御フィールド2359Aは、命令ベースでラウンドモードを変更することを可能にする。プロセッサがラウンドモードを指定するための制御レジスタを含む本開示の一例において、ラウンド演算制御フィールド2350の内容は、そのレジスタ値を上書きする。
非メモリアクセス、ライトマスク制御、VSIZE型オペレーション2317命令テンプレートでは、ベータフィールド2354の残りはベクトル長フィールド2359Bとして解釈され、その内容は、いくつかのデータベクトル長のうちのどの1つが実行されるべきかを区別する(例えば、128、256、または512バイト)。
クラスBのメモリアクセス2320命令テンプレートの場合、ベータフィールド2354の一部はブロードキャストフィールド2357Bとして解釈され、その内容は、ブロードキャスト型データ操作オペレーションが実行されるべきか否かを区別し、ベータフィールド2354の残りはベクトル長フィールド2359Bとして解釈される。メモリアクセス2320命令テンプレートは、スケールフィールド2360、および任意選択で、変位フィールド2362Aまたは変位スケールフィールド2362Bを含む。
汎用ベクトル向け命令フォーマット2300に関連して、フルオペコードフィールド2374は、フォーマットフィールド2340、ベース演算フィールド2342およびデータ要素幅フィールド2364を含むように図示されている。フルオペコードフィールド2374がそれらのフィールドのうちすべてを含む一例が示されているが、それらのフィールドのすべてをサポートしない例においては、フルオペコードフィールド2374は、それらのすべてより少ないフィールドを含む。フルオペコードフィールド2374は、オペレーションコード(オペコード)を提供する。
拡張演算フィールド2350、データ要素幅フィールド2364、およびライトマスクフィールド2370は、それらの機能が汎用ベクトル向け命令フォーマットにおいて命令ベースで指定されることを可能にする。
ライトマスクフィールドおよびデータ要素幅フィールドの組み合わせは、異なるデータ要素幅に基づいてマスクが適用されることを可能にするという点で、型付き命令を作成する。
クラスAおよびクラスB内で見出される様々な命令テンプレートは、異なる状況で有益である。本開示の例のいくつかにおいて、複数の異なるプロセッサまたはプロセッサ内の複数の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートしてよい。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよく、主にグラフィックスおよび/または科学的(スループット)コンピューティング向けのコアは、クラスAのみをサポートしてよく、両方向けのコアは、両方をサポートしてよい(勿論、コアは本開示の範囲内にあり、両方のクラスからのテンプレートおよび命令の何らかの組み合わせを有するが、両方のクラスからのすべてのテンプレートおよび命令を有するわけではない)。単一のプロセッサが複数のコアを含んでもよく、それらのすべてが同じクラスをサポートするか、またはそれらの中の異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックスおよび汎用コアを有するプロセッサでは、主にグラフィックスおよび/または科学コンピューティング向けのグラフィックスコアのうち1つはクラスAのみをサポートしてよく、汎用コアのうちの1つまたは複数は、クラスBのみをサポートする汎用コンピューティング向けのアウトオブオーダ実行およびレジスタリネーミングを有する高性能汎用コアであってもよい。別個のグラフィックスコアを有していない別のプロセッサは、クラスAおよびクラスBの両方をサポートするもう1つの汎用インオーダまたはアウトオブオーダコアを含んでよい。勿論、1つのクラスからの複数の機能は、本開示の異なる例における他のクラスで実装されてもよい。高水準言語で書かれたプログラムは、1)実行のためにターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、または2)すべてのクラスの命令の異なる組み合わせを使用して書かれた代替ルーチンを有し、現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行すべきルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式に変換される(例えば、ジャストインタイムコンパイルまたは静的コンパイル)。
[例示的な特定ベクトル向け命令フォーマット]
図24A~24Bは、本開示の例による例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図24A~24Bは、位置、サイズ、解釈およびフィールド順序に加え、それらのフィールドのいくつかの値を指定するという意味で特有な特定ベクトル向け命令フォーマット2400を示す。特定ベクトル向け命令フォーマット2400は、x86命令セットを拡張するために使用されてもよく、したがって、いくつかのフィールドは、既存のx86命令セットおよびその拡張(例えば、AVX)で使用されるフィールドと同様または同じである。このフォーマットは、拡張を有する既存のx86命令セットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドと整合したままである。図23A~23Bからのフィールドが図24A~24Bのどのフィールドにマップされるかが示される。
本開示の例では、例示を目的として汎用ベクトル向け命令フォーマット2300との文脈で特定ベクトル向け命令フォーマット2400に関連して説明されているが、本開示は、特許請求の範囲で請求されたものを除いて、特定ベクトル向け命令フォーマット2400に限定されないことを理解されたい。例えば、汎用ベクトル向け命令フォーマット2300は、様々なフィールドについて様々な可能なサイズを想定しているが、特定ベクトル向け命令フォーマット2400は、特定サイズのフィールドを有するように図示されている。具体的な例を目的として、データ要素幅フィールド2364は、特定ベクトル向け命令フォーマット2400において、1ビットフィールドとして示されているが、本開示は、そのように限定されることはない(すなわち、汎用ベクトル向け命令フォーマット2300は、他のサイズのデータ要素幅フィールド2364が想定される)。
汎用ベクトル向け命令フォーマット2300は、図24Aに示される順序で以下に列挙される以下のフィールドを含む。
EVEXプレフィックス(バイト0-3)2402:4バイト形式でエンコードされる。
フォーマットフィールド2340(EVEXバイト0、ビット[7:0])-第1のバイト(EVEXバイト0)は、フォーマットフィールド2340であり、それは、0x62(本開示の一例において、ベクトル向け命令フォーマットを区別するために用いられる一意な値)を含む。
第2から第4のバイト(EVEXバイト1~3)は、特定の機能を提供するいくつかのビットフィールドを含む。
REXフィールド2405(EVEXバイト1、ビット[7‐5])は、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]‐R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]‐X)および2357BEXバイト1、ビット[5]‐B)から構成される。EVEX.R、EVEX.X、およびEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能性を提供し、1の補数形式を用いてエンコードされる。例えば、ZMM0は1111Bとしてエンコードされ、ZMM15は0000Bとしてエンコードされる。命令の他のフィールドは、当該技術分野で知られているようにレジスタインデックスの下位3ビットをエンコードし(rrr、xxx、およびbbb)、これにより、EVEX.R、EVEX.XおよびEVEX.Bを追加することによってRrrr、Xxxx、およびBbbbが形成されてよい。
REX'フィールド2310:これは、REX'フィールド2310の第1の部分であり、拡張32レジスタセットの上位16または下位16のいずれかをエンコードするのに用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]―R')である。本開示の一例において、このビットは、以下に示される他のものと共に、ビット反転形式で格納されることにより、リアルオペコードバイトは62であるが、(後述の)MOD R/MフィールドにおいてMODフィールドの値11を受け付けない(周知のx86の32ビットモードにおける)BOUND命令から区別するが、本開示の代替例は、このビットおよび以下に示される反転形式の他のビットをストアしない。下位16個のレジスタのエンコードには、1の値を用いる。換言すると、EVEX.R'、EVEX.Rおよび他のフィールドの他のRRRを組み合わせて、R'Rrrrが形成される。
オペコードマップフィールド2415(EVEXバイト1、ビット[3:0]-mmmm):その内容は、暗黙に示される先頭オペコードバイト(0F、0F 38または0F 3)をエンコードする。
データ要素幅フィールド2364(EVEXバイト2、ビット[7]-W):記号EVEX.Wによって表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットデータ要素または64ビットデータ要素のいずれか)を定義するために用いられる。
EVEX.vvvv2420(EVEXバイト2、ビット[6:3]-vvvv)-EVEX.vvvvの役割は、以下を含んでよい:1)EVEX.vvvvは、反転(1の補数)形式で指定される第1のソースレジスタオペランドをエンコードし、2またはそれより多くのソースオペランドを有する命令に対して有効である。2)EVEX.vvvvは、特定のベクトルシフトに対して1の補数形式で指定されるデスティネーションレジスタオペランドをエンコードする。または、3)EVEX.vvvvは、いずれのオペランドもエンコードしなく、当該フィールドは予約され、1111bを含むべきである。したがって、EVEX.vvvvフィールド2420は、反転(1の補数)形式で格納された第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に依存して、追加の異なるEVEXビットフィールドは、指定子のサイズを32個のレジスタに拡張するために用いられる。
EVEX.U2368クラスフィールド(EVEXバイト2、ビット[2]-U):EVEX.U=0の場合、これは、クラスAまたはEVEX.U0を示す。EVEX.U=1の場合、これは、クラスBまたはEVEX.U1を示す。
プレフィックスエンコードフィールド2425(EVEXバイト2、ビット[1:0]-pp):ベース演算フィールドに追加ビットを提供する。EVEXプレフィックスフォーマットにおけるレガシSSE命令にサポートを提供することに加え、これはまた、SIMDプレフィックスのコンパクト化の利益を有する(SIMDプレフィックスを表わすために1バイトを要求する代わりに、むしろEVEXプレフィックスは2ビットのみを要求する)。一例において、レガシフォーマットおよびEVEXプレフィックスフォーマットの両方において、SIMDプレフィックス(66H、F2H、F3H)を使用するレガシSSE命令をサポートすべく、それらのレガシSIMDプレフィックスは、SIMDプレフィックスエンコードフィールドにエンコードされる。それらのレガシSIMDプレフィックスは、デコーダのPLAに提供される前に、ランタイムにレガシSIMDプレフィックスに拡大される(よって、PLAは、変更なしで、それらのレガシ命令のレガシおよびEVEXフォーマットの両方を実行できる)。より新しい命令はEVEXプレフィックスエンコードフィールドの内容をオペコード拡張として直接使用できるにもかかわらず、特定の例は整合性をもたせるために同様に拡大するが、それらのレガシSIMDプレフィックスによって異なる意味が指定されることが可能になる。代替例は、2ビットSIMDプレフィックスエンコードをサポートするように、したがって拡張を必要としないように、PLAを再設計してよい。
アルファフィールド2352(EVEXバイト3、ビット[7];EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.ライトマスク制御およびEVEX.Nとしても知られ、また、αを用いて示される):前述したように、このフィールドは、コンテキスト固有である。
ベータフィールド2354(EVEXバイト3、ビット[6:4]-SSS;EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られ、また、βββを用いて示される):前述したように、このフィールドは、コンテキスト固有である。
REX'フィールド2310:これは、REX'フィールドの残部であり、拡張32レジスタセットの上位16または下位16のいずれかをエンコードするために用いられ得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]-V')である。このビットは、ビット反転形式で格納される。下位16個のレジスタのエンコードには、1の値を用いる。換言すると、EVEX.V'、EVEX.vvvvを組み合わせることにより、V'VVVVが形成される。
ライトマスクフィールド2370(EVEXバイト3、ビット[2:0]-kkk):前述の通り、その内容は、ライトマスクレジスタ内のレジスタのインデックスを指定する。本開示の一例において、特定の値EVEX.kkk=000は、特定の命令に用いられるライトマスクが存在しないことを示唆する特別な挙動を有する(これは、すべてのものに対して物理的に組み込まれるライトマスク、または、マスク処理ハードウェアをバイパスするハードウェアの使用を含む様々な態様で実装され得る)。
リアルオペコードフィールド2430(バイト4)はオペコードバイトとしても知られる。オペコードの一部は、このフィールドで指定される。
MOD R/Mフィールド2440(バイト5)は、MODフィールド2442、Regフィールド2444、およびR/Mフィールド2446を含む。前述の通り、MODフィールド2442の内容は、メモリアクセス演算および非メモリアクセス演算間を区別する。Regフィールド2444の役割は、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードすること、または、オペコード拡張として扱われ、いかなる命令オペランドをエンコードするためにも用いられないこと、という2つの状況に要約できる。R/Mフィールド2446の役割は以下を含んでよい。つまり、メモリアドレスを参照する命令オペランドをエンコードすること、またはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードすることである。
スケーリング、インデックス、ベース(SIB)バイト(バイト6):前述の通り、スケールフィールド2350の内容は、メモリアドレス生成に使用される。SIB.xxx2454およびSIB.bbb2456:それらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関連して既に言及されている。
変位フィールド2362A(バイト7-10):MODフィールド2442が10を含む場合、バイト7-10は、変位フィールド2362Aであり、これはレガシ32ビット変位(disp32)と同じく機能し、バイト粒度で機能する。
変位係数フィールド2362B(バイト7):MODフィールド2442が01を含む場合、バイト7は変位係数フィールド2362Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)のものと同じである。disp8は、符号拡張されるので、それは-128~127バイトオフセット間のアドレス指定のみ可能である。64バイトのキャッシュラインに関しては、disp8は4つの実際に有用な値、-128、-64、0および64のみに設定可能な8ビットを使用する。多くの場合、より広いレンジが必要であるので、disp32が使用されるがしかし、disp32は4バイトを要求する。disp8およびdisp32と対照的に、変位係数フィールド2362Bはdisp8の再解釈である。変位係数フィールド2362Bを使用する場合、実際の変位は、メモリオペランドアクセス(N)のサイズで乗算された変位係数フィールドの内容によって決定される。このタイプの変位は、disp8×Nと称される。これにより、平均命令長(変位に用いられる単一バイトだが、より広いレンジを有する)を減らす。そのような圧縮された変位は、実効変位がメモリアクセスの粒度の倍数であるという仮定に基づいており、したがって、アドレスオフセットの冗長下位ビットはエンコードされる必要はない。換言すると、変位係数フィールド2362Bが、レガシx86命令セットの8ビット変位と置き換わる。したがって、変位係数フィールド2362Bは、disp8がdisp8×Nにオーバーロードされることを唯一の例外として、x86命令セットの8ビット変位と同じ方法でエンコードされる(よって、ModRM/SIBエンコードルールの変更はない)。換言すると、エンコードルールまたはエンコード長に変更はなく、ハードウェアによる変位値の解釈のみに変更がある(バイト単位のアドレスオフセットを取得するには、メモリオペランドのサイズによって変位をスケーリングする必要がある)。即値フィールド2372は前述されたように動作する。
[フルオペコードフィールド]
図24Bは、本開示の一例によるフルオペコードフィールド2374を構成する特定ベクトル向け命令フォーマット2400のフィールドを示すブロック図である。具体的には、フルオペコードフィールド2374は、フォーマットフィールド2340、ベース演算フィールド2342およびデータ要素幅(W)フィールド2364を含む。ベース演算フィールド2342は、プレフィックスエンコードフィールド2425、オペコードマップフィールド2415およびリアルオペコードフィールド2430を含む。
[レジスタインデックスフィールド]
図24Cは、本開示の一例によるレジスタインデックスフィールド2344を構成する特定ベクトル向け命令フォーマット2400のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド2344は、REXフィールド2405、REX'フィールド2410、MODR/M.regフィールド2444、MODR/M.r/mフィールド2446、VVVVフィールド2420、xxxフィールド2454、およびbbbフィールド2456を含む。
[拡張演算フィールド]
図24Dは、本開示の一例による拡張演算フィールド2350を構成する特定ベクトル向け命令フォーマット2400のフィールドを示すブロック図である。クラス(U)フィールド2368が0を含む場合、EVEX.U0(クラスA 2368A)を表し、1を含む場合は、EVEX.U1(クラスB 2368B)を表す。U=0、かつMODフィールド2442が11を含む(非メモリアクセス演算を意味する)場合、アルファフィールド2352(EVEXバイト3、ビット[7]-EH)は、rsフィールド2352Aとして解釈される。rsフィールド2352Aが1(ラウンド2352A.1)を含む場合、ベータフィールド2354(EVEXバイト3、ビット[6:4]-SSS)は、ラウンド制御フィールド2354Aとして解釈される。ラウンド制御フィールド2354Aは、1ビットのSAEフィールド2356および2ビットラウンド演算フィールド2358を含む。rsフィールド2352Aが0(データ変換2352A.2)を含む場合、ベータフィールド2354(EVEXバイト3、ビット[6:4]-SSS)は、3ビットのデータ変換フィールド2354Bとして解釈される。U=0、かつMODフィールド2442が00、01または10を含む(メモリアクセス演算を意味する)場合、アルファフィールド2352(EVEXバイト3、ビット[7]-EH)は、エビクションヒント(EH)フィールド2352Bとして解釈され、ベータフィールド2354(EVEXバイト3、ビット[6:4]-SSS)は、3ビットのデータ操作フィールド2354Cとして解釈される。
U=1である場合、アルファフィールド2352(EVEXバイト3、ビット[7]-EH)は、ライトマスク制御(Z)フィールド2352Cとして解釈される。U=1、かつMODフィールド2442が11を含む(非メモリアクセス演算を意味する)場合、ベータフィールド2354の一部(EVEXバイト3、ビット[4]-S)は、RLフィールド2357Aとして解釈され、1(ラウンド2357A.1)を含む場合、ベータフィールド2354の残り(EVEXバイト3、ビット[6-5]-S2-1)は、ラウンド演算フィールド2359Aとして解釈され、RLフィールド2357Aが0(VSIZE2357.A2)を含む場合、ベータフィールド2354の残り(EVEXバイト3、ビット[6-5]-S2-1)は、ベクトル長フィールド2359B(EVEXバイト3、ビット[6-5]-L1-0)として解釈される。U=1であり、MODフィールド2442が(メモリアクセス演算を意味する)00、01、または10を含む場合、ベータフィールド2354(EVEXバイト3、ビット[6:4]-SSS)は、ベクトル長フィールド2359B(EVEXバイト3、ビット[6-5]-L1-0)およびブロードキャストフィールド2357B(EVEXバイト3、ビット[4]-B)として解釈される。
[例示的なレジスタアーキテクチャ]
図25は、本開示の一例によるレジスタアーキテクチャ2500のブロック図である。図示される例において、512ビット幅の32個のベクトルレジスタ2510がある。それらのレジスタは、zmm0からzmm31として参照される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0~16上にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0~15上にオーバーレイされる。特定ベクトル向け命令フォーマット2400は、それらのオーバーレイされたレジスタファイルに対し、下表に示されるように動作する。
Figure 2023094536000002
換言すると、ベクトル長フィールド2359Bは、最大長さと1つまたは複数の他のより短い長さとの間から選択し、ここで、そのようなより短い長さのそれぞれは、先述の長さの半分の長さであり、ベクトル長フィールド2359Bを有していない命令テンプレートは、最大ベクトル長に対して動作する。さらに一例において、特定ベクトル向け命令フォーマット2400のクラスB命令テンプレートは、パックドもしくはスカラ単精度/倍精度浮動小数点データ、およびパックドもしくはスカラ整数データに対して動作する。スカラ演算は、zmm/ymm/xmmレジスタ内の最下位のデータ要素位置で実行される演算である。上位のデータ要素位置は、それらが命令前と同じままであるか、例に依存してゼロ化されるかのいずれかである。
ライトマスクレジスタ2515:図示された例では、各々が64ビットサイズの8つのライトマスクレジスタ(k0からk7)が存在する。代替例において、ライトマスクレジスタ2515は、16ビットのサイズである。前述したように、本開示の一例において、ベクトルマスクレジスタk0は、ライトマスクとして用いられることができず、通常k0を示すエンコードがライトマスクに用いられる場合、0xFFFFのハードワイヤライトマスクを選択することで、その命令に対するライトマスク処理を実効的に無効にする。
汎用レジスタ2525:図示された例では、メモリオペランドをアドレス指定するために既存のx86アドレッシングモードと共に使用される16個の64ビット汎用レジスタが存在する。それらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8~R15の名前で参照される。
MMXパックド整数フラットレジスタファイル2550がエイリアスされる、スカラ浮動小数点スタックレジスタファイル(x87スタック)2545:図示される例では、x87スタックは、x87命令セット拡張子を使用して32/64/80ビット浮動小数点データに対してスカラ浮動小数点演算を実行するために使用される8要素スタックである。MMXレジスタは、64ビットパックド整数データに対して演算を実行するため、ならびにMMXとXMMレジスタとの間で実行されるいくつかの演算のためにオペランドを保持するために、使用される。
本開示の代替例は、より広いまたはより狭い複数のレジスタを用いてよい。さらに、本開示の代替例は、より多くの、より少ない、または異なるレジスタファイルおよび複数のレジスタを用いてよい。
[例示的なコアアーキテクチャ、プロセッサおよびコンピュータアーキテクチャ]
プロセッサコアは、異なる態様で、異なる目的のために、異なるプロセッサにおいて実装されてよい。例えば、そのようなコアの実装は、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主にグラフィックスおよび/または科学(スループット)コンピューティング向けの専用コアを含んでよい。異なるプロセッサの実装は、1)汎用コンピューティング向けの1つまたは複数の汎用インオーダコア、および/または、汎用コンピューティング向けの1つまたは複数の汎用アウトオブオーダコアを含むCPU、および、2)主にグラフィックスおよび/または科学(スループット)向けの1つまたは複数の専用コアを含むコプロセッサを含んでよい。そのような異なるプロセッサは異なるコンピュータシステムアーキテクチャをもたらし、そのようなコンピュータシステムアーキテクチャには、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同一のパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同一のダイ上のコプロセッサ(この場合、そのようなコプロセッサは、統合グラフィックスおよび/または科学(スループット)ロジックなどの専用ロジック、または専用コアと称されることがある)、ならびに4)同一のダイ上に(アプリケーションコアまたはアプリケーションプロセッサと称されることもある)説明されたCPU、上述のコプロセッサ、および追加の機能を含んでもよいシステムオンチップが含まれてもよい。例示的なコアアーキテクチャを次に説明し、続いて、例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
[例示的なコアアーキテクチャ]
[インオーダおよびアウトオブオーダコアのブロック図]
図26Aは、本開示の例による、例示的なインオーダパイプライン、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図26Bは、本開示の例によるプロセッサに含まれる、インオーダアーキテクチャコアの例示的な例、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図26A~26Bの実線ボックスはインオーダパイプラインおよびインオーダコアを示し、破線ボックスの任意選択の追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様を説明する。
図26Aにおいて、プロセッサパイプライン2600は、フェッチステージ2602、長さデコードステージ2604、デコードステージ2606、アロケーションステージ2608、リネーミングステージ2610、スケジューリング(ディスパッチまたは発行としても知られる)ステージ2612、レジスタ読み出し/メモリ読み出しステージ2614、実行ステージ2616、ライトバック/メモリ書き込みステージ2618、例外処理ステージ2622およびコミットステージ2624を含む。
図26Bは、実行エンジンユニット2650に結合されるフロントエンドユニット2630を含むプロセッサコア2690を示し、それらの両方が、メモリユニット2670に結合される。コア2690は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドまたは代替コアタイプであり得る。さらに別の選択肢として、コア2690は、例えば、ネットワークコアもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コアまたはグラフィックスコアまたは同様のものなどの特定用途向けコアであってよい。
フロントエンドユニット2630は、デコードユニット2640に結合される命令フェッチユニット2638に結合される命令変換ルックアサイドバッファ(TLB)2636に結合される命令キャッシュユニット2634に結合された分岐予測ユニット2632を含む。デコードユニット2640(またはデコーダもしくはデコーダユニット)は、複数の命令(例えばマクロ命令)をデコードし、1つまたは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の命令からデコードされ、または他の方法でこれを反映し、またはこれから導出された他の制御信号を、出力として生成してよい。デコードユニット2640は、様々な異なるメカニズムを用いて実装されてよい。適切なメカニズムの例には、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコード読み出し専用メモリ(ROM)などが含まれるが、それらに限定されない。一例において、コア2690は、マイクロコードROM、または、特定のマクロ命令に対するマイクロコードを格納する(例えば、デコードユニット2640における、そうでなければ、フロントエンドユニット2630内の)他の媒体を含む。デコードユニット2640は、実行エンジンユニット2650内のリネーム/アロケータユニット2652に結合される。
実行エンジンユニット2650は、リタイアメントユニット2654と、1つまたは複数のスケジューラユニット2656のセットとに結合されたリネーム/アロケータユニット2652を含む。スケジューラユニット2656は、予約ステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット2656は、物理レジスタファイルユニット2658に結合されている。物理レジスタファイルユニット2658のそれぞれは、1つまたは複数の物理レジスタファイルを表し、その異なるファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態(例えば、次に実行される命令のアドレスである命令ポインタ)などのような1つまたは複数の異なるデータ型を格納する。一例では、物理レジスタファイルユニット2658は、ベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを備える。それらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供し得る。物理レジスタファイルユニット2658は、(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用いる、将来のファイル、履歴バッファおよびリタイアメントレジスタファイルを用いる、レジスタマップおよびレジスタのプールを用いるなどして)レジスタリネーミングおよびアウトオブオーダ実行が実装され得る様々な態様を示すために、リタイアメントユニット2654が重なっている。リタイアメントユニット2654および物理レジスタファイルユニット2658は、実行クラスタ2660に結合されている。実行クラスタ2660には、1つまたは複数の実行ユニット2662のセットおよび1つまたは複数のメモリアクセスユニット2664のセットが含まれる。実行ユニット2662は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に実行してよい。いくつかの例は、特定の機能または機能のセットに専用のいくつかの実行ユニットを含み得る一方、他の例は、1つのみの実行ユニット、またはすべての機能をすべてが実行する複数の実行ユニットを含み得る。特定の例は、特定のタイプのデータ/演算に対する別個のパイプラインを形成するので(例えば、それら自体のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタをそれぞれ有するスカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインであり、別個のメモリアクセスパイプラインの場合、特定の例は、このパイプラインの実行クラスタのみがメモリアクセスユニット2664を有するように実装される)、スケジューラユニット2656、物理レジスタファイルユニット2658、および実行クラスタ2660は、場合によっては複数あるように示される。別個のパイプラインが用いられる場合、それらのパイプラインのうちの1つまたは複数はアウトオブオーダ発行/実行であってよく、残りはインオーダであってよいことも理解されたい。
メモリアクセスユニット2664のセットは、レベル2(L2)キャッシュユニット2676に結合されたデータキャッシュユニット2674に結合されたデータTLBユニット2672を含む、メモリユニット2670に結合される。1つの例示的な例では、メモリアクセスユニット2664は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み得、それらの各々は、メモリユニット2670内のデータTLBユニット2672に結合される。命令キャッシュユニット2634は、メモリユニット2670内のレベル2(L2)キャッシュユニット2676にさらに結合される。L2キャッシュユニット2676は、1つまたは複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
特定の例では、プリフェッチ回路2678は、例えば、アクセスアドレスを予測し、それらのアドレスのためのデータを(例えば、メモリ2680から)キャッシュまたは複数のキャッシュに持ち込むために、データをプリフェッチするために含まれる。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン2600を実装してよい。1)命令フェッチ2638がフェッチおよび長さデコードステージ2602および2604を実行し、2)デコードユニット2640がデコードステージ2606を実行し、3)リネーム/アロケータユニット2652がアロケーションステージ2608およびリネーミングステージ2610を実行し、4)スケジューラユニット2656がスケジュールステージ2612を実行し、5)物理レジスタファイルユニット2658およびメモリユニット2670がレジスタ読み出し/メモリ読み出しステージ2614を実行し、実行クラスタ2660が実行ステージ2616を実行し、6)メモリユニット2670および物理レジスタファイルユニット2658がライトバック/メモリ書き込みステージ2618を実行し、7)様々なユニットが例外処理ステージ2622に関与してよく、8)リタイアメントユニット2654および物理レジスタファイルユニット2658がコミットステージ2624を実行する。
コア2690は、本明細書で説明された命令を含む、1つまたは複数の命令セット(例えば、(より新しいバージョンで追加されたいくつかの拡張を伴う)x86命令セット)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM Holdingsの(NEONなどの任意選択の追加拡張を伴う)ARM命令セットをサポートしてよい。一例では、コア2690は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される演算がパックドデータを使用して実行されることを可能にする。
コアはマルチスレッディング(演算またはスレッドの2つまたはそれより多い並列セットを実行)をサポートしてよく、時間スライスマルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングしているスレッドの各々に対して、単一の物理コアが論理コアを提供する)、またはそれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディングテクノロジなどにおける時間スライスフェッチおよびデコードならびにその後の同時マルチスレッディング)を含む様々な態様でサポートしてよいことを理解されたい。
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで用いられてもよいことを理解されたい。プロセッサの図示された例はまた、別個の命令およびデータキャッシュユニット2634/2674および共有L2キャッシュユニット2676を含むが、代替例は、例えば、レベル1(L1)内部キャッシュ、または複数のレベルの内部キャッシュなど、命令およびデータの両方のための単一の内部キャッシュを有してもよい。いくつかの例では、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含み得る。代替的に、キャッシュのすべてがコアおよび/またはプロセッサの外部にあってもよい。
[具体的な例示的インオーダコアアーキテクチャ]
図27A~27Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック(同じタイプおよび/または異なるタイプの他のコアを含む)のうちの1つになるであろう。論理ブロックは、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を通じて、アプリケーションに依存して、いくつかの固定機能ロジック、メモリIOインタフェースおよび他の必要なIOロジックと通信する。
図27Aは、本開示の例による、オンダイインターコネクトネットワーク2702へのその接続およびレベル2(L2)キャッシュのそのローカルサブセット2704を伴う、単一のプロセッサコアのブロック図である。一例では、命令デコードユニット2700は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ2706は、キャッシュメモリへの低レイテンシアクセスがスカラユニットおよびベクトルユニットに入ることを可能にする。(設計を簡略にするために)一例では、スカラユニット2708およびベクトルユニット2710は別個のレジスタセット(それぞれ、スカラレジスタ2712およびベクトルレジスタ2714)を使用し、それらの間で転送されたデータはメモリに書き込まれ、次にレベル1(L1)キャッシュ2706からリードバックされるが、本開示の代替例は異なる手法(例えば、単一のレジスタセットを使用するか、またはライトアウトおよびリードバックされることなしに2つのレジスタファイル間でデータを転送することを可能にする通信パスを含む)を使用してもよい。
L2キャッシュ2704のローカルサブセットは、プロセッサコアごとに1つの別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ2704の自身のローカルサブセットへの直接のアクセス経路を有する。プロセッサコアにより読み出されたデータは、L2キャッシュサブセット2704に格納され、他のプロセッサコアが固有のローカルL2キャッシュサブセットにアクセスするのと並列して、迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のL2キャッシュサブセット2704に格納され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、双方向性であり、プロセッサコア、L2キャッシュおよび他のロジックブロックなどのエージェントが、チップ内で互いに通信することを可能にする。各リングデータ経路は、方向当たり1012ビット幅である。
図27Bは、本開示の例による、図27Aのプロセッサコアの一部の拡大図である。図27Bは、L1キャッシュ2704の一部であるL1データキャッシュ2706Aと、ベクトルユニット2710およびベクトルレジスタ2714に関するさらなる詳細とを含む。具体的には、ベクトルユニット2710は16幅ベクトル処理ユニット(VPU)(16幅ALU2728を参照)であり、整数命令、単精度浮動小数点命令、および倍精度浮動小数点命令のうちの1つまたは複数を実行する。VPUは、スウィズルユニット2720を用いたレジスタ入力のスウィズル処理、数値変換ユニット2722A~Bを用いた数値変換、ならびに複製ユニット2724を用いたメモリ入力の複製をサポートする。ライトマスクレジスタ2726は、結果として生じるベクトル書き込みをプレディケートすることを可能にする。
図28は、本開示の例による、1つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよいプロセッサ2800のブロック図である。図28の実線ボックスは、シングルコア2802A、システムエージェント2810、1つまたは複数のバスコントローラユニット2816のセットを有するプロセッサ2800を示し、任意選択の追加の破線ボックスは、複数のコア2802A-N、システムエージェントユニット2810内にある1つまたは複数の統合メモリコントローラユニット2814のセット、および専用ロジック2808を有する代替のプロセッサ2800を示す。
したがって、プロセッサ2800の異なる実装は、1)専用ロジック2808が統合グラフィックスおよび/または科学(スループット)ロジック(1つまたは複数のコアを含んでよい)であり、コア2802A-Nが1つまたは複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、それら2つの組み合わせ)であるCPU、2)コア2802A-Nが、主にグラフィックスおよび/または科学(スループット)向けの多数の専用コアであるコプロセッサ、ならびに3)コア2802A-Nが多数の汎用インオーダコアであるコプロセッサを含んでよい。したがって、プロセッサ2800は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループット多集積コア(MIC)コプロセッサ(30以上のコアを含む)、組み込みプロセッサまたは同様のものなどの、汎用プロセッサ、コプロセッサ、または専用プロセッサであってよい。プロセッサは1つまたは複数のチップ上に実装され得る。プロセッサ2800は、例えば、BiCMOS、CMOS、またはNMOSなどのいくつかのプロセス技術のいずれかを用いる1つまたは複数の基板の一部であってよく、および/または当該基板上に実装されてもよい。
メモリ階層は、コア、1つまたは複数の共有キャッシュユニット2806のセット、および統合メモリコントローラユニット2814のセットに結合される外部メモリ(図示されない)内に1つまたは複数のレベルのキャッシュ2804A-2804Nを含む。共有キャッシュユニット2806のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュなどの、1つまたは複数の中間レベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはそれらの組み合わせを含んでよい。一例では、リングベースの相互接続ユニット2812が、統合グラフィックスロジック2808、共有キャッシュユニット2806のセット、およびシステムエージェントユニット2810/統合メモリコントローラユニット(複数可)2814を相互接続するが、代替例は、そのようなユニットを相互接続するのに任意の数の周知技術を用いてよい。一例では、1つまたは複数のキャッシュユニット2806とコア2802A-Nとの間でコヒーレンシが維持される。
いくつかの例では、コア2802A-Nのうち1つまたは複数は、マルチスレッドが可能である。システムエージェント2810は、コア2802A-Nを連係し動作させるそれらのコンポーネントを含む。システムエージェントユニット2810は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでよい。PCUは、コア2802A-Nおよび統合グラフィックスロジック2808の電力状態を調整するのに必要なロジックおよびコンポーネントであってよく、または当該ロジックおよび当該コンポーネントを含んでもよい。ディスプレイユニットは、1つまたは複数の外部接続されたディスプレイを駆動するためのものである。
コア2802A-Nは、アーキテクチャ命令セットに関して同種でも異種でもよい。すなわち、コア2802A-Nのうち2つまたはそれより多くは同じ命令セットを実行することが可能であってよいが、他のものはその命令セットのサブセットまたは異なる命令セットのみを実行することが可能であってもよい。
[例示的なコンピュータアーキテクチャ]
図29~32は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスの当技術分野において既知の他のシステム設計及び構成もまた好適である。概して、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込むことが可能な多種多様なシステムまたは電子デバイスが、概して好適である。
ここで図29を参照すると、本開示の一例による、システム2900のブロック図が示されている。システム2900は、1つまたは複数のプロセッサ2910、2915を含んでよく、それらはコントローラハブ2920に結合されている。一例において、コントローラハブ2920は、グラフィックスメモリコントローラハブ(GMCH)2990および入出力ハブ(IOH)2950(別個のチップ上にあり得る)を含む。GMCH2990は、メモリおよびグラフィックスコントローラを含み、それらにメモリ2940およびコプロセッサ2945が結合される。IOH2950は、入/出力(IO)デバイス2960をGMCH2990に結合する。代替的に、メモリおよびグラフィックスコントローラのうち一方または両方は、(本明細書において説明されるように)プロセッサ内に統合され、メモリ2940およびコプロセッサ2945は、プロセッサ2910と、IOH2950を有する単一チップ内のコントローラハブ2920とに直接結合される。メモリ2940は、例えば、実行された場合にプロセッサに本開示の任意の方法を実行させる、コード2940Aを含み得る。
任意選択的な性質の追加のプロセッサ2915は、図29に破線で示される。各プロセッサ2910、2915は、本明細書で説明される処理コアのうちの1つまたは複数を含んでよく、何らかのバージョンのプロセッサ2800であってよい。
メモリ2940は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこの2つの組み合わせであってよい。少なくとも一例では、コントローラハブ2920は、フロントサイドバス(FSB)などのマルチドロップバス、クイックパスインターコネクト(QPI)などのポイントツーポイントインタフェース、または同様の接続2995を介してプロセッサ2910、2915と通信する。
一例では、コプロセッサ2945は、例えば、高スループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサまたは同様のものなどの専用プロセッサである。一例では、コントローラハブ2920は統合グラフィックスアクセラレータを含んでよい。
物理リソース2910、2915の間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性などを含む幅広い価値基準に関して、様々な差異が存在し得る。
一例では、プロセッサ2910は、一般型のデータ処理オペレーションを制御する命令を実行する。命令内には、コプロセッサ命令が埋め込まれていてもよい。プロセッサ2910は、それらのコプロセッサ命令を、付属のコプロセッサ2945が実行すべきタイプの命令であると認識する。したがって、プロセッサ2910は、それらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサバスまたは他の相互接続にてコプロセッサ2945に発行する。コプロセッサ2945は、受信したコプロセッサ命令を受け取って実行する。
ここで図30を参照すると、本開示の例による、第1のより具体的で例示的なシステム3000のブロック図が示されている。図30に示されるように、マルチプロセッサシステム3000はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続3050を介して結合される第1のプロセッサ3070および第2のプロセッサ3080を含む。プロセッサ3070および3080のそれぞれは、何らかのバージョンのプロセッサ2800であってよい。本開示の一例では、プロセッサ3070および3080はそれぞれプロセッサ2910および2915であるが、コプロセッサ3038はコプロセッサ2945である。別の例では、プロセッサ3070および3080は、それぞれプロセッサ2910、コプロセッサ2945である。
プロセッサ3070および3080は、統合メモリコントローラ(IMC)ユニット3072および3082をそれぞれ含むように示されている。プロセッサ3070はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P-P)インタフェース3076および3078を含み、同様に第2のプロセッサ3080はP-Pインタフェース3086および3088を含む。プロセッサ3070、3080は、ポイントツーポイント(P-P)インタフェース3050を介し、P-Pインタフェース回路3078、3088を用いて情報を交換してよい。図30に示されるように、IMC3072および3082は、プロセッサをそれぞれのメモリ、すなわちメモリ3032およびメモリ3034に結合する。それらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの部分であってよい。
プロセッサ3070、3080は各々、個々のP-Pインタフェース3052、3054を介し、ポイントツーポイントインタフェース回路3076、3094、3086、3098を用いてチップセット3090と情報を交換してよい。チップセット3090は、任意選択で、高性能インタフェース3039を介してコプロセッサ3038と情報を交換してもよい。一例では、コプロセッサ3038は、例えば、高スループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサまたは同様のものなどの専用プロセッサである。
共有キャッシュ(図示されない)は、プロセッサまたは両方のプロセッサの外部のいずれかに含まれてよく、さらに、P-P相互接続を介してプロセッサと接続されてよく、その結果、プロセッサが低電力モードになった場合、プロセッサのローカルキャッシュ情報のいずれかまたは両方は、共有キャッシュに格納されてよい。
チップセット3090は、インタフェース3096を介して第1のバス3016に結合され得る。一例において、第1のバス3016はペリフェラルコンポーネントインターコネクト(PCI)バス、すなわちPCI Expressバス若しくは別の第3世代IO相互接続バスなどのバスであってよいが、本開示の範囲はそのようには限定されない。
図30に示されるように、様々なIOデバイス3014が、第1のバス3016を第2のバス3020に結合するバスブリッジ3018と共に、第1のバス3016に結合され得る。一例では、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータもしくはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどの1つまたは複数の追加のプロセッサ3015が第1のバス3016に結合される。一例では、第2のバス3020は、ローピンカウント(LPC)バスであり得る。一例では、例えば、キーボードおよび/またはマウス3022、通信デバイス3027、ならびに命令/コードおよびデータ3030を含み得るディスクドライブまたは他の大容量ストレージデバイスなどのストレージユニット3028を含む様々なデバイスを第2のバス3020に結合することができる。さらに、オーディオIO3024が第2のバス3020に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図30のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスアーキテクチャまたは他のそのようなアーキテクチャを実装してよい。
ここで図31を参照すると、本開示の例による、第2のより具体的な例示的なシステム3100のブロック図が示されている。図30および図31内の同様の要素には同様の参照符号が付されており、図30の特定の態様が、図31の他の態様を曖昧にするのを避けるために、図31から省略されている。
図31は、プロセッサ3070、3080が、統合メモリを含み、またIO制御ロジック(「CL」)3072および3082をそれぞれ含んでよいことを示す。したがって、CL3072、3082は統合メモリコントローラユニットを含み、かつIO制御ロジックを含む。図31は、メモリ3032、3034のみがCL3072、3082に結合されているのでなく、IOデバイス3114もまた、制御ロジック3072、3082に結合されていることを示している。レガシIOデバイス3115がチップセット3090に結合されている。
ここで図32を参照すると、本開示の例による、SoC3200のブロック図が示されている。図28と同様の要素には同様の参照符号が付されている。また、破線ボックスは、より高度なSoC上の任意選択的な機能である。図32において、相互接続ユニット(複数可)3202は、1つまたは複数のコア2802A-Nのセットおよび共有キャッシュユニット(複数可)2806を含むアプリケーションプロセッサ3210と、システムエージェントユニット2810と、バス・コントローラ・ユニット(複数可)2816と、統合メモリコントローラユニット(複数可)2814と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサおよびビデオプロセッサを含み得る1つまたは複数のコプロセッサ3220のセットと、スタティックランダムアクセスメモリ(SRAM)ユニット3230と、ダイレクトメモリアクセス(DMA)ユニット3232と、1つまたは複数の外部ディスプレイへ結合するためのディスプレイユニット3240と、に結合されている。一例では、コプロセッサ3220は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサまたは同様のものなどの専用プロセッサを含む。
本明細書に開示される(例えば、メカニズムの)例は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装手法の組み合わせで実装されてもよい。本開示の例は、少なくとも1つのプロセッサと、(揮発性および不揮発性メモリおよび/またはストレージ要素を含む)ストレージシステムと、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを備えるプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
図30に示されるコード3030などのプログラムコードは、本明細書で説明される機能を実行し、出力情報を生成する入力命令に適用されてよい。出力情報は、既知の方式で、1つまたは複数の出力デバイスに適用されてよい。本願の目的のために、処理システムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するために、高水準手続型またはオブジェクト指向プログラミング言語で実装されてもよい。プログラムコードはまた、必要に応じて、アセンブリ言語または機械語で実装され得る。実際は、本明細書に説明されるメカニズムは、範囲が、いずれの特定のプログラミング言語にも限定されない。いずれの場合でも、言語は、コンパイル型言語またはインタープリタ型言語であってよい。
少なくとも一例の1つまたは複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された代表的な命令により実装され得、命令は、機械により読み出された場合、当該機械に本明細書で説明される技術を実行させるためのロジックを生成させる。「IPコア」として知られているそのような表現は、有形の機械可読媒体に格納されてよく、論理またはプロセッサを実際に作成する製造装置にロードするために様々な顧客または製造設備に供給されてよい。
そのような機械可読記憶媒体には、ハードディスクなどの記憶媒体、フロッピディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD-ROM)、コンパクトディスク・リライタブル(CD-RW)、および光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)やスタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)などの半導体デバイス、磁気カードもしくは光カード、または電子的命令を格納するのに適した任意の他のタイプの媒体を含む、機械またはデバイスによって製造または形成された物品の非一時的な有形な構造が含まれるが、これに限定されない。
したがって、本開示の例はまた、本明細書に説明される構造体、回路、装置、プロセッサ、および/またはシステム機能を定義するハードウェア記述言語(HDL)などの命令を含むか、または設計データを含む非一時的有形機械可読媒体も含む。そのような例は、また、プログラム製品と称され得る。
[エミュレーション(バイナリ変換、コードモーフィングなどを含む)]
場合によっては、命令コンバータは、命令をソース命令セットからターゲット命令セットに変換するために用いられてよい。例えば、命令コンバータは、命令を、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用する)翻訳、モーフィング、エミュレート、またはそうでなければ変換を行って、コアによって処理される1つまたは複数の他の命令にし得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装され得る。命令コンバータは、プロセッサ上にあってもよく、プロセッサ外にあってもよく、一部がプロセッサ上にあり、かつ一部がプロセッサ外にあってもよい。
図33は、本開示の例による、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。示された例では、命令コンバータはソフトウェア命令コンバータであるが、代替的には、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組み合わせで実装されてもよい。図33は、高水準言語3302のプログラムがx86コンパイラ3304を用いてコンパイルされ、少なくとも1つのx86命令セットコアを持つプロセッサ3316によってネイティブに実行され得るx86バイナリコード3306を生成し得ることを示す。少なくとも1つのx86命令セットコアを持つプロセッサ3316は、少なくとも1つのx86命令セットコアを持つインテル(登録商標)プロセッサと実質的に同じ結果を実現するべく、(1)インテル(登録商標)x86命令セットコアの命令セットの実質的部分、または(2)少なくとも1つのx86命令セットコアを持つインテル(登録商標)プロセッサ上での実行を目的とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョン、を互換的に実行または他の方法で処理することによって、少なくとも1つのx86命令セットコアを持つインテル(登録商標)プロセッサと実質的に同一の機能を実行できる任意のプロセッサを表している。x86コンパイラ3304は、追加のリンク処理の有無にかかわらず、少なくとも1つのx86命令セットコアを持つプロセッサ3316上で実行可能なx86バイナリコード3306(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図33は、高水準言語3302のプログラムが、代替的な命令セットバイナリコード3310を生成する代替的な命令セットコンパイラ3308を使用してコンパイルされ得ることを示しており、当該代替的な命令セットバイナリコード3310は、少なくとも1つのx86命令セットコアを持たないプロセッサ3314(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/または、カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを持つプロセッサ)によってネイティブに実行されてよい。命令コンバータ3312は、x86バイナリコード3306を、x86命令セットコアを持たないプロセッサ3314によってネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード3310と同じになる可能性は低い。なぜなら、この変換が可能な命令コンバータは作成が難しいからである。しかしながら、変換されたコードは、一般的なオペレーションを実現し、代替的な命令セットの命令で構成される。したがって、命令コンバータ3312は、ソフトウェア、ファームウェア、ハードウェアまたはそれらの組み合わせを表わし、それらは、エミュレーション、シミュレーションまたは任意の他の処理を介して、x86命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスが、x86バイナリコード3306を実行可能にする。
[他の可能な項目]
以下が請求される:
[項目1]
保護メモリの領域を有する各々の信頼ドメインとして1つまたは複数のハードウェア分離された仮想マシンを管理する信頼ドメインマネージャを備えるハードウェアプロセッサコアと、
前記ハードウェアプロセッサコアと入/出力デバイスとの間に結合された入/出力メモリ管理ユニット(IOMMU)回路であって、前記IOMMU回路は、前記入/出力デバイスからの信頼ドメインの保護メモリのダイレクトメモリアクセスに対する要求に対して、前記入/出力デバイスが前記信頼ドメインの信頼されるコンピューティングベース内にあることを示すように前記要求のフィールドが設定されていることに応じて、前記ダイレクトメモリアクセスを可能にする、IOMMU回路と
を備える装置。
[項目2]
前記要求の前記フィールドは、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)規格に従ったプレフィックスの1つまたは複数のビットのセットである
項目1に記載の装置。
[項目3]
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路は、前記信頼ドメインの前記保護メモリの物理アドレスが前記信頼ドメインの秘密鍵を持つことが可能であるというインジケーションを生成する
項目1に記載の装置。
[項目4]
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路は、前記信頼ドメインの前記保護メモリの物理アドレスが、前記信頼ドメインの共有鍵および前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタを持つことが可能であるというインジケーションを生成する
項目1に記載の装置。
[項目5]
前記要求の前記フィールドが設定されることに応じて、前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの信頼されるデータ構造にアクセスする
項目1に記載の装置。
[項目6]
前記要求の前記フィールドが設定されていないことに応じて、前記IOMMU回路は、前記仮想マシンモニタによって管理される仮想アドレスから物理アドレスへのマッピングのデータ構造にアクセスし、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの前記信頼されるデータ構造にアクセスしない
項目5に記載の装置。
[項目7]
前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタではなく前記信頼ドメインマネージャは、前記信頼ドメインの前記保護メモリの1つまたは複数のブロックの無効化のインジケーションを信頼される無効化キューに格納させることが許可される
項目1に記載の装置。
[項目8]
前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによってアクセス可能である信頼されるルートテーブルポインタレジスタを備える
項目1に記載の装置。
[項目9]
ハードウェアプロセッサコアの信頼ドメインマネージャによって、保護メモリの領域を有する各々の信頼ドメインとして1つまたは複数のハードウェア分離された仮想マシンを管理する段階と、
入/出力デバイスから、前記ハードウェアプロセッサコアと前記入/出力デバイスとの間に結合された入/出力メモリ管理ユニット(IOMMU)回路に、信頼ドメインの保護メモリのダイレクトメモリアクセスの要求を送信する段階と、
前記IOMMU回路によって、前記入/出力デバイスが前記信頼ドメインの信頼されるコンピューティングベース内にあることを示すように前記要求のフィールドが設定されていることに応じて、前記ダイレクトメモリアクセスを可能にする段階と
を備える方法。
[項目10]
前記要求の前記フィールドは、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)規格に従ったプレフィックスの1つまたは複数のビットのセットである
項目9に記載の方法。
[項目11]
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路が、前記信頼ドメインの前記保護メモリの物理アドレスが前記信頼ドメインの秘密鍵を持つことが可能であるというインジケーションを生成する段階
をさらに備える項目9に記載の方法。
[項目12]
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路が、前記信頼ドメインの前記保護メモリの物理アドレスが、前記信頼ドメインの共有鍵および仮想マシンモニタを持つことが可能であるというインジケーションを生成する段階
をさらに備える項目9に記載の方法。
[項目13]
前記要求の前記フィールドが設定されることに応じて、前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの信頼されるデータ構造にアクセスする段階
をさらに備える項目9に記載の方法。
[項目14]
前記要求の前記フィールドが設定されていないことに応じて、前記IOMMU回路が、前記仮想マシンモニタによって管理される仮想アドレスから物理アドレスへのマッピングのデータ構造にアクセスし、入/出力変換ルックアサイドバッファが、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの前記信頼されるデータ構造にアクセスしない段階
をさらに備える項目13に記載の方法。
[項目15]
前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタではなく前記信頼ドメインマネージャに、前記信頼ドメインの前記保護メモリの1つまたは複数のブロックの無効化のインジケーションを、信頼される無効化キューに格納することを許可する段階
をさらに備える項目9に記載の方法。
[項目16]
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路の信頼されるルートテーブルポインタレジスタにアクセスし、前記要求の前記フィールドが設定されていないことに応じて、前記IOMMU回路の前記信頼されるルートテーブルポインタレジスタにアクセスしない段階
をさらに備える項目9に記載の方法。
[項目17]
保護メモリの領域を有する各々の信頼ドメインとして1つまたは複数のハードウェア分離された仮想マシンを管理する信頼ドメインマネージャを備えるハードウェアプロセッサコアと、
前記ハードウェアプロセッサコアに結合された入/出力デバイスと、
前記ハードウェアプロセッサコアと前記入/出力デバイスとの間に結合された入/出力メモリ管理ユニット(IOMMU)回路であって、前記IOMMU回路は、前記入/出力デバイスからの信頼ドメインの保護メモリのダイレクトメモリアクセスに対する要求に対して、前記入/出力デバイスが前記信頼ドメインの信頼されるコンピューティングベース内にあることを示すように前記要求のフィールドが設定されていることに応じて、前記ダイレクトメモリアクセスを可能にする、IOMMU回路と
を備えるシステム。
[項目18]
前記要求の前記フィールドは、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)規格に従ったプレフィックスの1つまたは複数のビットのセットである
項目17に記載のシステム。
[項目19]
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路は、前記信頼ドメインの前記保護メモリの物理アドレスが前記信頼ドメインの秘密鍵を持つことが可能であるというインジケーションを生成する
項目17に記載のシステム。
[項目20]
前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路は、前記信頼ドメインの前記保護メモリの物理アドレスが、前記信頼ドメインの共有鍵および仮想マシンモニタを持つことが可能であるというインジケーションを生成する
項目17に記載のシステム。
[項目21]
前記要求の前記フィールドが設定されることに応じて、前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの信頼されるデータ構造にアクセスする
項目17に記載のシステム。
[項目22]
前記要求の前記フィールドが設定されていないことに応じて、前記IOMMU回路は、前記仮想マシンモニタによって管理される仮想アドレスから物理アドレスへのマッピングのデータ構造にアクセスし、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの前記信頼されるデータ構造にアクセスしない
項目21に記載のシステム。
[項目23]
前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタではなく前記信頼ドメインマネージャは、前記信頼ドメインの前記保護メモリの1つまたは複数のブロックの無効化のインジケーションを信頼される無効化キューに格納させることが許可される
項目17に記載のシステム。
[項目24]
前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによってアクセス可能である信頼されるルートテーブルポインタレジスタを備える
項目17に記載のシステム。

Claims (24)

  1. 保護メモリの領域を有する各々の信頼ドメインとして1つまたは複数のハードウェア分離された仮想マシンを管理する信頼ドメインマネージャを備えるハードウェアプロセッサコアと、
    前記ハードウェアプロセッサコアと入/出力デバイスとの間に結合された入/出力メモリ管理ユニット回路(IOMMU回路)であって、前記IOMMU回路は、前記入/出力デバイスからの信頼ドメインの保護メモリのダイレクトメモリアクセスに対する要求に対して、前記入/出力デバイスが前記信頼ドメインの信頼されるコンピューティングベース内にあることを示すように前記要求のフィールドが設定されていることに応じて、前記ダイレクトメモリアクセスを可能にする、IOMMU回路と
    を備える装置。
  2. 前記要求の前記フィールドは、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)規格に従ったプレフィックスの1つまたは複数のビットのセットである
    請求項1に記載の装置。
  3. 前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路は、前記信頼ドメインの前記保護メモリの物理アドレスが前記信頼ドメインの秘密鍵を持つことが可能であるというインジケーションを生成する
    請求項1に記載の装置。
  4. 前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路は、前記信頼ドメインの前記保護メモリの物理アドレスが前記信頼ドメインの共有鍵および前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタを持つことが可能であるというインジケーションを生成する
    請求項1に記載の装置。
  5. 前記要求の前記フィールドが設定されることに応じて、前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの信頼されるデータ構造にアクセスする
    請求項1に記載の装置。
  6. 前記要求の前記フィールドが設定されていないことに応じて、前記IOMMU回路は、前記仮想マシンモニタによって管理される仮想アドレスから物理アドレスへのマッピングのデータ構造にアクセスし、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの前記信頼されるデータ構造にアクセスしない
    請求項5に記載の装置。
  7. 前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタではなく前記信頼ドメインマネージャは、前記信頼ドメインの前記保護メモリの1つまたは複数のブロックの無効化のインジケーションを信頼される無効化キューに格納させることが許可される
    請求項1から6のいずれか一項に記載の装置。
  8. 前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによってアクセス可能である信頼されるルートテーブルポインタレジスタを備える
    請求項1から6のいずれか一項に記載の装置。
  9. ハードウェアプロセッサコアの信頼ドメインマネージャによって、保護メモリの領域を有する各々の信頼ドメインとして1つまたは複数のハードウェア分離された仮想マシンを管理する段階と、
    入/出力デバイスから、前記ハードウェアプロセッサコアと前記入/出力デバイスとの間に結合された入/出力メモリ管理ユニット回路(IOMMU回路)に、信頼ドメインの保護メモリのダイレクトメモリアクセスの要求を送信する段階と、
    前記IOMMU回路によって、前記入/出力デバイスが前記信頼ドメインの信頼されるコンピューティングベース内にあることを示すように前記要求のフィールドが設定されていることに応じて、前記ダイレクトメモリアクセスを可能にする段階と
    を備える方法。
  10. 前記要求の前記フィールドは、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)規格に従ったプレフィックスの1つまたは複数のビットのセットである
    請求項9に記載の方法。
  11. 前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路が、前記信頼ドメインの前記保護メモリの物理アドレスが前記信頼ドメインの秘密鍵を持つことが可能であるというインジケーションを生成する段階
    をさらに備える請求項9に記載の方法。
  12. 前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路が、前記信頼ドメインの前記保護メモリの物理アドレスが前記信頼ドメインの共有鍵および仮想マシンモニタを持つことが可能であるというインジケーションを生成する段階
    をさらに備える請求項9に記載の方法。
  13. 前記要求の前記フィールドが設定されることに応じて、前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの信頼されるデータ構造にアクセスする段階
    をさらに備える請求項9に記載の方法。
  14. 前記要求の前記フィールドが設定されていないことに応じて、前記IOMMU回路が、前記仮想マシンモニタによって管理される仮想アドレスから物理アドレスへのマッピングのデータ構造にアクセスし、入/出力変換ルックアサイドバッファが、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの前記信頼されるデータ構造にアクセスしない段階
    をさらに備える請求項13に記載の方法。
  15. 前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタではなく前記信頼ドメインマネージャに、前記信頼ドメインの前記保護メモリの1つまたは複数のブロックの無効化のインジケーションを信頼される無効化キューに格納することを許可する段階
    をさらに備える請求項9から14のいずれか一項に記載の方法。
  16. 前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路の信頼されるルートテーブルポインタレジスタにアクセスし、前記要求の前記フィールドが設定されていないことに応じて、前記IOMMU回路の前記信頼されるルートテーブルポインタレジスタにアクセスしない段階
    をさらに備える請求項9から14のいずれか一項に記載の方法。
  17. 保護メモリの領域を有する各々の信頼ドメインとして1つまたは複数のハードウェア分離された仮想マシンを管理する信頼ドメインマネージャを備えるハードウェアプロセッサコアと、
    前記ハードウェアプロセッサコアに結合された入/出力デバイスと、
    前記ハードウェアプロセッサコアと前記入/出力デバイスとの間に結合された入/出力メモリ管理ユニット回路(IOMMU回路)であって、前記IOMMU回路は、前記入/出力デバイスからの信頼ドメインの保護メモリのダイレクトメモリアクセスに対する要求に対して、前記入/出力デバイスが前記信頼ドメインの信頼されるコンピューティングベース内にあることを示すように前記要求のフィールドが設定されていることに応じて、前記ダイレクトメモリアクセスを可能にする、IOMMU回路と
    を備えるシステム。
  18. 前記要求の前記フィールドは、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)規格に従ったプレフィックスの1つまたは複数のビットのセットである
    請求項17に記載のシステム。
  19. 前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路は、前記信頼ドメインの前記保護メモリの物理アドレスが前記信頼ドメインの秘密鍵を持つことが可能であるというインジケーションを生成する
    請求項17に記載のシステム。
  20. 前記要求の前記フィールドが設定されていることに応じて、前記IOMMU回路は、前記信頼ドメインの前記保護メモリの物理アドレスが前記信頼ドメインの共有鍵および仮想マシンモニタを持つことが可能であるというインジケーションを生成する
    請求項17に記載のシステム。
  21. 前記要求の前記フィールドが設定されることに応じて、前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの信頼されるデータ構造にアクセスする
    請求項17に記載のシステム。
  22. 前記要求の前記フィールドが設定されていないことに応じて、前記IOMMU回路は、前記仮想マシンモニタによって管理される仮想アドレスから物理アドレスへのマッピングのデータ構造にアクセスし、前記信頼ドメインマネージャによって管理される仮想アドレスから物理アドレスへのマッピングの前記信頼されるデータ構造にアクセスしない
    請求項21に記載のシステム。
  23. 前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタではなく前記信頼ドメインマネージャは、前記信頼ドメインの前記保護メモリの1つまたは複数のブロックの無効化のインジケーションを信頼される無効化キューに格納させることが許可される
    請求項17から22のいずれか一項に記載のシステム。
  24. 前記IOMMU回路は、前記1つまたは複数のハードウェア分離された仮想マシンの仮想マシンモニタによってではなく、前記信頼ドメインマネージャによってアクセス可能である信頼されるルートテーブルポインタレジスタを備える
    請求項17から22のいずれか一項に記載のシステム。
JP2022166581A 2021-12-23 2022-10-18 信頼ドメインのための入/出力拡張を実装するための回路および方法 Pending JP2023094536A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/560,251 US20230205562A1 (en) 2021-12-23 2021-12-23 Circuitry and methods for implementing input/output extensions for trust domains
US17/560,251 2021-12-23

Publications (1)

Publication Number Publication Date
JP2023094536A true JP2023094536A (ja) 2023-07-05

Family

ID=84359101

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022166581A Pending JP2023094536A (ja) 2021-12-23 2022-10-18 信頼ドメインのための入/出力拡張を実装するための回路および方法

Country Status (5)

Country Link
US (1) US20230205562A1 (ja)
EP (1) EP4202698A1 (ja)
JP (1) JP2023094536A (ja)
CN (1) CN116340948A (ja)
TW (1) TW202326394A (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11977496B1 (en) * 2022-09-29 2024-05-07 Amazon Technologies, Inc. Security vulnerability mitigation using hardware-supported context-dependent address space hiding

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8595487B2 (en) * 2006-11-01 2013-11-26 Vmware, Inc. Virtualization hardware for device driver isolation
US10761996B2 (en) * 2018-09-28 2020-09-01 Intel Corporation Apparatus and method for secure memory access using trust domains
US11373013B2 (en) * 2018-12-28 2022-06-28 Intel Corporation Technologies for filtering memory access transactions received from one or more I/O devices
US11599621B2 (en) * 2019-03-30 2023-03-07 Intel Corporation Apparatuses, methods, and systems for verification of input-output memory management unit to device attachment

Also Published As

Publication number Publication date
EP4202698A1 (en) 2023-06-28
CN116340948A (zh) 2023-06-27
US20230205562A1 (en) 2023-06-29
TW202326394A (zh) 2023-07-01

Similar Documents

Publication Publication Date Title
US9971688B2 (en) Apparatus and method for accelerating operations in a processor which uses shared virtual memory
JP6344614B2 (ja) セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および論理
KR102539453B1 (ko) 보안 인클레이브들의 프로세스들을 포크하고 보안 인클레이브 페이지 캐시에서 자식 인클레이브들을 확립하기 위한 명령어들 및 로직
US20170371803A1 (en) Method and apparatus to allow secure guest access to extended page tables
US20190228145A1 (en) Apparatuses, methods, and systems for verification of input-output memory management unit to device attachment
US11029957B1 (en) Apparatuses, methods, and systems for instructions to compartmentalize code
US20220197995A1 (en) Device, system and method to efficiently update a secure arbitration mode module
US11436342B2 (en) TDX islands with self-contained scope enabling TDX KeyID scaling
KR20230000941A (ko) 가상 머신의 라이브 마이그레이션을 위한 erdma(encrypted remote direct memory access)를 지원하기 위한 회로 및 방법들
CN115357332A (zh) 处理器间中断的虚拟化
TWI830927B (zh) 用於處理器非回寫能力的設備、方法、及非暫時性機器可讀取媒體
EP4202698A1 (en) Circuitry and methods for implementing input/output extensions for trust domains
EP4242900A1 (en) Bypassing memory encryption for non-confidential virtual machines in a computing system
NL2031072B1 (en) Apparatus and method to implement shared virtual memory in a trusted zone
WO2023019537A1 (en) Apparatuses, methods, and systems for device translation lookaside buffer pre-translation instruction and extensions to input/output memory management unit protocols
EP3885950B1 (en) Shadow stack isa extensions to support fast return and event delivery (fred) architecture
US9330020B2 (en) System, apparatus, and method for transparent page level instruction translation
WO2023115248A1 (en) Circuitry and methods for implementing a trusted execution environment security manager
US20220414022A1 (en) Apparatus, system, and method for secure memory access control