提交成功
返回列表

PBlaze5 520 系列 NVMe SSD —— 双重自检

2020 / 08 / 25
1

备用电容在SSD的重要作用

 

利用高速随机存储器(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支持电容双重检测

 

 

设备自检功能(Device Self-test,DST)

 

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)。

 

  • Current Device Self-Test Operation:0代表当前无自检操作;1h代表正在执行短时自检;2h代表正在执行长时自检;

 

  • Current Device Self-Test Completion:以25%、75%进度表示DST完成度,0代表当前没有DST操作进行中;

 

  • 日志会记录最新20次自检结果,记录格式按照Self-test Result Data Structure,如图6。

 

图5 NVMe标准对Device Self-test Log定义

 

一些操作也会中断Device Self-test,如format操作、删除命名空间,指定Self-Test Code为Fh(# nvme device-self-test /dev/nvme0 -n 1 -s 0xf)

 

 

Self-test Result Data Structure

 

如下图6是NVMe标准对self-test返回值的数据结构,日志解析时常分析字段为:

 

  • Device Self-test Status:可以判断出记录的结果执行的是短时(1h)还是长时(2h)自检;

 

  • Segment Number:记录自检出错的segment,如果为3,则指电容检测失效;

 

  • Power On Hours(POH):表示完成设备自检或DST操作被中断时设备的上电时间。

 

图6 NVMe定义Self-test Result Data Structure

 

 

设备自检返回日志解析

 

  • 以PBlaze5 520自检日志解析为例,通过nvme cli标准命令self-test-log和get-log可以解析设备自检效果。nvme self-test-log的输出直观,但内容较少,从截图7实例可以解读出以下结论:

 

  • Current Device Self-Test Operation为0 & Current Completion 0%:表示PBlaze5 520前序自检已完成,当前无DST操作;

 

  • 第一条Self Test Result[0]和第二条Self Test Result[1]字段Operation Result为0:代表执行了两条DST操作并做记录;

 

  • 第三条Self Test Result[2]字段Operation Result为0xf:即15,代表没有DST记录;

 

  • Self Test Code为1(即1h):表示完成的是短时自检;

 

  • Power on hours(POH)为0x15f:表示到执行第一次设备自检,设备共上电351个小时;

 

  • 日志记录两次设备自检均无报错。

 

图7 PBlaze5 520执行nvme self-test-log输出

 

nvme get-log输出内容更详细,但命令没有直观解析,结合NVMe标准对Device Self-test Log定义,从截图8实例可以解读出以下结论:

 

  • 前两个字节(玫红色字体标记)为Current Device Self-Test Operation和Current Device Self-Test Completion字段,全0代表前序DST操作已完成,当前无DST操作执行;

 

  • 每28个字节用于记录一次DST操作返回Self-test Result Data Structure(即一段绿色/橘黄字体标记),对PBlaze5 520共进行两次DST测试,所以有两条DST记录,其中第一个字节为Device Self-test Status(10),即第5个bit位为1,代表记录一次短时操作;第二个字节为Segment Number(00),代表无报错;第五个字节Power On Hours(e3),表示到执行第一次设备自检,设备共上电277个小时;

 

  • 日志记录两次设备自检均无报错。

 

图8 PBlaze5 520执行nvme get-log输出

 

 

数据安全保障

 

Memblaze推出的基于96层3D NAND,新一代低功耗PBlaze5 520系列,电容双重检测进一步提高了电容的可靠性,对上层业务完全透明(短时自检仅在1s内完成),保证DRAM中未落盘数据安全地刷写到非易失性闪存中,同时保持SSD映射表的完整性,以使SSD在系统重新启动后能被识别并再次使用。