Hyper-V 性能加速之VMQ
善假于“物”——網(wǎng)卡RSS技術(shù)
????????在介紹VMQ之前,我們先來看看在傳統(tǒng)的物理服務(wù)器上,網(wǎng)卡是如何接收網(wǎng)絡(luò)數(shù)據(jù)的。在多核CPU出現(xiàn)的時候,因為網(wǎng)卡不支持將網(wǎng)絡(luò)流量中斷到多個邏輯核而是中斷到其中一個邏輯核進行處理,這樣就造成CPU使用不平均以及降低了CPU處理網(wǎng)絡(luò)流量的效率,如圖1所示。
圖1 網(wǎng)卡中斷一個CPU邏輯核接收數(shù)據(jù)
????????而現(xiàn)在大部分的網(wǎng)卡都已經(jīng)支持接收端縮放(Receive SideScaling,以下簡稱為RSS),物理機網(wǎng)卡如果支持多個硬件接收隊列,則會將接收的數(shù)據(jù)分發(fā)到網(wǎng)卡的多個隊列里,在具備多核的物理服務(wù)器上,通過網(wǎng)卡的RSS技術(shù)將多個隊列中斷不同的CPU邏輯核來提高數(shù)據(jù)接收效率,如圖2所示。RSS技術(shù)的目的在于為隊列找到最佳的CPU邏輯核來平衡網(wǎng)絡(luò)的CPU開銷。
圖2 RSS隊列中斷多個CPU邏輯核接收數(shù)據(jù)
?
Hyper-V虛機隊列的工作方式
????????虛擬化環(huán)境的情況比物理環(huán)境要復(fù)雜些,其一是因為物理機網(wǎng)卡發(fā)生“形變”成虛擬交換機之后網(wǎng)卡喪失了RSS功能,其二是由于物理機上運行了若干臺虛機,物理機和虛機通過相同的網(wǎng)卡接收數(shù)據(jù)包,所以需要尋求同等有效的方法來平衡網(wǎng)絡(luò)的CPU開銷,并同時保證虛機的網(wǎng)絡(luò)性能。VMQ技術(shù)因需而生,VMQ是一種特殊的隊列,采用和網(wǎng)卡硬件類似的隊列,并采用類似于RSS為隊列中斷不同的CPU邏輯核的機制。所不同的是,VMQ篩選和分配數(shù)據(jù)包與網(wǎng)卡硬件隊列的邏輯不一樣,在只有物理機的情況下,物理機的網(wǎng)卡只考慮物理機自己數(shù)據(jù)隊列,而在虛擬化環(huán)境中虛擬交換機不僅要平衡物理機的隊列還要照顧虛機的隊列。
????????在介紹VMQ工作原理之前,我們先來了解虛擬交換機數(shù)據(jù)包的路由路徑,Hyper-V虛擬交換機存在兩種隊列—VMQ和默認(rèn)隊列。默認(rèn)隊列的數(shù)據(jù)先后通過虛擬交換機的路由、篩選、擴展、訪問控制列表和轉(zhuǎn)發(fā)路徑,最后由虛機總線進行數(shù)據(jù)分發(fā),如圖3所示。
圖3 虛擬交換機數(shù)據(jù)轉(zhuǎn)發(fā)路徑
????????VMQ隊列在分發(fā)數(shù)據(jù)給隊列之前先將虛機虛擬網(wǎng)卡的MAC地址收集起來,然后通過VMQ MAC篩選器為啟用了VMQ的虛機分配VMQ隊列,未啟用VMQ的虛機和不能匹配VMQ MAC篩選器的數(shù)據(jù)將繼續(xù)放置在默認(rèn)隊列里。VMQ隊列不像默認(rèn)隊列一樣通過完整的路由、篩選、擴展、訪問控制列表和轉(zhuǎn)發(fā)路徑,而是“插隊”到擴展通過更少的路由代碼發(fā)送數(shù)據(jù)給虛機總線,數(shù)據(jù)由虛機總線發(fā)送給虛擬網(wǎng)卡后,虛機使用虛擬RSS(vRSS)技術(shù)為虛擬網(wǎng)卡上的隊列中斷虛擬CPU,如圖4所示。
圖4 VMQ隊列和默認(rèn)隊列
?????????從圖4中我們可以清楚地認(rèn)識到VMQ帶來的好處。如果虛機網(wǎng)卡屬性啟用了VMQ功能,虛擬交換機將繞過虛擬交換機層層路由代碼,如此一來可以保證數(shù)據(jù)能夠精確而快速地將轉(zhuǎn)發(fā)給虛機,對比沒有VMQ的情況下,不但可以減少處理路由所需CPU資源占用,而且可以降低數(shù)據(jù)傳送的延遲。
????????VMQ又有動態(tài)和靜態(tài)的區(qū)分,靜態(tài)VMQ指的是VMQ隊列和中斷的CPU邏輯核關(guān)聯(lián)關(guān)系是固定的。圖4是典型的靜態(tài)VMQ,網(wǎng)卡里給虛擬1分配的VMQ隊列和邏輯CPU1關(guān)聯(lián),給虛擬2分配的VMQ隊列和邏輯CPU2關(guān)聯(lián),在虛機1和虛機2整個生命周期內(nèi)不會改變,可以認(rèn)為虛機1的數(shù)據(jù)一直由邏輯CPU1處理,而虛機2的數(shù)據(jù)一直由邏輯CPU2處理。靜態(tài)VMQ在虛機關(guān)聯(lián)的CPU繁忙時可能會導(dǎo)致虛機網(wǎng)絡(luò)處理變慢,因此從WindowsServer 2012 R2開始引入了動態(tài)VMQ的機制,動態(tài)VMQ更加智能,顧名思義動態(tài)VMQ允許虛機網(wǎng)絡(luò)根據(jù)負(fù)載和其關(guān)聯(lián)的邏輯CPU進行動態(tài)關(guān)聯(lián)調(diào)整。如圖5所示,當(dāng)邏輯CPU2處于相對空閑狀態(tài)時,虛機1和虛機2的VMQ隊列都關(guān)聯(lián)到邏輯CPU2。
圖5 動態(tài)VMQ
???????? 在了解VMQ和動態(tài)VMQ基本原理后,我們可以實際了解下網(wǎng)卡的RSS和虛擬網(wǎng)卡的vRSS默認(rèn)接收隊列數(shù)和默認(rèn)使用處理器數(shù)量信息,通過以下示例命令和結(jié)果可以顯示網(wǎng)卡的隊列數(shù)和使用的處理器數(shù),示例中的Ethernet4這塊網(wǎng)卡RSS默認(rèn)接收隊列數(shù)為8,默認(rèn)使用最多處理器數(shù)量為16。
PS?C:\>?Get-NetworkAdapterRss?-Name??“Ethernet?4”Name | : Ethernet ?4 |
InterfaceDescription | : Intel Ethernet CNA X540-T2 ?#2 |
Enabled | : True |
NumberOfReceiveQueues | : 8 |
Profile?? | : NUMAStatic ? |
BaseProcessor:[Group:Number] ?[Group:Number] ?[Group:Number] ?[Group:Number] | : 0 |
MaxProcessor:[Group:Number]【[][Group:Number] | : : |
MaxProcessors? | : 16 |
????????其中幾個重要的參數(shù)說明如下:
Enabled:啟用或者禁用RSS;
BaseProcessor:系統(tǒng)分配給網(wǎng)卡的最小處理器數(shù)量;[Group:Number] – 處理器組數(shù)量和處理器數(shù)量比。
MaxProcessor:分配給網(wǎng)卡的最大處理器數(shù)量;[Group:Number] - 處理器組數(shù)量和處理器數(shù)量比。
MaxProcessors:分配給網(wǎng)卡的處理器總數(shù)的最大值。
????????我們可以通過Set-NetAdapter命令設(shè)置參與接收隊列數(shù)和RSS中斷的最大CPU數(shù)量,如下示例將網(wǎng)卡Ethernet4的RSS默認(rèn)接收隊列數(shù)為16。
PS?C:\>?Set-NetworkAdapterRss?-Name??“Ethernet?4”?-NumberOfReceiveQueues?16Name | : Ethernet ?4 |
InterfaceDescription | : Intel Ethernet CNA X540-T2 ?#2 |
Enabled | : True |
NumberOfReceiveQueues | : 16 |
Profile?? | : NUMAStatic ? |
BaseProcessor:[Group:Number] ?[Group:Number] ?[Group:Number] ?[Group:Number] | : 0 |
MaxProcessor:[Group:Number]【[][Group:Number] | : : |
MaxProcessors? | : 16 |
???????虛機VMQ開啟關(guān)閉也比較簡單,默認(rèn)情況下,Hyper-V虛機會啟用VMQ功能。我們可以依據(jù)虛機是否需要VMQ和實際的網(wǎng)卡性能進行開啟或者關(guān)閉。如果虛機過多而網(wǎng)卡的VMQ隊列又不足時,我們還可以適時為啟用了VMQ的虛機設(shè)置VMQ權(quán)重,權(quán)重高的虛機網(wǎng)絡(luò)數(shù)據(jù)將優(yōu)先置于VMQ隊列,反之亦然,默認(rèn)的VMQ權(quán)重是100,如下示例所示。
PS?C:\>?Set-NetworkAdapterRss?-Name??“Ethernet?4”?-NumberOfReceiveQueues?16VMQWeight? : 100 |
????????
轉(zhuǎn)載于:https://blog.51cto.com/ichbinleo/1897503
總結(jié)
以上是生活随笔為你收集整理的Hyper-V 性能加速之VMQ的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php遍历指定目录中的内容2
- 下一篇: ubuntu安装wkhtmltopdf