【DDR未解之谜】Row Hammer这么严重,知道如何解决吗?

作者:陆健锋

根据FuturePlus Systems的联合创始人Barbara Aichinger在10月份的Memcon 2016事件谈话内容,关于DDR内存问题的情况并不乐观。内存问题继续困扰着工业界,并且代价是如此昂贵。根据Facebook上作者的一段内容:“......在每周出可纠正的错误次数超过100次时,服务器的修复机制会自动做上标记......”和“在我们更多的有前瞻和主动性的修复测量下,我们发现,平均46%左右出现问题的服务器会得到修复。”

Aichinger为Memcon的读者做了计算:

  • 大约2%的Facebook服务器在每个月会出现内存问题;
  • 每月出现内存问题的比例约46%的服务器,将会做内存DIMM(Dual-Inline-Memory-Modules,双列直插式存储模块)替换;
  • 假设Facebook有大约10万台服务器,每月大约有920 DIMM做替换;
  • 每月有720个小时;
  • 因此,“Facebook每个月每天每个小时都要去替换DIMM!”
  • Row Hammer的出现也引起的厂商的关注,DRAM制造商、CPU制造商、BIOS制造商等纷纷开始在他们的存储器设备中加入了一些防范Row Hammer漏洞的措施,并开始研发新型的内存设备。客观上来看,Row Hammer的发现也推进了DDR4的研发和改进进程,那么DDR4就可以抵抗Row Hammer了吗?DDR4就是Row Hammer的克星吗?

    两年前,Aichinger的Memcon 2014主题是在DDR3上的Row Hammer问题。(关于更多DDR3上的Row Hammer问题可以参考“Unexplained memory errors in your DDR3 design? Maybe it’s “Row Hammer.” Yet another thing to worry about”)当时,被告知的是,Row Hammer问题不会在新的尚未看到的DDR4 SDRAM中出现。

    错了!错了!错了!

    Aichinger在不久前宣布DDR4 SDRAM也展露了Row Hammer问题。如果想要证明下,可查看SGI题为“The Row Hammer Effect: Enhancing Memory RAS.”的白皮书。Aichinger说更糟的是该问题的错误频率依据于各厂商。

    可确定的是,其中一个导致包括DDR4 SDRAM在内的各种DRAM内存出错原因是违反内存协议。所有的DDR规则(包括JEDEC的DDR4)在操作时序上包含大量的细则。比如:

  • 不能在已经打开的bank做激活操作;
  • 不能在已经关闭的bank做预读取操作;
  • 不能在没有打开的页做读写操作。
  • 此外,违反时序也会导致内存问题。

    那什么是Row Hammer?它是DRAM设备上存在的一个漏洞,其主要表现是:当攻击者敲打(Hammering)内存的特定某几行时,会导致其它行的内存单元相应地翻转。DRAM的制造精度越来越高,部件在物理层面上越来越小。既能在一块芯片上集成更大的内存容量,又能让各个内存单元之间不发生电磁干扰是非常难以做到的。这一情况使得对内存的单个区域进行的读写有可能干扰到邻近的区域,导致电流流入或流出邻近的内存单元。如果反复进行大量读写,有可能改变邻近内存单元的内容,使得0变成1,或者1变成0。这种现象被称为比特翻转(bitflipping),可被利用获取更高的权限。

    这是SDRAM上Row Hammer发生的示意图:

    SDRAM上Row Hammer发生的示意图

    Aichinger持续跟进这个“特殊肥皂盒”的技术问题,原因是她正和JEDEC任务组编写一个检查协议文档来审查SDRAM的使用。在Memcon,Aichinger建议用一种服从审查机制来确定一个定义的应用是否符合了JEDEC规则。

    Aichinger的公司FuturePlus Systems为了这个目的,做了很便利的DIMM插入器。这种插入器使你能直接连接高速DSO和逻辑分析仪到DIMM插座,让你能实时检测因下列问题而导致的违反协议:

  • BIOS编写错误;
  • 不正确的SPD编写(SPD是一种DIMM EEPROM,它带有关于DIMM上SDRAM规则的时序信息);
  • 内存控制器错乱;
  • Row Hammer出现。
  • FuturePlus Systems同时提供了一种自带检测的设备,名为FS2800 DDR Detective。其能在DDR3、LPDDR3、DDR4和LPDDR4 SDRAM上执行该类型审查,速度能达到 DDR4-3200。(你可以找到大量关于这些内存错误问题的信息,在FuturePlus Systems的网址www.ddrdetective.com和其公司博客上blog。)

    那么,我们在设计中应该如何去做?如果你正使用片上内存控制器,例如 Xilinx Zynq Z-7000 SoCsZynq UltraScale+ MPSoCs,你应该小心考虑你的存储器控制编写,以及考虑做一个审查来确保DDR存储器操作正确的执行。FuturePlus Systems的DDR检测设备或许会帮助你做好审查。

    此外,你或许迫切需要一个特殊的内存控制器为你的特殊应用需要。如果这样,无论你是需要在ASIC上设计,或者是在Xilinx All Programmable器件上用可编程逻辑开发控制器。这种可编程逻辑流程能让你更加快速和灵活的完成任务。

    声明:本文为原创文章,转载需注明作者、出处及原文链接,否则,本网站将保留追究其法律责任的权利