999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

軟件實現的軟差錯檢測和恢復技術

2019-05-23 10:44:40饒盛原
電腦知識與技術 2019年5期

饒盛原

摘要:軟差錯被認為是現代微處理器可靠性所面臨的最主要的挑戰,由于軟件實現的軟差錯檢測和恢復技術不需要額外的物理資源并能適用于現在已存在的處理器,因此受到了眾多科研人員的關注。該文按照不同的實現層級對現有的一些經典技術方案進行了收集,簡要介紹其原理與實驗效果,并在文末對不同層級技術的優缺點進行了比較分析。

關鍵詞: 軟差錯; 軟件容錯; 檢測和恢復

中圖分類號:TP3 文獻標識碼:A 文章編號:1009-3044(2019)04-0080-04

1概述

隨著芯片密度的不斷增加,現代微處理器更容易受到各種干擾而產生軟差錯,雖然沒有造成硬件的永久性故障,但是軟差錯的發生很有可能會影響到程序的正常運行。針對軟差錯的檢測和恢復研究已開展了很多年,也產生了很多可用的技術,這些技術按照實現方式可以分為硬件實現的和軟件實現的兩類。由于硬件實現的技術需要對硬件的設計進行修改或增加特殊的檢測和恢復設備,需要較高的實現成本。而軟件實現的方式不需要額外設備,并且能較好地支持現有處理器等優點,吸引了眾多學者對其進行研究。

本文主要對近20年來經典的軟件實現的軟差錯檢測和恢復技術進行了總結,并按照不同的實現層級,分為指令級、源代碼級、線程級和進程級等幾大類

2 指令級冗余實現的軟差錯檢測和恢復

經過數十年的研究,眾多學者提出了多項通過指令冗余實現的軟差錯檢測和恢復技術,其中Stanford大學CRC(Center for Reliable Computing)中心于2002年提出的針對軟差錯造成的數據流錯誤的EDDI(Error Detection by Duplicated Instructions)[1]方法和針對軟差錯造成的控制流錯誤的CFCSS(Control Flow Checking by Software Signatures) [2]方法是其中的典型代表;在此之后Princeton大學的Reis G A等人結合EDDI和CFCSS方法提出了同時具有檢測數據流錯誤和控制流錯誤的SWIFT(Software Implemented Fault Tolerance) [3]方法;為了能夠對檢測到的軟差錯進行恢復,Reis G A等人又在SWIFT的基礎上實現了SWIFT-R[4]方法。最近兩年,Didehban M等人針對SWIFT和SWIFT-R中存在的一些缺陷進行優化,分別實現了nZDC[5]方法和NEMESIS[6]方法。這些方法的發展過程如圖1所示,下面將對這些方法進行介紹。

2.1 EDDI

EDDI是在程序編譯時對程序的指令進行復制,將原程序的每條指令(Master Instruction, MI)都復制成一個副本指令(Shadow Instruction, SI)加入原程序當中,然后在存儲和分支指令之前加入比較指令(Comparison Instruction, CI),用以比較MI和SI的執行結果,如果執行結果不一致即表示檢測到程序數據流錯誤。一段經EDDI處理的加法指令示例如圖2所示。

通過注入單粒子翻轉故障,將未經過EDDI方法處理過的原程序和經過EDDI方法處理后的程序進行了比較,發現經過EDDI方法處理后的程序,將程序的平均出錯率由20%降到了1.5%。同時EDDI也使得處理后的程序由于程序類型的不同,執行時間增加了13%~105.9%,程序的大小增加了44%~113%。

2.2 CFCSS

CFCSS是在程序編譯時,根據每一個基本塊中除最后一條指令外,塊內順序執行指令這一原則,將程序劃分為多個基本塊,為每一個基本塊生成一個唯一的數字標簽S(Signature),并且在每個基本塊的開始的地方加入兩條特殊指令。其中一條指令負責根據剛剛執行完的基本塊和下一個要執行的基本塊的S生成新的動態標簽G,并由一個名為GSR(General Signature Register)的寄存器進行保存,另一條指令負責將G與當前基本塊的S進行比較,如果不一致則表示檢測到程序控制流的錯誤。

