VMDq vs. SR-IOV

VMDq vs. SR-IOV

VMDq는 수신된 패킷이 어느 VM으로 가야 할 지를 H/W가 판단하여 각 VM용으로 할당된 queue에 넣어주는 역할은 하지만, 해당 queue에서 VM까지는 hypervisor가 개입되어야 함(virtual switch)

반면 SR-IOV는 각각의 VM이 사용할 수 있는 virtual function을 제공하여 마치 자신의 NIC카드 인 것처럼 사용한다.  각 VM에 전달되어야 할 패킷이 hypervisor 개입없이 DMA를 통해 VM까지 전달됨. 그러므로 latency와 CPU 부하는 감소하고, networking throughput은 증가한다.

그런데 이때 가상화를 돕는 DMA는 VT-d라고 설명되어 있는데(아래 링크 참조). VT-d없이 VT-c를 하는 것이 어떤 장점을 가질까?

http://software.intel.com/en-us/blogs/2010/05/13/to-vt-d-or-not-to-vt-d-a-guide-on-whether-to-utilize-direct-device-attach-in-your-virtualized-system

OpenFlow

OpenFlow is an open standard that enables researchers to run experimental protocols in the campus networks we use every day.

OpenFlow.

* 기존에 하나의 박스로 구성되는 스위치/라우터를 controller와 switch라고 부르는 2개로 분리
* Controller는 기존 박스에서 configuration을 담당하는 부분이고, switch에서는 기존 박스에서 실제 패킷을 처리하는 부분임.
* Controller는 topology등의 configuration정보를 취합해서 switch에게 미리 정의된 규격에 맞춰 전달(Openflow spec 1.2 등등) 이때 SSL을 사용
* Switch는 Controller로부터 받은 설정에 따라 수신 패킷에 대해 flow matching을 기준으로 패킷 처리. 통상적인 라우터의 경로 선택 과 PBR의 redirect, drop 등의 동작을 모두 수행.
* H/W로 된 박스는 통상 TCAM을 이용하여 flow matching을 수행
* S/W는 알아서 잘. Open vSwitch를 언급하는데 어떤 관련성이 있는지는 FIXME
* 결국 controller는 general flow matching만 하게 하고(멍텅구리로 하고) 원하는 형태의 flow 와 policy를 controller가 결정하므로써 대학 등에서 원하는 형태의 새로운 protocol 동작을 정의할 수 있다고 함.
* 하지만 만일 flow matching 정보라는 것이 특정 protocol을 기준으로 기술한다면 결국 신규 프로토콜의 적용에는 여전히 제한이 있는 것이 아닐까? 그러므로 flow의 정의가 offset + field width로 정의되지 않을까 싶다. FIXME 확인 필요

Virtualization

Virtualization이 나눠야 할 자원은 크게 Core, memory, device 임. Core나 memory등은 흔히 partitioning을 해서 해결하는데 device는 방법이 없었음. 이를 해결하기 위한 방법이 SRIOV임.

Intel 82599 10G NIC의 경우 하나의 physical port에 대해 최대 16개의 queue를 생성할 수 있어, 서로 다른 guest OS에서 서로 다른 queue를 점유해서 사용할 수 있음. 그 결과 하나의 physical port를 여러 OS에서 동시에 사용할 수 있음.

만일 이러한 virtualization 지원이 없는 디바이스를 사용해야 하는 경우 supervisor나 하나의 guest OS에서 분배하는 기능을 S/W로 구현해야 함. 이 경우 성능 저하는 명약관하.

Virtualization이 효과를 발휘하는 경우는 consolidation이 가장 큼. 서로 다른 processor에서 동작하던 기능을 하나의 multi-core processor에 구현하고, 이때 virtualization을 이용해서 multi-core를 용도에 맞게 나눠서 서로 다른 OS를 띄우는 경우임. 이 경우 당연히 새로운 multi-core processor가 기존 processor보다 충분히 성능이 좋아야 의미가 있을 것이고, 그렇지 않더라도 foot-print를 줄일 수 있는 효과가 있음.

Single Root I/O Virtualization

Intel의 경우 MMU, device 등에서 virtualization을  설계 시점부터 고려함.