一种存储预读方法、装置及存储系统与流程

文档序号:12905868阅读:247来源:国知局
一种存储预读方法、装置及存储系统与流程

本发明涉及存储技术领域,特别是涉及一种存储预读方法、装置及存储系统。



背景技术:

随着信息技术的发展,数据量越来越多,据预测,到2020年,全球数据量将膨胀到40000eb,如何存储和处理这些数据是整个it行业面临的问题。高效的处理大量的数据是一个系统工程,存储系统是系统工程中一个重要的环节。具体的,存储系统包括磁盘,磁盘的读、写速度影响到存储系统的性能,对磁盘中的数据进行预读能够提高存储系统读数据的速度。

现有技术中的预读方案是通过文件系统记录不同应用向同一文件发出的io请求,io请求可以用position读取位置和length数据偏移量来表示,记作(pos,len),文件系统记录上一次应用的io请求在文件中的读取位置和数据偏移量,并与本次应用的io请求在该文件的读取位置进行比较,判断两次应用io请求在文件中的读取位置是否是连续的,如果是连续的,则启动预读。例如,上一次io请求为(100,128),即在位置100处开始读取128个字节,本次io请求为(229,200),即在位置229处开始读取200个字节,则可以认为本次io请求和上次io请求是连续的,可以启动预读。

由于现有技术中的预读方案的判断条件过于理想化,而在实际操作中,应用千差万别,因此很难有某个应用的io请求完全符合现有技术中的算法要求,也即很难有某个应用的io请求都是连续读数据的,所以表现出来就是预读少,或者甚至根本没有启动预读。

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



技术实现要素:

本发明的目的是提供一种存储预读方法、装置及存储系统,提高了预读判断的准确性,提升了存储系统读数据的速度,提高了存储系统的性能。

为解决上述技术问题,本发明提供了一种存储预读方法,应用于存储系统,包括:

步骤s11:预先建立用于读取文件的历史的io请求队列,io请求包括位置和数据偏移量,所述io请求的地址区间为[位置,位置+数据偏移量];

步骤s12:获取用于读取所述文件的当前io请求;

步骤s13:当所述io请求队列中不存在历史io请求的地址区间与所述当前io请求的地址区间相交,且,地址区间的末端位置在所述当前io请求的地址区间的起始位置之前的且两者的差值数值大于第一阈值,且,地址区间的起始位置在所述当前io请求的地址区间的末端位置之后且两者的差值数值大于所述第一阈值时,不启动预读,否则,启动预读。

优选地,所述io请求队列中的历史io请求为时间上距离当前最近的预设长度的io请求。

优选地,步骤s13具体为:

当所述io请求队列中存在历史io请求的地址区间与所述当前io请求的地址区间相交时,启动预读。

优选地,步骤s13具体为:

当所述io请求队列中不存在历史io请求的地址区间与所述当前io请求的地址区间相交,但是存在地址区间的末端位置在所述当前io请求的地址区间的起始位置之前的且两者的差值数值不大于第一阈值,和/或,存在地址区间的起始位置在所述当前io请求的地址区间的末端位置之后且两者的差值数值不大于所述第一阈值时,启动预读。

优选地,步骤s12和步骤s13之间,该方法还包括:

将所述当前io请求加入所述历史的io请求队列,更新所述历史的io请求队列。

优选地,该方法还包括:

根据所述当前io请求读取所述文件。

优选地,该方法还包括:

计算本次缓存命中率,其中,缓存命中率为:

优选地,该方法还包括:

获取历史缓存命中率;

判断所述本次缓存命中率和所述本次缓存命中率的前n次历史缓存命中率是否是逐步增大,如果是,则提高预读数据量,否则,判断本次缓存命中率和本次缓存命中率的前n次历史缓存命中率是否是逐步减小,如果是,降低所述预读数据量,其中,n为不小于1的正整数,其中,提高和降低所述预读数据量时以分条为单位。

为解决上述技术问题,本发明还提供了一种存储预读装置,应用于存储系统,包括:

历史队列建立单元,用于预先建立用于读取文件的历史的io请求队列,io请求包括位置和数据偏移量,所述io请求的地址区间为[位置,位置+数据偏移量];

获取单元,用于获取用于读取所述文件的当前io请求;

预读启动单元,用于当所述io请求队列中不存在历史io请求的地址区间与所述当前io请求的地址区间相交,且,地址区间的末端位置在所述当前io请求的地址区间的起始位置之前的且两者的差值数值大于第一阈值,且,地址区间的起始位置在所述当前io请求的地址区间的末端位置之后且两者的差值数值大于所述第一阈值时,不启动预读,否则,启动预读。

