本发明涉及存储系统领域,特别涉及一种flashcache混合存储系统的缓存调度方法及系统。
背景技术:
随着互联网行业的迅速发展,云计算、大数据等技术的兴起让存储系统的处理速度变得越来越重要。机械硬盘(harddiskdrive,hdd)是目前大容量存储的主要方式,其容量可以不断的增大,但处理速度却难以增长,这成为制约存储系统速度提高的重要因素。固态硬盘(solidstatedrives,ssd)由固态电子存储芯片阵列而制成,非常适合处理大量的读写访问,但其价格昂贵,寿命有限,因此,基于机械硬盘和固态硬盘这两种存储介质的数据混合存储方案应运而生。
目前,一种主存-固态硬盘-机械硬盘的混合存储结构为其中一种混合存储方案的应用,该混合存储结构中,固态硬盘作为机械硬盘的缓存,flashcache混合存储系统便是这种混合存储结构,flashcache是基于linux设备映射层框架之上的内核模块,用于接受来自上层下发的读写操作(i/o)请求,并根据请求将热数据调度到固态硬盘作为缓存,进而实现机械硬盘的读写。
在flashcache混合存储系统中,主要采用lru(leastrecentused,近期最少使用)算法,将近期最少使用的数据替换出缓存,从而把热数据保存在缓存中,加速数据的处理速度。lru算法能够较好的保护热数据,然而,在实际应用中,尤其是大量数据的读写时,一次读写的数据会将缓存中的热数据替换出来,造成较多的随机小写,增加了随机的无效块及垃圾块的回收难度,带来更多的写入放大。
技术实现要素:
有鉴于此,本发明的目的在于提供一种flashcache混合存储系统的缓存调度方法及系统,保护热数据和提高命中率,同时减少随机小写的产生。
为实现上述目的,本发明有如下技术方案:
一种flashcache混合存储系统的缓存调度方法,包括:
根据硬盘读写操作请求中的磁盘块号,判断数据是否已缓存在的缓存块中;
若否,则将数据缓存至缓存块中并将对应的元数据结构链接到非热读链表,以及将元数据结构中的热度标志设置为第一热度值;
若是,则判断缓存块对应的元数据结构中的热度标志的值是否不小于第二热度值,若小于,则将热度标志的值增加预定数值,且当热度标志的值等于第二热度值时,将此缓存块对应的元数据结构从非热读链表断开并链接到热读链表,并判断热读链表的长度是否大于长度阈值,若大于,则按照lru算法,将热读链表的一个缓存块对应的元数据结构中的热度标志的第二热度值减少预定数值,从热读链表断开,并将此缓存块对应的元数据结构链接到非热读链表;
在将数据缓存至缓存块中时,若无空闲缓存块,将非热读链表中的至少部分元数据结构对应的缓存块进行回收。
可选的,在将热度标志的值增加预定数值的步骤包括:若热度标志为第一热度值,则将第一热度值增加预定数值后变为中间热读值,若热度标志为中间热读值,则将中间热度值增加预定数值后变为第二热度值;则,
将热读链表的一个缓存块对应的元数据结构中的热度标志的第二热度值减少预定数值的步骤包括:
将热读链表的一个缓存块对应的元数据结构中的热度标志的第二热度值减少预定数值后变为中间热度值。
可选的,非热读链表和热读链表为lru链表。
可选的,将非热读链表中的至少部分元数据结构对应的缓存块进行回收的步骤包括:
将非热读链表中元数据结构中的热度标志为第一热度值的缓存块部分或全部回收。
此外,本发明还提供了一种flashcache混合存储系统的缓存调度系统,包括:
缓存块命中判断单元,用于根据硬盘读写操作请求中的磁盘块号,判断数据是否已缓存在的缓存块中;
缓存单元,用于在数据没有缓存在缓存块中时,将数据缓存至缓存块中并将对应的元数据结构连接到非热读链表,,并将缓存块对应的元数据结构中的热度标志设置为第一热度值;
缓存调度单元,用于在数据已缓存在缓存块中时,判断缓存块对应的元数据结构中的热度标志的值是否不小于第二热度值,若小于,则将热度标志的值增加预定数值,且当热度标志的值等于第二热度值时,将此缓存块对应的元数据结构从非热读链表断开并链接到热读链表,并判断热读链表的长度是否大于长度阈值,若大于,则按照lru算法,将热读链表的一个缓存块对应的元数据结构中的热度标志的第二热度值减少预定数值,从热读链表断开,并将此缓存块对应的元数据结构链接到非热读链表;
回收单元,用于在将数据缓存至缓存块中时,若无空闲缓存块,将非热读链表中的至少部分元数据结构对应的缓存块进行回收。
可选的,缓存调度单元中,若热度标志为第一热度值,则将第一热度值增加预定数值后变为中间热读值,若热度标志为中间热读值,则将中间热度值增加预定数值后变为第二热度值;则,
缓存调度单元中,将热读链表的一个缓存块对应的元数据结构中的热度标志的第二热度值减少预定数值后变为中间热度值。
可选的,非热读链表和热读链表为lru链表。
可选的,回收单元中,将非热读链表中元数据结构中的热度标志为第一热度值的缓存块部分或全部回收。
本发明实施例提供的flashcache混合存储系统的缓存调度方法及系统,在 进行缓存时,按照读写请求命中缓存块中数据的频率来设置缓存块的热度标志的数值,并按照热度标志的数值将缓存块链接为热读链表和非热读链表,在进行缓存块回收的时候,可以从非热读链表中的缓存块进行回收。这样,由于做了热读区分,可以较好的保护了热数据,而在缓存块回收时,是回收的非热度数据,这些数据为从热读链表中淘汰的数据或在非热读链表中存在一段时间的命中次数少的数据,不会存在缓存块刚进入非热读链表就被替换出缓存的情况,保证了命中率,同时减少了随机小写的产生,提高了混合存储系统的读写性能,并在一定程度上保护了缓存硬盘的寿命。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了根据本发明实施例的flashcache混合存储系统的缓存调度方法的流程图;
图2示出了本发明实施例的混合存储系统中固态硬盘与机械硬盘的映射关系示意图;
图3示出了本发明实施例的混合存储系统中固态硬盘的缓存数据布局结构示意图;
图4示出了本发明实施例的缓存调度方法中热读链表与非热读链表的交互示意图;
图5示出了根据flashcache混合存储系统的缓存调度系统的结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
本发明提出了一种flashcache混合存储系统的缓存调度方法,参考图1所示,该方法包括:
根据硬盘读写操作请求中的磁盘块号,判断数据是否已缓存在的缓存块中;
若否,则将数据缓存至缓存块中并其将对应的元数据结构链接到非热读链表,以及将缓存块对应的元数据结构中的热度标志设置为第一热度值;
若是,则判断缓存块对应的元数据结构中的热度标志的值是否不小于第二热度值,若小于,则将热度标志的值增加预定数值,且当热度标志的值等于第二热度值时,将此缓存块对应的元数据结构从非热读链表断开并链接到热读链表,并判断热读链表的长度是否大于长度阈值,若大于,则按照lru算法,将热读链表的一个缓存块对应的元数据结构中的热度标志的第二热度值减少预定数值,并从将热读链表断开,并将此缓存块对应的元数据结构链接到非热读链表;
在将数据缓存至缓存块中时,若无空闲缓存块,将非热读链表中的至少部分元数据结构对应的缓存块进行回收。
其中,混合存储系统是以主存-固态硬盘-机械硬盘组成的存储结构,固态硬盘作为机械硬盘的缓存,flashcache是基于linux设备映射层框架之上的内核模块,用于接受来自上层下发的读写操作(i/o)请求,并将热数据调度到固态硬盘作为缓存,进而实现机械硬盘的读写。本发明中,缓存调度方法中的缓存为固态硬盘,该缓存调度方法基于flashcache的内核模块完成。
在本发明中,在进行缓存时,按照读写请求命中缓存块中数据的频率来设置缓存块对应的热度标志的数值,并按照热度标志的数值将缓存块链接为热读链表和非热读链表,在进行缓存块回收的时候,可以从非热读链表中相应的缓存块进行回收。这样,由于做了热读区分,可以较好的保护了热数据, 而在缓存块回收时,是回收的非热度数据,这些数据为从热读链表中淘汰的数据或在非热读链表中存在一段时间的命中次数少的数据,不会存在缓存块刚进入非热读链表就被替换出缓存的情况,保证了命中率,同时减少了随机小写的产生,提高了混合存储系统的读写性能,并在一定程度上保护了缓存硬盘的寿命。
为了更好的理解本发明的技术方案和技术效果,以下将结合流程图对具体的实施例进行详细的描述。
首先,根据硬盘读写操作请求中的磁盘块号,判断数据是否已缓存在的缓存块中。
对于混合存储系统,作为缓存的固态硬盘与机械硬盘之间存在映射关系,参考图2所示,通常地,固态硬盘和机械硬盘都划分为大小相同的块,例如默认的大小为4kb,固态硬盘中的每一个块为一个缓存块,每512个缓存块划分为一个组,机械硬盘与固态硬盘采用多路组相连的映射方式,即机械硬盘中的多个组指向固态硬盘中的一个组。
在机械硬盘上,块地址为以扇区为单位的磁盘块号(diskblocknumber,dbn)。在上层对机械硬盘进行读写操作(i/o)请求后,该请求中的内容直接或间接转化为一个具体的磁盘块号,该磁盘块号可以直接映射到机械硬盘上的一个具体的组,可以通过线性哈希探测映射到缓存固态硬盘组里的某一个缓存块。在具体进行判断时,通过磁盘块号查找相应的固态硬盘上的缓存块中是否已缓存有数据,若已缓存,则表示命中该数据,可以直接读写固态硬盘上的缓存块,若没有缓存,则表示没有命中该数据,需要将数据从机械硬盘缓存到固态硬盘上。
在进行是否缓存的判断之后,根据不同的判断结果,对缓存块中的数据进行缓存的调度,以保护热数据和提高命中率,提高硬盘系统的存储性能。
为了便于理解,先介绍混合存储系统中固态硬盘的缓存数据布局结构,参考图3所示,在固态硬盘中,主要包括三个区域:超级块、元数据块以及缓存块,缓存块中存储数据,元数据块中存储了缓存块缓存数据的数据结构, 每个元数据块与缓存块顺序对应,用于管理存储实际数据的缓存块,通常地,包括有缓存块状态、因缓存块上还有操作而等待的任务数、将缓存块元数据链入各个链表连接件、缓存块所缓存数据对应的磁盘块地址等,在本发明实施例中,元数据块中包括有热度标志,热度标志为元数据命中的次数,代表了缓存块中数据的热度。
在进行是否缓存的判断之后,若数据并没有缓存在缓存块中,则在步骤s02,将数据缓存至缓存块中并将其对应的元数据结构缓存块链接到非热读链表,以及将元数据结构中的热度标志设置为第一热度值。
对于还没有存入缓存块的新的数据,需要将其从机械硬盘中读取到固态硬盘相应的缓存块中,对于存在空闲块的情况下,空闲块即空闲的缓存块,将优先使用空闲块进行数据的缓存,对于不存在空闲块的情况,则需要将现有的缓存块进行替换,即将存储有数据的数据块进行回收后,再次存储新的数据,对于这种情况,后续将进行详细的描述。在进行数据缓存的同时,该缓存块相应的元数据结构中的热度标志设置为第一热度值,第一热度值为数值,例如可以为1,代表该数据刚命中一次,为非活跃数据,可以标志为cold状态。
对于这些热度标志中的数值为第一热度值的缓存块,将他们对应的元数据结构链接为一个链表,称作非热读链表,链表的链接方式可以为lru链接链表,lru链接链表的表头为较早缓存的数据,表尾为最近链接的数据。
在进行是否缓存的判断之后,若数据已缓存在缓存块中,则在步骤s03中,判断缓存块对应的元数据结构中的热度标志的值是否不小于第二热度值,若小于,则将热度标志的值增加预定数值,且当热度标志的值等于第二热度值时,将此元数据结构从非热读链表断开并链接到热读链表,并判断热读链表的长度是否大于长度阈值,若大于,则按照lru算法,将热读链表的一个缓存块对应的元数据结构中的热度标志的第二热度值减少预定数值,从热读链表断开,并将此缓存块对应的元数据结构链接到非热读链表。
对于数据已缓存在缓存块中的情况,其命中情况可能是仅命中一次或两 次及两次以上,也就是说数据的热度不同,在本发明中,根据热度标志来进一步进行判断和处理,对于超过一个预定命中次数的缓存块,则认为其为热数据,链接在另一个链表中,该链表称作热读链表,该链表的链接方式页可以为lru链接链表,这样,通过热度标志将缓存块链接为两个热度同的链表。
具体的,先判断缓存块对应的元数据结构中的热度标志的值是否不小于第二热度值,若小于,则认为这些数据的命中次数还不够多,不能作为热数据,可以根据需要来确定第二热度值,例如,在数据存入缓存块之后,若命中两次,则认为该数据已变为热数据,当然,可以根据需要认为命中其他的次数之后变为热数据,每命中一次则将相应的热度标志增加预定数值,例如预定数值为1,当热度标志的值大于3时,则认为该缓存块为热数据,将其链接到热读链表。
在非热读链表中缓存块命中次数增加到一定次数之后,该缓存块对应的元数据结构中的热度标志值达到第二热度值,这时,需要将该缓存块的元数据结构链接至热度链表,具体的,先将非热读链表断开,将链表的头结点和尾节点断开,而后,将该元数据结构链接到热读链表的表尾,从而,将该热读的元数据结构链接至热读链表;而随着热读链表的长度的增加,当热度链表的长度增加到预定的长度阈值时,则需要将热度链表中对应的缓存块进行淘汰,具体的,可以按照lru算法进行缓存块的淘汰,即将近期最少使用的一个缓存块淘汰至非热读链表,对于lru热读链表,近期最少使用的缓存块为链表的表头,则将热读链表断开,将链表的头结点和尾节点断开,而后,将该对应的元数据结构中的热度标志的第二热度值减少预定数值,之后链接到非热读链表的表尾,从而,将该淘汰的缓存块对应的元数据结构链接至非热读链表。
在一个优选的实施例中,热度标志设置为3档,第一热度值、中间热读值和第二热度值,分别代表数据为cold状态、warm状态和hot状态。在该步骤中,具体的,在将热度标志的值增加预定数值时,若热度标志为第一热度值,则将第一热度值增加预定数值后变为中间热读值,若热度标志为中间热 读值,则将中间热度值增加预定数值后变为第二热度值;将热读链表的一个缓存块对应的元数据结构中的热度标志的第二热度值减少预定数值时,将热读链表的一个缓存块对应的元数据结构中的热度标志的第二热度值减少预定数值后变为中间热度值。通过这三个热度值可以很好的区分缓存块的热度,保证缓存中数据按照实际热度动态进行维护,也便于在缓存块回收时,按照实际的热度标志的值进行回收,更好地保证命中率。
进行缓存块的回收是缓存调度中的必须的步骤,缓存的空间是有限的,在有新的数据要缓存进来时,若没有空闲缓存块,则需要将已有的缓存块进行回收,即将缓存块原有的数据清空,以便存入新的数据。
在本发明实施例中,在步骤s04,在将数据缓存至缓存块中时,若无空闲缓存块,是将非热读链表中的至少部分元数据结构对应的缓存块进行回收。
在本发明优选的实施例中,在进行缓存块的回收时,将非热读链表中元数据结构中的热度标志为第一热度值的缓存块部分或全部回收,这样,可以确保回收的是这段时间内一直处于低命中的数据,保证了命中率,同时减少了随机小写的产生,同时,提高了回收的效率。
由于在缓存的调度的过程中,动态地维护了两个热度标志不同的链表,热度链表和非热读链表,在进行缓存块回收时,可以仅将非热读链表中的至少部分元数据结构对应的缓存块进行回收,非热读链表中的缓存块要么是从热读链表中淘汰下来的,要么是在一段时间内热度一直没法变为热数据的,回收这些缓存块,可以保证真正的热数据被保存下来,较好的保护了热数据,不会存在缓存块刚进入非热读链表就被替换出缓存的情况,保证了命中率,同时减少了随机小写的产生,提高了混合存储系统的读写性能,并在一定程度上保护了缓存硬盘的寿命。
可以理解的是,本发明的方法并不是完全按照上述的步骤的顺序执行,在整个缓存的调度过程中,根据判断结果和具体的需要,执行某个或某几个步骤。
以上对本发明实施例的flashcache混合存储系统的缓存调度方法进行了 详细的描述,此外,本发明还提供了实现上述方法的flashcache混合存储系统的缓存调度系统,参考图5所示,包括:
缓存块命中判断单元100,用于根据硬盘读写操作请求中的磁盘块号,判断数据是否已缓存在的缓存块中;
缓存单元110,用于在数据没有缓存在缓存块中时,将数据缓存至缓存块中并将对应的元数据结构连接到非热读链表,,并将缓存块对应的元数据结构中的热度标志设置为第一热度值;
缓存调度单元120,用于在数据已缓存在缓存块中时,判断缓存块对应的元数据结构中的热度标志的值是否不小于第二热度值,若小于,则将热度标志的值增加预定数值,且当热度标志的值等于第二热度值时,将此缓存块对应的元数据结构从非热读链表断开并链接到热读链表,并判断热读链表的长度是否大于长度阈值,若大于,则按照lru算法,将热读链表的一个缓存块对应的元数据结构中的热度标志的第二热度值减少预定数值,并将热读链表断开并将此缓存块对应的元数据结构链接到非热读链表;
回收单元130,用于在将数据缓存至缓存块中时,若无空闲缓存块,将非热读链表中的至少部分元数据结构对应的缓存块进行回收。
进一步地,缓存调度单元120中,若热度标志为第一热度值,则将第一热度值增加预定数值后变为中间热读值,若热度标志为中间热读值,则将中间热度值增加预定数值后变为第二热度值;则,
缓存调度单元120中,将热读链表的一个缓存块对应的元数据结构中的热度标志的第二热度值减少预定数值后变为中间热度值。
进一步地,非热读链表和热读链表为lru链表。
进一步地,回收单元130中,将非热读链表中元数据结构中的热度标志为第一热度值的缓存块部分或全部回收。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描 述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的模块或单元可以是或者也可以不是物理上分开的,作为模块或单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本发明的优选实施方式,虽然本发明已以较佳实施例披露如上,然而并非用以限定本发明。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围情况下,都可利用上述揭示的方法和技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何的简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。