预取方法、电子设备、存储介质及程序产品与流程

文档序号:32517229发布日期:2022-12-13 16:44阅读:37来源:国知局
预取方法、电子设备、存储介质及程序产品与流程

1.本技术实施例涉及计算机技术领域,尤其涉及一种预取方法、电子设备、存储介质及程序产品。


背景技术:

2.在存储设备中,缓存的访问速度比硬盘的访问速度快。在读取数据时,基于预取的方式,对待读取的数据进行预测,并提前将预测的数据从硬盘中读取到缓存中来。当存储设备接收读输入/输出(input/output,io)请求时,可以实现缓存中数据的读命中,从而大大提高读io请求的处理速度。现有技术中,最常用的预取方式为顺序预取方式,顺序预取是在假设的前提下去做,适用于顺序性比较好的负载,然而,在多样化的用户访问场景中传统的预取方式无法正常地工作。


技术实现要素:

3.本技术实施例提供一种预取方法、电子设备、介质及程序产品,可提高数据预取的准确率,进而提高操作系统的流畅性,提升用户的体验。
4.第一方面,本技术的实施例提供一种预取方法,包括:接收针对文件的第一访问请求,根据所述第一访问请求得到预取模型,其中,所述预取模型用于确定第一文件,所述第一文件为所述预取模型基于所述第一访问请求预测第二访问请求将要请求的文件,所述第二访问请求为所述第一访问请求的下一个访问请求;根据历史命中信息得到第一预取窗口;根据所述第一预取窗口和所述第一文件得到第二文件;将所述第二文件中的预设数据存储在缓存中。
5.其中,第一访问请求中包括待访问目标和要进行的访问操作,第一访问请求可以为对文件的读请求,也可以为对文件的写请求。
6.在本技术实施例中,实时获取针对文件的第一访问请求,以根据该第一访问请求建立或更新预取模型,由预取模型预测在第一访问请求之后的下一个访问请求将请求的文件,然后根据历史命中信息得到第一预取窗口;根据所述第一预取窗口和所述第一文件得到第二文件,将所述第二文件中的预设数据存储在缓存中。通过文件级预取提升预取命中,降低数据访问延迟,同时对内存占用开销没有明显影响。
7.在其中一种可能实现方式中,所述基于历史命中信息得到第一预取窗口包括:获取第二预取窗口;根据历史命中信息得到历史命中率;当所述历史命中率低于预设阈值时,缩小所述第二预取窗口以得到第一预取窗口;当所述历史命中率大于或等于预设阈值时,增大所述第二预取窗口以得到第一预取窗口。
8.在其中一种可能实现方式中,所述基于历史命中信息确得到预取窗口包括:获取第二预取窗口;根据历史命中信息判断所述第一访问请求所请求的文件是否预先存储至缓存中;若否,缩小所述第二预取窗口以得到第一预取窗口;若是,增大所述第二预取窗口以得到第一预取窗口。
9.在其中一种可能实现方式中,所述根据所述第一访问请求得到预取模型包括:记录第三访问请求,其中所述第三访问请求为所述第一访问请求的上一个访问请求;根据所述第一访问请求和所述第三访问请求得到预取模型。
10.在其中一种可能实现方式中,所述根据所述第一访问请求和所述第三访问请求得到预取模型包括:为所述第一访问请求所请求的文件分配第一标识;为所述第三访问请求所请求的文件分配第二标识;记录所述第一访问请求的时间戳为第一时间戳;记录所述第三访问请求的时间戳为第二时间戳;根据所述第一标识、所述第一时间戳、所述第二标识和所述第二时间戳得到预取模型。
11.在其中一种可能实现方式中,所述根据所述第一标识、所述第一时间戳、所述第二标识和所述第二时间戳得到预取模型包括:当所述第一时间戳与所述第二时间戳之间的时间间隔大于预设时间阈值,记录所述第一访问请求所请求的文件与所述第三访问请求所请求的文件无关;当所述第一时间戳与所述第二时间戳之间的时间间隔小于或等于预设时间阈值,记录所述第一访问请求所请求的文件与所述第三访问请求所请求的文件相关;根据所述第一访问请求所请求的文件与所述第三访问请求所请求的文件相关得到预取模型。
12.在其中一种可能实现方式中,所述根据所述第一访问请求得到预取模型还包括:根据所述第一访问请求所述请求的文件类型确定所述第一访问请求的类型;根据所述第一访问请求的类型得到对应的预取模型。
13.第二方面,本技术的实施例还提供一种电子设备,包括:存储器,用于存储有计算机程序;处理器,用于执行所述存储器存储的所述计算机程序,当所述计算机程序被执行时,所述处理器用于执行如上述所述的预取方法。
14.第三方面,本技术的实施例还提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如上述所述的预取方法。
15.第四方面,本技术的实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序代码,当所述计算机程序代码被一个计算机执行的时候,所述计算机程序代码可以使得所述计算机执行如上述所述的预取方法。
附图说明
16.图1是本技术实施例提供的预取方法所涉及的存储系统架构图。
17.图2为本技术实施例提供的预取方法所涉及的预取系统100示意图。
18.图3为本技术实施例提供的一种预取方法流程示意图。
19.图4a为本技术实施例提供的哈希操作示意图。
20.图4b为本技术实施例提供的lru链示意图。
21.图4c为本技术实施例提供的一种马尔可夫模型示意图。
22.图5为本技术实施例提供的一种预取窗口调整方法流程示意图。
23.图6为本技术实施例提供的获取预取模型的示意图。
24.图7a为本技术实施例提供的平均读取延迟效果示意图。
25.图7b为本技术实施例提供的读取与真实请求效果示意图。
具体实施方式
26.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
27.本技术中所涉及的多个,是指两个或两个以上。另外,需要理解的是,在本技术的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
28.在对本技术实施例进行详细的解释说明之前,先对本技术实施例涉及的存储系统架构进行介绍。
29.请参阅图1,图1是本技术实施例提供的预取方法所涉及的存储系统架构图。
30.如图1所示,该存储系统可以包括主机01、控制器02和多个硬盘03。主机01和控制器02之间通过网络文件系统(network file system,nfs)/通用网络文件系统(common internet file system,cifs)协议或者光纤通道(fiber channel,fc)协议进行通信。
31.具体的,主机01可以向控制器02发送写数据请求,控制器02接收写数据请求之后将写数据请求携带的数据写入硬盘03中。另外,主机01还可以向控制器02发送读数据请求,控制器02接收读数据请求之后,根据读数据请求中的待读取数据的逻辑地址查找其缓存022中是否保存有待读取数据,如果有则直接将待读取的数据发送给主机01,如果没有则从硬盘03中获得该数据并发送给主机01。其中,控制器02和硬盘03可以集成在一个存储设备中,也可以位于相互独立的两个设备中,本技术实施例不对控制器02和硬盘03的位置关系做任何限定。
32.以读数据请求为例,当用户在主机01上或者与主机01连接的客户端上提起一个较大的读数据请求时,主机01往往将该读数据请求拆分成多个请求发送给控制器02处理。将读数据请求拆分成多个请求的操作可以由主机01中的主机总线适配器(host bus adapter,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个读数据请求全部处理完毕。本技术实施例对此不做具体限定。
33.需要说明的是,如图1所示,控制器02至少可以包括处理器021和缓存022。
34.处理器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)、光盘等各种可以存储用于实现本技术实施例的程序代码的机器可读写介质。
35.可以理解的是,缓存022读取数据的速度高于硬盘03读取数据的速度。因此,如果该读数据请求所要读取的数据在缓存022中命中,那么就不必再从硬盘中03中读取该数据,从而提高读取数据的效率。为了提高缓存022的数据命中率,通常的做法是处理器021从硬盘03中预先读取一段数据(例如图1所示的数据023),写入缓存022。那么,当主机01向控制器02发送读数据请求要求读取数据023时,由于数据023已经被提前读取到缓存022中了,因此处理器021可以直接向主机01发送数据023。
36.在本技术实施例中,将数据023提前读取至缓存022就是使用预取技术,预取的主要思想为将未来需要访问的数据a提前读取至“上层存储”,从而隐藏底层软硬件延迟,“上层存储”是指更接近未来需要处理数据a的处理设备的存储,以便未来需要处理数据a的处理设备能更快速读取到数据a。其中“上层存储”可以为将要处理数据a的处理设备的缓存。术语“预取”可以指代通过计算和访存的重叠,在缓存可能会发生失效之前发出预取请求以便在该数据真正被使用到时已提前将数据取入缓存,从而避免缓存失效造成的处理器停顿。
37.在其中一种可能实现方式中,预取的场景包括,在处理器进行运算时,提前将处理器运算将要使用的数据从内存提前存入高速缓冲存储器(通常指高速缓冲存储器cache)的过程,当处理器需要这些数据时,可以直接从这些高速缓冲存储器中获得数据。
38.在其中一种可能实现方式中,预取的场景包括,通过预先读取服务器即将要处理的数据并将其存放在服务器的内存中。
39.在上述存储系统中,虽然在主机01发送的读数据请求到达缓存022之前就将硬盘03中的部分数据预取至缓存022中,可以提高缓存数据的命中率,然而预取的数据太多会造成内存资源浪费,若预取准确率低,也造成较大的读盘压力。
40.请参阅图2,图2为本技术实施例提供的预取方法所涉及的预取系统示意图。
41.本技术实施例的预取系统100的应用场景广泛,其可以应用于本地基于任何存储设备的计算机系统以及端侧设备,如笔记本电脑、智能手机、智慧屏或电视等,其可以应用于分布式场景,其还可以应用于跨设备场景,如两个设备(设备a和设备b)之间要进行数据交互,可以使用预取技术,方便数据交互。如设备a要访问存储至设备b的数据,预先将设备a
要访问的数据从设备b中读取出来,然后存储至靠近设备a的存储中,如预先将设备b中存储的数据存储至设备a的缓存。或设备b要访问存储至设备a的数据,预先将设备b要访问的数据从设备a中读取出来,然后存储至靠近设备b的存储中,如预先将数据存储至设备b的缓存。
42.本技术实施例的预取系统100可以应用于上述的存储系统,可以应用于通用计算机架构和系统的数据访问场景中,将数据预取至靠近将要处理该数据的处理设备的存储,以提升各种应用场景下的数据访问性能。
43.在本技术实施例中,预取粒度为预取数据的大小,其可以为各种粒度大小,如8byte,16byte等,预取粒度可以为数据块级和文件级等。以数据块级为粒度进行预取,即以数据块为粒度进行预取,数据块是最细的粒度映射,数据块级映射的架构一般是缓存分层。该数据块可以包含系统数据页以及存储数据块。数据块级为直接通过读写存储空间(如磁盘)中的一个或者一段地址来存取数据。以文件级为粒度进行预取,即以文件为粒度进行预取,文件作为相关的块的组织单位,块请求按文件分类,同一文件的所有块都会映射在同一设备。文件级则是通过读写某个文件中的一段数据。本技术实施例的预取系统100可以以数据块级或文件级为粒度,本技术实施例对此不做具体限定。
44.以该预取系统100实现于vfs(virtual file system)层,以文件级为粒度进行说明,在vfs层进行以文件为粒度的访问模式学习以及预取管理,其中vfs的作用就是采用标准的unix系统调用读写位于不同物理介质上的不同文件系统,即为各类文件系统提供了一个统一的操作界面和应用编程接口。vfs是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。
45.如图2所示,预取系统100可以包括模型建立模块10、预取模块20和模型压缩模块30。
46.模型建立模块10用于基于访问请求,动态地建立或更新预取模型。即模型建立模块10可以根据用户的访问请求,建立预取模型,在建立好预取模型之后,还可以继续获取用户新的访问请求,以继续根据新的访问请求,更新预取模型,即预取模型是根据用户的访问请求不断更新。模型预取模块20包括在线跟踪文件访问信息、过滤无效文件如空文件、动态建立以及生成预取模型。
47.具体地,模型建立模块10在线跟踪用户访问文件的信息,记录用户访问的文件,对文件数据清洗并过滤无效文件如空文件,根据用户对文件的访问请求建立预取模型,在建立好预取模型之后,还可以继续获取用户对文件的访问请求,以继续根据用户对文件的访问请求,更新预取模型,即预取模型是根据用户对文件的访问请求不断更新。
48.其中,访问请求中包括待访问目标和要进行的访问操作。在以文件为粒度时,该待访问目标可以为文件,待访问目标可以包括以下至少一种:本地文件、本地文件目录(或可称为本地文件夹);访问请求中待访问目标可以用待访问目标在本地的路径表示,比如可以表示成“/tmp/a.txt”的形式。其中,“本地”可以是指实际硬件设备(如个人计算机、服务器等),也可以是指虚拟机,该要进行的访问操作可以为对待访问目标的读操作或对待访问目标的写操作。
49.在其中一种可能实现方式中,访问请求可以由执行本技术实施例方法的设备本地的应用发起,即一个设备中的应用要访问待访问目标时,该设备执行本技术实施例的方法,
从而使该应用可以像访问本地文件或文件目录一样访问待访问目标。
50.在其中一种可能实现方式中,访问请求也可以由其它设备中的应用发起,比如用一个服务器专门执行本技术实施例的方法,实现待访问目标到本地文件或文件目录的映射,其它设备上的应用通过访问该服务器中的文件或文件目录,就能实现对待访问目标的访问。
51.预取模块20用于基于动态的预取窗口预取文件。即预取模块20预取文件时,是根据预取窗口进行预取的,该预取窗口的大小是动态变化的,预取模块20基于动态调整后的预取窗口进行文件预取。预取模块20包括基于历史的预取命中情况动态调整预取窗口大小,以控制预取文件数据对内存的占用,缓解内存压力。
52.具体地,模型建立模块10与预取模块20可以通过vfs实现交互,预取模块20探测预取命中情况,以得到历史的预取命中情况,进而根据历史的预取命中情况动态调整预取窗口大小。预取模块20从模型建立模块10中建立的预取模型或更新后的预取模型得到第一文件,然后根据调整后的预取窗口从第一文件中确定出第二文件,根据第二文件进行预取,将第二文件中的预取数据预先读取至缓存中。
53.模型压缩模块30用于根据访问请求类型分别建立或更新对应的预取模型。即模型压缩模块30对用户访问请求所请求的文件进行分类,根据所请求的不同类型文件确定不同类型的访问请求,然后模型建立模块10根据不同类型的访问请求建立或更新对应的预取模型。模型压缩模块30包括对用户访问的文件进行分类,如可以根据所访问请求的文件的文件路径对文件进行分类,进而确定不同的访问请求,模型建立模块10对不同的访问请求分别建立或更新对应的预取模型,以减少预取模型对内存的占用。
54.具体地,用户在t时刻访问请求的文件为文件a,用户在t+1时刻访问请求的文件为文件b,模型压缩模块30判断出文件a和文件b为不同类型的文件,则确定t时刻与t+1时刻的访问请求为不同类型的访问请求。模型建立模块10根据模型压缩模块30输出结果建立或更新预取模型,模型建立模块10根据t时刻的访问请求建立或更新得到预取模型a,根据t+1时刻的访问请求建立或更新得到预取模型b。
55.下面简述预取系统100中各个模型的工作过程:
56.当用户请求访问一个文件时,该访问请求将被模型建立模块10检测到,模型建立模块10获取该访问请求记录,根据该访问请求记录建立或更新预取模型。若预取模型还未建立,模型建立模块10根据该访问请求建立预取模型,若预取模型已建立,模型建立模块10根据该访问请求更新预取模型。为了减少文件预取模型的内存开销,我们可以通过模型压缩模块30压缩预取模型,以得到不同访问请求对应的预取模型,即,若模型压缩模块30与模型建立模块10可以同时工作,模型压缩模块30判断当前用户访问请求所请求的文件类型,然后模型建立模块10根据模型压缩模块30输出结果建立或更新预取模型。预取模块20获取模型建立模块10建立的预取模型或更新后的预取模型,然后根据得到的预取模型进行预取。
57.接下来对本技术实施例提供的预取方法进行介绍。
58.本技术实施例中使用了流程图用来说明根据本技术的实施例的装置所执行的操作。应当理解的是,前面或下面操作不一定按照顺序来精确地执行。相反,根据需要,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移
除某一步或数步操作。
59.请参阅图3,图3为本技术实施例提供的一种预取方法流程示意图。该预取方法可以由上述预取系统100执行,该预取方法可以包括以下步骤:
60.步骤s301:接收针对文件的第一访问请求。
61.在本技术实施例中,所述第一访问请求可以为对文件的读请求,也可以为对文件的写请求,以第一访问请求为对文件的读请求进行说明。
62.步骤s302:根据所述第一访问请求得到预取模型,其中,所述预取模型用于确定第一文件,所述第一文件为所述预取模型基于所述第一访问请求预测第二访问请求将要请求的文件,所述第二访问请求为所述第一访问请求的下一个访问请求。
63.在本技术实施例中,可以通过实时抓取用户对文件的访问请求,根据抓取到的用户对文件的访问请求建立或更新预取模型。根据抓取到的用户对文件的访问请求可以得到用户对文件的访问序列,然后使用在线智能模型学习用户对文件的访问序列,得到预取模型。其中该在线智能模型是可以实时在线获取数据并学习数据的模型,如实时在线学习用户对文件的访问序列,并实时根据学习到的访问序列更新模型。该在线智能模型可以为马尔可夫模型(markov model)。得到的预取模型可以预测第二访问请求将访问的文件,即可以预测下一个访问请求将要访问请求的文件。
64.在本技术实施例中,预取模型用于预测第一文件,即预取模型用于预测在第一访问请求之后的下一个访问请求将要请求的文件,其中,第一文件为预取模型预测在第一访问请求之后的下一个访问请求将要请求的文件,预取模型可以预测多个第一文件。其中,第二访问请求为在第一访问请求之后的下一个访问请求。第二访问请求可以为对文件的读请求,也可以为对文件的写请求,以第二访问请求为对文件的读请求进行说明。
65.在本技术实施例中,根据所述第一访问请求得到预取模型包括:记录第三访问请求,其中所述第三访问请求为所述第一访问请求的上一个访问请求,根据所述第一访问请求和所述第三访问请求得到预取模型。
66.在本技术实施例中,第三访问请求为在第一访问请求之前的上一个访问请求,可以为对文件的读请求,也可以为对文件的写请求,以第三访问请求为对文件的读请求进行说明。
67.在本技术实施例中,记录用户对文件的访问请求,如记录第一访问请求和第三访问请求,得到用户对文件的访问序列,以从用户对文件的访问序列中学习用户的数据访问模式,在更加准确学习用户访问模式的基础上,建立得到的预取模型可以更加准确预测用户在每一次访问请求之后的下一访问请求将要请求的文件。
68.在本技术实施例中,根据所述第一访问请求和所述第三访问请求得到预取模型包括:为所述第一访问请求所请求的文件分配第一标识;为所述第三访问请求所请求的文件分配第二标识;记录所述第一访问请求的时间戳为第一时间戳;记录所述第三访问请求的时间戳为第二时间戳;根据所述第一标识、所述第一时间戳、所述第二标识和所述第二时间戳得到预取模型。
69.在本技术实施例中,为访问请求所请求的文件分配的标识可以唯一指示该文件,即第一标识可以唯一指示第一访问请求所请求的文件,第二标识可以唯一指示第三访问请求所请求的文件。第一访问请求的时间戳即为用户发起第一访问请求时的时间戳,也即产
生第一访问请求时的时间戳,将该时间戳记录为第一时间戳。第三访问请求的时间戳即用户发起第三访问请求时的时间戳,也即产生第三访问请求时的时间戳,将该时间戳记录为第二时间戳。
70.具体地,所述根据所述第一标识、所述第一时间戳、所述第二标识和所述第二时间戳得到预取模型包括:当所述第一时间戳与所述第二时间戳之间的时间间隔大于预设时间阈值,记录所述第一访问请求所请求的文件与所述第三访问请求所请求的文件无关;当所述第一时间戳与所述第二时间戳之间的时间间隔小于或等于预设时间阈值,记录所述第一访问请求所请求的文件与所述第三访问请求所请求的文件相关;根据所述第一访问请求所请求的文件与所述第三访问请求所请求的文件相关得到预取模型。
71.在本技术实施中,当所述第一时间戳与所述第二时间戳之间的时间间隔大于预设时间阈值,即第一访问请求与第三访问请求所产生时间的时间间隔大于预设时间阈值,即用户发起第一访问请求与第三访问请求之间的时间间隔大于预设时间阈值,则可以认为第一访问请求与第三访问请求所请求的文件无关联关系,可以不依据该第一访问请求与该第三访问请求建立或更新预取模型。当所述第一时间戳与所述第二时间戳之间的时间间隔小于或等于预设时间阈值,即第一访问请求与第三访问请求所产生时间的时间间隔小于或等于预设时间阈值,即用户发起第一访问请求与第三访问请求之间的时间间隔小于或等于预设时间阈值,则可以认为第一访问请求与第三访问请求所请求的文件有关联关系,可以依据该第一访问请求与该第三访问请求建立或更新预取模型。
72.具体地,可以在vfs层实时抓取用户对文件的读请求,系统调用到vfs层的vfs_read接口,通过vfs_read接口实时跟踪文件访问请求,记录访问请求的信息:文件全路径名和时间戳等,还可以记录访问请求的信息包括:文件大小和文件请求偏移。其中,文件全路径名包括文件名与文件路径,文件名即为文件设定的一个指定的名称,可以由文件主名和扩展名组成。文件路径即文件的存储位置。通过文件名与文件路径来唯一表示该文件。时间戳为产生该访问请求的时间戳。文件大小为访问请求所请求的文件的大小。文件请求偏移用以度量从文件开始处计算的字节数,通常,读操作或写操作都是从当前文件偏移量开始,并使偏移量增加所读写的字节数。
73.若要记录用户的每一访问请求的信息,记录每一次访问请求所述请求文件的文件全路径名和时间戳,则需要较大的存储空间存储该访问请求信息,将产生较大的记录资源消耗,为了减少记录资源消耗,对文件全路径名进行哈希操作,得到一个哈希值,将该哈希值来唯一表示该文件。其中哈希操作所使用的哈希算法包括但不限于加法hash、位运算hash、乘法hash、除法hash、查表hash和混合hash,本技术实施例对此不做具体限定。
74.为了提高对文件系统、存储空间或存储设备等中文件的扫描速度和访问速度,对文件系统、存储空间或存储设备等上的文件建立文件索引,对访问请求中所请求的每个文件设置一个索引值,可以基于文件访问顺序分配给每个文件索引值。具体而言,我们用一个哈希索引结构来索引文件,哈希索引结构包括唯一表示文件的哈希值,以及基于文件访问顺序分配给每个文件的索引值。请一并参阅图4a,在t时刻,记录得到从初始时刻至t时刻总共访问了n个文件,文件访问序列依时间先后:文件a:path_a/a.jpg、文件b:path_x/x.so、文件c:path_y/y.log

