计算机应用   2017, Vol. 37 Issue (5): 1257-1262,1281  DOI: 10.11772/j.issn.1001-9081.2017.05.1257
0

引用本文 

方才华, 刘景宁, 童薇, 高阳, 雷霞, 蒋瑜. 全程优化的固态硬盘垃圾回收方法[J]. 计算机应用, 2017, 37(5): 1257-1262,1281.DOI: 10.11772/j.issn.1001-9081.2017.05.1257.
FANG Caihua, LIU Jingning, TONG Wei, GAO Yang, LEI Xia, JIANG Yu. Whole process optimized garbage collection for solid-state drives[J]. JOURNAL OF COMPUTER APPLICATIONS, 2017, 37(5): 1257-1262,1281. DOI: 10.11772/j.issn.1001-9081.2017.05.1257.

基金项目

国家863计划项目(2015AA016701,2015AA015301);国家自然科学基金资助项目(61303046,61402189,61472153)

通信作者

童薇,shawzida@gmail.com

作者简介

方才华 (1994-), 男, 浙江三门人, 硕士研究生, 主要研究方向:大数据存储、固态存储、数据去重;
刘景宁 (1957-), 女, 湖北武汉人, 教授, 博士, 主要研究方向:固态存储、数据挖掘、分布式存储;
童薇 (1977-), 女, 湖北黄陂人, 讲师, 博士, 主要研究方向:非易失性存储器、输入/输出虚拟化;
高阳 (1992-), 男, 湖北广水人, 硕士研究生, 主要研究方向:大数据存储、键值对存储;
雷霞 (1993-), 女, 湖北仙桃人, 硕士研究生, 主要研究方向:大数据存储、安全删除;
蒋瑜 (1993-), 男, 江苏常州人, 硕士研究生, 主要研究方向:固态存储、非易失存储器

文章历史

收稿日期:2016-07-15
修回日期:2016-11-25
全程优化的固态硬盘垃圾回收方法
方才华1,2, 刘景宁1,2, 童薇1,2, 高阳1,2, 雷霞1,2, 蒋瑜1,2    
1. 武汉光电国家实验室 (华中科技大学), 武汉 430074;
2. 信息存储系统教育部重点实验室 (华中科技大学), 武汉 430074
摘要: 由于NAND闪存的固有限制,写前擦除和擦除粒度较大,基于NAND Flash的固态硬盘(SSD)需要执行垃圾回收以重用失效页。然而垃圾回收带来的高开销会显著降低SSD的性能,也会直接影响SSD的寿命。特别是对于频繁使用的有数据碎片的SSD,垃圾回收带来的性能下降问题将更为严重,现有的垃圾回收(GC)算法各自侧重垃圾回收操作的某个步骤,并没有给出全面考虑各步骤对整体影响的综合方案。针对该问题,在详细剖析垃圾回收过程的基础上,提出了一种全程优化的垃圾回收方法WPO-GC,在数据初始放置、垃圾回收目标块的选择、有效数据的迁移、触发回收的时间点以及中断处理方式上,尽可能全面地考虑各步骤对SSD正常读写请求和寿命的影响。通过开源模拟器SSDsim上的WPO-GC的有效性验证表明,同典型GC算法相比,WPO-GC可以减少SSD读请求延迟20%~40%和写请求延迟17%~40%,均衡磨损近30%。
关键词: 闪存    固态盘    垃圾回收    磨损均衡    使用寿命    
Whole process optimized garbage collection for solid-state drives
FANG Caihua1,2, LIU Jingning1,2, TONG Wei1,2, GAO Yang1,2, LEI Xia1,2, JIANG Yu1,2     
1. Wuhan National Laboratory for Optoelectronics (Huazhong University of Science and Technology), Wuhan Hubei 430074, China;
2. Key Laboratory of Information Storage System of Ministry of Education (Huazhong University of Science and Technology), Wuhan Hubei 430074, China
Abstract: Due to NAND flash' inherent restrictions like erase-before-write and a large erase unit, flash-based Solid-State Drives (SSD) demand garbage collection operations to reclaim invalid physical pages. However, the high overhead caused by garbage collection significantly decrease the performance and lifetime of SSD. Garbage collection performance will be more serious, especially when the data fragments of SSD are frequently used. Existing Garbage Collection (GC) algorithms only focus on some steps of the garbage collection operation, and none of them provids a comprehensive solution that takes into consideration all the steps of the GC process. On the basis of detailed analysis of the GC process, a whole process optimized garbage collection algorithm named WPO-GC (Whole Process Optimized Garbage Collection) was proposed, which integrated optimizations on each step of the GC in order to reduce the negative impact on normal read/write requests and SSD' lifetime at the greatest extent. Moreover, the WPO-GC was implemented on SSDsim which is an open source SSD simulator to evaluate its efficiency. The experimental results show that the proposed algorithm can decreases read I/O response time by 20%-40% and write I/O response time by 17%-40% respectively, and balance wear nearly 30% to extend the lifetime, compared with typical GC algorithm.
Key words: flash memory    Solid-State Drive (SSD)    Garbage Collection (GC)    wear-leveling    lifetime    
0 引言