CFCSS是一種比較高效的檢測方法,只需要在原程序中插入較少的檢測指令就可以檢測到軟差錯引起的控制流錯誤。但是CFCSS方法的主要缺陷在于不能檢測出基本塊內部發生的控制流錯誤,同時由于動態標簽G的生成算法在生成過程中可能會導致G與錯誤基本塊的S一致,從而發生檢測混淆和檢測出錯的現象,這也是CFCSS算法的一個缺點(針對這一缺點,一些學者提出了ICFCSS等方法對其進行改進)。故障注入實驗的結果表明:在未經過CFCSS方法處理的程序中,33.7%的分支故障會導致程序出錯,經過CFCSS方法處理后的程序則只有3.1%的分支故障會導致程序出錯。同時CFCSS也使得處理后的程序由于程序類型的不同,執行時間增加了16%~69%,程序大小增加了26%~64%。

2.3 SWIFT

EDDI與CFCSS結合能夠檢測到軟差錯導致的數據流錯誤和控制流錯誤,SWIFT將EDDI和CFCSS進行了整合,并對這兩種方法進行了優化。其中最主要的改進在于SWIFT認為存儲器已經通過ECC或奇偶校驗碼等機制進行了保護,從而不考慮內存發生故障的情況。因此,SWIFT將從內存讀取出的數據復制一份,然后與EDDI一樣插入副本指令進行冗余計算,再在存儲指令之前將所存數據進行一致性的檢測。和EDDI相比,SWIFT只使用了一半的內存,訪問內存的操作也減少了一般,因此對性能有了很大的提升。針對控制流的錯誤,SWIFT采用的方法與CFCSS類似,不同之處在于SWIFT使用了一個專門的寄存器“sigoff”來保存在生成G過程中產生的中間值。但是SWIFT同樣沒有解決無法檢測出基本塊內部的控制流錯誤這一缺點。

通過注入單粒子翻轉故障,將通過SWIFT方法處理后的程序和經過EDDI+ECC+CFE方法處理后的程序進行了比較,發現經過SWIFT方法處理后的程序能夠檢測到70%的故障,同時程序大小平均比采用EDDI+ECC+CFE方法的程序小15%,執行時間也比采用EDDI+ECC+CFE的程序少51%。

2.4 SWIFT-R

SWIFT方法只具有軟差錯的檢測能力,而SWIFT-R在SWIFT的基礎上使其具備了恢復能力。SWIFT-R將指令的冗余變成了三份,然后對三個版本指令的執行結果進行比較,出現兩份或以上一致的結果則判斷為正確的結果,然后對錯誤副本的指令執行結果進行恢復。

通過注入單粒子翻轉故障,發現SWIFT-R方法能夠減少89.4%的故障,同時將程序的執行時間增加了99%。

3 源代碼級冗余實現的軟差錯檢測和恢復

由于源代碼級冗余實現軟差錯檢測和恢復會產生過多冗余代碼,并且使得性能損失嚴重,通過此方法實現的軟差錯檢測和恢復的研究并不多。典型性的方法有意大利都靈理工大學的A Benso等人于2000年提出的RECOO[8]、M Rebaudengo等人于2001年提出的ThOR[7]以及Stanford大學CRC實驗室于2002提出的ED4I[9]。這些方法的發展過程如圖4所示,下面將對這些方法進行介紹。

3.1 ThOR

ThOR在源程序預編譯時復制源程序中每一條語句,然后加入將計算結果進行比較的語句,用于判斷是否出現錯誤。ThOR的基本轉換規則如下:1.對每一個變量都進行復制;2.每一個對于變量的讀、寫等操作同樣需要在副本上進行;3.在對變量進行讀、寫之后需要將其與副本進行比較來檢測它的正確性。此外,原程序中的函數調用參數和返回值也要進行冗余備份。

通過注入單粒子翻轉故障,發現經過ThOR方法處理的程序,能夠檢測到64.4%的數據流錯誤。與未經過ThOR方法處理的程序相比,程序的執行時間平均延長了3.62倍,程序的大小平均增加了3.89倍。

3.2 RECOO

