数据访问预测方法和装置与流程

文档序号:18029111发布日期:2019-06-28 22:27阅读:180来源:国知局
数据访问预测方法和装置与流程

本申请实施例涉及通信技术,尤其涉及一种数据访问预测方法和装置。



背景技术:

主流的存储系统基本都独立于主机之外,以便实现统一灵活的存储管理。目前,常见的存储系统例如有云计算数据中心、存储区域网络等。这些存储系统通常包括至少一个存储设备,每个存储设备包括至少一个存储单元。其中,这里所说的存储单元例如可以为逻辑单元(logicalunit,lu)或文件系统(filesystem,fs)等。该fs可以为通过网络为主机提供访问服务的fs,例如共享文件夹等。

现有技术中,存储系统的存储设备通常采用不感知数据内容的方式,对主机下一次要读取的数据进行预取。具体地,当主机在预设时长内向存储设备发送的针对同一个存储单元的多个读请求,读取的是该存储单元中逻辑地址相邻的数据时,存储设备可以触发针对该存储单元的预取操作。即,存储设备在根据主机当前发送的针对该存储单元的读请求,向用户提供待读取数据的同时,可以将当前所发送的读请求中的待读取数据逻辑地址之后的预设个数的逻辑地址对应的数据,作为主机下一次在该存储单元上要读取的数据,预取至缓存中。通过预取主机下一次在该存储单元上待读取的数据,可以提高存储设备的数据访问效率。即,将逻辑地址与待读取数据的逻辑地址相邻的数据作为主机下一次在该存储单元上要读取的数据。

以存储单元为lu为例,假定lu上存在2个分区,分别为分区0和分区1。在预设时长内,主机的应用1通过读请求对分区0中的数据进行读取,主机的应用2通过读请求对分区1中的数据进行读取。也就是说,主机在预设时长内向存储设备发送的针对同一个存储单元的多个读请求,读取的是该存储单元中逻辑地址不相邻的数据。则在该场景下,存储设备不会触发针对该存储单元的预取操作,使得存储设备后续在接收到针对该存储单元的读请求后,需要根据读请求所携带的待读取数据的逻辑地址,在存储单元上读取待读取数据后发送给主机,而不能在缓存中直接获取到待读取数据。这样,存储设备需要花费较多的时间为主机提供数据访问服务,导致存储设备的数据访问效率较低。



技术实现要素:

本申请实施例提供一种数据访问预测方法和装置,用于解决存储设备的数据访问效率较低的技术问题。

第一方面,本申请实施例提供一种数据访问预测方法,应用于存储设备,所述存储设备包括至少一个存储单元及缓存,每个所述存储单元对应一个数据子集树,所述数据子集树中的每个节点为一个数据子集,每个数据子集设定有数据特征,每个所述节点中的数据具有所述数据特征,且每个所述节点记录有各数据的逻辑地址和访问顺序,所述数据子集树中无子节点的数据子集为叶子子集,所述方法包括:

接收主机发送的读请求,所述读请求包括待读取数据所属的存储单元的标识及所述待读取数据的逻辑地址;

在所述待读取数据所属的存储单元对应的数据子集树中确定包括所述逻辑地址的叶子子集;

按照包括所述逻辑地址的叶子子集中记录的访问顺序,将所述逻辑地址之后的预设个数的逻辑地址对应的数据读取至所述缓存中。

通过该可能的设计提供的数据访问预测方法,存储设备的每个存储单元对应一个数据子集树,使得存储设备可以以数据子集树中的叶子子集为粒度进行预取操作,可以提高存储设备执行预取操作的概率,从而可以提高存储设备的数据访问效率。另外,存储设备可以以叶子子集中数据的访问顺序,预取主机下一次要在叶子子集中读取的数据,可以提高存储设备预取主机下一次要在叶子子集中读取的数据的准确率,进一步提高了存储设备的数据访问效率。

在一种可能的设计中,所述方法还包括:

获取待建立数据子集树的存储单元中的数据;

从所获取的数据中获取描述数据特征的特征数据,设定划分数据子集的特征数据;

根据所设定划分数据子集的特征数据,将所述待建立数据子集树的存储单元中的数据分为至少一个数据子集;

分析所述至少一个数据子集对应的数据的特征数据,确定每个所述数据子集是否可以继续划分数据子集,若否,则将所述数据子集作为叶子子集,若是,则对所述数据子集继续划分,直到划分为叶子子集。

