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

预读取的确定方法和装置、存储介质及电子设备

文献发布时间:2024-04-18 19:59:31


预读取的确定方法和装置、存储介质及电子设备

技术领域

本申请实施例涉及存储技术领域,具体而言,涉及一种预读取的确定方法和装置、存储介质及电子设备。

背景技术

近年来固态硬盘(Solid State Drive,简称为SSD)逐渐成为计算机领域的热门话题。随着科技的不断进步,传统机械硬盘已经逐渐被SSD所取代,成为现代存储解决方案的主流之一。当固态硬盘读nand数据时,nand收到读命令后,需要一个微秒(us)级别的数据准备时间,用于将数据从nand中拿出并传输到缓存中。对于固态硬盘,有很多用到低压力顺序读的场景,该场景下,为了降低时延,提升性能,会用到预读功能,即每笔host读会带一笔预测读,将nand中的数据取出存到buffer中,host并不感知这笔预测读,下一笔host读的时候会优先判断是否命中上一笔预读,若命中,直接将buffer中的数据返回,节省了数据从nand到buffer的传输时间,从而降低读时延,提升性能。

具体地,相关技术中,存在如下方案。方案1,预读数据从nand取出后先存入后端管理的buffer,当buffer不足时,返回内存不足的提示并启动集中清理。该方案的缺陷是内存不足启动清理时可能会将未取走的预读数据也清理掉。因为FTL(闪存转换层,FlashTranslation Layer)模块有多个核,并不能严格保证host读-预读-host读-预读的下发顺序,实测发现会有预读连续下发的情况发生,所以buffer不足时可能有多个预读数据还没有被取走就被清理掉了,这些预读就会白白消耗了闪存的使用寿命,并且会导致预读命中率下降,降低了预读功能,以及减小读时延的效果。

方案2,每个plane管理4个buffer,对应4个4k大小的数据,该方案的缺陷是会发生大量的数据替换,因为每个plane内有多个page,每个page都有4个4k数据,该plane内的所有page的第一个4k大小的数据都要存入第一个buffer,第二个4k大小的数据都要存入第二个buffer。另外,现有方案对于后端模块对预读命令的处理也没有给出合理方案。

针对现有技术中,在执行硬盘预读操作时,若预测缓存区未及时清理,会触发预测缓存区集中清理,导致尚未读取的数据也被清除的问题,尚未得到有效解决。

发明内容

本申请实施例提供了一种预读取的确定方法和装置、存储介质及电子设备,以至少解决现有技术中在执行硬盘预读操作时,若缓存区未及时清理,会触发缓存区集中清理,导致尚未读取的数据也被清除的问题。

根据本申请的一个实施例,提供了一种预读取的确定方法,包括:在预测读取功能开启的情况下,确定接收到的第一读取指令所携带的第一指令信息,其中,所述第一指令信息包括:第一读取指令对应的第一标志位、第一读取指令对应的第一读取地址,所述第一标志位用于指示所述第一读取指令的第一指令类别;根据所述第一读取地址确定预测缓存区的第一命中结果,其中,所述预测缓存区用于存放历史预测读取指令对应的历史读取地址,所述第一命中结果用于指示所述历史读取地址中是否存有所述第一读取地址;根据所述第一指令类别和所述第一命中结果确定是否允许后端继续使用预测读取功能。

在一个示例性实施例中,根据所述指令类别和所述命中结果确定是否允许后端继续使用预测读取功能,包括: 在所述第一指令类别为主机读取指令,且所述命中结果指示所述历史读取地址中存有所述第一读取地址的情况下,提取所述第一读取地址对应的第一读取数据 ;在使用所述第一读取数据响应所述主机读取指令的情况下, 确定使用所述历史预测读取指令进行预测成功,并生成所述预测成功对应的第一预测信息;将所述第一读取地址和所述第一读取数据从所述预测缓存区移除,并记录第一移除信息;根据所述第一预测信息和所述第一移除信息确定是否允许后端继续使用预测读取功能。

在一个示例性实施例中,根据所述指令类别和所述命中结果确定是否允许后端继续使用预测读取功能,包括:在所述第一指令类别为主机读取指令且所述第一命中结果指示所述历史读取地址中未存有所述第一读取地址的情况下,确定历史预测读取指令预测失败,记录第二预测信息;获取第一读取指令对应的第一读取地址,根据所述第一读取地址从闪存提取第一读取数据以响应所述主机读取指令;根据所述第二预测信息确定是否允许后端继续使用预测读取功能。

在一个示例性实施例中,根据所述第二预测信息确定是否允许后端继续使用预测读取功能,包括:确定所述第二预测信息中记录的所述历史预测读取指令预测失败的失败次数;在所述失败次数大于第一阈值的情况下,确定不允许后端继续使用预测读取功能;在所述失败次数小于等于第一阈值的情况下,允许后端继续使用预测读取功能。

在一个示例性实施例中,根据所述指令类别和所述命中结果确定是否允许后端继续使用预测读取功能,包括:在所述第一指令类别为预测读取指令且所述第一命中结果指示所述历史读取地址中存有所述第一读取地址的情况下,确定所述历史预测读取指令为未命中指令,记录所述未命中指令对应的未命中次数; 根据所述未命中次数确定是否允许后端继续使用预测读取功能。

