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:
Defina o membro Revisão do Cabeçalhocomo NDIS_NIC_SWITCH_PARAMETERS_REVISION_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:
Defina o membro Revisão do Cabeçalhocomo NDIS_NIC_SWITCH_CAPABILITIES_REVISION_3.
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.
Defina MaxNumVPorts para especificar o número máximo de VPorts.
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.
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.
Defina MaxNumRssCapableNonDefaultPFVPorts para especificar o número máximo de VPorts PF não padrão que podem dar suporte ao VMMQ.
Defina NumberOfIndirectionTableEntriesForDefaultVPort para especificar o número de entradas de tabela de indireção para o VPort padrão.
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.
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.