预取长度调整方法、装置和存储系统 【技术领域】
本发明涉及存储技术领域,具体涉及一种预取长度调整方法和预取长度调整装置以及存储系统。
背景技术
高速数据缓存(cache)被广泛应用于各种存储系统中,以提升存储系统的性能。预取(Prefetch)的作用是将可能被访问的数据提前从较慢的存储介质中读取到高速数据缓存中,使主机的读请求直接在高速数据缓存中完成,从而提升读请求执行的速度。主机发送的读请求所请求的数据直接在高速数据缓存中获取,称为读请求在高速数据缓存中命中。
主机的读请求在高速数据缓存中的命中率决定了存储系统的性能,命中率越高,性能越好,反之性能越差。由于存储系统的缓存大小有限,预取长度太大可能导致高速数据缓存中的数据溢出和读请求的响应时间过长,从而影响存储系统的性能,反之预取长度过小则会使主机访问存储介质的次数增加,同样影响存储系统的性能。
现有技术中提出了一种根据主机读请求数据的长度来调整预取长度的方法,该方法主要包括:获取主机读请求数据的长度,将读请求数据的长度乘以预置的预取倍数得到预取长度。该方法根据主机读请求数据的长度动态地调整高速数据缓存的预取长度。
发明人在研究现有技术的过程中发现,现有的预取长度调整方法只能针对部分读请求数据的长度提供合适的预取长度,而在实际使用过程中,主机的读请求数据的长度可以随时间变化,并且变化范围可以较大,此时现有技术中使用固定的预取倍数将无法提供合适的预取长度,即无法使存储系统的性能达到最佳。
【发明内容】
本发明提供一种可以在多种应用环境中对存储系统提供合适的预取长度的方法、装置以及存储系统。
本发明实施例提供的预取长度调整方法,包括:获得第一轮读请求在高速数据缓存中的命中率R1;根据命中率R1调整高速数据缓存的预取长度;获得第二轮读请求在高速数据缓存中的命中率R2;在R2大于R1时,按照根据命中率R1调整高速数据缓存的预取长度的调整方向,同向地调整预取长度;在R2小于R1时,按照根据命中率R1调整高速数据缓存的预取长度的调整方向,反向地调整预取长度。
本发明实施例还提供一种预取长度调整装置,包括:第一获得单元,用于获得第一轮读请求在高速数据缓存中的命中率R1;第一调整单元,用于根据命中率R1调整高速数据缓存的预取长度;第二获得单元,用于获得第二轮读请求在高速数据缓存中的命中率R2;第二调整单元,用于在R2大于R1时,按照根据命中率R1调整高速数据缓存的预取长度的调整方向,同向地调整预取长度;第三调整单元,用于在R2小于R1时,按照根据命中率R1调整高速数据缓存的预取长度的调整方向,反向地调整预取长度。
本发明实施例还提供一种存储系统,该存储系统包括:主存储器和高速数据缓存,高速数据缓存包括:随机存储器,预取长度调整装置和预取执行单元,
其中,预取执行单元用于根据预取长度调整装置调整的预取长度将数据从主存储器中预取到随机存储器中;
预取长度调整装置包括:第一获得单元,用于获得第一轮读请求在随机存储器中的命中率R1;第一调整单元,用于根据命中率R1调整随机存储器的预取长度;第二获得单元,用于获得第二轮读请求在随机存储器中的命中率R2;第二调整单元,用于在R2大于R1时,按照根据命中率R1调整随机存储器的预取长度的调整方向,同向地调整预取长度;第三调整单元,用于在R2小于R1时,按照根据命中率R1调整随机存储器的预取长度的调整方向,反向地调整预取长度。
在本发明实施例中,在获得第二轮读请求在高速数据缓存中的命中率之后,与上一轮读请求在高速数据缓存中的命中率相比较,在本次获得的命中率高于上次获得地命中率的情况下,按照与上一次调整预取长度相同的方向调整预取长度。反之,则按照与上一次调整预取长度相反的方向来调整预取长度,本发明实施例可以重复执行上述过程,从而使得读请求在高速数据缓存中的命中率始终处于最大值或者在最大值附近波动。与现有技术相比,本发明实施例可以根据当前的应用环境提供合适的预取长度,使得存储系统的读性能始终处于最佳状态,提高存储系统的执行效率。
【附图说明】
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的预取长度调整方法第一实施例的流程图;
图2是本发明实施例提供的预取长度调整方法第二实施例的流程图;
图3是本发明实施例提供的预取长度调整装置实施例的示意图;
图4是本发明预取长度调整装置实施例中的第二获得单元的示意图;
图5是本发明实施例提供的存储系统实施例的示意图。
【具体实施方式】
本发明提供了一种预取长度调整方法、预取长度调整装置和存储系统。为了更好的理解本发明的技术方案,下面结合附图对本发明提供的实施例进行详细地描述。
参见图1,图1是本发明实施例提供的预取长度调整方法第一实施例的流程图。
步骤A1、获得第一轮读请求在高速数据缓存中的命中率R1。
在本发明实施例中,预取长度调整装置可以获得第一轮读请求在高速数据缓存中的命中率R1。其中,第一轮读请求可以为预置时间内接收到的读请求。
步骤A2、根据命中率R1调整高速数据缓存的预取长度。
在本发明实施例中,预取长度调整装置可以根据第一次获得的命中率R1来调整高速数据缓存的预取长度。例如,在R1小于100%时,预取长度调整装置可以增大预取长度,即预取更多的数据,以便于获得更高的命中率,当然,预取长度调整装置还可以减小预取长度。
步骤A3、获得第二轮读请求在高速数据缓存中的命中率R2。
在本发明实施例中,在调整高速数据缓存的预取长度之后,预取长度调整装置可以获得第二轮读请求在高速数据缓存中的命中率R2。其中,第二轮读请求也可以为预置时间内接收到的读请求。
在本发明实施例中,为保证第二轮读请求在高速数据缓存中的命中率R2.相对于R1发生改变是上次调整预取长度所产生的效果,预取长度调整装置可以在第一次调整预取长度之后,间隔预置时间T1后,获得第二轮读请求在高速数据缓存中的命中率R2。其中,预置时间T1可以根据存储介质的存储速度来设定。
预取长度调整装置还可以在第一轮读请求在高速数据缓存中执行完毕,即第一轮读请求从高速数据缓存返回后,获得第二轮读请求在高速数据缓存中的命中率R2,可以避免调整预取长度之前的第一轮读请求对第二次获得的命中率R2产生影响。
步骤A4、在R2大于R1时,按照根据命中率R1调整高速数据缓存的预取长度的调整方向,同向地调整预取长度。
在本发明实施例中,如果R2大于R1,则说明上一次调整预取长度取得了好的效果,读请求在高速数据缓存中的命中率得到了提升,因此,本次调整预取长度时,按照根据命中率R1调整高速数据缓存的预取长度的调整方向,同向地调整预取长度,以便于读请求在高速数据缓存中达到更高的命中率,从而提高存储系统的性能。
本发明实施例在执行步骤A4之后,还可以开始执行步骤A3,即再次获得下一轮读请求在高速数据缓存的中的命中率,然后进行下一次的调整预取长度的过程,本发明实施例可以循环执行该流程。
步骤A5、在R2小于R1时,按照根据命中率R1调整高速数据缓存的预取长度的调整方向,反向地调整预取长度。
在本发明实施例中,如果R2小于R1,则说明上次调整预取长度没有取得好的效果,读请求在高速数据缓存中的命中率下降了,因此,本次调整预取长度时,按照根据命中率R1调整高速数据缓存的预取长度的调整方向,反向地调整预取长度,以便于提高读请求在高速数据缓存中的命中率,从而提高存储系统的性能。
本发明实施例在执行步骤A5之后,还可以开始执行步骤A3,即再次获得下一轮读请求在高速数据缓存的中的命中率,然后进行下一次的调整预取长度的过程,本发明实施例可以循环执行该流程。
在本发明实施例中,在获得第二轮读请求在高速数据缓存中的命中率之后,与上一轮读请求在高速数据缓存中的命中率相比较,在本次获得的命中率高于上次获得的命中率的情况下,按照与上一次调整预取长度相同的方向调整预取长度。反之,则按照与上一次调整预取长度相反的方向来调整预取长度,本发明实施例重复可以执行上述过程,从而使得读请求在高速数据缓存中的命中率始终处于最大值或者在最大值附近波动。与现有技术相比,本发明实施例可以根据当前的应用环境提供合适的预取长度,使得存储系统的读性能始终处于最佳状态,提高存储系统的执行效率。
在本发明实施例中,预取长度调整装置可以通过如下方式来获得读请求在高速数据缓存中的命中率(上述步骤A1、A3):
预取长度调整装置可以在预置时间T2内,统计读请求在高速数据缓存中的命中次数N1,然后根据N1来计算得到命中率R1或R2,此时第一轮读请求或第二轮读请求可以为预置时间T2内接收到的读请求。另外,预取长度调整装置还可以统计预置次数的读请求在高速数据缓存中的命中次数N2,然后根据该命中次数N2来计算得到命中率R1或R2,例如预置次数可以为5000,此时第一轮读请求或第二轮读请求可以为预置次数的读请求。在本发明实施例中,可以在获得命中率后清空统计结果。需要指出的是,本发明实施例获得读请求在高速数据缓存中的命中率的方法不限于此,还可以有其它的获得方式。
在本发明实施例中,在第一次获得读请求在高速数据缓存中的命中率R1之后,在R1小于100%时,预取长度调整装置可以增大预取长度,以便于获得更高的命中率,本发明实施例也可以减小预取长度。如果R1等于100%,则表明当前的命中率已达到最大值,则不需要调整预取长度。
在本发明实施例中,在第一次获得命中率R1和第二次获得的命中率R2.相等时,可以按照根据命中率R1调整高速数据缓存的预取长度的调整方向,同向地调整预取长度,从而使得下一次获得的读请求命中率发生改变,进而对预取长度进一步调整,最终获得合适的预取长度,使得存储系统的读性能始终处于最佳状态。
在本发明实施例中,在本次获得的命中率R2大于上一次获得的命中率R1时,本次调整预取长度时按照根据命中率R1调整高速数据缓存的预取长度的调整方向,同向地调整预取长度。即如果根据命中率R1调整高速数据缓存的预取长度时增大预取长度,则本次调整时继续增大预取长度;如果根据命中率R1调整高速数据缓存的预取长度时减小预取长度,则本次调整时继续减小预取长度,以便于进一步提高读请求在高速数据缓存中的命中率。
在本发明实施例中,在本次获得的命中率R2小于上一次获得的命中率R1时,则需要改变调整方向,本次调整预取长度时按照与上一次调整预取长度相反的方向进行调整。即如果根据命中率R1调整高速数据缓存的预取长度时增大预取长度,则本次调整时应该减小预取长度;如果根据命中率R1调整高速数据缓存的预取长度时减小预取长度,则本次调整时应该增大预取长度,以便于提高读请求在高速数据缓存中的命中率。
参见图2,图2是本发明实施例提供的预取长度调整方法第二实施例的流程图。调整预取长度的方法可以包括以下步骤:
步骤B1、获得预置时间T2内的读请求在高速数据缓存中的命中率R1。
在本发明实施例中,预取长度调整装置可以获得预置时间T2内的主机发出的读请求在高速数据缓存中的命中率R1,即获得第一轮读请求在高速数据缓存中的命中率R1。其中,预置时间例如可以为3秒。
步骤B2、判断命中率R1是否等于100%。
在本发明实施例中,预取长度调整装置判断命中率R1是否等于100%,若是,则执行步骤B4,若否,则执行步骤B3。
步骤B3、增大预取长度,保存本次调整的方向。
在本发明实施例中,R1小于100%则说明存储系统的性能还没有达到最佳状态,因此可以将预取长度增大一个调节粒度,同时保存本次的调整方向,即增大预取长度。其中,调节粒度可以为一固定值,可以根据存储系统接收到的读请求数据的平均大小来设定。
在本发明实施例中,在每间隔预置时间T1之后,开始执行步骤B4。
步骤B4,获得预置时间T2内的读请求在高速数据缓存中的命中率R2。
在本发明实施例中,预取长度调整装置可以再次获得预置时间T2内的主机发出的读请求在高速数据缓存中的命中率,即获得第二轮读请求在高速数据缓存中的命中率R2,然后执行步骤B5。
步骤B5、判断命中率R2是否大于命中率R1。
在本发明实施例中,预取长度调整装置判断命中率R2是否大于命中率R1,若是,则执行步骤B3,否则,执行步骤B6。
在本发明实施例中,命中率R2大于命中率R1则说明上次调整预取长度取得了好的效果,提高了读请求在高速数据缓存中的命中率,则本次按照与上次调整预取长度相同的方向继续调整预取长度,同时保存本次的调整方向,即增大预取长度。在本发明实施例中,上次调整预取长度时增大了预取长度,则本次调整预取长度时继续将预取长度增大一个调节粒度。
步骤B6、判断命中率R2是否等于100%。
在本发明实施例中,在命中率R2小于或等于命中率R1时,判断命中率R2是否等于100%,若是,则表明当前不需要调整预取长度,执行步骤B4,即获得下一轮读请求在高速数据缓存中的命中率,否则执行步骤B7。
步骤B7、减小预取长度,保存本次调整的方向。
在本发明实施例中,命中率R2小于100%,并且命中率R2小于命中率R1,则说明上次调整预取长度没有取得好的效果,反而降低了读请求在高速数据缓存中的命中率,则本次按照与上次调整预取长度相反的方向调整预取长度,同时保存本次的调整方向,即减小预取长度。在本发明实施例中,上次调整预取长度时增大了预取长度,则本次调整预取长度时将预取长度减小一个调节粒度。
在本发明实施例中,在每间隔预置时间T1之后,开始执行步骤B4,本发明实施例可以循环执行上述流程。
在本发明实施例中,在每次获得读请求在高速数据缓存中的命中率后,与前一次获得的命中率相比较,在本次的命中率增加时,按照前一次的调整方向同向调整预取长度。在本次的命中率下降时,按照前一次的调整方向反向调整预取长度。本发明实施例的调整预取长度的过程可以使命中率维持在最大值或者在最大值附近波动,在经过一段时间的调整之后,可以获得一个最佳的预取长度值,从而使得存储系统的性能达到最佳,提高存储系统的执行效率。
本发明实施例提供的预取长度调整方法可以使用在存储系统中,预取长度的调整过程不需要人工参与,并且经过一段时间的调整后,存储系统自动适应为最佳的预取方式,性能得到最佳。在存储系统的用户业务发生变化后,经过短时间的调整,预取数据的长度可以适应变化后的业务,使读性能达到最佳值。另外,本发明实施例还可以在存储系统接收到多种类型的顺序读请求的情况下,可以获得一个针对每种读请求的折中的预取数据长度,从而使存储系统的性能达到最佳值。
参见图3,图3是本发明实施例提供的预取长度调整装置的示意图。
在本发明实施例中,预取长度调整装置主要由第一获得单元110、第一调整单元120、第二获得单元130、第二调整单元140和第三调整单元150组成。其中,
第一获得单元110,用于获得第一轮读请求在高速数据缓存中的命中率R1;
第一调整单元120,用于根据命中率R1调整高速数据缓存的预取长度;
第二获得单元130,用于获得读请求在高速数据缓存中的命中率R2;
第二调整单元140,用于在R2大于R1时,按照根据命中率R1调整高速数据缓存的预取长度的调整方向,同向地调整预取长度;
第三调整单元150,用于在R2小于R1时,按照根据命中率R1调整高速数据缓存的预取长度的调整方向,反向地调整预取长度。
在本发明实施例中,第二调整单元140还用于在R2等于R1时,按照根据命中率R1调整高速数据缓存的预取长度的调整方向,同向地调整预取长度。
本发明预取长度调整装置可以使用在前述相对应的预取长度调整方法第一实施例中。
参见图4,图4是本发明预取长度调整装置实施例中的第二获得单元的示意图。
在本发明实施例中,第二获得单元130可以包括:
触发模块131,用于在第一调整单元120调整高速数据缓存之后,触发统计模块统计第二轮读请求在高速数据缓存中的命中次数;
统计模块132,用于在预置时间T2内,统计第二轮读请求在高速数据缓存中的命中次数N1;以及
计算模块133,用于根据上述统计模块132获得的命中次数N1来计算第二轮读请求在高速数据缓存中的命中率R2。
在本发明实施例中,触发模块131可以在第一调整单元120根据命中率R1调整高速数据缓存的预取长度之后间隔预置时间T1后,触发统计模块132统计第二轮读请求在高速数据缓存中的命中次数;触发模块131还可以在第一轮读请求在高速数据缓存中执行完毕后,触发统计模块132统计第二轮读请求在高速数据缓存中的命中次数。
参见图5,图5是本发明实施例提供的存储系统实施例的示意图。
在发明存储系统实施例主要由高速数据缓存100和主存储器200组成,其中,主存储器可以为磁盘阵列、单个磁盘、磁带、固态硬盘(SSD,Solid StateDisk)或者固态硬盘阵列等。高速数据缓存100主要由随机存储器(RAM,Random Access Memory)20,预取长度调整装置10和预取执行单元30组成。
预取执行单元30用于根据预取长度调整装置10调整的预取长度将数据从主存储器200中预取到随机存储器20中;
预取长度调整装置10可以包括:第一获得单元,用于获得第一轮读请求在随机存储器中的命中率R1;第一调整单元,用于根据命中率R1调整随机存储器的预取长度;第二获得单元,用于获得第二轮读请求在随机存储器中的命中率R2;第二调整单元,用于在R2大于R1时,按照根据命中率R1调整随机存储器的预取长度的调整方向,同向地调整预取长度;以及第三调整单元,用于在R2小于R1时,按照根据命中率R1调整随机存储器的预取长度的调整方向,反向地调整预取长度。
本发明实施例提供的存储系统可以使用多种场合下,预取长度的调整过程不需要人工参与,并且经过一段时间的调整后,存储系统自动适应为最佳的预取方式,性能得到最佳。在存储系统的用户业务发生变化后,经过短时间的调整,预取数据的长度可以适应变化后的业务,使读性能达到最佳值。另外,本发明存储系统实施例还可以在存储系统接收到多种类型的顺序读请求的情况下,可以获得一个针对每种读请求的折中的预取数据长度,从而使存储系统的性能达到最佳值。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机存储器、磁盘或光盘等。
以上对本发明所预取长度调整方法、预取长度调整装置和存储系统进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,本说明书内容不应理解为对本发明的限制。