开放科学(资源服务)标志码(OSID):
NAND闪存具有体积小、速度快、价格低、非易失等优点,在电子设备的数据存储中被广泛应用[1-2]。NAND闪存在结构上由若干个物理块组成,每个物理块又由若干个物理页组成。在NAND闪存中,数据读写以页为单位进行,数据擦除以块为单位进行,数据更新则采用异地更新策略[3-4]。NAND数据在进行更新时,不能直接将新数据覆写在原数据位置,需要将原始数据标记为无效,再将新数据写到其他空闲页[5-6]。异地更新策略会导致NAND闪存中产生大量无效页,无效页需要经过擦除操作变为空闲页后才可再次使用,因此,合理地处理无效页可以大幅提高NAND闪存的存储效率,这一过程也被称为垃圾回收[7-8]。同时,NAND闪存每个块的擦除次数存在上限[9-10],为避免某些块被频繁擦除而导致无法使用,在擦除过程中应尽量使操作均匀分布在各个块上,这一过程被称为磨损均衡[11]。磨损均衡效果好的垃圾回收算法是提高NAND闪存使用效率、延长其使用寿命的关键[12]。
近年来,研究人员提出了许多垃圾回收算法。WU等提出一种GR算法[13],该算法选取有效页比例最小的块进行回收,垃圾回收效率较高,但是其未考虑磨损均衡效果。KAWAGUCHI等提出一种CB(Cost-Benefit)算法[14],该算法选取有效页比例小且距上一次更新时间长的块进行回收,其磨损均衡效果较GR算法有一定提升。CHIANG等提出一种CAT(Cost-Age-Time)算法[15],其在CB算法的基础上选择擦除次数最小的块进行回收,同时将回收块中冷热数据分开存储在不同块中,磨损均衡效果有了进一步提升,但该算法依据块的擦除次数区分数据冷热,准确性不高。YAN等提出一种FaGC(File-aware Garbage Collection)算法[16],该算法基于GR算法进行回收块选取,根据页的更新频率区分回收块中有效页的冷热,其能取得较好的磨损均衡效果。HUANG等提出FaGC+算法[17],其在FaGC算法的基础上,选择各逻辑页更新间隔累加和最大的块进行回收,同时使用逻辑页更新序号改进回收块中有效页热度的计算公式,进一步提升了磨损均衡效果,但是该算法仅考虑逻辑页上一次的更新序号,并以此进行回收块选取和热度计算,缺少对逻辑页整体更新情况的考虑。
本文考虑闪存中数据整体的更新情况,提出一种基于数据更新间隔的垃圾回收(UIGC)算法。UIGC算法综合考虑块中无效页年龄累计和以及块中有效页比例,结合物理块磨损均衡效果选取回收块,并根据回收块中有效页热度和数据更新稳定性,将有效页数据进行分块存储,从而提高块中数据的同步更新概率。
1 基于数据更新间隔的垃圾回收算法UIGC算法进行垃圾回收的过程由分散度判断、回收块选择、数据分离3个部分组成,算法整体流程如图 1所示:首先,计算闪存中空闲页分散度,判断是否进入回收块选择阶段;在回收块选择阶段,根据闪存状态选择合适的策略进行回收块选择;最后处理回收块中的有效页,将不同类型的有效页数据迁移至不同的块中。在数据分离完成后,将原有效页标记为无效,对全为无效页的块进行块擦除操作,从而完成一次垃圾回收过程。
![]() |
Download:
|
图 1 基于数据更新间隔的垃圾回收算法流程 Fig. 1 Procedure of garbage collection algorithm based on data update interval |
为了提高垃圾回收效率,UIGC算法使用分散度的概念作为回收块选择过程的触发条件[18]。分散度计算公式如式(1)所示:
$ S=\left({N}_{fc}-{N}_{fb}\times {N}_{c}\right)/{N}_{fc} $ | (1) |
其中:Nfc为闪存中空闲页的总数;Nfb为空闲块的总数;Nc为单个物理块中页的数量。分散度S表示闪存中空闲页的分布情况,空闲页分布越分散,S值越大,反之S值越小。当S大于阈值fsc时,启动回收块选择策略。当闪存中空闲页分布比较分散时,文件系统需要频繁寻找可用块,降低了闪存使用效率,此时进行垃圾回收,在降低分散度的同时也能产生更多的空闲页,从而提高垃圾回收的效率。分散度判断过程描述如算法1所示。
算法1 分散度判断算法
输入 Nfc,Nfb,Nc
输出 Nfc,Nfb
1.S=(Nfc-Nfb×Nc)/Nfc
2.IF S > fsc THEN
3.call Algorithm 2 and Algorithm 3
4.END
5.update Nfc and Nfb
1.2 回收块选择在回收块选择策略上,大部分研究考虑块中无效页比例以及物理块上一次更新时间间隔,此为垃圾回收效率上的考量。本文回收块选择策略由常规状态下的动态回收块选择策略以及特定状态下的静态回收块选择策略组成,分2个部分综合考虑闪存的回收效率以及磨损均衡效果。
1.2.1 动态回收块选择本文基于页序号概念设计动态回收块选择策略[17],综合考虑回收块中有效页比例以及无效页年龄,最终使用的动态回收块选择公式如式(2)所示:
$ {C}_{\mathrm{C}\mathrm{B}}=\frac{1-u}{u}\sum\limits _{i=1}^{n}({S}_{now}-{S}_{i}) $ | (2) |
其中:u为块中有效页比例;n为块中无效页数量;Snow为启动垃圾回收时的页序号;Si为对应的物理页变成无效页时的页序号;Snow
在数据非随机写入时,存在部分物理块中有效页比例较高但长期未得到更新的情况,此时使用动态回收块选择策略将无法选择到该块进行回收,从而影响算法整体的磨损均衡效果。针对此类情况,本文在动态回收块选择策略的基础上,设计静态回收块选择策略,以改善算法的磨损均衡效果。
启动静态回收块选择策略的条件为闪存中物理块的最大擦除次数和最小擦除次数之差大于阈值Te,阈值Te的计算公式如式(3)所示:
$ {T}_{e}=\frac{{N}_{\mathrm{b}\mathrm{l}\mathrm{o}\mathrm{c}\mathrm{k}}-{N}_{\mathrm{v}\mathrm{a}\mathrm{l}\mathrm{i}\mathrm{d}}}{{N}_{\mathrm{b}\mathrm{l}\mathrm{o}\mathrm{c}\mathrm{k}}}\times {T}_{wl} $ | (3) |
其中:Nblock为闪存系统中物理块总数;Nvalid为全是有效页的块的数量;Twl为初始设置阈值。静态回收块选择策略直接选择擦除次数最少的块进行回收,当擦除次数一样时,优先选择块中有效页比例小的块进行回收。算法每进行一次垃圾回收过程,则更新闪存系统中的Nvalid值,重新计算策略选择阈值Te。通过2种策略切换的回收块选择方式,在保证闪存系统垃圾回收效率的同时,使块擦除操作均匀分布在各个物理块上,从而提升算法的磨损均衡效果。回收块选择具体处理流程如算法2所示。
算法2 回收块选择算法
输入 Nvalid,Snow,maxEarseCount,minEarseCount
输出 recycleBlock//输出选择的回收块
1.Te =(Nblock-Nvalid)×Twl/Nblock
2.IF maxEarseCount-minEarseCount < Te THEN//最大、最//小块擦除次数之差小于切换阈值
3.FOR i 0 to Nblock by 1 DO
4.calculate CCB and record the recycleBlock with the largest CCB value
5.END
6.ELSE
7.FOR i 0 to Nblock by 1 DO
8.record the recycleBlock with the least erasure times
9.END
10.END
1.3 数据分离若回收块中存在有效页,回收时需要先将块中存在的有效页数据迁移到其他空闲页中,并将该有效页置为无效页。若将更新间隔相近的数据迁移到同一块中,则该块中有效页将有较大概率同时变为无效页,从而降低回收块中有效页比例,提高垃圾回收效率[19]。在FaGC+算法的基础上,本文重新设计数据热度计算公式,根据回收块中有效页更新间隔判断热度,相关计算公式如式(4)、式(5)所示:
$ {A}_{\mathrm{A}\mathrm{I}}=\sum\limits _{i=1}^{{N}_{\mathrm{b}\mathrm{l}\mathrm{o}\mathrm{c}\mathrm{k}}}\frac{\left({S}_{\mathrm{n}\mathrm{o}\mathrm{w}}-{D}_{i}\right)\times {u}_{i}}{{N}_{\mathrm{b}\mathrm{l}\mathrm{o}\mathrm{c}\mathrm{k}}} $ | (4) |
$ {U}_{\mathrm{U}\mathrm{I}}={S}_{\mathrm{n}\mathrm{o}\mathrm{w}}-{S}_{\mathrm{l}\mathrm{a}\mathrm{s}\mathrm{t}} $ | (5) |
其中:Di为对应物理块被分配使用时的页序号;ui为对应物理块中有效页比例;Slast为回收块中有效页数据上一次更新时的页序号。式(4)计算得到的AAI表示垃圾回收时闪存中有效页数据全局平均更新间隔,式(5)计算得到的UUI表示回收块中有效页当前更新间隔。当回收块中有效页当前更新间隔UUI大于全局平均更新间隔AAI时,有效页数据定义为热数据,反之定义为冷数据。本文将冷热数据做了进一步划分,分别以AAI/2和AAI×3/2为界限,将数据依次划分为冷页、次冷页、次热页、热页4种类型。
闪存系统在实际使用过程中,由于数据使用情况的不同,存在定期更新和不定期更新数据,即各数据前后更新间隔的变化幅度存在差异,本文将这种数据更新间隔变化幅度定义为数据更新稳定性。为进一步提升垃圾回收效率,本文在根据回收块中有效页更新间隔进行热度划分的同时,判断有效页中数据更新稳定性,将稳定更新数据和不稳定更新数据分块存储,相关计算公式如式(6)~式(8)所示:
$ {I}_{\mathrm{a}\mathrm{v}\mathrm{e}}=\frac{{S}_{\mathrm{l}\mathrm{a}\mathrm{s}\mathrm{t}}-{S}_{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}}}{c-1} $ | (6) |
${S_{{\rm{pred}}}}{\rm{ = }}{S_{{\rm{last}}}}{\rm{ + }}{I_{{\rm{ave}}}} $ | (7) |
$ {D_{{\rm{DF}}}}{\rm{ = }}\left| {{S_{{\rm{pred}}}}{\rm{ - }}{S_{{\rm{now}}}}} \right| $ | (8) |
其中:Sinit为有效页数据初次写入时的页序号;c为有效页数据更新次数;Iave为有效页数据平均更新间隔;Spred为利用平均更新间隔预测得到的当前更新序号值;DDF为当前实际序号与预测序号之间的绝对差值。当计算得到的DDF值大于Iave/2时,说明该有效页当前更新间隔与其平均更新间隔差距过大,数据前后更新间隔幅度变化剧烈,处于不稳定更新状态,反之数据则为稳定更新状态。算法将稳定更新的数据按热度分块存储,使得块中数据拥有稳定且相近的更新间隔,从而进一步提高块中数据同步更新的概率以及垃圾回收效率。结合数据热度和更新稳定性进行有效页类型划分,结果如表 1所示,数据分离过程如算法3所示。
![]() |
下载CSV 表 1 有效页类型划分 Table 1 Type division of valid pages |
算法3 数据分离算法
输入 recycleBlock//输入选择的回收块
输出 recycledBlock//输出数据分离后的回收块
1.FOR i 0 to Nblock by 1 DO//遍历物理块
2.AAI +=(Snow-Di)×ui/Nblock
3.END
4.FOR j 0 to n by 1 DO//遍历回收块中的有效页
5.Iave =(Slast-Sinit)/(c-1)
6.Spred = Slast+Iave
7.UUI = Snow-Slast
8.unstable = abs(Spred-Snow) > Iave/2?1:0
9.IF(UUI < AAI/2)THEN
10.updateLevel = 1+unstable×4// 冷页
11.ELSE IF(UUI < AAI)THEN
12.updateLevel = 2+unstable×4// 次冷页
13.ELSE IF(UUI < AAI×3/2)THEN
14.updateLevel = 3+unstable×4// 次热页
15.ELSE
16.updateLevel = 4+unstable×4// 热页
17.END
18.IF updateLevel is in(1,2,5,6))THEN//该有效页为//冷页或次冷页
19.IF updateLevelBlock has no free chunk THEN
20.find the block of maxEarseCount to be updateLevelBlock
21.END
22.transfer the valid chunk data from recycleBlock toupd ateLevelBlock and make the original valid chunk invalid
23.END
24.ELSE// 该有效页为热页或次热页
25.IF updateLevelBlock has no free chunk THEN
26.find the block of minEarseCount to be updateLevelBlock
27.END
28.transfer the valid chunk data from recycleBlock toupd ateLevelBlock and make the original valid chunk invalid
29.END
30.END
2 实验结果与分析 2.1 实验环境本文在Ubuntu20.04平台上使用QEMU(Quick EMUlator)搭建基于Linux2.6的嵌入式仿真系统[20],并使用NANDsim模拟NAND闪存,在移植Yaffs2文件系统后[21]编写程序进行测试。模拟出的NAND闪存容量为64 MB,其中物理块的大小为128 KB,物理页的大小为2 KB。测试程序随机创建出大小为16~1 024 KB的文件,创建文件的总和占NAND总容量的90%,随后对其中15%的内容按齐夫分布进行更新操作[22-23]。本文选取GR、CB、CAT、FaGC、FaGC+这5种算法与UIGC算法进行对比测试。为了保证对比测试的公平进行,实验关闭Yaffs2文件系统的缓存功能和后台垃圾回收,所有实验均在aggressive模式下完成。实验相关参数设定如表 2所示。
![]() |
下载CSV 表 2 实验参数 Table 2 Experimental parameters |
本文主要从块擦除操作总数、页拷贝操作总数、块擦除次数标准差等方面分析比较垃圾回收算法性能,根据擦除和拷贝操作总数考察算法垃圾回收效率,根据块擦除次数标准差考察算法磨损均衡能力。
图 2和图 3分别对比使用不同算法进行测试时闪存中块擦除次数和页拷贝次数。从中可以看出:UIGC算法在垃圾回收时实现了更低的块擦除次数和页拷贝次数;CAT算法在GR、CB算法的基础上进行数据冷热分离,磨损均衡效果有了较大提升,由于回收块选择部分改进不大,且仅以擦除次数来区分数据冷热,不够准确,造成了一些额外的擦除和拷贝操作,因此,其在提升磨损均衡效果的同时反而增加了擦除和拷贝次数;FaGC算法改进了数据分离算法,以数据更新频率区分数据的冷热,进一步提升了磨损均衡效果,降低了擦除和拷贝操作次数;FaGC+算法在FaGC算法的基础上提出页序号的概念,同时改进回收块选择策略,提高了回收块选择和数据冷热划分的准确性;UIGC算法在选取回收块时,考虑块中无效页年龄累计和以及块中有效页比例,选取无效页多且年龄和大的块作为回收块,有效减少了处理回收块时造成的页拷贝操作次数,UIGC算法从全局角度对回收块中有效页数据进行热度划分,避免了自定义热度参数导致的局限性,此外,该算法提出数据更新稳定性的概念,根据数据热度和更新稳定性将回收块中有效页数据分块存储,提高同一块中数据的同步更新概率,配合分散度判断,大幅降低了垃圾回收程序被触发的次数,有效减少了块擦除次数,进一步提高了算法的垃圾回收效率。
![]() |
Download:
|
图 2 各算法块擦除次数对比 Fig. 2 Comparison of block erasure times of each algorithm |
![]() |
Download:
|
图 3 各算法页拷贝次数对比 Fig. 3 Comparison of page copy times of each algorithm |
图 4对比了使用不同算法进行测试时每个物理块的擦除次数分布情况,图 5显示了各块擦除次数标准差随着擦除次数的变化情况。从图 4、图 5可以看出:UIGC算法得到的各块擦除次数分布均匀,维持在一个较低水平,且随着擦除次数的增加,各块擦除次数标准差始终保持稳定,与FaGC+算法块擦除次数标准差变化曲线基本重合;UIGC算法在动态回收块选择的基础上结合静态回收块选择策略,在有效提升垃圾回收效率的同时,仍具有和FaGC+算法相近的磨损均衡效果,即具有更优的垃圾回收性能。
![]() |
Download:
|
图 4 物理块擦除次数分布情况 Fig. 4 Distribution of erasure times of physical blocks |
![]() |
Download:
|
图 5 各算法擦除次数标准差对比 Fig. 5 Comparison of standard deviation of erasure times of each algorithm |
为了优化NAND闪存在进行垃圾回收时的性能表现,本文提出一种基于数据更新间隔的垃圾回收算法UIGC。选择无效页多且存在时间长的块进行回收,判断回收块中有效页热度以及数据更新稳定性状态,将不同类型的有效页数据分块存储,同时以分散度作为回收块选择过程的触发条件,从而在有效提高垃圾回收效率的同时保持较高的磨损均衡能力。实验结果表明,UIGC算法的垃圾回收效率以及磨损均衡效果优于GR、CB等算法。但是,UIGC算法在实现过程中引入了额外的内存空间来存储数据更新的页序号等信息,下一步考虑使用逻辑区间的方式减少额外存储的数据量,以在保证垃圾回收性能的前提下降低额外的内存空间消耗。
[1] |
杜晨杰, 姚英彪. 一种面向闪存固态盘的页级缓冲区管理算法[J]. 计算机工程, 2018, 44(7): 54-59. DU C J, YAO Y B. A page-level buffer management algorithm oriented flash solid state disk[J]. Computer Engineering, 2018, 44(7): 54-59. (in Chinese) |
[2] |
ZHU G, HAN J, SON Y. A preliminary study: towards parallel garbage collection for NAND flash-based SSDs[J]. IEEE Access, 2020, 8: 223574-223587. DOI:10.1109/ACCESS.2020.3043123 |
[3] |
SEO S B, KIM W, KWON S J. Efficient page collection scheme for QLC NAND flash memory using cache[J]. International Journal of Advanced Computer Science and Applications, 2018, 9(11): 458-461. |
[4] |
HUANG M, WANG Y, LIU Z Q, et al. A garbage collection aware stripping method for solid-state drives[C]//Proceedings of the 20th Asia and South Pacific Design Automation Conference. Washington D.C., USA: IEEE Press, 2015: 11-23.
|
[5] |
张靖君, 王玲. 混合映射方式下NAND闪存垃圾回收算法[J]. 小型微型计算机系统, 2019, 40(10): 2139-2142. ZHANG J J, WANG L. NAND flash garbage collection algorithm in hybrid mapping mode[J]. Journal of Chinese Computer Systems, 2019, 40(10): 2139-2142. (in Chinese) |
[6] |
HE J, JIA G, HAN G, et al. Locality-aware replacement algorithm in flash memory to optimize cloud computing for smart factory of industry 4.0[J]. IEEE Access, 2017, 5: 16252-16262.
|
[7] |
LIU Z, REN S. Garbage collection technique using erasure interval for NAND flash memory-based storage systems[J]. Advances in Computational Sciences and Technology, 2018, 11(5): 417-431. |
[8] |
KIM S H, CHOI J H, KWAK J W. PBGC: proxy block-based garbage collection for index structures in NAND flash memory[J]. IEICE Transactions on Information & Systems, 2016, 99(7): 1928-1932. |
[9] |
KIM M, CHUN M, HONG D, et al. RealWear: improving performance and lifetime of SSDs using a NAND aging marker[J]. ACM SIGMETRICS Performance Evaluation Review, 2021, 48(3): 120-121. DOI:10.1145/3453953.3453980 |
[10] |
KANKANI N, TRUONG L T. Variable bit encoding per NAND flash cell to extend life of flash-based storage devices and preserve over-provisioning[EB/OL]. [2021-01-05]. https://www.freepatentsonline.com/y2016/0342344.html.
|
[11] |
QIN M, MATEESCU R, WANG Q, et al. Garbage collection algorithms for meta data updates in NAND flash[C]//Proceedings of 2019 IEEE International Conference on Communications. Washington D.C., USA: IEEE Press, 2019: 125-145.
|
[12] |
LUO Q, FANG X, SUN Y, et al. Self-learning hot data prediction: where echo state network meets NAND flash memories[J]. IEEE Transactions on Circuits and Systems I: Regular Papers, 2020, 67(3): 939-950. DOI:10.1109/TCSI.2019.2960015 |
[13] |
WU M, ZWAENEPOEL W. eNVy: a non-volatile, main memory storage system[J]. ACM SIGOPS Operating Systems Review, 1994, 28(5): 86-97. DOI:10.1145/381792.195506 |
[14] |
ATSUO K, SHINGO N, HIROSHI M. A flash-memory based file system[M]. San Diego, USA: USENIX Association, 1995.
|
[15] |
CHIANG M L, CHANG R C. Cleaning policies in mobile computers using flash memory[J]. Journal of Systems & Software, 1999, 48(3): 213-231. |
[16] |
YAN H, YAO Q. An efficient file-aware garbage collection algorithm for NAND flash-based consumer electronics[J]. IEEE Transactions on Consumer Electronics, 2015, 60(4): 623-627. |
[17] |
YAN H, HUANG Y, ZHOU X, et al. An efficient and non-time-sensitive file-aware garbage collection algorithm for NAND flash-based consumer electronics[J]. IEEE Transactions on Consumer Electronics, 2019, 64(1): 73-79. |
[18] |
杨智, 严华. Yaffs2文件系统中NAND Flash块选择策略的改进[J]. 四川大学学报(自然科学版), 2016, 53(6): 1278-1282. YANG Z, YAN H. Improvement on block selection policies of NAND Flash in Yaffs2 file system[J]. Journal of Sichuan University(Natural Science Edition), 2016, 53(6): 1278-1282. (in Chinese) |
[19] |
于万钧, 张海军, 刘全. 一种基于NAND闪存高效的页面替换算法[J]. 现代电子技术, 2017, 40(16): 53-56. YU W J, ZHANG H J, LIU Q. An efficient page replacement algorithm based on NAND flash memory[J]. Modern Electronic Technology, 2017, 40(16): 53-56. (in Chinese) |
[20] |
HARBY A A, FAHMY S F, AMIN A F. More accurate estimation of working set size in virtual machines[J]. IEEE Access, 2019, 7: 94039-94047. DOI:10.1109/ACCESS.2019.2928221 |
[21] |
李恒恒, 胡泽明, 岳春生, 等. 基于YAFFS2的静态磨损均衡算法设计[J]. 计算机应用研究, 2016, 33(4): 1091-1095. LI H H, HU Z M, YUE C S, et al. Design of static wear-leveling algorithm based on YAFFS2[J]. Application Research of Computers, 2016, 33(4): 1091-1095. (in Chinese) |
[22] |
LIN M, CHEN S. Efficient and intelligent garbage collection policy for NAND flash-based consumer electronics[J]. IEEE Transactions on Consumer Electronics, 2013, 59(3): 538-543. DOI:10.1109/TCE.2013.6626235 |
[23] |
AKSENOV S V, SAVAGEAU M A. Parameter estimation and random number generation from a Zipf-related Lerch distribution[J]. Social Science Electronic Publishing, 2018(6): 196-225. |