專利名稱:管理、錄入或重放執(zhí)行應(yīng)用進(jìn)程時(shí)的非確定性操作的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種特別地通過記錄或者外部監(jiān)視來進(jìn)行的用于軟 件操作的管理方法,該軟件操作是在執(zhí)行在計(jì)算機(jī)上執(zhí)行的應(yīng)用進(jìn)
程的過程中進(jìn)行的。這一管理特別地應(yīng)用于以錄入數(shù)據(jù)(logging data)的形式來記錄操作或者根據(jù)與先前已錄入的執(zhí)行相對應(yīng)的給定 執(zhí)行來重放操作。
該方法特別有利地適用于執(zhí)行這 一 進(jìn)程的內(nèi)部事件的操作,該 進(jìn)程本身可以是多進(jìn)程和/或多計(jì)算機(jī)軟件應(yīng)用的 一部分。
本發(fā)明還涉及一種系統(tǒng),該系統(tǒng)在它所執(zhí)行的軟件應(yīng)用的運(yùn)作 管理中實(shí)施這樣的方法。
本發(fā)明的領(lǐng)域是獨(dú)立的或者在網(wǎng)絡(luò)中的計(jì)算機(jī)或者是由 一起工 作的多個(gè)計(jì)算機(jī)形成的計(jì)算機(jī)"集群"的領(lǐng)域。這些集群用來執(zhí)行向 用戶提供一個(gè)或者多個(gè)服務(wù)的軟件應(yīng)用。這樣的應(yīng)用可以是單進(jìn)程 或者多進(jìn)程,并且在單個(gè)計(jì)算機(jī)上執(zhí)行或者例如作為MPI ("消息傳 遞接口")型或者"共享式存儲器"型的分布式應(yīng)用而分布于多個(gè)計(jì)算 機(jī)上。
特別地,本發(fā)明實(shí)現(xiàn)了例如通過稱為中間應(yīng)用的另 一軟件應(yīng)用 (例如"中間件"型的應(yīng)用)在集群內(nèi)進(jìn)行對稱為主應(yīng)用或者主要應(yīng) 用的這種應(yīng)用的運(yùn)作管理。這一運(yùn)作管理除可以包括其它操作之外 還可以包括如下操作在主要節(jié)點(diǎn)內(nèi)或者與稱為輔節(jié)點(diǎn)的其它節(jié)點(diǎn) 相協(xié)作,對這一應(yīng)用的全部或者一部分進(jìn)行復(fù)制、重新分布、可靠 化(reliabilization )或者跟蹤或調(diào)試。
背景技術(shù):
在這一操作管理的背景下,通常有用的是錄入主要應(yīng)用或者它 的進(jìn)程之一的運(yùn)作,即記錄代表這一運(yùn)作的數(shù)據(jù),使得能夠重構(gòu)執(zhí) 行。隨同主要應(yīng)用執(zhí)行一起,這一數(shù)據(jù)隨后以錄入數(shù)據(jù)的形式來生 成并且被發(fā)送到一個(gè)或者多個(gè)輔節(jié)點(diǎn)以供存儲和備份。
例如為了具體地跟蹤和研究主要應(yīng)用的運(yùn)作,于是有可能在受
一運(yùn)作。
另外作為例子,如果主要應(yīng)用經(jīng)歷故障、特別是硬件故障,則 有可能在輔節(jié)點(diǎn)上創(chuàng)建新的備用應(yīng)用以便替換主要應(yīng)用所提供的服 務(wù)。然后可以在已知狀態(tài)下、例如在先前記錄的重啟點(diǎn)狀態(tài)下創(chuàng)建 這一備用應(yīng)用。根據(jù)主要應(yīng)用的錄入數(shù)據(jù),于是有可能強(qiáng)制備用應(yīng) 用重構(gòu)直到故障時(shí)刻為止主要應(yīng)用的執(zhí)行。在這一重構(gòu)或者重放之 后,備用應(yīng)用在與直到最后事件為止的應(yīng)用相同的狀態(tài)下,其錄入 數(shù)據(jù)已經(jīng)在主要節(jié)點(diǎn)外部被接收。如果已經(jīng)錄入和發(fā)送在故障之前 的所有事件直到發(fā)生故障為止,則備用應(yīng)用隨后可以進(jìn)行接管而對
用戶的服務(wù)幾乎沒有中斷或者完全沒有中斷。
然而目前很多現(xiàn)有應(yīng)用不具備這樣的管理功能,并且修改它們 以便向它們添加這些功能將過于復(fù)雜和昂貴。
包括在計(jì)算機(jī)或者主要節(jié)點(diǎn)的系統(tǒng)軟件中實(shí)施這些功能的解決 方案呈現(xiàn)出一些嚴(yán)重的缺陷,比如錯(cuò)誤風(fēng)險(xiǎn)、在網(wǎng)絡(luò)內(nèi)的不穩(wěn)定或 者不兼容以及對于系統(tǒng)軟件領(lǐng)域特殊技能的要求。
此外,本發(fā)明的發(fā)明人提出 一 種包括由如下中間應(yīng)用接管這些 管理功能的解決方案,該中間應(yīng)用主要在用戶存儲器空間中執(zhí)行并 且在系統(tǒng)軟件本身內(nèi)僅需少量修改。
然而,在這類解決方案中,除其它方面之外,就主要應(yīng)用本身 的執(zhí)行以及所用通信網(wǎng)絡(luò)而言,錄入數(shù)據(jù)的創(chuàng)建和處理以及它從主 要節(jié)點(diǎn)傳輸?shù)捷o節(jié)點(diǎn)代表了繁重的計(jì)算量。在現(xiàn)有技術(shù)中,主應(yīng)用
于是經(jīng)歷這樣的性能損失通常不能在開發(fā)利用情形下令人滿意地 使用這一運(yùn)作管理。
事實(shí)上,為了能夠以連貫的方式或者甚至完整的方式來表現(xiàn)主
要應(yīng)用的執(zhí)行,待記錄和待傳輸?shù)氖录ǔ7浅V?。另外,大?數(shù)這些事件對應(yīng)于執(zhí)行起來很快的操作,特別是在主要節(jié)點(diǎn)的硬件 或者軟件資源內(nèi)部的事件,例如系統(tǒng)調(diào)用,該調(diào)用請求分配信號標(biāo)
志(semaphore)或者讀取存儲器中的數(shù)據(jù)項(xiàng)。
對照而言,對于這些事件中的各事件,錄入數(shù)據(jù)的生成和存儲 以及傳輸是時(shí)間長得多的操作,特別是對于內(nèi)部事件更是如此。
事實(shí)上,錄入各事件就其本身而言是一種需要至少一個(gè)并且通 常是多個(gè)軟件操作的過程,各軟件操作構(gòu)成了至少與已錄入事件本 身相等的負(fù)荷和工作時(shí)間。根據(jù)內(nèi)部事件的類型和實(shí)施方式,對于 各事件,該錄入使有所增加的負(fù)荷或者工作時(shí)間增加100至IO,OOO 倍。
另外,用于向計(jì)算機(jī)外部進(jìn)行傳輸?shù)挠布蛙浖f(xié)議具有相對 于已錄入事件的數(shù)目而言通常不良的性能,這也是對網(wǎng)絡(luò)使用的干 護(hù)G以及主應(yīng)用的性能瓶頸。
存在某些解決方案,其允許特別是通過不錄入非確定型事件來 減少待錄入的事件數(shù)目。
如果事件或者構(gòu)成該事件的操作、特別是軟件操作的執(zhí)行結(jié)果 ^f又耳又決于在它的初始時(shí)刻存在的初始狀況,則它可以纟皮限定為確定 性的。更特別地,在如這里描述的管理單一操作或者執(zhí)行或者運(yùn)作 的背景下,如果操作從發(fā)起它的進(jìn)程的觀點(diǎn)來看是確定性的,即如 果它向這 一 進(jìn)程發(fā)送的結(jié)果僅取決于這 一 進(jìn)程的初始狀態(tài),則可以 將該操作稱之為確定性的。類似地,連續(xù)一串確定性操作可以將其 自身構(gòu)成為確定性序列。
在運(yùn)行應(yīng)用進(jìn)程時(shí),所執(zhí)行的很多操作是確定性的,特別是在 內(nèi)部操作之中更是如此。例如,如果數(shù)學(xué)或者邏輯內(nèi)部操作僅影響 如下這些資源,則它們往往是確定性的,這些資源形成這一進(jìn)程的 初始狀態(tài)的 一 部分并且該進(jìn)程獨(dú)自就可以修改這些資源。
反言之,向共享式資源應(yīng)用的一些操作相比于這樣的進(jìn)程而言 通常是非確定性的。例如,如下請求可能是非確定性的,該請求針
對覆蓋與其它進(jìn)程共享的存儲器區(qū)的"lock (鎖定)"或者共享式信
號標(biāo)志的歸屬。事實(shí)上,其結(jié)果,即是否獲得這一鎖定或者這一歸 屬可能取決于有時(shí)已經(jīng)保留或者還沒有保留這 一 資源的其它進(jìn)程的 狀態(tài)或者動(dòng)作。
然而,非確定性事件的重放以及特別是錄入仍然構(gòu)成性能損失, 而減少該性能損失可能是有用的。特別地,在運(yùn)行主應(yīng)用的同時(shí), 錄入操作代表了操作節(jié)點(diǎn)的工作量,并且可能是由于中間應(yīng)用的動(dòng) 作而造成性能下降的起因。
發(fā)明內(nèi)容
本發(fā)明的一個(gè)目的在于克服這些缺陷中的所有或者一些缺陷。
特別地,本發(fā)明的目的在于獲得
-減少因內(nèi)部事件的錄入或者處理而生成的工作量;
-減少待傳輸?shù)匿浫霐?shù)據(jù)的數(shù)量;
-減少非確定性事件的數(shù)目,在該非確定性事件中必須存儲結(jié)果 以便能夠產(chǎn)生賦予同一結(jié)果的重放。
本發(fā)明提出 一種用于管理非確定性軟件操作的方法,該非確定 性軟件操作是在由至少 一 個(gè)計(jì)算機(jī)執(zhí)行的稱為受管理的進(jìn)程的應(yīng)用 進(jìn)程的單一操作內(nèi)的程序指令所發(fā)起的,在該情況下所述操作的表 現(xiàn)在于向所述受管理的進(jìn)程發(fā)送稱為實(shí)際結(jié)果的至少一個(gè)結(jié)果數(shù) 據(jù)。
這一方法包括如下步驟
-基于受管理的進(jìn)程的狀態(tài)或者如它在所述操作之前所屬于的 應(yīng)用的狀態(tài)來進(jìn)行稱為預(yù)測函數(shù)的確定性軟件處理,以便提供很可 能與實(shí)際結(jié)果相對應(yīng)并且構(gòu)成針對所述操作的預(yù)測結(jié)果的值;
-進(jìn)行比較測試以確定預(yù)測結(jié)果的值是否對應(yīng)于實(shí)際結(jié)果的值;
-針對所述受管理的操作執(zhí)行補(bǔ)充管理階段,這一補(bǔ)充管理視先 前測試的結(jié)果而定。
本發(fā)明因此提出執(zhí)行對非確定性操作的管理,該管理取決于這
些操作是否順應(yīng)已知或者可計(jì)算的確定性預(yù)測,該預(yù)測能夠被視為 一類可再現(xiàn)順應(yīng)性網(wǎng)格。因此有可能在操作結(jié)果順應(yīng)這一 網(wǎng)格的情 況下減少管理工作量。
這 一 收益關(guān)于錄入操作而言特別地敏感,這些操作必須不但被 記錄于主要節(jié)點(diǎn)中而且通常被發(fā)送到外界,并且在利用主要應(yīng)用的 過程中也是如此。
本發(fā)明由此產(chǎn)生一種待錄入的操作或者事件的預(yù)測性或者試探 性壓縮形式,并且可以減少需要整體管理的這些操作或者事件的比 例。事實(shí)上,如果操作如預(yù)測的那樣表現(xiàn),則它發(fā)送的結(jié)果實(shí)質(zhì)上 不再需要被錄入,因?yàn)榭梢愿鶕?jù)可以在適當(dāng)?shù)臅r(shí)候重新使用的已知 方法在以后找到它的值。
本發(fā)明特別地提出管理在已錄入進(jìn)程的執(zhí)行序列中包括的稱為 已錄入操作的操作,該已錄入進(jìn)程在稱為主要節(jié)點(diǎn)的計(jì)算機(jī)中被執(zhí) 行,這一管理以錄入數(shù)據(jù)的形式來記錄所述已錄入操作,該錄入數(shù) 據(jù)實(shí)現(xiàn)輔節(jié)點(diǎn)所執(zhí)行的重啟進(jìn)程以重放與已錄入操作相對應(yīng)的稱為 重放操作的操作,并且這一管理向重啟進(jìn)程發(fā)送與已錄入操作的結(jié) 果相對應(yīng)的結(jié)果,
在實(shí)際結(jié)果與預(yù)期結(jié)果不對應(yīng)即非預(yù)測操作的情況下,補(bǔ)充管 理階段于是包括存儲錄入數(shù)據(jù),該錄入數(shù)據(jù)包括結(jié)果數(shù)據(jù),該結(jié)果 數(shù)據(jù)代表了用于已錄入操作的實(shí)際結(jié)果的值的結(jié)果數(shù)據(jù)。
因此有可能在非預(yù)測結(jié)果的情況下在這一錄入數(shù)據(jù)的將來的使 用過程中重構(gòu)該序列的準(zhǔn)確寺丸行。
在序列的錄入過程中,用以測試操作以確定它們的確定性性質(zhì) 或者非確定性性質(zhì)的階段代表了附加的負(fù)荷。然而,根據(jù)在這一序 列內(nèi)正確預(yù)測的某 一 比例的操作,不言而喻由于不錄入所預(yù)測的結(jié) 果而實(shí)現(xiàn)的節(jié)省可能變得顯著地大于由于這一測試而帶來的超負(fù) 荷。
在相反情況下,即就其而言實(shí)際結(jié)果對應(yīng)于預(yù)期結(jié)果的預(yù)測操 作,本發(fā)明實(shí)現(xiàn)了避免將來自預(yù)測操作的結(jié)果的數(shù)據(jù)存儲和/或發(fā)送
到外界,而這種發(fā)送會造成工作量增加。
可選地,有可能提供對錄入數(shù)據(jù)的存儲,該錄入數(shù)據(jù)例如以排 序號的形式包括用于已錄入操作的標(biāo)識數(shù)據(jù)。這一標(biāo)識數(shù)據(jù)可以保 持對這一操作的執(zhí)行的跟蹤以便能夠在這一 錄入數(shù)據(jù)的將來使用中 包括這一操作。
由于預(yù)測函數(shù)是確定性和已知的,所以可以根據(jù)操作的初始狀 況在重放過程中確定地重新計(jì)算結(jié)果。如果在重放過程中的結(jié)果沒 有不符合該同 一預(yù)測,則這一預(yù)測的結(jié)果可以用來對#:作的結(jié)果進(jìn) 行"強(qiáng)制",使得重啟進(jìn)程實(shí)際上收到與在錄入過程中相同的結(jié)果。
根據(jù)本發(fā)明,可以錄入確定性操作而無需存儲或者發(fā)送操作的 結(jié)果,這在主要節(jié)點(diǎn)的工作量方面是一種節(jié)省。
更特別地,該方法可以記錄已錄入進(jìn)程操作的稱為已錄入序列 的序列,所述序列包括發(fā)送與預(yù)測結(jié)果不對應(yīng)的實(shí)際結(jié)果的稱為非 預(yù)測操作的至少一個(gè)操作。這一記錄于是包括存儲至少一個(gè)日志文 件,該日志文件使重啟進(jìn)程能夠重放與已錄入序列操作相對應(yīng)的操 作的稱為重放序列的序列。在這一背景下,所述日志文件包括如下 數(shù)據(jù),該數(shù)據(jù)代表所述非預(yù)測操作的稱為已錄入結(jié)果的實(shí)際結(jié)果、 并且在與所述非預(yù)測操作相對應(yīng)的重放操作完成時(shí)可以用來使重啟 進(jìn)程包括與所述錄入結(jié)果相對應(yīng)的結(jié)果。
根據(jù)一個(gè)實(shí)施例,在已錄入進(jìn)程序列的錄入過程中,通過遞增 與至少 一 個(gè)預(yù)測和非確定性的操作相對應(yīng)的標(biāo)識數(shù)據(jù)來錄入這 一 預(yù)
測操作而不在日志(JSeml)內(nèi)存儲如下錄入數(shù)據(jù),該錄入數(shù)據(jù)代表 所述預(yù)測和非確定性的已錄入操作(EVInD)的實(shí)際結(jié)果(DR)。
可選地,可以在對非預(yù)測操作所進(jìn)行的補(bǔ)充管理階段過程中重 置遞增序列。
用于錄入至少 一個(gè)非預(yù)測操作的、在日志中存儲的錄入數(shù)據(jù)由 此可以包4舌
- 一方面包括標(biāo)識數(shù)據(jù),該標(biāo)識數(shù)據(jù)代表與所述非預(yù)測操作相對 應(yīng)的排序數(shù)據(jù)的值;以及
-另一方面包括結(jié)果數(shù)據(jù),該結(jié)果數(shù)據(jù)代表所述已錄入操作所發(fā) 送的實(shí)際結(jié)果。
有利的是,本發(fā)明特別地提出在日志中記錄至少一個(gè)已錄入序 列,對于構(gòu)成所述序列內(nèi)至少一個(gè)類型的非確定性內(nèi)部事件的各已
錄入操作,這一記錄包括如下步驟的迭代重復(fù)
-基于進(jìn)程或者它的應(yīng)用在所述操作之前的狀態(tài)來進(jìn)行確定性 軟件處理以提供很可能與實(shí)際結(jié)果相對應(yīng)并且構(gòu)成針對所述操作的 預(yù)測結(jié)果的值;
-進(jìn)行比較測試以確定預(yù)測結(jié)果的值是否對應(yīng)于實(shí)際結(jié)果的值;
-在非預(yù)測結(jié)果的情況下,在日志中存儲如下錄入數(shù)據(jù),該錄入 數(shù)據(jù) 一 方面以關(guān)聯(lián)方式包括與在進(jìn)行中的操作相對應(yīng)的排序數(shù)據(jù)的 值而在另 一方面包括結(jié)果數(shù)據(jù),該結(jié)果數(shù)據(jù)代表由在進(jìn)行中的操作 向已錄入進(jìn)程發(fā)送的實(shí)際結(jié)果的值。
有利地,只有非預(yù)測結(jié)果才引起對結(jié)果的存儲。
根據(jù)一種變型,排序數(shù)據(jù)可以僅在具有預(yù)測結(jié)果的操作的情況 下才被遞增而在具有非預(yù)測結(jié)果的操作過程中被重置。
與錄入相并行或者相獨(dú)立,根據(jù)本發(fā)明的方法實(shí)現(xiàn)了對如下操 作的稱為重放序列的序列的管理,這些操作形成稱為輔節(jié),^的計(jì)算 機(jī)中執(zhí)行的重啟進(jìn)程的一部分。
通過使用與錄入的預(yù)測函數(shù)相同或者相對應(yīng)的重》文預(yù)測函凄t, 本發(fā)明由此產(chǎn)生無數(shù)據(jù)丟失的預(yù)測性或者試探性壓縮/解壓縮形式, 該形式可以在重放過程中提供與在錄入過程中相同的結(jié)果以及減少 待存儲和發(fā)送的錄入數(shù)據(jù)的數(shù)量。由此可以使用錄入數(shù)據(jù)來以重啟 進(jìn)程所重放的操作形式執(zhí)行對已錄入操作的重放。
這 一 重啟進(jìn)程可以例如從它的 一 個(gè)或者多個(gè)可執(zhí)行文件來自行 起動(dòng)、然后執(zhí)行。在這一重放的執(zhí)行過程中,由此每當(dāng)重放操作的 特性要求這樣做時(shí)重放操作就向它們自己提供結(jié)果。
根據(jù)本發(fā)明的管理由此可以使用錄入數(shù)據(jù)以便在非確定性重放 操作的各情況下使重啟進(jìn)程將與在錄入過程中返回的結(jié)果相對應(yīng)的
稱為強(qiáng)制結(jié)果的結(jié)果納入考慮之中。
根據(jù)本發(fā)明,對于在錄入時(shí)間處的至少 一 個(gè)非預(yù)測非確定性操
作,補(bǔ)充管理階段由此包括
-在錄入數(shù)據(jù)中讀取稱為已錄入結(jié)果數(shù)據(jù)的結(jié)果數(shù)據(jù),該結(jié)果數(shù) 據(jù)代表了與正在重放的操作相對應(yīng)的在操作的錄入過程中返回的結(jié)
果;
-截獲重放操作的結(jié)果并且將強(qiáng)制結(jié)果而不是源自于重放操作 的結(jié)果轉(zhuǎn)發(fā)到重啟進(jìn)程。
因此,每當(dāng)重啟進(jìn)程在它的可執(zhí)行文件內(nèi)執(zhí)行如下指令、該指 令執(zhí)行在錄入過程中的非預(yù)測操作時(shí),補(bǔ)充管理階段然隨后實(shí)現(xiàn)對 結(jié)果的檢查或者強(qiáng)制以便使它順應(yīng)于錄入數(shù)據(jù)并且由此產(chǎn)生與已錄 入進(jìn)程的執(zhí)行相順應(yīng)的重啟進(jìn)程的執(zhí)行。
另一方面,當(dāng)在錄入過程中已經(jīng)正確地預(yù)測操作的結(jié)果時(shí),即 使該操作為非確定性的并且它的實(shí)際結(jié)果不確定,錄入數(shù)據(jù)仍然可 以不含結(jié)果數(shù)據(jù)。
對于已經(jīng)在錄入過程中預(yù)測過的至少 一 個(gè)非確定性操作,補(bǔ)充
管理階^殳因此可以包括如下步驟
-進(jìn)^f于與用于錄入所述才喿作的預(yù)測函數(shù)相對應(yīng)的稱為重》丈預(yù)測 函數(shù)的確定性軟件處理,并且提供針對重放操作的預(yù)測結(jié)果;
-截獲重放操作的結(jié)果并且將預(yù)測結(jié)果作為強(qiáng)制結(jié)果而不是源 自于重放操作的結(jié)果轉(zhuǎn)發(fā)到重啟進(jìn)程。
因此有可能即使沒有存儲在錄入過程中已經(jīng)獲得的實(shí)際結(jié)果也 仍可找到該實(shí)際結(jié)果、并且有可能檢查重放結(jié)果是否順應(yīng)實(shí)際結(jié)果 或者如果不順應(yīng)則對該重放結(jié)果進(jìn)行強(qiáng)制。
此外,對于就其而言錄入數(shù)據(jù)不包括已錄入結(jié)果的各操作,補(bǔ) 充管理階段包括遞增代表所述重放操作的排序值。
因此,該遞增實(shí)現(xiàn)了監(jiān)視重啟進(jìn)程的進(jìn)度而不干預(yù)它的運(yùn)行, 只要對于維持順應(yīng)的運(yùn)行既沒有用也沒有必要。因此,"如果沒有 必要就不會干預(yù),,這一事實(shí)對于進(jìn)程或者對于管理重放的應(yīng)用或者
對于執(zhí)行它們的計(jì)算機(jī)而言是一種工作節(jié)省。
特別地,在序列包括預(yù)測操作和非預(yù)測操作的情況下,有可能
相同,并使用數(shù)量減少并且其存儲需要較低工作量的錄入數(shù)據(jù)。
根據(jù)本發(fā)明的方法可以特別地被實(shí)施用來管理在受管理的序列 內(nèi)產(chǎn)生至少一個(gè)類型的事件的所有操作。
由此有可能執(zhí)行如下錄入或者重》文,該錄入或者重放代表了進(jìn) 程相對于某些特定項(xiàng)如另一進(jìn)程、用戶或者特定資源而言的所有執(zhí) 行。
另外,這一方法可以用來管理所有如下4喿作,這些操作被標(biāo)識 為本質(zhì)上為非確定性或者發(fā)送被標(biāo)識為本質(zhì)上為非確定性的結(jié)果。
4b方法相組合。
例如,在只有確定性操作才不被錄入的解決方案內(nèi),由此有可 能通過僅錄入其余操作的 一部分、即僅錄入非確定性和非預(yù)測的操 作來甚至更多地優(yōu)化工作量。
更特別地,根據(jù)本發(fā)明的方法管理所有如下操作,這些操作在 受管理的序列內(nèi)產(chǎn)生在受管理的進(jìn)程或者它的應(yīng)用或者執(zhí)行它們的 計(jì)算機(jī)內(nèi)部的非確定性事件。
與對外部事件的管理相配合,本發(fā)明因此可以管理進(jìn)程的整個(gè)
執(zhí)行,特別地以便在開發(fā)利用過程中實(shí)現(xiàn)錄入、同時(shí)限制受管理的 應(yīng)用的任何減緩。
這樣的管理如錄入或者重放有利地應(yīng)用于至少一個(gè)如下操作, 該操作由從可執(zhí)行文件執(zhí)行的指令來發(fā)起并且包括對在所述可執(zhí)行 文件外部的稱為原例程的例程的調(diào)用。
根據(jù)該方法的一個(gè)實(shí)施例,為了實(shí)現(xiàn)靈活的并且4又略帶侵入式 的實(shí)施方式,所述指令的執(zhí)行隨后產(chǎn)生對稱為修改例程的例程而不 是所述原例程的調(diào)用,這一修改例程產(chǎn)生或者發(fā)起對該方法的實(shí)施。
修改的例程可以特別地包括至少 一 個(gè)如下指令,該指令在系統(tǒng)
軟件內(nèi)被執(zhí)行并且對至少一個(gè)錄入或重放軟件代理進(jìn)行調(diào)用、保證 該方法的實(shí)施并且在受管理的進(jìn)程或者目標(biāo)進(jìn)程的計(jì)算機(jī)用戶存儲 器空間中被執(zhí)行。
由此有可能例如以如下方式基本上在用戶空間內(nèi)產(chǎn)生對這一管 理的實(shí)施,該方法是為了最小化在系統(tǒng)軟件中的干預(yù)并且限制錯(cuò)誤 風(fēng)險(xiǎn)以及在網(wǎng)絡(luò)內(nèi)的不同計(jì)算機(jī)之間的異質(zhì)性風(fēng)險(xiǎn)。
具體而言,修改例程包括測試指令,該測試指令檢驗(yàn)已調(diào)用該 測試指令的指令是否是在錄入或者重放的背景下執(zhí)行的,這一測試 由此分別影響對錄入類型的或者重放類型的管理代理的調(diào)用。
因此可以通過相同代理以提高的靈活性,例如對于錄入或者重 放都通過單個(gè)中間應(yīng)用和/或單個(gè)內(nèi)核模塊,來產(chǎn)生根據(jù)不同的使用 而進(jìn)行的對管理的實(shí)施。
預(yù)測函數(shù)可以使用不同類型的軟件處理,特別是以進(jìn)程、它的 應(yīng)用或者它們獨(dú)自就可以修改的資源的狀態(tài)為基礎(chǔ)的軟件處理。
因此,在一個(gè)特定實(shí)施例中,根據(jù)本發(fā)明的方法使用至少一個(gè) 如下預(yù)測函數(shù),該預(yù)測函數(shù)包括視先前在受管理的進(jìn)程的執(zhí)行過程 中發(fā)生過的至少一個(gè)類型的一個(gè)或者多個(gè)外部事件的特征而定的確 定性軟件處理。
根據(jù) 一 個(gè)特定特征,根據(jù)本發(fā)明的方法通過使用第 一預(yù)測函數(shù) 來錄入至少一個(gè)第一操作而通過使用第二預(yù)測函數(shù)來錄入第二操作。
通過使用數(shù)個(gè)不同預(yù)測函數(shù),于是有可能使錄入方法適應(yīng)于環(huán) 境以便通過針對各操作的重放而使用與用于錄入對應(yīng)操作的預(yù)測函 凄史相同的預(yù)測函數(shù)來優(yōu)化效率。
才艮據(jù)一個(gè)變型,該方法^f吏用通過在多個(gè)給定函凄史內(nèi)的確定性選 擇或者組合、特別是根據(jù)受管理的操作的類型(例如根據(jù)它的性質(zhì) 或者根據(jù)所涉及到的資源)而選擇的預(yù)測函數(shù)。在重放過程中,由 Jt可以與 數(shù)的這一選擇' 根據(jù)另 一 變型,對所用預(yù)測函數(shù)的選擇取決于在錄入進(jìn)程的執(zhí) 行過程中測量或者計(jì)算的變量的變化,例如在錄入過程中預(yù)測函數(shù) 成功率的變化可以確定這一函數(shù)或者它的一些參數(shù)的變化。
根據(jù)本發(fā)明,日志文件于是可以包括如下數(shù)據(jù),該數(shù)據(jù)代表對 預(yù)測函數(shù)的至少 一 個(gè)選擇或者對影響這種選擇的參數(shù)的選擇。
在錄入過程中存儲這一變化的特征和/或時(shí)刻于是將實(shí)現(xiàn)在重放 過程中同一執(zhí)行點(diǎn)產(chǎn)生同一變化。
與仿真或者重放函數(shù)的改進(jìn)相聯(lián)系,本發(fā)明的另一目的在于改 進(jìn)對應(yīng)用或者這些進(jìn)程中至少 一個(gè)進(jìn)程的運(yùn)作管理。
進(jìn)程的運(yùn)作管理,并且包括如下步驟
-錄入在所述已錄入進(jìn)程從稱為重啟點(diǎn)的給定點(diǎn)開始 一直到稱 為中斷點(diǎn)的點(diǎn)之間的執(zhí)行過程中發(fā)生的至少 一個(gè)給定類型的所有事
件,并且存儲源自于所述錄入的日志;
-從在與已錄入進(jìn)程的重啟點(diǎn)狀態(tài)相對應(yīng)的狀態(tài)下的重啟進(jìn)程 開始,重放來自所述重啟進(jìn)程的所述日志中的所述事件,由此使重 啟進(jìn)程達(dá)到與已錄入進(jìn)程在中斷點(diǎn)處的狀態(tài)相對應(yīng)的狀態(tài)。
特別地,可以捕獲并且以重啟點(diǎn)數(shù)據(jù)的形式存儲已錄入進(jìn)程在 重啟點(diǎn)處的狀態(tài),該重啟點(diǎn)數(shù)據(jù)用來將重啟進(jìn)程恢復(fù)到重啟點(diǎn)在向 該重啟進(jìn)程應(yīng)用重放步驟之前的狀態(tài)。
根據(jù)本發(fā)明的方法可以特別地用來產(chǎn)生對包括外部事件以及內(nèi) 部事件的 一 連串事件的重放。本發(fā)明由此提出通過將這些外部事件 各自注入或者仿真到重啟進(jìn)程中來進(jìn)行外部事件的重放。在執(zhí)行重 放時(shí)跟隨各外部事件的內(nèi)部事件由此響應(yīng)于緊接在它們之前的外部 事件的發(fā)生和/或處理而由重啟進(jìn)程主動(dòng)地來執(zhí)行。重啟進(jìn)程由此實(shí) 現(xiàn)響應(yīng)于外部重放代理所發(fā)起的外部事件的發(fā)生來重放至少一個(gè)已 錄入的內(nèi)部事件序列。
利用運(yùn)作管理函數(shù),本發(fā)明的一個(gè)目的還在于改進(jìn)應(yīng)用運(yùn)作的 至少一部分或者來自這一應(yīng)用的至少一個(gè)進(jìn)程的調(diào)試工具或者分析
工具或者再現(xiàn)工具。
運(yùn)作管理因此可以進(jìn)行例如與稱為"被跟蹤的應(yīng)用,,的應(yīng)用的 調(diào)試相聯(lián)系的對這一應(yīng)用的寺丸行的監(jiān)視。這一監(jiān)一見隨后應(yīng)用于纟皮跟
蹤的應(yīng)用的至少一個(gè)進(jìn)程并且包括如下步驟
-從被跟蹤的應(yīng)用的給定狀態(tài)起,錄入多個(gè)連續(xù)和相鄰的已錄入
序列,這些序列構(gòu)成執(zhí)行被跟蹤的應(yīng)用時(shí)的被研究序列;
-產(chǎn)生受控制的一連串重放步驟,由此產(chǎn)生對一連串已錄入序列 的受控制的執(zhí)行,因此根據(jù)受控制的節(jié)奏來產(chǎn)生對被研究序列的重 放。
在運(yùn)作管理函數(shù)內(nèi),本發(fā)明的一個(gè)目的還在于改進(jìn)用于4吏應(yīng)用 或者這些進(jìn)程中至少一個(gè)進(jìn)程的工作可靠化的工具。
可以從應(yīng)用向它的客戶端所提供的服務(wù)的觀點(diǎn)來看、特別地通 過維護(hù)該應(yīng)用的操作的已改進(jìn)的連續(xù)性來獲得這樣的可靠化。在發(fā) 生故障時(shí),這一連續(xù)性可能是整體上的,即客戶端不必重啟最少操 作以獲得同一服務(wù)。這樣的連續(xù)性還可以是部分的,即通過盡可能 地減少客戶端為了獲得同一服務(wù)或者這一服務(wù)的一部分而將必須重 復(fù)或者額外實(shí)現(xiàn)的操作的數(shù)目和/或復(fù)雜度。
在這一目的內(nèi),本發(fā)明提出實(shí)施如下運(yùn)作管理,該運(yùn)作管理用 以使在稱為集群的通信多計(jì)算機(jī)架構(gòu)的稱為操作節(jié)點(diǎn)的至少 一個(gè)主 要節(jié)點(diǎn)中執(zhí)行的稱為可靠化應(yīng)用的第一應(yīng)用的運(yùn)作可靠化。
這一可靠化包括在稱為備用節(jié)點(diǎn)的第二集群節(jié)點(diǎn)內(nèi)將稱為備用 應(yīng)用的第二應(yīng)用恢復(fù)到與可靠化應(yīng)用在重啟點(diǎn)處的狀態(tài)相對應(yīng)的狀態(tài)。
一見實(shí)施例而定或者一見情形而定,可以在沒有任何故障時(shí)并且作 為預(yù)防措施來完成恢復(fù),或者可以在檢測到故障之后根據(jù)先前存儲 的數(shù)據(jù)來執(zhí)行恢復(fù)。
這一可靠化還包括如下步驟
-錄入可靠化應(yīng)用從重啟點(diǎn)起的執(zhí)行,并且在操作節(jié)點(diǎn)外部在至 少一個(gè)日志文件中存儲已錄入事件;
-檢測在操作節(jié)點(diǎn)內(nèi)的故障;
-使用所述日志文件在備用應(yīng)用中重放自重啟點(diǎn)起在可靠化應(yīng) 用中錄入的事件,由此將備用應(yīng)用恢復(fù)到與可靠化應(yīng)用在最后的已 錄入事件之后的狀態(tài)相對應(yīng)的狀態(tài)。
本發(fā)明還提出如下系統(tǒng),該系統(tǒng)包括實(shí)施這樣的管理方法的計(jì) 算機(jī)或者在一起工作并且包括至少一個(gè)這樣的計(jì)算機(jī)的計(jì)算機(jī)網(wǎng) 絡(luò)。
更特別地,本發(fā)明提出這樣一種使用如下中間件型應(yīng)用的網(wǎng)絡(luò), 該中間件型應(yīng)用實(shí)施根據(jù)本發(fā)明的方法以管理在所述網(wǎng)絡(luò)內(nèi)執(zhí)4亍的 至少一個(gè)應(yīng)用的運(yùn)作。
本發(fā)明特別地適用于如下"中間件"型環(huán)境,該"中間件"型環(huán)境例 如產(chǎn)生分布于一個(gè)或者多個(gè)網(wǎng)絡(luò)中的網(wǎng)絡(luò)和/或應(yīng)用管理系統(tǒng)。
根據(jù)絕非限制性的對方法實(shí)施例的具體描述以及附圖,本發(fā)明
的其它特征和優(yōu)點(diǎn)將變得明顯,在附圖中
-圖1是圖示了實(shí)施本發(fā)明的中間應(yīng)用的功能架構(gòu)的符號-圖2是概括了用于在操作節(jié)點(diǎn)上錄入事件的組織的符號-圖3是圖示了從操作節(jié)點(diǎn)錄入外部事件并且在輔節(jié)點(diǎn)上對其 進(jìn)行備份的操作的符號-圖4是圖示了從操作節(jié)點(diǎn)錄入內(nèi)部事件并且在輔節(jié)點(diǎn)上對其 進(jìn)行備份的操作的符號-圖4a和圖4b圖示了對來自內(nèi)部事件序列的錄入數(shù)據(jù)的聚集式 傳輸?shù)?一種機(jī)制的兩個(gè)操作版本;
-圖5是圖示了在輔節(jié)點(diǎn)上在更新重啟應(yīng)用的同時(shí)對已錄入外 部事件的重放運(yùn)作的符號-圖6是圖示了在輔節(jié)點(diǎn)上在更新重啟應(yīng)用的同時(shí)對內(nèi)部事件 的重放運(yùn)作的符號-圖7是在對系統(tǒng)例程的調(diào)用過程中使用插入技術(shù)將補(bǔ)充指令
插入到所述例程的執(zhí)行中的符號-圖8是圖示了用于兩個(gè)并發(fā)進(jìn)程的內(nèi)部事件重放的進(jìn)度的時(shí) 間圖,其中利用在系統(tǒng)例程中添加補(bǔ)充指令來獲得與在錄入過程中 相同的進(jìn)度;
-圖8a和圖8b圖示了為了僅處理非確定性事件而錄入和重放內(nèi) 部事件的操作;
-圖8c和圖8d是分別圖示了通過試探性壓縮和解壓縮對內(nèi)部錄 入的優(yōu)化的示-圖9和圖IO是圖示了如下例子的符號圖,該例子在操作節(jié)點(diǎn) 上的數(shù)個(gè)并發(fā)進(jìn)程中在兩個(gè)外部事件之間的內(nèi)部事件的不同調(diào)度過 程中通過試探性壓縮來優(yōu)化非確定性內(nèi)部事件的錄入;
-圖11是圖示了在"Unix"型的系統(tǒng)中"讀"例程的讀取操作的非 確定性的符號例程的一個(gè)行為的符號-圖13和圖14是圖示了在"Unix"型的系統(tǒng)中"選擇"例程和"輪 循"例程從操作系統(tǒng)的兩個(gè)竟?fàn)幮诺蓝M(jìn)行的在應(yīng)用中的數(shù)據(jù)接收 操作的非確定性的符號-圖15是圖示了通過動(dòng)態(tài)語義改變而變得具有確定性的該同一 例程的一個(gè)行為的符號-圖16是圖示了語義變化所用交互的示圖。
具體實(shí)施例方式
圖1圖示了實(shí)施本發(fā)明的中間應(yīng)用的功能架構(gòu)。 在集群內(nèi),AOP主應(yīng)用如事務(wù)應(yīng)用特別是通過不同形式的數(shù)據(jù) 輸入和輸出向用戶或者客戶端提供某一數(shù)目的服務(wù)。在該集群內(nèi), 這一應(yīng)用可以是單任務(wù)或者多任務(wù)(多進(jìn)程或者多線程)并且使用 某一數(shù)目的資源。特別地,這些資源可以是例如形式為工作存儲器 空間、共享式存儲器或者數(shù)據(jù)文件的數(shù)據(jù),或者可以是例如形式為信號標(biāo)志或者互斥體(mutex)的狀態(tài)指示符。
在一個(gè)或者多個(gè)計(jì)算機(jī)上執(zhí)行主應(yīng)用,這些計(jì)算機(jī)形成稱為操 作節(jié)點(diǎn)OP或者主要節(jié)點(diǎn)的節(jié)點(diǎn)。在一個(gè)或者多個(gè)集群節(jié)點(diǎn)中的一個(gè) 或者多個(gè)部分中扭J亍稱為中間應(yīng)用INT的運(yùn)作管理應(yīng)用。
才艮據(jù)實(shí)施例,這一 中間應(yīng)用可以處理在集群內(nèi)運(yùn)作的主應(yīng)用的 不同方面。這樣的中間應(yīng)用INT可以特別地與"中間件"型的中間集 群管理軟件相并行地工作、與這樣的中間件相集成或者本身是中間 件形式。
通過這里描述的功能,中間應(yīng)用INT可以特別地用來產(chǎn)生對集 群內(nèi)主應(yīng)用的全部或者一部分的復(fù)制。對主應(yīng)用的復(fù)制可以提供可 稱為重放應(yīng)用的另一應(yīng)用。
特別是與這樣的復(fù)制相聯(lián)系的這里描述的功能還允許實(shí)施針對 主應(yīng)用的可靠性特征,或者跟蹤或研究這一應(yīng)用以實(shí)施"調(diào)試"、調(diào) 節(jié)或者開發(fā)任務(wù)。針對可靠性實(shí)施的用途將例如包括作為備份或者 替換應(yīng)用的重啟應(yīng)用。在跟蹤或者調(diào)試中的用途將例如包括如下文 描述的根據(jù)已錄入事件的減緩或者受控節(jié)奏的事件的錄入JOP和/或 重放RSB。
因此,應(yīng)用于可靠性特征的實(shí)施例在這里僅作為非限制性例子 來描述。
在有規(guī)律的或者基于事件的、運(yùn)行將變得可靠的AOP主應(yīng)用時(shí) 的不同點(diǎn)(稱為重啟點(diǎn)或者"檢查點(diǎn)")處,中間應(yīng)用INT創(chuàng)建或者 更新在稱為輔節(jié)點(diǎn)或者"備用"SB節(jié)點(diǎn)的節(jié)點(diǎn)上執(zhí)行的至少一個(gè)重啟 應(yīng)用ASB。
這 一 重啟應(yīng)用例如通過 一 種捕獲和恢復(fù)應(yīng)用的復(fù)制方法(稱為 重啟方法)來創(chuàng)建或者更新。所述復(fù)制方法包括主應(yīng)用狀態(tài)的捕獲 操作CAP、接著是這一狀態(tài)(即它的進(jìn)程的狀態(tài)和它所使用的全部 或者部分資源的狀態(tài))的恢復(fù)操作RES。
在這樣的捕獲操作CAP過程中,以形成檢查點(diǎn)狀態(tài)EPR的數(shù)據(jù) 的形式來備份AOP主應(yīng)用的狀態(tài)。
主應(yīng)用的 一 些資源、特別是代表了存儲裝置如硬盤上的大量數(shù) 據(jù)的數(shù)據(jù)文件可以立刻被更新成在數(shù)個(gè)不同存儲介質(zhì)上的數(shù)個(gè)副 本,這些副本構(gòu)成了在鏡像盤或者共享盤上的重啟數(shù)據(jù)文件。在這 一情況下,形成檢查點(diǎn)狀態(tài)的數(shù)據(jù)可以包括構(gòu)成對這些重啟數(shù)據(jù)文 件的引用的信息。
當(dāng)檢查點(diǎn)設(shè)置或者復(fù)制是基于直接地或者通過引用重放數(shù)據(jù)文 件而包括全部執(zhí)行環(huán)境和主應(yīng)用資源的捕獲狀態(tài)時(shí),所述檢查點(diǎn)或 者所述復(fù)制可以稱為整體性的。
根據(jù)檢查點(diǎn)狀態(tài)EPR的數(shù)據(jù),中間應(yīng)用INT可以通過創(chuàng)建或者 更新重啟應(yīng)用ASB來實(shí)施恢復(fù)RES。可以有*見律地或者在發(fā)起事件 時(shí)(例如在管理員或者在用于管理集群工作量的機(jī)制的請求下)實(shí) 施所述恢復(fù)。這 一 恢復(fù)還可以在借助檢測而檢測至'j的操作節(jié),泉的故 障之后來實(shí)施,重啟應(yīng)用隨后能夠用作永久或者非永久備份應(yīng)用。
到一個(gè)或者多個(gè)重啟應(yīng)用。為了對于客戶端而言透明地進(jìn)行這一切 換,中間應(yīng)用可以4吏用如下插入方法,該方法通過"元進(jìn)程
應(yīng)用遷移到這些重啟應(yīng)用。中間應(yīng)用還可以z使用如下插入方法,該 方法通過"元進(jìn)程"來管理虛擬進(jìn)程標(biāo)識(虛擬PID),從而允許與這 些重啟或者克隆進(jìn)程的原進(jìn)程的通信相同地恢復(fù)用于這些重啟或者 克隆進(jìn)程的通信。
這些才支術(shù)例如可以是在專利FR2 843 210中描述的那些4支術(shù)。 除了任何故障之外還可以實(shí)施在部分或者全部切換之后的恢復(fù) 以便例如分散主應(yīng)用的工作量或者允許維護(hù)操作節(jié)點(diǎn)或者網(wǎng)絡(luò)的某 些單元。
為了使這一故障和/或者切換從客戶端的觀點(diǎn)來看盡可能地透 明,中間應(yīng)用記錄影響主應(yīng)用數(shù)個(gè)檢查點(diǎn)的所有或者部分事件,并 且以一個(gè)或者數(shù)個(gè)"日志"的形式來備份它們。
在從檢查點(diǎn)狀態(tài)完成恢復(fù)時(shí),重啟應(yīng)用處于在建立所述檢查點(diǎn)
時(shí)的主應(yīng)用的狀態(tài)下。乂人這一狀態(tài)開始,中間應(yīng)用^f吏用自所述4企查 點(diǎn)起備份過的日志來使重啟應(yīng)用重新執(zhí)行或者重放自這一檢查點(diǎn)起 在主應(yīng)用中已經(jīng)發(fā)生的事件。實(shí)施這一重新執(zhí)行或者重放,使得重 啟應(yīng)用達(dá)到主應(yīng)用在最后備份的事件之后這一狀態(tài),例如達(dá)到緊接 在故障之前的狀態(tài)。
中間應(yīng)用還可以針對重啟應(yīng)用例如在這些資源自已恢復(fù)的檢查 點(diǎn)起已經(jīng)有變化時(shí)來實(shí)施這些資源的虛擬化,以便允許該重啟應(yīng)用 運(yùn)行它的重新執(zhí)行而不千擾這些資源的實(shí)際狀態(tài),只要它尚未返回 到與所述實(shí)際狀態(tài)相對應(yīng)的狀態(tài)。
在將要在操作節(jié)點(diǎn)上錄入并且將要在輔節(jié)點(diǎn)上重放的事件之 中,在稱為外部事件的事件與稱為內(nèi)部事件的事件之間有區(qū)別。
在主應(yīng)用發(fā)生時(shí),外部事件被定義為在所討論的應(yīng)用外部。因 此,外部事件一皮定義為在應(yīng)用中通過從這一應(yīng)用之外而來(即特別 是從它所不控制的硬件或者軟件單元而來)的動(dòng)作或者信息來發(fā)起 的那些事件。這些外部事件可以采取數(shù)據(jù)或者信號輸入的形式,例 如硬件接口輸入如鍵盤或者鼠標(biāo),或者經(jīng)由網(wǎng)絡(luò)到達(dá)并且從外界(比 如在客戶端-服務(wù)器應(yīng)用的情況下是客戶端)而來的數(shù)據(jù)。最常見地,
不能從該應(yīng)用的環(huán)境來推斷或者重新創(chuàng)建這些外部事件。這些外部 事件由主應(yīng)用加以錄入并且可以由重啟應(yīng)用加以重放。
如果所討論的應(yīng)用(有時(shí)稱為目標(biāo)應(yīng)用)并入有在除主要節(jié)點(diǎn) 以外的節(jié)點(diǎn)上執(zhí)行的單元,則在所述應(yīng)用中但是在主要節(jié)點(diǎn)外部的 事件也可以作為外部事件來處理。
內(nèi)部事件;^皮定義為在主應(yīng)用內(nèi)部或者在執(zhí)行它的節(jié)點(diǎn)內(nèi)部,例
如形式為由這一應(yīng)用的進(jìn)程所接收并且乂人也作為該應(yīng)用的 一部分的 另 一進(jìn)程而來的數(shù)據(jù)或者信號輸入。這些內(nèi)部事件可以直接地或者
代理來^妄收,例如通過配對應(yīng)用(partner application )或者才喿作系統(tǒng) 的一部分(比如來自Unix型系統(tǒng)的"進(jìn)程間通信"(IPC)代理)來 接收。這些內(nèi)部事件可以包括"消息傳遞事件"或者"套接字"型的接
口 ,該"消息傳遞事件"例如來自"管道"、"信號隊(duì)列"或者"消息隊(duì)列"。 這些內(nèi)部事件還可以包括"共享式存儲器存取"事件,例如信號標(biāo)志
或者"互斥體"。
在應(yīng)用正在運(yùn)行的同時(shí),內(nèi)部事件例如相比于外部事件而言特 別地多。另外,尤其當(dāng)錄入操作包括網(wǎng)絡(luò)傳輸或者在永久介質(zhì)如硬 盤上存儲時(shí),特別是與用于錄入操作的時(shí)間相比,內(nèi)部事件對應(yīng)于 快速執(zhí)行或者低延時(shí)的操作。例如,錄入操作可以代表內(nèi)部事件持
續(xù)時(shí)間的10至10,000倍的持續(xù)時(shí)間。
如圖2中所示,自檢查點(diǎn)起已經(jīng)發(fā)生的事件的錄入JOP以與針 對外部和內(nèi)部事件不同的方式來實(shí)施并且#皮分別地備^f分。
通過網(wǎng)絡(luò)連接到集群的操作節(jié)點(diǎn)OP包括支持系統(tǒng)空間的硬件 空間,該系統(tǒng)空間本身支持稱為"用戶空間"的空間??梢酝ㄟ^參照 OSI模型的 一個(gè)或者多個(gè)低層來定義的硬件空間特別地包括用于執(zhí) 行進(jìn)程、實(shí)際存儲器和處理器以及通信的硬件設(shè)備,比如網(wǎng)卡。通 常,很多外部事件以經(jīng)由網(wǎng)絡(luò)而傳遞的通信的形式經(jīng)由硬件空間來 中轉(zhuǎn)。
可以參照OSI模型的一個(gè)或者多個(gè)中間層來定義的系統(tǒng)空間特
別地包括操作系統(tǒng)。這一 系統(tǒng)空間包括各種軟件機(jī)制和代理,這些
軟件機(jī)制和代理管理例如形式為Unix系統(tǒng)中的套接字的從應(yīng)用經(jīng)由 硬件空間與外界的通信或者管理例如形式為Unix系統(tǒng)中的"管道"或 者IPC的在數(shù)個(gè)應(yīng)用進(jìn)程之間的通信。
可以參照OSI模型的一個(gè)或者多個(gè)最高層來定義的用戶空間包 括作為由節(jié)點(diǎn)才丸4亍的如主應(yīng)用和中間應(yīng)用之類的各種應(yīng)用的一部分 的進(jìn)程。在這一用戶空間中執(zhí)行作為如主應(yīng)用之類的 一個(gè)或者多個(gè) 應(yīng)用的一部分的數(shù)個(gè)進(jìn)程Pl、 P2和Pn。這些進(jìn)程通過來自系統(tǒng)空 間的一個(gè)或者多個(gè)"套接字"與外部交換信息以及通過來自系統(tǒng)空間 的一個(gè)或者多個(gè)"管道"在它們自己之間交換信息。這些進(jìn)程中的一 些進(jìn)程還同時(shí)以受狀態(tài)資源(未示出)管理的方式來訪問"共享式存 儲器"資源SHM。
當(dāng)設(shè)置檢查點(diǎn)時(shí),中間應(yīng)用可以起動(dòng)一個(gè)或者多個(gè)新日志或者
在正在運(yùn)行的記錄中記錄"檢查點(diǎn)標(biāo)記"。
應(yīng)當(dāng)注意,術(shù)語"用戶,,(特別是在"用戶空間"或者內(nèi)部事件日志
("用戶日志,,)(稍后描述)的情況下)在這里取"系統(tǒng)空間用戶"
的意思。這意味著即使用戶空間不可直接地為個(gè)人或者與使用節(jié)點(diǎn)
的應(yīng)用通信并且于是將被定義為"客戶端"的計(jì)算機(jī)所訪問,這一用 戶空間也可為這些應(yīng)用以及它的才乘作系統(tǒng)所訪問。
在稱為"內(nèi)核日志"(參見圖2)的由一個(gè)或者多個(gè)文件KL組 成的日志中備份外部事件。為了實(shí)施這一備份,在OSI國際分類的 低級層處在代表這些事件的數(shù)據(jù)到達(dá)節(jié)點(diǎn)之后讀取它。優(yōu)選地,在 被解復(fù)用之前并且在被"協(xié)議棧"處理之前,在系統(tǒng)空間中、例如在 內(nèi)核中讀取這些事件。由于直接地從系統(tǒng)空間內(nèi)部進(jìn)4亍這一錄入, 所以有可能避免由于對緩沖器的寫入以及不必要的上下文改變所造 成的性能損失。
圖3更特別地圖示了特別是當(dāng)外部事件采取TCP-IP協(xié)議消息的 形式時(shí)錄入外部事件的操作。主應(yīng)用在操作節(jié)點(diǎn)OP上^L執(zhí)行并且包 括至少一個(gè)進(jìn)程P1。中間應(yīng)用首先包括"IplogOP"模塊,該模塊包括 在操作節(jié)點(diǎn)OP上執(zhí)行的控制進(jìn)程CtlOP,其次包括"IPlogSB"模塊, 該模塊包括在輔節(jié)點(diǎn)SB上執(zhí)行的控制進(jìn)程CtlSB。在這些節(jié)點(diǎn)OP 和SB中的各節(jié)點(diǎn)上,控制進(jìn)程配置和管理在所討論的節(jié)點(diǎn)的系統(tǒng)空 間中執(zhí)行的軟件機(jī)制或者代理"disp" (DISPP, DISPS)的操作。
在Unix型系統(tǒng)的情況下,所述"disp"代理特別地包括加載到系 統(tǒng)空間中的內(nèi)核模塊。這一 內(nèi)核模塊在系統(tǒng)被引導(dǎo)時(shí)或者甚至在起 動(dòng)待管理或者待變得可靠的應(yīng)用之前被動(dòng)態(tài)地加載到內(nèi)核中。乂人功 能結(jié)構(gòu)的觀點(diǎn)來看,例如參照OSI層,在IP層之下、特別是在IP 層與視硬件空間而定的"網(wǎng)絡(luò)設(shè)備"層之間插入這一模塊。
在根據(jù)需要進(jìn)行發(fā)送或者接收的操作下,這一 "disp"代理可以在 消息文件QOP和QSB中截獲和存儲從網(wǎng)絡(luò)接收并且發(fā)往TCP層的 消息。
在步驟1中,來自客戶端、發(fā)往進(jìn)程Pl的消息由在操作節(jié)點(diǎn)
OP的系統(tǒng)空間中的"disp"代理接收,該代理在消息隊(duì)列QOP中保持 它。
在步驟2中,代表接收消息的錄入消息由"DISPP"代理從主要節(jié) 點(diǎn)發(fā)送到輔節(jié)點(diǎn)SB,其中DISPS代理在接收消息隊(duì)列QSB中接收 它。
操作節(jié)點(diǎn)OP可以特別地通過使用與用來與客戶端通信的網(wǎng)絡(luò) 設(shè)備不同的網(wǎng)絡(luò)設(shè)備、通過分立局域網(wǎng)(LAN)與一個(gè)或者多個(gè)輔 節(jié)點(diǎn)SB通信。
這些輔節(jié)點(diǎn)中的數(shù)個(gè)節(jié)點(diǎn)還能夠根據(jù)RFC 1112標(biāo)準(zhǔn)預(yù)訂"多播" 型的地址以j更與操作節(jié)點(diǎn)OP通信。例如按照RFC 1112的定義("Host Extensions for IP Multicasting")(針對IP多播的主擴(kuò)展),將多播 地址用作范圍在224.0.0.0與239.255.255.255之間的IP地址,由此 允許操作節(jié)點(diǎn)僅發(fā)送一次同時(shí)發(fā)往多個(gè)輔節(jié)點(diǎn)的消息而不會因向網(wǎng) 絡(luò)中的所有地址發(fā)送的傳輸而使網(wǎng)絡(luò)超負(fù)荷。優(yōu)選地,從節(jié)點(diǎn)OP發(fā)送到另一節(jié)點(diǎn)SB的錄入消息應(yīng)當(dāng)以它們
的原有形式包含在物理層級接收的所有一個(gè)或者多個(gè)分組。也就是 說,它包含發(fā)往主應(yīng)用的所有數(shù)據(jù)以及網(wǎng)絡(luò)數(shù)據(jù)如以太網(wǎng)、IP和TCP 報(bào)頭。
在步驟3中,輔節(jié)點(diǎn)SB將確認(rèn)消息發(fā)送到操作節(jié)點(diǎn)OP。
在步驟4中,在操作節(jié)點(diǎn)OP上并且一旦已經(jīng)接收到對應(yīng)的確認(rèn), 就從消息隊(duì)列QOP獲取消息并且將該消息發(fā)送到TCP層。
在并行步驟4,中,輔節(jié)點(diǎn)SB在日志如內(nèi)核外部事件日志KL中 記錄消息并且從接收消息隊(duì)列QSB中取出它。
在步驟5中,在操作節(jié)點(diǎn)OP中,主應(yīng)用的PI進(jìn)程讀取"套接字" 單元中的消息,然后對它進(jìn)行處理以便進(jìn)行它的纟乘作。
由于主應(yīng)用在輔節(jié)點(diǎn)SB的確認(rèn)之后才考慮進(jìn)入消息,所以本發(fā) 明保證了未錄入的消息不能被應(yīng)用所處理。例如,因此這樣的未讀 消息可以通過TCO協(xié)議的重新傳輸功能來獲取。
如果要在內(nèi)核日志中設(shè)置檢查點(diǎn)標(biāo)記,則在輔節(jié)點(diǎn)中的控制進(jìn)
程CtlSB就在那里記錄代表所述檢查點(diǎn)標(biāo)記的數(shù)據(jù)。
內(nèi)部事件的內(nèi)容直接地取決于局部環(huán)境,即在節(jié)點(diǎn)內(nèi)取決于先 前外部事件的內(nèi)容以及取決于在處理器內(nèi)調(diào)度的問題或者管理在節(jié)
點(diǎn)內(nèi)并行工作的多個(gè)處理器或者計(jì)算機(jī)的問題。事實(shí)上,在多數(shù)情 況下,只有這些事件的次序才影響應(yīng)用的后續(xù)行為。
中間應(yīng)用INT被約束為錄入這些內(nèi)部事件的次序而不記下各內(nèi) 部事件的細(xì)節(jié)或者參數(shù)。這一選擇由此允許減少將要為這些內(nèi)部事 件的錄入JOP而存儲的數(shù)據(jù)量并且由此最小化因這一錄入而在操作 節(jié)點(diǎn)和主應(yīng)用中引起的性能損失。
在稱為"用戶日志"的由一個(gè)或者多個(gè)文件組成的日志(見圖2) 中備份內(nèi)部事件。
如圖4中所示,主要節(jié)點(diǎn)OP和輔節(jié)點(diǎn)SB經(jīng)由硬件和/或軟件高 速互連(HSI)來通信。所述HSI系統(tǒng)允許在主要節(jié)點(diǎn)的OP錄入進(jìn) 程PlogOP與輔節(jié)點(diǎn)的SB錄入進(jìn)程PlogSB之間的數(shù)據(jù)傳送,而這直 接地通過旁路這兩個(gè)節(jié)點(diǎn)的所有或者部分操作系統(tǒng)來實(shí)現(xiàn)??梢酝?過使用現(xiàn)有網(wǎng)絡(luò)接口控制器如網(wǎng)卡及其控制軟件、遵循已知的手段 來實(shí)施這樣的HSI系統(tǒng)。還可以通過與在集群內(nèi)部的網(wǎng)絡(luò)的其余部 分相并行或者相組合地使用高性能網(wǎng)絡(luò)設(shè)備來實(shí)施這樣的HSI系 統(tǒng)。
由中間應(yīng)用的錄入進(jìn)程PlogOP在操作節(jié)點(diǎn)的OP用戶空間中詳 查和讀取內(nèi)部事件。這一進(jìn)程隨后經(jīng)由高速連4妄系統(tǒng)HSI向輔節(jié)點(diǎn) 的錄入進(jìn)程PlogSB發(fā)送代表這些內(nèi)部事件和/或它們的發(fā)生次序的 數(shù)據(jù)。然后在形成"用戶日志"的一個(gè)或者多個(gè)文件中備份這一數(shù)據(jù)。
如果將要在"用戶日志"中設(shè)置檢查點(diǎn)標(biāo)記,則輔節(jié)點(diǎn)的控制進(jìn)程
PlogSB就在那里記錄代表這一4企查點(diǎn)標(biāo)記的數(shù)據(jù)。
優(yōu)選地,錄入進(jìn)程PlogOP在內(nèi)部事件"返回"時(shí)、即當(dāng)它的結(jié)果 已經(jīng)產(chǎn)生但是尚未發(fā)送到請求它的執(zhí)行的主應(yīng)用進(jìn)程時(shí)讀取它們。
例如通過截獲輸入/輸出系統(tǒng)調(diào)用(例如對"管道的"訪問)以及
對用以鎖定共享式存儲器段SHM的操作的響應(yīng)來完成這一讀取。
可以通過在由系統(tǒng)提供并且由應(yīng)用調(diào)用的所有或者部分例程的 內(nèi)容中插入記錄指令("記錄探針")來實(shí)施這一截獲。如稍后具體 說明的,通過使用運(yùn)用"元進(jìn)程"的動(dòng)態(tài)插入技術(shù),以附加指令的形 式來添加這些記錄探針,在如圖7中所示原例程代碼的結(jié)尾處形成 結(jié)尾部分(epilogue)。
內(nèi)部事件日志"用戶日志"由此包括各自代表內(nèi)部事件的一連串 記錄。這些記錄可以在單個(gè)文件中被錄入,并且于是將包括所討論 的資源和/或進(jìn)程的標(biāo)識。它們還可以記錄于數(shù)個(gè)文件中,例如4十對 每個(gè)資源或者每個(gè)進(jìn)程或者這二者的每個(gè)組合記錄一個(gè)文件。
對于與給定資源相對應(yīng)的文件,這些記錄中的每一個(gè)特別地包 括如下字段
-所討論的事件在各資源所特有的序列中的序號,該序號隨著各 新事件或者在所述資源上的操作而遞增;
-時(shí)間戳信息,例如代表自關(guān)于這一資源的最后事件起的逝去時(shí)
間;
-事件類型,例如針對輸入/輸出資源("I/O")的"讀"或者"寫" 或者針對信號標(biāo)志的"鎖定"或者"解鎖";
-結(jié)果,即在輸入/輸出操作的情況下為一個(gè)值或者在"鎖定"的 情況下為獲得獨(dú)占性訪問的 一個(gè)進(jìn)程的標(biāo)識。
這一結(jié)果將特別地用來例如在輔節(jié)點(diǎn)中所恢復(fù)的重啟或者備用 應(yīng)用對日志中的事件的重放過程中實(shí)施資源虛擬化。所存儲的結(jié)果 隨后將構(gòu)成將被強(qiáng)制作為在重放過程中進(jìn)行的I/O操作請求之結(jié)果 的值或者構(gòu)成在獲得"鎖定"的任務(wù)的情況下的進(jìn)程的虛擬標(biāo)識(虛 擬ID )。
為了限制由于從操作節(jié)點(diǎn)發(fā)送錄入數(shù)據(jù)到一個(gè)或者多個(gè)輔節(jié)點(diǎn) 而造成的性能損失,聚集對代表數(shù)個(gè)內(nèi)部事件的數(shù)據(jù)的發(fā)送是有用 的。
為此,中間應(yīng)用可以4吏用例如由操作節(jié)點(diǎn)OP的稱為主要錄入進(jìn)
程的錄入進(jìn)程PlOgOP實(shí)施的數(shù)個(gè)不同方法的組合。
應(yīng)當(dāng)理解,應(yīng)用的內(nèi)部變化對外界而言(例如對它的客戶端而 言)是不重要的,只要這一操作沒有發(fā)送任何信息到外界。如果曰 志不包括自已錄入主應(yīng)用所發(fā)送的最后的外部消息起已經(jīng)發(fā)生的內(nèi) 部事件,則從檢查點(diǎn)和所述日志恢復(fù)的重啟應(yīng)用將不會造成它為外 界提供的服務(wù)的任何中斷。
根據(jù)第 一方式,這一主要錄入進(jìn)程PlogOP如內(nèi)部錄入數(shù)據(jù)出現(xiàn)
的那樣但是在異步模式下并且根據(jù)傳輸可用性來發(fā)送它而不阻斷主 應(yīng)用運(yùn)作,只要主應(yīng)用運(yùn)作不發(fā)送外部消息。在主應(yīng)用接下來發(fā)送 外部消息時(shí),檢測裝置向主要錄入進(jìn)程警告這一點(diǎn),該主要錄入進(jìn) 程隨后阻斷或者掛起這一外部消息的發(fā)送并且可能阻斷或者掛起主 應(yīng)用的一個(gè)或者多個(gè)進(jìn)程的執(zhí)行。然后維持這一阻斷直至所有內(nèi)部 錄入數(shù)據(jù)都已經(jīng)通過這一異步傳輸來發(fā)送或者直至它已經(jīng)收到針對 所述數(shù)據(jù)的回執(zhí)。
根據(jù)第二方式,主要錄入進(jìn)程PlogOP在緩沖器或者"高速緩存" 中存儲代表數(shù)個(gè)連續(xù)內(nèi)部事件的內(nèi)部錄入數(shù)據(jù)而不立即將這些數(shù)據(jù) 發(fā)送到輔節(jié)點(diǎn)的錄入進(jìn)程PlogSB。它僅在這些數(shù)據(jù)的數(shù)目達(dá)到i殳定 閾值時(shí)或者當(dāng)應(yīng)用必須發(fā)送稱為外部消息的消息到外界(例如發(fā)往 客戶端或者外部進(jìn)程的數(shù)據(jù)或者信號)時(shí)才發(fā)送它們。在主應(yīng)用接 下來發(fā)送外部消息的過程中,檢測裝置向主要錄入進(jìn)程警告這一 點(diǎn), 該主要錄入進(jìn)程隨后阻斷或者掛起這一外部消息的發(fā)送并且可能阻 斷或者掛起主應(yīng)用的一個(gè)或者多個(gè)進(jìn)程的執(zhí)行。然后維持這一阻斷 直至主要錄入進(jìn)程已經(jīng)向輔節(jié)點(diǎn)發(fā)送高速緩存中的其余錄入數(shù)據(jù)或 者直至它已經(jīng)收到針對這一數(shù)據(jù)的回執(zhí)。
在這兩種方式下,已經(jīng)發(fā)送外部消息這一事實(shí)構(gòu)成了發(fā)出事件, 該事件構(gòu)成了可以稱為阻斷的 一類事件,即該事件類型要求在這一 事件的執(zhí)行之前關(guān)閉先前事件的錄入。根據(jù)實(shí)施例,最常見地,除 了外部發(fā)出事件之外,也可以將其它類型的事件類型選擇為阻斷。
圖4a圖示了在主要節(jié)點(diǎn)OP外部的傳輸之前通過聚集用于多個(gè)
內(nèi)部事件EVI的錄入數(shù)據(jù)DJ來進(jìn)行的對事件日志的操作。
在步驟1中,錄入進(jìn)程PlogOP在已錄入進(jìn)程Pl的運(yùn)行過程中 檢測事件EVI的發(fā)生。
在步驟2中,錄入進(jìn)程PlogOP檢查所檢測的事件EVI是否為必 須浮見為阻斷的類型。
在步驟3中,如果事件EVI不是阻斷類型,則這一事件的錄入 產(chǎn)生錄入數(shù)據(jù)項(xiàng)DJ。
在步驟4中,這一錄入數(shù)據(jù)項(xiàng)DJ在等待下一事件的檢測之前以 構(gòu)成緩沖器日志JSlLocal的有序結(jié)構(gòu)而存儲于主要節(jié)點(diǎn)OP中。
在階段5中,如果檢測的事件EVI是阻斷類型,則錄入進(jìn)程 PlogOP實(shí)施如下階段,該階段關(guān)閉先前在緩沖器日志JSlLocal中錄 入的內(nèi)部事件的運(yùn)行序列。
這一階段5包括步驟6,其中掛起已錄入進(jìn)程PI的執(zhí)行,從而 使關(guān)閉階段5令人滿意的執(zhí)行未決。
這一階段5還包括步驟7,其中主要節(jié)點(diǎn)的錄入進(jìn)程PlogOP將 緩沖器日志JSlLocal的內(nèi)容發(fā)送到輔節(jié)點(diǎn)的錄入進(jìn)程PlogSB,該錄 入進(jìn)程PlogSB將它存儲于與檢測的事件EVI有關(guān)的日志JSeml中, 接著是先前的數(shù)據(jù)。主要錄入進(jìn)程PlogOP隨后繼續(xù)直接錄入所檢測 的事件EVI,如果這一事件也是內(nèi)部事件則重啟緩沖器序列。
在圖4b中所示的變型中,內(nèi)部事件的緩沖可以通過可能不同于 阻斷型事件的多種類型的事件來發(fā)起。這于是涉及到發(fā)起類型的事 件。單一類型的事件可以選擇為僅阻斷類型或者僅發(fā)起類型或者兼 而有之。
在這一變型中,在檢測事件的步驟1之后是步驟bl。在這一步 驟M中,如果檢測的事件EVI是被視為發(fā)起的類型,則主要錄入進(jìn) 程PlogOP檢查用于在緩沖器存儲器中錄入的當(dāng)前序列SEQC是否在 進(jìn)行中,而如果不是這種情況則發(fā)起一個(gè)序列SEQC。
在后續(xù)步驟b2中,它測試用于在緩沖器存儲器中錄入的這樣的 當(dāng)前序列SEQC對于檢測的事件EVI而言是否在進(jìn)行中。
在步驟b3中,如果沒有當(dāng)前緩沖器序列SEQC對于這一EVI事 件而言是活動(dòng)的,則它的結(jié)果作為錄入數(shù)據(jù)項(xiàng)DJ來錄入。
在步驟b4中,于在前錄入數(shù)據(jù)項(xiàng)之后,所述錄入lt據(jù)項(xiàng)DJ被 發(fā)送到輔錄入進(jìn)程PlogSB,該錄入進(jìn)程將它存儲在那些在與檢測的 EVI事件有關(guān)的日志文件JSeml中在前的內(nèi)容之后。主要錄入進(jìn)程 PlogOP隨后等待新事件的^r測。
根據(jù)步驟b2,如果當(dāng)前序列對于檢測的事件EVI而言是活動(dòng)的, 則這一事件的錄入如圖4a中所示那樣繼續(xù)。
當(dāng)中間應(yīng)用想要將所有或者 一 些服務(wù)從主應(yīng)用切換到重啟應(yīng)用 時(shí),它通過在脫離4全查點(diǎn)狀態(tài)的輔節(jié)點(diǎn)中重啟這一重啟應(yīng)用來開始, 隨后實(shí)施自這一在后檢驗(yàn)點(diǎn)起錄入的事件的重放。
特別地,對于由事件驅(qū)動(dòng)(即因發(fā)起事件(外部)而驅(qū)動(dòng))的 主應(yīng)用,例如事務(wù)應(yīng)用,以對于外部事件和內(nèi)部事件來說不同的方 式來實(shí)施恢復(fù)重》文。
這樣的運(yùn)作對于應(yīng)用而言意味著它包括至少 一 個(gè)進(jìn)程,該進(jìn)程 可以保持等待接收外部事件并且在此時(shí)通過實(shí)施包括內(nèi)部事件的梯: 作來進(jìn)4于反應(yīng)。
重放由此包括向應(yīng)用主動(dòng)提供已錄入的外部事件,以及進(jìn)行響 應(yīng)于在重放過程中由重啟應(yīng)用自身創(chuàng)建的內(nèi)部事件而提供已錄入答 復(fù)的纟皮動(dòng)響應(yīng)。
圖5圖示了在構(gòu)成外部文件或者"內(nèi)核日志"的一個(gè)或者多個(gè)文 件KL中錄入的TCP消息型外部事件的重放RSB的才喿作。
所述內(nèi)核日志KL由重i文進(jìn)程PRE使用,該重》文進(jìn)程屬于中間 應(yīng)用并且在輔節(jié)點(diǎn)SB的用戶空間中被執(zhí)行,以i更將先前已錄入的 TCP消息重新注入到重啟應(yīng)用的進(jìn)程PB1中。
為了實(shí)施這一重新注入,中間應(yīng)用INT包括或者4吏用例如以軟 件機(jī)制或者代理"ipfilter"的形式插入于TCP消息接收層中的軟件機(jī) 制或者代理,該軟件機(jī)制或者代理包括在IP層與TCP層之間的功能 內(nèi)核模塊。輔節(jié)點(diǎn)還包括用于BL網(wǎng)絡(luò)的本地環(huán)路功能,其中對該功
能的訪問通過接口來"映射"到系統(tǒng)中,以便可由用戶空間進(jìn)程訪問。
與在操作系統(tǒng)如Unix中由軟件實(shí)施的虛擬環(huán)回接口相對照,這一環(huán) 路BL可以特別地包括在硬件空間內(nèi)的物理設(shè)備,這允許它在IP層 的底部重新注入數(shù)據(jù)。
在步驟1中,重放進(jìn)程PRE讀取在"內(nèi)核日志"KL的文件中錄入 的消息。
在步驟2中,重放進(jìn)程PRE將這一消息注入到網(wǎng)絡(luò)本地環(huán)^各BL中。
在步驟3中,這一消息由IP層接收,該IP層經(jīng)由"ipfilter"代理 的i某介作用將它發(fā)送到TCP層以供處理。
在步驟4中,如果TCP層向網(wǎng)絡(luò)發(fā)送回執(zhí),則網(wǎng)絡(luò)將被"ipfilter" 代理過濾或者阻斷。
在步驟5中,在已經(jīng)發(fā)送消息到TCP層之后,在已經(jīng)收到它的 回執(zhí)(如果有的話)之后,"ipfilter"代理向重放進(jìn)程PRE發(fā)送如下 信號該消息確實(shí)已經(jīng)被TCP層接收或者處理。
在步驟6中,重啟應(yīng)用進(jìn)程PB1從TCP層接收消息,并且實(shí)施 對該消息中包含的 一 個(gè)或者多個(gè)分組的異步讀取。
在整個(gè)重放過程中,"ipfilter"代理將重啟應(yīng)用與網(wǎng)絡(luò)相隔離,同 時(shí)防止所有外部消息一直到達(dá)TCP層并且同時(shí)防止重啟應(yīng)用所發(fā)送 的所有消息到達(dá)IP層,這些對于這一應(yīng)用而言是透明地進(jìn)行的。
在重放應(yīng)用內(nèi),為了實(shí)施在兩個(gè)重放的外部事件之間發(fā)生的內(nèi) 部事件的重放,中間應(yīng)用允許重啟應(yīng)用自行運(yùn)行,同時(shí)為它虛擬化 有關(guān)資源,由此實(shí)施被動(dòng)重放。重放進(jìn)程PRI隨后檢測關(guān)于給定資 源而言構(gòu)成內(nèi)部事件的各操作,由此強(qiáng)制所述資源采取已經(jīng)被錄入 的行為,由此向重放應(yīng)用發(fā)送在這一錄入過程中為所述事件而存儲 的結(jié)果。
圖6至圖8圖示了在如下情況下內(nèi)部事件的重放RSB例子,其 中該例子包括來自重啟應(yīng)用的兩個(gè)進(jìn)程PB1和PB2的操作,該操作 請求信號標(biāo)志SEM1以便獲得對共享式資源如共享式存儲器區(qū)的相
互獨(dú)占性訪問。
在輔節(jié)點(diǎn)SB上的恢復(fù)過程中,這兩個(gè)進(jìn)程PB1、 PB2基于構(gòu)成 用戶日志的文件來實(shí)施重^:。在它們的重》文過程中,重啟應(yīng)用的執(zhí) 行使這些進(jìn)程中的各進(jìn)程進(jìn)行對與在內(nèi)部事件日志-"用戶日志"中包 含的日志文件JSEM1相對應(yīng)的單個(gè)信號標(biāo)志SEM1的調(diào)用。
通過使用借助"元進(jìn)程"的動(dòng)態(tài)插入技術(shù)在由系統(tǒng)所提供并且由 應(yīng)用所調(diào)用的所有或者部分例程的內(nèi)容中添加附加指令來實(shí)施這些 訪問操作的檢測以及呈現(xiàn)它們的響應(yīng)。這樣的技術(shù)例如可以是在專 利FR 2 843 809中描述的技術(shù)。特別地,可以在實(shí)施來自原例程的 功能的代碼之前聚集這些指令,并且這些指令由此形成前序程序 (prologue),或者在這一代碼之后聚集這些指令,并且這些指令形 成收尾程序(epilogue)。
圖7由此圖示了在例程R內(nèi)插入前序程序和收尾程序,由此給 出1奮改的例程RM。在這一例子中,應(yīng)當(dāng)注意,同一》務(wù)改的例程RM
在應(yīng)用的可執(zhí)行文件的執(zhí)行過程中,進(jìn)程P執(zhí)4亍一行調(diào)用例程R (例如來自"P0SIX.4"標(biāo)準(zhǔn)的例程"sem-wait")的代碼,該代碼-清求 對給定信號標(biāo)志的定位以便獲得對共享式存儲器中給定區(qū)域的相互 獨(dú)占性訪問。在多線程應(yīng)用的情況下,這可以包括實(shí)現(xiàn)相似作用的 指令,即來自"POSIX線程"標(biāo)準(zhǔn)的"pthreacLmutex—lock"。
在系統(tǒng)被引導(dǎo)時(shí)或者在應(yīng)用的可執(zhí)行文件之前加載到系統(tǒng)中的 插入代理META截獲對系統(tǒng)的原例程R的調(diào)用并且將它轉(zhuǎn)發(fā)到修改 的例程RM。這一修改的例程包括在實(shí)施前序程序的指令之后并且在 實(shí)施收尾程序的指令之前的實(shí)施或者調(diào)用原例程R -"sem一wait"-的 指令。
這些補(bǔ)充指令可以特別地包括來自如下類型的算法
對于前序程序
if (replay) check(Jseml)
對于收尾程序
if (replay) endcheck(Jseml) else record(result, Jseml)
指令"if(replay)"測試如下條件,該條件表明應(yīng)用是否在實(shí)施重放 的過程中。
在相反情況("else")下,這意p未著應(yīng)用正在正常地纟皮纟丸行并且 因此必須視為主應(yīng)用。收尾程序隨后執(zhí)行函數(shù)-"record(result, Jseml)"-該函數(shù)是如先前提到的記錄探針并且參與內(nèi)部事件的錄入, 同時(shí)在日志"Jseml"中存儲結(jié)果"result"。
當(dāng)"sem—wait"例程在使用"Jseml"日志的重放過程中被重啟應(yīng)用 調(diào)用時(shí),在實(shí)施系統(tǒng)的原"sem—wait"例程之前執(zhí)行前序程序。
圖8代表了時(shí)間流程圖,該流程示了這一修改的例程RM 的如下操作,該操作用以實(shí)施根據(jù)在內(nèi)部事件日志"用戶日志"中包 含的JSEM1日志來重放兩個(gè)進(jìn)程PB1、 PB2。根據(jù)所討論的信號標(biāo) 志SEM特有的遞增序列弁OP來對在JSEM1日志中錄入的各事件進(jìn) 行編號。與這些編號弁op中的各編號相關(guān)聯(lián),JSEM1日志包含在錄 入過程中已經(jīng)調(diào)用與所述JSEM1相對應(yīng)的4言號標(biāo)志的進(jìn)程的標(biāo)識 (PID)。
由于并行^l行兩個(gè)進(jìn)程PB1和PB2,沒有必要以在信號標(biāo)志的 日志JSEM1中存儲的次序來進(jìn)行它們使用"sem—wait"功能對SEM1 信號標(biāo)志的相應(yīng)調(diào)用。
當(dāng)標(biāo)識符為"id2"的進(jìn)程PB2在重放過程中調(diào)用SEM1信號標(biāo)志 時(shí),前序程序隨后在步驟21中以所述同一進(jìn)程PB2的名義來執(zhí)行指 令"check(Jseml),,。這一函數(shù)-"check(Jseml)"-在JSEM1日志中讀取與 序號OPSEM1的當(dāng)前值相對應(yīng)的行,也就是行"#1: idl"。
這一"檢查"函數(shù)將PIDlog所讀取的值或者"idl"與發(fā)出調(diào)用的 PB2進(jìn)程的標(biāo)識符或者"id2"進(jìn)行比較。如果它注意到這些值不同, 則這一"檢查"函數(shù)例如通過在連續(xù)循環(huán)中重新執(zhí)行該同一比較步驟 21來掛起發(fā)出調(diào)用的PB2進(jìn)程的執(zhí)行。
隨后,當(dāng)標(biāo)識符為"idl"的進(jìn)程PB1也在重放過程中調(diào)用SEM1
信號標(biāo)志時(shí),前序程序也在步驟11中執(zhí)行"check(Jseml)"指令,但 是這次是以新的PB1調(diào)用進(jìn)程的名義。如果它注意到所述PB1調(diào)用 進(jìn)程確實(shí)就是其標(biāo)識符"idl"在日志中被存儲于與在活動(dòng)序列中的當(dāng) 前編號(即值"#1")相對應(yīng)的行處的那一進(jìn)程,則"檢查"函數(shù)授權(quán)繼 續(xù)PB1調(diào)用進(jìn)程的執(zhí)行。
在步驟12中,修改的例程RM隨后實(shí)施原例程R即"sem—wait" 指令的功能,該原例程隨后向它分配SEMI信號標(biāo)志并且返回PB1 調(diào)用進(jìn)程的值"idl"。
在步驟13中,收尾程序隨后以PB1調(diào)用進(jìn)程的名義執(zhí)行 "en(^check(Jseml)"指令。所述"end—check"函數(shù)隨后關(guān)閉PB1進(jìn)程的 "sem一wait"調(diào)用并且解除對已經(jīng)處于保持中的PB2進(jìn)程的執(zhí)行的阻 斷。這一操作可以特別地包括遞增這一 SEM1信號標(biāo)志的序號 OPSEM1,使它移到下一個(gè)值"#2"。
在這一情況下,當(dāng)再次在步驟22中執(zhí)行PB2進(jìn)程所調(diào)用的 "check"函數(shù)時(shí),它讀取JSEM1日志的下一行"#2: id2"并且讓它的 PB2調(diào)用進(jìn)程繼續(xù)它對修改的例程RM的執(zhí)行。
在步驟23中,修改的例程RM隨后實(shí)施原例程R或者"sem—wait" 指令的函數(shù),該原例程或者指令隨后向它分配SEMI信號標(biāo)志并且 返回PB2調(diào)用進(jìn)程的值"id2"。
在步驟24中,收尾程序隨后以PB2調(diào)用進(jìn)程的名義^l行 "end—check(Jseml)"指令,再次遞增SEMI信號標(biāo)志序列并且^f吏它可 用以繼續(xù)重方文。
無論各種重放的進(jìn)程請求分配SEM1信號標(biāo)志的次序如何,不 言而p俞它們只能以在它的JSEM1日志中存儲的準(zhǔn)確次序并且因此以 與在生成這一 日志的主應(yīng)用的運(yùn)行過程中相同的次序來獲得。
由于這些附加指令由在主應(yīng)用外部的META代理來添加并且添 加到操作系統(tǒng)而不對操作系統(tǒng)進(jìn)行任何改變,所以不言而喻這些錄 入和重方文:燥作對于主應(yīng)用而言被透明地和非4曼入式地實(shí)施而不改變 系統(tǒng)的預(yù)先存在的單元。
給定大量內(nèi)部事件,有用的是對錄入和/或重放它們的功能進(jìn)行 優(yōu)化,特別是用以避免會大大減少從前述特征獲得的益處的任何性 能下降。
在發(fā)生于兩個(gè)外部事件之間的多種類型的內(nèi)部事件之中,多數(shù) 內(nèi)部事件可以分類為確定性的,即僅并入有如下操作,這些操作的
結(jié)果完全取決于應(yīng)用在這些操作之前的狀態(tài)。
另一方面,特別是在多任務(wù)操作或者分布于數(shù)個(gè)節(jié)點(diǎn)上的那些 操作的過程中, 一些內(nèi)部事件是非確定性類型的,因?yàn)樗鼈儼ㄈ?下操作,這些操作可能提供視應(yīng)用或者主節(jié)點(diǎn)外部的因素而定的結(jié) 果。
通過僅錄入或者重放非確定性類型的內(nèi)部事件,因此有可能限 制操作節(jié)點(diǎn)的超負(fù)荷,并且由此限制由于將中間應(yīng)用用于使主應(yīng)用 變得可靠或者管理主應(yīng)用而引起的性能下降。
如圖8a和8b中所示,可以特別是通過針對其中行為不是確定性 的內(nèi)部事件來僅錄入結(jié)果并且僅在重放時(shí)預(yù)設(shè)置結(jié)果來加速錄入和重放。
對于所有事件并且特別是內(nèi)部事件(EVI),如前所述的META 插入機(jī)制(圖7 )調(diào)用實(shí)施了所規(guī)定的操作的修改例程RM而不是原 例程R。這一修改的例程RM包括如下功能,即能夠根據(jù)這一事件 EVI的發(fā)生發(fā)起或者通知錄入進(jìn)程PlogOP或者重放進(jìn)程PRI,并且 如有必要?jiǎng)t等待它同意繼續(xù)處理這一事件或者將它移交給已經(jīng)調(diào)用 了它的Pl或者PB1進(jìn)程。
無論這涉及到錄入還是重放,管理這一事件EVI于是都包括對 這一事件的發(fā)生的反應(yīng)步驟,接著是附加的管理步驟GC(圖8a、8b), 該管理步驟的內(nèi)容取決于這一內(nèi)部事件的確定性或者非確定性的性 質(zhì)。
圖8a圖示了錄入內(nèi)部事件的操作。在通過已錄入(圖1的JOP) 的運(yùn)行來執(zhí)行P1進(jìn)程的同時(shí),執(zhí)行指令會實(shí)施應(yīng)用于共享式資源如 SEM1信號標(biāo)志的內(nèi)部事件EVI。
在步驟1中,與待錄入的事件EVI相對應(yīng)的修改例程RM通知 或者發(fā)起錄入進(jìn)程PlogOP,該進(jìn)程由此檢測這一事件EVI的發(fā)生。
在步驟2中,與事件EVI相對應(yīng)的修改例程RM對SEMI信號 標(biāo)志實(shí)施在原例程R中規(guī)定的操作并且接收或者計(jì)算發(fā)往已錄入進(jìn) 程P1的結(jié)果數(shù)據(jù)DR。
在步驟3中,錄入進(jìn)程PlogOP遞增與4企測的事件EVI在PI錄 入序列中的位置相對應(yīng)的例如向SEMI信號標(biāo)志分配的序號SQ。
在步驟4中,所述進(jìn)程PlogOP進(jìn)行用以確定檢測的內(nèi)部事件EVI 是否為確定性的測試。這一測試可以例如應(yīng)用于在修改的例程RM 的調(diào)用過程中從它接收的參數(shù)或者應(yīng)用于與這一調(diào)用 一起發(fā)送的結(jié) 果數(shù)據(jù)DR或者應(yīng)用于先前存儲于主要OP節(jié)點(diǎn)中的指令或者事件標(biāo) 識。
在步驟5中,如果檢測的事件EVI是非確定性的,則PlogOP進(jìn) 程將結(jié)果數(shù)據(jù)DR發(fā)送到輔節(jié)點(diǎn)的PlogSB錄入進(jìn)程。這存儲了與事 件EVI相對應(yīng)的結(jié)果數(shù)據(jù)DR和序號SQ,使得它們關(guān)聯(lián)在與信號標(biāo) 志SEMI相對應(yīng)的日志文件JSeml中先前已錄入事件的結(jié)果之后。 根據(jù)錄入條件,在JSeml日志中存儲的數(shù)據(jù)還可以由PlogOP錄入進(jìn) 程直接地存儲于主要節(jié)點(diǎn)中的永久介質(zhì)上的日志文件中。
在完成用于已錄入進(jìn)程P1的內(nèi)部事件序列時(shí),JSeml日志包含 與用于涉及到序號的事件的序號相關(guān)聯(lián)的由SEMi信號標(biāo)志向所述 PI進(jìn)程發(fā)送的所有結(jié)果數(shù)據(jù)的有序集。
圖8b圖示了在存儲于JSeml日志中并且與SEMI信號標(biāo)志相對 應(yīng)的事件的由重放進(jìn)程PRI (見圖6)控制的被動(dòng)重放階段RSB (圖 1 )過程中在重啟進(jìn)程PBl中用于這一內(nèi)部事件EVI的重放操作。在 PBl進(jìn)程正在運(yùn)行的同時(shí)并且在來自JSeml日志的事件的重》文過程 中,執(zhí)行指令會實(shí)施應(yīng)用于SEMI信號標(biāo)志的非確定性類型的內(nèi)部 事件EVI。
在步驟1中,與待錄入的事件EVI相對應(yīng)的修改例程RM通知 或者發(fā)起重》文進(jìn)程PRI,該進(jìn)程由此檢測和識別這一事件的發(fā)生。
在步驟2中,與事件EVI相對應(yīng)的修改例程RM對SEMI信號 標(biāo)志實(shí)施在原例程R中規(guī)定的操作并且接收或者計(jì)算與實(shí)際重放結(jié) 果相對應(yīng)的結(jié)果數(shù)據(jù)。修改的例程RM隨后掛起重啟進(jìn)程PB1的執(zhí) 行并且等待來自重放進(jìn)程PRI的信號以將這一結(jié)果RRJ發(fā)送到重啟 進(jìn)程PBl。
在步驟3中,重放進(jìn)程PRI在JSeml日志中讀取用于重放的下 一未用值RLi以及與它相關(guān)聯(lián)的序號SQi。
在步驟4中,該進(jìn)程用于與檢測的事件EVI在PB1重放序列PB1 中的位置相對應(yīng)的例如向SEMI信號標(biāo)志分配的遞增序號SQ。
在步驟5中,重放進(jìn)程PRI對當(dāng)前序號SQ和日志中的讀取序號 SQi進(jìn)行測試以確定正在進(jìn)行的重放事件EVI是否對應(yīng)于已錄入事 件。
在預(yù)設(shè)置步驟7中,如果這些事件相對應(yīng),則重放進(jìn)程PRI將 日志中的讀取結(jié)果RLi發(fā)送到修改的例程RM,該例程存儲它而不是 來自原操作R的結(jié)果PRJ。修改的例程RM隨后將這一結(jié)果RLi返 回給重啟進(jìn)程PB1并且讓它繼續(xù)它的執(zhí)行。
可選地,在預(yù)設(shè)置步驟7之前是步驟6,其中重放進(jìn)程PRI從修 改的例程RM接收實(shí)際重》文結(jié)果RRJ,并且將它與在錄入過程中同 一事件的結(jié)果相對應(yīng)的讀取結(jié)果RLi進(jìn)行比較。如果所述兩個(gè)結(jié)果 RRJ和Rli相對應(yīng),則進(jìn)程直接釋放修改的例程,該例程將它的結(jié)果 返回纟會重啟進(jìn)程PB1并且讓它繼續(xù)它的扭J亍。
因此不言而p俞,可以如實(shí)和準(zhǔn)確地記錄和重i文非確定性事件, 從而為重啟進(jìn)程PB1確保將與目標(biāo)進(jìn)程Pl在錄入過程中的運(yùn)行相一 致的重放運(yùn)行。
由于僅錄入或者重放某些事件,并且由于用以實(shí)施本發(fā)明的補(bǔ) 充內(nèi)部操作比用于錄入的存儲或者傳輸快得多,所以減少了因中間 應(yīng)用INT的才喿作而造成的開銷。
可選地,當(dāng)i殳想原例程R ^f又記錄確定性的事件時(shí),與它相對應(yīng) 的修改例程RM可以不提供對錄入或者重放進(jìn)程的任何調(diào)用。類似地,當(dāng)"i殳想原例程R僅實(shí)施非確定性事件時(shí),它的^f奮改例程RM可 以包括對錄入或者重放進(jìn)程的系統(tǒng)調(diào)用。在錄入過程中,因此可以 通過收到的呼叫的類型或者甚至通過收到呼叫這一事實(shí)來隱式地產(chǎn) 生用以測試確定性的性質(zhì)的步驟4 (圖8a)。
而為確定性的或者不為確定性的情況下,修改的例程RM還可以在 它的前序程序中和/或它的收尾程序中包括評價(jià)這一 類型的應(yīng)用或者 這些執(zhí)行狀況的指令。
序號SQ的使用還可以是可選的。在這一情況下,錄入進(jìn)程 PlogOP (圖8a)被約束為記下當(dāng)事件EVI是非確定性類型時(shí)的結(jié)果 數(shù)據(jù)量。對于這一部分,重放進(jìn)程PRI (圖8b)被約束為讀取下一 錄入結(jié)果RLi,并且認(rèn)為這是針對被檢測為非確定性的下一事件EVI 而要強(qiáng)制的結(jié)果。
另外,試探性或者預(yù)測性的優(yōu)化方法允許不系統(tǒng)地錄入所有內(nèi) 部非確定性事件??梢元?dú)自地或者與其它優(yōu)化方法相結(jié)合地實(shí)施這 一方法。
由于就錄入和重放操作而言的成本,特別是關(guān)于節(jié)點(diǎn)內(nèi)部操作 的成本,如果實(shí)施某一數(shù)目的附加內(nèi)部操作允許減少錄入操作的數(shù) 目,則實(shí)施這些附加內(nèi)部操作可能確實(shí)是有用的。
這一試探性的優(yōu)化技術(shù)包括通過中間應(yīng)用來實(shí)施試探性壓縮, 該試探性壓縮通過預(yù)測結(jié)果并且應(yīng)用于在主應(yīng)用的操作過程中檢測
的所有或者部分內(nèi)部事件來進(jìn)行操作。
在操作節(jié)點(diǎn)中的錄入過程中,這一試探性壓縮可以例如通過內(nèi)
部錄入進(jìn)程PlogOP來實(shí)施。
圖8c圖示了利用這一試探性壓縮CH來錄入非確定性事件的功能。
在通過JOP已錄入運(yùn)行來執(zhí)行P1進(jìn)程時(shí),執(zhí)行指令會實(shí)施應(yīng)用 于共享式資源如S EM1信號標(biāo)志的非確定性類型的內(nèi)部事件EVInD 。 在步驟1中,與待錄入的事件EVInD相對應(yīng)的〗務(wù)改例程RMnD
通知或者發(fā)起錄入進(jìn)程PlogOP,該進(jìn)程由此4企測所述事件EVInD的 發(fā)生。
在步驟2中,與事件EVInD相對應(yīng)的修改例程RMnD對SEM1 信號標(biāo)志實(shí)施在原例程RnD中設(shè)想的操作并且接收或者計(jì)算發(fā)往錄 入進(jìn)程Pl的結(jié)果數(shù)據(jù)DR。
在步驟3中,進(jìn)程PlogOP遞增與檢測事件EVInD相聯(lián)系的SEM1 資源所對應(yīng)的錄入序號SQ。
有利地,所述序號SQ存儲于主要節(jié)點(diǎn)OP中的工作存儲器中。 因此,與發(fā)送結(jié)果數(shù)據(jù)到輔節(jié)點(diǎn)相比或者與將它存儲在永久介質(zhì)上 的日志文件中相比,它的管理表現(xiàn)出很低的開銷。
與SEM1信號標(biāo)志和它的日志JSEM1相關(guān)聯(lián)的序號SQ的這一 遞增由此在避免結(jié)果數(shù)據(jù)DR的系統(tǒng)存儲將表現(xiàn)出的開銷同時(shí)允許 記錄對預(yù)測函凄t FH所正確預(yù)測的非確定性事件EVInD的傳遞。
在步驟4中,進(jìn)程PlogOP實(shí)施軟件操作FH,該才喿作包括形式 為預(yù)測結(jié)果RP的對這一內(nèi)部事件EVInD的結(jié)果的預(yù)測。優(yōu)選地, 這一預(yù)測是由以已錄入進(jìn)程Pl或者主應(yīng)用在這一事件EVInD之前 的狀態(tài)為基礎(chǔ)的 一個(gè)或者多個(gè)確定性函數(shù)組成的確定性軟件進(jìn)程。
在步驟5中,進(jìn)程PlogOP將預(yù)測結(jié)果RP與從檢測的事件EVInD 的運(yùn)行RnD輸出的實(shí)際結(jié)果DR進(jìn)行比較。
在步驟6中,如果這兩個(gè)結(jié)果DR和RP不同,貝'JPlogOP進(jìn)程 將實(shí)際結(jié)果DR和序號SQ的對應(yīng)值轉(zhuǎn)發(fā)到輔節(jié)點(diǎn)進(jìn)程PlogSB,該 輔節(jié)點(diǎn)進(jìn)程通過將它們關(guān)聯(lián)為在與所討論的資源SEM1相對應(yīng)的日 志文件Jseml中的下一4亍來記下它們。
在這一步驟過程中,有可能設(shè)想重新發(fā)起用于錄入所討論的 SEM1資源的序號SQ。在這一情況下,序號SQ代表了自已經(jīng)錄入 其結(jié)果的最后事件起正確預(yù)測的事件數(shù)目。
在完成用于已錄入進(jìn)程P1的內(nèi)部事件序列時(shí),JSeml日志包含 SEM1信號標(biāo)志向所述P1進(jìn)程發(fā)送的并且尚未通過預(yù)測函數(shù)FH來 正確預(yù)測的所有結(jié)果數(shù)據(jù)的有序集。
在已經(jīng)通過使用這樣的試探性優(yōu)化來實(shí)施內(nèi)部事件的錄入情況 下,中間應(yīng)用隨后當(dāng)在輔節(jié)點(diǎn)中重放時(shí)實(shí)施試探性解壓縮。這一試 探性解壓縮使用與用于壓縮的預(yù)測相同的預(yù)測并且應(yīng)用于與在通過 試探性壓縮進(jìn)行錄入的過程中相同的事件。
圖8d因此圖示了基于應(yīng)用于SEMI信號標(biāo)志的日志JSeml在由 內(nèi),部重放進(jìn)程PRI(參見圖6)控制的重啟進(jìn)程PB1的被動(dòng)重放中利 用這一試探性解壓縮DH針對非確定性事件的重放操作。
在來自JSeml日志的事件的重放過程中,執(zhí)行指令會實(shí)施應(yīng)用 于SEM1信號標(biāo)志的非確定性類型的內(nèi)部事件EVInD。
在步驟1中,與待重放的事件EVInD相對應(yīng)的^f奮改例程EMnD 通知或者發(fā)起重i文進(jìn)程PRI,該進(jìn)程由此纟全測和識別這一事件EVInD 的發(fā)生。
在步驟2中,與事件EVInD相對應(yīng)的修改例程RMnD對SEM1 信號標(biāo)志實(shí)施在原例程RnD中設(shè)想的操作并且接收或者計(jì)算與實(shí)際 重放結(jié)果RRJ相對應(yīng)的結(jié)果數(shù)據(jù)。修改的例程RMnD隨后掛起重放 進(jìn)程PB1的執(zhí)行。它隨后等待來自重放進(jìn)程PRI的信號以將所述結(jié) 果RRJ轉(zhuǎn)發(fā)到重啟進(jìn)程P1并且讓它繼續(xù)它的執(zhí)行。
在步驟3中,進(jìn)程PRI讀取和遞增與信號標(biāo)志SEM1相對應(yīng)的 序號SQ的值。
在步驟4中,內(nèi)部重放進(jìn)程PRI將這一序號SQ與未從與這同一 資源SEM1相對應(yīng)的日志文件Jseml中存儲的那些序號中重放的下 一序號SQi進(jìn)行比較。
在步驟5中,如果這些序號SQ和SQi對應(yīng),則內(nèi)部重放進(jìn)程 PRI在這一日志中讀取針對這一序號SQi的存儲結(jié)果RLi,并且存儲 它作為將要由檢測的事件EVInD返回的強(qiáng)制結(jié)果RF。內(nèi)部重放進(jìn)程 PRI隨后存儲已經(jīng)重放在日志JSeml中的行SQi所代表的事件這一 事實(shí),并且激活這同一日志的下一行SQj以便處理所檢測的下一事 件。
在這一步驟過程中,有可能設(shè)想重新對用于重放所討i侖的SEM1
資源的序號SQ進(jìn)行初始化。
在步驟6中,如果這些序號SQ和SQi不對應(yīng),則內(nèi)部重》文進(jìn)程 PRI實(shí)施軟件操作FH,該操作包括形式為預(yù)測結(jié)果RPJ的與在這一 內(nèi)部事件的錄入過程中產(chǎn)生的結(jié)果預(yù)測相同的結(jié)果預(yù)測。內(nèi)部重放 進(jìn)程PRI隨后存儲這一預(yù)測的結(jié)果RPJ作為將要由檢測的事件 EVInD返回的強(qiáng)制結(jié)果RF。
在步驟8中,內(nèi)部重放進(jìn)程PRI將強(qiáng)制結(jié)果RF轉(zhuǎn)發(fā)給修改的例 程RMnD,該例程將它施加于重啟進(jìn)程PB1而不是內(nèi)部事件EVInD 所返回的實(shí)際重放結(jié)果RRJ。修改的例程隨后讓重啟進(jìn)程PB1繼續(xù) 它的執(zhí)行。
可選地,在這一預(yù)設(shè)置之前可以是測試步驟7,該步驟用以將這 兩個(gè)結(jié)果RRJ和RF進(jìn)行比較并且如果這些結(jié)果對應(yīng)則避免在重啟 進(jìn)程PB1中起作用。
應(yīng)當(dāng)注意,在這一預(yù)測優(yōu)化方法中4吏用的排序數(shù)據(jù)SQ的標(biāo)識可 以由不同于先前所述變量(圖8a和圖8b)的變量組成或者與這些參 數(shù)相聯(lián)合地加以組織和處理。
因此不言而喻,即使沒有錄入所有確定性事件的結(jié)果,仍然可 以如實(shí)和準(zhǔn)確地記錄和重放這些事件。在這一方式下,因此有可能 在確保運(yùn)行與目標(biāo)進(jìn)程Pl在錄入過程中的運(yùn)行相一致的重啟進(jìn)程 PB1 d的重放運(yùn)行的同時(shí)優(yōu)化這些錄入和重放操作。
假設(shè)在錄入操作與節(jié)點(diǎn)內(nèi)部的簡單計(jì)算操作之間有速度差異, 即使所用預(yù)測函數(shù)沒有很高的成功率,但是這一試探性優(yōu)化技術(shù)仍 然可以是有用的。如果這一差異很大,則即使小于50%的預(yù)測成功 率仍然可以允許有用的優(yōu)化。
些函數(shù)是為了用于錄入并且隨后重放單個(gè)事件或者多組內(nèi)部事件。 可以根據(jù)應(yīng)用的狀態(tài)或者它的環(huán)境(例如從知識數(shù)據(jù)庫或者規(guī)則開 始)來進(jìn)行對待使用的預(yù)測函數(shù)的選擇。這一變化隨后可以存儲于 中間應(yīng)用所存儲的錄入數(shù)據(jù)中。還可以通過在錄入過程中評^介這一
試探性優(yōu)化技術(shù)的成功率并且通過基于這一成功率的值或者基于它 的變化來發(fā)起所述函數(shù)的改變從而自動(dòng)自適應(yīng)地^使用該:技術(shù)。
在這 一 試探性優(yōu)化技術(shù)中使用的預(yù)測函數(shù)的 一 個(gè)例子包括基于 來自不同客戶端的內(nèi)部事件的次序來預(yù)測內(nèi)部事件的發(fā)生次序。
圖9和圖10圖示了參與三個(gè)進(jìn)程ProcA、 ProcB、 ProcC的外部 事件和內(nèi)部事件的發(fā)生,這些進(jìn)程具有分別標(biāo)定為"a"、 "b"和"c"的 標(biāo)識符,例如執(zhí)行分別由三個(gè)不同客戶端起動(dòng)的三個(gè)任務(wù)Ta、 Tb、 Tc。這些不同4壬務(wù)各自例如包括第一外部事件Eal、 Ebl、 Ecl和第 二外部事件Ea2、 Eb2、 Ec2。在這些第 一與第二外部事件之間,這 些任務(wù)各包括發(fā)起兩個(gè)內(nèi)部非確定性事件。在圖9和圖IO中,用于 任務(wù)Ta的連續(xù)內(nèi)部事件記作Ial和Ia2,用于任務(wù)Tb的連續(xù)內(nèi)部事 件記作Ibl和Ib2,而用于任務(wù)Tc的連續(xù)內(nèi)部事件記作Icl和Ic2。 這些內(nèi)部事件Ia至Ic2可以-波此不同或者甚至涉及到單個(gè)確定資源, 例如對單個(gè)共享式存儲器區(qū)集合的鎖定分配。
的部分和/或具有相似的執(zhí)行時(shí)間時(shí),預(yù)測函數(shù)包括預(yù)測中間內(nèi)部事 件Ial、 Ibl、 Icl的發(fā)生次序?qū)⑴c在它們之前的外部事件的發(fā)生次序 相同。
在主應(yīng)用正在運(yùn)行的同時(shí),第一外部事件Eal、 Ebl、 Ecl在操 作節(jié)點(diǎn)OP上的發(fā)生次序由中間應(yīng)用例如記錄在內(nèi)部錄入進(jìn)程 PlogOP中。例如,外部事件的這一次序包括與這些外部事件相關(guān)聯(lián) 的進(jìn)程的一連串標(biāo)識符,或者值序列"abc"。
在每次檢測到關(guān)于這一資源的新內(nèi)部事件時(shí),預(yù)測函數(shù)做出對 這 一 內(nèi)部事件的結(jié)果的預(yù)測,即對將要獲得對這 一 資源的鎖定的進(jìn) 程(即剛請求過該資源的進(jìn)程)的身份的預(yù)測。然后將通過將已經(jīng) 獲得這一 資源的鎖定的最后進(jìn)程的身份與外部事件的這一 次序進(jìn)行 比較來計(jì)算這一預(yù)測結(jié)果。
由此,預(yù)測函數(shù)將得到預(yù)測集Pel至Pe6,各預(yù)測以虛線示出而 其結(jié)果在它的右手端處示出。
圖9圖示了在這些內(nèi)部事件遵循外部事件的次序的情況下針對
內(nèi)部事件的每次發(fā)生而做出的預(yù)測的值。根據(jù)外部事件"a b c"的次序
以及根據(jù)發(fā)生過的最后內(nèi)部事件,預(yù)測函數(shù)將做出如下預(yù)測,該預(yù)
測形成僅在這六種情況下才顯現(xiàn)的值序列"a b c a b c"。在試探性優(yōu) 化的背景下,內(nèi)部錄入進(jìn)程PlogOP將因此不要求轉(zhuǎn)發(fā)針對這些內(nèi)部 事件的錄入數(shù)據(jù),因?yàn)樗鼈円呀?jīng)被預(yù)測函數(shù)正確地預(yù)見。
圖10圖示了在這些內(nèi)部事件沒有嚴(yán)格地遵循外部事件的次序的 情況下針對內(nèi)部事件的每次發(fā)生而做出的預(yù)測值,其中用于標(biāo)識"b" 的進(jìn)程PrB的任務(wù)Tb比其它兩個(gè)任務(wù)被更快地執(zhí)行。根據(jù)外部事件 "a b c"的次序以及根據(jù)發(fā)生過的最后內(nèi)部事件,預(yù)測函數(shù)將做出如下 預(yù)測,該預(yù)測形成ii序列"a b c c a b"??雌饋韮蓚€(gè)預(yù)測Pe3和Pe6 將顯現(xiàn)為錯(cuò)誤,這將造成內(nèi)部錄入進(jìn)程PlogOP在兩種場合轉(zhuǎn)發(fā)錄入 數(shù)據(jù)。這一 錄入數(shù)據(jù)因此將包括在完成已經(jīng)顯現(xiàn)為不正確的第三預(yù) 測Pe3時(shí)在傳輸Ll中的值"c"、然后是在完成也已經(jīng)顯現(xiàn)為不正確 的第六預(yù)測P6時(shí)在傳輸L2中的值"c"。
盡管有這些不正確的預(yù)測Pe3和Pe6,但是不言而喻這一試探性 優(yōu)化已經(jīng)允許內(nèi)部錄入進(jìn)程PlogOP影響僅兩個(gè)傳輸Ll和L2而不是 在沒有該優(yōu)化時(shí)可能已經(jīng)發(fā)生的六個(gè)傳輸。在六個(gè)傳輸之中節(jié)省了 四個(gè)傳輸表現(xiàn)了基本上比在需要用來實(shí)施這一優(yōu)化技術(shù)的內(nèi)部計(jì)算 和操作中更大的工作時(shí)間,并且因此可以提供特別是操作節(jié)點(diǎn)中性 能 的顯著增加。
另外,對于其中操作系統(tǒng)的標(biāo)準(zhǔn)實(shí)施會產(chǎn)生非確定性行為的一 些內(nèi)部事件,有可能使用一種借助語義改變的優(yōu)化技術(shù)。這一技術(shù)
包括修改這些事件在節(jié)點(diǎn)中的實(shí)施,以便賦予它們以將是確定性的 行為。中間應(yīng)用與在操作節(jié)點(diǎn)和一個(gè)或者多個(gè)輔節(jié)點(diǎn)中相同地進(jìn)行 這一修改,這使得三個(gè)改變的內(nèi)部事件的結(jié)果可預(yù)測。對實(shí)施的這 一》多改將通過一種插入技術(shù)來動(dòng)態(tài)地進(jìn)行,該插入纟支術(shù)通過"元進(jìn) 程,,以如下修改的例程RM來取代原事件實(shí)施例程R,其中該例程RM 針對這一事件來實(shí)施修改的行為。用來實(shí)施這一修改的技術(shù)與用于
在前序程序和收尾程序中添加記錄探針的上述技術(shù)(參見圖7)相似, 但是可以包括修改用于所修改的例程的中心部分的代碼。這 一 實(shí)施 修改對于主應(yīng)用而言是透明地產(chǎn)生的并且沒有更改^^乘作系統(tǒng)的預(yù)先 存在的單元。通過永久地或者至少在確定和存儲的"^丸行間隔中在主 應(yīng)用中使用這些修改的例程之一,由此有可能錄入主應(yīng)用的進(jìn)展而 無需存儲所述改變的事件的結(jié)果。在與用于執(zhí)行重放應(yīng)用的間隔相
時(shí)提高錄入和重放的性能。
例如通過進(jìn)行如下規(guī)劃來設(shè)計(jì)這 一 修改的行為以便符合與原行
為相同的規(guī)范并且完全與它相兼容從原例程可能已經(jīng)發(fā)送多個(gè)不 同結(jié)果的給定情形起,修改的例程僅提供可能已經(jīng)被原例程提供過 并且因此為主應(yīng)用和操作系統(tǒng)所設(shè)想到的結(jié)果。
這一借助語義變化的優(yōu)化技術(shù)實(shí)現(xiàn)了減少非確定性內(nèi)部事件的 數(shù)目,其中這些事件的結(jié)果必須被錄入在操作節(jié)點(diǎn)中以能夠在重啟 應(yīng)用的恢復(fù)過程進(jìn)行重放。
在圖16中通過圖形圖示了不同方的操作和交互的例子。
例如在系統(tǒng)軟件中的處理代理AT進(jìn)行如下操作,該操作將把結(jié) 果DR轉(zhuǎn)發(fā)到進(jìn)程如已錄入進(jìn)程Pl。對于很多操作或者事件、特別 是內(nèi)部事件,所述操作由操作進(jìn)程TO來實(shí)施,該操作進(jìn)程TO就其 性質(zhì)而言與資源集RDet相比是確定性的(稱為決定性的)。
在可由進(jìn)程Pl訪問的資源中, 一些資源根據(jù)對這一進(jìn)程Pl的 狀態(tài)的了解而可以稱為可再現(xiàn)資源RRepr。所述可再現(xiàn)資源特別地包 括其狀態(tài)唯一地視它而定的資源。
在處理代理AT的操作中,處理TO操作可以包括關(guān)于進(jìn)程PI 的可再現(xiàn)資源RRepr而言是確定性的處理部分TD,例如因?yàn)樗?叉使 用來自所述可再現(xiàn)資源的DER數(shù)據(jù)。
在才乘作進(jìn)程TO包括使用了來自在進(jìn)程Pl的可再現(xiàn)資源RRepr 中沒有包含的SEMI資源的個(gè)人數(shù)據(jù)的另一處理部分的情況下,這 一 TnD部分的結(jié)果并且由此所有TO處理的結(jié)果關(guān)于調(diào)用它的進(jìn)程
Pl而言通常不是確定性的。
在這樣的情形下,這一語義變化技術(shù)可以包括使用管理代理AG
修改所獲得的操作相比于可再現(xiàn)資源RRepr而言是確定性的。
這一管理代理可以Y吏用運(yùn)作修改處理TMF來修改TO才喿作進(jìn)程 的內(nèi)部操作。
它還可以使用從決定性的但是關(guān)于進(jìn)程PI而言不是可再現(xiàn)的 (RRepr)資源RDet中輸出的輸入凄t據(jù)DE來補(bǔ)償對于所述同一進(jìn) 程P1而言能夠構(gòu)成非確定性源的結(jié)果DR的變化??梢酝ㄟ^TC1將 輸入數(shù)據(jù)DE修改成經(jīng)補(bǔ)償?shù)妮斎霐?shù)據(jù)DEC或者通過TC2將結(jié)果數(shù) 據(jù)DR修改成經(jīng)補(bǔ)償?shù)慕Y(jié)果數(shù)據(jù)DRC來進(jìn)行這樣的補(bǔ)償。
這一管理代理AG還可以根據(jù)一個(gè)或者多個(gè)語義變化參數(shù)PCS 來選擇或者調(diào)節(jié)它所進(jìn)行過的修改TMF、 TC1、 TC2以-使優(yōu)化全局 處理AT和AG的效率。為了在錄入JOP與重放RSB之間保持可再 現(xiàn),僅按照來自可再現(xiàn)資源RRepr的數(shù)據(jù)來確定這一語義變化參數(shù) PCS的變化或者在錄入過程中將它的變化存儲于日志UL、 KL中并 且在重放RSB過程中以同一方式來讀取和應(yīng)用這些變化就足夠了 。
這 一 行為變化可以特另'J地涉及影響對竟?fàn)幗o定資源的數(shù)個(gè)進(jìn)程 的管理的方面。
圖11和圖12圖示了一個(gè)例子,該例子使用這一借助語義變化 的優(yōu)化技術(shù)來使如下操作具有確定性,該操作用以通過在Unix型環(huán) 境中使用"讀"例程來讀取接收的信息。
在它的標(biāo)準(zhǔn)實(shí)施中,由應(yīng)用發(fā)起的"讀"例程使用緩沖器存儲器B 的區(qū)域來讀取在輸入信道ICH中的消息并且將這些消息轉(zhuǎn)發(fā)到所述 應(yīng)用。以連續(xù)數(shù)據(jù)的形式在系統(tǒng)中接收消息,隨著這些消息的到達(dá) 并在它們到達(dá)時(shí),這些消息被存儲于形成輸入信道的存儲器區(qū)域中。 根據(jù)"讀"操作的配置,"讀"操作可以使用不同大小的緩沖器,但是這 一緩沖器就它的整體而言用于在輸入信道中的每次讀取。
在這 一 例子中,應(yīng)用針對大小為"50"的緩沖器使用 一 連串"讀" 操作以接收通過輸入信道ICH連續(xù)地到達(dá)該存儲器的三個(gè)消息Ml、 M2、 M3。這三個(gè)消息代表了分別等于"20"、 "30,,和"50,,的數(shù)據(jù)量。 然而, 一 方面數(shù)據(jù)到達(dá)輸入信道的速度以及另 一 方面讀取操作的速 度可能以在錄入或者重放階段不能預(yù)測的方式相對于彼此而變化。
圖11由此代表了用于使用原"讀"例程來讀取同樣三個(gè)消息的兩 種不同的可能方案。
在第一方案SCA中,僅當(dāng)來自大小為"20"的第一消息Ml的數(shù) 據(jù)已經(jīng)到達(dá)時(shí)才進(jìn)行第一次讀取RA1。緩沖器B未被完全地填充, 并且該操作返回與內(nèi)容"M1"和數(shù)據(jù)大小"20"相對應(yīng)的結(jié)果。然后在 第二消息M2獨(dú)自到達(dá)之后進(jìn)行第二次讀取RA2,該讀取返回與內(nèi) 容"M2"和數(shù)據(jù)大小"30"相對應(yīng)的結(jié)果。然后在第三消息M3到達(dá)之 后進(jìn)行第三次讀耳又RA3,該讀取返回與"內(nèi)容M3"和數(shù)據(jù)大小"50"相 對應(yīng)的結(jié)果。例如,對于應(yīng)用所接收的數(shù)據(jù)的大小,該第一方案A 由此返回等于"20、 30和50,,的三個(gè)結(jié)果的集合。
在第二方案SCB中,當(dāng)同樣的第一和第二消息Ml、 M2已經(jīng)到 達(dá)時(shí)進(jìn)行第一次讀取RB1,該讀取返回與內(nèi)容"M1、 M2"和數(shù)據(jù)大小 "50"相對應(yīng)的結(jié)果。然后在第三消息M3到達(dá)之后進(jìn)行第二次讀取 RB2,該讀取返回與內(nèi)容"M3"和數(shù)據(jù)大小"50"相對應(yīng)的結(jié)果。對于 應(yīng)用所接收的數(shù)據(jù)的大小,該第一方案SCA由此返回等于"50、 50" 的兩個(gè)結(jié)果的集合,這是就讀取相同消息而言。
這兩個(gè)方案因此返回不同結(jié)果對于一個(gè)方案是"20、 30、 50" 而對于另一方案是"50、 50"。就此而言,實(shí)施"讀"操作的標(biāo)準(zhǔn)系統(tǒng)例 ,呈/人用于錄入主應(yīng)用以及用于重i文重啟應(yīng)用的應(yīng)用的5見點(diǎn)來看實(shí)施 了非確定性事件。
針對與圖11中相同的情形,圖12代表了將通過使用修改的"讀 M"例程而不是原"讀"例程來獲得的單個(gè)方案ScU。
在這一例子中,修改的例程識別所接收的各消息的實(shí)際長度并 且在輸入信道ICH中僅讀取與單個(gè)消息相對應(yīng)的數(shù)據(jù),即使緩沖器 B未被填充并且在輸入信道ICH中仍有數(shù)據(jù)要讀取也是如此。在錄
入主應(yīng)用的情況下,修改的例程使用與消息Ml、 M2、 M3的接收相 對應(yīng)的外部事件錄入機(jī)制(例如IPlogOP模塊)來識別這些消息的 實(shí)際長度。在正在恢復(fù)重啟應(yīng)用的同時(shí)的重放情況下,修改的例程 使用與消息M1、 M2、 M3的接收相對應(yīng)的外部事件重》文機(jī)制(例如 IPlogSB模塊)來識別這些消息的實(shí)際長度。
這兩個(gè)不同的到達(dá)方案SCA、 SCB由此在發(fā)生就應(yīng)用所^接收的 數(shù)據(jù)的大小而言等于"20、 30, 50"的三個(gè)結(jié)果的單個(gè)集合時(shí)針對讀 取操作給出單一行為。
類似地,對于緩沖器B的其它大小,可能有產(chǎn)生不同結(jié)果集的 原"讀"例程。
由此,針對緩沖器大小"20"可以獲得如下結(jié)果,例如"20、 20、 20、 20、 20,,或者"20、 20、 10、 20、 20、 10"。
針對緩沖器大小"100"可以獲得如下結(jié)果,例如"20、 30、 50"或 者"50、 50"或者"20、 80"或者"100"。
另一方面,對于各緩沖器大小,由此修改的"讀M"例程可以僅 給出單個(gè)結(jié)果集。
由此,對于緩沖器大小"20",獲得的結(jié)果集將是"20、 20、 10、 20、 20、 10"。
對于緩沖器大小"100",獲得的結(jié)果集將是"20、 30、 50"。 由此修改的"讀M"例程因此針對與這樣的讀操作相對應(yīng)的內(nèi)部 事件實(shí)施了確定性行為。
圖13至15圖示了使用這一借助語義變化的優(yōu)化技術(shù)的另一例 子,該例子用來使如下應(yīng)用進(jìn)程所發(fā)起的復(fù)用讀操作具有確定性, 該應(yīng)用進(jìn)程實(shí)施排隊(duì)循環(huán)并且能夠從具體地與多個(gè)文件描述符相關(guān) 聯(lián)的多個(gè)輸入/輸出(1/0)信道接收數(shù)據(jù)。這一例子基于在Unix型 的環(huán)境中對"所選"例程的使用,但是還可以應(yīng)用于對"輪循"例程的使 用。
在這一例子中,由節(jié)點(diǎn)操作系統(tǒng)OS接收發(fā)往兩個(gè)不同信道 ICH1、 ICH2的內(nèi)容分別等于"a"、 "b,,和"c,,的三個(gè)消息Ml、 M2、 M3。
這一例子可以特別地應(yīng)用于由第 一信道ICH1以"流"的形式4妄收 數(shù)據(jù)以及由第二信道ICH2以TCP型的消息或者分組的形式接收數(shù) 據(jù)。在操作系統(tǒng)OS中,隨后接收其后跟隨有"流"分組的兩個(gè)TCP 分組作為內(nèi)容分別等于"a"、 "b"和"c"的三個(gè)連續(xù)消息Ml、 M2、 M3。
當(dāng)操作系統(tǒng)OS收到這些消息時(shí),操作系統(tǒng)OS根據(jù)它的工作量 來在與它們的類型相對應(yīng)的信道ICH1、 ICH2中處理和分發(fā)這一數(shù) 據(jù)。在應(yīng)用的執(zhí)行過程中的給定瞬間,應(yīng)用調(diào)用"選褲:"例程以針對 它可以用來接收消息的不同信道來發(fā)起讀操作。
在"選擇"例程的標(biāo)準(zhǔn)實(shí)施中,"選擇"例程讀取第一信道ICH1中 的排隊(duì)數(shù)據(jù),接著是第二信道ICH2中的排隊(duì)數(shù)據(jù),并且立即以它讀 取它們的次序?qū)⑦@一數(shù)據(jù)轉(zhuǎn)發(fā)到應(yīng)用。
現(xiàn)在, 一方面數(shù)據(jù)到達(dá)操作系統(tǒng)OS的速度、操作系統(tǒng)處理它的 速度以及因此它到達(dá)輸入信道的速度、而另 一方面應(yīng)用執(zhí)行一連串 讀操作的速度可能以在錄入或者重放階段不能預(yù)測的方式相對于彼 此而變4匕。
在圖13中所示的第一方案SCA中,應(yīng)用在第一實(shí)例IA處通過 "選擇"例程來發(fā)起復(fù)用讀取,因?yàn)槿齻€(gè)消息已經(jīng)到達(dá)兩個(gè)輸入信道 ICH1、 ICH2。當(dāng)"選擇"例程讀取lt據(jù)時(shí),它因此首先讀取第一信道 ICH1中包含的第三消息,接著是第二信道ICH2中的前兩個(gè)消息M1、 M2。"選擇"例程隨后以讀取的次序來轉(zhuǎn)發(fā)這一數(shù)據(jù),并且讀纟喿作由 此產(chǎn)生包括數(shù)據(jù)集"c、 a、 b"的結(jié)果。
在圖14中所示的第二方案SCB中,應(yīng)用在第一實(shí)例IB處通過 "選擇"例程來發(fā)起復(fù)用讀取,因?yàn)橹挥星皟蓚€(gè)消息已經(jīng)到達(dá)第二輸 入信道ICH2。當(dāng)"選擇"例程讀取數(shù)據(jù)時(shí),它因此僅讀取第二信道 ICH2中的前兩個(gè)消息Ml、 M2并且以讀取的次序或者以集合"a b" 的次序?qū)⑦@一數(shù)據(jù)轉(zhuǎn)發(fā)到應(yīng)用。在下一次讀取過程中,在第三消息 M3已經(jīng)到達(dá)第一信道ICH1之后,"選擇"例程讀取這一第三消息并 且將它轉(zhuǎn)發(fā)到應(yīng)用。在所述第二方案B中,原"選擇"例程的讀操作
因此產(chǎn)生包括數(shù)據(jù)集"a b c"的結(jié)果。
這兩個(gè)不同方案SCA、 SCB因此返回不同結(jié)果對于一個(gè)方案 是"cab"而對于另一方案是"abc"。就此而言,實(shí)施"選擇"操作的標(biāo) 準(zhǔn)系統(tǒng)例程,人用于錄入主應(yīng)用以及用于對重放應(yīng)用進(jìn)4亍重》文的應(yīng)用 的觀點(diǎn)來看實(shí)施了非確定性事件。
對于與圖13和圖14中相同的情形,圖15代表了將通過使用修 改的"選擇M"例程而不是原"選擇"例程來獲得的單個(gè)結(jié)果。
在這一例子中,修改的例程識別消息到達(dá)操作系統(tǒng)OS的次序并 且以消息到達(dá)的次序來讀取它們。另外,為了減少;漠糊性的風(fēng)險(xiǎn), ^修改的例程每次僅發(fā)送單個(gè)文件描述符。修改的例禾呈可以例如通過 檢查輸入信道ICH1、 ICH2中的消息內(nèi)容或者根據(jù)錄入或者重》文數(shù) 據(jù)來獲得與消息到達(dá)的次序有關(guān)的信息。
這兩個(gè)不同的到達(dá)方案SCA、 SCB由此在包括等于"a b c"的三 個(gè)結(jié)果的單個(gè)集合情況下針對復(fù)用讀取操作給出單一行為。
通過這樣修改對在標(biāo)準(zhǔn)環(huán)境下不是確定性的內(nèi)部事件的行為進(jìn) 行實(shí)施的某些例程的操作方法以使它們具有確定性,不言而喻減少 了非確定性事件的數(shù)目。當(dāng)在主應(yīng)用中的錄入過程中和在重啟應(yīng)用 中的重放過程中同樣地應(yīng)用這一修改時(shí),減少了為了能夠在重;^丈完 成時(shí)獲得如下重啟應(yīng)用而必須錄入的事件的數(shù)目,該重啟應(yīng)用處于
操作連續(xù)性。
因此不言而喻,這一借助語義變化的優(yōu)化技術(shù)可以提高錄入操 作和重放操作的性能并且由此提高中間應(yīng)用的性能。
事實(shí)上,根據(jù)應(yīng)用這一語義變化技術(shù)的例程以及根據(jù)對它們所 進(jìn)行的修改的性質(zhì),這相比于所述例程的原行為而言可能僅產(chǎn)生很 少的性能降低。然而,假設(shè)錄入操作速度緩慢,則在待錄入的操作 的數(shù)目方面產(chǎn)生的節(jié)省可以允許在中間應(yīng)用的框架內(nèi)顯著提高主應(yīng) 用的整體性能。
在這 一 說明書中,可以看到中間應(yīng)用的機(jī)制主要由在l乘作節(jié)點(diǎn)
或者輔節(jié)點(diǎn)的用戶空間中執(zhí)行的進(jìn)程或者模塊來實(shí)施。特別地,這 意P木著如下外部或者內(nèi)部的錄入或者重放進(jìn)程,在這里在中間應(yīng)用
INT (圖1 )中通過標(biāo)記"Plog"(圖2) 、 "IPlogOP,,和"IPlogSB,,(圖 3 ) 、 "PlogOP"和"PlogSB"(圖4 ) 、 "PRE"(圖5 )和"PRI"(圖6 )、 "META"(圖7)來標(biāo)識這些進(jìn)程。
對照而言,在系統(tǒng)空間中執(zhí)行的機(jī)制首先包括從應(yīng)用才莫塊來管 理的插入模塊或者用于添加或者修改函數(shù)的那些模塊。這特別地意 味著在這里通過標(biāo)記"DISP"(圖3 )和"ip過濾器"(圖5 )來標(biāo)識的 模塊。還可以根據(jù)需要加載或者從應(yīng)用模塊卸載這些內(nèi)核模塊中的 某些模塊。
中間應(yīng)用的執(zhí)行和"壽命"發(fā)生在用戶空間中這一事實(shí)實(shí)現(xiàn)了限 制與不同節(jié)點(diǎn)的操作系統(tǒng)的交互。這一特征特別地提供了在部署和
管理上的靈活性、針對操作系統(tǒng)及其可選異質(zhì)性的某些獨(dú)立性,限 制了類型或者版本不兼容性的風(fēng)險(xiǎn),并且可以在部署所述中間應(yīng)用 時(shí)限制未涉及到的節(jié)點(diǎn)在系統(tǒng)空間中的干預(yù)或者將這些干預(yù)僅限于 較低程度。這一針對操作系統(tǒng)的獨(dú)立性還可以通過避免在系統(tǒng)空間 的預(yù)先存在的單元中進(jìn)行過多深入干預(yù)以及通過保持相對于這些操 作系統(tǒng)的規(guī)范和變化而言以及相對于管理它們的組織的策略而言的 某些商業(yè)和技術(shù)獨(dú)立性來限制開發(fā)時(shí)間和成本。
可以用不同方式和#4居不同組合來實(shí)施如上所述的中間應(yīng)用以 便為集群的用戶或者管理者提供對其它應(yīng)用的支持或者管理服務(wù)。 可以特別地以"中間件"型網(wǎng)絡(luò)軟件產(chǎn)品的形式來獲得這樣的月良務(wù), 從而允許在集群中管理、優(yōu)化或者在可靠性上改進(jìn)原版本("既有版 本")的一個(gè)或者多個(gè)應(yīng)用,同時(shí)提供適應(yīng)于集群的性質(zhì)的靈活性或 者附加安全性或者故障容限這些功能。
其客戶端的安全服務(wù)的形式。各應(yīng)用因此將能夠被視為主應(yīng)用并且 根據(jù)需要針對它的客戶端以重啟應(yīng)用的形式來加以恢復(fù)以取代主應(yīng) 用。
由在給定節(jié)點(diǎn)的全部或者一部分上執(zhí)行的應(yīng)用所提供的月艮務(wù)還
可以通過完全地釋;^文它們的原節(jié)點(diǎn)來動(dòng)態(tài)地根據(jù)需要轉(zhuǎn)移到 一 個(gè)或 者多個(gè)其它節(jié)點(diǎn)。因此,將有可能實(shí)施在這一節(jié)點(diǎn)上想要的所有硬 件或者軟件干預(yù),無論這些干預(yù)是維護(hù)、試驗(yàn)、升級還是更換。
這樣的中間應(yīng)用可以特別地用來實(shí)施"中間件"型的環(huán)境,特別 地,根據(jù)它的能力、可用性或者它在網(wǎng)絡(luò)中的地理情況(例如它相 對于它的客戶端或者所用數(shù)據(jù)而言的遠(yuǎn)程性),該環(huán)境包括用于在 不同節(jié)點(diǎn)之間分布工作量(負(fù)荷平衡)的功能、用以優(yōu)化對不同硬 件的使用的功能。
不言而喻,本發(fā)明不限于已經(jīng)描述的例子,并且可以對本發(fā)明 做出各種修改而不脫離本發(fā)明的框架。
權(quán)利要求
1.一種用于管理非確定性軟件操作(EVINd)的方法,所述非確定性軟件操作(EVINd)是在執(zhí)行由至少一個(gè)計(jì)算機(jī)(OP,SB)執(zhí)行的稱為受管理的進(jìn)程(P1,PB1)的應(yīng)用進(jìn)程時(shí)由程序指令發(fā)起的,所述操作的表現(xiàn)在于向所述受管理的進(jìn)程發(fā)送稱為實(shí)際結(jié)果(DR,RRJ)的至少一個(gè)結(jié)果數(shù)據(jù),這一方法包括如下步驟-基于所述受管理的進(jìn)程的狀態(tài)或者如它在所述操作(EVInd)之前所屬于的應(yīng)用(AOP,ASB)的狀態(tài)來進(jìn)行稱為預(yù)測函數(shù)(FH)的確定性軟件處理,以便提供很可能與所述實(shí)際結(jié)果相對應(yīng)并且構(gòu)成針對所述操作的預(yù)測結(jié)果(RP)的值;-進(jìn)行比較測試以確定所述預(yù)測結(jié)果(RP)的值是否對應(yīng)于所述實(shí)際結(jié)果(DR,RRJ)的值;-針對所述受管理的操作執(zhí)行補(bǔ)充管理階段(CH,DH),這一補(bǔ)充管理視先前測試的結(jié)果而定。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于它管理稱為已錄入 操作(EVInd;圖8c)的操作,該操作形成稱為主要節(jié)點(diǎn)(OP)的 計(jì)算機(jī)中執(zhí)行的已錄入進(jìn)程(PI)的執(zhí)行的一部分,這一管理以錄 入數(shù)據(jù)的形式來記錄所述已錄入操作,該錄入數(shù)據(jù)實(shí)現(xiàn)輔節(jié)點(diǎn)所執(zhí) 行的重啟進(jìn)程以重放與所述已錄入操作相對應(yīng)的稱為重放操作的操 作,并且這一管理向所述重啟進(jìn)程發(fā)送與所述已錄入操作的結(jié)果相 對應(yīng)的結(jié)果,在實(shí)際結(jié)果(DR)與所述預(yù)測結(jié)果(RP)不對應(yīng)的情況下,所 述補(bǔ)充管理階段(CH)還包括存儲錄入數(shù)據(jù),該錄入數(shù)據(jù)包括結(jié)果 數(shù)據(jù),該結(jié)果數(shù)據(jù)代表了所述已錄入操作(EVInD)的所述實(shí)際結(jié)果 (DR)的值,所述操作于是稱為非預(yù)測操作。
3. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于它管理稱為已 錄入操作(EVInd;圖8c)的操作,該操作形成稱為主要節(jié)點(diǎn)(OP) 的計(jì)算機(jī)中執(zhí)行的已錄入進(jìn)程(Pl)的執(zhí)行的一部分,這一管理以 錄入數(shù)據(jù)的形式來記錄所述已錄入操作,該錄入數(shù)據(jù)實(shí)現(xiàn)輔節(jié)點(diǎn)所 執(zhí)行的重啟進(jìn)程以重放與所述已錄入#:作相對應(yīng)的稱為重放操作的 操作,并且這 一 管理向所述重啟進(jìn)程發(fā)送與所述已錄入操作的結(jié)果 相對應(yīng)的結(jié)果,所述補(bǔ)充管理階段(CH)還包括計(jì)算用于所述已錄入操作(EVInD)的標(biāo)識凄t據(jù)(SQ)。
4. 根據(jù)權(quán)利要求2或3所述的方法,其特征在于它記錄所述已 錄入進(jìn)程(Pl)所執(zhí)行的操作的稱為已錄入序列的序列(JOP),所 述序列包括發(fā)送與所述預(yù)測結(jié)果(RP)不對應(yīng)的實(shí)際結(jié)果(DR)的 稱為非預(yù)測操作的至少一個(gè)操作(EVID),這一記錄包括存儲至少 一個(gè)日志文件(JSeml),該日志文件使所述重啟進(jìn)程能夠重放與所 述已錄入序列的所述操作相對應(yīng)的操作的稱為重放序列的序列,所述日志文件包括如下數(shù)據(jù),該數(shù)據(jù)代表所述非預(yù)測操作的稱 為已錄入結(jié)果(DR)的所述實(shí)際結(jié)果、并且可用于在與所述非預(yù)測 操作相對應(yīng)的重放操作完成時(shí)使所述重啟進(jìn)程將與所述已錄入結(jié)果 相對應(yīng)的結(jié)果納入考慮之中。
5. 根據(jù)權(quán)利要求2至4中任一項(xiàng)所述的方法,其特征在于在已 錄入進(jìn)程序列的錄入過程中,錄入至少 一個(gè)預(yù)測和非確定性的操作 而不在所述日志(JSeml)內(nèi)存儲如下錄入數(shù)據(jù),該錄入數(shù)據(jù)代表所 述預(yù)測和非確定性的已錄入操作(EVInD)的所述實(shí)際結(jié)果(DR)。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于對于至少一個(gè)非預(yù) 測操作(EVInD)的錄入,在所述日志(JSeml)中存儲的所述錄入 數(shù)據(jù)包括- 一個(gè)方面包括標(biāo)識數(shù)據(jù),該標(biāo)識數(shù)據(jù)代表與所述非預(yù)測操作相 對應(yīng)的排序數(shù)據(jù)(SQ)的值;-另一方面包括結(jié)果數(shù)據(jù)(DR),該結(jié)果數(shù)據(jù)代表所述已錄入 操作所發(fā)送的所述實(shí)際結(jié)果。
7. 根據(jù)權(quán)利要求3至6中任一項(xiàng)所述的方法,其特征在于它在 日志(JSeml)中記錄(JOP)至少一個(gè)已錄入序列,對于構(gòu)成所述 序列內(nèi)至少 一 個(gè)類型的非確定性內(nèi)部事件(EVInd )的各已錄入操作, 這一記錄包括如下步驟的迭代重復(fù)-基于所述進(jìn)程(Pl )或者它的應(yīng)用(AOP)在所述操作之前的 狀態(tài)來進(jìn)行(4)確定性軟件處理(FH)以提供很可能與所述實(shí)際結(jié) 果相對應(yīng)并且構(gòu)成針對所述操作的預(yù)測結(jié)果(RP)的值;-進(jìn)行比較測試(5)以確定所述預(yù)測結(jié)果(RP)的值是否對應(yīng) 于所述實(shí)際結(jié)果(DR)的值;陽在非預(yù)測結(jié)果的情況下,在所述日志(JSeml)中存儲(6) 如下錄入數(shù)據(jù),該錄入數(shù)據(jù) 一 方面以關(guān)聯(lián)方式包括與在進(jìn)行中的所 述操作相對應(yīng)的所述排序數(shù)據(jù)(SQ)的值而另一方面包括結(jié)果數(shù)據(jù) (DR),該結(jié)果數(shù)據(jù)代表由在進(jìn)行中的所述操作(EVInD)向所述 已錄入進(jìn)程發(fā)送的所述實(shí)際結(jié)果的值。
8. 根據(jù)權(quán)利要求1所述的方法,其特征在于它管理如下操作的 稱為重放序列的序列,所述操作形成在稱為輔節(jié)點(diǎn)(SB)的計(jì)算機(jī) 中執(zhí)行的重啟進(jìn)程(PB1)的執(zhí)行的一部分,這一管理使用所述錄入 數(shù)據(jù)(JSeml;圖8d)以便在非確定性重放操作的各情況下使所述 重啟進(jìn)程將與在錄入(JOP)過程中返回的所述結(jié)果相對應(yīng)的稱為強(qiáng) 制結(jié)果(RF)的結(jié)果納入考慮之中,對于在所述錄入的過程中的至少 一 個(gè)非預(yù)測非確定性操作 (EVInD),所述補(bǔ)充管理階段(DH)包括-在所述錄入數(shù)據(jù)中讀取(5)稱為已錄入結(jié)果數(shù)據(jù)(RLi)的 結(jié)果數(shù)據(jù),該結(jié)果數(shù)據(jù)代表了與正在重放的所述操作(EVInD)相對 應(yīng)的在所述操作的錄入過程中返回的所述結(jié)果;-截獲所述重放操作的結(jié)果(RRJ)并且將所述強(qiáng)制結(jié)果(RLi) 而不是源自于所述重放操作的結(jié)果(RRJ)轉(zhuǎn)發(fā)(8)到所述重啟進(jìn) 程(PB1 )。
9. 根據(jù)權(quán)利要求1至8中任一項(xiàng)所述的方法,其特征在于它管 理如下操作的稱為重放序列的序列,所述操作形成稱為輔節(jié)點(diǎn)的計(jì) 算機(jī)中執(zhí)行的重啟進(jìn)程(PB1 )的執(zhí)行的一部分,這一管理使用所述 錄入數(shù)據(jù)(JSeml )以便在非確定性重放操作的各情況下使所述重啟的結(jié)果納入考慮之中,對于在錄入過程中預(yù)測過的至少 一個(gè)非確定性才喿作,所述補(bǔ)充 管理階段(DH)包括-進(jìn)行(6)與用于錄入所述操作的所述預(yù)測函數(shù)相對應(yīng)的稱為 重放預(yù)測函數(shù)(FH)的確定性軟件處理,并且提供針對所述重放操 作的預(yù)測結(jié)果(RP);-截獲所述重放操作的結(jié)果(RRJ)并且將所述預(yù)測結(jié)果(RP) 而不是源自于所述重放操作的結(jié)果(RRJ)轉(zhuǎn)發(fā)(8)到所述重啟進(jìn) 程。
10. #^居^^又利要求1、 8或9所述的方法,其特4i在于它管理如 下操作的稱為重放序列的序列,所述操作形成稱為輔節(jié)點(diǎn)的計(jì)算機(jī) 中執(zhí)行的重啟進(jìn)程(PB1)的執(zhí)行的一部分,這一管理使用所述錄入 數(shù)據(jù)(JSeml )以便在非確定性重放操作的各情況下使所述重啟進(jìn)程 將與在錄入過程中返回的所述結(jié)果相對應(yīng)的稱為強(qiáng)制結(jié)果(RF)的 結(jié)果納入考慮之中,至少對于就其而言所述錄入數(shù)據(jù)不包括已錄入結(jié)果的各操作 (EVInD),所述補(bǔ)充管理階段(DH)包括遞增(3)代表所述重放 操作的排序值(SQ)。
11. 根據(jù)權(quán)利要求4至10中任一項(xiàng)所述的方法,其特征在于它 管理所有如下操作,這些操作被標(biāo)識為本質(zhì)上為非確定性或者發(fā)送 被標(biāo)識為本質(zhì)上為非確定性的結(jié)果。
12. 根據(jù)權(quán)利要求4至11中任一項(xiàng)所述的方法,其特征在于它 管理所有如下操作,這些操作在所述受管理的序列內(nèi)產(chǎn)生在所述受 管理的進(jìn)程(Pl, PB1)或者它的應(yīng)用(AOP, ASB)或者寺丸行它們 的所述計(jì)算機(jī)(OP, SB)內(nèi)部的非確定性事件。
13. 根據(jù)權(quán)利要求1至12中任一項(xiàng)所述的方法,其特征在于它 管理至少一個(gè)如下操作(EVInD),該操作由/人可執(zhí)4亍文件(EXE;例程(R, RnD )的例程的調(diào)用,所述指令的執(zhí)行對稱為修改例程(RM, RMnD)的例程而不是所述原例程進(jìn)行調(diào)用,這一修改例程產(chǎn)生或者 發(fā)起所述方法的實(shí)施。
14,根據(jù)權(quán)利要求13所述的方法,其特征在于所述修改例程 (RMnD)包括至少一個(gè)如下指令,該指令在所述系統(tǒng)軟件(OPS, SBS)內(nèi)執(zhí)行并且對至少一個(gè)管理軟件代理(PlogOP, PRI)進(jìn)行調(diào) 用、管理所述方法的實(shí)施并且在用于所述受管理的進(jìn)程的所述計(jì)算 機(jī)的用戶存儲器空間(OPU, SBU)中被執(zhí)行。
15. 4艮據(jù)4又利要求13或14所述的方法,其特征在于所述》l"改 例程(RMnD)包括測試指令,該測試指令檢驗(yàn)已調(diào)用該測試指令的 指令是否是在錄入或者重放的背景下執(zhí)行的,這 一 測試由此分別影 響對所述錄入類型的(PlogOP)或者所述重放類型(PRI)的管理代 理的調(diào)用。
16. 根據(jù)權(quán)利要求12至15中任一項(xiàng)所述的方法,其特征在于 它4吏用至少一個(gè)如下預(yù)測函lt (FH),該預(yù)測函li包括S見先前在所 述受管理的進(jìn)程(PI, PB1 )的執(zhí)行過程中發(fā)生過的至少一個(gè)類型的 一個(gè)或者多個(gè)外部事件的特征而定的確定性軟件進(jìn)程。
17. 根據(jù)權(quán)利要求4至16中任一項(xiàng)所述的方法,其特征在于它 通過使用第 一預(yù)測函數(shù)來錄入至少 一個(gè)第 一操作而通過使用第二預(yù) 測函數(shù)來錄入第二操作。
18. 根據(jù)權(quán)利要求17所述的方法,其特征在于它使用通過在多 個(gè)給定函數(shù)內(nèi)進(jìn)行確定性選擇或者組合而選擇的預(yù)測函數(shù)(FH)。
19. 根據(jù)權(quán)利要求17或18所述的方法,其特征在于對所用預(yù) 測函數(shù)(FH)的選擇取決于在所述已錄入進(jìn)程(Pl)的執(zhí)行過程中 測量或者計(jì)算的變量的變化。
20. 根據(jù)權(quán)利要求18或19所述的方法,其特征在于所述日志 文件(UL, KL, JSeml )包括如下數(shù)據(jù),該數(shù)據(jù)代表了對預(yù)測函數(shù) (FH )的至少 一個(gè)選擇或者對影響這種選擇的參數(shù)的選擇。
21. 根據(jù)權(quán)利要求2至20中任一項(xiàng)所述的方法,其特征在于它 實(shí)施對稱為已錄入進(jìn)程(Pl)的至少一個(gè)應(yīng)用進(jìn)程的運(yùn)作管理,并 且包括如下步驟-錄入(JOP)在所述已錄入進(jìn)程從稱為重啟點(diǎn)的給定點(diǎn)開始一 直到稱為中斷點(diǎn)的點(diǎn)之間的執(zhí)行過程中發(fā)生的至少 一個(gè)給定類型的 所有事件,并且存儲源自于所述錄入的日志(UL, KL, JSeml);-從在與所述已錄入進(jìn)程的重啟點(diǎn)狀態(tài)相》寸應(yīng)的狀態(tài)下的重啟 進(jìn)程(PB1)開始,重放(RSB)來自所述重啟進(jìn)程的所述日志中的 所述事件,由此使所述重啟進(jìn)程達(dá)到與所述已錄入進(jìn)程在所述中斷 點(diǎn)處的狀態(tài)相對應(yīng)的狀態(tài)。
22. 根據(jù)權(quán)利要求21所述的方法,其特征在于捕獲(CAP)并 且存儲所述已錄入進(jìn)程(Pl)在所述重啟點(diǎn)處的狀態(tài)作為重啟點(diǎn)數(shù) 據(jù)(EPR),該重啟點(diǎn)數(shù)據(jù)用來將所述重啟進(jìn)程(PB1)恢復(fù)(RES) 到所述重啟點(diǎn)在向所述重啟進(jìn)程應(yīng)用所述重放步驟(RSB)之前的 狀態(tài)。
全文摘要
本發(fā)明涉及一種特別地通過錄入和重放來進(jìn)行的用于軟件操作的管理方法,該軟件操作是在執(zhí)行在計(jì)算機(jī)上執(zhí)行的應(yīng)用進(jìn)程的過程中執(zhí)行的。這一方法特別地適用于向受管理的進(jìn)程發(fā)送結(jié)果數(shù)據(jù)的內(nèi)部操作并且包括如下步驟基于受管理的進(jìn)程的狀態(tài)或者應(yīng)用(AOP,ASB)的狀態(tài)來進(jìn)行稱為預(yù)測函數(shù)(FH)的確定性軟件處理以提供用于所述操作的預(yù)測結(jié)果(RP);進(jìn)行比較測試以確定預(yù)測結(jié)果(RP)的值是否對應(yīng)于實(shí)際結(jié)果(DR,RRJ)的值;執(zhí)行所述受管理的操作的補(bǔ)充管理階段(CH,DH),這一補(bǔ)充管理視先前測試的結(jié)果而定。
文檔編號G06F11/34GK101103337SQ200680002105
公開日2008年1月9日 申請日期2006年1月20日 優(yōu)先權(quán)日2005年1月21日
發(fā)明者M·韋爾特 申請人:國際商業(yè)機(jī)器公司