利用針對本地檢查點(diǎn)的卸載程序模型的制作方法
【專利說明】利用針對本地檢查點(diǎn)的卸載程序模型
【背景技術(shù)】
[0001] 近些年對高性能計(jì)算(HPC)的使用和興趣顯著增加。歷史上,HPC通常與所謂的"超 級(jí)計(jì)算機(jī)"相關(guān)聯(lián)。超級(jí)計(jì)算機(jī)在20世紀(jì)60年代被引入,最先并且在數(shù)十年來主要由控制數(shù) 據(jù)公司(CDC)的Seymour Cray、Cray研究所以及帶有Cray的名字或字母組合的后來的公司 制造。盡管20世紀(jì)70年代的超級(jí)計(jì)算機(jī)僅使用幾個(gè)處理器,但是在20世紀(jì)90年代,開始出現(xiàn) 了具有上千個(gè)處理器的機(jī)器,并且最近已經(jīng)實(shí)現(xiàn)了具有數(shù)十萬"現(xiàn)成的"處理器的大規(guī)模并 行超級(jí)計(jì)算機(jī)。
[0002] 存在許多類型的HPC架構(gòu),既有被實(shí)現(xiàn)的也面向研究的,其具有各種級(jí)別的規(guī)模和 性能。然而,共同線程是諸如處理器和/或處理器核的大量計(jì)算單元(也被稱為計(jì)算實(shí)體或 本文中的計(jì)算實(shí)體)來以并行的方式共同地執(zhí)行任務(wù)的互連。根據(jù)最近的片上系統(tǒng)(SoC)設(shè) 計(jì)方案和提議,使用二維(2D)陣列、環(huán)面、環(huán)或其它配置來在單個(gè)SoC上實(shí)現(xiàn)數(shù)十個(gè)處理器 核等。另外,研究者已經(jīng)提議了3D SoC,根據(jù)所述3D SoC,數(shù)百或甚至數(shù)千個(gè)處理器核以3D 陣列互連。單獨(dú)的多核處理器和SoC還可以在服務(wù)器板上具有小間距(closely-spaced),繼 而被互連經(jīng)由底板等進(jìn)行通信。另一種普遍的方法是在服務(wù)器(例如,刀片服務(wù)器和模塊) 的機(jī)架中對計(jì)算單元進(jìn)行互連。聲稱一度是世界最快的超級(jí)計(jì)算機(jī)的IBM的Sequoia包括96 個(gè)服務(wù)器刀片/模塊的機(jī)架,共1,572,864個(gè)核,并且當(dāng)操作在峰值性能下時(shí),消耗巨大的 709兆瓦。
[0003] HPC使用并行處理方法來使得用于解決復(fù)雜作業(yè)或任務(wù)的作業(yè)載荷能夠被分布在 多個(gè)計(jì)算實(shí)體間;這可能需要使用數(shù)千甚至數(shù)十萬個(gè)實(shí)體??紤]到實(shí)體失敗的統(tǒng)計(jì)分布,隨 著用于HPC作業(yè)的實(shí)體的數(shù)量的增加,在HPC作業(yè)期間發(fā)生實(shí)體失敗的速率指數(shù)地增長。這 個(gè)指數(shù)性的失敗速率已經(jīng)在HPC界以及商業(yè)的云服務(wù)提供者之間成為熱點(diǎn)。
[0004] 為了解決實(shí)體失敗的可能,可以以如下方式執(zhí)行HPC作業(yè):使得能夠從這種失敗恢 復(fù),而不需要重做該作業(yè)(或該作業(yè)的重要部分)。這通常通過檢查點(diǎn)重啟方案來完成。根據(jù) 一個(gè)常規(guī)方法,以頻繁的速率(檢查點(diǎn)之間的時(shí)間段被稱為歷元(epoch))和同步的方式周 期地取檢查點(diǎn),其中,對于每一個(gè)歷元,停止對檢查點(diǎn)組中的所有實(shí)體的處理,對每一個(gè)實(shí) 體執(zhí)行檢查點(diǎn)操作,以及重啟實(shí)體。檢查點(diǎn)組的粒度是相當(dāng)分層次的,并且可能涉及數(shù)百或 數(shù)千個(gè)實(shí)體。
[0005] 在每一個(gè)檢查點(diǎn)期間,數(shù)據(jù)被寫入某種形式的非易失性存儲(chǔ)設(shè)備(例如,通過網(wǎng)絡(luò) 訪問的大型存儲(chǔ)設(shè)備或這種設(shè)備的陣列)。數(shù)據(jù)包括作業(yè)處理狀態(tài)信息和經(jīng)由在每一個(gè)實(shí) 體上的軟件的執(zhí)行而產(chǎn)生的作為輸出的數(shù)據(jù)二者。這導(dǎo)致顯著量的存儲(chǔ)消耗,并且整體處 理帶寬的顯著部分被有效地浪費(fèi)了。在一些實(shí)例中,相關(guān)聯(lián)的存儲(chǔ)消耗和該常規(guī)的檢查點(diǎn) 重啟策略的執(zhí)行限制使得實(shí)際的結(jié)果不那么可持續(xù)或甚至不那么實(shí)際。
【附圖說明】
[0006] 由于通過參照以下詳細(xì)描述可以更好地理解本發(fā)明的前述方面和許多其附帶的 優(yōu)點(diǎn),因此,當(dāng)結(jié)合附圖來理解時(shí),本發(fā)明的前述方面和許多其附帶的優(yōu)點(diǎn)將被更容易地理 解,其中,除非特別說明,否則貫穿各個(gè)視圖,相似的參考標(biāo)記指示相似的部件:
[0007] 圖1是示出了用在HPC環(huán)境中的常規(guī)并行處理方案的簡化視圖的示意圖;
[0008] 圖2是示出了用于處理與可執(zhí)行作業(yè)相對應(yīng)的代碼段的卸載程序模型的簡單實(shí)現(xiàn) 的不意圖;
[0009] 圖3是示出了由源和宿以及故障轉(zhuǎn)移(failover)心跳監(jiān)控器執(zhí)行的操作和邏輯的 組合流程圖和消息流圖;
[0010] 圖4是示出了卸載域拓?fù)涞牡谝皇纠氖疽鈭D,所述卸載域拓?fù)浒ㄟB接到在單 域中實(shí)現(xiàn)的多個(gè)宿的源;
[0011] 圖5是示出了卸載域拓?fù)涞牡诙纠氖疽鈭D,所述卸載域拓?fù)浒ㄟB接到一對 源的作業(yè)調(diào)度器,所述一對源繼而被連接到在單域中實(shí)現(xiàn)的多個(gè)宿;
[0012]圖6是示出了卸載域拓?fù)涞牡谌纠氖疽鈭D,所述卸載域拓?fù)浒ㄟB接到一對 源的作業(yè)調(diào)度器,所述一對源繼而被連接到在第一域和第二域中實(shí)現(xiàn)的多個(gè)宿;
[0013]圖7是示出了卸載域拓?fù)涞牡谒氖纠氖疽鈭D,所述卸載域拓?fù)浒ń?jīng)由作業(yè)調(diào) 度架構(gòu)連接到多個(gè)源的作業(yè)調(diào)度器,以及其中,所述源經(jīng)由卸載架構(gòu)連接到第一域和第二 域中的宿;
[0014]圖8是示出了包括模塊化數(shù)據(jù)中心(pod)、機(jī)架、托盤以及托架的數(shù)據(jù)中心物理層 次的示意框圖;
[0015] 圖9是雙插槽服務(wù)器平臺(tái)的示意圖,在其中實(shí)現(xiàn)了多個(gè)MIC,以及包括被實(shí)現(xiàn)為第 一源的第一主機(jī)處理器,和被配置為作為第二源操作的第二主機(jī)處理器;
[0016] 圖10是示出了根據(jù)利用Inter? Xeon Phi? MIC協(xié)處理器的一個(gè)實(shí)施例的軟件架 構(gòu)的示意框圖,其包括MIC協(xié)處理器PCIe卡1002上實(shí)現(xiàn)的軟件部件,該軟件部件包括MIC協(xié) 處理器軟件和主機(jī)軟件;
[0017] 圖11是用來得到MIC中引擎的數(shù)量和得到第一引擎的句柄的指令的偽代碼列表;
[0018] 圖12a和12b使用C0I進(jìn)程分別地示出了用于卸載函數(shù)的示例性源側(cè)和宿側(cè)偽代碼 列表;以及
[0019] 圖13a和13b分別地示出了用于設(shè)置和使用緩沖器的示例性源側(cè)和宿側(cè)偽代碼列 表。
【具體實(shí)施方式】
[0020] 本文描述了用于利用針對本地檢查點(diǎn)的卸載程序模型的方法、裝置以及系統(tǒng)的實(shí) 施例。在下文描述中,闡述了大量具體細(xì)節(jié),以便提供對本發(fā)明的實(shí)施例的透徹理解。然而, 相關(guān)領(lǐng)域技術(shù)人員將認(rèn)識(shí)到的是,可以在不具有具體細(xì)節(jié)中的一個(gè)或多個(gè)的情況下實(shí)踐本 發(fā)明,或者利用其它方法、部件、材料等來實(shí)踐本發(fā)明。在其它實(shí)例中,沒有詳細(xì)地示出或描 述眾所周知的結(jié)構(gòu)、材料或操作,以便避免模糊本發(fā)明的方面。
[0021] 貫穿本說明書所引用的"一個(gè)實(shí)施例"或"實(shí)施例"意指結(jié)合該實(shí)施例描述的特定 的特征、結(jié)構(gòu)或特性被包括在本發(fā)明的至少一個(gè)實(shí)施例中。因此,在貫穿本說明書的不同地 方出現(xiàn)的短語"在一個(gè)實(shí)施例中"或"在實(shí)施例中"不必全都指代同一個(gè)實(shí)施例。此外,特定 的特征、結(jié)構(gòu)或特性可以以任何適當(dāng)?shù)姆绞浇M合在一個(gè)或多個(gè)實(shí)施例中。
[0022] 為了清楚,本文附圖中的單獨(dú)部件還可以通過其在附圖中的標(biāo)簽進(jìn)行指代,而不 是由特定的附圖標(biāo)記來指代。另外,指代特定類型的部件的附圖標(biāo)記(與特定部件不同)可 以使用后接"(typ)"(其意味著"典型的")的附圖標(biāo)記來示出。應(yīng)當(dāng)理解的是,這些部件的配 置是可能存在但為了簡潔及清楚而未在附圖中示出的類似部件的典型配置,或者未用不同 的附圖標(biāo)記進(jìn)行標(biāo)記的類似部件的典型配置。相反,"(typ)"不應(yīng)被解釋為表示該部件、元 件等典型地用于其公開的功能、實(shí)現(xiàn)、目的等。
[0023]根據(jù)本文公開的實(shí)施例,并且結(jié)合本地檢查點(diǎn)方案來使用卸載程序模型,所述本 地檢查點(diǎn)方案滿足高可靠性要求同時(shí)改善了性能和減少了存儲(chǔ)和/或與常規(guī)的檢查點(diǎn)相關(guān) 聯(lián)的網(wǎng)絡(luò)業(yè)務(wù)。在一方面中,該方法針對在HPC環(huán)境中的實(shí)現(xiàn),尤其是針對大規(guī)模HPC作業(yè)是 有優(yōu)勢的。然而,其在異構(gòu)計(jì)算環(huán)境中也極為好用,所述異構(gòu)計(jì)算環(huán)境中的運(yùn)行實(shí)體可以從 小型手持設(shè)備一直延伸到高容量服務(wù)器。
[0024]圖1示出了用在HPC環(huán)境中的常規(guī)并行處理方案的簡化視圖。如在圖1中所示,由第 一計(jì)算實(shí)體托管的作業(yè)調(diào)度器100經(jīng)由互連104耦合到多個(gè)計(jì)算實(shí)體102。通常,HPC環(huán)境將 被用于使用并行處理方法來解決整體作業(yè)或任務(wù),根據(jù)所述并行處理方法,整體作業(yè)或任 務(wù)被劃分為在大量計(jì)算實(shí)體上并行執(zhí)行的較小的作業(yè)。如下面描述的,作業(yè)調(diào)度器負(fù)責(zé)將 較小的作業(yè)調(diào)度到計(jì)算實(shí)體并且協(xié)調(diào)檢查點(diǎn)。此外,大的任務(wù)可以涉及以層次等配置的多 個(gè)作業(yè)調(diào)度器??梢酝ㄟ^各種術(shù)語來指代針對層次中的給定等級(jí)的計(jì)算實(shí)體的聚集,諸如 集群、作業(yè)組以及其它術(shù)語,盡管作業(yè)組可能包括多個(gè)集群。
[0025]通常,計(jì)算說明可以包括能夠執(zhí)行對應(yīng)于作業(yè)或任務(wù)的軟件的任何實(shí)體。計(jì)算實(shí) 體包括但不受限于服務(wù)器、計(jì)算機(jī)、計(jì)算設(shè)備、處理器以及處理器中的核?;ミB104是代表包 括網(wǎng)絡(luò)鏈路(例如,以太網(wǎng)、無限寬帶(InfiniBand)等)、高速串行互連(例如,外圍部件互連 快速(PCI Express或PCIe))以及在處理器片上系統(tǒng)(SoC)內(nèi)的互連的各種類型的互連的一 般互連。此外,在異構(gòu)環(huán)境中,計(jì)算實(shí)體可以經(jīng)由包括不同類型的互連的一個(gè)或多個(gè)互連連 接到作業(yè)調(diào)度器和/或其它計(jì)算實(shí)體。
[0026] 如在圖1中進(jìn)一步所示,作業(yè)調(diào)度器100將作業(yè)106調(diào)度到相應(yīng)的計(jì)算實(shí)體102。通 常,每一個(gè)作業(yè)106可以包括要被計(jì)算實(shí)體執(zhí)行的可執(zhí)行代碼。作業(yè)106還可以包括要被操 作的數(shù)據(jù)和/或代碼,所示代碼本身可以指代要由計(jì)算實(shí)體從存儲(chǔ)設(shè)備取回、經(jīng)由代碼的執(zhí) 行而被操縱以及隨后被存儲(chǔ)的數(shù)據(jù)。出于說明性的目的,數(shù)據(jù)被存儲(chǔ)在網(wǎng)絡(luò)存儲(chǔ)設(shè)備108 中,其可以包括單個(gè)存儲(chǔ)設(shè)備、存儲(chǔ)陣列、或者本領(lǐng)域公知的其它儲(chǔ)存裝置。實(shí)體的集群或 計(jì)算實(shí)體本身還可以包括其中存儲(chǔ)有作業(yè)相關(guān)的數(shù)據(jù)的本地存儲(chǔ)設(shè)備。另外,可以使用各 種超高速緩存方案來增強(qiáng)系統(tǒng)性能。
[0027] 在圖1中示出了分配給計(jì)算實(shí)體102-1的作業(yè)A的抽象的描述。該作業(yè)包括可執(zhí)行 代碼,所述可執(zhí)行代碼包括主循環(huán),所述主循環(huán)包括被標(biāo)記為F 〇〇()、Bar()…以及Qux〇的 多個(gè)函數(shù)。給定的作業(yè)可以包括完全的可執(zhí)行的應(yīng)用(例如,獨(dú)立的應(yīng)用)、或者可以包括代 碼模塊等。根據(jù)一些實(shí)現(xiàn),作業(yè)調(diào)度器可以首先將可執(zhí)行的應(yīng)用或模塊調(diào)度到計(jì)算實(shí)體,并 且隨后發(fā)送要由該可執(zhí)行的應(yīng)用或模塊操作的數(shù)據(jù)(或以其它方式,標(biāo)識(shí)數(shù)據(jù)的位置)。為 了簡單起見,作業(yè)106的集合被示為調(diào)度到相應(yīng)的計(jì)算實(shí)體102。在實(shí)際中,新的作業(yè)可以當(dāng) 處理整體作業(yè)或任務(wù)時(shí)被動(dòng)態(tài)地生成,并且被異步地調(diào)度到各個(gè)計(jì)算實(shí)體。根據(jù)一個(gè)通用 的方案,計(jì)算實(shí)體"公告"其可用性,并且作業(yè)調(diào)度器基于諸如可用性、處理能力以及存儲(chǔ)器 資源的考慮來動(dòng)態(tài)地確定向哪些計(jì)算實(shí)體發(fā)送給定的作業(yè)。
[0028] 由于并行處理架構(gòu)的特性,所有作業(yè)成功地完成是關(guān)鍵的,否則整體任務(wù)將失敗。 由于某些作業(yè)的輸出供給隨后作業(yè)的輸入,因此甚至單個(gè)計(jì)算實(shí)體的失敗可能導(dǎo)致整體失 敗。存在用于解決該問題的各種方法,包括將同一個(gè)作業(yè)調(diào)度到多個(gè)實(shí)體,并且將作業(yè)的最 先成功的完成用于隨后的作業(yè)。然而,該方法是浪費(fèi)的,這是因?yàn)閺氖虏槐蛔钕韧瓿傻淖鳂I(yè) 的實(shí)體的處理帶寬(來自被調(diào)度同一個(gè)作業(yè)的其它實(shí)體之間)最終沒有被使用。
[0029] 另一個(gè)方法利用周期檢查點(diǎn)/重啟序列。根據(jù)一個(gè)常規(guī)檢查點(diǎn)方案,執(zhí)行下面的操 作:首先,做出(例如,由調(diào)度器或在層次中較高的實(shí)體)檢查點(diǎn)應(yīng)該在何時(shí)和在哪被取的確 定。隨后,將"停頓"請求發(fā)布給批量作業(yè)內(nèi)的每一個(gè)運(yùn)行實(shí)體。在進(jìn)行下去之前,進(jìn)程等待 所有的實(shí)體確認(rèn)停頓請求并且暫停其運(yùn)行(或以其它方式,確認(rèn)其處于暫停的狀態(tài))。這時(shí), 所有實(shí)體將其狀態(tài)(也被稱為"上下文")寫出到存儲(chǔ)設(shè)備。在所有實(shí)體確認(rèn)對存儲(chǔ)設(shè)備寫入 的完成期間,發(fā)生第二等待。這使得完成被用信號(hào)發(fā)送到實(shí)體。
[0030] 在用信號(hào)發(fā)送檢查點(diǎn)完成之后,重啟序列開始。首先,將作業(yè)重新調(diào)度進(jìn)新分配的 實(shí)體(g卩,被調(diào)度到新的計(jì)算實(shí)體)。每一個(gè)實(shí)體隨后從存儲(chǔ)設(shè)備中讀取其保存的上下文,并 且確認(rèn)其準(zhǔn)備就緒以重新開始。等待時(shí)段繼而發(fā)生,直到所有實(shí)體確認(rèn)其準(zhǔn)備就緒,這時(shí), 將重新開始信號(hào)發(fā)送到每一個(gè)實(shí)體以重新開始。
[0031] 前述的常規(guī)方法具有許多問題,隨著規(guī)模變大,它們中的一些問題會(huì)惡化。第一, 僅在向?qū)嶓w發(fā)送指令以及返回狀態(tài)中就涉及大量的網(wǎng)絡(luò)業(yè)務(wù)開銷。第二,當(dāng)針對每一個(gè)實(shí) 體的上下文被保存時(shí),在每一個(gè)歷元期間存在突發(fā)存儲(chǔ)操作。典型的網(wǎng)絡(luò)存儲(chǔ)方案具有有 限的輸入/輸出(10)帶寬,并且能夠提供到存儲(chǔ)設(shè)備的同時(shí)存取。相反的,注意到各種超高 速緩存方案通常被用于改善性能,必須以順序的方式來處置每一個(gè)存儲(chǔ)設(shè)備存取請求。此 外,寫出每一個(gè)實(shí)體的上下文需要大量的存儲(chǔ)空間,尤其是對于大規(guī)模作業(yè)。
[0032] 本文公開的實(shí)施例的方面利用了不同的方法。實(shí)施例使用卸載程序模型,與根據(jù) 常規(guī)的檢查點(diǎn)/重啟方案,通過應(yīng)用編碼器和/或操作人員手動(dòng)的插入相比,所述卸載程序 模型自動(dòng)地以及機(jī)會(huì)性地定義合適的檢查點(diǎn)。其還不暫停運(yùn)行實(shí)體,這產(chǎn)生增強(qiáng)的性能,這 是因?yàn)橛商幚砥鲿和?dǎo)致的處理帶寬丟失不再存在。相對于根據(jù)常規(guī)方案的全局和冗長的 同步開銷,同步量(如果存在的話)被顯著地減少。狀態(tài)/上下文保存操作可以被分解并且可 以通過整體作業(yè)執(zhí)行來展開。這顯著地減少了可能爭奪存儲(chǔ)帶寬以及存儲(chǔ)空間的突發(fā)存儲(chǔ) 10操作。
[0033] 根據(jù)一方面,在域形成期間執(zhí)行智能的預(yù)規(guī)劃存儲(chǔ)設(shè)置。這允許計(jì)算實(shí)體的最佳 拓?fù)洳贾貌⑶以试S存儲(chǔ)設(shè)備解決大的并行作業(yè)規(guī)模問題。所保存的狀態(tài)/上下文的大小顯 著更小,這是因?yàn)槠洳灰蟠鎯?chǔ)完整的進(jìn)程圖像。這使得使用更少的空間以及針對重啟的 更好的成功率。
[0034] 建在卸載程序模型之上,所公開的方法將批量作業(yè)分解為更小的虛擬作業(yè)載荷 域。每一個(gè)域進(jìn)行其自己的本地檢查點(diǎn)。此外,可以以遞歸的方式實(shí)現(xiàn)該方法。從卸載程序 范例繼承,該方法針對異構(gòu)計(jì)算環(huán)境是尤其有利的,在所述異構(gòu)計(jì)算環(huán)境中,所集聚的計(jì)算 實(shí)體可以由不同的CPU架構(gòu)組成和/或由不同的操作系統(tǒng)支持。
[0035] 作為概述,圖2描繪了用于對與給定作業(yè)相對應(yīng)的代碼段進(jìn)行處理的卸載程序模 型的簡單的實(shí)現(xiàn)的說明。包括主機(jī)機(jī)器并且操作為"源"200的處理實(shí)體經(jīng)由互連208耦合與 包括"宿" 202、204以及206的三個(gè)卸載機(jī)器耦合通信。在這個(gè)示例中,圖1中的針對作業(yè)A的 三個(gè)函數(shù)FooO、Bar()以及QuxO的執(zhí)行被從源200卸載到相應(yīng)的宿202、204以及206。
[0036]進(jìn)一步參照圖3中的流程圖和消息流圖300,如下實(shí)現(xiàn)了根據(jù)一個(gè)實(shí)施例的卸載程 序模型檢查點(diǎn)方案。圖3中示出的實(shí)體包括源302、故障轉(zhuǎn)移心跳監(jiān)控器304以及包括宿306 的卸載實(shí)體。盡管未示出,但是實(shí)際的實(shí)現(xiàn)將包括多個(gè)宿實(shí)體。通常,可以在除了源或宿的 任何宿之外的源或單獨(dú)的實(shí)體(未示出)中實(shí)現(xiàn)故障轉(zhuǎn)移心跳監(jiān)控器304。
[0037]針對源302描繪的操作在塊308中開始,在所述塊308中,源具有基于卸載程序模型 的可執(zhí)行結(jié)構(gòu)。隨后針對可執(zhí)行結(jié)構(gòu)中的每一個(gè)卸載代碼段描繪了主循環(huán),如由啟動(dòng)循環(huán) 塊310和結(jié)束循環(huán)塊312所描繪的。隨后針對每一個(gè)經(jīng)卸載的代碼段來循環(huán)地、持續(xù)地執(zhí)行 在塊314、316以及318中描繪的操作。
[0038] 首先,在塊314中,構(gòu)造了卸載上下文。通常,卸載上下文應(yīng)當(dāng)包含用于卸載在請求 時(shí)能重啟的足夠信息。其應(yīng)當(dāng)包含諸如下列信息:宿標(biāo)識(shí)、程序二進(jìn)制參考或庫參考、緩沖 器數(shù)據(jù)、環(huán)境變量和/或與作業(yè)載荷相關(guān)的函數(shù)參數(shù)。在一個(gè)實(shí)施例中,卸載上下文包括(要 執(zhí)行卸載代碼的宿的)鏈路地址、程序代碼段二進(jìn)制參考或包括與卸載的代碼段相對應(yīng)的 一個(gè)或多個(gè)函數(shù)的先前分布的庫的參考、環(huán)境變量、函數(shù)參數(shù)以及緩沖器映射信息??蛇x擇 地,如下面描述的,可以提前配置緩沖器映射的一些方面。接下來,存在一對被異步地執(zhí)行 的相關(guān)操作。在塊316中,在塊314中生成的卸載上下文被發(fā)送到如由宿306描繪的可應(yīng)用宿 設(shè)備。與之結(jié)合,在塊318中,與在塊314中生成的卸載上下文相對應(yīng)的上下文對象被推給諸 如由網(wǎng)絡(luò)存儲(chǔ)設(shè)備108描繪的非易失性存儲(chǔ)設(shè)備。可選擇地,上下文對象可以被推給由源平 臺(tái)提供的板載存儲(chǔ)設(shè)備。根據(jù)另一個(gè)方案,上下文對象被寫到與網(wǎng)絡(luò)存儲(chǔ)設(shè)備成鏡像的板 載存儲(chǔ)設(shè)備。
[0039] 為了簡單起見,被卸載的代碼段被描繪為發(fā)送到宿306。在實(shí)際的實(shí)現(xiàn)中,被卸載 的代碼段會(huì)被發(fā)送到多個(gè)宿,其中給定的宿可能在整體作業(yè)的執(zhí)行期間接收多個(gè)被卸載的 代碼段。
[0040] 如在塊320和宿306的決定塊332中描述的,宿設(shè)備包括監(jiān)聽來自于源302的請求的 監(jiān)聽器。例如,這樣的監(jiān)聽器是本領(lǐng)域公知的,并且可以包括監(jiān)聽用于與源302通信的特定 端口,或者以其它方式監(jiān)聽來自于源302的通信(例如,使用針對產(chǎn)生自源302的通信的源地 址來檢測的)。一旦經(jīng)由所檢測的請求接收到卸載上下文,就由宿306運(yùn)行(即,執(zhí)行)在卸載 上下文代碼中定義的函數(shù)或多個(gè)函數(shù)直到完成,如由塊324和完成塊326描述的。
[0041] 當(dāng)代碼段完成時(shí),將與函數(shù)結(jié)果相對應(yīng)的函數(shù)結(jié)果數(shù)據(jù)328返回到源,如上面參照 圖2討論的。在一些實(shí)施例中,通過直接地向由卸載上下文標(biāo)識(shí)的存儲(chǔ)器緩沖器寫入數(shù)據(jù)來 將數(shù)據(jù)返回。在其它實(shí)施例中,如當(dāng)宿遠(yuǎn)離源時(shí),結(jié)果數(shù)據(jù)328被以分組的方式返回并且包 含所分組的數(shù)據(jù)可以用來確