[Cloud] 08. 가상화

Date:     Updated:

카테고리:

태그:


01. 가상화



가상화는 클라우드 컴퓨팅의 핵심 기술로, 컴퓨팅 자원의 활용성을 높이는 기술들로 다양한 방법들이 제시되었지만, 가상화를 기반으로 한 컴퓨팅 자원 효율성과 서비스의 안정성은 단연 비교가 불가능할 정도이다.

가상화에 대해 위키피디아에서는 다음과 같이 설명한다. “가상화는 컴퓨터에서 컴퓨터 리소스의 추상화를 일컫는 광범위한 용어이다. ‘물리적인 컴퓨터 리소스의 특징을 다른 시스템, 응용프로그램, 최종 사용자들이 리소스와 상화 작용하는 방식으로부터 감추는 기술’로 정의할 수 있다.”

images_yanghl98_post_db5b69c4-e1bd-4c05-afed-79205d3ab2b0_image

즉, 가상화의 핵심은 실제 존재하지 않은 하드웨어 플랫폼, 운영체제, 스토리지나 네트워크 리소스들을 가상적으로 제공한다는 것이다. 각각의 가상머신 내에 컴퓨터 시스템의 리소스를 가상화하여 운영체제를 설치하고, 운영체제상에서 다양한 애플리케이션이 동작한다.

‘가상’이라는 단어가 물리적 시스템과 무관하게 설명되지만, 실제로는 가상머신도 물리적 시스템에서 동작하는 것이고 단지 가상머신은 정해진 컴퓨터 시스템을 물리 시스템을 이용하여 논리적으로 생성한 것이기 때문이다.


02. 하이퍼바이저(Hypervisor)


하이퍼바이저는 ‘가상화 기술을 구현해주는 소프트웨어’로, 가상머신 모니터(VMM)이라고도 한다. 하이퍼바이저는 호스트 머신으로 불리는 물리시스템에 설치되어 가상머신을 생성하고 관리하며, 호스트 머신에서 동작하는 가상머신을 '게스트 머신'이라고 한다.

16285905483113_STATIC-GRAPHICS_1c3-1


■ 타입 1 하이퍼바이저

타입 1 하이퍼바이저는 베어 메탈(bare metal) 하이퍼바이저라고도 부르며, 물리시스템 하드웨어에 직접 설치되어 실행되어 가상머신을 관리하기 때문에 별도의 운영체제가 필요 없어 '타입 1 하이퍼바이저가 물리시스템의 운영체제 역할을 한다'고 볼 수 있다.

이로 인해 가상머신과 호스트 머신 간의 빠른 통신이 가능하여, 불필요한 오버헤드를 최소화할 수 있어 가상머신의 성능이 향상된다. (다만, 이 타입의 하이퍼바이저를 사용하려면, 물리적 시스템이 하드웨어적으로 가상화를 지원해야 한다. 인텔의 경우 VT-x, AMD의 경우 AMD-V)


■ 타입 2 하이퍼바이저

타입 2 하이퍼바이저는 호스트 머신의 운영체제 위에서 마치 애플리케이션처럼 설치된다. 이로 인해 가상머신을 단일 물리적 시스템에 설치하고 운영하는데 편리함을 제공하지만,중간에 호스트 머신의 운영체제가 동작하고 있기 때문에 호스트 머신의 하드웨어를 직접 접근할 수 없어 타입 1 하이퍼바이저에 비해 더 오버헤드가 발생할 수밖에 없는 구조이다.


03. 대표적인 하이퍼바이저 - KVM, Xen



■ KVM

virt-stack

KVM은 리눅스 커널에 KVM 모듈이 설치되면서 리눅스 자체가 타입 1 하이퍼바이저가 되는 구조이고 I/O 에뮬레이션은 QEMU(quick emulator)을 사용한다. (에뮬레이션은 이기종 하드웨어에서 동작하는 하드웨어 환경을 구현하는 것으로 예를 들어 x86 환경에서 ARM 기반의 소프트웨어를 동작하려고 할 때 x86 시스템이 ARM 명령을 이해하고 x86 명령으로 변경해야 하느데 이 역할을 하는 것이 에뮬레이터이다.)


■ Xen

dadsdsa

