다음을 통해 공유


NetAdapterCx RSS(수신측 크기 조정)

RSS(수신측 크기 조정)는 다중 프로세서 시스템의 여러 CPU에서 네트워크 수신 처리를 효율적으로 분산할 수 있는 네트워크 드라이버 기술입니다. RSS는 시스템에서 사용 가능한 모든 프로세서를 활용하고 CPU 워크로드의 균형을 동적으로 조정하여 시스템 성능을 향상시키고 네트워크 확장성을 향상시킵니다.

이 항목에서는 NetAdapterCx 클라이언트 드라이버용 RSS를 강조 표시하고 RSS 개념 및 용어에 대한 지식을 가정합니다. 다양한 하드웨어 시나리오에서 RSS를 보여 주는 다이어그램을 포함하여 일반적으로 RSS에 대한 자세한 내용은 수신측 크기 조정을 참조하세요.

NetAdapterCx의 RSS 개요

NetAdapterCx의 RSS는 구성의 용이성, 사용 및 사용 안 함의 단순성, 프로세서-인터럽트 복잡성 추상화에 중점을 둡니다. RSS 지원 NIC의 클라이언트 드라이버는 NetAdapterCx에서 RSS를 지원하기 위한 세 가지 조건만 충족해야 합니다.

  1. Net 어댑터를 시작할 때는 NetAdapterStart를 호출하기 전에 드라이버가 RSS 기능을 설정해야 합니다. 여기에는 4개의 RSS 콜백을 구현하고 RSS 기능 구조에 등록하는 것이 포함됩니다.
  2. 드라이버의 데이터 경로 큐를 만들고 요청을 수락할 준비가 되어 있어야 합니다.
  3. 드라이버는 D0 전원 상태여야 합니다.

NetAdapterCx에서 RSS를 디자인하면 시스템이 클라이언트의 RSS 콜백을 호출하지 않으며 전원 켜기 시퀀스가 끝날 때까지 RSS를 사용하도록 설정합니다. 클라이언트는 필요한 모든 것이 준비될 때까지 간접 참조 테이블 이동 요청을 관리하거나 다른 RSS 이벤트를 처리할 필요가 없습니다.

나중에 드라이버가 언로드될 때 NetAdapterCx는 전원 다운 시퀀스 중에 데이터 경로 큐가 제거된 후 RSS 콜백을 호출하지 않습니다. 데이터 경로 큐는 전원이 다운되는 동안 첫 번째 단계로 중단되므로 클라이언트는 전원이 닫는 동안 다른 단계에서 가능한 RSS 이벤트를 처리할 필요가 없습니다.

RSS 기능 설정

NetAdapterCx에서 RSS를 시작하려면 다음 단계를 수행합니다.

  1. net 어댑터를 시작할 때 NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES 구조를 사용하여 하드웨어의 RSS 기능 및 제약 조건에 대해 시스템에 알릴 수 있습니다.
  2. NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES_INIT 호출하여 기능 구조를 초기화합니다.
  3. RSS 기능 구조를 초기화할 때 이러한 콜백에 대한 구현을 등록하도록 구조체의 RSS 콜백 멤버를 설정합니다.
    1. EvtNetAdapterReceiveScalingEnable
    2. EvtNetAdapterReceiveScalingDisable
    3. EvtNetAdapterReceiveScalingSetHashSecretKey
    4. EvtNetAdapterReceiveScalingSetIndirectionEntries
  4. RSS 기능 구조의 SynchronizeSetIndirectionEntries 를 적절하게 설정합니다.
  5. 초기화된 RSS 기능 구조를 NetAdapterSetReceiveScalingCapabilities 메서드에 전달합니다.

RSS 사용 및 사용 안 함

RSS 기능을 설정한 후 시스템은 드라이버에 대한 전원 켜기 시퀀스를 계속 사용합니다. NetAdapterCx는 데이터 경로 큐를 만드는 마지막 단계가 완료되면 드라이버의 RSS 콜백을 호출하기 시작합니다. 이 시점에서 시스템에서 필요에 따라 RSS를 사용하도록 설정하고 사용하지 않도록 설정할 수 있습니다.

Important

RSS를 사용하거나 사용하지 않도록 설정할 때 간접 참조 테이블을 지우거나 다시 설정해서는 안 됩니다. 프레임워크는 초기 간접 참조 테이블 상태를 설정합니다.

RSS 사용

NetAdapterCx는 드라이버의 EvtNetAdapterReceiveScalingEnable 콜백을 호출하여 RSS를 사용하도록 설정합니다. 이 콜백의 컨텍스트에서는 일반적으로 하드웨어에서 컨트롤 비트를 사용하도록 설정합니다.

RSS를 사용하도록 설정하는 코드 예제는 EvtNetAdapterReceiveScalingEnable을 참조 하세요.

RSS를 사용하지 않도록 설정

