V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Jinnrry
V2EX  ›  硬件

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

  •  1
     
  •   Jinnrry · 72 天前 · 3896 次点击
    这是一个创建于 72 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我记得很久很久以前,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 数据结构有兼容处理

    45 条回复    2024-07-15 15:06:04 +08:00
    xupefei
        1
    xupefei  
       72 天前 via iPhone
    你得把电脑搬到核反应堆里面才能看到这个现象。
    xuelu520
        2
    xuelu520  
       72 天前
    概率比你中 500W 概率还要低
    R18
        3
    R18  
       72 天前
    Jim N. Gray and Catharine van Ingen: "Empirical Measurements of Disk Failure
    Rates and Error Rates," Microsoft Research, MSR-TR-2005-166, December 2005
    R18
        4
    R18  
       72 天前
    现代计算机上,你完全可以忽略。除非你用了不合格的内存,或者处于辐射过大。
    DonaldErvinKnuth
        5
    DonaldErvinKnuth  
       72 天前
    正好做这个。出现的概率很低。不同的产品级别,要求不一样,比如汽车上的,企业级的,消费类的,消费类又有普通消费和游戏等。要求高的出厂会测试的更严格,用的原料更好,要求低的出厂要求会低,或者会有要求高过滤掉的再来测试,合格后出厂,类似于 i9 i7 i5 一样,同样的芯片,好的用 i9 ,不好的锁核下放。

    但是出现这种比特翻转的概率很低,即使是普通消费类,出厂测试都是在高温几十或者上百度,低温零下几十度,反复测试几个小时甚至几十个小时,然后才会在一批货中出现几个。
    totoro625
        6
    totoro625  
       72 天前   ❤️ 3

    来源:/t/975376 https://www.bilibili.com/video/BV1AW4y1y796

    个人体验认为,品牌全新内存比不知来源的二手任何牌子的 ECC 内存可靠
    如果是淘宝买的便宜 ECC ,宁可不上 ECC
    真实经历就是淘宝买的十铨内存,Windows 经常蓝屏,换了京东买的英睿达的就好了
    Reficul
        7
    Reficul  
       72 天前
    正常的时候大概率不会反转,但是反转了之后可能导致灾难性问题的话还是得上 ECC 。而且在内存快不行的时候,错误率可能会上升。

    如果数据不持久化,大不了就是花屏或者程序莫名其妙挂掉,重启之后数据 reset 了就好了。但是对于 ZFS 这类依赖内存的文件系统,可能会把数据搞炸。
    processzzp
        8
    processzzp  
       72 天前   ❤️ 2
    可以看看这篇 NASA 的 PPT ,AMD CPU 总共吃了 17 兆 rad 的辐射,都没有出现损坏; DDR3 内存的耐辐射能力稍微低一点,但也吃了 1.1k rad 的辐射。现代工艺制程的芯片,耐辐射能力比老芯片强了好多倍
    https://nepp.nasa.gov/workshops/etw2013/talks/Wed_June12_2013/1140_LaBel_ AMD Processor Radiation Test Results.pdf
    v2tudnew
        9
    v2tudnew  
       72 天前
    非关键数据损坏问题也不大,但不知道系统是否对关键程序、数据做校验。
    tool2dx
        10
    tool2dx  
       72 天前
    @totoro625 我的经历是杂牌内存,连默认频率都不能长期稳定跑。去主板 Bios 把内存频率下调一档,马上就稳定很多。
    yinmin
        11
    yinmin  
       72 天前 via iPhone
    op 应该想了解 Rowhammer 攻击吧,你的代码是不会发生翻转的,要反复对某个特定内存单元快速读/写,导致隔壁单元的内存翻转。
    cheng6563
        12
    cheng6563  
       72 天前
    dell 普通台式电脑,挂了 MySQL 当开发机使用了约 2 年,然后之后基本每个月文件系统都要炸一次,你看着办。
    liu731
        13
    liu731  
       72 天前
    机房在福岛吗?真没必要担心这个问题,其他原因造成的宕机可能性更高。
    kaedeair
        14
    kaedeair  
       72 天前
    概率比较低,需要大量频繁数据写入的场景下才比较容易观察到
    GeruzoniAnsasu
        15
    GeruzoniAnsasu  
       72 天前
    看这个

    https://zhuanlan.zhihu.com/p/37235131
    https://www.infocomm-journal.com/cjnis/article/2018/2096-109x/2096-109x-4-1-00069.shtml

    针对性构造的 bit 翻转攻击是可能要结合电路结构来设计 payload 的
    SkywalkerJi
        16
    SkywalkerJi  
       72 天前
    试试液氮超频有可能会出现。
    shadowyue
        17
    shadowyue  
       72 天前
    测久点,普通环境下,花的电费能让供电局专门来关照的时候,是不是就能测出来了?
    Jinnrry
        18
    Jinnrry  
    OP
       72 天前 via Android
    @liu731
    @R18
    @yinmin 单纯无聊,想复现一下位翻转看看
    liaohongxing
        19
    liaohongxing  
       72 天前
    直接上 DDR5 ,由于 DDR5 频率。容易出出,默认都自带 odecc , 比没带 ecc 的强一丢丢
    yjsdaniel
        20
    yjsdaniel  
       72 天前   ❤️ 1
    你不会是接了俄罗斯的绕月卫星改进项目外包订单了吧。。。。他们宣称的就是出现了此问题。
    ebushicao
        21
    ebushicao  
       72 天前
    我觉得这就和钓鱼不戴头盔出现被人用砖头砸头的情况的概率一样。
    noahhhh
        22
    noahhhh  
       72 天前 via Android
    内存越大概率越高,128GB 无 ECC 基本每个月要重启一遍,自己台式机除更新从不重启,从没遇到问题
    leonshaw
        23
    leonshaw  
       72 天前
    跑 memtest86
    xtreme1
        24
    xtreme1  
       72 天前   ❤️ 1
    你加个玩内存 oc 的群, 里面一堆人天天处心积虑绞尽脑汁地想怎么才能不翻转.
    tool2dx
        25
    tool2dx  
       72 天前
    @xtreme1 哈哈,这倒是真的。给内存超频,往极限超,分分钟翻转。
    ETiV
        26
    ETiV  
       72 天前 via iPhone   ❤️ 5
    我们 AWS 生产环境遇到过一次(疑似),而且是灾难级别的

    程序端打印的日志跟 slow query 里的语句差了一个 bit ,这个翻转了的 bit 把 where 给注释掉了,然后这条 update 语句更新了全表…
    moudy
        27
    moudy  
       72 天前
    @yjsdaniel #20 这种就是挂了之后找不到问题,推给内存了吧
    ouqihang
        28
    ouqihang  
       72 天前 via Android
    我觉得现在消费级电脑,内存出错的概率还是挺大的。游戏闪退,后来排查到内存太热😥,内存大概 55 度到 60 度开始不稳定,但闪退后系统还是好的。系统里也有出错不过系统纠正过。所以服务器 ecc 内存频率低,还要严格按照厂家的参数跑不能超频。
    以前用一个挺古老的软件做计算化学,到自己用的那轮,一组人算出来的结果不相同,大概内容是找分子的最低能量结构。实验员说应该结果都一样,但这批电脑上几天加过内存,戴尔商用机。当然了复杂的任务是扔服务器跑,家用电脑连续开几天也怕死机,本地运行只是用来验证是不是能跑。
    但学期末有人赶进度,服务器不够就开几台台式机跑。
    JensenQian
        29
    JensenQian  
       72 天前 via Android
    普通电脑基本上每天重启下就好了
    1145148964
        30
    1145148964  
       72 天前
    一个关键滴的问题是你在淘宝买到滴 ECC 内存都是老板亲自动手装的。标签也是老板贴滴。
    kinkin666
        31
    kinkin666  
       72 天前
    @ETiV 如此炫酷,好像有点体会到服务器 ecc 内存的重要性了
    m1nm13
        32
    m1nm13  
       72 天前
    @totoro625 真的不是 MEMTEST 都不过的内存吗....
    privil
        33
    privil  
       72 天前
    @ETiV #26 所以 AWS 的服务器没用 ECC 内存。话说我似乎看过你们的文章。
    GrayXu
        34
    GrayXu  
       72 天前
    个人机器无所谓。
    scale 到大型数据中心这个场景来讨论,内存错误就是常见的错误。
    直接上数据,阿里云上二十五万台服务器在八个月时间里,有三万多台机器出现 CE 内存错误(七千万多次)。UE 导致的 failure 有三千多的工单。
    ETiV
        35
    ETiV  
       72 天前
    @privil @kinkin666 我并没有表述 AWS 的服务器没有用 ECC 内存

    可能是我们的机器实在是太多了,所以遇到了非常极端的小概率问题的可能性也是有的吧…

    因为在这个事儿之前,我刚读过 Dropbox 关于它客户端 bitflip 相关问题的文章,因为 Dropbox 的用户体量就非常巨大,他们的客户端上的 bitflip 很常见…(文章里是这么说的)

    ----
    当然我们遇到的这个问题并没有定论,而且 AWS 的服务器不可能不用 ECC 内存,毕竟那么大的体量,出了问题他们担待不起。

    我对于问题原因的判断单纯因为两端的日志比对,字符 3 ( 0x33 ) 变成了字符 #( 0x23 ),就一个 bit 之差…
    cest
        36
    cest  
       72 天前
    @ETiV #35
    ecc 也不是一定能抓到,抓到了修复也不是一定能修复

    不能出错的得上多套系统比对
    Kiriya
        37
    Kiriya  
       72 天前
    家用计算机不超频使用基本不用考虑
    kinkin666
        38
    kinkin666  
       71 天前
    wiki ECC_memory

    The most-common error correcting code, a single-error correction and double-error detection (SECDED) Hamming code, allows a single-bit error to be corrected and (in the usual configuration, with an extra parity bit) double-bit errors to be detected.

    那看来普通系统还是偶尔重启或者把实例轮流渐入渐出清爽点
    yanqiyu
        39
    yanqiyu  
       71 天前
    我唯一一次意识到 bitrot 有可观的概率是同学告诉我他们在散列上取数的电脑爱死机(电脑暴露在中子束流下面)
    yanqiyu
        40
    yanqiyu  
       71 天前
    草错别字*,是散裂不是散列

    以及原文代码,我不清楚 golang 里面的 bool 类型具体内存布局是怎样的,有可能你只用了一个字甚至更长的内存区域里面的一个 bit ,那就效率更低了
    kenvix
        41
    kenvix  
       71 天前
    哪有你这样测试的?你这种代码能测出来就有鬼了,至少也得全设置成 0xFF ,sleep ,再等上一个月再取出查看
    yanqiyu
        42
    yanqiyu  
       71 天前
    ^最好还要 mlock 一段内存下来,设置成各种各样的 pattern ,要么 sleep 之后检查,要么频繁写入频繁检查
    kenvix
        43
    kenvix  
       71 天前
    @xupefei #1 你想错了,高温就够了。把内存加热到 85 度工况你看看错误率能飙到多少
    kenvix
        44
    kenvix  
       71 天前
    @xupefei #1 啊,不过他这个测试代码肯定跑不出来,得用 memtest
    lx0758
        45
    lx0758  
       67 天前
    我的小主机, 买的 2400 的内存, 经常蓝屏. BIOS 改成 2133 , 连续运行一年都没问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1649 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:49 · PVG 00:49 · LAX 09:49 · JFK 12:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.