主頁 / 伺服器 ECC 記憶體有什麼作用? 伺服器 ECC 記憶體有什麼作用? ECC 是 Error-Correcting Code(錯誤更正碼)的縮寫。ECC 記憶體能在讀取資料時偵測並更正單一位元錯誤,避免記憶體的隨機錯誤變成資料損毀或系統死機。本文說明其原理、與一般記憶體的分別,以及選購伺服器記憶體時的實際考慮。
記憶體錯誤是真實存在的問題 動態隨機存取記憶體(DRAM)以電容的電荷狀態儲存資料位元。這些電荷會自然流失,因此記憶體需要不斷刷新(refresh)。除了刷新之外,宇宙射線引起的中子撞擊、封裝材料中的微量放射性元素、電源雜訊與訊號完整性問題,都可能令個別位元的狀態意外翻轉,由 0 變成 1 或反之。這類不會損壞硬體、只影響資料內容的錯誤稱為軟錯誤(soft error)。
軟錯誤的後果視乎被翻轉的位元屬於什麼資料。若翻轉發生在暫時不會被讀取的閒置區域,可能完全沒有影響;若翻轉發生在正在運算的數值上,計算結果會出錯;若翻轉發生在作業系統核心的關鍵資料結構或指標上,系統可能立即崩潰。最麻煩的情況是「靜默資料損毀」(silent data corruption):錯誤的數值被寫入資料庫或檔案,系統沒有任何報錯,錯誤在數月後才在報表或帳目中顯露,而此時備份亦可能已包含錯誤資料。
對桌上電腦而言,偶發的軟錯誤最多引起一次程式異常結束,重新啟動即可繼續使用。對持續運行數年、同時處理多個客戶交易或存放公司財務資料的伺服器而言,同樣的錯誤可能造成無法追溯的資料問題。這是伺服器記憶體與桌面記憶體採用不同技術路線的根本原因。
ECC 如何偵測與更正錯誤 ECC 記憶體在每 64 位元資料之外,額外儲存 8 位元的檢查碼,因此記憶體模組上的晶片數量比同容量的非 ECC 模組多。這 8 位元檢查碼以漢明碼(Hamming code)為基礎的演算法計算,寫入時一併儲存,讀取時重新計算並與儲存的檢查碼比對。
單一位元錯誤:偵測並更正 當一個位元翻轉時,檢查碼的比對結果不僅顯示「有錯」,更能指出錯誤發生在哪一個位元位置。記憶體控制器會即時把該位元更正,交回正確資料,作業系統毫不受影響,只在系統日誌留下可更正錯誤(correctable error)的記錄。
雙位元錯誤:偵測但無法更正 同一組資料內兩個位元同時翻轉時,標準 ECC 能夠偵測到錯誤存在,但無法確定是哪兩個位元,因此無法更正。系統會記錄為不可更正錯誤(uncorrectable error),並通常主動停機,以避免使用錯誤資料繼續運算。
記憶體清洗(Scrubbing) 伺服器的記憶體控制器會在背景定期讀取整個記憶體並更正發現的單一位元錯誤,避免錯誤長期累積至同一組資料出現兩個錯誤。這個機制稱為 memory scrubbing,是 ECC 的重要配套。
這種「偵測單雙、更正單一」的能力,業界稱為 SECDED(Single Error Correction, Double Error Detection)。伺服器平台亦有更進階的保護機制,例如可容忍整顆記憶體晶片失效的晶片層級更正,以及把兩組記憶體互為鏡像的記憶體鏡像功能,但這些功能會犧牲部分可用容量與頻寬,一般只在高可用需求的系統上啟用。
ECC 的另一項實際價值,是把記憶體問題變成可見的資訊。伺服器的管理介面與系統日誌會記錄可更正錯誤的次數與發生位置;當某一條記憶體模組的錯誤次數持續上升時,管理員可以在它演變為不可更正錯誤導致當機之前,安排更換。沒有 ECC 的系統則完全沒有這類早期警號。
需要協助? 記憶體升級須核對原廠支援清單,確認 ECC 類型、容量、秩數與頻率;系統不穩定則可先由管理介面的 ECC 錯誤記錄著手診斷。提供伺服器型號即可初步評估。 WhatsApp →
ECC 與非 ECC 記憶體的實際分別 ECC 與非 ECC 記憶體在外觀上相似,但屬不同產品類別,不可混用。以下比較列出主要差異,實際規格因平台而異,選購前應核對伺服器原廠的記憶體支援清單。
項目 ECC 記憶體 非 ECC 記憶體
錯誤處理 偵測並更正單一位元錯誤,偵測雙位元錯誤 不偵測,錯誤直接進入運算或儲存
晶片數量 額外檢查碼晶片,資料寬度 72 位元 資料寬度 64 位元
錯誤記錄 系統日誌與管理介面留有記錄,可預警 沒有記錄,故障難以追溯
平台支援 需要處理器與主機板同時支援 桌面平台普遍支援
價格 較高 較低
典型應用 伺服器、工作站、儲存系統、虛擬化主機 桌上電腦、筆記型電腦、一般終端
ECC 支援並非只取決於記憶體模組本身:處理器內建的記憶體控制器與主機板的線路設計都必須支援 ECC,缺一則檢查碼無法運作。把 ECC 記憶體插在不支援 ECC 的主機板上,在部分平台會被當作普通記憶體運作(ECC 功能靜默失效),在部分平台則完全無法開機。因此升級記憶體前,必須確認整個平台的支援情況。
另一組常被混淆的名詞是 Registered(RDIMM,又稱 Buffered)與 Unbuffered(UDIMM)。這兩者描述的是位址與指令訊號是否經過緩衝器(register)中繼,與 ECC 是獨立的兩件事:市面上存在 ECC UDIMM(帶 ECC 但無緩衝)與 ECC RDIMM(帶 ECC 且有緩衝)。緩衝器可減輕記憶體控制器的電氣負擔,讓每個通道支援更多模組與更大容量,因此大容量伺服器多採用 RDIMM。
RDIMM 與 UDIMM 不可混插,亦不可互相替代;記憶體的秩數(rank)、頻率與時序參數同樣影響兼容性與最終運作速度。混插不同規格的模組時,整組記憶體通常會降至最慢模組的速度運作,部分組合甚至無法通過開機自檢。這是伺服器記憶體升級應以原廠支援清單為準的原因。
記憶體錯誤引起的實際故障徵狀 客戶報告的伺服器問題中,不少最終追溯至記憶體。這類故障的特徵是「無規律」:同一個操作有時正常有時失敗,重啟後問題消失一段時間又再出現,並且無法在測試環境重現。
無故重啟或藍屏/核心崩潰 ——記憶體錯誤落在作業系統核心區域時,系統會保護性停機。若崩潰的模組與錯誤位址不固定,記憶體故障的可能性相當高。個別程式間歇性異常結束 ——某個服務或資料庫進程反覆異常結束,日誌顯示的錯誤位置每次不同,而其他服務正常運作。檔案或資料庫出現無法解釋的錯誤 ——備份檔案的驗證失敗、資料庫報告一致性錯誤、壓縮檔解壓時校驗碼不符,而儲存裝置本身檢查正常。虛擬機隨機出現問題 ——虛擬化主機上多台虛擬機在不同時間出現異常,而問題不集中在某一台虛擬機,往往指向主機層面的硬體。ECC 錯誤計數持續上升 ——在具備 ECC 的系統上,管理介面顯示某條模組或某個記憶體通道的可更正錯誤次數不斷增加,這是最明確的更換訊號。
診斷這類問題的標準做法,是先查閱伺服器管理介面(如 IPMI、iLO、iDRAC)的硬體事件記錄與作業系統日誌,確認有否 ECC 錯誤記錄及對應的記憶體插槽位置;再以記憶體測試工具進行長時間測試,或以拔插排除法逐條測試。有 ECC 記錄的情況下,診斷時間往往由數天縮短至數小時,因為系統已直接指出問題模組的位置。
需要注意的是,偶發的單一可更正錯誤並不一定代表模組故障——軟錯誤本身具隨機性。判斷依據應是錯誤率的趨勢:同一模組的錯誤次數持續上升、或短時間內大量累積,才是更換的理由。伺服器保養與硬體監控的一般做法,可參考本站的伺服器保養包括什麼 一文。
什麼系統應該使用 ECC:香港中小企業的實際選擇 判斷是否需要 ECC,關鍵問題不是「會不會出錯」,而是「一次無法解釋的資料錯誤,對業務造成多大代價」。以下情況應以 ECC 為基本要求。
虛擬化主機 一台虛擬化主機承載多台虛擬機,主機的記憶體錯誤會同時影響其上所有系統。故障影響範圍與記憶體容量同時放大,ECC 屬必要配置。
資料庫與檔案伺服器 資料庫與檔案系統的內容會長期保存並反覆讀寫,記憶體錯誤造成的資料損毀可能經備份傳播,數月後才被發現。這類系統的資料完整性直接依賴 ECC。
會計、業務與客戶資料系統 存放帳目、交易記錄或客戶個人資料的系統,一旦出現靜默資料損毀,除了業務損失,還可能涉及資料準確性與保存責任的問題。
在香港,不少中小企業以一台或兩台伺服器承擔全公司的檔案共享、會計系統與內部應用,並在同一台機器上運行虛擬機。這種「單機承載全部業務」的架構,本身已沒有硬體冗餘,若再省去 ECC,等於在最關鍵的元件上放棄唯一的錯誤防線。相對於伺服器整體造價與停機一天的損失,ECC 記憶體的差價通常屬於小數目。
另一方面,並非所有機器都需要 ECC。員工的桌上電腦、只作瀏覽與文書處理的終端、以及影音播放或數位告示牌的播放器,即使偶發軟錯誤亦只需重啟,採用非 ECC 記憶體是合理選擇。判斷的界線是資料是否需要長期保存、以及故障是否會影響多於一位使用者。
採購與升級時的實務建議:以伺服器原廠的記憶體支援清單為依據,確認 ECC 類型(UDIMM 或 RDIMM)、容量、秩數與頻率;同一組通道內盡量使用同型號同批次的模組;安裝後在管理介面確認 ECC 功能已啟用並開始記錄;把記憶體錯誤計數納入例行檢查項目。伺服器記憶體與儲存架構的整體規劃,可參考本站的伺服器機型與規格 一文。