支援單一根 I/O 虛擬化(SR-IOV)的網路適配器必須能夠支援下列硬體元件:
一個PCI Express (PCIe) 物理功能 (PF)。 PF 一律存在於網路適配器上,並附加至 Hyper-V 父分割區。
如需此硬體元件的詳細資訊,請參閱 SR-IOV 實體函式 (PF)。
一或多個 PCIe 虛擬函式 (VF)。 每個 VF 都必須初始化並附加至 Hyper-V 子分割區,客體作系統的網路元件才能透過 VF 傳送或接收封包。
如您需要此硬體元件的詳細資訊,請參閱 SR-IOV 虛擬函式 (VFs)。
PF 迷你埠驅動程式會在 Hyper-V 父分割區的管理作業系統中執行,會初始化並配置 SR-IOV 網路介面卡上 VF 的資源。 NDIS 呼叫 PF 迷你埠驅動程式的 MiniportInitializeEx 函式之後,NDIS 和虛擬化堆疊可以向 PF 迷你埠驅動程式發出物件識別碼 (OID) 要求,以執行下列動作:
在網路介面卡上建立 NIC 交換器。 NIC 交換器會在 VF、PF 和實體網路連接埠之間橋接網路流量。
如需詳細資訊,請參閱 NIC 交換器。
注意 從 Windows Server 2012 開始,SR-IOV 介面僅支援網路適配器上的一個 NIC 交換器。 這個交換器稱為 預設 NIC 交換器,並由 NDIS_DEFAULT_SWITCH_ID 識別符參考。
要求 PF 迷你埠驅動程式初始化並配置網路介面卡上 VF 的資源。
如需詳細資訊,請參閱 SR-IOV 虛擬功能 (VF)。
在 NIC 交換器上建立虛擬連接埠 (VPort) 並將其連接至 VF。
如需詳細資訊,請參閱 虛擬連接埠 (VPorts)。
下圖顯示與 VF 初始化相關的步驟。
NDIS、虛擬化堆疊和 PF 迷你埠驅動程式會在 VF 初始化順序期間遵循下列步驟:
NDIS 會從登錄讀取預設交換器設定,並發出 OID_NIC_SWITCH_CREATE_SWITCH 的 OID 方法要求,以在網路介面卡中布建交換器。 此 OID 要求中傳遞的參數包含如何設定重要硬體資源 (例如 VF 和 VPorts) 的相關資訊。 它也包含如何在附加至 PF 的非預設 VPort 和預設 VPort 之間分配資源的相關資訊。
PF 迷你埠驅動程式成功完成 OID 之後,NIC 交換器已準備好用來建立 VPort 並在其上配置 VF。
如需如何建立 NIC 參數的詳細資訊,請參閱 建立 NIC 交換器。
VF 會被視為虛擬機器 (VM) 網路介面卡的卸載機制。 此配接器會在 Hyper-V 子分割區中執行的客體作業系統中公開。 依預設,客體作業系統中的網路元件會透過軟體型綜合資料路徑傳送和接收封包。 不過,如果子分割區已啟用 VF 卸載,虛擬化堆疊會向 PF 迷你埠驅動程式發出 OID 要求,以進行 VF 的資源配置和初始化。 將 VF 連接至子分割區和 NIC 交換器上的 VPort 之後,網路元件會透過 VF 資料路徑傳送和接收封包。 如需這些資料路徑的詳細資訊,請參閱 SR-IOV 資料路徑。
如果 Hyper-V 子分割區已被啟用 VF 卸載,虛擬化堆疊會向 PF 微型端口驅動程式發出 OID 方法要求 OID_NIC_SWITCH_ALLOCATE_VF。 在此 OID 要求中傳遞的參數包括用於分配 VF 的 NIC 交換器的識別碼。 其他參數包括 VF 將被附加至子分割區的識別碼。
PF 迷你埠驅動程式會為 VF 配置必要的硬體和軟體資源。 PF 迷你埠驅動程式也會呼叫 NdisMGetVirtualFunctionLocation 來判斷 VF 的 PCIe 要求者識別碼 (RID) 。 當 VF 產生 DMA 要求和中斷時,RID 用於 DMA 和中斷重新對應。
當 PF 迷你埠驅動程式成功完成 OID_NIC_SWITCH_ALLOCATE_VF 要求時,會傳回 RID 和 VF 識別碼。
如需 VF 資源配置的詳細資訊,請參閱 為虛擬功能配置資源。
虛擬化堆疊會藉由向 PF 迷你埠驅動程式發出 OID_NIC_SWITCH_CREATE_VPORT 的 OID 方法要求,在 NIC 交換器上建立 VPort。 此 OID 要求中傳遞的參數包括要建立 VPort 之 NIC 交換器的識別碼。 其他參數包括將附加 VPort 的 VF 識別碼。
注意 NIC交換器上的預設VPort一律存在,並連接至PF。 只能建立單一非預設 VPort 並將其附加至 VF。
在 NDIS 將 OID 要求轉送至 PF 小型埠驅動程式之前,它會分配一個在網路介面卡上唯一的有效 VPort 識別碼。
當 PF 迷你埠驅動程式處理 OID 要求時,它會配置 VPort 所需的硬體資源,並保留 VPort 的識別碼。 此識別碼用於後續的 OID 要求和 SR-IOV 函式呼叫。
如需如何建立 VPort 的詳細資訊,請參閱 建立虛擬連接埠。
Hyper-V 子分割區可能會在配置 VF 和 VPort 之前很久就啟動。 在此期間,客體作業系統中的網路元件會透過合成資料路徑傳送和接收封包。 這涉及透過附加至 PF 的預設 VPort 的資料包流量。 為了將流量引導至子分割區,虛擬化堆疊會使用子分割區的 VM 網路介面卡,透過媒體存取控制(MAC)和虛擬局域網(VLAN)篩選器來設定預設的 VPort。
配置 VF 和 VPort 的資源之後,虛擬化堆疊會向 PF 迷你埠驅動程式發出 OID_RECEIVE_FILTER_MOVE_FILTER 的 OID 方法 要求。 此 OID 要求會將 VM 網路介面卡的 MAC 和 VLAN 篩選器從預設 VPort 移至連結至 VF 的 VPort。 這會導致與這些過濾器匹配的資料包通過VF資料路徑轉發到VF VPort。
注意 現有的接收篩選器可以使用 OID_RECEIVE_FILTER_MOVE_FILTER 從預設 VPort 移動到 VF VPort。 此外,可以使用 OID_RECEIVE_FILTER_SET_FILTER 在 VF VPort 上設定新的過濾器。
成功建立VF和VPort並在VPort上設定MAC過濾器後,虛擬化堆疊會通知虛擬PCI(VPCI)虛擬服務提供者(VSP)。 此 VSP 會在 Hyper-V 母分割區的管理作業系統中執行。 此通知會通知 VPCI VSP 已成功配置並連接至子分割區的 VF。 VPCI VSP 會透過虛擬機器匯流排(VMBus),將訊息傳送至執行於子分割區客體作業系統中的 VPCI 虛擬服務用戶端(VSC)。 VPCI VSC 是匯流排驅動程式,可公開 VF 網路介面卡的 PCI 裝置。
公開 VF 網路介面卡之後,在客體作業系統中執行的 PnP 子系統會偵測介面卡,並載入 VF 迷你埠驅動程式。 此驅動程式會向 NDIS 註冊。 初始化 VF 迷你埠驅動程式,並在 VF 網路介面卡上設定適當的封包篩選之後,VF 資料路徑就會完全運作。 因此,客體作業系統中的封包流量從虛擬資料路徑切換到此資料路徑。