用于磁盘阵列的读取方法和系统的制作方法

文档序号:6603093阅读:220来源:国知局
专利名称:用于磁盘阵列的读取方法和系统的制作方法
技术领域
本发明涉及通信领域,具体而言,涉及一种用于磁盘阵列(RAID)的读取方法和系 统。
背景技术
随着半导体技术的发展,磁盘I/O带宽和CPU/内存速度之间存在巨大的和持续扩 大的差距,因而磁盘存储往往成为系统中的性能瓶颈。为了弥合两者的差距,需要进行并行 I/O。利用磁盘阵列(RAID)技术堆叠多个磁盘的I/O能力,就可以提供更大的I/O带宽。如 果需要的I/O带宽巨大,可以进一步求助于存储网络,集群文件系统等在内的技术和架构 建造容量和性能可扩展的存储系统。相对于I/O带宽,访问延迟往往是一个更为严重的性 能问题。由于机械寻道方式的限制,磁盘的平均数据访问时间在毫秒数量级。虽然已经很 快了,但是相对于内存和高速网络的纳秒级访问时间,访问磁盘数据的代价是巨大的。更糟 糕的是,这一差距一直不断地在扩大。在这种情况下,CACHE技术对弥补两者之间的性能差异有着至关重要的作用。 CACHE系统作为最近访问数据的缓冲区,采取预读回写等策略,提高数据的命中率,从而提 高整个系统的性能。在添加了 CACHE以后,缩短了 I/O路径,每一次数据的访问都要先搜索CACHE空 间,这样需要一个高效的查找算法以避免长时间的查找而抵消CACHE带来的优势。此外 CACHE存放的数据是共享的,如何减少数据的竞争粒度也是需要关注的。CACHE系统主要处理读写命令,为提高读操作的性能,相关技术提出了预取方法。 下面将简单描述预取方法。1)预取的概念预取分为顺序预取和随机预取。在顺序预取中又分为同步预取和异步预取。同步 预取是在确定是顺序流的情况下,发生命中缺失(命中缺失即为用户访问的数据不存在于 Cache空间中)而进行的预取,它仅仅是在原来读请求之上再多读取一定长度的数据。异步 预取是在命中了页面的情况下,创建一个新的读命令并读取一定长度的数据。异步预取总 是跟同步预取一起使用的。如下图所示同步预取在预取P长的页面集后,如果P值达到了 异步预取的阈值,那么将会设置一个异步触发页面(该页面离页面集中的最后一个页面的 长度为g),如果有读操作访问设置有异步触发标识的页面时,就会触发一个异步预取。理论 上来说如果异步预取的参数P和g选取的好的话,那么读操作就不会发生非命中的情况。跟同步预取相比,异步预取的使用更加广泛有效。例如读取数据时,磁盘忙碌而 CPU等待;在处理数据时,CPU忙碌而磁盘空闲。这种交替的空闲和等待是对系统资源的一 种闲置浪费。通过异步预取,系统在后台提前进行1/0,可以消减CPU的等待时间,使之与磁 盘并行工作,实现流水线作业。2)预取参数的时机选择如图2所示,假设一个文件页面,它在Ta时刻将被应用程序实际访问,而预取算法在时间Tp发起对这个页面的I/O请求,经过操作系统和磁盘内部的调度排队,以及磁盘的 寻道和数据传送等操作,到Tr时页面数据准备就绪。那么td = Tr-Tp代表此页面的实际 I/O延迟,而应用程序感知到的延迟时间是t’ d = max(Tr-Ta,0)。如果记预取的提前量为te = Ta-Tp,如果有te彡td,即Ta-Tp彡Tr_Tp,那么就 有Tr-Ta < 0,此时t’ d = 0,底层的I/O延迟将被完全隐藏起来,应用程序不必为等待I/O 而阻塞。显然最佳的预取时机是te = td,预取太早会使每块预取数据占用更长时间的内 存,太晚了则会导致应用程序的阻塞。因而预取位置的选择也是影响预读性能的一个重要 因素。影响预取的时机即为p,g的值,p代表一次预取的数据长度(数据的读取很大一 部分的时间是在磁盘寻找,因为顺序读取1K的数据跟顺序读取1M的数据花费的时间相差 不大),但是P不能过大,因为缓存空间相对于磁盘空间而言是很小的,预取的数据过大而 用没有使用会造成缓存空间的浪费。g的值也影响到了预期的时机,如果g的值比较大,那 么在很早的时候就会进行异步预取,增加数据在缓存空间中停留的时间,如果g过小,那么 异步预取就来不及出现上图(b)的情况,需要等待数据准备好。总之,P,g的值共同影响着 预读的进行。要想预取能够取得比较好的效果,就需要有比较合适的P,g的值。但是,在相关的技术中,p,g通常是被预先设置的,而不是根据当前的读取情况动 态设置。这样,根据P和g进行预取之后,往往会出现用户需要的数据还没有从磁盘中读取 到缓存空间中,从而延长了读取时间,降低了读取的效率;或者,还会出现已经从磁盘中预 读到缓存空间中的数据并没有被访问到,从而造成了空间的浪费。

