李 力
(重慶電子工程職業(yè)學(xué)院,中國(guó) 重慶 401331)
云計(jì)算作為一種新興的計(jì)算模式, 近年來(lái)受到了越來(lái)越多的關(guān)注,獲得了研究人員和企業(yè)的肯定。 作為云計(jì)算核心內(nèi)容的虛擬化技術(shù),從底層硬件向上層虛擬機(jī)進(jìn)行了資源映射,實(shí)現(xiàn)了資源的抽象和相互隔離, 允許在單一物理主機(jī)上運(yùn)行多個(gè)不同的操作系統(tǒng)實(shí)例,提供多種服務(wù),而且能夠有效地將資源進(jìn)行彈性分配[1]。 傳統(tǒng)模式下,服務(wù)器可以依靠集群技術(shù)實(shí)現(xiàn)服務(wù)層級(jí)的負(fù)載均衡,而虛擬化則可以實(shí)現(xiàn)虛擬機(jī)層級(jí)的負(fù)載均衡。 依靠虛擬機(jī)在不同的主機(jī)之間遷移,集群能夠有效地進(jìn)行資源的分配和調(diào)度, 這是虛擬化最大的優(yōu)勢(shì)之一,因此虛擬機(jī)的遷移也是當(dāng)前的一個(gè)研究熱點(diǎn),引起了廣泛的關(guān)注。 本文主要對(duì)虛擬機(jī)遷移的相關(guān)技術(shù)進(jìn)行綜述。
最初的虛擬機(jī)遷移屬于“stop-and-copy”模式[2],也稱(chēng)為靜態(tài)遷移:首先令待遷移的虛擬機(jī)暫停服務(wù),并將內(nèi)存中的全部數(shù)據(jù)復(fù)制到另一臺(tái)主機(jī),然后在目標(biāo)主機(jī)上將虛擬機(jī)激活,繼續(xù)對(duì)外提供服務(wù)。這種模式的缺陷在于,一旦執(zhí)行遷移操作,服務(wù)就中斷了,不適于對(duì)業(yè)務(wù)連續(xù)性和用戶(hù)體驗(yàn)有著較高要求的場(chǎng)合。
由于靜態(tài)遷移的局限性,許多虛擬化平臺(tái)提供了全新的虛擬機(jī)遷移模式,稱(chēng)為熱遷移或者在線(xiàn)遷移。 簡(jiǎn)單來(lái)說(shuō)就是讓虛擬機(jī)保持運(yùn)行的同時(shí),讓它從源主機(jī)遷移到目的主機(jī),遷移完成后,服務(wù)在目的主機(jī)上重啟,中斷的時(shí)間非常短,對(duì)用戶(hù)而言基本上是透明的。 以VMware和Xen 為代表的虛擬化解決方案提供商都使用了這種模式, 而且還有很多開(kāi)源的云平臺(tái)也普遍將其用于數(shù)據(jù)中心的資源管理。
為了讓虛擬機(jī)在遷移之后的狀態(tài)能夠和之前保持一致,就必須傳遞CPU 的運(yùn)行狀態(tài)、I/O 狀態(tài)、網(wǎng)絡(luò)通信的狀態(tài)和內(nèi)存里的數(shù)據(jù)。 在這些需要遷移的內(nèi)容中,CPU 和I/O 的遷移相對(duì)簡(jiǎn)單,數(shù)據(jù)量較少,結(jié)構(gòu)也比較單一,而內(nèi)存遷移是一大難題,不僅因?yàn)閮?nèi)存數(shù)據(jù)本身的重要性,而且內(nèi)存數(shù)據(jù)本身的存儲(chǔ)結(jié)構(gòu)也很復(fù)雜[3]。 當(dāng)今只有pre-copy 和post-copy 兩種算法較好地實(shí)現(xiàn)了內(nèi)存的遷移。
pre-copy 算法的核心思想如下:源主機(jī)將虛擬機(jī)的所有內(nèi)存頁(yè)面復(fù)制傳送到目的主機(jī),在此期間虛擬機(jī)不間斷運(yùn)行;復(fù)制之后再次被更改的內(nèi)存頁(yè)面稱(chēng)為臟頁(yè)面,虛擬機(jī)開(kāi)始會(huì)對(duì)后續(xù)的臟頁(yè)面進(jìn)行迭代復(fù)制。在每輪發(fā)送完成后檢查當(dāng)前是否符合stop-and-copy 條件,如滿(mǎn)足則進(jìn)入stop-and-copy 階段,在源主機(jī)上虛擬機(jī)被暫停運(yùn)行,最后的少量?jī)?nèi)存頁(yè)面被復(fù)制到目的主機(jī),此時(shí)目的主機(jī)和源主機(jī)的虛擬機(jī)內(nèi)存頁(yè)面達(dá)到一致,目的主機(jī)使虛擬機(jī)接管工作,刪除源主機(jī)上的虛擬機(jī)數(shù)據(jù)。與靜態(tài)遷移相比,pre-copy 縮短了總遷移時(shí)間和停機(jī)時(shí)間,在負(fù)載較輕的情況下,pre-copy 可以把停機(jī)時(shí)間控制在不到0.2s 的范圍之內(nèi),很好的實(shí)現(xiàn)了遷移的透明性。而在負(fù)載偏高的情況下,虛擬機(jī)的內(nèi)存頁(yè)面修改較為頻繁,使得臟頁(yè)面不停地產(chǎn)生,因而必須進(jìn)行迭代復(fù)制和判斷。 這就造成了較大的系統(tǒng)開(kāi)銷(xiāo),引起很長(zhǎng)的停機(jī)時(shí)間和總遷移時(shí)間。
post-copy 算法和pre-copy 算法相反, 它讓源主機(jī)一開(kāi)始就停止虛擬機(jī)的運(yùn)行,在暫停期間將虛擬機(jī)的CPU 和I/O 信息復(fù)制到目的主機(jī)上,由于數(shù)據(jù)量很小,所以目的主機(jī)立即便能夠啟動(dòng)虛擬機(jī)接管工作;在目的虛擬機(jī)運(yùn)行過(guò)程中,一旦訪(fǎng)問(wèn)到相關(guān)內(nèi)存產(chǎn)生缺頁(yè)錯(cuò)誤,就會(huì)向源主機(jī)發(fā)送頁(yè)面請(qǐng)求,令其將這些內(nèi)存頁(yè)面?zhèn)魉瓦^(guò)來(lái)。 直到目的虛擬機(jī)訪(fǎng)問(wèn)了所有的內(nèi)存頁(yè)面, 才能停止源虛擬機(jī)釋放資源。 postcopy 相比pre-copy 算法,進(jìn)一步縮短了停機(jī)時(shí)間,但總的遷移時(shí)間則更長(zhǎng)。 如果多個(gè)虛擬機(jī)需要并發(fā)的動(dòng)態(tài)遷移,源主機(jī)上會(huì)因?yàn)榈却齼?nèi)存遷移而消耗大量的計(jì)算和存儲(chǔ)資源, 并且很長(zhǎng)時(shí)間無(wú)法得到釋放,導(dǎo)致整體的效率降低。
目前主流的熱遷移技術(shù)都有其局限性和不足之處,pre-copy 算法的總遷移時(shí)間過(guò)長(zhǎng),而時(shí)間越長(zhǎng),遷移所占用的資源就越多,使遷移中的虛擬機(jī)遭受長(zhǎng)時(shí)間的服務(wù)性能下降。特別是如果臟頁(yè)面生成的速率高于內(nèi)存復(fù)制的速率,遷移過(guò)程就會(huì)更長(zhǎng),直到耗時(shí)超過(guò)閾值,導(dǎo)致服務(wù)中斷。 為了改善上述問(wèn)題,Bradford 等人設(shè)計(jì)了一種名為Memory balloon 的機(jī)制[4],通過(guò)消除一些無(wú)用的內(nèi)存數(shù)據(jù)來(lái)減少首輪復(fù)制所需要傳輸?shù)臄?shù)據(jù)量,從而縮短熱遷移的總時(shí)間;Surie 等人通過(guò)不斷的記錄用戶(hù)行為信息,并且將行為在目標(biāo)主機(jī)上重現(xiàn)的方式來(lái)減少虛擬機(jī)遷移過(guò)程中產(chǎn)生的整體開(kāi)銷(xiāo)[5]。
標(biāo)準(zhǔn)的post-copy 算法首先傳送vCPU 和I/O 信息,然后使目標(biāo)虛擬機(jī)接管工作,接下來(lái)的內(nèi)存讀取基于“按需取頁(yè)”的思路,由于缺頁(yè)而向原虛擬機(jī)索取。 由于網(wǎng)絡(luò)延遲,處理每個(gè)頁(yè)面訪(fǎng)問(wèn)錯(cuò)誤都會(huì)明顯地拖慢虛擬機(jī)。此外,如果目的虛擬機(jī)的某些內(nèi)存頁(yè)面一直不被訪(fǎng)問(wèn),遷移便始終無(wú)法完成。 基于頁(yè)面預(yù)取的post-copy 算法事先預(yù)測(cè)可能要發(fā)生的缺頁(yè)異常并調(diào)整頁(yè)面推送序列, 由于內(nèi)存訪(fǎng)問(wèn)的局部性原理,這種算法有效地減少了缺頁(yè)異常的發(fā)生,提高了遷移的效率[6]。
混合方法綜合了pre-copy 算法和post-copy 算法的優(yōu)勢(shì), 它先進(jìn)行pre-copy 過(guò)程,保持源虛擬機(jī)繼續(xù)運(yùn)行的同時(shí)復(fù)始終制它所有的內(nèi)存頁(yè)面到目的主機(jī)上,然后停機(jī)將CPU 和I/O 的狀態(tài)信息發(fā)送過(guò)去[7]。 目的主機(jī)收到后,啟動(dòng)虛擬機(jī)接管工作,最后再按post-copy方法等待臟頁(yè)面的傳送。 混合方法在讀密集型負(fù)載下有較好的性能,在寫(xiě)密集型負(fù)載下有更確定的總遷移時(shí)間。
熱遷移在大多數(shù)情況下是為了負(fù)載均衡, 或?qū)崿F(xiàn)動(dòng)態(tài)資源調(diào)度。后者是虛擬化節(jié)能的主要手段,一旦虛擬機(jī)的負(fù)載降低,就可以遷移到少量主機(jī),并關(guān)閉其它主機(jī)。 然而,云環(huán)境的熵在不斷增高,隨著虛擬機(jī)的數(shù)量和服務(wù)的種類(lèi)呈海量增長(zhǎng),使得虛擬機(jī)、主機(jī)和機(jī)架之間經(jīng)典的三層嵌套裝箱問(wèn)題變得原來(lái)越復(fù)雜[8],此外,從節(jié)能的角度來(lái)看,越來(lái)越多的遷移行為將導(dǎo)致額外的CPU 開(kāi)銷(xiāo)和網(wǎng)絡(luò)開(kāi)銷(xiāo),產(chǎn)生額外的能耗。 在這種背景下僅僅靠?jī)?yōu)化遷移算法來(lái)解決問(wèn)題,已經(jīng)不具有現(xiàn)實(shí)性。本文認(rèn)為今后將會(huì)有更多的研究致力于虛擬機(jī)的放置和合理的調(diào)度算法。
[1]蔣永生,彭俊杰,張武.云計(jì)算及云計(jì)算實(shí)施標(biāo)準(zhǔn):綜述與探索[J].上海大學(xué)學(xué)報(bào):自然科學(xué)版,2013,02:5-13.
[2]Whitaker A, Cox R-S, Shaw M, et al.Constructing services with interposable virtual hardware [C]/ /In Proceedings of the 1st symposium on networked systems design and implementation(NSDI), CA, USA, 2004:169-182.
[3]常德成,徐高潮.虛擬機(jī)動(dòng)態(tài)遷移方法[J].計(jì)算機(jī)應(yīng)用研究 2013.04:17-22.
[4]Bradford R, Kotsovinos E, Feldmann A.Live wide-area migration of virtual machines including local persistent state[C]/ /Proceedings of the 3rd international conference on virtual execzrtion environments.(VEE), NY, USA, 2007.169-179.
[5]Surie A, Cavilla A-L, Lara E-D, et al.Low-bandwidth VM migration via opportunistic replay.In the 9th workshop on mobile computing systems and applications (HotMobile)[J].NY, USA, 2008:74-79.
[6]Michael R.Hines, Kartik Gopalan.Post-Copy Based Live Virtual Machine Migration Using Adaptive Pre -Paging and Dynamic Self -Ballooning [C]/ /Proceedings of the 2009 ACM SIGPLAN/SIGOPS International Conference on Virtual Execution Environments.New York, USA: ACM Press, 2009:51-60.
[7]NOACK M.Comparative evaluation of process migration algorithms [D].Dresden: Dresden University of Technology-Operating Systems Group, 2003.
[8]周文煜,陳華平,楊壽保,方君.基于虛擬機(jī)遷移的虛擬機(jī)集群資源調(diào)度[J].華中科技大學(xué)學(xué)報(bào):自然科學(xué)版,2011,06:130-133.