为解决上述技术问题,本发明还提供了一种存储系统,包括如上述所述的存储预读装置。

本发明提供了一种存储预读方法,应用于存储系统,包括预先建立用于读取文件的历史的io请求队列,io请求包括位置和数据偏移量,io请求的地址区间为[位置,位置+数据偏移量];获取用于读取文件的当前io请求;当io请求队列中不存在历史io请求的地址区间与当前io请求的地址区间相交,且,地址区间的末端位置在当前io请求的地址区间的起始位置之前的且两者的差值数值大于第一阈值,且,地址区间的起始位置在当前io请求的地址区间的末端位置之后且两者的差值数值大于第一阈值时,不启动预读,否则,启动预读。

可见,本申请中在进行预读判断时,考虑到历史io请求是在很大程度上能够体现当前这段时间是否会读取相应数据的,因此将当前io请求和历史io请求结合起来,通过地址区间来判断当前io请求和历史io请求的关联性,只有在关联性比较大时才启动预读,否则,不启动预读,因此,本申请提高了预读判断的准确性,提升了存储系统读数据的速度,提高了存储系统的性能。

本发明还提供了一种存储预读装置及系统,具有如上有益效果。

附图说明

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

图1为本发明提供的一种存储预读方法的过程的流程图;

图2为本发明提供的一种判断是否预读的原理图;

图3为本发明提供的另一种判断是否预读的原理图;

图4为本发明提供的一种存储预读装置的结构示意图。

具体实施方式

本发明的核心是提供一种存储预读方法、装置及存储系统,提高了预读判断的准确性,提升了存储系统读数据的速度,提高了存储系统的性能。

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

请参照图1,图1为本发明提供的一种存储预读方法的过程的流程图,应用于存储系统,该方法包括:

步骤s11:预先建立用于读取文件的历史的io请求队列,io请求包括位置和数据偏移量,io请求的地址区间为[位置,位置+数据偏移量];

具体地,对于一个文件来说,用于读取它的数据的io请求会有很多,且其是有一定规律性的,为了准确地对是否启动预读进行判断,本申请中将一个文件的历史io请求建立队列,得到历史的io请求队列,为后续是否启动预读打下基础。

另外,这里的io请求的地址区间为[位置,位置+数据偏移量],具体地,当io请求为(220,50)时,则该io请求的地址区间为[220,270]。

步骤s12:获取用于读取文件的当前io请求;

步骤s13:当io请求队列中不存在历史io请求的地址区间与当前io请求的地址区间相交,且,地址区间的末端位置在当前io请求的地址区间的起始位置之前的且两者的差值数值大于第一阈值,且,地址区间的起始位置在当前io请求的地址区间的末端位置之后且两者的差值数值大于第一阈值时,不启动预读,否则,启动预读。

具体地,在获取到当前io请求后,判断历史的io请求队列中是否存在历史io请求的地址区间与当前io请求的地址区间相交,如果不相交,则再判断地址区间的末端位置在当前io请求的地址区间的起始位置之前的,且这些末端位置与当前io请求的地址区间的起始位置的差值的数据是否大于第一阈值,如果是,则再判断地址区间的起始位置在当前io请求的地址区间的末端位置之后的,且这些起始位置与当前io请求的地址区间的末端位置的差值数值是否大于第一阈值,如果是,则不启动预读,否则,启动预读。

另外,本申请对于这里的第一阈值的大小不做特别的限定,根据实际情况来定。

可见,本申请中在进行预读判断时,考虑到历史io请求是在很大程度上能够体现当前这段时间是否会读取相应数据的,因此将当前io请求和历史io请求结合起来,通过地址区间来判断当前io请求和历史io请求的关联性,只有在关联性比较大时才启动预读,否则,不启动预读,因此,本申请提高了预读判断的准确性,提升了存储系统读数据的速度,提高了存储系统的性能。

在上述实施例的基础上:

作为一种优选地实施例,io请求队列中的历史io请求为时间上距离当前最近的预设长度的io请求。

具体地,考虑到实际应用中,一个文件的io请求可能非常多,如果都建立io请求队列,一方面,占用的空间较多,另一方面,如果是距离当前io请求时间较长的io请求,用其来作为判断是否进行预读的依据可能效果也不是那么好,因此,本申请中io请求队列中的历史io请求为时间上距离当前最近的预设长度的io请求,一方面,节省了空间,另一方面,预判的准确性高。

