Configuración de RSS
Para obtener información sobre la configuración RSS, un controlador superpuesto puede enviar una consulta OID de OID_GEN_RECEIVE_SCALE_CAPABILITIES a un controlador de minipuerto. NDIS también proporciona la información de configuración RSS a los controladores de protocolo superpuestos en la estructura NDIS_BIND_PARAMETERS durante la inicialización.
El controlador superpuesto elige una función hash, un tipo y una tabla de direccionamiento indirecto. Para establecer estas opciones de configuración, el controlador envía una solicitud set de OID de OID_GEN_RECEIVE_SCALE_PARAMETERS al controlador de minipuerto. Los controladores superpuestos también pueden consultar este OID para obtener la configuración RSS actual. El búfer de información del OID OID_GEN_RECEIVE_SCALE_PARAMETERS contiene un puntero a una estructura NDIS_RECEIVE_SCALE_PARAMETERS.
El controlador superpuesto puede deshabilitar RSS en la NIC. En este caso, el controlador establece la marca NDIS_RSS_PARAM_FLAG_DISABLE_RSS en el miembro Flags de la estructura NDIS_RECEIVE_SCALE_PARAMETERS. Cuando se establece esta marca, el controlador de minipuerto debe omitir todas las demás marcas y configuraciones y deshabilitar RSS en la NIC.
NDIS procesa OID_GEN_RECEIVE_SCALE_PARAMETERS antes de pasarlo al controlador de minipuerto y actualiza la palabra clave estándar estandarizada *RSS del adaptador de minipuerto, si es necesario. Para obtener más información sobre la palabra clave *RSS, consulte Palabras clave INF estandarizadas para RSS.
Después de recibir una solicitud set OID_GEN_RECEIVE_SCALE_PARAMETERS con la marca NDIS_RSS_PARAM_FLAG_DISABLE_RSS establecida establecida, el controlador de minipuerto debe establecer el estado RSS de la NIC en el estado inicial de la NIC después de la inicialización. Por lo tanto, si el controlador de minipuerto recibe una solicitud set de OID_GEN_RECEIVE_SCALE_PARAMETERS posterior con la marca NDIS_RSS_PARAM_FLAG_DISABLE_RSS desactivada, todos los parámetros deben tener los mismos valores que se establecieron después de que el controlador de minipuerto recibiera la solicitud set OID_GEN_RECEIVE_SCALE_PARAMETERS por primera vez después de inicializar el adaptador de minipuerto.
Un controlador superpuesto puede usar el OID OID_GEN_RECEIVE_HASH para habilitar y configurar cálculos hash en fotogramas recibidos sin habilitar RSS. Los controladores superpuestos también pueden consultar este OID para obtener la configuración de hash de recepción actual.
El búfer de información del OID OID_GEN_RECEIVE_HASH contiene un puntero a una estructura NDIS_RECEIVE_HASH_PARAMETERS. Para una solicitud set, el OID especifica los parámetros hash que debe usar el adaptador de minipuerto. Para una solicitud de consulta, el OID devuelve los parámetros hash que usa el adaptador de minipuerto. Este OID es opcional para los controladores que admiten RSS.
Nota Si el cálculo hash de recepción está habilitado, NDIS deshabilita el cálculo hash de recepción antes de habilitar RSS. Si RSS está habilitado, NDIS deshabilita RSS antes de habilitar el cálculo hash de recepción.
Todos los adaptadores de minipuerto que admite el controlador de minipuerto deben proporcionar las mismas opciones de configuración hash a todos los enlaces de protocolo subsiguientes. Este OID también incluye la clave secreta que el controlador de minipuerto o la NIC deben usar para los cálculos hash. La clave es de 320 bits de longitud (40 bytes) y puede contener cualquier dato que elija el controlador superpuesto, por ejemplo, una secuencia aleatoria de bytes.
Para reequilibrar la carga de procesamiento, el controlador superpuesto puede establecer los parámetros RSS y modificar la tabla de direccionamiento indirecto. Normalmente, todos los parámetros no se modifican, excepto en la tabla de direccionamiento indirecto. Sin embargo, después de inicializar RSS, el controlador superpuesto podría cambiar otros parámetros de inicialización RSS. Si es necesario, el controlador de minipuerto puede restablecer el hardware de la NIC para cambiar la función hash, la clave secreta hash, el tipo hash, el número de CPU base o el número de bits que se usan para indexar la tabla de direccionamiento indirecto.
Nota El controlador superpuesto puede establecer estos parámetros en cualquier momento. Esto puede provocar indicaciones de recepción desordenados. Los controladores de minipuerto que admiten TCP no son necesarios para purgar sus colas de recepción en esta instancia.
En la ilustración siguiente se proporciona contenido de ejemplo para dos instancias de la tabla de direccionamiento indirecto.
En la ilustración anterior se presupone una configuración de cuatro procesadores y el número de bits menos significativos utilizados del valor hash es de 6 bits. Por lo tanto, la tabla de direccionamiento indirecto contiene 64 entradas.
En la ilustración, la tabla A enumera los valores de la tabla de direccionamiento indirecto inmediatamente después de la inicialización. Más adelante, a medida que la carga normal del tráfico varía, la carga del procesador aumenta de forma desequilibrada. El controlador superpuesto detecta la condición desequilibrada e intenta reequilibrar la carga definiendo una nueva tabla de direccionamiento indirecto. En la tabla B se enumeran los nuevos valores de la tabla de direccionamiento indirecto. En la tabla B, parte de la carga de CPU 2 se mueve a las CPU 1 y 3.
Nota Cuando se cambia la tabla de direccionamiento indirecto, durante un breve tiempo (mientras se procesan las colas actuales del descriptor de recepción), los paquetes se pueden procesar en la CPU incorrecta. Se trata de una condición transitoria normal.
El tamaño de la tabla de direccionamiento indirecto suele ser de dos a ocho veces el número de procesadores del sistema.
Cuando el controlador de minipuerto distribuye los paquetes a las CPU, si hay demasiadas CPU, el esfuerzo invertido en distribuir la carga podría llegar a ser prohibitivo. En este caso, los controladores superpuestos deben elegir un subconjunto de CPU en las que se produce el procesamiento de datos de red.
En algunos casos, el número de colas de recepción de hardware disponibles podría ser menor que el número de CPU del sistema. El controlador de minipuerto debe examinar la tabla de direccionamiento indirecto para determinar los números de CPU que se van a asociar a las colas de hardware. Si el número total de números de CPU diferentes que aparecen en la tabla de direccionamiento indirecto es mayor que el número de colas de hardware que admite la NIC, el controlador de minipuerto debe elegir un subconjunto de los números de CPU de la tabla de direccionamiento indirecto. El subconjunto es igual al número de colas de hardware. El controlador de minipuerto obtuvo el parámetro IndirectionTableSize de OID_GEN_RECEIVE_SCALE_PARAMETERS. El controlador de minipuerto especificó el valor NumberOfReceiveQueues en respuesta a OID_GEN_RECEIVE_SCALE_CAPABILITIES.