intel虛擬設(shè)備隊列VMDq技術(shù)解析
現(xiàn)在人們已經(jīng)接受并開始逐步實施虛擬化技術(shù),為提供理想的性能和可靠的安全性,硬件虛擬化技術(shù)必不可少。它的發(fā)展是循序漸進(jìn)的,在我們最熟悉的世界,硬件虛擬化是先從處理器開始,再到芯片組,再到IO設(shè)備,因為每一個階段都以上一個階段作為基礎(chǔ),如下圖所示:
其中VT-x和VT-d技術(shù)已經(jīng)被人熟悉(競爭對手也有類似的技術(shù))
現(xiàn)在的階段就處在IO虛擬化階段,一個老生常談的問題是:外部IO已經(jīng)逐漸跟不上處理器等的發(fā)展。無論你需不需要虛擬化,你都需要解決IO的問題。何況,隨著處理器的架構(gòu)越來越先進(jìn),核心數(shù)越來越多,提高資源利用率的需求使這些機器越來越傾向于虛擬化。
現(xiàn)在IO虛擬化的問題和處理器虛擬化等的問題差不多,就是人們希望硬件輔助方案能解決軟件方案的性能損耗問題。在IO設(shè)備上,頻繁的VMM切換以及對中斷的處理是導(dǎo)致虛擬化效率低下的兩個重點因素,如下圖所示:
軟件實現(xiàn)的IO虛擬化網(wǎng)絡(luò)吞吐量低下
硬件的IO虛擬化就是為了解決這個問題,對應(yīng)的解決方案相關(guān)的很多,我們這次介紹的是Intel的VMDq:Virtual Machine Device Queue,虛擬機設(shè)備隊列。這是一個專門用于提升網(wǎng)卡的虛擬化IO性能的技術(shù),對于服務(wù)器來說,最關(guān)鍵的IO組成部分就是網(wǎng)絡(luò)和存儲了,甚至網(wǎng)絡(luò)更為重要一些。
虛擬化的精髓就是多個虛擬機共享一定的硬件資源,特別地:網(wǎng)卡。盡管VT-d技術(shù)提供了不同的虛擬機直接使用不同的網(wǎng)卡的可能性,不過多個虛擬機共用一塊或者數(shù)塊網(wǎng)卡仍然是絕大多數(shù)情況。對于VT-d技術(shù),一些人可能會很高興地看到,不同的顯卡也可以通過它在不同的虛擬機之間直接分配,如Paralles Workstation Extreme軟件可以主機和虛擬機直接使用不同的Quadro顯卡進(jìn)行渲染工作(是的,它和前面說的還有些距離,不過原理相同)。
因為這樣的緣故,實際上所有的提供上網(wǎng)能力的虛擬機軟件都內(nèi)置了一個虛擬交換機,大部分還在這個基礎(chǔ)上提供了路由器的功能,作用就是和真實的交換機/路由器一樣,將多臺虛擬機連成一個或者多個網(wǎng)絡(luò):
VMDq實際上將這個虛擬交換機的一部分功能用硬件進(jìn)行加速
VMDq實際上實現(xiàn)了一個半軟半硬的虛擬交換機,和原有的純軟件方案相比,新的方案提供了更高的性能、更低的資源占用率,它怎么實現(xiàn)的呢?
VMDq技術(shù)提供了一個屬于ISO OSI 9層網(wǎng)絡(luò)模型中的第二層的分類/排序引擎實現(xiàn)了交換機的部分功能,為了提供合適的性能,它必須使用到一堆緩存隊列,因此支持VMDq的網(wǎng)卡通常也支持RSS接收方擴展功能
在支持VMDq的網(wǎng)卡上,用硬件實現(xiàn)了一個Layer 2分類/排序器,通過MAC地址或者VLAN來講數(shù)據(jù)包發(fā)送到指定的虛擬機隊列中去(這堆隊列叫做pool),最后的VMM軟件只需要非常簡單的數(shù)據(jù)復(fù)制工作就可以完成虛擬交換機的任務(wù)。從而極大地提升了虛擬化網(wǎng)絡(luò)效率。
支持VMDq隊列的網(wǎng)卡通常也支持RSS隊列,例如Intel 82576EB網(wǎng)卡支持8個虛擬機隊列,支持16個RSS隊列,它們實質(zhì)上都是16個發(fā)送/接收隊列對的劃分,另外意味著,每個虛擬機可以分配到兩個發(fā)送/接收隊列對。
Hyper-V 1.0,也就是Windows Server 2008攜帶的版本,所有的網(wǎng)絡(luò)IO都需要經(jīng)過經(jīng)過純軟件實現(xiàn)的虛擬交換機
Hyper-V 2.0,也就是Windows Server 2008 R2攜帶的版本,提供了一個新的VMQ特性,它利用硬件的VMDq將虛擬交換機的大部分工作放到了網(wǎng)卡上,并通過內(nèi)存映射設(shè)計避免了數(shù)據(jù)需要在多個空間來來回復(fù)制移動
VMware的NetQueue同樣也利用了VMDq技術(shù),實現(xiàn)了兩倍以上的吞吐量提升