[가상화] Xen과 KVM 하이퍼바이저 아키텍처
IT/Cloud

[가상화] Xen과 KVM 하이퍼바이저 아키텍처

728x90
반응형

가상화와 하이퍼바이저에 대해 작성한 이전 글들을 읽고 오는 것을 권장한다.

 

Xen Architecture

Xen은 AWS, Citrix, 알리바바클라우드, 화웨이, 인텔, AMD, KT 등에서 정말 많이 사용하는 오픈소스 하이퍼바이저이다. Xen은 대표적인 반가상화 하이퍼바이저로 등장했지만, HVM(하드웨어 기반 가상화) 기능을 활용하여 전가상화도 지원한다.

 

도메인(Domain)은 Xen 환경에서 동작하고 있는 가상머신을 의미한다. 도메인은 크게 Dom0와 DomU 2가지로 나뉘는데, Dom0는 실제 물리 디바이스와 통신하기 위한 디바이스 드라이브가 존재하는 가상화된 시스템이라고 보면 된다. 다시 정리하면, 실제 하드웨어와 연결되는 디바이스 드라이브를 가지고 다른 도메인들을 제어하는 Guest OS인 것이다. 이를 제외한 특권이 없는 (Unprivileged) 나머지 도메인을 DomU라고 한다.

 

Flow를 보면, 각 도메인은 Hypercall로 xen 하이퍼바이저에게 입/출력 요청을 하게 되고, Xen 하이퍼바이저는 이를 도메인 0에게 전달한다. Dom0는 받은 요청을 실제 디바이스에 전달하고 이런 방식으로 실제 장치와 입/출력을 하게 된다.

 

Dom0에서는 하나의 장치를 여러 도메인이 공유할 수 있도록 해야하기에 장치를 에뮬레이션 하는 방법을 통해 이를 해결한다. Xen에서는 QEMU라는 오픈소스 에뮬레이터를 Dom0에 동작시켜 BIOS, 디크 컨트롤러 그래픽 어댑터, 네트워크 카드 같은 장치를 에뮬레이션한다.

 

다른 도메인들의 장치 드라이브가 Dom0의 장치 드라이브와 연결이 되어야 하는데, Dom0의 XenStore라는 곳이 이를 가능하도록 하고 XenBus라는 것을 통해서 통신하게 된다. 도메인 간 통신 방법으로 shared memory라는 것을 사용하고, 도메인 간 메모리 공유를 지원하기 위해 Grant Table이란 자료구조를 사용한다.

 

KVM Architecture

KVM(Kernel-based Virtual Machine) 또한 전가상화 반가상화 모두 지원하지만, KVM은 대표적인 전가상화 하이퍼바이저이다. KVM의 가장 큰 특징이 이전 글에서 다루었던 하드웨어 지원 가상화이기에 전가상화 기준의 provisioning 관점에서 확인해보자.

 

당연히 KVM을 사용하기 위해서는 CPU에서 HVM(하드웨어 기반 가상화) 기능을 제공해야 한다. 간단하게 복습하자면, 예전에 Virtual Memory(가상메모리)를 지원하기 위해 CPU에서 Paging 기능을 하드웨어 차원에서 제공했던 것과 같이, CPU에서 가상화 기능을 하드웨어 차원에서 제공해주는 것이다.

 

하드웨어 기반 가상화를 위해 emulation이 필요한데 이 역할을 QEMU가 수행한다. QEMU로 OS 이미지를 실행하면 QEMU가 KVM에 요청을 하고 이 과정에서 vcpu 등이 생성된다. KVM이 Vm Entry 명령어를 실행하면 VMX root 모드에서 VMX non-root 모드로 전환된다. (trap 발생) non-root 모드의 Guest OS에서 실행되는 모든 system call은 trap이 걸려서 root모드로 이동해서 처리되고 다시 non-root 모드로 리턴하게 된다. 이렇게 vm을 사용하다가 guest os를 종료하면 KVM 디바이스 드라이버를 통해서 모든 리소스를 정리하고 끝나게 되는 것이다.

 

정리

XEN과 KVM 하이퍼바이저의 차이는 사실 개념부터 조금 다른데, Xen은 하이퍼바이저 위에서 모든 처리를 한다는 개념이면, KVM은 하이퍼바이저를 커널의 서브 모듈로 취급한다. 하지만 두 하이퍼바이저 모두 전가상화와 반가상화 둘다 지원한다. 그래서 오늘날엔 하이퍼바이저가 전가상화니 반가상화니 구분하는 경계가 모호해졌다. 전가상화 또한 cpu의 발달에 따라 점차 하드웨어 가상화로 자리 잡고 있는 추세이다.

 

 

Reference

 

728x90
반응형