?
面向分布式流體系結(jié)構(gòu)的多副本積極容錯(cuò)技術(shù)*
通信地址:410073 湖南省長(zhǎng)沙市國(guó)防科學(xué)技術(shù)大學(xué)高性能計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室Address:The State Key Laboratory of High Performance Computing,National University of Defense Technology,Changsha 410073,Hunan,P.R.China
李鑫1,3,4,林宇斐2,郭曉威1
(1.國(guó)防科學(xué)技術(shù)大學(xué)高性能計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室,湖南 長(zhǎng)沙 410073;2.國(guó)防科學(xué)技術(shù)大學(xué)研究生院,湖南 長(zhǎng)沙 410073;
3.解放軍理工大學(xué),江蘇 南京 210007;4.總參第六十三研究所,江蘇 南京 210007)
摘要:隨著互聯(lián)網(wǎng)環(huán)境下計(jì)算系統(tǒng)規(guī)模的不斷擴(kuò)大,分布式流體系結(jié)構(gòu)的可靠性問(wèn)題面臨著嚴(yán)峻的挑戰(zhàn)。以多模冗余容錯(cuò)技術(shù)為基礎(chǔ),針對(duì)軟錯(cuò)誤提出了一種面向分布式流體系結(jié)構(gòu)的多副本積極容錯(cuò)技術(shù)TREFT,利用三個(gè)程序副本進(jìn)行高效的檢錯(cuò)與糾錯(cuò)。在分布式流體系結(jié)構(gòu)原型系統(tǒng)上的實(shí)驗(yàn)結(jié)果表明,該技術(shù)能有效提高系統(tǒng)的可靠性,具有較低的容錯(cuò)成本,平均增加10.77%的容錯(cuò)開(kāi)銷。
關(guān)鍵詞:分布式流體系結(jié)構(gòu);容錯(cuò)技術(shù);三模冗余
1引言
互聯(lián)網(wǎng)環(huán)境資源規(guī)模巨大,通信環(huán)境復(fù)雜,各種網(wǎng)絡(luò)資源呈現(xiàn)異構(gòu)性與動(dòng)態(tài)性。隨著商用器件的廣泛使用、計(jì)算系統(tǒng)規(guī)模的持續(xù)擴(kuò)大與異構(gòu)系統(tǒng)的興起流行,互聯(lián)網(wǎng)分布式計(jì)算模型的可靠性問(wèn)題面臨著嚴(yán)峻挑戰(zhàn)。作者近期提出了一種新型的分布式流體系結(jié)構(gòu)DSA(Distributed Stream Architecture),在互聯(lián)網(wǎng)環(huán)境下提供高效的大數(shù)據(jù)計(jì)算環(huán)境,其可靠性面臨著同樣的問(wèn)題。
近年來(lái),面向互聯(lián)網(wǎng)應(yīng)用的數(shù)據(jù)中心的計(jì)算系統(tǒng)規(guī)模在持續(xù)增加,如2015年6月TOP500前10名系統(tǒng)的平均處理器核數(shù)已經(jīng)突破83.7萬(wàn)顆[1],并繼續(xù)向百萬(wàn)顆邁進(jìn)。隨著系統(tǒng)計(jì)算部件數(shù)目的增加,計(jì)算系統(tǒng)的可靠性將會(huì)持續(xù)下降,如IBM ASCI White平均無(wú)故障時(shí)間僅為40個(gè)小時(shí)[2],Google擁有的8 000個(gè)節(jié)點(diǎn)的集群系統(tǒng)平均36個(gè)小時(shí)發(fā)生一個(gè)故障[3],超過(guò)10萬(wàn)個(gè)處理器核的IBM Blue Gene/L的平均無(wú)故障時(shí)間預(yù)測(cè)可能只有幾十分鐘[4]。據(jù)美國(guó)Los Alamos國(guó)家實(shí)驗(yàn)室10年超級(jí)計(jì)算機(jī)系統(tǒng)的統(tǒng)計(jì)數(shù)據(jù)顯示,高性能計(jì)算機(jī)單個(gè)節(jié)點(diǎn)的平均故障率為1/(512 h)[5,6],這意味著128個(gè)節(jié)點(diǎn)系統(tǒng)的平均無(wú)故障時(shí)間僅為4小時(shí)。
同時(shí),采用異構(gòu)系統(tǒng)加速應(yīng)用程序已成為一種新型的計(jì)算模式,具有較高的效能比,如CPU-GPU與CPU-MIC典型系統(tǒng),已經(jīng)成功應(yīng)用在Tianhe-1A[7,8]與Tianhe-2等系統(tǒng)中。然而,作為異構(gòu)系統(tǒng)的加速部件,其強(qiáng)大的計(jì)算能力來(lái)源于更高的芯片集成度與簡(jiǎn)單的控制邏輯,目前硬件尚未提供強(qiáng)大的容錯(cuò)支持,顯然會(huì)帶來(lái)嚴(yán)重的可靠性問(wèn)題[9,10]。例如,60個(gè)NVIDIA GeForce 8800 GTS GPU同時(shí)連續(xù)工作72小時(shí)就會(huì)發(fā)生7個(gè)GPU故障,同時(shí)GPU故障都發(fā)生在存儲(chǔ)器,且不易被感知[11]。
因此,對(duì)于在互聯(lián)網(wǎng)上運(yùn)行長(zhǎng)達(dá)幾個(gè)小時(shí)甚至幾天的應(yīng)用來(lái)說(shuō),保證程序在分布式環(huán)境下的可靠運(yùn)行顯得尤為重要,如蛋白質(zhì)折疊應(yīng)用計(jì)算就需要連續(xù)運(yùn)算幾個(gè)月時(shí)間[12]。分布式系統(tǒng)容錯(cuò)技術(shù)主要基于空間冗余、時(shí)間冗余或數(shù)據(jù)世系等方法來(lái)實(shí)現(xiàn)。空間冗余進(jìn)一步可劃分為硬件冗余、軟件冗余、數(shù)據(jù)冗余等。Hadoop中的分布式文件系統(tǒng)HDFS中采用的是多副本數(shù)據(jù)的軟件冗余方法,以保證在大規(guī)模廉價(jià)PC服務(wù)器上提供可靠的數(shù)據(jù)訪問(wèn)能力。已有研究[13]表明,多副本容錯(cuò)技術(shù)是一種針對(duì)大規(guī)模計(jì)算的有效手段。Google提出的數(shù)據(jù)糾刪碼技術(shù)就是一種典型的數(shù)據(jù)冗余方法[14]。時(shí)間冗余方式主要包括回滾恢復(fù)技術(shù)與并行復(fù)算技術(shù)等,傳統(tǒng)高性能計(jì)算領(lǐng)域經(jīng)常采用基于檢查點(diǎn)的回滾恢復(fù)技術(shù)來(lái)處理故障。數(shù)據(jù)世系方法通過(guò)記錄數(shù)據(jù)之間的關(guān)系與操作,一旦發(fā)生錯(cuò)誤就從最近數(shù)據(jù)記錄點(diǎn)開(kāi)始恢復(fù)計(jì)算,具有較高的容錯(cuò)效率,已經(jīng)被應(yīng)用在Spark[15]等大數(shù)據(jù)技術(shù)中。
本文基于分布式流體系結(jié)構(gòu)的特點(diǎn),針對(duì)節(jié)點(diǎn)故障引起的不易察覺(jué)的軟錯(cuò)誤,設(shè)計(jì)了一種多副本積極容錯(cuò)技術(shù),將需要進(jìn)行檢錯(cuò)的程序區(qū)域標(biāo)識(shí)為容錯(cuò)程序段,通過(guò)三個(gè)程序副本比較其數(shù)據(jù)變量以發(fā)現(xiàn)可能的錯(cuò)誤。本文的主要?jiǎng)?chuàng)新工作在第3節(jié)與第4節(jié),其中,第2節(jié)概述了分布式流體系結(jié)構(gòu)[16],對(duì)節(jié)點(diǎn)發(fā)生瞬時(shí)故障引起的軟錯(cuò)誤進(jìn)行了分析;第3節(jié)詳細(xì)說(shuō)明了多副本積極容錯(cuò)技術(shù);第4節(jié)描述了實(shí)驗(yàn)方法與結(jié)果分析;第5節(jié)是本文總結(jié)與研究展望。
2分布式流體系結(jié)構(gòu)概述及其故障分析
分布式流體系結(jié)構(gòu)在分布式環(huán)境下擴(kuò)展了傳統(tǒng)流體系結(jié)構(gòu)中的概念,其中,計(jì)算核心(Kernel)是指可用的軟硬件對(duì)象,流或數(shù)據(jù)流(Stream)是指計(jì)算數(shù)據(jù)與控制狀態(tài)數(shù)據(jù)。流包括計(jì)算數(shù)據(jù)流和控制數(shù)據(jù)流,計(jì)算核心根據(jù)其功能分為六種:軟計(jì)算核心SK(Soft Kernel)、硬計(jì)算核心HK(Hard Kernel)、應(yīng)用計(jì)算核心AK(Application Kernel)、客戶管理計(jì)算核心CMK(Client Management Kernel)、資源管理計(jì)算核心RMK(Resource Management Kernel)與服務(wù)管理計(jì)算核心SMK(Service Management Kernel)[16]。其中,SK與HK分別封裝了軟件資源與硬件資源信息,AK封裝了主程序相關(guān)信息,負(fù)責(zé)資源申請(qǐng)與管理程序運(yùn)行過(guò)程,CMK負(fù)責(zé)提供用戶服務(wù)接口,RMK負(fù)責(zé)命令解釋與任務(wù)具體執(zhí)行,SMK維護(hù)服務(wù)、計(jì)算核心等元信息,提供資源調(diào)度與應(yīng)用生命周期管理等[17]。
如圖1所示,在分布式流體系結(jié)構(gòu)上運(yùn)行一個(gè)應(yīng)用程序通常需要1個(gè)host節(jié)點(diǎn)與多個(gè)device節(jié)點(diǎn)。
Figure 1 Basic concepts of the distributed stream architecture圖1 分布式流體系結(jié)構(gòu)基本概念
host節(jié)點(diǎn)上RMK會(huì)啟動(dòng)一個(gè)線程執(zhí)行主程序(AK)以管理任務(wù)執(zhí)行流程。AK會(huì)根據(jù)編譯指導(dǎo)命令將計(jì)算核心任務(wù)劃分成多個(gè)子任務(wù)并行執(zhí)行。同時(shí),AK負(fù)責(zé)向SMK申請(qǐng)軟硬件資源,申請(qǐng)成功后通知目的節(jié)點(diǎn)下載代碼與數(shù)據(jù),并在計(jì)算完畢后更新計(jì)算狀態(tài),以保證全局信息的一致性。AK如此推進(jìn)計(jì)算過(guò)程直到所有計(jì)算核心執(zhí)行完畢。
在分布式流體系結(jié)構(gòu)中,按照錯(cuò)誤在程序執(zhí)行中產(chǎn)生的原因可以分為原生節(jié)點(diǎn)錯(cuò)誤與繼生節(jié)點(diǎn)錯(cuò)誤兩類:
(1)原生節(jié)點(diǎn)錯(cuò)誤:由于節(jié)點(diǎn)硬件故障等直接造成的錯(cuò)誤,使得系統(tǒng)存儲(chǔ)數(shù)據(jù)的數(shù)值與正確值之間出現(xiàn)了影響結(jié)果正確性的偏差。
(2)繼生節(jié)點(diǎn)錯(cuò)誤:由于與其他錯(cuò)誤數(shù)據(jù)之間存在數(shù)據(jù)依賴關(guān)系而隨著程序執(zhí)行傳播產(chǎn)生的錯(cuò)誤,造成系統(tǒng)存儲(chǔ)數(shù)據(jù)的數(shù)值與正確值之間出現(xiàn)了影響結(jié)果正確性的偏差。
分布式流體系結(jié)構(gòu)上運(yùn)行的Kernel函數(shù)是具有數(shù)據(jù)并行性的計(jì)算程序,通常以線程級(jí)并行方式或任務(wù)級(jí)并行方式運(yùn)行在遠(yuǎn)程節(jié)點(diǎn)上,本文將Kernel函數(shù)調(diào)用語(yǔ)句稱為并行計(jì)算核心(并行Kernel)。同時(shí),主程序串行運(yùn)行在本地節(jié)點(diǎn)上,本文將非Kernel函數(shù)調(diào)用的執(zhí)行語(yǔ)句統(tǒng)稱為串行計(jì)算核心(串行Kernel)。因此,這些計(jì)算核心錯(cuò)誤間的傳播關(guān)系如圖2所示。
Figure 2 Serial Kernel errors and parallel Kernel errors圖2 串行Kernel錯(cuò)誤與并行Kernel錯(cuò)誤
可見(jiàn),分布式流計(jì)算程序節(jié)點(diǎn)錯(cuò)誤的傳播途徑主要是通過(guò)程序語(yǔ)句執(zhí)行在節(jié)點(diǎn)內(nèi)傳播或通信語(yǔ)句在節(jié)點(diǎn)間傳播。本文假設(shè)主程序運(yùn)行的節(jié)點(diǎn)是可靠的,即不考慮串行Kernel原生節(jié)點(diǎn)錯(cuò)誤,只關(guān)心并行Kernel相關(guān)錯(cuò)誤導(dǎo)致的主程序失效問(wèn)題。
本文提出的容錯(cuò)技術(shù)是在系統(tǒng)發(fā)生故障的情況下,仍然可以保證程序的正確運(yùn)行,主要針對(duì)節(jié)點(diǎn)硬件故障引起的不易察覺(jué)的軟錯(cuò)誤(Soft Error),在錯(cuò)誤傳播期間對(duì)其進(jìn)行檢測(cè)與恢復(fù),以防止系統(tǒng)出現(xiàn)失效,其故障模型如圖3所示。該類軟錯(cuò)誤是指運(yùn)行并行Kernel的節(jié)點(diǎn)發(fā)生瞬時(shí)故障所引起的程序員不易察覺(jué)的軟錯(cuò)誤,不會(huì)立即導(dǎo)致程序失效,而是通過(guò)程序語(yǔ)句執(zhí)行傳播影響其他正常數(shù)據(jù)而出現(xiàn)新的錯(cuò)誤,并最終在主程序中繼續(xù)傳播而導(dǎo)致其失效。這類軟錯(cuò)誤由于不易察覺(jué),檢錯(cuò)比較困難,本文考慮基于空間冗余方式對(duì)比數(shù)據(jù)以檢錯(cuò)與糾錯(cuò)。
Figure 3 Fault model of the instantaneous fault occurred in the parallel Kernel nodes圖3 并行Kernel節(jié)點(diǎn)發(fā)生瞬時(shí)故障的故障模型
3面向分布式流體系結(jié)構(gòu)的多副本積極容錯(cuò)技術(shù):TREFT
多副本積極容錯(cuò)技術(shù)是一種主動(dòng)的空間冗余容錯(cuò)方法,又稱為多模冗余NMR(N-Modular Redundancy)方法,即多個(gè)相同程序副本以空間并行的方式同時(shí)執(zhí)行,當(dāng)程序執(zhí)行遇到同步點(diǎn)時(shí),程序會(huì)主動(dòng)比較多個(gè)副本數(shù)據(jù)進(jìn)行檢錯(cuò),遵循“用三取二”方法選擇多數(shù)相同的結(jié)果,并對(duì)錯(cuò)誤的數(shù)據(jù)進(jìn)行糾錯(cuò),以防止錯(cuò)誤進(jìn)一步傳播。目前有研究[17]表明,當(dāng)單個(gè)副本程序的可靠性達(dá)到80%時(shí),三模冗余容錯(cuò)方法的系統(tǒng)可靠性就可以達(dá)到90%以上??紤]到容錯(cuò)成本開(kāi)銷以及容錯(cuò)技術(shù)實(shí)現(xiàn)的復(fù)雜性,本文多副本容錯(cuò)技術(shù)采用三模冗余積極容錯(cuò)技術(shù)TREFT(Triple modular Redundancy Eager Fault-tolerant Technique)。
TREFT通過(guò)比較三個(gè)程序副本活躍變量數(shù)據(jù)的一致性,從而有效檢測(cè)出故障引起或正在傳播的不易被發(fā)現(xiàn)的軟錯(cuò)誤。假設(shè)錯(cuò)誤是隨機(jī)出現(xiàn)的,若計(jì)算核心重新執(zhí)行時(shí),則本文認(rèn)為出現(xiàn)相同錯(cuò)誤的概率很低,一般可以獲得正確的輸出數(shù)據(jù)。由于兩個(gè)以上獨(dú)立程序副本運(yùn)行同時(shí)出錯(cuò)的概率非常小,因此,本文對(duì)于兩個(gè)(含)以上副本同時(shí)出現(xiàn)錯(cuò)誤的情況不予考慮。
本文中TREFT進(jìn)行容錯(cuò)的對(duì)象是Kernel函數(shù)的輸出數(shù)據(jù),因此,需要對(duì)包含Kernel函數(shù)的程序段標(biāo)識(shí)成容錯(cuò)程序段,以便于進(jìn)行檢錯(cuò)與糾錯(cuò)處理,其基本概念定義如下:
定義1
(1)起始同步點(diǎn):標(biāo)記容錯(cuò)程序范圍的起始位置;
(2)比較同步點(diǎn):標(biāo)記容錯(cuò)程序范圍的結(jié)束位置,同時(shí)也是執(zhí)行同步操作的位置,在該位置上將數(shù)據(jù)發(fā)送到其他副本節(jié)點(diǎn)上進(jìn)行數(shù)據(jù)比較。
定義2
(1)容錯(cuò)程序段:主程序中需要進(jìn)行容錯(cuò)的程序語(yǔ)句序列,一般使用起始同步點(diǎn)與比較同步點(diǎn)標(biāo)記容錯(cuò)程序的范圍,包含多個(gè)串行語(yǔ)句與Kernel函數(shù)調(diào)用語(yǔ)句。一個(gè)Kernel函數(shù)調(diào)用語(yǔ)句就可以構(gòu)成一個(gè)基本的容錯(cuò)程序段。
(2)非容錯(cuò)程序段:主程序中容錯(cuò)程序段之間的程序語(yǔ)句序列,執(zhí)行時(shí)不會(huì)產(chǎn)生本節(jié)定義的軟錯(cuò)誤,因此不需要進(jìn)行容錯(cuò)處理。
(3)容錯(cuò)程序段活躍變量:是指由容錯(cuò)程序段包含的Kernel函數(shù)調(diào)用語(yǔ)句中進(jìn)行定值操作的流變量,其在后面的程序執(zhí)行時(shí)可能被引用,若這些變量發(fā)生錯(cuò)誤而沒(méi)有進(jìn)行糾錯(cuò),則會(huì)形成錯(cuò)誤的傳播。
如圖4所示,程序員或編譯器需要在容錯(cuò)程序段的前后分別插入起始同步點(diǎn)與比較同步點(diǎn)進(jìn)行標(biāo)記。容錯(cuò)程序段可以將錯(cuò)誤傳播的范圍控制在一個(gè)有限的程序區(qū)域內(nèi),使得錯(cuò)誤不會(huì)傳播出所在的容錯(cuò)程序段而影響其他部分。即使出現(xiàn)軟錯(cuò)誤,程序只需要重新糾正錯(cuò)誤的活躍變量,而不需要重新執(zhí)行程序,從而降低容錯(cuò)開(kāi)銷。
Figure 4 Schematic diagram of the related concepts of the fault-tolerant program section in the TREFT圖4 TREFT容錯(cuò)程序段相關(guān)概念示意圖
TREFT中各節(jié)點(diǎn)的表決器模塊使用“用三取二”多數(shù)判決邏輯準(zhǔn)則對(duì)錯(cuò)誤數(shù)據(jù)進(jìn)行判定:
(1)正常情況下三個(gè)副本數(shù)據(jù)都是相同的,則使用各自程序結(jié)果作為正確輸出;
(2)若任何一個(gè)程序副本出錯(cuò),其輸出不同于其他兩個(gè)程序副本,則表決器采用多數(shù)程序副本的數(shù)據(jù)結(jié)果作為正確結(jié)果進(jìn)行故障恢復(fù),即對(duì)該錯(cuò)誤活躍變量直接進(jìn)行賦值,防止錯(cuò)誤進(jìn)一步傳播。
容錯(cuò)程序段的設(shè)置是TREFT同步技術(shù)的關(guān)鍵問(wèn)題,會(huì)影響程序容錯(cuò)粒度與容錯(cuò)開(kāi)銷,根據(jù)分布式流應(yīng)用的程序語(yǔ)句類型的特點(diǎn),TREFT中包括五個(gè)基本設(shè)置規(guī)則:
規(guī)則1Write操作之前必須設(shè)置容錯(cuò)程序段以保證其輸入變量的正確性。因?yàn)閃rite操作在主程序中接收錯(cuò)誤數(shù)據(jù),為了主程序不失效,所以在數(shù)據(jù)傳回主程序之前進(jìn)行容錯(cuò),Write操作涉及的數(shù)據(jù)也屬于活躍變量,該規(guī)則保證錯(cuò)誤不會(huì)繼續(xù)在主程序中傳播。
規(guī)則2所有Kernel函數(shù)調(diào)用語(yǔ)句都必須處于容錯(cuò)程序段中。顯然,本節(jié)假設(shè)的錯(cuò)誤都發(fā)生在運(yùn)行并行Kernel的節(jié)點(diǎn)上,即對(duì)應(yīng)于主程序中Kernel函數(shù)執(zhí)行過(guò)程,該規(guī)則保證TREFT對(duì)所有可能發(fā)生的并行Kernel原生錯(cuò)誤都進(jìn)行了容錯(cuò)處理。
規(guī)則3每個(gè)Kernel并行執(zhí)行模式[16]中的所有Kernel函數(shù)調(diào)用語(yǔ)句必須處于同一個(gè)容錯(cuò)程序段中。由于這些Kernel函數(shù)調(diào)用語(yǔ)句都是并行執(zhí)行的,即以空間并行或時(shí)間并行的方式運(yùn)行多個(gè)相鄰的Kernel,所以無(wú)法確定它們之間的真實(shí)執(zhí)行順序,而該規(guī)則保證了其并行執(zhí)行語(yǔ)義。
規(guī)則4采用數(shù)據(jù)流Eager傳輸策略[16]而提前傳輸?shù)臄?shù)據(jù)必須在數(shù)據(jù)原本所在的容錯(cuò)程序段內(nèi)進(jìn)行檢錯(cuò)與糾錯(cuò),如果提前傳輸?shù)臄?shù)據(jù)發(fā)生錯(cuò)誤,則需要進(jìn)行重傳,從而保證了后繼Kernel計(jì)算的正確性。
規(guī)則5設(shè)置合理容錯(cuò)粒度的容錯(cuò)程序段。若以主程序中的每個(gè)計(jì)算核心為容錯(cuò)粒度,容錯(cuò)粒度過(guò)小,同步點(diǎn)設(shè)置過(guò)密,就會(huì)引發(fā)頻繁的檢錯(cuò)糾錯(cuò)操作,數(shù)據(jù)傳輸操作過(guò)多,致使容錯(cuò)執(zhí)行效率不高,因此,應(yīng)該盡可能合并可以一次容錯(cuò)的語(yǔ)句。
本文在分布式流體系結(jié)構(gòu)編程模型中設(shè)計(jì)了TREFT容錯(cuò)起始同步點(diǎn)與比較同步點(diǎn)的語(yǔ)法,即
#pragma brs treftsyn startProgramCode
#pragma brs treftsyn finish
該編譯指導(dǎo)語(yǔ)句使用在需要進(jìn)行容錯(cuò)的程序段開(kāi)始處和結(jié)尾處,其語(yǔ)義是指該范圍內(nèi)的語(yǔ)句序列是容錯(cuò)程序段,當(dāng)程序運(yùn)行到比較同步點(diǎn)時(shí),需要執(zhí)行TREFT檢錯(cuò)與糾錯(cuò)流程。編譯器對(duì)所有人工標(biāo)記的容錯(cuò)程序段進(jìn)行標(biāo)識(shí),生成容錯(cuò)程序段索引表以及包含的計(jì)算核心與對(duì)應(yīng)的輸出活躍變量,并為每個(gè)容錯(cuò)程序段創(chuàng)建一個(gè)事件消息隊(duì)列用于接收相關(guān)容錯(cuò)處理的消息。
如圖5所示案例,存在三個(gè)程序副本TR1、TR2與TR3,例如每個(gè)程序副本的host節(jié)點(diǎn)上都創(chuàng)建了1個(gè)執(zhí)行線程(Executor Thread)執(zhí)行主程序(AK代碼),由其進(jìn)一步創(chuàng)建1個(gè)工作線程(Worker Thread)與1個(gè)子任務(wù)工作線程(Subworker Thread)管理任務(wù)的執(zhí)行過(guò)程,同時(shí)在1個(gè)device節(jié)點(diǎn)上創(chuàng)建了執(zhí)行線程用于執(zhí)行計(jì)算核心代碼(SK)。其中,host節(jié)點(diǎn)上:
Figure 5 Schematic diagram of the runtime that supports the TREFT fault-tolerant technique圖5 支持TREFT容錯(cuò)技術(shù)的運(yùn)行時(shí)結(jié)構(gòu)示意圖
(1)Executor Thread:運(yùn)行主程序(AK代碼)以管理整個(gè)程序的執(zhí)行過(guò)程,并依次按照指定的語(yǔ)義執(zhí)行Kernel計(jì)算任務(wù);
(2)Worker Thread:執(zhí)行對(duì)Kenrel計(jì)算任務(wù)的相關(guān)操作,包括請(qǐng)求下載與執(zhí)行代碼等,負(fù)責(zé)監(jiān)控任務(wù)狀態(tài)與更新全局信息列表,以保證數(shù)據(jù)一致性;
(3)Subworker Thread:負(fù)責(zé)執(zhí)行子任務(wù)的所有相關(guān)操作以及狀態(tài)監(jiān)控,當(dāng)程序劃分為多個(gè)任務(wù)執(zhí)行時(shí),編譯器運(yùn)行時(shí)中會(huì)創(chuàng)建相應(yīng)數(shù)目的線程來(lái)維持子任務(wù)的運(yùn)行;
(4)device節(jié)點(diǎn)上Executor Thread:負(fù)責(zé)直接執(zhí)行計(jì)算核心的子任務(wù),包括下載數(shù)據(jù)與代碼、啟動(dòng)執(zhí)行子任務(wù)等。
不同工作線程之間是通過(guò)事件消息隊(duì)列來(lái)傳遞信息的,工作線程(Worker Thread)與子任務(wù)工作線程(Subworker Thread)的事件消息隊(duì)列分別記作wq與cq。如圖5所示,為了支持TREFT容錯(cuò)機(jī)制,分布式流體系結(jié)構(gòu)的運(yùn)行時(shí)組織結(jié)構(gòu)添加了容錯(cuò)監(jiān)控線程(Fault-Tolerant Monitor Thread)與相應(yīng)的事件消息隊(duì)列(Fault-Tolerant Queue),其中:
(1)Fault-Tolerant Monitor Thread:是主程序執(zhí)行線程創(chuàng)建的TREFT容錯(cuò)監(jiān)控工作線程,負(fù)責(zé)與其他副本的容錯(cuò)監(jiān)控線程同步、請(qǐng)求交換數(shù)據(jù)、請(qǐng)求檢錯(cuò)與糾錯(cuò)等。當(dāng)三個(gè)副本的容錯(cuò)監(jiān)控線程互相同步且都準(zhǔn)備好時(shí),則本地容錯(cuò)監(jiān)控線程將請(qǐng)求檢錯(cuò)與糾錯(cuò)的事件操作壓入對(duì)應(yīng)的工作線程事件消息隊(duì)列進(jìn)行處理,并由子任務(wù)工作線程負(fù)責(zé)執(zhí)行數(shù)據(jù)交換與檢錯(cuò)糾錯(cuò)任務(wù)。
(2)Fault-Tolerant Queue:用于接收其他副本容錯(cuò)監(jiān)控線程與計(jì)算核心工作線程反饋的消息,并進(jìn)一步交給容錯(cuò)監(jiān)控線程處理,并記為fq。
本文采用一種線程操作表的偽代碼方法來(lái)描述TREFT實(shí)現(xiàn)與執(zhí)行細(xì)節(jié),如表2所示。假設(shè)存在計(jì)算核心K1劃分為3個(gè)子任務(wù)K1i執(zhí)行,1≤i≤3且i為正整數(shù),使用K1i.OP表示計(jì)算核心子任務(wù)K1i執(zhí)行操作OP,用ex(OP)表示指定線程執(zhí)行操作OP,wq.p(OP)表示事件消息隊(duì)列wq壓入操作OP并進(jìn)行處理。
Table 1 Operation list of Kernel and Stream in the TREFT
如表2所示,存在兩個(gè)串行執(zhí)行的計(jì)算核心K1與K2,并對(duì)其進(jìn)行檢錯(cuò)與糾錯(cuò),KR表示容錯(cuò)監(jiān)控線程,最右邊一列表示各線程事件執(zhí)行的大致順序。TREFT容錯(cuò)機(jī)制中檢錯(cuò)與糾錯(cuò)過(guò)程是一個(gè)阻塞事件過(guò)程,只有結(jié)束后才能繼續(xù)執(zhí)行程序,整個(gè)TREFT容錯(cuò)機(jī)制的主要運(yùn)行流程如下:
(1) 當(dāng)程序執(zhí)行到標(biāo)記同步點(diǎn)時(shí),三個(gè)副本程序創(chuàng)建各自的容錯(cuò)監(jiān)控線程,同時(shí)傳遞容錯(cuò)程序段索引號(hào)給該線程,以便于容錯(cuò)監(jiān)控線程可以在容錯(cuò)程序段索引表里檢索相應(yīng)Kernel的活躍變量信息,同時(shí)監(jiān)視容錯(cuò)程序段中Kernel任務(wù)的執(zhí)行狀態(tài),如圖5和表2中①所示。
(2) 當(dāng)程序執(zhí)行到比較同步點(diǎn)時(shí),由于在TREFT容錯(cuò)模式下,所有計(jì)算核心執(zhí)行完畢后阻塞等待并不立即退出,而是將計(jì)算任務(wù)狀態(tài)通知給工作線程與容錯(cuò)監(jiān)控線程,如圖5和表2中②與③所示。
(3) 當(dāng)監(jiān)測(cè)到容錯(cuò)程序段中所有Kernel計(jì)算完畢時(shí),容錯(cuò)監(jiān)控線程向其他兩個(gè)副本的容錯(cuò)監(jiān)控線程發(fā)送初始化同步操作OPRS,得到兩者回復(fù)才可以確認(rèn)三個(gè)副本都已經(jīng)到達(dá)同步點(diǎn)。由于同一時(shí)刻只有一個(gè)容錯(cuò)程序段處于運(yùn)行狀態(tài),因此,通過(guò)容錯(cuò)程序段索引號(hào)保證只有一個(gè)容錯(cuò)程序段進(jìn)行處理。接著,三個(gè)副本之間同步需要檢錯(cuò)的資源信息,包括其他兩個(gè)副本程序活躍變量信息所在的節(jié)點(diǎn)信息,并將對(duì)應(yīng)信息更新到各自的全局信息列表中,如圖5和表2中④所示。
Table 2 Thread operations in the TREFT fault-tolerant technique
(4) 當(dāng)數(shù)據(jù)同步結(jié)束后,容錯(cuò)監(jiān)控線程將數(shù)據(jù)檢錯(cuò)糾錯(cuò)操作OPTR壓入對(duì)應(yīng)的計(jì)算核心Kernel工作線程的事件消息隊(duì)列進(jìn)行處理,如圖5和表2中⑤所示。
(5) 對(duì)應(yīng)Kernel工作線程接收OPTR操作后,通過(guò)子任務(wù)工作線程請(qǐng)求其他兩個(gè)副本程序傳輸活躍變量數(shù)據(jù)到指定副本程序綁定的節(jié)點(diǎn)上,由該節(jié)點(diǎn)上的RMK啟動(dòng)數(shù)據(jù)檢錯(cuò)與糾錯(cuò)任務(wù),并在執(zhí)行結(jié)束后通知子任務(wù)工作線程,如圖5和表2中⑥所示。
(6) 子任務(wù)工作線程將容錯(cuò)操作結(jié)果OPTF反饋給工作線程,當(dāng)所有子任務(wù)完成后,工作線程通知容錯(cuò)監(jiān)控線程當(dāng)前計(jì)算核心已經(jīng)完成了容錯(cuò)操作OPTF,如圖5和表2中⑦所示。當(dāng)容錯(cuò)程序段中所有Kernel都完成容錯(cuò)操作時(shí),容錯(cuò)監(jiān)控線程再一次與其他兩個(gè)副本執(zhí)行完成容錯(cuò)的同步操作OPRFS,如圖5和表2中⑧所示,并通知所有Kernel計(jì)算完成結(jié)束工作線程操作OPET,如圖5和表2中⑨所示。
(7) 執(zhí)行線程等待容錯(cuò)程序段所有計(jì)算核心結(jié)束,并在最后阻塞等待容錯(cuò)監(jiān)控線程結(jié)束,以確保程序執(zhí)行語(yǔ)義的正確性,如表2中⑩所示。
4實(shí)驗(yàn)驗(yàn)證
整個(gè)實(shí)驗(yàn)評(píng)估是在由20個(gè)節(jié)點(diǎn)組成的互連網(wǎng)絡(luò)上完成的,每個(gè)節(jié)點(diǎn)由一個(gè)多核CPU組成,實(shí)驗(yàn)平臺(tái)參數(shù)如表3所示。分布式流體系結(jié)構(gòu)實(shí)驗(yàn)原型系統(tǒng)由C/C++語(yǔ)言實(shí)現(xiàn),主要包括編譯器以及資源管理等,可以支持多種計(jì)算資源與編程語(yǔ)言,包括GPU(Brook+、OpenCL、CUDA等)、CPU(C/C++等)等,支持多個(gè)Kernel并行執(zhí)行,能有效開(kāi)發(fā)程序的線程級(jí)并行性與任務(wù)級(jí)并行性。
實(shí)驗(yàn)測(cè)試用例采用NASGridBenchmarks(NGB)中的HelicalChain(HC)、VisualizationPipe(VP)與MixedBag(MB)三個(gè)用例,如圖6所示,測(cè)試用例都是由單個(gè)NPB實(shí)例求解器(BT,SP,LU,MG或FT)組成的串行流處理模式,MF過(guò)濾器用于轉(zhuǎn)換不同實(shí)例求解器之間的數(shù)據(jù),實(shí)驗(yàn)測(cè)試用例選定反復(fù)執(zhí)行2次流程。本文將實(shí)例求解器與對(duì)應(yīng)的過(guò)濾器封裝為一個(gè)計(jì)算核心,所有計(jì)算核心都按照順序依次執(zhí)行,并移植到分布式流體系結(jié)構(gòu)上,并通過(guò)模擬的方法產(chǎn)生原始輸入數(shù)據(jù),如圖6所示執(zhí)行流程。
Table 3 Parameter list of the experimental platform
Figure 6 Schematic diagram of the computing process in test case VP,MB and HC圖6 實(shí)驗(yàn)測(cè)試用例VP、MB與HC的計(jì)算流程示意圖
本文實(shí)驗(yàn)中國(guó)際互聯(lián)網(wǎng)模擬環(huán)境的延時(shí)采用Internet Traffic Report網(wǎng)站在2015年統(tǒng)計(jì)的五大洲延遲時(shí)間平均值100 ms,國(guó)際互聯(lián)網(wǎng)帶寬則采用Speedtest在2013年180多個(gè)國(guó)家與地區(qū)測(cè)量帶寬平均值13.98 Mbps,其余時(shí)間都采用實(shí)際測(cè)試的時(shí)間,所有測(cè)試用例采用A與B兩個(gè)規(guī)模級(jí)別的測(cè)試集。三個(gè)測(cè)試用例的控制依賴關(guān)系較為簡(jiǎn)單,因此,實(shí)驗(yàn)中TREFT版本將程序標(biāo)識(shí)成一個(gè)粒度較大的TREFT容錯(cuò)程序段。本文設(shè)計(jì)了兩個(gè)對(duì)比實(shí)驗(yàn)版本TREFT-E1與TREFT-E2,其中TREFT-E1是在TREFT容錯(cuò)程序版本的基礎(chǔ)上分別采用了數(shù)據(jù)流Eager傳輸優(yōu)化策略[16],可以主動(dòng)傳輸數(shù)據(jù),考察優(yōu)化技術(shù)對(duì)TREFT容錯(cuò)技術(shù)的影響;TREFT-E2則以單個(gè)計(jì)算核心Kernel為T(mén)REFT容錯(cuò)程序段,其每個(gè)容錯(cuò)程序段的容錯(cuò)粒度較小,考察不同容錯(cuò)粒度下對(duì)容錯(cuò)開(kāi)銷的影響。
如圖7所示,采用TREFT容錯(cuò)技術(shù)后各測(cè)試用例平均增加10.77%的容錯(cuò)開(kāi)銷,并呈現(xiàn)出VP、MB與HC增加容錯(cuò)開(kāi)銷依次減小的趨勢(shì),其中,VP.B(20.03%)、VP.A(10.20%)與MB.B(10.12%)增加的容錯(cuò)開(kāi)銷均在10%以上。這是由于VP和MB測(cè)試用例中FT計(jì)算核心的活躍變量數(shù)據(jù)量較大,由于模擬的互聯(lián)網(wǎng)帶寬受限,所以造成通信時(shí)間成為T(mén)REFT容錯(cuò)同步過(guò)程的瓶頸。同時(shí),HC測(cè)試用例中LU計(jì)算核心活躍變量的數(shù)據(jù)量較小,通信時(shí)間占據(jù)其整個(gè)執(zhí)行時(shí)間比例開(kāi)銷較小,從而使得增加的容錯(cuò)開(kāi)銷較小。
當(dāng)測(cè)試用例采用數(shù)據(jù)流Eager傳輸優(yōu)化策略時(shí),數(shù)據(jù)會(huì)盡可能主動(dòng)傳輸?shù)侥繕?biāo)節(jié)點(diǎn)上,因此可以減少程序執(zhí)行時(shí)間。如圖7所示,TREFT-E1版本通常增加的容錯(cuò)開(kāi)銷較小(平均13.05%左右),比原始TREFT版本平均增加了2.28%的開(kāi)銷比例。VP.B(25.6%)是容錯(cuò)開(kāi)銷比例較大的測(cè)試用例。在采用性能優(yōu)化技術(shù)后,VP和MB中容錯(cuò)同步的數(shù)據(jù)通信開(kāi)銷與檢測(cè)開(kāi)銷沒(méi)變,而程序整體執(zhí)行時(shí)間減少,因此造成容錯(cuò)開(kāi)銷所占比例進(jìn)一步增加。HC容錯(cuò)開(kāi)銷比例沒(méi)有顯著增加,這是由于HC中各個(gè)計(jì)算核心串行連續(xù)執(zhí)行,采用數(shù)據(jù)流Eager傳輸策略后整體執(zhí)行時(shí)間沒(méi)有顯著減少,因此,HC增加的容錯(cuò)開(kāi)銷不顯著。
由此可見(jiàn),TREFT容錯(cuò)技術(shù)可以有效支持?jǐn)?shù)據(jù)流Eager傳輸優(yōu)化技術(shù),且采用后增加的容錯(cuò)開(kāi)銷(2.28%)比例較小,具有較高的容錯(cuò)效率。
TREFT-E2版本采用了計(jì)算核心級(jí)別的細(xì)粒度TREFT容錯(cuò)方法,如圖7所示,各測(cè)試用例的容錯(cuò)開(kāi)銷平均增加52.77%,大約是正常TREFT增加開(kāi)銷的5倍,其中VP.A(69.12%)、VP.B(67.17%)、MB.A(54.39%)與HC.B(50.31%)增加的容錯(cuò)開(kāi)銷超過(guò)了50%。這是由于這些測(cè)試用例活躍變量的數(shù)據(jù)量較大,容易使得數(shù)據(jù)傳輸與檢錯(cuò)成為容錯(cuò)同步過(guò)程的瓶頸。同時(shí),HC.A(36.53%)與MB.B(38.09%)測(cè)試用例增加的容錯(cuò)開(kāi)銷相對(duì)較小,HC.A中活躍變量數(shù)據(jù)總和較小,容錯(cuò)同步需要的數(shù)據(jù)傳輸與比較時(shí)間較短,而MB.B的執(zhí)行時(shí)間較長(zhǎng),因此使得其增加的容錯(cuò)開(kāi)銷比例沒(méi)有其他情況高。
Figure 7 Percentage of the fault-tolerant overhead increased after using the TREFT in test case VP,MB and HC圖7 測(cè)試用例在使用TREFT后的容錯(cuò)開(kāi)銷增加百分比
由此可見(jiàn),當(dāng)TREFT容錯(cuò)粒度過(guò)小時(shí),容錯(cuò)操作頻繁會(huì)造成較低的容錯(cuò)效率,當(dāng)程序變得更加復(fù)雜時(shí),隨著TREFT容錯(cuò)程序段數(shù)目的增加,需要進(jìn)行容錯(cuò)同步的數(shù)據(jù)量逐漸增大,這種趨勢(shì)會(huì)愈加明顯。
綜上所述,TREFT容錯(cuò)技術(shù)具有較低的容錯(cuò)開(kāi)銷和良好的容錯(cuò)特性,可以有效提高分布式流體系結(jié)構(gòu)下應(yīng)用程序執(zhí)行的可靠性。
5結(jié)束語(yǔ)
隨著計(jì)算系統(tǒng)規(guī)模的持續(xù)擴(kuò)大,分布式流體系結(jié)構(gòu)中的可靠性問(wèn)題面臨著非常嚴(yán)峻的挑戰(zhàn)。本文以多模冗余容錯(cuò)技術(shù)為基礎(chǔ),提出了一種面向分布式流體系結(jié)構(gòu)的多副本積極容錯(cuò)技術(shù)TREFT,在分布式流體系結(jié)構(gòu)原型系統(tǒng)上的實(shí)驗(yàn)結(jié)果表明,該技術(shù)能有效提高系統(tǒng)的可靠性,且具有較低的容錯(cuò)開(kāi)銷。
未來(lái)的研究將在已有研究基礎(chǔ)上,通過(guò)數(shù)據(jù)流方法分析分布式流體系結(jié)構(gòu)中的錯(cuò)誤傳播行為特點(diǎn),構(gòu)建數(shù)據(jù)流方程來(lái)刻畫(huà)錯(cuò)誤傳播行為,以指導(dǎo)分布式流體系結(jié)構(gòu)的容錯(cuò)技術(shù)研究,設(shè)計(jì)高效的容錯(cuò)算法,盡可能比較最小的錯(cuò)誤數(shù)據(jù)集合,從而進(jìn)一步減少容錯(cuò)開(kāi)銷。
參考文獻(xiàn):附中文
[1]Meuer H,Simon H,Strohmaier E,et al. TOP500 supercomputer sites[EB/OL].[2015-09-01]. http://www.top500.org.
[2]Lu C-D. Scalable diskless checkpointing for large parallel systems[D]. Urbana-Champaign:University of Illinois,2005.
[3]Bosilca G,Bouteiller A,Cappello F,et al. MPICH-V:Toward a scalable fault tolerant MPI for volatile nodes[C]∥Proc of SC’02,2002:1-18.
[4]Engelmann C,Geist A. A diskless checkpointing algorithm for super-scale architectures applied to the fast Fourier transform[C]∥Proc of the 1st International Workshop on Challenges of Large Applications in Distributed Environments,2003:47-52.
[5]Los Alamos National Laboratory. Operational data to support and enable computer science research[EB/OL]. [2015-09-01]. http://institute.lanl.gov/data/lanldata.shtml.
[6]Wu M,Sun X-H,Jin H. Performance under failures of high-end computing[C]∥Proc of the 2007 ACM/IEEE Conference on Supercomputing,2007:1-11.
[7]Yang X,Liao X,Xu W,et al. TH-1:China’s first petaflop supercomputer[J]. Frontiers of Computer Science in China,2010,4(4):445-455.
[8]Yang X-J,Liao X-K,Lu K,et al. The TianHe-1A supercomputer:Its hardware and software[J]. Journal of Computer Science and Technology,2011,26(3):344-351.
[9]Borucki L,Schindlbeck G,Slayman C. Comparison of accelerated DRAM soft error rates measured at component and system level[C]∥Proc of the 2008 IEEE International Reliability Physics Symposium,2008:482-487.
[10]Schroeder B,Pinheiro E,Weber W-D. DRAM errors in the wild:A large-scale field study[C]∥Proc of the 11th International Joint Conference on Measurement and Modeling of Computer Systems,2009:193-204.
[11]Maruyama N,Nukada A,Matsuoka S. Software-based ECC for GPUS[C]∥Proc of the 2009 Symposium on Application Accelerators in High Performance Computing (SAAHPC’09),2009:1.
[12]Bronevetsky G,Marques D,Pingali K,et al. Automated application-level checkpointing of MPI programs[C]∥Proc of the Symposium on Principles and Practice of Parallel Programming (PPoPP 2003),2003:84-94.
[13]Wang Z Y,Yang X J,Zhou Y.Scalable triple modular redundancy fault tolerance mechanism for MPI-oriented large scale parallel computing[J]. Journal of Software,2012,23(4):1022-1035. (in Chinese)
[14]Plank J S. A tutorial on reed-solomon coding for fault-tolerance in RAID-like systems[J]. Software-Practice & Experience,1997,27(9):995-1012.
[15]Zaharia M,Chowdhury M,Das T,et al. Resilient distributed datasets:A fault-tolerant abstraction for in-memory cluster computing [C]∥Proc of the 9th USENIX Conference on Networked Systems Design and Implementation. USENIX Association,2012:1.
[16]Li Xin,Guo Xiao-wei,Lin Yu-fei. Stream eager transmission:The performance optimization technique for the distributed stream architecture[J]. Computer Engineering & Science,2015,37(11):2035-2044.(in Chinese)
[17]Song W. Research on fault tolerance for transactional memory system[D]. Changsha:National University of Defense Technology,2011. (in Chinese)
[13]王之元,楊學(xué)軍,周云. 大規(guī)模MPI并行計(jì)算的可擴(kuò)展三模冗余容錯(cuò)機(jī)制[J]. 軟件學(xué)報(bào),2012,23(4):1022-1035.
[16]李鑫,郭曉威,林宇斐. 數(shù)據(jù)流Eager傳輸:一種分布式流體系結(jié)構(gòu)中的性能優(yōu)化技術(shù)[J]. 計(jì)算機(jī)工程與科學(xué),2015,37(11):2035-2044.
[17]宋偉. 面向事務(wù)存儲(chǔ)系統(tǒng)的容錯(cuò)技術(shù)研究[D]. 長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué),2011.
李鑫(1984-),男,安徽安慶人,博士生,研究方向?yàn)楦咝阅苡?jì)算和大數(shù)據(jù)。E-mail:xinli@nudt.edu.cn
LI Xin,born in 1984,PhD candidate,his research interests include distributed computing, and big data.
林宇斐(1985-),女,江西南昌人,博士,工程師,研究方向?yàn)椴⑿杏?jì)算。E-mail:linyufei@nudt.edu.cn
LIN Yu-fei,born in 1985,PhD,engineer,her research interest includes parallel computing.
郭曉威(1986-),男,湖南益陽(yáng)人,博士生,研究方向?yàn)椴⑿杏?jì)算與數(shù)值模擬。E-mail:guoxiaowei@nudt.edu.cn
GUO Xiao-wei,born in 1986,PhD candidate,his research interests include parallel computing, and numerical simulation.
A triple modular eager redundancy fault-toleranttechnique for distributed stream architecture
LI Xin1,3,4,LIN Yu-fei2,GUO Xiao-wei1
(1.The State Key Laboratory of High Performance Computing,National University of Defense Technology,Changsha 410073;
2.Graduate School,National University of Defense Technology,Changsha 410073;
3.PLA University of Science and Technology,Nanjing 210007;
4.The 63rd Research Institute of PLA General Staff Headquarters,Nanjing 210007,China)
Abstract:As computing systems continue to expand in size in the Internet environment, the reliability of the distributed stream architecture is facing serious challenges. Based on the N-modular redundancy technique, we propose a triple modular eager redundancy fault-tolerant method for the distributed stream architecture (TREFT). The TREFT employs three program copies to run the error detection and error correction processes efficiently. Experimental results on a prototype system of the distributed stream architecture show that the TREFT could enhance the reliability of the system at very low cost, increasing the fault-tolerant cost by 10.77% on average.
Key words:distributed stream architecture;fault-tolerant technique;triple modular redundancy
作者簡(jiǎn)介:
doi:10.3969/j.issn.1007-130X.2015.12.007
中圖分類號(hào):TP338.8
文獻(xiàn)標(biāo)志碼:A
基金項(xiàng)目:國(guó)家自然科學(xué)基金資助項(xiàng)目(61221491,61303071)
收稿日期:修回日期:2015-11-26
文章編號(hào):1007-130X(2015)12-2233-09