亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種輕量級虛擬機遷移方法

文檔序號:6516908閱讀:294來源:國知局
一種輕量級虛擬機遷移方法
【專利摘要】本發(fā)明提供一種輕量級虛擬機遷移方法,包括:從源端向目的端并發(fā)地遷移構成待遷移虛擬機的各個進程;以及在目的端恢復遷移完成的所述各個進程的運行。所述方法還包括:將構成所述待遷移虛擬機的各個進程的遷移切分為多個時序階段,其中每個時序階段對應一個Daemon進程。多個Daemon進程并發(fā)工作,每個Daemon進程依次服務所述各個進程的對應時序階段的資源遷移。本發(fā)明在保證了遷移的效率和可靠性的同時,縮短了虛擬機遷移的服務中斷時間。
【專利說明】一種輕量級虛擬機遷移方法
【技術領域】
[0001]本發(fā)明涉及計算機操作系統(tǒng)領域,尤其涉及一種輕量級虛擬機遷移方法。
【背景技術】
[0002]隨著數(shù)據(jù)規(guī)模的爆炸性增長,系統(tǒng)規(guī)模越來越大,系統(tǒng)所管理的異構資源也越來越多。為了順應這種形式,且有效地利用和管理各種系統(tǒng)資源,虛擬機技術應運而生。虛擬機技術能夠將資源做靈活地切割、封裝,為用戶提供邏輯主機,即視圖上與物理主機一致的獨立的應用運行環(huán)境。
[0003]在所有虛擬機技術中,輕量級虛擬機技術,即OS級別的虛擬機技術,具有高性能低損耗的優(yōu)勢,在數(shù)據(jù)中心應用廣泛。輕量級虛擬機技術通過隔離OS中的進程組并為其分配相應資源,將單個物理服務器轉變?yōu)槎鄠€彼此獨立的邏輯服務器,即容器。容器中承載著各種數(shù)據(jù)應用,是事實上的服務提供者。
[0004]研究輕量級虛擬機的遷移具有重要意義,首先,數(shù)據(jù)中心內輕量級虛擬機承載的服務多且不能間斷,為保證服務質量不受硬件環(huán)境變化和故障的影響,必須采用相應的遷移技術來提高系統(tǒng)整體的可靠性;其次,輕量級虛擬機開銷小,單個容器比較節(jié)省資源,但隨著容器數(shù)量的增加,容器在物理服務器中的分布也將對整個數(shù)據(jù)中心的資源利用及開銷產生重要影響,改變容器的分布就依賴于遷移技術;最后,當物理服務器的數(shù)量、集群拓撲發(fā)生變化時,使用遷移技術動態(tài)調整容器的分布,不但有能耗和可靠性方面的收益,通過服務資源需求與物理硬件的優(yōu)化匹配,還能提高容器性能、提升服務質量。然而,目前還沒有關于輕量級虛擬機遷移的任何研究。
[0005]針對上述問題,需要一種用于輕量級虛擬機遷移的方法。

【發(fā)明內容】

