SR-IOV Virtual Functions (VFs)

Eine PCI Express (PCIe) Virtual Function (VF) ist eine einfache PCIe-Funktion auf einem Netzwerkadapter, die single root I/O Virtualization (SR-IOV) unterstützt.

Die VF ist der PCIe Physical Function (PF) auf dem Netzwerkadapter zugeordnet und stellt eine virtualisierte instance des Netzwerkadapters dar. Jeder VF verfügt über einen eigenen PCI-Konfigurationsbereich. Jede VF teilt sich auch eine oder mehrere physische Ressourcen auf dem Netzwerkadapter, z. B. einen externen Netzwerkport, mit der PF und anderen VFs.

Ein VF ist kein vollwertiges PCIe-Gerät. Es bietet jedoch einen grundlegenden Mechanismus für die direkte Übertragung von Daten zwischen einer untergeordneten Hyper-V-Partition und dem zugrunde liegenden SR-IOV-Netzwerkadapter. Softwareressourcen, die für die Datenübertragung zugeordnet sind, stehen dem VF direkt zur Verfügung und sind von der Verwendung durch die anderen VFs oder die PF isoliert. Die Konfiguration der meisten dieser Ressourcen wird jedoch vom PF-Miniporttreiber ausgeführt, der im Verwaltungsbetriebssystem der übergeordneten Hyper-V-Partition ausgeführt wird.

Ein VF wird als virtueller Netzwerkadapter (VF-Netzwerkadapter) im Gastbetriebssystem verfügbar gemacht, das in einer untergeordneten Hyper-V-Partition ausgeführt wird. Nachdem der VF einem virtuellen Port (VPort) auf dem NIC-Switch des SR-IOV-Netzwerkadapters zugeordnet ist, macht der virtuelle PCI-Treiber (VPCI), der auf der VM ausgeführt wird, den VF-Netzwerkadapter verfügbar. Nach der Bereitstellung lädt der PnP-Manager im Gastbetriebssystem den VF-Miniporttreiber.

Hinweis

Eine untergeordnete Hyper-V-Partition wird auch als virtueller Computer (VM) bezeichnet.

Der VF-Miniporttreiber ist ein NDIS-Miniporttreiber, der auf dem virtuellen Computer installiert ist, um den VF zu verwalten. Jeder Vorgang, der vom VF-Miniporttreiber ausgeführt wird, darf sich nicht auf andere VF oder die PF auf demselben Netzwerkadapter auswirken.

Der VF-Miniporttreiber kann wie jeder PCI-Gerätetreiber funktionieren. Sie kann den PCI-Konfigurationsraum des VF lesen und in diesen schreiben. Der Zugriff auf das virtuelle PCI-Gerät ist jedoch ein privilegierter Vorgang und wird vom PF-Miniporttreiber wie folgt verwaltet:

  • Wenn der VF-Miniporttreiber NdisMGetBusData aufruft , um Daten aus dem PCI-Konfigurationsraum des VF-Netzwerkadapters zu lesen, wird der Virtualisierungsstapel benachrichtigt. Dieser Stapel wird im Verwaltungsbetriebssystem der übergeordneten Hyper-V-Partition ausgeführt. Wenn der Stapel über die Leseanforderung benachrichtigt wird, gibt er eine OID-Methodenanforderung (Object Identifier) von OID_SRIOV_READ_VF_CONFIG_SPACE an den PF-Miniporttreiber aus. Die zu lesenden Daten werden in einer NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS-Struktur angegeben, die in der OID-Anforderung enthalten ist.

    Der Treiber liest die angeforderten Daten aus dem VF PCI-Konfigurationsbereich und gibt die Daten durch Abschließen der OID-Anforderung zurück. Diese Daten werden dann an den VF-Miniporttreiber zurückgegeben, wenn der Aufruf von NdisMGetBusData abgeschlossen ist.

  • Wenn der VF-Miniporttreiber NdisMSetBusData aufruft , um Daten in den PCI-Konfigurationsraum des VF-Netzwerkadapters zu schreiben, wird der Virtualisierungsstapel über die Schreibanforderung benachrichtigt. Es gibt eine OID-Methodenanforderung von OID_SRIOV_WRITE_VF_CONFIG_SPACE an den PF-Miniporttreiber aus. Die zu schreibenden Daten werden in einer NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS-Struktur angegeben, die in der OID-Anforderung enthalten ist.

    Der Treiber schreibt die Daten in den VF PCI-Konfigurationsraum und gibt die status der Anforderung zurück, wenn die OID-Anforderung abgeschlossen wird. Diese status wird nach Abschluss des Aufrufs von NdisMSetBusData an den VF-Miniporttreiber zurückgegeben.

Der VF-Miniporttreiber kann auch mit dem PF-Miniporttreiber kommunizieren. Dieser Kommunikationspfad erfolgt über eine Backchannel-Schnittstelle. Weitere Informationen finden Sie unter SR-IOV PF/VF Backchannel Communication.

Hinweis Der VF-Miniporttreiber muss sich bewusst sein, dass er in einer virtualisierten Umgebung ausgeführt wird, damit er für bestimmte Vorgänge mit dem PF-Miniporttreiber kommunizieren kann. Weitere Informationen dazu, wie der Treiber dies ausführt, finden Sie unter Initialisieren eines VF-Miniporttreibers.