近年来,基于NAND Flash的固态硬盘 (Solid-State Drive, SSD) 因其性能高、功耗低、抗震性好等诸多优点获得广泛的应用。由于NAND闪存异地更新的特点,写更新产生的无效页需经由垃圾回收操作才能重新成为可用页。SSD的垃圾回收操作涉及到目标块的选择、有效数据的迁移和块的擦除操作[1-3],因而对SSD的读写性能和寿命都有很大的影响。

根据采用fio[4]对Intel SSD DC P3700固态盘的测试结果,当执行读写请求大小为4 KB、读写请求比例为7:3的随机I/O时,若SSD是空盘,其每秒进行读写操作的次数 (Input/Output Operations Per Second, IOPS) 能达到20万次,读、写延迟分别为180 μs和2 000 μs;但对SSD进行数据预埋和碎片化处理后再进行相同的测试,其IOPS下降到6万次/s,读写延迟上升了3~7倍, 造成这种性能差距的直接原因是SSD内部的垃圾回收 (Garbage Collection, GC) 操作。当SSD中用于容纳异地更新的预留空间越来越少,就会频繁地触发垃圾回收,导致正常的读写访问被阻塞。由于垃圾回收需通过块擦除获得可用页,因此垃圾回收操作的执行频率也会对SSD的寿命造成影响。

全程优化的垃圾回收方法 (Whole Process Optimized Garbage Collection, WPO-GC),从数据初始放置、垃圾回收目标块的选择、有效数据的迁移位置、触发回收的时间点以及中断处理方式上,全面优化与垃圾回收方面相关的各个步骤,有效减少了SSD正常读写的响应延迟,同时提升了SSD的寿命。

1 背景与动机 1.1 SSD的架构

SSD主要由SSD控制器和闪存芯片构成, 如图 1所示。SSD中的闪存控制器控制多个通道 (Channel),每个通道上挂载多颗闪存芯片 (Chip)[5-6]。如图 2所示,闪存芯片由多个晶圆 (Die) 组成,每个晶圆又由多个分组 (Plane) 组成,每个分组包含多个块 (Block)。块是芯片擦除的基本单位,每个块包含多个页 (Page),页是芯片读写的基本单位。

图 1 SSD的整体架构 Figure 1 Overall architecture of SSD
图 2 闪存芯片的架构 Figure 2 Architecture of flash chip
1.2 垃圾回收的机制

闪存芯片具有写前擦除的特性,更新数据时要采用异地更新方式 (旧数据成为无效页)[7]。为保证SSD的正常使用,需要对无效页进行垃圾回收操作,即擦除选定的目标块以供用户再次使用。由于闪存芯片的读写粒度 (页单位) 和擦除粒度 (块单位) 不同,在擦除一个目标块之前,垃圾回收首先需要迁移其有效数据页到其他块中。如图 3所示,一次完整的垃圾回收操作包括3个步骤:① 选择要回收的目标块;② 迁移有效数据到其他块中;③ 擦除目标块。在数据迁移时,数据的源物理页和目的物理页所处的芯片和通道均会被占用,在随后执行块擦除操作时,虽然不会占用通道资源,但被擦除块所处的芯片也会被占用。因此在SSD内部执行垃圾回收操作过程中,上层向SSD发出的读写请求若要访问垃圾回收占用的芯片或者通道资源[3, 8],其响应时间和吞吐率都会受到较大影响。另外由于闪存芯片擦除次数有限的特性,垃圾回收的执行频率会直接影响SSD的寿命。

图 3 垃圾回收操作的示意图 Figure 3 Schematic diagram of garbage collection operation

在设计垃圾回收算法时通常需要考虑如下几个问题:1) 何时触发垃圾回收操作?2) 如何选择目标块?3) 怎样安置和迁移数据?

