본문 바로가기
컴퓨터 활용(한글, 오피스 등)/50_2.운영체제_리눅스

Qemu KVM 가상화 에뮬레이션 차이

by 3604 2022. 12. 25.
728x90

이번 포스트에서는 기본적인 가상화의 분류, Qemu와 KVM의 개념을 이해하기 위한 가상화와 에뮬레이션의 차이점을 다룬다.

 

이번엔 연구실에서 리눅스에서 가상 머신을 이용한 서비스 플랫폼 개발에 참여하게 됬다. 지금까지 컨테이너만 만져온 사람이 가상 머신을 다뤄야 한다니, 대학원생의 신분으로서 개발연구 도메인의 범위가 얇고 넓어진다는 것은 그다지 맘에 들지 않는다. 그래도 어쩌겠는가, 하라면 해야지...

 

 

1. 일반적인 가상화의 분류

 

클라우드 컴퓨팅 분야에 종사하는 사람이 아니더라도 한 번쯤은 가상화에 대한 이야기는 들어봤을 것이다. 개발자라면 누구나 써봤을 Virtual Box부터 시작해서, 상용 가상화 솔루션인 Xen, VMWare 등이 대표적인 가상화 솔루션들이다. Virtual Box는 무료이고, Xen, VMWare는 유료이다. 그렇기 때문에 가상 머신을 처음 사용하는 초보자들은 Virtual Box를 보편적으로 사용하는 경향이 있다. 아마 윈도우에서 Virtual Box를 설치해서 사용하는 것이 일반적이라고 생각한다.

 

가상화의 대표적인 두 종류1

 

그렇지만 대부분의 상용 VM 서비스 환경에서는 Xen 또는 VMWare, KVM(Openstack과 같은 경우...) 등을 사용하는 것 같다. VMWare는 유료라 사용해 본적은 없어서 모르겠지만 Virtual Box처럼 Host OS의 위에서 동작하는 걸로 알고 있고(위 그림의 Type 2), Xen은 Host OS 없이 하드웨어 위에 직접 설치되어 가상 머신을 제어하는 걸로 알고 있다(위 그림의 Type 1). Xen은 Host OS가 없다는 점에서 Native 또는 베어메탈 가상화라고도 불린다. 

 

요즘 새롭게 알게된 사실은 Type 1의 가상화를 HVM(Hardware-based Virtual Machine 또는 Hardware-assisted Virtual Machine) 이라고도 하는 것 같다는 것이다.2 자세히 알아보니 전가상화 / 반가상화의 분류와 Type 1, Type 2의 분류는 별도인 것으로 이해가 된다.3 근데 또 어디서는 Intel 또는 ARM에서 제공하는 CPU 가상화 기능을 HVM이라고 하는 곳도 있다. 혼용해서 쓰는건지는 확실하지가 않다. 나중에 알게되면 다시 반영할 예정. (전가상화는 하드웨어 에뮬레이션을 해야만 하는걸까?4 나중에 stackoverflow에 물어봐야겠다.)

 

어쨌든, Type 1과 Type 2의 가상화 방법 모두 전가상화와 반가상화를 사용해 구현될 수 있다. 반가상화는 하이퍼 콜을 위해 Guest OS의 커널을 수정해야 한다는 단점이 있지만 성능 면에서 전가상화에 비해 우위를 가진다는 장점이 있다. 이에 대한 설명은 본 포스트의 범위를 벗어나기 때문에 굳이 다루지 않지만, 궁금하다면 이전에 작성했던(거의 블로그 초기에 작성했던...) 포스트나 이 링크5를 참고하기 바란다.

 

https://blog.naver.com/alice_k106?Redirect=Log&logNo=220218878967&from=postView

 

2. Qemu와 KVM의 개념

 

그럼 이번 포스트에서 다룰 KVM과 Qemu은 무엇인가? KVM과 Qemu 모두 리눅스 OS를 위한 가상화 솔루션이다. 그런데 구글링해보면 항상 KVM과 Qemu를 같이 설치하는 경우가 대부분인데, 이는 KVM과 Qemu는 상호 보완적인 관계에 있기 때문이다. 

 

KVM의 로고. Tux가 저글링을 하고 있는 모습이 인상적이다.

 

일단 KVM 먼저 설명을 해보자면, KVM은 Kernel-based Virtual Machine 의 줄임말로서, 리눅스 커널의 mainline에 포함된 정식 커널 모듈 중 하나이다.6 즉, 리눅스 커널 자체가 가상화를 위한 기능을 제공하고 있는 것이라고 봐도 무방한 셈이다(물론 CPU가 Intel VT 및 AMD-V과 같은 vCPU 기능을 지원한다는 가정 하의 이야기이다). 어찌 보면 Xen처럼 리눅스 Host OS 자체가 Hypervisor 역할을 하기 때문에 Type 1처럼 보이기도 하지만, 가상 머신 외에도 다양한 애플리케이션을 구동하기 때문에 Type 2로 분류되기도 한다.7 어찌됬든 간단히 요약해보면 Virtual Box나 VMWare가 제공하는 기능을 리눅스 OS 자체가 제공하고 있으며, 이를 통해 가상 머신을 구동하고 제어한다는 것이다. 

 

그럼 KVM만 쓰면 되지 왜 Qemu를 같이 설치해 사용하는지에 대한 의문이 생긴다. 그 이유를 설명하기 위해, Qemu는 가상화 솔루션이지만 Hypervisor 보다는 에뮬레이터(Emulator) 라고 말하는 것이 정확한 표현이라는 것을 짚고 넘어가야 한다.8 그럼 여기서 또 나오는 질문이 "가상화 (Hypervisor)" 와 "에뮬레이션 (Emulator)" 의 차이가 뭐냐는 것이다. "가상화"는 동 하드웨어를 사용할 수 있는 OS를 가상머신에서 구동하기 위해 Hypervisor를 통해 커널 번역, 자원 분배 등의 기능을 제공하는 것이고, "에뮬레이션" 은 하드웨어를 소프트웨어적으로 구현해 특정 실행 환경을 제공하는 것이다. 

 

