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 PHYSISCHE PCI-Express-Funktion (PCIe) Die PF ist immer auf dem Netzwerkadapter vorhanden und an die übergeordnete Hyper-V-Partition angefügt.

    Weitere Informationen zu dieser Hardwarekomponente finden Sie unter SR-IOV Physical Function (PF).

  • Mindestens eine PCIe Virtual Functions (VF). Jede VF muss initialisiert und an eine untergeordnete Hyper-V-Partition angefügt werden, bevor die Netzwerkkomponenten des Gastbetriebssystems Pakete über das VF senden oder empfangen können.

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

Der PF-Miniporttreiber, der im Verwaltungsbetriebssystem der übergeordneten Hyper-V-Partition ausgeführt wird, initialisiert und ordnet Ressourcen für einen VF auf dem SR-IOV-Netzwerkadapter zu. Nachdem NDIS die MiniportInitializeEx-Funktion des PF-Miniporttreibers aufgerufen hat, können NDIS und der Virtualisierungsstapel Objektbezeichneranforderungen (OID) an den PF-Miniporttreiber ausgeben, um die folgenden Aktionen auszuführen:

  • Erstellen Sie einen NIC-Switch auf dem Netzwerkadapter. Der NIC-Switch überbrückt den Netzwerkdatenverkehr zwischen den VFs, der 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 Switch wird als Standard-NIC-Switch bezeichnet und vom bezeichner NDIS_DEFAULT_SWITCH_ID referenziert.

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

    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 Virtuelle 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 an ndis und dann an den Pf-Miniport-Treiber zeigt.

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

  1. NDIS liest die Standardswitchkonfiguration 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. Es enthält auch Informationen dazu, wie die Ressourcen auf die nicht standardmäßigen VPorts und den Standard-VPort verteilt werden, die an die PF angefügt sind.

    Nachdem die OID vom PF-Miniporttreiber erfolgreich abgeschlossen wurde, kann der NIC-Switch zum Erstellen von VPorts und zum Zuordnen von VFs darauf verwendet werden.

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

  2. Ein VF wird als Auslagerungsmechanismus für den VM-Netzwerkadapter behandelt. Dieser Adapter wird im Gastbetriebssystem verfügbar gemacht, das in der untergeordneten Hyper-V-Partition 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 die VF-Auslagerung aktiviert ist, gibt der Virtualisierungsstapel OID-Anforderungen an den PF-Miniporttreiber für die Ressourcenzuordnung 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 untergeordnete Hyper-V-Partition für die VF-Auslagerung aktiviert wurde, gibt der Virtualisierungsstapel eine OID-Methodenanforderung von OID_NIC_SWITCH_ALLOCATE_VF an den PF-Miniporttreiber aus. Die Parameter, die in dieser OID-Anforderung übergeben werden, enthalten den Bezeichner des NIC-Schalters, auf dem der VF zugeordnet ist. Andere Parameter enthalten Bezeichner für die untergeordnete Partition, an die der VF angefügt wird.

    Der PF-Miniporttreiber ordnet die erforderlichen Hardware- und Softwareressourcen für den VF zu. Der PF-Miniporttreiber bestimmt auch den PCIe Requestor Identifier (RID) für den VF, indem er NdisMGetVirtualFunctionLocation aufruft. Die RID wird für DMA- und Interruptremapping verwendet, wenn DMA-Anforderungen und Interrupts vom VF generiert werden.

    Die 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 eine VF finden Sie unter Zuweisen von Ressourcen für eine virtuelle Funktion.

  3. Der Virtualisierungsstapel erstellt einen VPort auf dem NIC-Switch, indem eine OID-Methodenanforderung von OID_NIC_SWITCH_CREATE_VPORT an den PF-Miniporttreiber ausgegeben 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 enthalten den Bezeichner des VF, an den der VPort angefügt wird.

    Hinweis 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 zugeordnet, der über den Netzwerkadapter eindeutig ist.

    Wenn der PF-Miniporttreiber die OID-Anforderung verarbeitet, ordnet er die für den VPort erforderlichen Hardwareressourcen zu und behält den Bezeichner für den VPort bei. Dieser Bezeichner wird in späteren OID-Anforderungen und SR-IOV-Funktionsaufrufen verwendet.

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

  4. Die untergeordnete Hyper-V-Partition kann lange vor der Zuordnung von VF und VPort gestartet werden. Während dieser Zeit senden und empfangen die Netzwerkkomponenten im Gastbetriebssystem Pakete über den synthetischen Datenpfad. Dabei handelt es sich um Paketdatenverkehr über den Standard-VPort, der an die PF angefügt ist. Um Datenverkehr an die untergeordnete Partition zu überbrücken, konfiguriert der Virtualisierungsstapel den Standard-VPort mit den Filtern für die Medienzugriffssteuerung (Media Access Control, MAC) und virtuelles LAN (VLAN) für den VM-Netzwerkadapter der untergeordneten Partition.

    Nachdem Ressourcen für VF und VPort zugeordnet wurden, gibt der Virtualisierungsstapel eine OID-Methodenanforderung 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 auf den VPort, der an den VF angefügt ist. Dies bewirkt, dass Pakete, die mit diesen Filtern übereinstimmen, über den VF-Datenpfad an den VF-VPort weitergeleitet werden.

    Hinweis Vorhandene Empfangsfilter können mithilfe von OID_RECEIVE_FILTER_MOVE_FILTER vom Standard-VPort in den VF-VPort verschoben werden. Außerdem können neue Filter auf dem VF-VPort mithilfe von OID_RECEIVE_FILTER_SET_FILTER festgelegt werden.

Nachdem vf und VPort erfolgreich erstellt wurden und die MAC-Filter auf dem VPort festgelegt wurden, benachrichtigt der Virtualisierungsstapel den virtual PCI (VPCI) Virtual Service Provider (VSP). Dieser VSP wird im Verwaltungsbetriebssystem der übergeordneten Hyper-V-Partition ausgeführt. Die Benachrichtigung informiert den VPCI-VSP darüber, dass der VF erfolgreich zugeordnet und einer untergeordneten Partition angefügt wurde. Der VPCI-VSP sendet Nachrichten über den VM-Bus (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 verfügbar macht.

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 wird bei NDIS registriert. Nachdem der VF-Miniporttreiber initialisiert und die entsprechenden Paketfilter auf dem VF-Netzwerkadapter konfiguriert wurden, ist der VF-Datenpfad voll funktionsfähig. Daher wurde der Paketdatenverkehr im Gastbetriebssystem vom synthetischen Datenpfad zu diesem Datenpfad gewechselt.