高吉普,徐長(zhǎng)寶,辛明勇,陳軍健,劉德宏
(1.貴州電網(wǎng)有限責(zé)任公司電力科學(xué)研究院,貴州貴陽(yáng) 550002;2.南方電網(wǎng)數(shù)字電網(wǎng)研究院有限公司,廣東 廣州 510663)
多核微處理器在數(shù)據(jù)并行處理方面,有很大的優(yōu)勢(shì)。該處理器通過(guò)加載和存儲(chǔ)指令對(duì)共享主存進(jìn)行訪問(wèn),能夠保持完整的地址空間,且每個(gè)微處理器都具備獨(dú)立專(zhuān)用緩存模塊。由于IC 設(shè)計(jì)技術(shù)和制造技術(shù)的不斷發(fā)展,芯片集成設(shè)計(jì)變得越來(lái)越復(fù)雜,晶片體積越來(lái)越小是造成芯片制造缺陷的主要原因,而故障檢測(cè)僅僅局限于對(duì)芯片進(jìn)行篩選,無(wú)法及時(shí)發(fā)現(xiàn)故障問(wèn)題,為此,各大學(xué)者提出了故障診斷技術(shù)。文獻(xiàn)[1]提出了BC 網(wǎng)絡(luò)的g-超條件診斷度技術(shù),在每一個(gè)由非故障節(jié)點(diǎn)組成的分支中至少有g(shù)+1 個(gè)頂點(diǎn)時(shí),系統(tǒng)能一次性識(shí)別出故障節(jié)點(diǎn)數(shù)量,從而能夠?qū)Ξ悩?gòu)環(huán)境下系統(tǒng)互連網(wǎng)的自故障診斷進(jìn)行精確測(cè)量;文獻(xiàn)[2]提出了強(qiáng)魯棒性開(kāi)路故障診斷策略,通過(guò)構(gòu)造一種非對(duì)稱(chēng)負(fù)載和非平衡空載系統(tǒng),結(jié)合改進(jìn)歸一化平均電流派克矢量模型,實(shí)現(xiàn)故障診斷。然而這兩種技術(shù)受到多核微處理器系統(tǒng)并發(fā)不確定性影響,導(dǎo)致即使利用同一個(gè)測(cè)試用例進(jìn)行多次測(cè)試,也無(wú)法保證所有測(cè)試用例都能得到充分測(cè)試。因此,提出了一種基于B/S結(jié)構(gòu)的多核微處理器實(shí)速故障診斷技術(shù)。
多核微處理器是目前應(yīng)用最多的處理器,其包括兩個(gè)以上完整的計(jì)算機(jī)引擎,通過(guò)控制總線的全部指令信號(hào),能夠支持多核微處理器同時(shí)在線運(yùn)行。通過(guò)分析多核微處理器故障診斷原理,設(shè)計(jì)詳細(xì)的診斷流程。
使用的一種基于B/S 結(jié)構(gòu)的多核微處理器,其結(jié)構(gòu)是在信息技術(shù)不斷進(jìn)步和發(fā)展的背景下產(chǎn)生的,彌補(bǔ)了傳統(tǒng)C/S 體系結(jié)構(gòu)的缺陷。
基于B/S結(jié)構(gòu)的多核微處理器結(jié)構(gòu)圖如圖1所示。

圖1 基于B/S結(jié)構(gòu)的多核微處理器
由圖1 可知,該處理器主要是由表示層、業(yè)務(wù)層和數(shù)據(jù)層組成的,通過(guò)任務(wù)分配完成網(wǎng)絡(luò)分析與挖掘[3]。該過(guò)程涉及到大量的數(shù)學(xué)運(yùn)算,為提高多核微處理器性能,瀏覽器端負(fù)責(zé)內(nèi)容的顯示和交互,服務(wù)器端負(fù)責(zé)復(fù)雜的數(shù)據(jù)計(jì)算和邏輯處理[4]。采用B/S 結(jié)構(gòu)的多核微處理器實(shí)現(xiàn)了“分而治之”的策略,線程化應(yīng)用程序通過(guò)分解模式,在給定時(shí)間使用多個(gè)執(zhí)行內(nèi)核執(zhí)行更多的任務(wù)[5]。
1.2.1 返回地址堆棧
由于呼叫指令CALL 與IP 內(nèi)容修改指令是一一對(duì)應(yīng)的,所以返回地址堆棧是一個(gè)硬件堆棧,主要用于存儲(chǔ)返回的目標(biāo)地址信息。因此,當(dāng)呼叫指令CALL 出現(xiàn)時(shí),多核微處理器的處理程序?qū)?huì)發(fā)出下一條呼叫指令,并將返回的目標(biāo)地址信息壓入返回地址堆棧頂部[6]。當(dāng)IP 內(nèi)容修改指令出現(xiàn)時(shí),多核微處理器會(huì)自動(dòng)彈出返回地址堆棧頂部的目標(biāo)地址,如果返回的目標(biāo)地址無(wú)法在所有返回地址中找到,那么說(shuō)明多核微處理器的處理過(guò)程失敗[7]。
1.2.2 面向返回編程
面向返回編程可以對(duì)ret-to-lib 攻擊進(jìn)行診斷,其中攻擊者重用整個(gè)LIBC 庫(kù),在故障診斷過(guò)程中,從存儲(chǔ)器(目標(biāo)程序或者共享庫(kù))中找到一段代碼,然后構(gòu)建一個(gè)有效的插件把一系列Gadget 連接起來(lái)[8]。
圖2 顯示了基于B/S 結(jié)構(gòu)的多核微處理器的故障診斷原理。