在一个示例性实施例中,根据所述未命中次数确定是否允许后端继续使用预测读取功能,包括:在所述未命中次数大于第二阈值的情况下,确定所述历史预测读取指令为无效预测读取指令,不允许后端继续使用预测读取功能;在所述未命中次数小于或等于第二阈值的情况下,确定所述历史预测读取指令不为无效预测读取指令,允许后端继续使用预测读取功能。

在一个示例性实施例中,根据所述指令类别和所述命中结果确定是否允许后端继续使用预测读取功能,包括:在所述第一指令类别为预测读取指令且所述命中结果指示所述历史读取地址中未存有所述第一读取地址的情况下,确定所述预测读取指令为新预测读取指令;在确定所述新预测读取指令对应的第二读取地址的情况下,根据所述第二读取地址从闪存中获取所述新预测读取指令对应的第二读取数据;将所述第二读取数据和所述第二读取地址记录在所述预测缓存区;确定所述预测缓存区反馈的读取信息,其中,所述读取信息用于指示所述第二读取数据和所述第二读取地址记录是否被主机读取指令读取;根据所述读取信息确定是否允许后端继续使用预测读取功能。

在一个示例性实施例中,根据所述指令类别和所述命中结果确定是否允许后端继续使用预测读取功能之后,所述方法还包括:在根据所述指令类别和所述命中结果确定不允许所述后端继续使用预测读取功能的情况下,确定接收到的第二读取指令所携带的第二指令信息,其中,所述第二指令信息包括:第二读取指令对应的第二标志位、第二读取指令对应的第三读取地址,所述第二标志位用于指示所述第二读取指令的第二指令类别;根据所述第三读取地址确定所述预测缓存区的第二命中结果,其中,所述第二命中结果用于指示所述历史读取地址中是否存有所述第三读取地址;根据所述第二指令类别和所述第二命中结果确定是否允许后端再次启用预测读取功能。

在一个示例性实施例中,根据所述第二指令类别和所述第二命中结果确定是否允许后端再次启用预测读取功能,包括:在所述第二指令类别为主机读取指令,且所述第二命中结果指示所述历史读取地址中存有所述第三读取地址的情况下,确定所述历史预测读取指令预测成功,记录第三预测信息;根据所述第三预测信息确定是否允许后端再次启用预测读取功能。

在一个示例性实施例中,根据所述第二指令类别和所述第二命中结果确定是否允许后端再次启用预测读取功能,包括:在所述第二指令类别为主机读取指令,且所述命中结果指示所述历史读取地址中未存有所述第三读取地址的情况下,确定历史预测读取指令预测失败,记录第四预测信息;根据所述第四预测信息确定是否允许后端再次启用预测读取功能。

在一个示例性实施例中,根据所述第二指令类别和所述第二命中结果确定是否允许后端再次启用预测读取功能,包括:在所述第二指令类别为预测读取指令且所述第二命中结果指示所述历史读取地址中存有所述第三读取地址的情况下,确定所述历史预测读取指令为未命中指令,记录所述未命中指令对应的未命中次数;根据所述未命中次数确定是否允许后端再次启用预测读取功能。

在一个示例性实施例中,根据所述未命中次数确定是否允许后端再次启用预测读取功能,包括:在所述未命中次数大于第三阈值的情况下,确定所述历史预测读取指令为无效预测读取指令,不允许所述后端再次启用预测读取功能;在所述未命中次数小于等于第三阈值的情况下,确定所述历史预测读取指令不为无效预测读取指令,不允许所述后端再次启用预测读取功能。

在一个示例性实施例中,根据所述第二指令类别和所述第二命中结果确定是否允许后端再次启用预测读取功能,包括:在所述第二指令类别为预测读取指令且所述第二命中结果指示所述历史读取地址中未存有所述第三读取地址的情况下,确定所述第二预测读取指令为新预测读取指令;在确定所述新预测读取指令对应的第三读取地址的情况下,根据所述第三读取地址从闪存中获取所述新预测读取指令对应的第三读取数据;将所述第三读取数据和所述第三读取地址记录在所述预测缓存区;确定所述预测缓存区反馈的读取信息,其中,所述读取信息用于指示所述第三读取数据和所述第三读取地址记录是否被主机读取指令读取;根据所述读取信息确定是否允许后端再次启用预测读取功能。

在一个示例性实施例中,根据所述第一指令类别和所述第一命中结果确定是否允许后端继续使用预测读取功能之后,所述方法还包括:统计所述第一读取指令根据所述第一读取地址从闪存提取第一运行数据的读取次数;在所述读取次数大于闪存阈值的情况下,向目标终端发起更换提示,其中,所述更换提示用于提示是否更换闪存。

根据本申请的另一个实施例,提供了一种预读取的确定装置,包括:第一确定模块,用于在预测读取功能开启的情况下,确定接收到的第一读取指令所携带的第一指令信息,其中,所述第一指令信息包括:第一读取指令对应的第一标志位、第一读取指令对应的第一读取地址,所述第一标志位用于指示所述第一读取指令的第一指令类别;第二确定模块,用于根据所述第一读取地址确定预测缓存区的第一命中结果,其中,所述预测缓存区用于存放历史预测读取指令对应的历史读取地址,所述第一命中结果用于指示所述历史读取地址中是否存有所述第一读取地址;第三确定模块,用于根据所述第一指令类别和所述第一命中结果确定是否允许后端继续使用预测读取功能。

根据本申请的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。

