发明内容
本发明实施例提供一种数据流识别方法及装置,用以解决现有技术中存在的问题。
本发明实施例提供一种数据流识别方法,包括:
接收主机请求,所述主机请求中包括至少一路数据流,所述主机请求中的每一路数据流中携带请求访问的卷标识,请求访问的逻辑地址以及请求访问的逻辑地址长度;
为所述主机请求中的每一路数据流分配一个滑动窗口,所述滑动窗口具有起始逻辑地址和结束逻辑地址;
根据该路数据流中请求访问的逻辑地址以及请求访问的逻辑地址长度,确定请求访问的逻辑地址范围,以及所述逻辑地址范围在卷中所属的数据块;判断所述数据块的起始逻辑地址和结束逻辑地址是否超出滑动窗口的逻辑地址范围;如果未超出,根据所述数据块的起始逻辑地址或结束逻辑地址将所述数据块加入到所述滑动窗口中;如果所述数据块的起始逻辑地址与所述滑动窗口的起始逻辑地址相同,则更新所述滑动窗口的起始逻辑地址和结束逻辑地址,将所述滑动窗口的起始逻辑地址更新为加入到滑动窗口中的数据块的结束逻辑地址,所述滑动窗口的结束逻辑地址向右移动所述数据块的长度;如果所述数据块的起始逻辑地址与所述滑动窗口的起始逻辑地址不同,且所述数据块的结束逻辑地址不超出所述滑动窗口的结束逻辑地址,则不更新所述滑动窗口的起始逻辑地址和结束逻辑地址;
在第一预设时间内,如果所述滑动窗口的起始逻辑地址和结束逻辑地址均发生更新,且所述滑动窗口的大小不超过预设的最大值,则将该路数据流识别为顺序流。
本发明实施例提供一种数据流识别装置,包括:
接收模块,用于接收主机请求,所述主机请求中包括至少一路数据流,所述主机请求中的每一路数据流中携带请求访问的卷标识,请求访问的逻辑地址以及请求访问的逻辑地址长度;
分配模块,用于为所述主机请求中的每一路数据流分配一个滑动窗口,所述滑动窗口具有起始逻辑地址和结束逻辑地址;
更新模块,用于根据一路数据流中请求访问的数据块更新分配给该路数据流的滑动窗口;所述更新模块包括:确定单元,用于根据该路数据流中请求访问的逻辑地址以及请求访问的逻辑地址长度,确定请求访问的逻辑地址范围,以及所述逻辑地址范围在卷中所属的数据块;判断单元,用于判断所述数据块的起始逻辑地址和结束逻辑地址是否超出滑动窗口的逻辑地址范围;加入单元,用于如果所述判断单元的判断结果为未超出,根据所述数据块的起始逻辑地址或结束逻辑地址将所述数据块加入到所述滑动窗口中;
判定模块,用于判断所述数据块的起始逻辑地址与所述滑动窗口的起始逻辑地址是否相同;如果所述数据块的起始逻辑地址与所述滑动窗口的起始逻辑地址相同,则更新所述滑动窗口的起始逻辑地址和结束逻辑地址,将所述滑动窗口的起始逻辑地址更新为加入到滑动窗口的数据块的结束逻辑地址,所述滑动窗口的结束逻辑地址向右移动所述数据块的长度;如果所述数据块的起始逻辑地址与所述滑动窗口的起始逻辑地址不同,且所述数据块的结束逻辑地址不超出所述滑动窗口的结束逻辑地址,则不更新所述滑动窗口的起始逻辑地址和结束逻辑地址;
识别模块,用于在第一预设时间内,如果所述滑动窗口的起始逻辑地址和结束逻辑地址均发生更新,且所述滑动窗口的大小不超过预设的最大值,则将该路数据流识别为顺序流。
本发明实施例的数据流识别方法及装置,通过为主机请求中的每一路数据流分配一个滑动窗口,并根据一路数据流中请求访问的数据块更新分配给该路数据流的滑动窗口,也即利用滑动窗口对主机请求中的每一路数据流请求访问的数据块进行排序,有效解决了乱序的问题,同时,通过为每路数据流分配一个滑动窗口,有效实现了多路顺序流的识别。本方案提高了在IO乱序和/或多路流并存情况下的顺序流识别能力。识别出顺序流之后,可以达到提升预取的命中率,大幅提高读的性能,增强系统的IO并发处理能力的效果,同时,根据顺序流识别技术可精确限制随机写数据的个数,在顺序写与随机写并存时,大幅提高顺序写的性能。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
存储系统可以是由一个或多个存储单元组成,存储单元可以是磁盘、闪存盘片或其他非易失性存储介质,下文以磁盘为例进行说明,每一个磁盘的容量大小可以依据需要设定。这些磁盘可以映射为包含多个不同卷的主机,不同卷通过不同的卷标识进行区分,不同的卷中可以包含不同类型的数据。以电影电视这种最常见的数据为例,不同的卷可以根据不同的划分标准分为动作片卷、爱情片卷、灾难片卷等等。
图1为本发明实施例提供的数据流识别方法流程图,如图1所示,该方法包括:
步骤101、接收主机请求,该主机请求中包括至少一路数据流。
主机请求既可以是读请求,也可以是写请求,此处不做限定。主机请求中可以包括一路数据流或多路数据流。主机请求中的数据流可以是顺序流,也可以是随机流。以视频点播这种常见的主机请求为例,如果主机请求的是播放一部电影,那么这一路数据流很可能是顺序流。主机请求中的每一路数据流中会携带的参数包括:请求访问的卷标识ID、请求访问的逻辑地址、以及请求访问的逻辑地址长度等。
步骤102、为主机请求中的每一路数据流分配一个滑动窗口。
其中,为每一路数据流分配一个滑动窗口可以包括:为每一路数据流确定滑动窗口的起始逻辑地址和结束逻辑地址。滑动窗口的起始逻辑地址是根据每一路数据流具体接收的请求逻辑地址来确定的,滑动窗口的起始逻辑地址可以根据如下方式确定:
根据请求访问的卷标识确定主机请求访问的存储系统的卷,然后将该路数据流第一个请求访问的逻辑地址,作为滑动窗口的起始逻辑地址。
滑动窗口的结束逻辑地址可以根据如下方式确定:由于滑动窗口的最大值是固定不变的,因此,滑动窗口的起始逻辑地址加上滑动窗口的最大值即为滑动窗口的结束逻辑地址。
这里对逻辑地址进行如下说明:逻辑地址是逻辑块寻址(Logical BlockAddressing,简称为:LBA)地址,是磁盘的上划分卷的地址,卷地址与真正磁盘地址之间是需要转换的。例如,卷的逻辑地址为100,对应磁盘的地址可能是3000等。
当主机请求中存在多路数据流时,存储系统会为每一路数据流分配一个滑动窗口,这时存储系统中会同时存在多个滑动窗口,滑动窗口可以按照LBA进行排序,采用如哈希(Hush)表进行组织。需要说明的是,本发明实施例也可以采用红黑树的数据结构进行组织,以便于记录顺序流的窗口信息。
步骤103、根据一路数据流中请求访问的数据块更新分配给该路数据流的滑动窗口。
换言之,步骤103可以理解为利用分配的滑动窗口对每一路数据流中请求访问的数据块进行排序。
这里所说的数据块由存储系统的一个卷中的部分连续逻辑地址的数据组成,数据块的大小为预先划分的。预先划分数据块的步骤可以发生在步骤101之前。具体包括:将存储系统划分为若干相同大小的数据块,每一个数据块具有起始逻辑地址和结束逻辑地址。将存储系统划分为若干相同大小的数据块可以理解为对每一个卷分别进行划分。一个数据块的大小可以为16k或者32k,根据实际需要进行划分,此处不做限定。相应的,如果步骤101中主机请求中的数据流为顺序流,则主机请求中的该路数据流会依次访问步骤100中划分的数据块,如果主机请求中的数据流为随机流,则主机请求中的该路数据流访问步骤100中划分的数据块是随机的。滑动窗口的最大值可以为步骤100中划分的数据块的n倍,n为大于1的正整数,优选n的数值可以为1024或者2048等。
正如上面所述的,如果主机请求是顺序流,那么主机请求中请求访问的逻辑地址范围(以及对应的数据块)应该是连续的,这些连续的逻辑地址范围在到达存储系统时可能会乱序,但从一定时间内的整体上来看,请求还是依次访问卷中的多个数据块的。因此,可以利用一个滑动窗口对可能乱序的数据块进行排序。
可选的,具体的排序方法包括:
1、读取该路数据流中请求访问的逻辑地址和请求访问的逻辑地址长度。
2、将请求访问的逻辑地址和请求访问的逻辑地址长度相加和可以确定请求访问的逻辑地址范围,并确定该逻辑地址范围属于哪一个或者哪几个数据块。
具体的判断方法是:判断该请求访问的逻辑地址是否处于某一数据块的起始逻辑地址和结束逻辑地址之间,如果是,则该请求访问的逻辑地址属于该数据块。也即可以认为,请求访问的是该数据块中的数据。请求访问的逻辑地址范围可以会覆盖多个数据块,这种情况下,多个数据块是逻辑地址连续的,所以,也可以变相地理解为是一个大的数据块。这个大的数据块的起始逻辑地址是请求访问的第一个逻辑地址对应的数据块的起始逻辑地址,这个大的数据块的结束逻辑地址是请求访问的最后一个逻辑地址对应的数据块的结束逻辑地址。在后续描述中,如果涉及到请求访问的逻辑地址范围覆盖多个数据块的情况,提到的数据块均可以理解为是这个大的数据块。
3、判断已确定的数据块是否超出滑动窗口的逻辑地址范围。
换句话讲,也即判断已确定的数据块是否位于滑动窗口的起始逻辑地址和结束逻辑地址之间,如果位于,则说明已确定的数据块未超出滑动窗口的逻辑地址范围。
4、如果未超出,按照逻辑地址的顺序,将已确定的数据块加入到滑动窗口中。
需要说明的是,滑动窗口实际上是通过起始逻辑地址和结束逻辑地址来界定的一个逻辑地址范围。如果已确定的数据块的起始逻辑地址和结束逻辑地址并没有超出该逻辑地址范围,则按照逻辑地址的顺序将已确定的数据块加入该滑动窗口。下面结合具体实例对排序过程进行说明,需要说明的是,这里仅以对一个一个的数据块进行排序为例进行说明,对于连续多个数据块(即前面所说的一个大的数据块)的情况,可以参考该说明,不做赘述。
如图2a至图2c所示的将已确定的数据块加入到滑动窗口中的过程示意图,假设读取一路数据流中请求访问的逻辑地址后确定请求访问的逻辑地址属于数据块D03,滑动窗口的逻辑地址范围从数据块D01的起始逻辑地址到数据块D07的结束逻辑地址,则将该数据块D03加入到滑动窗口中。然后,读取该路数据流中请求访问的逻辑地址后确定请求访问的逻辑地址属于数据块D04,则将该数据块D04加入到滑动窗口中。再次,读取该路数据流中请求访问的逻辑地址后确定请求访问的逻辑地址属于数据块D01,则将该数据块D01加入到滑动窗口中,此时发现该数据块D01的起始逻辑地址与滑动窗口的起始逻辑地址相同,需要更新滑动窗口的起始逻辑地址和结束逻辑地址,即可以将滑动窗口的逻辑地址范围更新为从数据块D02的起始逻辑地址至数据块D08的结束逻辑地址。并依次类推。
5、判断是否需要更新滑动窗口的起始逻辑地址和结束逻辑地址。
如果需要,更新滑动窗口的起始逻辑地址和结束逻辑地址。
如果加入到滑动窗口中的数据块的起始逻辑地址与滑动窗口的起始逻辑地址相同,则更新滑动窗口的起始逻辑地址和结束逻辑地址,可选的:滑动窗口的起始逻辑地址更新为该加入到滑动窗口中的数据块的结束逻辑地址,结束逻辑地址也可以相应的更新,即可以理解为向右移动该数据块的长度。如果加入到滑动窗口中的数据块的起始逻辑地址与滑动窗口的起始逻辑地址不相同,则不更新滑动窗口的起始逻辑地址。
需要说明的是,本发明实施例可以将滑动窗口的起始逻辑地址更新为加入到滑动窗口中的数据块的结束逻辑地址,有多个连续的数据块加入到滑动窗口中时,滑动窗口的起始逻辑地址可以更新为多个连续的数据块中的最后一个数据块的结束逻辑地址。相应的,滑动窗口的结束逻辑地址也可以相应的更新,即可以理解为结束逻辑地址向右移动一个或多个数据块的长度,本发明在此仅作为示例,本发明也可以根据实际的需要更新其逻辑地址和结束逻辑地址,例如,将滑动窗口的起始逻辑地址更新为预定值,需要参考IO请求的大小以及数据块的大小等,然后,将结束逻辑地址也可以进行相应的更新,本发明不以此为限。
对于滑动窗口向右移动数据块的长度,需要说明的是:当滑动窗口接收到数据块后,这个滑动窗口即会不时地向右移动,也即滑动窗口的起始逻辑地址和结束逻辑地址会不时地发生更新。滑动窗口的左边沿(起始逻辑地址)向右边沿(结束逻辑地址)靠近时称之为滑动窗口的合拢,这种现象发生在接收到顺序数据块时;滑动窗口的右边沿向右移动称之为滑动窗口的张开,有可能会超过最大值,这种现象发生在接收到非顺序数据块时。
步骤104、如果在第一预设时间内,滑动窗口的起始逻辑地址和结束逻辑地址均发生更新,且滑动窗口的大小不超过预设的最大值,则将该路数据流识别为顺序流。
例如,滑动窗口大小可以设置为1024也可以是2048。
简单解释如下:如果一路数据流是顺序流,那么主机请求中请求访问的逻辑地址(以及对应的数据块)应该是连续的,这些连续的逻辑地址在到达存储系统时可能会乱序,但从一定时间内的整体上来看,请求还是依次访问卷中的多个数据块的。依次访问卷中的多个数据块,就使得滑动窗口不断地向右滑动,即滑动窗口的起始逻辑地址和结束逻辑地址不断以一个或多个数据块的逻辑地址范围为单位向右移动,而且不会超出预设的最大值。如果某一路数据流满足上述条件,便可以将该路数据流识别为顺序流。
进一步的,可选的,如果在第一预设时间内,滑动窗口的起始逻辑地址不更新,而结束逻辑地址不断向右更新,且超过滑动窗口的最大值,则说明该路数据流是随机流;如果在第二预设时间内滑动窗口的起始逻辑地址和结束逻辑地址均不再发生更新,则说明该路顺序流已经结束。需要说明的是,第一预设时间和第二预设时间均为本领域技术人员根据对滑动窗口技术的经验进行的设定,针对不同的系统和不同的情况可以设置为不同的数值,此处不做具体的限定。
具体举例如下:假设给定的一路数据流,其第一个请求访问的逻辑地址加上请求访问的逻辑地址就是为该路流分配的滑动窗口的起始逻辑地址。若第二个请求访问的逻辑地址与滑动窗口的起始逻辑地址相同,则更新滑动窗口的起始逻辑地址为第二个请求访问的逻辑地址加上请求访问的逻辑地址长度之后得到的逻辑地址,此时滑动窗口的结束逻辑地址发生更新,更新为更新后的起始逻辑地址加上滑动窗口的最大值。若第二个请求访问的逻辑地址与滑动窗口的起始逻辑地址不同,则更新滑动窗口的结束逻辑地址为第二个请求访问的逻辑地址加上请求访问的逻辑地址长度之后得到的逻辑地址,此时,滑动窗口的起始逻辑地址不发生更新。如果起始逻辑地址不发生更新,而结束逻辑地址不断发生更新,并超出了滑动窗口的最大值,说明给定的该路数据流为随机流。如果起始逻辑地址不断发生更新,且结束逻辑地址也不断发生更新,并且没有超出滑动窗口的最大值,说明给定的该路数据流的顺序流。如果一个滑动窗口的起始逻辑地址和结束逻辑地址在第二预设时间内如3分钟或者5分钟等等均没有发生更新,则说明该路数据流结束。
本发明实施例提供的数据流识别方法,通过为主机请求中的每一路数据流分配一个滑动窗口,并根据一路数据流中请求访问的数据块更新分配给该路数据流的滑动窗口,也即利用滑动窗口对主机请求中的每一路数据流请求访问的数据块进行排序,有效解决了乱序的问题,同时,通过为每路数据流分配一个滑动窗口,有效实现了多路顺序流的识别。本领域技术人员可以理解,实现多路顺序流识别功能,提升预取的命中率,大幅提高读数据的性能,增强系统的IO并发处理能力;多路顺序流识别可精确限制随机写数据的个数,在顺序写与随机写并存时,通过限制随机写占用的资源数,大幅提高顺序写数据的性能。
图3为本发明实施例提供的数据流识别装置的结构示意图,如图3所示,该数据流识别装置包括:接收模块301、分配模块302、更新模块303以及识别模块304。其中,接收模块301用于接收主机请求,该主机请求中包括至少一路数据流;分配模块302用于为主机请求中的每一路数据流分配一个滑动窗口,该滑动窗口具有起始逻辑地址和结束逻辑地址;更新模块303用于根据一路数据流中请求访问的数据块更新分配给该路数据流的滑动窗口;识别模块304用于如果在第一预设时间内,滑动窗口的起始逻辑地址和结束逻辑地址均发生更新,且滑动窗口的大小不超过预设的最大值,则将该路数据流识别为顺序流。
可选的,一种实施方式下,主机请求中的每一路数据流中携带请求访问的卷标识,请求访问的逻辑地址以及请求访问的逻辑地址长度,则分配模块302包括:确定单元,起始地址获得单元,以及结束地址获得单元。其中,确定单元用于根据请求访问的卷标识在存储系统中确定请求访问的卷;起始地址获得单元用于将请求访问的逻辑地址获得滑动窗口在请求访问的卷中的起始逻辑地址;结束地址获得单元用于根据滑动窗口的预设的最大值以及滑动窗口的起始逻辑地址获得滑动窗口的结束逻辑地址。
可选的,一种实施方式下,主机请求中的每一路数据流中携带请求访问的卷标识,请求访问的逻辑地址以及请求访问的逻辑地址长度,则更新模块303包括:确定单元,判断单元,以及加入单元。其中的确定单元用于根据该路数据流中请求访问的逻辑地址和请求访问的逻辑地址长度,确定请求访问的逻辑地址在卷中所属的数据块;判断单元用于判断数据块的起始逻辑地址和结束逻辑地址是否超出滑动窗口的逻辑地址范围;加入单元用于如果判断单元的判断结果为未超出,根据数据块的起始逻辑地址或结束逻辑地址将数据块加入到滑动窗口中。
在上述实施方式的基础上,可选的,该装置还可以包括:判定模块,用于判断数据块的起始逻辑地址与滑动窗口的起始逻辑地址是否相同;如果数据块的起始逻辑地址与滑动窗口的起始逻辑地址相同,则判定更新滑动窗口的起始逻辑地址和结束逻辑地址。如果数据块的起始逻辑地址与滑动窗口的起始逻辑地址不同,且数据块的结束逻辑地址不超出滑动窗口的结束逻辑地址,则判定不更新滑动窗口的起始逻辑地址和结束逻辑地址。
进一步的,该装置还可以包括:划分模块,用于将存储系统中的卷划分为多个相同大小的数据块,每一个数据块具有起始逻辑地址和结束逻辑地址。
本发明实施例提供的数据流识别装置,可以使用在分布式系统中,也可以使用在集中式系统中。其具体的产品形态可以为存储区域网络(StorageArea Network,简称为:SAN),也可以为网络附属存储(Network AttachedStorage,简称为:NAS)。通过为主机请求中的每一路数据流分配一个滑动窗口,并根据一路数据流中请求访问的数据块更新分配给该路数据流的滑动窗口,也即利用滑动窗口对主机请求中的每一路数据流请求访问的数据块进行排序,有效解决了乱序的问题,同时,通过为每路数据流分配一个滑动窗口,有效实现了多路顺序流的识别。本方案提高了在IO乱序和/或多路流并存情况下的顺序流识别能力。识别出顺序流之后,可以达到提升预取的命中率,大幅提高读的性能,增强系统的IO并发处理能力的效果,同时,根据顺序流识别技术可精确限制随机写数据的个数,在顺序写与随机写并存时,大幅提高顺序写的性能。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。