NetAdapterCx는 드라이버의 EvtNetAdapterReceiveScalingDisable 콜백을 호출하여 RSS를 사용하지 않도록 설정합니다. 여기서는 일반적으로 이전에 EvtNetAdapterReceiveScalingEnable에서 설정한 하드웨어의 컨트롤 비트를 사용하지 않도록 설정합니다.

RSS를 사용하지 않도록 설정하는 코드 예제는 EvtNetAdapterReceiveScalingDisable을 참조 하세요.

해시 비밀 키 설정

RSS를 사용하도록 설정하면 NetAdapterCx는 EvtNetAdapterReceiveScalingScalingSetHashSecretKey 콜백을 호출하여 NIC가 해시 계산을 확인하는 데 사용해야 하는 해시 비밀 키를 드라이버에 제공합니다. 이 콜백은 해시 비밀 키가 변경되는 경우 RSS가 실행될 때 언제든지 호출할 수 있습니다.

해시 비밀 키를 설정하는 코드 예제는 EvtNetAdapterReceiveScalingSetHashSecretKey를 참조하세요.

간접 참조 테이블 항목 이동

RSS가 시스템에서 실행되는 동안 상위 계층 프로토콜 드라이버는 프로세서 워크로드를 모니터링하고 수신 큐를 프로세서에 매핑하는 간접 참조 테이블을 유지 관리합니다. 프로토콜 드라이버가 RSS에서 프로세서 워크로드의 균형을 조정해야 하는 경우 먼저 새 프로세서에 대한 각 간접 참조 테이블 항목에 대한 새 매핑을 계산합니다. 그런 다음 프로토콜은 수신 큐 및 하드웨어 인터럽트 벡터를 NIC 클라이언트 드라이버를 대신하여 올바른 프로세서에 매핑하는 복잡성을 처리하는 NetAdapterCx에 이 정보를 전달합니다. NetAdapterCx는 큐 ID를 수신하도록 매핑된 항목이 있는 새 간접 참조 테이블을 NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES 구조로 저장하고 EvtNetAdapterReceiveScalingSetIndirectionEntries 콜백 함수를 호출할 때 드라이버에 전달합니다.

이 콜백에서는 NIC의 간접 참조 테이블의 각 항목을 지정된 수신 큐로 이동합니다. NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES 배열의 NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRY 구조에는 테이블의 해당 항목에 대한 해시 인덱스, 항목을 할당할 새 수신 큐 및 개별 이동이 성공했는지 여부를 나타내는 상태 필드가 포함됩니다.

하드웨어 수신 큐에 인덱스 항목을 할당하는 방법은 NIC의 디자인과 포함된 수신 큐 수에 따라 달라집니다. 자세한 내용 및 코드 예제 는 EvtNetAdapterReceiveScalingSetIndirectionEntries를 참조하세요.

다른 유형의 CPU 지원

Important

다른 유형의 CPU 지원은 상용 출시 전에 실질적으로 수정될 수 있는 시험판 기능입니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.

다른 유형의 CPU 시스템은 클록 속도와 기능이 다른 여러 유형의 코어를 사용합니다. 모든 코어가 서로 동일한 동종 다중 프로세서 시스템에 비해, 다른 유형의 CPU 시스템은 동적 컴퓨팅 부하에 더 잘 적응하고 더 적은 에너지를 사용할 수 있습니다.

WDK 미리 보기 버전 25197부터 NetAdapterCx는 다양한 핵심 형식을 효율적으로 활용하여 다른 유형의 CPU 시스템 지원을 제공합니다. RSS가 실행되는 동안 시스템은 클라이언트 드라이버에서 수신한 트래픽 워크로드에 따라 사용할 프로세서를 결정합니다. 수신되는 트래픽이 적으면 더 작고 전력 효율적인 코어가 트래픽을 처리할 수 있습니다. 트래픽이 많으면 수신되는 패킷을 지속적으로 폴링하려면 더 크고 성능이 좋은 코어가 필요합니다.

다른 유형의 시스템 지원을 옵트인하려면 시스템 관리자가 *RSSProfile 표준화된 INF 키워드를 NdisRssProfileBalanced설정해야 합니다. 이 프로필은 다른 유형의 시스템에 대한 기본 프로필입니다. 시스템에서 사용할 최상의 코어를 결정할 수 있도록 RSS 고급 키워드를 설정할 수 없습니다.

다른 RSS 프로필은 다른 유형의 시스템에 대해서도 지원됩니다. 시스템에서 RSS 기본 프로세서 번호 및 RSS 최대 프로세서 번호와 같은 고급 설정을 제어하려면 다른 RSS 프로필을 사용해야 합니다.

같은 유형의 CPU 시스템에서 NdisRssProfileBalanced를 사용할 수도 있습니다. 이 경우 시스템은 RSS에 사용할 프로세서를 결정합니다.