圖2 基于B/S結(jié)構(gòu)的多核微處理器的故障診斷原理
由圖2 可知,在Return 指令中,可以使用庫(kù)文件中的Gadget 鏈接執(zhí)行故障排除操作[9]。
死鎖場(chǎng)景是在開(kāi)發(fā)多核微處理器時(shí),驗(yàn)證芯片是否能夠正常工作時(shí)出現(xiàn)的場(chǎng)景,由共享響應(yīng)通道引起的死鎖場(chǎng)景如圖3 所示。

圖3 由共享響應(yīng)通道引起的死鎖場(chǎng)景
由圖3 可知,E1-E8 表示路由器,H1-H8 表示跟蹤節(jié)點(diǎn),R1-R8 表示推送節(jié)點(diǎn),S1-S8 表示請(qǐng)求節(jié)點(diǎn)。WBD 技術(shù)的應(yīng)用改善了替代運(yùn)營(yíng)協(xié)議的性能,由于數(shù)據(jù)需要返回到WBD 事務(wù),因此必須為傳輸數(shù)據(jù)分配通道[10]。
在執(zhí)行期間,寫(xiě)回請(qǐng)求由跟蹤節(jié)點(diǎn)到請(qǐng)求節(jié)點(diǎn)的響應(yīng)通道發(fā)送。例如,H2 通過(guò)響應(yīng)通道將回寫(xiě)請(qǐng)求發(fā)送到S2[11]。因?yàn)槎嗪宋⑻幚砥髦С终?qǐng)求節(jié)點(diǎn),所以直接將數(shù)據(jù)推給請(qǐng)求節(jié)點(diǎn),因此,該過(guò)程存在通道共享:舉例來(lái)說(shuō),S4 將讀取的響應(yīng)包推到S6,而且還使用R2 到R3 響應(yīng)通道[12]。在共享信道時(shí)會(huì)出現(xiàn)死鎖可能,因此,在芯片模擬仿真過(guò)程中的確出現(xiàn)了死鎖。據(jù)此,設(shè)計(jì)了死鎖故障診斷步驟如下:
步驟一:通過(guò)動(dòng)態(tài)配置的緩存一致性協(xié)議,可以應(yīng)用到不同的多核微處理器中。根據(jù)多核微處理器結(jié)構(gòu),對(duì)功能和性能的要求進(jìn)行功能容錯(cuò)和性能調(diào)整。在可配置協(xié)議的基礎(chǔ)上,引入了微操作機(jī)制的分布式目錄控制器[13-14]。圖4 展示了分布式目錄控制器的總體結(jié)構(gòu)。

圖4 分布式目錄控制器的總體結(jié)構(gòu)
步驟二:目錄是通過(guò)硬件工作后生成的,優(yōu)點(diǎn)是速度快,缺點(diǎn)是很難修改。引入微操作機(jī)制后,通過(guò)配置一致性協(xié)議,能夠通過(guò)改變相關(guān)程序來(lái)改變信號(hào)傳輸路徑。
步驟三:死鎖通過(guò)監(jiān)視跟蹤節(jié)點(diǎn)和請(qǐng)求節(jié)點(diǎn)之間的讀寫(xiě)事務(wù)等待時(shí)間,判斷是否發(fā)生了死鎖。
步驟四:為了提高性能,跟蹤節(jié)點(diǎn)和請(qǐng)求節(jié)點(diǎn)的默認(rèn)協(xié)議為WBD 協(xié)議。若等待時(shí)間超過(guò)某一閾值,跟蹤節(jié)點(diǎn)和請(qǐng)求節(jié)點(diǎn)之間的鏈路就會(huì)阻塞,還可能出現(xiàn)死鎖。
步驟五:分布式目錄控制器進(jìn)入調(diào)試模式,將寫(xiě)回?cái)?shù)據(jù)(WBD)轉(zhuǎn)換為請(qǐng)求協(xié)議,啟動(dòng)重傳機(jī)制后,逐步清除阻塞鏈。在釋放死鎖之后,它會(huì)恢復(fù)到正常模式和WBD,以高性能形式繼續(xù)診斷[15]。
對(duì)于鏈路故障問(wèn)題,需通過(guò)測(cè)試能夠確定多核微處理器是否存在故障問(wèn)題[16]。
以單輸出響應(yīng)為例,可將電路輸入響應(yīng)序列集合描述為:
式中,xn表示輸入響應(yīng)序列。
結(jié)合輸出向量函數(shù),構(gòu)建電路輸出響應(yīng)表達(dá)式:
式中,f(·)表示輸出函數(shù)。
在輸入激勵(lì)作用下,有:
式中,an表示激勵(lì)序列,λ表示激勵(lì)參數(shù)。
對(duì)于故障,存在:
當(dāng)計(jì)算結(jié)果符合式(4)時(shí),表明鏈路有故障,通過(guò)測(cè)試代碼λ可以發(fā)現(xiàn)故障。
為了驗(yàn)證提出的基于B/S 結(jié)構(gòu)的多核微處理器實(shí)速故障診斷技術(shù)研究合理性,進(jìn)行實(shí)驗(yàn)驗(yàn)證分析。
在32 位Ubuntu14.04 操作系統(tǒng)上建立了ROP 攻擊的實(shí)驗(yàn)平臺(tái),以驗(yàn)證面向返回轉(zhuǎn)換的ROP 攻擊的效果。
3.1.1 參數(shù)設(shè)置
不同ROP 攻擊的診斷周期決定了診斷的準(zhǔn)確性,這取決于其鏈長(zhǎng)。因此,小型鏈長(zhǎng)一般為10~15 hops。設(shè)置Gadget 鏈的長(zhǎng)度為15 hops。為減少誤報(bào)和漏報(bào)現(xiàn)象,實(shí)現(xiàn)最佳診斷效果,將診斷周期設(shè)為6 s 或9 s,并進(jìn)行對(duì)比實(shí)驗(yàn)。
3.1.2 ROP真實(shí)攻擊診斷
在Ubuntu 下,用ROP 漏洞選擇四個(gè)小程序,要求一串較長(zhǎng)的輸入?yún)?shù),該程序需要GCC 編譯為二進(jìn)制可以執(zhí)行的文件。四個(gè)程序漏洞說(shuō)明如表1所示。

