Aktivieren, Deaktivieren und Aktualisieren von VMMQ auf einem VPort

Nach dem Erstellen eines VPorts kann ein Treiber der oberen Ebene die RSS-Parameter des VPorts aktivieren, deaktivieren oder aktualisieren.

Der Treiber kann die RSS-Dereferenzierungstabelle des VPorts aktualisieren, um die Nummernwarteschlangen für einen VPort zu ändern. Der RSS-Hashtyp, die Hashfunktion und der geheime Hashschlüssel eines VPorts gelten jedoch als statische Parameter und werden während der Lebensdauer eines VPorts nicht von den überlastenden Treibern geändert. Wenn ein Treiber der oberen Ebene einen der statischen RSS-Parameter ändern möchte, muss er den VPort löschen und neu erstellen.

Der Treiber der oberen Ebene aktiviert, deaktiviert oder ändert die RSS-Parameter eines VPorts, indem er eine OID_GEN_RECEIVE_SCALE_PARAMETERS OID-Anforderung ausgibt. Der Treiber der oberen Ebene legt das Feld VPortId in der NDIS_OID_REQUEST-Struktur auf die ID des Ziel-VPorts der neuen Konfiguration fest.

Der Treiber der oberen Ebene legt auch die in der OID-Anforderung verwendete NDIS_RECEIVE_SCALE_PARAMETERS-Struktur wie folgt fest. Beachten Sie, dass einige Felder basierend auf den VMMQ-Funktionen, die vom zugrunde liegenden Miniportadapter angekündigt werden, für alle PF-VPorts auf denselben Wert festgelegt werden können.

  • Legen Sie den Revisionsmember von Header auf NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_3 fest.

  • Legen Sie das NDIS_RSS_PARAM_FLAG_DEFAULT_PROCESSOR_UNCHANGED-Flag fest, um anzugeben, dass sich das DefaultProcessorNumber-Element nicht geändert hat.

  • Legen Sie BaseCpuNumber auf Null fest.

  • Legen Sie DefaultProcessorNumber fest, um den RSS-Standardprozessor für diesen VPort anzugeben. Der Miniport kann davon ausgehen, dass der Standardprozessor Teil der RSS-Prozessorliste ist, aber er kann nicht davon ausgehen, dass sich der Standard-RSS-Prozessor in der aktuellen Dereferenzierungstabelle befindet.

  • Legen Sie HashInformation fest, um den Hashtyp und die Hashfunktion anzugeben, die die NIC verwenden soll, um den Hashwert der pakete zu berechnen, die für diesen VPort empfangen wurden. Der Treiber der oberen Ebene kann dieses Feld für jeden VPort auf einen anderen Wert festlegen.

  • Legen Sie IndirectionTableSize fest, um die Größe der Dereferenzierungstabelle in Bytes anzugeben. Legen Sie dieses Feld für alle PF-VPorts auf denselben Wert fest. Der Treiber der oberen Ebene muss sicherstellen, dass die Anzahl der Einträge in der Dereferenzierungstabelle zwei ist.

  • Legen Sie IndirectionTableOffset fest, um den Offset der Dereferenzierungstabelle vom Anfang der NDIS_RECEIVE_SCALE_PARAMETERS-Struktur an anzugeben.

  • Legen Sie HashSecretKeySize fest, um die Größe des geheimen Hashschlüssels in Bytes anzugeben. Der Treiber der oberen Ebene kann einen anderen geheimen Schlüssel für jeden VPort festlegen, wenn der Miniportadapter dies unterstützt. Weitere Informationen finden Sie unter Anzeigen von VMMQ-Funktionen.

  • Legen Sie HashSecretKeyOffset fest, um den Offset des geheimen Hashschlüssels vom Anfang der NDIS_RECEIVE_SCALE_PARAMETERS-Struktur anzugeben. Der Treiber der oberen Ebene kann einen anderen geheimen Schlüssel für jeden VPort festlegen, wenn der Miniportadapter dies unterstützt. Weitere Informationen finden Sie unter Anzeigen von VMMQ-Funktionen.

  • Legen Sie ProcessorMaskOffset, NumberOfProcessorMasks und ProcessorMasksEntrySize entsprechend fest .

