一种自适应缓存预取方法

文档序号:6340356阅读:887来源:国知局
专利名称:一种自适应缓存预取方法
技术领域
本发明涉及存储系统的性能优化领域,具体涉及一种自适应缓存预取方法。
背景技术
存储器是计算机的核心部件之一,其性能直接关系到整个计算机系统性能的高 低。如何以合理的价格,设计出容量和速度满足计算机系统要求的存储器系统,始终是 计算机体系结构设计中的关键问题之一。计算机用户希望容量越大越好,而且速度还要 快,价格要便宜。仅用单一的一种存储器是很难达到这一目标的。较好的方法是采用存 储层次,用多种存储器构成存储器的层次结构。然而,人们对于存储器的容量大、速度 快、价格低的三个要求是相互矛盾的(1)速度越快,每位价格就越高;(2)容量越大, 每位价格就越低;(3)容量越大,速度就越慢。如果只采用其中的一种技术,存储器设 计者就会陷入困境从实现“容量大、价格低”的要求来看,应采用能提供大容量的存 储器技术;但从满足性能需求的角度来看,又应采用昂贵且容量较小的快速存储器。走 出这种困境的唯一方法,是采用多种存储器技术,构成多级存储层次。图1所示的是典 型的两级存储模型,包括容量小但速度快的高速IO设备和容量大但速度慢的慢速IO设 备,用户的所有数据都存放在慢速IO设备上,高速IO设备作为一个Cache使用,用户读 取IO数据时总是先查找是否在高速IO设备中已有一份拷贝。如果用户每次访问的数据都能在高速IO设备中找到,那系统的IO性能将会得到 显著提高。但是由于高速设备容量远小于慢速设备,所以只能有一部分数据存放在高速 IO设备上,而用户对数据的请求范围是非常大的,所以选择哪些数据缓存在高速IO设备 上将极大影响系统的整体性能。根据用户的历史访问记录预测下一次可能访问的数据, 并将这些数据预取到高速IO设备上,那么当用户真正需要访问这些数据时,性能就会非 常高。单个线程的应用程序对IO请求的顺序性比较好,但是如果系统中存在多个顺序访 问的应用程序,那么它们下发到IO设备上的请求就变得林乱不堪,如果根据单一访问流 进行预取效果将会比较差。

发明内容
为解决预取问题,本发明首先对流进行过滤,然后再顺序预取。一种自适应缓存预取方法,步骤如下A、检查每个流,并使用多个队列记录每次访问的地址;B、如果当前访问的地址与之前某个队列中的地址连续,则认定为一个流,触发 预取操作;C、检测预取对命中率的影响,若命中率低于阈值,则更改预取策略减少预取数 量或关闭预取。本发明的一种优选技术方案在于所述预取策略包括不预取,始终预取和检测 到顺序读才预取,否则不预取。
3
本发明的另一种优选技术方案在于根据用户读取的数据选择预取的region, region为将io设备划分为大小相等的块。本发明的一种较优选技术方案在于预取region的策略为数据在Region的比较靠前的位置,那么直接将数据所在的Region —次从慢速IO 设备读到高速IO设备即可,同时返回给用户之前所请求的数据;数据在Region的最后一部分空间,那么应该读两部分的数据请求的数据和紧 邻的下一个Region的所有数据;数据横跨两个Region,那么应该一次发出从当前Region的后一部分到下一个 Region的所有数据的请求。本发明在预取前对访问流做了过滤,还原了原来的多个顺序流,然后分别针对 每个顺序流做预取,由于顺序预取效率非常高,整个系统的性能将得到提升。