예시를 들어보자. 윈도우 OS에서 안드로이드 스튜디오를 설치해 AVD 매니저를 통해 안드로이드 앱 구동을 위한 가상 안드로이드 환경을 구동해 본 적이 있는가? 안드로이드 가상 환경을 사용하는 것은 맞지만, 이 경우에는 "가상화" 가 아닌 "에뮬레이션" 이라고 표현한다. 안드로이드는 기본적으로 ARM CPU를 사용하기 때문에, 이를 위한 가상 실행 환경을 "에뮬레이션" 해서 구성한 것이다. 

 

 

 

텐가이나 포켓몬스터 골드와 같은 고전 게임들은 "에뮬레이션" 을 통해 구동된다.

 

다른 예시를 들어보자. 나의 나이대(20대 초~중반) 이라면 누구나 해봤을 MAME의 텐가이, GBA의 포켓몬스터 골드버전을 기억하는지 모르겠다. MAME는 오락실 게임기에서, GBA는 게임보이에서 구동될 수 있는 게임 프로그램을 구동한다. 그런데 이런 게임들을 윈도우 OS에서 하려고 보면, 오락실 게임기나 게임보이의 하드웨어와 PC 하드웨어는 다른 구조로 되어 있어 실행을 못하는 경우가 99.9%일 것이다. 바로 이런 경우에 "에뮬레이터"을 이용해 게임 프로그램 구동을 위한 하드웨어 환경을 소프트웨어적으로 구현해 사용할 수 있다. 구글에 MAME 게임 설치 방법을 검색하면 MAME 에뮬레이터가 나오지 않는가.

 

이와 반대로 "가상화"는 동일 하드웨어에서도 동작할 수 있는 OS 또는 소프트웨어를 구동하는 것을 목표로 한다. 일반 PC에서 가상화를 이용해 리눅스를 설치하는 것이 대표적인 예시이다. 일반 PC에 MAME나 GBA 게임을 위한 OS(OS라고 불러야 할지는 모르겠지만) 설치는 불가능해도 리눅스는 설치할 수 있기 때문이다. 이를 요약하자면,

 

이기종 하드웨어에서 구동하기 위해 가상의 하드웨어 환경을 소프트웨어적으로 구현한 것 -> "에뮬레이션" 

동 하드웨어에서 구동하기 위해 가상 환경을 구축하고 관리하는 것 -> "가상화"

 

라고 보면 되겠다. 

 

KVM과 Qemu를 설명하다 말고 이 이야기를 왜 하냐면, KVM은 "가상화" 이고 Qemu는 "에뮬레이션" 이기 때문이다. 즉, 두 가지를 모두 취하기 위해서 KVM과 Qemu를 같이 쓰는 걸로 이해가 된다. "이해가 된다" 라는 표현을 쓰는 이유는 명확하게 설명해 놓은 곳이 없는 관계로, 단지 추측임을 나타내기 위해서다. 어쨌든, KVM과 Qemu는 매우 밀접한 관계가 있으며, 아예 모듈 이름 자체도 kvm-qemu라고 명명되어 있다.

 

 

대충 그림을 그려보면 이렇게 되는 것 같다.

 

그런데 에뮬레이션은 가상화에 비해 성능이 매우 낮다는 것이 보편적인 견해이다. 이는 Qemu보다 KVM이 성능이 좋다는 것을 의미한다. 그래서 Qemu를 사용할 때, 하드웨어 아키텍처가 일치할 때에 한해 KVM Acceleration 기능을 사용해 Guest OS를 구성하는 것이 일반적인 듯 하다. 즉, Qemu라는 소프트웨어는 리눅스 커널에 내장되어 있는 KVM 모듈을 이용해 가상화 환경을 마련할 수도 있고, 안할수도(에뮬레이션) 있다고 보면 될 것 같다.

 

뭐.. 그 외에도 Qemu가 KVM을 이용하는 이유는 HVM을 위해서라는 말도 있긴 한데..9 나중에 정확히 알게되면 다시 내용을 덧붙일 예정이다.

 

끝.

 

 

 

  1. 그림 출처 : https://en.wikipedia.org/wiki/Hypervisor
  2. Type 1 / Type 2을 설명함. http://whatiscloud.com/virtualization_technology/hardware_based_and_operating_system_based_virtualization
  3. http://comet.lehman.cuny.edu/jung/cmp426697/virtualiZation.pdf
  4. 3의 마지막 단락에서 발췌. https://www.joinc.co.kr/w/man/12/docker/InfrastructureForDocker/about#toc
  5. 전가상화 / 반가상화 / 에뮬레이션에 대한 설명. http://dongseon.tistory.com/entry/%EA%B0%80%EC%83%81%ED%99%94%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90
  6. 리눅스 커널 2.6.20 버전부터 탑재되었다. http://blog.syszone.co.kr/2881 에서 확인.
  7. https://www.joinc.co.kr/w/man/12/docker/InfrastructureForDocker/about 에서 발췌.
  8. Qemu는 에뮬레이터로 쓰일 수도 있지만, Xen이나 KVM과 같이 동작할 때는 가상화 도구로써도 사용될 수 있다. http://www.innervoice.in/blogs/2014/03/10/kvm-and-qemu/ 에서 확인.
  9. HVM을 위한 에뮬레이션을 위해서 필요하다고 한다. https://www.joinc.co.kr/w/Site/cloud/Qemu/Basic 에서 발췌.
728x90