发明内容
本发明的主要目的在于提供一种用于RAID的读取方法和系统,以至少解决上述 相关技术中的读取时间较长的问题。根据本发明的一个方面,提供了一种用于磁盘阵列RAID的读取方法,其包括接 收读取命令;从缓存空间中读出上述读取命令要访问的数据;判断所访问的地址是否设置 异步预取标志;若是,则按照异步预取长度进行异步预取,并调整上述异步预取长度。进一步地,调整上述异步预取长度时,上述方法还包括调整同步预取长度。进一步地,调整上述异步预取长度包括若当前读取出来的数据没有被访问,则减 少异步预取长度,并清除上述异步预取标志;若当前访问的地址中的数据正在从RAID读取 的过程中,则增加上述异步预取触发长度或者调整异步预取标志的大小;若在按照异步预 取长度进行异步预取的过程中,如果当前预取的数据有被访问过或者在还没有检查结果时 当前预取的最后一个数据有被访问过,则增加上述异步预取长度。进一步地,按照异步预取长度进行异步预取包括从磁盘中预取具有第一长度的 数据,其中,上述第一长度为调整前的异步预取长度与上述读取命令所需访问的但未命中 的地址的个数之和;在上述缓存空间中确定上次读取的最后一个地址;从所确定的地址的 下一个地址开始读取上述第一长度的数据。进一步地,上述缓存空间中没有上述读取命令要访问的数据,上述方法还包括按 照同步预取长度进行同步预取;调整上述同步预取长度。进一步地,调整上述同步预取长度时,上述方法还包括调整异步预取长度。
进一步地,调整上述同步预取长度包括若当前同步预取出来的数据并没有被访 问,则减小上述同步预取长度;或者在当前访问的数据预取出来之后,增加上述同步预取长度。进一步地,按照同步预取长度进行同步预取包括从磁盘中预取具有第二长度的 数据,其中,上述第二长度为调整前的同步预取长度与上述读取命令所需访问的但未命中 的地址的个数之和;在上述缓存空间中确定上次读取的最后一个地址;从所确定的地址的 下一个地址开始读取上述第二长度的数据。根据本发明的另一方面,提供了一种用于RAID的读取系统,其包括命令处理模 块,用于接收读取命令;读出模块,用于从缓存空间中读出上述读取命令要访问的数据;预 取模块,用于在判断所访问的地址设置有异步预取标志时,按照异步预取长度进行异步预 取,并调整上述异步预取长度。进一步地,上述预取模块还用于在上述缓存空间中没有上述读取命令要访问的数 据时,按照同步预取长度进行同步预取,并调整上述当前的同步预取长度。本发明具有以下有益效果1)通过动态调整同步预取和异步预取的长度,使得预取更加符合系统运行的实际 情况,尽量避免了用户需要的数据还没有从磁盘中读取到缓存空间中、或者,已经从磁盘中 预读到缓存空间中的数据并没有被访问到等问题,有效地提高cache空间的利用率,缩短 读取的时间,提高读取的效率。2)同时调整异步预取长度和同步预取长度,增加了对控制的灵活性。3)通过CACHE系统的实现,缓存最近访问的数据,提高整个系统的性能。


