天天看點

虛拟化中的SR-IOV

虛拟化環境中有很多的硬體加速技術,這些技術标準來源于行業内的上司者或各種組織機構,但是在實際項目落地時又有哪些會被啟用呢?哪些啟用的功能帶來了性能上明顯的提升呢?那麼這些加速技術如果不痛不癢的話那麼它們的存在究竟意義有多大呢?

無論哪家解決方案,若想啟用一些加速功能,勢必需要硬體的支援,這就導緻在一些項目前期的調研或者POC環境裡不太容易實作,畢竟有些要求是十分昂貴和苛刻的,比如RDMA。相對于一些需要資金投入的技術來說,SRIOV無疑是比較親民且易于實作的,今天就選它來一探究竟。本篇将全部采用微軟Hyper-V環境進行說明

SRIOV,即單根虛拟化。Intel在早期為了支援虛拟化環境,在CPU和PCI總線上提供了三層虛拟化技術,它們分别是:

基于處理器的虛拟化技術VT-x

基于PCI總線實作的IO虛拟化技術VT-d

基于網絡的虛拟化技術VT-c

從SRIOV的中文字面不難了解,它屬于VT-d技術的一個分支,要實作SRIOV功能,前提條件就是你的網卡首先要支援SRIOV,你的主機闆要支援VT-d技術(支援VT-d自然也就支援SRIOV)

那麼SRIOV究竟是幹嘛用的呢?它能給虛拟化平台帶來多麼可觀的性能提升呢?還是上一張架構圖來看看吧:

<a href="http://s3.51cto.com/wyfs02/M02/3E/B3/wKioL1PHnkTSbmTdAAEoz1Xd77E272.jpg" target="_blank"></a>

以上圖為例逐個解釋關鍵詞:

1. PF就是實體網卡所支援的一項PCI功能,PF可以擴充出若幹個VF

2. VF是支援SRIOV的實體網卡所虛拟出的一個“網卡”或者說虛出來的一個執行個體,它會以一個獨立網卡的形式呈現出來,每一個VF有它自己獨享的PCI配置區域,并且可能與其他VF共享着同一個實體資源(公用同一個實體網口)

3. PF miniport driver即PF驅動是工作于Hyper-V虛拟化平台父區域的,并在VF之前最先加載

4. VF miniport driver即VF驅動是工作于Hyper-V虛拟化平台子區域的,即guestOS;需要注意的是,VF及PF之間是隔離的,任何經由VF驅動或所執行的結果都不會影響到其他的VF或PF

5. Network Interface Card即實體網卡,在啟用SRIOV之後會生成若幹vport,實體NIC所要做的就是轉發physical port與vport之間的流量

6. physical port顧名思義就是實體網口,在SRIOV場景中physical port充當一個面向對外的網絡媒介

7. VPort是個抽象出來的接口,類似于實體網口,它們被映射給每一個VF或者PF,供parentOS或guestOS來使用

通過以上架構的描述就可以看出,啟用SRIOV之後,實體NIC将通過VF與虛拟機(VF driver)進行資料互動,反之亦然。那麼這樣一來即可跳過中間的虛拟化堆棧(即VMM層),以達到近乎于純實體環境的性能;這一點也是SRIOV最大的價值所在,他有别于以往虛拟機通過仿真裝置和虛拟化層進行流量傳遞的情況,那麼究竟SRIOV與傳統環境相比能提升多少,我來做個實驗:

主控端OS:windows server 2012R2

虛拟機OS:windows server 2012R2

伺服器型号:DELL R720

網卡:intel x520 series

######################################################################################

首先在伺服器BIOS設定中将SRIOV功能開啟

<a href="http://s3.51cto.com/wyfs02/M01/3E/BB/wKioL1PHpS3ilXt1AAZZJSAOZdM624.jpg" target="_blank"></a>

實體機确認開啟了SRIOV功能之後,接下來在作業系統層面操作,首先Hyper-V若要使用SRIOV,有兩處需要修改,一個是虛拟交換機,如下圖确認在建立虛拟交換機時開啟了SRIOV(單根虛拟化),需要注意的是虛拟交換機一旦建立後,SRIOV功能無法在修改,也就是說你要是忘了開啟那對不起,麻煩您删了重來

<a href="http://s3.51cto.com/wyfs02/M01/3E/BB/wKiom1PHpBSCQaFFAATQqNaicuU480.jpg" target="_blank"></a>

虛拟交換機啟用SRIOV之後,就要在我測試的虛拟機上操作了,在虛拟機的vNIC(虛拟網卡)上開啟SRIOV,如下圖所示,這裡是可以随時開關的

<a href="http://s3.51cto.com/wyfs02/M02/3E/BB/wKioL1PHpTDSLLY2AAWAPOUMqO4403.jpg" target="_blank"></a>

确認了上面的操作之後,通過powershell可以進一步确認系統是否識别了我的設定,在目前主控端執行(get-vmhost).iovsupport或iovsupportreasons來檢視傳回結果,有關powershell中對象的屬性可以通過管道符“|gm”來檢視

另外如下圖所示,通過get-netadaptersriov來檢視目前主機上支援sriov的實體網卡有哪些,并且從傳回結果來看,我的x520-2網卡最多支援62的vf。

順帶提一句Peripheral Component Interconnect Special Interest Group(外圍部件互連專業組),簡稱PCISIG,這個組織定義了每個裝置最多可支援的vf數量為256個

