728x90
반응형

- Virtual Machine(이하 VM)에도 CPU가 있지만 실제 VM내의 게스트OS에서의 발생하는 모든 프로세스들은 VM이 아닌,
실제 호스트의 CPU에서 처리가 이루어지며, 게스트OS에서 발생하는 프로세스들(CPU Process)은 VMkernel의 'VMM'을 통해 실제 호스트의 CPU로 프로세스 처리가 가능하도록 전달해줍니다.
(VMM은 'Virtual Machine Monitor'이며 VM에서 실행되는 실제 CPU명령을 전달해줍니다, 하나의 VM에 하나의 VMM이 반드시 생성되며, 개별 VM들이 서로 충돌이나 간섭없이 작동될 수 있도록 격리시키져는 역할도 하게 됩니다.

이 때, CPU에게 명령을 전달해주는 방식으로는 두 가지가 있습니다.


1. Binary Translation
 --> VM내의 게스트OS에서 CPU에 직접 명령을 전달해야하는 Privilege code들을 'Binary Translation' 기법을 통해 중간에 가로채어 에뮬레이션화 해서 접을 조종하게 됩니다.


2. Direct Execution
 --> RIng 0접근이 필요없는 사용자 레벨(Ring 3)에서의 코드들은 'Direct Execution(직접 실행)' 기법을 사용하게 됩니다.)


 - VMKernel은 모든 VM에게 발생하는 CPU Process들은 최대한 균등하게 분배할 수 있도록 전체 물리적인 CPU 리소스를 스케줄링하며 시분할 방식을 통해 프로세스를 처리하려고 합니다.


 - 멀티코어 프로세서


: 코어 개수가 많으면 많을소록, 더 많은 가상 CPU를 사용할 수 있게됩니다. vSphere서버에서 각 코어는 하나의 Logical Processor단위로 인식이 되며,듀얼코어 CPU의 경우 2개의 Logical Processor단위로 인식하게 되며, 그 위에 Virtual CPU를 할당하여 사용하게 됩니다.


- 하이퍼쓰레딩


: 하이퍼쓰레딩이란 OS가 물리적인 하나의 CPU를, 두 개의 논리적인 CPU처럼 인식하여 동작하게 해주는 기술입니다.
vSphere에서도 하이퍼쓰레딩을 지원하게 되며, 기능이 설정되었다면, 모두 Logical Processor로 인식하게 됩니다.


 - DVFS(Dynamic Voltage and Freqyency Scaling)


: CPU의 Clock rate와 전력을 동적으로 조정하여 전력비용을 절감 시킬 수 있는 기술입니다.
설정에 따라 CPU가 갖고 있는 최대 Clock rate를 사용할 수 도 있으며, CPU 사용량에 따라 vSphere서버 스스로 동적으로 Clock rate를 변경할 수 있습니다.


 - CPU Affinity


: VM의 Virtual CPU가 보는 호스트의 CPU는 항상 같을 수는 없습니다.
첫 번째 명령을 0번 코어가 처리했다면, 두 번째 명령을 4번 코어가 처리할 수도 있습니다, 하지만 특정 VM에서 일어나는 CPU 명령을 고정적으로 처리할 수 있게 CPU를 지정해주는 기능을 말합니다.
주의해야 할 사항은, Affinity 설정 시 기존CPU 개수에 +1를 해주는 것이 좋습니다. 그리고 하이퍼쓰레딩을 사용하는 경우에는 CPU번호를 떨어뜨려서 사용해야 합니다 (Ex, CPU0-CPU4)
왜냐하면, 하이퍼쓰레딩의 경우 물리적 한개를, 논리적 2개로 인식을 합니다. vSphere서버가 CPU를 인식할 때는 물리적 CPU내의 논리적 CPU순서입니다.(물리CPU0 - 논리CPU0, 물리CPU1 - 논리CPU-1....등)
Affinity설정 시, CPU0-CPU1를 하게 된다면 논리적으로 보았을 때는 별 문제 없어보이나 물리적으로 본다면 실질적으로 코어
 한개만을 사용하는 것이 되기 때문입니다(하이퍼쓰레딩을 사용시 Affnity설정할 때의 이야기입니다).


 

- Full Virtualization, Paravirtualization


1. Full Virtualization, 대표로는 VMware의 ESX서버입니다


여기서 작동되는 게스트OS는 자신이 하이퍼바이저 커널에서 작동되고 있다는 것을 모릅니다. 단순히 자신에게 물리적인 장치들이 장착되어 있으며 나 혼자만이 하드웨어를 독점하여 사용하고 있다고 생각할 뿐입니다.
이와 같이 스스로 착각을 하기 때문에, CPU의 경우 VMware에서 'Binary Translation'과 'Direct Execution' 과 같은 기법을 통해 CPU 명령을 중간에서 변환시켜야 하는 일종의 오버헤드가 발생하기 때문에 성능저하가 발생할 여지가 존재하게 됩니다.


2. Paravirtualiztion, 대표로는 Zen 서버입니다.