1.3 相关工作

针对上述问题,现有垃圾回收算法提出不同的解决方法。

对于何时触发垃圾回收操作,文献[9]设置了一个表示SSD空闲页比例的固定阈值,当空闲页比例小于该阈值时,触发垃圾回收。这种方法的缺点在于:当垃圾回收被触发时,系统中的空闲页比例已经很低,此时容易造成垃圾回收的频繁执行。为避免垃圾回收的频繁触发,文献[10]在SSD空闲时根据SSD当前的多个状态和统计值,如块擦除次数、页的状态等,确认是否触发垃圾回收操作。该方法能够让垃圾回收操作避开正常读写请求,最小化垃圾回收对SSD性能的影响;其缺点在于:针对读写访问密集的应用,垃圾回收操作始终不能有效进行,此外对SSD空闲时间的准确预测也很难实现。文献[11]提出的GC算法允许用户I/O请求中断正在执行的GC操作,待用户I/O请求完成后再恢复执行被中断的GC进程,但是针对I/O密集型应用,垃圾回收操作可能会被连续的I/O请求多次中断,难以及时有效回收SSD空间。为避免垃圾回收的频繁触发,文献[12]设计了一个两级阈值的方式,既能充分利用SSD的空闲时间进行垃圾回收,从而避免后期垃圾回收的频繁触发,针对密集型应用,又能设计强制GC保证SSD的空闲空间。

对于如何选择垃圾回收的目标物理块。贪婪算法选取该垃圾回收请求对应Plane中无效页最多的块作为回收块。该算法优点是能够最大限度地减少数据迁移量,提高垃圾回收的效率;缺点是没有考虑回收块的擦除次数,容易导致块被过早地擦穿,缩短固态盘的使用寿命。另一方面,基于损耗均衡的GC算法选择最少磨损的块作为回收块[13],但会增加GC迁移数据的开销。在GC过程中同时考虑回收块的无效页比例和擦除次数常常是一对矛盾,为达到二者的平衡,文献[14]利用块的有效页比例和擦除次数计算加权分,来选择合适的回收块。但是其回收块选择机制是基于特定的Flash文件系统 (Flash File System, FFS),不具有普遍性。WECO (WEar COnscious)[15]在文献[14]评分机制的基础上,对评分公式作了优化并将其扩展到块设备,但是对有大量空闲页的块,其评分机制不准确,会导致有较多空闲页和无效页的块被选中回收,这样造成了低下的回收效率。

有效数据迁移的关键在于确定数据迁移安放的位置,一个好的GC算法应通过分析迁移数据的温度等特点,重新规划迁移数据的安放,使相近温度的数据聚集到一块中,提高垃圾回收的效率。WECO提出一种数据分离策略,在数据迁移过程中,能够分离冷热数据。该方法优点是提高垃圾回收的效率和保护磨损严重的块,以增加使用寿命;其不足之处在于冷热数据分离的算法复杂,开销较大。

文献[16]提出缓存感知的垃圾回收算法,当缓存进行替换往下写时,考虑下层通道是否进行垃圾回收操作,避免对正在进行的通道进行分发请求,以此减少响应等待时延, 但这不能从根本上减少垃圾回收带来的影响。

1.4 动机

现有的GC算法[9-15],都不能很好地解决垃圾回收对正常读写请求的影响,都是针对垃圾回收的某一个步骤中的问题作优化,例如只针对垃圾回收的触发条件[9-12]或者回收目标块的选择[13-15],缺乏对GC的整体优化改进,更没有针对数据的访问频率 (温度) 特点,防患于未然,在数据放置和迁移时就提前考虑如何减少垃圾回收带来的影响问题。

为了更进一步地减少GC对用户正常读写请求响应延时的影响,更好地提升SSD的性能和寿命,针对现有GC算法的缺陷,深入分析GC的每一步操作,探讨其优化策略,从而达到全过程的优化,提出一种全面的WPO-GC策略。WPO-GC主要工作是在其他研究者的工作上进行优化,包括以下4点:

1) 分离放置冷热数据。依据数据访问频度,确认数据冷热温度,在数据放置时就考虑数据的特点,使温度相近的数据聚集一起,便于达到全盘整体均衡,提高垃圾回收的效率。