通过该可能的设计提供的数据访问预测方法,存储设备可以根据存储设备的每个存储单元存储的数据的数据特征,为存储设备的每个存储单元建立数据子集树,使得存储设备可以以数据子集树中的叶子子集为粒度进行预取操作,可以提高存储设备执行预取操作的概率,从而可以提高存储设备的数据访问效率。

在一种可能的设计中,所述存储单元对应的数据子集树中的叶子子集中各数据的逻辑地址,在所述存储单元对应的逻辑地址空间中连续。

在一种可能的设计中,所述存储单元为在所述存储设备上划分的逻辑单元lu,所述待读取数据所属的存储单元的标识为所述逻辑单元的标识,所述特征数据为所述逻辑单元的分区数据。

通过该可能的设计提供的数据访问预测方法,在存储单元为lu时,存储设备可以基于lu的分区数据,对lu中的数据进行数据子集的划分,以将数据特征相同的数据划分至一个数据子集中,从而使得存储设备可以以该lu对应的数据子集树中的叶子子集为粒度进行预取操作,可以提高存储设备对该lu执行预取操作的概率,从而可以提高存储设备的数据访问效率。

在一种可能的设计中,所述存储单元为在所述存储设备上划分的文件系统fs,所述fs通过网络为主机提供访问服务,所述待读取数据所属的存储单元的标识为访问所述文件系统的ip地址,所述特征数据为所述fs中的文件头魔数magic数据。

通过该可能的设计提供的数据访问预测方法,在存储单元为fs时,存储设备可以基于fs的文件头魔数magic数据,对fs中的数据进行数据子集的划分,以将数据特征相同的数据划分至一个数据子集中,从而使得存储设备可以以该fs对应的数据子集树中的叶子子集为粒度进行预取操作,可以提高存储设备对该fs执行预取操作的概率,从而可以提高存储设备的数据访问效率。

第二方面,本申请实施例提供一种数据访问预测装置,应用于存储设备,所述存储设备包括至少一个存储单元及缓存,每个所述存储单元对应一个数据子集树,所述数据子集树中的每个节点为一个数据子集,每个数据子集设定有数据特征,每个所述节点中的数据具有所述数据特征,且每个所述节点记录有各数据的逻辑地址和访问顺序,所述数据子集树中无子节点的数据子集为叶子子集,所述装置包括:

接收模块,用于接收主机发送的读请求,所述读请求包括待读取数据所属的存储单元的标识及所述待读取数据的逻辑地址;

处理模块,用于在所述待读取数据所属的存储单元对应的数据子集树中确定包括所述逻辑地址的叶子子集,并按照包括所述逻辑地址的叶子子集中记录的访问顺序,将所述逻辑地址之后的预设个数的逻辑地址对应的数据读取至所述缓存中。

在一种可能的设计中,所述处理模块,还用于获取待建立数据子集树的存储单元中的数据;从所获取的数据中获取描述数据特征的特征数据,设定划分数据子集的特征数据;根据所设定划分数据子集的特征数据,将所述待建立数据子集树的存储单元中的数据分为至少一个数据子集;分析所述至少一个数据子集对应的数据的特征数据,确定每个所述数据子集是否可以继续划分数据子集,若否,则将所述数据子集作为叶子子集,若是,则对所述数据子集继续划分,直到划分为叶子子集。

在一种可能的设计中,所述存储单元对应的数据子集树中的叶子子集中各数据的逻辑地址,在所述存储单元对应的逻辑地址空间中连续。

在一种可能的设计中,所述存储单元为在所述存储设备上划分的逻辑单元lu,所述待读取数据所属的存储单元的标识为所述逻辑单元的标识,所述特征数据为所述逻辑单元的分区数据。

在一种可能的设计中,所述存储单元为在所述存储设备上划分的文件系统fs,所述fs通过网络为主机提供访问服务,所述待读取数据所属的存储单元的标识为访问所述文件系统的ip地址,所述特征数据为所述fs中的文件头魔数magic数据。

上述第二方面和第二方面的各可能的设计所提供的数据访问预测装置,其有益效果可以参见上述第一方面和第一方面的各可能的设计所带来的有益效果,在此不加赘述。

第三方面,本申请实施例提供一种数据访问预测装置,包括用于执行以上第一方面的方法的至少一个处理元件(或芯片)。

第四方面提供一种芯片,所述芯片包括:用于执行上述第一方面和第一方面的各可能的设计所提供的数据访问预测方法的模块或单元。

第五方面,本申请实施例提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面和第一方面的各种可能的设计中的方法。

