[리눅스 가상화 개념] 가상화(Virtualization)와 하이퍼바이저 (Hypervisor)

blog post 

 

이번 포스팅에서는 클라우드 컴퓨팅의 핵심 기술인 가상화에 대해 알아보고 특히 가상화에서 빼놓을 수 없는 하이퍼바이저도 함께 알아보도록 하겠습니다.

 

 

 

1. 가상화란?

 

일반적으로 가상화란, 컴퓨팅에 필요한 물리적 자원을 복제하는 기술을 가리킵니다. 물리 자원을 복제하여 새로운 가상의 자원을 생성하는 행위를 흔히 "가상화 한다"고 표현합니다. 여기에서 물리적 자원은 어떠한 컴퓨터를 구동하기 위해 반드시 필요한 CPU나 메모리, 디스크, 네트워크, 사운드 카드, 프린터 등, 거의 대부분의 시스템 자원이 해당됩니다.

 

가상화를 하는 가장 큰 이유는 자원 비용 절감의 효과가 크기 때문입니다. 기존 물리 장비에서 사용하던 서버나 어플리케이션을 클라우드 기반의 가상화 된 환경으로 마이그레이션 함으로써 물리 자원의 소비를 줄일 수 있습니다.

 

또한 가상화 된 환경을 구축함으로써 재해시 복구하기 수월해지는 효과도 있습니다. 물리 자원에 특정 프로세스를 직접 구축하지 않고 별도의 가상화된 시스템에 구축함으로써 시스템 격리 효과를 보일 수 있는데, 이는 곧 문제가 발생해도 전체 시스템에 영향을 미치는 것을 방지할 수 있음을 의미합니다. 이러한 면에서 안정성보안성의 효과도 지니고 있습니다.

 

특정 서버를 가상화 하고 가상화된 이미지를 사용함으로써 빠르게 프로비저닝 할 수 있는 장점도 가지고 있죠. 

 

이처럼 가상화를 통해 얻을 수 있는 다양한 이점들로 인해 최근에는 많은 기업들이 기존 물리 장비 기반의 서버나 어플리케이션을 클라우드 기반의 가상화 시스템으로 마이그레이션하고 있는 추세입니다.

 

 

 

2. 하이퍼바이저

 

 

우선 가상화를 위해서는 이를 지원하는 시스템이 필요합니다. 실제 물리 자원을 가상화하고 이를 가상머신(Guest OS라고 부르기도 합니다)이 사용할 수 있도록 중간에서 매개체 역할을 하는 소프트웨어가 바로 하이퍼바이저(Hypervisor) 입니다. 윈도우에서는 Hyper-V가 대표적으로 잘 알려진 하이퍼바이저인 반면, 리눅스에서는 가상화를 위해 KVM/QEMU 하이퍼바이저를 기본적으로 지원하고 있습니다.

 

이러한 하이퍼바이저는 그림 1과 같이 시스템에서 물리 장치 (즉 하드웨어)를 직접 제어할 권한이 있습니다. 하이퍼바이저는 이 가운데 가상의 하드웨어를 제공할 뿐만 아니라, VM에 대한 라이프 사이클을 관리하거나 마이그레이션, 실시간 리소스 할당, VM 정책 정의 등, 다양한 기능들을 수행합니다.

 

또한 하이퍼바이저는 타입 1 타입 2로 구분할 수 있습니다. 두 타입의 차이는 호스트 OS(물리 디스크에 직접 설치된 OS) 필요 여부에 따라 구분됩니다.

 

타입 1의 경우 네이티브(Native) 혹은 베어 메탈(Bare Metal) 하이퍼바이저라고도 불리며, 그림 1과 같이 하이퍼바이저가 하드웨어와 직접 상호작용 하는 것이 특징입니다. 즉, 호스트 OS 상에 하이퍼바이저가 올라가지 않고 직접 하드웨어를 제어할 수 있음을 의미합니다. 사실상 Host OS와 같은 계층에 있다고 봐도 무방하죠. KVM/QEMU, XEN 등이 대표적인 타입 1 하이퍼바이저에 속합니다.

 

 

그림1. 타입 1 하이퍼바이저 구조

 

 

반면 타입 2의 경우, 그림 2와 같이 호스트 운영체제 위에서 하이퍼바이저가 동작합니다. 따라서 타입 2를 호스티드(Hosted) 하이퍼바이저라고 부르기도 합니다. 우리가 잘 알고 있는 VMware Fusion, VMware Workstation, Parallels Workstation, VirtualBox 등이 대표적인 타입 2 하이퍼바이저라고 볼 수 있습니다.

 

그림2. 타입 2 하이퍼바이저 구조

 

타입 1과 타입 2 하이퍼바이저의 동작 방식이 다르기 때문에 OS의 보호 링 계층에서 상주하는 위치도 달라집니다.

 

 

3. 보호 링 계층과 하이퍼바이저

 

 

