전가상화
더 많은 작업
- Full Virtualization; 완전 가상화
- 하드웨어를 완전히 가상화하여, 게스트 운영체제를 전혀 고치지 않고 그대로 가상 머신에서 실행하는 가상화 방식
전가상화에서는 하이퍼바이저가 실제 하드웨어와 기능적으로 똑같은 가상 하드웨어(CPU, 메모리, 디스크, 네트워크 장치 등)를 게스트에게 보여 준다. 게스트 운영체제는 자기가 가상 머신 위에서 돌고 있다는 사실을 몰라도 되므로, 윈도나 리눅스 같은 상용 운영체제를 수정 없이 설치해 쓸 수 있다. 이것이 게스트 커널을 고쳐야 하는 반가상화와의 가장 큰 차이다.
ADP 교재는 클라우드 인프라 기술 가운데 CPU 가상화를 설명하면서 전가상화와 반가상화를 비교한다.
게스트 운영체제는 원래 가장 높은 특권 수준에서 돌도록 만들어졌다. 하지만 가상 머신에서는 하이퍼바이저가 그 자리를 차지하므로, 게스트가 특권 명령을 실행하면 하이퍼바이저가 가로채서(trap) 대신 처리해야 한다. 이를 '트랩 후 에뮬레이션(trap-and-emulate)'이라고 한다.
문제는 예전 x86 구조가 이런 가상화를 염두에 두지 않았다는 점이다. Xen 논문(2003)은 x86에서 일부 감독자(supervisor) 명령이 특권이 부족한 상태로 실행되면 트랩을 일으키지 않고 조용히 실패해 버려, 하이퍼바이저가 가로챌 수 없다고 지적한다. x86에서 전가상화를 구현하는 방법은 이 문제를 어떻게 푸느냐에 따라 나뉜다.
| 방식 | 원리 | 특징 |
|---|---|---|
| 바이너리 번역(binary translation) | 하이퍼바이저가 게스트 커널의 기계어를 실행 직전에 살펴, 문제가 되는 명령을 트랩이나 안전한 명령으로 바꿔 쓴다. Xen 논문은 VMware ESX Server가 게스트 기계어의 일부를 동적으로 다시 써서 트랩을 넣는다고 설명한다. | 하드웨어 지원 없이 x86에서 전가상화를 가능하게 했지만, 번역·실행·캐시 비용이 든다 |
| 하드웨어 지원 가상화(hardware-assisted virtualization) | CPU에 가상화 전용 실행 모드를 추가해, 게스트가 민감한 명령을 실행하면 CPU가 자동으로 하이퍼바이저에게 제어를 넘긴다. Intel VT-x, AMD-V가 여기에 해당한다. | 번역 없이 게스트 커널을 그대로 실행. 오늘날 전가상화의 일반적인 구현 방식 |
| 전체 에뮬레이션 | CPU 명령까지 소프트웨어로 해석·번역해 실행한다. QEMU의 TCG(Tiny Code Generator)처럼 다른 아키텍처의 CPU도 흉내 낼 수 있다. | 호환성은 가장 높지만 가장 느리다 |
VirtualBox 기술 문서는 Intel VT-x의 동작을 다음과 같이 설명한다.
- CPU에 VMX root 모드와 non-root 모드라는 두 실행 모드가 생긴다. 하이퍼바이저는 root 모드에서, 게스트는 non-root 모드에서 돈다.
- non-root 모드에서도 링 0~3의 특권 수준이 그대로 있으므로, 게스트 커널은 원래대로 링 0에서 실행된다.
- root 모드에서 non-root 모드로 들어가는 것을 VM entry, 그 반대를 VM exit라고 한다. 어떤 게스트 동작이 VM exit를 일으킬지는 VMCS(Virtual Machine Control Structure)라는 구조체로 정한다.
- AMD는 같은 목적의 기술을 AMD-V라고 부른다. 둘은 세부는 다르지만 원리는 비슷하다.
- 단점도 있다. VM exit는 비용이 커서, 트랩이 매우 잦은 장치를 에뮬레이션하면 오히려 느려질 수 있다.
메모리 쪽에서는 하드웨어가 주소 변환을 한 단계 더 해 주는 Intel EPT, AMD NPT(RVI) 같은 기능이 섀도 페이지 테이블의 부담을 덜어 준다. 자세한 내용은 메모리 가상화 문서를 참고한다.
| 장점 | 단점 |
|---|---|
| 게스트 운영체제를 고칠 필요가 없어 윈도 같은 상용 운영체제도 그대로 실행 | 하드웨어 지원이 없으면 바이너리 번역·에뮬레이션 비용으로 성능이 떨어짐 |
| 게스트가 하드웨어와 완전히 분리되어 격리성이 좋음 | 하이퍼바이저가 모든 하드웨어를 흉내 내야 하므로 구현이 복잡함 |
| 하이퍼바이저가 같은 가상 하드웨어를 보여 주므로 실제 하드웨어가 달라도 같은 게스트를 실행 가능 | 장치 입출력을 에뮬레이션하면 오버헤드가 커서, 실제로는 반가상화 드라이버를 함께 쓰는 경우가 많음 |
- VMware ESX Server(현재의 ESXi): Xen 논문이 나온 2003년 무렵에는 바이너리 번역으로 x86 전가상화를 구현했다.
- KVM: 공식 사이트는 KVM을 가상화 확장(Intel VT 또는 AMD-V)을 갖춘 x86 하드웨어에서 동작하는 리눅스용 전가상화 솔루션이라고 소개하며, 수정하지 않은 리눅스·윈도 이미지를 실행할 수 있다.
- 마이크로소프트 Hyper-V: Intel VT나 AMD-V 같은 하드웨어 지원 가상화를 요구한다.
- Xen HVM 게스트: Xen 설정 문서는 HVM 도메인을 BIOS, 디스크, 네트워크 장치를 에뮬레이션하는 완전 가상화된 컴퓨터라고 설명한다.
- Oracle VirtualBox, QEMU
| 항목 | 전가상화 | 반가상화 |
|---|---|---|
| 게스트 OS 수정 | 필요 없음 | 커널 수정 필요(하이퍼바이저를 아는 게스트) |
| 특권 명령 처리 | 하이퍼바이저가 가로채거나(트랩), 바이너리 번역, 하드웨어 지원으로 처리 | 게스트가 하이퍼콜(hypercall)로 하이퍼바이저에 직접 요청 |
| 게스트가 가상화를 아는가 | 모름 | 앎 |
| 지원 OS | 상용 OS를 포함한 거의 모든 OS | 소스를 고칠 수 있는 OS 위주(리눅스 등) |
| 성능 | 하드웨어 지원이 없으면 번역 비용으로 느림. 하드웨어 지원이 있으면 크게 개선 | 하드웨어 지원 없이도 원래 성능에 가까움 |
| 하드웨어 지원 필요 | x86에서는 바이너리 번역을 쓰지 않는 한 VT-x/AMD-V 필요 | 필요 없음 |
| 예 | VMware ESXi, KVM, Hyper-V, Xen HVM | Xen PV |
오늘날에는 둘을 섞어 쓰는 경우가 많다. CPU와 메모리는 하드웨어 지원 전가상화로 처리하고, 디스크·네트워크 같은 입출력만 반가상화 드라이버(virtio 등)를 쓰는 식이다.
- 전가상화는 게스트 OS를 수정하지 않는다. 반가상화는 게스트 OS 커널을 수정한다. 이 구분이 가장 자주 출제된다.
- x86 전가상화의 구현 방법으로 바이너리 번역과 하드웨어 지원 가상화(Intel VT-x, AMD-V)를 기억한다.
- 전가상화는 호환성이 높지만 하드웨어 지원이 없으면 성능 부담이 있고, 반가상화는 성능은 좋지만 OS 수정이 필요하다는 장단점 비교가 나온다.
- ADP 교재 분류로는 CPU 가상화의 하위 내용이며, 메모리 가상화·I/O 가상화와 함께 클라우드 인프라 기술을 이룬다.
- Barham, P. et al. (2003). Xen and the Art of Virtualization. SOSP 2003 (University of Cambridge Computer Laboratory)
- Oracle VirtualBox User Manual - Technical Background (Hardware Virtualization)
- KVM - Main Page
- Microsoft Learn - Hyper-V Architecture
- Xen Project - xl.cfg(5) Selecting Guest Type
- QEMU Documentation - Introduction