Xen은 초기에 반가상화 하이퍼바이저였지만, 지금은 전가상화와 하드웨어 지원을 받는 타입 1 하이퍼바이저이다. Xen 도메인이라는 개념을 도입하는데, 실제 도메인은 Xen에서의 가상머신이다.

도메인은 2가지로 다음과 같이 구분된다.

종류 설명
특권 도메인 (Dom 0) 물리시스템의 장치에 접근이 가능한 특권을 갖는 가상머신
게스트 도메인 (Dom U) 특권을 갖지 못한 일반 가상머신


Xen은 CPU, 메모리, 인터럽트는 직접 처리하지만, 디바이스에 대한 처리는 장치를 관리하는 ‘특권 도메인’이 처리한다. 리눅스와 같은 운영체제의 커널의 기능을 사용하기 위해서는 애플리케이션은 커널이 제공하는 ‘시스템 콜’을 호출해야 한다. 동일한 개념으로 특권 도메인은 Xen 하이퍼바이저에게 ‘하이퍼 콜’을 통해 하이퍼바이저의 장치에 접근할 수 있는 기능을 요청한다.


04. 하이퍼바이저의 라이프 사이클 (Intel VT-x 기준)



■ VMX root 모드와 VMX non-root 모드

Intel의 VT-x 기술이 적용된 CPU에서는 VMX(Virtual Machine Extensions)가 활성화되며, 이 VMX는 VMX root 모드와 VMX non-root 모드 두 가지로 작동합니다.

모드 설명
VMX root(특권) 모드 VMM이 동작하는 곳으로, VMM은 이 모드에서 가상 머신을 관리하고 제어하며, 하드웨어 리소스를 가상 머신에게 할당하는 역할을 한다.
VMX non-root(비특권) 모드 가상 머신은 이 모드에서 실행되는 곳으로, 가상머신은 이 모드를 통해 자신이 독립된 시스템처럼 동작하게 된다.


■ VMM 트랜지션(transition)

root 모드에서 non-root 모드로 또는 그 반대로 전환하는 과정을 “VMM 트랜지션(transition)”이라고 하며, 이를 통해 VMM과 가상머신은 서로 효율적으로 통신하고 작업을 수행할 수 있게 한다.

종류 설명
VM Entry root 모드에서 non-root 모드로 전환하는 과정, 이는 VMM이 가상머신에게 제어를 반환할 때 발생한다. (예를 들어, VMM이 가상머신을 생성하거나, 가상머신이 필요한 작업을 완료한 후 제어를 다시 가상머신에게 넘겨줄 때 VM Entry가 발생한다.)
VM Exit non-root모드에서 root 모드로 전환하는 과정, 이는 가상머신이 VMM에게 제어를 반환할 때 발생한다. (예를 들어, 가상머신이 하드웨어 리소스에 직접 접근하려고 시도하거나, 인터럽트 또는 예외가 발생했을 때 VM Exit가 발생한다.)


■ 가상머신의 정보를 담고 있는 구조체 - VMCS

가상머신의 상태에 대한 정보를 담고 있는 구조체를 VMCS(VM Control Structure)이라고 하며, 이 구조체는 메모리상에 위치하고 가상머신별로 각자의 VMCS 구조체가 존재한다.

VMCS 구조체는 VMM이 관리하는데, 가상머신을 동시에 여러 개를 실행할 경우, 한 번에 하나의 가상머신만 실행되므로 가상머신 간 ‘콘텍스트 스위칭(context switching)’이 발생한다. 콘텍스트 스위칭이 발생하면, 현재 동작하고 있는 가상머신의 가상 프로세서의 상태 등의 정보를 VMCS에 저장한다. VMM은 VMCS 구조체를 이용하여 실제 가상머신에 대한 제어를 하게 된다.

VMCS 구조체는 다음과 같은 6개의 논리적 그룹으로 구성되어 있다.

종류 설명
Guest State Area VM Exit 때와 VM Entry 때 프로세서의 상태를 저장
Host State Area VM Exit 때 이 영역에서 프로세스의 상태를 로드
VM Execution Control Filds VMX의 특권 모드에서 실행되는 프로세서의 명령에 대해 컨트롤 하는 필드
VM Exit Control Fields VM Exit을 제어하는 필드
VM Entry Control Fields VM Entry을 제어하는 필드
VM Exit Information Field VM Exit의 원인에 대한 정보를 저장하는 읽기전용 필드


