一种SSDCache中数据映射的管理方法及系统与流程

文档序号:14043686阅读:136来源:国知局

本发明涉及存储技术领域,特别是涉及一种ssdcache中数据映射的管理方法及系统。



背景技术:

在存储系统中,存储器包括基于闪存的ssd(solidstatedrives,固态硬盘)及hdd(harddiskdrive,硬盘驱动器)。由于基于闪存的ssd,即ssdcache的读取速度远快于hdd的读取速度,通常将hdd中的数据缓存至ssdcache,以便于通过ssdcache读取数据,从而建立了hdd中的数据与ssdcache中缓存的数据的映射关系。现有技术中,为了提高系统的访问效率,通常将建立的映射关系保存至内存。但是,在系统重启或者掉电的情况下,内存中的数据会丢失,需要系统重新建立hdd中的数据与ssdcache中缓存的数据的映射关系,但是建立映射关系的时间比较长,从而降低了系统的访问效率。

因此,如何提供一种解决上述技术问题的方案是本领域的技术人员目前需要解决的问题。



技术实现要素:

本发明的目的是提供一种ssdcache中数据映射的管理方法及系统,可以在系统启动后将ssdcache保存的标号映射关系恢复至内存,不需要系统重新建立hdd中的数据与ssdcache中缓存的数据的映射关系,从而提高了系统的访问效率。

为解决上述技术问题,本发明提供了一种ssdcache中数据映射的管理方法,包括:

预先将硬盘驱动器hdd中的存储空间和固态硬盘ssdcache中的存储空间相应地划分为n个hdd模块和m个ssd模块,并分别对其进行顺序标号,其中,n、m均为大于1的整数且n<m;

将n个所述hdd模块中的数据一一缓存至m个所述ssd模块中未缓存过数据的ssd模块,建立所述hdd模块与所述ssd模块之间的标号映射关系;

将所述标号映射关系保存至所述ssdcache,以便于在系统启动后,将所述ssdcache保存的标号映射关系恢复至内存。

优选地,所述将所述标号映射关系保存至所述ssdcache的过程具体为:

将所述标号映射关系组织成一颗树的形式保存至所述ssdcache,其中,所述树的m个叶子节点的保存内容均包括头部描述信息和按照所述ssd模块的标号从小到大顺序对应的hdd模块的标号,且没有所述标号映射关系的ssd模块在所述叶子节点中空出存储位置,每个所述叶子节点的hdd模块的标号的保存容量max相同,且第i个叶子节点对应的ssd模块的标号小于第i+1个叶子节点对应的ssd模块的标号,所述树的非叶子节点的保存内容均包括节点描述信息和用于索引的(key,value)键值对集合,value为存储第key个叶子节点的ssd模块的标号,所述非叶子节点中父节点的索引范围包含该父节点的子节点的索引范围,所述头部描述信息和所述节点描述信息均包括存储所在节点的sdd模块的标号,m、i均为正整数,i<m<m。

优选地,将每个所述叶子节点及所述非叶子节点均按照数组的方式保存;

则max=(叶子节点所占存储空间-头部描述信息所占存储空间)/一个数组元素所占存储空间,其中,一个数组元素包括一个hdd模块的标号或者一个空出的存储位置;

非叶子节点的(key,value)键值对集合的保存容量最大值=(非叶子节点所占空间-节点描述信息所占存储空间)/一个(key,value)键值对集合所占的存储空间。

优选地,所述头部描述信息还包括一个数组元素所占的存储空间、所在叶子节点的max、所在叶子节点保存的数组元素的实际数量及所在叶子节点的标示值。

优选地,一个所述数组元素包括64位的整数,其中,所述整数的前48位为该数组元素包含的hdd模块的标号、后16位为该标号对应的hdd模块中保存的数据的数据状态。

优选地,所述节点描述信息还包括一个(key,value)键值对集合所占的存储空间、所在非叶子节点的保存容量最大值、所在非叶子节点保存的(key,value)键值对集合的实际数量及所在非叶子节点的标示值。

优选地,该方法还包括:

当所述hdd模块与所述ssd模块之间建立新的标号映射关系时,将新建立关系的hdd模块的标号添加至与其对应的空出的存储位置。

优选地,该方法还包括:

当已建立的标号映射关系发生变化时,更新变化的标号映射关系对应的叶子节点。