文件n-2:path_b/b.png、文件n-1为空文件,文件n:path_z/z.so。
75.对文件全路径名进行哈希操作,每个文件有其对应的唯一哈希值,如对文件a:
path_a/a.jp进行哈希操作,得到哈希值为h1。对文件b:path_x/x.so进行哈希操作,得到哈希值为h4。对文件c:path_y/y.log进行哈希操作,得到哈希值为h2。其中文件n-1为空文件,则可以不对文件n-1进行哈希操作。
76.在初始情况,全局所记录的索引值为0,当检测用户请求访问文件a:path_a/a.jpg时,将索引值0分配给文件a,同时,全局索引值增加为1。当检测到用户请求访问文件文件b:path_x/x.so时,将为了控制,将索引值1分配给文件b,同时,全局索引值增加为2。以此类推,为每个访问请求所请求的文件分配唯一的索引值。检测到用户访问请求文件n-1时,检测到文件n-1为空文件,则过滤文件n-1,不分配索引值给文件n-1。当检测到用户请求访问文件n:path_z/z.so时,将索引值n-1分配给文件n,同时,全局索引值增加为n。
77.该哈希索引结构存储了各个文件唯一的哈希值以及对应的索引值。如图4a所示,对于文件a:path_a/a.jpg的哈希索引结构中包括哈希值h1和索引值1。即使对文件的文件全路径名进行哈希操作,减少内存占用,如果将所有访问请求信息都记录下来,也将产生较大的内存开销,因此,为了控制文件访问请求记录的内存开销,我们需要选择合适的剔除算法,剔除文件记录从而达到控制内存开销的目的,我们选用最近最少使用(least recently used,lru)算法来进行,因此,所有访问请求记录将通过最近最少使用(least recently used,lru)链表进行管理。最近最少使用链表可以是内存管理的一种算法,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。为了实现这一目标,操作系统采用了lru链表,把刚访问过的页面放在列首,越接近列尾的就是越长时间未被访问过的页面,利用页面在lru链表中的相对位置可以找到最久未被使用的页面。页面置换算法遵循先进先出(fifo)原则包括:新分配的页面链接到不活跃或活跃链表头部。从活跃链表的尾部摘取页面链接到不活跃链表头部。从不活跃链表尾部摘取页表进行内存回收。其中,页/页面是存储空间大小,操作系统将存储空间划分为固定大小的页/页面,用于分配管理内存空间。
78.具体地,请一并参阅图4b,lru链表中维护一个活跃链表active list以及一个不活跃链表inactive list,当文件首次被访问,则该文件插入不活跃链表中,当该文件再次被访问,则将该文件从不活跃链表中取出,然后插入活跃链表的头部,活跃链表中被淘汰的文件则会被插入不活跃链表头部,当需要剔除文件访问记录时,则从不活跃链表末尾进行剔除。由于预取模型是根据用户的访问请求得到的,预取模型大小会随记录的访问请求增加呈指数型扩大,因此,我们通过限制最大索引值来进行控制,如果文件索引值达到最大值,则通过lru链表淘汰一个文件,回收位于不活跃链表尾部的文件,并回收分配给该文件的索引值,同时更新哈希索引结构以及预取模型,即回收该从不活跃链表中淘汰出的文件所分配的索引值,将该索引值分配给新文件,获取该新文件的哈希值,得到该新文件的哈希值与索引值。预取模型与文件的哈希索引结构有关,在文件的哈希索引结构更新时,则预取模型也相应更新,预取模型的建立与更新请参考下文。
79.为了建立或更新预取模型,维持一个状态表,状态表记录了当前时刻的访问请求的信息和上一次访问请求的信息,即状态表中包括第一访问请求的第一时间戳和第一访问请求所请求文件的索引值以及第三访问请求的第二时间戳和第三访问请求所请求文件的索引值。示例性地,以t时刻,检测到用户的访问请求,即第三访问请求,记录第三访问请求所请求文件的索引值为4,第二时间戳为1631.21342。在当前时刻,即t+1时刻,检测到用户的访问请求,即第一访问请求,记录第一访问请求所请求文件的索引值为2,第一时间戳为
9876.87231。
80.请参阅表1。
81.上一次访问请求文件的索引值4时间戳1631.21342当前访问请求文件的索引值2时间戳9876.87231
82.表1
83.如果当前时刻访问请求对应的时间戳与上一时刻访问请求对的时间戳之间的时间间隔小于或等于预设时间间隔,则认为当前时刻访问请求所请求的文件与上一时刻访问请求所请求的文件之间有关联关系,根据该关联关系更新预取模型。若当前时刻访问请求对应的时间戳与上一时刻访问请求对的时间戳之间的时间间隔大于预设时间间隔,则认为当前时刻访问请求所请求的文件与上一时刻访问请求所请求的文件之间没有关联关系,不更新预取模型。即第一时间戳与第三时间戳之间的时间间隔大于预取时间阈值,以预设时间阈值为24小时为例,则视该两个时间戳所对应的文件没有关联关系,不更新预取模型。若第一时间戳与第三时间戳之间的时间间隔大于预取时间阈值,以预设时间阈值为24小时为例,则视该两个时间戳所对应的文件没有关联关系,不根据该关联关系更新预取模型。
84.基于状态表建立预取模型或基于状态表实时更新预取模型,在线智能模型以马尔可夫模型为例,马尔可夫模型学习用户的访问序列后得到预取模型。马尔可夫模型由一个二维状态转换表表示,即马尔可夫模型包括马尔可夫转换表,马尔可夫转换表包括n行n列,马尔可夫转换表记录两个不同文件间的转换次数。如第i行第j列记录的数值为2,则代表在索引值为i的文件后访问索引值为j的文件这种情况发生了2次。第j行第i列记录的数值为1,则代表在索引值为i的文件后访问索引值为j的文件这种情况发生了1次。
85.根据设置的最大索引值确定马尔可夫转换表的最大空间占用,若设置最大索引值为n,则n为可记录的最多文件数量,同时也确定了马尔可夫转换表的最大空间占用,分配可存储n*n数据大小内存空间用于存储马尔可夫转换表。马尔可夫转换表记录了两两文件间的历史访问情况,基于该模型,当访问一个文件时,历史转换次数较大的文件更可能被预取。请参阅表2。
[0086] 123