通过本申请,在预测读取功能开启的情况下,确定接收到的第一读取指令所携带的第一指令信息,其中,所述第一指令信息包括:第一读取指令对应的第一标志位、第一读取指令对应的第一读取地址,所述第一标志位用于指示所述第一读取指令的第一指令类别;根据所述第一读取地址确定预测缓存区的第一命中结果,其中,所述预测缓存区用于存放历史预测读取指令对应的历史读取地址,所述第一命中结果用于指示所述历史读取地址中是否存有所述第一读取地址;根据所述第一指令类别和所述第一命中结果确定是否允许后端继续使用预测读取功能。因此,可以解决现有技术中,在执行硬盘预读操作时,若预测缓存区未及时清理,会触发预测缓存区集中清理,导致尚未读取的数据也被清除的问题,从而实现了对于预读操作的控制。

附图说明

图1是本申请实施例的一种预读取的确定方法的计算机终端的硬件结构框图;

图2是根据本申请实施例的预读取的确定方法的流程图(一);

图3是根据本发明实施例的预读取的确定方法的流程图(二);

图4是根据本申请实施例的预读取的确定装置的结构框图。

具体实施方式

下文中将参考附图并结合实施例来详细说明本申请的实施例。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

本申请实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本申请实施例的一种预读取的确定方法的计算机终端的硬件结构框图。如图1所示,计算机终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,其中,上述计算机终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述计算机终端的结构造成限定。例如,计算机终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。

存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的负载资源的分配方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。

图2是根据本申请实施例的预读取的确定方法的流程图(一),如图2所示,该流程包括如下步骤:

步骤S202,在预测读取功能开启的情况下,确定接收到的第一读取指令所携带的第一指令信息,其中,所述第一指令信息包括:第一读取指令对应的第一标志位、第一读取指令对应的第一读取地址,所述第一标志位用于指示所述第一读取指令的第一指令类别;

步骤S204,根据所述第一读取地址确定预测缓存区的第一命中结果,其中,所述预测缓存区用于存放历史预测读取指令对应的历史读取地址,所述第一命中结果用于指示所述历史读取地址中是否存有所述第一读取地址;

步骤S206,根据所述第一指令类别和所述第一命中结果确定是否允许后端继续使用预测读取功能。

通过上述步骤,在预测读取功能开启的情况下,确定接收到的第一读取指令所携带的第一指令信息,其中,所述第一指令信息包括:第一读取指令对应的第一标志位、第一读取指令对应的第一读取地址,所述第一标志位用于指示所述第一读取指令的第一指令类别;根据所述第一读取地址确定预测缓存区的第一命中结果,其中,所述预测缓存区用于存放历史预测读取指令对应的历史读取地址,所述第一命中结果用于指示所述历史读取地址中是否存有所述第一读取地址;根据所述第一指令类别和所述第一命中结果确定是否允许后端继续使用预测读取功能。因此,可以解决现有技术中,在执行硬盘预读操作时,若预测缓存区未及时清理,会触发预测缓存区集中清理,导致尚未读取的数据也被清除的问题,从而实现了对于预读操作的控制。

在一个示例性实施例中,上述预测读取功能还可以应用固态硬盘读nand数据,需要说明的是,nand数据是一种存储在nand闪存中的数据,这种闪存是一种非易失性、可电擦除和可编程的只读存储器。它具有读写速度快、抗震性强、功耗低以及体积小等特性,因此被广泛应用于嵌入式系统、航空航天、消费电子等领域。

在一个示例性实施例中,上述方法可以应用于如下场景,具体地:

低压力顺序读场景下(iod为1,bs为4k或8k),host端(主机端)下发一笔读请求时,FTL模块会判断下一次host读的位置,将判断出的下一次host读(FTL模块预测的host读称为预读,相当于预测读取)作为另外一个请求发送到后端模块且预读请求不要求返回完成消息,并给该笔请求置一个标志位,后端模块根据这个标志位判断是host读还是预读,这样每一笔host读请求,后端模块都会收到两笔读请求。当后端模块收到读请求时,默认初始状态为预读开启,host读未命中个数达到一定数量后关闭预读,预读功能关闭后,会记录预读所要读取的位置,但不做实际的读取;后续若预读命中数量达到一定数量后,预读开关会重新打开。

预读功能开启时:若收到的读请求为host读,则优先检索64个地址,若找到host读的地址,则为命中,根据buffer地址将数据取出返回,并将buffer有效位置0,表示该预读数据已无效;另外,根据该buffer地址对应的 cache标记判断readcount值是否需要加1。若未找到host读的地址,则未命中,此时该笔host读从nand中读取数据,且预读功能打开时的未命中数量加1(该值达到一定数值后,预读功能关闭);若为预读,则将数据从nand中读出暂存在buffer,不返回给FTL模块,此情况下对于64个buffer使用规则如下:记录一个标记location,初始值为0,表示64个buffer中的第1个buffer,每次有预读数据需要存入时,优先从位置location到位置63依次检索是否有buffer有效标记为0的buffer,若有,则将预读数据存入该buffer;若无,则从位置0到位置location依次检索是否有buffer有效标记为0的buffer;若有,则将预读数据存入该buffer;若无,则直接将数据存入位置location的buffer。预读数据存入后,将该buffer的有效位置1,表示该预读数据有效,即未被host命中取走。

预读功能关闭时:若为预读,此时不做读取,只是把预读请求中位置信息按照上述buffer检索方式存下来;若为host读,直接从nand读取数据,但会检索64个地址,若找到host读的地址,则预读功能关闭后的命中数量加1(该值加到一定数量后,预读功能重新打开)。