为解决上述技术问题,本发明还提供了一种ssdcache中数据映射的管理系统,包括:

标号单元,用于预先将硬盘驱动器hdd中的存储空间和固态硬盘ssdcache中的存储空间相应地划分为n个hdd模块和m个ssd模块,并分别对其进行顺序标号,其中,n、m均为大于1的整数且n<m;

建立单元,用于将n个所述hdd模块中的数据一一缓存至m个所述ssd模块中未缓存过数据的ssd模块,建立所述hdd模块与所述ssd模块之间的标号映射关系;

恢复单元,用于将所述标号映射关系保存至所述ssdcache,以便于在系统启动后,将所述ssdcache保存的标号映射关系恢复至内存。

优选地,所述将所述标号映射关系保存至所述ssdcache的过程具体为:

将所述标号映射关系组织成一颗树的形式保存至所述ssdcache,其中,所述树的m个叶子节点的保存内容均包括头部描述信息和按照所述ssd模块的标号从小到大顺序对应的hdd模块的标号,且没有所述标号映射关系的ssd模块在所述叶子节点中空出存储位置,每个所述叶子节点的hdd模块的标号的保存容量max相同,且第i个叶子节点对应的ssd模块的标号小于第i+1个叶子节点对应的ssd模块的标号,所述树的非叶子节点的保存内容均包括节点描述信息和用于索引的(key,value)键值对集合,value为存储第key个叶子节点的ssd模块的标号,所述非叶子节点中父节点的索引范围包含该父节点的子节点的索引范围,所述头部描述信息和所述节点描述信息均包括存储所在节点的sdd模块的标号,m、i均为正整数,i<m<m。

本发明提供了一种ssdcache中数据映射的管理方法,包括:预先将硬盘驱动器hdd中的存储空间和固态硬盘ssdcache中的存储空间相应地划分为n个hdd模块和m个ssd模块,并分别对其进行顺序标号,其中,n、m均为大于1的整数且n<m;将n个hdd模块中的数据一一缓存至m个ssd模块中未缓存过数据的ssd模块,建立hdd模块与ssd模块之间的标号映射关系;将标号映射关系保存至ssdcache,以便于在系统启动后,将ssdcache保存的标号映射关系恢复至内存。

与现有技术中的内存存储映射关系相比,本发明提前将hdd中的存储空间和ssdcache中的存储空间相应地划分为多个hdd模块和多个ssd模块,并分别对hdd模块和ssd模块进行标号。然后,将hdd模块中的数据一一缓存至ssd模块中未缓存过数据的ssd模块,从而建立hdd模块与ssd模块之间的标号映射关系,并将建立的标号映射关系保存至ssdcache。在系统重启或者掉电的情况下,ssdcache中的数据不会丢失,因此,本发明便可以在系统启动后将ssdcache保存的标号映射关系恢复至内存,不需要系统重新建立hdd中的数据与ssdcache中缓存的数据的映射关系,从而提高了系统的访问效率。

本发明还提供了一种ssdcache中数据映射的管理系统,与上述管理方法具有相同的有益效果。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的一种ssdcache中数据映射的管理方法的流程图;

图2为本发明提供的一种ssdcache中数据映射的管理系统的结构示意图。

具体实施方式

本发明的核心是提供一种ssdcache中数据映射的管理方法及系统,可以在系统启动后将ssdcache保存的标号映射关系恢复至内存,不需要系统重新建立hdd中的数据与ssdcache中缓存的数据的映射关系,从而提高了系统的访问效率。

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参照图1,图1为本发明提供的一种ssdcache中数据映射的管理方法的流程图,该方法包括:

步骤s1:预先将硬盘驱动器hdd中的存储空间和固态硬盘ssdcache中的存储空间相应地划分为n个hdd模块和m个ssd模块,并分别对其进行顺序标号,其中,n、m均为大于1的整数且n<m;

需要说明的是,这里的预先是提前划分好的,只需要划分一次,除非根据实际情况需要修改,否则不需要重新划分。

具体地,本申请提前将hdd中的存储空间划分为n个hdd模块,并对其进行顺序标号,这里的顺序标号可以对n个hdd模块从0开始标号,一直标记至n-1,也可以对n个hdd模块从1开始标号,一直标记至n。同样地,本申请也提前将ssdcache中的存储空间划分为m个ssd模块,并对其进行顺序标号。由于hdd模块中保存的数据要缓存至ssd模块,hdd模块的个数应小于ssd模块的个数,即n<m,且一个hdd模块的存储空间应不大于一个ssd模块的存储空间。