图1典型的两级存储模型图2预取过程图3流检测实现
具体实施例方式在实现过程中,可以提供多种类型的预取策略供用户使用。一种是任何情况下 都不触发预取操作,另一种只要有读操作均从慢速IO设备上预取一定数量的数据到高速 IO设备。这两种情况的性能都比较差,完全不预取浪费了带宽、增加了延迟,全部预 取则可能干扰正常的读写操作,甚至每次的读操作都可能因为等待预取而增加很大的开 销,而且更严重的是预取回来的数据可能根本不会被接下来的IO请求所使用。再一种则 是两者的折中,在判断出预取可能带来好处时才发出预取的动作。最后一种是基于流的预测,它的基础是需要发现顺序流,而根据之前的分析可 知,系统中可能存在多个顺序流,但是混到一起发到下层的IO系统后就不再是顺序的 了,所以在预取之前必须将单一的混合流还原成原来的多个顺序流。实现方式可以采取 简单的连续地址记录,两个地址就可以组成一个流,这样如果第三个地址也属于这个流 时即可以发出预取操作。比如一个如下所示的地址流依次进入流检测系统A、B、C、 A+l、A+2,那么流检测系统会作如图3所示的变化在A+2地址之前的所有数据的读取都只读用户发出的地址,而在用户发来对 A+2地址的读请求时,因为之前已经存在一个顺序流(A、A+1),所以触发了预取操作, 将向慢速IO设备发出预取请求。这时需要考虑的问题是如何处理用户需要的数据和预取 的数据的关系以及预取多大的数据比较合适,因为慢速IO设备对大块数据的访问具有较 好的性能,所以这里可以采用一种类似于处理器中Cache行的处理策略,将IO设备划分 为大小相同的若干个块,称为Region,这些Region的大小大于一次的IO请求,比如可以 设置为1MB大小。这样的话,用户的当前访问和预取操作可以合并为一次对整个Region 的读取操作。用户读取的数据可能在Region的任何位置,这时需要根据所在位置选择预取当前的Region,还是紧邻的下一个Region,具体分三种情况1、数据在Region的比较靠前的位置,那么直接将数据所在的Region —次从慢 速IO设备读到高速IO设备即可,同时返回给用户之前所请求的数据;2、数据在Region的最后一部分空间,那么应该读两部分的数据请求的数据 和紧邻的下一个Region的所有数据;3、数据横跨两个Region,那么应该一次发出从当前Region的后一部分到下一个 Region的所有数据的请求。预取的数据暂存在高速IO设备中,用户请求的数据直接返回给用户,当今后用 户按照顺序模式再次请求之后的数据时可以直接从快速的IO设备中读取,而不用再从慢 速IO设备中获取;如果预取的数据不再被用户所请求,那么之前预取的数据就浪费掉 了,但是考虑到慢速IO设备对大块数据的读取速度较快,这部分的开销在一定的命中率 的情况下还是值得的。如果经过一段时候发现命中率非常低,则表明此应用程序存在很 少的顺序的流请求,可以将预取关闭,从而减少开销,提高IO的整体性能。
权利要求
1.一种自适应缓存预取方法,其特征在于步骤如下A、检查每个流,并使用多个队列记录每次访问的地址;B、如果当前访问的地址与之前某个队列中的地址连续,则认定为一个流,触发预取 操作;C、检测预取对命中率的影响,若命中率低于阈值,则更改预取策略减少预取数量或 关闭预取。
2.如权利要求1所述一种自适应缓存预取方法,其特征在于所述预取策略包括不 预取,始终预取和检测到顺序读才预取,否则不预取。
3.如权利要求1所述一种自适应缓存预取方法,其特征在于根据用户读取的数据 选择预取的region,region为将io设备划分为大小相等的块。
4.如权利要求3所述一种自适应缓存预取方法,其特征在于预取region的策略为数据在Region的比较靠前的位置,那么直接将数据所在的Region —次从慢速IO设 备读到高速IO设备即可,同时返回给用户之前所请求的数据;数据在Region的最后一部分空间,那么应该读两部分的数据请求的数据和紧邻的 下一个Region的所有数据;数据横跨两个Region,那么应该一次发出从当前Region的后一部分到下一个Region 的所有数据的请求。
全文摘要
本发明提供了一种自适应缓存预取方法,检查每个流,并使用多个队列记录每次访问的地址;如果当前访问的地址与之前某个队列中的地址连续,则认定为一个流,触发预取操作;检测预取对命中率的影响,若命中率低于阈值,则更改预取策略减少预取数量或关闭预取。本发明在预取前对访问流做了过滤,还原了原来的多个顺序流,然后分别针对每个顺序流做预取,由于顺序预取效率非常高,整个系统的性能将得到提升。
文档编号G06F12/08GK102023931SQ201010611530
公开日2011年4月20日 申请日期2010年12月17日 优先权日2010年12月17日
发明者杨杰, 袁清波, 邵宗有 申请人:曙光信息产业(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1