CN101853218B - 用于磁盘阵列的读取方法和系统 - Google Patents

用于磁盘阵列的读取方法和系统 Download PDF

Info

Publication number
CN101853218B
CN101853218B CN201010183392.1A CN201010183392A CN101853218B CN 101853218 B CN101853218 B CN 101853218B CN 201010183392 A CN201010183392 A CN 201010183392A CN 101853218 B CN101853218 B CN 101853218B
Authority
CN
China
Prior art keywords
asynchronous
prefetch
data
accessed
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201010183392.1A
Other languages
English (en)
Other versions
CN101853218A (zh
Inventor
颜钦华
周洋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN201010183392.1A priority Critical patent/CN101853218B/zh
Publication of CN101853218A publication Critical patent/CN101853218A/zh
Application granted granted Critical
Publication of CN101853218B publication Critical patent/CN101853218B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种用于RAID的读取方法和系统,其中,用于RAID的读取方法包括:接收读取命令;从缓存空间中读出上述读取命令要访问的数据;判断所访问的地址是否设置异步预取标志;若是,则按照异步预取长度进行异步预取,并调整上述异步预取长度。本发明通过动态调整异步预取的长度,使得预取更加符合系统运行的实际情况,解决了现有技术中的读取时间较长的问题,从而缩短读取的时间,提高读取的效率。

Description

用于磁盘阵列的读取方法和系统
技术领域
本发明涉及通信领域,具体而言,涉及一种用于磁盘阵列(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忙碌而磁盘空闲。这种交替的空闲和等待是对系统资源的一种闲置浪费。通过异步预取,系统在后台提前进行I/O,可以消减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中数据是以块的方式组织的,没有更高的抽象形式。但是可以通过IO数据流以及地址的连续性来将数据块串联起来,通过在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系统的实现,缓存最近访问的数据,提高整个系统的性能。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种用于磁盘阵列RAID的读取方法,其特征在于,包括:
接收读取命令;
从缓存空间中读出所述读取命令要访问的数据;
判断所访问的地址是否设置异步预取标志;
若是,则按照异步预取长度进行异步预取,并调整所述异步预取长度;
调整所述异步预取长度包括:若当前读取出来的数据没有被访问,则减少异步预取长度,并清除所述异步预取标志;若当前访问的地址中的数据正在从RAID读取的过程中,则增加所述异步预取长度或者调整异步预取标志的大小;若在按照异步预取长度进行异步预取的过程中,如果当前预取的数据有被访问过或者在还没有检查结果时当前预取的最后一个数据有被访问过,则增加所述异步预取长度。
2.根据权利要求1所述的方法,其特征在于,调整所述异步预取长度时,所述方法还包括:调整同步预取长度。
3.根据权利要求1所述的方法,其特征在于,按照异步预取长度进行异步预取包括:
从磁盘中预取具有第一长度的数据,其中,所述第一长度为调整前的异步预取长度与所述读取命令所需访问的但未命中的地址的个数之和;
在所述缓存空间中确定上次读取的最后一个地址;
从所确定的地址的下一个地址开始读取所述第一长度的数据。
4.根据权利要求1所述的方法,其特征在于,所述缓存空间中没有所述读取命令要访问的数据,所述方法还包括:
按照同步预取长度进行同步预取;
调整所述同步预取长度。
5.根据权利要求4所述的方法,其特征在于,调整所述同步预取长度时,所述方法还包括:调整异步预取长度。
6.根据权利要求2或4所述的方法,其特征在于,调整所述同步预取长度包括:
若当前同步预取出来的数据并没有被访问,则减小所述同步预取长度;或者
在当前访问的数据预取出来之后,增加所述同步预取长度。
7.根据权利要求4所述的方法,其特征在于,按照同步预取长度进行同步预取包括:
从磁盘中预取具有第二长度的数据,其中,所述第二长度为调整前的同步预取长度与所述读取命令所需访问的但未命中的地址的个数之和;
在所述缓存空间中确定上次读取的最后一个地址;
从所确定的地址的下一个地址开始读取所述第二长度的数据。
8.一种用于RAID的读取系统,其特征在于,包括:
命令处理模块,用于接收读取命令;
读出模块,用于从缓存空间中读出所述读取命令要访问的数据;
预取模块,用于在判断所访问的地址设置有异步预取标志时,按照异步预取长度进行异步预取,并调整所述异步预取长度;
其中,调整所述异步预取长度包括:若当前读取出来的数据没有被访问,则减少异步预取长度,并清除所述异步预取标志;若当前访问的地址中的数据正在从RAID读取的过程中,则增加所述异步预取长度或者调整异步预取标志的大小;若在按照异步预取长度进行异步预取的过程中,如果当前预取的数据有被访问过或者在还没有检查结果时当前预取的最后一个数据有被访问过,则增加所述异步预取长度。
9.根据权利要求8所述的系统,其特征在于,所述预取模块还用于在所述缓存空间中没有所述读取命令要访问的数据时,按照同步预取长度进行同步预取,并调整所述当前的同步预取长度。
CN201010183392.1A 2010-05-12 2010-05-12 用于磁盘阵列的读取方法和系统 Active CN101853218B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201010183392.1A CN101853218B (zh) 2010-05-12 2010-05-12 用于磁盘阵列的读取方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010183392.1A CN101853218B (zh) 2010-05-12 2010-05-12 用于磁盘阵列的读取方法和系统

Publications (2)

Publication Number Publication Date
CN101853218A CN101853218A (zh) 2010-10-06
CN101853218B true CN101853218B (zh) 2015-05-20

Family

ID=42804719

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010183392.1A Active CN101853218B (zh) 2010-05-12 2010-05-12 用于磁盘阵列的读取方法和系统

Country Status (1)

Country Link
CN (1) CN101853218B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105740166B (zh) * 2014-12-11 2020-05-19 中兴通讯股份有限公司 缓存的读取、读取处理方法及装置
CN105988873B (zh) * 2015-02-04 2019-10-08 深圳神州数码云科数据技术有限公司 一种优化处理资源的方法及装置
CN111625482B (zh) * 2016-03-23 2022-02-01 北京忆恒创源科技股份有限公司 顺序流检测方法与装置
CN111930513B (zh) * 2020-08-31 2023-02-28 Oppo(重庆)智能科技有限公司 文件预读的调整方法、装置、电子设备及存储介质
CN113296692B (zh) * 2020-09-29 2022-08-16 阿里云计算有限公司 数据读取方法及装置
CN114924798B (zh) * 2022-07-19 2022-10-11 北京卡普拉科技有限公司 针对异步i/o技术的数据预取方法、系统、电子设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5410653A (en) * 1992-06-16 1995-04-25 International Business Machines Corporation Asynchronous read-ahead disk caching using multiple disk I/O processes and dynamically variable prefetch length
CN1924834A (zh) * 2006-09-08 2007-03-07 华为技术有限公司 一种高速存储器预读方法及装置
CN101634970A (zh) * 2009-08-26 2010-01-27 成都市华为赛门铁克科技有限公司 预取长度调整方法、装置和存储系统

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7464246B2 (en) * 2004-09-30 2008-12-09 International Business Machines Corporation System and method for dynamic sizing of cache sequential list
US7856533B2 (en) * 2007-11-01 2010-12-21 International Business Machines Corporation Probabilistic method for performing memory prefetching

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5410653A (en) * 1992-06-16 1995-04-25 International Business Machines Corporation Asynchronous read-ahead disk caching using multiple disk I/O processes and dynamically variable prefetch length
CN1924834A (zh) * 2006-09-08 2007-03-07 华为技术有限公司 一种高速存储器预读方法及装置
CN101634970A (zh) * 2009-08-26 2010-01-27 成都市华为赛门铁克科技有限公司 预取长度调整方法、装置和存储系统

Also Published As

Publication number Publication date
CN101853218A (zh) 2010-10-06

Similar Documents

Publication Publication Date Title
CN110058786B (zh) 用于控制存储系统中的写请求的方法、装置和计算机程序产品
US9304928B2 (en) Systems and methods for adaptive prefetching
CN101038532B (zh) 数据存储装置及其方法
CN102023931B (zh) 一种自适应缓存预取方法
US7716425B1 (en) Prefetching data in distributed storage systems
US10572150B2 (en) Memory network with memory nodes controlling memory accesses in the memory network
CN101853218B (zh) 用于磁盘阵列的读取方法和系统
US8108629B2 (en) Method and computer for reducing power consumption of a memory
US8776158B1 (en) Asynchronous shifting windows caching for forward and backward video streaming
JP4451717B2 (ja) 情報処理装置および情報処理方法
US9141648B1 (en) Management of database blocks
US10417137B2 (en) Flushing pages from solid-state storage device
US20140006687A1 (en) Data Cache Apparatus, Data Storage System and Method
CN1735869A (zh) 降低存储器访问等待时间的存储器访问调度方法和装置
JPH05324471A (ja) キャッシュ制御装置
US20190095347A1 (en) Multi-port shared cache apparatus
Bock et al. Concurrent migration of multiple pages in software-managed hybrid main memory
CN108572799B (zh) 一种双向哈希链表的异构内存系统数据页迁移方法
US8019939B2 (en) Detecting data mining processes to increase caching efficiency
US10705977B2 (en) Method of dirty cache line eviction
KR20170002866A (ko) 분산 환경에서 사용자 애플리케이션의 액세스 특성에 따른 적응형 캐시 관리 방법
CN113778662A (zh) 内存回收方法及装置
CN110795213B (zh) 一种虚拟机迁移过程中活跃内存预测迁移方法
Shin et al. Providing QoS through host controlled flash SSD garbage collection and multiple SSDs
US20120047330A1 (en) I/o efficiency of persistent caches in a storage system

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant