다음을 통해 공유


RSS 구성

RSS 구성 정보를 얻기 위해 지나치게 많은 드라이버는 미니포트 드라이버에 OID_GEN_RECEIVE_SCALE_CAPABILITIES OID 쿼리를 보낼 수 있습니다. 또한 NDIS는 초기화 중에 NDIS_BIND_PARAMETERS 구조의 프로토콜 드라이버에 RSS 구성 정보를 제공합니다.

오버리싱 드라이버는 해시 함수, 형식 및 간접 참조 테이블을 선택합니다. 이러한 구성 옵션을 설정하기 위해 드라이버는 미니포트 드라이버에 OID_GEN_RECEIVE_SCALE_PARAMETERS OID 집합 요청을 보냅니다. 오버리싱 드라이버는 이 OID를 쿼리하여 현재 RSS 설정을 가져올 수도 있습니다. OID_GEN_RECEIVE_SCALE_PARAMETERS OID의 정보 버퍼에는 NDIS_RECEIVE_SCALE_PARAMETERS 구조체에 대한 포인터가 포함되어 있습니다.

오버리싱 드라이버는 NIC에서 RSS를 사용하지 않도록 설정할 수 있습니다. 이 경우 드라이버는 NDIS_RECEIVE_SCALE_PARAMETERS 구조체의 Flags 멤버에서 NDIS_RSS_PARAM_FLAG_DISABLE_RSS 플래그를 설정합니다. 이 플래그가 설정되면 미니포트 드라이버는 다른 모든 플래그와 설정을 무시하고 NIC에서 RSS를 사용하지 않도록 설정해야 합니다.

NDIS는 미니포트 드라이버에 전달하기 전에 OID_GEN_RECEIVE_SCALE_PARAMETERS 처리하고 필요한 경우 미니포트 어댑터의 *RSS 표준화된 키워드를 업데이트합니다. *RSS 키워드에 대한 자세한 내용은 RSS에 대한 표준화된 INF 키워드를 참조하세요.

NDIS_RSS_PARAM_FLAG_DISABLE_RSS 플래그가 설정된 OID_GEN_RECEIVE_SCALE_PARAMETERS 집합 요청을 받은 후 미니포트 드라이버는 초기화 후 NIC의 RSS 상태를 NIC의 초기 상태로 설정해야 합니다. 따라서 미니포트 드라이버가 NDIS_RSS_PARAM_FLAG_DISABLE_RSS 플래그가 지워진 후속 OID_GEN_RECEIVE_SCALE_PARAMETERS 집합 요청을 수신하는 경우 미니포트 어댑터가 초기화된 후 처음으로 미니포트 드라이버가 OID_GEN_RECEIVE_SCALE_PARAMETERS 집합 요청을 받은 후 모든 매개 변수에 설정된 값이 동일해야 합니다.

오버리싱 드라이버는 OID_GEN_RECEIVE_HASH OID를 사용하여 RSS를 사용하도록 설정하지 않고 수신된 프레임에서 해시 계산을 사용하도록 설정하고 구성할 수 있습니다. 오버리싱 드라이버는 이 OID를 쿼리하여 현재 수신 해시 설정을 가져올 수도 있습니다.

OID_GEN_RECEIVE_HASH OID의 정보 버퍼에는 NDIS_RECEIVE_HASH_PARAMETERS 구조체에 대한 포인터가 포함되어 있습니다. 집합 요청의 경우 OID는 미니포트 어댑터에서 사용해야 하는 해시 매개 변수를 지정합니다. 쿼리 요청의 경우 OID는 미니포트 어댑터가 사용하는 해시 매개 변수를 반환합니다. 이 OID는 RSS를 지원하는 드라이버에 대한 선택 사항입니다.

참고 수신 해시 계산을 사용하는 경우 NDIS는 수신 해시 계산을 사용하지 않도록 설정한 후 RSS를 사용하도록 설정합니다. RSS를 사용하는 경우 NDIS는 수신 해시 계산을 사용하도록 설정하기 전에 RSS를 사용하지 않도록 설정합니다.

