機能とインターフェイスの検出
ゲスト ソフトウェアは、さまざまなメカニズムを介してハイパーバイザーと対話します。 これらの多くは、基になるプロセッサと対話するためにソフトウェアによって使用される従来のメカニズムを示しています。 そのため、これらのメカニズムはアーキテクチャ固有です。 x64 アーキテクチャでは、次のメカニズムが使用されます。
- CPUID 命令 – 静的な機能とバージョン情報に使用されます。
- MRS (モデル固有のレジスタ) – 状態と制御の値に使用されます。
- メモリ マップト レジスタ – 状態と制御の値に使用されます。
- プロセッサ割り込み – 非同期イベント、通知、およびメッセージに使用されます。
これらのアーキテクチャ固有のインターフェイスに加えて、ハイパーバイザーには、ハイパーカルを使用して実装された単純な手続き 型インターフェイスが提供されます。
ハイパーバイザー検出
ハイパーバイザー インターフェイスを使用する前に、ソフトウェアは、仮想化された環境内で実行されているかどうかを最初に判断する必要があります。 この仕様に準拠する x64 プラットフォームでは、入力 (EAX) 値 1 で CPUID 命令を実行します。 コードを実行すると、レジスタ ECX のビット 31 ("ハイパーバイザーが存在するビット") を確認する必要があります。 このビットが設定されている場合は、ハイパーバイザーが存在します。 非仮想化環境では、ビットは明確になります。
CPUID.01h.ECX:31 // if set, virtualization present
"hypervisor present bit" が設定されている場合は、追加の CPUID リーフに対してクエリを実行して、準拠するハイパーバイザーとその機能の詳細を確認できます。 このような 2 つのリーフが使用できると保証されます。 0x40000000
と 0x40000001
。 後で番号付けされたリーフも使用できます。
Standard Hypervisor の CPUID リーフ
のリーフに対して 0x40000000
クエリが実行された場合、ハイパーバイザーは最大ハイパーバイザー CPUID リーフ番号とベンダー ID 署名を提供する情報を返します。
登録 | 情報提供済み |
---|---|
EAX | ハイパーバイザー CPUID 情報の最大入力値 |
EBX | Hypervisor Vendor ID Signature |
ECX | Hypervisor Vendor ID Signature |
EDX | Hypervisor Vendor ID Signature |
のリーフに対して 0x40000001
クエリが実行された場合、ベンダーに依存しないハイパーバイザー インターフェイスの識別を表す値が返されます。 これにより、 から のリーフのセマンティクスが決定 0x4000002
されます 0x400000FF
。
登録 | 情報提供済み |
---|---|
EAX | ハイパーバイザー インターフェイス署名。 |
EBX | 予約されています。 |
ECX | 予約されています。 |
EDX | 予約されています。 |
これら 2 つのリーフを使用すると、ゲストはハイパーバイザー ベンダー ID とインターフェイスに対して個別にクエリを実行できます。 ベンダー ID は、情報と診断の目的でのみ提供されます。 リーフ を介して報告されるインターフェイスシグネチャに対するソフトウェアの基本互換性の決定のみを行うのが推奨されます 0x40000001
。
Microsoft Hypervisor の CPUID リーフ
Microsoft ハイパーバイザーの CPUID インターフェイスに準拠しているハイパーバイザーでは0x40000000
0x40000001
、 と リーフ レジスタの値は次のようになります。
ハイパーバイザー CPUID リーフ範囲 - 0x40000000
EAX は、ハイパーバイザー CPUID リーフの最大数を決定します。 EBX-EDX には、ハイパーバイザー ベンダー ID 署名が含まれている。 ベンダー ID 署名は、レポートと診断の目的でのみ使用する必要があります。
登録 | 情報提供済み |
---|---|
EAX | ハイパーバイザー CPUID 情報の最大入力値。 Microsoft ハイパーバイザーでは、これは少なくとも になります 0x40000005 。 |
EBX | 0x7263694D— "Micr" |
ECX | 0x666F736F— "osof" |
EDX | 0x76482074—"t Hv" |
Hypervisor Vendor-Neutral Interface Identification - 0x40000001
EAX には、ハイパーバイザー インターフェイス識別署名が含まれている。 これにより、 から のリーフのセマンティクスが決定 0x40000002
されます 0x400000FF
。
登録 | 情報提供済み |
---|---|
EAX | 0x31237648— "Hv#1" |
EBX | 予約されています。 |
ECX | 予約されています。 |
EDX | 予約されています。 |
"Hv#1" インターフェイスに準拠するハイパーバイザーでは、少なくとも次のリーフも提供されます。
ハイパーバイザー システム ID - 0x40000002
登録 | Bits | 情報提供済み |
---|---|---|
EAX | ビルド番号 | |
EBX | 31-16 | メジャー バージョン |
15-0 | マイナー バージョン |
ハイパーバイザー機能の識別 - 0x40000003
EAX と EBX は、現在のパーティション特権に基づいて、パーティションで使用できる機能を示します。
登録 | Bits | 情報提供済み |
---|---|---|
EAX | ビット 31 から 0 のビットに対応HV_PARTITION_PRIVILEGE_MASK | |
EBX | 63 ~ 32 ビットのビットに対応HV_PARTITION_PRIVILEGE_MASK | |
ECX | 予約されています。 | |
EDX | 0 | 非推奨 (以前に示された MWAIT 命令の可用性) |
1 | ゲスト デバッグのサポートが利用可能 | |
2 | パフォーマンス モニターサポートが利用可能です | |
3 | 物理 CPU 動的パーティション 分割イベントのサポートを利用できます | |
4 | XMM レジスタ経由でハイパーコール入力パラメーター ブロックを渡すサポートを利用できます | |
5 | 仮想ゲストアイドル状態のサポートを利用できます | |
6 | ハイパーバイザーのスリープ状態のサポートが利用可能 | |
7 | NUMA 距離のクエリのサポートを利用できます | |
8 | タイマーの頻度を決定するためのサポートを利用できます | |
9 | 合成マシン チェックの挿入のサポートを利用できます | |
10 | ゲスト クラッシュ MRS のサポートを利用できます | |
11 | デバッグ MRS のサポートを利用できます | |
12 | NPIEP のサポートを利用できます | |
13 | DisableHypervisorAvailable | |
14 | ExtendedGvaRangesForFlushVirtualAddressListAvailable | |
15 | XMM レジスタ経由でハイパーコール出力を返すサポートを利用できます | |
16 | 予約されています。 | |
17 | SintPollingModeAvailable | |
18 | HypercallMsrLockAvailable | |
19 | 直接合成タイマーを使用する | |
20 | VSM で使用できる PAT レジスタのサポート | |
21 | VSM で使用可能な bndcfgs レジスタのサポート | |
22 | 予約されています。 | |
23 | 使用可能な合成時間非呼び出しタイマーのサポート | |
25-24 | 予約されています。 | |
26 | Intel の Last Branch Record (LBR) 機能がサポートされています | |
31-27 | 予約されています。 |
実装おすすめ - 0x40000004
最適なパフォーマンスを得る OS の実装をハイパーバイザーで推奨する動作を示します。
登録 | Bits | 情報提供済み |
---|---|---|
EAX | 0 | MOV から CR3 への命令ではなく、アドレス空間スイッチにハイパーコールを使用することをお勧めします。 |
1 | INVLPG または MOV から CR3 への手順ではなく、ローカル TLB フラッシュにハイパーコールを使用することをお勧めします。 | |
2 | プロセッサ間の割り込みではなく、リモート TLB フラッシュにハイパーコールを使用することをお勧めします。 | |
3 | APIC にアクセスするために MCR を使用することをお勧めします。対応するメモリマップではなく、EOI、ICR、TPR が登録されます。 | |
4 | ハイパーバイザー提供の MSR を使用してシステム RESET を開始することをお勧めします。 | |
5 | このパーティションには緩いタイミングを使用することをお勧めします。 使用する場合、VM は、外部割り込みのタイム タイム デリバリーに依存するウォッチドッグ タイムアウトを無効にする必要があります。 | |
6 | DMA の再マップを使用することをお勧めします。 | |
7 | 割り込み再マッピングを使用することをお勧めします。 | |
8 | 予約済み。 | |
9 | AutoEOI を非推奨にすることをお勧めします。 | |
10 | SyntheticClusterIpi ハイパーコールを使用することをお勧めします。 | |
11 | 新しい ExProcessorMasks インターフェイスを使用することをお勧めします。 | |
12 | ハイパーバイザーが Hyper-V パーティション内で入れ子にされた状態を示します。 | |
13 | MBEC システム呼び出しには INT を使用することをお勧めします。 | |
14 | 対応する VMCS インターフェイスを使用して、入れ子になったハイパーバイザーを推奨します。 また、入れ子になった追加の対応を使用できる可能性も示します (「リーフ サービス」を0x4000000A。 | |
15 | UseSyncedTimeline – パーティションがルート パーティションによって提供される QueryPerformanceCounter バイアスを消費する必要がある場合に示します。 | |
16 | 予約されています。 | |
17 | UseDirectLocalFlushEntire – ゲストが CR4 を切り替える必要がある場合に示します。PGE は、ハイパーコールを作成するよりもパフォーマンスが高い TLB 全体をフラッシュします。 | |
18 | NoNonArchitecturalCoreSharing - コア共有ができないかどうかを示します。 これは、STIBP のパフォーマンス オーバーヘッドを回避する最適化として使用できます。 | |
31-19 | 予約されています。 | |
EBX | ハイパーバイザーにエラーを通知する前に、スピンロックエラーを再試行する試行の推奨回数。 0xFFFFFFFFは通知を受け取らないことを示します。 | |
ECX | 6-0 | ImplementedPhysicalAddressBits – システムの物理プロセッサによって報告された物理アドレス幅 (MAXPHYADDR) を報告します。 すべてのビットに 0 が含まれている場合、この機能はサポートされません。 報告される値は物理アドレス ビットの実際の数であり、その数値を表すビット位置ではありません。 |
31-7 | 予約されています。 | |
EDX | 予約されています。 |
ハイパーバイザーの実装の制限 - 0x40000005
現在のハイパーバイザー実装でサポートされているスケール制限について説明します。 値が 0 の場合、ハイパーバイザーは対応する情報を公開します。それ以外の場合は、これらの意味を持ちます。
登録 | 情報提供済み |
---|---|
EAX | サポートされている仮想プロセッサの最大数 |
EBX | サポートされている論理プロセッサの最大数 |
ECX | 割り込み再マップに使用できる物理割り込みベクトルの最大数。 |
EDX | 予約されています。 |
実装ハードウェア機能 - 0x40000006
ハイパーバイザーによって検出され、現在使用されているハードウェア固有の機能を示します。
登録 | Bits | 情報提供済み |
---|---|---|
EAX | 0 | APIC オーバーレイ 支援のサポートが検出され、使用されています。 |
1 | MSR ビットマップのサポートが検出され、使用されています。 | |
2 | アーキテクチャ パフォーマンス カウンターのサポートが検出され、使用されています。 | |
3 | 第 2 レベルのアドレス変換のサポートが検出され、使用されています。 | |
4 | DMA 再マッピングのサポートが検出され、使用されています。 | |
5 | 割り込み再マッピングのサポートが検出され、使用されています。 | |
6 | メモリ スクラブ がハードウェアに存在する場合に示します。 | |
7 | DMA 保護が使用されています。 | |
8 | HPET が要求されます。 | |
9 | 合成タイマーは揮発性です。 | |
13-10 | 現在のゲストのハイパーバイザー レベル - 入れ子でない場合は "0"。 | |
14 | 物理宛先モードが必要です。 | |
15 | 予約されています。 | |
16 | ハードウェア メモリゼロのサポートが存在します。 | |
17 | 無制限のゲストのサポートが存在します。 | |
18 | リソース割り当てのサポート (RDT-A、PQOS-A) が存在します。 | |
19 | リソース監視 (RDT-M、PQOS-M) のサポートが存在します。 | |
20 | ゲスト仮想 PMU のサポートが存在します。 | |
21 | ゲスト仮想 LBR のサポートが存在します。 | |
22 | ゲスト仮想 IPT のサポートが存在します。 | |
23 | APIC エミュレーションのサポートが存在します。 | |
24 | ACPI WDAT テーブルが検出され、ハイパーバイザーによって使用されています。 | |
31-25 | 予約されています。 | |
EBX | 予約されています。 | |
ECX | 予約されています。 | |
EDX | 予約されています。 |
入れ子になったハイパーバイザー機能の識別 - 0x40000009
入れ子になったときにハイパーバイザーによってパーティションに公開される機能について説明します。 EAX では、仮想 MRS へのアクセスについて説明します。 EDX では、ハイパーカルへのアクセスについて説明します。
登録 | Bits | 情報提供済み |
---|---|---|
EAX | 1-0 | 予約されています。 |
2 | AccessSynicRegs | |
3 | 予約されています。 | |
4 | AccessIntrCtrlRegs | |
5 | AccessHypercallMsrs | |
6 | AccessVpIndex | |
11-7 | 予約されています。 | |
12 | AccessReenlightenmentControls | |
31-13 | 予約されています。 | |
EBX | 予約されています。 | |
ECX | 予約されています。 | |
EDX | 3-0 | 予約されています。 |
4 | XmmRegistersForFastHypercallAvailable | |
14-5 | 予約されています。 | |
15 | FastHypercallOutputAvailable | |
16 | 予約されています。 | |
17 | SintPollingModeAvailable | |
31-18 | 予約されています。 |
ハイパーバイザーの入れ子になった仮想化機能 - 0x4000000A
入れ子になったハイパーバイザーで使用できる入れ子になった仮想化の最適化を示します。
登録 | Bits | 情報提供済み |
---|---|---|
EAX | 7-0 | 対応 VMCS バージョン (低) |
15-8 | 対応 VMCS バージョン (高) | |
16 | 予約されています。 | |
17 | 直接仮想フラッシュ ハイパーカルのサポートを示します。 | |
18 | HvFlushGuestPhysicalAddressSpace および HvFlushGuestPhysicalAddressList ハイパーカル (Intel プラットフォーム上) のサポートを示します。 | |
19 | 対応する MSR ビットマップの使用のサポートを示します。 | |
20 | ページ フォールト例外クラスでの仮想化例外の組み合わせのサポートを示します。 | |
21 | 予約されています。 | |
22 | AMD プラットフォームでの対応 TLB のサポートを示します。 ASID フラッシュは、NPT から派生した TLB エントリには影響を与え "されません"。 NPT TLB エントリを無効にするには、ハイパーカルを使用する必要があります。 また、HvFlushGuestPhysicalAddressSpace および HvFlushGuestPhysicalAddressList ハイパーカルのサポートも示します。 | |
31-21 | 予約されています。 | |
EBX | 予約されています。 | |
ECX | 予約されています。 | |
EDX | 予約されています。 |
バージョン管理
ハイパーバイザーのバージョン情報はリーフ でエンコードされます 0x40000002
。 メイン バージョンとサービス バージョンの 2 つのバージョン番号が提供されます。
メイン バージョンには、メジャー バージョン番号とマイナー バージョン番号とビルド番号が含まれます。 これらは Microsoft のリリース番号Windows対応しています。 サービス バージョンには、メイン バージョンに加えた変更が記述されています。
クライアントは、バージョン範囲と比較するのではなく、CPUID 0x40000003
0x40000005
リーフを使用してハイパーバイザー機能を確認する方法を強く推奨します。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示