具体地,这里的预设长度为16,则io请求队列中为当前io请求之前的16次历史io请求,本申请对于这里的预设长度不做特别的限定,根据实际情况来定。

作为一种优选地实施例,步骤s13具体为:

当io请求队列中存在历史io请求的地址区间与当前io请求的地址区间相交时,启动预读。

可以理解的是,如果io请求队列中存在历史io请求的地址区间与当前io请求的地址区间相交,则说明当前io请求要读取的数据最近读取过,即将要读的几率很大,因此,此时可以启动预读。

具体地,请参照图2,图2为本发明提供的一种判断是否预读的原理图。

从图2中可见,当前io请求为(220,50),该io请求的地址区间为[220,270],与io请求队列中的一个历史io请求(200,50)的地址区间[200,250]有相交,相交部分为[220,250]。

作为一种优选地实施例,步骤s13具体为:

当io请求队列中不存在历史io请求的地址区间与当前io请求的地址区间相交,但是存在地址区间的末端位置在当前io请求的地址区间的起始位置之前的且两者的差值数值不大于第一阈值,和/或,存在地址区间的起始位置在当前io请求的地址区间的末端位置之后且两者的差值数值不大于第一阈值时,启动预读。

可以理解的是,考虑到存在一些情况,虽然当前io请求的地址区间与历史io请求的地址区间均不相交,但是离历史io请求的地址区间很近,这种情况则也可以启动预读。

具体地,请参照图3,图3为本发明提供的另一种判断是否预读的原理图。

从图3中可见,当前io请求为(400,50),该io请求的地址区间为[400,450],其地址区间的起始位置400距离一个历史io请求的末端位置250较近,且该案例中比较巧合的是,其地址区间的末端位置450距离另一个历史io请求的起始位置600也较近,该种情况下可以启动预读。在更多情况下,满足其中一个条件即可启动预读。

作为一种优选地实施例,步骤s12和步骤s13之间,该方法还包括:

将当前io请求加入历史的io请求队列,更新历史的io请求队列。

具体地,由于io请求队列的长度是一定的,因此,在把当前io请求加入后,则将距离当前io请求时间最长的那个历史io请求删除,以实现对历史的io请求队列的更新。

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

根据当前io请求读取文件。

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

计算本次缓存命中率,其中,缓存命中率为:

为了判断本发明提供的预读的准确性,可以计算下每次的命中率,方面后续预读策略的调整。

具体地,命中率越高,则说明预读的数据中很多数据都被读取了,在计算命中率时,命中缓存中的数据量及预读数据偏移量均可以以page为单位来计算,当然,还可以采用其他单位来计算,本申请在此不做特别的限定。

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

获取历史缓存命中率;

判断本次缓存命中率和本次缓存命中率的前n次历史缓存命中率是否是逐步增大,如果是,则提高预读数据量,否则,判断本次缓存命中率和本次缓存命中率的前n次历史缓存命中率是否是逐步减小,如果是,降低预读数据量,其中,n为不小于1的正整数,其中,提高和降低预读数据量时以分条为单位。

为了进一步提升存储系统读数据的速度,提高存储系统的性能,如果最近几次的命中率越来越高,还可以提高预读数据量,如果最近几次的命中率越来越低,则可以降低预读数据量,否则,可以保持预读数据量。

可见,本申请中的预读数据量不是固定不变的,也不是简单的递增或者递减,而是根据命中率来适时调整,进一步提升了存储系统读数据的速度,提高了存储系统的性能。

请参照图4,图4为本发明提供的一种存储预读装置的结构示意图,应用于存储系统,该装置包括:

历史队列建立单元1,用于预先建立用于读取文件的历史的io请求队列,io请求包括位置和数据偏移量,io请求的地址区间为[位置,位置+数据偏移量];

获取单元2,用于获取用于读取文件的当前io请求;

预读启动单元3,用于当io请求队列中不存在历史io请求的地址区间与当前io请求的地址区间相交,且,地址区间的末端位置在当前io请求的地址区间的起始位置之前的且两者的差值数值大于第一阈值,且,地址区间的起始位置在当前io请求的地址区间的末端位置之后且两者的差值数值大于第一阈值时,不启动预读,否则,启动预读。

对于本发明提供的一种存储预读装置的介绍请参照上述方法实施例,本发明在此不再赘述。

本发明还提供了一种存储系统,包括如上述的存储预读装置。

对于本发明提供的一种存储系统的介绍请参照上述方法实施例,本发明在此不再赘述。

需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

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

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