題 單位內存錯誤將如何影響Linux?


我正在重建一個已有三年曆史的AMD Athlon 5000系統,它有一個帶有4個內存插槽的“華擎NF7G-FullHD”主板,標有“DDR2 800”,據稱總容量為8GB。除了550W PS和500GB磁盤,我買了一個“配對” 2 ea。 2GB DIMM遺憾的是,在多個位置存在持續的單比特錯誤(見圖)。

使用這樣的內存在這個系統上運行Linux會有什麼影響? ,不穩定性,未檢測到的錯誤或性能低下的可能性有多大?是否會出現操作系統崩潰,段錯誤,各種應用程序故障或什麼?有沒有辦法映射或禁用不良的RAM塊?

memtest86 picture

注意,4個內存插槽標記為DDRII_1,2,3,4; 1和2是黃色,3和4是橙色。上面的Memtest86圖片是在填充(新舊,新舊)訂單時拍攝的。錯誤也發生在具有填充順序(舊,舊,新,新)的類似地址,具有與圖片中相同的內存訪問率(約2.9GB / s)。填充(舊的,舊的, - , - )或(舊的, - ,舊的, - )或(新的, - ,新的, - )在幾個小時的測試中沒有發生錯誤,但是(新的,新的, - , - )由於某種原因沒有進入或通過BIOS和重置按鈕似乎沒有效果,沒有視頻信號。填充3個插槽, 例如 (new1,old,new0, - ) 在1.5小時的測試中發生一次錯誤(位於RAM的第一GB); with(old,old,new0, - ),在2小時的測試中沒有錯誤。 6GB配置的性能問題是內存訪問速率僅為1.7GB /秒。

問題摘要:在具有內存的Linux上運行Linux會對一些單比特錯誤產生什麼影響?除了更換RAM之外還有解決方法嗎?


4
2017-11-19 20:04


起源


您可以 平時 通過提高RAM電壓,提高延遲和/或降低FSB頻率來解決這些錯誤。 - David Schwartz
重新延遲,您是否知道哪些4-4-4-12 CAS號碼(如圖所示)需要更改? - James Waldby - jwpat7
這些芯片的技術規格規定CAS延遲為5。 - Dennis
您需要將電壓升高到2.0V或將CAS延遲增加到5.至少,如果我在網上看到的規格是正確的,那就是他們所說的。 (他們沒有附帶規格嗎?) - David Schwartz


答案:


  1. 內存訪問率較低,只有3個芯片,因為雙通道內存應始終成對安裝。

  2. 單個位錯誤可能導致幾乎所有事情發生。它的可能性取決於你的記憶力有多差,但抓住這些機會並不是一個好主意。系統不穩定是你應該希望的。您還可以在內存的這一部分中存儲系統關鍵文件(或對您來說很重要的任何其他文件),修改它並覆蓋原始文件。因此,單個位錯誤可能會破壞整個操作系統。

  3. 有可能只有一根記憶棒有缺陷(可能是新的1)。 PYG的內存提供終身保修,因此您可以嘗試使用它。我聽說PYG的記憶和客戶服務非常糟糕,但我無法確定。


8
2017-11-19 20:43



我會要求更換,但我正在尋找替代方案以防出現問題或延誤更換。 - James Waldby - jwpat7
您必須將錯誤的桿子交回來進行更換,所以現在只需使用4 GiB。 - Dennis


如上所述,單位內存錯誤可能導致幾乎任何問題,或者您可能根本不會注意到它。

我之前有一個糟糕的記憶棒,而RAM中的壞點實際上意味著Windows有時會起作用,但它會經常腐敗自己。你永遠無法預測將被分配到系統中任何給定RAM的位置(由於OS分配內存的方式),而你可能會幸運,只有它打破一些不重要的程序或損壞一個圖形有一個好的它可能會做得更糟,並且你使用一塊糟糕的RAM來冒險。

Linux支持 BadMem 如果我沒記錯的話,這可能意味著你可以“映射”壞的記憶塊。如果它支持最新的內核,看看它是否對你有用,我無法解決。

我的建議如下:在短期內為數據丟失和一般系統不穩定做好準備,從長遠來看,你應該弄清楚哪個棒有缺陷並替換它。


5
2017-11-19 21:04





為了能夠運行程序,計算機從內存中獲取有關如何操作的指令。 (程序加載到內存中)。說明只是數字序列,是計算機語言。

