virtualization
컴퓨터 기술이 발전하면서 하드웨어 자원을 효율적으로 활용하기 위한 다양한 가상화 기술들이 등장했습니다. 초기의 에뮬레이터부터 시작해서 하이퍼바이저 기반의 가상화, 그리고 최근의 컨테이너 기술까지 각 시대의 요구사항과 기술적 한계를 극복하며 가상화 기술은 계속 진화해왔습니다.
이러한 가상화 기술 중에서도 하이퍼바이저 기반 가상화는 크게 반가상화(Para-virtualization)와 전가상화(Full-virtualization)로 나눌 수 있습니다. 각각의 방식은 서로 다른 장단점을 가지고 있으며 이는 하이퍼바이저의 구현 방식과 게스트 운영체제의 수정 여부에 따라 결정됩니다.
반가상화와 전가상화의 차이점, 각각의 하이퍼바이저 유형(Type 1
, Type 2
), 그리고 에뮬레이터의 특징을 자세히 살펴보면서 각 기술의 동작 원리와
활용 사례에 대해 알아보도록 하겠습니다.
반가상화 vs 전가상화
반가상화는 게스트 운영체제 일부를 수정하는 시스템을 말하며 반가상화와 대비되는 전가상화는 게스트 운영체제를 수정하지 않고 실메 머신과 동일하게 사용하는 것을 말합니다. Xen의 반가상화의 게스트 운영체제는 특권 명령을 실행하려면 '하이퍼콜(Hypercall)'로 하이퍼바이저에게 서비스를 요청하는 방식과 동일합니다. 실제로 하이퍼콜은 시스템콜과 동일한 방식으로 구현되어 있으며 서비스 요청이 애플리케이션에서 커널인지, 아니면 게스트OS에서 하이퍼바이저인지에 따라 용어가 달라질 뿐입니다.
하이퍼바이저
하이퍼바이저는 가상화 환경에서 중요한 역할을 하는 컴포넌트로 실제 하드웨어와 가상머신(VM)간의 상호 작용을 관리하고 조정합니다. 반가상화(Para-virtualization)와 전가상화(Full-virtualization)는 가상화를 구현하는 두 가지 방식으로 각 방식에 따라 하이퍼 바이저의 역할이 약간 다릅니다.
전가상화에서 하이퍼바이저의 역할
하드웨어 에뮬레이션
: 하이퍼바이저는 가상 머신에 실제 물리적 하드웨어와 유사한 가상 화드웨어 환경을 제공합니다.명령어 인터셉트 및 해석
: 게스트 OS는 수정되지 않아도 되므로 하이퍼바이저는 게스트OS가 하드웨어에 직접 액세스하는 명령을 가로채고 이를 안전하게 해석하거나 수정하여 실제 하드웨어에 전달합니다.자원 관리
: CPU, 메모리, 스토리지, 네트워크 등의 물리적 자원을 가상 머신들에게 할당하거나 재배분합니다.
반가상화에서 하이퍼바이저의 역할
API 제공
: 반가상화에서는 게스트OS가 직접적인 하드웨어 액세스를 시도하지 않는 대신 하이퍼바이저는 게스트OS에 특수 API를 제공하여 하이퍼바이저와 효과적으로 통신할 수 있게 합니다.향상된 성능
: 게스트 OS가 반가상화를 위해 특별히 수정되므로 하드웨어 액세스 요청을 에뮬레이션보다 효율적으로 처리할 수 있으며 이로 인해 성능이 상대적으로 더 좋아질 수 있습니다.자원 관리
: 전가상화와 마찬가지로 CPU, 메모리, 스토리지, 네트워크 등의 물리 자원을 가상 머신들에게 할당하거나 재배분합니다.
두 가상화 방식 모두에서 하이퍼바이저는 물리적 자원의 효율적인 분배, 가상 머신 간의 격리 그리고 안전한 운영을 위한 중요한 역할을 합니다.
Type 1 Hyper Visor vs Type 2 Hyper Visor
Type 1 하이퍼바이저는 호스트 운영체제가 존재하지 않으며 Type 1은 하이퍼바이저 위에 모든 도메인이 동작하는 방식이고 Type 2는 호스트 운영체제에서 가상화 프로그램을 실행하여 게스트를 실행하는 방식을 말합니다.
Type 1 (베어메탈, Native) 하이퍼바이저
- 직접 물리적 하드웨어 위에서 실행
- OS 없이 하드웨어에 직접 설치, 그 위에 여러 가상 머신 실행
- VMware vSphere/ESXi, Microsoft Hyper-V, Xen
Type 2 (호스트형) 하이퍼바이저
- 기존의 운영체제 위에서 소프트웨어 어플리케이션으로서 실행
- 호스트 OS 위에서 동작하며 이 호스트 OS가 직접 하드웨어 자원에 액세스
- Oracle VirtualBox, VMware Workstation, Parallels Desktop
(에뮬레이터): 에뮬레이터는 컴퓨터 시스템이 다른 컴퓨터 시스템의 동작을 모방하도록 하는 소프트웨어나 하드웨어를 말합니다. 에뮬레이터는 특정 시스템의 기능을 다른 시스템에서 재현하는 프로그램이나 장치이며 이를 통해 주어진 시스템에서 실행되지 않을 소프트웨어나 애플리케이션을 실행할 수 있습니다.
Hyper-V vs KVM
Microsoft의 Hyper-V는 주로 전가상화 방식을 사용하는 하이퍼바이저이며 이는 게스트 운영체제를 수정하지 않고도 해당 운영체제를 Hyper-V 상에서 가상화할 수 있게 해줍니다. 그러나 Hyper-V는 "Integration Services"라는 컴포넌트를 포함하고 있습니다. 이 컴포넌트는 일종의 드라이버 및 서비스 집합으로 게스트 운영체제 내에서 실행되며 가상 환경에서의 성능 향상과 관련된 여러 기능들을 제공합니다. 이러한 Integration Services가 설치되면 일부 작업은 반가상화의 형태로 이루어질 수 있습니다. 따라서 Hyper-V는 주로 전가상화를 사용하면서 필요에 따라 일부 반가상화의 특성을 갖습니다.
KVM은 리눅스의 커널에 내장된 또 다른 가상화 플랫폼입니다. 게스트는 완전 가상화로 동작하며 디스크나 네트워크를 통해 특정 드라이버를 사용해 부분적으로 반가상화로 동작합니다. (하이브리드 방식)
- 하드웨어 가상화 기술(Intel VT-x, AMD AMD-V)의 도움을 받는다.
- 게스트 시스템에서 PV 드라이버를 사용하지 않는 장치를 위해 실제 하드웨어를 에뮬레이트할 수 있도록 QEMU 가상화 소프트웨어의 일부분을 사용한다.
- 가상화를 하기 위해서는 하이퍼바이저라는 별도의 시스템 프로그램이 필요하다.
- Linux 커널에 1형 하이퍼바이저를 배포하는 가상화 인프라를 제공합니다.
KVM은 가상화를 제공하는 하이퍼바이저를 메모리 관리자나 파일 시스템 등과 같은 커널의 '서브 모듈'로 취급합니다. KVM에서 가상화를 제공하기 위해서는 한 가지 전제 조건이 붙는데 사용하는 CPU에서 HVM(Hardware Virtual Machine) 기능을 제공해야 한다는 점입니다. 과거 가상 메모리를 지원하기 위해 CPU에서 페이징 기능을 하드웨어 차원에서 제공했던 것과 같이 최근 가상화 기능이 많이 사용되므로 CPU에서 가상화 기능을 하드웨어 차원에서 제공합니다.