3.5.2 SSD延寿计划:耗损均衡
SSD有限的写入循环次数决定了用的越频繁,NAND死得越早,如果不加以控制,那么容易就出现这样的情况:主控频繁向某部分bloc写数据-擦除数据-再写入数据,而NADN其他部分写数据的机会比较少,这种情况就像小品中说的那样“你搁一个羊身上薅,时间长了谁看不出来”,用的频繁的区块坏的更快,不平衡的使用方式对SSD寿命也是一种伤害。
耗损均衡(wear leveling)技术就是为了保证NAND所有区块的写入-擦除几率是均等的,说白了就是“有难同当”,有活大家一起干,要挂的时候也是集体挂。
耗损均衡与主机系统无关,因为主机根本不关心数据是写在那块NAND区块的,它只是向逻辑区块寻址空间(logical block addresses,简称LBA)写入数据,SSD主控再通过LBA向PBA(物理寻址空间,physical block addresses)真正写入数据,而WL就发生在后一段过程中。
准确来说,耗损均衡是一种优化算法,它可以将LBA重新映射到不同的PBA空间中以平衡PBA的写入次数,重新映射的频率、快速定位“最小磨损”(least worn)区块的能力以及迁移数据的能力是评估WL性能的主要指标,它主要依赖于SSD主控。
依照不同的状态,WL可以分为三种,无耗损均衡(no-wear leveling)、动态耗损均衡(Dynamic Wear Leveling)以及静态耗损均衡(Static Wear Leveling)三种,分别来看。
无耗损均衡对SSD寿命影响很大
无耗损均衡就是不做任何干涉,任由SSD随意使用PBA空间,那么结果自然很悲催,P/E循环次数很快耗尽,SSD就要挂了,这时候SSD的寿命就取决于使用的闪存类型了,SLC好些,MLC就差远了,总之这种情况是极不推荐的。
动态耗损均衡
动态耗损均衡是指主控算法指定只寻找那些没用过的PBA区块做耗损均衡处理,而忽略那些写过数据的PBA,哪怕只写过一次数据。图表设定的情况是75%的空间写过了数据,那么动态耗损均衡就只会从剩下的25%空间进行耗损均衡处理,此时可靠性是无耗损均衡时的25倍,但是只有四分之一的区块才有耗损均衡处理。
静态耗损均衡处理的算法会搜寻整个SSD区块以寻找写入数据次数最少的区块,如果这个区块现在是空白的,那么就直接写入新的数据,如果找到的这个区块恰好有数据存在(而且是不经常变动的数据,类似系统文件),那么它里面的数据会被转移到另一个写入次数比较多的区块,然后再把新的数据写入到这个区块中。
静态耗损均衡的可靠性比无耗损均衡高了100倍,与动态耗损均衡相比也要高三倍。
现在我们再来算一下120GB SSD的使用寿命问题。以3000次P/E循环为例,写入放大率为2,耗损均衡率也算作2,平均每天写入50GB数据量,那么实际的使用寿命为120GB*3000/(50GB*2*2*365)=4.9年,差不多是5年左右(60GB则是两年半左右),数值高低还要看厂商的写入放大和耗损均衡控制能力,更要看用户的使用情况,如果写入操作很少(实际上50GB的写入量不算少,日常操作中读取更多,写入比较少),那么使用寿命还得延长。
耗损均衡技术的存在使得SSD不不是那么容易用坏,而且它只是提高SSD可靠性和寿命的一个代表,闪存厂商和主控厂商都在SSD延寿、恢复性能上倾注了很多精力,比如下一节还要讲到的TRIM和GC。