第六方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面和第一方面的各种可能的设计中的方法。

本申请实施例提供的数据访问预测方法和装置,存储设备的每个存储单元对应一个数据子集树,使得存储设备可以以数据子集树中的叶子子集为粒度进行预取操作,可以提高存储设备执行预取操作的概率,从而可以提高存储设备的数据访问效率。另外,存储设备可以以叶子子集中数据的访问顺序,预取主机下一次要在叶子子集中读取的数据,可以提高存储设备预取主机下一次要在叶子子集中读取的数据的准确率,进一步提高了存储设备的数据访问效率。

附图说明

图1为本申请实施例所涉及的存储系统的应用场景图;

图2为本申请实施例提供的建立数据子集树的流程示意图;

图3为本申请实施例提供的一种数据集合树的示意图;

图4为本申请实施例提供的一种数据访问预测方法的流程示意图;

图5为本申请实施例提供的一种数据访问预测装置的结构示意图;

图6为本申请实施例提供的另一种数据访问预测装置的结构示意图。

具体实施方式

图1为本申请实施例所涉及的存储系统的应用场景图。如图1所示,主流的存储系统基本都独立于主机之外,以便实现统一灵活的存储管理。目前,常见的存储系统例如有云计算数据中心、存储区域网络等。这些存储系统通常包括至少一个存储设备,每个存储设备包括处理单元、通信单元、缓存和在存储设备的物理存储上逻辑划分的至少一个存储单元。其中,这里所说的物理存储可以为硬盘、磁盘阵列等。图1示出的是以存储系统包括一个存储设备为例的示意图。

其中,存储设备的存储单元用于存储数据。该存储单元例如可以是在存储设备上划分的lu或fs等。即,在存储单元的物理存储上逻辑划分的lu或fs。其中,这里所说的fs为可以通过网络为主机提供访问服务的fs,例如共享文件夹。存储设备的通信单元用于实现存储设备与主机之间的通信。该通信单元可以是通信接口、收发器、收发电路等。可以理解,这里所说的通信接口是统称,可以包括一个或多个接口。

存储设备的处理单元用于控制存储设备根据主机发送的读请求,对存储单元上存储的数据进行读操作和预取操作。存储设备的缓存用于缓存存储设备预取的数据。可选的,存储设备的处理单元还可以控制存储设备进行其他的处理操作,例如写操作等,对此不进行限定。上述处理单元可以是处理器或控制器,例如上述处理单元可以是中央处理器(centralprocessingunit,cpu)、通用处理器、数字信号处理器(digitalsignalprocessor,dsp)等中任一种,也可以是上述任意至少两种的组合。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合、dsp和微处理器的组合等。

下面以图1所示的存储设备为例,对现有技术中的存储设备的预取操作进行介绍和说明。可以理解,下述实施例中,存储设备的处理动作均通过存储设备的处理单元实现,存储设备与主机之间的通信均通过存储设备的通信单元实现,后续不再一一说明。

现有技术中,存储设备通常不感知主机待读取数据的内容。即,在主机读取存储设备的某一存储单元上的数据时,存储设备不知道主机所读取的数据的内容是什么。因此,主机在读取存储设备的某一存储单元上的数据时,存储设备也采用不感知数据内容的方式,预取主机下一次在该存储单元上要读取的数据,以提高数据的访问效率。

当主机在预设时长内向存储设备发送的针对该存储单元的多个读请求,读取的是该存储单元中逻辑地址相邻的数据时,存储设备可以触发针对该存储单元的预取操作,以提高数据的访问效率。具体流程如下:

1、主机向存储设备发送第一读请求,该第一读请求例如可以包括:待读取数据1所属的存储单元的标识、待读取数据1的逻辑地址、待读取数据1的大小、待读取数据1的访问类型(读或写)等。

2、存储设备在根据第一读请求,向主机提供待读取数据1的同时,可以根据第一读请求,预测主机下一次在该存储单元上要读取的数据(即待读取数据2)。例如,上述存储设备可以将该存储单元中位于待读取数据1的逻辑地址之后的预设个数的逻辑地址对应的数据,作为待读取数据2。这里该预设个数的逻辑地址与待读取数据1的逻辑地址相邻。

3、存储设备将待读取数据2读取至缓存中。该过程即为存储设备针对该存储单元的预取操作。

4、主机向存储设备发送针对该存储单元的第二读请求,该第二读请求例如可以包括:待读取数据3所属的存储单元的标识、待读取数据3的逻辑地址、待读取数据3的大小、待读取数据3的访问类型(读或写)等。