表1 程序漏洞說(shuō)明
用ROPgadget 構(gòu)建了30 條Gadget 鏈,這30個(gè)攻擊腳本是從數(shù)據(jù)庫(kù)中選擇的。每一條Gadget 鏈的長(zhǎng)度均超過(guò)15 hops,總共進(jìn)行了30 次攻擊。
為了評(píng)估所研究方法在真實(shí)操作中的總體性能,使用UnixBench5.1.3 對(duì)多核微處理器性能進(jìn)行評(píng)估。在ROP 攻擊下,選用UnixBench 對(duì)基于B/S 結(jié)構(gòu)的多核微處理器進(jìn)行整體性評(píng)估。將性能測(cè)試工具應(yīng)用到Linux 系統(tǒng)中,測(cè)試的項(xiàng)目包括字符串處理、浮點(diǎn)運(yùn)算、調(diào)用、管道吞吐、管道上下文交互、函數(shù)吞吐、文件讀寫(xiě)、腳本測(cè)試。對(duì)于這些項(xiàng)目,使用多核微處理器的處理時(shí)間如表2 所示。

表2 測(cè)試項(xiàng)目處理時(shí)間對(duì)比分析
由表2 可知,在ROP 攻擊下,診斷項(xiàng)目處理速率均在可接受范圍之內(nèi)。
基于此,分別使用g-超條件診斷度技術(shù)、強(qiáng)魯棒性開(kāi)路故障診斷策略和基于B/S 結(jié)構(gòu)的多核微處理器實(shí)速故障診斷技術(shù),對(duì)比分析項(xiàng)目處理速率,對(duì)比結(jié)果如圖5 所示。

圖5 三種診斷技術(shù)項(xiàng)目處理時(shí)間對(duì)比
由圖5 可知,使用g-超條件診斷度技術(shù)處理除了字符串項(xiàng)目外,其余均超過(guò)標(biāo)準(zhǔn)時(shí)間,其中處理調(diào)用項(xiàng)目所耗費(fèi)時(shí)間最長(zhǎng)為83 s;使用強(qiáng)魯棒性開(kāi)路故障診斷策略處理除了字符串項(xiàng)目外,其余均超過(guò)標(biāo)準(zhǔn)時(shí)間,其中處理調(diào)用項(xiàng)目所耗費(fèi)時(shí)間最長(zhǎng)為79 s;使用基于B/S 結(jié)構(gòu)的多核微處理器實(shí)速故障診斷技術(shù),除了管道吞吐項(xiàng)目比標(biāo)準(zhǔn)時(shí)間長(zhǎng)1 s 外,其余所有項(xiàng)目處理時(shí)間均在標(biāo)準(zhǔn)時(shí)間范圍內(nèi)。
在B/S 結(jié)構(gòu)的基礎(chǔ)上,提出了多核微處理器實(shí)時(shí)故障診斷技術(shù),通過(guò)一致性協(xié)議能夠顯著提高不同架構(gòu)下系統(tǒng)的靈活性。由實(shí)驗(yàn)結(jié)果可知,該技術(shù)具有良好的診斷效果。然而,由于不同的配置不能形成統(tǒng)一的緩存一致性協(xié)議,導(dǎo)致了極大的死鎖風(fēng)險(xiǎn)。為此,需要設(shè)置一致性緩存協(xié)議,以達(dá)到靈活配置,以?xún)?yōu)化更大的空間,保證一致性協(xié)議的使用更加合理。