本發(fā)明總體上涉及計(jì)算系統(tǒng),并且特別是涉及用于虛擬機(jī)實(shí)時(shí)遷移的方法和系統(tǒng)。
發(fā)明背景
機(jī)器虛擬化通常用于各種計(jì)算環(huán)境,諸如數(shù)據(jù)中心和云計(jì)算。在本領(lǐng)域中已知各種虛擬化解決方案。例如,VMware公司(加利福尼亞州帕羅奧圖市)供應(yīng)用于諸如數(shù)據(jù)中心、云計(jì)算、個(gè)人桌面和移動(dòng)計(jì)算的環(huán)境的虛擬化軟件。
發(fā)明概述
本文中所描述的本發(fā)明的實(shí)施例提供了一種方法,該方法包括在通過(guò)通信網(wǎng)絡(luò)彼此通信的多個(gè)計(jì)算節(jié)點(diǎn)中的第一計(jì)算節(jié)點(diǎn)上運(yùn)行虛擬機(jī)(VM)。對(duì)于由VM訪(fǎng)問(wèn)的存儲(chǔ)頁(yè)面,通過(guò)生成在第一計(jì)算節(jié)點(diǎn)上被本地訪(fǎng)問(wèn)的一個(gè)或多個(gè)本地存儲(chǔ)頁(yè)面的頁(yè)面?zhèn)魉蜖顟B(tài)和其訪(fǎng)問(wèn)不局限于第一節(jié)點(diǎn)的一個(gè)或多個(gè)外部化存儲(chǔ)頁(yè)面的頁(yè)面?zhèn)魉蜖顟B(tài),將VM從第一計(jì)算節(jié)點(diǎn)遷移到在多個(gè)計(jì)算節(jié)點(diǎn)中的第二計(jì)算節(jié)點(diǎn)。基于頁(yè)面?zhèn)魉蜖顟B(tài),在第二計(jì)算節(jié)點(diǎn)上,遷移的VM配有對(duì)包括本地存儲(chǔ)頁(yè)面和外部化存儲(chǔ)頁(yè)面兩者的存儲(chǔ)頁(yè)面的訪(fǎng)問(wèn)。
在一些實(shí)施例中,生成頁(yè)面?zhèn)魉蜖顟B(tài)包括為每個(gè)存儲(chǔ)頁(yè)面分配選自由以下組成的狀態(tài)組的狀態(tài):在頁(yè)面被傳送到第二計(jì)算節(jié)點(diǎn)之后用于已經(jīng)改變的本地頁(yè)面或用于已經(jīng)被檢索回到第一計(jì)算節(jié)點(diǎn)的外部化頁(yè)面的臟狀態(tài);用于駐留在第一計(jì)算節(jié)點(diǎn)外的頁(yè)面的外部化狀態(tài);以及對(duì)于已經(jīng)被成功傳送到第二計(jì)算節(jié)點(diǎn)的頁(yè)面的傳送狀態(tài)。
在實(shí)施例中,遷移VM包括將本地存儲(chǔ)頁(yè)面的內(nèi)容或唯一標(biāo)識(shí)符和外部化存儲(chǔ)頁(yè)面的唯一標(biāo)識(shí)符從第一計(jì)算節(jié)點(diǎn)傳送到第二計(jì)算節(jié)點(diǎn)。在另一實(shí)施例中,遷移VM包括在VM運(yùn)行時(shí)傳送本地存儲(chǔ)頁(yè)面的內(nèi)容或唯一標(biāo)識(shí)符和外部化存儲(chǔ)頁(yè)面的唯一標(biāo)識(shí)符。在又一實(shí)施例中,遷移VM包括在停止第一計(jì)算節(jié)點(diǎn)上的VM之后傳送外部化存儲(chǔ)頁(yè)面的唯一標(biāo)識(shí)符,和在開(kāi)始第二計(jì)算節(jié)點(diǎn)上的VM的遷移實(shí)例之后傳送剩余的存儲(chǔ)頁(yè)面。
在一些實(shí)施例中,傳送剩余的存儲(chǔ)頁(yè)面包括響應(yīng)于第二計(jì)算節(jié)點(diǎn)中發(fā)生的頁(yè)面出錯(cuò)事件請(qǐng)求剩余的存儲(chǔ)頁(yè)面。在其他實(shí)施例中,傳送剩余的存儲(chǔ)頁(yè)面包括在后臺(tái)進(jìn)程中傳送剩余的存儲(chǔ)頁(yè)面。在另外其他實(shí)施例中,遷移VM包括在停止VM之前將頁(yè)面?zhèn)魉蜖顟B(tài)的至少部分從第一計(jì)算節(jié)點(diǎn)傳送到第二計(jì)算節(jié)點(diǎn)。
在實(shí)施例中,遷移VM包括在VM運(yùn)行在第一計(jì)算節(jié)點(diǎn)時(shí)傳送存儲(chǔ)頁(yè)面的至少一些,以及在開(kāi)始第二計(jì)算節(jié)點(diǎn)上的VM的遷移實(shí)例之前傳送剩余的外部化頁(yè)面。在另一實(shí)施例中,遷移VM包括使用第一計(jì)算節(jié)點(diǎn)中的推送后臺(tái)進(jìn)程和第二計(jì)算節(jié)點(diǎn)中的拉取后臺(tái)進(jìn)程中的至少一個(gè),傳送本地存儲(chǔ)頁(yè)面的內(nèi)容或唯一標(biāo)識(shí)符和外部化存儲(chǔ)頁(yè)面的唯一標(biāo)識(shí)符中的至少一些。
根據(jù)本發(fā)明的實(shí)施例,還另外提供了包括通過(guò)通信網(wǎng)絡(luò)彼此通信的多個(gè)計(jì)算節(jié)點(diǎn)的裝置,該多個(gè)計(jì)算節(jié)點(diǎn)至少包括含有各自的處理器的第一計(jì)算節(jié)點(diǎn)和第二計(jì)算節(jié)點(diǎn)。處理器被配置為在第一計(jì)算節(jié)點(diǎn)上運(yùn)行虛擬機(jī)(VM)以及通過(guò)以下方式將VM從第一計(jì)算節(jié)點(diǎn)遷移到第二計(jì)算節(jié)點(diǎn):對(duì)于由VM訪(fǎng)問(wèn)的存儲(chǔ)頁(yè)面,生成在第一計(jì)算節(jié)點(diǎn)上被本地訪(fǎng)問(wèn)的一個(gè)或多個(gè)本地存儲(chǔ)頁(yè)面的頁(yè)面?zhèn)魉蜖顟B(tài)和其訪(fǎng)問(wèn)不局限于第一節(jié)點(diǎn)的一個(gè)或多個(gè)外部化存儲(chǔ)頁(yè)面的頁(yè)面?zhèn)魉蜖顟B(tài),以及,基于該頁(yè)面?zhèn)魉蜖顟B(tài),在第二計(jì)算節(jié)點(diǎn)上為遷移的VM提供到包括本地和外部化存儲(chǔ)頁(yè)面兩者的存儲(chǔ)頁(yè)面的訪(fǎng)問(wèn)。
根據(jù)本發(fā)明的實(shí)施例,還另外提供了軟件產(chǎn)品,該產(chǎn)品包括其中儲(chǔ)存有程序指令的有形非臨時(shí)性計(jì)算機(jī)可讀介質(zhì),所述指令在由通過(guò)通信網(wǎng)絡(luò)彼此通信的第一和第二計(jì)算節(jié)點(diǎn)的處理器讀取時(shí)使處理器在第一計(jì)算節(jié)點(diǎn)上運(yùn)行虛擬機(jī)(VM),并通過(guò)以下方式使VM從第一計(jì)算節(jié)點(diǎn)遷移到第二計(jì)算節(jié)點(diǎn):對(duì)于由VM訪(fǎng)問(wèn)的存儲(chǔ)頁(yè)面,生成在第一計(jì)算節(jié)點(diǎn)上被本地訪(fǎng)問(wèn)的一個(gè)或多個(gè)本地存儲(chǔ)頁(yè)面的頁(yè)面?zhèn)魉蜖顟B(tài)和其訪(fǎng)問(wèn)不局限于第一節(jié)點(diǎn)的一個(gè)或多個(gè)外部化存儲(chǔ)頁(yè)面的頁(yè)面?zhèn)魉蜖顟B(tài),以及,基于該頁(yè)面?zhèn)魉蜖顟B(tài),在第二計(jì)算節(jié)點(diǎn)上為遷移的VM提供到包括本地和外部化存儲(chǔ)頁(yè)面兩者的存儲(chǔ)頁(yè)面的訪(fǎng)問(wèn)。
根據(jù)本發(fā)明的實(shí)施例,還另外提供了包括運(yùn)行通過(guò)通信網(wǎng)絡(luò)彼此通信的多個(gè)計(jì)算節(jié)點(diǎn)的方法,該多個(gè)計(jì)算節(jié)點(diǎn)至少包括第一計(jì)算節(jié)點(diǎn)和第二計(jì)算節(jié)點(diǎn)。在將運(yùn)行在第一計(jì)算節(jié)點(diǎn)上的虛擬機(jī)(VM)遷移到第二計(jì)算節(jié)點(diǎn)之后,識(shí)別在VM的遷移期間已經(jīng)被檢索回到第一計(jì)算節(jié)點(diǎn)的頁(yè)面的去重復(fù)(de-duplicated)頁(yè)面的頁(yè)面狀態(tài)信息從第一計(jì)算節(jié)點(diǎn)被接收。不管來(lái)自其他計(jì)算節(jié)點(diǎn)的任何附加的指示,使用該頁(yè)面狀態(tài)信息,以用于去重復(fù)在第二計(jì)算節(jié)點(diǎn)中所識(shí)別的頁(yè)面。
根據(jù)本發(fā)明的實(shí)施例,還另外提供了包括通過(guò)通信網(wǎng)絡(luò)彼此通信的多個(gè)計(jì)算節(jié)點(diǎn)的系統(tǒng),該多個(gè)計(jì)算節(jié)點(diǎn)至少包括含有各自的處理器的第一計(jì)算節(jié)點(diǎn)和第二計(jì)算節(jié)點(diǎn)。在將運(yùn)行在第一計(jì)算節(jié)點(diǎn)上的虛擬機(jī)(VM)遷移到第二計(jì)算節(jié)點(diǎn)之后,第二計(jì)算節(jié)點(diǎn)的處理器被配置為從第一計(jì)算節(jié)點(diǎn)的處理器接收識(shí)別在VM的遷移期間已經(jīng)被檢索回到第一計(jì)算節(jié)點(diǎn)的去重復(fù)頁(yè)面的頁(yè)面狀態(tài)信息,以及,使用該頁(yè)面狀態(tài)信息并不管來(lái)自其他計(jì)算節(jié)點(diǎn)的任何附加指示,去重復(fù)在第二計(jì)算節(jié)點(diǎn)中所識(shí)別的頁(yè)面。
從結(jié)合附圖進(jìn)行的本發(fā)明的實(shí)施例的以下詳細(xì)描述中,本發(fā)明將得到更完全地理解,其中:
附圖簡(jiǎn)述
圖1是根據(jù)本發(fā)明的實(shí)施例示意性圖示計(jì)算節(jié)點(diǎn)的集群的框圖;
圖2是根據(jù)本發(fā)明的實(shí)施例示意性圖示虛擬機(jī)(VM)實(shí)時(shí)遷移的圖;
圖3是根據(jù)本發(fā)明的實(shí)施例示意性圖示用于虛擬機(jī)的預(yù)復(fù)制實(shí)時(shí)遷移的方法的流程圖;
圖4是根據(jù)本發(fā)明的實(shí)施例示意性圖示用于虛擬機(jī)的后復(fù)制實(shí)時(shí)遷移的方法的流程圖;
圖5是根據(jù)本發(fā)明的實(shí)施例示意性圖示用于虛擬機(jī)的混合實(shí)時(shí)遷移的流程圖;
圖6是根據(jù)本發(fā)明的實(shí)施例示意性圖示遷移后去重復(fù)方法的流程圖;以及
圖7是根據(jù)本發(fā)明的實(shí)施例示意性圖示分布式存儲(chǔ)器共享架構(gòu)的圖。
實(shí)施例的具體描述
綜述
虛擬機(jī)(VM)的實(shí)時(shí)遷移通常涉及以對(duì)由VM服務(wù)的應(yīng)用的最小中斷將機(jī)器的完整狀態(tài)復(fù)制到另一計(jì)算節(jié)點(diǎn)。VM的原始和遷移實(shí)例運(yùn)行在各自的源和目的計(jì)算節(jié)點(diǎn)上,并分別被稱(chēng)作源VM和目的VM。出于簡(jiǎn)潔的目的,計(jì)算節(jié)點(diǎn)也被簡(jiǎn)稱(chēng)為“節(jié)點(diǎn)”。
本文中所描述的本發(fā)明的實(shí)施例提供了用于VM實(shí)時(shí)遷移的改進(jìn)的方法和系統(tǒng)。在以下的描述中,我們假設(shè)被稱(chēng)作存儲(chǔ)頁(yè)面的基本儲(chǔ)存單元。在一些實(shí)施例中,計(jì)算系統(tǒng)包括通過(guò)通信網(wǎng)絡(luò)連接的多個(gè)節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)被配置為運(yùn)行一個(gè)或多個(gè)VM。這樣的計(jì)算系統(tǒng)也被稱(chēng)作節(jié)點(diǎn)集群。為了有效地使用系統(tǒng)存儲(chǔ)資源,存儲(chǔ)頁(yè)面可在不同的計(jì)算節(jié)點(diǎn)之間共享或以其他方式分配。因此,運(yùn)行在給定計(jì)算節(jié)點(diǎn)上的VM可訪(fǎng)問(wèn)被本地儲(chǔ)存在相同節(jié)點(diǎn)上的存儲(chǔ)頁(yè)面,以及駐留在其他計(jì)算節(jié)點(diǎn)上的存儲(chǔ)頁(yè)面。
在給定節(jié)點(diǎn)上由VM訪(fǎng)問(wèn)但被儲(chǔ)存在不同節(jié)點(diǎn)上的存儲(chǔ)頁(yè)面在本文中被稱(chēng)作外部化頁(yè)面。例如,為了減輕存儲(chǔ)壓力,存儲(chǔ)頁(yè)面的重復(fù)副本可被去重復(fù)(即,被丟棄),以在節(jié)點(diǎn)集群中只保留少量的重復(fù)副本。作為另一示例,本地存儲(chǔ)壓力可通過(guò)將本地存儲(chǔ)頁(yè)面(例如,很少被訪(fǎng)問(wèn)的頁(yè)面)遠(yuǎn)程交換(例如,移出)到具有可用的儲(chǔ)存空間的其他計(jì)算節(jié)點(diǎn)而得到解決。除了去重復(fù)的和遠(yuǎn)程交換的頁(yè)面之外或可將其替代地,所公開(kāi)的技術(shù)可以以任何其他合適的方式和出于任何其他的原因使用已經(jīng)被外部化的頁(yè)面。使用被分配到外部化頁(yè)面的唯一標(biāo)識(shí)符,計(jì)算節(jié)點(diǎn)可將給定的VM的外部化頁(yè)面檢索回。外部化頁(yè)面的檢索被稱(chēng)作“頁(yè)入”操作。
在VM實(shí)時(shí)遷移中,源VM訪(fǎng)問(wèn)的本地和外部化存儲(chǔ)頁(yè)面兩者對(duì)于目的計(jì)算節(jié)點(diǎn)上的VM的遷移實(shí)例應(yīng)是可訪(fǎng)問(wèn)的。注意到的是,存儲(chǔ)頁(yè)面相對(duì)于源節(jié)點(diǎn)是本地的,其可遷移到相對(duì)于目的節(jié)點(diǎn)表現(xiàn)為外部化的各自頁(yè)面,反之亦然。
如以下將解釋的,外部化頁(yè)面的遷移通常涉及只傳送各自的頁(yè)面標(biāo)識(shí)符而不是頁(yè)面內(nèi)容。雖然在一些公開(kāi)的實(shí)施例中本地頁(yè)面的遷移涉及傳送頁(yè)面內(nèi)容,但在可選實(shí)施例中,本地頁(yè)面中的至少一些可通過(guò)傳送本地頁(yè)面的唯一標(biāo)識(shí)符而不是它們的內(nèi)容來(lái)遷移,在這種情況下,本地頁(yè)面相對(duì)于目的VM變成外部化。
在一些實(shí)施例中,本地存儲(chǔ)頁(yè)面通過(guò)將來(lái)自源節(jié)點(diǎn)的頁(yè)面的內(nèi)容復(fù)制到目的節(jié)點(diǎn)來(lái)遷移。為了傳送外部化頁(yè)面,原則上有可能首先將外部化頁(yè)面的內(nèi)容檢索回到源節(jié)點(diǎn),并隨后將所檢索的頁(yè)面復(fù)制到目的節(jié)點(diǎn)。然而,這種方法是非常低效的,這是由于它涉及增加網(wǎng)絡(luò)流量并引發(fā)高延遲的不必要的頁(yè)面復(fù)制操作。此外,除了本地頁(yè)面之外,傳送被檢索到本地頁(yè)面中的外部化頁(yè)面可能導(dǎo)致在目的節(jié)點(diǎn)處的存儲(chǔ)壓力并要求去重復(fù)和/或遠(yuǎn)程交換的不必要的遷移后操作。
在以下所公開(kāi)的示例實(shí)施例中,遷移程序通過(guò)復(fù)制頁(yè)面的內(nèi)容來(lái)遷移本地存儲(chǔ)頁(yè)面,并通過(guò)傳送外部化頁(yè)面的唯一頁(yè)面標(biāo)識(shí)符來(lái)遷移外部化頁(yè)。在其他實(shí)施例中,本地頁(yè)面中的至少一些可通過(guò)傳送它們的唯一標(biāo)識(shí)符而不是它們的內(nèi)容來(lái)遷移。
在一些實(shí)施例中,當(dāng)VM遷移完成時(shí),目的VM代替源VM。換句話(huà)說(shuō),在遷移的過(guò)程期間的某一時(shí)刻處,源VM停止且目的VM被激活。在以下的描述中,我們描述了采用不同方法來(lái)降低停機(jī)時(shí)間周期的各種實(shí)施例,在該停機(jī)時(shí)間周期期間,源VM已經(jīng)停止且目的VM還未被激活:(i)預(yù)復(fù)制實(shí)時(shí)遷移-在源VM仍在運(yùn)行的同時(shí)傳送存儲(chǔ)頁(yè)面,并在完整狀態(tài)被傳送之后激活目的VM,(ii)復(fù)制后實(shí)時(shí)遷移-在停止源VM和傳送源VM狀態(tài)的部分之后激活目的VM,并作為后臺(tái)進(jìn)程且通過(guò)目的VM請(qǐng)求丟失的存儲(chǔ)頁(yè)面來(lái)傳送剩余的VM狀態(tài),以及(iii)混合實(shí)時(shí)遷移-組合的預(yù)復(fù)制和復(fù)制后實(shí)時(shí)遷移。
在所公開(kāi)的實(shí)施例中,基于在源計(jì)算節(jié)點(diǎn)上被本地訪(fǎng)問(wèn)的一個(gè)或多個(gè)本地存儲(chǔ)頁(yè)面的動(dòng)態(tài)頁(yè)面狀態(tài)或傳送狀態(tài),和其訪(fǎng)問(wèn)對(duì)于第一節(jié)點(diǎn)來(lái)說(shuō)不是本地的一個(gè)或多個(gè)外部化存儲(chǔ)頁(yè)面的動(dòng)態(tài)頁(yè)面狀態(tài)或傳送狀態(tài),遷移程序傳送存儲(chǔ)頁(yè)面。頁(yè)面?zhèn)魉蜖顟B(tài)識(shí)別在其已被遷移到目的節(jié)點(diǎn)之后已經(jīng)改變的存儲(chǔ)頁(yè)面,并因此應(yīng)被重新傳送。在一些實(shí)施例中,頁(yè)面?zhèn)魉蜖顟B(tài)選自以下?tīng)顟B(tài):臟(DIRTY)、外部化(EXTERNALIZED)和傳送(TRANSFERRED),并按頁(yè)面被儲(chǔ)存在頁(yè)面狀態(tài)位圖(PSB)中。
臟頁(yè)面指在頁(yè)面已經(jīng)被傳送到目的節(jié)點(diǎn)之后(例如,通過(guò)仍在運(yùn)行的源VM)被修改的頁(yè)面,即,其內(nèi)容被修改的本地頁(yè)面或被檢索回的外部化頁(yè)面。外部化頁(yè)面指駐留在除了源節(jié)點(diǎn)之外的節(jié)點(diǎn)上的頁(yè)面,以及傳送頁(yè)面是已經(jīng)被成功傳送到目的節(jié)點(diǎn)的頁(yè)面(本地的或外部化的)。
在所公開(kāi)的實(shí)施例中的一些,源和/或目的節(jié)點(diǎn)在PSB中掃描存儲(chǔ)頁(yè)面的狀態(tài)。基于PSB狀態(tài),本地頁(yè)面通過(guò)將它們的內(nèi)容復(fù)制到目的節(jié)點(diǎn)來(lái)傳送,以及外部化頁(yè)面通過(guò)僅傳送它們的(通常短得多)唯一標(biāo)識(shí)符來(lái)傳送。此外,已經(jīng)被傳送但在源VM仍在運(yùn)行的同時(shí)轉(zhuǎn)變?yōu)榕K或外部化的頁(yè)面被重新傳送。可選地,頁(yè)面外部化在遷移期間被禁止。
在實(shí)施復(fù)制后或混合實(shí)時(shí)遷移的一些實(shí)施例中,目的VM在傳送本地和外部化頁(yè)面的部分遷移之后開(kāi)始。在該部分遷移之后,被激活的目的VM可能會(huì)遭遇在執(zhí)行客戶(hù)應(yīng)用時(shí)引起頁(yè)面錯(cuò)誤事件的丟失頁(yè)面。目的VM從源節(jié)點(diǎn)請(qǐng)求丟失頁(yè)面或其在PSB中的狀態(tài)等同臟或外部化的頁(yè)面。在響應(yīng)于頁(yè)面錯(cuò)誤事件接收到與外部化頁(yè)面有關(guān)的狀態(tài)信息之后,目的VM中的管理程序可基于所接收的頁(yè)面狀態(tài)重新投入或重新執(zhí)行各自的內(nèi)容檢索操作。
在復(fù)制后實(shí)時(shí)遷移程序的不同實(shí)施例中,源VM在停止之前收集PSB中關(guān)于外部化頁(yè)面的頁(yè)面信息,并將PSB傳送到目的節(jié)點(diǎn)。目的節(jié)點(diǎn)掃描PSB并相應(yīng)地處理外部化頁(yè)面。
在一些實(shí)施例中,源VM首先通過(guò)傳送本地和外部化頁(yè)面兩者的內(nèi)容來(lái)遷移。如以上所解釋的,這可能導(dǎo)致目的VM處的存儲(chǔ)壓力。在實(shí)施例中,源VM生成PSB,該P(yáng)SB在去重復(fù)的頁(yè)面先于遷移被檢索回時(shí)對(duì)其進(jìn)行標(biāo)記。在過(guò)程中沒(méi)有共享其他集群節(jié)點(diǎn)的情況下,目的VM接收PSB并執(zhí)行有效的本地去重復(fù)。
在所公開(kāi)的技術(shù)中,VM實(shí)時(shí)遷移程序使用包括外部化頁(yè)面的識(shí)別的頁(yè)面信息。該技術(shù)實(shí)現(xiàn)了傳送外部化頁(yè)面的唯一標(biāo)識(shí)符而不是頁(yè)面的(通常大的多的)內(nèi)容。這樣的遷移程序避免了不必要的頁(yè)面?zhèn)魉筒僮?,以及遷移后去重復(fù)和遠(yuǎn)程交換操作。因此,所公開(kāi)的技術(shù)降低了網(wǎng)絡(luò)流量、CPU負(fù)載和存儲(chǔ)壓力。另外,遷移程序通常不改變?cè)诠?jié)點(diǎn)集群上的共享存儲(chǔ)頁(yè)面的分布,因此不會(huì)引發(fā)新的存儲(chǔ)壓力事件。
系統(tǒng)描述
圖1是根據(jù)本發(fā)明的實(shí)施例示意性圖示包括多個(gè)計(jì)算節(jié)點(diǎn)24的集群的計(jì)算系統(tǒng)20的框圖。例如,系統(tǒng)20可包括數(shù)據(jù)中心、云計(jì)算系統(tǒng)、高性能計(jì)算(HPC)系統(tǒng)或任何其他合適的系統(tǒng)。
計(jì)算節(jié)點(diǎn)24(出于簡(jiǎn)潔的目的簡(jiǎn)稱(chēng)為“節(jié)點(diǎn)”)通常包括服務(wù)器,但可選地包括任何其他合適類(lèi)型的計(jì)算節(jié)點(diǎn)。系統(tǒng)20可包括任何合適數(shù)量的相同類(lèi)型或不同類(lèi)型的節(jié)點(diǎn)。節(jié)點(diǎn)24通過(guò)供集群內(nèi)通信之用的通常是局域網(wǎng)(LAN)的通信網(wǎng)絡(luò)28來(lái)連接。網(wǎng)絡(luò)28可根據(jù)諸如以太網(wǎng)或無(wú)線(xiàn)帶寬技術(shù)的任何合適的網(wǎng)絡(luò)協(xié)議操作。
每個(gè)節(jié)點(diǎn)24包括中央處理單元(CPU)32?;谟?jì)算節(jié)點(diǎn)的類(lèi)型,CPU 32可包括多個(gè)處理核和/或多個(gè)集成電路(IC)。不管具體的節(jié)點(diǎn)配置,節(jié)點(diǎn)的處理電路作為整體在本文中被視為節(jié)點(diǎn)CPU。每個(gè)節(jié)點(diǎn)24還包括存儲(chǔ)器36(通常是易失性存儲(chǔ)器,諸如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器-DRAM)和用于與網(wǎng)絡(luò)28進(jìn)行通信的網(wǎng)絡(luò)接口卡(NIC)44。節(jié)點(diǎn)24中的一些(但不必是全部節(jié)點(diǎn))包括非易失性?xún)?chǔ)存設(shè)備40(例如,磁性硬盤(pán)驅(qū)動(dòng)器-HDD或固態(tài)驅(qū)動(dòng)器-SSD)。
節(jié)點(diǎn)24通常運(yùn)行虛擬機(jī)(VM),該虛擬機(jī)轉(zhuǎn)而運(yùn)行客戶(hù)應(yīng)用。在一些實(shí)施例中,運(yùn)行在給定節(jié)點(diǎn)上的VM訪(fǎng)問(wèn)被儲(chǔ)存在多個(gè)節(jié)點(diǎn)上的存儲(chǔ)頁(yè)面。出于共享節(jié)點(diǎn)24之間的存儲(chǔ)資源的目的,每個(gè)節(jié)點(diǎn)的CPU運(yùn)行分布式頁(yè)面儲(chǔ)存(DPS)代理48。如以下將詳細(xì)解釋的,各個(gè)節(jié)點(diǎn)中的DPS代理48通過(guò)網(wǎng)絡(luò)28彼此進(jìn)行通信,以用于協(xié)調(diào)存儲(chǔ)頁(yè)面的儲(chǔ)存。
多個(gè)DPS代理在本文中統(tǒng)稱(chēng)為“DPS網(wǎng)絡(luò)”??蛇x地或附加地,系統(tǒng)20可使用任何合適的方法(諸如例如,網(wǎng)絡(luò)中的集中式實(shí)體)來(lái)管理節(jié)點(diǎn)24之間的存儲(chǔ)共享。雖然在以下描述中我們假設(shè)系統(tǒng)20使用DPS網(wǎng)絡(luò)來(lái)管理存儲(chǔ)共享,但在可選實(shí)施例中,系統(tǒng)20可使用代替DPS網(wǎng)絡(luò)或除了DPS網(wǎng)絡(luò)之外的任何其他合適的架構(gòu)和協(xié)議。
對(duì)于VM在計(jì)算節(jié)點(diǎn)的集群上的資源共享的其他方面在美國(guó)專(zhuān)利申請(qǐng)14/181,791和14/260,304中得到了解決,它們被轉(zhuǎn)讓給本專(zhuān)利申請(qǐng)的受讓人且其公開(kāi)內(nèi)容通過(guò)引用并入本文。
圖1中所示的系統(tǒng)和計(jì)算節(jié)點(diǎn)配置是純粹出于概念清晰的目的而選擇的示例配置。在可選實(shí)施例中,可使用任何其他合適的系統(tǒng)和/或節(jié)點(diǎn)配置。系統(tǒng)20的各種元素且特別是節(jié)點(diǎn)24的元素,可使用諸如在一個(gè)或多個(gè)專(zhuān)用集成電路(ASIC)或現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)中的硬件/固件來(lái)實(shí)施。可選地,一些系統(tǒng)或節(jié)點(diǎn)元素(例如,CPU 32)可以以軟件或使用硬件/固件和軟件元素的組合來(lái)實(shí)施。在一些實(shí)施例中,CPU 32包括通用處理器,其用軟件來(lái)編程以實(shí)行本文中所描述的功能。例如,可通過(guò)網(wǎng)絡(luò)以電子形式將軟件下載到處理器,或者可選地或附加地,該軟件可被提供和/或儲(chǔ)存在非暫時(shí)性有形媒介上,諸如磁存儲(chǔ)器、光存儲(chǔ)器或電子存儲(chǔ)器。
共享存儲(chǔ)資源
存儲(chǔ)器36將關(guān)于各個(gè)VM的數(shù)據(jù)儲(chǔ)存在基本儲(chǔ)存單元中,該基本儲(chǔ)存單元在本文中被稱(chēng)作存儲(chǔ)頁(yè)面。運(yùn)行在給定計(jì)算節(jié)點(diǎn)上的VM可訪(fǎng)問(wèn)被本地儲(chǔ)存在相同計(jì)算節(jié)點(diǎn)的存儲(chǔ)器36上或其他計(jì)算節(jié)點(diǎn)的存儲(chǔ)器36上的存儲(chǔ)頁(yè)面。其內(nèi)容在本地可用的存儲(chǔ)頁(yè)面在本文中被稱(chēng)作“本地頁(yè)面”。其內(nèi)容駐留在另一計(jì)算節(jié)點(diǎn)上的存儲(chǔ)頁(yè)面被稱(chēng)作“外部化頁(yè)面”。例如,VM可使用唯一頁(yè)面標(biāo)識(shí)符經(jīng)由DPS網(wǎng)絡(luò)訪(fǎng)問(wèn)外部化頁(yè)面。本地存儲(chǔ)頁(yè)面可被外部化,以解決如本文中所描述的全局和/或本地存儲(chǔ)壓力。
在一些實(shí)施例中,DPS網(wǎng)絡(luò)通過(guò)運(yùn)行集群范圍的去重復(fù)過(guò)程處理節(jié)點(diǎn)24中的存儲(chǔ)壓力狀況。在許多實(shí)際情況下,運(yùn)行在不同節(jié)點(diǎn)上的不同VM使用具有相同內(nèi)容的存儲(chǔ)頁(yè)面。例如,當(dāng)使VM的多個(gè)實(shí)例運(yùn)行在不同節(jié)點(diǎn)上時(shí),包含VM內(nèi)核代碼的存儲(chǔ)頁(yè)面通常將在節(jié)點(diǎn)集群上被復(fù)制多次。
在一些情境下,可能有利的是只保留這樣的頁(yè)面的少量副本,使這些副本可用于所有相關(guān)的VM,并刪除多余的副本。所保留的最少量的重復(fù)頁(yè)面副本可取決于容錯(cuò)考慮。該過(guò)程被稱(chēng)作去重復(fù)。如可理解的,去重復(fù)使節(jié)點(diǎn)能夠釋放本地存儲(chǔ)器并從而減輕存儲(chǔ)壓力。
在一些情況下,去重復(fù)過(guò)程刪除了由給定節(jié)點(diǎn)中的至少一個(gè)VM使用的某一頁(yè)面的所有副本。因此,頁(yè)面變成外部化的且本地VM將能夠使用諸如通過(guò)在頁(yè)面內(nèi)容所計(jì)算的散列值(hash value)的唯一標(biāo)識(shí)符或使用任何其他合適的指紋標(biāo)識(shí)符來(lái)訪(fǎng)問(wèn)頁(yè)面。外部化的去重復(fù)頁(yè)面的唯一標(biāo)識(shí)符也被稱(chēng)作指紋標(biāo)識(shí)符(FID)。
用于解決存儲(chǔ)壓力的另一集群范圍的過(guò)程被稱(chēng)作遠(yuǎn)程交換。在該過(guò)程中,DPS網(wǎng)絡(luò)將存儲(chǔ)頁(yè)面從第一節(jié)點(diǎn)的存儲(chǔ)器36(其經(jīng)受存儲(chǔ)壓力)移動(dòng)到第二節(jié)點(diǎn)的存儲(chǔ)器36(其具有可用的存儲(chǔ)資源)。第二節(jié)點(diǎn)可將頁(yè)以壓縮的形式來(lái)儲(chǔ)存。如果存儲(chǔ)壓力是暫時(shí)的,則所交換的頁(yè)面可在稍后時(shí)間處返回到初始節(jié)點(diǎn)。被移動(dòng)到另一計(jì)算節(jié)點(diǎn)的外部化頁(yè)面可使用唯一標(biāo)識(shí)符(UID)例如經(jīng)由DPS網(wǎng)絡(luò)來(lái)被訪(fǎng)問(wèn)。
例如,在以上所引述的美國(guó)申請(qǐng)14/181,791中,描述了包括用于存儲(chǔ)頁(yè)面的去重復(fù)和遠(yuǎn)程交換的方法的用于管理存儲(chǔ)共享的各種方法。
VM實(shí)時(shí)遷移的元素
圖2是根據(jù)本發(fā)明的實(shí)施例示意性圖示虛擬機(jī)的實(shí)時(shí)遷移的圖。圖2中的三個(gè)計(jì)算節(jié)點(diǎn)24(即節(jié)點(diǎn)_A、節(jié)點(diǎn)_B和節(jié)點(diǎn)_C)可以是以上圖1的系統(tǒng)20的部分。在本示例中,在每個(gè)計(jì)算節(jié)點(diǎn)24中,管理程序60運(yùn)行一個(gè)或多個(gè)本地VM 64并提供給本地VM資源,諸如存儲(chǔ)器、儲(chǔ)存器和CPU資源。
在本示例中,節(jié)點(diǎn)_A另外運(yùn)行應(yīng)被遷移到節(jié)點(diǎn)_B的虛擬機(jī)VM_SRC 68。在以下的描述中,運(yùn)行預(yù)遷移的VM的節(jié)點(diǎn)和VM遷移到的目標(biāo)節(jié)點(diǎn)被分別稱(chēng)作源節(jié)點(diǎn)和目的節(jié)點(diǎn)。類(lèi)似地,源節(jié)點(diǎn)和目的節(jié)點(diǎn)內(nèi)部的組件也分別被稱(chēng)作源組件和目的組件。
因此,在圖2的示例中,VM_SRC是運(yùn)行在源節(jié)點(diǎn)節(jié)點(diǎn)_A上的源VM。另外,VM_DST 72是目的VM,其是運(yùn)行在作為目的節(jié)點(diǎn)的節(jié)點(diǎn)_B上的VM_A的遷移實(shí)例。類(lèi)似地,源節(jié)點(diǎn)和目的節(jié)點(diǎn)的管理程序60和存儲(chǔ)器36分別被稱(chēng)作源和目的管理程序或存儲(chǔ)器。
實(shí)時(shí)遷移涉及在不終止客戶(hù)應(yīng)用的情況下將運(yùn)行資源VM傳送到目的節(jié)點(diǎn)。在遷移期間,源VM的完整狀態(tài)(包括CPU和I/O狀態(tài)、存儲(chǔ)器、儲(chǔ)存器和網(wǎng)絡(luò)連通性)被傳送到目的節(jié)點(diǎn)。特別地,如以下所描述的,本地和外部化存儲(chǔ)頁(yè)面被傳送。
實(shí)時(shí)遷移的程序通常由源和目的管理程序可能與集中式實(shí)體結(jié)合來(lái)實(shí)行??蛇x地,實(shí)時(shí)遷移可由諸如DPS網(wǎng)絡(luò)的分布式實(shí)體管理。在一些實(shí)施例中,由源VM使用的本地存儲(chǔ)頁(yè)面通過(guò)復(fù)制頁(yè)面的內(nèi)容被傳送到目的節(jié)點(diǎn)。在一個(gè)實(shí)施例中,為了處理外部化頁(yè)面,遷移程序首先將外部化頁(yè)面檢索回到源節(jié)點(diǎn),并隨后將該頁(yè)面的內(nèi)容復(fù)制到目的節(jié)點(diǎn)。然而,這樣的方法可能產(chǎn)生不必要的頁(yè)面?zhèn)魉?首先到源節(jié)點(diǎn),隨后到目的節(jié)點(diǎn)),這增加了網(wǎng)絡(luò)流量、延遲、存儲(chǔ)壓力和CPU工作量。此外,由于程序?qū)⒈镜睾屯獠炕?yè)面兩者的內(nèi)容傳送到目的節(jié)點(diǎn),因此這可能增加目的節(jié)點(diǎn)處的存儲(chǔ)壓力,這可能導(dǎo)致目的節(jié)點(diǎn)處的存儲(chǔ)頁(yè)面的額外的去重復(fù)和/或遠(yuǎn)程交換。
在一些實(shí)施例中,源VM的本地和外部化頁(yè)面分別遷移到目的VM中的本地和外部化頁(yè)面。例如,VM_SRC可訪(fǎng)問(wèn)節(jié)點(diǎn)_A的存儲(chǔ)器36中的頁(yè)面以及駐留在系統(tǒng)20中的任何其他節(jié)點(diǎn)(諸如節(jié)點(diǎn)_B、節(jié)點(diǎn)_C或兩者)的存儲(chǔ)器36上的外部化存儲(chǔ)頁(yè)面。當(dāng)VM_SRC到節(jié)點(diǎn)_B的遷移完成時(shí),VM_SRC本地訪(fǎng)問(wèn)的頁(yè)面可由VM_DST本地訪(fǎng)問(wèn),或者可選地,可相對(duì)于VM_DST變成外部化的。另外,由VM_SRC以外部化的形式訪(fǎng)問(wèn)的頁(yè)面也應(yīng)由VM_DST以外部化的方式訪(fǎng)問(wèn)。這樣的遷移程序避免了進(jìn)行頁(yè)面內(nèi)容傳送、去重復(fù)和遠(yuǎn)程交換的不必要的操作。
在一些實(shí)時(shí)遷移情境下,存儲(chǔ)頁(yè)面在源VM仍運(yùn)行的同時(shí)被傳送。因此,仍運(yùn)行的源VM可修改已經(jīng)被傳送的本地頁(yè)面。另外,已經(jīng)被傳送的本地頁(yè)面可隨后經(jīng)受去重復(fù)或遠(yuǎn)程交換(即,被外部化),并且已經(jīng)被傳送的外部化頁(yè)面可在本地被檢索返回。這樣的傳送后頁(yè)面修改破壞了VM遷移的可靠性,因此應(yīng)重新傳送被修改的頁(yè)面。
在以下的描述中,術(shù)語(yǔ)“臟頁(yè)”指的是:i)在頁(yè)面已經(jīng)被傳送到目的節(jié)點(diǎn)之后被修改的本地頁(yè)面,以及ii)在頁(yè)面已經(jīng)被傳送到目的節(jié)點(diǎn)之后被檢索返回到源VM的外部化頁(yè)面。
在一些實(shí)施例中,遷移程序在一個(gè)或多個(gè)傳送輪次中迭代地傳送存儲(chǔ)頁(yè)面。這樣的程序還被稱(chēng)作迭代復(fù)制階段。在第一輪次中,程序傳送本地頁(yè)面的內(nèi)容和由源VM使用的外部化頁(yè)面的標(biāo)識(shí)符。在后續(xù)的輪次中,遷移程序另外傳送其狀態(tài)在先前輪次期間已經(jīng)變?yōu)榕K或外部化的頁(yè)面。
在所公開(kāi)的實(shí)施例中,源管理程序生成包括對(duì)外部化頁(yè)面做標(biāo)記的頁(yè)面信息或狀態(tài)。該做標(biāo)記實(shí)現(xiàn)了僅傳送外部化頁(yè)面的標(biāo)識(shí)符而不是(通常大得多的)頁(yè)面的內(nèi)容。注意到的是,如果頁(yè)面已經(jīng)先于遷移駐留在目的內(nèi)存處,則在源VM處的外部化頁(yè)面可在目的節(jié)點(diǎn)處變成本地的。
在幾個(gè)公開(kāi)的實(shí)施例中,待傳送的存儲(chǔ)頁(yè)面各被分配各自的傳送狀態(tài):
·臟-源節(jié)點(diǎn)應(yīng)重新發(fā)送頁(yè)面的內(nèi)容并將頁(yè)面狀態(tài)改為傳送。
·外部化-源節(jié)點(diǎn)應(yīng)重新發(fā)送頁(yè)面的標(biāo)識(shí)符并將頁(yè)面狀態(tài)改為傳送。
·傳送-頁(yè)面已經(jīng)被傳送,或者源VM從未訪(fǎng)問(wèn)頁(yè)面,因此不需要發(fā)送頁(yè)面。
在一些實(shí)施例中,源管理程序60生成保持頁(yè)面信息的頁(yè)面狀態(tài)位圖(PSB)76。頁(yè)面信息包括存儲(chǔ)頁(yè)面的頁(yè)面狀態(tài),例如,如以上所描述的三值狀態(tài)。源管理程序通常在第一輪次之前將PSB發(fā)送到目的節(jié)點(diǎn),并且如有必要,發(fā)送后續(xù)輪次之間的PSB的更新的版本。目的節(jié)點(diǎn)使用PSB,以檢索并恢復(fù)本地頁(yè)面的內(nèi)容和外部化頁(yè)面的標(biāo)識(shí)符。
源管理程序可使用任何合適的方法來(lái)生成PSB。在示例實(shí)施例中,源管理程序最初將存儲(chǔ)頁(yè)面的狀態(tài)設(shè)置為臟。隨后,基于真實(shí)的頁(yè)面狀態(tài),管理程序掃描存儲(chǔ)頁(yè)面并將相關(guān)頁(yè)面的狀態(tài)替換為外部化或傳送。
在傳送輪次的執(zhí)行期間,并且可能在輪次之間,源管理程序(例如,遞增地)更新運(yùn)行中(on the fly)的PSB。例如,為了防止在后續(xù)的輪次中頁(yè)面的不必要的重新發(fā)送,源管理程序?qū)⒅匦掳l(fā)送的臟的和外部化的頁(yè)面的PSB狀態(tài)設(shè)置為傳送。
另外,源管理程序監(jiān)控存儲(chǔ)頁(yè)面的狀態(tài),以檢測(cè)在頁(yè)面?zhèn)魉椭罂赡芤呀?jīng)出現(xiàn)的任何頁(yè)面修改,并相應(yīng)地更新PSB。例如,當(dāng)源VM仍運(yùn)行時(shí),已經(jīng)被傳送的頁(yè)面可能變成臟的或外部化的,并且因此,其狀態(tài)應(yīng)分別從傳送變?yōu)榕K或外部化。在一些實(shí)施例中,遷移程序不允許在遷移過(guò)程期間外部化頁(yè)面。
源管理程序可使用任何合適的方法,以決定在迭代復(fù)制階段期間執(zhí)行多少傳送迭代。例如,在一些實(shí)施例中,當(dāng)每次迭代所發(fā)送的頁(yè)面的數(shù)量降低到預(yù)定義的閾值以下時(shí),源管理程序終止迭代復(fù)制階段。
在實(shí)施例中,源節(jié)點(diǎn)提取(一些或全部的)外部化頁(yè)面的標(biāo)識(shí)符,并將該標(biāo)識(shí)符傳送到PSB中的目的節(jié)點(diǎn)。在另一實(shí)施例中,目的節(jié)點(diǎn)根據(jù)需要(例如,響應(yīng)于頁(yè)面出錯(cuò)事件)請(qǐng)求各個(gè)外部化頁(yè)面的標(biāo)識(shí)符。在以下所描述的實(shí)施例中,假設(shè)目的管理程序例如通過(guò)將更新PSB從源節(jié)點(diǎn)發(fā)送到目的節(jié)點(diǎn)或經(jīng)由DPS網(wǎng)絡(luò)已經(jīng)訪(fǎng)問(wèn)存儲(chǔ)頁(yè)面的被更新的狀態(tài)。
預(yù)復(fù)制實(shí)時(shí)遷移
圖3是根據(jù)本發(fā)明的實(shí)施例示意性圖示用于虛擬機(jī)的預(yù)復(fù)制實(shí)時(shí)遷移的方法的流程圖。在預(yù)復(fù)制PSB生成步驟200處,如以上所描述的,方法以源管理程序60生成PSB結(jié)構(gòu)開(kāi)始。
在預(yù)復(fù)制迭代復(fù)制步驟204處,源管理程序執(zhí)行一個(gè)或多個(gè)傳送迭代。源管理程序掃描PSB、提取各自的頁(yè)面狀態(tài)并根據(jù)如以上所描述的它們的狀態(tài)傳送存儲(chǔ)頁(yè)面。忽略其狀態(tài)等于傳送的頁(yè)面。源管理程序更新運(yùn)行中的PSB,使得在先前迭代期間變成臟或外部化的頁(yè)面將被重新發(fā)送到目的節(jié)點(diǎn)。
在預(yù)復(fù)制停止并復(fù)制步驟212處,源管理程序停止源VM。因此,源VM凍結(jié)對(duì)其存儲(chǔ)頁(yè)面的任何進(jìn)一步的修改。隨后,源管理程序執(zhí)行額外的輪次,以根據(jù)PSB中更新的頁(yè)面狀態(tài)來(lái)傳送剩余的頁(yè)面。進(jìn)一步在步驟208處,在停止源VM之后,源管理程序?qū)M_SRC 68的CPU和I/O狀態(tài)傳送到節(jié)點(diǎn)_B,以作為初始狀態(tài)由VM_DST 72使用。
在一個(gè)實(shí)施例中,在步驟208期間,不允許本地VM和/或DPS網(wǎng)絡(luò)改變由源節(jié)點(diǎn)訪(fǎng)問(wèn)的存儲(chǔ)頁(yè)面中的任何一個(gè)。在另一實(shí)施例中,如果在步驟208期間,頁(yè)面的狀態(tài)改變,則遷移程序進(jìn)行協(xié)調(diào)以反映在目的節(jié)點(diǎn)處的該改變。
在步驟208之后,全部源VM狀態(tài)的傳送完成,并且目的管理程序在預(yù)復(fù)制提交步驟212處開(kāi)始執(zhí)行被遷移的VM_DST 72,隨后該方法終止。
復(fù)制后實(shí)時(shí)遷移
圖4是根據(jù)本發(fā)明的實(shí)施例示意性圖示用于虛擬機(jī)的預(yù)復(fù)制實(shí)時(shí)遷移的流程圖。類(lèi)似于以上的步驟200,在復(fù)制后PSB生成步驟230處,方法以源管理程序60生成PSB結(jié)構(gòu)開(kāi)始。迭代PSB復(fù)制步驟232是可選的,并且以下在復(fù)制后遷移方法的增強(qiáng)的變型中進(jìn)行了描述。
對(duì)比以上的圖3的實(shí)施例,其中頁(yè)面的傳送發(fā)生在源VM仍運(yùn)行的同時(shí),在本實(shí)施例中,源管理程序首先在復(fù)制后停止并復(fù)制步驟234處停止源VM。在步驟234處,在停止源VM之后,源管理程序傳送源節(jié)點(diǎn)的CPU和I/O狀態(tài),并且另外使用PSB來(lái)識(shí)別外部化頁(yè)面并將外部化頁(yè)面的標(biāo)識(shí)符傳送到目的節(jié)點(diǎn)。
在步驟234之后,CPU和I/O狀態(tài)以及源VM的存儲(chǔ)頁(yè)面的至少部分(即,外部化頁(yè)面的各自的標(biāo)識(shí)符)已經(jīng)被遷移,且在復(fù)制后頁(yè)面推送步驟238處,目的管理程序開(kāi)始執(zhí)行被遷移的VM。然而,由于可仍有尚未被傳送的頁(yè)面,因此目的VM可嘗試訪(fǎng)問(wèn)丟失頁(yè)面,這轉(zhuǎn)而又產(chǎn)生頁(yè)面出錯(cuò)事件。響應(yīng)于頁(yè)面出錯(cuò),目的管理程序從源節(jié)點(diǎn)請(qǐng)求各自丟失頁(yè)面。在一些實(shí)施例中,在步驟238處,源管理程序繼續(xù)將存儲(chǔ)頁(yè)面?zhèn)魉偷侥康墓?jié)點(diǎn),作為后臺(tái)進(jìn)程。
在一些實(shí)施例中,一個(gè)或多個(gè)頁(yè)面從未被源VM訪(fǎng)問(wèn)。為了防止傳送實(shí)際上沒(méi)有使用的頁(yè)面,這樣的頁(yè)面在PSB中被標(biāo)記為從未訪(fǎng)問(wèn)的頁(yè)面。
當(dāng)訪(fǎng)問(wèn)PSB中的存儲(chǔ)頁(yè)面的狀態(tài)時(shí),目的管理程序相應(yīng)地做出如下反應(yīng):
·外部化-使用頁(yè)面的唯一標(biāo)識(shí)符從其中儲(chǔ)存頁(yè)面的節(jié)點(diǎn)請(qǐng)求頁(yè)面。
·從未訪(fǎng)問(wèn)-不需要請(qǐng)求頁(yè)面,分配空頁(yè)。
在復(fù)制后提交步驟242處,所有存儲(chǔ)頁(yè)面已經(jīng)被成功傳送,源VM現(xiàn)在被完全遷移,并且隨后方法終止。
在一些情況下,在以上的步驟234處使用PSB來(lái)提取外部化頁(yè)面的標(biāo)識(shí)符將在步驟234處停止VM_SRC 68和在步驟238處激活VM_DST之間的停機(jī)時(shí)間增加到不可接受的持續(xù)時(shí)間。我們現(xiàn)在對(duì)圖4的復(fù)制后方法的變型進(jìn)行描述,其在以上的步驟230和234之間包括迭代的PSB復(fù)制階段232,使得取決于PSB的至少一些傳送在源VM停止之前發(fā)生。該變型方法在PSB中使用以下的四值頁(yè)面狀態(tài):
·復(fù)位-其內(nèi)容在頁(yè)面標(biāo)識(shí)符已經(jīng)被傳送之后被檢索回的外部化頁(yè)面。
·外部化-使用頁(yè)面的唯一標(biāo)識(shí)符從其中儲(chǔ)存該頁(yè)面的節(jié)點(diǎn)請(qǐng)求頁(yè)面內(nèi)容。
·從未訪(fǎng)問(wèn)-頁(yè)面已經(jīng)被傳送或未由源VM使用。
·標(biāo)準(zhǔn)-尚未被傳送的本地頁(yè)面。
在增強(qiáng)的復(fù)制后方法中,在步驟232處,源VM仍在運(yùn)行,并且源管理程序迭代地將PSB的被更新的版本發(fā)送到目的節(jié)點(diǎn),該目的節(jié)點(diǎn)在步驟238處使用PSB信息,如下所示:
·傳送-在目的節(jié)點(diǎn)處分配空頁(yè)。
·外部化-從源節(jié)點(diǎn)請(qǐng)求頁(yè)面標(biāo)識(shí)符。
·復(fù)位/標(biāo)準(zhǔn)-發(fā)起頁(yè)面出錯(cuò)以從源VM請(qǐng)求頁(yè)面內(nèi)容。
對(duì)圖4的方法附加的步驟232能夠減少在步驟234處識(shí)別和發(fā)送外部化頁(yè)面的階段,并從而降低其間VM_SRC 68和VM_DST 72兩者顯著下降的停機(jī)持續(xù)時(shí)間。
混合實(shí)時(shí)遷移
圖5是根據(jù)本發(fā)明的實(shí)施例示意性圖示用于虛擬機(jī)的混合實(shí)時(shí)遷移的流程圖。該方法將以上兩種方法合并為組合的方法。
類(lèi)似于以上的步驟200和230,在混合PSB生成步驟260處,方法以源管理程序60生成PSB結(jié)構(gòu)76開(kāi)始。隨后,源管理程序執(zhí)行混合迭代復(fù)制步驟264,這類(lèi)似于以上的步驟204。如以上所描述的,源管理程序可基于任何合適的標(biāo)準(zhǔn)終止混合迭代復(fù)制階段。
類(lèi)似于以上的步驟234,在混合停止并復(fù)制步驟268處,源管理程序停止源VM,并將外部化頁(yè)面的唯一標(biāo)識(shí)符及CPU和I/O狀態(tài)傳送到目的節(jié)點(diǎn)。
接下來(lái),類(lèi)似于以上的步驟238,該方法執(zhí)行混合推送步驟272。如以上關(guān)于步驟238所描述的,在步驟272處,目的VM可從源節(jié)點(diǎn)請(qǐng)求產(chǎn)生頁(yè)面出錯(cuò)事件的丟失頁(yè)面。源管理程序在后臺(tái)進(jìn)程中并響應(yīng)于來(lái)自目的管理程序的頁(yè)面請(qǐng)求而傳送頁(yè)面。
在混合提交步驟276處,源VM完全轉(zhuǎn)變?yōu)檫w移的,并且目的管理程序運(yùn)行被遷移的圖像VM_DST 72。隨后,方法終止。
在圖4和圖5的方法中,只有外部化頁(yè)面的標(biāo)識(shí)符在各自的停止并復(fù)制步驟234和268期間被傳送。由于只有頁(yè)面標(biāo)識(shí)符被傳送(而不是通常大得多的實(shí)際的頁(yè)面內(nèi)容),因此這顯著降低了停機(jī)時(shí)間周期。另外,在各自的步驟238和272處起動(dòng)目的VM之后,由外部化頁(yè)面產(chǎn)生的雙頁(yè)面出錯(cuò)事件的概率相對(duì)較低,并且基本上不降低性能。
圖6是根據(jù)本發(fā)明的實(shí)施例示意性圖示遷移后去重復(fù)方法的流程圖。該方法例如在其間外部化頁(yè)面被檢索回的VM的遷移之后在目的節(jié)點(diǎn)處被執(zhí)行,并作為本地(可能重復(fù))的頁(yè)面被傳送到目的節(jié)點(diǎn)。
在PSB接收步驟300處,該方法以目的管理程序60從源節(jié)點(diǎn)接收PSB76開(kāi)始。例如,PSB可作為遷移提交階段的部分來(lái)接收,其中目的VM完全轉(zhuǎn)變?yōu)榭刹僮鞯?。在生成PSB時(shí),源VM應(yīng)例如使用頁(yè)面的唯一指紋標(biāo)識(shí)符來(lái)對(duì)被檢索的去重復(fù)的頁(yè)面進(jìn)行標(biāo)記。
在候選識(shí)別步驟304處,目的管理程序掃描所接收的PSB,以識(shí)別所檢索的去重復(fù)的頁(yè)面且和因此現(xiàn)在是重復(fù)的頁(yè)面。在匹配步驟308處,目的管理程序使用頁(yè)面指紋標(biāo)識(shí)符為每個(gè)所識(shí)別的頁(yè)面匹配副本。
在去重復(fù)步驟312處,目的管理程序?qū)⑷ブ貜?fù)程序應(yīng)用到匹配的重復(fù)頁(yè)面。去重復(fù)可能取決于本地和/或系統(tǒng)的去重復(fù)標(biāo)準(zhǔn)。在步驟312之后,方法終止。
示例存儲(chǔ)共享架構(gòu)
圖7是根據(jù)本發(fā)明的實(shí)施例示意性示出在系統(tǒng)20中使用的分布式存儲(chǔ)共享架構(gòu)的圖。圖7中所描繪的架構(gòu)另外用作可用在以上所描述的VM實(shí)時(shí)遷移實(shí)施例中的DPS網(wǎng)絡(luò)的示例實(shí)施方式。該架構(gòu)在以上所引述的美國(guó)申請(qǐng)14/181,791中更詳細(xì)地得到了解決。
圖的左手側(cè)示出了在被稱(chēng)作本地節(jié)點(diǎn)的給定節(jié)點(diǎn)24的CPU上運(yùn)行的組件。系統(tǒng)20中的每個(gè)節(jié)點(diǎn)24通常以類(lèi)似的方式來(lái)實(shí)施。圖的右手側(cè)示出了與本地節(jié)點(diǎn)進(jìn)行交互的其他節(jié)點(diǎn)的組件。在本地節(jié)點(diǎn)(圖的左手側(cè))中,組件被劃分為內(nèi)核空間(圖的底部)和用戶(hù)空間(圖的頂部)。后者分區(qū)主要是實(shí)施驅(qū)動(dòng)而不是強(qiáng)制性的。
在本示例中,每個(gè)節(jié)點(diǎn)運(yùn)行各自的用戶(hù)空間DPS代理460和內(nèi)核空間節(jié)點(diǎn)頁(yè)面管理器(NPM)464,該用戶(hù)空間DPS代理460在功能上類(lèi)似于以上的圖1中的DPS代理48。節(jié)點(diǎn)運(yùn)行管理程序468,該管理程序468被劃分成用戶(hù)空間管理程序組件472和內(nèi)核空間管理程序組件476。但在本示例中,雖然不是必須的,但是用戶(hù)空間管理程序組件是基于QEMU的,以及內(nèi)核空間管理程序組件是基于Linux/KVM的。管理程序468運(yùn)行一個(gè)或多個(gè)VM 470并提供給VM資源,諸如存儲(chǔ)器、儲(chǔ)存器和CPU資源。
DPS代理460包括三個(gè)主要組件-頁(yè)面儲(chǔ)存器480、傳輸層484和碎片組件488。頁(yè)面儲(chǔ)存器480保持被儲(chǔ)存在節(jié)點(diǎn)上的存儲(chǔ)頁(yè)面的實(shí)際內(nèi)容(數(shù)據(jù))。傳輸層484負(fù)責(zé)與其他節(jié)點(diǎn)的同級(jí)傳輸層484進(jìn)行通信并交換頁(yè)面。DPS代理460中的管理應(yīng)用程序編程接口(API)492與管理層496進(jìn)行通信。
碎片488保持存儲(chǔ)頁(yè)面的元數(shù)據(jù)。例如,頁(yè)面的元數(shù)據(jù)可包括頁(yè)面的儲(chǔ)存位置和通過(guò)頁(yè)面內(nèi)容所計(jì)算的散列值。頁(yè)面的散列值用作識(shí)別頁(yè)面(及其相同副本)的集群范圍的唯一標(biāo)識(shí)符。散列值還被稱(chēng)作全局唯一內(nèi)容ID(GUCID)。注意到的是,散列法僅是用于索引頁(yè)面內(nèi)容的簽名或索引的示例形式??蛇x地,可使用任何其他合適的簽名或索引方案。
聯(lián)合地,所有節(jié)點(diǎn)24的碎片488共同保持系統(tǒng)20中的所有存儲(chǔ)頁(yè)面的元數(shù)據(jù)。每個(gè)碎片488保持頁(yè)面的子集的元數(shù)據(jù),其是不必被儲(chǔ)存在相同的節(jié)點(diǎn)上的頁(yè)面。對(duì)于給定的頁(yè)面,為頁(yè)面保持元數(shù)據(jù)的碎片被定義為“擁有”頁(yè)面。各種技術(shù)可用于將頁(yè)面分配給碎片。在本示例中,每個(gè)碎片488被分配散列值的各自的范圍,并擁有其散列值落入該范圍中的頁(yè)面。
從碎片488的觀(guān)點(diǎn)來(lái)看,對(duì)于給定擁有頁(yè)面,每個(gè)節(jié)點(diǎn)24可以是以下三個(gè)角色中的一個(gè):
■“起點(diǎn)”-頁(yè)面被儲(chǔ)存(可能以壓縮的形式)在節(jié)點(diǎn)的存儲(chǔ)器中,并由至少一個(gè)本地VM使用。
■“儲(chǔ)存器”-頁(yè)面被儲(chǔ)存(可能以壓縮的形式)在節(jié)點(diǎn)的存儲(chǔ)器中,但不由任何本地VM使用。
■“依賴(lài)”-頁(yè)面沒(méi)有被儲(chǔ)存在節(jié)點(diǎn)的存儲(chǔ)器中,但至少一個(gè)本地VM依賴(lài)于它并可在任何時(shí)候訪(fǎng)問(wèn)它。
碎片488通常維持每個(gè)擁有頁(yè)面的三個(gè)節(jié)點(diǎn)列表-處于“起點(diǎn)”角色中的節(jié)點(diǎn)的列表、處于“儲(chǔ)存器”角色中的節(jié)點(diǎn)的列表、以及處于“依賴(lài)”角色中的節(jié)點(diǎn)的列表。每個(gè)節(jié)點(diǎn)24可屬于列表中的至多一個(gè),但每個(gè)列表可包含多個(gè)節(jié)點(diǎn)。
NPM 464包括內(nèi)核空間的本地頁(yè)面跟蹤器490,其用作頁(yè)面儲(chǔ)存器480的內(nèi)核側(cè)組件。在邏輯上,頁(yè)面跟蹤器490可被看作屬于DPS代理460。NPM還包括引入過(guò)程493和換出過(guò)程494。引入過(guò)程493將頁(yè)面引入到DPS網(wǎng)絡(luò)。換出過(guò)程494處理作為用于輸出到其他節(jié)點(diǎn)的候選的頁(yè)面。虛擬存儲(chǔ)器管理模塊496向管理程序和/或架構(gòu)的基本存儲(chǔ)器管理功能提供接口,例如,映射虛擬機(jī)的頁(yè)入和頁(yè)出的地址空間的能力。
圖7中所示出的架構(gòu)和功能分區(qū)僅通過(guò)示例的方式來(lái)描繪。在可選實(shí)施例中,存儲(chǔ)器共享方案可以以任何其他合適的方式在各種節(jié)點(diǎn)中來(lái)實(shí)施。
以上所描述的實(shí)施例通過(guò)示例的方式來(lái)示出,并且也可使用其他合適的實(shí)施例。例如,所描述的劃分成遷移階段(諸如迭代復(fù)制階段、停止并復(fù)制階段以及頁(yè)面推送階段)不是強(qiáng)制性的,并且在可選實(shí)施例中,也可使用其他遷移階段和階段排序。
作為另一示例,在一些實(shí)施例中,源VM、目的VM或兩者可運(yùn)行用于在遷移期間傳送本地和外部化存儲(chǔ)頁(yè)面的至少一些的內(nèi)容或唯一標(biāo)識(shí)符的合適的后臺(tái)進(jìn)程。例如,源和目的VM可分別應(yīng)用推送和拉取傳送。
雖然本文中所描述的實(shí)施例主要處理實(shí)時(shí)VM遷移,但本文中所描述的方法和系統(tǒng)也可用在其他應(yīng)用中,諸如用在分布式儲(chǔ)存系統(tǒng)內(nèi)的內(nèi)容遷移中。將所公開(kāi)的技術(shù)適用到這樣的應(yīng)用中可能涉及用儲(chǔ)存設(shè)備代替VM,和用內(nèi)存塊儲(chǔ)存器代替存儲(chǔ)頁(yè)面。
將認(rèn)識(shí)到,以上所描述的實(shí)施例是通過(guò)示例的方式來(lái)引述的,并且本發(fā)明不限于上文中已經(jīng)特別示出和描述的那些實(shí)施例。相反,本發(fā)明的范圍包括上文所描述的各種特征的組合和子組合以及本領(lǐng)域技術(shù)人員在閱讀以上描述之后將想到的且未在現(xiàn)有技術(shù)中公開(kāi)的其變型和修改。通過(guò)引用并入本專(zhuān)利申請(qǐng)中的文檔被視為本申請(qǐng)的組成部分,除了在一定程度上任何術(shù)語(yǔ)以與本說(shuō)明書(shū)中明確地或隱含地作出的定義沖突的方式被定義在這些并入的文檔中時(shí),僅應(yīng)考慮本說(shuō)明書(shū)中的定義。