Condividi tramite


Sequenza di inizializzazione della funzione virtuale

Una scheda di rete che supporta la virtualizzazione di I/O radice singola (SR-IOV) deve essere in grado di supportare i componenti hardware seguenti:

  • Una Funzione Fisica PCI Express (PCIe). Il PF esiste sempre nella scheda di rete ed è associato alla partizione padre Hyper-V.

    Per altre informazioni su questo componente hardware, vedere SR-IOV Funzione fisica (PF).

  • Una o più funzioni virtuali PCIe (VF). Ogni VF deve essere inizializzato e collegato a una Hyper-V partizione figlio prima che i componenti di rete del sistema operativo guest possano inviare o ricevere pacchetti tramite VF.

    Per altre informazioni su questo componente hardware, vedere SR-IOV funzioni virtuali (VFS).

Il driver miniport PF, che viene eseguito nel sistema operativo di gestione della partizione padre Hyper-V, inizializza e alloca le risorse per un VF nella scheda di rete SR-IOV. Dopo che NDIS chiama la funzione MiniportInitializeEx del driver miniport PF , NDIS e lo stack di virtualizzazione possono inviare richieste OID (Object Identifier) al driver miniport PF per eseguire le operazioni seguenti:

  • Creare un commutatore NIC sulla scheda di rete. Il switch NIC instrada il traffico di rete tra i VF, il PF e la porta di rete fisica.

    Per altre informazioni, vedere commutatori di scheda di interfaccia di rete.

    Nota A partire da Windows Server 2012, l'interfaccia SR-IOV supporta un solo commutatore NIC sulla scheda di rete. Questa opzione è nota come opzione di interfaccia di rete predefinita e fa riferimento all'identificatore NDIS_DEFAULT_SWITCH_ID.

  • Richiedere al driver miniport PF di inizializzare e allocare risorse per un VF nella scheda di rete.

    Per altre informazioni, vedere SR-IOV funzioni virtuali (VFS).

  • Creare una porta virtuale (VPort) sul commutatore NIC e collegarla alla funzione VF.

    Per altre informazioni, vedere porte virtuali (VPort).

Il diagramma seguente illustra i passaggi coinvolti nell'inizializzazione VF.

sequenza di inizializzazione vf di esempio che mostra le chiamate dallo stack di virtualizzazione al Ndis e quindi al driver Pf Miniport.

