普通不用 ECC 内存的电脑出现位翻转的概率有多大?

72 天前
 Jinnrry

我记得很久很久以前,V 站有一次讨论要不要上 ECC 的帖子,当时有大佬给出了一段代码,大致是声明一个很大很大的数组,然后全部赋值成 1 ,然后再反复遍历检查,有可能出现值为 0 的结果。但是我现在无论如何都搜不到那篇帖子了。有没有大佬再给写个复现代码?

我拿 Go 写的

package main

import "fmt"

func main() {
	var arg [10000000000]bool

	for {
		for i := 0; i < 10000000000; i++ {
			arg[i] = true
		}
		for i := 0; i < 10000000000; i++ {
			if !arg[i] {
				fmt.Println("位翻转了!")
				return
			}
		}
		fmt.Println("!!")
	}

}

我在 mac 上运行了很久,都没发生翻转,不知道是概率太低还是 golang 的 bool 数据结构有兼容处理

3897 次点击
所在节点    硬件
45 条回复
kenvix
71 天前
哪有你这样测试的?你这种代码能测出来就有鬼了,至少也得全设置成 0xFF ,sleep ,再等上一个月再取出查看
yanqiyu
71 天前
^最好还要 mlock 一段内存下来,设置成各种各样的 pattern ,要么 sleep 之后检查,要么频繁写入频繁检查
kenvix
71 天前
@xupefei #1 你想错了,高温就够了。把内存加热到 85 度工况你看看错误率能飙到多少
kenvix
71 天前
@xupefei #1 啊,不过他这个测试代码肯定跑不出来,得用 memtest
lx0758
67 天前
我的小主机, 买的 2400 的内存, 经常蓝屏. BIOS 改成 2133 , 连续运行一年都没问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1056179

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX