다음을 통해 공유


가상 함수 초기화 시퀀스

SR-IOV(단일 루트 I/O 가상화)를 지원하는 네트워크 어댑터는 다음 하드웨어 구성 요소를 지원할 수 있어야 합니다.

  • 하나의 PCI Express(PCIe) PF(물리적 함수). PF는 항상 네트워크 어댑터에 존재하며 Hyper-V 부모 파티션에 연결됩니다.

    이 하드웨어 구성 요소에 대한 자세한 내용은 SR-IOV PF(물리적 함수)를 참조하세요.

  • 하나 이상의 PCIe VF(가상 함수). 게스트 운영 체제의 네트워킹 구성 요소가 VF를 통해 패킷을 보내거나 받기 전에 각 VF를 초기화하고 Hyper-V 자식 파티션에 연결해야 합니다.

    이 하드웨어 구성 요소에 대한 자세한 내용은 SR-IOV VF(가상 함수)를 참조하세요.

Hyper-V 부모 파티션의 관리 운영 체제에서 실행되는 PF 미니포트 드라이버는 SR-IOV 네트워크 어댑터에서 VF에 대한 리소스를 초기화하고 할당합니다. NDIS가 PF 미니포트 드라이버의 MiniportInitializeEx 함수를 호출한 후 NDIS 및 가상화 스택은 PF 미니포트 드라이버에 OID(개체 식별자) 요청을 실행하여 다음을 수행할 수 있습니다.

  • 네트워크 어댑터에서 NIC 스위치를 만듭니다. NIC 스위치는 VF, PF 및 실제 네트워크 포트 간에 네트워크 트래픽을 브리지합니다.

    자세한 내용은 NIC 스위치를 참조하세요.

    참고 Windows Server 2012 SR-IOV 인터페이스는 네트워크 어댑터에서 하나의 NIC 스위치만 지원합니다. 이 스위치를 기본 NIC 스위치라고 하며 NDIS_DEFAULT_SWITCH_ID 식별자에서 참조합니다.

  • PF 미니포트 드라이버에 네트워크 어댑터의 VF에 대한 리소스를 초기화하고 할당하도록 요청합니다.

    자세한 내용은 SR-IOV VF(가상 함수)를 참조하세요.

  • NIC 스위치에서 VPort(가상 포트)를 만들고 VF에 연결합니다.

    자세한 내용은 VPort(가상 포트)를 참조하세요.

다음 다이어그램은 VF 초기화와 관련된 단계를 보여줍니다.

가상화 스택에서 ndis로, pf 미니포트 드라이버에 대한 호출을 보여 주는 예제 vf 초기화 시퀀스입니다.

