一种高效利用固态盘缓存的方法和系统的制作方法

文档序号:6518484阅读:345来源:国知局
一种高效利用固态盘缓存的方法和系统的制作方法
【专利摘要】本发明公开了一种高效利用固态盘缓存的方法,包括:将固态盘和机械式磁盘两种不同的设备构造成一个统一的混合逻辑设备,在设备映射层目标设备的内存中初始化一段空间作为“未命中窗口”,在机械式磁盘上设置一个很小的日志区域,用于缓存到达磁盘上的小写请求,将固态盘的缓存空间中划分为多个组,接收来自于用户的请求,并判断该请求是读请求还是写请求,根据读请求对应的访问地址计算该读请求在固态盘的缓存空间中对应的缓存组号,在计算得到的缓存组号对应的缓存组内查找是否存在该读请求对应的数据块。本发明通过“双阈值”法对到达的请求序列进行检测,为用户提供一个透明的高性能、大容量、低功耗的块级设备。
【专利说明】一种高效利用固态盘缓存的方法和系统
【技术领域】
[0001]本发明属于计算机数据存储领域,更具体地,涉及一种高效利用固态盘缓存的方法和系统。
【背景技术】
[0002]固态盘技术的日益成熟在一定程度上为解决计算机系统中的I/O瓶颈问题提供了潜在的解决方案。固态盘在性能,尤其随机访问性能,能耗等方面都要远远优于机械式磁盘。其数据访问所需要的操作时间往往只需要几十微秒(TS),比机械式磁盘的毫秒(ms)级访问时间要快一到两个数量级。而且固态盘内能耗也远远小于机械式磁盘的能耗。
[0003]固态盘已经被用于构建一些高性能计算环境下的存储系统。然而固态盘也有其使用上的缺陷和限制。它的随机写性能,尤其是随机小写性能,在某些情况下甚至比机械式磁盘的性能还要差。它的总体性能会随着使用时间而不断地下降,而且只具有有限的擦写次数寿命,价格也比机械式磁盘高出许多。因此从容量、长期可靠性、成本角度考虑,完全基于固态盘构建大规模存储系统在目前的技术条件下将不能获得最优的性价比。

【发明内容】

