写入放大

垃圾回收和耗损平衡的结果是SSD的写入放大
垃圾回收和耗损平衡的结果是SSD的写入放大,从而增加了驱动器的写入次数,减少了其使用寿命[1]

写入放大(英語:Write amplification,简称WA)是闪存固态硬盘(SSD)中一种不期望的现象,即实际写入的物理信息量是将要写入的逻辑数量的多倍。因为闪存在可重新写入数据前必须先擦除,执行这些操作的过程就产生了一次以上的用户数据和元数据的移动(或重新写入)。此倍增效应会增加请求写入的次数,这会缩短SSD的寿命,从而减小SSD可靠运行的时间。增加的写入也会消耗闪存的带宽,这个效应主要会降低SSD的随机写入性能[1][2]。许多因素会影响SSD的写入放大;一些可以由用户来控制,而另一些则是数据写入和SSD使用的直接结果。

在2008年,英特尔[3]SiliconSystems(2009年被西部数据收购)[4]首先在他们的论文和出版物使用了术语“写入放大”。写入放大通常用闪存的写入与主机系统的写入之比来衡量。没有开启数据压缩,写入放大不小于1。在使用压缩的情况下,SandForce声称他们的典型写入放大达到了0.5[5],在最佳情况下,使用SF-2281控制器,此值能低至0.14[6]

SSD基本操作

NAND闪存以每页4 KB写入数据,以每块256 KB擦除数据
NAND闪存以每页4 KB写入数据,以每块256 KB擦除数据[7]

由于闪存操作的性质,数据不能像在硬盘中那样直接覆写。当首次向SSD写入数据时,单元都处于已擦除状态,因而数据可以直接写入,一次一(大小通常为4至8千字节(KB))。SSD中管理闪存与主控系统接口的SSD控制器,使用被称为逻辑区块地址(LBA)的逻辑到物理映射系统,这是闪存转换层(FTL)的一部分[8]。当新的数据要替换已写入的旧数据时,SSD控制器将会写入新的数据至新的位置,并且更新逻辑映射,将其指向新的物理位置。原位置的数据将不再有效。在可以被再次写入之前,它需要被擦除[1][9]

闪存的编程和擦除次数有限。通常以闪存在整个寿命中最多可忍受的编程/擦除循环(P/E循环)次数表示。单层单元(SLC)闪存,通常设计为高性能和长寿命,一般能有50000到100000次循环。截至2011年 (2011-Missing required parameter 1=month!),设计用于低成本应用的多层单元(MLC)闪存,循环次数就大为减少,一般只有3000至5000次循环。写入放大越低,则越为理想,因为与之对应的是闪存中P/E循环次数的减少,从而延长SSD的寿命[1]

计算数值

即使是在术语的定义之前,写入放大就已经存在于固态硬盘中,但直到2008年,才有英特尔[3][10]和SiliconSystems开始在他们的论文和出版物中使用这个术语[4]。所有的SSD都有一个写入放大值,它基于目前正在写入的数据,及先前已写入到SSD的数据。为了能准确地测量特定SSD的值,选定的测试流程应运行足够长的时间,以确保驱动器已达到稳态[2]

计算SSD写入放大的一个简单公式是:[1][11][12][13]

闪存写入的数据量 ÷ 主控写入的数据量 = 写入放大

影响因素

许多因素会影响SSD的写入放大。下表列出了主要因素,以及它们对写入放大的影响。对于变量因素,表中注明了“正”相关或“反”相关。如,随着预留空间的增加,写入放大减小(反相关)。如果该因素是一个开关(“启用”或“禁用”)函数,那么它的关系或“顺”或“逆”[1][8][11]

