NVDIMM原理与应用之四:NVDIMM的数据恢复、使用和监控

  1. NVDIMM的主要结构

nvdimm的内部集成了SDRM、NAND控制器和Flash,还包括兼容DDR规范的I2c接口,以某款常见的NVDIMM为例,主要构造如下图所示:

wKiom1hsTmmwavHZAAEu9HbL0-I290.png

2. NVDIMM datarecovery

NVDIMM掉电保存和恢复数据的功能,需要依赖于NVDIMM超级电容、CPU芯片、主板电路和BIOS的协同工作。系统突然掉电或者重启的时候,主板上专门的电路设计保证触发ADR,此时在nvdimm超级电容提供电力,保证NVDIMM SDRAM上的数据能够即使写到nvdimm的NAND Flash上去。不同的主板可能会实现不同的触发ADR的硬件电路。比如笔者手头上的某款服务器,下面的操作会触发ADR:


CPU Reset
BMC initiated power cycle (confirm)
AC power lost (confirm)
0xCF9 reboot (confirm)
CPU thermal trip assertion
CAT/IERR assertion

ipmitool chassis power cycle (confirm)


这里特别需要引起重视的是,如果上面的操作和下面不能触发ADR的操作混淆或者相邻执行,就不会触发ADR,进而可能导致数据丢失:

ipmitool chassis power reset (confirm)

BMC initiated reset (confirm)


而在系统再次启动的过程中, 如果flash里有完整的内存映像,硬件会自动把它写到nvdimm SDRAM。



3. NVDIMM usage


不同的NVDIMM厂商会提供不同的SDK,开发者需要参考SDK里提供的文档、示例代码和乃至驱动源代码,根据实际要应用的场景,选择合适的驱动类型、Cache模式和API和来实现自己的功能。以笔者手头上的NVDIMM为例,需要按照下面的步骤设置和使用nvdimm:

Once Restore is complete and the system boots up to OS; here are the things to do:


  • Check valid p_w_picpath Restored status


  • Check all the conditions as mentioned in following table


  • ARM


  • ClearSDV


Ready for SAVE


4. NVDIMM RAS monitor

实际使用NVDIMM的过程中,如果NVDIMM持续处于高温的状态,会急剧缩短它的使用寿命;此外,nvdimm上的Flash也有一定的擦写次数的限制。而且,如果nvdimm的超级电容里电量不够一次SAVE操作,也会发生数据丢失的情况。因此,为了保证nvdimm的可靠性、可用性,及时预报掉电或者重启后不能恢复数据的情况,需要监控一些nvdimm RAS相关的状态,包括电容温度、电量、flash老化率等等。下面是针对笔者的某款NVDIMM的监控列表,仅供参考:

Type

Must check for saving data

and/or restoring data?

Valid Rang

Invalid Rang

Event Severity

Poll interval

DIMM connected

Must check

Connected

Not

Connected

High

Once

SuperCap connected

Must check

Connected

Not

Connected

High

Once

Charge Level

Must check for saving data

ARX_CHARGE

Others

High

12h~24h

Flash Life Level

Must check for saving data

>=10

<10

High

12h~24h

Capacitor Healthy

Better to check

healthy

EOL

?

12h~24h

Temperature

Better to check

0~65C

>65

Normal

12h~24h

Armed Status

Must check for saving data

Armed

Not Armed

High

once

Valid Image Restored Status

Must check after recovering data

Valid

Valid

High

Once per

recover

Valid Image available Status

Not need check

-

-

-

Never




5. NVDIMM内存使用方式


  • 支持nvdimm的bios会在系统内存初始化的时候探测到nvdimm并分配特殊的类型符;


  • nvdimm驱动实现nvdimm逻辑设备open/close/ioctl/mmap/等操作,其中mmap操作实现nvdimm内核空间到用户空间的映射


  • nvdimm SDK提供API向调用者提供nvdimm映射到用户态空间后的起始地址和长度;