亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

重放應(yīng)用過(guò)程中的內(nèi)部事件的非插入方法及其實(shí)現(xiàn)系統(tǒng)的制作方法

文檔序號(hào):6566514閱讀:248來(lái)源:國(guó)知局
專利名稱:重放應(yīng)用過(guò)程中的內(nèi)部事件的非插入方法及其實(shí)現(xiàn)系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種方法,其用于從日志(log)文件重放屬于軟件應(yīng)用的過(guò) 程內(nèi)的事件。該方法特別針對(duì)屬于多計(jì)算機(jī)環(huán)境中執(zhí)行的應(yīng)用的過(guò)程內(nèi)的內(nèi) 部事件。
本發(fā)明的領(lǐng)域是由若干 一起工作的計(jì)算機(jī)構(gòu)成的計(jì)算機(jī)的機(jī)群(cluster ) 或網(wǎng)絡(luò)的領(lǐng)域。這些機(jī)群用于執(zhí)行向用戶提供一個(gè)或更多服務(wù)的軟件應(yīng)用。 這樣的應(yīng)用可以是單個(gè)或多個(gè)過(guò)程,并且可以在單個(gè)計(jì)算機(jī)上執(zhí)行或分布在 多個(gè)計(jì)算機(jī)上,例如作為MPI ("消息傳遞接口")類型或"共享存儲(chǔ)器"類 型的分布應(yīng)用。
特別地,本發(fā)明使得能夠例如通過(guò)稱為中間應(yīng)用的另一個(gè)軟件應(yīng)用,在 機(jī)群內(nèi)管理這樣的稱為主(master)或主(primary)應(yīng)用的才幾能(funtioning ), 該稱為中間應(yīng)用可以在中間件(middleware)類型的應(yīng)用內(nèi)集成。此外,在 主節(jié)點(diǎn)或與其他(稱為次)節(jié)點(diǎn)的合作中,該機(jī)能管理可以在其中包括操作
復(fù)制、重分布、可靠化,或者該應(yīng)用的所有或一些的跟蹤或調(diào)試。
背景技術(shù)
為了例如通過(guò)強(qiáng)制或重定向它的行為管理應(yīng)用的機(jī)能,已知的是,通過(guò) 將向它注入仿真某些事件的發(fā)生的數(shù)據(jù),仿真它的環(huán)境的特定的發(fā)展。這樣 的實(shí)踐可能對(duì)測(cè)試這個(gè)應(yīng)用對(duì)某些情況(例如對(duì)它的調(diào)試)的反應(yīng)是有用的。 當(dāng)存在一個(gè)或更多日志文件時(shí),存儲(chǔ)先前發(fā)生在第一個(gè)應(yīng)用內(nèi)的事件,它對(duì) 于能夠在新的應(yīng)用中引起這些相同的事件可能是有用的。這樣的重放可以用 于例如測(cè)試該新應(yīng)用的行為,以發(fā)現(xiàn)它將如何代替舊的應(yīng)用執(zhí)行。如果在這 些記錄日志的事件發(fā)生之后,該新應(yīng)用已經(jīng)開始或激活,那么這樣的重放可 以使得能夠?qū)⒃撔聭?yīng)用引入這樣的狀態(tài),在該狀態(tài)中它已經(jīng)考慮這些相同的 事件。另外,如果使用對(duì)應(yīng)于舊應(yīng)用的給定狀態(tài)的重放點(diǎn)狀態(tài),預(yù)先恢復(fù)該 新應(yīng)用,那么重放點(diǎn)之后舊應(yīng)用中記錄日志的事件的重放,使新應(yīng)用能夠恢 復(fù)到對(duì)應(yīng)于這些事件發(fā)生之后舊應(yīng)用的狀態(tài)的狀態(tài)。
在應(yīng)用的機(jī)能中發(fā)生的事件中,在應(yīng)用中由源自該應(yīng)用的外部(即,特
這可以是例如源自鍵盤上的動(dòng)作的信號(hào)或經(jīng)由通信網(wǎng)絡(luò)到達(dá)的消息。
為了執(zhí)行應(yīng)用或其過(guò)程之 一 內(nèi)的內(nèi)部事件的仿真或重放,已知的是實(shí)際
重建(recreate)產(chǎn)生它們的消息或動(dòng)作,但是該方法需要大量資源并且仍然 限于相對(duì)筒單的情況。對(duì)修改者同樣已知的是,要管理和存儲(chǔ)這些事件的結(jié) 果的存儲(chǔ)器的值,從而給它們這些事件發(fā)生之后它們將顯示的值。然而,該 方法在對(duì)該應(yīng)用編程中表現(xiàn)額外的復(fù)雜性,這構(gòu)成了差錯(cuò)的代價(jià)和風(fēng)險(xiǎn)。
另外,如果從開始還未設(shè)計(jì)應(yīng)用以產(chǎn)生這樣的記錄,那么后來(lái)給它添加 這樣的功能是困難和代價(jià)高的,并且這構(gòu)成顯著的差錯(cuò)的風(fēng)險(xiǎn)。
也通過(guò)調(diào)整(tuning )和調(diào)試程序使用 一些方法,其使得能夠從外部強(qiáng)制 應(yīng)用的機(jī)能。然而,這些方法通常需要執(zhí)行應(yīng)用的計(jì)算機(jī)系統(tǒng)中的內(nèi)部干涉, 例如通過(guò)修改或添加系統(tǒng)中的內(nèi)核。此外,這些系統(tǒng)改變需要特定的系統(tǒng)技 能,并且可能導(dǎo)致多個(gè)網(wǎng)絡(luò)計(jì)算機(jī)之間的異構(gòu),這可能是差錯(cuò)和不穩(wěn)定性的 來(lái)源。時(shí)常,這些缺點(diǎn)主要對(duì)調(diào)整任務(wù)或隔離的配置,極大地限制記錄和重 放原則的使用,并且對(duì)于實(shí)際的開發(fā)使用中廣泛和著重(stressed)的配置是 不可接受的。
此外,在若千過(guò)程之間以非同步方式共享資源的情況下, 一個(gè)或更多這 些過(guò)程的重^L,可以包含這樣的資源的共享特性(nature)中固有的不確定或 非決定(non determinism )的要素。
當(dāng)重放期間的過(guò)程試圖訪問(wèn)這樣的共享資源時(shí),該操作的結(jié)果可能實(shí)際 上由無(wú)法預(yù)料的因素(例如也訪問(wèn)該資源的其它過(guò)程的進(jìn)度的狀態(tài))影響。 另外,當(dāng)兩個(gè)過(guò)程試圖同時(shí)訪問(wèn)同樣的資源時(shí), 一起重放兩個(gè)過(guò)程的事實(shí), 不總是保證結(jié)果與記錄日志期間或若干不同重放期間得到的結(jié)果相同。這樣 的可變性可以產(chǎn)生自例如并發(fā)的過(guò)程之間執(zhí)行速度的差別、或執(zhí)行的硬件條 件的差別或者隨機(jī)因素,其不能由重放軟件代理或機(jī)能管理直接管理。
例如,在,Elsevier Science, Ghent 2002 ( FGCS 19 (2003) 679-687)的 Michiel RONSSE等的出版物"使用記錄/重放調(diào)試共享存儲(chǔ)器并行程序 (Debugging shared memory parallel programs using record/replay ),,中,在"兌 賽條件"名稱下說(shuō)明了這種情況。
其中提到已知的解決方案,該解決方案包括維持共享變量的內(nèi)容的監(jiān)視,
其構(gòu)建特殊的編程任務(wù)作為要管理的應(yīng)用的功能,并且代表在編程中和處理 能力中的大工作負(fù)載。該工作負(fù)載使該解決方案實(shí)現(xiàn)起來(lái)代價(jià)高并且不靈活, 并且其性能對(duì)于它在開發(fā)條件下使用經(jīng)常太低。
在該相同的出版物中,作者提出了這樣的解決方案,其包括在正在考
慮的過(guò)程內(nèi)使用插入(intrusive)方法,以便特別地驗(yàn)證這樣的并發(fā)訪問(wèn)情況 的出現(xiàn),冒產(chǎn)生非確定性結(jié)果的風(fēng)險(xiǎn)。這樣的方法包括例如在要重放的應(yīng)用 的^L能內(nèi)添加同步信號(hào)(semaphore )。然而,重放和管理的應(yīng)用內(nèi)這樣的《奮 改是復(fù)雜、不靈活、代價(jià)高的,并且產(chǎn)生差錯(cuò)的風(fēng)險(xiǎn)。特別是,當(dāng)運(yùn)行主應(yīng) 用時(shí),日志操作表示用于該操作的節(jié)點(diǎn)的工作負(fù)載,并且可以是由于中間應(yīng) 用的動(dòng)作導(dǎo)致的性能下降的原因。

發(fā)明內(nèi)容
本發(fā)明的一個(gè)目的是提出 一種方法,該方法以關(guān)于這個(gè)應(yīng)用和執(zhí)行它的 系統(tǒng)可能的最透明的方式,使應(yīng)用或它的過(guò)程之一內(nèi)的內(nèi)部事件能夠仿真或 重放。
為實(shí)現(xiàn)該目的,本發(fā)明提出一種方法,用于在計(jì)算機(jī)上執(zhí)行至少一個(gè)稱 為目標(biāo)過(guò)程的應(yīng)用過(guò)程,其特征在于它通過(guò)由日志數(shù)據(jù)表示的至少一個(gè)稱 為日志操作的該目標(biāo)過(guò)程執(zhí)行操作的重放。
該方法包括下面的步驟
-由該目標(biāo)過(guò)程執(zhí)行至少一個(gè)稱為重放指令的程序指令,發(fā)起對(duì)應(yīng)于所述 曰志操作的稱為重放操作的操作,并且該操作將至少一個(gè)重放結(jié)果數(shù)據(jù)返回 給該目標(biāo)過(guò)程,該重放結(jié)果數(shù)據(jù)表示由所述重放操作得到的結(jié)果;
-由重啟過(guò)程外部的軟件代理執(zhí)行稱為強(qiáng)制的進(jìn)程,包含由目標(biāo)過(guò)程考 慮從日志數(shù)據(jù)提取的強(qiáng)制數(shù)據(jù)而不是重放結(jié)果數(shù)據(jù),并為重放操作表示稱為 日志結(jié)果的給定結(jié)果。
使用從目標(biāo)過(guò)程外部控制的強(qiáng)制過(guò)程使的能夠獲得重放,同時(shí)通過(guò)執(zhí)行 該強(qiáng)制的代理過(guò)程限制功能指令。
有利地,目標(biāo)過(guò)程通過(guò)在至少一個(gè)可執(zhí)行文件內(nèi)移動(dòng)至少一個(gè)程序執(zhí)行 指針,主動(dòng)地執(zhí)行重放指令。
更特別地,根據(jù)本發(fā)明的方法另外包含截取(interc印tion)它發(fā)起的重 放指令或重放操作的步驟。
因此,有可能讓應(yīng)用過(guò)程從它的原始可執(zhí)行文件自己進(jìn)展(progress )。 本發(fā)明因此使能夠甚至更大地降低對(duì)它的機(jī)能以及功能配置的侵?jǐn)_。另外, 本發(fā)明使得這樣的重放功能能夠較小干擾地實(shí)現(xiàn),因?yàn)椴恍枰诠芾碓撝胤?的應(yīng)用或強(qiáng)制代理內(nèi)系統(tǒng)地提供重啟過(guò)程執(zhí)行指針的進(jìn)展機(jī)制。
為了重放包含多個(gè)操作的序列,根據(jù)本發(fā)明的方法使用日志數(shù)據(jù)的稱為 曰志的有序集合,表示一系列日志操作,用于通過(guò)執(zhí)行所述連續(xù)日志操作的 重放,執(zhí)行至少一個(gè)目標(biāo)過(guò)程。
根據(jù)有利的特性,截取步驟另外包含日志數(shù)據(jù)測(cè)試階段,以驗(yàn)證它是否 包含表示記錄日志結(jié)果的日志數(shù)據(jù),該記錄日志結(jié)果對(duì)應(yīng)于重;^文操作,如果 該曰志包含這樣的記錄日志結(jié)果,那么只執(zhí)行強(qiáng)制步驟。
本發(fā)明因此使得不需要的操作要求的工作負(fù)載能夠減小。
特別地,當(dāng)重放操作包含確定性和非確定性操作時(shí),強(qiáng)制階段可以有利 地不應(yīng)用到至少 一個(gè)所述確定性操作。
事實(shí)上,計(jì)算機(jī)和/或它的軟件系統(tǒng)內(nèi)部的大量操作具有確定性特性,即
它們給出只依賴于它使用的資源和過(guò)程的狀態(tài)的結(jié)果。通過(guò)重放,從該過(guò)程 或者那些給定類型或只影響某些特定資源的所有操作、相同的狀態(tài)出發(fā),重 放序列自然地將重啟過(guò)程引入與記錄日志過(guò)程的狀態(tài)相同的狀態(tài)。當(dāng)重啟過(guò) 程主動(dòng)地執(zhí)行實(shí)施確定性操作的新指令時(shí),將得到的結(jié)果將有必要與用于記 錄日志過(guò)程的對(duì)應(yīng)操作將得到的結(jié)果相同。因此,通過(guò)不記錄日志和不重放 從尋求的目標(biāo)的觀點(diǎn)(point of view)看被識(shí)別為確定性的操作,有可能限制 由記錄日志和/或重放引起的工作負(fù)載。
該記錄日志可以例如根據(jù)一個(gè)或更多給定過(guò)程組織,并且根據(jù)一個(gè)或更 多觀點(diǎn)構(gòu)成要重放的所有操作的全局視圖,該一個(gè)或更多觀點(diǎn)可以根據(jù)需求 選擇。
根據(jù)本發(fā)明的方法可以因此使用表示至少一個(gè)給定類型的操作集合的日 志,該給定類型的操作集合在執(zhí)行稱為記錄日志過(guò)程的過(guò)程期間執(zhí)行,用于 執(zhí)行實(shí)施所述記錄日志過(guò)程的重放的目標(biāo)過(guò)程。
特別地,該方法通過(guò)至少 一個(gè)目標(biāo)過(guò)程可執(zhí)行所有非確定性內(nèi)部事件的 重放,該非確定性內(nèi)部事件在至少部分所述記錄日志過(guò)程執(zhí)行期間已經(jīng)發(fā)生。
通過(guò)實(shí)施重放日志序列的方法,該日志序列包含它的執(zhí)行的特定部分上 的所有內(nèi)部事件,并且通過(guò)從相同的狀態(tài)出發(fā),該方法使得能夠?yàn)樯婕暗馁Y 源和目標(biāo)過(guò)程得到與記錄日志過(guò)程的狀態(tài)相同的狀態(tài)。
有利地,,與記錄日志過(guò)程的執(zhí)行內(nèi)還未重放的第一個(gè)操作的位置相比, 測(cè)試記錄日志的步驟與目標(biāo)過(guò)程的執(zhí)行內(nèi)重放操作的位置有關(guān),對(duì)于該還未 重放的第一個(gè)操作記錄日志包含表示記錄日志結(jié)果的數(shù)據(jù)。
通過(guò)增大將確定重放期間是否需要強(qiáng)制階段的序列或位置號(hào),與記錄曰 志相比可以因此更簡(jiǎn)單地監(jiān)視重啟過(guò)程操作。
作為替代,或結(jié)合使用構(gòu)成部分過(guò)程的操作群聚在一起的日志,本發(fā)明 也提出通過(guò)利用表示至少一個(gè)給定類型的操作的集合的日志實(shí)現(xiàn)重放過(guò)程, 該至少一個(gè)給定類型的操作施加到稱為日志資源的共享資源。從該日志,通 過(guò)至少一個(gè)稱為重啟過(guò)程的目標(biāo)過(guò)程,該方法用于執(zhí)行所述日志」操作的重力文, 該重啟過(guò)程訪問(wèn)對(duì)應(yīng)于日志資源的稱為目標(biāo)資源的資源。
特別地,根據(jù)本發(fā)明的方法可以應(yīng)用到至少 一個(gè)由目標(biāo)過(guò)程重放的操作,
并且包括用于至少一個(gè)共享類型的目標(biāo)資源的預(yù)先空的屬性(attribution)請(qǐng) 求。然后,強(qiáng)制步驟可以包含下面的步驟
-測(cè)試階段驗(yàn)證還未為該資源重放的下 一 個(gè)日志操作的記錄日志結(jié)果符 合還是不符合所述目標(biāo)過(guò)程的屬性
-不論何時(shí)所述測(cè)試是否定的,都保持目標(biāo)過(guò)程并且重復(fù)所述測(cè)試,直到 得到肯定的結(jié)果。
本發(fā)明因此使能夠筒化重放功能性(flmctionality )的實(shí)現(xiàn),該重放功能 性應(yīng)用到若干過(guò)程之間共享的資源,同時(shí)在重放時(shí)保持記錄日志期間記下的 這些不同過(guò)程的訪問(wèn)順序。該特征應(yīng)用到例如預(yù)先空類型(如信號(hào)或共享存 儲(chǔ)器區(qū)域的屬性)的操作。
根據(jù)本發(fā)明的特性,重放指令包括對(duì)可執(zhí)行文件外部稱為原始的例程 (routine)的調(diào)用,然后截取步驟包括對(duì)稱為修改的例程(而不是所述原始 例程)的調(diào)用,該修改的例程執(zhí)行或發(fā)起強(qiáng)制操作。
例如,在調(diào)用由系統(tǒng)加載的動(dòng)態(tài)庫(kù)的指令的情況下,本發(fā)明提出通過(guò)在 系統(tǒng)中加載額外的模塊或庫(kù)執(zhí)行截取,應(yīng)用的可執(zhí)行文件將優(yōu)先調(diào)用該^t塊 或庫(kù)。如專利申請(qǐng)F(tuán)R2 820 821中公開的,該模塊可以然后通過(guò)機(jī)能管理代 理或應(yīng)用動(dòng)態(tài)地加載,并且除了原始例程的內(nèi)容外將包括執(zhí)行不同任務(wù)的修 改的例程。
有利地,修改的例程包括至少一個(gè)在軟件系統(tǒng)內(nèi)執(zhí)行的指令,并且包括
對(duì)至少一個(gè)稱為重放的軟件代理的調(diào)用,該軟件代理在目標(biāo)過(guò)程計(jì)算機(jī)的計(jì) 算機(jī)的用戶存儲(chǔ)器空間中執(zhí)行,并且由目標(biāo)過(guò)程管理重放的實(shí)現(xiàn)。
使用 一個(gè)或更多用戶存儲(chǔ)器空間中的重放代理機(jī)能,例如作為機(jī)能管理 應(yīng)用內(nèi)的應(yīng)用過(guò)程,使得能夠以靈活和模塊化的方式實(shí)現(xiàn)這些功能性,同時(shí) 限制系統(tǒng)空間中的修改或千涉,并且相對(duì)于目標(biāo)應(yīng)用如此透明地執(zhí)行。
根據(jù)一個(gè)特征,修改的例程包括測(cè)試指令,該測(cè)試指令驗(yàn)證調(diào)用它的指 令是否在重放環(huán)境中執(zhí)行,該測(cè)試影響對(duì)重放代理的調(diào)用。
在變量中,修改的例程還包含測(cè)試指令,該測(cè)試指令驗(yàn)證調(diào)用它的指令 是否在記錄日志環(huán)境中執(zhí)行,并且在這種情況下發(fā)起對(duì)記錄日志代理的調(diào)用。
因此,可以在網(wǎng)絡(luò)的一個(gè)或更多計(jì)算機(jī)或節(jié)點(diǎn)上,安裝和/或加載這樣的 包括用于執(zhí)行重放的修改的例程的系統(tǒng)模塊,而不打擾除了任何重放或記錄 曰志模式外在此執(zhí)行的各種應(yīng)用的機(jī)能。
在仿真或重放功能性改善的范圍內(nèi),本發(fā)明的另一個(gè)目的是改善應(yīng)用或 至少這些過(guò)程之一的機(jī)能的管理。
然后,根據(jù)本發(fā)明的方法執(zhí)行至少一個(gè)稱為記錄日志的應(yīng)用過(guò)程的機(jī)能
管理,并且包括下面的步驟
-記錄并且以日志數(shù)據(jù)的形式存儲(chǔ)表示至少一個(gè)給定類型的事件的數(shù)據(jù), 該至少 一個(gè)給定類型的事件,在所述記錄日志過(guò)程從稱為重啟點(diǎn)的給定點(diǎn)一
直到稱為中斷的點(diǎn)的執(zhí)行期間已經(jīng)發(fā)生;
-從對(duì)應(yīng)于記錄日志過(guò)程的重啟點(diǎn)狀態(tài)的狀態(tài)中的重啟過(guò)程,由所述重啟 過(guò)程從所述日志數(shù)據(jù)重放所述事件,因此將重啟過(guò)程引入對(duì)應(yīng)于在中斷點(diǎn)的 記錄日志過(guò)程的狀態(tài)的狀態(tài)中。
根據(jù)本發(fā)明的特性,日志數(shù)據(jù)表示一個(gè)或更多給定類型的所有事件,該 一個(gè)或更多給定類型的所有事件在記錄日志過(guò)程中從稱為重啟點(diǎn)的其執(zhí)行的 給定點(diǎn)發(fā)生。然后,重放步驟從對(duì)應(yīng)于記錄日志過(guò)程的重啟點(diǎn)狀態(tài)的狀態(tài)開 始施加到重啟過(guò)程,并且重放序列將重啟過(guò)程恢復(fù)到對(duì)應(yīng)于記錄日志過(guò)程在 曰志序列之后的狀態(tài)的狀態(tài)。
才艮據(jù)本發(fā)明,記錄日志過(guò)程在重啟點(diǎn)的狀態(tài)可以特別地:故采集(capture ), 并且以重啟點(diǎn)數(shù)據(jù)的形式存儲(chǔ),該重啟點(diǎn)數(shù)據(jù)用于將重啟過(guò)程恢復(fù)到向其應(yīng) 用重放階段之前的重啟點(diǎn)狀態(tài)。
根據(jù)本發(fā)明的方法可以特別用于執(zhí)行系列事件的重放,該系列事件包括
外部事件以及內(nèi)部事件。然后,本發(fā)明提出通過(guò)在重啟過(guò)程內(nèi)注入(injection) 或仿真這些外部事件中的每個(gè),執(zhí)行外部事件的重放。然后,由重啟過(guò)程響 應(yīng)于它們緊前面的外部事件的發(fā)生和/或處理,主動(dòng)地執(zhí)行在重放執(zhí)行中的每 個(gè)外部事件之后的內(nèi)部事件。然后,重啟過(guò)程響應(yīng)于由外部重放代理觸發(fā)的 外部事件的發(fā)生,執(zhí)行內(nèi)部事件的至少一個(gè)日志序列的重放。
在機(jī)能管理功能性內(nèi),本發(fā)明的目的也是改善這樣的工具,該工具用于 調(diào)試或用于分析或用于重現(xiàn)至少一部分應(yīng)用的機(jī)能、或該應(yīng)用的過(guò)程的至少 —個(gè)。
本發(fā)明因此提出使用機(jī)能管理對(duì)稱為跟蹤(traced)應(yīng)用的應(yīng)用的執(zhí)行, 進(jìn)行可控制的監(jiān)視,例如在該應(yīng)用的調(diào)試環(huán)境內(nèi)。這樣的監(jiān)視施加到至少一 個(gè)跟蹤應(yīng)用過(guò)程,并且包括下面的步驟
-從跟蹤應(yīng)用的給定狀態(tài)開始,記錄日志多個(gè)連續(xù)和鄰近的日志序列,該 多個(gè)連續(xù)和鄰近的記錄序列構(gòu)成跟蹤應(yīng)用的執(zhí)行內(nèi)的研究序列;
-產(chǎn)生重放步驟的控制系列,所述重放步驟產(chǎn)生其余日志序列的控制執(zhí) 行,因此根據(jù)控制的節(jié)奏產(chǎn)生研究序列的重放。
在機(jī)能管理功能性內(nèi),本發(fā)明的目的也是改善這樣的工具,該工具用于 應(yīng)用或至少這些過(guò)程之一的機(jī)能的可靠化。
從它提供給客戶的服務(wù)的觀點(diǎn)看,特別通過(guò)維護(hù)應(yīng)用的操作的改善的連 續(xù)性,可以得到這樣的可靠化。在故障時(shí),該連續(xù)性可以是總共的,即,客 戶不必重啟最小的應(yīng)用以得到相同的服務(wù)。這樣的連續(xù)性也可以是部分的, 即通過(guò)盡可能減小操作的數(shù)目和/或復(fù)雜性,客戶將不得不重復(fù)或額外執(zhí)行該 操作以得到相同的服務(wù)或該服務(wù)的一部分。
在該環(huán)境中,本發(fā)明提出實(shí)現(xiàn)機(jī)能管理方法,以可靠化稱為管理的可靠 化應(yīng)用的第 一應(yīng)用的機(jī)能,該第 一應(yīng)用在通信或者甚至冗余的稱為機(jī)群的多 計(jì)算機(jī)結(jié)構(gòu)的至少一個(gè)主節(jié)點(diǎn)(稱為操作節(jié)點(diǎn))中執(zhí)行。該穩(wěn)定化包括在 第二機(jī)群節(jié)點(diǎn)(稱為備用節(jié)點(diǎn))內(nèi),將第二應(yīng)用(稱為備用應(yīng)用)恢復(fù)到對(duì) 應(yīng)于可靠化的應(yīng)用在重啟點(diǎn)的狀態(tài)的狀態(tài)。
取決于實(shí)施例或取決于情況,該恢復(fù)可以沒(méi)有任何故障的情況下以及作 為預(yù)防措施進(jìn)行,或者在檢測(cè)到故障之后并且基于先前存儲(chǔ)的數(shù)據(jù)實(shí)現(xiàn)。
該可靠化另外包含下面的步驟
-從重啟點(diǎn)記錄日志可靠化的應(yīng)用的執(zhí)行,并且在操作節(jié)點(diǎn)外存儲(chǔ)至少一
個(gè)曰志文件中的記錄日志事件;
-檢測(cè)操作節(jié)點(diǎn)內(nèi)的故障;
畫使用所述日志文件以在備用應(yīng)用中從重啟點(diǎn)重放可靠化的應(yīng)用中記錄 曰志的事件,因此將備用應(yīng)用恢復(fù)到對(duì)應(yīng)于可靠化應(yīng)用在上一個(gè)記錄日志事 件之后的狀態(tài)的狀態(tài)。
本發(fā)明也提出這樣的系統(tǒng),其包含一起工作的計(jì)算機(jī)的網(wǎng)絡(luò),并且包括 至少一個(gè)實(shí)現(xiàn)該重放方法的節(jié)點(diǎn)。
更特別地,本發(fā)明提出這樣的網(wǎng)絡(luò),其使用實(shí)現(xiàn)根據(jù)本發(fā)明的方法的中 間件類型的應(yīng)用,以便管理所述網(wǎng)絡(luò)內(nèi)執(zhí)行的至少 一個(gè)應(yīng)用的機(jī)能。
本發(fā)明特別應(yīng)用在"中間件"類型的環(huán)境中,例如管理網(wǎng)絡(luò)和/或一個(gè)或 更多網(wǎng)絡(luò)上分布的應(yīng)用。


