카테고리 없음2012. 3. 8. 20:54

Virtual Switch 를 만들려 보니 새로운 옵션이 눈에 들어오는군요.
image

갑자기 눈이 확 띄는 것을 느꼈습니다.
자 그럼 SR-IOV가 무엇인지 그리고 이를 통해 어떻게 성능 향상을 도모할 수 있는지 알아보도록 하겠습니다.

실은 지금까지 Windows 2008 Hyper-v는 PCI 장치에 대한 가상화를 지원 하지 않았습니다.
http://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/bf0fa02d-676f-4287-a5b9-fb1cbf224a77
하지만 Beta 부터는 지원 하게 될 꺼 같습니다.

일단 이 기술을 이용하기 위해서는 Intel의 가상화 기술 중 하나인 VT-D가 활성화 되어야 합니다.
VT-D가 활성화 되게 되면 IOMMU는 가상머신의 물리 주소를 실제 Hyper-V 전역 물리주소로 전화해 주게 됩니다. DMA를 사용하기 위해서는 머신이 실제 물리 주소에 직접 접근을 해야 하는데 IOMMU가 가상 머신의 물리주소를 실제 물리주소로 치환해 주는 것이죠.

아래 그림은 우리가 흔히 보던 Hyper-V의 디바이스 스택입니다.
VSC <---> VMBUS <---> VSP 로 이루어져 있죠.
image

즉 Device의 I/O 대하여 항상 Hyper-v 의 참여가 필요했다는 점이 특징이였습니다. 문제는 이러한 Chlid Partition이 다수가 존재하는 경우에 당연히 이들간의 중재를 Hyper-v가 해야 하는데, 이때는 실제 장치의 rx 버퍼와 tx 버퍼를 처리하는 오버해드 역시 같이 발생하였습니다. 물론 이들 중 일부는 NIC에 있는 VMQ를 통해 어느 정도의 성능 확보 (약 30%)는 가능하였으나 여전히 Hyper-V의 개입이 필요했었습니다.

rx 버퍼 : 장치에 대장된 DMA 컨트롤러가 자신의 외부 입력 버퍼로 부터 읽은 값을 OS에 전달할때 사용하는 버퍼로써 데이터 전송이 필요하다면 인터럽트를 걸고 데이터를 DMA를 통해 쓰게 된다.

tx 버퍼 : OS가 장치에 전달할 데이터가 있을 경우 사용하는 버퍼로 OS가 쓴 데이터를 장치가 읽은 후 인터럽트를 발생 시키고 데이터가 더 있다면 OS은 해당 버퍼에 데이터를 쓰게 된다.

그래서 PCI-SIC에서 제안한 SR-IOV 기술을 이용하게 되었습니다.
간단하게 이야기하자면 이는 가상 머신이 직접 디바이스를 접근하는 기술입니다. 다시 말하자면 이전에 언급한 Intel VT-D기술을 통해 가상 머신에서도 DMA를 사용하게 된 것이죠... : )

아래 그림에서 보시는 것과 같이 Parent Partition의 간섭을 최소화하고 가상 머신마다 자신의 VF를 갖게 되는 군요... : ) Parent Partition은 자신의 PF 를 갖고 있는게 보이시죠?

image

그리고 이를 통하여 Hyper-v의 간섭을 최소화한 기술이 되겠습니다.
나날이 발전하고 있군요... 우리 Hyper-v !

http://www.pciexpressdevnet.org/docs/220101.pdf
http://msdn.microsoft.com/en-us/library/windows/hardware/hh451362(v=vs.85).aspx
http://technet.microsoft.com/en-us/query/hh451362

Posted by MayStyle