ECC 与非 ECC

ECC 与非 ECC

我想构建一个始终处于运行状态的存储服务器(基于 GNU/Linux 或 FreeBSD)。为了防止数据损坏(这种情况不太可能发生,因为我从未遇到过这样的问题,但谨慎一点总比后悔好),我想使用 ECC RAM。

尽管不如 EDD (?)(后者价格昂贵得多)并且提供了额外的保护。ECC 似乎只能纠正单个位错误。

ECC 注册的 RAM 仅适用于工作站/服务器主板,例如 Intel Xeon 或 AMD interlagos/magny-cours/valencia g34 或 c32。

无缓冲 ECC 可用于华硕主板上的 Intel Xeon lga1155 或 AMD AM3+。

第二种选择在处理器和主板方面会便宜得多,而且我怀疑我是否需要超过 16GB 的 RAM(4x4 GB ECC 无缓冲是最大的经济实惠的内存条)。

我的疑问是(主要涉及华硕 am3+ 主板):ECC 无缓冲 RAM 是否与 ECC 寄存器 RAM 一样好(从安全性和可靠性的角度来看)?或者它是一个更糟糕的选择。我不太在乎速度。

更多详细信息:服务器将使用最多可容纳 24 个 3.5 英寸驱动器的服务器机箱,并且应尽可能少地消耗电力。从这个意义上讲,LGA1155 似乎是更好的选择(TDP ~ 20-95W),而其他产品(>80W)的价格是其两倍。欢迎提出任何建议。假设空闲时功耗低于 120W(约 24 个硬盘中有 10 个)。

答案1

好吧,如果您只使用 16GB RAM(这不是服务器 RAM 范围),那么使用任何标准的台式机 RAM/系统就足够了。

如果它只是一个存储服务器,你甚至不需要那么高的CPU性能。

就像你说的,选择 Sandy Bridge,它将为你带来一个很酷、性能强大且可靠的系统。

说到 16GB RAM 范围,您不必担心 ECC 问题。

答案2

ECC 似乎只能纠正单个位错误。

正确。要纠正更多错误需要更多位。事实上,您已经使用 10 位来存储 8 位信息,‘浪费’了 20% 的内存芯片以允许单位纠正和最多两位错误检测。

它的工作原理如下。想象一下01。如果我读到任何一个,那么我只希望我读到的是正确的。如果 0 被某种宇宙辐射或坏芯片翻转为 1,那么我永远不会知道。

过去我们尝试用奇偶校验来解决这个问题。奇偶校验是每存储 8 位添加第九位。我们检查字节中有多少个 0 和 1。第九位被设置为偶数。(对于偶校验)如果你读了一个字节,发现数字是错误的,那么你就知道出了问题。但你不知道哪个位是错的。

ECC 对此进行了扩展。它使用 10 位和一个复杂的算法来发现单个位何时发生翻转。它还知道原始值是什么。一个非常简单的解释它如何做到这一点的方法是这样的:

将所有0s 替换为000。 将所有1s 替换为111

现在你可以读出六种组合:
000
001
010
100
101
111

我们永远无法 100% 确定最初存储的是什么。如果我们读取,000那么那可能正是000我们期望的,或者所有三个位都可能翻转。后者的可能性很小。位不会随机翻转,尽管确实会发生。假设这种情况发生的频率为十分之一(现实情况要少得多)。这相当于读取正确值的概率如下:

000-> 要么000(99.9% 确定),要么三重翻转(1/1000 的机会)

001-> 我们知道出了点问题。但要么是出错了, 000并且一位被翻转了(概率为 1:10),要么是出错了,并且 111两位被翻转了(概率为 1:100)。因此,我们将其视为我们读取了000错误,但记录了错误。

010-> 与上相同。

100-> 与上相同。

011-> 与上文相同,但假设它是111

101-> 与上文相同,但假设它是111

110-> 与上文相同,但假设它是111

111-> 要么111(99.9% 确定),要么三重翻转(1/1000 的机会)

111-> 要么000(99.9% 确定),要么三重翻转(1/1000 的机会)

ECC 使用了类似的技巧,但效率更高。对于 8 位(一个字节),它们仅使用 10 位来检测和纠正。


ECC 注册 RAM 仅适用于工作站/服务器主板,ECC 无缓冲可用于华硕主板上的 Intel Xeon lga1155 或 AMD AM3+。

我已经提到了 ECC 部分是什么,现在谈谈注册部分与非缓冲部分。

在现代 CPU 中,内存控制器位于 CPU 芯片上,AMD Opteron 芯片和 Intel Core i 系列芯片早就有这种设计。大多数台式机 CPU 直接与装有 RAM 的 DIMM 插槽通信。它可以正常工作,不需要额外的逻辑。这种设计成本低,而且速度很快,因为从内存控制器到 RAM 没有延迟。

