本發(fā)明屬于KVM虛擬化領(lǐng)域,具體涉及一種KVM的網(wǎng)絡(luò)性能優(yōu)化方法。
背景技術(shù):
KVM是目前較為常用的一種虛擬化實現(xiàn)方案,而KVM在同時運行的虛擬機數(shù)目達到較高數(shù)目時,其網(wǎng)絡(luò)瓶頸往往成為制約其性能的關(guān)鍵,為了提升網(wǎng)絡(luò)性能,單純的更換千兆網(wǎng)卡為萬兆網(wǎng)卡往往不能得到希望的結(jié)果。
在使用萬兆網(wǎng)卡作為KVM的網(wǎng)絡(luò)通信手段下,如何更好的提升系統(tǒng)的網(wǎng)絡(luò)性能,減少系統(tǒng)的資源占用是急需解決的問題。
技術(shù)實現(xiàn)要素:
為了克服上述問題,本發(fā)明提供如下技術(shù)方案:
一種KVM的網(wǎng)絡(luò)性能優(yōu)化方法,KVM虛擬機系統(tǒng)將物理網(wǎng)卡虛擬成多個虛擬網(wǎng)卡,虛擬機管理器將每個虛擬網(wǎng)卡配置給虛擬機,包括如下步驟:
S1. KVM虛擬機系統(tǒng)通過第一CPU檢測虛擬機數(shù)目;
S2.當(dāng)檢測到的虛擬機數(shù)目M1小于設(shè)定閾值M時,回到步驟S1;
S3.當(dāng)檢測到的虛擬機數(shù)目M1大于等于設(shè)定閾值M時,第一CPU判定所需虛擬網(wǎng)卡數(shù)目為N1;
S4.第一CPU將物理網(wǎng)卡配置為N1個虛擬網(wǎng)卡;
S5.虛擬機管理器采用intel VT-d技術(shù)通過軟件為每個虛擬機添加指定的虛擬網(wǎng)卡。
進一步地,步驟S5之后還包括如下步驟:
S6. KVM虛擬機系統(tǒng)通過第一CPU檢測虛擬機數(shù)目M1是否發(fā)生變化;
S7.當(dāng)檢測到的虛擬機數(shù)目M1不變時,回到步驟S6;
S8.當(dāng)檢測到的虛擬機數(shù)目M1發(fā)生變化時,若虛擬機數(shù)目M1小于設(shè)定閾值M,第一CPU結(jié)束物理網(wǎng)卡的虛擬配置,回到步驟S1;
S9.若虛擬機數(shù)目M1大于等于設(shè)定閾值M,回到步驟S3。
進一步地,所述步驟S4中第一CPU采用SR-IOV技術(shù)將物理網(wǎng)卡配置為N1個虛擬網(wǎng)卡,具體步驟如下:
S41,在BIOS中打開VT-d技術(shù)和SR-IOV;
S42,編輯grub啟動菜單:打開輸入輸出內(nèi)存管理單元,指定IO調(diào)度器,解除每個虛擬網(wǎng)卡的內(nèi)存限制和輸入輸出控制的限制;
S43,設(shè)置Linux內(nèi)核參數(shù):設(shè)置KVM虛擬機系統(tǒng)的進程最小運行時間,設(shè)置KVM虛擬機系統(tǒng)的進程被喚醒后最小運行時間的基數(shù),設(shè)置KVM虛擬機系統(tǒng)一個運行隊列所有進程運行一次的周期;
S44,加載物理網(wǎng)卡驅(qū)動程序模塊配置文件,設(shè)置虛擬功能數(shù)等于虛擬網(wǎng)卡數(shù)目N1,同時禁用虛擬網(wǎng)卡驅(qū)動程序。
進一步地,所述步驟S8中結(jié)束物理網(wǎng)卡的虛擬配置的具體步驟如下:
S81,在BIOS中關(guān)閉VT-d技術(shù)和SR-IOV;
S82,加載物理網(wǎng)卡驅(qū)動程序模塊配置文件,設(shè)置虛擬功能數(shù)等于0。
進一步地,
所述步驟S42中指定deadline為默認的IO調(diào)度器,通過Cgroup解除每個虛擬網(wǎng)卡的內(nèi)存限制和輸入輸出控制的限制;
所述步驟S43中KVM虛擬機系統(tǒng)的進程最小運行時間設(shè)置為4000000ns, KVM虛擬機系統(tǒng)的進程被喚醒后最小運行的時間的基數(shù)設(shè)置為4000000ns, KVM虛擬機系統(tǒng)一個運行隊列所有進程運行一次的周期設(shè)置為32000000ns;
所述步驟S44中,加載物理網(wǎng)卡驅(qū)動程序模塊配置文件為ixgbe.conf,同時禁用虛擬網(wǎng)卡驅(qū)動程序為ixgbevf。
進一步地,所述KVM虛擬機系統(tǒng)運行在多核服務(wù)器上,第一CPU處于忙碌狀態(tài)時,其他空閑CPU檢測虛擬機數(shù)目。
進一步地,步驟S3中所需虛擬網(wǎng)卡數(shù)目N1為虛擬機數(shù)目M1的倍數(shù)。
進一步地,所述物理網(wǎng)卡10G網(wǎng)卡,數(shù)目至少為一個。
進一步地,手動將物理網(wǎng)卡中斷綁定到第二CPU,具體步驟如下:
a1,停止物理網(wǎng)卡中斷與CPU的自動綁定狀態(tài);
a2,查看物理網(wǎng)卡對應(yīng)的網(wǎng)絡(luò)中斷號;
a3,通過網(wǎng)絡(luò)中斷號把對應(yīng)物理網(wǎng)卡綁定到第二CPU。
進一步地,當(dāng)?shù)诙﨏PU處于忙碌狀態(tài)時,手動將物理網(wǎng)卡中斷綁定到其他空閑的一個或多個CPU。
經(jīng)過網(wǎng)卡中斷手動綁定和物理網(wǎng)卡虛擬化之前,有數(shù)據(jù)到達物理網(wǎng)卡,物理網(wǎng)卡產(chǎn)生中斷,中斷隨機分配到某個CPU,CPU響應(yīng)中斷,加載物理網(wǎng)卡驅(qū)動程序,CPU將數(shù)據(jù)傳輸?shù)教摂M機管理器,虛擬機管理器將數(shù)據(jù)分配給某個虛擬機處理,數(shù)據(jù)處理完畢,產(chǎn)生中斷關(guān)閉信號給CPU。
經(jīng)過網(wǎng)卡中斷手動綁定和物理網(wǎng)卡虛擬化之后,有數(shù)據(jù)到達物理網(wǎng)卡,物理網(wǎng)卡產(chǎn)生中斷,中斷到達綁定的第二CPU或者其他一個或多個空閑CPU,CPU響應(yīng)中斷,加載物理網(wǎng)卡驅(qū)動程序,驅(qū)動程序加載完畢,產(chǎn)生關(guān)中斷信號給CPU,物理網(wǎng)卡通過DMA將數(shù)據(jù)從虛擬網(wǎng)卡直接傳到對應(yīng)的虛擬機,而不需要再經(jīng)過虛擬機管理器。
本發(fā)明的有益技術(shù)效果:本發(fā)明通過檢測虛擬機數(shù)目確定物理網(wǎng)卡的狀態(tài),虛擬機數(shù)目較多時,將物理網(wǎng)卡虛擬分配成多個虛擬網(wǎng)卡,為每個虛擬機配置虛擬網(wǎng)卡,實現(xiàn)從虛擬機環(huán)境直接訪問網(wǎng)卡,減少了網(wǎng)卡數(shù)量,簡化了布線,減少了交換機端口,提高網(wǎng)卡的利用率,減少或消除對傳統(tǒng)服務(wù)器的CPU使用以及從物理網(wǎng)卡到虛擬機管理器再到虛擬機之間的數(shù)據(jù)流傳輸時間延遲,可以有效提升KVM下多虛擬機并行運行時系統(tǒng)的網(wǎng)絡(luò)性能;同時手動分配網(wǎng)卡中斷也可以有效減少因為中斷分配造成的系統(tǒng)CPU占用過高問題,可以顯著提升整體系統(tǒng)的網(wǎng)絡(luò)響應(yīng)速度。
此外,本發(fā)明設(shè)計原理可靠,結(jié)構(gòu)簡單,具有非常廣泛的應(yīng)用前景。
由此可見,本發(fā)明與現(xiàn)有技術(shù)相比,具有突出的實質(zhì)性特點和顯著的進步,其實施的有益效果也是顯而易見的。
附圖說明
圖1為本發(fā)明的流程圖;
圖2為應(yīng)用本發(fā)明前的網(wǎng)絡(luò)示意圖;
圖3和圖4為本發(fā)明的網(wǎng)絡(luò)示意圖;
其中:1、10G網(wǎng)卡;2、第一虛擬網(wǎng)卡;3、第二虛擬網(wǎng)卡;4、第三虛擬網(wǎng)卡;5、第四虛擬網(wǎng)卡;6、第一虛擬機;7、第二虛擬機;8、第三虛擬機;9、第四虛擬機;10、第五虛擬網(wǎng)卡;11、第六虛擬網(wǎng)卡;12、第五虛擬機;13、第六虛擬機;14、第一CPU。
具體實施方式:
為使得本發(fā)明的目的、特征、優(yōu)點能夠更加的明顯和易懂,下面將結(jié)合本具體實施例中的附圖,對本發(fā)明中的技術(shù)方案進行清楚、完整地描述。
如圖1、圖2和圖3所示,本發(fā)明提供一種KVM的網(wǎng)絡(luò)性能優(yōu)化方法,KVM虛擬機系統(tǒng)將物理網(wǎng)卡虛擬成多個虛擬網(wǎng)卡,虛擬機管理器將每個虛擬網(wǎng)卡配置給虛擬機,以虛擬機數(shù)目的設(shè)定閾值取4為例,包括如下步驟:
KVM虛擬機系統(tǒng)通過第一CPU檢測虛擬機數(shù)目;
當(dāng)檢測到的虛擬機數(shù)目M1小于設(shè)定閾值4時,第一CPU繼續(xù)檢測虛擬機數(shù)目;
當(dāng)檢測到的虛擬機數(shù)目M1等于設(shè)定閾值4時,第一CPU判定所需虛擬網(wǎng)卡數(shù)目為4;
第一CPU將物理網(wǎng)卡配置為4個虛擬網(wǎng)卡;第一CPU采用SR-IOV技術(shù)將物理網(wǎng)卡配置為4個虛擬網(wǎng)卡,具體步驟如下:
在BIOS中打開VT-d技術(shù)和SR-IOV;
編輯grub啟動菜單:打開輸入輸出內(nèi)存管理單元,指定deadline為默認的IO調(diào)度器,通過Cgroup解除每個虛擬網(wǎng)卡的內(nèi)存限制和輸入輸出控制的限制;
設(shè)置Linux內(nèi)核參數(shù):設(shè)置KVM虛擬機系統(tǒng)的進程最小運行時間為4000000ns,設(shè)置KVM虛擬機系統(tǒng)的進程被喚醒后至少應(yīng)該運行的時間的基數(shù)為4000000ns,設(shè)置KVM虛擬機系統(tǒng)一個運行隊列所有進程運行一次的周期為32000000ns;
加載物理網(wǎng)卡驅(qū)動程序模塊配置文件ixgbe.conf,添加虛擬功能數(shù)等于虛擬網(wǎng)卡數(shù)目4,禁用虛擬網(wǎng)卡驅(qū)動程序ixgbevf。
虛擬機管理器采用intel VT-d技術(shù)通過軟件為每個虛擬機添加指定的虛擬網(wǎng)卡;
KVM虛擬機系統(tǒng)通過第一CPU檢測虛擬機數(shù)目M1是否發(fā)生變化;
當(dāng)檢測到的虛擬機數(shù)目M1不變還是4時,繼續(xù)回到前一步檢測虛擬機數(shù)目M1是否發(fā)生變化;
當(dāng)檢測到的虛擬機數(shù)目M1發(fā)生變化時,若虛擬機數(shù)目M1小于設(shè)定閾值4,第一CPU結(jié)束物理網(wǎng)卡的虛擬配置,具體步驟如下:
在BIOS中關(guān)閉VT-d技術(shù)和SR-IOV;
加載物理網(wǎng)卡驅(qū)動程序模塊配置文件為ixgbe.conf,設(shè)置虛擬功能數(shù)等于0;
繼續(xù)檢測虛擬機數(shù)目;
如圖4所示,若虛擬機數(shù)目M1為6大于設(shè)定閾值4時,第一CPU重新判定所需虛擬網(wǎng)卡數(shù)目為6;
第一CPU將物理網(wǎng)卡配置為6個虛擬網(wǎng)卡;加載物理網(wǎng)卡驅(qū)動程序模塊配置文件ixgbe.conf,添加虛擬功能數(shù)等于虛擬網(wǎng)卡數(shù)目6,禁用虛擬網(wǎng)卡驅(qū)動程序ixgbevf。
虛擬機管理器采用intel VT-d技術(shù)通過軟件為每個虛擬機添加指定的虛擬網(wǎng)卡;
第一CPU繼續(xù)檢測虛擬機數(shù)目M1是否發(fā)生變化。
經(jīng)過網(wǎng)卡中斷手動綁定和物理網(wǎng)卡虛擬化之前,有數(shù)據(jù)到達10G網(wǎng)卡1,10G網(wǎng)卡1產(chǎn)生中斷,中斷隨機分配到某個CPU,CPU響應(yīng)中斷,加載物理網(wǎng)卡驅(qū)動程序,CPU將數(shù)據(jù)傳輸?shù)教摂M機管理器,虛擬機管理器將數(shù)據(jù)分配給某個虛擬機處理,數(shù)據(jù)處理完畢,產(chǎn)生中斷關(guān)閉信號給CPU。
經(jīng)過網(wǎng)卡中斷手動綁定和物理網(wǎng)卡虛擬化之后,有數(shù)據(jù)到達10G網(wǎng)卡1,10G網(wǎng)卡1產(chǎn)生中斷,中斷到達綁定的第二CPU,第二CPU響應(yīng)中斷,加載物理網(wǎng)卡驅(qū)動程序,驅(qū)動程序加載完畢,產(chǎn)生關(guān)中斷信號給第二CPU,10G網(wǎng)卡1通過DMA將數(shù)據(jù)從虛擬網(wǎng)卡直接傳到對應(yīng)的虛擬機,而不需要再經(jīng)過虛擬機管理器;第二CPU處于忙碌狀態(tài)時,手動將物理網(wǎng)卡中斷綁定到其他空閑的一個或多個CPU。
Kernel-based Virtual Machine的簡稱,是一個開源的系統(tǒng)虛擬化模塊,自Linux 2.6.20之后集成在Linux的各個主要發(fā)行版本中。
SR-IOV 技術(shù)是一種基于硬件的虛擬化解決方案,可提高性能和可伸縮性。SR-IOV 標準允許在虛擬機之間高效共享 PCIe(Peripheral Component Interconnect Express,快速外設(shè)組件互連)設(shè)備,并且它是在硬件中實現(xiàn)的,可以獲得能夠與本機性能媲美的 I/O 性能。SR-IOV 規(guī)范定義了新的標準,根據(jù)該標準,創(chuàng)建的新設(shè)備可允許將虛擬機直接連接到 I/O 設(shè)備。
英特爾VT具體包括分別針對處理器、芯片組、網(wǎng)絡(luò)的VT-X、VT-D和VT-C技術(shù)。intel VT-d是英特爾支持直接 I/O 訪問的 VT虛擬化技術(shù)。
BIOS是英文"Basic Input Output System"的縮略詞,直譯過來后中文名稱就是"基本輸入輸出系統(tǒng)"。
GNU GRUB(GRand Unified Bootloader簡稱“GRUB”)是一個來自GNU項目的多操作系統(tǒng)啟動程序。GRUB是多啟動規(guī)范的實現(xiàn),它允許用戶可以在計算機內(nèi)同時擁有多個操作系統(tǒng),并在計算機啟動時選擇希望運行的操作系統(tǒng)。GRUB可用于選擇操作系統(tǒng)分區(qū)上的不同內(nèi)核,也可用于向這些內(nèi)核傳遞啟動參數(shù)。
Linux內(nèi)核2.6開始引入了全新的IO調(diào)度子系統(tǒng)。Linux內(nèi)核提供了CFQ(默認), deadline和noop三種IO調(diào)度器。deadline調(diào)度算法主要針對I/O請求的延時而設(shè)計,每個I/O請求都被附加一個最后執(zhí)行期限。該算法維護兩類隊列,一是按照扇區(qū)排序的讀寫請求隊列;二是按照過期時間排序的讀寫請求隊列。如果當(dāng)前沒有I/O請求過期,則會按照扇區(qū)順序執(zhí)行I/O請求;如果發(fā)現(xiàn)過期的I/O請求,則會處理按照過期時間排序的隊列,直到所有過期請求都被發(fā)射為止。在處理請求時,該算法會優(yōu)先考慮讀請求。 當(dāng)系統(tǒng)中存在的I/O請求進程數(shù)量比較少時,與CFQ算法相比,deadline算法可以提供較高的I/O吞吐率。
Cgroup 是control group的簡稱,它為Linux內(nèi)核提供了一種任務(wù)聚集和劃分的機制,通過一組參數(shù)集合將一些任務(wù)組織成一個或多個子系統(tǒng)。
ixgbe.conf是適用于 10 千兆位英特爾網(wǎng)絡(luò)連接基礎(chǔ)驅(qū)動程序 。
ixgbevf是虛擬網(wǎng)卡驅(qū)動程序。
DMA(Direct Memory Access,直接內(nèi)存存取) 是所有現(xiàn)代電腦的重要特色,它允許不同速度的硬件裝置來溝通,而不需要依賴于 CPU 的大量中斷負載。
上述實施例是說明性的,而非限定性的,上述實施例只是幫助理解本發(fā)明,因此本發(fā)明不限于具體實施方式中所述的實施例,凡是由本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明的技術(shù)方案得出的其他的具體實施方式,同樣屬于本發(fā)明保護的范圍。