天天看點

XenServer的SR-IOV技術

1、SR-IOV介紹

Single Root I/O Virtualization(SR-IOV) 是一種由PCI-SIG 組織釋出的I/O 虛拟化技術标準。SR-IOV 采用直接I/O 技術,繞過虛拟機螢幕直接發送和接收I/O 資料。同時SR-IOV 還利用IOMMU(I/OMemory Management Unit)高效完成記憶體通路授權和記憶體位址轉換。一個SR-IOV 裝置具有一個或多個實體裝置(Physical Function,或PF),PF 是标準的PCIe 裝置。每一個PF可以建立多個虛拟裝置(Virtual Function,或VF),VF 是“輕量級”的PCIe 裝置。

Physical Function (PF) : 網卡上的每個實體端口具有至少有一個PF。在某些情況下,網卡上的每個端口可以被分割為四個端口。例如每個端口可成分為四個PFs,或是在雙端口的網絡卡上能分割為總共有八個PFs。關鍵點是在于PF擁有完整的設定能力,它們可以被hypervisor當成是實體端口來管理。

Virtual Function (VF) : VF是和VM關聯的,它被限制為處理I/O流,基本上是移動資料。它們不支援對實體端口的管理。所支援的VF數不同但約莫是每張卡可虛拟為64個VF。

XenServer的SR-IOV技術

每一個VF 擁有收發資料包的關鍵資源,如收發隊列、DMA 通道等;而與其他VF 共享其他大部分非關鍵的裝置資源。是以每一個VF 都有獨立收發資料包的能力。若把一個VF 配置設定給一台虛拟機,該虛拟機就具備了直接使用該VF 進行資料包發送和接收的能力。最為重要的是,虛拟機通過VF 進行I/O 操作無需虛拟機螢幕的幹涉,這正是直接I/O 技術的優勢之一。

2、SR-IOV體系結構

XenServer的SR-IOV技術

如圖,SR-IOV 體系結構中的軟體部分包括:PF 驅動、VF 驅動和SR-IOV 管理器(IOVM)。在XenServer的環境下,PF 驅動運作于Domain0,VF 驅動運作于DomainU。

PF 驅動運作在主控端并且有通路所有硬體裝置資源的權限。PF 驅動的主要功能和職責是建立、配置和管理虛拟裝置,即VF。

VF 驅動相當于一個普通的網絡裝置驅動運作在虛拟機,VF驅動隻有操作相應VF 的權限。VF 驅動的主要功能和職責是在虛拟機和VF 之間直接完成I/O 操作,包括資料包的發送和接收。由于VF 并不是真正意義上的PCIe 裝置,是以VF 也不能像普通的PCIe 裝置一樣(如PF)被作業系統直接識别并配置。

SR-IOV 管理器運作在主控端,它為所有的VF 建立了一個虛拟的配置空間,使得主控端作業系統可以正确的識别并配置VF。在VF 被主控端正确的識别和配置之後,它們才能被配置設定給虛拟機,然後在虛拟機作業系統中被當作普通的PCI 裝置初始化和使用。

XenServer的SR-IOV技術

如圖,SR-IOV 以太網控制器包括了一個内置的鍊路層交換機,一個PF 和多個VF。

   鍊路層交換機進入網卡的資料包首先經過鍊路層交換機,并被根據MAC位址和VLAN 标簽進行分類,進而确定資料包對應的目标VF。然後資料包被直接傳輸到該VF 對應虛拟機的接收緩沖區等待處理,這一步驟通過DMA 技術實作。在DMA 的過程中,IOMMU 承擔了把虛拟機緩沖區記憶體位址翻譯成機器實體位址的任務。在資料包傳輸完成之後,VF 會産生一個中斷通知虛拟機有新資料包需要處理。每個由VF 産生的中斷并不能直接送到虛拟機,而是被虛拟機螢幕捕獲,然後由虛拟機螢幕在合适的時候給虛拟機注入一個虛拟中斷通知資料包的到達。虛拟機收到中斷之後,VF 驅動開始工作,處理接收緩沖區中的資料包。一條中斷可能會被用來通知多個資料包的到達。

3、SR-IOV技術運作原理