最优地,将hdd中的存储空间和ssd中的存储空间分别按照提前设置的粒度划分为一个个相同大小的存储空间,即hdd模块和ssd模块。至于具体的粒度设置,本申请在此不做特别的限定,根据实际情况而定。

步骤s2:将n个hdd模块中的数据一一缓存至m个ssd模块中未缓存过数据的ssd模块,建立hdd模块与ssd模块之间的标号映射关系;

具体地,分别将n个hdd模块中的数据缓存至m个ssd模块,为了保证hdd模块数据的完整性,缓存过数据的ssd模块将不再缓存hdd模块中的数据,从而建立了hdd模块和ssd模块的一一映射关系,这里的映射关系是指hdd模块的标号与ssd模块的标号之间的关系,简称标号映射关系。

比如,标号为1的hdd模块与标号为5的ssd模块之间具有标号映射关系,说明标号为5的ssd模块中缓存的是标号为1的hdd模块中的数据。当系统想要访问标号为1的hdd模块中的数据时,根据建立的标号映射关系,使系统可以通过直接访问标号为5的ssd模块中的数据,从而得到标号为1的hdd模块中的数据,提高了系统的访问效率。

步骤s3:将标号映射关系保存至ssdcache,以便于在系统启动后,将ssdcache保存的标号映射关系恢复至内存。

具体地,考虑到在系统关机或者掉电的情况下,ssdcache中的数据不会丢失,将建立的标号映射关系保存至ssdcache。当系统启动后,ssdcache中仍旧保存着标号映射关系,直接将其保存的标号映射关系恢复至内存即可,不需要系统重新建立hdd中的数据与ssdcache中缓存的数据的映射关系,从而提高了系统的访问效率。

本发明提供了一种ssdcache中数据映射的管理方法,包括:预先将硬盘驱动器hdd中的存储空间和固态硬盘ssdcache中的存储空间相应地划分为n个hdd模块和m个ssd模块,并分别对其进行顺序标号,其中,n、m均为大于1的整数且n<m;将n个hdd模块中的数据一一缓存至m个ssd模块中未缓存过数据的ssd模块,建立hdd模块与ssd模块之间的标号映射关系;将标号映射关系保存至ssdcache,以便于在系统启动后,将ssdcache保存的标号映射关系恢复至内存。

与现有技术中的内存存储映射关系相比,本发明提前将hdd中的存储空间和ssdcache中的存储空间相应地划分为多个hdd模块和多个ssd模块,并分别对hdd模块和ssd模块进行标号。然后,将hdd模块中的数据一一缓存至ssd模块中未缓存过数据的ssd模块,从而建立hdd模块与ssd模块之间的标号映射关系,并将建立的标号映射关系保存至ssdcache。在系统重启或者掉电的情况下,ssdcache中的数据不会丢失,因此,本发明便可以在系统启动后将ssdcache保存的标号映射关系恢复至内存,不需要系统重新建立hdd中的数据与ssdcache中缓存的数据的映射关系,从而提高了系统的访问效率。

在上述实施例的基础上:

作为一种优选地实施例,将标号映射关系保存至ssdcache的过程具体为:

将标号映射关系组织成一颗树的形式保存至ssdcache,其中,树的m个叶子节点的保存内容均包括头部描述信息和按照ssd模块的标号从小到大顺序对应的hdd模块的标号,且没有标号映射关系的ssd模块在叶子节点中空出存储位置,每个叶子节点的hdd模块的标号的保存容量max相同,且第i个叶子节点对应的ssd模块的标号小于第i+1个叶子节点对应的ssd模块的标号,树的非叶子节点的保存内容均包括节点描述信息和用于索引的(key,value)键值对集合,value为存储第key个叶子节点的ssd模块的标号,非叶子节点中父节点的索引范围包含该父节点的子节点的索引范围,头部描述信息和节点描述信息均包括存储所在节点的sdd模块的标号,m、i均为正整数,i<m<m。

具体地,将标号映射关系组织成一棵树的形式保存至ssdcache。一棵树包括非叶子节点和叶子节点,非叶子节点为有子节点的节点,叶子节点为没有子节点的节点。子节点是相对于父节点来说的,为父节点的下一层节点。

