内存错误和服务器内存RAS功能-DELL篇-1

简介

内存子系统错误是现代计算系统中最常见的一些错误类型。了解内存错误是如何发生的以及如何预防或避免它们可能是一个复杂的话题--在过去30年里,这个话题挑战了无数的行业研究人员和开发人员。

关于内存错误的入门知识

为了充分了解服务器的内存RAS响应能力,首先要了解各种可能的内存错误类型。

DRAM的issues问题可大致分为以下两类:

♦ 软错误

    ◊ 软错误在本质上是瞬时的,通常可能是由内存子系统组件中的电气干扰引起的。这些干扰可能发生在内存子系统的许多位置中的任何一个,包括处理器内存控制器、处理器内部总线、处理器缓存、处理器socket或连接器、主板总线走线、离散内存缓冲芯片(如果存在)、DIMM连接器或DIMM上的单个DRAM组件。

    ◊ 软错误可能是由内存子系统中的高能电子碰撞或电路中的电噪声等现象引起的。单bit或多bits都可能受到影响,单bit错误和一些多bits错误会使用需求或patrol scrubbing(巡检擦除)来纠正。

♦ 硬错误

    ◊ 硬错误在本质上是持久性的,不能随着时间的推移或者通过系统复位、重启来解决。该类型的错误可能是:a、固有故障(即总线上的单个通道或DRAM组件中的单个存储单元cell的老化),b. 整个设备(例如连接器、处理器、内存buffer或DRAM组件)的故障,c. 不正确的总线初始化或内存电源问题而发生的。DRAM组件内的故障可能包括整个设备故障、设备内的bank区域故障、引脚故障、列或cell单元故障。

    ◊ 硬错误可能是由物理部件损坏、静电放电(ESD)、电气过流条件、温度过高条件、处理器或DRAM制造或模块组装中的不规范造成的。

之前描述的两类DRAM issues最终会导致两种类型的内存错误:

♦ 可纠正的错误(CE)

    ◊ 可纠正的错误是可以被服务器平台检测和纠正的错误。这些通常是单bit错误,但基于CPU和内存配置,也可能是某些类型的多bit错误(由高级ECC纠正)。可纠正的错误可以由软错误和硬错误引起,不会破坏服务器的运行。

    ◊ 随着基于 DRAM 的内存在几何形状上缩小以增加容量,作为均匀缩放的自然部分,预计会出现越来越多的可纠正错误。此外,由于各种其他 DRAM 缩放因素(例如降低cell电容),预期会增加错误生成现象的数量,例如Variable Retention Time (VRT) 和Random Telegraph Noise (RTN) 。

    ◊ 在服务器行业中,越来越多的人认为,每个DIMM的一些可纠正的错误是不可避免的,并不意味着一定要更换内存模块。继续运行报告可纠正错误的系统,而不重新启动以进行自我修复,不会显著增加发生不可纠正错误的风险,不可纠正错误可能导致计划外停机。事实上,行业中的其他人已经公开表示他们的内存处理不报告可纠正的错误。

♦ 不可纠正错误(UCE)

    ◊ 不可纠正的错误是服务器平台无法纠正的多位错误。这些错误可能由软错误或硬错误的任何组合引起,但通常是由多个硬错误引起的。

    ◊ 并非所有的多比特错误都是无法纠正的。支持Advanced ECC的CPU可以纠正某些类型的多比特错误,前提是取决于比特错误模式。

    ◊ 不可纠正的错误可以分类为:

        • 可检测和消费

        • 可检测和未消费

        • 静默和消费

        • 静默和未消费

    ◊ 消耗 vs 未消费是指数据是否已经被加载到CPU执行路径中。未消耗的错误通常是在memory patrol scrub(内存巡检刷新)期间发现的,但也可能是在CPU预取期间发现的。

    ◊ 可检测 vs 静默是指CPU的ECC方案是否可以检测到错误的存在。静默错误非常罕见,需要有问题的高速缓存行满足非常特定的位错误模式才能绕过 CPU 的 ECC 方案。

        • 除非另有说明,本文中提到的不可纠正的错误是指那些被列为可检测的错误。

可检测 静默
消费 一经检测到标记为Poisoned,然后Machine Check Exception进行消费;基于OS的错误控制 取决于数据使用情况。可能导致不正确的应用数据或系统服务中断
未消费 发现后标记为Poisoned,errors等待被消费 errors等待被消费

服务器内存RAS功能简介

