この記事は技術的すぎるため、ほとんどの読者には理解しにくいかもしれません。技術的な詳細を削除せずに、 (2024年7月) |
| シリーズの一部 |
| x86命令リスト |
|---|
ハードウェア仮想化をサポートするためにx86 命令セットに追加された命令セット拡張。これらの拡張は、仮想実行コンテキストへの出入り命令と、ゲストとホストの状態を保持する仮想マシン制御構造(VMCS)のロード命令、および仮想マシン内のプロセッサの動作を制御するフィールドを提供します。
AMD-V説明書
| 命令 | オペコード | 指示の説明 | 使用者 | 追加された |
|---|---|---|---|---|
| 基本的なSVM(セキュア仮想マシン)命令[1] | ||||
INVLPGA rAX,ECX[あ] |
0F 01 DF |
rAX で指定された仮想ページと ECX で指定された ASID (アドレス空間識別子) の TLB マッピングを無効にします。 | VMM | K8 [b] |
VMRUN rAX[あ] |
0F 01 D8 |
rAX 内の物理アドレスで指定された VMCB (仮想マシン制御ブロック) によって管理される仮想マシンを実行します。 | ||
VMLOAD rAX[あ] |
0F 01 DA |
rAXレジスタの物理アドレスで指定されたVMCBからプロセッサ状態の特定のサブセットをロードします。[c] | 通常、VMM [d] | |
VMSAVE rAX[あ] |
0F 01 DB |
プロセッサ状態の特定のサブセットをrAXレジスタの物理アドレスで指定されたVMCBに保存します。[c] | ||
STGI |
0F 01 DC |
GIF (グローバル割り込みフラグ) を設定します。 | 通常、VMM [e] | |
CLGI |
0F 01 DD |
クリアなGIF。 | ||
VMMCALL |
NFx 0F 01 D9 |
VMEXIT を発生させてゲストから VM モニターを呼び出します。 | ゲスト | |
SKINIT EAX |
0F 01 DE |
認証付きセキュア初期化およびジャンプ。CPU を既知の状態に初期化し、EAXで指定された64KBのメモリ領域をSLB(「セキュアローダーブロック」)として指定し、メモリ領域のコピーをシステムTPMに送信してデジタル署名による検証を行い、SLBにジャンプします。 |
VMM | トゥリオン「ライオン」、[2] オプテロン「シャンハイ」、 フェノムII |
| セキュア暗号化仮想化(SEV):暗号化状態(SEV-ES)命令 | ||||
VMGEXIT |
F2/F3 0F 01 D9 |
SEV-ES VMMへの出口。SEV -ES VMはVMMと明示的に通信します。[f] |
ゲスト | 禅1 |
| セキュアネストページング(SEV-SNP):リバースマップテーブル(RMP)命令 | ||||
PSMASH |
F3 0F 01 FF |
ページスマッシュ:2MBページのRMPエントリを、対応する連続した4KBページのRMPエントリセットに拡張します。2MBページのシステム物理アドレスはRAXレジスタで指定されます。 | VMM | 禅3 |
RMPUPDATE |
F2 0F 01 FE |
新しいRMPエントリを書き込みます。RMPエントリが変更されたページのシステム物理アドレスは、RAXレジスタで指定されます。RCXレジスタは、新しいRMP状態を含む16バイトのデータ構造の実効アドレスを提供します。 | ||
PVALIDATE |
F2 0F 01 FF |
ゲストページのRMPエントリの検証を有効または無効にする。ゲストの仮想アドレスはレジスタオペランドrAXで指定される。[a] | ゲスト | |
RMPADJUST |
F3 0F 01 FE |
ゲストページのRMP権限を調整します。ゲストの仮想アドレスはRAXレジスタで指定します。ページサイズはRCX[0]で指定します。ターゲットVMPL(仮想マシン特権レベル)とその権限はRDXレジスタで指定します。 | ||
RMPQUERY |
F3 0F 01 FD |
ゲストページのRMPパーミッションマスクを読み取ります。ゲスト仮想アドレスはRAXレジスタで指定します。ターゲットVMPLはRDX[7:0]で指定します。指定されたVMPLのRMPパーミッションはRDX[63:8]とRCXレジスタで返されます。 | ゲスト | 禅4 |
RMPREAD |
F2 0F 01 FD |
RMPエントリを読み取ります。RMPエントリを読み取るページのシステム物理アドレスは、RAXレジスタで指定します。RCXレジスタは、RMPエントリが書き込まれる16バイトのデータ構造の実効アドレスを提供します。 | VMM | (禅5) |
- ^ abcde 、、、および命令のrAX 引数の場合、AX/EAX/RAX の選択はアドレス サイズによって決まり、67h プレフィックスで上書きできます。
VMRUNVMLOADVMSAVEINVLPGAPVALIDATE - ^ AMD-V のサポートは AMD K8 のステッピング F で追加され、それ以前のステッピングでは利用できません。
- ^ ab 命令
VMRUNはCPU状態の限定されたサブセットのみをロードします。追加の状態をロードするには、VMLOAD事前に実行する必要があります。同様に、#VMEXIT はゲスト状態のうち限定された量のみをVMCBに保存するため、追加の状態を保存するために必要です。VMMが/によって処理される状態項目を使用する必要がない単純なインターセプト条件では、VMMは で仮想マシンに再入する前に/を実行しないことでパフォーマンスを向上させることができます。VMRUNVMSAVEVMSAVEVMLOADVMSAVEVMLOADVMRUN - ^ VMLOAD/VMSAVE 仮想化をサポートする CPU ( Excavator以降) では、
VMLOADおよびVMSAVE命令をゲスト モードでも実行できます。 - ^ 仮想 GIF をサポートする CPU ( Excavator以降) では、
STGIおよびCLGI命令をゲスト モードでも実行できます。 - ^ は 、SEV-ES ゲストによって実行されていないかのよう
VMGEXITに実行されます。VMMCALL
インテルVT-x説明書
Intel 仮想化命令。VT-x は、VIA および Zhaoxin の一部のプロセッサでもサポートされています。
| 命令 | オペコード | 指示の説明 | [a]によって使用される | 追加された |
|---|---|---|---|---|
| VMX(仮想マシン拡張機能)の基本的な手順 | ||||
VMXON m64[b] |
F3 0F C7 /6 |
VMX操作に入る – ハードウェアでサポートされている仮想化環境に入ります。[c] | VMM | プレスコット 2M、 ヨナ、 センタートン、 VIA Nano 2000 [d] |
VMXOFF |
NP 0F 01 C4 |
VMX 操作を終了する - ハードウェアでサポートされている仮想化環境を停止します。 | ||
VMPTRLD m64[b] |
NP 0F C7 /6 |
メモリから仮想マシン制御構造 (VMCS) へのポインターをロードし、有効としてマークします。 | ||
VMPTRST m64[b] |
NP 0F C7 /7 |
現在の VMCS へのポインタをメモリに格納します。 | ||
VMCLEAR m64[b] |
66 0F C7 /6 |
VMCSデータをCPUからメモリ内のVMCS領域にフラッシュします。指定されたVMCSが現在のVMCSである場合、現在のVMCSは無効としてマークされます。 | ||
VMLAUNCH |
NP 0F 01 C2 |
現在の VMCS によって管理されている仮想マシンを起動します。 | ||
VMRESUME |
NP 0F 01 C3 |
現在の VMCS によって管理されている仮想マシンを再開します。 | ||
VMREAD r/m,reg |
NP 0F 78 /r |
現在のVMCSから指定されたフィールドを読み取ります。reg引数は読み取るフィールドを指定します。結果は に格納されますr/m。 |
通常、VMM [e] | |
VMWRITE reg,r/m |
NP 0F 79 /r |
現在のVMCSの指定されたフィールドに書き込みます。reg引数は書き込むフィールドを指定し、r/m引数はそのフィールドに書き込むデータ項目を提供します。
| ||
VMCALL |
NP 0F 01 C1 |
VMEXIT を発生させてゲストから VM モニターを呼び出します。 | 通常、ゲスト[f] | |
| 拡張ページテーブル(EPT)命令 | ||||
INVEPT reg,m128 |
66 0F 38 80 /r |
TLBおよびページング構造キャッシュ内のEPT由来のエントリを無効化します。reg引数は無効化の種類を指定し、メモリ引数は128ビットの記述子を指定します。[g]
|
VMM | ネハレム、 センタートン、[4] 張江 |
INVVPID reg,m128 |
66 0F 38 81 /r |
VPID(仮想プロセッサID)に基づいて、TLBおよびページング構造キャッシュ内のエントリを無効化します。引数はreg無効化の種類を指定し、メモリ引数は128ビットの記述子を指定します。[h]
| ||
VMFUNC |
NP 0F 01 D4 |
EAXで指定されたVM関数を呼び出します。[i] | ゲスト | ハスウェル、 シルバーモント、 陸家嘴 |
| 信頼ドメイン拡張(TDX):セキュアアービトレーションモード(SEAM)命令[6] | ||||
SEAMOPS |
66 0F 01 CE |
SEAM固有の操作を呼び出す。実行する操作はRAXで指定される。[j] | SEAM ルート |
(サファイアラピッズ[7])、 エメラルドラピッズ[8] |
SEAMRET |
66 0F 01 CD |
SEAM VMX ルート操作から従来の VMX ルート操作に戻ります。 | ||
SEAMCALL |
66 0F 01 CF |
従来の VMX ルート操作から SEAM VMX ルート操作を呼び出します。 | VMM | |
TDCALL |
66 0F 01 CC |
VMEXIT を発生させて、TD ゲストから VM モニターを呼び出します。 | TDゲスト | |
- ^ VMゲスト内でVT-x VMM命令を実行すると、VMEXITが発生します。VMX
操作が を介して開始されていない場合VMXON、すべてのVT-x命令( を除くVMXON)は#UDを引き起こします。 - ^ abcd 、、およびの m64 引数は、64 ビットの物理アドレスです。
VMPTRLDVMPTRSTVMCLEARVMXON - ^ m64 引数は
VMXON、「VMXON領域」への64ビット物理アドレスです。これは4KBの領域であり、4KB境界でアラインメントされている必要があります。この領域は、プロセッサが実装依存の方法でVMX操作をサポートするために使用される場合があり、プロセッサがVMXOFF命令によってVMX操作を終了するまで、ソフトウェアからアクセスしてはなりません。複数の論理CPUを備えたシステムでは、複数のCPUでVMX操作を開始するには、各CPUごとに個別の「VMXON領域」が必要です。 - ^ VIA Nano CPUでは、VMXはステップ3以降でのみサポートされます。[3]
- ^ 「VMCS シャドウイング」が有効になっている場合 ( Haswell以降で利用可能)、
VMREADおよびVMWRITE命令もゲストで実行できます。 - ^ この
VMCALL命令は VMM でも実行できます。実行すると、特別な SMM VM 終了が発生します。 - ^ の引数に使用できる無効化タイプは次のとおりです。
regINVEPT価値 関数 1 シングルコンテキストの無効化: 記述子のビット 63:0 の EPT ポインタに関連付けられたすべてのマッピングを無効にします。 2 グローバル無効化: すべての EPT ポインターに関連付けられたすべてのマッピングを無効にします。 - ^ の引数に使用できる無効化タイプは次のとおりです。
regINVVPID価値 関数 0 記述子で指定された線形アドレスとVPIDのマッピングを無効にします。
(とは異なりINVLPG、INVVPID非正規アドレスで使用すると失敗します。[5])1 記述子に指定された VPID のすべてのマッピングを無効にします。 2 全コンテキストの無効化: VPID 0 を除くすべての VPID のマッピングをすべて無効にします。 3 グローバル変換を除き、記述子に指定された VPID のすべてのマッピングを無効にします。 - ^ EAXレジスタで
使用できる機能は次のとおりです。
VMFUNCイーアックス 関数 0 EPTP切り替え:拡張ページテーブルポインタを、VMホストによって事前に用意された最大512個のテーブルポインタのいずれかに切り替えます。ECX
は、512個のポインタのうちどれを使用するかを指定します。1-63 (予約済み、VMEXIT が発生します) ≥64 無効です。#UD が発生します。 - ^ RAX レジスタで
使用できる操作は次のとおりです。
SEAMOPSラックス 手術 0 (機能) RAX でサポートされている SEAMOPS リーフのビットマップを返します。 1 (シームレポート) SEAMREPORT 構造を生成します。 RAX でサポートされていない値を指定すると、#GP(0) 例外が発生します。
参考文献
- ^ AMD、AMD64仮想化コードネーム「Pacifica」テクノロジー、発行番号33407、改訂3.01、2005年5月。2011年6月13日アーカイブ。
- ^ CPU-World、AMD Turion 64 X2 RM-75のCPUID、2022年3月5日。2023年4月19日アーカイブ。
- ^ Jesse Ahrens、「Re: KVM on Via Nano (Isaiah) CPUs?」、KVM メーリング リスト、2009 年 4 月 1 日。
- ^ Intel、「Intel® Atom™ プロセッサー S1200 製品ファミリー (Microserver 向け) データシート」、第 1 巻/全 2 巻、注文番号 328194-001、2012 年 12 月、44 ページ。2012 年 12 月 24 日にアーカイブ。
- ^ Vulners、VMX:非正規アドレスでのINVLPGのインターセプト問題、2016年1月20日。2021年7月28日アーカイブ。
- ^ Intel、「Trust Domain CPU Architectural Extensions」、注文番号343754-002、2021年5月。2022年12月26日アーカイブ。
- ^ SecurityWeek、Intelが第4世代Xeonプロセッサーの発売に合わせて機密コンピューティングポートフォリオにTDXを追加、2023年1月10日。2023年1月10日アーカイブ。
- ^ Intel、「Intel XeonプロセッサーはIntel Trust Domain Extensions(Intel TDX)をサポートしていますか?」、2024年6月11日 - Emerald Rapids CPUではTDXが一般市場で入手可能ですが、Sapphire Rapids CPUでは限定的に入手可能です。2024年6月13日アーカイブ。