掌桥专利:专业的专利平台
掌桥专利
首页

数据预取方法及装置

文献发布时间:2023-06-19 09:29:07


数据预取方法及装置

技术领域

本申请涉及存储技术领域,特别涉及一种数据预取方法及装置。

背景技术

在存储设备中,缓存的访问速度比硬盘的访问速度快,因此,在应用中,当接收到一个读数据请求时,可以根据该读数据请求对下一个读数据请求所要读取的数据进行预测,并提前将预测的数据从硬盘中读取到缓存中来。这样,当存储设备接收到读数据请求时,可以实现缓存中数据的读命中,从而大大提高读数据请求的处理速度。

相关技术中,存储设备在接收到读数据请求时,可以根据该读数据请求包括的待读取数据的逻辑地址,确定待读取数据所在的数据块。之后,确定与待读取数据所在的数据块有关联关系的至少一个数据块,并将确定的至少一个数据块的数据预取至缓存。

由此可见,相关技术中通常均是直接预取整个数据块的数据至缓存中,然而,由于数据块的粒度通常远远大于读数据请求所要读取的数据粒度,因此,通过上述方法预取的数据量往往偏大,这不仅导致了较大的预取浪费率,还将导致读盘压力较大。

发明内容

本申请提供了一种数据预取方法及装置,可以用于解决相关技术中预取浪费率大且读盘压力较大的额问题。所述技术方案如下:

第一方面,提供了一种数据预取方法,应用于存储设备,所述方法包括:接收读数据请求,所述读数据请求包括待读取数据的逻辑地址;根据所述待读取数据的逻辑地址确定所述待读取数据所在的第一数据块,所述待读取数据的逻辑地址是所述第一数据块的逻辑地址区间的子集;选择与所述第一数据块有关联关系的第二数据块,所述第二数据块的逻辑地址区间包括多个子区间;根据每个子区间的访问频率从所述多个子区间中确定目标子区间;将所述目标子区间中存储的数据预取至缓存。

在本申请实施例中,在确定与待读取数据所在的第一数据块有关联关系的第二数据块之后,可以根据第二数据块中各个子区间的访问频率来确定目标子区间,并将目标子区间中的数据预取至缓存。也即,本申请可以根据各个子区间的访问频率更为精细的预取数据块中某些区间内的数据,相对于直接预取整个数据块中的数据,减小了预取的数据量,降低了预取浪费率。并且,由于减小了预取的数据量,因此,降低了读盘压力。

可选地,所述存储设备包括多个数据块。相应地,所述选择与所述第一数据块有关联关系的第二数据块的实现过程可以为:分别计算每个数据块与所述第一数据块的关联度;将关联度超过设定的关联阈值的数据块作为所述第二数据块。

其中,每个数据块与第一数据块的关联度的大小可以用于指示在访问第一数据块之后,下一次访问的数据块为该数据块的概率。通过计算每个数据块与第一数据块的关联度,可以确定出读取第一数据块之后,下一个最有可能读取的数据块。这样,可以提高预取的准确度。

可选地,所述分别计算每个数据块与所述第一数据块的关联度的实现过程可以包括:根据设定的算法分别计算每个数据块与所述第一数据块的关联度,所述设定的算法包括条件概率法、贝叶斯算法、卷积神经网络算法、长短期记忆网络算法、神经网络算法、循环神经网络算法、概率图模型算法中的任意一种。

可选地,所述方法还包括:根据所述存储设备的性能调整所述关联阈值。

在本申请中,可以根据存储设备的性能来动态的调整关联阈值的大小,以此来调节预取的数据的数据量的多少,这样,可以更好的控制读盘压力,以及更好的控制命中率与浪费率之间的平衡。

可选地,所述目标子区间的访问频率大于设定的频率阈值。

在本申请中,预取的目标子区间的访问频率大于设定的频率阈值,这样,预取的目标子区间将不为访问频率为0的子区间,也即,预取的目标子区间均是访问频率较高的区间,这样,可以提高预取的准确度。

