本文最初由 DELL Windows 工程團隊的 Abhijit Khande 和 Vineeth V Acharya 撰寫。
歡迎評論!若要提出主題建議或提出其他意見,請連絡 WinServerBlogs@dell.com。
在 Microsoft® Windows Server® 2012 Beta 作業系統的推出中,Microsoft 已導入對網路領域許多功能的支援。其中一個重要而有趣的功能是
單一根 I/O 虛擬化 (SR-IOV),可讓虛擬機器共用單一 PCI-e 裝置。這篇文章提供了 Windows Server 2012 Beta 中 SR-IOV 的基本概觀,以及它如何在網路 I/O 期間大幅降低虛擬化環境中的 CPU 使用率。
SR-IOV 介面是 PCI Express (PCIe) 規格的延伸。SR-IOV 可讓網路配接卡等單一 PCIe 裝置在 PCI 匯流排上提供多個輕量硬體表面,並在各種例項之間分別存取其資源。它是通過使用多個虛擬功能 (VF) 以及(通常的)物理功能 (PF) 來實現的。由於 PCIe 裝置和平台視硬體而定,因此必須同時支援此功能。
傳統上,發往虛擬機的數據包由主機操作系統中存在的物理網路適配器(使用物理功能)接收。此數據包由 NDIS (NIC 的網路驅動程式介面規範) 驅動程式模組處理。然後將數據包提供給 Hyper-V 交換機,該交換機處理數據包(例如路由、VLAN 篩選)並通過 VMBus 將數據包轉發到發往的 VM,如圖 1 所示。當 VM 必須發送數據包時,將遵循反向路徑。
借助 SR-IOV,VM 可以使用虛擬功能 (VF) 直接向物理網路適配器發送和接收數據包,完全繞過傳統路徑,如圖 1 所示。這不僅可以提升網路 I/O,還可以降低主機 CPU 的開銷。
圖 1:含與不含 SR-IOV 的資料路徑
即時移轉和 SR-IOV
在 Windows Server 2012 Beta 中,可在 VM 使用 SR-IOV 的情況下執行即時遷移。如果來源和目標系統支援 SR-IOV,且目標有可用的 VF,則 VM 將使用虛擬功能。如果沒有,VM 將恢復到傳統路徑(VM-Bus)。
每個支援 SR-IOV 的網路配接卡都會公開固定數量的虛擬功能,執行 PowerShell 命令「Get-NetAdapterSriov」即可取得這些功能。
效能分析
我們在實驗室執行了一些測試,以比較使用和不使用 SR-IOV 的效能。測試環境由一個測試伺服器(在其上執行測試)和一個檔伺服器組成。測試伺服器為 Dell PowerEdge™ R710 II,配備 Intel® X520 10GB 乙太網路介面卡和 Windows Server 2012 Beta 作業系統。檔案伺服器會託管多個 SMB 共用,並透過 Dell PowerConnect™ 8024 交換器使用 10GB 網路連接至測試伺服器。
我們根據參與網路數據傳輸的不同驅動程式模組安排的 DPC(延遲過程調用)使用的 CPU 捕獲性能數據。此數據是在來賓和主機操作系統中捕獲的,如以下方案中所述。測試伺服器有 4 個相同的虛擬機器,其中 Windows Server 2012 Beta 作為來賓作業系統。這 4 個 VM 透過虛擬交換器連線至 10GB 網路。此測試配置如圖 2 所示。
圖 2:測試設定
在我們展示性能數據之前,重要的是要介紹用於此測試的一個非常關鍵的參數。在
Microsoft Windows OS存在一種稱為延遲過程調用(DPC)的系統機制,它允許高優先順序任務(例如
中斷處理程式) 以推遲需要但優先順序較低的任務以供以後執行。這允許設備驅動程式和其他低級別事件消費者快速執行其處理的高優先順序部分,並計劃以較低的優先順序執行非關鍵的附加處理。
案例 1 – 虛擬機器(來賓作業系統)中的性能結果:
在此方案中,我們使用了四個虛擬機 (VM)(VM 1 到 VM 4)。我們在 VM 1 和 VM 2 上啟用了 SR-IOV (透過勾選 VM 設定中的「啟用 SR-IOV」選項),並在 VM 3 和 VM 4 上停用了 SR-IOV (取消勾選相同的選項)。因此,VM 1 和 VM 2 將使用虛擬功能(由 Intel 適配器公開),而 VM 3 和 VM 4 將使用合成路徑 (VMBus) 進行任何網路通信,如圖 2 所示。
我們開始將數據(大小為 20GB)從單個 SMB 共用複製到 VM,並在客戶機操作系統中捕獲系統 CPU 使用方式日誌。
圖 3:虛擬機器
中的 DPC CPU 使用率 在圖 3 中,SR-IOV 是指 VM-1 和 VM-2 中的平均 DPC CPU 使用量,而非 SR-IOV 是指 VM-3 和 VM-4 中的平均 DPC CPU 使用率。如果我們看一下圖表,我們發現兩種情況之間的 CPU 使用率沒有太大差異,但我們還沒有考慮主機中的 CPU 使用率。
案例 2 – 主機(主機作業系統)中的性能結果:
我們在此方案中使用了一個虛擬機。我們開始將資料 (大小為 20GB) 從 SMB 共用複製到 VM,並擷取網路 I/O 中使用的 2 個模組 NDIS 和 VMBUS 的 DPC CPU 使用率。
圖 4:主機
中的 DPC CPU 使用量 結果如圖 4 所示。正如預期的那樣,兩種情況(SR-IOV 和非 SR-IOV)之間的 CPU 使用率存在巨大差異。在 SR-IOV 中,CPU 使用量為 102 量級,在非 SR-IOV 中,CPU 使用量為 103 至 104 級。這主要是因為,在 SR-IOV 的情況下,虛擬機通過虛擬功能直接與物理 NIC 通信。因此,主機的 CPU 週期不會用於處理任何網路數據包。對於非 SR-IOV(如圖 1 所示),客戶機操作系統通過虛擬機總線與主機操作系統通信,而虛擬機總線又處理數據包並通過物理 NIC 發送它們。因此,VM 總線和 NDIS 等模組被廣泛使用。
在計算總 CPU 使用率時,我們觀察到使用 SR-IOV 時,網路 I/O 期間的 CPU 使用率要低得多。因此,啟用 SR-IOV 的 Windows Server 2012 Beta 可協助客戶降低網路 I/O 期間的 CPU 額外負荷,進而提升整體系統效能。
使用 PowerShell 設定 SR-IOV
可以使用以下 PowerShell 命令創建啟用了 SR-IOV 的新虛擬交換機,並將虛擬交換機附加到現有虛擬機的虛擬網路適配器。
注意:執行下列命令之前,您應在 BIOS 中啟用下列選項
(假設已連接單一網路配接卡 (Intel X520))
$NetAdap = 獲取網路介面卡 |其中物件 { $_。狀態 -eq “up”}
(-EnableIov 交換器用於啟用虛擬交換器中的 SR-IOV)
New-VMSwitch -名稱「SRIOV Switch」-NetAdapterName $NetAdap.Name -allowManagementOS $True -注意「SRIOV Switch on X520」-enableIov $True
$VMSw = get-VMSwitch
新增網路配接卡至 VM-1,並將其連接至虛擬交換器。
Add-VMNetwork配接卡 -switchName $VMSw.Name -VMName VM-1 -名稱「SRIOV 配接卡」
注意:若要讓此命令正常運作,必須關閉 VM)
您也可以
使用下列命令來使用現有的 VM 網路配接卡$VMNet
= Get-VMNetworkAdapter -VMName VM-1
Connect-VMNetworkAdapter -VMName VM-1 -switchName $VMSw.Name -name $VMNet.Name
每個 VM 網路配接卡都有兩個屬性:IovWeight & VmqWeight,分別對應於 SR-IOV 和 VMQ。 調整這些權重可啟用或停用這些功能。