SSD的写入放大技术是什么-Write amplification
写入放大(WA)是闪存和固态硬盘之间相关联的一个属性,因为闪存必须先删除才能改写(我们也叫“编程“),在执行这些操作的时候,移动(或重写)用户数 据和元数据(metadata)不止一次。这些多次的操作,不但增加了写入数据量,减少了SSD的使用寿命,而且还吃光了闪存的带宽(间接地影响了随机写 入性能)。许多因素会影响到SSD的写入放大,下面我就来稍微详细的解释一下。
早在2008年,Intel公司和SiliconSystems公司(2009 年被西部数字收购)第一次提出了写入放大并在公开稿件里用到这个术语。他们当时的说法是,写入算法不可能低于1,但是这种说法在2009年被 SandForce打破,SandForce说他们的写入放大是0.5。
由于闪存的运作特性,数据不能像在普通机械硬盘里那样被直接覆盖。当数据第一次写入SSD的时候,由于SSD内所有的颗粒都为已擦除状态,所以数据能够以 页为最小单位直接写入进去(一般是4K,参考颗粒资料),SSD上的主控制器,使用了逻辑和物理的映射系统来管理着闪存。(逻辑我们一般指的是LBA,而 物理指的是FTL)。当有新的数据写入时需要替换旧的数据时,SSD主控制器将把新的数据写入到另外的空白的闪存空间上(已擦除状态)然后更新逻辑LBA 地址来指向到新的物理FTL地址。而旧的地址内容就变成了无效的数据,但是要在上面再次写入的话,就需要首先擦除掉这个无效数据。(闪存运作特性,写入最 小单位是页,而擦除最小单位是块,一般为128~256个页)
那么问题就来了,闪存有编程和擦除的次数限制,这样每次的编程/擦除就叫做1个P/E(program/erase cycles)周期,大家应该都知道MLC一般是5000~10000次,而SLC是10万次左右(查闪存资料)。也就是说写入放大越低,P/E周期就越 少,闪存寿命就越久。
2008年,Intel公司和SiliconSystems公司(2009 年被西部数字收购)第一次提出了写入放大并在公开稿件里用到这个术语。所有的SSD都有一个写入放大值,这个数值是非固定的,取决于这个SSD写入的数据 是随机的还是持续的?写入量是多少?主控做了那些操作,等等。
计算写入放大的公式大致是这样:
对于单次操作,最简单的例子,比如我要写入一个4KB的数据,最坏的情况就是,一个块里已经没有干净空间了,但是有无效数据可以擦除,所以主控就把所有的 数据读出来,擦除块,再加上这个4KB新数据写回去,这个操作带来的写入放大就是: 我实际写4K的数据,造成了整个块(512KB)的写入操作,那就是128倍放大。同时带来了原本只需要简单的写4KB的操作变成读取(512KB),擦 (512KB),改写(512KB),造成了延迟大大增加,速度慢是自然了。
许多因素影响SSD的写入放大。下面我列出了主要因素,以及它们如何影响写放大。
1. 垃圾回收(GC) Garbage collection --- 虽然增加了写入放大,但是速度有提升。
这个比较特殊的算法用来整理,移动,合并,删除闪存块来提升效率。
2. 预留空间(OP) Over-provisioning --- 减少写入放大,好。(预留空间越大,写入放大越低)
在SSD的闪存上划出一部分空间留给主控做优化,用户不能操作的空间。
3. TRIM 开启后可以减少写入放大,好。
一个ATA指令,由操作系统发送给SSD主控,告诉主控哪些数据是无效的并且可以不用做垃圾回收操作。
4. 可用容量 减少写入放大,好。(可用空间越大,写入放大越低)
用户使用中没有用到的空间,需要有Trim支持,不然不会影响写入放大。
5. 安全擦除 Secure Erase 减少写入放大,好
清除所有用户数据和相关元数据,让SSD重置到初始性能。
6. 静动数据分离 Separating Static and Dynamic Data 减少写入放大,好
分组常改写和不常改写的数据。
7. 持续写入 Sequential writes 减少写入放大,好
理论上来说,持续写入的写入放大为1,但是某些因素还是会影响这个数值。
8. 随机写入 Random writes 提高写入放大,不好
随机写入会写入很多非连续的LBA,将会大大提升写入放大。
9. 磨损平衡(WL) Wear Leveling 直接提高写入放大,不好
确保闪存的每个块被写入的次数相等的一种机制。
垃圾回收 Garbage collection
一旦SSD的所有块都已经写入了一次,SSD主控制器将会初始化那些包含无效数据的块。(陈旧数据,这些块里的数据已经被更新的数据替换,已经无效了,没 了LBA地址),现在他们正在等待被删除,以便新的数据可以写入其中,如何优化并整理这些个等待被删除的无效数据,这个算法被称为垃圾收集(GC)。我们 可以看出这个操作是要有前提的,就是SSD必须要支持Trim技术,不然GC就显不出他的优势了(这也是为啥目前只有支持Trim的SSD才会有GC功 能),而GC的本质区别是它们何时处理?效率多少?