可选地,所述目标子区间的访问热度大于设定的热度阈值,所述目标子区间的访问热度根据所述目标子区间的访问频率与所述第二数据块的关联度确定得到。

在本申请中,也可以通过各个子区间的访问热度来选取访问热度相对较高的目标子区间。由于访问热度根据子区间的访问频率与子区间所属的数据块与第一数据块之间的关联度确定得到,这样,根据该访问热度选取得到的目标子区间中的数据后续被命中的概率更大,也即,可以有效提高预取数据的命中率。

第二方面,提供了一种数据预取装置,所述数据预取装置具有实现上述第一方面中数据预取方法行为的功能。所述数据预取装置包括至少一个模块,该至少一个模块用于实现上述第一方面所提供的数据预取方法。

第三方面,提供了一种数据预取装置,所述数据预取装置的结构中包括处理器和存储器,所述存储器用于存储支持数据访问装置执行上述第一方面所提供的数据预取方法的程序,以及存储用于实现上述第一方面所提供的数据预取方法所涉及的数据。所述处理器被配置为用于执行所述存储器中存储的程序。所述存储设备的操作装置还可以包括通信总线,该通信总线用于该处理器与存储器之间建立连接。

第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的数据预取方法。

第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的数据预取方法。

上述第二方面、第三方面、第四方面和第五方面所获得的技术效果与第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。

本申请提供的技术方案带来的有益效果至少包括:

在本申请实施例中,在确定与待读取数据所在的第一数据块有关联关系的第二数据块之后,可以根据第二数据块中各个子区间的访问频率来确定目标子区间,并将目标子区间中的数据预取至缓存。也即,本申请可以根据各个子区间的访问频率更为精细的预取数据块中某些区间内的数据,相对于直接预取整个数据块中的数据,减小了预取的数据量,降低了预取浪费率。并且,由于减小了预取的数据量,因此,降低了读盘压力。

附图说明

图1是本申请实施例提供的数据预取方法所涉及的存储系统的示意图;

图2是本申请实施例提供的一种数据预取方法的流程图;

图3是本申请实施例提供的一种数据块中的子区间的划分示意图;

图4是本申请实施例示出的一种数据预取装置的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

在对本申请实施例进行详细的解释说明之前,先对本申请实施例涉及的系统架构进行介绍。

图1是本申请实施例提供的数据预取方法所涉及的存储系统架构图。如图1所示,该存储系统包括主机01、控制器02和多个硬盘03。主机01和控制器02之间通过网络文件系统(英文全称:Network File System,英文简称:NFS)/通用网络文件系统(英文全称:Common Internet File System,英文简称:CIFS)协议或者光纤通道(英文全称:FiberChannel,英文简称:FC)协议进行通信。具体的,主机01可以向控制器02发送写数据请求,控制器02接收写数据请求之后将写数据请求携带的数据写入硬盘03中。另外,主机01还可以向控制器02发送读数据请求,控制器02接收读数据请求之后,根据读数据请求中的待读取数据的逻辑地址查找其缓存102中是否保存有待读取数据,如果有则直接将待读取的数据发送给主机01,如果没有则从硬盘03中获得该数据并发送给主机01。其中,控制器02和硬盘03可以集成在一个存储设备中,也可以位于相互独立的两个设备中,本申请实施例不对控制器02和硬盘03的位置关系做任何限定。

