Memory
當 memtester 的輸出顯示記憶體不好時,我該怎麼辦?
Memtester 已輸出以下響應,
memtester version 4.3.0 (64-bit) Copyright (C) 2001-2012 Charles Cazabon. Licensed under the GNU General Public License version 2 (only). pagesize is 4096 pagesizemask is 0xfffffffffffff000 want 10240MB (10737418240 bytes) got 10240MB (10737418240 bytes), trying mlock ...locked. Loop 1/1: Stuck Address : testing 1FAILURE: possible bad address line at offset 0x12325b7a8. Skipping to next test... Random Value : ok FAILURE: 0xa003776ad640ac0c != 0xe003776ad640ac0c at offset 0x7a4f2680. Compare XOR : FAILURE: 0xe7139f89d94112c0 != 0x27139f89d94112c0 at offset 0x7a4f2680. FAILURE: 0x4e53ee3a9704bdf5 != 0x4a53ee3a9704bdf5 at offset 0x950b4930. Compare SUB : FAILURE: 0x96ecab120464e9c0 != 0xd6ecab120464e9c0 at offset 0x7a4f2680. FAILURE: 0x7f67022cef637b99 != 0x2b67022cef637b99 at offset 0x950b4930. FAILURE: 0x96c38c9f6e6dd229 != 0xd6c38c9f6e6dd229 at offset 0xe40d2b50. Compare MUL : FAILURE: 0x00000001 != 0x00000002 at offset 0x69394a08. FAILURE: 0x00000001 != 0x00000000 at offset 0x950b4930. FAILURE: 0x400000000000001 != 0x00000001 at offset 0xea6b07a8. FAILURE: 0x400000000000000 != 0x00000000 at offset 0xfb853610. FAILURE: 0x00000000 != 0x800000000000000 at offset 0x12bf3ed10. Compare DIV : FAILURE: 0x777fd9f1ddc6c1cd != 0x777fd9f1ddc6c1cf at offset 0x69394a08. FAILURE: 0x777fd9f1ddc6c1cd != 0x7f7fd9f1ddc6c1cd at offset 0x12bf3ed10. Compare OR : FAILURE: 0x367600d19dc6c040 != 0x367600d19dc6c042 at offset 0x69394a08. FAILURE: 0x367600d19dc6c040 != 0x767600d19dc6c040 at offset 0x7a4f2680. FAILURE: 0x367600d19dc6c040 != 0x3e7600d19dc6c040 at offset 0x12bf3ed10. Compare AND : Sequential Increment: ok Solid Bits : testing 0FAILURE: 0x4000000000000000 != 0x00000000 at offset 0x12325b7a8. Block Sequential : testing 0FAILURE: 0x400000000000000 != 0x00000000 at offset 0xfb853610. Checkerboard : testing 1FAILURE: 0xaaaaaaaaaaaaaaaa != 0xeaaaaaaaaaaaaaaa at offset 0x7a4f2680. Bit Spread : testing 1FAILURE: 0xdffffffffffffff5 != 0xfffffffffffffff5 at offset 0x102e353e8. Bit Flip : testing 0FAILURE: 0x4000000000000001 != 0x00000001 at offset 0x12325b7a8. Walking Ones : testing 40FAILURE: 0xdffffeffffffffff != 0xfffffeffffffffff at offset 0x102e353e8. Walking Zeroes : testing 0FAILURE: 0x400000000000001 != 0x00000001 at offset 0xea6b07a8. FAILURE: 0x400000000000001 != 0x00000001 at offset 0xfb853610. 8-bit Writes : -FAILURE: 0xfeefa0a577dfa825 != 0xdeefa0a577dfa825 at offset 0x4bd600e8. 16-bit Writes : -FAILURE: 0xf3dfa5fff79e950b != 0xf7dfa5fff79e950b at offset 0x2b04cca8. FAILURE: 0x3ffb3fc56e7532c1 != 0x7ffb3fc56e7532c1 at offset 0xe40d2b50. Done.
很明顯,這表明記性不好。是否可以在核心或管理程序中將此記憶體標記為壞並繼續使用它?還是將其放入文件 13 併購買替換?
除非您可以合理快速地檢測到錯誤,例如使用 ECC 記憶體或使用 定期重新啟動,
memtest
否則最好更換模組。您冒著無聲數據損壞的風險。
memmap
您可以使用以下選項告訴核心通過保留它來忽略記憶體(有關詳細資訊,請參閱核心文件):
memmap=nn[KMG]$ss[KMG]
$$ KNL,ACPI $$將特定記憶體標記為保留。要保留的記憶體區域是 from
ss
到ss+nn
。 範例:從 0x18690000-0x1869ffff 排除記憶體memmap=64K$0x18690000
或者
memmap=0x10000$0x18690000
一些引導載入程序可能在 ’ 之前需要一個轉義字元 $ ‘, like Grub2, otherwise ’ $ ’ 並且會吃掉下面的數字。
這裡的困難部分是弄清楚要保留哪些地址範圍;
memtester
為您提供來自其虛擬地址空間的地址,這些地址與memmap
.最簡單的方法是使用 啟動
memtest
,您會看到類似這樣的內容4c494e5558726c7a bad mem addr 0x000000012f9eaa78 - 0x000000012f9eaa80 reserved 4c494e5558726c7a bad mem addr 0x00000001b86fe928 - 0x00000001b86fe930 reserved 0x000000012f9eaa80 - 0x00000001b86fe928 pattern 4c494e5558726c7a
然後核心將停用它檢測到的錯誤範圍。您可以使用 繼續引導
memtest
,或者使用保留的地址範圍來構造memmap
參數。