Compartilhar via


Habilitar, desabilitar e atualizar o VMMQ em um VPort

Depois de criar um VPort, um driver de camada superior pode habilitar, desabilitar ou atualizar os parâmetros RSS do VPort.

O driver pode atualizar a tabela de indireção RSS do VPort para alterar as filas numéricas de um VPort. No entanto, o tipo de hash RSS, a função de hash e a chave secreta de hash de um VPort são considerados parâmetros estáticos e não são alterados pelos drivers excessivamente durante o tempo de vida de um VPort. Se um driver de camada superior quiser alterar qualquer um dos parâmetros estáticos do RSS, ele deverá excluir e recriar o VPort.

O driver de camada superior habilita, desabilita ou altera os parâmetros RSS de um VPort emitindo uma solicitação OID OID_GEN_RECEIVE_SCALE_PARAMETERS . O driver de camada superior define o campo VPortId na estrutura NDIS_OID_REQUEST como a ID do VPort de destino da nova configuração.

O driver de camada superior também define a estrutura de NDIS_RECEIVE_SCALE_PARAMETERS usada na solicitação OID da seguinte maneira. Observe que, com base nos recursos do VMMQ anunciados pelo adaptador de miniporto subjacente, alguns dos campos podem ser definidos com o mesmo valor para todas as VPorts do PF.

  • Defina o membro Revision de Header como NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_3.

  • Defina o sinalizador NDIS_RSS_PARAM_FLAG_DEFAULT_PROCESSOR_UNCHANGED para especificar que o membro DefaultProcessorNumber não foi alterado.

  • Defina BaseCpuNumber como zero.

  • Defina DefaultProcessorNumber para especificar o processador RSS padrão para este VPort. O miniporto pode assumir que o processador padrão faz parte da lista de processadores RSS, mas não pode assumir que o processador RSS padrão está na tabela de indireção atual.

  • Defina HashInformation para indicar o tipo de hash e a função de hash que a NIC deve usar para calcular o valor de hash dos pacotes recebidos para este VPort. O driver de camada superior pode definir esse campo como um valor diferente para cada VPort.

  • Defina IndirectionTableSize para especificar o tamanho da tabela de indireção em bytes. Defina esse campo com o mesmo valor para todas as VPorts do PF. O driver de camada superior deve garantir que o número de entradas na tabela de indireção seja uma potência de dois.

  • Defina IndirectionTableOffset para especificar o deslocamento da tabela de indireção desde o início da estrutura NDIS_RECEIVE_SCALE_PARAMETERS .

  • Defina HashSecretKeySize para especificar o tamanho da chave secreta de hash em bytes. O driver de camada superior pode definir uma chave secreta diferente para cada VPort se o adaptador de miniporto der suporte a isso. Para obter mais informações, consulte Anunciando recursos do VMMQ.

  • Defina HashSecretKeyOffset para especificar o deslocamento da chave secreta de hash desde o início da estrutura NDIS_RECEIVE_SCALE_PARAMETERS . O driver de camada superior pode definir uma chave secreta diferente para cada VPort se o adaptador de miniporto der suporte a isso. Para obter mais informações, consulte Anunciando recursos do VMMQ.

  • Defina ProcessorMaskOffset, NumberOfProcessorMasks e ProcessorMasksEntrySize adequadamente.

Quando um driver de miniporto recebe uma solicitação OID para desabilitar o VMMQ para um VPort, ele deve reverter para indicar todos os pacotes recebidos para esse VPort no processador especificado pelo campo ProcessorAffinity na estrutura NDIS_NIC_SWITCH_VPORT_PARAMETERS que foi usada na solicitação OID OID_NIC_SWITCH_CREATE_VPORT.

Alterando o número de filas para um VPort

O número de processadores exclusivos usados na tabela de indireção de um VPort não pode exceder o valor do campo NumQueuePairs da estrutura NDIS_NIC_SWITCH_VPORT_PARAMETERS especificada na última solicitação OID OID_NIC_SWITCH_CREATE_VPORT emitida. Esses processadores serão um subconjunto do conjunto de processadores RSS retornado por uma chamada para NdisGetRssProcessorInformation. Para obter mais informações, consulte Alocando VPorts para VMMQ. No entanto, as tabelas de indireção em VPorts diferentes podem conter o mesmo processador.

Para diminuir o número de filas para um VPort PF, um driver de camada superior deve:

  1. Envie um OID_GEN_RECEIVE_SCALE_PARAMETERS OID com o tamanho da tabela de indireção original. No entanto, a tabela de indireção nesta etapa só pode referenciar o número de processadores distintos até o novo número de filas. Se a nova tabela de indireção precisar ser menor do que a tabela original devido ao sinalizador NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SIZE_RESTRICTED da estrutura NDIS_NIC_SWITCH_PARAMETERS , o emissor deverá garantir que a tabela de indireção nesta etapa conterá a nova tabela de indireção replicada quantas vezes forem necessárias para atender ao requisito de sinalizador RESTRITO para o número original de filas.

  2. Envie um OID_NIC_SWITCH_VPORT_PARAMETERS OID com um novo número de filas.

  3. Envie um OID_GEN_RECEIVE_SCALE_PARAMETERS com o novo tamanho da tabela de indireção se ele tiver sido alterado.

Para aumentar o número de filas para um VPort PF, um driver de camada superior deve:

  1. O driver não precisa atualizar a tabela de indireção atual antes da etapa 2 porque a tabela faz referência apenas ao número de processadores distintos até o número atual de filas.

  2. Envie um OID_NIC_SWITCH_VPORT_PARAMETERS OID com um novo número de filas. Se o sinalizador RESTRICTED estiver definido, o driver de miniporto deverá replicar internamente a tabela de indireção original quantas vezes forem necessárias para corresponder ao requisito de tamanho da tabela de indireção para o novo número de filas.

  3. Envie um OID_GEN_RECEIVE_SCALE_PARAMETERS OID com o novo tamanho da tabela de indireção se ele tiver sido alterado.