一种多路顺序流的检测方法及装置与流程

文档序号:12363571阅读:376来源:国知局
一种多路顺序流的检测方法及装置与流程

本发明涉及计算机存储技术领域,特别是涉及一种多路顺序流的检测方法及装置。



背景技术:

在存储系统中,许多功能模块需要知道当前的数据访问是顺序的还是随机的,根据相应的数据访问的特点做出相应的处理,以期能够得到更高的数据访问系统。例如存储系统的缓存预读功能,因为缓存在从磁盘中预读数据时,总是期望把接下来会被访问到的数据提前读取到缓存中,相比随机访问,顺序访问时预读数据被命中的可能性更高,因此缓存预读功能模块需要知道当前的数据访问是顺序访问还是随机访问。只有在顺序访问时才进行预读操作,提高缓存的命中率,进而提升系统访问性能。又如在具有SSD Cache功能的混合存储阵列中,因为SSD设备作为缓存使用,其相比后端的HDD设备的性能优势在于随机访问时,对于顺序访问其优势微乎其微,因此SSD Cache期望缓存的数据为随机访问的数据,而对于顺序访问的数据则不予缓存,因此SSD Cache功能模块需要知道当前的数据访问是顺序访问还是随机访问,以便做相应的处理。由于存储系统是多个用户并发访问的,因此存储系统需要能够识别多路并发访问的顺序流。

一般的顺序流识别方法能够很好的识别单路顺序流访问,但是对不同地址空间区段的多路并发顺序访问,会识别成随机访问。因此,提供一种对多路并发访问的顺序流进行检测的方法及装置是非常有必要的。



技术实现要素:

本发明的目的是提供一种多路顺序流的检测方法及装置,目的在于解决现有技术中不能对多路并发访问的顺序流进行检测的问题。

为解决上述技术问题,本发明提供一种多路顺序流的检测方法,包括:

接收IO数据访问的请求;

查找历史IO中是否有与当前IO的访问位置连续的IO,所述历史IO包含预设个数通过数组形式保存的IO信息;

如果有,则将历史IO与所述当前IO合并,更新访问位置以及连续访问长度信息,把合并后的IO移到LRU链表的尾部;

判断更新后的连续访问长度是否大于预设阈值;如果是,则认定为顺序IO流。

可选地,在查找历史IO中是否有与当前IO的访问位置连续的IO之后还包括:

如果没有与当前IO的访问位置连续的IO,则把所述当前IO的信息加入LRU链表的尾部,将LRU链表头部的IO淘汰。

可选地,所述查找历史IO中是否有与当前IO的访问位置连续的IO包括:

通过当前IO的访问起始位置key,定位到相对应的hash桶,从所述hash桶中查找与当前IO满足连续条件的历史IO。

可选地,所述IO信息至少包含用于判断当前IO与历史IO的访问位置是否连续的第一成员变量以及用于标识连续访问长度的第二成员变量。

可选地,所述预设个数为64个。

本发明还提供了一种多路顺序流的检测装置,包括:

接收模块,用于接收IO数据访问的请求;

查找模块,用于查找历史IO中是否有与当前IO的访问位置连续的IO,所述历史IO包含预设个数通过数组形式保存的IO信息;

合并模块,用于当历史IO中有与当前IO的访问位置连续的IO时,将历史IO与所述当前IO合并,更新访问位置以及连续访问长度信息,把合并后的IO移到LRU链表的尾部;

判定模块,用于判断更新后的连续访问长度是否大于预设阈值;如果是,则认定为顺序IO流。

可选地,还包括:

链表更新模块,用于当历史IO中没有与当前IO的访问位置连续的IO时,把所述当前IO的信息加入LRU链表的尾部,将LRU链表头部的IO淘汰。

可选地,所述查找模块具体用于:

通过当前IO的访问起始位置key,定位到相对应的hash桶,从所述hash桶中查找与当前IO满足连续条件的历史IO。

