技術構成 計算機的操作指令才可以繼續執行。當然在糾錯時系統的性能有著明顯降低,不過這種糾錯對
伺服器 等套用而言是十分重要的。要了解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記憶體。