이 섹션에서는 게스트 소프트웨어가 하이퍼바이저의 존재를 감지하고 아키텍처별 검색 메커니즘을 사용하여 기능, 기능 및 버전 정보를 쿼리하는 방법을 설명합니다.
기능 및 인터페이스 검색(x64)
게스트 소프트웨어는 다양한 메커니즘을 통해 하이퍼바이저와 상호 작용합니다. 이러한 메커니즘의 대부분은 소프트웨어에서 기본 프로세서와 상호 작용하는 데 사용하는 기존 메커니즘을 반영합니다. 따라서 이러한 메커니즘은 아키텍처에 따라 다릅니다. x64 아키텍처에서는 다음 메커니즘이 사용됩니다.
- CPUID 명령 – 정적 기능 및 버전 정보에 사용됩니다.
- MSR(모델별 레지스터) – 상태 및 컨트롤 값에 사용됩니다.
- 메모리 매핑 레지스터 – 상태 및 컨트롤 값에 사용됩니다.
- 프로세서 인터럽트 – 비동기 이벤트, 알림 및 메시지에 사용됩니다.
하이퍼바이저는 이러한 아키텍처별 인터페이스 외에도 하이퍼콜로 구현된 간단한 절차 인터페이스를 제공합니다.
하이퍼바이저 검색
하이퍼바이저 인터페이스를 사용하기 전에 소프트웨어는 먼저 가상화된 환경 내에서 실행 중인지 여부를 결정해야 합니다. 이 사양을 준수하는 x64 플랫폼에서는 입력(EAX) 값이 1인 CPUID 명령을 실행하여 이 작업을 수행합니다. 실행 시 코드는 등록 ECX의 비트 31("하이퍼바이저 현재 비트")을 확인해야 합니다. 이 비트가 설정되면 하이퍼바이저가 있습니다. 가상화되지 않은 환경에서는 비트가 명확합니다.
CPUID.01h.ECX:31 // if set, virtualization present
"하이퍼바이저 현재 비트"가 설정된 경우 추가 CPUID 리프를 쿼리하여 규칙적인 하이퍼바이저 및 해당 기능에 대한 자세한 정보를 확인할 수 있습니다. 이러한 두 잎은 사용할 수 있도록 보장 : 0x40000000 및 0x40000001. 이후에 번호가 매겨진 잎도 사용할 수 있습니다.
표준 하이퍼바이저 CPUID 잎
리프 0x40000000 가 쿼리되면 하이퍼바이저는 최대 하이퍼바이저 CPUID 리프 번호와 공급업체 ID 서명을 제공하는 정보를 반환합니다.
| Register | 제공된 정보 |
|---|---|
| EAX | 하이퍼바이저 CPUID 정보의 최대 입력 값 |
| EBX | 하이퍼바이저 공급업체 ID 서명 |
| ECX | 하이퍼바이저 공급업체 ID 서명 |
| EDX | 하이퍼바이저 공급업체 ID 서명 |
리프를 0x40000001 쿼리하는 경우 공급업체 중립 하이퍼바이저 인터페이스 ID를 나타내는 값을 반환합니다. 그러면 나뭇잎 0x40000020x400000FF의 의미 체계가 결정됩니다.
| Register | 제공된 정보 |
|---|---|
| EAX | 하이퍼바이저 인터페이스 서명입니다. |
| EBX | 예약됨 |
| ECX | 예약됨 |
| EDX | 예약됨 |
이 두 개의 잎을 사용하면 게스트가 하이퍼바이저 공급업체 ID 및 인터페이스를 독립적으로 쿼리할 수 있습니다. 공급업체 ID는 정보 및 진단 목적으로만 제공됩니다. 소프트웨어는 리프 0x40000001를 통해 보고된 인터페이스 서명에 대한 호환성 결정만을 기반으로 하는 것이 좋습니다.
Microsoft 하이퍼바이저 CPUID 리프
Microsoft 하이퍼바이저 CPUID 인터페이스를 준수하는 하이퍼바이저에서 0x40000000 리프 0x40000001 레지스터에는 다음 값이 있습니다.
하이퍼바이저 CPUID 리프 범위 - 0x40000000
EAX는 최대 하이퍼바이저 CPUID 리프를 결정합니다. EBX-EDX 하이퍼바이저 공급업체 ID 서명을 포함합니다. 공급업체 ID 서명은 보고 및 진단 목적으로만 사용해야 합니다.
| Register | 제공된 정보 |
|---|---|
| EAX | 하이퍼바이저 CPUID 정보의 최대 입력 값입니다. Microsoft 하이퍼바이저에서 이 작업은 적어도 0x40000005다음과 같습니다. |
| EBX | 0x7263694D — "Micr" |
| ECX | 0x666F736F — "osof" |
| EDX | 0x76482074 —"t Hv" |
하이퍼바이저 공급업체 중립 인터페이스 식별 - 0x40000001
EAX에는 하이퍼바이저 인터페이스 식별 서명이 포함되어 있습니다. 그러면 나뭇잎 0x400000020x400000FF의 의미 체계가 결정됩니다.
| Register | 제공된 정보 |
|---|---|
| EAX | 0x31237648 —"Hv#1" |
| EBX | 예약됨 |
| ECX | 예약됨 |
| EDX | 예약됨 |
"Hv#1" 인터페이스를 준수하는 하이퍼바이저는 적어도 다음 잎을 제공합니다.
하이퍼바이저 시스템 ID - 0x40000002
| Register | 비트 | 제공된 정보 |
|---|---|---|
| EAX | 빌드 번호 | |
| EBX | 31-16 | 주 버전 |
| 15-0 | 마이너 버전 |
하이퍼바이저 기능 식별 - 0x40000003
EAX 및 EBX는 현재 파티션 권한에 따라 파티션에서 사용할 수 있는 기능을 나타냅니다.
| Register | 비트 | 제공된 정보 |
|---|---|---|
| EAX | HV_PARTITION_PRIVILEGE_MASK 비트 31-0에 해당합니다. | |
| EBX | HV_PARTITION_PRIVILEGE_MASK 비트 63-32에 해당합니다. | |
| ECX | 4-0 | 예약됨 |
| 5 | 고정 Mperf를 사용할 수 있습니다. | |
| 6 | 감독자 섀도 스택 사용 가능 | |
| 7 | 아키텍처 PMU를 사용할 수 있습니다. | |
| 8 | 예외 트랩 인터셉트 사용 가능 | |
| 31-9 | 예약됨 | |
| EDX | 0 | 사용되지 않음(이전에 MWAIT 명령의 가용성으로 표시됨) |
| 1 | 게스트 디버깅 지원을 사용할 수 있습니다. | |
| 2 | 성능 모니터 지원을 사용할 수 있습니다. | |
| 3 | 물리적 CPU 동적 분할 이벤트에 대한 지원을 사용할 수 있습니다. | |
| 4 | XMM 레지스터를 통해 하이퍼콜 입력 매개 변수 블록 전달에 대한 지원을 사용할 수 있습니다. | |
| 5 | 가상 게스트 유휴 상태에 대한 지원을 사용할 수 있습니다. | |
| 6 | 하이퍼바이저 절전 모드 상태에 대한 지원을 사용할 수 있습니다. | |
| 7 | NUMA 거리 쿼리에 대한 지원을 사용할 수 있습니다. | |
| 8 | 타이머 빈도 확인에 대한 지원을 사용할 수 있습니다. | |
| 9 | 가상 머신 검사 주입에 대한 지원을 사용할 수 있습니다. | |
| 10 | 게스트 크래시 MSR에 대한 지원을 사용할 수 있습니다. | |
| 11 | 디버그 MSR에 대한 지원을 사용할 수 있습니다. | |
| 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의 LBR(마지막 분기 레코드) 기능 | |
| 31-27 | 예약됨 |
구현 권장 사항 - 0x40000004
하이퍼바이저에서 최적의 성능을 위해 OS 구현을 권장하는 동작을 나타냅니다.
| Register | 비트 | 제공된 정보 |
|---|---|---|
| EAX | 0 | MOV에서 CR3 명령으로 대신 주소 공간 스위치에 하이퍼콜을 사용하는 것이 좋습니다. |
| 1 | INVLPG 또는 MOV to CR3 지침 대신 로컬 TLB 플러시에 하이퍼콜을 사용하는 것이 좋습니다. | |
| 2 | 프로세서 간 인터럽트 대신 원격 TLB 플러시에 하이퍼콜을 사용하는 것이 좋습니다. | |
| 3 | 메모리 매핑된 항목 대신 APIC 레지스터 EOI, ICR 및 TPR에 액세스하기 위해 MSR을 사용하는 것이 좋습니다. | |
| 4 | 하이퍼바이저 제공 MSR을 사용하여 시스템 RESET을 시작하는 것이 좋습니다. | |
| 5 | 이 파티션에 대해 완화된 타이밍을 사용하는 것이 좋습니다. 사용되는 경우 VM은 외부 인터럽트 적시에 전달에 의존하는 Watchdog 시간 제한을 사용하지 않도록 설정해야 합니다. | |
| 6 | DMA 다시 매핑을 사용하는 것이 좋습니다. | |
| 7 | 인터럽트 다시 매핑을 사용하는 것이 좋습니다. | |
| 8 | 예약되었습니다. | |
| 9 | AutoEOI를 더 이상 사용하지 않는 것이 좋습니다. | |
| 10 | VirtualClusterIpi 하이퍼콜을 사용하는 것이 좋습니다. | |
| 11 | 최신 ExProcessorMasks 인터페이스를 사용하는 것이 좋습니다. | |
| 12 | 하이퍼바이저가 Hyper-V 파티션 내에 중첩되어 있음을 나타냅니다. | |
| 13 | MBEC 시스템 호출에 INT를 사용하는 것이 좋습니다. | |
| 14 | 인식된 VMCS 인터페이스를 사용하여 중첩된 하이퍼바이저를 권장합니다. 또한 중첩된 추가 계몽을 사용할 수 있음을 나타냅니다(리프 0x4000000A 참조). | |
| 15 | UseSyncedTimeline – 파티션이 루트 파티션에서 제공하는 QueryPerformanceCounter 바이어스를 사용해야 했음을 나타냅니다. | |
| 16 | 예약됨 | |
| 17 | UseDirectLocalFlushEntire – 게스트가 CR4를 토글해야 임을 나타냅니다. 하이퍼콜을 만드는 것보다 성능이 높으므로 전체 TLB를 플러시하는 PGE입니다. | |
| 18 | NoNonArchitecturalCoreSharing - 코어 공유가 가능하지 않음을 나타냅니다. STIBP의 성능 오버헤드를 방지하기 위해 최적화로 사용할 수 있습니다. | |
| 31-19 | 예약됨 | |
| EBX | 하이퍼바이저에 오류에 대해 알리기 전에 스핀 잠금 오류를 다시 시도하는 권장 횟수입니다. 0xFFFFFFFF 알림 안 했음을 나타냅니다. | |
| ECX | 6-0 | ImplementedPhysicalAddressBits – 시스템의 물리적 프로세서에서 보고한 물리적 주소 너비(MAXPHYADDR)를 보고합니다. 모든 비트에 0이 포함된 경우 이 기능은 지원되지 않습니다. 보고된 값은 실제 주소 비트의 실제 수이며 해당 숫자를 나타내는 데 사용되는 비트 위치가 아닙니다. |
| 31-7 | 예약됨 | |
| EDX | 예약됨 |
하이퍼바이저 구현 제한 - 0x40000005
현재 하이퍼바이저 구현에서 지원되는 확장 제한에 대해 설명합니다. 값이 0이면 하이퍼바이저는 해당 정보를 노출하지 않습니다. 그렇지 않으면 이러한 의미가 있습니다.
| Register | 제공된 정보 |
|---|---|
| EAX | 지원되는 가상 프로세서의 최대 수 |
| EBX | 지원되는 논리 프로세서의 최대 수 |
| ECX | 인터럽트 다시 매핑에 사용할 수 있는 물리적 인터럽트 벡터의 최대 수입니다. |
| EDX | 예약됨 |
구현 하드웨어 기능 - 0x40000006
검색되어 하이퍼바이저에서 현재 사용 중인 하드웨어 관련 기능을 나타냅니다.
| Register | 비트 | 제공된 정보 |
|---|---|---|
| EAX | 0 | APIC 오버레이 지원에 대한 지원이 검색되어 사용 중입니다. |
| 1 | MSR 비트맵에 대한 지원이 검색되어 사용 중입니다. | |
| 2 | 아키텍처 성능 카운터에 대한 지원이 검색되어 사용 중입니다. | |
| 3 | 두 번째 수준 주소 변환에 대한 지원이 검색되어 사용 중입니다. | |
| 4 | DMA 다시 매핑에 대한 지원이 검색되어 사용 중입니다. | |
| 5 | 인터럽트 다시 매핑에 대한 지원이 검색되어 사용 중입니다. | |
| 6 | 메모리 순찰 스크러버가 하드웨어에 있음을 나타냅니다. | |
| 7 | DMA 보호가 사용 중입니다. | |
| 8 | HPET가 요청됩니다. | |
| 9 | 가상 타이머는 휘발성입니다. | |
| 13-10 | 현재 게스트의 하이퍼바이저 수준입니다. 중첩되지 않은 경우 '0'입니다. | |
| 14 | 물리적 대상 모드가 필요합니다. | |
| 15 | 별칭 맵 스위치에 VMFUNC를 사용합니다. | |
| 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는 가상 MSR에 대한 액세스를 설명합니다. EDX는 하이퍼콜에 대한 액세스를 설명합니다.
| Register | 비트 | 제공된 정보 |
|---|---|---|
| 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
중첩된 하이퍼바이저에서 사용할 수 있는 중첩된 가상화 최적화를 나타냅니다.
| Register | 비트 | 제공된 정보 |
|---|---|---|
| EAX | 7-0 | 인식 VMCS 버전(낮음) |
| 15-8 | 인식 VMCS 버전(높음) | |
| 16 | 예약됨 | |
| 17 | 직접 가상 플러시 하이퍼콜에 대한 지원을 나타냅니다. | |
| 18 | HvCallFlushGuestPhysicalAddressSpace 및 HvCallFlushGuestPhysicalAddressList 하이퍼콜(x64 플랫폼)에 대한 지원을 나타냅니다. | |
| 19 | 인식된 MSR 비트맵 사용에 대한 지원을 나타냅니다. | |
| 20 | 페이지 오류 예외 클래스에서 가상화 예외를 결합하기 위한 지원을 나타냅니다. | |
| 21 | VMCS에서 0x00002802(GuestIa32DebugCtl) 필드의 0이 아닌 값에 대한 지원을 나타냅니다. | |
| 22 (이십이) | AMD 플랫폼에서 인식된 TLB에 대한 지원을 나타냅니다. ASID 플러시에서는 NPT에서 파생된 TLB 항목에 영향을 주지 않습니다. 하이퍼콜은 NPT TLB 항목을 무효화하는 데 사용해야 합니다. 또한 HvCallFlushGuestPhysicalAddressSpace 및 HvCallFlushGuestPhysicalAddressList 하이퍼콜에 대한 지원을 나타냅니다. | |
| 31-21 | 예약됨 | |
| EBX | 0 | 인식된 VMCS에서 GuestPerfGlobalCtrl 및 HostPerfGlobalCtrl 필드에 대한 지원을 나타냅니다. |
| 31-1 | 예약됨 | |
| ECX | 예약됨 | |
| EDX | 예약됨 |
버전 관리
하이퍼바이저 버전 정보는 리프 0x40000002로 인코딩됩니다. 주 버전과 서비스 버전이라는 두 가지 버전 번호가 제공됩니다.
주 버전에는 주 버전 및 부 버전 번호와 빌드 번호가 포함됩니다. 이는 Microsoft Windows 릴리스 번호에 해당합니다. 서비스 버전은 주 버전에 대한 변경 내용을 설명합니다.
클라이언트는 버전 범위와 비교하는 대신 CPUID 리프 0x400000030x40000005 를 사용하여 하이퍼바이저 기능을 확인하는 것이 좋습니다.
기능 및 인터페이스 검색(ARM64)
ARM64 아키텍처에서는 기능 및 인터페이스 검색에 다음 메커니즘이 사용됩니다.
- HvCallGetVpRegisters를 통한 HvRegister 쿼리 – 정적 기능 및 버전 정보에 사용됩니다.
- 메모리 매핑 레지스터 – 상태 및 컨트롤 값에 사용됩니다.
하이퍼바이저는 이러한 아키텍처별 인터페이스 외에도 하이퍼콜로 구현된 간단한 절차 인터페이스를 제공합니다.
하이퍼바이저 검색
대부분의 하이퍼바이저 인터페이스를 사용하기 전에 소프트웨어는 먼저 가상화된 환경 내에서 실행 중인지 여부를 결정해야 합니다.
ARM64에서 게스트 소프트웨어는 SMCCC(SMC 호출 규칙) 표준 인터페이스를 사용하여 하이퍼바이저를 검색할 수 있습니다. 검색은 X0의 함수 ID 0xC600FF0 와 함께 HVC 또는 SMC 명령을 사용하여 수행됩니다(이는 VENDOR_HYP_FUNCTION_CODE_UID 64비트 공급업체별 하이퍼바이저 호출에 해당). 이 호출은 imm16/0을 포함하여 SMCCC 규칙을 따릅니다. Microsoft 하이퍼바이저는 GUID 4d32ba58-cd24-4764-8eef-6c7516597024를 나타내는 다음 값을 반환합니다.
| Register | 가치 |
|---|---|
| X0 | 0x4d32ba58 |
| X1 | 0xcd244764 |
| X2 | 0x8eef6c75 |
| X3 | 0x16597024 |
하이퍼바이저가 검색되면 게스트 소프트웨어는 HvCallGetVpRegisters 하이퍼콜을 사용하여 가상 레지스터를 통해 하이퍼바이저 기능을 쿼리할 수 있습니다. 게스트 OS ID 레지스터를 설정하기 전에 몇 가지 키 레지스터를 쿼리하여 부팅하는 동안 하이퍼바이저 기능을 조기에 검색할 수 있습니다.
하이퍼바이저 기능 레지스터
ARM64 플랫폼은 CPUID 지침이 아닌 가상 레지스터를 통해 하이퍼바이저 정보를 쿼리합니다. 이러한 레지스터는 x64 CPUID에 해당하는 정보를 제공하며 HvCallGetVpRegisters를 통해 액세스됩니다. 모든 기능 레지스터는 128비트 값을 반환합니다.
하이퍼바이저 시스템 ID - HvRegisterHypervisorVersion
128비트 값으로 인코딩된 버전 정보를 반환합니다. 레이아웃은 x64 CPUID 리프 0x40000002 동일하며, x64 레지스터 값은 128비트 결과(비트 31-0의 EAX, 비트 63-32의 EBX, 비트 95-64의 ECX, 비트 127-96의 EDX)로 압축됩니다.
하이퍼바이저 기능 식별 - HvRegisterPrivilegesAndFeaturesInfo
x64 CPUID 리프 0x40000003 동일합니다. 현재 파티션 권한에 따라 파티션에 사용할 수 있는 기능을 나타냅니다. 다음 필드를 사용하여 128비트 값을 반환합니다.
| 비트 | 제공된 정보 |
|---|---|
| 31-0 | HV_PARTITION_PRIVILEGE_MASK 비트 31-0에 해당합니다. |
| 63-32 | HV_PARTITION_PRIVILEGE_MASK 비트 63-32에 해당합니다. |
| 64 | 게스트 디버깅 지원을 사용할 수 있습니다. |
| 65 | 성능 모니터 지원을 사용할 수 있습니다. |
| 66 | 물리적 CPU 동적 분할 이벤트에 대한 지원을 사용할 수 있습니다. |
| 67 | 가상 게스트 유휴 상태에 대한 지원을 사용할 수 있습니다. |
| 68 | 하이퍼바이저 절전 모드 상태에 대한 지원을 사용할 수 있습니다. |
| 69 | NUMA 거리 쿼리를 지원할 수 있습니다. |
| 70 | 타이머 빈도 확인에 대한 지원을 사용할 수 있습니다. |
| 71 | 가상 머신 검사 주입에 대한 지원을 사용할 수 있습니다. |
| 72 | 게스트 크래시 레지스터에 대한 지원을 사용할 수 있습니다. |
| 73 | 예약되었습니다. |
| 74 | DisableHypervisorAvailable. |
| 75 | 예약되었습니다. |
| 76 | SintPollingModeAvailable. |
| 77 | 직접 가상 타이머를 사용합니다. |
| 127-78 | 예약되었습니다. |
구현 권장 사항 - HvRegisterFeaturesInfo
x64 CPUID 리프 0x40000004 동일합니다. 하이퍼바이저에서 최적의 성능을 위해 OS 구현을 권장하는 동작을 나타냅니다. 128비트 값을 반환합니다.
| 비트 | 제공된 정보 |
|---|---|
| 0 | UseHvRegisterForReset - ARM64에서는 항상 false입니다(파티션은 PSCI SYSTEM_RESET 대신 사용해야 함). |
| 1 | 이 파티션에 대해 완화된 타이밍을 사용하는 것이 좋습니다. 사용되는 경우 VM은 외부 인터럽트 적시에 전달에 의존하는 Watchdog 시간 제한을 사용하지 않도록 설정해야 합니다. |
| 2 | VirtualClusterIpi 하이퍼콜을 사용하는 것이 좋습니다. ARM64에서는 루트 파티션(ICC_SGI1R_EL1 직접 사용해야 하는)에 대해 false이고 게스트 파티션의 경우 true입니다. |
| 3 | 최신 ExProcessorMasks 인터페이스를 사용하는 것이 좋습니다. |
| 4 | 하이퍼바이저가 Hyper-V 파티션 내에 중첩되어 있음을 나타냅니다. |
| 5 | 파티션이 루트 파티션에서 제공하는 QueryPerformanceCounter 바이어스를 사용해야 했음을 나타냅니다. |
| 20-6 | 예약됨 |
| 21 | UseHypercallForMmioAccess |
| 22 (이십이) | UseGpaPinningHypercall |
| 23 | WakeVps |
| 25-24 | 예약됨 |
| 26 | MapPartitionEventLogBuffer |
| 31-27 | 예약됨 |
| 63-32 | 하이퍼바이저에 오류에 대해 알리기 전에 스핀 잠금 오류를 다시 시도하는 권장 횟수입니다. 0xFFFFFFFF 알림 안 했음을 나타냅니다. |
| 127-64 | 예약됨 |
하이퍼바이저 구현 제한 - HvRegisterImplementationLimitsInfo
현재 하이퍼바이저 구현에서 지원되는 확장 제한에 대해 설명합니다. 값이 0이면 하이퍼바이저에서 해당 정보를 노출하지 않습니다. x64 CPUID 리프 0x40000005 동일한 레이아웃의 128비트 값을 반환하며 x64 레지스터 값은 128비트 결과로 압축됩니다(EAX는 비트 31-0, EBX는 비트 63-32, ECX는 비트 95-64, EDX는 비트 127-96).
하드웨어 기능 구현 - HvRegisterHardwareFeaturesInfo
x64 CPUID 리프 0x40000006 동일합니다. 검색되어 하이퍼바이저에서 현재 사용 중인 하드웨어 관련 기능을 나타냅니다. 128비트 값을 반환합니다.
| 비트 | 제공된 정보 |
|---|---|
| 0 | 아키텍처 성능 카운터에 대한 지원이 검색되어 사용 중입니다. |
| 1 | 두 번째 수준 주소 변환에 대한 지원이 검색되어 사용 중입니다. |
| 2 | DMA 다시 매핑에 대한 지원이 검색되어 사용 중입니다. |
| 3 | 인터럽트 다시 매핑에 대한 지원이 검색되어 사용 중입니다. |
| 4 | 메모리 순찰 스크러버가 하드웨어에 있음을 나타냅니다. |
| 5 | DMA 보호가 사용 중입니다. |
| 6 | 가상 타이머는 휘발성입니다. |
| 127-7 | 예약됨 |
버전 관리
하이퍼바이저 버전 정보는 HvRegisterHypervisorVersion으로 인코딩됩니다. 형식은 해당하는 x64와 일치합니다.