NVDIMM典型应用及技术发展
1.典型应用之全系统保护
全系统保护采用超级内存作为系统主存。在系统异常掉电时,将整个系统的运行状态(包括CPU,芯片组,其他外设以及所有进程的信息)存入超级内存。在供电恢复后,利用超级内存中的数据,迅速恢复至掉电前的工作现场。系统仿佛只是经历了一次待机->唤醒的过程。
全系统保护的核心意义是flush-on-fail:仅在掉电时才利用简易后备电源将系统的运行状态写入非易失性存储介质。与传统的文件系统,数据库采用的flash-on-commit方式相比,flush-on-fail的意义在于运行时开销为零,避免了flash-on-commit额外的日志记录,避免了原子写事务,IO屏障引起的磁盘操作延迟。数据一致性交由CPU原子操作指令,高速缓存指令以及内存栅障指令保证。运行于全系统保护计算机中的文件系统与数据库设计精简,吞吐率高,安全性方面更有保障。
2. 典型应用之数据缓存
磁盘缓存是为了减少CPU透过I/O读写磁盘的次数,提升磁盘I/O的效率,用一部分内存来储存访问较频繁的磁盘内容。磁盘缓存的存在对于数据访问的一致性带来了问题,尤其是采用write-back策略的写缓存导致异常掉电情况下内存中更新的数据未能及时写入磁盘而丢失。超级内存是写缓存的最佳存储介质。它的随机访问性质能让CPU和操作系统直接访问管理,并且非易失性保证数据在异常掉电情况下得以保护。
目前,针对RAID控制器的写缓存超级内存已逐渐被接受。对于带有板级RAID控制芯片或者采用软件RAID方案的计算机,缺乏写缓存,超级内存可以直接用做系统主存,配合操作系统,完成写缓存任务。还有一类PCIE接口的RAID控制卡,它们采用普通的带电池后备的内存条作为缓存使用,超级内存可以直接替代这些内存条。
3. 典型应用之链式存储
存储链是将整个存储系统中的数据按照安全度,性能要求以及使用频率分层存储在不同的非易失存储介质中。
如图所示为一典型的存储链实例。IO性能要求较高的数据被存储在SSD上,而要求较低的数据放入各种类型的磁盘阵列以及NAS。超级内存可作为存储链的最前端,它的速度比SSD更快,并且能够提供直接随机访问的特性。CPU的内存栅障与刷新cache指令能够保证超级内存数据的原子写与一致性。所以,超级内存非常适合用作文件系统或者数据库元数据与日志的存储介质。
4.技术发展之Intel CPU
Intel即将推出的Haswell-E CPU开始支持288pin的DDR4内存条。在JEDEC 最新的DDR4规范中,有4个pin作为DIMM规格的超级内存的电源与控制信号。国内的家用机主板厂商微星,技嘉都已经开始制作Haswell-E平台的主板,预计2014年中旬即将上市。
异步DRAM自刷新(ADR)技术是Intel在凌动S12X9家族处理器上退出的新技术,可保证在异常掉电时,CPU冲刷cache,写回cache的脏数据,然后将DRAM设置进入自刷新状态。在DRAM处于自刷新状态时可将控制权由CPU移交给超级内存。ADR技术为用作系统主存的DIMM规格的超级内存量身定制。另外,ADR技术能够有选择的在计算机热启动时,不对特定通道的DRAM进行重新初始化,从而保留DRAM中的数据。包括MacroSAN、Dahua、Accusys、Qsan和Qnap等数据中心制造商已经宣布开始支持S12X9处理器家族。
5.技术发展之SNIA NVM Express
SNIA在2013年底相继发表的NVM(Non-Volatile Memory)的硬件接口规范和编程模型规范。定义了NVM的范围为PCIE接口的Flash存储器,控制卡以及NVDIMM,PCM等可以随机访问的非易失性存储器。SNIA提出了block volume和persistent memory两种模型,并给出了每种模型能够处理的命令集以及能完成的功能。Block volume即传统的块设备模型,以块为单位进行数据传输,采用与现有的ATA,SCSI,FC等协议具有相同的编程方式,比如PCIE SSD,PCIE RAID controller就是此类模型。Persistent memory是具有直接随机访问与非易失性双重特性的编程模型,可以采用传统虚拟内存管理接口,为文件系统或者数据库提供新的存储行为。NVDIMM,NVSMM,DIMM NVRAMDISK皆支持此类编程模型。
6.技术发展之Linux Kernel
操作系统方面,Ric Wheeler 在2013 Linux Foundation Collaboration Summit提出了在Linux系统中支持NVM的想法,并且SNIA组织也已经给出了NVMe设备的Linux驱动。在Ric的讨论中,在兼容老式编程模型的API的基础上,定义新的适合NVM设备的API,让文件系统和数据库都能更好地利用NVM的特性。