SSD基础知识,给大家充充电!

●磨损平衡(Wear Leveling)

为了延长NAND闪存的寿命,目前固态硬盘中均应用了Wear Leveling(均衡磨损或磨损平衡)机制,它可以尽可能地将文件平均分配到每一个区块(Block),保证对每一个闪存块的编程/擦写次数一致,避免对某一部分区块的过度地重复进行擦除操作而报废,从而有效延长了固态硬盘的写入寿命。
磨损平衡算法一般分为静态和动态,当前所有主流的固态硬盘均支持动态磨损平衡。动态磨损平衡是指主控尽量选择那些“较新”的区块来使用,这种算法的优点是复杂度低,易用控制,不会占用太多资源,但缺点则是这种算法还不是最优。
基于动态磨损平衡之上的静态磨损平衡,则是对那些“不经常更新”的文件占用的区块进行优化处理,将他们剔除转移至一个“较老”的区块中。因为这些文件不常被修改,所占用的区块被磨损的次数更少,以此来达到优化的目的,进一步发挥“磨损平衡”的功效。
静态磨损平衡最大的优点自然就是对固态硬盘的寿命进行了充分优化,但显然,它的缺点在于复杂性较高,会大量占用主控资源。
所以说固态硬盘寿命的长短不仅仅取决于闪存的P/E次数,磨损平衡算法甚至包括后面的垃圾回收机制都起着至关重要的作用。
●TRIM指令

TRIM是从Windows 7和Windows 2008 R2开始支持的一个ATA指令,他的作用就是由操作系统告诉固态硬盘,标记那些存有无效数据的地址,以提升后续垃圾回收的效率。
这条指令有什么用呢?我们在删除数据时,Windows会先标记被删除的扇区,但此时对于硬盘来说该数据仍是存在的,因此我们就有误删除数据后恢复数据的 可能性。在有新的数据将要写入该扇区时,对于机械硬盘来说可以直接写入,但是对于固态硬盘来说必须先进行擦除操作,再将新的数据写入其中。所以长期如此写 入数据之前总要进行擦除操作,性能自然逐渐下降。
如果固态硬盘支持TRIM,在数据被删除或者格式化分区之后,就会被标记为“无效”,待主控在做垃圾回收将所有的“有效数据”合并时,就会对这些“无效数 据”进行擦除再写入的操作,当然使用哪些区块则依赖于磨损平衡算法,两者相辅相成。也就是说,当操作系统有新的数据需要写入固态硬盘时便不必再进行额外的 “先擦除”的动作,保证了性能。 所以支持TRIM的固态硬盘增加了垃圾回收的效率,因为不必过多去操作那些“无效数据”,这也是保证寿命的有效途径。但是目前并非所有主控芯片均支持 TRIM,这需要用户在购买时进行核实,固件的更新也会跟进提供支持。除此之外,我们要确定操作系统已经启用了TRIM指令(Windows 7和Windows 2008 R2默认是开启的),同时已经安装了支持TRIM的磁盘驱动程序。另外,当前TRIM指令还不支持磁盘阵列(RAID),所以组建固态硬盘RAID的用户 还需小心行事。
启用了TRIM指令的固态硬盘确实可能造成误删除数据之后“没有后悔药”,尽管可能不是立竿见影的效果。不过机械硬盘由于硬件层面就不支持TRIM,也就不存在上述问题了。

●垃圾回收(Garbage Collection)

刚刚有提到垃圾回收,现在来说说这个名词。垃圾回收其实就相当于固态硬盘的碎片整理,它是固态硬盘自身的一种机制,不依赖于操作系统。
垃圾回收的功能是将所有Block中的有效Page合并到一个新的Block中,并将旧的Block进行擦除,这样做的好处一方面减少寻址负担,另一方面留出更多的空闲Block。所以垃圾回收对固态硬盘的性能和寿命都起到至关重要的作用。
垃圾回收分为闲置垃圾回收和被动垃圾回收。顾名思义,前者就是在固态硬盘闲置时做垃圾回收操作,这样做的好处是不会占用额外的主控资源,能够让固态硬盘尽可能地保持较高的效能,但缺点就是会增加额外的写入放大。
而被动垃圾回收则是在数据输入/输出的同时做垃圾回收操作,这个机制会大量占用主控资源,对有数据请求时的“响应时间”产生一定影响。这个机制也可以称为“实时垃圾回收”
总的来说,垃圾回收操作由于将不同Block中的有效Page进行合并,有额外的擦除操作,会增加写入放大。因此过于频繁的垃圾回收会对NAND寿命产生影响,但又需要进行这样的机制来保证性能,怎样在两者之间取得一个平衡是衡量固件算法的重要指标。



●写入放大

写入放大简单来说就是指实际写入的数据量大于需要写入的数据量。
对固态硬盘来说,对一个存有“已被删除但未被TRIM标记为无效的数据”的Block(块)进行写入操作,就必须先擦除这个Block,然后再进行写入操 作,而不像机械硬盘那样直接覆盖即可。以英特尔最新25纳米制程NAND颗粒来看,SLC闪存的1个Block一般包含128个Page(页),而MLC 闪存则为256个Page,1个Page的大小为8KB。Page是最小单位,但固态硬盘的擦除操作的最小单位是Block。
假如我们只需要写入8KB的数据,但是由于要擦除整个Block,因此必须经过“读取(到缓存中)-修改-擦除-写入”的过程,这样的最终结果是可能实际 重新写入了256个8KB即2MB的数据,这就是写入放大为256倍。显然,固态硬盘中存在的这种“已被删除但未被TRIM标记为无效的数据”越多,间接 导致的写入放大就会越大。因为此时垃圾回收的运作还需要带上这些“无效的数据”,从而多擦除了很多数据还占用了资源。所以,TRIM指令对减小写入放大起 着至关重要的作用,因为将被删除的数据标记为无效,减少了垃圾回收操作需要合并的数据量,也就是减少了实际写入到新Block的数据量。
根据写入放大的原理来看,这个倍数不可能小于1,它依赖于固件的算法,遇到最坏的情况该数值可以突破100。在实际中,较低档次的固态硬盘写入放大率一般在10到20倍左右,英特尔的方案可以达到1.1倍,但SandForce的方案则只有其一半,平均为0.55倍。
也就是说,操作系统传送数据给主控时,主控将数据进行“压缩”然后再写入闪存,而在读取时,由主控进行“解压缩”操作,再传给操作系统。实际写入的文件少 了,写入放大自然会减少,而且实际的看到的数据传输速度也自然会更快。同样,经过压缩的数据使闪存的实际磨损程度被减小了,这就变相使得MLC的写入寿命 得到延长,甚至接近SLC的写入次数,这种说法并非没有道理。和延长MLC写入次数产生的连带好处就是,均衡磨损机制有了较大的剩余空间可以发挥,而 TRIM功能同样受益。不过这种压缩算法在面对已经被压缩的数据时就无能为力了,比如图像、视频等多媒体文件或者一些容量很大的压缩文件。所以笔者建议使 用SandForce方案的固态硬盘的用户不要存放太多此类文件,除非你的剩余空间确实足够大。SSD基础知识,给大家充充电!_第1张图片

你可能感兴趣的:(动态,固态硬盘,平衡,最大的)