本发明所提供的多路顺序流的检测方法及装置,通过接收IO数据访问的请求;查找历史IO中是否有与当前IO的访问位置连续的IO,历史IO包含预设个数通过数组形式保存的IO信息;如果有,则将历史IO与当前IO合并,更新访问位置以及连续访问长度信息,把合并后的IO移到LRU链表的尾部;判断更新后的连续访问长度是否大于预设阈值;如果是,则认定为顺序IO流。本发明所提供的多路顺序流的检测方法及装置,不仅能够识别单路的顺序流,而且能够很好的识别多路并发访问的顺序流。为具有缓存预读功能、SSD Cache功能的存储系统提供一种多路顺序流的识别方法,有效提高了系统的整体性能。

附图说明

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

图1为本发明所提供的多路顺序流的检测方法的一种具体实施方式的流程图;

图2为本发明所提供的多路顺序流的检测方法的另一种具体实施方式中历史IO信息的示意图;

图3为本发明所提供的多路顺序流的检测方法的另一种具体实施方式中历史IO的hash链表组织形式示意图;

图4为本发明所提供的多路顺序流的检测方法的另一种具体实施方式中历史IO的LRU链表组织形式示意图;

图5为本发明所提供的多路顺序流的检测方法的另一种具体实施方式的方法流程图;

图6为本发明所提供的多路顺序流的检测方法的另一种具体实施方式中合并示意图;

图7为本发明实施例提供的多路顺序流的检测装置的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明所提供的多路顺序流的检测方法的一种具体实施方式的流程图如图1所示,该方法包括:

步骤S101:接收IO数据访问的请求;

步骤S102:查找历史IO中是否有与当前IO的访问位置连续的IO,所述历史IO包含预设个数通过数组形式保存的IO信息;

步骤S103:如果有,则将历史IO与所述当前IO合并,更新访问位置以及连续访问长度信息,把合并后的IO移到LRU链表的尾部;

步骤S104:判断更新后的连续访问长度是否大于预设阈值;如果是,则认定为顺序IO流。

需要指出的是,本申请中顺序流指,对存储系统的数据访问是顺序进行的,即从小到大连续的访问一段地址空间内的数据。

多路顺序流存在于多个主机同时对存储系统进行访问的过程,每个主机对存储的系统的访问都是顺序的访问一段地址空间内的数据,多个主机访问的地址空间区段可能不同。

本发明所提供的多路顺序流的检测方法,通过接收IO数据访问的请求;查找历史IO中是否有与当前IO的访问位置连续的IO,历史IO包含预设个数通过数组形式保存的IO信息;如果有,则将历史IO与当前IO合并,更新访问位置以及连续访问长度信息,把合并后的IO移到LRU链表的尾部;判断更新后的连续访问长度是否大于预设阈值;如果是,则认定为顺序IO流。本发明所提供的多路顺序流的检测方法,不仅能够识别单路的顺序流,而且能够很好的识别多路并发访问的顺序流。为具有缓存预读功能、SSD Cache功能的存储系统提供一种多路顺序流的识别方法,有效提高了系统的整体性能。

在上述任一实施例的基础上,本发明所提供的多路顺序流的检测方法中,在步骤S202查找历史IO中是否有与当前IO的访问位置连续的IO之后还可以包括:

如果没有与当前IO的访问位置连续的IO,则把所述当前IO的信息加入LRU链表的尾部,将LRU链表头部的IO淘汰。

进一步地,步骤S202查找历史IO中是否有与当前IO的访问位置连续的IO的过程可以具体为:

通过当前IO的访问起始位置key,定位到相对应的hash桶,从所述hash桶中查找与当前IO满足连续条件的历史IO。

需要指出的是,本发明上述任一实施例中,IO信息至少包含用于判断当前IO与历史IO的访问位置是否连续的第一成员变量以及用于标识连续访问长度的第二成员变量。

预设个数为64个,当然其数目可以根据实际情况进行设置,这均不影响本发明的实现。

如图2本发明所提供的多路顺序流的检测方法的另一种具体实施方式中历史IO信息的示意图所示,本实施例维护了64个最近的历史IO,该64个IO通过数组的形式保存。其中IO信息中的last成员变量为该IO访问的最后一个扇区,作为上述第一成员变量,当前IO可以通过last成员判断当前IO与该历史IO访问位置是否连续;sequential成员为该IO连续访问的长度,即连续度,作为上述第二成员变量。当连续度达到设定的阈值时,即认定为顺序IO流。如图2所示,成员变量还可以包括其他变量,并不限于这两种。