5、存储设备根据待读取数据3的逻辑地址,以及,待读取数据2的逻辑地址,确定第二读请求所需读取的待读取数据3是否为之前预取的待读取数据2。若待读取数据3的逻辑地址与待读取数据2的逻辑地址相同,说明待读取数据3为之前预取的待读取数据2,则存储设备可以直接将缓存的待读取数据2发送给主机,不需要再从存储单元上读取待读取数据3。通过这种方式,实现了数据的读取加速,提高存储设备的数据访问效率。

以存储单元为lu为例,假定lu上存在2个分区,分别为分区0和分区1。在预设时长内,主机的应用1通过读请求对分区0中的数据进行读取,主机的应用2通过读请求对分区1中的数据进行读取。也就是说,主机在预设时长内向存储设备发送的针对同一个存储单元的多个读请求,读取的是该存储单元中逻辑地址不相邻的数据。在该场景下,存储设备不会触发针对该存储单元的预取操作,使得存储设备在接收到针对该存储单元的读请求后,需要根据读请求所携带的待读取数据的逻辑地址,在存储单元上读取待读取数据后发送给主机,而不能在缓存中直接获取到待读取数据。这样,存储设备需要花费较多的时间为主机提供数据访问服务,导致存储设备的数据访问效率较低。

考虑到上述问题,本申请实施例提供了一种数据访问预测方法,可以根据存储设备的每个存储单元存储的数据的数据特征,为存储设备的每个存储单元建立数据子集树,以将具有相同数据特征的数据划分为一个数据子集。例如,将一个分区划分为一个数据子集、将属于一个文件的数据划分为一个数据子集等。这样,存储设备可以以数据子集树中的叶子子集为粒度进行预取操作。相比以存储单元为粒度的预取操作,可以提高存储设备执行预取操作的概率,从而可以提高存储设备的数据访问效率。可以理解,本申请实施例提供的数据访问预测方法的执行主体可以为数据访问装置,还可以为集成了数据访问装置的存储设备。本申请实施例以集成了数据访问装置的存储设备(简称存储设备)为例,对本申请实施例进行介绍。

为了便于对本申请实施例的理解,下面以一个待建立数据子集树的存储单元为例,先对存储设备如何为存储单元建立数据子集树进行介绍和说明。

图2为本申请实施例提供的建立数据子集树的流程示意图。如图2所示,该方法可以包括:

s101、获取待建立数据子集树的存储单元中的数据。

s102、从所获取的数据中获取描述数据特征的特征数据,设定划分数据子集的特征数据。

s103、根据所设定划分数据子集的特征数据,将待建立数据子集树的存储单元中的数据分为至少一个数据子集。

s104、分析每个数据子集对应的数据的特征数据,确定每个数据子集是否可以继续划分数据子集。若是,则执行s105,若否,则执行s106。

s105、对能够继续划分的数据子集,继续划分数据子集。

执行完s105之后,返回执行s104。

s106、将不能继续划分的数据子集作为叶子子集。

执行完s106之后,流程结束。

在本实施例中,上述存储设备可以通过快照获取待建立数据子集树的存储单元存储的全部数据。即,上述存储设备可以通过拷贝该存储单元的全部数据的方式,获取该存储单元存储的全部数据。通过这种方式,可以使存储设备基于拷贝的待建立数据子集树的存储单元的全部数据,建立该存储单元的数据子集树,而不会出现因建立该存储单元的数据子集树,导致该存储单元中断正常的数据存取服务。可选的,上述存储设备也可以通过现有的其他方式,获取待建立数据子集树的存储单元存储的全部数据,对此不再一一赘述。

上述存储设备在获取到待建立数据子集树的存储单元存储的全部数据之后,可以从所获取到的数据中获取描述数据特征的特征数据,以设定划分数据子集的特征数据。例如,在存储单元为在存储设备上划分的lu时,上述所说的特征数据可以为lu的分区数据(也可以称为分区表或分区标识)。在存储单元为在存储设备上划分的fs时,上述所说的特征数据可以为fs中的文件头魔数(magic)数据。即fs中的每个数据所属的文件的文件头魔数(magic)数据。

