다음을 통해 공유


가상 MMU

각 파티션에 의해 노출되는 가상 머신 인터페이스에는 MMU(메모리 관리 단위)가 포함됩니다. 하이퍼바이저 파티션에 의해 노출되는 가상 MMU는 일반적으로 기존 MMU와 호환됩니다.

가상 MMU 구현은 아키텍처에 따라 다릅니다. 이 문서에서는 플랫폼별 섹션이 명확하게 표시된 x64 및 ARM64 플랫폼에 대해 설명합니다.

가상 MMU 개요

가상 프로세서는 가상 주소에서 (게스트) 실제 주소로의 번역을 캐시하는 가상 메모리 및 가상 TLB(변환 조회 버퍼)를 노출합니다. 논리 프로세서의 TLB와 마찬가지로 가상 TLB는 일관성이 없는 캐시이며 이 비 일관성은 게스트에게 표시됩니다. 하이퍼바이저는 TLB를 플러시하는 작업을 노출합니다. 게스트는 이러한 작업을 사용하여 잠재적으로 일관성이 없는 항목을 제거하고 가상 주소 번역을 예측 가능하게 만들 수 있습니다.

Compatibility

하이퍼바이저에서 노출되는 가상 MMU는 일반적으로 기본 프로세서 아키텍처 내에서 찾은 물리적 MMU와 호환됩니다.

x64 플랫폼

x64 플랫폼의 가상 MMU는 일반적으로 x64 프로세서 내에 있는 물리적 MMU와 호환됩니다. 다음과 같은 게스트 관찰 가능한 차이점이 있습니다.

  • CR3입니다. PWT 및 CR3. PCD 비트는 일부 하이퍼바이저 구현에서 지원되지 않을 수 있습니다. 이러한 구현에서 게스트가 MOV를 통해 이러한 플래그를 CR3 명령 또는 작업 게이트 스위치로 설정하려는 시도는 무시됩니다. HvSetVpRegisters 또는 HvCallSwitchVirtualAddressSpace를 통해 이러한 비트를 프로그래밍 방식으로 설정하려고 하면 오류가 발생할 수 있습니다.
  • 리프 페이지 테이블 항목 내의 PWT 및 PCD 비트(예: 4K 페이지의 경우 PTE 및 큰 페이지에 대한 PDE)는 매핑되는 페이지의 캐시 가능성을 지정합니다. 리프가 아닌 페이지 테이블 항목 내의 PAT, PWT 및 PCD 비트는 계층 구조에서 다음 페이지 테이블의 캐시 가능성을 나타냅니다. 일부 하이퍼바이저 구현은 이러한 플래그를 지원하지 않을 수 있습니다. 이러한 구현에서 하이퍼바이저에서 수행하는 모든 페이지 테이블 액세스는 쓰기 저장 캐시 특성을 사용하여 수행됩니다. 이는 특히 페이지 테이블 항목에 기록된 액세스 및 더티 비트에 영향을 줍니다. 게스트가 리프가 아닌 페이지 테이블 항목 내에서 PAT, PWT 또는 PCD 비트를 설정하는 경우 가상 프로세서가 해당 페이지 테이블로 매핑된 페이지에 액세스할 때 "지원되지 않는 기능" 메시지가 생성될 수 있습니다.
  • 일부 하이퍼바이저 구현에서는 CR0.CD(캐시 사용 안 함) 비트가 지원되지 않을 수 있습니다. 이러한 구현에서 CR0.CD 비트는 0으로 설정해야 합니다. 게스트가 MOV를 통해 이 플래그를 CR0 명령으로 설정하려는 시도는 무시됩니다. HvSetVpRegisters를 통해 프로그래밍 방식으로 이 비트를 설정하려고 하면 오류가 발생합니다.
  • PAT(페이지 주소 유형) MSR은 VP별 레지스터입니다. 그러나 파티션의 모든 가상 프로세서가 PAT MSR을 동일한 값으로 설정하면 새 효과는 파티션 전체의 효과가 됩니다.
  • 보안 및 격리의 이유로 INVD 명령은 WBINVD 명령처럼 작동하도록 가상화되며 몇 가지 차이점이 있습니다. 보안을 위해 CLFLUSH를 대신 사용해야 합니다.

