Compartir a través de


Puertos virtuales no predeterminados y VMQ

El conmutador NIC predeterminado es un componente de un adaptador de red que admite la interfaz de virtualización de E/S raíz única (SR-IOV). El conmutador siempre conecta el puerto virtual predeterminado (VPort) a la función física PCI Express (PCIe) (PF). El modificador puede conectar uno o varios VPort no predeterminados al PF. Para obtener más información, consulte Creación de un puerto virtual.

La pila de virtualización se ejecuta en el sistema operativo de administración de la partición primaria de Hyper-V. Esta pila crea VPorts mediante la emisión de solicitudes de método de identificador de objeto (OID) de OID_NIC_SWITCH_CREATE_VPORT. Sin embargo, la pila puede crear más VPorts que el número de funciones virtuales (VFs) activas para las que se han asignado recursos a través de solicitudes de método OID de OID_NIC_SWITCH_ALLOCATE_VF.

Si SR-IOV está habilitado en un adaptador de red, se debe deshabilitar la funcionalidad completa de VMQ. Sin embargo, los VPort no predeterminados que están conectados al PF y que no están conectados a un VF pueden proporcionar la misma funcionalidad que la interfaz de la cola de máquinas virtuales (VMQ). En los puntos siguientes se describe cómo VPorts puede proporcionar rutas de acceso de datos aceleradas por hardware para la transferencia de paquetes similar a VMQ:

  • VMQ determina la máquina virtual de destino mediante el filtrado de control de acceso multimedia (MAC) en hardware. Esto evita la sobrecarga de determinar la máquina virtual de destino en la pila de virtualización.

    A partir de Windows Server 2012, la pila de virtualización configura los filtros de recepción en VPort mediante la emisión de solicitudes de método OID de OID_RECEIVE_FILTER_SET_FILTER. Para esta solicitud de OID, la pila de virtualización pasa una estructura de NDIS_RECEIVE_FILTER_PARAMETERS que especifica la dirección MAC y el identificador de LAN virtual (VLAN) asociado al adaptador de red virtual. De forma similar a VMQ, puede configurar varios pares de direcciones MAC y id. de VLAN en VPort. La pila de virtualización también especifica el VPort de destino al que se establecerá el filtro de recepción.

    El adaptador de red SR-IOV realiza un filtrado de hardware similar en función de los criterios de filtrado especificados a través de la solicitud de OID_RECEIVE_FILTER_SET_FILTER . Cuando se recibe un paquete en la cola de recepción de hardware de un VPort, el controlador de miniporta especifica el identificador VPort de origen en los datos fuera de banda (OOB) de una estructura de NET_BUFFER_LIST para el paquete. En función del identificador VPort, la pila de virtualización determina la máquina virtual de destino e indica los paquetes a la pila de red que se ejecuta en la máquina virtual.

    De forma similar, la pila de virtualización especifica el identificador VPort de destino en los datos OOB de una estructura de NET_BUFFER_LIST para un paquete de transmisión. Cuando el controlador controla la solicitud de envío del paquete, coloca el paquete en la cola de transmisión de hardware del VPort especificado.

    El identificador VPort se puede obtener de los datos OOB del paquete mediante la macro NET_BUFFER_LIST_RECEIVE_FILTER_VPORT_ID .

    Para obtener más información sobre este proceso, vea Flujo de paquetes a través de un puerto virtual.

    Para obtener más información sobre los requisitos de filtrado de recepción para un adaptador de red SR-IOV, vea Determinar las funcionalidades de filtrado de recepción.

  • VMQ proporciona la interrupción y la simultaneidad de DPC.

    A partir de NDIS 6.30 y Windows Server 2012, se puede configurar una VPort conectada al PF para tener una afinidad de CPU específica. La pila de virtualización configura los parámetros de afinidad de CPU e moderación de interrupciones para un VPort mediante solicitudes de método OID de OID_NIC_SWITCH_CREATE_VPORT o OID_NIC_SWITCH_VPORT_PARAMETERS. Al hacerlo, la pila de virtualización configura parámetros basados en interrupciones similares a VMQ para la interrupción y la simultaneidad de DPC.

    Por ejemplo, cuando el adaptador de red SR-IOV recibe paquetes en un VPort configurado para tener una afinidad de CPU específica, el adaptador genera las interrupciones en la CPU especificada. El controlador de minipuerto indica los paquetes recibidos a NDIS y la pila de virtualización de esa CPU.

El controlador de minipuerto PF anuncia sus funcionalidades SR-IOV en el contexto de la llamada a MiniportInitializeEx. El controlador inicializa una estructura de NDIS_SRIOV_CAPABILITIES con sus funcionalidades y llama a NdisMSetMiniportAttributes para registrar sus funcionalidades. Para obtener más información, vea Determinar las funcionalidades de SR-IOV.

Los siguientes miembros de la estructura de NDIS_NIC_SWITCH_CAPABILITIES afectan a la forma en que se asignan las VPorts:

  • MaxNumVPorts, que especifica el número máximo de VPorts que se pueden crear en el adaptador de red.

  • MaxNumVFs, que especifica el número máximo de VFs que se pueden asignar en el adaptador de red.

A partir de NDIS 6.30, cuando el controlador de minipuerto inicializa la estructura NDIS_NIC_SWITCH_CAPABILITIES , puede establecer la marca NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL en el miembro NicSwitchCapabilities . Esta marca especifica que las VPorts no predeterminadas se pueden crear de forma no atendida desde el grupo de VPort en el adaptador de red. Esto permite crear y asignar VPorts no predeterminados disponibles según sea necesario a las VFs asignadas y pf. Si el adaptador de red admite la interfaz VMQ, también se pueden usar VPorts no predeterminados asignados al PF para las colas de recepción de máquinas virtuales.

Si se establece la marca de NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL, se crean VPorts no predeterminados disponibles y se asignan a pf y a las VFs asignadas. El número máximo de VPorts que se pueden crear y asignar al PF es el mismo valor que el controlador notifica en el miembro MaxNumVPorts . El controlador de minipuerto debe reservar un VPort para que se use como el VPort predeterminado que se asigna al PF. Como resultado, el número máximo de VPorts no predeterminados que se pueden asignar al PF y que se usan para las colas de recepción de máquinas virtuales es (MaxNumVPorts– 1).

Nota

 Si se establece esta marca, la creación y asignación de VPorts no predeterminados no se reservan para la asignación de VF. Como resultado, pueden producirse situaciones en las que no se puede asignar un VF a un VPort si el grupo se ha agotado de VPorts disponibles. 

Si no se establece la marca NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL, la creación y asignación de VPorts no predeterminados se reserva para la asignación de VF. El número máximo de VPorts no predeterminados adicionales que se pueden crear y asignar al PF y que se usan para las colas de recepción de máquinas virtuales es (MaxNumVPortsMaxNumVFs).

Para más información sobre VMQ, consulte Cola de máquinas virtuales (VMQ).