之前讨论的内存错误是通过服务器的内存RAS功能来缓解的,这需要在硬软件中进行避免、检测和纠正故障。这些缓解RAS的特性都是为了在发生内存错误时提高系统的可靠性和延长正常运行时间。

        • 参考

         a.了解x4和x8 DIMMs之间的区别是非常有用的。这是指内存模块上的DRAM模块的数据宽度。x4 DIMMs是具有4位数据宽度的DRAM模块,x8 DIMMs是具有8位数据宽度的模块

         b. 常见的DIMM组织记号如下。#RxN。其中#是rank的数量,N是DRAM的数据宽度。例如 - 2Rx4意味着 DIMM有两个rank的X4 DRAM设备。

单错误纠正-双错误检测(SEC-DED)ECC

SEC-DED特性支持表
支持的DIMMs X4 DIMMs: ✔
X8 DIMMs: ✔

单错误纠错-双错误检错ECC,或SEC-DED ECC,是最基本的纠错码(ECC)形式。所有配置了ECC内存模块的服务器都能够对每个内存页访问进行SEC-DED(64个数据位+8个ECC位)。这意味着,从DRAM访问的72位中的任何一位都可能不正确,但服务器硬件将自动纠正它,无论原因是什么。

Advanced ECC

Advanced ECC特性支持表
支持的DIMMs X4 DIMMs: ✔ (使用X4 DIMM可以提供DRAM设备级纠正)
X8 DIMMs: ✔ (使用x8 DIMM可以提供半字节级校正)

高级ECC是一种RAS功能,对内存访问的4位(半字节)以内的单bit和多bit故障提供错误纠正。当与基于X4 DRAM设备的DIMM结合使用时,高级ECC可以为整个单一的DRAM设备提供纠错。这种覆盖整个 DRAM 设备的纠错类型有多种形式,最流行的是 Chipkill 和单设备数据纠正 (SDDC)。高级 ECC 是一项高度复杂的特性,它是基于 Single Symbol Correcting – Double Symbol Detecting (SSC-DSD) Reed-Solomon 纠错和检测码。简单来说,SSC-DSD 的工作原理是将cache line访问分解为“code data”,而“code data”又由多bit记号组成。这些记号的大小可能因处理器架构而异。 但无论记号大小是 4 位还是 32 位,正如 SSC-DSD 名称所示,编码的设计使得单个记号可以针对各种bit错误的组合进行校正。在许多情况下,根据SSC-DSD的实现,如果一个记号中的所有比特有错误,都可以被纠正。研究表明,基于SSC-DSD的纠错码可能比单独使用SEC-DED ECC提高42倍的故障纠错和避免效果。

一个SSC-DSD编码实现的例子在下面的图中表示,一个64字节的cache line被分成四个code words(图1)。每个code word由 18 个 8 位记号组成,可以分解为 128 位数据和 16 位 ECC(8 位 CRC 和 8 位奇偶校验)。

image

                                                                             图1. 8 位记号大小 advanced ECC 的示例实现

image

                                                                             图2. Advanced ECC 可以纠正单个记号中的多位错误

image

                                                                             图3. 但是Advanced ECC 不能纠正多个记号中的错误

如前所述,SSC-DSD的实现将根据 CPU 平台架构和代数而有所不同,造成了不同的纠错覆盖率和内存配置要求。

注:该特性针对的是Intel平台。目前截止到AMD zen3,AMD平台不支持。

前面提到,当与x4 DIMM结合使用时,advanced ECC可能会为单个DRAM设备提供错误纠正,包括单个设备本身的故障。这是通过处理器组织内存访问来实现的,使得给定的DRAM设备仅向单个记号内提供数据,并且通过SSC-DSD,任何一个记号都可以完全冗余。另一方面,具有x8 DRAM设备的DIMM将跨越两个记号,并且可能仅在半字节(nibble)级别提供部分设备校正。如果x8 DRAM设备中的两个记号都出现错误或整个设备出现故障,则会发生无法纠正的错误。

image

                                                                             图4. X8 dimm的Advanced ECC允许保护每个DRAM的半字节,但不能保护整个设备

自适应双设备数据校正(ADDDC)

ADDDC特性支持表
支持的DIMMs X4 DIMMs: ✔
X8 DIMMs: ×
内存配置要求 每个内存通道两个或更多的rank

自适应双设备数据校正(ADDDC)是Intel平台特有的技术,它允许两个DRAM设备在失去容错功能之前依次失效。ADDDC只支持X4 DIMM类型内存,并且需要两个或更多的内存rank的内存配置(每个内存通道两个DIMM或者一个DIMM有多个rank)。