Full Virtualization과는 조금 다릅니다, 최초엔 하이퍼버이저에서 인식할 수 있는 특별한 시스템 콜 명령을 가지고 있는 게스트OS여야만 작동이 가능했습니다. 이 방식을 통해 직접 CPU에게 명령을 전달하여 오버헤드를 줄일 수 있으므로, Full Virtualization보다 좀 더 하드웨어에 근접한 성능을 뽑아낼 수 있었으나, 게스트OS의 커널이 수정되어야 하는 불편함이 존재했습니다.
리눅스의 경우는 시스템 콜 명령이 커널 내부에 포함되어 작동이 되었지만(커널 2.6이상) 윈도우의 경우 그렇지 않았습니다.
그러나 Intel VT-x , AMD-V 기술이 나오게 되면서 이러한 부분이 해결이 되었습니다.
VMM이 Ring -1로 가게되면서 게스트OS가 제약없이 RIng 0의 하드웨어 접근권한을 갖게 되므로, 윈도우에서도 커널 수정없이 바로 작동이 가능하게 된 것입니다.

728x90
300x250
728x90
반응형

VT-D는 가상머신에서 장치에 직접 엑세스를 할 수 있게 해주는 기능 입니다.

 

이게 아래와 같은 경우 아주 유용합니다.

 

예를 들어 ESXi 같은 하이퍼바이저에서 VT-D를 지원하는 경우... VMDirectPath라는 기능을 사용합니다.

레이드 컨트롤러 같은 것을 가상머신에 지정하여 가상머신에서 직접 입출력관리를 할 수 있게 해줄 수 있죠.

만일 이게 안되면 가상머신에 가상디스크를 할당하여 사용해야 하는데, 성능과 관리적 측면에서 상당히 손해가 되겠죠.

암튼 저같은 경우 몇번 써보니 아주 유용했습니다.

 

참고 문서 : http://www.servethehome.com/configure-passthrough-vmdirectpath-vmware-esxi-raid-hba-usb-drive/

 

 

가상화를 할때 '호스트 OS' 기반이던 '하이퍼바이져(Hypervisor)'기반이던. 각각의 디바이스들은 VMM을 통해서 각각의 VM 들과 연결이 되며 vmm을 통해서 디바이스를 가상으로 에뮬레이션하여 자원을 할당받아보니. 효율성 문제와 병목현상이 발생합니다.

 

 

 

 




왼쪽이 일반 소프트웨어 방식의 I/O 가상화를 통한 연결방식을 보여주는것이고. 오른쪽이 VT-D 기술을 사용하여 VM 들과 연결된 상태를 보여줍니다. 이렇게 디바이스를 직접적으로 연결하기 위해서는 DMA Remapping 이라는 기능이 필요한데. (위 이미지 하나만 보셔도 차이는 쉽게 이해 되실겁니다.) 그래서 각각의 VM에서 직접적으로 디바이스를 엑세스 할수 있게 해주는 기술이 VT-D 입니다.

 

728x90

 

DMA Remapping 이란 이름에서 알수 있든 장치(디바이스)의 고유 메모리 주소를 VM(게스트OS)에서 "직접" 엑세스 할수 있도록 DMA메모리 주소값을 변환/관리 해주는 기술입니다.

 

 

 

각각의 디바이스들과 시스템이 직접적으로 연결되는 노스브릿지 사이에 VT-D 기능이 위치하게 되며. 이로 인해 '칩셋'에 따라 VT-D 가 적용여부가 달라지는것입니다.(※주: 메모리 컨트롤러가 cpu에 내장되고. 노스/사우스 칩셋 통합 및 인텔 정책에 따라 칩셋이 아닌 다른 제약조건으로 바뀔수 있음.)

 

 

 

또한 DMA Remapping 직접적으로 연결된다는 사실 이외에 따라 각각의 디바이스들은 독립적인 I/O 버퍼를 활용할수 있기 때문에 병목현상이 줄일수 있으며, 도메인간 버퍼를 공유하지 않기 때문에. 데이터 보안성도 높일수 있다는 장점도 있습니다.

VT-D 기술에 대해 좀더 자세한 내용을 원하시는분은 아래 링크를 참고하기 바랍니다.

http://download.intel.com/technology/computing/vptech/Intel(r)_VT_for_Direct_IO.pdf
http://www.intel.com/technology/itj/2006/v10i3/2-io/1-abstract.htm

 

결론적으로 VT-D 기술은 가상화시 당연히 있으면 좋은 기능이며. 클라이언트에게 서비스를 제공하는 서버 입장에서는 큰 차이가 됩니다만.... 데탑 시스템으로 지원할수 있는 최대 메모리 및 코어수가 서버용 제품들에 비해 한정적이라 많아봐야 2~4개정도의 VM을 올리는게 최대치라 생각되는데. 이정도 규모에서는 VT-D의 유무에 따른 체감속도는 미비할것으로 생각됩니다.

저렴한 가격에 VT-D 기능과 인텔 AMT 기능을 사용해 볼 생각이라면 구매를 말리지는 않겠습니다만.

슈퍼마이크로 제품들중에서 모델명이 C로 시작하는 제품들은 데탑용으로 설계된 구색 맞추기용 제품이라. 서버용으로 개발된 X계열보다 전원부도 부실한게 사실이고. 전반적으로 저렴한 부품이 사용되었기에. 적극 추천할 만한 제품은 아니라고 생각됩니다. 차액금인 10만원을 저축하여 차후 물리적 듀얼 제품으로 업글하는것도 한가지 방법이라 판단됩니다. 신중하게 선택하셨으면 합니다.


*이미지 출처 : intel.com

728x90
300x250

+ Recent posts