Compartilhar via


Anunciar recursos de VMMQ

Os drivers de miniporta registram a capacidade VMMQ (várias filas de máquina virtual) de uma NIC durante a inicialização do adaptador de miniporta.

Nota

Se a NIC der suporte ao VMMQ, o VPort padrão e pelo menos um VPort não padrão deverão dar suporte ao VMMQ.

Durante a inicialização, o driver de miniporta deve analisar a palavra-chave INF *RssOnHostVPorts para determinar se deve habilitar o recurso VMMQ na NIC. Para obter mais informações sobre como lidar com palavras-chave RSS para VMMQ, consulte Palavras-chave INF padronizadas para VMMQ.

Além disso, a pilha só poderá ativar o VMMQ na NIC se o adaptador de miniporta aceitar a criação de um switch NIC. O NDIS pode criar um switch NIC no adaptador de miniporta quando a palavra-chave INF *SriovPreferred é definida como one ou *SriovPreferred é definido como zero e *RssOrVmqPreference é definido como one. Para obter mais informações, consulte Palavras-chave INF padronizadas para SR-IOV e Palavras-chave INF padronizadas para VMQ.

Quando o driver de miniporto configura os parâmetros para o switch NIC, ele precisa definir os campos da estrutura NDIS_NIC_SWITCH_PARAMETERS da seguinte maneira:

  1. Defina o membro Revision de Header como NDIS_NIC_SWITCH_PARAMETERS_REVISION_2.

  2. Defina NumQueuePairsForDefaultVPort para o número de pares de fila atribuídos a um VPort padrão.

Os drivers de miniporta anunciam a capacidade VMMQ da NIC por meio da estrutura NDIS_NIC_SWITCH_CAPABILITIES. O driver de miniporta deve inicializar NDIS_NIC_SWITCH_CAPABILITIES da seguinte forma:

  1. Defina o membro Revision de Header como NDIS_NIC_SWITCH_CAPABILITIES_REVISION_3.

  2. Defina os marcadores NicSwitchCapabilities da seguinte maneira:

    • Defina NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL como e para indicar que VPorts com configurações não padrão podem ser criados no PF. Esse sinalizador deve ser ativado.

    • Defina NDIS_NIC_SWITCH_CAPS_ASYMMETRIC_QUEUE_PAIRS_FOR_NONDEFAULT_VPORT_SUPPORTED para indicar que o NDIS pode alocar um número arbitrário de filas VMMQ em cada VPort. Caso contrário, todas as VPorts não padrão terão o mesmo número máximo de filas VMMQ que o campo maxNumQueuePairsPerNonDefaultVPort define.

    • Defina NDIS_NIC_SWITCH_CAPS_RSS_ON_PF_VPORTS_SUPPORTED como one para indicar que a NIC aceita VMMQ para PF VPorts.

    Nota

    Se qualquer um dos quatro sinalizadores PF VPort a seguir não estiver definido, os drivers de nível superior usarão os valores especificados quando os parâmetros RSS das PF VPorts forem definidos (incluindo a VPort padrão). Para obter mais informações, consulte Habilitar, desabilitar e atualizar o VMMQ em um VPort.

    • Defina NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SUPPORTED como one para indicar que a NIC é capaz de manter tabelas de indireção por PF VPort. Este sinalizador deve ser definido.

    Nota

    Os três sinalizadores a seguir NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_FUNCTION_SUPPORTED, NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_TYPE_SUPPORTED e NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_KEY_SUPPORTED devem ser definidos como zero ou todos devem ser definidos como one. Se todos eles estiverem definidos como zero, o software calculará novamente o hash.

    • Defina NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_FUNCTION_SUPPORTED como one se a NIC permitir a configuração de uma função hash diferente por PF VPort.

    • Defina NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_TYPE_SUPPORTED como one se a NIC permitir a configuração de um tipo hash diferente por PF VPort.

    • Defina NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_KEY_SUPPORTED como one se a NIC permitir a configuração de uma chave secreta hash diferente por PF VPort.

    • Defina NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SIZE_RESTRICTED como one se a NIC tiver uma limitação para o tamanho da tabela de indireção para PF VPorts. Esse sinalizador força o emissor de um RSS OID a usar um tamanho de tabela de indireção por PF VPort igual ao número de filas de VPort arredondado para a próxima potência de dois. Esse sinalizador pode ser combinado com o sinalizador NDIS_NIC_SWITCH_CAPS_ASYMMETRIC_QUEUE_PAIRS_FOR_NONDEFAULT_VPORT_SUPPORTED (PF VPorts diferentes podem ter números diferentes de filas). Esse sinalizador impede que os usuários de VMMQ executem o direcionamento de fila refinado.

  3. Defina MaxNumVPorts para especificar o número máximo de VPorts.

  4. Defina MaxNumQueuePairs para especificar o número máximo de pares de fila que podem ser atribuídos a todos os VPorts. Isso inclui o VPort padrão anexado ao PF. Esse número deve refletir os recursos reais de hardware.

  5. Defina MaxNumQueuePairsPerNonDefaultVPort para especificar o número máximo de pares de fila que podem ser atribuídos a um VPort não padrão.

  6. Defina MaxNumRssCapableNonDefaultPFVPorts para especificar o número máximo de PF VPorts não padrão que podem permitir o VMMQ.

  7. Defina NumberOfIndirectionTableEntriesForDefaultVPort para especificar o número de entradas de tabela de indireção para a VPort padrão.

  8. Defina NumberOfIndirectionTableEntriesPerNonDefaultPFVPort para especificar o número de entradas de tabela de indireção para cada PF VPort não padrão. O tamanho da tabela de indireção deve ser idêntico para todas as PF VPorts que não são padrão.

  9. Defina MaxNumQueuePairsForDefaultVPort para especificar o número máximo de pares de filas que podem ser atribuídos a uma VPort padrão durante a criação do switch NIC.

Depois que as capacidades de VMMQ são anunciadas, o NDIS é responsável por lidar com o OID OID_GEN_RECEIVE_SCALE_CAPABILITIES quando é chamado na VPort padrão ou em uma VPort não padrão. Quando o driver de miniporta retorna as capacidades do RSS na estrutura NDIS_RECEIVE_SCALE_CAPABILITIES, ele não deve restringir os campos NumberOfInterruptMessages por nenhuma das palavras-chave RSS padrão (como *MaxRssProcessors). O driver de nível superior incorporará esse número ao algoritmo de alocação de CPU do host.