Compartir a través de


RSS con una sola cola de recepción de hardware

Los controladores de minipuerto pueden admitir RSS para NIC que admiten el cálculo de hash RSS y una sola cola de descriptores de recepción.

En la ilustración siguiente se muestra el procesamiento RSS con una sola cola de descriptores de recepción.

Diagrama que ilustra el procesamiento RSS con una sola cola de descriptores de recepción.

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.

A diferencia del procesamiento de recepción no RSS, el procesamiento de recepción basado en RSS se distribuye a través de varias CPU. Además, el procesamiento de una conexión determinada se puede asociar a una CPU determinada.

El siguiente proceso se repite para cada interrupción:

  1. La NIC usa DMA para rellenar los búferes con datos recibidos e interrumpe el sistema.

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

  2. La NIC puede rellenar búferes de recepción adicionales en cualquier momento, pero no se interrumpe de nuevo hasta que el controlador de miniporte habilita las interrupciones.

    Los búferes recibidos que el sistema controla en una interrupción se pueden asociar a muchas conexiones de red diferentes.

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

  4. El ISR deshabilita las interrupciones y solicita a NDIS poner en cola una llamada a procedimiento diferido (DPC) para procesar los datos recibidos.

  5. NDIS llama a la función MiniportInterruptDPC (DPC) en la CPU actual. En el DPC:

    1. El controlador de minipuerto usa los valores hash que la NIC calculó para cada búfer recibido y reasigna cada búfer recibido a una cola de recepción asociada a una CPU.
    2. El DPC actual solicita NDIS para poner en cola un DPC para cada una de las demás CPU asociadas a una cola de recepción no vacía.
    3. Si el DPC actual se ejecuta en una CPU asociada a una cola no vacía, el DPC actual procesa los búferes de recepción asociados e indica los datos recibidos en la pila del controlador.

    La asignación de colas y la puesta en cola adicionales requieren una sobrecarga de procesamiento adicional. Para lograr un rendimiento mejorado del sistema, esta sobrecarga debe compensarse mediante un mejor uso de las CPU disponibles.

  6. DPC en una CPU determinada:

    1. Procesa los búferes de recepción asociados a su cola de recepción e indica los datos de la pila del controlador. Para obtener más información, vea Indicar datos de recepción RSS.
    2. Habilita las interrupciones, si es la última DPC que se va a completar. Esta interrupción está 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.