在一个示例性实施例中,根据所述指令类别和所述命中结果确定是否允许后端继续使用预测读取功能,包括: 在所述第一指令类别为主机读取指令,且所述命中结果指示所述历史读取地址中存有所述第一读取地址的情况下,提取所述第一读取地址对应的第一读取数据 ;在使用所述第一读取数据响应所述主机读取指令的情况下, 确定使用所述历史预测读取指令进行预测成功,并生成所述预测成功对应的第一预测信息;将所述第一读取地址和所述第一读取数据从所述预测缓存区移除,并记录第一移除信息;根据所述第一预测信息和所述第一移除信息确定是否允许后端继续使用预测读取功能。

也就是说,若主机读取指令对应的读取地址,与预测换缓存区保存的预测读取地址是一致的情况下,说明之前的预测读取指令命中了主机读取指令,进而说明之前的预测读取指令是有效的预测读取指令。此时,可以直接从使用第一读取数据响应所述主机读取指令,并将第一读取地址和所述第一读取数据从所述预测缓存区移除。进一步的,通过使用预测缓存区,可以预先读取主机可能访问的数据并将其存储在缓存中,当主机真正需要读取数据时,可以直接从缓存中获取,避免了等待数据读取的时间延迟。同时,通过记录命中结果和移除信息,可以及时更新预测缓存区,保证其准确性和有效性。此外,该方案还可以减少后端的负载压力,提高系统的并发处理能力。

在一个可选实施例中,若第一指令类别是预测读取指令的情况下,还可以从根据预测读取指令对应的读取地址和读取数据在预测缓存区保存的时长来确定何时将预测读取指令从预测缓存区移除。具体地:当预测缓存区接收到预测读取指令时,首先记录当前时间作为预测读取指令的初始时间。根据历史数据和统计信息,分析相同或类似指令的平均调用时间和频率。根据这些数据,可以计算出预估时间。预估时间可以是平均调用时间的加权平均值,也可以是使用特定算法进行预测得到的结果。在执行过程中,定期检查当前时间与指令开始时间的差值。如果差值超过了预估时间,并且指令还未被调用,则认为该指令已经超时。如果指令超时,将该指令从预测缓存区中剔除。同样地,可以根据实际需求和缓存管理策略来确定剔除的具体操作方式。如果指令未超时,继续执行后续操作。

在一个示例性实施例中,根据所述指令类别和所述命中结果确定是否允许后端继续使用预测读取功能,包括:在所述第一指令类别为主机读取指令且所述第一命中结果指示所述历史读取地址中未存有所述第一读取地址的情况下,确定历史预测读取指令预测失败,记录第二预测信息;获取第一读取指令对应的第一读取地址,根据所述第一读取地址从闪存提取第一读取数据以响应所述主机读取指令;根据所述第二预测信息确定是否允许后端继续使用预测读取功能。

也就是说,如果历史读取地址中未存有所述第一读取地址,说明之前发出的预测读取指令均未命中,意味着历史预测读取指令预测失败,则根据第一读取指令对应的第一读取地址,以及根据所述第一读取地址从闪存提取第一读取数据以响应所述主机读取指令。通过记录第二预测信息,可以及时更新预测缓存区,提高后续预测的准确性和有效性。在预测失败的情况下,仍然能够及时响应主机的读取请求,保证了系统的响应速度和性能。根据第二预测信息确定是否允许后端继续使用预测读取功能,可以根据实际需求进行灵活调整,提高系统的效率和资源利用率。

在一个示例性实施例中,根据所述第二预测信息确定是否允许后端继续使用预测读取功能,包括:确定所述第二预测信息中记录的所述历史预测读取指令预测失败的失败次数;在所述失败次数大于第一阈值的情况下,确定不允许后端继续使用预测读取功能;在所述失败次数小于等于第一阈值的情况下,允许后端继续使用预测读取功能。

也就是说,首先确定第二预测信息中记录的历史预测读取指令预测失败的失败次数。然后,根据失败次数与第一阈值进行比较来确定是否允许后端继续使用预测读取功能。如果失败次数大于第一阈值,说明历史预测读取指令预测失败的情况较为频繁,此时认为预测读取功能不再可靠,因此不允许后端继续使用预测读取功能。如果失败次数小于等于第一阈值,说明历史预测读取指令预测失败的情况较少,此时认为预测读取功能仍然可靠,因此允许后端继续使用预测读取功能。通过以上方案,可以根据历史预测读取指令的失败情况进行动态调整,提高系统的性能和效率。

在一个示例性实施例中,根据所述指令类别和所述命中结果确定是否允许后端继续使用预测读取功能,包括:在所述第一指令类别为预测读取指令且所述第一命中结果指示所述历史读取地址中存有所述第一读取地址的情况下,确定所述历史预测读取指令为未命中指令,记录所述未命中指令对应的未命中次数; 根据所述未命中次数确定是否允许后端继续使用预测读取功能。

也就是说,当接收到第一指令类别为预测读取指令时,首先判断第一命中结果是否指示历史读取地址中存有第一读取地址。如果命中,则说明预测读取指令是有效的,可以继续执行后续操作;如果未命中,则说明预测读取指令可能是无效的。如果确定历史预测读取指令为未命中指令,则记录该未命中指令对应的未命中次数。未命中次数用于确定预测读取指令的准确性和可靠性。