2) 建立两级阈值引入一种可中断GC策略,依据SSD当前的工作状态,控制垃圾回收的触发条件,采用不同的中断方式处理,进一步减少GC对SSD读写性能的影响。其中提出中断开放策略,即垃圾回收中的每次有效页迁移结束后开放系统中断,既可以利用不同请求到来的时间间隔进行垃圾回收,又可以及时响应用户请求,减少用户读写操作的等待延时,提高系统的平均响应时间。

3) 选择适当的垃圾回收目标块。采用综合考虑块中无效页所占比例和擦除次数的均衡策略,提高垃圾回收的效率,延长闪存寿命。

4) 在数据迁移时,进一步依据数据冷热程度选择数据的放置位置,减少垃圾回收中不必要的反复迁移。

2 设计和实现

WPO-GC主要目标是减少GC对用户正常读写延时的影响,其设计思路是全面考虑与GC相关的各个方面,并对GC每一步骤进行全局优化,以兼顾SSD性能和寿命的提升。WPO-GC主要包括以下部分:1) 产生不同优先级的垃圾回收请求; 2) 控制垃圾回收的触发条件,允许中断开放策略; 3) 平衡性能和寿命的目标块选择; 4) 通过冷热数据分离提高垃圾回收效率。

2.1 产生垃圾回收请求

目前关于垃圾回收请求响应时机,有不同的研究:文献[9]通过设置较低的空闲空间阈值来作为触发条件,但这会导致使用后期垃圾回收的频繁触发,严重影响性能; 文献[10]采用在SSD空闲时间进行垃圾回收,但是无法准确预测空闲时间; 文献[11]提出可被I/O请求中断的GC算法,但是这会导致垃圾回收操作被连续到来的I/O请求多次中断,难以有效回收SSD空间。

WPO-GC根据SSD空闲空间的多少,设置两级阈值,赋予垃圾回收操作不同的紧迫程度,采用文献[12]提出的方法和公式,分别是不可中断阈值H和可中断阈值T,用于区分垃圾回收操作的紧迫级别。当Plane的空闲空间比例FP低于不可中断阈值H时,需立刻执行垃圾回收,因而产生不可中断垃圾回收请求; 当FP的值在不可中断阈值H和可中断阈值T之间时,产生可中断垃圾回收请求,当FP高于T时不产生垃圾回收请求。基于固态盘中每个Plane的状态 (空闲页数、无效页数、有效页数),采用式 (1) 和 (2) 动态计算得出HT的值。

$H = aE + B(1 - {V_{\rm{p}}})$ (1)
$T = AE + B(1 - {V_{\rm{p}}}) + c{I_{\rm{p}}}$ (2)

其中:E表示SSD预留空间比例,由SSD厂商设定; Vp是有效页比例; Ip是无效页比例; abcAB均为权值系数,满足具体取值为:a取0.3~0.5,b取0.1~0.3,A取0.5~0.7,B取0.1~0.4,c取0.1~0.3,且0<HT<1。通过实验验证各参数的具体取值为a=0.3, b=0.1, A=0.5, B=0.3, c=0.2, E=0.1。不可中断垃圾回收请求会立刻执行,对正常读写请求影响较大,因此应将H的值设定得较小,以尽可能避免产生这类请求。根据式 (1),H的最大值为aE+b,且随有效页比例Vp的上升而下降。可中断垃圾回收请求会在系统空闲时间执行,T的值以AE+B为参考基准,随着有效页比例的上升而下降,随无效页比例的上升而上升。这意味着在无效页较多而有效页较少时,T值较高,可及早触发无效页的回收; 而当有效页比例较高时,T值较低,以避免低效的垃圾回收。

为平衡SSD计算资源和及时产生垃圾回收请求,WPO-GC以每个Plane为单位,每消耗一定数量的页空间,进行一次垃圾回收请求判断。产生的GC请求同正常的读写请求一起挂载到通道请求队列上。为了减少SSD正常的读写请求和两类垃圾回收请求之间的相互干扰,设定这三类请求的服务优先级由高到低依次为:1) 不可中断垃圾回收请求; 2) 正常读写请求; 3) 可中断的垃圾回收请求。

当通道上有不可中断垃圾回收请求时,立即响应不可中断垃圾回收请求,否则优先处理读写请求; 当通道空闲时执行可中断垃圾回收请求。对于可中断垃圾回收请求,在其执行过程中可能会被SSD的正常读写请求中断,以减小GC对正常读写请求响应时延的影响。

2.2 目标回收块的选择

