本申请涉及存储技术领域,特别涉及一种元数据刷盘方法、装置、设备及介质。
背景技术:
在全闪存储系统中,元数据的访问、修改一般具有随机性,因此,每次需要修改数据量很小,而ssd(即solidstatedrive,固态硬盘)的特性要求按一定的块大小做追加写,如果每次修改的元数据量很小,不利于ssd盘性能的发挥和寿命。如何改善元数据的ssd盘写入是目前需要考虑的问题。
技术实现要素:
有鉴于此,本申请的目的在于提供一种元数据刷盘方法、装置、设备及介质,能够及时的将写缓存中的数据下刷至固态硬盘,并避免每次下刷的数据量过小的问题,从而改善存储系统的性能。其具体方案如下:
第一方面,本申请公开了一种元数据刷盘方法,应用于全闪存储系统,包括:
读取当前写缓存的水位;
根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值;
从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录,以及利用所述数据量阈值从所述目标树目录中确定出待下刷的目标树;其中,所述目标树目录的数据量大于全部所述树目录中的其他所述树目录;
将所述目标树中缓存的元数据下刷至固态硬盘。
可选的,还包括:
在所述写缓存中根据所述元数据的类型和数据关系生成树目录以及在所述树目录中生成对应的树,以便将所述元数据缓存至对应的所述树中。
可选的,所述根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值,包括:
若所述水位大于第一预设阈值并小于等于第二预设阈值,则确定所述下刷树目录数量为第一树目录数量,以及所述数据量阈值为第一数据量阈值。
可选的,所述根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值,包括:
若所述水位大于第二预设阈值并小于等于第三预设阈值,则利用所述水位确定出对应的下刷比例,然后利用所述下刷比例确定出所述下刷树目录数量以及所述数据量阈值。
可选的,所述根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值,包括:
若所述水位大于第三预设阈值,则确定所述下刷树目录数量为第二数树目录数量,所述数据量阈值为第二数据量阈值。
可选的,还包括:
若所述水位小于第一预设阈值,则禁止将所述写缓存中所述元数据下刷至所述固态硬盘,或,定时将符合预设条件的树目录中树缓存的所述元数据下刷至所述固态硬盘。
可选的,所述从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录,包括
利用小顶堆从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录。
第二方面,本申请公开了一种元数据刷盘装置,应用于全闪存储系统,包括:
缓存水位读取模块,用于读取当前写缓存的水位;
下刷数量确定模块,用于根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值;
下刷目标确定模块,用于从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录,以及利用所述数据量阈值从所述目标树目录中确定出待下刷的目标树;其中,所述目标树目录的数据量大于全部所述树目录中的其他所述树目录;
目标数据下刷模块,用于将所述目标树中缓存的元数据下刷至固态硬盘。
第三方面,本申请公开了一种元数据刷盘设备,包括处理器和存储器;其中,
所述存储器,用于保存计算机程序;
所述处理器,用于执行所述计算机程序,以实现前述的元数据刷盘方法。
第四方面,本申请公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述的元数据刷盘方法。
可见,本申请先读取当前写缓存的水位,然后根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值,以及从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录,以及利用所述数据量阈值从所述目标树目录中确定出待下刷的目标树;其中,所述目标树目录的数据量大于全部所述树目录中的其他所述树目录,最后将所述目标树中缓存的元数据下刷至固态硬盘。这样,利用写缓存的水位确定出对应的下刷树目录数量以及下刷树的数据量阈值,并在确定待下刷的目标树时考虑了树目录的数据量和树的数据量,能够及时的将写缓存中的数据下刷至固态硬盘,并避免每次下刷的数据量过小的问题,从而改善存储系统的性能。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种元数据刷盘方法流程图;
图2为本申请公开的一种元数据按水位下刷示意图;
图3为本申请公开的一种具体的元数据刷盘方法流程图;
图4为本申请公开的一种元数据刷盘装置结构示意图;
图5为本申请公开的一种元数据刷盘设备结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参见图1所示,本申请实施例公开了一种元数据刷盘方法,应用于全闪存储系统,包括:
步骤s11:读取当前写缓存的水位。
步骤s12:根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值。
在具体的实施方式中,本实施例可以将元数据先存入写缓存对应的树中,然后根据写缓存的水位确定出对应的下刷策略,也即,根据写缓存的利用率确定出对应的下刷策略。
若所述水位小于第一预设阈值,则禁止将所述写缓存中所述元数据下刷至所述固态硬盘,或,定时将符合预设条件的树目录中树缓存的所述元数据下刷至所述固态硬盘。也即,当前写缓存的利用率较低,比如第一预设阈值为35%,当前写缓存的水位小于35%,缓存中数据很少,可以不下刷,为了防止数据在缓存中长时间不下刷,可以定时检测一个树目录是否超过预设时间没有数据进入,如果超过预设时间,则将该树目录中树的数据下刷。
若所述水位大于第一预设阈值并小于等于第二预设阈值,则确定所述下刷树目录数量为第一树目录数量,以及所述数据量阈值为第一数据量阈值。例如,当前水位大于35%小于等于75%,也即当前写缓存中的数据量不是很大,可以以非常缓慢的速度,比如每次只挑选一个数据量最大的树目录,从挑选出的树目录中的树中筛选出数据最多的树下刷,具体刷多少数据,可以根据总资源数确定当前水位可以下刷的数据量,然后进行刷盘。比如,trickle(缓慢下刷时用于确定下刷数据量的值)为1%,总资源数1w,则最终同时在下刷的数据量为1w*1%=10。
若所述水位大于第二预设阈值并小于等于第三预设阈值,则利用所述水位确定出对应的下刷比例,然后利用所述下刷比例确定出所述下刷树目录数量以及所述数据量阈值。例如,比如大于75%小于等于85%时,按线性增长方式刷盘,挑选的树目录数量线性增长,选择树的数据量阈值线性降低,比如:
destage_ratio(下刷比例)=10*(water_level(水位)-75)(75<water_level<=85);
num_tree_dir(下刷树目录数量)=max_destage_tree_dir_num*destage_ratio;
tree_destage_threshold=min_tree_destage_threshold*100/destage_ratio,tree_destage_threshold为下刷树的数据量阈值,max_destage_tree_dir_num为一次确定出的最大下刷树目录数量。min_tree_destage_threshold为最低的下刷树的数据量阈值。
可以理解的是,在这个阶段,当水位升高时,下刷比例线性增高,一次挑选的树目录数增多,筛选树的数据量阈值的减少,从而筛选出的树增加,以实现线性增加下刷数据量。
若所述水位大于第三预设阈值,则确定所述下刷树目录数量为第二数树目录数量,所述数据量阈值为第二数据量阈值。比如,当水位大于85%之后,全速刷盘,比如,下刷树目录数量为max_destage_tree_dir_num,下刷树的数据量阈值为min_tree_destage_threshold。
例如,参见图2所示,图2为本申请实施例公开的一种元数据按水位下刷示意图。写缓存水位小于35%,则不下刷,水位35%至75%以固定的下刷值下刷,即固定的下刷量下刷,75%至85%线性增长下刷,大于85%则以允许下刷的最大下刷数据量下刷。也即,不同的水位对应不同的允许下刷数据量,针对不同水位确定下刷树目录和下刷树,具体下刷的数据量由总资源数确定。
步骤s13:从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录,以及利用所述数据量阈值从所述目标树目录中确定出待下刷的目标树;其中,所述目标树目录的数据量大于全部所述树目录中的其他所述树目录。
步骤s14:将所述目标树中缓存的元数据下刷至固态硬盘。
在具体的实施方式中,将目标树加入到下刷队列,并在数据下刷时刻将这些树中缓存的数据下刷到固态硬盘上。
可见,本申请实施例先读取当前写缓存的水位,然后根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值,以及从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录,以及利用所述数据量阈值从所述目标树目录中确定出待下刷的目标树;其中,所述目标树目录的数据量大于全部所述树目录中的其他所述树目录,最后将所述目标树中缓存的元数据下刷至固态硬盘。这样,利用写缓存的水位确定出对应的下刷树目录数量以及下刷树的数据量阈值,并在确定待下刷的目标树时考虑了树目录的数据量和树的数据量,能够及时的将写缓存中的数据下刷至固态硬盘,并避免每次下刷的数据量过小的问题,从而改善存储系统的性能。
参见图3所示,本申请公开了一种具体的元数据刷盘方法,应用于全闪存储系统,包括:
步骤s21:在所述写缓存中根据所述元数据的类型和数据关系生成树目录以及在所述树目录中生成对应的树,以便将所述元数据缓存至对应的所述树中。
在具体的实施方式中,本实施例可以在写缓存中按照元数据类型和数据关系组织为对应的树目录,然后在树目录中根据元数据的数据关系,划分出若干树。获取到写入的元数据后,将元数据缓存至对应的树中。
步骤s22:读取当前写缓存的水位。
步骤s23:根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值。
步骤s24:利用小顶堆从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录,以及利用所述数据量阈值从所述目标树目录中确定出待下刷的目标树;其中,所述目标树目录的数据量大于全部所述树目录中的其他所述树目录。
在具体的实施方式中,可以利用小顶堆的数据结构确定出下刷树目录数量个待下刷的目标树目录,需要指出的是,下刷树目录数量已经确定,所以堆的大小固定,把堆中数据量最小的树目录的放到堆顶,每次调整只需要o(logn)的时间复杂度,因为堆顶是最小的值,所以每次找到一个新的树目录只需要跟堆顶元素比较,若比最小值大,则淘汰堆顶,把新的树目录放进去。
步骤s25:将所述目标树中缓存的元数据下刷至固态硬盘。
参见图4所示,本申请实施例公开了一种元数据刷盘装置,应用于全闪存储系统,包括:
缓存水位读取模块11,用于读取当前写缓存的水位;
下刷数量确定模块12,用于根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值;
下刷目标确定模块13,用于从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录,以及利用所述数据量阈值从所述目标树目录中确定出待下刷的目标树;其中,所述目标树目录的数据量大于全部所述树目录中的其他所述树目录;
目标数据下刷模块14,用于将所述目标树中缓存的元数据下刷至固态硬盘。
可见,本申请实施例先读取当前写缓存的水位,然后根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值,以及从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录,以及利用所述数据量阈值从所述目标树目录中确定出待下刷的目标树;其中,所述目标树目录的数据量大于全部所述树目录中的其他所述树目录,最后将所述目标树中缓存的元数据下刷至固态硬盘。这样,利用写缓存的水位确定出对应的下刷树目录数量以及下刷树的数据量阈值,并在确定待下刷的目标树时考虑了树目录的数据量和树的数据量,能够及时的将写缓存中的数据下刷至固态硬盘,并避免每次下刷的数据量过小的问题,从而改善存储系统的性能。
其中,元数据刷盘装置还包括树目录和树生成模块,用于在所述写缓存中根据所述元数据的类型和数据关系生成树目录以及在所述树目录中生成对应的树,以便将所述元数据缓存至对应的所述树中。
下刷数量确定模块12,具体用于若所述水位大于第一预设阈值并小于等于第二预设阈值,则确定所述下刷树目录数量为第一树目录数量,以及所述数据量阈值为第一数据量阈值。若所述水位大于第二预设阈值并小于等于第三预设阈值,则利用所述水位确定出对应的下刷比例,然后利用所述下刷比例确定出所述下刷树目录数量以及所述数据量阈值。若所述水位大于第三预设阈值,则确定所述下刷树目录数量为第二数树目录数量,所述数据量阈值为第二数据量阈值。若所述水位小于第一预设阈值,则禁止将所述写缓存中所述元数据下刷至所述固态硬盘,或,确定出符合预设条件的树目录,相应的,所述目标数据下刷模块14,还可以用于定时将符合预设条件的树目录中树缓存的所述元数据下刷至所述固态硬盘。
下刷目标确定模块13,具体用于利用小顶堆从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录。
参见图5所示,本申请实施例公开了一种元数据刷盘设备,包括处理器21和存储器22;其中,所述存储器22,用于保存计算机程序;所述处理器21,用于执行所述计算机程序,以实现以下步骤:
读取当前写缓存的水位;根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值;从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录,以及利用所述数据量阈值从所述目标树目录中确定出待下刷的目标树;其中,所述目标树目录的数据量大于全部所述树目录中的其他所述树目录;将所述目标树中缓存的元数据下刷至固态硬盘。
可见,本申请实施例先读取当前写缓存的水位,然后根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值,以及从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录,以及利用所述数据量阈值从所述目标树目录中确定出待下刷的目标树;其中,所述目标树目录的数据量大于全部所述树目录中的其他所述树目录,最后将所述目标树中缓存的元数据下刷至固态硬盘。这样,利用写缓存的水位确定出对应的下刷树目录数量以及下刷树的数据量阈值,并在确定待下刷的目标树时考虑了树目录的数据量和树的数据量,能够及时的将写缓存中的数据下刷至固态硬盘,并避免每次下刷的数据量过小的问题,从而改善存储系统的性能。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:在所述写缓存中根据所述元数据的类型和数据关系生成树目录以及在所述树目录中生成对应的树,以便将所述元数据缓存至对应的所述树中。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:若所述水位大于第一预设阈值并小于等于第二预设阈值,则确定所述下刷树目录数量为第一树目录数量,以及所述数据量阈值为第一数据量阈值。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:若所述水位大于第二预设阈值并小于等于第三预设阈值,则利用所述水位确定出对应的下刷比例,然后利用所述下刷比例确定出所述下刷树目录数量以及所述数据量阈值。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:若所述水位大于第三预设阈值,则确定所述下刷树目录数量为第二数树目录数量,所述数据量阈值为第二数据量阈值。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:若所述水位小于第一预设阈值,则禁止将所述写缓存中所述元数据下刷至所述固态硬盘,或,定时将符合预设条件的树目录中树缓存的所述元数据下刷至所述固态硬盘。
本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:利用小顶堆从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录。
进一步的,本申请实施例还公开了一种计算机可读存储介质,用于保存计算机程序,其中,计算机程序被处理器执行时实现以下步骤:
读取当前写缓存的水位;根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值;从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录,以及利用所述数据量阈值从所述目标树目录中确定出待下刷的目标树;其中,所述目标树目录的数据量大于全部所述树目录中的其他所述树目录;将所述目标树中缓存的元数据下刷至固态硬盘。
可见,本申请实施例先读取当前写缓存的水位,然后根据所述水位确定出下刷树目录数量以及下刷树的数据量阈值,以及从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录,以及利用所述数据量阈值从所述目标树目录中确定出待下刷的目标树;其中,所述目标树目录的数据量大于全部所述树目录中的其他所述树目录,最后将所述目标树中缓存的元数据下刷至固态硬盘。这样,利用写缓存的水位确定出对应的下刷树目录数量以及下刷树的数据量阈值,并在确定待下刷的目标树时考虑了树目录的数据量和树的数据量,能够及时的将写缓存中的数据下刷至固态硬盘,并避免每次下刷的数据量过小的问题,从而改善存储系统的性能。
本实施例中,计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:在所述写缓存中根据所述元数据的类型和数据关系生成树目录以及在所述树目录中生成对应的树,以便将所述元数据缓存至对应的所述树中。
本实施例中,计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:若所述水位大于第一预设阈值并小于等于第二预设阈值,则确定所述下刷树目录数量为第一树目录数量,以及所述数据量阈值为第一数据量阈值。
本实施例中,计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:若所述水位大于第二预设阈值并小于等于第三预设阈值,则利用所述水位确定出对应的下刷比例,然后利用所述下刷比例确定出所述下刷树目录数量以及所述数据量阈值。
本实施例中,计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:若所述水位大于第三预设阈值,则确定所述下刷树目录数量为第二数树目录数量,所述数据量阈值为第二数据量阈值。
本实施例中,计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:若所述水位小于第一预设阈值,则禁止将所述写缓存中所述元数据下刷至所述固态硬盘,或,定时将符合预设条件的树目录中树缓存的所述元数据下刷至所述固态硬盘。
本实施例中,计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:利用小顶堆从全部树目录中确定出所述下刷树目录数量个待下刷的目标树目录。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
以上对本申请所提供的一种元数据刷盘方法、装置、设备及介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。