從實(shí)施例的方法的詳細(xì)說(shuō)明,本發(fā)明的其它特征和優(yōu)點(diǎn)將變得明顯,該
實(shí)施例決不是限制性的,并且在附圖中
圖1是圖示實(shí)現(xiàn)本發(fā)明的中間應(yīng)用的功能架構(gòu)的符號(hào)圖2是總結(jié)操作節(jié)點(diǎn)上用于記錄日志事件的組織的符號(hào)圖3是圖示來(lái)自操作節(jié)點(diǎn)的外部事件的日志以及在次(secondary)節(jié)點(diǎn)
上它的備份的操作的符號(hào)圖4c是圖示來(lái)自操作節(jié)點(diǎn)的內(nèi)部事件的日志以及在次節(jié)點(diǎn)上它的備份
的操作的符號(hào)圖4a和4b圖示如下機(jī)制的操作的兩個(gè)版本,該機(jī)制用于來(lái)自內(nèi)部事件 序列的日志數(shù)據(jù)的聚合(aggregate )傳輸;
圖5是圖示記錄日志的外部事件的重放機(jī)能、同時(shí)更新次節(jié)點(diǎn)上的重啟 應(yīng)用的符號(hào)圖6是圖示內(nèi)部事件的重放機(jī)能、同時(shí)更新次節(jié)點(diǎn)上的重啟應(yīng)用的符號(hào)
圖7是內(nèi)插技術(shù)的使用的符號(hào)圖,在調(diào)用系統(tǒng)例程期間,該內(nèi)插技術(shù)將 補(bǔ)充的指令插入到所述例程的執(zhí)行中;
圖8e是圖示用于兩個(gè)并發(fā)的過(guò)程的內(nèi)部事件重放的進(jìn)度的時(shí)間圖,其利 用在系統(tǒng)例程中添加補(bǔ)充的指令以得到與記錄日志期間相同的進(jìn)度;
圖8a和8b圖示記錄日志和重放內(nèi)部事件的操作以便只處理非確定性的
事件;
圖8c和8d是圖示分別由試探壓縮和解壓縮優(yōu)化內(nèi)部日志的圖9和IO是符號(hào)圖,用于圖示在操作節(jié)點(diǎn)上的若干同時(shí)過(guò)程中、在兩個(gè)
外部事件之間的內(nèi)部事件的不同調(diào)度期間、由試探(heuristic)壓縮優(yōu)化非確
定性內(nèi)部事件的日志的例子;
圖ll是圖示"Unix"類型的系統(tǒng)中由"讀"例程讀取操作的非決定論的
符號(hào)圖12是圖示由動(dòng)態(tài)語(yǔ)義改變使得確定的該相同例程的一個(gè)行為的符號(hào)
圖13和14是圖示由"Unix"類型的系統(tǒng)中的"選擇"和"輪詢"例程、 從操作系統(tǒng)的兩個(gè)竟?fàn)幫ǖ涝趹?yīng)用中的數(shù)據(jù)接收操作的非決定^r的符號(hào)圖; 圖15是圖示由動(dòng)態(tài)語(yǔ)義改變使得確定的該相同例程的一個(gè)行為的符號(hào)
圖16是圖示由語(yǔ)義改變使用的交互的圖。
具體實(shí)施例方式
圖1圖示實(shí)現(xiàn)本發(fā)明的中間應(yīng)用的功能結(jié)構(gòu);
在機(jī)群中,AOP主應(yīng)用(例如交易(transactional)應(yīng)用)特別通過(guò)以不 同形式輸入和輸出數(shù)據(jù),提供一定數(shù)量的服務(wù)給用戶或客戶。在機(jī)群中,該 應(yīng)用可以是單個(gè)或多任務(wù)(多過(guò)程或多線程),并且使用一定數(shù)量的資源。特 別地,這些資源可以是數(shù)據(jù),例如以數(shù)據(jù)文件、共享存儲(chǔ)器或工作存儲(chǔ)器的 空間的形式,或者可以是狀態(tài)指示符,例如以信號(hào)或互斥(mutex)的形式。
主應(yīng)用在構(gòu)成節(jié)點(diǎn)的一個(gè)或多個(gè)計(jì)算機(jī)上執(zhí)行,該節(jié)點(diǎn)稱為操作節(jié)點(diǎn)OP 或主節(jié)點(diǎn)。 一個(gè)或更多機(jī)群節(jié)點(diǎn)中,稱為中間應(yīng)用INT的機(jī)能管理應(yīng)用在一 個(gè)或更多部分中或執(zhí)行。
根據(jù)實(shí)施例,該中間應(yīng)用可以處理該機(jī)群內(nèi)主應(yīng)用才幾能的不同方面。在 與"中間件"類型的中間^^群管理軟件并行的特定工作中,這樣的中間應(yīng)用 INT可以與這樣的中間件結(jié)合,或者本身是中間件的形式
通過(guò)這里說(shuō)明的功能性,可以使用中間應(yīng)用INT,特別用于產(chǎn)生機(jī)群中 主應(yīng)用的全部或部分的復(fù)制。主應(yīng)用的復(fù)制可以提供另 一將稱為重放應(yīng)用的
應(yīng)用。
這里說(shuō)明的功能性,特別是與這樣的復(fù)制結(jié)合,也允許為主應(yīng)用實(shí)現(xiàn)可 靠性特征,或者跟蹤或研究該應(yīng)用以實(shí)現(xiàn)"調(diào)試"、調(diào)整或開發(fā)任務(wù)。對(duì)可靠 性實(shí)現(xiàn)的使用將包括例如重啟應(yīng)用作為備份或代替應(yīng)用。如下所述,根據(jù)記 錄曰志事件的放慢或控制的節(jié)奏,跟蹤或調(diào)試中的使用將包括例如事件的記
錄曰志JOP和/或重》文RSB。
因此這里說(shuō)明應(yīng)用到可靠性特征的實(shí)施例,作為非限制性例子。
在運(yùn)行要使其穩(wěn)定的AOP主應(yīng)用的不同點(diǎn)(稱為重啟點(diǎn)或"檢查點(diǎn)"), 中間應(yīng)用INT定期地或在事件發(fā)生時(shí)創(chuàng)建或更新至少一個(gè)重啟應(yīng)用ASB,該 重啟應(yīng)用ASB在稱為次級(jí)或"備用,'SB的節(jié)點(diǎn)上執(zhí)4亍。
例如通過(guò)由采集和恢復(fù)應(yīng)用來(lái)復(fù)制的方法(稱為重啟方法)創(chuàng)建或更新 該重啟應(yīng)用。所述復(fù)制方法包括主應(yīng)用的狀態(tài)的采集操作CAP,接下來(lái)是該 狀態(tài)的恢復(fù)操作RES,即它使用的全部或部分資源以及它的過(guò)程的狀態(tài)。
在這樣的采集操作CAP期間,AOP主應(yīng)用的狀態(tài)以構(gòu)成檢查點(diǎn)狀態(tài)EPR 的數(shù)據(jù)的形式備份。
一些主應(yīng)用的資源,特別是代表大容量的存儲(chǔ)(如硬盤)的數(shù)據(jù)文件, 可以在流上(on-the-flow)更新為若干不同存儲(chǔ)介質(zhì)上的若干拷貝,組成鏡 像盤或共享盤上的重啟數(shù)據(jù)文件。在這種情況下,構(gòu)成檢查點(diǎn)狀態(tài)的數(shù)據(jù)可 以包括組成對(duì)這些重啟數(shù)據(jù)文件的引用的信息。
當(dāng)檢查點(diǎn)或復(fù)制基于包括所有執(zhí)行環(huán)境和主應(yīng)用資源的采集狀態(tài)時(shí),所 述檢查點(diǎn)或所述復(fù)制,直接地或通過(guò)引用重放數(shù)據(jù)文件,可以稱為整體的 (holistic )。
從檢查點(diǎn)狀態(tài)EPR的數(shù)據(jù),中間應(yīng)用INT可以通過(guò)創(chuàng)建或更新重啟應(yīng)用 ASB實(shí)現(xiàn)恢復(fù)RES??梢远ㄆ诘鼗蛟诎l(fā)起事件發(fā)生時(shí),例如在用于管理機(jī)群 工作負(fù)載的管理者或機(jī)制的請(qǐng)求下,實(shí)現(xiàn)所述恢復(fù)。該恢復(fù)也可以在操作節(jié) 點(diǎn)的故障之后實(shí)現(xiàn),該工作節(jié)點(diǎn)的故障通過(guò)檢測(cè)檢測(cè)到,然后重啟應(yīng)用能夠 用作永久或非永久的備份應(yīng)用。
如果需要,中間應(yīng)用組織將全部或部分主應(yīng)用的服務(wù)切換到一個(gè)或更多 重啟應(yīng)用。為了使這個(gè)切換對(duì)客戶透明,通過(guò)管理虛擬網(wǎng)絡(luò)地址、以及實(shí)現(xiàn) 客戶的連接從主應(yīng)用到這些重啟應(yīng)用的轉(zhuǎn)移的"元過(guò)程",中間應(yīng)用可以使用 插入的方法。通過(guò)管理虛擬網(wǎng)絡(luò)標(biāo)識(shí)(虛擬PID )的"元過(guò)程",中間應(yīng)用也
可以使用插入的方法,允許用于這些重啟或復(fù)制過(guò)程的通信恢復(fù)到與它們的 原始過(guò)程相同的通信。
這些技術(shù)可以例如是專利FR 2 843 210中說(shuō)明的那些。
除了任何故障之外,也可以實(shí)現(xiàn)部分或全部切換之前的恢復(fù),例如分布
主應(yīng)用的工作負(fù)載或允許操作節(jié)點(diǎn)或網(wǎng)絡(luò)的某些元件的維護(hù)。
為了從客戶的觀點(diǎn)使該故障和/或切換盡可能透明,中間應(yīng)用記錄影響主
應(yīng)用幾個(gè)參考點(diǎn)的全部或部分事件,并且以一個(gè)或幾個(gè)"日志,,的形式備份它們。
完成從參考點(diǎn)狀態(tài)的恢復(fù)之后,重啟應(yīng)用處于主應(yīng)用建立所述參考點(diǎn)時(shí) 的狀態(tài)中。從該狀態(tài)開始,中間應(yīng)用使用從所述參考點(diǎn)備份的日志,從而由 重啟應(yīng)用使在主應(yīng)用中從該參考點(diǎn)已經(jīng)發(fā)生的事件重執(zhí)行或重放。實(shí)現(xiàn)該重 執(zhí)行或重放,使得重啟應(yīng)用達(dá)到主應(yīng)用在上次備份之后的狀態(tài),例如故障緊 前面的狀態(tài)。
中間應(yīng)用也可以實(shí)現(xiàn)關(guān)于重啟應(yīng)用的一些資源的虛擬化,例如當(dāng)這些資 源從恢復(fù)的參考點(diǎn)已經(jīng)改變,以便允許它運(yùn)行它的重執(zhí)行而不干擾這些資源 的實(shí)際狀態(tài),只要它還未返回到對(duì)應(yīng)于所述實(shí)際狀態(tài)的狀態(tài)。
在操作節(jié)點(diǎn)上要記錄的和次節(jié)點(diǎn)上要重放的事件中,稱為外部的事件和
稱為內(nèi)部的事件之間存在差別。
在主應(yīng)用發(fā)生時(shí),外部事件定義為在正在考慮的應(yīng)用外面。因此,外部 事件定義為應(yīng)用中由來(lái)自該應(yīng)用外面的動(dòng)作或信息(即特別來(lái)自它不控制的 硬件或軟件元件)發(fā)起的那些事件。這些外部事件可以采取數(shù)據(jù)或信號(hào)輸入 的形式,例如,如鍵盤或鼠標(biāo)的硬件接口輸入,或者通過(guò)網(wǎng)絡(luò)到達(dá)以及來(lái)自 外部世界的數(shù)據(jù),如在客戶端服務(wù)器應(yīng)用情況下的客戶端。最常見的,這些 外部事件不能從應(yīng)用的環(huán)境演繹或重現(xiàn)。這些外部事件由主應(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)部,例如以事件或信 號(hào)輸入的形式,該事件或信號(hào)輸入由該應(yīng)用的過(guò)程接收并且來(lái)自也是該應(yīng)用 一部分的另一個(gè)過(guò)程。直接或通過(guò)該應(yīng)用之外但是執(zhí)行它的節(jié)點(diǎn)的一部分的
軟件機(jī)制或代理,例如通過(guò)合作者應(yīng)用或操作系統(tǒng)的一部分,如來(lái)自UNIX 類型系統(tǒng)的"過(guò)程之間通信"(IPC)代理,可以接收這些內(nèi)部事件。這些內(nèi) 部事件可以包括"消息傳遞事件",例如來(lái)自"管道"、"信號(hào)隊(duì)列"或"消息 隊(duì)列",或者"套接字"類型的接口。這些內(nèi)部事件也可以包含"共享存儲(chǔ)器 訪問(wèn)"事件,例如信號(hào)或"互斥"。
當(dāng)應(yīng)用正在運(yùn)行時(shí),例如與外部事件相比內(nèi)部事件特別多。此外,內(nèi)部 事件對(duì)應(yīng)于快速執(zhí)行或低延遲操作,特別是與用于日志操作的時(shí)間相比,最 重要的當(dāng)后者包括網(wǎng)絡(luò)傳輸和永久介質(zhì)(如硬盤)上的存儲(chǔ)時(shí)。例如,日志
操作可以代表比內(nèi)部事件的持續(xù)時(shí)間大10到10000倍的持續(xù)時(shí)間。
如圖2中說(shuō)明的,對(duì)外部和內(nèi)部事件,從參考點(diǎn)已經(jīng)發(fā)生的事件的曰志 JOP的實(shí)現(xiàn)不同,并且獨(dú)立地備份。
由網(wǎng)絡(luò)連接到機(jī)群的操作節(jié)點(diǎn)OP包括支持系統(tǒng)空間的硬件空間,該系 統(tǒng)空間本身支持稱為"用戶空間"的空間。由參考OSI模型的一個(gè)和更多最 低層可以定義的硬件空間,特別包括用于執(zhí)行過(guò)程、實(shí)際的存儲(chǔ)器和處理器 以及通信(如網(wǎng)卡)的硬件設(shè)備。通常地,很多外部事件以通過(guò)網(wǎng)絡(luò)的通信 傳遞的形式通過(guò)硬件空間傳輸。
由參考OSI模型的一個(gè)和更多中間層可以定義的系統(tǒng)空間,特別包括操 作系統(tǒng)。該系統(tǒng)空間包括各種軟件機(jī)制和代理,該軟件機(jī)制和代理通過(guò)硬件 空間,例如以Unix系統(tǒng)中的套接字的形式,管理應(yīng)用與外部世界的通信,或 者例如以Unix系統(tǒng)中"管道"和IPC的形式,管理幾個(gè)應(yīng)用過(guò)程之間的通信。
由參考OSI模型的一個(gè)和更多最高層可以定義的用戶空間,包括這樣的 過(guò)程,該過(guò)程是由節(jié)點(diǎn)執(zhí)行的各種應(yīng)用,如主和中間應(yīng)用的一部分。在該用 戶空間中執(zhí)行幾個(gè)過(guò)程P1 、 P2和Pn,它們是一個(gè)或更多應(yīng)用(例如主應(yīng)用) 的一部分。這些過(guò)程與外部通過(guò)來(lái)自系統(tǒng)空間的一個(gè)或更多"套接字"、以及 通過(guò)來(lái)自系統(tǒng)空間的一個(gè)或更多"管道"在它們彼此之間交換信息。 一些這 樣的過(guò)程也同時(shí)以由狀態(tài)資源(未表示)管理的方式,訪問(wèn)"共享存儲(chǔ)器" 資源SHM。
當(dāng)設(shè)置檢查點(diǎn)時(shí),中間應(yīng)用可以啟動(dòng)一個(gè)或更多新的日志,或者在運(yùn)行 的日志中記錄"4全查點(diǎn)標(biāo)記"。
應(yīng)該注意,特別是在"用戶空間"或者內(nèi)部事件日志("用戶日志")的 情況下(稍后描迷),這里采用術(shù)語(yǔ)"用戶",意味著"系統(tǒng)空間用戶"。這意
味著,使用該節(jié)點(diǎn)和它的操作系統(tǒng)的應(yīng)用可以訪問(wèn)用戶空間,即使與這些應(yīng) 用通信的人或計(jì)算機(jī)不能直接訪問(wèn)該用戶空間,并且該用戶空間將被定義為 "客戶"。
外部事件在由一個(gè)或更多文件KL組成的日志中備^f分,該曰志稱為"內(nèi) 核日志"(參考圖2)。為實(shí)現(xiàn)該備份,在表示這些事件的數(shù)據(jù)到達(dá)該節(jié)點(diǎn)之
后,在OSI國(guó)際分層的低層讀取該數(shù)據(jù)。優(yōu)選地,在由"協(xié)議棧"處理之前
和解復(fù)用之前,在系統(tǒng)空間中(例如內(nèi)核中)讀取這些事件。由于從系統(tǒng)空 間內(nèi)部直接產(chǎn)生該日志,所以可能避免由寫緩沖器和不必要的環(huán)境變化導(dǎo)致 的性能損失。
圖3更詳細(xì)地描述記錄日志外部事件的操作,特別是當(dāng)它們采取TCP-IP 協(xié)議消息的形式時(shí)。主應(yīng)用在操作節(jié)點(diǎn)OP上執(zhí)行,并且包括至少一個(gè)過(guò)程 Pl。中間應(yīng)用包括首先,"IplogOP"模塊,包括控制過(guò)程CtlOP,該控制過(guò) 程CtlOP在操作節(jié)點(diǎn)OP上執(zhí)行;以及其次,"IPlogSB"模塊,包括控制過(guò)程 CtlSB,該控制過(guò)程CtlSB在次節(jié)點(diǎn)SB上執(zhí)行。在這些節(jié)點(diǎn)OP和SB的每個(gè) 上,控制過(guò)程配置和管理軟件機(jī)制或代理"disp" (DISPP、 DISPS)的操作, 該軟件機(jī)制或代理"disp" (DISPP、 DISPS)在正在考慮的節(jié)點(diǎn)的系統(tǒng)空間中 執(zhí)行。
在"Unix"類型系統(tǒng)的情況下,所述"disp"代理特別包括加載到系統(tǒng) 空間中的內(nèi)核模塊。當(dāng)系統(tǒng)導(dǎo)入(boot)時(shí),或者甚至開始要管理或使其可 靠的應(yīng)用之前,該內(nèi)核模塊就動(dòng)態(tài)地加載到內(nèi)核中。從功能結(jié)構(gòu)的觀點(diǎn)看, 例如參考OSI層,該模塊插入到IP層之下,特別是在IP層和依賴于硬件空 間的"網(wǎng)絡(luò)設(shè)備"層之間。
需要時(shí)由發(fā)送或接收搡作,該"disp"代理可以截取和存儲(chǔ)消息文件QOP 和QSB中的消息,該消息從網(wǎng)絡(luò)接收并提交給TCP層。
在步驟l中,由操作節(jié)點(diǎn)OP的系統(tǒng)空間中的"disp"代理接收消息,該 消息來(lái)自客戶,提交給過(guò)程Pl,該"disp"代理將該消息保留在消息隊(duì)列QOP 中。
在步驟2中,由"DISPP"代理將表示接收到的消息的日志消息從主節(jié) 點(diǎn)發(fā)送到次節(jié)點(diǎn)SB,在那里,DISPS代理在接收消息隊(duì)列QSB中接收它。
通過(guò)使用不同于用于與客戶通信的網(wǎng)絡(luò)設(shè)備,工作節(jié)點(diǎn)OP可以在單獨(dú) 的局域網(wǎng)(LAN)上特別與一個(gè)或更多個(gè)次節(jié)點(diǎn)SB通信。
這些次節(jié)點(diǎn)中的幾個(gè)也可以根據(jù)RFC 1112標(biāo)準(zhǔn)預(yù)訂"多#""類型的地 址,用于與操作節(jié)點(diǎn)OP通信。多播地址(例如由RFC 1112標(biāo)準(zhǔn)"用于IP 多播的主機(jī)擴(kuò)展,,)定義為處于224.0.0.0和239.255.255.255之間的范圍中的 IP地址)的使用,允許操作節(jié)點(diǎn)只發(fā)送一次同時(shí)提交給若干次節(jié)點(diǎn)的消息, 而不會(huì)用將發(fā)送給網(wǎng)絡(luò)中所有地址的傳輸使網(wǎng)絡(luò)過(guò)載。
優(yōu)選地,從節(jié)點(diǎn)OP發(fā)送到另一節(jié)點(diǎn)SB的日志消息,應(yīng)當(dāng)以所有分組或 在物理層級(jí)接收的分組的原始的形式包含這些分組。也就是說(shuō),它包含所有 提交給主應(yīng)用的數(shù)據(jù)以及網(wǎng)絡(luò)數(shù)據(jù),如因特網(wǎng)、IP和TCP頭。
在步驟3中,次節(jié)點(diǎn)SB發(fā)送確認(rèn)消息給操作節(jié)點(diǎn)OP。
在步驟4中,在操作節(jié)點(diǎn)OP上以及一旦已經(jīng)接收到相應(yīng)的確認(rèn),從消 息隊(duì)列QOP恢復(fù)該消息并發(fā)送到TCP層。
在并行的步驟4,中,次節(jié)點(diǎn)SB在日志(例如內(nèi)核外部事件記錄KL )中 記錄該消息,并且將它從接收消息隊(duì)列QSB中取出。
在步驟5中,在工作節(jié)點(diǎn)OP中,主應(yīng)用的Pl過(guò)程讀取"套接字"元件 中的消息,然后為了繼續(xù)它的操作處理它。
當(dāng)主應(yīng)用只考慮次節(jié)點(diǎn)SB確認(rèn)之后進(jìn)入的消息時(shí),本發(fā)明確保未日志 的消息不能由該應(yīng)用處理。例如,這樣的未讀消息因此能夠由TCP協(xié)議的重 傳功能恢復(fù)。
如果在內(nèi)核日志中設(shè)置檢查點(diǎn)標(biāo)記,則次節(jié)點(diǎn)SB中的控制過(guò)程CtSB 在此記錄表示所述檢查點(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)并行工作的若干處理器 或計(jì)算機(jī)的問(wèn)題。實(shí)際上,在大多數(shù)情況下,只有這些事件的順序影響應(yīng)用 后來(lái)的行為。
中間應(yīng)用INT #1限制記錄日志這些內(nèi)部事件的順序,而不記住 (memorise)它們中每個(gè)的細(xì)節(jié)或參數(shù)。該選擇因此允許減小用于記錄這些 內(nèi)部事件的JOP的數(shù)據(jù)量,并且因此通過(guò)該記錄日志最小化操作節(jié)點(diǎn)和主應(yīng) 用中引起的性能損失。
在一個(gè)或更多稱為"用戶日志"的文件組成的日志中備份內(nèi)部事件(見 圖2)。
如圖4c中說(shuō)明的,主節(jié)點(diǎn)OP和次節(jié)點(diǎn)SB通過(guò)硬件和/或軟件高速互連
(HSI)通信。所述HSI系統(tǒng)允許主節(jié)點(diǎn)的OP記錄日志過(guò)程PlogOP和次節(jié) 點(diǎn)的SB記錄日志過(guò)程PlogSB之間的數(shù)據(jù)傳遞,并且這直接繞開這兩個(gè)節(jié)點(diǎn) 的操作系統(tǒng)的全部或部分。通過(guò)使用現(xiàn)有的網(wǎng)絡(luò)接口控制器,如網(wǎng)卡和它們 的控制軟件,可以遵循已知的方法實(shí)現(xiàn)這樣的HSI系統(tǒng)。通過(guò)與機(jī)群內(nèi)部的 其余網(wǎng)絡(luò)并行或結(jié)合地使用高性能網(wǎng)絡(luò)設(shè)備,也可以實(shí)現(xiàn)這樣的HSI系統(tǒng)。
由中間應(yīng)用的記錄日志過(guò)程PlogOP在操作節(jié)點(diǎn)的OP用戶空間中仔細(xì)檢 查和讀取內(nèi)部事件。然后,通過(guò)高速連接系統(tǒng)HSI,其將表示這些內(nèi)部事件 和/或它們的發(fā)生順序的數(shù)據(jù)發(fā)送到次節(jié)點(diǎn)的記錄日志過(guò)程PlogSB。然后,這 個(gè)數(shù)據(jù)在構(gòu)成"用戶日志"的一個(gè)或更多文件中備份。
如果在"用戶日志"中要設(shè)置檢查點(diǎn)標(biāo)記,那么次節(jié)點(diǎn)的控制過(guò)程PlogSB 在此記錄表示該纟企查點(diǎn)標(biāo)記的數(shù)據(jù)。
優(yōu)選地,記錄日志過(guò)程PlogOP在內(nèi)部事件"返回"時(shí)讀取它們,即當(dāng) 它的結(jié)果已經(jīng)產(chǎn)生但還未發(fā)送到請(qǐng)求它的執(zhí)行的主應(yīng)用過(guò)程時(shí)。
例如,通過(guò)截取輸入/輸出系統(tǒng)調(diào)用,例如對(duì)"管道"的訪問(wèn),以及對(duì)鎖 定共享存儲(chǔ)器段SHM操作的響應(yīng)進(jìn)行該讀取。
通過(guò)在由系統(tǒng)提供并且由應(yīng)用調(diào)用的所有或部分例程的內(nèi)容中插入記錄 指令("記錄探測(cè)符(probe)"),可以實(shí)現(xiàn)截取。通過(guò)使用由隨后說(shuō)明的"元 過(guò)程(metaprocess )"動(dòng)態(tài)插入的技術(shù),以額外的指令的形式添加這些記錄探 測(cè)符,構(gòu)成例如如圖7中說(shuō)明的原始例程代碼結(jié)尾的結(jié)束語(yǔ)。
因此,內(nèi)部事件曰志,"用戶記錄"包括一系列記錄,每個(gè)表示內(nèi)部事件。 這些事件可以在單個(gè)文件中記錄日志,然后將包括正在考慮中的資源和/或過(guò) 程的識(shí)別。它們也可以記錄在幾個(gè)文件中,例如每個(gè)資源或每個(gè)過(guò)程或這二 者的每個(gè)組合一個(gè)文件。
對(duì)于對(duì)應(yīng)于給定資源的文件,這些記錄的每個(gè)特別包括下面的域
-在每個(gè)資源特定的序列中,用于正在考慮中的事件的序列號(hào),并且該序 列號(hào)在所述資源上的每個(gè)新事件或操作遞增;
-時(shí)間戳信息,表示例如從涉及該源的上個(gè)事件起經(jīng)過(guò)的時(shí)間;
-事件的類型,例如對(duì)輸入/輸出資源("I/O")"讀"或"寫",或者對(duì)信 號(hào)"鎖定"或"解鎖";
-結(jié)果,即在輸入/輸出操作情況下的值,或者在"鎖定"情況下獲得獨(dú) 占訪問(wèn)的過(guò)程的識(shí)別。
該結(jié)果將特別用于實(shí)現(xiàn)資源虛擬化,例如在日志中的事件由次節(jié)點(diǎn)中恢 復(fù)的重啟或備份應(yīng)用重放期間。然后,存儲(chǔ)的結(jié)果將構(gòu)成要強(qiáng)制作為在重
放期間產(chǎn)生的I/O操作請(qǐng)求的結(jié)果的值;或者在獲得"鎖"的任務(wù)的情況下 過(guò)程的虛擬識(shí)別(虛擬PID)。
為了限制由于從操作節(jié)點(diǎn)發(fā)送日志數(shù)據(jù)到 一 個(gè)或更多次節(jié)點(diǎn)的性能損 失,聚集表示幾個(gè)內(nèi)部事件的數(shù)據(jù)的發(fā)送是有用的。
為此,中間應(yīng)用可以使用幾種不同方法的組合,例如由操作節(jié)點(diǎn)OP的 稱為主的記錄日志過(guò)程PlogOP實(shí)現(xiàn)。
要理解到,應(yīng)用的內(nèi)部變化相對(duì)于外部世界,例如涉及它的客戶并不重 要,只要該操作不發(fā)送任何東西給外部世界。如果所述日志不包括內(nèi)部事件, 該內(nèi)部事件從由日志的主應(yīng)用發(fā)送的上一個(gè)外部消息起已經(jīng)發(fā)生,那么從檢
查點(diǎn)和日志恢復(fù)的重啟應(yīng)用,將不會(huì)導(dǎo)致它對(duì)外部世界的服務(wù)的任何中斷。
根據(jù)第一個(gè)方法,這個(gè)主記錄日志過(guò)程PlogOP當(dāng)內(nèi)部日志數(shù)據(jù)出現(xiàn)時(shí) 發(fā)送它,但是以異步模式并且根據(jù)傳輸有效性,而不阻塞主應(yīng)用機(jī)能,只要 后者不發(fā)送外部消息。在由主應(yīng)用下一次發(fā)送外部消息時(shí),檢測(cè)裝置警告主 記錄日志過(guò)程這件事,其然后阻塞或延緩該外部消息的發(fā)送,以及可能一個(gè) 或更多主應(yīng)用的過(guò)程的執(zhí)行。然后維持該阻塞,直到所有內(nèi)部日志數(shù)據(jù)已經(jīng) 通過(guò)該異步傳輸發(fā)送,或者直到它已經(jīng)接收用于所述數(shù)據(jù)的收條(receipt )。 根據(jù)第二個(gè)方法,主記錄過(guò)程PlogOP在緩沖器或"高速緩沖存儲(chǔ)器" 中,存儲(chǔ)表示幾個(gè)連續(xù)內(nèi)部事件的內(nèi)部日志數(shù)據(jù),而不立即將這些發(fā)送到次 節(jié)點(diǎn)的記錄日志過(guò)程PlogSB。只有當(dāng)它們的數(shù)目達(dá)到設(shè)置的閾值時(shí),或者當(dāng) 應(yīng)用必須發(fā)送稱為外部的消息給外部世界,例如提交給客戶或外部過(guò)程的數(shù) 據(jù)或信號(hào)時(shí),它發(fā)送這些內(nèi)部日志數(shù)據(jù)。在由主應(yīng)用下一次發(fā)送外部消息期 間,檢測(cè)裝置警告主記錄日志過(guò)程這件事,其然后阻塞或延緩該外部消息的 發(fā)送,以及可能一個(gè)或更多主應(yīng)用的過(guò)程的執(zhí)行。然后維持該阻塞,直到主 記錄日志過(guò)程已經(jīng)將高速緩沖存儲(chǔ)器中剩余的日志數(shù)據(jù)發(fā)送到次節(jié)點(diǎn),或者 直到它已經(jīng)接收到用于這個(gè)數(shù)據(jù)的收條。
在這兩種方法中,不得不發(fā)送外部消息的事實(shí)構(gòu)成流出(outgoing )事件, 該流出事件構(gòu)成可以稱為阻塞的類型的事件,即該類型的事件執(zhí)行該事件之 前需要關(guān)閉前面的事件的日志。根據(jù)實(shí)施例,最經(jīng)常地除外部流出事件外, 其他類型的事件可以被選擇作為阻塞。
圖4a說(shuō)明在主節(jié)點(diǎn)OP外傳輸之前、利用聚合用于若干內(nèi)部事件EVI 的曰志數(shù)據(jù)DJ的事件記錄曰志的操作。
在步驟1中,記錄日志過(guò)程PlogOP在記錄日志過(guò)程Pl運(yùn)行期間檢測(cè)事 件EVI的發(fā)生。
在步驟2中,記錄日志過(guò)程PlogOP檢查是否被檢測(cè)的事件EVI是必須 被認(rèn)作阻塞的類型。
在步驟3中,如果事件EVI不是阻塞類型,則該事件的日志產(chǎn)生日志數(shù) 據(jù)項(xiàng)DJ。
在步驟4中,在等待下一個(gè)事件的檢測(cè)之前,該日志數(shù)據(jù)項(xiàng)DJ以預(yù)定 的結(jié)構(gòu)存儲(chǔ)在主節(jié)點(diǎn)OP中,構(gòu)成緩沖器日志JSlLocal。
在階段5中,如果檢測(cè)的事件EVI是阻塞類型,那么記錄日志過(guò)程PlogOP 實(shí)現(xiàn)這樣的階段,該階段關(guān)閉先前在緩沖器日志JSlLocal中記錄日志的內(nèi)部
事件序列的運(yùn)行。
該階段5包括步驟6,在該步驟6中延緩記錄日志過(guò)程P1的執(zhí)行,掛起 終止階段5的符合要求的執(zhí)行。
該階段5也包含步驟7,在該步驟7中,主節(jié)點(diǎn)的記錄日志過(guò)程PlogOP 將緩沖器日志JSlLocal的內(nèi)容發(fā)送到次節(jié)點(diǎn)的記錄日志過(guò)程PlogSB,該次節(jié) 點(diǎn)的記錄過(guò)程PlogSB將它存儲(chǔ)在涉及檢測(cè)的事件EVI的日志JSeml中,其 后是先前的數(shù)據(jù)。主記錄日志過(guò)程PlogOP然后繼續(xù)檢測(cè)的事件EVI的直接 曰志,如果該事件也是內(nèi)部事件,那么重啟緩沖器序列。
在圖4b中說(shuō)明的變種中,可以由可能不同于阻塞類型的事件的類型的事 件發(fā)起內(nèi)部事件的緩沖。然后,這涉及發(fā)起類型的事件。可以選擇單一類型 的事件作為只阻塞類型的事件或只發(fā)起類型的事件,或者兩者。
在該變種中,檢測(cè)事件的步驟1后接著是步驟bl。在該步驟bl中,如 果檢測(cè)的事件EVI被認(rèn)為是發(fā)起(initiating)類型,那么主記錄日志過(guò)程PlogOP 檢查緩沖存儲(chǔ)器中用于記錄日志的當(dāng)前序列SEQC是否在進(jìn)行中,并且如果 不是這樣,那么初始化一個(gè)。
在隨后的步驟b2中,它檢測(cè)對(duì)于檢測(cè)的事件EVI緩沖存儲(chǔ)器中用于 記錄日志的該當(dāng)前序列SEQC是否在進(jìn)行中。
在步驟b3中,如果對(duì)于該EVI事件沒(méi)有當(dāng)前緩沖器序列SEQC是活躍 的,那么它的結(jié)果被記錄為日志數(shù)據(jù)項(xiàng)DJ。
在步驟b4中,將所述日志數(shù)據(jù)項(xiàng)DJ在先前數(shù)據(jù)之后發(fā)送到次記錄曰志
過(guò)程PlogSB,該次記錄過(guò)程PlogSB在涉及檢測(cè)的事件EVI的日志文件JSeml 中前面的那些之后存儲(chǔ)它。然后,主記錄日志過(guò)程PlogOP等待^r測(cè)新的事件。
步驟b2之后,如果對(duì)檢測(cè)的事件EVI當(dāng)前序列活躍,那么該事件的曰 志如圖4a中那樣繼續(xù)。
當(dāng)中間應(yīng)用想要將所有或部分服務(wù)從主應(yīng)用切換到重啟應(yīng)用時(shí),它由在 次節(jié)點(diǎn)中從檢查點(diǎn)狀態(tài)恢復(fù)該重啟應(yīng)用開始,然后實(shí)現(xiàn)從該后面的檢查點(diǎn)起 記錄日志的事件的重放。
特別地,對(duì)于事件驅(qū)動(dòng),即在發(fā)起事件(外部)時(shí)的主應(yīng)用,例如交易 應(yīng)用,對(duì)外部和內(nèi)部事件恢復(fù)重放的實(shí)現(xiàn)不同。
這樣的機(jī)能對(duì)該應(yīng)用意味著它包括至少一個(gè)過(guò)程,該過(guò)程可以保持等 待接收外部事件,并且在該點(diǎn)由實(shí)現(xiàn)包括內(nèi)部事件的操作起作用。
重放因此包括對(duì)記錄日志的外部事件的應(yīng)用的主動(dòng)供應(yīng)、以及提供響應(yīng) 于內(nèi)部事件的記錄日志回答的被動(dòng)響應(yīng),其由重啟應(yīng)用本身在重放期間創(chuàng)建。
圖5說(shuō)明TCP消息類型的外部事件的重放RSB的操作,該操作在一個(gè) 或更多構(gòu)成外部或"內(nèi)核日志"的文件KL中記錄日志。
所述內(nèi)核日志KL由重放過(guò)程PRE使用,該重放過(guò)程PRE屬于中間應(yīng)用 并且在次節(jié)點(diǎn)SB的用戶空間中執(zhí)行,用于將先前記錄日志的TCP消息重新 注入到重啟應(yīng)用的過(guò)程PB1中。
為實(shí)現(xiàn)該重新注入,中間應(yīng)用INT包括或使用TCP消息接收層中插入的 代理或軟件機(jī)制,例如以軟件機(jī)制或代理"ipfilter"的形式,包含IP和TCP 層之間的功能內(nèi)核模塊。對(duì)于BL網(wǎng)絡(luò)次節(jié)點(diǎn)也包括本地環(huán)路功能,對(duì)該BL 網(wǎng)絡(luò)的訪問(wèn)由系統(tǒng)的接口 "映射",以便訪問(wèn)用戶空間過(guò)程。該環(huán)路BL可以 特別包括硬件空間內(nèi)的物理設(shè)備,該物理設(shè)備允許它重新注入IP層底部的數(shù) 據(jù),這與虛擬環(huán)回接口相反,該虛擬環(huán)回接口在操作系統(tǒng)例如Unix中軟件實(shí) 現(xiàn)。
在步驟1中,重放過(guò)程PRE讀取"內(nèi)核日志"KL的文件中記錄日志的消息。
在步驟2中,重放過(guò)程PRE將該消息注入到網(wǎng)絡(luò)本地環(huán)路BL中。 在步驟3中,由IP層接收該消息,該IP層通過(guò)"ipfilter"代理的媒介將 它發(fā)送到TCP層用于處理。
在步驟4中,如果TCP層發(fā)送收條給網(wǎng)絡(luò),那么后者將由"ipfilter,,代 理過(guò)濾或阻塞。
在步驟5中,在已經(jīng)將消息發(fā)送到TCP層之后,在已經(jīng)接收到它的收條 之后,如果有,那么"ipfilter"代理發(fā)信號(hào)給重放過(guò)程PRE,消息已經(jīng)確實(shí) 由TCP層接收或處理。
在步驟6中,重啟應(yīng)用過(guò)程PB1從TCP層接收消息,并且實(shí)現(xiàn)包含在它 中的分組的異步讀:取。
遍及重放,"ipfilter"代理將重啟應(yīng)用與網(wǎng)絡(luò)隔離,同時(shí)阻止所有外部消 息到達(dá)TCP層,并且同時(shí)阻止所有重啟應(yīng)用發(fā)送的消息到達(dá)IP層,關(guān)于該 應(yīng)用透明。
在重放應(yīng)用內(nèi),為了實(shí)現(xiàn)兩個(gè)重放的外部事件之間發(fā)生的內(nèi)部事件的重 放,中間應(yīng)用允許重啟應(yīng)用獨(dú)立地運(yùn)行,同時(shí)為了它虛擬化涉及的資源,因 此實(shí)現(xiàn)被動(dòng)重放。然后,重放過(guò)程PRE關(guān)于給定的資源檢測(cè)構(gòu)成內(nèi)部事件的 每個(gè)操作,然后強(qiáng)制所述資源采用已經(jīng)記錄日志的行為,因此將該記錄曰志 期間為所述事件存儲(chǔ)的結(jié)果發(fā)送到重放應(yīng)用。
圖6到8說(shuō)明在下述情況下內(nèi)部事件的重放RSB例子,在該情況下,它 包括來(lái)自重啟應(yīng)用的兩個(gè)過(guò)程PB1和PB2的請(qǐng)求信號(hào)SEM1的操作,以便獲 得對(duì)共享資源,例如共享存儲(chǔ)器區(qū)域的共同訪問(wèn)。
在對(duì)次節(jié)點(diǎn)SB的恢復(fù)期間,這兩個(gè)過(guò)程PB1和PB2根據(jù)構(gòu)成用戶日志 的文件正在實(shí)現(xiàn)重放。在它們的重放期間,重啟應(yīng)用的執(zhí)行導(dǎo)致這些過(guò)程的 每個(gè)產(chǎn)生對(duì)單個(gè)信號(hào)SEM1的調(diào)用,包括在內(nèi)部事件曰志-"用戶日志"中的 日志文件JSEM1對(duì)應(yīng)于該信號(hào)SEM1。
使用由"元過(guò)程"動(dòng)態(tài)插入的技術(shù),通過(guò)在全部或部分由系統(tǒng)提供并由 應(yīng)用調(diào)用的例程的內(nèi)容中增添額外的指令,實(shí)現(xiàn)這些訪問(wèn)操作的檢測(cè)以及預(yù) 置它們的響應(yīng)。這樣的技術(shù)可以是例如專利FR2 843 809中說(shuō)明的。特別地, 在實(shí)現(xiàn)來(lái)自原始例程的功能的代碼之前可以聚合這些指令,并且因此構(gòu)成序 言,或者可以在該代碼之后聚合并構(gòu)成結(jié)語(yǔ)。
圖7因此說(shuō)明在例程R內(nèi)插入序言和結(jié)語(yǔ),因此給出修正例程RM。在 該例子中,應(yīng)該注意,可以使用相同的修正例程RM實(shí)現(xiàn)主應(yīng)用的日志,并 且還實(shí)現(xiàn)重啟應(yīng)用的重放。
在執(zhí)行應(yīng)用的可執(zhí)行文件期間,過(guò)程P執(zhí)行調(diào)用例程R,例如來(lái)自
"P0SIX.4"標(biāo)準(zhǔn)的例程"sem—wait"的一行代碼,該例程R為獲得對(duì)共享存 儲(chǔ)器中給定區(qū)域的共同訪問(wèn)請(qǐng)求放置給定信號(hào)。在多線程應(yīng)用的情況下,這 可能涉及指令-來(lái)自"POSIX線程,,標(biāo)準(zhǔn)的"pthread—mutex—lock"-該指令實(shí)
現(xiàn)類似的任務(wù)。
當(dāng)其導(dǎo)入時(shí)或在應(yīng)用的可執(zhí)行文件之前加載到系統(tǒng)中的插入代理 META,截取對(duì)系統(tǒng)的原始例程R的調(diào)用,并且將它轉(zhuǎn)發(fā)給修正例程RM。 該修正的例程包括實(shí)現(xiàn)或調(diào)用原始例程R- "sem_wait"-的指令,該指令前面 是實(shí)現(xiàn)序言的指令,后面是實(shí)現(xiàn)結(jié)語(yǔ)的指令。
這些補(bǔ)充的指令可以特別包括來(lái)自下面類型的算法
對(duì)序言
if (replay) check(Jseml) 對(duì)結(jié)語(yǔ)
if (replay) end—check(Jseml) else record (result, Jseml)
指令"if(replay)"測(cè)試指示應(yīng)用是否在實(shí)現(xiàn)重放的過(guò)程中的條件。
在相反的情況下("else"),這意味著應(yīng)用正在正常執(zhí)行,并且必須因此 被作為主應(yīng)用對(duì)待。然后,結(jié)語(yǔ)執(zhí)《亍功能-"record (result,Jseml)"-該功能是 如前所述的記錄探測(cè)符,并且參加內(nèi)部事件的日志,同時(shí)存儲(chǔ)結(jié)果-"result" -在曰志-"Jseml"中。
當(dāng)使用"Jseml"記錄日志重放期間,"sem—wait"例程由重啟應(yīng)用調(diào)用 時(shí),序言在實(shí)現(xiàn)系統(tǒng)的原始"sem—wait" 例程之前執(zhí)行。
圖8e表示這樣的時(shí)間流程圖,其說(shuō)明該修正例程RM的操作,以實(shí)現(xiàn)來(lái) 自包括在內(nèi)部事件日志-"用戶日志"中的JSEMl記錄日志的兩個(gè)過(guò)程PBl、 PB2的重放。根據(jù)對(duì)正在考慮中的信號(hào)SEMI特定的遞增序列^OP,對(duì)JSEMl 中記錄日志的每個(gè)事件編號(hào)。與這些編號(hào)弁op的每個(gè)相關(guān)聯(lián),JSEMl記錄曰 志包含過(guò)程的識(shí)另l!(PID),該過(guò)程在記錄日志期間已經(jīng)調(diào)用對(duì)應(yīng)于所述JSEMl 記錄日志的信號(hào)。
當(dāng)并4亍#1行兩個(gè)過(guò)程PB1和PB2時(shí),它們對(duì)使用"sem—wait"功能的 EMI信號(hào)的分別調(diào)用,不必按照在信號(hào)的日志JSEMl中存儲(chǔ)的順序進(jìn)行。
當(dāng)"id2"標(biāo)識(shí)符過(guò)程PB2在重放期間調(diào)用SEM1信號(hào)時(shí),在步驟21中, 序言然后以所述相同過(guò)程PB2的名義執(zhí)行指令"check(Jseml)"。該功能-"check(Jseml)"-在JSEMl日志中讀取對(duì)應(yīng)于序列號(hào)0PSEM1的當(dāng)前值的行, 即行"#l:idl"。
該"check"功能將讀取的值PIDlog或"idl"與調(diào)用PB2過(guò)程的標(biāo)識(shí)符 或"id2"比較。如果它指出這些值不同,那么例如通過(guò)重新執(zhí)行在連續(xù)的循 環(huán)中比較的該相同步驟21,該"check"功能延緩調(diào)用PB2過(guò)程的執(zhí)行。
隨后,當(dāng)PB1過(guò)程標(biāo)識(shí)符"idl" 在重放期間也調(diào)用SEM1信號(hào)時(shí),在 步驟ll中,序言也#1行"check(Jseml)"指令,^旦是這次以新的PB1調(diào)用過(guò) 程的名義。如果它指出所述PB1調(diào)用過(guò)程的確是這樣的一個(gè)過(guò)程,該過(guò)程標(biāo) 識(shí)符"idl"存儲(chǔ)在日志中對(duì)應(yīng)于活躍序列中的當(dāng)前號(hào)碼的行中,即值"#1", 那么"check"功能準(zhǔn)許PB1調(diào)用過(guò)程的繼續(xù)執(zhí)行。
在步驟12中,修正例程RM然后實(shí)現(xiàn)原始例程R的功能,即"sem—wait" 指令,該"sem—wait"指令然后將SEMI信號(hào)分配給它并且返回PBl調(diào)用過(guò) 程的值"idl"。
在步驟13中,結(jié)語(yǔ)然后以PBl調(diào)用過(guò)程的名義執(zhí)行"end—check(Jseml)" 指令。所述"end—check"功能然后關(guān)閉PBl過(guò)程的"sem—wait"調(diào)用,并且 使已經(jīng)在保持狀態(tài)的PB2過(guò)程的執(zhí)行去阻塞。該操作可以特別地包括該SEM 1 信號(hào)的序列號(hào)OPSEM1的遞增,使它移動(dòng)到下一個(gè)值"#2"。
在這種情況下,在步驟22中再次執(zhí)行由PB2過(guò)程調(diào)用的"check"功能 時(shí),它讀取JSEM1日志的下一行"#2: id2",并且讓它的PB2調(diào)用過(guò)程繼續(xù) 才丸行修正例程RM。
在步驟23中,修正例程RM然后實(shí)現(xiàn)原始例程R的功能或"sem一wait" 指令,該"sem一wait"指令然后將SEMI信號(hào)分配給它并返回PB2調(diào)用過(guò)程 的值"id2"。
在步驟24中,結(jié)語(yǔ)然后以PB2調(diào)用過(guò)程的名義執(zhí)行"end_check(Jseml)', 指令,再次遞增SEMI信號(hào)序列并使它可用以繼續(xù)重放。
不管SEMI信號(hào)的各種重放過(guò)程請(qǐng)求分配的順序,清楚的是,只能以在 它的JSM1日志中存儲(chǔ)的確切的順序,并且因此以與產(chǎn)生該記錄日志的主應(yīng) 用運(yùn)行期間相同的順序得到它們。
當(dāng)這些額外的指令由主應(yīng)用外部的META代理添加、并且添加到操作系 統(tǒng)而不改變后者時(shí),清楚的是,對(duì)于主應(yīng)用透明地和非插入地實(shí)現(xiàn)這些記錄 日志和重放操作,并且不改變系統(tǒng)預(yù)先存在的元件。
給定大量的內(nèi)部事件,優(yōu)化它們的記錄曰志和/或重放功能是有用的,特 別是避免任何性能的退化,該性能的退化將大大抵消從上述特性得到的好處。
在兩個(gè)外部事件之間發(fā)生的內(nèi)部事件的類型中,大多數(shù)可以分類為確定 性的,即只合并這樣的操作,該操作的結(jié)果確切地取決于這些操作之前的應(yīng) 用的狀態(tài)。
另一方面,特別是在多任務(wù)操作或幾個(gè)節(jié)點(diǎn)上分布的那些期間, 一些內(nèi) 部事件是非確定性類型,因?yàn)樗鼈儼@樣的操作,其可以提供依賴于應(yīng)用 或主節(jié)點(diǎn)外部因素的結(jié)果。
通過(guò)只記錄日志或重放非確定性類型的內(nèi)部事件,因此可能限制操作節(jié) 點(diǎn)的過(guò)載,以及通過(guò)中間應(yīng)用的使用以使主應(yīng)用可靠或管理主應(yīng)用因此導(dǎo)致 的性能下降。
如圖8a和8b中說(shuō)明的,特別對(duì)于其行為是不確定性的內(nèi)部事件,通過(guò) 只記錄日志結(jié)果并在重放只預(yù)置結(jié)果,記錄日志和重放可以加速。
對(duì)所有事件,并且特別是內(nèi)部事件(EVI),如前所述的META插入機(jī)制 (圖7 )調(diào)用修正例程RM代替原始例程R來(lái)實(shí)現(xiàn)規(guī)定的操作。該修正例程 RM包括這樣的功能性,其能夠從該事件EVI的發(fā)生發(fā)起或通知記錄日志過(guò) 程PlogOP或重放過(guò)程PRI,并且如果必要等待它的同意,以繼續(xù)該事件的處 理或?qū)⑺峤唤o已經(jīng)調(diào)用它的Pl或PB1過(guò)程。
不管這涉及記錄日志還是重放,管理該事件EVI然后包括對(duì)該事件的發(fā) 生的反應(yīng)步驟,隨后是額外的管理步驟GC (圖8a、 8b),該額外的管理步驟 GC的內(nèi)容依賴于該內(nèi)部事件的確定性或非確定性的性質(zhì)。
圖8a說(shuō)明記錄日志內(nèi)部事件的操作。當(dāng)Pl過(guò)程通過(guò)記錄日志(JOP圖 1)的運(yùn)行執(zhí)行時(shí),執(zhí)行指令實(shí)現(xiàn)施加到共享資源如SEM1信號(hào)的內(nèi)部事件 EVI。
在步驟1中,對(duì)應(yīng)于要記錄日志的事件EVI的修正例程RM,通知或發(fā) 起記錄日志過(guò)程PlogOP,該記錄過(guò)程PlogOP因此檢測(cè)該事件EVI的發(fā)生。
在步驟2中,對(duì)應(yīng)于事件EVI的修正例程RM在SEM1信號(hào)上實(shí)現(xiàn)原始 例程R中規(guī)定的操作,并且接收或計(jì)算提交給記錄日志過(guò)程Pl的結(jié)果數(shù)據(jù) DR。
在步驟3中,記錄日志過(guò)程PlogOP遞增例如分配給SEM1信號(hào)的序列 號(hào)SQ,該序列號(hào)SQ對(duì)應(yīng)于P1日志序列中檢測(cè)的事件EVI的位置。
在步驟4中,所述過(guò)程PlogOP執(zhí)行測(cè)試以確定檢測(cè)的內(nèi)部事件EVI 是否是確定性的。該測(cè)試可以應(yīng)用到例如其調(diào)用期間從修正例程RM接收的 參數(shù),或者應(yīng)用到隨該調(diào)用發(fā)送的結(jié)果數(shù)據(jù)DR的出現(xiàn),或者應(yīng)用到先前在 主OP節(jié)點(diǎn)中存儲(chǔ)的指令或事件標(biāo)識(shí)。
在步驟5中,如果檢測(cè)的事件EVI是非確定性的,那么PlogOP過(guò)程將 結(jié)果數(shù)據(jù)DR發(fā)送到次節(jié)點(diǎn)的PlogSB記錄日志過(guò)程。在前面的記錄日志事件 的結(jié)果之后,其存儲(chǔ)對(duì)應(yīng)于事件EVI的結(jié)果數(shù)據(jù)DR和序列號(hào)SQ,使得它們 在對(duì)應(yīng)于信號(hào)SEM1的日志文件JSeml中相關(guān)聯(lián)。根據(jù)記錄日志條件,JSeml 中存儲(chǔ)的數(shù)據(jù)也可以由PlogOP記錄日志過(guò)程直接存儲(chǔ)在主節(jié)點(diǎn)中的永久介 質(zhì)上的日志文件中。
為記錄日志過(guò)程P1完成內(nèi)部事件序列后,JSeml日志包含由SEM1信號(hào) 發(fā)送到所述P1過(guò)程的所有結(jié)果數(shù)據(jù)的有序集合,該有序集合與用于涉及它們 的事件的序列號(hào)相關(guān)聯(lián)。
圖8b說(shuō)明被動(dòng)重放階段RSB期間(圖1)的重啟過(guò)程PB1中、對(duì)于該 內(nèi)部事件EVI、由重放過(guò)程PRI控制(見圖6 )的存儲(chǔ)在JSeml日志中并對(duì) 應(yīng)于SEM1信號(hào)的事件的重放操作。當(dāng)PB1過(guò)程正在運(yùn)4亍時(shí)以及來(lái)自JSeml 曰志的事件重放期間,執(zhí)行指令實(shí)現(xiàn)應(yīng)用到SEM1信號(hào)的非確定性類型的內(nèi) 部事件EVI。
在步驟1中,對(duì)應(yīng)于要記錄日志的事件EVI的修正例程RM,通知或發(fā) 起重放過(guò)程PRI,該重放過(guò)程PRI因此檢測(cè)并識(shí)別該事件的發(fā)生。
在步驟2中,對(duì)應(yīng)于事件EVI的修正例程RM,在SEM1信號(hào)上實(shí)現(xiàn)原 始例程R中規(guī)定的操作,并且接收或計(jì)算對(duì)應(yīng)于實(shí)際的重^:結(jié)果RRJ的結(jié)果 數(shù)據(jù)。修正例程RM然后延緩重啟過(guò)程PB1的執(zhí)行,并且等待來(lái)自重放過(guò)程 PRI的信號(hào),以發(fā)送該結(jié)果RRJ到重啟過(guò)程PB1。
在步驟3中,重放過(guò)程PRI為重放利用與它相關(guān)聯(lián)的序列號(hào)SQi,在JSeml 曰志中讀取下一個(gè)未使用的值RLi。
在步驟4中,對(duì)應(yīng)于PB1中檢測(cè)的事件EVI的位置的、用于遞增例如分 配給SEM1信號(hào)的序列號(hào)SQ的過(guò)程,重放序列PB1。
在步驟5中,重放過(guò)程PRI對(duì)當(dāng)前序列號(hào)SQ以及日志中的讀取序列號(hào) SQi執(zhí)行測(cè)試,以確定正在進(jìn)行的重放事件是否對(duì)應(yīng)于記錄日志事件。
在預(yù)置步驟7中,如果這些事件相應(yīng),那么重放過(guò)程PRI將日志中讀取
的結(jié)果RLi發(fā)送給修正例程RM,該修正例程RM存儲(chǔ)它以代替來(lái)自原始例 程R的結(jié)果RRJ。修正例程RM然后將這個(gè)結(jié)果RLi返回到重啟過(guò)程PBl , 并且讓它繼續(xù)其執(zhí)行。
可選地,預(yù)置步驟7之前是步驟6,在該步驟6中,重放過(guò)程PRI從修 正例程RM接收實(shí)際的重放結(jié)果RRJ,并且將它與讀取的結(jié)果RLi比較,該 結(jié)果RLi對(duì)應(yīng)于記錄日志期間相同事件的結(jié)果。如果所述兩個(gè)結(jié)果RRJ和RLi 符合,那么過(guò)程直接釋放(release)修正例程,該修正例程將它的結(jié)果返回 到重啟過(guò)程PB1,并且讓它繼續(xù)它的執(zhí)行。
因此,清楚的是可以如實(shí)和確切地記錄和重放非確定性事件,為重啟過(guò) 程PB1確保重放運(yùn)行,該重放運(yùn)行將忠實(shí)于記錄日志期間目標(biāo)過(guò)程Pl的運(yùn) 行。
當(dāng)只記錄日志和重放某些事件時(shí),并且因?yàn)閷?shí)現(xiàn)本發(fā)明的補(bǔ)充內(nèi)部操作 比用于日志的存儲(chǔ)和傳輸快得多,所以降低了由于中間應(yīng)用INT的操作的開銷。
可選地,當(dāng)設(shè)想原始例程R只記錄確定性事件時(shí),對(duì)應(yīng)于它的修正例程 RM可以省略,以提供對(duì)記錄日志或重放過(guò)程的任何調(diào)用。類似地,當(dāng)設(shè)想 原始例程R只實(shí)現(xiàn)非確定性事件時(shí),它的修正例程RM可以包括對(duì)記錄日志 或重放過(guò)程的系統(tǒng)調(diào)用。測(cè)試確定性性質(zhì)的步驟4 (圖8a)可以因此通過(guò)接 收的調(diào)用的類型,或者甚至通過(guò)接收調(diào)用的事實(shí)隱含地產(chǎn)生。
在內(nèi)部事件的給定類型依賴于應(yīng)用的類型或它的執(zhí)行條件可以是確定性 的或不是確定性的情況下,修正例程RM也可以在它的序言和/或它的結(jié)語(yǔ)中 包括估計(jì)該類型的事件或這些執(zhí)行的條件的指令。
序列號(hào)SQ的使用也可以是可選的。在這種情況下,當(dāng)事件EVI是非確 定性類型時(shí),限制記錄日志過(guò)程PogOP (圖8a)記住結(jié)果數(shù)據(jù)。對(duì)它而言, 限制重放過(guò)程PRI (圖8b)讀取下一個(gè)記錄日志結(jié)果RLi,并且認(rèn)為對(duì)下 一個(gè)被檢測(cè)為非確定性的事件EVI,這是要強(qiáng)制的結(jié)果。
此外,試探或預(yù)言性的優(yōu)化方法允許不系統(tǒng)地記錄日志所有內(nèi)部非確定 性事件。該方法可以單獨(dú)或于其它優(yōu)化方法一起實(shí)現(xiàn)。
由于在用于記錄日志和重放操作、特別是關(guān)于節(jié)點(diǎn)內(nèi)部的操作的時(shí)間方 面的花費(fèi),所以如果這允許日志操作的數(shù)量減小,那么實(shí)現(xiàn)一定數(shù)目的額外 的內(nèi)部操作可以實(shí)際上是有用的。
該試:探優(yōu)化技術(shù)包括由中間應(yīng)用實(shí)現(xiàn)的試〗果壓縮,該試纟罙壓縮通過(guò)預(yù)測(cè) 結(jié)果、并施加到主應(yīng)用操作期間檢測(cè)的全部或部分內(nèi)部事件操作。
在操作節(jié)點(diǎn)中的記錄日志期間,該試探壓縮可以例如由內(nèi)部記錄日志過(guò)
程PlogOP實(shí)現(xiàn)。
圖8c說(shuō)明使用該試探壓縮CH的非確定性事件的記錄日志的功能。 當(dāng)通過(guò)記錄日志的J0P運(yùn)行執(zhí)行P1過(guò)程時(shí),執(zhí)行指令實(shí)現(xiàn)施加到共享
資源(如SEM1信號(hào))的非確定性類型的內(nèi)部事件EVInD。
在步驟1中,對(duì)應(yīng)于要記錄日志的事件EVInD的修正例程RMnD,通知
或發(fā)起記錄日志過(guò)程PlogOP,該記錄過(guò)程PlogOP因此檢測(cè)所述事件EVInD
的發(fā)生。
在步驟2中,對(duì)應(yīng)于事件EVInD的修正例程RMnD在SEM1信號(hào)上實(shí) 現(xiàn)原始例程RnD中設(shè)想的操作,并且接收或計(jì)算提交給記錄日志的過(guò)程Pl 的結(jié)果數(shù)據(jù)DR。
在步驟3中,過(guò)程PlogOP遞增對(duì)應(yīng)于涉及^:測(cè)事件EVInD的SEM1資 源的日志序列號(hào)SQ。
有利的是,所述序列號(hào)SQ存儲(chǔ)在主節(jié)點(diǎn)OP中的工作存儲(chǔ)器中。因此, 與發(fā)送結(jié)果數(shù)據(jù)到次節(jié)點(diǎn)相比,或者與在永久介質(zhì)上的日志文件中存儲(chǔ)它相 比,它的管理表現(xiàn)很低的開銷。
與SEM1信號(hào)和它的日志JSEM1相關(guān)聯(lián)的序列號(hào)SQ的遞增,因此允許 記錄由預(yù)測(cè)功能FH正確預(yù)測(cè)的非確定性事件EVInD的通過(guò),同時(shí)避免結(jié)果 數(shù)據(jù)DR的系統(tǒng)存儲(chǔ)將表現(xiàn)的開銷。
在步驟4中,過(guò)程PlogOP實(shí)現(xiàn)軟件操作FH,該軟件操作FH包括以預(yù) 測(cè)結(jié)果RP形式的該內(nèi)部事件EVInD的結(jié)果的預(yù)測(cè)。優(yōu)選地,該預(yù)測(cè)是確定 性軟件過(guò)程,其基于該事件EVInD之前的記錄日志過(guò)程Pl或主應(yīng)用的狀態(tài), 由一個(gè)或更多確定性功能組成。
在步驟5中,過(guò)程PlogOP將預(yù)測(cè)的結(jié)果RP與從檢測(cè)的事件EVInD的 運(yùn)行RnD輸出的實(shí)際結(jié)果DR比較。
在步驟6中,如果這兩個(gè)結(jié)果DR和RP不同,那么PlogOP過(guò)程將實(shí)際 結(jié)果DR和序列號(hào)SQ的相應(yīng)值轉(zhuǎn)發(fā)給次節(jié)點(diǎn)過(guò)程PlogSB,該次節(jié)點(diǎn)過(guò)程 PlogSB通過(guò)使它們相關(guān)聯(lián),將它們記憶作為對(duì)應(yīng)于正在考慮中的資源SEM1 的曰志文件Jseml中的下一行。
在該步驟期間,可能設(shè)想為日志正在考慮中的SEMI資源重新初始化序
列號(hào)SQ。在這種情況下,序列號(hào)SQ表示從其結(jié)果已經(jīng)記錄日志的上一個(gè)事
件起正確預(yù)測(cè)的事件的數(shù)量。
為記錄日志過(guò)程P1完成內(nèi)部事件的序列后,JSeml曰志包含由SEMI 信號(hào)發(fā)送到所述P1過(guò)程、并且還未由預(yù)測(cè)功能FH正確預(yù)測(cè)的所有結(jié)果數(shù)據(jù) 的有序集合。
在內(nèi)部事件的日志已經(jīng)通過(guò)使用這樣的試探優(yōu)化實(shí)現(xiàn)的情況下,中間應(yīng) 用然后在次節(jié)點(diǎn)中重放時(shí)實(shí)現(xiàn)試探解壓縮。該試探解壓縮使用與用于壓縮的 預(yù)測(cè)相同的預(yù)測(cè),并且施加到與使用試探壓縮記錄日志期間相同的事件。
圖8d因此圖示基于施加到SEM1信號(hào)的日志JSeml、由內(nèi)部重放過(guò)程 PRI (參考圖6)控制、在重啟過(guò)程PB1的重放中利用該試探解壓縮DH的用 于非確定性事件的重放操作。
在來(lái)自JSeml記錄日志的事件的重放期間,執(zhí)行指令實(shí)現(xiàn)施加到SEM1 信號(hào)的非確定性類型的內(nèi)部事件EVInD。
在步驟1中,對(duì)應(yīng)于要重放的事件EVInD的修正例程RMnD,通知或發(fā) 起重》文過(guò)程PRI,該重》文過(guò)程PRI因此^^測(cè)和識(shí)別該事件EVInD的發(fā)生。
在步驟2中,對(duì)應(yīng)于事件EVInD的修正例程RMnD,在SEM1信號(hào)上實(shí) 現(xiàn)原始例程RnD中設(shè)想的操作,并且接收或計(jì)算對(duì)應(yīng)于實(shí)際重放結(jié)果RRJ 的結(jié)果數(shù)據(jù)。然后修正例程RMnD延緩重放過(guò)程PBl的執(zhí)行。然后,它等待 來(lái)自重放過(guò)程PRI的信號(hào),從而將所述結(jié)果RRJ轉(zhuǎn)發(fā)到重啟過(guò)程P1,并且讓 它繼續(xù)它的執(zhí)行。
在步驟3中,過(guò)程PRI讀取和遞增對(duì)應(yīng)于信號(hào)SEM1的序列號(hào)SQ的值。 在步驟4中,內(nèi)部重放過(guò)程PRI將該序列號(hào)SQ與下一個(gè)序列號(hào)SQi比
較,該序列號(hào)SQi還未從對(duì)應(yīng)于該相同資源SEM1的日志文件Jseml中存儲(chǔ)
的那些重放。
在步驟5中,如果這些序列號(hào)SQ和SQi符合,那么內(nèi)部重放過(guò)程PRI 為該序列號(hào)SOi在該日志中讀取存儲(chǔ)的結(jié)果RLi,并且將它存儲(chǔ)為要由檢測(cè) 的事件EVInD返回的強(qiáng)制結(jié)果RF。內(nèi)部重放過(guò)程PRI然后存儲(chǔ)已經(jīng)重^:由 日志JSeml中的行SQi表示的事件的事實(shí),并且激活該相同記錄的下一行SQj 用于處理下一個(gè)檢測(cè)的事件。
在該步驟中,可以設(shè)想重新初始化序列號(hào)SQ用于重》文正在考慮中的
SEMI資源。
在步驟6中,如果這些序列號(hào)SQ和SQi不符合,那么內(nèi)部重放過(guò)程PRI 以預(yù)測(cè)結(jié)果RPJ形式實(shí)現(xiàn)軟件操作FH,其包括與記錄日志該內(nèi)部事件期間產(chǎn) 生的結(jié)果預(yù)測(cè)相同的結(jié)果預(yù)測(cè)。內(nèi)部重放過(guò)程PRI然后存儲(chǔ)該預(yù)測(cè)的結(jié)果RPJ 作為要由檢測(cè)的事件EVInD返回的強(qiáng)制結(jié)果RJF。
在步驟8中,內(nèi)部重放過(guò)程PRI將強(qiáng)制結(jié)果RF轉(zhuǎn)發(fā)給修正例程RMnD, 該修正例程RMnD將它強(qiáng)加(impose )給重啟過(guò)程PB1,以代替由內(nèi)部事件 EVInD返回的實(shí)際重放結(jié)果RRJ。修正例程然后讓重啟過(guò)程PB1繼續(xù)它的沖丸 行。
可選地,該預(yù)置前面可以是測(cè)試步驟7,以比較這兩個(gè)結(jié)果RRJ和RF, 并且如果這些結(jié)果符合,那么避免在重啟過(guò)程PB1中行動(dòng)。
應(yīng)該注意,該預(yù)測(cè)性優(yōu)化的方法中使用的序列數(shù)據(jù)SQ的識(shí)別,可以由 不同于前面說(shuō)明的那些(圖8a和8b)的變量組成,或者可以與這些一起組織 和處理。
因此清楚的是,即使沒(méi)有記錄日志所有非確定性事件的結(jié)果,也可以如 實(shí)和準(zhǔn)確地記錄和重放后者。這樣,因此可能優(yōu)化這些記錄日志和重放操作, 同時(shí)確保重啟過(guò)程PB1的重放運(yùn)行的運(yùn)行,該運(yùn)行忠實(shí)于記錄日志期間目標(biāo) 過(guò)程P1的運(yùn)行。
給定節(jié)點(diǎn)內(nèi)部日志操作和簡(jiǎn)單計(jì)算操作之間速度的差別,該試探優(yōu)化^支 術(shù)可能是有用的,即使使用的預(yù)測(cè)功能沒(méi)有很高的成功率。如果該差別大, 即使小于50%的預(yù)測(cè)成功率可以允許有用的優(yōu)化。
該試探優(yōu)化技術(shù)也可以使用幾個(gè)不同的預(yù)測(cè)功能;相同的提供用于記錄 曰志然后重放單個(gè)事件或內(nèi)部事件組??梢愿鶕?jù)應(yīng)用的環(huán)境或它的狀態(tài),進(jìn) 行要使用的預(yù)測(cè)功能的選擇,例如從知識(shí)數(shù)據(jù)庫(kù)或規(guī)則開始。該變化可以然 后存儲(chǔ)在由中間應(yīng)用存儲(chǔ)的日志數(shù)據(jù)中?;谠摮晒β实闹祷蛩淖兓?,通 過(guò)估計(jì)記錄日志期間該試探優(yōu)化技術(shù)的成功率,以及通過(guò)發(fā)起所述功能的改 變,也可以自適應(yīng)地使用該試探優(yōu)化技術(shù)。
該試探優(yōu)化技術(shù)中使用的預(yù)測(cè)功能的例子包括基于來(lái)自不同客戶的內(nèi) 部事件的順序預(yù)測(cè)內(nèi)部事件的發(fā)生順序。
圖9和IO說(shuō)明利用分別被評(píng)估(rate)為"a,'、 "b"和"c"的標(biāo)識(shí)符、 參與三個(gè)過(guò)程ProcA、 ProcB和ProcC的外部和內(nèi)部事件的發(fā)生,例如執(zhí)行分
別由三個(gè)不同客戶開始的三個(gè)任務(wù)Ta、 Tb和Tc。這些各種任務(wù)每個(gè)包括, 例如第一外部事件Eal、 Ebl和Ecl,以及第二外部事件Ea2、 Eb2和Ec2。 在這些第一和第二外部事件之間,這些任務(wù)中的每個(gè)包括兩個(gè)內(nèi)部非確定性 事件的開始。在圖9和10中,用于任務(wù)Ta的連續(xù)的內(nèi)部事件稱為Ial和la2, 任務(wù)Tb的那些稱為IM和lb2,以及任務(wù)Tc的那些稱為Icl和Ic2。這些內(nèi) 部事件Ial到Ic2可能互相不同,或者甚至涉及單一確定的資源,例如給共享 存儲(chǔ)器區(qū)域的單一集合的鎖分配。
在大致并發(fā)各任務(wù)期間,并且特別當(dāng)它們具有相似或共同的部分和/或具 有相似的執(zhí)行時(shí)間時(shí),預(yù)測(cè)功能包括預(yù)測(cè)中間內(nèi)部事件Ial、 Ibl和Icl的 發(fā)生順序?qū)⑴c它們前面的外部事件的發(fā)生順序相同。
當(dāng)主應(yīng)用運(yùn)行時(shí),操作節(jié)點(diǎn)OP上第一外部事件Eal、 Ebl和Ecl的發(fā)生 順序由中間應(yīng)用記錄在例如內(nèi)部記錄日志過(guò)程PlogOP中。例如,該外部事件 的順序包括與這些外部事件相關(guān)聯(lián)的過(guò)程的標(biāo)識(shí)符系列,或者值"abc"序 列。
涉及該資源的新的內(nèi)部事件的每次檢測(cè)之后,預(yù)測(cè)功能對(duì)該內(nèi)部事件的 結(jié)果(即將獲得對(duì)該資源的鎖定的過(guò)程(即剛剛請(qǐng)求它的那個(gè)過(guò)程)的標(biāo)識(shí)) 進(jìn)行預(yù)測(cè)。然后,通過(guò)將已經(jīng)獲得對(duì)該資源的鎖定的上一個(gè)過(guò)程的標(biāo)識(shí)與外 部事件的該順序比較,將計(jì)算該預(yù)測(cè)結(jié)果。
因此,預(yù)測(cè)功能將將產(chǎn)生預(yù)測(cè)Pel到Pe6的集合,每個(gè)由虛線顯示,并 且其結(jié)果在它的右手端顯示。
圖9說(shuō)明在這些內(nèi)部事件遵照外部事件的順序的情況下、為每個(gè)內(nèi)部事 件的發(fā)生進(jìn)行的預(yù)測(cè)的值。從外部事件"abc"的順序以及從發(fā)生的上一個(gè) 內(nèi)部事件,預(yù)測(cè)功能將進(jìn)行構(gòu)成值的序列"abcabc,,的預(yù)測(cè),該預(yù)測(cè)將只 在這六種情況下顯示。在試探優(yōu)化的環(huán)境下,內(nèi)部記錄日志過(guò)程PlogOP將因 此不需要轉(zhuǎn)發(fā)這些內(nèi)部事件的日志數(shù)據(jù),因?yàn)樗鼈円呀?jīng)由預(yù)測(cè)功能正確地預(yù) 見。
圖IO說(shuō)明在這些內(nèi)部事件不確切地遵照外部事件的順序、用于識(shí)別"b"
發(fā)生進(jìn)行的預(yù)測(cè)的值。從外部事件"abc"的順序以及從發(fā)生的上一個(gè)內(nèi)部 事件,預(yù)測(cè)功能將進(jìn)行構(gòu)成值序列"abccab"的預(yù)測(cè)??雌饋?lái)兩個(gè)預(yù)測(cè)Pe3 和Pe6將顯示為錯(cuò)誤,該事實(shí)將導(dǎo)致內(nèi)部記錄日志過(guò)程PlogOP在兩種情況轉(zhuǎn)
發(fā)日志數(shù)據(jù)。完成已經(jīng)顯示為不正確的第三個(gè)預(yù)測(cè)Pe3之后,該日志數(shù)據(jù)將 因此包括傳輸Ll中的值"c",然后完成也已經(jīng)顯示為不正確的第六個(gè)預(yù)測(cè) Pe6之后,傳輸L2中的值"c"。
不管這些不正確的預(yù)測(cè)Pe3和Pe6,清楚的是,該試^l罙優(yōu)化將允許內(nèi)部 記錄日志過(guò)程PlogOP只影響兩個(gè)傳輸Ll和L2,而不是它不在時(shí)將出現(xiàn)的那 六個(gè)。該從六個(gè)中傳輸四個(gè)的節(jié)省表示,工作時(shí)間比實(shí)現(xiàn)該優(yōu)化技術(shù)需要的 內(nèi)部計(jì)算和操作中的大得多,并且因此提供性能的顯著增長(zhǎng),特別是在操作
節(jié)點(diǎn)中。
此外,對(duì)由操作系統(tǒng)的標(biāo)準(zhǔn)實(shí)現(xiàn)將產(chǎn)生非確定性行為的 一些內(nèi)部事件, 可能通過(guò)語(yǔ)義改變使用優(yōu)化技術(shù)。該技術(shù)包括對(duì)節(jié)點(diǎn)中這樣的事件的實(shí)現(xiàn)的 修正,以便賦予它們將是確定性的行為。中間應(yīng)用在操作節(jié)點(diǎn)和次節(jié)點(diǎn)中同 樣地進(jìn)行該修正,該修正使這些改變的內(nèi)部事件的結(jié)果可預(yù)測(cè)。對(duì)實(shí)現(xiàn)的該 修正將由插入技術(shù)通過(guò)"元過(guò)程"動(dòng)態(tài)地進(jìn)行,該"元過(guò)程"通過(guò)對(duì)這個(gè)事 件實(shí)現(xiàn)修正行為的修正例程RM,代替實(shí)現(xiàn)例程R的原始事件。用于實(shí)現(xiàn)該 修正的技術(shù),類似于上述用于在序言和結(jié)語(yǔ)中增添記錄探測(cè)符的技術(shù)(見圖 7),但是可以包括對(duì)修正例程的中間部分的代碼的修正。該實(shí)現(xiàn)修正對(duì)主應(yīng) 用透明地產(chǎn)生,并且不改變操作系統(tǒng)預(yù)先存在的元件。通過(guò)在主應(yīng)用中4吏用 這些修正例程之一,因此永久地或至少在確定的和存儲(chǔ)的執(zhí)行間隔上,可能 記錄日志主應(yīng)用的發(fā)展,而不必存儲(chǔ)所述改變的事件的結(jié)果。在與用于執(zhí)行 重放應(yīng)用的那些相同的間隔上使用相同的修正例程,因此允許維持主應(yīng)用的 再現(xiàn)性,同時(shí)改善記錄日志和重放的性能。
例如通過(guò)這樣的規(guī)劃從原始例程可以已經(jīng)發(fā)送多個(gè)不同結(jié)果的給定情 況,修正例程只提供這樣的結(jié)果,該結(jié)果可能已經(jīng)由原始例程提供,并且因 此由主應(yīng)用和操作系統(tǒng)設(shè)想,設(shè)計(jì)該修正行為以便遵從與原始行為相同的*見 范以及完全與它兼容。
通過(guò)語(yǔ)義改變的該優(yōu)化技術(shù)使非確定性內(nèi)部事件的數(shù)量能夠減小,該非 確定性內(nèi)部事件的結(jié)果必須在操作節(jié)點(diǎn)中記錄日志,從而能夠在重啟應(yīng)用恢 復(fù)期間重放。
不同方的操作和交互的例子在圖16中以圖說(shuō)明。
例如系統(tǒng)軟件中的處理代理AT執(zhí)行這樣的操作,該操作將轉(zhuǎn)發(fā)結(jié)果DR 給過(guò)程(例如記錄過(guò)程Pi)。對(duì)很多操作或事件,特別是內(nèi)部的,所述操作 說(shuō)明書第30/35頁(yè)
由操作過(guò)程TO實(shí)現(xiàn),該操作過(guò)程(其性質(zhì)是確定性的)與稱為決定因素
(determinant)的資源RDet的集合比較。
從過(guò)程P1可以訪問(wèn)的資源, 一些可以從該過(guò)程P1的狀態(tài)的知識(shí)稱為可 重現(xiàn)資源RRepr。所述可重現(xiàn)資源特別包括其狀態(tài)只取決于它的資源。
在處理代理AT的操作中,處理TO操作可以包括處理部分TD,該處理 部分TD關(guān)于過(guò)程PI的可重現(xiàn)資源RRepr是確定性的,例如因?yàn)樗皇褂脕?lái) 自所述可重現(xiàn)資源的DER數(shù)據(jù)。
在操作過(guò)程TO包括使用個(gè)人數(shù)據(jù)處理的另一部分的情況下,該個(gè)人數(shù) 據(jù)來(lái)自不包括在過(guò)程PI的可重現(xiàn)資源RRepr中的SEMI資源,對(duì)該TnD部 分并且因此所有TO處理的結(jié)果共同的是,關(guān)于調(diào)用它的過(guò)程P1不是確定性 的。
在這樣的情況下,該語(yǔ)義改變技術(shù)可以包括使用管理代理AG以修正處 理代理的行為,或者它使用或產(chǎn)生的數(shù)據(jù),以便由該修正產(chǎn)生的操作與可重 現(xiàn)資源RRepr比較是確定性的。
該管理代理可以使用機(jī)能修改處理TMF,以修正TO操作過(guò)程的內(nèi)部操作。
它也可以使用從決定因素資源RDet輸出但是關(guān)于過(guò)程PI不可重現(xiàn) (RRepr)的輸入數(shù)據(jù)DE,從而補(bǔ)償結(jié)果DR的變化,該結(jié)果DR能夠?qū)τ?所述相同的過(guò)程P1構(gòu)成非確定性資源。可以通過(guò)TC1將輸入數(shù)據(jù)DE修改為 補(bǔ)償輸入數(shù)據(jù)DEC 、或者通過(guò)TC2將結(jié)果數(shù)據(jù)DR修改為#卜償結(jié)果數(shù)據(jù)DRC, 執(zhí)行這樣的補(bǔ)償。
該管理代理AG也可以根據(jù)一個(gè)或更多語(yǔ)義改變參數(shù)PCS,選擇或調(diào)整 它進(jìn)行的修改TMF、 TC1、 TC2,以便優(yōu)化全局處理AT和AG的效率。為保 持記錄日志JOP和重放RSB之間的可重現(xiàn),該語(yǔ)義改變參數(shù)PCS的變化只 由來(lái)自可重現(xiàn)資源RRepr的數(shù)據(jù)確定就足夠了 ,或者它的變化在記錄日志期 間存儲(chǔ)在日志UL、 KL中,并且在重放RSB期間以相同的方式讀取和應(yīng)用也 足夠了。
該行為的改變,可能特別涉及影響為給定資源竟?fàn)幍膸讉€(gè)過(guò)程的管理的 方面。
圖11和12說(shuō)明這樣的例子通過(guò)語(yǔ)義改變使用該優(yōu)化技術(shù),以使通過(guò) 使用Unix類型環(huán)境中的"讀"例程讀取接收的消息的操作是確定性的。
在它的標(biāo)準(zhǔn)實(shí)現(xiàn)中,由應(yīng)用發(fā)起的"讀"例程使用緩沖存儲(chǔ)器B的區(qū)域 讀取輸入通道ICH中的消息,并且轉(zhuǎn)發(fā)這些給所述應(yīng)用。當(dāng)消息到達(dá)時(shí),它 們?cè)谙到y(tǒng)中以連續(xù)數(shù)據(jù)的形式接收,該連續(xù)數(shù)據(jù)存儲(chǔ)在構(gòu)成輸入通道的存儲(chǔ) 器區(qū)域中。根據(jù)它的配置,"讀,,搡作可以使用不同大小的緩沖器,但是該緩 沖器被全部使用,用于輸入通道中的每個(gè)讀取。
在這個(gè)例子中,應(yīng)用對(duì)大小為"50"的緩沖器B使用連續(xù)的"讀"操作, 以接收通過(guò)輸入通道ICH連續(xù)到達(dá)它的三個(gè)消息Ml、 M2和M3。這三個(gè)消 息分別表示等于"20"、 "30"和"50"的數(shù)據(jù)量。然而, 一方面數(shù)據(jù)到達(dá)輸 入通道的速度,以及另一方面讀操作的速度,可能以在記錄日志或重放階賴二 不能預(yù)測(cè)的方式互相改變。
圖11因此表示兩個(gè)不同的可能的場(chǎng)景,用于使用原始"讀"例程讀^^相 同的三個(gè)消息。
在第一個(gè)場(chǎng)景SCA中,只有當(dāng)來(lái)自第一個(gè)消息M1、大小"20"的數(shù)據(jù) 已經(jīng)到達(dá)時(shí),進(jìn)行第一個(gè)讀RA1。緩沖器B不完全充滿,并且操作返回對(duì)應(yīng) 于內(nèi)容"Ml"和數(shù)據(jù)大小"20"的結(jié)果。然后,第二個(gè)消息M2獨(dú)自到達(dá)之 后進(jìn)行第二個(gè)讀RA2,該第二個(gè)讀RA2返回對(duì)應(yīng)于內(nèi)容"M2"和數(shù)據(jù)大小 "30"的結(jié)果。然后,第三個(gè)消息M3到達(dá)之后進(jìn)行第三個(gè)讀RA3,該第三 個(gè)讀RA3返回對(duì)應(yīng)于內(nèi)容"M3"和數(shù)據(jù)大小"50"的結(jié)果。例如,對(duì)由應(yīng) 用接收的數(shù)據(jù)的大小,該第一個(gè)場(chǎng)景A因此返回等于"20"、 "30"和"50" 的三個(gè)結(jié)果的集合。
在第二個(gè)場(chǎng)景SCB中,相同的第一個(gè)和第二個(gè)消息Ml、 M2已經(jīng)到達(dá) 時(shí)進(jìn)行第一個(gè)讀RBl,該第一個(gè)讀RB1返回對(duì)應(yīng)于內(nèi)容"M1、 M2"和數(shù)據(jù) 大小"50"的結(jié)果。然后,在第三個(gè)消息M3到達(dá)之后進(jìn)行第二個(gè)讀RB2, 該第二個(gè)讀RB返回對(duì)應(yīng)于內(nèi)容"M3"和數(shù)據(jù)大小"50"的結(jié)果。對(duì)由應(yīng)用 接收的數(shù)據(jù)的大小,該第一個(gè)場(chǎng)景SCA因此返回等于"50、 50"的兩個(gè)結(jié)果 的集合,這用于讀相同的消息。
這兩個(gè)場(chǎng)景因此返回不同的結(jié)果,對(duì)一個(gè)是"20、 30、 50",而對(duì)另一個(gè) 是"50、 50"。在此,實(shí)現(xiàn)"讀"操作的標(biāo)準(zhǔn)系統(tǒng)例程,^v應(yīng)用的觀點(diǎn)看,為 記錄日志主應(yīng)用以及重放重啟應(yīng)用實(shí)現(xiàn)非確定性事件。
對(duì)與圖11中相同的情況,圖12表示單個(gè)場(chǎng)景ScU,該場(chǎng)景ScU將通過(guò) 使用修正的"readM(讀M)" 例程代替原始"讀"例程獲得。
在這個(gè)例子中,修正例程識(shí)別每個(gè)接收的消息的實(shí)際長(zhǎng)度,并且在輸入 通道ICH中只讀對(duì)應(yīng)于單個(gè)消息的數(shù)據(jù),即使緩沖器B未填滿并且輸入通道
ICH中仍然存在要讀的數(shù)據(jù)。在記錄日志主應(yīng)用的情況下,修正例程使用對(duì) 應(yīng)于消息Ml 、 M2和M3的接收的外部事件記錄日志機(jī)制,例如IPlogOP模 塊,識(shí)別這些相同消息的實(shí)際長(zhǎng)度。在正在恢復(fù)重啟應(yīng)用時(shí)重方文的情況下, 修正例程使用對(duì)應(yīng)于消息Ml 、 M2和M3的接收的外部事件重方文才幾制,例如 IPlogSB模塊,識(shí)別這些相同消息的實(shí)際長(zhǎng)度。
在對(duì)于由應(yīng)用接收的數(shù)據(jù)大小、等于"20、 30、 50"的三個(gè)結(jié)果的單一 集合出現(xiàn)時(shí),這兩個(gè)不同的到達(dá)場(chǎng)景SCA和SCB因此對(duì)讀操作給出單一的 行為。
類似地,對(duì)緩沖器B的其它大小,產(chǎn)生結(jié)果的不同集合的原始"讀"例 程是可能的。
因此,對(duì)緩沖器大小"20",可以得到下面的結(jié)果,例如"20、 20、 20、 20、 20"或"20、 20、 10、 20、 20、 10"。
對(duì)緩沖器大小"100",可以得到下面的結(jié)果,例如"20、 30、 50"或"50、 50"或"20、 80"或"100"。
另一方面,對(duì)每個(gè)緩沖器大小,這樣修正的"readM" 例程可能只給出 結(jié)果的單一組合。
因此,對(duì)緩沖器大小"20",得到的結(jié)果的組合將是"20、 20、 10、 20、 20、 10"。
對(duì)緩沖器大小"100",得到的組合將是"20、 30、 50"。 如此修正的"readM" 例程為對(duì)應(yīng)于這樣的讀操作的內(nèi)部事件因此實(shí)現(xiàn) 確定性4亍為。
圖13到15說(shuō)明通過(guò)語(yǔ)義改變使用該優(yōu)化技術(shù)的另一個(gè)例子,用于使由 應(yīng)用過(guò)程發(fā)起的多路復(fù)用讀操作是確定性的,該應(yīng)用過(guò)程實(shí)現(xiàn)排隊(duì)循環(huán)并且 能夠從特別與多個(gè)文件描述符相關(guān)聯(lián)的多個(gè)輸入/輸出(I/O)通道接收數(shù)據(jù)。 該例子基于Unix類型環(huán)境中"選擇"例程的使用,但是也能應(yīng)用到"輪詢" 例程的使用。
在該例子中,具有分別等于"a"、 "b,,和"c,'的內(nèi)容的三個(gè)消息M1、 M2和M3由節(jié)點(diǎn)操作系統(tǒng)OS接收,提交給兩個(gè)不同的通道ICH1和ICH2。 該例子可以特別應(yīng)用到以"流"的形式通過(guò)第一通道ICH1的數(shù)據(jù)接收,
以及以消息和TCP類型的分組的形式通過(guò)第二通道ICH2的數(shù)據(jù)接收。然后, 在操作系統(tǒng)OS中,接收"流"分組前的兩個(gè)TCP分組,作為具有分別等于 "a"、 "b"和V,的內(nèi)容的三個(gè)連續(xù)的消息Ml、 M2和M3。
當(dāng)它接收這些時(shí)并且根據(jù)它的工作負(fù)載,操作系統(tǒng)OS在對(duì)應(yīng)于它們的 類型的通道ICH1和ICH2中處理和分配該數(shù)據(jù)。在它執(zhí)行期間的給定瞬間, 應(yīng)用調(diào)用"選擇"例程以發(fā)起用于不同通道的讀操作,通過(guò)該不同通道它可 以接收消息。
在它的標(biāo)準(zhǔn)實(shí)現(xiàn)中,"選擇"例程在第一個(gè)通道ICH1中讀取排隊(duì)數(shù)據(jù), 然后是第二個(gè)通道ICH2中的排隊(duì)數(shù)據(jù),并且以它讀取它們的順序立即將其 轉(zhuǎn)發(fā)給應(yīng)用。
現(xiàn)在, 一方面,數(shù)據(jù)到達(dá)操作系統(tǒng)OS的速度、由操作系統(tǒng)處理它的速 度以及因此它到達(dá)輸入信道的速度,以及另一方面,由連續(xù)的讀操作的應(yīng)用 執(zhí)行的速度,可能以在記錄日志或重放階段不能預(yù)測(cè)的方式互相改變。
在圖13中說(shuō)明的第一個(gè)場(chǎng)景SCA中,當(dāng)三個(gè)消息已經(jīng)到達(dá)兩個(gè)輸入通 道ICH1和ICH2時(shí),應(yīng)用通過(guò)"選擇"例程在第一個(gè)瞬間IA發(fā)起多路復(fù)用 的讀。當(dāng)"選擇"例程讀數(shù)據(jù)時(shí),它因此首先讀包含在第一個(gè)通道ICH1中 的第三個(gè)消息,然后是第二個(gè)通道ICH2中的前兩個(gè)消息M1和M2。然后, "選擇"例程按照讀的順序轉(zhuǎn)發(fā)該數(shù)據(jù),并且讀操作因此產(chǎn)生包含數(shù)據(jù)集合 "c、 a、 b"的結(jié)果。
在圖14中說(shuō)明的第二個(gè)場(chǎng)景SCB中,當(dāng)只有前兩個(gè)消息已經(jīng)到達(dá)第二 個(gè)輸入通道ICH2時(shí),應(yīng)用通過(guò)"選4奪"例程在第一個(gè)瞬間IB發(fā)起多路復(fù)用 的讀。當(dāng)"選擇"例程讀數(shù)據(jù)時(shí),它因此只讀第二個(gè)輸入通道ICH2中的前 兩個(gè)消息M1和M2,并且以讀或者集合"a、 b"的順序?qū)⒃摂?shù)據(jù)轉(zhuǎn)發(fā)給應(yīng)用。 在下一個(gè)讀期間,第三個(gè)消息M3已經(jīng)到達(dá)第一個(gè)通道ICH1之后,"選擇,, 例程讀該第三個(gè)消息,并且將它轉(zhuǎn)發(fā)給應(yīng)用。在所述第二個(gè)場(chǎng)景B中,由原 始"選擇"例程的讀操作因此產(chǎn)生包括數(shù)據(jù)集合"a、 b、 c"的結(jié)果。
這兩個(gè)不同的場(chǎng)景SCA和SCB因此返回不同的結(jié)果,對(duì)一個(gè)是"c、 a、 b",對(duì)另一個(gè)是"a、 b、 c"。在此,實(shí)現(xiàn)"選擇"操作的標(biāo)準(zhǔn)系統(tǒng)例程,從 應(yīng)用的觀點(diǎn)看為記錄日志主應(yīng)用以及重放重放應(yīng)用實(shí)現(xiàn)非確定性事件。
對(duì)與圖13和14中相同的情況,圖15表示單個(gè)結(jié)果,該單個(gè)結(jié)果將通過(guò) 使用修正的"selectM (選擇M)"例程代替原始"select (選擇)"例程得到。
在這個(gè)例子中,修正例程識(shí)別消息到達(dá)操作系統(tǒng)OS的順序,并且以它 們到達(dá)的順序讀消息。此外,為減小不明確的風(fēng)險(xiǎn),修正例程每次只發(fā)送單 個(gè)文件描述符。例如通過(guò)檢查輸入通道ICH1和ICH2中的消息的內(nèi)容,或者 從記錄日志和重放數(shù)據(jù),修正例程可以得到關(guān)于消息到達(dá)的順序的信息。
如果等于"a be"的三個(gè)結(jié)果的單個(gè)機(jī)群發(fā)生,那么這兩個(gè)不同的到達(dá) 場(chǎng)景SCA和SCB因此對(duì)多路復(fù)用的讀操作給出單一行為。
通過(guò)這樣修正某些例程(所述例程實(shí)現(xiàn)在標(biāo)準(zhǔn)環(huán)境中不是確定性的內(nèi)部
事件的行為)的操作的方法以使它們是確定性的,清楚的是,得到非確定性
事件的數(shù)量的減小。當(dāng)在主應(yīng)用中記錄日志期間以及重啟應(yīng)用中重放期間、
同樣地應(yīng)用該修正時(shí),完成重放之后,必須記錄日志以能夠得到重啟應(yīng)用的
事件的數(shù)量減小,該重啟應(yīng)用處于對(duì)應(yīng)于主應(yīng)用的狀態(tài)的狀態(tài)中,或者該重 啟應(yīng)用具有令人滿意的對(duì)主應(yīng)用操作的連續(xù)性因此,清楚的是,由語(yǔ)義改變的該優(yōu)化技術(shù),可以改善記錄日志和重放 操作以及因此中間應(yīng)用的性能。
事實(shí)上,根據(jù)該語(yǔ)義改變技術(shù)所應(yīng)用的例程,以及根據(jù)對(duì)它們進(jìn)行的修 正的性質(zhì),與它的原始行為相比,這可能導(dǎo)致所述例程性能較小的下降。但 是,給定日志操作的低速度,根據(jù)要記錄日志的操作的數(shù)目產(chǎn)生的節(jié)省,可 以允許在中間應(yīng)用的框架內(nèi)主應(yīng)用的總體性能的顯著改善。
在該說(shuō)明中,可以看見,中間應(yīng)用的機(jī)制主要由操作節(jié)點(diǎn)和次節(jié)點(diǎn)的用 戶空間中正在執(zhí)行的過(guò)程或模塊實(shí)現(xiàn)。特別地,這意味著在中間應(yīng)用INT(圖 1)中這里識(shí)別的、外部或內(nèi)部的記錄日志和重放過(guò)程,參考"Plog"(圖2)、 "IPlogOP"和"IPlogSB"(圖3)、 "PlogOP,,和"PlogSB"(圖4c)、 "PRE" (圖5 )和"PRT,(圖6 )、以及"META,,(圖7 )。
相反,正在系統(tǒng)空間中執(zhí)行的機(jī)制包含上面所有從應(yīng)用模塊管理的插入 模塊,或者用于添加或修正功能的那些。這特別意味著這里識(shí)別的模塊,參 考"DISP"(圖3)和"ipfilter"(圖5 )。需要時(shí),這些內(nèi)核模塊中的某些也 可以從應(yīng)用模塊加載或卸載。
中間應(yīng)用的執(zhí)行和"壽命"發(fā)生在用戶空間中的事實(shí),使能夠限制與不 同節(jié)點(diǎn)的操作系統(tǒng)的交互。在所述中間應(yīng)用的部署中,該特征特別提供部 署和管理的靈活性;對(duì)于操作系統(tǒng)以及它們的可選的異構(gòu)性的某種獨(dú)立性; 限制類型或釋放不兼容的風(fēng)險(xiǎn);并且可以限制未被包含的節(jié)點(diǎn)的系統(tǒng)空間中
的干涉,或者只到較小的程度。通過(guò)避免系統(tǒng)空間的預(yù)先存在的元件中太多 深入的干涉,以及對(duì)于規(guī)范和這些操作系統(tǒng)的變化、并且對(duì)于管理它們的組 織的策略保留某種商業(yè)和技術(shù)的獨(dú)立性,該對(duì)于操作系統(tǒng)的獨(dú)立性也可以限 制發(fā)展的時(shí)間和花費(fèi)。
如上所述的中間應(yīng)用可以以不同的方式實(shí)現(xiàn),以及才艮據(jù)不同組合以為機(jī) 群的用戶或管理者提供對(duì)于其它應(yīng)用的支持或管理服務(wù)。可以特別地以"中 間件,'類型的網(wǎng)絡(luò)軟件產(chǎn)品的形式得到這樣的服務(wù),允許以它們的原始版本 ("遺產(chǎn)")的一個(gè)或更多應(yīng)用管理機(jī)群中的優(yōu)化或可靠性改善,同時(shí)提供靈 活性或額外的安全性或容錯(cuò)的功能,例如適合該機(jī)群的性質(zhì)。
這些應(yīng)用提供給它們的客戶。每個(gè)應(yīng)用將因此能夠作為主應(yīng)用對(duì)待,并且以 重啟應(yīng)用的形式恢復(fù),從而必要時(shí)為它的客戶代替主應(yīng)用。
由正在全部或部分給定節(jié)點(diǎn)中執(zhí)行的應(yīng)用提供的服務(wù)也可以通過(guò)完全釋 放它們的原始節(jié)點(diǎn),動(dòng)態(tài)地并且需要時(shí)轉(zhuǎn)移到一個(gè)或更多其它節(jié)點(diǎn)。因此, 實(shí)現(xiàn)該節(jié)點(diǎn)上想要的所有硬件或軟件干涉、不管這些是維護(hù)、試驗(yàn)、更新或 代替將是可能的。
可以特別地使用這樣的中間應(yīng)用以實(shí)現(xiàn)"中間件"類型的環(huán)境,包含用 于在不同節(jié)點(diǎn)之間,特別是根據(jù)它的功率、可用性或網(wǎng)絡(luò)中它的地理位置, 例如它離它的客戶的遠(yuǎn)近或使用的數(shù)據(jù),分配工作負(fù)載(負(fù)載均衡)的功能 性,從而優(yōu)化不同硬件的使用。
顯然,本發(fā)明不限于剛才已經(jīng)說(shuō)明的例子,并且可以對(duì)其進(jìn)行很多修正 而不背離本發(fā)明的框架。
權(quán)利要求
1.一種方法,用于執(zhí)行計(jì)算機(jī)(SB)上至少一個(gè)稱為目標(biāo)(PB1)的應(yīng)用過(guò)程,特征在于它通過(guò)由日志數(shù)據(jù)(JSeml;圖8b)表示的至少一個(gè)稱為日志操作的所述目標(biāo)過(guò)程執(zhí)行重放(RSB),該方法包括下面的步驟-由稱為重放指令的至少一個(gè)程序指令的該目標(biāo)過(guò)程執(zhí)行,對(duì)應(yīng)于所述日志操作發(fā)起稱為重放操作(EVI)的操作,并且其將表示由所述重放操作得到的結(jié)果的至少一個(gè)重放結(jié)果數(shù)據(jù)(RRJ)返回至所述目標(biāo)過(guò)程(PB1);-由重啟過(guò)程外部的軟件代理(PRI)實(shí)現(xiàn)稱為強(qiáng)制(7)的處理,包括由目標(biāo)過(guò)程考慮從日志數(shù)據(jù)發(fā)出的強(qiáng)制數(shù)據(jù),代替重放結(jié)果數(shù)據(jù)(RRJ),并且為重放操作表示稱為記錄日志結(jié)果(RLi)的給定結(jié)果。
2. 根據(jù)權(quán)利要求1所述的方法,特征在于目標(biāo)過(guò)程(PB1)通過(guò)在至 少一個(gè)可執(zhí)行文件(EXE;圖7)內(nèi)移動(dòng)至少一個(gè)程序執(zhí)行指針,主動(dòng)執(zhí)行重 放指令。
3. 根據(jù)權(quán)利要求1或2所述的方法,特征在于它另外包含重放指令或 它發(fā)起的重放操作(EVI)的截取步驟(META;圖7 )。
4. 根據(jù)權(quán)利要求3所述的方法,特征在于它使用日志數(shù)據(jù)的稱為日志 (UL, JSeml;圖6)的有序集合,該日志數(shù)據(jù)表示日志操作系列,從而通過(guò)執(zhí)行該日志操作系列的重放(RSB)執(zhí)行至少一個(gè)目標(biāo)過(guò)程(PB1)。
5. 根據(jù)權(quán)利要求4所述的方法,特征在于截取步驟(META)另外包 括測(cè)試階段,用于測(cè)試(5;圖8b)日志數(shù)據(jù)(JSeml)以驗(yàn)證是否它包含表 示日志結(jié)果(RLi)的日志數(shù)據(jù),其中所述日志結(jié)果對(duì)應(yīng)于重放操作(EVI), 如果所述日志包含這樣的日志結(jié)果(RLi ),才執(zhí)行強(qiáng)制步驟(7 )。
6. 根據(jù)權(quán)利要求4或5之一所述的方法,特征在于重放操作一方面包 括確定性操作,另一方面包括非確定性操作,強(qiáng)制階段(7;圖8b)不應(yīng)用 到至少 一 個(gè)所述確定性操作。
7. 根據(jù)權(quán)利要求4到6之一所述的方法,特征在于它使用表示在稱為 記錄日志(Pl )的過(guò)程執(zhí)行期間執(zhí)行的至少一個(gè)給定類型的所有操作的曰志(JSeml, UL),設(shè)計(jì)該日志以便使得目標(biāo)過(guò)程(PB1)能夠執(zhí)行,執(zhí)行所述 記錄日志過(guò)程的重放(RSB)。
8. 根據(jù)權(quán)利要求4到7之一所述的方法,特征在于它使用日志(JSeml, UL)表示至少一個(gè)給定類型的所有操作,涉及給定資源(SEM1)并且在稱 為記錄日志(Pl )的過(guò)程執(zhí)行期間執(zhí)行,設(shè)計(jì)該日志以便使得目標(biāo)過(guò)程(PB1 ) 能夠執(zhí)行,執(zhí)行涉及所述資源的所述記錄日志過(guò)程的重放(RSB )。
9. 根據(jù)權(quán)利要求5到8之一所述的方法,特征在于通過(guò)至少一個(gè)目標(biāo) 過(guò)程(PB1),它執(zhí)行所有非確定性內(nèi)部事件的重放(RSB),該所有非確定性 內(nèi)部事件在所述記錄日志過(guò)程(Pl)的至少一部分執(zhí)行期間已經(jīng)發(fā)生。
10. 根據(jù)權(quán)利要求5到9之一所述的方法,特征在于與在記錄日志執(zhí) 行內(nèi)還未重放的第一個(gè)操作的位置(SQi)相比,日志(JSeml)的測(cè)試步驟(5;圖Sb)涉及目標(biāo)過(guò)程(PB1)的執(zhí)行內(nèi)重放操作的位置(SQ),對(duì)于該 與還未重放的第一個(gè)操作所述日志(JSeml)包含表示日志結(jié)果(RLi)的數(shù) 據(jù)。
11. 根據(jù)權(quán)利要求4到10之一所述的方法,特征在于它使用曰志 (JSeml ),以由至少一個(gè)稱為重啟過(guò)程的過(guò)程(PB1和PB2)執(zhí)行所述日志操作的重放,該日志(JSeml)表示應(yīng)用到稱為日志資源(SEM1)的共享資 源的至少 一個(gè)給定類型的所有操作,該重啟過(guò)程訪問(wèn)對(duì)應(yīng)于日志資源的稱為 目標(biāo)資源(SEM1 )的資源。
12. 根據(jù)權(quán)利要求11所述的方法,由目標(biāo)過(guò)程(PB2;圖8e)應(yīng)用到至 少一個(gè)重放操作,并且包括對(duì)共享資源類型的、至少一個(gè)目標(biāo)資源(SEM1) 的屬性的、預(yù)先空的請(qǐng)求,特征在于,強(qiáng)制步驟包括下面的步驟-測(cè)試步驟(21 ),驗(yàn)證還未為該資源重放的下一個(gè)日志操作(# 1 )的日 志結(jié)果(idl)符合還是不符合對(duì)所述目標(biāo)過(guò)程(PB2)的屬性;-不論何時(shí)該測(cè)試(21)是否定的,都保持目標(biāo)過(guò)程(PB2)并且重復(fù)所 述測(cè)試,直到得到肯定的結(jié)果(22)。
13. 根據(jù)權(quán)利要求3到12之一所述的方法,特征在于重放指令包括對(duì) 稱為原始(R;圖7)的例程的調(diào)用,該例程在可執(zhí)行文件(EXE)的外部, 截取步驟(META)包括對(duì)稱為修改(RM)的例程以代替所述原始例程的調(diào) 用,該修改的例程執(zhí)行或發(fā)起強(qiáng)制處理(7;圖8b)。
14. 根據(jù)權(quán)利要求13所述的方法,特征在于修改的例程(RM)包括 至少一個(gè)在軟件系統(tǒng)(SBS)內(nèi)執(zhí)行的指令,并且包括對(duì)至少一個(gè)稱為重放(PRI)的軟件代理的調(diào)用,該軟件代理在目標(biāo)過(guò)程(PB1和PB2 )的計(jì)算機(jī) 的用戶存儲(chǔ)器空間(SBU)中執(zhí)行,并由目標(biāo)過(guò)程管理重放的實(shí)現(xiàn)。
15. 根據(jù)權(quán)利要求13或14之一所述的方法,特征在于修改的例程(RM) 包括測(cè)試指令,用于驗(yàn)證調(diào)用它的指令是否在重放(RSB)的環(huán)境中執(zhí)行, 該測(cè)試影響對(duì)重放代理(PRI)的調(diào)用。
16. 根據(jù)權(quán)利要求1到15之一所述的方法,特征在于它執(zhí)行稱為記錄 曰志過(guò)程(Pl)的至少一個(gè)應(yīng)用過(guò)程的機(jī)能的管理,并且包括下面的步驟-記錄(JOP),并且以日志數(shù)據(jù)(UL和KL)的形式存儲(chǔ)表示至少一個(gè) 給定類型的事件的數(shù)據(jù),該至少一個(gè)給定類型的事件從稱為重啟點(diǎn)的給定點(diǎn) 一直到稱為中斷的點(diǎn),在所述記錄日志過(guò)程(Pl)執(zhí)行期間已經(jīng)發(fā)生;-從處于對(duì)應(yīng)于記錄日志過(guò)程(Pl)的重啟點(diǎn)狀態(tài)的狀態(tài)中的重啟過(guò)程 (PB1 ),由所述重啟過(guò)程從所述日志數(shù)據(jù)(UL和KL )重放(RSB )所述事 件,因此將重啟過(guò)程引入對(duì)應(yīng)于記錄日志過(guò)程在中斷點(diǎn)的狀態(tài)的狀態(tài)中。
17. 根據(jù)權(quán)利要求16所述的方法,特征在于日志數(shù)據(jù)表示一個(gè)或更多 給定類型的所有事件,該一個(gè)或更多給定類型的所有事件在記錄日志過(guò)程(Pl)中從稱為重啟點(diǎn)的其執(zhí)行的給定點(diǎn)發(fā)生,重放步驟從對(duì)應(yīng)于記錄曰志 過(guò)程的重放點(diǎn)狀態(tài)的狀態(tài)應(yīng)用到重啟過(guò)程(PB1),重放序列將重啟過(guò)程恢復(fù) 到對(duì)應(yīng)于記錄日志過(guò)程在日志序列之后的狀態(tài)的狀態(tài)。
18. 根據(jù)權(quán)利要求16或17之一所述的方法,特征在于重啟過(guò)程(PB1 ) 響應(yīng)于由(PRE;圖5)的外部重放代理發(fā)起的外部事件的發(fā)生,執(zhí)行內(nèi)部事 件的至少 一個(gè)日志序列的重放(RSB )。
19. 根據(jù)權(quán)利要求16到18之一所述的方法,特征在于記錄日志過(guò)程 (Pl)在重啟點(diǎn)的狀態(tài)被采集(CAP)并以重啟點(diǎn)數(shù)據(jù)(EPR)的形式存儲(chǔ),該重啟點(diǎn)數(shù)據(jù)(EPR)用于將重啟過(guò)程恢復(fù)(RES )到向其應(yīng)用重啟階段(RSB ) 之前的重啟點(diǎn)狀態(tài)。
20. 根據(jù)權(quán)利要求16到19之一所述的方法,特征在于它對(duì)稱為跟蹤 應(yīng)用(AOP)的應(yīng)用的執(zhí)行實(shí)施監(jiān)視,該監(jiān)視應(yīng)用到跟蹤應(yīng)用的至少一個(gè)過(guò) 程(P1),并且包括下面的步驟-從跟蹤應(yīng)用的給定狀態(tài),多個(gè)連續(xù)和鄰近的日志序列的記錄日志(JOP ), 該多個(gè)連續(xù)和鄰近的記錄序列構(gòu)成跟蹤應(yīng)用的執(zhí)行內(nèi)^皮研究的序列;-產(chǎn)生控制的重放步驟(RSB)系列,該控制的重放步驟(RSB)系列產(chǎn) 生其余日志序列的控制的執(zhí)行,因此根據(jù)控制的節(jié)奏產(chǎn)生被研究序列的重放。
21. 根據(jù)權(quán)利要求17到20之一所述的方法,特征在于它執(zhí)行稱為可 靠化應(yīng)用(AOP)的第一個(gè)應(yīng)用的機(jī)能的可靠化,其在稱為機(jī)群的通信多計(jì) 算機(jī)架構(gòu)的至少一個(gè)稱為操作節(jié)點(diǎn)(OP)的主節(jié)點(diǎn)中執(zhí)行,該可靠化包括 在稱為備用節(jié)點(diǎn)的第二機(jī)群節(jié)點(diǎn)內(nèi),將稱為備用應(yīng)用(ASB)的第二應(yīng)用, 恢復(fù)(RES)到對(duì)應(yīng)于可靠化應(yīng)用在重啟點(diǎn)的狀態(tài)的狀態(tài),該可靠化另外包 含下面的步驟-從重啟點(diǎn)記錄(JOP )可靠化應(yīng)用(AOP )的執(zhí)行,并且在操作節(jié)點(diǎn)(OP ) 外將記錄日志事件存儲(chǔ)到至少一個(gè)日志文件(UL和KL)中; -檢測(cè)操作節(jié)點(diǎn)(OP)內(nèi)的故障;-為了在備用應(yīng)用(ASB)中從重啟點(diǎn)起重放(RSB)可靠化應(yīng)用(AOP) 中記錄日志的事件,使用所述日志文件,因此將備用應(yīng)用恢復(fù)到對(duì)應(yīng)于可靠 化應(yīng)用在上一個(gè)記錄日志事件之后的狀態(tài)的狀態(tài)。
22. —種系統(tǒng),包括在一起工作的計(jì)算機(jī)的網(wǎng)絡(luò),并且包括實(shí)現(xiàn)根據(jù)權(quán) 利要求1到21之一的方法的至少一個(gè)節(jié)點(diǎn)(OP和SB)。
23. —種根據(jù)前面的權(quán)利要求的系統(tǒng),特征在于它使用中間件類型的 應(yīng)用(INT)管理網(wǎng)絡(luò)內(nèi)執(zhí)行的至少一個(gè)應(yīng)用(AOP)的機(jī)能。
全文摘要
本發(fā)明涉及一種方法,用于從日志文件重放屬于網(wǎng)絡(luò)中的軟件應(yīng)用的過(guò)程內(nèi)的內(nèi)部事件。該方法包含下面的步驟由目標(biāo)過(guò)程執(zhí)行至少一個(gè)重放指令,發(fā)起重放操作(EVI),該重放操作將由該重放操作得到的至少一個(gè)結(jié)果數(shù)據(jù)(RRJ)返回給該目標(biāo)過(guò)程(PB1);由重啟過(guò)程外部的軟件代理(PRI)執(zhí)行強(qiáng)制過(guò)程(7),包括在目標(biāo)過(guò)程時(shí)對(duì)強(qiáng)制數(shù)據(jù)(RLi)的強(qiáng)制操作,所述強(qiáng)制數(shù)據(jù)(RLi)從日志數(shù)據(jù)提取,代替重放結(jié)果數(shù)據(jù)(RRJ)。有利地,目標(biāo)過(guò)程(PB1)從其可執(zhí)行文件(EXE;圖7)主動(dòng)執(zhí)行重放指令。
文檔編號(hào)G06F11/34GK101107598SQ200680002939
公開日2008年1月16日 申請(qǐng)日期2006年1月20日 優(yōu)先權(quán)日2005年1月21日
發(fā)明者馬克·弗特斯 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1