[etc] Çϵå¿þ¾î °¡»óÈ­ ¸í·É¾î¿¡ ´ëÇÑ À̾߱â

   Á¶È¸ 8508   Ãßõ 1    

 인텔 VT-x는 하드웨어 가상화를 구현하기 위해 만들어진 명령어입니다.


VT-x는 VMX(Virtual Machine Extension)이라고도 불리며, 전가상화(커널 수정이 없는 가상화) 환경에서 특권 명령을 수행하는데 드는 오버헤드를 감소시킬 수 있습니다.

이것을 이해하기 위해서는 먼저 CPU의 동작 레벨에 대해 이해할 필요가 있습니다.

X86-64CPU는 내부적으로 Ring이라 불리는 실행 레벨을 가지고 있고, 0-3까지의 레벨이 존재합니다.

이 때, Ring-0를 특권 모드라고 부르며, 이 모드에서는 모든 명령어를 실행할 수 있습니다. 때문에 시스템 자원을 관리하는 OS 커널이 Ring-0에서 동작하게 됩니다.


Ring 1-2는 예약된(Reserved) 상태이고, 우리가 보통 사용하는 프로그램들은 Ring-3에서 동작하게 됩니다. 이 Ring-3를 비 특권 모드 또는 유저 모드라고 부르며, 하드웨어에 직접 접근하거나, 중요한 레지스터의 값을 변경하는 등의 명령어를 실행할 수 없습니다. 이것을 통해 우리는 잘못 만들어진 프로그램이나 악성 프로그램이 시스템 전체를 망가뜨리는 것을 막을 수 있습니다.


그런데 호스트 OS의 커널이 Ring-0를 물고 있는 상황에서 VM의 커널이 어떻게 특권 명령을 실행할 수 있을까요?


X86 이전에 등장한 가상화에서는 이것을 'Trap and Emulate'로 처리했습니다. 게스트 OS의 실행을 쭉 감시하고 있다, 특권 명령이 발생하면 VMM이 그것을 캐치(Trap), 하이퍼바이저에서 처리하고(Emulate) 결과값을 게스트 OS의 커널에 돌려줬습니다.

리소스 소모가 크고 느리긴 하지만 확실하게 호환성을 보장할 수 있는 방법이었습니다.


하지만 X86은 'Trap and Emulate'만으로 가상화를 구현하기에 무리가 있었습니다. 그것은 아키텍쳐 상의 특정 명령어가 특권 모드와 비 특권 모드에서의 동작이 다르게 짜여져 있었기 때문에 단순히 Ring-3에서 동작하는 게스트 OS에서 Trap이 발생하는지를 따지는 것으로 처리할 수 없었기 때문입니다.

이 문제에 대해 VMware는 이진 변환을, Xen은 Hypercall을 통한 처리를 제안했습니다. 이진 변환은 이러한 명령어를 하이퍼바이저가 '적절하게' 변환시켜 처리한다는 발상이었고, Hypercall은 게스트 OS의 커널을 수정하여 그러한 명령어를 Hypercall로 대체, 커널에서 문제가 되는 명령이 발생했을 때, Hypercall을 호출하여 하이퍼바이저가 명령을 처리하게 만드는 개념이었습니다.

Hypercall이 호출되면 Ring-0에서 명령이 실행됨을 의미하고, 시스템 애플리케이션에서 명령을 실행하면 그대로 Ring-3에서의 동작을 하게 됩니다.


당연히 이진 변환보다 Xen이 사용하는 Hypercall의 성능이 더 좋았고, 전가상화와 대비되는 반가상화라는 명칭을 갖게 됩니다.


그런데, X86 가상화가 확산되니 CPU 제조사에서는 이것을 하드웨어적으로 처리할 방법을 제공하게 됩니다. 그것이 바로 인텔의 VT-x와 AMD의 AMD-V입니다.


VT-x/AMD-V가 활성화되면 Ring-0가 Root/non-Root로 나뉘게 됩니다.

그리고 하이퍼바이저가 Ring-0 Root에, 게스트 OS가 Ring-0(non-Root)에서 실행됩니다. 그리고 그 위에 Ring-3가 존재하며, 이것은 게스트 OS마다 독립된 환경을 가지게 됩니다.

같은 Ring-0이지만. non-Root에서는 몇가지 명령어가 제한됩니다. 대신, 명령어가 Ring-0에서 실행되는지(커널인지) Ring-3에서 실행되는지(사용자 애플리케이션인지)가 명확하게 드러나므로, 명령어를 변환하거나 OS의 커널을 수정할 필요가 없습니다.

특권이 필요한 명령어가 발생하면, 하이퍼바이저로 제어권을 넘겨서 처리하면 됩니다.


때문에 성능상에서 많은 이득을 볼 수 있고, 대부분의 하이퍼바이저들은 하드웨어 가상화를 이용하고 있습니다.

ÀÌ°©ºÎ 2016-04
¿À´Ã À̱ÛÀ» Àо¾Ò´Âµ¥
¸¹Àº »ý°¢ÀÌ µå³×¿ä
ÁÁÀº±Û Àß Àоú½À´Ï´Ù
¶Ç Çϳª ¹è¿ö °©´Ï´Ù


Á¦¸ñPage 73/128
2014-05   4954371   Á¤ÀºÁØ1
2015-12   1490864   ¹é¸Þ°¡
2021-01   5275   1ȸ¿ë
2022-01   3745   B4TT3RY
2013-07   13737   ȸ¿øK
2014-07   6541   chotws
2015-07   8828   witbox
2015-08   6996   ǪÇÏÈ÷
2016-02   7334   yexxnoah
2016-03   8509   ¼ÛÁÖȯ
2016-05   6057   wdm42
2018-08   6728   FOXBI
2020-02   4933   ÇູÇϼ¼
2022-03   4172   seoforce
2014-07   9799   zzangzw
2015-02   5645   ¼ÛÁÖȯ
2015-09   4932   ³ÊÀdz²ÀÚ
2017-01   8211   ÀÌÁؼ­
2015-12   6031   ¾ÈÇü°ï
2017-10   8954   kernel443c
2019-04   5372   ddeell
2020-07   4563   ÇູÇϼ¼