在垃圾回收的目标块选择研究方面,贪婪算法只注重回收的效率,会造成块磨损的不均衡; 文献[13]采用回收磨损次数最少的块进行回收,但会增加GC迁移数据的开销。文献[15]综合考虑了块磨损和回收效率的考虑,相对其他策略有了很大的改进。

WPO-GC为了保证固态盘的使用寿命和回收效率,对文献[15]作进一步的优化改进,选用式 (3) 计算每个块得分,得分最低的作为回收块。式 (3) 是在Tjioe等[15]提出的公式基础上提出的,缺乏对特殊情况块的考虑,会选择主要包含空闲页和无效页的块,这是不合理的。

式 (3) 由两部分相加而成。第一部分强调GC操作的性能,即块中无效页越多,越可能被回收。

$\begin{array}{l} score = \left( {1 - a} \right)\left( {\frac{{page\_blockinvalid\left( i \right)}}{{page\_block}}} \right) + \\ \quad \quad \quad a\left( {\frac{{erasures\left( i \right)}}{{1 + max}}} \right);\\ a = \left\{ {\begin{array}{*{20}{c}} \begin{array}{l} 2/(1 + {{\rm{e}}^{{k_\varepsilon }/\Delta \varepsilon }}),\Delta \varepsilon \ne 0\\ 0,\quad \quad \quad \quad \quad \Delta \varepsilon = 0 \end{array}&{;\Delta \varepsilon = max - min} \end{array}} \right. \end{array}$ (3)

其中:invalid(i) 表示第i块中无效页数量;page_block表示一块中的物理页数;erasure(i) 表示第i块的擦除次数;max表示所有块中,块擦除次数最大的值;min表示所有块中,块擦除次数最小的值。

第二部分强调磨损均衡,即块的擦除次数越少,越可能被回收。两部分的比重由系数a决定,a是块磨损次数极差Δε的单调递增函数 (图 4)。kε是表征系统响应能力的常数,kε越小,系统平均响应时间越短,磨损越不均衡,kε取10时,a约为0.5,即两部分权重相同。特别地,当a为0时,算法不考虑磨损均衡,即选取有效数据最少的块回收 (贪婪策略); 当a为1时,算法为纯磨损均衡,即选取磨损次数最少的块回收。回收块的选择在更好地考虑SSD性能的同时,能够兼顾SSD的磨损均衡,提高SSD的寿命。

图 4 aε的单调递增曲线 Figure 4 Monotone increasing curve of aε
2.3 有效数据迁移策略

在垃圾回收过程中有效页的迁移方面,闪存芯片手册指出可以使用高级命令copy-back进行有效数据的迁移,但是这有很多限制条件[17-18];部分GC算法[11, 13]直接将回收块中的有效数据迁移到空闲块,没有考虑数据的特性;文献[15]提出考虑数据的特性,将其进行冷热分离,来减少后续的GC开销。

WPO-GC在文献[15]的基础上,增加了对“页温度”和“块温度”的逐级考虑,提出冷热数据分离及迁移放置算法,尽可能使冷热程度 (访问频度) 相近的数据聚集到同类的块中,避免后续垃圾回收时冷数据页的无效迁移,提高垃圾回收的效率,也减少了写放大,延长闪存的寿命。为了实现这一策略,在SSD固件中维护了一张逻辑页码 (Logical Page Number, LPN) 温度表,用于记录每个LPN对应的温度,一个表项及其各个字段的含义见表 1

表 1 LPN温度表项 Table 1 LPN thermometer

每当有写子请求到来时,按照图 5所示流程更新LPN温度表。其中:ct是系统的当前时间; u是用于界定是否是最近访问的时间间隔门限,当本次访问时间 (即系统当前时间) 距离最近访问时间大于u时,将最近访问次数置为1。更新TemLPN的方法为TemLPN=Luc,LPN的温度由最近写访问次数决定。

图 5 更新LPN温度表流程 Figure 5 Flowchart of updating LPN thermometer

一个块中有3种页温度,其中:1) 有效页的温度就是其对应的LPN的温度值TemLPN; 2) 无效页的温度值显示为其过期前对应的LPN的温度值; 3) 空闲页的温度值为0。为了更好地考虑块中的数据情况,将页更准确地放到温度相近的块中。提出用块温度 (记为TemBlock) 来表示一个块的访问频度,TemBlock的计算公式:

$TemBlock = \frac{1}{{sum}}\left( {\sum\limits_{i = 1}^{valid} {TemPage\left( i \right)} + \sum\limits_{j = 1}^{invalid} {TemPage\left( j \right)} } \right)$

