Virtualization - 전가상화(Full Virtualization)와 반가상화(Para-Virtualization)의 차이
전가상화(Full Virtualization)와 반가상화(Para-Virtualization)의 차이를 설명한다.
Virtualization - 전가상화(Full Virtualization)와 반가상화(Para-Virtualization)의 차이
개요
- 전가상화(Full Virtualization)와 반가상화(Para-Virtualization)는 가상화를 구성하다보면 자주 사용하는 용어이다.
- 간단하게는 Guest OS가 자기가 가상 환경인지 아는지 모르는지의 차이다.
- 그리고 전반적으로 안정성 또는 신뢰성에 연관 되어있기에 엔지니어는 알아야하는 정의다.
- 핵심적으로 아주 간단하게는 다음과 같이 정리가 된다.
- 전가상화: 호환성↑ / 성능↓
- 반가상화: 호환성↓ / 성능↑
전가상화(Full Virtualization)
Proxmox VE Administration Guide 내의 Architecture
전가상화란 다음과 같은 정의를 내포하고 있다.
- Guest OS가 자기 자신이 가상 환경인지를 모른다.
- Hardware에 대해 완전한 emulation을 하여(Hypervisor) 기존 OS 그대로 사용이 가능하다.
- Hardware emulitaion을 사용하는 만큼 Host와의 호환성이 좋다.
- Hypervisor 내에서 처리하는 요소(virtual network, virtual disk 등)가 많아 overhead가 발생한다.
아주 간단하게 정리하자면 시장에서 많이 쓰이면서 많은 사람들이 알고있는 가상화 솔루션(VMware, Proxmox, Linux KVM 등)은 전가상화이다.
반가상화(Para-Virtualization)
Xen Project Software Overview 내의 Architecture
반가상화란 다음과 같은 정의를 내포하고 있다.
- Guest OS가 자기 자신이 가상 환경인지를 알고 있다.
- Guest OS의 Kernel을 수정하여 Hypervisor와 직접적으로 통신을 한다.
(ex. Xen PV, VirtIO 등) - Kernel에 대한 직접적인 수정이 이뤄지기에 호환성은 전가상화보다 안좋다.
(ex. Driver mismatch, 정해진 IO driver 사용 등) - Hypervisor와 바로 통신을 하기에 overhead가 적고 성능이 매우 좋다.
정리하자면 전가상화 대비 반가상화는 호환성이 좋진 않지만 추가 설정(Kernel 수정 및 driver 적용)을 해주면 성능 극대화가 가능하다.
VirtIO
반가상화에서 필수로 알아야하는 모듈은 VirtIO이다.
VirtIO란?
- 가상 환경에서 I/O device를 위한 반가상화 된(para-virtualized) 표준 인터페이스이다.
- QEMU/KVM, Xen 같은 Hypervisor에서 Guest OS와 Host 간의 I/O 통신을 단순화 및 표준화 하기 위해 만들어졌다.
- PCI, MMIO 같은 실제 hardware bus 대신 Virtqueue(A ring buffer data structure)로 Guest와 Host 간에 데이터를 주고받음.
구조는 다음과 같다.
- Front-end (Guest OS)
VirtIO driver
Guest OS의 kernel module 형태로 동작하며 application은 그냥 일반 device와 같이 사용한다. - Back-end (Host, QEMU/KVM)
QEMU의 VirtIO device emulation code
Guest에서 보낸 요청을 실제 physical hardware device나 network stack으로 연결한다. - Transport Layer
주로 PCI device 형태로 노출 됨(Guest에서는 PCI device로 인식 그리고 driver 세팅)
MMIO(Memory-Mapped I/O), Channel I/O 같은 다른 전송 방식도 있음.
주요 VirtIO device는 다음과 같다.
virtio-net
: 가상 Network NICvirtio-blk
: 가상 Disk block devicevirtio-scsi
: SCSI 기반 가상 block devicevirtio-balloon
: 가상 System memory, 유연하게 조절이 가능함virtio-rng
: Random device, 실제로는 잘 안쓰임virtio-gpu
: vGPU, 보통 VDI 또는 Desktop 가상화
This post is licensed under CC BY 4.0 by the author.