NDIS, lo stack di virtualizzazione e il driver miniport PF seguono questi passaggi durante la sequenza di inizializzazione VF:

  1. NDIS legge la configurazione del commutatore predefinita dal Registro di sistema e rilascia una richiesta di metodo OID di OID_NIC_SWITCH_CREATE_SWITCH per effettuare il provisioning del commutatore nella scheda di rete. I parametri passati in questa richiesta OID includono informazioni su come configurare importanti risorse hardware, ad esempio VFs e VPort. Include anche informazioni su come distribuire le risorse tra le VPort non predefinite e il VPort predefinito collegato al file PF.

    Dopo che l'OID è stato completato correttamente dal driver miniport PF, lo switch NIC è pronto per essere usato per creare VPort e allocare le VF.

    Per ulteriori informazioni su come creare un commutatore NIC, vedere Creazione di un commutatore NIC.

  2. Un VF viene considerato come un meccanismo di offload per la scheda di rete della macchina virtuale.AVF is treated as an offload mechanism for the virtual machine (VM) network adapter. Questa scheda viene esposta nel sistema operativo guest che viene eseguito nella partizione Hyper-V secondaria. Per impostazione predefinita, i componenti di rete nel sistema operativo guest inviano e ricevono pacchetti tramite il percorso di dati sintetici basato su software. Tuttavia, se una partizione figlio è abilitata per l'offload VF, lo stack di virtualizzazione invia richieste OID al driver miniport PF per l'allocazione delle risorse e l'inizializzazione di un VF. Dopo che il VF è collegato alla partizione figlio e a un VPort sul commutatore NIC, i componenti di rete inviano e ricevono pacchetti tramite il percorso dati VF. Per altre informazioni su questi percorsi di dati, vedere SR-IOV Percorsi dati.

    Se una partizione secondaria Hyper-V è stata abilitata per il VF offload, lo stack di virtualizzazione invia una richiesta di metodo OID OID_NIC_SWITCH_ALLOCATE_VF al driver miniport PF. I parametri passati in questa richiesta OID includono l'identificatore dell'interruttore NIC dove il VF è allocato. Altri parametri includono gli identificatori per la partizione figlia a cui verrà collegato il VF.

    Il driver miniport PF alloca le risorse hardware e software necessarie per la VF. Il driver miniport PF determina anche, chiamando NdisMGetVirtualFunctionLocation, l'identificatore del richiedente PCIe (RID) per il VF. Il RID viene utilizzato per la rimappatura di DMA e interrupt quando le richieste DMA e gli interrupt vengono generati dalla funzione VF.

    Il RID e l'identificatore VF sono restituiti dal driver miniport PF quando completa con successo la richiesta di OID_NIC_SWITCH_ALLOCATE_VF.

    Per altre informazioni sull'allocazione delle risorse per un VF, vedere Allocazione di risorse per una funzione virtuale.

  3. Lo stack di virtualizzazione crea un VPort sul commutatore NIC inviando una richiesta di metodo OID di OID_NIC_SWITCH_CREATE_VPORT al driver miniport PF. I parametri passati in questa richiesta OID includono l'identificatore dell'opzione NIC in cui deve essere creato il VPort. Altri parametri includono l'identificatore del VF a cui verrà collegato il VPort.

    Nota Il VPort predefinito sullo switch della NIC esiste sempre ed è collegato al PF. È possibile creare e collegare un solo VPort non predefinito a un VF.

    Prima che NDIS inoltri la richiesta OID al driver miniport PF, alloca un identificatore VPort valido univoco rispetto alla scheda di rete.

    Quando il driver miniport PF gestisce la richiesta OID, alloca le risorse hardware necessarie per il VPort e mantiene l'identificatore per il VPort. Questo identificatore viene usato nelle richieste OID successive e nelle chiamate di funzione SR-IOV.

    Per altre informazioni su come creare un VPort, vedere Creazione di una porta virtuale.

  4. La partizione secondaria Hyper-V può essere avviata molto prima che vengano allocate una VF e una VPort. Durante questo periodo, i componenti di rete nel sistema operativo guest inviano e ricevono pacchetti tramite il percorso dei dati sintetici. Questo comporta il traffico di pacchetti sul VPort predefinito collegato al PF. Per collegare il traffico alla partizione figlio, lo stack di virtualizzazione configura il VPort predefinito con i filtri MAC (Media Access Control) e VLAN (Virtual LAN) per la scheda di rete VM della partizione figlio.

    Dopo che le risorse per VF e VPort sono state allocate, lo stack di virtualizzazione invia una richiesta di metodo OID OID_RECEIVE_FILTER_MOVE_FILTER al driver miniport PF. Questa richiesta OID sposta i filtri MAC e VLAN per la scheda di rete della macchina virtuale dal VPort predefinito al VPort collegato al VF. In questo modo, i pacchetti che corrispondono a questi filtri verranno inoltrati al VPort VF tramite il percorso dati VF.

    Nota I filtri di ricezione esistenti possono essere spostati dal VPort predefinito al VPort VF usando OID_RECEIVE_FILTER_MOVE_FILTER. Anche è possibile impostare nuovi filtri nel VF VPort usando OID_RECEIVE_FILTER_SET_FILTER.

Dopo aver creato correttamente il VF e il VPort e aver impostato i filtri MAC sul VPort, lo stack di virtualizzazione notifica il provider di servizi virtuali (VSP) relativo alla Virtual PCI (VPCI). Questo VSP viene eseguito nel sistema operativo di amministrazione della partizione principale Hyper-V. La notifica informa il VSP VPCI che il VF è stato allocato e collegato correttamente a una partizione figlia. Il VSP VPCI invia messaggi tramite il bus di macchine virtuali (VMBus) al client del servizio virtuale VPCI (VSC) in esecuzione nel sistema operativo guest della partizione figlio. VPCI VSC è un driver bus che espone un dispositivo PCI per l'adattatore di rete VF.

Dopo aver esposto la scheda di rete VF, il sottosistema PnP eseguito nel sistema operativo guest rileva la scheda e carica il driver miniport VF. Questo driver viene registrato con NDIS. Dopo che il driver miniport VF è stato inizializzato e i filtri di pacchetto appropriati sono configurati nella scheda di rete VF, il percorso dati VF è completamente operativo. Di conseguenza, il traffico di pacchetti nel sistema operativo guest è passato a questo percorso di dati dal percorso dei dati sintetici.