當SR-IOV 網卡收到新資料包時,會向虛拟機螢幕發起一個中斷信号(在虛拟化環境下,硬體裝置需要和CPU或者記憶體通信,都需要發送中斷信号,其運作模式和傳統的作業系統并無差別),虛拟螢幕收到網卡發送過來的信号之後,截取該中斷信号。然後虛拟機螢幕将該中斷信号進過一定的處理,給對應的虛拟機發送一個虛拟的中斷信号,虛拟機在收到虛拟機螢幕給他的中斷信号後,虛拟機作業系統調用VF 驅動中的中斷處理程式,中斷處理程式通過發起NAPI 輪詢來處理到達資料包。NAPI(New API)是Linux 核心提供的網絡驅動接口,用于配合網卡的中斷聚集技術使用。,中斷聚集技術就是使用一個中斷來通知處理所有的資料包,不再一個資料包一個中斷,這個技術的好處就是節省了CPU等系統的資源,不讓其老是處于中斷狀态浪費系統的資源。NAPI 技術合并了兩種接收資料包的方法:中斷和輪詢。

在SR-IOV中,VF采用了NAPI 接口的網絡驅動,其工作模式是這樣的:首先驅動處于中斷模式;當中斷到來的時候,驅動轉換為輪詢模式并且中斷被屏蔽;在輪詢模式,驅動開始處理資料包直到所有資料包都已經被接收;然後驅動再次轉換為中斷模式,解除對中斷的屏蔽。

4、使用SR-IOV技術所需條件

SR-IOV的性能在目前的I/O虛拟化環境下是最好的,但是需要一系列的支援,包括網卡、伺服器、VMM、CPU等。

網卡:現目前來說,市面上就2家公司的網卡支援SR-IOV的技術,即Intel和EMULEX Corporation。Intel支援SR-IOV技術的網卡可以通路以下網址進行查詢:http://www.winyao.com/news_info.asp?id=232

伺服器:必須支援輸入/輸出記憶體管理單元 (IOMMU),并且必須在 BIOS 中啟用 IOMMU。必須支援SR-IOV,并且必須在 BIOS 中啟用 SR-IOV。這需要查詢伺服器的手冊或着咨詢伺服器廠家。

VMM:即hypervisor的支援,現在的主流hypervisor都支援SR-IOV技術,比如XenServer、vSphere、KVM、Hyper-v等。其實就是SR-IOV的PF驅動有沒有基于該hypervisor做開發和內建。

CPU:配備 AMD 處理器的主機不受SR-IOV 支援,必須配備 Intel 處理器。

虛拟機作業系統:其實作業系統應該也必須算上,因為部分作業系統SR-IOV的VF驅動就沒有,你前面的條件滿足了這一條不滿足也使不了,現在主流使用的作業系統都是OK的。一些低版本的作業系統可能使用就有問題了。

5、在XenServer中使用SR-IOV技術

我們在前面的文章中提到過XenServer的兩種網絡堆棧模式,也給大家簡單介紹了這兩種模式的架構和工作原理。但是呢這兩種都是基于純軟體虛拟的I/O虛拟化,在大規模和高并發的情況下,是無法滿足虛拟機的性能需求的。比如你在XenServe上面部署Exchange郵件系統進行大規模并發壓力測試的時候,你就會發現,你的網絡IO是一個瓶頸。

是以基于這樣的需求,我們可以在XenServer上面使用基于硬體的IO虛拟化SR-IOV技術,提高我們Exchange虛拟機系統的網絡IO的性能。

隻有 XenServer 硬體相容性清單上所列的支援 SR-IOV 的 NIC 才支援SR-IOV 技術,而且該技術僅适用于Windows Server 2008 來賓作業系統【有朋友說在red hat上也測試通過】。

1. 在 XenServer 主機上打開本地指令 shell。

2. 運作 lspci 指令以顯示虛拟功能 (VF) 的清單。例如:

07:10.0 Ethernetcontroller: Intel Corporation 82559 \

EthernetController Virtual Function (rev 01)

在上例中,07:10.0 是 VF 的 bus:device.function 位址。

3. 通過運作以下指令為目标 VM 配置設定所需的 VF:

xe vm-param-setother-config:pci=0/0000:<bus:device.function> uuid=<vm-uuid>

  4. 啟動 VM,然後為特定的硬體安裝相應的 VF 驅動程式。