Compartir a través de


RSS con Hardware Queuing

RSS con puesta en cola de hardware mejora el rendimiento del sistema en relación con RSS con una única solución de cola de recepción de hardware. Las NIC que admiten la puesta en cola de hardware asignan datos recibidos a varias colas de recepción. Las colas de recepción están asociadas a una CPU. La NIC asigna datos recibidos a las CPU basadas en valores hash y en una tabla de direccionamiento indirecto.

En la ilustración siguiente se muestra RSS con cola de recepción de NIC.

Diagrama que ilustra RSS con cola de recepción de NIC.

En la ilustración, las flechas discontinuas representan una ruta de acceso alternativa para el procesamiento de recepción. RSS no puede controlar la CPU que recibe la llamada ISR inicial. El controlador no tiene que poner en cola los datos para que pueda programar inmediatamente los DPC iniciales en las CPU correctas.

El siguiente proceso se repite para cada interrupción:

  1. La NIC:

    1. Usa DMA para rellenar búferes con datos recibidos.

      El controlador de minipuerto asignó los búferes de recepción en memoria compartida durante la inicialización.

    2. Calcula un valor hash.

    3. Pone en cola el búfer de una CPU y proporciona las asignaciones de cola al controlador de minipuerto.

      Por ejemplo, la NIC podría recorrer en bucle los pasos 1-3 y DMA una lista de asignaciones de CPU después de recibir algún número de paquetes. El mecanismo específico se deja en el diseño de la NIC.

    4. Interrumpe el sistema.

      Los búferes recibidos que el sistema controla en una interrupción se distribuyen entre las CPU.

  2. NDIS llama a la función MiniportInterrupt (ISR) del controlador de miniporte en una CPU determinada por el sistema.

  3. El controlador de minipuerto solicita NDIS para poner en cola llamadas a procedimientos diferidos (DPC) para cada una de las CPU que tienen una cola no vacía.

    Tenga en cuenta que todos los DPC deben completarse antes de que el controlador habilite las interrupciones. Además, tenga en cuenta que el ISR podría estar ejecutándose en una CPU que no tiene búferes para procesar.

  4. NDIS llama a la función MiniportInterruptDPC para cada DPC en cola. DPC en una CPU determinada:

    1. Las compilaciones reciben descriptores para todos los búferes recibidos en su cola e indican los datos de la pila de controladores.

      Para obtener más información, vea Indicación de datos de recepción RSS.

    2. Habilita las interrupciones, si es la última DPC que se va a completar. Esta interrupción se completa y el proceso se inicia de nuevo. El controlador debe usar una operación atómica para identificar el último DPC que se va a completar. Por ejemplo, el controlador puede usar la función NdisInterlockedDecrement para implementar un contador atómico.