Yaffs2文件系统中对NAND Flash磨损均衡的改进

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Yaffs2文件系统中对NAND Flash磨损均衡的改进

摘要:针对以NAND Flash为存储介质时Yaffs2文件系统存在磨损均衡的缺陷,通过改进回收块选择机制,并在数据更新中引入冷热数据分离策略,从而改善NAND Flash的磨损均衡性能。实验借助Qemu软件建立Linux嵌入式仿真平台,从总擦除次数、最大最小擦除次数差值和块擦除次数标准差等方面进行对比。实验结果表明,在改进后的Yaffs2文件系统下NAND Flash的磨损均衡效果有明显提升,这有益于延长NAND Flash的使用寿命。

关键词: Yaffs2文件系统;NAND Flash;垃圾回收;冷热数据

0 引言

NAND Flash存储设备与传统机械磁盘相比,具有体积小、存储密度高、随机存储和读写能力强、抗震抗摔、功耗低等特点[1]。它被广泛用于智能手机、车载智能中心、平板电脑等智能终端中。近年来,以NAND Flash为存储介质的固态硬盘也得到越来越多的应用。目前Yaffs2文件系统(Yet Another Flash File System Two,Yaffs2)[1]是使用最多、可移植性最好的专用文件系统,在安卓、阿里云OS、Linux等嵌入式系统中都有使用。在Yaffs2文件系统下以NAND Flash为存储介质时存在磨损均衡的缺陷,可通过对回收块选择机制作改进和引入冷热数据分离策略来提高磨损均衡的效果。

1 Yaffs2和Nand Flash关系

这里以使用最多的Linux操作系统为实践,将Yaffs2文件系统移植到Linux操作系统中。Linux系统通常可以分为3层:应用层、内核层和设备层,其中支持NAND Flash设备的Yaffs2文件系统属于内核层,。

最上层用户应用程序通过VFS(Virtual File System)提供的统一接口,将数据更新等文件操作传递给Yaffs2。VFS代表虚拟文件系统,它为上层应用提供统一的接口。有了这些接口,应用程序只用遵循抽象后的访问规则,而不必理会底层文件系统和物理构成上的差异。然后Yaffs2通过MTD(Memory Technology Device)提供的统一访问接口对NAND Flash进行读、写和擦除操作,从而完成数据的更新或者存储操作。MTD代表内存技术设备,它为存储设备提供统一访问的接口。最终,在NAND Flash上以怎样的格式组织和存储数据由Yaffs2文件系统决定。

NAND Flash由若干块(block)组成,每个块又是由若干页(page)组成,页中含有数据区和附加区。NAND Flash的页根据状态不同,可以分为有效页、脏页、空闲页。有效页中存放有效数据,脏页中存放无效数据,空闲页是经过擦除后可以直接用于写入数据的页。NAND Flash在写入数据前需要执行擦除操作,因此数据不能直接在相同的位置更新。当一个页中数据需要更新时,必须将该页中有效数据拷贝到其他空闲页上再更新,并将原来页上的数据置为无效。随着时间的推移,许多无效页累积在存储器中使得空闲页逐渐减少。当存储器中的空闲空间不足时,启动垃圾回收操作,利用回收块选择机制从待回收块中选取满足要求的块来擦除,从而得到足够的空闲空间。NAND Flash中块的擦除次数有限,通常为10 000次~100 000次[2]。当某个块的擦除次数超过使用寿命时,该块将无法正常用于数据存储。因此,垃圾回收应利用合理的回收块选择机制,从待回收块中找到回收后能产生良好磨损均衡效果且付出较少额外代价的块来回收,从而获得足够的空闲空间用于数据更新操作。

2 Yaffs2在磨损均衡方面的缺陷

Yaffs2中回收块的选择机制[3]是从待回收块中找到有效数据最少的块来回收。回收过程中,Yaffs2能够减少有效数据的额外读和写操作。当数据更新处于均匀分布的情况下,Yaffs2表现出较好的磨损均衡效果。

但是,通常情况下数据的更新频率不同,有些数据经常更新,而有些数据很少更新。经

