更新时间:2022-08-25 16:42
写入放大(英语:Write amplification,简称WA)是闪存和固态硬盘(SSD)中一种不良的现象,即实际写入的物理数据量是写入数据量的多倍。
写入放大(英语:Write amplification,简称WA)是闪存和固态硬盘(SSD)中一种不良的现象,即实际写入的物理数据量是写入数据量的多倍。
由于闪存在可重新写入数据前必须先擦除,而擦除操作的粒度与写入操作相比低得多,执行这些操作就会多次移动(或改写)用户数据和元数据。因此,要改写数据,就需要读取闪存某些已使用的部分,更新它们,并写入到新的位置,如果新位置在之前已被使用过,还需连同先擦除;由于闪存的这种工作方式,必须擦除改写的闪存部分比新数据实际需要的大得多。此倍增效应会增加请求写入的次数,缩短SSD的寿命,从而减小SSD能可靠运行的时间。增加的写入也会消耗闪存的带宽,此主要降低SSD的随机写入性能。许多因素会影响SSD的写入放大,一些可以由用户来控制,而另一些则是数据写入和SSD使用的直接结果。
在2008年,英特尔和SiliconSystems(2009年为西部数据所收购)首先在他们的论文和出版物使用了术语“写入放大”。写入放大通常用闪存的写入与主机系统的写入之比来衡量。没有开启数据压缩时,写入放大不小于1。在使用压缩的情况下,SandForce声称他们的典型写入放大达到了0.5,而在最佳情况下,使用SF-2281控制器,此值能低至0.14。
由于闪存操作的性质,数据不能像在硬盘中那样直接覆写。当首次向SSD写入数据时,单元都处于已擦除状态,因而数据可以直接写入,一次一页(大小通常为4至8千字节(KB))。SSD中管理闪存与主控系统接口的SSD控制器,使用称为逻辑区块地址(LBA)的逻辑到物理映射系统,这是闪存转换层(FTL)的一部分。当新的数据要替换已写入的旧数据时,SSD控制器将会写入新的数据至新的位置,并且更新逻辑映射,将其指向新的物理位置。原位置的数据将不再有效。在可以再次写入之前,它需要先被擦除。
闪存的编程和擦除次数有限。通常以闪存在整个寿命中最多可忍受的编程/擦除循环(P/E循环)次数来表示。单层单元(SLC)闪存,通常设计为高性能和长寿命,一般能有50000到100000次循环。截至2011年,设计用于低成本应用的多层单元(MLC)闪存,循环次数就大为减少,一般只有3000至5000次循环。自2013年起,已有三层单元(TLC)闪存,其编程-擦除(P/E)循环次数又降至1000。写入放大越低,则越为理想,因为与之对应的是闪存中P/E循环次数减少,所以能延长SSD的寿命。
即使是在定义术语之前,写入放大就已经存在于固态硬盘中,但直到2008年,才有英特尔和SiliconSystems开始在他们的论文和出版物中使用它。所有的SSD都有一个写入放大值,基于目前正在写入的数据及先前已写入到SSD的数据。为了能准确地测量特定SSD的该值,应使选定的测试流程运行足够长的时间,以确保驱动器已达到稳态。
一个简单计算SSD写入放大的公式是:
SSD的写入放大会受许多因素的影响。下表列出了主要因素以及它们对写入放大的影响。对于变量因素,表中注明了“正面”相关或“反面”相关。如随着预留空间的增加,写入放大将减小(反相关)。如果该因素是一个开关(“启用”或“禁用”)关系,那么它的关系或“正向”或“反向”。
预留空间(有时简称OP)是闪存的物理容量和操作系统(OS)呈现给用户的可用逻辑容量之间的差值。在SSD的垃圾收集、耗损均衡及坏块映射操作中,额外的预留空间有助于降低控制器写入闪存时的写入放大。
预留空间的第一级来自容量的计算,单位使用吉字节(GB),而不是gibibyte(GiB)。HDD和SSD的厂商都使用术语GB来表示“十进制”的GB,即1,000,000,000(10^9)字节。闪存(象其它大多数电子存储器一样)以二的幂组装,所以SSD的物理容量将以每二进制GB 1,073,741,824(2)字节来计算。两个值之间的差距是7.37%(=(2-10)/10× 100%)。从而预留0%空间的128 GB SSD提供给用户的容量是128,000,000,000字节。这个初始的7.37%通常不计算在总的预留空间数量中。
预留空间的第二级来自制造商。这一级的预留空间大小通常为0%、7%或28%,基于十进制吉字节的物理容量与十进制吉字节的用户可用空间之差。举例而言,制造商发布的规格为100 GB、120 GB或128 GB的SSD,可能它们的实际物理容量都是128 GB。这种差异就是由28%、7%和0%造成的,而这也是制造商声称它们的驱动器有28%预留空间的依据。这不包括额外的十进制和二进制吉字节之间相差的7.37%。
预留空间的第三级来自驱动器上的已知可用空间,以获得持久性和性能,前提是报告未使用的部分,和/或以目前或未来的空间为代价。可以借由操作系统使用TRIM命令来确定空闲空间。另外,一些SSD提供了工具,以让最终用户选择额外的预留空间。此外,如果在SSD上没有100%地使用可用空间划分分区布局,SSD也将会自动把未分区的空间作为预留空间使用。还有一个预留空间来源于操作系统的最小可用空间限制;一些操作系统在每一个驱动器上都保留有一定的最小可用空间,特别是在启动或主驱动器上。如果SSD,也许是通过连续使用TRIM命令,能够识别出这些额外空间,那么它就能作为半永久性的预留空间。预留空间往往需要占用用户容量,或暂时或永久,但它能减少写入放大,增加持久性,并提高性能。
当顺序向固态硬盘写入数据时,写入放大等于1,意为没有写入放大。这是因为在数据写入时,依次用来自同一文件的数据填充区块。如果OS确认该文件将被替换或删除,可以标记整个块为无效,也不需要读取它以将垃圾收集到的数据重写入另一个块。它只需要擦除,比随机数据写入所需的“读取-擦除-修改-写入”的垃圾收集过程更易、更快。
在完全垃圾回收、安全擦除、100%TRIM、或新安装之后,SSD有大量的空闲区块,随机写入性能达到峰值。最大速度将取决于连接到SSD控制器的并行闪存通道数、固件效率及闪存写入页面的速度。在此阶段,写入放大之于随机写入达到最佳,接近1。一旦区块都写入了一次,垃圾收集过程将启动,性能将会被此过程的速度和效率所限制。此阶段的写入放大将增至驱动器经历过的最高水平。
SSD的总体性能取决于许多因素,其中包括写入放大。向闪存设备写入比从它读取所需的时间更长。SSD通常并联使用多个闪存组件,以提高性能。如果SSD的写入放大高,控制器将不得不多次向闪存写入。主控将需要更多的时间写入数据。低写入放大的SSD不需要写那么多的数据,因此能比高写入放大的驱动器更早写入完毕。