SSD相关知识:写入放大是如何小于1的
写入放大简单来说就是指实际写入的数据量大于需要写入的数据量。
对固态硬盘来说,对一个存有“已被删除但未被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倍。
这就是前面提到的DuraWrite技术的优越之处,它可以将需要写入的数据进行实时压缩。SandForce的测试指出,完整安装Windows 7和Office 2007需要写入25GB的数据,但是经过压缩实际写入的数据只有11GB。当然我们在系统中所看到的仍为25GB。这种压缩算法可能是一种重复数据删除技术,或者说是一种数据约减算法。
也就是说,操作系统传送数据给主控时,主控将数据进行“压缩”然后再写入闪存,而在读取时,由主控进行“解压缩”操作,再传给操作系统。
实际写入的文件少了,写入放大自然会减少,而且实际的看到的数据传输速度也自然会更快。
同样,经过压缩的数据使闪存的实际磨损程度被减小了,这就变相使得MLC的写入寿命得到延长,甚至接近SLC的写入次数,这种说法并非没有道理。
和延长MLC写入次数产生的连带好处就是,均衡磨损机制有了较大的剩余空间可以发挥,而TRIM功能同样受益。
不过这种压缩算法在面对已经被压缩的数据时就无能为力了,比如图像、视频等多媒体文件或者一些容量很大的压缩文件。所以笔者建议使用SandForce方案的固态硬盘的用户不要存放太多此类文件,除非你的剩余空间确实足够大。
网友评论