利用高速随机存储器(DRAM)缓存数据,是 SSD 提高性能的方法之一。但由于固有结构的限制,DRAM有易失性,必须周期性对数据进行刷新,并且没有供电时,缓存在DRAM 上的用户数据会丢失。 如果是安全关机,系统会提前通知设备电源要中断,让SSD有足够的时间处理还没有落盘的数据,SSD 此时会将缓存的或者正在写入的用户数据完整的刷写进 NAND,同时不再接收新的IO请求。但是,异常掉电不会提前给设备通知和刷写时间,缓存的数据很有可能会丢失。如果没有意外掉电保护,异常电力中断(譬如大面积供电中断,人为误操作,甚至电压不稳)将会给企业用户造成巨大损失。
图1 SSD板载电容的作用
备用电容是在异常电力中断时,提供额外供电保护的重要元器件。所以在电容的产品选型,要考虑如下两个重要指标:
1. 电容寿命指标。这个指标表征的是电容长期老化趋势,担保的有效工作年限。
2. 初始状态下电容保持能量。这个指标表征的是在PBlaze产品上使用此电容时,确保在5年时间内电容能量能够一直满足产品掉电时间能量要求。
因此,对电容的可靠性验证也分电量和可用性两部分:
一是根据固件异常掉电设计,写压力大情况下的放电时间要求,测量评估在不同系统功耗下电容放电时间要满足固件设计的最大要求。电容本身有一定的公差(Capacitance Tolerance),一般有±5%,±10%,±20%,所以备用电容选型要保证-20%公差对应的电容初始容值,其能提供的最小初始保持时间 > 固件设计要求最长放电时间;电容使用时间长了都会衰减,容量变小,所以5年以后电容的最小保持时间 > 固件设计要求最长放电时间,如表1和图2示意。
表1 电容不同公差对应的容值和保持时间
图2 电容初始和5年老化保持时间 > 系统设计需要最长保持时间
二是对电容有效性的检测。通常的实现是在出厂前,会模拟异常掉电的动作让电容放电,检测电容的放电能力,保证电容出厂时的可用性。当设备交付到用户端,PBlaze5 520系列在设备上电时会对电容有效性进行放电检测。如果上电电容检测失效,设备会进入写保护模式(read-only),防止用户数据在无掉电保护的情况下“裸奔“。同时为了进一步提高对电容检测的力度和灵活性,PBlaze5 520系列新增让用户主动下发指令进行电容检测,即触发设备自检(Device Self-test)中一个segment功能项。
图3 PBlaze5 520支持电容双重检测
NVMe标准定义了一个可选接口,对SSD执行自检。测试内容由SSD厂商定义,SSD是执行短时间(Short,不超过两分钟)还是扩展自检(Extended),其中segment 3即是对电容有效性进行检测,如图4所示。
图4 NVMe标准定义Device Self-Test功能 (optional)
当通过 # nvme device-self-test /dev/nvme0 -n 1 -s 1 触发短时间自检程序,会按照预定义支持的segment顺次执行检测,自检完成情况记录在Device Self-test Log(Log Identifier 06h,如图5)。
图5 NVMe标准对Device Self-test Log定义
一些操作也会中断Device Self-test,如format操作、删除命名空间,指定Self-Test Code为Fh(# nvme device-self-test /dev/nvme0 -n 1 -s 0xf)。
如下图6是NVMe标准对self-test返回值的数据结构,日志解析时常分析字段为:
图6 NVMe定义Self-test Result Data Structure
图7 PBlaze5 520执行nvme self-test-log输出
nvme get-log输出内容更详细,但命令没有直观解析,结合NVMe标准对Device Self-test Log定义,从截图8实例可以解读出以下结论:
图8 PBlaze5 520执行nvme get-log输出
Memblaze推出的基于96层3D NAND,新一代低功耗PBlaze5 520系列,电容双重检测进一步提高了电容的可靠性,对上层业务完全透明(短时自检仅在1s内完成),保证DRAM中未落盘数据安全地刷写到非易失性闪存中,同时保持SSD映射表的完整性,以使SSD在系统重新启动后能被识别并再次使用。