在一个示例性实施例中,根据所述未命中次数确定是否允许后端继续使用预测读取功能,包括:在所述未命中次数大于第二阈值的情况下,确定所述历史预测读取指令为无效预测读取指令,不允许后端继续使用预测读取功能;在所述未命中次数小于或等于第二阈值的情况下,确定所述历史预测读取指令不为无效预测读取指令,允许后端继续使用预测读取功能。

当接收到第一指令类别为预测读取指令时,首先判断第一命中结果是否指示历史读取地址中存有第一读取地址。如果命中,则说明预测读取指令是有效的,可以继续执行后续操作;如果未命中,则说明预测读取指令可能是无效的。如果确定历史预测读取指令为未命中指令,则记录该未命中指令对应的未命中次数。未命中次数用于统计预测读取指令的准确性和可靠性。根据未命中次数来确定是否允许后端继续使用预测读取功能。具体的判断方式可以根据实际需求进行设定,例如:如果未命中次数大于第二阈值,说明预测读取指令的准确性非常低,确定该历史预测读取指令为无效预测读取指令,不允许后端继续使用预测读取功能。如果未命中次数小于或等于第二阈值,说明预测读取指令的准确性较高,确定该历史预测读取指令不为无效预测读取指令,允许后端继续使用预测读取功能。

需要说明的是,历史预测读取指令可以是历史时间段内的某一条指令,也可以是多条指令。

在一个示例性实施例中,根据所述指令类别和所述命中结果确定是否允许后端继续使用预测读取功能,包括:在所述第一指令类别为预测读取指令且所述命中结果指示所述历史读取地址中未存有所述第一读取地址的情况下,确定所述预测读取指令为新预测读取指令;在确定所述新预测读取指令对应的第二读取地址的情况下,根据所述第二读取地址从闪存中获取所述新预测读取指令对应的第二读取数据;将所述第二读取数据和所述第二读取地址记录在所述预测缓存区;确定所述预测缓存区反馈的读取信息,其中,所述读取信息用于指示所述第二读取数据和所述第二读取地址记录是否被主机读取指令读取;根据所述读取信息确定是否允许后端继续使用预测读取功能。

也就是说,若第一指令类别为预测读取指令且所述命中结果指示所述历史读取地址中未存有所述第一读取地址的情况下,则说明预测缓存区之前未存入过该指令,即这是一条新的预测读取指令。将新的预测读取指令对应的读取地址和读取数据一起存入预测缓存区。若后续有主机读取指令与该预测指令一致,则说明该预测指令命中主机读取指令,该指令为有效的预测指令。

在一个示例性实施例中,根据所述指令类别和所述命中结果确定是否允许后端继续使用预测读取功能之后,所述方法还包括:在根据所述指令类别和所述命中结果确定不允许所述后端继续使用预测读取功能的情况下,确定接收到的第二读取指令所携带的第二指令信息,其中,所述第二指令信息包括:第二读取指令对应的第二标志位、第二读取指令对应的第三读取地址,所述第二标志位用于指示所述第二读取指令的第二指令类别;根据所述第三读取地址确定所述预测缓存区的第二命中结果,其中,所述第二命中结果用于指示所述历史读取地址中是否存有所述第三读取地址;根据所述第二指令类别和所述第二命中结果确定是否允许后端再次启用预测读取功能。

需要说明的是,在指令类别和所述命中结果确定不允许所述后端继续使用预测读取功能的情况下,并不会影响预测读取指令的下发,而是禁止从预测缓存区获取读取数据。根据指令类别和命中结果来确定是否允许后端继续使用预测读取功能,可以灵活地适应不同的指令和缓存情况。如果历史读取地址中存在第三读取地址,即第二命中结果显示为命中,那么允许后端再次启用预测读取功能可以提高数据访问的效率,因为数据已经在缓存中,不需要再次从主存中读取。通过确定接收到的第二读取指令所携带的第二指令信息,可以根据不同的指令类别来控制后端是否继续使用预测读取功能。这样可以避免不必要的预测读取操作,从而减少对系统资源的占用。综上所述,该方案具有灵活性、效率提升、资源利用优化和可扩展性好等优点,能够有效地处理预测读取指令并提高系统的性能和效率。

此外,该方案可以根据实际需求进行扩展和修改。例如,可以根据不同的指令类别对应的指令功能设置不同的预测读取策略,具体地:对于某些特定功能的指令,比如数学运算,可以设置一套预测策略,对于跳转指令,又可以设置另一套预测策略。

对于数学运算指令,可以设置一个基于历史数据的预测模型。首先,收集一段时间内的数学运算指令的历史数据,包括操作数的类型、大小和结果等信息。通过数学运算指令的历史数据,包括操作数的类型、大小和结果等信息训练预测模型。然后,使用预测模型预测数据大小和运算量,在实际应用中,当程序执行到数学运算指令时,可以先使用该模型预测接下来的操作数类型和大小,然后将预测结果加载到缓存中,以减少对闪存的读写次数。

对于跳转指令,可以设置一个基于程序流分析的预测模型。首先,提取出所有跳转指令的目标地址信息。根据目标地址信息对应的其他跳转路径进行预测,并将预测结果加载到缓存中,以减少对闪存的读写次数。

在一个示例性实施例中,根据所述第二指令类别和所述第二命中结果确定是否允许后端再次启用预测读取功能,包括:在所述第二指令类别为主机读取指令,且所述第二命中结果指示所述历史读取地址中存有所述第三读取地址的情况下,确定所述历史预测读取指令预测成功,记录第三预测信息;根据所述第三预测信息确定是否允许后端再次启用预测读取功能。