<a href="http://s3.51cto.com/wyfs02/M02/3E/BB/wKiom1PHpBfCereuAAM-oVa_lNE338.jpg" target="_blank"></a>

在正确且成功開啟了sriov功能之後,我啟動這台測試虛拟機SRIOV_2012,可以看到hyper-v下方顯示目前SRIOV是活動狀态,但奇怪的是我發現有兩個IP。。怎麼回事呢?

<a href="http://s3.51cto.com/wyfs02/M00/3E/BB/wKiom1PHpBmjbDXBAANfiScLh9M014.jpg" target="_blank"></a>

進入到虛拟機系統裡來看裝置管理器,發現多了一塊網卡,叫做“Intel(R)82599虛拟功能”,其實我這塊Intel x520 series網卡是基于Intel 82599控制晶片的,後面的虛拟功能翻譯過來就是virtual function,也就是虛出來的一個VF,它以一塊虛拟網卡的形式呈現在虛機作業系統裡了,是以我剛才看到了兩個IP位址

<a href="http://s3.51cto.com/wyfs02/M02/3E/BB/wKioL1PHpTOQyVKGAAOG7rSZ75E943.jpg" target="_blank"></a>

這裡可能有個小bug,就是我需要重新配一次IP,這樣這台虛拟機才不會出現兩個IP位址,如下圖目前這個正常的測試IP顯示的是(複制)

<a href="http://s3.51cto.com/wyfs02/M00/3E/BB/wKioL1PHpTSQ0eGGAAPGT_LO3Xg727.jpg" target="_blank"></a>

重新輸一遍之後就恢複正常了,也就是說原先的IP位址沒有直接映射到我的VF上面,下圖顯示目前IP已經恢複正常了,隻有一個6.6.6.0的IP

<a href="http://s3.51cto.com/wyfs02/M00/3E/BB/wKiom1PHpBuA4kuQAARGEhine-Q270.jpg" target="_blank"></a>

同樣通過powershell指令“get-netadaptersriovvf”可以看到目前生成的VF資訊

<a href="http://s3.51cto.com/wyfs02/M01/3E/BB/wKiom1PHpBywPZObAAK6NrwqXpg035.jpg" target="_blank"></a>

下面開始一個拷貝測試,通過網絡傳輸一個iso檔案,在啟用SRIOV的情況下,傳輸速度大約460MB/S

<a href="http://s3.51cto.com/wyfs02/M00/3E/BB/wKioL1PHpTjh7dUZAARQR3rNeDQ374.jpg" target="_blank"></a>

在傳輸檔案同時,我使用工具(burnintest)對虛拟機CPU進行加壓,以盡量模拟實際情況,觀察結果如下圖,通過性能螢幕看到CPU使用率最小值不到2%,最大值11%多,相差約9.5%

接着關掉這個虛拟機的SRIOV功能

<a href="http://s3.51cto.com/wyfs02/M00/3E/BB/wKioL1PHpT3B_JirAAVg0iBvnE8855.jpg" target="_blank"></a>

可以看到VF沒有了,如下圖

<a href="http://s3.51cto.com/wyfs02/M02/3E/BB/wKiom1PHpCTiy7BTAANDorsY5Ro144.jpg" target="_blank"></a>

通過powershell确認VF的确離我們遠去了~

<a href="http://s3.51cto.com/wyfs02/M01/3E/BB/wKiom1PHpCXzVskOAAMq2SelmPw453.jpg" target="_blank"></a>

同樣再通過網絡拷貝一次檔案,依舊是iso檔案(這裡不用考慮緩存因素,我在每次拷貝之前都會進行一些複制操作以便盡量充滿緩存),傳輸速率大概在410MB/S左右

<a href="http://s3.51cto.com/wyfs02/M02/3E/BB/wKioL1PHpUCS846IAARzc2vRjMo478.jpg" target="_blank"></a>

同樣傳輸期間對虛拟機CPU進行加壓,觀察性能螢幕結果,CPU負載最小值不到2%,最大值接近17%,相差約15%

<a href="http://s3.51cto.com/wyfs02/M00/3E/BB/wKioL1PHpUKw-FsCAAV6nzQcRXU291.jpg" target="_blank"></a>

綜合上述情況來看,對比SRIOV功能開啟與關閉,拷貝同樣iso檔案以及相同的CPU加壓方式,結果如下:

開啟SRIOV

關閉SRIOV

內插補點

CPU使用率

9.5%

15%

5.5%

傳輸速率

460MB/S

410MB/S

50MB/S

########################################################################################

通過上面的測試可以看出在SRIOV開啟或關閉的不同情況下,對比還是有一定效果的,我的測試環境還是不夠嚴謹的,因為在實際生産環境中還要考慮諸多因素,例如磁盤的IO,虛拟機的CPU配置等等情況,但是即便比較粗陋,這個資料還是具有一定參考價值的,将近6%左右的CPU負載以及相差50MB/S的速率我想對于任何一個有大批量并發請求的虛拟化平台使用者來講都是相當可觀的,是以說SRIOV對于目前私有雲使用者來講還是很有價值的。關于虛拟化的硬體加速功能還有很多,如果以後有條件了會一并奉上與大家分享。

本文轉自maomaostyle 51CTO部落格,原文連結:http://blog.51cto.com/maomaostyle/1439651,如需轉載請自行聯系原作者

繼續閱讀