但是内存控制器在高速下只能驱动有限的电流。这意味着主板上可以添加的内存插槽数量是有限的。(更复杂的是,DIMM 可以使用多少内存,这涉及到内存等级。我将跳过这一部分,因为这篇文章已经很长了)。

在服务器主板上,您通常希望使用比台式机系统更多的内存。因此,内存中添加了一个“寄存器”缓冲区。DIMM 上的芯片读取的数据首先复制到此缓冲区。一个时钟周期后,此缓冲区连接到内存控制器以传输数据。

此缓冲区/寄存器会延迟某些操作,使内存变慢。这是不受欢迎的,因此它只在具有大量内存组的主板上使用/需要。大多数消费级主板不需要它,大多数消费级 CPU 也不支持它。

直接连接、无缓冲 RAM 与缓冲/寄存 RAM 之间不存在优劣之分。它们只是在内存插槽数量方面存在不同的权衡。寄存 RAM 允许使用更多 RAM,但会牺牲一些速度(可能还会增加一些费用)。在大多数情况下,当您需要尽可能多的内存时,额外的内存足以弥补 RAM 运行速度稍慢的问题。

我的疑问是(主要涉及华硕 am3+ 主板):ECC 无缓冲 RAM 是否与 ECC 注册 RAM 一样好(从安全性和可靠性的角度来看)?或者它是一个更糟糕的选择。我不太在乎速度。**

从安全性和稳定性角度来说,ECC-unbuffered和ECC-registered是一样的。


更多详细信息:服务器将使用最多可容纳 24 x 3 ½'' 驱动器的服务器机箱,并且应尽可能少地消耗。

24 个驱动器会消耗大量电力。具体消耗多少取决于驱动器。我的 140GB 15K RPM SAS 驱动器在空闲时仅消耗 10 瓦,与 1TB SATA 7k2 磁盘相同。使用时两者都消耗更多。

将其乘以 24。空闲时 24x10 瓦特意味着仅需 240 瓦特即可保持磁盘旋转,克服空气阻力。实际使用时将其乘以 24。


从这个意义上来说,与其他产品(>80W)相比,LGA1155 似乎是更好的选择(TDP ~ 20-95W),而且价格是其他产品的两倍。

在撰写本文时以及对于您提到的 CPU,英特尔在低功耗 CPU 方面更胜一筹。

欢迎提出任何建议。假设空闲时功耗低于 120W(约 24 个硬盘中有 10 个)。

如果您选择 FreeBSD,请仔细查看 ZFS。它非常棒。它的许多更高级的功能(例如重复数据删除和/或压缩)都使用大量 CPU 能力,并且需要大量内存。ZFS 与 ZRAID 的基本使用在您提到的两种 CPU 组和 16 GB 上都可以很好地完成,但如果您打开重复数据删除等功能,则应仔细查看磁盘容量所需的推荐内存;建议每 TB 存储最多 5GB一些指南

另外两件事:

  1. 我没有看到任何有关连接驱动器的信息。有些主板可能有多达 10 个 SATA 端口。但如果超过这个数目,您就需要附加卡。如果您考虑使用硬件 RAID,那么最好从一开始就做好规划。
  2. 驱动器故障:您应该使用SATA 端口多路器然后仔细观察如果 SATA 驱动器发生故障,它们会如何反应。通常情况并不乐观。对于家庭设置来说这不是什么大问题,但对于企业级来说却非常不合理。您可能还需要考虑单个驱动器如何处理错误。某些驱动器被标记为用于“NAS”或“RAID”的原因是它们处理错误的方式与常规驱动器不同。如果没有 RAID,您希望驱动器尽可能多地重试。使用 RAID,您希望驱动器快速失效,这样您就可以从另一个副本中读取。

答案3

两个独立的问题。

ECC 与非 ECC

  • 在正常运行时间很重要的地方使用 ECC
  • 成本更高——需要 9 个芯片(而不是 8 个的倍数)
  • 主板必须支持才能使用它

注册与非缓冲:

  • 可以使用 Registered DIMM 安装更多总 RAM
    • 内存控制器接口上的电气应力更小
  • 但所有安装的 DIMM 都必须注册,否则
    • 如果升级到已注册的,则必须移除无缓冲的 DIMM
  • 价格更昂贵,访问周期也更慢
    • 如果这很重要的话,无缓冲的延迟会稍微低一些
    • 所有的随机访问都需要很多周期
    • 请注意,绝对访问延迟(以纳秒为单位)在 PC 中使用 DRAM 的历史上并没有太大改善
      • 成本、容量和带宽大大改善
      • 内存缓存可以隐藏大多数内存访问的延迟
    • 较长的延迟对单线程“实时”性能影响最大
      • 通常不会对“服务器”用例产生太大影响
    • 带宽和整体性能没有差异或差异很小
      • 顺序访问带宽不受影响
      • L2/L3 缓存意味着实际访问模式大多是一次替换缓存中的行,因此通常都是“突发”访问

相关内容