Art*_*yom 8 ram data-corruption
我遇到了一些 btrfs 和 ext4 错误。在决定测试我的 RAM 后,我遇到了以下重复错误memtester
。在运行了一段时间后,我总是会遇到类似的错误memtester
。通常在一个小时内,但一次需要4-5个小时。
我的电脑的内存是焊接的。我有额外的空槽。BIOS 中没有禁用板载 RAM 的设置。
我跑了:
memtester
而stressapptest
在Fedora 27默认情况下,安装在USB记忆棒(约10小时)memtester
和stressapptest
Ubuntu 17.10 Live 默认(约 2 小时)memtester
以及stressapptest
在 U 盘上的 Ubuntu 17.10(约 8 小时)# debsums --changed
唯一改变的文件是一个主题的图像。他们没有打印任何错误。
我正在使用带有默认内核的 Ubuntu 17.10(从 17.04 升级)。内核没有被污染。这是一台配备 Intel Haswell i3 的华硕笔记本电脑。
Nouveau 被禁用或启用,错误是可重现的,没有加载 nvidia 二进制驱动程序。
将以下模块列入黑名单: mtd
intel_spi_platform
intel_spi
因为它们不会在默认的 Fedora 27 安装中加载,而且它们似乎会使某些 Lenova 笔记本电脑变砖。错误并没有停止。
uname -a
的输出
Linux hostname 4.13.0-19-generic #22-Ubuntu SMP Mon Dec 4 11:58:07 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
# lsmod
的输出
https://paste.ubuntu.com/26222245/
Fedora 27 的# lsmod
输出
https://paste.ubuntu.com/26226473/
我已经将我的 HDD 放入我认为性能良好的笔记本电脑(备用笔记本电脑)中,并在那里进行了测试。我得到了错误。现在我很确定这是一个软件问题。我从来没有能够在我的笔记本电脑上用新的 Ubuntu 或 Fedora 尝试很多小时来触发错误。
我该怎么办?
错误示例:
Loop 6:
Stuck Address : ok
Random Value : ok
Compare XOR : ok
Compare SUB : ok
Compare MUL : ok
Compare DIV : ok
Compare OR : ok
Compare AND : ok
Sequential Increment: ok
Solid Bits : ok
Block Sequential : ok
Checkerboard : ok
Bit Spread : ok
Bit Flip : testing 262
FAILURE: 0x00000000 != 0xfffffffeffffffff at offset 0x0ef94000.
FAILURE: 0x00000000 != 0x100000000 at offset 0x0ef94008.
FAILURE: 0x00000000 != 0xfffffffeffffffff at offset 0x0ef94010.
FAILURE: 0x00000000 != 0x100000000 at offset 0x0ef94018.
FAILURE: 0x00000000 != 0xfffffffeffffffff at offset 0x0ef94020.
FAILURE: 0x00000000 != 0x100000000 at offset 0x0ef94028.
FAILURE: 0x00000000 != 0xfffffffeffffffff at offset 0x0ef94030.
FAILURE: 0x00000000 != 0x100000000 at offset 0x0ef94038.
Walking Ones : ok
Walking Zeroes : ok
8-bit Writes : ok
16-bit Writes : ok
Run Code Online (Sandbox Code Playgroud)
两个 RAM 插槽已满的类似错误:
Loop 1:
Stuck Address : ok
Random Value : ok
Compare XOR : ok
Compare SUB : ok
Compare MUL : ok
Compare DIV : ok
Compare OR : ok
Compare AND : ok
Sequential Increment: ok
Solid Bits : ok
Block Sequential : ok
Checkerboard : ok
Bit Spread : testing 4
FAILURE: 0x00000000 != 0x00000050 at offset 0x7da80000.
FAILURE: 0x00000000 != 0xffffffffffffffaf at offset 0x7da80008.
FAILURE: 0x00000000 != 0x00000050 at offset 0x7da80010.
FAILURE: 0x00000000 != 0xffffffffffffffaf at offset 0x7da80018.
FAILURE: 0x00000000 != 0x00000050 at offset 0x7da80020.
FAILURE: 0x00000000 != 0xffffffffffffffaf at offset 0x7da80028.
FAILURE: 0x00000000 != 0x00000050 at offset 0x7da80030.
FAILURE: 0x00000000 != 0xffffffffffffffaf at offset 0x7da80038.
Bit Flip : setting 141
Run Code Online (Sandbox Code Playgroud)
错误stressapptest
:
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e000(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e008(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e010(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e018(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e020(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e028(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e030(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e038(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Run Code Online (Sandbox Code Playgroud)
我怀疑 Ubuntu 的配置与我的笔记本电脑的硬件相结合是导致这些错误的原因。几乎每次都是八包。
关于 btrfs 错误;我使用的是 17.04。我在 btrfs 的 irc 上问过。有人告诉我这可能是硬件错误或内存管理错误。btrfs 的元数据页面的一部分被零填充,就像我现在遇到的那样。我确实只运行了几遍 memtester,切换到 ext4 并将责任归咎于 nvidia 二进制驱动程序。
我使用的命令及其参数:
# stressapptest -M 10000 -s 1800
Run Code Online (Sandbox Code Playgroud)
10000 是我可以测试的可用内存。我通过free -m
-s`得到它是秒。
# memtester 4096
Run Code Online (Sandbox Code Playgroud)
笔记本电脑的 CPU 有 2 个内核,所以我通常会启动两个实例。4096 是当前可用内存的一半free -m
此问答中的答案已被删除:
您是否已经尝试重新安装 ubuntu,因为这听起来像是操作系统级别的内存管理故障
我的答案是相似的,因为它涉及非常低级的内存管理;内核级别的KASLR 。
KASLR代表内核地址空间布局随机化。 我从来没有听过它大声说出来,但在我心里我把它读成“Casler”。想想机器里友好的幽灵。KASLR 是一种安全措施,用于随机化内核模块所在的内存位置。从理论上讲,当您不能依赖始终位于同一内存位置的同一位代码时,内核就更难破解。
KASLR 操作可以被视为与内存测试器相反,内存测试器重复读取和写入相同的内存位置,期望不会发生任何变化。这些是对立的,它吸引了我(注意到习语),对 KASLR 和内存错误进行谷歌搜索。一个看似不相关的问题可能值得在github上发布一条链接到此问答的消息。原因是他们认为他们是唯一受到移动内存地址影响的人(如果我正确地阅读了他们的线程)。前三个点击来自RedHat,我不愿意链接到他们,因为他们的网站是谷歌搜索机器人上的部分帖子,然后他们让你付费阅读。
当 KASLR 将内核“内容”加载到内存映射的中间时,存在一些已知的问题,而这是不应该执行的。不幸的是,我不记得上周找到的包含在今晚答案中的链接。该链接有一个补丁/解决方法,用于指示 KASLR 不使用特定的内存位置。
在确认 KASLR 和内存位置的已知问题后,我在问题下评论以禁用它 KASLR 并重新运行内存测试。回复说它似乎成功了,所以我发布了这个答案。
尽管我已经使用 grub 内核命令行选项“kaslr”好几年了,但至少从版本4.12开始它就成为内核默认选项。要消除加载 KASLR,请编辑/etc/default/grub
并更改此行:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nokaslr"
Run Code Online (Sandbox Code Playgroud)
除了“安静”和“飞溅”之外,您可能还有其他选择。重要的一步是添加“nokaslr”并保留其他选项。
然后保存文件并运行:
sudo update-grub
Run Code Online (Sandbox Code Playgroud)
当然,禁用 KASLR 的另一种方法是在未自动包含 KASLR 时,在 Ubuntu 16.04.1 下简单地使用较旧的内核(例如 4.4.0)。
这个问题听起来很像 RAM 的随机位损坏。根据我的经验,MemTest86 对于硬件测试来说“太简单了”。它会发现内存确实很差,但轻微的问题往往会被忽视。
如果您想知道您的内存是否良好,请尝试在自检/折磨模式下运行Prime95 ,并配置为使用尽可能多的 RAM。
另一个好的测试是运行双面划锤测试几个小时。
我相信,如果 Prime95 和双面 Rowhammer 无法发现您的内存有任何问题,它可能会正常工作。然而,即使你的记忆力稍差(曾经做过这些,但从长远来看,数据已损坏),简单地运行 MemTest86、编译程序、安装操作系统、玩游戏似乎也能工作。