미니포트 드라이버에서 지원하는 모든 미니포트 어댑터는 모든 후속 프로토콜 바인딩에 동일한 해시 구성 설정을 제공해야 합니다. 이 OID에는 미니포트 드라이버 또는 NIC가 해시 계산에 사용해야 하는 비밀 키도 포함됩니다. 키는 320비트 길이(40바이트)이며, 오버레이 드라이버가 선택하는 모든 데이터(예: 임의 바이트 스트림)를 포함할 수 있습니다.

처리 부하의 균형을 다시 조정하기 위해 오버리싱 드라이버는 RSS 매개 변수를 설정하고 간접 참조 테이블을 수정할 수 있습니다. 일반적으로 간접 참조 테이블을 제외한 모든 매개 변수는 변경되지 않습니다. 그러나 RSS가 초기화되면 오버리싱 드라이버가 다른 RSS 초기화 매개 변수를 변경할 수 있습니다. 필요한 경우 미니포트 드라이버는 NIC 하드웨어를 다시 설정하여 해시 함수, 해시 비밀 키, 해시 유형, 기본 CPU 번호 또는 간접 참조 테이블을 인덱싱하는 데 사용되는 비트 수를 변경할 수 있습니다.

참고 : 오버리싱 드라이버는 언제든지 이러한 매개 변수를 설정할 수 있습니다. 이로 인해 순서가 벗어난 수신 표시가 발생할 수 있습니다. TCP를 지원하는 미니포트 드라이버는 이 인스턴스에서 수신 큐를 제거할 필요가 없습니다.

다음 그림에서는 간접 참조 테이블의 두 인스턴스에 대한 예제 내용을 제공합니다.

4개의 프로세서 구성과 64개의 항목이 있는 RSS 간접 참조 테이블의 두 인스턴스 내용을 보여 주는 다이어그램

앞의 그림에서는 4개의 프로세서 구성을 가정하고 해시 값에서 사용된 최소 중요 비트 수는 6비트입니다. 따라서 간접 참조 테이블에는 64개의 항목이 포함됩니다.

그림에서 테이블 A는 초기화 직후 간접 참조 테이블의 값을 나열합니다. 나중에 일반 트래픽 부하가 달라짐에 따라 프로세서 부하가 불균형하게 증가합니다. 오버리싱 드라이버는 불균형 조건을 감지하고 새 간접 참조 테이블을 정의하여 부하의 균형을 조정하려고 시도합니다. 테이블 B에는 새 간접 참조 테이블 값이 나열됩니다. 테이블 B에서 CPU 2의 일부 로드는 CPU 1 및 3으로 이동됩니다.

참고 간접 참조 테이블이 변경되면 짧은 시간 동안(현재 수신 설명자 큐가 처리되는 동안) 잘못된 CPU에서 패킷을 처리할 수 있습니다. 이것은 정상적인 일시적인 상태입니다.

간접 참조 테이블의 크기는 일반적으로 시스템의 프로세서 수의 2~8배입니다.

미니포트 드라이버가 CPU에 패킷을 배포할 때 CPU가 너무 많은 경우 부하를 분산하는 데 소요된 노력이 엄청나게 커질 수 있습니다. 이 경우 오버리딩 드라이버는 네트워크 데이터 처리가 발생하는 CPU의 하위 집합을 선택해야 합니다.

경우에 따라 사용 가능한 하드웨어 수신 큐 수가 시스템의 CPU 수보다 적을 수 있습니다. 미니포트 드라이버는 간접 참조 테이블을 검사하여 하드웨어 큐와 연결할 CPU 번호를 확인해야 합니다. 간접 참조 테이블에 표시되는 다른 CPU 번호의 총 수가 NIC에서 지원하는 하드웨어 큐 수보다 많은 경우 미니포트 드라이버는 간접 참조 테이블에서 CPU 번호의 하위 집합을 선택해야 합니다. 하위 집합은 하드웨어 큐 수와 같습니다. 미니포트 드라이버는 OID_GEN_RECEIVE_SCALE_PARAMETERS IndirectionTableSize 매개 변수를 얻었습니다. 미니포트 드라이버는 OID_GEN_RECEIVE_SCALE_CAPABILITIES 대한 응답으로 NumberOfReceiveQueues 값을 지정했습니다.