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

   Á¶È¸ 8518   Ãßõ 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 83/128
2014-05   4973218   Á¤ÀºÁØ1
2015-12   1509515   ¹é¸Þ°¡
2016-10   17099   ÇູÇϼ¼
2017-02   12401   ŸÀÌ°ÅÅ°ÀÌÀÍ
2018-06   6075   kokoas
2019-04   8017   ÇູÇϼ¼
2020-11   3530   GPGPU
2021-04   5785   dateno1
2021-10   4138   ¼ÛÁÖȯ
2023-02   16581   newssajabi
2023-08   14090   ³×¹ö´ÙÀÌ
2013-08   37599   ȸ¿øK
2015-03   6162   Á¶º´Ã¶
2015-07   6683   ½½·çÇÁ
2015-11   7043   ¹Ú¿Ï°æ
2016-07   6856   ¹Î»çÀå
2016-09   30352   ¹é¸¸½º¹°Çϳª
2018-02   7270   ÄÚ¸¶
2019-07   11952   ÀÌÀÌÅ©
2021-07   3386   ³ª¶ó»ç¶û
2022-03   5392   seoforce
2022-09   7889   °Ü¿ï³ª¹«