图3为本申请实施例提供的一种数据集合树的示意图。如图3所示,继续以上述示例中的存储单元lu为例,即lu一共有2个分区,分别为分区0和分区1。由于一个文件的数据不会跨区存储,因此,上述存储设备可以将lu的分区数据设定为划分数据子集的特征数据,以将同一分区中的数据划分为一个数据子集。在本示例中,可以将lu的数据划分为2个数据子集,分别为数据子集a1和数据子集a2。其中,数据子集a1可以包括分区1的所有数据,并记录有分区1的所有数据的逻辑地址和访问顺序。数据子集a2可以包括分区2的所有数据,并记录有分区2的所有数据的逻辑地址和访问顺序。此时,该数据子集a1和数据子集a2为该数据子集树的第一层节点。

然后,上述存储设备可以分别分析数据子集a1和数据子集a2中的数据的特征数据,确定数据子集a1和数据子集a2是否还可以继续划分数据子集。其中,这里所说的特征数据例如可以为数据的文件扩展名、数据的文件名等。

以特征数据为数据的文件扩展名、数据的文件名为例,由于不同类型的文件的数据的文件扩展名(也称为文件名后缀或元数据)不同,因此,上述存储设备可以将数据的文件扩展名设定为划分数据子集的特征数据。这样,存储设备可以分别分析数据子集a1和数据子集a2中的数据的文件扩展名,以确定数据子集a1和数据子集a2中是否存在对应不同文件类型的数据。其中,这里所说的文件扩展名例如可以为:“.doc”、“.txt”、“.exe”、“.jpg”等。在某个数据子集存在不同文件类型的数据时,存储设备可以将该数据子集中具有相同文件扩展名的数据划分为一个数据子集,以将相同文件类型的数据划分为一个数据子集,作为该数据子集的子节点。

假定数据子集a1中的数据的文件扩展名相同,数据子集a2中包括文件扩展名为.doc的数据和.txt的数据,则存储设备可以根据数据子集a2中的各数据的文件扩展名,将数据子集a2划分成两个数据子集,分别为数据子集a21、数据子集a22。其中,数据子集a21可以包括分区2中具有文件扩展名为.doc的数据,并记录有具有文件扩展名为.doc的数据的逻辑地址和访问顺序。数据子集a22可以包括分区2中具有文件扩展名为.txt的数据,并记录有具有文件扩展名为.txt的数据的逻辑地址和访问顺序。此时,该数据子集a21和数据子集a22为该数据子集树的第二层节点,也可以称为数据子集a2的子节点。

由于不同类型的文件的数据所属的文件的文件头魔数(magic)数据也不同,因此,在一些实施例中,上述存储设备也可以将数据的文件头魔数(magic)数据设定为划分数据子集的特征数据,以将相同文件类型的数据划分为一个数据子集,对此不再加以赘述。

在一个文件的大小大于存储单元的分配单元大小时,存储单元通常会按照存储单元的分配单元大小,将该文件拆分成多个数据进行存储。因此,上述存储设备还可以将数据的文件名设定为划分数据子集的特征数据。这样,存储设备可以进一步根据数据子集a1、数据子集a21和数据子集a22中的数据的文件名,分析数据子集a1、数据子集a21和数据子集a22中是否存在属于一个文件的多个数据。在某个数据子集中存在属于同一个文件的多个数据时,存储设备可以将该数据子集中属于同一个文件的多个数据划分为一个数据子集,以将一个文件的数据划分为一个数据子集,作为该数据子集的子节点。

假定数据子集a1中存在2个属于同一文件的多个数据,则存储设备可以将该2个属于同一文件的多个数据划分为2个数据子集,分别为数据子集a11和数据子集a12。其中,数据子集a11包括属于其中一个文件的多个数据,并记录有该多个数据的逻辑地址和访问顺序。数据子集a12包括属于另一个文件的多个数据,并记录有该多个数据的逻辑地址和访问顺序。数据子集a11、数据子集a12中的数据的逻辑地址在存储单元的逻辑地址空间中连续或不连续。此时,该数据子集a11和数据子集a12为该数据子集树的第二层节点,也可以称为数据子集a1的子节点。

假定数据子集a21中存在3个属于同一文件的多个数据,则存储设备可以将该3个属于同一文件的多个数据划分为3个数据子集,分别为数据子集a211、数据子集a212和数据子集a213。其中,数据子集a211、数据子集a212、数据子集a213分别包括属于一个文件的多个数据,并记录有所包括的多个数据的逻辑地址和访问顺序。数据子集a211、数据子集a212、数据子集a213中的数据的逻辑地址在存储单元的逻辑地址空间中连续或不连续。此时,该数据子集a211、数据子集a212和数据子集a213为该数据子集树的第三层节点,也可以称为数据子集a21的子节点。

