计算机组成原理论文审阅:
《Memory Errors in Modern Systems》
目录
论文概述
本文通过对Hopper和Ceilo这两个超大规模计算机的内存错误数据的分析,得出大规模计算系统产生硬件内存错误的主要原因,并通过比较各纠错机制在大规模计算系统上的运行效率,给出了对未来大规模计算机内存设计的建议。
本论文的研究目标是:
1.分析现代硬件系统采用的硬件弹性技术
2.这些技术对可靠系统的设计的影响
3.这些技术是否对未来的大规模硬件系统也适用
研究背景
内存错误普遍存在于具有大量DRAM和SRAM的存储子系统(memory subsystem)中,在未来,内存错误的发生对大规模硬件系统的影响将更为显著,所以搞清楚现代硬件技术容纳这些错误的原理和功效,对硬件集成更多的DRAM和SRAM是很重要的。
研究对象
顶尖水平的大规模超级计算机:
Hopper(6000个节点)和Cielo(8500个节点)
CPU类型:
两者都是基于AMD的CPU并且包含DDR3 DRAM
数据量:
3140亿CPU单核小时数(socket-hours)和450亿DRAM设备小时数(device-hours)
数据分析目标:
得到CPU和DRAM运行期间产生错误量的有代表性的统计数据
结论适用性:
适用于任何对硬件可靠性有很高需求的大规模数据处理中心或计算机群。
内容概述
本论文将所研究的存储系统容错技术领域一分为三:
1.The good:技术先进,能够较好地维持良好的系统可靠性
a.DDR command and address parity
b.SRAM faults 已经能够被现有技术很好地理解和处理。
c.SRAM的错误的减少和消除不应该用新的研究和技术而是用更好的工艺。SRAM的1bit错误已经在很大程度上被消除。
2.The bad:需要改进和增加理解的技术领域。
a.一些DRAM设备在高能微粒的冲击引发的微小错误十分敏感。
b.DRAM需要比片内的SRAM需要更强的弹性技术以维持未来的需求。
3.The ugly:具有潜在威胁的常用技术
a.使用计算errors的研究方法将有可能导致错误的结论。
b.SEC-DED ECC 虽然目前被普遍使用,但是它将产生20 FIT/DRAM设备的高错误率,这是大规模数据系统无法容忍的。
创新点
本论文结论的产生基于如下5点分析:
1.首次对Hopper这样的超大规模计算机的DRAM和SRAM错误进行了详细分析。
2.首次研究了DRAM错误率高低的对硬件系统的影响。
3.计算errors而不是faults对评估系统可靠性的影响。
其他研究以前都是以errors作为指标来研究系统可靠性,但是本文指出这是不准确的
4.几个基于硬件的关于系统可靠性的弹性技术的影响。
这些技术包括SEC-DED ECC,chipkill ECC 和 DRAM中的 command/address parity。
本文研究测试了SRAM的弹性方案,深入分析了设计时的决策对SRAM可靠性的影响
5.分析了SRAM和DRAM的faults将对未来的百万兆级硬件系统产生的影响。
前人的研究和本研究相比,有的不如本研究有这么大规模的数据来获得更有说服力的统计结果;有的虽然数据规模甚于本实验,但是它们计算的是errors而不是faults(可能会导致结论的偏差),另外,比本研究的数据规模更大的研究中很少有检验各种纠错机制的效率的,本研究弥补了这些不足。
1.3.3 DRAM错误
研究人员对每个运营节点都至少采集了将近10亿个DRAM时长的数据,如此大的数据量使研究结果变得可靠。
这个表展示了Hopper 的 DRAM的主要错误发生在单比特,多比特或者芯片错误都是不常见的。
这个图展示了永久性错误和临时性错误在DRAM中的存在率,可以看到,永久性错误有一个明显的下降期(4-6天时)
而临时性错误则在观测期间趋于平稳。
这展示了Hopper的DRAM的错误模式的分布规律。
资料:FIT是Failure In Time的缩写
这个图记录了不同的供应商运行的节点的两种错误率(Permanent和Transient),说明供应商的选择对系统可靠性的影响还是很大的。
由于Celio和Hopper所处的海拔高度不同,所以海拔高度引起的宇宙射线中的中子撞击(Celio是5.53,Hopper是0.91)
对DRAM的错误率的影响可以通过比较Celio和Hopper的错误率得出。
之所以可以这么做的另一个重要原因是Celio和Hopper的DRAM具有非常相似的配置:
1.相同的三个DRAM芯片供应商
2.使用相同的DDR3芯片技术
3.相同的内存控制器
主要的不同之处就在于海拔。
所以研究者们可以通过比较这两个系统的错误率来验证海拔对内存错误率的影响,如上图。
可以看到,供应商A提供的DRAM受海拔影响很大,供应商B次之,而供应商C提供的DRAM几乎不受海拔影响,可见海拔的影响可以通过选择优秀的供应商来在一定程度上被消除。
上面这个表从另一个方面证明了海拔对DRAM的错误率是有一定影响的。
从表中可以看到,不论是单bit错误还是单行/单块的错误,不论是供应商A、B还是C,Cielo都比Hopper有明显更高的错误率
在Celio和Hopper具有如此相近的配置的前提下,这种现象的出现极有可能就是海拔的影响。
研究人员指出,从这些数据中他们主要得出的结论是:临时错误(transient fault)由于对微小例子很敏感,所以在Cielo中呈现出比Hopper高出很多的错误率。当然除了海拔之外,一定存在其他的影响因素。
接下来论文中提到了一个近年被黑客利用于Android提权的硬件漏洞”RowHammer”,在本文中也称作”Multi-bit DRAM Faults”,这种错误出现的原因是DRAM中的一行被频繁读写时,与之逻辑相连的行将被影响,也出现错误。
文中提到这种影响被限制在相邻的三行之间(如图),且这样的错误可以被ECC纠正。这是Hopper投入使用之后才被定义的一种新的错误类型,但在最近的Adroid手机中也出现了类似的错误,已经有人实现了对这个错误的利用(相关论文在此链接http://users.ece.cmu.edu/~yoonguk/papers/kim-isca14.pdf)。由此可以得出两个结论:
1.硬件错误不是固定不变的而是随着新硬件的产生而产生的,研究人员需要掌握最新的硬件错误模式来应对新的安全威胁。
2.ECC纠错码并不是任何时候都可靠的,ECC机制仍然需要改进。
1.3.4 SRAM错误
上图指出了SRAM错误的高发区—-L2和L3高速缓存
论文指出从上述图像中得出的一个重要结论:
芯片内部结构也会出现错误,对这些错误的检测和纠正对维护大规模高负载运算机器的运行是十分重要的。设备应该为每个重要的逻辑单元提供强大的健壮性,并提供多种解决错误的方案。
研究人员使用”静态分析”的方法,用各种现实中可能出现的粒子加速碰撞SRAM(L2,L3 cache),然后用从Hopper中获得的实际运行数据进行比较,得到了如下图所示的结果:
注:静态测试不同于实际运行的测试,静态测试预先设置好SRAM中的数据,然后用模拟实际中的粒子进行加速碰撞,最后观察出错的频率。
结果显示SRAM的错误率在“静态测试”和实际运行中有一定的相关关系,且L2 Tag的静态测试和实际数据给出的结果十分相近。
本论文从上述数据中得出结论:
引发SRAM错误的主要原因是已知粒子的撞击。
虽然实验结果和预测的一致,但是结合实际数据分析,不论是对于保证部件正常运行还是定义新的错误模式还是确保加速撞击测试符合实际情况,都是十分重要的。
1.3.5 测量系统可靠程度的错误方法—计算errors
研究人员展示了计算errors rate而不是faults rate将会导致关于系统可靠性的错误的实验结论。
论文认为使用Errors rate将导致不正确的结果的理由主要有以下两点:
1.x86处理器对于Error的记录与操作系统设置的轮询频率有很大的关系。
因为CPU每纳秒都会丢弃错误记录,而操作系统实际每隔几秒才获取一次错误记录,也就是说这里丢弃了上百万条的错误记录,
所以Errors rate受操作系统的影响很大,显然不能很好地反映系统可靠性。
2.过于强调permanent fault的影响,忽略了同样对系统可靠性有潜在威胁的transient fault。(因为error log 记录的是永久性错误)
计算Errors rate所得出的关于Hopper和Cielo的实验结论与计算Faults rate的结论背道而驰,而计算faults rate的样本数据显然比计算Errors rate的样本数据更为全面
作者还举出两个实例说明计算Errors rate的重要性。
1.3.6 对现在采用的硬件错误解决方案进行分析
论文分析了多种纠错码(ECC)的纠错能力和在Hopper和Ceilo这样的大规模演算系统中的效率。
实验数据来自Hopper和Ceilo对已纠正错误的记录,由于数量巨大且来自于实际,有较强的说服力。
- SEC-DED ECC
论文中定义了”undetectable-by-SECDED fault”这个名词,意思就是”SECDED纠错码无法检测的错误”。需要注意的是,SECDED码是可以检测一些特殊的大于2bit的错误的,但是论文为了方便,将错误位数大于2bit的错误都归为”undetectable-by-SECDED fault”。并根据DRAM供应商的不同统计了SECDED的纠错效率,如下图:
可以看出SECDED的检错能力也是很大程度上依赖于供应商。
还可以看到,30%的SECDED无法检测的错误经由可检测的2bit错误产生,而剩下的70%却没有这个过程。
但是严谨起见,研究者指出,在高并发的大规模运算环境下,SECDED的检错模型可能会有变化,不可一概而论。
但是从Hopper的数据来看,SECDED是不适用于大规模演算系统的。
- DDR 命令和地址奇偶性
Hopper和Celio的DRAM都采用了DDR3标准,都带有对指令和地址进行奇偶校验的逻辑单元,本文指出:没有任何其他论文曾经研究过奇偶校验对于纠错的潜在功效。
本文从上图得出结论:
DDR标准添加奇偶校验位是一个明智的选择,且指出随着DRAM的存取速度的提高,可能会引发更多的信号级错误,这可能需要更多的奇偶校验位来检测。
- SRAM错误保护
研究者通过分析Ceilo的数据,给出了SRAM的两种纠错机制:奇偶校验和ECC保护之间的比较。(如下图)
图中显示大多数不能纠正的错误都来自收奇偶校验保护的单元,这是因为奇偶校验只能检验错误,而不能纠正错误但是ECC可以至少纠正1bit的错误,因此,SRAM的未纠正错误多是1bit错误,而不是多bit错误。
从上述分析中,本论文给出结论:
降低SRAM未纠正错误率的方法在于用扩展的专用1bit错误的纠错结构。
- 分析SRAM错误
本部分通过分析SRAM的错误数据,总结出适当的保护措施可以防止海拔造成的SRAM可靠性下降。
研究成果
1.4.1几点可靠系统设计的建议
1.错误是不可预测的,很多错误在系统被设计出来之后才首次被定义(比如本文中提到的“rowhammer”)
2.细节是很重要的
3.系统的诊断能力是很重要的,不论是ECC还是奇偶校验,对它们的合理使用能够较大程度的增加错误纠正能力,提高系统可靠性
4.分析是很复杂的,不能够仅从一个方面分析影响系统运行效率的因素。
5.要充分考虑设计的系统的规模,不同的规模对性能的要求差异天差地别
1.4.2检测了现在的可靠性保证机制能否适应未来的大规模运算
通过合理假设系统规模,研究人员得出以下结论:
1.DRAM
现有的检错机制不足以支撑超大规模的运算,需要比chipkill更先进的纠错机制
2.SRAM
SRAM的供应商应该花大力气在减少SRAM的未纠正错误率上。
减少的途径有两个:
a.通过技术上的收缩来减少SER
b.通过扩展单bit纠错单元来提高纠错率。
还需要更加先进的技术来提高SRAM的可靠性。
论文评价
优点
1.本论文的数据来自于美国正在运行的两个超级计算机,其硬件配置和节点拓扑如下:
Hopper和Cielo的系统配置
Hopper:
节点数:
大约6,000个计算节点
每个节点:
CPU:
2个12核的 AMD OpteronTM 处理器,
高速缓存:
12个 32KB L1 高速数据缓存
12个 512KB L2 高速数据缓存
1个 12MB L3 高速数据缓存
每个节点有8个4GB DDR-3 registered DIMMs 即总共32GB的DRAM.
Cielo:
节点数:
大约8,500个计算节点
每个节点:
CPU:
2个8核AMD OpteronTM处理器
高速缓存:
8个32KB L1数据高速缓存
8个512KB L2高速缓存
1个12MB L3高速缓存
每个节点有8个4GB DDR-3 registered DIMMs 即总共32G
资料:
1.DDR是Double Data Rate的缩写,DDR3是DDR2的延伸,DDR2和DDR的区别在于频率更高,传输数据速度更快
2.DIMMs是Dual In-line Memory Module的缩写
3.Registered的DIMMs模式,这时主板上的地址信号和控制信号会比数据信号先一个时钟周期到达DIMM。
三个chasis从底向上挂载成一个rack, Cielo有96个racks。
文章接着介绍了许多关于Cielo和Hoppper的DRAM的构成细节,最后说明了Hopper和Cielo的主要区别在于Cielo使用chipkill-correct ECC,而Hopper使用 chipkill-detect ECC。
Hopper和Cielo的节点组织方式
这样大规模的计算系统十分契合本论文研究的“大规模”计算系统的研究对象。
2.实验数据十分可靠
本研究的实验数据主要来自一下三个部分:
a.已修正的错误日志(Corrected error logs)
已修正的错误日志来自于系统的每个节点的的MCA( machine-check architectur)设备,每个节点将以若干秒为间隔记录任何发送到节点终端的信息。
b.无法修正的错误日志(Uncorrected error event logs)
无法修正的错误将引发节点服务器的重启,这就不能像已修正的错误日志一样通过轮询来记录,而是等到重启之后再记录。
c.硬件快照(hardware inventory logs)
硬件快照记录了整个DRAM芯片在某时刻的状态,它可以提供某时刻硬件的详细信息。本此研究分析了超过400个独立的硬件快照,涵盖了Hopper三年的运行记录和Cielo两年的运行记录。
这些数据不仅总量巨大且有效,而且可以精确定位到发生错误的DRAM芯片的某行某列,为研究结果的可靠性提供了较好的保证。
3.本文提出并举例分析证明了计算fault比计算errors更能够体现计算系统的可靠性,这纠正了前人研究的误区,对于此领域的研究有很大的积极意义。
同时,采用计算fault的方法,增加了结论的准确性。
4.本文实验了多种不同的检错纠错机制
a.奇偶校验(parity)
b.检二纠一纠错码(SEC-DED ECCs)
c.chipkill ECCs(IBM公司研发)
1)chipkill-detect(检测一块DRAM芯片上的错误)
2)chipkill-correct(纠正一块DRAM上的错误)
d.交叉检错:类似学过的汉明码,能够对抗多bit错误
基本涵盖了目前常用的所有内存检错纠错机制,使得研究结果更加有说服力。
5.对概念的区分和把握十分清楚
不足与改进
1.论文中在分析海拔对SRAM的可靠性的影响时,通过Hopper和Ceilo的海拔有差异,且海拔高的Celio的确比Hopper的SRAM具有更高的出错率。
不足:
对于这一部分,个人认为研究中控制的变量不够严谨,因为对DRAM这样对电气功能如此敏感的设备,任何电气特性的不同(比如电压)都有可能影响DRAM的错误率。
改进:
若在不同的海拔高度设置一些相同配置下运行的相同芯片,应该能够更好地验证文中的论点。
2.研究者在研究中作出了一些假设
a.每个DRAM设备在我们观察的间隔内只发生一个错误
b.每个DRAM错误发生的时间和第一次观察到每个DRAM的错误信息的时间一致
c.基于终端给出的日志数据,为每种错误指定了特定的错误类型和模式
不足:论文指出第一个假设对研究结果影响不大,因为观察到的错误率表明在观察间隔内只有少于两个DRAM设备会发生多重错误。但是论文中并没有指出第二个假设的正确性。
改进:说明假设为什么能够成立能够增加结论的说服力。建议加上相关说明。