一种释放预读资源的方法及装置与流程

文档序号:12176288阅读:201来源:国知局
一种释放预读资源的方法及装置与流程

本发明涉及存储系统的缓存设计领域,特别是涉及一种释放预读资源的方法及装置。



背景技术:

在存储系统的体系结构中,存储设备是体系的关键。一般地,存储设备可以为固态盘,也可以是不同转速的硬盘。存储设备存储着大量的数据,当需要调用到存储数据时,需要到存储设备中去寻找所需的数据并进行读取。

在读取存储数据时进行预读可以有效地减少硬盘的寻道次数,从而显著地提高了系统的性能。预读机制的利用数据局部访问的局部性特点,能够预先地将需要调用的数据保存在缓存区域,例如当主机下发读请求时,存储设备在发送给主机之前需要先将数据从存储设备读取到缓存区域中。当需要对数据进行读取时,可以从缓存区域中读取,当读命中时,即在缓存区域预读有该数据,此时就不用从磁盘中读取数据。

但是,随着预读数据的增加,其占用的存储空间和其它的资源的比重也会相应地增加。由于系统的资源的是有限的,必须在合适的时候清除预读的数据,以便释放其占用的资源。如何合理地释放预读资源是十分关键的。如果释放的时机过早,很容易出现刚刚预读的数据就被释放的情况,进而导致读命中下降。现有技术中不能恰当地选择释放预读资源的时机,基于此,本发明提出了一种释放预读资源的方法及装置。



技术实现要素:

本发明的目的是提供一种释放预读资源的方法,目的在于有效地释放预读资源,避免预读资源被过早地回收,提高读命中率;本发明的另一目的是提供一种释放预读资源的装置,其释放预读资源的时机较恰当,读命中率较高。

为解决上述技术问题,本发明提供一种释放预读资源的方法,包括:

将预读数据的缓存地址信息的映射结果存储至预读链表;

当满足预设触发条件时,将所述预读链表上的所述映射结果存储至预清除链表;

当满足数据释放条件时,删除所述预清除链表上的所述映射结果,并释放相应的预读资源。

可选地,所述将预读数据的缓存地址信息的映射结果存储至预读链表包括:

所述预读链表有两个;

将第一预读链表上原有的映射结果存储至第二预读链表,并删除所述第一预读链表上原有的映射结果;

将预读数据的缓存地址信息的映射结果存储至所述第一预读链表。

可选地,所述当满足预设触发条件时,将所述预读链表上的所述映射结果存储至预清除链表包括:

当满足所述预设触发条件时,将所述第二预读链表上原有的映射结果存储至所述预清除链表,并删除所述第二预读链表上原有的映射结果;

将所述第一预读链表上的映射结果存储至所述第二预读链表,并删除所述第一预读链表上的映射结果。

可选地,所述当满足数据释放条件时,删除所述预清除链表上的所述映射结果,并释放相应的预读资源包括:

当检测到缓冲区域的存储空间已满时,删除所述预清除链表上的所述映射结果,并释放相应的预读资源;

当检测到系统空闲时,删除所述预清除链表上的所述映射结果,并释放相应的预读资源;

当定时器触发时,删除所述预清除链表上的所述映射结果,并释放相应的预读资源。

可选地,所述预设触发条件为定时触发,定时的周期为100ms。

本发明还提供了一种释放预读资源的装置,包括:

第一存储单元,用于将预读数据的地址信息的映射结果存储至预读链表;

第二存储单元,用于当满足预设触发条件时,将所述预读链表上的所述映射结果存储至预清除链表;

释放单元,用于当满足数据释放条件时,删除所述预清除链表上的所述映射结果,并释放相应的预读资源。

可选地,所述第一存储单元包括:

第一存储子单元,用于将第一预读链表上原有的映射结果存储至第二预读链表,并删除所述第一预读链表上原有的映射结果;

第二存储子单元,用于将预读数据的缓存地址信息的映射结果存储至所述第一预读链表。

可选地,所述第二存储单元包括:

第三存储子单元,用于当满足所述预设触发条件时,将第二预读链表上原有的映射结果存储至所述预清除链表,并删除所述第二预读链表上原有的映射结果;

第四存储子单元,用于将所述第一预读链表上的映射结果存储至所述第二预读链表,并删除所述第一预读链表上的映射结果。