[0006]本發(fā)明提供一種輕量級虛擬機遷移方法,所述方法包括:
[0007]步驟I)、從源端向目的端并發(fā)地遷移構成待遷移虛擬機的各個進程;
[0008]步驟2)、在目的端,恢復遷移完成的所述各個進程的運行。
[0009]在一個實施例中,步驟I)包括:
[0010]步驟11)、在源端,將構成所述待遷移虛擬機的各個進程的遷移切分為多個時序階段,其中每個時序階段對應一個Daemon進程;
[0011]步驟12)、在源端,多個Daemon進程并發(fā)工作,其中每個Daemon進程依次服務所述各個進程的對應時序階段的資源遷移;
[0012]步驟13)在目的端,接收源端遷移來的數(shù)據(jù)。
[0013]在一個實施例中,步驟12)還包括對于每個進程依次遷移其每個時序階段的資源。
[0014]在進一步的實施例中,步驟11)之前還包括采用廣度優(yōu)先遍歷算法依次凍結所述待遷移虛擬機的進程樹中的進程;其中,對于同一層級的進程按照派生的順序進行遍歷。
[0015]在進一步的實施例中,在步驟12)中,每個Daemon進程按凍結順序依次服務各個進程的對應時序階段的資源遷移。
[0016]在一個實施例中,步驟13)之前還包括在目的端派生對應于在源端構成所述待遷移虛擬機的各個進程的embryo進程。
[0017]在進一步的實施例中,步驟13)包括在目的端由embryo進程依次接收對應的源端進程遷移來的數(shù)據(jù)。
[0018]在一個實施例中,在步驟12)中,Daemon進程服務進程的對應時序階段的資源遷移包括:
[0019]步驟121)、在源端,由內核態(tài)的Daemon進程根據(jù)用戶態(tài)工作進程的進程號將由進程號定位的數(shù)據(jù)傳送到指定的用戶態(tài)工作進程;其中,該數(shù)據(jù)包括所述進程中對應該Daemon進程的時序階段的資源;
[0020]步驟122)、所述用戶態(tài)工作進程根據(jù)自身進程號通過系統(tǒng)調用接收傳送來的數(shù)據(jù);
[0021]步驟123)、所述用戶態(tài)工作進程對數(shù)據(jù)進行編碼處理;
[0022]步驟124)、所述用戶態(tài)工作進程將數(shù)據(jù)傳送到目的端。
[0023]在進一步的實施例中,步驟13)包括:
[0024]步驟131)、在目的端,由用戶態(tài)的embryo進程接收對應的源端進程傳送來的數(shù)據(jù);
[0025]步驟132)、所述用戶態(tài)embryo進程對接收的數(shù)據(jù)進行解碼處理;
[0026]步驟133)、所述用戶態(tài)embryo進程將數(shù)據(jù)傳送到編址為O的內核,其中將所述用戶態(tài)embryo進程的進程號添加在所傳送數(shù)據(jù)的包頭中;
[0027]步驟134)、所述用戶態(tài)embryo進程陷入內核,轉化為內核態(tài)進程,由該內核態(tài)進程根據(jù)進程號接收數(shù)據(jù)。
[0028]在一個實施例中,在步驟11)中根據(jù)資源類別將構成所述待遷移虛擬機的各個進程的遷移切分為多個時序階段,其中在不同的時序階段遷移不同類別的資源。
[0029]在一個實施例中,步驟I)之前還包括遷移待遷移虛擬機的整體配置及描述信息。
[0030]在一個實施例中,步驟I)之前還包括在目的端同步待遷移虛擬機的硬盤配置文件。
[0031]在另一個實施例中,步驟I)之前還包括遷移非共享存儲的初始全映像。在進一步的實施例中,步驟2)還包括同步所述非共享存儲的增量變化。
[0032]采用本發(fā)明可以達到如下的有益效果:
[0033]將虛擬容器的內存數(shù)據(jù)以進程為單位采用流水線的形式高并發(fā)地傳輸,縮短了輕量級虛擬機遷移的服務中斷時間。此外,基于Netlink搭建跨內核態(tài)和用戶態(tài)的遷移通道,利用用戶空間的數(shù)據(jù)壓縮校驗等資源,保證了遷移的效率和可靠性。
【專利附圖】

