하드웨어 가상화 지원 (VT-x/AMD-V)
핵심 개념
섹션 제목: “핵심 개념”하드웨어 가상화 지원(VT-x/AMD-V)은 CPU가 가상화 전용 모드와 명령어를 제공하여, 게스트 OS를 효율적으로 실행할 수 있게 하는 하드웨어 기능이다.
초기 가상화는 Binary Translation(바이너리 변환)으로 구현했는데, 게스트 OS의 특권 명령어를 하나하나 변환해야 해서 복잡하고 오버헤드가 컸다. 하드웨어 가상화는 이 문제를 CPU 차원에서 근본적으로 해결한다.
동작 원리
섹션 제목: “동작 원리”듀얼 모드에서 멀티 모드로
섹션 제목: “듀얼 모드에서 멀티 모드로”기존의 커널 모드 / 사용자 모드 이분법을 확장하여 Root 모드 / Non-root 모드를 추가했다.
- Root mode (Host): VMM(Virtual Machine Monitor)이 실행되는 모드. 모든 하드웨어 자원에 완전한 접근 가능.
- Non-root mode (Guest): 게스트 OS가 실행되는 모드. 게스트가 가상화된 자원에 접근하면 자동으로 VMM으로 제어가 전달된다(VM Exit).
Intel VT-x
섹션 제목: “Intel VT-x”| 구성 요소 | 설명 |
|---|---|
| VMX root / non-root | 두 가지 실행 모드로 호스트와 게스트 분리 |
| VMCS (Virtual Machine Control Structure) | 게스트 상태, 호스트 상태, VM Exit 조건 등을 저장하는 구조체 |
| VM Entry | Root → Non-root 전환. VMCS에서 게스트 상태 복원 |
| VM Exit | Non-root → Root 전환. 게스트 상태를 VMCS에 저장하고 VMM에 제어 전달 |
| EPT (Extended Page Tables) | 게스트 물리 주소 → 호스트 물리 주소 변환을 하드웨어로 처리 |
AMD AMD-V
섹션 제목: “AMD AMD-V”| 구성 요소 | 설명 |
|---|---|
| Host / Guest mode | Intel의 root / non-root에 대응 |
| VMCB (Virtual Machine Control Block) | Intel의 VMCS에 대응하는 구조체 |
| RVI (Rapid Virtualization Indexing) | Intel의 EPT에 대응하는 하드웨어 페이지 테이블 |
EPT / RVI (하드웨어 중첩 페이지 테이블)
섹션 제목: “EPT / RVI (하드웨어 중첩 페이지 테이블)”가상 머신에서는 주소 변환이 두 단계로 이루어진다.
EPT/RVI가 없으면 VMM이 Shadow Page Table을 소프트웨어로 관리해야 한다. EPT/RVI를 사용하면 CPU의 TLB가 양쪽 변환을 하드웨어로 처리하여 오버헤드가 크게 감소한다.
DMA 가상화 (VT-d / IOMMU)
섹션 제목: “DMA 가상화 (VT-d / IOMMU)”I/O 디바이스가 DMA로 메모리에 직접 접근할 때도 가상화가 필요하다.
이를 통해 디바이스를 VM에 직접 할당(passthrough)하여 거의 네이티브 수준의 I/O 성능을 달성할 수 있다.
인터럽트 가상화
섹션 제목: “인터럽트 가상화”Interrupt Remapping을 통해 VMM 개입 없이 인터럽트를 게스트에 직접 전달할 수 있다. 기존에는 모든 인터럽트가 VMM을 거쳐야 했지만, 하드웨어 지원으로 이 오버헤드를 제거한다.
ARM (ARMv8) 가상화
섹션 제목: “ARM (ARMv8) 가상화”ARM 아키텍처는 **Exception Level 2 (EL2)**를 하이퍼바이저 전용으로 제공한다.
게스트 OS가 하이퍼바이저의 서비스를 요청할 때 HVC (Hypervisor Call) 명령어를 사용한다.
Thin Hypervisor
섹션 제목: “Thin Hypervisor”macOS의 Hypervisor.framework처럼, OS가 자체적으로 가상화 API를 제공하는 경량 하이퍼바이저 방식도 있다. 별도의 커널 모듈 설치 없이 하드웨어 가상화 기능을 활용할 수 있다.
하드웨어 가상화 지원 확인:
# Linux에서 VT-x/AMD-V 지원 확인grep -E 'vmx|svm' /proc/cpuinfo
# vmx = Intel VT-x# svm = AMD AMD-V
# macOS에서 확인sysctl kern.hv_support# kern.hv_support: 1 (지원)QEMU/KVM에서 하드웨어 가상화 활용:
# KVM(하드웨어 가상화) 사용qemu-system-x86_64 -enable-kvm -m 4G -cpu host disk.img
# 하드웨어 가상화 없이 (소프트웨어 에뮬레이션, 매우 느림)qemu-system-x86_64 -m 4G disk.imgVT-d(IOMMU)를 활용한 GPU 패스스루:
# IOMMU 활성화 (커널 파라미터)intel_iommu=on
# GPU를 vfio-pci 드라이버에 바인딩echo "10de 1b80" > /sys/bus/pci/drivers/vfio-pci/new_id
# VM에 GPU 직접 할당qemu-system-x86_64 -enable-kvm \ -device vfio-pci,host=01:00.0 \ -m 8G disk.img관련 개념
섹션 제목: “관련 개념”- 트랩 앤 에뮬레이트 (Trap-and-Emulate) - 하드웨어 가상화 이전의 기본 가상화 기법
- 바이너리 변환 (Binary Translation) - 하드웨어 가상화가 대체한 소프트웨어 기반 x86 가상화 기법
- 가상화 (Virtualization) - 가상화의 전체 개념과 다양한 방식 분류
- 하이퍼바이저 유형 (Type 0/1/2 Hypervisor) - 하드웨어 가상화를 활용하는 하이퍼바이저의 유형별 분류
- VMM 메모리 관리 (VMM Memory Management) - EPT/RVI와 연계되는 VMM의 메모리 관리 기법