複製鏈接
請複製以下鏈接發送給好友

指令糾錯技術

鎖定
指令糾錯技術ECC( Error Checking and Correcting) 是為了解決同位檢查碼技術的缺陷而產生的一種新的計算機內存糾錯技術。
指令糾錯技術比奇偶校正技術更加先進,不僅可以發現錯誤,而且能夠糾正這些錯誤,從而確保服務器的正常運行。
中文名
指令糾錯技術
外文名
Error Checking and Correcting
簡    稱
ECC
簡    介
指令糾錯技術
目    的
解決同位檢查碼技術的缺陷

指令糾錯技術技術構成

要了解ECC技術,就不能不提到Parity(奇偶校驗)。在ECC技術出現之前,內存中應用最多的是另外一種技術,就是Parity(奇偶校驗)。我們知道,在數字電路中,最小的數據單位就是叫“比特(bit)”,也叫數據“位”,“比特”也是內存中的最小單位,它是通過“1”和“0”來表示數據高、低電平信號的。在數字電路中8個連續的比特是一個字節(byte),在內存中不帶“奇偶校驗”的內存中的每個字節只有8位,若它的某一位存儲出了錯誤,就會使其中存儲的相應數據發生改變而導致應用程序發生錯誤。而帶有“奇偶校驗”的內存在每一字節(8位)外又額外增加了一位用來進行錯誤檢測。比如一個字節中存儲了某一數值(1、0、1、0、1、0、1、1),把這每一位相加起來(1+0+1+0+1+0+1+1=5)。若其結果是奇數,對於偶校驗,校驗位就定義為1,反之則為0;對於奇校驗,則相反。當CPU返回讀取存儲的數據時,它會再次相加前8位中存儲的數據,計算結果是否與校驗位相一致。當CPU發現二者不同時就作出試圖糾正這些錯誤,但Parity有個缺點,當內存查到某個數據位有錯誤時,卻並不一定能確定在哪一個位,也就不一定能修正錯誤,所以帶有奇偶校驗的內存的主要功能僅僅是“發現錯誤”,能糾正部分簡單的錯誤。

指令糾錯技術工作原理

具有指令糾錯技術的內存 具有指令糾錯技術的內存
ECC(Error Correct Code,糾錯碼)是在原來的數據位上外加位來實現的,增加的位用來重建錯誤數據。在ECC糾錯體系中,如果數據為n個字節,則外加的ECC位為log2n + 5。例如對於64位數據,需要外加log28 + 5 = 8個ECC位。
當出現一個存儲位錯誤時,ECC體系可以自動進行糾錯。當出現2個數據位錯誤時,可以檢測出來,但不能糾錯,這種行為通常稱作“單錯糾正/雙錯檢測(Single Error Correction/Double Error Detection ,簡稱SEC/DED)。一次存取中有2個以上的數據位出錯時,由於SEC/DED體系檢測不出來了,致使數據的完整性受損。採用這種結構的存儲器,當檢測出多位錯誤時,系統就會報告出現了致命故障(Fatal fault),之後系統崩潰。

指令糾錯技術技術特點

ECC內存的最大特點並不是因為它速度快(速度方面根本與ECC無關,只與內存類型有關),而是因為它具有特殊的糾錯能力,可以使服務器保持長時間的穩定運行。
Chipkill技術
我們知道ECC內存可以同時檢測和糾正單一比特的錯誤,但如果同時檢測出兩個以上的比特錯誤,則一般無能為力。Chipkill技術正是IBM公司為了解決ECC技術的不足之處而開發的,是一種新的ECC內存保護標準。
IBM的Chipkill 技術是利用內存的子結構方法來解決這一問題的。內存子系統的設計原理是這樣的,單一芯片,無論數據寬度是多少,只對於一個給定的ECC識別碼,它的影響最多為一比特。舉個例子來説明,如果使用4比特寬的DRAM,4比特中的每一位的奇偶性將分別組成不同的ECC識別碼,這個ECC識別碼是用單獨一個數據位來保存的,也就是説保存在不同的內存空間地址。因此,即使整個內存芯片出現故障,每個ECC識別碼也將最多隻出現一比特的壞數據,而這種情況完全可以通過 ECC邏輯修復,從而保證內存子系統的容錯性,使服務器在出現故障時,擁有更強大的自我恢復能力,使服務器的可靠性和穩定性得到更加充分的保障。