写入放大因素
因素 描述 类型 关系*
垃圾回收 用来挑选用于擦除和重写的最佳块的算法的效率 变量 反(减小,好)
预留空间 分配到SSD控制器的物理容量百分比 变量 反(减小,好)
SATA的TRIM命令 或 SCSI中的UNMAP 这些命令必须由操作系统(OS)发送,这可以通知存储设备哪些扇区含有无效数据。可以处理这些命令的SSD能在擦除块时,将包含这些扇区的页作为空闲空间回收,而不是复制无效的数据到干净的页中。 开关 顺(减小,好)
自由用户空间 没有实际用户数据的用户容量百分比;需要TRIM,否则SSD不会从任何空闲的用户容量中获得好处 变量 反(减小,好)
安全擦除 擦除所有的用户数据和相关元数据,将SSD的性能重置到最初状态(直至重新开始垃圾回收) 开关 顺(减小,好)
耗损平均 算法的效率,令每块的写入次数与其他的块尽可能相同 变量 正(增加,坏)
静动数据分离 将数据按修改频率分组 开关 顺(减小,好)
连续写入 理论上,连续写入的写入放大为1,但其他因素仍会影响此值 开关 顺(减小,好)
随机写入 写入到非连续的LBA对写入放大的影响最大 开关 逆(增加,坏)
数据压缩,包括重复数据删除 数据压缩和重复数据删除能消除更多的冗余数据,降低写入放大,同时提升SSD速度。 变量 反(减小,好)
SLC模式使用MLC NAND 以每单元1位,而不是以设计的每单元位数(通常为每单元2位)写入数据,以加快读取和写入操作。不幸的是,这至少会将写入放大翻倍,因为一个单元只包含1位数据,而不是每单元2位或更多。另外,如果临近容量限制,SSD必须把在SLC模式写入的数据改写为MLC模式下的数据,才能释放空间,以便容纳更多的数据。 开关 逆(增加,坏)
*关系定义
类型 关系 描述
变量 随着因子增加WA增加
随着因子增加WA减小
开关 当因子开启时WA减小
当因子开启时WA减小

垃圾回收

页面写入,直至填满区块。然后当前的数据页被移动到新的区块,旧的区块被擦除。
页面写入,直至填满区块。然后当前的数据页被移动到新的区块,旧的区块被擦除[7]。(图示:1.四个页面(A-D)写入一个区块(X)。单独的空闲(已擦除)页面可以直接写入;2.四个新页(E-H)和四个替代页(A'-D')写入区块(X)。原来的A-D页现在成了无效(过期)数据,但直至整个区块被擦除前,页面都不能重新写入;3.要向含有过期数据的页面(A-D)写入数据,有效页面(E-H和A'-D')被读取并写入区块(Y),然后区块(X)被擦除。最后一步称为“垃圾回收”。)

数据以页面(由多个单元组成)为单位写入到闪存中。然而,存储器只能以较大的单位区块(由多个页面组成)擦除[7]。如果一个块中某些页内的数据不再需要(称为过期页),仅该块中含有有效数据的页面被读取,并重新写入到另一个先前擦除的空块中[2]。因而,由于没有移动过期数据而留下的空闲页面就可用来存储新的数据。这一过程称为“垃圾回收”(GC)[1][12]所有的SSD都或多或少地包含垃圾回收机制,但在执行的频率和速度上有所不同[12]。垃圾回收占了SSD上写入放大的很大一部分[1][12]

读取数据不需要擦除闪存,因此通常与写入放大无关。在有限的情况下会发生读取干扰错误,此时会读取并重新写入区块中的数据,但是这不会对驱动器的写入放大造成实质性的影响[14]

后台垃圾回收

垃圾回收的过程包括读取并重新向闪存写入数据。这意味着,在主控写入新数据时,就必须先读取整个区块,将区块中仍包含有效数据的部分写入,之后才将新数据写入。这显著降低了系统的性能[15]。有的SSD控制器实现了“后台垃圾回收”(BGC),有时也被称为“空闲垃圾回收”或“空闲时间垃圾回收”(ITGC),能让控制器在主控需要写入新的数据之前,使用空闲时间整理闪存块。这使得驱动器能够保持较高的性能[16]

如果能在真的需要空间前,控制器在后台垃圾回收时就已经收集好了所有的空闲区块,那么主控写入的新数据就可以直接写入,而无需先移动数据,这样驱动器就总能表现出最佳性能。不利的是,一些块的数据实际上主控并不需要,它们最终将会被删除,但操作系统并没有告诉控制器这些信息。结果,即将要被删除的数据被重写到了闪存的另一个位置,因而增加了写入放大。在一些OCZ的SSD中,后台垃圾回收仅会清除少量的块,之后便停止,以此限制过度写入的数量[12]。另一种解决方案是配备一个高效的垃圾回收系统,在主控写入的同时并行执行必要的数据移动。在SSD少有空闲的环境中,这种解决方案更有效[17]SandForce的SSD控制器[15]Violin Memory的系统有这项能力[11]

