共用方式為


虛擬函式初始化順序

支援單一根 I/O 虛擬化 (SR-IOV) 的網路介面卡必須能夠支援下列硬體元件:

  • 一個 PCI Express (PCIe) 實體函式 (PF) 。 PF 一律存在於網路介面卡上,並附加至 Hyper-V 父分割區。

    如需此硬體元件的詳細資訊,請參閱 SR-IOV 實體函式 (PF)

  • 一或多個 PCIe 虛擬函式 (VF) 。 在客體作業系統的網路元件可以透過 VF 傳送或接收封包之前,每個 VF 都必須初始化並附加至 Hyper-V 子分割區。

    如需此硬體元件的詳細資訊,請參閱 SR-IOV 虛擬函式 ()

在 Hyper-V 父資料分割的管理作業系統中執行的 PF 迷你埠驅動程式,會在 SR-IOV 網路介面卡上初始化及配置 VF 的資源。 在 NDIS 呼叫 PF 迷你埠驅動程式的 MiniportInitializeEx 函式之後,NDIS 和虛擬化堆疊可以發出物件識別碼, (OID) 對 PF 迷你埠驅動程式的要求來執行下列動作:

  • 在網路介面卡上建立 NIC 交換器。 NIC 交換器會橋接 VFs、PF 和實體網路埠之間的網路流量。

    如需詳細資訊,請參閱 NIC 參數

    注意從Windows Server 2012開始,SR-IOV 介面僅支援網路介面卡上的一個 NIC 交換器。 這個參數稱為 預設的 NIC 參數,並由NDIS_DEFAULT_SWITCH_ID識別碼參考。

  • 要求 PF 迷你埠驅動程式初始化和配置網路介面卡上 VF 的資源。

    如需詳細資訊,請參閱 SR-IOV 虛擬函式 ()

  • 在 NIC 交換器上建立虛擬埠 (VPort) ,並將其連結至 VF。

    如需詳細資訊,請參閱 虛擬埠 (VPorts)

下圖顯示 VF 初始化相關的步驟。

範例 vf 初始化順序,顯示從虛擬化堆疊到 ndis 的呼叫,然後呼叫 pf miniport 驅動程式。

NDIS、虛擬化堆疊和 PF 迷你埠驅動程式會在 VF 初始化順序期間遵循下列步驟:

  1. NDIS 會從登錄讀取預設交換器組態,併發出 OID_NIC_SWITCH_CREATE_SWITCH 的 OID 方法要求,以在網路介面卡中布建交換器。 傳入此 OID 要求的參數包含如何設定重要硬體資源的相關資訊,例如 VFs 和 VPorts。 它也包含如何將資源分散到非預設 VPort 和附加至 PF 的預設 VPort 的相關資訊。

    PF 迷你埠驅動程式成功完成 OID 之後,NIC 參數便已準備好用來建立 VPorts 並配置 VFs。

    如需如何建立 NIC 參數的詳細資訊,請參閱 建立 NIC 交換器

  2. VF 會被視為虛擬機器 (VM) 網路介面卡的卸載機制。 此配接器會在 Hyper-V 子分割中執行的客體作業系統中公開。 根據預設,客體作業系統中的網路元件會透過軟體型綜合資料路徑傳送和接收封包。 不過,如果已啟用 VF 卸載的子分割區,虛擬化堆疊會針對 VF 的資源配置和初始化,向 PF 迷你埠驅動程式發出 OID 要求。 將 VF 附加至 NIC 交換器上的子分割區和 VPort 之後,網路元件會透過 VF 資料路徑傳送和接收封包。 如需這些資料路徑的詳細資訊,請參閱 SR-IOV 資料路徑

    如果已啟用 VF 卸載的 Hyper-V 子分割區,虛擬化堆疊會發出 OID 方法要求 ,OID_NIC_SWITCH_ALLOCATE_VF 至 PF 迷你埠驅動程式。 在此 OID 要求中傳遞的參數包含配置 VF 的 NIC 參數識別碼。 其他參數包括要附加 VF 之子分割區的識別碼。

    PF 迷你埠驅動程式會為 VF 配置必要的硬體和軟體資源。 PF 迷你埠驅動程式也會呼叫 NdisMGetVirtualFunctionLocation,判斷 VF 的 PCIe 要求者識別碼 (RID) 。 RID 用於 DMA,並在 VF 產生 DMA 要求和中斷時進行中斷重新對應。

    當 PF 迷你埠驅動程式成功完成 OID_NIC_SWITCH_ALLOCATE_VF 要求時,PF 迷你埠驅動程式會傳回 RID 與 VF 識別碼。

    如需 VF 資源配置的詳細資訊,請參閱 配置虛擬函式的資源

  3. 虛擬化堆疊會在 NIC 交換器上建立 VPort,方法是向 PF 迷你埠驅動程式發出 OID_NIC_SWITCH_CREATE_VPORT 的 OID 方法要求。 在此 OID 要求中傳遞的參數包含要建立 VPort 的 NIC 參數識別碼。 其他參數包括 VF 的識別碼,VPort 將附加至其中。

    注意 NIC 交換器上的預設 VPort 一律存在,並附加至 PF。 只有單一非預設 VPort 可以建立並附加至 VF。

    在 NDIS 將 OID 要求轉送到 PF 迷你埠驅動程式之前,它會配置透過網路介面卡唯一的有效 VPort 識別碼。

    當 PF 迷你埠驅動程式處理 OID 要求時,它會配置 VPort 所需的硬體資源,並保留 VPort 的識別碼。 此識別碼會在後續的 OID 要求和 SR-IOV 函式呼叫中使用。

    如需如何建立 VPort 的詳細資訊,請參閱 建立虛擬埠

  4. 在配置 VF 和 VPort 之前,可能會啟動 Hyper-V 子分割區。 在此期間,客體作業系統中的網路元件會透過綜合資料路徑傳送和接收封包。 這牽涉到透過附加至 PF 的預設 VPort 封包流量。 若要將流量橋接至子分割區,虛擬化堆疊會使用媒體存取控制來設定預設 VPort, (MAC) 和虛擬 LAN (VLAN) 篩選子分割的 VM 網路介面卡。

    配置 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 () 虛擬服務提供者 (VSP) 。 此 VSP 會在 Hyper-V 父資料分割的管理作業系統中執行。 通知通知會通知在已順利配置並附加至子分割區的 VF。 在虛擬機器匯流排 (VMBus) 將訊息傳送至在子分割區客體作業系統中執行的 VSC 虛擬服務用戶端 (VSC) 。 DHCPI VSC 是公開 VF 網路介面卡 PCI 裝置的匯流排驅動程式。

公開 VF 網路介面卡之後,在客體作業系統中執行的 PnP 子系統會偵測介面卡並載入 VF 迷你埠驅動程式。 此驅動程式會向 NDIS 註冊。 在 VF 迷你埠驅動程式初始化,並在 VF 網路介面卡上設定適當的封包篩選器之後,VF 資料路徑就會完全正常運作。 因此,客體作業系統中的封包流量會從綜合資料路徑切換至此資料路徑。