也就是说,若当第二指令类别为主机读取指令且第二命中结果指示历史读取地址中存有第三读取地址时,系统会提取第三读取地址对应的第三读取数据。然后,使用该第三读取数据来响应主机读取指令。在这种情况下,系统确定历史预测读取指令预测成功,并记录第三预测信息。这意味着系统认为之前的预测读取指令是准确的,并且成功地从缓存中获取了所需的数据。其中,第三预测信息用于指示自预测读取功能关闭后,预测读取指令预测成功的次数,当预测成功次数大于预设的开启预测读取功能的预设值时,即可再次启用预测读取功能。

在一个示例性实施例中,根据所述第二指令类别和所述第二命中结果确定是否允许后端再次启用预测读取功能,包括:在所述第二指令类别为主机读取指令,且所述命中结果指示所述历史读取地址中未存有所述第三读取地址的情况下,确定历史预测读取指令预测失败,记录第四预测信息;获取所述第二读取指令对应的第三读取地址,根据所述第三读取地址从闪存提取第三读取数据以响应所述主机读取指令;根据所述第四预测信息确定是否允许后端继续使用预测读取功能。

其中,第四预测信息用于指示自预测读取功能关闭后,预测读取指令预测失败的次数和/或成功次数。

也就是说当第二指令类别为主机读取指令且命中结果指示历史读取地址中未存有第三读取地址时,系统会确定历史预测读取指令预测失败,并记录第四预测信息。在这种情况下,系统无法从缓存中获取所需的数据,如果第四预测信息指示之前的预测读取指令失败,则系统可能会认为预测读取功能不再有效,并禁止后端再次启用该功能。相反,如果第四预测信息表明之前的预测读取指令仍然具有一定的准确性和有效性,则系统可以继续允许后端使用预测读取功能。

在一个示例性实施例中,根据所述第二指令类别和所述第二命中结果确定是否允许后端再次启用预测读取功能,包括:在所述第二指令类别为预测读取指令且所述第二命中结果指示所述历史读取地址中存有所述第三读取地址的情况下,确定所述历史预测读取指令为未命中指令,记录所述未命中指令对应的未命中次数;根据所述未命中次数确定是否允许后端再次启用预测读取功能。

也就是说,当第二指令类别为预测读取指令且第二命中结果指示历史读取地址中存有第三读取地址时,系统会确定历史预测读取指令为未命中指令,并记录该未命中指令对应的未命中次数。未命中指令是指在缓存中没有找到所需数据的情况。在这种情况下,系统会记录未命中的次数,以便后续分析和决策。接下来,系统会根据未命中次数来确定是否允许后端再次启用预测读取功能。如果未命中次数较少,说明预测读取功能仍然具有一定的准确性和有效性,因此可以继续使用该功能。相反,如果未命中次数较多,说明预测读取功能可能存在问题或不准确,此时可能需要禁止后端再次启用该功能。通过这种方式,系统可以根据历史预测读取指令的未命中率来动态调整是否允许后端再次启用预测读取功能。这有助于提高系统的灵活性和性能。

在一个示例性实施例中,根据所述未命中次数确定是否允许后端再次启用预测读取功能,包括:在所述未命中次数大于第三阈值的情况下,确定所述历史预测读取指令为无效预测读取指令,不允许所述后端再次启用预测读取功能;在所述未命中次数小于等于第三阈值的情况下,确定所述历史预测读取指令不为无效预测读取指令,不允许所述后端再次启用预测读取功能。

也就是说,当未命中次数大于第三阈值时,确定历史预测读取指令为无效预测读取指令,不允许后端再次启用预测读取功能。这意味着如果一个预测读取指令连续多次未命中系统会认为该指令不再具有预测价值,因此禁止后端再次使用该指令进行预读取操作。

在一个示例性实施例中,根据所述第二指令类别和所述第二命中结果确定是否允许后端再次启用预测读取功能,包括:在所述第二指令类别为预测读取指令且所述第二命中结果指示所述历史读取地址中未存有所述第三读取地址的情况下,确定所述第二预测读取指令为新预测读取指令;在确定所述新预测读取指令对应的第三读取地址的情况下,根据所述第三读取地址从闪存中获取所述新预测读取指令对应的第三读取数据;将所述第三读取数据和所述第三读取地址记录在所述预测缓存区;确定所述预测缓存区反馈的读取信息,其中,所述读取信息用于指示所述第三读取数据和所述第三读取地址记录是否被主机读取指令读取;根据所述读取信息确定是否允许后端再次启用预测读取功能。

也就是说,在预读功能关闭的情况下,若预测读取指令未命中预测缓存区中的读取地址,说明这是一个新的预测指令。由于预测读取功能已经关闭,故只记录预读指令对应的地址。

在一个示例性实施例中,根据所述第一指令类别和所述第一命中结果确定是否允许后端继续使用预测读取功能之后,所述方法还包括:统计所述第一读取指令根据所述第一读取地址从闪存提取第一运行数据的读取次数;在所述读取次数大于闪存阈值的情况下,向目标终端发起更换提示,其中,所述更换提示用于提示是否更换闪存。

也就是说,监控和统计第一读取指令从闪存中提取第一运行数据的读取次数。当读取次数超过设定的闪存阈值时,向目标终端发起更换提示,以提示用户是否更换闪存。

为了更好的理解上述预读取的确定方法的过程,以下再结合可选实施例对上述预读取的确定方法的实现流程进行说明,但不用于限定本申请实施例的技术方案。