레거시 TLB 관리 작업

각 아키텍처는 프로세서의 TLL을 관리하는 네이티브 메커니즘을 제공합니다. 이러한 메커니즘은 하이퍼바이저에서 가상화되며 로컬 가상 프로세서에만 영향을 줍니다. 다른 가상 프로세서에서 변환을 무효화하려면 소프트웨어에서 아키텍처별 프로세서 간 인터럽트 또는 다음 섹션에 설명된 향상된 TLB 관리 하이퍼콜을 사용해야 합니다.

x64 플랫폼

x64 아키텍처는 다음과 같은 TLB 관리 메커니즘을 제공합니다.

  • INVLPG 명령은 프로세서의 TLB에서 단일 페이지에 대한 번역을 무효화합니다. 지정된 가상 주소가 원래 4K 페이지로 매핑된 경우 이 페이지의 번역이 TLB에서 제거됩니다. 지정된 가상 주소가 원래 "큰 페이지"(MMU 모드에 따라 2MB 또는 4MB)로 매핑된 경우 전체 큰 페이지에 대한 변환이 TLB에서 제거됩니다. INVLPG 명령은 전역 및 비글로벌 번역을 모두 플러시합니다. 전역 번역은 페이지 테이블 항목 내에 "global" 비트가 설정된 것으로 정의됩니다.
  • CR3을 수정하는 MOV-CR3 명령 및 태스크 스위치는 프로세서의 TLB 내의 모든 비 전역 페이지에 대한 번역을 무효화합니다.
  • CR4를 수정하는 MOV to CR4 명령입니다. PGE(전역 페이지 사용) 비트, CR4. PSE(페이지 크기 확장) 비트 또는 CR4. PAE(페이지 주소 확장) 비트는 프로세서의 TLB 내의 모든 번역(전역 및 비 전역)을 무효화합니다.

이러한 모든 무효화 작업은 하나의 프로세서에만 영향을 줍니다. 다른 프로세서에서 번역을 무효화하려면 소프트웨어 기반의 "TLB 격추" 메커니즘(일반적으로 프로세스 간 인터럽트를 사용하여 구현됨)을 사용해야 합니다.

ARM64 플랫폼

ARM64 아키텍처는 TLBI(TLB Invalidate) 지침을 통해 TLB 관리 메커니즘을 제공합니다. 자세한 내용은 ARM 아키텍처 설명서를 참조하세요.

참고: 설정/방법 캐시 유지 관리 지침(예: DC ISW, DC CSW, DC CISW)은 가상화된 환경에서 지원되지 않으며 no-ops로 처리됩니다.

가상 TLB 향상된 기능

앞에서 설명한 레거시 TLB 관리 메커니즘을 지원하는 것 외에도 x64 플랫폼에서 하이퍼바이저는 게스트가 가상 TLB를 보다 효율적으로 관리할 수 있도록 하는 향상된 기능 집합을 지원합니다. 이러한 향상된 작업은 레거시 TLB 관리 작업과 상호 교환하여 사용할 수 있습니다.

하이퍼바이저는 TLL을 무효화하기 위해 다음 하이퍼콜을 지원합니다.

하이퍼콜 Description
HvCallFlushVirtualAddressSpace 지정된 주소 공간에 속하는 모든 가상 TLB 항목을 무효화합니다.
HvCallFlushVirtualAddressSpaceEx HvCallFlushVirtualAddressSpace와 마찬가지로 스파스 VP 집합을 입력으로 사용합니다.
HvCallFlushVirtualAddressList 지정된 주소 공간의 일부를 무효화합니다.
HvCallFlushVirtualAddressListEx HvCallFlushVirtualAddressList와 마찬가지로 스파스 VP 집합을 입력으로 사용합니다.

