Escalado de lado de recepción (RSS) de NetAdapterCx
El escalado de lado de recepción (RSS) es una tecnología del controlador de red que permite la distribución eficiente del procesamiento de recepción de red en varias CPU en sistemas multiprocesador. RSS mejora el rendimiento del sistema y aumenta la escalabilidad de red aprovechando todos los procesadores disponibles en un sistema y reequilibrando dinámicamente las cargas de trabajo de CPU.
En este tema se resalta RSS para los controladores de cliente NetAdapterCx y se asume que está familiarizado con los conceptos y la terminología de RSS. Para obtener más información sobre RSS en general, incluidos diagramas que ilustran RSS en diferentes escenarios de hardware, consulte Escalado de lado de recepción.
Información general sobre RSS en NetAdapterCx
RSS en NetAdapterCx se centra en la facilidad de configuración, la simplicidad de la habilitación y deshabilitación, y la abstracción de la complejidad del procesador a la interrupción. Un controlador cliente para una NIC compatible con RSS solo necesita cumplir tres criterios para admitir RSS en NetAdapterCx:
- El controlador debe establecer funcionalidades de RSS al iniciar un adaptador de red, pero antes de llamar a NetAdapterStart. Esto incluye implementar cuatro devoluciones de llamada RSS y registrarlas en la estructura de funcionalidades RSS.
- Las colas de ruta de acceso de datos del controlador deben crearse y estar listas para aceptar solicitudes.
- El controlador debe estar en estado de energía D0.
El diseño de RSS en NetAdapterCx garantiza que el sistema no llame a las devoluciones de llamada RSS de un cliente y habilite RSS hasta el final de la secuencia de encendido. Los clientes no tienen que administrar solicitudes de movimiento de tablas de direccionamiento indirecto ni controlar otros eventos RSS hasta que todo lo que necesiten esté listo.
Más adelante, cuando el controlador se descarga, NetAdapterCx no llamará a devoluciones de llamada RSS cuando las colas de ruta de datos se hayan destruido durante la secuencia de apagado. Dado que las colas de rutas de datos se desmontan como primer paso durante el apagado, esto significa que los clientes no tienen que controlar posibles eventos RSS en cualquier otra fase durante el apagado.
Configuración de las funcionalidades de RSS
Para empezar a trabajar con RSS en NetAdapterCx, siga estos pasos:
- Al iniciar el adaptador de red, indique al sistema las funcionalidades y restricciones RSS del hardware mediante la estructura NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES.
- Inicialice la estructura de funcionalidades llamando a NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES_INIT.
- Al inicializar la estructura de funcionalidades RSS, establezca los miembros de devolución de llamada RSS de la estructura para registrar las implementaciones de estas devoluciones de llamada:
- Establezca SynchronizeSetIndirectionEntries de la estructura de las funcionalidades de RSS según corresponda.
- Pase las estructuras de funcionalidades RSS inicializadas al método NetAdapterSetReceiveScalingCapabilities.
Habilitación y deshabilitación de RSS
Después de establecer las funcionalidades RSS, el sistema continuará con la secuencia de encendido del controlador. NetAdapterCx comienza a invocar las devoluciones de llamada RSS del controlador una vez finalizado el paso final de la creación de colas de rutas de datos. En este momento, RSS se puede habilitar y deshabilitar según sea necesario por el sistema.
Importante
No debe borrar ni restablecer la tabla de direccionamiento indirecto al habilitar o deshabilitar RSS. El marco establecerá el estado de la tabla de direccionamiento indirecto inicial.
Habilitación del análisis de comportamiento de usuarios y entidades (RSS) en Azure Sentinel
NetAdapterCx habilita RSS invocando la devolución de llamada EvtNetAdapterReceiveScalingEnable del controlador. En el contexto de esta devolución de llamada, normalmente se habilitan los bits de control en el hardware.
Para obtener un ejemplo de código de habilitación de RSS, consulte EvtNetAdapterReceiveScalingEnable.
Dehabilitación de RSS
NetAdapterCx deshabilita RSS invocando la devolución de llamada EvtNetAdapterReceiveScalingDisable del controlador. En este caso, normalmente deshabilitará el bit de control en el hardware que estableció anteriormente en EvtNetAdapterReceiveScalingEnable.
Para obtener un ejemplo de código de deshabilitación de RSS, consulte EvtNetAdapterReceiveScalingDisable.
Establecimiento de la clave secreta hash
Una vez habilitado RSS, NetAdapterCx invoca la devolución de llamada EvtNetAdapterReceiveScalingSetHashSecretKey para proporcionar al controlador la clave secreta hash que debe usar la NIC para comprobar los cálculos hash. Esta devolución de llamada se puede invocar en cualquier momento cuando RSS se ejecuta si cambia la clave secreta hash.
Para obtener un ejemplo de código de configuración de la clave secreta hash, consulte EvtNetAdapterReceiveScalingSetHashSecretKey.
Movimiento de las entradas de la tabla de direccionamiento indirecto
Mientras RSS se ejecuta en el sistema, los controladores de protocolo de nivel superior supervisan la carga de trabajo del procesador y mantienen una tabla de direccionamiento indirecto que asigna las colas a los procesadores. Cuando el controlador de protocolo necesita reequilibrar la carga de trabajo del procesador en RSS, primero calcula una nueva asignación para cada entrada de tabla de direccionamiento indirecto a un nuevo procesador. A continuación, el protocolo pasa esta información a NetAdapterCx, que controla la complejidad de asignar colas de recepción y vectores de interrupción de hardware al procesador correcto en nombre del controlador cliente NIC. NetAdapterCx almacena la nueva tabla de direccionamiento indirecto, con entradas asignadas para recibir identificadores de cola, en una estructura NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES y la pasa al controlador cuando invoca la función de devolución de llamada EvtNetAdapterReceiveScalingSetIndirectionEntries.
En esta devolución de llamada, moveremos cada entrada de la tabla de direccionamiento indirecto de la NIC a la cola de recepción especificada. Cada estructura NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRY de la matriz NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES contiene el índice hash de esa entrada en la tabla, la nueva cola de recepción a la que asignar la entrada y un campo de estado que indica si ese movimiento individual se ha realizado correctamente o no.
El método para asignar entradas de índice a las colas de recepción de hardware depende del diseño de la NIC y del número de colas de recepción que tiene. Para obtener más información y un ejemplo de código, consulte EvtNetAdapterReceiveScalingSetIndirectionEntries.
Compatibilidad con CPU heterogénea
Importante
La compatibilidad con CPU heterogénea es una característica de versión preliminar que puede modificarse sustancialmente antes de que se publique comercialmente. Microsoft no proporciona ninguna garantía, expresa o implícita, con respecto a la información proporcionada aquí.
Los sistemas de CPU heterogénea usan varios tipos de núcleos que tienen diferentes velocidades de reloj y funcionalidades. En comparación con los sistemas de multiprocesador homogéneo, en los que cada núcleo es idéntico entre sí, los sistemas de CPU heterogénea pueden ajustarse mejor a las cargas informáticas dinámicas y usar menos energía.
A partir de la versión preliminar de WDK 25197, NetAdapterCx ofrece compatibilidad con el sistema de CPU heterogénea mediante el uso eficaz de los distintos tipos principales. Mientras se ejecuta RSS, el sistema decide qué procesador usar en función de la carga de trabajo de tráfico recibida por el controlador cliente. Cuando se recibe menos tráfico, los núcleos más pequeños y de menor consumo pueden gestionar el tráfico. Cuando hay más tráfico, se necesitan núcleos más grandes y de mayor rendimiento para sondear continuamente los paquetes que se reciben.
Para participar en la compatibilidad heterogénea del sistema, el administrador del sistema debe establecer la palabra clave INF estandarizada *RSSProfile en NdisRssProfileBalanced. Este es el perfil predeterminado para sistemas heterogéneos. Para permitir que el sistema decida los mejores núcleos que se van a usar, no puede establecer palabras clave avanzadas de RSS.
Los otros perfiles RSS también se admiten para sistemas heterogéneos. Si desea controlar la configuración avanzada, como el número de procesadores base RSS y el número máximo de procesadores RSS en el sistema, debe usar un perfil RSS diferente.
También puede usar NdisRssProfileBalanced en un sistema de CPU homogénea. En este caso, el sistema decide qué procesadores usar para RSS.