一种延长非易失外存寿命的方法及高速长寿外存系统
技术领域
本发明属于存储技术领域,具体涉及一种非易失存储器的缓存技术。主要用于解决使用新型非易失存储器构建高速外存系统时存在的寿命短问题,。
背景技术
现有基于非易失存储器外存系统的研究主要集中与如何提高I/O性能方面。SCMFS不按照块管理和访问外存系统,同时获得较高的I/O性能,但没有设计如何减少写操作、延长使用寿命。BPFS使得系统的I/O性能比RAMFS提高了4~10倍,但同样缺乏延长非易失存储器寿命的方法。
现有的研究者针对非易失存储器作为内存时存在的使用寿命问题,提了如下解决方案:使用非易失存储器和DRAM混合构建主存,交替分配非易失存储器和DRAM,使用DRAM完成大部分的写操作,由于DRAM的易失性,这种方法无法适用于外存;使用DRAM作为非易失存储器的缓存,构建主存系统。但DRAM在断电的情况下无法保存数据,无法用于构建外存系统。
现有的用于解决flash介质寿命问题的磨损均衡方法,只是将数据较均匀的写到flash中,延长存储器的使用寿命。但并没有减少写数据量,只是在整个存储介质上进行了均匀分布,在一定程度上还增加了写数据量;访问数据之前还需要进行数据逻辑地址和实际地址的转换,增加了时间和空间开销;此外Flash中仍然以块的方式进行读写操作,缺乏针对非易失存储器基于字节读写能力的优化方法。
现有技术中普通缓存方法是为了缓冲高速设备和低速设备的速度差异而建立的,缺少减少写外存数据量的方法。
发明内容
本发明的目的在于提供一种延长非易失外存寿命的方法及高速长寿外存系统,解决非易失存储器作为外存时耐写次数有限问题,延长非易失外存寿命。
本发明出于降低非易失存储器的写数据量和同时满足非易失存储器的高速性的考虑,本设计使用DRAM构建两份缓存,写缓存和原始缓存,并且针对DRAM缓存的易失性作出优化。
一种延长非易失外存寿命的方法,其特征在于通过维护两份缓存,写缓存和原始缓存来工作;所述维护两份缓存的方法包括写缓存混合粒度调度方法、基于字节的比较写回方法和双缓存协调方法;具体包括以下步骤:首先使用写缓存来合并文件系统对同一数据的多次写操作,再通过写缓存和原始缓存基于字节的比较来降低写外存数据量。
写缓存用于合并对同一数据的多次写操作,因此在管理写缓存时也同样使用块为单位;但区别于现有的缓存管理方法,写缓存中仅使用块作为调入和调出缓存的基本单位,而不使用块作为读取和写入缓存的基本单位。为此本发明设计写缓存混合粒度调度方法,按照不同的粒度调度和读写写缓存,合理管理写缓存,合并对同一数据的多次写操作。
文件系统提交写数据请求时,使用文件标识和偏移量等,查找写缓存中是否已有对应的写数据项。如未存在对应的写数据项,则将文件系统以块为单位提交的写数据增加到写缓存中;反之替换相应的写数据项。
在增加新的写数据项之前,检查写缓存是否已满,如未满则直接增加新的写数据项;如果已满,则需要淘汰写数据项。在选择出需要淘汰的写数据项之后,为了降低写非易失存储器的数据量,使用基于字节的比较写回方法比较写数据项和原始缓存项,查找写数据项中修改的部分。
所述写缓存混合粒度调度方法具体包括下列步骤:
步骤1,按照文件名和偏移地址查找写缓存中是否存在新数据项;新数据项在写缓存中时转到步骤1.7,否则转到步骤1.2;
步骤2,如果写缓存空间不足,转到步骤3,否则转到步骤6;
步骤3,把当前时刻写缓存中写频率最低的写数据项淘汰出写缓存,使用基于字节的比较写回方法将淘汰的写数据项中修改的部分以字节为单位写回非易失存储器;
步骤4,把所淘汰的写数据项在原始缓存中对应的写数据项从原始缓存中删除;
步骤5,如果写缓存空间仍然不足,转到步骤3;否则转到步骤6;
步骤6,把新数据项写入写缓存;
步骤7,把该写数据项在写缓存中对应的写频率num(num∈N)值加1,当该写数据项为一个新写数据项时设置num值为0;
步骤8,向上层应用报告写数据完成。
本发明中的两个缓存中数据存在相关性,因此独立的管理方法难以满足要求。首先分析写缓存和原始缓存的作用,以及它们之间的关联,设计双缓存协调方法,协调调度写缓存和原始缓存。
写缓存用于暂时保存文件系统提交的写数据,因此写缓存中应该保存最近修改频繁的数据;文件系统缓存的目的是减少写非易失存储器的数据量,因此应该优先淘汰再次修改几率最低的写数据项;此外由于非易失存储器的写速度相比DRAM还有较大差距,因此在再次被修改几率相同的情况下,应该优先淘汰修改量较小的写数据项,并在文件系统写负载较轻时主动淘汰那些修改几率同样较小但修改量较小的写数据项。
在写缓存里的写数据项没有被写回外存前,上层应用读数据时应该先从写缓存中读取数据,这样才能保证读取数据的正确性,而且能提高读取数据的速度;如果需要读取的数据项不在写缓存中,则直接从外存中读取,但是并不影响写缓存的淘汰方法。
所述的双缓存协调方法包括下列步骤:
步骤1,到达检查周期t(t∈N)时;
步骤2,找出写缓存中写频率num值最低的M个写数据项,把这M个写数据项对应的原始数据从外存调入原始缓存,其中M是自然数同时M的值不超过缓存可容纳数据项的个数;
步骤3,把写缓存中所有写数据项的写频率num值减半,即令num=num/2。
原始缓存用来与写缓存中需要淘汰的写数据项进行比较,找出以字节为单位的修改区,并最终只将修改区写回到非易失存储器中;最优情况下原始缓存的内容应与写缓存对应,但这样需要占用较大的缓存空间;在原始缓存较小时,应该保存即将被淘汰的写数据项所对应的原始数据,才能用于在淘汰写数据项时查找出修改的区域,避免读非易失存储器比读DRAM所需更多的时间。
所述的基于字节的比较写回方法包括下列步骤:
步骤1,淘汰写缓存中写频率最低的写数据项;
步骤2,将写数据项与原始缓存中对应的原始缓存项进行比较;
步骤3,找出以字节为单位的修改区域;
步骤4,以字节为单位将修改区域写回到非易失存储器中;
步骤5,把该写数据项和对应的原始数据项从写缓存与原始缓存中删除;
步骤6,比较写回结束。
一种延长非易失外存寿命的方法的外存系统,包括一块DRAM内存和一块非易失存储器,其特征在于:DRAM缓存和非易存储器之间用双向数据线连接。数据进入延长非易失外存寿命的方法的外存系统后,首先进入DRAM缓存,经过延长非易失外存寿命的方法处理后沿写数据线写回非易失存储器。延长非易失外存寿命的方法的外存系统对外提供一根双向数据线和一根电源线。
本发明具有有益效果。本发明针对写缓存和原始缓存的功能和工作特性,引入缓存技术,使用写缓存吸收对同一数据的多次写操作,减少对非易失存储器的写次数;使用原始缓存减少写回非易失存储器的数据量;设计了写缓存混合粒度调度方法、双缓存协调方法和基于字节的比较写回方法,从而减少写非易失存储器的数据量,增加外存系统的使用寿命,降低了工作能耗,同时提高了外存系统的I/O性能。本发明还针对DRAM缓存的易失性设计了缓存空间协调方法,在系统空闲时提前写回写缓存中写频率最低的写数据项,提高系统的整体稳定性。
附图说明
图1是本发明整体结构图;
图2是本发明的工作流程图;
图3是filebench测试本发明写数据量效果图;
图4是postmark测试本发明写数据量效果图;
图5是filebench测试本发明I/O效果图;
图6是postmark测试本发明I/O效果图。
具体实施方式
实施例1
如图1所示,该高速长寿外存系统包括写缓存、原始缓存、非易失存储器介质、写缓存混合粒度调度模块、双缓存协调模块和比较写回模块。各功能模块的说明如表1所示。
表1高速长寿外存系统中各功能模块
实施例2
为了直接和方便地统计外存写数据量,本设计在开源的基于对象存储设备Open-osd的基础上修改OSDTarget模块中的代码。首先使用DRAM模拟非易失存储器构建一定容量的外存系统,同时使用DRAM构建写缓存和原始缓存,并增加一种延长非易失外存寿命的方法,此外统计每次实际写入外存系统的数据量和总数据量,便于分析一种延长非易失外存寿命的方法的性能。
为了减少网络通信对测试I/O性能的影响,使用一台机器搭建测试环境,配有Intel(R)Xeon(R)E56062.13GHz处理器和16G内存。使用postmark和filebench作为测试工具,测试使用一种延长非易失外存寿命的方法前后的外存写数据量和I/O性能。postmark是一款通用的文件系统I/O性能测试工具,用于模拟真实应用程序服务器的负载,同时使用filebench测试将文件系统用于支持email或电子商务等更新数据频繁的应用时写外存的数据量和I/O性能。测试时设置写缓存和原始缓存容量大小的初始比是4:1,每次测试中的I/O数据量和缓存容量比大于50:1。
设写缓存的容量为8M,原始缓存的容量为2M,使用本发明对某一个文件,文件A进行比较写回。本系统的系统主线程和后台检测线程的工作步骤分别如下所示。
系统主线程:
步骤1,按照文件名和偏移地址查找写缓存中是否存在新数据项;新数据项在写缓存中时转到步骤1.7,否则转到步骤1.2;
步骤2,如果写缓存空间不足,转到步骤3,否则转到步骤6;
步骤3,把当前时刻写缓存中写频率最低的写数据项淘汰出写缓存,使用基于字节的比较写回方法将淘汰的写数据项中修改的部分以字节为单位写回非易失存储器;
步骤4,把所淘汰的写数据项在原始缓存中对应的写数据项从原始缓存中删除;
步骤5,如果写缓存空间仍然不足,转到步骤3;否则转到步骤6;
步骤6,把新数据项写入写缓存;
步骤7,把该写数据项在写缓存中对应的写频率num(num∈N)值加1(当该写数据项为一个新写数据项时设置num值为0);
步骤8,向上层应用报告写数据完成。
后台检定期测线程:
步骤1:到达后台检测线程的检查周期t,;
步骤2:找出写缓存中写频率num值最低的M个写数据项,把这M个写数据项对应的原始数据从外存调入原始缓存,其中M是自然数同时M的值不超过缓存可容纳数据项的个数;
步骤3:把写缓存中所有写数据项的写频率num减半,即令num=num/2;
假设外存上文件A的原始内容为”IamapostgraduatestudentofJiangSuuniversity”。文件系统初次更新文件系统的内容为”IamapostgraduatestudentofJiangSuuniversity,Imajorincomputersencise.Ilikeprograming.”,此时写缓存中存在文件A的偏移地址为0的数据,系统会在确保写缓存有足够容量时首先把该写数据项直接写入写缓存;接着文件系统继续写文件A,写入内容变更为”IamapostgraduatestudentofJiangSuuniversity,Imajorinfinanceandeconomics”;最终文件A被文件系统再次更新,最后内容为”IamapostgraduatestudentofJiangSuuniversity,Imajorinfinanceandeconomics,ButIlikeprograming.”,假如此时该写数据项是写缓存中写频率最低的写数据项,则它将被淘汰出写缓存并比较写回外存。
在此之前后台检测线程已经将写缓存中写频率最低的M项数据对应的原始数据调入原始缓存,其中文件A的原始内容为”IamapostgraduatestudentofJiangSuuniversity”。则系统的比较写回过程如表2所示。
表2比较写回结果
原始缓存中的数据项为:IamapostgraduatestudentofJiangSuuniversity.
写缓存中的写数据项为:IamapostgraduatestudentofJiangSuuniversity,Imajorinfinanceandeconomics,ButIlikeprograming.
文件系统三次一共写了287字节的数据,但是最终写回外存的只有55字节。其中写缓存合并了文件系统提交的前两次写操作;而经过基于字节比较写回方法后,最终只写回了两份缓存中的数据项的不同部分,一共55字节。图3、4、5、6是使用filebench和postmark工具测试Open-osd系统使用本设计前后写数据量效果比较图和I/O性能效果比较图。