其中各符号的意义见表 2。TemBlock的值由其中的有效页温度和无效页温度计算得到,温度相近的页聚集一起,失效速率也会大体相当,以便于减少回收块时的数据迁移。温度越高的块更加容易失效,提高回收效率。

表 2 块温度计算所涉及的符号 Table 2 Symbols about block temperature computing
3 实验结果与分析

WPO-GC的测试平台是开源的SSDsim[19],首先分析所用负载trace的特点,然后描述了测试方案及测试过程,最后分析实验结果。

3.1 测试环境

测试使用SSDsim,一个经过验证的固态盘模拟器,它可以根据测试具体需要修改其配置文件。本方案测试所用SSDsim模拟的硬件配置参数见表 3,SSD物理总容量:4×2×2×2×1 024×64×2 KB=4 GB;用户可用容量:4 GB×0.8=3.2 GB。

表 3 设备容量设置 Table 3 Device capacity setting
3.2 测试负载分析

测试使用4种trace:Exchange、Financial、IntelSSD_1和IntelSSD_2,特性统计如表 4。其中,Exchange是从一台供5 000企业用户使用的Microsoft Exchange 2007 SP1邮件服务器上采集的trace[20-21],以小的随机访问的读请求为主。Financial是在线事务处理 (On-Line Transaction Processing, OLTP) 应用程序运行在一个大型金融机构产生的I/O trace[21];IntelSSD_1和IntelSSD_2是用fio在服务器上生成请求,并利用block_trace工具采集得到的。

表 4 trace特性统计 Table 4 Characteristic statistics of trace
3.3 测试方案介绍

本文选用一种典型的垃圾回收算法Basic-GC,以及文献[12]提出的DT-GC作为WPO-GC的测试对照组。Basic-GC采用的策略如下:1) 目标回收块的选取采用贪婪策略,即回收无效数据最多的块; 2) 有效数据迁移采用WECO中的冷热数据分离方案; 3) 垃圾回收过程不可被中断。

本文主要测量了以下4个指标来评估WPO-GC方案:

1) 平均响应时间。即请求从提交给Flash SSD到被响应的平均时间,用于评估WPO-GC方案的读写响应性能。

2) 擦除次数的标准偏差。记录每个闪存分组在实验过程中被擦除的次数的标准偏差,用于评估WPO-GC方案的磨损均衡性能。

3) 擦除次数。记录同一trace下两种策略分别引发的回收次数,用于评估WPO-GC方案减少的磨损。

4) 总写页数。垃圾回收会造成写放大,记录固态盘全部的写页次数,进一步评估WPO-GC方案减少的磨损。

3.4 测试结果分析

本文以Basic-GC和DT-GC方案为对照方案,对WPO-GC方案的整体性能进行了评估。

通过比较4种负载下三者的平均响应时间,可以看到WPO-GC方案相对于Basic-GC在性能上有很大的提升,读/写平均响应时间减少了接近20%,特别是对于分时间段密集请求的负载 (如Financial),读/写平均响应时间减少达40%;相对于DT-GC在性能上的提升不是很明显,最高提升10%左右。

图 67分别显示了以Basic-GC方案为基准对照,归一化后的读、写平均响应时间,纵坐标对应为三种方案平均读、写响应时间与Basic-GC方案平均读、写响应时间的比值。从图 6中可以看出,WPO-GC对4种trace的读平均响应时间相对于Basic-GC均有较大提升,提升最少的接近20%,最多的达到40%。从图 7中可以看出,WPO-GC方案相对于Basic-GC对所有trace测试的结果表现出写平均响应时间均有很大提升,提升最少的也有17%,最多的达到40%;但是相对于DT-GC方案,WPO-GC在性能上的提升并不明显,最高提升10%,而且对于IntelSSD_1负载,读写平均响应性能均有所下降,约2%。

图 6 归一化的读请求平均响应时间 Figure 6 Normalized average response time of read requests
图 7 归一化的写请求平均响应时间 Figure 7 Normalized average response time of write requests

通过对SSDsim的输出信息进行分析,发现三种方案在处理一些请求所花费的响应时间是一致的,但是有些请求,Basic-GC方案的响应时间远大于WPO-GC和DT-GC方案,这应该是导致图 67结果的原因。造成这种情况是因为Basic-GC方案在写请求到来时还在执行垃圾回收操作,无法及时响应,造成时延,并对后续请求造成累计时延。而在WPO-GC和DT-GC方案中,产生的是可中断的垃圾回收请求,当写请求到来时垃圾回收操作还未完成,就中断垃圾回收操作,及时响应,不造成时延。

