本文主要是介绍2.8 企业级SSD之掉电保护,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
没有掉电保护会发生什么问题?如果发生异常掉电时,SSD没有电容来做掉电保护。可能发生的问题如下:
1. SSD重新连接后不识别。因为映射表来不及保存到NAND中,重新上电后,有的时候30分钟静置大法可以恢复过来,更有很大可能救不回来,只能重新开卡。
2. GBB增加。突然掉电时,如果正在读写数据,有些单元可能会发生电压偏移,如果超过ECC等校验能力,就会标为坏块。
3. 丢失缓存数据。缓存一般是电容元件,掉电不保持数据。数据在缓存中还没来及写入到NAND中,掉电时就会丢失。
SSD上电流程:
1.初始化PCIe
2.加载NVMe驱动
3.配置NVMe的Admin Queue
4.NVMe Controller Reset
5.Host发送admin命令identify/set-feature等获取盘信息
6.根据盘信息创建字符设备,字符设备初始化。这里我们 就能在/dev下看到字符设备nvme*
7.创建块设备。创建IO CQ和IO SQ,发送idenfy namespace枚举所有的namespace,并初始化。这时我们就能在/dev下看到块设备nvme0n1,nvme0n2等等。就能通过IO命令对块设备进行数据读写了。
SSD正常下电流程:
带DRAM的SSD:企业级和高端的消费级SSD都是有DRAM的,主要作用是暂存映射表,通常是SSD容量的千分之一。为什么是千分之一?请参考另一篇地址映射的文章,4Bytes的地址映射到4k的物理数据,这里不具体展开讲了。
1.把用户数据写入NAND。
2.把映射表写入NAND。
3.把NAND块信息写入
SSD异常下电流程:
SSD中都有超级电容或者钽电容,SSD上电时进行充电。突然掉电时,侦测电路的GPIO反馈到fw,超级电容或钽电容供电支持到DDR中的数据刷到NAND。
容量越大,需要的超级电容也越大,但是PCB的空间是有限的。超级电容如果太大也容易带来另一个问题,就是电脑重启时要电容完全放电SSD自检才能通过并识别到盘。
超级电容或钽电容随着使用出现老化,就像手机电池用两年后不耐用了。保存电量的减少也会带来异常掉电后的数据丢失或不识盘风险。
所以掉电时优先保存用户数据并对这些数据做标记,重新上电后把这些新增数据的映射更新到映射表里或者重建映射表。
需要考虑
1.电容大小的设计,太小不够数据保存;太大需要的充电时间长,并且SSD重新上电时检测到还没放电完毕,SSD就不能识别。
2.电容老化
这篇关于2.8 企业级SSD之掉电保护的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!