本申请中的一棵树的叶子节点保存的是按照ssd模块的标号从小到大顺序对应的hdd模块的标号,也即每个叶子节点中的hdd模块的标号是按照ssd模块的标号从小到大的顺序存储的,且位于左边的叶子节点对应的ssd模块的标号小于位于右边的叶子节点对应的ssd模块的标号。

由于hdd模块中的数据缓存至ssd模块时,是随机选择ssd模块缓存的,所以ssd模块很有可能不连续对应hdd模块。当按照ssd模块的标号从小到大顺序排列其对应的hdd模块的标号时,出现没有标号映射关系的ssd模块时,在叶子节点中为其空出存储hdd模块的标号的位置。每个叶子节点的hdd模块的标号的保存容量max相同,也即每个叶子节点能够保存的hdd模块的标号的最大值相同。

叶子节点的保存内容不仅包括hdd模块的标号,还包括头部描述信息,头部描述信息中保存的是ssd模块的标号,该标号所对应的ssd模块为存储该叶子节点的模块,也即头部描述信息相当于所在叶子节点的位置信息。

本申请中的一棵树的非叶子节点为索引信息,起到索引所需叶子节点的作用。非叶子节点通过保存(key,value)键值对集合实现索引功能,其中,key与value具有一一对应的关系,key代表的是第key个叶子节点,value代表的是存储第key个叶子节点的ssd模块的标号。本申请中键值对集合的key可以保存在非叶子节点的前部分,键值对集合的value可以保存在非叶子节点的后部分,本发明在此不做特别的限定。

可见,已知每个叶子节点的hdd模块的标号的保存容量max,可以根据ssd模块的标号除以max的结果取整得到该ssd模块的标号对应的叶子节点,然后根据保存的(key,value)键值对集合得到对应的叶子节点所在的ssd模块的标号,从而索引到该ssd模块的标号对应的叶子节点。

比如,ssd模块的标号及叶子节点的个数均从0开始标记,叶子节点的hdd模块的标号的保存容量max取10。则标记为0的叶子节点中保存的是标号为0-9的ssd模块对应的hdd模块的标号。当需要标号为9的ssd模块对应的hdd模块的标号时,用9/10的结果取整数部分,整数部分为0,说明标号为9的ssd模块对应的hdd模块的标号保存在标记为0的叶子节点,标记为0的叶子节点位置信息可以通过0对应的(key,value)键值对集合获得。

当保存的标号映射关系比较多时,需要索引的叶子节点的数量也比较多,由于非叶子节点的存储空间有限,所以非叶子节点分布在树的不同层中。非叶子节点中父节点的索引范围包含该父节点的子节点的索引范围。因此,索引范围逐层缩小,最终索引到所需叶子节点。

非叶子节点的保存内容不仅包括(key,value)键值对集合,还包括节点描述信息,节点描述信息中保存的是ssd模块的标号,该标号所对应的ssd模块为存储该非叶子节点的模块,也即节点描述信息相当于所在非叶子节点的位置信息。

作为一种优选地实施例,将每个叶子节点及非叶子节点均按照数组的方式保存;

则max=(叶子节点所占存储空间-头部描述信息所占存储空间)/一个数组元素所占存储空间,其中,一个数组元素包括一个hdd模块的标号或者一个空出的存储位置;

非叶子节点的(key,value)键值对集合的保存容量最大值=(非叶子节点所占空间-节点描述信息所占存储空间)/一个(key,value)键值对集合所占的存储空间。

具体地,将每个叶子节点按照数组的方式保存,即叶子节点包含的头部描述信息及hdd模块的标号均按照数组形式保存。则max=(叶子节点所占存储空间-头部描述信息所占存储空间)/一个数组元素所占存储空间,这里的数组元素包括hdd模块的标号或者空出的存储位置。

同样地,将每个非叶子节点按照数组的方式保存,即非叶子节点包含的节点描述信息及(key,value)键值对集合均按照数组形式保存。则非叶子节点的保存容量最大值=(非叶子节点所占空间-节点描述信息所占存储空间)/一个(key,value)键值对集合所占的存储空间。这里的(key,value)键值对集合所占的存储空间=key所占的存储空间+value所占的存储空间。

当然,叶子节点和非叶子节点的保存形式可以为其他形式,本发明在此不做特别的限定。