RECOO是一個針對C和C++程序的編譯工具,其目標是檢測發生在內存、寄存器等存儲部件中的數據錯誤。該工具的基本思想是通過復制變量來實現錯誤的檢測:變量每次被賦予新值的時候均會產生其副本變量,然后在對每一個變量進行讀操作的時候或者該變量不再使用時,將變量與其副本進行比較。在對變量進行復制的時候,可以考慮根據考慮變量的存在時間和對其他變量對其的依賴性計算其可靠性權重,然后可以根據可靠性權重決定是否對該變量進行復制,以減少程序的大小和縮短程序執行的時間。

故障注入實驗的結果表明:當使用RECOO復制程序中30%的變量時,能減少68%的FSVs(Fail-Silent Violations),復制70%的變量時,能減少89%的FSVs。同時,復制30%變量時,程序的執行時間增加6%,程序的大小增加18%;復制所有變量時,程序的執行時間增加16%,程序的大小增加37%。

3.3 ED4I

ED4I利用了數據多樣性來檢測程序錯誤。其通過將程序中的變量和常量同時乘以一個相同的多樣性因子k,使其轉換為具有相同功能的不同程序,由另一個同時運行的程序比較他們的結果或是在程序執行結束時比較兩個版本的程序輸出結果之間是否相差k倍。k的取值對ED4I的效果產生很大的影響,實驗證明當k取-2 時取得了較為理想的效果。

4 線程級冗余實現的軟差錯檢測和恢復

隨著多核平臺的迅猛發展,出現了一些多核平臺下基于軟件或硬件實現的軟差錯檢測和恢復方法,軟件實現的方法中具有典型性的有Intel公司于2007年提出的SRMT(Software-based Redundant Multi-Threading) [10]和Princeton大學的Yun Zhang等人于2012年提出的DAFT(Decoupled Acyclic Fault Tolerance) [11]。這些方法的發展過程如圖7所示,下面將對這些方法進行介紹。

4.1 SRMT

SRMT是在編譯的過程中為程序生成一個主線程(leading thread)和一個伴隨線程(trailing thread),兩個線程執行的計算操作相同。同時,主線程除了執行原有的計算操作之外,還需要與伴隨線程進行通信;而伴隨線程除了重復執行主線程的計算操作之外,還需要在某些恰當的位置將兩個線程的執行結果進行比較。對于訪問共享內存和執行I/O操作的系統調用等不可重復的計算全部都有主線程完成,但是這種操作執行之前需要獲知伴隨線程的比較結果,從而保證此時線程狀態的正確性。經SRMT處理后的程序執行過程如圖8所示。

通過注入單粒子翻轉故障,發現SRMT對于基準程序集SPEC2000中的整型和浮點程序的故障覆蓋率為99.98%和99.6%,具有非常高的覆蓋率。但是由于主線程和伴隨線程需要大量的通信,使用多核處理器的硬件通信隊列將使得程序執行的時間增加19%,使用軟件實現的通信隊列將使得程序執行的時間增加186%。

4.2 DAFT

DAFT的基本思路與SRMT相同,但是DAFT中采用了許多消除線程間進行同步檢查的操作,如采用特殊的異常處理機制區分異常和軟差錯、對IO的內存映射地址著重保護等方法減少主線程的等待,使主線程能夠順暢運行,從而降低了程序運行時間。

通過注入單粒子翻轉故障,發現經DAFT處理后的程序在SPEC2000和SPEC2006進行實驗時,運行時間平均增加了38%,程序大小平均變為原來的2.4倍,同時還有99.93%的故障覆蓋率。

5 進程級冗余實現的軟差錯檢測和恢復

在多核平臺下,還可以在進程級實現軟差錯的檢測和恢復。A Shye等人于2009年提出的方法PLR[12]就是一種典型的進程級冗余實現的軟差錯檢測和恢復方法。PLR的整體結構如圖9所示。PLR方法在程序被執行前創建一個監控(Monitor)進程,然后把應用進程復制n次(n為2時進行故障檢測,n等于3時可以進行故障的檢測和修復),其中一個為主進程(Master Process),其他為從屬進程(Slave Processes)。在實際運行過程中,只有主線程能夠通過syscall emulation層執行真正的系統調用,從屬進程執行仿真的系統調用。syscall emulation層還實現錯誤檢測和恢復,所有的系統調用參數都需要進行比較以確保正確,系統調用的返回結果要被復制給每一個從屬進程。在將進程進行復制之后,原進程就成了一個名義進程(Figurehead Process),它不執行實際的程序,只是在等待冗余進程執行結束,或者是在monitor的幫助下將收到的外部信號廣播給冗余的進程。