ADDDC的工作原理是让BIOS跟踪每个DRAM bank的可纠正错误的数量。如果这个数字接近BIOS认为不安全的阈值,那么ADDDC会被激活,失效的DRAM bank被动态映射出来,同时一个"buddy"伙伴bank被映射进来以取代它。DIMM继续在SDDC覆盖范围下运行。在这一点上,内存性能将受到影响,因为内存控制器必须对映射出来的cache line进行两次读取。

注:ADDDC只为连续上的DRAM故障提供时间上的容错。在同一内存访问中的两个平行DRAM故障仍然会导致服务中断。此外,ADDDC 仅适用于可纠正错误,并且仅通过降低可纠正错误变成不可纠正的机会的手段,来防止不可纠正错误发生。

Memory Patrol Scrub 内存巡检擦除

Memory Patrol Scrub特性支持表
支持的DIMMs X4 DIMMs: ✔
X8 DIMMs: ✔

Memory Patrol Scrub旨在通过消除DRAM中积累的soft error来降低用户遇到多bit错误的概率。这反过来又减少了遇到不可纠正错误的机会(取决于启用的其他RAS功能和多bit错误发生的位置)。Memory patrol scrub的工作原理是让CPU内存控制器定期扫描DRAM,并纠正它所遇到的任何可纠正的错误。

除了擦除可纠正的错误外,巡逻擦除还可以检测内存中潜在的不可纠正的错误。这些UCE被称为未消费的不可纠正的错误--或在CPU的非执行路径中检测到的不可纠正的错误。对这些未消费的UCE的检测将作为一个critical事件记录在系统事件日志中,MEM9072: “The system memory has faced uncorrectable multi-bit memory errors in the non-execution path of a memory device at the location <locationXXX>.” 受影响的内存位置的self-healing会被BIOS自动安排,并在下次重启时执行。为了确保最大的可靠性和运行时间,即使在self-healing后,建议联系售后,安排在下一次维修时更换受影响的DIMM。

内存巡查擦除默认是启用的,并被配置为每24小时在后台执行。内存巡查擦除可以被禁用,或者在BIOS设置中设置为加速运行(每4小时)。内存巡查擦除在运行时可能会对某些工作负载的系统性能产生影响。

注:当内存控制器在常规运行时,读取事务期间遇到可纠正的错误并写回已纠正的数据时,就会发生demand scrub。 在内存访问模式高度集中于某些区域,而其他区域无法获得Demand Scrub的情况下,Patrol Scrub的作用就凸显出来了。

Memory Page Retire (MPR) 内存页面停用

Memory Page Retire (MPR)特性支持表
支持的DIMMs X4 DIMMs: ✔
X8 DIMMs: ✔

内存页停用(MPR)是BIOS实现的一项功能,它指示操作系统停止使用BIOS认为可能不健康的内存页位置(大小为4 KB)-实际上是将其从操作系统的内存池中删除。此功能也称为OS Page retirement或页page off-lining。BIOS基于专有的算法来确定可能不健康的内存页,该算法考虑了给定内存页位置的可纠正错误模式和错误率。

对内存页停用(又称off-lining)的研究发现,MPR可以减少多达94%的内存错误率。这项功能在BIOS中自动启用,只要操作系统支持MPR,就会被激活。大多数现代OS都支持接收这种内存页停用请求的能力。要了解更多关于操作系统与接收此类请求的兼容性,需要联系OS供应商确认。

Memory Rank Sparing 内存rank保留

Memory Rank Sparing特性支持表
支持的DIMMs X4 DIMMs: ✔
X8 DIMMs: ×
内存配置要求 •Single Rank Sparing: 每个内存通道两个或更多内存rank
•Multi Rank Sparing: 每个内存通道三个或更多内存rank

Memory Rank Sparing 是 Intel 平台上提供的一种内存 RAS 功能,它将为每个内存通道保留一个或多个内存rank作为备用以进行故障转移。当服务器内存运行状况监视器确定内存通道中的某个rank已降级时,它将触发备用rank故障转移。故障转移过程包括通过patrol scrub检查备用rank的运行状况,然后将降级rank的内容无缝复制到备用rank。默认情况下禁用memory rank sparing,如果需要,可以在 BIOS 设置中启用。

image

                                                                             图5. 两个 16GB (2Rx8) RDIMM 的示例,其中一个rank作为备用

为了支持单rank备用,必须在每个内存通道中至少填充两个内存rank。rank sparing 会导致内存可用容量减少。发生一个故障转移事件后,在单rank备用模式下不能再发生故障转移。

• 每个内存通道容量减少影响(假设相同大小的rank)= 需备用rank数量为 1
     ◊ 例如: 4 ranks = 25%损耗

