Freigeben über


Nicht standardmäßige virtuelle Ports und VMQ

Der Standard-NIC-Switch ist eine Komponente eines Netzwerkadapters, der die SR-IOV-Schnittstelle (Single Root E/O Virtualization) unterstützt. Der Switch fügt immer den standardmäßigen virtuellen Port (VPort) an die PCI Express (PCIe) Physical Function (PF) an. Der Switch kann einen oder mehrere nicht standardmäßige VPorts an die PfA anfügen. Weitere Informationen finden Sie unter Erstellen eines virtuellen Ports.

Der Virtualisierungsstapel wird im Verwaltungsbetriebssystem der übergeordneten Hyper-V-Partition ausgeführt. Dieser Stapel erstellt VPorts, indem OID-Methodenanforderungen (Object Identifier) von OID_NIC_SWITCH_CREATE_VPORT ausgegeben werden. Der Stapel kann jedoch mehr VPorts als die Anzahl der aktiven virtuellen PCIe-Funktionen (VFs) erstellen, für die Ressourcen über OID-Methodenanforderungen von OID_NIC_SWITCH_ALLOCATE_VF zugewiesen wurden.

Wenn SR-IOV für einen Netzwerkadapter aktiviert ist, muss die vollständige VMQ-Funktionalität deaktiviert werden. Nicht standardmäßige VPorts, die an die PF angefügt und nicht an eine VF angefügt sind, können jedoch die gleiche Funktionalität wie die VMQ-Schnittstelle (VMQ) bereitstellen. In den folgenden Punkten wird erläutert, wie VPorts hardwarebeschleunigte Datenpfade für die Paketübertragung bereitstellen können, die VMQ ähnelt:

  • VMQ bestimmt die Ziel-VM durch die Mac-Filterung (Media Access Control, Medienzugriffssteuerung) in der Hardware. Dadurch wird der Mehraufwand für die Bestimmung der Ziel-VM im Virtualisierungsstapel vermieden.

    Ab Windows Server 2012 konfiguriert der Virtualisierungsstapel die Empfangsfilter auf dem VPort, indem OID-Methodenanforderungen von OID_RECEIVE_FILTER_SET_FILTER ausgegeben werden. Für diese OID-Anforderung übergibt der Virtualisierungsstapel eine NDIS_RECEIVE_FILTER_PARAMETERS-Struktur , die die MAC-Adresse und den VLAN-Bezeichner (Virtual LAN) angibt, die dem virtuellen Netzwerkadapter zugeordnet sind. Ähnlich wie VMQ können mehrere MAC-Adress- und VLAN-ID-Paare auf dem VPort konfiguriert werden. Der Virtualisierungsstapel gibt auch den Ziel-VPort an, auf den der Empfangsfilter festgelegt wird.

    Der SR-IOV-Netzwerkadapter führt eine ähnliche Hardwarefilterung basierend auf den Filterkriterien durch, die über die OID_RECEIVE_FILTER_SET_FILTER-Anforderung angegeben werden. Wenn ein Paket in der Hardware-Empfangswarteschlange eines VPorts empfangen wird, gibt der Miniporttreiber den Quell-VPort-Bezeichner in den OOB-Daten (Out-of-Band) einer NET_BUFFER_LIST Struktur für das Paket an. Basierend auf dem VPort-Bezeichner bestimmt der Virtualisierungsstapel die Ziel-VM und gibt die Pakete an den Netzwerkstapel an, der auf dem virtuellen Computer ausgeführt wird.

    In ähnlicher Weise gibt der Virtualisierungsstapel den VPort-Zielbezeichner in den OOB-Daten einer NET_BUFFER_LIST-Struktur für ein Übertragungspaket an. Wenn der Treiber die Sendeanforderung für das Paket verarbeitet, platziert er das Paket in der Hardwareübertragungswarteschlange des angegebenen VPorts.

    Der VPort-Bezeichner kann mithilfe des makros NET_BUFFER_LIST_RECEIVE_FILTER_VPORT_ID aus den OOB-Daten des Pakets abgerufen werden.

    Weitere Informationen zu diesem Prozess finden Sie unter Paketfluss über einen virtuellen Port.

    Weitere Informationen zu den Anforderungen für die Empfangsfilterung für einen SR-IOV-Netzwerkadapter finden Sie unter Ermitteln von Empfangsfilterfunktionen.

  • VMQ bietet Interrupt- und DPC-Parallelität.

    Ab NDIS 6.30 und Windows Server 2012 kann ein an die PF angefügter VPort für eine bestimmte CPU-Affinität konfiguriert werden. Der Virtualisierungsstapel konfiguriert die CPU-Affinität und unterbricht die Moderationsparameter für einen VPort mithilfe von OID-Methodenanforderungen von OID_NIC_SWITCH_CREATE_VPORT oder OID_NIC_SWITCH_VPORT_PARAMETERS. Auf diese Weise konfiguriert der Virtualisierungsstapel interruptbasierte Parameter ähnlich wie VMQ für Interrupt- und DPC-Parallelität.

    Wenn der SR-IOV-Netzwerkadapter beispielsweise Pakete an einem VPort empfängt, der für eine bestimmte CPU-Affinität konfiguriert ist, generiert der Adapter die Interrupts für die angegebene CPU. Der Miniporttreiber gibt die empfangenen Pakete an NDIS und den Virtualisierungsstapel für diese CPU an.