針對軟差錯的檢測,PLR是通過以下三種方式:1)在syscall emulation層,通過比較輸出結果,將會檢測到軟差錯導致的不正確的輸出。2)通過Watchdog超時檢測控制流出錯誤,如軟差錯導致的控制流錯誤,調用了錯誤的系統調用,在syscall emulation層中,通過與其他進程進行比較便能發現出現錯誤;或是軟差錯導致其中一個進程進入死循環等進程掛起情況。在下一個系統調用期間,除了掛起進程之外的所有進程都將結果傳送至syscall emulation層中,最終會導致超時。3)軟差錯導致非法指令、總線錯誤等故障導致的程序失效,這些程序失效產生的外部信號將會由名義進程進行檢測。故障注入實驗的結果表明,PLR的軟差錯檢測和恢復能力都能達到硬件容錯技術的水平,對于四路的對稱多處理器(SMP),PLR只導致程序運行的時間增加了16.9%。

6 軟件實現的軟差錯檢測和恢復技術比較

根據對軟件實現的軟差錯檢測和恢復技術的介紹,我們分別從能處理的錯誤類型、針對軟差錯的檢測和恢復能力,還有其對性能的影響等方面對上述方法進行比較。

指令級冗余實現的軟差錯檢測和恢復技術大多都具有較強的檢錯能力,并且這種方法的性能開銷相對適中。由于這類方法進行的是指令級的冗余,因此該方法能夠對軟錯誤進行精確定位,進而以細粒度的方式來進行軟錯誤恢復。這些優點也是此類方法被廣泛研究的原因。

源代碼冗余實現的軟差錯檢測和恢復技術的檢錯能力較為一般。同時,由于這類方法進行冗余的粒度較大,因此性能開銷也比較大,并且不能精確定位軟差錯的發生,不過該方法是在源代碼級別上進行的冗余,因此其實現也相對較為容易。

線程級冗余實現的軟差錯檢測和恢復技術的故障覆蓋率較高,但是這種方法需要多核處理器的支持,因此只能應用與多核平臺。此外由于這類方法中主線程和伴隨線程需要頻繁進行通信,因此對系統的性能有較大的影響。同時,由于這類方法是在線程級別進行軟差錯的檢驗,因此在考慮對此類方法的添加軟差錯恢復能力的時候,只能通過粗粒度的方法進行錯誤恢復。

進程級冗余實現的軟差錯檢測和恢復技術的故障覆蓋率也比較高,但是這種方法同樣只能應用與多核平臺。同時,這類方法針對軟差錯的恢復,也只能在進程級別進行恢復。

參考文獻:

[1] Oh N, Shirvani P P, Mccluskey E J. Error detection by duplicated instructions in super-scalar processors[J]. IEEE Transactions on Reliability, 2002, 51(1):63-75.

[2] Oh N, Shirvani P P, Mccluskey E J. Control-flow checking by software signatures[J]. IEEE Transactions on Reliability, 2002, 51(1):111-122.

[3] Reis G A, Chang J, Vachharajani N, et al. SWIFT: software implemented fault tolerance[C]// International Symposium on Code Generation and Optimization. IEEE, 2005.

[4] Chang J, Reis G A, August D I. Automatic Instruction-Level Software-Only Recovery[J]. IEEE Micro, 2007, 27(1):83-92.

[5] Didehban M, Shrivastava A. nZDC: a compiler technique for near zero silent data corruption[C]// Design Automation Conference. IEEE, 2016.

[6] Didehban M, Shrivastava A, Lokam S R D. NEMESIS: A software approach for computing in presence of soft errors[C]// 2017 IEEE/ACM International Conference on Computer-Aided Design (ICCAD). ACM, 2017.

