Condividi tramite


Abilitazione, disabilitazione e aggiornamento di VMMQ in un VPort

Dopo aver creato un VPort, un driver di livello superiore può abilitare, disabilitare o aggiornare i parametri RSS del VPort.

Il driver può aggiornare la tabella di riferimento indiretto RSS del VPort per modificare le code di numeri per un VPort. Tuttavia, il tipo hash RSS, la funzione hash e la chiave privata hash di un VPort sono considerati parametri statici e non vengono modificati dai driver overlying durante la durata di un VPort. Se un driver di livello superiore desidera modificare uno dei parametri statici RSS, deve eliminare e ricreare il VPort.

Il driver di livello superiore abilita, disabilita o modifica i parametri RSS di un VPort inviando una richiesta OID OID_GEN_RECEIVE_SCALE_PARAMETERS . Il driver di livello superiore imposta il campo VPortId nella struttura NDIS_OID_REQUEST sull'ID del VPort di destinazione della nuova configurazione.

Il driver di livello superiore imposta anche la struttura NDIS_RECEIVE_SCALE_PARAMETERS utilizzata nella richiesta OID come indicato di seguito. Si noti che, in base alle funzionalità VMMQ annunciate dall'adattatore miniport sottostante, alcuni campi possono essere impostati sullo stesso valore per tutti i VPort PF.

  • Impostare il membro Revision di Headersu NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_3.

  • Impostare il flag NDIS_RSS_PARAM_FLAG_DEFAULT_PROCESSOR_UNCHANGED per specificare che il membro DefaultProcessorNumber non è stato modificato.

  • Impostare BaseCpuNumber su zero.

  • Impostare DefaultProcessorNumber per specificare il processore RSS predefinito per questo VPort. Il miniport può presupporre che il processore predefinito faccia parte dell'elenco di processori RSS, ma non può presupporre che il processore RSS predefinito si trova nella tabella di riferimento indiretto corrente.

  • Impostare HashInformation per indicare il tipo hash e la funzione hash che la scheda di interfaccia di rete deve usare per calcolare il valore hash dei pacchetti ricevuti per questo VPort. Il driver di livello superiore può impostare questo campo su un valore diverso per ogni VPort.

  • Impostare IndirectionTableSize per specificare le dimensioni della tabella di riferimento indiretto in byte. Impostare questo campo sullo stesso valore per tutte le VPort PF. Il driver di livello superiore deve garantire che il numero di voci nella tabella di riferimento indiretto sia una potenza di due.

  • Impostare IndirectionTableOffset per specificare l'offset della tabella di riferimento indiretto dall'inizio della struttura NDIS_RECEIVE_SCALE_PARAMETERS .

  • Impostare HashSecretKeySize per specificare le dimensioni della chiave privata hash in byte. Il driver di livello superiore può impostare una chiave privata diversa per ogni VPort se l'adattatore miniport supporta questo. Per altre informazioni, vedere Advertising VMMQ capabilities .For more information, see Advertising VMMQ capabilities.

  • Impostare HashSecretKeyOffset per specificare l'offset della chiave privata hash dall'inizio della struttura NDIS_RECEIVE_SCALE_PARAMETERS . Il driver di livello superiore può impostare una chiave privata diversa per ogni VPort se l'adattatore miniport supporta questo. Per altre informazioni, vedere Advertising VMMQ capabilities .For more information, see Advertising VMMQ capabilities.

  • Impostare ProcessorMaskOffset, NumberOfProcessorMasks e ProcessorMasksEntrySize in modo appropriato.

Quando un driver miniport riceve una richiesta OID per disabilitare VMMQ per un VPort, deve ripristinare l'indicazione di tutti i pacchetti ricevuti per tale VPort nel processore specificato dal campo ProcessorAffinity nella struttura NDIS_NIC_SWITCH_VPORT_PARAMETERS utilizzata nella richiesta OID OID_NIC_SWITCH_CREATE_VPORT .

Modifica del numero di code per un VPort

Il numero di processori univoci utilizzati nella tabella di riferimento indiretto di un VPort non può superare il valore del campo NumQueuePairs della struttura NDIS_NIC_SWITCH_VPORT_PARAMETERS specificata nell'ultima richiesta OID rilasciata OID_NIC_SWITCH_CREATE_VPORT . Questi processori saranno un subset del set di processori RSS restituito da una chiamata a NdisGetRssProcessorInformation. Per altre informazioni, vedere Allocazione di VPort per VMMQ. Tuttavia, le tabelle di riferimento indiretto in VPort diversi possono contenere lo stesso processore.

Per ridurre il numero di code per un VPort PF, è necessario che un driver di livello superiore:

  1. Inviare un OID OID_GEN_RECEIVE_SCALE_PARAMETERS con le dimensioni originali della tabella di riferimento indiretto. Tuttavia, la tabella di riferimento indiretto in questo passaggio può fare riferimento solo al numero di processori distinti fino al nuovo numero di code. Se la nuova tabella di riferimento indiretto deve essere inferiore alla tabella originale a causa del flag NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SIZE_RESTRICTED della struttura NDIS_NIC_SWITCH_PARAMETERS , l'autorità emittente deve garantire che la tabella di riferimento indiretto in questo passaggio conterrà la nuova tabella di riferimento indiretto replicata quante volte necessario per soddisfare il requisito del flag RESTRICTED per il numero originale di code.

  2. Inviare un OID OID_NIC_SWITCH_VPORT_PARAMETERS con un nuovo numero di code.

  3. Inviare un OID_GEN_RECEIVE_SCALE_PARAMETERS con la nuova dimensione della tabella di riferimento indiretto, se è stata modificata.

Per aumentare il numero di code per un VPort PF, è necessario che un driver di livello superiore:

  1. Il driver non deve aggiornare la tabella di riferimento indiretto corrente prima del passaggio 2 perché la tabella fa riferimento solo al numero di processori distinti fino al numero corrente di code.

  2. Inviare un OID OID_NIC_SWITCH_VPORT_PARAMETERS con un nuovo numero di code. Se il flag RESTRICTED è impostato, il driver miniport deve replicare internamente la tabella di riferimento indiretto originale il numero di volte necessario per soddisfare il requisito delle dimensioni della tabella di riferimento indiretto per il nuovo numero di code.

  3. Inviare un OID OID_GEN_RECEIVE_SCALE_PARAMETERS con nuove dimensioni della tabella di riferimento indiretto, se è stato modificato.