다음을 통해 공유


메시지 신호 인터럽트가 있는 RSS

미니포트 드라이버는 메시지 신호 인터럽트(MSI)를 지원하여 RSS 성능을 향상시킬 수 있습니다. MSI를 사용하면 NIC가 수신된 데이터를 처리할 CPU에 대한 인터럽트를 요청할 수 있습니다. MSI에 대한 NDIS 지원에 대한 자세한 내용은 NDIS MSI-X를 참조하세요.

다음 그림에서는 MSI-X를 사용하는 RSS를 보여 줍니다.

네트워크 스택에서 MSI-X를 사용하는 RSS를 보여 주는 다이어그램

그림에서 파선 화살표는 다른 연결에서의 처리를 나타냅니다. MSI-X를 사용하는 RSS를 사용하면 NIC가 연결에 대한 올바른 CPU를 중단할 수 있습니다.

각 인터럽트마다 다음 프로세스가 반복됩니다.

  1. The NIC:

    1. DMA를 사용하여 수신된 데이터로 버퍼를 채웁니다.

      미니포트 드라이버는 초기화 중에 공유 메모리에 수신 버퍼를 할당했습니다.

    2. 해시 값을 계산합니다.

    3. 버퍼를 CPU에 큐에 대기시키고 미니포트 드라이버에 큐 할당을 제공합니다. 예를 들어 NIC는 1-3단계를 반복하고 일부 수의 패킷이 수신된 후 DMA에서 CPU 할당 목록을 반복할 수 있습니다. 특정 메커니즘은 NIC 디자인에 남아 있습니다.

    4. MSI-X를 사용하면 비어 있지 않은 큐와 연결된 CPU가 중단됩니다.

  2. NIC는 추가 수신 버퍼를 채우고 언제든지 큐에 추가할 수 있지만 미니포트 드라이버가 해당 CPU에 대한 인터럽트 기능을 사용하도록 설정할 때까지 해당 CPU를 다시 중단하지 않습니다.

  3. NDIS는 현재 CPU에서 미니포트 드라이버의 ISR( MiniportInterrupt)을 호출합니다.

  4. ISR은 현재 CPU에서 인터럽트 기능을 사용하지 않도록 설정하고 현재 CPU에서 DPC를 큐에 대기합니다.

    DPC가 현재 CPU에서 실행되는 동안 다른 CPU에서 인터럽트는 여전히 발생할 수 있습니다.

  5. NDIS는 대기하는 각 DPC에 대해 MiniportInterruptDPC 함수를 호출합니다. 각 DPC:

    1. 빌드는 큐에서 받은 모든 버퍼에 대한 설명자를 수신하고 드라이버 스택의 데이터를 나타냅니다. 자세한 내용은 RSS 수신 데이터 표시를 참조하세요.
    2. 현재 CPU에 대해 인터럽트 사용 이 인터럽트는 완료되고 프로세스가 다시 시작됩니다. 다른 DPC의 진행률을 추적하기 위해 원자성 작업이 필요하지 않습니다.