需要说明的是,上述所说的访问顺序为主机读取数据的顺序。在本申请实施例中,两个访问顺序相邻的数据的逻辑地址可以相邻也可以不相邻。当两个访问顺序相邻的数据的逻辑地址相邻时,说明该两个数据的逻辑地址在lu的逻辑地址空间中连续、且该两个数据在lu上的存储位置连续。当该两个数据的逻辑地址不相邻时,说明该两个数据的逻辑地址在lu的逻辑地址空间中不连续、且该两个数据在lu上的存储位置不连续。两个访问顺序相邻的数据的逻辑地址是否连续,与存储设备在lu上写入该两个数据时,lu中空闲存储位置的分布有关,对此不再赘述。

至此,存储设备完成该lu的数据子集树的建立。其中,上述数据子集树中的每个节点为一个数据子集,每个数据子集设定有数据特征,每个节点中的数据具有该数据特征(例如:属于同一分区、属于同一类型的文件、属于同一文件),且每个节点记录有各数据的逻辑地址和访问顺序。在本申请实施例中,数据子集树中无子节点的数据子集为叶子子集。也就是说,根据数据子集中的数据的特征数据,无法再拆分的数据子集为叶子子集。叶子子集中各数据的逻辑地址,在存储单元对应的逻辑地址空间中连续或不连续。在本示例中,上述数据子集a11和数据子集a12、数据子集a211、数据子集a212和数据子集a213为该数据子集树的叶子子集。

可选的,在一些实施例中,上述存储设备还可以依据存储系统的配置或用户需求,根据每个数据子集中的数据的其他能够划分数据子集的特征数据,对数据子集a11和数据子集a12、数据子集a211、数据子集a212和数据子集a213进一步划分数据子集,对此不再加以赘述。

可选的,在一些实施例中,上述存储设备在将数据的文件扩展名作为划分数据子集的特征数据,对数据子集进行划分之前,还可以将数据所属的文件所在的文件夹作为划分数据子集的特征数据,对每个数据子集进一步进行划分,以将同一文件夹中的数据划分为一个数据子集。由于同一个应用的数据通常属于同一文件夹,因此,通过这种方式,存储设备还可以按照数据所对应的应用,对数据子集进行划分。

可选的,上述存储设备在根据lu的分区数据,将同一分区中的数据划分为一个数据子集之后,也可以不根据数据子集中的数据的文件扩展名对数据子集进行划分,而是直接根据数据子集中的各数据的文件名,将数据子集中属于一个文件的多个数据划分为一个数据子集,对此不再加以赘述。

可选的,在一些实施例中,上述存储设备还可以依据存储系统的配置或用户需求,根据lu中的数据的其他用于描述数据特征的特征数据,作为划分数据子集的特征数据,对lu中的数据进行数据子集的划分,以建立lu的数据子集树,其实现方式与原理与上述类似,对此不再加以赘述。相应地,在上述存储单元为fs时,上述存储设备可以将fs中的每个数据所属的文件的文件头魔数(magic)数据、数据所属的文件所在的文件夹、数据的文件名等特征数据等作为划分数据子集的特征数据,建立fs的数据子集树,其实现方式与上述存储单元为lu时的实现方式类似,对此不再加以赘述。

可选的,上述实施例虽然以存储设备为例,对如何建立存储单元的数据子集树进行了介绍和说明。但是本领域技术人员可以理解的是,还可以在存储设备上设置一模块(例如数据分析模块等),以通过该模块来执行上述图2所示的动作,对此不再赘述。

通过上述方式,存储设备可以为存储设备的每个存储单元建立一个数据子集树。这样,上述存储设备可以以存储单元的数据子集树中的叶子子集为粒度,进行数据预取操作。具体地,

图4为本申请实施例提供的一种数据访问预测方法的流程示意图。如图4所示,该方法可以包括:

s201、接收主机发送的读请求,读请求包括待读取数据所属的存储单元的标识及待读取数据的逻辑地址。

s202、在待读取数据所属的存储单元对应的数据子集树中确定包括待读取数据的逻辑地址的叶子子集。

s203、按照包括逻辑地址的叶子子集中记录的访问顺序,将待读取数据的逻辑地址之后的预设个数的逻辑地址对应的数据读取至缓存中。

