Freigeben über


Initialisierungssequenz für virtuelle Funktionen

Ein Netzwerkadapter, der die Einzelstamm-E/A-Virtualisierung (SR-IOV) unterstützt, muss die folgenden Hardwarekomponenten unterstützen können:

  • Eine PCI Express (PCIe) Physical Function (PF). Der PF ist immer auf dem Netzwerkadapter vorhanden und mit der übergeordneten Partition Hyper-V verbunden.

    Weitere Informationen zu dieser Hardwarekomponente finden Sie unter SR-IOV Physische Funktion (PF).For more information on this hardware component, seeSR-IOV Physical Function (PF).

  • Eine oder mehrere PCIe Virtuelle Funktionen (VF). Jeder VF muss initialisiert und an eine Hyper-V untergeordnete Partition angefügt werden, bevor die Netzwerkkomponenten des Gastbetriebssystems Pakete über den VF senden oder empfangen können.

    Weitere Informationen zu dieser Hardwarekomponente finden Sie unter SR-IOV virtuellen Funktionen (VFs).For more information on this hardware component, seeSR-IOV Virtual Functions (VFs).

Der PF-Miniporttreiber, der im Verwaltungsbetriebssystem der übergeordneten Hyper-V Partition ausgeführt wird, initialisiert und weist Ressourcen für einen VF auf dem SR-IOV Netzwerkadapter zu. Nachdem NDIS die Miniport-Treiberfunktion MiniportInitializeEx aufgerufen hat, kann NDIS und der Virtualisierungsstapel Objektbezeichneranforderungen (OID) an den PF miniport-Treiber ausgeben, um Folgendes auszuführen:

  • Erstellen Sie einen NIC-Switch auf dem Netzwerkadapter. Der NIC-Switch überbrückt den Netzwerkdatenverkehr zwischen den VFs, PF und dem physischen Netzwerkport.

    Weitere Informationen finden Sie unter NIC Switches.

    Hinweis Ab Windows Server 2012 unterstützt die SR-IOV-Schnittstelle nur einen NIC-Switch auf dem Netzwerkadapter. Dieser Schalter wird als Standard-NIC-Switchbezeichnet und wird vom NDIS_DEFAULT_SWITCH_ID-Bezeichner referenziert.

  • Fordern Sie den PF-Miniporttreiber an, um Ressourcen für einen VF auf dem Netzwerkadapter zu initialisieren und zuzuweisen.

    Weitere Informationen finden Sie unter SR-IOV Virtual Functions (VFs).

  • Erstellen Sie einen virtuellen Port (VPort) auf dem NIC-Switch, und fügen Sie ihn an den VF an.

    Weitere Informationen finden Sie unter Virtual Ports (VPorts).

Das folgende Diagramm zeigt die Schritte, die mit der VF-Initialisierung verbunden sind.

Beispiel für eine VF-Initialisierungssequenz, die Aufrufe vom Virtualisierungsstapel zu NDIS und dann zum PF-Miniport-Treiber zeigt.

