Condividi tramite


Funzioni virtuali SR-IOV

Una funzione virtuale PCI Express (PCIe) è una funzione PCIe leggera in una scheda di rete che supporta la virtualizzazione I/O radice singola (SR-IOV).

La funzione fisica PCIe (PF) è associata alla scheda di rete e rappresenta un'istanza virtualizzata della scheda di rete. Ogni VF ha un proprio spazio di configurazione PCI. Ogni VF condivide anche una o più risorse fisiche nella scheda di rete, ad esempio una porta di rete esterna, con pf e altre macchine virtuali.

Un VF non è un dispositivo PCIe completo. Fornisce tuttavia un meccanismo di base per il trasferimento diretto dei dati tra una partizione figlio Hyper-V e la scheda di rete SR-IOV sottostante. Le risorse software associate per il trasferimento dei dati sono direttamente disponibili per la funzione VF e sono isolate dall'uso da parte di altre VFS o PF. Tuttavia, la configurazione della maggior parte di queste risorse viene eseguita dal driver miniport PF eseguito nel sistema operativo di gestione della partizione padre Hyper-V.

Un VF viene esposto come scheda di rete virtuale (scheda di rete VF) nel sistema operativo guest eseguito in una partizione figlio Hyper-V. Dopo che la funzione VF è associata a una porta virtuale (VPort) nel commutatore di interfaccia di rete della scheda di rete SR-IOV, il driver PCI virtuale (VPCI) in esecuzione nella macchina virtuale espone la scheda di rete VF. Una volta esposto, il gestore PnP nel sistema operativo guest carica il driver miniport VF.

Nota

Una partizione figlio Hyper-V è nota anche come macchina virtuale.

Il driver miniport VF è un driver miniport NDIS installato nella macchina virtuale per gestire il VF. Qualsiasi operazione eseguita dal driver miniport VF non deve influire su nessun altro VF o pf nella stessa scheda di rete.

Il driver miniport VF può funzionare come qualsiasi driver di dispositivo PCI. Può leggere e scrivere nello spazio di configurazione PCI di VF. Tuttavia, l'accesso al dispositivo PCI virtuale è un'operazione con privilegi e viene gestito dal driver miniport PF nel modo seguente:

  • Quando il driver miniport VF chiama NdisMGetBusData per leggere i dati dallo spazio di configurazione PCI della scheda di rete VF, lo stack di virtualizzazione riceve una notifica. Questo stack viene eseguito nel sistema operativo di gestione della partizione padre Hyper-V. Quando lo stack riceve una notifica della richiesta di lettura, invia una richiesta di metodo OID (Object Identifier) di OID_SRIOV_READ_VF_CONFIG_SPACE al driver miniport PF. I dati da leggere sono specificati in una struttura NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS contenuta nella richiesta OID.

    Il driver legge i dati richiesti dallo spazio di configurazione PCI VF e restituisce i dati completando la richiesta OID. Questi dati vengono quindi restituiti al driver miniport VF al termine della chiamata a NdisMGetBusData .

  • Quando il driver miniport VF chiama NdisMSetBusData per scrivere dati nello spazio di configurazione PCI della scheda di rete VF, lo stack di virtualizzazione riceve una notifica della richiesta di scrittura. Invia una richiesta di metodo OID di OID_SRIOV_WRITE_VF_CONFIG_SPACE al driver miniport PF. I dati da scrivere sono specificati in una struttura NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS contenuta nella richiesta OID.

    Il driver scrive i dati nello spazio di configurazione PCI VF e restituisce lo stato della richiesta al termine della richiesta OID. Questo stato viene restituito al driver miniport VF dopo il completamento della chiamata a NdisMSetBusData .

Il driver miniport VF può anche comunicare con il driver miniport PF. Questo percorso di comunicazione si trova su un'interfaccia backchannel. Per altre informazioni, vedere SR-IOV PF/VF Backchannel Communication.For more information, see SR-IOV PF/VF Backchannel Communication.

Nota Il driver miniport VF deve essere consapevole che è in esecuzione in un ambiente virtualizzato in modo che possa comunicare con il driver miniport PF per determinate operazioni. Per altre informazioni su come funziona il driver, vedere Inizializzazione di un driver miniport VF.