图3是根据本申请实施例的预读取的确定方法的流程图(二),如图3所示,该流程包括如下步骤:

具体实施步骤如下:

1)当后端模块收到读请求消息时,根据preflag判断预读功能打开还是关闭。若preflag为1,执行2);若preflag为0,执行3)。

2)预读功能开启,判断读请求类型,若为host读,执行4);若为预读,执行5)。

3)预读功能关闭,判断读请求类型,若为host读,执行6);若为预读,执行7)。

4)依次检索数组中的64个addr,若检索到host读的地址(命中),且该数组元素中的valid值为1,则表示host命中,将valid值置0(表示该数据已被取走),将buff_addr对应的buffer中的数据取出直接返回给FTL模块,并根据该元素中的cache值判断readcount值是否需要+1。若未检索到host读的地址(未命中),直接从nand读取数据(相当于没有预读)。

5)依次检索数组中的64个addr ,若预读命中预读且相应的valid值为1(即预读数据有效),replace_cnt加1,值达到一定值后预读关闭。若未命中预读,根据预读请求消息,将数据从nand取出后暂存在上述64个buffer中的一个buffer中,对于64个buffer的使用规则如下:记录一个标记location,初始值为0,表示64个buffer中的第1个buffer,每次有预读数据需要存入时,优先从位置location到位置63依次检索数组元素,看是否有valid值为0的元素,若有,则将预读数据存入该元素的buff_addr对应的buffer中;若无,则从位置0到位置location依次检索数组元素,看是否有valid值为0的元素;若有,则将预读数据存入该元素的buff_addr对应的buffer中;若无,则直接将数据存入位置location的数组元素所对应的buffer。预读数据存入后,将该元素的valid值置1,表示该预读数据有效,即未被host命中取走。数据存入buffer后,该笔读请求即视为完成。

6)检索数组中的64个addr,若检索到host读的地址,则hit值加1,若该值增加到一定数值,预读功能重新打开。此时的host读直接从nand读取数据。若未检索到host读的地址,host读直接从nand读取数据。

7)检索数组中的64个addr,若检索到预读的地址,则不做操作,该笔读完成;若未检索到预读的地址,则将该预读的地址赋给位置location的元素的buff_addr,用于做预读关闭后的命中的判断。预读请求视为完成。

需要说明的是,每个channel上维护以下变量:

大小为64的结构体数组preread[64],该数组中每个元素(结构体)包含变量:

addr:读请求中要读的地址。

valid:buffer有效标志位,1表示buffer有效。

cache:命中cache标记,1表示命中cache。

buff_addr:buffer地址。

preflag:预读标记,1表示预读功能打开。

location:位置标记,表示数据要存入第location个buffer。

hit:表示预读关闭后的命中数量。

not_hit:表示预读开启后的未命中数量。

replace_cnt:表示预读命中预读的数量,数量达到一定值,预读关闭。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。

在本实施例中还提供了一种预读取的确定装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图4是根据本申请实施例的预读取的确定装置的结构框图,如图4所示,该装置包括:

第一确定模块42,用于在预测读取功能开启的情况下,确定接收到的第一读取指令所携带的第一指令信息,其中,所述第一指令信息包括:第一读取指令对应的第一标志位、第一读取指令对应的第一读取地址,所述第一标志位用于指示所述第一读取指令的第一指令类别;

第二确定模块44,用于根据所述第一读取地址确定预测缓存区的第一命中结果,其中,所述预测缓存区用于存放历史预测读取指令对应的历史读取地址,所述第一命中结果用于指示所述历史读取地址中是否存有所述第一读取地址;

第三确定模块46,用于根据所述第一指令类别和所述第一命中结果确定是否允许后端继续使用预测读取功能。

通过上述装置,在预测读取功能开启的情况下,确定接收到的第一读取指令所携带的第一指令信息,其中,所述第一指令信息包括:第一读取指令对应的第一标志位、第一读取指令对应的第一读取地址,所述第一标志位用于指示所述第一读取指令的第一指令类别;根据所述第一读取地址确定预测缓存区的第一命中结果,其中,所述预测缓存区用于存放历史预测读取指令对应的历史读取地址,所述第一命中结果用于指示所述历史读取地址中是否存有所述第一读取地址;根据所述第一指令类别和所述第一命中结果确定是否允许后端继续使用预测读取功能。因此,可以解决现有技术中,在执行硬盘预读操作时,若缓存区未及时清理,会触发缓存区集中清理,导致尚未读取的数据也被清除的问题,从而实现了对于预读操作的控制。

在一个示例性实施例中,第三确定模块46,还用于在所述第一指令类别为主机读取指令,且所述命中结果指示所述历史读取地址中存有所述第一读取地址的情况下,提取所述第一读取地址对应的第一读取数据 ;在使用所述第一读取数据响应所述主机读取指令的情况下, 确定使用所述历史预测读取指令进行预测成功,并生成所述预测成功对应的第一预测信息;将所述第一读取地址和所述第一读取数据从所述预测缓存区移除,并记录第一移除信息;根据所述第一预测信息和所述第一移除信息确定是否允许后端继续使用预测读取功能。

在一个示例性实施例中,第三确定模块46,还用于在所述第一指令类别为主机读取指令且所述第一命中结果指示所述历史读取地址中未存有所述第一读取地址的情况下,确定历史预测读取指令预测失败,记录第二预测信息;获取第一读取指令对应的第一读取地址,根据所述第一读取地址从闪存提取第一读取数据以响应所述主机读取指令;根据所述第二预测信息确定是否允许后端继续使用预测读取功能。

