









摘 要:國產(chǎn)申威處理器的不可屏蔽核間中斷(NMII)具有必須由某一核心主動(dòng)發(fā)起的特性,導(dǎo)致目前無法適用Linux通用的鎖死故障監(jiān)測算法,嚴(yán)重情況下將影響關(guān)鍵領(lǐng)域的數(shù)據(jù)處理。針對該問題設(shè)計(jì)適用于申威架構(gòu)的鎖死故障監(jiān)測與診斷系統(tǒng)。采用鏈?zhǔn)浇Y(jié)構(gòu)發(fā)送NMII請求,結(jié)合定時(shí)器事件和內(nèi)核線程進(jìn)行鎖死時(shí)間戳檢查,實(shí)現(xiàn)系統(tǒng)內(nèi)單核心的軟鎖死與硬鎖死監(jiān)測;基于故障容錯(cuò)機(jī)制,采用主從式結(jié)構(gòu)監(jiān)測所有核心狀態(tài),當(dāng)主核心發(fā)生故障時(shí),執(zhí)行容錯(cuò)措施并遷移主核心,實(shí)現(xiàn)系統(tǒng)內(nèi)多核心故障的鎖死監(jiān)測;設(shè)計(jì)基于NMII的任務(wù)模型,實(shí)現(xiàn)鎖死故障核心的診斷信息輸出并擴(kuò)展NMII應(yīng)用場景。測試結(jié)果表明,所提算法在低與高故障風(fēng)險(xiǎn)下均可實(shí)現(xiàn)鎖死故障的準(zhǔn)確檢出并作出實(shí)時(shí)診斷,滿足申威平臺(tái)鎖死故障監(jiān)測與診斷的可靠性與實(shí)時(shí)性要求。
關(guān)鍵詞:申威處理器; 不可屏蔽中斷; 操作系統(tǒng); 鎖死; 故障診斷; 看門狗
中圖分類號(hào):TP316.81文獻(xiàn)標(biāo)志碼: A文章編號(hào):1001-3695(2024)04-008-1015-07
doi:10.19734/j.issn.1001-3695.2023.08.0395
Lockup fault monitoring and diagnosis based on Sunway NMII
Gao Chen, He Sheng, Hang Xiaoqian
Abstract:The non maskable inter-processor interrupt(NMII) of the domestic Sunway processor must be initiated by one of the other cores.Therefore,it is difficult to apply the general lockup fault monitoring algorithm of Linux.In severe cases,it will jeopardize the data processing in critical areas.This paper designed a lockup fault monitoring and diagnosis system for Sunway architecture to solve the above problem.It used a chain structure to send NMII requests,and combined timer event and kernel thread to check the lockup time stamp,realized the soft lockup and hard lockup monitoring of single core in the system.Based on the fault tolerance mechanism,it adopted a master-slave structure to monitor the state of all cores.When the master core failed,the system implemented fault tolerance measures and migrated the master core,realized the multi-core lockup monitoring in the system.It designed a task model based on NMII,and realized the diagnostic information output of the fault cores,exten-ded the application scenarios of NMII.The test results show that the proposed algorithm can accurately detect the lockup fault and make real-time diagnosis under both low and high fault risk,and meet the reliability and real-time requirements of lockup fault monitoring and diagnosis of Sunway platform.
Key words:Sunway processor; non maskable interrupt(NMI); operating system; lockup; fault diagnosis; Watchdog
0 引言
在強(qiáng)調(diào)信息安全與產(chǎn)權(quán)自主的時(shí)代背景下,我國信息產(chǎn)業(yè)在安全性與可靠性中面臨著巨大的挑戰(zhàn)[1]。信息產(chǎn)業(yè)的發(fā)展離不開圍繞著操作系統(tǒng)與處理器相結(jié)合的軟硬件生態(tài)。其中操作系統(tǒng)是硬件平臺(tái)與軟件平臺(tái)之間的紐帶,負(fù)責(zé)底層物理硬件的資源管理并提供上層用戶的運(yùn)行環(huán)境與開發(fā)接口。處理器是硬件平臺(tái)的核心硬件單元,基于指令集架構(gòu)提供基本的運(yùn)算與操作支持[2]。因此在上述背景下,安全性與可靠性也已成為國產(chǎn)處理器及其配套操作系統(tǒng)的重要指標(biāo)。
我國的申威處理器搭載自研的SW-64指令集和微架構(gòu),知識(shí)產(chǎn)權(quán)自主、研發(fā)獨(dú)立可控,在超級(jí)計(jì)算機(jī)、桌面整機(jī)、服務(wù)器和嵌入式等平臺(tái)實(shí)現(xiàn)了多領(lǐng)域部署,其中包括最新的神威海洋之光和曾多次位居世界超算榜首的神威太湖之光[3~5]。為了構(gòu)建成熟廣泛且自主可控的軟硬件生態(tài),申威系列處理器圍繞Linux操作系統(tǒng)針對申威架構(gòu)進(jìn)行移植和研發(fā)。
為提高操作系統(tǒng)的安全性與可靠性,國內(nèi)外已有大量研究圍繞操作系統(tǒng)的鎖死故障監(jiān)測與診斷開展[6]。文獻(xiàn)[7]的研究表明,內(nèi)核中30%以上的錯(cuò)誤可能引發(fā)鎖死故障,此時(shí)系統(tǒng)中其他任務(wù)無法被正確執(zhí)行,可能引發(fā)重大安全問題。文獻(xiàn)[8]探究了Linux中各類故障的等效性,并研究了鎖死故障對系統(tǒng)造成的影響,為內(nèi)核故障的監(jiān)測提供依據(jù)。文獻(xiàn)[9]通過解析內(nèi)核調(diào)試信息的方式實(shí)現(xiàn)內(nèi)核故障診斷,隨后使用冗余進(jìn)程執(zhí)行故障容錯(cuò),但該方法依賴內(nèi)核報(bào)錯(cuò),無法實(shí)現(xiàn)故障的實(shí)時(shí)監(jiān)測。文獻(xiàn)[10]對比研究了X86、ARM、MIPS等架構(gòu)下的內(nèi)核故障機(jī)理及其故障注入方法,但無法直接應(yīng)用于申威架構(gòu)。為實(shí)現(xiàn)系統(tǒng)中的鎖死故障監(jiān)測,Linux引入了看門狗機(jī)制(Watchdog)以保障系統(tǒng)的穩(wěn)定可靠運(yùn)行[11,12]。文獻(xiàn)[13]設(shè)計(jì)通信接口為多個(gè)進(jìn)程配置多個(gè)軟硬件看門狗,提高了系統(tǒng)的安全性,但該方法存在一定程度的額外性能開銷。
目前有關(guān)操作系統(tǒng)鎖死故障的研究大多基于X86與ARM開展,國內(nèi)在該領(lǐng)域的研究起步較晚,有關(guān)自主架構(gòu)的鎖死故障研究較少。在故障監(jiān)測方面,由于申威架構(gòu)特有的不可屏蔽核間中斷(non maskable inter-processor interrupt,NMII)與其他架構(gòu)的不可屏蔽中斷(non maskable interrupt,NMI)有所不同,而Linux中的Watchdog須基于NMI實(shí)現(xiàn)[14,15],所以目前申威中暫未實(shí)現(xiàn)Watchdog功能;在鎖死診斷方面,由于當(dāng)核心鎖死時(shí)不能直接獲取其寄存器信息和棧信息,目前無法有效進(jìn)行鎖死故障的排查與診斷。
針對上述問題,為保障申威處理器及其配套操作系統(tǒng)的安全穩(wěn)定運(yùn)行,同時(shí)進(jìn)一步降低內(nèi)核開發(fā)的故障排查成本,本文首先對申威架構(gòu)下的鎖死監(jiān)測算法開展了研究,隨后擴(kuò)展了NMII應(yīng)用場景并實(shí)現(xiàn)了鎖死故障的快速診斷。
1 實(shí)驗(yàn)環(huán)境與需求分析
1.1 申威3231處理器
申威處理器采用的SW-64指令集屬于精簡指令集(reduced instruction set computing,RISC),擁有完全自主的知識(shí)產(chǎn)權(quán),穩(wěn)步推進(jìn)國家軟硬件生態(tài)國產(chǎn)化和信息數(shù)據(jù)安全[16]。申威系列處理器已發(fā)展至眾多系列,包括SW26010眾核處理器、SW831桌面處理器、SW3231服務(wù)器處理器等[17,18]。
本文的相關(guān)研究基于申威架構(gòu)開展,其研究成果可應(yīng)用于所有申威架構(gòu)通用處理器,包括SW26010、SW831、SW3231等。本文選取搭載SW3231處理器的申威威鑫3231服務(wù)器作為實(shí)驗(yàn)對象,該服務(wù)器由2個(gè)64位申威3231處理器組成,每個(gè)處理器集成32個(gè)Core3B核心,每個(gè)核心支持1個(gè)線程,最高主頻2.4 GHz。服務(wù)器使用神威BIOS和UOS操作系統(tǒng),內(nèi)核版本為Linux-4.19.180,支持雙路64核心并行計(jì)算,所有核心共享主存空間。申威3231處理器的簡要結(jié)構(gòu)如圖1所示。
處理器由32個(gè)申威Core3B核心組成,支持并行發(fā)射、亂序發(fā)射、亂序執(zhí)行和推測執(zhí)行。Core3B核心的一級(jí)指令Cache和數(shù)據(jù)Cache容量均為32 KB,采用四路組相聯(lián)結(jié)構(gòu);二級(jí)Cache容量為512 KB,采用八路組相聯(lián)結(jié)構(gòu)。處理器的三級(jí)Cache容量為64 MB,由16個(gè)4 MB分體組成,每個(gè)分體與兩個(gè)核心組成一個(gè)核組,采用CC-NUMA架構(gòu)實(shí)現(xiàn)Cache共享。
1.2 申威中斷處理
中斷是申威處理器的重要軟硬件機(jī)制,基于操作系統(tǒng)內(nèi)核和架構(gòu)特有的可編程固件接口(hardware mode code,HMcode)的支持,允許核心在運(yùn)行中及時(shí)對來自外部或內(nèi)部的異步事件進(jìn)行處理,并在處理完畢后返回被中斷的指令處繼續(xù)運(yùn)行。中斷可分為可屏蔽中斷和不可屏蔽中斷,其中不可屏蔽中斷的中斷請求無法被禁止,核心必須處理。Core3B中可按中斷來源將中斷分為三類:a)核間中斷,如普通核間中斷(inter-processor interrupt,II)和不可屏蔽核間中斷NMII;b)核內(nèi)中斷,如定時(shí)器中斷、事件計(jì)數(shù)中斷、機(jī)器檢查錯(cuò)中斷等;c)核外中斷,如設(shè)備中斷、故障中斷、復(fù)位中斷等。
Core3B中的核間中斷須由任一核心向另一核心發(fā)送。本文將發(fā)起核間中斷請求的核心稱為發(fā)起核,核間中斷請求的目標(biāo)核心稱為接收核。發(fā)送核間中斷請求時(shí),內(nèi)核與HMcode在發(fā)起核中將中斷類型寫入每核心私有的核間中斷請求寄存器。系統(tǒng)接口部件收到中斷請求后檢查中斷類型,若中斷類型為普通核間中斷,將中斷狀態(tài)寄存器置位,檢查接收核的中斷請求使能寄存器,使能檢查通過則進(jìn)入相應(yīng)HMcode入口進(jìn)行處理;若中斷類型為不可屏蔽核間中斷,將不可屏蔽核間中斷請求寄存器置位,直接進(jìn)入對應(yīng)HMcode入口進(jìn)行處理。進(jìn)入HMcode后,關(guān)閉中斷使能,待中斷響應(yīng)服務(wù)執(zhí)行完畢后,軟件重新打開中斷使能。因此在中斷關(guān)閉期間,類型為普通核間中斷的中斷請求將被屏蔽,而不可屏蔽核間中斷無須檢查中斷請求使能寄存器指示的中斷使能,其中斷請求無法被屏蔽。
1.3 鎖死故障與系統(tǒng)設(shè)計(jì)
操作系統(tǒng)內(nèi)核中,當(dāng)故障所在的核心在一定時(shí)間內(nèi)無法進(jìn)行進(jìn)程切換時(shí),稱該核心發(fā)生軟鎖死(soft lockup);當(dāng)故障所在的核心在一定時(shí)間內(nèi)無法進(jìn)行進(jìn)程切換且無法響應(yīng)中斷請求時(shí),稱該核心發(fā)生硬鎖死(hard lockup)[19~21]。在不支持搶占的內(nèi)核中,當(dāng)執(zhí)行流在內(nèi)核進(jìn)程、軟中斷、系統(tǒng)調(diào)用等狀態(tài)中發(fā)生死鎖、死循環(huán)等錯(cuò)誤時(shí),將導(dǎo)致該核心在無法被內(nèi)核調(diào)度,造成軟鎖死故障。當(dāng)上述錯(cuò)誤發(fā)生在關(guān)閉中斷的執(zhí)行流中,將導(dǎo)致該核心在無法被內(nèi)核調(diào)度的同時(shí)無法響應(yīng)后續(xù)的中斷請求,造成硬鎖死故障。核心發(fā)生軟鎖死故障或硬鎖死故障將導(dǎo)致系統(tǒng)中各任務(wù)無法得到正確執(zhí)行,關(guān)鍵數(shù)據(jù)無法得到及時(shí)處理,可能造成嚴(yán)重的安全問題[22~24]。
為解決上述問題,本文將系統(tǒng)中鎖死故障的處理分為監(jiān)測和診斷兩個(gè)階段。其中監(jiān)測階段主要監(jiān)測系統(tǒng)內(nèi)相關(guān)參數(shù),及時(shí)定位系統(tǒng)內(nèi)發(fā)生鎖死故障的核心及其故障類型。監(jiān)測到故障后,進(jìn)入診斷階段,通過故障診斷系統(tǒng)輸出關(guān)鍵診斷信息,為故障解決提供支持。
2 鎖死故障監(jiān)測算法的設(shè)計(jì)與實(shí)現(xiàn)
2.1 通用Watchdog算法與申威特性
為監(jiān)測核心的軟鎖死與硬鎖死故障,Linux引入了通用的Watchdog算法[25]。圖2所示為Watchdog算法原理。
Watchdog基于內(nèi)核線程(kernel thread,Kthread)、高精度定時(shí)器(high resolution timer,HRtimer)[23]和NMI實(shí)現(xiàn)。其中內(nèi)核線程由內(nèi)核啟動(dòng)并調(diào)度,運(yùn)行在內(nèi)核態(tài)下,協(xié)助內(nèi)核完成周期執(zhí)行、條件執(zhí)行等任務(wù)。高精度定時(shí)器基于每核心私有的時(shí)鐘事件設(shè)備,滿足高精度定時(shí)執(zhí)行和周期執(zhí)行的任務(wù)需求,可在中斷上下文中執(zhí)行回調(diào)任務(wù)。
Watchdog被加載后,內(nèi)核為每個(gè)核心創(chuàng)建1個(gè)內(nèi)核線程Kthread、高精度定時(shí)器事件HRtimer和不可屏蔽中斷事件NMI。Kthread一般處于睡眠狀態(tài),由HRtimer事件喚醒。被喚醒后,該線程將被內(nèi)核適時(shí)調(diào)度,并將當(dāng)前時(shí)間更新至核心私有的軟鎖死時(shí)間戳。HRtimer隨時(shí)間周期性觸發(fā),每當(dāng)觸發(fā)時(shí),將喚醒該核心上的Kthread、檢查軟鎖死時(shí)間戳是否超時(shí)、更新當(dāng)前時(shí)間至核心私有的硬鎖死時(shí)間戳。NMI事件由硬件周期觸發(fā),用于檢查硬鎖死時(shí)間戳是否超時(shí)。
Watchdog中可配置的時(shí)間周期T默認(rèn)為10 s,則軟鎖死超時(shí)閾值θs、硬鎖死超時(shí)閾值θh、NMI事件觸發(fā)周期TNMI、HRtimer觸發(fā)周期THR和Kthread觸發(fā)周期TK為
若T為10,則Kthread與HRtimer將分別每4 s更新一次軟鎖死時(shí)間戳和硬鎖死時(shí)間戳。由于HRtimer執(zhí)行在中斷上下文中,所以即使發(fā)生軟鎖死,核心仍可響應(yīng)中斷請求并正確執(zhí)行軟鎖死時(shí)間戳檢測、硬鎖死時(shí)間戳更新任務(wù)。 因此,當(dāng)HRtimer檢測到當(dāng)前時(shí)間與軟鎖死時(shí)間戳的時(shí)間差達(dá)到20 s,表明Kthread長期未被有效調(diào)度并執(zhí)行,則判定該核心發(fā)生軟鎖死。由于NMI不可屏蔽的特性,即使核心在中斷中鎖死,仍可響應(yīng)NMI事件的硬鎖死時(shí)間戳檢測任務(wù)。所以,當(dāng)NMI事件檢測到當(dāng)前時(shí)間與硬鎖死時(shí)間戳的時(shí)間差達(dá)到10 s時(shí),表明HRtimer長期未被正確觸發(fā)并執(zhí)行,則判定該核心發(fā)生硬鎖死。
在Watchdog中,內(nèi)核線程運(yùn)行于內(nèi)核進(jìn)程下,高精度定時(shí)器事件運(yùn)行于中斷上下文,NMI事件運(yùn)行于不可屏蔽中斷上下文,其執(zhí)行優(yōu)先級(jí)逐級(jí)遞增。因此,即使核心發(fā)生軟鎖死或硬鎖死,更高執(zhí)行優(yōu)先級(jí)的檢測任務(wù)總能被執(zhí)行,保障Watchdog監(jiān)測的有效性。
不同于其他架構(gòu)的NMI,申威架構(gòu)中不可屏蔽的中斷為NMII。而NMII屬于核間中斷,無法自行發(fā)起中斷請求,必須由任一核心主動(dòng)發(fā)送。因此,若申威基于原Watchdog的原理進(jìn)行算法實(shí)現(xiàn),則須有至少一個(gè)核心負(fù)責(zé)主動(dòng)定期向其他核心發(fā)送NMII請求,即執(zhí)行NMII發(fā)送任務(wù)。然而,無論NMII發(fā)送任務(wù)運(yùn)行在內(nèi)核進(jìn)程上下文或是中斷上下文中,當(dāng)發(fā)起核所在的核心發(fā)生軟鎖死或硬鎖死時(shí),內(nèi)核無法有效調(diào)度該核心上的各進(jìn)程,因此無法保障NMII發(fā)送任務(wù)的執(zhí)行,進(jìn)而導(dǎo)致通用Watchdog無法被直接遷移至申威并實(shí)現(xiàn)準(zhǔn)確的故障監(jiān)測。
針對申威不可屏蔽中斷的特殊性,本文基于架構(gòu)特性提出了兩種適用于申威的鎖死故障監(jiān)測算法。
2.2 基于鏈?zhǔn)絅MII的NMII-Watchdog算法
相比于通用Watchdog,申威的NMII無法自行周期激活,必須由其他正常工作的核心作為發(fā)起核向接收核定期發(fā)送。針對申威的架構(gòu)特點(diǎn),本節(jié)提出了一種基于單向循環(huán)鏈?zhǔn)絅MII的改進(jìn)Watchdog算法。算法按功能劃分為初始化步驟與更新/檢查步驟。其中初始化在系統(tǒng)啟動(dòng)時(shí)執(zhí)行,更新/檢查在系統(tǒng)啟動(dòng)完畢后執(zhí)行。圖3所示為NMII-Watchdog算法的簡要執(zhí)行流程。其中,參數(shù)THR、TK、θs、θh的選取與Watchdog一致。
算法1 NMII-Watchdog算法
輸入: HRtimer觸發(fā)周期THR;Kthread觸發(fā)周期TK;軟鎖死超時(shí)閾值θs;硬鎖死超時(shí)閾值θh。
輸出:故障核號(hào)Fk;故障類型FT。
for 系統(tǒng)內(nèi)各核心kn:
初始化HRtimer_1、HRtimer_2、Kthread,激活周期為THR、THR、TK
if Kthread 激活:
軟鎖死時(shí)間戳ts=當(dāng)前時(shí)間t
else if HRtimer_1 激活:
硬鎖死時(shí)間戳th=當(dāng)前時(shí)間t
if t-tsgt;θs:
return Fk=kn,F(xiàn)T= soft lockup
end if
else if HRtimer_2 激活:
向核心kn+1發(fā)送NMII
else if 收到NMII:
if t-thgt;θh:
return Fk=kn,F(xiàn)T=hard lockup
end if
end if
end for
a)初始化。對于多核系統(tǒng),NMII-Watchdog被加載后,內(nèi)核為每個(gè)核心初始化1個(gè)高精度定時(shí)器事件HRtimer_1、1個(gè)高精度定時(shí)器事件HRtimer_2和1個(gè)內(nèi)核線程Kthread。其中HRtimer_1和Kthread的功能與Watchdog相同,即前者執(zhí)行硬鎖死時(shí)間戳更新、軟鎖死時(shí)間戳檢查、Kthread喚醒任務(wù),后者執(zhí)行軟鎖死時(shí)間戳更新任務(wù)。
b)更新/檢查。不同于通用Watchdog中主動(dòng)周期觸發(fā)的NMI,NMII-Watchdog使用周期觸發(fā)的HRtimer_2發(fā)起NMII請求。若當(dāng)前核心的邏輯核號(hào)為kn,則在該核心的HRtimer_2中作為發(fā)起核向核心kn+1發(fā)送NMII請求。同時(shí),核心kn作為接收核,接收來自核心kn-1的HRtimer_2發(fā)送的NMII請求,并執(zhí)行硬鎖死時(shí)間戳檢查任務(wù)。當(dāng)核心kn發(fā)生軟鎖死時(shí),當(dāng)前核心上周期執(zhí)行的HRtimer_1可及時(shí)檢測到軟鎖死時(shí)間戳超時(shí)。當(dāng)核心kn發(fā)生硬鎖死時(shí),即使中斷已被關(guān)閉,由核心kn-1周期執(zhí)行的HRtimer_2發(fā)起的NMII將強(qiáng)制令核心kn進(jìn)行硬鎖死時(shí)間戳超時(shí)檢查。
2.3 基于容錯(cuò)的SW-Watchdog算法
不同于通用Watchdog、NMII-Watchdog基于NMI、NMII的最高執(zhí)行優(yōu)先級(jí)的實(shí)現(xiàn)原理,為解決不同架構(gòu)不可屏蔽中斷的差異導(dǎo)致的兼容性問題,本節(jié)提出了一種適用于申威處理器的基于故障容錯(cuò)機(jī)制的改進(jìn)Watchdog算法。算法按功能劃分為初始化步驟、從核更新/檢查步驟、主核更新/檢查步驟和故障容錯(cuò)步驟。其中初始化在系統(tǒng)啟動(dòng)時(shí)執(zhí)行,從核更新/檢查與主核更新/檢查在故障監(jiān)測時(shí)執(zhí)行,故障容錯(cuò)在主核發(fā)生鎖死故障時(shí)執(zhí)行。圖4所示為SW-Watchdog算法的簡要執(zhí)行流程。其中,參數(shù)THR、TK、T、θs、θh的選取與Watchdog一致,θc為監(jiān)測超時(shí)閾值,滿足
算法2 SW-Watchdog算法
輸入:主核心號(hào)km;HRtimer觸發(fā)周期THR;Kthread_u觸發(fā)周期TK;Kthread_c觸發(fā)周期T;軟鎖死超時(shí)閾值θs;硬鎖死超時(shí)閾值θh。
輸出:故障核號(hào)Fk;故障類型FT。
for 系統(tǒng)內(nèi)各核心kn:
初始化HRtimer、Kthread_u,激活周期為THR、TK
if kn= =km:
初始化Kthread_c,激活周期為T
綁定核心
end if
if HRtimer 激活:
硬鎖死時(shí)間戳th=當(dāng)前時(shí)間t
else if Kthread_u 激活:
軟鎖死時(shí)間戳ts=當(dāng)前時(shí)間t
if t-tcgt;θc:
km=kn
遷移主核心并初始化
end if
else if Kthread_c 激活:
監(jiān)測時(shí)間戳tc=當(dāng)前時(shí)間t
if t-thgt;θh:
return Fk=kn,F(xiàn)T= hard lockup
else if t-tsgt;θs:
return Fk=kn,F(xiàn)T= soft lockup
end if
end if
end for
a)初始化。相較于通用Watchdog與NMII-Watchdog的分布式時(shí)間戳檢查方式,SW-Watchdog不使用不可屏蔽中斷,采用主從式的時(shí)間戳檢查方式,選取一個(gè)核心作為主核心,其他核心作為從屬核心。SW-Watchdog被加載后,算法為每個(gè)核心 初始化一個(gè)高精度定時(shí)器事件HRtimer和一個(gè)內(nèi)核線程Kthread_u。在主核心kn上額外初始化一個(gè)內(nèi)核線程Kthread_c, 并與主核心kn綁定,不可被遷移至其他核心。同時(shí)初始化三組數(shù)據(jù)結(jié)構(gòu),前者用于記錄硬鎖死時(shí)間戳與軟鎖死時(shí)間戳,后者用于記錄監(jiān)測時(shí)間戳以檢查主核心的工作狀態(tài)。
b)從核更新/檢查。從屬核心中,HRtimer每THR秒周期性觸發(fā),其響應(yīng)函數(shù)運(yùn)行在中斷上下文中,按邏輯核號(hào)將當(dāng)前時(shí)間更新至硬鎖死時(shí)間戳的對應(yīng)核心位置。Kthread_u運(yùn)行于內(nèi)核進(jìn)程中,按自身邏輯核號(hào)將當(dāng)前時(shí)間更新至軟鎖死時(shí)間戳的對應(yīng)核心位置,并檢查監(jiān)測時(shí)間戳,完成后自行調(diào)用msleep函數(shù)睡眠TK秒。當(dāng)檢查到當(dāng)前時(shí)間與監(jiān)測時(shí)間戳最近時(shí)間的差值達(dá)到容錯(cuò)閾值θF時(shí),進(jìn)行故障容錯(cuò)。
c)主核更新/檢查。主核心除周期更新軟硬鎖死時(shí)間戳外,還將周期執(zhí)行Kthread_c檢查硬鎖死時(shí)間戳與軟鎖死時(shí)間戳上對應(yīng)所有從屬核心的數(shù)據(jù),當(dāng)檢測到當(dāng)前時(shí)間與某一核心上時(shí)間戳最近時(shí)間的差值大于硬鎖死閾值θh或軟鎖死故障閾值θs時(shí),則對該核心進(jìn)行硬鎖死或軟鎖死報(bào)錯(cuò)。完成時(shí)間戳檢查后,Kthread_c將當(dāng)前時(shí)間更新至監(jiān)測時(shí)間戳并自行調(diào)用msleep函數(shù)睡眠T秒。
d)故障容錯(cuò)。SW-Watchdog使用主核心檢查所有從屬核心的軟鎖死時(shí)間戳與硬鎖死時(shí)間戳,并增加監(jiān)測時(shí)間戳用于記錄Kthread_c的運(yùn)行狀態(tài)。對于Kthread_c綁定于核心kn的SW-Watchdog,當(dāng)任意數(shù)量的軟鎖死故障或硬鎖死故障發(fā)生于邏輯核號(hào)非kn的核心上時(shí),核心kn上的Kthread_c通過檢查軟鎖死時(shí)間戳與硬鎖死時(shí)間戳對應(yīng)核號(hào)位置的數(shù)據(jù),均能準(zhǔn)確判定各核心的鎖死故障狀態(tài)。而當(dāng)軟鎖死故障或硬鎖死故障發(fā)生于主核心kn時(shí),Kthread_c不能被及時(shí)調(diào)度,將無法及時(shí)更新監(jiān)測時(shí)間戳并導(dǎo)致鎖死故障檢測失效。但由于從屬核心的Kthread_u兼顧檢查監(jiān)測時(shí)間戳的功能,所以除極端故障即系統(tǒng)所有核心都發(fā)生鎖死外,總存在一個(gè)從屬核心記為km,其Kthread_u檢測到監(jiān)測時(shí)間戳發(fā)生超時(shí),觸發(fā)故障容錯(cuò)。當(dāng)觸發(fā)故障容錯(cuò)時(shí),SW-Watchdog將在觸發(fā)故障容錯(cuò)的核心km上 創(chuàng)建一個(gè)新的Kthread_c替代故障的主核心kn上的Kthread_c, 成為新的主核心并繼續(xù)進(jìn)行軟硬鎖死故障監(jiān)測。
2.4 對比分析
針對申威架構(gòu)特殊的不可屏蔽核間中斷,所提出的NMII-Watchdog與SW-Watchdog算法均可實(shí)現(xiàn)申威架構(gòu)下的軟鎖死與硬鎖死故障的實(shí)時(shí)監(jiān)測。分析NMII-Watchdog算法,當(dāng)核心kn發(fā)生硬鎖死故障后,由核心kn-1發(fā)起的NMII可令核心kn執(zhí)行硬鎖死故障檢查。但核心kn的硬鎖死將使其無法繼續(xù)執(zhí)行HRtimer_2,即無法向核心kn+1發(fā)送NMII請求。此后若核心kn+1發(fā)生硬鎖死,則該故障無法被有效檢測,因此在多核心故障下存在故障漏判風(fēng)險(xiǎn)。SW-Watchdog引入容錯(cuò)機(jī)制,解決了極端故障下的監(jiān)測失效問題。
綜上所述,由于系統(tǒng)中兩個(gè)邏輯核號(hào)相鄰的核心同時(shí)發(fā)生鎖死故障的幾率較小,所提NMII-Watchdog算法結(jié)構(gòu)簡潔,適用于申威架構(gòu)低故障風(fēng)險(xiǎn)的應(yīng)用場景;所提SW-Watchdog算法引入容錯(cuò)機(jī)制,適用于高故障風(fēng)險(xiǎn)應(yīng)用場景,滿足了極端狀況下多核心多故障的監(jiān)測要求。
3 鎖死故障診斷系統(tǒng)的設(shè)計(jì)與應(yīng)用
3.1 診斷系統(tǒng)分析
當(dāng)系統(tǒng)中的軟鎖死或硬鎖死被故障監(jiān)測算法定位后,為進(jìn)一步處理故障,協(xié)助故障的排查與解決,還需對故障進(jìn)行診斷并嘗試從故障中恢復(fù)。目前已有眾多研究針對內(nèi)核故障診斷與恢復(fù)展開,文獻(xiàn)[26]使用線程中止與異常調(diào)用等方式恢復(fù)鎖死故障,文獻(xiàn)[27]在嵌入式操作系統(tǒng)中引入多系統(tǒng)進(jìn)行故障診斷,但相關(guān)研究在故障環(huán)境與類型上仍存在一定局限性。因此本文采用輸出故障信息的方式,著重保留故障現(xiàn)場以便于調(diào)試開發(fā)人員進(jìn)行故障排除[28]。
發(fā)生鎖死故障時(shí),可通過打印寄存器數(shù)據(jù)與棧回溯信息等方法跟蹤內(nèi)核的運(yùn)行狀態(tài)。然而對于不支持搶占的內(nèi)核,當(dāng)核心發(fā)生軟鎖死時(shí),無法進(jìn)行進(jìn)程調(diào)度,發(fā)生硬鎖死時(shí),無法進(jìn)行普通中斷響應(yīng)。不可屏蔽中斷具有最高的執(zhí)行權(quán)限,在核心發(fā)生軟鎖死與硬鎖死時(shí)仍能保證響應(yīng)。因此,當(dāng)監(jiān)測到鎖死故障后,可通過NMII實(shí)現(xiàn)故障信息的輸出。
不可屏蔽中斷在Watchdog、嚴(yán)重故障響應(yīng)、perf等場景中有眾多應(yīng)用。而不同于主流的X86架構(gòu)和ARM架構(gòu)的NMI,申威架構(gòu)的NMII屬于核間中斷,只能由某一核心發(fā)送至另一核心,其適用場景與執(zhí)行邏輯與Linux中的通用實(shí)現(xiàn)有所不同。目前申威中NMII僅應(yīng)用于熱復(fù)位,為實(shí)現(xiàn)故障診斷,需要首先開發(fā)NMII任務(wù)模型,擴(kuò)展NMII應(yīng)用場景并向內(nèi)核提供調(diào)用接口。該應(yīng)用模型應(yīng)允許內(nèi)核中任一發(fā)起核向接收核發(fā)送NMII中斷請求,并令其在NMII中斷響應(yīng)函數(shù)中執(zhí)行指定NMII任務(wù),同時(shí)該模型可維護(hù)所有NMII任務(wù),保障在多核系統(tǒng)下的正確有序執(zhí)行,最后基于NMII任務(wù)模型執(zhí)行故障核心的診斷任務(wù)。
3.2 NMII任務(wù)模型設(shè)計(jì)
Core3B核心按特權(quán)等級(jí)設(shè)置了用戶模式、內(nèi)核模式、虛擬模式與硬件模式,其中硬件模式擁有最高級(jí)權(quán)限,允許使用特權(quán)指令直接對底層硬件進(jìn)行控制,可直接操作系統(tǒng)寄存器,允許不進(jìn)行虛實(shí)地址代換直接訪問物理內(nèi)存地址。HMcode是申威架構(gòu)特有的固件接口,由匯編語言編寫,運(yùn)行在硬件模式中,可在不修改硬件設(shè)計(jì)的情況下更改和拓展硬件功能。
申威架構(gòu)中,當(dāng)核心接收到NMII請求時(shí), 將直接進(jìn)入HMcode中的熱復(fù)位特權(quán)程序進(jìn)行處理,并在HMcode中完成寄存器使能、數(shù)據(jù)初始化等任務(wù)。為進(jìn)一步拓展NMII的應(yīng)用場景,本節(jié)對HMcode與內(nèi)核中NMII的處理流程進(jìn)行改進(jìn),將NMII任務(wù)劃分為HMcode任務(wù)和內(nèi)核任務(wù), 并設(shè)計(jì)了相應(yīng)的執(zhí)行路徑與任務(wù)管理系統(tǒng)。圖5所示為NMII任務(wù)模型的結(jié)構(gòu)。
其中,HMcode任務(wù)指發(fā)起核令接收核在不可屏蔽中斷上下文中執(zhí)行硬件特權(quán)程序,其任務(wù)在HMcode中完成;內(nèi)核任務(wù)指發(fā)起核令接收核在不可屏蔽中斷上下文中執(zhí)行內(nèi)核程序,其任務(wù)在內(nèi)核模式中完成。內(nèi)核中調(diào)用特權(quán)接口mask和特權(quán)接口send可將特權(quán)等級(jí)從內(nèi)核模式切換至硬件模式并跳轉(zhuǎn)至HMCode中對應(yīng)的特權(quán)程序。發(fā)起核發(fā)送NMII任務(wù)請求前,根據(jù)所需任務(wù)類型執(zhí)行不同流程。若任務(wù)類型為HMcode任務(wù),則跳轉(zhuǎn)特權(quán)程序mask并將任務(wù)標(biāo)記L記為HMcode任務(wù);否則將任務(wù)標(biāo)記L記為內(nèi)核任務(wù),隨后將任務(wù)函數(shù)和目標(biāo)核號(hào)添加至NMII任務(wù)鏈表尾部。
完成準(zhǔn)備工作后,內(nèi)核通過調(diào)用特權(quán)程序send,向目標(biāo)核心發(fā)送NMII請求。系統(tǒng)接口部件接收NMII中斷請求后,接收核進(jìn)入HMcode的特權(quán)程序NMII_H并檢查任務(wù)標(biāo)記L。若為內(nèi)核任務(wù),則關(guān)閉普通中斷使能,并跳轉(zhuǎn)至內(nèi)核執(zhí)行內(nèi)核任務(wù);若為HMcode任務(wù),則直接執(zhí)行對應(yīng)任務(wù)。對于內(nèi)核任務(wù),跳轉(zhuǎn)回內(nèi)核后進(jìn)入處理函數(shù)NMII_K,遍歷NMII內(nèi)核任務(wù)鏈表,查找匹配自身核號(hào)的節(jié)點(diǎn)并分別執(zhí)行其任務(wù)函數(shù)。執(zhí)行完畢后,從任務(wù)鏈表中刪除已執(zhí)行的鏈表節(jié)點(diǎn)并恢復(fù)中斷狀態(tài),退出不可屏蔽中斷上下文。此外,為避免任務(wù)鏈表在插入、讀取、刪除節(jié)點(diǎn)過程中發(fā)生的同步錯(cuò)誤,使用自旋鎖對任務(wù)鏈表進(jìn)行臨界區(qū)保護(hù)。
NMII任務(wù)模型可使多個(gè)發(fā)起核同時(shí)向多個(gè)接收核發(fā)送多個(gè)不同類型的NMII任務(wù),接收核在最高執(zhí)行優(yōu)先級(jí)的不可屏蔽中斷上下文中執(zhí)行任務(wù),為后續(xù)HMcode任務(wù)和內(nèi)核任務(wù)提供擴(kuò)展接口。
3.3 鎖死故障診斷應(yīng)用
基于NMII任務(wù)模型,可實(shí)現(xiàn)鎖死故障檢出后的故障診斷。核心kn發(fā)生軟鎖死或硬鎖死故障并被檢出后,監(jiān)測算法調(diào)用NMII任務(wù)模型的內(nèi)核任務(wù)流程實(shí)現(xiàn)故障診斷,將故障核號(hào)與內(nèi)核任務(wù)標(biāo)記發(fā)送至特權(quán)程序mask并向故障核心發(fā)送NMII請求。隨后核心kn進(jìn)入不可屏蔽中斷上下文,查詢到內(nèi)核任務(wù)鏈表的診斷任務(wù)函數(shù)并執(zhí)行。則此時(shí)發(fā)生鎖死故障的核心kn將暫時(shí)離開鎖死環(huán)境并執(zhí)行診斷任務(wù)。
診斷任務(wù)函數(shù)中,打印當(dāng)前進(jìn)程結(jié)構(gòu)體中保存的各類寄存器數(shù)據(jù),并使用棧回溯打印該核心的函數(shù)調(diào)用棧。通過上述打印信息,開發(fā)人員可在核心發(fā)生鎖死時(shí)獲取核心與進(jìn)程狀態(tài)并進(jìn)行故障診斷。
4 實(shí)驗(yàn)驗(yàn)證
為驗(yàn)證所提NMII-Watchdog、SW-Watchdog和NMII任務(wù)模型在申威平臺(tái)下發(fā)生軟硬鎖死故障時(shí)的監(jiān)測與診斷效果,本章以SW3231服務(wù)器為研究對象開展實(shí)驗(yàn)驗(yàn)證。
4.1 NMII-Watchdog單軟鎖死驗(yàn)證
單軟鎖死故障驗(yàn)證實(shí)驗(yàn)中,為驗(yàn)證算法在軟鎖死故障下的監(jiān)測流程和監(jiān)測準(zhǔn)確性,選取核心k4于第14 s注入軟鎖死故障,設(shè)置變量定期采樣以記錄算法中相應(yīng)模塊的狀態(tài),如故障注入、Kthread、HRtimer_1、HRtimer_2、3號(hào)核心HRtimer_2、NMII和檢測結(jié)果。實(shí)驗(yàn)中參數(shù)T取值為10,參數(shù)THR、TK、θs、θh的取值滿足式(1)(2)。各模塊狀態(tài)隨時(shí)間變化如圖6所示。
由于各模塊狀態(tài)變化迅速,為突出展示其關(guān)鍵狀態(tài),對部分時(shí)間軸進(jìn)行局部放大。14 s前,核心k4中各模塊正常運(yùn)行,其中Kthread每4 s從未激活狀態(tài)激活并更新軟鎖死時(shí)間戳,HRtimer_1每4 s從未激活狀態(tài)激活并更新硬鎖死時(shí)間戳、檢查軟鎖死時(shí)間戳是否超時(shí),核心k3與k4的HRtimer_2每10 s從未激活狀態(tài)激活并向核心k4與k5 發(fā)送NMII請求,核心k4每10 s響應(yīng)NMII請求并檢查硬鎖死時(shí)間戳,NMII-Watchdog算法指示核心k4無故障。14 s時(shí),令核心k4執(zhí)行系統(tǒng)調(diào)用并進(jìn)入死循環(huán),模擬軟鎖死故障。14 s后,Kthread無法激活并執(zhí)行軟鎖死時(shí)間戳更新,而基于時(shí)鐘中斷觸發(fā)的HRtimer_1正常激活并檢查軟鎖死時(shí)間戳。32 s時(shí),HRtimer_1監(jiān)測到軟鎖死時(shí)間戳滯止時(shí)長超過預(yù)設(shè)20 s軟鎖死超時(shí)閾值,則報(bào)核心k4發(fā)生軟鎖死故障。
實(shí)驗(yàn)結(jié)果表明,NMII-Watchdog可準(zhǔn)確監(jiān)測系統(tǒng)內(nèi)單個(gè)核心發(fā)生的軟鎖死故障,滿足軟鎖死故障的監(jiān)測需求。
4.2 NMII-Watchdog單硬鎖死驗(yàn)證
單硬鎖死故障驗(yàn)證實(shí)驗(yàn)中,為驗(yàn)證算法在硬鎖死故障下的監(jiān)測流程和監(jiān)測準(zhǔn)確性,選取核心k4于第14 s注入硬鎖死故 障。實(shí)驗(yàn)中參數(shù)T取值為10,參數(shù)THR、TK、θs、θh的取值滿足式(1)(2)。 各模塊狀態(tài)隨時(shí)間變化如圖7所示。
14 s前,核心k4中各模塊正常運(yùn)行。14 s時(shí),令核心k4關(guān)閉普通中斷使能并進(jìn)入死循環(huán),模擬硬鎖死故障。14 s后,由于核心k4無法響應(yīng)中斷且不可被搶占,Kthread、HRtimer_1和HRtimer_2均無法被激活執(zhí)行,其軟鎖死時(shí)間戳和硬鎖死時(shí)間戳無法更新。由于未發(fā)生故障的核心k3的HRtimer_2不受故障影響,其發(fā)往核心k4的NMII請求不可被屏蔽,所以核心k4仍可定期進(jìn)行硬鎖死時(shí)間戳的檢查。30 s時(shí),NMII監(jiān)測到硬鎖死時(shí)間戳滯止時(shí)長超過預(yù)設(shè)10 s硬鎖死超時(shí)閾值,則報(bào)核心k4發(fā)生硬鎖死故障。實(shí)驗(yàn)結(jié)果表明,NMII-Watchdog可準(zhǔn)確監(jiān)測系統(tǒng)內(nèi)單個(gè)核心發(fā)生的硬鎖死故障,滿足硬鎖死故障的監(jiān)測需求。
4.3 SW-Watchdog主從鎖死驗(yàn)證
主從鎖死驗(yàn)證實(shí)驗(yàn)中,為驗(yàn)證基于容錯(cuò)機(jī)制的SW-Watchdog在主核心與從屬核心均發(fā)生故障時(shí)的算法監(jiān)測流程和監(jiān)測準(zhǔn)確性,向主核心和從屬核心分別注入故障。選取核心k0作為主核心,于第6 s與第22 s分別向從屬核心k2與主核心k0注入硬鎖死故障。實(shí)驗(yàn)中參數(shù)T取值為10,參數(shù)THR、TK、θs、θh、θc的取值滿足式(1)(2)(3)。各模塊狀態(tài)隨時(shí)間變化如圖8所示。
6 s前,主核心k0和從屬核心k1、k2均正常運(yùn)行。6 s時(shí),向核心k2注入硬鎖死故障,此后其Kthread_u和HRtimer停止更新。20 s時(shí),主核心k0的Kthread_c監(jiān)測到核心k2的硬鎖死故障。 22 s時(shí),向主核心注入硬鎖死故障,此后其Kthread_u和HRtimer停止更新,其Kthread_c無法繼續(xù)監(jiān)測從屬核心的故障狀態(tài),同時(shí)無法繼續(xù)更新監(jiān)測時(shí)間戳。此時(shí),由于主核心發(fā)生故障,其對核心k2的監(jiān)測結(jié)果置信度降低。由于從屬核心的Kthread_u完成自身時(shí)間戳更新后還將檢測主核心的Kthread_c運(yùn)行狀態(tài),所以核心k1于32 s時(shí)監(jiān)測到監(jiān)測時(shí)間戳滯止時(shí)長大于10 s并觸發(fā)故障容錯(cuò),在核心k1上創(chuàng)建新的Kthread_c并成為主核心。32 s時(shí),新的主核心k1立即激活并檢查各核心軟硬鎖死時(shí)間戳,則報(bào)核心k0與k2發(fā)生硬鎖死故障。
實(shí)驗(yàn)結(jié)果表明,當(dāng)故障發(fā)生在主核心時(shí),基于容錯(cuò)機(jī)制的SW-Watchdog通過主核心遷移,滿足了多核心故障下故障監(jiān)測的可靠性要求。
4.4 SW-Watchdog多核鎖死驗(yàn)證
多核鎖死驗(yàn)證實(shí)驗(yàn)中,為驗(yàn)證SW-Watchdog算法在高風(fēng)險(xiǎn)系統(tǒng)下對極端多發(fā)故障的監(jiān)測準(zhǔn)確性,向多個(gè)從屬核心按時(shí)序注入故障,以確保系統(tǒng)各時(shí)間點(diǎn)存在不同數(shù)量的核心同時(shí)發(fā)生故障。主核心k0正常運(yùn)行,將軟鎖死故障與硬鎖死故障隨機(jī)按式(4)(5)依次向各從屬核心注入并解除。
Ik=100ln(k)+rand[0,20] (4)
Rk=Ik+C+rand[0,20] (5)
其中:k表示核心號(hào),k∈[1,63]且k∈N+;Ik與Rk表示第k個(gè)核心注入故障與解除故障的時(shí)間;C為故障最低持續(xù)時(shí)間,此處取70 s;rand[0,20]表示0~20的隨機(jī)浮點(diǎn)數(shù)。當(dāng)故障被算法檢出后,立即調(diào)用NMII任務(wù)模型進(jìn)行故障所在核心的調(diào)用棧與寄存器信息打印,故障信息成功輸出后記該核心故障被檢出。圖9所示為各核心故障的監(jiān)測結(jié)果。
圖9中,三角形與圓形標(biāo)志分別表示軟鎖死故障與硬鎖死故障,虛線表示從故障注入到故障被算法檢出的時(shí)間段,實(shí)線表示從故障被檢出到故障被主動(dòng)解除的時(shí)間段。實(shí)驗(yàn)結(jié)果表明,在不同的時(shí)間點(diǎn),系統(tǒng)內(nèi)存在故障的核心數(shù)不同,SW-Watchdog對各從屬核心的故障均能準(zhǔn)確檢出,且NMII任務(wù)模型在核心處于軟、硬鎖死故障時(shí)仍可迅速進(jìn)行診斷信息的輸出。
4.5 任務(wù)模型驗(yàn)證
當(dāng)鎖死故障被監(jiān)測算法檢出后,為便于故障診斷和故障修復(fù),可使用NMII任務(wù)模型令故障核心執(zhí)行高優(yōu)先級(jí)NMII任務(wù)并輸出寄存器數(shù)據(jù)和函數(shù)調(diào)用棧。本節(jié)針對NMII任務(wù)模型設(shè)計(jì)多發(fā)送、多接收、鏈?zhǔn)绞瞻l(fā)驗(yàn)證實(shí)驗(yàn),驗(yàn)證其在復(fù)雜任務(wù)環(huán)境下的可靠性和實(shí)時(shí)性。
多發(fā)送實(shí)驗(yàn)中,計(jì)時(shí)并令隨機(jī)1個(gè)核心向其他63個(gè)核心發(fā)送NMII任務(wù)請求,當(dāng)所有接收核完成NMII空任務(wù)后結(jié)束計(jì)時(shí)。多接收實(shí)驗(yàn)中,隨機(jī)選取1個(gè)核心作為接收核,計(jì)時(shí)并令其他63個(gè)核心向該核心發(fā)送NMII任務(wù)請求,當(dāng)該核心完成所有NMII空任務(wù)后結(jié)束計(jì)時(shí)。鏈?zhǔn)绞瞻l(fā)任務(wù)中,計(jì)時(shí)并令某核心向下一相鄰核心發(fā)送NMII任務(wù)請求,任務(wù)內(nèi)容為繼續(xù)向下一相鄰核心發(fā)送相同NMII任務(wù)請求,當(dāng)所有核心完成任務(wù)后結(jié)束計(jì)時(shí)。實(shí)驗(yàn)分內(nèi)核任務(wù)和HMcode任務(wù)進(jìn)行,每組實(shí)驗(yàn)重復(fù)50次,為保證計(jì)時(shí)精度使用RTC指令讀取時(shí)鐘源數(shù)值,換算得平局耗時(shí)如表1所示。
上述實(shí)驗(yàn)中,鏈?zhǔn)绞瞻l(fā)實(shí)驗(yàn)驗(yàn)證了NMII任務(wù)模型的執(zhí)行正確性,多發(fā)送與多接收實(shí)驗(yàn)驗(yàn)證了在大量任務(wù)堆積時(shí)的執(zhí)行穩(wěn)定性。此外,由于HMcode任務(wù)運(yùn)行在硬件模式下,且無須跳轉(zhuǎn)回內(nèi)核,其執(zhí)行速度遠(yuǎn)快于內(nèi)核任務(wù),但單核平均耗時(shí)均不超過1.85 ns,滿足實(shí)時(shí)性要求。
5 結(jié)束語
本文研究了申威架構(gòu)下不可屏蔽中斷的特性,針對該特性提出了適用于申威架構(gòu)的鎖死故障監(jiān)測算法,并設(shè)計(jì)了基于NMII的故障診斷系統(tǒng)。實(shí)驗(yàn)表明,所提監(jiān)測算法可在任意數(shù)量的核心發(fā)生軟硬鎖死故障時(shí)準(zhǔn)確檢出故障,滿足可靠性需求。所提故障診斷系統(tǒng)實(shí)現(xiàn)故障核心關(guān)鍵信息輸出的同時(shí)擴(kuò)展了NMII的應(yīng)用場景,為申威架構(gòu)NMII的發(fā)展提供參考。后續(xù)可針對監(jiān)測算法的觸發(fā)周期、閾值等參數(shù)進(jìn)行調(diào)優(yōu),降低性能開銷的同時(shí)獲取更及時(shí)的鎖死監(jiān)測效果,同時(shí)基于診斷結(jié)果進(jìn)一步研究系統(tǒng)故障后的自適應(yīng)恢復(fù)。
參考文獻(xiàn):
[1]袁世偉.面向處理器的安全技術(shù)研究[D].成都:電子科技大學(xué),2022:19-36. (Yuan Shiwei.Research on security technology for processor[D].Chengdu:University of Electronic Science and Technology of China,2022:19-36.)
[2]張海龍.基于服務(wù)器系統(tǒng)高可靠性的結(jié)構(gòu)優(yōu)化研究[D].天津:天津大學(xué),2019:18-27. (Zhang Hailong.Research on mechanical optimization based on high reliability of server system[D].Tianjin:Tianjin University,2019:18-27.)
[3]吳琦,倪裕芳,黃小猛.基于“神威 ·太湖之光”的區(qū)域海洋模式并行優(yōu)化[J].計(jì)算機(jī)研究與發(fā)展,2019, 56 (7):1556-1566. (Wu Qi,Ni Yufang,Huang Xiaomeng.Regional ocean model parallel optimization in “Sunway TaihuLight”[J]. Journal of Computer Research and Development ,2019, 56 (7):1556-1566.)
[4]許志耿.面向國產(chǎn)SW26010眾核處理器的科學(xué)計(jì)算核心深度優(yōu)化研究[D].上海:上海交通大學(xué),2018:16-39. (Xu Zhigeng.Optimizations of scientific kernels on SW26010 many-core processor[D].Shanghai:Shanghai Jiao Tong University,2018:16-39.)
[5]Fu Haohuan,Liao Junfeng,Yang Jinzhe,et al.The Sunway TaihuLight supercomputer:system and applications[J]. Science China Information Sciences ,2016, 59 :1-16.
[6]Chen Bo,Yang Zhenkun,Lei Li,et al.Automated bug detection and replay for cots Linux kernel modules with concolic execution[C]//Proc of the 27th International Conference on Software Analysis,Evolution and Reengineering.Piscataway,NJ:IEEE Press,2020:172-183.
[7]Chou A,Yang Junfeng,Chelf B,et al.An empirical study of operating systems errors[C]//Proc of the 18th ACM Symposium on Operating Systems Principles.New York:ACM Press,2001:73-88.
[8]Jarboui T,Arlat J,Crouzet Y,et al.Analysis of the effects of real and injected software faults:Linux as a case study[C]//Proc of Pacific Rim International Symposium on Dependable Computing.Piscataway,NJ:IEEE Press,2002:51-58.
[9]趙得潤.Linux內(nèi)核級(jí)多進(jìn)程任務(wù)容錯(cuò)技術(shù)研究[D].哈爾濱:哈爾濱工程大學(xué),2018:31-44. (Zhao Derun.Research on Linux kernel-level fault-tolerant technology supporting multi-process[D].Harbin:Harbin Engineering University,2018:31-44.)
[10]劉子桐.面向國產(chǎn)處理器的設(shè)備驅(qū)動(dòng)故障注入方法的研究與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2023:20-27. (Liu Zitong.Fault injection method for device drivers based on homemade processors[D].Beijing:Beijing Jiaotong University,2023:20-27.)
[11]Cao F L V.Evaluating Linux kernel crash dumping mechanisms[J]. Linux Symposium ,2006, 1 :153-162.
[12]Palix N,Thomas G,Saha S,et al.Faults in Linux 2.6[J]. ACM Trans on Computer Systems ,2014, 32 (2):1-40.
[13]Zlatanov N.Architecture and operation of a watchdog timer[EB/OL].(2014-07).http://dx.doi.org/10.13140/RG.2.1.1149.1605.
[14]Meskes M.Watchdog:the Linux software daemon[J]. Linux Journal ,1997, 1997 (34es):9-es.
[15]Abaffy J,Kraj c ˇ ovi c ˇT.Software support for multiple hardware watchdog timers in the Linux OS[C]//Proc of International Conference on Applied Electronics.Piscataway,NJ:IEEE Press,2010:1-3.
[16]李少迪,吳俊敏,張屹,等.申威26010處理器上協(xié)程間通信的研究[J].計(jì)算機(jī)應(yīng)用與軟件,2022, 39 (12):137-143. (Li Shaodi,Wu Junmin,Zhang Qi,et al.Research on communication between coroutines on SW26010 processor[J]. Computer Applications and Software ,2022, 39 (12):137-143.)
[17]胡向東,柯希明,尹飛,等.高性能眾核處理器申威26010[J].計(jì)算機(jī)研究與發(fā)展,202 58 (6):1155-1165. (Hu Xiangdong,Ke Ximing,Yin Fei,et al.Shenwei-26010:a high-performance many-core processor[J]. Journal of Computer Research and Development ,202 58 (6):1155-1165.)
[18]陶小涵,龐建民,高偉,等.基于SW26010處理器的FT程序的性能優(yōu)化[J].計(jì)算機(jī)科學(xué),2019, 46 (4):321-328. (Tao Xiaohan,Pang Jianmin,Gao Wei,et al.Performance optimization of FT program based on SW26010 processor[J]. Computer Science ,2019, 46 (4):321-328.)
[19]李善榮,孫超,韓嬌,等.一種基于申威平臺(tái)的全國產(chǎn)化計(jì)算機(jī)設(shè)計(jì)方法[J].工業(yè)控制計(jì)算機(jī),2023, 36 (1):17-19. (Li Shanrong,Sun Chao,Han Jiao,et al.A platform-based design method for domestic computer[J]. Industrial Control Computer ,2023, 36 (1):17-19.)
[20]Jarboui T,Arlat J,Crouzet Y,et al.Experimental analysis of the errors induced into Linux by three fault injection techniques[C]//Proc of International Conference on Dependable Systems and Networks.Pisca-taway,NJ:IEEE Press,2002:331-336.
[21]Gu Weining,Kalbarczyk Z,Ravishankar,et al.Characterization of Linux kernel behavior under errors[C]//Proc of International Confe-rence on Dependable Systems and Networks.Piscataway,NJ:IEEE Press,2003:459-468.
[22]Alharthi K A,Jhumka A,Di Sheng,et al.Clairvoyant:a log-based transformer-decoder for failure prediction in large-scale systems[C]//Proc of the 36th ACM International Conference on Supercomputing.New York:ACM Press,2022:1-14.
[23]Ott K,Mahapatra R.Hardware performance counter enhanced watchdog for embedded software security[C]//Proc of the 24th Internatio-nal Symposium on Quality Electronic Design.Piscataway,NJ:IEEE Press,2023:1-8.
[24]Fetzer C.Perfect failure detection in timed asynchronous systems[J]. IEEE Trans on Computers ,2003, 52 (2):99-112.
[25]Gleixner T,Niehaus D.Hrtimers and beyond:transforming the Linux time subsystems[C]//Proc of Linux Symposium.2006:333-346.
[26]David F M,Carlyle J C,Campbell R H.Exploring recovery from ope-rating system lockups[C]//Proc of USENIX Annual Technical Conference on Proc of USENIX Annual Technical Conference.[S.l.]:USENIX Association,2007:1-6.
[27]Katori T,Sun L,Nilsson D K,et al.Building a self-h(huán)ealing embedded system in a multi-OS environment[C]//Proc of ACM Symposium on Applied Computing.New York:ACM Press,2009:293-298.
[28]Chuah E,Jhumka A,Alt S,et al.Using resource use data and system logs for HPC system error propagation and recovery diagnosis[C]//Proc of the 17th IEEE International Symposium on Parallel and Distributed Processing with Applications.Piscataway,NJ:IEEE Press,2019:458-467.
收稿日期:2023-08-21;修回日期:2023-10-11 基金項(xiàng)目:科技部重點(diǎn)支持項(xiàng)目(GG20210701)
作者簡介:郜晨(1997—),男,江蘇鎮(zhèn)江人,助理工程師,碩士,主要研究方向?yàn)橛?jì)算機(jī)體系結(jié)構(gòu)、計(jì)算機(jī)操作系統(tǒng);何升(1987—),男(通信作者),福建漳州人,工程師,碩士,主要研究方向?yàn)橛?jì)算機(jī)體系結(jié)構(gòu)、計(jì)算機(jī)操作系統(tǒng)(hesheng@wxiat.com);杭驍騫(1990—),男,江蘇無錫人,助理工程師,主要研究方向?yàn)橛?jì)算機(jī)體系結(jié)構(gòu)、計(jì)算機(jī)操作系統(tǒng).