图 8显示了以Basic-GC方案为基准对照,归一化的总擦除次数,纵坐标为三种方案擦除总次数与基准方案Basic-GC擦除总次数的比值。对于不同的trace,块擦除的总次数有很大不同,且跟Basic-GC方案配置文件中垃圾回收阈值的设定有关。

图 8 归一化的总擦除次数 Figure 8 Normalized total erasing times

图 9显示了以Basic-GC方案为基准对照,归一化的写放大造成的总写页次数对比情况。由于IntelSSD trace写请求的总量偏小,进行异地更新操作次数有限,在垃圾回收次数有限的情况下,使用WPO-GC方案中目标块选取策略,相对于原方案中选取无效页最多的块进行回收,新方案优异性并不明显。另外3种trace进行更新的次数较多,尽管在目标块选取的回收效率上没有贪婪算法好,但由于考虑了冷热数据的分离,在长时间的使用中弥补了回收效率的欠缺。测试结果表明,WPO-GC方案与Basic-GC方案在总写页次数方面相比差异性不大,WPO-GC方案稍微优异一点。

图 9 归一化的总写页数 Figure 9 Normalized total number of writing pages

由于WPO-GC中触发垃圾回收时是参考DT-GC的,所以两者在擦除次数针对每个trace大致相同,其中的细微差异是由于WPO-GC采用冷热数据分离算法,减少了一些有效页的多次迁移,从而减少了写放大。从图 9可以看到WPO-GC方案在总写页数上始终保证低于DT-GC方案,尤其对负载Exchage更是减少了20%的写操作。

图 10表现了三种方案导致的磨损均衡差异。当Flash SSD所有块擦除次数的标准差较低时,表明磨损均匀分布。图 10显示了以Basic-GC方案为基准对照,归一化的块擦除次数标准差,纵坐标为三种方案块擦除次数标准差与Basic-GC方案块擦除次数标准差的比值。从图中可得,在各个trace下,DT-GC方案的分组的擦除次数标准差与Basic-GC方案近似相等,而WPO-GC方案的分组的擦除次数标准差均小于其他两种方案,其中3种trace的测试结果的标准差降低近30%,表现出优异的磨损均衡性能。本文提出的新方案兼顾效率和磨损均衡,在块擦除次数分布不均时,倾向于选择擦除次数小的块进行回收,使各个块的擦出次数趋向于相同。同时由于SSDsim的垃圾回收机制是基于分组的,各分组中块的擦除次数实际上更为平均,有利于提升固态盘的寿命。

图 10 归一化的块擦除次数标准差 Figure 10 Normalized standard deviation of block erasing times
4 结语

本文在详细剖析垃圾回收过程的基础上,提出了一种全程优化的垃圾回收方法WPO-GC,尽可能全面地考虑各步骤对SSD正常读写请求和寿命的影响。在开源的模拟器SSDsim上实现并验证了WPO-GC的有效性。实验结果表明,同典型GC算法相比,WPO-GC可以减少SSD读请求延迟20%~40%,写请求延迟17%~40%,并能将均衡磨损近30%,从而延长其使用寿命;同DT-GC策略比较,在性能方面的优化不是很明显,最高提升10%,但是在减少写放大和均衡磨损上有了近30%的优化。如何在保证读写性能的情况下,进一步延长SSD的寿命,是一个值得深入研究的课题。本文提出的方案主要是优化并结合前人的工作,接下来的工作重心将放在如何将垃圾回收与缓存有效结合,在进行有效数据迁移时,判断该数据所对应的逻辑地址是否在缓存已经被更新,从而减少迁移耗时。