文件系统感知垃圾回收

2010年,一些厂商(特别是三星)推出的SSD控制器扩展了BGC的概念,它们会分析固态硬盘上使用的文件系统以识别出最近删除的文件,以及未分区的空间。制造商声称,即便系统(操作系统和SATA控制器硬件)不支持TRIM,这也能使其获得类似的性能。三星实现的操作似乎在假定、并且需要有一个NTFS文件系统[18]。当前这些厂商生产的SSD是否仍具备该功能仍不得而知。有报道称,如果在这些驱动器上没有用MBR和NTFS正确地格式化,将会出现系统数据的损坏[19]

预留空间

SSD中的三级预留空间
SSD中的三级预留空间[15][20]。(图示:层级1:7.37%,230和1012之间的差距。HDD和SSD基于十进制衡量空间,而不是像内存那样用二进制单位。层级2:0,7,或28%,控制寿命、容量、性能达到期望平衡的比例。SSD由工厂设置层级2的预留空间,以维持基本的性能和寿命。层级3:?%,在SSD的使用过程中波动。(假设支持TRIM)存储的用户数据在变化,空闲空间被自动用作预留空间。)

预留空间(有时简称OP)是闪存的物理容量和操作系统(OS)呈现给用户的可用逻辑容量之间的差值。在SSD的垃圾收集、耗损平均及坏块映射操作中,额外的预留空间有助于降低控制器写入闪存时的写入放大[3][20][21][22]

预留空间的第一级来自容量的计算,单位使用吉字节(GB),而不是gibibyte(GiB)。HDD和SSD的厂商都使用术语GB来表示“十进制”的GB,即1,000,000,000(10^9)字节。闪存(象其它大多数电子存储器一样)以二的幂组装,所以SSD的物理容量将以每二进制GB 1,073,741,824(230)字节来计算。两个值之间的差距是7.37%(=(230-109)/109 × 100%)。从而预留0%空间的128 GB SSD提供给用户的容量是128,000,000,000字节。这个初始的7.37%通常不计算在总的预留空间数量中[20][22]

预留空间的第二级来自制造商。基于十进制吉字节的物理容量与十进制吉字节的用户可用空间之差,这一级的预留空间通常为0%、7%或28%。举例而言,制造商发布的规格为100 GB、120 GB或128 GB的SSD,可能它们的实际物理容量都是128 GB。这种差异就是由28%、7%和0%造成的,而这也是制造商声称它们的驱动器有28%预留空间的依据。这不包括额外的十进制和二进制吉字节之间相差的7.37%[20][22]

预留空间的第三级来自驱动器上的已知可用空间,以获得持久性和性能,前提是报告未使用的部分,和/或以目前或未来的空间为代价。自由空间可以藉由操作系统使用TRIM命令来确定。另外,一些SSD提供了让最终用户选择额外预留空间的工具。此外,如果SSD上总的分区布局没有100%地使用可用空间,未分区的空间也将会被SSD自动作为预留空间使用[22]。又一个预留空间的来源是操作系统的最小可用空间限制;一些操作系统在每一个驱动器上都保留有一定的最小可用空间,特别是在启动或主驱动器上。如果SSD可识别这些额外空间,也许是通过连续使用TRIM命令,那么就能作为半永久性的预留空间。预留空间往往需要占用用户空间,或暂时或永久,但它能减少写入放大,增加持久性,并提高性能[17][21][23][24][25]

预留空间计算
( 物理容量 - 用户容量 ) ÷ 用户容量 = 预留空间

TRIM

参见

