Condividi tramite


Porte virtuali non predefinite e VMQ

L'opzione NIC predefinita è un componente di una scheda di rete che supporta l'interfaccia di virtualizzazione I/O radice singola (SR-IOV). L'opzione collega sempre la porta virtuale predefinita (VPort) alla funzione fisica PCI Express (PCIe). Il commutatore può collegare uno o più VPort non predefiniti al pf. Per altre informazioni, vedere Creazione di una porta virtuale.

Lo stack di virtualizzazione viene eseguito nel sistema operativo di gestione della partizione padre Hyper-V. Questo stack crea VPorts emettendo richieste di metodo OID (Object Identifier) di OID_NIC_SWITCH_CREATE_VPORT. Tuttavia, lo stack può creare più VPort rispetto al numero di funzioni virtuali PCIe attive per cui le risorse sono state allocate tramite richieste di metodo OID di OID_NIC_SWITCH_ALLOCATE_VF.

Se SR-IOV è abilitato in una scheda di rete, è necessario disabilitare la funzionalità VMQ completa. Tuttavia, nondefault VPort collegati al pf e non collegati a un VF possono fornire la stessa funzionalità dell'interfaccia VMQ (Virtual Machine Queue). I punti seguenti illustrano come i VPort possono fornire percorsi di dati accelerati hardware per il trasferimento dei pacchetti simile a VMQ:

  • VMQ determina la macchina virtuale di destinazione tramite il filtro MAC (Media Access Control) nell'hardware. Ciò consente di evitare il sovraccarico di una macchina virtuale di destinazione nello stack di virtualizzazione.

    A partire da Windows Server 2012, lo stack di virtualizzazione configura i filtri di ricezione nel VPort emettendo richieste di metodo OID di OID_RECEIVE_FILTER_SET_FILTER. Per questa richiesta OID, lo stack di virtualizzazione passa una struttura NDIS_RECEIVE_FILTER_PARAMETERS che specifica l'identificatore VLAN (MAC address and virtual LAN) associato alla scheda di rete virtuale. Analogamente a VMQ, può configurare più coppie DI INDIRIZZI MAC e ID VLAN nel VPort. Lo stack di virtualizzazione specifica anche il VPort di destinazione a cui verrà impostato il filtro di ricezione.

    La scheda di rete SR-IOV esegue un filtro hardware simile in base ai criteri di filtro specificati tramite la richiesta di OID_RECEIVE_FILTER_SET_FILTER . Quando viene ricevuto un pacchetto nella coda di ricezione hardware di una VPort, il driver miniport specifica l'identificatore VPort di origine nei dati OOB (out-of-band) di una struttura NET_BUFFER_LIST per il pacchetto. In base all'identificatore VPort, lo stack di virtualizzazione determina la macchina virtuale di destinazione e indica i pacchetti nello stack di rete in esecuzione nella macchina virtuale.

    Analogamente, lo stack di virtualizzazione specifica l'identificatore VPort di destinazione nei dati OOB di una struttura NET_BUFFER_LIST per un pacchetto di trasmissione. Quando il driver gestisce la richiesta di invio per il pacchetto, inserisce il pacchetto nella coda di trasmissione hardware della VPort specificata.

    L'identificatore VPort può essere ottenuto dai dati OOB del pacchetto usando la macro NET_BUFFER_LIST_RECEIVE_FILTER_VPORT_ID .

    Per altre informazioni su questo processo, vedere Flusso di pacchetti su una porta virtuale.

    Per altre informazioni sui requisiti di filtro di ricezione per una scheda di rete SR-IOV, vedere Determinazione delle funzionalità di filtro di ricezione.

  • VMQ fornisce l'interruzione e la concorrenza DPC.

    A partire da NDIS 6.30 e Windows Server 2012, è possibile configurare un VPort collegato a PF per avere un'affinità di CPU specifica. Lo stack di virtualizzazione configura i parametri di affinità della CPU e di moderazione di interruzione per un VPort usando richieste di metodo OID di OID_NIC_SWITCH_CREATE_VPORT o OID_NIC_SWITCH_VPORT_PARAMETERS. A tale scopo, lo stack di virtualizzazione configura parametri basati su interruzioni simili a VMQ per l'interruzione e la concorrenza DPC.

    Ad esempio, quando la scheda di rete SR-IOV riceve pacchetti in un VPort configurato per avere un'affinità CPU specifica, la scheda genera gli interruzioni nella CPU specificata. Il driver miniport indica i pacchetti ricevuti in NDIS e lo stack di virtualizzazione per tale CPU.

Il driver miniport PF annuncia le funzionalità SR-IOV nel contesto della chiamata a MiniportInitializeEx. Il driver inizializza una struttura NDIS_SRIOV_CAPABILITIES con le relative funzionalità e chiama NdisMSetMiniportAttributes per registrarne le funzionalità. Per altre informazioni, vedere Determinazione delle funzionalità SR-IOV.

I membri seguenti della struttura NDIS_NIC_SWITCH_CAPABILITIES influiscono sul modo in cui vengono allocati i VPort:

  • MaxNumVPorts, che specifica il numero massimo di VPort che possono essere creati nella scheda di rete.

  • MaxNumVFs, che specifica il numero massimo di VFS che possono essere allocati nella scheda di rete.

A partire da NDIS 6.30, quando il driver miniport inizializza la struttura NDIS_NIC_SWITCH_CAPABILITIES, può impostare il flag di NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL nel membro NicSwitchCapabilities . Questo flag specifica che è possibile creare VPort non predefiniti in modo non necessario dal pool VPort nella scheda di rete. Ciò consente la creazione e l'assegnazione di VPort non predefiniti disponibili in base alle esigenze per il pf e le VFS allocate. Se la scheda di rete supporta l'interfaccia VMQ, le VPort non predefinite assegnate al pf possono essere usate anche per le code di ricezione della macchina virtuale.

Se il flag di NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL è impostato, le VPort disponibili non definite vengono create e assegnate alle VFS e allocate. Il numero massimo di VPort che è possibile creare e assegnare al pf è lo stesso valore che il driver segnala nel membro MaxNumVPorts . Il driver miniport deve riservare un VPort da usare come VPort predefinito assegnato al pf. Di conseguenza, il numero massimo di VPort non predefiniti che possono essere assegnati al pf e usati per le code di ricezione della macchina virtuale è (MaxNumVPorts- 1).

Nota

 Se questo flag è impostato, la creazione e l'assegnazione di VPort nondefault non sono riservate per l'allocazione VF. Di conseguenza, le situazioni possono verificarsi in cui un VF potrebbe non essere assegnato a un VPort se il pool è stato esaurito di VPort disponibili. 

Se il flag di NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL non è impostato, la creazione e l'assegnazione di VPort non definiti è riservata per l'assegnazione VF. Il numero massimo di VPort non predefiniti aggiuntivi che possono essere creati e assegnati al pf e usati per le code di ricezione della macchina virtuale è (MaxNumVPorts-MaxNumVFs).

Per altre informazioni su VMQ, vedere Coda di macchine virtuali (VMQ).