以读数据请求为例,当用户在主机01上或者与主机01连接的客户端上提起一个较大的读数据请求时,主机01往往将该读数据请求拆分成多个请求发送给控制器02处理。将读数据请求拆分成多个请求的操作可以由主机01中的主机总线适配器(Host BusAdapter,HBA)执行,也可以由控制器02中的HBA执行。拆分后的每个请求的大小可以相同也可以不相同,本实施例不对拆分后的读数据请求的大小进行限定。另外,拆分后的多个读数据请求的逻辑地址是连续的。这种逻辑地址连续的多个读数据请求被称为顺序流。主机01可以将顺序流中的多个读数据请求串行地发送给控制器02处理,也可以将顺序流中的多个读数据请求并行地发送给控制器02处理。其中,串行地发送给控制器02处理的顺序流叫做串行顺序流,并行地发送给控制器02处理的顺序流叫做并行顺序流。对于串行顺序流,主机01依次将连续的多个读数据请求中的每个读数据请求发送给控制器02,待上一个读数据请求处理完毕之后再发送下一个读数据请求。对于并行顺序流,主机01向控制器02发送连续的多个读数据请求中的至少两个读数据请求,存储设备可并行处理至少两个读数据请求。假设主机01向控制器02发送9个读数据请求,如果这9个读数据请求是串行处理的,那么主机01首先发送第一个读数据请求,待接收第一个读数据请求的响应结果之后再发送第二个读数据请求,待接收第二个读数据请求的响应结果之后再发送第三个读数据请求,依此类推,直至这9个读数据请求全部处理完毕。如果这9个读数据请求是并行处理的,那么主机01可以同时将第一个读数据请求、第二个读数据请求以及第三个读数据请求发送给控制器02,控制器02并行处理这三个读数据请求,当第一个读数据请求处理完毕时,即使第二个读数据请求或者第三个数据访问请求尚未处理完毕,主机01都可以向控制器02发送第四个读数据请求,依此类推,直至这9个读数据请求全部处理完毕。

需要说明的是,如图1所示,控制器02至少包括处理器021和缓存022。

处理器021是一个中央处理器(英文:central processing unit,CPU)。在本申请实施例中,处理器021可以用于接收来自主机01的读数据请求以及写数据请求、处理读数据请求以及写数据请求。

缓存022用于临时存储从主机01接收的数据或从硬盘03读取的数据。控制器02接收主机01发送的多个写数据请求时,可以将多个写数据请求中的数据暂时保存在缓存022中。当缓存022的容量达到一定阈值时,将缓存022存储的数据发送给硬盘03。硬盘03存储该数据。缓存022包括易失性存储器,非易失性存储器或其组合。易失性存储器例如为随机访问存储器(英文:random-access memory,RAM)。非易失性存储器例如软盘、硬盘、固态硬盘(solid state disk,SSD)、光盘等各种可以存储用于实现本申请方案的程序代码的机器可读写介质。

可以理解的是,缓存022读取数据的速度高于硬盘03读取数据的速度。因此,如果该读数据请求所要读取的数据在缓存022中命中,那么就不必再从硬盘中03中读取该数据,从而提高读取数据的效率。为了提高缓存的数据命中率,通常的做法是从硬盘03中预先读取一段数据(例如图1所示的数据023),写入缓存022。那么,当主机01向控制器02发送读数据请求要求读取数据023时,由于数据023已经被提前读取到缓存022中了,因此处理器021可以直接向主机01发送数据023。虽然在主机01发送的读数据请求到达缓存022之前就将硬盘03中的部分数据预取至缓存022中,可以提高缓存的数据命中率,然而预取的数据太多不仅会造成浪费,而且还会造成较大的读盘压力。因此,如何预取数据是很重要的问题。

在申请本实施例中,硬盘03的空间可以划分为多个数据块(chunk),每个数据块的大小相同,本实施例以数据块的大小是256KB为例,并且每个数据块具有一段逻辑地址,这段逻辑地址可以划分为多个子区间。当处理器021接收一个读数据请求时,该读数据请求包括待读取数据的逻辑地址,根据待读取数据的逻辑地址可以确定待读取数据所在的数据块。在确定出待读取数据所在的数据块后,可以选择多个数据块中与待读取数据所在的数据块有关联关系的数据块,并根据选择出的数据块中各个子区间的访问频率确定目标子区间,将目标子区间的数据预取至缓存022。

接下来对本申请实施例提供的数据预取方法进行介绍。