■ 정리하면 …

즉, VMM의 라이프 사이클을 요약하면 VMXON 명령을 통해서 VMX 명령을 실행할 수 있는 단계로 진입하고, VM Entry 명령을 이용하여 VMM은 한 번에 하나씩 가상머신을 실행하고 VM Exit 명령을 통해서 VMX의 non-root 모드에서 root 모드로 전환된다. VM Exit이 수행되면, VMM은 제어권을 다시 얻고, VM Entry 명령을 통해서 종료된 해당 가상머신을 재실행할 수 있다. VMOFF 명령을 통해서 VMM은 종료된다.

vmm-life-cycle


05. 가상화 타입



ssss


■ 가상화를 위한 CPU의 동작

121545

위 그림은 가상화가 적용되지 않은 물리시스템에서 CPU에 어떤 요청을 하는 모습을 보여주는데, x86기반의 운영체제가 물리시스템에 직접 설치될 때 운영체제는 물리시스템의 하드웨어를 자신이 전체적으로 제어한다는 기본적인 가정을 하고 실행한다.

x86 아키텍처는 Ring 0 부터 Ring 3까지 4가지의 ‘특권 레벨(Privilege level)’을 제공하여 사용자 프로그램과 운영체제가 컴퓨터 물리시스템에 접근하는 것을 관리 한다.

x86 기반의 시스템을 가상화 한다는 것은 운영체제 아래에 하이퍼바이저를 위치시켜 가상머신을 제어하고 가상머신에서 요청한 하드웨어 자원에 대한 접근을 관리해야 한다. (즉, 가상머신에 설치된 운영체제 보다 더 큰 특권 레벨에서 하이퍼바이저가 동작해야 하기 때문에 특권 레벨의 조정이 필요해 진다.)


■ 전가상화

전가상화는 게스트 OS의 변경없이 가상머신에 탑재되어 완전히 독립되어 분리된(isolated) 상태로 동작하며, 전체 하드웨어를 가상화하기 때문에 게스트 OS가 자신이 가상화 환경에서 동작하는지 모르는 상태이다.

따라서 전가상화 환경에서 동작하는 게스트 OS는 자신이 물리시스템에서 동작하는 것과 동일하게 하드웨어와 관련된 명령어를 직접 요청하기 때문에 하이퍼바이저가 적절하게 수행해줘야 한다.

가상머신에 설치된 게스트 OS의 요청을 하이퍼바이저가 받아서 처리해야 하기 때문에 오버헤드가 필연적으로 발생할 수밖에 없다.


■ 소프트웨어 기반 전가상화

22222dadasd

가상머신에 설치된 게스트 OS로부터 요청이 오면 하이퍼바이저는 요청을 소프트웨어적으로 처리하는데, 이를 ‘바이너리 트랜슬레이션(binary translation)’이라고 한다.

위 그림은 바이너리 트랜슬레이션을 통한 전가상화 과정을 보여 준다. (Ring 1에서 수행되는 게스트 OS의 커널 명령 중에 ‘가상화가 불가능한 명령(nonvirtualizable instructions)’을 가상화 효과를 내기 위한 ‘새로운 명령 셋(new sequences of instructions)’으로 바이너리 트랜슬레이션을 수행한다.)

바이너리 트랜슬레이션은 게스트 OS에서 특권 명령을 수행할 때 트랩이 발생하고 제어가 하이퍼바이저로 넘어간다. 이때 하이퍼바이저는 CPU가 인식할 수 있는 명령으로 변경하여 하드웨어에 전달하는 방식이다.


■ 하드웨어 지원 기반 전가상화

dasdasdwww

하드웨어 기반의 전가상화는 바이너리 트랜슬레이션을 제거하고, 가상화 지원 기능이 내장된 하드웨어가 직접 연산을 수행하도록 한다.

이 방식은 사용자 프로그램은 가상화 기술을 통해 하드웨어에 직접 요청을 보낼 수 있고 만약 게스트 OS가 트랩을 발생시키면, 하이퍼바이저는 별도의 바이너리 트랜슬레이션 과정 없이 가상화 기술을 이용해 하드웨어를 직접 제어한다.

