Compartilhar via


Recursos de anúncio do VMMQ

Os drivers de miniporta registram a funcionalidade VMMQ (Virtual Machine Multiple Queues) de uma NIC durante a inicialização do adaptador de miniporta.

Observação

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 miniporto deve examinar a palavra-chave INF *RssOnHostVPorts para determinar se ele 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 miniporto der suporte à criação de um comutador NIC. O NDIS pode criar uma opção NIC no adaptador de miniporta quando o palavra-chave INF *SriovPreferred está definido como um ou *SriovPreferred está definido como zero e *RssOrVmqPreference está definido como um. Para obter mais informações, consulte Palavras-chave INF padronizadas para SR-IOV e Palavras-chave INF padronizadas para VMQ.

Quando o driver de miniporta configura os parâmetros para a opção NIC, ele deve definir os campos da estrutura NDIS_NIC_SWITCH_PARAMETERS da seguinte maneira:

  1. Defina o membro Revisão do Cabeçalhocomo NDIS_NIC_SWITCH_PARAMETERS_REVISION_2.

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

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

  1. Defina o membro Revisão do Cabeçalhocomo NDIS_NIC_SWITCH_CAPABILITIES_REVISION_3.

  2. Defina os sinalizadores NicSwitchCapabilities da seguinte maneira:

    • Defina NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL como um para indicar que VPorts não padrão podem ser criados no PF. Esse sinalizador deve ser definido.

    • 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 têm o mesmo número máximo de filas VMMQ definidas pelo campo MaxNumQueuePairsPerNonDefaultVPort .

    • Defina NDIS_NIC_SWITCH_CAPS_RSS_ON_PF_VPORTS_SUPPORTED como um para indicar que a NIC dá suporte ao VMMQ para VPorts PF.

    Observação

    Se qualquer um dos quatro sinalizadores VPort PF a seguir não estiver definido, os drivers de nível mais alto usarão os valores especificados quando os parâmetros RSS dos VPorts PF forem definidos (incluindo o 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 um para indicar que a NIC é capaz de manter tabelas de indireção por VPort PF. Esse sinalizador deve ser definido.

    Observação

    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 um. Se todos estiverem definidos como zero, o software calculará novamente o hash.

    • Defina NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_FUNCTION_SUPPORTED como um se a NIC der suporte à configuração de uma função de hash diferente por VPort PF.

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

    • Defina NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_KEY_SUPPORTED como um se a NIC der suporte à configuração de uma chave secreta de hash diferente por VPort PF.

    • Defina NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SIZE_RESTRICTED como um se a NIC tiver uma limitação no tamanho da tabela de indireção para VPorts PF. Esse sinalizador força o emissor de um OID RSS a usar um tamanho de tabela de indireção VPort por PF igual ao número de filas de VPort arredondadas 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 (VPorts PF diferentes podem ter números diferentes de filas). Esse sinalizador impede que os usuários do VMMQ executem 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 filas que podem ser atribuídos a todas as 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 VPorts PF não padrão que podem dar suporte ao VMMQ.

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

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

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

Depois que os recursos do VMMQ são anunciados, o NDIS é responsável por lidar com o OID do OID_GEN_RECEIVE_SCALE_CAPABILITIES quando é chamado no VPort padrão ou em um VPort não padrão. Quando o driver de miniporto retorna os recursos 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.