图2是本申请实施例提供的一种数据预取方法的流程图。该方法可以应用于存储设备中,该存储设备可以为集成有图1所示的控制器02和硬盘03的设备。如图2所示,该方法包括以下步骤:

步骤201:接收读数据请求,读数据请求包括待读取数据的逻辑地址。

在本申请实施例中,存储设备可以接收主机下发的读数据请求。其中,该读数据请求可以是由主机对一个较大的读数据请求进行拆分后的多个请求中的一个请求。该读数据请求中可以包括待读取数据所在的存储空间的逻辑地址。除此之外,该读数据请求中还可以包括待读取数据的长度信息。

步骤202:根据待读取数据的逻辑地址确定待读取数据所在的第一数据块,待读取数据的逻辑地址是第一数据块的逻辑地址区间的子集。

在本申请实施例中,硬盘可以被划分为多个数据块。每个数据块具有一段逻辑地址。并且,每个数据块对应一个用于唯一标识自身的数据块标识。存储设备中可以存储有每个数据块的数据标识和相应数据块的逻辑地址区间之间的映射关系。基于此,在接收到读数据请求之后,存储设备可以从上述映射关系中确定该读数据请求中包括的待读取数据的逻辑地址所处的逻辑地址区间,并获取该逻辑地址区间对应的数据块标识,获取的该数据块标识所标识的数据块即为待读取数据所在的第一数据块。

步骤203:选择与第一数据块有关联关系的第二数据块,第二数据块的逻辑地址区间包括多个子区间。

在确定第一数据块之后,存储设备可以从硬盘包括的剩余数据块中选择与第一数据块有关联关系的第二数据块。

需要说明的是,存储设备可以分别计算剩余数据块中每个数据块与第一数据块的关联度,并将关联度超过设定的关联阈值的数据块作为第二数据块。其中,任一数据块与第一数据块之间的关联度可以用于指示在访问第一数据块之后,下一次访问的数据块为该数据块的概率。

示例性地,在本申请实施例中,存储设备可以通过条件概率来计算每个数据块与第一数据块之间的关联度。其中,以剩余数据块中的数据块B为例,存储设备可以通过下述公式来计算该数据块B与第一数据块(下述公式中称为数据块A)之间的关联度。

其中,P(B|A)是指数据块A(即第一数据块)和数据块B之间的关联度,也即,在读取数据块A的数据之后,读取数据块B中的数据的概率。f

需要说明的是,f

例如,假设存储设备在当前时刻之前的一段时长T内接收到20个历史读数据请求。这20个历史读数据请求对应读取的数据块依次为:A→B→C→A→E→F→C→D→S→G→B→A→E→F→A→B→C→F→G→S。在此基础上,存储设备可以统计20个请求中读取A的请求的下一个请求为读取B的请求的数量,一共有2个,此时,f

可选地,在本申请实施例中,当每个读取数据块A的请求之后的预设时长内接收到的请求的数量不相等时,存储设备也可以确定在每个读取数据块A的读数据请求之后的预设时长t内接收到读取数据块B的读数据请求的数量,并计算这些数量的总和,将该总和作为f

例如,假设在当前时刻之前的一段时长T内一共接收到3个读取数据块A的请求,5个读取数据块B的请求。从接收到第一个读取数据块A的请求起的第一个预设时长内,一共接收到2个请求,其中,有一个读数数据块B的请求。从接收到第二个读取数据块A的请求起的第二个预设时长内,一共接收到1个读数据请求,其中不存在读取数据块B的请求。从接收到第三个读取数据块A的请求起的第三个预设时长内,一共接收到3个读数据请求,其中存在一个读取数据块B的请求。由此可知,在三个读取数据块A的请求之后的三个预设时长内接收到的读取数据块B的请求的总数量为2,也即,f