可选地,所述释放单元包括:

系统检查子单元,用于检测系统是否空闲;

存储检测子单元,用于检测缓冲区域的存储空间是否已满;

触发检测子单元,用于检测定时器是否触发;

清除子单元,用于删除所述预清除链表上的所述映射结果,并释放相应的预读资源。

本发明实施例所提供的一种释放预读资源的方法及装置,通过将预读数据的缓存地址信息的映射结果存储至预读链表;当满足预设触发条件时,将预读链表上的映射结果存储至预清除链表;当满足数据释放条件时,删除预清除链表上的映射结果,并释放相应的预读资源。本申请设置了预读链表和预清除链表,并且利用预设的触发条件来管理预读数据的移动。预读数据先链接到预读链表上,再链接到预清除链表,在一定的条件下,清除预清除链表上的映射结果,同时释放相应的预读数据和资源。可见,将预读资源的回收分割成几步来完成,可以有效地避免了预读数据被过早地清理,同时利用预设的触发条件来配合预读机制,可以提高读命中率。

附图说明

为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为为本发明实施例所提供的释放预读资源的一种具体实施方式的流程示意图;

图2为本发明实施例所提供的释放预读资源方法的一种具体方式的回收示意图;

图3为本发明实施例所提供的一种定时释放预读资源的流程示意图;

图4为本发明实施例提供的一种释放预读资源的装置的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参见图1,图1为本发明实施例所提供的释放预读资源的一种具体实施方式的流程示意图。

步骤101:将预读数据的缓存地址信息的映射结果存储至预读链表;

具体地,将预读的数据的存储地址信息对应的映射结果存储在预读链表上。映射结果可以是指针或者是引用,即预读数据的缓存地址的映射,映射结果直接指向存储在存储器里的另一个地址对应的数值。例如,映射结果为指针时,则指针指向预读数据的缓存地址,通过该地址指针可以准确无误地找到对应的预读的数据。

预读数据可以存储在缓存目录控制块结构体Cdcb中,在本发明实施例中可以将数据访问的最小单位设定为32KB。而预读链表在缓存目录控制块Cdcb对象中,预读链表的数量可以是一个、两个或者两个以上,实际操作中需要综合考虑存储系统的性能来决定使用几个预读链表。例如,当预读链表为两个时,此时,将第一预读链表上原有的映射结果存储至第二预读链表,并删除第一预读链表上原有的映射结果,将预读数据的缓存地址信息的映射结果存储至第一预读链表。即对于新预读的数据,可以将该新预读的数据对应的缓存目录控制块结构体对象的指针插入到至第一预读链表。在将Cdcb对象的指针从第一预读链表存储至第二预读链表后,将第一预读链表上的Cdcb对象的指针删除。当然,由于在设计的时候,链表的长度没有设定,故也可以在移动之后不删除第一预读链表上的指针信息。其第一预读链表和第二链表只是表示两个预读链表存储的先后顺序,无其它特定的含义。

步骤102:当满足预设触发条件时,将所述预读链表上的所述映射结果存储至预清除链表;

需要说明的是,其预设的触发条件可以是定时器的周期性触发。即当定时器触发时,将预读链表上的指针插入到预清除链表上。定时器的周期的大小对存储系统的性能影响较大,如果定时器的周期选择过小,会导致频繁地移动Cdcb对象的指针,间接地减少了预读数据的存在寿命,释放预读的时机不恰当。而如果定时器的周期选择过大,则会降低存储系统的性能。根据大量的测试数据的分析,可以将定时器的周期定为100ms,该周期可以很好地保证存储系统的性能,是释放预读资源的时机恰当,不会导致热点数据被过早地清除。当然,定时器的周期可以与100ms有预先范围内的误差,也可以为其它根据实际的应用操作而设定的周期。

当预读链表的数量个数不同时,该步骤的实际操作细节也会有相应的调整。例如,当预读链表有两个时,在当满足所述预设触发条件时,将第二预读链表上原有的映射结果存储至预清除链表,并删除第二预读链表上原有的映射结果;将第一预读链表上的映射结果存储至第二预读链表,并删除第一预读链表上的映射结果。当预设触发条件为定时器时,可以设定定时器的周期为100ms,则每经过100ms,将第二预读链表上原有Cdcb对象的指针插入到预清除链表中,并且将第二预读链表上的指针清除,然后将第一预读链表上的Cdcb对象的指针移动到第二预读链表上。

