本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種基于檢查點(diǎn)的面向計(jì)算機(jī)(特別是超級(jí)計(jì)算機(jī))的容錯(cuò)方法。
背景技術(shù):
隨著信息技術(shù)的發(fā)展,超級(jí)計(jì)算機(jī)的節(jié)點(diǎn)和處理器數(shù)目在持續(xù)增加,性能也在呈倍增加,然而,據(jù)統(tǒng)計(jì),整個(gè)超級(jí)計(jì)算機(jī)系統(tǒng)的平均故障間隔時(shí)間(mtbf,meantimebetweenfailure)卻減少到了只有幾個(gè)小時(shí)。例如,中國(guó)的天河2號(hào)超級(jí)計(jì)算機(jī)由16000個(gè)節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)有2顆基于ivybridge-exeone52692處理器和3個(gè)xeonphi協(xié)同處理器,累計(jì)共有32000顆ivybridge處理器和48000個(gè)xeonphi協(xié)同處理器,總計(jì)有312萬(wàn)個(gè)計(jì)算核心。假如天河2號(hào)超級(jí)計(jì)算機(jī)中的每個(gè)處理器的mtbf是876000小時(shí)(100年),那么整個(gè)天河二號(hào)的mtbf是876000/(48000+32000)=8.76個(gè)小時(shí)。而且,內(nèi)存容量的增加也會(huì)導(dǎo)致系統(tǒng)出錯(cuò)概率升高,超大規(guī)模計(jì)算機(jī)系統(tǒng)每1到3個(gè)小時(shí)就會(huì)出現(xiàn)軟件或者硬件錯(cuò)誤。在未來(lái)的10年間,cpu和內(nèi)存的短暫性錯(cuò)誤會(huì)增加30倍,因此,對(duì)于超大規(guī)模計(jì)算機(jī)系統(tǒng),保證其可靠性越發(fā)重要。
目前,基于檢查點(diǎn)的容錯(cuò)技術(shù)是保證大規(guī)模計(jì)算機(jī)系統(tǒng)可靠性的主要技術(shù),該技術(shù)將正在運(yùn)行的進(jìn)程的狀態(tài)數(shù)據(jù)保存到永久存儲(chǔ)中,然后在必要的時(shí)候使用保存的狀態(tài)數(shù)據(jù)將當(dāng)前的進(jìn)程狀態(tài)卷回到執(zhí)行檢查點(diǎn)的時(shí)刻,被保存的進(jìn)程狀態(tài)數(shù)據(jù)稱為檢查點(diǎn)文件。檢查點(diǎn)技術(shù)的開(kāi)支主要包括保證所有進(jìn)程處于檢查點(diǎn)全局一致?tīng)顟B(tài)的時(shí)間、將龐大的檢查點(diǎn)文件保存到永久存儲(chǔ)中的時(shí)間和檢查點(diǎn)的設(shè)置頻率等。檢查點(diǎn)文件越大,檢查點(diǎn)設(shè)置頻率越高,檢查點(diǎn)技術(shù)的開(kāi)支就越大。大規(guī)模計(jì)算機(jī)系統(tǒng)會(huì)由于周期性地執(zhí)行檢查點(diǎn)導(dǎo)致性能下降超過(guò)50%并且額外增加80%的i/o訪問(wèn)。例如,將由128000個(gè)處理器組成的bluegene/l超級(jí)計(jì)算機(jī)中所有ram的數(shù)據(jù)(1.6pb)保存到并行文件系統(tǒng)需要大約20分鐘的時(shí)間。隨著計(jì)算機(jī)系統(tǒng)的規(guī)模增加,使用的部件增多,整個(gè)系統(tǒng)的mtbf會(huì)急劇降低,系統(tǒng)需要更頻繁地執(zhí)行檢查點(diǎn)。檢查點(diǎn)的時(shí)間開(kāi)支將會(huì)主導(dǎo)用戶程序的執(zhí)行時(shí)間,導(dǎo)致計(jì)算機(jī)系統(tǒng)的性能進(jìn)一步下降。
此外,在當(dāng)前的大規(guī)模計(jì)算機(jī)系統(tǒng)中,在執(zhí)行檢查點(diǎn)時(shí),由于完整的檢查點(diǎn)文件能達(dá)到pb級(jí)別的大小,這些檢查點(diǎn)文件通常被寫到永久存儲(chǔ)中,例如,本地磁盤或者raid5設(shè)備等,甚至通過(guò)網(wǎng)絡(luò)發(fā)送到遠(yuǎn)程存儲(chǔ)設(shè)備上,會(huì)造成大量集中的i/o訪問(wèn)或者網(wǎng)絡(luò)傳輸。而且,在執(zhí)行檢查點(diǎn)過(guò)程中,大部分計(jì)算資源處于空閑狀態(tài)。由于檢查點(diǎn)文件特別大,存儲(chǔ)i/o帶寬或者網(wǎng)絡(luò)傳輸帶寬遠(yuǎn)遠(yuǎn)小于系統(tǒng)內(nèi)存大小,整個(gè)系統(tǒng)的性能就會(huì)極大下降。并且,當(dāng)節(jié)點(diǎn)出錯(cuò)的情況下,使用檢查點(diǎn)文件卷回或恢復(fù)到出錯(cuò)前的狀態(tài)的時(shí),需要從并行文件系統(tǒng)讀取整個(gè)檢查點(diǎn)文件到內(nèi)存中,同樣會(huì)發(fā)生大量集中的i/o訪問(wèn)或者網(wǎng)絡(luò)傳輸,同樣也會(huì)造成超級(jí)計(jì)算機(jī)的性能下降。因此,隨著超大規(guī)模計(jì)算機(jī)系統(tǒng)的發(fā)展,檢查點(diǎn)技術(shù)的性能成為非常嚴(yán)峻的問(wèn)題。
現(xiàn)有技術(shù)的檢查點(diǎn)方法通常是基于操作系統(tǒng)提供的頁(yè)保護(hù)機(jī)制。該方法以頁(yè)大小作為進(jìn)程狀態(tài)數(shù)據(jù)的分塊大小,這種方式會(huì)導(dǎo)致檢查點(diǎn)判斷進(jìn)程狀態(tài)數(shù)據(jù)修改內(nèi)容的粒度較大,并且基于頁(yè)保護(hù)機(jī)制的檢查點(diǎn)需要操作系統(tǒng)和硬件支持,該檢查點(diǎn)方法使用操作系統(tǒng)的寫時(shí)拷貝技術(shù)也會(huì)導(dǎo)致父子進(jìn)程搶奪計(jì)算資源和內(nèi)存資源。該方法沒(méi)有利用執(zhí)行檢查點(diǎn)過(guò)程中的空閑計(jì)算資源,并且也沒(méi)有能有效利用并行文件系統(tǒng)的i/o帶寬,不能滿足在出錯(cuò)情況下快速卷回和降低卷回的并行文件系統(tǒng)的i/o帶寬要求。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的缺陷,提供一種基于檢查點(diǎn)的計(jì)算機(jī)的容錯(cuò)方法,以縮短檢查點(diǎn)文件保存和卷回的時(shí)間。
根據(jù)本發(fā)明的第一方面,提供了一種基于檢查點(diǎn)的計(jì)算機(jī)的容錯(cuò)方法。該方法包括以下步驟:
步驟1:在判斷為執(zhí)行檢查點(diǎn)時(shí),暫停用戶進(jìn)程;
步驟2:利用計(jì)算機(jī)中空閑的計(jì)算資源對(duì)所述用戶進(jìn)程的進(jìn)程狀態(tài)數(shù)據(jù)進(jìn)行分塊并計(jì)算每個(gè)分塊的hash值,以確定需要保存的分塊;
步驟3:在計(jì)算分塊的hash值的過(guò)程中,將已經(jīng)確定的需要保存的分塊和相應(yīng)的hash值進(jìn)行保存,以形成用于恢復(fù)出錯(cuò)的用戶進(jìn)程的檢查點(diǎn)文件。
在本發(fā)明的方法中,所述需要保存的分塊是相對(duì)于前一次執(zhí)行檢查點(diǎn)時(shí)被修改的分塊。
在本發(fā)明的方法中,所述確定需要保存的分塊包括:將每個(gè)分塊的所計(jì)算的hash值與在前一次執(zhí)行檢查點(diǎn)時(shí)該分塊的hash值進(jìn)行比較,如果不同,則將該分塊確定為需要保存的分塊。
在本發(fā)明的方法中,在步驟3中通過(guò)rdma將所述需要保存的分塊和相應(yīng)的hash值保存至計(jì)算機(jī)的并行文件系統(tǒng)中。
在本發(fā)明的方法中,還包括:在確定需要保存的分塊完成之后,如果存在未進(jìn)行保存的剩余分塊,則將所述剩余分塊分成兩部分,其中第一部分被復(fù)制到內(nèi)存中,以用于在啟動(dòng)所述用戶進(jìn)程之后寫入到所述并行文件系統(tǒng)中,第二部分被直接保存至所述并行文件系統(tǒng)中。
在本發(fā)明的方法中,所述第一部分占所述剩余分塊的比例為a/(a+1),所述第二部分占所述剩余分塊的比例為1/(a+1),其中,內(nèi)存復(fù)制速度和并行文件系統(tǒng)的保存速度比是a:1。
在本發(fā)明的方法中,還包括在存在出錯(cuò)用戶進(jìn)程的情況下,利用所述檢查點(diǎn)文件卷回出錯(cuò)的用戶進(jìn)程。
在本發(fā)明的方法中,還包括利用出錯(cuò)的用戶進(jìn)程的進(jìn)程狀態(tài)數(shù)據(jù)的分塊的hash值判斷被修改的分塊,并將所述被修改的分塊替換為所述檢查點(diǎn)文件中的相應(yīng)分塊。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
能夠有效地利用大規(guī)模計(jì)算機(jī)系統(tǒng)中空閑的計(jì)算資源來(lái)執(zhí)行檢查點(diǎn),以提高系統(tǒng)的資源利用率,縮短檢查點(diǎn)的執(zhí)行時(shí)間;使用流水線和異步方式將檢查點(diǎn)文件寫入到并行文件系統(tǒng)中,以降低i/o帶寬要求;使用兩級(jí)檢查點(diǎn)備份數(shù)據(jù)以防止檢查點(diǎn)的執(zhí)行出錯(cuò);在節(jié)點(diǎn)出錯(cuò)的恢復(fù)過(guò)程中,使用hash算法比較并只替換被修改的進(jìn)程狀態(tài)數(shù)據(jù),從而有效地降低并行文件系統(tǒng)的i/o訪問(wèn)和帶寬要求,加速檢查點(diǎn)卷回。
附圖說(shuō)明
以下附圖僅對(duì)本發(fā)明作示意性的說(shuō)明和解釋,并不用于限定本發(fā)明的范圍,其中:
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的執(zhí)行檢查點(diǎn)的流程圖;
圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的用戶進(jìn)程恢復(fù)的流程圖;
圖3示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的第一次執(zhí)行檢查點(diǎn)的示例;
圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的第二次執(zhí)行檢查點(diǎn)的示例;
圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的用戶進(jìn)程的恢復(fù)示例。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案、設(shè)計(jì)方法及優(yōu)點(diǎn)更加清楚明了,以下結(jié)合附圖通過(guò)具體實(shí)施例對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的執(zhí)行檢查點(diǎn)的流程圖。簡(jiǎn)言之,檢查點(diǎn)機(jī)制是指在進(jìn)程正常運(yùn)行的適當(dāng)時(shí)刻設(shè)置檢查點(diǎn),將進(jìn)程狀態(tài)數(shù)據(jù)(或稱檢查點(diǎn)文件)保存到穩(wěn)定存儲(chǔ)器中,如果在隨后運(yùn)行過(guò)程中發(fā)生故障,將進(jìn)程狀態(tài)數(shù)據(jù)從存儲(chǔ)器中讀出以執(zhí)行進(jìn)程的卷回/恢復(fù)操作。具體步驟如下:
步驟101:在檢查點(diǎn)時(shí)刻,暫停用戶進(jìn)程
檢查點(diǎn)周期(也即檢查點(diǎn)時(shí)刻之間的間隔)的設(shè)置時(shí)間越長(zhǎng),重新執(zhí)行進(jìn)程的時(shí)間就越長(zhǎng),檢查點(diǎn)文件也會(huì)越大;檢查點(diǎn)周期的時(shí)間太短,則會(huì)導(dǎo)致頻繁的執(zhí)行檢查點(diǎn),從而影響計(jì)算機(jī)系統(tǒng)的性能,在實(shí)際應(yīng)用時(shí),可根據(jù)計(jì)算機(jī)系統(tǒng)的規(guī)模、性能、用戶進(jìn)程的數(shù)據(jù)量等因素設(shè)置適當(dāng)?shù)臋z查點(diǎn)周期。
當(dāng)檢查點(diǎn)時(shí)刻到達(dá)時(shí),暫停所有節(jié)點(diǎn)上的用戶進(jìn)程,以維護(hù)用戶進(jìn)程的一致性。在用戶進(jìn)程暫停之后,節(jié)點(diǎn)上的處理器資源將空閑,因此存在豐富的空閑計(jì)算資源。在本文中,超級(jí)計(jì)算系統(tǒng)的空閑計(jì)算資源由多節(jié)點(diǎn)、多處理器、多核心等組成。
步驟102:對(duì)進(jìn)程狀態(tài)數(shù)據(jù)內(nèi)存分塊并進(jìn)行hash值計(jì)算
在本文中,進(jìn)程狀態(tài)數(shù)據(jù)是指為了恢復(fù)進(jìn)程所必需保存的信息,包括但不限于程序、寄存器組和變量的當(dāng)前值等,例如,進(jìn)程包括在內(nèi)存中執(zhí)行的程序、執(zhí)行狀態(tài)和數(shù)據(jù)等。
在此步驟中,利用空閑的計(jì)算資源將用戶進(jìn)程在每個(gè)節(jié)點(diǎn)上的進(jìn)程狀態(tài)數(shù)據(jù)內(nèi)存分塊并計(jì)算每個(gè)分塊對(duì)應(yīng)的hash值。
考慮hash值計(jì)算工作量和內(nèi)存分塊粒度等因素,可選擇以128kb、512kb、1024kb等粒度將進(jìn)程狀態(tài)數(shù)據(jù)內(nèi)存進(jìn)行分塊。在下文中將以512kb分塊進(jìn)行描述。
每個(gè)分塊的hash(哈希)值計(jì)算可采用md4、md5或sha-1等以加密或非加密的方式進(jìn)行。在一個(gè)實(shí)施例中,為了提高執(zhí)行檢查點(diǎn)的速度,采用非加密的方法對(duì)各個(gè)分塊計(jì)算hash值。
步驟103:從檢查點(diǎn)文件中讀取上一次檢查點(diǎn)時(shí)刻各分塊的hash值
此步驟的目的在于,讀取上一次執(zhí)行檢查點(diǎn)時(shí)刻保存的各分塊的hash值,以判斷在上次檢查點(diǎn)之后到本次檢查點(diǎn)時(shí)刻是否存在被修改的分塊。
檢查點(diǎn)文件可保存在穩(wěn)定性存儲(chǔ)器中,例如,本地磁盤或者raid5設(shè)備、或者通過(guò)網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程存儲(chǔ)。在本文中,為了充分利用超級(jí)計(jì)算機(jī)的資源將檢查點(diǎn)文件寫入到并行文件系統(tǒng)中,并以此為例描述本發(fā)明。
應(yīng)理解的是,如果是第一次執(zhí)行檢查點(diǎn),則此時(shí)并不存在檢查點(diǎn)文件,因此也就不需要執(zhí)行步驟103以及下文的步驟104,而是直接將各內(nèi)存分塊和對(duì)應(yīng)的hash值保存到并行文件系統(tǒng)中,所有的內(nèi)存分塊和hash值構(gòu)成完整的檢查點(diǎn)文件。在一個(gè)實(shí)施例中,在計(jì)算hash值的同時(shí),使用rdma(遠(yuǎn)程直接數(shù)據(jù)存取)技術(shù)快速將內(nèi)存分塊保存到并行文件系統(tǒng)中。由于rdma技術(shù)在確定分塊的源地址和目的地址之后,就不需要處理器的參與,因此這種方式能夠充分挖掘并行文件系統(tǒng)的帶寬,減少處理器的占用時(shí)間。
步驟104:判斷hash值是否相等
在此步驟中,將從并行文件系統(tǒng)中讀取的上一次檢查點(diǎn)時(shí)刻各分塊的hash值與在步驟102中計(jì)算的本次檢查點(diǎn)時(shí)刻計(jì)算的新的hash值進(jìn)行比較。對(duì)于hash值不相同的內(nèi)存分塊說(shuō)明相對(duì)于上次檢查點(diǎn)時(shí)刻該內(nèi)存分塊已經(jīng)被修改。
步驟105:將內(nèi)存分塊和新的hash值寫到并行文件系統(tǒng)。
為了進(jìn)一步提高執(zhí)行檢查點(diǎn)的速度,在步驟104的判斷結(jié)果為否的情況下,執(zhí)行步驟105,以只將已被修改的內(nèi)存分塊和新的hash值保存到并行文件系統(tǒng)中。所有改變的內(nèi)存分塊和對(duì)應(yīng)的新的hash值構(gòu)成增量檢查點(diǎn)文件。
步驟106:判斷進(jìn)程狀態(tài)數(shù)據(jù)的所有分塊的hash值是否計(jì)算完畢
在此步驟中,判斷是否已經(jīng)完成所有內(nèi)存分塊的hash值計(jì)算,如果還有內(nèi)存分塊沒(méi)有完成hash值計(jì)算,則返回步驟102進(jìn)行下一個(gè)內(nèi)存分塊的處理,否則,執(zhí)行步驟107。
步驟107:判斷是否有未保存的被修改的內(nèi)存分塊
判斷是否還剩余未被保存到并行文件系統(tǒng)的被修改內(nèi)存分塊,如果沒(méi)有,則執(zhí)行步驟1012,否則執(zhí)行步驟108。
步驟108:將剩余的未被保存到文件系統(tǒng)的被修改的內(nèi)存分塊分成兩部分
為了提高保存檢查點(diǎn)文件的處理速度,將剩余的未被保存到文件系統(tǒng)的被修改的內(nèi)存分塊分成兩部分,其中一部分用于首先復(fù)制到內(nèi)存以備后續(xù)處理,另一部分用于保存到并行文件系統(tǒng)。
在一個(gè)實(shí)施例中,根據(jù)內(nèi)存的復(fù)制速度(例如,對(duì)于512kb分塊的復(fù)制速度)與并行文件系統(tǒng)的保存速度比將剩余的內(nèi)存分塊分成兩部分。例如,假設(shè)內(nèi)存復(fù)制速度和并行文件系統(tǒng)的保存速度比是a:1,則兩部分的大小分別為剩余內(nèi)存分塊總和的a/(a+1)、1/(a+1)。
步驟109:分別將兩部分復(fù)制到內(nèi)存和保存到并行文件系統(tǒng)
在此步驟中,將步驟108中獲得的需要復(fù)制到內(nèi)存的一部分內(nèi)存分塊復(fù)制到內(nèi)存,同時(shí)將另一部分保存到并行文件系統(tǒng)。
步驟1010:?jiǎn)?dòng)用戶進(jìn)程。
啟動(dòng)所有節(jié)點(diǎn)上的相關(guān)的用戶進(jìn)程。
步驟1011:?jiǎn)?dòng)后臺(tái)程序?qū)⒅皬?fù)制到內(nèi)存的內(nèi)存分塊保存到文件系統(tǒng)。
在用戶進(jìn)程啟動(dòng)之后,啟動(dòng)后臺(tái)程序?qū)⒅皬?fù)制到內(nèi)存的一部分內(nèi)存分塊保存到并行文件系統(tǒng)中。
步驟1012:從文件系統(tǒng)中刪除冗余的分塊。
如果該用戶進(jìn)程是第一次執(zhí)行檢查點(diǎn),則跳過(guò)此步驟,否則,從并行文件系統(tǒng)中將本次增量檢查點(diǎn)文件中被修改的分塊和hash值從上次檢查點(diǎn)文件中刪除,以減小并行文件系統(tǒng)中增量檢查點(diǎn)文件中多余無(wú)效的內(nèi)容。
需要說(shuō)明的是,雖然上文按照特定順序描述了各個(gè)步驟,但是并不意味著必須按照上述特定順序來(lái)執(zhí)行各個(gè)步驟,實(shí)際上,這些步驟中的一些可以并發(fā)執(zhí)行,甚至改變順序,只要能夠?qū)崿F(xiàn)所需要的功能即可。類似地,在下文中描述的各種方法也不限于在介紹時(shí)使用的特定順序。
為了進(jìn)一步理解本發(fā)明中執(zhí)行檢查點(diǎn)時(shí)各步驟的時(shí)序關(guān)系或過(guò)程,圖3和圖4分別示出了執(zhí)行第一次檢查點(diǎn)和執(zhí)行第二次檢查點(diǎn)的示例,其中示出了處理器1至n的處理時(shí)序,橫軸表示時(shí)間。
參見(jiàn)圖3,第一次執(zhí)行檢查點(diǎn)具體過(guò)程如下:
步驟301:首先將該用戶進(jìn)程暫停,以保持該用戶所有進(jìn)程的一致性。
步驟302:在暫停進(jìn)程之后,利用豐富的空閑計(jì)算資源直接計(jì)算用戶進(jìn)程的進(jìn)程狀態(tài)數(shù)據(jù)內(nèi)存分塊的hash值。通過(guò)這種方式能夠并行計(jì)算上萬(wàn)個(gè)進(jìn)程狀態(tài)數(shù)據(jù)內(nèi)存分塊的hash值。
步驟303:在計(jì)算hash值的同時(shí),使用rdma技術(shù)快速將內(nèi)存分塊保存到并行文件系統(tǒng)中,計(jì)算得到的hash值也會(huì)被保存到并行文件系統(tǒng)中。
步驟304:?jiǎn)?dòng)所有的用戶進(jìn)程。
參見(jiàn)圖4,對(duì)于第二次執(zhí)行檢查點(diǎn)過(guò)程如下:
步驟305:首先將該用戶進(jìn)程暫停,以保持該用戶所有進(jìn)程的一致性。如圖t0到t1時(shí)刻,在t0時(shí)刻暫停所有用戶進(jìn)程,t1時(shí)刻表示所有進(jìn)程都已處于暫停狀態(tài)。從t1時(shí)刻之后,每個(gè)節(jié)點(diǎn)上的處理器將空閑,存在豐富的空閑計(jì)算資源。
步驟306:利用空閑計(jì)算資源直接計(jì)算用戶進(jìn)程的狀態(tài)數(shù)據(jù)內(nèi)存分塊的hash值。
步驟307:在一個(gè)處理器核心計(jì)算hash值的同時(shí),通過(guò)rdma技術(shù)從并行文件系統(tǒng)讀取執(zhí)行上一次檢查點(diǎn)時(shí)保存的整塊進(jìn)程狀態(tài)數(shù)據(jù)的所有內(nèi)存分塊的hash值。
步驟308:將新計(jì)算得到的hash值與相同內(nèi)存分塊的hash值比較;
步驟309:如果hash值不相同,則使用rdma技術(shù)將該內(nèi)存分塊和hash值保存到并行文件系統(tǒng)中。
步驟3010:同時(shí),處理器核心可以繼續(xù)執(zhí)行下一個(gè)內(nèi)存分塊的hash值計(jì)算和比較。
通過(guò)這種方式處理器核心計(jì)算hash值的工作與將內(nèi)存分塊保存到并行文件系統(tǒng)的工作可以流水線執(zhí)行。盡管hash值的計(jì)算工作比內(nèi)存分塊的保存工作快,可能會(huì)導(dǎo)致流水線等待,但是由于并不是所有的進(jìn)程狀態(tài)數(shù)據(jù)的內(nèi)存分塊都會(huì)在兩個(gè)檢查點(diǎn)時(shí)刻被改變的,即有不需要保存到并行文件系統(tǒng)中的內(nèi)存分塊,因此通過(guò)流水線式的執(zhí)行hash值計(jì)算和并行文件系統(tǒng)的保存能夠有效利用超級(jí)計(jì)算機(jī)系統(tǒng)的資源,縮短執(zhí)行檢查點(diǎn)的時(shí)間。
步驟3011:將剩余的未被保存到并行文件系統(tǒng)的被修改的內(nèi)存分塊分成兩份。
當(dāng)進(jìn)程狀態(tài)數(shù)據(jù)內(nèi)存分塊被修改的比例較大時(shí),可能存在進(jìn)程狀態(tài)數(shù)據(jù)內(nèi)存分塊的hash值計(jì)算和比較工作完成之后,還有被修改的內(nèi)存分塊沒(méi)有保存到并行文件系統(tǒng)的情況,因此,為了進(jìn)一步挖掘計(jì)算資源,在t2時(shí)刻將剩余的未被保存到并行文件系統(tǒng)中的被修改內(nèi)存分塊分成兩份,其中第一份將被復(fù)制到內(nèi)存,第二份繼續(xù)保存到并行文件系統(tǒng)中。
步驟3012:將第一份復(fù)制到內(nèi)存。
步驟3013:同時(shí)將第二份使用rdma技術(shù)保存到并行文件系統(tǒng)。
步驟3014:?jiǎn)?dòng)用戶進(jìn)程繼續(xù)執(zhí)行。
步驟3015:在進(jìn)程執(zhí)行的同時(shí),將復(fù)制到內(nèi)存的第一部分內(nèi)存分塊保存到并行文件系統(tǒng)中。
由于在超大規(guī)模的計(jì)算機(jī)系統(tǒng)中,即使在執(zhí)行高負(fù)載進(jìn)程的時(shí)候,系統(tǒng)中也會(huì)存在處理器核心空閑的時(shí)候,這段空閑的時(shí)間就可以將復(fù)制到內(nèi)存的分塊利用rdma保存到并行文件系統(tǒng)中。
步驟3016:從文件系統(tǒng)中刪除重復(fù)內(nèi)容
在本發(fā)明中,通過(guò)流水線執(zhí)行內(nèi)存分塊的hash計(jì)算和內(nèi)存分塊的保存工作,處理器計(jì)算資源和并行文件系統(tǒng)的帶寬被進(jìn)一步挖掘,因此能夠盡可能地使用豐富的剩余計(jì)算資源以及并行文件系統(tǒng)的帶寬。
當(dāng)用戶進(jìn)程所在的一個(gè)或多個(gè)節(jié)點(diǎn)出現(xiàn)錯(cuò)誤時(shí),例如,節(jié)點(diǎn)癱瘓的情況下,需要暫停用戶進(jìn)程,然后使用文件系統(tǒng)中的保存的檢查點(diǎn)文件對(duì)用戶進(jìn)程進(jìn)行卷回,以恢復(fù)到上一次檢查點(diǎn)執(zhí)行時(shí)刻。圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的恢復(fù)用戶進(jìn)程的流程圖。具體包括以下步驟:
步驟201:判斷節(jié)點(diǎn)是否出錯(cuò)
首先,判斷是否是出錯(cuò)的節(jié)點(diǎn),如果是,則執(zhí)行步驟202,否則執(zhí)行步驟206。
步驟202:為出錯(cuò)的節(jié)點(diǎn)尋找空閑節(jié)點(diǎn)。
為出錯(cuò)的節(jié)點(diǎn)尋找新的空閑節(jié)點(diǎn)或者負(fù)載相對(duì)較輕的節(jié)點(diǎn),作為恢復(fù)出錯(cuò)節(jié)點(diǎn)上的用戶進(jìn)程的卷回節(jié)點(diǎn),有多少個(gè)出錯(cuò)節(jié)點(diǎn)就尋找多少個(gè)卷回節(jié)點(diǎn)。
步驟203:讀取完整的檢查點(diǎn)文件到空閑節(jié)點(diǎn)。
將完整的檢查點(diǎn)文件從并行文件系統(tǒng)上讀取到空閑節(jié)點(diǎn)或卷回節(jié)點(diǎn)上。
步驟204:恢復(fù)錯(cuò)誤節(jié)點(diǎn)的用戶進(jìn)程。
使用讀取到的檢查點(diǎn)文件卷回出錯(cuò)節(jié)點(diǎn)上的用戶進(jìn)程。
步驟205:判斷是否所有節(jié)點(diǎn)處理完成。
判斷所有節(jié)點(diǎn)是否處理完成,如是,則執(zhí)行步驟2011,否則執(zhí)行步驟201。
步驟206:判斷是否所有分塊的hash值計(jì)算完成。
對(duì)于節(jié)點(diǎn)沒(méi)有出錯(cuò)的情況,只需要恢復(fù)進(jìn)程狀態(tài)數(shù)據(jù)即可,在此步驟中,判斷是否所有分塊的hash值計(jì)算完畢,如是,則執(zhí)行步驟205,否則執(zhí)行步驟207。
步驟207:計(jì)算內(nèi)存分塊的hash值。
計(jì)算內(nèi)存中用戶進(jìn)程的進(jìn)程狀態(tài)數(shù)據(jù)分塊的hash值。
步驟208:從并行文件系統(tǒng)中讀取分塊hash值。
從并行文件系統(tǒng)的檢查點(diǎn)文件中讀取對(duì)應(yīng)分塊的hash值。
步驟209:判斷hash值是否相等。
將計(jì)算得到的分塊的hash值與讀取的hash值進(jìn)行比較,如果hash值相同,則說(shuō)明無(wú)需替換該分塊,繼續(xù)執(zhí)行步驟206,否則執(zhí)行步驟2010。
步驟2010:將內(nèi)存中的分塊替換為檢查點(diǎn)文件的相應(yīng)分塊。
在此步驟中,對(duì)于hash值不相同的分塊,使用檢查點(diǎn)文件中的分塊替換內(nèi)存中的相應(yīng)分塊。
步驟2011:恢復(fù)錯(cuò)誤節(jié)點(diǎn)的用戶進(jìn)程。
啟動(dòng)用戶進(jìn)程,完成從出錯(cuò)中恢復(fù)進(jìn)程執(zhí)行。
為了進(jìn)一步理解本發(fā)明中用戶進(jìn)程卷回過(guò)程中各步驟的時(shí)序關(guān)系,參見(jiàn)圖5所示,其中,包括非出錯(cuò)節(jié)點(diǎn)上的處理過(guò)程和空閑節(jié)點(diǎn)上的處理過(guò)程,橫軸表示時(shí)間(time)。
步驟401:首先,將用戶進(jìn)程暫停,以保持所有進(jìn)程的一致性。
步驟402:計(jì)算分塊的hash值。
在暫停所有進(jìn)程之后,利用空閑的計(jì)算資源直接計(jì)算用戶進(jìn)程的進(jìn)程狀態(tài)數(shù)據(jù)分塊的hash值。
步驟403:在一個(gè)處理器核心計(jì)算hash值的同時(shí),通過(guò)rdma技術(shù)從并行文件系統(tǒng)的讀取上一次整塊進(jìn)程狀態(tài)數(shù)據(jù)的所有分塊的hash值。
步驟404:將新計(jì)算得到的hash與讀取的相應(yīng)分塊的hash值進(jìn)行比較。
步驟405:如果hash值不相同,則使用rdma技術(shù)將對(duì)應(yīng)的內(nèi)存分塊替換為并行文件系統(tǒng)中的分塊;
步驟406:同時(shí),處理器核心可以繼續(xù)執(zhí)行下一個(gè)分塊的hash值計(jì)算和比較。
步驟407:當(dāng)進(jìn)程狀態(tài)數(shù)據(jù)分塊被修改的比例較大時(shí),進(jìn)程狀態(tài)數(shù)據(jù)塊的hash值計(jì)算工作完成之后,還可能仍沒(méi)有完成被修改內(nèi)存塊的替換工作,在這種情況下,繼續(xù)使用rdma技術(shù)完成被修改的內(nèi)存塊的替換工作。
步驟408:對(duì)于出錯(cuò)的節(jié)點(diǎn),則尋找空閑節(jié)點(diǎn)或負(fù)載較輕的節(jié)點(diǎn)作為卷回節(jié)點(diǎn)。
步驟409:從并行文件系統(tǒng)上將完整檢查點(diǎn)文件中屬于出錯(cuò)節(jié)點(diǎn)的部分讀入到卷回節(jié)點(diǎn)中。
步驟4010:在卷回節(jié)點(diǎn)中重新構(gòu)建用戶進(jìn)程。
步驟4011:?jiǎn)?dòng)暫停的用戶進(jìn)程,以繼續(xù)執(zhí)行用戶任務(wù)。
本發(fā)明可以是系統(tǒng)、方法和/或計(jì)算機(jī)程序產(chǎn)品。計(jì)算機(jī)程序產(chǎn)品可以包括計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上載有用于使處理器實(shí)現(xiàn)本發(fā)明的各個(gè)方面的計(jì)算機(jī)可讀程序指令。
計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是保持和存儲(chǔ)由指令執(zhí)行設(shè)備使用的指令的有形設(shè)備。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以包括但不限于電存儲(chǔ)設(shè)備、磁存儲(chǔ)設(shè)備、光存儲(chǔ)設(shè)備、電磁存儲(chǔ)設(shè)備、半導(dǎo)體存儲(chǔ)設(shè)備或者上述的任意合適的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子(非窮舉的列表)包括:便攜式計(jì)算機(jī)盤、硬盤、隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、可擦式可編程只讀存儲(chǔ)器(eprom或閃存)、靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)、便攜式壓縮盤只讀存儲(chǔ)器(cd-rom)、數(shù)字多功能盤(dvd)、記憶棒、軟盤、機(jī)械編碼設(shè)備、例如其上存儲(chǔ)有指令的打孔卡或凹槽內(nèi)凸起結(jié)構(gòu)、以及上述的任意合適的組合。
以上已經(jīng)描述了本發(fā)明的各實(shí)施例,上述說(shuō)明是示例性的,并非窮盡性的,并且也不限于所披露的各實(shí)施例。在不偏離所說(shuō)明的各實(shí)施例的范圍和精神的情況下,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō)許多修改和變更都是顯而易見(jiàn)的。本文中所用術(shù)語(yǔ)的選擇,旨在最好地解釋各實(shí)施例的原理、實(shí)際應(yīng)用或?qū)κ袌?chǎng)中的技術(shù)改進(jìn),或者使本技術(shù)領(lǐng)域的其它普通技術(shù)人員能理解本文披露的各實(shí)施例。