基于Virtio驅(qū)動進行虛擬機內(nèi)存在線遷移的方法
【專利摘要】本發(fā)明公開了一種基于Virtio驅(qū)動進行虛擬機內(nèi)存在線遷移的方法,主要涉及虛擬機虛擬化領(lǐng)域。該方法包括:修改虛擬機管理器后臺驅(qū)動以指導(dǎo)客戶機的內(nèi)存遷移;編寫客戶機Virtio驅(qū)動以分配保留頁面;參考內(nèi)存位圖進行非保留頁面的循環(huán)遷移。本發(fā)明將半虛擬化技術(shù)應(yīng)用于虛擬機的遷移當(dāng)中,通過虛擬機內(nèi)存的實際使用情況動態(tài)地進行內(nèi)存遷移,相對于傳統(tǒng)虛擬機遷移方法,能夠大大降低虛擬機的內(nèi)存遷移時間和開銷,提高遷移效率。
【專利說明】基于Virtio驅(qū)動進行虛擬機內(nèi)存在線遷移的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及虛擬機虛擬化領(lǐng)域,特別涉及一種采用virtio驅(qū)動進行虛擬機內(nèi)存在線遷移的方法。
【背景技術(shù)】
[0002]虛擬機是指通過軟件模擬的具有完整硬件系統(tǒng)功能的、運行在一個完全隔離環(huán)境中的完整計算機系統(tǒng)。通過對計算資源的抽象,屏蔽各種各樣復(fù)雜的底層物理環(huán)境,來實現(xiàn)虛擬化。虛擬化技術(shù)分為以下三類:用戶層的虛擬化,基于操作系統(tǒng)的有硬件支持的虛擬化,直接操作管理硬件的虛擬化。而不同的虛擬機使用不同的虛擬化技術(shù),如當(dāng)前使用最為廣泛的X86虛擬機有Vmware,Xen, KVM,其中KVM是使用Linux內(nèi)核的虛擬機,它只能支持有硬件支持的虛擬化,而在用戶層使用Qemu來實現(xiàn)。
[0003]虛擬機的遷移技術(shù)是虛擬機虛擬化技術(shù)的一個研究熱點,流行的虛擬化解決方案基本上都有對應(yīng)的遷移技術(shù),虛擬機遷移分為P2V,P2P,V2V三種,而這里討論的KVM則是其中的V2V(虛擬機遷移到虛擬機)。虛擬機遷移主要工作為CPU狀態(tài)的遷移,內(nèi)存的遷移,塊設(shè)備遷移,網(wǎng)絡(luò)遷移這幾個部分,針對內(nèi)存和塊設(shè)備的遷移,KVM采用了預(yù)拷貝技術(shù)。如何縮短在線遷移的時間,只用很短的停機時間使得用戶盡可能的感覺不到,是虛擬機在線遷移技術(shù)需要解決的問題。
[0004]當(dāng)前內(nèi)存在線遷移的實現(xiàn)通常采用預(yù)拷貝技術(shù),就是先把全部內(nèi)存拷貝過去,然后再逐步把變化過的部分遷移過去,直到估計剩余的頁面可以在一個可接受的很短的時間片內(nèi)完成,此時源虛擬機停機,完成剩余的拷貝,最后目的虛擬機開始運行。
[0005]當(dāng)前的內(nèi)存在線遷移方案中,具有一定的時間和帶寬浪費。目前的虛擬機內(nèi)存配置一般都在一到幾個GB,如果把全部內(nèi)存頁標(biāo)記上并全部拷貝至目的機,這樣的效率很低。其實這幾個GB的內(nèi)存空間中,真正是系統(tǒng)占有的、有用的空間所占比例往往很小,這部分的內(nèi)存內(nèi)容的拷貝占用了大量的時間和網(wǎng)絡(luò)帶寬。
【發(fā)明內(nèi)容】
[0006](一)要解決的技術(shù)問題
[0007]本發(fā)明要解決的技術(shù)問題是:如何提供一種高效的虛擬機內(nèi)存在線遷移方法,從而減少不必要的時間和帶寬開銷。
[0008](二)技術(shù)方案
[0009]為解決上述技術(shù)問題,本發(fā)明提供一種基于Virtio驅(qū)動的虛擬機內(nèi)存在線遷移方法,包括以下幾個方面:
[0010]Ul:設(shè)計虛擬機管理器用戶層Qemu的驅(qū)動,工作在宿主機的用戶態(tài),負責(zé)Virtiopci設(shè)備的模擬以及內(nèi)存頁面循環(huán)遷移過程的控制;
[0011]U2:設(shè)計源客戶機Virtio驅(qū)動程序,盡可能多地分配保留內(nèi)存頁面,并以內(nèi)存位圖形式記錄下內(nèi)存頁面情況;[0012]U3:設(shè)計目的客戶機的驅(qū)動程序,使得循環(huán)遷移結(jié)束后,啟用目的虛擬機并釋放保留的內(nèi)存頁面。
[0013]優(yōu)選地,在設(shè)計宿主機Ul相關(guān)工作中,包括以下幾個方面:
[0014]Ull:使用初始化函數(shù)Virtio_migration_init,做virtio驅(qū)動初始化,分配虛擬隊列,進行PCI配置空間初始化等;
[0015]U12:設(shè)置分別用于處理讀取和設(shè)置PCI配置空間的兩個函數(shù)virtio_migration_get_config (保留頁面獲取函數(shù))和virtio_migration_set_config (保留頁面設(shè)置函數(shù)),用來指導(dǎo)客戶機分配內(nèi)存;
[0016]U13:使用虛擬隊列的函數(shù)virtio_migration_handle_output處理回調(diào),進行內(nèi)存位圖的回調(diào)處理;
[0017]U14:參考內(nèi)存位圖,使用 arch_init.c 中的函數(shù) ram_save_live 和 ram_save_block進行內(nèi)存頁面的循環(huán)遷移工作。
[0018]優(yōu)選地,在設(shè)計源客戶機U2相關(guān)工作中,包括以下幾個方面:
[0019]U21:定義 Virtio_driver 信息,使用接口 函數(shù)(如 register_virtio_driver 函數(shù))將其注冊為Virtio驅(qū)動,并調(diào)用virtballoon_probe初始化函數(shù)進行初始化;
[0020]U22:使用內(nèi)核線程函數(shù)migration負責(zé)監(jiān)視PCI設(shè)備配置空間預(yù)保留頁面數(shù)的變化,當(dāng)預(yù)保留頁面數(shù)大于已保留頁面數(shù)就會調(diào)用fill_balloon (內(nèi)存頁面分配函數(shù))進行頁面分配,當(dāng)預(yù)保留頁面數(shù)小于已保留頁面數(shù)就會調(diào)用leak_balloon (內(nèi)存頁面釋放函數(shù))進行頁面釋放;
[0021]U23:如果是調(diào)用內(nèi)存頁面分配函數(shù),則使用fill_balloon函數(shù)分配內(nèi)存頁面,將分配得到的內(nèi)存頁面號保存在vb->pageS鏈表中,并置內(nèi)存位圖相應(yīng)位為I ;
[0022]U24:如果是調(diào)用內(nèi)存頁面釋放函數(shù),則使用leak_balloon函數(shù)釋放內(nèi)存頁面,遍歷vb_>pages鏈表刪除每個內(nèi)存頁面,并置內(nèi)存位圖相應(yīng)位為O ;
[0023]U25:使用接口函數(shù)unregister_virtio_driver進行驅(qū)動的移除,并調(diào)用virtioballoon_remove (內(nèi)存頁面清除函數(shù))釋放內(nèi)存。
[0024]優(yōu)選地,在設(shè)計目的客戶機U3相關(guān)工作中,包括以下幾個方面:
[0025]U31:循環(huán)遷移完畢時,啟用目的虛擬機,代替源虛擬機對外提供服務(wù);
[0026]U32:目的虛擬機釋放保留的內(nèi)存頁面,恢復(fù)內(nèi)存頁面的正常使用。
[0027](三)有益效果
[0028]本發(fā)明提供了一種基于Virtio驅(qū)動進行虛擬機在線遷移的方法,其在內(nèi)存頁面遷移方面使用保留頁面方法,經(jīng)實驗檢驗,除了內(nèi)存使用率極高、已接近100%這個極端情況以外,使用Virtio驅(qū)動的方法能很好的縮短虛擬機的在線遷移時間,而且內(nèi)存使用率越低,其遷移時間的改善效果就越明顯。
【專利附圖】
【附圖說明】
[0029]圖1是本發(fā)明實施例所述基于Virtio驅(qū)動進行虛擬機內(nèi)存在線遷移的系統(tǒng)結(jié)構(gòu)圖;
[0030]圖2是本發(fā)明實施例所述基于Virtio驅(qū)動進行虛擬機內(nèi)存在線遷移的方法流程圖;[0031]圖3是本發(fā)明實施例所述使用Virtio驅(qū)動分配保留頁面的流程圖。
【具體實施方式】
[0032]下面結(jié)合附圖和實施例,對本發(fā)明的【具體實施方式】作進一步詳細描述。以下實施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
[0033]圖1是本發(fā)明實施例所述基于Virtio驅(qū)動進行虛擬機內(nèi)存在線遷移的系統(tǒng)結(jié)構(gòu)圖,如圖1所述,該系統(tǒng)結(jié)構(gòu)包括以下幾個方面:
[0034]Ul (宿主機),執(zhí)行以下功能:虛擬機管理器用戶層Qemu的驅(qū)動,工作在宿主機的用戶態(tài),負責(zé)Virtio PCI設(shè)備的模擬以及內(nèi)存頁面循環(huán)遷移過程的控制;
[0035]U2 (源客戶機),執(zhí)行以下功能:源客戶機Virtio驅(qū)動程序,盡可能多地分配保留內(nèi)存頁面,并以內(nèi)存位圖形式記錄下內(nèi)存頁面情況;
[0036]U3 (目的客戶機),執(zhí)行以下功能:目的客戶機的驅(qū)動程序,使得循環(huán)遷移結(jié)束后,啟用目的虛擬機并釋放保留的內(nèi)存頁面。
[0037]本發(fā)明實施例的方法采用Virtio驅(qū)動的方式,對虛擬機內(nèi)存遷移進行改進,減少不必要的時間和帶寬開銷,大大提升虛擬機遷移的效率。
[0038]圖2是本發(fā)明實施例所述基于Virtio驅(qū)動進行虛擬機內(nèi)存在線遷移的遷移流程圖,該流程包括以下步驟:
[0039]S1:宿主機使用Qemu模擬器模擬PCI設(shè)備,進行遷移初始化,源客戶機啟動Virtio驅(qū)動,做好準備工作。
[0040]具體而言,所述步驟SI包括:所述宿主機使用Qemu模擬器模擬PCI設(shè)備,并進行PCI配置空間初始化;所述宿主機使用Qemu模擬器添加虛擬隊列,設(shè)置虛擬隊列的處理回調(diào)函數(shù);使用初始化函數(shù)做Virtio驅(qū)動初始化。
[0041]S2:宿主機使用virto_migration_set_config函數(shù)(保留頁面設(shè)置函數(shù))向PCI配置空間寫需要保留的內(nèi)存頁面數(shù),源客戶機通過virtio_migration_get_config函數(shù)(保留頁面獲取函數(shù))從PCI配置空間中獲得需要保留的內(nèi)存頁面數(shù)。
[0042]具體而言,所述步驟S2包括:所述宿主機通過保留頁面設(shè)置函數(shù)Virtio_migration_set_config向PCI配置空間中寫入需要保留的內(nèi)存頁面數(shù),以指導(dǎo)源客戶機的頁面分配工作;所述源客戶機通過保留頁面獲取函數(shù)Virtio_migration_get_config從PCI配置空間中獲得需要保留的內(nèi)存頁面數(shù),為步驟S3做準備。
[0043]S3:源客戶機根據(jù)需要保留的內(nèi)存頁面數(shù),開始分配保留內(nèi)存頁面,同時以內(nèi)存位圖的方式記錄下來內(nèi)存頁面分配信息,隨后將內(nèi)存位圖傳輸至宿主機。
[0044]具體而言,所述步驟S3包括:在步驟S2的指導(dǎo)下進行內(nèi)存頁面的分配工作,并以內(nèi)存位圖的方式記錄下來內(nèi)存頁面分配信息;將內(nèi)存位圖傳輸至宿主機Qemu模擬器的虛擬隊列,并通知宿主機Qemu模擬器接收虛擬隊列中的內(nèi)存位圖。
[0045]S4:宿主機根據(jù)該內(nèi)存位圖,控制源客戶機不斷地循環(huán)遷移非保留的內(nèi)存頁面至目的客戶機的目的虛擬機。
[0046]具體而言,所述步驟S4包括:所述宿主機Qemu模擬器根據(jù)內(nèi)存位圖信息控制虛擬機的遷移過程;所述源客戶機通過多次循環(huán)將非保留頁面?zhèn)鬏數(shù)侥康目蛻魴C。
[0047]S5:遷移完畢,啟用目的虛擬機,目的虛擬機釋放保留內(nèi)存頁面。[0048]具體而言,所述步驟S5包括:當(dāng)遷移完畢時,啟用目的虛擬機,替代源客戶機中的源虛擬機對外提供服務(wù);所述目的虛擬機釋放保留的內(nèi)存頁面,恢復(fù)內(nèi)存頁面的正常使用。
[0049]圖3是本發(fā)明實施例所述使用Virtio驅(qū)動分配保留頁面的流程圖,該流程包括以下步驟:
[0050]步驟S30,計算內(nèi)存頁面總數(shù)。
[0051 ] 步驟S31,為位圖數(shù)據(jù)(如內(nèi)存位圖)分配內(nèi)存。
[0052]步驟S32,接收遷移指令,包括頁面分配指令與頁面釋放指令。如果是頁面分配指令,執(zhí)行步驟S331至步驟S334 ;如果是頁面釋放指令,執(zhí)行步驟S335至步驟S338。
[0053]步驟S331,控制內(nèi)存頁面遷移開始。
[0054]步驟S332,分配內(nèi)存頁面。
[0055]步驟S333,標(biāo)記內(nèi)存位圖。其中,步驟S332與步驟S333需要循環(huán)執(zhí)行,直至步驟S334,內(nèi)存頁面分配完畢。
[0056]步驟S335,控制內(nèi)存頁面遷移結(jié)束。
[0057]步驟S336,釋放內(nèi)存頁面。
[0058]步驟S337,清除內(nèi)存位圖。其中,步驟S336與步驟S337需要循環(huán)執(zhí)行,直至步驟S338,內(nèi)存頁面釋放完畢。
[0059]其中主循環(huán)的主要任務(wù)是當(dāng)宿主機發(fā)出遷移指令時,除保留一小部分空閑內(nèi)存供系統(tǒng)使用外逐漸分配盡可能多的內(nèi)存并以位圖的形式進行標(biāo)記,再把內(nèi)存分配的位圖傳回給宿主機Qemu供遷移時參考使用。
[0060]以上實施方式僅用于說明本發(fā)明,而并非對本發(fā)明的限制,有關(guān)【技術(shù)領(lǐng)域】的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術(shù)方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護范圍應(yīng)由權(quán)利要求限定。
【權(quán)利要求】
1.一種基于VirtiO驅(qū)動進行虛擬機內(nèi)存在線遷移的方法,其特征在于,所述方法包括以下步驟: 51:宿主機使用Qemu模擬器模擬PCI設(shè)備,進行遷移初始化; 52:宿主機通過保留頁面設(shè)置函數(shù)向PCI配置空間寫需要保留的內(nèi)存頁面數(shù),源客戶機通過保留頁面獲取函數(shù)從PCI配置空間中獲得需要保留的內(nèi)存頁面數(shù); S3:源客戶機根據(jù)需要保留的內(nèi)存頁面數(shù),分配保留內(nèi)存頁面,同時以內(nèi)存位圖的方式記錄下來內(nèi)存頁面分配信息,并將內(nèi)存位圖傳輸至宿主機; S4:宿主機根據(jù)該內(nèi)存位圖,控制源客戶機循環(huán)遷移非保留的內(nèi)存頁面至目的客戶機的目的虛擬機 '及 S5:當(dāng)遷移完畢時,啟用目的虛擬機,目的虛擬機釋放保留內(nèi)存頁面。
2.如權(quán)利要求1所述的基于Virtio驅(qū)動進行虛擬機內(nèi)存在線遷移的方法,其特征在于,所述步驟SI包括: 所述宿主機使用Qemu模擬器模擬PCI設(shè)備,并進行PCI配置空間初始化; 所述宿主機使用Qemu模擬器添加虛擬隊列,設(shè)置虛擬隊列的處理回調(diào)函數(shù) '及 使用初始化函數(shù)做Virtio驅(qū)動初始化。
3.如權(quán)利要求1所述的基于Virtio驅(qū)動進行虛擬機內(nèi)存在線遷移的方法,其特征在于,所述步驟S2包括: 所述宿主機通過保留頁面設(shè)置函數(shù)向PCI配置空間中寫入需要保留的內(nèi)存頁面數(shù),以指導(dǎo)源客戶機的頁面分配工作; 所述源客戶機通過保留頁面獲取函數(shù)從PCI配置空間中獲得需要保留的內(nèi)存頁面數(shù),為步驟S3做準備。
4.如權(quán)利要求1所述的基于Virtio驅(qū)動進行虛擬機內(nèi)存在線遷移的方法,其特征在于,所述步驟S3包括: 在步驟S2的指導(dǎo)下進行內(nèi)存頁面的分配工作,并以內(nèi)存位圖的方式記錄下來內(nèi)存頁面分配信息; 將內(nèi)存位圖傳輸至宿主機Qemu模擬器的虛擬隊列,并通知宿主機Qemu模擬器接收虛擬隊列中的內(nèi)存位圖。
5.如權(quán)利要求1所述的基于Virtio驅(qū)動進行虛擬機內(nèi)存在線遷移的方法,其特征在于,所述步驟S4包括: 所述宿主機Qemu模擬器根據(jù)內(nèi)存位圖信息控制虛擬機的遷移過程; 所述源客戶機通過多次循環(huán)將非保留頁面?zhèn)鬏數(shù)侥康目蛻魴C。
6.如權(quán)利要求1所述的基于Virtio驅(qū)動進行虛擬機內(nèi)存在線遷移的方法,其特征在于,所述步驟S5包括: 當(dāng)遷移完畢時,啟用目的虛擬機,替代源客戶機中的源虛擬機對外提供服務(wù); 所述目的虛擬機釋放保留的內(nèi)存頁面,恢復(fù)內(nèi)存頁面的正常使用。
【文檔編號】G06F9/455GK103677955SQ201310647925
【公開日】2014年3月26日 申請日期:2013年12月4日 優(yōu)先權(quán)日:2013年12月4日
【發(fā)明者】武永衛(wèi), 陳康, 鄭緯民, 吳之豪 申請人:深圳清華大學(xué)研究院