가상화안에 또다른 가상화를, Nested Virtualization

Windows Server 2008에서 Hyper-V를 출시한 이후, 많은 고객분들께서 말씀하시던 기술이 바로 가상화 안에 또다른 가상화를 설치하고, 운영할 수 있느냐에 대한 부분이었습니다. 가상화 기술안에서 또다른 가상화 기술을 동작시키는 것은 이야기상으로는 매우 간단할 수 있지만, 기술적으로는 조금 생각을 해봐야 하는 측면이었습니다.

우리가 사용하는 Hypervisor의 경우에는 CPU의 가상화 기술(Intel-VT, AMD-V)을 기반으로 동작하는 기술입니다. Hypervisor가 전체적인 하드웨어를 하단에 놓고, 실제 운영 체제를 포함하여, 가상 컴퓨터(VM)까지 Hypervisor의 통제하에 하드웨어를 사용하는 형태이죠.

여기서 중요한 단어가 하나 나오게 됩니다. 바로 추상화(Abstraction)이라는 단어입니다.

image

상단의 그림은 Hypervisor 위에서 동작하는 VM의 하드웨어 모습입니다. 네트워크 어댑터, 디스크 드라이브, 디스플레이 어댑터등이 모두 Microsoft Hyper-V 관련된 이름으로 표시되고 있습니다. (Intel® 82599로 표시된 NIC은 SR-IOV와 관련된 기술, 관련 포스팅, 이기에, 조금 다른 의미입니다.) Microsoft Hyper-V라고 표시되는 하드웨어는 실제 하드웨어를 바로 VM이 사용하는 것이 아니라, Hypervisor의 통제를 받고 있다는 의미와 함께, 실제 하드웨어를 접근하지 않는 모조의 하드웨어 형태 접근을 의미합니다. 이를 Hyper-V에서는 Synthetic Device(모조 장치)라고 합니다. 가장 중요한 것은 하드웨어를 직접 쓰지 않는다는 것입니다.

이렇게 되면, Intel-VT, AMD-V와 같은 형태의 CPU 기술도 VM에서는 인지하지 못하는 기술입니다. 그러한 이유로 Hyper-V를 설치한 후, 실제 서버에서 CPU 관련 유틸리티를 실행하면, 가상화 기술이 검색되지 않는다고 뜨게 되죠. 상단 그림이 이러한 구조를 잘 보여주고 있습니다.

  • Level 0 : 실제 하드웨어 및 Hypervisor가 사용하는 레벨
  • Level 1 Root : Level 0 Hypervisor 및 VM을 관리하는 호스트 운영 체제
  • Level 1 Guest : 우리가 잘 알고 있는 VM

Windows 10 TH2(10565 이상), 그리고 Windows Server 2016 TP4에서는 Level 1 Guest를 위한 vCPU에 가상화 관련 기술을 제공하는 형태가 되었습니다. 이를 이용하여, VM내 가상화 기술을 사용할 수 있게 되었죠.

  • Level 2 Root : Hyper-V가 설치된 VM
  • Level 2 Guest : Hyper-V가 설치된 VM내에서 동작하는 VM

이렇게 가상화 안에서 또다른 가상화를 지원한다는 의미를 Nested Virtualization이라고 합니다. 둥지안에 둥지.. Smile 의미적으론 이해가 되시죠? 현재 Nested Virtualization은 Preview 단계이며, Intel-VT만을 지원하고 있습니다. 이에 Hyper-V만을 지원하고 있습니다. (차후 정식 버전에서는 VT를 지원하기에, VT를 사용하는 모든 가상화 기술을 지원할 예정입니다.)

사용하는 방법은 매우 쉽습니다. GUI 설정이 없기에, Windows PowerShell에서만 설정할 수 있습니다.

image

VM Processor를 Get-VMProcessor로 확인해보면, ExposeVirtualizationExtensions 속성이 False입니다. 이 속성이 바로 VT와 관련된 속성입니다. 이를 Set-VMProcessor -VMNAME <VM이름> -ExposeVirtualizationExtentions:$True 로 설정하시면 됩니다.

이후, VM내에 Windows 10 TH2(10576+), Windows Server 2016 TP4를 설치하시면, Hyper-V를 사용할 수 있습니다. (현재 하위 버전 안됨)

현재 Nested Virtualization은 Preview 단계이기에, 몇가지 제약사항이 있습니다. (정식 버전시 변경 예정)

  • VM내에서 Device Guard를 사용할 수 없습니다. (VSM 및 vTPM 동작 안됨)
  • 호스트에 가상화 기반 보안이 적용되었을 경우에도 안됩니다.
  • Nested Virtualization을 사용할 VM에서 동적 메모리 사용할 수 없습니다.
  • Windows Server 2016부터 추가될 운영 중 VM 메모리 수정도 안됩니다.
  • Nested Virtualization이 적용된 VM에서 검사점(Checkpoint)를 구성할 수 없습니다.
  • 실시간 마이그레이션은 현재 지원하지 않습니다.
  • VM 운영 중 저장/복원이 불가능합니다.

Nested Virtualization을 기반으로, 다음에 소개해드릴 Windows Container 기술의 Hyper-V Container가 동작하게 됩니다. Smile 가상화 안에 가상화 Nested Virtualization을 통해, 보다 많은 구성 시나리오가 앞으로 사용될 수 있을거라 생각합니다.