上述仅是本申请实施例给出的一种计算每个数据块与第一数据块之间的关联度的方法。可选地,存储设备也可以通过其他设定的算法来计算每个数据块与第一数据块之间的关联度。其中,该设定的算法可以包括条件概率、贝叶斯算法、卷积神经网络算法、长短期记忆网络算法、神经网络算法、循环神经网络算法、概率图模型算法中的任意一种。需要说明的是,在采用上述任一种算法来计算两个数据块之间的关联度之前,存储设备同样可以根据一段时长T内接收并处理的多个历史读数据请求的历史信息来对上述算法进行训练,以便后续可以根据训练好的算法来计算两个数据块之间的关联度。

在计算出每个数据块与第一数据块之间的关联度之后,存储设备可以将关联度超过设定的关联阈值的数据块作为第二数据块。需要说明的是,关联度超过设定的关联阈值的数据块的数量可能为一个,也可能为多个,也即,在本申请实施例中,选择出的与第一数据块有关联关系的第二数据块可以为一个,也可以为多个。

需要说明的是,设定的关联阈值可以是由用户在初始化时设置的。并且,在本申请实施例中,每隔一段时间,存储设备还可以根据自身的性能来对该设定的关联阈值进行调整。

示例性地,存储设备可以统计一段时间t

例如,假设初始设定的关联阈值为ε

可选地,存储设备还可以根据一段时间t

另外,在本申请实施例中,硬盘的每个数据块的逻辑地址区间均可以被划分为多个子区间。其中,每个子区间的大小可以相等,也可以不等,本申请实施例对此不做限定。其中,每个数据块包括的多个子区间可以按照每个子区间的逻辑地址进行编号。例如,第二数据块包括的多个子区间,可以根据每个子区间的逻辑地址进行编号。

以第二数据块为例,如图3所示,假设第二数据块的大小为512KB,按照4KB的大小,可以将第二数据块划分为128个子区间,每个子区间均为大小为4KB的连续区间。依次为128个子区间进行编号,这128个子区间的编号可以依次为0-127。

步骤204:根据每个子区间的访问频率从多个子区间中确定目标子区间。

在选择出第二数据块之后,存储设备可以根据第二数据块包括的多个子区间中每个子区间的访问频率,从多个子区间中确定目标子区间。

由前述步骤203中的介绍可知,第二数据块的数量可能为一个,也可能为多个。接下来,首先介绍当第二数据块为一个时,根据每个子区间的访问频率从多个子区间中确定目标子区间的实现方式。

示例性地,由于读数据请求中均携带有所要读取的数据的逻辑地址,因此,存储设备可以根据当前时刻之前的一段时间t

例如,假设第二数据块包括128个子区间,存储设备首先可以统计当前时刻之前的一段时间t

其中,设定的频率阈值可以是由用户在初始化时设置的。另外,在本申请实施例中,每隔一段时间,存储设备也可以根据自身的性能对该频率阈值进行调整。具体的调整方式可以参考前述对关联阈值的调整方式,本申请实施例在此不再赘述。

可选地,在另一种可能的实现方式中,在确定每个子区间的访问频率之后,可以将各个子区间的访问频率按照从大到小的顺序进行排序,将排在前h的访问频率对应的子区间作为目标子区间。

例如,可以对128个子区间的访问频率从大到小的顺序进行排序,将排在前5的访问频率所对应的子区间作为目标子区间。

值得注意的是,在本申请实施例中,每隔一段时间,存储设备也可以根据自身的性能对h的大小进行调整。具体的调整原理可以参考前述实施例中对关联阈值的调整原理,本申请实施例在此不再赘述示例性地,存储设备可以统计一段时间t

可选地,在本申请实施例中,存储设备也可以将设定的频率阈值和预取数量结合起来来选择目标子区间。也即,存储设备首先可以根据设定的频率阈值来筛选得到一部分子区间。如果筛选出来的子区间的数量大于预取数量h,则可以继续对筛选出来的子区间按照访问频率从大到小的顺序进行排序,之后,选取排在前h个的子区间作为目标子区间。