[0004]针对现有技术的以上缺陷或改进需求,本发明提供了一种高效利用固态盘缓存的方法和系统,其目的在于通过将固态盘和机械式磁盘两种不同的设备构造成一个统一的设备映射层目标设备,以机械式磁盘的成本获得固态盘级的性能,在性能和成本之间找到一个最优的平衡点。
[0005]为实现上述目的,按照本发明的一个方面,提供了高效利用固态盘缓存的方法,包括以下步骤:
[0006](I)构造一个由固态盘和机械式磁盘混合组成的设备映射层目标设备,在设备映射层目标设备的内存中初始化一段空间作为“未命中窗口”,用于存放读操作未命中记录项,在机械式磁盘上设置一个日志区域;
[0007](2)将固态盘的缓存空间中划分为多个组,分组的数量NS为存储空间中数据块的总数除以2N,其中N为8至10之间的正整数;
[0008](3)接收来自于用户的请求,并判断该请求是读请求还是写请求,如果是读请求,则进入步骤(4),如果是写请求,则进入步骤(11);
[0009](4)根据读请求对应的访问地址计算该读请求在固态盘的缓存空间中对应的缓存组号set= (dbn/B/2N) %NS,其中,dbn表示读请求对应的访问地址扇区号,B表示固态盘的每个数据块包含的扇区个数;
[0010](5)在计算得到的缓存组号对应的缓存组内查找是否存在该读请求对应的数据块,若存在对应的数据块,则转步骤(6),否则转步骤(7);
[0011](6)直接从固态盘上读取数据,然后过程结束;
[0012](7)检查固态盘的缓存空间中是否存在与该读请求对应的地址空间重合的数据块,若存在则转步骤(8),否则转步骤(9)。
[0013](8)将重合的数据块同步写回机械式磁盘,从该机械式磁盘中读取该读请求对应的地址空间中的数据,然后过程结束;
[0014](9)从该机械式磁盘中读取该读请求对应的地址空间中的数据,并将读操作未命中的记录项添加到“未命中窗口”中;
[0015](10)判断未命中窗口中读操作未命中的次数是否达到一阈值,若达到,则将该记录项对应的数据块从机械式磁盘迁移到固态盘对应组内,否则过程结束;
[0016](11)将写请求的大小与低阈值Thresholdlow和高阈值Thresholdhigh进行比较,若其小于低阈值Thresholdlow,则转步骤(12),若大于低阈值Thresholdlow但小于高阈值Thresholdhigh,则表示写操作命中,然后转步骤(15),若大于高阈值Thresholdhigh,则表示写操作未命中,然后转步骤(18);
[0017](12)判断磁盘上日志区域的剩余空间是否大于该小写请求所需要的空间,若大于则转步骤(13),否则转步骤(14);
[0018](13)将该写请求的内容写入到机械式磁盘上的日志区域,过程结束;
[0019](14)将机械式磁盘上的日志区域上缓存的数据块全部写回机械式磁盘,返回步骤(13);
[0020](15)根据写请求对应的访问地址计算该写请求在固态盘的缓存空间中对应的缓存组号,并判断该缓存组内的剩余空间是否大于写请求所需要的空间,若大于则转步骤
(16),否则转步骤(17);
[0021](16)将写请求对应的数据块写入计算得到的缓存组号对应的缓存组内的剩余缓冲空间中,然后过程结束;
[0022](17)根据缓存替换算法将该缓存组中最近未被访问的数据块写回机械式磁盘,并释放该数据块在缓存空间中占用的空间,然后返回步骤(14);
[0023](18)检查固态盘的缓存空间以及机械式磁盘上的日志区域中是否存在与该写请求对应的地址空间重合的数据块,若存在则转步骤(19),否则转步骤(20);
[0024](19)将重合的数据块同步写回机械式磁盘,将该写请求对应的数据写入机械式磁盘中,然后过程结束;
[0025](20)将该写请求对应的数据写入机械式磁盘中,然后过程结束。
[0026]优选地,低阈值Thresholdlow的取值范围是I至6之间的整数,高阈值Thresholdhigh的取值范围是6至10之间的整数
[0027]优选地,日志区域为机械式磁盘空间大小的5%至10%,并用于缓存到达磁盘上的小写请求,其中当写请求的大小小于低阈值Thresholdlow时,该写请求是小写请求,当写请求的大小大于高阈值Thresholdhigh时,该写请求是大写请求。
[0028]优选地,步骤(9)中的记录项中包括该读操作对应的数据块的地址和未命中的次数。
[0029]优选地,缓存替换算法为LRU或FIFO算法。
[0030]按照本发明的另一个方面,提供了一种高效利用固态盘缓存的系统,包括:
[0031]第一模块,用于构造一个由固态盘和机械式磁盘混合组成的设备映射层目标设备,在设备映射层目标设备的内存中初始化一段空间作为“未命中窗口”,用于存放读操作未命中记录项,在机械式磁盘上设置一个日志区域;
[0032]第二模块,用于将固态盘的缓存空间中划分为多个组,分组的数量NS为存储空间中数据块的总数除以2N,其中N为8至10之间的正整数;
[0033]第三模块,用于接收来自于用户的请求,并判断该请求是读请求还是写请求,如果是读请求,则进入第四模块,如果是写请求,则进入第十一模块;
[0034]第四模块,用于根据读请求对应的访问地址计算该读请求在固态盘的缓存空间中对应的缓存组号set= (dbn/B/2N)%NS,其中,dbn表示读请求对应的访问地址扇区号,B表示固态盘的每个数据块包含的扇区个数;
[0035]第五模块,用于在计算得到的缓存组号对应的缓存组内查找是否存在该读请求对应的数据块,若存在对应的数据块,则转第六模块,否则转第七模块;
[0036]第六模块,用于直接从固态盘上读取数据,然后过程结束;
[0037]第七模块,用于检查固态盘的缓存空间中是否存在与该读请求对应的地址空间重合的数据块,若存在则转第八模块,否则转第九模块。
[0038]第八模块,用于将重合的数据块同步写回机械式磁盘,从该机械式磁盘中读取该读请求对应的地址空间中的数据,然后过程结束;
[0039]第九模块,用于从该机械式磁盘中读取该读请求对应的地址空间中的数据,并将读操作未命中的记录项添加到“未命中窗口”中;
[0040]第十模块,用于判断未命中窗口中读操作未命中的次数是否达到一阈值,若达到,则将该记录项对应的数据块从机械式磁盘迁移到固态盘对应组内,否则过程结束;
[0041]第H 模块,用于将写请求的大小与低阈值Thresholdlow和高阈值Thresholdhigh进行比较,若其小于低阈值Thresholdlow,则转第十二模块,若大于低阈值Thresholdlow但小于高阈值Thresholdhigh,则表不写操作命中,然后转第十五模块,若大于高阈值Thresholdhigh,则表示写操作未命中,然后转第十八模块;
[0042]第十二模块,用于判断磁盘上日志区域的剩余空间是否大于该小写请求所需要的空间,若大于则转第十三模块,否则转第十四模块;
[0043]第十三模块,用于将该写请求的内容写入到机械式磁盘上的日志区域,过程结束;
[0044]第十四模块,用于将机械式磁盘上的日志区域上缓存的数据块全部写回机械式磁盘,返回第十三模块;
[0045]第十五模块,用于根据写请求对应的访问地址计算该写请求在固态盘的缓存空间中对应的缓存组号,并判断该缓存组内的剩余空间是否大于写请求所需要的空间,若大于则转第十六模块,否则转第十七模块;
[0046]第十六模块,用于将写请求对应的数据块写入计算得到的缓存组号对应的缓存组内的剩余缓冲空间中,然后过程结束;
[0047]第十七模块,用于根据缓存替换算法将该缓存组中最近未被访问的数据块写回机械式磁盘,并释放该数据块在缓存空间中占用的空间,然后返回第十四模块;
[0048]第十八模块,用于检查固态盘的缓存空间以及机械式磁盘上的日志区域中是否存在与该写请求对应的地址空间重合的数据块,若存在则转第十九模块,否则转第二十模块;[0049]第十九模块,用于将重合的数据块同步写回机械式磁盘,将该写请求对应的数据写入机械式磁盘中,然后过程结束;
[0050]第二十模块,用于将该写请求对应的数据写入机械式磁盘中,然后过程结束。
[0051]总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
[0052]1、由于采用了步骤(I)、步骤(2)、步骤(6)、步骤(11)、步骤(2)和步骤(16),固态盘被用作机械磁盘的缓存层,根据访问特征动态地存储部分内容以提高系统整体性能,以机械式磁盘的成本获得固态盘级的性能,在性能和成本之间找到一个最优的平衡点;
[0053]2、由于采用了步骤(2)、步骤(4)、步骤(5)和步骤(15),采用分组的缓存管理策略,将一定数量(如512)的块组合成一个组(set),将所有的数据块划分成若干个组,提高固态盘的缓存效率;
[0054]3、由于采用了步骤(I)、步骤(9)和步骤(10),把多次未命中的数据块从机械式磁盘中迁移到固态盘缓存中,从而增大数据块读请求缓存命中率,提升固态盘缓存效果,进一步提升整个系统的存储性能;
[0055]4、由于采用了步骤(I)、步骤(12 )、步骤(13 )和步骤(14 ),通过“双阈值”法对到达的请求序列进行检测,将太大和太小的连续写请求从缓存层过滤掉,而直接将它们分派到磁盘上,有效减缓了固态盘随机小写性能差以及由此引起的寿命问题;
[0056]5、由于采用了步骤(I)、步骤(12)、步骤(18)、步骤(19)和步骤(20),直接将“大请求”对应的数据块写到磁盘上,充分利用了磁盘的良好顺序访问性能,而且可以增加固态盘的有效缓存空间。
【专利附图】