讓我們構建一個簡單的語言 1 =複製, 3 =來自, 4 =到

1(副本),50,3(從),100,4(至),200;

因此,計算機的數字序列1,50,3,100,4,200可以將50字節的數據從存儲器位置100複製到存儲器位置200.這與將50個襪子從一個抽屜移動到另一個抽屜的情況相同。

現在,如果內存出現故障且存在單個位錯誤,則數字可能會從1更改為129.因此,假設上述序列中的任何數字都可能更改,則可能會出現許多有趣的錯誤。 如果50變為35或188,或者很容易理解,要復制的數據量將是錯誤的,並且可能會覆蓋內存中的其他數據(可能是指令)。如果1變為5,計算機可能甚至不知道它應該複製任何東西。 因此,如所示,單個位錯誤可能不僅導致單個故障,而且可能導致由第一個錯誤引起的其他錯誤。

Linux(或任何其他操作系統)與計算機上運行的其他程序基本相同:一系列數字告訴計算機該做什麼。 如果此序列被破壞,您的程序將無法使計算機執行預期的操作,因此您可能會遇到各種問題。

還要記住,音樂,視頻或圖片也只是一系列數字,所以同樣的原則也適用於那裡。值得補充的是,根據您的文件,損壞可能不明顯(例如圖片中的壞像素),但這並不意味著文件正常。如果特定字符存儲在錯誤的內存位置,您在網頁上閱讀的文本中甚至可能會出現拼寫錯誤。

存在用於恢復單比特錯誤並且可以檢測兩個比特錯誤(ECC ram)的ram芯片。

希望這可以解釋為什麼如果包含它的數據和/或指令的內存損壞,任何操作系統都將無法工作。解決這個問題最安全的方法是更換破碎的撞錘。同時你可能想要使用memmap內核參數來映射壞內存區域(以下是從我在另一個問題上得到的答案中復制的)。

 memmap=nn[KMG]$ss[KMG]
            [KNL,ACPI] Mark specific memory as reserved.
            Region of memory to be used, from ss to ss+nn.
            Example: Exclude memory from 0x18690000-0x1869ffff
                     memmap=64K$0x18690000
                     or
                     memmap=0x10000$0x18690000

2
2018-01-11 21:12





我有同樣的問題,但發現可用的答案令人困惑和不完整,所以我整理了一個循序漸進的指南,假設盡可能少的背景。

  1. 在“Badram”輸出中運行Memtest86 +(最好從可引導的外部介質中運行)。當Memtest86 +啟動時,鍵入:
  2. “c”(“配置”),然後
  3. “4”(“錯誤報告模式”),然後
  4. 然後是“3”(“錯誤的RAM模式”)
  5. “0”(“繼續”)。
  6. 複製以“badram =”開頭的任何行後面的輸出。
  7. 打開終端(命令行)。
  8. 切換到“grub”文件所在的目錄。例如,“cd / etc / default”。
  9. 使用“root”權限,使用文本編輯器打開“grub”文件(如果您未以“root”身份登錄,請使用“sudo”。您將被要求輸入“root”密碼。):“sudo nano grub“(此示例將用戶更改為”root“並使用”nano“文本編輯器打開文件”grub“。)。
  10. 找到描述memtest的部分。
  11. 取消註釋最後一行(刪除行開頭的特殊字符,例如“#”,“>”或“!”)。這使它處於活動狀態(例如,“#GRUB_BADRAM =”變為“GRUB_BADRAM =”。)。
  12. 將示例地址(在“GRUB_BADRAM =”之後)替換為從Memtest86 +複製的“badram =”輸出(例如,“0x98f548a0,0xfffffffc”)。
  13. 保存(或“寫出”)您的更改。
  14. 在終端(命令行)中,通過鍵入“sudo update-grub”更新“grub.cfg”文件。
  15. 重啟。

2
2017-11-22 18:33



看起來很不錯的答案。輕微的狡辯與“(如果你沒有以”root“身份登錄,”使用“sudo。”你將被要求提供“root”密碼。)“ - sudo要求用戶pw。從 man sudoers,“與su(1)不同,當sudoers需要身份驗證時,它會驗證調用用戶的憑據,而不是目標用戶(或root的)憑據”,除非sudoer標誌另有說明 - James Waldby - jwpat7