• 通道中最大的rank总是作为备用的
     ◊ 例如:安装一个32GB RDIMM(2Rx4)和一个16GB RDIMM(2Rx8)=两个16GB RANKS和两个8GB RANK。其中一个16GB的rank将作为备用,导致容量减少33%。

为了支持多rank备用,系统必须在每个内存通道中至少填充三个内存bank。与单bank备用一样,由于rank备用而导致的内存容量减少取决于内存配置(每个通道的bank数和bank的大小)。在多rank备用模式下最多可以发生两个故障转移事件。

• 每个通道容量减少影响(假设相同大小的rank)= 需备用rank数量 2

     ◊ 4ranks =50%损耗

• 通道中最大的rank总是作为备用的

     ◊ 例如:安装一个32GB RDIMM(2Rx4)和一个16GB RDIMM(2Rx8)=两个16GB rank和两个8GB rank。其中两个16GB的行列将作为备用,导致容量减少66%。

内存镜像

Memory Mirroring特性支持表
支持的DIMMs X4 DIMMs: ✔
X8 DIMMs: ×
内存配置要求 •所有完全相同的DIMMs
•内存通道必须全部填充,每个通道一个DIMM或每个通道两个DIMM

内存镜像是Intel平台上的一项内存RAS功能,它提供最高级别的内存错误保护--包括不可纠正的错误--但代价是内存容量减少50%。该功能的工作原理与存储领域的RAID1类似,内存内容的冗余副本被存储在一个单独的内存位置。如果在一个位置的内存访问中检测到一个不可纠正的错误,那么就会检索镜像内容。启用完全镜像时,对整体的内存性能没有影响,除非是在写入流量很大的情况下。

为了配置内存镜像,所有内存模块的大小、速度、密度和技术(RDIMM与LRDIMM等)都必须相同。此外,内存通道必须装满所有一个DIMM或所有两个DIMM(例如,24个DIMM系统应该安装12个DIMM或24个DIMM)。内存镜像默认是禁用的,必须通过BIOS设置菜单启用。

image

                                                                             图6. 6 DIMM/CPU 和12DIMM/CPU 用相同内存模组的插法规则

Fault Resilient Mode (FRM) 故障恢复模式

Fault Resilient Mode特性支持表
支持的CPU: 只支持Xeon Platinum and Gold SP系列
支持的DIMMs X4 DIMMs: ✔
X8 DIMMs: ×
内存配置要求
•内存通道必须全部填充,每个通道一个DIMM或每个通道两个DIMM

故障恢复模式(FRM)是一种内存RAS功能,它利用部分内存镜像来创建专门用于虚拟机监控程序的故障恢复内存区域。启用此功能后,系统管理程序将确保关键内存功能仅使用镜像内存区域。由于该内存区域是完全冗余的,因此应避免该区域中可能导致系统崩溃的任何致命的不可纠正内存故障。在 BIOS 设置中,用户可以选择以 12.5% 或 25% 的内存冗余来启用此功能。。此外,如果主机操作系统支持,操作系统可以请求特定数量的内存冗余(12.5%或25%除外)。此功能的最大优点是,与全内存镜像中的50%相比,FRM的内存容量开销最大为25%。

为了使用此功能,必须安装VMware vSphere 5.5或更高版本。某些版本的Linux OS可能也支持此功能,其中该功能称为地址范围或部分内存镜像。有关此功能支持的更多信息,请参阅相应操作系统的生产文档。

必须使用所有一个DIMM或所有两个DIMM填充内存通道(例如,24个DIMM系统应安装12个或24个DIMM)。故障恢复模式默认禁用,必须通过BIOS设置菜单启用。

Memory Self-Healing 内存自愈

Memory Self-Healing 特性支持表
支持的DIMMs X4 DIMMs: ✔
X8 DIMMs: ✔

服务器内存自愈功能有两个关键组件:post package repair(PPR)和内存重新训练。PPR是JEDEC定义的一种行业标准功能,其中内存模块能够将降级的内存行与保留的备用内存行进行交换。JEDEC要求所有的DDR4内存在制造时每个DRAM组至少要有一个备用行。

当服务器平台确定 DRAM 行有一个或多个故障单元时,它可以指示 DRAM 在电气上更换旧行并用新行替换。这是通过电气熔断发生的,并且是一个永久性过程。此外,PPR 过程只能在启动过程开始时发生——在内存训练和测试发生之前。与内存页面失效类似,确定哪些 DRAM 需要PPR是由服务器专有算法确定的,该算法考虑了可纠正的错误率和错误模式。目前也支持通过PPR对已消耗的无法纠正的错误进行自我修复。

image

                                                                             图7. 4Gb x4 设备的 bank 组中的一行的 PPR

