기본이 아닌 가상 포트 및 VMQ
기본 NIC 스위치는 SR-IOV(단일 루트 I/O 가상화) 인터페이스를 지원하는 네트워크 어댑터의 구성 요소입니다. 스위치는 항상 기본 VPort(가상 포트)를 PCI Express(PCIe) PF(물리적 함수)에 연결합니다. 스위치는 하나 이상의 기본이 아닌 VPort를 PF에 연결할 수 있습니다. 자세한 내용은 가상 포트 만들기를 참조하세요.
가상화 스택은 Hyper-V 부모 파티션의 관리 운영 체제에서 실행됩니다. 이 스택은 OID_NIC_SWITCH_CREATE_VPORT OID(개체 식별자) 메서드 요청을 실행하여 VPort를 만듭니다. 그러나 스택은 리소스가 OID_NIC_SWITCH_ALLOCATE_VF OID 메서드 요청을 통해 할당된 활성 PCIe VF(가상 함수) 수보다 더 많은 VPort를 만들 수 있습니다.
네트워크 어댑터에서 SR-IOV를 사용하도록 설정한 경우 전체 VMQ 기능을 사용하지 않도록 설정해야 합니다. 그러나 PF에 연결되고 VF에 연결되지 않은 기본이 아닌 VPort는 VMQ(가상 머신 큐) 인터페이스와 동일한 기능을 제공할 수 있습니다. 다음 점은 VPort가 VMQ와 유사한 패킷 전송을 위한 하드웨어 가속 데이터 경로를 제공하는 방법에 대해 설명합니다.
VMQ는 하드웨어에서 MAC(미디어 액세스 제어) 필터링을 통해 대상 VM을 결정합니다. 이렇게 하면 가상화 스택에서 대상 VM을 결정하는 오버헤드가 방지됩니다.
Windows Server 2012 시작하여 가상화 스택은 OID_RECEIVE_FILTER_SET_FILTER OID 메서드 요청을 실행하여 VPort에서 수신 필터를 구성합니다. 이 OID 요청의 경우 가상화 스택은 가상 네트워크 어댑터와 연결된 MAC 주소 및 VLAN(가상 LAN) 식별자를 지정하는 NDIS_RECEIVE_FILTER_PARAMETERS 구조를 전달 합니다. VMQ와 마찬가지로 VPort에서 여러 MAC 주소 및 VLAN ID 쌍을 구성할 수 있습니다. 가상화 스택은 수신 필터가 설정될 대상 VPort도 지정합니다.
SR-IOV 네트워크 어댑터는 OID_RECEIVE_FILTER_SET_FILTER 요청을 통해 지정된 필터링 조건에 따라 유사한 하드웨어 필터링을 수행합니다. VPort의 하드웨어 수신 큐에서 패킷이 수신되면 미니포트 드라이버는 패킷에 대한 NET_BUFFER_LIST 구조의 OOB(out-of-band) 데이터에서 원본 VPort 식별자를 지정합니다. VPort 식별자에 따라 가상화 스택은 대상 VM을 결정하고 VM에서 실행되는 네트워크 스택에 대한 패킷을 나타냅니다.
마찬가지로 가상화 스택은 전송 패킷에 대한 NET_BUFFER_LIST 구조의 OOB 데이터에서 대상 VPort 식별자를 지정합니다. 드라이버는 패킷에 대한 보내기 요청을 처리할 때 지정된 VPort의 하드웨어 전송 큐에 패킷을 배치합니다.
VPort 식별자는 NET_BUFFER_LIST_RECEIVE_FILTER_VPORT_ID 매크로를 사용하여 패킷의 OOB 데이터에서 가져올 수 있습니다.
이 프로세스에 대한 자세한 내용은 가상 포트를 통해 패킷 흐름을 참조하세요.
SR-IOV 네트워크 어댑터에 대한 수신 필터링 요구 사항에 대한 자세한 내용은 수신 필터링 기능 확인 을 참조하세요.
VMQ는 인터럽트 및 DPC 동시성을 제공합니다.
NDIS 6.30 및 Windows Server 2012 시작하여 PF에 연결된 VPort를 특정 CPU 선호도로 구성할 수 있습니다. 가상화 스택은 OID_NIC_SWITCH_CREATE_VPORT 또는OID_NIC_SWITCH_VPORT_PARAMETERS OID 메서드 요청을 사용하여 VPort에 대한 CPU 선호도 및 인터럽트 조정 매개 변수를 구성합니다. 이렇게 하면 가상화 스택은 인터럽트 및 DPC 동시성을 위해 VMQ와 유사한 인터럽트 기반 매개 변수를 구성합니다.
예를 들어 SR-IOV 네트워크 어댑터가 특정 CPU 선호도를 갖도록 구성된 VPort에서 패킷을 받으면 어댑터는 지정된 CPU에서 인터럽트 를 생성합니다. 미니포트 드라이버는 NDIS에 수신된 패킷과 해당 CPU에 대한 가상화 스택을 나타냅니다.
PF 미니포트 드라이버는 MiniportInitializeEx 호출의 컨텍스트 내에서 SR-IOV 기능을 보급합니다. 드라이버는 해당 기능을 사용하여 NDIS_SRIOV_CAPABILITIES 구조를 초기화하고 NdisMSetMiniportAttributes 를 호출하여 해당 기능을 등록합니다. 자세한 내용은 SR-IOV 기능 결정 을 참조하세요.
NDIS_NIC_SWITCH_CAPABILITIES 구조체의 다음 멤버는 VPort가 할당되는 방식에 영향을 줍니다.
MaxNumVPorts - 네트워크 어댑터에서 만들 수 있는 VPort의 최대 수를 지정합니다.
네트워크 어댑터에 할당할 수 있는 최대 VF 수를 지정하는 MaxNumVFs입니다.
NDIS 6.30부터 미니포트 드라이버가 NDIS_NIC_SWITCH_CAPABILITIES 구조를 초기화하면 NicSwitchCapabilities 멤버에서 NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL 플래그를 설정할 수 있습니다. 이 플래그는 네트워크 어댑터의 VPort 풀에서 비지정 방식으로 비기본 VPort를 만들 수 있도록 지정합니다. 이렇게 하면 PF 및 할당된 VF에 필요에 따라 사용 가능한 기본이 아닌 VPort를 만들고 할당할 수 있습니다. 네트워크 어댑터가 VMQ 인터페이스를 지원하는 경우 PF에 할당된 기본이 아닌 VPort를 VM 수신 큐에도 사용할 수 있습니다.
NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL 플래그가 설정되면 사용 가능한 기본이 아닌 VPort가 만들어지고 PF 및 할당된 VF에 할당됩니다. PF에 만들고 할당할 수 있는 최대 VPort 수는 드라이버가 MaxNumVPorts 멤버에서 보고하는 값과 동일합니다. 미니포트 드라이버는 PF에 할당된 기본 VPort로 사용할 VPort 하나를 예약해야 합니다. 따라서 PF에 할당하고 VM 수신 큐에 사용할 수 있는 기본이 아닌 VPort의 최대 수는 (MaxNumVPorts – 1)입니다.
참고
이 플래그가 설정된 경우 기본이 아닌 VPort의 생성 및 할당은 VF 할당을 위해 예약되지 않습니다. 결과적으로 풀에 사용 가능한 VPort가 소진된 경우 VF에 VPort가 할당되지 않을 수 있는 상황이 발생할 수 있습니다.
NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL 플래그가 설정되지 않은 경우 기본이 아닌 VPort의 생성 및 할당은 VF 할당을 위해 예약됩니다. PF에 만들고 할당하고 VM 수신 큐에 사용할 수 있는 기본이 아닌 추가 VPort의 최대 수는 (MaxNumVPorts–MaxNumVFs)입니다.
VMQ에 대한 자세한 내용은 VMQ(가상 머신 큐)를 참조하세요.