在NAND闪存中实现平面内并行块擦除以减轻垃圾回收的影响
摘要
NAND闪存中的垃圾回收(GC)会通过将有效数据复制到其他位置而显著降低固态硬盘的I/O性能,从而阻塞传入的I/O请求。为了提升性能,NAND闪存利用多种高级命令来增加内部并行性。目前,这些命令仅在通道、芯片、裸晶和平面之间实现操作的并行化,而忽略了块级的并行,这是由于存在干扰风险,可能导致有效数据出错。然而,由于NAND闪存平面架构采用三重阱结构,可以在同一平面内并行擦除多个块,而不会损害有效数据的完整性。通过限制因多次块擦除导致的页面迁移数量,可将每次垃圾回收的开销控制在一定范围内。此外,每次垃圾回收可回收更多容量,推迟后续垃圾回收的发生,有效降低其频率。这种平面内并行块擦除(IPPBE)进而减轻了垃圾回收对传入请求的影响,改善了它们的响应时间。实验结果表明,IPPBE平均可将垃圾回收所花费的时间最多减少50.7%,平均减少33.6%;读/写响应时间最多分别减少47.0%/45.4%,平均分别减少16.5%/14.8%;页面迁移次数最多减少52.2%,平均减少26.6%;擦除的块数最多减少14.2%,平均减少3.6%。能耗分析表明,通过减少页面复制次数和块擦除次数,垃圾回收的能耗最多可降低44.1%,平均降低19.3%。
1 引言
在过去十年中,固态硬盘已成为服务器和数据中心存储的主要选择 [7]。随着行业和市场逐渐转向更加依赖云服务等应用,确保固态硬盘的性能能够跟上系统需求变得至关重要。固态硬盘中存在的一个主要问题是需要执行垃圾回收(GC)操作,以回收不再包含有用数据的页。此操作与固态硬盘内部组件的组织方式相关,如图1所示。
固态硬盘内部由一组NAND闪存芯片构成。多个芯片通过共享一个通道连接在一起,读取、写入和擦除命令及其对应的数据均可通过该通道传输。该阵列通常包含多个可并行操作的通道。每个芯片内部包含一个或多个裸晶。每个裸晶内包含两个平面(有时为四个),这些平面被划分为块,而块进一步被划分为页。读取和写入操作以页级粒度进行,而擦除操作则以块级粒度进行。这些操作范围的不同是因为,在NAND闪存结构下,若单独擦除某一页,将会干扰同一块内的其他所有页,从而导致数据不可靠[2]。当需要更新某一页中的数据时,无法直接覆盖该页,因为NAND闪存要求必须先擦除该页。然而,由于擦除操作以块为单位,该块中所有其他页也会同时被擦除,进而造成数据丢失。因此,固态硬盘采用异地写策略[8]。当某页数据被更新时,闪存转换层(FTL)将旧数据的逻辑页重新映射到一个新的物理页,而原始页被标记为无效,从而产生两个副本:1)一个包含新数据的有效页;2)一个包含过时数据的无效页。
随着固态硬盘积累的数据越来越多,最终需要回收被无效页占用的空间。当一个平面内的空闲页数量低于给定阈值时,将触发垃圾回收。当某个块被选中进行垃圾回收时,其中可能仍包含一些有效页。为了确保这些页的数据不会丢失,首先会将有效数据复制到固态硬盘其他位置的另一个块中。在所有复制操作完成后,原先的有效页将被标记为无效,连同该块的其余部分一起,允许执行擦除操作。
内部数据移动和擦除延迟对服务读取和写入请求的响应时间有负面影响。为了提升性能,固态硬盘依赖于操作的并行化。鉴于固态硬盘的内部结构,并行性可以在通道、芯片、裸晶和平面级别上实现。命令可以同时分发到所有通道,然后同时发送到所有芯片。为了进一步在芯片内部实现并行化,使用了高级命令。多晶粒交错命令允许在同一芯片的所有裸晶上同时执行相同的操作。再深入一步,多平面高级命令可在同一裸晶的两个平面 [3] 上同时执行相同的命令。然而,在平面内部目前尚无命令可实现操作的并行化。
为了减轻垃圾回收(GC)对系统造成的影响,本文提出了一种新的高级命令,称为平面内并行块擦除(IPPBE),该命令利用NAND闪存平面的结构来并行化擦除操作。此命令将并行性进一步深入到块级。通过在给定的擦除延迟内回收更多空间,可以减少触发GC的次数,从而降低I/O请求的响应时间以及有效页的复制数量。实验表明,读/写响应时间最高可分别降低47.0%/45.4%,平均降低16.5%/14.8%;页面复制数量最高可减少52.2%,平均减少26.6%。此外,还对能耗进行了分析,结果表明,GC操作的能耗最多可节省44.1%,平均节省19.3%。
2 动机与相关工作
垃圾回收期间有效页的复制和擦除操作会给固态硬盘带来性能和耐久性负担。随着对固态硬盘更大存储空间的需求持续增长,每个存储单元中存储的比特数也在增加。然而,这样做会导致每页的寿命降低,使得在磨损前可承受写入次数显著减少。垃圾回收过程中产生的额外写入可能会加速这种退化过程,并缩短固态硬盘的整体寿命。
当垃圾回收(GC)在某个平面中执行时,它会阻塞该平面以及裸晶中其他平面的传入I/O请求[11]。发生这种阻塞的原因是裸晶中的各个平面共享一个共享寄存器。(1)在将有效页的内容复制出去时,数据必须首先从页读取到裸晶的寄存器中。(2)然后数据通过通道传输到通道控制器,在那里使用纠错码(ECC)来纠正任何错误[13]。在此传输期间,通道也被阻塞。(3)接着,数据被发送到其新物理地址所在的裸晶寄存器,并(4)写入一个干净的页中。通道和裸晶的阻塞导致沿这些路径的其他请求被延迟处理。
擦除操作也是一个问题,因为它是耗时最长的单一操作,持续时间长达几毫秒。图2说明了这一过程。
先前的研究尝试以不同的方式解决这些问题,大致可归纳为以下三类:1)降低垃圾回收的延迟 [2], 2;2)降低垃圾回收的频率/延迟垃圾回收[4, 11],;3)在垃圾回收发生时尝试绕开它发生 [13]。在[13]中使用了另一种称为复制回写的高级命令,其中页面不是通过通道移出并调度到新的物理页,而是被读取到寄存器,并写入同一平面内不同块的页面中。这释放了通道,但由于数据未通过通道发送到控制器,因此数据不会经过控制器的纠错码处理。此外,[13]利用冗余阵列独立节点来构建冗余,以便在某个请求因平面执行垃圾回收而被阻塞时,可以使用奇偶校验生成被阻塞的数据。然而,冗余需求需要额外的容量。[2]采用了一种不同的方法,试图通过擦除称为子块的块部分来降低垃圾回收的延迟。这些子块需要一些页(或字线)作为缓冲区,以防止擦除子块干扰块中其他子块的数据。用作缓冲区的页不能存储任何数据,因此会减少固态硬盘的容量。
以这种方式划分块意味着更容易找到包含较少有效页的区域进行回收。然而,研究发现,擦除单个子块的擦除延迟实际上等于擦除整个块的延迟。这是因为擦除过程并不会因为页数减少而改变。因此,在相同的时间内可能清除的空间更少。如前所述,当一个平面执行垃圾回收过程时,它会在复制页时占用寄存器,从而阻塞裸晶上的另一个平面服务传入请求。[11]决定利用另一个平面在此期间经历的空闲时间,通过使用多平面高级命令并行执行页面迁移和擦除操作。其思路是在另一个平面早期执行垃圾回收将推迟未来对垃圾回收的需求。尽管如此,这种方法存在局限性。由于多平面命令的性质,这些操作必须共享相同的块地址和页索引。对于读取和写入命令,被读取或写入的页必须共享索引,否则它们将一次只能移动一个,串行进行。此外,需要回收空间的平面会选择有效页数量最少的候选块,以减少需复制的页数。然而,多平面命令要求另一个平面中的块具有相同的块索引,而该块可能有许多有效页需要移动,从而恶化垃圾回收的延迟。耐久性也可能受到影响,因为相邻平面可能尚未需要回收空间,因此不必要的页面迁移和擦除正在加速磨损。
垃圾回收问题并非在固态硬盘的整个寿命期间都同等存在。它是固态硬盘老化以及随着时间推移存储/更新更多数据所产生的副产品。随着块和页逐渐磨损,并被有限的内置备用空间所替换,该问题会日益严重。特别是,一旦垃圾回收开始发生,其发生的频率将显著增加更频繁。由于垃圾回收基于平面中剩余空闲页的数量阈值,因此垃圾回收过程需要努力使空闲页数量恢复到可接受阈值以上。然而,如果仅回收一个块的空间还不够,则必须继续串行擦除块,直到回收到足够的空间为止。
由于固态硬盘已成为主流存储介质,寻找无需对内部架构进行大幅改动(从而避免对系统基础设施进行修改)的解决方案具有显著优势。基于上述已有设计,本文旨在利用现有的NAND闪存结构来解决垃圾回收问题,在不牺牲容量的前提下最大化每次垃圾回收的效率。平面内并行块擦除能够满足这些要求,并且可以与现有设计结合,进一步提升其性能。
3 平面内并行块擦除
3.1 概述
平面内并行块擦除(Intra‐Plane Parallel Block Erase),在本文其余部分简称为IPPBE,据作者所知,是首个在同一平面内实现块级并行化的高级命令。其设计基于利用位于同一平面内所有块共享的三重阱结构[8, 12]。阱在擦除操作中起着重要作用。当阱被施加高电压时,正在擦除的块的字线被接地,以使每个存储单元中的电子被释放出去。未被擦除的块则使其字线处于浮空状态。块通过平面内的块解码器进行选择。通过重新设计解码器以同时选择多个块,可在擦除操作期间将多个块接地,从而实现同时擦除。一次擦除多个块可以在不增加擦除延迟的情况下,提高每次擦除操作回收的空间量。此外,由于每次垃圾回收(GC)回收的空间更多,后续的垃圾回收操作将被推迟。IPPBE还可以加快平面空闲页计数恢复到GC屏障以上的过程,使其能够更早恢复读取和写入服务。
3.2 擦除操作
要理解IPPBE的设计,首先需要了解擦除操作的协议。[2]发现,擦除块的部分内容并不能减少擦除操作的延迟。这是合理的,因为在擦除操作期间所执行的步骤不会因块中页的数量而改变。[8]详细描述了这一过程,图3直观地展示了擦除一个块所经历的各个步骤。
在所有数据被复制出去后,便可开始擦除。首先,所选块的所有字线都会被编程,使每个存储单元进入相同的状态。接着,所选块的字线接地,其余块则保持悬空。此后,该过程进入电脉冲和验证的循环阶段。属于平面内所有块共用的iP阱接收到幅值为V_Erase的电脉冲。随后,读取所有字线,以验证存储单元是否已被擦除并读取为1。如果未通过验证,则将V_Erase增加V_step,并再次向iP阱施加电脉冲。此过程持续进行,直到确认所有存储单元均成功擦除为止。在一次成功的擦除过程中,通常需要多次施加擦除脉冲。这是正常的。
需要注意的是,在判定擦除失败之前,此循环的运行次数是有限制的。
无论每块页数是64还是257,该过程都相同。IPPBE并未将擦除单元的大小减小到块的一部分,而是通过增加更多块来实现相反的操作。通过这样做,可以在擦除单个块所需的时间内回收多个块,从而最大化擦除操作的效率。
3.3 NAND闪存平面三重阱
在此设计中,三重阱结构未被改变,但它是实现IPPBE的关键组件。在NAND闪存中,使用三重阱结构来构建平面。该阱分为三个部分:1)iP阱,2)N阱,以及3)P型衬底[6, 8, 12]。
如前所述,在擦除操作期间,iP阱会接收高电压电脉冲。当一个待擦除的块在该脉冲期间将其字线接地时,字线与iP阱之间的电势会引发Fowler‐Nordheim电子隧穿,从而使每个存储单元中捕获的电子被释放出去[8]。并非所有块都应经历这种电子隧穿。由于每个平面中的所有块共享同一iP阱,其他未选中的块需要使其字线处于浮空状态,以防止意外擦除和数据丢失。
通过将未选中擦除的块的字线保持浮空,可提高电容耦合效应,使字线与阱之间的电势不足以引发电子隧穿。IPPBE正是利用了这一现象。在高电压电脉冲期间,不再仅指令一个块将其字线接地,而是可以同时指令多个块将其字线接地。由于阱的偏置持续时间为固定的时长,因此同时擦除多个块并不会增加操作所需的时间。使用FlashPower模拟器进行的能耗分析表明,每次在此擦除操作中增加一个块,所消耗的能量呈线性增长[9]。
然而,通过使用IPPBE,垃圾回收(GC)被调用的频率降低,从而整体能耗得以减少。这一点将在第5节中进一步讨论。
3.4 解码器和命令地址
当固态硬盘决定擦除哪个块时,会使用块解码器来设置字线。然而,考虑到IPPBE的设计需要对解码器进行轻微修改,以允许多个块同时被寻址。[3]指出,操作的寻址方式简单来说是通道、封装、芯片、裸晶、平面、块、页和子页。由于擦除操作不涉及页或子页,这些位可以被重新利用,用于添加同时寻址的其他块的地址。
IPPBE寻址有可能被修改以结合并增强之前的垃圾回收方案。例如,IPPBE可以被修改为在一个平面内寻址跨越多个块的多个子块。此外,如果与多平面命令结合,不仅可以在同一平面内,还可以在属于同一裸晶的其他平面中同时发生多个块的擦除操作。
3.5 块选择
在IPPBE之前,确定哪个块最适合回收相对简单。最传统的做法称为贪婪垃圾回收(Greedy GC),即选择无效页数最多的块进行回收[8]。其思路是通过选择无效页最多的块,可以减少需要迁移的有效页数量,从而在擦除后回收尽可能多的空间。然而,在引入IPPBE之后,必须更加谨慎地选择待回收的块。为简化说明,考虑选择两个块进行擦除的情况。当平面内的空闲页计数降低到触发垃圾回收(GC)的阈值时,假设该平面中有两个块,除了各自包含两个有效页外,其余页均为无效页。IPPBE可以在将这四个有效页迁移出去之后同时擦除这两个块。在这种情况下,虽然初始阶段需要额外迁移少量页,但能够回收两倍的空间,从而比仅擦除一个块更延迟下一次垃圾回收的需求。然而,也存在另一种情况:当垃圾回收被触发时,平面内存在大量有效页。此时可能选中一个完全无效的块,而次优候选块中仅有60%的页为无效页。这意味着,假设该块中没有空闲页,则需迁移40%的有效页。在这种情况下,仅擦除一个块更为合适。如果同时选择两个块进行回收,迁移所有有效页所耗费的时间将抵消并行擦除块带来的优势。
为了解决这个问题,引入了阈值来限制需要复制的页数。固态硬盘首先像Greedy算法一样找到最适合擦除的最佳块。然后,找到次佳块。接着进行分析,以确定需要复制的页数是否低于阈值。如果是,则可以同时回收这两个块;否则,不选择次佳块进行回收。
3.6 垃圾回收屏障
垃圾回收的问题之一是,一旦开始发生,通常会持续进行。触发条件通常是超过某个阈值,导致空闲页数量低于平面中总页数的一定百分比。一旦发生这种情况,必须持续回收空间,直到空闲页数量重新超过该阈值,即垃圾回收屏障(GCB)。然而,一旦回收了足够的空间,平面便可恢复处理读写请求。由于可能没有提供足够的时间来回收更多空间,因此可能会在平面回收空间和平面写入之间来回波动。IPPBE 通过回收更多空间,使空闲页数量进一步远离 GCB,从而延长返回垃圾回收的需要。图4说明了这一概念。另一方面,可能存在大量写入操作,使空闲页计数远远超过阈值。IPPBE 可以通过减少到达 GCB 另一侧所需的擦除操作次数,加速返回该侧的过程。图5 展示了 IPPBE 的实现方式。
4 实验设置
使用两种不同的模拟器 SSDSim[3] 和 FlashPower[9] 对 IPPBE 的性能进行了评估。SSDSim 是一种基于事件的模拟器,利用 I/O 请求的踪迹 [10] 来跟踪通过指定固态硬盘配置的读取、写入和擦除操作。本文评估所用的配置如表1所示。
为了实现 IPPBE 的设计,对 SSDSim 的 GC 算法进行了修改,引入了额外的机制以找到多个候选块进行回收。时序方案也进行了调整,以确保同时擦除多个块时仅占用与擦除单个块相同 的通道和芯片资源。在本研究中,每次最多同时擦除两个块。
实现了一种静态分配方案,优先级顺序如下:通道、芯片(在某些文献中也称为 way)、裸晶和平面,其中通道优先级最高,平面最低。由于并非每个踪迹大小相同,因此需要对固态硬盘进行老化以迫使垃圾回收发生。SSDSim 通过向固态硬盘注入无效页来实现老化。然而,已发现这种老化过程与固态硬盘实际的老化方式不一致 [5]。为解决此问题,所使用的配置相对较小,从而允许垃圾回收自然发生,而非人为强加。当一个平面内的空闲页数量低于 7% 时,触发垃圾回收。使用 FlashPower 来评估该设计的能耗。给定相同的配置,仿真可以输出读取、写入和擦除操作的能耗。这两个仿真器均已通过真实设备验证。
| 固态硬盘配置 | 参数 |
|---|---|
| 通道: | 2 |
| 每通道芯片数: | 2 |
| 每芯片晶粒数: | 1 |
| 每晶粒平面数: | 2 |
| 每平面块数: | 2048 |
| 每块页数: | 64 |
| 页面大小: | 2KB |
| 预留空间: | 25% |
| 读取延迟: | 75μs |
| 写入延迟: | 1.5ms |
| 擦除延迟: | 3.8ms |
| 通道传输时间: | 25ns |
| 垃圾回收阈值: | 7% |
表1:仿真配置
5 结果
对IPPBE设计的评估分为耐久性、性能和能耗。为了便于比较,采用贪婪垃圾回收作为基线,IPPBE的评估结果均相对于该基线进行归一化。每种方案均使用来自[10]的一组踪迹进行评估。
5.1 耐久性
固态硬盘寿命日益受到关注,尤其是使用多级单元或多层单元设计的固态硬盘,由于每个存储单元存储多个比特,导致页的寿命因加速磨损而显著降低[1]。垃圾回收通过要求移动页来加剧了这一问题,从而引发额外的写入操作。IPPBE 试图通过减少页面迁移和块擦除次数来限制这一影响。图6和图7比较了垃圾回收期间移动的总页数和擦除的块数。实验表明,页面迁移次数最多可减少52.2%,平均减少26.6%;在某些踪迹中,擦除的块数最多可减少14.2%,平均减少3.6%。当应用 IPPBE 时,两个块会一起移动其页,然后执行擦除操作。由于使用 IPPBE 时,在不同块的页移动之间不会发生其他操作,因此这些页很可能被写入同一个活动块中。正在移动的页中的数据很可能是读取密集型数据,因为它们通常是块中最后几个尚未无效化的页。这些频繁读取的页不太可能被更新,但在后续垃圾回收中可能仍需要移动。平面内有效页越碎片化,下次垃圾回收时需要复制数据的可能性就越高。IPPBE 自然地将这类数据聚集到同一个块中。因此,下次对该平面进行垃圾回收时移动的页更少,因为有更高概率可以选择一个有效页较少的块。由于有效页的聚集而能够减少页面复制的踪迹,也观察到块擦除次数的下降,因为 IPPBE 能够回收包含更多无效页的块,从而提高每次擦除所回收的空间量。这种擦除效率的提升会随时间累积,导致需要擦除的块减少,因为已有足够的空间被回收。这一点在较大且较长的踪迹(如prxy0和prn0)中更为明显。页面复制和块擦除次数的减少有助于缓解垃圾回收带来的耐久性负担。
5.2 性能
垃圾回收对固态硬盘的性能有害,因为它会优先于所有其他对裸晶的请求。因此,它有利于限制回收空间所花费的时间。图8表明,IPPBE可将执行垃圾回收的总时间最多减少50.7%,平均减少33.6%。这一减少与垃圾回收机制被调用的次数密切相关。图9有助于展示垃圾回收触发次数与垃圾回收耗时之间的关系。垃圾回收频率最多降低了56.4%,平均降低46.7%。原因在于,IPPBE能够通过单位时间内回收更多空间,更快地回到GCB的另一侧。然而,降低垃圾回收操作的频率并不总会线性地减少垃圾回收所花费的时间。时间上的减少主要归因于其在减少有效页面复制数量方面的能力。例如,stg0的页面复制减少幅度最小,相应地在垃圾回收耗时上的减少也最小。这是因为页面迁移的累积延迟通常比擦除操作更严重。尽管如此,能够高效地擦除和移动页面最终会带来长期的改善。虽然IPPBE在初始使用阶段可能由于页面迁移而导致较长的垃圾回收延迟,但最终会提高垃圾回收效率,从而减少其需求以及执行相关操作所需的时间。
图10和图11表明,减少垃圾回收所花费的时间会对跟踪的整体平均读/写响应时间产生连锁影响。平均读取响应时间最多降低47.0%,平均降低16.5%;平均写入响应时间最多降低45.4%,平均降低14.8%。结果的差异取决于基线中用于垃圾回收的时间所占的比例大小。
5.3 能耗分析
进行了能耗分析,以研究使用IPPBE命令的能耗影响。利用 FlashPower模拟器,根据表1中提供的固态硬盘配置,计算了读取、写入和擦除操作的能耗。结果表明,各项能耗分别为:读取 = 2.1uJ;写入 = 12.3uJ;以及擦除 = 22.5uJ。垃圾回收的能耗计算如下:每次页面复制需要一个读取和写入命令的能耗使得垃圾回收期间移动页的能耗等于读取与写入能耗之和乘以移动的页数。然后,该值再加上擦除能耗与擦除块数的乘积。通过使用FlashPower和[9]可以得出,在擦除脉冲期间增加一个额外块所导致的擦除能耗呈线性增长,因为大部分能耗由位线消耗。图12显示,垃圾回收所消耗的能耗节省最高可达44.1%,平均为19.3%。这些结果是由于每个跟踪中移动的页数和擦除的块数减少而产生的副产品。垃圾回收的能耗节省与页移动的结果最为接近,因为在大多数情况下,移动的页数远多于擦除的块数,因此写入能耗成为主要贡献因素。需要注意的是,这些数值会随着平面大小的不同而变化。
6 结论
平面内并行块擦除(IPPBE)是据作者所知首个将并行性引入NAND闪存块级的高级命令。通过利用平面的阱结构并修改块解码器,IPPBE能够通过减少执行垃圾回收(GC)所需的时间来提升耐久性、性能和能耗表现。IPPBE通过每次擦除操作回收更多空间,并将有效页聚集在同一块中以减少未来的页面复制,从而缓解垃圾回收的影响。IPPBE还可被修改以与先前的垃圾回收设计方法协同工作,实现进一步优化。

被折叠的 条评论
为什么被折叠?



