인텔 IDF 2008에서 가상화 기능 확충 방침이 설명되었습니다. 아래는 http://enterprise.watch.impress.co.jp/cda/topic/2008/09/05/13785.html에서 인텔 가상화 기능 관령 정보를 정리한 것입니다.


하이퍼 바이저의 성능을 올린 CPU

인텔의 CPU에는 VT-x라는 하드웨어적인 가상화 지원 기능이 탑재되어 있습니다. 현재 펜린 세대의 CPU에 탑재된 VT-x 기능은 가상화의 하이퍼 바이저의 우선 순위를 올려 OS 커널의 동작 모드보다 더 높은 우선도의 모드인 VMX Root/VMX non-Root로 동작하도록 하는 것입니다. 또한 하이퍼 바이저가 가상 머신을 바꿨을때 CPU의 레지스터를 효율적으로 교체할 수 있는 명령과 레지스터의 보존 영역이 있습니다(VMCS Virtual Machine Control Structure).

idf0002.jpg

인텔의 가상화는 이런 기능에 의해 구성됩니다.

이러한 기능을 하드웨어적으로 지원하는 것으로 인텔 CPU는 고속으로 하이퍼 바이저를 움직일 수 있습니다(AMD의 옵테론에서도 같은 기능을 지원하고 있습니다).

이 VT-x는 최신 펜린 뿐만 아니라 펜티엄 D부터 일부 CPU에서 탑재하고 있습니다. 또한 아이테니엄에도 VT-x와 같은 가상화 지원 기능인 VT-i가 탑재되어 있습니다. VT-x를 사용하면 소프트웨어 기능 실현과 비교했을때 2배 이상의 성능 향상이 있습니다.

현재 마이크로소프트의 하이퍼-V, VM웨어의 ESX 서버, Xen 등의 많은 가상화 소프트웨어에서 VT-x를 지원하고 있습니다. 이를 통해 가상 환경의 성넝을 향상시킬 수 있어 1개의 컴퓨터로 보다 많은 가상 머신을 작동시키거나 복잡한 처리를 할 수 있게 됐습니다.

인텔의 차세대 CPU인 코어 i7(코드명 네할렘)은 VT-x의 기능을 더 확충하려 하고 있습니다.

코어 i7에는 Extended Page Tables(EPT)와 Virtual Processor ID(VPID)라는 기능이 탑재되어 있습니다. 하이퍼 바이저는 물리 메모리 공간을 가상 머신이 작동하는 가상 메모리 공간에 맵핑하는 것으로 가상 머신이 여러개 작동중이어도 제대로 정리하고 작동할 수 있습니다. 다만 현재의 하이퍼 바이저는 소프트웨어로 메모리 공간을 관리하고 있기 때문에 하이퍼 바이저에서 메모리 관리를 실행하는 작업이 작동하게 됩니다. 때문에 여러개의 가상 머신을 실행하는 하이퍼 바이저에서는 각각의 동작에 메모리 맵핑을 하기 때문에 여기서 상당한 성능 저하가 있습니다.

하지만 EPT는 메모리 맵핑 계산을 하드웨어적으로 지원합니다. 이를 통해 가상 머신의 메모리가 물리 메모리의 어느 부분에 있는지를 빠르게 계산할 수 있게 되어, 하이퍼 바이저에서 자주 계산을 하던 메모리 맵핑 기능을 빠르게 처리할 수 있게 되었습니다.

idf0007.jpg

코어 i7에서 지원하는 EPT는 가상 머신의 메모리 엑세스 가속을 지원합니다.

idf0016.jpg

코어 i7에서 지원되는 EPT와 VPID로 가상 환경의 성능이 현재 CPU보다 40% 이상 향상합니다.

idf0017.jpg

EPT는 가상 머신의 메모리 영역을 물리 머신의 메모리 영역으로 변환하기 위한 테이블을 하드웨어적으로 지원하고 있습니다.