作为一种优选地实施例,头部描述信息还包括一个数组元素所占的存储空间、所在叶子节点的max、所在叶子节点保存的数组元素的实际数量及所在叶子节点的标示值。

具体地,叶子节点的头部描述信息还包括hdd模块的标号或者空出的存储位置所占的存储空间,所在叶子节点保存hdd模块的标号的最大容量,所在叶子节点保存的hdd模块的标号的实际数量,及标示所在节点为叶子节点的标示值。

作为一种优选地实施例,一个数组元素包括64位的整数,其中,整数的前48位为该数组元素包含的hdd模块的标号、后16位为该标号对应的hdd模块中保存的数据的数据状态。

具体地,一个数组元素包括64位的整数,这个64位整数的前48位为该数组元素包含的hdd模块的标号,整数的后16位为该标号对应的hdd模块中保存的数据的数据状态,从数据状态可以得知保存的数据是否为脏数据和是否为有效的信息。当对hdd模块执行写操作时,hdd模块中的数据被更改,导致该hdd模块的数据和对应的ssd模块的数据不一致,该hdd模块此时被称为脏块,脏块中保存的数据称为脏数据。

作为一种优选地实施例,节点描述信息还包括一个(key,value)键值对集合所占的存储空间、所在非叶子节点的保存容量最大值、所在非叶子节点保存的(key,value)键值对集合的实际数量及所在非叶子节点的标示值。

具体地,非叶子节点的节点描述信息还包括一个(key,value)键值对集合所占的存储空间,所在非叶子节点保存(key,value)键值对集合的最大容量,所在非叶子节点保存的(key,value)键值对集合的实际数量,及标示所在节点为非叶子节点的标示值。

作为一种优选地实施例,该方法还包括:

当hdd模块与ssd模块之间建立新的标号映射关系时,将新建立关系的hdd模块的标号添加至与其对应的空出的存储位置。

具体地,在原有标号映射关系的基础上,hdd模块与ssd模块之间会建立新的标号映射关系,新的标号映射关系对应的是之前没有标号映射关系的ssd模块。由于本申请在叶子节点中为之前没有标号映射关系的ssd模块空出存储位置,所以将新建立关系的hdd模块的标号添加至与其对应的空出的存储位置即可,保证了标号映射关系的完整性。

作为一种优选地实施例,该方法还包括:

当已建立的标号映射关系发生变化时,更新变化的标号映射关系对应的叶子节点。

具体地,考虑到原有的标号映射关系会发生改变,本申请将关系变化的ssd模块对应的hdd模块的标号置换出该ssd模块之前对应的hdd模块的标号,从而更新了变化的标号映射关系对应的叶子节点,保证了标号映射关系的正确性。

请参照图2,图2为本发明提供的一种ssdcache中数据映射的管理系统的结构示意图,该系统包括:

标号单元1,用于预先将硬盘驱动器hdd中的存储空间和固态硬盘ssdcache中的存储空间相应地划分为n个hdd模块和m个ssd模块,并分别对其进行顺序标号,其中,n、m均为大于1的整数且n<m;

建立单元2,用于将n个hdd模块中的数据一一缓存至m个ssd模块中未缓存过数据的ssd模块,建立hdd模块与ssd模块之间的标号映射关系;

恢复单元3,用于将标号映射关系保存至ssdcache,以便于在系统启动后,将ssdcache保存的标号映射关系恢复至内存。

作为一种优选地实施例,将标号映射关系保存至ssdcache的过程具体为:

将标号映射关系组织成一颗树的形式保存至ssdcache,其中,树的m个叶子节点的保存内容均包括头部描述信息和按照ssd模块的标号从小到大顺序对应的hdd模块的标号,且没有标号映射关系的ssd模块在叶子节点中空出存储位置,每个叶子节点的hdd模块的标号的保存容量max相同,且第i个叶子节点对应的ssd模块的标号小于第i+1个叶子节点对应的ssd模块的标号,树的非叶子节点的保存内容均包括节点描述信息和用于索引的(key,value)键值对集合,value为存储第key个叶子节点的ssd模块的标号,非叶子节点中父节点的索引范围包含该父节点的子节点的索引范围,头部描述信息和节点描述信息均包括存储所在节点的sdd模块的标号,m、i均为正整数,i<m<m。

还需要说明的是,在本说明书中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1