VMMQ 기능 보급

미니포트 드라이버는 미니포트 어댑터를 초기화하는 동안 NIC의 VMMQ(Virtual Machine 다중 큐) 기능을 등록합니다.

참고

NIC가 VMMQ를 지원하는 경우 기본 VPort 및 하나 이상의 기본 VPort가 VMMQ를 지원해야 합니다.

초기화하는 동안 미니포트 드라이버는 NIC에서 VMMQ 기능을 사용하도록 설정해야 하는지 확인하기 위해 *RssOnHostVPorts INF 키워드(keyword) 검사해야 합니다. VMMQ에 대한 RSS 키워드 처리에 대한 자세한 내용은 VMMQ에 대한 표준화된 INF 키워드를 참조하세요.

또한 미니포트 어댑터가 NIC 스위치 만들기를 지원하는 경우에만 스택이 NIC에서 VMMQ를 활성화할 수 있습니다. *SriovPreferred INF 키워드(keyword) 1로 설정되거나*SriovPreferred0으로 설정되고 *RssOrVmqPreference1로 설정된 경우 NDIS는 미니포트 어댑터에 NIC 스위치를 만들 수 있습니다. 자세한 내용은 SR-IOV용 표준화된 INF 키워드VMQ용 표준화된 INF 키워드를 참조하세요.

미니포트 드라이버가 NIC 스위치에 대한 매개 변수를 구성하는 경우 다음과 같이 NDIS_NIC_SWITCH_PARAMETERS 구조체의 필드를 설정해야 합니다.

  1. HeaderRevision 멤버를 NDIS_NIC_SWITCH_PARAMETERS_REVISION_2 설정합니다.

  2. NumQueuePairsForDefaultVPort를 기본 VPort에 할당된 큐 쌍 수로 설정합니다.

미니포트 드라이버는 NDIS_NIC_SWITCH_CAPABILITIES 구조를 통해 NIC의 VMMQ 기능을 보급합니다. 미니포트 드라이버는 다음과 같이 NDIS_NIC_SWITCH_CAPABILITIES 초기화해야 합니다.

  1. 헤더Revision 멤버를 NDIS_NIC_SWITCH_CAPABILITIES_REVISION_3 설정합니다.

  2. 다음과 같이 NicSwitchCapabilities 플래그를 설정합니다.

    • 기본이 아닌 VPort 를 PF 에 만들 수 있음을 나타내려면 NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL 1로 설정합니다. 이 플래그를 설정해야 합니다.

    • NDIS_NIC_SWITCH_CAPS_ASYMMETRIC_QUEUE_PAIRS_FOR_NONDEFAULT_VPORT_SUPPORTED 설정하여 NDIS가 각 VPort에 임의 수의 VMMQ 큐를 할당할 수 있음을 나타냅니다. 그렇지 않으면 기본이 아닌 모든 VPort는 MaxNumQueuePairsPerNonDefaultVPort 필드가 정의하는 것과 동일한 최대 VMMQ 큐 수를 갖습니다.

    • NDIS_NIC_SWITCH_CAPS_RSS_ON_PF_VPORTS_SUPPORTED 1로 설정 하여 NIC가 PF VPort용 VMMQ를 지원함을 나타냅니다.

    참고

    PF VPort 플래그당 다음 4개 중 어느 것이 설정되지 않은 경우 상위 수준 드라이버는 PF VPort의 RSS 매개 변수가 설정될 때 지정된 값(기본 VPort 포함)을 사용합니다. 자세한 내용은 VPort에서 VMMQ 사용, 사용 안 함 및 업데이트를 참조하세요.

    • NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SUPPORTED 1로 설정 하여 NIC가 PF VPort 간접 참조 테이블별로 유지 관리할 수 있음을 나타냅니다. 이 플래그를 설정해야 합니다.

    참고

    다음 세 플래그는 NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_FUNCTION_SUPPORTED, NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_TYPE_SUPPORTED 및 NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_KEY_SUPPORTED 모두 0 으로 설정하거나 모두 1로 설정해야 합니다. 모두 0으로 설정된 경우 소프트웨어는 해시를 다시 계산합니다.

    • NIC가 PF VPort당 다른 해시 함수 설정을 지원하는 경우 NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_FUNCTION_SUPPORTED 1로 설정합니다.

    • NIC가 PF VPort당 다른 해시 형식 설정을 지원하는 경우 NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_TYPE_SUPPORTED 1로 설정합니다.

    • NIC가 PF VPort당 다른 해시 비밀 키 설정을 지원하는 경우 NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_KEY_SUPPORTED 1로 설정합니다.

    • NIC 에 PF VPort에 대한 간접 참조 테이블 크기에 제한이 있는 경우 NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SIZE_RESTRICTED 1로 설정합니다. 이 플래그는 RSS OID의 발급자에서 PF당 VPort 간접 참조 테이블 크기를 다음 2의 전원으로 반올림된 VPort 큐 수와 동일하게 사용하도록 강제합니다. 이 플래그는 NDIS_NIC_SWITCH_CAPS_ASYMMETRIC_QUEUE_PAIRS_FOR_NONDEFAULT_VPORT_SUPPORTED 플래그와 결합할 수 있습니다(PF VPort의 큐 수가 다를 수 있음). 이 플래그를 사용하면 VMMQ 사용자가 세분화된 큐 조향을 수행할 수 없습니다.

  3. MaxNumVPorts를 설정하여 최대 VPort 수를 지정합니다.

  4. MaxNumQueuePairs를 설정하여 모든 VPort에 할당할 수 있는 최대 큐 쌍 수를 지정합니다. 여기에는 PF에 연결된 기본 VPort가 포함됩니다. 이 숫자는 실제 하드웨어 기능을 반영해야 합니다.

  5. MaxNumQueuePairsPerNonDefaultVPort를 설정하여 기본이 아닌 VPort에 할당할 수 있는 최대 큐 쌍 수를 지정합니다.

  6. MaxNumRssCapableNonDefaultPFVPorts를 설정하여 VMMQ를 지원할 수 있는 기본이 아닌 PF VPort의 최대 수를 지정합니다.

  7. NumberOfIndirectionTableEntriesForDefaultVPort를 설정하여 기본 VPort에 대한 간접 참조 테이블 항목 수를 지정합니다.

  8. NumberOfIndirectionTableEntriesPerNonDefaultPFVPort를 설정하여 기본이 아닌 각 PF VPort에 대한 간접 참조 테이블 항목 수를 지정합니다. 간접 참조 테이블의 크기는 기본이 아닌 모든 PF VPort에 대해 동일해야 합니다.

  9. MaxNumQueuePairsForDefaultVPort를 설정하여 NIC 스위치를 만드는 동안 기본 VPort에 할당할 수 있는 최대 큐 쌍 수를 지정합니다.

VMMQ 기능이 보급되면 NDIS는 기본 VPort 또는 기본이 아닌 VPort에서 호출될 때 OID_GEN_RECEIVE_SCALE_CAPABILITIES OID를 처리해야 합니다. 미니포트 드라이버가 NDIS_RECEIVE_SCALE_CAPABILITIES 구조에서 RSS 기능을 반환하는 경우 표준 RSS 키워드(예: *MaxRssProcessors)로 NumberOfInterruptMessages 필드를 제한해서는 안 됩니다. 상위 수준 드라이버는 이 숫자를 호스트 CPU 할당 알고리즘에 통합합니다.