在一个示例性实施例中,第三确定模块46,还用于确定所述第二预测信息中记录的所述历史预测读取指令预测失败的失败次数;在所述失败次数大于第一阈值的情况下,确定不允许后端继续使用预测读取功能;在所述失败次数小于等于第一阈值的情况下,允许后端继续使用预测读取功能。

在一个示例性实施例中,第三确定模块46,还用于在所述第一指令类别为预测读取指令且所述第一命中结果指示所述历史读取地址中存有所述第一读取地址的情况下,确定所述历史预测读取指令为未命中指令,记录所述未命中指令对应的未命中次数; 根据所述未命中次数确定是否允许后端继续使用预测读取功能。

在一个示例性实施例中,第三确定模块46,还用于在所述未命中次数大于第二阈值的情况下,确定所述历史预测读取指令为无效预测读取指令,不允许后端继续使用预测读取功能;在所述未命中次数小于或等于第二阈值的情况下,确定所述历史预测读取指令不为无效预测读取指令,允许后端继续使用预测读取功能。

在一个示例性实施例中,第三确定模块46,还用于在所述第一指令类别为预测读取指令且所述命中结果指示所述历史读取地址中未存有所述第一读取地址的情况下,确定所述预测读取指令为新预测读取指令;在确定所述新预测读取指令对应的第二读取地址的情况下,根据所述第二读取地址从闪存中获取所述新预测读取指令对应的第二读取数据;将所述第二读取数据和所述第二读取地址记录在所述预测缓存区;确定所述预测缓存区反馈的读取信息,其中,所述读取信息用于指示所述第二读取数据和所述第二读取地址记录是否被主机读取指令读取;根据所述读取信息确定是否允许后端继续使用预测读取功能。

在一个示例性实施例中,所述装置还包括再次启用模块,用于在根据所述指令类别和所述命中结果确定不允许所述后端继续使用预测读取功能的情况下,确定接收到的第二读取指令所携带的第二指令信息,其中,所述第二指令信息包括:第二读取指令对应的第二标志位、第二读取指令对应的第三读取地址,所述第二标志位用于指示所述第二读取指令的第二指令类别;根据所述第三读取地址确定所述预测缓存区的第二命中结果,其中,所述第二命中结果用于指示所述历史读取地址中是否存有所述第三读取地址;根据所述第二指令类别和所述第二命中结果确定是否允许后端再次启用预测读取功能。

在一个示例性实施例中,再次启用模块,还用于在所述第二指令类别为主机读取指令,且所述第二命中结果指示所述历史读取地址中存有所述第三读取地址的情况下,确定所述历史预测读取指令预测成功,记录第三预测信息;根据所述第三预测信息确定是否允许后端再次启用预测读取功能。

在一个示例性实施例中,再次启用模块,还用于在所述第二指令类别为主机读取指令,且所述命中结果指示所述历史读取地址中未存有所述第三读取地址的情况下,确定历史预测读取指令预测失败,记录第四预测信息;根据所述第四预测信息确定是否允许后端再次启用预测读取功能。

在一个示例性实施例中,再次启用模块,还用于在所述第二指令类别为预测读取指令且所述第二命中结果指示所述历史读取地址中存有所述第三读取地址的情况下,确定所述历史预测读取指令为未命中指令,记录所述未命中指令对应的未命中次数;根据所述未命中次数确定是否允许后端再次启用预测读取功能。

在一个示例性实施例中,再次启用模块,还用于在所述未命中次数大于第三阈值的情况下,确定所述历史预测读取指令为无效预测读取指令,不允许所述后端再次启用预测读取功能;在所述未命中次数小于等于第三阈值的情况下,确定所述历史预测读取指令不为无效预测读取指令,不允许所述后端再次启用预测读取功能。

在一个示例性实施例中,再次启用模块,还用于在所述第二指令类别为预测读取指令且所述第二命中结果指示所述历史读取地址中未存有所述第三读取地址的情况下,确定所述第二预测读取指令为新预测读取指令;在确定所述新预测读取指令对应的第三读取地址的情况下,根据所述第三读取地址从闪存中获取所述新预测读取指令对应的第三读取数据;将所述第三读取数据和所述第三读取地址记录在所述预测缓存区;确定所述预测缓存区反馈的读取信息,其中,所述读取信息用于指示所述第三读取数据和所述第三读取地址记录是否被主机读取指令读取;根据所述读取信息确定是否允许后端再次启用预测读取功能。

在一个示例性实施例中,所述装置还包括统计模块,用于统计所述第一读取指令根据所述第一读取地址从闪存提取第一运行数据的读取次数;在所述读取次数大于闪存阈值的情况下,向目标终端发起更换提示,其中,所述更换提示用于提示是否更换闪存。

本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。

本申请的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。

在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。

本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。

显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。

以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

相关技术
  • 基于3D打印技术制备钨颗粒增强金属基复合材料的方法
  • 一种以过渡金属氧化物和铂金属纳米颗粒为前驱体制备铂基二元合金纳米颗粒的方法
  • 一种钨基高分子复合材料的制备方法
  • 一种钨纤维、氧化物纳米颗粒协同增韧钨基复合材料及其制备方法
  • 一种钨纤维、氧化物纳米颗粒协同增韧钨基复合材料及其制备方法
技术分类

06120116519062