您好,登錄后才能下訂單哦!
善假于“物”——網卡RSS技術
在介紹VMQ之前,我們先來看看在傳統的物理服務器上,網卡是如何接收網絡數據的。在多核CPU出現的時候,因為網卡不支持將網絡流量中斷到多個邏輯核而是中斷到其中一個邏輯核進行處理,這樣就造成CPU使用不平均以及降低了CPU處理網絡流量的效率,如圖1所示。
圖1 網卡中斷一個CPU邏輯核接收數據
而現在大部分的網卡都已經支持接收端縮放(Receive SideScaling,以下簡稱為RSS),物理機網卡如果支持多個硬件接收隊列,則會將接收的數據分發到網卡的多個隊列里,在具備多核的物理服務器上,通過網卡的RSS技術將多個隊列中斷不同的CPU邏輯核來提高數據接收效率,如圖2所示。RSS技術的目的在于為隊列找到最佳的CPU邏輯核來平衡網絡的CPU開銷。
圖2 RSS隊列中斷多個CPU邏輯核接收數據
Hyper-V虛機隊列的工作方式
虛擬化環境的情況比物理環境要復雜些,其一是因為物理機網卡發生“形變”成虛擬交換機之后網卡喪失了RSS功能,其二是由于物理機上運行了若干臺虛機,物理機和虛機通過相同的網卡接收數據包,所以需要尋求同等有效的方法來平衡網絡的CPU開銷,并同時保證虛機的網絡性能。VMQ技術因需而生,VMQ是一種特殊的隊列,采用和網卡硬件類似的隊列,并采用類似于RSS為隊列中斷不同的CPU邏輯核的機制。所不同的是,VMQ篩選和分配數據包與網卡硬件隊列的邏輯不一樣,在只有物理機的情況下,物理機的網卡只考慮物理機自己數據隊列,而在虛擬化環境中虛擬交換機不僅要平衡物理機的隊列還要照顧虛機的隊列。
在介紹VMQ工作原理之前,我們先來了解虛擬交換機數據包的路由路徑,Hyper-V虛擬交換機存在兩種隊列—VMQ和默認隊列。默認隊列的數據先后通過虛擬交換機的路由、篩選、擴展、訪問控制列表和轉發路徑,最后由虛機總線進行數據分發,如圖3所示。
圖3 虛擬交換機數據轉發路徑
VMQ隊列在分發數據給隊列之前先將虛機虛擬網卡的MAC地址收集起來,然后通過VMQ MAC篩選器為啟用了VMQ的虛機分配VMQ隊列,未啟用VMQ的虛機和不能匹配VMQ MAC篩選器的數據將繼續放置在默認隊列里。VMQ隊列不像默認隊列一樣通過完整的路由、篩選、擴展、訪問控制列表和轉發路徑,而是“插隊”到擴展通過更少的路由代碼發送數據給虛機總線,數據由虛機總線發送給虛擬網卡后,虛機使用虛擬RSS(vRSS)技術為虛擬網卡上的隊列中斷虛擬CPU,如圖4所示。
圖4 VMQ隊列和默認隊列
從圖4中我們可以清楚地認識到VMQ帶來的好處。如果虛機網卡屬性啟用了VMQ功能,虛擬交換機將繞過虛擬交換機層層路由代碼,如此一來可以保證數據能夠精確而快速地將轉發給虛機,對比沒有VMQ的情況下,不但可以減少處理路由所需CPU資源占用,而且可以降低數據傳送的延遲。
VMQ又有動態和靜態的區分,靜態VMQ指的是VMQ隊列和中斷的CPU邏輯核關聯關系是固定的。圖4是典型的靜態VMQ,網卡里給虛擬1分配的VMQ隊列和邏輯CPU1關聯,給虛擬2分配的VMQ隊列和邏輯CPU2關聯,在虛機1和虛機2整個生命周期內不會改變,可以認為虛機1的數據一直由邏輯CPU1處理,而虛機2的數據一直由邏輯CPU2處理。靜態VMQ在虛機關聯的CPU繁忙時可能會導致虛機網絡處理變慢,因此從WindowsServer 2012 R2開始引入了動態VMQ的機制,動態VMQ更加智能,顧名思義動態VMQ允許虛機網絡根據負載和其關聯的邏輯CPU進行動態關聯調整。如圖5所示,當邏輯CPU2處于相對空閑狀態時,虛機1和虛機2的VMQ隊列都關聯到邏輯CPU2。
圖5 動態VMQ
在了解VMQ和動態VMQ基本原理后,我們可以實際了解下網卡的RSS和虛擬網卡的vRSS默認接收隊列數和默認使用處理器數量信息,通過以下示例命令和結果可以顯示網卡的隊列數和使用的處理器數,示例中的Ethernet4這塊網卡RSS默認接收隊列數為8,默認使用最多處理器數量為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 |
其中幾個重要的參數說明如下:
Enabled:啟用或者禁用RSS;
BaseProcessor:系統分配給網卡的最小處理器數量;[Group:Number] – 處理器組數量和處理器數量比。
MaxProcessor:分配給網卡的最大處理器數量;[Group:Number] - 處理器組數量和處理器數量比。
MaxProcessors:分配給網卡的處理器總數的最大值。
我們可以通過Set-NetAdapter命令設置參與接收隊列數和RSS中斷的最大CPU數量,如下示例將網卡Ethernet4的RSS默認接收隊列數為16。
PS C:\> Set-NetworkAdapterRss -Name “Ethernet 4” -NumberOfReceiveQueues 16
Name | : 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開啟關閉也比較簡單,默認情況下,Hyper-V虛機會啟用VMQ功能。我們可以依據虛機是否需要VMQ和實際的網卡性能進行開啟或者關閉。如果虛機過多而網卡的VMQ隊列又不足時,我們還可以適時為啟用了VMQ的虛機設置VMQ權重,權重高的虛機網絡數據將優先置于VMQ隊列,反之亦然,默認的VMQ權重是100,如下示例所示。
PS C:\> Set-NetworkAdapterRss -Name “Ethernet 4” -NumberOfReceiveQueues 16
VMQWeight : 100 |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。