所謂軟錯(cuò)誤,指的是由物理效應(yīng)引起的數(shù)據(jù)偏差,受影響的內(nèi)存單元并沒有被破壞,系統(tǒng)重啟后此錯(cuò)誤會(huì)被修復(fù),我們將這種軟錯(cuò)誤的發(fā)生稱為單粒子翻轉(zhuǎn)(SEU)。
應(yīng)用中的軟錯(cuò)誤?
軟錯(cuò)誤在應(yīng)用中以特定的頻率存在,這種軟件錯(cuò)誤率(SER)取決于很多環(huán)境和技術(shù)參數(shù)。
一個(gè)長(zhǎng)期運(yùn)行的工業(yè)設(shè)備,假設(shè)系統(tǒng)中集成了一個(gè)2MB SRAM,已連續(xù)運(yùn)行20年,以每位小時(shí)1e-12個(gè)錯(cuò)誤的SER,我們可以計(jì)算:
1e-12errors/bit*h*2Mbyte*8bit/byte*175.200h = 2.9 errors
我們意識(shí)到,對(duì)于長(zhǎng)期運(yùn)行的安全關(guān)鍵系統(tǒng)來說,這不僅僅是一個(gè)物理理論,我們很有可能會(huì)因?yàn)橐粋€(gè)軟錯(cuò)誤而失去安全功能!
這是不可接受的。我們必須避免或至少能檢測(cè)長(zhǎng)期運(yùn)行的工業(yè)設(shè)備中的軟錯(cuò)誤。
越來越多的軟錯(cuò)誤
為理解、檢測(cè)或糾正硬件中的這些軟錯(cuò)誤,許多研究正在進(jìn)行。根據(jù)Tezzaron的論文,組件對(duì)錯(cuò)誤率的敏感性將隨著以下情況上升:
· 復(fù)雜性的增加將提升錯(cuò)誤率
· 高密度(高容量)芯片更容易出錯(cuò)
· 低壓設(shè)備更容易出錯(cuò)
· 更高的速度(較低的延遲)導(dǎo)致更高的錯(cuò)誤率
· 較低的電池容量(存儲(chǔ)電荷較少)將導(dǎo)致較高的錯(cuò)誤率
這些情況匹配嵌入式市場(chǎng)的當(dāng)前發(fā)展趨勢(shì),我們應(yīng)該讓系統(tǒng)為越來越多的軟錯(cuò)誤做好準(zhǔn)備。
硬件措施
在航空航天和衛(wèi)星系統(tǒng)使用的一些輻射加固硬件組件具有高度的SEU免疫力,但如果在工業(yè)應(yīng)用中使用這些組件,系統(tǒng)成本將超過可接受的限度。
可以使用為解決IT服務(wù)器內(nèi)存錯(cuò)誤設(shè)計(jì)的chipkill技術(shù),該技術(shù)基于冗余機(jī)制。
硬件供應(yīng)商也意識(shí)到了這一挑戰(zhàn)。在過去的幾年里,已經(jīng)發(fā)布了幾款帶有軟錯(cuò)誤緩解技術(shù)的微控制器。
ECC內(nèi)存保護(hù)
ECC內(nèi)存設(shè)備使用糾錯(cuò)碼來存儲(chǔ)數(shù)據(jù),這些編碼被歸類為SEC-DED。該方法基于漢明編碼,可以發(fā)現(xiàn)2位錯(cuò)誤,糾正1位錯(cuò)誤。
當(dāng)使用ECC保護(hù)內(nèi)存時(shí),軟件在啟動(dòng)期間只需要少量操作。系統(tǒng)上電后,我們必須將內(nèi)存初始化為已知狀態(tài)。否則,會(huì)收到ECC錯(cuò)誤的通知,而ECC錯(cuò)誤實(shí)際上是內(nèi)存單元的隨機(jī)內(nèi)容。之后,硬件在常規(guī)操作中透明地修復(fù)軟錯(cuò)誤。大多數(shù)ECC內(nèi)存提供修復(fù)通知,我們用它來監(jiān)控內(nèi)存。
有了這種優(yōu)秀的硬件支持,我們已經(jīng)為軟錯(cuò)誤做好了充分的準(zhǔn)備。
軟件措施
基于系統(tǒng)或硬件工程原因,我們需為沒有硬件機(jī)制的系統(tǒng)準(zhǔn)備軟件,例如:使用的控制器不支持ECC內(nèi)存,或者我們需要沒有ECC的外部?jī)?nèi)存。
我們建議在項(xiàng)目中針對(duì)軟錯(cuò)誤敏感執(zhí)行數(shù)據(jù)存儲(chǔ)分析,這種分析有助于決定對(duì)數(shù)據(jù)存儲(chǔ)使用哪種措施來避免、恢復(fù)或檢測(cè)軟錯(cuò)誤,分析內(nèi)容包含:
· 使用的內(nèi)存數(shù)量(使用的內(nèi)存越多,軟錯(cuò)誤概率越高)
· 數(shù)據(jù)壽命(壽命越長(zhǎng),出現(xiàn)軟錯(cuò)誤的概率越高)
· 軟錯(cuò)誤導(dǎo)致的最壞情況系統(tǒng)行為(影響越嚴(yán)重,我們需要的錯(cuò)誤檢出率越高)
在這種分析中,未使用的內(nèi)存單元中的軟錯(cuò)誤是可以接受的。通過這種方法,我們保持了盡可能高的性能和可用性,同時(shí)保護(hù)系統(tǒng)免受軟錯(cuò)誤的影響。存儲(chǔ)數(shù)據(jù)可以分類為:
· 常量數(shù)據(jù)(如操作碼、配置表)
· 枚舉數(shù)據(jù)(如系統(tǒng)狀態(tài)和模式)
· 動(dòng)態(tài)數(shù)據(jù)(如過程值)
· 臨時(shí)數(shù)據(jù)(如局部變量,不斷刷新內(nèi)存)
歸類為臨時(shí)數(shù)據(jù)的變量是非關(guān)鍵的,可以在沒有進(jìn)一步保護(hù)措施的情況下保持不變。因此,從獨(dú)立數(shù)據(jù)源周期性更新數(shù)據(jù)是一個(gè)很好的策略。
常量數(shù)據(jù)保護(hù)
為了保護(hù)內(nèi)存中的常量數(shù)據(jù)(如應(yīng)用操作碼或配置表),我們計(jì)算數(shù)據(jù)的哈希值,并使用存儲(chǔ)的預(yù)期值檢查結(jié)果。
保護(hù)的強(qiáng)度取決于哈希值中使用的比特位數(shù)。最常用的是CRC32算法。哈希碰撞是兩個(gè)不同的常量數(shù)據(jù)內(nèi)存映像可能產(chǎn)生相同的哈希值的效應(yīng)。杰夫·普雷辛提供了一份關(guān)于碰撞概率的概述。隨著常量數(shù)據(jù)內(nèi)存中字節(jié)數(shù)的增加,CRC32碰撞的概率也會(huì)增加。對(duì)于實(shí)際項(xiàng)目,這導(dǎo)致了諸如“CRC32最多可以保護(hù)4096字節(jié)”這樣的限制(字節(jié)的數(shù)量取決于安全完整性級(jí)別)。
因此,更好的選擇是支持32位到1024位可變長(zhǎng)度的FVN-Hash值,這是一種快速高效的計(jì)算哈希值的方法,下面的偽代碼顯示了算法:
offset_basis和FNV_prime為固定值,取決于hash值的位寬度。
枚舉數(shù)據(jù)保護(hù)
我們?cè)诖鎯?chǔ)枚舉數(shù)據(jù)時(shí)避免使用“1、2、3,…”這樣的值,因?yàn)橐淮挝环D(zhuǎn)可以將有效數(shù)據(jù)更改為其它的有效值,我們沒有辦法檢測(cè)到這個(gè)位翻轉(zhuǎn)。
我們可以選擇特定的值,確保一次位翻轉(zhuǎn)的結(jié)果是無效值。如果需要至少兩次位翻轉(zhuǎn)才能將一個(gè)有效值更改為另一個(gè)有效值,我們將選擇稱為:“漢明距離(HD)為2的值?!?/p>
HD =不同位的數(shù)量
實(shí)際項(xiàng)目中,我們選擇漢明距離為4的值。參見以下十六進(jìn)制字節(jié)值:
理論上,我們可以通過搜索具有最小漢明距離的值來糾正單個(gè)位翻轉(zhuǎn)。這個(gè)值很可能是正確的值。
以0x3c為例,假設(shè)位1翻轉(zhuǎn)-我們得到0x3e。首先,這是一個(gè)無效值。其次,我們可以檢查該值到所有有效數(shù)據(jù)的漢明距離(在下面的括號(hào)中):
如果只有1位翻轉(zhuǎn)得到0x3e,最低HD的值是0x3c為正確的值。事實(shí)上,我們不知道有多少比特被翻轉(zhuǎn)了。這是被分類很可能正確的原因。
我們對(duì)安全關(guān)鍵軟件中最有可能正確(most likely)的值不滿意。出于這個(gè)原因,我們通常會(huì)提出一個(gè)安全異常,即關(guān)閉或重啟設(shè)備。
動(dòng)態(tài)數(shù)據(jù)保護(hù)
對(duì)于動(dòng)態(tài)數(shù)據(jù),任何值都是有效值。我們必須添加冗余來檢測(cè)值的變化(如位翻轉(zhuǎn))。一個(gè)簡(jiǎn)單的方法是將變量鏡像存儲(chǔ)在不同的內(nèi)存區(qū)域中。實(shí)現(xiàn)偽代碼如下:
我們現(xiàn)在可以在任何時(shí)候用引入的冗余檢查動(dòng)態(tài)變化的變量:
注意:當(dāng)使用中斷、多線程環(huán)境、DMA傳輸、數(shù)據(jù)緩存或多處理器設(shè)備時(shí),這段偽代碼會(huì)變得復(fù)雜(并需要運(yùn)行時(shí)間)。
總結(jié)
我們討論了對(duì)長(zhǎng)期運(yùn)行的嵌入式設(shè)備采取軟錯(cuò)誤保護(hù)措施的必要性。
廣泛使用的硬件和軟件措施概述包括:
· 內(nèi)存設(shè)備的ECC保護(hù)
· 常量數(shù)據(jù)內(nèi)存的哈希值
· 枚舉值的漢明距離
· 動(dòng)態(tài)數(shù)據(jù)內(nèi)存的冗余
所有措施可以分類到哈希值、漢明碼和冗余三個(gè)大類,這是自檢測(cè)算法和系統(tǒng)可信性監(jiān)測(cè)中使用的三個(gè)主要測(cè)量方法。
審核編輯:劉清
-
微控制器
+關(guān)注
關(guān)注
48文章
7459瀏覽量
150859 -
多處理器
+關(guān)注
關(guān)注
0文章
22瀏覽量
8905 -
嵌入式設(shè)備
+關(guān)注
關(guān)注
0文章
110瀏覽量
16925 -
十六進(jìn)制
+關(guān)注
關(guān)注
2文章
32瀏覽量
37675 -
CRC32
+關(guān)注
關(guān)注
0文章
8瀏覽量
8203
原文標(biāo)題:如何對(duì)長(zhǎng)期運(yùn)行的嵌入式設(shè)備采取軟錯(cuò)誤保護(hù)
文章出處:【微信號(hào):麥克泰技術(shù),微信公眾號(hào):麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論