在结合设定的频率阈值和预取数量来选择目标子区间情况下,每隔一段时间,存储设备可以对设定的频率阈值或者是预取数量进行调整,具体调整方式可以参考前述介绍的相关实现方式,本申请实施例在此不再赘述。需要说明的是,存储设备也可以同时调整设定的频率阈值和预取数量。其中,存储设备可以通过前述介绍的方式调整设定的频率阈值,在将频率阈值调高的同时,可以相应地减小预取数量。在将频率阈值调低的同时,可以相应地增大预取数量。或者,存储设备可以通过前述介绍的实现方式调整预取数量,在将预取数量调大的同时,可以相应地调低频率阈值,在将预取数量调低时,可以相应地调高频率阈值。

上述介绍了当第二数据块的数量为一个时,从第二数据块的多个子区间中确定目标子区间的实现方式。当第二数据块的数量为多个时,存储设备可以通过以下几种方式来确定目标子区间。

第一种方式:存储设备可以确定每个第二数据块包括的多个子区间中每个子区间的访问频率。之后,对于任一个第二数据块,可以将该第二数据块中访问频率大于设定的频率阈值的子区间作为目标子区间。这样,确定出的目标子区间可能是位于不同数据块中的多个子区间。

例如,假设选择出的第二数据块一共有3个,存储设备在第一个数据块中选择访问频率大于设定的频率阈值的子区间,得到2个子区间,在第二个数据块中选择访问频率大于设定的频率阈值的子区间,得到1个子区间,在第三个数据块中选择访问频率大于设定的频率阈值的子区间,得到0个子区间,这样,最终得到的目标子区间有3个,其中两个位于第一个第二数据块上,另一个位于第二个第二数据块上。

第二种方式:存储设备可以确定每个第二数据块包括的多个子区间中每个子区间的访问频率。对于任一个第二数据块,存储设备可以计算该数据块内每个子区间的访问频率与该数据块的关联度之间的乘积,将该乘积作为相应子区间的访问热度。其中,该数据块的关联度是指前述计算得到的该数据块与第一数据块之间的关联度。在确定出每个第二数据块中的每个子区间的访问热度之后,存储设备可以将所有第二数据块中访问热度大于设定的热度阈值的子区间作为目标子区间。

例如,假设选择出的第二数据块一共有3个,第一个第二数据块与第一数据块的关联度为P

需要说明的是,在本申请实施例中,每隔一段时间,存储设备可以根据自身的性能来对设定的热度阈值进行调整,以此来调整预取的子区间的数量。具体的调整方式可以参考前述对关联阈值的调整方式,本申请实施例在此不再赘述。

可选地,在一种可能的实现方式中,在确定出每个子区间的访问热度之后,存储设备也可以对所有的访问热度按照从大到小的顺序进行排序,之后,将排在前h的访问热度对应的子区间作为目标子区间。其中,h的大小可以预先由用户进行设置。

可选地,在另一种可能的实现方式中,存储设备可以将设定的热度阈值和预取数量h结合起来来选择目标子区间。示例性地,存储设备可以先通过设定的热度阈值从多个子区间中筛选出一部分子区间。如果筛选出的这部分子区间的数量大于预取数量h,则存储设备可以进一步地对筛选出来的子区间按照访问热度从高到低进行排序,之后,从中选择排在前h个的子区间作为目标子区间。在这种情况下,每隔一段时间,存储设备可以对设定的热度阈值或预取数量进行调整,具体的调整方式可以参考前述实施例中的相关实现方式,本申请实施例在此不再赘述。

需要说明的是,在将排在前h的访问热度对应的子区间作为目标子区间时,如果有多个子区间的访问热度相同,则可以从这些访问热度相同的子区间中确定逻辑地址距离待读取数据的逻辑地址最近的子区间作为目标子区间。