NDIS, 가상화 스택 및 PF 미니포트 드라이버는 VF 초기화 시퀀스 중에 다음 단계를 수행합니다.

  1. NDIS는 레지스트리에서 기본 스위치 구성을 읽고 네트워크 어댑터에서 스위치를 프로비전하는 OID_NIC_SWITCH_CREATE_SWITCH OID 메서드 요청을 실행합니다. 이 OID 요청에 전달되는 매개 변수에는 VF 및 VPort와 같은 중요한 하드웨어 리소스를 구성하는 방법에 대한 정보가 포함됩니다. 또한 PF에 연결된 기본 VPort 및 기본 VPort 간에 리소스를 배포하는 방법에 대한 정보도 포함되어 있습니다.

    PF 미니포트 드라이버에서 OID를 성공적으로 완료하면 NIC 스위치를 사용하여 VPort를 만들고 VF를 할당할 수 있습니다.

    NIC 스위치를 만드는 방법에 대한 자세한 내용은 NIC 스위치 만들기를 참조하세요.

  2. VF는 VM(가상 머신) 네트워크 어댑터에 대한 오프로드 메커니즘으로 처리됩니다. 이 어댑터는 Hyper-V 자식 파티션에서 실행되는 게스트 운영 체제에 노출됩니다. 기본적으로 게스트 운영 체제의 네트워킹 구성 요소는 소프트웨어 기반 가상 데이터 경로를 통해 패킷을 보내고 받습니다. 그러나 VF 오프로드에 자식 파티션이 사용하도록 설정된 경우 가상화 스택은 VF의 리소스 할당 및 초기화를 위해 PF 미니포트 드라이버에 대한 OID 요청을 발급합니다. VF가 자식 파티션 및 NIC 스위치의 VPort에 연결되면 네트워킹 구성 요소는 VF 데이터 경로를 통해 패킷을 보내고 받습니다. 이러한 데이터 경로에 대한 자세한 내용은 SR-IOV 데이터 경로를 참조하세요.

    VF 오프로드에 Hyper-V 자식 파티션을 사용하도록 설정한 경우 가상화 스택은 PF 미니포트 드라이버에 OID_NIC_SWITCH_ALLOCATE_VF OID 메서드 요청을 발급합니다. 이 OID 요청에 전달되는 매개 변수에는 VF가 할당된 NIC 스위치의 식별자가 포함됩니다. 다른 매개 변수에는 VF가 연결될 자식 파티션의 식별자가 포함됩니다.

    PF 미니포트 드라이버는 VF에 필요한 하드웨어 및 소프트웨어 리소스를 할당합니다. PF 미니포트 드라이버는 NdisMGetVirtualFunctionLocation을 호출하여 VF에 대한 PCIe 요청자 식별자(RID)도 결정합니다. RID는 VF에서 DMA 요청 및 인터럽트 생성 시 DMA 및 인터럽트 다시 매핑에 사용됩니다.

    VF 식별자와 함께 RID는 pf 미니포트 드라이버가 OID_NIC_SWITCH_ALLOCATE_VF 요청을 성공적으로 완료하면 반환됩니다.

    VF에 대한 리소스 할당에 대한 자세한 내용은 가상 함수에 대한 리소스 할당을 참조하세요.

  3. 가상화 스택은 PF 미니포트 드라이버에 OID_NIC_SWITCH_CREATE_VPORT OID 메서드 요청을 실행하여 NIC 스위치에 VPort를 만듭니다. 이 OID 요청에 전달되는 매개 변수에는 VPort를 만들 NIC 스위치의 식별자가 포함됩니다. 다른 매개 변수에는 VPort가 연결될 VF의 식별자가 포함됩니다.

    참고 NIC 스위치의 기본 VPort는 항상 존재하며 PF에 연결됩니다. 기본이 아닌 단일 VPort만 만들어 VF에 연결할 수 있습니다.

    NDIS가 PF 미니포트 드라이버에 OID 요청을 전달하기 전에 네트워크 어댑터를 통해 고유한 유효한 VPort 식별자를 할당합니다.

    PF 미니포트 드라이버는 OID 요청을 처리할 때 VPort에 필요한 하드웨어 리소스를 할당하고 VPort에 대한 식별자를 유지합니다. 이 식별자는 이후 OID 요청 및 SR-IOV 함수 호출에서 사용됩니다.

    VPort를 만드는 방법에 대한 자세한 내용은 가상 포트 만들기를 참조하세요.

  4. Hyper-V 자식 파티션은 VF 및 VPort가 할당되기 훨씬 전에 시작될 수 있습니다. 이 시간 동안 게스트 운영 체제의 네트워킹 구성 요소는 가상 데이터 경로를 통해 패킷을 보내고 받습니다. 여기에는 PF에 연결된 기본 VPort를 통해 패킷 트래픽이 포함됩니다. 트래픽을 자식 파티션에 브리지하기 위해 가상화 스택은 자식 파티션의 VM 네트워크 어댑터에 대한 MAC(미디어 액세스 제어) 및 VLAN(가상 LAN) 필터를 사용하여 기본 VPort를 구성합니다.

    VF 및 VPort에 대한 리소스가 할당된 후 가상화 스택은 PF 미니포트 드라이버에 OID_RECEIVE_FILTER_MOVE_FILTER OID 메서드 요청을 발급합니다. 이 OID 요청은 VM 네트워크 어댑터에 대한 MAC 및 VLAN 필터를 기본 VPort에서 VF에 연결된 VPort로 이동합니다. 이렇게 하면 이러한 필터와 일치하는 패킷이 VF 데이터 경로를 통해 VF VPort로 전달됩니다.

    참고 기존 수신 필터는 OID_RECEIVE_FILTER_MOVE_FILTER 사용하여 기본 VPort에서 VF VPort로 이동할 수 있습니다. 또한 OID_RECEIVE_FILTER_SET_FILTER 사용하여 VF VPort에서 새 필터를 설정할 수 있습니다.

VF 및 VPort가 성공적으로 만들어지고 MAC 필터가 VPort에 설정된 후 가상화 스택은 VPCI(가상 PCI) VSP(가상 서비스 공급자)에 알합니다. 이 VSP는 Hyper-V 부모 파티션의 관리 운영 체제에서 실행됩니다. 알림은 자식 파티션에 성공적으로 할당되고 연결된 VF를 VPCI VSP에 알릴 수 있습니다. VPCI VSP는 VMBus(가상 머신 버스)를 통해 자식 파티션의 게스트 운영 체제에서 실행되는 VPCI VSC(가상 서비스 클라이언트)로 메시지를 보냅니다. VPCI VSC는 VF 네트워크 어댑터에 대한 PCI 디바이스를 노출하는 버스 드라이버입니다.

VF 네트워크 어댑터가 노출되면 게스트 운영 체제에서 실행되는 PnP 하위 시스템이 어댑터를 감지하고 VF 미니포트 드라이버를 로드합니다. 이 드라이버는 NDIS에 등록합니다. VF 미니포트 드라이버가 초기화되고 VF 네트워크 어댑터에서 적절한 패킷 필터가 구성된 후 VF 데이터 경로가 완전히 작동합니다. 결과적으로 게스트 운영 체제의 패킷 트래픽은 가상 데이터 경로에서 이 데이터 경로로 전환되었습니다.