Compartir a través de


Descarga de fusión de segmentos de recepción (RSC)

Al recibir datos, la mayoría de las capas de la pila TCP/IP deben examinar la información de encabezado de cada segmento por separado. Esto crea una gran cantidad de sobrecarga cuando se reciben grandes cantidades de datos.

La fusión de segmentos de recepción (RSC) reduce esta sobrecarga al fusionar una secuencia de segmentos recibidos e indicarles la pila TCP/IP en un único segmento combinado. Las capas superiores de la pila TCP/IP solo deben examinar un encabezado para toda la secuencia.

Una tarjeta de interfaz de red (NIC) que admite RSC en hardware puede mejorar considerablemente el rendimiento de la ruta de recepción. También puede reducir el uso de la CPU del host, ya que libera la capa de protocolo de realizar RSC en software.

Para obtener más información sobre RSC, consulte Información general sobre la fusión de segmentos de recepción.

NetAdapterCX también admite UDP RSC (URO) a partir de la versión 2.5. Para obtener más información, consulte Descarga de UDP RSC (URO).

Palabras clave INF para controlar la descarga de RSC

NetAdapterCx comprueba las palabras clave del Registro y las respeta al habilitar las funcionalidades de descarga activas. El controlador no necesita realizar ninguna otra acción.

Las palabras clave de RSC especificadas en Palabras clave INF estandarizadas para RSC se pueden usar para habilitar o deshabilitar la descarga de RSC con una configuración de clave del Registro.

Los valores de palabra clave deben ser de tipo REG_SZ.

Configuración de la descarga de RSC

Los controladores cliente anuncian primero las funcionalidades RSC de su hardware durante la inicialización del adaptador de red. Esto puede ocurrir dentro de su devolución de llamada EvtDevicePrepareHardware antes de iniciar un adaptador de red.

Para configurar las funcionalidades de RSC, el controlador de cliente:

  1. Asigna una estructura NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES.

  2. Llama a NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES_INIT para inicializar la estructura.

  3. Llama a NetAdapterOffloadSetRscCapabilities para registrar la estructura con NetAdapterCx.

Durante la llamada a NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES_INIT el controlador cliente proporciona un puntero a la devolución de llamada EVT_NET_ADAPTER_OFFLOAD_SET_RSC. El sistema invoca esta devolución de llamada más adelante si cambian las funcionalidades de descarga activas.

Reglas para indicar las funcionalidades de RSC de hardware

  1. Los controladores cliente no deben realizar la RSC de software en ningún tipo de tráfico que no tenga compatibilidad con hardware en la NIC.

Las reglas siguientes se aplican a la estructura NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES:

  1. NetAdapterOffloadLayer3FlagIPv4NoOptions y NetAdapterOffloadLayer3FlagIPv6NoExtensions son los únicos valores válidos para el campo Layer3Flags. Estas marcas indican compatibilidad con IPv4 e IPv6, respectivamente.

  2. NetAdapterOffloadLayer4FlagTcpNoOptions y NetAdapterOffloadLayer4FlagUdp son los únicos valores válidos para el campo Layer4Flags. Estas marcas indican compatibilidad con TCP y UDP, respectivamente.

  3. Las marcas de nivel 3 deben establecerse si se establece la marca NetAdapterOffloadLayer4FlagTcpNoOptions.

  4. El campo TcpTimestampOption es opcional. Los controladores cliente establecen este campo después de llamar a NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES_INIT y antes de llamar a NetAdapterOffloadSetRscCapabilities para indicar si la NIC admite la opción de marca de tiempo TCP.

En el ejemplo siguiente se muestra cómo un controlador cliente podría configurar sus funcionalidades de descarga de hardware RSC.

VOID
MyAdapterSetRscOffloadCapabilities(
    NETADAPTER NetAdapter
)
{
    // Configure the hardware's RSC offload capabilities
    NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES rscOffloadCapabilities;
    NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES_INIT(
        &rscOffloadCapabilities,
        NetAdapterOffloadLayer3FlagIPv4NoOptions | NetAdapterOffloadLayer3FlagIPv6NoExtensions,
        NetAdapterOffloadLayer4FlagTcpNoOptions,
        MyEvtAdapterOffloadSetRsc);
    rscOffloadCapabilities.TcpTimestampOption = FALSE;

    // Set the current RSC offload capabilities and register the callback for future changes in active capabilities
    NetAdapterOffloadSetRscCapabilities(NetAdapter, &rscOffloadCapabilities);
}

Actualización de descargas de hardware RSC

Si la pila TCP/IP o un controlador de protocolo superpuesto solicita un cambio en las funcionalidades de RSC activas del adaptador de red, NetAdapterCx invoca la devolución de llamada EVT_NET_ADAPTER_OFFLOAD_SET_RSC del controlador cliente que se registró en NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES. En esta devolución de llamada, el sistema proporciona funcionalidades actualizadas en el objeto NETOFFLOAD que el controlador cliente puede consultar para actualizar sus funcionalidades de descarga.

Los controladores cliente pueden llamar a las siguientes funciones para determinar qué descargas de RSC están habilitadas:

En el ejemplo siguiente se muestra cómo un controlador cliente podría actualizar sus funcionalidades de descarga de RSC:

VOID
MyEvtAdapterOffloadSetRsc(
    NETADAPTER NetAdapter,
    NETOFFLOAD Offload
)
{
    PMY_NET_ADAPTER_CONTEXT adapterContext = NetvAdapterGetContext(NetAdapter);

    // Store the updated information in the context
    adapterContext->IsRscIPv4Enabled = NetOffloadIsTcpRscIPv4Enabled(Offload);
    adapterContext->IsRscIPv6Enabled = NetOffloadIsTcpRscIPv6Enabled(Offload);
    adapterContext->IsRscTcpTimestampOptionEnabled = NetOffloadIsRscTcpTimestampOptionEnabled(Offload);
}

Descarga de UDP RSC (URO)

URO permite la fusión de segmentos UDP recibidos. Las NIC pueden combinar datagramas UDP del mismo flujo que coinciden con un conjunto de reglas en un búfer lógico contiguo. Estos datagramas combinados se indican a continuación en la pila de redes de Windows como un único paquete grande. Para obtener información sobre las reglas de URO, consulte Reglas para fusionar paquetes UDP.

La palabra clave de URO especificada en Palabra clave INF para controlar URO se puede usar para habilitar o deshabilitar URO con una configuración de clave del Registro.

Los controladores cliente NetAdapterCx pueden usar las estructuras RSC existentes y la API de RSC para URO. Para configurar URO, los controladores cliente deben establecer el campo Layer4Flags de la estructura NET_ADAPTER_OFFLOAD_RSC_CAPABILITIES en NetAdapterOffloadLayer4FlagUdp.

El comportamiento de URO refleja RSC con una excepción. Cuando la devolución de llamada EVT_NET_ADAPTER_OFFLOAD_SET_RSC deshabilita URO, el controlador debe indicar los segmentos fusionados existentes y esperar hasta que se completen todas las indicaciones pendientes de URO. Este enfoque garantiza que no haya ninguna indicación de URO activa una vez que se devuelva la devolución de llamada.