NVDIMM原理与应用之四:NVDIMM的数据恢复、使用和监控
NVDIMM的主要结构
nvdimm的内部集成了SDRM、NAND控制器和Flash,还包括兼容DDR规范的I2c接口,以某款常见的NVDIMM为例,主要构造如下图所示:
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 image 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映射到用户态空间后的起始地址和长度;