n1/32

020/1

0303/
…0………………
n020

/
[0087]
表2
[0088]
由表2可知,在第2行第3列的数值为1,即在索引值为2的文件与索引值为3的文件之间的转换次数为1次,如在索引值为2的文件后访问索引值为3的文件这种情况发生了1次。在第3行第2列的数值为3,即在索引值为3的文件与索引值为2的文件之间的转换次数为3次,如在索引值为3的文件后访问索引值为2的文件这种情况发生了3次。
[0089]
示例性地,请一并参阅图4c,图4c为本技术实施例提供的一种马尔可夫模型示意
图。马尔可夫模型中包括各个文件之间的转换次数,如索引值为1的文件箭头指向索引值为6的文件,其上的转换次数为1,即在索引值为1的文件后访问索引值为6的文件这种情况发生了1次。索引值为6的文件没有箭头指向索引值为1的文件,即在索引值为6的文件后访问索引值为1的文件这种情况发生了0次。
[0090]
在本技术实施例中,可以通过模拟用户的访问请求,预先建立一个初始预取模型,以在第一次检测到用户的访问请求时,即以初始时刻检测到第一访问请求时,就可以根据该初始预取模型进行预取。之后不断获取用户的访问请求数据,更新该初始预取模型。
[0091]
在本技术实施例中,也可以在不断获取用户的访问请求数据之后,再建立并更新该预取模型,如在初始时刻检测到用户的访问请求,此刻预取模型还未建立,所以暂未预取。在下一时刻t1时刻,检测到用户的访问请求,判断初始时刻与t1时刻之间的时间间隔小于预设时间阈值,则根据初始时刻的用户的访问请求与t1时刻的用户访问请求建立预取模型,记录初始时刻所请求的文件a与t1时刻所请求的文件b的转换次数为1。在t1时刻之后的下一时刻t2时刻,检测到用户的访问请求,判断t1时刻与t2时刻之间的时间间隔小于预设时间阈值,则根据t1时刻的用户的访问请求与t2时刻的用户访问请求建立预取模型,记录t1时刻所请求的文件b与t2时刻所请求的文件c的转换次数为1,在t2时刻,预取模型中包括在文件a后访问文件b这种情况发生了1次,在文件b后访问文件c这种情况发生了1次。在t2时刻之后的下一时刻t3时刻,检测到用户的访问请求,判断t2时刻与t3时刻之间的时间间隔小于预设时间阈值,则根据t3时刻的用户的访问请求与t2时刻的用户访问请求建立预取模型,记录t3时刻所请求的文件a与t2时刻所请求的文件c的转换次数为1,在t3时刻,预取模型中包括在文件a后访问文件b这种情况发生了1次,在文件b后访问文件c这种情况发生了1次,在文件c后访问文件a这种情况发生了1次。在t3时刻之后的下一时刻t4时刻,检测到用户的访问请求,判断t3时刻与t4时刻之间的时间间隔小于预设时间阈值,则根据t3时刻的用户的访问请求与t4时刻的用户访问请求更新预取模型,记录t4时刻所请求的文件b与t3时刻所请求的文件a的转换次数为1,在t4时刻,预取模型中包括在文件a后访问文件b这种情况发生了2次,在文件b后访问文件c这种情况发生了1次,在文件c后访问文件a这种情况发生了1次。以此类推,不断更新或建立预取模型,以得到预取模型。
[0092]
在本技术实施例中,预取模型中记录各个文件之间的转换次数,当访问一个文件时,该文件对应表项所记录的转换次数越大,则对应文件越可能在未来时刻被读取。即第一文件包括记录的转换次数更大的文件,可以设置一个转换次数阈值,若转换次数超过次转换次数阈值,则对应的文件为第一文件。
[0093]
示例性地,设置转换次数阈值为3,索引值为1的文件与索引值为2的文件之间的转换次数为8,索引值为1的文件与索引值为3的文件之间的转换次数为2,索引值为1的文件与索引值为6的文件之间的转换次数为4,索引值为1的文件与索引值为7的文件之间的转换次数为5,则转换次数8、5、4大于转换次数阈值3,则索引值为2的文件、索引值为6的文件以及索引值为7的文件在未来更有可能被读取到。由此可以确定第一文件包括索引值为2的文件、索引值为6的文件以及索引值为7的文件。
[0094]
请一并参阅图4c,当访问一个文件时,我们根据马尔可夫转换表选择文件进行预取,当该文件所在行中有文件的转换次数超过转换次数阈值(如默认为1),将对应的文件确定为第一文件,如当前第一访问请求所请求的文件为索引值为1的文件,索引值为1的文件
指向索引值为2的文件的转换次数为3,索引值为1的文件指向索引值为3的文件的转换次数为2,索引值为1的文件指向索引值为2的文件的转换次数为1,则可以确定第一文件包括索引值为2的文件和索引值为3的文件。
[0095]
步骤s303:根据历史命中信息得到第一预取窗口。
[0096]
在本技术实施例中,为了最好地提升预取命中,预取数据时是根据预取窗口进行预取的,第一预取窗口即表示一次性预取的数据大小。以预取文件为例,我们基于预取窗口对文件进行预取,该预取窗口表示一次性预取的文件个数。则第一预取窗口为检测到第一访问请求后,进行预取时所依据的预取窗口。
[0097]
在本技术实施例中,命中是指任一访问请求命的数据被提前读取出来放在“上层存储”,如放在缓存中。可以统计历史命中的数据,以得到历史命中信息,如历史命中率,或上一次访问请求是否命中等。历史命中率可以为获取得到的历史命中数据中,命中次数与未命中次数的比值。
[0098]
在本技术实施例中,可以获取第二预取窗口,根据历史命中信息调整第二预取窗口,以得到此次预取所依据的第一预取窗口,其中该第二预取窗口可以为初始设置的一个预取窗口,也可以为经过上一次预取调整之后的预取窗口。示例性地,第二预取窗口可以为初始时刻预先设置的预取窗口。第二预取窗口也可以为上一次预取窗口,如,在t-1时刻的第一预取窗口为a,在t时刻,则该预取窗口a为第二预取窗口,根据历史命中信息调整该第二预取窗口a,然后得到第一预取窗口b。在t+1时刻,根据历史命中信息调整该第二预取窗口b,然后得到第一预取窗口c。
[0099]
在其中一种可能实现方式中,可以预先设置初始预取窗口,即第二预取窗口,在第一次预取时,基于没有历史命中信息,可以直接根据该第二预取窗口进行预取,在下一次预取时,可以根据历史命中信息调整该第二预取窗口大小,得到第一预取窗口,然后根据该第一预取窗口进行预取。
[0100]
在其中一种可能实现方式中,可以预先设置初始预取模型和初始预取窗口(即第二预取窗口),对该初始预取模型进行测试,得到该初始预取模型的历史命中信息,则在初始时刻检测到第一访问请求时,根据该初始预取窗口进行预取。在下一次检测到第一访问请求时,可以根据该初始预取模型的历史命中信息对该初始预取窗口进行调整,得到第一预取窗口。
[0101]
在其中一种可能实现方式中,所述基于历史命中信息得到第一预取窗口包括:获取第二预取窗口;根据历史命中信息得到历史命中率;当所述历史命中率低于预设阈值时,缩小所述第二预取窗口以得到第一预取窗口;当所述历史命中率大于或等于预设阈值时,增大所述第二预取窗口以得到第一预取窗口。
[0102]
在本技术实施例中,历史命中率可以是统计历史命中次数与历史未命中次数的比率,或是统计历史命中次数与历史总共预取次数的比率。根据该预取模型的历史命中信息计算得到历史命中率,历史命中率随着每次的预取情况变化,则相应的第一预取窗口也与历史命中信息有关。
[0103]
在其中一种可能实现方式中,所述基于历史命中信息确得到预取窗口包括:获取第二预取窗口;根据历史命中信息判断所述第一访问请求所请求的文件是否预先存储至缓存中;若否,缩小所述第二预取窗口以得到第一预取窗口;若是,增大所述第二预取窗口以
得到第一预取窗口。
[0104]
在本技术实施例中,可以根据上一次预取情况调整此次预取窗口的大小,即若t时刻进行预取,判断t-1时刻的预取是否命中,即判断t时刻所请求的文件是否已经被提前读取至缓存中,若否,则可以适当减少该预取窗口,若是,则可以适当增加该预取窗口。
[0105]
具体地,当访问一个文件时,我们根据马尔可夫转换表选择文件进行预取,即选择第一文件进行预取,当该文件所在行中有文件的转换次数超过一定阈值(默认为2),则对应的文件为第一文件,我们将该第一文件放入预取窗口,直到到达最大预取窗口大小(默认8)或者没有文件符合预取要求。如图4b所示,在访问索引值为1的文件时,索引值为2的文件2和索引值为3的文件会被放至第一预取窗口,因为索引值为2的文件2和索引值为3的文件对应转换次数已超过了转换次数阈值。
[0106]
然而,如果数据预取命中较低,则不加限制地预取将会造成内存资源以及带宽浪费,因此,我们基于历史命中情况对文件预取窗口进行动态调节。请一并参阅图5,在每次预取前,先进行预取窗口调整,以得到第一预取窗口,进而根据该第一预取窗口进行预取。初始将窗口大小设置为1,并设置好最大预取窗口大小为8、最小预取窗口大小为1,判断在当前时刻的前一次预取是否命中,若是,则将增大预取窗口大小,如翻倍预取窗口大小,判断增大后的预取窗口的大小是否大于或等于最大预取窗口,若是,将该预取窗口的大小调整至最大预取窗口大小8,若否,则该第一预取窗口的大小为增大后的预取窗口的大小。若判断在当前时刻的前一次预取没有命中,则缩小预取窗口大小,如减半预取窗口大小,判断减少后的预取窗口大小是否小于或等于最小预取窗口大小1,否是,将该预取窗口的大小调整至最小预取窗口大小1,若否,则该第一预取窗口的大小为增大后的预取窗口的大小。结束预取窗口调整,得到第一预取窗口。
[0107]
示例性地,设置初始预取窗口大小为1,在t时刻,判断上一次预取是否命中,即判断t-1时刻所请求的文件已经被提前读取至缓存中,若是,将初始预取窗口大小翻倍,即将初始预取窗口大小调整至2,得到t时刻对应的第一预取窗口大小为2。如否,将初始预取窗口减半,则预取窗口大小为0.5,判断该预取窗口大小小于最小预取窗口大小1,则将t时刻对应的第一预取窗口大小调整为最小预取窗口大小1。在t-1时刻的预取命中,则t时刻的预取窗口大小为2。在t2时刻,判断上一次预取是否命中,即判断t时刻所请求的文件已经被提前读取至缓存中,若是,将初始预取窗口大小翻倍,即将初始预取窗口大小调整至4,得到t1时刻对应的第一预取窗口大小为4。如否,将初始预取窗口减半,则预取窗口大小为1,判断该预取窗口大小等于最小预取窗口大小1,则将t时刻对应的第一预取窗口大小调整为1。
[0108]
步骤s304:根据所述第一预取窗口和所述第一文件得到第二文件。
[0109]
在本技术实施例中,在确定好第一预取窗口大小后,就可以得到此次预取的文件个数,根据此次预取的文件个数,从第一文件中提取出对应个数的文件得到第二文件。根据马尔科夫模型确定的第一文件进行预取,当该以文件所在行中有文件的转换次数超过一定转换次数阈值(默认为2),我们将该对应的文件放入第一预取窗口,直到放入第一预取窗口的文件个数到达最大窗口大小(默认8)或者没有第一文件符合预取要求,即没有文件的转换次数超过转换次数阈值。
[0110]
示例性地,第一预取窗口为5,第一文件包括6个文件,则从该6个文件中确定出5个文件,该确定的5个文件为第二文件。若第一预取窗口为5,第一文件包括4个文件,基于第一
文件的数量少于第一预取窗口大小,则可以将该4个第一文件均确定为第二文件。
[0111]
在其中一种可能实现方式中,可以依据转换次数的大小,优先将第一文件中转换次数大的文件放入至第一预取窗口,直至达到第一预取窗口的大小或没有可以放入的第一文件,如第一预取窗口为3,第一文件包括4个文件,分别为文件a、文件b、文件c和文件d,其中,文件a的转换次数为6,文件b的转换次数为5、文件c的转换次数为4和文件d的转换次数为3,则优先将第一文件中转换次数大的文件放入至第一预取窗口,即先将文件a放入第一预取窗口,再将文件b放入第一预取窗口,最后再将文件c放入第一预取窗口。
[0112]
步骤s305:将所述第二文件中的预设数据存储在缓存中。
[0113]
在本技术实施例中,为了减少预取数据内存占用,可以将第二文件中的部分数据存储至缓存中,而非将第二文件的数据均存储至缓存中。如第二文件包括文件a和文件b,则将文件a的部分数据存储至缓存中,将文件b的部分数据存储至缓存中。其中部分数据可以为文件前n页数据,本技术实施例对此不做具体限定。
[0114]
在本技术实施例中,可以基于文件内部预取策略对文件预取数据进行控制,以readahead文件内部预取策略为例,选择一个文件最多预取前两页,若该文件内部访问模式是顺序的,则当读取前两页后会自动进行内部文件预取。
[0115]
在本技术实施例中,通过控制文件最大索引值来控制马尔科夫模型大小,但是,实际情况可能更加复杂,必须保存大量文件访问记录才能提升预取命中。进一步地,在建立或更新预取模型时,可以基于文件分类的方法来进一步缩减模型大小,通过对所访问请求的文件进行分类,确定不同类型的访问请求,根据不同类型的访问请求建立或更新对应的预取模型,旨在缩减预取模型大小的同时不降低预取准确率。
[0116]
在其中一种可能实现方式中,所述根据所述第一访问请求得到预取模型还包括:根据所述第一访问请求所述请求的文件类型确定所述第一访问请求的类型;根据所述第一访问请求的类型得到对应的预取模型。
[0117]
在本技术实施例中,根据第一访问请求所请求的文件类型确定第一访问请求的类型,根据不同类型的第一访问请求建立对应的预取模型,由此压缩建立的预取模型的大小。在对文件类型进行分类时,可以通过语义分析对目录进行文件分类,或者根据不同应用进行分类,也可以分为系统文件和用户文件。
[0118]
示例性地,将访问请求的文件分为系统文件和用户文件,因为该两类文件在访问上相对分离,虽然系统文件与用户文件可能存在关联关系,但是系统文件访问序列一般比较固定,而用户文件访问序列更加随意,因此将该两类文件分离也可以减少一些错误关联情况。对于系统文件和用户文件的分类,由于用户访问的文件一般位于语义比较明确的目录下,因此我们通过文件路径识别用户文件,而其余文件为系统文件。请一并参阅图6,记录到的原始访问请求文件数量为5,通过分类后,所请求的文件分为3个系统文件和2个用户文件,然后分别建立模型,根据2个用户文件对应的访问请求建立或更新预取模型,得到第一预取模型,根据3个系统文件对应的访问请求建立或更新预取模型,得到第二预取模型。结果,原模型的空间占用从5*5减至3*3+2*2,降低了53%。
[0119]
在其中一种可能实现方式中,有应用a、应用b和应用c,在t时刻,用户的第一访问请求所请求的文件为应用a的文件,则根据关于应用a的访问请求建立或更新预取模型。在t+1时刻,用户的第一访问请求所请求的文件为应用b的文件,根据关于应用b的访问请求建
立或更新预取模型。在t+2时刻,用户的第一访问请求所请求的文件为应用c的文件,根据关于应用c的访问请求建立或更新预取模型。可以得到三个不同的预取模型。
[0120]
在其中一种可能实现方式中,若文件预测模型预测准确率较低,即判断命中率持续低于一定阈值,则清空该预取模型数据,重新进行模型的建立和更新。如图6所示,若第一预取模型的命中率低于一定阈值,则删除该第一预取模型,重新获取新的用户访问请求数据,建立或更新新的第一预取模型。
[0121]
在本技术实施例中,通过文件级预取提升预取命中,降低数据访问延迟,同时对内存占用开销没有明显影响。使用三种真实负载和四种模拟负载进行测试,包括了负载一至负载八,示例性地,负载一为图片库浏览,负载二为文档浏览,负载三为短视频浏览,负载四为脸书facebook,负载五为推特twitter,负载六为慕课网webserver,负载七为文件服务器fileserver。负载八为上述负载一至负载七的平均,即综合负载一至负载七,测试用机配置为:intel i5-9500处理器,16gb内存以及m.2teclast 256gb np900-2280 ssd。实验比较对象包含模型一至模型五,其中模型一为linux系统自带顺序预取方法readahead模型,readahead模型是linux kernel的文件内部页预取策略,该策略为通过检测相邻两页访问是否为顺序判断目前访问是否是顺序,若识别为顺序模式,则进行顺序预取,否则,将预取大小减半直到关闭预取功能。这是目前常用的预取策略。模型二是一个基于马尔科夫的文件内部预取方法,该方法对于每一个文件维持一个马尔科夫状态机,状态机中每个状态代表文件中的一页。一个马尔可夫状态机的实体为一个状态转换表,表中记录了文件页间的转换次数,基于当前访问页,每次预取状态表中转换概率最高的一页。当准确率低于一定阈值则重新生成状态表。模型三是一个基于字典树的文件预取方法,该方法基于频繁树fp-growth算法的ssd内部预取策略,该预取方式将数据从闪存芯片预取至ssd内部缓存中,以提升ssd访问速率。具体而言,该方法在一定时间内分析ssd访问lba序列,然后挖掘频繁对象集。预取时,对现有频繁集进行匹配,若在一个频繁集中有一半地址被访问,则预取该频繁集剩余地址的数据到ssd的缓存中。模型四是本技术实施例的预取模型,模型五是本技术实施例中添加模型缩减功能的预取模型,即增加根据所述第一访问请求所述请求的文件类型确定所述第一访问请求的类型,根据所述第一访问请求的类型得到对应的预取模型。确定默认设置最大文件索引为512。
[0122]
如图7a所示,从平均读取延迟来看,文件内预取中,模型二相对模型一在所有负载中都有所改善,由于在文件内部模型一可以识别更多随机访问模式。文件间预取中,模型三将性能平均提升13.6%,几乎在所有负载中,本技术实施例的模型四表现最优,尤其在脸书facebook和推特twitter负载中,性能提升明显,相对模型三提升40%。而对于前两类负载(图片库浏览和文档浏览)提升并不明显,这是由于该两类负载多为顺序访问,多数命中为模型一命中。请一并参阅图7b,所有预取策略的命中偏低,虽然模型三有一定的提升,但其资源消耗代价过高。此外,模型五的性能相较模型四没有明显下降,甚至在一些负载如twitter中,模型五的性能高于模型四,这也证明了我们模型压缩方法的可行性。
[0123]
本技术实施例还提供了一种计算机可读存储介质。所述可读存储介质中存储有计算机指令,所述指令在计算设备上运行时,使得计算设备执行前述实施例提供的预取方法。
[0124]
本技术的实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序代码,当所述计算机程序代码被一个计算机执行的时候,所述计算机程序代码可以使得
所述计算机执行如上述所述的方法。因此,通过将不颠簸的匿名页换入至不活跃链表,则可以把不颠簸的匿名页优先于颠簸的匿名页换出,减少颠簸匿名页被换出的概率,进而减少匿名页的数据颠簸,从而在系统内存高压状态下减少无效的匿名页回收,提高匿名页内存的回收效率。
[0125]
对于本领域的技术人员而言,显然本技术不限于上述示范性实施例的细节,而且在不背离本技术的精神或基本特征的情况下,能够以其他具体形式实现本技术。因此,只要在本技术的实质精神范围之内,对以上实施例所作的适当改变和变化都应该落在本技术要求保护的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1