SSD中的垃圾收集和TRIM解释– SSD入门

 

“ SSD中的垃圾收集”是LSI提交的一篇文章,由LSI Corporation闪存组件部产品营销高级总监Kent Smith撰写。对于任何涉足当今SSD世界的人来说,其重要性都不可低估。

垃圾回收(GC)是所有固态驱动器(SSD)的基本过程,但是可以用不同的方式实施,这会影响整体SSD的性能和耐用性。在本文中,我们将研究GC的工作原理,如何实现它,以及它与TRIM命令和过度配置之间的关系。

与硬盘驱动器(HDD)不同,NAND闪存无法覆盖现有数据,因此必须先擦除旧数据,然后再将新数据写入同一位置。对于SSD,GC是将现有数据重定位到新位置并允许擦除周围无效数据的过程的名称。闪存分为多个块,每个块又分为几页。数据可以直接写入空白页,但只能擦除整个块。因此,要回收无效数据所占用的空间,必须首先复制一个块中的所有有效数据并将其写入新块的空白页中。只有这样,才能擦除原始块中的无效数据,从而为写入新的有效数据做好准备。

该过程如图1所示。第一列显示页面AD被写入块X。有时,数据被更改,因此页面AD被写入,原始页面AD被标记为无效(在第二列中显示)。同时,其他数据被写入页面EH。第二列显示了这些更改,现在块X已满,但保留了现在无效数据(AD)的空间,该数据只有在擦除整个块后才能被收回。

为了实现此目标,必须将块X中的有效数据移至新块,以便可以擦除原始块以重新开始。第三列显示了页面AD和EH中的数据被写入新块(Y),因此可以通过擦除块X来回收它的空间。此步骤中的写入不是来自主机系统,而是增加写入放大率的来源?在固态硬盘中,这意味着固态硬盘中的闪存比原始主机写入的内容更多。由于闪存的擦除和写入周期数量有限,因此,应尽可能减少此操作,但这仍然是SSD操作的必要部分。

图1:垃圾收集过程。     资料来源:维基百科

请注意,磨损平衡通常发生在GC期间,因为数据被写入各种新块中,以便在SSD的整个宽度上分散磨损。由于闪存可以在其整个生命周期内维持的写入次数有限,因此,如果始终将数据写入同一块,则与所有其他块相比,其写入周期的寿命将过早耗尽。这种持续的早期区块退役最终将减少驱动器的可用容量,并阻止其发挥其全部功能。理想情况下,在驱动器的整个使用寿命中,必须以相同的速率磨损SSD的所有块。

操作系统意识VS驱动意识

在HDD系统中,操作系统(OS)可以简单地要求将新数据写入存储了旧数据(现在是无效数据)的相同位置,而HDD将直接覆盖旧数据。但是,在SSD中,必须先擦除页面,然后才能将页面写入先前保存数据的位置,如前所述,SSD无法直接覆盖现有数据。

操作系统了解文件,文件的结构以及存储文件的逻辑位置,但不了解存储设备的物理存储结构。在任何存储系统中,存储设备都不知道文件结构,而只是知道在特定扇区中写入了字节数据。当OS在相应的逻辑位置中请求数据时,无论是SSD还是HDD,存储系统都会从物理位置返回数据。

当操作系统删除文件时,它只是在其逻辑数据表中将用于该数据的空间标记为空闲。使用HDD,OS无需告知存储设备有关删除的任何信息,因为将来它会简单地将新内容写入相同的物理位置。对于SSD,只有在OS尝试再次写入该位置时,它才会知道数据已删除(或无效)。那时,SSD将旧数据标记为无效,并将新数据写入新的物理位置。它还可能在同一时间执行GC,但是此时随SSD架构和其他条件的不同而不同。

修剪命令

在较新的操作系统中,例如Windows 7,Windows Server 2008 R2,Linux 2.6.33,FreeBSD 8.2,Open Solaris,Mac OS X Lion,TRIM命令使OS能够通知SSD有关旧数据不再有效的旧数据。当它从其逻辑表中删除逻辑块地址时。TRIM命令的优点在于,它使SSD的GC可以跳过无效数据而不是移动无效数据,从而节省了不重写无效数据的时间。这减少了闪存上擦除周期的数量,并在写入过程中实现了更高的性能。SSD不需要立即删除或垃圾收集?这些位置只是将其标记为不再有效。

区别在图2和图3中说明。

图2:没有TRIM命令的垃圾收集。

图2显示了未使用TRIM命令的过程。在图2的第一列中,SSD用户将四个新文件写入驱动器。OS会在其逻辑表中看到文件,SSD具有可用空间的逻辑和物理视图,在物理视图中,SSD包含超额配置空间,这不是操作系统已知的驱动器指定容量的一部分。

在第二列中,用户删除了文件C,但由于未使用TRIM命令,SSD不知道该文件已被删除。如果此时执行GC,它将在文件C中移动无效数据,因为它不知道它是无效的。在第三列中,用户写入一个新文件E,操作系统告诉SSD使用与旧文件C相同的空间,然后SSD将新文件写入可用空间,同时将文件C中的旧空间标记为可用用于GC。

图3:使用TRIM命令进行垃圾收集。

图3显示了与TRIM命令的区别。在这种情况下,当用户写入四个原始文件时,过程是相同的。但是,当用户擦除第二列中的文件C时,由于OS使用TRIM命令,因此在准备GC时,旧文件C空间会立即标记为无效。原来保留文件C的空间现在是SSD的可用空间,并且可以通过调配来动态使用,这意味着SSD在GC期间具有更多可用空间,这有助于提高整体SSD性能。

