NVDIMM概述


1、简介

顾名思义,NVDIMM是Non-Volatile DIMM(非易失性内存)的简称。作为系统掉电后仍然保证数据不丢失的重要硬件,NVDIMM和NVRAM的功能类似,都是在系统掉电时仍然能够保证一部分内存里的数据不会丢失,并且当系统上电后数据能够自动恢复到内存当中。和NVRAM不同的是,NVRAM要么是把数据写回到PCIE接口的独立卡上,要么是依赖于独立的后备电池给DRAM在系统掉电时供电,而NVDIMM是把数据写回到自带的FLASH芯片上去。另外一个不同时,NVDIMM本身不需要额外的硬件设计,也不占用PCIE通道资源,它只用主板上DIMM上没有占用的DIMM插槽。


2、原理

从硬件的角度看,NVDIMM可以看作由四部分组成:用作内存的DRAM,保存数据的FLASH,控制两者并和CPU交互的中心控制模块(FPGA),以及在系统掉电后为前面三者提供暂时后备电源的超级电容。当系统掉电时,NVDIMM上的中心控制模块能够检测到,并且触发DRAM进入异步刷新模式,

当CPU cache、write combining buffer、store buffer中的数据都写回到DRAM后,中心控制模块再把DRAM里的数据写到NVDIMM上的FLASH里面去,相应数据的校验值也会写道FLASH。类似地,在系统上电后,NVDIMM上的中心控制模块先于CPU接管其上的DRAM,它初始化DRA,进行一些读写测试,确保无误后,通过校验值检查FLASH上是否有之前保存的完整数据,如果之前保存到FLASH里的数据完整,就把它写回到DRA。完成这些步骤后,中心控制模块再把DRAM的控制权交还给CPU,此后CPU可以像对待普通的NVDIMM一样往NVDIMM上的DRAM里读写数据。


3、核心IP

通过以上对硬件的分析,可以看到NVDIMM最核心的IP就是中心控制模块的设计,它既是DRAM控制器,又含有FLASH控制器,还能监控CPU以及主板上的相关信号,此外还能生成校验值。这也就难怪为了保护知识产权,为什么现在市面上能买到的NVDIMM上的中心控制模块,都用FPGA的形式实现。

此外,为了确保每次掉电NVDIMM都能保证把DRAM的内容保存到FLASH里面去,作为临时后备电源的超级电容的续航能力和稳定性尤其重要。否则就可能出现DRAM的内容没有全部备份到FLASH里去,超级电容的电量就已耗尽的情况,这就根本起不到掉电保护数据的作用。因此,超级电容的稳定性、续航能力决定了整个NVDIMM的稳定性和强壮程度。

当然,为了保证数据一致性,特别是能把掉电之前NVDIMM的DRAM所对应的 在cache、write combining buffer、store buffer里的任何数据都写回到FLASH,需要系统软硬件的综合设计,这就要求处理器厂商、主板厂商、NVDIMM厂家、BIOS厂商一起协作,设计好实现的方法。


4、使用方法

从系统软件的角度来看,NVDIMM既可以当作一个透明的DRAM,也可视作一个字符设备。但无论如何,使用的时候它必定需要映射到用户可以访问的地址空间。同设备内存、独立显存的地址映射类似,NVDIMM上的DRAM可以支持uncache、write through、write combine这三种映射模式。当然如果硬件和系统软件能够自动写回cache以及write combining buffer和store buffer的内容到DRAM, cached的映射模式也是可以的。


5、应用场景

因为NVDIMM能够保证掉电基本不丢数据,因此它特别适合对数据完整性要求苛刻的场景,比如某些需要实时交易的金融行业、重要的信息平台等。此外,因为NVDIMM还能够上电后很快从NVDIMM上的flash恢复数据,它也可以用来加速系统的启动,显著地减少系统宕机时间,这对那些servie on time以及基本不允许宕机的应用来说特别有用。