参考

  1. ^ 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 Hu, X.-Y. and E. Eleftheriou, R. Haas, I. Iliadis, R. Pletka. Write Amplification Analysis in Flash-Based Solid State Drives. IBM. 2009 [2010-06-02]. CiteSeerX: 10.1.1.154.8668. 
  2. ^ 2.0 2.1 2.2 Smith, Kent. Benchmarking SSDs: The Devil is in the Preconditioning Details (PDF). SandForce. 2009-08-17 [2012-08-28]. 
  3. ^ 3.0 3.1 3.2 Lucchesi, Ray. SSD Flash drives enter the enterprise (PDF). Silverton Consulting. 2008–09 [2010-06-18]. 
  4. ^ 4.0 4.1 Kerekes, Zsolt. Western Digital Solid State Storage - formerly SiliconSystems. ACSL. [2010-06-19]. 
  5. ^ Shimpi, Anand Lal. OCZ's Vertex 2 Pro Preview: The Fastest MLC SSD We've Ever Tested. AnandTech. 2009-12-31 [2011-06-16]. 
  6. ^ Ku, Andrew. Intel SSD 520 Review: SandForce's Technology: Very Low Write Amplification. Tomshardware. 6 February 2012 [10 February 2012]. 
  7. ^ 7.0 7.1 7.2 Thatcher, Jonathan. NAND Flash Solid State Storage Performance and Capability – an In-depth Look (PDF). SNIA. 2009-08-18 [2012-08-28]. 
  8. ^ 8.0 8.1 Hu, X.-Y. and R. Haas. The Fundamental Limit of Flash Random Write Performance: Understanding, Analysis and Performance Modelling (PDF). IBM Research, Zurich. 2010-03-31 [2010-06-19]. 
  9. ^ Agrawal, N., V. Prabhakaran, T. Wobber, J. D. Davis, M. Manasse, R. Panigrahy. Design Tradeoffs for SSD Performance. 微软. June 2008 [2010-06-02]. CiteSeerX: 10.1.1.141.1709. 
  10. ^ Case, Loyd. Intel X25 80GB Solid-State Drive Review. 2008-09-08 [2011-07-28]. 
  11. ^ 11.0 11.1 11.2 Kerekes, Zsolt. Flash SSD Jargon Explained. ACSL. [2010-05-31]. 
  12. ^ 12.0 12.1 12.2 12.3 12.4 SSDs - Write Amplification, TRIM and GC (PDF). OCZ Technology. [2012-11-13]. 
  13. ^ Intel Solid State Drives. Intel. [2010-05-31]. 
  14. ^ TN-29-17: NAND Flash Design and Use Considerations (PDF). Micron. 2006 [2010-06-02]. 
  15. ^ 15.0 15.1 15.2 Mehling, Herman. Solid State Drives Take Out the Garbage. Enterprise Storage Forum. 2009-12-01 [2010-06-18]. 
  16. ^ 引用错误:没有为名为Conley的参考文献提供内容
  17. ^ 17.0 17.1 Layton, Jeffrey B. Anatomy of SSDs. Linux Magazine. 2009-10-27 [2010-06-19]. 
  18. ^ Bell, Graeme B. Solid State Drives: The Beginning of the End for Current Practice in Digital Forensic Recovery? (PDF). Journal of Digital Forensics, Security and Law. 2010 [2012-04-02]. 
  19. ^ SSDs are incompatible with GPT partitioning?!. 
  20. ^ 20.0 20.1 20.2 20.3 Bagley, Jim. Over-provisioning: a winning strategy or a retreat? (PDF). StorageStrategies Now: 2. 2009-07-01 [2010-06-19]. 
  21. ^ 21.0 21.1 Drossel, Gary. Methodologies for Calculating SSD Useable Life (PDF). Storage Developer Conference, 2009. 2009-09-14 [2010-06-20]. 
  22. ^ 22.0 22.1 22.2 22.3 Smith, Kent. Understanding SSD Over-provisioning (PDF). flashmemorysummit.com: 14. 2011-08-01 [2012-12-03]. 
  23. ^ Shimpi, Anand Lal. The Impact of Spare Area on SandForce, More Capacity At No Performance Loss?. AnandTech.com: 2. 2010-05-03 [2010-06-19]. 
  24. ^ OBrien, Kevin. Intel SSD 520 Enterprise Review. Storage Review. 2012-02-06 [2012-11-29]. 20% over-provisioning adds substantial performance in all profiles with write activity 
  25. ^ White Paper: Over-Provisioning an Intel SSD (PDF). Intel. 2010 [2012-11-29]. (原始内容 (PDF)存档于2011). 

外部链接