本發(fā)明涉及網(wǎng)絡(luò)虛擬化領(lǐng)域,特別是涉及一種虛擬網(wǎng)絡(luò)優(yōu)化方法與系統(tǒng)。
背景技術(shù):
虛擬化是云計(jì)算的基礎(chǔ)技術(shù),網(wǎng)絡(luò)虛擬化則是虛擬化技術(shù)的重要支撐,其對(duì)云計(jì)算平臺(tái)的整體效率有著至關(guān)重要的影響。網(wǎng)絡(luò)虛擬化的性能優(yōu)化十分具有挑戰(zhàn)性,高速的網(wǎng)絡(luò)設(shè)備要在很短的時(shí)間間隔內(nèi)收發(fā)大量的網(wǎng)絡(luò)包,而每個(gè)網(wǎng)絡(luò)包的處理不可避免的伴隨著額外的虛擬化開銷。虛擬網(wǎng)絡(luò)的發(fā)送過程可以利用下移、零拷貝以及Nagle算法優(yōu)化等方法來優(yōu)化,但是由于虛擬網(wǎng)絡(luò)軟件棧的特殊性,其接收過程可用的優(yōu)化手段較少,導(dǎo)致接收性能受虛擬化影響更大。網(wǎng)絡(luò)接收,尤其是網(wǎng)絡(luò)小網(wǎng)絡(luò)包(小包)的接收,是諸如LVS(Linux Virtual Server)、Memcached等的網(wǎng)絡(luò)服務(wù)的主要性能瓶頸。虛擬網(wǎng)絡(luò)中的網(wǎng)絡(luò)包處理將占用一定的CPU資源,且隨著新一代的10GbE、40GbE高速以太網(wǎng)的應(yīng)用與普及,大量的網(wǎng)絡(luò)包處理將導(dǎo)致CPU飽和、網(wǎng)絡(luò)性能的擴(kuò)展性降低。
網(wǎng)絡(luò)虛擬化接收過程的開銷一般分為兩類:每字節(jié)(Per-Byte)開銷和每包(Per-Packet)開銷。每字節(jié)開銷主要包括數(shù)據(jù)拷貝、校驗(yàn)計(jì)算等的開銷,傳統(tǒng)上是網(wǎng)絡(luò)接收過程的主要開銷;隨著現(xiàn)代CPU體系結(jié)構(gòu)的發(fā)展,特別是激進(jìn)的預(yù)取策略以及緩存直接訪問技術(shù)的發(fā)展,每字節(jié)開銷得到了大幅優(yōu)化。每包開銷,例如協(xié)議處理和緩沖區(qū)管理,成為網(wǎng)絡(luò)接收的主要開銷;對(duì)于網(wǎng)絡(luò)小網(wǎng)絡(luò)包而言,由于需拷貝、校驗(yàn)的數(shù)據(jù)較少,包處理開銷占比更是凸顯。與物理環(huán)境相比,軟件虛擬網(wǎng)絡(luò)在處理路徑上多出了軟件網(wǎng)橋與防火墻、后端驅(qū)動(dòng)、前端驅(qū)動(dòng)等環(huán)節(jié),引入了額外的協(xié)議棧處理、緩沖區(qū)拷貝、上下文切換等開銷,故而降低每包處理開銷對(duì)優(yōu)化虛擬網(wǎng)絡(luò)性能至關(guān)重要。
虛擬機(jī)設(shè)備隊(duì)列(Virtual Machine Device Queue,VMDq)技術(shù)由硬件網(wǎng)卡根據(jù)MAC地址或VLAN來進(jìn)行包的分類與排序,并發(fā)送到指定的虛擬機(jī),虛擬機(jī)監(jiān)視器(Virtual Machine Monitor,VMM)只需進(jìn)行相對(duì)簡單的數(shù)據(jù)拷貝即可實(shí)現(xiàn)虛擬交換,大幅降低了CPU的資源占用。單根I/O虛擬化(Single-Root I/O Virtualization,SR-IOV)技術(shù)由硬件網(wǎng)卡提供虛擬功能(Virtual Function,VF)并直通至虛擬機(jī),不需軟件模擬網(wǎng)卡、不占CPU資源,由網(wǎng)卡實(shí)現(xiàn)高效的共享,可獲得媲美裸機(jī)的I/O性能。此類技術(shù)雖然能夠提供最佳的虛擬化性能,但其要求特定的硬件支持,且由于依賴硬件平臺(tái),虛擬機(jī)的遷移與管理相對(duì)復(fù)雜,在成本、靈活性、應(yīng)用面等方面不及軟件虛擬化的方式。事實(shí)上,在主流的云計(jì)算提供商的服務(wù)中,標(biāo)準(zhǔn)的虛擬機(jī)配置仍然大都采用軟件的I/O虛擬化。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述技術(shù)問題,本發(fā)明目在于,在現(xiàn)有的網(wǎng)絡(luò)虛擬化的架構(gòu)下,優(yōu)化虛擬網(wǎng)絡(luò)接收過程中的每網(wǎng)絡(luò)包開銷。通過將多個(gè)小網(wǎng)絡(luò)包組合成大數(shù)據(jù)包的方式,來減少虛擬機(jī)監(jiān)視器和網(wǎng)絡(luò)棧處理網(wǎng)絡(luò)包的次數(shù)。在虛擬機(jī)前端和后端驅(qū)動(dòng)程序之間通過共享授權(quán)內(nèi)存的方式通信,使盡可能多的網(wǎng)絡(luò)包共用同一授權(quán)頁面,并結(jié)合空閑頁面及引用緩沖的方法,減少寶貴的內(nèi)存頁面映射和授權(quán)開銷,從而降低虛擬網(wǎng)絡(luò)接收過程中的每網(wǎng)絡(luò)包開銷。通過接收端組包與共享授權(quán)頁面的方式,優(yōu)化網(wǎng)絡(luò)虛擬化的整體性能。
具體地說,本發(fā)明公開了一種虛擬網(wǎng)絡(luò)優(yōu)化方法,其中該方法,包括組包步驟、拆包步驟和共享授權(quán)頁面步驟,其中:
組包步驟,將擁有相同源和目的鏈路地址的包組成組合網(wǎng)絡(luò)包,生成組合網(wǎng)絡(luò)包;
共享授權(quán)頁面步驟,接收該組合網(wǎng)絡(luò)包,并將多個(gè)該組合網(wǎng)絡(luò)包通過單一內(nèi)存頁面拷貝至虛擬機(jī)的前端驅(qū)動(dòng);
拆包步驟,接收來自該前端驅(qū)動(dòng)的該組合網(wǎng)絡(luò)包,并根據(jù)I/O應(yīng)答確定該組合網(wǎng)絡(luò)包中的小網(wǎng)絡(luò)包,對(duì)該組合網(wǎng)絡(luò)包進(jìn)行拆分,并將拆分后得到的小網(wǎng)絡(luò)包交由上層網(wǎng)絡(luò)協(xié)議棧進(jìn)行處理。
該虛擬網(wǎng)絡(luò)優(yōu)化方法,其中該組包步驟包括:
步驟S201,將接收到的網(wǎng)絡(luò)包放入每個(gè)CPU的接收隊(duì)列,并從該接收隊(duì)列讀取該網(wǎng)絡(luò)包;
步驟S202,根據(jù)該網(wǎng)絡(luò)包的目的地址,判斷該目的地址是否為虛擬機(jī),若不是,則直接執(zhí)行步驟S206,若是,則繼續(xù)執(zhí)行步驟S203開始組包;
步驟S203,從該網(wǎng)絡(luò)包的套接字緩沖中獲取其源鏈路層地址和目的鏈路層地址,并對(duì)該源鏈路層地址和該目的鏈路層地址進(jìn)行哈希運(yùn)算,生成哈希結(jié)果;
步驟S204,根據(jù)該哈希結(jié)果將該網(wǎng)絡(luò)包插入至相應(yīng)的包隊(duì)列,生成組合網(wǎng)絡(luò)包;
步驟S205,判斷組包結(jié)束條件,若未滿足條件,則繼續(xù)執(zhí)行步驟S202進(jìn)行組包處理,若已滿足條件,則執(zhí)行步驟S206;
步驟S206,將該組合網(wǎng)絡(luò)包交由軟件網(wǎng)橋與鏈路層防火墻進(jìn)行處理;
步驟S207,接收經(jīng)由步驟S206軟件網(wǎng)橋與鏈路層防火墻處理后的該組合網(wǎng)絡(luò)包,后端驅(qū)動(dòng)對(duì)該組合網(wǎng)絡(luò)包設(shè)定特殊標(biāo)志。
該虛擬網(wǎng)絡(luò)優(yōu)化方法,其中該拆包步驟包括:
步驟S208,前端驅(qū)動(dòng)接收網(wǎng)絡(luò)包,并讀取該該網(wǎng)絡(luò)包的I/O應(yīng)答;
步驟S209,根據(jù)該I/O應(yīng)答判斷該網(wǎng)絡(luò)包是否為組合網(wǎng)絡(luò)包,若不是組合網(wǎng)絡(luò)包,則執(zhí)行步驟S211,若是組合網(wǎng)絡(luò)包,則執(zhí)行步驟S210;
步驟S210,根據(jù)該I/O應(yīng)答將該組合網(wǎng)絡(luò)包中的小網(wǎng)絡(luò)包分別拷貝至獨(dú)立的套接字緩沖中;
步驟S211,由客戶虛擬機(jī)上層網(wǎng)絡(luò)協(xié)議棧進(jìn)行后續(xù)處理。
該虛擬網(wǎng)絡(luò)優(yōu)化方法,其中該共享授權(quán)頁面步驟,包括:
步驟S310,后端驅(qū)動(dòng)接收到組合網(wǎng)絡(luò)包時(shí),該后端驅(qū)動(dòng)遍歷該組合網(wǎng)絡(luò)包即以確定該組合網(wǎng)絡(luò)包的大?。?/p>
步驟S320,前端驅(qū)動(dòng)檢查頁面重用緩存是否存在可用的授權(quán)頁面及引用,若存在可用的頁面,則執(zhí)行步驟S321,直接選取可用的頁面并將引用授權(quán)至后端驅(qū)動(dòng);若不存在可用頁面,則執(zhí)行步驟S322,重分配新的頁面及引用授權(quán)至后端驅(qū)動(dòng);
步驟S330,后端驅(qū)動(dòng)獲得該頁面的授權(quán),并通過該引用授權(quán)將該組合網(wǎng)絡(luò)包拷貝至該頁面;
步驟S340,后端驅(qū)動(dòng)根據(jù)該組合網(wǎng)絡(luò)包的大小,判斷授權(quán)頁面剩余空間是否足夠拷貝下一個(gè)組合網(wǎng)絡(luò)包,若空間足夠,則執(zhí)行步驟S330繼續(xù)拷貝數(shù)據(jù),若空間足夠,則執(zhí)行步驟S350;
步驟S350,通知前端驅(qū)動(dòng)該組合網(wǎng)絡(luò)包的到達(dá)。
該虛擬網(wǎng)絡(luò)優(yōu)化方法,其中該組包結(jié)束條件具體為,判斷該接收隊(duì)列中是否有可組網(wǎng)絡(luò)包,若沒有可組網(wǎng)絡(luò)包,則為已滿足條件;若有可組網(wǎng)絡(luò)包,則將該組合網(wǎng)絡(luò)包大小與預(yù)先設(shè)定好的組合網(wǎng)絡(luò)包邊界閾值相比較,若該組合網(wǎng)絡(luò)包大于等于該閾值,則為已滿足條件;若該組合網(wǎng)絡(luò)包小于該閾值,則為未滿足條件。
本發(fā)明還提出了一種虛擬網(wǎng)絡(luò)優(yōu)化系統(tǒng),其中該系統(tǒng),包括組包模塊、拆包模塊和共享授權(quán)頁面模塊,其中:
組包模塊,用于將擁有相同源和目的鏈路地址的包組成組合網(wǎng)絡(luò)包,生成組合網(wǎng)絡(luò)包;
共享授權(quán)頁面模塊,用于接收該組合網(wǎng)絡(luò)包,并將該組合網(wǎng)絡(luò)包拷貝至虛擬機(jī)的前端驅(qū)動(dòng);
拆包模塊,用于接收來自該前端驅(qū)動(dòng)的該組合網(wǎng)絡(luò)包,并根據(jù)I/O應(yīng)答確定該組合網(wǎng)絡(luò)包中的小網(wǎng)絡(luò)包,對(duì)該組合網(wǎng)絡(luò)包進(jìn)行拆分,并將拆分后得到的小網(wǎng)絡(luò)包交由上層網(wǎng)絡(luò)協(xié)議棧進(jìn)行處理。
該虛擬網(wǎng)絡(luò)優(yōu)化方法,其中該組包模塊包括:
第一讀取模塊,用于將接收到的網(wǎng)絡(luò)包放入每個(gè)CPU的接收隊(duì)列,并從該接收隊(duì)列讀取該網(wǎng)絡(luò)包;
判斷模塊,用于根據(jù)結(jié)束條件,決定是否繼續(xù)組包處理;
第一處理模塊,用于根據(jù)該網(wǎng)絡(luò)包的目的地址,判斷該目的地址是否為虛擬機(jī),以決定是否開始組包,并從該網(wǎng)絡(luò)包的套接字緩沖中獲取其源鏈路層地址和目的鏈路層地址,對(duì)該源鏈路層地址和該目的鏈路層地址進(jìn)行哈希運(yùn)算,生成哈希結(jié)果,根據(jù)該哈希結(jié)果將該網(wǎng)絡(luò)包插入至相應(yīng)的包隊(duì)列,生成組合網(wǎng)絡(luò)包,并調(diào)用該判斷模塊,將生成的該組合網(wǎng)絡(luò)包發(fā)送給第一發(fā)送模塊;
第一發(fā)送模塊,用于將該組合網(wǎng)絡(luò)包發(fā)送給軟件網(wǎng)橋與鏈路層防火墻進(jìn)行處理,并將處理后的該組合網(wǎng)絡(luò)包標(biāo)記特殊標(biāo)志。
該虛擬網(wǎng)絡(luò)優(yōu)化方法,其中該拆包模塊包括:
第二讀取模塊,用于接收網(wǎng)絡(luò)包,并讀取該該網(wǎng)絡(luò)包的I/O應(yīng)答;
第二處理模塊,用于根據(jù)該I/O應(yīng)答判斷該網(wǎng)絡(luò)包是否為組合網(wǎng)絡(luò)包,以決定是否開始拆包,并根據(jù)該I/O應(yīng)答將該組合網(wǎng)絡(luò)包中的小網(wǎng)絡(luò)包分別拷貝至獨(dú)立的套接字緩沖中;
第二發(fā)送模塊,用于將套接字緩沖中的該小網(wǎng)絡(luò)包發(fā)送給客戶虛擬機(jī)上層網(wǎng)絡(luò)協(xié)議棧,進(jìn)行后續(xù)處理。
該虛擬網(wǎng)絡(luò)優(yōu)化方法,其中該共享授權(quán)頁面模塊包括:
網(wǎng)絡(luò)包大小確定模塊,用于遍歷該組合網(wǎng)絡(luò)包,以確定該組合網(wǎng)絡(luò)包的大??;
檢查處理模塊,用于檢查頁面重用緩存是否存在可用的授權(quán)頁面及引用,以引用授權(quán)至后端驅(qū)動(dòng),后端驅(qū)動(dòng)獲得該頁面的授權(quán),并通過該引用授權(quán)將該組合網(wǎng)絡(luò)包拷貝至該頁面;
判斷通知模塊,用于根據(jù)該組合網(wǎng)絡(luò)包的大小,判斷授權(quán)頁面剩余空間是否足夠拷貝下一個(gè)組合網(wǎng)絡(luò)包,以拷貝組合網(wǎng)絡(luò)包到該頁面,并通知前端驅(qū)動(dòng)該組合網(wǎng)絡(luò)包的到達(dá)。
該虛擬網(wǎng)絡(luò)優(yōu)化方法,其中該判斷模塊還用于判斷該接收隊(duì)列中是否有可組網(wǎng)絡(luò)包,若沒有可組網(wǎng)絡(luò)包,則調(diào)用第一發(fā)送模塊;若有可組網(wǎng)絡(luò)包,則將該組合網(wǎng)絡(luò)包大小與預(yù)先設(shè)定好的組合網(wǎng)絡(luò)包邊界閾值相比較,若該組合網(wǎng)絡(luò)包大于等于該閾值,則調(diào)用第一發(fā)送模塊;若該組合網(wǎng)絡(luò)包小于該閾值,則繼續(xù)組包。
本發(fā)明的一種基于通用接收組包與共享授權(quán)頁面的虛擬網(wǎng)絡(luò)優(yōu)化方法,其有益效果在于:
1.本發(fā)明是不依賴特定的硬件虛擬化的支持,適用面更廣。
2.本發(fā)明的組包機(jī)制面向鏈路層,可以組合所有接收到的網(wǎng)絡(luò)包,無論該網(wǎng)絡(luò)包使用什么協(xié)議,或者是否屬于同一個(gè)連接。
3.本發(fā)明的拆包機(jī)制可借用現(xiàn)有的網(wǎng)絡(luò)包片段(碎片)的處理方式,實(shí)現(xiàn)簡易。
4.本發(fā)明適用于高吞吐的場景,但同時(shí)支持在網(wǎng)絡(luò)負(fù)載較低時(shí)直接處理單個(gè)網(wǎng)絡(luò)包,從而兼顧延遲。
5.通過修改網(wǎng)橋可以較容易的實(shí)現(xiàn)增刪虛擬網(wǎng)卡時(shí)通知組包步驟,再配合對(duì)重用緩存授權(quán)頁面的重新授權(quán),可以實(shí)現(xiàn)對(duì)虛擬機(jī)在線遷移的透明支持。
為讓本發(fā)明的上述特征和效果能闡述的更明確易懂,下文特舉實(shí)施例,并配合說明書附圖作詳細(xì)說明如下。
附圖說明
圖1是本發(fā)明的網(wǎng)絡(luò)虛擬化優(yōu)化方法的架構(gòu)圖;
圖2是本發(fā)明的接收端組包與拆包的流程圖;
圖3是本發(fā)明的共享授權(quán)頁面拷貝網(wǎng)絡(luò)包的流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明的一種基于通用接收組包與共享授權(quán)頁面的虛擬網(wǎng)絡(luò)優(yōu)化方法進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
為實(shí)現(xiàn)本發(fā)明目的而采用的平臺(tái)包括CPU、內(nèi)存、網(wǎng)卡等資源,作為虛擬化的基礎(chǔ)設(shè)施。該平臺(tái)運(yùn)行虛擬機(jī)監(jiān)視器,提供虛擬化服務(wù)。虛擬機(jī)監(jiān)視器基于網(wǎng)卡實(shí)現(xiàn)宿主虛擬網(wǎng)絡(luò),為虛擬機(jī)提供虛擬的網(wǎng)絡(luò)及網(wǎng)絡(luò)設(shè)備。虛擬網(wǎng)絡(luò)設(shè)備供虛擬機(jī)使用,為虛擬機(jī)提供網(wǎng)絡(luò)訪問功能。虛擬設(shè)備的模擬由前端驅(qū)動(dòng)與后端驅(qū)動(dòng)協(xié)作實(shí)現(xiàn):前端驅(qū)動(dòng)直接與客戶虛擬機(jī)操作系統(tǒng)通信,為其模擬出真實(shí)物理設(shè)備的行為和功能;后端驅(qū)動(dòng)為前端驅(qū)動(dòng)與宿主虛擬機(jī)監(jiān)視器提供數(shù)據(jù)通路,并負(fù)責(zé)相應(yīng)的適配工作。授權(quán)內(nèi)存頁面是前端驅(qū)動(dòng)與后端驅(qū)動(dòng)的一種通信方式,即由前端驅(qū)動(dòng)分配內(nèi)存頁面,后端驅(qū)動(dòng)經(jīng)授權(quán)后才可訪問頁面,通信結(jié)束后由前端驅(qū)動(dòng)釋放頁面。
本發(fā)明所述的網(wǎng)絡(luò)數(shù)據(jù)接收過程,當(dāng)新的數(shù)據(jù)到達(dá)時(shí),宿主虛擬網(wǎng)絡(luò)通過網(wǎng)卡驅(qū)動(dòng)從網(wǎng)卡獲得數(shù)據(jù),然后將該數(shù)據(jù)交由組包步驟進(jìn)行組包處理。組包步驟對(duì)于接收到的網(wǎng)絡(luò)包,組包步驟將其與此前接收的網(wǎng)絡(luò)包進(jìn)行組包,并將擁有相同源和目的鏈路地址的包組成組合網(wǎng)絡(luò)包,然后交由鏈路層防火墻與軟件網(wǎng)橋進(jìn)行處理。鏈路層防火墻進(jìn)行過濾處理,以判斷該網(wǎng)絡(luò)包是否應(yīng)該被截獲或丟棄。軟件網(wǎng)橋執(zhí)行網(wǎng)絡(luò)協(xié)議棧(Protocol Stack)的處理,以決定該網(wǎng)絡(luò)包應(yīng)當(dāng)傳遞的虛擬機(jī)。經(jīng)處理后的網(wǎng)絡(luò)包通過后端驅(qū)動(dòng)傳輸至共享授權(quán)頁面步驟,共享授權(quán)頁面步驟負(fù)責(zé)于單一內(nèi)存頁面盡可能多的拷貝網(wǎng)絡(luò)包。通過授權(quán)頁面,網(wǎng)絡(luò)包被拷貝至虛擬機(jī)的前端驅(qū)動(dòng),并為其設(shè)置網(wǎng)絡(luò)應(yīng)答或生成網(wǎng)絡(luò)包到達(dá)的通知信息。前端驅(qū)動(dòng)將接收到的網(wǎng)絡(luò)包交由拆包步驟進(jìn)行拆包處理,再交由上層的網(wǎng)絡(luò)協(xié)議棧進(jìn)行進(jìn)一步處理,經(jīng)協(xié)議棧處理后,數(shù)據(jù)被最終拷貝至用戶緩沖區(qū)中。
具體來說,本發(fā)明所涉及的網(wǎng)絡(luò)虛擬化架構(gòu)如圖1所示。物理硬件110包括CPU 111、內(nèi)存112、網(wǎng)卡113等資源,作為虛擬化的基礎(chǔ)設(shè)施,運(yùn)行虛擬機(jī)監(jiān)視器120,提供虛擬化服務(wù)。虛擬機(jī)監(jiān)視器120基于網(wǎng)卡113實(shí)現(xiàn)宿主虛擬網(wǎng)絡(luò)130,為虛擬機(jī)140提供虛擬的網(wǎng)絡(luò)環(huán)境。對(duì)于本發(fā)明所述的數(shù)據(jù)接收過程,當(dāng)新的數(shù)據(jù)到達(dá)時(shí),宿主虛擬網(wǎng)絡(luò)130通過網(wǎng)卡驅(qū)動(dòng)131從網(wǎng)卡113獲得數(shù)據(jù),然后交由本發(fā)明的組包步驟132進(jìn)行組包處理。對(duì)于接收到的網(wǎng)絡(luò)包,組包步驟132將其與此前接收的網(wǎng)絡(luò)包進(jìn)行組包,將擁有相同源和目的鏈路地址的包組成組合網(wǎng)絡(luò)包,然后交由軟件橋與鏈路層防火墻133進(jìn)行處理。軟件網(wǎng)橋133執(zhí)行網(wǎng)絡(luò)協(xié)議棧134的處理,以決定該網(wǎng)絡(luò)包應(yīng)當(dāng)傳遞的虛擬機(jī);同時(shí),鏈路層防火墻133亦執(zhí)行網(wǎng)絡(luò)協(xié)議棧134的處理,以判斷該網(wǎng)絡(luò)包是否應(yīng)該被截獲或丟棄。經(jīng)處理后的網(wǎng)絡(luò)包通過后端驅(qū)動(dòng)135傳輸至本發(fā)明所改進(jìn)的共享授權(quán)頁面121,共享授權(quán)頁面121盡可能多的使網(wǎng)絡(luò)包共享同一授權(quán)頁面,于多網(wǎng)絡(luò)包之間聚合映射與授權(quán)開銷。通過共享授權(quán)頁面121,網(wǎng)絡(luò)包被拷貝至虛擬機(jī)140的前端驅(qū)動(dòng)141,并為其設(shè)置網(wǎng)絡(luò)應(yīng)答或生成網(wǎng)絡(luò)包到達(dá)的通知信息。前端驅(qū)動(dòng)141將接收到的網(wǎng)絡(luò)包交由本發(fā)明的拆包步驟142進(jìn)行拆包處理,再交由上層網(wǎng)絡(luò)協(xié)議棧144進(jìn)行處理,一般的,客戶虛擬機(jī)采用TCP/IP協(xié)議棧143。經(jīng)協(xié)議棧處理后,數(shù)據(jù)被最終拷貝至用戶緩沖區(qū)中。
所述的網(wǎng)絡(luò)虛擬化架構(gòu)中,將網(wǎng)絡(luò)包路由到對(duì)應(yīng)的虛擬機(jī)是虛擬網(wǎng)絡(luò)開銷中最重要的部分。某些網(wǎng)絡(luò)包的操作,比如與軟件網(wǎng)橋相關(guān)的功能,可以被滿足特定條件的一組網(wǎng)絡(luò)包批量執(zhí)行及分?jǐn)傞_銷。本發(fā)明將擁有相同的源和目的鏈路層地址的網(wǎng)絡(luò)包組成單一大包并只進(jìn)行單次處理,避免了若干包逐個(gè)處理的開銷,同時(shí)不影響鏈路層防火墻的正常工作。圖1中的組包133和拆包143是接收端組合網(wǎng)絡(luò)數(shù)據(jù)包的關(guān)鍵步驟。組包133將若干個(gè)網(wǎng)絡(luò)包鏈接到第一個(gè)網(wǎng)絡(luò)包的套接字緩沖(Socket Buffer,SKB)中的一個(gè)特殊隊(duì)列。組包時(shí),所有接收的網(wǎng)絡(luò)包都根據(jù)其源和目的鏈路層地址進(jìn)行哈希(Hash),這些地址可以從網(wǎng)絡(luò)包的套接字緩沖中獲得。這樣,源和目的鏈路層地址相同的網(wǎng)絡(luò)包即被組合在一起;于鏈路層進(jìn)行組包處理也提高了本發(fā)明的通用性。拆包143通過特殊標(biāo)志來標(biāo)識(shí)組合網(wǎng)絡(luò)數(shù)據(jù)包,根據(jù)I/O應(yīng)答確定組合網(wǎng)絡(luò)包(因組合網(wǎng)絡(luò)包是由多個(gè)網(wǎng)絡(luò)包組合而成,所以也稱組合前的該網(wǎng)絡(luò)包為小網(wǎng)絡(luò)包)中的小網(wǎng)絡(luò)包,并進(jìn)行拆分。
本發(fā)明的組包流程于網(wǎng)絡(luò)接收到軟中斷開始,此處亦是虛擬化引入的額外執(zhí)行路徑之前。如圖2所示,圖2左側(cè)為組包步驟操作流程,右側(cè)為拆包步驟操作流程,本發(fā)明的組包、拆包的方法具體包含如下步驟:
步驟S201,宿主機(jī)網(wǎng)卡驅(qū)動(dòng)將接收到的網(wǎng)絡(luò)包放入每個(gè)CPU的接收隊(duì)列,組包步驟從該接收隊(duì)列讀取該網(wǎng)絡(luò)包;
步驟S202,根據(jù)該網(wǎng)絡(luò)包的目的地址,判斷該目的地址是否為虛擬機(jī),若不是,則直接執(zhí)行步驟S206,若是,則繼續(xù)執(zhí)行步驟S203開始組包;
步驟S203,從該網(wǎng)絡(luò)包的套接字緩沖中獲取其源鏈路層地址和目的鏈路層地址,并對(duì)該源鏈路層地址和該目的鏈路層地址進(jìn)行哈希運(yùn)算,生成哈希結(jié)果;
步驟S204,根據(jù)該哈希結(jié)果將該網(wǎng)絡(luò)包插入至相應(yīng)的包隊(duì)列,生成組合網(wǎng)絡(luò)包,即“組包”,這樣,源和目的鏈路地址相同的網(wǎng)絡(luò)包即被組合在一起;
步驟S205,判斷組包結(jié)束條件,若未滿足條件,則繼續(xù)執(zhí)行步驟S202進(jìn)行組包處理,若已滿足條件,則執(zhí)行步驟S206;
步驟S206,將該組合網(wǎng)絡(luò)包交由軟件網(wǎng)橋與鏈路層防火墻進(jìn)行處理;
步驟S207,經(jīng)由軟件網(wǎng)橋與鏈路層防火墻處理后,后端驅(qū)動(dòng)對(duì)該組合網(wǎng)絡(luò)包設(shè)定特殊標(biāo)志,用以被前端驅(qū)動(dòng)識(shí)別;
步驟S208,前端驅(qū)動(dòng)從后端驅(qū)動(dòng)讀取I/O應(yīng)答;
步驟S209,根據(jù)該I/O應(yīng)答判斷網(wǎng)絡(luò)包是否為組合網(wǎng)絡(luò)包。若不是組合網(wǎng)絡(luò)包,則直接執(zhí)行步驟S211,若是,則執(zhí)行步驟S210;
步驟S210,根據(jù)該I/O應(yīng)答將該組合網(wǎng)絡(luò)包中的小網(wǎng)絡(luò)包分別拷貝至獨(dú)立的套接字緩沖中,從而實(shí)現(xiàn)拆包;
步驟S211,由客戶虛擬機(jī)上層網(wǎng)絡(luò)協(xié)議棧進(jìn)行后續(xù)處理。
其中該步驟S205的組包結(jié)束條件具體為,該組包結(jié)束條件具體為,判斷該接收隊(duì)列中是否有可組網(wǎng)絡(luò)包,若沒有可組網(wǎng)絡(luò)包,則為已滿足條件;若有可組網(wǎng)絡(luò)包,則將該組合網(wǎng)絡(luò)包大小與預(yù)先設(shè)定好的組合網(wǎng)絡(luò)包邊界閾值相比較,若該組合網(wǎng)絡(luò)包大于等于該閾值,則為已滿足條件;若該組合網(wǎng)絡(luò)包小于該閾值,則為未滿足條件。以預(yù)先設(shè)定好的組合網(wǎng)絡(luò)包邊界(大小)閾值與接收隊(duì)列狀態(tài)作為結(jié)束標(biāo)志。組包邊界閾值越大,額外執(zhí)行的網(wǎng)絡(luò)處理開銷越小。然而,實(shí)驗(yàn)表明,當(dāng)組包邊界超過一定閾值時(shí),性能收益有限。實(shí)際實(shí)施時(shí),組包邊界閾值應(yīng)取足夠大以獲得最優(yōu)的網(wǎng)絡(luò)性能。當(dāng)網(wǎng)絡(luò)流量較大時(shí),組包邊界閾值很容易達(dá)到;當(dāng)網(wǎng)絡(luò)流量較小時(shí),組包機(jī)制很可能無法很快達(dá)到組包邊界閾值。如果接收隊(duì)列中沒有更多的可組網(wǎng)絡(luò)包,則組包機(jī)制不做任何等待,直接將已組合的網(wǎng)絡(luò)包提交至網(wǎng)絡(luò)協(xié)議棧進(jìn)行后續(xù)處理。
一般的網(wǎng)絡(luò)虛擬化的實(shí)現(xiàn)中,無論接收到的網(wǎng)絡(luò)包大小如何,虛擬機(jī)監(jiān)視器均使用單獨(dú)的授權(quán)頁面將數(shù)據(jù)拷貝至虛擬機(jī)。默認(rèn)的頁面大小為4096字節(jié),而默認(rèn)的最大網(wǎng)絡(luò)包最大傳輸單元大小為1500字節(jié),故而授權(quán)頁面中存在較大的空間浪費(fèi)。對(duì)于每一項(xiàng)網(wǎng)絡(luò)包,前端驅(qū)動(dòng)均為之分配套接字緩沖與空閑頁面,并為該頁面申請(qǐng)引用授權(quán)。當(dāng)后端驅(qū)動(dòng)從軟件網(wǎng)橋接收到該網(wǎng)絡(luò)包時(shí),通過該引用授權(quán)將網(wǎng)絡(luò)包拷貝至相應(yīng)的授權(quán)頁面。之后通知前端驅(qū)動(dòng)接收網(wǎng)絡(luò)包,前端驅(qū)動(dòng)讀取數(shù)據(jù)并提交至虛擬機(jī)協(xié)議棧后釋放該引用授權(quán)。授權(quán)頁面的使用減少了寶貴的頁面分配、釋放、授權(quán)、撤銷授權(quán)、映射以及解除映射的開銷。本發(fā)明的共享授權(quán)頁面步驟,旨在聚合多個(gè)組合網(wǎng)絡(luò)包的拷貝,提高授權(quán)頁面的使用率、降低授權(quán)頁面的分配授權(quán)次數(shù),進(jìn)而提高虛擬網(wǎng)絡(luò)的接收性能。
所述共享授權(quán)頁面步驟,由前端驅(qū)動(dòng)維護(hù)授權(quán)頁面與引用授權(quán)的重用緩存以提高復(fù)用率,對(duì)于未使用的授權(quán)頁面,將其加入重用緩存并記錄相應(yīng)的授權(quán)。如圖3所示,所述基于共享授權(quán)頁面的所述共享授權(quán)頁面步驟具體包含如下步驟:
步驟S310,后端驅(qū)動(dòng)接收到組合網(wǎng)絡(luò)包時(shí),確定該組合網(wǎng)絡(luò)包大小。由于組包機(jī)制將多個(gè)網(wǎng)絡(luò)包鏈接在一起,因而后端驅(qū)動(dòng)遍歷(Traversal)該組合網(wǎng)絡(luò)包(組包隊(duì)列)即可獲知該組合網(wǎng)絡(luò)包的大小。
步驟S320,前端驅(qū)動(dòng)檢查重用緩存是否存在可用的授權(quán)頁面及引用,若存在可用的頁面,則執(zhí)行步驟S321直接選取可用的頁面并將引用授權(quán)至后端驅(qū)動(dòng);若不存在可用頁面,則執(zhí)行步驟S322重分配新的頁面及引用授權(quán)至后端驅(qū)動(dòng)。
步驟S330,后端驅(qū)動(dòng)獲得該頁面的(共享)授權(quán),并通過引用授權(quán)將組合網(wǎng)絡(luò)包拷貝至該頁面,不同的組合網(wǎng)絡(luò)包被拷貝到授權(quán)頁面的不同偏移處。
步驟S340,后端驅(qū)動(dòng)根據(jù)該組合網(wǎng)絡(luò)包的大小,判斷授權(quán)頁面剩余空間是否足夠拷貝下一個(gè)組合網(wǎng)絡(luò)包,若空間足夠,則執(zhí)行步驟S330繼續(xù)拷貝數(shù)據(jù)。
步驟S350,若當(dāng)前授權(quán)頁面已滿或者其剩余空間不足,則通知前端驅(qū)動(dòng)組合網(wǎng)絡(luò)包的到達(dá)。
其中該步驟S330,可由后端驅(qū)動(dòng)保證所有網(wǎng)絡(luò)包偏移與CPU硬件緩存線對(duì)齊以提高拷貝效率,一種簡單的實(shí)現(xiàn)方式可以是不允許不同組合包的網(wǎng)絡(luò)包共享同一授權(quán)頁面。
所述步驟中,頁面由虛擬機(jī)分配,由虛擬機(jī)監(jiān)視器授權(quán)與撤銷授權(quán),不再使用時(shí)由原虛擬機(jī)釋放。本發(fā)明的方法不允許目的地址不同的網(wǎng)絡(luò)包共用同一授權(quán)頁面,故不影響虛擬化的安全隔離。
以下為與上述方法實(shí)施例對(duì)應(yīng)的系統(tǒng)實(shí)施例,本實(shí)施方式可與上述實(shí)施方式互相配合實(shí)施。上述施方式中提到的相關(guān)技術(shù)細(xì)節(jié)在本實(shí)施方式中依然有效,為了減少重復(fù),這里不再贅述。相應(yīng)地,本實(shí)施方式中提到的相關(guān)技術(shù)細(xì)節(jié)也可應(yīng)用在上述實(shí)施方式中。
本發(fā)明還提供一種虛擬網(wǎng)絡(luò)優(yōu)化系統(tǒng),包括組包模塊、拆包模塊和共享授權(quán)頁面模塊,其中:
組包模塊,用于將擁有相同源和目的鏈路地址的包組成組合網(wǎng)絡(luò)包,生成組合網(wǎng)絡(luò)包;
共享授權(quán)頁面模塊,用于接收該組合網(wǎng)絡(luò)包,并將多個(gè)該組合網(wǎng)絡(luò)包通過單一內(nèi)存頁面拷貝至虛擬機(jī)的前端驅(qū)動(dòng);
拆包模塊,用于接收來自該前端驅(qū)動(dòng)的該組合網(wǎng)絡(luò)包,并根據(jù)I/O應(yīng)答確定該組合網(wǎng)絡(luò)包中的小網(wǎng)絡(luò)包,對(duì)該組合網(wǎng)絡(luò)包進(jìn)行拆分,并將拆分后得到的小網(wǎng)絡(luò)包交由上層網(wǎng)絡(luò)協(xié)議棧進(jìn)行處理。
該虛擬網(wǎng)絡(luò)優(yōu)化方法,其中該組包模塊包括:
第一讀取模塊,用于將接收到的網(wǎng)絡(luò)包放入每個(gè)CPU的接收隊(duì)列,并從該接收隊(duì)列讀取該網(wǎng)絡(luò)包;
判斷模塊,用于根據(jù)結(jié)束條件,決定是否繼續(xù)組包處理;
第一處理模塊,用于根據(jù)該網(wǎng)絡(luò)包的目的地址,判斷該目的地址是否為虛擬機(jī),以決定是否開始組包,并從該網(wǎng)絡(luò)包的套接字緩沖中獲取其源鏈路層地址和目的鏈路層地址,對(duì)該源鏈路層地址和該目的鏈路層地址進(jìn)行哈希運(yùn)算,生成哈希結(jié)果,根據(jù)該哈希結(jié)果將該網(wǎng)絡(luò)包插入至相應(yīng)的包隊(duì)列,生成組合網(wǎng)絡(luò)包,并調(diào)用該判斷模塊,將生成的該組合網(wǎng)絡(luò)包發(fā)送給第一發(fā)送模塊;
第一發(fā)送模塊:用于將該組合網(wǎng)絡(luò)包發(fā)送給軟件網(wǎng)橋與鏈路層防火墻進(jìn)行處理,并將處理后的該組合網(wǎng)絡(luò)包標(biāo)記特殊標(biāo)志。
該虛擬網(wǎng)絡(luò)優(yōu)化方法,其中該拆包模塊包括:
第二讀取模塊,用于接收網(wǎng)絡(luò)包,并讀取該該網(wǎng)絡(luò)包的I/O應(yīng)答;
第二處理模塊,用于根據(jù)該I/O應(yīng)答判斷該網(wǎng)絡(luò)包是否為組合網(wǎng)絡(luò)包,以決定是否開始拆包,并根據(jù)該I/O應(yīng)答將該組合網(wǎng)絡(luò)包中的小網(wǎng)絡(luò)包分別拷貝至獨(dú)立的套接字緩沖中;
第二發(fā)送模塊,用于將套接字緩沖中的該小網(wǎng)絡(luò)包發(fā)送給客戶虛擬機(jī)上層網(wǎng)絡(luò)協(xié)議棧,進(jìn)行后續(xù)處理。
該虛擬網(wǎng)絡(luò)優(yōu)化方法,其中該共享授權(quán)頁面模塊包括:
網(wǎng)絡(luò)包大小確定模塊,用于遍歷該組合網(wǎng)絡(luò)包,以確定該組合網(wǎng)絡(luò)包的大??;檢查處理模塊,用于檢查頁面重用緩存是否存在可用的授權(quán)頁面及引用,以引用授權(quán)至后端驅(qū)動(dòng),后端驅(qū)動(dòng)獲得該頁面的授權(quán),并通過該引用授權(quán)將該組合網(wǎng)絡(luò)包拷貝至該頁面;
判斷通知模塊,用于根據(jù)該組合網(wǎng)絡(luò)包的大小,判斷授權(quán)頁面剩余空間是否足夠拷貝下一個(gè)組合網(wǎng)絡(luò)包,以拷貝組合網(wǎng)絡(luò)包到該頁面,并通知前端驅(qū)動(dòng)該組合網(wǎng)絡(luò)包的到達(dá)。
該虛擬網(wǎng)絡(luò)優(yōu)化方法,其中該判斷模塊包括:
判斷模塊,用于判斷該接收隊(duì)列中是否有可組網(wǎng)絡(luò)包,若沒有可組網(wǎng)絡(luò)包,則調(diào)用第一發(fā)送模塊;若有可組網(wǎng)絡(luò)包,則將該組合網(wǎng)絡(luò)包大小與預(yù)先設(shè)定好的組合網(wǎng)絡(luò)包邊界閾值相比較,若該組合網(wǎng)絡(luò)包大于等于該閾值,則調(diào)用第一發(fā)送模塊;若該組合網(wǎng)絡(luò)包小于該閾值,則繼續(xù)組包。
通過結(jié)合附圖對(duì)本發(fā)明具體實(shí)施例的描述,本發(fā)明的其它方面及特征對(duì)本領(lǐng)域的技術(shù)人員而言是顯而易見的。
雖然本發(fā)明以上述實(shí)施例公開,但具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明,任何本技術(shù)領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的構(gòu)思和范圍內(nèi),可作一些的變更和完善,故本發(fā)明的權(quán)利保護(hù)范圍以權(quán)利要求書為準(zhǔn)。