다른 기능인 VPID는 가상 머신이 바뀌었을때 물리 머신의 메모리와 가상 머신의 메모리 공간을 맵핑해두는 테이블을 각각의 가상 머신마다 저장해 두는 기능입니다. 이것 덕분에 가상 머신이 바뀌어도 가상 머신마다 메모리 공간을 맵핑해둔 테이블을 저장해 두었기 때문에 바로 테이블을 불러올 수 있습니다.

EPT도 하이퍼 바이저에서 지원하지 않으면 CPU에서 지원해도 성능 향상은 없습니다. 현재 하이퍼-V, ESX 서버, Xen 등이 EPT를 지원할 예정입니다(Xen은 3.3에서 EPT를 지원하고 있으며, 하이퍼-V, ESX 서버는 다음 버전에서 지원할 예정입니다).

인텔은 EPT와 VPID를 지원하는 하이퍼 바이저가 어느 정도의 성능 향상이 있을지는 확실하게 밝히진 않았지만, 공개된 자료를 보면 현재 펜린 CPU보다 2배 가까운 성능 향상의 가능성이 있습니다.

그 외에도 가상 환경에서 발생하는 인터럽트에 우선 순위를 붙여 정리하는 VT FlexPriority가 있습니다. 지금까지의 하이퍼 바이저에서는 다수의 가상 머신에서 발생하는 인터럽트를 관리하기 위해 APIC를 소프트웨어로 실현하고 있었습니다. 하지만 VT FlexPriority에서는 APIC의 TPR(작업의 우선 순위를 나타내는 레지스터) 하드웨어에 가상 머신이 직접 접근해도 문제가 일어나지 않습니다. 따라서 원래 가상 머신에서 인터럽트가 일어날 때마다 하이퍼 바이저에서 실행했던 것이 이것 덕분에 가상 머신 내부에서 APIC의 엑세스가 종료되며 가상 머신과 하이퍼 바이저 사이의 변환 작업이 필요가 없어졌기 때문에 변환 작업의 오버헤드가 줄어들게 됩니다.

인텔은 FlexPriority를 하이퍼 바이저가 지원할 경우 35% 정도의 성능 향상이 있다고 보고 있습니다.

idf0005.jpg

FlexPriority를 지원하면 가상 환경의 성능이 35% 정도 향상됩니다.

idf0006.jpg

FlexPriority는 가상 머신의 인터렙트를 하이퍼 바이저를 통해 소프트웨어적으로 처리하는 것이 아니라, 가상 머신에서 직접 APIC에 엑세스하여 가상 머신과 하이퍼 바이저의 변환 회수를 줄여 성능 향상을 도모합니다.


가상 환경의 서버간 변환을 지원하는 FlexMigration

인텔 CPU는 각 세대에 따라 지원하는 명령이 약간씩 다릅니다. 기본적인 명령은 펜티엄 3에서부터 거의 변하지 않았지만, SSE라고 하는 부동 소수점의 SIMD 처리 명령은 세대마다 버전이 업그레이드되고 있습니다.

예를 들어 가상 머신의 어플리케이션이 SSE4를 사용하는 경우(물리적인 CPU도 지원한다고 가정), 가성 머신을 다른 물리적 서버에 변환하는 Live Migration(VM웨어에서는 VMotion이라고 합니다)을 사용하려면 그곳의 물리적 서버도 SSE4를 지원해야만 합니다. 따라서 변환되는 물리 서버가 SSE3까지만 지원할 경우 가상 머신에서 작동하던 SSE4용 어플리케이션은 충돌을 일으키게 됩니다. 이와 같이 새 CPU와 구형 CPU는 일부 다른 점이 있기 때문에 다른 세대를 조합한 서버에서는 문제가 발생하게 됩니다.

따라서 인텔 CPU에서 FlexMigration를 지원하여 구형 물리적 서버로 변환해도 문제 없이 작동할 수 있도록 하였습니다(AMD도 Extended Migration라는 기능을 지원합니다).

VM웨어의 ESX 서버는 인텔의 FlexMigration와 AMD의 Extended Migration을 지원하기 때문에 VMotion에서도 CPU 호환성을 보증하고 있습니다.

