VPort에서 VMMQ 사용, 사용 안 함 및 업데이트

VPort를 만든 후 상위 계층 드라이버는 VPort의 RSS 매개 변수를 사용하거나 사용하지 않도록 설정하거나 업데이트할 수 있습니다.

드라이버는 VPort의 수 큐를 변경하기 위해 VPort의 RSS 간접 작업 테이블을 업데이트할 수 있습니다. 그러나 VPort의 RSS 해시 유형, 해시 함수 및 해시 비밀 키는 정적 매개 변수로 간주되며 VPort 수명 동안 지나치게 드라이버에 의해 변경되지 않습니다. 상위 계층 드라이버가 RSS 정적 매개 변수를 변경하려는 경우 VPort를 삭제하고 다시 만들어야 합니다.

상위 계층 드라이버는 OID_GEN_RECEIVE_SCALE_PARAMETERS OID 요청을 실행하여 VPort의 RSS 매개 변수를 사용하거나 사용하지 않도록 설정하거나 변경합니다. 상위 계층 드라이버는 NDIS_OID_REQUEST 구조체의 VPortId 필드를 새 구성의 대상 VPort ID로 설정합니다.

또한 상층 드라이버는 OID 요청에 사용되는 NDIS_RECEIVE_SCALE_PARAMETERS 구조를 다음과 같이 설정합니다. 기본 미니포트 어댑터에서 보급하는 VMMQ 기능을 기반으로 일부 필드는 모든 PF VPort에 대해 동일한 값으로 설정될 수 있습니다.

  • 헤더수정 버전 멤버를 NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_3 설정합니다.

  • NDIS_RSS_PARAM_FLAG_DEFAULT_PROCESSOR_UNCHANGED 플래그를 설정하여 DefaultProcessorNumber 멤버가 변경되지 않도록 지정합니다.

  • BaseCpuNumber0으로 설정합니다.

  • DefaultProcessorNumber를 설정하여 이 VPort에 대한 기본 RSS 프로세서를 지정합니다. 미니포트는 기본 프로세서가 RSS 프로세서 목록의 일부라고 가정할 수 있지만 기본 RSS 프로세서가 현재 간접 처리 테이블에 있다고 가정할 수는 없습니다.

  • HashInformation을 설정하여 NIC가 이 VPort에 대해 받은 패킷의 해시 값을 계산하는 데 사용해야 하는 해시 형식 및 해시 함수를 나타냅니다. 상위 계층 드라이버는 이 필드를 각 VPort에 대해 다른 값으로 설정할 수 있습니다.

  • IndirectionTableSize를 설정하여 간접 처리 테이블의 크기를 바이트 단위로 지정합니다. 이 필드를 모든 PF VPort에 대해 동일한 값으로 설정합니다. 상위 계층 드라이버는 간접 참조 테이블의 항목 수가 2의 강력한 요소인지 확인해야 합니다.

  • indirectionTableOffset을 설정하여 NDIS_RECEIVE_SCALE_PARAMETERS 구조체의 시작 부분에서 간접 참조 테이블의 오프셋을 지정합니다.

  • HashSecretKeySize를 설정하여 해시 비밀 키의 크기를 바이트 단위로 지정합니다. 미니포트 어댑터가 이를 지원하는 경우 상위 계층 드라이버는 각 VPort에 대해 다른 비밀 키를 설정할 수 있습니다. 자세한 내용은 VMMQ 기능 보급을 참조하세요.

  • HashSecretKeyOffset을 설정하여 NDIS_RECEIVE_SCALE_PARAMETERS 구조체의 시작 부분에서 해시 비밀 키의 오프셋을 지정합니다. 미니포트 어댑터가 이를 지원하는 경우 상위 계층 드라이버는 각 VPort에 대해 다른 비밀 키를 설정할 수 있습니다. 자세한 내용은 VMMQ 기능 보급을 참조하세요.

  • ProcessorMaskOffset, NumberOfProcessorMasksProcessorMasksEntrySize를 적절하게 설정합니다.

미니포트 드라이버가 VPort에 대해 VMMQ를 사용하지 않도록 설정하는 OID 요청을 받으면 OID_NIC_SWITCH_CREATE_VPORT OID 요청에 사용된 NDIS_NIC_SWITCH_VPORT_PARAMETERS 구조의ProcessorAffinity 필드에 지정된 프로세서에서 해당 VPort에 대해 수신된 모든 패킷을 나타내는 되돌리기 합니다.

VPort의 큐 수 변경

VPort의 간접 처리 테이블에 사용되는 고유 프로세서 수는 마지막으로 발급된 OID_NIC_SWITCH_CREATE_VPORT OID 요청에 지정된 NDIS_NIC_SWITCH_VPORT_PARAMETERS 구조체의 NumQueuePairs 필드 값을 초과할 수 없습니다. 이러한 프로세서는 NdisGetRssProcessorInformation 호출에서 반환되는 RSS 프로세서 집합의 하위 집합입니다. 자세한 내용은 VMMQ용 VPort 할당을 참조하세요. 그러나 서로 다른 VPort의 간접 테이블에는 동일한 프로세서가 포함될 수 있습니다.

PF VPort에 대한 큐 수를 줄이려면 상위 계층 드라이버는 다음을 수행해야 합니다.

  1. 원래 간접 데이터 테이블 크기를 사용하여 OID_GEN_RECEIVE_SCALE_PARAMETERS OID를 보냅니다. 그러나 이 단계의 간접 참조 테이블은 새 큐 수까지의 고유 프로세서 수만 참조할 수 있습니다. 새 간접 처리 테이블이 NDIS_NIC_SWITCH_PARAMETERS 구조의 NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SIZE_RESTRICTED 플래그로 인해 원래 테이블보다 작아야 하는 경우 발급자는 이 단계의 간접 테이블에 원래 큐 수에 대한 RESTRICTED 플래그 요구 사항을 충족하기 위해 필요한 만큼 복제된 새 간접 테이블이 포함되도록 보장해야 합니다.

  2. 새 수의 큐가 있는 OID_NIC_SWITCH_VPORT_PARAMETERS OID를 보냅니다.

  3. 변경된 경우 새 간접 테이블 크기가 있는 OID_GEN_RECEIVE_SCALE_PARAMETERS 보냅니다.

PF VPort에 대한 큐 수를 늘리려면 상위 계층 드라이버가 다음을 수행해야 합니다.

  1. 테이블은 현재 큐 수까지의 고유 프로세서 수만 참조하기 때문에 드라이버는 2단계 이전에 현재 간접 테이블을 업데이트할 필요가 없습니다.

  2. 새 수의 큐가 있는 OID_NIC_SWITCH_VPORT_PARAMETERS OID를 보냅니다. RESTRICTED 플래그가 설정된 경우 미니포트 드라이버는 새 큐 수에 대한 간접 참조 테이블 크기 요구 사항과 일치하기 위해 필요에 따라 원래 간접 처리 테이블을 내부적으로 여러 번 복제해야 합니다.

  3. 변경된 경우 새 간접 테이블 크기가 있는 OID_GEN_RECEIVE_SCALE_PARAMETERS OID를 보냅니다.