VM – Virtual Machine

VM(Virtual Machine)

물리 컴퓨터 안에서 가상의 컴퓨터를 만든 것을 말함
Java, Javascript, .NET Framework 등으로 만들어진 프로그램이 돌아가는 환경도 VM 이지만…
보통은 Host OS에서 가상화 솔루션들(Hyper-V, Xen, Parallels, VMWare, …)을 통해 사용하는 가상 컴퓨터를 뜻한다.
일반 사용자?들은 Windows – VMWare, macOS – Parallels, Linux – VirtualBox 정도를 많이 쓰는 듯…

Host OS

물리 컴퓨터에서 동작하는 OS

Guest OS

VM 내부에서 동작하는 OS

PV(Para-Virtualization)

Guest OS가 Para-API라고 불리우는 시스템콜을 통해 H/W에 직접 접근하는 방식의 가상화를 의미
당연히 H/W에 Host OS의 시스템콜을 통해 접근하므로 빠르다.
단, API의 기능에 의존적일 수 밖에 없고, Guest OS가 PV 를 지원해야 가능하다.
이에 따라 Guest OS 위에서 실행되는 프로그램이 요구하는 동작을 Host 의 API가 제공하지 않는 경우 실행 오류가 발생할 수 있다.

HVM(Hardware-assisted Virtual Machine)

H/W 전체를 가상화한다. 그래서 Guest OS의 수정이 없이 사용할 수 있다. (물론 Guest OS가 HVM이 제공하는 가상 H/W를 지원해야 하겠지만…)
Guest OS를 수정하지 않고 사용한다는 것은 Guest OS 위에 실행되는 대부분의 프로그램이 물리 컴퓨터에 설치했을 때와 동일한 동작을 보장한다.
하지만, 전체를 가상화하기 때문에 성능은 PV보다 떨어진다. 이를 개선하기 위해 일부 Hypervisor는 Guest OS에 서비스 프로그램을 설치하거나, 디바이스 드라이버를 설치해서 가속해주는 기능을 제공하기도 한다.

Hypervisor

PV나 HVM을 Host OS에서 만들어 주는 소프트웨어를 말한다.
Hyper-V, VMWare, Parallels, Xen 등등이 있다.
BS의 경험으로는 가정용이 아니라면 Hyper-V, Xen, VMWare 정도가 아닐까 생각된다.
각자의 장단점이 있기 때문에 이것이 정답이다 라고 할 수 없지만, 사설 가상화 환경을 구축한다면 아무래도 Host 에 Linux, Hypervisor는 Xen이 무난할 거 같다.

가상화 vs 물리 서버

가상화를 사용하면
OS 구매 비용에 대한 부담이 줄어들고
H/W 구매에 대한 부담도 줄어들고
서버 이전이 용이하고
프로그램을 통한 서버 확장, 축소가 가능하고
서비스의 이용량에 따라 동적으로 사용할 수 있어 전체적으로 비용 절감의 효과가 있다
하지만 네이X나 카카X처럼 시도 때도 없이 접속자가 있고 장사가 잘 되면 오히려 비용이 늘어날 수 있다.
가상화로 가볍게 시작해서 어느 수준이 넘어서면 자체적인 가상화를 마련해야 한다.

가상화 vs 에뮬레이터

에뮬레이터는 H/W를 제어하는 기능을 소프트웨어로 흉내내는 것이다.
예를 들어, x86 계열의 CPU를 사용하는 PC에서 히타치 SuperH-2 CPU를 사용하는 Sega Saturn 게임기 소프트웨어를 구동하는 에뮬레이터의 경우
소프트웨어가 실행하는 기계어나 H/W 입출력을 Host의 H/W에 맞게 변환해서 실행하고 그 결과를 다시 변환해서 소프트웨어에게 알려주는 구조이다.
이런 명령 변환 과정이 있기 때문에 에뮬레이터는 성능이 좋을 수 없다.
가상화는 이런 변환 과정이 거의 없다.
Host의 CPU가 x86계열인데 Guest의 OS를 ARM용 Android로 설치할 수 없다.
Guest도 역시 x86을 위한 OS여야 한다.
물론 NIC, VGA, HDD, ODD 등의 H/W는 일부 에뮬레이션을 하기도 한다.

참고자료

[Xen Project]
자칭 업계 표준 가상화 솔루션
PV, HVM 모두 지원한다. HVM의 경우 QEMU 기반의 에뮬레이션에 위에서 설명한 Guest OS용 프로그램을 통해 PV 수준의 I/O를 사용할 수 있다고 한다.

[VMWare]
데스크탑 제품군에서 서버 제품군까지 오래전부터 가상화에 열심히 달려온 기업이다.
쌓인 것이 많으니 당연히 화려한 기능들이 많지만 역시 가격이…
BS는 Windows 데스크탑 제품군에서 Hyper-V 가 기본 내장되면서부터 거의 사용하지 않는다.
과자 찾아서 먹이기도 싫고, 돈 주고 사기도 싫고, 평가판은 더 싫고, 무료 제품은 쓸 이유가 없어서…

[VirtualBox]
Innotek GmbH 라는 독일 회사에서 시작해서
BS는 Sun Microsystems 가 인수한 뒤에 사용했었는데
이후 Oracle이 Sun을 인수하면서… 그냥 사용하지 않기로.
왠지 Oracle이 인수한 Open Source 관련된 모든 것이 정상적이지 않게 되어 사용 안함.

[Hyper-V]
MS의 Hypervisor로 BS가 사용하는 오래된 노트북에서도 VMWare나 VirtualBox와 달리 문제없이 사용할 수 있다.
독립 설치형 미디어도 있고(이걸 설치하면 일반적은 Windows 사용은 못하고 오로지 Hyper-V만 사용할 수 있음)
Windows Server에 기능을 추가하여 사용하거나
Windows Desktop에 기능을 추가하여 사용할 수 있다.
MS가 개발도구에 모바일 환경을 추가하면서 모바일 환경과 유사한 환경을 제공해서 디버깅을 할 수 있어야 함을 깨닫고?
Windows Desktop 제품인 Windows 8 에 추가하면서 일반 사용자들도 사용할 수 있게 되었다.
따라서 Server 제품군의 Hyper-V를 Desktop 제품군의 Hyper-V에서 바라지는 말자.

글쓴이

BS

BS == Programmer