QEMU와 KVM - 2

기술/가상화기술 2017. 11. 11. 11:03 Posted by 아는 개발자

KVM(Kernel-based Virtual Machine)


그림1. KVM 공식 로고다. 펭귄이 던지고 있는 공은 VM을 의미하는 것 같다.


"KVM은 리눅스 커널을 하이퍼바이저로 변환하기 위한 가상화 인프라스트럭처의 하나이다"라고 위키 백과에선 설명하는데 이것만 가지곤 KVM의 제공하는 기능을 이해하긴 힘들다. KVM을 공부하기 전에 같이 사용되는 하이퍼바이저, QEMU에 대해 먼저 공부해보면 KVM의 사용 목적에 대해서 더 쉽게 이해할 수 있다. QEMU 포스트 읽어보기


Intel과 ARM같은 하드웨어 개발 회사들은 컴퓨터 내에서 가상화 기술을 지원하기 위한 장치들(Intel VT 또는 AMD-V )을 넣어뒀다. 이런 장치들은 가상화 기술의 고질적인 성능 저하 문제를 해결 하기 위해 만들어졌는데 이 장치들을 적절히 이용한 하이퍼바이저는 장치를 Emulation 해서 만든 방식보다 뛰어난 성능을 보였다(몇몇 기능은 Host OS와 거의 동일한 성능을 내기도 했다). 하지만 유저영역에서 동작하는 가상화 소프트웨어는 가상화 지원용 하드웨어를 직접 사용 할 수 없다. 하드웨어에 접근하는 일은 모두 커널을 거쳐야 하기 때문이다.


그림2. KVM 사용시 시스템 구조


KVM은 제조사에서 만든 가상화 하드웨어 기능을 범용성 있게 사용할 수 있도록 최적화하고 유저영역에서 동작하는 소프트웨어가 최적화한 기능을 쉽게 사용할 수 있도록 인터페이스를 제공한다. 인터페이스 접근은 간단하게 입출력 제어 함수(ioctl)를 호출해서 할수 있다. QEMU 소스 코드를 보면 실제로 kvm에 ioctl 함수를 보내는 코드들을 볼 수 있다.


지금까지는 하드웨어 제조사의 가상화 솔루션을 사용하기 위해 KVM이 사용되고 있다고 설명했는데 이것 말고도 다양한 기능을 제공하고 있다. 여기서 KVM이 제공하는 기능들 중 중요한 것 두가지만 살펴보자.


1. Virtual Machine 생성 및 관리


VM 생성 및 관리하는 작업을 하이퍼바이저가 아니라 KVM에서 관리 하기도 한다. 이런 경우 VM들이 커널내에서 관리되기 때문에 유저 영역에서 동작 할 때 보다 상대적으로 안정적이며 생성된 VM들은 커널 프로세스의 형태로 존재하기 때문에 유저프로세스로 존재할 때보다 전반적인 성능도 향상된다.


2. 장치 Emulation


CPU, Memory, Interrupt Handler처럼 VM 성능에 결정적인 장치들을 Emulation 해준다. 앞서 설명한 VM 생성 관리 작업처럼 이 장치들도 유저 영역에서 존재 할때보단 커널 영역에 있을 때 더 좋은 성능을 보이며 뿐만 아니라 하드웨어장치를 컨트롤 할 수 있는 함수를 호출 할 수 있는 장점이 있다. 여기서 Emulation 된 장치들은 제조사에서 추가한 가상화 솔루션을 지원하는 장치들이다.


이외에도 KVM이 제공하는 기능들을 적절하게 사용한다면 유저영역 하이퍼바이저에서 할 일은 "생성할 VM의 파라미터를 잘 받고 KVM 모듈의 함수를 잘 호출 하는 것"과 "KVM에서 제공하지 못한 장치들을 Emulation 하는 것"이다. 그래픽같은 경우 가상화 기술을 상용화 할 때 가장 크리티컬한 요소인데 아쉽게도 KVM에선 따로 지원하지 않는다. 이런 경우엔 하이퍼바이저에서 그래픽 관련 요소들을 처리 할 수 있는 솔루션을 제공해야한다.


사진 출처


- https://sort.veritas.com/public/documents/vie/7.3/linux/productguides/html/infoscale_virtualization/ch01s03.htm (그림 2)

728x90

'기술 > 가상화기술' 카테고리의 다른 글

QEMU 성능 문제 - 개론  (0) 2018.05.30
KVM - ARM  (0) 2018.01.01
QEMU와 KVM - 2  (0) 2017.11.11
QEMU와 KVM - 1  (0) 2017.11.01
6. XenStore, Xenbus  (0) 2017.01.22
5. 이벤트 채널 소개  (0) 2017.01.07