VT-x, FlexPriority, FlexMigration 등의 기능은 2007년 11월에 출시된 제온 5400 이후에서 지원하고 있으며, VT-x의 신기능인 EPT와 VPID는 차세대 코어 i7에서 지원하게 됩니다(인텔은 EPT와 VPID를 VT-x 2세대로 부르고 있습니다).

idf0033.jpg

가상 서버 사이에 가상 머신을 변환할 경우 CPU나 플랫홈이 다르면 새 CPU에 맞춰 튜닝된 어플리케이션이 구형 CPU에서 작동하지 않습니다.

idf0034.jpg

FlexMigration은 가상 서버 사이의 차이를 극복하고 가상 서버에서 어플리케이션의 충돌을 없애줍니다.

idf0035.jpg

FlexMigration은  2006년에 출시된 제온에서 지원하며 이보다 전에 나온 제품에서는 지원하지 않습니다. 현재의 펜린, 이후의 네할렘에서도 이를 지원합니다.


가상화를 I/O까지 확장한 VT-d

인텔의 CPU 가상화는 VT-x, FlexPriority, FlexMigration 등에서 진행하지만 주변 기기 입출력의 가상화는 X35 칩셋에서 탑재된 VT-d(Virtualization Technology for Directed I/O)를 통해 지원됩니다.

idf0008.jpg

VT-d는 칩셋에서 지원하는 가상화 지원 기능입니다.

VT-d는 I/O에서 사용하는 DMA의 주소를 물리적 서버와 가상 머신 사이에 맵핑하는 기능을 하드웨어적으로 지원하는데, 이것에 의해 가상 머신에서 직접 I/O에 액세스 할 수 있습니다.

지금까지의 하이퍼 바이저에서는 가상 머신에서 가상 드라이버를 통해 하이퍼 바이저나 부모 OS에 있는 특수한 드라이버가 다수의 액세스를 조정하여 물리적 서버의 I/O 드라이버에 액세스하는 것으로 I/O 하드웨어를 가상화 하였습니다.

I/O를 가상화하는 것으로 다수의 가상 머신에서 1개의 I/O를 공유할 수 있지만 그만큼 성능은 떨어지게 됩니다. 여기서 가상 머신에서 직접 I/O에 액세스 할 수 있도록 한 것이 VT-d입니다.

idf0009.jpg

VT-d를 통해 가상 머신이 I/O를 사용할 경우 DMA를 하드웨어적으로 맵핑하여 I/O의 가상화를 지원합니다.

VT-d를 사용하면 가상 머신에서 직접 I/O에 액세스 할 수 있어 물리 서버에서 I/O에 접속하는 것과 같은 성능을 낼 수 있습니다. 드라이버는 가상 드라이버가 아니라 VT-d를 지원하는 드라이버(물리적 머신에 설치하는 드라이버에 VT-d 기능 추가)를 사용합니다.

하지만 가상 머신에서 직접 I/O에 액세스 하기 때문에 가상 머신이 I/O를 점유하게 됩니다. 때문에 다수의 가상 머신에서 1개의 I/O를 공유할 수 없습니다(현재는 PCI-E 카드만 지원). 예를 들어 네트워크 카드를 VT-d에서 사용한다면 가상 머신의 숫자 만큼 네트워크 카드가 필요하게 됩니다. 여러 PCI-E 카드를 사용할 수 있도록 슬롯의 수가 많다고 해도 한계가 있습니다.

따라서 다수의 가상 머신을 사용할 경우에는 높은 성능이 필요하는 가상 머신에만 VT-d를 사용하고, 나머지 가상 머신은 지금까지와 똑같이 I/O를 가상화하여 사용하게 됩니다(다음 버전의 VM웨어 ESX 서버에서는 VT-d를 지원할 예정이며 Xen은 현재 지원중입니다).

idf0020.jpg

VT-d에서는 DMA와 I/O 주소의 리맵핑을 하드웨어에서 지원합니다.

idf0022.jpg

VT-d의 동작도.