일부 시스템(하드웨어에서 충분한 가상화 지원이 있는 시스템)에서는 로컬 또는 원격(프로세서 간) TLB 무효화에 대한 레거시 TLB 관리 지침이 더 빠를 수 있습니다. 최적의 성능에 관심이 있는 게스트는 CPUID 리프 0x40000004 사용하여 하이퍼콜을 사용하여 구현할 동작을 결정해야 합니다.

  • UseHypercallForAddressSpaceSwitch: 이 플래그가 설정되면 호출자는 HvCallSwitchVirtualAddressSpace를 사용하여 주소 공간 간에 전환하는 것이 더 빠르다고 가정해야 합니다. 이 플래그가 명확한 경우 MOV-CR3 명령을 사용하는 것이 좋습니다.
  • UseHypercallForLocalFlush: 이 플래그가 설정된 경우 호출자는 가상 TLB에서 하나 이상의 페이지를 플러시하기 위해 하이퍼콜(INVLPG 또는 MOV에서 CR3으로)을 사용하는 것이 더 빠르다고 가정해야 합니다.
  • UseHypercallForRemoteFlushAndLocalFlushEntire: 이 플래그가 설정되면 호출자는 하이퍼콜을 사용하는 것이 더 빠르다고 가정해야 합니다(게스트로 생성된 프로세서 간 인터럽트 사용이 아니라). 가상 TLB에서 하나 이상의 페이지를 플러시하는 것이 더 빠릅니다.

ARM64 플랫폼에서 게스트는 일반적으로 TLB 관리에 아키텍처 메커니즘을 사용해야 합니다.

메모리 캐시 컨트롤 개요

하이퍼바이저는 게스트의 GVA 공간 내에 매핑된 페이지에 대해 게스트 정의 캐시 가능성 설정을 지원합니다. 사용 가능한 캐시 가능성 설정 및 해당 의미에 대한 자세한 설명은 Intel 또는 AMD 설명서를 참조하세요.

가상 프로세서가 GVA 공간을 통해 페이지에 액세스하는 경우 하이퍼바이저는 페이지를 매핑하는 데 사용되는 게스트 페이지 테이블 항목 내에서 캐시 특성 비트(PAT, PWT 및 PCD)를 적용합니다. 이 세 비트는 파티션의 PAT(페이지 주소 유형) 레지스터에 대한 인덱스로 사용하여 페이지의 최종 캐시 가능성 설정을 조회합니다.

GPA 공간을 통해 직접 액세스하는 페이지(예: CR0.PG 지워지므로 페이징이 비활성화된 경우)는 MTRR로 정의된 캐시 기능을 사용합니다. 하이퍼바이저 구현이 가상 MTRR을 지원하지 않는 경우 WB 캐시 효율성이 가정됩니다.

파티션과 하이퍼바이저 간에 캐시 형식 혼합

게스트는 해당 GPA 공간 내의 일부 페이지에 하이퍼바이저에서 액세스할 수 있음을 알고 있어야 합니다. 다음 목록은 완전하지는 않지만 몇 가지 예를 제공합니다.

  • 하이퍼콜에 대한 입력 또는 출력 매개 변수가 포함된 페이지
  • 하이퍼콜 페이지, SynIC SIEF 및 SIM 페이지 및 통계 페이지를 포함한 모든 오버레이 페이지
  • VP 지원 페이지 및 기타 하이퍼바이저 인터페이스 페이지

하이퍼바이저는 항상 Write-Back 캐시 가능한 특성을 사용하여 하이퍼콜 매개 변수 및 오버레이 페이지에 대한 액세스를 수행합니다.

  • x64 플랫폼에서: PAT를 통한 WB(Write-Back) 캐시 유형
  • ARM64 플랫폼에서: 내부 및 외부 쓰기 저장, 읽기 할당, Write-Allocate 특성이 있는 일반 메모리

하이퍼바이저는 항상 WB 캐시 가능성 설정을 사용하여 하이퍼콜 매개 변수 및 오버레이 페이지에 대한 액세스를 수행합니다.