【附圖說明】
[0034]圖1是根據(jù)本發(fā)明一個實施例的輕量級虛擬機遷移方法的流程圖;
[0035]圖2是采用廣度優(yōu)先遍歷算法處理待遷移虛擬機的進程樹的示意圖;以及
[0036]圖3是根據(jù)本發(fā)明一個實施例的輕量級虛擬機遷移流水線的示意圖?!揪唧w實施方式】
[0037]下面結合附圖和具體實施例對本發(fā)明加以說明。應當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0038]根據(jù)本發(fā)明的一個實施例,提供一種輕量級虛擬機遷移方法,圖1示出了該方法的整體流程。概括來說,該方法將輕量級虛擬機的遷移分解為進程的遷移,包括預處理、流水線遷移、后處理這幾個階段。在流水線遷移過程中,基于Netlink的機制搭建跨內核態(tài)和用戶態(tài)的遷移通道,并且采用高并發(fā)流水線的形式縮短虛擬機遷移的服務中斷時間,最終實現(xiàn)準實時的遷移。
[0039]繼續(xù)參考圖1,具體描述輕量級虛擬機遷移的每一步驟:
[0040]第一步、遷移的預處理
[0041]在一個實施例中,在本步驟執(zhí)行目的端服務的開啟、配置文件的管理等操作。其中,包括虛擬機整體配置及描述信息的遷移,如Quota、統(tǒng)計量、IP_C0NNTRACK、IPV4/6地址信息、路由表、防火墻規(guī)則等數(shù)據(jù)的遷移。
[0042]在進一步的實施例中,本步驟還負責外存的遷移,如果外存采用共享存儲,則遷移的目的端僅需要同步待遷移虛擬機的硬盤配置文件;如果外存采用獨立非共享的存儲,例如源端宿主機的一塊獨立物理硬盤,則需要將該硬盤的初始全映像預先遷移過去,這一過程在后臺進行,不影響虛擬機在源端的正常運行。然而,該預先遷移過程可能會產生不一致的硬盤數(shù)據(jù),針對這一情況,可以在后處理階段由目的端發(fā)起的同步非共享存儲增量變化的操作來解決。
[0043]第二步、展開流水線遷移
[0044]概括而言,本步驟可以包括以下子步驟:
[0045]1.在源端遍歷待遷移虛擬機的進程樹,同時凍結(suspend)構成該虛擬機的各個進程。優(yōu)選地,可使用廣度優(yōu)先遍歷算法進行遍歷。要凍結一個進程,可以通過發(fā)送信號來改變該進程的執(zhí)行狀態(tài),使其停止運行,從而保證遷移過程中進程的內存數(shù)據(jù)映像的一致。
[0046]在采用廣度優(yōu)先遍歷算法的過程中,對于同一層級的各個進程,一般的遍歷原則是:按照派生的時間序來掃描,線程(即輕量級進程)組的Leader (即領頭線程)優(yōu)先。
[0047]2.再次遍歷進程樹(例如通過廣度優(yōu)先遍歷算法)進行檢查,如果進程T已凍結,則提取進程T的某項資源(或者說某類資源),放入待遷移數(shù)據(jù)隊列中。
[0048]其中,某項資源是指可按資源類別(如進程結構體、進程內存空間、進程文件列表等資源)對進程進行切分,從而使不同的資源在不同的時序階段中進行遷移。
[0049]3.對于待遷移數(shù)據(jù)隊列中進程T的已經提取就緒的資源,例如包括內存、文件、進程間通訊信息等資源,展開遷移。對應于每個源端的待遷移進程,在目的端會有一個對應的embryo (胚胎)進程來接收數(shù)據(jù)。
[0050]如子步驟2所述,在遷移前,首先將輕量級虛擬機的遷移分解為各個進程的遷移,再將各個進程的遷移根據(jù)其資源類別切分為多個時序階段,典型地,可按進程結構體、進程內存空間、進程文件列表等資源進行切分。
[0051]遷移時,源端可采用多Daemon的服務模型(Daemon是一種后臺服務程序),每個Daemon進程相當于流水線上的一個功能部件,對應上述進程遷移的某個時序階段。這樣,待遷移虛擬機中的各個進程依遍歷順序提出服務請求,多個Daemon進程并發(fā)工作,每個Daemon進程流水式地服務于依次提出服務請求的虛擬機進程,從而構成了流水線式的傳輸服務。
[0052]傳輸順序也決定了目的端embryo進程的派生順序。在一個實施例中,在目的端,embryo進程依據(jù)源端虛擬機進程的樹狀關系在目的端遞歸地派生出同樣結構的進程樹(參見在下文中目的端流水線處理主體流程偽碼),樹中的每個節(jié)點都是一個embryo接收進程,分別對應源端進程樹中對應的待遷移進程。embryo進程依序接收源端對應進程的資源,填充本地進程。在接收的過程中,embryo進程像胚胎一樣分裂,發(fā)育,最終成長為與源端進程一模一樣的個體,由其分裂而形成的embryo群體則成長為進程樹。當embryo進程樹整體完成上述步驟時,虛擬機遷移基本結束,中斷的服務可以重新啟動。
[0053]4.在目的端恢復已遷移完成的進程的運行
[0054]在目的端執(zhí)行進程遷移的后處理,如果進程T的相關資源都已遷移完成(embryo進程可輪詢檢查是否遷移完成),即T的凍結前的內存映像已經完整克隆到目的端,則embryo進程轉換自身的內存空間,切換執(zhí)行邏輯,恢復源端對應進程的映像和執(zhí)行起始點,從而恢復T在目的端的運行,完成單個進程的遷移。
[0055]在流水線遷移過程中,在源端遍歷虛擬機的進程樹以及切分進程的時序階段都是在內核態(tài)完成的。為節(jié)省遷移過程中的網(wǎng)絡傳輸帶寬,可以在遷移之前在源端將要遷移的數(shù)據(jù)搬移到用戶態(tài),利用用戶空間的資源、函數(shù)庫對MB甚至GB級的遷移數(shù)據(jù)展開編碼處理。例如,對要遷移的數(shù)據(jù)按照一定的格式進行組織、壓縮以及變換。其中,壓縮可采用基于文件系統(tǒng)語義的外存數(shù)據(jù)壓縮算法、RLE算法和GZIP算法等。在進一步的實施例中,要保證遷移數(shù)據(jù)完整正確,還可以對遷移數(shù)據(jù)塊展開校驗,例如,采用MD5指紋校驗算法來進行數(shù)據(jù)校驗。
[0056]在目的端,需要在用戶態(tài)對源端遷移過來的已編碼數(shù)據(jù)進行解碼處理,其流程恰好是源端編碼的逆過程。
[0057]在一個實施例中,本發(fā)明基于Linux平臺下的Net I ink機制建立內核態(tài)和用戶態(tài)之間的端對端數(shù)據(jù)傳輸通道,實現(xiàn)端對端的數(shù)據(jù)傳輸。這里的端對端,指的是進程到進程的數(shù)據(jù)傳輸。該通道的工作步驟如下:
[0058]I).在源端,內核態(tài)有多進程(或者說是一些常駐的Daemon進程),負責不同資源的遷移。用戶態(tài)具備多個工作進程,彼此之間做負載均衡;所有的待遷移內存和外存數(shù)據(jù),通過工作進程的進程號Pid來定位,并且由內核進程向指定的工作進程傳送。
[0059]2).在源端,用戶態(tài)工作進程根據(jù)自身的Pid通過系統(tǒng)調用接收內核傳送給自己的數(shù)據(jù),進而執(zhí)行編碼、壓縮、校驗等工作,然后通過協(xié)議層發(fā)起向目的端的數(shù)據(jù)遷移。在用戶態(tài)執(zhí)行這些操作,是由于用戶態(tài)具備豐富的資源和成熟的第三方函數(shù)庫,便于對數(shù)據(jù)進行壓縮、校驗和編解碼。
[0060]3).在目的端,用戶態(tài)存在多個embryo進程,其中每個embryo進程對應虛擬機進程樹中的一個進程,embryo進程接收源端傳過來的數(shù)據(jù),經用戶態(tài)解碼處理后,會通過Netlink傳遞給編址為O的內核,同時將embryo進程的Pid作為地址信息添加在Netlink消息的包頭中。
[0061]4).在目的端,內核態(tài)的多線程分別對應多embryo進程。當用戶態(tài)的embryo進程陷入內核后,就轉化為內核態(tài)進程;該內核態(tài)進程根據(jù)Pid接收數(shù)據(jù),進而在內核態(tài)操控embryo進程的內存空間、描述結構等,最終完成進程恢復。
[0062]第三步、輕量級虛擬機遷移的后處理
[0063]當所有的進程在目的端依次恢復以后,虛擬機遷移就基本完成了。
[0064]在一個實施例中,對于第一步中描述的獨立非共享存儲的情況,在本步驟還需要從源端同步遷移過程中所產生的外存增量數(shù)據(jù),使得外存數(shù)據(jù)也得以恢復到凍結前一刻的一致的狀態(tài)。優(yōu)選地,該同步過程可以采用On Demand的方式懶惰執(zhí)行,從而縮短遷移過程中正常服務的中斷時間。
[0065]下文中,以圖2所示的虛擬機進程樹為例,進一步描述本發(fā)明提供的輕量級虛擬機遷移方法以及用于實現(xiàn)流水線遷移的偽碼。
[0066]圖2描述了一個典型的Linux虛擬機進程樹,其中,樹的根節(jié)點為init進程,它是所有進程的祖先,其下分別派生有遠程安全Shell登錄服務(sshd)、系統(tǒng)審計服務(auditd)和系統(tǒng)定時服務(crond)的相關進程。遠程安全Shell登錄服務(sshd)下存在兩個子進程,分別為對遠程登錄的root用戶進行服務的rootOpts/l進程,和對遠程登錄的jason用戶進行服務的jasonOpts/2進程。系統(tǒng)審計服務(auditd)下沒有子進程。系統(tǒng)定時服務(crond)下存在兩個子進程,分別為對應日常服務的dailyjobl和dailyjob2。
[0067]首先在源端采用廣度優(yōu)先遍歷算法遍歷該進程樹,凍結、分析該待遷移虛擬機進程樹,接著形成待遷移進程資源的索引結構,進而依序傳輸。
[0068]如圖2中所示,先掃描init進程,再掃描其子進程sshd、auditd、crond,最后掃描位于第三層的 root@pts/l、jasonipts/2> dailyjobl、dailyjob2。
[0069]這里的遍歷主要用于兩個子步驟,首先,第一次遍歷對各個進程展開遍歷并依序凍結;接下來,第二次遍歷檢查進程的狀態(tài),如果已經凍結完成,則提取進程資源,將進程的內存空間、文件等資源分類整理,切分好進程的時序階段,建立索引數(shù)組,為后續(xù)遷移做好準備。
[0070]圖3示出了圖2的虛擬機進程樹中各進程的流水線式遷移過程。圖3中,縱坐標為待遷移進程,其順序為掃描序(即遍歷順序)。橫坐標為時間軸,代表進程遷移的各個階段。兩次遍歷為前兩個預備階段,分別是凍結(suspend)和提取(extract)。進程資源的流水線傳輸為主體部分,其按照資源類別切分為主要的5個時序階段:進程內核結構元數(shù)據(jù)遷移(taskstruct)、進程內存資源遷移(mm)、進程文件資源遷移(file)、進程網(wǎng)絡資源遷移(netif)和進程通訊資源遷移(sysvipc)。其中,可按照資源的重要程度依次遷移,即順序為 taskstruct、mm、file、netif、sysvipc。最后階段為后處理階段(postprocess),代表遷移進程在目的端的運行恢復。
[0071]流水線遷移需要源端和目的端雙方的配合,下面將采用偽碼來進行描述。在該偽碼中,有兩個全局變量代表遷移中的關鍵數(shù)據(jù)結構,說明如下:1)源端的全局變量queue,代表全局資源鏈表,其中的每個元素item分別代表一個待遷移的進程;2)目的端的全局變量server_sock,代表目的端的網(wǎng)絡服務對外偵聽接口。
[0072]源端的流水線遷移的流程如下:
[0073]global queue; //初始化全局隊列queuesrc—site—main() {
suspend_task_init_wakeup(task_suspend, ve);//spawn 凍結處理后臺進程
并喚醒其立即執(zhí)行
[0074]
【權利要求】
1.一種輕量級虛擬機遷移方法,包括: 步驟I)、從源端向目的端并發(fā)地遷移構成待遷移虛擬機的各個進程; 步驟2)、在目的端,恢復遷移完成的所述各個進程的運行。
2.根據(jù)權利要求1所述的方法,其中,步驟I)包括: 步驟11)、在源端,將構成所述待遷移虛擬機的各個進程的遷移切分為多個時序階段,其中每個時序階段對應一個Daemon進程; 步驟12 )、在源端,多個Daemon進程并發(fā)工作,其中每個Daemon進程依次服務所述各個進程的對應時序階段的資源遷移; 步驟13)在目的端,接收源端遷移來的數(shù)據(jù)。
3.根據(jù)權利要求2所述的方法,其中,步驟12)還包括: 對于每個進程,依次遷移其每個時序階段的資源。
4.根據(jù)權利要求2或3所述的方法,其中,步驟11)之前還包括: 采用廣度優(yōu)先遍歷算法依次凍結所述待遷移虛擬機的進程樹中的進程;其中,對于同一層級的進程按照派生的順序進行遍歷。
5.根據(jù)權利要求4所述的方法,在步驟12)中: 每個Daemon進程按凍結順序依次服務各個進程的對應時序階段的資源遷移。
6.根據(jù)權利要求2、3或5中任何一個所述的方法,其中,步驟13)之前還包括: 在目的端,派生對應于在源端構成所述待遷移虛擬機的各個進程的embryo進程。
7.根據(jù)權利要求6所述的方法,其中,步驟13)包括: 在目的端,由embryo進程依次接收對應的源端進程遷移來的數(shù)據(jù)。
8.根據(jù)權利要求7所述的方法,在步驟12)中,Daemon進程服務進程的對應時序階段的資源遷移包括: 步驟121)、在源端,由內核態(tài)的Daemon進程根據(jù)用戶態(tài)工作進程的進程號將由進程號定位的數(shù)據(jù)傳送到指定的用戶態(tài)工作進程;其中,該數(shù)據(jù)包括所述進程中對應該Daemon進程的時序階段的資源; 步驟122)、所述用戶態(tài)工作進程根據(jù)自身進程號通過系統(tǒng)調用接收傳送來的數(shù)據(jù); 步驟123)、所述用戶態(tài)工作進程對數(shù)據(jù)進行編碼處理; 步驟124)、所述用戶態(tài)工作進程將數(shù)據(jù)傳送到目的端。
9.根據(jù)權利要求8所述的方法,其中,步驟13)包括: 步驟131)、在目的端,由用戶態(tài)的embryo進程接收對應的源端進程傳送來的數(shù)據(jù); 步驟132)、所述用戶態(tài)embryo進程對接收的數(shù)據(jù)進行解碼處理; 步驟133)、所述用戶態(tài)embryo進程將數(shù)據(jù)傳送到編址為O的內核,其中將所述用戶態(tài)embryo進程的進程號添加在所傳送數(shù)據(jù)的包頭中; 步驟134)、所述用戶態(tài)embryo進程陷入內核,轉化為內核態(tài)進程,由該內核態(tài)進程根據(jù)進程號接收數(shù)據(jù)。
10.根據(jù)權利要求8或9所述的方法,在步驟11)中: 根據(jù)資源類別,將構成所述待遷移虛擬機的各個進程的遷移切分為多個時序階段,其中在不同的時序階段遷移不同類別的資源。
11.根據(jù)權利要求1-3、5、7-9中任何一個所述的方法,其中,步驟I)之前還包括:遷移待遷移虛擬機的整體配置及描述信息。
12.根據(jù)權利要求1-3、5、7-9中任何一個所述的方法,其中,步驟1)之前還包括:在目的端同步待遷移虛擬機的硬盤配置文件。
13.根據(jù)權利要求1-3、5、7-9中任何一個所述的方法,其中,步驟1)之前還包括:遷移非共享存儲的初始全映像。
14.根據(jù)權利要求13所述的方法,其中,步驟2)還包括:同步所述非共享存儲的增量變化。
【文檔編號】G06F9/455GK103577245SQ201310520307
【公開日】2014年2月12日 申請日期:2013年10月29日 優(yōu)先權日:2013年10月29日
【發(fā)明者】向小佳, 趙曉芳 申請人:中國科學院計算技術研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1