PPR 在支持它的服务器平台上始终可用,如果 BIOS 认为有必要,它将在系统重新启动后自动执行。请注意,在此过程中,BIOS 可能会自动将热复位升级为冷复位。为了使 PPR 成功执行,建议用户在收到内存错误事件消息时不要在开机期间交换或更换 DIMM。

除了 PPR,服务器内存自愈过程还包括内存重新训练。内存训练是 CPU 初始化、校准和调整自身与内存模块之间的链路的过程。虽然执行完整的内存训练可以帮助确保内存总线以最高级别的信号完整性运行,但这也是一个耗时的过程,直接影响到服务器的启动时间。因此,服务器只在必要时执行这一步骤,例如 如在内存自我修复过程中。

Machine Check Architecture Recovery

Machine Check Architecture Recovery特性支持表
支持的DIMMs X4 DIMMs: ✔
X8 DIMMs: ✔

Machine Check Architecture Recovery,或MCA Recovery,是一种高级RAS功能,当与支持它的操作系统结合使用时,可以防止某些类型的无法纠正的内存错误导致整个系统崩溃。MCA恢复不是特定于内存的RAS功能。它的功能扩展到各种形式的CPU数据消耗,包括来自I/O的数据。但是,此处讨论的MCA恢复范围将限于系统内存中的数据消耗。

从本质上讲,MCA恢复是CPU检测不可纠正错误的能力,向操作系统发出检测已发生的信号,并允许操作系统优雅地控制问题。结果完全取决于UCE检测点以及受影响的内存是否与Kernel space或user/Application space相关联。

如果在执行路径中检测到不可纠正的错误,则表示该错误是在处理器消耗时检测到的。如果损坏的内存被分配给内核空间,则操作系统将内核死机,系统将按照正常的UCE行为崩溃。如果它的目的地是用户空间,那么操作系统将在不影响系统其余部分的情况下终止相关进程。

如果在非执行路径中检测到不可纠正的错误,则意味着该错误是由memory patrol scrub检测到的,并且不会立即被处理器消耗。检测到这些未使用的不可纠正错误在系统事件日志中标记为critical事件,MEM9072: “The system memory has faced uncorrectable multi-bit memory errors in the non-execution path of a memory device at the location .”

服务器上的其他内存 RAS 功能

内存映射—如果在POST的内存培训和测试阶段检测到关键故障(如无法纠正的错误),服务器将自动从系统内存池映射出受影响的DIMM。这可防止故障DIMM导致潜在的服务中断。在内存配置发生更改(如更换DIMM)之前,受影响的DIMM不会映射回内存池。

实现最大限度的内存运行时间

基于上一节讨论的内存RAS特性,下面总结了用户如何配置他们的系统以实现最大的内存启动时间:

• 使用基于 x4 DRAM 的 DIMM 配置服务器

     ◊ 优点:单DRAM device级校正和ADDDC

• 配置服务器在以下冗余模式下运行(按保护程度降序排列):

  ♦ Best---配置服务器运行在 Memory Mirroring Mode

     ◊ 优点: RAID1级内存保护,显著降低UCE的概率
     ◊ 缺点: 损失50%内存容量

  ♦ Better---将服务器配置为在Fault Resilient Mode运行

     ◊ 优点:显著降低了操作系统使用的内存关键部分的UCE概率;内存容量减少的开销很低(取决于系统设置)。
     ◊ 缺点:内存容量最多可减少25%,仅官方支持VMware vSphere 5.5或更高版本

  ♦ Good---配置服务器以在 Rank Sparing 模式下运行

     ◊ 优点:运行时消除由于大量可纠正错误而处于降级状态的内存rank组
     ◊ 缺点:根据内存配置的不同,内存容量减少量也不同

• 将服务器配置为在“扩展模式”下运行内存Patrol scrub

  ♦ 优势: Memory Patrol scrub 将每四个小时运行一次(而不是 24 小时);增加频率将减少低利用率内存区域中错误的累积,因此不会被demand scrub纠正。

建议用户保持其服务器固件最新,尤其是服务器BIOS。这是因为,即使在产品上市后,服务器开发部门仍在不断改进其RAS算法和行为,以获得最佳的客户体验。用户还可以通过接收其平台内存参考代码的定期维护版本来保持BIOS的最新状态。

FYI: 内存参考代码(MRC)是执行内存训练、配置和链路优化的BIOS代码。

参考

https://dl.dell.com/manuals/common/dellemc_poweredge_yx4x_memoryras_v1_1.pdf

posted on 2022-08-19 17:24  miyan  阅读(8650)  评论(1编辑  收藏  举报