一種基于統(tǒng)計(jì)的虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移優(yōu)化方法
【專利摘要】基于統(tǒng)計(jì)的虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移優(yōu)化方法,實(shí)現(xiàn)步驟為:基于數(shù)據(jù)中心虛擬機(jī)內(nèi)存頁(yè)面的統(tǒng)計(jì),選取模板頁(yè)面并構(gòu)建索引。在源數(shù)據(jù)中心,如果待傳輸內(nèi)存頁(yè)面與模板頁(yè)面相同,則只傳輸索引,在目的端數(shù)據(jù)中心再根據(jù)索引恢復(fù)內(nèi)存頁(yè)面數(shù)據(jù);如果待傳輸內(nèi)存頁(yè)面與模板頁(yè)面不同,則將該內(nèi)存頁(yè)面數(shù)據(jù)傳輸至目的端數(shù)據(jù)中心。本發(fā)明有效減少了遷移過(guò)程中的存儲(chǔ)資源的開銷,加快了數(shù)據(jù)傳輸過(guò)程,在虛擬機(jī)的跨數(shù)據(jù)中心動(dòng)態(tài)遷移上具有顯著的性能優(yōu)勢(shì)。
【專利說(shuō)明】一種基于統(tǒng)計(jì)的虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及云計(jì)算及虛擬化領(lǐng)域,具體涉及一種基于統(tǒng)計(jì)的虛擬機(jī)遷移優(yōu)化方法。
【背景技術(shù)】
[0002]虛擬機(jī)動(dòng)態(tài)遷移(Live Migration)是指可以把基于虛擬機(jī)運(yùn)行的操作系統(tǒng)不間斷地從一臺(tái)物理機(jī)器上遷移到另一臺(tái)物理機(jī)器上運(yùn)行,該技術(shù)廣泛應(yīng)用于負(fù)載均衡、能耗管理、系統(tǒng)容錯(cuò)及軟硬件的在線維護(hù)等場(chǎng)景下。虛擬機(jī)動(dòng)態(tài)遷移作為虛擬化的核心關(guān)鍵技術(shù)之一,對(duì)于建立可動(dòng)態(tài)伸縮、資源集約的大型綠色數(shù)據(jù)中心具有重要意義。
[0003]虛擬機(jī)跨數(shù)據(jù)中心的動(dòng)態(tài)遷移,需要將虛擬機(jī)的內(nèi)存狀態(tài)完全從源數(shù)據(jù)中心拷貝到目的端數(shù)據(jù)中心,同時(shí)保持虛擬機(jī)的運(yùn)行。較之?dāng)?shù)據(jù)中心內(nèi)部,數(shù)據(jù)中心之間通信延遲較大、可用于遷移的數(shù)據(jù)傳輸速率較低,而內(nèi)存數(shù)據(jù)變化較快,這給實(shí)現(xiàn)虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移帶來(lái)了較大的難度。而且,跨數(shù)據(jù)中心遷移的場(chǎng)景中,往往需要將若干個(gè)虛擬機(jī)組成的虛擬集群(Virtual Cluster)作為一個(gè)整體進(jìn)行遷移,這更增加了動(dòng)態(tài)遷移的難度。
[0004]目前,內(nèi)存預(yù)拷貝動(dòng)態(tài)遷移方法是普遍采用的方法,但是它從源數(shù)據(jù)中心遷移了大量重復(fù)的內(nèi)存數(shù)據(jù)到目的端數(shù)據(jù)中心,這需要額外的遷移時(shí)間和宕機(jī)時(shí)間。雖然數(shù)據(jù)中心間的網(wǎng)絡(luò)通信速率將越來(lái)越高,但是集群的規(guī)模也在迅速增長(zhǎng),所以解決虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移問(wèn)題,不能單純依賴網(wǎng)絡(luò)速率的提高。解決虛擬機(jī)跨數(shù)據(jù)中心遷移內(nèi)存狀態(tài)拷貝的關(guān)鍵是減少拷貝過(guò)程中傳輸?shù)臄?shù)據(jù)量。由于不同虛擬機(jī)中運(yùn)行了相同或者相似的軟件,所以數(shù)據(jù)中心的不同虛擬機(jī)之間存在大量相同的內(nèi)存頁(yè)面,這使得可以采用數(shù)據(jù)去重(Data Deduplication)方法減少虛擬機(jī)動(dòng)態(tài)遷移過(guò)程中傳輸?shù)臄?shù)據(jù)量。
[0005]數(shù)據(jù)去重是一種通過(guò)大規(guī)模消除冗余數(shù)據(jù),降低數(shù)據(jù)存儲(chǔ)成本的重要技術(shù)。重復(fù)數(shù)據(jù)大量存在于虛擬機(jī)信息處理和存儲(chǔ)的各個(gè)環(huán)節(jié),如文件系統(tǒng)、文件同步、郵件附件、HTML文檔和Web對(duì)象,以及操作系統(tǒng)和應(yīng)用軟件中,遷移重復(fù)數(shù)據(jù)會(huì)浪費(fèi)大量的網(wǎng)絡(luò)帶寬和存儲(chǔ)空間。數(shù)據(jù)去重技術(shù)不僅能降低數(shù)據(jù)的存儲(chǔ)量,減少存儲(chǔ)資源的開銷,降低物理存儲(chǔ)資源的管理和維護(hù)成本,也能節(jié)約網(wǎng)絡(luò)帶寬,加快數(shù)據(jù)傳輸過(guò)程。
[0006]現(xiàn)有的利用數(shù)據(jù)去重技術(shù)提高虛擬機(jī)動(dòng)態(tài)遷移性能的方式主要分為兩種。第一種是利用內(nèi)存頁(yè)面內(nèi)部特點(diǎn)進(jìn)行去重。例如QEMU-KVM的默認(rèn)遷移方法,參見(jiàn)A.Kivity, Y.Kamay, D.Laor, U.Lublin, and A.Liguori,“Kvm:The linux virtual machine monitor,,,InProceedings of Linux Symposium, 2007, pp.225-230.;當(dāng)內(nèi)存頁(yè)面所有字節(jié)均相同(例如零頁(yè)面)時(shí),只需傳輸一個(gè)字節(jié)的數(shù)據(jù)而避免對(duì)整個(gè)內(nèi)存頁(yè)面內(nèi)容進(jìn)行傳輸。這種方法去重效率高,恢復(fù)簡(jiǎn)單,但是去重概率很低,因?yàn)閮?nèi)存頁(yè)面集合中滿足此去重條件的頁(yè)面數(shù)量有限。因此這種方法對(duì)虛擬機(jī)動(dòng)態(tài)遷移性能的提升十分有限。
[0007]第二種方法是利用不同內(nèi)存頁(yè)面內(nèi)容相同的特點(diǎn)進(jìn)行去重,例如Shrinker方法,P.Riteau, C.Morin, and T.Priol, uShrinker:1mproving live migration of virtualclusters over wans with distributed data deduplication and content-basedaddressing, ”In Proceedings of EUROPAR, September2011.。這種方法將已經(jīng)傳輸過(guò)的頁(yè)面緩存下來(lái)并構(gòu)建索引,當(dāng)后續(xù)傳輸頁(yè)面與已經(jīng)緩存的頁(yè)面重復(fù)時(shí)進(jìn)行去重,用傳輸索引值來(lái)代替?zhèn)鬏斖暾麅?nèi)存頁(yè)面內(nèi)容。這種方法去重概率較高,但是由于緩存本身的缺陷,當(dāng)遷移一臺(tái)虛擬機(jī)或者遷移多臺(tái)異構(gòu)虛擬機(jī)時(shí),會(huì)出現(xiàn)命中率低,動(dòng)態(tài)遷移性能差的問(wèn)題。
【發(fā)明內(nèi)容】
[0008]本發(fā)明的技術(shù)解決問(wèn)題:克服現(xiàn)有技術(shù)的不足,本發(fā)明中提出了一種適用于跨數(shù)據(jù)中心進(jìn)行虛擬機(jī)動(dòng)態(tài)遷移的優(yōu)化方法,該方法基于統(tǒng)計(jì),即從大量運(yùn)行著操作系統(tǒng)及負(fù)載的計(jì)算機(jī)上提取出內(nèi)存頁(yè)面并分析,采用數(shù)據(jù)去重(Data Deduplication)方法減少虛擬機(jī)動(dòng)態(tài)遷移過(guò)程中傳輸?shù)臄?shù)據(jù)量,有效減少了遷移過(guò)程中的存儲(chǔ)資源的開銷,加快了數(shù)據(jù)傳輸過(guò)程,在虛擬機(jī)的跨數(shù)據(jù)中心動(dòng)態(tài)遷移上具有顯著的性能優(yōu)勢(shì)。
[0009]本發(fā)明技術(shù)解決方案:基于統(tǒng)計(jì)的虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移優(yōu)化方法,所述方法包括以下步驟:
[0010](I)統(tǒng)計(jì)虛擬機(jī)跨數(shù)據(jù)中心相同內(nèi)存頁(yè)面出現(xiàn)的次數(shù),選取模板頁(yè)面,構(gòu)建內(nèi)存頁(yè)面索引;
[0011](2)虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移過(guò)程中,在源數(shù)據(jù)中心,如果待傳輸內(nèi)存頁(yè)面與模板頁(yè)面相同,則只傳輸該內(nèi)存頁(yè)面索引;如果待傳輸內(nèi)存頁(yè)面與模板頁(yè)面不同,則傳輸該內(nèi)存頁(yè)面數(shù)據(jù);
[0012](3)虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移過(guò)程中,在目的端數(shù)據(jù)中心,如果目的端虛擬機(jī)接收到的是內(nèi)存頁(yè)面索引,則根據(jù)內(nèi)存頁(yè)面索引定位到內(nèi)存頁(yè)面數(shù)據(jù)組來(lái)恢復(fù)內(nèi)存頁(yè)面數(shù)據(jù);如果目的端虛擬機(jī)接接收到的是內(nèi)存頁(yè)面數(shù)據(jù),則直接將該內(nèi)存頁(yè)面數(shù)據(jù)傳輸給對(duì)應(yīng)的虛擬機(jī)空間。
[0013]所述步驟(I)中選取模板頁(yè)面的方法如下:當(dāng)某一內(nèi)存頁(yè)面tp在虛擬機(jī)跨數(shù)據(jù)中心中出現(xiàn)的次數(shù)η > N,其中,N為一個(gè)設(shè)定的常數(shù),則稱內(nèi)存頁(yè)面tp為模板頁(yè)面,所有模板頁(yè)面的集合記作TP。
[0014]所述步驟(I)構(gòu)建內(nèi)存頁(yè)面索引的過(guò)程如下:
[0015](I)使用哈希函數(shù)求取內(nèi)存頁(yè)面的哈希值;
[0016](2)按照哈希值與內(nèi)存頁(yè)面內(nèi)容一一對(duì)應(yīng)的方式將數(shù)據(jù)存儲(chǔ)在一個(gè)以哈希值大小排序的表內(nèi)。
[0017]所述步驟(2)具體實(shí)現(xiàn)如下:
[0018](21)使用哈希函數(shù)求取待傳輸內(nèi)存頁(yè)面的哈希值;
[0019](22)在存儲(chǔ)所有模板頁(yè)面的哈希值的數(shù)組中查找待傳輸內(nèi)存頁(yè)面的哈希值;
[0020](23)如果查找命中,則實(shí)際傳輸待傳輸內(nèi)存頁(yè)面的哈希值,如果查找不命中,則實(shí)際傳輸待傳輸內(nèi)存頁(yè)面內(nèi)容。
[0021]所述步驟(3)具體實(shí)現(xiàn)如下:
[0022](31) g的端主機(jī)接收到遷移數(shù)據(jù)后,根據(jù)數(shù)據(jù)流結(jié)構(gòu)的頭部計(jì)算出該內(nèi)存頁(yè)面的地址,并根據(jù)該頭部中的標(biāo)志位判斷接收數(shù)據(jù)的類型;
[0023](32)如果判斷出接收到的是內(nèi)存頁(yè)面哈希值,則在存儲(chǔ)模板頁(yè)面內(nèi)容及哈希值的表中恢復(fù)出內(nèi)存頁(yè)面內(nèi)容并將數(shù)據(jù)傳輸?shù)缴弦徊接?jì)算出的指定地址;如果判斷出接收到的是內(nèi)存頁(yè)面內(nèi)容,則直接將接收到的數(shù)據(jù)傳輸?shù)缴弦徊接?jì)算出的指定地址。
[0024]本發(fā)明與現(xiàn)有技術(shù)相比的有益效果在于:
[0025]( I)本發(fā)明針對(duì)虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移過(guò)程中,廣域網(wǎng)通信延遲大、用于遷移的數(shù)據(jù)傳輸速率低,與內(nèi)存數(shù)據(jù)更新速度快之間的矛盾,從大量運(yùn)行著操作系統(tǒng)及負(fù)載的計(jì)算機(jī)上提取出內(nèi)存頁(yè)面并分析,采用數(shù)據(jù)去重(Data Deduplication)方法減少傳輸?shù)臄?shù)據(jù)量,基于數(shù)據(jù)中心虛擬機(jī)內(nèi)存頁(yè)面的統(tǒng)計(jì),選取模板頁(yè)面并構(gòu)建索引,在源數(shù)據(jù)中心,如果待傳輸內(nèi)存頁(yè)面與模板頁(yè)面相同,則只傳輸索引,在目的端數(shù)據(jù)中心再根據(jù)索引恢復(fù)內(nèi)存頁(yè)面數(shù)據(jù);如果待傳輸內(nèi)存頁(yè)面與模板頁(yè)面不同,則將該內(nèi)存頁(yè)面數(shù)據(jù)傳輸至目的端數(shù)據(jù)中心,這種方法有效減少了遷移過(guò)程中的存儲(chǔ)資源的開銷,加快了數(shù)據(jù)傳輸過(guò)程,在虛擬機(jī)的跨數(shù)據(jù)中心動(dòng)態(tài)遷移上具有顯著的性能優(yōu)勢(shì)。
[0026](2)本發(fā)明在內(nèi)存狀態(tài)的首輪迭代和后續(xù)迭代拷貝過(guò)程中均能有效降低傳輸數(shù)據(jù)量,從而顯著提高虛擬機(jī)的遷移性能。
【專利附圖】
【附圖說(shuō)明】
[0027]圖1為本發(fā)明方法中的虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移過(guò)程;
[0028]圖2為遷移中的數(shù)據(jù)流結(jié)構(gòu);
[0029]圖3本發(fā)明索引構(gòu)建方法流程圖。
【具體實(shí)施方式】
[0030]數(shù)據(jù)中心的不同虛擬機(jī)之間存在大量相同的內(nèi)存頁(yè)面,即重復(fù)內(nèi)存頁(yè)面。由于重復(fù)內(nèi)存頁(yè)面是因虛擬機(jī)中運(yùn)行了相同或者相似的軟件產(chǎn)生的,所以重復(fù)內(nèi)存頁(yè)面在同一個(gè)數(shù)據(jù)中心中出現(xiàn)的頻率也比較高,通過(guò)統(tǒng)計(jì)數(shù)據(jù)中心相同內(nèi)存頁(yè)面出現(xiàn)的次數(shù),可以找到重復(fù)率高的內(nèi)存頁(yè)面。在此,定義模板頁(yè)面如下:
[0031]定義:當(dāng)某一內(nèi)存頁(yè)面tp在數(shù)據(jù)中心中出現(xiàn)的次數(shù)η SN,其中,N為一個(gè)設(shè)定的常數(shù),則稱內(nèi)存頁(yè)面tp為模板頁(yè)面,所有模板頁(yè)面的集合記作TP。
[0032]本發(fā)明的技術(shù)方案如下:
[0033]基于數(shù)據(jù)中心虛擬機(jī)內(nèi)存頁(yè)面的統(tǒng)計(jì),選取模板頁(yè)面并構(gòu)建索引。在源數(shù)據(jù)中心,如果待傳輸內(nèi)存頁(yè)面與模板頁(yè)面相同,則只傳輸索引,在目的端數(shù)據(jù)中心再根據(jù)索引恢復(fù)內(nèi)存頁(yè)面數(shù)據(jù);如果待傳輸內(nèi)存頁(yè)面與模板頁(yè)面不同,則將該內(nèi)存頁(yè)面數(shù)據(jù)傳輸至目的端數(shù)據(jù)中心。
[0034]虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移過(guò)程如圖1所示。所述方法包括以下步驟:
[0035]( I)源節(jié)點(diǎn)與目的節(jié)點(diǎn)進(jìn)行協(xié)商,建立連接并開始遷移虛擬機(jī)。
[0036](2)源數(shù)據(jù)中心構(gòu)建某待傳輸內(nèi)存頁(yè)面P的索引h,并在索引數(shù)組H中查找h,以確定P是否與某一模板頁(yè)面tp相同。
[0037](3)如果P與某一模板頁(yè)面tp相同,將索引h發(fā)送給目的端數(shù)據(jù)中心;如果P與所有的模板頁(yè)面都不同,將內(nèi)存頁(yè)面數(shù)據(jù)P發(fā)送給目的端數(shù)據(jù)中心。
[0038](4)如果目的端虛擬機(jī)接收到的是索引h,則在索引表HT中找到項(xiàng)F (th, tp),其中th=h,定位到內(nèi)存頁(yè)面數(shù)據(jù)數(shù)組中的某一個(gè)具體的內(nèi)存頁(yè)面,傳輸給對(duì)應(yīng)的虛擬機(jī)空間;如果目的端虛擬機(jī)接收到的是內(nèi)存頁(yè)面數(shù)據(jù),則直接將其傳輸給對(duì)應(yīng)的虛擬機(jī)空間。[0039](5)遷移結(jié)束,停止源節(jié)點(diǎn)上虛擬機(jī)的運(yùn)行,開始在目的端節(jié)點(diǎn)上運(yùn)行虛擬機(jī),并斷開連接。
[0040]實(shí)施平臺(tái)需要一個(gè)完整的KVM運(yùn)行環(huán)境,KVM是基于內(nèi)核虛擬機(jī)的簡(jiǎn)稱,是硬件支持的完全虛擬化的解決方案。除了在內(nèi)核空間需要KVM模塊之外,在用戶空間還需要QEMU來(lái)模擬所需要CPU和設(shè)備模型以及用于啟動(dòng)客戶機(jī)進(jìn)程。qemu-kvm是為了針對(duì)KVM做了專門的修改和優(yōu)化的QEMU分支,它支持四種遷移模式,分別是tcp模式,exec模式,unix模式和fd模式。本發(fā)明實(shí)現(xiàn)算法使用的是tcp模式,即用tcp連接傳輸內(nèi)存數(shù)據(jù)的方式來(lái)實(shí)現(xiàn)虛擬機(jī)動(dòng)態(tài)遷移。
[0041]在圖2中,頁(yè)面數(shù)據(jù)前的addr字段為計(jì)算內(nèi)存地址所需的數(shù)據(jù),其中最末尾的第一、二和四位被用來(lái)標(biāo)記頁(yè)面類型,其中RAM_SAVE_FLAG_FULL用來(lái)表示模板去重頁(yè)面(RAM_SAVE_FLAG_DUPL I CA ), RAM_SAVE_FLAG_PAGE 用來(lái)表示普通頁(yè)面,RAM_SAVE_FLAG_COMPRESS用來(lái)表示所有字節(jié)一致的頁(yè)面如零頁(yè)面。如圖1、2所示,本發(fā)明【具體實(shí)施方式】主要包括以下幾個(gè)步驟:
[0042]1.構(gòu)建索引
[0043]( 11)源節(jié)點(diǎn)與目的節(jié)點(diǎn)進(jìn)行協(xié)商,建立連接并開始遷移虛擬機(jī)。
[0044]( 12)源數(shù)據(jù)中心構(gòu)建某待傳輸內(nèi)存頁(yè)面P的索引h,并在索引數(shù)組H中查找h,以確定P是否與某一模板頁(yè)面tp相同。
[0045](13)如果P與某一模板頁(yè)面tp相同,將索引h添加入數(shù)據(jù)流的頁(yè)面數(shù)據(jù)部分,并將頁(yè)面標(biāo)記置為RAM_SAVE_FLAG_FULL,發(fā)送給目的端數(shù)據(jù)中心;如果P與所有的模板頁(yè)面都不同,將標(biāo)記為RAM_SAVE_FLAG_PAGE的內(nèi)存頁(yè)面數(shù)據(jù)P發(fā)送給目的端數(shù)據(jù)中心。
[0046](14)如果目的端虛擬機(jī)接收到的是索引h,則在索引表HT中找到項(xiàng)F(th,tp),其中th=h,定位到內(nèi)存頁(yè)面數(shù)據(jù)數(shù)組中的某一個(gè)具體的內(nèi)存頁(yè)面,傳輸給對(duì)應(yīng)的虛擬機(jī)空間;如果目的端虛擬機(jī)接收到的是內(nèi)存頁(yè)面數(shù)據(jù),則直接將其傳輸給對(duì)應(yīng)的虛擬機(jī)空間。
[0047]以上步驟執(zhí)行完后,遷移結(jié)束,停止源節(jié)點(diǎn)上虛擬機(jī)的運(yùn)行,開始在目的端節(jié)點(diǎn)上運(yùn)行虛擬機(jī),并斷開連接。
[0048]通過(guò)統(tǒng)計(jì)分析從數(shù)據(jù)中心中選取出的虛擬機(jī)的內(nèi)存頁(yè)面數(shù)據(jù),獲取模板頁(yè)面,然后對(duì)這些內(nèi)存頁(yè)面依次求索引,并以所有的索引為key構(gòu)建一個(gè)布隆過(guò)濾器結(jié)構(gòu),常駐內(nèi)存。
[0049]本實(shí)施方式以SHA-1的哈希函數(shù)為例來(lái)構(gòu)建索引。哈希函數(shù)(Hash函數(shù),散列函數(shù))是對(duì)數(shù)據(jù)構(gòu)建索引的有效方法之一。哈希函數(shù)的選擇需要滿足抗碰撞性(CollisionResistance)要求,這里的抗碰撞要求主要是為了防止在目的端數(shù)據(jù)中心根據(jù)哈希值恢復(fù)的內(nèi)存頁(yè)面與源數(shù)據(jù)中心發(fā)送的內(nèi)存頁(yè)面不同而產(chǎn)生錯(cuò)誤。本實(shí)施過(guò)程選擇哈希值長(zhǎng)度為160bits的SHA-1哈希函數(shù),實(shí)際系統(tǒng)中可能需要用192位整數(shù)來(lái)表示。該哈希函數(shù)發(fā)生碰撞而導(dǎo)致錯(cuò)誤發(fā)生的概率,遠(yuǎn)低于TCP傳輸錯(cuò)誤或系統(tǒng)內(nèi)存錯(cuò)誤發(fā)生的概率,因此,由哈希值碰撞導(dǎo)致的錯(cuò)誤可以忽略不計(jì)。同時(shí),SHA-1函數(shù)現(xiàn)在已有很成熟的速度很高的硬件實(shí)現(xiàn),不會(huì)因SHA-1的計(jì)算開銷造成傳輸延遲或者降低傳輸速率。
[0050]構(gòu)建索引完整過(guò)程如下:
[0051]首先,從數(shù)據(jù)中心中隨機(jī)選取若干臺(tái)虛擬機(jī),對(duì)其內(nèi)存狀態(tài)保存快照,得到m個(gè)內(nèi)存頁(yè)面,將這m個(gè)內(nèi)存頁(yè)面構(gòu)成的集合記作M ;[0052]然后,按照?qǐng)D3所示為統(tǒng)計(jì)模板頁(yè)面并構(gòu)建索引,每個(gè)模板頁(yè)面對(duì)應(yīng)一個(gè)三元組E= (h, c,p),其中P為該內(nèi)存頁(yè)面的數(shù)據(jù),h=SHA-l (P),c為該內(nèi)存頁(yè)面在集合M中出現(xiàn)的次數(shù);算法流程圖所示的輸入為內(nèi)存頁(yè)面集合M和模板頁(yè)面判定閾值N,輸出為數(shù)組H和哈希表HT,H和HT的大小均為ct,由兩部分構(gòu)成:
[0053](I)依次處理內(nèi)存頁(yè)面集合M,構(gòu)建二叉排序樹T,T的每一個(gè)節(jié)點(diǎn)即為三元組E。同時(shí)統(tǒng)計(jì)c大于N的節(jié)點(diǎn)數(shù),得到ct。
[0054](2)根遍歷二叉樹T,將c大于N的節(jié)點(diǎn)填入H和HT。
[0055]最后,將包含模板頁(yè)面哈希值的數(shù)組H發(fā)送到源數(shù)據(jù)中心,將包含模板頁(yè)面數(shù)據(jù)的哈希表HT保存在目的端數(shù)據(jù)中心。數(shù)組H是按從小到大順序排列的,數(shù)組HT的元素按照哈希值從小到大排列。
[0056]源數(shù)據(jù)中心啟動(dòng)運(yùn)行時(shí),將全部模板頁(yè)面的哈希值存入一個(gè)數(shù)組常駐內(nèi)存中,然后構(gòu)建一個(gè)結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體中包含數(shù)組內(nèi)存放的哈希值和對(duì)應(yīng)的數(shù)組下標(biāo),按照哈希值大小對(duì)此結(jié)構(gòu)體數(shù)組排序;目的端數(shù)據(jù)中心啟動(dòng)時(shí),將全部模板頁(yè)面的內(nèi)容也存入一個(gè)數(shù)組常駐內(nèi)存,內(nèi)存頁(yè)面內(nèi)容數(shù)組與內(nèi)存頁(yè)面哈希值數(shù)組是按數(shù)組下標(biāo)一一對(duì)應(yīng)的。
[0057]2.源端處理過(guò)程
[0058](21)源端通過(guò)qemu-kvm的命令啟動(dòng)遷移。KVM默認(rèn)遷移方式有兩種類型的內(nèi)存頁(yè)面,一種是內(nèi)存頁(yè)面所有字節(jié)都相同的內(nèi)存頁(yè)面(絕大部分為零頁(yè)面)以及頁(yè)面內(nèi)字節(jié)不盡相同的內(nèi)存頁(yè)面,這兩種內(nèi)存頁(yè)面?zhèn)鬏敃r(shí)都有相應(yīng)的標(biāo)志字節(jié)。在遷移時(shí),源端虛擬機(jī)對(duì)待傳輸內(nèi)存頁(yè)面數(shù)據(jù)(標(biāo)志字節(jié)標(biāo)識(shí)為普通的內(nèi)存頁(yè)面)求哈希值。然后將此內(nèi)存頁(yè)面的哈希值在排序后的數(shù)組內(nèi)進(jìn)行二分查找。如果找到該哈希值,則給內(nèi)存頁(yè)面重新打上一種去重頁(yè)面標(biāo)志(RAM_SAVE_FLAG_DUPLICA),將4k內(nèi)存頁(yè)面內(nèi)容替換為索引值,使用socket傳輸?shù)侥康亩?,如果未找到,則不改變內(nèi)存頁(yè)面數(shù)據(jù),并將其從源端虛擬機(jī)傳輸?shù)侥康亩恕?br>
[0059](22)遷移虛擬機(jī)時(shí),它的數(shù)據(jù)以數(shù)據(jù)流的形式不停傳輸。數(shù)據(jù)流的結(jié)構(gòu)如圖2所示。數(shù)據(jù)流由數(shù)據(jù)單元構(gòu)成,每個(gè)數(shù)據(jù)單元由64位頭部和內(nèi)存頁(yè)面數(shù)據(jù)組成。數(shù)據(jù)單元含有內(nèi)存頁(yè)面數(shù)據(jù),內(nèi)存頁(yè)面數(shù)據(jù)的頭部有12位的標(biāo)志位。第9位和第11位是用來(lái)顯示遷移內(nèi)存頁(yè)面是否采取默認(rèn)的QEMU/KVM去重方法進(jìn)行壓縮。如果第11位被置1,則說(shuō)明內(nèi)存頁(yè)面被壓縮;否則,則是正常內(nèi)存頁(yè)面,同時(shí)第9位的標(biāo)志位將被置I。標(biāo)志位的最后一位,即第12位在QEMU-KVM-1.2.0中是廢置的,所以用它來(lái)標(biāo)識(shí)去重內(nèi)存頁(yè)面,RAM_SAVE_FLAG_DUPLICA在源代碼中命名為RAM_SAVE_FLAG_FULL。對(duì)于這種類型的數(shù)據(jù)單元,數(shù)據(jù)單元的存儲(chǔ)數(shù)據(jù)長(zhǎng)度是20Byte,即該內(nèi)存頁(yè)面的哈希值。虛擬機(jī)中內(nèi)存頁(yè)面的偏移量可以由64位頭部計(jì)算得出。
[0060]3.目的端處理過(guò)程
[0061](31)在遷移開始之前,目的端的虛擬機(jī)監(jiān)視器創(chuàng)建一個(gè)虛擬機(jī)空間用來(lái)放置虛擬機(jī)并打開一個(gè)節(jié)點(diǎn)來(lái)監(jiān)聽(tīng)遷移請(qǐng)求,同時(shí)與源端數(shù)據(jù)中心建立TCP連接。當(dāng)數(shù)據(jù)到達(dá)目的端,目的端將被動(dòng)接受遷移。
[0062](32)目的端接收到數(shù)據(jù)后首先判斷內(nèi)存頁(yè)面的標(biāo)志字節(jié),如果為普通內(nèi)存頁(yè)面或字節(jié)全部相同的內(nèi)存頁(yè)面,則直接發(fā)送給遷移命令創(chuàng)建的對(duì)應(yīng)虛擬機(jī)空間。如果為重復(fù)內(nèi)存頁(yè)面(標(biāo)記為RAM_SAVE_FLAG_DUPLICA),即接收到的數(shù)據(jù)單元的RAM_SAVE_FLAG_DUPLICA標(biāo)志位被置I時(shí),則取出其后代表數(shù)組下標(biāo)的兩個(gè)字節(jié),迅速定位到內(nèi)存頁(yè)面數(shù)據(jù)數(shù)組中的某一個(gè)具體的內(nèi)存頁(yè)面,然后將此內(nèi)存頁(yè)面的標(biāo)志字節(jié)置為普通,傳輸給對(duì)應(yīng)的虛擬機(jī)空間。
[0063](33)在期望傳輸時(shí)間小于設(shè)定的最大宕機(jī)時(shí)間的情況下,源端虛擬機(jī)掛起,將剩余內(nèi)存頁(yè)面和CPU、寄存器的狀態(tài)一并傳輸?shù)侥康亩耍康亩颂摂M機(jī)啟動(dòng),遷移完成。
[0064]本發(fā)明未詳細(xì)闡述部分屬于本領(lǐng)域公知技術(shù)。
[0065]以上所述,僅為本發(fā)明部分【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本領(lǐng)域的人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.基于統(tǒng)計(jì)的虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移優(yōu)化方法,其特征在于:所述方法包括以下步驟: (1)統(tǒng)計(jì)虛擬機(jī)跨數(shù)據(jù)中心相同內(nèi)存頁(yè)面出現(xiàn)的次數(shù),選取模板頁(yè)面,構(gòu)建內(nèi)存頁(yè)面索引;選取所述模板頁(yè)面的方法如下:當(dāng)某一內(nèi)存頁(yè)面tp在虛擬機(jī)跨數(shù)據(jù)中心中出現(xiàn)的次數(shù)n ^ N,其中,N為一個(gè)設(shè)定的常數(shù),則稱內(nèi)存頁(yè)面tp為模板頁(yè)面,所有模板頁(yè)面的集合記作TP ; (2 )虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移過(guò)程中,在源數(shù)據(jù)中心,如果待傳輸內(nèi)存頁(yè)面與模板頁(yè)面相同,則只傳輸該內(nèi)存頁(yè)面索引;如果待傳輸內(nèi)存頁(yè)面與模板頁(yè)面不同,則傳輸該內(nèi)存頁(yè)面數(shù)據(jù); (3)虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移過(guò)程中,在目的端數(shù)據(jù)中心,如果目的端虛擬機(jī)接收到的是內(nèi)存頁(yè)面索引,則根據(jù)內(nèi)存頁(yè)面索引定位到內(nèi)存頁(yè)面數(shù)據(jù)組來(lái)恢復(fù)內(nèi)存頁(yè)面數(shù)據(jù);如果目的端虛擬機(jī)接接收到的是內(nèi)存頁(yè)面數(shù)據(jù),則直接將該內(nèi)存頁(yè)面數(shù)據(jù)傳輸給對(duì)應(yīng)的虛擬機(jī)空間。
2.根據(jù)權(quán)利要求1所述的基于統(tǒng)計(jì)的虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移優(yōu)化方法,其特征在于:所述步驟(1)構(gòu)建內(nèi)存頁(yè)面索引的過(guò)程如下: (O使用哈希函數(shù)求取內(nèi)存頁(yè)面的哈希值; (2 )按照哈希值與內(nèi)存頁(yè)面內(nèi)容一一對(duì)應(yīng)的方式將數(shù)據(jù)存儲(chǔ)在一個(gè)以哈希值大小排序的表內(nèi)。
3.根據(jù)權(quán)利要求1所述的基于統(tǒng)計(jì)的虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移優(yōu)化方法,其特征在于:所述步驟(2)具體實(shí)現(xiàn)如下: (21)使用哈希函數(shù)求取待傳輸內(nèi)存頁(yè)面的哈希值; (22)在存儲(chǔ)所有模板頁(yè)面的哈希值的數(shù)組中查找待傳輸內(nèi)存頁(yè)面的哈希值; (23)如果查找命中,則實(shí)際傳輸待傳輸內(nèi)存頁(yè)面的哈希值,如果查找不命中,則實(shí)際傳輸待傳輸內(nèi)存頁(yè)面內(nèi)容。
4.根據(jù)權(quán)利要求1所述的基于統(tǒng)計(jì)的虛擬機(jī)跨數(shù)據(jù)中心動(dòng)態(tài)遷移優(yōu)化方法,其特征在于:所述步驟(3)具體實(shí)現(xiàn)如下: (31)目的端主機(jī)接收到遷移數(shù)據(jù)后,根據(jù)數(shù)據(jù)流結(jié)構(gòu)的頭部計(jì)算出該內(nèi)存頁(yè)面的地址,并根據(jù)該頭部中的標(biāo)志位判斷接收數(shù)據(jù)的類型; (32)如果判斷出接收到的是內(nèi)存頁(yè)面哈希值,則在存儲(chǔ)模板頁(yè)面內(nèi)容及哈希值的表中恢復(fù)出內(nèi)存頁(yè)面內(nèi)容并將數(shù)據(jù)傳輸?shù)缴弦徊接?jì)算出的指定地址;如果判斷出接收到的是內(nèi)存頁(yè)面內(nèi)容,則直接將接收到的數(shù)據(jù)傳輸?shù)缴弦徊接?jì)算出的指定地址。
【文檔編號(hào)】G06F9/455GK103885829SQ201410153740
【公開日】2014年6月25日 申請(qǐng)日期:2014年4月16日 優(yōu)先權(quán)日:2014年4月16日
【發(fā)明者】李明宇, 鄭冕, 褚涵月 申請(qǐng)人:中國(guó)科學(xué)院軟件研究所