虛擬機(jī)故障切換的制作方法
【專利摘要】本發(fā)明涉及一種虛擬機(jī)故障切換。公開一種計算機(jī)系統(tǒng)(100),該計算機(jī)系統(tǒng)包括:處理器單元(110),適于在第一操作模式中運(yùn)行虛擬機(jī);可由處理器單元訪問的高速緩存(120),所述高速緩存包括多個高速緩存行(1210),每個高速緩存行包括高速緩存線(1214)和映像修改標(biāo)志(1217),映像修改標(biāo)志指示由虛擬機(jī)的運(yùn)行引起的所述高速緩存線的修改;以及能由高速緩存控制器訪問的存儲器(140),用于存儲所述虛擬機(jī)的映像,其中處理器單元包括:復(fù)本管理器,適于在所述第一操作模式中運(yùn)行虛擬機(jī)之前在存儲器中定義日志(200);并且所述高速緩存還包括:高速緩存控制器(122),適于定期地檢查所述映像修改標(biāo)志;在定義的日志中僅寫入有標(biāo)志的高速緩存線的存儲器地址并且后續(xù)清除映像修改標(biāo)志。也公開一種包括這樣的計算機(jī)系統(tǒng)的計算機(jī)集群和管理這樣的計算機(jī)集群的方法。
【專利說明】虛擬機(jī)故障切換
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種計算機(jī)系統(tǒng),該計算機(jī)系統(tǒng)包括:處理器單元,適于在第一操作模式中運(yùn)行虛擬機(jī);可由處理器單元訪問的高速緩存,所述高速緩存包括高速緩存控制器;以及可由高速緩存控制器訪問的存儲器,用于存儲所述虛擬機(jī)的映像。
[0002]本發(fā)明還涉及一種包括多個這樣的計算機(jī)系統(tǒng)的計算機(jī)集群。
[0003]本發(fā)明進(jìn)而還涉及一種操作包括第一系統(tǒng)和第二系統(tǒng)的計算機(jī)集群的方法,每個系統(tǒng)包括:包括虛擬機(jī)的映像的存儲器;至少一個處理器單元;以及可由至少一個處理器單元訪問的高速緩存。
【背景技術(shù)】[0004]在計算機(jī)集群上廣泛應(yīng)用虛擬化以提高實施的計算架構(gòu)對故障的魯棒性并且增加架構(gòu)的資源利用。在虛擬化架構(gòu)中,集群中的計算機(jī)系統(tǒng)的處理器單元、例如處理器和/或處理器核充當(dāng)虛擬機(jī)(VM)的物理主機(jī),這些物理主機(jī)被外界視為獨立實體。這有助于硬件對硬件故障的魯棒性,因為在硬件故障時,出故障的硬件先前托管的VM可以用某種方式故障切換到另一主機(jī)而用戶未察覺硬件故障。這一概念是這樣的VM提供的服務(wù)的所謂‘高可用性’的重要促進(jìn)因素。
[0005]實施這樣的故障切換不是無關(guān)緊要的任務(wù),因為理想地應(yīng)當(dāng)在與VM在硬件故障點的狀態(tài)相同的狀態(tài)中重新啟動VM以避免用戶的不便。
[0006]在一種方式中,通過在不同實體、例如不同物理服務(wù)器上在鎖定步驟中運(yùn)行單個VM的多個拷貝來提供故障切換,從而在一個實體的故障時另一實體可以接管用于托管VM的職責(zé)。這樣的鎖定步驟布置的顯著缺點是VM的故障切換拷貝消耗處理資源、因此減少系統(tǒng)的可用帶寬、即減少系統(tǒng)可以托管的VM總數(shù)。
[0007]在商用產(chǎn)品中普遍發(fā)現(xiàn)的另一方式中,物理主機(jī)通過從共享盤狀態(tài)、例如VM的共享映像簡單地重新引導(dǎo)VM來對另一物理主機(jī)的故障做出響應(yīng)。然而這增加盤破壞和完全失去VM的暴露狀態(tài)的風(fēng)險。
[0008]在如下參考文獻(xiàn)中公開不同的故障切換方式:〃Remus:High Availability viaVirtual Machine Replication^By Brendan Cully et al.1n NSDI’ 08Proceedings ofthe4th USENIX Symposium on Networked Systems Design and Implementation,2008,第161-174頁。在這一方式中,將所有VM存儲器定期地標(biāo)記為只讀以允許在VM存儲器的在另一主機(jī)上的拷貝中復(fù)制對VM存儲器的改變。在這一只讀狀態(tài)中,管理程序能夠俘獲VM對存儲器進(jìn)行的所有寫入,并且維護(hù)自從前一輪起已經(jīng)變臟的頁面的映射。在每一輪,遷移過程自動讀取和重置這一映射,并且迭代遷移過程涉及到追尋臟頁面直至不再能夠產(chǎn)生進(jìn)度。這一方式提高故障切換魯棒性,因為在備份主機(jī)上定期地創(chuàng)建VM存儲器的單獨最新映像,該備份主機(jī)可以在主要主機(jī)的硬件故障之后使用這一映像來簡單地啟動VM的復(fù)制。
[0009]然而這一方式的缺點是由于VM在它的VM存儲器的只讀狀態(tài)期間保持操作,所以可能生成大量頁面故障。此外,這一方式未允許容易檢測已經(jīng)更改頁面的什么部分,從而即使在頁面上僅已經(jīng)改變單個位,仍然必須復(fù)制全部頁面,這有損于總架構(gòu)的總性能,因為例如小的頁面大小必須用來避免在系統(tǒng)之間的過量數(shù)據(jù)流量,這減少操作系統(tǒng)的性能,因為操作系統(tǒng)不能使用較大大小的頁面。
[0010]US5, 893,155公開一種數(shù)字計算機(jī)存儲器高速緩存組織,該組織實施高效、有選擇的高速緩存回寫、映射和傳送數(shù)據(jù)以用于例如數(shù)據(jù)庫的回滾和前滾。向與高速緩存關(guān)聯(lián)的日志塊構(gòu)建器直通寫入向標(biāo)注為記入的高速緩存線的寫入或者存儲操作。如在回寫高速緩存中那樣在高速緩存本地處置非記入存儲操作。日志塊構(gòu)建器將寫入操作組合成數(shù)據(jù)塊并且向日志拆分器傳送數(shù)據(jù)庫。日志拆分器基于地址將記入的數(shù)據(jù)去復(fù)用成單獨流。
[0011]簡言之,以上方式并非沒有問題。例如,如先前說明的那樣,在掛起VM期間,高速緩存對頁面錯誤敏感,因為高速緩存被置于只讀狀態(tài)中。另外可能必須為每個檢查點存儲大量數(shù)據(jù),這給計算架構(gòu)、特別是架構(gòu)的數(shù)據(jù)存儲設(shè)施的資源利用帶來壓力。
【發(fā)明內(nèi)容】
[0012]本發(fā)明尋求提供一種根據(jù)開篇段落的計算機(jī)系統(tǒng),在該計算機(jī)系統(tǒng)中,可以用更高效方式實現(xiàn)VM復(fù)本。
[0013]本發(fā)明還尋求提供一種包括多個這樣的系統(tǒng)的計算機(jī)集群。
[0014]本發(fā)明進(jìn)而還尋求提供一種管理這樣的計算機(jī)集群的方法,在該方法中,可以用更高效方式復(fù)制VM。
[0015]根據(jù)本發(fā)明的一個方面,提供一種計算機(jī)系統(tǒng),該計算機(jī)系統(tǒng)包括:處理器單元,適于在第一操作模式中運(yùn)行虛擬機(jī);可由處理器單元訪問的高速緩存,所述高速緩存包括多個高速緩存行,每個高速緩存行包括高速緩存線和映像修改標(biāo)志,映像修改標(biāo)志指示虛擬機(jī)的運(yùn)行引起的所述高速緩存線的修改;以及能由高速緩存控制器訪問的存儲器,用于存儲所述虛擬機(jī)的映像,其中處理器單元包括:復(fù)本管理器,適于在所述第一操作模式中運(yùn)行虛擬機(jī)之前在存儲器中定義日志;并且所述高速緩存還包括:高速緩存控制器,適于定期地檢查所述映像修改標(biāo)志;在定義的日志中僅寫入有標(biāo)志的高速緩存線的存儲器地址并且清除映像修改標(biāo)志。
[0016]在本發(fā)明的計算機(jī)系統(tǒng)中,處理器單元適于托管VM (在第一操作模式中)以及充當(dāng)VUM映像復(fù)本管理器,以在另一位置中、例如在另一計算機(jī)系統(tǒng)的存儲器中創(chuàng)建VM映像的復(fù)本。本發(fā)明基于如下認(rèn)識:由于托管VM的處理器單元對活躍VM的映像進(jìn)行的所有改變將通過它的高速緩存行進(jìn),所以有可能簡單地記下與臟高速緩存線關(guān)聯(lián)的存儲器地址。為此,高速緩存行包括映像修改標(biāo)記,映像修改標(biāo)記通知VM的執(zhí)行對高速緩存線的修改、即通知對VM映像的改變,這具有如下優(yōu)點:可以向日志寫入臟高速緩存線的存儲器地址而無需同時從高速緩存逐出臟高速緩存線,這將是在將代之以基于用來向計算機(jī)系統(tǒng)的存儲器寫入修改的高速緩存線的臟位標(biāo)簽標(biāo)識相關(guān)存儲器地址時的情況。因此,使用通知由VM的執(zhí)行對高速緩存線的修改的附加標(biāo)志位保證可以向日志寫入因此修改的高速緩存線的存儲器地址,而同時無需同時從高速緩存刷新高速緩存線、因此顯著地減少需要在更新日志時從高速緩存?zhèn)魉偷臄?shù)據(jù)量。
[0017]高速緩存控制器通常還適于一旦從高速緩存逐出有標(biāo)志的高速緩存線,則在定義的日志中寫入有標(biāo)志的線的存儲器地址以捕獲不再確保在映像修改標(biāo)簽的定期檢查期間存在于高速緩存中的對VM映像的有標(biāo)志的改變。
[0018]優(yōu)選地,計算機(jī)系統(tǒng)還包括:處理器單元,適于通過以下操作更新虛擬機(jī)的在不同存儲器位置中的另一映像:從日志取回存儲器地址;使用取回的存儲器地址來獲得修改的高速緩存線;并且用所述修改的高速緩存線來更新另一映像,從而記入的存儲器地址倍用來向VM映像的拷貝僅拷貝主要映像的更改的數(shù)據(jù),該拷貝可以例如位于另一計算機(jī)系統(tǒng)上。
[0019]以這一方式,可以同步VM映像而無需引起附加頁面錯誤,并且由于數(shù)據(jù)修改的更小粒度、即高速緩存線大小而不是頁面大小,并且由于在映像復(fù)制期間掛起VM的事實而減少在系統(tǒng)之間的流量、因此避免需要頁面保護(hù)。這一方式還不可知頁面大小,從而可以比例如在Remus方式中的情況使用更大頁面大小。另外,給計算機(jī)系統(tǒng)的附加硬件成本最??;僅需對高速緩存控制器、例如對高速緩存控制器的逐出引擎和窺探干預(yù)引擎以及對高速緩存的高速緩存行的少量改變,以保證高速緩存控制器通過在執(zhí)行VM期間定期檢查映像修改標(biāo)志來在日志中寫入臟高速緩存線的存儲器地址。
[0020]本發(fā)明可以用推送或者拉取方式從主要VM映像向拷貝復(fù)制數(shù)據(jù)。在推送實現(xiàn)方式中,來自相同計算機(jī)系統(tǒng)的處理器單元、例如運(yùn)行VM的處理器單元或者不同處理器單元也可以在第二操作模式中例如在復(fù)本管理器的控制之下負(fù)責(zé)更新VM的映像的在不同存儲器位置中的拷貝,該不同存儲器位置可以是在相同計算機(jī)系統(tǒng)的存儲器中的存儲器位置或者在不同計算機(jī)系統(tǒng)的存儲器中的存儲器位置。在拉取實現(xiàn)方式中,不同計算機(jī)系統(tǒng)的處理器單元可以適于通過從托管VM的計算機(jī)系統(tǒng)拉取存儲器地址和關(guān)聯(lián)的修改的高速緩存線來更新VM的映像的在這一不同計算機(jī)系統(tǒng)上的存儲器位置中的拷貝。
[0021]高速緩存可以包括回寫高速緩存,該回寫高速緩存可以形成多級高速緩存的部分,該多級高速緩存還包括適于向回寫高速緩存中寫入高速緩存線的直通寫入高速緩存,其中僅回寫高速緩存的高速緩存行包括所述標(biāo)志。由于按照定義,在直通寫入高速緩存中的高速緩存線不能變臟,因為也向回寫高速緩存復(fù)制高速緩存線修改,所以僅回寫高速緩存在向日志定期地寫入存儲器地址時需要檢查。
[0022]在一個實施例中,日志是環(huán)形緩沖器,并且該系統(tǒng)包括適于存儲以下各項的多個寄存器:第一指針,指向環(huán)形緩沖器的卷繞地址;第二指針,指向環(huán)形緩沖器的下一可用地址;第三指針,指向環(huán)形緩沖器的初始地址;以及環(huán)形緩沖器的大??;并且高速緩存控制器適于在日志中寫入存儲器地址之后更新至少第二指針。
[0023]這是日志的一個特別有利的實施例,因為日志在其使用之前就被定義大小、因此避免(系統(tǒng))存儲器中的沖突并且有助于監(jiān)視復(fù)本管理器日志的填充水平,從而如果日志的填充水平逼近日志的容量、即在日志幾乎為滿時,復(fù)本管理器可以激活用于更新輔助VM的同步模式。在這一實施例中,該系統(tǒng)、例如高速緩存控制器的處理器單元包括專用寄存器,這些專用寄存器可由高速緩存控制器訪問并且允許例如高速緩存控制器或者復(fù)本管理器監(jiān)視環(huán)形緩沖器的填充水平。
[0024]優(yōu)選地,每個處理器單元被配置用于在從日志取回存儲器地址之前對日志中的存儲器地址進(jìn)行去重復(fù)。這減少為了在分別包括VM的映像及其拷貝的存儲器之間同步數(shù)據(jù)而需要的時間量,因為保證在記入的存儲器位置中的更改的數(shù)據(jù)僅被拷貝一次、因此進(jìn)一步減少主要VM被掛起的時間量。[0025]根據(jù)本發(fā)明的另一方面,提供一種計算機(jī)集群,該計算機(jī)集群包括多個根據(jù)本發(fā)明的一個實施例的計算機(jī)系統(tǒng)和互連多個計算機(jī)系統(tǒng)的網(wǎng)絡(luò)。這樣的集群賦予更佳用戶體驗,因為出于以上給出的原因而實現(xiàn)在計算機(jī)系統(tǒng)托管的VM之間的改進(jìn)的故障切換。
[0026]根據(jù)本發(fā)明的進(jìn)而另一方面,提供一種操作包括第一計算機(jī)系統(tǒng)的計算機(jī)集群的方法,第一計算機(jī)系統(tǒng)包括:包括虛擬機(jī)的映像的存儲器、適于在第一操作模式中運(yùn)行虛擬機(jī)的至少一個處理器單元和能由至少一個處理器單元訪問的高速緩存,所述高速緩存包括多個高速緩存行,每個高速緩存行包括高速緩存線和映像修改標(biāo)志,映像修改標(biāo)志指示由虛擬機(jī)的運(yùn)行引起的所述高速緩存線的修改,其中在所述第一操作模式中,第一計算機(jī)系統(tǒng)的處理器單元執(zhí)行以下步驟:在第一計算機(jī)系統(tǒng)的存儲器中定義日志;使用所述映像來運(yùn)行虛擬機(jī);一旦在所述運(yùn)行步驟期間修改高速緩存的高速緩存線,則通過設(shè)置包括修改的高速緩存線的高速緩存行的映像修改標(biāo)志來用信號通知所述修改;以及定期地檢查所述映像修改標(biāo)志;并且第一計算機(jī)系統(tǒng)的處理器單元還執(zhí)行以下步驟:向所述日志僅寫入有標(biāo)志的修改的高速緩存線的存儲器地址;以及在所述寫入步驟之后清除映像修改標(biāo)志。
[0027]以這一方式,用修改的高速緩存線的存儲器地址更新日志而無需同時從高速緩存刷新修改的高速緩存線、因此提供一種方法,在該方法中,以最小數(shù)據(jù)帶寬生成VM映像復(fù)制。
[0028]處理器單元通常還執(zhí)行以下步驟:一旦從高速緩存逐出有標(biāo)志的高速緩存線,則在定義的日志中寫入所述有標(biāo)志的線的存儲器地址以捕獲對VM映像的有標(biāo)志的改變,該改變不再確保在映像修改標(biāo)簽的定期檢查期間存在于高速緩存中。
[0029]在一個實施例中,該方法還包括通過以下操作更新虛擬機(jī)的另一映像的步驟:從存儲器中的日志定期地讀取存儲器地址;使用所述存儲器地址來獲得高速緩存線;并且用獲得的高速緩存線更新另一映像。這保證可以定期地更新VM的拷貝而無需從高速緩存刷新臟高速緩存線,因為可以由例如窺探干預(yù)引擎從臟高速緩存線駐留于其中的高速緩存取回該臟高速緩存線,該窺探干預(yù)引擎識別請求的存儲器地址并且從高速緩存驅(qū)逐(casting)關(guān)聯(lián)高速緩存。
[0030]優(yōu)選地,更新虛擬機(jī)處理器單元的另一映像的步驟由第一計算機(jī)系統(tǒng)的另一處理器單元執(zhí)行,因為這有助于如下實施例,在該實施例中至少部分并發(fā)執(zhí)行運(yùn)行虛擬機(jī)和更新虛擬機(jī)的另一映像的步驟,這減少在更新另一映像時懸停VM的時間量。
[0031]在一個實施例中,計算機(jī)集群還包括第二計算機(jī)系統(tǒng),第二計算機(jī)系統(tǒng)包括:包括另一映像的另一存儲器、至少一個另一處理器單元和能由至少一個另一處理器單元訪問的另一高速緩存,其中每個另一處理器單元適于使用所述另一映像在第一操作模式中運(yùn)行虛擬機(jī)。
[0032]在另一實施例中,該方法還包括以下步驟:在所述定期地讀取步驟之前對日志中的存儲器地址進(jìn)行去重復(fù),從而避免相同數(shù)據(jù)的多次訪問,并且實現(xiàn)在計算機(jī)系統(tǒng)之間的數(shù)據(jù)傳送的進(jìn)一步順利化??梢杂欣財U(kuò)展去重復(fù)概念以覆蓋如下實施例,在該實施例中,第一計算機(jī)系統(tǒng)包括托管虛擬機(jī)的多個處理器單元,所述多個處理器單元中的每個處理器單元具有對與第一計算機(jī)系統(tǒng)的存儲器中的相應(yīng)日志關(guān)聯(lián)的單獨高速緩存的訪問,其中所述去重復(fù)步驟包括對跨越相應(yīng)日志的地址進(jìn)行去重復(fù)。
[0033]為了輔助管理日志,每個計算機(jī)系統(tǒng)還可以包括用于管理所述日志的多個寄存器,其中在日志中寫入存儲器地址的步驟還可以包括更新所述寄存器中的至少一些寄存器以反映向所述日志添加所述存儲器地址。寄存器可以如先前說明的那樣駐留于處理器單元中或者高速緩存控制器中。
【專利附圖】
【附圖說明】
[0034]現(xiàn)在將參照以下附圖僅通過示例描述本發(fā)明的優(yōu)選實施例,在附圖中:
[0035]圖1示意地描繪根據(jù)本發(fā)明的實施例的計算機(jī)系統(tǒng);
[0036]圖2更具體地示意地描繪根據(jù)本發(fā)明的實施例的計算機(jī)系統(tǒng)的方面;
[0037]圖3更具體地示意地描繪根據(jù)本發(fā)明的實施例的計算機(jī)系統(tǒng)的另一方面;
[0038]圖4示意地描繪根據(jù)本發(fā)明的實施例的更新計算機(jī)系統(tǒng)的方法的方面的流程圖;
[0039]圖5示意地描繪根據(jù)本發(fā)明的實施例的更新計算機(jī)系統(tǒng)的方法的另一方面的流程圖;
[0040]圖6示意地描繪根據(jù)本發(fā)明的另一實施例的更新計算機(jī)系統(tǒng)的方法的另一方面的流程圖;并且
[0041]圖7示意地描繪根據(jù)本發(fā)明的實施例的計算機(jī)集群。
【具體實施方式】
[0042]應(yīng)當(dāng)理解附圖僅為示意而未按比例繪制。也應(yīng)當(dāng)理解相同標(biāo)號貫穿附圖用來指示相同或者相似部分。
[0043]圖1示意地描繪根據(jù)本發(fā)明的實施例的計算機(jī)系統(tǒng)100。計算機(jī)系統(tǒng)100包括用于托管多個虛擬機(jī)的多個處理器單元110。在圖1中,僅通過非限制示例示出四個處理器單元IlOa-1lOd ;應(yīng)當(dāng)理解計算機(jī)系統(tǒng)100可以包括任何適當(dāng)數(shù)目的處理器單元。
[0044]在本發(fā)明的上下文中,處理器單元旨在于體現(xiàn)能夠(偽)自治執(zhí)行計算機(jī)程序代碼的硬件單元、比如處理器、微處理器或者包括多個核的處理器或者微處理器的這樣的核。
[0045]每個處理器單元110還具有對高速緩存120的訪問,該高速緩存除了條目124的池之外還通常包括高速緩存控制器122而每個條目包括高速緩存線和一個或者多個標(biāo)簽??梢允褂萌魏芜m當(dāng)高速緩存架構(gòu)、例如單個高速緩存或者若干高速緩存級、比如I級高速緩存、2級高速緩存和3級高速緩存或者其適當(dāng)子集。高速緩存120可以駐留于任何適當(dāng)位置。例如高速緩存120可以位于處理器單元110上或者附近以如本身熟知的那樣保證顯著減少數(shù)據(jù)取回延時。
[0046]在圖1中所示實施例中,每個處理器單元110具有對專用高速緩存120的訪問、SP僅通過非限制示例示出四個高速緩存120a-120d,處理器單元IlOa-1lOd中的每個相應(yīng)處理器單元一個高速緩存。然而應(yīng)當(dāng)理解可以選擇任何適當(dāng)配置、例如如下配置,在該配置中,處理器單元110具有對多個高速緩存120的訪問,如先前說明的那樣,可以在分級結(jié)構(gòu)、例如I級、2級和3級高速緩存的組合中組織這些高速緩存。
[0047]每個處理器單元110通常至少在功能級通過它的高速緩存120通信地耦合到總線架構(gòu)130。這意味著處理器單元110的任何數(shù)據(jù)訪問將如在這樣的計算機(jī)系統(tǒng)中常有的情況那樣涉及到它的高速緩存120。總線架構(gòu)的確切性質(zhì)和連通與本發(fā)明未特別相關(guān),并且足以認(rèn)為可以選擇任何適當(dāng)總線架構(gòu)130。[0048]計算機(jī)系統(tǒng)100還包括耦合到總線架構(gòu)130的存儲器140,該存儲器同樣可以采用任何適當(dāng)形式、例如在計算機(jī)系統(tǒng)中集成的存儲器或者通過網(wǎng)絡(luò)可訪問的分布式存儲器。存儲器可以是易失性存儲器或者非易失性存儲器,并且可以是虛擬存儲器、例如包括可以位于計算機(jī)系統(tǒng)100中的數(shù)據(jù)存儲設(shè)備如硬盤或者可以經(jīng)由網(wǎng)絡(luò)、例如存儲區(qū)域網(wǎng)絡(luò)或者網(wǎng)絡(luò)附著的存儲裝置可訪問。這樣的存儲器140的許多其它適當(dāng)實施例將為本領(lǐng)域技術(shù)人員所清楚。
[0049]雖然未具體示出,但是計算機(jī)系統(tǒng)100可以如本領(lǐng)域技術(shù)人員當(dāng)然熟知的那樣包括附加部件、比如一個或者多個網(wǎng)絡(luò)接口、輸入端口、輸出端口等。
[0050]在實施例中,計算機(jī)系統(tǒng)100適于托管處理器單元110上的多個虛擬機(jī)。在本發(fā)明的上下文中,虛擬機(jī)是計算設(shè)備的軟件表示,該計算設(shè)備能夠托管從單個計算機(jī)程序到完整操作系統(tǒng)的任何內(nèi)容并且可以在計算機(jī)系統(tǒng)100的用戶看來本身作為單獨系統(tǒng)存在,從而用戶未察覺下層計算機(jī)系統(tǒng)100。例如在計算機(jī)系統(tǒng)100體現(xiàn)具有多個處理器一每個處理器包括多個核一的局域網(wǎng)(LAN)服務(wù)器的情況下,訪問LAN的用戶將能夠參與VM托管的服務(wù)、但是將未察覺下層服務(wù)器。這些概念當(dāng)然本身是熟知的并且僅為了簡潔而不會進(jìn)一步具體加以說明。
[0051]虛擬化的吸引力之一是如先前說明的那樣由于有能力提供在VM之間的故障切換而提高魯棒性。為此,定期地更新VM的拷貝以保證拷貝在原有VM表現(xiàn)出故障、并且將不得不故障切換到拷貝的情況下準(zhǔn)確地代表原有VM的實際狀態(tài),因為優(yōu)選的是VM的一個或者多個而用戶未察覺故障切換。在后文中,原有VM將被稱為主要VM,并且它的拷貝將被稱為輔助VM。
[0052]在主要VM與輔助VM之間的這樣的同步通常需要短暫掛起主要VM以保證它的狀態(tài)在同步期間未改變。應(yīng)當(dāng)保持這樣的掛起的持續(xù)時間最小,以保證短暫掛起未明顯影響VM的一個或者多個用戶。
[0053]為了避免這樣的性能懲罰,普遍做法是創(chuàng)建差別檢查點,在這些檢查點中僅俘獲實體的狀態(tài)改變。如例如出于數(shù)據(jù)庫回滾的目的而在US5,893,155中公開的那樣,可以通過一旦更改高速緩存線中的數(shù)據(jù)就從高速緩存線向輔助存儲器、比如2級高速緩存或者系統(tǒng)存儲器140寫入地址和數(shù)據(jù)來生成這樣的檢查點。在將這樣的檢查點生成用于VM復(fù)制目的時,它具有的缺點是可能在主要VM的操作期間不必要地傳達(dá)了大量數(shù)據(jù);例如,如果在主要VM的操作模式期間多次更新主要VM使用的高速緩存120的高速緩存線120,則向輔助存儲器不必要地寫入高速緩存線中的數(shù)據(jù)的先前版本,因為這一 ‘舊’數(shù)據(jù)已經(jīng)變成多余。
[0054]在圖2中示出高速緩存120的數(shù)據(jù)存儲部分124的示例架構(gòu)。數(shù)據(jù)存儲部分124包括多個高速緩存行1210而每個高速緩存行1210包括標(biāo)簽1212、高速緩存線1214和多個標(biāo)志位,該標(biāo)簽包括數(shù)據(jù)在存儲器140中的地址。標(biāo)志位通常包括有效位1215和臟位1216,該有效位表示高速緩存線1214是否仍然與處理器單元110相關(guān),該臟位表示是否已經(jīng)更改高速緩存線1214,從而它需要向標(biāo)簽1212中存儲的在存儲器140中的地址回寫。
[0055]根據(jù)本發(fā)明的一個實施例,能夠包含臟高速緩存線的高速緩存120的高速緩存行1210還包括VM映像修改位標(biāo)志1217,該標(biāo)志通知執(zhí)行VM的處理器單元110是否修改高速緩存線1214。換而言之,這一標(biāo)志通知修改的高速緩存1214是否形成VM映像的一部分。在操作中,高速緩存控制器122將在處理器單元110在執(zhí)行VM期間對高速緩存線1214的寫入訪問時將臟位標(biāo)志1216和VM映像修改標(biāo)志1217 二者設(shè)置成真。后文將更具體說明這一點的目的。
[0056]回顧圖1,托管主要VM的處理器單元110通常包括可以在管理程序的設(shè)計中包括的和/或可以在硬件中、在軟件中或者在硬件與軟件的組合中實現(xiàn)的復(fù)本管理器。根據(jù)本發(fā)明的一個實施例,復(fù)本管理器適于在系統(tǒng)存儲器140中創(chuàng)建用于記入在執(zhí)行VM期間修改的高速緩存線1214的存儲器地址的日志。優(yōu)選地,日志中的數(shù)據(jù)如后文將更具體說明的那樣僅可由處理器單元的復(fù)本管理器訪問,該處理器單元包括計算機(jī)系統(tǒng)100的其它處理器單元110或者另一計算機(jī)系統(tǒng)100的處理器單元110。
[0057]在一個實施例中,存儲器140中的存儲器地址日志具有定義的大小和分配以避免破壞存儲器140??梢赃x擇這樣的日志的任何適當(dāng)實現(xiàn)方式。在圖3中示出特別適合的實現(xiàn)方式。在這一實施例中,日志在系統(tǒng)存儲器140中被定義為環(huán)形緩沖器200并且具有由處理器單元110的復(fù)本管理器(例如管理程序)定義的大小202。設(shè)計日志202以包括存儲器位置204中的多個存儲器地址。示出部分206以指示日志200中的未使用存儲器位置。
[0058]為了有助于在處理器單元110上執(zhí)行VM期間管理日志200,計算機(jī)系統(tǒng)100包括寄存器集合,這些寄存器包括其中存儲環(huán)形緩沖器200的基地址的第一寄存器212、其中存儲環(huán)形緩沖器的下一可用地址的第二寄存器214、其中存儲環(huán)形緩沖器200的起點的第三寄存器216和其中存儲環(huán)形緩沖器200的大小202的第四寄存器218。寄存器集合優(yōu)選地位于處理器單元110上。備選地,寄存器集合可以形成高速緩存控制器122的一部分。
[0059]在初始化日志200期間,處理器單元110的復(fù)本管理器、例如管理程序?qū)⒂眠m當(dāng)值填充寄存器212、214、216和218,VM在處理器單元110上的執(zhí)行可以在這之后開始或者恢復(fù)。
[0060]根據(jù)本發(fā)明的實施例,已經(jīng)擴(kuò)展高速緩存控制器122的硬件架構(gòu),從而在VM的處理器單元Iio的復(fù)本管理器短暫掛起VM以有助于復(fù)制VM映像時,并且響應(yīng)于來自處理器單元110的信號,該信號請求應(yīng)當(dāng)使修改的高速緩存線1214的標(biāo)簽1212中的存儲器地址可用于復(fù)制VM映像,高速緩存控制器122適于遍歷高速緩存120并且檢查VM映像修改位標(biāo)志1217并且向具有設(shè)置成真的VM映像修改標(biāo)志1217的高速緩存線1214的日志200寫入高速緩存1214的存儲器地址并且一旦已經(jīng)向日志200寫入對應(yīng)存儲器地址就清除VM修改標(biāo)志1217。
[0061]借助圖4更具體說明這一點,該圖示出這樣的更新方法的一個示例實施例的流程圖。在開始該方法之后,復(fù)本管理器在步驟410中在系統(tǒng)存儲器140中創(chuàng)建日志并且如先前說明的那樣在寄存器212、214、216和218中存儲基地址、初始地址(起點)、下一可用地址和日志大小的相關(guān)值。高速緩存控制器122隨后在步驟420中監(jiān)視和處置處理器單元110(或者任何其它處理器單元)對高速緩存120的線存儲器124中的高速緩存線的訪問。
[0062]此外,高速緩存控制器122在步驟420中執(zhí)行多個檢查,已經(jīng)在圖4中標(biāo)識這些檢查分別為步驟420’、420’’和420’’’。在步驟420’中,例如高速緩存控制器檢查高速緩存線訪問是否已經(jīng)引起修改訪問的高速緩存線,在該情況下,高速緩存控制器如本身熟知的那樣設(shè)置標(biāo)志1216從而通知高速緩存為臟。在這樣修改高速緩存線的情況下,該方法從步驟420’前進(jìn)至步驟425,在該步驟中,高速緩存控制器122進(jìn)一步檢查是否已經(jīng)在執(zhí)行VM期間生成這樣的臟高速緩存線。如果是這種情況,則高速緩存控制器122在返回到步驟420之前在步驟430中也設(shè)置修改標(biāo)志1217從而通知高速緩存線為屬于VM映像的臟高速緩存線。
[0063]如果高速緩存訪問未造成修改高速緩存線、但是代之以如在步驟420’’中檢查的那樣引起從高速緩存120逐出高速緩存線,則該方法從步驟420’’前進(jìn)至步驟435,在該步驟中,高速緩存控制器122檢查將從高速緩存120逐出的高速緩存線是否標(biāo)記為被VM修改、即檢查待逐出的高速緩存線的VM映像修改標(biāo)志1217是否被設(shè)置成真。在例如由于處理器單元110請求的新高速緩存線迫使從高速緩存120逐出修改的過時高速緩存線、或者由于更多處理器單元110請求獨占訪問駐留于高速緩存120中的修改的高速緩存線而從高速緩存逐出這樣的修改的高速緩存線的情況下,高速緩存控制器122、例如逐出引擎或者窺探干預(yù)引擎在步驟440中向日志200寫入逐出的高速緩存線的存儲器地址,以保證在日志200中捕獲這一修改,該方法在這之后返回到步驟420。顯然,在替換高速緩存120中的這樣的高速緩存線1214時,清除或者重置它的標(biāo)志1215、1216和1217為適合于新高速緩存線的值。在高速緩存訪問請求并不涉及到逐出高速緩存線的情況下,在步驟420’ ’ ’中還檢查高速緩存訪問請求是否為用于生成VM檢查點的請求。這樣的請求可以源于托管VM的處理器單元110的復(fù)本管理器,或者備選地可以源于另一處理器單元的負(fù)責(zé)在輔助VM映像中執(zhí)行VM期間復(fù)制對主要VM映像的改變的復(fù)本管理器。優(yōu)選地,步驟420’’’定期地、即以規(guī)律間隔出現(xiàn)以保證規(guī)律地更新輔助VM映像??梢赃x擇任何適當(dāng)檢查點生成頻率。
[0064]為了避免疑問,注意僅為了清楚而示出檢查420’、420’’和420’’’為步驟序列。應(yīng)當(dāng)理解高速緩存控制器122無需執(zhí)行這些檢查中的每個檢查以判決應(yīng)當(dāng)接著采取什么動作執(zhí)行。例如同樣可行的是高速緩存控制器122可以立即認(rèn)識需要高速緩存線逐出或者VM映像復(fù)制,在該情況下,高速緩存控制器122可以從步驟420分別繼續(xù)步驟435或者步驟460。
[0065]在步驟420’,,中檢測到檢查點生成指令時,高速緩存控制器122遍歷高速緩存120并且在步驟460中檢查包括VM映像修改標(biāo)志1217的所有高速緩存行1210的這樣的標(biāo)志。在檢測到設(shè)置成真的VM映像修改標(biāo)志1217時,高速緩存控制器從標(biāo)簽1212取回關(guān)聯(lián)高速緩存線1214的存儲器地址并且在步驟470中向日志200中寫入取回的存儲器地址。為此,高速緩存控制器122從寄存器214取回日志200中的下一可用地址的指針、例如從處理器單元110的復(fù)本管理器取回這一指針或者請求這一指針。
[0066]在這一點,寄存器214中的指針將需要更新以保證未改寫存儲器地址。指針優(yōu)選地由高速緩存控制器122或者備選地由處理器單元110的復(fù)本管理器、例如管理程序更新,但是后一種實現(xiàn)方式可能在頻繁逐出高速緩存線的情況——這是在利用高速緩存的多數(shù)操作場景中的情況——下負(fù)面地影響管理程序的性能。在實施例中,這一更新步驟包括通過用存儲的存儲器地址的大小偏移寄存器214中當(dāng)前存儲的指針并且在寄存器214中寫入這一偏移值來前移指針。
[0067]另外有必要檢查將在寄存器214中存儲的在日志200中的下一可用地址是否應(yīng)當(dāng)被卷繞到基地址。在實施例中,高速緩存控制器122或者處理器單元110的復(fù)本管理器將檢查下一可用地址是否等于基地址+日志200的大小,因為這指示是否已經(jīng)到達(dá)系統(tǒng)存儲器140中的日志200的地址范圍的邊界,并且如果是這種情況則將設(shè)置、即卷繞下一可用地址到基地址。
[0068]在完成步驟470之后,高速緩存控制器122隨后在步驟480中將VM映像修改標(biāo)志重置為假。可以在任何適當(dāng)時間點、例如在向日志200的每個寫入動作之后或者在已經(jīng)完成向日志200的所有寫入動作之后執(zhí)行步驟480。
[0069]在這一點重申任何適當(dāng)高速緩存架構(gòu)可以用于高速緩存120。本身已知這樣的架構(gòu)可以包括不同類型的高速緩存、比如直通寫入高速緩存和一個或者多個回寫高速緩存。直通寫入高速緩存在高速緩存中保持?jǐn)?shù)據(jù)并且同時、即同步地向高速緩存的下一級中推送數(shù)據(jù)。這為處理器單元Iio后續(xù)讀取高速緩存線1214提供快速訪問事件而代價為更慢寫入動作,因為寫入器必須等待確認(rèn)已經(jīng)在(更慢)下一級高速緩存中完成寫入動作。按照定義,直通寫入高速緩存未包含臟高速緩存線,因為在下一級高速緩存之一中‘清理’高速緩存線。因此,在本發(fā)明的實施例包括高速緩存架構(gòu),該高速緩存架構(gòu)包括直通寫入高速緩存時,VM映像修改標(biāo)志1217可以從直通寫入高速緩存被省略并且可以僅被添加到可以包含臟高速緩存線的那些高速緩存、例如未向下一級高速緩存推送修改的高速緩存線、但是因而負(fù)責(zé)管理在高速緩存與存儲器140之間的數(shù)據(jù)相干性的回寫高速緩存。步驟460通常應(yīng)用于高速緩存架構(gòu)中的具有高速緩存行1210的所有高速緩存,這些高速緩存行包含VM映像修改標(biāo)志1217、例如所有回寫高速緩存。
[0070]在這一點,復(fù)本管理器可以觸發(fā)如先前說明的那樣通過訪問日志200、取讀日志200中存儲的地址、取讀在取讀的地址存儲的高速緩存線并且用取讀的高速緩存線更新存儲器140中的VM映像的在另一存儲器位置、例如另一存儲器或者高速緩存中的拷貝來向另一存儲器位置復(fù)制VM映像。
[0071]應(yīng)當(dāng)理解,觸發(fā)刷新高速緩存線地址和隨后更新VM的輔助映像的復(fù)本管理器無需是運(yùn)行VM的處理器單元110的復(fù)本管理器。在一個實施例中,計算機(jī)系統(tǒng)100的另一處理器單元110的復(fù)本管理器可以負(fù)責(zé)這一更新過程。
[0072]一般而言,其中負(fù)責(zé)VM映像更新過程的處理器單元在與運(yùn)行VM的處理器單元110相同的計算機(jī)系統(tǒng)100上駐留的實施例可以視為其中向另一存儲器位置推送修改的高速緩存線的實施例。在一個備選實施例中,修改的高速緩存線可以是由單獨計算機(jī)系統(tǒng)上的處理器單元、比如負(fù)責(zé)托管VM的輔助版本的處理器單元、即VM例如在托管主要VM的處理器單元的硬件故障的情況下故障切換到的處理器單元從它們的主要存儲器位置拉取的。在這一實施例中(以及在托管VM的計算機(jī)系統(tǒng)的不同處理器單元負(fù)責(zé)VM映像復(fù)制過程的實施例中),托管VM的處理器單元110如后文將更具體說明的那樣向另一處理器單元、例如不同計算機(jī)系統(tǒng)200中的另一處理器單元的復(fù)本管理器轉(zhuǎn)發(fā)與復(fù)制它的在存儲器140中的VM映像相關(guān)的數(shù)據(jù)——包括寄存器212、214、1216和218中存儲的值——以允許這另一個復(fù)本管理器使用日志200中的地址來取回更改的高速緩存線。
[0073]在一個實施例中,復(fù)本管理器、例如管理程序還適于在之向日志200寫入高速緩存地址之前前檢查寄存器214中的下一可用地址是否等于寄存器216中存儲的地址。如果寄存器214和216中的指針相同,則這通知日志200為滿并且不能向日志200寫入更多地址,因為這將使日志200中的地址中的一些地址被改寫、因此引起主要或者原有VM映像向它的拷貝(輔助VM映像)不完全復(fù)制。
[0074]如果以這一方式檢測到滿日志200,則復(fù)本管理器通過發(fā)起主要VM向在另一計算機(jī)系統(tǒng)上托管的輔助VM的立即故障切換或者通過發(fā)起完全重新同步與主要VM和輔助VM關(guān)聯(lián)的所有存儲器來防止這樣的復(fù)制錯誤。將理解這樣的緊急措施出于性能原因而一般是不希望的,從而重要的是復(fù)本管理器創(chuàng)建大到足以在創(chuàng)建兩個檢查點之間的間隔期間存儲所有逐出的存儲器地址。
[0075]在步驟470中在日志200中寫入修改的高速緩存線1214的存儲器地址時,該方法還可以包括以下可選步驟:去重復(fù)日志200中的地址以去除日志200中的相同地址的多個實例。這例如可以在向日志200寫入存儲器地址的頻率高于日志200中的存儲器地址用來更新輔助VM映像的頻率時出現(xiàn)。
[0076]在這一點,注意已經(jīng)假設(shè)主要VM由單個處理器單元110托管來描述圖4。強(qiáng)調(diào)的是這僅為非限制示例。例如同樣可行的是VM由若干處理器單元110、例如若干微處理器芯托管,在該情況下可以維護(hù)若干日志200 (—個日志用于每個相應(yīng)芯),這些日志跟蹤對存儲器140中的VM映像的不同修改。在這樣的場景中,可以例如對所有日志200執(zhí)行可選去重復(fù),從而存儲器地址在組合的日志200中僅出現(xiàn)一次以減少需要在差別檢查點生成期間向輔助VM復(fù)制的數(shù)據(jù)量。
[0077]如本領(lǐng)域技術(shù)人員將理解的那樣,檢查點生成還可能需要在主要與輔助VM之間同步其它相關(guān)狀態(tài)、例如CPU、涉及到盤和網(wǎng)絡(luò)的I/O等的狀態(tài)。由于這樣的同步本身為已知,所以僅為了簡潔而尚未進(jìn)一步具體描述這一點。
[0078]圖4描繪處理器單兀110的可以稱為生產(chǎn)者模式的第一操作模式的一個不例實施例,在該生產(chǎn)者模式中,處理器單元110生產(chǎn)為了將VM的在存儲器140中的映像向這一映像的例如在另一計算機(jī)系統(tǒng)的存儲器中的拷貝復(fù)制而需要的相關(guān)數(shù)據(jù)。如先前提到的那樣,處理器單元110也可以在第二操作模式中操作,在該第二操作模式中,它未托管VMJS是代之以負(fù)責(zé)復(fù)制主要VM的映像。這一第二操作模式可以稱為消費者模式,因為處理器單元110在這一模式中適于消費執(zhí)行VM的處理器單元110在它的第一操作模式或者生產(chǎn)者模式中產(chǎn)生的VM映像中的修改的高速緩存線。
[0079]例如包括托管VM的處理器單元110的計算機(jī)系統(tǒng)100的更多處理器單元110可以負(fù)責(zé)更新VM映像的在更多位置、例如另一計算機(jī)系統(tǒng)的存儲器中的復(fù)制。備選地,托管VM的處理器單元110可以在操作模式之間切換以承擔(dān)用于更新這一復(fù)制的職責(zé)。在又一實施例中,另一計算機(jī)系統(tǒng),例如在其上存儲該復(fù)制的計算機(jī)系統(tǒng)的處理器單元負(fù)責(zé)更新VM映像的這一復(fù)制。
[0080]VM映像復(fù)制的更新保證在它的存儲器中存儲該復(fù)制的計算機(jī)系統(tǒng)100的處理器單元110可以在托管主要VM的計算機(jī)系統(tǒng)100中的硬件故障時接管執(zhí)行VM從而造成終止在這一系統(tǒng)上執(zhí)行主要VM。
[0081]在一個備選實施例中,第二操作模式不是單獨操作模式、而是形成第一操作模式的部分,在該情況下,負(fù)責(zé)執(zhí)行主要VM的處理器單元110也負(fù)責(zé)更新VM的在更多存儲器位置中的復(fù)制。
[0082]應(yīng)當(dāng)理解在包括多個計算機(jī)系統(tǒng)100的計算機(jī)集群中,一些處理器單元110可以在生產(chǎn)者模式(即VM托管模式)中,而其它處理器單元110在消費者模式中(即在VM映像復(fù)制模式中)。在這樣的集群中的甚至單個計算機(jī)系統(tǒng)可以如先前說明的那樣包括在生產(chǎn)者模式中以及在消費者模式中的處理器單元110。在一個實施例中,復(fù)本管理器、例如管理程序可以例如通過設(shè)置用于處理器單元110的硬件標(biāo)志使得可以識別處理器單元在哪個模式中操作來控制處理器單元110是否在生產(chǎn)者模式或者消費者模式中。
[0083]圖5描繪在處理器單元110的第二操作模式期間執(zhí)行的方法步驟的流程圖。在消費者模式中,處理器單元110、例如處理器單元110的復(fù)本管理器從在生產(chǎn)者模式中的處理器單元Iio的復(fù)本管理器接收相關(guān)信息、比如寄存器212、214、216和218的內(nèi)容,這些內(nèi)容將允許消費者處理器單元110的復(fù)本管理器訪問包括生產(chǎn)者處理器單元110的計算機(jī)系統(tǒng)100的存儲器140。生產(chǎn)者處理器單元110的復(fù)本管理器可以自愿提供相關(guān)信息或者可以在消費者處理器單元110的復(fù)本管理器請求相關(guān)信息時提供它。顯然在其中托管VM的處理器單元110也充當(dāng)負(fù)責(zé)更新輔助VM映像的處理器單元的一個實施例中,可以省略以上步驟。
[0084]一旦接收到相關(guān)信息,消費者處理器單元110在步驟510中取回托管主要VM的生產(chǎn)者處理器單元Iio的復(fù)本管理器創(chuàng)建的日志200中存儲的存儲器地址并且在步驟520中獲得存儲器地址標(biāo)識的修改的高速緩存線。為此,消費者處理器單元可以通過總線架構(gòu)130發(fā)送數(shù)據(jù)取回請求。這樣的請求由計算機(jī)系統(tǒng)100的高速緩存控制器122、例如由高速緩存控制器122的窺探干預(yù)引擎告知,如果數(shù)據(jù)取回請求中的存儲器地址與高速緩存120的高速緩存行1210的標(biāo)簽1212之一中的存儲器地址匹配,則這些高速緩存控制器將從高速緩存120取讀高速緩存線1214。請求處理器單元110將通常為來自更多處理器單元110的高速緩存控制器122的響應(yīng)等待定義的時間段,請求處理器單元110的高速緩存控制器122將在這之后從存儲器140取讀高速緩存線,因為無來自另一處理器高速緩存控制器122的響應(yīng)將意味著高速緩存線1214不再駐留于高速緩存中、而是已經(jīng)代之以從高速緩存120被逐出。在包括多個處理器單元110和高速緩存120的計算機(jī)系統(tǒng)100中處置這樣的數(shù)據(jù)取回請求當(dāng)然本身為公知,并且應(yīng)當(dāng)理解可以應(yīng)用任何適當(dāng)數(shù)據(jù)取回協(xié)議而未脫離本發(fā)明的教導(dǎo)。
[0085]消費者處理器單元110隨后在步驟530中通過在VM映像拷貝的適當(dāng)位置中插入獲得的修改的高速緩存線1214來相應(yīng)地更新VM映像的拷貝。重復(fù)這一過程直至已經(jīng)如在步驟540中檢查的那樣從日志200取回所有地址,在這之后可以如在步驟550中所示復(fù)制其它狀態(tài)寄存器(如果有)、例如CPU的如先前說明的狀態(tài)寄存器。
[0086]在這一點,消費者處理器單元110可以向托管主要VM的生產(chǎn)者處理器單元110通知復(fù)制完成,托管主要VM的生產(chǎn)者處理器單元110、例如它的管理程序這時將終止主要VM的掛起并且重新初始化日志200、例如在高速緩存管理模塊122中重置寄存器212、214和216中的一個或者多個寄存器。
[0087]本領(lǐng)域技術(shù)人員應(yīng)當(dāng)立即清楚可以有可能對圖5中所示方法有各種修改而未脫離本發(fā)明的教導(dǎo)。例如消費者處理器單元Iio可以具有權(quán)限以在步驟510中從日志200取回存取地址之前對托管主要VM的生產(chǎn)者處理器單元110的日志200中的地址進(jìn)行去重復(fù)。
[0088]在另一實施例中,在第二操作模式、即消費者模式中的處理器單元110適于推測性地處理在第一操作模式(即生產(chǎn)者模式)中的處理器單元110的日志200。這一實施例例如在消費者處理器單元例如在托管VM的生產(chǎn)者處理器單元定期地觸發(fā)更新日志200的情況下未觸發(fā)生產(chǎn)者處理器單元的高速緩存控制器122以向日志200寫入修改的高速緩存線地址時有用。這具有如下優(yōu)點:可以進(jìn)一步減少主要VM的掛起持續(xù)時間,因為在生產(chǎn)者處理器單元Iio在步驟420’’’中按照用于生成檢查點的請求掛起VM時日志200的部分將已經(jīng)被消費者處理器單元110處理。
[0089]在圖6中示出這一實施例的示例流程圖。在圖6中,若干步驟與圖5的方法相同,因此為了簡潔而不會再次說明這些步驟。在圖6的步驟510、520和530中,消費者處理器單元110如先前說明的那樣從托管主要VM的處理器單元110的日志200取回存儲器地址、從生產(chǎn)者處理器單元110的計算機(jī)系統(tǒng)100中的存儲器140取回數(shù)據(jù)并且更新輔助VM映像。
[0090]在附加步驟610中,消費者處理器單元110調(diào)用對如在與托管主要VM的生產(chǎn)者處理器單元Iio關(guān)聯(lián)的寄存器216中存儲的日志200的初始地址值的更新。這可以用任何適當(dāng)方式來實現(xiàn)、例如通過向消費者處理器單元110的復(fù)本管理器提供用于更新這一寄存器的寫入權(quán)限或者通過處理器單元110通知生產(chǎn)者處理器單元110的復(fù)本管理器、例如管理程序相應(yīng)地更新這一寄存器值。
[0091]步驟610保證保持托管主要VM的處理器單元110的日志200中的可用空間最新,因為可以如在與托管主要VM的生產(chǎn)者處理器單元110關(guān)聯(lián)的寄存器216中存儲的初始地址改變成消費者處理器單元110尚未處理的日志200中的第一地址而指示的那樣改寫消費者處理器單元110已經(jīng)取回的地址。這因此減少日志200過早變滿的風(fēng)險,因為消費者處理器單元110對日志200的推測性處理有效增加日志200的容量。在主要VM如在步驟620中檢查的那樣變成掛起,并且已經(jīng)從日志200取回所有地址時,該方法可以繼續(xù)如在圖5的具體描述中先前說明的步驟550。
[0092]在一個備選實施例(未示出)中,一旦主要VM變成掛起,可以從圖6省略步驟610,因為不再有必要更新如在托管主要VM的生產(chǎn)者處理器單元110關(guān)聯(lián)的寄存器216中存儲的日志200的初始地址值,因為不會向日志200寫入更多地址并且將在重新激活主要VM之前重新初始化日志200。
[0093]圖7示意地描繪根據(jù)本發(fā)明的一個示例實施例的計算機(jī)集群700。計算機(jī)集群700包括經(jīng)由網(wǎng)絡(luò)720相互通信地耦合的多個根據(jù)本發(fā)明的一個或者多個實施例的計算機(jī)系統(tǒng)100。網(wǎng)絡(luò)720可以是任何適當(dāng)數(shù)據(jù)通信網(wǎng)絡(luò)、例如有線或者無線局域網(wǎng)、無線或者有線廣域網(wǎng)、因特網(wǎng)等。計算機(jī)集群700通常適于托管將由計算機(jī)集群700的用戶利用的各種計算機(jī)系統(tǒng)100的處理器單元110上的多個虛擬機(jī)。計算機(jī)集群700受益于本發(fā)明的VM復(fù)制原理在于可以在各種計算機(jī)系統(tǒng)100中的至少一些計算機(jī)系統(tǒng)的相應(yīng)存儲器140中生成VM的多個最新或者鏡像映像,從而可以利用很少的開銷而提供迅速VM故障切換。
[0094]應(yīng)當(dāng)理解在本發(fā)明的上下文中,將解釋計算機(jī)系統(tǒng)為包括可以協(xié)調(diào)利用的處理器單元匯集的設(shè)備。這未必等于單個物理實體;同樣可行的是計算機(jī)系統(tǒng)分布于若干物理實體、例如不同盒內(nèi)或者單個物理實體包括多于一個計算機(jī)系統(tǒng)、例如處理器單元的若干分離組。
[0095]所屬【技術(shù)領(lǐng)域】的技術(shù)人員知道,本發(fā)明的各個方面可以實現(xiàn)為系統(tǒng)、方法或計算機(jī)程序產(chǎn)品。因此,本發(fā)明的各個方面可以具體實現(xiàn)為以下形式,即:完全的硬件實施方式、完全的軟件實施方式(包括固件、駐留軟件、微代碼等),或硬件和軟件方面結(jié)合的實施方式,這里可以統(tǒng)稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實施例中,本發(fā)明的各個方面還可以實現(xiàn)為在一個或多個計算機(jī)可讀介質(zhì)中的計算機(jī)程序產(chǎn)品的形式,該計算機(jī)可讀介質(zhì)中包含計算機(jī)可讀的程序代碼。
[0096]可以采用一個或多個計算機(jī)可讀介質(zhì)的任意組合。計算機(jī)可讀介質(zhì)可以是計算機(jī)可讀信號介質(zhì)或者計算機(jī)可讀存儲介質(zhì)。計算機(jī)可讀存儲介質(zhì)例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機(jī)可讀存儲介質(zhì)的更具體的例子(非窮舉的列表)包括:具有一個或多個導(dǎo)線的電連接、便攜式計算機(jī)盤、硬盤、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計算機(jī)可讀存儲介質(zhì)可以是任何包含或存儲程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。
[0097]計算機(jī)可讀的信號介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了計算機(jī)可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括——但不限于——電磁信號、光信號或上述的任意合適的組合。計算機(jī)可讀的信號介質(zhì)還可以是計算機(jī)可讀存儲介質(zhì)以外的任何計算機(jī)可讀介質(zhì),該計算機(jī)可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。
[0098]計算機(jī)可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括一但不限于一無線、有線、光纜、RF等等,或者上述的任意合適的組合。
[0099]可以以一種或多種程序設(shè)計語言的任意組合來編寫用于執(zhí)行本發(fā)明操作的計算機(jī)程序代碼,所述程序設(shè)計語言包括面向?qū)ο蟮某绦蛟O(shè)計語言一諸如Java、Smalltalk、C++等,還包括常規(guī)的過程式程序設(shè)計語言一諸如“C”語言或類似的程序設(shè)計語言。程序代碼可以完全地在用戶計算機(jī)上執(zhí)行、部分地在用戶計算機(jī)上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機(jī)上部分在遠(yuǎn)程計算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計算機(jī)的情形中,遠(yuǎn)程計算機(jī)可以通過任意種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計算機(jī),或者,可以連接到外部計算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。
[0100]下面將參照根據(jù)本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機(jī)程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。應(yīng)當(dāng)理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機(jī)程序指令實現(xiàn)。這些計算機(jī)程序指令可以提供給通用計算機(jī)、專用計算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,使得這些計算機(jī)程序指令在通過計算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時,產(chǎn)生了實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的裝置。
[0101]也可以把這些計算機(jī)程序指令存儲在計算機(jī)可讀介質(zhì)中,這些指令使得計算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其他設(shè)備以特定方式工作,從而,存儲在計算機(jī)可讀介質(zhì)中的指令就產(chǎn)生出包括實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的指令的制造品(article of manufacture)0
[0102]也可以把計算機(jī)程序指令加載到計算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計算機(jī)實現(xiàn)的過程,從而使得在計算機(jī)或其它可編程裝置上執(zhí)行的指令提供實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的過程。
[0103]附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實施例的系統(tǒng)、方法和計算機(jī)程序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機(jī)指令的組合來實現(xiàn)。
[0104]盡管這里已經(jīng)出于示例的目的而描述本發(fā)明的具體實施例,但是許多修改和改變將變得為本領(lǐng)域技術(shù)人員所清楚。因而,所附權(quán)利要求旨在于覆蓋如落入本發(fā)明的真實精神實質(zhì)和范圍內(nèi)的所有這樣的修改和改變。
【權(quán)利要求】
1.一種計算機(jī)系統(tǒng),包括: 處理器單元,適于在第一操作模式中運(yùn)行虛擬機(jī); 高速緩存,能由所述處理器單元訪問,所述高速緩存包括多個高速緩存行,每個高速緩存行包括高速緩存線和映像修改標(biāo)志,所述映像修改標(biāo)志指示由所述虛擬機(jī)的所述運(yùn)行引起的所述高速緩存線的修改;以及 存儲器,能由所述高速緩存控制器訪問,用于存儲所述虛擬機(jī)的映像;其中: 所述處理器單元包括:復(fù)本管理器,適于在所述第一操作模式中運(yùn)行所述虛擬機(jī)之前在所述存儲器中定義日志;并且 所述高速緩存還包括:高速緩存控制器,適于: 定期地檢查所述映像修改標(biāo)志;以及 在所述定義的日志中僅寫入有標(biāo)志的高速緩存線的存儲器地址。
2.根據(jù)權(quán)利要求1所述的計算機(jī)系統(tǒng),其中所述高速緩存控制器還適于一旦從所述高速緩存逐出有標(biāo)志的高速緩存線,在所述定義的日志中寫入所述有標(biāo)志的線的所述存儲器地址。
3.根據(jù)權(quán)利要求1所述的計算機(jī)系統(tǒng),還包括:處理器單元,適于通過以下操作更新所述虛擬機(jī)的在不同存儲器位置中的另一映像: 從所述日志取回所述存儲器地址; 使用所述取回的存儲器地址來獲得修改的高速緩存線; 用所述修改的高速緩存線來更新所述另一映像`;以及 清除所述映像修改標(biāo)志。
4.根據(jù)權(quán)利要求3所述的計算機(jī)系統(tǒng),其中適于運(yùn)行所述虛擬機(jī)的所述處理器單元和適于更新所述虛擬機(jī)的所述另一映像的所述處理器單元是相同處理器單元,其中所述處理器單元適于在第二操作模式中更新所述另一映像。
5.根據(jù)權(quán)利要求4所述的計算機(jī)系統(tǒng),其中所述復(fù)本管理器適于在所述第一操作模式與所述第二操作模式之間切換所述處理器單元。
6.根據(jù)權(quán)利要求3所述的計算機(jī)系統(tǒng),其中適于運(yùn)行所述虛擬機(jī)的所述處理器單元和適于更新所述虛擬機(jī)的所述另一映像的所述處理器單元是不同的處理器單元。
7.根據(jù)權(quán)利要求1所述的計算機(jī)系統(tǒng),其中所述高速緩存包括回寫高速緩存。
8.根據(jù)權(quán)利要求7所述的計算機(jī)系統(tǒng),還包括多級高速緩存,所述多級高速緩存包括所述回寫高速緩存和適于向所述回寫高速緩存中寫入高速緩存線的直通寫入高速緩存,其中僅所述回寫高速緩存的所述高速緩存行包括所述標(biāo)志。
9.根據(jù)權(quán)利要求1所述的計算機(jī)系統(tǒng),其中: -所述日志是環(huán)形緩沖器; -所述系統(tǒng)包括適于存儲以下各項的多個寄存器: 第一指針,指向所述環(huán)形緩沖器的卷繞地址; 第二指針,指向所述環(huán)形緩沖器的下一可用地址; 第三指針,指向所述環(huán)形緩沖器的初始地址;以及 所述環(huán)形緩沖器的大??;并且 -所述高速緩存控制器適于在所述日志中寫入存儲器地址之后更新或觸發(fā)更新至少所述第二指針。
10.根據(jù)權(quán)利要求1所述的計算機(jī)系統(tǒng),其中每個處理器單元被配置用于在從所述日志取回所述存儲器地址之前對所述日志中的所述存儲器地址進(jìn)行去重復(fù)。
11.一種計算機(jī)集群,包括多個根據(jù)權(quán)利要求1所述的計算機(jī)系統(tǒng)和互連所述多個計算機(jī)系統(tǒng)的網(wǎng)絡(luò)。
12.—種操作包括第一計算機(jī)系統(tǒng)的計算機(jī)集群的方法,所述第一計算機(jī)系統(tǒng)包括:包括虛擬機(jī)的映像的存儲器、適于在第一操作模式中運(yùn)行所述虛擬機(jī)的至少一個處理器單元和能夠由所述至少一個處理器單元訪問的高速緩存,所述高速緩存包括多個高速緩存行,每個高速緩存行包括高速緩存線和映像修改標(biāo)志,所述映像修改標(biāo)志指示由所述虛擬機(jī)的所述運(yùn)行引起的所述高速緩存線的修改, 其中在所述第一操作模式中,所述第一計算機(jī)系統(tǒng)的處理器單元執(zhí)行以下步驟: 在所述第一計算機(jī)系統(tǒng)的所述存儲器中定義日志; 使用所述映像來運(yùn)行所述虛擬機(jī); 一旦在所述運(yùn)行步驟期間修改所述高速緩存的高速緩存線,通過設(shè)置包括所述修改的高速緩存線的所述高速緩存行的所述映像修改標(biāo)志來用信號通知所述修改;以及定期地檢查所述映像修改標(biāo)志;并且所述第一計算機(jī)系統(tǒng)的所述處理器單元還執(zhí)行以下步驟: 向所述定義的日志僅寫入有標(biāo)志的修改的高速緩存線的存儲器地址;以及 在所述寫入步驟之后清除所述映像修改標(biāo)志。
13.根據(jù)權(quán)利要求12所述的方法,其中所述第一計算機(jī)系統(tǒng)的所述處理器單元還執(zhí)行以下步驟:一旦從所述高速緩存逐出有標(biāo)志的高速緩存線,在所述定義的日志中寫入所述有標(biāo)志的線的所 述存儲器地址。
14.根據(jù)權(quán)利要求12所述的方法,還包括通過以下操作更新所述虛擬機(jī)的另一映像的步驟: 從所述存儲器中的所述日志定期地讀取所述存儲器地址; 使用所述存儲器地址來獲得所述修改的高速緩存線;以及 用獲得的所述高速緩存線來更新所述另一映像。
15.根據(jù)權(quán)利要求14所述的方法,其中所述更新所述虛擬機(jī)處理器單元的另一映像的步驟由所述第一計算機(jī)系統(tǒng)的另一處理器單元或者所述計算機(jī)集群的不同計算機(jī)系統(tǒng)的處理器單元執(zhí)行。
16.根據(jù)權(quán)利要求15所述的方法,其中至少部分地并發(fā)執(zhí)行所述運(yùn)行所述虛擬機(jī)和更新所述虛擬機(jī)的所述另一映像的步驟。
17.根據(jù)權(quán)利要求14所述的方法,其中所述更新所述虛擬機(jī)處理器單元的另一映像的步驟由運(yùn)行所述虛擬機(jī)的所述第一計算機(jī)系統(tǒng)的所述處理器單元執(zhí)行。
18.根據(jù)權(quán)利要求12所述的方法,其中所述計算機(jī)集群還包括第二計算機(jī)系統(tǒng),所述第二計算機(jī)系統(tǒng)包括:包括所述另一映像的另一存儲器、至少一個另一處理器單元和能夠由所述至少一個另一處理器單元訪問的另一高速緩存,其中每個另一處理器單元適于使用所述另一映像在第一操作模式中運(yùn)行所述虛擬機(jī)。
19.根據(jù)權(quán)利要求12所述的方法,還包括在所述定期地讀取步驟之前對所述日志中的所述存儲器地址進(jìn)行去重復(fù)的步驟。
20.根據(jù)權(quán)利要求19所述的方法,其中所述第一計算機(jī)系統(tǒng)包括多個處理器單元,并且其中所述使用所述映像來運(yùn)行所述虛擬機(jī)的步驟包括在所述多個處理器單元上運(yùn)行所述虛擬機(jī),每個處理器單元在獨立的日志中定期地僅寫入所述存儲器地址,并且其中所述去重復(fù)步驟包括對組合的獨`立的日志中的所述存儲器地址進(jìn)行去重復(fù)。
【文檔編號】G06F12/10GK103870358SQ201310589754
【公開日】2014年6月18日 申請日期:2013年11月20日 優(yōu)先權(quán)日:2012年12月11日
【發(fā)明者】S·格海, G·L·格思里, G·諾思, W·J·斯塔克, P·G·威廉斯 申請人:國際商業(yè)機(jī)器公司