[7] Rebaudengo M, Reorda M S, Torchiano M, et al. A source-to-source compiler for generating dependable software[C]// IEEE International Workshop on Source Code Analysis & Manipulation. IEEE, 2001.

[8] Benso A, Chiusano S, Prinetto P, et al. A C/C++ Source-to-Source compiler for dependable applications[C]// International Conference on Dependable Systems & Networks. IEEE, 2000.

[9] Oh N, Mitra S, Mccluskey E J. ED4I: Error detection by diverse data and duplicated instructions[J]. IEEE Transactions on Computers, 2002, 51(2):180-199.

[10] Wang C, Kim H S, Wu Y, et al. Compiler-Managed Software-based Redundant Multi-Threading for Transient Fault Detection[C]// International Symposium on Code Generation & Optimization. IEEE Computer Society, 2007.

[11] Zhang Y, Lee J W, Johnson N P, et al. DAFT: Decoupled Acyclic Fault Tolerance[C]// International Conference on Parallel Architectures & Compilation Techniques. IEEE, 2010.

[12] Shye A, Blomstedt J, Moseley T, et al. PLR: A Software Approach to Transient Fault Tolerance for Multicore Architectures[J]. IEEE Transactions on Dependable and Secure Computing, 2009, 6(2):135-148.

【通聯編輯:梁書】

主站蜘蛛池模板: 国产一二视频| 色AV色 综合网站| 亚洲首页在线观看| 国产在线精品美女观看| 亚洲香蕉伊综合在人在线| 国产自在自线午夜精品视频| 乱人伦中文视频在线观看免费| 国产午夜看片| 波多野结衣二区| 国产91丝袜在线播放动漫 | 国产欧美日韩免费| 91成人免费观看| 亚洲欧美另类色图| 亚洲无码久久久久| 九色免费视频| 精品国产Ⅴ无码大片在线观看81| 婷婷五月在线| 久久综合亚洲鲁鲁九月天| 欧美五月婷婷| 亚洲av无码片一区二区三区| 国产内射在线观看| 在线观看视频一区二区| 91精品专区国产盗摄| 色哟哟国产精品| 免费人欧美成又黄又爽的视频| 久久久受www免费人成| 亚洲国产综合自在线另类| 55夜色66夜色国产精品视频| 色综合天天操| 国产白浆在线| 日韩毛片视频| 精品第一国产综合精品Aⅴ| 国产精品尤物铁牛tv| 91探花国产综合在线精品| 丰满人妻中出白浆| 视频二区亚洲精品| 欧美亚洲国产一区| 色婷婷在线播放| 国产精品白浆在线播放| 国产一级一级毛片永久| 午夜无码一区二区三区在线app| 国产一区二区三区精品久久呦| 亚洲精品国产综合99| 亚洲一区二区黄色| 欧美一区精品| 这里只有精品国产| 欧美综合区自拍亚洲综合天堂 | 亚洲国产清纯| a毛片免费观看| 精品人妻一区无码视频| 国产日韩丝袜一二三区| 国产精鲁鲁网在线视频| 在线观看国产小视频| 国产精品污视频| 精品国产黑色丝袜高跟鞋| 丰满的少妇人妻无码区| 国产成人精彩在线视频50| 一本一道波多野结衣av黑人在线| 婷婷丁香在线观看| 亚洲床戏一区| 久久国产香蕉| 国产福利小视频高清在线观看| 五月丁香伊人啪啪手机免费观看| 香蕉久久国产超碰青草| 91毛片网| 波多野结衣一区二区三区88| 亚洲三级电影在线播放| 丝袜久久剧情精品国产| 色欲国产一区二区日韩欧美| 99久久精品国产麻豆婷婷| 欧美中文字幕在线二区| 91外围女在线观看| 久久这里只有精品2| 欧美视频在线不卡| 无码电影在线观看| 国产大片喷水在线在线视频| 久久婷婷色综合老司机| 一本久道热中字伊人| 国内丰满少妇猛烈精品播| 免费a在线观看播放| 日韩欧美国产中文| 日韩av无码精品专区|