共用方式為


非預設虛擬端口和 VMQ

預設的 NIC 切換器是支援單根 I/O 虛擬化(SR-IOV)介面的網路適配器元件。 交換器總是將預設虛擬埠(VPort)附加至 PCI Express(PCIe)實體功能(PF)。 交換器可以將一或多個非預設 VPorts 附加至 PF。 如需詳細資訊,請參閱 建立虛擬埠

虛擬化堆疊會在 Hyper-V 父分割的管理作系統中執行。 此堆疊會藉由發出 OID_NIC_SWITCH_CREATE_VPORT的物件識別碼 (OID) 方法要求來建立 VPorts。 不過,堆疊可以建立比透過 OID 方法 OID_NIC_SWITCH_ALLOCATE_VF請求配置資源的活躍 PCIe 虛擬功能數量更多的 VPorts。

如果網路適配器上已啟用 SR-IOV,則必須停用完整的 VMQ 功能。 不過,連結至 PF 且未連結至 VF 的非預設 VPorts 可以提供與虛擬機佇列 (VMQ) 介面相同的功能。 下列幾點將討論 VPorts 如何提供硬體加速的數據路徑,以進行類似 VMQ 的封包傳輸:

  • VMQ 會依據硬體中的媒體存取控制 (MAC) 篩選來判斷目標 VM。 這可避免在虛擬化堆疊中判斷目標 VM 的額外負荷。

    從 Windows Server 2012 開始,虛擬化堆疊會發出 OID_RECEIVE_FILTER_SET_FILTER的 OID 方法要求,在 VPort 上設定接收篩選器。 針對此 OID 要求,虛擬化堆疊會傳遞 NDIS_RECEIVE_FILTER_PARAMETERS 結構,以指定與虛擬網路適配器相關聯的 MAC 位址和虛擬 LAN (VLAN) 識別碼。 類似於 VMQ,它可以在 VPort 上設定多個 MAC 位址和 VLAN 識別符組。 虛擬化堆疊也會指定要設定接收篩選的目標 VPort。

    SR-IOV 網路適配器會根據透過 OID_RECEIVE_FILTER_SET_FILTER 要求指定的篩選準則來執行類似的硬體篩選。 在 VPort 的硬體接收佇列上收到封包時,迷你埠驅動程式會在封包 NET_BUFFER_LIST 結構的頻外 (OOB) 數據中指定來源 VPort 識別符。 根據 VPort 識別碼,虛擬化堆疊會決定目標 VM,並指出在 VM 中執行之網路堆疊的封包。

    同樣地,虛擬化堆疊會在傳輸封包 NET_BUFFER_LIST 結構的 OOB 數據中指定目標 VPort 識別符。 當驅動程式處理封包的傳送要求時,它會將封包放在指定 VPort 的硬體傳輸佇列中。

    您可以使用 NET_BUFFER_LIST_RECEIVE_FILTER_VPORT_ID 巨集,從封包的 OOB 數據取得 VPort 識別碼。

    如需此程序的詳細資訊,請參閱 封包流程透過虛擬埠

    如需 SR-IOV 網路配接器接收篩選需求的詳細資訊,請參閱 判斷接收篩選功能

  • VMQ 提供中斷和 DPC 的並行處理。

    從 NDIS 6.30 和 Windows Server 2012 開始,連結至 PF 的 VPort 可以設定為具有特定的 CPU 親和性。 虛擬化堆疊會使用 OID_NIC_SWITCH_CREATE_VPORT,或 OID_NIC_SWITCH_VPORT_PARAMETERS的 OID 方法請求,來設定 VPort 的 CPU 親和性及中斷調節參數。 藉由這樣做,虛擬化堆疊會設定類似於 VMQ 的插斷型參數,以進行中斷和 DPC 並行。

    例如,當 SR-IOV 網路適配器在設定為具有特定 CPU 親和性的 VPort 上接收封包時,配接器會在指定的 CPU 上產生中斷。 迷你埠驅動程式會將接收到的封包通知給 NDIS 以及該 CPU 的虛擬化堆疊。

PF 小型埠驅動程式在呼叫 MiniportInitializeEx的過程中宣告其 SR-IOV 能力。 驅動程式會使用其功能初始化 NDIS_SRIOV_CAPABILITIES 結構,並呼叫 NdisMSetMiniportAttributes 來註冊其功能。 如需詳細資訊,請參閱 判斷 SR-IOV 功能

下列 NDIS_NIC_SWITCH_CAPABILITIES 結構成員會影響 VPorts 的配置方式:

  • MaxNumVPorts,指定可在網路適配器上建立的 VPort 數目上限。

  • MaxNumVFs,指定可在網路適配器上配置的最大 VF 數目。

從 NDIS 6.30 開始,當迷你埠驅動程式初始化 NDIS_NIC_SWITCH_CAPABILITIES 結構時,它可以在 NicSwitchCapabilities 成員中設定NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL旗標。 此旗標指定可以從網路卡上的 VPort 集區,以非保留方式建立非預設的虛擬端口。 這可讓可用的非預設 VPorts 建立並視需要指派給 PF 和已配置的 VF。 如果網路適配器支援 VMQ 介面,則指派給 PF 的非預設 VPorts 也可用於 VM 接收佇列。

如果已設定NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL旗標,則會建立可用的非預設 VPorts,並指派給 PF 和已配置的 VF。 可以建立並指派給 PF 的 VPort 數目上限,與驅動程式在 MaxNumVPorts 成員中報告的值相同。 迷你埠驅動程式必須保留一個 VPort,以用作分配給 PF 的預設 VPort。 因此,可以指派給 PF 並用於 VM 接收佇列的非預設 VPorts 數目上限為 (MaxNumVPorts– 1)。

注意

 如果設定此旗標,則不會針對 VF 配置保留非預設 VPorts 的建立和指派。 因此,如果集區中的 VPort 已耗盡,可能無法為 VF 指派 VPort。 

如果未設定NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL旗標,則非預設 VPorts 的建立和指派會保留給 VF 指派。 可以建立並指派給 PF 並用於 VM 接收佇列的額外非預設 VPort 數目上限為 (MaxNumVPortsMaxNumVFs)。

如需 VMQ 的詳細資訊,請參閱 虛擬機佇列 (VMQ)