此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发 明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图1是根据相关技术中的异步预取方法的示意图;图2是根据相关技术中的异步预取I/O与读命令时间线的示意图;图3是根据本发明实施例的Cache子系统在整个系统架构中的位置示意图;图4是根据本发明实施例的Cache子系统的功能模块的示意图;图5是根据本发明实施例的使用Radix-Tree和Lru链表管理整个Cache空间的 示意图;图6是根据本发明实施例的用于RAID的读取方法的流程图;图7是根据本发明实施例的用于RAID的读取方法中的预取步骤的示意图;图8是根据本发明实施例的用于RAID的读取系统的示意图。
具体实施例方式下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的 情况下,本申请中的实施例及实施例中的特征可以相互组合。首先描述本发明实施例所采用的Cache子系统。该Cache子系统可以作为用于磁 盘阵列RAID的读取系统。
图3是根据本发明实施例的Cache子系统在整个系统架构中的位置示意图。如图 3所示,整个系统架构主要包括主机服务器31、SCSI目标器32、Cache子系统33、Raid管 理器34、SCSI启动器35和SCSI磁盘36。主机服务器31对存储系统访问时,将会发送SCSI命令。SCSI目标器32接收到 SCSI命令后,将对命令进行解析,然后向Cache子系统33发送I/O请求。Cache子系统33 响应SCSI目标器的I/O请求。如果访问的数据不在Cache中时,将向RAID管理器34提交 实际的I/O请求操作。RAID管理器34会将I/O请求分解到具体的存储设备上执行,例如, 通过SCSI启动器35访问SCSI磁盘36。下面将结合图6来描述图3所示的Cache子系统所采用的用于磁盘阵列RAID的 读取方法。图6是根据本发明实施例的用于磁盘阵列RAID的读取方法的流程图。如图6所 示,用于磁盘阵列RAID的读取方法包括如下步骤S61,接收读取命令。优选的,读取命令用于指示缓存空间中待访问的地址范围;S62,从缓存空间中读出读取命令要访问的数据。S63,判断所访问的地址是否设置异步预取标志。S64,若是,则按照异步预取长度进行异步预取,并调整异步预取长度。相关技术中,异步预取长度是保持不变的,而在本实施例中,在调整当前的异步预 取长度之后,对下一个读取命令来说,异步预取长度是根据上一次读取命令所读取的情况 来进行调整的,也就是说,根据上一次的情况来提前对下一个读取命令中的预取参数进行 设置。例如,在出现用户从磁盘中预读到缓存空间中的数据很快被访问时,增加异步预取 长度;或者,在已经从磁盘中预读到缓存空间中的数据并没有被访问到时,减小异步预取长 度。通过上述对异步预取长度进行的动态调整,使得预取更加符合系统运行的实际情 况,尽量避免了用户需要的数据还没有从磁盘中读取到缓存空间中、或者,已经从磁盘中预 读到缓存空间中的数据并没有被访问到等问题,有效地提高cache空间的利用率,缩短读 取的时间,提高读取的效率。优选的,在调整当前的异步预取长度时,还可以调整当前的同步预取长度。通过同 时调整异步预取长度和同步预取长度,增加了对控制的灵活性。优选的,若当前访问的地址上没有保存有数据,则按照当前的同步预取长度进行 同步预取;调整当前的同步预取长度。与动态调整异步预取长度相似,在调整当前的同步预取长度之后,对下一次读取 命令来说,同步预取长度是根据上一次读取命令所读取的情况来进行调整的,也就是说,根 据上一次的情况来提前对下一次读取命令中的预取参数进行设置。例如,在触发同步预取 后,自动增加同步预取长度;或者,在已经从磁盘中预读到缓存空间中的数据并没有被访问 到时,减小同步预取长度。同样,通过上述对同步预取长度进行的动态调整,使得预取更加符合系统运行的 实际情况,尽量避免了用户需要的数据还没有从磁盘中读取到缓存空间中、或者,已经从磁 盘中预读到缓存空间中的数据并没 被访问到等问题,有效地提高cache空间的利用率,缩短读取的时间,提高读取的效率。此外,在调整当前的同步预取长度时,还可以调整当前的异步预取长度。通过同时 调整异步预取长度和同步预取长度,增加了对控制的灵活性。优选的,在本实施例中,在预取完成一定时间后,检查本次预取的结果。根据检查 的结果,调整当前的异步预取长度包括1)若当前读取出来的数据没有被访问时,则减少异步预取长度p,清除异步预取 设置的异步预取标志。通过减少下次预取数据的长度以及清除下次异步预取的标志,可以 避免不必要的读取操作,节省空间,提高空间利用率。2)若当前访问的地址中的数据正在从RAID读取当中,则增加所述异步预取触发 长度或者调整异步预取标志g的大小(这里,异步预取标志g指的是异步触发页面离页面 集中的最后一个页面的长度),例如,增大当前的异步触发标志g的值。因为此时需要等待 从磁盘中将用户需要的数据读取到缓存空间中,在这种情况下,增大当前的异步触发标志g 的值,提前进行预取,使得缩短等待的时间,提高了读取效率。3)若在本次预取过程中,如果当前预取的数据有被访问过或者在还没有检查结果 时当前预取的最后一个数据有被访问过,那么增大异步预取的长度。这样说明当前需要更 加积极的预取策略,增大预取长度,提高预取效率。优选的,在本实施例中,在预取完成一定时间后,检查本次预取的结果。根据检查 的结果,调整当前的同步预取长度包括1)若当前同步预取访问出来的数据并没有被访问,则减小当前的同步预取长度。 如果当前同步预取还设置了异步预取的标识,则清除异步预取的标识。这样,避免不必要的 预取,可以节省空间,提高空间利用率。2)当前访问的数据预取出来以后,自动增加同步预取的长度。如果同步预取的长 度达到异步预取的阈值,设置异步预取的标识。优选的,在本实施例中,按照当前的异步预取长度进行异步预取包括1)从磁盘中预取具有第一长度的数据,其中,第一长度为调整前的异步预取长度 与读取命令所需访问的但未命中的地址的个数之和;2)在缓存空间中确定上次读取的最后一个地址;3)从所确定的地址的下一个地址开始读取第一长度的数据。优选的,在本实施例中,按照当前的同步预取长度进行同步预取包括1)从磁盘中预取具有第二长度的数据,其中,所述第二长度为调整前的同步预取 长度与读取命令所需访问的但未命中的地址的个数之和;2)在所述缓存空间中确定上次读取的最后一个地址;3)从所确定的地址的下一个地址开始读取上次读取的最后一个地址。下面将结合图7对用于磁盘阵列RAID的读取方法中的预取步骤进行详细的描述。图7是根据本发明实施例的用于磁盘阵列RAID的读取方法中的预取步骤的示意 图。如图7所示,用于磁盘阵列RAID的读取方法中的预取步骤包括S71,依次访问由读命令指示的待读取的地址范围。如果当前访问的地址上保存有 数据,则称为命中Cache节点,转至S72 ;否则,转至S75。S72,判断当前访问的地址是否设置异步预取标志。如设置,则转至S73 ;否则,转至 S79。S73,进行异步预取。具体的,从磁盘中预取具有第一长度的数据,其中,所述第一 长度为调整前的异步预取长度与所述读取命令所需访问的但未命中的地址的个数之和;在 缓存空间中确定上次读取的最后一个地址;从所确定的地址的下一个地址开始读取第一长 度的数据。在本实施例中,“从磁盘中预取具有第一长度的数据”的步骤与“在缓存空间中 确定上次读取的最后一个地址”的步骤可以同时进行,或按任意顺序进行。执行异步预取操 作以后,清除该地址上的异步预取标志。S74,调整异步预取参数。具体的,可以按照以下情况调整预取参数1)若当前读取出来的数据没有被访问,则减少异步预取长度,并清除异步预取设 置的异步预取标志;2)若当前访问的地址中的数据正在从RAID读取的过程中,则增加所述异步预取 触发长度或者调整异步预取标志g的大小(这里,异步预取标志g指的是异步触发页面离 页面集中的最后一个页面的长度),例如,增大当前的异步触发标志g的值;3)若在按照异步预取长度进行异步预取的过程中,如果当前预取的数据有被访问 过或者在还没有检查结果时当前预取的最后一个数据有被访问过,则增加所述异步预取长 度。S75,判断是否是顺序流。若是,转至S76 ;否则,转至S78。具体的,判断是否为顺序流的步骤包括1)确定当前访问的地址为缓存空间中连续的第N个地址;2)若N大于阈值,则为顺序流;否则,为非顺序流。S76,进行同步预取。具体的,通过以下步骤进行同步预取1)从磁盘中预取具有第二长度的数据,其中,所述第二长度为调整前的同步预取 长度与所述读取命令所需访问的但未命中的地址的个数之和;2)在所述缓存空间中确定上次读取的最后一个地址;3)从所确定的地址的下一个地址开始读取所述第二长度的数据。S77,调整同步预取参数。具体的,可以按照以下情况调整预取参数1)若当前同步预取出来的数据并没有被访问,则减小所述同步预取长度,如果当 前同步预取还设置了异步预取的标识,则清除异步预取的标识;或者2)在当前访问的数据预取出来之后,自动增加同步预取的长度。如果同步预取的 长度达到异步预取的阈值,设置异步预取的标识。S78,从磁盘中读取一个数据到当前访问的地址中,并从当前访问的地址中将该数 据读出。S79,进行读命令的其他操作。本发明实施例适用于在不同的情况下对异步预取长度和/或同步预取长度进行 动态调整。下面将描述不同情况下进行预取长度动态调整的具体过程的实施例。实施例1假定顺序流的阈值为8,达到异步预取的值为6,p的初始值为4。具体的,A命令访问的地址为6-10,原来cache空间中0_6地址中的数据已经存 在,那么在处理A命令时,7没有命中,从磁盘中读取,当访问到地址8时,这时候已经达到一个顺序流的要求,触发一个同步预取的操作,将一次性的从磁盘中读取8-14的数据到 cache空间中,当这次预取数据完成以后,我们就增大p的值(例如由原来的4增大到6), 我们把这个值存放在管理地址14数据的数据结构上。由于此时的p = 6,已经达到异步预 取的阈值,我们设置g = P/2.,那么在14-3 = 11的位置上设置一个异步预取的标识。在上述情况下,假设C命令访问的地址为8-12,那么在命中11的时候,会触发一 个异步预取,读取15-22的数据,如果此时又有一个D命令访问14-18的数据,此时访问的 数据正在等待从RAID中读取出来,那么增加g的值,如从原来的3增大到4,存放在地址22 的管理数据结构中。在地址18上设置异步预取的标识。在地址15-22的预取结束后一定时间内(例如2s),我们发现15_22中的数据有被 访问过,那么增加P的值为8,并将该值存储在地址22上面;或者在15-22预取结束后,在 还没有触发检查预取结果操作的情况下,有命令命中22,那么也将增加p的值为8 (这两种 情况增加P的值不重复叠加)。实施例2在实施例1的基础上,假设读取8-14 —段时间以后,发现11-14的数据没有人访 问,那么我们就减少P的值,将14上面原来存储的p = 6的值修改为p = 4。在15-22的预取结束后一定时间内(例如2s),我们发现15-22中的数据没有用户 访问,那么减少P的值为6,并将该值存储在地址22上面。g减少为3.入股原来在18上的 异步预取的标识还存在,那么将清除18上的异步预取标识。图4是根据本发明实施例的Cache子系统的功能模块的示意图。如图4所示,该 Cache子系统包括初始化模块41、命令处理模块42、Cache管理模块43,预取/读取单元 44、回写模块45和Raid管理模块46。初始化模块41主要负责初始化模块负责模块的加载与退出,在初始化时申请内 存数据结构,创建工作线程,在退出时,释放申请的内存,注销工作线程。命令处理模块42接收从主机服务器发送来的读写命令,并对读写命令进行处理, 其中,读取命令用于指示缓存空间中待访问的地址范围。Cache子系统缓存了近一段时间访 问的磁盘数据,对于读命令,将查找缓存空间,如果找到就返回数据,如果没有找到将分配 新的缓存空间,发起磁盘读操作。对于写命令,将查找缓存空间,如果找到就返回地址空间, 没有找到就分配新的缓存空间,以接受用户的写数据。CACHE管理模块43主要负责cache空间的组织与查找。Cache空间的分配以及 cache空间的替换。它为每一个逻辑单元创建一棵Radix-Tree,提高查找效率。并为cache 数据维护一份LRU链表,保留数据流访问的历史信息,为回写和替换处理提供参考依据。回写模块45主要是在脏数据达到用户指定的比例或者脏数据在cache空间驻留 的时间超过用户指定的阈值,将脏数据同步到磁盘空间上,保证数据的一致性和完整性。Raid管理模块46用于对Raid进行管理。预取/读取单元44主要负责访问模式的识别、访问和读出数据,以及发起预取请 求和调整预读参数。预取/读取单元44主要包括访问模块441、读出模块442、预取模块443。其中, 读出模块442用于从缓存空间中读出所述读取命令要访问的数据;预取模块443用于在判 断所访问的地址设置有异步预取标志时,按照异步预取长度进行异步预取,并调整所述异步预取长度。在工作状态下,访问模块441按顺序对待访问的地址范围中的地址进行访问。在 当前访问的地址发生命中缺失的情况下(命中缺失即为用户访问的数据不存在于Cache空 间中),读出模块442将当前访问的地址上的数据从磁盘中读到Cache空间中。在当前访问 的地址发生命中的情况下,判断当前访问的地址上是否设置有异步预取标志,若设置有,则 预取模块443按照当前的异步预取长度进行异步预取,并在进行异步预取之后调整当前的 异步预取长度。优选的,在当前访问的地址上没有命中的情况下(命中即为用户访问的数据已在 cache空间中),预取模块443按照当前的同步预取长度进行同步预取。在进行同步预取子 后,调整模块444调整当前的同步预取长度。预取/读取单元44在线监控读请求,对于顺序的读请求,提前发起I/O操作请求, 将数据填充到cache空间中,并调整预读参数。在CACHE中数据是以块的方式组织的,没有 更高的抽象形式。但是可以通过10数据流以及地址的连续性来将数据块串联起来,通过在 Cache节点中添加预取参数结构,能够较好地维持数据流的读取历史信息,并通过这些信息 确定预取的时机,长度并根据实际情况进行调整。此外,这种方式也便于扩展使用不同的预 取算法,只需为不同的预取算法定义其对应的预取参数结构,而无需对整个软件架构进行 变更。图5是根据本发明实施例的使用Radix-Tree和Lru链表管理整个Cache空间的示 意图。如图5所示,存储系统上的设备资源是以逻辑单元呈现给用户使用的,每个逻辑单元 都有自己的一维地址空间,在查找cache空间时,将先确定命令访问数据所属的逻辑单元, 然后在搜索相应逻辑单元的Radix-Tree。Radix-Tree用来快速定位请求的cache节点,而 Lru链表用来记录数据访问的历史信息。Cache节点是管理的基本单元,包括预取参数,逻 辑地址,锁,引用计数,状态,数据空间等成员变量。下面将对包括图4所示的Cache子系统的RAID的缓存系统的工作流程进行详细 的描述。S1,系统初始化时,申请cache空间以及创建内核线程。S2,命令处理模块接收到上层发送的SCSI命令。对于读写命令,将其添加到各自 的等待队列中,并唤醒读命令处理线程或写命令处理线程进行处理。具体的,对于读命令,如果在cache空间中找到,那么就直接返回,如果没有找到 就从磁盘中进行读取。在此过程中可以触发预取操作,并进行相应的预取参数调整。对于写命令,如果在cache空间中找到,则获取该节点的锁,如果获取不到锁,则 等待,获取到了锁,则返回地址空间;如果没有找到,则直接分配空间,分配空间时,有可能 会触发回写线程进行处理。对于读命令,返回数据,命令处理结束。对于写命令,返回地址空间,接收上层传输 的数据,命令处理结束。本实施例在Radix-Tree中实现RCU锁,该锁能允许一块数据能够被一个写和多个 读同时访问,因而在读命令处理时,不需要考虑读跟写同时访问的情况,只需考虑多个写同 时访问同一数据的情况,简化了处理流程。采用本发明的方法和装置,与现有技术相比,提高了查找效率,减小了数据竞争情况,提高了系统的并发处理能力,有效支持了预取的实现,能够更加有效利用系统的资源, 提高系统的整体性能。本发明还提供了用于RAID的读取系统的实施例,其适用于上述实施例中描述的 用于RAID的读取方法。图8是根据本发明实施例的用于RAID的读取系统的示意图,如图 8所示,用于RAID的读取系统包括命令处理模块802,用于接收读取命令;读出模块804, 用于从缓存空间中读出上述读取命令要访问的数据;预取模块806,用于在判断所访问的 地址设置有异步预取标志时,按照异步预取长度进行异步预取,并调整上述异步预取长度。优选的,上述预取模块806还用于在上述缓存空间中没有上述读取命令要访问的 数据时,按照同步预取长度进行同步预取,并调整上述当前的同步预取长度。优选的,在本实施例中,在预取完成一定时间后,检查本次预取的结果。根据检查 的结果,调整当前的异步预取长度,其具体包括1)若当前读取出来的数据没有被访问时,则减少异步预取长度p,清除异步预取 设置的异步预取标志。通过减少下次预取数据的长度以及清除下次异步预取的标志,可以 避免不必要的读取操作,节省空间,提高空间利用率。2)若当前访问的地址中的数据正在从RAID读取当中,则增加所述异步预取触发 长度或者调整异步预取标志g的大小(这里,异步预取标志g指的是异步触发页面离页面 集中的最后一个页面的长度),例如,增大当前的异步触发标志g的值。因为此时需要等待 从磁盘中将用户需要的数据读取到缓存空间中,在这种情况下,增大当前的异步触发标志g 的值,提前进行预取,使得缩短等待的时间,提高了读取效率。3)若在本次预取过程中,如果当前预取的数据有被访问过或者在还没有检查结果 时当前预取的最后一个数据有被访问过,那么增大异步预取的长度。这样说明当前需要更 加积极的预取策略,增大预取长度,提高预取效率。优选的,在本实施例中,在预取完成一定时间后,检查本次预取的结果。根据检查 的结果,调整当前的同步预取长度,其具体包括1)若当前同步预取访问出来的数据并没有被访问,则减小当前的同步预取长度。 如果当前同步预取还设置了异步预取的标识,则清除异步预取的标识。这样,避免不必要的 预取,可以节省空间,提高空间利用率。2)当前访问的数据预取出来以后,自动增加同步预取的长度。如果同步预取的长 度达到异步预取的阈值,设置异步预取的标识。优选的,在本实施例中,按照当前的异步预取长度进行异步预取包括1)从磁盘中预取具有第一长度的数据,其中,第一长度为调整前的异步预取长度 与读取命令所需访问的但未命中的地址的个数之和;2)在缓存空间中确定上次读取的最后一个地址;3)从所确定的地址的下一个地址开始读取第一长度的数据。优选的,在本实施例中,按照当前的同步预取长度进行同步预取包括1)从磁盘中预取具有第二长度的数据,其中,所述第二长度为调整前的同步预取 长度与读取命令所需访问的但未命中的地址的个数之和;2)在所述缓存空间中确定上次读取的最后一个地址;3)从所确定的地址的下一个地址开始读取上次读取的最后一个地址。
本发明实施例具有以下有益效果1)通过动态调整同步预取和异步预取的长度,使得预取更加符合系统运行的实际 情况,尽量避免了用户需要的数据还没有从磁盘中读取到缓存空间中、或者,已经从磁盘中 预读到缓存空间中的数据并没有被访问到等问题,有效地提高cache空间的利用率,缩短 读取的时间,提高读取的效率。2)在同时调整异步预取长度和同步预取长度,增加了对控制的灵活性。3)通过CACHE系统的实现,缓存最近访问的数据,提高整个系统的性能。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用 的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成 的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储 在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示 出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或 步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技 术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修 改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
一种用于磁盘阵列RAID的读取方法,其特征在于,包括接收读取命令;从缓存空间中读出所述读取命令要访问的数据;判断所访问的地址是否设置异步预取标志;若是,则按照异步预取长度进行异步预取,并调整所述异步预取长度。
2.根据权利要求1所述的方法,其特征在于,调整所述异步预取长度时,所述方法还包 括调整同步预取长度。
3.根据权利要求1所述的方法,其特征在于,调整所述异步预取长度包括若当前读取出来的数据没有被访问,则减少异步预取长度,并清除所述异步预取标志;若当前访问的地址中的数据正在从RAID读取的过程中,则增加所述异步预取触发长 度或者调整异步预取标志的大小;若在按照异步预取长度进行异步预取的过程中,如果当前预取的数据有被访问过或者 在还没有检查结果时当前预取的最后一个数据有被访问过,则增加所述异步预取长度。
4.根据权利要求1所述的方法,其特征在于,按照异步预取长度进行异步预取包括 从磁盘中预取具有第一长度的数据,其中,所述第一长度为调整前的异步预取长度与所述读取命令所需访问的但未命中的地址的个数之和; 在所述缓存空间中确定上次读取的最后一个地址; 从所确定的地址的下一个地址开始读取所述第一长度的数据。
5.根据权利要求1所述的方法,其特征在于,所述缓存空间中没有所述读取命令要访 问的数据,所述方法还包括按照同步预取长度进行同步预取; 调整所述同步预取长度。
6.根据权利要求5所述的方法,其特征在于,调整所述同步预取长度时,所述方法还包 括调整异步预取长度。
7.根据权利要求2或5所述的方法,其特征在于,调整所述同步预取长度包括 若当前同步预取出来的数据并没有被访问,则减小所述同步预取长度;或者 在当前访问的数据预取出来之后,增加所述同步预取长度。
8.根据权利要求5所述的方法,其特征在于,按照同步预取长度进行同步预取包括 从磁盘中预取具有第二长度的数据,其中,所述第二长度为调整前的同步预取长度与所述读取命令所需访问的但未命中的地址的个数之和; 在所述缓存空间中确定上次读取的最后一个地址; 从所确定的地址的下一个地址开始读取所述第二长度的数据。
9.一种用于RAID的读取系统,其特征在于,包括 命令处理模块,用于接收读取命令;读出模块,用于从缓存空间中读出所述读取命令要访问的数据; 预取模块,用于在判断所访问的地址设置有异步预取标志时,按照异步预取长度进行 异步预取,并调整所述异步预取长度。
10.根据权利要求9所述的系统,其特征在于,所述预取模块还用于在所述缓存空间中 没有所述读取命令要访问的数据时,按照同步预取长度进行同步预取,并调整所述当前的 同步预取长度。
全文摘要
本发明公开了一种用于RAID的读取方法和系统,其中,用于RAID的读取方法包括接收读取命令;从缓存空间中读出上述读取命令要访问的数据;判断所访问的地址是否设置异步预取标志;若是,则按照异步预取长度进行异步预取,并调整上述异步预取长度。本发明通过动态调整异步预取的长度,使得预取更加符合系统运行的实际情况,解决了现有技术中的读取时间较长的问题,从而缩短读取的时间,提高读取的效率。
文档编号G06F12/08GK101853218SQ20101018339
公开日2010年10月6日 申请日期2010年5月12日 优先权日2010年5月12日
发明者周洋, 颜钦华 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1