idf0024.jpg

VT-d를 사용하여 가상 머신에서 직접 네트워크 카드에 액세스 했을 경우, 물리적 서버에서 사용한 것과 거의 같은 성능을 구현합니다.

앞으로는 PCI-E 카드의 가상화가 필요하게 될 것입니다. 현재 PCI-SIG에서는 PCI-E 카드의 가상화인 IOV의 스펙이 제정되고 있습니다. IOV를 지원하는 I/O 카드가 출시되면 VT-d를 이용하여 액세스해도 I/O가 가상화되었기 때문에 1개의 가상 머신이 I/O를 점유할 것도 없고 성능도 향상됩니다(1개의 물리 머신으로 사용하는 것과 비교하면 오버헤드가 있긴 하지만 아주 작아질 것입니다).

이쯤 되면 가상화에서 큰 문제가 있는 디스플레이도 가상화가 가능할 것입니다. 현재와 같은 표준적인 베사 디스플레이가 아니라 그래픽 카드의 기능을 유지하면서 가상화할 수 있습니다. 또한 디스크 I/O를 직접 가상화 하게 되면 디스크 액세스의 성능도 향상될 것이고, 이 경우 가상화의 성능이 대폭 향상될 것입니다.

idf0027.jpg

PCI-SIG에서 제정한 IOV를 PCI-E 카드기 지원한다면 VT-d와 조합하여 가상 머신에서 직접 PCI-E 카드를 액세스 할 수 있습니다.

idf0028.jpg

IOV를 통해 다수의 가상 머신에서의 액세스를 PCI-E 카드에서 가상화 할 수 있습니다.


네트워크 카드의 성능을 향상하는 VT-c

VT-c(Virtualization Technology for Connectivity)는 네트워크 인터페이스 가상화에서 성능 향상을 하는 것으로서, 네트워크 카드에 탑재되는 네트워크 카드를 대상으로 하는 기능입니다.

idf0010.jpg

VT-c를 지원하는 네트워크 카드는 다수의 가상 머신에서 트래픽을 정리하여 TCP/IP의 패킷을 손실 없이 송/수신할 수 있습니다.

idf0011.jpg

왼쪽은 소프트웨어에서 I/O를 에뮬레이션하는 가상화이고, 오른쪽은 VD-d를 사용하여 가상 머신에 I/O를 직접 맵핑하여 I/O의 물리적인 성능을 가상 머신에서 이용하는 것입니다.

idf0012.jpg

VT-c를 구성하는 VMDq는 이처럼 가상 머신에서의 네트워크 액세스를 하이퍼 바이저와 네트워크 카드에서 효율적으로 TCP/IP 패킷을 재배열합니다.

VT-c는 I/O AT(Acceleration Technology), VMDq(Virtual Machine Device Queues), Single Root I/O Virtualization로 구성되어 있습니다.

I/O AT는 네트워크 카드에서 TCP/IP 프로토콜의 처리(오프로드)를 하는 것으로 OS에서의 처리를 간소화해 CPU 부하를 낮추는 기능입니다. 이것과 PCI-SIG에서 책정한 I/O의 가상화 IOV의 Single Root I/O Virtualization를 조합하면 가상 환경에 있는 네트워크 카드를 I/O 레벨에서 가상화할 수 있습니다.

거기에 다수의 가상 머신에서의 네트워크 카드 액세스를 조정하고 효율적으로 통신하도록 데이터를 재배열합니다. VMDq를 사용하면 가상 머신에서 네트워크 트래픽 성능을 향상시킬 수 있습니다.

idf0013.jpg

VMDq는 VM웨어의 NetQueue에서 지원합니다. 다른 하이퍼 바이저에서도 앞으로 VT-c를 지원할 예정입니다.

idf0014.jpg

VMDq와 NetQueue를 같이 사용하면 가상 환경에서 네트워크 성능이 3배 이상 향상됩니다.

idf0025.jpg

I/O AT의 기능입니다. TCP/IP의 프로토콜 처리를 네트워크 카드에서 실시하여 OS의 부하를 줄여 성능을 향상시킵니다.