【附图说明】
[0057]图1是本发明高效利用固态盘缓存的方法的流程图。
【具体实施方式】
[0058]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0059]以下首先对本发明中的技术术语进行解释和说明。
[0060]设备映射层(device-mapper):Linux内核提供的一种块层中间件,通过它可以在请求到达目标物理设备之前对I/O其进行各种操作,如克隆、过滤、重定向、转发等。设备映射层的主要功能是将多个实际的物理磁盘抽象成一个统一的逻辑设备对外提供服务,而在内部可以实现原来物理设备所不具有的属性或操作设备映射层是一个非常灵活的框架,可以根据需求定义实现各种不同功能;
[0061]下面将结合本发明实施实例中的附图,对本发明实例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明的一部分实例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0062]本发明的总体思路是利用设备映射层的抽象映射机制,将固态盘和机械式磁盘两种不同的设备构造成一个统一的混合逻辑设备,构造一个由固态盘和机械式磁盘混合组成的设备映射层目标设备类型flashcache。固态盘被用作机械磁盘的缓存层,根据访问特征动态地存储部分内容以提高系统整体性能。固态盘和机械磁盘的存储空间都被划分为固定的块大小,并以块为单位进行缓存和替换。块大小值是一个用户可以配置的参数,在目标设备创建时由用户传递给目标设备,通常是4KB。针对固态盘随机小写性能差以及由此引起的寿命问题,通过“双阈值”法对到达的请求序列进行检测,将太大和太小的连续写请求从缓存层过滤掉,而直接将它们分派到磁盘上。为了提高固态盘的缓存效率,采用分组的缓存管理策略,将一定数量(如512)的块组合成一个组(set),将所有的数据块划分成若干个组。请求到达时,先根据其所访问的地址按哈希算法找到其对应的组,然后再在该组内查找其对应的块。I/O请求到对应的组采用组相联策略,组内块采用全相联策略。总体上来说,将固态盘和机械磁盘抽象组合在一起,为用户提供一个透明的高性能、大容量、低功耗的块级设备。
[0063]如图1所示,本发明高效利用固态盘缓存的方法包括以下步骤:
[0064](I)将固态盘和机械式磁盘两种不同的设备构造成一个统一的混合逻辑设备,即构造一个由固态盘和机械式磁盘混合组成的设备映射层目标设备(Flashcache),在设备映射层目标设备的内存中初始化一段空间作为“未命中窗口”,用于存放读操作未命中记录项,在机械式磁盘上设置一个很小的日志区域(其为机械式磁盘空间大小的5%至10%),用于缓存到达磁盘上的小写请求;当写请求的大小小于低阈值Thresholdlow时,该写请求是小写请求,当写请求的大小大于高阈值Thresholdhigh时,该写请求是大写请求,低阈值Thresholdlow的取值范围是I至6之间的整数,高阈值Thresholdhigh的取值范围是6至10之间的整数;
[0065]本步骤的优点在于,固态盘被用作机械磁盘的缓存层,根据访问特征动态地存储部分内容以提高系统整体性能,以机械式磁盘的成本获得固态盘级的性能,在性能和成本之间找到一个最优的平衡点;
[0066](2)将固态盘的缓存空间中划分为多个组,分组的数量NS为存储空间中数据块的总数除以2N,其中N为8至10之间的正整数;
[0067]本步骤的优点在于,采用分组的缓存管理策略,将一定数量(如512)的块组合成一个组(set ),将所有的数据块划分成若干个组,提高固态盘的缓存效率;
[0068](3)接收来自于用户的请求,并判断该请求是读请求还是写请求,如果是读请求,则进入步骤(4),如果是写请求,则进入步骤(11);
[0069](4)根据读请求对应的访问地址计算该读请求在固态盘的缓存空间中对应的缓存组号(set),数据块组号set= (dbn/B/2N)%NS,其中,读请求对应的访问地址扇区号是dbn,固态盘的每个数据块包含B个扇区;
[0070](5)在计算得到的缓存组号对应的缓存组内查找是否存在该读请求对应的数据块,若存在对应的数据块,则说明读操作命中,然后转步骤(6),否则说明该读请求未命中,然后转步骤(7);
[0071](6)直接从固态盘上读取数据,然后过程结束;
[0072](7)检查固态盘的缓存空间中是否存在与该读请求对应的地址空间重合的数据块,若存在则转步骤(8),否则转步骤(9)。
[0073](8)将重合的数据块同步写回机械式磁盘,从该机械式磁盘中读取该读请求对应的地址空间中的数据,然后过程结束;
[0074](9)从该机械式磁盘中读取该读请求对应的地址空间中的数据,并将读操作未命中的记录项添加到“未命中窗口”中;该记录项中包括该读操作对应的数据块的地址和未命中的次数;
[0075](10)判断未命中窗口中读操作未命中的次数是否达到一阈值,若达到,则将该记录项对应的数据块从机械式磁盘迁移到固态盘对应组内,否则过程结束;阈值的取值范围是5至10次;
[0076]本步骤的优点在于,把多次未命中的数据块从机械式磁盘中迁移到固态盘缓存中,从而增大数据块读请求缓存命中率,提升固态盘缓存效果,进一步提升整个系统的存储性能;
[0077](11)将写请求的大小与低阈值Thresholdlow和高阈值Thresholdhigh进行比较,若其小于低阈值Thresholdlow,则转步骤(12),若大于低阈值Thresholdlow但小于高阈值Thresholdhigh,则表示写操作命中,然后转步骤(15),若大于高阈值Thresholdhigh,则表示写操作未命中,然后转步骤(18);
[0078]本步骤的优点在于,通过“双阈值”法对到达的请求序列进行检测,将太大和太小的连续写请求从缓存层过滤掉,而直接将它们分派到磁盘上,有效减缓了固态盘随机小写性能差以及由此引起的寿命问题。
[0079](12)判断磁盘上日志区域的剩余空间是否大于该小写请求所需要的空间,若大于则转步骤(13),否则转步骤(14);
[0080](13)将该写请求的内容写入到机械式磁盘上的日志区域,过程结束;
[0081](14)将机械式磁盘上的日志区域上缓存的数据块全部写回机械式磁盘,返回步骤
(13);
[0082](15)根据写请求对应的访问地址计算该写请求在固态盘的缓存空间中对应的缓存组号(set),并判断该缓存组内的剩余空间是否大于写请求所需要的空间,若大于则转步骤(16),否则转步骤(17);具体而言,计算缓存组号的方法与步骤(4)相同,在此不再赘述;
[0083](16)将写请求对应的数据块写入计算得到的缓存组号对应的缓存组内的剩余缓冲空间中,然后过程结束;
[0084](17)根据缓存替换算法将该缓存组中最近未被访问的数据块写回机械式磁盘,并释放该数据块在缓存空间中占用的空间,然后返回步骤(14);具体而言,缓存替换算法为最近最少使用算法(Least Recently Used,简称LRU)、先入先出算法(First In First Out,简称FIFO)等。
[0085](18)检查固态盘的缓存空间以及机械式磁盘上的日志区域中是否存在与该写请求对应的地址空间重合的数据块,若存在则转步骤(19),否则转步骤(20);
[0086]本步骤的优点在于,直接将“大请求”对应的数据块写到磁盘上,充分利用了磁盘的良好顺序访问性能,而且可以增加固态盘的有效缓存空间;
[0087](19)将重合的数据块同步写回机械式磁盘,将该写请求对应的数据写入机械式磁盘中,然后过程结束;[0088](20)将该写请求对应的数据写入机械式磁盘中,然后过程结束;
[0089]本发明提出一种高效利用固态盘缓存的方法,把固态盘作为以缓存层工作在机械式磁盘之上,利用设备映射层的抽象机制,将固态盘和机械式磁盘两种不同的设备构造成一个统一的混合逻辑设备。本发明选择性地将最合适的请求缓存在固态盘上,既考虑到利用固态盘来提升系统整体性能,同时还考虑到延长固态盘的使用时间,在性能和寿命之间选择一个折衷的权衡点。将到达的大写请求和小写请求从缓存中过滤掉,而直接将其发送到磁盘上,目的在于既利用磁盘良好的顺序访问性能,又减少固态盘上的随机小写请求,从而延长固态盘的使用寿命。同时,为了减少磁盘上的随机寻道操作,在磁盘上设置一个很小的日志区域,用于缓存到达磁盘上的小写请求。
[0090]本发明一种高效利用固态盘缓存的系统包括:
[0091]第一模块,将固态盘和机械式磁盘两种不同的设备构造成一个统一的混合逻辑设备,即构造一个由固态盘和机械式磁盘混合组成的设备映射层目标设备(Flashcache),在设备映射层目标设备的内存中初始化一段空间作为“未命中窗口 ”,用于存放读操作未命中记录项,在机械式磁盘上设置一个很小的日志区域(其为机械式磁盘空间大小的5%至10%),用于缓存到达磁盘上的小写请求;当写请求的大小小于低阈值Thresholdlow时,该写请求是小写请求,当写请求的大小大于高阈值Thresholdhigh时,该写请求是大写请求,低阈值Thresholdlow的取值范围是I至6之间的整数,高阈值Thresholdhigh的取值范围是6至10之间的整数;
[0092]第二模块,将固态盘的缓存空间中划分为多个组,分组的数量NS为存储空间中数据块的总数除以2N,其中N为8至10之间的正整数;
[0093]第三模块,接收来自于用户的请求,并判断该请求是读请求还是写请求,如果是读请求,则进入第四模块,如果是写请求,则进入第十模块;
[0094]第四模块,根据读请求对应的访问地址计算该读请求在固态盘的缓存空间中对应的缓存组号(set),数据块组号set= (dbn/B/2N)%NS,其中,读请求对应的访问地址扇区号是dbn,固态盘的每个数据块包含B个扇区;
[0095]第五模块,在计算得到的缓存组号对应的缓存组内查找是否存在该读请求对应的数据块,若存在对应的数据块,则说明读操作命中,然后转入第六模块,否则说明该读请求未命中,然后转入第七模块;
[0096]第六模块,直接从固态盘上读取数据,然后过程结束;
[0097]第七模块,检查固态盘的缓存空间中是否存在与该读请求对应的地址空间重合的数据块,若存在则转入第八模块,否则转入第九模块。
[0098]第八模块,将重合的数据块同步写回机械式磁盘,从该机械式磁盘中读取该读请求对应的地址空间中的数据,然后过程结束;
[0099]第九模块,从该机械式磁盘中读取该读请求对应的地址空间中的数据,并将读操作未命中的记录项添加到“未命中窗口”中;该记录项中包括该读操作对应的数据块的地址和未命中的次数;
[0100]第十模块,判断未命中窗口中读操作未命中的次数是否达到一阈值,若达到,则将该记录项对应的数据块从机械式磁盘迁移到固态盘对应组内,否则过程结束;阈值的取值范围是5至10次;[0101]第十一模块将写请求的大小与低阈值Thresholdlow和高阈值Thresholdhigh进行比较,若其小于低阈值Thresholdlow,则转入第十二模块,若大于低阈值Thresholdlow但小于高阈值Thresholdhigh,则表示写操作命中,转入第十五模块,若大于高阈值Thresholdhigh,则表示写操作未命中,然后转入第十八模块;
[0102]第十二模块,判断磁盘上日志区域的剩余空间是否大于该小写请求所需要的空间,若大于则转入第十三模块,否则转入第十四模块;
[0103]第十三模块,将该写请求的内容写入到机械式磁盘上的日志区域,过程结束;
[0104]第十四模块,将机械式磁盘上的日志区域上缓存的数据块全部写回机械式磁盘,转入第十三模块;
[0105]第十五模块,根据写请求对应的访问地址计算该写请求在固态盘的缓存空间中对应的缓存组号(set),并判断该缓存组内的剩余空间是否大于写请求所需要的空间,若大于则转入第十六模块,否则转入第十七模块;
[0106]第十六模块,将写请求对应的数据块写入计算得到的缓存组号对应的缓存组内的剩余缓冲空间中,然后过程结束;
[0107]第十七模块,根据缓存替换算法将该缓存组中最近未被访问的数据块写回机械式磁盘,并释放该数据块在缓存空间中占用的空间,然后转入第十四模块;
[0108]第十八模块,检查固态盘的缓存空间以及机械式磁盘上的日志区域中是否存在与该写请求对应的地址空间重合的数据块,若存在则转入第十九模块,否则转入第二十模块;
[0109]第十九模块,将重合的数据块同步写回机械式磁盘,将该写请求对应的数据写入机械式磁盘中,然后过程结束;
[0110]第二十模块,将该写请求对应的数据写入机械式磁盘中,然后过程结束。
[0111]本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种高效利用固态盘缓存的方法,其特征在于,包括以下步骤: (1)构造一个由固态盘和机械式磁盘混合组成的设备映射层目标设备,在设备映射层目标设备的内存中初始化一段空间作为“未命中窗口”,用于存放读操作未命中记录项,在机械式磁盘上设置一个日志区域; (2)将固态盘的缓存空间中划分为多个组,分组的数量NS为存储空间中数据块的总数除以2N,其中N为8至10之间的正整数; (3)接收来自于用户的请求,并判断该请求是读请求还是写请求,如果是读请求,则进入步骤(4),如果是写请求,则进入步骤(11); (4)根据读请求对应的访问地址计算该读请求在固态盘的缓存空间中对应的缓存组号set= (dbn/B/2N) %NS,其中,dbn表示读请求对应的访问地址扇区号,B表示固态盘的每个数据块包含的扇区个数; (5)在计算得到的缓存组号对应的缓存组内查找是否存在该读请求对应的数据块,若存在对应的数据块,则转步骤(6),否则转步骤(7); (6)直接从固态盘上读取数据,然后过程结束; (7)检查固态盘的缓存空间中是否存在与该读请求对应的地址空间重合的数据块,若存在则转步骤(8 ),否则转步骤(9 )。 (8)将重合的数据块同步写回机械式磁盘,从该机械式磁盘中读取该读请求对应的地址空间中的数据,然后过 程结束; (9)从该机械式磁盘中读取该读请求对应的地址空间中的数据,并将读操作未命中的记录项添加到“未命中窗口”中; (10)判断未命中窗口中读操作未命中的次数是否达到一阈值,若达到,则将该记录项对应的数据块从机械式磁盘迁移到固态盘对应组内,否则过程结束; (11)将写请求的大小与低阈值Thresholdlow和高阈值Thresholdhigh进行比较,若其小于低阈值Thresholdlow,则转步骤(12),若大于低阈值Thresholdlow但小于高阈值Thresholdhigh,则表示写操作命中,然后转步骤(15),若大于高阈值Thresholdhigh,则表示写操作未命中,然后转步骤(18); (12)判断磁盘上日志区域的剩余空间是否大于该小写请求所需要的空间,若大于则转步骤(13),否则转步骤(14); (13)将该写请求的内容写入到机械式磁盘上的日志区域,过程结束; (14)将机械式磁盘上的日志区域上缓存的数据块全部写回机械式磁盘,返回步骤(13); (15)根据写请求对应的访问地址计算该写请求在固态盘的缓存空间中对应的缓存组号,并判断该缓存组内的剩余空间是否大于写请求所需要的空间,若大于则转步骤(16),否则转步骤(17); (16)将写请求对应的数据块写入计算得到的缓存组号对应的缓存组内的剩余缓冲空间中,然后过程结束; (17)根据缓存替换算法将该缓存组中最近未被访问的数据块写回机械式磁盘,并释放该数据块在缓存空间中占用的空间,然后返回步骤(14); (18)检查固态盘的缓存空间以及机械式磁盘上的日志区域中是否存在与该写请求对应的地址空间重合的数据块,若存在则转步骤(19),否则转步骤(20); (19)将重合的数据块同步写回机械式磁盘,将该写请求对应的数据写入机械式磁盘中,然后过程结束; (20)将该写请求对应的数据写入机械式磁盘中,然后过程结束。
2.根据权利要求1所述的高效利用固态盘缓存的方法,其特征在于,低阈值Thresholdlow的取值范围是I至6之间的整数,高阈值Thresholdhigh的取值范围是6至10之间的整数。
3.根据权利要求1或2所述的高效利用固态盘缓存的方法,其特征在于,日志区域为机械式磁盘空间大小的5%至10%,并用于缓存到达磁盘上的小写请求,其中当写请求的大小小于低阈值Thresholdlow时,该写请求是小写请求,当写请求的大小大于高阈值Thresholdhigh时,该写请求是大写请求。
4.根据权利要求1所述的高效利用固态盘缓存的方法,其特征在于,步骤(9)中的记录项中包括该读操作对应的数据块的地址和未命中的次数。
5.根据权利要求1所述的高效利用固态盘缓存的方法,其特征在于,缓存替换算法为LRU或FIFO算法。
6.一种高效利用固态盘缓存的系统,其特征在于,包括: 第一模块,用于构造一个由固态盘和机械式磁盘混合组成的设备映射层目标设备,在设备映射层目标设备的内存中初始化一段空间作为“未命中窗口”,用于存放读操作未命中记录项,在机械式磁盘上设置一个日志区域;` 第二模块,用于将固态盘的缓存空间中划分为多个组,分组的数量NS为存储空间中数据块的总数除以2N,其中N为8至10之间的正整数; 第三模块,用于接收来自于用户的请求,并判断该请求是读请求还是写请求,如果是读请求,则进入第四模块,如果是写请求,则进入第十一模块; 第四模块,用于根据读请求对应的访问地址计算该读请求在固态盘的缓存空间中对应的缓存组号set= (dbn/B/2N) %NS,其中,dbn表示读请求对应的访问地址扇区号,B表示固态盘的每个数据块包含的扇区个数; 第五模块,用于在计算得到的缓存组号对应的缓存组内查找是否存在该读请求对应的数据块,若存在对应的数据块,则转第六模块,否则转第七模块; 第六模块,用于直接从固态盘上读取数据,然后过程结束; 第七模块,用于检查固态盘的缓存空间中是否存在与该读请求对应的地址空间重合的数据块,若存在则转第八模块,否则转第九模块。 第八模块,用于将重合的数据块同步写回机械式磁盘,从该机械式磁盘中读取该读请求对应的地址空间中的数据,然后过程结束; 第九模块,用于从该机械式磁盘中读取该读请求对应的地址空间中的数据,并将读操作未命中的记录项添加到“未命中窗口”中; 第十模块,用于判断未命中窗口中读操作未命中的次数是否达到一阈值,若达到,则将该记录项对应的数据块从机械式磁盘迁移到固态盘对应组内,否则过程结束; 第^ 模块,用于将写请求的大小与低阈值Thresholdlow和高阈值Thresholdhigh进行比较,若其小于低阈值Thresholdlow,则转第十二模块,若大于低阈值Thresholdlow但小于高阈值Thresholdhigh,则表示写操作命中,然后转第十五模块,若大于高阈值Thresholdhigh,则表示写操作未命中,然后转第十八模块; 第十二模块,用于判断磁盘上日志区域的剩余空间是否大于该小写请求所需要的空间,若大于则转第十三模块,否则转第十四模块; 第十三模块,用于将该写请求的内容写入到机械式磁盘上的日志区域,过程结束; 第十四模块,用于将机械式磁盘上的日志区域上缓存的数据块全部写回机械式磁盘,返回第十三模块; 第十五模块,用于根据写请求对应的访问地址计算该写请求在固态盘的缓存空间中对应的缓存组号,并判断该缓存组内的剩余空间是否大于写请求所需要的空间,若大于则转第十六模块,否则转第十七模块; 第十六模块,用于将写请求对应的数据块写入计算得到的缓存组号对应的缓存组内的剩余缓冲空间中,然后过程结束; 第十七模块,用于根据缓存替换算法将该缓存组中最近未被访问的数据块写回机械式磁盘,并释放该数据块在缓存空间中占用的空间,然后返回第十四模块; 第十八模块,用于检查固态盘的缓存空间以及机械式磁盘上的日志区域中是否存在与该写请求对应的地址空间重合的数据块,若存在则转第十九模块,否则转第二十模块; 第十九模块,用于将重合的数据块同步写回机械式磁盘,将该写请求对应的数据写入机械式磁盘中,然后过程结束; 第二十模块,用于将该写请求对应的数据写入机械式磁盘中,然后过程结束。
【文档编号】G06F12/08GK103678169SQ201310554993
【公开日】2014年3月26日 申请日期:2013年11月11日 优先权日:2013年11月11日
【发明者】周可, 李春花, 万广平, 王桦, 黄平 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1