티스토리 뷰
1. 하드웨어 가상화의 종류
[ 가상화의 종류 ]
가상화에도 서버 가상화, OS-Level 가상화, 데스크톱 가상화, 애플리케이션 가상화, 네트워크 가상화 등이 있다. 그 중에서도 서버를 가상화하는 하드웨어 가상화인 전가상화와 반가상화의 차이에 대해서 정리하려고 하는데, 해당 내용을 이해하기 위해서는 CPU의 동작 레벨에 대해서 알고 있어야 한다.
[ CPU의 동작 레벨 ]
OS에서 구동되는 소프트웨어는 보안을 위해 권한과 보호 수전에 따라 링(RING) 등급으로 나뉘어진다.
- Ring 0를 특권 모드라고 하며 시스템 자원을 관리하는 OS 커널이 동작한다.
- Ring 1,2는 예약된 상태로, 평상시에는 사용되지 않는다.
- Ring3는 우리가 일반적으로 사용하는 응용프로그램들이 동작한다.
2 전가상화
[ 전가상화(Full Virtualization) ]
전가상화란 호스트 CPU의 가상화 기술을 이용하여 전체 하드웨어를 완전히 가상화하는 기술이다. 여기서 하드웨어를 완전히 가상화 한다는 것은 게스트 OS가 자신이 가상화 환경인지 모르는 상태를 의미하며, 그에 따라 가상화되지 않은 실제 하드웨어 명령을 직접 요청 하는 것처럼 동작한다.
전가상화를 하면 root모드와 non-root 모드가 생기게 되는데, 하이퍼 바이저가 root 모드, 운영체제 및 애플리케이션과 같은 도메인이 non-root 모드에 해당된다. 이러한 구조에서 만약 게스트 OS가 특권 명령(Privileged Instruction)을 처리해야 하는 상황이 오면 전가상화는 Trap & Emulate 방식으로 처리를 해준다.
-
정의: 하드웨어를 완전히 가상화하는 방식으로, 게스트 OS에 아무런 수정 없이 다양한 OS를 이용 가능
-
전제 조건: CPU의 Intel-VT나 AMD-V 등의 물리적인 가상화 지원 기능이 있어야함
-
단점: Trap & Emulate으로 인한 성능 저하 발생
[ Trap & Emulate ]
Trap이란 특권 명령을 실행할 권한이 없는 비특권 모드(게스트 OS)에서 특권 명령을 실행할 때 시스템에 발생하는 예외또는 결함이다. 예를 들어 0으로 나누기(divide by zero)나 디버깅을 위한 중단점(break point)과 같은 처리를 하면 프로그램의 제어권이 트랩 사건을 처리하는 트랩 핸들러로 넘어가게 된다.
전가상화에서 게스트 OS가 특권 명령을 실행하려고 한다면 Trap & Emulate 방식으로 처리를 해준다.
Trap & Emulate는 아래와 같은 순서로 작동한다.
- 비특권 모드인 게스트 OS에서 특권 명령을 수행하려고 한다.
- 게스트 OS는 트랩 상태(trap state)로 바뀌게 되고, 트랩 핸들러는 VM exit를 통해 제어권을 VMM(Hypervisor)로 넘겨준다.
- Hypervisor는 해당 명령을 처리한다.(Emulate)
- 해당 명령의 처리가 끝나면 VM enter를 통해 실행 결과와 함께 제어권을 운영체제로 넘겨준다.
하지만 Trap&Emulate 방식은 호환성을 확실하게 보장할 수 있는 방법이지만 트랩이라는 이벤트가 발생하여 게스트 OS의 실행이 중단되는 등 그 자체로 시스템 오버헤드가 상당히 크다. 또한 x86 아키텍처는 약 17개 정도 특권 명령과 비특권 명령의 경계가 모호한 명령어가 있어서 Trap&Emulate 방식만으로 하이퍼바이저를 구현하는 것은 어렵다고 한다.
그래서 이러한 문제를 극복하고자 전가상화를 하기 위한 Binary Translation이 등장하게 되었다.
[ Binary Translation(이진 변환) ]
Trap & Emulate 방식의 단점을 해결하기 위해 VMware에서는 이진 변환(Binary Translation)이란 기술을 선보였습니다. 이진 변환이란 게스트 OS에서 특권 명령을 수행하려고 할 때 하이퍼바이저가 바이너리 연산을 통해서 하드웨어가 인식할 수 있는 명령어로 변환하여 전달하는 기법이다. 이진 변환이란 CPU에서 직접 실행하는 방식이지만 중간에 하이퍼바이저가 번역하는 과정이 추가되었다. 이러한 방법은 개발하기가 상당히 까다롭다는 단점이 있었다.
VMware가 선보인 이진 변환이라는 기술과 다르게 Xen은 Hypercall이라는 방법을 제안하였는데, 반가상화라는 대비되는 명칭을 갖게 되었다.
3. 반가상화
[ 반가상화(Para Virtualization) ]
반가상화란 Xen에서 전가상화의 성능적인 문제점을 해결하기 위해 고안한 기술로, 하드웨어를 완전히 가상화하지 않기 때문에 게스트 OS는 스스로 가상화된 환경임을 인지하고 있고, 하드웨어 명령을 호스트로 요청하기 위한 드라이버를 필요로 한다. 반가상화는 하이퍼바이저가 동작하는 호스트의 CPU 등의 장치가 가상화 기술을 지원하지 않아도 이용이 가능하며, Trap & Emulate나 Binary Translation과 같이 성능의 불이익 없이 가상화를 할 수 있다는 장점이 있다.
하지만 반가상화를 사용하기 위해서는 반가상화를 지원하도록 수정된 커널과 장치 드라이버가 있어야 한다. 가상화 환경에서는 커널 대신 하이퍼바이저가 하드웨어를 관리하고 보호해야 하는 책임을 가지기 때문에 하이퍼바이저가 x86에서 제공하는 보호 링 중 가장 권한이 높은 링0에서 실행되도록 하고, 커널을 수정하여 링 0에서 실행되는 명령을 보다 낮은 권한인 링 1에서 실행되도록 하고, 가상 환경과 실제 환경과의 클럭 동기화 같은 일부 명령의 경우 하이퍼바이저에게 요청하는 하이퍼 콜이 발생하도록 수정을 한다.
즉, 반가상화란 게스트 OS의 커널을 수정하여 특권 명령이 수행될 때 Hypercall을 호출하여 하이퍼바이저가 실행되도록 하는 기술이다. 반가상화의 대표적인 기술로는 Xen, KVM 등이 있다.
-
정의: 하드웨어를 완전히 가상화하지 않아 게스트 OS가 직접 하드웨어를 제어하지 않고 하이퍼바이저가 제어하는 기술
-
장점: 전가상화 기술보다 빠른 속도로 처리가 가능하다.
-
단점: 게스트 OS의 커널을 일부 수정해야 한다.
반가상화는 게스트 OS의 커널을 수정해야 된다는 번거로움이 있지만 최근에는 OS에서 내장된 상태로 존재하여 번거로움이 없다고 한다.
관련 포스팅
-
하드웨어 가상화(Virtualization)의 종류 및 차이 (2/2)
참고 자료
'Server' 카테고리의 다른 글
[Docker] Linux 서버에 Docker와 Docker Compose 설치 및 Docker 명령어 (0) | 2021.11.15 |
---|---|
[Server] 마이크로 서비스 아키텍처(MSA, MicroService Architecture)란? (0) | 2021.01.20 |
[Server] 가상화(Virtualization)란? (1/2) (8) | 2020.09.14 |
[Server] Xen Hypervisor 설치 및 가상머신 생성 예제 (2/2) (1) | 2020.09.09 |
[Server] Xen Hypervisor(Xen 하이퍼바이저) 란? (1/2) (0) | 2020.09.07 |