NDIS, der Virtualisierungsstapel und der PF-Miniporttreiber führen die folgenden Schritte während der VF-Initialisierungs-Sequenz aus:

  1. NDIS liest die Standard-Switch-Konfiguration aus der Registrierung und gibt eine OID-Methodenanforderung von OID_NIC_SWITCH_CREATE_SWITCH aus, um den Switch im Netzwerkadapter bereitzustellen. Die Parameter, die in dieser OID-Anforderung übergeben werden, enthalten Informationen zum Konfigurieren wichtiger Hardwareressourcen wie VFs und VPorts. Sie enthält auch Informationen zum Verteilen der Ressourcen unter den nicht standardmäßigen VPorts und den Standard-VPort, die an die PF angefügt sind.

    Nachdem der OID vom PF-Miniporttreiber erfolgreich abgeschlossen wurde, kann der NIC-Switch verwendet werden, um VPorts zu erstellen und VFs darauf zuzuweisen.

    Weitere Informationen zum Erstellen eines NIC-Schalters finden Sie unter Erstellen eines NIC-Switches.

  2. Ein VF wird als Offload-Mechanismus für den Netzwerkadapter der virtuellen Maschine (VM) behandelt. Dieser Adapter ist im Gastbetriebssystem verfügbar, das in der Hyper-V-Kindpartition ausgeführt wird. Standardmäßig senden und empfangen die Netzwerkkomponenten im Gastbetriebssystem Pakete über den softwarebasierten synthetischen Datenpfad. Wenn jedoch eine untergeordnete Partition für den VF-Offload aktiviert ist, gibt der Virtualisierungsstapel OID-Anforderungen an den PF-Miniporttreiber für die Ressourcenzuweisung und Initialisierung eines VF aus. Nachdem der VF an die untergeordnete Partition und einen VPort auf dem NIC-Switch angefügt wurde, senden und empfangen die Netzwerkkomponenten Pakete über den VF-Datenpfad. Weitere Informationen zu diesen Datenpfaden finden Sie unter SR-IOV Datenpfade.

    Wenn eine Hyper-V-Kindpartition für VF-Offload aktiviert wurde, sendet der Virtualisierungsstapel eine OID-Methodenanforderung mit OID_NIC_SWITCH_ALLOCATE_VF an den PF-Miniporttreiber. Die Parameter, die in dieser OID-Anforderung übergeben werden, enthalten den Bezeichner des NIC-Schalters, dem der VF zugeordnet ist. Andere Parameter umfassen Bezeichner für die untergeordnete Partition, der der VF zugewiesen wird.

    Der PF Miniport-Treiber weist die erforderlichen Hardware- und Softwareressourcen für den VF zu. Der PF-Miniporttreiber bestimmt auch den PCIe Requestor Identifier (RID) für den VF durch Aufrufen von NdisMGetVirtualFunctionLocation. Das RID wird für DMA und Interrupt-Neuzuordnung verwendet, wenn vom VF DMA-Anforderungen und Interrupts generiert werden.

    Das RID zusammen mit dem VF-Bezeichner wird vom PF-Miniporttreiber zurückgegeben, wenn er die OID_NIC_SWITCH_ALLOCATE_VF Anforderung erfolgreich abgeschlossen hat.

    Weitere Informationen zur Ressourcenzuordnung für einen VF finden Sie unter "Ressourcen für eine virtuelle Funktion zuordnen".

  3. Der Virtualisierungsstapel erstellt einen VPort auf dem NIC-Switch, indem eine OID-Methodenanforderung von OID_NIC_SWITCH_CREATE_VPORT an den PF-Miniporttreiber ausgestellt wird. Die Parameter, die in dieser OID-Anforderung übergeben werden, enthalten den Bezeichner des NIC-Schalters, auf dem der VPort erstellt werden soll. Andere Parameter umfassen den Bezeichner des VF, an den der VPort angefügt werden soll.

    Anmerkung Der Standard-VPort auf dem NIC-Switch ist immer vorhanden und an die PF angefügt. Es kann nur ein einzelner nicht standardmäßiger VPort erstellt und an einen VF angefügt werden.

    Bevor NDIS die OID-Anforderung an den PF-Miniporttreiber weiterleitet, wird ein gültiger VPort-Bezeichner zugewiesen, der über den Netzwerkadapter eindeutig ist.

    Wenn der PF-Miniporttreiber die OID-Anforderung verarbeitet, werden die für den VPort erforderlichen Hardwareressourcen zugewiesen und der Bezeichner für den VPort beibehalten. Dieser Bezeichner wird in späteren OID-Anforderungen und SR-IOV Funktionsaufrufen verwendet.

    Weitere Informationen zum Erstellen eines VPorts finden Sie unter Erstellen eines virtuellen Ports.

  4. Die Hyper-V untergeordnete Partition kann lange gestartet werden, bevor ein VF und VPort zugeordnet werden. Während dieser Zeit senden und empfangen die Netzwerkkomponenten im Gastbetriebssystem Pakete über den synthetischen Datenpfad. Dies umfasst Paketdatenverkehr über den Standard-VPort, der an die PF angefügt ist. Um den Datenverkehr mit der untergeordneten Partition zu überbrücken, konfiguriert der Virtualisierungsstapel den Standard-VPort mit den Medienzugriffssteuerungsfiltern (MAC) und den virtuellen LAN (VLAN) Filtern für den VM-Netzwerkadapter der untergeordneten Partition.

    Nachdem Ressourcen für den VF und VPort zugeordnet wurden, gibt der Virtualisierungs-Stack eine OID-Methodenanfrage von OID_RECEIVE_FILTER_MOVE_FILTER an den PF-Miniporttreiber aus. Diese OID-Anforderung verschiebt die MAC- und VLAN-Filter für den VM-Netzwerkadapter vom Standard-VPort in den VPort, der an den VF angeschlossen ist. Dies bewirkt, dass Pakete, die diesen Filtern entsprechen, über den VF-Datenpfad an den VF VPort weitergeleitet werden.

    Anmerkung Vorhandene Empfangsfilter können mithilfe von OID_RECEIVE_FILTER_MOVE_FILTER vom Standard-VPort zum VF-VPort verschoben werden. Darüber hinaus können neue Filter mithilfe von OID_RECEIVE_FILTER_SET_FILTER auf dem VF-VPort festgelegt werden.

Nachdem der VF und der VPort erfolgreich erstellt wurden und die MAC-Filter auf dem VPort festgelegt wurden, benachrichtigt der Virtualisierungsstapel den virtuellen PCI-Anbieter (VMSP). Dieser VSP wird im Verwaltungsbetriebssystem der übergeordneten Partition Hyper-V ausgeführt. Die Benachrichtigung informiert den VPCI VSP darüber, dass der VF erfolgreich zugeordnet und an eine untergeordnete Partition angefügt wurde. Der VPCI VSP sendet Nachrichten über den virtuellen Maschinenbus (VMBus) an den VPCI Virtual Service Client (VSC), der im Gastbetriebssystem der untergeordneten Partition ausgeführt wird. Der VPCI VSC ist ein Bustreiber, der ein PCI-Gerät für den VF-Netzwerkadapter bereitstellt.

Nachdem der VF-Netzwerkadapter verfügbar gemacht wurde, erkennt das PnP-Subsystem, das im Gastbetriebssystem ausgeführt wird, den Adapter und lädt den VF-Miniporttreiber. Dieser Treiber registriert sich bei NDIS. Nachdem der VF-Miniporttreiber initialisiert wurde und die entsprechenden Paketfilter auf dem VF-Netzwerkadapter konfiguriert sind, ist der VF-Datenpfad vollständig funktionsfähig. Daher wurde der Paketdatenverkehr im Gastbetriebssystem vom synthetischen Datenpfad auf diesen Datenpfad umgestellt.