具体实施方式
为了使本技术领域的人员更好地理解本发明实施例的方案,下面结合附图和实施方式对本发明实施例作进一步的详细说明。
本发明实施例分级存储方法及系统,将存储器划分为至少两个不同的层级,每个层级对应的资源池中数据块的大小与其他层级对应的资源池中数据块的大小不同,高层级对应的资源池中数据块的大小大于低层级对应的资源池中数据块的大小;当逻辑卷被访问时,确定被访问数据的I/O特性;根据所述数据的I/O特性,将所述数据在不同层级对应的存储器上迁移由于基于数据的I/O特性对数据进行迁移,因此,在保证数据可靠性的同时,可以有效地提高数据访问性能。
本发明实施例中所指的存储器,包括硬盘、闪存、软盘、半导体存储器、RAM(random access memory,随机存取存储器)等。
如图1所示,是本发明实施例分级存储方法的流程图,包括以下步骤:
步骤101,将存储器划分为至少两个不同的层级,每个层级对应的资源池中数据块的大小与其他层级对应的资源池中数据块的大小不同,高层级对应的资源池中数据块的大小大于低层级对应的资源池中数据块的大小。
比如,可以将存储器划分为三个不同的层级,由低到高分别为:层级0、层级1和层级2。
可选地,在本发明实施例中,在存储器均为硬盘的场景下,可以根据不同类型硬盘的I/O性能对其进行层级的划分。比如,将硬盘划分为三个不同的层级,对应所述I/O性能由高到低分别为:层级0、层级1和层级2。如SSD(SolidState Disk/Driver,固态硬盘)的性能较高,SAS(Serial Attached Small ComputerSystem Interface,串行连接小型计算机系统接口)、FC(Fiber Channel,光纤通道)硬盘的性能其次,SATA(Serial Advanced Technology Attachment,串行高级技术附件)类型硬盘的性能最低,因此当这几种类型的硬盘混插时,就可以将SSD类型的硬盘作为层级0、FC或SAS类型的硬盘作为层级1、SATA类型的硬盘作为层级2,也就是说,性能越高,所属的层级越低,层级高低的顺序与硬盘I/O性能高低的顺序相反。
可选地,若硬盘I/O性能所差无几,也可以无需依据硬盘的I/O性能对其进行层级的划分,例如存储系统中的硬盘均为SAS或SATA,则可以将其分为三个层级,三个层级的大小可以相同也可以不同。
当然,还可以有其它的分层方式,例如,将其他类型的硬盘划分为2个、4个、5个等其他数目的层级,对此本发明实施例不做限定。
进一步,将各层级的存储器虚拟化为数据块时,将各层级的存储器虚拟化为与其他层级存储器的数据块不同大小的数据块,从而生成该层级对应的资源池,即每个层级对应的资源池中数据块的大小与其他层级对应的资源池中数据块的大小不同。在本发明实施例中,不同层级的存储器上的数据块大小不同,层级越低,其对应的数据块越小,存储具有随机I/O特性的数据性能较高;层级越高,其对应的数据块越大,存储具有顺序I/O特性的数据性能较高。
可选地,虚拟化时可以将高层级存储器对应的数据块的大小设定为与所述高层级存储器相邻的低层级存储器对应的数据块的整数倍。比如,层级1的存储器对应的数据块的大小是层级0的存储器对应的数据块的2倍,层级2的存储器对应的数据块的大小是层级1的存储器对应的数据块的2倍。当然,也可以采用其它分块方式,只要保证层级越高对应的数据块越大即可。
步骤102,当逻辑卷被访问时,确定被访问数据的I/O特性。
所述I/O特性包括顺序存取特性和随机存取特性。
所述逻辑卷是指由逻辑磁盘形成的虚拟盘,也可称为磁盘分区。在实际应用中,可以通过逻辑卷管理各存储器上存储的数据。
通过逻辑卷访问存储器的过程如图2所示。
其中,第一层描述的是一个逻辑卷由多个逻辑块组成;第二层描述的是一个逻辑块由多个物理块组成,如图中所示的物理块D、P;第三层描述的是存储器,表示将一个存储器分成了多个物理块。
当一个I/O操作通过逻辑卷访问存储器时,该I/O操作会携带Volume ID(卷标识)、LBA(逻辑块地址)、长度信息,用于指示要访问的逻辑卷、该逻辑卷的逻辑块、以及该逻辑块上的位置及长度。
根据上述信息及逻辑卷中逻辑块与物理块的映射关系表,就可以确定需要访问的数据在存储器及其存储器上的物理位置。上述逻辑块与物理块的映射关系表存储在系统存储器,通过系统文件可以知道其存储地址。
在本发明实施例中,可以通过一个I/O识别模块来确定数据的I/O特性。当逻辑卷被访问时,该模块记录I/O操作对应的LBA和长度信息,并且将当前I/O操作的LBA地址和长度信息与记录的之前I/O操作的LAB地址和长度信息进行比较,如果当前I/O操作的逻辑存储空间与之前I/O操作的逻辑存储空间有重叠或者连续,则表明当前I/O操作相应的数据块中的数据为顺序存取特性的数据,否则,表明相应的数据块中的数据为随机存取特性的数据。这里需要说明的是在实际应用中,“之前I/O操作”不仅指前一次I/O操作,应该被理解为前n次I/O操作,例如5次,以免因访问地址的抖动造成不合理地将连续存取特性判定为随机存取特性。如何设置n的值可以根据经验或测试结果来设定。
本发明实施例还提供了另一种I/O识别模块确定数据I/O特性的方式:当逻辑卷被访问时,该模块记录I/O操作对应的LBA,并且将当前I/O操作的LBA地址与记录的之前I/O操作的LAB地址相比较,若当前I/O操作的LBA与之前I/O操作的LAB地址之间的距离(即差值)小于设定阈值,则表明当前I/O操作相应的数据块中的数据为顺序存取特性的数据,否则,表明相应的数据块中的数据为随机存取特性的数据。可以根据经验来设定阈值。
确定数据I/O特性的方式不限于上述列举的两种。
步骤103,根据所述数据的I/O特性将所述数据在不同层级对应的存储器上迁移,用以使顺序存取的数据存储在高层级,随机存取特性的数据存储在低层级。
在本发明实施例中,不同层级的存储器上的数据块大小不同,层级越低,其对应的数据块越小,存储具有随机I/O特性的数据性能较高;层级越高,其对应的数据块越大,存储具有顺序I/O特性的数据性能较高。因此,可以根据数据的I/O特性,将随机存取特性的数据迁移到低层级的存储器,并将顺序存取特性的数据迁移到高层级的存储器。
具体地,可以根据I/O识别模块的识别结果,确定待迁移的数据。若数据为顺序存取特性的数据,并且在低层级对应的存储器上,则该数据需要迁移到高层级的存储器。若数据为随机存取特性的数据,并且在高层级对应的存储器上,则该数据也需要迁移到低层级的存储器。也就是说,对于顺序存取特性的数据,将其迁移到高层级对应的存储器上,对于随机存取特性的数据,将其迁移到低层级对应的存储器上。
在具体实现上述迁移过程时,可以通过迁移列表的方式来实现,即将每个需要迁移的数据对应的源地址和目的地址组成一个迁移项,将所有迁移项写到一个迁移列表中,然后,对该迁移列表中的每个迁移项按照其对应的源地址读取源数据,然后将读取的源数据写到该迁移项对应的目的地址,最后,根据上述源地址和目的地址,修改逻辑卷中逻辑块与物理块的映射关系表,从而完成数据的迁移过程。
由于不同层级的存储器中数据的分块大小不同,低层级的存储器中数据的分块较小,高层级的存储器中数据的分块较大,因此,在数据迁移过程中,可以将低层级存储器中多个数据块的数据组合后迁移到高层级存储器中的一个空闲块中,反之,将高层级存储器中一个数据块拆分为多个小块,然后将这些小块分别迁移到低层级存储器中的多个空闲块中。
如图3所示,可以将层级0上的第0、2、n个分块中具有顺序存取特性的数据组合后,从层级0迁移到层级1;也可以将层级1上的第n个分块中具有随机存取特性的数据拆分后,从层级1迁移到层级0上的第0、2、n个分块中。此时,将高层级存储器对应的数据块的大小设定为与所述高层级存储器相邻的低层级存储器对应的数据块的整数倍的优势在于,可以节约组合或拆分后需要为不足一个分块的数据分配一个分块时浪费的存储资源。
需要说明的是,上述图3仅仅是一个示意图,具体需要迁移哪些数据,以及对需要迁移的数据如何组合、拆分,需要根据识别出的该数据的I/O特性、所在的层级,以及不同层级的存储器上的数据块大小来确定。
可见,本发明实施例分级存储方法,将存储器划分为不同的层级,每个层级对应的资源池中数据块的大小与其他层级对应的资源池中数据块的大小不同;当逻辑卷被访问时,确定数据的I/O特性;根据所述数据的I/O特性将所述数据在不同层级对应的存储器上迁移。由于基于数据的I/O特性对数据进行迁移,从而使得具有顺序存取特性的数据尽可能存储在物理连续的大分块中,减少了I/O操作中数据迁移的次数,从而减轻了存储器磁头频繁跳动的现象,不但提高了访问性能,还可以延长存储器的使用寿命;对于具有随机存取特性的数据来说,尽可能存储在低层级的、具有小分块的高性能存储器中,从而保证了这类数据的访问性能。
相应地,本发明实施例还提供一种分级存储系统,如图4所示,是该系统的一种结构示意图。
所述系统包括:多个存储器21、22、23,以及配置单元31、数据特性确定单元32和迁移处理单元33。其中:
配置单元31,用于将所述存储器划分为不同的层级,每个层级对应的资源池中数据块的大小与其他层级对应的资源池中数据块的大小不同,高层级对应的资源池中数据块的大小大于低层级对应的资源池中数据块的大小;
数据特性确定单元32,用于当逻辑卷10被访问时,确定所述数据的I/O特性,所述I/O特性包括顺序存取特性和随机存取特性;
迁移处理单元33,用于根据所述数据的I/O特性将所述数据在不同层级对应的存储器上迁移,用以将顺序存取的数据迁移至高层级,随机存取特性的数据迁移至低层级。
在实际应用中,上述配置单元31可以根据硬盘的I/O性能将硬盘划分为三个不同的层级,对应所述I/O性能由高到低分别为:层级0、层级1和层级2。其中,层级0包括SSD;层级1包括SAS类型硬盘和FC类型硬盘;层级2包括SATA类型硬盘。
而且,为了方便对这些不同存储器上数据的管理,可以将高层级对应的数据块设定为与所述高层级相邻的低层级对应的数据块的整数倍。
上述数据特性确定单元32的一种具体结构包括:记录子单元和检查子单元(未图示),其中,记录子单元用于当逻辑卷被访问时,记录I/O操作对应的逻辑块地址和长度信息;检查子单元用于根据当前I/O操作的逻辑块地址和长度与所述记录子单元记录的之前I/O操作的逻辑块地址和长度,判断当前I/O操作的逻辑存储空间与之前I/O操作的逻辑存储空间是否有重叠或者连续,如果有重叠或者连续,则确定所述逻辑块地址对应的数据为顺序存取特性的数据,否则,确定所述逻辑块地址对应的数据为随机存取特性的数据。
上述迁移处理单元33的一种具体结构包括:第一迁移子单元和第二迁移子单元。其中:
具体地,第一迁移子单元,用于如果所述数据为顺序存取特性的数据,并且在低层级的存储器上,则所述数据需要迁移到高层级的存储器;第二迁移子单元,用于如果所述数据为随机存取特性的数据,并且在高层级对应的存储器上,则所述数据需要迁移到低层级的存储器。
迁移处理单元33在根据待访问数据的I/O特性确定需要迁移的数据之后,具体迁移时,可以采用迁移列表的方式来迁移数据,即还包括:
列表生成子单元,用于将所述数据的源地址和目的地址组成一个迁移项写到迁移列表中。
迁移子单元,用于对所述迁移列表中的每个迁移项按照该迁移项中的源地址读取数据,将读取的数据写到该迁移项中的目的地址,然后根据该迁移项中的源地址和目的地址修改所述逻辑卷中逻辑块与物理块的映射关系表。
由于不同层级的存储器中数据的分块不同,低层级的存储器中数据的分块较小,高层级的存储器中数据的分块较大,因此,所述迁移子单元在对数据进行迁移的过程中,可以将低层级存储器中多个数据块的数据组合后迁移到高层级存储器中的一个空闲块中,反之,将高层级存储器中一个数据块拆分为多个小块,然后将这些小块分别迁移到低层级存储器中的多个空闲块中。
数据的具体迁移过程可参照前面本发明实施例分级存储方法中的描述,在此不再赘述。
本发明实施例分级存储系统,每个层级对应的资源池中数据块的大小与其他层级对应的资源池中数据块的大小不同,高层级对应的资源池中数据块的大小大于低层级对应的资源池中数据块的大小;当逻辑卷被访问时,确定数据的I/O特性;根据所述数据的I/O特性将所述数据在不同层级对应的存储器上迁移。由于基于数据的I/O特性对数据进行迁移,从而使得具有顺序存取特性的数据尽可能存储在物理连续的大分块中,减少了I/O操作中数据迁移的次数,从而减轻了存储器磁头频繁跳动的现象,不但提高了访问性能,还可以延长存储器的使用寿命;对于具有随机存取特性的数据来说,尽可能存储在低层级的、具有小分块的高性能存储器中,从而保证了这类数据的访问性能。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上对本发明实施例进行了详细介绍,本文中应用了具体实施方式对本发明进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及设备;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。