보호 링 개념은 컴퓨터 시스템에서 계층 별로 보호 권한을 구분한 구조로, 시스템 자원 접근에 대한 보안 메커니즘을 나타냅니다. Ring0는 곧 시스템 커널을 의미하며, 물리자원과 직접 상호작용 합니다. Ring3의 사용자 모드에서는 직접적으로 물리 자원에 접근해서 할 수 있는 것이 제한적이며, Ring 1과 2는 장치 드라이버 레벨입니다.

 

 

그림3. x86 기반 보호 링 구조. (https://ko.wikipedia.org/wiki/보호_링)

 

 

 

 

 타입 2의 경우, 호스트 OS 위에서 하드웨어를 에뮬레이팅 함으로써 자원을 가상화 하고 가상화 된 자원을 VM에 할당합니다. 따라서 VMM/하이퍼바이저는 Ring0에 위치하고 해당 하이퍼바이저 기반의 VM은 Ring1에서 동작하게 됩니다.

 

 

그림4. 타입 2 하이퍼바이저의 보호 링 계층

 

반면 타입 1 하이퍼바이저의 경우, 전가상화와 반가상화 하이퍼바이저 여부에 따라 링 계층에서 상주하는 위치가 달라집니다. 

 

 

  

4. 전가상화와 반가상화 하이퍼바이저

 

전가상화는 하드웨어를 에뮬레이트 하기 위해 이진 변환(Binary Translation) 방식을 사용하는 하이퍼바이저 입니다. VM이 하드웨어를 제어하기 위해 하이퍼바이저에 바이너리 형태로 명령어를 전달하는데, 커널에서 하드웨어를 제어하는 과정에서 이 바이너리 형태의 명령어를 바로 인식할 수 없기 때문에 해석하는 과정을 거칩니다. 해석된 결과를 토대로 하드웨어를 제어하게 되는데, 이 과정이 이진 변환 과정입니다. 전체 구조를 간단하게 링 계층으로 표현해보면 그림 5와 같습니다.

 

 

그림5. 전가상화의 이진 변환

 

그림과 같이 Guest OS는 Ring 1에 위치하게 되며 이 OS들은 QEMU에 하드웨어 제어를 요청함으로써 가상화 된 하드웨어를 사용할 수 있습니다. QEMU가 대표적인 전가상화 하이퍼바이저라고 볼 수 있습니다. QEMU는 Quick Emulator의 약자로, 리눅스 시스템에서 Ring0에 위치하여 하드웨어와 직접 상호작용 합니다.

 

 

이와 달리 반가상화의 경우, 아래와 같이 VMM/Hypervisor가 별도의 가상화 계층에 위치합니다. 링 구조에서 Ring -1 계층에 있다고도 불리는데, 이 구조에서 Guest OS는 자연스럽게 Ring 0에 위치하게 됩니다.

 

 

그림6. 반가상화의 하이퍼 콜

 

반가상화의 경우, 하이퍼바이저가 하드웨어를 직접 제어할 수 있는 API를 제공하고 Guest OS의 수정된 커널이 이 API를 통해 하드웨어 자원에 접근하는 특권 명령/작업을 수행합니다. 이렇게 수정된 Guest OS 커널이 직접 시스템 콜 하는 방식을 하이퍼 콜이라고 부릅니다. 대표적인 반가상화 하이퍼바이저로 Xen을 들 수 있습니다. (단, Xen의 경우 반가상화와 전가상화 모두 지원합니다)

 

물론 반가상화 하이퍼바이저의 경우 Guest OS가 수정된 커널을 사용해야 한다는 점에서, 사용자의 Guest OS에 따라 직접 OS 커널을 커스터마이징해서 사용해야 하는 경우에는 Xen 환경과는 다소 맞지 않을 수 있습니다. 하지만 전가상화 방식에 비하면 중간에 이진 변환하는 에뮬레이트 절차가 없기 때문에 상대적으로 성능 오버헤드가 적습니다.

 

하지만 전가상화 방식도 하드웨어 단에서 지원하는 가상화 덕분에 오버헤드를 많이 줄일 수 있습니다.

 

 

 

5. 하드웨어 지원 가상화

 

인텔과 AMD가 하드웨어 단에서 가상화 기능을 제공하는데 이러한 가상화 타입을 각각 VT-x(인텔) 와 AMD-V(AMD) 라고 불립니다. 둘 다 x86 기반 아키텍처에서 동작하며, 해당 아키텍처에서 동작하는 가상머신이 하드웨어를 직접 제어할 수 있는 인스트럭션을 제공합니다. 이에 따라 전가상화 하이퍼바이저 기반의 VM도 Ring0에서 동작하는 효과를 보일 수 있습니다.

 

그림7. 하드웨어 지원 가상화

 

이러한 하드웨어 지원 가상화 방식을 사용하는 소프트웨어로 KVM을 들 수 있습니다. 물론 하드웨어가 자체적으로 가상화를 지원하지 않는다면 KVM과 같은 모듈을 사용할 수 없습니다.

 

여기까지 전반적인 가상화와 하이퍼바이저의 개념에 대해 다뤄보았습니다. 다음 포스트에서는 KVM/QEMU에 대해 다루도록 하겠습니다.

 

 

TAGS.

Comments