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에 대해 동일한 값으로 설정될 수 있습니다.
Header의 Revision 멤버를 NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_3로 설정합니다.
NDIS_RSS_PARAM_FLAG_DEFAULT_PROCESSOR_UNCHANGED 플래그를 설정하여 DefaultProcessorNumber 멤버가 변경되지 않았음을 지정합니다.
BaseCpuNumber을 영으로 설정합니다.
DefaultProcessorNumber 설정하여 이 VPort에 대한 기본 RSS 프로세서를 지정합니다. 미니포트는 기본 프로세서가 RSS 프로세서 목록의 일부라고 가정할 수 있지만 기본 RSS 프로세서가 현재 간접 참조 테이블에 있다고 가정할 수는 없습니다.
HashInformation 설정하여 NIC가 이 VPort에 대해 받은 패킷의 해시 값을 계산하는 데 사용해야 하는 해시 형식 및 해시 함수를 나타냅니다. 상위 계층 드라이버는 각 VPort에 대해 이 필드를 다른 값으로 설정할 수 있습니다.
IndirectionTableSize 설정하여 간접 참조 테이블의 크기를 바이트 단위로 지정합니다. 이 필드를 모든 PF VPort에 대해 동일한 값으로 설정합니다. 상위 계층 드라이버는 간접 참조 테이블의 항목 수가 2의 힘인지 확인해야 합니다.
IndirectionTableOffset 설정하여 NDIS_RECEIVE_SCALE_PARAMETERS 구조체의 시작 부분에서 간접 참조 테이블의 오프셋을 지정합니다.
해시 비밀 키의 크기를 바이트 단위로 지정하려면 HashSecretKeySize 설정합니다. 미니포트 어댑터가 지원하는 경우 상층 드라이버는 각 VPort에 대해 다른 비밀 키를 설정할 수 있습니다. 자세한 내용은 Advertising VMMQ 기능을 참조하세요.
HashSecretKeyOffset 설정하여 NDIS_RECEIVE_SCALE_PARAMETERS 구조의 시작 부분에서 해시 비밀 키의 오프셋을 지정합니다. 미니포트 어댑터가 지원하는 경우 상층 드라이버는 각 VPort에 대해 다른 비밀 키를 설정할 수 있습니다. 자세한 내용은 VMMQ 광고 기능을 참조하세요.
ProcessorMaskOffset, NumberOfProcessorMasks, 그리고 ProcessorMasksEntrySize를 적절하게 설정합니다.
미니포트 드라이버가 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에 대한 큐 수를 줄이려면 상위 계층 드라이버는 다음을 수행해야 합니다.
원래 간접 참조 테이블 크기의 OID_GEN_RECEIVE_SCALE_PARAMETERS OID를 보냅니다. 그러나 이 단계의 간접 참조 테이블은 새 큐 수까지 고유 프로세서의 수만 참조할 수 있습니다. NDIS_NIC_SWITCH_PARAMETERS 구조의 NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SIZE_RESTRICTED 플래그로 인해 새 간접 참조 테이블이 원래 테이블보다 작아야 하는 경우, 발급자는 원래 큐 수에 대한 RESTRICTED 플래그 조건을 충족시키기 위해 필요한 만큼의 횟수로 새 간접 참조 테이블을 복제하여 이 단계의 간접 참조 테이블에 포함되도록 보장해야 합니다.
새 큐 수가 지정된 OID_NIC_SWITCH_VPORT_PARAMETERS OID를 전송합니다.
변경되었다면, 새 간접 참조 테이블 크기를 포함한 OID_GEN_RECEIVE_SCALE_PARAMETERS를 보내십시오.
PF VPort에 대한 큐 수를 늘리려면 상위 계층 드라이버가 다음을 수행해야 합니다.
테이블은 현재 큐 수까지의 고유 프로세서 수만 참조하기 때문에 2단계 이전에 현재 간접 참조 테이블을 업데이트할 필요가 없습니다.
새로운 큐 수와 함께 OID_NIC_SWITCH_VPORT_PARAMETERS OID를 전송하십시오. RESTRICTED 플래그가 설정된 경우 미니포트 드라이버는 새 큐 수에 대한 간접 참조 테이블 크기 요구 사항과 일치하기 위해 필요한 횟수만큼 원래 간접 참조 테이블을 내부적으로 복제해야 합니다.
변경된 경우, 새 간접 참조 테이블 크기가 있는 OID_GEN_RECEIVE_SCALE_PARAMETERS OID를 보냅니다.