Habilitación, deshabilitación y actualización de VMMQ en un VPort
Después de crear un VPort, un controlador de nivel superior puede habilitar, deshabilitar o actualizar los parámetros RSS de VPort.
El controlador puede actualizar la tabla de direccionamiento indirecto RSS de VPort para cambiar las colas de números de un VPort. Sin embargo, el tipo de hash RSS, la función hash y la clave secreta hash de un VPort se consideran parámetros estáticos y los controladores que se sobreponen durante la vigencia de un VPort no cambian. Si un controlador de capa superior desea cambiar cualquiera de los parámetros estáticos RSS, debe eliminar y volver a crear el VPort.
El controlador de nivel superior habilita, deshabilita o cambia los parámetros RSS de un VPort mediante la emisión de una solicitud de OID de OID_GEN_RECEIVE_SCALE_PARAMETERS . El controlador de capa superior establece el campo VPortId de la estructura NDIS_OID_REQUEST en el identificador del VPort de destino de la nueva configuración.
El controlador de capa superior también establece la estructura NDIS_RECEIVE_SCALE_PARAMETERS usada en la solicitud OID como se indica a continuación. Tenga en cuenta que, en función de las funcionalidades de VMMQ anunciadas por el adaptador de minipuerto subyacente, algunos de los campos se pueden establecer en el mismo valor para todas las VPort pf.
Establezca el miembro Revision de Headeren NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_3.
Establezca la marca NDIS_RSS_PARAM_FLAG_DEFAULT_PROCESSOR_UNCHANGED para especificar que el miembro DefaultProcessorNumber no ha cambiado.
Establezca BaseCpuNumber en cero.
Establezca DefaultProcessorNumber para especificar el procesador RSS predeterminado para este VPort. El minipuerto puede suponer que el procesador predeterminado forma parte de la lista de procesadores RSS, pero no puede suponer que el procesador RSS predeterminado está en la tabla de direccionamiento indirecto actual.
Establezca HashInformation para indicar el tipo hash y la función hash que la NIC debe usar para calcular el valor hash de los paquetes recibidos para este VPort. El controlador de capa superior puede establecer este campo en un valor diferente para cada VPort.
Establezca IndirectionTableSize para especificar el tamaño de la tabla de direccionamiento indirecto en bytes. Establezca este campo en el mismo valor para todas las VPort pf. El controlador de capa superior debe asegurarse de que el número de entradas de la tabla de direccionamiento indirecto es una potencia de dos.
Establezca IndirectionTableOffset para especificar el desplazamiento de la tabla de direccionamiento indirecto desde el principio de la estructura NDIS_RECEIVE_SCALE_PARAMETERS .
Establezca HashSecretKeySize para especificar el tamaño de la clave secreta hash en bytes. El controlador de capa superior puede establecer una clave secreta diferente para cada VPort si el adaptador de minipuerto lo admite. Para obtener más información, consulte Advertising VMMQ capabilities(Funcionalidades de VMMQ de publicidad).
Establezca HashSecretKeyOffset para especificar el desplazamiento de la clave secreta hash desde el principio de la estructura NDIS_RECEIVE_SCALE_PARAMETERS . El controlador de capa superior puede establecer una clave secreta diferente para cada VPort si el adaptador de minipuerto lo admite. Para obtener más información, consulte Advertising VMMQ capabilities(Funcionalidades de VMMQ de publicidad).
Establezca ProcessorMaskOffset, NumberOfProcessorMasks y ProcessorMasksEntrySize correctamente.
Cuando un controlador de minipuerto recibe una solicitud de OID para deshabilitar VMMQ para un VPort, debe revertir a indicar todos los paquetes recibidos para ese VPort en el procesador especificado por el campo ProcessorAffinity en la estructura de NDIS_NIC_SWITCH_VPORT_PARAMETERS que se usó en la solicitud de OID de OID_NIC_SWITCH_CREATE_VPORT .
Cambio del número de colas de un VPort
El número de procesadores únicos usados en la tabla de direccionamiento indirecto de un VPort no puede superar el valor del campo NumQueuePairs de la estructura NDIS_NIC_SWITCH_VPORT_PARAMETERS especificada en la última solicitud de OID OID_NIC_SWITCH_CREATE_VPORT emitida. Estos procesadores serán un subconjunto del conjunto de procesadores RSS devuelto por una llamada a NdisGetRssProcessorInformation. Para obtener más información, consulte Asignación de VPorts para VMMQ. Sin embargo, las tablas de direccionamiento indirecto en diferentes VPorts podrían contener el mismo procesador.
Para reducir el número de colas de un VPort PF, un controlador de nivel superior debe:
Envíe un OID de OID_GEN_RECEIVE_SCALE_PARAMETERS con el tamaño de tabla de direccionamiento indirecto original. Sin embargo, la tabla de direccionamiento indirecto en este paso solo puede hacer referencia al número de procesadores distintos hasta el nuevo número de colas. Si la nueva tabla de direccionamiento indirecto debe ser menor que la tabla original debido a la marca NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SIZE_RESTRICTED de la estructura de NDIS_NIC_SWITCH_PARAMETERS , el emisor debe garantizar que la tabla de direccionamiento indirecto en este paso contendrá la nueva tabla de direccionamiento indirecto replicada tantas veces como sea necesario para satisfacer el requisito de marca RESTRICTED para el número original de colas.
Envíe un OID de OID_NIC_SWITCH_VPORT_PARAMETERS con un nuevo número de colas.
Envíe un OID_GEN_RECEIVE_SCALE_PARAMETERS con el nuevo tamaño de tabla de direccionamiento indirecto si ha cambiado.
Para aumentar el número de colas de un VPort PF, un controlador de capa superior debe:
El controlador no necesita actualizar la tabla de direccionamiento indirecto actual antes del paso 2 porque la tabla solo hace referencia al número de procesadores distintos hasta el número actual de colas.
Envíe un OID de OID_NIC_SWITCH_VPORT_PARAMETERS con un nuevo número de colas. Si se establece la marca RESTRICTED, el controlador de minipuerto debe replicar internamente la tabla de direccionamiento indirecto original tantas veces como sea necesario para que coincida con el requisito de tamaño de la tabla de direccionamiento indirecto para el nuevo número de colas.
Envíe un OID de OID_GEN_RECEIVE_SCALE_PARAMETERS con el nuevo tamaño de tabla de direccionamiento indirecto si ha cambiado.