一种自适应预读方法及装置的制造方法

文档序号:9371854阅读:279来源:国知局
一种自适应预读方法及装置的制造方法
【技术领域】
[0001]本发明属于数据处理领域,尤其涉及一种自适应预读方法及装置。
【背景技术】
[0002]随着数字化时代到来,在人们的日常生活和科学研究中,越来越多的传统业务开始数字化、网络化,促使数据爆炸式增长,这使得存储系统在整个业务处理系统中的地位也愈发重要,然而源源不断的数据流导致存储系统产生严重的输入输出I/O瓶颈问题。
[0003]计算机系统的性能主要由处理子系统性能和I/O子系统性能两部分决定;其中,CPU处理速度始终保持了高速增长,而I/O子系统其存储容量虽然增长较快,但其处理速度增长远跟不上CPU处理速度增长。
[0004]现有技术中,为了解决上述问题,从寄存器、L1/L2高度缓存、内存、闪存、到磁盘/光盘/存储网络,各级存储器硬件组成了一个金字塔结构,越是底层存储容量越大,访问速度也越慢;在操作系统层面通过缓存系统来对金字塔结构的存储硬件进行支持,预读算法作为缓存系统的重要组成部分,对提高I/O子系统的性能至关重要;预读算法通过预测即将访问的页面,并通过提前将待访问的数据批量读入内存缓存,来减少访问磁盘次数,降低等待磁盘的延迟,从而提尚i/o子系统的性能。
[0005]开源的Linux操作系统中,提供了一种按需预读的算法,该算法能有效的识别顺序读,在随机读模式下不会带来额外的时间和空间开销,且实现简单,性能较高;但是该算法支持的预读模式较少,不支持前向顺序读、跨步读等读模式,且在已有的算法框架下,较难扩展支持新的读模式。
[0006]在著名的文件系统ZFS中,提供了一种预读算法,该算法记录系统中的读请求历史序列,新的读请求到来时,与读请求序列中的每一个读请求依次比对,如果成功匹配前向/后向顺序读、跨步读等其中之一,则合并配对的两个读请求,并触发预读操作;如果未匹配成功,则加入到读请求序列。该算法记录了较多的读请求历史信息,能支持更多的读模式,但是查找配对的过程较为费时(假设系统支持m种读模式,记录了 η个读请求信息,则每次查找的复杂度为O(n*m)),特别是在多个线程并发读取时。

【发明内容】

[0007]本发明提供一种自适应预读方法及装置,以解决上述问题。
[0008]本发明提供一种自适应预读方法。上述方法包括以下步骤:
[0009]接收读请求后,获取所述读请求对应的读模式及与所述读模式对应的预读参数;
[0010]对所述读模式对应的读请求序列,按照预设更新匹配策略,进行更新匹配;
[0011]获取匹配的读请求序列的匹配计数并根据所述读请求序列的新的匹配计数,调整所述读请求序列在读请求序列排序链表中的位置后,按照获取的预读参数进行预读。
[0012]本发明还提供一种自适应预读装置,包括获取模块、更新匹配模块、排序预读模块;其中,所述获取模块通过所述更新匹配模块与所述排序预读模块相连;
[0013]所述获取模块,用于接收读请求后,获取所述读请求对应的读模式及与所述读模式对应的预读参数并将所述读模式、所述预读参数发送至所述更新匹配模块;
[0014]所述更新匹配模块,用于对所述读模式对应的读请求序列,按照预设更新匹配策略,进行更新匹配并将匹配结果发送至所述排序预读模块;
[0015]所述排序预读模块,用于获取匹配的读请求序列的匹配计数并根据所述读请求序列的新的匹配计数,调整所述读请求序列在读请求序列排序链表中的位置后,按照获取的预读参数进行预读。
[0016]通过以下方案:接收读请求后,获取所述读请求对应的读模式及与所述读模式对应的预读参数;对所述读模式对应的读请求序列,按照预设更新匹配策略,进行更新匹配;获取匹配的读请求序列的匹配计数并根据所述读请求序列的新的匹配计数,调整所述读请求序列在读请求序列排序链表中的位置后,按照获取的预读参数进行预读;实现了自适应的统计每种读模式匹配成功的概率,并在运行过程中动态调整,新的读请求优先匹配概率高的读模式,以此减少匹配的搜索次数,提高预读算法的效率。
[0017]通过以下方案:所述读模式包括顺序读模式、跨步读模式;其中,所述顺序读模式包括前向顺序读、后向顺序读;所述跨步读模式包括前向跨步读、后向跨步读;有效匹配多种读模式,并灵活适用于不同的应用场景。
【附图说明】
[0018]此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0019]图1为本发明实施例1的算法数据结构示意图;
[0020]图2为本发明实施例2的顺序读判定示意图;
[0021]图3为本发明实施例3的跨步读判定方法及预读长度示意图;
[0022]图4为本发明实施例4的预读算法处理流程图;
[0023]图5所示为本发明实施例5的自适应预读方法处理流程图;
[0024]图6所示为本发明实施例6的自适应预读装置结构图;
[0025]图7所示为本发明实施例7的又一自适应预读装置结构图;
[0026]图8所示为本发明实施例8的又一自适应预读装置结构图。
【具体实施方式】
[0027]下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
[0028]图1为本发明实施例1的算法数据结构示意图,如图1所示,读请求序列CNT使用双向链表来实现,即为图中标明的读请求链表;其中,有两个节点的读请求链表,表示已识别的跨步读序列;有一个节点的读请求链表,表示已识别的顺序读序列或未识别读模式的序列。
[0029]所有读请求序列也通过一双向链表进行链接,即为图中的读请求序列排序链表,该链表中的每一节点,保存对应读请求序列的概率统计值,该概率统计值表示该读请求序列被匹配成功的概率。算法实际实现时,该概率统计值使用读请求序列成功匹配次数表示。
[0030]应用层下发的读请求可由二元组R (offset,len)表示,为支持预读,增加prefetch—Ien表示预读的长度,增加prefetch—offset表示预读的偏移,由此成为四元组R(offset,len, prefetch—offset,prefetch—len)0
[0031]图2为本发明实施例2的顺序读判定不意图,如图2所不,展不了后向顺序读和肖LI向顺序读的判定方法及预读长度。
[0032]后向顺序读需满足R2.0ffset = Rl.0ffset+Rl.len,另外R2触发的预读长度和起始偏移由以下规则确定:
[0033]如果Rl.prefetch—len> = R2.len,则 R2.prefetch—offset = R2.0ffset+Rl.prefetch—len,R2.prefetch—len = R2.1en ;
[0034]如果Rl.prefetch—len〈R2.len,则 R2.prefetch—offset = R2.0ffset+R2.len,R2.prefetch—len = R2.1en ;
[0035]前向顺序读需满足R2.0ffset+R2.1en = Rl.0ffset-1,另外R2触发的预读长度和起始偏移由以下规则确定:
[0036]如果Rl.prefetch—len> = R2.len,则 R2.prefetch—offset = R2.0ffset-Rl.prefetch—len+R2.len,R2.prefetch—len = R2.1en ;
[0037]如果Rl.prefetch—len〈R2.len,则 R2.prefetch—offset = R2.0ffset,R2.prefetch—len = R2.1en0
[0038]图3为本发明实施例3的跨步读判定方法及预读长度示意图,如图3所示,后向跨步读需满足R2.0ffset = Rl.0ffset+Rl.len+stride,另外R2触发的预读长度和起始偏移由以下规则确定:
[0039]如果Rl.prefetch—len> = R2.len,则 R2.prefetch
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1