【问题标题】:Probability of hardware related disk or memory corruption?硬件相关磁盘或内存损坏的可能性?
【发布时间】:2010-09-15 09:25:25
【问题描述】:

我有几百台计算机在运行一个应用程序。在一台计算机上,我看到在我从 SQLite 中提取的某些字符串上错误地设置了单个位的两个实例。如果这是我的开发计算机,我会假设我在某个地方有错误,但肯定有一些安装次数,此时我会开始看到罕见的基于硬件的错误。

这当然取决于我做了多少 IO,但是当有机会看到这种事情时,是否有任何经验法则?例如,对于 TCP 数据包,this paper 确定“1600 万到 100 亿个数据包中大约有 1 个”会发生静默、未被检测到的损坏。

很遗憾,不太可能在相关机器上运行内存/磁盘检查器。

【问题讨论】:

    标签: sqlite hardware corruption


    【解决方案1】:

    当我注意到奇怪的事情发生时,我的策略是:

    1. 检查代码中是否存在错误
    2. 检查使用的库/工具中是否存在错误(SQLite,此处)
    3. 检查编译器是否存在错误
    4. 然后,并且只有在那时,检查硬件故障

    在我长达 10 年的职业生涯中,99.99% 的错误与软件相关。

    希望这会有所帮助。

    【讨论】:

    • 如果在自定义操作系统上工作,您还应该添加检查驱动程序或 IO 控制器。
    • 好建议!幸运的是,只需切换测试硬件并查看故障是否移动,就更容易快速排除硬件故障。如果硬件足够不同并且您仍然失败,那么很有可能不是硬件。
    • 根据我的经验,硬件、磁盘和 RAM 都非常故障。它不是 99.99%。
    【解决方案2】:

    有细微的错误,它可能随时发生,并且来自多个来源,甚至是most unlikely

    您可以看到单台机器上发生错误,最好的选择是处理损坏,而不是依靠统计数据来告诉您何时可能出现问题。虽然错误可能是由于外部因素造成的,但如果您看到不止一个错误,最好让 memchecker 在机器上运行以检查其硬件是否存在故障。另一种选择是相信运气,你不会看到完全失败。

    【讨论】:

      【解决方案3】:

      会发生位错误。考虑使用 CRC 或其他类型的错误检测/纠正机制来保护您的数据。它发生的几率取决于你拥有什么样的硬件。如果您有带有 ECC 的内存,那么它比没有的可能性要小,但即使是 ECC 内存也会变坏并且可能无法纠正错误。如果有数百台计算机,我会说奇怪的硬件错误很有可能每天都会发生。

      【讨论】:

        【解决方案4】:

        "Wikipedia: ECC memory" 说 “最近的 DRAM 测试给出了广泛变化的错误率,差异超过 7 个数量级,范围从 10^-10 到 10^-17 错误/bit·h,大约 1 位错误,每小时,每 GB 内存到 1 位错误,每世纪,每 GB 内存。[7][11][12]"

        即使我们使用每千兆字节每世纪 1 位错误的最乐观估计,如果您有一个由 100 台计算机组成的集群,每台计算机具有 2 GB 的 RAM,这意味着您每年会看到两次位错误。 (这仅包括 RAM 位错误。您提到了 TCP 数据包未检测到损坏,您还可能考虑磁盘驱动器故障、电源线意外拔出、冷却风扇故障等)。 更悲观的估计意味着您会更频繁地看到误码——正如史蒂夫贝克所说,误码是不可避免的。

        【讨论】:

          【解决方案5】:

          关掉那台机器。在我目前的职位(约 7 年)中,我曾经见过一次由硬件内存错误引起的蓝屏。如果您在同一台机器上看到两次位错误故障,那么您很有可能找到了罪魁祸首。在同一时期,我看到了几十个磁盘控制器故障/磁盘故障/注册表损坏蓝屏。所以它们很少见,但确实会发生。

          在网络方面,我们遇到过一个案例,3d 方供应商的 WAN 压缩设备错误地将我们的应用 TCP 数据包压缩在一起,然后对其进行了良好的 CRC。至少可以说,这造成了严重破坏。

          【讨论】:

          • 如果您在不止一台机器上看到您认为的位错误,请不要费心切换机器 ;)
          猜你喜欢
          • 1970-01-01
          • 2013-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-04
          • 1970-01-01
          • 2021-07-13
          • 1970-01-01
          相关资源
          最近更新 更多