하드웨어 기반의 전가상화는 non-root 모드와 root 모드를 구분하는데, 이를 통해 non-root 모드에서는 물리 시스템과 동일하게 운영체제가 Ring 0에서 동작하게 하고, root 모드에서는 하이퍼바이저가 동작하도록 합니다. 이런 방식으로 특권 레벨을 명확하게 구별하게 된다.

VT-x나 AMD-V는 가상화 관련 새루운 명령을 추가하여 하이퍼바이저가 Ring 0보다 높은 특권을 갖는 root 모드에서 실행하도록 하여 특권 명령이나 ‘민감한 요청(sensitive call)’이 게스트 OS부터 발생할 때 하이퍼바이저로 트랩이 발생하여 하이퍼바이저가 처리할 수 있도록 한다. 이를 통해 오버헤드가 많이 발생하는 바이너리 트랜슬레이션 과정을 제거하였다.


■ 반가상화

반가상화는 소프트웨어적 전가상화의 단점을 보완하기 위해 Xen에서 고안한 가상화 방식으로, 반가상화의 게스트 OS는 자신이 가상화 환경에서 동작하고 있다는 것을 인지한다.

게스트 OS가 가상화 환경에서 동작한다는 것을 인지한다 것은, 게스트 OS가 하이퍼바이저에게 어떤 요청을 해야 하는지를 알고 있다는 뜻이다. (즉, 게스트 OS가 하이퍼바이저와 통신을 하기 위해서는 이에 맞게 수정되어야 하며, 이러한 수정을 통해 하이퍼바이저와 통신할 수 있는 API가 추가된다.)

Xen-supports-both-Full-virutalization-and-Paravirtualization


■ 하이브리드 가상화

하이브리드 가상화는 반가상화와 하드웨어 기반 가상화를 조합한 방식으로 하드웨어 기반의 가상화는 하이퍼바이저를 단순하게 하고 특히 운영체제의 수정이 필요치 않은 전가상화 환경에서 성능을 향상시킨다.

하지만, 하드웨어 기반의 가상화는 소프트웨어 기반의 반가사화 보다 성능이 떨어지는 경우가 있다. 이러한 경우는 일반적으로 I/O나 메모리 집약형 작업을 처리할 때 발생한다. 엔터프라이즈급의 환경에서 메모리나 I/O 집약형 작업에 대한 성능 저하 이슈는 상단한 문제가 될 수 있다.

하드웨어 기반의 가상화 환경에 반가상화의 네트워크와 디스크 드라이버를 사용함으로써 I/O 집약형 작업에 대한 성능 차이를 해소하고, 메모리 집약형 작업에 대해서 하드웨어 기반의 가상화에서는 현재 작업 중인 프로세서에 대한 MMU(Memory Management Unit)를 하드웨어의 자원을받아 가상화할 수 없고 MMU를 소프트웨어 적으로 가상화한다.

dadas


■ OS 레벨 가상화

OS 레벨 가상화는 일반적으로 ‘컨테이너화’로 불리며, 물리시스템에 설치된 운영체제 위에 컨테이너를 구동할 수 있는 컨테이너 엔진을 설치하여 컨테이너를 마치 가상머신처럼 관리하는 방식이다.

OS 레벨 가상화와 하이퍼바이저의 가장 큰 차이점은 운영체제의 공유 여부이다. 하이퍼바이저에서는 가상머신의 운영체제는 서로 다를 수 있지만 컨테이너 기반의 가상화에서는 물리시스템에서 동작하는 운영체제를 모든 컨테이너가 공유하는 시스템이다. (즉, 컨테이너가 서로 다른 운영체제를 사용한다면 동작할 수 없다.)

image

컨테이너 개념은 리눅스 시스템의 리소스를 분리하는 기술을 기반을 두고 있고, 프로세서와 이 프로세스가 생성하는 자식 프로세스의 루트 디렉터를 변경하는 chroot까지 거슬러 올라간다. chroot를 통해서 분리된 환경은 지정된 디렉터리 내의 파일만 접근이 가능하게 되어 프로그램이 실행되는 환경을 분리할 수 있다.

가상화와 컨테이너 기술 모두 가상머신과 프로그램이 실행되는 환경을 분리시킴으로써 자원의 활용률을 높이고 상호 간섭을 제거하여 안전하게 실행될 수 있도록 한다.

CLOUD 카테고리 내 다른 글 보러가기

댓글 남기기