步骤103:当满足数据释放条件时,删除所述预清除链表上的所述映射结果,并释放相应的预读资源。

需要说明的是,数据释放条件可以是系统空闲,也可以是缓存的存储空间已满时。当数据释放条件为系统是否空闲时,通过检测当前系统没有运算任务时,将预清除链表上所存储的映射结果删除,由于每个映射结果对应着相应的预读数据,删除映射结果之后,会清除相应的预读数据,释放预读资源。而当数据释放条件为缓存的存储空间是否已满时,通过检测手段去检测缓存空间是否还有剩余,来判断是否删除映射结果,继而清除相应的预读数据,是否相应的预读资源。当然,也可以是其它的数据释放条件,比如也可以通过设置一个定时器来周期性清除映射结果来释放相应的资源。其定时器的周期可以与前面提到的用于管理映射结果的移动的定时器的周期一致。例如可以都为100ms,那么,此时,每经过100ms,系统都会进行映射结果的移动和预读资源的释放。显而易见地,用于管理释放预读资源的定时器的周期也可以是其它更加合理的数值,在此不作进一步地限定。

本发明实施例提供了一种释放预读资源的方法的一种具体实施方式,通过将预读数据的缓存地址信息的映射结果存储至预读链表;当满足预设触发条件时,将预读链表上的映射结果存储至预清除链表;当满足数据释放条件时,删除预清除链表上的映射结果,并释放相应的预读资源。本申请设置了预读链表和预清除链表,并且利用预设的触发条件来管理预读数据的移动。预读数据先链接到预读链表上,再链接到预清除链表,在一定的条件下,清除预清除链表上的映射结果,同时释放相应的预读数据和资源。可见,将预读资源的回收分割成几步来完成,可以有效地避免了预读数据被过早地清理,同时利用定时器来配合预读机制,可以提高读命中率。

为了更好地介绍说明释放预读资源的过程,下面将预读链表的个数设为2个,预设触发条件设定为定时器的触发,而数据释放条件是系统释放空闲。结合具体的参数和实际的操作来说明新加入的预读数据的整个释放过程。请参见图2,图2为本发明实施例所提供的释放预读资源方法的一种具体方式的回收示意图。

步骤201:将新预读的预读数据的Cdcb对象链接到第一预读链表Prefetch List 1;

当接收到主机的读请求,需要进行预读数据时,将新预读的数据存储在缓存目录控制块Cdcb对象中,将该Cdcb对象的指针或者是引用存储至第一预读链表Prefetch List 1。

需要说明的是,缓存目录控制块Cdcb的结构设计有很多,其中一种很典型的Cdcb设计一般设置有唯一ID、磁盘ID、扇区地址、互斥锁、读链表节点和写链表节点。对应一个预读数据来说,通过唯一ID可以在缓存目录中确定一个32KB的存储区域,利用磁盘ID和扇区地址可以找出一个32KB的存储区域。而互斥锁可以为缓存目录控制块提供了互斥访问机制,即互斥锁可以在修改Cdcb中的内容时,对其进行加锁操作,以便不会发生冲突。

缓存目录控制块提供了读写链表节点,在进行缓存预读数据时,可以利用缓存链表结构体Prefetchlists来对读链表节点进行管理。在缓存链表结构体中设置有互斥锁和两个预读链表以及定时器。而两个预读链表的接地都定位到一个Cdcb对象上。而此处的互斥锁用于保护缓存链表结构体,在修改缓存链表结构体中的内容之前,对缓存链表结构体进行加锁操作。而缓存链表结构体中的定时器是用于管理预读数据的移动的。定时器以一定的周期运行时,每次触发时,会对预读数据进行移动。

步骤202:当定时器触发时,将Prefetch List 1上的Cdcb对象移动到第二预读链表Prefetch List 2上,而Prefetch List 2原先链接的Cdcb对象被移动到预清除链表Demote Ready List上;

缓存链表结构体中的定时器以一定的周期运行,每次触发时,会对预读数据进行移动。首先将第二预读链表上的Cdcb对象全部移动至预清除链表Demote Ready List上,然后将第一预读链表上的Cdcb对象全部移动到第二预读链表上。由于定时器是周期性运行的,故Cdcb对象的移动也是周期性进行的。

