기본이 아닌 가상 포트 및 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의 최대 수는 (MaxNumVPortsMaxNumVFs)입니다.

VMQ에 대한 자세한 내용은 VMQ(가상 머신 큐)를 참조하세요.