idf0026.jpg

I/O AT를 지원하는 인텔의 네트워크 칩.

현재 VT-c를 지원하는 하이퍼 바이저로는 VM웨어 ESX Ssever가 있습니다. VM웨어의 NetQueue와 VT-c를 조합하여 네트워크 성능이 대폭 향상하는데, 인텔은 벌써 VT-c를 지원하는 네트워크 카드를 출시할 예정입니다. 이런 네트워크 카드에서 iSCSI를 사용하여 가상 머신에 부담을 주지 않고 고속으로 액세스 가능한 네트워크 드라이브가 실현됩니다.

idf0032.jpg

코어 i7은 새로운 명령의 추가와 플랫홈의 성능 향상을 통해 iSCSI의 성능을 대폭 향상시켰습니다.

인텔은 CPU, 칩셋, I/O 카드 등의 다양한 제품에서 가상화를 지원하는 기능을 준비중입니다. 모든 부분에서 가상화 지원 기능을 집대성한 Virtualizaion 2.0의 완성은 코어 i7에서 이루어질 것입니다. 네트워크 카드의 가상화는 먼저 진행되고 있긴 하지만 PCI-E 카드 전체의 가상화는 2009년부터 본격적으로 지원하게 될 것입니다.

idf0001.jpg

인텔 가상화 2.0은 새로운 단계에 접어들고 있습니다.

idf0003.jpg

인텔 가상화 2.0에서는 가상화 오버헤드를 줄여 가상 머신을 물리 서버와 가까운 성능을 실현할 수 있습니다.

idf0004.jpg

가상화 2.0에서 실현되는 플랫홈은 다양한 가상화 지원 기능을 통해 가상 환경이 고속으로 작동합니다.

다만 하드웨어에가 모든 부분에서 가상화를 지원해도 하이퍼 바이저나 가상 머신에서의 전용 드라이버 등, 소프트웨어적인 지원이 필요합니다.

Xen은 이런 선진적인 가상화 기능을 의욕적으로 추가하여 최신 버전에서 많은 기능이 지원되고 있습니다. VM웨어는 좀 더 보수적으로, 2009년에 출시되는 다음 버전의 ESX 서버에서 가상화 2.0과 다른 기능들을 지원합니다. 특히 인텔과 aMD가 협조하여 하이퍼 바이저의 개발을 실시하기 때문에 안정된 형태의 최신 가상화 지원 기능이 지원될 것입니다.

마이크로소프트의 하이퍼-V에 대해서는 현재의 1.0까지만 지원하며, 2.0에서 지원하는 많은 기능은 아직 지원하지 않습니다. 따라서 가상화 2.0을 지원하기 위해서는 다음 버전의 하이퍼-V를 제공해야 할 필요가 있습니다.

또한 인텔은 VT-x 때문에 하이퍼 바이저에 취약점이 나올 가능성이 있다고 보고 있습니다. 때문에 하이퍼 바이저가 실행되기 전에 하이퍼 바이저의 변조 가능성을 체크하는 TXT(Trusted Execution Technology)와 TPM 디바이스를 사용하여 하이퍼 바이저의 정확성을 체크할 수 있습니다.

이를 사용하면 하이퍼 바이저가 해킹되어 악성 코드가 칩입해도 하이퍼 바이저가 변조된 것인지를 알 수 있습니다.

다만 아직까지는 TXT를 지원하는 소프트웨어가 출시되지 않았고 다수의 서버에서 TPM 디바이스가 탑재되지 않았기 때문에 TXT를 사용하는 하이퍼 바이저의 정확성 체크는 2009년 이후에나 가능할 것입니다.
기글하드웨어(http://gigglehd.com/zbxe)에 올라온 모든 뉴스와 정보 글은 다른 곳으로 퍼가실 때 작성자의 허락을 받아야 합니다. 번역한 뉴스와 정보 글을 작성자 동의 없이 무단 전재와 무단 수정하는 행위를 금지합니다.