步骤203:当系统空闲时,Demote Ready List上的Cdcb对象被移除,并释放相应的预读数据和资源。

检测机制检测到当前的系统处于空闲状态时,将预清除链表Demote Ready List上的Cdcb对象删除,继而会将保存在Cdcb中的预读数据清除。

本发明实施例结合具体的参数和结构来对释放预读资源的过程进行介绍,可以理解的是,将预读数据的Cdcb对象运用定时器周期性地移动,最后在预清除链表上将Cdcb对象销毁,进而释放相应的预读资源。无论Cdcb对象是在第一预读链表,还是在第二预读链表。亦或者是在预清除链表上,都可以导致读命中。将数据的回收过程分割成几步来完成,变相地在不降低存储系统性能的基础上增加了预读数据的生命周期,使预读数据不会被过早地清除而导致的读命中率下降。

由于利用定时器来管理数据的移动,在释放预读资源的过程中是定时处理的,通过设定一个合理的定时器周期来配合预读机制,可以保证存储系统的读性能。请参见图3,图3为本发明实施例所提供的一种定时释放预读资源的流程示意图。

步骤301:定时器触发时,锁住缓存链表结构体Prefetchlists;

通过大量的测试和经验总结,将定时器的周期设置为100ms可以使存储系统的读命中率提高。而每经过100ms,定时器触发时,对缓存链表结构体Prefetchlists进行加锁操作,利用的是缓存链表结构体内的互斥锁对象对缓存链表结构体进行加锁,以防缓存链表结构体被同时地修改。

步骤302:将第二预读链表Prefetch List 2上的Cdcb对象移动到预清除链表Demote Ready List;

步骤303:将第一预读链表Prefetch List 1上的Cdcb对象移动到第二预读链表Prefetch List 2上;

步骤304:将缓存链表结构体Prefetchlists的锁解开,等待下一次定时器触发。

当Cdcb对象的移动操作完成后,将上面加的锁解开,进而等待定时器的下一次触发。显而易见地,Cdcb对象的移动操作的耗时应小于定时器的周期100ms。

本发明实施例通过对定时器管理Cdcb对象的移动过程进行介绍。利用设置定时器的周期来配合预读机制,可以避免预读数据被过早地回收,保证了存储系统的读命中率。

下面对本发明实施例提供的释放预读资源的装置进行介绍,下文描述的释放预读资源的装置与上文描述的释放预读资源的方法可相互对应参照。

图4为本发明实施例提供的一种释放预读资源的装置的结构框图,参照图4释放预读资源的装置结构框图可以包括:

第一存储单元401,用于将预读数据的地址信息的映射结果存储至预读链表;

第二存储单元402,用于当满足预设触发条件时,将所述预读链表上的所述映射结果存储至预清除链表;

释放单元403,用于当满足数据释放条件时,删除所述预清除链表上的所述映射结果,并释放相应的预读资源。

可选地,所述第一存储单元401包括:

第一存储子单元,用于将第一预读链表上原有的映射结果存储至第二预读链表,并删除所述第一预读链表上原有的映射结果;

第二存储子单元,用于将预读数据的缓存地址信息的映射结果存储至所述第一预读链表。

可选地,所述第二存储单元402包括:

第三存储子单元,用于当满足所述预设触发条件时,将第二预读链表上原有的映射结果存储至预清除链表,并删除所述第二预读链表上原有的映射结果;

第四存储子单元,用于将第一预读链表上的映射结果存储至所述第二预读链表,并删除所述第一预读链表上的映射结果。

可选地,所述释放单元403包括:

系统检查子单元,用于检测系统是否空闲;

存储检测子单元,用于检测缓冲区域的存储空间是否已满;

触发检测子单元,用于检测定时器是否触发;

清除子单元,用于删除所述预清除链表上的所述映射结果,并释放相应的预读资源。

本发明实施例提供了一种释放预读资源的装置,通过设置预读链表和预清除链表,并且利用预设的触发条件来管理预读数据的移动。预读数据先链接到预读链表上,再链接到预清除链表,在一定的条件下,清除预清除链表上的映射结果,同时释放相应的预读数据和资源。可见,将预读资源的回收分割成几步来完成,可以有效地避免了预读数据被过早地清理,同时利用定时器来配合预读机制,可以提高读命中率。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的一种释放预读资源的方法以及装置进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1