隨著服務(wù)器內(nèi)存容量需求的不斷增長,對內(nèi)存可靠性的要求也必須隨之不斷提高,道理很簡單,越多的內(nèi)存被使用,內(nèi)存存取錯誤的可能性就越容易發(fā)生。于是,關(guān)于內(nèi)存可靠性的各種保障措施也日益受到重視。
下面我們一起探討一下關(guān)于內(nèi)存的數(shù)據(jù)保護(hù)技術(shù):
奇偶校驗技術(shù)
我們知道,一般的個人計算機上也有使用內(nèi)存的檢錯技術(shù),稱為奇偶校驗(Parity Checking),奇偶校驗實現(xiàn)的方式比較簡單,即在傳送字符的各位之外,再傳送1位奇/偶校驗位,可采用奇校驗或偶校驗。這種技術(shù)能夠檢測出信息傳輸過程中的部分誤碼(1位誤碼能檢出,2位及2位以上誤碼不能檢出),由于其實現(xiàn)簡單,在中低端領(lǐng)域到了廣泛使用。同時,由于其檢錯方式過于簡單,因此它只能發(fā)現(xiàn)單比特錯誤,而且不能糾錯,在發(fā)現(xiàn)錯誤后,只能要求重發(fā)。
ECC技術(shù)
而服務(wù)器內(nèi)存中,由于對可靠性的要求要高得多,所以都采用ECC技術(shù)。ECC技術(shù)除了可以檢測并糾正單比特錯誤外,還可以檢測出2~4比特的錯誤。當(dāng)發(fā)現(xiàn)多比特錯誤時,ECC內(nèi)存產(chǎn)生一個不可屏蔽的中斷,通知系統(tǒng)數(shù)據(jù)出現(xiàn)錯誤。在ECC編碼方案中,每個數(shù)據(jù)塊有一個8比特的校驗用的數(shù)據(jù),用于糾正單比特的錯誤。每次把數(shù)據(jù)寫入內(nèi)存時,ECC采用特殊的算法生成校驗碼。該算法把所有的校驗和累加起來,得到一個校驗和(Checksum),該校驗和與數(shù)據(jù)存儲在一起。當(dāng)從內(nèi)存中讀取數(shù)據(jù)的時候,需要重新計算校驗和,并且與原來的校驗和進(jìn)行比較。如果計算出的校驗和與原來的校驗和相等,那么說明存儲的數(shù)據(jù)是正確的,可以繼續(xù)下一步工作;如果與原來的校驗和不相等,那么說明存儲的數(shù)據(jù)是錯誤的。這時,將把出現(xiàn)錯誤的數(shù)據(jù)隔離起來,并且報告給系統(tǒng)。如果出現(xiàn)的是單比特錯誤,那么可以對其進(jìn)行糾正,輸出正確的數(shù)據(jù),系統(tǒng)繼續(xù)正常工作。
高級ECC技術(shù)
ECC內(nèi)存對于許多應(yīng)用可以提供充分的保護(hù),但是,隨著內(nèi)存容量的增加,ECC內(nèi)存保護(hù)的效率開始降低。為了解決這一問題,HP公司開發(fā)了高級ECC內(nèi)存技術(shù),并得到廣泛應(yīng)用。標(biāo)準(zhǔn)的ECC內(nèi)存在從DIMM內(nèi)存讀取數(shù)據(jù)時,只能發(fā)現(xiàn)單比特的錯誤,而高級ECC內(nèi)存可以發(fā)現(xiàn)DRAM內(nèi)存芯片中的多比特錯誤,從而可以糾正DRAM內(nèi)存芯片的問題。在高級ECC內(nèi)存技術(shù)中,有4比特的存儲設(shè)備,每個芯片對應(yīng)一個數(shù)據(jù)字中的4位。這4比特都和一個ECC設(shè)備相連,因此如果一個芯片的數(shù)據(jù)發(fā)生錯誤,則產(chǎn)生4個獨立的單比特錯誤,從而可以得到糾正。
因為每個ECC設(shè)備可以糾正單比特的錯誤,所以高級ECC技術(shù)實際上能夠糾正發(fā)生在同一個DRAM芯片中的多比特錯誤。因此,高級ECC技術(shù)可以提供很好的內(nèi)存數(shù)據(jù)保護(hù)。
內(nèi)存熱備技術(shù)
這是一種基于冗余備份思想的技術(shù),在進(jìn)行內(nèi)存熱備時,做熱備份的內(nèi)存在正常情況下是不使用的,也就是說系統(tǒng)是看不到這部分內(nèi)存容量的。每個內(nèi)存通道中有一個DIMM不被使用,預(yù)留為熱備內(nèi)存。芯片組中設(shè)置有內(nèi)存校驗錯誤次數(shù)的閾值, 即每單位時間發(fā)生錯誤的次數(shù)。當(dāng)工作內(nèi)存的故障次數(shù)達(dá)到這個“容錯閾值”,系統(tǒng)開始進(jìn)行雙重寫動作,一個寫入主內(nèi)存,一個寫入熱備內(nèi)存,當(dāng)系統(tǒng)檢測到兩個內(nèi)存數(shù)據(jù)一致后,熱備內(nèi)存就代替主內(nèi)存工作,故障內(nèi)存被禁用,這樣就完成了熱備內(nèi)存接替故障內(nèi)存工作的任務(wù),有效避免了系統(tǒng)由于內(nèi)存故障而導(dǎo)致數(shù)據(jù)丟失或系統(tǒng)宕機。這個做熱備的內(nèi)存容量應(yīng)大于等于所在通道的最大內(nèi)存條的容量,以滿足內(nèi)存數(shù)據(jù)遷移的最大容量需求。
內(nèi)存鏡像技術(shù)
內(nèi)存鏡像(Memory Mirroring)技術(shù)的工作原理與硬盤的熱備份類似,為了確保當(dāng)某個DIMM存儲芯片失效的時候,內(nèi)存保護(hù)技術(shù)能夠自動利用備用的比特位自動找回數(shù)據(jù),從而保證服務(wù)器的平穩(wěn)運行。該技術(shù)可以糾正發(fā)生在每對DIMM內(nèi)存中多達(dá)4個連續(xù)比特位的錯誤。當(dāng)出現(xiàn)隨機性的軟內(nèi)存錯誤,可以通過使用熱備份的比特位來解決;如果出現(xiàn)永久性的硬件錯誤,也將利用熱備份的比特位使得DIMM內(nèi)存芯片繼續(xù)工作,直到被替換為止。內(nèi)存鏡像會將內(nèi)存數(shù)據(jù)做兩個拷貝,分別放在主內(nèi)存和鏡像內(nèi)存中。系統(tǒng)工作時會向兩個內(nèi)存中同時寫入數(shù)據(jù),因此使得內(nèi)存數(shù)據(jù)有兩套完整的備份。由于采用通道間交叉鏡像的方式,所以每個通道都有一套完整的內(nèi)存數(shù)據(jù)拷貝。
內(nèi)存鏡像需要內(nèi)存中的所有數(shù)據(jù)均存有副本,系統(tǒng)正常運行時所使用的是原本,而當(dāng)其中一份宿主失效時,另外那份就隨即補替工作,有效防止了由于內(nèi)存通道故障導(dǎo)致的數(shù)據(jù)丟失,極大提升了服務(wù)器可靠性。這同磁盤系統(tǒng)中的RAID 1非常相似,因此,實現(xiàn)這一功能需要雙倍的物理內(nèi)存,而實際容量的利用率只有50%。
內(nèi)存鏡像跟內(nèi)存熱備的區(qū)別是:內(nèi)存鏡像主要是希望通過備份內(nèi)存上的數(shù)據(jù)來恢復(fù)出錯內(nèi)存的數(shù)據(jù),而內(nèi)存熱備則是徹底用備份內(nèi)存接替出錯內(nèi)存的所有工作。
內(nèi)存刷洗技術(shù)
內(nèi)存刷洗(Memory Scrubbing)技術(shù)—系統(tǒng)會間歇地測試內(nèi)存的存取錯誤,當(dāng)錯誤被偵查到時,系統(tǒng)會向用戶發(fā)出警告,并調(diào)用備用內(nèi)存替換出現(xiàn)錯誤的部分,而這一替換任務(wù)便交給在線備用內(nèi)存(On-line Spare Memory)技術(shù)來完成—在原本中有一部分是保留內(nèi)存,不能夠用作常規(guī)性的操作,當(dāng)使用的內(nèi)存塊出現(xiàn)錯誤時,保留內(nèi)存便被激活以代替其工作。
可以看到,內(nèi)存鏡像技術(shù)是完整和全面的保護(hù)措施,而內(nèi)存刷洗技術(shù)則是對原本內(nèi)存可靠性的保證。當(dāng)然,內(nèi)存刷洗技術(shù)也會同時對副本內(nèi)存進(jìn)行操作,試想倘若沒有內(nèi)存刷洗技術(shù)的支持,副本內(nèi)存中的數(shù)據(jù)又如何得到保證,連副本都不能確保正常,那么內(nèi)存鏡像意義何在呢。
雙通道內(nèi)存互備技術(shù)
這種技術(shù)是針對雙通道內(nèi)存工作模式而言的,在Intel的Nocona平臺北橋芯片E7520、E7525和E7320芯片組中融入了這種技術(shù):當(dāng)E7520的主板以雙通道狀態(tài)工作時,如果由于某種意外導(dǎo)致內(nèi)存雙通道失效,那么系統(tǒng)可立刻切換到單通道內(nèi)存工作模式,此時雖然內(nèi)存性能會大幅度下降,但卻保證了系統(tǒng)的正常運作,而這一功能的實現(xiàn)也要歸功于內(nèi)存刷洗技術(shù)不斷地偵查內(nèi)存子系統(tǒng)的潛在錯誤。