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

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

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


当前回答

维基百科引用了IBM在90年代的一项研究,该研究表明“计算机通常每个月每256兆字节的RAM中会出现一次宇宙射线引起的错误。”不幸的是,引用的是《科学美国人》上的一篇文章,该文章没有提供任何进一步的参考文献。就我个人而言,我发现这个数字非常高,但也许大多数由宇宙射线引起的记忆错误不会引起任何实际或明显的问题。

另一方面,当涉及到软件场景时,人们谈论概率通常不知道他们在谈论什么。

其他回答

维基百科引用了IBM在90年代的一项研究,该研究表明“计算机通常每个月每256兆字节的RAM中会出现一次宇宙射线引起的错误。”不幸的是,引用的是《科学美国人》上的一篇文章,该文章没有提供任何进一步的参考文献。就我个人而言,我发现这个数字非常高,但也许大多数由宇宙射线引起的记忆错误不会引起任何实际或明显的问题。

另一方面,当涉及到软件场景时,人们谈论概率通常不知道他们在谈论什么。

如果一个程序是生命攸关的(如果它失败了,它会杀死某人),那么它需要以这样一种方式来编写,它要么是故障安全的,要么是从这种失败中自动恢复。所有其他节目,YMMV。

丰田就是一个很好的例子。说什么你会油门电缆,但它不是软件。

参见http://en.wikipedia.org/wiki/Therac-25

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

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

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

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

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

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

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

我经历过这种情况——宇宙射线翻转一点并不罕见,但一个人观察到这种情况的可能性很小。

2004年,我正在为一个安装程序开发一个压缩工具。我的测试数据是一些Adobe安装文件,压缩了大约500 MB或更多。

在冗长的压缩运行和解压运行以测试完整性之后,FC /B显示一个字节不同。

在这一个字节内,MSB翻转了。 我也急了,担心我有一个疯狂的bug,它只会在非常特定的条件下出现——我甚至不知道从哪里开始寻找。

但有声音让我再做一次测试。我运行它,它通过了。我设置了一个脚本,在一夜之间运行测试5次。到了早上,5个都已经过去了。

所以这绝对是宇宙射线位翻转。