我又一次在设计评审中遇到了这样的说法,即某个特定场景的概率“小于宇宙射线影响程序的风险”,我突然意识到我根本不知道这个概率是多少。

“既然2-128是340282366920938463463374607431768211456中的1,我认为我们有理由在这里冒险,即使这些计算有几十亿倍的偏差……我相信,宇宙射线把我们搞砸的风险更大。”

这个程序员正确吗? 宇宙射线击中计算机并影响程序执行的概率是多少?


当前回答

我曾经为在太空中飞行的设备编程,然后你(据说,没有人给我看过任何关于这方面的论文,但据说这是业内的常识)可以预期宇宙射线总是会导致错误。

其他回答

我曾经为在太空中飞行的设备编程,然后你(据说,没有人给我看过任何关于这方面的论文,但据说这是业内的常识)可以预期宇宙射线总是会导致错误。

更常见的情况是,噪声会破坏数据。校验和可以在很多层面上解决这个问题;在数据线中,通常有一个奇偶校验位与数据一起传输。这大大降低了腐败的可能性。然后在解析级别上,无意义的数据通常会被忽略,因此即使某些损坏确实通过了奇偶校验位或其他校验和,在大多数情况下也会被忽略。

此外,一些组件被电屏蔽以屏蔽噪音(我猜可能不是宇宙射线)。

但最后,正如其他回答者所说,偶尔会有位或字节被打乱,这取决于它是否是有效字节。最好的情况是,宇宙射线扰乱了其中一个空比特,完全没有影响,或者使计算机崩溃(这是一件好事,因为计算机避免了伤害);但最坏的情况,我相信你可以想象。

您可能还想看看容错硬件。

例如,Stratus Technology构建了名为ftServer的Wintel服务器,它有2或3个锁步“主板”,比较计算结果。(有时在太空飞行器中也会这样做)。

Stratus服务器从定制芯片组发展到背板上的同步。

一个非常类似的(但是是软件)系统是基于Hypervisor的VMWare Fault Tolerance lockstep。

Memory errors are real, and ECC memory does help. Correctly implemented ECC memory will correct single bit errors and detect double bit errors (halting the system if such an error is detected.) You can see this from how regularly people complain about what seems to be a software problem that is resolved by running Memtest86 and discovering bad memory. Of course a transient failure caused by a cosmic ray is different to a consistently failing piece of memory, but it is relevant to the broader question of how much you should trust your memory to operate correctly.

基于20 MB常驻大小的分析可能适用于普通应用程序,但大型系统通常有多个具有较大主存的服务器。

有趣的链接:http://cr.yp.to/hardware/ecc.html

不幸的是,海盗链接在页面似乎死了,所以查看海盗链接在这里代替。

显然,这并非微不足道。这篇《新科学家》的文章引用了一份英特尔专利申请:

“宇宙射线引发的电脑死机已经发生过,而且随着芯片中器件(例如晶体管)尺寸的减小,预计死机的频率将会增加。这个问题预计将成为未来十年计算机可靠性的主要限制因素。”

你可以在这里阅读完整的专利。