参考文献
[1] LEE S W, PARK D J, CHUNG T S, et al. A log buffer-based flash translation layer using fully-associative sector translation[J]. ACM Transactions on Embedded Computing Systems, 2007, 6(3): 150-151.
[2] TANG X, MENG X. ACR:an adaptive cost-aware buffer replacement algorithm for Flash storage devices[C]//Proceedings of the 201011th International Conference on Mobile Data Management. Piscataway, NJ:IEEE, 2010:33-42.
[3] SOGA A, SUN C, TAKEUCHI K. NAND flash aware data management system for high-speed SSDs by garbage collection overhead suppression[C]//Proceedings of the 2014 IEEE 6th International Memory Workshop. Piscataway, NJ:IEEE, 2014:1-4.
[4] fio[EB/OL].[2016-05-22].http://freecode.com/projects/fio.
[5] 郭御风, 李琼, 刘光明, 等. 基于NAND闪存的固态盘技术研究[J]. 计算机研究与发展, 2009, 46(2): 328-328. ( GUO Y F, LI Q, LIU G M, et al. Research and development of solid state disk technology based on NAND flash memory[J]. Journal of Computer Research and Development, 2009, 46(2): 328-328. )
[6] 马宇川. 拒绝掉速闪迪Extreme Pro480GB固态硬盘深度体验[J]. 微型计算机, 2014(21): 71-74. ( MA Y C. Rejected SanDisk Pro480GB extreme solid state hard disk depth experience[J]. Micro Computer, 2014(21): 71-74. )
[7] BEAK S, AHN S, CHOI J. Uniformity improving page allocation for flash memory file systems[C]//Proceedings of the 7th ACM & IEEE International Conference on Embedded Software. New York:ACM, 2007:154-163.
[8] KIM Y, ORAL S, SHIPMAN G M, et al. Harmonia:a globally coordinated garbage collector for arrays of solid-state drives[C]//Proceedings of the 2011 IEEE 27th Symposium on Mass Storage Systems and Technologies. Washington, DC:IEEE Computer Society, 2011:1-12.
[9] HA K, KIM J. A program context-aware data separation technique for reducing garbage collection overhead in NAND flash memory[C]//Proceedings of the 7th IEEE International Workshop on Storage Network Architecture and Parallel I/Os. Piscataway, NJ:IEEE, 2011:1-10.
[10] GALAND E, TOLEDO S. Algorithms and data structures for flash memories[J]. ACM Computing Surveys, 2005, 37(2): 138-163. doi: 10.1145/1089733
[11] LEE J, KIM Y, SHIPMAN G, et al. A semi-preemptive garbage collector for solid state drives[C]//Proceedings of the IEEE International Symposium on Performance Analysis of Systems and Software. Piscataway, NJ:IEEE, 2011:12-21.
[12] QIN Y, FENG D, LIU J, et al. DT-GC:adaptive garbage collection with dynamic thresholds for SSDs[C]//Proceedings of the 2014 International Conference on Cloud Computing and Big Data. Piscataway, NJ:IEEE, 2014:182-188.
[13] KWON O, LEE J, KOH K. EF-Greedy:a novel garbage collection policy for flash memory based embedded systems[C]//Proceedings of the 7th International Conference on Computational Science. Berlin:Springer, 2007:913-920.
[14] KIM H, LEE S. An effective flash memory manager for reliable flash memory space management[J]. IEICE Transactions on Information & Systems, 2002.
[15] TJIOE J, BLANCE A, XIE T, et al. Making garbage collection wear conscious for flash SSD[C]//Proceedings of the 2012 IEEE 7th International Conference on Networking, Architecture and Storage. Washington, DC:IEEE Computer Society, 2012:114-123.
[16] WU S, LIN Y, MAO B, et al. GCaR:garbage collection aware cache management with improved performance for flash-based SSDs[C]//Proceedings of the 2016 International Conference on Supercomputing. New York:ACM, 2016:Article No. 28.
[17] MOMODOMI M, ITOH Y, SHIROTN R, et al. An experimental 4-Mbit CMOS EEPROM with a NAND-structured cell[J]. IEEE Journal of Solid-State Circuits, 1989, 24(5): 1238-1243. doi: 10.1109/JSSC.1989.572587
[18] XIE W, CHEN Y. An adaptive separation-aware FTL for improving the efficiency of garbage collection in SSDs[C]//Proceedings of the 201414th IEEE/ACM International Symposium on Cluster, Cloud and Grid Computing. Piscataway, NJ:IEEE, 2014:552-553.
[19] HU Y, JIANG H, FENG D, et al. Performance impact and interplay of SSD parallelism through advanced commands, allocation strategy and data granularity[C]//Proceedings of the 2011 International Conference on Supercomputing. New York:ACM, 2011:96-107.
[20] KAVALANCKER S, WORTHINGTON B, ZHANG Q, et al. Characterization of storage workload traces from production Windows servers[C]//Proceedings of the 2008 IEEE International Symposium on Workload Characterization. Piscataway, NJ:IEEE, 2008:119-128.
[21] SNIA IOTTA Repository[EB/OL].[2016-05-22].http://iotta.snia.org/traces/130.