Der PF-Miniporttreiber kündigt seine SR-IOV-Funktionen im Kontext des Aufrufs von MiniportInitializeEx an. Der Treiber initialisiert eine NDIS_SRIOV_CAPABILITIES-Struktur mit ihren Funktionen und ruft NdisMSetMiniportAttributes auf, um ihre Funktionen zu registrieren. Weitere Informationen finden Sie unter Bestimmen von SR-IOV-Funktionen.

Die folgenden Elemente der NDIS_NIC_SWITCH_CAPABILITIES-Struktur wirken sich auf die Zuordnung von VPorts aus:

  • MaxNumVPorts, der die maximale Anzahl von VPorts angibt, die auf dem Netzwerkadapter erstellt werden können.

  • MaxNumVFs, das die maximale Anzahl von VFs angibt, die auf dem Netzwerkadapter zugeordnet werden können.

Ab NDIS 6.30 kann der Miniporttreiber beim Initialisieren der NDIS_NIC_SWITCH_CAPABILITIES-Struktur das NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL-Flag im NicSwitchCapabilities-Element festlegen. Dieses Flag gibt an, dass die nicht standardmäßigen VPorts nicht reserviert aus dem VPort-Pool auf dem Netzwerkadapter erstellt werden können. Dadurch können verfügbare nicht standardmäßige VPorts nach Bedarf erstellt und der PF und den zugeordneten VFs zugewiesen werden. Wenn der Netzwerkadapter die VMQ-Schnittstelle unterstützt, können nicht standardmäßige VPorts, die der PF zugewiesen sind, auch für VM-Empfangswarteschlangen verwendet werden.

Wenn das NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL-Flag festgelegt ist, werden verfügbare nicht standardmäßige VPorts erstellt und der PF und den zugeordneten VFs zugewiesen. Die maximale Anzahl von VPorts, die erstellt und der PF zugewiesen werden können, entspricht dem Wert, den der Treiber im MaxNumVPorts-Member meldet. Der Miniporttreiber muss einen VPort reservieren, um als Standard-VPort verwendet zu werden, der der PF zugewiesen ist. Daher ist die maximale Anzahl nicht standardmäßiger VPorts, die der PF zugewiesen und für VM-Empfangswarteschlangen verwendet werden können, (MaxNumVPorts – 1).

Hinweis

 Wenn dieses Flag festgelegt ist, sind die Erstellung und Zuweisung nicht standardmäßiger VPorts nicht für die VF-Zuordnung reserviert. Daher können Situationen auftreten, in denen einem VF möglicherweise kein VPort zugewiesen wird, wenn der Pool mit verfügbaren VPorts erschöpft wurde. 

Wenn das flag NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL nicht festgelegt ist, ist die Erstellung und Zuweisung nicht standardmäßiger VPorts für die VF-Zuweisung reserviert. Die maximale Anzahl zusätzlicher nicht standardmäßiger VPorts, die erstellt und der PF zugewiesen und für VM-Empfangswarteschlangen verwendet werden können, ist (MaxNumVPortsMaxNumVFs).

Weitere Informationen zu VMQ finden Sie unter VmQ-Warteschlange (VMQ).