Wenn ein Miniporttreiber eine OID-Anforderung empfängt, um VMMQ für einen VPort zu deaktivieren, sollte er rückgängig machen, alle Pakete anzugeben, die für diesen VPort auf dem Prozessor empfangen werden, der im Feld ProcessorAffinity in der NDIS_NIC_SWITCH_VPORT_PARAMETERS-Struktur angegeben wurde, die in der OID_NIC_SWITCH_CREATE_VPORT OID-Anforderung verwendet wurde.

Ändern der Anzahl von Warteschlangen für einen VPort

Die Anzahl der eindeutigen Prozessoren, die in der Dereferenzierungstabelle eines VPorts verwendet werden, darf den Wert des NumQueuePairs-Felds der NDIS_NIC_SWITCH_VPORT_PARAMETERS-Struktur , die in der letzten ausgestellten OID_NIC_SWITCH_CREATE_VPORT OID-Anforderung angegeben wurde, nicht überschreiten. Diese Prozessoren sind eine Teilmenge des RSS-Prozessorsatzes, der von einem Aufruf von NdisGetRssProcessorInformation zurückgegeben wird. Weitere Informationen finden Sie unter Zuweisen von VPorts für VMMQ. Die Dereferenzierungstabellen auf verschiedenen VPorts können jedoch denselben Prozessor enthalten.

Um die Anzahl der Warteschlangen für einen PF-VPort zu verringern, muss ein Treiber der oberen Ebene:

  1. Senden Sie eine OID_GEN_RECEIVE_SCALE_PARAMETERS OID mit der ursprünglichen Dereferenzierungstabellengröße. Die Dereferenzierungstabelle in diesem Schritt kann jedoch nur auf die Anzahl unterschiedlicher Prozessoren bis zur neuen Anzahl von Warteschlangen verweisen. Wenn die neue Dereferenzierungstabelle aufgrund des NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SIZE_RESTRICTED-Flags der NDIS_NIC_SWITCH_PARAMETERS-Struktur kleiner als die ursprüngliche Tabelle sein muss, muss der Aussteller garantieren, dass die Dereferenzierungstabelle in diesem Schritt die neue Dereferenzierungstabelle enthält, die so oft wie nötig repliziert wird, um die Anforderung des RESTRICTED-Flags für die ursprüngliche Anzahl von Warteschlangen zu erfüllen.

  2. Senden Sie eine OID_NIC_SWITCH_VPORT_PARAMETERS OID mit einer neuen Anzahl von Warteschlangen.

  3. Senden Sie eine OID_GEN_RECEIVE_SCALE_PARAMETERS mit der neuen Dereferenzierungstabellengröße, wenn sie geändert wurde.

Um die Anzahl der Warteschlangen für einen PF-VPort zu erhöhen, muss ein Treiber der oberen Ebene:

  1. Der Treiber muss die aktuelle Dereferenzierungstabelle vor Schritt 2 nicht aktualisieren, da die Tabelle nur auf die Anzahl unterschiedlicher Prozessoren bis zur aktuellen Anzahl von Warteschlangen verweist.

  2. Senden Sie eine OID_NIC_SWITCH_VPORT_PARAMETERS OID mit einer neuen Anzahl von Warteschlangen. Wenn das FLAG RESTRICTED festgelegt ist, sollte der Miniporttreiber die ursprüngliche Dereferenzierungstabelle so oft wie erforderlich intern replizieren, um die Anforderung der Dereferenzierungstabelle für die neue Anzahl von Warteschlangen zu erfüllen.

  3. Senden Sie eine OID_GEN_RECEIVE_SCALE_PARAMETERS OID mit neuer Dereferenzierungstabellengröße, wenn sie sich geändert hat.