Sequenza di inizializzazione della funzione virtuale

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

  • Una funzione fisica PCI Express (PCIe) (PF). Il pf esiste sempre nella scheda di rete e viene collegato alla partizione padre Hyper-V.

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

  • Una o più funzioni virtuali PCIe (VF). Ogni VF deve essere inizializzato e collegato a una partizione figlio Hyper-V 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 Funzioni virtuali SR-IOV (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 Miniport MiniportInitializeEx del driver PF, NDIS e lo stack di virtualizzazione possono inviare richieste di identificatore oggetto (OID) al driver miniport PF per eseguire le operazioni seguenti:

  • Creare un commutatore di interfaccia di rete nella scheda di rete. Il commutatore di interfaccia di rete collega il traffico di rete tra le VFS, PF e la porta di rete fisica.

    Per altre informazioni, vedere Commutatori della scheda di interfaccia di rete.

    Nota A partire da Windows Server 2012, l'interfaccia SR-IOV supporta un solo commutatore della scheda di rete nella scheda di rete. Questo commutatore è noto come commutatore di interfaccia di interfaccia di rete predefinito e viene fatto 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 Funzioni virtuali SR-IOV (VFs).

  • Creare una porta virtuale (VPort) nel commutatore della scheda di interfaccia di rete e collegarla alla scheda di interfaccia di rete VF.

    Per altre informazioni, vedere Porte virtuali (VPorts).

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

sequenza di inizializzazione di esempio che mostra le chiamate dallo stack di virtualizzazione ai ndi e quindi al driver pf miniport.

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

  1. NDIS legge la configurazione del commutatore predefinita dal Registro di sistema e genera 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 risorse hardware importanti, ad esempio VFs e VPort. Include anche informazioni su come distribuire le risorse tra le VPort non predefinite e il VPort predefinito collegato al pf.

    Dopo aver completato correttamente l'OID dal driver miniport PF, l'opzione di interfaccia di interfaccia di rete è pronta per creare VPort e allocare le VFs su di esso.

    Per altre informazioni su come creare un commutatore di interfaccia di interfaccia di rete, vedere Creazione di un commutatore di interfaccia di interfaccia di rete.

  2. Un VF viene considerato come meccanismo di offload per la scheda di rete della macchina virtuale. Questa scheda viene esposta nel sistema operativo guest che viene eseguito nella partizione figlio Hyper-V. Per impostazione predefinita, i componenti di rete nel sistema operativo guest inviano e ricevono pacchetti sul percorso di dati sintetici basati su software. Tuttavia, se una partizione figlio è abilitata per l'offload VF, lo stack di virtualizzazione genera richieste OID al driver miniport PF per l'allocazione delle risorse e l'inizializzazione di un VF. Dopo aver collegato la VF alla partizione figlio e una VPort nel commutatore di interfaccia di interfaccia di rete, i componenti di rete inviano e ricevono pacchetti sul percorso dati VF. Per altre informazioni su questi percorsi di dati, vedere Percorsi dati SR-IOV.

    Se è stata abilitata una partizione figlio Hyper-V per l'offload VF, lo stack di virtualizzazione genera una richiesta di metodo OID di OID_NIC_SWITCH_ALLOCATE_VF al driver miniport PF. I parametri passati in questa richiesta OID includono l'identificatore dell'opzione di interfaccia di rete in cui viene allocato il VF. Altri parametri includono identificatori per la partizione figlio 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 l'identificatore del richiedente PCIe (RID) per il VF chiamando NdisMGetVirtualFunctionLocation. Rid viene usato per la ripetizione del mapping di DMA e di interruzione quando le richieste e gli interruzioni DMA vengono generati dalla funzione VF.

    Il rid insieme all'identificatore VF viene restituito dal driver miniport PF quando completa correttamente la richiesta di OID_NIC_SWITCH_ALLOCATE_VF .

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

  3. Lo stack di virtualizzazione crea un VPort sul commutatore della scheda di interfaccia di rete emettendo 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 di interfaccia di interfaccia di rete in cui verrà creato il VPort. Altri parametri includono l'identificatore del VF a cui verrà collegato il VPort.

    Nota Il VPort predefinito sul commutatore di interfaccia di interfaccia di rete esiste sempre ed è collegato al pf. È possibile creare e collegare solo un singolo VPort non definito a un VF.

    Prima che NDIS inoltra la richiesta OID al driver miniport PF, alloca un identificatore VPort valido univoco sulla 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 figlio Hyper-V può essere avviata a lungo prima che venga allocata una VF e VPort. Durante questo periodo, i componenti di rete nel sistema operativo guest inviano e ricevono pacchetti sul percorso dei dati sintetici. Ciò comporta il traffico dei pacchetti sul VPort predefinito collegato al pf. Per collegare il traffico alla partizione figlio, lo stack di virtualizzazione configura il VPort predefinito con il controllo di accesso multimediale (MAC) e i filtri VLAN (Virtual LAN) per la scheda di rete vm della partizione figlio.

    Dopo l'allocazione delle risorse per VF e VPort, lo stack di virtualizzazione genera una richiesta di metodo OID di 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 devono essere inoltrati al VPort VF nel percorso dati VF.

    Nota I filtri di ricezione esistenti possono essere spostati dal VPort predefinito al VPort VF usando OID_RECEIVE_FILTER_MOVE_FILTER. Inoltre, i nuovi filtri possono essere impostati sul VPort VF usando OID_RECEIVE_FILTER_SET_FILTER.

Dopo aver creato correttamente VF e VPort e i filtri MAC sono stati impostati sul VPort, lo stack di virtualizzazione notifica al provider di servizi virtuali (VPCI) virtual PCI (VSP). Questo provider di servizi virtuali viene eseguito nel sistema operativo di gestione della partizione padre Hyper-V. La notifica informa il VSP VPCI che è stato allocato e collegato correttamente a una partizione figlio. Il VSP VPCI invia messaggi sul bus di macchina virtuale (VMBus) al client del servizio virtuale VPCI (VSC) eseguito nel sistema operativo guest della partizione figlio. VPCI VSC è un driver del bus che espone un dispositivo PCI per la scheda di rete VF.

Dopo l'esposizione della scheda di rete VF, il sottosistema PnP in esecuzione nel sistema operativo guest rileva l'adattatore e carica il driver miniport VF. Questo driver registra con NDIS. Dopo l'inizializzazione del driver miniport VF e i filtri di pacchetti appropriati vengono configurati nella scheda di rete VF, il percorso dati VF è completamente operativo. Di conseguenza, il traffico dei pacchetti nel sistema operativo guest passa a questo percorso di dati dal percorso dei dati sintetici.