对于这64个历史IO有两种数据组织形式,为了快速的查找当前IO与历史IO是否连续,一种是组织成hash链表的形式,如图3本发明所提供的多路顺序流的检测方法的另一种具体实施方式中历史IO的hash链表组织形式示意图所示。hash key为IO的访问起始位置,通过key定位到相应的hash bucket,并从该bucket中遍历历史IO,从中找与当前IO满足连续关系的历史IO。该hash表的hash桶个数为64个,所以一般情况下不会存在hash冲突,时间复杂度为O(1),最坏的情况的时间复杂度为O(n)。

第二种是把这64个历史IO组织成LRU链表的形式,如图4本发明所提供的多路顺序流的检测方法的另一种具体实施方式中历史IO的LRU链表组织形式示意图所示。由于本方法中维护的是64个最近的历史IO,随着IO访问的进行,会对相对陈旧的历史IO进行淘汰,把最新的IO信息放入LRU链表的尾部,把链表头部相对陈旧的历史IO信息淘汰掉。

本发明所提供的多路顺序流的检测方法的另一种具体实施方式的方法流程图如图5所示,用当前IO的访问起始位置为key,从维护的历史IO的hash的链表中寻找与当前IO满足连续条件(即满足读写位置连续)的历史IO,如果找到满足的条件的历史IO,对这两个IO进行合并,如图6合并示意图所示,把合并后的IO移动到LRU链表的尾部,新合并IO会根据新的last值调整在hash表中的位置,如果合并后的IO的sequntial成员即访问连续度达到设定的阈值,即认定为顺序IO流,如果找不到与当前IO满足连续关系的历史IO,则把当前IO信息放入LRU链表的尾部,把LRU链表的头部历史IO淘汰掉。

下面对本发明实施例提供的多路顺序流的检测装置进行介绍,下文描述的多路顺序流的检测装置与上文描述的多路顺序流的检测方法可相互对应参照。

图7为本发明实施例提供的多路顺序流的检测装置的结构框图,参照图7多路顺序流的检测装置可以包括:

接收模块100,用于接收IO数据访问的请求;

查找模块200,用于查找历史IO中是否有与当前IO的访问位置连续的IO,所述历史IO包含预设个数通过数组形式保存的IO信息;

合并模块300,用于当历史IO中有与当前IO的访问位置连续的IO时,将历史IO与所述当前IO合并,更新访问位置以及连续访问长度信息,把合并后的IO移到LRU链表的尾部;

判定模块400,用于判断更新后的连续访问长度是否大于预设阈值;如果是,则认定为顺序IO流。

在上述实施例的基础上,本发明所提供的多路顺序流的检测装置还可以进一步包括:

链表更新模块,用于当历史IO中没有与当前IO的访问位置连续的IO时,把所述当前IO的信息加入LRU链表的尾部,将LRU链表头部的IO淘汰。

进一步地,本实施例中上述查找模块200可以具体用于:

通过当前IO的访问起始位置key,定位到相对应的hash桶,从所述hash桶中查找与当前IO满足连续条件的历史IO。

本发明所提供的多路顺序流的检测装置,通过接收IO数据访问的请求;查找历史IO中是否有与当前IO的访问位置连续的IO,历史IO包含预设个数通过数组形式保存的IO信息;如果有,则将历史IO与当前IO合并,更新访问位置以及连续访问长度信息,把合并后的IO移到LRU链表的尾部;判断更新后的连续访问长度是否大于预设阈值;如果是,则认定为顺序IO流。本发明所提供的多路顺序流的检测装置,不仅能够识别单路的顺序流,而且能够很好的识别多路并发访问的顺序流。为具有缓存预读功能、SSD Cache功能的存储系统提供一种多路顺序流的识别方法,有效提高了系统的整体性能。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的多路顺序流的检测方法以及装置进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

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