当用户最终写入文件E时,在第三列中,SSD上的总可用空间现在与没有TRIM的驱动器相同。不同之处在于,支持TRIM的SSD知道哪些数据无效,并且在GC期间可以将其视为可用空间,从而避免了必须将无效数据移动到另一个块的情况。

这产生了三个主要好处:

  1. 降低写入放大率。较少的数据被重写,并且在GC期间有更多的可用空间(更多的写空间等于更少的写操作);
  2. 更高的吞吐量。使用TRIM命令,GC期间要移动的数据更少,并且驱动器运行得更快。闪存瓶颈是吞吐量的瓶颈,SSD的速度只能达到其写入闪存的速度。在执行GC的过程中,驱动器在移动数据时必须停止从主机进行的某些数据传输。这就是为什么让SSD知道哪些数据无效,从而不必在GC期间将其移动是有益的。
  3. 改进的耐用性,因为驱动器通过不重写无效数据来减少对闪存的写入。

注意:当今的TRIM不能在大多数RAID环境中使用,因为当前的RAID驱动程序通常尚不支持它。一旦更多RAID制造商可以更改其驱动程序,人们希望TRIM最终将起作用,并使大多数RAID环境以及非RAID环境受益。

DURAWRITE和TRIM命令

DuraWrite,在LSI发现®的SandForce ®闪存存储处理器,产生类似的好处到TRIM命令TRIM是否不存在。并且当存在TRIM时,DuraWrite在SSD上创建的可用空间将超过其他情况。图4说明。

图4:DuraWrite与非DuraWrite SSD控制器以及TRIM命令。

在没有DuraWrite的标准SSD(左行1)中,待删除的数据和可用空间共享相同的空间。GC可用空间较少,因此驱动器必须花费更多时间进行GC才能有效地使用可用空间。在支持TRIM的传统SSD(右行1)中,待删除的数据变为可用空间,并且还有更多可用于GC的空间。可用空间越多,SSD可以写入越快,因此TRIM对SSD的整体性能有很大的影响。

在采用DuraWrite技术的SSD(左行2)中,首先将较少的数据实际写入驱动器,因此有更多可用空间供GC使用。实际上,非Trim环境中的可用空间可与常规SSD上TRIM环境中的可用空间相比。写入更少的数据可以释放更多的GC空间并提高SSD的性能。在带有TRIM命令的DuraWrite驱动器中(右行2),GC有大量可用空间。但是,由于存在其他瓶颈点,因此拥有大量可用空间并不能线性提高SSD的性能。

存储行业中使用了许多技术,例如重复数据删除,数据压缩和数据差异。DuraWrite结合了这些技术和类似技术的要素,以减少必须传递给闪存的写入量。

因此,在不支持TRIM的系统中具有DuraWrite的SSD的行为非常类似于支持TRIM的常规SSD。也可以在RAID环境中使用DuraWrite并获得具有TRIM命令的好处,而RAID驱动程序不必支持TRIM。

背景与废旧垃圾收集

最后一个问题是何时执行GC。在进行后台(或空闲时间)GC和进行前台(或标准)GC之间,业界存在争论。

当主机不需要SSD时,在后台进行GC似乎是一个好主意。在SSD并不繁忙时执行GC之类的内务处理似乎是合理的,因此当OS写入新文件或更改文件时,可以使用优化的块来准备就绪。

但是,这有两个问题。首先,后台GC可以潜在地在SSD上重新放置所有当前有效的数据,而实际上其中一些数据可能是无效的(例如在临时文件中),或者可能很快被OS删除。如果将包含无效数据的数据块在后台进行垃圾回收,则SSD将重写大量短时间内不需要的数据,直接导致SSD不必要的磨损并降低耐用性。

后台GC主要用于写入速度较慢的SSD,因为它减少了必须在前台执行的GC数量,因此可以使SSD在写入过程中执行得更快。直到传入的主机数据流量赶上后台GC释放的空间,然后才强制它实时执行。

另一方面,前景GC仅在​​立即需要可用空间时才重写数据。因此,前景GC避免对即将失效的数据执行GC,从而减少了驱动器的整体磨损。这需要具有很高写入速度的SSD。LSI SandForce闪存存储处理器的架构可实现最快的前台GC。

在消费者级驱动器中,空闲时间往往很多,耐用性并不是关键,在后台和前台GC之间的区别不太明显,而在企业级驱动器中,写操作一直在发生,因此背景GC和前景GC之间的差异并不明显。并且占空比更长。

LSI SandForce闪存存储处理器使用优化的GC技术,因此与其他SSD控制器相比,它们可以更好地执行前台(或实时)GC。如果SSD通过DuraWrite技术整体上也写入较少的数据,则在GC期间要重写的数据较少,并且SSD的性能甚至更好。

如我们所见,GC是所有SSD的必要功能。使用前台GC或后台GC的决定以及TRIM命令的使用都会影响SSD的性能,写入放大和耐久性。在设计SSD或为计算机系统选择一个SSD时,应仔细考虑这些因素。

如果本文是通过众多搜索引擎之一吸引您的,我们应该提到的是,这是我们SSD入门系列文章中的第三篇,旨在帮助我们始终了解固态驱动器。

赞 (1) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