郭 強(qiáng),伍攀峰,2,許振龍
(1.山東航天電子科學(xué)技術(shù)研究所,山東 煙臺(tái) 264006;2.哈爾濱工業(yè)大學(xué) 航天學(xué)院,哈爾濱 150001)
近年來,隨著國(guó)內(nèi)外航天產(chǎn)業(yè)和新興技術(shù)的蓬勃發(fā)展,衛(wèi)星功能密度和星上實(shí)時(shí)性要求日益增長(zhǎng),基于傳統(tǒng)單核處理器設(shè)計(jì)的星載計(jì)算機(jī)系統(tǒng)已無法滿足航天器任務(wù)需求,多核處理器應(yīng)用于航天任務(wù)已成為了發(fā)展的必然[1]。
航天應(yīng)用的電子產(chǎn)品要考慮空間輻射效應(yīng)的影響??臻g輻射環(huán)境中的高能質(zhì)子、粒子等都有可能使高集成衛(wèi)星電子系統(tǒng)中的半導(dǎo)體器件在敏感區(qū)域產(chǎn)生瞬態(tài)脈沖,進(jìn)一步觸發(fā)單粒子翻轉(zhuǎn)(SEU,single event upsets)事件,導(dǎo)致系統(tǒng)得到錯(cuò)誤的運(yùn)行結(jié)果以及系統(tǒng)中的其他故障,如掛起和崩潰等[2]。當(dāng)輻射足夠高時(shí),可能致使存儲(chǔ)器單元、寄存器、鎖存器和觸發(fā)器的數(shù)據(jù)位發(fā)生翻轉(zhuǎn),從而引起系統(tǒng)錯(cuò)誤[3]。單粒子效應(yīng)引發(fā)的錯(cuò)誤類型包括硬錯(cuò)誤和軟錯(cuò)誤兩種不同類型的錯(cuò)誤。隨著集成電路工藝尺寸的持續(xù)優(yōu)化,軟錯(cuò)誤出現(xiàn)的幾率大幅度提高,已成為航天器設(shè)計(jì)中的重點(diǎn)研究對(duì)象[4]。
就目前的技術(shù)而言,傳統(tǒng)的星載計(jì)算機(jī)一般采用由專門定制的宇航級(jí)器件設(shè)計(jì)而成,宇航級(jí)的器件考慮了真空、輻射、原子氧等空間環(huán)境適應(yīng)性和長(zhǎng)期工作可靠性,但在性能上普遍落后于同期商用貨架產(chǎn)品(COTS,commercial off-the-shelf),而且價(jià)格成本遠(yuǎn)遠(yuǎn)高于后者。相比于高等級(jí)抗輻射加固宇航器件,COTS器件因性能優(yōu)異、成熟度高、采購成本低廉的特性在國(guó)際上已得到充分認(rèn)可[5]。但COTS器件在芯片設(shè)計(jì)時(shí)沒有進(jìn)行抗輻射加固設(shè)計(jì),應(yīng)用于空間任務(wù)易發(fā)生單粒子翻轉(zhuǎn),進(jìn)而對(duì)星上電子系統(tǒng)產(chǎn)生影響,需要進(jìn)行相應(yīng)的抗SEU容錯(cuò)[6]。
星上電子系統(tǒng)常用的抗單粒子加固措施有雙機(jī)切換、多模冗余、錯(cuò)誤檢測(cè)與糾正(EDAC,error detection and correction)檢驗(yàn)等方式。文獻(xiàn)[7]針對(duì)PowerPC460處理器核原有存儲(chǔ)機(jī)制以及糾檢錯(cuò)加固算法展開研究,實(shí)現(xiàn)了對(duì)PowerPC460兩種不同糾錯(cuò)能力的EDAC加固設(shè)計(jì);文獻(xiàn)[8]中采用軟硬件結(jié)合的方式,設(shè)計(jì)了一種低成本容錯(cuò)方法。針對(duì)星載計(jì)算機(jī)硬件采用雙機(jī)冷備方案,同時(shí)通過現(xiàn)場(chǎng)可編程門陣列(FPGA,field programmable gate array)仲裁處理器狀態(tài),在檢測(cè)到異常時(shí)進(jìn)行切機(jī);文獻(xiàn)[9]提出了一種三模冗余設(shè)計(jì),采用部組件級(jí)冗余,3個(gè)CPU進(jìn)行熱冗余備份,通過FPGA完成仲裁,信息通過高速串行外設(shè)接口(SPI,serial peripheral interface)實(shí)現(xiàn)信息交互;文獻(xiàn)[10]中在可重構(gòu)FPGA內(nèi)部設(shè)置獨(dú)立工作的三核處理器,通過反熔絲FPGA可對(duì)任一處理器進(jìn)行重構(gòu),構(gòu)成了可修復(fù)的三模冗余系統(tǒng)。
盡管硬件層面的加固方式可以有效提高電子系統(tǒng)的可靠性,但也帶來了額外的硬件開銷和資源占用問題。從軟件層面通過犧牲處理器部分性能來提高系統(tǒng)可靠性是另一種行之有效的方法。車輛、航空電子系統(tǒng)中常用鎖步技術(shù)來實(shí)現(xiàn)雙核處理器抗軟錯(cuò)誤軟件加固[11-14]。文獻(xiàn)[15]提出了一種擴(kuò)展的雙核鎖步方法,將執(zhí)行周期和鎖步周期分離,并引入了"寫歷史表"的概念,降低了系統(tǒng)性能開銷,但需要額外引入監(jiān)測(cè)模塊對(duì)兩核計(jì)算結(jié)果作判斷;文獻(xiàn)[16]發(fā)明了一種基于Zynq-7000的雙核ARM處理器抗軟錯(cuò)誤防護(hù)方法,結(jié)合基于復(fù)算域的雙核互檢方法和基于檢查點(diǎn)的回卷恢復(fù)方法,可在雙核處理器核間實(shí)現(xiàn)軟錯(cuò)誤的檢測(cè)和恢復(fù),但檢查點(diǎn)設(shè)置在每段程序末尾,回卷帶來的系統(tǒng)性能開銷過大。
本文基于雙核鎖步機(jī)制,提出了一種多核處理器核間互檢機(jī)制,在不引入額外硬件的前提下,將寫命令作為CPU間的同步點(diǎn),檢查點(diǎn)在寫同步點(diǎn)中選取,僅對(duì)系統(tǒng)關(guān)鍵數(shù)據(jù)的改動(dòng)做記錄,以較小的性能開銷實(shí)現(xiàn)了軟錯(cuò)誤檢測(cè)和系統(tǒng)恢復(fù)。最后采用軟件故障注入方式對(duì)加固前后的處理器抗單粒子翻轉(zhuǎn)能力進(jìn)行評(píng)估,驗(yàn)證了該機(jī)制抗軟錯(cuò)誤能力滿足應(yīng)用的需要。
鎖步技術(shù)是一種錯(cuò)誤檢測(cè)機(jī)制,常應(yīng)用于車輛、航空電子系統(tǒng)中,是雙核處理器抗軟錯(cuò)誤加固設(shè)計(jì)的重要技術(shù)手段。
雙核鎖步系統(tǒng)通常被稱為主從鎖步處理器。冗余處理器稱為從屬,在開機(jī)復(fù)位(POR,power on reset)時(shí)以與主處理器相同的狀態(tài)開始,運(yùn)行相同的指令,接收相同的輸入,并在沒有發(fā)生錯(cuò)誤時(shí)在每個(gè)時(shí)鐘周期中生成相同的輸出。如果主核和從核輸出結(jié)果不同,系統(tǒng)會(huì)自動(dòng)丟棄錯(cuò)誤并重新執(zhí)行指令。如果嘗試糾正錯(cuò)誤的次數(shù)超過了允許的閾值,則會(huì)觸發(fā)系統(tǒng)重置。雙核鎖步技術(shù)的原理如圖1所示。
圖1 雙核鎖步原理
檢查點(diǎn)(CP,check point)技術(shù)是在應(yīng)用程序的執(zhí)行過程中,每間隔一段時(shí)間將處理器當(dāng)前正確的狀態(tài)以檢查點(diǎn)文件的形式存儲(chǔ)到存儲(chǔ)器中;回卷恢復(fù)(RR,rollback recovery)技術(shù)是在檢測(cè)到系統(tǒng)發(fā)生故障后,由處理器從存儲(chǔ)器中讀取最近一次保存的檢查點(diǎn)文件,使處理器恢復(fù)至上一個(gè)正確狀態(tài)并重新執(zhí)行故障程序,避免在發(fā)生故障后,處理器重新開始執(zhí)行應(yīng)用程序,從而減少了因故障帶來的計(jì)算損失,有效地提高系統(tǒng)的可用性和容錯(cuò)能力,檢查點(diǎn)和回卷恢復(fù)技術(shù)的原理如圖2所示[17]。
圖2 檢查點(diǎn)和回卷恢復(fù)技術(shù)
本文提出的雙核互鎖加固設(shè)計(jì)是在PowerPC架構(gòu)中Qorlq系列的一款雙核處理器P2020上設(shè)計(jì)和實(shí)現(xiàn)的,該方法僅需要一些調(diào)整就可適用于其他系列處理器,是面向通用型多核處理器的抗軟錯(cuò)誤加固設(shè)計(jì)。硬件架構(gòu)如圖3所示。
圖3 雙核互鎖硬件架構(gòu)
兩核有各自的cache存儲(chǔ)互鎖機(jī)制產(chǎn)生的過程信息,通過共享的L2 cache及ddr3存儲(chǔ)器存儲(chǔ)程序及運(yùn)行過程中的寄存器、內(nèi)存數(shù)據(jù)。本文雙核互鎖機(jī)制基于寫操作進(jìn)行同步,每次寫同步都會(huì)進(jìn)行兩核交互,若彼此計(jì)算結(jié)果一致則繼續(xù)執(zhí)行程序,否則將系統(tǒng)狀態(tài)恢復(fù)到最近的檢查點(diǎn),重新執(zhí)行部分指令。
DDR3中設(shè)置兩級(jí)歷史表(WHT,write history table)文件,分別存儲(chǔ)第N個(gè)和第N-1個(gè)鎖步周期內(nèi)產(chǎn)生的寫命令,寫同步處更新歷史表0,檢查點(diǎn)處更新歷史表1。當(dāng)系統(tǒng)檢測(cè)到錯(cuò)誤時(shí),調(diào)用回卷中斷,從歷史表中獲取自上一個(gè)檢查點(diǎn)起被更改的數(shù)據(jù),并進(jìn)行恢復(fù)。
表1 CPU0寫同步應(yīng)用簽名計(jì)算過程
本文雙核互鎖設(shè)計(jì)基于Vxworks操作系統(tǒng)實(shí)現(xiàn)。Vxworks操作系統(tǒng)是美國(guó)風(fēng)河(WindRiver)公司于1983年開發(fā)的一種高性能、可裁剪的嵌入式實(shí)時(shí)操作系統(tǒng),具有較強(qiáng)的時(shí)性和可靠性,廣泛應(yīng)用在航空、航天、軍事等實(shí)時(shí)性要求極高的高精尖技術(shù)領(lǐng)域中[18-19]。
本文使用Vxworks操作系統(tǒng)搭建非對(duì)稱多處理(AMP,asymmetric multiprocessing)工作環(huán)境,在兩核中運(yùn)行相同的程序,通過消息隊(duì)列進(jìn)行兩核交互,使用PowerPC處理器自帶的核間中斷進(jìn)行檢查點(diǎn)和回卷恢復(fù)操作。
在雙核互鎖機(jī)制中,兩處理器運(yùn)行相同的應(yīng)用程序,基于寫指令進(jìn)行同步,每N個(gè)寫同步設(shè)置一個(gè)驗(yàn)證點(diǎn)(VP,verification point)。根據(jù)應(yīng)用程序功能和可靠性要求等因素,合理設(shè)置VP的數(shù)量和間隔。圖4詳細(xì)介紹了CPU0、CPU1的執(zhí)行概況及互鎖加固流程。
圖4 雙核互鎖加固流程
1)寫同步:CPU0、CPU1執(zhí)行相同的應(yīng)用程序,在寫命令處進(jìn)行同步,交換數(shù)據(jù);
2)一致性判斷:CPU寫同步后,將自身數(shù)據(jù)與來自另一處理器的數(shù)據(jù)進(jìn)行比較,比較結(jié)果有一致和不一致兩種;
3)WHT0:CPU0的一級(jí)寫歷史表,負(fù)責(zé)存儲(chǔ)第N個(gè)檢查點(diǎn)(最近的一次檢查點(diǎn))后CPU0對(duì)關(guān)鍵數(shù)據(jù)的寫命令;
4)WHT0*:CPU1的一級(jí)寫歷史表,負(fù)責(zé)存儲(chǔ)第N個(gè)檢查點(diǎn)(最近的一次檢查點(diǎn))后CPU1對(duì)關(guān)鍵數(shù)據(jù)的寫命令;
5)VP:檢查點(diǎn);
6)WHT1:二級(jí)寫歷史表,負(fù)責(zé)存儲(chǔ)第N-1個(gè)檢查點(diǎn)到第N個(gè)檢查點(diǎn)(最近的一次檢查點(diǎn))間處理器對(duì)關(guān)鍵數(shù)據(jù)的寫命令,在檢查點(diǎn)處更新。
數(shù)據(jù)初始化后,兩核并行執(zhí)行相同應(yīng)用程序,在執(zhí)行到寫命令時(shí)進(jìn)行同步。在寫同步處,兩核通過消息隊(duì)列進(jìn)行寫指令交互,然后比較二者的差異,如果對(duì)比結(jié)果一致,則認(rèn)為系統(tǒng)中沒有發(fā)生故障,更新WHT0、WHT0*;若對(duì)比結(jié)果不一致,則認(rèn)為當(dāng)前系統(tǒng)中發(fā)生故障,生成回卷恢復(fù)中斷信號(hào),CPU0、CPU1分別響應(yīng)中斷信號(hào),使系統(tǒng)恢復(fù)到上一個(gè)驗(yàn)證點(diǎn)狀態(tài)。
執(zhí)行到驗(yàn)證點(diǎn)時(shí),若CPU寫同步均判斷一致,則代表連續(xù)通過了N個(gè)同步點(diǎn),此時(shí)應(yīng)用程序暫停執(zhí)行,對(duì)比WHT0和WHT0*,若表決一致,兩核生成檢查點(diǎn)中斷信號(hào),調(diào)用中斷服務(wù)例程獲取WHT0內(nèi)容,覆蓋WHT1,并清空WHT0、WHT0*,然后繼續(xù)執(zhí)行應(yīng)用程序。同一時(shí)刻,DDR3存儲(chǔ)器中保留有恢復(fù)至系統(tǒng)第N個(gè)檢查點(diǎn)的WHT0和恢復(fù)至第N-1個(gè)檢查點(diǎn)的WHT1文件。
處理器調(diào)用回卷中斷程序,即寫同步判斷不一致時(shí),CPU0、CPU1從WHT0中獲取第N個(gè)檢查點(diǎn)后的所有寫命令,執(zhí)行回卷恢復(fù)操作,從第N個(gè)檢查點(diǎn)重新執(zhí)行該段程序,直到應(yīng)用程序執(zhí)行結(jié)束。
在本文中,寫操作范圍被定義為:
1)通用寄存器:GPR0-GPR31;
2)特殊寄存器:條件寄存器(CR,condition register)、鏈接寄存器(LR,link register)和計(jì)數(shù)寄存器(CTR,count register)等;
3)DDR3存儲(chǔ)器。
同時(shí),在設(shè)計(jì)時(shí)要考慮以下問題:
1)CPU0、CPU1連接到外部DDR3存儲(chǔ)器,并將應(yīng)用程序和檢查點(diǎn)文件存儲(chǔ)在不同地址中;
2)CPU0、CPU1共享DDR3內(nèi)存,對(duì)于不可同時(shí)訪問的資源需要設(shè)置互斥信號(hào)量等進(jìn)行保護(hù);
3)驗(yàn)證點(diǎn)在所有寫同步中選取,但二者并不等同,大部分寫同步不對(duì)WHT1作改動(dòng)。
在雙核互鎖機(jī)制中,由CPU本身擔(dān)任監(jiān)測(cè)模塊,任一CPU判斷兩核寫命令不一致,則認(rèn)為系統(tǒng)中出現(xiàn)了軟錯(cuò)誤,需要采取相應(yīng)措施。監(jiān)測(cè)機(jī)制基于Vxworks操作系統(tǒng)編寫,采用C語言進(jìn)行設(shè)計(jì),它負(fù)責(zé)驗(yàn)證CPU0和CPU1的一致性并通過輸出的中斷信號(hào)控制鎖步。監(jiān)測(cè)模塊通過比較CPU0、CPU1的寫命令來判斷二者是否一致,比較方式有以下兩種。
1)第一種方法:將CPU0、CPU1同步時(shí)的寫地址和寫數(shù)據(jù)分別發(fā)送給對(duì)方,然后二者對(duì)各自數(shù)據(jù)的每一位進(jìn)行比較;
2)第二種方法:在CPU0、CPU1寫同步的數(shù)據(jù)中應(yīng)用簽名,兩CPU僅對(duì)比簽名來判斷是否一致,簽名方式有數(shù)據(jù)總和、異或掩碼等。
在第一種方法中,不需要對(duì)應(yīng)用程序做額外修改,優(yōu)點(diǎn)是監(jiān)測(cè)覆蓋率較大,但會(huì)增大系統(tǒng)開銷。在第二種方法中,需要在同步前計(jì)算簽名,即在應(yīng)用程序上附加代碼,但降低了監(jiān)測(cè)模塊對(duì)比數(shù)據(jù)量,有效降低了系統(tǒng)消耗時(shí)間。
綜合考慮上述兩種方法的優(yōu)缺點(diǎn),采用第二種方法在CPU0、CPU1的寫同步數(shù)據(jù)中應(yīng)用簽名,而后再由CPU0、CPU1進(jìn)行對(duì)比,簽名的實(shí)現(xiàn)方式是:將寫地址和寫數(shù)據(jù)相與,然后計(jì)算總和中二進(jìn)制數(shù)據(jù)“1”的個(gè)數(shù),如表1所示。
以CPU0為例,寫同步流程如圖5所示。首先CPU0計(jì)算自身寫地址和寫數(shù)據(jù)的簽名,然后通過消息隊(duì)列將簽名發(fā)送至CPU1,等待來自CPU1的簽名,超時(shí)則觸發(fā)回卷。
圖5 雙核互鎖CPU0寫同步過程
接收到來自CPU1的簽名后,CPU0進(jìn)行二者對(duì)比,不一致觸發(fā)回卷。若一致性判斷通過,則記錄寫命令,繼續(xù)執(zhí)行程序。
3.2.1 檢查點(diǎn)技術(shù)
檢查點(diǎn)的設(shè)置基于CPU0、CPU1的寫同步,設(shè)置檢查點(diǎn)間隔為N,每連續(xù)N個(gè)寫同步檢驗(yàn)通過,就向CPU0、CPU1發(fā)送一個(gè)檢查點(diǎn)中斷請(qǐng)求,CPU0、CPU1響應(yīng)中斷信號(hào)后執(zhí)行檢查點(diǎn)中斷操作。處理器響應(yīng)中斷流程如圖6所示。
圖6 處理器響應(yīng)中斷流程
在檢查點(diǎn)執(zhí)行過程中,發(fā)送中斷請(qǐng)求,調(diào)用中斷服務(wù)函數(shù),初始化相關(guān)信號(hào)量和共享變量,獲取WHT0中數(shù)據(jù)形成檢查點(diǎn)文件,覆蓋歷史表1,并清空歷史表0。
3.2.2 回卷恢復(fù)技術(shù)
當(dāng)任何一次寫同步檢測(cè)到兩核寫命令不同時(shí),系統(tǒng)進(jìn)入回卷恢復(fù)操作。為了盡可能降低系統(tǒng)回卷引入的性能資源消耗,本文設(shè)置了四級(jí)回卷,如圖7所示。
圖7 回卷恢復(fù)流程
一級(jí)回卷中斷:一次表決不一致時(shí),回卷計(jì)數(shù)值加1,重新執(zhí)行該指令;
二級(jí)回卷中斷:連續(xù)兩次表決不一致,按照WHT0內(nèi)容修改DDR3中內(nèi)存數(shù)據(jù)段與CPU寄存器的值,使它們恢復(fù)到第N個(gè)檢查點(diǎn)狀態(tài),回卷計(jì)數(shù)值加1,其余信號(hào)清零,退出中斷;
三級(jí)回卷中斷:按照WHT0、WHT1內(nèi)容修改DDR3中內(nèi)存數(shù)據(jù)段與堆棧數(shù)據(jù)段的值,使它們恢復(fù)到第N-1個(gè)檢查點(diǎn)狀態(tài),回卷計(jì)數(shù)值加1,其余信號(hào)清零,退出中斷;
四級(jí)回卷中斷:中斷服務(wù)程序用DDR3中的備份數(shù)據(jù)覆蓋內(nèi)存數(shù)據(jù)段、CPU寄存器值,清空WHT0和WHT1,清零所有信號(hào),重新執(zhí)行該程序。
當(dāng)連續(xù)回卷計(jì)數(shù)為5時(shí),代表四級(jí)回卷恢復(fù)機(jī)制仍未解決當(dāng)前系統(tǒng)中出現(xiàn)的錯(cuò)誤,控制系統(tǒng)復(fù)位。此外,對(duì)雙核鎖步過程中的數(shù)據(jù)傳輸進(jìn)行信息冗余加固,提高系統(tǒng)可靠性。
雙核互鎖設(shè)計(jì)以較小的性能和資源代價(jià)來換取系統(tǒng)可靠性的提升,兩核互為檢查模塊,任一核認(rèn)為數(shù)據(jù)異常則默認(rèn)系統(tǒng)受到軟錯(cuò)誤影響,可見兩核的交互是雙核互鎖設(shè)計(jì)的關(guān)鍵,包括兩核交互、交互方式、交互頻率等,兩核交互設(shè)計(jì)的好壞決定了系統(tǒng)性能開銷大小。
3.3.1 交互內(nèi)容
交互內(nèi)容是指系統(tǒng)在檢查點(diǎn)操作時(shí)具體保存的某些狀態(tài)。交互內(nèi)容設(shè)置詳細(xì),那么通過回卷技術(shù)可以有效地使系統(tǒng)回到上一個(gè)檢查點(diǎn)時(shí)的正確狀態(tài),重新執(zhí)行程序段,得到正確的結(jié)果。相應(yīng)的,也會(huì)帶來系統(tǒng)檢查點(diǎn)操作和回卷操作時(shí)間的增加;上下文內(nèi)容缺失,會(huì)導(dǎo)致無法通過回卷技術(shù)得到正確的系統(tǒng)狀態(tài),進(jìn)而不能夠產(chǎn)生正確的計(jì)算結(jié)果,使整個(gè)鎖步機(jī)制失效。
在本文中,交互內(nèi)容包括寫命令對(duì)內(nèi)存數(shù)據(jù)段的改變以及CPU各寄存器值,考慮到DDR3存儲(chǔ)器受錯(cuò)誤檢查和糾正(ECC,error checking and correcting)技術(shù)加固,認(rèn)為內(nèi)存數(shù)據(jù)可靠性較高,并在每個(gè)程序開始執(zhí)行時(shí)進(jìn)行一次內(nèi)存數(shù)據(jù)段備份,程序運(yùn)行到檢查點(diǎn)時(shí)僅更新交互內(nèi)容不對(duì)內(nèi)存數(shù)據(jù)段進(jìn)行額外操作。
3.3.2 交互方式
通常情況下,鎖步系統(tǒng)通過一致性檢驗(yàn)進(jìn)行兩處理器的同步。目前主要的設(shè)置方式有寫操作同步和劃分程序塊同步兩種。前者是在處理器運(yùn)行到寫操作時(shí),通過等待的方式進(jìn)行同步,當(dāng)完成一致性檢驗(yàn)后,兩個(gè)處理器同時(shí)開始后續(xù)指令執(zhí)行;劃分程序塊是指將應(yīng)用程序劃分為多個(gè)塊,在兩塊之間設(shè)置驗(yàn)證點(diǎn),當(dāng)?shù)竭_(dá)驗(yàn)證點(diǎn)時(shí),通過等待的方式實(shí)現(xiàn)同步。
在本文中,考慮到劃分程序塊可能使錯(cuò)誤數(shù)據(jù)污染內(nèi)存,甚至對(duì)其他系統(tǒng)造成嚴(yán)重影響的情況,選擇基于寫操作同步的設(shè)置方式。但由于寫操作頻率在不同程序間的不確定性,本文選擇將檢查點(diǎn)設(shè)置與一致性檢驗(yàn)設(shè)置進(jìn)行區(qū)分,每次寫操作都進(jìn)行一致性檢驗(yàn),多次寫操作后進(jìn)行一次檢查點(diǎn)操作。同時(shí)設(shè)置四級(jí)回卷,針對(duì)潛在單粒子影響有一定的抵抗能力。
3.3.3 交互頻率
檢查點(diǎn)間隔的選取對(duì)系統(tǒng)性能影響很大。檢查點(diǎn)設(shè)置密集,意味著需要頻繁進(jìn)行檢查點(diǎn)操作,且易產(chǎn)生潛在單粒子影響無法消除的現(xiàn)象;檢查點(diǎn)設(shè)置稀疏,兩個(gè)處理器計(jì)算結(jié)果不一致,觸發(fā)回卷后需要重新執(zhí)行很長(zhǎng)一段程序。致使系統(tǒng)產(chǎn)生不必要的性能開銷。
在本文中,將檢查點(diǎn)設(shè)置與一致性檢驗(yàn)設(shè)置進(jìn)行區(qū)分,每次寫同步都進(jìn)行一致性檢驗(yàn),多次寫同步后進(jìn)行一次檢查點(diǎn)操作。通過寫請(qǐng)求先到等后到的方式進(jìn)行CPU0、CPU1的同步。檢查點(diǎn)數(shù)量和回卷數(shù)量設(shè)置不一致,當(dāng)寫同步一致性表決不通過時(shí),根據(jù)連續(xù)回卷次數(shù),產(chǎn)生相應(yīng)的回卷中斷信號(hào)。
軟件故障注入技術(shù)(SWIFI,software implemented fault injection)是在軟件層次來實(shí)現(xiàn)處理器的故障注入方法,該技術(shù)不需要任何硬件設(shè)備就可以實(shí)現(xiàn)故障的模擬注入,而是在處理器程序編譯或者運(yùn)行時(shí)動(dòng)態(tài)的修改執(zhí)行程序,或者人為設(shè)置寄存器值來改變處理器的運(yùn)行狀態(tài),這種注入方法不需要任何額外的開銷,屬于一種低成本的故障注入技術(shù),且故障注入位置靈活可控,具有相當(dāng)高的自由性。另一方面,通過腳本或者程序可以實(shí)現(xiàn)批量的故障注入操作,完成故障注入的全自動(dòng)化設(shè)置。
故障注入會(huì)因?qū)崿F(xiàn)方式的不同或者注入對(duì)象的不同而略有差異,但是基本設(shè)計(jì)思想是一致的[20],其原理如圖8所示。
圖8 故障注入原理圖
主要通過定時(shí)器超時(shí)、代碼插入和異常/陷阱等技術(shù)手段[21],對(duì)雙核鎖步機(jī)制及個(gè)容錯(cuò)技術(shù)進(jìn)行故障注入實(shí)驗(yàn),模擬系統(tǒng)中上至雙核處理器、下至處理器的寄存器、存儲(chǔ)單元等多個(gè)層次可能發(fā)生的故障,驗(yàn)證雙核互鎖機(jī)制是否能夠有效工作,提高系統(tǒng)可靠性。
為驗(yàn)證本文提出的雙核互鎖機(jī)制的抗軟錯(cuò)誤的有效性,在兩核寫同步、檢查點(diǎn)兩處注入故障來模擬系統(tǒng)中出現(xiàn)的單粒子翻轉(zhuǎn)現(xiàn)象,觀察CPU0、CPU1是否能正確識(shí)別軟錯(cuò)誤,并通過回卷恢復(fù)技術(shù)得出正確的結(jié)果。
4.2.1 同步點(diǎn)故障注入
在雙核互鎖機(jī)制中,CPU0和CPU1執(zhí)行相同的程序,在寫同步處進(jìn)行數(shù)據(jù)交互,從而進(jìn)行一致性判斷,產(chǎn)生相應(yīng)的檢查點(diǎn)中斷信號(hào)或回卷中斷信號(hào)。因此,為了模擬處理器在執(zhí)行任務(wù)過程中數(shù)據(jù)位翻轉(zhuǎn)的情況,可以通過故障注入的方法直接對(duì)處理器寫命令的計(jì)算簽名進(jìn)行修改,故障注入位置如圖9所示。
圖9 同步點(diǎn)故障注入
故障注入步驟如下:
1)設(shè)置信號(hào)量sig0,核1每次寫命令時(shí)sig0信號(hào)自增;
2)核1寫同步計(jì)算簽名后讀取sig0信號(hào),若大于預(yù)設(shè)值,則進(jìn)入故障注入函數(shù);
3)同步點(diǎn)故障注入函數(shù)獲取核1計(jì)算后的簽名,與0x55555555做與運(yùn)算,將運(yùn)算結(jié)果重新賦值給簽名;
4)核1得到故障注入后的簽名,通過消息隊(duì)列與核0交換數(shù)據(jù),兩核進(jìn)行一致性判斷。
連續(xù)修改一次到五次寫同步后形成的核0的計(jì)算簽名,每次翻轉(zhuǎn)簽名中的一個(gè)bit位,模擬執(zhí)行應(yīng)用過程中數(shù)據(jù)位發(fā)生翻轉(zhuǎn)的情況,致使系統(tǒng)產(chǎn)生回卷恢復(fù)中斷信號(hào),并觀察系統(tǒng)回卷級(jí)數(shù),后續(xù)是否能恢復(fù)到正確的系統(tǒng)狀態(tài),產(chǎn)生正確輸出。
4.2.2 檢查點(diǎn)文件故障注入
檢查點(diǎn)文件是雙核鎖步機(jī)制的核心,是系統(tǒng)能恢復(fù)到上一個(gè)正確狀態(tài)的依據(jù)。CPU執(zhí)行到檢查點(diǎn)處時(shí),分別從WHT0、WHT0*獲取數(shù)據(jù),生成檢查點(diǎn)文件。因此,為了模擬處理器在檢查點(diǎn)處數(shù)據(jù)位翻轉(zhuǎn)情況,可以在檢查點(diǎn)文件生成時(shí)進(jìn)行故障注入,故障注入位置如圖10所示。
圖10 檢查點(diǎn)文件故障注入
故障注入步驟如下:
1)設(shè)置信號(hào)量sig1,核1每次進(jìn)入檢查點(diǎn)時(shí)sig1信號(hào)自增;
2)核1在計(jì)算檢查點(diǎn)文件簽名前讀取sig1信號(hào),若大于預(yù)設(shè)值,則進(jìn)入檢查點(diǎn)故障注入函數(shù);
3)在檢查點(diǎn)故障注入函數(shù)中,手動(dòng)設(shè)置不同的故障注入位置,分別將檢查點(diǎn)文件中各寄存器的值與0x55555555做與運(yùn)算,運(yùn)算結(jié)果保存到檢查點(diǎn)文件中;
4)核1計(jì)算檢查點(diǎn)文件簽名,通過消息隊(duì)列與核0交換數(shù)據(jù),進(jìn)行一致性判斷。
通過修改CPU1生成檢查點(diǎn)文件中各寄存器值,翻轉(zhuǎn)其中的1 bit位,模擬從堆棧地址中讀取各寄存器值時(shí)發(fā)生數(shù)據(jù)位翻轉(zhuǎn)的情況,致使CPU0、CPU1在對(duì)比檢查點(diǎn)文件的簽名時(shí)產(chǎn)生回卷恢復(fù)中斷信號(hào),從而達(dá)到故障注入的目的。同樣通過連續(xù)注入一次到四次錯(cuò)誤,觀察系統(tǒng)回卷級(jí)數(shù),是否能恢復(fù)到正確的系統(tǒng)狀態(tài)。
根據(jù)4.2所述的軟件故障注入方案,分別進(jìn)行相應(yīng)的故障注入設(shè)計(jì),其實(shí)驗(yàn)結(jié)果如表2所示。
表2 雙核互鎖故障注入實(shí)驗(yàn)結(jié)果
其中,W1點(diǎn)是該應(yīng)用程序的非首個(gè)寫同步點(diǎn),W2點(diǎn)是程序的非首個(gè)檢查點(diǎn),r1是通用寄存器,CR是條件寄存器,LR是鏈接寄存器。
在寫同步計(jì)算簽名過程中,選取了W1、W2兩個(gè)程序運(yùn)行位置進(jìn)行了故障注入,每個(gè)注入點(diǎn)進(jìn)行了1次注入到連續(xù)5次注入實(shí)驗(yàn),雙核互檢機(jī)制可以穩(wěn)定檢查到兩核運(yùn)行過程中出現(xiàn)不一致,以及連續(xù)注入錯(cuò)誤的數(shù)量,準(zhǔn)確率為100%。根據(jù)連續(xù)出錯(cuò)次數(shù),雙核互檢機(jī)制選取不同的恢復(fù)策略:1次錯(cuò)誤時(shí)調(diào)用一級(jí)回卷中斷函數(shù),重新執(zhí)行指令;連續(xù)2次到3次錯(cuò)誤時(shí),系統(tǒng)調(diào)用二級(jí)、三級(jí)回卷中斷函數(shù),分別回卷至第N次、第N-1次檢查點(diǎn)的系統(tǒng)狀態(tài);連續(xù)4次出現(xiàn)錯(cuò)誤,系統(tǒng)調(diào)用四級(jí)回卷中斷,將應(yīng)用程序初始化時(shí)備份的程序段傳入內(nèi)存,重新執(zhí)行該程序;當(dāng)連續(xù)超過4次錯(cuò)誤時(shí),處理器復(fù)位。
在檢查點(diǎn)文件中,選取通用寄存器r1、特殊寄存器CR、LR三個(gè)故障注入點(diǎn),同樣各個(gè)注入點(diǎn)分別進(jìn)行1至5次手動(dòng)造錯(cuò)。多次實(shí)驗(yàn)下,CPU0、CPU1進(jìn)行一致性表決時(shí),均可得到“fail”的表決結(jié)果,并且根據(jù)連續(xù)回卷計(jì)數(shù)觸發(fā)正確的回卷中斷信號(hào)。連續(xù)注入故障不超過4次時(shí),CPU0、CPU1能通過回卷恢復(fù)能到正確的輸出結(jié)果,避免了類似的單粒子翻轉(zhuǎn)對(duì)系統(tǒng)可靠性的影響。當(dāng)連續(xù)回卷計(jì)數(shù)值達(dá)到5時(shí),認(rèn)為該系統(tǒng)已無法通過回卷恢復(fù)技術(shù)糾正錯(cuò)誤,進(jìn)行復(fù)位操作。
綜上,本文雙核互鎖機(jī)制可以在不額外增加硬件的前提下,犧牲小部分處理器性能,使系統(tǒng)具備較好的軟錯(cuò)誤檢測(cè)和系統(tǒng)恢復(fù)能力。
本文提出了一種面向通用處理器的雙核互檢抗軟錯(cuò)誤加固方法,該方法基于寫命令進(jìn)行CPU0、CPU1同步,結(jié)合檢查點(diǎn)、回卷恢復(fù)技術(shù)實(shí)現(xiàn)正確狀態(tài)的保存和恢復(fù)。通過簡(jiǎn)化檢查點(diǎn)存儲(chǔ)數(shù)據(jù)和四級(jí)回卷恢復(fù)機(jī)制,降低處理器資源開銷的同時(shí)有效保障了系統(tǒng)可靠性。
軟件層面改進(jìn)的雙核互檢算法面向通用型多核處理器,具有良好的可移植性。根據(jù)軟件故障注入仿真結(jié)果可知,雙核互檢方法可以100%檢測(cè)到程序運(yùn)行關(guān)鍵數(shù)據(jù)發(fā)生的翻轉(zhuǎn),并通過多級(jí)回卷技術(shù)得到正確的結(jié)果,具備較強(qiáng)的工程實(shí)用價(jià)值。雙核互檢加固方法對(duì)處理器性能影響的評(píng)估將是未來工作的重心。