在上述待读取数据所属的存储单元为lu时,上述待读取数据所属的存储单元的标识为lu的标识,例如,逻辑单元号(logicalunitnumber,lun)。在上述待读取数据所属的存储单元为fs时,上述待读取数据所属的存储单元的标识为访问fs的ip地址。其中,上述待读取数据的逻辑地址也可以称为逻辑区块地址(logicalblockaddress,lba)。可选的,上述读请求除了用于指示待读取数据所属的存储单元的标识及待读取数据的逻辑地址,还可以指示待读取数据的大小、待读取数据的访问类型(读或写)等。

继续以上述示例中的存储单元lu为例,若在预设时长内,主机的应用1通过读请求对分区0中的数据进行读取,主机的应用2通过读请求对分区1中的数据进行读取。假定主机的应用1在预设时长内通过多个读请求,读取的是叶子子集a11中访问顺序相邻的多个数据,则存储设备可以触发针对该叶子子集a11的预取操作。假定主机的应用2在预设时长内通过多个读请求,读取的是叶子子集a213中访问顺序相邻的多个数据,则存储设备也可以相应的触发针对该叶子子集a213的预取操作。

以叶子子集a11为例,在存储设备触发针对该叶子子集a11的预取操作后,上述存储设备在接收到主机发送的读请求之后,可以基于读请求所需读取的待读取数据所属的存储单元的标识,确定待读取数据所属的存储单元对应的数据子集树。然后,上述存储设备可以根据该数据子集树的每个叶子子集所记录的数据的逻辑地址,查找待读取数据的逻辑地址所在的叶子子集。

若待读取数据的逻辑地址所在的叶子子集为叶子子集a11,则存储设备可以在叶子子集a11中,按照该叶子子集a11记录的数据的访问顺序,将访问顺序位于待读取数据的逻辑地址之后的预设个数的逻辑地址对应的数据读取至缓存中。此时,该预设个数的逻辑地址与待读取数据的逻辑地址可以相邻,也可以不相邻。

相应地,在存储设备触发针对叶子子集a213的预取操作后,也可以在接收到针对叶子子集a213的读请求后,在叶子子集a213上进行数据预取操作,对此不再赘述。

这样,即便主机的不同应用在预设时长内向存储设备发送的针对同一个存储单元的多个读请求,读取的是该存储单元中逻辑地址不相邻的数据,例如:不同分区中的数据、一个分区中不同文件类型的数据、或一个分区中不同文件的数据等。存储设备通过为存储单元建立数据子集树的方式,可以将存储单元中的数据划分成多个叶子子集,例如,一个分区中的数据为一个叶子子集、一个分区中同一文件类型的数据为一个叶子子集、一个分区中属于同一个文件的数据为一个叶子子集等,使得存储设备可以以叶子子集为粒度,针对主机在预设时长内发送的针对该叶子子集的多个读请求,是否读取的是访问顺序相邻的多个数据,来判断是否触发针对该叶子子集的预取操作,相比现有技术可以提高存储设备执行预取操作的概率,从而可以提高存储设备的数据访问效率。

另外,通过按照数据的访问顺序,在叶子子集中预取主机下一次要在叶子子集中读取的数据的方式,即便两个访问顺序相邻的数据的逻辑地址不相邻,存储设备仍然可以准确的预取到主机下一次要在叶子子集中读取的数据,提高了存储设备预取主机下一次要读取的数据的准确率,进一步地提高了存储设备的数据访问效率。

可选的,在一些实施例中,上述存储设备在为每个存储单元建立数据子集树之后,上述存储设备可以根据上述存储单元所存储的数据的变化,更新上述数据子集树。通过这种方式,可以提高数据子集树的准确性,进而可以提高存储设备预取主机下一次要在叶子子集中读取的数据的准确率,以及,存储设备的数据访问效率。

具体实现时,上述存储设备可以监测每个存储单元的快照数据,在存储单元的快照数据发生变化时,依据所变化的快照数据,对该存储单元的数据子集树进行更新。例如,上述存储设备可以通过重新执行图2所示的流程的方式,为该存储单元重新建立数据子集树,以对该存储单元的数据子集树进行更新。例如,上述存储设备可以依据所变化的快照数据,对该存储单元的数据子集树中的数据子集、数据子集中包括的数据,以及,各数据的逻辑地址和访问顺序进行调整,以对该存储单元的数据子集树进行更新。

可选的,在一些实施例中,上述存储设备在建立数据子集树的过程中,还可以根据各数据子集中的数据的访问顺序、一个读请求所读取的数据的大小等特征,为每个数据子集选择一个适用于该数据子集的数据预取算法,以提高预取主机在该数据子集上的下一待读取数据的效率。可选的,若某一数据子集中的数据具有多重访问模式时,上述存储设备可以为该数据子集设置不同访问模式下的预取算法,对此不再赘述。可选的,上述存储设备也可以只为数据子集树中的叶子子集选择数据预取算法等。