指令糾錯技術實際意義

內存是一種電子器件,在其工作過程中難免會出現錯誤,而對於穩定性要求高的用户來説,內存錯誤可能會引起致命性的問題。內存錯誤根據其原因還可分為硬錯誤和軟錯誤。硬件錯誤是由於硬件的損害或缺陷造成的,因此數據總是不正確,此類錯誤是無法糾正的;軟錯誤是隨機出現的,例如在內存附近突然出現電子干擾等因素都可能造成內存軟錯誤的發生。
為了能檢測和糾正內存軟錯誤,首先出現的是內存“奇偶校驗”。內存中最小的單位是比特,也稱為“位”,位有隻有兩種狀態分別以1和0來標示,每8個連續的比特叫做一個字節(byte)。不帶奇偶校驗的內存每個字節只有8位,如果其某一位存儲了錯誤的值,就會導致其存儲的相應數據發生變化,進而導致應用程序發生錯誤。而奇偶校驗就是在每一字節(8位)之外又增加了一位作為錯誤檢測位。在某字節中存儲數據之後,在其8個位上存儲的數據是固定的,因為位只能有兩種狀態1或0,假設存儲的數據用位標示為1、1、1、0、0、1、0、1,那麼把每個位相加(1+1+1+0+0+1+0+1=5),結果是奇數。對於偶校驗,校驗位就定義為1,反之則為0;對於奇校驗,則相反。當CPU讀取存儲的數據時,它會再次把前8位中存儲的數據相加,計算結果是否與校驗位相一致。從而一定程度上能檢測出內存錯誤,奇偶校驗只能檢測出錯誤而無法對其進行修正,同時雖然雙位同時發生錯誤的概率相當低,但奇偶校驗卻無法檢測出雙位錯誤。
ECC(Error Checking and Correcting,錯誤檢查和糾正)內存,它同樣也是在數據位上額外的位存儲一個用數據加密的代碼。當數據被寫入內存,相應的ECC代碼與此同時也被保存下來。當重新讀回剛才存儲的數據時,保存下來的ECC代碼就會和讀數據時產生的ECC代碼做比較。如果兩個代碼不相同,他們則會被解碼,以確定數據中的那一位是不正確的。然後這一錯誤位會被拋棄,內存控制器則會釋放出正確的數據。被糾正的數據很少會被放回內存。假如相同的錯誤數據再次被讀出,則糾正過程再次被執行。重寫數據會增加處理過程的開銷,這樣則會導致系統性能的明顯降低。如果是隨機事件而非內存的缺點產生的錯誤,則這一內存地址的錯誤數據會被再次寫入的其他數據所取代。
使用ECC校驗的內存,會對系統的性能造成不小的影響,不過這種糾錯對服務器等應用而言是十分重要的,並且由於帶ECC校驗的內存價格比普通內存要昂貴許多,因此帶有ECC校驗功能的內存絕大多數都是服務器內存

指令糾錯技術認識誤區

一談到服務器內存,大家都一致強調要買ECC內存,認為ECC內存速度快,其實是一種錯誤地認識,ECC內存成功之處並不是因為它速度快(速度方面根本不關它事只與內存類型有關),而是因為它有特殊的糾錯能力,使服務器保持穩定。ECC本身並不是一種內存型號,也不是一種內存專用技術,它是一種廣泛應用於各種領域的計算機指令中,是一種指令糾錯技術。
ECC比奇偶校正技術更先進的方面主要在於它不僅能發現錯誤,而且能糾正這些錯誤,這些錯誤糾正之後計算機才能正確執行下面的任務,確保服務器的正常運行。ECC內存即糾錯內存,簡單的説,其具有發現錯誤,糾正錯誤的功能,一般多應用在高檔台式電腦/服務器及圖形工作站上,這將使整個電腦系統在工作時更趨於安全穩定。
之所以説它並不是一種內存型號,那是因為並不是一種影響內存結構和存儲速度的技術,它可以應用到不同的內存類型之中,就象在前講到的“奇偶校正”內存,它也不是一種內存,最開始應用這種技術的是EDO內存,SD也有應用,而ECC內存主要是從SD內存開始得到廣泛應用,而新的DDR、RDRAM也有相應的應用,主流的ECC內存其實是一種SD內存。