常更新的数据称为热数据,很少更新的数据称为冷数据[1]。如果某个块上总有热数据不断更新,那么该块上有效数据会变少,Yaffs2容易选中这样的块来更新。而当某个块中含大量有效冷数据时,冷数据少更新的特点使得Yaffs2难以选中这类块来更新。更新后的块会用于存放新写入的数据,而新写入的数据通常是热数据,由此可知热数所在块会经常被更新。最终热数据所在的块成为擦除次数多的块,冷数据所在的块成为擦除次数少的块。因此Yaffs2的回收块选择机制会造成NAND Flash设备中块的擦除次数呈两级分化,即块的最大、最小擦除次数差值不断变大。所以Yaffs2中不应只考虑数据更新所产生的额外读写代价,还应考虑块的存在年龄对磨损均衡效果的影响,这才能解决磨损均衡中两级分化的问题。

Yaffs2文件系统中更新某个块时,需将该块上的剩余有效数据拷贝到其他空闲块上。而剩余有效数据不能占满整个块,系统会将新写入的数据继续存放到该块上,直到它的存储空间用完为止。更新过程中保留下来的数据通常是冷数据,而新写入的数据通常是热数据,因此Yaffs2的更新策略会造成冷数据和热数据同时存储在一个块中。由于热数据的更新速度快,当热数据更新时会导致冷数据被迫更新。但更新后剩下的数据同样不能占满一个整块,系统会再次将冷数据和热数据存放到同一个块中。随着以上的更新方式不断进行,将导致一系列不必要的数据读、写以及块的擦除操作。因此Yaffs2的更新策略会使冷热数据共存的块易被多次更新,而冷数据占据的块很少更新,最终使得块擦除次数标准差过大,导致磨损不均衡。由于Yaffs2的更新策略中没有做冷热数分离,这使得磨损不均衡问题难以解决。

3 Yaffs2的改进方法

3.1 回收块选择机制的改进

对于Yaffs2回收块选择机制的缺陷,可以通过加入块的年龄(age)参数[4]解决。增加age参数后的回收块选择机制遵循式(1),这可以将一些长期不更新的块选中更新。

其中,age指块从分配开始到当前垃圾回收时刻为止的年龄,u表示单个块中有效数据的占有比率。新的回收块选择机制选取当前时刻年龄最大且有效数据占有最少(即benefit/cost比值最大)的块作为回收对象。当一个块上存储的是冷数据时,一定时间后该块没有被更新,那么它的age参数会变得很大。尽管该块上有效数据很多(即(1-u)/2u的比值较小),但age参数很大使得benefit/cost的比值足够大,最终会选中被冷数据占据的块来更新。由此可知引入age参数后,能解决Yaffs2文件系统下NAND Flash中最大、最小擦除次数差值过大的磨损均衡问题。

3.2 增加冷热数据分离策略

对于Yaffs2中数据更新的缺陷,可以引入冷热数据分离策略[5]来解决。冷热数据分离策略能够收集冷数据,解决同一个块中存放不同温度数据时,由于热数据更新而强制更新冷数据的问题。在系统运行过程中检测到块的最大、最小擦除次数差值过大时,将收集到的冷数据用数据交换操作放置到擦除次数多的块上。当冷池中块被热数据占据或者热池中块被冷数据占据时,冷热数据分离策略也能处理这类块反转问题。数据的冷热程度对块的擦除次数会产生直接影响,因此冷热数据分离策略通过块擦除次数来判断数据温度。改进步骤如下: (1)初始化:将NAND Flash中的所有块平均分为两个部分,一部分块放到热池中,另一部分块放到冷池中。

(2)数据交换:找出热池中擦除次数最多(Hottesthp)的块,冷池中擦除次数最少(Coldestcp)的块。当Hottesthp减去Coldestcp之差大于一个阈值时(如式(2)),则需要做数据交换操作。数据交换操作是将擦除次数为Coldestcp的块中收集的冷数据拷贝到擦除次数为Hottesthp的块中,将擦除次数为Hottesthp的块上原来的热数据存放到任意其他空闲块上。数据交换操作的目的是将冷数据放到擦除次数最多的块上,利用冷数据不易更新的特点来减少块的继续擦除;而将新写入的数据存放到擦除次数少的块上,最终达到磨损均衡

相关文档
最新文档