本申请实施例提供的数据访问预测方法,可以根据存储设备的每个存储单元存储的数据的数据特征,为存储设备的每个存储单元建立数据子集树,使得存储设备可以以数据子集树中的叶子子集为粒度进行预取操作,可以提高存储设备执行预取操作的概率,从而可以提高存储设备的数据访问效率。另外,存储设备可以以叶子子集中数据的访问顺序,预取主机下一次要在叶子子集中读取的数据,可以提高存储设备预取主机下一次要在叶子子集中读取的数据的准确率,进一步提高了存储设备的数据访问效率。

图5为本申请实施例提供的一种数据访问预测装置的结构示意图。该数据访问预测装置可以通过软件、硬件或者两者的结合实现上述存储设备的部分或者全部功能,也可以为集成在存储设备中的芯片。该数据访问预测装置可以应用于存储设备,其中,存储设备包括至少一个存储单元及缓存,每个存储单元对应一个数据子集树,数据子集树中的每个节点为一个数据子集,每个数据子集设定有数据特征,每个节点中的数据具有该数据特征,且每个节点记录有各数据的逻辑地址和访问顺序,数据子集树中无子节点的数据子集为叶子子集。

如图5所示,该数据访问预测装置可以包括:接收模块11和处理模块12。其中,

接收模块11,用于接收主机发送的读请求,所述读请求包括待读取数据所属的存储单元的标识及所述待读取数据的逻辑地址;

处理模块12,用于在所述待读取数据所属的存储单元对应的数据子集树中确定包括所述逻辑地址的叶子子集,并按照包括所述逻辑地址的叶子子集中记录的访问顺序,将所述逻辑地址之后的预设个数的逻辑地址对应的数据读取至所述缓存中。

可选的,在一些实施例中,处理模块12,还用于获取待建立数据子集树的存储单元中的数据;从所获取的数据中获取描述数据特征的特征数据,设定划分数据子集的特征数据;根据所设定划分数据子集的特征数据,将所述待建立数据子集树的存储单元中的数据分为至少一个数据子集;分析所述至少一个数据子集对应的数据的特征数据,确定每个所述数据子集是否可以继续划分数据子集,若否,则将所述数据子集作为叶子子集,若是,则对所述数据子集继续划分,直到划分为叶子子集。其中,上述存储单元对应的数据子集树中的叶子子集中各数据的逻辑地址,在所述存储单元对应的逻辑地址空间中连续或不连续。

需要说明的是,在上述所说的存储单元为在存储设备上划分的逻辑单元lu时,待读取数据所属的存储单元的标识可以为逻辑单元的标识,特征数据可以为逻辑单元的分区数据。在上述所说的存储单元为在存储设备上划分的fs(该fs可以通过网络为主机提供访问服务)时,待读取数据所属的存储单元的标识可以为访问所述文件系统的ip地址,特征数据可以为fs中的文件头魔数(magic)数据。

本申请实施例提供的数据访问预测装置,可以执行上述方法实施例中存储设备的动作,其实现原理和技术效果类似,在此不再赘述。

图6为本申请实施例提供的另一种数据访问预测装置的结构示意图。如图6所示,该数据访问预测装置可以为一个芯片,该芯片包括:用于执行上述方法实施例中存储设备的动作的模块或单元,例如,接收模块21(也可以称为接收单元)、处理模块22(也可以称为处理单元)等,其实现原理和技术效果类似,在此不再赘述。

需要说明的是,应理解以上接收模块实际实现时可以为通信接口、收发器、收发电路等,而处理模块可以以软件通过处理元件调用的形式实现;也可以以硬件的形式实现。例如,处理模块可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上处理模块的功能。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里所述的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。

例如,以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个专用集成电路(applicationspecificintegratedcircuit,asic),或,一个或多个微处理器(digitalsignalprocessor,dsp),或,一个或者多个现场可编程门阵列(fieldprogrammablegatearray,fpga)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(centralprocessingunit,cpu)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,soc)的形式实现。

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

本文中的术语“多个”是指两个或两个以上。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系;在公式中,字符“/”,表示前后关联对象是一种“相除”的关系。

可以理解的是,在本申请的实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本申请的实施例的范围。

可以理解的是,在本申请的实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请的实施例的实施过程构成任何限定。

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