金沙集团1991入口资讯
掉电一般分两种。一种是正常掉电,另一种是异常掉电。不管是哪种原因导致的掉电,重新上电后,SSD都需要能从掉电中恢复过来,继续正常工作。
先说正常掉电。在掉电前,主机会通过命令通知SSD,比如SATA中的IdleImmediately,SSD收到该命令后,主要会做以下事情:
主机等SSD处理完以上事情后,才会真正停止对SSD的供电。正常掉电不会导致数据的丢失,重新上电后,SSD只需把掉电前保存的相关信息(比如映射数据,闪存块信息等)重新加载,又能接着掉电前的状态继续工作。如果SSD世界只存在正常掉电,那么SSD的实现就会简单很多。
所谓的异常掉电,就是SSD在没有收到主机的掉电通知时就被断电,或者收到主机的掉电通知,但还没有来得及处理上面提到的那些事情,就被断电了。异常掉电可能会导致数据的丢失,比如缓存在SSD中的数据来不及写到闪存,掉电导致这部分数据丢失。还有根据闪存的特性,如果掉电发生在写MLC的Upperpage,会导致其对应的数据遭到破坏,也就是意味着之前写入闪存的数据也可能由于异常掉电导致丢失。异常掉电恢复的目的一方面是尽可能恢复用户数据,把损失减到最低;另一方面是让SSD经历异常掉电后还能正常工作。
为防止异常掉电导致的数据丢失,一个简单的设计就是在SSD上加电容,SSD一旦检测到掉电,就让电容开始放电,然后把RAM中的数据刷到闪存上面去,从而避免数据丢失,企业级的SSD一般都带有电容。带电容的SSD,还是需要设计异常掉电处理模块,因为电容不能100%保证SSD在掉电前把所有的信息刷入闪存。
还有一个比较前卫的想法,就是把RAM这种Volatile(掉电数据丢失)的东西、用Non-Volatile(掉电数据不丢失)的东西来替代,但要求这种Non-Volatile的东西性能上接近RAM。这样,整个SSD都是Non-Volatile的了。Intel和Micron合作开发的3DXPoint。可作为一个选择。3DXPoint兼有闪存掉电数据不丢失和内存快速访问的特点。
RAM中缓存的用户数据,主机自认为把它们写到SSD了(非FUA命令,数据写到缓存,SSD就返回状态给主机),但SSD只是把它们缓存在RAM中,并没有写到闪存。异常掉电时,如果SSD上没有使用电容也没有使用其他黑科技、这部分数据便损失无疑。重上电时,主机是再也读不到这些数据了。
掉电还会导致RAM中映射表丢失。映射表数据很重要,对一个逻辑地址,如果SSD查找不到对应的物理地址,它就无法从闪存上读取数据返回给主机。如果映射表中的数据不是最新的,旧的物理地址对应着老的数据,SSD就会错误地把老数据返回给主机,这个问题就严重了。加入我们