第三种方式:存储设备可以确定每个第二数据块包括的多个子区间中每个子区间的访问频率。之后,对于任一第二数据块,存储设备可以按照第二数据块中的各个子区间的访问频率的大小,确定各个子区间对应的访问等级。之后,存储设备可以计算每个子区间的访问等级与该第二数据块的关联度之间的乘积,并将该乘积作为相应子区间的访问热度。在计算出所有第二数据块中各个子区间的访问热度之后,可以从中选择访问热度大于设定的热度阈值的子区间作为目标子区间,或者是可以将所有的子区间的访问热度按照从大到小的顺序进行排序,将排在前h的访问热度对应的子区间作为目标子区间。

需要说明的是,在按照各个子区间的访问频率的大小,确定各个子区间对应的访问等级时,存储设备可以获取第二数据块中各个子区间的访问频率中的最大值,将0到最大值确定为第二数据块的访问频率区间。之后,存储设备可以将该访问频率区间划分为多个子频率区间,每个子频率区间对应一个访问等级。其中,各个子频率区间不存在重叠,且子频率区间的下限值越大,则对应的访问等级越大。也即,二者成正比。之后,存储设备可以确定每个子区间的访问频率所处的子频率区间,进而根据所处的子频率区间确定对应访问等级。

例如,假设第二数据块中各个子区间的访问频率的最大值为f,则第二数据块的访问频率区间为[0,f],将这个访问频率区间划分为3个子频率区间,其中,第一个子频率区间可以为0,第二个子频率区间可以为[1,f

可选地,在一种可能的实现方式中,存储设备中可以存储有频率区间与访问等级的映射关系。在这种情况下,存储设备可以从该映射关系中获取每个第二数据块中的每个子区间的访问频率所在的频率区间所对应的访问等级。

例如,表1示出了一种频率区间与访问等级的映射关系。其中,当访问频率为0时,对应的访问等级为1。频率区间为[1,5]时,对应的访问等级为2。频率区间为大于5时,对应的访问等级为3。这样,各个第二数据块中子区间的访问频率为0的,该子区间对应的访问等级即为1,子区间的访问频率位于[1,5]的,则该子区间对应的访问等级为2,子区间的访问频率大于5的,该子区间对应的访问等级即为3。

表1频率区间与访问等级的映射关系

需要说明的是,上述给出的频率区间的数量、区间大小等仅是本申请实施例给出的一种可能的示例,并不构成对本申请的限定。另外,在本申请实施例中,每隔一段时间,存储设备同样可以根据自身的性能来对频率区间进行调整。

第四种方式:存储设备可以确定每个第二数据块包括的多个子区间中每个子区间的访问频率。之后,存储设备可以对各个第二数据块中的各个子区间的访问频率进行排序。在排序之后,存储设备可以根据预设的预取子区间数量h以及第二数据块的数量,为每个第二数据块分配对应的预取数量n,其中,按照关联度的大小,关联度越小的第二数据块,分配到的预取数量n越小。在分配完预取数量n之后,存储设备可以按照每个第二数据块的预取数量n,从各个第二数据块中的子区间中确定访问频率排在前n的子区间作为目标子区间。

步骤205:将目标子区间中存储的数据预取至缓存。

在确定目标子区间之后,存储设备可以将目标子区间中存储的数据预取至缓存。其中,由前述介绍可知,目标子区间的数量有可能为一个,也有可能为多个,有可能属于同一个数据块,也有可能属于不同数据块。

当目标子区间仅有一个时,该存储设备可以直接根据该目标子区间的逻辑地址,生成一个预取命令来预取该目标子区间内存储的数据。

可选地,如果目标子区间有多个,则对于该多个目标子区间中逻辑地址连续的目标子区间,存储设备可以生成一个预取命令来预取逻辑地址连续的目标子区间的数据。对于多个目标子区间中逻辑地址相隔较远的目标子区间,则根据各个子区间的逻辑地址生成对应的预取命令来分别预取各个子区间内的数据。

需要说明的是,在本申请实施例中,存储设备可以每隔一段时间根据自身的性能对设定的关联阈值、热度阈值

在本申请实施例中,在确定与待读取数据所在的第一数据块有关联关系的第二数据块之后,可以根据第二数据块中各个子区间的访问频率来确定目标子区间,并将目标子区间中的数据预取至缓存。也即,本申请可以根据各个子区间的访问频率更为精细的预取数据块中某些区间内的数据,相对于直接预取整个数据块中的数据,减小了预取的数据量,降低了预取浪费率。并且,由于减小了预取的数据量,因此,降低了读盘压力。并且,本申请实施例根据各个子区间的访问频率来确定目标子区间,访问频率越高,被确定为目标子区间的概率越大,这样,最终预取的子区间将是一段时间内被读取过的次数较高的区间,增大了命中率。

另外,在一些相关技术中,可以将硬盘划分为粒度较小的数据块,例如4KB。在这种情况下,根据数据块之间的关联关系预取数据块中的数据,虽然预取精度较高,但是由于数据块粒度较小,数量较多,因此,各个数据块之间的关联关系将呈指数级增加,极为复杂,这将导致管理成本、可靠性、内存成本和计算复杂度极高。而本申请实施例并不需要将硬盘划分为更小的粒度,在保持数据块粒度大小正常的情况下,通过将数据块划分子区间,根据子区间的访问频率来预取子区间,而不是根据子区间的关联关系来预取子区间,无需管理子区间之间的关联关系,在保证了命中率的同时,降低了管理成本、计算复杂度等。

接下来对本申请实施例提供的数据预取装置进行介绍。

图4是本申请实施例提供的一种数据预取装置400的结构示意图。如图4所示,该装置400包括:

接收模块401,用于执行上述实施例中的步骤201;

第一确定模块402,用于执行上述实施例中的步骤202;

选择模块403,用于执行上述实施例中的步骤203;

第二确定模块404,用于执行上述实施例中的步骤204;

预取模块405,用于执行上述实施例中的步骤205;

其中,上述接收模块401、第一确定模块402、选择模块403、第二确定模块404和预取模块405可以由图1所示的处理器021调用缓存022中的程序指令执行,或者可以由处理器021单独执行。

可选地,存储设备包括多个数据块,选择模块包括:

计算子模块,用于分别计算每个数据块与第一数据块的关联度;

确定子模块,用于将关联度超过设定的关联阈值的数据块作为第二数据块。

可选地,计算子模块具体用于:

根据设定的算法分别计算每个数据块与第一数据块的关联度,设定的算法包括贝叶斯算法、卷积神经网络算法、长短期记忆网络算法、神经网络算法、循环神经网络算法、概率图模型算法中的任意一种。

可选地,该装置还用于:根据存储设备的性能调整关联阈值。

可选地,目标子区间的访问频率大于设定的频率阈值。

可选地,目标子区间的访问热度大于设定的热度阈值,目标子区间的访问热度根据目标子区间的访问频率与第二数据块的关联度确定得到。

在本申请实施例中,在确定与待读取数据所在的第一数据块有关联关系的第二数据块之后,可以根据第二数据块中各个子区间的访问频率来确定目标子区间,并将目标子区间中的数据预取至缓存。也即,本申请可以根据各个子区间的访问频率更为精细的预取数据块中某些区间内的数据,相对于直接预取整个数据块中的数据,减小了预取的数据量,降低了预取浪费率。并且,由于减小了预取的数据量,因此,降低了读盘压力。并且,本申请实施例根据各个子区间的访问频率来确定目标子区间,访问频率越高,被确定为目标子区间的概率越大,这样,最终预取的子区间将是一段时间内被读取过的次数较高的区间,增大了命中率。

需要说明的是:上述实施例提供的数据预取装置在进行数据预取时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据预取装置与数据预取方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如:同轴电缆、光纤、数据用户线(Digital Subscriber Line,DSL))或无线(例如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如:软盘、硬盘、磁带)、光介质(例如:数字通用光盘(Digital Versatile Disc,DVD))、或者半导体介质(例如:固态硬盘(Solid State Disk,SSD))等。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述为本申请提供的实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

技术分类

06120112182183